aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.DS_Storebin0 -> 6148 bytes
-rw-r--r--HttpServer/.gitignore (renamed from MetisForwarder/.gitignore)0
-rw-r--r--HttpServer/app/.gitignore (renamed from MetisForwarder/app/.gitignore)0
-rw-r--r--HttpServer/app/CMakeLists.txt85
-rw-r--r--HttpServer/app/build.gradle79
-rw-r--r--HttpServer/app/cmake/Modules/FindCCNX_Common.cmake52
-rw-r--r--HttpServer/app/cmake/Modules/FindCCNX_Portal.cmake53
-rw-r--r--HttpServer/app/cmake/Modules/FindCCNX_Transport_Rta.cmake63
-rw-r--r--HttpServer/app/cmake/Modules/FindCURL.cmake69
-rw-r--r--HttpServer/app/cmake/Modules/FindHttpServer.cmake39
-rw-r--r--HttpServer/app/cmake/Modules/FindJsoncpp.cmake47
-rw-r--r--HttpServer/app/cmake/Modules/FindLibEvent.cmake (renamed from MetisForwarder/app/cmake/Modules/FindLibEvent.cmake)0
-rw-r--r--HttpServer/app/cmake/Modules/FindLibicnet.cmake39
-rw-r--r--HttpServer/app/cmake/Modules/FindLibparc.cmake52
-rw-r--r--HttpServer/app/cmake/Modules/FindLongBow.cmake58
-rw-r--r--HttpServer/app/cmake/Modules/FindUncrustify.cmake (renamed from MetisForwarder/app/cmake/Modules/FindUncrustify.cmake)0
-rw-r--r--HttpServer/app/cmake/Modules/detectCacheSize.cmake (renamed from MetisForwarder/app/cmake/Modules/detectCacheSize.cmake)0
-rw-r--r--HttpServer/app/cmake/Modules/version.cmake (renamed from MetisForwarder/app/cmake/Modules/version.cmake)0
-rwxr-xr-xHttpServer/app/cmake/get_version.sh (renamed from MetisForwarder/app/cmake/get_version.sh)0
-rw-r--r--HttpServer/app/httpserver.keystorebin0 -> 2257 bytes
-rw-r--r--HttpServer/app/proguard-rules.pro (renamed from iGetAndroid/app/proguard-rules.pro)8
-rw-r--r--HttpServer/app/src/androidTest/java/icn/httpserver/com/hicnhttpserver/ExampleInstrumentedTest.java (renamed from MetisForwarder/app/src/androidTest/java/com/metis/ccnx/metisforwarder/ExampleInstrumentedTest.java)12
-rw-r--r--HttpServer/app/src/main/AndroidManifest.xml (renamed from MetisForwarder/app/src/main/AndroidManifest.xml)11
-rw-r--r--HttpServer/app/src/main/cpp/httpServerWrap.cpp236
-rw-r--r--HttpServer/app/src/main/ic_launcher-web.pngbin0 -> 15044 bytes
-rw-r--r--HttpServer/app/src/main/java/icn/httpserver/com/httpserver/HttpServerActivity.java187
-rw-r--r--HttpServer/app/src/main/java/icn/httpserver/com/service/HttpServerService.java156
-rw-r--r--HttpServer/app/src/main/java/icn/httpserver/com/supportlibrary/HttpServer.java46
-rw-r--r--HttpServer/app/src/main/java/icn/httpserver/com/utility/Constants.java28
-rw-r--r--HttpServer/app/src/main/java/icn/httpserver/com/utility/ResourcesEnumerator.java34
-rw-r--r--HttpServer/app/src/main/res/drawable-v24/ic_launcher_foreground.xml34
-rw-r--r--HttpServer/app/src/main/res/drawable/ic_launcher_background.xml170
-rw-r--r--HttpServer/app/src/main/res/layout/activity_http_server.xml (renamed from MetisForwarder/app/src/main/res/layout/activity_metis_forwarder.xml)154
-rw-r--r--HttpServer/app/src/main/res/layout/popup_message.xml44
-rw-r--r--HttpServer/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml5
-rw-r--r--HttpServer/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml5
-rw-r--r--HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher.pngbin0 -> 1408 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.pngbin0 -> 1626 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngbin0 -> 3195 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher.pngbin0 -> 879 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.pngbin0 -> 1022 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngbin0 -> 1903 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher.pngbin0 -> 2006 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.pngbin0 -> 2247 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngbin0 -> 4725 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngbin0 -> 3300 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.pngbin0 -> 3568 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngbin0 -> 7656 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngbin0 -> 4719 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.pngbin0 -> 4874 bytes
-rw-r--r--HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngbin0 -> 11172 bytes
-rw-r--r--HttpServer/app/src/main/res/values/colors.xml (renamed from MetisForwarder/app/src/main/res/values/colors.xml)0
-rw-r--r--HttpServer/app/src/main/res/values/ic_launcher_background.xml4
-rw-r--r--HttpServer/app/src/main/res/values/strings.xml3
-rw-r--r--HttpServer/app/src/main/res/values/styles.xml (renamed from MetisForwarder/app/src/main/res/values/styles.xml)0
-rw-r--r--HttpServer/app/src/test/java/icn/httpserver/com/hicnhttpserver/ExampleUnitTest.java (renamed from iGetAndroid/app/src/test/java/com/iget/ccnx/igetandroid/ExampleUnitTest.java)9
-rw-r--r--HttpServer/build.gradle28
-rw-r--r--HttpServer/gradle.properties (renamed from MetisForwarder/gradle.properties)0
-rw-r--r--HttpServer/gradle/wrapper/gradle-wrapper.jar (renamed from MetisForwarder/gradle/wrapper/gradle-wrapper.jar)bin53636 -> 53636 bytes
-rw-r--r--HttpServer/gradle/wrapper/gradle-wrapper.properties (renamed from MetisForwarder/gradle/wrapper/gradle-wrapper.properties)4
-rwxr-xr-xHttpServer/gradlew (renamed from MetisForwarder/gradlew)0
-rw-r--r--HttpServer/gradlew.bat (renamed from MetisForwarder/gradlew.bat)0
-rw-r--r--HttpServer/settings.gradle (renamed from MetisForwarder/settings.gradle)0
-rw-r--r--IGetAndroid/IGetAndroid.iml19
-rw-r--r--IGetAndroid/app/.DS_Storebin0 -> 6148 bytes
-rw-r--r--IGetAndroid/app/.gitignore (renamed from iGetAndroid/app/.gitignore)0
-rw-r--r--IGetAndroid/app/CMakeLists.txt (renamed from iGetAndroid/app/CMakeLists.txt)21
-rw-r--r--IGetAndroid/app/app.iml161
-rw-r--r--IGetAndroid/app/build.gradle73
-rw-r--r--IGetAndroid/app/cmake/Modules/FindCCNX_Common.cmake (renamed from MetisForwarder/app/cmake/Modules/FindCCNX_Common.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/FindCCNX_Portal.cmake (renamed from MetisForwarder/app/cmake/Modules/FindCCNX_Portal.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake (renamed from MetisForwarder/app/cmake/Modules/FindCCNX_Transport_Rta.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/FindLibEvent.cmake (renamed from iGetAndroid/app/cmake/Modules/FindLibEvent.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/FindLibicnet.cmake (renamed from MetisForwarder/app/cmake/Modules/FindLibicnet.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/FindLibparc.cmake (renamed from MetisForwarder/app/cmake/Modules/FindLibparc.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/FindLongBow.cmake (renamed from MetisForwarder/app/cmake/Modules/FindLongBow.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/FindUncrustify.cmake (renamed from iGetAndroid/app/cmake/Modules/FindUncrustify.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/detectCacheSize.cmake (renamed from iGetAndroid/app/cmake/Modules/detectCacheSize.cmake)0
-rw-r--r--IGetAndroid/app/cmake/Modules/version.cmake (renamed from iGetAndroid/app/cmake/Modules/version.cmake)0
-rwxr-xr-xIGetAndroid/app/cmake/get_version.sh (renamed from iGetAndroid/app/cmake/get_version.sh)0
-rw-r--r--IGetAndroid/app/iget.keystorebin0 -> 2571 bytes
-rw-r--r--IGetAndroid/app/proguard-rules.pro (renamed from MetisForwarder/app/proguard-rules.pro)8
-rw-r--r--IGetAndroid/app/src/.DS_Storebin0 -> 6148 bytes
-rw-r--r--IGetAndroid/app/src/androidTest/java/icn/iget/com/igetandroid/ExampleInstrumentedTest.java26
-rw-r--r--IGetAndroid/app/src/main/.DS_Storebin0 -> 6148 bytes
-rw-r--r--IGetAndroid/app/src/main/AndroidManifest.xml (renamed from iGetAndroid/app/src/main/AndroidManifest.xml)15
-rw-r--r--IGetAndroid/app/src/main/cpp/IGetWrapper.cpp44
-rw-r--r--IGetAndroid/app/src/main/ic_launcher-web.pngbin0 -> 15041 bytes
-rw-r--r--IGetAndroid/app/src/main/java/.DS_Storebin0 -> 6148 bytes
-rw-r--r--IGetAndroid/app/src/main/java/icn/.DS_Storebin0 -> 6148 bytes
-rw-r--r--IGetAndroid/app/src/main/java/icn/iget/com/adapter/ListViewAdapter.java (renamed from iGetAndroid/app/src/main/java/com/iget/ccnx/adapter/ListViewAdapter.java)11
-rw-r--r--IGetAndroid/app/src/main/java/icn/iget/com/adapter/OutputListViewElement.java (renamed from iGetAndroid/app/src/main/java/com/iget/ccnx/adapter/OutputListViewElement.java)7
-rw-r--r--IGetAndroid/app/src/main/java/icn/iget/com/igetandroid/IGetAndroidActivity.java303
-rw-r--r--IGetAndroid/app/src/main/java/icn/iget/com/utility/Constants.java (renamed from iGetAndroid/app/src/main/java/com/iget/ccnx/utility/Constants.java)11
-rw-r--r--IGetAndroid/app/src/main/java/icn/iget/com/utility/ResourcesEnumerator.java (renamed from iGetAndroid/app/src/main/java/com/iget/ccnx/utility/ResourcesEnumerator.java)5
-rw-r--r--IGetAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml34
-rw-r--r--IGetAndroid/app/src/main/res/drawable/ic_launcher_background.xml170
-rw-r--r--IGetAndroid/app/src/main/res/layout/activity_i_get_android.xml (renamed from iGetAndroid/app/src/main/res/layout/activity_i_get.xml)56
-rw-r--r--IGetAndroid/app/src/main/res/layout/list_view_row.xml (renamed from iGetAndroid/app/src/main/res/layout/list_view_row.xml)72
-rw-r--r--IGetAndroid/app/src/main/res/layout/popup_message.xml44
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml5
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml5
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.pngbin0 -> 1422 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.pngbin0 -> 1582 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngbin0 -> 3265 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.pngbin0 -> 955 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.pngbin0 -> 1011 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngbin0 -> 1982 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.pngbin0 -> 2038 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.pngbin0 -> 2190 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngbin0 -> 4770 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngbin0 -> 3313 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.pngbin0 -> 3412 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngbin0 -> 7584 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngbin0 -> 4613 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.pngbin0 -> 4755 bytes
-rw-r--r--IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngbin0 -> 10937 bytes
-rw-r--r--IGetAndroid/app/src/main/res/values/colors.xml (renamed from iGetAndroid/app/src/main/res/values/colors.xml)0
-rw-r--r--IGetAndroid/app/src/main/res/values/ic_launcher_background.xml4
-rw-r--r--IGetAndroid/app/src/main/res/values/strings.xml3
-rw-r--r--IGetAndroid/app/src/main/res/values/styles.xml (renamed from iGetAndroid/app/src/main/res/values/styles.xml)0
-rw-r--r--IGetAndroid/app/src/test/java/icn/iget/com/igetandroid/ExampleUnitTest.java17
-rw-r--r--IGetAndroid/build.gradle (renamed from MetisForwarder/build.gradle)6
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-06-15-27-09-221.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-06-15-27-09-221.rawprotobin0 -> 3322 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-06-15-37-44-133.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-06-15-37-44-133.rawprotobin0 -> 5200 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-19-14-927.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-19-14-927.rawprotobin0 -> 1464 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-20-14-280.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-20-14-280.rawprotobin0 -> 1459 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-20-25-438.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-20-25-438.rawprotobin0 -> 1458 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-20-35-130.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-20-35-130.rawprotobin0 -> 1459 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-20-43-805.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-20-43-805.rawprotobin0 -> 4097 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-21-30-833.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-21-30-833.rawprotobin0 -> 5255 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-21-32-046.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-21-32-046.rawprotobin0 -> 1460 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-27-16-765.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-27-16-765.rawprotobin0 -> 6861 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-29-25-101.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-29-25-101.rawprotobin0 -> 6120 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-34-51-488.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-34-51-488.rawprotobin0 -> 6125 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-35-50-765.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-35-50-765.rawprotobin0 -> 6123 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-36-41-366.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-36-41-366.rawprotobin0 -> 6174 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-38-00-577.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-38-00-577.rawprotobin0 -> 6131 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-38-42-310.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-38-42-310.rawprotobin0 -> 6174 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-39-06-319.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-39-06-319.rawprotobin0 -> 6135 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-40-42-464.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-40-42-464.rawprotobin0 -> 6346 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-41-41-274.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-41-41-274.rawprotobin0 -> 6169 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-42-02-235.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-42-02-235.rawprotobin0 -> 6163 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-52-24-915.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-52-24-915.rawprotobin0 -> 3981 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-52-45-011.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-52-45-011.rawprotobin0 -> 6297 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-56-02-738.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-56-02-738.rawprotobin0 -> 6349 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-57-46-096.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-57-46-096.rawprotobin0 -> 6132 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-58-12-940.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-58-12-940.rawprotobin0 -> 6174 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-58-47-378.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-58-47-378.rawprotobin0 -> 6123 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-59-19-815.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-10-59-19-815.rawprotobin0 -> 6174 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-00-17-949.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-00-17-949.rawprotobin0 -> 6125 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-17-29-005.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-17-29-005.rawprotobin0 -> 6349 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-17-53-084.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-17-53-084.rawprotobin0 -> 6113 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-18-22-282.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-18-22-282.rawprotobin0 -> 6060 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-18-58-370.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-18-58-370.rawprotobin0 -> 6246 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-23-19-176.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-23-19-176.rawprotobin0 -> 6243 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-26-39-530.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-26-39-530.rawprotobin0 -> 6081 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-28-27-270.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-28-27-270.rawprotobin0 -> 6151 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-29-23-905.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-29-23-905.rawprotobin0 -> 6120 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-29-51-608.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-29-51-608.rawprotobin0 -> 6158 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-30-34-531.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-30-34-531.rawprotobin0 -> 6120 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-30-46-588.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-30-46-588.rawprotobin0 -> 6131 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-31-21-188.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-31-21-188.rawprotobin0 -> 6159 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-32-02-011.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-32-02-011.rawprotobin0 -> 6120 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-33-18-573.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-33-18-573.rawprotobin0 -> 6158 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-33-54-807.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-33-54-807.rawprotobin0 -> 6113 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-37-13-874.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-37-13-874.rawprotobin0 -> 6335 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-38-05-949.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-38-05-949.rawprotobin0 -> 6121 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-38-48-540.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-38-48-540.rawprotobin0 -> 6167 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-39-46-667.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-39-46-667.rawprotobin0 -> 6120 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-40-16-349.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-40-16-349.rawprotobin0 -> 6161 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-41-14-700.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-11-41-14-700.rawprotobin0 -> 6125 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-13-29-52-198.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-13-29-52-198.rawprotobin0 -> 5247 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-13-30-50-375.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-13-30-50-375.rawprotobin0 -> 5169 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-13-35-05-905.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-13-35-05-905.rawprotobin0 -> 5007 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-13-42-42-876.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-13-42-42-876.rawprotobin0 -> 4894 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-32-10-512.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-32-10-512.rawprotobin0 -> 1464 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-33-58-346.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-33-58-346.rawprotobin0 -> 1460 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-34-06-860.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-34-06-860.rawprotobin0 -> 4086 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-34-58-871.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-34-58-871.rawprotobin0 -> 6752 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-36-04-504.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-36-04-504.rawprotobin0 -> 6653 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-38-09-995.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-38-09-995.rawprotobin0 -> 6718 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-40-33-944.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-40-33-944.rawprotobin0 -> 6716 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-41-01-334.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-41-01-334.rawprotobin0 -> 6627 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-44-12-781.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-44-12-781.rawprotobin0 -> 6843 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-45-22-026.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-45-22-026.rawprotobin0 -> 6678 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-47-09-084.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-47-09-084.rawprotobin0 -> 6077 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-47-38-866.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-47-38-866.rawprotobin0 -> 6734 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-49-46-516.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-49-46-516.rawprotobin0 -> 6120 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-50-40-698.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-50-40-698.rawprotobin0 -> 6135 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-51-05-318.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-51-05-318.rawprotobin0 -> 6163 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-51-38-886.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-51-38-886.rawprotobin0 -> 6120 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-53-12-141.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-53-12-141.rawprotobin0 -> 2888 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-55-33-567.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-55-33-567.rawprotobin0 -> 6726 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-56-52-381.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-56-52-381.rawprotobin0 -> 6783 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-57-30-226.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-57-30-226.rawprotobin0 -> 6710 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-58-56-451.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-58-56-451.rawprotobin0 -> 6680 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-59-57-987.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-15-59-57-987.rawprotobin0 -> 6669 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-16-01-27-089.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-16-01-27-089.rawprotobin0 -> 6712 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-16-02-12-985.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-16-02-12-985.rawprotobin0 -> 6142 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-16-03-16-732.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-16-03-16-732.rawprotobin0 -> 6689 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-16-04-20-349.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-16-04-20-349.rawprotobin0 -> 6113 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-06-32-774.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-06-32-774.rawprotobin0 -> 4977 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-09-32-347.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-09-32-347.rawprotobin0 -> 4903 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-09-37-763.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-09-37-763.rawprotobin0 -> 4907 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-10-05-333.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-10-05-333.rawprotobin0 -> 4993 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-10-22-869.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-12-17-10-22-869.rawprotobin0 -> 5004 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-14-45-39-964.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-14-45-39-964.rawprotobin0 -> 3309 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-14-46-31-576.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-14-46-31-576.rawprotobin0 -> 5024 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-14-55-43-918.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-14-55-43-918.rawprotobin0 -> 5008 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-14-56-02-730.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-14-56-02-730.rawprotobin0 -> 4894 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-10-08-584.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-10-08-584.rawprotobin0 -> 3209 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-22-12-736.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-22-12-736.rawprotobin0 -> 3219 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-23-07-539.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-23-07-539.rawprotobin0 -> 3319 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-25-38-349.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-25-38-349.rawprotobin0 -> 3319 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-27-59-486.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-27-59-486.rawprotobin0 -> 3319 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-28-22-988.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-28-22-988.rawprotobin0 -> 3299 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-30-25-314.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-30-25-314.rawprotobin0 -> 3297 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-30-44-269.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-30-44-269.rawprotobin0 -> 3298 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-31-15-320.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-31-15-320.rawprotobin0 -> 3298 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-31-41-606.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-31-41-606.rawprotobin0 -> 3298 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-33-36-687.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-33-36-687.rawprotobin0 -> 3317 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-35-23-979.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-35-23-979.rawprotobin0 -> 3316 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-35-53-678.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-35-53-678.rawprotobin0 -> 3514 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-36-17-361.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-36-17-361.rawprotobin0 -> 3515 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-36-48-198.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-36-48-198.rawprotobin0 -> 5123 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-37-13-130.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-37-13-130.rawprotobin0 -> 4897 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-47-28-310.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-47-28-310.rawprotobin0 -> 3310 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-49-00-454.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-15-49-00-454.rawprotobin0 -> 3311 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-00-18-009.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-00-18-009.rawprotobin0 -> 3310 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-01-55-665.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-01-55-665.rawprotobin0 -> 3310 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-03-32-471.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-03-32-471.rawprotobin0 -> 3310 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-16-47-084.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-16-47-084.rawprotobin0 -> 4880 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-18-28-985.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-18-28-985.rawprotobin0 -> 4907 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-18-42-228.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-18-42-228.rawprotobin0 -> 4873 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-34-37-493.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-34-37-493.rawprotobin0 -> 5004 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-35-28-484.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-16-35-28-484.rawprotobin0 -> 5001 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-17-02-21-978.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-17-02-21-978.rawprotobin0 -> 3289 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-17-08-07-202.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-17-08-07-202.rawprotobin0 -> 4874 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-17-33-55-036.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-13-17-33-55-036.rawprotobin0 -> 5011 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-14-11-54-05-131.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-14-11-54-05-131.rawprotobin0 -> 4974 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-14-12-28-08-010.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-14-12-28-08-010.rawprotobin0 -> 1463 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-15-15-42-22-574.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-15-15-42-22-574.rawprotobin0 -> 1463 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-15-15-43-42-845.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-15-15-43-42-845.rawprotobin0 -> 1466 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-11-40-841.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-11-40-841.rawprotobin0 -> 1464 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-13-36-988.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-13-36-988.rawprotobin0 -> 1458 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-13-41-141.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-13-41-141.rawprotobin0 -> 4084 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-14-07-766.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-14-07-766.rawprotobin0 -> 6877 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-16-13-015.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-16-13-015.rawprotobin0 -> 6171 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-16-59-590.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-16-59-590.rawprotobin0 -> 5193 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-17-27-938.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-17-27-938.rawprotobin0 -> 3320 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-17-51-716.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-17-51-716.rawprotobin0 -> 6655 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-20-40-119.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-20-40-119.rawprotobin0 -> 6295 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-26-22-094.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-26-22-094.rawprotobin0 -> 6295 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-27-08-431.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-27-08-431.rawprotobin0 -> 6288 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-27-34-956.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-27-34-956.rawprotobin0 -> 6113 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-28-17-682.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-28-17-682.rawprotobin0 -> 6113 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-29-45-593.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-29-45-593.rawprotobin0 -> 6277 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-32-29-323.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-32-29-323.rawprotobin0 -> 6295 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-33-57-066.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-33-57-066.rawprotobin0 -> 6246 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-34-18-878.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-34-18-878.rawprotobin0 -> 6113 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-37-10-306.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-37-10-306.rawprotobin0 -> 6114 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-40-04-834.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-40-04-834.rawprotobin0 -> 6264 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-42-19-225.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-42-19-225.rawprotobin0 -> 6294 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-43-38-137.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-43-38-137.rawprotobin0 -> 6295 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-47-59-541.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-47-59-541.rawprotobin0 -> 6060 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-48-30-524.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-48-30-524.rawprotobin0 -> 6295 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-50-02-430.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-16-50-02-430.rawprotobin0 -> 6277 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-18-42-49-607.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-18-42-49-607.rawprotobin0 -> 6846 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-18-43-46-848.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-18-43-46-848.rawprotobin0 -> 6319 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-18-46-30-922.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-18-46-30-922.rawprotobin0 -> 6743 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-18-47-33-642.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-16-18-47-33-642.rawprotobin0 -> 6640 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-10-31-40-696.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-10-31-40-696.rawprotobin0 -> 5087 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-13-59-57-038.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-13-59-57-038.rawprotobin0 -> 1467 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-16-58-29-981.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-16-58-29-981.rawprotobin0 -> 1462 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-16-59-29-370.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-16-59-29-370.rawprotobin0 -> 1464 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-16-59-33-213.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-16-59-33-213.rawprotobin0 -> 4128 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-17-03-36-937.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-17-03-36-937.rawprotobin0 -> 5243 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-17-14-35-299.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-17-14-35-299.rawprotobin0 -> 5137 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-17-15-57-006.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-17-15-57-006.rawprotobin0 -> 1466 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-17-16-31-323.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-17-16-31-323.rawprotobin0 -> 5009 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-18-40-40-997.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-20-18-40-40-997.rawprotobin0 -> 1464 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-21-10-12-55-071.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-21-10-12-55-071.rawprotobin0 -> 1479 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-21-10-18-22-826.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-21-10-18-22-826.rawprotobin0 -> 1462 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-21-10-18-27-787.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-21-10-18-27-787.rawprotobin0 -> 4083 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-27-13-27-59-859.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-27-13-27-59-859.rawprotobin0 -> 1464 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-27-13-28-02-211.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-27-13-28-02-211.rawprotobin0 -> 4101 bytes
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-28-11-38-55-150.json1
-rw-r--r--IGetAndroid/build/android-profile/profile-2018-02-28-11-38-55-150.rawprotobin0 -> 6856 bytes
-rw-r--r--IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/constraint/group-index.xml5
-rw-r--r--IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml40
-rw-r--r--IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/test/espresso/group-index.xml9
-rw-r--r--IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/test/group-index.xml9
-rw-r--r--IGetAndroid/build/intermediates/lint-cache/maven.google/master-index.xml39
-rw-r--r--IGetAndroid/gradle.properties (renamed from iGetAndroid/gradle.properties)0
-rw-r--r--IGetAndroid/gradle/wrapper/gradle-wrapper.jar (renamed from iGetAndroid/gradle/wrapper/gradle-wrapper.jar)bin53636 -> 53636 bytes
-rw-r--r--IGetAndroid/gradle/wrapper/gradle-wrapper.properties (renamed from iGetAndroid/gradle/wrapper/gradle-wrapper.properties)4
-rwxr-xr-xIGetAndroid/gradlew (renamed from iGetAndroid/gradlew)0
-rw-r--r--IGetAndroid/gradlew.bat (renamed from iGetAndroid/gradlew.bat)0
-rw-r--r--IGetAndroid/settings.gradle (renamed from iGetAndroid/settings.gradle)0
-rw-r--r--Makefile83
-rw-r--r--MetisForwarder/app/build.gradle65
-rw-r--r--MetisForwarder/app/metisforwarder.keystorebin2246 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/java/com/metis/ccnx/utility/Constants.java34
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-hdpi/ic_launcher.pngbin3418 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngbin4208 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-mdpi/ic_launcher.pngbin2206 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngbin2555 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-xhdpi/ic_launcher.pngbin4842 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngbin6114 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngbin7718 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngbin10056 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngbin10486 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngbin14696 -> 0 bytes
-rw-r--r--MetisForwarder/app/src/main/res/values/strings.xml3
-rw-r--r--MetisForwarderAndroid/.gitignore (renamed from iGetAndroid/.gitignore)0
-rw-r--r--MetisForwarderAndroid/app/.gitignore1
-rw-r--r--MetisForwarderAndroid/app/CMakeLists.txt (renamed from MetisForwarder/app/CMakeLists.txt)21
-rw-r--r--MetisForwarderAndroid/app/build.gradle70
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Common.cmake (renamed from iGetAndroid/app/cmake/Modules/FindCCNX_Common.cmake)0
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Portal.cmake (renamed from iGetAndroid/app/cmake/Modules/FindCCNX_Portal.cmake)0
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake (renamed from iGetAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake)0
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindLibEvent.cmake47
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindLibicnet.cmake (renamed from iGetAndroid/app/cmake/Modules/FindLibicnet.cmake)0
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindLibparc.cmake (renamed from iGetAndroid/app/cmake/Modules/FindLibparc.cmake)0
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindLongBow.cmake (renamed from iGetAndroid/app/cmake/Modules/FindLongBow.cmake)0
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindMetis.cmake (renamed from MetisForwarder/app/cmake/Modules/FindMetis.cmake)0
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/FindUncrustify.cmake8
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/detectCacheSize.cmake21
-rw-r--r--MetisForwarderAndroid/app/cmake/Modules/version.cmake15
-rwxr-xr-xMetisForwarderAndroid/app/cmake/get_version.sh20
-rw-r--r--MetisForwarderAndroid/app/metis.keystorebin0 -> 2573 bytes
-rw-r--r--MetisForwarderAndroid/app/proguard-rules.pro21
-rw-r--r--MetisForwarderAndroid/app/src/androidTest/java/icn/forwarder/com/forwarderandroid/ExampleInstrumentedTest.java (renamed from iGetAndroid/app/src/androidTest/java/com/iget/ccnx/igetandroid/ExampleInstrumentedTest.java)11
-rw-r--r--MetisForwarderAndroid/app/src/main/AndroidManifest.xml31
-rw-r--r--MetisForwarderAndroid/app/src/main/ic_launcher-web.pngbin0 -> 15792 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/forwarderandroid/ForwarderAndroidActivity.java (renamed from MetisForwarder/app/src/main/java/com/metis/ccnx/metisforwarder/MetisForwarderActivity.java)84
-rw-r--r--MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/service/ForwarderAndroidService.java (renamed from MetisForwarder/app/src/main/java/com/metis/ccnx/service/MetisForwarderService.java)86
-rw-r--r--MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/supportlibrary/Forwarder.java (renamed from MetisForwarder/app/src/main/java/com/metis/ccnx/supportlibrary/MetisForwarder.java)19
-rw-r--r--MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/utility/Constants.java39
-rw-r--r--MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/utility/ResourcesEnumerator.java (renamed from MetisForwarder/app/src/main/java/com/metis/ccnx/utility/ResourcesEnumerator.java)5
-rw-r--r--MetisForwarderAndroid/app/src/main/jni/forwarderWrap.c (renamed from MetisForwarder/app/src/main/c/metisForwarderWrap.c)30
-rw-r--r--MetisForwarderAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml34
-rw-r--r--MetisForwarderAndroid/app/src/main/res/drawable/border.xml (renamed from MetisForwarder/app/src/main/res/drawable/border.xml)0
-rw-r--r--MetisForwarderAndroid/app/src/main/res/drawable/ic_cached_black_24px.xml9
-rw-r--r--MetisForwarderAndroid/app/src/main/res/drawable/ic_launcher_background.xml170
-rw-r--r--MetisForwarderAndroid/app/src/main/res/ic_cached_black_24px.svg4
-rw-r--r--MetisForwarderAndroid/app/src/main/res/layout/activity_forwarder_android.xml258
-rw-r--r--MetisForwarderAndroid/app/src/main/res/layout/spinner_layout.xml (renamed from MetisForwarder/app/src/main/res/layout/spinner_layout.xml)0
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml5
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml5
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.pngbin0 -> 1534 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.pngbin0 -> 1725 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngbin0 -> 3392 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.pngbin0 -> 1020 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.pngbin0 -> 1154 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngbin0 -> 2046 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.pngbin0 -> 2210 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.pngbin0 -> 2422 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngbin0 -> 4926 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngbin0 -> 3541 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.pngbin0 -> 3696 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngbin0 -> 7859 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngbin0 -> 4919 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.pngbin0 -> 5291 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngbin0 -> 11314 bytes
-rw-r--r--MetisForwarderAndroid/app/src/main/res/values/colors.xml6
-rw-r--r--MetisForwarderAndroid/app/src/main/res/values/ic_launcher_background.xml4
-rw-r--r--MetisForwarderAndroid/app/src/main/res/values/strings.xml3
-rw-r--r--MetisForwarderAndroid/app/src/main/res/values/styles.xml11
-rw-r--r--MetisForwarderAndroid/app/src/test/java/icn/forwarder/com/forwarderandroid/ExampleUnitTest.java (renamed from MetisForwarder/app/src/test/java/com/metis/ccnx/metisforwarder/ExampleUnitTest.java)10
-rw-r--r--MetisForwarderAndroid/build.gradle (renamed from iGetAndroid/build.gradle)6
-rw-r--r--MetisForwarderAndroid/gradle.properties17
-rw-r--r--MetisForwarderAndroid/gradle/wrapper/gradle-wrapper.jarbin0 -> 53636 bytes
-rw-r--r--MetisForwarderAndroid/gradle/wrapper/gradle-wrapper.properties6
-rwxr-xr-xMetisForwarderAndroid/gradlew160
-rw-r--r--MetisForwarderAndroid/gradlew.bat90
-rw-r--r--MetisForwarderAndroid/settings.gradle1
-rw-r--r--README.md67
-rw-r--r--config/config.android37
-rw-r--r--config/config.mk60
-rw-r--r--config/modules/002-cmake-modules.mk19
-rw-r--r--config/modules/106-jsoncpp.mk1
-rw-r--r--config/modules/107-libevent.mk1
-rw-r--r--config/modules/108-libxml2.mk1
-rw-r--r--config/modules/109-libhicn.mk1
-rw-r--r--config/modules/510-forwarder.mk (renamed from config/modules/510-Metis.mk)0
-rw-r--r--config/modules/710-http-server.mk1
-rw-r--r--external/glob.h102
-rw-r--r--external/jsoncpp/CMakeLists.txt160
-rw-r--r--external/libcurl_android/jni/Android.mk1
-rw-r--r--external/libcurl_android/jni/Application.mk6
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/Android.mk114
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/curl.h2336
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/curlbuild.h198
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/curlbuild.h.in197
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/curlrules.h262
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/curlver.h69
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/easy.h102
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/mprintf.h81
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/multi.h399
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/stamp-h21
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/stdcheaders.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/include/curl/typecheck-gcc.h610
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/chkhostname-curl_gethostname.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/curl-nonblock.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/curl-rawstr.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/curl-strdup.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/curl-strtoofft.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/curl-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-base64.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-memdebug.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-mprintf.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-nonblock.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-strequal.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-strtoofft.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-timeval.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/getpart-base64.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/getpart-memdebug.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/getpart-mprintf.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/getpart-nonblock.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/getpart-strequal.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/getpart-strtoofft.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/getpart-timeval.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/getpart-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1501-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1502-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1503-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1504-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1505-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1506-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1507-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1508-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1509-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1510-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1511-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1512-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1513-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1514-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1515-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1525-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1526-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1527-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1528-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib1900-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib2033-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib502-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib503-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib504-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib507-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib518-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib525-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib526-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib527-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib529-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib530-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib532-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib533-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib536-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib537-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib540-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib552-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib555-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib560-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib564-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib571-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib573-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib575-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib582-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib591-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/lib597-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-amigaos.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-asyn-ares.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-asyn-thread.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-base64.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-bundles.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-conncache.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-connect.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-content_encoding.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-cookie.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_addrinfo.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_fnmatch.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_gethostname.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_gssapi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_memrchr.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_multibyte.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_core.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_msgs.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_wb.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_rtmp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sasl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sasl_sspi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sspi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_threads.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-dict.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-dotdot.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-easy.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-escape.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-file.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-fileinfo.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-formdata.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ftp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ftplistparser.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-getenv.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-getinfo.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-gopher.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hash.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hmac.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostasyn.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostcheck.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip4.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip6.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostsyn.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http2.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_chunks.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_digest.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_negotiate.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_negotiate_sspi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_proxy.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-idn_win32.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-if2ip.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-imap.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-inet_ntop.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-inet_pton.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-krb5.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ldap.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-llist.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-md4.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-md5.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-memdebug.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-mprintf.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-multi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-netrc.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-non-ascii.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-nonblock.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-openldap.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-parsedate.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pingpong.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pipeline.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pop3.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-progress.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-rawstr.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-rtsp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-security.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-select.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-sendf.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-share.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-slist.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-smtp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks_gssapi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks_sspi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-speedcheck.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-splay.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ssh.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strdup.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strequal.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strerror.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strtok.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strtoofft.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-telnet.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-tftp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-timeval.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-transfer.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-url.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-version.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-warnless.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-wildcard.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-x509asn1.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-nonblock.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-rawstr.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-strdup.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-strtoofft.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-warnless.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-amigaos.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-asyn-ares.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-asyn-thread.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-base64.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-bundles.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-conncache.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-connect.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-content_encoding.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-cookie.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_addrinfo.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_fnmatch.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_gethostname.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_gssapi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_memrchr.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_multibyte.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_core.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_msgs.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_wb.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_rtmp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sasl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sasl_sspi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sspi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_threads.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-dict.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-dotdot.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-easy.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-escape.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-file.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-fileinfo.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-formdata.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ftp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ftplistparser.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-getenv.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-getinfo.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-gopher.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hash.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hmac.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostasyn.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostcheck.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip4.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip6.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostsyn.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http2.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_chunks.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_digest.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_negotiate.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_negotiate_sspi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_proxy.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-idn_win32.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-if2ip.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-imap.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-inet_ntop.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-inet_pton.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-krb5.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ldap.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-llist.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-md4.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-md5.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-memdebug.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-mprintf.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-multi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-netrc.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-non-ascii.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-nonblock.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-openldap.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-parsedate.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pingpong.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pipeline.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pop3.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-progress.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-rawstr.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-rtsp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-security.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-select.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-sendf.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-share.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-slist.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-smtp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks_gssapi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks_sspi.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-speedcheck.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-splay.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ssh.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strdup.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strequal.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strerror.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strtok.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strtoofft.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-telnet.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-tftp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-timeval.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-transfer.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-url.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-version.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-warnless.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-wildcard.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-x509asn1.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/libntlmconnect-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/resolve-base64.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/resolve-memdebug.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/resolve-mprintf.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/resolve-nonblock.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/resolve-strequal.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/resolve-strtoofft.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/resolve-timeval.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/resolve-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/rtspd-base64.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/rtspd-memdebug.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/rtspd-mprintf.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/rtspd-nonblock.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/rtspd-strequal.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/rtspd-strtoofft.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/rtspd-timeval.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/rtspd-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-base64.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-inet_pton.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-memdebug.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-mprintf.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-nonblock.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-strequal.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-strtoofft.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-timeval.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sockfilt-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-base64.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-inet_pton.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-memdebug.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-mprintf.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-nonblock.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-strequal.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-strtoofft.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-timeval.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/sws-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/tftpd-base64.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/tftpd-memdebug.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/tftpd-mprintf.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/tftpd-nonblock.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/tftpd-strequal.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/tftpd-strtoofft.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/tftpd-timeval.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/.deps/tftpd-warnless.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/Makefile.inc71
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/amigaos.c77
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/amigaos.h39
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/arpa_telnet.h104
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/asyn-ares.c694
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/asyn-thread.c701
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/asyn.h168
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/base64.c314
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/bundles.c110
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/bundles.h45
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-amigaos.h167
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-dos.h187
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-mac.h126
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-os400.h560
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-riscos.h513
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-symbian.h817
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-tpf.h772
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-vxworks.h931
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-win32.h698
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/config-win32ce.h448
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/conncache.c283
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/conncache.h55
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/connect.c1340
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/connect.h122
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/content_encoding.c435
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/content_encoding.h48
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/cookie.c1365
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/cookie.h104
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_addrinfo.c527
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_addrinfo.h97
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_base64.h35
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_config.h1037
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_config.h.in1036
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_fnmatch.c427
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_fnmatch.h44
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_gethostname.c100
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_gethostname.h31
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_gssapi.c75
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_gssapi.h60
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_hmac.h67
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ldap.h35
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_md4.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_md5.h63
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_memory.h140
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_memrchr.c62
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_memrchr.h44
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_multibyte.c82
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_multibyte.h90
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ntlm.c248
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ntlm.h44
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ntlm_core.c651
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ntlm_core.h89
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ntlm_msgs.c1010
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ntlm_msgs.h177
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ntlm_wb.c435
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_ntlm_wb.h37
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_rtmp.c311
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_rtmp.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_sasl.c741
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_sasl.h158
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_sasl_sspi.c696
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_sec.h51
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_setup.h693
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_setup_once.h551
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_sspi.c257
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_sspi.h315
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_threads.c135
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curl_threads.h57
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/curlx.h119
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/dict.c283
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/dict.h29
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/dotdot.c170
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/dotdot.h25
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/easy.c1182
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/easyif.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/escape.c233
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/escape.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/file.c583
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/file.h41
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/fileinfo.c54
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/fileinfo.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/firefox-db2pem.sh54
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/formdata.c1596
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/formdata.h98
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/ftp.c4585
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/ftp.h160
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/ftplistparser.c1053
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/ftplistparser.h41
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/getenv.c53
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/getinfo.c381
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/getinfo.h27
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/gopher.c169
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/gopher.h29
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hash.c400
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hash.h106
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hmac.c133
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hostasyn.c157
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hostcheck.c148
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hostcheck.h32
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hostip.c857
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hostip.h250
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hostip4.c310
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hostip6.c224
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/hostsyn.c111
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http.c3664
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http.h223
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http2.c1036
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http2.h50
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_chunks.c385
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_chunks.h91
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_digest.c598
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_digest.h57
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_negotiate.c243
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_negotiate.h42
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_negotiate_sspi.c290
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_proxy.c598
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/http_proxy.h41
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/idn_win32.c85
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/if2ip.c218
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/if2ip.h74
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/imap.c2893
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/imap.h111
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/inet_ntop.c199
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/inet_ntop.h38
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/inet_pton.c234
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/inet_pton.h37
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/krb5.c342
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/ldap.c709
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/libcurl.rc63
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/llist.c212
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/llist.h57
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/md4.c282
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/md5.c541
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/memdebug.c490
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/memdebug.h176
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/mprintf.c1142
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/multi.c2835
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/multihandle.h142
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/multiif.h97
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/netrc.c201
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/netrc.h36
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/non-ascii.c343
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/non-ascii.h63
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/nonblock.c91
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/nonblock.h31
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/nwlib.c329
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/nwos.c88
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/objnames.inc107
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/openldap.c640
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/parsedate.c583
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/parsedate.h31
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/pingpong.c517
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/pingpong.h150
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/pipeline.c340
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/pipeline.h44
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/pop3.c2339
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/pop3.h110
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/progress.c494
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/progress.h73
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/rawstr.c142
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/rawstr.h47
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/rtsp.c809
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/rtsp.h69
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/security.c601
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/select.c574
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/select.h114
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/sendf.c686
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/sendf.h90
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/setup-os400.h239
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/setup-vms.h399
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/share.c254
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/share.h61
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/sigpipe.h78
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/slist.c143
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/slist.h40
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/smtp.c2378
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/smtp.h106
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/sockaddr.h43
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/socks.c755
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/socks.h77
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/socks_gssapi.c534
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/socks_sspi.c604
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/speedcheck.c74
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/speedcheck.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/splay.c288
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/splay.h66
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/ssh.c3302
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/ssh.h183
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/stamp-h11
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strdup.c52
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strdup.h30
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strequal.c79
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strequal.h31
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strerror.c1127
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strerror.h37
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strtok.c66
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strtok.h34
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strtoofft.c188
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/strtoofft.h68
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/telnet.c1680
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/telnet.h29
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/tftp.c1375
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/tftp.h29
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/timeval.c134
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/timeval.h58
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/transfer.c1993
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/transfer.h70
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/url.c6032
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/url.h82
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/urldata.h1705
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/version.c349
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-axtls.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-curl_darwinssl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-curl_schannel.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-cyassl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-gskit.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-gtls.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-nss.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-openssl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-polarssl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-polarssl_threadlock.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-qssl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-vtls.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-axtls.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-curl_darwinssl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-curl_schannel.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-cyassl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-gskit.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-gtls.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-nss.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-openssl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-polarssl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-polarssl_threadlock.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-qssl.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-vtls.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/axtls.c684
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/axtls.h72
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/curl_darwinssl.c2485
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/curl_darwinssl.h77
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/curl_schannel.c1346
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/curl_schannel.h137
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/cyassl.c655
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/cyassl.h69
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/gskit.c1053
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/gskit.h65
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/gtls.c1323
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/gtls.h79
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/nss.c1943
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/nssg.h89
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/openssl.c2918
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/openssl.h101
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/polarssl.c746
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/polarssl.h73
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/polarssl_threadlock.c156
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/polarssl_threadlock.h53
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/qssl.c527
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/qssl.h62
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/vtls.c705
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/vtls/vtls.h132
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/warnless.c486
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/warnless.h107
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/wildcard.c77
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/wildcard.h58
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/x509asn1.c1183
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/lib/x509asn1.h129
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_binmode.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_bname.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_dbg.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_hdr.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_prg.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_rea.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_see.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_wrt.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_cfgable.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_convert.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_dirhie.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_doswin.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_easysrc.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_formparse.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_getparam.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_getpass.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_help.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_helpers.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_homedir.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_hugehelp.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_libinfo.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_main.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_metalink.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_mfiles.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_msgs.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_operate.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_operhlp.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_panykey.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_paramhlp.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_parsecfg.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_setopt.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_sleep.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_urlglob.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_util.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_vms.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_writeenv.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_writeout.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/curl-tool_xattr.Po1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_binmode.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_bname.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_dbg.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_hdr.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_prg.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_rea.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_see.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_wrt.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cfgable.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_convert.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_dirhie.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_doswin.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_easysrc.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_formparse.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_getparam.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_getpass.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_help.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_helpers.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_homedir.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_hugehelp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_libinfo.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_main.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_metalink.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_mfiles.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_msgs.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_operate.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_operhlp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_panykey.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_paramhlp.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_parsecfg.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_setopt.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_sleep.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_urlglob.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_util.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_vms.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_writeenv.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_writeout.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_xattr.Plo1
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/Makefile.inc113
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/curl.rc63
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_binmode.c52
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_binmode.h37
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_bname.c50
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_bname.h35
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_dbg.c275
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_dbg.h35
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_hdr.c225
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_hdr.h54
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_prg.c150
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_prg.h50
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_rea.c55
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_rea.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_see.c131
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_see.h46
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_wrt.c152
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cb_wrt.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cfgable.c154
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_cfgable.h238
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_convert.c150
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_convert.h45
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_dirhie.c147
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_dirhie.h29
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_doswin.c299
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_doswin.h46
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_easysrc.c229
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_easysrc.h48
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_formparse.c361
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_formparse.h33
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_getparam.c1889
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_getparam.h62
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_getpass.c256
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_getpass.h36
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_help.c333
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_help.h31
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_helpers.c77
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_helpers.h32
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_homedir.c95
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_homedir.h28
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_hugehelp.c8299
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_hugehelp.h28
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_libinfo.c100
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_libinfo.h34
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_main.c275
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_main.h44
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_metalink.c963
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_metalink.h167
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_mfiles.c127
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_mfiles.h46
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_msgs.c100
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_msgs.h31
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_operate.c1858
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_operate.h29
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_operhlp.c171
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_operhlp.h39
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_panykey.c48
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_panykey.h37
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_paramhlp.c513
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_paramhlp.h54
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_parsecfg.c362
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_parsecfg.h29
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_sdecls.h153
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_setopt.c565
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_setopt.h148
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_setup.h75
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_sleep.c58
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_sleep.h29
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_urlglob.c674
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_urlglob.h77
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_util.c138
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_util.h56
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_version.h34
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_vms.c219
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_vms.h47
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_writeenv.c116
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_writeenv.h35
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_writeout.c327
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_writeout.h28
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_xattr.c87
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/tool_xattr.h28
-rwxr-xr-xexternal/libcurl_android/jni/libcurl/src/version.h35
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/libcurl-library.abin3739592 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/libcurl.abin773594 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.obin1968 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.obin2864 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.obin2912 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.o.d122
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/base64.obin56952 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/base64.o.d103
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/bundles.obin50088 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/bundles.o.d108
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/conncache.obin58208 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/conncache.o.d110
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/connect.obin84424 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/connect.o.d135
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.obin62772 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.o.d98
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/cookie.obin90376 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/cookie.o.d118
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.obin19760 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.o.d50
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.obin14840 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.o.d45
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.obin4256 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.o.d17
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.obin2000 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.o.d45
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.obin1984 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.obin1984 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.obin1984 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.obin1980 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.obin74424 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.o.d120
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.obin1984 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.obin2000 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.o.d45
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dict.obin55488 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dict.o.d110
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.obin7376 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.o.d42
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/easy.obin86264 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/easy.o.d152
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/escape.obin55376 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/escape.o.d103
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/file.obin64992 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/file.o.d120
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.obin6724 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.o.d48
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/formdata.obin88208 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/formdata.o.d105
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftp.obin207032 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftp.o.d165
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.obin63564 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.o.d108
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getenv.obin4144 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getenv.o.d40
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.obin58052 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.o.d110
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/gopher.obin51412 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/gopher.o.d117
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hash.obin22892 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hash.o.d47
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hmac.obin8320 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hmac.o.d45
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.obin2904 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.o.d105
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip.obin79584 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip.o.d110
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.obin50780 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.o.d107
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.obin2904 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.o.d115
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.obin48248 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.o.d105
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http.obin142588 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http.o.d165
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http2.obin1968 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http2.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.obin53064 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.o.d108
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.obin64844 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.o.d120
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.obin1984 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.obin1992 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.obin68356 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.o.d130
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.obin11180 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.o.d50
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/imap.obin137492 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/imap.o.d145
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/krb5.obin1964 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/krb5.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ldap.obin1964 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ldap.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/llist.obin10144 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/llist.o.d42
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md4.obin1960 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md4.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md5.obin22716 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md5.o.d47
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.obin1972 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.obin41204 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.o.d42
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/multi.obin142744 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/multi.o.d138
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/netrc.obin11556 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/netrc.o.d52
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.obin4040 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.o.d37
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/openldap.obin1972 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/openldap.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.obin22156 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.o.d42
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.obin64232 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.o.d115
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.obin61984 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.o.d110
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pop3.obin116124 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pop3.o.d150
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/progress.obin66172 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/progress.o.d95
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.obin8424 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.o.d37
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.obin75468 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.o.d120
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/security.obin1972 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/security.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/select.obin14496 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/select.o.d100
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/sendf.obin72456 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/sendf.o.d118
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/share.obin53836 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/share.o.d100
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/slist.obin8116 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/slist.o.d42
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/smtp.obin121028 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/smtp.o.d147
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks.obin65660 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks.o.d108
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.obin1980 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.obin47428 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.o.d95
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/splay.obin10304 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/splay.o.d17
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ssh.obin1960 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ssh.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strdup.obin1968 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strdup.o.d17
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strequal.obin4984 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strequal.o.d37
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strerror.obin61940 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strerror.o.d98
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtok.obin1968 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtok.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.o.d17
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/telnet.obin89100 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/telnet.o.d125
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/tftp.obin95916 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/tftp.o.d128
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/timeval.obin6996 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/timeval.o.d17
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/transfer.obin93780 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/transfer.o.d153
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/url.obin195836 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/url.o.d198
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/version.obin9536 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/version.o.d98
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.obin1972 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.obin2924 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.o.d95
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.obin1988 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.obin1972 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.obin1972 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.obin1968 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.obin1968 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.obin2908 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.o.d127
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.obin1976 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.obin2000 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.obin1968 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.obin52668 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.o.d145
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/warnless.obin11512 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/warnless.o.d17
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.obin9220 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.o.d49
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.obin1972 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.o.d14
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_binmode.obin2000 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_binmode.o.d38
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_bname.obin2000 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_bname.o.d43
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.obin22800 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.o.d75
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.obin18592 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.o.d75
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.obin19052 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.o.d73
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.obin13988 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.o.d70
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.obin14024 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.o.d70
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.obin19788 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.o.d73
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.obin17608 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.o.d50
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_convert.obin2000 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_convert.o.d38
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.obin12728 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.o.d63
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_doswin.obin2000 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_doswin.o.d38
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.obin29256 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.o.d73
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_formparse.obin25256 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_formparse.o.d78
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getparam.obin59924 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getparam.o.d93
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getpass.obin7856 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getpass.o.d46
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_help.obin26100 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_help.o.d53
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_helpers.obin15552 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_helpers.o.d78
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_homedir.obin6012 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_homedir.o.d43
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.obin57444 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.o.d43
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.obin9132 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.o.d65
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_main.obin21176 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_main.o.d85
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_metalink.obin2004 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_metalink.o.d38
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.obin7872 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.o.d43
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_msgs.obin16216 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_msgs.o.d70
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operate.obin98104 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operate.o.d145
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.obin23832 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.o.d75
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_panykey.obin2000 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_panykey.o.d38
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.obin43168 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.o.d88
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.obin23040 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.o.d80
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_setopt.obin67500 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_setopt.o.d73
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_sleep.obin3832 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_sleep.o.d43
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.obin34608 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.o.d48
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_util.obin6992 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_util.o.d43
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_vms.obin1992 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_vms.o.d38
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.obin2004 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.o.d38
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeout.obin28808 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeout.o.d53
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_xattr.obin3272 -> 0 bytes
-rw-r--r--external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_xattr.o.d43
-rw-r--r--external/libevent/AddEventLibrary.cmake110
-rw-r--r--external/libevent_files/Android.mk47
-rw-r--r--external/libevent_files/AndroidManifest.xml0
-rw-r--r--external/libevent_files/Application.mk5
-rw-r--r--external/libevent_files/android/event2/config.h440
-rw-r--r--external/libevent_files/android/event2/event-config.h464
-rw-r--r--external/libevent_files/arc4random.c555
-rw-r--r--external/libevent_files/evutil.c2190
-rw-r--r--external/libevent_files/evutil_rand.c182
-rw-r--r--external/libxml2/CMakeLists.txt50
-rw-r--r--external/libxml2/config.h (renamed from external/libxml2_android/jni/config.h)0
-rw-r--r--external/libxml2/xmlversion.h (renamed from external/libxml2_android/jni/libxml2/include/libxml/xmlversion.h)0
-rw-r--r--external/libxml2_android/jni/Android.mk1
-rw-r--r--external/libxml2_android/jni/Application.mk6
-rwxr-xr-xexternal/libxml2_android/jni/libxml2/Android.mk65
-rw-r--r--external/libxml2_android/jni/libxml2/DOCBparser.c305
-rw-r--r--external/libxml2_android/jni/libxml2/HTMLparser.c7165
-rw-r--r--external/libxml2_android/jni/libxml2/HTMLtree.c1281
-rw-r--r--external/libxml2_android/jni/libxml2/SAX.c180
-rw-r--r--external/libxml2_android/jni/libxml2/SAX2.c3046
-rw-r--r--external/libxml2_android/jni/libxml2/buf.c1345
-rw-r--r--external/libxml2_android/jni/libxml2/buf.h72
-rw-r--r--external/libxml2_android/jni/libxml2/c14n.c2238
-rw-r--r--external/libxml2_android/jni/libxml2/catalog.c3825
-rw-r--r--external/libxml2_android/jni/libxml2/chvalid.c336
-rw-r--r--external/libxml2_android/jni/libxml2/config.h333
-rw-r--r--external/libxml2_android/jni/libxml2/debugXML.c3428
-rw-r--r--external/libxml2_android/jni/libxml2/dict.c1262
-rw-r--r--external/libxml2_android/jni/libxml2/elfgcchack.h17818
-rw-r--r--external/libxml2_android/jni/libxml2/enc.h32
-rw-r--r--external/libxml2_android/jni/libxml2/encoding.c4085
-rw-r--r--external/libxml2_android/jni/libxml2/entities.c1105
-rw-r--r--external/libxml2_android/jni/libxml2/error.c998
-rw-r--r--external/libxml2_android/jni/libxml2/globals.c1114
-rw-r--r--external/libxml2_android/jni/libxml2/hash.c1124
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/DOCBparser.h96
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/HTMLparser.h306
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/HTMLtree.h147
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/Makefile.am54
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/SAX.h173
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/SAX2.h178
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/c14n.h126
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/catalog.h182
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/chvalid.h230
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/debugXML.h217
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/dict.h86
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/encoding.h240
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/entities.h151
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/globals.h509
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/hash.h233
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/list.h137
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/nanoftp.h163
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/nanohttp.h81
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/parser.h1242
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/parserInternals.h644
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/pattern.h100
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/relaxng.h217
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/schemasInternals.h958
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/schematron.h142
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/threads.h84
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/tree.h1311
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/uri.h94
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/valid.h458
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xinclude.h129
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xlink.h189
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlIO.h374
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlautomata.h146
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlerror.h946
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlexports.h162
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlmemory.h224
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlmodule.h57
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlreader.h428
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlregexp.h222
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlsave.h88
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlschemas.h246
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlschemastypes.h151
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlstring.h140
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlunicode.h202
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlversion.h.in489
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlwin32version.h242
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlwin32version.h.in325
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xmlwriter.h488
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xpath.h557
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xpathInternals.h632
-rw-r--r--external/libxml2_android/jni/libxml2/include/libxml/xpointer.h114
-rw-r--r--external/libxml2_android/jni/libxml2/include/win32config.h128
-rw-r--r--external/libxml2_android/jni/libxml2/include/wsockcompat.h86
-rw-r--r--external/libxml2_android/jni/libxml2/legacy.c1343
-rw-r--r--external/libxml2_android/jni/libxml2/libxml.h115
-rw-r--r--external/libxml2_android/jni/libxml2/list.c779
-rw-r--r--external/libxml2_android/jni/libxml2/nanoftp.c2121
-rw-r--r--external/libxml2_android/jni/libxml2/nanohttp.c1890
-rw-r--r--external/libxml2_android/jni/libxml2/parser.c15783
-rw-r--r--external/libxml2_android/jni/libxml2/parserInternals.c2157
-rw-r--r--external/libxml2_android/jni/libxml2/pattern.c2618
-rw-r--r--external/libxml2_android/jni/libxml2/relaxng.c11059
-rw-r--r--external/libxml2_android/jni/libxml2/rngparser.c1595
-rw-r--r--external/libxml2_android/jni/libxml2/runsuite.c1172
-rw-r--r--external/libxml2_android/jni/libxml2/runtest.c4540
-rw-r--r--external/libxml2_android/jni/libxml2/runxmlconf.c607
-rw-r--r--external/libxml2_android/jni/libxml2/save.h35
-rw-r--r--external/libxml2_android/jni/libxml2/schematron.c1787
-rw-r--r--external/libxml2_android/jni/libxml2/testAutomata.c309
-rw-r--r--external/libxml2_android/jni/libxml2/testC14N.c370
-rw-r--r--external/libxml2_android/jni/libxml2/testHTML.c880
-rw-r--r--external/libxml2_android/jni/libxml2/testModule.c82
-rw-r--r--external/libxml2_android/jni/libxml2/testOOM.c377
-rw-r--r--external/libxml2_android/jni/libxml2/testOOMlib.c269
-rw-r--r--external/libxml2_android/jni/libxml2/testOOMlib.h26
-rw-r--r--external/libxml2_android/jni/libxml2/testReader.c145
-rw-r--r--external/libxml2_android/jni/libxml2/testRegexp.c402
-rw-r--r--external/libxml2_android/jni/libxml2/testRelax.c194
-rw-r--r--external/libxml2_android/jni/libxml2/testSAX.c1198
-rw-r--r--external/libxml2_android/jni/libxml2/testSchemas.c185
-rw-r--r--external/libxml2_android/jni/libxml2/testThreads.c200
-rw-r--r--external/libxml2_android/jni/libxml2/testThreadsWin32.c150
-rw-r--r--external/libxml2_android/jni/libxml2/testURI.c124
-rw-r--r--external/libxml2_android/jni/libxml2/testXPath.c229
-rw-r--r--external/libxml2_android/jni/libxml2/testapi.c52346
-rw-r--r--external/libxml2_android/jni/libxml2/testchar.c617
-rw-r--r--external/libxml2_android/jni/libxml2/testdict.c444
-rw-r--r--external/libxml2_android/jni/libxml2/testdso.c12
-rw-r--r--external/libxml2_android/jni/libxml2/testlimits.c1638
-rw-r--r--external/libxml2_android/jni/libxml2/testrecurse.c965
-rw-r--r--external/libxml2_android/jni/libxml2/threads.c1039
-rw-r--r--external/libxml2_android/jni/libxml2/timsort.h517
-rw-r--r--external/libxml2_android/jni/libxml2/tree.c10122
-rw-r--r--external/libxml2_android/jni/libxml2/trio.c6895
-rw-r--r--external/libxml2_android/jni/libxml2/trio.h230
-rw-r--r--external/libxml2_android/jni/libxml2/triodef.h228
-rw-r--r--external/libxml2_android/jni/libxml2/trionan.c914
-rw-r--r--external/libxml2_android/jni/libxml2/trionan.h84
-rw-r--r--external/libxml2_android/jni/libxml2/triop.h150
-rw-r--r--external/libxml2_android/jni/libxml2/triostr.c2112
-rw-r--r--external/libxml2_android/jni/libxml2/triostr.h144
-rw-r--r--external/libxml2_android/jni/libxml2/uri.c2568
-rw-r--r--external/libxml2_android/jni/libxml2/valid.c7054
-rw-r--r--external/libxml2_android/jni/libxml2/xinclude.c2624
-rw-r--r--external/libxml2_android/jni/libxml2/xlink.c183
-rw-r--r--external/libxml2_android/jni/libxml2/xmlIO.c4216
-rw-r--r--external/libxml2_android/jni/libxml2/xmlcatalog.c616
-rw-r--r--external/libxml2_android/jni/libxml2/xmllint.c3814
-rw-r--r--external/libxml2_android/jni/libxml2/xmlmemory.c1142
-rw-r--r--external/libxml2_android/jni/libxml2/xmlmodule.c460
-rw-r--r--external/libxml2_android/jni/libxml2/xmlreader.c5956
-rw-r--r--external/libxml2_android/jni/libxml2/xmlregexp.c8174
-rw-r--r--external/libxml2_android/jni/libxml2/xmlsave.c2788
-rw-r--r--external/libxml2_android/jni/libxml2/xmlschemas.c28947
-rw-r--r--external/libxml2_android/jni/libxml2/xmlschemastypes.c6152
-rw-r--r--external/libxml2_android/jni/libxml2/xmlstring.c1046
-rw-r--r--external/libxml2_android/jni/libxml2/xmlunicode.c3179
-rw-r--r--external/libxml2_android/jni/libxml2/xmlwriter.c4743
-rw-r--r--external/libxml2_android/jni/libxml2/xpath.c15336
-rw-r--r--external/libxml2_android/jni/libxml2/xpointer.c2941
-rw-r--r--external/libxml2_android/jni/libxml2/xzlib.c804
-rw-r--r--external/libxml2_android/jni/libxml2/xzlib.h19
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/libxml2.abin7372324 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/DOCBparser.obin33624 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/DOCBparser.o.d76
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLparser.obin311224 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLparser.o.d83
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLtree.obin91792 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLtree.o.d81
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX.obin16420 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX.o.d84
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX2.obin159148 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX2.o.d84
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/buf.obin86608 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/buf.o.d75
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/c14n.obin112164 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/c14n.o.d76
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/catalog.obin187316 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/catalog.o.d81
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/chvalid.obin15292 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/chvalid.o.d19
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/debugXML.obin174764 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/debugXML.o.d90
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/dict.obin40204 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/dict.o.d63
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/encoding.obin177200 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/encoding.o.d71
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/entities.obin89716 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/entities.o.d76
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/error.obin94848 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/error.o.d63
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/globals.obin68552 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/globals.o.d63
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/hash.obin45948 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/hash.o.d63
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/legacy.obin87652 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/legacy.o.d72
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/list.obin34888 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/list.o.d64
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanoftp.obin104112 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanoftp.o.d69
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanohttp.obin96028 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanohttp.o.d69
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parser.obin528480 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parser.o.d97
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parserInternals.obin120584 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parserInternals.o.d84
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/pattern.obin79196 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/pattern.o.d76
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/relaxng.obin384020 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/relaxng.o.d87
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/schematron.obin100996 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/schematron.o.d77
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/threads.obin27668 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/threads.o.d64
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/tree.obin355536 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/tree.o.d88
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/uri.obin108520 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/uri.o.d67
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/valid.obin283188 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/valid.o.d75
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xinclude.obin133928 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xinclude.o.d86
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xlink.obin14324 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xlink.o.d64
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlIO.obin204804 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlIO.o.d89
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmemory.obin34488 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmemory.o.d63
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmodule.obin43480 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmodule.o.d67
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlreader.obin205120 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlreader.o.d92
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlregexp.obin312080 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlregexp.o.d75
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlsave.obin155608 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlsave.o.d86
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemas.obin849156 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemas.o.d93
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.obin213220 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.o.d87
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlstring.obin60328 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlstring.o.d73
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlunicode.obin148696 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlunicode.o.d22
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlwriter.obin226656 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlwriter.o.d82
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpath.obin572520 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpath.o.d99
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpointer.obin136336 -> 0 bytes
-rw-r--r--external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpointer.o.d82
-rw-r--r--external/libxml2_files/config.h333
-rw-r--r--external/libxml2_files/xmlversion.h489
-rw-r--r--iGetAndroid/app/build.gradle69
-rw-r--r--iGetAndroid/app/iget.keystorebin2237 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/cpp/native-lib.cpp34
-rw-r--r--iGetAndroid/app/src/main/java/com/iget/ccnx/igetandroid/iGetActivity.java204
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.pngbin3418 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngbin4208 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.pngbin2206 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngbin2555 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.pngbin4842 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngbin6114 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngbin7718 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngbin10056 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngbin10486 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngbin14696 -> 0 bytes
-rw-r--r--iGetAndroid/app/src/main/res/values/strings.xml3
-rw-r--r--scripts/_shared.sh117
-rw-r--r--scripts/build-apk.sh61
-rw-r--r--scripts/build-boost.sh8
-rwxr-xr-xscripts/build-curl4android.sh82
-rwxr-xr-xscripts/build-openssl4android.sh98
-rwxr-xr-xscripts/compile_androidviper.sh10
-rwxr-xr-xscripts/compile_httpserver.sh16
-rwxr-xr-xscripts/compile_iget.sh8
-rwxr-xr-xscripts/compile_metisforwarder.sh8
-rwxr-xr-xscripts/init.sh255
-rwxr-xr-xscripts/init_qt.sh137
-rwxr-xr-xscripts/update.sh7
1887 files changed, 5389 insertions, 452844 deletions
diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 00000000..84939418
--- /dev/null
+++ b/.DS_Store
Binary files differ
diff --git a/MetisForwarder/.gitignore b/HttpServer/.gitignore
index 39fb081a..39fb081a 100644
--- a/MetisForwarder/.gitignore
+++ b/HttpServer/.gitignore
diff --git a/MetisForwarder/app/.gitignore b/HttpServer/app/.gitignore
index 796b96d1..796b96d1 100644
--- a/MetisForwarder/app/.gitignore
+++ b/HttpServer/app/.gitignore
diff --git a/HttpServer/app/CMakeLists.txt b/HttpServer/app/CMakeLists.txt
new file mode 100644
index 00000000..e58fedb6
--- /dev/null
+++ b/HttpServer/app/CMakeLists.txt
@@ -0,0 +1,85 @@
+# For more information about using CMake with Android Studio, read the
+# documentation: https://d.android.com/studio/projects/add-native-code.html
+
+# Sets the minimum version of CMake required to build the native library.
+
+cmake_minimum_required(VERSION 3.4.1)
+
+# Creates and names a library, sets it as either STATIC
+# or SHARED, and provides the relative paths to its source code.
+# You can define multiple libraries, and CMake builds them for you.
+# Gradle automatically packages shared libraries with your APK.
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+set(CMAKE_FIND_ROOT_PATH "$ENV{DISTILLERY_ROOT_DIR}/usr_${CMAKE_SYSTEM_PROCESSOR};${CMAKE_FIND_ROOT_PATH}")
+
+find_package(Boost 1.53.0 COMPONENTS regex system filesystem REQUIRED)
+include_directories(SYSTEM ${Boost_INCLUDE_DIR})
+
+find_package ( OpenSSL REQUIRED )
+
+find_package( LibEvent REQUIRED )
+include_directories(${LIBEVENT_INCLUDE_DIRS})
+
+find_package( LongBow REQUIRED )
+include_directories(${LONGBOW_INCLUDE_DIRS})
+
+find_package( Libparc REQUIRED )
+include_directories(${LIBPARC_INCLUDE_DIRS})
+
+find_package( CCNX_Common REQUIRED )
+include_directories(${CCNX_COMMON_INCLUDE_DIRS})
+
+find_package( CCNX_Transport_Rta REQUIRED )
+include_directories(${CCNX_TRANSPORT_RTA_INCLUDE_DIRS})
+
+find_package( CCNX_Portal REQUIRED )
+include_directories(${CCNX_PORTAL_INCLUDE_DIRS})
+
+find_package ( Threads REQUIRED )
+
+find_package ( OpenSSL REQUIRED )
+find_package( Doxygen )
+
+find_package(Jsoncpp REQUIRED)
+include_directories(${JSONCPP_INCLUDE_DIRS})
+
+
+find_package(Libicnet REQUIRED)
+include_directories(${LIBICNET_INCLUDE_DIRS})
+
+find_package(CURL REQUIRED)
+
+find_package( HttpServer REQUIRED)
+include_directories(${LIB_HTTP_SERVER_INCLUDE_DIRS})
+
+add_library( # Sets the name of the library.
+ httpServerWrap
+
+ # Sets the library as a shared library.
+ SHARED
+
+ # Provides a relative path to your source file(s).
+ src/main/cpp/httpServerWrap.cpp )
+
+# Searches for a specified prebuilt library and stores the path as a
+# variable. Because CMake includes system libraries in the search path by
+# default, you only need to specify the name of the public NDK library
+# you want to add. CMake verifies that the library exists before
+# completing its build.
+find_library( # Sets the name of the path variable.
+ log-lib
+
+ # Specifies the name of the NDK library that
+ # you want CMake to locate.
+ log )
+# Specifies libraries CMake should link to your target library. You
+# can link multiple libraries, such as libraries you define in this
+# build script, prebuilt third-party libraries, or system libraries.
+
+target_link_libraries( # Specifies the target library.
+ httpServerWrap
+
+ # Links the target library to the log library
+ # included in the NDK.
+ ${log-lib} ${LIB_HTTP_SERVER_LIBRARIES} ${CURL_LIBRARIES} ${ANDROID_LIBRARIES} ${LIBICNET_LIBRARIES} ${LIBZF_LOG_LIBRARIES} ${Boost_LIBRARIES} ${JSONCPP_LIBRARIES} ${CCNX_PORTAL_LIBRARIES} ${CCNX_TRANSPORT_RTA_LIBRARIES} ${CCNX_COMMON_LIBRARIES} ${LIBPARC_LIBRARIES} ${LONGBOW_LIBRARIES} ${LIBEVENT_LIBRARIES} ${OPENSSL_LIBRARIES}) \ No newline at end of file
diff --git a/HttpServer/app/build.gradle b/HttpServer/app/build.gradle
new file mode 100644
index 00000000..4b30fccc
--- /dev/null
+++ b/HttpServer/app/build.gradle
@@ -0,0 +1,79 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 26
+ defaultConfig {
+ applicationId "icn.httpserver.com.httpserver"
+ minSdkVersion 24
+ targetSdkVersion 26
+ versionCode 2
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++11 -frtti -fexceptions -lz"
+ }
+ }
+ ndk {
+ // Specifies the ABI configurations of your native
+ // libraries Gradle should build and package with your APK.
+ abiFilters 'armeabi-v7a', 'x86'
+ }
+ }
+
+ signingConfigs {
+ release {
+ storeFile file("httpserver.keystore")
+ storePassword "httpserver"
+ keyAlias "httpserver"
+ keyPassword "httpserver"
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.release
+ }
+ }
+
+ android.applicationVariants.all { variant ->
+ variant.outputs.all { output ->
+ def outputFile = output.outputFile
+ outputFile
+ if (outputFile != null && outputFile.name.endsWith('.apk')) {
+ project.ext {
+ appName = 'httpserver'}
+ def fileName = outputFile.name.replace("app",
+ "$project.ext.appName")
+ outputFileName = fileName
+
+ }
+
+ }
+ }
+
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+ buildToolsVersion '26.0.2'
+ dexOptions {
+ incremental true
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+ implementation fileTree(include: ['*.jar'], dir: 'libs')
+ implementation 'com.android.support:appcompat-v7:26.1.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.0.2'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.1'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
+}
diff --git a/HttpServer/app/cmake/Modules/FindCCNX_Common.cmake b/HttpServer/app/cmake/Modules/FindCCNX_Common.cmake
new file mode 100644
index 00000000..da5a4119
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindCCNX_Common.cmake
@@ -0,0 +1,52 @@
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################
+#
+# Find the Libparc libraries and includes
+# This module sets:
+# CCNX_COMMON_FOUND: True if Libparc was found
+# CCNX_COMMON_LIBRARY: The Libparc library
+# CCNX_COMMON_LIBRARIES: The Libparc library and dependencies
+# CCNX_COMMON_INCLUDE_DIR: The Libparc include dir
+#
+
+set(CCNX_COMMON_SEARCH_PATH_LIST
+ ${CCNX_COMMON_HOME}
+ $ENV{CCNX_COMMON_HOME}
+ $ENV{CCNX_HOME}
+ $ENV{PARC_HOME}
+ $ENV{FOUNDATION_HOME}
+ /usr/local/parc
+ /usr/local/ccnx
+ /usr/local/ccn
+ /usr/local
+ /opt
+ /usr
+ )
+
+find_path(CCNX_COMMON_INCLUDE_DIR ccnx/common/libccnxCommon_About.h
+ HINTS ${CCNX_COMMON_SEARCH_PATH_LIST}
+ PATH_SUFFIXES include
+ DOC "Find the Libccnx-common includes")
+
+find_library(CCNX_COMMON_LIBRARY NAMES ccnx_common
+ HINTS ${CCNX_COMMON_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the Libccnx-common libraries")
+
+set(CCNX_COMMON_LIBRARIES ${CCNX_COMMON_LIBRARY})
+set(CCNX_COMMON_INCLUDE_DIRS ${CCNX_COMMON_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CCNX_Common DEFAULT_MSG CCNX_COMMON_LIBRARY CCNX_COMMON_INCLUDE_DIR)
diff --git a/HttpServer/app/cmake/Modules/FindCCNX_Portal.cmake b/HttpServer/app/cmake/Modules/FindCCNX_Portal.cmake
new file mode 100644
index 00000000..d7aa9066
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindCCNX_Portal.cmake
@@ -0,0 +1,53 @@
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################
+#
+# Find the Libccnx-transport libraries and includes
+# This module sets:
+# CCNX_PORTAL_FOUND: True if Libparc was found
+# CCNX_PORTAL_LIBRARY: The Libparc library
+# CCNX_PORTAL_LIBRARIES: The Libparc library and dependencies
+# CCNX_PORTAL_INCLUDE_DIR: The Libparc include dir
+#
+
+set(CCNX_PORTAL_SEARCH_PATH_LIST
+ ${CCNX_PORTAL_HOME}
+ $ENV{CCNX_PORTAL_HOME}
+ $ENV{CCNX_HOME}
+ $ENV{PARC_HOME}
+ $ENV{FOUNDATION_HOME}
+ /usr/local/parc
+ /usr/local/ccnx
+ /usr/local/ccn
+ /usr/local
+ /opt
+ /usr
+ )
+
+find_path(CCNX_PORTAL_INCLUDE_DIR ccnx/api/ccnx_Portal/ccnxPortal_About.h
+ HINTS ${CCNX_PORTAL_SEARCH_PATH_LIST}
+ PATH_SUFFIXES include
+ DOC "Find the Libccnx-portal includes")
+
+find_library(CCNX_PORTAL_LIBRARY NAMES ccnx_api_portal
+ HINTS ${CCNX_PORTAL_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the Libccnx-portal libraries")
+
+set(CCNX_PORTAL_LIBRARIES ${CCNX_PORTAL_LIBRARY})
+
+set(CCNX_PORTAL_INCLUDE_DIRS ${CCNX_PORTAL_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CCNX_Portal DEFAULT_MSG CCNX_PORTAL_LIBRARY CCNX_PORTAL_INCLUDE_DIR)
diff --git a/HttpServer/app/cmake/Modules/FindCCNX_Transport_Rta.cmake b/HttpServer/app/cmake/Modules/FindCCNX_Transport_Rta.cmake
new file mode 100644
index 00000000..bc0b0428
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindCCNX_Transport_Rta.cmake
@@ -0,0 +1,63 @@
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################
+#
+# Find the Libccnx-transport libraries and includes
+# This module sets:
+# CCNX_TRANSPORT_RTA_FOUND: True if Libparc was found
+# CCNX_TRANSPORT_RTA_LIBRARY: The Libparc library
+# CCNX_TRANSPORT_RTA_LIBRARIES: The Libparc library and dependencies
+# CCNX_TRANSPORT_RTA_INCLUDE_DIR: The Libparc include dir
+#
+
+set(CCNX_TRANSPORT_RTA_SEARCH_PATH_LIST
+ ${CCNX_TRANSPORT_RTA_HOME}
+ $ENV{CCNX_TRANSPORT_RTA_HOME}
+ $ENV{CCNX_HOME}
+ $ENV{PARC_HOME}
+ $ENV{FOUNDATION_HOME}
+ /usr/local/parc
+ /usr/local/ccnx
+ /usr/local/ccn
+ /usr/local
+ /opt
+ /usr
+ )
+
+find_path(CCNX_TRANSPORT_RTA_INCLUDE_DIR ccnx/transport/librta_About.h
+ HINTS ${CCNX_TRANSPORT_RTA_SEARCH_PATH_LIST}
+ PATH_SUFFIXES include
+ DOC "Find the Libccnx-transport-rta includes")
+
+find_library(CCNX_TRANSPORT_RTA_LIBRARY NAMES ccnx_transport_rta
+ HINTS ${CCNX_TRANSPORT_RTA_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the Libccnx-transport-rta libraries")
+
+find_library(CCNX_API_NOTIFY_LIBRARY NAMES ccnx_api_notify
+ HINTS ${CCNX_TRANSPORT_RTA_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the Libccnx-transport-rta libraries")
+
+find_library(CCNX_API_CONTROL_LIBRARY NAMES ccnx_api_control
+ HINTS ${CCNX_TRANSPORT_RTA_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the Libccnx-transport-rta libraries")
+
+set(CCNX_TRANSPORT_RTA_LIBRARIES ${CCNX_TRANSPORT_RTA_LIBRARY} ${CCNX_API_CONTROL_LIBRARY} ${CCNX_API_NOTIFY_LIBRARY})
+
+set(CCNX_TRANSPORT_RTA_INCLUDE_DIRS ${CCNX_TRANSPORT_RTA_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(CCNX_Transport_Api DEFAULT_MSG CCNX_TRANSPORT_RTA_LIBRARY CCNX_TRANSPORT_RTA_INCLUDE_DIR)
diff --git a/HttpServer/app/cmake/Modules/FindCURL.cmake b/HttpServer/app/cmake/Modules/FindCURL.cmake
new file mode 100644
index 00000000..239b0e50
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindCURL.cmake
@@ -0,0 +1,69 @@
+#.rst:
+# FindCURL
+# --------
+#
+# Find curl
+#
+# Find the native CURL headers and libraries.
+#
+# ::
+#
+# CURL_INCLUDE_DIRS - where to find curl_/curl_.h, etc.
+# CURL_LIBRARIES - List of libraries when using curl.
+# CURL_FOUND - True if curl found.
+# CURL_VERSION_STRING - the version of curl found (since CMake 2.8.8)
+
+#=============================================================================
+# Copyright 2006-2009 Kitware, Inc.
+# Copyright 2012 Rolf Eike Beer <eike@sf-mail.de>
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+# License text for the above reference.)
+
+# Look for the header file.
+find_path(CURL_INCLUDE_DIR NAMES curl/curl.h)
+mark_as_advanced(CURL_INCLUDE_DIR)
+
+# Look for the library (sorted from most current/relevant entry to least).
+find_library(CURL_LIBRARY NAMES
+ curl
+ # Windows MSVC prebuilts:
+ curllib
+ libcurl_imp
+ curllib_static
+ # Windows older "Win32 - MSVC" prebuilts (libcurl.lib, e.g. libcurl-7.15.5-win32-msvc.zip):
+ libcurl
+ )
+mark_as_advanced(CURL_LIBRARY)
+
+if(CURL_INCLUDE_DIR)
+ foreach(_curl_version_header curlver.h curl.h)
+ if(EXISTS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}")
+ file(STRINGS "${CURL_INCLUDE_DIR}/curl/${_curl_version_header}" curl_version_str REGEX "^#define[\t ]+LIBCURL_VERSION[\t ]+\".*\"")
+
+ string(REGEX REPLACE "^#define[\t ]+LIBCURL_VERSION[\t ]+\"([^\"]*)\".*" "\\1" CURL_VERSION_STRING "${curl_version_str}")
+ unset(curl_version_str)
+ break()
+ endif()
+ endforeach()
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set CURL_FOUND to TRUE if
+# all listed variables are TRUE
+include(FindPackageHandleStandardArgs)
+
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CURL
+ REQUIRED_VARS CURL_LIBRARY CURL_INCLUDE_DIR
+ VERSION_VAR CURL_VERSION_STRING)
+
+if(CURL_FOUND)
+ set(CURL_LIBRARIES ${CURL_LIBRARY})
+ set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
+endif()
diff --git a/HttpServer/app/cmake/Modules/FindHttpServer.cmake b/HttpServer/app/cmake/Modules/FindHttpServer.cmake
new file mode 100644
index 00000000..263353fa
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindHttpServer.cmake
@@ -0,0 +1,39 @@
+########################################
+#
+# Find the HttpServer libraries and includes
+# This module sets:
+# LIB_HTTP_SERVER_FOUND: True if lib_http_server was found
+# LIB_HTTP_SERVER_LIBRARY: The lib_http_server library
+# LIB_HTTP_SERVER_LIBRARIES: The lib_http_server library and dependencies
+# LIB_HTTP_SERVER_INCLUDE_DIR: The lib_http_server include dir
+#
+
+set(LIBICN_HTTP_SERVER_SEARCH_PATH_LIST
+ ${HTTP_SERVER_HOME}
+ $ENV{HTTP_SERVER_HOME}
+ $ENV{CCNX_HOME}
+ $ENV{PARC_HOME}
+ $ENV{FOUNDATION_HOME}
+ /usr/local/http-server
+ /usr/local/ccnx
+ /usr/local/ccn
+ /usr/local
+ /opt
+ /usr
+ )
+
+find_path(LIB_HTTP_SERVER_INCLUDE_DIR http-server/http_server.h
+ HINTS ${LIBICN_HTTP_SERVER_SEARCH_PATH_LIST}
+ PATH_SUFFIXES include
+ DOC "Find the http-server includes")
+
+find_library(LIB_HTTP_SERVER_LIBRARY NAMES httpserver
+ HINTS ${LIB_HTTP_SERVER_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the http-server libraries")
+
+set(LIB_HTTP_SERVER_LIBRARIES ${LIB_HTTP_SERVER_LIBRARY})
+set(LIB_HTTP_SERVER_INCLUDE_DIRS ${LIB_HTTP_SERVER_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(lib_http_server DEFAULT_MSG LIB_HTTP_SERVER_LIBRARY LIB_HTTP_SERVER_INCLUDE_DIR)
diff --git a/HttpServer/app/cmake/Modules/FindJsoncpp.cmake b/HttpServer/app/cmake/Modules/FindJsoncpp.cmake
new file mode 100644
index 00000000..acde7b95
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindJsoncpp.cmake
@@ -0,0 +1,47 @@
+# Find jsoncpp
+#
+# Find the jsoncpp includes and library
+#
+# if you nee to add a custom library search path, do it via via CMAKE_PREFIX_PATH
+#
+# This module defines
+# JSONCPP_INCLUDE_DIRS, where to find header, etc.
+# JSONCPP_LIBRARIES, the libraries needed to use jsoncpp.
+# JSONCPP_FOUND, If false, do not try to use jsoncpp.
+# JSONCPP_INCLUDE_PREFIX, include prefix for jsoncpp
+
+# only look in default directories
+find_path(
+ JSONCPP_INCLUDE_DIR
+ NAMES jsoncpp/json/json.h json/json.h
+ DOC "jsoncpp include dir"
+)
+
+find_library(
+ JSONCPP_LIBRARY
+ NAMES jsoncpp
+ DOC "jsoncpp library"
+)
+
+set(JSONCPP_INCLUDE_DIRS ${JSONCPP_INCLUDE_DIR})
+set(JSONCPP_LIBRARIES ${JSONCPP_LIBRARY})
+
+# find JSONCPP_INCLUDE_PREFIX
+find_path(
+ JSONCPP_INCLUDE_PREFIX
+ NAMES json.h
+ PATH_SUFFIXES jsoncpp/json json
+)
+
+if (${JSONCPP_INCLUDE_PREFIX} MATCHES "jsoncpp")
+ set(JSONCPP_INCLUDE_PREFIX "jsoncpp/json")
+else()
+ set(JSONCPP_INCLUDE_PREFIX "json")
+endif()
+
+# handle the QUIETLY and REQUIRED arguments and set JSONCPP_FOUND to TRUE
+# if all listed variables are TRUE, hide their existence from configuration view
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(jsoncpp DEFAULT_MSG
+ JSONCPP_INCLUDE_DIR JSONCPP_LIBRARY)
+mark_as_advanced (JSONCPP_INCLUDE_DIR JSONCPP_LIBRARY) \ No newline at end of file
diff --git a/MetisForwarder/app/cmake/Modules/FindLibEvent.cmake b/HttpServer/app/cmake/Modules/FindLibEvent.cmake
index 2d1ca4fe..2d1ca4fe 100644
--- a/MetisForwarder/app/cmake/Modules/FindLibEvent.cmake
+++ b/HttpServer/app/cmake/Modules/FindLibEvent.cmake
diff --git a/HttpServer/app/cmake/Modules/FindLibicnet.cmake b/HttpServer/app/cmake/Modules/FindLibicnet.cmake
new file mode 100644
index 00000000..bfb81ef7
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindLibicnet.cmake
@@ -0,0 +1,39 @@
+########################################
+#
+# Find the Libparc libraries and includes
+# This module sets:
+# LIBICNET_FOUND: True if Libconsumer-producer was found
+# LIBICNETR_LIBRARY: The Libconsumer-producer library
+# LIBICNET_LIBRARIES: The Libconsumer-producer library and dependencies
+# LIBICNET_INCLUDE_DIR: The Libconsumer-producer include dir
+#
+
+set(LIBICNET_SEARCH_PATH_LIST
+ ${LIBICNET_HOME}
+ $ENV{LIBICNETHOME}
+ $ENV{CCNX_HOME}
+ $ENV{PARC_HOME}
+ $ENV{FOUNDATION_HOME}
+ /usr/local/parc
+ /usr/local/ccnx
+ /usr/local/ccn
+ /usr/local
+ /opt
+ /usr
+ )
+
+find_path(LIBICNET_INCLUDE_DIR icnet/icnet_ccnx_common.h
+ HINTS ${LIBICNET_SEARCH_PATH_LIST}
+ PATH_SUFFIXES include
+ DOC "Find the libicnet includes")
+
+find_library(LIBICNET_LIBRARY NAMES icnet
+ HINTS ${LIBICNET_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the libicnet libraries")
+
+set(LIBICNET_LIBRARIES ${LIBICNET_LIBRARY})
+set(LIBICNET_INCLUDE_DIRS ${LIBICNET_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Libicnet DEFAULT_MSG LIBICNET_LIBRARY LIBICNET_INCLUDE_DIR)
diff --git a/HttpServer/app/cmake/Modules/FindLibparc.cmake b/HttpServer/app/cmake/Modules/FindLibparc.cmake
new file mode 100644
index 00000000..da8b3af7
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindLibparc.cmake
@@ -0,0 +1,52 @@
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################
+#
+# Find the Libparc libraries and includes
+# This module sets:
+# LIBPARC_FOUND: True if Libparc was found
+# LIBPARC_LIBRARY: The Libparc library
+# LIBPARC_LIBRARIES: The Libparc library and dependencies
+# LIBPARC_INCLUDE_DIR: The Libparc include dir
+#
+
+set(LIBPARC_SEARCH_PATH_LIST
+ ${LIBPARC_HOME}
+ $ENV{LIBPARC_HOME}
+ $ENV{CCNX_HOME}
+ $ENV{PARC_HOME}
+ $ENV{FOUNDATION_HOME}
+ /usr/local/parc
+ /usr/local/ccnx
+ /usr/local/ccn
+ /usr/local
+ /opt
+ /usr
+ )
+
+find_path(LIBPARC_INCLUDE_DIR parc/libparc_About.h
+ HINTS ${LIBPARC_SEARCH_PATH_LIST}
+ PATH_SUFFIXES include
+ DOC "Find the Libparc includes")
+
+find_library(LIBPARC_LIBRARY NAMES parc
+ HINTS ${LIBPARC_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the Libparc libraries")
+
+set(LIBPARC_LIBRARIES ${LIBPARC_LIBRARY})
+set(LIBPARC_INCLUDE_DIRS ${LIBPARC_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(Libparc DEFAULT_MSG LIBPARC_LIBRARY LIBPARC_INCLUDE_DIR)
diff --git a/HttpServer/app/cmake/Modules/FindLongBow.cmake b/HttpServer/app/cmake/Modules/FindLongBow.cmake
new file mode 100644
index 00000000..28d0b3b1
--- /dev/null
+++ b/HttpServer/app/cmake/Modules/FindLongBow.cmake
@@ -0,0 +1,58 @@
+# Copyright (c) 2017 Cisco and/or its affiliates.
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at:
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+########################################
+#
+# Find the LongBow libraries and includes
+# This module sets:
+# LONGBOW_FOUND: True if LongBow was found
+# LONGBOW_LIBRARY: The LongBow library
+# LONGBOW_LIBRARIES: The LongBow library and dependencies
+# LONGBOW_INCLUDE_DIR: The LongBow include dir
+#
+
+set(LONGBOW_SEARCH_PATH_LIST
+ ${LONGBOW_HOME}
+ $ENV{LONGBOW_HOME}
+ $ENV{CCNX_HOME}
+ $ENV{PARC_HOME}
+ $ENV{FOUNDATION_HOME}
+ /usr/local/parc
+ /usr/local/ccnx
+ /usr/local/ccn
+ /usr/local
+ /opt
+ /usr
+ )
+
+find_path(LONGBOW_INCLUDE_DIR LongBow/longBow_About.h
+ HINTS ${LONGBOW_SEARCH_PATH_LIST}
+ PATH_SUFFIXES include
+ DOC "Find the LongBow includes")
+
+find_library(LONGBOW_LIBRARY NAMES longbow
+ HINTS ${LONGBOW_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the LongBow libraries")
+
+find_library(LONGBOW_REPORT_LIBRARY NAMES longbow-textplain longbow-ansiterm
+ HINTS ${LONGBOW_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the LongBow report libraries")
+
+set(LONGBOW_LIBRARIES ${LONGBOW_LIBRARY} ${LONGBOW_REPORT_LIBRARY})
+set(LONGBOW_INCLUDE_DIRS ${LONGBOW_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LongBow DEFAULT_MSG LONGBOW_LIBRARY LONGBOW_INCLUDE_DIR)
diff --git a/MetisForwarder/app/cmake/Modules/FindUncrustify.cmake b/HttpServer/app/cmake/Modules/FindUncrustify.cmake
index e53f65fe..e53f65fe 100644
--- a/MetisForwarder/app/cmake/Modules/FindUncrustify.cmake
+++ b/HttpServer/app/cmake/Modules/FindUncrustify.cmake
diff --git a/MetisForwarder/app/cmake/Modules/detectCacheSize.cmake b/HttpServer/app/cmake/Modules/detectCacheSize.cmake
index 469d2627..469d2627 100644
--- a/MetisForwarder/app/cmake/Modules/detectCacheSize.cmake
+++ b/HttpServer/app/cmake/Modules/detectCacheSize.cmake
diff --git a/MetisForwarder/app/cmake/Modules/version.cmake b/HttpServer/app/cmake/Modules/version.cmake
index 74831674..74831674 100644
--- a/MetisForwarder/app/cmake/Modules/version.cmake
+++ b/HttpServer/app/cmake/Modules/version.cmake
diff --git a/MetisForwarder/app/cmake/get_version.sh b/HttpServer/app/cmake/get_version.sh
index 34c6ddb2..34c6ddb2 100755
--- a/MetisForwarder/app/cmake/get_version.sh
+++ b/HttpServer/app/cmake/get_version.sh
diff --git a/HttpServer/app/httpserver.keystore b/HttpServer/app/httpserver.keystore
new file mode 100644
index 00000000..d277cc53
--- /dev/null
+++ b/HttpServer/app/httpserver.keystore
Binary files differ
diff --git a/iGetAndroid/app/proguard-rules.pro b/HttpServer/app/proguard-rules.pro
index 9366e766..f1b42451 100644
--- a/iGetAndroid/app/proguard-rules.pro
+++ b/HttpServer/app/proguard-rules.pro
@@ -1,14 +1,10 @@
# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /Users/angelomantellini/Library/Android/sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
-# Add any project specific keep options here:
-
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
diff --git a/MetisForwarder/app/src/androidTest/java/com/metis/ccnx/metisforwarder/ExampleInstrumentedTest.java b/HttpServer/app/src/androidTest/java/icn/httpserver/com/hicnhttpserver/ExampleInstrumentedTest.java
index 1d597bd0..91fb35e9 100644
--- a/MetisForwarder/app/src/androidTest/java/com/metis/ccnx/metisforwarder/ExampleInstrumentedTest.java
+++ b/HttpServer/app/src/androidTest/java/icn/httpserver/com/hicnhttpserver/ExampleInstrumentedTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -12,7 +12,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.metis.ccnx.metisforwarder;
+
+package icn.httpserver.com.hicnhttpserver;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
@@ -23,6 +24,11 @@ import org.junit.runner.RunWith;
import static org.junit.Assert.*;
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
@@ -30,6 +36,6 @@ public class ExampleInstrumentedTest {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
- assertEquals("com.metis.ccnx.metisforwarder", appContext.getPackageName());
+ assertEquals("hicn.cisco.com.hicnhttpserver", appContext.getPackageName());
}
}
diff --git a/MetisForwarder/app/src/main/AndroidManifest.xml b/HttpServer/app/src/main/AndroidManifest.xml
index f50951dd..1831bbc3 100644
--- a/MetisForwarder/app/src/main/AndroidManifest.xml
+++ b/HttpServer/app/src/main/AndroidManifest.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="metisforwarder.metis.com.metisforwarder">
+ package="icn.httpserver.com.httpserver">
<application
android:allowBackup="true"
@@ -10,7 +10,9 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
- <activity android:name="com.metis.ccnx.metisforwarder.MetisForwarderActivity">
+ <activity
+ android:name=".HttpServerActivity"
+ android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -18,8 +20,7 @@
</intent-filter>
</activity>
<service
- android:name="com.metis.ccnx.service.MetisForwarderService"
- android:permission="android.permission.BIND_VPN_SERVICE">
+ android:name="icn.httpserver.com.service.HttpServerService">
</service>
</application>
@@ -29,4 +30,4 @@
android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="21" />
-</manifest>
+</manifest> \ No newline at end of file
diff --git a/HttpServer/app/src/main/cpp/httpServerWrap.cpp b/HttpServer/app/src/main/cpp/httpServerWrap.cpp
new file mode 100644
index 00000000..d554fe58
--- /dev/null
+++ b/HttpServer/app/src/main/cpp/httpServerWrap.cpp
@@ -0,0 +1,236 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <jni.h>
+#include <string>
+#include <stdlib.h>
+#include <http-server/http_server.h>
+#include <http-client/http_client_icn.h>
+#include <http-client/http_client_tcp.h>
+#include <boost/filesystem.hpp>
+#include <fstream>
+#include <iostream>
+#include <android/log.h>
+
+
+static bool _isRunning = false;
+icn_httpserver::HttpServer *server;
+
+void default_resource_send(const icn_httpserver::HttpServer &server,
+ std::shared_ptr<icn_httpserver::Response> response,
+ std::shared_ptr<std::ifstream> ifs,
+ std::shared_ptr<std::vector<char>> buffer,
+ std::size_t bytes_to_read) {
+ std::streamsize read_length;
+
+ if ((read_length = ifs->read(&(*buffer)[0], buffer->size()).gcount()) > 0) {
+ response->write(&(*buffer)[0], read_length);
+
+ if (bytes_to_read <= static_cast<std::streamsize>(buffer->size())) {
+ return;
+ }
+
+ std::size_t to_read = bytes_to_read - read_length;
+ server.send(response,
+ [&server, response, ifs, buffer, to_read](const boost::system::error_code &ec) {
+ if (!ec) {
+ default_resource_send(server, response, ifs, buffer, to_read);
+ } else {
+ __android_log_print(ANDROID_LOG_ERROR, "HttpServer",
+ "Connection interrupted");
+ }
+ });
+ }
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_icn_httpserver_com_supportlibrary_HttpServer_start(JNIEnv *env, jobject instance,
+ jstring rootFolderString,
+ jstring tcpListenPortString,
+ jstring webServerPrefixString,
+ jstring proxyAddressString,
+ jstring iCNproxyAddressString) {
+ std::string root_folder = "";
+ int port = 8080;
+ std::string webserver_prefix = "";
+ std::string proxy_address = "";
+ std::string icn_proxy_address = "";
+ if (rootFolderString) {
+ const char *rootFolderChar = env->GetStringUTFChars(rootFolderString, JNI_FALSE);
+ root_folder.append(rootFolderChar);
+ env->ReleaseStringUTFChars(rootFolderString, rootFolderChar);
+ }
+
+ if (tcpListenPortString) {
+ const char *tcpListenPortChar = env->GetStringUTFChars(tcpListenPortString, JNI_FALSE);
+ port = atoi(tcpListenPortChar);
+ env->ReleaseStringUTFChars(tcpListenPortString, tcpListenPortChar);
+ }
+ if (webServerPrefixString) {
+ const char *webServerPrefixChar = env->GetStringUTFChars(webServerPrefixString, JNI_FALSE);
+ webserver_prefix.append(webServerPrefixChar);
+ env->ReleaseStringUTFChars(webServerPrefixString, webServerPrefixChar);
+ }
+ if (proxyAddressString) {
+ const char *proxyAddressChar = env->GetStringUTFChars(proxyAddressString, JNI_FALSE);
+ proxy_address.append(proxyAddressChar);
+ env->ReleaseStringUTFChars(proxyAddressString, proxyAddressChar);
+ }
+
+ if (iCNproxyAddressString) {
+ const char *iCNproxyAddressChar = env->GetStringUTFChars(iCNproxyAddressString, JNI_FALSE);
+ icn_proxy_address.append(iCNproxyAddressChar);
+ env->ReleaseStringUTFChars(iCNproxyAddressString, iCNproxyAddressChar);
+ }
+ boost::asio::io_service io_service;
+ server = new icn_httpserver::HttpServer(port, webserver_prefix, 50, 50, 300,
+ io_service);
+ _isRunning = true;
+ server->resource["^/info$"]["GET"] = [](std::shared_ptr<icn_httpserver::Response> response,
+ std::shared_ptr<icn_httpserver::Request> request) {
+ std::stringstream content_stream;
+ content_stream << "<h1>This webserver is able to reply to HTTP over TCP/ICN</h1>";
+ content_stream << request->getMethod() << " " << request->getPath() << " HTTP/"
+ << request->getHttp_version() << "<br>";
+ for (auto &header: request->getHeader()) {
+ content_stream << header.first << ": " << header.second << "<br>";
+ }
+
+ content_stream.seekp(0, std::ios::end);
+
+ *response << "HTTP/1.1 200 OK\r\nContent-Length: " << content_stream.tellp() << "\r\n\r\n"
+ << content_stream.rdbuf();
+ };
+
+
+ server->default_resource["GET"] = [&root_folder, &proxy_address, &icn_proxy_address](
+ std::shared_ptr<icn_httpserver::Response> response,
+ std::shared_ptr<icn_httpserver::Request>
+ request) {
+ const auto web_root_path = boost::filesystem::canonical(root_folder);
+
+ boost::filesystem::path path = web_root_path;
+ path /= request->getPath();
+
+ if (path.extension().string() == ".mpd") {
+ response->setResponseLifetime(std::chrono::milliseconds(3000));
+ }
+
+ icn_httpserver::SocketRequest *socket_request = dynamic_cast<icn_httpserver::SocketRequest *>(request.get());
+
+ if (boost::filesystem::exists(path)) {
+ path = boost::filesystem::canonical(path);
+
+ if (std::distance(web_root_path.begin(), web_root_path.end()) <=
+ std::distance(path.begin(), path.end()) &&
+ std::equal(web_root_path.begin(), web_root_path.end(), path.begin())) {
+ if (boost::filesystem::is_directory(path)) {
+ path /= "index.html";
+ } // default path
+
+ if (boost::filesystem::exists(path) && boost::filesystem::is_regular_file(path)) {
+ auto ifs = std::make_shared<std::ifstream>();
+ ifs->open(path.string(), std::ifstream::in | std::ios::binary);
+ if (*ifs) {
+ std::streamsize buffer_size = 15 * 1024 * 1024;
+ auto buffer = std::make_shared<std::vector<char> >(buffer_size);
+
+ ifs->seekg(0, std::ios::end);
+ auto length = ifs->tellg();
+ ifs->seekg(0, std::ios::beg);
+
+ response->setResponseLength(length);
+ *response << "HTTP/1.0 200 OK\r\nContent-Length: " << length << "\r\n\r\n";
+
+ if (path.extension().string() == ".mpd") {
+ response->setResponseLifetime(std::chrono::milliseconds(1000));
+ }
+ default_resource_send(*server, response, ifs, buffer, length);
+
+ return;
+
+ }
+ }
+ }
+ }
+
+ std::string proxy = "";
+ HTTPClient *client = nullptr;
+
+ if (proxy_address.empty() && !icn_proxy_address.empty()) {
+ proxy = icn_proxy_address;
+ client = new HTTPClientIcn(20);
+ } else if (!proxy_address.empty() && icn_proxy_address.empty()) {
+ proxy = proxy_address;
+ client = new HTTPClientTcp;
+ } else if (!proxy_address.empty() && !icn_proxy_address.empty()) {
+ if (socket_request) {
+ proxy = icn_proxy_address;
+ client = new HTTPClientIcn(20);
+ } else {
+ proxy = proxy_address;
+ client = new HTTPClientTcp;
+ }
+ }
+
+ if (!proxy.empty()) {
+ std::stringstream ss;
+ if (strncmp("http://", proxy.c_str(), 7) != 0) {
+ if (strncmp("https://", proxy.c_str(), 8) != 0) {
+ ss << "https://";
+ } else {
+ ss << "http://";
+ }
+ }
+ ss << proxy;
+ ss << request->getPath();
+ std::cout << ss.str() << std::endl;
+ client->download(ss.str(), *response);
+
+ delete client;
+ if (response->size() == 0) {
+ *response << "HTTP/1.1 504 Gateway Timeout\r\n\r\n";
+ }
+
+ return;
+ }
+
+ std::string content = "Could not open path " + request->getPath();
+
+ *response << "HTTP/1.1 404 Not found\r\nContent-Length: " << content.length() << "\r\n\r\n"
+ << content;
+ };
+
+ __android_log_print(ANDROID_LOG_INFO, "HttpServer", "HttpServer Starting");
+ server->start();
+
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_icn_httpserver_com_supportlibrary_HttpServer_stop(JNIEnv *env, jobject instance) {
+ server->stop();
+ _isRunning = false;
+ __android_log_print(ANDROID_LOG_INFO, "HttpServer", "HttpServer Stopped");
+
+}
+
+extern "C"
+JNIEXPORT jboolean JNICALL
+Java_icn_httpserver_com_supportlibrary_HttpServer_isRunning(JNIEnv *env, jobject instance) {
+ __android_log_print(ANDROID_LOG_INFO, "HttpServer", "Is Running? %s", _isRunning ? "true" : "false");
+ return _isRunning;
+
+} \ No newline at end of file
diff --git a/HttpServer/app/src/main/ic_launcher-web.png b/HttpServer/app/src/main/ic_launcher-web.png
new file mode 100644
index 00000000..1206ee9c
--- /dev/null
+++ b/HttpServer/app/src/main/ic_launcher-web.png
Binary files differ
diff --git a/HttpServer/app/src/main/java/icn/httpserver/com/httpserver/HttpServerActivity.java b/HttpServer/app/src/main/java/icn/httpserver/com/httpserver/HttpServerActivity.java
new file mode 100644
index 00000000..78ef8ff2
--- /dev/null
+++ b/HttpServer/app/src/main/java/icn/httpserver/com/httpserver/HttpServerActivity.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package icn.httpserver.com.httpserver;
+
+import android.Manifest;
+import android.app.Dialog;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.content.res.Configuration;
+import android.net.Uri;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.EditText;
+import android.widget.Switch;
+
+import icn.httpserver.com.service.HttpServerService;
+import icn.httpserver.com.supportlibrary.HttpServer;
+import icn.httpserver.com.utility.Constants;
+import icn.httpserver.com.utility.ResourcesEnumerator;
+
+public class HttpServerActivity extends AppCompatActivity {
+ private EditText rootFolderEditText;
+ private EditText tcpListenPortEditText;
+ private EditText webServerPrefixEditText;
+ private EditText proxyAddressEditText;
+ private EditText iCNproxyAddressEditText;
+ private Switch httpServerSwitch;
+ private Button yesButtonDialog;
+ private Button noButtonDialog;
+
+
+ private SharedPreferences sharedPreferences;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_http_server);
+ checkEnabledPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ checkEnabledPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
+ if (!checkMetis(Constants.METIS_ID)) {
+ final Dialog dialog = new Dialog(this);
+ dialog.setContentView(R.layout.popup_message);
+ yesButtonDialog = (Button) dialog.findViewById(R.id.yesButtonDialog);
+ noButtonDialog = (Button) dialog.findViewById(R.id.noButtonDialog);
+ yesButtonDialog.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + Constants.METIS_ID)));
+ } catch (android.content.ActivityNotFoundException anfe) {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + Constants.METIS_ID)));
+ }
+ dialog.hide();
+ }
+ });
+ noButtonDialog.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ dialog.hide();
+ }
+ });
+ dialog.show();
+
+ }
+ init();
+ }
+
+
+ private void checkEnabledPermission(String permission) {
+ if (ContextCompat.checkSelfPermission(this,
+ permission)
+ != PackageManager.PERMISSION_GRANTED) {
+ if (ActivityCompat.shouldShowRequestPermissionRationale(this,
+ permission)) {
+ } else {
+ ActivityCompat.requestPermissions(this,
+ new String[]{permission},
+ 1);
+ }
+ }
+ }
+
+ private boolean checkMetis(String uri) {
+ PackageManager pm = getPackageManager();
+ try {
+ pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
+ return true;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ }
+
+ private void init() {
+ sharedPreferences = getSharedPreferences(Constants.HTTP_SERVER_PREFERENCES, MODE_PRIVATE);
+ rootFolderEditText = (EditText) findViewById(R.id.rootFolderEditText);
+ rootFolderEditText.setText(sharedPreferences.getString(ResourcesEnumerator.ROOT_FOLDER.key(), Constants.DEFAULT_ROOT_FOLDER));
+ tcpListenPortEditText = (EditText) findViewById(R.id.tcpListenPortEditText);
+ tcpListenPortEditText.setText(sharedPreferences.getString(ResourcesEnumerator.TCP_LISTEN_PORT.key(), Constants.DEFAULT_TCP_LISTEN_PORT));
+ webServerPrefixEditText = (EditText) findViewById(R.id.webServerPrefixEditText);
+ webServerPrefixEditText.setText(sharedPreferences.getString(ResourcesEnumerator.WEBSERVER_PREFIX.key(), Constants.DEFAULT_WEBSERVER_PREFIX));
+ proxyAddressEditText = (EditText) findViewById(R.id.proxyAddressEditText);
+ proxyAddressEditText.setText(sharedPreferences.getString(ResourcesEnumerator.PROXY_ADDRESS.key(), Constants.DEFAULT_PROXY_ADDRESS));
+ iCNproxyAddressEditText = (EditText) findViewById(R.id.iCNproxyAddressEditText);
+ iCNproxyAddressEditText.setText(sharedPreferences.getString(ResourcesEnumerator.ICN_PROXY_ADDRESS.key(), Constants.DEFAULT_ICN_PROXY_ADDRESS));
+ httpServerSwitch = (Switch) findViewById(R.id.httpServerSwitch);
+ if (HttpServer.getInstance().isRunning()) {
+ httpServerSwitch.setChecked(true);
+ rootFolderEditText.setEnabled(false);
+ tcpListenPortEditText.setEnabled(false);
+ webServerPrefixEditText.setEnabled(false);
+ proxyAddressEditText.setEnabled(false);
+ iCNproxyAddressEditText.setEnabled(false);
+ }
+
+ httpServerSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ Log.v("Switch State=", "" + isChecked);
+ if (isChecked) {
+ httpServerSwitch.setText(Constants.ENABLED);
+ SharedPreferences.Editor sharedPreferencesEditor = getSharedPreferences(Constants.HTTP_SERVER_PREFERENCES, MODE_PRIVATE).edit();
+ sharedPreferencesEditor.putString(ResourcesEnumerator.ROOT_FOLDER.key(), rootFolderEditText.getText().toString());
+ sharedPreferencesEditor.putString(ResourcesEnumerator.TCP_LISTEN_PORT.key(), tcpListenPortEditText.getText().toString());
+ sharedPreferencesEditor.putString(ResourcesEnumerator.WEBSERVER_PREFIX.key(), webServerPrefixEditText.getText().toString());
+ sharedPreferencesEditor.putString(ResourcesEnumerator.PROXY_ADDRESS.key(), proxyAddressEditText.getText().toString());
+ sharedPreferencesEditor.putString(ResourcesEnumerator.ICN_PROXY_ADDRESS.key(), iCNproxyAddressEditText.getText().toString());
+ sharedPreferencesEditor.commit();
+ rootFolderEditText.setEnabled(false);
+ tcpListenPortEditText.setEnabled(false);
+ webServerPrefixEditText.setEnabled(false);
+ proxyAddressEditText.setEnabled(false);
+ iCNproxyAddressEditText.setEnabled(false);
+ startHttpServer();
+
+ } else {
+ httpServerSwitch.setText(Constants.DISABLED);
+ rootFolderEditText.setEnabled(true);
+ tcpListenPortEditText.setEnabled(true);
+ webServerPrefixEditText.setEnabled(true);
+ proxyAddressEditText.setEnabled(true);
+ iCNproxyAddressEditText.setEnabled(true);
+ stopHttpServer();
+ }
+ }
+
+ });
+
+
+ }
+
+ private void startHttpServer() {
+ Intent intent = new Intent(this, HttpServerService.class);
+ startService(intent);
+ }
+
+ private void stopHttpServer() {
+ Intent intent = new Intent(this, HttpServerService.class);
+ stopService(intent);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ }
+
+}
diff --git a/HttpServer/app/src/main/java/icn/httpserver/com/service/HttpServerService.java b/HttpServer/app/src/main/java/icn/httpserver/com/service/HttpServerService.java
new file mode 100644
index 00000000..977993ee
--- /dev/null
+++ b/HttpServer/app/src/main/java/icn/httpserver/com/service/HttpServerService.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package icn.httpserver.com.service;
+
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.os.IBinder;
+import android.util.Log;
+
+import java.io.File;
+
+import icn.httpserver.com.httpserver.HttpServerActivity;
+import icn.httpserver.com.supportlibrary.HttpServer;
+import icn.httpserver.com.utility.Constants;
+import icn.httpserver.com.utility.ResourcesEnumerator;
+
+/**
+ * Created by angelomantellini on 12/11/17.
+ */
+
+
+public class HttpServerService extends Service {
+ private final static String TAG = "HttpServerService";
+
+ private static Thread sHttpServerThread = null;
+
+ public HttpServerService() {
+ }
+
+ private String rootFolderString;
+ private String tcpListenPortString;
+ private String webServerPrefixString;
+ private String proxyAddressString;
+ private String iCNproxyAddressString;
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+
+ HttpServer httpServer = HttpServer.getInstance();
+ if (!httpServer.isRunning()) {
+ Log.d(TAG, "Starting Http Server");
+ SharedPreferences sharedPreferences = getSharedPreferences(Constants.HTTP_SERVER_PREFERENCES, MODE_PRIVATE);
+ String rootFolderString = sharedPreferences.getString(ResourcesEnumerator.ROOT_FOLDER.key(),
+ null);
+ String tcpListenPortString = sharedPreferences.getString(ResourcesEnumerator.TCP_LISTEN_PORT.key(), null);
+ String webServerPrefixString = sharedPreferences.getString(ResourcesEnumerator.WEBSERVER_PREFIX.key(), null);
+ String proxyAddressString = sharedPreferences.getString(ResourcesEnumerator.PROXY_ADDRESS.key(), null);
+ String iCNproxyAddressString = sharedPreferences.getString(ResourcesEnumerator.ICN_PROXY_ADDRESS.key(), null);
+ File folder = new File(rootFolderString);
+ if (!folder.exists()) {
+ folder.mkdirs();
+ }
+
+
+ startHttpServer(intent, rootFolderString, tcpListenPortString, webServerPrefixString, proxyAddressString, iCNproxyAddressString);
+
+
+ } else {
+ Log.d(TAG, "Http Server is already running.");
+ }
+ return Service.START_STICKY;
+ }
+
+
+ @Override
+ public void onDestroy() {
+ HttpServer httpServer = HttpServer.getInstance();
+ Log.d(TAG, "Destroying HttpServer");
+ if (httpServer.isRunning()) {
+ httpServer.stop();
+ stopForeground(true);
+ }
+ super.onDestroy();
+ }
+
+ protected Runnable mHttpServerRunner = new Runnable() {
+
+ //private String path;
+ @Override
+ public void run() {
+ HttpServer httpServer = HttpServer.getInstance();
+ httpServer.start(rootFolderString, tcpListenPortString, webServerPrefixString, proxyAddressString, iCNproxyAddressString);
+ }
+
+
+ };
+
+ private void startHttpServer(Intent intent, String rootFolderString, String tcpListenPortString, String webServerPrefixString, String proxyAddressString, String iCNproxyAddressString) {
+ String NOTIFICATION_CHANNEL_ID = "12345";
+ Notification.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= 26) {
+ notificationBuilder = new Notification.Builder(this, NOTIFICATION_CHANNEL_ID);
+ } else {
+ notificationBuilder = new Notification.Builder(this);
+ }
+ Intent notificationIntent = new Intent(this, HttpServerActivity.class);
+ PendingIntent activity = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ notificationBuilder.setContentTitle("HttpServer").setContentText("HttpServer").setOngoing(true).setContentIntent(activity);
+ Notification notification = notificationBuilder.build();
+
+ if (Build.VERSION.SDK_INT >= 26) {
+ NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "HttpServer", NotificationManager.IMPORTANCE_DEFAULT);
+ channel.setDescription("HttpServer");
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ notificationManager.createNotificationChannel(channel);
+
+ }
+
+ startForeground(Constants.FOREGROUND_SERVICE, notification);
+
+
+ HttpServer httpServer = HttpServer.getInstance();
+ if (!httpServer.isRunning()) {
+ this.rootFolderString = rootFolderString;
+ this.tcpListenPortString = tcpListenPortString;
+ this.webServerPrefixString = webServerPrefixString;
+ this.proxyAddressString = proxyAddressString;
+ this.iCNproxyAddressString = iCNproxyAddressString;
+ sHttpServerThread = new Thread(mHttpServerRunner, "HttpServerRunner");
+ sHttpServerThread.start();
+ }
+
+
+ Log.e(TAG, "HttpServer Started");
+
+ }
+
+
+}
diff --git a/HttpServer/app/src/main/java/icn/httpserver/com/supportlibrary/HttpServer.java b/HttpServer/app/src/main/java/icn/httpserver/com/supportlibrary/HttpServer.java
new file mode 100644
index 00000000..5b5356db
--- /dev/null
+++ b/HttpServer/app/src/main/java/icn/httpserver/com/supportlibrary/HttpServer.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package icn.httpserver.com.supportlibrary;
+
+public class HttpServer {
+
+ private static HttpServer sInstance = null;
+
+ static {
+ System.loadLibrary("httpServerWrap");
+
+ }
+
+ public static HttpServer getInstance() {
+ if (sInstance == null) {
+ sInstance = new HttpServer();
+ }
+ return sInstance;
+ }
+
+ private HttpServer() {
+
+ }
+
+
+ public native boolean isRunning();
+
+ public native void start(String rootFolderString,
+ String tcpListenPortString,
+ String webServerPrefixString,
+ String proxyAddressString,
+ String iCNproxyAddressString);
+ public native void stop();
+}
diff --git a/HttpServer/app/src/main/java/icn/httpserver/com/utility/Constants.java b/HttpServer/app/src/main/java/icn/httpserver/com/utility/Constants.java
new file mode 100644
index 00000000..d44bcbfd
--- /dev/null
+++ b/HttpServer/app/src/main/java/icn/httpserver/com/utility/Constants.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package icn.httpserver.com.utility;
+
+public class Constants {
+ public static final String DEFAULT_ROOT_FOLDER = "/sdcard/HttpServer";
+ public static final String DEFAULT_TCP_LISTEN_PORT = "8080";
+ public static final String DEFAULT_WEBSERVER_PREFIX = "http://android-webserver";
+ public static final String DEFAULT_PROXY_ADDRESS = "http://localhost/proxy";
+ public static final String DEFAULT_ICN_PROXY_ADDRESS = "http://systemx-cicn.enst.fr";
+ public static final String METIS_ID = "icn.forwarder.com.icnforwarderandroid";
+ public static final String ENABLED = "Enabled";
+ public static final String DISABLED = "Disabled";
+ public static final String HTTP_SERVER_PREFERENCES = "httpServerPreferences";
+ public static final int FOREGROUND_SERVICE = 101;
+}
diff --git a/HttpServer/app/src/main/java/icn/httpserver/com/utility/ResourcesEnumerator.java b/HttpServer/app/src/main/java/icn/httpserver/com/utility/ResourcesEnumerator.java
new file mode 100644
index 00000000..8efb10d3
--- /dev/null
+++ b/HttpServer/app/src/main/java/icn/httpserver/com/utility/ResourcesEnumerator.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package icn.httpserver.com.utility;
+
+public enum ResourcesEnumerator {
+ ROOT_FOLDER("rootFolder"),
+ TCP_LISTEN_PORT("tcpListenPort"),
+ WEBSERVER_PREFIX("webServerPRefix"),
+ PROXY_ADDRESS("proxyAddress"),
+ ICN_PROXY_ADDRESS("iCNproxyAddress");
+
+ private String key;
+
+ ResourcesEnumerator(String key) {
+ this.key = key;
+ }
+
+ public String key() {
+ return key;
+ }
+}
diff --git a/HttpServer/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/HttpServer/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 00000000..c7bd21db
--- /dev/null
+++ b/HttpServer/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportHeight="108"
+ android:viewportWidth="108">
+ <path
+ android:fillType="evenOdd"
+ android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
+ android:strokeColor="#00000000"
+ android:strokeWidth="1">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="78.5885"
+ android:endY="90.9159"
+ android:startX="48.7653"
+ android:startY="61.0927"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
+ android:strokeColor="#00000000"
+ android:strokeWidth="1" />
+</vector>
diff --git a/HttpServer/app/src/main/res/drawable/ic_launcher_background.xml b/HttpServer/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..d5fccc53
--- /dev/null
+++ b/HttpServer/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportHeight="108"
+ android:viewportWidth="108">
+ <path
+ android:fillColor="#26A69A"
+ android:pathData="M0,0h108v108h-108z" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M9,0L9,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,0L19,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,0L29,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,0L39,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,0L49,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,0L59,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,0L69,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,0L79,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M89,0L89,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M99,0L99,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,9L108,9"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,19L108,19"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,29L108,29"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,39L108,39"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,49L108,49"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,59L108,59"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,69L108,69"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,79L108,79"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,89L108,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,99L108,99"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,29L89,29"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,39L89,39"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,49L89,49"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,59L89,59"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,69L89,69"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,79L89,79"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,19L29,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,19L39,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,19L49,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,19L59,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,19L69,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,19L79,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+</vector>
diff --git a/MetisForwarder/app/src/main/res/layout/activity_metis_forwarder.xml b/HttpServer/app/src/main/res/layout/activity_http_server.xml
index ce9cc47c..e4a7614a 100644
--- a/MetisForwarder/app/src/main/res/layout/activity_metis_forwarder.xml
+++ b/HttpServer/app/src/main/res/layout/activity_http_server.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context="com.metis.ccnx.metisforwarder.MetisForwarderActivity">
+ tools:context="icn.httpserver.com.httpserver.HttpServerActivity">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="0dp"
@@ -23,10 +23,10 @@
android:orientation="vertical">
<TextView
- android:id="@+id/sourceTextView"
+ android:id="@+id/rootFolderTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="Source"
+ android:text="Root Folder"
android:textSize="30sp"
android:textStyle="bold" />
@@ -37,27 +37,31 @@
android:orientation="horizontal"
android:paddingLeft="30dp">
- <TextView
- android:id="@+id/sourceIpTextView"
- android:layout_width="130dp"
- android:layout_height="wrap_content"
- android:text="IP"
- android:textAlignment="textEnd"
- android:textSize="24sp"
- android:textStyle="bold" />
-
- <Spinner
- android:id="@+id/sourceIpSpinner"
+ <EditText
+ android:id="@+id/rootFolderEditText"
android:layout_width="500dp"
android:layout_height="wrap_content"
- android:paddingLeft="200dp" />
+ android:ems="10"
+ android:inputType="textUri"
+ android:text="8888:8888:8888:8888:8888:8888:8888:8888"
+ android:textSize="24sp" />
- <Button
- android:id="@+id/sourceIpRefreshButton"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="Refresh" />
</LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/tcpListenPortTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="TCP Listen Port"
+ android:textSize="30sp"
+ android:textStyle="bold" />
+
<LinearLayout
android:layout_width="wrap_content"
@@ -66,17 +70,9 @@
android:orientation="horizontal"
android:paddingLeft="30dp">
- <TextView
- android:id="@+id/sourcePortTextView"
- android:layout_width="130dp"
- android:layout_height="wrap_content"
- android:text="Port"
- android:textAlignment="textEnd"
- android:textSize="24sp"
- android:textStyle="bold" />
<EditText
- android:id="@+id/sourcePortEditText"
+ android:id="@+id/tcpListenPortEditText"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:ems="10"
@@ -84,22 +80,26 @@
android:text="88888"
android:textSize="24sp" />
+
</LinearLayout>
+
</LinearLayout>
+
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
- android:id="@+id/nextHopTextView"
+ android:id="@+id/webServerPrefixTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="Next Hop"
+ android:text="Web Server Prefix"
android:textSize="30sp"
android:textStyle="bold" />
+
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -107,49 +107,15 @@
android:orientation="horizontal"
android:paddingLeft="30dp">
- <TextView
- android:id="@+id/destinationIpTextView"
- android:layout_width="130dp"
- android:layout_height="wrap_content"
- android:text="IP"
- android:textAlignment="textEnd"
- android:textSize="24sp"
- android:textStyle="bold" />
<EditText
- android:id="@+id/nextHopIpEditText"
+ android:id="@+id/webServerPrefixEditText"
android:layout_width="500dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textUri"
android:text="8888:8888:8888:8888:8888:8888:8888:8888"
android:textSize="24sp" />
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_weight="0.25"
- android:orientation="horizontal"
- android:paddingLeft="30dp">
-
- <TextView
- android:id="@+id/nextHopPortTextView"
- android:layout_width="130dp"
- android:layout_height="wrap_content"
- android:text="Port"
- android:textAlignment="textEnd"
- android:textSize="24sp"
- android:textStyle="bold" />
-
- <EditText
- android:id="@+id/nextHopPortEditText"
- android:layout_width="80dp"
- android:layout_height="wrap_content"
- android:ems="10"
- android:inputType="number"
- android:text="88888"
- android:textSize="24sp" />
</LinearLayout>
@@ -162,13 +128,14 @@
android:orientation="vertical">
<TextView
- android:id="@+id/routeTextView"
+ android:id="@+id/proxyAddressTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="Route"
+ android:text="Proxy Address"
android:textSize="30sp"
android:textStyle="bold" />
+
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -176,64 +143,65 @@
android:orientation="horizontal"
android:paddingLeft="30dp">
- <TextView
- android:id="@+id/prefixTextView"
- android:layout_width="130dp"
- android:layout_height="wrap_content"
- android:text="Prefix"
- android:textAlignment="textEnd"
- android:textSize="24sp"
- android:textStyle="bold" />
<EditText
- android:id="@+id/prefixEditText"
+ android:id="@+id/proxyAddressEditText"
android:layout_width="500dp"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textUri"
android:text="8888:8888:8888:8888:8888:8888:8888:8888"
android:textSize="24sp" />
+
+
</LinearLayout>
</LinearLayout>
<LinearLayout
- android:layout_width="fill_parent"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
- android:id="@+id/configurationTextView"
+ android:id="@+id/iCNproxyAddressTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="Configuration"
+ android:text="ICN Proxy Address"
android:textSize="30sp"
android:textStyle="bold" />
- <ScrollView
- android:layout_width="fill_parent"
- android:layout_height="200dp"
- android:background="@drawable/border">
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.25"
+ android:orientation="horizontal"
+ android:paddingLeft="30dp">
<EditText
- android:id="@+id/configurationEditText"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="@android:color/transparent"
+ android:id="@+id/iCNproxyAddressEditText"
+ android:layout_width="500dp"
+ android:layout_height="wrap_content"
android:ems="10"
- android:inputType="textMultiLine"
- android:text="# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1"
- app:layout_constraintVertical_bias="0.33999997" />
- </ScrollView>
+ android:inputType="textUri"
+ android:text="8888:8888:8888:8888:8888:8888:8888:8888"
+ android:textSize="24sp" />
+
+
+ </LinearLayout>
</LinearLayout>
+
<Switch
- android:id="@+id/metisForwarderSwitch"
+ android:id="@+id/httpServerSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Disabled"
android:textSize="30sp" />
</LinearLayout>
+
+
</android.support.constraint.ConstraintLayout>
diff --git a/HttpServer/app/src/main/res/layout/popup_message.xml b/HttpServer/app/src/main/res/layout/popup_message.xml
new file mode 100644
index 00000000..a2631820
--- /dev/null
+++ b/HttpServer/app/src/main/res/layout/popup_message.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="#FFFFFF"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/txt_dia"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_margin="10dp"
+ android:text="Metis is not installed.\nDo you want to install it?"
+ android:textColor="#1B90CD"
+ android:textSize="15dp"
+ android:textStyle="bold" />
+
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:orientation="horizontal">
+
+ <Button
+ android:id="@+id/yesButtonDialog"
+ android:layout_width="100dp"
+ android:layout_height="wrap_content"
+ android:clickable="true"
+ android:text="Yes"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/noButtonDialog"
+ android:layout_width="100dp"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp"
+ android:clickable="true"
+ android:text="No"
+ android:textStyle="bold" />
+ </LinearLayout>
+
+</LinearLayout> \ No newline at end of file
diff --git a/HttpServer/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/HttpServer/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..036d09bc
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@color/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon> \ No newline at end of file
diff --git a/HttpServer/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/HttpServer/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..036d09bc
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@color/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon> \ No newline at end of file
diff --git a/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher.png b/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..1dbe3aa2
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..edefad42
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..111c8539
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher.png b/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..c48f24f5
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..d6759fbd
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..de197c96
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..8dbd4a40
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..e2e76cdb
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..d0b0550a
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..6af4627e
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..8f7a4216
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..037af884
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..7997db04
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..1d886ce9
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..87477445
--- /dev/null
+++ b/HttpServer/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/values/colors.xml b/HttpServer/app/src/main/res/values/colors.xml
index 3ab3e9cb..3ab3e9cb 100644
--- a/MetisForwarder/app/src/main/res/values/colors.xml
+++ b/HttpServer/app/src/main/res/values/colors.xml
diff --git a/HttpServer/app/src/main/res/values/ic_launcher_background.xml b/HttpServer/app/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 00000000..fb66f3a0
--- /dev/null
+++ b/HttpServer/app/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="ic_launcher_background">#FEFEFE</color>
+</resources> \ No newline at end of file
diff --git a/HttpServer/app/src/main/res/values/strings.xml b/HttpServer/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..cdb15faa
--- /dev/null
+++ b/HttpServer/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">HttpServer</string>
+</resources>
diff --git a/MetisForwarder/app/src/main/res/values/styles.xml b/HttpServer/app/src/main/res/values/styles.xml
index 5885930d..5885930d 100644
--- a/MetisForwarder/app/src/main/res/values/styles.xml
+++ b/HttpServer/app/src/main/res/values/styles.xml
diff --git a/iGetAndroid/app/src/test/java/com/iget/ccnx/igetandroid/ExampleUnitTest.java b/HttpServer/app/src/test/java/icn/httpserver/com/hicnhttpserver/ExampleUnitTest.java
index 85f92f71..e70b06db 100644
--- a/iGetAndroid/app/src/test/java/com/iget/ccnx/igetandroid/ExampleUnitTest.java
+++ b/HttpServer/app/src/test/java/icn/httpserver/com/hicnhttpserver/ExampleUnitTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,12 +13,17 @@
* limitations under the License.
*/
-package com.iget.ccnx.igetandroid;
+package icn.httpserver.com.hicnhttpserver;
import org.junit.Test;
import static org.junit.Assert.*;
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
diff --git a/HttpServer/build.gradle b/HttpServer/build.gradle
new file mode 100644
index 00000000..43cfc775
--- /dev/null
+++ b/HttpServer/build.gradle
@@ -0,0 +1,28 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.0.1'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/MetisForwarder/gradle.properties b/HttpServer/gradle.properties
index aac7c9b4..aac7c9b4 100644
--- a/MetisForwarder/gradle.properties
+++ b/HttpServer/gradle.properties
diff --git a/MetisForwarder/gradle/wrapper/gradle-wrapper.jar b/HttpServer/gradle/wrapper/gradle-wrapper.jar
index 13372aef..13372aef 100644
--- a/MetisForwarder/gradle/wrapper/gradle-wrapper.jar
+++ b/HttpServer/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/MetisForwarder/gradle/wrapper/gradle-wrapper.properties b/HttpServer/gradle/wrapper/gradle-wrapper.properties
index edad0af2..7ff9d56c 100644
--- a/MetisForwarder/gradle/wrapper/gradle-wrapper.properties
+++ b/HttpServer/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Thu May 18 09:50:39 CEST 2017
+#Mon Dec 11 13:54:53 CET 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
diff --git a/MetisForwarder/gradlew b/HttpServer/gradlew
index 9d82f789..9d82f789 100755
--- a/MetisForwarder/gradlew
+++ b/HttpServer/gradlew
diff --git a/MetisForwarder/gradlew.bat b/HttpServer/gradlew.bat
index aec99730..aec99730 100644
--- a/MetisForwarder/gradlew.bat
+++ b/HttpServer/gradlew.bat
diff --git a/MetisForwarder/settings.gradle b/HttpServer/settings.gradle
index e7b4def4..e7b4def4 100644
--- a/MetisForwarder/settings.gradle
+++ b/HttpServer/settings.gradle
diff --git a/IGetAndroid/IGetAndroid.iml b/IGetAndroid/IGetAndroid.iml
new file mode 100644
index 00000000..e445f2de
--- /dev/null
+++ b/IGetAndroid/IGetAndroid.iml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id="IGetAndroid" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+ <component name="FacetManager">
+ <facet type="java-gradle" name="Java-Gradle">
+ <configuration>
+ <option name="BUILD_FOLDER_PATH" value="$MODULE_DIR$/build" />
+ <option name="BUILDABLE" value="false" />
+ </configuration>
+ </facet>
+ </component>
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="true">
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <excludeFolder url="file://$MODULE_DIR$/.gradle" />
+ </content>
+ <orderEntry type="inheritedJdk" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ </component>
+</module> \ No newline at end of file
diff --git a/IGetAndroid/app/.DS_Store b/IGetAndroid/app/.DS_Store
new file mode 100644
index 00000000..5172429f
--- /dev/null
+++ b/IGetAndroid/app/.DS_Store
Binary files differ
diff --git a/iGetAndroid/app/.gitignore b/IGetAndroid/app/.gitignore
index 796b96d1..796b96d1 100644
--- a/iGetAndroid/app/.gitignore
+++ b/IGetAndroid/app/.gitignore
diff --git a/iGetAndroid/app/CMakeLists.txt b/IGetAndroid/app/CMakeLists.txt
index a1e05ed1..95019c1d 100644
--- a/iGetAndroid/app/CMakeLists.txt
+++ b/IGetAndroid/app/CMakeLists.txt
@@ -7,10 +7,11 @@ cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-set(CMAKE_FIND_ROOT_PATH "$ENV{CCNX_HOME};${CMAKE_FIND_ROOT_PATH}")
-include_directories(${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR}/hicn-forwarder)
-set(BOOST_ROOT /Users/angelomantellini/fdio2/android-sdk/usr)
+set(CMAKE_FIND_ROOT_PATH "$ENV{DISTILLERY_ROOT_DIR}/usr_${CMAKE_SYSTEM_PROCESSOR};${CMAKE_FIND_ROOT_PATH}")
+include_directories(${PROJECT_SOURCE_DIR})
+
+
find_package(Boost 1.53.0 COMPONENTS system REQUIRED)
include_directories(SYSTEM ${Boost_INCLUDE_DIR})
@@ -42,21 +43,26 @@ include_directories(${LIBICNET_INCLUDE_DIRS})
find_package ( OpenSSL REQUIRED )
+
+# Creates and names a library, sets it as either STATIC
+# or SHARED, and provides the relative paths to its source code.
+# You can define multiple libraries, and CMake builds them for you.
+# Gradle automatically packages shared libraries with your APK.
+
add_library( # Sets the name of the library.
- native-lib
+ IGetWrapper
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
- src/main/cpp/native-lib.cpp )
+ src/main/cpp/IGetWrapper.cpp )
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.
-#set(Boost_LIBRARIES /Users/angelomantellini/fdio2/android-sdk/usr/lib/libboost_regex.a /Users/angelomantellini/fdio2/android-sdk/usr/lib/libboost_system.a /Users/angelomantellini/fdio2/android-sdk/usr/lib/libboost_thread.a /Users/angelomantellini/fdio2/android-sdk/usr/lib/libboost_filesystem.a /Users/angelomantellini/fdio2/android-sdk/usr/lib/libboost_date_time.a /Users/angelomantellini/fdio2/android-sdk/usr/lib/libboost_chrono.a)
find_library( # Sets the name of the path variable.
log-lib
@@ -64,12 +70,13 @@ find_library( # Sets the name of the path variable.
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
+
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library.
- native-lib
+ IGetWrapper
# Links the target library to the log library
# included in the NDK.
diff --git a/IGetAndroid/app/app.iml b/IGetAndroid/app/app.iml
new file mode 100644
index 00000000..c6d0aaff
--- /dev/null
+++ b/IGetAndroid/app/app.iml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module external.linked.project.id=":app" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
+ <component name="FacetManager">
+ <facet type="android-gradle" name="Android-Gradle">
+ <configuration>
+ <option name="GRADLE_PROJECT_PATH" value=":app" />
+ </configuration>
+ </facet>
+ <facet type="native-android-gradle" name="Native-Android-Gradle">
+ <configuration>
+ <option name="SELECTED_BUILD_VARIANT" value="release" />
+ </configuration>
+ </facet>
+ <facet type="android" name="Android">
+ <configuration>
+ <option name="SELECTED_BUILD_VARIANT" value="debug" />
+ <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
+ <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
+ <afterSyncTasks>
+ <task>generateDebugSources</task>
+ </afterSyncTasks>
+ <option name="ALLOW_USER_CONFIGURATION" value="false" />
+ <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
+ <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
+ <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
+ <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
+ </configuration>
+ </facet>
+ </component>
+ <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
+ <output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
+ <output-test url="file://$MODULE_DIR$/build/intermediates/classes/test/debug" />
+ <exclude-output />
+ <content url="file://$MODULE_DIR$">
+ <sourceFolder url="file://$MODULE_DIR$/src/main/cpp" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/jni" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
+ <sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
+ <excludeFolder url="file://$MODULE_DIR$/build/.DS_Store" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/build-info" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/check-manifest" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/cmake" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-resources" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaPrecompile" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/lint" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/prebuild" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/shaders" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/split-apk" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/splits-support" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/tmp" />
+ <excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
+ <excludeFolder url="file://$MODULE_DIR$/build/outputs" />
+ <excludeFolder url="file://$MODULE_DIR$/build/reports" />
+ <excludeFolder url="file://$MODULE_DIR$/build/tmp" />
+ </content>
+ <orderEntry type="jdk" jdkName="Android API 26 Platform" jdkType="Android SDK" />
+ <orderEntry type="sourceFolder" forTests="false" />
+ <orderEntry type="library" name="com.android.support:support-media-compat-26.1.0" level="project" />
+ <orderEntry type="library" scope="TEST" name="junit:junit:4.12@jar" level="project" />
+ <orderEntry type="library" name="android.arch.lifecycle:common:1.0.0@jar" level="project" />
+ <orderEntry type="library" scope="TEST" name="com.android.support.test.espresso:espresso-core-3.0.1" level="project" />
+ <orderEntry type="library" name="com.android.support:support-fragment-26.1.0" level="project" />
+ <orderEntry type="library" scope="TEST" name="javax.inject:javax.inject:1@jar" level="project" />
+ <orderEntry type="library" scope="TEST" name="com.squareup:javawriter:2.1.1@jar" level="project" />
+ <orderEntry type="library" name="com.android.support:support-vector-drawable-26.1.0" level="project" />
+ <orderEntry type="library" name="android.arch.lifecycle:runtime-1.0.0" level="project" />
+ <orderEntry type="library" name="com.android.support:appcompat-v7-26.1.0" level="project" />
+ <orderEntry type="library" name="com.android.support:support-annotations:26.1.0@jar" level="project" />
+ <orderEntry type="library" name="com.android.support.constraint:constraint-layout-solver:1.0.2@jar" level="project" />
+ <orderEntry type="library" name="com.android.support:support-core-utils-26.1.0" level="project" />
+ <orderEntry type="library" name="com.android.support.constraint:constraint-layout-1.0.2" level="project" />
+ <orderEntry type="library" name="com.android.support:support-core-ui-26.1.0" level="project" />
+ <orderEntry type="library" scope="TEST" name="com.android.support.test:runner-1.0.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="com.android.support.test:rules-1.0.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
+ <orderEntry type="library" scope="TEST" name="com.android.support.test.espresso:espresso-idling-resource-3.0.1" level="project" />
+ <orderEntry type="library" scope="TEST" name="org.hamcrest:hamcrest-core:1.3@jar" level="project" />
+ <orderEntry type="library" name="com.android.support:support-compat-26.1.0" level="project" />
+ <orderEntry type="library" name="android.arch.core:common:1.0.0@jar" level="project" />
+ <orderEntry type="library" scope="TEST" name="org.hamcrest:hamcrest-library:1.3@jar" level="project" />
+ <orderEntry type="library" scope="TEST" name="org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
+ <orderEntry type="library" name="com.android.support:support-v4-26.1.0" level="project" />
+ <orderEntry type="library" scope="TEST" name="net.sf.kxml:kxml2:2.3.0@jar" level="project" />
+ <orderEntry type="library" name="com.android.support:animated-vector-drawable-26.1.0" level="project" />
+ </component>
+</module> \ No newline at end of file
diff --git a/IGetAndroid/app/build.gradle b/IGetAndroid/app/build.gradle
new file mode 100644
index 00000000..b17b0ae4
--- /dev/null
+++ b/IGetAndroid/app/build.gradle
@@ -0,0 +1,73 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 26
+ defaultConfig {
+ applicationId "icn.iget.com.igetandroid"
+ minSdkVersion 24
+ targetSdkVersion 26
+ versionCode 7
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++11 -frtti -fexceptions"
+ }
+ }
+
+ ndk {
+ // Specifies the ABI configurations of your native
+ // libraries Gradle should build and package with your APK.
+ abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
+ }
+ }
+
+
+ signingConfigs {
+ release {
+ storeFile file("iget.keystore")
+ storePassword "igetandroid"
+ keyAlias "iget"
+ keyPassword "igetandroid"
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.release
+ }
+ }
+
+ android.applicationVariants.all { variant ->
+ variant.outputs.all { output ->
+ def outputFile = output.outputFile
+ outputFile
+ if (outputFile != null && outputFile.name.endsWith('.apk')) {
+ project.ext {
+ appName = 'iget'}
+ def fileName = outputFile.name.replace("app",
+ "$project.ext.appName")
+ outputFileName = fileName
+
+ }
+
+ }
+ }
+
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:appcompat-v7:26.1.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.0.2'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.1'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
+}
diff --git a/MetisForwarder/app/cmake/Modules/FindCCNX_Common.cmake b/IGetAndroid/app/cmake/Modules/FindCCNX_Common.cmake
index 2629c160..2629c160 100644
--- a/MetisForwarder/app/cmake/Modules/FindCCNX_Common.cmake
+++ b/IGetAndroid/app/cmake/Modules/FindCCNX_Common.cmake
diff --git a/MetisForwarder/app/cmake/Modules/FindCCNX_Portal.cmake b/IGetAndroid/app/cmake/Modules/FindCCNX_Portal.cmake
index 68384bab..68384bab 100644
--- a/MetisForwarder/app/cmake/Modules/FindCCNX_Portal.cmake
+++ b/IGetAndroid/app/cmake/Modules/FindCCNX_Portal.cmake
diff --git a/MetisForwarder/app/cmake/Modules/FindCCNX_Transport_Rta.cmake b/IGetAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake
index c43436d1..c43436d1 100644
--- a/MetisForwarder/app/cmake/Modules/FindCCNX_Transport_Rta.cmake
+++ b/IGetAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake
diff --git a/iGetAndroid/app/cmake/Modules/FindLibEvent.cmake b/IGetAndroid/app/cmake/Modules/FindLibEvent.cmake
index 2d1ca4fe..2d1ca4fe 100644
--- a/iGetAndroid/app/cmake/Modules/FindLibEvent.cmake
+++ b/IGetAndroid/app/cmake/Modules/FindLibEvent.cmake
diff --git a/MetisForwarder/app/cmake/Modules/FindLibicnet.cmake b/IGetAndroid/app/cmake/Modules/FindLibicnet.cmake
index 4472060b..4472060b 100644
--- a/MetisForwarder/app/cmake/Modules/FindLibicnet.cmake
+++ b/IGetAndroid/app/cmake/Modules/FindLibicnet.cmake
diff --git a/MetisForwarder/app/cmake/Modules/FindLibparc.cmake b/IGetAndroid/app/cmake/Modules/FindLibparc.cmake
index 02835161..02835161 100644
--- a/MetisForwarder/app/cmake/Modules/FindLibparc.cmake
+++ b/IGetAndroid/app/cmake/Modules/FindLibparc.cmake
diff --git a/MetisForwarder/app/cmake/Modules/FindLongBow.cmake b/IGetAndroid/app/cmake/Modules/FindLongBow.cmake
index e35888eb..e35888eb 100644
--- a/MetisForwarder/app/cmake/Modules/FindLongBow.cmake
+++ b/IGetAndroid/app/cmake/Modules/FindLongBow.cmake
diff --git a/iGetAndroid/app/cmake/Modules/FindUncrustify.cmake b/IGetAndroid/app/cmake/Modules/FindUncrustify.cmake
index e53f65fe..e53f65fe 100644
--- a/iGetAndroid/app/cmake/Modules/FindUncrustify.cmake
+++ b/IGetAndroid/app/cmake/Modules/FindUncrustify.cmake
diff --git a/iGetAndroid/app/cmake/Modules/detectCacheSize.cmake b/IGetAndroid/app/cmake/Modules/detectCacheSize.cmake
index 469d2627..469d2627 100644
--- a/iGetAndroid/app/cmake/Modules/detectCacheSize.cmake
+++ b/IGetAndroid/app/cmake/Modules/detectCacheSize.cmake
diff --git a/iGetAndroid/app/cmake/Modules/version.cmake b/IGetAndroid/app/cmake/Modules/version.cmake
index 74831674..74831674 100644
--- a/iGetAndroid/app/cmake/Modules/version.cmake
+++ b/IGetAndroid/app/cmake/Modules/version.cmake
diff --git a/iGetAndroid/app/cmake/get_version.sh b/IGetAndroid/app/cmake/get_version.sh
index 34c6ddb2..34c6ddb2 100755
--- a/iGetAndroid/app/cmake/get_version.sh
+++ b/IGetAndroid/app/cmake/get_version.sh
diff --git a/IGetAndroid/app/iget.keystore b/IGetAndroid/app/iget.keystore
new file mode 100644
index 00000000..f0b06a7a
--- /dev/null
+++ b/IGetAndroid/app/iget.keystore
Binary files differ
diff --git a/MetisForwarder/app/proguard-rules.pro b/IGetAndroid/app/proguard-rules.pro
index 9366e766..f1b42451 100644
--- a/MetisForwarder/app/proguard-rules.pro
+++ b/IGetAndroid/app/proguard-rules.pro
@@ -1,14 +1,10 @@
# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /Users/angelomantellini/Library/Android/sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
-# Add any project specific keep options here:
-
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
diff --git a/IGetAndroid/app/src/.DS_Store b/IGetAndroid/app/src/.DS_Store
new file mode 100644
index 00000000..0787fb7b
--- /dev/null
+++ b/IGetAndroid/app/src/.DS_Store
Binary files differ
diff --git a/IGetAndroid/app/src/androidTest/java/icn/iget/com/igetandroid/ExampleInstrumentedTest.java b/IGetAndroid/app/src/androidTest/java/icn/iget/com/igetandroid/ExampleInstrumentedTest.java
new file mode 100644
index 00000000..68650929
--- /dev/null
+++ b/IGetAndroid/app/src/androidTest/java/icn/iget/com/igetandroid/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package icn.iget.com.igetandroid;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() throws Exception {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("icn.iget.com.igetandroid", appContext.getPackageName());
+ }
+}
diff --git a/IGetAndroid/app/src/main/.DS_Store b/IGetAndroid/app/src/main/.DS_Store
new file mode 100644
index 00000000..cf4f5edd
--- /dev/null
+++ b/IGetAndroid/app/src/main/.DS_Store
Binary files differ
diff --git a/iGetAndroid/app/src/main/AndroidManifest.xml b/IGetAndroid/app/src/main/AndroidManifest.xml
index c7e9d49c..107d059c 100644
--- a/iGetAndroid/app/src/main/AndroidManifest.xml
+++ b/IGetAndroid/app/src/main/AndroidManifest.xml
@@ -1,16 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.iget.ccnx.igetandroid">
+ package="icn.iget.com.igetandroid">
<application
android:allowBackup="true"
+ android:configChanges="orientation|screenSize|keyboard"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
- android:theme="@style/AppTheme"
- android:configChanges="orientation|screenSize|keyboard">
- <activity android:name=".iGetActivity">
+ android:theme="@style/AppTheme">
+ <activity
+ android:name=".IGetAndroidActivity"
+ android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -18,10 +20,11 @@
</intent-filter>
</activity>
</application>
+
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"
- android:maxSdkVersion="21" />
+ android:maxSdkVersion="26" />
-</manifest>
+</manifest> \ No newline at end of file
diff --git a/IGetAndroid/app/src/main/cpp/IGetWrapper.cpp b/IGetAndroid/app/src/main/cpp/IGetWrapper.cpp
new file mode 100644
index 00000000..a5a92058
--- /dev/null
+++ b/IGetAndroid/app/src/main/cpp/IGetWrapper.cpp
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <jni.h>
+#include <string>
+#include <icnet/icnet_http_facade.h>
+libl4::http::HTTPClientConnection connection;
+
+extern "C"
+JNIEXPORT jbyteArray JNICALL
+Java_icn_iget_com_igetandroid_IGetAndroidActivity_downloadFile(JNIEnv *env, jobject instance,
+ jstring path_) {
+ const char *path = env->GetStringUTFChars(path_, 0);
+ std::string name(path);
+ env->ReleaseStringUTFChars(path_, path);
+ connection.get(name);
+ auto response = connection.response();
+ if (response.getPayload().size() == 0) {
+ jbyte a[] = {};
+ jbyteArray ret = env->NewByteArray(0);
+ env->SetByteArrayRegion (ret, 0, 0, a);
+ return ret;
+ }
+ jbyteArray ret = env->NewByteArray(response.getPayload().size());
+ env->SetByteArrayRegion (ret, 0, response.getPayload().size(), (jbyte *)response.getPayload().data());
+ return ret;
+}
+
+extern "C"
+JNIEXPORT void JNICALL
+Java_icn_iget_com_igetandroid_IGetAndroidActivity_stopDownload(JNIEnv *env, jobject instance) {
+ connection.stop();
+} \ No newline at end of file
diff --git a/IGetAndroid/app/src/main/ic_launcher-web.png b/IGetAndroid/app/src/main/ic_launcher-web.png
new file mode 100644
index 00000000..8a9d5774
--- /dev/null
+++ b/IGetAndroid/app/src/main/ic_launcher-web.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/java/.DS_Store b/IGetAndroid/app/src/main/java/.DS_Store
new file mode 100644
index 00000000..67c36481
--- /dev/null
+++ b/IGetAndroid/app/src/main/java/.DS_Store
Binary files differ
diff --git a/IGetAndroid/app/src/main/java/icn/.DS_Store b/IGetAndroid/app/src/main/java/icn/.DS_Store
new file mode 100644
index 00000000..6b392bb4
--- /dev/null
+++ b/IGetAndroid/app/src/main/java/icn/.DS_Store
Binary files differ
diff --git a/iGetAndroid/app/src/main/java/com/iget/ccnx/adapter/ListViewAdapter.java b/IGetAndroid/app/src/main/java/icn/iget/com/adapter/ListViewAdapter.java
index 45677a52..f6e4f808 100644
--- a/iGetAndroid/app/src/main/java/com/iget/ccnx/adapter/ListViewAdapter.java
+++ b/IGetAndroid/app/src/main/java/icn/iget/com/adapter/ListViewAdapter.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -12,22 +12,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.iget.ccnx.adapter;
+
+package icn.iget.com.adapter;
import android.content.Context;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
-import com.iget.ccnx.igetandroid.R;
-import com.iget.ccnx.utility.Constants;
import java.io.File;
import java.util.ArrayList;
+import icn.iget.com.igetandroid.R;
+import icn.iget.com.utility.Constants;
+
public class ListViewAdapter extends BaseAdapter {
Context context;
diff --git a/iGetAndroid/app/src/main/java/com/iget/ccnx/adapter/OutputListViewElement.java b/IGetAndroid/app/src/main/java/icn/iget/com/adapter/OutputListViewElement.java
index 34c7620d..87815a7a 100644
--- a/iGetAndroid/app/src/main/java/com/iget/ccnx/adapter/OutputListViewElement.java
+++ b/IGetAndroid/app/src/main/java/icn/iget/com/adapter/OutputListViewElement.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -12,14 +12,15 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.iget.ccnx.adapter;
+
+package icn.iget.com.adapter;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
-public class OutputListViewElement implements Serializable{
+public class OutputListViewElement implements Serializable {
String url;
String savedPath;
diff --git a/IGetAndroid/app/src/main/java/icn/iget/com/igetandroid/IGetAndroidActivity.java b/IGetAndroid/app/src/main/java/icn/iget/com/igetandroid/IGetAndroidActivity.java
new file mode 100644
index 00000000..43eae0d2
--- /dev/null
+++ b/IGetAndroid/app/src/main/java/icn/iget/com/igetandroid/IGetAndroidActivity.java
@@ -0,0 +1,303 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package icn.iget.com.igetandroid;
+
+import android.Manifest;
+import android.app.Dialog;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Environment;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.content.ContextCompat;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ListView;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.ArrayList;
+import java.util.concurrent.Executors;
+
+import icn.iget.com.adapter.ListViewAdapter;
+import icn.iget.com.adapter.OutputListViewElement;
+import icn.iget.com.igetandroid.R;
+import icn.iget.com.utility.Constants;
+import icn.iget.com.utility.ResourcesEnumerator;
+
+public class IGetAndroidActivity extends AppCompatActivity {
+
+ private static String TAG = "IGetAndroidAcrivity";
+
+ // Used to load the 'native-lib' library on application startup.
+ static {
+ System.loadLibrary("IGetWrapper");
+ }
+
+ ArrayList<OutputListViewElement> outputListViewElementArrayList = new ArrayList<OutputListViewElement>();
+ ListViewAdapter adapter;
+
+
+ static int fCount = 0;
+ SharedPreferences sharedPreferences;
+ EditText urlEditText;
+ EditText downloadPathEditText;
+ Button downloadButton;
+ Button stopButton;
+ ListView resultListView;
+ Button yesButtonDialog;
+ Button noButtonDialog;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_i_get_android);
+ adapter = new ListViewAdapter(this, outputListViewElementArrayList);
+ resultListView = (ListView) findViewById(R.id.resultsListView);
+ resultListView.setAdapter(adapter);
+ checkEnabledPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ checkEnabledPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
+ if (!checkMetis(Constants.METIS_ID)) {
+ final Dialog dialog = new Dialog(this);
+ dialog.setContentView(R.layout.popup_message);
+ yesButtonDialog = (Button) dialog.findViewById(R.id.yesButtonDialog);
+ noButtonDialog = (Button) dialog.findViewById(R.id.noButtonDialog);
+ yesButtonDialog.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ try {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + Constants.METIS_ID)));
+ } catch (android.content.ActivityNotFoundException anfe) {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + Constants.METIS_ID)));
+ }
+ dialog.hide();
+ }
+ });
+ noButtonDialog.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ dialog.hide();
+ }
+ });
+ dialog.show();
+
+ }
+ init();
+ }
+
+ public static final String md5(final byte[] s) {
+ final String MD5 = "MD5";
+ try {
+ // Create MD5 Hash
+ MessageDigest digest = java.security.MessageDigest
+ .getInstance(MD5);
+ digest.update(s);
+ byte messageDigest[] = digest.digest();
+
+ // Create Hex String
+ StringBuilder hexString = new StringBuilder();
+ for (byte aMessageDigest : messageDigest) {
+ String h = Integer.toHexString(0xFF & aMessageDigest);
+ while (h.length() < 2)
+ h = "0" + h;
+ hexString.append(h);
+ }
+ return hexString.toString();
+
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ }
+ return "";
+ }
+
+ private void init() {
+ Log.v("storage path", Environment.getExternalStorageDirectory().toString());
+ sharedPreferences = getSharedPreferences(Constants.I_GET_PREFERENCES, MODE_PRIVATE);
+ urlEditText = (EditText) findViewById(R.id.urlEditText);
+ urlEditText.setText(sharedPreferences.getString(ResourcesEnumerator.URL.key(), Constants.DEFAULT_URL));
+ downloadPathEditText = (EditText) findViewById(R.id.downloadPathEditText);
+ downloadPathEditText.setText(sharedPreferences.getString(ResourcesEnumerator.DOWNLOAD_PATH.key(), Constants.DEFAULT_DOWNLOAD_PATH));
+ downloadButton = (Button) findViewById(R.id.downloadButton);
+
+ downloadButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ urlEditText.setEnabled(false);
+ downloadPathEditText.setEnabled(false);
+ downloadButton.setEnabled(false);
+ stopButton.setEnabled(true);
+ Executors.newSingleThreadExecutor().execute(new Runnable() {
+ @Override
+ public void run() {
+
+ SharedPreferences.Editor sharedPreferencesEditor = getSharedPreferences(Constants.I_GET_PREFERENCES, MODE_PRIVATE).edit();
+ sharedPreferencesEditor.putString(ResourcesEnumerator.URL.key(), urlEditText.getText().toString());
+ sharedPreferencesEditor.putString(ResourcesEnumerator.DOWNLOAD_PATH.key(), downloadPathEditText.getText().toString());
+ sharedPreferencesEditor.commit();
+ String[] urlSplitted = urlEditText.getText().toString().split(File.separator);
+ File downloadPath = new File(downloadPathEditText.getText().toString());
+ if (!downloadPath.exists()) {
+ downloadPath.mkdirs();
+ }
+
+ byte[] content = downloadFile(urlEditText.getText().toString());
+ if (content.length > 0) {
+ String nameFile = writeToFile(content, downloadPathEditText.getText().toString(), urlSplitted[urlSplitted.length - 1]);
+ outputListViewElementArrayList.add(0, new OutputListViewElement(urlEditText.getText().toString(), downloadPathEditText.getText().toString(), nameFile, md5(content), content.length));
+ } else {
+ outputListViewElementArrayList.add(0, new OutputListViewElement(urlEditText.getText().toString(), Constants.DASH, Constants.DASH, Constants.DASH, 0));
+ }
+ runOnUiThread(new Runnable() {
+ @Override
+ public void run() {
+ adapter.notifyDataSetChanged();
+ urlEditText.setEnabled(true);
+ downloadPathEditText.setEnabled(true);
+ downloadButton.setEnabled(true);
+ stopButton.setEnabled(false);
+ }
+ });
+ }
+ });
+
+
+ }
+ });
+ stopButton = (Button) findViewById(R.id.stopButton);
+ stopButton.setOnClickListener(new View.OnClickListener() {
+
+ @Override
+ public void onClick(View view) {
+ stopDownload();
+ }
+ });
+ }
+
+
+ @Override
+ protected void onSaveInstanceState(Bundle outState) {
+ outState.putSerializable(Constants.LIST_ITEMS_ID, outputListViewElementArrayList);
+ super.onSaveInstanceState(outState);
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Bundle savedInstanceState) {
+ if (savedInstanceState != null) {
+ outputListViewElementArrayList = (ArrayList<OutputListViewElement>) savedInstanceState.getSerializable(Constants.LIST_ITEMS_ID);
+ adapter = new ListViewAdapter(this, outputListViewElementArrayList);
+ resultListView = (ListView) findViewById(R.id.resultsListView);
+ resultListView.setAdapter(adapter);
+ }
+ super.onRestoreInstanceState(savedInstanceState);
+ }
+
+
+ public native void stopDownload();
+
+ public native byte[] downloadFile(String path);
+
+
+ private void checkEnabledPermission(String permission) {
+ if (ContextCompat.checkSelfPermission(this,
+ permission)
+ != PackageManager.PERMISSION_GRANTED) {
+ if (ActivityCompat.shouldShowRequestPermissionRationale(this,
+ permission)) {
+ } else {
+ ActivityCompat.requestPermissions(this,
+ new String[]{permission},
+ 1);
+ }
+ }
+ }
+
+ private String writeToFile(byte[] content, String path, String nameFile) {
+ try {
+ Log.v("name", nameFile);
+ nameFile = checkGenerateNameFile(path, nameFile.trim());
+ Log.v("name", nameFile);
+
+ FileOutputStream fos = new FileOutputStream(path + File.separator + nameFile);
+ fos.write(content);
+ fos.close();
+
+ } catch (FileNotFoundException e) {
+ Log.v(TAG, e.toString());
+ } catch (IOException e) {
+ Log.v(TAG, e.toString());
+ }
+ return nameFile;
+ }
+
+ /* private void checkMetis() {
+ boolean isAppInstalled = appInstalledOrNot("icn.forwarder.com.icnforwarderandroid");
+
+
+ final String appPackageName = getPackageName(); // getPackageName() from Context or Activity object
+ try {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=icn.forwarder.com.icnforwarderandroid")));
+ } catch (android.content.ActivityNotFoundException anfe) {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=icn.forwarder.com.icnforwarderandroid")));
+ }
+ if (isAppInstalled) {
+ //This intent will help you to launch if the package is already installed
+ Log.i("iget", "Application is already installed.");
+ } else {
+ // Do whatever we want to do if application not installed
+ // For example, Redirect to play store
+
+ Log.i("iget", "Application is not currently installed.");
+ }
+ }*/
+
+ private boolean checkMetis(String uri) {
+ PackageManager pm = getPackageManager();
+ try {
+ pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
+ return true;
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ }
+
+ private String checkGenerateNameFile(String path, String nameFile) {
+ String newNameFile = nameFile.trim();
+
+ File file;
+ int count = 1;
+ do {
+ file = new File(path + File.separator + newNameFile);
+
+
+ if (file.exists()) {
+
+ newNameFile = nameFile.trim() + Constants.UNDERSCORE + Integer.toString(count);
+ count++;
+ }
+ } while (file.exists());
+ return newNameFile;
+ }
+}
diff --git a/iGetAndroid/app/src/main/java/com/iget/ccnx/utility/Constants.java b/IGetAndroid/app/src/main/java/icn/iget/com/utility/Constants.java
index 6c1a7864..37922939 100644
--- a/iGetAndroid/app/src/main/java/com/iget/ccnx/utility/Constants.java
+++ b/IGetAndroid/app/src/main/java/icn/iget/com/utility/Constants.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,15 +13,16 @@
* limitations under the License.
*/
-package com.iget.ccnx.utility;
+package icn.iget.com.utility;
public class Constants {
public static final String LIST_ITEMS_ID = "LIST_ITEMS_ID";
public static final String I_GET_PREFERENCES = "I_GET_PREFERENCES";
- public static final String DEFAULT_URL = "http://webserver/sintel/mpd";
- public static final String DEFAULT_DOWNLOAD_PATH = "/storage/emulated/0/GetD";
-
+ public static final String DEFAULT_URL = "http://systemx-cicn.enst.fr/video/sintel/mpd";
+ public static final String DEFAULT_DOWNLOAD_PATH = "/sdcard/iGetAndroid";
public static final String FORMAT_DATA = "yyyy-MM-dd hh:mm:ss";
public static final String UNDERSCORE = "_";
public static final String DASH = "-";
+ public static int FOREGROUND_SERVICE = 101;
+ public static final String METIS_ID = "icn.forwarder.com.icnforwarderandroid";
}
diff --git a/iGetAndroid/app/src/main/java/com/iget/ccnx/utility/ResourcesEnumerator.java b/IGetAndroid/app/src/main/java/icn/iget/com/utility/ResourcesEnumerator.java
index ebe6af69..13f9c4c7 100644
--- a/iGetAndroid/app/src/main/java/com/iget/ccnx/utility/ResourcesEnumerator.java
+++ b/IGetAndroid/app/src/main/java/icn/iget/com/utility/ResourcesEnumerator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -12,8 +12,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-package com.iget.ccnx.utility;
+package icn.iget.com.utility;
public enum ResourcesEnumerator {
URL("url"),
diff --git a/IGetAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/IGetAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 00000000..c7bd21db
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportHeight="108"
+ android:viewportWidth="108">
+ <path
+ android:fillType="evenOdd"
+ android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
+ android:strokeColor="#00000000"
+ android:strokeWidth="1">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="78.5885"
+ android:endY="90.9159"
+ android:startX="48.7653"
+ android:startY="61.0927"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
+ android:strokeColor="#00000000"
+ android:strokeWidth="1" />
+</vector>
diff --git a/IGetAndroid/app/src/main/res/drawable/ic_launcher_background.xml b/IGetAndroid/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..d5fccc53
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportHeight="108"
+ android:viewportWidth="108">
+ <path
+ android:fillColor="#26A69A"
+ android:pathData="M0,0h108v108h-108z" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M9,0L9,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,0L19,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,0L29,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,0L39,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,0L49,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,0L59,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,0L69,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,0L79,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M89,0L89,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M99,0L99,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,9L108,9"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,19L108,19"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,29L108,29"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,39L108,39"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,49L108,49"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,59L108,59"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,69L108,69"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,79L108,79"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,89L108,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,99L108,99"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,29L89,29"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,39L89,39"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,49L89,49"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,59L89,59"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,69L89,69"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,79L89,79"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,19L29,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,19L39,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,19L49,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,19L59,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,19L69,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,19L79,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+</vector>
diff --git a/iGetAndroid/app/src/main/res/layout/activity_i_get.xml b/IGetAndroid/app/src/main/res/layout/activity_i_get_android.xml
index 4885dc62..453b56fc 100644
--- a/iGetAndroid/app/src/main/res/layout/activity_i_get.xml
+++ b/IGetAndroid/app/src/main/res/layout/activity_i_get_android.xml
@@ -4,12 +4,12 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context="com.iget.ccnx.igetandroid.iGetActivity">
+ tools:context="icn.iget.com.igetandroid.IGetAndroidActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:orientation="vertical">
+ android:orientation="vertical">``
<LinearLayout
android:layout_width="match_parent"
@@ -25,18 +25,17 @@
<TextView
android:id="@+id/urlLabel"
- android:layout_width="50dp"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:layout_weight="0.25"
+ android:layout_weight="20"
android:text="URL"
android:textAlignment="textEnd" />
<EditText
android:id="@+id/urlEditText"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:layout_marginLeft="50dp"
- android:layout_weight="1.02"
+ android:layout_weight="80"
android:ems="10"
android:inputType="text"
android:text="http://webserver/sintel/mpd" />
@@ -50,37 +49,45 @@
<TextView
android:id="@+id/downloadPathLabel"
- android:layout_width="50dp"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:layout_weight="0.25"
+ android:layout_weight="20"
android:text="Download Path"
android:textAlignment="textEnd" />
<EditText
android:id="@+id/downloadPathEditText"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:layout_marginLeft="50dp"
- android:layout_weight="1.03"
+ android:layout_weight="80"
android:ems="10"
android:inputType="text"
android:text="Name" />
</LinearLayout>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/RelativeLayout01"
+ <LinearLayout
android:layout_width="fill_parent"
- android:layout_height="wrap_content">
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="4.0dip"
+ android:paddingRight="4.0dip"
+ android:paddingTop="10dp">
<Button
android:id="@+id/downloadButton"
- android:layout_width="160dp"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- android:layout_weight="1"
- android:text="Download"
- android:textAlignment="center" />
- </RelativeLayout>
+ android:layout_width="0dip"
+ android:layout_height="fill_parent"
+ android:layout_weight="1.0"
+ android:text="Download" />
+
+ <Button
+ android:id="@+id/stopButton"
+ android:layout_width="0dip"
+ android:layout_height="fill_parent"
+ android:layout_weight="1.0"
+ android:text="Stop" />
+
+ </LinearLayout>
</LinearLayout>
@@ -96,11 +103,11 @@
android:id="@+id/resumeLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:paddingLeft="15dp"
android:text="Resume"
android:textAlignment="textStart"
android:textSize="30sp"
- android:textStyle="bold"
- android:paddingLeft="15dp"/>
+ android:textStyle="bold" />
<ListView
android:id="@+id/resultsListView"
@@ -110,4 +117,5 @@
</LinearLayout>
+
</android.support.constraint.ConstraintLayout>
diff --git a/iGetAndroid/app/src/main/res/layout/list_view_row.xml b/IGetAndroid/app/src/main/res/layout/list_view_row.xml
index 9273f8f1..5063c521 100644
--- a/iGetAndroid/app/src/main/res/layout/list_view_row.xml
+++ b/IGetAndroid/app/src/main/res/layout/list_view_row.xml
@@ -7,117 +7,117 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal">
+ android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:orientation="horizontal">
<TextView
android:id="@+id/urlLabel"
- android:layout_width="60pt"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:paddingRight="5pt"
- android:text="urlLabel"
+ android:layout_weight="20"
+ android:text="URL:"
android:textAlignment="textEnd" />
<TextView
android:id="@+id/urlTextView"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp"
+ android:layout_weight="80"
android:text="urlTextVew" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:orientation="horizontal">
<TextView
android:id="@+id/savedPathLabel"
- android:layout_width="60pt"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:paddingRight="5pt"
- android:text="Saved Path"
+ android:layout_weight="20"
+ android:text="Saved Path:"
android:textAlignment="textEnd" />
<TextView
android:id="@+id/savedPathTextView"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp"
+ android:layout_weight="80"
android:text="savedPathTextView" />
</LinearLayout>
- </LinearLayout>
-
-
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_weight="0.33"
android:orientation="horizontal">
<TextView
android:id="@+id/md5Label"
- android:layout_width="60pt"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:paddingRight="5pt"
- android:text="MD5"
+ android:layout_weight="20"
+ android:text="MD5:"
android:textAlignment="textEnd" />
<TextView
android:id="@+id/md5TextView"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp"
+ android:layout_weight="80"
android:text="savedPathTextView" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_weight="0.33"
android:orientation="horizontal">
<TextView
android:id="@+id/sizeLabel"
- android:layout_width="60pt"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:paddingRight="5pt"
- android:text="Size"
+ android:layout_weight="20"
+ android:text="Size:"
android:textAlignment="textEnd" />
<TextView
android:id="@+id/sizeTextView"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp"
+ android:layout_weight="80"
android:text="sizeTextView" />
</LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
+ android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:layout_weight="0.33"
android:orientation="horizontal">
<TextView
android:id="@+id/dateLabel"
- android:layout_width="60pt"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
- android:paddingRight="5pt"
- android:text="Date"
+ android:layout_weight="20"
+ android:text="Date:"
android:textAlignment="textEnd" />
<TextView
android:id="@+id/dateTextView"
- android:layout_width="wrap_content"
+ android:layout_width="0dip"
android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp"
+ android:layout_weight="80"
android:text="dateTextView" />
</LinearLayout>
</LinearLayout>
diff --git a/IGetAndroid/app/src/main/res/layout/popup_message.xml b/IGetAndroid/app/src/main/res/layout/popup_message.xml
new file mode 100644
index 00000000..a2631820
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/layout/popup_message.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:background="#FFFFFF"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/txt_dia"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_margin="10dp"
+ android:text="Metis is not installed.\nDo you want to install it?"
+ android:textColor="#1B90CD"
+ android:textSize="15dp"
+ android:textStyle="bold" />
+
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:orientation="horizontal">
+
+ <Button
+ android:id="@+id/yesButtonDialog"
+ android:layout_width="100dp"
+ android:layout_height="wrap_content"
+ android:clickable="true"
+ android:text="Yes"
+ android:textStyle="bold" />
+
+ <Button
+ android:id="@+id/noButtonDialog"
+ android:layout_width="100dp"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="5dp"
+ android:clickable="true"
+ android:text="No"
+ android:textStyle="bold" />
+ </LinearLayout>
+
+</LinearLayout> \ No newline at end of file
diff --git a/IGetAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/IGetAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..036d09bc
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@color/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon> \ No newline at end of file
diff --git a/IGetAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/IGetAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..036d09bc
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@color/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon> \ No newline at end of file
diff --git a/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png b/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..2b8496e4
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..54e366bf
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..6dac2349
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png b/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..b19affc6
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..0ab99abc
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..93d06591
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..3b4fed61
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..573fcce3
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..770275fa
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..1cbd6c91
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..86367ca0
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..0bb64aa9
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..1befed99
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..f3cf9401
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..d3339629
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/values/colors.xml b/IGetAndroid/app/src/main/res/values/colors.xml
index 3ab3e9cb..3ab3e9cb 100644
--- a/iGetAndroid/app/src/main/res/values/colors.xml
+++ b/IGetAndroid/app/src/main/res/values/colors.xml
diff --git a/IGetAndroid/app/src/main/res/values/ic_launcher_background.xml b/IGetAndroid/app/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 00000000..fb66f3a0
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="ic_launcher_background">#FEFEFE</color>
+</resources> \ No newline at end of file
diff --git a/IGetAndroid/app/src/main/res/values/strings.xml b/IGetAndroid/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..5f9b9704
--- /dev/null
+++ b/IGetAndroid/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">ICN iGet</string>
+</resources>
diff --git a/iGetAndroid/app/src/main/res/values/styles.xml b/IGetAndroid/app/src/main/res/values/styles.xml
index 5885930d..5885930d 100644
--- a/iGetAndroid/app/src/main/res/values/styles.xml
+++ b/IGetAndroid/app/src/main/res/values/styles.xml
diff --git a/IGetAndroid/app/src/test/java/icn/iget/com/igetandroid/ExampleUnitTest.java b/IGetAndroid/app/src/test/java/icn/iget/com/igetandroid/ExampleUnitTest.java
new file mode 100644
index 00000000..35716741
--- /dev/null
+++ b/IGetAndroid/app/src/test/java/icn/iget/com/igetandroid/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package icn.iget.com.igetandroid;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() throws Exception {
+ assertEquals(4, 2 + 2);
+ }
+} \ No newline at end of file
diff --git a/MetisForwarder/build.gradle b/IGetAndroid/build.gradle
index d0aa7043..e6b32bc7 100644
--- a/MetisForwarder/build.gradle
+++ b/IGetAndroid/build.gradle
@@ -1,11 +1,14 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
+
repositories {
+ google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.2'
+ classpath 'com.android.tools.build:gradle:3.0.1'
+
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -14,6 +17,7 @@ buildscript {
allprojects {
repositories {
+ google()
jcenter()
}
}
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-06-15-27-09-221.json b/IGetAndroid/build/android-profile/profile-2018-02-06-15-27-09-221.json
new file mode 100644
index 00000000..ab71d35d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-06-15-27-09-221.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1517927197962000,"args":{"JVM stats":"heap_memory_usage: 130072360\nnon_heap_memory_usage: 151589928\nloaded_class_count: 17199\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 14\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220576000,"args":{"JVM stats":"heap_memory_usage: 320302784\nnon_heap_memory_usage: 159974048\nloaded_class_count: 17644\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 3\n gc_time: 27\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 163\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220848000,"args":{"JVM stats":"heap_memory_usage: 337609104\nnon_heap_memory_usage: 160178056\nloaded_class_count: 17647\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220857000,"args":{"JVM stats":"heap_memory_usage: 337609104\nnon_heap_memory_usage: 160200176\nloaded_class_count: 17649\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220868000,"args":{"JVM stats":"heap_memory_usage: 338358960\nnon_heap_memory_usage: 160258760\nloaded_class_count: 17653\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220871000,"args":{"JVM stats":"heap_memory_usage: 338358960\nnon_heap_memory_usage: 160287128\nloaded_class_count: 17654\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220877000,"args":{"JVM stats":"heap_memory_usage: 338358960\nnon_heap_memory_usage: 160326896\nloaded_class_count: 17655\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220878000,"args":{"JVM stats":"heap_memory_usage: 338358960\nnon_heap_memory_usage: 160331776\nloaded_class_count: 17655\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220881000,"args":{"JVM stats":"heap_memory_usage: 338358960\nnon_heap_memory_usage: 160348256\nloaded_class_count: 17655\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927220881001,"args":{"JVM stats":"heap_memory_usage: 338358960\nnon_heap_memory_usage: 160348256\nloaded_class_count: 17655\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927222141000,"args":{"JVM stats":"heap_memory_usage: 450623560\nnon_heap_memory_usage: 161831632\nloaded_class_count: 17660\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927222149000,"args":{"JVM stats":"heap_memory_usage: 452172200\nnon_heap_memory_usage: 161815976\nloaded_class_count: 17661\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927222190000,"args":{"JVM stats":"heap_memory_usage: 456670776\nnon_heap_memory_usage: 162044936\nloaded_class_count: 17664\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927222194000,"args":{"JVM stats":"heap_memory_usage: 456670776\nnon_heap_memory_usage: 162058248\nloaded_class_count: 17665\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927223049000,"args":{"JVM stats":"heap_memory_usage: 485573320\nnon_heap_memory_usage: 161682912\nloaded_class_count: 17672\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927223050000,"args":{"JVM stats":"heap_memory_usage: 486327160\nnon_heap_memory_usage: 161687776\nloaded_class_count: 17672\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927223207000,"args":{"JVM stats":"heap_memory_usage: 496077944\nnon_heap_memory_usage: 162041784\nloaded_class_count: 17682\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927225009000,"args":{"JVM stats":"heap_memory_usage: 280963472\nnon_heap_memory_usage: 165839704\nloaded_class_count: 17762\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 24\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927227085000,"args":{"JVM stats":"heap_memory_usage: 283667624\nnon_heap_memory_usage: 166114776\nloaded_class_count: 17762\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927229209000,"args":{"JVM stats":"heap_memory_usage: 287641008\nnon_heap_memory_usage: 166068856\nloaded_class_count: 17762\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927229221000,"args":{"JVM stats":"heap_memory_usage: 288016800\nnon_heap_memory_usage: 166076600\nloaded_class_count: 17762\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927197962000,"dur":4000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927197966000,"dur":7000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927197973000,"dur":3000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927197973000,"dur":3000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927217589000,"dur":12000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927217601000,"dur":1000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217604000,"dur":2000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217606000,"dur":100},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217606000,"dur":1000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217607000,"dur":1000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217608000,"dur":100},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217608000,"dur":100},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217608000,"dur":4000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217613000,"dur":1000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217614000,"dur":100},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217614000,"dur":100},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217614000,"dur":2869000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220483000,"dur":1000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220484000,"dur":4000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220490000,"dur":2000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220492000,"dur":100},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927217602000,"dur":2890000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927220492000,"dur":5000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220499000,"dur":100},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220499000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220499000,"dur":1000},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220500000,"dur":100},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220500000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220500000,"dur":1000},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220501000,"dur":1000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220502000,"dur":100},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220502000,"dur":1000},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220503000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220503000,"dur":18000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220521000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220522000,"dur":3000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220526000,"dur":1000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220527000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927220497000,"dur":30000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927220527000,"dur":3000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927220530000,"dur":9000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927217589000,"dur":2954000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927197978000,"dur":22566000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927220575000,"dur":1000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220576000,"dur":272000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220849000,"dur":8000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220858000,"dur":10000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220869000,"dur":2000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220871000,"dur":6000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220877000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220879000,"dur":2000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220881000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927220883000,"dur":1258000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927222143000,"dur":6000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927222151000,"dur":39000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927222191000,"dur":3000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927222196000,"dur":853000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927223050000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927223051000,"dur":156000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927223208000,"dur":1801000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927225010000,"dur":2075000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1517927227085000,"dur":2124000},{"pid":1,"tid":1,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927229212000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-06-15-27-09-221.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-06-15-27-09-221.rawproto
new file mode 100644
index 00000000..f355a4c1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-06-15-27-09-221.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-06-15-37-44-133.json b/IGetAndroid/build/android-profile/profile-2018-02-06-15-37-44-133.json
new file mode 100644
index 00000000..5904db92
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-06-15-37-44-133.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857257000,"args":{"JVM stats":"heap_memory_usage: 319329760\nnon_heap_memory_usage: 167049712\nloaded_class_count: 17838\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857397000,"args":{"JVM stats":"heap_memory_usage: 334061520\nnon_heap_memory_usage: 167734248\nloaded_class_count: 17844\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857447000,"args":{"JVM stats":"heap_memory_usage: 339758160\nnon_heap_memory_usage: 167925992\nloaded_class_count: 17845\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857452000,"args":{"JVM stats":"heap_memory_usage: 339758160\nnon_heap_memory_usage: 167975408\nloaded_class_count: 17846\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857457000,"args":{"JVM stats":"heap_memory_usage: 340232792\nnon_heap_memory_usage: 168000224\nloaded_class_count: 17850\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857458000,"args":{"JVM stats":"heap_memory_usage: 340232792\nnon_heap_memory_usage: 168003448\nloaded_class_count: 17850\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857460000,"args":{"JVM stats":"heap_memory_usage: 340232792\nnon_heap_memory_usage: 168012984\nloaded_class_count: 17850\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857461000,"args":{"JVM stats":"heap_memory_usage: 340232792\nnon_heap_memory_usage: 168017912\nloaded_class_count: 17851\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857463000,"args":{"JVM stats":"heap_memory_usage: 340232792\nnon_heap_memory_usage: 168022800\nloaded_class_count: 17852\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857463001,"args":{"JVM stats":"heap_memory_usage: 340232792\nnon_heap_memory_usage: 168022800\nloaded_class_count: 17852\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857513000,"args":{"JVM stats":"heap_memory_usage: 344030256\nnon_heap_memory_usage: 168138168\nloaded_class_count: 17855\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857515000,"args":{"JVM stats":"heap_memory_usage: 344030256\nnon_heap_memory_usage: 168139160\nloaded_class_count: 17855\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857518000,"args":{"JVM stats":"heap_memory_usage: 344030256\nnon_heap_memory_usage: 168159352\nloaded_class_count: 17857\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857519000,"args":{"JVM stats":"heap_memory_usage: 344030256\nnon_heap_memory_usage: 168171352\nloaded_class_count: 17857\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857527000,"args":{"JVM stats":"heap_memory_usage: 345454232\nnon_heap_memory_usage: 168210776\nloaded_class_count: 17859\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857527001,"args":{"JVM stats":"heap_memory_usage: 345454232\nnon_heap_memory_usage: 168210776\nloaded_class_count: 17859\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857540000,"args":{"JVM stats":"heap_memory_usage: 345454232\nnon_heap_memory_usage: 168232600\nloaded_class_count: 17860\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857547000,"args":{"JVM stats":"heap_memory_usage: 345929136\nnon_heap_memory_usage: 168245328\nloaded_class_count: 17861\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927857548000,"args":{"JVM stats":"heap_memory_usage: 345929136\nnon_heap_memory_usage: 168254720\nloaded_class_count: 17861\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927860952000,"args":{"JVM stats":"heap_memory_usage: 348302632\nnon_heap_memory_usage: 168086664\nloaded_class_count: 17861\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927860953000,"args":{"JVM stats":"heap_memory_usage: 348302632\nnon_heap_memory_usage: 168087976\nloaded_class_count: 17861\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927861718000,"args":{"JVM stats":"heap_memory_usage: 439709608\nnon_heap_memory_usage: 172862552\nloaded_class_count: 17910\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927861724000,"args":{"JVM stats":"heap_memory_usage: 440663088\nnon_heap_memory_usage: 172898088\nloaded_class_count: 17914\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927861732000,"args":{"JVM stats":"heap_memory_usage: 440663088\nnon_heap_memory_usage: 172933504\nloaded_class_count: 17923\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927861732001,"args":{"JVM stats":"heap_memory_usage: 440663088\nnon_heap_memory_usage: 172933504\nloaded_class_count: 17923\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927861738000,"args":{"JVM stats":"heap_memory_usage: 441137736\nnon_heap_memory_usage: 172943472\nloaded_class_count: 17923\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927861961000,"args":{"JVM stats":"heap_memory_usage: 466401104\nnon_heap_memory_usage: 173615528\nloaded_class_count: 17925\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927862102000,"args":{"JVM stats":"heap_memory_usage: 524846712\nnon_heap_memory_usage: 173868408\nloaded_class_count: 17926\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927862105000,"args":{"JVM stats":"heap_memory_usage: 525321328\nnon_heap_memory_usage: 173877648\nloaded_class_count: 17926\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927862420000,"args":{"JVM stats":"heap_memory_usage: 114126816\nnon_heap_memory_usage: 174196480\nloaded_class_count: 17928\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 18\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927862501000,"args":{"JVM stats":"heap_memory_usage: 116953896\nnon_heap_memory_usage: 174218280\nloaded_class_count: 17928\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927862501001,"args":{"JVM stats":"heap_memory_usage: 116953896\nnon_heap_memory_usage: 174218280\nloaded_class_count: 17928\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927862653000,"args":{"JVM stats":"heap_memory_usage: 142341080\nnon_heap_memory_usage: 174210344\nloaded_class_count: 17928\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927862654000,"args":{"JVM stats":"heap_memory_usage: 142583144\nnon_heap_memory_usage: 174210344\nloaded_class_count: 17928\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927864124000,"args":{"JVM stats":"heap_memory_usage: 215378464\nnon_heap_memory_usage: 173704616\nloaded_class_count: 17932\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 20\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927864125000,"args":{"JVM stats":"heap_memory_usage: 216590312\nnon_heap_memory_usage: 173704616\nloaded_class_count: 17932\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1517927864133000,"args":{"JVM stats":"heap_memory_usage: 216827672\nnon_heap_memory_usage: 173629672\nloaded_class_count: 17933\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":3,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857257000,"dur":4000},{"pid":1,"tid":3,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857261000,"dur":6000},{"pid":1,"tid":3,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857267000,"dur":4000},{"pid":1,"tid":3,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857267000,"dur":4000},{"pid":1,"tid":3,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857280000,"dur":4000},{"pid":1,"tid":3,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857284000,"dur":1000},{"pid":1,"tid":3,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857286000,"dur":100},{"pid":1,"tid":3,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857286000,"dur":1000},{"pid":1,"tid":3,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857287000,"dur":100},{"pid":1,"tid":3,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857287000,"dur":100},{"pid":1,"tid":3,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857287000,"dur":1000},{"pid":1,"tid":3,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857288000,"dur":100},{"pid":1,"tid":3,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857288000,"dur":3000},{"pid":1,"tid":3,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857291000,"dur":100},{"pid":1,"tid":3,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857291000,"dur":100},{"pid":1,"tid":3,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857291000,"dur":100},{"pid":1,"tid":3,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857291000,"dur":20000},{"pid":1,"tid":3,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857311000,"dur":1000},{"pid":1,"tid":3,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857312000,"dur":4000},{"pid":1,"tid":3,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857318000,"dur":1000},{"pid":1,"tid":3,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857319000,"dur":100},{"pid":1,"tid":3,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857285000,"dur":34000},{"pid":1,"tid":3,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857319000,"dur":5000},{"pid":1,"tid":3,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857325000,"dur":1000},{"pid":1,"tid":3,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857326000,"dur":100},{"pid":1,"tid":3,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857326000,"dur":100},{"pid":1,"tid":3,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857326000,"dur":100},{"pid":1,"tid":3,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857326000,"dur":1000},{"pid":1,"tid":3,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857327000,"dur":100},{"pid":1,"tid":3,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857327000,"dur":1000},{"pid":1,"tid":3,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857328000,"dur":100},{"pid":1,"tid":3,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857328000,"dur":1000},{"pid":1,"tid":3,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857329000,"dur":100},{"pid":1,"tid":3,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857329000,"dur":22000},{"pid":1,"tid":3,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857351000,"dur":1000},{"pid":1,"tid":3,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857352000,"dur":1000},{"pid":1,"tid":3,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857354000,"dur":1000},{"pid":1,"tid":3,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857355000,"dur":100},{"pid":1,"tid":3,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1517927857324000,"dur":31000},{"pid":1,"tid":3,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857355000,"dur":3000},{"pid":1,"tid":3,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857359000,"dur":12000},{"pid":1,"tid":3,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857280000,"dur":94000},{"pid":1,"tid":3,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927857274000,"dur":101000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857396000,"dur":1000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857397000,"dur":50000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857448000,"dur":4000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857453000,"dur":4000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857457000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857458000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857460000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857461000,"dur":2000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857463000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857464000,"dur":49000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857514000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857515000,"dur":3000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857519000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857520000,"dur":7000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857527000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857528000,"dur":12000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857540000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1517927857547000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927857548000,"dur":3404000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927860952000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927860953000,"dur":765000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927861719000,"dur":5000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927861725000,"dur":7000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927861732000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927861733000,"dur":5000},{"pid":1,"tid":4,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: false\n"},"ph":"X","ts":1517927861759000,"dur":1000},{"pid":1,"tid":4,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: false\n"},"ph":"X","ts":1517927861760000,"dur":193000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927861739000,"dur":222000},{"pid":1,"tid":4,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1517927861964000,"dur":100},{"pid":1,"tid":4,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1517927861965000,"dur":125000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927861962000,"dur":140000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927862102000,"dur":3000},{"pid":1,"tid":4,"id":78,"name":"transform prep: merge java resources","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1517927862165000,"dur":2000},{"pid":1,"tid":4,"id":79,"name":"transform: merge java resources","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1517927862167000,"dur":180000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927862106000,"dur":314000},{"pid":1,"tid":4,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: false\n"},"ph":"X","ts":1517927862449000,"dur":100},{"pid":1,"tid":4,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: false\n"},"ph":"X","ts":1517927862449000,"dur":39000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927862420000,"dur":81000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927862501000,"dur":100},{"pid":1,"tid":4,"id":85,"name":"transform prep: merge java resources","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1517927862509000,"dur":100},{"pid":1,"tid":4,"id":86,"name":"transform: merge java resources","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1517927862509000,"dur":129000},{"pid":1,"tid":0,"id":84,"name":"task: transform","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927862502000,"dur":151000},{"pid":1,"tid":0,"id":87,"name":"task: validate signing","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927862653000,"dur":1000},{"pid":1,"tid":0,"id":88,"name":"task: package application","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927862654000,"dur":1470000},{"pid":1,"tid":0,"id":89,"name":"task: unknown task type","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1517927864125000,"dur":100},{"pid":1,"tid":3,"id":90,"name":"base plugin build finished","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 50581\n apk_size: 2804282\n resources_ap_size: 482860\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1517927864126000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-06-15-37-44-133.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-06-15-37-44-133.rawproto
new file mode 100644
index 00000000..c3133549
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-06-15-37-44-133.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-19-14-927.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-19-14-927.json
new file mode 100644
index 00000000..8054da35
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-19-14-927.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427148011000,"args":{"JVM stats":"heap_memory_usage: 32786608\nnon_heap_memory_usage: 55302416\nloaded_class_count: 7817\nthread_count: 25\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 6\n gc_time: 49\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 123\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427154931000,"args":{"JVM stats":"heap_memory_usage: 54916296\nnon_heap_memory_usage: 89178472\nloaded_class_count: 11860\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 3\n gc_time: 88\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 244\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427148051000,"dur":366000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427148418000,"dur":426000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427148847000,"dur":73000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427148846000,"dur":76000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427149917000,"dur":138000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427150056000,"dur":23000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150120000,"dur":22000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150142000,"dur":6000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150148000,"dur":9000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150157000,"dur":33000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150190000,"dur":9000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150199000,"dur":7000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150207000,"dur":48000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150255000,"dur":6000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150261000,"dur":9000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150270000,"dur":2000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150272000,"dur":60000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150332000,"dur":31000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150363000,"dur":74000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150444000,"dur":33000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150477000,"dur":4000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150079000,"dur":402000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427150481000,"dur":76000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150561000,"dur":2000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150564000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150564000,"dur":1000},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150565000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150566000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150566000,"dur":1000},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150567000,"dur":2000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150569000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150570000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150570000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150570000,"dur":28000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150598000,"dur":3000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150601000,"dur":7000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150610000,"dur":6000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150616000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 26\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427150557000,"dur":59000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427150616000,"dur":8000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427150624000,"dur":58000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427149913000,"dur":861000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427150780000,"dur":2014000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427149081000,"dur":3713000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427154894000,"dur":17000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-19-14-927.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-19-14-927.rawproto
new file mode 100644
index 00000000..9f1431ef
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-19-14-927.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-14-280.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-14-280.json
new file mode 100644
index 00000000..501ed14d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-14-280.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427209000000,"args":{"JVM stats":"heap_memory_usage: 165021488\nnon_heap_memory_usage: 98850480\nloaded_class_count: 12566\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427214281000,"args":{"JVM stats":"heap_memory_usage: 209098504\nnon_heap_memory_usage: 101801568\nloaded_class_count: 12606\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209001000,"dur":8000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209009000,"dur":7000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209016000,"dur":2000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209016000,"dur":2000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209057000,"dur":7000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209064000,"dur":2000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209069000,"dur":2000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209071000,"dur":1000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209072000,"dur":1000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209073000,"dur":2000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209075000,"dur":1000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209076000,"dur":1000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209077000,"dur":6000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209083000,"dur":1000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209084000,"dur":100},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209084000,"dur":1000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209085000,"dur":30000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209115000,"dur":1000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209116000,"dur":7000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209125000,"dur":3000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209128000,"dur":1000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209067000,"dur":62000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209129000,"dur":7000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209139000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209140000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209140000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209140000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209141000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209142000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209142000,"dur":1000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209144000,"dur":100},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209144000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209144000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209144000,"dur":29000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209173000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209174000,"dur":5000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209180000,"dur":2000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209182000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427209137000,"dur":45000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209182000,"dur":7000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209189000,"dur":11000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209057000,"dur":147000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209205000,"dur":4128000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427209048000,"dur":4285000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427214268000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-14-280.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-14-280.rawproto
new file mode 100644
index 00000000..42215156
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-14-280.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-25-438.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-25-438.json
new file mode 100644
index 00000000..4eb7a8b0
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-25-438.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427221635000,"args":{"JVM stats":"heap_memory_usage: 267169928\nnon_heap_memory_usage: 102805360\nloaded_class_count: 12624\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427225439000,"args":{"JVM stats":"heap_memory_usage: 86902920\nnon_heap_memory_usage: 104761760\nloaded_class_count: 12645\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 16\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221636000,"dur":9000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221645000,"dur":10000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221655000,"dur":5000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221655000,"dur":5000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221670000,"dur":9000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221679000,"dur":2000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221683000,"dur":1000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221684000,"dur":1000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221685000,"dur":2000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221687000,"dur":1000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221688000,"dur":1000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221690000,"dur":100},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221690000,"dur":6000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221696000,"dur":100},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221696000,"dur":1000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221697000,"dur":100},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221697000,"dur":29000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221726000,"dur":3000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221729000,"dur":5000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221735000,"dur":2000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221737000,"dur":100},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221681000,"dur":56000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221737000,"dur":6000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221744000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221745000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221745000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221745000,"dur":100},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221745000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221745000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221746000,"dur":100},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221747000,"dur":100},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221747000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221747000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221747000,"dur":21000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221768000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221769000,"dur":2000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221772000,"dur":2000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221774000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427221743000,"dur":31000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221775000,"dur":4000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221779000,"dur":9000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221670000,"dur":121000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221791000,"dur":3289000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427221663000,"dur":3417000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427225432000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-25-438.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-25-438.rawproto
new file mode 100644
index 00000000..69c14a27
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-25-438.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-35-130.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-35-130.json
new file mode 100644
index 00000000..309e59e6
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-35-130.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427229946000,"args":{"JVM stats":"heap_memory_usage: 145481816\nnon_heap_memory_usage: 104958832\nloaded_class_count: 12661\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427235130000,"args":{"JVM stats":"heap_memory_usage: 185171672\nnon_heap_memory_usage: 106850816\nloaded_class_count: 12691\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427229947000,"dur":16000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427229964000,"dur":15000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427229979000,"dur":3000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427229979000,"dur":3000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427230001000,"dur":12000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427230013000,"dur":1000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230016000,"dur":1000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230017000,"dur":1000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230018000,"dur":2000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230020000,"dur":2000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230022000,"dur":1000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230023000,"dur":100},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230023000,"dur":7000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230030000,"dur":1000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230031000,"dur":100},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230031000,"dur":100},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230031000,"dur":25000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230056000,"dur":3000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230059000,"dur":8000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230068000,"dur":1000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230069000,"dur":1000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230014000,"dur":56000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427230070000,"dur":5000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230077000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230078000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230078000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230078000,"dur":100},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230078000,"dur":1000},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230079000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230079000,"dur":2000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230081000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230082000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230082000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230082000,"dur":23000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230105000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230106000,"dur":5000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230112000,"dur":2000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230114000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427230076000,"dur":38000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427230114000,"dur":4000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427230118000,"dur":13000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427230001000,"dur":132000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427230133000,"dur":4705000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427229987000,"dur":4851000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427235126000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-35-130.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-35-130.rawproto
new file mode 100644
index 00000000..d28cf878
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-35-130.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-43-805.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-43-805.json
new file mode 100644
index 00000000..01403ee2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-43-805.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236079000,"args":{"JVM stats":"heap_memory_usage: 245009464\nnon_heap_memory_usage: 107951136\nloaded_class_count: 12717\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236348000,"args":{"JVM stats":"heap_memory_usage: 263955872\nnon_heap_memory_usage: 108893696\nloaded_class_count: 12855\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236441000,"args":{"JVM stats":"heap_memory_usage: 271385376\nnon_heap_memory_usage: 109196448\nloaded_class_count: 12920\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236472000,"args":{"JVM stats":"heap_memory_usage: 272165976\nnon_heap_memory_usage: 109258384\nloaded_class_count: 12944\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236493000,"args":{"JVM stats":"heap_memory_usage: 274526232\nnon_heap_memory_usage: 109359488\nloaded_class_count: 12954\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236497000,"args":{"JVM stats":"heap_memory_usage: 274526232\nnon_heap_memory_usage: 109372408\nloaded_class_count: 12958\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236515000,"args":{"JVM stats":"heap_memory_usage: 275328968\nnon_heap_memory_usage: 109428144\nloaded_class_count: 12963\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236520000,"args":{"JVM stats":"heap_memory_usage: 275328968\nnon_heap_memory_usage: 109429552\nloaded_class_count: 12965\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236527000,"args":{"JVM stats":"heap_memory_usage: 275328968\nnon_heap_memory_usage: 109408560\nloaded_class_count: 12966\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427236528000,"args":{"JVM stats":"heap_memory_usage: 275328968\nnon_heap_memory_usage: 109392432\nloaded_class_count: 12966\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427238400000,"args":{"JVM stats":"heap_memory_usage: 107117248\nnon_heap_memory_usage: 113052280\nloaded_class_count: 13159\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 34\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427238424000,"args":{"JVM stats":"heap_memory_usage: 114912432\nnon_heap_memory_usage: 113197472\nloaded_class_count: 13185\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427238559000,"args":{"JVM stats":"heap_memory_usage: 125692480\nnon_heap_memory_usage: 114021624\nloaded_class_count: 13325\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427238578000,"args":{"JVM stats":"heap_memory_usage: 125692480\nnon_heap_memory_usage: 114149504\nloaded_class_count: 13336\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427239628000,"args":{"JVM stats":"heap_memory_usage: 144054432\nnon_heap_memory_usage: 114780624\nloaded_class_count: 13418\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427239630000,"args":{"JVM stats":"heap_memory_usage: 144260992\nnon_heap_memory_usage: 114780624\nloaded_class_count: 13418\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427240188000,"args":{"JVM stats":"heap_memory_usage: 240317808\nnon_heap_memory_usage: 115851672\nloaded_class_count: 13470\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427240209000,"args":{"JVM stats":"heap_memory_usage: 240949896\nnon_heap_memory_usage: 115883328\nloaded_class_count: 13472\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427240259000,"args":{"JVM stats":"heap_memory_usage: 244922656\nnon_heap_memory_usage: 115870016\nloaded_class_count: 13476\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427240276000,"args":{"JVM stats":"heap_memory_usage: 245542416\nnon_heap_memory_usage: 115867528\nloaded_class_count: 13481\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427240286000,"args":{"JVM stats":"heap_memory_usage: 245753072\nnon_heap_memory_usage: 115896920\nloaded_class_count: 13482\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427240291000,"args":{"JVM stats":"heap_memory_usage: 245959632\nnon_heap_memory_usage: 115843600\nloaded_class_count: 13483\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427240292000,"args":{"JVM stats":"heap_memory_usage: 245959632\nnon_heap_memory_usage: 115846160\nloaded_class_count: 13483\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427241859000,"args":{"JVM stats":"heap_memory_usage: 339801632\nnon_heap_memory_usage: 116817496\nloaded_class_count: 13487\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427241867000,"args":{"JVM stats":"heap_memory_usage: 340468768\nnon_heap_memory_usage: 116833936\nloaded_class_count: 13488\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427242517000,"args":{"JVM stats":"heap_memory_usage: 351461312\nnon_heap_memory_usage: 117036680\nloaded_class_count: 13496\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427242518000,"args":{"JVM stats":"heap_memory_usage: 351461312\nnon_heap_memory_usage: 117028168\nloaded_class_count: 13496\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427243794000,"args":{"JVM stats":"heap_memory_usage: 280253216\nnon_heap_memory_usage: 119609712\nloaded_class_count: 13587\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 38\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427243805000,"args":{"JVM stats":"heap_memory_usage: 283545408\nnon_heap_memory_usage: 119631240\nloaded_class_count: 13589\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236079000,"dur":6000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236085000,"dur":7000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236092000,"dur":1000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236092000,"dur":1000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236103000,"dur":6000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236109000,"dur":100},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236111000,"dur":1000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236112000,"dur":100},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236112000,"dur":100},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236112000,"dur":1000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236113000,"dur":1000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236114000,"dur":100},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236114000,"dur":7000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236121000,"dur":100},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236122000,"dur":100},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236122000,"dur":100},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236122000,"dur":31000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236153000,"dur":1000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236154000,"dur":4000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236160000,"dur":1000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236161000,"dur":1000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236109000,"dur":53000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236162000,"dur":5000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236168000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236169000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236169000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236169000,"dur":100},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236169000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236169000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236169000,"dur":1000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236170000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236171000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236171000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236171000,"dur":23000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236194000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236195000,"dur":1000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236197000,"dur":1000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236198000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427236167000,"dur":31000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236198000,"dur":5000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236203000,"dur":12000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236103000,"dur":114000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236217000,"dur":10000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427236096000,"dur":131000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427236340000,"dur":1000},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236351000,"dur":90000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236442000,"dur":29000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236474000,"dur":19000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236494000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236499000,"dur":16000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236516000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236522000,"dur":5000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236528000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427236530000,"dur":1870000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427238401000,"dur":23000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427238426000,"dur":133000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427238560000,"dur":18000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427238580000,"dur":1047000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427239629000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: test pre build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 93\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427239631000,"dur":557000},{"pid":1,"tid":0,"id":62,"name":"task: aidl compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427240190000,"dur":19000},{"pid":1,"tid":0,"id":63,"name":"task: process test manifest","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427240210000,"dur":48000},{"pid":1,"tid":0,"id":64,"name":"task: renderscript compile","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427240261000,"dur":15000},{"pid":1,"tid":0,"id":65,"name":"task: generate build config","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427240278000,"dur":8000},{"pid":1,"tid":0,"id":66,"name":"task: generate res values","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427240287000,"dur":4000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427240292000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: merge resources","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427240294000,"dur":1565000},{"pid":1,"tid":0,"id":69,"name":"task: splits discovery","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427241860000,"dur":7000},{"pid":1,"tid":0,"id":70,"name":"task: process android resources","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427241869000,"dur":648000},{"pid":1,"tid":0,"id":71,"name":"task: unknown task type","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427242518000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: mockable android jar","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427242519000,"dur":1275000},{"pid":1,"tid":1,"id":73,"name":"base plugin build finished","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427243796000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-43-805.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-43-805.rawproto
new file mode 100644
index 00000000..552c1f8b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-20-43-805.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-30-833.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-30-833.json
new file mode 100644
index 00000000..be59b065
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-30-833.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427277563000,"args":{"JVM stats":"heap_memory_usage: 343834440\nnon_heap_memory_usage: 120101752\nloaded_class_count: 13620\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281702000,"args":{"JVM stats":"heap_memory_usage: 358611072\nnon_heap_memory_usage: 120964760\nloaded_class_count: 13651\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281772000,"args":{"JVM stats":"heap_memory_usage: 366205984\nnon_heap_memory_usage: 120676080\nloaded_class_count: 13658\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281780000,"args":{"JVM stats":"heap_memory_usage: 366651824\nnon_heap_memory_usage: 120692880\nloaded_class_count: 13660\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281786000,"args":{"JVM stats":"heap_memory_usage: 366874784\nnon_heap_memory_usage: 120701736\nloaded_class_count: 13660\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281788000,"args":{"JVM stats":"heap_memory_usage: 366874784\nnon_heap_memory_usage: 120702536\nloaded_class_count: 13660\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281789000,"args":{"JVM stats":"heap_memory_usage: 366874784\nnon_heap_memory_usage: 120705256\nloaded_class_count: 13660\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281791000,"args":{"JVM stats":"heap_memory_usage: 366874784\nnon_heap_memory_usage: 120706376\nloaded_class_count: 13660\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281793000,"args":{"JVM stats":"heap_memory_usage: 366874784\nnon_heap_memory_usage: 120706408\nloaded_class_count: 13660\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281795000,"args":{"JVM stats":"heap_memory_usage: 366874784\nnon_heap_memory_usage: 120706408\nloaded_class_count: 13660\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281860000,"args":{"JVM stats":"heap_memory_usage: 370889608\nnon_heap_memory_usage: 120817952\nloaded_class_count: 13663\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281864000,"args":{"JVM stats":"heap_memory_usage: 370889608\nnon_heap_memory_usage: 120810952\nloaded_class_count: 13663\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281871000,"args":{"JVM stats":"heap_memory_usage: 371112568\nnon_heap_memory_usage: 120811736\nloaded_class_count: 13663\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281873000,"args":{"JVM stats":"heap_memory_usage: 371112568\nnon_heap_memory_usage: 120816184\nloaded_class_count: 13663\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281885000,"args":{"JVM stats":"heap_memory_usage: 372227392\nnon_heap_memory_usage: 120794912\nloaded_class_count: 13665\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281886000,"args":{"JVM stats":"heap_memory_usage: 372227392\nnon_heap_memory_usage: 120796392\nloaded_class_count: 13665\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427281920000,"args":{"JVM stats":"heap_memory_usage: 373346720\nnon_heap_memory_usage: 120661168\nloaded_class_count: 13670\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427283119000,"args":{"JVM stats":"heap_memory_usage: 106660048\nnon_heap_memory_usage: 130949504\nloaded_class_count: 14579\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 40\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427283127000,"args":{"JVM stats":"heap_memory_usage: 111813368\nnon_heap_memory_usage: 130988512\nloaded_class_count: 14581\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427286986000,"args":{"JVM stats":"heap_memory_usage: 113486080\nnon_heap_memory_usage: 131066344\nloaded_class_count: 14582\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427286988000,"args":{"JVM stats":"heap_memory_usage: 113486080\nnon_heap_memory_usage: 131066344\nloaded_class_count: 14582\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427286999000,"args":{"JVM stats":"heap_memory_usage: 113486080\nnon_heap_memory_usage: 131052896\nloaded_class_count: 14585\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427287008000,"args":{"JVM stats":"heap_memory_usage: 113597528\nnon_heap_memory_usage: 131059328\nloaded_class_count: 14594\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427287009000,"args":{"JVM stats":"heap_memory_usage: 114282504\nnon_heap_memory_usage: 131059328\nloaded_class_count: 14594\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427287024000,"args":{"JVM stats":"heap_memory_usage: 115456592\nnon_heap_memory_usage: 131033192\nloaded_class_count: 14596\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427288502000,"args":{"JVM stats":"heap_memory_usage: 332515896\nnon_heap_memory_usage: 140252144\nloaded_class_count: 15195\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427289266000,"args":{"JVM stats":"heap_memory_usage: 191057512\nnon_heap_memory_usage: 142744128\nloaded_class_count: 15342\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 61\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427289445000,"args":{"JVM stats":"heap_memory_usage: 248943720\nnon_heap_memory_usage: 143159408\nloaded_class_count: 15351\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427289451000,"args":{"JVM stats":"heap_memory_usage: 249044904\nnon_heap_memory_usage: 143205160\nloaded_class_count: 15351\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427289950000,"args":{"JVM stats":"heap_memory_usage: 277684288\nnon_heap_memory_usage: 144529520\nloaded_class_count: 15446\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427290033000,"args":{"JVM stats":"heap_memory_usage: 279534624\nnon_heap_memory_usage: 144260232\nloaded_class_count: 15452\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427290036000,"args":{"JVM stats":"heap_memory_usage: 279538736\nnon_heap_memory_usage: 144261064\nloaded_class_count: 15452\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427290243000,"args":{"JVM stats":"heap_memory_usage: 303813168\nnon_heap_memory_usage: 144490032\nloaded_class_count: 15460\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427290246000,"args":{"JVM stats":"heap_memory_usage: 303897904\nnon_heap_memory_usage: 144494696\nloaded_class_count: 15462\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427290822000,"args":{"JVM stats":"heap_memory_usage: 419303672\nnon_heap_memory_usage: 144635880\nloaded_class_count: 15688\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 26\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427290824000,"args":{"JVM stats":"heap_memory_usage: 421664440\nnon_heap_memory_usage: 144638760\nloaded_class_count: 15688\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427290834000,"args":{"JVM stats":"heap_memory_usage: 421908168\nnon_heap_memory_usage: 144628168\nloaded_class_count: 15688\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277563000,"dur":7000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277570000,"dur":6000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277576000,"dur":1000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277576000,"dur":1000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277584000,"dur":4000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277588000,"dur":1000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277590000,"dur":100},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277590000,"dur":1000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277591000,"dur":100},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277591000,"dur":2000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277593000,"dur":100},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277593000,"dur":100},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277593000,"dur":3000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277596000,"dur":100},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277596000,"dur":1000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277597000,"dur":100},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277597000,"dur":21000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277618000,"dur":1000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277619000,"dur":4000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277624000,"dur":2000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277626000,"dur":100},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277589000,"dur":37000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277626000,"dur":3000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277630000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277631000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277631000,"dur":1000},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277632000,"dur":100},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277632000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277632000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277632000,"dur":1000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277633000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277634000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277634000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277634000,"dur":21000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277655000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277656000,"dur":2000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277659000,"dur":100},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277659000,"dur":1000},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427277629000,"dur":31000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277660000,"dur":2000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277662000,"dur":6000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277584000,"dur":85000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277670000,"dur":4006000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427277579000,"dur":4097000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281702000,"dur":100},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281703000,"dur":69000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281773000,"dur":7000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281781000,"dur":5000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281786000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281788000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281790000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281792000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281794000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281795000,"dur":64000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281862000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281864000,"dur":7000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281872000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281875000,"dur":10000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427281885000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: java pre compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427281886000,"dur":34000},{"pid":1,"tid":0,"id":62,"name":"task: android java compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427281921000,"dur":1198000},{"pid":1,"tid":0,"id":63,"name":"task: external native build json","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427283120000,"dur":6000},{"pid":1,"tid":0,"id":64,"name":"task: external native build","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427283127000,"dur":3859000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427286987000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427286989000,"dur":9000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427286999000,"dur":9000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427287009000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427287010000,"dur":13000},{"pid":1,"tid":2,"id":71,"name":"transform prep: dex archive builder","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518427287052000,"dur":11000},{"pid":1,"tid":2,"id":72,"name":"transform: dex archive builder","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518427287064000,"dur":1375000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427287025000,"dur":1477000},{"pid":1,"tid":2,"id":74,"name":"transform prep: external libs merger","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518427288511000,"dur":2000},{"pid":1,"tid":2,"id":75,"name":"transform: external libs merger","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518427288513000,"dur":742000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427288503000,"dur":762000},{"pid":1,"tid":2,"id":77,"name":"transform prep: dex merger","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518427289276000,"dur":2000},{"pid":1,"tid":2,"id":78,"name":"transform: dex merger","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518427289278000,"dur":154000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427289267000,"dur":178000},{"pid":1,"tid":0,"id":79,"name":"task: merge source set folders","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427289446000,"dur":4000},{"pid":1,"tid":2,"id":81,"name":"transform prep: merge java resources","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518427289535000,"dur":7000},{"pid":1,"tid":2,"id":82,"name":"transform: merge java resources","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518427289542000,"dur":316000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427289454000,"dur":496000},{"pid":1,"tid":2,"id":84,"name":"transform prep: strip debug symbol","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: false\n"},"ph":"X","ts":1518427289959000,"dur":1000},{"pid":1,"tid":2,"id":85,"name":"transform: strip debug symbol","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: false\n"},"ph":"X","ts":1518427289960000,"dur":56000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427289953000,"dur":79000},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427290034000,"dur":1000},{"pid":1,"tid":2,"id":88,"name":"transform prep: merge java resources","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518427290047000,"dur":1000},{"pid":1,"tid":2,"id":89,"name":"transform: merge java resources","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518427290048000,"dur":176000},{"pid":1,"tid":0,"id":87,"name":"task: transform","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427290038000,"dur":205000},{"pid":1,"tid":0,"id":90,"name":"task: validate signing","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427290243000,"dur":3000},{"pid":1,"tid":0,"id":91,"name":"task: package application","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427290247000,"dur":575000},{"pid":1,"tid":0,"id":92,"name":"task: unknown task type","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427290823000,"dur":100},{"pid":1,"tid":1,"id":93,"name":"base plugin build finished","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1319804\n apk_size: 3017891\n resources_ap_size: 488203\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427290825000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-30-833.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-30-833.rawproto
new file mode 100644
index 00000000..e2adad93
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-30-833.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-32-046.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-32-046.json
new file mode 100644
index 00000000..a7339c0e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-32-046.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427291445000,"args":{"JVM stats":"heap_memory_usage: 479214360\nnon_heap_memory_usage: 144210752\nloaded_class_count: 15714\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427292046000,"args":{"JVM stats":"heap_memory_usage: 514845392\nnon_heap_memory_usage: 144945968\nloaded_class_count: 15720\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291445000,"dur":12000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291457000,"dur":9000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291466000,"dur":2000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291466000,"dur":2000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291479000,"dur":4000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291483000,"dur":2000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291487000,"dur":2000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291489000,"dur":1000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291490000,"dur":1000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291492000,"dur":2000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291494000,"dur":1000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291495000,"dur":1000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291496000,"dur":9000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291505000,"dur":1000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291506000,"dur":1000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291507000,"dur":100},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291507000,"dur":45000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291552000,"dur":4000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291556000,"dur":9000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291567000,"dur":4000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291571000,"dur":1000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291485000,"dur":87000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291572000,"dur":10000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291583000,"dur":100},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291583000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291583000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291583000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291584000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291584000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291584000,"dur":3000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291587000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291588000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291588000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291588000,"dur":41000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291630000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291631000,"dur":3000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291636000,"dur":2000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291638000,"dur":1000},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427291582000,"dur":57000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291639000,"dur":5000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291644000,"dur":10000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291479000,"dur":178000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291657000,"dur":24000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427291472000,"dur":209000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427292039000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-32-046.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-32-046.rawproto
new file mode 100644
index 00000000..9059e50b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-21-32-046.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-27-16-765.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-27-16-765.json
new file mode 100644
index 00000000..324b4113
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-27-16-765.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632150000,"args":{"JVM stats":"heap_memory_usage: 173644264\nnon_heap_memory_usage: 145880864\nloaded_class_count: 15774\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 16\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632322000,"args":{"JVM stats":"heap_memory_usage: 199704256\nnon_heap_memory_usage: 146533000\nloaded_class_count: 15828\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632323000,"args":{"JVM stats":"heap_memory_usage: 199704256\nnon_heap_memory_usage: 146540096\nloaded_class_count: 15828\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632362000,"args":{"JVM stats":"heap_memory_usage: 205371808\nnon_heap_memory_usage: 146569536\nloaded_class_count: 15829\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632368000,"args":{"JVM stats":"heap_memory_usage: 206325048\nnon_heap_memory_usage: 146582480\nloaded_class_count: 15829\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632372000,"args":{"JVM stats":"heap_memory_usage: 206642440\nnon_heap_memory_usage: 146591632\nloaded_class_count: 15829\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632373000,"args":{"JVM stats":"heap_memory_usage: 206642440\nnon_heap_memory_usage: 146602032\nloaded_class_count: 15830\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632374000,"args":{"JVM stats":"heap_memory_usage: 206642440\nnon_heap_memory_usage: 146602032\nloaded_class_count: 15830\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632376000,"args":{"JVM stats":"heap_memory_usage: 206642440\nnon_heap_memory_usage: 146615232\nloaded_class_count: 15831\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632377000,"args":{"JVM stats":"heap_memory_usage: 206642440\nnon_heap_memory_usage: 146620224\nloaded_class_count: 15831\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632377001,"args":{"JVM stats":"heap_memory_usage: 206642440\nnon_heap_memory_usage: 146620224\nloaded_class_count: 15831\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632420000,"args":{"JVM stats":"heap_memory_usage: 210770232\nnon_heap_memory_usage: 146655896\nloaded_class_count: 15831\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632422000,"args":{"JVM stats":"heap_memory_usage: 210770232\nnon_heap_memory_usage: 146660992\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632461000,"args":{"JVM stats":"heap_memory_usage: 216392960\nnon_heap_memory_usage: 146820936\nloaded_class_count: 15839\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632462000,"args":{"JVM stats":"heap_memory_usage: 216392960\nnon_heap_memory_usage: 146814024\nloaded_class_count: 15839\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632984000,"args":{"JVM stats":"heap_memory_usage: 237376824\nnon_heap_memory_usage: 147082816\nloaded_class_count: 15840\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427632986000,"args":{"JVM stats":"heap_memory_usage: 237376824\nnon_heap_memory_usage: 147085120\nloaded_class_count: 15840\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633006000,"args":{"JVM stats":"heap_memory_usage: 238507432\nnon_heap_memory_usage: 147130328\nloaded_class_count: 15841\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633018000,"args":{"JVM stats":"heap_memory_usage: 239287712\nnon_heap_memory_usage: 147134720\nloaded_class_count: 15841\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633021000,"args":{"JVM stats":"heap_memory_usage: 239287712\nnon_heap_memory_usage: 147136224\nloaded_class_count: 15841\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633022000,"args":{"JVM stats":"heap_memory_usage: 239287712\nnon_heap_memory_usage: 147139592\nloaded_class_count: 15841\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633023000,"args":{"JVM stats":"heap_memory_usage: 239287712\nnon_heap_memory_usage: 147141512\nloaded_class_count: 15841\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633028000,"args":{"JVM stats":"heap_memory_usage: 239605104\nnon_heap_memory_usage: 147159592\nloaded_class_count: 15845\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633157000,"args":{"JVM stats":"heap_memory_usage: 462831616\nnon_heap_memory_usage: 147336304\nloaded_class_count: 15848\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633164000,"args":{"JVM stats":"heap_memory_usage: 462831616\nnon_heap_memory_usage: 147368632\nloaded_class_count: 15848\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633171000,"args":{"JVM stats":"heap_memory_usage: 463149112\nnon_heap_memory_usage: 147397192\nloaded_class_count: 15848\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633340000,"args":{"JVM stats":"heap_memory_usage: 468449672\nnon_heap_memory_usage: 147537816\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633359000,"args":{"JVM stats":"heap_memory_usage: 469217552\nnon_heap_memory_usage: 147551944\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633360000,"args":{"JVM stats":"heap_memory_usage: 469534976\nnon_heap_memory_usage: 147551944\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633407000,"args":{"JVM stats":"heap_memory_usage: 470804960\nnon_heap_memory_usage: 147578464\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633408000,"args":{"JVM stats":"heap_memory_usage: 471122376\nnon_heap_memory_usage: 147581768\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633418000,"args":{"JVM stats":"heap_memory_usage: 471757216\nnon_heap_memory_usage: 147606672\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633420000,"args":{"JVM stats":"heap_memory_usage: 471757216\nnon_heap_memory_usage: 147606672\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633430000,"args":{"JVM stats":"heap_memory_usage: 472710936\nnon_heap_memory_usage: 147628216\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633435000,"args":{"JVM stats":"heap_memory_usage: 473028544\nnon_heap_memory_usage: 147630840\nloaded_class_count: 15851\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633831000,"args":{"JVM stats":"heap_memory_usage: 488740800\nnon_heap_memory_usage: 148535728\nloaded_class_count: 15913\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633840000,"args":{"JVM stats":"heap_memory_usage: 489062304\nnon_heap_memory_usage: 148547328\nloaded_class_count: 15916\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633841000,"args":{"JVM stats":"heap_memory_usage: 489062304\nnon_heap_memory_usage: 148548992\nloaded_class_count: 15916\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633842000,"args":{"JVM stats":"heap_memory_usage: 489379720\nnon_heap_memory_usage: 148556680\nloaded_class_count: 15917\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633856000,"args":{"JVM stats":"heap_memory_usage: 489697112\nnon_heap_memory_usage: 148558032\nloaded_class_count: 15917\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427633873000,"args":{"JVM stats":"heap_memory_usage: 490014504\nnon_heap_memory_usage: 148577056\nloaded_class_count: 15919\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427634231000,"args":{"JVM stats":"heap_memory_usage: 496588360\nnon_heap_memory_usage: 148737048\nloaded_class_count: 15922\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427635084000,"args":{"JVM stats":"heap_memory_usage: 212986088\nnon_heap_memory_usage: 150356000\nloaded_class_count: 15925\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 28\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427635548000,"args":{"JVM stats":"heap_memory_usage: 428015008\nnon_heap_memory_usage: 151083896\nloaded_class_count: 15932\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427635653000,"args":{"JVM stats":"heap_memory_usage: 489190488\nnon_heap_memory_usage: 151329520\nloaded_class_count: 15935\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427635655000,"args":{"JVM stats":"heap_memory_usage: 489366416\nnon_heap_memory_usage: 151343944\nloaded_class_count: 15935\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427635890000,"args":{"JVM stats":"heap_memory_usage: 519290792\nnon_heap_memory_usage: 151426720\nloaded_class_count: 15940\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427636437000,"args":{"JVM stats":"heap_memory_usage: 201817696\nnon_heap_memory_usage: 150881400\nloaded_class_count: 15947\nthread_count: 61\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 49\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427636441000,"args":{"JVM stats":"heap_memory_usage: 204418200\nnon_heap_memory_usage: 150883080\nloaded_class_count: 15947\nthread_count: 61\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427636692000,"args":{"JVM stats":"heap_memory_usage: 465908296\nnon_heap_memory_usage: 150504344\nloaded_class_count: 15949\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427636708000,"args":{"JVM stats":"heap_memory_usage: 467155272\nnon_heap_memory_usage: 150679592\nloaded_class_count: 15966\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427636709000,"args":{"JVM stats":"heap_memory_usage: 467155272\nnon_heap_memory_usage: 150681080\nloaded_class_count: 15966\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427636709001,"args":{"JVM stats":"heap_memory_usage: 467155272\nnon_heap_memory_usage: 150681080\nloaded_class_count: 15966\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427636766000,"args":{"JVM stats":"heap_memory_usage: 472021344\nnon_heap_memory_usage: 151309728\nloaded_class_count: 16127\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":3,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632150000,"dur":6000},{"pid":1,"tid":3,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632156000,"dur":4000},{"pid":1,"tid":3,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632160000,"dur":2000},{"pid":1,"tid":3,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632160000,"dur":2000},{"pid":1,"tid":3,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632168000,"dur":3000},{"pid":1,"tid":3,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632171000,"dur":100},{"pid":1,"tid":3,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632172000,"dur":1000},{"pid":1,"tid":3,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632173000,"dur":100},{"pid":1,"tid":3,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632173000,"dur":100},{"pid":1,"tid":3,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632173000,"dur":1000},{"pid":1,"tid":3,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632174000,"dur":1000},{"pid":1,"tid":3,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632175000,"dur":100},{"pid":1,"tid":3,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632175000,"dur":2000},{"pid":1,"tid":3,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632177000,"dur":100},{"pid":1,"tid":3,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632177000,"dur":100},{"pid":1,"tid":3,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632177000,"dur":100},{"pid":1,"tid":3,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632177000,"dur":24000},{"pid":1,"tid":3,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632201000,"dur":1000},{"pid":1,"tid":3,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632202000,"dur":28000},{"pid":1,"tid":3,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632231000,"dur":8000},{"pid":1,"tid":3,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632239000,"dur":100},{"pid":1,"tid":3,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427632171000,"dur":68000},{"pid":1,"tid":3,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632239000,"dur":2000},{"pid":1,"tid":3,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632241000,"dur":5000},{"pid":1,"tid":3,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632167000,"dur":80000},{"pid":1,"tid":3,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632247000,"dur":3000},{"pid":1,"tid":3,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427632164000,"dur":86000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427632321000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632322000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632323000,"dur":39000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632363000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632368000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632372000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632373000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632374000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632376000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632377000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632378000,"dur":41000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632421000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427632422000,"dur":39000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632461000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427632464000,"dur":520000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427632985000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427632986000,"dur":19000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633006000,"dur":12000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633019000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633021000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633022000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633023000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633029000,"dur":128000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633158000,"dur":6000},{"pid":1,"tid":4,"id":54,"name":"transform prep: extract jars","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 2\nis_incremental: false\n"},"ph":"X","ts":1518427633169000,"dur":100},{"pid":1,"tid":4,"id":55,"name":"transform: extract jars","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 2\nis_incremental: false\n"},"ph":"X","ts":1518427633169000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633165000,"dur":6000},{"pid":1,"tid":5,"id":57,"name":"transform prep: instant run verifier","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: false\n"},"ph":"X","ts":1518427633178000,"dur":1000},{"pid":1,"tid":5,"id":58,"name":"transform: instant run verifier","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: false\n"},"ph":"X","ts":1518427633179000,"dur":122000},{"pid":1,"tid":0,"id":56,"name":"task: transform","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633172000,"dur":167000},{"pid":1,"tid":5,"id":60,"name":"transform prep: no changes verifier","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: false\n"},"ph":"X","ts":1518427633357000,"dur":2000},{"pid":1,"tid":5,"id":61,"name":"transform: no changes verifier","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: false\n"},"ph":"X","ts":1518427633359000,"dur":100},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633340000,"dur":19000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633360000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633361000,"dur":45000},{"pid":1,"tid":0,"id":64,"name":"task: merge source set folders","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633407000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633409000,"dur":9000},{"pid":1,"tid":0,"id":66,"name":"task: unknown task type","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633419000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427633421000,"dur":9000},{"pid":1,"tid":5,"id":69,"name":"transform prep: no changes verifier","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: false\n"},"ph":"X","ts":1518427633432000,"dur":1000},{"pid":1,"tid":5,"id":70,"name":"transform: no changes verifier","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: false\n"},"ph":"X","ts":1518427633433000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633430000,"dur":5000},{"pid":1,"tid":5,"id":72,"name":"transform prep: instant run","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: false\n"},"ph":"X","ts":1518427633594000,"dur":4000},{"pid":1,"tid":5,"id":73,"name":"transform: instant run","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: false\n"},"ph":"X","ts":1518427633598000,"dur":155000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633436000,"dur":395000},{"pid":1,"tid":5,"id":75,"name":"transform prep: instant run dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518427633839000,"dur":100},{"pid":1,"tid":5,"id":76,"name":"transform: instant run dex","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518427633839000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633835000,"dur":5000},{"pid":1,"tid":0,"id":77,"name":"task: unknown task type","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633840000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: pre cold swap","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633841000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: fast deploy runtime extractor","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633843000,"dur":13000},{"pid":1,"tid":0,"id":80,"name":"task: generate instant run app info","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633858000,"dur":14000},{"pid":1,"tid":5,"id":82,"name":"transform prep: instant run slicer","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: false\n"},"ph":"X","ts":1518427633881000,"dur":1000},{"pid":1,"tid":5,"id":83,"name":"transform: instant run slicer","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: false\n"},"ph":"X","ts":1518427633882000,"dur":256000},{"pid":1,"tid":0,"id":81,"name":"task: transform","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427633873000,"dur":358000},{"pid":1,"tid":5,"id":85,"name":"transform prep: dex archive builder","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518427634260000,"dur":1000},{"pid":1,"tid":5,"id":86,"name":"transform: dex archive builder","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518427634261000,"dur":735000},{"pid":1,"tid":0,"id":84,"name":"task: transform","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427634235000,"dur":849000},{"pid":1,"tid":5,"id":88,"name":"transform prep: external libs merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518427635098000,"dur":2000},{"pid":1,"tid":5,"id":89,"name":"transform: external libs merger","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518427635100000,"dur":438000},{"pid":1,"tid":0,"id":87,"name":"task: transform","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427635085000,"dur":462000},{"pid":1,"tid":5,"id":91,"name":"transform prep: dex merger","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518427635559000,"dur":2000},{"pid":1,"tid":5,"id":92,"name":"transform: dex merger","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518427635561000,"dur":73000},{"pid":1,"tid":0,"id":90,"name":"task: transform","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427635549000,"dur":104000},{"pid":1,"tid":0,"id":93,"name":"task: validate signing","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427635653000,"dur":2000},{"pid":1,"tid":5,"id":95,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1518427635658000,"dur":1000},{"pid":1,"tid":5,"id":96,"name":"transform: instant run dependencies apk builder","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1518427635659000,"dur":229000},{"pid":1,"tid":0,"id":94,"name":"task: transform","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427635656000,"dur":234000},{"pid":1,"tid":5,"id":98,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1518427635895000,"dur":2000},{"pid":1,"tid":5,"id":99,"name":"transform: instant run slice split apk builder","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1518427635897000,"dur":538000},{"pid":1,"tid":0,"id":97,"name":"task: transform","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427635891000,"dur":546000},{"pid":1,"tid":0,"id":100,"name":"task: transform","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427636438000,"dur":3000},{"pid":1,"tid":0,"id":101,"name":"task: package application","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427636442000,"dur":250000},{"pid":1,"tid":0,"id":102,"name":"task: build info writer","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427636693000,"dur":15000},{"pid":1,"tid":0,"id":103,"name":"task: unknown task type","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427636709000,"dur":100},{"pid":1,"tid":0,"id":104,"name":"task: unknown task type","args":{"span_id":"104","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427636709000,"dur":100},{"pid":1,"tid":3,"id":105,"name":"base plugin build finished","args":{"span_id":"105","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 78938\n apk_size: 1854044\n resources_ap_size: 356434\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427636759000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-27-16-765.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-27-16-765.rawproto
new file mode 100644
index 00000000..5ddebf4a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-27-16-765.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-29-25-101.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-29-25-101.json
new file mode 100644
index 00000000..4445ab8d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-29-25-101.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764620000,"args":{"JVM stats":"heap_memory_usage: 532324784\nnon_heap_memory_usage: 151631160\nloaded_class_count: 16139\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764712000,"args":{"JVM stats":"heap_memory_usage: 544174776\nnon_heap_memory_usage: 151810616\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764713000,"args":{"JVM stats":"heap_memory_usage: 544174776\nnon_heap_memory_usage: 151810616\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764786000,"args":{"JVM stats":"heap_memory_usage: 135003440\nnon_heap_memory_usage: 151930840\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 22\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764792000,"args":{"JVM stats":"heap_memory_usage: 135235232\nnon_heap_memory_usage: 151932376\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764797000,"args":{"JVM stats":"heap_memory_usage: 135700224\nnon_heap_memory_usage: 151951864\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764799000,"args":{"JVM stats":"heap_memory_usage: 135700224\nnon_heap_memory_usage: 151955736\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764802000,"args":{"JVM stats":"heap_memory_usage: 135700224\nnon_heap_memory_usage: 151957336\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764803000,"args":{"JVM stats":"heap_memory_usage: 135831392\nnon_heap_memory_usage: 151957368\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764804000,"args":{"JVM stats":"heap_memory_usage: 135831392\nnon_heap_memory_usage: 151962512\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764804001,"args":{"JVM stats":"heap_memory_usage: 135831392\nnon_heap_memory_usage: 151962512\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764842000,"args":{"JVM stats":"heap_memory_usage: 139742904\nnon_heap_memory_usage: 152072304\nloaded_class_count: 16160\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764843000,"args":{"JVM stats":"heap_memory_usage: 139742904\nnon_heap_memory_usage: 152075392\nloaded_class_count: 16161\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764849000,"args":{"JVM stats":"heap_memory_usage: 140107504\nnon_heap_memory_usage: 152129320\nloaded_class_count: 16161\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764850000,"args":{"JVM stats":"heap_memory_usage: 140107504\nnon_heap_memory_usage: 152134576\nloaded_class_count: 16161\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764860000,"args":{"JVM stats":"heap_memory_usage: 141591112\nnon_heap_memory_usage: 152184896\nloaded_class_count: 16161\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764861000,"args":{"JVM stats":"heap_memory_usage: 141591112\nnon_heap_memory_usage: 152200896\nloaded_class_count: 16161\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764876000,"args":{"JVM stats":"heap_memory_usage: 142245200\nnon_heap_memory_usage: 152214736\nloaded_class_count: 16162\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764886000,"args":{"JVM stats":"heap_memory_usage: 142972520\nnon_heap_memory_usage: 152264248\nloaded_class_count: 16165\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764888000,"args":{"JVM stats":"heap_memory_usage: 143103688\nnon_heap_memory_usage: 152275648\nloaded_class_count: 16165\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764889000,"args":{"JVM stats":"heap_memory_usage: 143110248\nnon_heap_memory_usage: 152271928\nloaded_class_count: 16166\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764889001,"args":{"JVM stats":"heap_memory_usage: 143110248\nnon_heap_memory_usage: 152289464\nloaded_class_count: 16166\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764893000,"args":{"JVM stats":"heap_memory_usage: 143575808\nnon_heap_memory_usage: 152319992\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764897000,"args":{"JVM stats":"heap_memory_usage: 143575808\nnon_heap_memory_usage: 152324624\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764902000,"args":{"JVM stats":"heap_memory_usage: 143575808\nnon_heap_memory_usage: 152324720\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764903000,"args":{"JVM stats":"heap_memory_usage: 143575808\nnon_heap_memory_usage: 152325488\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764910000,"args":{"JVM stats":"heap_memory_usage: 144272016\nnon_heap_memory_usage: 152331008\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764924000,"args":{"JVM stats":"heap_memory_usage: 145389872\nnon_heap_memory_usage: 152357128\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764925000,"args":{"JVM stats":"heap_memory_usage: 145389872\nnon_heap_memory_usage: 152358088\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764971000,"args":{"JVM stats":"heap_memory_usage: 146355464\nnon_heap_memory_usage: 152380440\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764973000,"args":{"JVM stats":"heap_memory_usage: 146355464\nnon_heap_memory_usage: 152352392\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764981000,"args":{"JVM stats":"heap_memory_usage: 147253264\nnon_heap_memory_usage: 152386360\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764982000,"args":{"JVM stats":"heap_memory_usage: 147253264\nnon_heap_memory_usage: 152375800\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764990000,"args":{"JVM stats":"heap_memory_usage: 148152808\nnon_heap_memory_usage: 152379400\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427764991000,"args":{"JVM stats":"heap_memory_usage: 148152808\nnon_heap_memory_usage: 152381296\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765009000,"args":{"JVM stats":"heap_memory_usage: 149352952\nnon_heap_memory_usage: 152402416\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765011000,"args":{"JVM stats":"heap_memory_usage: 150149824\nnon_heap_memory_usage: 152404824\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765012000,"args":{"JVM stats":"heap_memory_usage: 150166224\nnon_heap_memory_usage: 152408928\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765013000,"args":{"JVM stats":"heap_memory_usage: 150266472\nnon_heap_memory_usage: 152409760\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765014000,"args":{"JVM stats":"heap_memory_usage: 150466984\nnon_heap_memory_usage: 152409760\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765016000,"args":{"JVM stats":"heap_memory_usage: 150466984\nnon_heap_memory_usage: 152409760\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765027000,"args":{"JVM stats":"heap_memory_usage: 151169480\nnon_heap_memory_usage: 152417872\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765043000,"args":{"JVM stats":"heap_memory_usage: 152580368\nnon_heap_memory_usage: 152427976\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765050000,"args":{"JVM stats":"heap_memory_usage: 152982056\nnon_heap_memory_usage: 152428408\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765059000,"args":{"JVM stats":"heap_memory_usage: 153583952\nnon_heap_memory_usage: 152438288\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765060000,"args":{"JVM stats":"heap_memory_usage: 153583952\nnon_heap_memory_usage: 152438288\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765063000,"args":{"JVM stats":"heap_memory_usage: 153784544\nnon_heap_memory_usage: 152438744\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765066000,"args":{"JVM stats":"heap_memory_usage: 153893056\nnon_heap_memory_usage: 152446552\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765068000,"args":{"JVM stats":"heap_memory_usage: 153993344\nnon_heap_memory_usage: 152458536\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765088000,"args":{"JVM stats":"heap_memory_usage: 154599464\nnon_heap_memory_usage: 152500560\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765090000,"args":{"JVM stats":"heap_memory_usage: 154800136\nnon_heap_memory_usage: 152509992\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765091000,"args":{"JVM stats":"heap_memory_usage: 154800136\nnon_heap_memory_usage: 152512808\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765091001,"args":{"JVM stats":"heap_memory_usage: 154800136\nnon_heap_memory_usage: 152527816\nloaded_class_count: 16168\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518427765101000,"args":{"JVM stats":"heap_memory_usage: 155596624\nnon_heap_memory_usage: 152552912\nloaded_class_count: 16169\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":6,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764620000,"dur":3000},{"pid":1,"tid":6,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764623000,"dur":3000},{"pid":1,"tid":6,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764626000,"dur":1000},{"pid":1,"tid":6,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764626000,"dur":1000},{"pid":1,"tid":6,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764631000,"dur":3000},{"pid":1,"tid":6,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764634000,"dur":100},{"pid":1,"tid":6,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764636000,"dur":1000},{"pid":1,"tid":6,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764637000,"dur":100},{"pid":1,"tid":6,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764638000,"dur":100},{"pid":1,"tid":6,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764638000,"dur":100},{"pid":1,"tid":6,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764638000,"dur":100},{"pid":1,"tid":6,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764638000,"dur":100},{"pid":1,"tid":6,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764638000,"dur":3000},{"pid":1,"tid":6,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764641000,"dur":100},{"pid":1,"tid":6,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764641000,"dur":100},{"pid":1,"tid":6,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764641000,"dur":100},{"pid":1,"tid":6,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764641000,"dur":27000},{"pid":1,"tid":6,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764668000,"dur":1000},{"pid":1,"tid":6,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764669000,"dur":4000},{"pid":1,"tid":6,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764675000,"dur":3000},{"pid":1,"tid":6,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764678000,"dur":100},{"pid":1,"tid":6,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518427764634000,"dur":44000},{"pid":1,"tid":6,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764678000,"dur":5000},{"pid":1,"tid":6,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764683000,"dur":7000},{"pid":1,"tid":6,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764631000,"dur":60000},{"pid":1,"tid":6,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764692000,"dur":1000},{"pid":1,"tid":6,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427764629000,"dur":64000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427764709000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764713000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764714000,"dur":72000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764786000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764793000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764798000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764800000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764802000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764803000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764804000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764805000,"dur":37000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764842000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764844000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764849000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764851000,"dur":9000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427764861000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764861000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764877000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764887000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764888000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764889000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764890000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764894000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427764897000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764902000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764904000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764910000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764924000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427764925000,"dur":46000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764971000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764974000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427764982000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764983000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764990000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427764992000,"dur":16000},{"pid":1,"tid":6,"id":65,"name":"transform prep: instant run dex","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518427765010000,"dur":1000},{"pid":1,"tid":6,"id":66,"name":"transform: instant run dex","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518427765011000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427765009000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427765012000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: pre cold swap","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427765012000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: fast deploy runtime extractor","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765013000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: generate instant run app info","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765014000,"dur":2000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765016000,"dur":11000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765027000,"dur":16000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765043000,"dur":7000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765051000,"dur":8000},{"pid":1,"tid":0,"id":75,"name":"task: validate signing","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427765060000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765061000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765063000,"dur":3000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765066000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: package application","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518427765069000,"dur":19000},{"pid":1,"tid":0,"id":80,"name":"task: build info writer","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427765088000,"dur":2000},{"pid":1,"tid":0,"id":81,"name":"task: unknown task type","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427765091000,"dur":100},{"pid":1,"tid":0,"id":82,"name":"task: unknown task type","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518427765091000,"dur":100},{"pid":1,"tid":6,"id":83,"name":"base plugin build finished","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518427765096000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-29-25-101.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-29-25-101.rawproto
new file mode 100644
index 00000000..5fa96c0a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-29-25-101.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-34-51-488.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-34-51-488.json
new file mode 100644
index 00000000..7c5e226b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-34-51-488.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089615000,"args":{"JVM stats":"heap_memory_usage: 337076000\nnon_heap_memory_usage: 155468376\nloaded_class_count: 16304\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089729000,"args":{"JVM stats":"heap_memory_usage: 349002680\nnon_heap_memory_usage: 155748304\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089730000,"args":{"JVM stats":"heap_memory_usage: 349002680\nnon_heap_memory_usage: 155748304\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089810000,"args":{"JVM stats":"heap_memory_usage: 356151168\nnon_heap_memory_usage: 155784848\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089814000,"args":{"JVM stats":"heap_memory_usage: 356367632\nnon_heap_memory_usage: 155785936\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089818000,"args":{"JVM stats":"heap_memory_usage: 356367632\nnon_heap_memory_usage: 155788688\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089821000,"args":{"JVM stats":"heap_memory_usage: 356367632\nnon_heap_memory_usage: 155794768\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089823000,"args":{"JVM stats":"heap_memory_usage: 356367632\nnon_heap_memory_usage: 155799632\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089824000,"args":{"JVM stats":"heap_memory_usage: 356367632\nnon_heap_memory_usage: 155800464\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089826000,"args":{"JVM stats":"heap_memory_usage: 356367632\nnon_heap_memory_usage: 155800464\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428089827000,"args":{"JVM stats":"heap_memory_usage: 356367632\nnon_heap_memory_usage: 155800464\nloaded_class_count: 16328\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090195000,"args":{"JVM stats":"heap_memory_usage: 396265072\nnon_heap_memory_usage: 156455968\nloaded_class_count: 16339\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090196000,"args":{"JVM stats":"heap_memory_usage: 396461712\nnon_heap_memory_usage: 156455968\nloaded_class_count: 16339\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090202000,"args":{"JVM stats":"heap_memory_usage: 397551696\nnon_heap_memory_usage: 156461136\nloaded_class_count: 16339\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090203000,"args":{"JVM stats":"heap_memory_usage: 397551696\nnon_heap_memory_usage: 156461168\nloaded_class_count: 16339\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090875000,"args":{"JVM stats":"heap_memory_usage: 413892864\nnon_heap_memory_usage: 156679496\nloaded_class_count: 16339\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090876000,"args":{"JVM stats":"heap_memory_usage: 413892864\nnon_heap_memory_usage: 156679496\nloaded_class_count: 16339\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090902000,"args":{"JVM stats":"heap_memory_usage: 414995136\nnon_heap_memory_usage: 156697640\nloaded_class_count: 16339\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090921000,"args":{"JVM stats":"heap_memory_usage: 416509752\nnon_heap_memory_usage: 156713344\nloaded_class_count: 16343\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090925000,"args":{"JVM stats":"heap_memory_usage: 416509752\nnon_heap_memory_usage: 156714544\nloaded_class_count: 16343\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090927000,"args":{"JVM stats":"heap_memory_usage: 416509752\nnon_heap_memory_usage: 156722216\nloaded_class_count: 16343\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090928000,"args":{"JVM stats":"heap_memory_usage: 416509752\nnon_heap_memory_usage: 156726056\nloaded_class_count: 16343\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428090932000,"args":{"JVM stats":"heap_memory_usage: 416726112\nnon_heap_memory_usage: 156728616\nloaded_class_count: 16343\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091005000,"args":{"JVM stats":"heap_memory_usage: 427445968\nnon_heap_memory_usage: 157029184\nloaded_class_count: 16356\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091010000,"args":{"JVM stats":"heap_memory_usage: 427662304\nnon_heap_memory_usage: 157031552\nloaded_class_count: 16356\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091012000,"args":{"JVM stats":"heap_memory_usage: 427878672\nnon_heap_memory_usage: 157031552\nloaded_class_count: 16356\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091027000,"args":{"JVM stats":"heap_memory_usage: 428311832\nnon_heap_memory_usage: 157040448\nloaded_class_count: 16356\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091042000,"args":{"JVM stats":"heap_memory_usage: 428969088\nnon_heap_memory_usage: 157055944\nloaded_class_count: 16356\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091043000,"args":{"JVM stats":"heap_memory_usage: 428969088\nnon_heap_memory_usage: 157057096\nloaded_class_count: 16356\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091137000,"args":{"JVM stats":"heap_memory_usage: 430053280\nnon_heap_memory_usage: 157110984\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091140000,"args":{"JVM stats":"heap_memory_usage: 430269640\nnon_heap_memory_usage: 157144936\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091147000,"args":{"JVM stats":"heap_memory_usage: 430920760\nnon_heap_memory_usage: 157151272\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091148000,"args":{"JVM stats":"heap_memory_usage: 430920760\nnon_heap_memory_usage: 157119272\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091155000,"args":{"JVM stats":"heap_memory_usage: 431569952\nnon_heap_memory_usage: 157074032\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091157000,"args":{"JVM stats":"heap_memory_usage: 431786320\nnon_heap_memory_usage: 157071216\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091177000,"args":{"JVM stats":"heap_memory_usage: 433517904\nnon_heap_memory_usage: 156892664\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091179000,"args":{"JVM stats":"heap_memory_usage: 433517904\nnon_heap_memory_usage: 156895688\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091182000,"args":{"JVM stats":"heap_memory_usage: 433517904\nnon_heap_memory_usage: 156895688\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091183000,"args":{"JVM stats":"heap_memory_usage: 433735280\nnon_heap_memory_usage: 156898000\nloaded_class_count: 16356\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091186000,"args":{"JVM stats":"heap_memory_usage: 433735280\nnon_heap_memory_usage: 156901464\nloaded_class_count: 16357\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091187000,"args":{"JVM stats":"heap_memory_usage: 433735280\nnon_heap_memory_usage: 156904784\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091203000,"args":{"JVM stats":"heap_memory_usage: 434384784\nnon_heap_memory_usage: 156865144\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091228000,"args":{"JVM stats":"heap_memory_usage: 435467504\nnon_heap_memory_usage: 156869288\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091235000,"args":{"JVM stats":"heap_memory_usage: 435900368\nnon_heap_memory_usage: 156879784\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091244000,"args":{"JVM stats":"heap_memory_usage: 436550072\nnon_heap_memory_usage: 156879784\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091245000,"args":{"JVM stats":"heap_memory_usage: 436550072\nnon_heap_memory_usage: 156879784\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091247000,"args":{"JVM stats":"heap_memory_usage: 436766432\nnon_heap_memory_usage: 156879784\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091249000,"args":{"JVM stats":"heap_memory_usage: 436982800\nnon_heap_memory_usage: 156881184\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091251000,"args":{"JVM stats":"heap_memory_usage: 436982800\nnon_heap_memory_usage: 156898568\nloaded_class_count: 16358\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091466000,"args":{"JVM stats":"heap_memory_usage: 471306016\nnon_heap_memory_usage: 157032880\nloaded_class_count: 16387\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091468000,"args":{"JVM stats":"heap_memory_usage: 471751024\nnon_heap_memory_usage: 157049048\nloaded_class_count: 16387\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091469000,"args":{"JVM stats":"heap_memory_usage: 471751024\nnon_heap_memory_usage: 157051192\nloaded_class_count: 16387\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091470000,"args":{"JVM stats":"heap_memory_usage: 471751024\nnon_heap_memory_usage: 157056064\nloaded_class_count: 16387\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428091489000,"args":{"JVM stats":"heap_memory_usage: 472833176\nnon_heap_memory_usage: 157084040\nloaded_class_count: 16387\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":8,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089615000,"dur":7000},{"pid":1,"tid":8,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089622000,"dur":4000},{"pid":1,"tid":8,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089626000,"dur":1000},{"pid":1,"tid":8,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089626000,"dur":1000},{"pid":1,"tid":8,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089631000,"dur":3000},{"pid":1,"tid":8,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089634000,"dur":100},{"pid":1,"tid":8,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089635000,"dur":100},{"pid":1,"tid":8,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089635000,"dur":100},{"pid":1,"tid":8,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089635000,"dur":100},{"pid":1,"tid":8,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089635000,"dur":1000},{"pid":1,"tid":8,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089636000,"dur":100},{"pid":1,"tid":8,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089636000,"dur":100},{"pid":1,"tid":8,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089636000,"dur":3000},{"pid":1,"tid":8,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089639000,"dur":1000},{"pid":1,"tid":8,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089640000,"dur":100},{"pid":1,"tid":8,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089640000,"dur":100},{"pid":1,"tid":8,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089640000,"dur":28000},{"pid":1,"tid":8,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089668000,"dur":100},{"pid":1,"tid":8,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089668000,"dur":9000},{"pid":1,"tid":8,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089678000,"dur":3000},{"pid":1,"tid":8,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089681000,"dur":100},{"pid":1,"tid":8,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428089634000,"dur":47000},{"pid":1,"tid":8,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089681000,"dur":4000},{"pid":1,"tid":8,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089685000,"dur":9000},{"pid":1,"tid":8,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089631000,"dur":64000},{"pid":1,"tid":8,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089695000,"dur":3000},{"pid":1,"tid":8,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428089629000,"dur":69000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428089727000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089730000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089731000,"dur":79000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089810000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089815000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089819000,"dur":2000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089821000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089823000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089825000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428089826000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428089828000,"dur":367000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090196000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090198000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090203000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428090204000,"dur":671000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428090875000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090876000,"dur":26000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090903000,"dur":18000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090922000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090926000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090928000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428090928000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428090933000,"dur":72000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091005000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091011000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091012000,"dur":15000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091027000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091042000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091043000,"dur":94000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091138000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091140000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091147000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091148000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091155000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091157000,"dur":19000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091178000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091181000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091182000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091184000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091186000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091188000,"dur":15000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091204000,"dur":24000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091228000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091235000,"dur":9000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091244000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091246000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091248000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428091250000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091252000,"dur":214000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091467000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091469000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428091470000,"dur":100},{"pid":1,"tid":8,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428091479000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-34-51-488.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-34-51-488.rawproto
new file mode 100644
index 00000000..964d3b3f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-34-51-488.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-35-50-765.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-35-50-765.json
new file mode 100644
index 00000000..31158eb5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-35-50-765.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149090000,"args":{"JVM stats":"heap_memory_usage: 527659136\nnon_heap_memory_usage: 157510112\nloaded_class_count: 16394\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149179000,"args":{"JVM stats":"heap_memory_usage: 539136696\nnon_heap_memory_usage: 157751080\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149179001,"args":{"JVM stats":"heap_memory_usage: 539136696\nnon_heap_memory_usage: 157751080\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149247000,"args":{"JVM stats":"heap_memory_usage: 135749368\nnon_heap_memory_usage: 157838288\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 22\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149252000,"args":{"JVM stats":"heap_memory_usage: 136092776\nnon_heap_memory_usage: 157838288\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149256000,"args":{"JVM stats":"heap_memory_usage: 136421464\nnon_heap_memory_usage: 157873200\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149257000,"args":{"JVM stats":"heap_memory_usage: 136540888\nnon_heap_memory_usage: 157875376\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149260000,"args":{"JVM stats":"heap_memory_usage: 136540888\nnon_heap_memory_usage: 157895752\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149262000,"args":{"JVM stats":"heap_memory_usage: 136540888\nnon_heap_memory_usage: 157903080\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149263000,"args":{"JVM stats":"heap_memory_usage: 136660344\nnon_heap_memory_usage: 157903080\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149264000,"args":{"JVM stats":"heap_memory_usage: 136660344\nnon_heap_memory_usage: 157904320\nloaded_class_count: 16407\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149459000,"args":{"JVM stats":"heap_memory_usage: 172945544\nnon_heap_memory_usage: 158192520\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149460000,"args":{"JVM stats":"heap_memory_usage: 173263024\nnon_heap_memory_usage: 158192520\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149465000,"args":{"JVM stats":"heap_memory_usage: 174373664\nnon_heap_memory_usage: 158201648\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428149466000,"args":{"JVM stats":"heap_memory_usage: 174373664\nnon_heap_memory_usage: 158206992\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150206000,"args":{"JVM stats":"heap_memory_usage: 190396664\nnon_heap_memory_usage: 158569912\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150207000,"args":{"JVM stats":"heap_memory_usage: 190566688\nnon_heap_memory_usage: 158576288\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150226000,"args":{"JVM stats":"heap_memory_usage: 191360760\nnon_heap_memory_usage: 158534968\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150245000,"args":{"JVM stats":"heap_memory_usage: 191943128\nnon_heap_memory_usage: 158468176\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150248000,"args":{"JVM stats":"heap_memory_usage: 191943128\nnon_heap_memory_usage: 158468176\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150250000,"args":{"JVM stats":"heap_memory_usage: 192062568\nnon_heap_memory_usage: 158468176\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150250001,"args":{"JVM stats":"heap_memory_usage: 192062568\nnon_heap_memory_usage: 158468176\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150254000,"args":{"JVM stats":"heap_memory_usage: 192286496\nnon_heap_memory_usage: 158470104\nloaded_class_count: 16407\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150320000,"args":{"JVM stats":"heap_memory_usage: 201177544\nnon_heap_memory_usage: 158478696\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150327000,"args":{"JVM stats":"heap_memory_usage: 201638664\nnon_heap_memory_usage: 158531064\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150329000,"args":{"JVM stats":"heap_memory_usage: 201758120\nnon_heap_memory_usage: 158531064\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150339000,"args":{"JVM stats":"heap_memory_usage: 202355656\nnon_heap_memory_usage: 158533240\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150362000,"args":{"JVM stats":"heap_memory_usage: 203353600\nnon_heap_memory_usage: 158534136\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150363000,"args":{"JVM stats":"heap_memory_usage: 203353600\nnon_heap_memory_usage: 158537288\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150432000,"args":{"JVM stats":"heap_memory_usage: 204406808\nnon_heap_memory_usage: 158576392\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150434000,"args":{"JVM stats":"heap_memory_usage: 204526272\nnon_heap_memory_usage: 158576392\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150445000,"args":{"JVM stats":"heap_memory_usage: 205108816\nnon_heap_memory_usage: 158576392\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150448000,"args":{"JVM stats":"heap_memory_usage: 205228240\nnon_heap_memory_usage: 158576392\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150455000,"args":{"JVM stats":"heap_memory_usage: 205963952\nnon_heap_memory_usage: 158592976\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150456000,"args":{"JVM stats":"heap_memory_usage: 206068496\nnon_heap_memory_usage: 158592976\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150471000,"args":{"JVM stats":"heap_memory_usage: 207741640\nnon_heap_memory_usage: 158594320\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150473000,"args":{"JVM stats":"heap_memory_usage: 207846264\nnon_heap_memory_usage: 158597728\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150473001,"args":{"JVM stats":"heap_memory_usage: 207846264\nnon_heap_memory_usage: 158597728\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150475000,"args":{"JVM stats":"heap_memory_usage: 207950728\nnon_heap_memory_usage: 158604344\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150477000,"args":{"JVM stats":"heap_memory_usage: 207950728\nnon_heap_memory_usage: 158614576\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150478000,"args":{"JVM stats":"heap_memory_usage: 208055616\nnon_heap_memory_usage: 158614608\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150492000,"args":{"JVM stats":"heap_memory_usage: 208787256\nnon_heap_memory_usage: 158618680\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150512000,"args":{"JVM stats":"heap_memory_usage: 209936624\nnon_heap_memory_usage: 158618680\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150519000,"args":{"JVM stats":"heap_memory_usage: 210354800\nnon_heap_memory_usage: 158624368\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150530000,"args":{"JVM stats":"heap_memory_usage: 210877384\nnon_heap_memory_usage: 158628784\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150532000,"args":{"JVM stats":"heap_memory_usage: 210981928\nnon_heap_memory_usage: 158628784\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150535000,"args":{"JVM stats":"heap_memory_usage: 211086496\nnon_heap_memory_usage: 158628784\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150538000,"args":{"JVM stats":"heap_memory_usage: 211191208\nnon_heap_memory_usage: 158628784\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150540000,"args":{"JVM stats":"heap_memory_usage: 211295680\nnon_heap_memory_usage: 158628784\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150750000,"args":{"JVM stats":"heap_memory_usage: 244710208\nnon_heap_memory_usage: 158859464\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150752000,"args":{"JVM stats":"heap_memory_usage: 244948208\nnon_heap_memory_usage: 158877720\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150753000,"args":{"JVM stats":"heap_memory_usage: 244948208\nnon_heap_memory_usage: 158877720\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150753001,"args":{"JVM stats":"heap_memory_usage: 244948208\nnon_heap_memory_usage: 158877720\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428150766000,"args":{"JVM stats":"heap_memory_usage: 245052704\nnon_heap_memory_usage: 158885784\nloaded_class_count: 16432\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":8,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149090000,"dur":3000},{"pid":1,"tid":8,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149093000,"dur":3000},{"pid":1,"tid":8,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149096000,"dur":1000},{"pid":1,"tid":8,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149096000,"dur":1000},{"pid":1,"tid":8,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149101000,"dur":3000},{"pid":1,"tid":8,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149104000,"dur":1000},{"pid":1,"tid":8,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149106000,"dur":100},{"pid":1,"tid":8,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149106000,"dur":100},{"pid":1,"tid":8,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149106000,"dur":1000},{"pid":1,"tid":8,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149107000,"dur":100},{"pid":1,"tid":8,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149107000,"dur":1000},{"pid":1,"tid":8,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149108000,"dur":100},{"pid":1,"tid":8,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149108000,"dur":2000},{"pid":1,"tid":8,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149110000,"dur":100},{"pid":1,"tid":8,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149110000,"dur":100},{"pid":1,"tid":8,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149110000,"dur":100},{"pid":1,"tid":8,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149110000,"dur":24000},{"pid":1,"tid":8,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149134000,"dur":1000},{"pid":1,"tid":8,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149135000,"dur":5000},{"pid":1,"tid":8,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149141000,"dur":2000},{"pid":1,"tid":8,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149143000,"dur":100},{"pid":1,"tid":8,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428149105000,"dur":38000},{"pid":1,"tid":8,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149143000,"dur":3000},{"pid":1,"tid":8,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149147000,"dur":7000},{"pid":1,"tid":8,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149100000,"dur":55000},{"pid":1,"tid":8,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149155000,"dur":3000},{"pid":1,"tid":8,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428149099000,"dur":59000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428149176000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149179000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149180000,"dur":67000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149248000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149253000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149257000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149258000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149260000,"dur":2000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149262000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149263000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428149264000,"dur":195000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149459000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149461000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428149465000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428149468000,"dur":738000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150207000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150208000,"dur":18000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150227000,"dur":18000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150247000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150249000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150250000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150251000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150254000,"dur":66000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150321000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150327000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150329000,"dur":10000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150340000,"dur":22000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150362000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150364000,"dur":67000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150433000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150436000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150447000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150448000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150456000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150457000,"dur":14000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150472000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150473000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150474000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150476000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150477000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150478000,"dur":14000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150492000,"dur":20000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150512000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150520000,"dur":10000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150531000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150533000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150535000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428150538000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150541000,"dur":209000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150750000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150752000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428150753000,"dur":100},{"pid":1,"tid":8,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428150758000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-35-50-765.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-35-50-765.rawproto
new file mode 100644
index 00000000..5ccabf62
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-35-50-765.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-36-41-366.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-36-41-366.json
new file mode 100644
index 00000000..60d32633
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-36-41-366.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428199922000,"args":{"JVM stats":"heap_memory_usage: 301951728\nnon_heap_memory_usage: 158873952\nloaded_class_count: 16439\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200018000,"args":{"JVM stats":"heap_memory_usage: 312890104\nnon_heap_memory_usage: 159100464\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200019000,"args":{"JVM stats":"heap_memory_usage: 312890104\nnon_heap_memory_usage: 159100464\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200069000,"args":{"JVM stats":"heap_memory_usage: 320036200\nnon_heap_memory_usage: 159056752\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200073000,"args":{"JVM stats":"heap_memory_usage: 320239760\nnon_heap_memory_usage: 159063832\nloaded_class_count: 16453\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200081000,"args":{"JVM stats":"heap_memory_usage: 320443320\nnon_heap_memory_usage: 159099592\nloaded_class_count: 16464\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200083000,"args":{"JVM stats":"heap_memory_usage: 320443320\nnon_heap_memory_usage: 159122632\nloaded_class_count: 16464\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200085000,"args":{"JVM stats":"heap_memory_usage: 320646992\nnon_heap_memory_usage: 159150736\nloaded_class_count: 16473\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200086000,"args":{"JVM stats":"heap_memory_usage: 320646992\nnon_heap_memory_usage: 159152640\nloaded_class_count: 16473\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200087000,"args":{"JVM stats":"heap_memory_usage: 320646992\nnon_heap_memory_usage: 159158440\nloaded_class_count: 16474\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200088000,"args":{"JVM stats":"heap_memory_usage: 320646992\nnon_heap_memory_usage: 159165864\nloaded_class_count: 16474\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200281000,"args":{"JVM stats":"heap_memory_usage: 356269752\nnon_heap_memory_usage: 159374400\nloaded_class_count: 16484\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200282000,"args":{"JVM stats":"heap_memory_usage: 356466392\nnon_heap_memory_usage: 159375168\nloaded_class_count: 16484\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200287000,"args":{"JVM stats":"heap_memory_usage: 357493368\nnon_heap_memory_usage: 159355544\nloaded_class_count: 16484\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200289000,"args":{"JVM stats":"heap_memory_usage: 357696896\nnon_heap_memory_usage: 159364952\nloaded_class_count: 16491\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200900000,"args":{"JVM stats":"heap_memory_usage: 373730552\nnon_heap_memory_usage: 159568688\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200901000,"args":{"JVM stats":"heap_memory_usage: 373730552\nnon_heap_memory_usage: 159568688\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200916000,"args":{"JVM stats":"heap_memory_usage: 374552912\nnon_heap_memory_usage: 159573096\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200925000,"args":{"JVM stats":"heap_memory_usage: 375979328\nnon_heap_memory_usage: 159573960\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200928000,"args":{"JVM stats":"heap_memory_usage: 375979328\nnon_heap_memory_usage: 159573960\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200930000,"args":{"JVM stats":"heap_memory_usage: 376182880\nnon_heap_memory_usage: 159578976\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200931000,"args":{"JVM stats":"heap_memory_usage: 376182880\nnon_heap_memory_usage: 159578976\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200935000,"args":{"JVM stats":"heap_memory_usage: 376182880\nnon_heap_memory_usage: 159581664\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200992000,"args":{"JVM stats":"heap_memory_usage: 385065968\nnon_heap_memory_usage: 159602656\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428200998000,"args":{"JVM stats":"heap_memory_usage: 385477136\nnon_heap_memory_usage: 159602656\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201000000,"args":{"JVM stats":"heap_memory_usage: 385477136\nnon_heap_memory_usage: 159602656\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201007000,"args":{"JVM stats":"heap_memory_usage: 386088368\nnon_heap_memory_usage: 159613360\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201021000,"args":{"JVM stats":"heap_memory_usage: 386911296\nnon_heap_memory_usage: 159615472\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201022000,"args":{"JVM stats":"heap_memory_usage: 386911296\nnon_heap_memory_usage: 159616208\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201077000,"args":{"JVM stats":"heap_memory_usage: 387934808\nnon_heap_memory_usage: 159643600\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201079000,"args":{"JVM stats":"heap_memory_usage: 388138336\nnon_heap_memory_usage: 159643600\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201087000,"args":{"JVM stats":"heap_memory_usage: 388749864\nnon_heap_memory_usage: 159650776\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201088000,"args":{"JVM stats":"heap_memory_usage: 388953584\nnon_heap_memory_usage: 159650776\nloaded_class_count: 16517\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201097000,"args":{"JVM stats":"heap_memory_usage: 389360976\nnon_heap_memory_usage: 159666112\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201100000,"args":{"JVM stats":"heap_memory_usage: 389564528\nnon_heap_memory_usage: 159676784\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201120000,"args":{"JVM stats":"heap_memory_usage: 390582712\nnon_heap_memory_usage: 159741976\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201121000,"args":{"JVM stats":"heap_memory_usage: 390787280\nnon_heap_memory_usage: 159745200\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201122000,"args":{"JVM stats":"heap_memory_usage: 390787280\nnon_heap_memory_usage: 159745200\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201123000,"args":{"JVM stats":"heap_memory_usage: 390787280\nnon_heap_memory_usage: 159761512\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201124000,"args":{"JVM stats":"heap_memory_usage: 390787280\nnon_heap_memory_usage: 159771016\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201125000,"args":{"JVM stats":"heap_memory_usage: 390787280\nnon_heap_memory_usage: 159774152\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201137000,"args":{"JVM stats":"heap_memory_usage: 391601520\nnon_heap_memory_usage: 159798728\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201156000,"args":{"JVM stats":"heap_memory_usage: 393230216\nnon_heap_memory_usage: 159795400\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201165000,"args":{"JVM stats":"heap_memory_usage: 393637664\nnon_heap_memory_usage: 159796040\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201175000,"args":{"JVM stats":"heap_memory_usage: 394248864\nnon_heap_memory_usage: 159818888\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201176000,"args":{"JVM stats":"heap_memory_usage: 394248864\nnon_heap_memory_usage: 159818888\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201178000,"args":{"JVM stats":"heap_memory_usage: 394248864\nnon_heap_memory_usage: 159818888\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201181000,"args":{"JVM stats":"heap_memory_usage: 394452424\nnon_heap_memory_usage: 159818888\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201183000,"args":{"JVM stats":"heap_memory_usage: 394655976\nnon_heap_memory_usage: 159823632\nloaded_class_count: 16517\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201352000,"args":{"JVM stats":"heap_memory_usage: 426167968\nnon_heap_memory_usage: 159951728\nloaded_class_count: 16519\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201353000,"args":{"JVM stats":"heap_memory_usage: 426386800\nnon_heap_memory_usage: 159956776\nloaded_class_count: 16519\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201354000,"args":{"JVM stats":"heap_memory_usage: 426386800\nnon_heap_memory_usage: 159963240\nloaded_class_count: 16519\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201354001,"args":{"JVM stats":"heap_memory_usage: 426386800\nnon_heap_memory_usage: 159965016\nloaded_class_count: 16519\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428201366000,"args":{"JVM stats":"heap_memory_usage: 427658664\nnon_heap_memory_usage: 160006328\nloaded_class_count: 16519\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":8,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199922000,"dur":3000},{"pid":1,"tid":8,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199925000,"dur":5000},{"pid":1,"tid":8,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199930000,"dur":100},{"pid":1,"tid":8,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199930000,"dur":1000},{"pid":1,"tid":8,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199934000,"dur":2000},{"pid":1,"tid":8,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199936000,"dur":100},{"pid":1,"tid":8,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199937000,"dur":1000},{"pid":1,"tid":8,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199938000,"dur":100},{"pid":1,"tid":8,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199938000,"dur":100},{"pid":1,"tid":8,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199938000,"dur":1000},{"pid":1,"tid":8,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199939000,"dur":100},{"pid":1,"tid":8,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199939000,"dur":100},{"pid":1,"tid":8,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199939000,"dur":2000},{"pid":1,"tid":8,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199941000,"dur":100},{"pid":1,"tid":8,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199941000,"dur":100},{"pid":1,"tid":8,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199941000,"dur":100},{"pid":1,"tid":8,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199941000,"dur":32000},{"pid":1,"tid":8,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199973000,"dur":1000},{"pid":1,"tid":8,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199974000,"dur":8000},{"pid":1,"tid":8,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199984000,"dur":2000},{"pid":1,"tid":8,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199986000,"dur":100},{"pid":1,"tid":8,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428199936000,"dur":50000},{"pid":1,"tid":8,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199986000,"dur":4000},{"pid":1,"tid":8,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199990000,"dur":8000},{"pid":1,"tid":8,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199933000,"dur":66000},{"pid":1,"tid":8,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199999000,"dur":2000},{"pid":1,"tid":8,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428199932000,"dur":69000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428200016000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200018000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200019000,"dur":50000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200069000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200074000,"dur":7000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200082000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200083000,"dur":2000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200085000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200086000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200088000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428200089000,"dur":192000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200281000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200283000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200287000,"dur":2000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428200290000,"dur":610000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428200900000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200901000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200917000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200926000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200928000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200930000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200932000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428200936000,"dur":55000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428200992000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428200999000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201001000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201008000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201022000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428201022000,"dur":55000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201077000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201080000,"dur":6000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428201087000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201089000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201098000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201100000,"dur":20000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201120000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201122000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428201122000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201123000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201124000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201125000,"dur":12000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201137000,"dur":19000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201156000,"dur":9000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201166000,"dur":9000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428201175000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201177000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201179000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428201181000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428201183000,"dur":168000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428201352000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428201354000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428201354000,"dur":100},{"pid":1,"tid":8,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428201359000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-36-41-366.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-36-41-366.rawproto
new file mode 100644
index 00000000..e2687558
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-36-41-366.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-00-577.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-00-577.json
new file mode 100644
index 00000000..cdd57731
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-00-577.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279016000,"args":{"JVM stats":"heap_memory_usage: 483224424\nnon_heap_memory_usage: 160037096\nloaded_class_count: 16528\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279102000,"args":{"JVM stats":"heap_memory_usage: 494654024\nnon_heap_memory_usage: 160148024\nloaded_class_count: 16530\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279103000,"args":{"JVM stats":"heap_memory_usage: 494654024\nnon_heap_memory_usage: 160160056\nloaded_class_count: 16530\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279141000,"args":{"JVM stats":"heap_memory_usage: 501594360\nnon_heap_memory_usage: 160213704\nloaded_class_count: 16530\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279145000,"args":{"JVM stats":"heap_memory_usage: 501798024\nnon_heap_memory_usage: 160213800\nloaded_class_count: 16530\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279151000,"args":{"JVM stats":"heap_memory_usage: 501798024\nnon_heap_memory_usage: 160214856\nloaded_class_count: 16530\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279152000,"args":{"JVM stats":"heap_memory_usage: 502001632\nnon_heap_memory_usage: 160223960\nloaded_class_count: 16533\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279153000,"args":{"JVM stats":"heap_memory_usage: 502001632\nnon_heap_memory_usage: 160224248\nloaded_class_count: 16533\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279154000,"args":{"JVM stats":"heap_memory_usage: 502001632\nnon_heap_memory_usage: 160225368\nloaded_class_count: 16533\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279154001,"args":{"JVM stats":"heap_memory_usage: 502001632\nnon_heap_memory_usage: 160225400\nloaded_class_count: 16533\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279155000,"args":{"JVM stats":"heap_memory_usage: 502001632\nnon_heap_memory_usage: 160225400\nloaded_class_count: 16533\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279353000,"args":{"JVM stats":"heap_memory_usage: 151164544\nnon_heap_memory_usage: 160381256\nloaded_class_count: 16533\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 27\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279358000,"args":{"JVM stats":"heap_memory_usage: 152985336\nnon_heap_memory_usage: 160391224\nloaded_class_count: 16536\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279366000,"args":{"JVM stats":"heap_memory_usage: 154544480\nnon_heap_memory_usage: 160446768\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428279367000,"args":{"JVM stats":"heap_memory_usage: 154544480\nnon_heap_memory_usage: 160436904\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280018000,"args":{"JVM stats":"heap_memory_usage: 169116592\nnon_heap_memory_usage: 160419888\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280018001,"args":{"JVM stats":"heap_memory_usage: 169214928\nnon_heap_memory_usage: 160419888\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280036000,"args":{"JVM stats":"heap_memory_usage: 170332384\nnon_heap_memory_usage: 160419888\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280048000,"args":{"JVM stats":"heap_memory_usage: 171459056\nnon_heap_memory_usage: 160420208\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280050000,"args":{"JVM stats":"heap_memory_usage: 171459056\nnon_heap_memory_usage: 160416048\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280051000,"args":{"JVM stats":"heap_memory_usage: 171459056\nnon_heap_memory_usage: 160416048\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280052000,"args":{"JVM stats":"heap_memory_usage: 171459056\nnon_heap_memory_usage: 160416048\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280057000,"args":{"JVM stats":"heap_memory_usage: 171883424\nnon_heap_memory_usage: 160422192\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280113000,"args":{"JVM stats":"heap_memory_usage: 180111488\nnon_heap_memory_usage: 160458064\nloaded_class_count: 16549\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280118000,"args":{"JVM stats":"heap_memory_usage: 180521016\nnon_heap_memory_usage: 160473040\nloaded_class_count: 16549\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280120000,"args":{"JVM stats":"heap_memory_usage: 180521016\nnon_heap_memory_usage: 160473040\nloaded_class_count: 16549\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280131000,"args":{"JVM stats":"heap_memory_usage: 181144480\nnon_heap_memory_usage: 160499344\nloaded_class_count: 16549\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280152000,"args":{"JVM stats":"heap_memory_usage: 181653016\nnon_heap_memory_usage: 160504528\nloaded_class_count: 16549\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280153000,"args":{"JVM stats":"heap_memory_usage: 181751464\nnon_heap_memory_usage: 160504528\nloaded_class_count: 16549\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280220000,"args":{"JVM stats":"heap_memory_usage: 182646456\nnon_heap_memory_usage: 160573552\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280222000,"args":{"JVM stats":"heap_memory_usage: 182745896\nnon_heap_memory_usage: 160573552\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280231000,"args":{"JVM stats":"heap_memory_usage: 183537416\nnon_heap_memory_usage: 160576120\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280232000,"args":{"JVM stats":"heap_memory_usage: 183537416\nnon_heap_memory_usage: 160576120\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280245000,"args":{"JVM stats":"heap_memory_usage: 184533168\nnon_heap_memory_usage: 160576952\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280246000,"args":{"JVM stats":"heap_memory_usage: 184631592\nnon_heap_memory_usage: 160576952\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280265000,"args":{"JVM stats":"heap_memory_usage: 185734688\nnon_heap_memory_usage: 160585528\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280267000,"args":{"JVM stats":"heap_memory_usage: 185833120\nnon_heap_memory_usage: 160593640\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280267001,"args":{"JVM stats":"heap_memory_usage: 185931568\nnon_heap_memory_usage: 160593640\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280268000,"args":{"JVM stats":"heap_memory_usage: 185931568\nnon_heap_memory_usage: 160600744\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280270000,"args":{"JVM stats":"heap_memory_usage: 186033912\nnon_heap_memory_usage: 160603496\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280272000,"args":{"JVM stats":"heap_memory_usage: 186132336\nnon_heap_memory_usage: 160603528\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280287000,"args":{"JVM stats":"heap_memory_usage: 186822632\nnon_heap_memory_usage: 160603528\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280312000,"args":{"JVM stats":"heap_memory_usage: 188307480\nnon_heap_memory_usage: 160646688\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280323000,"args":{"JVM stats":"heap_memory_usage: 188701176\nnon_heap_memory_usage: 160663008\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280342000,"args":{"JVM stats":"heap_memory_usage: 189292032\nnon_heap_memory_usage: 160667104\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280347000,"args":{"JVM stats":"heap_memory_usage: 189390456\nnon_heap_memory_usage: 160667104\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280351000,"args":{"JVM stats":"heap_memory_usage: 189488888\nnon_heap_memory_usage: 160667104\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280354000,"args":{"JVM stats":"heap_memory_usage: 189587416\nnon_heap_memory_usage: 160667104\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280358000,"args":{"JVM stats":"heap_memory_usage: 189784392\nnon_heap_memory_usage: 160668704\nloaded_class_count: 16549\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280549000,"args":{"JVM stats":"heap_memory_usage: 221067504\nnon_heap_memory_usage: 160753912\nloaded_class_count: 16550\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280553000,"args":{"JVM stats":"heap_memory_usage: 221510904\nnon_heap_memory_usage: 160769328\nloaded_class_count: 16550\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280554000,"args":{"JVM stats":"heap_memory_usage: 221510904\nnon_heap_memory_usage: 160769328\nloaded_class_count: 16550\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280555000,"args":{"JVM stats":"heap_memory_usage: 221510904\nnon_heap_memory_usage: 160781192\nloaded_class_count: 16550\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428280578000,"args":{"JVM stats":"heap_memory_usage: 222278016\nnon_heap_memory_usage: 160807760\nloaded_class_count: 16550\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":9,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279016000,"dur":4000},{"pid":1,"tid":9,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279020000,"dur":4000},{"pid":1,"tid":9,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279024000,"dur":2000},{"pid":1,"tid":9,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279024000,"dur":2000},{"pid":1,"tid":9,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279032000,"dur":2000},{"pid":1,"tid":9,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279034000,"dur":1000},{"pid":1,"tid":9,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279035000,"dur":100},{"pid":1,"tid":9,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279036000,"dur":100},{"pid":1,"tid":9,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279036000,"dur":100},{"pid":1,"tid":9,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279036000,"dur":100},{"pid":1,"tid":9,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279036000,"dur":100},{"pid":1,"tid":9,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279036000,"dur":100},{"pid":1,"tid":9,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279036000,"dur":2000},{"pid":1,"tid":9,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279038000,"dur":100},{"pid":1,"tid":9,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279038000,"dur":100},{"pid":1,"tid":9,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279038000,"dur":100},{"pid":1,"tid":9,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279038000,"dur":22000},{"pid":1,"tid":9,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279060000,"dur":1000},{"pid":1,"tid":9,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279061000,"dur":4000},{"pid":1,"tid":9,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279066000,"dur":4000},{"pid":1,"tid":9,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279070000,"dur":100},{"pid":1,"tid":9,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428279035000,"dur":35000},{"pid":1,"tid":9,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279070000,"dur":4000},{"pid":1,"tid":9,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279074000,"dur":9000},{"pid":1,"tid":9,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279032000,"dur":51000},{"pid":1,"tid":9,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279084000,"dur":2000},{"pid":1,"tid":9,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428279031000,"dur":55000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428279101000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279102000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279103000,"dur":38000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279142000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279146000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279151000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279152000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279153000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279154000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279154000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428279155000,"dur":198000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279355000,"dur":3000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279359000,"dur":7000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428279367000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428279368000,"dur":650000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280018000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280019000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280037000,"dur":11000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280048000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280050000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280051000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280052000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280058000,"dur":54000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280113000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280118000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280120000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280135000,"dur":17000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280152000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280154000,"dur":66000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280221000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280223000,"dur":8000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280232000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280233000,"dur":12000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280245000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280247000,"dur":18000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280266000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280267000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280267000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280268000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280270000,"dur":2000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280272000,"dur":15000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280288000,"dur":24000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280312000,"dur":11000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280324000,"dur":18000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280342000,"dur":4000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280348000,"dur":3000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280352000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428280355000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280359000,"dur":190000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280549000,"dur":4000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280554000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428280554000,"dur":100},{"pid":1,"tid":9,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428280568000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-00-577.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-00-577.rawproto
new file mode 100644
index 00000000..04fef565
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-00-577.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-42-310.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-42-310.json
new file mode 100644
index 00000000..e2af4b8c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-42-310.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428320899000,"args":{"JVM stats":"heap_memory_usage: 279496456\nnon_heap_memory_usage: 161618464\nloaded_class_count: 16696\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428320996000,"args":{"JVM stats":"heap_memory_usage: 290543968\nnon_heap_memory_usage: 161856968\nloaded_class_count: 16696\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428320996001,"args":{"JVM stats":"heap_memory_usage: 290543968\nnon_heap_memory_usage: 161856968\nloaded_class_count: 16696\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321035000,"args":{"JVM stats":"heap_memory_usage: 297449616\nnon_heap_memory_usage: 161906544\nloaded_class_count: 16697\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321040000,"args":{"JVM stats":"heap_memory_usage: 297783536\nnon_heap_memory_usage: 161903784\nloaded_class_count: 16697\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321043000,"args":{"JVM stats":"heap_memory_usage: 297783536\nnon_heap_memory_usage: 161905264\nloaded_class_count: 16697\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321044000,"args":{"JVM stats":"heap_memory_usage: 297950472\nnon_heap_memory_usage: 161905360\nloaded_class_count: 16697\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321045000,"args":{"JVM stats":"heap_memory_usage: 297950472\nnon_heap_memory_usage: 161905360\nloaded_class_count: 16697\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321046000,"args":{"JVM stats":"heap_memory_usage: 297950472\nnon_heap_memory_usage: 161905360\nloaded_class_count: 16697\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321047000,"args":{"JVM stats":"heap_memory_usage: 297950472\nnon_heap_memory_usage: 161905360\nloaded_class_count: 16697\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321047001,"args":{"JVM stats":"heap_memory_usage: 298117360\nnon_heap_memory_usage: 161905360\nloaded_class_count: 16697\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321207000,"args":{"JVM stats":"heap_memory_usage: 332463264\nnon_heap_memory_usage: 161906560\nloaded_class_count: 16697\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321208000,"args":{"JVM stats":"heap_memory_usage: 332695704\nnon_heap_memory_usage: 161905888\nloaded_class_count: 16697\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321213000,"args":{"JVM stats":"heap_memory_usage: 333655360\nnon_heap_memory_usage: 161910008\nloaded_class_count: 16697\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321214000,"args":{"JVM stats":"heap_memory_usage: 333655360\nnon_heap_memory_usage: 161910008\nloaded_class_count: 16697\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321842000,"args":{"JVM stats":"heap_memory_usage: 349069112\nnon_heap_memory_usage: 161863344\nloaded_class_count: 16697\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321842001,"args":{"JVM stats":"heap_memory_usage: 349069112\nnon_heap_memory_usage: 161863344\nloaded_class_count: 16697\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321858000,"args":{"JVM stats":"heap_memory_usage: 350177216\nnon_heap_memory_usage: 161891416\nloaded_class_count: 16697\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321873000,"args":{"JVM stats":"heap_memory_usage: 351011824\nnon_heap_memory_usage: 161948224\nloaded_class_count: 16712\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321875000,"args":{"JVM stats":"heap_memory_usage: 351011824\nnon_heap_memory_usage: 161948224\nloaded_class_count: 16712\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321877000,"args":{"JVM stats":"heap_memory_usage: 351178736\nnon_heap_memory_usage: 161955304\nloaded_class_count: 16715\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321878000,"args":{"JVM stats":"heap_memory_usage: 351178736\nnon_heap_memory_usage: 161955304\nloaded_class_count: 16715\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321883000,"args":{"JVM stats":"heap_memory_usage: 351345624\nnon_heap_memory_usage: 161955336\nloaded_class_count: 16715\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321939000,"args":{"JVM stats":"heap_memory_usage: 359960192\nnon_heap_memory_usage: 161999096\nloaded_class_count: 16715\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321943000,"args":{"JVM stats":"heap_memory_usage: 360469040\nnon_heap_memory_usage: 162002800\nloaded_class_count: 16715\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321945000,"args":{"JVM stats":"heap_memory_usage: 360469040\nnon_heap_memory_usage: 162002800\nloaded_class_count: 16715\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321958000,"args":{"JVM stats":"heap_memory_usage: 360970264\nnon_heap_memory_usage: 162002800\nloaded_class_count: 16715\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321973000,"args":{"JVM stats":"heap_memory_usage: 361816904\nnon_heap_memory_usage: 162003376\nloaded_class_count: 16715\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428321975000,"args":{"JVM stats":"heap_memory_usage: 361816904\nnon_heap_memory_usage: 162029032\nloaded_class_count: 16725\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322023000,"args":{"JVM stats":"heap_memory_usage: 362818160\nnon_heap_memory_usage: 162029032\nloaded_class_count: 16725\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322025000,"args":{"JVM stats":"heap_memory_usage: 362818160\nnon_heap_memory_usage: 162029032\nloaded_class_count: 16725\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322031000,"args":{"JVM stats":"heap_memory_usage: 363486096\nnon_heap_memory_usage: 162027560\nloaded_class_count: 16725\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322032000,"args":{"JVM stats":"heap_memory_usage: 363486096\nnon_heap_memory_usage: 162027560\nloaded_class_count: 16725\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322041000,"args":{"JVM stats":"heap_memory_usage: 364669456\nnon_heap_memory_usage: 162031784\nloaded_class_count: 16725\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322042000,"args":{"JVM stats":"heap_memory_usage: 364836312\nnon_heap_memory_usage: 162031784\nloaded_class_count: 16725\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322057000,"args":{"JVM stats":"heap_memory_usage: 366340224\nnon_heap_memory_usage: 162036296\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322058000,"args":{"JVM stats":"heap_memory_usage: 366340224\nnon_heap_memory_usage: 162036296\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322059000,"args":{"JVM stats":"heap_memory_usage: 366340224\nnon_heap_memory_usage: 162036296\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322059001,"args":{"JVM stats":"heap_memory_usage: 366340224\nnon_heap_memory_usage: 162036296\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322060000,"args":{"JVM stats":"heap_memory_usage: 366678048\nnon_heap_memory_usage: 162036296\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322061000,"args":{"JVM stats":"heap_memory_usage: 366678048\nnon_heap_memory_usage: 162036296\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322072000,"args":{"JVM stats":"heap_memory_usage: 367348672\nnon_heap_memory_usage: 162098568\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322094000,"args":{"JVM stats":"heap_memory_usage: 368685080\nnon_heap_memory_usage: 162083528\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322105000,"args":{"JVM stats":"heap_memory_usage: 369185872\nnon_heap_memory_usage: 162083528\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322116000,"args":{"JVM stats":"heap_memory_usage: 369686528\nnon_heap_memory_usage: 162047752\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322117000,"args":{"JVM stats":"heap_memory_usage: 369686528\nnon_heap_memory_usage: 162059144\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322119000,"args":{"JVM stats":"heap_memory_usage: 369853448\nnon_heap_memory_usage: 162055192\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322122000,"args":{"JVM stats":"heap_memory_usage: 370020328\nnon_heap_memory_usage: 162053392\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322124000,"args":{"JVM stats":"heap_memory_usage: 370187248\nnon_heap_memory_usage: 162053968\nloaded_class_count: 16725\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322291000,"args":{"JVM stats":"heap_memory_usage: 401599752\nnon_heap_memory_usage: 162108760\nloaded_class_count: 16730\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322293000,"args":{"JVM stats":"heap_memory_usage: 401948744\nnon_heap_memory_usage: 162110848\nloaded_class_count: 16730\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322294000,"args":{"JVM stats":"heap_memory_usage: 401948744\nnon_heap_memory_usage: 162110848\nloaded_class_count: 16730\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322294001,"args":{"JVM stats":"heap_memory_usage: 401948744\nnon_heap_memory_usage: 162131864\nloaded_class_count: 16730\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428322310000,"args":{"JVM stats":"heap_memory_usage: 402617432\nnon_heap_memory_usage: 162139536\nloaded_class_count: 16732\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":9,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320900000,"dur":4000},{"pid":1,"tid":9,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320904000,"dur":5000},{"pid":1,"tid":9,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320909000,"dur":100},{"pid":1,"tid":9,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320909000,"dur":1000},{"pid":1,"tid":9,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320914000,"dur":2000},{"pid":1,"tid":9,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320916000,"dur":1000},{"pid":1,"tid":9,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320919000,"dur":100},{"pid":1,"tid":9,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320919000,"dur":100},{"pid":1,"tid":9,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320919000,"dur":1000},{"pid":1,"tid":9,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320920000,"dur":100},{"pid":1,"tid":9,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320920000,"dur":100},{"pid":1,"tid":9,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320920000,"dur":1000},{"pid":1,"tid":9,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320921000,"dur":3000},{"pid":1,"tid":9,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320924000,"dur":100},{"pid":1,"tid":9,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320924000,"dur":100},{"pid":1,"tid":9,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320924000,"dur":100},{"pid":1,"tid":9,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320924000,"dur":29000},{"pid":1,"tid":9,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320954000,"dur":1000},{"pid":1,"tid":9,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320955000,"dur":6000},{"pid":1,"tid":9,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320962000,"dur":2000},{"pid":1,"tid":9,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320964000,"dur":100},{"pid":1,"tid":9,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428320917000,"dur":47000},{"pid":1,"tid":9,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320964000,"dur":4000},{"pid":1,"tid":9,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320968000,"dur":8000},{"pid":1,"tid":9,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320913000,"dur":65000},{"pid":1,"tid":9,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320978000,"dur":2000},{"pid":1,"tid":9,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428320912000,"dur":68000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428320995000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428320996000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428320997000,"dur":38000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321035000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321040000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321043000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321044000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321046000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321047000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321047000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428321048000,"dur":159000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321208000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321209000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321213000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428321215000,"dur":627000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428321842000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321843000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321858000,"dur":15000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321874000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321876000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321878000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321879000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428321884000,"dur":55000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428321939000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321943000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321946000,"dur":12000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321959000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428321974000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428321975000,"dur":48000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322024000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322025000,"dur":6000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428322031000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322032000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322041000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322043000,"dur":14000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322058000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322059000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428322059000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322059000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322060000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322061000,"dur":11000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322072000,"dur":22000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322094000,"dur":11000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322106000,"dur":10000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428322116000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322117000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322119000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428322122000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428322124000,"dur":167000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428322291000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428322294000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428322294000,"dur":100},{"pid":1,"tid":9,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428322302000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-42-310.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-42-310.rawproto
new file mode 100644
index 00000000..7bd087b4
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-38-42-310.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-39-06-319.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-39-06-319.json
new file mode 100644
index 00000000..0ab075b3
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-39-06-319.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344730000,"args":{"JVM stats":"heap_memory_usage: 457531848\nnon_heap_memory_usage: 162323056\nloaded_class_count: 16757\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344853000,"args":{"JVM stats":"heap_memory_usage: 469932176\nnon_heap_memory_usage: 163161920\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344854000,"args":{"JVM stats":"heap_memory_usage: 469932176\nnon_heap_memory_usage: 163164608\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344899000,"args":{"JVM stats":"heap_memory_usage: 476509696\nnon_heap_memory_usage: 163193512\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344903000,"args":{"JVM stats":"heap_memory_usage: 477178416\nnon_heap_memory_usage: 163206248\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344907000,"args":{"JVM stats":"heap_memory_usage: 477345592\nnon_heap_memory_usage: 163229544\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344908000,"args":{"JVM stats":"heap_memory_usage: 477512528\nnon_heap_memory_usage: 163229544\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344910000,"args":{"JVM stats":"heap_memory_usage: 477512528\nnon_heap_memory_usage: 163245864\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344910001,"args":{"JVM stats":"heap_memory_usage: 477512528\nnon_heap_memory_usage: 163247016\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344911000,"args":{"JVM stats":"heap_memory_usage: 477512528\nnon_heap_memory_usage: 163247016\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428344911001,"args":{"JVM stats":"heap_memory_usage: 477679416\nnon_heap_memory_usage: 163247016\nloaded_class_count: 16871\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345054000,"args":{"JVM stats":"heap_memory_usage: 511955632\nnon_heap_memory_usage: 163327144\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345055000,"args":{"JVM stats":"heap_memory_usage: 512355008\nnon_heap_memory_usage: 163327144\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345060000,"args":{"JVM stats":"heap_memory_usage: 513314520\nnon_heap_memory_usage: 163326560\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345061000,"args":{"JVM stats":"heap_memory_usage: 513314520\nnon_heap_memory_usage: 163327712\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345759000,"args":{"JVM stats":"heap_memory_usage: 141848352\nnon_heap_memory_usage: 163351448\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 49\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345760000,"args":{"JVM stats":"heap_memory_usage: 143694800\nnon_heap_memory_usage: 163351448\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345778000,"args":{"JVM stats":"heap_memory_usage: 145028304\nnon_heap_memory_usage: 163380184\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345790000,"args":{"JVM stats":"heap_memory_usage: 145882312\nnon_heap_memory_usage: 163410632\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345792000,"args":{"JVM stats":"heap_memory_usage: 145882312\nnon_heap_memory_usage: 163412352\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345793000,"args":{"JVM stats":"heap_memory_usage: 145882312\nnon_heap_memory_usage: 163413152\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345794000,"args":{"JVM stats":"heap_memory_usage: 145882312\nnon_heap_memory_usage: 163415560\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345799000,"args":{"JVM stats":"heap_memory_usage: 145968848\nnon_heap_memory_usage: 163429976\nloaded_class_count: 16871\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345870000,"args":{"JVM stats":"heap_memory_usage: 154469120\nnon_heap_memory_usage: 163493024\nloaded_class_count: 16871\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345876000,"args":{"JVM stats":"heap_memory_usage: 154997424\nnon_heap_memory_usage: 163497744\nloaded_class_count: 16873\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345878000,"args":{"JVM stats":"heap_memory_usage: 154997424\nnon_heap_memory_usage: 163497744\nloaded_class_count: 16873\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345904000,"args":{"JVM stats":"heap_memory_usage: 155424760\nnon_heap_memory_usage: 163534232\nloaded_class_count: 16873\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345933000,"args":{"JVM stats":"heap_memory_usage: 156478216\nnon_heap_memory_usage: 163548344\nloaded_class_count: 16873\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428345937000,"args":{"JVM stats":"heap_memory_usage: 156478216\nnon_heap_memory_usage: 163548632\nloaded_class_count: 16873\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346015000,"args":{"JVM stats":"heap_memory_usage: 157476488\nnon_heap_memory_usage: 163548632\nloaded_class_count: 16873\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346018000,"args":{"JVM stats":"heap_memory_usage: 157476488\nnon_heap_memory_usage: 163551376\nloaded_class_count: 16873\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346032000,"args":{"JVM stats":"heap_memory_usage: 158251312\nnon_heap_memory_usage: 163574000\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346033000,"args":{"JVM stats":"heap_memory_usage: 158251312\nnon_heap_memory_usage: 163574584\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346045000,"args":{"JVM stats":"heap_memory_usage: 159188080\nnon_heap_memory_usage: 163592888\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346046000,"args":{"JVM stats":"heap_memory_usage: 159188080\nnon_heap_memory_usage: 163598904\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346064000,"args":{"JVM stats":"heap_memory_usage: 160551352\nnon_heap_memory_usage: 163602936\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346065000,"args":{"JVM stats":"heap_memory_usage: 160551352\nnon_heap_memory_usage: 163607328\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346066000,"args":{"JVM stats":"heap_memory_usage: 160551352\nnon_heap_memory_usage: 163607328\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346066001,"args":{"JVM stats":"heap_memory_usage: 160978368\nnon_heap_memory_usage: 163615800\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346068000,"args":{"JVM stats":"heap_memory_usage: 160978368\nnon_heap_memory_usage: 163619656\nloaded_class_count: 16874\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346070000,"args":{"JVM stats":"heap_memory_usage: 160978368\nnon_heap_memory_usage: 163624040\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346085000,"args":{"JVM stats":"heap_memory_usage: 161405376\nnon_heap_memory_usage: 163628584\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346110000,"args":{"JVM stats":"heap_memory_usage: 163033032\nnon_heap_memory_usage: 163629224\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346120000,"args":{"JVM stats":"heap_memory_usage: 163460072\nnon_heap_memory_usage: 163674024\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346135000,"args":{"JVM stats":"heap_memory_usage: 163887080\nnon_heap_memory_usage: 163674024\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346136000,"args":{"JVM stats":"heap_memory_usage: 164314064\nnon_heap_memory_usage: 163674024\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346138000,"args":{"JVM stats":"heap_memory_usage: 164314064\nnon_heap_memory_usage: 163677312\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346141000,"args":{"JVM stats":"heap_memory_usage: 164314064\nnon_heap_memory_usage: 163679360\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346143000,"args":{"JVM stats":"heap_memory_usage: 164314064\nnon_heap_memory_usage: 163679360\nloaded_class_count: 16875\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346303000,"args":{"JVM stats":"heap_memory_usage: 195983584\nnon_heap_memory_usage: 163745224\nloaded_class_count: 16875\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346306000,"args":{"JVM stats":"heap_memory_usage: 196204552\nnon_heap_memory_usage: 163746952\nloaded_class_count: 16875\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346307000,"args":{"JVM stats":"heap_memory_usage: 196285280\nnon_heap_memory_usage: 163746952\nloaded_class_count: 16875\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346307001,"args":{"JVM stats":"heap_memory_usage: 196285280\nnon_heap_memory_usage: 163746952\nloaded_class_count: 16875\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428346320000,"args":{"JVM stats":"heap_memory_usage: 196366024\nnon_heap_memory_usage: 163774920\nloaded_class_count: 16878\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":9,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344730000,"dur":14000},{"pid":1,"tid":9,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344744000,"dur":6000},{"pid":1,"tid":9,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344750000,"dur":2000},{"pid":1,"tid":9,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344750000,"dur":3000},{"pid":1,"tid":9,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344767000,"dur":3000},{"pid":1,"tid":9,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344770000,"dur":1000},{"pid":1,"tid":9,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344772000,"dur":2000},{"pid":1,"tid":9,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344774000,"dur":100},{"pid":1,"tid":9,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344774000,"dur":1000},{"pid":1,"tid":9,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344775000,"dur":1000},{"pid":1,"tid":9,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344776000,"dur":1000},{"pid":1,"tid":9,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344777000,"dur":100},{"pid":1,"tid":9,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344777000,"dur":4000},{"pid":1,"tid":9,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344781000,"dur":100},{"pid":1,"tid":9,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344781000,"dur":100},{"pid":1,"tid":9,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344781000,"dur":100},{"pid":1,"tid":9,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344781000,"dur":23000},{"pid":1,"tid":9,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344804000,"dur":1000},{"pid":1,"tid":9,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344805000,"dur":5000},{"pid":1,"tid":9,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344812000,"dur":1000},{"pid":1,"tid":9,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344813000,"dur":1000},{"pid":1,"tid":9,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428344771000,"dur":43000},{"pid":1,"tid":9,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344814000,"dur":4000},{"pid":1,"tid":9,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344818000,"dur":7000},{"pid":1,"tid":9,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344767000,"dur":60000},{"pid":1,"tid":9,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344828000,"dur":2000},{"pid":1,"tid":9,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428344763000,"dur":67000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428344852000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344854000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344854000,"dur":45000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344899000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344904000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344908000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344909000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344910000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344911000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428344911000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428344912000,"dur":142000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345054000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345056000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345061000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428345063000,"dur":696000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428345759000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345760000,"dur":18000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345779000,"dur":11000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345791000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345793000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345794000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345795000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428345799000,"dur":71000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428345870000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345876000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345878000,"dur":26000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345911000,"dur":22000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428345935000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428345937000,"dur":78000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346016000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346019000,"dur":13000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428346032000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346034000,"dur":11000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346045000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346047000,"dur":17000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346065000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346066000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428346066000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346067000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346068000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346070000,"dur":15000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346085000,"dur":24000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346110000,"dur":10000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346121000,"dur":14000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428346135000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346136000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346138000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428346141000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428346143000,"dur":160000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428346304000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428346306000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428346307000,"dur":100},{"pid":1,"tid":9,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428346313000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-39-06-319.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-39-06-319.rawproto
new file mode 100644
index 00000000..386393b1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-39-06-319.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-40-42-464.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-40-42-464.json
new file mode 100644
index 00000000..0c0e969c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-40-42-464.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440783000,"args":{"JVM stats":"heap_memory_usage: 252074184\nnon_heap_memory_usage: 163957520\nloaded_class_count: 16892\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440885000,"args":{"JVM stats":"heap_memory_usage: 262819560\nnon_heap_memory_usage: 163954624\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440885001,"args":{"JVM stats":"heap_memory_usage: 262962352\nnon_heap_memory_usage: 163954960\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440925000,"args":{"JVM stats":"heap_memory_usage: 269275544\nnon_heap_memory_usage: 164012208\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440931000,"args":{"JVM stats":"heap_memory_usage: 269990440\nnon_heap_memory_usage: 164018760\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440934000,"args":{"JVM stats":"heap_memory_usage: 270276064\nnon_heap_memory_usage: 164018760\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440934001,"args":{"JVM stats":"heap_memory_usage: 270276064\nnon_heap_memory_usage: 164018760\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440936000,"args":{"JVM stats":"heap_memory_usage: 270276064\nnon_heap_memory_usage: 164018760\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440936001,"args":{"JVM stats":"heap_memory_usage: 270418856\nnon_heap_memory_usage: 164018760\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440937000,"args":{"JVM stats":"heap_memory_usage: 270418856\nnon_heap_memory_usage: 164018760\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440937001,"args":{"JVM stats":"heap_memory_usage: 270418856\nnon_heap_memory_usage: 164018760\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440969000,"args":{"JVM stats":"heap_memory_usage: 273991520\nnon_heap_memory_usage: 164019656\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440971000,"args":{"JVM stats":"heap_memory_usage: 274134304\nnon_heap_memory_usage: 164019656\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440976000,"args":{"JVM stats":"heap_memory_usage: 274419856\nnon_heap_memory_usage: 164019656\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440978000,"args":{"JVM stats":"heap_memory_usage: 274419856\nnon_heap_memory_usage: 164019656\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440983000,"args":{"JVM stats":"heap_memory_usage: 275566648\nnon_heap_memory_usage: 164021872\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440984000,"args":{"JVM stats":"heap_memory_usage: 275566648\nnon_heap_memory_usage: 164021872\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428440997000,"args":{"JVM stats":"heap_memory_usage: 276138432\nnon_heap_memory_usage: 164021872\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441004000,"args":{"JVM stats":"heap_memory_usage: 276996376\nnon_heap_memory_usage: 164021872\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441005000,"args":{"JVM stats":"heap_memory_usage: 276996376\nnon_heap_memory_usage: 164022608\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441006000,"args":{"JVM stats":"heap_memory_usage: 277139136\nnon_heap_memory_usage: 164026552\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441007000,"args":{"JVM stats":"heap_memory_usage: 277139136\nnon_heap_memory_usage: 164026552\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441010000,"args":{"JVM stats":"heap_memory_usage: 277567672\nnon_heap_memory_usage: 164042680\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441012000,"args":{"JVM stats":"heap_memory_usage: 277710808\nnon_heap_memory_usage: 164035256\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441016000,"args":{"JVM stats":"heap_memory_usage: 277996856\nnon_heap_memory_usage: 164035256\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441017000,"args":{"JVM stats":"heap_memory_usage: 277996856\nnon_heap_memory_usage: 164043400\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441025000,"args":{"JVM stats":"heap_memory_usage: 278568464\nnon_heap_memory_usage: 164058632\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441041000,"args":{"JVM stats":"heap_memory_usage: 279597960\nnon_heap_memory_usage: 164058632\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441042000,"args":{"JVM stats":"heap_memory_usage: 279740720\nnon_heap_memory_usage: 164058632\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441787000,"args":{"JVM stats":"heap_memory_usage: 280454560\nnon_heap_memory_usage: 164060680\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428441791000,"args":{"JVM stats":"heap_memory_usage: 280597320\nnon_heap_memory_usage: 164061056\nloaded_class_count: 16892\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442104000,"args":{"JVM stats":"heap_memory_usage: 302465632\nnon_heap_memory_usage: 164217848\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442105000,"args":{"JVM stats":"heap_memory_usage: 302608392\nnon_heap_memory_usage: 164217848\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442114000,"args":{"JVM stats":"heap_memory_usage: 303465408\nnon_heap_memory_usage: 164221112\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442118000,"args":{"JVM stats":"heap_memory_usage: 303753024\nnon_heap_memory_usage: 164262400\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442134000,"args":{"JVM stats":"heap_memory_usage: 305467976\nnon_heap_memory_usage: 164315520\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442136000,"args":{"JVM stats":"heap_memory_usage: 305610768\nnon_heap_memory_usage: 164315520\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442136001,"args":{"JVM stats":"heap_memory_usage: 305610768\nnon_heap_memory_usage: 164315520\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442137000,"args":{"JVM stats":"heap_memory_usage: 305610768\nnon_heap_memory_usage: 164315520\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442138000,"args":{"JVM stats":"heap_memory_usage: 305610768\nnon_heap_memory_usage: 164315520\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442139000,"args":{"JVM stats":"heap_memory_usage: 305753528\nnon_heap_memory_usage: 164328896\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442152000,"args":{"JVM stats":"heap_memory_usage: 306467480\nnon_heap_memory_usage: 164328896\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442170000,"args":{"JVM stats":"heap_memory_usage: 307610408\nnon_heap_memory_usage: 164339504\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442179000,"args":{"JVM stats":"heap_memory_usage: 308039216\nnon_heap_memory_usage: 164350664\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442187000,"args":{"JVM stats":"heap_memory_usage: 308610360\nnon_heap_memory_usage: 164350664\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442188000,"args":{"JVM stats":"heap_memory_usage: 308610360\nnon_heap_memory_usage: 164353800\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442190000,"args":{"JVM stats":"heap_memory_usage: 308753120\nnon_heap_memory_usage: 164353800\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442192000,"args":{"JVM stats":"heap_memory_usage: 308895904\nnon_heap_memory_usage: 164353800\nloaded_class_count: 16907\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442259000,"args":{"JVM stats":"heap_memory_usage: 309899592\nnon_heap_memory_usage: 164362648\nloaded_class_count: 16911\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442448000,"args":{"JVM stats":"heap_memory_usage: 349509928\nnon_heap_memory_usage: 164473416\nloaded_class_count: 16911\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442451000,"args":{"JVM stats":"heap_memory_usage: 349807824\nnon_heap_memory_usage: 164473416\nloaded_class_count: 16911\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442451001,"args":{"JVM stats":"heap_memory_usage: 349807824\nnon_heap_memory_usage: 164473416\nloaded_class_count: 16911\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442452000,"args":{"JVM stats":"heap_memory_usage: 349807824\nnon_heap_memory_usage: 164473928\nloaded_class_count: 16911\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428442464000,"args":{"JVM stats":"heap_memory_usage: 350954608\nnon_heap_memory_usage: 164538176\nloaded_class_count: 16911\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":10,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440783000,"dur":3000},{"pid":1,"tid":10,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440786000,"dur":5000},{"pid":1,"tid":10,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440791000,"dur":1000},{"pid":1,"tid":10,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440791000,"dur":1000},{"pid":1,"tid":10,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440801000,"dur":2000},{"pid":1,"tid":10,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440803000,"dur":100},{"pid":1,"tid":10,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440804000,"dur":100},{"pid":1,"tid":10,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440804000,"dur":100},{"pid":1,"tid":10,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440804000,"dur":100},{"pid":1,"tid":10,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440804000,"dur":3000},{"pid":1,"tid":10,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440807000,"dur":100},{"pid":1,"tid":10,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440807000,"dur":1000},{"pid":1,"tid":10,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440808000,"dur":3000},{"pid":1,"tid":10,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440811000,"dur":1000},{"pid":1,"tid":10,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440812000,"dur":100},{"pid":1,"tid":10,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440812000,"dur":100},{"pid":1,"tid":10,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440812000,"dur":33000},{"pid":1,"tid":10,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440845000,"dur":100},{"pid":1,"tid":10,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440845000,"dur":4000},{"pid":1,"tid":10,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440852000,"dur":2000},{"pid":1,"tid":10,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440854000,"dur":100},{"pid":1,"tid":10,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428440803000,"dur":51000},{"pid":1,"tid":10,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440854000,"dur":5000},{"pid":1,"tid":10,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440859000,"dur":7000},{"pid":1,"tid":10,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440801000,"dur":65000},{"pid":1,"tid":10,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440866000,"dur":3000},{"pid":1,"tid":10,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428440798000,"dur":71000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428440883000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440885000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440885000,"dur":40000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440926000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440931000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440934000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440935000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440936000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440937000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440937000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440938000,"dur":31000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440970000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440972000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440977000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440978000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428440983000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440984000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428440998000,"dur":6000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441004000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441006000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441006000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441008000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441010000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428441012000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441017000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441018000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441025000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441041000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428441042000,"dur":745000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428441788000,"dur":3000},{"pid":1,"tid":11,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518428441861000,"dur":7000},{"pid":1,"tid":11,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518428441868000,"dur":164000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428441792000,"dur":312000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442104000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442105000,"dur":9000},{"pid":1,"tid":11,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518428442116000,"dur":1000},{"pid":1,"tid":11,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518428442117000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442115000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442118000,"dur":16000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442135000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442136000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442137000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442137000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442138000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442141000,"dur":11000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442152000,"dur":18000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442171000,"dur":8000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442179000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442187000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442188000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428442190000,"dur":2000},{"pid":1,"tid":11,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518428442194000,"dur":1000},{"pid":1,"tid":11,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518428442195000,"dur":49000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442192000,"dur":67000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442260000,"dur":188000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442448000,"dur":3000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442451000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428442452000,"dur":100},{"pid":1,"tid":10,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428442457000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-40-42-464.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-40-42-464.rawproto
new file mode 100644
index 00000000..94fec109
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-40-42-464.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-41-41-274.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-41-41-274.json
new file mode 100644
index 00000000..2e3129d2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-41-41-274.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428499876000,"args":{"JVM stats":"heap_memory_usage: 405570448\nnon_heap_memory_usage: 164680224\nloaded_class_count: 16919\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428499950000,"args":{"JVM stats":"heap_memory_usage: 416306376\nnon_heap_memory_usage: 164809104\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428499950001,"args":{"JVM stats":"heap_memory_usage: 416449168\nnon_heap_memory_usage: 164809104\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428499991000,"args":{"JVM stats":"heap_memory_usage: 423052992\nnon_heap_memory_usage: 164817960\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428499994000,"args":{"JVM stats":"heap_memory_usage: 423338576\nnon_heap_memory_usage: 164821352\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428499998000,"args":{"JVM stats":"heap_memory_usage: 423481368\nnon_heap_memory_usage: 164825128\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428499998001,"args":{"JVM stats":"heap_memory_usage: 423481368\nnon_heap_memory_usage: 164825128\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428499999000,"args":{"JVM stats":"heap_memory_usage: 423481368\nnon_heap_memory_usage: 164825128\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500000000,"args":{"JVM stats":"heap_memory_usage: 423624160\nnon_heap_memory_usage: 164825472\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500001000,"args":{"JVM stats":"heap_memory_usage: 423624160\nnon_heap_memory_usage: 164826432\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500001001,"args":{"JVM stats":"heap_memory_usage: 423624160\nnon_heap_memory_usage: 164826728\nloaded_class_count: 16931\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500160000,"args":{"JVM stats":"heap_memory_usage: 458640984\nnon_heap_memory_usage: 165031584\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500164000,"args":{"JVM stats":"heap_memory_usage: 459155928\nnon_heap_memory_usage: 165031584\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500172000,"args":{"JVM stats":"heap_memory_usage: 459914880\nnon_heap_memory_usage: 165031584\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500173000,"args":{"JVM stats":"heap_memory_usage: 459914880\nnon_heap_memory_usage: 165031584\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500745000,"args":{"JVM stats":"heap_memory_usage: 474655680\nnon_heap_memory_usage: 165279800\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500745001,"args":{"JVM stats":"heap_memory_usage: 474721232\nnon_heap_memory_usage: 165279480\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500760000,"args":{"JVM stats":"heap_memory_usage: 475535664\nnon_heap_memory_usage: 165247544\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500774000,"args":{"JVM stats":"heap_memory_usage: 476106968\nnon_heap_memory_usage: 165244024\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500776000,"args":{"JVM stats":"heap_memory_usage: 476106968\nnon_heap_memory_usage: 165244024\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500777000,"args":{"JVM stats":"heap_memory_usage: 476249808\nnon_heap_memory_usage: 165244024\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500778000,"args":{"JVM stats":"heap_memory_usage: 476249808\nnon_heap_memory_usage: 165244024\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500780000,"args":{"JVM stats":"heap_memory_usage: 476392600\nnon_heap_memory_usage: 165244024\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500824000,"args":{"JVM stats":"heap_memory_usage: 484799696\nnon_heap_memory_usage: 165189472\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500829000,"args":{"JVM stats":"heap_memory_usage: 485239984\nnon_heap_memory_usage: 165189472\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500830000,"args":{"JVM stats":"heap_memory_usage: 485382784\nnon_heap_memory_usage: 165189472\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500841000,"args":{"JVM stats":"heap_memory_usage: 485811152\nnon_heap_memory_usage: 165189472\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500857000,"args":{"JVM stats":"heap_memory_usage: 486966432\nnon_heap_memory_usage: 165189472\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500858000,"args":{"JVM stats":"heap_memory_usage: 486966432\nnon_heap_memory_usage: 165190432\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500911000,"args":{"JVM stats":"heap_memory_usage: 487829936\nnon_heap_memory_usage: 165197000\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500913000,"args":{"JVM stats":"heap_memory_usage: 487972728\nnon_heap_memory_usage: 165197000\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500933000,"args":{"JVM stats":"heap_memory_usage: 489417056\nnon_heap_memory_usage: 165233008\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500935000,"args":{"JVM stats":"heap_memory_usage: 489417056\nnon_heap_memory_usage: 165227632\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500945000,"args":{"JVM stats":"heap_memory_usage: 489988320\nnon_heap_memory_usage: 165191856\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500947000,"args":{"JVM stats":"heap_memory_usage: 490131080\nnon_heap_memory_usage: 165191856\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500962000,"args":{"JVM stats":"heap_memory_usage: 491131496\nnon_heap_memory_usage: 165198712\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500964000,"args":{"JVM stats":"heap_memory_usage: 491274296\nnon_heap_memory_usage: 165198712\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500964001,"args":{"JVM stats":"heap_memory_usage: 491274296\nnon_heap_memory_usage: 165198712\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500964000,"args":{"JVM stats":"heap_memory_usage: 491274296\nnon_heap_memory_usage: 165198712\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500966000,"args":{"JVM stats":"heap_memory_usage: 491274296\nnon_heap_memory_usage: 165198712\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500967000,"args":{"JVM stats":"heap_memory_usage: 491417056\nnon_heap_memory_usage: 165198712\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428500980000,"args":{"JVM stats":"heap_memory_usage: 491988456\nnon_heap_memory_usage: 165201336\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501001000,"args":{"JVM stats":"heap_memory_usage: 493989864\nnon_heap_memory_usage: 165201336\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501011000,"args":{"JVM stats":"heap_memory_usage: 494418648\nnon_heap_memory_usage: 165211064\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501020000,"args":{"JVM stats":"heap_memory_usage: 494994184\nnon_heap_memory_usage: 165211064\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501021000,"args":{"JVM stats":"heap_memory_usage: 494994184\nnon_heap_memory_usage: 165214944\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501024000,"args":{"JVM stats":"heap_memory_usage: 495136960\nnon_heap_memory_usage: 165214944\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501026000,"args":{"JVM stats":"heap_memory_usage: 495279736\nnon_heap_memory_usage: 165214944\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501040000,"args":{"JVM stats":"heap_memory_usage: 495577664\nnon_heap_memory_usage: 165214944\nloaded_class_count: 16931\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501256000,"args":{"JVM stats":"heap_memory_usage: 159821624\nnon_heap_memory_usage: 165255560\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 25\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501259000,"args":{"JVM stats":"heap_memory_usage: 161562496\nnon_heap_memory_usage: 165255560\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501259001,"args":{"JVM stats":"heap_memory_usage: 162266344\nnon_heap_memory_usage: 165255560\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501261000,"args":{"JVM stats":"heap_memory_usage: 162266344\nnon_heap_memory_usage: 165267464\nloaded_class_count: 16931\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428501274000,"args":{"JVM stats":"heap_memory_usage: 162335456\nnon_heap_memory_usage: 165270320\nloaded_class_count: 16933\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":10,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499876000,"dur":3000},{"pid":1,"tid":10,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499879000,"dur":3000},{"pid":1,"tid":10,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499882000,"dur":1000},{"pid":1,"tid":10,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499882000,"dur":1000},{"pid":1,"tid":10,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499889000,"dur":2000},{"pid":1,"tid":10,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499891000,"dur":1000},{"pid":1,"tid":10,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499892000,"dur":1000},{"pid":1,"tid":10,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499893000,"dur":100},{"pid":1,"tid":10,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499893000,"dur":100},{"pid":1,"tid":10,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499893000,"dur":100},{"pid":1,"tid":10,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499893000,"dur":100},{"pid":1,"tid":10,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499893000,"dur":100},{"pid":1,"tid":10,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499893000,"dur":2000},{"pid":1,"tid":10,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499895000,"dur":100},{"pid":1,"tid":10,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499895000,"dur":100},{"pid":1,"tid":10,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499895000,"dur":100},{"pid":1,"tid":10,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499895000,"dur":19000},{"pid":1,"tid":10,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499914000,"dur":1000},{"pid":1,"tid":10,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499915000,"dur":4000},{"pid":1,"tid":10,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499920000,"dur":2000},{"pid":1,"tid":10,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499922000,"dur":100},{"pid":1,"tid":10,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428499892000,"dur":30000},{"pid":1,"tid":10,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499922000,"dur":4000},{"pid":1,"tid":10,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499926000,"dur":6000},{"pid":1,"tid":10,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499889000,"dur":44000},{"pid":1,"tid":10,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499933000,"dur":4000},{"pid":1,"tid":10,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428499888000,"dur":49000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428499949000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428499950000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428499950000,"dur":41000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428499991000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428499995000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428499998000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428499999000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500000000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500000000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500001000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428500003000,"dur":157000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500161000,"dur":3000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500165000,"dur":7000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500173000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428500174000,"dur":571000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428500745000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500746000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500761000,"dur":13000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500775000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500776000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500777000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500778000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428500781000,"dur":43000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428500825000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500829000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500830000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500842000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500857000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428500858000,"dur":53000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500911000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500913000,"dur":20000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428500934000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500937000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500946000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500947000,"dur":15000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500963000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500964000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428500964000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500965000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500966000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500968000,"dur":12000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428500980000,"dur":21000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428501002000,"dur":9000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428501012000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428501020000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428501022000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428501024000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428501027000,"dur":13000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428501041000,"dur":215000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428501257000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428501259000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428501260000,"dur":100},{"pid":1,"tid":10,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428501266000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-41-41-274.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-41-41-274.rawproto
new file mode 100644
index 00000000..62c3279d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-41-41-274.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-42-02-235.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-42-02-235.json
new file mode 100644
index 00000000..e6bc8595
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-42-02-235.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520790000,"args":{"JVM stats":"heap_memory_usage: 218297624\nnon_heap_memory_usage: 165494448\nloaded_class_count: 16940\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520893000,"args":{"JVM stats":"heap_memory_usage: 228478472\nnon_heap_memory_usage: 165690224\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520893001,"args":{"JVM stats":"heap_memory_usage: 228625080\nnon_heap_memory_usage: 165690224\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520936000,"args":{"JVM stats":"heap_memory_usage: 235412112\nnon_heap_memory_usage: 165709328\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520942000,"args":{"JVM stats":"heap_memory_usage: 235558712\nnon_heap_memory_usage: 165710224\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520948000,"args":{"JVM stats":"heap_memory_usage: 235852216\nnon_heap_memory_usage: 165710224\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520949000,"args":{"JVM stats":"heap_memory_usage: 235852216\nnon_heap_memory_usage: 165710800\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520951000,"args":{"JVM stats":"heap_memory_usage: 235998856\nnon_heap_memory_usage: 165710800\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520953000,"args":{"JVM stats":"heap_memory_usage: 235998856\nnon_heap_memory_usage: 165710800\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520954000,"args":{"JVM stats":"heap_memory_usage: 235998856\nnon_heap_memory_usage: 165710800\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428520954001,"args":{"JVM stats":"heap_memory_usage: 235998856\nnon_heap_memory_usage: 165710800\nloaded_class_count: 16940\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521116000,"args":{"JVM stats":"heap_memory_usage: 270372472\nnon_heap_memory_usage: 165766240\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521117000,"args":{"JVM stats":"heap_memory_usage: 270601896\nnon_heap_memory_usage: 165774232\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521121000,"args":{"JVM stats":"heap_memory_usage: 271808872\nnon_heap_memory_usage: 165774232\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521123000,"args":{"JVM stats":"heap_memory_usage: 271821208\nnon_heap_memory_usage: 165775632\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521737000,"args":{"JVM stats":"heap_memory_usage: 286804688\nnon_heap_memory_usage: 165745760\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521738000,"args":{"JVM stats":"heap_memory_usage: 286870240\nnon_heap_memory_usage: 165746592\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521754000,"args":{"JVM stats":"heap_memory_usage: 287553136\nnon_heap_memory_usage: 165736352\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521767000,"args":{"JVM stats":"heap_memory_usage: 287992944\nnon_heap_memory_usage: 165716216\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521769000,"args":{"JVM stats":"heap_memory_usage: 288139560\nnon_heap_memory_usage: 165625272\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521771000,"args":{"JVM stats":"heap_memory_usage: 288139560\nnon_heap_memory_usage: 165625272\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521771001,"args":{"JVM stats":"heap_memory_usage: 288139560\nnon_heap_memory_usage: 165625272\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521776000,"args":{"JVM stats":"heap_memory_usage: 288433848\nnon_heap_memory_usage: 165625272\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521827000,"args":{"JVM stats":"heap_memory_usage: 297094072\nnon_heap_memory_usage: 165643632\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521831000,"args":{"JVM stats":"heap_memory_usage: 297562664\nnon_heap_memory_usage: 165651024\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521832000,"args":{"JVM stats":"heap_memory_usage: 297562664\nnon_heap_memory_usage: 165662352\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521843000,"args":{"JVM stats":"heap_memory_usage: 298149384\nnon_heap_memory_usage: 165662352\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521860000,"args":{"JVM stats":"heap_memory_usage: 299035304\nnon_heap_memory_usage: 165662352\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521862000,"args":{"JVM stats":"heap_memory_usage: 299181912\nnon_heap_memory_usage: 165662352\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521926000,"args":{"JVM stats":"heap_memory_usage: 299914968\nnon_heap_memory_usage: 165663672\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521930000,"args":{"JVM stats":"heap_memory_usage: 300061608\nnon_heap_memory_usage: 165663672\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521938000,"args":{"JVM stats":"heap_memory_usage: 301090352\nnon_heap_memory_usage: 165663672\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521939000,"args":{"JVM stats":"heap_memory_usage: 301090352\nnon_heap_memory_usage: 165663672\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521950000,"args":{"JVM stats":"heap_memory_usage: 301825000\nnon_heap_memory_usage: 165663672\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521951000,"args":{"JVM stats":"heap_memory_usage: 301825000\nnon_heap_memory_usage: 165663672\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521968000,"args":{"JVM stats":"heap_memory_usage: 302997920\nnon_heap_memory_usage: 165673272\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521969000,"args":{"JVM stats":"heap_memory_usage: 302997920\nnon_heap_memory_usage: 165681592\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521969001,"args":{"JVM stats":"heap_memory_usage: 303144536\nnon_heap_memory_usage: 165681592\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521971000,"args":{"JVM stats":"heap_memory_usage: 303144536\nnon_heap_memory_usage: 165681592\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521972000,"args":{"JVM stats":"heap_memory_usage: 303144536\nnon_heap_memory_usage: 165682296\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521974000,"args":{"JVM stats":"heap_memory_usage: 303295232\nnon_heap_memory_usage: 165682296\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428521987000,"args":{"JVM stats":"heap_memory_usage: 304028616\nnon_heap_memory_usage: 165682296\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522008000,"args":{"JVM stats":"heap_memory_usage: 305642000\nnon_heap_memory_usage: 165683664\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522015000,"args":{"JVM stats":"heap_memory_usage: 306081848\nnon_heap_memory_usage: 165683664\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522025000,"args":{"JVM stats":"heap_memory_usage: 306668688\nnon_heap_memory_usage: 165683664\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522026000,"args":{"JVM stats":"heap_memory_usage: 306668688\nnon_heap_memory_usage: 165683664\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522029000,"args":{"JVM stats":"heap_memory_usage: 306815272\nnon_heap_memory_usage: 165683664\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522031000,"args":{"JVM stats":"heap_memory_usage: 306961984\nnon_heap_memory_usage: 165687464\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522033000,"args":{"JVM stats":"heap_memory_usage: 307109072\nnon_heap_memory_usage: 165687464\nloaded_class_count: 16940\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522219000,"args":{"JVM stats":"heap_memory_usage: 338417960\nnon_heap_memory_usage: 165737104\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522222000,"args":{"JVM stats":"heap_memory_usage: 338715320\nnon_heap_memory_usage: 165741144\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522223000,"args":{"JVM stats":"heap_memory_usage: 338715320\nnon_heap_memory_usage: 165741144\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522224000,"args":{"JVM stats":"heap_memory_usage: 338715320\nnon_heap_memory_usage: 165741144\nloaded_class_count: 16940\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518428522235000,"args":{"JVM stats":"heap_memory_usage: 340095896\nnon_heap_memory_usage: 165752416\nloaded_class_count: 16940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":10,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520791000,"dur":4000},{"pid":1,"tid":10,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520795000,"dur":4000},{"pid":1,"tid":10,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520799000,"dur":1000},{"pid":1,"tid":10,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520799000,"dur":1000},{"pid":1,"tid":10,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520806000,"dur":3000},{"pid":1,"tid":10,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520809000,"dur":1000},{"pid":1,"tid":10,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520811000,"dur":100},{"pid":1,"tid":10,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520811000,"dur":100},{"pid":1,"tid":10,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520811000,"dur":1000},{"pid":1,"tid":10,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520812000,"dur":1000},{"pid":1,"tid":10,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520813000,"dur":100},{"pid":1,"tid":10,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520813000,"dur":100},{"pid":1,"tid":10,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520813000,"dur":4000},{"pid":1,"tid":10,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520817000,"dur":100},{"pid":1,"tid":10,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520817000,"dur":100},{"pid":1,"tid":10,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520817000,"dur":100},{"pid":1,"tid":10,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520817000,"dur":29000},{"pid":1,"tid":10,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520846000,"dur":1000},{"pid":1,"tid":10,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520847000,"dur":4000},{"pid":1,"tid":10,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520852000,"dur":2000},{"pid":1,"tid":10,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520854000,"dur":100},{"pid":1,"tid":10,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518428520810000,"dur":44000},{"pid":1,"tid":10,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520854000,"dur":5000},{"pid":1,"tid":10,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520860000,"dur":8000},{"pid":1,"tid":10,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520805000,"dur":64000},{"pid":1,"tid":10,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520870000,"dur":2000},{"pid":1,"tid":10,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428520803000,"dur":69000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428520891000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520893000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520894000,"dur":42000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520936000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520943000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520949000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520949000,"dur":2000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520952000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520953000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428520954000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428520955000,"dur":161000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521116000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521118000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521122000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428521124000,"dur":613000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428521738000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521738000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521755000,"dur":12000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521767000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521770000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521771000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521772000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428521776000,"dur":51000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428521827000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521831000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521832000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521843000,"dur":17000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521861000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428521863000,"dur":63000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521928000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521931000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428521938000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521941000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521950000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521951000,"dur":17000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521968000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521969000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428521970000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521971000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521973000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521974000,"dur":13000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428521988000,"dur":20000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428522009000,"dur":6000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428522016000,"dur":9000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428522025000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428522027000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428522029000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518428522032000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428522034000,"dur":185000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428522220000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428522223000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518428522223000,"dur":100},{"pid":1,"tid":10,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518428522230000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-42-02-235.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-42-02-235.rawproto
new file mode 100644
index 00000000..931d9cd0
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-42-02-235.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-24-915.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-24-915.json
new file mode 100644
index 00000000..15648197
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-24-915.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141718000,"args":{"JVM stats":"heap_memory_usage: 399863600\nnon_heap_memory_usage: 165898712\nloaded_class_count: 16947\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141804000,"args":{"JVM stats":"heap_memory_usage: 410777472\nnon_heap_memory_usage: 166045312\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141804001,"args":{"JVM stats":"heap_memory_usage: 410924088\nnon_heap_memory_usage: 166045312\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141844000,"args":{"JVM stats":"heap_memory_usage: 417095312\nnon_heap_memory_usage: 166059008\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141850000,"args":{"JVM stats":"heap_memory_usage: 417535184\nnon_heap_memory_usage: 166059008\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141854000,"args":{"JVM stats":"heap_memory_usage: 417828440\nnon_heap_memory_usage: 166059008\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141855000,"args":{"JVM stats":"heap_memory_usage: 417828440\nnon_heap_memory_usage: 166059008\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141856000,"args":{"JVM stats":"heap_memory_usage: 417975056\nnon_heap_memory_usage: 166059008\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141856001,"args":{"JVM stats":"heap_memory_usage: 417975056\nnon_heap_memory_usage: 166068992\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141857000,"args":{"JVM stats":"heap_memory_usage: 417975056\nnon_heap_memory_usage: 166075392\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141858000,"args":{"JVM stats":"heap_memory_usage: 417975056\nnon_heap_memory_usage: 166072448\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141901000,"args":{"JVM stats":"heap_memory_usage: 421937088\nnon_heap_memory_usage: 166162504\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141902000,"args":{"JVM stats":"heap_memory_usage: 421937088\nnon_heap_memory_usage: 166163176\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141905000,"args":{"JVM stats":"heap_memory_usage: 422230384\nnon_heap_memory_usage: 166168624\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141906000,"args":{"JVM stats":"heap_memory_usage: 422376968\nnon_heap_memory_usage: 166174000\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141915000,"args":{"JVM stats":"heap_memory_usage: 423403768\nnon_heap_memory_usage: 166186928\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141915001,"args":{"JVM stats":"heap_memory_usage: 423403768\nnon_heap_memory_usage: 166186928\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141929000,"args":{"JVM stats":"heap_memory_usage: 423998392\nnon_heap_memory_usage: 166210176\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141937000,"args":{"JVM stats":"heap_memory_usage: 424585120\nnon_heap_memory_usage: 166211872\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141938000,"args":{"JVM stats":"heap_memory_usage: 424585120\nnon_heap_memory_usage: 166211872\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141939000,"args":{"JVM stats":"heap_memory_usage: 424732048\nnon_heap_memory_usage: 166211872\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141939001,"args":{"JVM stats":"heap_memory_usage: 424732048\nnon_heap_memory_usage: 166211872\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141941000,"args":{"JVM stats":"heap_memory_usage: 425318544\nnon_heap_memory_usage: 166234336\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141943000,"args":{"JVM stats":"heap_memory_usage: 425465248\nnon_heap_memory_usage: 166237344\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141948000,"args":{"JVM stats":"heap_memory_usage: 425766696\nnon_heap_memory_usage: 166237344\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141950000,"args":{"JVM stats":"heap_memory_usage: 425766696\nnon_heap_memory_usage: 166237344\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141956000,"args":{"JVM stats":"heap_memory_usage: 426353320\nnon_heap_memory_usage: 166237344\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141970000,"args":{"JVM stats":"heap_memory_usage: 427112208\nnon_heap_memory_usage: 166237344\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429141971000,"args":{"JVM stats":"heap_memory_usage: 427258872\nnon_heap_memory_usage: 166237344\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429144895000,"args":{"JVM stats":"heap_memory_usage: 428401984\nnon_heap_memory_usage: 166245904\nloaded_class_count: 16947\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429144901000,"args":{"JVM stats":"heap_memory_usage: 429135808\nnon_heap_memory_usage: 166272840\nloaded_class_count: 16948\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429144915000,"args":{"JVM stats":"heap_memory_usage: 431383792\nnon_heap_memory_usage: 166307816\nloaded_class_count: 16949\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":12,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141718000,"dur":3000},{"pid":1,"tid":12,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141721000,"dur":3000},{"pid":1,"tid":12,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141724000,"dur":100},{"pid":1,"tid":12,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141724000,"dur":100},{"pid":1,"tid":12,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141727000,"dur":3000},{"pid":1,"tid":12,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141730000,"dur":100},{"pid":1,"tid":12,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141730000,"dur":1000},{"pid":1,"tid":12,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141731000,"dur":100},{"pid":1,"tid":12,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141731000,"dur":100},{"pid":1,"tid":12,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141731000,"dur":100},{"pid":1,"tid":12,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141731000,"dur":100},{"pid":1,"tid":12,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141731000,"dur":1000},{"pid":1,"tid":12,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141732000,"dur":1000},{"pid":1,"tid":12,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141733000,"dur":100},{"pid":1,"tid":12,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141733000,"dur":100},{"pid":1,"tid":12,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141734000,"dur":100},{"pid":1,"tid":12,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141734000,"dur":30000},{"pid":1,"tid":12,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141764000,"dur":100},{"pid":1,"tid":12,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141764000,"dur":6000},{"pid":1,"tid":12,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141772000,"dur":3000},{"pid":1,"tid":12,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141775000,"dur":100},{"pid":1,"tid":12,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429141730000,"dur":45000},{"pid":1,"tid":12,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141775000,"dur":4000},{"pid":1,"tid":12,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141779000,"dur":7000},{"pid":1,"tid":12,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141727000,"dur":60000},{"pid":1,"tid":12,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141787000,"dur":3000},{"pid":1,"tid":12,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429141726000,"dur":64000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429141802000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141804000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141804000,"dur":40000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141845000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141850000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141854000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141855000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141856000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141857000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141858000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141858000,"dur":42000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141901000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141903000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141905000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141907000,"dur":8000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429141915000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141915000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141930000,"dur":7000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141937000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141938000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141939000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141939000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141942000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429141943000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141949000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141950000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141956000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429141971000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518429141972000,"dur":2923000},{"pid":1,"tid":0,"id":58,"name":"task: build info writer","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429144899000,"dur":2000},{"pid":1,"tid":12,"id":59,"name":"base plugin build finished","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429144907000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-24-915.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-24-915.rawproto
new file mode 100644
index 00000000..56a84d35
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-24-915.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-45-011.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-45-011.json
new file mode 100644
index 00000000..e4b6d30a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-45-011.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518429159855000,"args":{"JVM stats":"heap_memory_usage: 486109136\nnon_heap_memory_usage: 166668752\nloaded_class_count: 16964\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160016000,"args":{"JVM stats":"heap_memory_usage: 135681688\nnon_heap_memory_usage: 166818560\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 45\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160017000,"args":{"JVM stats":"heap_memory_usage: 135681688\nnon_heap_memory_usage: 166818560\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160072000,"args":{"JVM stats":"heap_memory_usage: 142346280\nnon_heap_memory_usage: 166871920\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160078000,"args":{"JVM stats":"heap_memory_usage: 142838696\nnon_heap_memory_usage: 166873136\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160088000,"args":{"JVM stats":"heap_memory_usage: 143128392\nnon_heap_memory_usage: 166878896\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160090000,"args":{"JVM stats":"heap_memory_usage: 143302224\nnon_heap_memory_usage: 166878896\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160092000,"args":{"JVM stats":"heap_memory_usage: 143302224\nnon_heap_memory_usage: 166878896\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160094000,"args":{"JVM stats":"heap_memory_usage: 143302224\nnon_heap_memory_usage: 166878896\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160095000,"args":{"JVM stats":"heap_memory_usage: 143302224\nnon_heap_memory_usage: 166878896\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160096000,"args":{"JVM stats":"heap_memory_usage: 143476056\nnon_heap_memory_usage: 166878896\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160144000,"args":{"JVM stats":"heap_memory_usage: 146925056\nnon_heap_memory_usage: 166930352\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160146000,"args":{"JVM stats":"heap_memory_usage: 147098872\nnon_heap_memory_usage: 166930352\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160149000,"args":{"JVM stats":"heap_memory_usage: 147345552\nnon_heap_memory_usage: 166930352\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160150000,"args":{"JVM stats":"heap_memory_usage: 147345552\nnon_heap_memory_usage: 166930352\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160160000,"args":{"JVM stats":"heap_memory_usage: 148533600\nnon_heap_memory_usage: 166934896\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160161000,"args":{"JVM stats":"heap_memory_usage: 148707440\nnon_heap_memory_usage: 166934896\nloaded_class_count: 16964\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160179000,"args":{"JVM stats":"heap_memory_usage: 149221824\nnon_heap_memory_usage: 166937576\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160189000,"args":{"JVM stats":"heap_memory_usage: 150035208\nnon_heap_memory_usage: 166937576\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160192000,"args":{"JVM stats":"heap_memory_usage: 150209144\nnon_heap_memory_usage: 166937576\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160193000,"args":{"JVM stats":"heap_memory_usage: 150209144\nnon_heap_memory_usage: 166938080\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160194000,"args":{"JVM stats":"heap_memory_usage: 150209144\nnon_heap_memory_usage: 166938080\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160199000,"args":{"JVM stats":"heap_memory_usage: 150456360\nnon_heap_memory_usage: 166954120\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160203000,"args":{"JVM stats":"heap_memory_usage: 150630192\nnon_heap_memory_usage: 166955528\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160209000,"args":{"JVM stats":"heap_memory_usage: 150978248\nnon_heap_memory_usage: 166955528\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160210000,"args":{"JVM stats":"heap_memory_usage: 150978248\nnon_heap_memory_usage: 166955528\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160221000,"args":{"JVM stats":"heap_memory_usage: 151499832\nnon_heap_memory_usage: 166955528\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160237000,"args":{"JVM stats":"heap_memory_usage: 152230296\nnon_heap_memory_usage: 166955528\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429160239000,"args":{"JVM stats":"heap_memory_usage: 152404112\nnon_heap_memory_usage: 166955528\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164381000,"args":{"JVM stats":"heap_memory_usage: 153362664\nnon_heap_memory_usage: 167161584\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164383000,"args":{"JVM stats":"heap_memory_usage: 153362664\nnon_heap_memory_usage: 167165360\nloaded_class_count: 16965\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164685000,"args":{"JVM stats":"heap_memory_usage: 175729088\nnon_heap_memory_usage: 167308776\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164686000,"args":{"JVM stats":"heap_memory_usage: 175907000\nnon_heap_memory_usage: 167309416\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164694000,"args":{"JVM stats":"heap_memory_usage: 176749176\nnon_heap_memory_usage: 167313256\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164697000,"args":{"JVM stats":"heap_memory_usage: 176924016\nnon_heap_memory_usage: 167314560\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164711000,"args":{"JVM stats":"heap_memory_usage: 178485200\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164713000,"args":{"JVM stats":"heap_memory_usage: 178659048\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164713001,"args":{"JVM stats":"heap_memory_usage: 178659048\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164714000,"args":{"JVM stats":"heap_memory_usage: 178659048\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164716000,"args":{"JVM stats":"heap_memory_usage: 178659048\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164718000,"args":{"JVM stats":"heap_memory_usage: 178659048\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164729000,"args":{"JVM stats":"heap_memory_usage: 179354976\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164746000,"args":{"JVM stats":"heap_memory_usage: 180866528\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164753000,"args":{"JVM stats":"heap_memory_usage: 181388296\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164760000,"args":{"JVM stats":"heap_memory_usage: 181910024\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164762000,"args":{"JVM stats":"heap_memory_usage: 181910024\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164764000,"args":{"JVM stats":"heap_memory_usage: 182083872\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164767000,"args":{"JVM stats":"heap_memory_usage: 182257800\nnon_heap_memory_usage: 167339912\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164825000,"args":{"JVM stats":"heap_memory_usage: 183301696\nnon_heap_memory_usage: 167344008\nloaded_class_count: 16966\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164996000,"args":{"JVM stats":"heap_memory_usage: 222713128\nnon_heap_memory_usage: 167375840\nloaded_class_count: 16966\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164998000,"args":{"JVM stats":"heap_memory_usage: 223068984\nnon_heap_memory_usage: 167375840\nloaded_class_count: 16966\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164998001,"args":{"JVM stats":"heap_memory_usage: 223068984\nnon_heap_memory_usage: 167375840\nloaded_class_count: 16966\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429164998000,"args":{"JVM stats":"heap_memory_usage: 223068984\nnon_heap_memory_usage: 167375840\nloaded_class_count: 16966\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429165011000,"args":{"JVM stats":"heap_memory_usage: 224288504\nnon_heap_memory_usage: 167378976\nloaded_class_count: 16966\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":12,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159855000,"dur":5000},{"pid":1,"tid":12,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159860000,"dur":4000},{"pid":1,"tid":12,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159864000,"dur":100},{"pid":1,"tid":12,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159864000,"dur":1000},{"pid":1,"tid":12,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159871000,"dur":8000},{"pid":1,"tid":12,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159879000,"dur":100},{"pid":1,"tid":12,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159880000,"dur":100},{"pid":1,"tid":12,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159880000,"dur":1000},{"pid":1,"tid":12,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159881000,"dur":100},{"pid":1,"tid":12,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159881000,"dur":100},{"pid":1,"tid":12,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159881000,"dur":1000},{"pid":1,"tid":12,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159882000,"dur":100},{"pid":1,"tid":12,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159882000,"dur":3000},{"pid":1,"tid":12,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159885000,"dur":1000},{"pid":1,"tid":12,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159886000,"dur":100},{"pid":1,"tid":12,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159886000,"dur":100},{"pid":1,"tid":12,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159886000,"dur":33000},{"pid":1,"tid":12,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159919000,"dur":1000},{"pid":1,"tid":12,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159920000,"dur":7000},{"pid":1,"tid":12,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159928000,"dur":2000},{"pid":1,"tid":12,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159930000,"dur":100},{"pid":1,"tid":12,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429159879000,"dur":51000},{"pid":1,"tid":12,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159930000,"dur":3000},{"pid":1,"tid":12,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159933000,"dur":11000},{"pid":1,"tid":12,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159871000,"dur":121000},{"pid":1,"tid":12,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159992000,"dur":3000},{"pid":1,"tid":12,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429159867000,"dur":128000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429160013000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160016000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160018000,"dur":53000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160072000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160080000,"dur":8000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160088000,"dur":2000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160091000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160093000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160094000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160096000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160097000,"dur":47000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160145000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160146000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160150000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160152000,"dur":8000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429160160000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160161000,"dur":17000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160179000,"dur":10000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160190000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160193000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160194000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160194000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160200000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429160204000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160209000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160211000,"dur":10000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160221000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429160238000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429160239000,"dur":4142000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164382000,"dur":1000},{"pid":1,"tid":13,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518429164452000,"dur":4000},{"pid":1,"tid":13,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518429164456000,"dur":152000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164384000,"dur":301000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164686000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164687000,"dur":7000},{"pid":1,"tid":13,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518429164696000,"dur":100},{"pid":1,"tid":13,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518429164696000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164695000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164697000,"dur":14000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164712000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164713000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164714000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164714000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164716000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164718000,"dur":11000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164729000,"dur":17000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164746000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164753000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164760000,"dur":2000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164762000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429164765000,"dur":2000},{"pid":1,"tid":13,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518429164771000,"dur":1000},{"pid":1,"tid":13,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518429164772000,"dur":40000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164768000,"dur":57000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164825000,"dur":171000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164996000,"dur":1000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164998000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429164998000,"dur":100},{"pid":1,"tid":12,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429165005000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-45-011.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-45-011.rawproto
new file mode 100644
index 00000000..e0a8db18
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-52-45-011.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-56-02-738.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-56-02-738.json
new file mode 100644
index 00000000..d3a27929
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-56-02-738.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357486000,"args":{"JVM stats":"heap_memory_usage: 280835848\nnon_heap_memory_usage: 167443896\nloaded_class_count: 16974\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357615000,"args":{"JVM stats":"heap_memory_usage: 292170768\nnon_heap_memory_usage: 167606760\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357615001,"args":{"JVM stats":"heap_memory_usage: 292170768\nnon_heap_memory_usage: 167616552\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357671000,"args":{"JVM stats":"heap_memory_usage: 298986744\nnon_heap_memory_usage: 167629288\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357677000,"args":{"JVM stats":"heap_memory_usage: 299508640\nnon_heap_memory_usage: 167629288\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357680000,"args":{"JVM stats":"heap_memory_usage: 299856376\nnon_heap_memory_usage: 167629288\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357681000,"args":{"JVM stats":"heap_memory_usage: 299856376\nnon_heap_memory_usage: 167629288\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357681001,"args":{"JVM stats":"heap_memory_usage: 299856376\nnon_heap_memory_usage: 167629288\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357682000,"args":{"JVM stats":"heap_memory_usage: 299856376\nnon_heap_memory_usage: 167629288\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357682001,"args":{"JVM stats":"heap_memory_usage: 300030512\nnon_heap_memory_usage: 167629288\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357683000,"args":{"JVM stats":"heap_memory_usage: 300030512\nnon_heap_memory_usage: 167629288\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357730000,"args":{"JVM stats":"heap_memory_usage: 303508064\nnon_heap_memory_usage: 167678040\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357731000,"args":{"JVM stats":"heap_memory_usage: 303508064\nnon_heap_memory_usage: 167678040\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357734000,"args":{"JVM stats":"heap_memory_usage: 303856192\nnon_heap_memory_usage: 167678040\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357735000,"args":{"JVM stats":"heap_memory_usage: 303856192\nnon_heap_memory_usage: 167678040\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357743000,"args":{"JVM stats":"heap_memory_usage: 304901616\nnon_heap_memory_usage: 167690840\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357743001,"args":{"JVM stats":"heap_memory_usage: 305075448\nnon_heap_memory_usage: 167681112\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357766000,"args":{"JVM stats":"heap_memory_usage: 305597432\nnon_heap_memory_usage: 167699864\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357774000,"args":{"JVM stats":"heap_memory_usage: 306119248\nnon_heap_memory_usage: 167717720\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357776000,"args":{"JVM stats":"heap_memory_usage: 306293048\nnon_heap_memory_usage: 167719320\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357777000,"args":{"JVM stats":"heap_memory_usage: 306293048\nnon_heap_memory_usage: 167719320\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357777001,"args":{"JVM stats":"heap_memory_usage: 306293048\nnon_heap_memory_usage: 167719320\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357780000,"args":{"JVM stats":"heap_memory_usage: 306640680\nnon_heap_memory_usage: 167719320\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357782000,"args":{"JVM stats":"heap_memory_usage: 306814856\nnon_heap_memory_usage: 167724352\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357785000,"args":{"JVM stats":"heap_memory_usage: 306988656\nnon_heap_memory_usage: 167724352\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357787000,"args":{"JVM stats":"heap_memory_usage: 307162488\nnon_heap_memory_usage: 167724352\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357795000,"args":{"JVM stats":"heap_memory_usage: 307683968\nnon_heap_memory_usage: 167724352\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357808000,"args":{"JVM stats":"heap_memory_usage: 308565912\nnon_heap_memory_usage: 167730000\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429357809000,"args":{"JVM stats":"heap_memory_usage: 308565912\nnon_heap_memory_usage: 167730000\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362126000,"args":{"JVM stats":"heap_memory_usage: 309658728\nnon_heap_memory_usage: 167730000\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362128000,"args":{"JVM stats":"heap_memory_usage: 309658728\nnon_heap_memory_usage: 167730000\nloaded_class_count: 16996\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362400000,"args":{"JVM stats":"heap_memory_usage: 331807312\nnon_heap_memory_usage: 167780328\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362400001,"args":{"JVM stats":"heap_memory_usage: 331807312\nnon_heap_memory_usage: 167780328\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362409000,"args":{"JVM stats":"heap_memory_usage: 333028360\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362411000,"args":{"JVM stats":"heap_memory_usage: 333202184\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362424000,"args":{"JVM stats":"heap_memory_usage: 334776768\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362425000,"args":{"JVM stats":"heap_memory_usage: 334950568\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362426000,"args":{"JVM stats":"heap_memory_usage: 334950568\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362426001,"args":{"JVM stats":"heap_memory_usage: 334950568\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362427000,"args":{"JVM stats":"heap_memory_usage: 334950568\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362428000,"args":{"JVM stats":"heap_memory_usage: 334950568\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362439000,"args":{"JVM stats":"heap_memory_usage: 335646200\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362455000,"args":{"JVM stats":"heap_memory_usage: 337041616\nnon_heap_memory_usage: 167781608\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362464000,"args":{"JVM stats":"heap_memory_usage: 337563232\nnon_heap_memory_usage: 167788856\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362473000,"args":{"JVM stats":"heap_memory_usage: 338085160\nnon_heap_memory_usage: 167789688\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362474000,"args":{"JVM stats":"heap_memory_usage: 338085160\nnon_heap_memory_usage: 167789688\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362476000,"args":{"JVM stats":"heap_memory_usage: 338258984\nnon_heap_memory_usage: 167789688\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362478000,"args":{"JVM stats":"heap_memory_usage: 338258984\nnon_heap_memory_usage: 167793040\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362533000,"args":{"JVM stats":"heap_memory_usage: 339480760\nnon_heap_memory_usage: 167803304\nloaded_class_count: 16997\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362723000,"args":{"JVM stats":"heap_memory_usage: 378916320\nnon_heap_memory_usage: 167889320\nloaded_class_count: 16997\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362726000,"args":{"JVM stats":"heap_memory_usage: 379272336\nnon_heap_memory_usage: 167865704\nloaded_class_count: 16997\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362726001,"args":{"JVM stats":"heap_memory_usage: 379272336\nnon_heap_memory_usage: 167866408\nloaded_class_count: 16997\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362726000,"args":{"JVM stats":"heap_memory_usage: 379272336\nnon_heap_memory_usage: 167866408\nloaded_class_count: 16997\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429362738000,"args":{"JVM stats":"heap_memory_usage: 380490600\nnon_heap_memory_usage: 167926216\nloaded_class_count: 16997\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":14,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357486000,"dur":8000},{"pid":1,"tid":14,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357494000,"dur":5000},{"pid":1,"tid":14,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357499000,"dur":1000},{"pid":1,"tid":14,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357499000,"dur":1000},{"pid":1,"tid":14,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357505000,"dur":4000},{"pid":1,"tid":14,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357509000,"dur":100},{"pid":1,"tid":14,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357510000,"dur":100},{"pid":1,"tid":14,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357510000,"dur":100},{"pid":1,"tid":14,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357510000,"dur":1000},{"pid":1,"tid":14,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357511000,"dur":100},{"pid":1,"tid":14,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357511000,"dur":100},{"pid":1,"tid":14,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357511000,"dur":100},{"pid":1,"tid":14,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357511000,"dur":3000},{"pid":1,"tid":14,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357514000,"dur":1000},{"pid":1,"tid":14,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357515000,"dur":100},{"pid":1,"tid":14,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357515000,"dur":100},{"pid":1,"tid":14,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357515000,"dur":37000},{"pid":1,"tid":14,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357552000,"dur":1000},{"pid":1,"tid":14,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357553000,"dur":7000},{"pid":1,"tid":14,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357562000,"dur":2000},{"pid":1,"tid":14,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357564000,"dur":100},{"pid":1,"tid":14,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429357509000,"dur":55000},{"pid":1,"tid":14,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357564000,"dur":3000},{"pid":1,"tid":14,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357567000,"dur":20000},{"pid":1,"tid":14,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357505000,"dur":83000},{"pid":1,"tid":14,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357588000,"dur":3000},{"pid":1,"tid":14,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429357502000,"dur":89000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429357613000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357615000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357616000,"dur":55000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357672000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357677000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357680000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357681000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357682000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357682000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357683000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357683000,"dur":47000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357730000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357732000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357735000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357737000,"dur":6000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429357743000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357744000,"dur":21000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357766000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357775000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357776000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357777000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357778000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357780000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429357782000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357786000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357788000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357796000,"dur":12000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429357808000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429357809000,"dur":4317000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362127000,"dur":1000},{"pid":1,"tid":15,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518429362192000,"dur":5000},{"pid":1,"tid":15,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518429362197000,"dur":132000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362128000,"dur":271000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362400000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362401000,"dur":8000},{"pid":1,"tid":15,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518429362410000,"dur":1000},{"pid":1,"tid":15,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518429362411000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362409000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362412000,"dur":12000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362424000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362425000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362426000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362426000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362428000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362429000,"dur":10000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362439000,"dur":16000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362456000,"dur":8000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362465000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362473000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362474000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429362477000,"dur":1000},{"pid":1,"tid":15,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518429362481000,"dur":100},{"pid":1,"tid":15,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518429362481000,"dur":39000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362479000,"dur":54000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362534000,"dur":189000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362724000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362726000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429362726000,"dur":100},{"pid":1,"tid":14,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429362731000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-56-02-738.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-56-02-738.rawproto
new file mode 100644
index 00000000..76c4da42
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-56-02-738.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-57-46-096.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-57-46-096.json
new file mode 100644
index 00000000..e439c355
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-57-46-096.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464515000,"args":{"JVM stats":"heap_memory_usage: 435712352\nnon_heap_memory_usage: 167754560\nloaded_class_count: 17004\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464588000,"args":{"JVM stats":"heap_memory_usage: 446856768\nnon_heap_memory_usage: 167766728\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464589000,"args":{"JVM stats":"heap_memory_usage: 446856768\nnon_heap_memory_usage: 167766728\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464626000,"args":{"JVM stats":"heap_memory_usage: 453674776\nnon_heap_memory_usage: 167753432\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464630000,"args":{"JVM stats":"heap_memory_usage: 453848600\nnon_heap_memory_usage: 167753432\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464633000,"args":{"JVM stats":"heap_memory_usage: 454196584\nnon_heap_memory_usage: 167753432\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464634000,"args":{"JVM stats":"heap_memory_usage: 454196584\nnon_heap_memory_usage: 167753432\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464634001,"args":{"JVM stats":"heap_memory_usage: 454196584\nnon_heap_memory_usage: 167753432\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464635000,"args":{"JVM stats":"heap_memory_usage: 454196584\nnon_heap_memory_usage: 167753432\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464635001,"args":{"JVM stats":"heap_memory_usage: 454370408\nnon_heap_memory_usage: 167753432\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464636000,"args":{"JVM stats":"heap_memory_usage: 454370408\nnon_heap_memory_usage: 167753432\nloaded_class_count: 17007\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464810000,"args":{"JVM stats":"heap_memory_usage: 156436280\nnon_heap_memory_usage: 167803360\nloaded_class_count: 17007\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 23\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464812000,"args":{"JVM stats":"heap_memory_usage: 158230400\nnon_heap_memory_usage: 167803360\nloaded_class_count: 17007\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464815000,"args":{"JVM stats":"heap_memory_usage: 159145976\nnon_heap_memory_usage: 167804128\nloaded_class_count: 17007\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429464816000,"args":{"JVM stats":"heap_memory_usage: 159211528\nnon_heap_memory_usage: 167804128\nloaded_class_count: 17007\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465358000,"args":{"JVM stats":"heap_memory_usage: 173719792\nnon_heap_memory_usage: 167895472\nloaded_class_count: 17007\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465359000,"args":{"JVM stats":"heap_memory_usage: 174219424\nnon_heap_memory_usage: 167895472\nloaded_class_count: 17007\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465375000,"args":{"JVM stats":"heap_memory_usage: 175057488\nnon_heap_memory_usage: 167895408\nloaded_class_count: 17007\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465393000,"args":{"JVM stats":"heap_memory_usage: 176051272\nnon_heap_memory_usage: 167897832\nloaded_class_count: 17008\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465396000,"args":{"JVM stats":"heap_memory_usage: 176051272\nnon_heap_memory_usage: 167897832\nloaded_class_count: 17008\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465399000,"args":{"JVM stats":"heap_memory_usage: 176051272\nnon_heap_memory_usage: 167898280\nloaded_class_count: 17008\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465400000,"args":{"JVM stats":"heap_memory_usage: 176051272\nnon_heap_memory_usage: 167900776\nloaded_class_count: 17008\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465404000,"args":{"JVM stats":"heap_memory_usage: 176367376\nnon_heap_memory_usage: 167899496\nloaded_class_count: 17008\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465455000,"args":{"JVM stats":"heap_memory_usage: 184723000\nnon_heap_memory_usage: 167868296\nloaded_class_count: 17008\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465460000,"args":{"JVM stats":"heap_memory_usage: 185223944\nnon_heap_memory_usage: 167849560\nloaded_class_count: 17008\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465463000,"args":{"JVM stats":"heap_memory_usage: 185223944\nnon_heap_memory_usage: 167844760\nloaded_class_count: 17008\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465471000,"args":{"JVM stats":"heap_memory_usage: 185856320\nnon_heap_memory_usage: 167848152\nloaded_class_count: 17008\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465487000,"args":{"JVM stats":"heap_memory_usage: 186482712\nnon_heap_memory_usage: 167848152\nloaded_class_count: 17008\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465487001,"args":{"JVM stats":"heap_memory_usage: 186482712\nnon_heap_memory_usage: 167848152\nloaded_class_count: 17008\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465543000,"args":{"JVM stats":"heap_memory_usage: 187371736\nnon_heap_memory_usage: 167911344\nloaded_class_count: 17009\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465544000,"args":{"JVM stats":"heap_memory_usage: 187371736\nnon_heap_memory_usage: 167911344\nloaded_class_count: 17009\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465677000,"args":{"JVM stats":"heap_memory_usage: 188639512\nnon_heap_memory_usage: 167935024\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465678000,"args":{"JVM stats":"heap_memory_usage: 188639512\nnon_heap_memory_usage: 167935024\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465686000,"args":{"JVM stats":"heap_memory_usage: 189540872\nnon_heap_memory_usage: 167935024\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465744000,"args":{"JVM stats":"heap_memory_usage: 189540872\nnon_heap_memory_usage: 167958320\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465757000,"args":{"JVM stats":"heap_memory_usage: 190935784\nnon_heap_memory_usage: 167963760\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465758000,"args":{"JVM stats":"heap_memory_usage: 191251896\nnon_heap_memory_usage: 167983856\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465758001,"args":{"JVM stats":"heap_memory_usage: 191251896\nnon_heap_memory_usage: 167983856\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465759000,"args":{"JVM stats":"heap_memory_usage: 191251896\nnon_heap_memory_usage: 167983856\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465760000,"args":{"JVM stats":"heap_memory_usage: 191251896\nnon_heap_memory_usage: 168025456\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465760001,"args":{"JVM stats":"heap_memory_usage: 191251896\nnon_heap_memory_usage: 167999920\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465771000,"args":{"JVM stats":"heap_memory_usage: 191884576\nnon_heap_memory_usage: 167999920\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465787000,"args":{"JVM stats":"heap_memory_usage: 193414064\nnon_heap_memory_usage: 167999920\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465795000,"args":{"JVM stats":"heap_memory_usage: 193730192\nnon_heap_memory_usage: 167999920\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465804000,"args":{"JVM stats":"heap_memory_usage: 194362560\nnon_heap_memory_usage: 167999920\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465805000,"args":{"JVM stats":"heap_memory_usage: 194362560\nnon_heap_memory_usage: 167999920\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465807000,"args":{"JVM stats":"heap_memory_usage: 194678792\nnon_heap_memory_usage: 168000688\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465808000,"args":{"JVM stats":"heap_memory_usage: 194678792\nnon_heap_memory_usage: 168000688\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429465884000,"args":{"JVM stats":"heap_memory_usage: 194770424\nnon_heap_memory_usage: 168000688\nloaded_class_count: 17009\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429466081000,"args":{"JVM stats":"heap_memory_usage: 233082720\nnon_heap_memory_usage: 168041720\nloaded_class_count: 17009\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429466082000,"args":{"JVM stats":"heap_memory_usage: 233183312\nnon_heap_memory_usage: 168043584\nloaded_class_count: 17009\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429466083000,"args":{"JVM stats":"heap_memory_usage: 233267456\nnon_heap_memory_usage: 168043584\nloaded_class_count: 17009\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429466083001,"args":{"JVM stats":"heap_memory_usage: 233267456\nnon_heap_memory_usage: 168043584\nloaded_class_count: 17009\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429466097000,"args":{"JVM stats":"heap_memory_usage: 234006336\nnon_heap_memory_usage: 168091392\nloaded_class_count: 17009\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464515000,"dur":3000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464518000,"dur":3000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464521000,"dur":4000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464521000,"dur":4000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464529000,"dur":1000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464530000,"dur":1000},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464531000,"dur":100},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464531000,"dur":100},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464531000,"dur":1000},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464532000,"dur":100},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464532000,"dur":100},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464532000,"dur":100},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464532000,"dur":2000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464534000,"dur":100},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464534000,"dur":1000},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464535000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464535000,"dur":22000},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464557000,"dur":1000},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464558000,"dur":4000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464563000,"dur":2000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464565000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429464531000,"dur":34000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464565000,"dur":2000},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464567000,"dur":4000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464529000,"dur":42000},{"pid":1,"tid":16,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464572000,"dur":2000},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429464527000,"dur":47000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429464586000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464588000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464589000,"dur":37000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464627000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464631000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464633000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464634000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464634000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464635000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464636000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429464636000,"dur":174000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464811000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464813000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429464815000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429464816000,"dur":542000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429465359000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465360000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465375000,"dur":18000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465394000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465397000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465399000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465401000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429465404000,"dur":50000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429465455000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465461000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465464000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465471000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465487000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429465488000,"dur":55000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465543000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465544000,"dur":133000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429465678000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465679000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465686000,"dur":58000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465745000,"dur":12000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465757000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465758000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429465758000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465759000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465760000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465761000,"dur":10000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465771000,"dur":16000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465788000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465796000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429465804000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465805000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465807000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429465809000,"dur":75000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429465885000,"dur":196000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429466081000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429466083000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429466083000,"dur":100},{"pid":1,"tid":16,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429466089000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-57-46-096.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-57-46-096.rawproto
new file mode 100644
index 00000000..543df000
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-57-46-096.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-12-940.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-12-940.json
new file mode 100644
index 00000000..fd05adc8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-12-940.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491444000,"args":{"JVM stats":"heap_memory_usage: 289063640\nnon_heap_memory_usage: 168301568\nloaded_class_count: 17017\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491538000,"args":{"JVM stats":"heap_memory_usage: 299694552\nnon_heap_memory_usage: 168425944\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491538001,"args":{"JVM stats":"heap_memory_usage: 299837776\nnon_heap_memory_usage: 168425944\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491580000,"args":{"JVM stats":"heap_memory_usage: 306184656\nnon_heap_memory_usage: 168457400\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491585000,"args":{"JVM stats":"heap_memory_usage: 306471152\nnon_heap_memory_usage: 168457400\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491588000,"args":{"JVM stats":"heap_memory_usage: 306901456\nnon_heap_memory_usage: 168457400\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491589000,"args":{"JVM stats":"heap_memory_usage: 307044712\nnon_heap_memory_usage: 168457400\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491590000,"args":{"JVM stats":"heap_memory_usage: 307044712\nnon_heap_memory_usage: 168457400\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491590001,"args":{"JVM stats":"heap_memory_usage: 307044712\nnon_heap_memory_usage: 168472632\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491591000,"args":{"JVM stats":"heap_memory_usage: 307188272\nnon_heap_memory_usage: 168459960\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491591001,"args":{"JVM stats":"heap_memory_usage: 307188272\nnon_heap_memory_usage: 168459960\nloaded_class_count: 17024\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491733000,"args":{"JVM stats":"heap_memory_usage: 340526032\nnon_heap_memory_usage: 168533664\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491735000,"args":{"JVM stats":"heap_memory_usage: 340898680\nnon_heap_memory_usage: 168533664\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491739000,"args":{"JVM stats":"heap_memory_usage: 341590480\nnon_heap_memory_usage: 168535136\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429491740000,"args":{"JVM stats":"heap_memory_usage: 341729128\nnon_heap_memory_usage: 168535136\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492434000,"args":{"JVM stats":"heap_memory_usage: 356467416\nnon_heap_memory_usage: 168698328\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492436000,"args":{"JVM stats":"heap_memory_usage: 356532968\nnon_heap_memory_usage: 168699032\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492452000,"args":{"JVM stats":"heap_memory_usage: 357505832\nnon_heap_memory_usage: 168575016\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492461000,"args":{"JVM stats":"heap_memory_usage: 358223344\nnon_heap_memory_usage: 168580360\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492464000,"args":{"JVM stats":"heap_memory_usage: 358223344\nnon_heap_memory_usage: 168580360\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492466000,"args":{"JVM stats":"heap_memory_usage: 358366568\nnon_heap_memory_usage: 168585736\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492467000,"args":{"JVM stats":"heap_memory_usage: 358366568\nnon_heap_memory_usage: 168581832\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492470000,"args":{"JVM stats":"heap_memory_usage: 358509792\nnon_heap_memory_usage: 168581128\nloaded_class_count: 17024\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492529000,"args":{"JVM stats":"heap_memory_usage: 367028824\nnon_heap_memory_usage: 168568160\nloaded_class_count: 17024\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492537000,"args":{"JVM stats":"heap_memory_usage: 367470888\nnon_heap_memory_usage: 168565368\nloaded_class_count: 17025\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492538000,"args":{"JVM stats":"heap_memory_usage: 367614248\nnon_heap_memory_usage: 168565368\nloaded_class_count: 17025\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492550000,"args":{"JVM stats":"heap_memory_usage: 368188344\nnon_heap_memory_usage: 168567440\nloaded_class_count: 17025\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492566000,"args":{"JVM stats":"heap_memory_usage: 369052640\nnon_heap_memory_usage: 168586192\nloaded_class_count: 17025\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492568000,"args":{"JVM stats":"heap_memory_usage: 369052640\nnon_heap_memory_usage: 168586192\nloaded_class_count: 17025\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492635000,"args":{"JVM stats":"heap_memory_usage: 369914368\nnon_heap_memory_usage: 168619632\nloaded_class_count: 17025\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492637000,"args":{"JVM stats":"heap_memory_usage: 370057672\nnon_heap_memory_usage: 168619632\nloaded_class_count: 17025\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492649000,"args":{"JVM stats":"heap_memory_usage: 370773944\nnon_heap_memory_usage: 168619632\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492651000,"args":{"JVM stats":"heap_memory_usage: 370773944\nnon_heap_memory_usage: 168619632\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492660000,"args":{"JVM stats":"heap_memory_usage: 371490752\nnon_heap_memory_usage: 168619632\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492663000,"args":{"JVM stats":"heap_memory_usage: 371490752\nnon_heap_memory_usage: 168619632\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492680000,"args":{"JVM stats":"heap_memory_usage: 373067392\nnon_heap_memory_usage: 168627504\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492682000,"args":{"JVM stats":"heap_memory_usage: 373210648\nnon_heap_memory_usage: 168627504\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492683000,"args":{"JVM stats":"heap_memory_usage: 373210648\nnon_heap_memory_usage: 168627504\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492683001,"args":{"JVM stats":"heap_memory_usage: 373210648\nnon_heap_memory_usage: 168627504\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492686000,"args":{"JVM stats":"heap_memory_usage: 373210648\nnon_heap_memory_usage: 168627504\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492688000,"args":{"JVM stats":"heap_memory_usage: 373222984\nnon_heap_memory_usage: 168630512\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492700000,"args":{"JVM stats":"heap_memory_usage: 373939928\nnon_heap_memory_usage: 168630512\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492718000,"args":{"JVM stats":"heap_memory_usage: 375664536\nnon_heap_memory_usage: 168630512\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492732000,"args":{"JVM stats":"heap_memory_usage: 376241912\nnon_heap_memory_usage: 168642352\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492742000,"args":{"JVM stats":"heap_memory_usage: 376671688\nnon_heap_memory_usage: 168642352\nloaded_class_count: 17025\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492745000,"args":{"JVM stats":"heap_memory_usage: 376814944\nnon_heap_memory_usage: 168649088\nloaded_class_count: 17027\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492748000,"args":{"JVM stats":"heap_memory_usage: 376958224\nnon_heap_memory_usage: 168654400\nloaded_class_count: 17027\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492751000,"args":{"JVM stats":"heap_memory_usage: 376958224\nnon_heap_memory_usage: 168666432\nloaded_class_count: 17027\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492753000,"args":{"JVM stats":"heap_memory_usage: 377101704\nnon_heap_memory_usage: 168667768\nloaded_class_count: 17027\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492925000,"args":{"JVM stats":"heap_memory_usage: 415299848\nnon_heap_memory_usage: 168694504\nloaded_class_count: 17028\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492927000,"args":{"JVM stats":"heap_memory_usage: 415624024\nnon_heap_memory_usage: 168700480\nloaded_class_count: 17029\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492927001,"args":{"JVM stats":"heap_memory_usage: 415624024\nnon_heap_memory_usage: 168700480\nloaded_class_count: 17029\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492928000,"args":{"JVM stats":"heap_memory_usage: 415624024\nnon_heap_memory_usage: 168700480\nloaded_class_count: 17029\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429492940000,"args":{"JVM stats":"heap_memory_usage: 416933416\nnon_heap_memory_usage: 168714536\nloaded_class_count: 17029\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491444000,"dur":5000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491449000,"dur":3000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491452000,"dur":1000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491452000,"dur":1000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491456000,"dur":2000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491458000,"dur":100},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491458000,"dur":1000},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491459000,"dur":100},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491459000,"dur":100},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491459000,"dur":100},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491459000,"dur":100},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491459000,"dur":100},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491459000,"dur":2000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491461000,"dur":100},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491461000,"dur":1000},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491462000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491462000,"dur":28000},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491490000,"dur":1000},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491491000,"dur":12000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491506000,"dur":5000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491511000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429491458000,"dur":53000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491511000,"dur":6000},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491517000,"dur":5000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491456000,"dur":66000},{"pid":1,"tid":16,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491522000,"dur":2000},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429491455000,"dur":69000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429491537000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491538000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491539000,"dur":41000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491581000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491586000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491589000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491589000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491590000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491591000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491591000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429491592000,"dur":141000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491734000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491736000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429491739000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429491741000,"dur":693000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492435000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492436000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492452000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492462000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492465000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492467000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492468000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492471000,"dur":58000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492530000,"dur":7000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492537000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492539000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492550000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492566000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492568000,"dur":67000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492636000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492638000,"dur":11000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492650000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492651000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492660000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492663000,"dur":16000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492680000,"dur":2000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492682000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492683000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492684000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492687000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492688000,"dur":12000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492701000,"dur":17000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492719000,"dur":12000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492733000,"dur":9000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492742000,"dur":3000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492745000,"dur":3000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492749000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429492751000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492753000,"dur":172000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492925000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492927000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429492928000,"dur":100},{"pid":1,"tid":16,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429492934000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-12-940.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-12-940.rawproto
new file mode 100644
index 00000000..a99b3ff3
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-12-940.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-47-378.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-47-378.json
new file mode 100644
index 00000000..58e540a5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-47-378.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525784000,"args":{"JVM stats":"heap_memory_usage: 469392120\nnon_heap_memory_usage: 168869944\nloaded_class_count: 17036\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525881000,"args":{"JVM stats":"heap_memory_usage: 479993136\nnon_heap_memory_usage: 168966232\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525882000,"args":{"JVM stats":"heap_memory_usage: 480136408\nnon_heap_memory_usage: 168966232\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525969000,"args":{"JVM stats":"heap_memory_usage: 137056280\nnon_heap_memory_usage: 168972216\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 29\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525977000,"args":{"JVM stats":"heap_memory_usage: 137418080\nnon_heap_memory_usage: 168972920\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525981000,"args":{"JVM stats":"heap_memory_usage: 137705424\nnon_heap_memory_usage: 168972920\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525981001,"args":{"JVM stats":"heap_memory_usage: 137705424\nnon_heap_memory_usage: 168978296\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525983000,"args":{"JVM stats":"heap_memory_usage: 137778984\nnon_heap_memory_usage: 168996792\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525983001,"args":{"JVM stats":"heap_memory_usage: 137852592\nnon_heap_memory_usage: 168998896\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525985000,"args":{"JVM stats":"heap_memory_usage: 137852592\nnon_heap_memory_usage: 168999856\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429525986000,"args":{"JVM stats":"heap_memory_usage: 137852592\nnon_heap_memory_usage: 169031280\nloaded_class_count: 17036\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526161000,"args":{"JVM stats":"heap_memory_usage: 172400496\nnon_heap_memory_usage: 169127208\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526162000,"args":{"JVM stats":"heap_memory_usage: 172707560\nnon_heap_memory_usage: 169127208\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526167000,"args":{"JVM stats":"heap_memory_usage: 173393824\nnon_heap_memory_usage: 169120424\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526168000,"args":{"JVM stats":"heap_memory_usage: 173489832\nnon_heap_memory_usage: 169124544\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526823000,"args":{"JVM stats":"heap_memory_usage: 188209288\nnon_heap_memory_usage: 169265664\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526824000,"args":{"JVM stats":"heap_memory_usage: 188413632\nnon_heap_memory_usage: 169265664\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526841000,"args":{"JVM stats":"heap_memory_usage: 189454088\nnon_heap_memory_usage: 169278976\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526851000,"args":{"JVM stats":"heap_memory_usage: 190010568\nnon_heap_memory_usage: 169278976\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526854000,"args":{"JVM stats":"heap_memory_usage: 190079976\nnon_heap_memory_usage: 169278976\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526855000,"args":{"JVM stats":"heap_memory_usage: 190079976\nnon_heap_memory_usage: 169278976\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526855001,"args":{"JVM stats":"heap_memory_usage: 190149880\nnon_heap_memory_usage: 169278976\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526860000,"args":{"JVM stats":"heap_memory_usage: 190358160\nnon_heap_memory_usage: 169279744\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526912000,"args":{"JVM stats":"heap_memory_usage: 199136176\nnon_heap_memory_usage: 169285504\nloaded_class_count: 17036\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526915000,"args":{"JVM stats":"heap_memory_usage: 199532544\nnon_heap_memory_usage: 169286176\nloaded_class_count: 17036\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526918000,"args":{"JVM stats":"heap_memory_usage: 199601920\nnon_heap_memory_usage: 169292032\nloaded_class_count: 17036\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526929000,"args":{"JVM stats":"heap_memory_usage: 200158432\nnon_heap_memory_usage: 169337072\nloaded_class_count: 17036\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526948000,"args":{"JVM stats":"heap_memory_usage: 201065808\nnon_heap_memory_usage: 169337072\nloaded_class_count: 17036\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429526949000,"args":{"JVM stats":"heap_memory_usage: 201135208\nnon_heap_memory_usage: 169337072\nloaded_class_count: 17036\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527015000,"args":{"JVM stats":"heap_memory_usage: 201992576\nnon_heap_memory_usage: 169356784\nloaded_class_count: 17036\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527017000,"args":{"JVM stats":"heap_memory_usage: 202061976\nnon_heap_memory_usage: 169356784\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527025000,"args":{"JVM stats":"heap_memory_usage: 202272224\nnon_heap_memory_usage: 169357872\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527026000,"args":{"JVM stats":"heap_memory_usage: 202272224\nnon_heap_memory_usage: 169357872\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527033000,"args":{"JVM stats":"heap_memory_usage: 202483776\nnon_heap_memory_usage: 169357872\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527034000,"args":{"JVM stats":"heap_memory_usage: 203715080\nnon_heap_memory_usage: 169357872\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527048000,"args":{"JVM stats":"heap_memory_usage: 204281792\nnon_heap_memory_usage: 169357872\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527049000,"args":{"JVM stats":"heap_memory_usage: 204281792\nnon_heap_memory_usage: 169358448\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527049001,"args":{"JVM stats":"heap_memory_usage: 204281792\nnon_heap_memory_usage: 169358448\nloaded_class_count: 17036\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527050000,"args":{"JVM stats":"heap_memory_usage: 204281792\nnon_heap_memory_usage: 169362824\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527051000,"args":{"JVM stats":"heap_memory_usage: 204281792\nnon_heap_memory_usage: 169362824\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527054000,"args":{"JVM stats":"heap_memory_usage: 204351168\nnon_heap_memory_usage: 169364168\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527067000,"args":{"JVM stats":"heap_memory_usage: 205582432\nnon_heap_memory_usage: 169364168\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527108000,"args":{"JVM stats":"heap_memory_usage: 207094032\nnon_heap_memory_usage: 169364168\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527116000,"args":{"JVM stats":"heap_memory_usage: 207094032\nnon_heap_memory_usage: 169364168\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527126000,"args":{"JVM stats":"heap_memory_usage: 208325304\nnon_heap_memory_usage: 169364168\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527127000,"args":{"JVM stats":"heap_memory_usage: 208325304\nnon_heap_memory_usage: 169364232\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527130000,"args":{"JVM stats":"heap_memory_usage: 208325304\nnon_heap_memory_usage: 169364232\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527132000,"args":{"JVM stats":"heap_memory_usage: 208325304\nnon_heap_memory_usage: 169364232\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527135000,"args":{"JVM stats":"heap_memory_usage: 208394720\nnon_heap_memory_usage: 169365064\nloaded_class_count: 17037\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527359000,"args":{"JVM stats":"heap_memory_usage: 246452408\nnon_heap_memory_usage: 169479872\nloaded_class_count: 17037\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527361000,"args":{"JVM stats":"heap_memory_usage: 246758528\nnon_heap_memory_usage: 169479904\nloaded_class_count: 17037\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527361001,"args":{"JVM stats":"heap_memory_usage: 246758528\nnon_heap_memory_usage: 169479904\nloaded_class_count: 17037\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527361000,"args":{"JVM stats":"heap_memory_usage: 246758528\nnon_heap_memory_usage: 169479904\nloaded_class_count: 17037\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429527378000,"args":{"JVM stats":"heap_memory_usage: 248059296\nnon_heap_memory_usage: 169517768\nloaded_class_count: 17046\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525785000,"dur":5000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525790000,"dur":4000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525794000,"dur":2000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525794000,"dur":2000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525799000,"dur":2000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525801000,"dur":100},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525802000,"dur":100},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525802000,"dur":1000},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525803000,"dur":100},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525803000,"dur":100},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525803000,"dur":1000},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525804000,"dur":100},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525804000,"dur":3000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525807000,"dur":100},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525807000,"dur":100},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525807000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525807000,"dur":29000},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525836000,"dur":1000},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525837000,"dur":7000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525845000,"dur":2000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525847000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429525801000,"dur":46000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525847000,"dur":3000},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525850000,"dur":7000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525798000,"dur":60000},{"pid":1,"tid":16,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525858000,"dur":2000},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429525797000,"dur":63000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429525880000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525882000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525882000,"dur":87000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525970000,"dur":7000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525978000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525981000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525982000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525983000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525984000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429525986000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429525987000,"dur":174000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526162000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526163000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526167000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429526169000,"dur":654000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429526824000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526824000,"dur":17000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526842000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526851000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526854000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526855000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526855000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429526860000,"dur":52000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429526912000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526916000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526918000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526930000,"dur":18000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429526948000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429526949000,"dur":66000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527016000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527018000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429527026000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527026000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527033000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527034000,"dur":14000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527048000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527049000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429527049000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527050000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527052000,"dur":2000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527054000,"dur":13000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527067000,"dur":41000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527108000,"dur":8000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527116000,"dur":10000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429527126000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527128000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527130000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429527133000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429527135000,"dur":224000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429527359000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429527361000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429527361000,"dur":100},{"pid":1,"tid":16,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429527367000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-47-378.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-47-378.rawproto
new file mode 100644
index 00000000..66dc9c07
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-58-47-378.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-59-19-815.json b/IGetAndroid/build/android-profile/profile-2018-02-12-10-59-19-815.json
new file mode 100644
index 00000000..f176338a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-59-19-815.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558260000,"args":{"JVM stats":"heap_memory_usage: 302562624\nnon_heap_memory_usage: 169618496\nloaded_class_count: 17053\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558382000,"args":{"JVM stats":"heap_memory_usage: 313862480\nnon_heap_memory_usage: 169815048\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558382001,"args":{"JVM stats":"heap_memory_usage: 314007944\nnon_heap_memory_usage: 169815048\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558422000,"args":{"JVM stats":"heap_memory_usage: 320297208\nnon_heap_memory_usage: 169847704\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558426000,"args":{"JVM stats":"heap_memory_usage: 320732360\nnon_heap_memory_usage: 169849112\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558430000,"args":{"JVM stats":"heap_memory_usage: 320877328\nnon_heap_memory_usage: 169849112\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558430001,"args":{"JVM stats":"heap_memory_usage: 320877328\nnon_heap_memory_usage: 169849112\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558431000,"args":{"JVM stats":"heap_memory_usage: 321022296\nnon_heap_memory_usage: 169849112\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558432000,"args":{"JVM stats":"heap_memory_usage: 321022296\nnon_heap_memory_usage: 169849112\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558433000,"args":{"JVM stats":"heap_memory_usage: 321022296\nnon_heap_memory_usage: 169849112\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558433001,"args":{"JVM stats":"heap_memory_usage: 321022296\nnon_heap_memory_usage: 169849112\nloaded_class_count: 17053\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558586000,"args":{"JVM stats":"heap_memory_usage: 354813624\nnon_heap_memory_usage: 169870616\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558587000,"args":{"JVM stats":"heap_memory_usage: 355043048\nnon_heap_memory_usage: 169870616\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558591000,"args":{"JVM stats":"heap_memory_usage: 355959944\nnon_heap_memory_usage: 169870616\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429558592000,"args":{"JVM stats":"heap_memory_usage: 356108992\nnon_heap_memory_usage: 169870616\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559198000,"args":{"JVM stats":"heap_memory_usage: 370327992\nnon_heap_memory_usage: 169919088\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559199000,"args":{"JVM stats":"heap_memory_usage: 370393544\nnon_heap_memory_usage: 169920688\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559214000,"args":{"JVM stats":"heap_memory_usage: 371513184\nnon_heap_memory_usage: 169910832\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559227000,"args":{"JVM stats":"heap_memory_usage: 372239088\nnon_heap_memory_usage: 169910832\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559229000,"args":{"JVM stats":"heap_memory_usage: 372384352\nnon_heap_memory_usage: 169910832\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559230000,"args":{"JVM stats":"heap_memory_usage: 372384352\nnon_heap_memory_usage: 169910832\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559231000,"args":{"JVM stats":"heap_memory_usage: 372384352\nnon_heap_memory_usage: 169910832\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559235000,"args":{"JVM stats":"heap_memory_usage: 372675288\nnon_heap_memory_usage: 169910832\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559291000,"args":{"JVM stats":"heap_memory_usage: 381292192\nnon_heap_memory_usage: 169823280\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559297000,"args":{"JVM stats":"heap_memory_usage: 381731168\nnon_heap_memory_usage: 169830192\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559300000,"args":{"JVM stats":"heap_memory_usage: 381876136\nnon_heap_memory_usage: 169830192\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559311000,"args":{"JVM stats":"heap_memory_usage: 382311352\nnon_heap_memory_usage: 169833328\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559331000,"args":{"JVM stats":"heap_memory_usage: 383197872\nnon_heap_memory_usage: 169833328\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559333000,"args":{"JVM stats":"heap_memory_usage: 383197872\nnon_heap_memory_usage: 169834032\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559402000,"args":{"JVM stats":"heap_memory_usage: 384072392\nnon_heap_memory_usage: 169834032\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559404000,"args":{"JVM stats":"heap_memory_usage: 384072392\nnon_heap_memory_usage: 169834032\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559416000,"args":{"JVM stats":"heap_memory_usage: 384652336\nnon_heap_memory_usage: 169840280\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559418000,"args":{"JVM stats":"heap_memory_usage: 384652336\nnon_heap_memory_usage: 169840280\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559430000,"args":{"JVM stats":"heap_memory_usage: 385668824\nnon_heap_memory_usage: 169840280\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559431000,"args":{"JVM stats":"heap_memory_usage: 385813800\nnon_heap_memory_usage: 169840280\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559453000,"args":{"JVM stats":"heap_memory_usage: 387408880\nnon_heap_memory_usage: 169840280\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559454000,"args":{"JVM stats":"heap_memory_usage: 387553912\nnon_heap_memory_usage: 169841112\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559454001,"args":{"JVM stats":"heap_memory_usage: 387553912\nnon_heap_memory_usage: 169841112\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559455000,"args":{"JVM stats":"heap_memory_usage: 387553912\nnon_heap_memory_usage: 169841144\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559456000,"args":{"JVM stats":"heap_memory_usage: 387847976\nnon_heap_memory_usage: 169841144\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559457000,"args":{"JVM stats":"heap_memory_usage: 387847976\nnon_heap_memory_usage: 169841144\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559476000,"args":{"JVM stats":"heap_memory_usage: 388573136\nnon_heap_memory_usage: 169845752\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559503000,"args":{"JVM stats":"heap_memory_usage: 389734352\nnon_heap_memory_usage: 169853944\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559517000,"args":{"JVM stats":"heap_memory_usage: 390169296\nnon_heap_memory_usage: 169858168\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559532000,"args":{"JVM stats":"heap_memory_usage: 390749280\nnon_heap_memory_usage: 169858168\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559534000,"args":{"JVM stats":"heap_memory_usage: 390749280\nnon_heap_memory_usage: 169858168\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559537000,"args":{"JVM stats":"heap_memory_usage: 390894240\nnon_heap_memory_usage: 169858168\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559540000,"args":{"JVM stats":"heap_memory_usage: 391039328\nnon_heap_memory_usage: 169858168\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559542000,"args":{"JVM stats":"heap_memory_usage: 391184328\nnon_heap_memory_usage: 169858168\nloaded_class_count: 17053\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559793000,"args":{"JVM stats":"heap_memory_usage: 429135552\nnon_heap_memory_usage: 169883272\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559799000,"args":{"JVM stats":"heap_memory_usage: 429432576\nnon_heap_memory_usage: 169864968\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559800000,"args":{"JVM stats":"heap_memory_usage: 429432576\nnon_heap_memory_usage: 169859016\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559801000,"args":{"JVM stats":"heap_memory_usage: 429432576\nnon_heap_memory_usage: 169859912\nloaded_class_count: 17053\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429559815000,"args":{"JVM stats":"heap_memory_usage: 430663936\nnon_heap_memory_usage: 169859688\nloaded_class_count: 17053\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558261000,"dur":6000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558267000,"dur":19000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558286000,"dur":1000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558286000,"dur":1000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558293000,"dur":4000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558297000,"dur":100},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558298000,"dur":1000},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558299000,"dur":100},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558299000,"dur":100},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558299000,"dur":100},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558299000,"dur":1000},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558300000,"dur":100},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558300000,"dur":2000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558302000,"dur":100},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558302000,"dur":100},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558302000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558302000,"dur":28000},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558330000,"dur":1000},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558331000,"dur":13000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558349000,"dur":2000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558351000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429558297000,"dur":54000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558351000,"dur":4000},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558355000,"dur":7000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558292000,"dur":71000},{"pid":1,"tid":16,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558363000,"dur":2000},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429558289000,"dur":76000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429558381000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558382000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558382000,"dur":40000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558422000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558427000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558430000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558431000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558432000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558433000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558433000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429558434000,"dur":152000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558586000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558588000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429558592000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429558593000,"dur":605000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559199000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559199000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559215000,"dur":12000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559227000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559229000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559231000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559232000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559235000,"dur":56000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559292000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559298000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559300000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559312000,"dur":19000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559331000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559333000,"dur":69000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559403000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559405000,"dur":11000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559417000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559418000,"dur":12000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559430000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559431000,"dur":21000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559453000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559454000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559454000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559455000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559456000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559457000,"dur":19000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559477000,"dur":26000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559504000,"dur":13000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559517000,"dur":15000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559532000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559535000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559538000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429559540000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559543000,"dur":250000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559794000,"dur":5000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559800000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429559801000,"dur":100},{"pid":1,"tid":16,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429559806000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-10-59-19-815.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-10-59-19-815.rawproto
new file mode 100644
index 00000000..5abf9c04
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-10-59-19-815.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-00-17-949.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-00-17-949.json
new file mode 100644
index 00000000..af11c41b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-00-17-949.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616408000,"args":{"JVM stats":"heap_memory_usage: 155614536\nnon_heap_memory_usage: 170186384\nloaded_class_count: 17060\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 26\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616531000,"args":{"JVM stats":"heap_memory_usage: 167123104\nnon_heap_memory_usage: 170367800\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616531001,"args":{"JVM stats":"heap_memory_usage: 167123104\nnon_heap_memory_usage: 170368192\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616588000,"args":{"JVM stats":"heap_memory_usage: 173780336\nnon_heap_memory_usage: 170508928\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616595000,"args":{"JVM stats":"heap_memory_usage: 174113144\nnon_heap_memory_usage: 170508928\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616599000,"args":{"JVM stats":"heap_memory_usage: 174612536\nnon_heap_memory_usage: 170508928\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616600000,"args":{"JVM stats":"heap_memory_usage: 174779008\nnon_heap_memory_usage: 170508928\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616601000,"args":{"JVM stats":"heap_memory_usage: 174779008\nnon_heap_memory_usage: 170508928\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616602000,"args":{"JVM stats":"heap_memory_usage: 174779008\nnon_heap_memory_usage: 170508928\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616602001,"args":{"JVM stats":"heap_memory_usage: 174779008\nnon_heap_memory_usage: 170508928\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616603000,"args":{"JVM stats":"heap_memory_usage: 174945480\nnon_heap_memory_usage: 170508928\nloaded_class_count: 17060\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616761000,"args":{"JVM stats":"heap_memory_usage: 209058872\nnon_heap_memory_usage: 170664232\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616764000,"args":{"JVM stats":"heap_memory_usage: 209457264\nnon_heap_memory_usage: 170664232\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616770000,"args":{"JVM stats":"heap_memory_usage: 210331288\nnon_heap_memory_usage: 170664232\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429616771000,"args":{"JVM stats":"heap_memory_usage: 210331288\nnon_heap_memory_usage: 170664232\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617466000,"args":{"JVM stats":"heap_memory_usage: 225634944\nnon_heap_memory_usage: 170729040\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617467000,"args":{"JVM stats":"heap_memory_usage: 225801376\nnon_heap_memory_usage: 170729040\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617483000,"args":{"JVM stats":"heap_memory_usage: 227133304\nnon_heap_memory_usage: 170729040\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617493000,"args":{"JVM stats":"heap_memory_usage: 227632848\nnon_heap_memory_usage: 170739792\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617495000,"args":{"JVM stats":"heap_memory_usage: 227799240\nnon_heap_memory_usage: 170739792\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617496000,"args":{"JVM stats":"heap_memory_usage: 227799240\nnon_heap_memory_usage: 170739792\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617496001,"args":{"JVM stats":"heap_memory_usage: 227799240\nnon_heap_memory_usage: 170739792\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617498000,"args":{"JVM stats":"heap_memory_usage: 227965664\nnon_heap_memory_usage: 170740368\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617543000,"args":{"JVM stats":"heap_memory_usage: 236688656\nnon_heap_memory_usage: 170738296\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617546000,"args":{"JVM stats":"heap_memory_usage: 237196216\nnon_heap_memory_usage: 170743136\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617548000,"args":{"JVM stats":"heap_memory_usage: 237196216\nnon_heap_memory_usage: 170736416\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617558000,"args":{"JVM stats":"heap_memory_usage: 237695792\nnon_heap_memory_usage: 170736416\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617574000,"args":{"JVM stats":"heap_memory_usage: 238573736\nnon_heap_memory_usage: 170729888\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617576000,"args":{"JVM stats":"heap_memory_usage: 238573736\nnon_heap_memory_usage: 170729888\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617626000,"args":{"JVM stats":"heap_memory_usage: 239405744\nnon_heap_memory_usage: 170729888\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617628000,"args":{"JVM stats":"heap_memory_usage: 239572168\nnon_heap_memory_usage: 170729888\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617636000,"args":{"JVM stats":"heap_memory_usage: 240237888\nnon_heap_memory_usage: 170656096\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617637000,"args":{"JVM stats":"heap_memory_usage: 240237888\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617648000,"args":{"JVM stats":"heap_memory_usage: 241238536\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617649000,"args":{"JVM stats":"heap_memory_usage: 241238536\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617666000,"args":{"JVM stats":"heap_memory_usage: 242570240\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617667000,"args":{"JVM stats":"heap_memory_usage: 242736656\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617667001,"args":{"JVM stats":"heap_memory_usage: 242736656\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617668000,"args":{"JVM stats":"heap_memory_usage: 242736656\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617669000,"args":{"JVM stats":"heap_memory_usage: 242736656\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617670000,"args":{"JVM stats":"heap_memory_usage: 242903080\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617684000,"args":{"JVM stats":"heap_memory_usage: 243569288\nnon_heap_memory_usage: 170655200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617707000,"args":{"JVM stats":"heap_memory_usage: 245139288\nnon_heap_memory_usage: 170667616\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617718000,"args":{"JVM stats":"heap_memory_usage: 245640592\nnon_heap_memory_usage: 170687200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617731000,"args":{"JVM stats":"heap_memory_usage: 246139880\nnon_heap_memory_usage: 170687200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617732000,"args":{"JVM stats":"heap_memory_usage: 246139880\nnon_heap_memory_usage: 170687200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617735000,"args":{"JVM stats":"heap_memory_usage: 246306688\nnon_heap_memory_usage: 170687200\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617738000,"args":{"JVM stats":"heap_memory_usage: 246473104\nnon_heap_memory_usage: 170685920\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617742000,"args":{"JVM stats":"heap_memory_usage: 246473104\nnon_heap_memory_usage: 170684192\nloaded_class_count: 17060\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617935000,"args":{"JVM stats":"heap_memory_usage: 277567888\nnon_heap_memory_usage: 170721584\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617937000,"args":{"JVM stats":"heap_memory_usage: 278087600\nnon_heap_memory_usage: 170722160\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617937001,"args":{"JVM stats":"heap_memory_usage: 278087600\nnon_heap_memory_usage: 170732144\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617937000,"args":{"JVM stats":"heap_memory_usage: 278087600\nnon_heap_memory_usage: 170727408\nloaded_class_count: 17060\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518429617949000,"args":{"JVM stats":"heap_memory_usage: 279486824\nnon_heap_memory_usage: 170734816\nloaded_class_count: 17060\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616409000,"dur":6000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616416000,"dur":4000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616421000,"dur":1000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616420000,"dur":2000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616428000,"dur":4000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616432000,"dur":100},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616433000,"dur":1000},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616434000,"dur":100},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616434000,"dur":100},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616434000,"dur":1000},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616435000,"dur":100},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616435000,"dur":100},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616435000,"dur":5000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616440000,"dur":100},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616440000,"dur":100},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616440000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616440000,"dur":31000},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616471000,"dur":100},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616471000,"dur":8000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616482000,"dur":4000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616486000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518429616432000,"dur":54000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616486000,"dur":3000},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616489000,"dur":14000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616427000,"dur":77000},{"pid":1,"tid":16,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616504000,"dur":3000},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429616425000,"dur":82000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429616529000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616531000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616532000,"dur":56000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616589000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616596000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616599000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616600000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616601000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616602000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616603000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429616603000,"dur":158000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616762000,"dur":2000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616766000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429616770000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429616772000,"dur":694000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617466000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617468000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617484000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617493000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617495000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617496000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617496000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617499000,"dur":44000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617543000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617547000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617548000,"dur":10000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617558000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617575000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617577000,"dur":49000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617626000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617629000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617637000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617638000,"dur":10000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617649000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617650000,"dur":16000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617666000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617667000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617667000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617668000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617669000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617670000,"dur":14000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617684000,"dur":23000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617708000,"dur":10000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617718000,"dur":13000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617731000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617733000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617736000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518429617738000,"dur":4000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617742000,"dur":193000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617935000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617937000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518429617937000,"dur":100},{"pid":1,"tid":16,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518429617944000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-00-17-949.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-00-17-949.rawproto
new file mode 100644
index 00000000..b2df14b8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-00-17-949.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-29-005.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-29-005.json
new file mode 100644
index 00000000..f74ef145
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-29-005.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643709000,"args":{"JVM stats":"heap_memory_usage: 341825904\nnon_heap_memory_usage: 170904864\nloaded_class_count: 17067\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643805000,"args":{"JVM stats":"heap_memory_usage: 352845976\nnon_heap_memory_usage: 170950288\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643805001,"args":{"JVM stats":"heap_memory_usage: 352845976\nnon_heap_memory_usage: 170950288\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643854000,"args":{"JVM stats":"heap_memory_usage: 359561616\nnon_heap_memory_usage: 170951248\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643862000,"args":{"JVM stats":"heap_memory_usage: 359728056\nnon_heap_memory_usage: 170951248\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643869000,"args":{"JVM stats":"heap_memory_usage: 360062096\nnon_heap_memory_usage: 170951248\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643870000,"args":{"JVM stats":"heap_memory_usage: 360228544\nnon_heap_memory_usage: 170951248\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643872000,"args":{"JVM stats":"heap_memory_usage: 360228544\nnon_heap_memory_usage: 170951248\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643873000,"args":{"JVM stats":"heap_memory_usage: 360228544\nnon_heap_memory_usage: 170951248\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643874000,"args":{"JVM stats":"heap_memory_usage: 360228544\nnon_heap_memory_usage: 170952336\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643874001,"args":{"JVM stats":"heap_memory_usage: 360394976\nnon_heap_memory_usage: 170952336\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643907000,"args":{"JVM stats":"heap_memory_usage: 364057832\nnon_heap_memory_usage: 170973928\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643908000,"args":{"JVM stats":"heap_memory_usage: 364057832\nnon_heap_memory_usage: 170973928\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643912000,"args":{"JVM stats":"heap_memory_usage: 364723560\nnon_heap_memory_usage: 170981736\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643913000,"args":{"JVM stats":"heap_memory_usage: 364723560\nnon_heap_memory_usage: 170981736\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643934000,"args":{"JVM stats":"heap_memory_usage: 366223848\nnon_heap_memory_usage: 170990992\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643934001,"args":{"JVM stats":"heap_memory_usage: 366223848\nnon_heap_memory_usage: 170990992\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643957000,"args":{"JVM stats":"heap_memory_usage: 366902816\nnon_heap_memory_usage: 170990992\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643966000,"args":{"JVM stats":"heap_memory_usage: 367568728\nnon_heap_memory_usage: 170993808\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643968000,"args":{"JVM stats":"heap_memory_usage: 367568728\nnon_heap_memory_usage: 170993808\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643968001,"args":{"JVM stats":"heap_memory_usage: 367568728\nnon_heap_memory_usage: 170993808\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643968000,"args":{"JVM stats":"heap_memory_usage: 367736160\nnon_heap_memory_usage: 170993808\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643971000,"args":{"JVM stats":"heap_memory_usage: 367736160\nnon_heap_memory_usage: 170997160\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643981000,"args":{"JVM stats":"heap_memory_usage: 367902568\nnon_heap_memory_usage: 170997160\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643985000,"args":{"JVM stats":"heap_memory_usage: 368248336\nnon_heap_memory_usage: 170997160\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643986000,"args":{"JVM stats":"heap_memory_usage: 368248336\nnon_heap_memory_usage: 170997160\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430643994000,"args":{"JVM stats":"heap_memory_usage: 368914280\nnon_heap_memory_usage: 170997160\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430644009000,"args":{"JVM stats":"heap_memory_usage: 369584448\nnon_heap_memory_usage: 170997160\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430644009001,"args":{"JVM stats":"heap_memory_usage: 369584448\nnon_heap_memory_usage: 170997160\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648341000,"args":{"JVM stats":"heap_memory_usage: 370430232\nnon_heap_memory_usage: 171006536\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648343000,"args":{"JVM stats":"heap_memory_usage: 370596656\nnon_heap_memory_usage: 171017184\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648647000,"args":{"JVM stats":"heap_memory_usage: 392899264\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648649000,"args":{"JVM stats":"heap_memory_usage: 392899264\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648658000,"args":{"JVM stats":"heap_memory_usage: 393902392\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648661000,"args":{"JVM stats":"heap_memory_usage: 394068816\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648675000,"args":{"JVM stats":"heap_memory_usage: 395405216\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648676000,"args":{"JVM stats":"heap_memory_usage: 395405216\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648677000,"args":{"JVM stats":"heap_memory_usage: 395405216\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648677001,"args":{"JVM stats":"heap_memory_usage: 395405216\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648679000,"args":{"JVM stats":"heap_memory_usage: 395571640\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648680000,"args":{"JVM stats":"heap_memory_usage: 395571640\nnon_heap_memory_usage: 171077984\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648691000,"args":{"JVM stats":"heap_memory_usage: 396237328\nnon_heap_memory_usage: 171088288\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648709000,"args":{"JVM stats":"heap_memory_usage: 397736560\nnon_heap_memory_usage: 171089440\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648717000,"args":{"JVM stats":"heap_memory_usage: 398235832\nnon_heap_memory_usage: 171089440\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648725000,"args":{"JVM stats":"heap_memory_usage: 398735112\nnon_heap_memory_usage: 171089440\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648726000,"args":{"JVM stats":"heap_memory_usage: 398735112\nnon_heap_memory_usage: 171089440\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648728000,"args":{"JVM stats":"heap_memory_usage: 398901792\nnon_heap_memory_usage: 171089440\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648732000,"args":{"JVM stats":"heap_memory_usage: 399068456\nnon_heap_memory_usage: 171089440\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648798000,"args":{"JVM stats":"heap_memory_usage: 400234832\nnon_heap_memory_usage: 171099256\nloaded_class_count: 17067\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648990000,"args":{"JVM stats":"heap_memory_usage: 439709384\nnon_heap_memory_usage: 171146832\nloaded_class_count: 17067\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648992000,"args":{"JVM stats":"heap_memory_usage: 440053360\nnon_heap_memory_usage: 171146832\nloaded_class_count: 17067\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648993000,"args":{"JVM stats":"heap_memory_usage: 440053360\nnon_heap_memory_usage: 171146832\nloaded_class_count: 17067\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430648993001,"args":{"JVM stats":"heap_memory_usage: 440053360\nnon_heap_memory_usage: 171146832\nloaded_class_count: 17067\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430649005000,"args":{"JVM stats":"heap_memory_usage: 441218368\nnon_heap_memory_usage: 171154744\nloaded_class_count: 17067\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":17,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643709000,"dur":4000},{"pid":1,"tid":17,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643713000,"dur":4000},{"pid":1,"tid":17,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643717000,"dur":3000},{"pid":1,"tid":17,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643717000,"dur":3000},{"pid":1,"tid":17,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643723000,"dur":1000},{"pid":1,"tid":17,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643724000,"dur":100},{"pid":1,"tid":17,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643725000,"dur":100},{"pid":1,"tid":17,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643725000,"dur":100},{"pid":1,"tid":17,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643725000,"dur":1000},{"pid":1,"tid":17,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643726000,"dur":100},{"pid":1,"tid":17,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643726000,"dur":100},{"pid":1,"tid":17,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643726000,"dur":100},{"pid":1,"tid":17,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643726000,"dur":3000},{"pid":1,"tid":17,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643729000,"dur":100},{"pid":1,"tid":17,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643729000,"dur":1000},{"pid":1,"tid":17,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643730000,"dur":100},{"pid":1,"tid":17,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643730000,"dur":34000},{"pid":1,"tid":17,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643764000,"dur":1000},{"pid":1,"tid":17,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643765000,"dur":3000},{"pid":1,"tid":17,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643770000,"dur":2000},{"pid":1,"tid":17,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643772000,"dur":100},{"pid":1,"tid":17,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430643724000,"dur":48000},{"pid":1,"tid":17,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643772000,"dur":5000},{"pid":1,"tid":17,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643777000,"dur":6000},{"pid":1,"tid":17,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643722000,"dur":62000},{"pid":1,"tid":17,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643784000,"dur":2000},{"pid":1,"tid":17,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430643721000,"dur":65000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430643803000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643805000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643805000,"dur":49000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643856000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643864000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643869000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643871000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643872000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643873000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643874000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643875000,"dur":32000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643908000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643909000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643912000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643915000,"dur":19000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430643934000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643935000,"dur":22000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643957000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643967000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643968000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643968000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643969000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643971000,"dur":10000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430643981000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643986000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643987000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430643994000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430644009000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430644010000,"dur":4331000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648342000,"dur":1000},{"pid":1,"tid":18,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518430648419000,"dur":6000},{"pid":1,"tid":18,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518430648425000,"dur":148000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648344000,"dur":303000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648648000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648649000,"dur":9000},{"pid":1,"tid":18,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518430648660000,"dur":100},{"pid":1,"tid":18,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518430648660000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648658000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648661000,"dur":14000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648676000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648677000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648677000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648678000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648679000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648681000,"dur":10000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648692000,"dur":17000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648709000,"dur":8000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648717000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648725000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648727000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430648729000,"dur":3000},{"pid":1,"tid":18,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518430648735000,"dur":100},{"pid":1,"tid":18,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518430648735000,"dur":48000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648732000,"dur":65000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648799000,"dur":191000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648990000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648992000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430648993000,"dur":100},{"pid":1,"tid":17,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430649000000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-29-005.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-29-005.rawproto
new file mode 100644
index 00000000..3ed45a22
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-29-005.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-53-084.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-53-084.json
new file mode 100644
index 00000000..a340e2ce
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-53-084.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672730000,"args":{"JVM stats":"heap_memory_usage: 183208224\nnon_heap_memory_usage: 171250440\nloaded_class_count: 17076\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 26\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672803000,"args":{"JVM stats":"heap_memory_usage: 194845216\nnon_heap_memory_usage: 171344448\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672803001,"args":{"JVM stats":"heap_memory_usage: 194845216\nnon_heap_memory_usage: 171344448\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672841000,"args":{"JVM stats":"heap_memory_usage: 201839432\nnon_heap_memory_usage: 171372032\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672844000,"args":{"JVM stats":"heap_memory_usage: 202050632\nnon_heap_memory_usage: 171372032\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672848000,"args":{"JVM stats":"heap_memory_usage: 202050632\nnon_heap_memory_usage: 171372032\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672848001,"args":{"JVM stats":"heap_memory_usage: 202261848\nnon_heap_memory_usage: 171385728\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672850000,"args":{"JVM stats":"heap_memory_usage: 202261848\nnon_heap_memory_usage: 171377792\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672851000,"args":{"JVM stats":"heap_memory_usage: 202261848\nnon_heap_memory_usage: 171377792\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672852000,"args":{"JVM stats":"heap_memory_usage: 202261848\nnon_heap_memory_usage: 171377792\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672852001,"args":{"JVM stats":"heap_memory_usage: 202261848\nnon_heap_memory_usage: 171377792\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672883000,"args":{"JVM stats":"heap_memory_usage: 205853488\nnon_heap_memory_usage: 171404352\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672885000,"args":{"JVM stats":"heap_memory_usage: 205853488\nnon_heap_memory_usage: 171404352\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672888000,"args":{"JVM stats":"heap_memory_usage: 206065176\nnon_heap_memory_usage: 171404352\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672888001,"args":{"JVM stats":"heap_memory_usage: 206065176\nnon_heap_memory_usage: 171404352\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672893000,"args":{"JVM stats":"heap_memory_usage: 207333144\nnon_heap_memory_usage: 171408008\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672893001,"args":{"JVM stats":"heap_memory_usage: 207333144\nnon_heap_memory_usage: 171408008\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672907000,"args":{"JVM stats":"heap_memory_usage: 208178936\nnon_heap_memory_usage: 171408008\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672914000,"args":{"JVM stats":"heap_memory_usage: 208601312\nnon_heap_memory_usage: 171409416\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672915000,"args":{"JVM stats":"heap_memory_usage: 208812536\nnon_heap_memory_usage: 171409416\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672916000,"args":{"JVM stats":"heap_memory_usage: 208812536\nnon_heap_memory_usage: 171409416\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672916001,"args":{"JVM stats":"heap_memory_usage: 208812536\nnon_heap_memory_usage: 171409416\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672920000,"args":{"JVM stats":"heap_memory_usage: 209446800\nnon_heap_memory_usage: 171410120\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672922000,"args":{"JVM stats":"heap_memory_usage: 209658016\nnon_heap_memory_usage: 171410120\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672925000,"args":{"JVM stats":"heap_memory_usage: 209877384\nnon_heap_memory_usage: 171411208\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672925001,"args":{"JVM stats":"heap_memory_usage: 209877384\nnon_heap_memory_usage: 171411208\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672931000,"args":{"JVM stats":"heap_memory_usage: 210511160\nnon_heap_memory_usage: 171411208\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672944000,"args":{"JVM stats":"heap_memory_usage: 210933568\nnon_heap_memory_usage: 171473544\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672945000,"args":{"JVM stats":"heap_memory_usage: 211144752\nnon_heap_memory_usage: 171473544\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672988000,"args":{"JVM stats":"heap_memory_usage: 212200936\nnon_heap_memory_usage: 171474744\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672989000,"args":{"JVM stats":"heap_memory_usage: 212200936\nnon_heap_memory_usage: 171475360\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672995000,"args":{"JVM stats":"heap_memory_usage: 213470112\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430672996000,"args":{"JVM stats":"heap_memory_usage: 213470112\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673002000,"args":{"JVM stats":"heap_memory_usage: 214103672\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673003000,"args":{"JVM stats":"heap_memory_usage: 214103672\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673015000,"args":{"JVM stats":"heap_memory_usage: 215372104\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673016000,"args":{"JVM stats":"heap_memory_usage: 215583280\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673016001,"args":{"JVM stats":"heap_memory_usage: 215583280\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673016000,"args":{"JVM stats":"heap_memory_usage: 215583280\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673017000,"args":{"JVM stats":"heap_memory_usage: 215583280\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673018000,"args":{"JVM stats":"heap_memory_usage: 215798552\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673028000,"args":{"JVM stats":"heap_memory_usage: 216643344\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673045000,"args":{"JVM stats":"heap_memory_usage: 217911512\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673052000,"args":{"JVM stats":"heap_memory_usage: 218333888\nnon_heap_memory_usage: 171481992\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673061000,"args":{"JVM stats":"heap_memory_usage: 218967488\nnon_heap_memory_usage: 171489152\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673062000,"args":{"JVM stats":"heap_memory_usage: 218967488\nnon_heap_memory_usage: 171489152\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673064000,"args":{"JVM stats":"heap_memory_usage: 219178928\nnon_heap_memory_usage: 171489152\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673066000,"args":{"JVM stats":"heap_memory_usage: 219178928\nnon_heap_memory_usage: 171492776\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673067000,"args":{"JVM stats":"heap_memory_usage: 219390112\nnon_heap_memory_usage: 171492776\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673073000,"args":{"JVM stats":"heap_memory_usage: 219812936\nnon_heap_memory_usage: 171499960\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673075000,"args":{"JVM stats":"heap_memory_usage: 220024240\nnon_heap_memory_usage: 171500664\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673075001,"args":{"JVM stats":"heap_memory_usage: 220024240\nnon_heap_memory_usage: 171500664\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673075000,"args":{"JVM stats":"heap_memory_usage: 220024240\nnon_heap_memory_usage: 171500664\nloaded_class_count: 17076\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430673084000,"args":{"JVM stats":"heap_memory_usage: 220698672\nnon_heap_memory_usage: 171512176\nloaded_class_count: 17076\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":17,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672730000,"dur":2000},{"pid":1,"tid":17,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672732000,"dur":5000},{"pid":1,"tid":17,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672737000,"dur":1000},{"pid":1,"tid":17,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672737000,"dur":1000},{"pid":1,"tid":17,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672741000,"dur":1000},{"pid":1,"tid":17,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672742000,"dur":1000},{"pid":1,"tid":17,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672743000,"dur":100},{"pid":1,"tid":17,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672743000,"dur":1000},{"pid":1,"tid":17,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672744000,"dur":100},{"pid":1,"tid":17,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672744000,"dur":100},{"pid":1,"tid":17,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672744000,"dur":100},{"pid":1,"tid":17,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672744000,"dur":100},{"pid":1,"tid":17,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672744000,"dur":2000},{"pid":1,"tid":17,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672746000,"dur":100},{"pid":1,"tid":17,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672746000,"dur":100},{"pid":1,"tid":17,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672746000,"dur":100},{"pid":1,"tid":17,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672746000,"dur":27000},{"pid":1,"tid":17,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672773000,"dur":100},{"pid":1,"tid":17,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672773000,"dur":3000},{"pid":1,"tid":17,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672777000,"dur":1000},{"pid":1,"tid":17,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672778000,"dur":100},{"pid":1,"tid":17,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430672743000,"dur":35000},{"pid":1,"tid":17,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672778000,"dur":2000},{"pid":1,"tid":17,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672781000,"dur":4000},{"pid":1,"tid":17,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672740000,"dur":46000},{"pid":1,"tid":17,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672787000,"dur":1000},{"pid":1,"tid":17,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430672739000,"dur":49000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430672801000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672803000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672804000,"dur":37000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672842000,"dur":2000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672845000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672848000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672849000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672850000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672851000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672852000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672853000,"dur":30000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672884000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672885000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672888000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672889000,"dur":4000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430672893000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672894000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672907000,"dur":7000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672914000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672916000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672916000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672917000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672921000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430672922000,"dur":2000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672925000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672926000,"dur":5000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672932000,"dur":12000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672945000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430672945000,"dur":43000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672988000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672989000,"dur":6000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430672996000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430672996000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673002000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673003000,"dur":12000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673015000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673016000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430673016000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673017000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673017000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673018000,"dur":10000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673028000,"dur":17000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673045000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673052000,"dur":9000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430673061000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673062000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673064000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673066000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430673068000,"dur":5000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430673073000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430673075000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430673075000,"dur":100},{"pid":1,"tid":17,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430673079000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-53-084.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-53-084.rawproto
new file mode 100644
index 00000000..88affeb8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-17-53-084.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-22-282.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-22-282.json
new file mode 100644
index 00000000..4479bdd6
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-22-282.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518430701901000,"args":{"JVM stats":"heap_memory_usage: 99818272\nnon_heap_memory_usage: 168875488\nloaded_class_count: 16349\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 21\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 245\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430701972000,"args":{"JVM stats":"heap_memory_usage: 111539352\nnon_heap_memory_usage: 169025256\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430701972001,"args":{"JVM stats":"heap_memory_usage: 111539352\nnon_heap_memory_usage: 169025256\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702014000,"args":{"JVM stats":"heap_memory_usage: 118151784\nnon_heap_memory_usage: 169065128\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702018000,"args":{"JVM stats":"heap_memory_usage: 118646384\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702021000,"args":{"JVM stats":"heap_memory_usage: 119142016\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702022000,"args":{"JVM stats":"heap_memory_usage: 119142016\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702023000,"args":{"JVM stats":"heap_memory_usage: 119142016\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702024000,"args":{"JVM stats":"heap_memory_usage: 119142016\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702024001,"args":{"JVM stats":"heap_memory_usage: 119142016\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702025000,"args":{"JVM stats":"heap_memory_usage: 119142016\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702056000,"args":{"JVM stats":"heap_memory_usage: 122861816\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702057000,"args":{"JVM stats":"heap_memory_usage: 123109352\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702061000,"args":{"JVM stats":"heap_memory_usage: 123109352\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702062000,"args":{"JVM stats":"heap_memory_usage: 123109352\nnon_heap_memory_usage: 169059496\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702067000,"args":{"JVM stats":"heap_memory_usage: 124346064\nnon_heap_memory_usage: 169060456\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702067001,"args":{"JVM stats":"heap_memory_usage: 124346064\nnon_heap_memory_usage: 169060456\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702081000,"args":{"JVM stats":"heap_memory_usage: 124802152\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702088000,"args":{"JVM stats":"heap_memory_usage: 125296776\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702089000,"args":{"JVM stats":"heap_memory_usage: 125296776\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702090000,"args":{"JVM stats":"heap_memory_usage: 125296776\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702091000,"args":{"JVM stats":"heap_memory_usage: 125296776\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702094000,"args":{"JVM stats":"heap_memory_usage: 125544096\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702096000,"args":{"JVM stats":"heap_memory_usage: 125544096\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702099000,"args":{"JVM stats":"heap_memory_usage: 125791408\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702100000,"args":{"JVM stats":"heap_memory_usage: 126038720\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702107000,"args":{"JVM stats":"heap_memory_usage: 126533520\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702121000,"args":{"JVM stats":"heap_memory_usage: 127485216\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702122000,"args":{"JVM stats":"heap_memory_usage: 127733544\nnon_heap_memory_usage: 169061160\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702174000,"args":{"JVM stats":"heap_memory_usage: 128969984\nnon_heap_memory_usage: 169071720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702176000,"args":{"JVM stats":"heap_memory_usage: 128969984\nnon_heap_memory_usage: 169071720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702184000,"args":{"JVM stats":"heap_memory_usage: 130207136\nnon_heap_memory_usage: 169074280\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702184001,"args":{"JVM stats":"heap_memory_usage: 130207136\nnon_heap_memory_usage: 169074280\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702191000,"args":{"JVM stats":"heap_memory_usage: 130949136\nnon_heap_memory_usage: 169074280\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702192000,"args":{"JVM stats":"heap_memory_usage: 130949136\nnon_heap_memory_usage: 169075584\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702206000,"args":{"JVM stats":"heap_memory_usage: 132682400\nnon_heap_memory_usage: 169075584\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702208000,"args":{"JVM stats":"heap_memory_usage: 132682400\nnon_heap_memory_usage: 169075584\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702208001,"args":{"JVM stats":"heap_memory_usage: 132682400\nnon_heap_memory_usage: 169075584\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702209000,"args":{"JVM stats":"heap_memory_usage: 132682400\nnon_heap_memory_usage: 169075584\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702210000,"args":{"JVM stats":"heap_memory_usage: 132682400\nnon_heap_memory_usage: 169075584\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702212000,"args":{"JVM stats":"heap_memory_usage: 132929736\nnon_heap_memory_usage: 169084288\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702225000,"args":{"JVM stats":"heap_memory_usage: 133424528\nnon_heap_memory_usage: 169089664\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702243000,"args":{"JVM stats":"heap_memory_usage: 134869904\nnon_heap_memory_usage: 169110720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702249000,"args":{"JVM stats":"heap_memory_usage: 135364976\nnon_heap_memory_usage: 169110720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702257000,"args":{"JVM stats":"heap_memory_usage: 135859616\nnon_heap_memory_usage: 169110720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702258000,"args":{"JVM stats":"heap_memory_usage: 135859616\nnon_heap_memory_usage: 169110720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702260000,"args":{"JVM stats":"heap_memory_usage: 136106920\nnon_heap_memory_usage: 169110720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702263000,"args":{"JVM stats":"heap_memory_usage: 136106920\nnon_heap_memory_usage: 169110720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702264000,"args":{"JVM stats":"heap_memory_usage: 136354288\nnon_heap_memory_usage: 169110720\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702270000,"args":{"JVM stats":"heap_memory_usage: 136848952\nnon_heap_memory_usage: 169119096\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702272000,"args":{"JVM stats":"heap_memory_usage: 136848952\nnon_heap_memory_usage: 169119096\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702272001,"args":{"JVM stats":"heap_memory_usage: 136848952\nnon_heap_memory_usage: 169119096\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702272000,"args":{"JVM stats":"heap_memory_usage: 137096768\nnon_heap_memory_usage: 169119096\nloaded_class_count: 16349\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430702282000,"args":{"JVM stats":"heap_memory_usage: 138426160\nnon_heap_memory_usage: 169119128\nloaded_class_count: 16349\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":17,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701901000,"dur":3000},{"pid":1,"tid":17,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701904000,"dur":4000},{"pid":1,"tid":17,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701908000,"dur":1000},{"pid":1,"tid":17,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701908000,"dur":1000},{"pid":1,"tid":17,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701912000,"dur":1000},{"pid":1,"tid":17,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701913000,"dur":100},{"pid":1,"tid":17,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701914000,"dur":100},{"pid":1,"tid":17,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701914000,"dur":100},{"pid":1,"tid":17,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701914000,"dur":100},{"pid":1,"tid":17,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701914000,"dur":1000},{"pid":1,"tid":17,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701915000,"dur":100},{"pid":1,"tid":17,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701915000,"dur":100},{"pid":1,"tid":17,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701915000,"dur":2000},{"pid":1,"tid":17,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701917000,"dur":100},{"pid":1,"tid":17,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701917000,"dur":100},{"pid":1,"tid":17,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701917000,"dur":100},{"pid":1,"tid":17,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701917000,"dur":23000},{"pid":1,"tid":17,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701941000,"dur":100},{"pid":1,"tid":17,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701941000,"dur":4000},{"pid":1,"tid":17,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701947000,"dur":1000},{"pid":1,"tid":17,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701948000,"dur":100},{"pid":1,"tid":17,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430701913000,"dur":35000},{"pid":1,"tid":17,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701948000,"dur":2000},{"pid":1,"tid":17,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701950000,"dur":5000},{"pid":1,"tid":17,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701911000,"dur":46000},{"pid":1,"tid":17,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701957000,"dur":2000},{"pid":1,"tid":17,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430701910000,"dur":49000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430701970000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430701972000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430701973000,"dur":41000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702015000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702018000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702021000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702022000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702023000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702024000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702025000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702025000,"dur":31000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702056000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702057000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702061000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702062000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702067000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702067000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702082000,"dur":6000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702088000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702090000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702091000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702091000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702094000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702096000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702099000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702100000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702107000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702122000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702123000,"dur":51000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702175000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702177000,"dur":6000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702184000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702184000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702192000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702193000,"dur":13000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702207000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702208000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702208000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702209000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702211000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702212000,"dur":13000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702225000,"dur":18000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702243000,"dur":6000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702249000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702258000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702259000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702261000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702263000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430702264000,"dur":6000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702270000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702272000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430702272000,"dur":100},{"pid":1,"tid":17,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430702278000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-22-282.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-22-282.rawproto
new file mode 100644
index 00000000..a5367564
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-22-282.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-58-370.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-58-370.json
new file mode 100644
index 00000000..bbf5c3d3
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-58-370.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733228000,"args":{"JVM stats":"heap_memory_usage: 192283784\nnon_heap_memory_usage: 169263888\nloaded_class_count: 16356\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733319000,"args":{"JVM stats":"heap_memory_usage: 203925968\nnon_heap_memory_usage: 169438096\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733319001,"args":{"JVM stats":"heap_memory_usage: 203925968\nnon_heap_memory_usage: 169438096\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733365000,"args":{"JVM stats":"heap_memory_usage: 210621688\nnon_heap_memory_usage: 169502584\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733369000,"args":{"JVM stats":"heap_memory_usage: 210868976\nnon_heap_memory_usage: 169502584\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733373000,"args":{"JVM stats":"heap_memory_usage: 211858424\nnon_heap_memory_usage: 169502584\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733374000,"args":{"JVM stats":"heap_memory_usage: 211858424\nnon_heap_memory_usage: 169502584\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733375000,"args":{"JVM stats":"heap_memory_usage: 211858424\nnon_heap_memory_usage: 169502584\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733375001,"args":{"JVM stats":"heap_memory_usage: 211858424\nnon_heap_memory_usage: 169502584\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733376000,"args":{"JVM stats":"heap_memory_usage: 211858424\nnon_heap_memory_usage: 169502584\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733376001,"args":{"JVM stats":"heap_memory_usage: 211858424\nnon_heap_memory_usage: 169502584\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733420000,"args":{"JVM stats":"heap_memory_usage: 215330024\nnon_heap_memory_usage: 169511288\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733421000,"args":{"JVM stats":"heap_memory_usage: 215577560\nnon_heap_memory_usage: 169511288\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733424000,"args":{"JVM stats":"heap_memory_usage: 215577560\nnon_heap_memory_usage: 169511288\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733425000,"args":{"JVM stats":"heap_memory_usage: 215577560\nnon_heap_memory_usage: 169511288\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733431000,"args":{"JVM stats":"heap_memory_usage: 216814216\nnon_heap_memory_usage: 169513528\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733431001,"args":{"JVM stats":"heap_memory_usage: 216814216\nnon_heap_memory_usage: 169513528\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733458000,"args":{"JVM stats":"heap_memory_usage: 217317048\nnon_heap_memory_usage: 169516280\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733470000,"args":{"JVM stats":"heap_memory_usage: 217811712\nnon_heap_memory_usage: 169518728\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733471000,"args":{"JVM stats":"heap_memory_usage: 217811712\nnon_heap_memory_usage: 169520944\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733472000,"args":{"JVM stats":"heap_memory_usage: 217811712\nnon_heap_memory_usage: 169532016\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733473000,"args":{"JVM stats":"heap_memory_usage: 217811712\nnon_heap_memory_usage: 169532016\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733476000,"args":{"JVM stats":"heap_memory_usage: 218059048\nnon_heap_memory_usage: 169534512\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733480000,"args":{"JVM stats":"heap_memory_usage: 218059048\nnon_heap_memory_usage: 169534512\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733485000,"args":{"JVM stats":"heap_memory_usage: 218306352\nnon_heap_memory_usage: 169534512\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733486000,"args":{"JVM stats":"heap_memory_usage: 218553664\nnon_heap_memory_usage: 169539888\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733494000,"args":{"JVM stats":"heap_memory_usage: 219048360\nnon_heap_memory_usage: 169548848\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733508000,"args":{"JVM stats":"heap_memory_usage: 220041880\nnon_heap_memory_usage: 169548848\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430733509000,"args":{"JVM stats":"heap_memory_usage: 220289168\nnon_heap_memory_usage: 169548848\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430737752000,"args":{"JVM stats":"heap_memory_usage: 221278320\nnon_heap_memory_usage: 169673200\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430737754000,"args":{"JVM stats":"heap_memory_usage: 221526648\nnon_heap_memory_usage: 169673200\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738047000,"args":{"JVM stats":"heap_memory_usage: 244284520\nnon_heap_memory_usage: 169640256\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738048000,"args":{"JVM stats":"heap_memory_usage: 244284520\nnon_heap_memory_usage: 169640256\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738055000,"args":{"JVM stats":"heap_memory_usage: 245274160\nnon_heap_memory_usage: 169621864\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738057000,"args":{"JVM stats":"heap_memory_usage: 245521448\nnon_heap_memory_usage: 169622288\nloaded_class_count: 16359\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738070000,"args":{"JVM stats":"heap_memory_usage: 246510968\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738070001,"args":{"JVM stats":"heap_memory_usage: 246510968\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738070000,"args":{"JVM stats":"heap_memory_usage: 246510968\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738071000,"args":{"JVM stats":"heap_memory_usage: 246510968\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738072000,"args":{"JVM stats":"heap_memory_usage: 246510968\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738073000,"args":{"JVM stats":"heap_memory_usage: 246758256\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738083000,"args":{"JVM stats":"heap_memory_usage: 247252880\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738099000,"args":{"JVM stats":"heap_memory_usage: 248489600\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738106000,"args":{"JVM stats":"heap_memory_usage: 248984328\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738114000,"args":{"JVM stats":"heap_memory_usage: 249479016\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738115000,"args":{"JVM stats":"heap_memory_usage: 249479016\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738116000,"args":{"JVM stats":"heap_memory_usage: 249726320\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738118000,"args":{"JVM stats":"heap_memory_usage: 249726320\nnon_heap_memory_usage: 169625352\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738172000,"args":{"JVM stats":"heap_memory_usage: 251218304\nnon_heap_memory_usage: 169630976\nloaded_class_count: 16360\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738354000,"args":{"JVM stats":"heap_memory_usage: 290988160\nnon_heap_memory_usage: 169357424\nloaded_class_count: 16360\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738355000,"args":{"JVM stats":"heap_memory_usage: 290988160\nnon_heap_memory_usage: 169358128\nloaded_class_count: 16360\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738356000,"args":{"JVM stats":"heap_memory_usage: 290988160\nnon_heap_memory_usage: 169358128\nloaded_class_count: 16360\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738356001,"args":{"JVM stats":"heap_memory_usage: 291235480\nnon_heap_memory_usage: 169358128\nloaded_class_count: 16360\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430738370000,"args":{"JVM stats":"heap_memory_usage: 292543048\nnon_heap_memory_usage: 169355440\nloaded_class_count: 16360\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":17,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733228000,"dur":4000},{"pid":1,"tid":17,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733232000,"dur":3000},{"pid":1,"tid":17,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733235000,"dur":1000},{"pid":1,"tid":17,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733235000,"dur":1000},{"pid":1,"tid":17,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733239000,"dur":1000},{"pid":1,"tid":17,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733240000,"dur":100},{"pid":1,"tid":17,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733241000,"dur":1000},{"pid":1,"tid":17,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733242000,"dur":100},{"pid":1,"tid":17,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733242000,"dur":100},{"pid":1,"tid":17,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733242000,"dur":100},{"pid":1,"tid":17,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733242000,"dur":1000},{"pid":1,"tid":17,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733243000,"dur":100},{"pid":1,"tid":17,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733243000,"dur":3000},{"pid":1,"tid":17,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733246000,"dur":100},{"pid":1,"tid":17,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733246000,"dur":1000},{"pid":1,"tid":17,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733247000,"dur":100},{"pid":1,"tid":17,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733247000,"dur":39000},{"pid":1,"tid":17,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733286000,"dur":1000},{"pid":1,"tid":17,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733287000,"dur":4000},{"pid":1,"tid":17,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733292000,"dur":2000},{"pid":1,"tid":17,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733294000,"dur":1000},{"pid":1,"tid":17,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430733240000,"dur":55000},{"pid":1,"tid":17,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733295000,"dur":3000},{"pid":1,"tid":17,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733298000,"dur":4000},{"pid":1,"tid":17,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733239000,"dur":64000},{"pid":1,"tid":17,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733303000,"dur":2000},{"pid":1,"tid":17,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430733237000,"dur":68000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430733317000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733319000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733319000,"dur":46000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733366000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733370000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733373000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733374000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733375000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733375000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733376000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733377000,"dur":43000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733421000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733422000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733424000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733425000,"dur":6000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430733431000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733432000,"dur":26000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733459000,"dur":11000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733471000,"dur":100},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733472000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733473000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733473000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733477000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430733480000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733485000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733486000,"dur":8000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733495000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430733509000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430733510000,"dur":4242000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430737753000,"dur":1000},{"pid":1,"tid":19,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518430737822000,"dur":5000},{"pid":1,"tid":19,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518430737827000,"dur":149000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430737755000,"dur":292000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738048000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738048000,"dur":7000},{"pid":1,"tid":20,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518430738056000,"dur":1000},{"pid":1,"tid":20,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518430738057000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738055000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738057000,"dur":12000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738070000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738070000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738071000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738071000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738072000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738074000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738084000,"dur":15000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738099000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738106000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738114000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738115000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430738117000,"dur":1000},{"pid":1,"tid":20,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518430738120000,"dur":100},{"pid":1,"tid":20,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518430738120000,"dur":38000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738118000,"dur":54000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738173000,"dur":181000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738354000,"dur":1000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738356000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430738356000,"dur":100},{"pid":1,"tid":17,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430738362000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-58-370.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-58-370.rawproto
new file mode 100644
index 00000000..0f3626c3
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-18-58-370.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-23-19-176.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-23-19-176.json
new file mode 100644
index 00000000..22849065
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-23-19-176.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993314000,"args":{"JVM stats":"heap_memory_usage: 62161424\nnon_heap_memory_usage: 169486984\nloaded_class_count: 16367\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 11\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993409000,"args":{"JVM stats":"heap_memory_usage: 74607008\nnon_heap_memory_usage: 169382584\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993409001,"args":{"JVM stats":"heap_memory_usage: 74889664\nnon_heap_memory_usage: 169382584\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993446000,"args":{"JVM stats":"heap_memory_usage: 81477864\nnon_heap_memory_usage: 169400224\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993450000,"args":{"JVM stats":"heap_memory_usage: 81477864\nnon_heap_memory_usage: 169400224\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993454000,"args":{"JVM stats":"heap_memory_usage: 82041160\nnon_heap_memory_usage: 169400224\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993455000,"args":{"JVM stats":"heap_memory_usage: 82041160\nnon_heap_memory_usage: 169400224\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993456000,"args":{"JVM stats":"heap_memory_usage: 82041160\nnon_heap_memory_usage: 169400224\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993456001,"args":{"JVM stats":"heap_memory_usage: 82041160\nnon_heap_memory_usage: 169401528\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993457000,"args":{"JVM stats":"heap_memory_usage: 82041160\nnon_heap_memory_usage: 169401528\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993457001,"args":{"JVM stats":"heap_memory_usage: 82041160\nnon_heap_memory_usage: 169401528\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993616000,"args":{"JVM stats":"heap_memory_usage: 121245056\nnon_heap_memory_usage: 169434808\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993618000,"args":{"JVM stats":"heap_memory_usage: 121376144\nnon_heap_memory_usage: 169442296\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993623000,"args":{"JVM stats":"heap_memory_usage: 122225208\nnon_heap_memory_usage: 169444408\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430993623001,"args":{"JVM stats":"heap_memory_usage: 122363856\nnon_heap_memory_usage: 169444408\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994291000,"args":{"JVM stats":"heap_memory_usage: 140243440\nnon_heap_memory_usage: 169501720\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994292000,"args":{"JVM stats":"heap_memory_usage: 140308992\nnon_heap_memory_usage: 169502024\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994308000,"args":{"JVM stats":"heap_memory_usage: 141003672\nnon_heap_memory_usage: 169496520\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994319000,"args":{"JVM stats":"heap_memory_usage: 141567016\nnon_heap_memory_usage: 169496520\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994321000,"args":{"JVM stats":"heap_memory_usage: 141567016\nnon_heap_memory_usage: 169496520\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994323000,"args":{"JVM stats":"heap_memory_usage: 141567016\nnon_heap_memory_usage: 169496520\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994323001,"args":{"JVM stats":"heap_memory_usage: 141567016\nnon_heap_memory_usage: 169496520\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994327000,"args":{"JVM stats":"heap_memory_usage: 142130328\nnon_heap_memory_usage: 169496520\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994380000,"args":{"JVM stats":"heap_memory_usage: 152001072\nnon_heap_memory_usage: 169481488\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994384000,"args":{"JVM stats":"heap_memory_usage: 152282712\nnon_heap_memory_usage: 169481488\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994386000,"args":{"JVM stats":"heap_memory_usage: 152564496\nnon_heap_memory_usage: 169481488\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994396000,"args":{"JVM stats":"heap_memory_usage: 152846152\nnon_heap_memory_usage: 169513168\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994409000,"args":{"JVM stats":"heap_memory_usage: 153835848\nnon_heap_memory_usage: 169515856\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430994410000,"args":{"JVM stats":"heap_memory_usage: 153835848\nnon_heap_memory_usage: 169515856\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998510000,"args":{"JVM stats":"heap_memory_usage: 155257808\nnon_heap_memory_usage: 169506384\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998512000,"args":{"JVM stats":"heap_memory_usage: 155257808\nnon_heap_memory_usage: 169506384\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998806000,"args":{"JVM stats":"heap_memory_usage: 177560752\nnon_heap_memory_usage: 169510776\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998808000,"args":{"JVM stats":"heap_memory_usage: 177842416\nnon_heap_memory_usage: 169510776\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998814000,"args":{"JVM stats":"heap_memory_usage: 178405704\nnon_heap_memory_usage: 169510776\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998817000,"args":{"JVM stats":"heap_memory_usage: 178687360\nnon_heap_memory_usage: 169510776\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998829000,"args":{"JVM stats":"heap_memory_usage: 180377976\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998830000,"args":{"JVM stats":"heap_memory_usage: 180659616\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998830001,"args":{"JVM stats":"heap_memory_usage: 180659616\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998830000,"args":{"JVM stats":"heap_memory_usage: 180659616\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998831000,"args":{"JVM stats":"heap_memory_usage: 180671952\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998832000,"args":{"JVM stats":"heap_memory_usage: 180799264\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998841000,"args":{"JVM stats":"heap_memory_usage: 181644504\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998858000,"args":{"JVM stats":"heap_memory_usage: 182771376\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998865000,"args":{"JVM stats":"heap_memory_usage: 183053344\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998873000,"args":{"JVM stats":"heap_memory_usage: 183616704\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998874000,"args":{"JVM stats":"heap_memory_usage: 183616704\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998875000,"args":{"JVM stats":"heap_memory_usage: 183898352\nnon_heap_memory_usage: 169512568\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998877000,"args":{"JVM stats":"heap_memory_usage: 183898352\nnon_heap_memory_usage: 169525816\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430998943000,"args":{"JVM stats":"heap_memory_usage: 185588112\nnon_heap_memory_usage: 169525816\nloaded_class_count: 16370\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430999161000,"args":{"JVM stats":"heap_memory_usage: 230958992\nnon_heap_memory_usage: 169592992\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430999163000,"args":{"JVM stats":"heap_memory_usage: 231247584\nnon_heap_memory_usage: 169594456\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430999163001,"args":{"JVM stats":"heap_memory_usage: 231247584\nnon_heap_memory_usage: 169594456\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430999163000,"args":{"JVM stats":"heap_memory_usage: 231247584\nnon_heap_memory_usage: 169594456\nloaded_class_count: 16370\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518430999176000,"args":{"JVM stats":"heap_memory_usage: 231849240\nnon_heap_memory_usage: 169619280\nloaded_class_count: 16370\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":21,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993315000,"dur":5000},{"pid":1,"tid":21,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993320000,"dur":3000},{"pid":1,"tid":21,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993323000,"dur":5000},{"pid":1,"tid":21,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993323000,"dur":5000},{"pid":1,"tid":21,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993332000,"dur":2000},{"pid":1,"tid":21,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993334000,"dur":1000},{"pid":1,"tid":21,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993336000,"dur":1000},{"pid":1,"tid":21,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993337000,"dur":100},{"pid":1,"tid":21,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993337000,"dur":100},{"pid":1,"tid":21,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993337000,"dur":1000},{"pid":1,"tid":21,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993338000,"dur":100},{"pid":1,"tid":21,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993338000,"dur":100},{"pid":1,"tid":21,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993338000,"dur":2000},{"pid":1,"tid":21,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993340000,"dur":100},{"pid":1,"tid":21,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993340000,"dur":100},{"pid":1,"tid":21,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993340000,"dur":100},{"pid":1,"tid":21,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993340000,"dur":26000},{"pid":1,"tid":21,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993367000,"dur":1000},{"pid":1,"tid":21,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993368000,"dur":7000},{"pid":1,"tid":21,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993376000,"dur":2000},{"pid":1,"tid":21,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993378000,"dur":100},{"pid":1,"tid":21,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518430993335000,"dur":43000},{"pid":1,"tid":21,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993378000,"dur":3000},{"pid":1,"tid":21,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993381000,"dur":10000},{"pid":1,"tid":21,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993331000,"dur":60000},{"pid":1,"tid":21,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993391000,"dur":3000},{"pid":1,"tid":21,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430993330000,"dur":64000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430993406000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993409000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993410000,"dur":36000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993446000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993451000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993455000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993455000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993456000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993457000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993457000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430993458000,"dur":158000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993617000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993619000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430993623000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430993624000,"dur":667000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430994292000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994292000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994309000,"dur":10000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994320000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994322000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994323000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994324000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430994327000,"dur":53000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430994380000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994385000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994387000,"dur":9000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994396000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430994409000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430994410000,"dur":4100000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998511000,"dur":1000},{"pid":1,"tid":22,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518430998580000,"dur":8000},{"pid":1,"tid":22,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518430998588000,"dur":146000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430998512000,"dur":294000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430998807000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998808000,"dur":6000},{"pid":1,"tid":22,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518430998816000,"dur":100},{"pid":1,"tid":22,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518430998816000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430998815000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998817000,"dur":12000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998829000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998830000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430998830000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998830000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998831000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998832000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998841000,"dur":17000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998858000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998865000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430998873000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998874000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518430998875000,"dur":2000},{"pid":1,"tid":22,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518430998891000,"dur":100},{"pid":1,"tid":22,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518430998891000,"dur":39000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430998877000,"dur":66000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430998944000,"dur":217000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430999161000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430999163000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518430999163000,"dur":100},{"pid":1,"tid":21,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518430999169000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-23-19-176.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-23-19-176.rawproto
new file mode 100644
index 00000000..27b16cc1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-23-19-176.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-26-39-530.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-26-39-530.json
new file mode 100644
index 00000000..6f4dc230
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-26-39-530.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431197837000,"args":{"JVM stats":"heap_memory_usage: 290693704\nnon_heap_memory_usage: 169813264\nloaded_class_count: 16378\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431197922000,"args":{"JVM stats":"heap_memory_usage: 302524648\nnon_heap_memory_usage: 169935104\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431197922001,"args":{"JVM stats":"heap_memory_usage: 302807304\nnon_heap_memory_usage: 169935104\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431197995000,"args":{"JVM stats":"heap_memory_usage: 308736448\nnon_heap_memory_usage: 169942144\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431197999000,"args":{"JVM stats":"heap_memory_usage: 309018592\nnon_heap_memory_usage: 169942144\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198003000,"args":{"JVM stats":"heap_memory_usage: 309582912\nnon_heap_memory_usage: 169942144\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198004000,"args":{"JVM stats":"heap_memory_usage: 309582912\nnon_heap_memory_usage: 169942144\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198005000,"args":{"JVM stats":"heap_memory_usage: 309582912\nnon_heap_memory_usage: 169942144\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198006000,"args":{"JVM stats":"heap_memory_usage: 309582912\nnon_heap_memory_usage: 169942144\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198008000,"args":{"JVM stats":"heap_memory_usage: 309582912\nnon_heap_memory_usage: 169942144\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198009000,"args":{"JVM stats":"heap_memory_usage: 309582912\nnon_heap_memory_usage: 169942144\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198197000,"args":{"JVM stats":"heap_memory_usage: 348727024\nnon_heap_memory_usage: 169967552\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198198000,"args":{"JVM stats":"heap_memory_usage: 348858112\nnon_heap_memory_usage: 169967360\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198204000,"args":{"JVM stats":"heap_memory_usage: 349845768\nnon_heap_memory_usage: 169966016\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198204001,"args":{"JVM stats":"heap_memory_usage: 349862240\nnon_heap_memory_usage: 169966016\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198958000,"args":{"JVM stats":"heap_memory_usage: 76380656\nnon_heap_memory_usage: 170124496\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 7\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198959000,"args":{"JVM stats":"heap_memory_usage: 78059288\nnon_heap_memory_usage: 170129488\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198974000,"args":{"JVM stats":"heap_memory_usage: 79916888\nnon_heap_memory_usage: 170131216\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198984000,"args":{"JVM stats":"heap_memory_usage: 80339512\nnon_heap_memory_usage: 170131216\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198986000,"args":{"JVM stats":"heap_memory_usage: 80480352\nnon_heap_memory_usage: 170131216\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198987000,"args":{"JVM stats":"heap_memory_usage: 80480352\nnon_heap_memory_usage: 170131216\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198987001,"args":{"JVM stats":"heap_memory_usage: 80480352\nnon_heap_memory_usage: 170131216\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431198990000,"args":{"JVM stats":"heap_memory_usage: 80768160\nnon_heap_memory_usage: 170131216\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199044000,"args":{"JVM stats":"heap_memory_usage: 89654008\nnon_heap_memory_usage: 170136264\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199048000,"args":{"JVM stats":"heap_memory_usage: 89944560\nnon_heap_memory_usage: 170136264\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199050000,"args":{"JVM stats":"heap_memory_usage: 90085400\nnon_heap_memory_usage: 170137928\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199059000,"args":{"JVM stats":"heap_memory_usage: 90649216\nnon_heap_memory_usage: 170137928\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199079000,"args":{"JVM stats":"heap_memory_usage: 91086112\nnon_heap_memory_usage: 170151880\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199080000,"args":{"JVM stats":"heap_memory_usage: 91226944\nnon_heap_memory_usage: 170151880\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199150000,"args":{"JVM stats":"heap_memory_usage: 92130968\nnon_heap_memory_usage: 170153480\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199152000,"args":{"JVM stats":"heap_memory_usage: 92271808\nnon_heap_memory_usage: 170153480\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199162000,"args":{"JVM stats":"heap_memory_usage: 92835152\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199164000,"args":{"JVM stats":"heap_memory_usage: 92835152\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199173000,"args":{"JVM stats":"heap_memory_usage: 94132952\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199174000,"args":{"JVM stats":"heap_memory_usage: 94273784\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199192000,"args":{"JVM stats":"heap_memory_usage: 95553912\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199194000,"args":{"JVM stats":"heap_memory_usage: 95553912\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199194001,"args":{"JVM stats":"heap_memory_usage: 95553912\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199194000,"args":{"JVM stats":"heap_memory_usage: 95553912\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199195000,"args":{"JVM stats":"heap_memory_usage: 95553912\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199197000,"args":{"JVM stats":"heap_memory_usage: 95553912\nnon_heap_memory_usage: 170154568\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199211000,"args":{"JVM stats":"heap_memory_usage: 96282520\nnon_heap_memory_usage: 170159944\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199240000,"args":{"JVM stats":"heap_memory_usage: 97011128\nnon_heap_memory_usage: 170159560\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199252000,"args":{"JVM stats":"heap_memory_usage: 97739736\nnon_heap_memory_usage: 170159560\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199266000,"args":{"JVM stats":"heap_memory_usage: 98468656\nnon_heap_memory_usage: 170159560\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199269000,"args":{"JVM stats":"heap_memory_usage: 98468656\nnon_heap_memory_usage: 170159560\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199272000,"args":{"JVM stats":"heap_memory_usage: 98468656\nnon_heap_memory_usage: 170159560\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199274000,"args":{"JVM stats":"heap_memory_usage: 98468656\nnon_heap_memory_usage: 170159560\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199276000,"args":{"JVM stats":"heap_memory_usage: 98468656\nnon_heap_memory_usage: 170159560\nloaded_class_count: 16383\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199512000,"args":{"JVM stats":"heap_memory_usage: 129869096\nnon_heap_memory_usage: 170195808\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199514000,"args":{"JVM stats":"heap_memory_usage: 130159256\nnon_heap_memory_usage: 170196832\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199515000,"args":{"JVM stats":"heap_memory_usage: 130159256\nnon_heap_memory_usage: 170196832\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199515001,"args":{"JVM stats":"heap_memory_usage: 130159256\nnon_heap_memory_usage: 170196832\nloaded_class_count: 16383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431199530000,"args":{"JVM stats":"heap_memory_usage: 131757520\nnon_heap_memory_usage: 170197160\nloaded_class_count: 16383\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":23,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197838000,"dur":3000},{"pid":1,"tid":23,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197841000,"dur":3000},{"pid":1,"tid":23,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197844000,"dur":1000},{"pid":1,"tid":23,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197844000,"dur":1000},{"pid":1,"tid":23,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197849000,"dur":4000},{"pid":1,"tid":23,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197853000,"dur":100},{"pid":1,"tid":23,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197854000,"dur":100},{"pid":1,"tid":23,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197854000,"dur":1000},{"pid":1,"tid":23,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197855000,"dur":100},{"pid":1,"tid":23,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197855000,"dur":100},{"pid":1,"tid":23,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197855000,"dur":1000},{"pid":1,"tid":23,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197856000,"dur":100},{"pid":1,"tid":23,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197856000,"dur":4000},{"pid":1,"tid":23,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197860000,"dur":100},{"pid":1,"tid":23,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197860000,"dur":100},{"pid":1,"tid":23,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197860000,"dur":100},{"pid":1,"tid":23,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197860000,"dur":24000},{"pid":1,"tid":23,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197884000,"dur":1000},{"pid":1,"tid":23,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197885000,"dur":4000},{"pid":1,"tid":23,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197890000,"dur":2000},{"pid":1,"tid":23,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197892000,"dur":100},{"pid":1,"tid":23,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431197853000,"dur":39000},{"pid":1,"tid":23,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197892000,"dur":4000},{"pid":1,"tid":23,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197896000,"dur":8000},{"pid":1,"tid":23,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197849000,"dur":55000},{"pid":1,"tid":23,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197905000,"dur":2000},{"pid":1,"tid":23,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431197847000,"dur":60000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431197920000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431197922000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431197923000,"dur":72000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431197995000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198000000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198003000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198004000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198006000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198007000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198009000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431198010000,"dur":187000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198197000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198199000,"dur":5000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198204000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431198205000,"dur":753000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431198958000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198959000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198975000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198985000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198986000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198987000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431198987000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431198990000,"dur":54000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199044000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199049000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199050000,"dur":9000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199060000,"dur":19000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199079000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199080000,"dur":70000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199151000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199153000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199163000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199164000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199173000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199175000,"dur":17000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199193000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199194000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199194000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199195000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199196000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199197000,"dur":14000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199212000,"dur":28000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199240000,"dur":12000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199252000,"dur":14000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199267000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199269000,"dur":3000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199273000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431199275000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199276000,"dur":236000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199512000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199514000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431199515000,"dur":100},{"pid":1,"tid":23,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431199521000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-26-39-530.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-26-39-530.rawproto
new file mode 100644
index 00000000..62a99e68
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-26-39-530.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-28-27-270.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-28-27-270.json
new file mode 100644
index 00000000..3ce4405f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-28-27-270.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306105000,"args":{"JVM stats":"heap_memory_usage: 187710168\nnon_heap_memory_usage: 170432880\nloaded_class_count: 16391\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306176000,"args":{"JVM stats":"heap_memory_usage: 198998880\nnon_heap_memory_usage: 170517080\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306176001,"args":{"JVM stats":"heap_memory_usage: 198998880\nnon_heap_memory_usage: 170517080\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306213000,"args":{"JVM stats":"heap_memory_usage: 205501520\nnon_heap_memory_usage: 170520024\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306216000,"args":{"JVM stats":"heap_memory_usage: 205883480\nnon_heap_memory_usage: 170517016\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306219000,"args":{"JVM stats":"heap_memory_usage: 206265048\nnon_heap_memory_usage: 170517016\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306219001,"args":{"JVM stats":"heap_memory_usage: 206265048\nnon_heap_memory_usage: 170517016\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306220000,"args":{"JVM stats":"heap_memory_usage: 206265048\nnon_heap_memory_usage: 170517720\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306220001,"args":{"JVM stats":"heap_memory_usage: 206265048\nnon_heap_memory_usage: 170517720\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306221000,"args":{"JVM stats":"heap_memory_usage: 206265048\nnon_heap_memory_usage: 170517720\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306221001,"args":{"JVM stats":"heap_memory_usage: 206455840\nnon_heap_memory_usage: 170517720\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306356000,"args":{"JVM stats":"heap_memory_usage: 242333064\nnon_heap_memory_usage: 170548184\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306359000,"args":{"JVM stats":"heap_memory_usage: 242529704\nnon_heap_memory_usage: 170548184\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306366000,"args":{"JVM stats":"heap_memory_usage: 243362848\nnon_heap_memory_usage: 170548184\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306367000,"args":{"JVM stats":"heap_memory_usage: 243553656\nnon_heap_memory_usage: 170548184\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306861000,"args":{"JVM stats":"heap_memory_usage: 259235824\nnon_heap_memory_usage: 170624112\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306864000,"args":{"JVM stats":"heap_memory_usage: 259235824\nnon_heap_memory_usage: 170624112\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306881000,"args":{"JVM stats":"heap_memory_usage: 260401040\nnon_heap_memory_usage: 170630160\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306893000,"args":{"JVM stats":"heap_memory_usage: 260974432\nnon_heap_memory_usage: 170630160\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306895000,"args":{"JVM stats":"heap_memory_usage: 260974432\nnon_heap_memory_usage: 170630160\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306897000,"args":{"JVM stats":"heap_memory_usage: 261165240\nnon_heap_memory_usage: 170630160\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306898000,"args":{"JVM stats":"heap_memory_usage: 261165240\nnon_heap_memory_usage: 170630160\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306900000,"args":{"JVM stats":"heap_memory_usage: 261546952\nnon_heap_memory_usage: 170630160\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306940000,"args":{"JVM stats":"heap_memory_usage: 269994920\nnon_heap_memory_usage: 170628392\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306945000,"args":{"JVM stats":"heap_memory_usage: 270595968\nnon_heap_memory_usage: 170628392\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306946000,"args":{"JVM stats":"heap_memory_usage: 270595968\nnon_heap_memory_usage: 170628392\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306953000,"args":{"JVM stats":"heap_memory_usage: 271169112\nnon_heap_memory_usage: 170628392\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306966000,"args":{"JVM stats":"heap_memory_usage: 271937840\nnon_heap_memory_usage: 170628392\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431306968000,"args":{"JVM stats":"heap_memory_usage: 271937840\nnon_heap_memory_usage: 170628392\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307012000,"args":{"JVM stats":"heap_memory_usage: 272891704\nnon_heap_memory_usage: 170629160\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307014000,"args":{"JVM stats":"heap_memory_usage: 273082592\nnon_heap_memory_usage: 170629160\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307019000,"args":{"JVM stats":"heap_memory_usage: 273655448\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307020000,"args":{"JVM stats":"heap_memory_usage: 273655448\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307026000,"args":{"JVM stats":"heap_memory_usage: 274610984\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307026001,"args":{"JVM stats":"heap_memory_usage: 274610984\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307038000,"args":{"JVM stats":"heap_memory_usage: 276330088\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307039000,"args":{"JVM stats":"heap_memory_usage: 276520896\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307039001,"args":{"JVM stats":"heap_memory_usage: 276520896\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307040000,"args":{"JVM stats":"heap_memory_usage: 276520896\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307041000,"args":{"JVM stats":"heap_memory_usage: 276520896\nnon_heap_memory_usage: 170628648\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307042000,"args":{"JVM stats":"heap_memory_usage: 276715776\nnon_heap_memory_usage: 170629352\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307051000,"args":{"JVM stats":"heap_memory_usage: 277479624\nnon_heap_memory_usage: 170627368\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307068000,"args":{"JVM stats":"heap_memory_usage: 278815760\nnon_heap_memory_usage: 170627368\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307075000,"args":{"JVM stats":"heap_memory_usage: 279197360\nnon_heap_memory_usage: 170627368\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307084000,"args":{"JVM stats":"heap_memory_usage: 279770144\nnon_heap_memory_usage: 170627368\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307085000,"args":{"JVM stats":"heap_memory_usage: 279770144\nnon_heap_memory_usage: 170627368\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307087000,"args":{"JVM stats":"heap_memory_usage: 279960912\nnon_heap_memory_usage: 170627368\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307088000,"args":{"JVM stats":"heap_memory_usage: 280151960\nnon_heap_memory_usage: 170627368\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307090000,"args":{"JVM stats":"heap_memory_usage: 280151960\nnon_heap_memory_usage: 170627368\nloaded_class_count: 16391\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307255000,"args":{"JVM stats":"heap_memory_usage: 312571840\nnon_heap_memory_usage: 170577480\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307257000,"args":{"JVM stats":"heap_memory_usage: 312571840\nnon_heap_memory_usage: 170578184\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307257001,"args":{"JVM stats":"heap_memory_usage: 312958528\nnon_heap_memory_usage: 170578184\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307257000,"args":{"JVM stats":"heap_memory_usage: 312958528\nnon_heap_memory_usage: 170578184\nloaded_class_count: 16391\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431307270000,"args":{"JVM stats":"heap_memory_usage: 313912560\nnon_heap_memory_usage: 170578184\nloaded_class_count: 16391\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306105000,"dur":4000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306109000,"dur":3000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306112000,"dur":3000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306112000,"dur":3000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306117000,"dur":2000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306119000,"dur":100},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306119000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306120000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306120000,"dur":100},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306120000,"dur":100},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306120000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306120000,"dur":100},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306120000,"dur":2000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306122000,"dur":100},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306122000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306122000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306122000,"dur":26000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306148000,"dur":1000},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306149000,"dur":2000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306153000,"dur":1000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306154000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431306119000,"dur":35000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306154000,"dur":2000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306156000,"dur":6000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306117000,"dur":46000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306163000,"dur":3000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431306116000,"dur":50000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431306174000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306176000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306176000,"dur":37000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306213000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306217000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306219000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306219000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306220000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306220000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306221000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431306221000,"dur":135000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306357000,"dur":2000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306360000,"dur":5000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306366000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431306369000,"dur":492000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431306863000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306865000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306882000,"dur":11000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306894000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306896000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306897000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306898000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431306901000,"dur":39000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431306940000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306945000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306947000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306953000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431306967000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431306968000,"dur":44000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307013000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307014000,"dur":5000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431307019000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307020000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307026000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307027000,"dur":11000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307038000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307039000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431307039000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307040000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307041000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307042000,"dur":9000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307051000,"dur":17000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307068000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307075000,"dur":9000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431307084000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307085000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307087000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431307088000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431307090000,"dur":165000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431307256000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431307257000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431307257000,"dur":100},{"pid":1,"tid":24,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431307264000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-28-27-270.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-28-27-270.rawproto
new file mode 100644
index 00000000..6cb560f3
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-28-27-270.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-23-905.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-23-905.json
new file mode 100644
index 00000000..0c5c4ae7
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-23-905.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362476000,"args":{"JVM stats":"heap_memory_usage: 68788112\nnon_heap_memory_usage: 170743832\nloaded_class_count: 16398\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 11\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362596000,"args":{"JVM stats":"heap_memory_usage: 79842792\nnon_heap_memory_usage: 170838896\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362596001,"args":{"JVM stats":"heap_memory_usage: 79842792\nnon_heap_memory_usage: 170838896\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362659000,"args":{"JVM stats":"heap_memory_usage: 86677320\nnon_heap_memory_usage: 170866480\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362665000,"args":{"JVM stats":"heap_memory_usage: 86883080\nnon_heap_memory_usage: 170901552\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362670000,"args":{"JVM stats":"heap_memory_usage: 87294616\nnon_heap_memory_usage: 170905456\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362672000,"args":{"JVM stats":"heap_memory_usage: 87294616\nnon_heap_memory_usage: 170905456\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362673000,"args":{"JVM stats":"heap_memory_usage: 87294616\nnon_heap_memory_usage: 170905456\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362674000,"args":{"JVM stats":"heap_memory_usage: 87500384\nnon_heap_memory_usage: 170905456\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362674001,"args":{"JVM stats":"heap_memory_usage: 87500384\nnon_heap_memory_usage: 170906160\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362675000,"args":{"JVM stats":"heap_memory_usage: 87500384\nnon_heap_memory_usage: 170906160\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362827000,"args":{"JVM stats":"heap_memory_usage: 123159176\nnon_heap_memory_usage: 170915144\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362828000,"args":{"JVM stats":"heap_memory_usage: 123355816\nnon_heap_memory_usage: 170917960\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362832000,"args":{"JVM stats":"heap_memory_usage: 123975920\nnon_heap_memory_usage: 170917960\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431362833000,"args":{"JVM stats":"heap_memory_usage: 124186304\nnon_heap_memory_usage: 170918664\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363449000,"args":{"JVM stats":"heap_memory_usage: 140118440\nnon_heap_memory_usage: 170953200\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363450000,"args":{"JVM stats":"heap_memory_usage: 140118440\nnon_heap_memory_usage: 170953200\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363466000,"args":{"JVM stats":"heap_memory_usage: 141373512\nnon_heap_memory_usage: 170953200\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363476000,"args":{"JVM stats":"heap_memory_usage: 142197104\nnon_heap_memory_usage: 170953200\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363477000,"args":{"JVM stats":"heap_memory_usage: 142197104\nnon_heap_memory_usage: 170953200\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363478000,"args":{"JVM stats":"heap_memory_usage: 142197104\nnon_heap_memory_usage: 170953200\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363478001,"args":{"JVM stats":"heap_memory_usage: 142197104\nnon_heap_memory_usage: 170953200\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363481000,"args":{"JVM stats":"heap_memory_usage: 142609192\nnon_heap_memory_usage: 170953200\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363537000,"args":{"JVM stats":"heap_memory_usage: 151300872\nnon_heap_memory_usage: 171001008\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363544000,"args":{"JVM stats":"heap_memory_usage: 151530632\nnon_heap_memory_usage: 171001008\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363548000,"args":{"JVM stats":"heap_memory_usage: 151530632\nnon_heap_memory_usage: 171001008\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363557000,"args":{"JVM stats":"heap_memory_usage: 152148272\nnon_heap_memory_usage: 171001008\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363572000,"args":{"JVM stats":"heap_memory_usage: 153004248\nnon_heap_memory_usage: 171001008\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363574000,"args":{"JVM stats":"heap_memory_usage: 153004248\nnon_heap_memory_usage: 171001008\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363626000,"args":{"JVM stats":"heap_memory_usage: 154037688\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363628000,"args":{"JVM stats":"heap_memory_usage: 154037688\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363633000,"args":{"JVM stats":"heap_memory_usage: 154860984\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363634000,"args":{"JVM stats":"heap_memory_usage: 154860984\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363641000,"args":{"JVM stats":"heap_memory_usage: 155478264\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363643000,"args":{"JVM stats":"heap_memory_usage: 155478264\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363656000,"args":{"JVM stats":"heap_memory_usage: 157332272\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363656001,"args":{"JVM stats":"heap_memory_usage: 157332272\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363657000,"args":{"JVM stats":"heap_memory_usage: 157332272\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363657001,"args":{"JVM stats":"heap_memory_usage: 157332272\nnon_heap_memory_usage: 170999984\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363658000,"args":{"JVM stats":"heap_memory_usage: 157540096\nnon_heap_memory_usage: 171001296\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363658001,"args":{"JVM stats":"heap_memory_usage: 157540096\nnon_heap_memory_usage: 171001296\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363668000,"args":{"JVM stats":"heap_memory_usage: 158157784\nnon_heap_memory_usage: 171005008\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363684000,"args":{"JVM stats":"heap_memory_usage: 159392792\nnon_heap_memory_usage: 171005008\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363690000,"args":{"JVM stats":"heap_memory_usage: 159804648\nnon_heap_memory_usage: 171005008\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363698000,"args":{"JVM stats":"heap_memory_usage: 160422200\nnon_heap_memory_usage: 171005008\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363699000,"args":{"JVM stats":"heap_memory_usage: 160422200\nnon_heap_memory_usage: 171005008\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363701000,"args":{"JVM stats":"heap_memory_usage: 160628192\nnon_heap_memory_usage: 171005008\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363703000,"args":{"JVM stats":"heap_memory_usage: 160628192\nnon_heap_memory_usage: 171005008\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363705000,"args":{"JVM stats":"heap_memory_usage: 160833928\nnon_heap_memory_usage: 171005008\nloaded_class_count: 16410\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363892000,"args":{"JVM stats":"heap_memory_usage: 192352040\nnon_heap_memory_usage: 170824552\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363894000,"args":{"JVM stats":"heap_memory_usage: 192557808\nnon_heap_memory_usage: 170830696\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363894001,"args":{"JVM stats":"heap_memory_usage: 192557808\nnon_heap_memory_usage: 170826152\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363895000,"args":{"JVM stats":"heap_memory_usage: 192557808\nnon_heap_memory_usage: 170826152\nloaded_class_count: 16410\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431363906000,"args":{"JVM stats":"heap_memory_usage: 193670472\nnon_heap_memory_usage: 170854200\nloaded_class_count: 16410\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362477000,"dur":2000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362479000,"dur":6000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362485000,"dur":2000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362485000,"dur":2000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362494000,"dur":2000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362496000,"dur":100},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362496000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362497000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362497000,"dur":100},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362497000,"dur":100},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362497000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362497000,"dur":1000},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362498000,"dur":2000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362500000,"dur":100},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362500000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362500000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362500000,"dur":36000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362536000,"dur":2000},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362538000,"dur":10000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362551000,"dur":4000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362555000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431362496000,"dur":59000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362555000,"dur":7000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362562000,"dur":9000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362494000,"dur":79000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362573000,"dur":2000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431362492000,"dur":83000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431362595000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362596000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362597000,"dur":62000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362660000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362665000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362671000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362673000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362673000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362674000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362675000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431362675000,"dur":152000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362828000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362829000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431362832000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431362834000,"dur":615000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363450000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363450000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363466000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363476000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363477000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363478000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363479000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363481000,"dur":56000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363538000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363545000,"dur":3000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363548000,"dur":8000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363557000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363573000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363574000,"dur":52000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363627000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363628000,"dur":5000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363634000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363635000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363642000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363643000,"dur":13000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363656000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363657000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363657000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363657000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363658000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363659000,"dur":9000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363668000,"dur":16000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363684000,"dur":6000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363691000,"dur":7000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363698000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363699000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363701000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431363704000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363706000,"dur":185000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363892000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363894000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431363895000,"dur":100},{"pid":1,"tid":24,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431363898000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-23-905.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-23-905.rawproto
new file mode 100644
index 00000000..05cb61e5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-23-905.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-51-608.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-51-608.json
new file mode 100644
index 00000000..f54342a5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-51-608.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390255000,"args":{"JVM stats":"heap_memory_usage: 248836928\nnon_heap_memory_usage: 171044512\nloaded_class_count: 16417\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390351000,"args":{"JVM stats":"heap_memory_usage: 259795840\nnon_heap_memory_usage: 171064752\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390352000,"args":{"JVM stats":"heap_memory_usage: 259795840\nnon_heap_memory_usage: 171064752\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390400000,"args":{"JVM stats":"heap_memory_usage: 266815048\nnon_heap_memory_usage: 171071912\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390404000,"args":{"JVM stats":"heap_memory_usage: 267020936\nnon_heap_memory_usage: 171071912\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390407000,"args":{"JVM stats":"heap_memory_usage: 267226688\nnon_heap_memory_usage: 171098216\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390408000,"args":{"JVM stats":"heap_memory_usage: 267226688\nnon_heap_memory_usage: 171098216\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390409000,"args":{"JVM stats":"heap_memory_usage: 267226688\nnon_heap_memory_usage: 171098216\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390411000,"args":{"JVM stats":"heap_memory_usage: 267432520\nnon_heap_memory_usage: 171098216\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390413000,"args":{"JVM stats":"heap_memory_usage: 267432520\nnon_heap_memory_usage: 171098216\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390414000,"args":{"JVM stats":"heap_memory_usage: 267432520\nnon_heap_memory_usage: 171098216\nloaded_class_count: 16417\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390568000,"args":{"JVM stats":"heap_memory_usage: 302513496\nnon_heap_memory_usage: 171180448\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390571000,"args":{"JVM stats":"heap_memory_usage: 302919984\nnon_heap_memory_usage: 171180448\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390577000,"args":{"JVM stats":"heap_memory_usage: 303334568\nnon_heap_memory_usage: 171180448\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431390577001,"args":{"JVM stats":"heap_memory_usage: 303540328\nnon_heap_memory_usage: 171180448\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391165000,"args":{"JVM stats":"heap_memory_usage: 319508552\nnon_heap_memory_usage: 171234256\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391165001,"args":{"JVM stats":"heap_memory_usage: 319508552\nnon_heap_memory_usage: 171234256\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391179000,"args":{"JVM stats":"heap_memory_usage: 321188392\nnon_heap_memory_usage: 171217680\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391190000,"args":{"JVM stats":"heap_memory_usage: 322012088\nnon_heap_memory_usage: 171213904\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391192000,"args":{"JVM stats":"heap_memory_usage: 322217824\nnon_heap_memory_usage: 171213904\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391193000,"args":{"JVM stats":"heap_memory_usage: 322217824\nnon_heap_memory_usage: 171213904\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391194000,"args":{"JVM stats":"heap_memory_usage: 322217824\nnon_heap_memory_usage: 171213904\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391198000,"args":{"JVM stats":"heap_memory_usage: 322423592\nnon_heap_memory_usage: 171217256\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391253000,"args":{"JVM stats":"heap_memory_usage: 331198440\nnon_heap_memory_usage: 171224312\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391257000,"args":{"JVM stats":"heap_memory_usage: 331412384\nnon_heap_memory_usage: 171224312\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391259000,"args":{"JVM stats":"heap_memory_usage: 331412384\nnon_heap_memory_usage: 171224312\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391266000,"args":{"JVM stats":"heap_memory_usage: 332029840\nnon_heap_memory_usage: 171224312\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391278000,"args":{"JVM stats":"heap_memory_usage: 332651208\nnon_heap_memory_usage: 171224312\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391279000,"args":{"JVM stats":"heap_memory_usage: 332651208\nnon_heap_memory_usage: 171224312\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391333000,"args":{"JVM stats":"heap_memory_usage: 333679968\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391335000,"args":{"JVM stats":"heap_memory_usage: 333679968\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391344000,"args":{"JVM stats":"heap_memory_usage: 334297328\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391345000,"args":{"JVM stats":"heap_memory_usage: 334297328\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391350000,"args":{"JVM stats":"heap_memory_usage: 335121328\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391351000,"args":{"JVM stats":"heap_memory_usage: 335121328\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391364000,"args":{"JVM stats":"heap_memory_usage: 336974840\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391364001,"args":{"JVM stats":"heap_memory_usage: 336974840\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391365000,"args":{"JVM stats":"heap_memory_usage: 336974840\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391365001,"args":{"JVM stats":"heap_memory_usage: 337180664\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391366000,"args":{"JVM stats":"heap_memory_usage: 337180664\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391367000,"args":{"JVM stats":"heap_memory_usage: 337180664\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391376000,"args":{"JVM stats":"heap_memory_usage: 337798224\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391392000,"args":{"JVM stats":"heap_memory_usage: 339033608\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391400000,"args":{"JVM stats":"heap_memory_usage: 339445480\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391407000,"args":{"JVM stats":"heap_memory_usage: 340063344\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391408000,"args":{"JVM stats":"heap_memory_usage: 340063344\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391410000,"args":{"JVM stats":"heap_memory_usage: 340269104\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391412000,"args":{"JVM stats":"heap_memory_usage: 340269104\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391414000,"args":{"JVM stats":"heap_memory_usage: 340474920\nnon_heap_memory_usage: 171235200\nloaded_class_count: 16417\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391589000,"args":{"JVM stats":"heap_memory_usage: 80043680\nnon_heap_memory_usage: 171282016\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 7\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391592000,"args":{"JVM stats":"heap_memory_usage: 82403656\nnon_heap_memory_usage: 171282016\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391592001,"args":{"JVM stats":"heap_memory_usage: 82403656\nnon_heap_memory_usage: 171282016\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391593000,"args":{"JVM stats":"heap_memory_usage: 82506536\nnon_heap_memory_usage: 171282016\nloaded_class_count: 16417\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431391608000,"args":{"JVM stats":"heap_memory_usage: 82609456\nnon_heap_memory_usage: 171300128\nloaded_class_count: 16417\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390255000,"dur":4000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390259000,"dur":3000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390262000,"dur":1000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390262000,"dur":1000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390267000,"dur":2000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390269000,"dur":100},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390270000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390271000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390271000,"dur":1000},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390272000,"dur":1000},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390273000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390273000,"dur":100},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390273000,"dur":3000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390276000,"dur":100},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390276000,"dur":1000},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390277000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390277000,"dur":33000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390310000,"dur":1000},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390311000,"dur":5000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390318000,"dur":1000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390319000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431390269000,"dur":50000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390319000,"dur":3000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390322000,"dur":9000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390266000,"dur":66000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390332000,"dur":3000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431390264000,"dur":71000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431390349000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390352000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390352000,"dur":48000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390400000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390404000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390408000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390409000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390410000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390412000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390414000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431390415000,"dur":153000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390570000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390573000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431390577000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431390578000,"dur":587000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391165000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391166000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391180000,"dur":10000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391190000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391192000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391194000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391195000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391198000,"dur":55000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391253000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391257000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391259000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391266000,"dur":12000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391279000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391279000,"dur":54000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391333000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391336000,"dur":8000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391344000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391345000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391351000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391351000,"dur":13000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391364000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391365000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391365000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391365000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391366000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391367000,"dur":9000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391376000,"dur":16000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391393000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391400000,"dur":7000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391408000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391409000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391411000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431391412000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391414000,"dur":175000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391590000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391592000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431391593000,"dur":100},{"pid":1,"tid":24,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431391601000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-51-608.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-51-608.rawproto
new file mode 100644
index 00000000..4734f639
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-29-51-608.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-34-531.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-34-531.json
new file mode 100644
index 00000000..e6a89cfc
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-34-531.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432835000,"args":{"JVM stats":"heap_memory_usage: 137686512\nnon_heap_memory_usage: 171375336\nloaded_class_count: 16428\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432916000,"args":{"JVM stats":"heap_memory_usage: 148572392\nnon_heap_memory_usage: 171454736\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432917000,"args":{"JVM stats":"heap_memory_usage: 148572392\nnon_heap_memory_usage: 171454736\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432957000,"args":{"JVM stats":"heap_memory_usage: 155500176\nnon_heap_memory_usage: 171455440\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432960000,"args":{"JVM stats":"heap_memory_usage: 155681272\nnon_heap_memory_usage: 171467984\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432963000,"args":{"JVM stats":"heap_memory_usage: 156042984\nnon_heap_memory_usage: 171459024\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432965000,"args":{"JVM stats":"heap_memory_usage: 156042984\nnon_heap_memory_usage: 171460112\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432966000,"args":{"JVM stats":"heap_memory_usage: 156042984\nnon_heap_memory_usage: 171460816\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432968000,"args":{"JVM stats":"heap_memory_usage: 156042984\nnon_heap_memory_usage: 171461520\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432969000,"args":{"JVM stats":"heap_memory_usage: 156042984\nnon_heap_memory_usage: 171461520\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431432969001,"args":{"JVM stats":"heap_memory_usage: 156223864\nnon_heap_memory_usage: 171461520\nloaded_class_count: 16432\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431433211000,"args":{"JVM stats":"heap_memory_usage: 191651960\nnon_heap_memory_usage: 171476600\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431433228000,"args":{"JVM stats":"heap_memory_usage: 192059184\nnon_heap_memory_usage: 171477368\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431433238000,"args":{"JVM stats":"heap_memory_usage: 192420960\nnon_heap_memory_usage: 171477368\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431433240000,"args":{"JVM stats":"heap_memory_usage: 192420960\nnon_heap_memory_usage: 171477368\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434061000,"args":{"JVM stats":"heap_memory_usage: 207783056\nnon_heap_memory_usage: 171504688\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434062000,"args":{"JVM stats":"heap_memory_usage: 208029424\nnon_heap_memory_usage: 171504688\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434078000,"args":{"JVM stats":"heap_memory_usage: 208949952\nnon_heap_memory_usage: 171504688\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434090000,"args":{"JVM stats":"heap_memory_usage: 209856384\nnon_heap_memory_usage: 171504688\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434092000,"args":{"JVM stats":"heap_memory_usage: 210037208\nnon_heap_memory_usage: 171504688\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434093000,"args":{"JVM stats":"heap_memory_usage: 210037208\nnon_heap_memory_usage: 171504688\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434094000,"args":{"JVM stats":"heap_memory_usage: 210037208\nnon_heap_memory_usage: 171504688\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434098000,"args":{"JVM stats":"heap_memory_usage: 210399856\nnon_heap_memory_usage: 171504688\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434146000,"args":{"JVM stats":"heap_memory_usage: 218999184\nnon_heap_memory_usage: 171531024\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434151000,"args":{"JVM stats":"heap_memory_usage: 219562104\nnon_heap_memory_usage: 171533048\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434154000,"args":{"JVM stats":"heap_memory_usage: 219562104\nnon_heap_memory_usage: 171533832\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434166000,"args":{"JVM stats":"heap_memory_usage: 220104752\nnon_heap_memory_usage: 171542616\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434182000,"args":{"JVM stats":"heap_memory_usage: 220651288\nnon_heap_memory_usage: 171542616\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434183000,"args":{"JVM stats":"heap_memory_usage: 220651288\nnon_heap_memory_usage: 171542616\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434242000,"args":{"JVM stats":"heap_memory_usage: 221740328\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434244000,"args":{"JVM stats":"heap_memory_usage: 221740328\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434251000,"args":{"JVM stats":"heap_memory_usage: 222645504\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434253000,"args":{"JVM stats":"heap_memory_usage: 222645504\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434260000,"args":{"JVM stats":"heap_memory_usage: 223369688\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434261000,"args":{"JVM stats":"heap_memory_usage: 223550512\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434274000,"args":{"JVM stats":"heap_memory_usage: 224816840\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434275000,"args":{"JVM stats":"heap_memory_usage: 224816840\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434275001,"args":{"JVM stats":"heap_memory_usage: 224997688\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434276000,"args":{"JVM stats":"heap_memory_usage: 224997688\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434277000,"args":{"JVM stats":"heap_memory_usage: 224997688\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434277001,"args":{"JVM stats":"heap_memory_usage: 224997688\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434287000,"args":{"JVM stats":"heap_memory_usage: 225721472\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434304000,"args":{"JVM stats":"heap_memory_usage: 227169768\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434310000,"args":{"JVM stats":"heap_memory_usage: 227712392\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434318000,"args":{"JVM stats":"heap_memory_usage: 228254952\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434320000,"args":{"JVM stats":"heap_memory_usage: 228254952\nnon_heap_memory_usage: 171546072\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434323000,"args":{"JVM stats":"heap_memory_usage: 228435768\nnon_heap_memory_usage: 171551192\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434327000,"args":{"JVM stats":"heap_memory_usage: 228435768\nnon_heap_memory_usage: 171551192\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434331000,"args":{"JVM stats":"heap_memory_usage: 228616584\nnon_heap_memory_usage: 171551192\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434517000,"args":{"JVM stats":"heap_memory_usage: 260096616\nnon_heap_memory_usage: 171583032\nloaded_class_count: 16433\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434520000,"args":{"JVM stats":"heap_memory_usage: 260477624\nnon_heap_memory_usage: 171584280\nloaded_class_count: 16433\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434520001,"args":{"JVM stats":"heap_memory_usage: 260477624\nnon_heap_memory_usage: 171584280\nloaded_class_count: 16433\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434520000,"args":{"JVM stats":"heap_memory_usage: 260477624\nnon_heap_memory_usage: 171584280\nloaded_class_count: 16433\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431434531000,"args":{"JVM stats":"heap_memory_usage: 261764920\nnon_heap_memory_usage: 171590272\nloaded_class_count: 16433\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432835000,"dur":9000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432844000,"dur":5000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432849000,"dur":2000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432849000,"dur":2000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432856000,"dur":1000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432857000,"dur":1000},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432858000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432859000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432859000,"dur":100},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432859000,"dur":100},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432859000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432859000,"dur":100},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432859000,"dur":2000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432861000,"dur":100},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432861000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432861000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432861000,"dur":26000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432887000,"dur":100},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432887000,"dur":2000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432891000,"dur":1000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432892000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431432858000,"dur":34000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432892000,"dur":2000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432894000,"dur":6000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432855000,"dur":46000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432901000,"dur":3000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431432854000,"dur":50000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431432914000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432916000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432917000,"dur":40000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432957000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432960000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432964000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432965000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432967000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432968000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431432969000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431432969000,"dur":237000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431433214000,"dur":10000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431433230000,"dur":7000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431433239000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431433242000,"dur":819000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434061000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434062000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434078000,"dur":12000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434091000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434092000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434094000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434095000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434099000,"dur":47000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434146000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434152000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434155000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434167000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434182000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434183000,"dur":59000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434243000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434245000,"dur":6000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434252000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434253000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434260000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434261000,"dur":13000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434275000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434275000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434275000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434276000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434277000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434278000,"dur":9000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434288000,"dur":16000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434304000,"dur":6000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434310000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434319000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434320000,"dur":3000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434325000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431434328000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434332000,"dur":185000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434518000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434520000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431434520000,"dur":100},{"pid":1,"tid":24,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431434525000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-34-531.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-34-531.rawproto
new file mode 100644
index 00000000..1002de58
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-34-531.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-46-588.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-46-588.json
new file mode 100644
index 00000000..6d303e8d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-46-588.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445147000,"args":{"JVM stats":"heap_memory_usage: 315187432\nnon_heap_memory_usage: 171710952\nloaded_class_count: 16440\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445213000,"args":{"JVM stats":"heap_memory_usage: 326006848\nnon_heap_memory_usage: 171841064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445214000,"args":{"JVM stats":"heap_memory_usage: 326006848\nnon_heap_memory_usage: 171843592\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445249000,"args":{"JVM stats":"heap_memory_usage: 332928664\nnon_heap_memory_usage: 171853064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445253000,"args":{"JVM stats":"heap_memory_usage: 333109480\nnon_heap_memory_usage: 171853064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445256000,"args":{"JVM stats":"heap_memory_usage: 333471176\nnon_heap_memory_usage: 171853064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445257000,"args":{"JVM stats":"heap_memory_usage: 333471176\nnon_heap_memory_usage: 171853064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445258000,"args":{"JVM stats":"heap_memory_usage: 333471176\nnon_heap_memory_usage: 171853064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445258001,"args":{"JVM stats":"heap_memory_usage: 333471176\nnon_heap_memory_usage: 171853064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445259000,"args":{"JVM stats":"heap_memory_usage: 333471176\nnon_heap_memory_usage: 171853064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445259001,"args":{"JVM stats":"heap_memory_usage: 333653008\nnon_heap_memory_usage: 171853064\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445434000,"args":{"JVM stats":"heap_memory_usage: 76998872\nnon_heap_memory_usage: 171892104\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 21\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445435000,"args":{"JVM stats":"heap_memory_usage: 79674096\nnon_heap_memory_usage: 171892104\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445441000,"args":{"JVM stats":"heap_memory_usage: 80889656\nnon_heap_memory_usage: 171892872\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431445442000,"args":{"JVM stats":"heap_memory_usage: 80897880\nnon_heap_memory_usage: 171892872\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446059000,"args":{"JVM stats":"heap_memory_usage: 95669416\nnon_heap_memory_usage: 171907592\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446059001,"args":{"JVM stats":"heap_memory_usage: 95767752\nnon_heap_memory_usage: 171907592\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446082000,"args":{"JVM stats":"heap_memory_usage: 96574656\nnon_heap_memory_usage: 171901128\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446090000,"args":{"JVM stats":"heap_memory_usage: 97624168\nnon_heap_memory_usage: 171902536\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446092000,"args":{"JVM stats":"heap_memory_usage: 97624168\nnon_heap_memory_usage: 171906160\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446093000,"args":{"JVM stats":"heap_memory_usage: 97624168\nnon_heap_memory_usage: 171903408\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446093001,"args":{"JVM stats":"heap_memory_usage: 97624168\nnon_heap_memory_usage: 171903408\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446096000,"args":{"JVM stats":"heap_memory_usage: 98255840\nnon_heap_memory_usage: 171904728\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446143000,"args":{"JVM stats":"heap_memory_usage: 106899936\nnon_heap_memory_usage: 171941000\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446149000,"args":{"JVM stats":"heap_memory_usage: 107011520\nnon_heap_memory_usage: 171941000\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446151000,"args":{"JVM stats":"heap_memory_usage: 107347432\nnon_heap_memory_usage: 171941000\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446164000,"args":{"JVM stats":"heap_memory_usage: 107803088\nnon_heap_memory_usage: 171941000\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446181000,"args":{"JVM stats":"heap_memory_usage: 108409704\nnon_heap_memory_usage: 171937096\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446182000,"args":{"JVM stats":"heap_memory_usage: 108501768\nnon_heap_memory_usage: 171937096\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446245000,"args":{"JVM stats":"heap_memory_usage: 109309712\nnon_heap_memory_usage: 171937096\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446247000,"args":{"JVM stats":"heap_memory_usage: 109400736\nnon_heap_memory_usage: 171937096\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446256000,"args":{"JVM stats":"heap_memory_usage: 110133312\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446257000,"args":{"JVM stats":"heap_memory_usage: 110133312\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446266000,"args":{"JVM stats":"heap_memory_usage: 111145552\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446267000,"args":{"JVM stats":"heap_memory_usage: 111236624\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446286000,"args":{"JVM stats":"heap_memory_usage: 112543904\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446288000,"args":{"JVM stats":"heap_memory_usage: 112634952\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446289000,"args":{"JVM stats":"heap_memory_usage: 112634952\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446290000,"args":{"JVM stats":"heap_memory_usage: 112634952\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446291000,"args":{"JVM stats":"heap_memory_usage: 112725976\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446292000,"args":{"JVM stats":"heap_memory_usage: 112725976\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446304000,"args":{"JVM stats":"heap_memory_usage: 113455160\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446325000,"args":{"JVM stats":"heap_memory_usage: 114934056\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446336000,"args":{"JVM stats":"heap_memory_usage: 115481512\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446349000,"args":{"JVM stats":"heap_memory_usage: 115937096\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446350000,"args":{"JVM stats":"heap_memory_usage: 116028176\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446353000,"args":{"JVM stats":"heap_memory_usage: 116119224\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446356000,"args":{"JVM stats":"heap_memory_usage: 116301360\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446358000,"args":{"JVM stats":"heap_memory_usage: 116392416\nnon_heap_memory_usage: 171937800\nloaded_class_count: 16441\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446575000,"args":{"JVM stats":"heap_memory_usage: 147582888\nnon_heap_memory_usage: 171944168\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446577000,"args":{"JVM stats":"heap_memory_usage: 147959632\nnon_heap_memory_usage: 171948392\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446577001,"args":{"JVM stats":"heap_memory_usage: 147959632\nnon_heap_memory_usage: 171948392\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446577000,"args":{"JVM stats":"heap_memory_usage: 147959632\nnon_heap_memory_usage: 171948392\nloaded_class_count: 16441\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431446588000,"args":{"JVM stats":"heap_memory_usage: 148050712\nnon_heap_memory_usage: 171953856\nloaded_class_count: 16441\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445148000,"dur":2000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445150000,"dur":3000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445153000,"dur":1000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445153000,"dur":1000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445157000,"dur":2000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445159000,"dur":1000},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445160000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445161000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445161000,"dur":100},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445161000,"dur":100},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445161000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445161000,"dur":100},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445161000,"dur":2000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445163000,"dur":1000},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445164000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445164000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445164000,"dur":24000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445188000,"dur":1000},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445189000,"dur":3000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445193000,"dur":1000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445194000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431445160000,"dur":34000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445194000,"dur":2000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445196000,"dur":5000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445156000,"dur":45000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445201000,"dur":3000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431445155000,"dur":49000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431445212000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445213000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445214000,"dur":35000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445249000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445254000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445257000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445257000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445258000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445259000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445259000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431445260000,"dur":174000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445434000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445436000,"dur":5000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431445442000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431445443000,"dur":616000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446059000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446059000,"dur":23000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446082000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446091000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446092000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446093000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446094000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446097000,"dur":46000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446144000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446150000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446153000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446165000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446181000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446182000,"dur":63000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446246000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446247000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446257000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446258000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446266000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446268000,"dur":18000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446287000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446289000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446289000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446290000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446292000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446293000,"dur":11000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446305000,"dur":20000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446326000,"dur":9000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446337000,"dur":12000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446350000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446351000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446354000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431446356000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446359000,"dur":216000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446575000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446577000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431446577000,"dur":100},{"pid":1,"tid":24,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431446581000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-46-588.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-46-588.rawproto
new file mode 100644
index 00000000..75378b4d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-30-46-588.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-31-21-188.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-31-21-188.json
new file mode 100644
index 00000000..0bf89da3
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-31-21-188.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479850000,"args":{"JVM stats":"heap_memory_usage: 202317816\nnon_heap_memory_usage: 172033464\nloaded_class_count: 16448\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479935000,"args":{"JVM stats":"heap_memory_usage: 213807776\nnon_heap_memory_usage: 172114024\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479935001,"args":{"JVM stats":"heap_memory_usage: 213941344\nnon_heap_memory_usage: 172125416\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479977000,"args":{"JVM stats":"heap_memory_usage: 220386264\nnon_heap_memory_usage: 172137832\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479980000,"args":{"JVM stats":"heap_memory_usage: 220787176\nnon_heap_memory_usage: 172137832\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479984000,"args":{"JVM stats":"heap_memory_usage: 221054280\nnon_heap_memory_usage: 172137832\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479985000,"args":{"JVM stats":"heap_memory_usage: 221187808\nnon_heap_memory_usage: 172137832\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479986000,"args":{"JVM stats":"heap_memory_usage: 221187808\nnon_heap_memory_usage: 172137832\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479986001,"args":{"JVM stats":"heap_memory_usage: 221187808\nnon_heap_memory_usage: 172138472\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479987000,"args":{"JVM stats":"heap_memory_usage: 221323480\nnon_heap_memory_usage: 172139944\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431479987001,"args":{"JVM stats":"heap_memory_usage: 221323480\nnon_heap_memory_usage: 172141160\nloaded_class_count: 16450\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480125000,"args":{"JVM stats":"heap_memory_usage: 254719392\nnon_heap_memory_usage: 172330408\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480127000,"args":{"JVM stats":"heap_memory_usage: 254817728\nnon_heap_memory_usage: 172330408\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480130000,"args":{"JVM stats":"heap_memory_usage: 255218344\nnon_heap_memory_usage: 172330408\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480131000,"args":{"JVM stats":"heap_memory_usage: 255510064\nnon_heap_memory_usage: 172330792\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480797000,"args":{"JVM stats":"heap_memory_usage: 270423600\nnon_heap_memory_usage: 172472560\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480797001,"args":{"JVM stats":"heap_memory_usage: 270489152\nnon_heap_memory_usage: 172472560\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480819000,"args":{"JVM stats":"heap_memory_usage: 271557416\nnon_heap_memory_usage: 172481456\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480827000,"args":{"JVM stats":"heap_memory_usage: 272092128\nnon_heap_memory_usage: 172476848\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480828000,"args":{"JVM stats":"heap_memory_usage: 272092128\nnon_heap_memory_usage: 172476848\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480829000,"args":{"JVM stats":"heap_memory_usage: 272225664\nnon_heap_memory_usage: 172476848\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480829001,"args":{"JVM stats":"heap_memory_usage: 272225664\nnon_heap_memory_usage: 172476848\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480832000,"args":{"JVM stats":"heap_memory_usage: 272628336\nnon_heap_memory_usage: 172479408\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480874000,"args":{"JVM stats":"heap_memory_usage: 281179304\nnon_heap_memory_usage: 172481128\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480877000,"args":{"JVM stats":"heap_memory_usage: 281592328\nnon_heap_memory_usage: 172482536\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480878000,"args":{"JVM stats":"heap_memory_usage: 281592328\nnon_heap_memory_usage: 172482536\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480885000,"args":{"JVM stats":"heap_memory_usage: 282126712\nnon_heap_memory_usage: 172482536\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480898000,"args":{"JVM stats":"heap_memory_usage: 282940288\nnon_heap_memory_usage: 172482536\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480899000,"args":{"JVM stats":"heap_memory_usage: 283073832\nnon_heap_memory_usage: 172482536\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480947000,"args":{"JVM stats":"heap_memory_usage: 283741440\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480948000,"args":{"JVM stats":"heap_memory_usage: 283874976\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480953000,"args":{"JVM stats":"heap_memory_usage: 284809888\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480954000,"args":{"JVM stats":"heap_memory_usage: 284809888\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480960000,"args":{"JVM stats":"heap_memory_usage: 285744688\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480961000,"args":{"JVM stats":"heap_memory_usage: 285744688\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480972000,"args":{"JVM stats":"heap_memory_usage: 287081560\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480973000,"args":{"JVM stats":"heap_memory_usage: 287215104\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480973001,"args":{"JVM stats":"heap_memory_usage: 287215104\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480973000,"args":{"JVM stats":"heap_memory_usage: 287215104\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480975000,"args":{"JVM stats":"heap_memory_usage: 287215104\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480975001,"args":{"JVM stats":"heap_memory_usage: 287348752\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431480985000,"args":{"JVM stats":"heap_memory_usage: 288017072\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481000000,"args":{"JVM stats":"heap_memory_usage: 289353360\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481007000,"args":{"JVM stats":"heap_memory_usage: 289753960\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481015000,"args":{"JVM stats":"heap_memory_usage: 290288608\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481016000,"args":{"JVM stats":"heap_memory_usage: 290288608\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481018000,"args":{"JVM stats":"heap_memory_usage: 290422152\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481019000,"args":{"JVM stats":"heap_memory_usage: 290555704\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481020000,"args":{"JVM stats":"heap_memory_usage: 290689216\nnon_heap_memory_usage: 172467240\nloaded_class_count: 16450\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481176000,"args":{"JVM stats":"heap_memory_usage: 322074240\nnon_heap_memory_usage: 172537480\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481178000,"args":{"JVM stats":"heap_memory_usage: 322370480\nnon_heap_memory_usage: 172537480\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481178001,"args":{"JVM stats":"heap_memory_usage: 322370480\nnon_heap_memory_usage: 172537480\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481178000,"args":{"JVM stats":"heap_memory_usage: 322370480\nnon_heap_memory_usage: 172537480\nloaded_class_count: 16450\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431481188000,"args":{"JVM stats":"heap_memory_usage: 322370480\nnon_heap_memory_usage: 172539464\nloaded_class_count: 16450\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479850000,"dur":2000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479852000,"dur":5000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479857000,"dur":100},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479857000,"dur":100},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479861000,"dur":1000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479862000,"dur":1000},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479863000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479864000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479864000,"dur":100},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479864000,"dur":100},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479864000,"dur":1000},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479865000,"dur":100},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479865000,"dur":2000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479867000,"dur":100},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479867000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479867000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479867000,"dur":38000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479905000,"dur":100},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479905000,"dur":3000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479909000,"dur":2000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479911000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431479863000,"dur":48000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479911000,"dur":3000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479914000,"dur":8000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479860000,"dur":63000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479923000,"dur":2000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431479859000,"dur":66000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431479934000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479935000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479935000,"dur":42000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479978000,"dur":2000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479981000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479984000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479985000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479986000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479987000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431479987000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431479988000,"dur":137000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480126000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480127000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480131000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431480132000,"dur":665000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431480797000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480797000,"dur":22000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480819000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480827000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480829000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480829000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480830000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431480832000,"dur":42000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431480874000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480877000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480878000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480885000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480898000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431480899000,"dur":48000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480947000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480948000,"dur":5000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431480953000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480954000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480960000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480961000,"dur":11000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480972000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480973000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431480973000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480973000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480975000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480976000,"dur":9000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431480985000,"dur":14000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431481000000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431481007000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431481015000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431481016000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431481018000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431481019000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431481021000,"dur":155000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431481176000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431481178000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431481178000,"dur":100},{"pid":1,"tid":24,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431481182000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-31-21-188.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-31-21-188.rawproto
new file mode 100644
index 00000000..adc2e6b0
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-31-21-188.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-32-02-011.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-32-02-011.json
new file mode 100644
index 00000000..1aba10c5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-32-02-011.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520476000,"args":{"JVM stats":"heap_memory_usage: 67991536\nnon_heap_memory_usage: 172559320\nloaded_class_count: 16457\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 6\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520580000,"args":{"JVM stats":"heap_memory_usage: 78802936\nnon_heap_memory_usage: 172645432\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520580001,"args":{"JVM stats":"heap_memory_usage: 78802936\nnon_heap_memory_usage: 172645432\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520624000,"args":{"JVM stats":"heap_memory_usage: 85392208\nnon_heap_memory_usage: 172645432\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520628000,"args":{"JVM stats":"heap_memory_usage: 85708576\nnon_heap_memory_usage: 172645432\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520631000,"args":{"JVM stats":"heap_memory_usage: 85866720\nnon_heap_memory_usage: 172645432\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520632000,"args":{"JVM stats":"heap_memory_usage: 85866720\nnon_heap_memory_usage: 172645432\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520632001,"args":{"JVM stats":"heap_memory_usage: 85866720\nnon_heap_memory_usage: 172645432\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520633000,"args":{"JVM stats":"heap_memory_usage: 85866720\nnon_heap_memory_usage: 172645432\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520634000,"args":{"JVM stats":"heap_memory_usage: 86024856\nnon_heap_memory_usage: 172658680\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520634001,"args":{"JVM stats":"heap_memory_usage: 86024856\nnon_heap_memory_usage: 172649976\nloaded_class_count: 16457\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520780000,"args":{"JVM stats":"heap_memory_usage: 119859248\nnon_heap_memory_usage: 172860864\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520781000,"args":{"JVM stats":"heap_memory_usage: 120017392\nnon_heap_memory_usage: 172860864\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520785000,"args":{"JVM stats":"heap_memory_usage: 120693544\nnon_heap_memory_usage: 172860864\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431520786000,"args":{"JVM stats":"heap_memory_usage: 120693544\nnon_heap_memory_usage: 172860864\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521500000,"args":{"JVM stats":"heap_memory_usage: 136389872\nnon_heap_memory_usage: 172984256\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521501000,"args":{"JVM stats":"heap_memory_usage: 136455424\nnon_heap_memory_usage: 172984256\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521538000,"args":{"JVM stats":"heap_memory_usage: 137439144\nnon_heap_memory_usage: 172981552\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521550000,"args":{"JVM stats":"heap_memory_usage: 138073160\nnon_heap_memory_usage: 172981552\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521553000,"args":{"JVM stats":"heap_memory_usage: 138073160\nnon_heap_memory_usage: 172981552\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521555000,"args":{"JVM stats":"heap_memory_usage: 138231296\nnon_heap_memory_usage: 172981552\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521555001,"args":{"JVM stats":"heap_memory_usage: 138231296\nnon_heap_memory_usage: 172981552\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521558000,"args":{"JVM stats":"heap_memory_usage: 138389440\nnon_heap_memory_usage: 172981552\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521626000,"args":{"JVM stats":"heap_memory_usage: 146950664\nnon_heap_memory_usage: 173004880\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521630000,"args":{"JVM stats":"heap_memory_usage: 147271000\nnon_heap_memory_usage: 173004880\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521633000,"args":{"JVM stats":"heap_memory_usage: 147429136\nnon_heap_memory_usage: 173004880\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521647000,"args":{"JVM stats":"heap_memory_usage: 147903880\nnon_heap_memory_usage: 173038800\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521663000,"args":{"JVM stats":"heap_memory_usage: 148544728\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521664000,"args":{"JVM stats":"heap_memory_usage: 148702888\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521725000,"args":{"JVM stats":"heap_memory_usage: 149493520\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521727000,"args":{"JVM stats":"heap_memory_usage: 149651760\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521737000,"args":{"JVM stats":"heap_memory_usage: 150601072\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521738000,"args":{"JVM stats":"heap_memory_usage: 150601072\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521747000,"args":{"JVM stats":"heap_memory_usage: 151392104\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521748000,"args":{"JVM stats":"heap_memory_usage: 151550248\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521765000,"args":{"JVM stats":"heap_memory_usage: 152976128\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521766000,"args":{"JVM stats":"heap_memory_usage: 153134264\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521767000,"args":{"JVM stats":"heap_memory_usage: 153134264\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521767001,"args":{"JVM stats":"heap_memory_usage: 153134264\nnon_heap_memory_usage: 173050128\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521770000,"args":{"JVM stats":"heap_memory_usage: 153134264\nnon_heap_memory_usage: 173050832\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521771000,"args":{"JVM stats":"heap_memory_usage: 153305752\nnon_heap_memory_usage: 173050832\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521786000,"args":{"JVM stats":"heap_memory_usage: 154009168\nnon_heap_memory_usage: 173050832\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521809000,"args":{"JVM stats":"heap_memory_usage: 155116600\nnon_heap_memory_usage: 173050832\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521817000,"args":{"JVM stats":"heap_memory_usage: 155591224\nnon_heap_memory_usage: 173052496\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521824000,"args":{"JVM stats":"heap_memory_usage: 156224320\nnon_heap_memory_usage: 173052496\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521826000,"args":{"JVM stats":"heap_memory_usage: 156224320\nnon_heap_memory_usage: 173052496\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521828000,"args":{"JVM stats":"heap_memory_usage: 156382464\nnon_heap_memory_usage: 173052496\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521830000,"args":{"JVM stats":"heap_memory_usage: 156540600\nnon_heap_memory_usage: 173052496\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521833000,"args":{"JVM stats":"heap_memory_usage: 156698744\nnon_heap_memory_usage: 173055440\nloaded_class_count: 16457\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431521998000,"args":{"JVM stats":"heap_memory_usage: 188051160\nnon_heap_memory_usage: 173087256\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431522000000,"args":{"JVM stats":"heap_memory_usage: 188216328\nnon_heap_memory_usage: 173088120\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431522000001,"args":{"JVM stats":"heap_memory_usage: 188378552\nnon_heap_memory_usage: 173088120\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431522001000,"args":{"JVM stats":"heap_memory_usage: 188378552\nnon_heap_memory_usage: 173088120\nloaded_class_count: 16457\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431522011000,"args":{"JVM stats":"heap_memory_usage: 190216136\nnon_heap_memory_usage: 173088696\nloaded_class_count: 16457\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520476000,"dur":5000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520481000,"dur":6000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520487000,"dur":1000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520487000,"dur":1000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520492000,"dur":2000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520494000,"dur":1000},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520495000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520496000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520496000,"dur":100},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520496000,"dur":1000},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520497000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520497000,"dur":100},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520497000,"dur":2000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520499000,"dur":1000},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520500000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520500000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520500000,"dur":44000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520544000,"dur":1000},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520545000,"dur":3000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520550000,"dur":2000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520552000,"dur":1000},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431520495000,"dur":58000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520553000,"dur":2000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520555000,"dur":5000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520492000,"dur":69000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520561000,"dur":3000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431520490000,"dur":74000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431520578000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520580000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520581000,"dur":42000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520624000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520629000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520631000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520632000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520633000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520633000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520634000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431520634000,"dur":146000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520780000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520782000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431520785000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431520787000,"dur":713000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521500000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521501000,"dur":37000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521539000,"dur":11000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521551000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521554000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521555000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521555000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521558000,"dur":68000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521626000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521630000,"dur":3000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521634000,"dur":13000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521647000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521663000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521664000,"dur":61000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521726000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521727000,"dur":10000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521737000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521739000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521747000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521749000,"dur":16000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521766000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521767000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521767000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521767000,"dur":3000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521770000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521771000,"dur":15000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521787000,"dur":22000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521810000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521817000,"dur":7000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521824000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521826000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521828000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431521830000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521833000,"dur":165000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431521999000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431522000000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431522000000,"dur":100},{"pid":1,"tid":24,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431522005000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-32-02-011.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-32-02-011.rawproto
new file mode 100644
index 00000000..f12d17eb
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-32-02-011.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-18-573.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-18-573.json
new file mode 100644
index 00000000..993a837b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-18-573.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597022000,"args":{"JVM stats":"heap_memory_usage: 244064960\nnon_heap_memory_usage: 173235528\nloaded_class_count: 16464\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597126000,"args":{"JVM stats":"heap_memory_usage: 254842488\nnon_heap_memory_usage: 173282992\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597126001,"args":{"JVM stats":"heap_memory_usage: 254842488\nnon_heap_memory_usage: 173284912\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597176000,"args":{"JVM stats":"heap_memory_usage: 261693984\nnon_heap_memory_usage: 173207000\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597181000,"args":{"JVM stats":"heap_memory_usage: 262010360\nnon_heap_memory_usage: 173207000\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597185000,"args":{"JVM stats":"heap_memory_usage: 262326976\nnon_heap_memory_usage: 173207000\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597186000,"args":{"JVM stats":"heap_memory_usage: 262326976\nnon_heap_memory_usage: 173207000\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597188000,"args":{"JVM stats":"heap_memory_usage: 262326976\nnon_heap_memory_usage: 173207000\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597189000,"args":{"JVM stats":"heap_memory_usage: 262326976\nnon_heap_memory_usage: 173207000\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597190000,"args":{"JVM stats":"heap_memory_usage: 262485120\nnon_heap_memory_usage: 173207000\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597190001,"args":{"JVM stats":"heap_memory_usage: 262485120\nnon_heap_memory_usage: 173220248\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597353000,"args":{"JVM stats":"heap_memory_usage: 297385568\nnon_heap_memory_usage: 173218136\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597354000,"args":{"JVM stats":"heap_memory_usage: 297674800\nnon_heap_memory_usage: 173218136\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597358000,"args":{"JVM stats":"heap_memory_usage: 298377216\nnon_heap_memory_usage: 173218136\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431597358001,"args":{"JVM stats":"heap_memory_usage: 298377216\nnon_heap_memory_usage: 173218136\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598001000,"args":{"JVM stats":"heap_memory_usage: 313233160\nnon_heap_memory_usage: 173281616\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598002000,"args":{"JVM stats":"heap_memory_usage: 313298712\nnon_heap_memory_usage: 173281616\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598018000,"args":{"JVM stats":"heap_memory_usage: 314672720\nnon_heap_memory_usage: 173281616\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598029000,"args":{"JVM stats":"heap_memory_usage: 315305488\nnon_heap_memory_usage: 173281616\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598031000,"args":{"JVM stats":"heap_memory_usage: 315463880\nnon_heap_memory_usage: 173281616\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598032000,"args":{"JVM stats":"heap_memory_usage: 315463880\nnon_heap_memory_usage: 173281616\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598033000,"args":{"JVM stats":"heap_memory_usage: 315463880\nnon_heap_memory_usage: 173281616\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598038000,"args":{"JVM stats":"heap_memory_usage: 315780224\nnon_heap_memory_usage: 173281616\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598097000,"args":{"JVM stats":"heap_memory_usage: 324333776\nnon_heap_memory_usage: 173303376\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598103000,"args":{"JVM stats":"heap_memory_usage: 324654112\nnon_heap_memory_usage: 173303376\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598104000,"args":{"JVM stats":"heap_memory_usage: 324812248\nnon_heap_memory_usage: 173303376\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598129000,"args":{"JVM stats":"heap_memory_usage: 325286952\nnon_heap_memory_usage: 173299664\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598152000,"args":{"JVM stats":"heap_memory_usage: 325927728\nnon_heap_memory_usage: 173299664\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598153000,"args":{"JVM stats":"heap_memory_usage: 326085912\nnon_heap_memory_usage: 173300368\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598221000,"args":{"JVM stats":"heap_memory_usage: 326876496\nnon_heap_memory_usage: 173291728\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598223000,"args":{"JVM stats":"heap_memory_usage: 327034664\nnon_heap_memory_usage: 173291728\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598233000,"args":{"JVM stats":"heap_memory_usage: 327667272\nnon_heap_memory_usage: 173291728\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598235000,"args":{"JVM stats":"heap_memory_usage: 327667272\nnon_heap_memory_usage: 173291728\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598244000,"args":{"JVM stats":"heap_memory_usage: 328933944\nnon_heap_memory_usage: 173291728\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598246000,"args":{"JVM stats":"heap_memory_usage: 328933944\nnon_heap_memory_usage: 173294096\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598264000,"args":{"JVM stats":"heap_memory_usage: 330357600\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598266000,"args":{"JVM stats":"heap_memory_usage: 330357600\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598267000,"args":{"JVM stats":"heap_memory_usage: 330515736\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598267001,"args":{"JVM stats":"heap_memory_usage: 330515736\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598269000,"args":{"JVM stats":"heap_memory_usage: 330515736\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598270000,"args":{"JVM stats":"heap_memory_usage: 330673872\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598288000,"args":{"JVM stats":"heap_memory_usage: 331306528\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598311000,"args":{"JVM stats":"heap_memory_usage: 332414120\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598322000,"args":{"JVM stats":"heap_memory_usage: 332888568\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598334000,"args":{"JVM stats":"heap_memory_usage: 333363136\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598336000,"args":{"JVM stats":"heap_memory_usage: 333521776\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598339000,"args":{"JVM stats":"heap_memory_usage: 333680160\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598341000,"args":{"JVM stats":"heap_memory_usage: 333680160\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598344000,"args":{"JVM stats":"heap_memory_usage: 333838304\nnon_heap_memory_usage: 173371856\nloaded_class_count: 16464\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598554000,"args":{"JVM stats":"heap_memory_usage: 68599160\nnon_heap_memory_usage: 173290056\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 16\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598557000,"args":{"JVM stats":"heap_memory_usage: 70604952\nnon_heap_memory_usage: 173290056\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598558000,"args":{"JVM stats":"heap_memory_usage: 70604952\nnon_heap_memory_usage: 173290056\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598558001,"args":{"JVM stats":"heap_memory_usage: 70690312\nnon_heap_memory_usage: 173290056\nloaded_class_count: 16464\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431598573000,"args":{"JVM stats":"heap_memory_usage: 71453648\nnon_heap_memory_usage: 173304944\nloaded_class_count: 16464\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":25,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597022000,"dur":2000},{"pid":1,"tid":25,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597024000,"dur":5000},{"pid":1,"tid":25,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597029000,"dur":6000},{"pid":1,"tid":25,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597029000,"dur":6000},{"pid":1,"tid":25,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597043000,"dur":5000},{"pid":1,"tid":25,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597048000,"dur":1000},{"pid":1,"tid":25,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597050000,"dur":1000},{"pid":1,"tid":25,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597051000,"dur":1000},{"pid":1,"tid":25,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597052000,"dur":100},{"pid":1,"tid":25,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597052000,"dur":1000},{"pid":1,"tid":25,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597053000,"dur":100},{"pid":1,"tid":25,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597053000,"dur":1000},{"pid":1,"tid":25,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597054000,"dur":3000},{"pid":1,"tid":25,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597057000,"dur":100},{"pid":1,"tid":25,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597057000,"dur":100},{"pid":1,"tid":25,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597057000,"dur":100},{"pid":1,"tid":25,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597057000,"dur":30000},{"pid":1,"tid":25,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597087000,"dur":100},{"pid":1,"tid":25,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597087000,"dur":5000},{"pid":1,"tid":25,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597094000,"dur":1000},{"pid":1,"tid":25,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597095000,"dur":100},{"pid":1,"tid":25,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431597049000,"dur":46000},{"pid":1,"tid":25,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597095000,"dur":4000},{"pid":1,"tid":25,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597099000,"dur":6000},{"pid":1,"tid":25,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597043000,"dur":63000},{"pid":1,"tid":25,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597106000,"dur":3000},{"pid":1,"tid":25,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431597038000,"dur":71000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431597124000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597126000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597126000,"dur":50000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597176000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597182000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597186000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597186000,"dur":2000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597189000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597189000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597190000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431597191000,"dur":162000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597354000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597355000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431597358000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431597359000,"dur":642000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598002000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598002000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598018000,"dur":11000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598029000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598031000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598033000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598034000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598038000,"dur":59000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598097000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598104000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598105000,"dur":24000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598130000,"dur":22000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598152000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598153000,"dur":68000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598222000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598224000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598234000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598235000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598244000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598247000,"dur":17000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598265000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598266000,"dur":1000},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598267000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598268000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598269000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598271000,"dur":17000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598288000,"dur":23000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598312000,"dur":10000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598322000,"dur":12000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598334000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598336000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598339000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431598341000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598345000,"dur":209000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598555000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598558000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431598558000,"dur":100},{"pid":1,"tid":25,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431598563000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-18-573.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-18-573.rawproto
new file mode 100644
index 00000000..1c11d525
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-18-573.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-54-807.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-54-807.json
new file mode 100644
index 00000000..bc04c535
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-54-807.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634218000,"args":{"JVM stats":"heap_memory_usage: 126905736\nnon_heap_memory_usage: 173423240\nloaded_class_count: 16471\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634303000,"args":{"JVM stats":"heap_memory_usage: 138117248\nnon_heap_memory_usage: 173393904\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634303001,"args":{"JVM stats":"heap_memory_usage: 138117248\nnon_heap_memory_usage: 173393904\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634367000,"args":{"JVM stats":"heap_memory_usage: 144665672\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634376000,"args":{"JVM stats":"heap_memory_usage: 144975560\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634382000,"args":{"JVM stats":"heap_memory_usage: 145286328\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634384000,"args":{"JVM stats":"heap_memory_usage: 145286328\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634386000,"args":{"JVM stats":"heap_memory_usage: 145442232\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634387000,"args":{"JVM stats":"heap_memory_usage: 145442232\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634389000,"args":{"JVM stats":"heap_memory_usage: 145442232\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634390000,"args":{"JVM stats":"heap_memory_usage: 145442232\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634448000,"args":{"JVM stats":"heap_memory_usage: 149014752\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634449000,"args":{"JVM stats":"heap_memory_usage: 149014752\nnon_heap_memory_usage: 173437864\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634453000,"args":{"JVM stats":"heap_memory_usage: 149324560\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634454000,"args":{"JVM stats":"heap_memory_usage: 149324560\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634467000,"args":{"JVM stats":"heap_memory_usage: 150721000\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634467001,"args":{"JVM stats":"heap_memory_usage: 150721000\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634483000,"args":{"JVM stats":"heap_memory_usage: 151357976\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634497000,"args":{"JVM stats":"heap_memory_usage: 151977560\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634499000,"args":{"JVM stats":"heap_memory_usage: 152132504\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634499001,"args":{"JVM stats":"heap_memory_usage: 152132504\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634500000,"args":{"JVM stats":"heap_memory_usage: 152132504\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634503000,"args":{"JVM stats":"heap_memory_usage: 152598288\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634510000,"args":{"JVM stats":"heap_memory_usage: 152753288\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634515000,"args":{"JVM stats":"heap_memory_usage: 153111960\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634517000,"args":{"JVM stats":"heap_memory_usage: 153111960\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634534000,"args":{"JVM stats":"heap_memory_usage: 153732024\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634552000,"args":{"JVM stats":"heap_memory_usage: 154213240\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634554000,"args":{"JVM stats":"heap_memory_usage: 154213240\nnon_heap_memory_usage: 173454840\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634636000,"args":{"JVM stats":"heap_memory_usage: 155142736\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634640000,"args":{"JVM stats":"heap_memory_usage: 155142736\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634650000,"args":{"JVM stats":"heap_memory_usage: 156229408\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634651000,"args":{"JVM stats":"heap_memory_usage: 156229408\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634662000,"args":{"JVM stats":"heap_memory_usage: 157008648\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634663000,"args":{"JVM stats":"heap_memory_usage: 157163552\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634680000,"args":{"JVM stats":"heap_memory_usage: 158714352\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634681000,"args":{"JVM stats":"heap_memory_usage: 158714352\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634681001,"args":{"JVM stats":"heap_memory_usage: 158714352\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634682000,"args":{"JVM stats":"heap_memory_usage: 158869248\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634683000,"args":{"JVM stats":"heap_memory_usage: 158869248\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634684000,"args":{"JVM stats":"heap_memory_usage: 158869248\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634700000,"args":{"JVM stats":"heap_memory_usage: 159645176\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634731000,"args":{"JVM stats":"heap_memory_usage: 160730000\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634740000,"args":{"JVM stats":"heap_memory_usage: 161039800\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634750000,"args":{"JVM stats":"heap_memory_usage: 161659480\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634751000,"args":{"JVM stats":"heap_memory_usage: 161814368\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634754000,"args":{"JVM stats":"heap_memory_usage: 161814368\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634758000,"args":{"JVM stats":"heap_memory_usage: 161969312\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634760000,"args":{"JVM stats":"heap_memory_usage: 162124232\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634793000,"args":{"JVM stats":"heap_memory_usage: 162589080\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634797000,"args":{"JVM stats":"heap_memory_usage: 162743976\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634797001,"args":{"JVM stats":"heap_memory_usage: 162743976\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634797000,"args":{"JVM stats":"heap_memory_usage: 162743976\nnon_heap_memory_usage: 173459608\nloaded_class_count: 16471\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431634807000,"args":{"JVM stats":"heap_memory_usage: 163427728\nnon_heap_memory_usage: 173460376\nloaded_class_count: 16471\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":25,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634218000,"dur":4000},{"pid":1,"tid":25,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634222000,"dur":3000},{"pid":1,"tid":25,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634225000,"dur":1000},{"pid":1,"tid":25,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634225000,"dur":1000},{"pid":1,"tid":25,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634229000,"dur":2000},{"pid":1,"tid":25,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634231000,"dur":100},{"pid":1,"tid":25,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634231000,"dur":1000},{"pid":1,"tid":25,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634232000,"dur":100},{"pid":1,"tid":25,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634232000,"dur":100},{"pid":1,"tid":25,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634232000,"dur":100},{"pid":1,"tid":25,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634232000,"dur":100},{"pid":1,"tid":25,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634232000,"dur":1000},{"pid":1,"tid":25,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634233000,"dur":1000},{"pid":1,"tid":25,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634234000,"dur":1000},{"pid":1,"tid":25,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634235000,"dur":100},{"pid":1,"tid":25,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634235000,"dur":100},{"pid":1,"tid":25,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634235000,"dur":25000},{"pid":1,"tid":25,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634260000,"dur":1000},{"pid":1,"tid":25,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634261000,"dur":4000},{"pid":1,"tid":25,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634266000,"dur":2000},{"pid":1,"tid":25,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634268000,"dur":100},{"pid":1,"tid":25,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431634231000,"dur":37000},{"pid":1,"tid":25,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634268000,"dur":5000},{"pid":1,"tid":25,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634273000,"dur":8000},{"pid":1,"tid":25,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634229000,"dur":52000},{"pid":1,"tid":25,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634282000,"dur":2000},{"pid":1,"tid":25,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634227000,"dur":57000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634301000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634303000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634303000,"dur":64000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634368000,"dur":7000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634377000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634383000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634385000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634387000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634388000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634390000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634391000,"dur":57000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634448000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634450000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634454000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634456000,"dur":10000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634467000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634467000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634484000,"dur":13000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634497000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634499000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634500000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634500000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634503000,"dur":7000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634511000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634516000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634517000,"dur":17000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634534000,"dur":17000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634552000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634554000,"dur":82000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634637000,"dur":3000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634641000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634650000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634651000,"dur":11000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634662000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634664000,"dur":16000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634680000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634681000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634681000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634682000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634684000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634684000,"dur":16000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634701000,"dur":30000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634732000,"dur":8000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634740000,"dur":10000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634750000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634751000,"dur":3000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634755000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634759000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431634761000,"dur":32000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634793000,"dur":4000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634797000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431634797000,"dur":100},{"pid":1,"tid":25,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431634802000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-54-807.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-54-807.rawproto
new file mode 100644
index 00000000..4f37144d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-33-54-807.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-37-13-874.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-37-13-874.json
new file mode 100644
index 00000000..ab8c7862
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-37-13-874.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431827970000,"args":{"JVM stats":"heap_memory_usage: 219421064\nnon_heap_memory_usage: 173606576\nloaded_class_count: 16478\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828093000,"args":{"JVM stats":"heap_memory_usage: 230156240\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828094000,"args":{"JVM stats":"heap_memory_usage: 230156240\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828153000,"args":{"JVM stats":"heap_memory_usage: 236863360\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828159000,"args":{"JVM stats":"heap_memory_usage: 237173144\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828164000,"args":{"JVM stats":"heap_memory_usage: 237483400\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828165000,"args":{"JVM stats":"heap_memory_usage: 237483400\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828166000,"args":{"JVM stats":"heap_memory_usage: 237639304\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828167000,"args":{"JVM stats":"heap_memory_usage: 237639304\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828167001,"args":{"JVM stats":"heap_memory_usage: 237639304\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828168000,"args":{"JVM stats":"heap_memory_usage: 237639304\nnon_heap_memory_usage: 173597544\nloaded_class_count: 16478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828345000,"args":{"JVM stats":"heap_memory_usage: 272398648\nnon_heap_memory_usage: 173598080\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828347000,"args":{"JVM stats":"heap_memory_usage: 272652096\nnon_heap_memory_usage: 173602472\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828352000,"args":{"JVM stats":"heap_memory_usage: 273419200\nnon_heap_memory_usage: 173603624\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431828352001,"args":{"JVM stats":"heap_memory_usage: 273517536\nnon_heap_memory_usage: 173603624\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829098000,"args":{"JVM stats":"heap_memory_usage: 288767712\nnon_heap_memory_usage: 173617696\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829099000,"args":{"JVM stats":"heap_memory_usage: 288833264\nnon_heap_memory_usage: 173617696\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829125000,"args":{"JVM stats":"heap_memory_usage: 289545224\nnon_heap_memory_usage: 173617696\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829135000,"args":{"JVM stats":"heap_memory_usage: 290164984\nnon_heap_memory_usage: 173617696\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829137000,"args":{"JVM stats":"heap_memory_usage: 290319848\nnon_heap_memory_usage: 173617696\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829139000,"args":{"JVM stats":"heap_memory_usage: 290319848\nnon_heap_memory_usage: 173617696\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829140000,"args":{"JVM stats":"heap_memory_usage: 290319848\nnon_heap_memory_usage: 173617696\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829145000,"args":{"JVM stats":"heap_memory_usage: 290474752\nnon_heap_memory_usage: 173617696\nloaded_class_count: 16478\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829206000,"args":{"JVM stats":"heap_memory_usage: 299047296\nnon_heap_memory_usage: 173584704\nloaded_class_count: 16478\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829210000,"args":{"JVM stats":"heap_memory_usage: 299357232\nnon_heap_memory_usage: 173576448\nloaded_class_count: 16478\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829212000,"args":{"JVM stats":"heap_memory_usage: 299512128\nnon_heap_memory_usage: 173576448\nloaded_class_count: 16478\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829218000,"args":{"JVM stats":"heap_memory_usage: 299977096\nnon_heap_memory_usage: 173576448\nloaded_class_count: 16478\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829234000,"args":{"JVM stats":"heap_memory_usage: 301069840\nnon_heap_memory_usage: 173576448\nloaded_class_count: 16478\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431829234001,"args":{"JVM stats":"heap_memory_usage: 301069840\nnon_heap_memory_usage: 173576448\nloaded_class_count: 16478\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833164000,"args":{"JVM stats":"heap_memory_usage: 302003192\nnon_heap_memory_usage: 173588736\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833166000,"args":{"JVM stats":"heap_memory_usage: 302003192\nnon_heap_memory_usage: 173588736\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833454000,"args":{"JVM stats":"heap_memory_usage: 323914424\nnon_heap_memory_usage: 173593392\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833455000,"args":{"JVM stats":"heap_memory_usage: 324070328\nnon_heap_memory_usage: 173593392\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833464000,"args":{"JVM stats":"heap_memory_usage: 325008536\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833467000,"args":{"JVM stats":"heap_memory_usage: 325163424\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833480000,"args":{"JVM stats":"heap_memory_usage: 326714336\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833480001,"args":{"JVM stats":"heap_memory_usage: 326714336\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833481000,"args":{"JVM stats":"heap_memory_usage: 326714336\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833481001,"args":{"JVM stats":"heap_memory_usage: 326714336\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833483000,"args":{"JVM stats":"heap_memory_usage: 326869280\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833484000,"args":{"JVM stats":"heap_memory_usage: 327028256\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833495000,"args":{"JVM stats":"heap_memory_usage: 327648168\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833512000,"args":{"JVM stats":"heap_memory_usage: 329200184\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833519000,"args":{"JVM stats":"heap_memory_usage: 329664856\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833527000,"args":{"JVM stats":"heap_memory_usage: 330130136\nnon_heap_memory_usage: 173596528\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833528000,"args":{"JVM stats":"heap_memory_usage: 330285120\nnon_heap_memory_usage: 173600656\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833530000,"args":{"JVM stats":"heap_memory_usage: 330285120\nnon_heap_memory_usage: 173603240\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833532000,"args":{"JVM stats":"heap_memory_usage: 330440040\nnon_heap_memory_usage: 173623048\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833613000,"args":{"JVM stats":"heap_memory_usage: 331377616\nnon_heap_memory_usage: 173623080\nloaded_class_count: 16479\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833859000,"args":{"JVM stats":"heap_memory_usage: 82581088\nnon_heap_memory_usage: 173638688\nloaded_class_count: 16479\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 26\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833861000,"args":{"JVM stats":"heap_memory_usage: 83810952\nnon_heap_memory_usage: 173638688\nloaded_class_count: 16479\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833862000,"args":{"JVM stats":"heap_memory_usage: 83810952\nnon_heap_memory_usage: 173638688\nloaded_class_count: 16479\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833862001,"args":{"JVM stats":"heap_memory_usage: 83810952\nnon_heap_memory_usage: 173638688\nloaded_class_count: 16479\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431833875000,"args":{"JVM stats":"heap_memory_usage: 84552720\nnon_heap_memory_usage: 173638688\nloaded_class_count: 16479\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":26,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431827970000,"dur":3000},{"pid":1,"tid":26,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431827973000,"dur":4000},{"pid":1,"tid":26,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431827977000,"dur":7000},{"pid":1,"tid":26,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431827977000,"dur":7000},{"pid":1,"tid":26,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431827993000,"dur":3000},{"pid":1,"tid":26,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431827996000,"dur":100},{"pid":1,"tid":26,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431827997000,"dur":1000},{"pid":1,"tid":26,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431827998000,"dur":100},{"pid":1,"tid":26,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431827998000,"dur":1000},{"pid":1,"tid":26,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431827999000,"dur":100},{"pid":1,"tid":26,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431827999000,"dur":1000},{"pid":1,"tid":26,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828000000,"dur":100},{"pid":1,"tid":26,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828000000,"dur":3000},{"pid":1,"tid":26,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828003000,"dur":100},{"pid":1,"tid":26,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828003000,"dur":100},{"pid":1,"tid":26,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828003000,"dur":100},{"pid":1,"tid":26,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828003000,"dur":42000},{"pid":1,"tid":26,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828045000,"dur":100},{"pid":1,"tid":26,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828045000,"dur":7000},{"pid":1,"tid":26,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828055000,"dur":3000},{"pid":1,"tid":26,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431828058000,"dur":100},{"pid":1,"tid":26,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431827996000,"dur":62000},{"pid":1,"tid":26,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431828058000,"dur":5000},{"pid":1,"tid":26,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431828063000,"dur":6000},{"pid":1,"tid":26,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431827992000,"dur":78000},{"pid":1,"tid":26,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431828070000,"dur":2000},{"pid":1,"tid":26,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431827989000,"dur":83000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431828088000,"dur":5000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828094000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828094000,"dur":59000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828154000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828160000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828164000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828165000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828166000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828167000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828167000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431828168000,"dur":177000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828346000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828348000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431828352000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431828353000,"dur":745000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431829098000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829099000,"dur":26000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829126000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829136000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829138000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829140000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829141000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431829146000,"dur":60000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431829206000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829211000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829212000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829218000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431829234000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431829235000,"dur":3929000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833164000,"dur":2000},{"pid":1,"tid":27,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518431833229000,"dur":4000},{"pid":1,"tid":27,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518431833233000,"dur":144000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833167000,"dur":287000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833455000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833456000,"dur":7000},{"pid":1,"tid":27,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518431833465000,"dur":1000},{"pid":1,"tid":27,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518431833466000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833464000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833467000,"dur":13000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833480000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833481000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833481000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833481000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833483000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833484000,"dur":11000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833495000,"dur":17000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833512000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833519000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833527000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833528000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431833530000,"dur":2000},{"pid":1,"tid":27,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518431833533000,"dur":100},{"pid":1,"tid":27,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518431833533000,"dur":66000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833532000,"dur":81000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833614000,"dur":244000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833859000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833861000,"dur":1000},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431833862000,"dur":100},{"pid":1,"tid":26,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431833868000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-37-13-874.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-37-13-874.rawproto
new file mode 100644
index 00000000..c78ae9d9
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-37-13-874.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-05-949.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-05-949.json
new file mode 100644
index 00000000..1b4e453e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-05-949.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884045000,"args":{"JVM stats":"heap_memory_usage: 140599528\nnon_heap_memory_usage: 173750512\nloaded_class_count: 16486\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884161000,"args":{"JVM stats":"heap_memory_usage: 150788880\nnon_heap_memory_usage: 173812472\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884161001,"args":{"JVM stats":"heap_memory_usage: 150936248\nnon_heap_memory_usage: 173812472\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884224000,"args":{"JVM stats":"heap_memory_usage: 157177736\nnon_heap_memory_usage: 173855928\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884231000,"args":{"JVM stats":"heap_memory_usage: 157620432\nnon_heap_memory_usage: 173855928\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884236000,"args":{"JVM stats":"heap_memory_usage: 157915144\nnon_heap_memory_usage: 173855928\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884238000,"args":{"JVM stats":"heap_memory_usage: 157915144\nnon_heap_memory_usage: 173855928\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884240000,"args":{"JVM stats":"heap_memory_usage: 157915144\nnon_heap_memory_usage: 173855928\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884242000,"args":{"JVM stats":"heap_memory_usage: 158062472\nnon_heap_memory_usage: 173855928\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884243000,"args":{"JVM stats":"heap_memory_usage: 158062472\nnon_heap_memory_usage: 173855928\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884244000,"args":{"JVM stats":"heap_memory_usage: 158062472\nnon_heap_memory_usage: 173855928\nloaded_class_count: 16486\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884451000,"args":{"JVM stats":"heap_memory_usage: 192190608\nnon_heap_memory_usage: 173889640\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884453000,"args":{"JVM stats":"heap_memory_usage: 192420032\nnon_heap_memory_usage: 173895408\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884462000,"args":{"JVM stats":"heap_memory_usage: 193786736\nnon_heap_memory_usage: 173897136\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431884464000,"args":{"JVM stats":"heap_memory_usage: 193786736\nnon_heap_memory_usage: 173897136\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885087000,"args":{"JVM stats":"heap_memory_usage: 208102568\nnon_heap_memory_usage: 173907008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885087001,"args":{"JVM stats":"heap_memory_usage: 208168120\nnon_heap_memory_usage: 173907008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885103000,"args":{"JVM stats":"heap_memory_usage: 209006152\nnon_heap_memory_usage: 173906752\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885112000,"args":{"JVM stats":"heap_memory_usage: 209595592\nnon_heap_memory_usage: 173906752\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885114000,"args":{"JVM stats":"heap_memory_usage: 209595592\nnon_heap_memory_usage: 173906752\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885115000,"args":{"JVM stats":"heap_memory_usage: 209742928\nnon_heap_memory_usage: 173906752\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885116000,"args":{"JVM stats":"heap_memory_usage: 209742928\nnon_heap_memory_usage: 173906752\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885119000,"args":{"JVM stats":"heap_memory_usage: 210185000\nnon_heap_memory_usage: 173906752\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885179000,"args":{"JVM stats":"heap_memory_usage: 218729776\nnon_heap_memory_usage: 173910104\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885183000,"args":{"JVM stats":"heap_memory_usage: 219204576\nnon_heap_memory_usage: 173910104\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885184000,"args":{"JVM stats":"heap_memory_usage: 219204576\nnon_heap_memory_usage: 173910104\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885194000,"args":{"JVM stats":"heap_memory_usage: 219793936\nnon_heap_memory_usage: 173910104\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885208000,"args":{"JVM stats":"heap_memory_usage: 220679752\nnon_heap_memory_usage: 173910104\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885209000,"args":{"JVM stats":"heap_memory_usage: 220827064\nnon_heap_memory_usage: 173910104\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885279000,"args":{"JVM stats":"heap_memory_usage: 221563712\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885281000,"args":{"JVM stats":"heap_memory_usage: 221711056\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885444000,"args":{"JVM stats":"heap_memory_usage: 223050224\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885446000,"args":{"JVM stats":"heap_memory_usage: 223050224\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885459000,"args":{"JVM stats":"heap_memory_usage: 223639648\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885538000,"args":{"JVM stats":"heap_memory_usage: 223639648\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885565000,"args":{"JVM stats":"heap_memory_usage: 224818536\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885566000,"args":{"JVM stats":"heap_memory_usage: 224818536\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885567000,"args":{"JVM stats":"heap_memory_usage: 224818536\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885567001,"args":{"JVM stats":"heap_memory_usage: 224965872\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885568000,"args":{"JVM stats":"heap_memory_usage: 224965872\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885570000,"args":{"JVM stats":"heap_memory_usage: 224965872\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885594000,"args":{"JVM stats":"heap_memory_usage: 225702680\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885628000,"args":{"JVM stats":"heap_memory_usage: 227324416\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885640000,"args":{"JVM stats":"heap_memory_usage: 227766472\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885656000,"args":{"JVM stats":"heap_memory_usage: 228208832\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885657000,"args":{"JVM stats":"heap_memory_usage: 228356144\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885659000,"args":{"JVM stats":"heap_memory_usage: 228503488\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885661000,"args":{"JVM stats":"heap_memory_usage: 228503488\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885740000,"args":{"JVM stats":"heap_memory_usage: 228810528\nnon_heap_memory_usage: 173906008\nloaded_class_count: 16486\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885936000,"args":{"JVM stats":"heap_memory_usage: 260111264\nnon_heap_memory_usage: 174020200\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885937000,"args":{"JVM stats":"heap_memory_usage: 260417056\nnon_heap_memory_usage: 174020200\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885938000,"args":{"JVM stats":"heap_memory_usage: 260417056\nnon_heap_memory_usage: 174020200\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885938001,"args":{"JVM stats":"heap_memory_usage: 260417056\nnon_heap_memory_usage: 174020200\nloaded_class_count: 16486\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431885950000,"args":{"JVM stats":"heap_memory_usage: 261745696\nnon_heap_memory_usage: 174040864\nloaded_class_count: 16486\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":26,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884046000,"dur":3000},{"pid":1,"tid":26,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884049000,"dur":8000},{"pid":1,"tid":26,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884057000,"dur":1000},{"pid":1,"tid":26,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884057000,"dur":1000},{"pid":1,"tid":26,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884064000,"dur":3000},{"pid":1,"tid":26,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884067000,"dur":100},{"pid":1,"tid":26,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884068000,"dur":1000},{"pid":1,"tid":26,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884069000,"dur":100},{"pid":1,"tid":26,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884069000,"dur":100},{"pid":1,"tid":26,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884069000,"dur":1000},{"pid":1,"tid":26,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884070000,"dur":100},{"pid":1,"tid":26,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884070000,"dur":100},{"pid":1,"tid":26,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884070000,"dur":2000},{"pid":1,"tid":26,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884072000,"dur":1000},{"pid":1,"tid":26,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884073000,"dur":1000},{"pid":1,"tid":26,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884074000,"dur":100},{"pid":1,"tid":26,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884074000,"dur":33000},{"pid":1,"tid":26,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884107000,"dur":1000},{"pid":1,"tid":26,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884108000,"dur":5000},{"pid":1,"tid":26,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884115000,"dur":2000},{"pid":1,"tid":26,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884117000,"dur":100},{"pid":1,"tid":26,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431884067000,"dur":50000},{"pid":1,"tid":26,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884117000,"dur":6000},{"pid":1,"tid":26,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884123000,"dur":8000},{"pid":1,"tid":26,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884063000,"dur":70000},{"pid":1,"tid":26,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884133000,"dur":4000},{"pid":1,"tid":26,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431884060000,"dur":77000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431884159000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884161000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884162000,"dur":62000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884225000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884232000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884238000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884239000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884241000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884242000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884243000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431884246000,"dur":204000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884452000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884455000,"dur":7000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431884463000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431884465000,"dur":622000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885087000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885088000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885104000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885113000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885115000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885115000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885116000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885120000,"dur":59000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885180000,"dur":2000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885183000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885184000,"dur":10000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885194000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885209000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885209000,"dur":70000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885280000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885282000,"dur":162000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885445000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885446000,"dur":13000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885460000,"dur":78000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885539000,"dur":26000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885565000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885566000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885567000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885567000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885569000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885570000,"dur":23000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885594000,"dur":34000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885629000,"dur":11000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885641000,"dur":15000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885656000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885658000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885660000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431885661000,"dur":79000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885742000,"dur":194000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885936000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885937000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431885938000,"dur":100},{"pid":1,"tid":26,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431885942000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-05-949.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-05-949.rawproto
new file mode 100644
index 00000000..ed68fb84
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-05-949.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-48-540.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-48-540.json
new file mode 100644
index 00000000..009a19da
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-48-540.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928150000,"args":{"JVM stats":"heap_memory_usage: 316431944\nnon_heap_memory_usage: 174194624\nloaded_class_count: 16501\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928217000,"args":{"JVM stats":"heap_memory_usage: 327205880\nnon_heap_memory_usage: 174401648\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928218000,"args":{"JVM stats":"heap_memory_usage: 327353248\nnon_heap_memory_usage: 174401648\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928251000,"args":{"JVM stats":"heap_memory_usage: 333558768\nnon_heap_memory_usage: 174454528\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928255000,"args":{"JVM stats":"heap_memory_usage: 334148280\nnon_heap_memory_usage: 174459136\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928258000,"args":{"JVM stats":"heap_memory_usage: 334590288\nnon_heap_memory_usage: 174459840\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928259000,"args":{"JVM stats":"heap_memory_usage: 334590288\nnon_heap_memory_usage: 174459840\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928260000,"args":{"JVM stats":"heap_memory_usage: 334590288\nnon_heap_memory_usage: 174459840\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928260001,"args":{"JVM stats":"heap_memory_usage: 334737656\nnon_heap_memory_usage: 174459840\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928261000,"args":{"JVM stats":"heap_memory_usage: 334737656\nnon_heap_memory_usage: 174459840\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928262000,"args":{"JVM stats":"heap_memory_usage: 334737656\nnon_heap_memory_usage: 174459840\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928306000,"args":{"JVM stats":"heap_memory_usage: 338276328\nnon_heap_memory_usage: 174480128\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928308000,"args":{"JVM stats":"heap_memory_usage: 338423664\nnon_heap_memory_usage: 174480128\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928311000,"args":{"JVM stats":"heap_memory_usage: 338718432\nnon_heap_memory_usage: 174480128\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928312000,"args":{"JVM stats":"heap_memory_usage: 338718432\nnon_heap_memory_usage: 174480128\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928325000,"args":{"JVM stats":"heap_memory_usage: 340340760\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928325001,"args":{"JVM stats":"heap_memory_usage: 340340760\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928339000,"args":{"JVM stats":"heap_memory_usage: 340942952\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928348000,"args":{"JVM stats":"heap_memory_usage: 341533064\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928350000,"args":{"JVM stats":"heap_memory_usage: 341680408\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928350001,"args":{"JVM stats":"heap_memory_usage: 341680408\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928351000,"args":{"JVM stats":"heap_memory_usage: 341680408\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928353000,"args":{"JVM stats":"heap_memory_usage: 341827760\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928359000,"args":{"JVM stats":"heap_memory_usage: 341975152\nnon_heap_memory_usage: 174498248\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928361000,"args":{"JVM stats":"heap_memory_usage: 342273528\nnon_heap_memory_usage: 174499528\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928362000,"args":{"JVM stats":"heap_memory_usage: 342273528\nnon_heap_memory_usage: 174508360\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928370000,"args":{"JVM stats":"heap_memory_usage: 342862880\nnon_heap_memory_usage: 174508360\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928384000,"args":{"JVM stats":"heap_memory_usage: 344060224\nnon_heap_memory_usage: 174508360\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928386000,"args":{"JVM stats":"heap_memory_usage: 344060224\nnon_heap_memory_usage: 174508360\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928434000,"args":{"JVM stats":"heap_memory_usage: 344796824\nnon_heap_memory_usage: 174512704\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928436000,"args":{"JVM stats":"heap_memory_usage: 344944192\nnon_heap_memory_usage: 174512704\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928443000,"args":{"JVM stats":"heap_memory_usage: 345680920\nnon_heap_memory_usage: 174512704\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928444000,"args":{"JVM stats":"heap_memory_usage: 345680920\nnon_heap_memory_usage: 174512704\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928451000,"args":{"JVM stats":"heap_memory_usage: 346569200\nnon_heap_memory_usage: 174512704\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928451001,"args":{"JVM stats":"heap_memory_usage: 346569200\nnon_heap_memory_usage: 174512704\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928467000,"args":{"JVM stats":"heap_memory_usage: 348046040\nnon_heap_memory_usage: 174519616\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928468000,"args":{"JVM stats":"heap_memory_usage: 348046040\nnon_heap_memory_usage: 174519616\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928468001,"args":{"JVM stats":"heap_memory_usage: 348046040\nnon_heap_memory_usage: 174519616\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928468000,"args":{"JVM stats":"heap_memory_usage: 348193440\nnon_heap_memory_usage: 174519616\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928469000,"args":{"JVM stats":"heap_memory_usage: 348193440\nnon_heap_memory_usage: 174519616\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928470000,"args":{"JVM stats":"heap_memory_usage: 348193440\nnon_heap_memory_usage: 174519616\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928479000,"args":{"JVM stats":"heap_memory_usage: 348930832\nnon_heap_memory_usage: 174520960\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928495000,"args":{"JVM stats":"heap_memory_usage: 350553768\nnon_heap_memory_usage: 174524800\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928501000,"args":{"JVM stats":"heap_memory_usage: 350996112\nnon_heap_memory_usage: 174524800\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928508000,"args":{"JVM stats":"heap_memory_usage: 351438288\nnon_heap_memory_usage: 174524800\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928509000,"args":{"JVM stats":"heap_memory_usage: 351586640\nnon_heap_memory_usage: 174524800\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928511000,"args":{"JVM stats":"heap_memory_usage: 351734008\nnon_heap_memory_usage: 174524800\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928512000,"args":{"JVM stats":"heap_memory_usage: 351734008\nnon_heap_memory_usage: 174524800\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928514000,"args":{"JVM stats":"heap_memory_usage: 351881376\nnon_heap_memory_usage: 174524800\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928530000,"args":{"JVM stats":"heap_memory_usage: 352618272\nnon_heap_memory_usage: 174530936\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928531000,"args":{"JVM stats":"heap_memory_usage: 352766624\nnon_heap_memory_usage: 174531640\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928532000,"args":{"JVM stats":"heap_memory_usage: 352766624\nnon_heap_memory_usage: 174531640\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928532001,"args":{"JVM stats":"heap_memory_usage: 352766624\nnon_heap_memory_usage: 174531640\nloaded_class_count: 16535\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431928540000,"args":{"JVM stats":"heap_memory_usage: 354095304\nnon_heap_memory_usage: 174541104\nloaded_class_count: 16535\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":26,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928150000,"dur":3000},{"pid":1,"tid":26,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928153000,"dur":4000},{"pid":1,"tid":26,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928157000,"dur":1000},{"pid":1,"tid":26,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928157000,"dur":1000},{"pid":1,"tid":26,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928160000,"dur":1000},{"pid":1,"tid":26,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928161000,"dur":1000},{"pid":1,"tid":26,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928162000,"dur":100},{"pid":1,"tid":26,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928162000,"dur":100},{"pid":1,"tid":26,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928162000,"dur":1000},{"pid":1,"tid":26,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928163000,"dur":100},{"pid":1,"tid":26,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928163000,"dur":100},{"pid":1,"tid":26,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928163000,"dur":100},{"pid":1,"tid":26,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928163000,"dur":2000},{"pid":1,"tid":26,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928165000,"dur":100},{"pid":1,"tid":26,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928165000,"dur":100},{"pid":1,"tid":26,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928165000,"dur":100},{"pid":1,"tid":26,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928165000,"dur":21000},{"pid":1,"tid":26,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928186000,"dur":1000},{"pid":1,"tid":26,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928187000,"dur":4000},{"pid":1,"tid":26,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928192000,"dur":1000},{"pid":1,"tid":26,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928193000,"dur":1000},{"pid":1,"tid":26,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431928162000,"dur":32000},{"pid":1,"tid":26,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928194000,"dur":3000},{"pid":1,"tid":26,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928197000,"dur":4000},{"pid":1,"tid":26,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928160000,"dur":42000},{"pid":1,"tid":26,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928202000,"dur":3000},{"pid":1,"tid":26,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928159000,"dur":46000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928216000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928218000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928218000,"dur":33000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928251000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928255000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928259000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928259000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928260000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928260000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928261000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928262000,"dur":44000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928307000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928309000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928312000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928313000,"dur":12000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928325000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928325000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928339000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928349000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928350000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928350000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928351000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928353000,"dur":5000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928359000,"dur":2000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928362000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928363000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928370000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928385000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928386000,"dur":48000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928435000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928436000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928444000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928445000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928451000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928452000,"dur":15000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928467000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928468000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928468000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928468000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928469000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928470000,"dur":9000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928479000,"dur":16000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928495000,"dur":6000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928501000,"dur":7000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928509000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928509000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928511000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928512000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431928514000,"dur":16000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928530000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928532000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431928532000,"dur":100},{"pid":1,"tid":26,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431928536000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-48-540.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-48-540.rawproto
new file mode 100644
index 00000000..b54d8c4f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-38-48-540.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-39-46-667.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-39-46-667.json
new file mode 100644
index 00000000..d586358c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-39-46-667.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985267000,"args":{"JVM stats":"heap_memory_usage: 95329848\nnon_heap_memory_usage: 174664856\nloaded_class_count: 16544\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 13\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985361000,"args":{"JVM stats":"heap_memory_usage: 107184664\nnon_heap_memory_usage: 174751872\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985362000,"args":{"JVM stats":"heap_memory_usage: 107184664\nnon_heap_memory_usage: 174751872\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985412000,"args":{"JVM stats":"heap_memory_usage: 114049016\nnon_heap_memory_usage: 174764312\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985416000,"args":{"JVM stats":"heap_memory_usage: 114238432\nnon_heap_memory_usage: 174771440\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985419000,"args":{"JVM stats":"heap_memory_usage: 114617776\nnon_heap_memory_usage: 174771440\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985420000,"args":{"JVM stats":"heap_memory_usage: 114617776\nnon_heap_memory_usage: 174771440\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985422000,"args":{"JVM stats":"heap_memory_usage: 114617776\nnon_heap_memory_usage: 174771440\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985423000,"args":{"JVM stats":"heap_memory_usage: 114617776\nnon_heap_memory_usage: 174771440\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985424000,"args":{"JVM stats":"heap_memory_usage: 114807168\nnon_heap_memory_usage: 174771440\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985425000,"args":{"JVM stats":"heap_memory_usage: 114807168\nnon_heap_memory_usage: 174771440\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985577000,"args":{"JVM stats":"heap_memory_usage: 150699936\nnon_heap_memory_usage: 174835272\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985578000,"args":{"JVM stats":"heap_memory_usage: 150896576\nnon_heap_memory_usage: 174835272\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985589000,"args":{"JVM stats":"heap_memory_usage: 151752776\nnon_heap_memory_usage: 174835272\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431985591000,"args":{"JVM stats":"heap_memory_usage: 151752776\nnon_heap_memory_usage: 174835272\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986190000,"args":{"JVM stats":"heap_memory_usage: 167171984\nnon_heap_memory_usage: 174898024\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986191000,"args":{"JVM stats":"heap_memory_usage: 167410592\nnon_heap_memory_usage: 174898024\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986205000,"args":{"JVM stats":"heap_memory_usage: 168723720\nnon_heap_memory_usage: 174898024\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986212000,"args":{"JVM stats":"heap_memory_usage: 169482192\nnon_heap_memory_usage: 174898024\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986214000,"args":{"JVM stats":"heap_memory_usage: 169671608\nnon_heap_memory_usage: 174898728\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986215000,"args":{"JVM stats":"heap_memory_usage: 169671608\nnon_heap_memory_usage: 174897192\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986215001,"args":{"JVM stats":"heap_memory_usage: 169671608\nnon_heap_memory_usage: 174897192\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986218000,"args":{"JVM stats":"heap_memory_usage: 169861032\nnon_heap_memory_usage: 174896616\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986267000,"args":{"JVM stats":"heap_memory_usage: 178617952\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986270000,"args":{"JVM stats":"heap_memory_usage: 178807376\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986273000,"args":{"JVM stats":"heap_memory_usage: 178996816\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986285000,"args":{"JVM stats":"heap_memory_usage: 179375760\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986301000,"args":{"JVM stats":"heap_memory_usage: 180025656\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986303000,"args":{"JVM stats":"heap_memory_usage: 180215048\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986358000,"args":{"JVM stats":"heap_memory_usage: 181162576\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986359000,"args":{"JVM stats":"heap_memory_usage: 181162576\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986367000,"args":{"JVM stats":"heap_memory_usage: 181731872\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986368000,"args":{"JVM stats":"heap_memory_usage: 181731872\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986376000,"args":{"JVM stats":"heap_memory_usage: 182489960\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986377000,"args":{"JVM stats":"heap_memory_usage: 182679408\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986395000,"args":{"JVM stats":"heap_memory_usage: 184766160\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986396000,"args":{"JVM stats":"heap_memory_usage: 184766160\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986396001,"args":{"JVM stats":"heap_memory_usage: 184766160\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986396000,"args":{"JVM stats":"heap_memory_usage: 184766160\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986397000,"args":{"JVM stats":"heap_memory_usage: 184955584\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986398000,"args":{"JVM stats":"heap_memory_usage: 184955584\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986413000,"args":{"JVM stats":"heap_memory_usage: 185524448\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986435000,"args":{"JVM stats":"heap_memory_usage: 186928920\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986446000,"args":{"JVM stats":"heap_memory_usage: 187308016\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986456000,"args":{"JVM stats":"heap_memory_usage: 187876392\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986458000,"args":{"JVM stats":"heap_memory_usage: 187876392\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986459000,"args":{"JVM stats":"heap_memory_usage: 188065816\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986462000,"args":{"JVM stats":"heap_memory_usage: 188065816\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986464000,"args":{"JVM stats":"heap_memory_usage: 188255208\nnon_heap_memory_usage: 174903768\nloaded_class_count: 16544\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986653000,"args":{"JVM stats":"heap_memory_usage: 219214024\nnon_heap_memory_usage: 174907896\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986656000,"args":{"JVM stats":"heap_memory_usage: 219592880\nnon_heap_memory_usage: 174907896\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986656001,"args":{"JVM stats":"heap_memory_usage: 219592880\nnon_heap_memory_usage: 174907896\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986657000,"args":{"JVM stats":"heap_memory_usage: 219592880\nnon_heap_memory_usage: 174907896\nloaded_class_count: 16544\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518431986667000,"args":{"JVM stats":"heap_memory_usage: 219592880\nnon_heap_memory_usage: 174914808\nloaded_class_count: 16544\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":26,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985267000,"dur":5000},{"pid":1,"tid":26,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985272000,"dur":4000},{"pid":1,"tid":26,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985276000,"dur":1000},{"pid":1,"tid":26,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985276000,"dur":1000},{"pid":1,"tid":26,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985281000,"dur":3000},{"pid":1,"tid":26,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985284000,"dur":1000},{"pid":1,"tid":26,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985286000,"dur":1000},{"pid":1,"tid":26,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985287000,"dur":1000},{"pid":1,"tid":26,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985288000,"dur":100},{"pid":1,"tid":26,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985288000,"dur":2000},{"pid":1,"tid":26,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985290000,"dur":100},{"pid":1,"tid":26,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985290000,"dur":100},{"pid":1,"tid":26,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985290000,"dur":5000},{"pid":1,"tid":26,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985295000,"dur":1000},{"pid":1,"tid":26,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985296000,"dur":100},{"pid":1,"tid":26,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985296000,"dur":100},{"pid":1,"tid":26,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985296000,"dur":33000},{"pid":1,"tid":26,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985329000,"dur":100},{"pid":1,"tid":26,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985329000,"dur":3000},{"pid":1,"tid":26,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985334000,"dur":1000},{"pid":1,"tid":26,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985335000,"dur":100},{"pid":1,"tid":26,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518431985285000,"dur":50000},{"pid":1,"tid":26,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985335000,"dur":4000},{"pid":1,"tid":26,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985339000,"dur":5000},{"pid":1,"tid":26,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985281000,"dur":65000},{"pid":1,"tid":26,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985346000,"dur":2000},{"pid":1,"tid":26,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431985279000,"dur":69000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431985360000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985362000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985362000,"dur":50000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985413000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985416000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985420000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985421000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985423000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985424000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985424000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431985425000,"dur":152000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985578000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985580000,"dur":9000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431985590000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431985593000,"dur":597000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986190000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986191000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986206000,"dur":6000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986213000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986214000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986215000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986215000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986219000,"dur":48000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986267000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986271000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986273000,"dur":12000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986285000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986302000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986303000,"dur":55000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986358000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986360000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986367000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986368000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986377000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986377000,"dur":18000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986395000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986396000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986396000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986397000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986398000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986398000,"dur":15000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986414000,"dur":21000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986435000,"dur":11000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986446000,"dur":10000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986457000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986458000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986460000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518431986462000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986464000,"dur":189000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986654000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986656000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518431986657000,"dur":100},{"pid":1,"tid":26,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518431986661000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-39-46-667.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-39-46-667.rawproto
new file mode 100644
index 00000000..86654c8b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-39-46-667.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-40-16-349.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-40-16-349.json
new file mode 100644
index 00000000..9f1370cb
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-40-16-349.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518432014989000,"args":{"JVM stats":"heap_memory_usage: 272960824\nnon_heap_memory_usage: 174983016\nloaded_class_count: 16551\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015057000,"args":{"JVM stats":"heap_memory_usage: 284763152\nnon_heap_memory_usage: 175074576\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015058000,"args":{"JVM stats":"heap_memory_usage: 284763152\nnon_heap_memory_usage: 175074576\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015096000,"args":{"JVM stats":"heap_memory_usage: 291617096\nnon_heap_memory_usage: 175112008\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015099000,"args":{"JVM stats":"heap_memory_usage: 291996032\nnon_heap_memory_usage: 175112712\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015102000,"args":{"JVM stats":"heap_memory_usage: 292185480\nnon_heap_memory_usage: 175113416\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015102001,"args":{"JVM stats":"heap_memory_usage: 292185480\nnon_heap_memory_usage: 175113416\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015103000,"args":{"JVM stats":"heap_memory_usage: 292185480\nnon_heap_memory_usage: 175113416\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015104000,"args":{"JVM stats":"heap_memory_usage: 292185480\nnon_heap_memory_usage: 175113416\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015105000,"args":{"JVM stats":"heap_memory_usage: 292185480\nnon_heap_memory_usage: 175113416\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015105001,"args":{"JVM stats":"heap_memory_usage: 292374872\nnon_heap_memory_usage: 175113416\nloaded_class_count: 16552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015236000,"args":{"JVM stats":"heap_memory_usage: 327169512\nnon_heap_memory_usage: 175122144\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015238000,"args":{"JVM stats":"heap_memory_usage: 327366152\nnon_heap_memory_usage: 175122144\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015242000,"args":{"JVM stats":"heap_memory_usage: 328024608\nnon_heap_memory_usage: 175123040\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015242001,"args":{"JVM stats":"heap_memory_usage: 328222224\nnon_heap_memory_usage: 175123576\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015834000,"args":{"JVM stats":"heap_memory_usage: 344334208\nnon_heap_memory_usage: 175124216\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015835000,"args":{"JVM stats":"heap_memory_usage: 344762416\nnon_heap_memory_usage: 175124216\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015852000,"args":{"JVM stats":"heap_memory_usage: 345145392\nnon_heap_memory_usage: 175124792\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015861000,"args":{"JVM stats":"heap_memory_usage: 345714088\nnon_heap_memory_usage: 175124792\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015864000,"args":{"JVM stats":"heap_memory_usage: 345714088\nnon_heap_memory_usage: 175124792\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015865000,"args":{"JVM stats":"heap_memory_usage: 345903512\nnon_heap_memory_usage: 175124792\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015866000,"args":{"JVM stats":"heap_memory_usage: 345903512\nnon_heap_memory_usage: 175124792\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015869000,"args":{"JVM stats":"heap_memory_usage: 346472328\nnon_heap_memory_usage: 175124792\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015922000,"args":{"JVM stats":"heap_memory_usage: 355116408\nnon_heap_memory_usage: 174996752\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015925000,"args":{"JVM stats":"heap_memory_usage: 355305832\nnon_heap_memory_usage: 174996752\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015927000,"args":{"JVM stats":"heap_memory_usage: 355495256\nnon_heap_memory_usage: 174996752\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015937000,"args":{"JVM stats":"heap_memory_usage: 355874384\nnon_heap_memory_usage: 174996752\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015955000,"args":{"JVM stats":"heap_memory_usage: 356636160\nnon_heap_memory_usage: 174996752\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432015956000,"args":{"JVM stats":"heap_memory_usage: 356825552\nnon_heap_memory_usage: 174996752\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016022000,"args":{"JVM stats":"heap_memory_usage: 357773128\nnon_heap_memory_usage: 174996752\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016024000,"args":{"JVM stats":"heap_memory_usage: 357773128\nnon_heap_memory_usage: 174997456\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016037000,"args":{"JVM stats":"heap_memory_usage: 358911688\nnon_heap_memory_usage: 174997456\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016038000,"args":{"JVM stats":"heap_memory_usage: 358911688\nnon_heap_memory_usage: 174997456\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016050000,"args":{"JVM stats":"heap_memory_usage: 359670760\nnon_heap_memory_usage: 174997456\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016052000,"args":{"JVM stats":"heap_memory_usage: 359670760\nnon_heap_memory_usage: 174997456\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016070000,"args":{"JVM stats":"heap_memory_usage: 360807496\nnon_heap_memory_usage: 174998544\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016072000,"args":{"JVM stats":"heap_memory_usage: 360807496\nnon_heap_memory_usage: 174998544\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016072001,"args":{"JVM stats":"heap_memory_usage: 360807496\nnon_heap_memory_usage: 174998544\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016073000,"args":{"JVM stats":"heap_memory_usage: 360997928\nnon_heap_memory_usage: 174998544\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016074000,"args":{"JVM stats":"heap_memory_usage: 361065600\nnon_heap_memory_usage: 174998544\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016075000,"args":{"JVM stats":"heap_memory_usage: 361065600\nnon_heap_memory_usage: 174998544\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016101000,"args":{"JVM stats":"heap_memory_usage: 62015944\nnon_heap_memory_usage: 174999248\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 9\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016124000,"args":{"JVM stats":"heap_memory_usage: 66891984\nnon_heap_memory_usage: 174999248\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016134000,"args":{"JVM stats":"heap_memory_usage: 67433984\nnon_heap_memory_usage: 174999248\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016146000,"args":{"JVM stats":"heap_memory_usage: 67974000\nnon_heap_memory_usage: 174999248\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016148000,"args":{"JVM stats":"heap_memory_usage: 68082992\nnon_heap_memory_usage: 174999248\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016150000,"args":{"JVM stats":"heap_memory_usage: 68191000\nnon_heap_memory_usage: 174999248\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016154000,"args":{"JVM stats":"heap_memory_usage: 68299224\nnon_heap_memory_usage: 174999248\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016157000,"args":{"JVM stats":"heap_memory_usage: 68407208\nnon_heap_memory_usage: 174999248\nloaded_class_count: 16552\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016336000,"args":{"JVM stats":"heap_memory_usage: 99694192\nnon_heap_memory_usage: 175024264\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016337000,"args":{"JVM stats":"heap_memory_usage: 100034896\nnon_heap_memory_usage: 175024264\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016338000,"args":{"JVM stats":"heap_memory_usage: 100034896\nnon_heap_memory_usage: 175024264\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016338001,"args":{"JVM stats":"heap_memory_usage: 100034896\nnon_heap_memory_usage: 175024264\nloaded_class_count: 16552\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432016349000,"args":{"JVM stats":"heap_memory_usage: 100129640\nnon_heap_memory_usage: 175035384\nloaded_class_count: 16552\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":26,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432014989000,"dur":6000},{"pid":1,"tid":26,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432014995000,"dur":2000},{"pid":1,"tid":26,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432014998000,"dur":100},{"pid":1,"tid":26,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432014998000,"dur":100},{"pid":1,"tid":26,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432015000000,"dur":2000},{"pid":1,"tid":26,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432015002000,"dur":1000},{"pid":1,"tid":26,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015003000,"dur":1000},{"pid":1,"tid":26,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015004000,"dur":100},{"pid":1,"tid":26,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015004000,"dur":100},{"pid":1,"tid":26,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015004000,"dur":100},{"pid":1,"tid":26,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015004000,"dur":100},{"pid":1,"tid":26,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015004000,"dur":100},{"pid":1,"tid":26,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015004000,"dur":2000},{"pid":1,"tid":26,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015006000,"dur":100},{"pid":1,"tid":26,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015006000,"dur":100},{"pid":1,"tid":26,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015006000,"dur":100},{"pid":1,"tid":26,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015006000,"dur":24000},{"pid":1,"tid":26,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015030000,"dur":1000},{"pid":1,"tid":26,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015031000,"dur":2000},{"pid":1,"tid":26,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015034000,"dur":1000},{"pid":1,"tid":26,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015035000,"dur":100},{"pid":1,"tid":26,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432015003000,"dur":32000},{"pid":1,"tid":26,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432015035000,"dur":2000},{"pid":1,"tid":26,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432015037000,"dur":5000},{"pid":1,"tid":26,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432015000000,"dur":42000},{"pid":1,"tid":26,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432015043000,"dur":2000},{"pid":1,"tid":26,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432014999000,"dur":46000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432015056000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015058000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015058000,"dur":38000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015096000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015100000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015102000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015103000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015103000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015105000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015105000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432015106000,"dur":130000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015237000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015238000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015242000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432015243000,"dur":591000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432015835000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015835000,"dur":17000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015852000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015862000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015864000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015866000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015866000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432015870000,"dur":52000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432015922000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015926000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015928000,"dur":9000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015937000,"dur":18000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432015956000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432015956000,"dur":66000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016023000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016025000,"dur":12000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432016038000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016039000,"dur":10000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016051000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016052000,"dur":18000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016071000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016072000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432016072000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016073000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016075000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016076000,"dur":25000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016101000,"dur":22000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016124000,"dur":10000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016134000,"dur":12000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432016146000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016148000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016151000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432016154000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432016158000,"dur":178000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432016336000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432016338000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432016338000,"dur":100},{"pid":1,"tid":26,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432016342000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-40-16-349.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-40-16-349.rawproto
new file mode 100644
index 00000000..203a29f8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-40-16-349.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-41-14-700.json b/IGetAndroid/build/android-profile/profile-2018-02-12-11-41-14-700.json
new file mode 100644
index 00000000..0877e586
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-41-14-700.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073305000,"args":{"JVM stats":"heap_memory_usage: 155242176\nnon_heap_memory_usage: 175101816\nloaded_class_count: 16559\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073378000,"args":{"JVM stats":"heap_memory_usage: 166898480\nnon_heap_memory_usage: 175228128\nloaded_class_count: 16559\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073378001,"args":{"JVM stats":"heap_memory_usage: 166898480\nnon_heap_memory_usage: 175228128\nloaded_class_count: 16559\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073426000,"args":{"JVM stats":"heap_memory_usage: 174131640\nnon_heap_memory_usage: 175247896\nloaded_class_count: 16560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073430000,"args":{"JVM stats":"heap_memory_usage: 174468704\nnon_heap_memory_usage: 175247896\nloaded_class_count: 16560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073432000,"args":{"JVM stats":"heap_memory_usage: 174637080\nnon_heap_memory_usage: 175248600\nloaded_class_count: 16560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073433000,"args":{"JVM stats":"heap_memory_usage: 174637080\nnon_heap_memory_usage: 175248600\nloaded_class_count: 16560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073434000,"args":{"JVM stats":"heap_memory_usage: 174637080\nnon_heap_memory_usage: 175248600\nloaded_class_count: 16560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073434001,"args":{"JVM stats":"heap_memory_usage: 174805536\nnon_heap_memory_usage: 175248600\nloaded_class_count: 16560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073435000,"args":{"JVM stats":"heap_memory_usage: 174805536\nnon_heap_memory_usage: 175248600\nloaded_class_count: 16560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073435001,"args":{"JVM stats":"heap_memory_usage: 174805536\nnon_heap_memory_usage: 175248600\nloaded_class_count: 16560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073567000,"args":{"JVM stats":"heap_memory_usage: 209212160\nnon_heap_memory_usage: 175272344\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073569000,"args":{"JVM stats":"heap_memory_usage: 209446096\nnon_heap_memory_usage: 175272344\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073573000,"args":{"JVM stats":"heap_memory_usage: 210374008\nnon_heap_memory_usage: 175279048\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432073573001,"args":{"JVM stats":"heap_memory_usage: 210542392\nnon_heap_memory_usage: 175281496\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074192000,"args":{"JVM stats":"heap_memory_usage: 225546520\nnon_heap_memory_usage: 175291288\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074193000,"args":{"JVM stats":"heap_memory_usage: 225612072\nnon_heap_memory_usage: 175291288\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074208000,"args":{"JVM stats":"heap_memory_usage: 226480072\nnon_heap_memory_usage: 175291288\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074217000,"args":{"JVM stats":"heap_memory_usage: 227491016\nnon_heap_memory_usage: 175291288\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074219000,"args":{"JVM stats":"heap_memory_usage: 227659472\nnon_heap_memory_usage: 175291288\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074220000,"args":{"JVM stats":"heap_memory_usage: 227659472\nnon_heap_memory_usage: 175291288\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074220001,"args":{"JVM stats":"heap_memory_usage: 227659472\nnon_heap_memory_usage: 175291288\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074224000,"args":{"JVM stats":"heap_memory_usage: 227827952\nnon_heap_memory_usage: 175291288\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074274000,"args":{"JVM stats":"heap_memory_usage: 236658248\nnon_heap_memory_usage: 175289904\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074280000,"args":{"JVM stats":"heap_memory_usage: 236826648\nnon_heap_memory_usage: 175292016\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074281000,"args":{"JVM stats":"heap_memory_usage: 236995024\nnon_heap_memory_usage: 175292016\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074294000,"args":{"JVM stats":"heap_memory_usage: 237500136\nnon_heap_memory_usage: 175292016\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074311000,"args":{"JVM stats":"heap_memory_usage: 238177960\nnon_heap_memory_usage: 175292016\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074312000,"args":{"JVM stats":"heap_memory_usage: 238346392\nnon_heap_memory_usage: 175292016\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074375000,"args":{"JVM stats":"heap_memory_usage: 239193128\nnon_heap_memory_usage: 175278920\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074378000,"args":{"JVM stats":"heap_memory_usage: 239193128\nnon_heap_memory_usage: 175278920\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074387000,"args":{"JVM stats":"heap_memory_usage: 240035008\nnon_heap_memory_usage: 175278920\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074389000,"args":{"JVM stats":"heap_memory_usage: 240035008\nnon_heap_memory_usage: 175278920\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074408000,"args":{"JVM stats":"heap_memory_usage: 240708800\nnon_heap_memory_usage: 175278920\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074411000,"args":{"JVM stats":"heap_memory_usage: 240877176\nnon_heap_memory_usage: 175278920\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074429000,"args":{"JVM stats":"heap_memory_usage: 242563024\nnon_heap_memory_usage: 175278920\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074431000,"args":{"JVM stats":"heap_memory_usage: 242731400\nnon_heap_memory_usage: 175279304\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074431001,"args":{"JVM stats":"heap_memory_usage: 242731400\nnon_heap_memory_usage: 175280456\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074432000,"args":{"JVM stats":"heap_memory_usage: 242731400\nnon_heap_memory_usage: 175280456\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074433000,"args":{"JVM stats":"heap_memory_usage: 242731400\nnon_heap_memory_usage: 175280456\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074435000,"args":{"JVM stats":"heap_memory_usage: 242900008\nnon_heap_memory_usage: 175278216\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074450000,"args":{"JVM stats":"heap_memory_usage: 243573880\nnon_heap_memory_usage: 175278216\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074471000,"args":{"JVM stats":"heap_memory_usage: 244921080\nnon_heap_memory_usage: 175279112\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074479000,"args":{"JVM stats":"heap_memory_usage: 245257928\nnon_heap_memory_usage: 175279112\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074490000,"args":{"JVM stats":"heap_memory_usage: 245763168\nnon_heap_memory_usage: 175279112\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074492000,"args":{"JVM stats":"heap_memory_usage: 245932560\nnon_heap_memory_usage: 175279952\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074496000,"args":{"JVM stats":"heap_memory_usage: 246100952\nnon_heap_memory_usage: 175284240\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074500000,"args":{"JVM stats":"heap_memory_usage: 246100952\nnon_heap_memory_usage: 175281296\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074502000,"args":{"JVM stats":"heap_memory_usage: 246100952\nnon_heap_memory_usage: 175281296\nloaded_class_count: 16560\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074681000,"args":{"JVM stats":"heap_memory_usage: 276587696\nnon_heap_memory_usage: 175305832\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074683000,"args":{"JVM stats":"heap_memory_usage: 276760160\nnon_heap_memory_usage: 175305832\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074684000,"args":{"JVM stats":"heap_memory_usage: 276760160\nnon_heap_memory_usage: 175305832\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074684001,"args":{"JVM stats":"heap_memory_usage: 276760160\nnon_heap_memory_usage: 175305832\nloaded_class_count: 16560\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518432074700000,"args":{"JVM stats":"heap_memory_usage: 278403768\nnon_heap_memory_usage: 175318888\nloaded_class_count: 16560\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":26,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073305000,"dur":3000},{"pid":1,"tid":26,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073308000,"dur":3000},{"pid":1,"tid":26,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073311000,"dur":1000},{"pid":1,"tid":26,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073311000,"dur":1000},{"pid":1,"tid":26,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073314000,"dur":2000},{"pid":1,"tid":26,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073316000,"dur":100},{"pid":1,"tid":26,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073317000,"dur":1000},{"pid":1,"tid":26,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073318000,"dur":100},{"pid":1,"tid":26,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073318000,"dur":1000},{"pid":1,"tid":26,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073319000,"dur":100},{"pid":1,"tid":26,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073319000,"dur":100},{"pid":1,"tid":26,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073319000,"dur":100},{"pid":1,"tid":26,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073319000,"dur":3000},{"pid":1,"tid":26,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073322000,"dur":100},{"pid":1,"tid":26,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073322000,"dur":100},{"pid":1,"tid":26,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073322000,"dur":100},{"pid":1,"tid":26,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073322000,"dur":24000},{"pid":1,"tid":26,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073346000,"dur":100},{"pid":1,"tid":26,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073346000,"dur":5000},{"pid":1,"tid":26,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073352000,"dur":2000},{"pid":1,"tid":26,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073354000,"dur":100},{"pid":1,"tid":26,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518432073316000,"dur":38000},{"pid":1,"tid":26,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073354000,"dur":4000},{"pid":1,"tid":26,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073358000,"dur":5000},{"pid":1,"tid":26,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073314000,"dur":50000},{"pid":1,"tid":26,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073364000,"dur":2000},{"pid":1,"tid":26,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432073313000,"dur":53000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432073377000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073378000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073379000,"dur":47000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073427000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073430000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073433000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073433000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073434000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073435000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073435000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432073436000,"dur":131000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073568000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073570000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432073573000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432073574000,"dur":618000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074193000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074193000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074208000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074218000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074219000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074220000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074221000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074225000,"dur":49000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074274000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074280000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074281000,"dur":12000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074294000,"dur":17000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074312000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074312000,"dur":63000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074376000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074378000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074388000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074390000,"dur":18000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074408000,"dur":3000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074412000,"dur":17000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074429000,"dur":2000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074431000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074432000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074432000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074434000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074436000,"dur":14000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074450000,"dur":21000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074471000,"dur":8000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074479000,"dur":11000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074490000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074492000,"dur":4000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074497000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518432074500000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074503000,"dur":178000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074681000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074683000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518432074684000,"dur":100},{"pid":1,"tid":26,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518432074693000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-11-41-14-700.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-11-41-14-700.rawproto
new file mode 100644
index 00000000..1066aa19
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-11-41-14-700.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-13-29-52-198.json b/IGetAndroid/build/android-profile/profile-2018-02-12-13-29-52-198.json
new file mode 100644
index 00000000..97d04352
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-13-29-52-198.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518438577915000,"args":{"JVM stats":"heap_memory_usage: 220763944\nnon_heap_memory_usage: 97865016\nloaded_class_count: 12562\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578331000,"args":{"JVM stats":"heap_memory_usage: 245161624\nnon_heap_memory_usage: 99513120\nloaded_class_count: 12727\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578552000,"args":{"JVM stats":"heap_memory_usage: 260293504\nnon_heap_memory_usage: 100372544\nloaded_class_count: 12803\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578641000,"args":{"JVM stats":"heap_memory_usage: 261134112\nnon_heap_memory_usage: 100562384\nloaded_class_count: 12823\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578694000,"args":{"JVM stats":"heap_memory_usage: 261975024\nnon_heap_memory_usage: 100745264\nloaded_class_count: 12833\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578706000,"args":{"JVM stats":"heap_memory_usage: 261975024\nnon_heap_memory_usage: 100779960\nloaded_class_count: 12837\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578727000,"args":{"JVM stats":"heap_memory_usage: 262815632\nnon_heap_memory_usage: 100835616\nloaded_class_count: 12842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578738000,"args":{"JVM stats":"heap_memory_usage: 263656328\nnon_heap_memory_usage: 100844416\nloaded_class_count: 12842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578743000,"args":{"JVM stats":"heap_memory_usage: 263656328\nnon_heap_memory_usage: 100839456\nloaded_class_count: 12842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438578744000,"args":{"JVM stats":"heap_memory_usage: 263656328\nnon_heap_memory_usage: 100845504\nloaded_class_count: 12842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438581433000,"args":{"JVM stats":"heap_memory_usage: 159947056\nnon_heap_memory_usage: 105674792\nloaded_class_count: 13038\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 33\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438581507000,"args":{"JVM stats":"heap_memory_usage: 166452968\nnon_heap_memory_usage: 105912672\nloaded_class_count: 13066\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438581715000,"args":{"JVM stats":"heap_memory_usage: 179372304\nnon_heap_memory_usage: 106999384\nloaded_class_count: 13206\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438581760000,"args":{"JVM stats":"heap_memory_usage: 180282592\nnon_heap_memory_usage: 107171688\nloaded_class_count: 13217\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438583088000,"args":{"JVM stats":"heap_memory_usage: 203304856\nnon_heap_memory_usage: 108074576\nloaded_class_count: 13300\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438583090000,"args":{"JVM stats":"heap_memory_usage: 203370408\nnon_heap_memory_usage: 108078536\nloaded_class_count: 13300\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438583160000,"args":{"JVM stats":"heap_memory_usage: 207598616\nnon_heap_memory_usage: 108008560\nloaded_class_count: 13305\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438585364000,"args":{"JVM stats":"heap_memory_usage: 282741880\nnon_heap_memory_usage: 118214616\nloaded_class_count: 14208\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438585373000,"args":{"JVM stats":"heap_memory_usage: 283340664\nnon_heap_memory_usage: 118225256\nloaded_class_count: 14210\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438586564000,"args":{"JVM stats":"heap_memory_usage: 284890328\nnon_heap_memory_usage: 118310984\nloaded_class_count: 14211\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438586566000,"args":{"JVM stats":"heap_memory_usage: 284890328\nnon_heap_memory_usage: 118312192\nloaded_class_count: 14211\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438586593000,"args":{"JVM stats":"heap_memory_usage: 284890328\nnon_heap_memory_usage: 118114272\nloaded_class_count: 14214\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438586609000,"args":{"JVM stats":"heap_memory_usage: 286243336\nnon_heap_memory_usage: 118024576\nloaded_class_count: 14224\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438586610000,"args":{"JVM stats":"heap_memory_usage: 286774200\nnon_heap_memory_usage: 118004832\nloaded_class_count: 14224\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438586633000,"args":{"JVM stats":"heap_memory_usage: 286774200\nnon_heap_memory_usage: 117922792\nloaded_class_count: 14226\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438587749000,"args":{"JVM stats":"heap_memory_usage: 325602840\nnon_heap_memory_usage: 122403200\nloaded_class_count: 14735\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438589277000,"args":{"JVM stats":"heap_memory_usage: 202837928\nnon_heap_memory_usage: 125753112\nloaded_class_count: 14884\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 52\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438589538000,"args":{"JVM stats":"heap_memory_usage: 258410456\nnon_heap_memory_usage: 125945272\nloaded_class_count: 14893\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438589553000,"args":{"JVM stats":"heap_memory_usage: 258807840\nnon_heap_memory_usage: 125988960\nloaded_class_count: 14893\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438590774000,"args":{"JVM stats":"heap_memory_usage: 291465632\nnon_heap_memory_usage: 128017968\nloaded_class_count: 15061\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438590879000,"args":{"JVM stats":"heap_memory_usage: 294940120\nnon_heap_memory_usage: 128343928\nloaded_class_count: 15067\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438590882000,"args":{"JVM stats":"heap_memory_usage: 294940120\nnon_heap_memory_usage: 128350656\nloaded_class_count: 15067\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438591194000,"args":{"JVM stats":"heap_memory_usage: 318849064\nnon_heap_memory_usage: 128637624\nloaded_class_count: 15075\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438591204000,"args":{"JVM stats":"heap_memory_usage: 319208712\nnon_heap_memory_usage: 128662448\nloaded_class_count: 15078\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438592177000,"args":{"JVM stats":"heap_memory_usage: 104640192\nnon_heap_memory_usage: 128990288\nloaded_class_count: 15309\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 84\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438592178000,"args":{"JVM stats":"heap_memory_usage: 108227024\nnon_heap_memory_usage: 129000912\nloaded_class_count: 15309\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438592198000,"args":{"JVM stats":"heap_memory_usage: 109150664\nnon_heap_memory_usage: 129050008\nloaded_class_count: 15312\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438577915000,"dur":11000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438577926000,"dur":15000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438577941000,"dur":7000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438577941000,"dur":7000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438578001000,"dur":9000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438578010000,"dur":1000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578016000,"dur":3000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578019000,"dur":100},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578019000,"dur":2000},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578021000,"dur":2000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578023000,"dur":1000},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578024000,"dur":100},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578024000,"dur":7000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578031000,"dur":1000},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578032000,"dur":2000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578034000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578034000,"dur":40000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578074000,"dur":2000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578076000,"dur":9000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578089000,"dur":6000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578096000,"dur":1000},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578011000,"dur":86000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438578097000,"dur":13000},{"pid":1,"tid":2,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578112000,"dur":100},{"pid":1,"tid":2,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578112000,"dur":1000},{"pid":1,"tid":2,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578113000,"dur":100},{"pid":1,"tid":2,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578113000,"dur":100},{"pid":1,"tid":2,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578113000,"dur":1000},{"pid":1,"tid":2,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578114000,"dur":100},{"pid":1,"tid":2,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578114000,"dur":2000},{"pid":1,"tid":2,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578116000,"dur":100},{"pid":1,"tid":2,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578116000,"dur":1000},{"pid":1,"tid":2,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578117000,"dur":100},{"pid":1,"tid":2,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578117000,"dur":27000},{"pid":1,"tid":2,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578144000,"dur":1000},{"pid":1,"tid":2,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578145000,"dur":4000},{"pid":1,"tid":2,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578151000,"dur":3000},{"pid":1,"tid":2,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578154000,"dur":100},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438578110000,"dur":44000},{"pid":1,"tid":2,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438578154000,"dur":7000},{"pid":1,"tid":2,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438578161000,"dur":16000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438578000000,"dur":188000},{"pid":1,"tid":2,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438578189000,"dur":16000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438577987000,"dur":218000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438578322000,"dur":2000},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438578337000,"dur":214000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438578556000,"dur":85000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438578646000,"dur":47000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438578695000,"dur":11000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438578709000,"dur":18000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438578728000,"dur":10000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438578740000,"dur":3000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438578744000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438578746000,"dur":2687000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438581436000,"dur":70000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438581510000,"dur":204000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438581716000,"dur":43000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438581763000,"dur":1325000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438583090000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: java pre compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438583092000,"dur":68000},{"pid":1,"tid":0,"id":62,"name":"task: android java compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438583162000,"dur":2202000},{"pid":1,"tid":0,"id":63,"name":"task: external native build json","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438585368000,"dur":5000},{"pid":1,"tid":0,"id":64,"name":"task: external native build","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438585374000,"dur":1189000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438586565000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438586568000,"dur":25000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438586594000,"dur":14000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438586609000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438586611000,"dur":21000},{"pid":1,"tid":2,"id":71,"name":"transform prep: dex archive builder","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518438586695000,"dur":20000},{"pid":1,"tid":2,"id":72,"name":"transform: dex archive builder","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518438586716000,"dur":890000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438586639000,"dur":1110000},{"pid":1,"tid":2,"id":74,"name":"transform prep: external libs merger","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518438587763000,"dur":4000},{"pid":1,"tid":2,"id":75,"name":"transform: external libs merger","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518438587767000,"dur":1497000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438587750000,"dur":1527000},{"pid":1,"tid":2,"id":77,"name":"transform prep: dex merger","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518438589291000,"dur":5000},{"pid":1,"tid":2,"id":78,"name":"transform: dex merger","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518438589296000,"dur":228000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438589278000,"dur":260000},{"pid":1,"tid":0,"id":79,"name":"task: merge source set folders","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438589540000,"dur":13000},{"pid":1,"tid":2,"id":81,"name":"transform prep: merge java resources","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518438589658000,"dur":15000},{"pid":1,"tid":2,"id":82,"name":"transform: merge java resources","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518438589673000,"dur":996000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438589557000,"dur":1217000},{"pid":1,"tid":2,"id":84,"name":"transform prep: strip debug symbol","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: false\n"},"ph":"X","ts":1518438590790000,"dur":2000},{"pid":1,"tid":2,"id":85,"name":"transform: strip debug symbol","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: false\n"},"ph":"X","ts":1518438590792000,"dur":68000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438590778000,"dur":101000},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438590880000,"dur":1000},{"pid":1,"tid":3,"id":88,"name":"transform prep: merge java resources","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518438590903000,"dur":3000},{"pid":1,"tid":3,"id":89,"name":"transform: merge java resources","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518438590906000,"dur":261000},{"pid":1,"tid":0,"id":87,"name":"task: transform","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438590887000,"dur":307000},{"pid":1,"tid":0,"id":90,"name":"task: validate signing","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438591196000,"dur":8000},{"pid":1,"tid":0,"id":91,"name":"task: package application","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438591205000,"dur":972000},{"pid":1,"tid":0,"id":92,"name":"task: unknown task type","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438592178000,"dur":100},{"pid":1,"tid":2,"id":93,"name":"base plugin build finished","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 1219638\n apk_size: 3017912\n resources_ap_size: 488159\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438592182000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-13-29-52-198.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-13-29-52-198.rawproto
new file mode 100644
index 00000000..d421c322
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-13-29-52-198.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-13-30-50-375.json b/IGetAndroid/build/android-profile/profile-2018-02-12-13-30-50-375.json
new file mode 100644
index 00000000..8415e408
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-13-30-50-375.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518438627280000,"args":{"JVM stats":"heap_memory_usage: 28644616\nnon_heap_memory_usage: 53659528\nloaded_class_count: 7609\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 5\n gc_time: 57\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 100\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630026000,"args":{"JVM stats":"heap_memory_usage: 263357312\nnon_heap_memory_usage: 81179184\nloaded_class_count: 10846\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630289000,"args":{"JVM stats":"heap_memory_usage: 284032944\nnon_heap_memory_usage: 82099640\nloaded_class_count: 11022\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630317000,"args":{"JVM stats":"heap_memory_usage: 284032944\nnon_heap_memory_usage: 81790960\nloaded_class_count: 11045\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630406000,"args":{"JVM stats":"heap_memory_usage: 55470280\nnon_heap_memory_usage: 81790000\nloaded_class_count: 11056\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 62\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630414000,"args":{"JVM stats":"heap_memory_usage: 55470280\nnon_heap_memory_usage: 81818784\nloaded_class_count: 11060\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630428000,"args":{"JVM stats":"heap_memory_usage: 55801784\nnon_heap_memory_usage: 81932712\nloaded_class_count: 11065\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630434000,"args":{"JVM stats":"heap_memory_usage: 55801784\nnon_heap_memory_usage: 81972216\nloaded_class_count: 11066\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630438000,"args":{"JVM stats":"heap_memory_usage: 56704696\nnon_heap_memory_usage: 81999536\nloaded_class_count: 11066\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438630438001,"args":{"JVM stats":"heap_memory_usage: 57174304\nnon_heap_memory_usage: 82000320\nloaded_class_count: 11066\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438632107000,"args":{"JVM stats":"heap_memory_usage: 187764096\nnon_heap_memory_usage: 87549160\nloaded_class_count: 11300\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438632147000,"args":{"JVM stats":"heap_memory_usage: 189564072\nnon_heap_memory_usage: 87795952\nloaded_class_count: 11331\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438632275000,"args":{"JVM stats":"heap_memory_usage: 199563872\nnon_heap_memory_usage: 89010192\nloaded_class_count: 11480\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438632293000,"args":{"JVM stats":"heap_memory_usage: 199563872\nnon_heap_memory_usage: 89166848\nloaded_class_count: 11494\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438633067000,"args":{"JVM stats":"heap_memory_usage: 59468576\nnon_heap_memory_usage: 90097016\nloaded_class_count: 11584\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 17\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 212\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438633068000,"args":{"JVM stats":"heap_memory_usage: 61606248\nnon_heap_memory_usage: 90102008\nloaded_class_count: 11584\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438633105000,"args":{"JVM stats":"heap_memory_usage: 64617552\nnon_heap_memory_usage: 90245336\nloaded_class_count: 11589\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438634557000,"args":{"JVM stats":"heap_memory_usage: 152827392\nnon_heap_memory_usage: 101479648\nloaded_class_count: 12506\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438637086000,"args":{"JVM stats":"heap_memory_usage: 155540128\nnon_heap_memory_usage: 100601696\nloaded_class_count: 12567\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438641888000,"args":{"JVM stats":"heap_memory_usage: 157028256\nnon_heap_memory_usage: 100621656\nloaded_class_count: 12571\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438641889000,"args":{"JVM stats":"heap_memory_usage: 157028256\nnon_heap_memory_usage: 100622936\nloaded_class_count: 12571\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438647067000,"args":{"JVM stats":"heap_memory_usage: 505657392\nnon_heap_memory_usage: 135091704\nloaded_class_count: 15875\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 60\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438647076000,"args":{"JVM stats":"heap_memory_usage: 513057000\nnon_heap_memory_usage: 135124808\nloaded_class_count: 15878\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438647087000,"args":{"JVM stats":"heap_memory_usage: 513057000\nnon_heap_memory_usage: 135209520\nloaded_class_count: 15888\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438647088000,"args":{"JVM stats":"heap_memory_usage: 513057000\nnon_heap_memory_usage: 135213648\nloaded_class_count: 15888\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438647097000,"args":{"JVM stats":"heap_memory_usage: 515292872\nnon_heap_memory_usage: 135273760\nloaded_class_count: 15890\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438647672000,"args":{"JVM stats":"heap_memory_usage: 108885768\nnon_heap_memory_usage: 138809480\nloaded_class_count: 16443\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 17\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438648027000,"args":{"JVM stats":"heap_memory_usage: 173670112\nnon_heap_memory_usage: 140541912\nloaded_class_count: 16541\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438648033000,"args":{"JVM stats":"heap_memory_usage: 173670112\nnon_heap_memory_usage: 140556760\nloaded_class_count: 16541\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438648501000,"args":{"JVM stats":"heap_memory_usage: 200027912\nnon_heap_memory_usage: 142707536\nloaded_class_count: 16733\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438648561000,"args":{"JVM stats":"heap_memory_usage: 201780240\nnon_heap_memory_usage: 142701864\nloaded_class_count: 16737\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438648563000,"args":{"JVM stats":"heap_memory_usage: 201994232\nnon_heap_memory_usage: 142705608\nloaded_class_count: 16737\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438648730000,"args":{"JVM stats":"heap_memory_usage: 224712176\nnon_heap_memory_usage: 143041776\nloaded_class_count: 16742\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438648731000,"args":{"JVM stats":"heap_memory_usage: 224712176\nnon_heap_memory_usage: 143044080\nloaded_class_count: 16742\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438650345000,"args":{"JVM stats":"heap_memory_usage: 303328328\nnon_heap_memory_usage: 144181592\nloaded_class_count: 16985\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 22\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438650345001,"args":{"JVM stats":"heap_memory_usage: 308177912\nnon_heap_memory_usage: 144181592\nloaded_class_count: 16985\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438650379000,"args":{"JVM stats":"heap_memory_usage: 309361792\nnon_heap_memory_usage: 144504768\nloaded_class_count: 17035\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438627342000,"dur":426000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438627768000,"dur":341000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438628110000,"dur":47000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438628109000,"dur":50000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438629138000,"dur":104000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438629243000,"dur":18000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629298000,"dur":20000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629318000,"dur":4000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629323000,"dur":8000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629331000,"dur":28000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629360000,"dur":9000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629369000,"dur":7000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629376000,"dur":55000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629432000,"dur":6000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629438000,"dur":8000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629446000,"dur":1000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629448000,"dur":47000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629495000,"dur":26000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629521000,"dur":71000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629599000,"dur":35000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629634000,"dur":4000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629261000,"dur":377000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438629638000,"dur":60000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629701000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629702000,"dur":1000},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629703000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629703000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629704000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629704000,"dur":1000},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629705000,"dur":1000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629706000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629707000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629707000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629707000,"dur":24000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629731000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629732000,"dur":6000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629739000,"dur":2000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629741000,"dur":1000},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438629699000,"dur":43000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438629742000,"dur":6000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438629748000,"dur":47000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438629137000,"dur":730000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438628269000,"dur":1601000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438630017000,"dur":2000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630027000,"dur":262000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630290000,"dur":27000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630319000,"dur":87000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630407000,"dur":7000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630415000,"dur":13000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630429000,"dur":4000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630434000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630438000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438630439000,"dur":1668000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438632108000,"dur":39000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438632148000,"dur":127000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438632276000,"dur":17000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438632295000,"dur":772000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438633068000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438633069000,"dur":36000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438633106000,"dur":1451000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438634561000,"dur":2525000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438637087000,"dur":4801000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438641888000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438641889000,"dur":5178000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438647068000,"dur":8000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438647077000,"dur":10000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438647087000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438647088000,"dur":8000},{"pid":1,"tid":2,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: false\n"},"ph":"X","ts":1518438647133000,"dur":9000},{"pid":1,"tid":2,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: false\n"},"ph":"X","ts":1518438647144000,"dur":514000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438647098000,"dur":574000},{"pid":1,"tid":2,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518438647677000,"dur":100},{"pid":1,"tid":2,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518438647677000,"dur":338000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438647673000,"dur":354000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438648028000,"dur":5000},{"pid":1,"tid":2,"id":78,"name":"transform prep: merge java resources","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518438648099000,"dur":3000},{"pid":1,"tid":2,"id":79,"name":"transform: merge java resources","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518438648102000,"dur":325000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438648035000,"dur":466000},{"pid":1,"tid":1,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: false\n"},"ph":"X","ts":1518438648507000,"dur":100},{"pid":1,"tid":1,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: false\n"},"ph":"X","ts":1518438648507000,"dur":41000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438648502000,"dur":59000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438648561000,"dur":1000},{"pid":1,"tid":1,"id":85,"name":"transform prep: merge java resources","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518438648572000,"dur":1000},{"pid":1,"tid":1,"id":86,"name":"transform: merge java resources","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: false\n"},"ph":"X","ts":1518438648573000,"dur":140000},{"pid":1,"tid":0,"id":84,"name":"task: transform","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438648563000,"dur":166000},{"pid":1,"tid":0,"id":87,"name":"task: validate signing","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438648730000,"dur":100},{"pid":1,"tid":0,"id":88,"name":"task: package application","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438648731000,"dur":1614000},{"pid":1,"tid":0,"id":89,"name":"task: unknown task type","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438650345000,"dur":100},{"pid":1,"tid":1,"id":90,"name":"base plugin build finished","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 2125077\n apk_size: 2808201\n resources_ap_size: 487031\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438650351000,"dur":2000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-13-30-50-375.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-13-30-50-375.rawproto
new file mode 100644
index 00000000..ff09533c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-13-30-50-375.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-13-35-05-905.json b/IGetAndroid/build/android-profile/profile-2018-02-12-13-35-05-905.json
new file mode 100644
index 00000000..60c36c76
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-13-35-05-905.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901316000,"args":{"JVM stats":"heap_memory_usage: 379930848\nnon_heap_memory_usage: 149614160\nloaded_class_count: 17391\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901544000,"args":{"JVM stats":"heap_memory_usage: 394154272\nnon_heap_memory_usage: 150503920\nloaded_class_count: 17425\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901603000,"args":{"JVM stats":"heap_memory_usage: 400900272\nnon_heap_memory_usage: 150847112\nloaded_class_count: 17449\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901606000,"args":{"JVM stats":"heap_memory_usage: 401255200\nnon_heap_memory_usage: 150857968\nloaded_class_count: 17449\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901610000,"args":{"JVM stats":"heap_memory_usage: 401610096\nnon_heap_memory_usage: 150887696\nloaded_class_count: 17449\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901611000,"args":{"JVM stats":"heap_memory_usage: 401610096\nnon_heap_memory_usage: 150895368\nloaded_class_count: 17449\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901617000,"args":{"JVM stats":"heap_memory_usage: 401964992\nnon_heap_memory_usage: 150918152\nloaded_class_count: 17450\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901618000,"args":{"JVM stats":"heap_memory_usage: 401964992\nnon_heap_memory_usage: 150919080\nloaded_class_count: 17450\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901619000,"args":{"JVM stats":"heap_memory_usage: 401964992\nnon_heap_memory_usage: 150919080\nloaded_class_count: 17450\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901619001,"args":{"JVM stats":"heap_memory_usage: 401964992\nnon_heap_memory_usage: 150924072\nloaded_class_count: 17450\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901672000,"args":{"JVM stats":"heap_memory_usage: 406225600\nnon_heap_memory_usage: 150998320\nloaded_class_count: 17450\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901678000,"args":{"JVM stats":"heap_memory_usage: 406968704\nnon_heap_memory_usage: 151023568\nloaded_class_count: 17451\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901720000,"args":{"JVM stats":"heap_memory_usage: 411591792\nnon_heap_memory_usage: 151341624\nloaded_class_count: 17454\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438901722000,"args":{"JVM stats":"heap_memory_usage: 411591792\nnon_heap_memory_usage: 151345848\nloaded_class_count: 17454\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438902732000,"args":{"JVM stats":"heap_memory_usage: 433578256\nnon_heap_memory_usage: 151578160\nloaded_class_count: 17462\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438902733000,"args":{"JVM stats":"heap_memory_usage: 433578256\nnon_heap_memory_usage: 151583472\nloaded_class_count: 17462\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438902761000,"args":{"JVM stats":"heap_memory_usage: 435087176\nnon_heap_memory_usage: 151724208\nloaded_class_count: 17463\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438903372000,"args":{"JVM stats":"heap_memory_usage: 478246144\nnon_heap_memory_usage: 154040192\nloaded_class_count: 17487\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438903374000,"args":{"JVM stats":"heap_memory_usage: 478246144\nnon_heap_memory_usage: 154041280\nloaded_class_count: 17487\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438903465000,"args":{"JVM stats":"heap_memory_usage: 479666144\nnon_heap_memory_usage: 154094624\nloaded_class_count: 17487\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438903466000,"args":{"JVM stats":"heap_memory_usage: 479666144\nnon_heap_memory_usage: 154095256\nloaded_class_count: 17487\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904564000,"args":{"JVM stats":"heap_memory_usage: 134924136\nnon_heap_memory_usage: 158846640\nloaded_class_count: 17519\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 34\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 203\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904566000,"args":{"JVM stats":"heap_memory_usage: 134924136\nnon_heap_memory_usage: 158869864\nloaded_class_count: 17519\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904568000,"args":{"JVM stats":"heap_memory_usage: 134924136\nnon_heap_memory_usage: 158869864\nloaded_class_count: 17519\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904568001,"args":{"JVM stats":"heap_memory_usage: 134924136\nnon_heap_memory_usage: 158870472\nloaded_class_count: 17519\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904572000,"args":{"JVM stats":"heap_memory_usage: 134924136\nnon_heap_memory_usage: 158891432\nloaded_class_count: 17523\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904743000,"args":{"JVM stats":"heap_memory_usage: 157076744\nnon_heap_memory_usage: 159974592\nloaded_class_count: 17537\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904957000,"args":{"JVM stats":"heap_memory_usage: 215780568\nnon_heap_memory_usage: 160268320\nloaded_class_count: 17537\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904959000,"args":{"JVM stats":"heap_memory_usage: 215780568\nnon_heap_memory_usage: 160269592\nloaded_class_count: 17537\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904966000,"args":{"JVM stats":"heap_memory_usage: 216727816\nnon_heap_memory_usage: 160292768\nloaded_class_count: 17539\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904969000,"args":{"JVM stats":"heap_memory_usage: 216727816\nnon_heap_memory_usage: 160300320\nloaded_class_count: 17539\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904971000,"args":{"JVM stats":"heap_memory_usage: 216727816\nnon_heap_memory_usage: 160301728\nloaded_class_count: 17539\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904979000,"args":{"JVM stats":"heap_memory_usage: 216727816\nnon_heap_memory_usage: 160305928\nloaded_class_count: 17539\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438904980000,"args":{"JVM stats":"heap_memory_usage: 216727816\nnon_heap_memory_usage: 160309528\nloaded_class_count: 17539\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438905894000,"args":{"JVM stats":"heap_memory_usage: 287237448\nnon_heap_memory_usage: 160346520\nloaded_class_count: 17587\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 7\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438905895000,"args":{"JVM stats":"heap_memory_usage: 288215040\nnon_heap_memory_usage: 160346520\nloaded_class_count: 17587\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518438905905000,"args":{"JVM stats":"heap_memory_usage: 288680728\nnon_heap_memory_usage: 160394632\nloaded_class_count: 17588\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":3,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901316000,"dur":14000},{"pid":1,"tid":3,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901330000,"dur":13000},{"pid":1,"tid":3,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901343000,"dur":5000},{"pid":1,"tid":3,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901343000,"dur":5000},{"pid":1,"tid":3,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901385000,"dur":7000},{"pid":1,"tid":3,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901392000,"dur":2000},{"pid":1,"tid":3,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901396000,"dur":1000},{"pid":1,"tid":3,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901397000,"dur":100},{"pid":1,"tid":3,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901397000,"dur":1000},{"pid":1,"tid":3,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901398000,"dur":2000},{"pid":1,"tid":3,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901400000,"dur":100},{"pid":1,"tid":3,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901400000,"dur":1000},{"pid":1,"tid":3,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901401000,"dur":4000},{"pid":1,"tid":3,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901406000,"dur":100},{"pid":1,"tid":3,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901406000,"dur":1000},{"pid":1,"tid":3,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901407000,"dur":100},{"pid":1,"tid":3,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901407000,"dur":38000},{"pid":1,"tid":3,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901445000,"dur":2000},{"pid":1,"tid":3,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901447000,"dur":5000},{"pid":1,"tid":3,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901454000,"dur":3000},{"pid":1,"tid":3,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901457000,"dur":100},{"pid":1,"tid":3,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901394000,"dur":63000},{"pid":1,"tid":3,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901457000,"dur":7000},{"pid":1,"tid":3,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901465000,"dur":1000},{"pid":1,"tid":3,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901466000,"dur":100},{"pid":1,"tid":3,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901466000,"dur":100},{"pid":1,"tid":3,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901466000,"dur":1000},{"pid":1,"tid":3,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901467000,"dur":100},{"pid":1,"tid":3,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901467000,"dur":100},{"pid":1,"tid":3,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901467000,"dur":2000},{"pid":1,"tid":3,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901469000,"dur":100},{"pid":1,"tid":3,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901469000,"dur":100},{"pid":1,"tid":3,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901469000,"dur":100},{"pid":1,"tid":3,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901469000,"dur":23000},{"pid":1,"tid":3,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901492000,"dur":1000},{"pid":1,"tid":3,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901493000,"dur":3000},{"pid":1,"tid":3,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901497000,"dur":2000},{"pid":1,"tid":3,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901499000,"dur":100},{"pid":1,"tid":3,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518438901464000,"dur":35000},{"pid":1,"tid":3,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901499000,"dur":4000},{"pid":1,"tid":3,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901503000,"dur":12000},{"pid":1,"tid":3,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901385000,"dur":135000},{"pid":1,"tid":3,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438901377000,"dur":143000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901544000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901545000,"dur":58000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901603000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901607000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901610000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438901612000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901617000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901618000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901619000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901620000,"dur":52000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438901672000,"dur":6000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438901679000,"dur":41000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438901721000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438901723000,"dur":1009000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438902732000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438902733000,"dur":28000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438902762000,"dur":610000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438903373000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438903374000,"dur":91000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438903465000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438903466000,"dur":1098000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438904564000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438904567000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438904568000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438904568000,"dur":3000},{"pid":1,"tid":4,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518438904592000,"dur":7000},{"pid":1,"tid":4,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518438904599000,"dur":142000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438904572000,"dur":171000},{"pid":1,"tid":4,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518438904747000,"dur":100},{"pid":1,"tid":4,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518438904747000,"dur":198000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438904744000,"dur":213000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438904957000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438904959000,"dur":7000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438904966000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438904970000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518438904971000,"dur":8000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438904979000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438904980000,"dur":914000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518438905895000,"dur":100},{"pid":1,"tid":3,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518438905896000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-13-35-05-905.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-13-35-05-905.rawproto
new file mode 100644
index 00000000..f5d637b7
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-13-35-05-905.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-13-42-42-876.json b/IGetAndroid/build/android-profile/profile-2018-02-12-13-42-42-876.json
new file mode 100644
index 00000000..4645c437
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-13-42-42-876.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360106000,"args":{"JVM stats":"heap_memory_usage: 316667960\nnon_heap_memory_usage: 160934920\nloaded_class_count: 17591\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360257000,"args":{"JVM stats":"heap_memory_usage: 328723720\nnon_heap_memory_usage: 160465984\nloaded_class_count: 17597\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360311000,"args":{"JVM stats":"heap_memory_usage: 334423160\nnon_heap_memory_usage: 160439056\nloaded_class_count: 17598\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360315000,"args":{"JVM stats":"heap_memory_usage: 335023024\nnon_heap_memory_usage: 160460488\nloaded_class_count: 17600\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360319000,"args":{"JVM stats":"heap_memory_usage: 335322936\nnon_heap_memory_usage: 160495304\nloaded_class_count: 17604\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360321000,"args":{"JVM stats":"heap_memory_usage: 335322936\nnon_heap_memory_usage: 160500800\nloaded_class_count: 17605\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360323000,"args":{"JVM stats":"heap_memory_usage: 335322936\nnon_heap_memory_usage: 160503416\nloaded_class_count: 17605\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360324000,"args":{"JVM stats":"heap_memory_usage: 335322936\nnon_heap_memory_usage: 160520064\nloaded_class_count: 17606\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360325000,"args":{"JVM stats":"heap_memory_usage: 335322936\nnon_heap_memory_usage: 160519704\nloaded_class_count: 17607\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360325001,"args":{"JVM stats":"heap_memory_usage: 335322936\nnon_heap_memory_usage: 160531032\nloaded_class_count: 17607\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360697000,"args":{"JVM stats":"heap_memory_usage: 378587552\nnon_heap_memory_usage: 161618464\nloaded_class_count: 17618\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360699000,"args":{"JVM stats":"heap_memory_usage: 378887472\nnon_heap_memory_usage: 161619720\nloaded_class_count: 17618\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360704000,"args":{"JVM stats":"heap_memory_usage: 379334848\nnon_heap_memory_usage: 161646488\nloaded_class_count: 17620\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439360706000,"args":{"JVM stats":"heap_memory_usage: 379473496\nnon_heap_memory_usage: 161662384\nloaded_class_count: 17621\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439361608000,"args":{"JVM stats":"heap_memory_usage: 397901272\nnon_heap_memory_usage: 162047424\nloaded_class_count: 17623\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439361609000,"args":{"JVM stats":"heap_memory_usage: 397901272\nnon_heap_memory_usage: 162050416\nloaded_class_count: 17623\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439361634000,"args":{"JVM stats":"heap_memory_usage: 398505160\nnon_heap_memory_usage: 162110952\nloaded_class_count: 17624\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439361646000,"args":{"JVM stats":"heap_memory_usage: 399105096\nnon_heap_memory_usage: 162133368\nloaded_class_count: 17625\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439361647000,"args":{"JVM stats":"heap_memory_usage: 399105096\nnon_heap_memory_usage: 162138632\nloaded_class_count: 17625\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439361700000,"args":{"JVM stats":"heap_memory_usage: 400606792\nnon_heap_memory_usage: 162197632\nloaded_class_count: 17625\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439361701000,"args":{"JVM stats":"heap_memory_usage: 400606792\nnon_heap_memory_usage: 162197632\nloaded_class_count: 17625\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362311000,"args":{"JVM stats":"heap_memory_usage: 477943824\nnon_heap_memory_usage: 165819904\nloaded_class_count: 17627\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362313000,"args":{"JVM stats":"heap_memory_usage: 477943824\nnon_heap_memory_usage: 165836176\nloaded_class_count: 17627\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362315000,"args":{"JVM stats":"heap_memory_usage: 478243760\nnon_heap_memory_usage: 165838568\nloaded_class_count: 17628\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362315001,"args":{"JVM stats":"heap_memory_usage: 478243760\nnon_heap_memory_usage: 165839832\nloaded_class_count: 17628\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362318000,"args":{"JVM stats":"heap_memory_usage: 478243760\nnon_heap_memory_usage: 165844616\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362336000,"args":{"JVM stats":"heap_memory_usage: 479143528\nnon_heap_memory_usage: 165869896\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362339000,"args":{"JVM stats":"heap_memory_usage: 479443776\nnon_heap_memory_usage: 165874904\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362340000,"args":{"JVM stats":"heap_memory_usage: 479443776\nnon_heap_memory_usage: 165875672\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362345000,"args":{"JVM stats":"heap_memory_usage: 480343944\nnon_heap_memory_usage: 165877848\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362347000,"args":{"JVM stats":"heap_memory_usage: 480343944\nnon_heap_memory_usage: 165879912\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362347001,"args":{"JVM stats":"heap_memory_usage: 480343944\nnon_heap_memory_usage: 165882184\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362354000,"args":{"JVM stats":"heap_memory_usage: 480943912\nnon_heap_memory_usage: 165890840\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362354001,"args":{"JVM stats":"heap_memory_usage: 480943912\nnon_heap_memory_usage: 165891864\nloaded_class_count: 17630\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362868000,"args":{"JVM stats":"heap_memory_usage: 76128608\nnon_heap_memory_usage: 166164944\nloaded_class_count: 17631\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 13\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362868001,"args":{"JVM stats":"heap_memory_usage: 77334776\nnon_heap_memory_usage: 166168912\nloaded_class_count: 17631\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518439362876000,"args":{"JVM stats":"heap_memory_usage: 77647976\nnon_heap_memory_usage: 166172208\nloaded_class_count: 17631\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":5,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360106000,"dur":5000},{"pid":1,"tid":5,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360111000,"dur":6000},{"pid":1,"tid":5,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360118000,"dur":4000},{"pid":1,"tid":5,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360117000,"dur":5000},{"pid":1,"tid":5,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360133000,"dur":5000},{"pid":1,"tid":5,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360138000,"dur":1000},{"pid":1,"tid":5,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360143000,"dur":1000},{"pid":1,"tid":5,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360144000,"dur":100},{"pid":1,"tid":5,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360144000,"dur":1000},{"pid":1,"tid":5,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360145000,"dur":100},{"pid":1,"tid":5,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360145000,"dur":1000},{"pid":1,"tid":5,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360146000,"dur":100},{"pid":1,"tid":5,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360146000,"dur":4000},{"pid":1,"tid":5,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360150000,"dur":100},{"pid":1,"tid":5,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360150000,"dur":1000},{"pid":1,"tid":5,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360151000,"dur":100},{"pid":1,"tid":5,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360151000,"dur":31000},{"pid":1,"tid":5,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360182000,"dur":100},{"pid":1,"tid":5,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360182000,"dur":4000},{"pid":1,"tid":5,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360188000,"dur":1000},{"pid":1,"tid":5,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360189000,"dur":1000},{"pid":1,"tid":5,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360140000,"dur":50000},{"pid":1,"tid":5,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360190000,"dur":4000},{"pid":1,"tid":5,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360195000,"dur":1000},{"pid":1,"tid":5,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360196000,"dur":100},{"pid":1,"tid":5,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360196000,"dur":100},{"pid":1,"tid":5,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360196000,"dur":100},{"pid":1,"tid":5,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360196000,"dur":1000},{"pid":1,"tid":5,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360197000,"dur":100},{"pid":1,"tid":5,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360197000,"dur":1000},{"pid":1,"tid":5,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360198000,"dur":100},{"pid":1,"tid":5,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360198000,"dur":100},{"pid":1,"tid":5,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360198000,"dur":100},{"pid":1,"tid":5,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360198000,"dur":22000},{"pid":1,"tid":5,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360220000,"dur":100},{"pid":1,"tid":5,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360220000,"dur":2000},{"pid":1,"tid":5,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360223000,"dur":1000},{"pid":1,"tid":5,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360224000,"dur":100},{"pid":1,"tid":5,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518439360194000,"dur":30000},{"pid":1,"tid":5,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360224000,"dur":4000},{"pid":1,"tid":5,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360228000,"dur":7000},{"pid":1,"tid":5,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360133000,"dur":105000},{"pid":1,"tid":5,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439360126000,"dur":112000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360257000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360258000,"dur":53000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360311000,"dur":4000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360316000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360320000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360321000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360323000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360324000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360325000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439360326000,"dur":371000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360698000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360700000,"dur":4000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439360704000,"dur":2000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439360707000,"dur":901000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439361608000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439361609000,"dur":25000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439361635000,"dur":11000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439361646000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439361647000,"dur":53000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439361701000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439361701000,"dur":610000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362312000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362314000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362315000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362315000,"dur":3000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362319000,"dur":17000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362337000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362339000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362340000,"dur":5000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362345000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439362347000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518439362348000,"dur":6000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439362354000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: package application","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439362355000,"dur":512000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518439362868000,"dur":100},{"pid":1,"tid":5,"id":80,"name":"base plugin build finished","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518439362869000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-13-42-42-876.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-13-42-42-876.rawproto
new file mode 100644
index 00000000..20cf1bcf
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-13-42-42-876.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-32-10-512.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-32-10-512.json
new file mode 100644
index 00000000..3edb90fa
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-32-10-512.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518445922723000,"args":{"JVM stats":"heap_memory_usage: 54782872\nnon_heap_memory_usage: 60517560\nloaded_class_count: 8169\nthread_count: 25\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 6\n gc_time: 63\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 96\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518445930515000,"args":{"JVM stats":"heap_memory_usage: 182734936\nnon_heap_memory_usage: 93228208\nloaded_class_count: 12213\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 54\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 274\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445922762000,"dur":350000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445923113000,"dur":446000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445923560000,"dur":84000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445923560000,"dur":86000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445924454000,"dur":137000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445924591000,"dur":22000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924660000,"dur":19000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924679000,"dur":5000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924685000,"dur":9000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924694000,"dur":30000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924725000,"dur":9000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924735000,"dur":8000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924743000,"dur":49000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924792000,"dur":5000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924797000,"dur":9000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924806000,"dur":2000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924809000,"dur":68000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924877000,"dur":25000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924902000,"dur":60000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924969000,"dur":30000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925000000,"dur":5000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445924613000,"dur":392000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445925005000,"dur":67000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925074000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925075000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925075000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925075000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925076000,"dur":1000},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925077000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925077000,"dur":3000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925080000,"dur":100},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925080000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925080000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925080000,"dur":24000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925104000,"dur":2000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925106000,"dur":6000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925113000,"dur":2000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925115000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518445925072000,"dur":43000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445925115000,"dur":7000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445925122000,"dur":41000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445924451000,"dur":769000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445925223000,"dur":2241000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445923793000,"dur":3671000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518445930241000,"dur":120000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-32-10-512.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-32-10-512.rawproto
new file mode 100644
index 00000000..5783b390
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-32-10-512.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-33-58-346.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-33-58-346.json
new file mode 100644
index 00000000..a31c2cc3
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-33-58-346.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446032488000,"args":{"JVM stats":"heap_memory_usage: 275986096\nnon_heap_memory_usage: 98861512\nloaded_class_count: 12548\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446038346000,"args":{"JVM stats":"heap_memory_usage: 105269560\nnon_heap_memory_usage: 101750424\nloaded_class_count: 12583\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 23\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032488000,"dur":15000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032503000,"dur":23000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032526000,"dur":5000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032526000,"dur":5000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032579000,"dur":7000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032586000,"dur":1000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032591000,"dur":1000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032592000,"dur":100},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032592000,"dur":1000},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032593000,"dur":2000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032595000,"dur":100},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032595000,"dur":1000},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032596000,"dur":5000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032601000,"dur":1000},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032602000,"dur":100},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032602000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032602000,"dur":39000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032641000,"dur":2000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032643000,"dur":5000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032649000,"dur":2000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032651000,"dur":100},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032587000,"dur":64000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032651000,"dur":5000},{"pid":1,"tid":2,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032658000,"dur":100},{"pid":1,"tid":2,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032658000,"dur":1000},{"pid":1,"tid":2,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032659000,"dur":100},{"pid":1,"tid":2,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032659000,"dur":100},{"pid":1,"tid":2,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032659000,"dur":1000},{"pid":1,"tid":2,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032660000,"dur":100},{"pid":1,"tid":2,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032660000,"dur":1000},{"pid":1,"tid":2,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032661000,"dur":100},{"pid":1,"tid":2,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032661000,"dur":1000},{"pid":1,"tid":2,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032662000,"dur":100},{"pid":1,"tid":2,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032662000,"dur":20000},{"pid":1,"tid":2,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032682000,"dur":1000},{"pid":1,"tid":2,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032683000,"dur":3000},{"pid":1,"tid":2,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032687000,"dur":3000},{"pid":1,"tid":2,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032690000,"dur":100},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446032656000,"dur":34000},{"pid":1,"tid":2,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032690000,"dur":5000},{"pid":1,"tid":2,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032695000,"dur":10000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032578000,"dur":128000},{"pid":1,"tid":2,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032707000,"dur":5120000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446032537000,"dur":5290000},{"pid":1,"tid":2,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446038339000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-33-58-346.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-33-58-346.rawproto
new file mode 100644
index 00000000..91ebdb20
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-33-58-346.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-06-860.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-06-860.json
new file mode 100644
index 00000000..97ab7c31
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-06-860.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446039562000,"args":{"JVM stats":"heap_memory_usage: 167340920\nnon_heap_memory_usage: 102988592\nloaded_class_count: 12603\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446039871000,"args":{"JVM stats":"heap_memory_usage: 184306904\nnon_heap_memory_usage: 104564584\nloaded_class_count: 12750\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446039980000,"args":{"JVM stats":"heap_memory_usage: 191556512\nnon_heap_memory_usage: 105208920\nloaded_class_count: 12826\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446040003000,"args":{"JVM stats":"heap_memory_usage: 192280920\nnon_heap_memory_usage: 105289824\nloaded_class_count: 12832\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446040017000,"args":{"JVM stats":"heap_memory_usage: 193005768\nnon_heap_memory_usage: 105331304\nloaded_class_count: 12839\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446040021000,"args":{"JVM stats":"heap_memory_usage: 193005768\nnon_heap_memory_usage: 105338208\nloaded_class_count: 12840\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446040059000,"args":{"JVM stats":"heap_memory_usage: 193368968\nnon_heap_memory_usage: 105467480\nloaded_class_count: 12856\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446040065000,"args":{"JVM stats":"heap_memory_usage: 193731128\nnon_heap_memory_usage: 105479704\nloaded_class_count: 12857\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446040069000,"args":{"JVM stats":"heap_memory_usage: 194093288\nnon_heap_memory_usage: 105476152\nloaded_class_count: 12857\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446040069001,"args":{"JVM stats":"heap_memory_usage: 194093288\nnon_heap_memory_usage: 105475032\nloaded_class_count: 12857\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446041223000,"args":{"JVM stats":"heap_memory_usage: 253758728\nnon_heap_memory_usage: 107976688\nloaded_class_count: 13058\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446041332000,"args":{"JVM stats":"heap_memory_usage: 255837040\nnon_heap_memory_usage: 108173440\nloaded_class_count: 13087\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446041646000,"args":{"JVM stats":"heap_memory_usage: 267768584\nnon_heap_memory_usage: 109326720\nloaded_class_count: 13238\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446041707000,"args":{"JVM stats":"heap_memory_usage: 268130744\nnon_heap_memory_usage: 109350688\nloaded_class_count: 13238\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043064000,"args":{"JVM stats":"heap_memory_usage: 291077304\nnon_heap_memory_usage: 110356672\nloaded_class_count: 13325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043064001,"args":{"JVM stats":"heap_memory_usage: 291142856\nnon_heap_memory_usage: 110356672\nloaded_class_count: 13325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043246000,"args":{"JVM stats":"heap_memory_usage: 295853560\nnon_heap_memory_usage: 110590472\nloaded_class_count: 13326\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043357000,"args":{"JVM stats":"heap_memory_usage: 73981496\nnon_heap_memory_usage: 110747712\nloaded_class_count: 13332\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 33\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043444000,"args":{"JVM stats":"heap_memory_usage: 76319032\nnon_heap_memory_usage: 110885160\nloaded_class_count: 13336\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043482000,"args":{"JVM stats":"heap_memory_usage: 76792488\nnon_heap_memory_usage: 110967616\nloaded_class_count: 13340\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043501000,"args":{"JVM stats":"heap_memory_usage: 77993384\nnon_heap_memory_usage: 110980440\nloaded_class_count: 13341\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043504000,"args":{"JVM stats":"heap_memory_usage: 77993384\nnon_heap_memory_usage: 110996672\nloaded_class_count: 13341\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446043505000,"args":{"JVM stats":"heap_memory_usage: 77993384\nnon_heap_memory_usage: 110998440\nloaded_class_count: 13341\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446045816000,"args":{"JVM stats":"heap_memory_usage: 187739248\nnon_heap_memory_usage: 113054896\nloaded_class_count: 13346\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446045838000,"args":{"JVM stats":"heap_memory_usage: 188729344\nnon_heap_memory_usage: 113072240\nloaded_class_count: 13346\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446046770000,"args":{"JVM stats":"heap_memory_usage: 202347160\nnon_heap_memory_usage: 113339448\nloaded_class_count: 13354\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446046771000,"args":{"JVM stats":"heap_memory_usage: 202601352\nnon_heap_memory_usage: 113343352\nloaded_class_count: 13354\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446046850000,"args":{"JVM stats":"heap_memory_usage: 203894344\nnon_heap_memory_usage: 113181728\nloaded_class_count: 13398\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446046860000,"args":{"JVM stats":"heap_memory_usage: 203894344\nnon_heap_memory_usage: 113201440\nloaded_class_count: 13399\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039563000,"dur":14000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039577000,"dur":12000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039589000,"dur":3000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039589000,"dur":3000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039617000,"dur":14000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039631000,"dur":4000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039640000,"dur":3000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039643000,"dur":2000},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039645000,"dur":2000},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039647000,"dur":4000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039651000,"dur":2000},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039653000,"dur":100},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039653000,"dur":7000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039660000,"dur":100},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039660000,"dur":1000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039661000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039661000,"dur":26000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039687000,"dur":7000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039694000,"dur":7000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039702000,"dur":3000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039705000,"dur":100},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039635000,"dur":70000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039705000,"dur":7000},{"pid":1,"tid":2,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039713000,"dur":100},{"pid":1,"tid":2,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039713000,"dur":1000},{"pid":1,"tid":2,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039714000,"dur":100},{"pid":1,"tid":2,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039714000,"dur":100},{"pid":1,"tid":2,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039714000,"dur":100},{"pid":1,"tid":2,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039714000,"dur":100},{"pid":1,"tid":2,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039714000,"dur":3000},{"pid":1,"tid":2,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039718000,"dur":100},{"pid":1,"tid":2,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039718000,"dur":100},{"pid":1,"tid":2,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039718000,"dur":100},{"pid":1,"tid":2,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039718000,"dur":30000},{"pid":1,"tid":2,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039748000,"dur":1000},{"pid":1,"tid":2,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039749000,"dur":3000},{"pid":1,"tid":2,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039753000,"dur":1000},{"pid":1,"tid":2,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039754000,"dur":1000},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446039712000,"dur":43000},{"pid":1,"tid":2,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039755000,"dur":5000},{"pid":1,"tid":2,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039760000,"dur":10000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039616000,"dur":156000},{"pid":1,"tid":2,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039772000,"dur":12000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446039595000,"dur":189000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446039863000,"dur":2000},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446039875000,"dur":105000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446039982000,"dur":21000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446040005000,"dur":12000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446040018000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446040021000,"dur":38000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446040060000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446040065000,"dur":3000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446040069000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446040070000,"dur":1153000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446041224000,"dur":108000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446041333000,"dur":313000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446041648000,"dur":57000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446041711000,"dur":1352000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043064000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: test pre build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 93\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043065000,"dur":178000},{"pid":1,"tid":0,"id":62,"name":"task: aidl compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043248000,"dur":109000},{"pid":1,"tid":0,"id":63,"name":"task: process test manifest","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043359000,"dur":85000},{"pid":1,"tid":0,"id":64,"name":"task: renderscript compile","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043448000,"dur":34000},{"pid":1,"tid":0,"id":65,"name":"task: generate build config","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043484000,"dur":17000},{"pid":1,"tid":0,"id":66,"name":"task: generate res values","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043502000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043505000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: merge resources","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446043507000,"dur":2309000},{"pid":1,"tid":0,"id":69,"name":"task: splits discovery","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446045819000,"dur":19000},{"pid":1,"tid":0,"id":70,"name":"task: process android resources","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446045841000,"dur":929000},{"pid":1,"tid":0,"id":71,"name":"task: unknown task type","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446046771000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: mockable android jar","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446046772000,"dur":78000},{"pid":1,"tid":2,"id":73,"name":"base plugin build finished","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446046852000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-06-860.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-06-860.rawproto
new file mode 100644
index 00000000..ff1d39a4
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-06-860.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-58-871.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-58-871.json
new file mode 100644
index 00000000..53d29691
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-58-871.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080558000,"args":{"JVM stats":"heap_memory_usage: 270417784\nnon_heap_memory_usage: 114278328\nloaded_class_count: 13478\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080776000,"args":{"JVM stats":"heap_memory_usage: 285025488\nnon_heap_memory_usage: 115438832\nloaded_class_count: 13545\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080777000,"args":{"JVM stats":"heap_memory_usage: 285025488\nnon_heap_memory_usage: 115441352\nloaded_class_count: 13545\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080845000,"args":{"JVM stats":"heap_memory_usage: 292204880\nnon_heap_memory_usage: 115520800\nloaded_class_count: 13545\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080854000,"args":{"JVM stats":"heap_memory_usage: 292461152\nnon_heap_memory_usage: 115556944\nloaded_class_count: 13547\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080860000,"args":{"JVM stats":"heap_memory_usage: 292973592\nnon_heap_memory_usage: 115571936\nloaded_class_count: 13551\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080863000,"args":{"JVM stats":"heap_memory_usage: 292973592\nnon_heap_memory_usage: 115585392\nloaded_class_count: 13551\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080865000,"args":{"JVM stats":"heap_memory_usage: 293229744\nnon_heap_memory_usage: 115585904\nloaded_class_count: 13551\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080867000,"args":{"JVM stats":"heap_memory_usage: 293229744\nnon_heap_memory_usage: 115598000\nloaded_class_count: 13551\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080870000,"args":{"JVM stats":"heap_memory_usage: 293229744\nnon_heap_memory_usage: 115606240\nloaded_class_count: 13552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080870001,"args":{"JVM stats":"heap_memory_usage: 293229744\nnon_heap_memory_usage: 115610144\nloaded_class_count: 13552\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080915000,"args":{"JVM stats":"heap_memory_usage: 296817416\nnon_heap_memory_usage: 115663144\nloaded_class_count: 13555\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080917000,"args":{"JVM stats":"heap_memory_usage: 296817416\nnon_heap_memory_usage: 115663144\nloaded_class_count: 13555\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080964000,"args":{"JVM stats":"heap_memory_usage: 301999408\nnon_heap_memory_usage: 115678064\nloaded_class_count: 13560\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446080968000,"args":{"JVM stats":"heap_memory_usage: 302255560\nnon_heap_memory_usage: 115681960\nloaded_class_count: 13561\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446081537000,"args":{"JVM stats":"heap_memory_usage: 319329928\nnon_heap_memory_usage: 115833928\nloaded_class_count: 13564\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446081538000,"args":{"JVM stats":"heap_memory_usage: 319329928\nnon_heap_memory_usage: 115836872\nloaded_class_count: 13564\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446081569000,"args":{"JVM stats":"heap_memory_usage: 320615040\nnon_heap_memory_usage: 115877696\nloaded_class_count: 13565\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446083301000,"args":{"JVM stats":"heap_memory_usage: 130583336\nnon_heap_memory_usage: 126422768\nloaded_class_count: 14488\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 27\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446083313000,"args":{"JVM stats":"heap_memory_usage: 133056896\nnon_heap_memory_usage: 126454912\nloaded_class_count: 14488\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446083317000,"args":{"JVM stats":"heap_memory_usage: 133056896\nnon_heap_memory_usage: 126465368\nloaded_class_count: 14488\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446083318000,"args":{"JVM stats":"heap_memory_usage: 133056896\nnon_heap_memory_usage: 126465368\nloaded_class_count: 14488\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446083329000,"args":{"JVM stats":"heap_memory_usage: 134884088\nnon_heap_memory_usage: 126506256\nloaded_class_count: 14488\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446083683000,"args":{"JVM stats":"heap_memory_usage: 103692112\nnon_heap_memory_usage: 128348632\nloaded_class_count: 14729\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 31\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446083694000,"args":{"JVM stats":"heap_memory_usage: 105368744\nnon_heap_memory_usage: 128365528\nloaded_class_count: 14729\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446083713000,"args":{"JVM stats":"heap_memory_usage: 106169912\nnon_heap_memory_usage: 128486696\nloaded_class_count: 14750\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446084186000,"args":{"JVM stats":"heap_memory_usage: 113779312\nnon_heap_memory_usage: 127836064\nloaded_class_count: 14765\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446084213000,"args":{"JVM stats":"heap_memory_usage: 115122720\nnon_heap_memory_usage: 127869816\nloaded_class_count: 14768\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446084219000,"args":{"JVM stats":"heap_memory_usage: 115122720\nnon_heap_memory_usage: 127882312\nloaded_class_count: 14770\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446091889000,"args":{"JVM stats":"heap_memory_usage: 117532720\nnon_heap_memory_usage: 127939024\nloaded_class_count: 14770\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446091894000,"args":{"JVM stats":"heap_memory_usage: 117769856\nnon_heap_memory_usage: 127942320\nloaded_class_count: 14770\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446091987000,"args":{"JVM stats":"heap_memory_usage: 119000128\nnon_heap_memory_usage: 127751720\nloaded_class_count: 14770\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446091989000,"args":{"JVM stats":"heap_memory_usage: 119000128\nnon_heap_memory_usage: 127751752\nloaded_class_count: 14770\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092010000,"args":{"JVM stats":"heap_memory_usage: 120316368\nnon_heap_memory_usage: 127788888\nloaded_class_count: 14771\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092014000,"args":{"JVM stats":"heap_memory_usage: 120435512\nnon_heap_memory_usage: 127782600\nloaded_class_count: 14771\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092382000,"args":{"JVM stats":"heap_memory_usage: 139632416\nnon_heap_memory_usage: 129055688\nloaded_class_count: 14877\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092396000,"args":{"JVM stats":"heap_memory_usage: 139884224\nnon_heap_memory_usage: 129078512\nloaded_class_count: 14882\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092397000,"args":{"JVM stats":"heap_memory_usage: 139888336\nnon_heap_memory_usage: 129081648\nloaded_class_count: 14882\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092399000,"args":{"JVM stats":"heap_memory_usage: 140028120\nnon_heap_memory_usage: 129086024\nloaded_class_count: 14883\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092422000,"args":{"JVM stats":"heap_memory_usage: 140511632\nnon_heap_memory_usage: 129173256\nloaded_class_count: 14885\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092432000,"args":{"JVM stats":"heap_memory_usage: 140992704\nnon_heap_memory_usage: 129175784\nloaded_class_count: 14885\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446092860000,"args":{"JVM stats":"heap_memory_usage: 149675728\nnon_heap_memory_usage: 129351448\nloaded_class_count: 14889\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446094908000,"args":{"JVM stats":"heap_memory_usage: 276848480\nnon_heap_memory_usage: 135932336\nloaded_class_count: 15336\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446096690000,"args":{"JVM stats":"heap_memory_usage: 230040560\nnon_heap_memory_usage: 138831824\nloaded_class_count: 15474\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 70\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446096886000,"args":{"JVM stats":"heap_memory_usage: 295653800\nnon_heap_memory_usage: 139065352\nloaded_class_count: 15478\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446096894000,"args":{"JVM stats":"heap_memory_usage: 295838920\nnon_heap_memory_usage: 139079848\nloaded_class_count: 15481\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446097428000,"args":{"JVM stats":"heap_memory_usage: 327154336\nnon_heap_memory_usage: 140009176\nloaded_class_count: 15589\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446098313000,"args":{"JVM stats":"heap_memory_usage: 125399296\nnon_heap_memory_usage: 140030320\nloaded_class_count: 15593\nthread_count: 57\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 39\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446098326000,"args":{"JVM stats":"heap_memory_usage: 126683488\nnon_heap_memory_usage: 139942896\nloaded_class_count: 15593\nthread_count: 57\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446098742000,"args":{"JVM stats":"heap_memory_usage: 388303280\nnon_heap_memory_usage: 139750088\nloaded_class_count: 15597\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446098772000,"args":{"JVM stats":"heap_memory_usage: 389291392\nnon_heap_memory_usage: 139941456\nloaded_class_count: 15614\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446098775000,"args":{"JVM stats":"heap_memory_usage: 389291392\nnon_heap_memory_usage: 139941456\nloaded_class_count: 15614\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446098776000,"args":{"JVM stats":"heap_memory_usage: 389291392\nnon_heap_memory_usage: 139942736\nloaded_class_count: 15614\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446098871000,"args":{"JVM stats":"heap_memory_usage: 394194704\nnon_heap_memory_usage: 140563744\nloaded_class_count: 15775\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080559000,"dur":14000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080573000,"dur":9000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080582000,"dur":4000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080582000,"dur":4000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080594000,"dur":4000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080598000,"dur":1000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080601000,"dur":2000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080603000,"dur":100},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080603000,"dur":1000},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080604000,"dur":1000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080605000,"dur":100},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080605000,"dur":1000},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080606000,"dur":4000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080610000,"dur":100},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080610000,"dur":1000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080611000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080611000,"dur":43000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080655000,"dur":1000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080656000,"dur":38000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080696000,"dur":17000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080713000,"dur":1000},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446080599000,"dur":115000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080714000,"dur":8000},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080722000,"dur":8000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080594000,"dur":137000},{"pid":1,"tid":2,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080732000,"dur":5000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446080589000,"dur":148000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446080773000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080777000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080777000,"dur":68000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080846000,"dur":8000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080856000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080861000,"dur":2000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080864000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080866000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080868000,"dur":2000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080870000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080871000,"dur":44000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080916000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446080919000,"dur":45000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446080966000,"dur":2000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446080970000,"dur":566000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446081537000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446081538000,"dur":30000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446081570000,"dur":1731000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446083302000,"dur":11000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446083314000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446083318000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446083319000,"dur":10000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446083330000,"dur":353000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446083683000,"dur":11000},{"pid":1,"tid":3,"id":54,"name":"transform prep: extract jars","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 2\nis_incremental: false\n"},"ph":"X","ts":1518446083703000,"dur":1000},{"pid":1,"tid":3,"id":55,"name":"transform: extract jars","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 2\nis_incremental: false\n"},"ph":"X","ts":1518446083704000,"dur":7000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446083695000,"dur":17000},{"pid":1,"tid":3,"id":57,"name":"transform prep: instant run verifier","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: false\n"},"ph":"X","ts":1518446083723000,"dur":7000},{"pid":1,"tid":3,"id":58,"name":"transform: instant run verifier","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: false\n"},"ph":"X","ts":1518446083730000,"dur":351000},{"pid":1,"tid":0,"id":56,"name":"task: transform","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446083714000,"dur":472000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446084188000,"dur":25000},{"pid":1,"tid":0,"id":60,"name":"task: external native build json","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446084214000,"dur":5000},{"pid":1,"tid":0,"id":61,"name":"task: external native build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446084219000,"dur":7670000},{"pid":1,"tid":0,"id":62,"name":"task: merge source set folders","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446091890000,"dur":4000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446091896000,"dur":91000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446091988000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446091991000,"dur":19000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446092011000,"dur":2000},{"pid":1,"tid":3,"id":68,"name":"transform prep: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: false\n"},"ph":"X","ts":1518446092039000,"dur":15000},{"pid":1,"tid":3,"id":69,"name":"transform: instant run","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: false\n"},"ph":"X","ts":1518446092054000,"dur":245000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446092014000,"dur":368000},{"pid":1,"tid":3,"id":71,"name":"transform prep: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518446092395000,"dur":100},{"pid":1,"tid":3,"id":72,"name":"transform: instant run dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518446092395000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446092385000,"dur":11000},{"pid":1,"tid":0,"id":73,"name":"task: unknown task type","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446092396000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: pre cold swap","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446092397000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: fast deploy runtime extractor","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446092401000,"dur":21000},{"pid":1,"tid":0,"id":76,"name":"task: generate instant run app info","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446092424000,"dur":8000},{"pid":1,"tid":4,"id":78,"name":"transform prep: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: false\n"},"ph":"X","ts":1518446092444000,"dur":2000},{"pid":1,"tid":4,"id":79,"name":"transform: instant run slicer","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: false\n"},"ph":"X","ts":1518446092446000,"dur":327000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446092433000,"dur":427000},{"pid":1,"tid":4,"id":81,"name":"transform prep: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518446092917000,"dur":4000},{"pid":1,"tid":4,"id":82,"name":"transform: dex archive builder","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518446092921000,"dur":1879000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446092861000,"dur":2047000},{"pid":1,"tid":4,"id":84,"name":"transform prep: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518446094928000,"dur":2000},{"pid":1,"tid":4,"id":85,"name":"transform: external libs merger","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518446094930000,"dur":1746000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446094911000,"dur":1779000},{"pid":1,"tid":4,"id":87,"name":"transform prep: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518446096718000,"dur":5000},{"pid":1,"tid":4,"id":88,"name":"transform: dex merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518446096723000,"dur":131000},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446096691000,"dur":195000},{"pid":1,"tid":0,"id":89,"name":"task: validate signing","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446096887000,"dur":6000},{"pid":1,"tid":4,"id":91,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1518446096904000,"dur":3000},{"pid":1,"tid":4,"id":92,"name":"transform: instant run dependencies apk builder","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1518446096907000,"dur":516000},{"pid":1,"tid":0,"id":90,"name":"task: transform","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446096895000,"dur":533000},{"pid":1,"tid":4,"id":94,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1518446097436000,"dur":2000},{"pid":1,"tid":4,"id":95,"name":"transform: instant run slice split apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1518446097438000,"dur":873000},{"pid":1,"tid":0,"id":93,"name":"task: transform","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446097429000,"dur":884000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446098313000,"dur":13000},{"pid":1,"tid":0,"id":97,"name":"task: package application","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446098328000,"dur":413000},{"pid":1,"tid":0,"id":98,"name":"task: build info writer","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446098743000,"dur":29000},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446098774000,"dur":100},{"pid":1,"tid":0,"id":100,"name":"task: unknown task type","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446098775000,"dur":1000},{"pid":1,"tid":2,"id":101,"name":"base plugin build finished","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 75141\n apk_size: 1855615\n resources_ap_size: 358086\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446098858000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-58-871.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-58-871.rawproto
new file mode 100644
index 00000000..641145f8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-34-58-871.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-36-04-504.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-36-04-504.json
new file mode 100644
index 00000000..bafd22ce
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-36-04-504.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162404000,"args":{"JVM stats":"heap_memory_usage: 237338856\nnon_heap_memory_usage: 143568048\nloaded_class_count: 15853\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162573000,"args":{"JVM stats":"heap_memory_usage: 248583544\nnon_heap_memory_usage: 144091176\nloaded_class_count: 15881\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162573001,"args":{"JVM stats":"heap_memory_usage: 248583544\nnon_heap_memory_usage: 144103272\nloaded_class_count: 15881\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162641000,"args":{"JVM stats":"heap_memory_usage: 255430336\nnon_heap_memory_usage: 144195536\nloaded_class_count: 15881\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162652000,"args":{"JVM stats":"heap_memory_usage: 256000608\nnon_heap_memory_usage: 144210728\nloaded_class_count: 15882\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162658000,"args":{"JVM stats":"heap_memory_usage: 256000608\nnon_heap_memory_usage: 144226552\nloaded_class_count: 15882\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162659000,"args":{"JVM stats":"heap_memory_usage: 256190544\nnon_heap_memory_usage: 144227024\nloaded_class_count: 15882\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162663000,"args":{"JVM stats":"heap_memory_usage: 256190544\nnon_heap_memory_usage: 144240336\nloaded_class_count: 15882\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162666000,"args":{"JVM stats":"heap_memory_usage: 256190544\nnon_heap_memory_usage: 144244456\nloaded_class_count: 15883\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162668000,"args":{"JVM stats":"heap_memory_usage: 256190544\nnon_heap_memory_usage: 144254088\nloaded_class_count: 15883\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162668001,"args":{"JVM stats":"heap_memory_usage: 256190544\nnon_heap_memory_usage: 144255920\nloaded_class_count: 15883\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162731000,"args":{"JVM stats":"heap_memory_usage: 259991968\nnon_heap_memory_usage: 144283544\nloaded_class_count: 15883\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162734000,"args":{"JVM stats":"heap_memory_usage: 259991968\nnon_heap_memory_usage: 144285904\nloaded_class_count: 15884\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162743000,"args":{"JVM stats":"heap_memory_usage: 260181960\nnon_heap_memory_usage: 144297296\nloaded_class_count: 15886\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162745000,"args":{"JVM stats":"heap_memory_usage: 260181960\nnon_heap_memory_usage: 144297328\nloaded_class_count: 15886\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162757000,"args":{"JVM stats":"heap_memory_usage: 261322104\nnon_heap_memory_usage: 144298472\nloaded_class_count: 15886\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162758000,"args":{"JVM stats":"heap_memory_usage: 261322104\nnon_heap_memory_usage: 144298472\nloaded_class_count: 15886\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446162800000,"args":{"JVM stats":"heap_memory_usage: 261892160\nnon_heap_memory_usage: 144326200\nloaded_class_count: 15886\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163062000,"args":{"JVM stats":"heap_memory_usage: 280114912\nnon_heap_memory_usage: 145250256\nloaded_class_count: 15890\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163071000,"args":{"JVM stats":"heap_memory_usage: 280308960\nnon_heap_memory_usage: 145264192\nloaded_class_count: 15892\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163073000,"args":{"JVM stats":"heap_memory_usage: 280309024\nnon_heap_memory_usage: 145278656\nloaded_class_count: 15892\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163074000,"args":{"JVM stats":"heap_memory_usage: 280499008\nnon_heap_memory_usage: 145270272\nloaded_class_count: 15892\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163082000,"args":{"JVM stats":"heap_memory_usage: 281260112\nnon_heap_memory_usage: 145294296\nloaded_class_count: 15896\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163088000,"args":{"JVM stats":"heap_memory_usage: 281450096\nnon_heap_memory_usage: 145301208\nloaded_class_count: 15896\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163094000,"args":{"JVM stats":"heap_memory_usage: 281640080\nnon_heap_memory_usage: 145306088\nloaded_class_count: 15896\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163097000,"args":{"JVM stats":"heap_memory_usage: 281830040\nnon_heap_memory_usage: 145306088\nloaded_class_count: 15896\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163151000,"args":{"JVM stats":"heap_memory_usage: 283360464\nnon_heap_memory_usage: 145525216\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163174000,"args":{"JVM stats":"heap_memory_usage: 284698992\nnon_heap_memory_usage: 145552152\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163175000,"args":{"JVM stats":"heap_memory_usage: 284698992\nnon_heap_memory_usage: 145555208\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163259000,"args":{"JVM stats":"heap_memory_usage: 285653912\nnon_heap_memory_usage: 145596216\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163263000,"args":{"JVM stats":"heap_memory_usage: 285844120\nnon_heap_memory_usage: 145596344\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163277000,"args":{"JVM stats":"heap_memory_usage: 286414040\nnon_heap_memory_usage: 145601424\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163279000,"args":{"JVM stats":"heap_memory_usage: 286414040\nnon_heap_memory_usage: 145609920\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163292000,"args":{"JVM stats":"heap_memory_usage: 286984576\nnon_heap_memory_usage: 145612080\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163295000,"args":{"JVM stats":"heap_memory_usage: 286984576\nnon_heap_memory_usage: 145614152\nloaded_class_count: 15921\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163584000,"args":{"JVM stats":"heap_memory_usage: 293389336\nnon_heap_memory_usage: 145775920\nloaded_class_count: 15925\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163591000,"args":{"JVM stats":"heap_memory_usage: 293769256\nnon_heap_memory_usage: 145711280\nloaded_class_count: 15925\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163591001,"args":{"JVM stats":"heap_memory_usage: 293769256\nnon_heap_memory_usage: 145698928\nloaded_class_count: 15925\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163592000,"args":{"JVM stats":"heap_memory_usage: 293769256\nnon_heap_memory_usage: 145688304\nloaded_class_count: 15925\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163594000,"args":{"JVM stats":"heap_memory_usage: 293992168\nnon_heap_memory_usage: 145678768\nloaded_class_count: 15925\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163597000,"args":{"JVM stats":"heap_memory_usage: 293992168\nnon_heap_memory_usage: 145676144\nloaded_class_count: 15925\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446163644000,"args":{"JVM stats":"heap_memory_usage: 295322240\nnon_heap_memory_usage: 145650520\nloaded_class_count: 15926\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164017000,"args":{"JVM stats":"heap_memory_usage: 337133824\nnon_heap_memory_usage: 146521040\nloaded_class_count: 15928\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164047000,"args":{"JVM stats":"heap_memory_usage: 338318616\nnon_heap_memory_usage: 146553184\nloaded_class_count: 15929\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164124000,"args":{"JVM stats":"heap_memory_usage: 344992320\nnon_heap_memory_usage: 146655304\nloaded_class_count: 15930\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164126000,"args":{"JVM stats":"heap_memory_usage: 345381504\nnon_heap_memory_usage: 146658336\nloaded_class_count: 15930\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164140000,"args":{"JVM stats":"heap_memory_usage: 345762472\nnon_heap_memory_usage: 146670368\nloaded_class_count: 15930\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164433000,"args":{"JVM stats":"heap_memory_usage: 360974392\nnon_heap_memory_usage: 146870416\nloaded_class_count: 15981\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164441000,"args":{"JVM stats":"heap_memory_usage: 361358408\nnon_heap_memory_usage: 146796496\nloaded_class_count: 15981\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164473000,"args":{"JVM stats":"heap_memory_usage: 361738280\nnon_heap_memory_usage: 146758408\nloaded_class_count: 15981\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164476000,"args":{"JVM stats":"heap_memory_usage: 361929256\nnon_heap_memory_usage: 146764616\nloaded_class_count: 15981\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164477000,"args":{"JVM stats":"heap_memory_usage: 361929256\nnon_heap_memory_usage: 146773072\nloaded_class_count: 15981\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164477001,"args":{"JVM stats":"heap_memory_usage: 361929256\nnon_heap_memory_usage: 146775872\nloaded_class_count: 15981\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446164504000,"args":{"JVM stats":"heap_memory_usage: 363172560\nnon_heap_memory_usage: 146795048\nloaded_class_count: 15981\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162404000,"dur":5000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162409000,"dur":11000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162420000,"dur":2000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162420000,"dur":2000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162431000,"dur":5000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162436000,"dur":1000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162438000,"dur":100},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162439000,"dur":100},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162439000,"dur":100},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162439000,"dur":1000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162440000,"dur":100},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162440000,"dur":1000},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162441000,"dur":6000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162447000,"dur":100},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162447000,"dur":1000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162448000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162448000,"dur":34000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162482000,"dur":2000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162484000,"dur":8000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162494000,"dur":4000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162498000,"dur":1000},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446162437000,"dur":62000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162499000,"dur":7000},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162506000,"dur":17000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162431000,"dur":95000},{"pid":1,"tid":2,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162526000,"dur":8000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446162424000,"dur":110000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446162569000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162573000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162574000,"dur":67000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162643000,"dur":9000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162653000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162658000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162660000,"dur":3000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162663000,"dur":2000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162667000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162668000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162669000,"dur":62000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162732000,"dur":2000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162735000,"dur":7000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162744000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162747000,"dur":10000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446162758000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446162758000,"dur":42000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446162802000,"dur":260000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163064000,"dur":7000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163072000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163074000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163076000,"dur":6000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163083000,"dur":5000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163089000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163094000,"dur":2000},{"pid":1,"tid":5,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446163113000,"dur":9000},{"pid":1,"tid":5,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446163124000,"dur":17000},{"pid":1,"tid":5,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446163122000,"dur":20000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163097000,"dur":54000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163152000,"dur":21000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163174000,"dur":1000},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163176000,"dur":83000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163259000,"dur":4000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163264000,"dur":13000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163278000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163280000,"dur":12000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163293000,"dur":2000},{"pid":1,"tid":6,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446163326000,"dur":11000},{"pid":1,"tid":6,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446163337000,"dur":237000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163296000,"dur":287000},{"pid":1,"tid":6,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518446163589000,"dur":100},{"pid":1,"tid":6,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518446163589000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163585000,"dur":5000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163591000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163592000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163593000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446163595000,"dur":2000},{"pid":1,"tid":6,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446163620000,"dur":1000},{"pid":1,"tid":6,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446163621000,"dur":8000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163598000,"dur":46000},{"pid":1,"tid":7,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446163680000,"dur":3000},{"pid":1,"tid":7,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446163683000,"dur":304000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446163645000,"dur":372000},{"pid":1,"tid":7,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446164039000,"dur":3000},{"pid":1,"tid":7,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446164042000,"dur":3000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446164018000,"dur":29000},{"pid":1,"tid":7,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446164069000,"dur":4000},{"pid":1,"tid":7,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446164073000,"dur":47000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446164049000,"dur":75000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446164125000,"dur":1000},{"pid":1,"tid":7,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446164133000,"dur":2000},{"pid":1,"tid":7,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446164135000,"dur":3000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446164128000,"dur":12000},{"pid":1,"tid":7,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446164145000,"dur":2000},{"pid":1,"tid":7,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446164147000,"dur":283000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446164140000,"dur":293000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446164434000,"dur":7000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446164442000,"dur":31000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446164473000,"dur":3000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446164476000,"dur":1000},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446164477000,"dur":100},{"pid":1,"tid":2,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446164489000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-36-04-504.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-36-04-504.rawproto
new file mode 100644
index 00000000..9560cc43
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-36-04-504.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-38-09-995.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-38-09-995.json
new file mode 100644
index 00000000..2fa0f7af
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-38-09-995.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288170000,"args":{"JVM stats":"heap_memory_usage: 420134224\nnon_heap_memory_usage: 147005488\nloaded_class_count: 16000\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288352000,"args":{"JVM stats":"heap_memory_usage: 431561264\nnon_heap_memory_usage: 147302368\nloaded_class_count: 16000\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288353000,"args":{"JVM stats":"heap_memory_usage: 431561264\nnon_heap_memory_usage: 147305184\nloaded_class_count: 16000\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288478000,"args":{"JVM stats":"heap_memory_usage: 108568328\nnon_heap_memory_usage: 147367128\nloaded_class_count: 16001\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 54\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288485000,"args":{"JVM stats":"heap_memory_usage: 108915808\nnon_heap_memory_usage: 147389848\nloaded_class_count: 16001\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288489000,"args":{"JVM stats":"heap_memory_usage: 109039384\nnon_heap_memory_usage: 147403032\nloaded_class_count: 16001\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288491000,"args":{"JVM stats":"heap_memory_usage: 109162960\nnon_heap_memory_usage: 147407400\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288493000,"args":{"JVM stats":"heap_memory_usage: 109162960\nnon_heap_memory_usage: 147409000\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288494000,"args":{"JVM stats":"heap_memory_usage: 109286568\nnon_heap_memory_usage: 147406472\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288495000,"args":{"JVM stats":"heap_memory_usage: 109286568\nnon_heap_memory_usage: 147423232\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288496000,"args":{"JVM stats":"heap_memory_usage: 109286568\nnon_heap_memory_usage: 147418240\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288552000,"args":{"JVM stats":"heap_memory_usage: 112843008\nnon_heap_memory_usage: 147161832\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288556000,"args":{"JVM stats":"heap_memory_usage: 112855104\nnon_heap_memory_usage: 147171048\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288560000,"args":{"JVM stats":"heap_memory_usage: 113194560\nnon_heap_memory_usage: 147205040\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288562000,"args":{"JVM stats":"heap_memory_usage: 113194560\nnon_heap_memory_usage: 147205040\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288572000,"args":{"JVM stats":"heap_memory_usage: 114689600\nnon_heap_memory_usage: 147226416\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288572001,"args":{"JVM stats":"heap_memory_usage: 114813208\nnon_heap_memory_usage: 147226416\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288599000,"args":{"JVM stats":"heap_memory_usage: 115432728\nnon_heap_memory_usage: 147255896\nloaded_class_count: 16002\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288797000,"args":{"JVM stats":"heap_memory_usage: 132485312\nnon_heap_memory_usage: 148266288\nloaded_class_count: 16004\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288801000,"args":{"JVM stats":"heap_memory_usage: 132701144\nnon_heap_memory_usage: 148271080\nloaded_class_count: 16004\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288803000,"args":{"JVM stats":"heap_memory_usage: 132797408\nnon_heap_memory_usage: 148275800\nloaded_class_count: 16004\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288804000,"args":{"JVM stats":"heap_memory_usage: 132921096\nnon_heap_memory_usage: 148275800\nloaded_class_count: 16004\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288810000,"args":{"JVM stats":"heap_memory_usage: 133336360\nnon_heap_memory_usage: 148294896\nloaded_class_count: 16006\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288814000,"args":{"JVM stats":"heap_memory_usage: 133583808\nnon_heap_memory_usage: 148328744\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288821000,"args":{"JVM stats":"heap_memory_usage: 133856072\nnon_heap_memory_usage: 148333576\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288823000,"args":{"JVM stats":"heap_memory_usage: 133856072\nnon_heap_memory_usage: 148355784\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288856000,"args":{"JVM stats":"heap_memory_usage: 135315208\nnon_heap_memory_usage: 148443208\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288877000,"args":{"JVM stats":"heap_memory_usage: 136228392\nnon_heap_memory_usage: 148488200\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288878000,"args":{"JVM stats":"heap_memory_usage: 136228392\nnon_heap_memory_usage: 148491480\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288942000,"args":{"JVM stats":"heap_memory_usage: 137336240\nnon_heap_memory_usage: 148522896\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288946000,"args":{"JVM stats":"heap_memory_usage: 137336240\nnon_heap_memory_usage: 148524512\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288956000,"args":{"JVM stats":"heap_memory_usage: 138333816\nnon_heap_memory_usage: 148542840\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288957000,"args":{"JVM stats":"heap_memory_usage: 138333816\nnon_heap_memory_usage: 148543544\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288966000,"args":{"JVM stats":"heap_memory_usage: 139142024\nnon_heap_memory_usage: 148544440\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446288968000,"args":{"JVM stats":"heap_memory_usage: 139265600\nnon_heap_memory_usage: 148546344\nloaded_class_count: 16012\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289034000,"args":{"JVM stats":"heap_memory_usage: 146920928\nnon_heap_memory_usage: 148679328\nloaded_class_count: 16012\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289039000,"args":{"JVM stats":"heap_memory_usage: 147289216\nnon_heap_memory_usage: 148544424\nloaded_class_count: 16012\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289040000,"args":{"JVM stats":"heap_memory_usage: 147381336\nnon_heap_memory_usage: 148545768\nloaded_class_count: 16012\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289041000,"args":{"JVM stats":"heap_memory_usage: 147381336\nnon_heap_memory_usage: 148545768\nloaded_class_count: 16012\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289043000,"args":{"JVM stats":"heap_memory_usage: 147473456\nnon_heap_memory_usage: 148312864\nloaded_class_count: 16013\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289046000,"args":{"JVM stats":"heap_memory_usage: 147597136\nnon_heap_memory_usage: 148317016\nloaded_class_count: 16014\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289089000,"args":{"JVM stats":"heap_memory_usage: 149374792\nnon_heap_memory_usage: 148508520\nloaded_class_count: 16015\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289328000,"args":{"JVM stats":"heap_memory_usage: 195556928\nnon_heap_memory_usage: 149347384\nloaded_class_count: 16015\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289342000,"args":{"JVM stats":"heap_memory_usage: 196719528\nnon_heap_memory_usage: 149378056\nloaded_class_count: 16015\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289390000,"args":{"JVM stats":"heap_memory_usage: 203711936\nnon_heap_memory_usage: 149401952\nloaded_class_count: 16015\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289393000,"args":{"JVM stats":"heap_memory_usage: 203940408\nnon_heap_memory_usage: 149407936\nloaded_class_count: 16015\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289401000,"args":{"JVM stats":"heap_memory_usage: 204401616\nnon_heap_memory_usage: 149414088\nloaded_class_count: 16015\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289963000,"args":{"JVM stats":"heap_memory_usage: 217483728\nnon_heap_memory_usage: 149593896\nloaded_class_count: 16015\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289966000,"args":{"JVM stats":"heap_memory_usage: 217764200\nnon_heap_memory_usage: 149584720\nloaded_class_count: 16015\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289975000,"args":{"JVM stats":"heap_memory_usage: 218132824\nnon_heap_memory_usage: 149560832\nloaded_class_count: 16015\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289977000,"args":{"JVM stats":"heap_memory_usage: 218332296\nnon_heap_memory_usage: 149559288\nloaded_class_count: 16015\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289978000,"args":{"JVM stats":"heap_memory_usage: 218332296\nnon_heap_memory_usage: 149560824\nloaded_class_count: 16015\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289978001,"args":{"JVM stats":"heap_memory_usage: 218332296\nnon_heap_memory_usage: 149562552\nloaded_class_count: 16015\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446289996000,"args":{"JVM stats":"heap_memory_usage: 219093560\nnon_heap_memory_usage: 149563440\nloaded_class_count: 16015\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":8,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288170000,"dur":11000},{"pid":1,"tid":8,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288181000,"dur":13000},{"pid":1,"tid":8,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288194000,"dur":2000},{"pid":1,"tid":8,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288194000,"dur":2000},{"pid":1,"tid":8,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288212000,"dur":4000},{"pid":1,"tid":8,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288216000,"dur":100},{"pid":1,"tid":8,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288218000,"dur":1000},{"pid":1,"tid":8,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288219000,"dur":1000},{"pid":1,"tid":8,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288220000,"dur":1000},{"pid":1,"tid":8,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288221000,"dur":4000},{"pid":1,"tid":8,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288225000,"dur":100},{"pid":1,"tid":8,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288225000,"dur":1000},{"pid":1,"tid":8,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288226000,"dur":5000},{"pid":1,"tid":8,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288231000,"dur":100},{"pid":1,"tid":8,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288231000,"dur":1000},{"pid":1,"tid":8,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288232000,"dur":100},{"pid":1,"tid":8,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288232000,"dur":47000},{"pid":1,"tid":8,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288279000,"dur":1000},{"pid":1,"tid":8,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288280000,"dur":7000},{"pid":1,"tid":8,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288290000,"dur":5000},{"pid":1,"tid":8,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288295000,"dur":1000},{"pid":1,"tid":8,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288216000,"dur":80000},{"pid":1,"tid":8,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288296000,"dur":3000},{"pid":1,"tid":8,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288299000,"dur":14000},{"pid":1,"tid":8,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288211000,"dur":103000},{"pid":1,"tid":8,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288314000,"dur":8000},{"pid":1,"tid":8,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446288206000,"dur":116000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446288349000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288353000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288354000,"dur":124000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288479000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288486000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288490000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288492000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288493000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288494000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288495000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288497000,"dur":54000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288553000,"dur":3000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288557000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288561000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288563000,"dur":8000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446288572000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288573000,"dur":26000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446288600000,"dur":197000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288798000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288801000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288804000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288805000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288810000,"dur":4000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446288814000,"dur":7000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288821000,"dur":2000},{"pid":1,"tid":9,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446288833000,"dur":1000},{"pid":1,"tid":9,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288834000,"dur":3000},{"pid":1,"tid":9,"id":58,"name":"task file verification","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288838000,"dur":1000},{"pid":1,"tid":9,"id":59,"name":"task file verification","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288841000,"dur":100},{"pid":1,"tid":9,"id":60,"name":"task file verification","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288843000,"dur":2000},{"pid":1,"tid":9,"id":61,"name":"task file verification","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446288846000,"dur":1000},{"pid":1,"tid":9,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446288834000,"dur":14000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446288824000,"dur":32000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288856000,"dur":21000},{"pid":1,"tid":0,"id":63,"name":"task: external native build json","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288877000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: external native build","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446288879000,"dur":63000},{"pid":1,"tid":0,"id":65,"name":"task: merge source set folders","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288942000,"dur":4000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288946000,"dur":10000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446288957000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288958000,"dur":8000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446288966000,"dur":1000},{"pid":1,"tid":9,"id":71,"name":"transform prep: instant run","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446288982000,"dur":7000},{"pid":1,"tid":9,"id":72,"name":"transform: instant run","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446288989000,"dur":38000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446288968000,"dur":66000},{"pid":1,"tid":9,"id":74,"name":"transform prep: instant run dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446289038000,"dur":100},{"pid":1,"tid":9,"id":75,"name":"transform: instant run dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446289038000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289035000,"dur":4000},{"pid":1,"tid":0,"id":76,"name":"task: unknown task type","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289040000,"dur":100},{"pid":1,"tid":0,"id":77,"name":"task: pre cold swap","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289040000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: fast deploy runtime extractor","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446289041000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: generate instant run app info","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446289044000,"dur":2000},{"pid":1,"tid":9,"id":81,"name":"transform prep: instant run slicer","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446289064000,"dur":2000},{"pid":1,"tid":9,"id":82,"name":"transform: instant run slicer","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446289066000,"dur":12000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289047000,"dur":42000},{"pid":1,"tid":9,"id":84,"name":"transform prep: dex archive builder","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446289116000,"dur":2000},{"pid":1,"tid":9,"id":85,"name":"transform: dex archive builder","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446289118000,"dur":196000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289090000,"dur":237000},{"pid":1,"tid":10,"id":87,"name":"transform prep: external libs merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446289338000,"dur":1000},{"pid":1,"tid":10,"id":88,"name":"transform: external libs merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446289340000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289329000,"dur":12000},{"pid":1,"tid":10,"id":90,"name":"transform prep: dex merger","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446289359000,"dur":2000},{"pid":1,"tid":10,"id":91,"name":"transform: dex merger","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446289361000,"dur":23000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289342000,"dur":48000},{"pid":1,"tid":0,"id":92,"name":"task: validate signing","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289391000,"dur":2000},{"pid":1,"tid":11,"id":94,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446289398000,"dur":1000},{"pid":1,"tid":11,"id":95,"name":"transform: instant run dependencies apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446289399000,"dur":1000},{"pid":1,"tid":0,"id":93,"name":"task: transform","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289394000,"dur":7000},{"pid":1,"tid":11,"id":97,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446289406000,"dur":1000},{"pid":1,"tid":11,"id":98,"name":"transform: instant run slice split apk builder","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446289407000,"dur":555000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289401000,"dur":562000},{"pid":1,"tid":0,"id":99,"name":"task: transform","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446289964000,"dur":2000},{"pid":1,"tid":0,"id":100,"name":"task: package application","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446289967000,"dur":8000},{"pid":1,"tid":0,"id":101,"name":"task: build info writer","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289976000,"dur":1000},{"pid":1,"tid":0,"id":102,"name":"task: unknown task type","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289977000,"dur":1000},{"pid":1,"tid":0,"id":103,"name":"task: unknown task type","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446289978000,"dur":100},{"pid":1,"tid":8,"id":104,"name":"base plugin build finished","args":{"span_id":"104","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446289984000,"dur":2000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-38-09-995.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-38-09-995.rawproto
new file mode 100644
index 00000000..a6e00f67
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-38-09-995.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-40-33-944.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-40-33-944.json
new file mode 100644
index 00000000..61a693ea
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-40-33-944.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431695000,"args":{"JVM stats":"heap_memory_usage: 277995152\nnon_heap_memory_usage: 150517976\nloaded_class_count: 16040\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431814000,"args":{"JVM stats":"heap_memory_usage: 289607360\nnon_heap_memory_usage: 150697464\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431815000,"args":{"JVM stats":"heap_memory_usage: 289607360\nnon_heap_memory_usage: 150710560\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431867000,"args":{"JVM stats":"heap_memory_usage: 296472480\nnon_heap_memory_usage: 150806656\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431874000,"args":{"JVM stats":"heap_memory_usage: 296656760\nnon_heap_memory_usage: 150811136\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431878000,"args":{"JVM stats":"heap_memory_usage: 297025280\nnon_heap_memory_usage: 150816064\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431880000,"args":{"JVM stats":"heap_memory_usage: 297025280\nnon_heap_memory_usage: 150816096\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431882000,"args":{"JVM stats":"heap_memory_usage: 297025280\nnon_heap_memory_usage: 150817720\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431884000,"args":{"JVM stats":"heap_memory_usage: 297209560\nnon_heap_memory_usage: 150819832\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431885000,"args":{"JVM stats":"heap_memory_usage: 297209560\nnon_heap_memory_usage: 150819832\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431887000,"args":{"JVM stats":"heap_memory_usage: 297209560\nnon_heap_memory_usage: 150824336\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431925000,"args":{"JVM stats":"heap_memory_usage: 300896944\nnon_heap_memory_usage: 150903928\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431926000,"args":{"JVM stats":"heap_memory_usage: 300896944\nnon_heap_memory_usage: 150904760\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431930000,"args":{"JVM stats":"heap_memory_usage: 301082232\nnon_heap_memory_usage: 150927096\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431931000,"args":{"JVM stats":"heap_memory_usage: 301266480\nnon_heap_memory_usage: 150931352\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431938000,"args":{"JVM stats":"heap_memory_usage: 302557096\nnon_heap_memory_usage: 150945424\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431939000,"args":{"JVM stats":"heap_memory_usage: 302557096\nnon_heap_memory_usage: 150945424\nloaded_class_count: 16063\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446431965000,"args":{"JVM stats":"heap_memory_usage: 303310992\nnon_heap_memory_usage: 150974720\nloaded_class_count: 16064\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432413000,"args":{"JVM stats":"heap_memory_usage: 343123640\nnon_heap_memory_usage: 152450336\nloaded_class_count: 16068\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432417000,"args":{"JVM stats":"heap_memory_usage: 343123640\nnon_heap_memory_usage: 152460408\nloaded_class_count: 16068\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432419000,"args":{"JVM stats":"heap_memory_usage: 343307888\nnon_heap_memory_usage: 152462768\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432420000,"args":{"JVM stats":"heap_memory_usage: 343307888\nnon_heap_memory_usage: 152465672\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432424000,"args":{"JVM stats":"heap_memory_usage: 343677744\nnon_heap_memory_usage: 152487248\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432429000,"args":{"JVM stats":"heap_memory_usage: 343862016\nnon_heap_memory_usage: 152512272\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432435000,"args":{"JVM stats":"heap_memory_usage: 344272064\nnon_heap_memory_usage: 152512272\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432436000,"args":{"JVM stats":"heap_memory_usage: 344272064\nnon_heap_memory_usage: 152514520\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432464000,"args":{"JVM stats":"heap_memory_usage: 345378480\nnon_heap_memory_usage: 152586576\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432484000,"args":{"JVM stats":"heap_memory_usage: 346684880\nnon_heap_memory_usage: 152586576\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432486000,"args":{"JVM stats":"heap_memory_usage: 346684880\nnon_heap_memory_usage: 152586576\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432559000,"args":{"JVM stats":"heap_memory_usage: 347791264\nnon_heap_memory_usage: 152627176\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432563000,"args":{"JVM stats":"heap_memory_usage: 347791264\nnon_heap_memory_usage: 152627176\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432576000,"args":{"JVM stats":"heap_memory_usage: 348529384\nnon_heap_memory_usage: 152645272\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432577000,"args":{"JVM stats":"heap_memory_usage: 348529384\nnon_heap_memory_usage: 152649872\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432589000,"args":{"JVM stats":"heap_memory_usage: 349635072\nnon_heap_memory_usage: 152654392\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432591000,"args":{"JVM stats":"heap_memory_usage: 349819320\nnon_heap_memory_usage: 152661344\nloaded_class_count: 16069\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432674000,"args":{"JVM stats":"heap_memory_usage: 357743120\nnon_heap_memory_usage: 152793472\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432680000,"args":{"JVM stats":"heap_memory_usage: 358111664\nnon_heap_memory_usage: 152796672\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432681000,"args":{"JVM stats":"heap_memory_usage: 358111664\nnon_heap_memory_usage: 152797952\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432683000,"args":{"JVM stats":"heap_memory_usage: 358295912\nnon_heap_memory_usage: 152792576\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432686000,"args":{"JVM stats":"heap_memory_usage: 358480160\nnon_heap_memory_usage: 152792800\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432690000,"args":{"JVM stats":"heap_memory_usage: 358480160\nnon_heap_memory_usage: 152796688\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446432745000,"args":{"JVM stats":"heap_memory_usage: 360150296\nnon_heap_memory_usage: 152712392\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433019000,"args":{"JVM stats":"heap_memory_usage: 406821216\nnon_heap_memory_usage: 153373792\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433039000,"args":{"JVM stats":"heap_memory_usage: 408148328\nnon_heap_memory_usage: 153442888\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433088000,"args":{"JVM stats":"heap_memory_usage: 415665576\nnon_heap_memory_usage: 153494992\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433091000,"args":{"JVM stats":"heap_memory_usage: 415849824\nnon_heap_memory_usage: 153494992\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433101000,"args":{"JVM stats":"heap_memory_usage: 416218536\nnon_heap_memory_usage: 153595920\nloaded_class_count: 16069\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433913000,"args":{"JVM stats":"heap_memory_usage: 118715512\nnon_heap_memory_usage: 153818784\nloaded_class_count: 16071\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 46\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433918000,"args":{"JVM stats":"heap_memory_usage: 119829032\nnon_heap_memory_usage: 153799648\nloaded_class_count: 16071\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433927000,"args":{"JVM stats":"heap_memory_usage: 120675920\nnon_heap_memory_usage: 153766928\nloaded_class_count: 16093\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433930000,"args":{"JVM stats":"heap_memory_usage: 120675920\nnon_heap_memory_usage: 153777296\nloaded_class_count: 16093\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433931000,"args":{"JVM stats":"heap_memory_usage: 120675920\nnon_heap_memory_usage: 153771920\nloaded_class_count: 16093\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433931001,"args":{"JVM stats":"heap_memory_usage: 120675920\nnon_heap_memory_usage: 153780136\nloaded_class_count: 16093\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446433944000,"args":{"JVM stats":"heap_memory_usage: 121615640\nnon_heap_memory_usage: 153814664\nloaded_class_count: 16094\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":12,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431696000,"dur":5000},{"pid":1,"tid":12,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431701000,"dur":3000},{"pid":1,"tid":12,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431704000,"dur":2000},{"pid":1,"tid":12,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431704000,"dur":3000},{"pid":1,"tid":12,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431711000,"dur":3000},{"pid":1,"tid":12,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431714000,"dur":1000},{"pid":1,"tid":12,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431716000,"dur":100},{"pid":1,"tid":12,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431716000,"dur":100},{"pid":1,"tid":12,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431716000,"dur":100},{"pid":1,"tid":12,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431716000,"dur":1000},{"pid":1,"tid":12,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431717000,"dur":100},{"pid":1,"tid":12,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431717000,"dur":100},{"pid":1,"tid":12,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431717000,"dur":2000},{"pid":1,"tid":12,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431719000,"dur":100},{"pid":1,"tid":12,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431720000,"dur":100},{"pid":1,"tid":12,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431720000,"dur":100},{"pid":1,"tid":12,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431720000,"dur":36000},{"pid":1,"tid":12,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431756000,"dur":1000},{"pid":1,"tid":12,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431757000,"dur":6000},{"pid":1,"tid":12,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431766000,"dur":3000},{"pid":1,"tid":12,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431769000,"dur":100},{"pid":1,"tid":12,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446431715000,"dur":54000},{"pid":1,"tid":12,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431770000,"dur":2000},{"pid":1,"tid":12,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431772000,"dur":7000},{"pid":1,"tid":12,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431711000,"dur":69000},{"pid":1,"tid":12,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431781000,"dur":3000},{"pid":1,"tid":12,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446431709000,"dur":75000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446431810000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431814000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431816000,"dur":51000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431869000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431874000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431879000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431881000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431883000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431884000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431886000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431887000,"dur":37000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431925000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431926000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431931000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431932000,"dur":6000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446431939000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446431939000,"dur":26000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446431966000,"dur":447000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432414000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432418000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432419000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432420000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432424000,"dur":5000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432429000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432435000,"dur":1000},{"pid":1,"tid":13,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446432448000,"dur":1000},{"pid":1,"tid":13,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446432449000,"dur":1000},{"pid":1,"tid":13,"id":58,"name":"task file verification","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446432451000,"dur":1000},{"pid":1,"tid":13,"id":59,"name":"task file verification","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446432453000,"dur":100},{"pid":1,"tid":13,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446432449000,"dur":8000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432437000,"dur":27000},{"pid":1,"tid":0,"id":60,"name":"task: transform","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432465000,"dur":19000},{"pid":1,"tid":0,"id":61,"name":"task: external native build json","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432485000,"dur":1000},{"pid":1,"tid":0,"id":62,"name":"task: external native build","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432486000,"dur":73000},{"pid":1,"tid":0,"id":63,"name":"task: merge source set folders","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432560000,"dur":3000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432564000,"dur":12000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432576000,"dur":1000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432578000,"dur":11000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432589000,"dur":2000},{"pid":1,"tid":12,"id":69,"name":"transform prep: instant run","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446432615000,"dur":11000},{"pid":1,"tid":12,"id":70,"name":"transform: instant run","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446432626000,"dur":40000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432591000,"dur":83000},{"pid":1,"tid":12,"id":72,"name":"transform prep: instant run dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446432677000,"dur":2000},{"pid":1,"tid":12,"id":73,"name":"transform: instant run dex","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446432679000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432675000,"dur":5000},{"pid":1,"tid":0,"id":74,"name":"task: unknown task type","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432680000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: pre cold swap","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432682000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: fast deploy runtime extractor","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432684000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: generate instant run app info","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446432688000,"dur":2000},{"pid":1,"tid":12,"id":79,"name":"transform prep: instant run slicer","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446432717000,"dur":100},{"pid":1,"tid":12,"id":80,"name":"transform: instant run slicer","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446432717000,"dur":15000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432690000,"dur":55000},{"pid":1,"tid":12,"id":82,"name":"transform prep: dex archive builder","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446432782000,"dur":1000},{"pid":1,"tid":12,"id":83,"name":"transform: dex archive builder","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446432783000,"dur":222000},{"pid":1,"tid":0,"id":81,"name":"task: transform","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446432746000,"dur":273000},{"pid":1,"tid":12,"id":85,"name":"transform prep: external libs merger","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446433035000,"dur":1000},{"pid":1,"tid":12,"id":86,"name":"transform: external libs merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446433036000,"dur":2000},{"pid":1,"tid":0,"id":84,"name":"task: transform","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446433019000,"dur":20000},{"pid":1,"tid":12,"id":88,"name":"transform prep: dex merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446433055000,"dur":2000},{"pid":1,"tid":12,"id":89,"name":"transform: dex merger","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446433057000,"dur":26000},{"pid":1,"tid":0,"id":87,"name":"task: transform","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446433039000,"dur":49000},{"pid":1,"tid":0,"id":90,"name":"task: validate signing","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446433088000,"dur":2000},{"pid":1,"tid":12,"id":92,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446433096000,"dur":2000},{"pid":1,"tid":12,"id":93,"name":"transform: instant run dependencies apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446433098000,"dur":2000},{"pid":1,"tid":0,"id":91,"name":"task: transform","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446433091000,"dur":10000},{"pid":1,"tid":12,"id":95,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446433105000,"dur":2000},{"pid":1,"tid":12,"id":96,"name":"transform: instant run slice split apk builder","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446433107000,"dur":804000},{"pid":1,"tid":0,"id":94,"name":"task: transform","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446433102000,"dur":811000},{"pid":1,"tid":0,"id":97,"name":"task: transform","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446433915000,"dur":3000},{"pid":1,"tid":0,"id":98,"name":"task: package application","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446433918000,"dur":9000},{"pid":1,"tid":0,"id":99,"name":"task: build info writer","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446433928000,"dur":2000},{"pid":1,"tid":0,"id":100,"name":"task: unknown task type","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446433930000,"dur":1000},{"pid":1,"tid":0,"id":101,"name":"task: unknown task type","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446433931000,"dur":100},{"pid":1,"tid":12,"id":102,"name":"base plugin build finished","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446433937000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-40-33-944.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-40-33-944.rawproto
new file mode 100644
index 00000000..832b4e22
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-40-33-944.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-41-01-334.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-41-01-334.json
new file mode 100644
index 00000000..632b3cdd
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-41-01-334.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460078000,"args":{"JVM stats":"heap_memory_usage: 178570536\nnon_heap_memory_usage: 154089672\nloaded_class_count: 16105\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460246000,"args":{"JVM stats":"heap_memory_usage: 189096592\nnon_heap_memory_usage: 153732904\nloaded_class_count: 16115\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460247000,"args":{"JVM stats":"heap_memory_usage: 189229824\nnon_heap_memory_usage: 153732904\nloaded_class_count: 16115\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460328000,"args":{"JVM stats":"heap_memory_usage: 196461520\nnon_heap_memory_usage: 153808576\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460334000,"args":{"JVM stats":"heap_memory_usage: 196861424\nnon_heap_memory_usage: 153810008\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460339000,"args":{"JVM stats":"heap_memory_usage: 197128952\nnon_heap_memory_usage: 153830072\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460342000,"args":{"JVM stats":"heap_memory_usage: 197262488\nnon_heap_memory_usage: 153830072\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460347000,"args":{"JVM stats":"heap_memory_usage: 197262488\nnon_heap_memory_usage: 153830072\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460349000,"args":{"JVM stats":"heap_memory_usage: 197262488\nnon_heap_memory_usage: 153830104\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460350000,"args":{"JVM stats":"heap_memory_usage: 197262488\nnon_heap_memory_usage: 153830104\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460351000,"args":{"JVM stats":"heap_memory_usage: 197395704\nnon_heap_memory_usage: 153830104\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460402000,"args":{"JVM stats":"heap_memory_usage: 200729872\nnon_heap_memory_usage: 153840352\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460403000,"args":{"JVM stats":"heap_memory_usage: 200863136\nnon_heap_memory_usage: 153840632\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460408000,"args":{"JVM stats":"heap_memory_usage: 201129568\nnon_heap_memory_usage: 153858520\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460409000,"args":{"JVM stats":"heap_memory_usage: 201129568\nnon_heap_memory_usage: 153861400\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460420000,"args":{"JVM stats":"heap_memory_usage: 202329392\nnon_heap_memory_usage: 153861992\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460420001,"args":{"JVM stats":"heap_memory_usage: 202329392\nnon_heap_memory_usage: 153867360\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460436000,"args":{"JVM stats":"heap_memory_usage: 203280392\nnon_heap_memory_usage: 153875968\nloaded_class_count: 16115\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460576000,"args":{"JVM stats":"heap_memory_usage: 219788792\nnon_heap_memory_usage: 154117480\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460580000,"args":{"JVM stats":"heap_memory_usage: 220071640\nnon_heap_memory_usage: 154117480\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460582000,"args":{"JVM stats":"heap_memory_usage: 220071640\nnon_heap_memory_usage: 154123624\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460582001,"args":{"JVM stats":"heap_memory_usage: 220213032\nnon_heap_memory_usage: 154125840\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460586000,"args":{"JVM stats":"heap_memory_usage: 220346216\nnon_heap_memory_usage: 154151320\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460590000,"args":{"JVM stats":"heap_memory_usage: 220612624\nnon_heap_memory_usage: 154174264\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460596000,"args":{"JVM stats":"heap_memory_usage: 220878992\nnon_heap_memory_usage: 154178584\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460597000,"args":{"JVM stats":"heap_memory_usage: 220878992\nnon_heap_memory_usage: 154178584\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460627000,"args":{"JVM stats":"heap_memory_usage: 221946424\nnon_heap_memory_usage: 154192264\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460649000,"args":{"JVM stats":"heap_memory_usage: 222911664\nnon_heap_memory_usage: 154215368\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460650000,"args":{"JVM stats":"heap_memory_usage: 223044864\nnon_heap_memory_usage: 154215368\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460715000,"args":{"JVM stats":"heap_memory_usage: 223711200\nnon_heap_memory_usage: 154227784\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460719000,"args":{"JVM stats":"heap_memory_usage: 223844408\nnon_heap_memory_usage: 154227784\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460729000,"args":{"JVM stats":"heap_memory_usage: 224777800\nnon_heap_memory_usage: 154233848\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460730000,"args":{"JVM stats":"heap_memory_usage: 224777800\nnon_heap_memory_usage: 154233848\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460744000,"args":{"JVM stats":"heap_memory_usage: 225978904\nnon_heap_memory_usage: 154240976\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460746000,"args":{"JVM stats":"heap_memory_usage: 225978904\nnon_heap_memory_usage: 154240976\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460810000,"args":{"JVM stats":"heap_memory_usage: 231664136\nnon_heap_memory_usage: 154362784\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460813000,"args":{"JVM stats":"heap_memory_usage: 232127064\nnon_heap_memory_usage: 154372848\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460813001,"args":{"JVM stats":"heap_memory_usage: 232127064\nnon_heap_memory_usage: 154372848\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460814000,"args":{"JVM stats":"heap_memory_usage: 232127064\nnon_heap_memory_usage: 154372848\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460815000,"args":{"JVM stats":"heap_memory_usage: 232260280\nnon_heap_memory_usage: 154372848\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460816000,"args":{"JVM stats":"heap_memory_usage: 232260280\nnon_heap_memory_usage: 154372848\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446460841000,"args":{"JVM stats":"heap_memory_usage: 233738808\nnon_heap_memory_usage: 154397120\nloaded_class_count: 16115\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461013000,"args":{"JVM stats":"heap_memory_usage: 274673000\nnon_heap_memory_usage: 154827400\nloaded_class_count: 16115\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461025000,"args":{"JVM stats":"heap_memory_usage: 275879920\nnon_heap_memory_usage: 154842824\nloaded_class_count: 16115\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461061000,"args":{"JVM stats":"heap_memory_usage: 282602176\nnon_heap_memory_usage: 154859448\nloaded_class_count: 16115\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461062000,"args":{"JVM stats":"heap_memory_usage: 282735360\nnon_heap_memory_usage: 154859448\nloaded_class_count: 16115\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461068000,"args":{"JVM stats":"heap_memory_usage: 283269320\nnon_heap_memory_usage: 154862896\nloaded_class_count: 16115\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461278000,"args":{"JVM stats":"heap_memory_usage: 293885440\nnon_heap_memory_usage: 154946168\nloaded_class_count: 16115\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461283000,"args":{"JVM stats":"heap_memory_usage: 294160760\nnon_heap_memory_usage: 154955632\nloaded_class_count: 16115\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461297000,"args":{"JVM stats":"heap_memory_usage: 294560616\nnon_heap_memory_usage: 154970040\nloaded_class_count: 16115\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461301000,"args":{"JVM stats":"heap_memory_usage: 294843176\nnon_heap_memory_usage: 154985952\nloaded_class_count: 16115\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461303000,"args":{"JVM stats":"heap_memory_usage: 294843176\nnon_heap_memory_usage: 154986464\nloaded_class_count: 16115\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461305000,"args":{"JVM stats":"heap_memory_usage: 294843176\nnon_heap_memory_usage: 154986464\nloaded_class_count: 16115\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446461335000,"args":{"JVM stats":"heap_memory_usage: 295600296\nnon_heap_memory_usage: 155119152\nloaded_class_count: 16128\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":12,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460079000,"dur":5000},{"pid":1,"tid":12,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460084000,"dur":8000},{"pid":1,"tid":12,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460092000,"dur":2000},{"pid":1,"tid":12,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460092000,"dur":2000},{"pid":1,"tid":12,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460103000,"dur":8000},{"pid":1,"tid":12,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460111000,"dur":1000},{"pid":1,"tid":12,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460113000,"dur":1000},{"pid":1,"tid":12,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460114000,"dur":100},{"pid":1,"tid":12,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460114000,"dur":1000},{"pid":1,"tid":12,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460115000,"dur":100},{"pid":1,"tid":12,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460115000,"dur":100},{"pid":1,"tid":12,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460115000,"dur":1000},{"pid":1,"tid":12,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460116000,"dur":31000},{"pid":1,"tid":12,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460147000,"dur":100},{"pid":1,"tid":12,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460147000,"dur":100},{"pid":1,"tid":12,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460147000,"dur":100},{"pid":1,"tid":12,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460147000,"dur":34000},{"pid":1,"tid":12,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460181000,"dur":1000},{"pid":1,"tid":12,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460182000,"dur":5000},{"pid":1,"tid":12,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460189000,"dur":2000},{"pid":1,"tid":12,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460191000,"dur":100},{"pid":1,"tid":12,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460112000,"dur":79000},{"pid":1,"tid":12,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460191000,"dur":3000},{"pid":1,"tid":12,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460195000,"dur":11000},{"pid":1,"tid":12,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460102000,"dur":106000},{"pid":1,"tid":12,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460208000,"dur":4000},{"pid":1,"tid":12,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446460096000,"dur":116000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460244000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460246000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460247000,"dur":81000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460329000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460335000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460340000,"dur":2000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460344000,"dur":2000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460348000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460350000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460351000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460352000,"dur":49000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460402000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460404000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460408000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460411000,"dur":9000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460420000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460421000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460436000,"dur":140000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460577000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460580000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460582000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460583000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460587000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460591000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460596000,"dur":1000},{"pid":1,"tid":14,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446460614000,"dur":1000},{"pid":1,"tid":14,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446460615000,"dur":1000},{"pid":1,"tid":14,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446460615000,"dur":3000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460604000,"dur":23000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460628000,"dur":21000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460649000,"dur":1000},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460650000,"dur":65000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460716000,"dur":3000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460721000,"dur":8000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460730000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460731000,"dur":13000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460745000,"dur":1000},{"pid":1,"tid":14,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446460769000,"dur":7000},{"pid":1,"tid":14,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446460776000,"dur":28000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460747000,"dur":63000},{"pid":1,"tid":14,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446460812000,"dur":100},{"pid":1,"tid":14,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446460812000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460811000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460813000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460813000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460815000,"dur":100},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446460816000,"dur":100},{"pid":1,"tid":15,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446460829000,"dur":100},{"pid":1,"tid":15,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446460829000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460817000,"dur":24000},{"pid":1,"tid":15,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446460864000,"dur":1000},{"pid":1,"tid":15,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446460865000,"dur":138000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446460842000,"dur":171000},{"pid":1,"tid":15,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446461022000,"dur":1000},{"pid":1,"tid":15,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446461023000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446461013000,"dur":12000},{"pid":1,"tid":15,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446461038000,"dur":1000},{"pid":1,"tid":15,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446461039000,"dur":18000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446461026000,"dur":35000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446461061000,"dur":1000},{"pid":1,"tid":15,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446461066000,"dur":1000},{"pid":1,"tid":15,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446461067000,"dur":1000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446461063000,"dur":5000},{"pid":1,"tid":15,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446461071000,"dur":1000},{"pid":1,"tid":15,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446461072000,"dur":205000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446461069000,"dur":209000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446461279000,"dur":4000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446461283000,"dur":14000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446461297000,"dur":4000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446461302000,"dur":1000},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446461304000,"dur":100},{"pid":1,"tid":12,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446461320000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-41-01-334.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-41-01-334.rawproto
new file mode 100644
index 00000000..502db246
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-41-01-334.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-44-12-781.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-44-12-781.json
new file mode 100644
index 00000000..ed7debd9
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-44-12-781.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649668000,"args":{"JVM stats":"heap_memory_usage: 352779112\nnon_heap_memory_usage: 155452160\nloaded_class_count: 16138\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649791000,"args":{"JVM stats":"heap_memory_usage: 363739944\nnon_heap_memory_usage: 155659864\nloaded_class_count: 16149\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649792000,"args":{"JVM stats":"heap_memory_usage: 363739944\nnon_heap_memory_usage: 155660568\nloaded_class_count: 16149\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649844000,"args":{"JVM stats":"heap_memory_usage: 370165800\nnon_heap_memory_usage: 155857768\nloaded_class_count: 16149\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649850000,"args":{"JVM stats":"heap_memory_usage: 370298984\nnon_heap_memory_usage: 155884184\nloaded_class_count: 16152\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649858000,"args":{"JVM stats":"heap_memory_usage: 370565720\nnon_heap_memory_usage: 155918240\nloaded_class_count: 16163\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649859000,"args":{"JVM stats":"heap_memory_usage: 370565720\nnon_heap_memory_usage: 155918240\nloaded_class_count: 16163\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649861000,"args":{"JVM stats":"heap_memory_usage: 370699944\nnon_heap_memory_usage: 155943528\nloaded_class_count: 16172\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649862000,"args":{"JVM stats":"heap_memory_usage: 370833128\nnon_heap_memory_usage: 155952392\nloaded_class_count: 16172\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649863000,"args":{"JVM stats":"heap_memory_usage: 370833128\nnon_heap_memory_usage: 155962960\nloaded_class_count: 16173\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446649864000,"args":{"JVM stats":"heap_memory_usage: 370833128\nnon_heap_memory_usage: 155968848\nloaded_class_count: 16173\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446650050000,"args":{"JVM stats":"heap_memory_usage: 405661112\nnon_heap_memory_usage: 156336408\nloaded_class_count: 16183\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446650052000,"args":{"JVM stats":"heap_memory_usage: 406023752\nnon_heap_memory_usage: 156336408\nloaded_class_count: 16183\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446650058000,"args":{"JVM stats":"heap_memory_usage: 406586272\nnon_heap_memory_usage: 156342264\nloaded_class_count: 16183\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446650061000,"args":{"JVM stats":"heap_memory_usage: 406995432\nnon_heap_memory_usage: 156377720\nloaded_class_count: 16190\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651082000,"args":{"JVM stats":"heap_memory_usage: 107139840\nnon_heap_memory_usage: 156710320\nloaded_class_count: 16216\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 39\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651083000,"args":{"JVM stats":"heap_memory_usage: 108339328\nnon_heap_memory_usage: 156722608\nloaded_class_count: 16216\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651110000,"args":{"JVM stats":"heap_memory_usage: 109400888\nnon_heap_memory_usage: 156766720\nloaded_class_count: 16216\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651383000,"args":{"JVM stats":"heap_memory_usage: 143548688\nnon_heap_memory_usage: 157428968\nloaded_class_count: 16216\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651387000,"args":{"JVM stats":"heap_memory_usage: 143705592\nnon_heap_memory_usage: 157429224\nloaded_class_count: 16216\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651389000,"args":{"JVM stats":"heap_memory_usage: 144196504\nnon_heap_memory_usage: 157429256\nloaded_class_count: 16216\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651390000,"args":{"JVM stats":"heap_memory_usage: 144196504\nnon_heap_memory_usage: 157429256\nloaded_class_count: 16216\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651396000,"args":{"JVM stats":"heap_memory_usage: 144196504\nnon_heap_memory_usage: 157429256\nloaded_class_count: 16216\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651541000,"args":{"JVM stats":"heap_memory_usage: 295746864\nnon_heap_memory_usage: 157724712\nloaded_class_count: 16230\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651548000,"args":{"JVM stats":"heap_memory_usage: 295824104\nnon_heap_memory_usage: 157750440\nloaded_class_count: 16230\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651553000,"args":{"JVM stats":"heap_memory_usage: 295888720\nnon_heap_memory_usage: 157754664\nloaded_class_count: 16230\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651603000,"args":{"JVM stats":"heap_memory_usage: 299075064\nnon_heap_memory_usage: 157648736\nloaded_class_count: 16230\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651622000,"args":{"JVM stats":"heap_memory_usage: 300020624\nnon_heap_memory_usage: 157631760\nloaded_class_count: 16230\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651624000,"args":{"JVM stats":"heap_memory_usage: 300085208\nnon_heap_memory_usage: 157623664\nloaded_class_count: 16230\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651691000,"args":{"JVM stats":"heap_memory_usage: 300874384\nnon_heap_memory_usage: 157633872\nloaded_class_count: 16230\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651695000,"args":{"JVM stats":"heap_memory_usage: 300938968\nnon_heap_memory_usage: 157633872\nloaded_class_count: 16230\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651704000,"args":{"JVM stats":"heap_memory_usage: 301866112\nnon_heap_memory_usage: 157565064\nloaded_class_count: 16231\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651705000,"args":{"JVM stats":"heap_memory_usage: 301931224\nnon_heap_memory_usage: 157580368\nloaded_class_count: 16231\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651713000,"args":{"JVM stats":"heap_memory_usage: 302595888\nnon_heap_memory_usage: 157580368\nloaded_class_count: 16231\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651714000,"args":{"JVM stats":"heap_memory_usage: 302660520\nnon_heap_memory_usage: 157580368\nloaded_class_count: 16231\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651782000,"args":{"JVM stats":"heap_memory_usage: 310333024\nnon_heap_memory_usage: 157595760\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651785000,"args":{"JVM stats":"heap_memory_usage: 310637624\nnon_heap_memory_usage: 157603048\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651786000,"args":{"JVM stats":"heap_memory_usage: 310779488\nnon_heap_memory_usage: 157608456\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651787000,"args":{"JVM stats":"heap_memory_usage: 310779488\nnon_heap_memory_usage: 157614280\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651789000,"args":{"JVM stats":"heap_memory_usage: 311040048\nnon_heap_memory_usage: 157616328\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651791000,"args":{"JVM stats":"heap_memory_usage: 311178528\nnon_heap_memory_usage: 157616360\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446651843000,"args":{"JVM stats":"heap_memory_usage: 313121640\nnon_heap_memory_usage: 157640984\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652095000,"args":{"JVM stats":"heap_memory_usage: 361137680\nnon_heap_memory_usage: 158278016\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652114000,"args":{"JVM stats":"heap_memory_usage: 362387072\nnon_heap_memory_usage: 158286832\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652157000,"args":{"JVM stats":"heap_memory_usage: 372182616\nnon_heap_memory_usage: 158357768\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652160000,"args":{"JVM stats":"heap_memory_usage: 372426424\nnon_heap_memory_usage: 158357768\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652169000,"args":{"JVM stats":"heap_memory_usage: 372912720\nnon_heap_memory_usage: 158358392\nloaded_class_count: 16231\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652376000,"args":{"JVM stats":"heap_memory_usage: 390224248\nnon_heap_memory_usage: 158505728\nloaded_class_count: 16233\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652381000,"args":{"JVM stats":"heap_memory_usage: 390434904\nnon_heap_memory_usage: 158506968\nloaded_class_count: 16233\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652756000,"args":{"JVM stats":"heap_memory_usage: 216076992\nnon_heap_memory_usage: 158192112\nloaded_class_count: 16236\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 42\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652761000,"args":{"JVM stats":"heap_memory_usage: 218497864\nnon_heap_memory_usage: 158183504\nloaded_class_count: 16236\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652761001,"args":{"JVM stats":"heap_memory_usage: 218497864\nnon_heap_memory_usage: 158180624\nloaded_class_count: 16236\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652762000,"args":{"JVM stats":"heap_memory_usage: 218772152\nnon_heap_memory_usage: 158184464\nloaded_class_count: 16236\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446652782000,"args":{"JVM stats":"heap_memory_usage: 219756448\nnon_heap_memory_usage: 158233800\nloaded_class_count: 16236\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649668000,"dur":5000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649673000,"dur":6000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649679000,"dur":3000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649679000,"dur":3000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649685000,"dur":3000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649688000,"dur":1000},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649691000,"dur":1000},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649692000,"dur":100},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649692000,"dur":100},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649692000,"dur":1000},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649693000,"dur":100},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649693000,"dur":100},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649693000,"dur":4000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649697000,"dur":100},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649698000,"dur":100},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649698000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649698000,"dur":41000},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649740000,"dur":100},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649740000,"dur":6000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649747000,"dur":1000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649748000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446649689000,"dur":59000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649748000,"dur":3000},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649751000,"dur":11000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649684000,"dur":79000},{"pid":1,"tid":16,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649764000,"dur":2000},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446649683000,"dur":83000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446649788000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649791000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649792000,"dur":52000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649845000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649851000,"dur":7000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649858000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649859000,"dur":2000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649861000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649863000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446649864000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446649864000,"dur":186000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446650051000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446650053000,"dur":5000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446650059000,"dur":2000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446650062000,"dur":1017000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651083000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651083000,"dur":26000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651110000,"dur":272000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651383000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651387000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651390000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651392000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651396000,"dur":145000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651542000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651550000,"dur":3000},{"pid":1,"tid":17,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446651567000,"dur":1000},{"pid":1,"tid":17,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446651568000,"dur":1000},{"pid":1,"tid":17,"id":58,"name":"task file verification","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446651570000,"dur":1000},{"pid":1,"tid":17,"id":59,"name":"task file verification","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446651572000,"dur":1000},{"pid":1,"tid":17,"id":60,"name":"task file verification","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446651574000,"dur":8000},{"pid":1,"tid":17,"id":61,"name":"task file verification","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446651583000,"dur":1000},{"pid":1,"tid":17,"id":62,"name":"task file verification","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446651585000,"dur":1000},{"pid":1,"tid":17,"id":63,"name":"task file verification","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446651587000,"dur":2000},{"pid":1,"tid":17,"id":64,"name":"task file verification","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446651590000,"dur":1000},{"pid":1,"tid":17,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446651568000,"dur":27000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651554000,"dur":49000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651604000,"dur":18000},{"pid":1,"tid":0,"id":66,"name":"task: external native build json","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651623000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: external native build","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651625000,"dur":66000},{"pid":1,"tid":0,"id":68,"name":"task: merge source set folders","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651693000,"dur":2000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651697000,"dur":7000},{"pid":1,"tid":0,"id":70,"name":"task: unknown task type","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651704000,"dur":1000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651706000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651713000,"dur":1000},{"pid":1,"tid":17,"id":74,"name":"transform prep: instant run","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446651729000,"dur":7000},{"pid":1,"tid":17,"id":75,"name":"transform: instant run","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446651736000,"dur":38000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651714000,"dur":68000},{"pid":1,"tid":17,"id":77,"name":"transform prep: instant run dex","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446651784000,"dur":100},{"pid":1,"tid":17,"id":78,"name":"transform: instant run dex","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446651784000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651783000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651785000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: pre cold swap","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651786000,"dur":100},{"pid":1,"tid":0,"id":81,"name":"task: fast deploy runtime extractor","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651787000,"dur":2000},{"pid":1,"tid":0,"id":82,"name":"task: generate instant run app info","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446651790000,"dur":1000},{"pid":1,"tid":17,"id":84,"name":"transform prep: instant run slicer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446651808000,"dur":1000},{"pid":1,"tid":17,"id":85,"name":"transform: instant run slicer","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446651809000,"dur":20000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651791000,"dur":52000},{"pid":1,"tid":17,"id":87,"name":"transform prep: dex archive builder","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446651876000,"dur":1000},{"pid":1,"tid":17,"id":88,"name":"transform: dex archive builder","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446651877000,"dur":203000},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446651844000,"dur":251000},{"pid":1,"tid":17,"id":90,"name":"transform prep: external libs merger","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446652110000,"dur":2000},{"pid":1,"tid":17,"id":91,"name":"transform: external libs merger","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446652112000,"dur":1000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652095000,"dur":19000},{"pid":1,"tid":17,"id":93,"name":"transform prep: dex merger","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446652127000,"dur":1000},{"pid":1,"tid":17,"id":94,"name":"transform: dex merger","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446652128000,"dur":23000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652114000,"dur":43000},{"pid":1,"tid":0,"id":95,"name":"task: validate signing","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652158000,"dur":2000},{"pid":1,"tid":17,"id":97,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446652163000,"dur":3000},{"pid":1,"tid":17,"id":98,"name":"transform: instant run dependencies apk builder","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446652167000,"dur":1000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652161000,"dur":8000},{"pid":1,"tid":17,"id":100,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446652174000,"dur":2000},{"pid":1,"tid":17,"id":101,"name":"transform: instant run slice split apk builder","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446652176000,"dur":198000},{"pid":1,"tid":0,"id":99,"name":"task: transform","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652170000,"dur":206000},{"pid":1,"tid":0,"id":102,"name":"task: transform","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446652377000,"dur":4000},{"pid":1,"tid":0,"id":103,"name":"task: package application","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652382000,"dur":373000},{"pid":1,"tid":0,"id":104,"name":"task: build info writer","args":{"span_id":"104","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652757000,"dur":4000},{"pid":1,"tid":0,"id":105,"name":"task: unknown task type","args":{"span_id":"105","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652761000,"dur":100},{"pid":1,"tid":0,"id":106,"name":"task: unknown task type","args":{"span_id":"106","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446652762000,"dur":100},{"pid":1,"tid":16,"id":107,"name":"base plugin build finished","args":{"span_id":"107","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446652769000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-44-12-781.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-44-12-781.rawproto
new file mode 100644
index 00000000..8b38fb69
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-44-12-781.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-45-22-026.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-45-22-026.json
new file mode 100644
index 00000000..d783f4ee
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-45-22-026.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446718991000,"args":{"JVM stats":"heap_memory_usage: 276760176\nnon_heap_memory_usage: 158635064\nloaded_class_count: 16243\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719090000,"args":{"JVM stats":"heap_memory_usage: 287603104\nnon_heap_memory_usage: 158757424\nloaded_class_count: 16243\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719090001,"args":{"JVM stats":"heap_memory_usage: 287743520\nnon_heap_memory_usage: 158757424\nloaded_class_count: 16243\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719144000,"args":{"JVM stats":"heap_memory_usage: 294095232\nnon_heap_memory_usage: 158435032\nloaded_class_count: 16243\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719149000,"args":{"JVM stats":"heap_memory_usage: 294657784\nnon_heap_memory_usage: 158432056\nloaded_class_count: 16243\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719155000,"args":{"JVM stats":"heap_memory_usage: 294938528\nnon_heap_memory_usage: 158463768\nloaded_class_count: 16243\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719156000,"args":{"JVM stats":"heap_memory_usage: 294938528\nnon_heap_memory_usage: 158467352\nloaded_class_count: 16246\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719158000,"args":{"JVM stats":"heap_memory_usage: 294938528\nnon_heap_memory_usage: 158476728\nloaded_class_count: 16246\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719158001,"args":{"JVM stats":"heap_memory_usage: 295078920\nnon_heap_memory_usage: 158482224\nloaded_class_count: 16246\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719159000,"args":{"JVM stats":"heap_memory_usage: 295078920\nnon_heap_memory_usage: 158487976\nloaded_class_count: 16246\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719160000,"args":{"JVM stats":"heap_memory_usage: 295078920\nnon_heap_memory_usage: 158493568\nloaded_class_count: 16246\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719343000,"args":{"JVM stats":"heap_memory_usage: 329703584\nnon_heap_memory_usage: 158638280\nloaded_class_count: 16247\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719346000,"args":{"JVM stats":"heap_memory_usage: 330073368\nnon_heap_memory_usage: 158645360\nloaded_class_count: 16250\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719357000,"args":{"JVM stats":"heap_memory_usage: 331220192\nnon_heap_memory_usage: 158676040\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446719358000,"args":{"JVM stats":"heap_memory_usage: 331220192\nnon_heap_memory_usage: 158676264\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720056000,"args":{"JVM stats":"heap_memory_usage: 345976864\nnon_heap_memory_usage: 159104696\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720056001,"args":{"JVM stats":"heap_memory_usage: 346117264\nnon_heap_memory_usage: 159104696\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720079000,"args":{"JVM stats":"heap_memory_usage: 347056192\nnon_heap_memory_usage: 159104696\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720489000,"args":{"JVM stats":"heap_memory_usage: 387633280\nnon_heap_memory_usage: 159997896\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720494000,"args":{"JVM stats":"heap_memory_usage: 387914232\nnon_heap_memory_usage: 160005256\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720495000,"args":{"JVM stats":"heap_memory_usage: 387914232\nnon_heap_memory_usage: 160006920\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720496000,"args":{"JVM stats":"heap_memory_usage: 388054624\nnon_heap_memory_usage: 160006920\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720501000,"args":{"JVM stats":"heap_memory_usage: 388617752\nnon_heap_memory_usage: 160006920\nloaded_class_count: 16263\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720628000,"args":{"JVM stats":"heap_memory_usage: 122448904\nnon_heap_memory_usage: 160098928\nloaded_class_count: 16264\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 42\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720634000,"args":{"JVM stats":"heap_memory_usage: 124648448\nnon_heap_memory_usage: 160098928\nloaded_class_count: 16264\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720636000,"args":{"JVM stats":"heap_memory_usage: 124787520\nnon_heap_memory_usage: 160109704\nloaded_class_count: 16264\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720684000,"args":{"JVM stats":"heap_memory_usage: 126510488\nnon_heap_memory_usage: 160143408\nloaded_class_count: 16264\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720703000,"args":{"JVM stats":"heap_memory_usage: 127911056\nnon_heap_memory_usage: 160148344\nloaded_class_count: 16264\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720704000,"args":{"JVM stats":"heap_memory_usage: 127982464\nnon_heap_memory_usage: 160148344\nloaded_class_count: 16264\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720770000,"args":{"JVM stats":"heap_memory_usage: 128895440\nnon_heap_memory_usage: 160217048\nloaded_class_count: 16265\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720773000,"args":{"JVM stats":"heap_memory_usage: 128966320\nnon_heap_memory_usage: 160218448\nloaded_class_count: 16265\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720780000,"args":{"JVM stats":"heap_memory_usage: 129682904\nnon_heap_memory_usage: 160234728\nloaded_class_count: 16266\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720781000,"args":{"JVM stats":"heap_memory_usage: 129682904\nnon_heap_memory_usage: 160235496\nloaded_class_count: 16266\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720791000,"args":{"JVM stats":"heap_memory_usage: 130700536\nnon_heap_memory_usage: 160250472\nloaded_class_count: 16266\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720794000,"args":{"JVM stats":"heap_memory_usage: 130771480\nnon_heap_memory_usage: 160251176\nloaded_class_count: 16266\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720876000,"args":{"JVM stats":"heap_memory_usage: 138037880\nnon_heap_memory_usage: 160360352\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720879000,"args":{"JVM stats":"heap_memory_usage: 138452808\nnon_heap_memory_usage: 160364704\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720880000,"args":{"JVM stats":"heap_memory_usage: 138615728\nnon_heap_memory_usage: 160364704\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720881000,"args":{"JVM stats":"heap_memory_usage: 138615728\nnon_heap_memory_usage: 160364704\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720883000,"args":{"JVM stats":"heap_memory_usage: 138740736\nnon_heap_memory_usage: 160364704\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720885000,"args":{"JVM stats":"heap_memory_usage: 138913472\nnon_heap_memory_usage: 160368336\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446720957000,"args":{"JVM stats":"heap_memory_usage: 141383472\nnon_heap_memory_usage: 160345432\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446721196000,"args":{"JVM stats":"heap_memory_usage: 189343752\nnon_heap_memory_usage: 160913800\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446721217000,"args":{"JVM stats":"heap_memory_usage: 190677944\nnon_heap_memory_usage: 160918856\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446721271000,"args":{"JVM stats":"heap_memory_usage: 205370064\nnon_heap_memory_usage: 160939872\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446721274000,"args":{"JVM stats":"heap_memory_usage: 205550008\nnon_heap_memory_usage: 160946704\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446721283000,"args":{"JVM stats":"heap_memory_usage: 205975616\nnon_heap_memory_usage: 160973592\nloaded_class_count: 16266\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446721696000,"args":{"JVM stats":"heap_memory_usage: 257526088\nnon_heap_memory_usage: 161091008\nloaded_class_count: 16266\nthread_count: 68\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446721701000,"args":{"JVM stats":"heap_memory_usage: 257768864\nnon_heap_memory_usage: 161091008\nloaded_class_count: 16266\nthread_count: 68\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446722007000,"args":{"JVM stats":"heap_memory_usage: 327584280\nnon_heap_memory_usage: 161411544\nloaded_class_count: 16267\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446722010000,"args":{"JVM stats":"heap_memory_usage: 327952424\nnon_heap_memory_usage: 161428048\nloaded_class_count: 16267\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446722010001,"args":{"JVM stats":"heap_memory_usage: 327952424\nnon_heap_memory_usage: 161442040\nloaded_class_count: 16267\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446722011000,"args":{"JVM stats":"heap_memory_usage: 328023336\nnon_heap_memory_usage: 161446248\nloaded_class_count: 16267\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446722026000,"args":{"JVM stats":"heap_memory_usage: 329111192\nnon_heap_memory_usage: 161490832\nloaded_class_count: 16267\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":18,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446718991000,"dur":5000},{"pid":1,"tid":18,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446718996000,"dur":5000},{"pid":1,"tid":18,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719001000,"dur":2000},{"pid":1,"tid":18,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719001000,"dur":2000},{"pid":1,"tid":18,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719006000,"dur":1000},{"pid":1,"tid":18,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719007000,"dur":1000},{"pid":1,"tid":18,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719008000,"dur":1000},{"pid":1,"tid":18,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719009000,"dur":100},{"pid":1,"tid":18,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719009000,"dur":100},{"pid":1,"tid":18,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719009000,"dur":1000},{"pid":1,"tid":18,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719010000,"dur":100},{"pid":1,"tid":18,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719010000,"dur":100},{"pid":1,"tid":18,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719010000,"dur":3000},{"pid":1,"tid":18,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719013000,"dur":100},{"pid":1,"tid":18,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719013000,"dur":1000},{"pid":1,"tid":18,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719014000,"dur":100},{"pid":1,"tid":18,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719014000,"dur":36000},{"pid":1,"tid":18,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719050000,"dur":100},{"pid":1,"tid":18,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719050000,"dur":7000},{"pid":1,"tid":18,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719058000,"dur":1000},{"pid":1,"tid":18,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719059000,"dur":100},{"pid":1,"tid":18,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446719008000,"dur":51000},{"pid":1,"tid":18,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719059000,"dur":3000},{"pid":1,"tid":18,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719062000,"dur":7000},{"pid":1,"tid":18,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719005000,"dur":65000},{"pid":1,"tid":18,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719070000,"dur":3000},{"pid":1,"tid":18,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446719004000,"dur":69000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446719087000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719090000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719091000,"dur":53000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719144000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719150000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719155000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719157000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719158000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719159000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719159000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446719160000,"dur":183000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719344000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719347000,"dur":10000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446719357000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446719359000,"dur":697000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720056000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720058000,"dur":21000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720080000,"dur":409000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720490000,"dur":4000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720494000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720496000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720497000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720502000,"dur":126000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720629000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720634000,"dur":1000},{"pid":1,"tid":19,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446720646000,"dur":2000},{"pid":1,"tid":19,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446720648000,"dur":3000},{"pid":1,"tid":19,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446720648000,"dur":28000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720636000,"dur":48000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720685000,"dur":18000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720703000,"dur":1000},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720705000,"dur":65000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720771000,"dur":2000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720773000,"dur":7000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720780000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720782000,"dur":9000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720792000,"dur":2000},{"pid":1,"tid":19,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446720818000,"dur":9000},{"pid":1,"tid":19,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446720827000,"dur":35000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720794000,"dur":82000},{"pid":1,"tid":19,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446720878000,"dur":100},{"pid":1,"tid":19,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446720879000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720876000,"dur":3000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720880000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720880000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720881000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446720884000,"dur":1000},{"pid":1,"tid":19,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446720904000,"dur":1000},{"pid":1,"tid":19,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446720905000,"dur":33000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720886000,"dur":71000},{"pid":1,"tid":19,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446720980000,"dur":2000},{"pid":1,"tid":19,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446720982000,"dur":196000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446720958000,"dur":238000},{"pid":1,"tid":19,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446721211000,"dur":2000},{"pid":1,"tid":19,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446721213000,"dur":2000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446721197000,"dur":20000},{"pid":1,"tid":19,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446721234000,"dur":1000},{"pid":1,"tid":19,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446721235000,"dur":27000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446721218000,"dur":53000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446721271000,"dur":3000},{"pid":1,"tid":19,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446721278000,"dur":2000},{"pid":1,"tid":19,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446721280000,"dur":2000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446721274000,"dur":9000},{"pid":1,"tid":19,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446721289000,"dur":1000},{"pid":1,"tid":19,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446721290000,"dur":405000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446721284000,"dur":412000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446721697000,"dur":4000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446721702000,"dur":305000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446722007000,"dur":3000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446722010000,"dur":100},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446722010000,"dur":1000},{"pid":1,"tid":18,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446722018000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-45-22-026.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-45-22-026.rawproto
new file mode 100644
index 00000000..187003a9
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-45-22-026.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-09-084.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-09-084.json
new file mode 100644
index 00000000..f5699315
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-09-084.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827429000,"args":{"JVM stats":"heap_memory_usage: 385256696\nnon_heap_memory_usage: 161793224\nloaded_class_count: 16274\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827537000,"args":{"JVM stats":"heap_memory_usage: 396348176\nnon_heap_memory_usage: 161768456\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827538000,"args":{"JVM stats":"heap_memory_usage: 396348176\nnon_heap_memory_usage: 161761544\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827587000,"args":{"JVM stats":"heap_memory_usage: 402652264\nnon_heap_memory_usage: 161787328\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827591000,"args":{"JVM stats":"heap_memory_usage: 403071952\nnon_heap_memory_usage: 161787328\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827595000,"args":{"JVM stats":"heap_memory_usage: 403491640\nnon_heap_memory_usage: 161791440\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827596000,"args":{"JVM stats":"heap_memory_usage: 403491640\nnon_heap_memory_usage: 161790576\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827597000,"args":{"JVM stats":"heap_memory_usage: 403631176\nnon_heap_memory_usage: 161792912\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827598000,"args":{"JVM stats":"heap_memory_usage: 403631176\nnon_heap_memory_usage: 161790736\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827599000,"args":{"JVM stats":"heap_memory_usage: 403631176\nnon_heap_memory_usage: 161774056\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827600000,"args":{"JVM stats":"heap_memory_usage: 403631176\nnon_heap_memory_usage: 161776360\nloaded_class_count: 16295\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827807000,"args":{"JVM stats":"heap_memory_usage: 140694616\nnon_heap_memory_usage: 161589776\nloaded_class_count: 16295\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 30\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827808000,"args":{"JVM stats":"heap_memory_usage: 140864728\nnon_heap_memory_usage: 161589872\nloaded_class_count: 16295\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827813000,"args":{"JVM stats":"heap_memory_usage: 141410952\nnon_heap_memory_usage: 161593568\nloaded_class_count: 16295\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446827814000,"args":{"JVM stats":"heap_memory_usage: 141622248\nnon_heap_memory_usage: 161593568\nloaded_class_count: 16295\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828496000,"args":{"JVM stats":"heap_memory_usage: 156315808\nnon_heap_memory_usage: 161805792\nloaded_class_count: 16295\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828497000,"args":{"JVM stats":"heap_memory_usage: 156381360\nnon_heap_memory_usage: 161805792\nloaded_class_count: 16295\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828519000,"args":{"JVM stats":"heap_memory_usage: 157699152\nnon_heap_memory_usage: 161812688\nloaded_class_count: 16295\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828532000,"args":{"JVM stats":"heap_memory_usage: 158345160\nnon_heap_memory_usage: 161864376\nloaded_class_count: 16310\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828534000,"args":{"JVM stats":"heap_memory_usage: 158345160\nnon_heap_memory_usage: 161866424\nloaded_class_count: 16310\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828536000,"args":{"JVM stats":"heap_memory_usage: 158488784\nnon_heap_memory_usage: 161873504\nloaded_class_count: 16313\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828537000,"args":{"JVM stats":"heap_memory_usage: 158488784\nnon_heap_memory_usage: 161873504\nloaded_class_count: 16313\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828540000,"args":{"JVM stats":"heap_memory_usage: 158844744\nnon_heap_memory_usage: 161877000\nloaded_class_count: 16313\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828614000,"args":{"JVM stats":"heap_memory_usage: 168901496\nnon_heap_memory_usage: 161906112\nloaded_class_count: 16313\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828622000,"args":{"JVM stats":"heap_memory_usage: 169349224\nnon_heap_memory_usage: 161911728\nloaded_class_count: 16315\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828624000,"args":{"JVM stats":"heap_memory_usage: 169349224\nnon_heap_memory_usage: 161911728\nloaded_class_count: 16315\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828636000,"args":{"JVM stats":"heap_memory_usage: 169924296\nnon_heap_memory_usage: 161911728\nloaded_class_count: 16315\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828652000,"args":{"JVM stats":"heap_memory_usage: 170524696\nnon_heap_memory_usage: 161937328\nloaded_class_count: 16315\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828655000,"args":{"JVM stats":"heap_memory_usage: 170668320\nnon_heap_memory_usage: 161962952\nloaded_class_count: 16325\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828722000,"args":{"JVM stats":"heap_memory_usage: 171538040\nnon_heap_memory_usage: 162008136\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828724000,"args":{"JVM stats":"heap_memory_usage: 171538040\nnon_heap_memory_usage: 162008136\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828735000,"args":{"JVM stats":"heap_memory_usage: 172517328\nnon_heap_memory_usage: 162011392\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828737000,"args":{"JVM stats":"heap_memory_usage: 172660952\nnon_heap_memory_usage: 162011056\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828746000,"args":{"JVM stats":"heap_memory_usage: 173340984\nnon_heap_memory_usage: 162043896\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828748000,"args":{"JVM stats":"heap_memory_usage: 173408920\nnon_heap_memory_usage: 162043896\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828766000,"args":{"JVM stats":"heap_memory_usage: 174942816\nnon_heap_memory_usage: 162045192\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828768000,"args":{"JVM stats":"heap_memory_usage: 175010480\nnon_heap_memory_usage: 162050312\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828768001,"args":{"JVM stats":"heap_memory_usage: 175010480\nnon_heap_memory_usage: 162050312\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828770000,"args":{"JVM stats":"heap_memory_usage: 175094576\nnon_heap_memory_usage: 162052792\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828773000,"args":{"JVM stats":"heap_memory_usage: 175170464\nnon_heap_memory_usage: 162052792\nloaded_class_count: 16325\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828776000,"args":{"JVM stats":"heap_memory_usage: 175313968\nnon_heap_memory_usage: 162074480\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828793000,"args":{"JVM stats":"heap_memory_usage: 175992032\nnon_heap_memory_usage: 162098416\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828819000,"args":{"JVM stats":"heap_memory_usage: 177216488\nnon_heap_memory_usage: 162105456\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828829000,"args":{"JVM stats":"heap_memory_usage: 177690664\nnon_heap_memory_usage: 162105456\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828844000,"args":{"JVM stats":"heap_memory_usage: 178232224\nnon_heap_memory_usage: 162105456\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828845000,"args":{"JVM stats":"heap_memory_usage: 178299888\nnon_heap_memory_usage: 162105456\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828848000,"args":{"JVM stats":"heap_memory_usage: 178367920\nnon_heap_memory_usage: 162105456\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828852000,"args":{"JVM stats":"heap_memory_usage: 178503480\nnon_heap_memory_usage: 162105456\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446828855000,"args":{"JVM stats":"heap_memory_usage: 178640136\nnon_heap_memory_usage: 162105488\nloaded_class_count: 16326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446829064000,"args":{"JVM stats":"heap_memory_usage: 212944224\nnon_heap_memory_usage: 162266048\nloaded_class_count: 16331\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446829067000,"args":{"JVM stats":"heap_memory_usage: 213333016\nnon_heap_memory_usage: 162270472\nloaded_class_count: 16331\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446829067001,"args":{"JVM stats":"heap_memory_usage: 213333016\nnon_heap_memory_usage: 162270472\nloaded_class_count: 16331\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446829068000,"args":{"JVM stats":"heap_memory_usage: 213333016\nnon_heap_memory_usage: 162270472\nloaded_class_count: 16331\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446829084000,"args":{"JVM stats":"heap_memory_usage: 214044040\nnon_heap_memory_usage: 162285776\nloaded_class_count: 16333\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":20,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827429000,"dur":6000},{"pid":1,"tid":20,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827435000,"dur":4000},{"pid":1,"tid":20,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827439000,"dur":100},{"pid":1,"tid":20,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827439000,"dur":100},{"pid":1,"tid":20,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827443000,"dur":3000},{"pid":1,"tid":20,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827446000,"dur":100},{"pid":1,"tid":20,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827448000,"dur":1000},{"pid":1,"tid":20,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827449000,"dur":100},{"pid":1,"tid":20,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827449000,"dur":1000},{"pid":1,"tid":20,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827450000,"dur":1000},{"pid":1,"tid":20,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827451000,"dur":100},{"pid":1,"tid":20,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827451000,"dur":100},{"pid":1,"tid":20,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827451000,"dur":3000},{"pid":1,"tid":20,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827454000,"dur":1000},{"pid":1,"tid":20,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827455000,"dur":100},{"pid":1,"tid":20,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827455000,"dur":100},{"pid":1,"tid":20,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827456000,"dur":38000},{"pid":1,"tid":20,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827494000,"dur":1000},{"pid":1,"tid":20,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827495000,"dur":5000},{"pid":1,"tid":20,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827501000,"dur":2000},{"pid":1,"tid":20,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827503000,"dur":100},{"pid":1,"tid":20,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446827446000,"dur":57000},{"pid":1,"tid":20,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827503000,"dur":5000},{"pid":1,"tid":20,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827508000,"dur":7000},{"pid":1,"tid":20,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827443000,"dur":74000},{"pid":1,"tid":20,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827517000,"dur":3000},{"pid":1,"tid":20,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446827441000,"dur":79000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446827535000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827538000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827538000,"dur":49000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827587000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827592000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827595000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827597000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827598000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827599000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827599000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446827600000,"dur":207000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827807000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827809000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446827814000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446827815000,"dur":681000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446828497000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828497000,"dur":22000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828520000,"dur":12000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828533000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828535000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828537000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828537000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446828541000,"dur":73000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446828615000,"dur":7000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828623000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828625000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828636000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828652000,"dur":3000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446828655000,"dur":67000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828723000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828726000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446828736000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828737000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828747000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828748000,"dur":18000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828767000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828768000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446828768000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828770000,"dur":3000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828773000,"dur":3000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828777000,"dur":16000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828794000,"dur":25000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828819000,"dur":10000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828830000,"dur":14000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446828844000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828846000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828849000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446828852000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446828855000,"dur":209000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446829064000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446829067000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446829068000,"dur":100},{"pid":1,"tid":20,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446829077000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-09-084.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-09-084.rawproto
new file mode 100644
index 00000000..9ffed99c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-09-084.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-38-866.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-38-866.json
new file mode 100644
index 00000000..9f074a60
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-38-866.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856362000,"args":{"JVM stats":"heap_memory_usage: 269685968\nnon_heap_memory_usage: 162811432\nloaded_class_count: 16395\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856431000,"args":{"JVM stats":"heap_memory_usage: 280934824\nnon_heap_memory_usage: 162954536\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856431001,"args":{"JVM stats":"heap_memory_usage: 280934824\nnon_heap_memory_usage: 162954536\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856479000,"args":{"JVM stats":"heap_memory_usage: 286917496\nnon_heap_memory_usage: 163085392\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856483000,"args":{"JVM stats":"heap_memory_usage: 287355552\nnon_heap_memory_usage: 163104056\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856487000,"args":{"JVM stats":"heap_memory_usage: 287647608\nnon_heap_memory_usage: 163105464\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856487001,"args":{"JVM stats":"heap_memory_usage: 287793128\nnon_heap_memory_usage: 163105464\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856489000,"args":{"JVM stats":"heap_memory_usage: 287793128\nnon_heap_memory_usage: 163105464\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856489001,"args":{"JVM stats":"heap_memory_usage: 287793128\nnon_heap_memory_usage: 163106168\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856490000,"args":{"JVM stats":"heap_memory_usage: 287938648\nnon_heap_memory_usage: 163106168\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856491000,"args":{"JVM stats":"heap_memory_usage: 287938648\nnon_heap_memory_usage: 163106168\nloaded_class_count: 16396\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856706000,"args":{"JVM stats":"heap_memory_usage: 321960280\nnon_heap_memory_usage: 163250304\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856708000,"args":{"JVM stats":"heap_memory_usage: 322189704\nnon_heap_memory_usage: 163251424\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856714000,"args":{"JVM stats":"heap_memory_usage: 323064128\nnon_heap_memory_usage: 163282208\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446856715000,"args":{"JVM stats":"heap_memory_usage: 323213728\nnon_heap_memory_usage: 163282208\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857251000,"args":{"JVM stats":"heap_memory_usage: 337497544\nnon_heap_memory_usage: 163447360\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857251001,"args":{"JVM stats":"heap_memory_usage: 337716808\nnon_heap_memory_usage: 163447360\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857267000,"args":{"JVM stats":"heap_memory_usage: 338994432\nnon_heap_memory_usage: 163454072\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857606000,"args":{"JVM stats":"heap_memory_usage: 381351864\nnon_heap_memory_usage: 163879904\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857608000,"args":{"JVM stats":"heap_memory_usage: 381651104\nnon_heap_memory_usage: 163879904\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857609000,"args":{"JVM stats":"heap_memory_usage: 381651104\nnon_heap_memory_usage: 163880000\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857609001,"args":{"JVM stats":"heap_memory_usage: 381651104\nnon_heap_memory_usage: 163880000\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857613000,"args":{"JVM stats":"heap_memory_usage: 381943176\nnon_heap_memory_usage: 164000320\nloaded_class_count: 16396\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857720000,"args":{"JVM stats":"heap_memory_usage: 145354856\nnon_heap_memory_usage: 164118744\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 25\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857730000,"args":{"JVM stats":"heap_memory_usage: 146931192\nnon_heap_memory_usage: 164118744\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857731000,"args":{"JVM stats":"heap_memory_usage: 147001912\nnon_heap_memory_usage: 164118744\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857786000,"args":{"JVM stats":"heap_memory_usage: 148756800\nnon_heap_memory_usage: 164151256\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857802000,"args":{"JVM stats":"heap_memory_usage: 150148576\nnon_heap_memory_usage: 164152856\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857803000,"args":{"JVM stats":"heap_memory_usage: 150219376\nnon_heap_memory_usage: 164153176\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857864000,"args":{"JVM stats":"heap_memory_usage: 151136976\nnon_heap_memory_usage: 164198008\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857866000,"args":{"JVM stats":"heap_memory_usage: 151207672\nnon_heap_memory_usage: 164198008\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857873000,"args":{"JVM stats":"heap_memory_usage: 151774512\nnon_heap_memory_usage: 164203800\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857875000,"args":{"JVM stats":"heap_memory_usage: 151845440\nnon_heap_memory_usage: 164203800\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857885000,"args":{"JVM stats":"heap_memory_usage: 152866808\nnon_heap_memory_usage: 164251176\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857887000,"args":{"JVM stats":"heap_memory_usage: 152937472\nnon_heap_memory_usage: 164261288\nloaded_class_count: 16396\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857955000,"args":{"JVM stats":"heap_memory_usage: 160341040\nnon_heap_memory_usage: 164392984\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857958000,"args":{"JVM stats":"heap_memory_usage: 160692536\nnon_heap_memory_usage: 164391192\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857959000,"args":{"JVM stats":"heap_memory_usage: 160692536\nnon_heap_memory_usage: 164391760\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857959001,"args":{"JVM stats":"heap_memory_usage: 160854200\nnon_heap_memory_usage: 164393936\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857961000,"args":{"JVM stats":"heap_memory_usage: 160940072\nnon_heap_memory_usage: 164390864\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446857963000,"args":{"JVM stats":"heap_memory_usage: 161096648\nnon_heap_memory_usage: 164395760\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858034000,"args":{"JVM stats":"heap_memory_usage: 163659152\nnon_heap_memory_usage: 164422512\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858235000,"args":{"JVM stats":"heap_memory_usage: 211615072\nnon_heap_memory_usage: 164877624\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858251000,"args":{"JVM stats":"heap_memory_usage: 212838144\nnon_heap_memory_usage: 164884984\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858298000,"args":{"JVM stats":"heap_memory_usage: 227249176\nnon_heap_memory_usage: 164903760\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858299000,"args":{"JVM stats":"heap_memory_usage: 227351496\nnon_heap_memory_usage: 164907296\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858306000,"args":{"JVM stats":"heap_memory_usage: 227865760\nnon_heap_memory_usage: 164917064\nloaded_class_count: 16396\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858611000,"args":{"JVM stats":"heap_memory_usage: 279233456\nnon_heap_memory_usage: 165119328\nloaded_class_count: 16410\nthread_count: 68\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858614000,"args":{"JVM stats":"heap_memory_usage: 279464776\nnon_heap_memory_usage: 165078752\nloaded_class_count: 16410\nthread_count: 68\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858847000,"args":{"JVM stats":"heap_memory_usage: 356316568\nnon_heap_memory_usage: 165173896\nloaded_class_count: 16410\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858850000,"args":{"JVM stats":"heap_memory_usage: 356745920\nnon_heap_memory_usage: 165179192\nloaded_class_count: 16410\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858850001,"args":{"JVM stats":"heap_memory_usage: 356745920\nnon_heap_memory_usage: 165187896\nloaded_class_count: 16410\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858851000,"args":{"JVM stats":"heap_memory_usage: 356745920\nnon_heap_memory_usage: 165190328\nloaded_class_count: 16410\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446858866000,"args":{"JVM stats":"heap_memory_usage: 357644488\nnon_heap_memory_usage: 165214056\nloaded_class_count: 16410\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":20,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856362000,"dur":3000},{"pid":1,"tid":20,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856365000,"dur":3000},{"pid":1,"tid":20,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856368000,"dur":100},{"pid":1,"tid":20,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856368000,"dur":100},{"pid":1,"tid":20,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856372000,"dur":2000},{"pid":1,"tid":20,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856374000,"dur":100},{"pid":1,"tid":20,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856374000,"dur":1000},{"pid":1,"tid":20,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856375000,"dur":100},{"pid":1,"tid":20,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856375000,"dur":100},{"pid":1,"tid":20,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856375000,"dur":100},{"pid":1,"tid":20,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856375000,"dur":100},{"pid":1,"tid":20,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856375000,"dur":1000},{"pid":1,"tid":20,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856376000,"dur":1000},{"pid":1,"tid":20,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856377000,"dur":1000},{"pid":1,"tid":20,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856378000,"dur":100},{"pid":1,"tid":20,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856378000,"dur":100},{"pid":1,"tid":20,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856378000,"dur":22000},{"pid":1,"tid":20,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856400000,"dur":100},{"pid":1,"tid":20,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856400000,"dur":5000},{"pid":1,"tid":20,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856407000,"dur":1000},{"pid":1,"tid":20,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856408000,"dur":100},{"pid":1,"tid":20,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446856374000,"dur":34000},{"pid":1,"tid":20,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856408000,"dur":3000},{"pid":1,"tid":20,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856411000,"dur":5000},{"pid":1,"tid":20,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856371000,"dur":45000},{"pid":1,"tid":20,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856417000,"dur":1000},{"pid":1,"tid":20,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446856370000,"dur":48000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446856430000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856431000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856432000,"dur":47000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856479000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856484000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856487000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856488000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856489000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856490000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856490000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446856491000,"dur":215000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856706000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856710000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446856715000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446856716000,"dur":534000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857251000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857252000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857267000,"dur":339000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857607000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857608000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857609000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857610000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857613000,"dur":107000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857724000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857730000,"dur":1000},{"pid":1,"tid":21,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446857743000,"dur":1000},{"pid":1,"tid":21,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446857744000,"dur":2000},{"pid":1,"tid":21,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518446857744000,"dur":30000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857732000,"dur":54000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857786000,"dur":16000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857803000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857804000,"dur":60000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857864000,"dur":2000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857866000,"dur":7000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857874000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857876000,"dur":9000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857885000,"dur":1000},{"pid":1,"tid":21,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446857906000,"dur":6000},{"pid":1,"tid":21,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518446857912000,"dur":33000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857887000,"dur":68000},{"pid":1,"tid":21,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446857957000,"dur":1000},{"pid":1,"tid":21,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518446857958000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857956000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857958000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857959000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857960000,"dur":100},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446857961000,"dur":2000},{"pid":1,"tid":21,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446857978000,"dur":1000},{"pid":1,"tid":21,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518446857979000,"dur":38000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446857963000,"dur":71000},{"pid":1,"tid":21,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446858061000,"dur":1000},{"pid":1,"tid":21,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518446858062000,"dur":159000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858034000,"dur":201000},{"pid":1,"tid":21,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446858247000,"dur":2000},{"pid":1,"tid":21,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518446858249000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858235000,"dur":16000},{"pid":1,"tid":21,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446858265000,"dur":1000},{"pid":1,"tid":21,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518446858266000,"dur":25000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858252000,"dur":45000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858298000,"dur":1000},{"pid":1,"tid":21,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446858302000,"dur":1000},{"pid":1,"tid":21,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518446858303000,"dur":2000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858299000,"dur":7000},{"pid":1,"tid":21,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446858309000,"dur":1000},{"pid":1,"tid":21,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518446858310000,"dur":300000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858306000,"dur":305000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446858612000,"dur":2000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858614000,"dur":233000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858848000,"dur":2000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858850000,"dur":100},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446858850000,"dur":1000},{"pid":1,"tid":20,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446858856000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-38-866.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-38-866.rawproto
new file mode 100644
index 00000000..fd448aa0
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-47-38-866.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-49-46-516.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-49-46-516.json
new file mode 100644
index 00000000..3e0baf8d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-49-46-516.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518446984982000,"args":{"JVM stats":"heap_memory_usage: 128864680\nnon_heap_memory_usage: 165336464\nloaded_class_count: 16417\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 35\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985073000,"args":{"JVM stats":"heap_memory_usage: 140075912\nnon_heap_memory_usage: 165537248\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985073001,"args":{"JVM stats":"heap_memory_usage: 140075912\nnon_heap_memory_usage: 165537248\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985115000,"args":{"JVM stats":"heap_memory_usage: 146961600\nnon_heap_memory_usage: 165586224\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985120000,"args":{"JVM stats":"heap_memory_usage: 147128224\nnon_heap_memory_usage: 165588272\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985123000,"args":{"JVM stats":"heap_memory_usage: 147461416\nnon_heap_memory_usage: 165588272\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985123001,"args":{"JVM stats":"heap_memory_usage: 147461416\nnon_heap_memory_usage: 165588272\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985124000,"args":{"JVM stats":"heap_memory_usage: 147461416\nnon_heap_memory_usage: 165588272\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985124001,"args":{"JVM stats":"heap_memory_usage: 147628952\nnon_heap_memory_usage: 165588272\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985125000,"args":{"JVM stats":"heap_memory_usage: 147628952\nnon_heap_memory_usage: 165588944\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985125001,"args":{"JVM stats":"heap_memory_usage: 147628952\nnon_heap_memory_usage: 165588944\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985286000,"args":{"JVM stats":"heap_memory_usage: 183383728\nnon_heap_memory_usage: 165681072\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985287000,"args":{"JVM stats":"heap_memory_usage: 183615808\nnon_heap_memory_usage: 165681736\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985291000,"args":{"JVM stats":"heap_memory_usage: 183952944\nnon_heap_memory_usage: 165692808\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985292000,"args":{"JVM stats":"heap_memory_usage: 184185032\nnon_heap_memory_usage: 165692808\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985983000,"args":{"JVM stats":"heap_memory_usage: 199565512\nnon_heap_memory_usage: 165909728\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446985984000,"args":{"JVM stats":"heap_memory_usage: 199565512\nnon_heap_memory_usage: 165913376\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986018000,"args":{"JVM stats":"heap_memory_usage: 201097584\nnon_heap_memory_usage: 165951952\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986035000,"args":{"JVM stats":"heap_memory_usage: 201763904\nnon_heap_memory_usage: 165949472\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986037000,"args":{"JVM stats":"heap_memory_usage: 201763904\nnon_heap_memory_usage: 165943520\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986039000,"args":{"JVM stats":"heap_memory_usage: 201930400\nnon_heap_memory_usage: 165912928\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986041000,"args":{"JVM stats":"heap_memory_usage: 201930400\nnon_heap_memory_usage: 165905312\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986044000,"args":{"JVM stats":"heap_memory_usage: 201930400\nnon_heap_memory_usage: 165865536\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986108000,"args":{"JVM stats":"heap_memory_usage: 211645784\nnon_heap_memory_usage: 165823104\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986113000,"args":{"JVM stats":"heap_memory_usage: 212170080\nnon_heap_memory_usage: 165823104\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986116000,"args":{"JVM stats":"heap_memory_usage: 212170080\nnon_heap_memory_usage: 165829376\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986124000,"args":{"JVM stats":"heap_memory_usage: 212669896\nnon_heap_memory_usage: 165841720\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986140000,"args":{"JVM stats":"heap_memory_usage: 213505160\nnon_heap_memory_usage: 165917088\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986141000,"args":{"JVM stats":"heap_memory_usage: 213505160\nnon_heap_memory_usage: 165917088\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986192000,"args":{"JVM stats":"heap_memory_usage: 214337720\nnon_heap_memory_usage: 165917088\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986193000,"args":{"JVM stats":"heap_memory_usage: 214504544\nnon_heap_memory_usage: 165917088\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986203000,"args":{"JVM stats":"heap_memory_usage: 215170752\nnon_heap_memory_usage: 165917792\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986204000,"args":{"JVM stats":"heap_memory_usage: 215170752\nnon_heap_memory_usage: 165917792\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986211000,"args":{"JVM stats":"heap_memory_usage: 216169888\nnon_heap_memory_usage: 165925000\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986212000,"args":{"JVM stats":"heap_memory_usage: 216169888\nnon_heap_memory_usage: 165937608\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986225000,"args":{"JVM stats":"heap_memory_usage: 217836880\nnon_heap_memory_usage: 165983368\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986226000,"args":{"JVM stats":"heap_memory_usage: 217836880\nnon_heap_memory_usage: 165983368\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986226001,"args":{"JVM stats":"heap_memory_usage: 217836880\nnon_heap_memory_usage: 165983368\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986227000,"args":{"JVM stats":"heap_memory_usage: 218003440\nnon_heap_memory_usage: 165983368\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986229000,"args":{"JVM stats":"heap_memory_usage: 218003440\nnon_heap_memory_usage: 165983368\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986230000,"args":{"JVM stats":"heap_memory_usage: 218086888\nnon_heap_memory_usage: 165983368\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986249000,"args":{"JVM stats":"heap_memory_usage: 218920344\nnon_heap_memory_usage: 165983368\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986282000,"args":{"JVM stats":"heap_memory_usage: 220755104\nnon_heap_memory_usage: 165995528\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986294000,"args":{"JVM stats":"heap_memory_usage: 221505104\nnon_heap_memory_usage: 166001096\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986311000,"args":{"JVM stats":"heap_memory_usage: 222422408\nnon_heap_memory_usage: 166001096\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986312000,"args":{"JVM stats":"heap_memory_usage: 222422408\nnon_heap_memory_usage: 166001096\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986317000,"args":{"JVM stats":"heap_memory_usage: 222672352\nnon_heap_memory_usage: 166039584\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986322000,"args":{"JVM stats":"heap_memory_usage: 223005776\nnon_heap_memory_usage: 166050360\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986323000,"args":{"JVM stats":"heap_memory_usage: 223172272\nnon_heap_memory_usage: 166056280\nloaded_class_count: 16421\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986494000,"args":{"JVM stats":"heap_memory_usage: 256606072\nnon_heap_memory_usage: 166108176\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986497000,"args":{"JVM stats":"heap_memory_usage: 256939472\nnon_heap_memory_usage: 166111192\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986497001,"args":{"JVM stats":"heap_memory_usage: 256939472\nnon_heap_memory_usage: 166111192\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986498000,"args":{"JVM stats":"heap_memory_usage: 256939472\nnon_heap_memory_usage: 166111192\nloaded_class_count: 16421\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518446986516000,"args":{"JVM stats":"heap_memory_usage: 258147232\nnon_heap_memory_usage: 166150728\nloaded_class_count: 16421\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":22,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446984983000,"dur":3000},{"pid":1,"tid":22,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446984986000,"dur":3000},{"pid":1,"tid":22,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446984989000,"dur":100},{"pid":1,"tid":22,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446984989000,"dur":100},{"pid":1,"tid":22,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446984992000,"dur":2000},{"pid":1,"tid":22,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446984994000,"dur":1000},{"pid":1,"tid":22,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446984995000,"dur":1000},{"pid":1,"tid":22,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446984996000,"dur":100},{"pid":1,"tid":22,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446984996000,"dur":1000},{"pid":1,"tid":22,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446984997000,"dur":100},{"pid":1,"tid":22,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446984997000,"dur":1000},{"pid":1,"tid":22,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446984998000,"dur":100},{"pid":1,"tid":22,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446984998000,"dur":3000},{"pid":1,"tid":22,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446985001000,"dur":1000},{"pid":1,"tid":22,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446985002000,"dur":100},{"pid":1,"tid":22,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446985002000,"dur":100},{"pid":1,"tid":22,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446985002000,"dur":36000},{"pid":1,"tid":22,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446985038000,"dur":1000},{"pid":1,"tid":22,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446985039000,"dur":3000},{"pid":1,"tid":22,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446985043000,"dur":2000},{"pid":1,"tid":22,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446985045000,"dur":100},{"pid":1,"tid":22,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518446984995000,"dur":50000},{"pid":1,"tid":22,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446985045000,"dur":3000},{"pid":1,"tid":22,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446985048000,"dur":6000},{"pid":1,"tid":22,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446984992000,"dur":63000},{"pid":1,"tid":22,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446985055000,"dur":2000},{"pid":1,"tid":22,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446984991000,"dur":66000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446985071000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985073000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985074000,"dur":41000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985115000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985120000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985123000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985123000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985124000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985125000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985125000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446985126000,"dur":160000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985286000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985288000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985292000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446985293000,"dur":689000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446985983000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446985985000,"dur":33000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986020000,"dur":15000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986036000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986038000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986040000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986041000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986045000,"dur":63000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986109000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986114000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986116000,"dur":8000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986124000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986140000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986141000,"dur":51000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986192000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986193000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986203000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986204000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986211000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986213000,"dur":12000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986226000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986226000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986227000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986227000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986229000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986231000,"dur":17000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986249000,"dur":33000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986283000,"dur":11000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986294000,"dur":17000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986311000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986313000,"dur":4000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986317000,"dur":5000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518446986322000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986324000,"dur":170000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986495000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986497000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518446986498000,"dur":100},{"pid":1,"tid":22,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518446986508000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-49-46-516.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-49-46-516.rawproto
new file mode 100644
index 00000000..cbb6f809
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-49-46-516.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-50-40-698.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-50-40-698.json
new file mode 100644
index 00000000..7dd7ff25
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-50-40-698.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038691000,"args":{"JVM stats":"heap_memory_usage: 313732784\nnon_heap_memory_usage: 166190888\nloaded_class_count: 16430\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038828000,"args":{"JVM stats":"heap_memory_usage: 324768352\nnon_heap_memory_usage: 166431720\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038829000,"args":{"JVM stats":"heap_memory_usage: 324768352\nnon_heap_memory_usage: 166431720\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038882000,"args":{"JVM stats":"heap_memory_usage: 331446864\nnon_heap_memory_usage: 166548848\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038887000,"args":{"JVM stats":"heap_memory_usage: 331780512\nnon_heap_memory_usage: 166548848\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038891000,"args":{"JVM stats":"heap_memory_usage: 332114064\nnon_heap_memory_usage: 166553648\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038892000,"args":{"JVM stats":"heap_memory_usage: 332114064\nnon_heap_memory_usage: 166553648\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038893000,"args":{"JVM stats":"heap_memory_usage: 332114064\nnon_heap_memory_usage: 166553648\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038894000,"args":{"JVM stats":"heap_memory_usage: 332114064\nnon_heap_memory_usage: 166553648\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038895000,"args":{"JVM stats":"heap_memory_usage: 332281600\nnon_heap_memory_usage: 166553648\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447038896000,"args":{"JVM stats":"heap_memory_usage: 332281600\nnon_heap_memory_usage: 166553648\nloaded_class_count: 16430\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447039103000,"args":{"JVM stats":"heap_memory_usage: 366324448\nnon_heap_memory_usage: 166595752\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447039104000,"args":{"JVM stats":"heap_memory_usage: 366556528\nnon_heap_memory_usage: 166598568\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447039112000,"args":{"JVM stats":"heap_memory_usage: 367125792\nnon_heap_memory_usage: 166599608\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447039114000,"args":{"JVM stats":"heap_memory_usage: 367292288\nnon_heap_memory_usage: 166603248\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040087000,"args":{"JVM stats":"heap_memory_usage: 114574832\nnon_heap_memory_usage: 166650768\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 39\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040088000,"args":{"JVM stats":"heap_memory_usage: 115905912\nnon_heap_memory_usage: 166648656\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040108000,"args":{"JVM stats":"heap_memory_usage: 117745368\nnon_heap_memory_usage: 166653328\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040122000,"args":{"JVM stats":"heap_memory_usage: 118233112\nnon_heap_memory_usage: 166648416\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040126000,"args":{"JVM stats":"heap_memory_usage: 118233112\nnon_heap_memory_usage: 166651872\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040129000,"args":{"JVM stats":"heap_memory_usage: 118233112\nnon_heap_memory_usage: 166650720\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040129001,"args":{"JVM stats":"heap_memory_usage: 118233112\nnon_heap_memory_usage: 166650720\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040134000,"args":{"JVM stats":"heap_memory_usage: 118478984\nnon_heap_memory_usage: 166649888\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040205000,"args":{"JVM stats":"heap_memory_usage: 127242192\nnon_heap_memory_usage: 166674272\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040212000,"args":{"JVM stats":"heap_memory_usage: 127602024\nnon_heap_memory_usage: 166674272\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040214000,"args":{"JVM stats":"heap_memory_usage: 127682920\nnon_heap_memory_usage: 166674272\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040227000,"args":{"JVM stats":"heap_memory_usage: 128249664\nnon_heap_memory_usage: 166674272\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040245000,"args":{"JVM stats":"heap_memory_usage: 129017968\nnon_heap_memory_usage: 166674272\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040246000,"args":{"JVM stats":"heap_memory_usage: 129098888\nnon_heap_memory_usage: 166675232\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040311000,"args":{"JVM stats":"heap_memory_usage: 129793272\nnon_heap_memory_usage: 166681800\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040314000,"args":{"JVM stats":"heap_memory_usage: 129874192\nnon_heap_memory_usage: 166682088\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040326000,"args":{"JVM stats":"heap_memory_usage: 130876320\nnon_heap_memory_usage: 166683112\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040328000,"args":{"JVM stats":"heap_memory_usage: 130957320\nnon_heap_memory_usage: 166683112\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040341000,"args":{"JVM stats":"heap_memory_usage: 131608720\nnon_heap_memory_usage: 166683688\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040343000,"args":{"JVM stats":"heap_memory_usage: 131689584\nnon_heap_memory_usage: 166684600\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040367000,"args":{"JVM stats":"heap_memory_usage: 133347912\nnon_heap_memory_usage: 166703328\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040372000,"args":{"JVM stats":"heap_memory_usage: 133347912\nnon_heap_memory_usage: 166713120\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040372001,"args":{"JVM stats":"heap_memory_usage: 133428776\nnon_heap_memory_usage: 166713120\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040373000,"args":{"JVM stats":"heap_memory_usage: 133453384\nnon_heap_memory_usage: 166720928\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040377000,"args":{"JVM stats":"heap_memory_usage: 133534352\nnon_heap_memory_usage: 166732448\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040379000,"args":{"JVM stats":"heap_memory_usage: 133534352\nnon_heap_memory_usage: 166732448\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040401000,"args":{"JVM stats":"heap_memory_usage: 134263416\nnon_heap_memory_usage: 166732448\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040434000,"args":{"JVM stats":"heap_memory_usage: 135661584\nnon_heap_memory_usage: 166732448\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040445000,"args":{"JVM stats":"heap_memory_usage: 136147032\nnon_heap_memory_usage: 166732448\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040456000,"args":{"JVM stats":"heap_memory_usage: 136713416\nnon_heap_memory_usage: 166736376\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040459000,"args":{"JVM stats":"heap_memory_usage: 136713416\nnon_heap_memory_usage: 166736376\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040463000,"args":{"JVM stats":"heap_memory_usage: 136875688\nnon_heap_memory_usage: 166736376\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040467000,"args":{"JVM stats":"heap_memory_usage: 137037456\nnon_heap_memory_usage: 166747640\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040470000,"args":{"JVM stats":"heap_memory_usage: 137118448\nnon_heap_memory_usage: 166775160\nloaded_class_count: 16430\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040677000,"args":{"JVM stats":"heap_memory_usage: 169794968\nnon_heap_memory_usage: 166843960\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040680000,"args":{"JVM stats":"heap_memory_usage: 170123312\nnon_heap_memory_usage: 166846584\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040680001,"args":{"JVM stats":"heap_memory_usage: 170123312\nnon_heap_memory_usage: 166846584\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040681000,"args":{"JVM stats":"heap_memory_usage: 170123312\nnon_heap_memory_usage: 166846584\nloaded_class_count: 16430\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447040699000,"args":{"JVM stats":"heap_memory_usage: 171045848\nnon_heap_memory_usage: 166854344\nloaded_class_count: 16430\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":22,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038691000,"dur":9000},{"pid":1,"tid":22,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038700000,"dur":4000},{"pid":1,"tid":22,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038704000,"dur":3000},{"pid":1,"tid":22,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038704000,"dur":3000},{"pid":1,"tid":22,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038714000,"dur":4000},{"pid":1,"tid":22,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038718000,"dur":100},{"pid":1,"tid":22,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038719000,"dur":1000},{"pid":1,"tid":22,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038720000,"dur":1000},{"pid":1,"tid":22,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038721000,"dur":1000},{"pid":1,"tid":22,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038722000,"dur":1000},{"pid":1,"tid":22,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038723000,"dur":1000},{"pid":1,"tid":22,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038724000,"dur":100},{"pid":1,"tid":22,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038724000,"dur":5000},{"pid":1,"tid":22,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038729000,"dur":1000},{"pid":1,"tid":22,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038730000,"dur":100},{"pid":1,"tid":22,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038730000,"dur":100},{"pid":1,"tid":22,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038730000,"dur":46000},{"pid":1,"tid":22,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038776000,"dur":1000},{"pid":1,"tid":22,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038777000,"dur":7000},{"pid":1,"tid":22,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038785000,"dur":1000},{"pid":1,"tid":22,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038786000,"dur":100},{"pid":1,"tid":22,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447038718000,"dur":68000},{"pid":1,"tid":22,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038786000,"dur":4000},{"pid":1,"tid":22,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038790000,"dur":10000},{"pid":1,"tid":22,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038714000,"dur":88000},{"pid":1,"tid":22,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038803000,"dur":2000},{"pid":1,"tid":22,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447038710000,"dur":95000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447038826000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038829000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038829000,"dur":53000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038883000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038887000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038891000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038892000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038894000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038895000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447038896000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447038896000,"dur":207000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447039104000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447039105000,"dur":7000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447039113000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447039116000,"dur":971000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040087000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040088000,"dur":20000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040109000,"dur":13000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040123000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040128000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040129000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040130000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040135000,"dur":70000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040205000,"dur":7000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040213000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040215000,"dur":12000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040228000,"dur":17000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040246000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040246000,"dur":65000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040312000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040315000,"dur":10000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040327000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040329000,"dur":12000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040342000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040344000,"dur":23000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040369000,"dur":3000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040372000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040373000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040374000,"dur":3000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040378000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040380000,"dur":21000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040402000,"dur":32000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040435000,"dur":10000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040445000,"dur":11000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040457000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040460000,"dur":3000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040463000,"dur":4000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447040468000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040470000,"dur":207000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040677000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040680000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447040681000,"dur":100},{"pid":1,"tid":22,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447040688000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-50-40-698.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-50-40-698.rawproto
new file mode 100644
index 00000000..6ca66ded
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-50-40-698.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-05-318.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-05-318.json
new file mode 100644
index 00000000..3d736ec5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-05-318.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447063935000,"args":{"JVM stats":"heap_memory_usage: 227617112\nnon_heap_memory_usage: 167688616\nloaded_class_count: 16593\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064028000,"args":{"JVM stats":"heap_memory_usage: 238979528\nnon_heap_memory_usage: 168310272\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064028001,"args":{"JVM stats":"heap_memory_usage: 239100824\nnon_heap_memory_usage: 168315648\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064065000,"args":{"JVM stats":"heap_memory_usage: 245469240\nnon_heap_memory_usage: 168353248\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064071000,"args":{"JVM stats":"heap_memory_usage: 245954784\nnon_heap_memory_usage: 168354400\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064073000,"args":{"JVM stats":"heap_memory_usage: 246197432\nnon_heap_memory_usage: 168354400\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064074000,"args":{"JVM stats":"heap_memory_usage: 246197432\nnon_heap_memory_usage: 168354400\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064075000,"args":{"JVM stats":"heap_memory_usage: 246318728\nnon_heap_memory_usage: 168354400\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064075001,"args":{"JVM stats":"heap_memory_usage: 246318728\nnon_heap_memory_usage: 168354400\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064076000,"args":{"JVM stats":"heap_memory_usage: 246440024\nnon_heap_memory_usage: 168354400\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064076001,"args":{"JVM stats":"heap_memory_usage: 246440024\nnon_heap_memory_usage: 168354400\nloaded_class_count: 16707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064215000,"args":{"JVM stats":"heap_memory_usage: 279452264\nnon_heap_memory_usage: 168470128\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064216000,"args":{"JVM stats":"heap_memory_usage: 279826008\nnon_heap_memory_usage: 168472240\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064221000,"args":{"JVM stats":"heap_memory_usage: 280705256\nnon_heap_memory_usage: 168472240\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064222000,"args":{"JVM stats":"heap_memory_usage: 280843904\nnon_heap_memory_usage: 168472240\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064791000,"args":{"JVM stats":"heap_memory_usage: 294983728\nnon_heap_memory_usage: 168713080\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064792000,"args":{"JVM stats":"heap_memory_usage: 295170608\nnon_heap_memory_usage: 168713080\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064812000,"args":{"JVM stats":"heap_memory_usage: 295915424\nnon_heap_memory_usage: 168708280\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064822000,"args":{"JVM stats":"heap_memory_usage: 296643744\nnon_heap_memory_usage: 168708280\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064824000,"args":{"JVM stats":"heap_memory_usage: 296765072\nnon_heap_memory_usage: 168708280\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064826000,"args":{"JVM stats":"heap_memory_usage: 296765072\nnon_heap_memory_usage: 168708280\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064826001,"args":{"JVM stats":"heap_memory_usage: 296765072\nnon_heap_memory_usage: 168708280\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064830000,"args":{"JVM stats":"heap_memory_usage: 297129152\nnon_heap_memory_usage: 168708280\nloaded_class_count: 16707\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064900000,"args":{"JVM stats":"heap_memory_usage: 305875144\nnon_heap_memory_usage: 168707160\nloaded_class_count: 16707\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064905000,"args":{"JVM stats":"heap_memory_usage: 306242760\nnon_heap_memory_usage: 168707160\nloaded_class_count: 16707\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064906000,"args":{"JVM stats":"heap_memory_usage: 306364096\nnon_heap_memory_usage: 168707160\nloaded_class_count: 16707\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064919000,"args":{"JVM stats":"heap_memory_usage: 306850000\nnon_heap_memory_usage: 168707160\nloaded_class_count: 16707\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064935000,"args":{"JVM stats":"heap_memory_usage: 307830000\nnon_heap_memory_usage: 168721752\nloaded_class_count: 16707\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447064936000,"args":{"JVM stats":"heap_memory_usage: 307830000\nnon_heap_memory_usage: 168717400\nloaded_class_count: 16707\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065002000,"args":{"JVM stats":"heap_memory_usage: 308557848\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065004000,"args":{"JVM stats":"heap_memory_usage: 308679144\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065013000,"args":{"JVM stats":"heap_memory_usage: 309408712\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065016000,"args":{"JVM stats":"heap_memory_usage: 309408712\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065023000,"args":{"JVM stats":"heap_memory_usage: 310015744\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065024000,"args":{"JVM stats":"heap_memory_usage: 310015744\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065042000,"args":{"JVM stats":"heap_memory_usage: 311837960\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065043000,"args":{"JVM stats":"heap_memory_usage: 311961320\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065044000,"args":{"JVM stats":"heap_memory_usage: 311961320\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065046000,"args":{"JVM stats":"heap_memory_usage: 311961320\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065048000,"args":{"JVM stats":"heap_memory_usage: 312082616\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065050000,"args":{"JVM stats":"heap_memory_usage: 312082616\nnon_heap_memory_usage: 168703320\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065066000,"args":{"JVM stats":"heap_memory_usage: 312810720\nnon_heap_memory_usage: 168679736\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065086000,"args":{"JVM stats":"heap_memory_usage: 314152776\nnon_heap_memory_usage: 168720760\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065095000,"args":{"JVM stats":"heap_memory_usage: 314638376\nnon_heap_memory_usage: 168720760\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065104000,"args":{"JVM stats":"heap_memory_usage: 315245576\nnon_heap_memory_usage: 168720760\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065105000,"args":{"JVM stats":"heap_memory_usage: 315245576\nnon_heap_memory_usage: 168720760\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065107000,"args":{"JVM stats":"heap_memory_usage: 315366896\nnon_heap_memory_usage: 168720760\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065110000,"args":{"JVM stats":"heap_memory_usage: 315488464\nnon_heap_memory_usage: 168720760\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065113000,"args":{"JVM stats":"heap_memory_usage: 315609760\nnon_heap_memory_usage: 168720760\nloaded_class_count: 16709\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065295000,"args":{"JVM stats":"heap_memory_usage: 348236944\nnon_heap_memory_usage: 168749832\nloaded_class_count: 16709\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065299000,"args":{"JVM stats":"heap_memory_usage: 348777216\nnon_heap_memory_usage: 168745848\nloaded_class_count: 16709\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065300000,"args":{"JVM stats":"heap_memory_usage: 348777216\nnon_heap_memory_usage: 168745848\nloaded_class_count: 16709\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065300001,"args":{"JVM stats":"heap_memory_usage: 348777216\nnon_heap_memory_usage: 168745848\nloaded_class_count: 16709\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447065318000,"args":{"JVM stats":"heap_memory_usage: 349618856\nnon_heap_memory_usage: 168749200\nloaded_class_count: 16711\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":22,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063935000,"dur":6000},{"pid":1,"tid":22,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063941000,"dur":6000},{"pid":1,"tid":22,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063947000,"dur":2000},{"pid":1,"tid":22,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063947000,"dur":2000},{"pid":1,"tid":22,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063958000,"dur":2000},{"pid":1,"tid":22,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063960000,"dur":1000},{"pid":1,"tid":22,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063962000,"dur":100},{"pid":1,"tid":22,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063962000,"dur":100},{"pid":1,"tid":22,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063962000,"dur":1000},{"pid":1,"tid":22,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063963000,"dur":1000},{"pid":1,"tid":22,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063964000,"dur":100},{"pid":1,"tid":22,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063964000,"dur":1000},{"pid":1,"tid":22,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063965000,"dur":2000},{"pid":1,"tid":22,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063967000,"dur":100},{"pid":1,"tid":22,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063967000,"dur":100},{"pid":1,"tid":22,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063967000,"dur":100},{"pid":1,"tid":22,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063967000,"dur":21000},{"pid":1,"tid":22,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063988000,"dur":1000},{"pid":1,"tid":22,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063989000,"dur":4000},{"pid":1,"tid":22,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063995000,"dur":3000},{"pid":1,"tid":22,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063998000,"dur":100},{"pid":1,"tid":22,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447063961000,"dur":37000},{"pid":1,"tid":22,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063998000,"dur":3000},{"pid":1,"tid":22,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447064001000,"dur":6000},{"pid":1,"tid":22,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063958000,"dur":51000},{"pid":1,"tid":22,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447064010000,"dur":2000},{"pid":1,"tid":22,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447063956000,"dur":56000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447064027000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064028000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064028000,"dur":37000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064066000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064071000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064074000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064074000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064075000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064075000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064076000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447064077000,"dur":137000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064215000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064218000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064222000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447064223000,"dur":567000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447064791000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064793000,"dur":19000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064813000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064822000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064825000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064826000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064827000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447064831000,"dur":69000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447064901000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064905000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064907000,"dur":12000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064919000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447064936000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447064936000,"dur":66000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065003000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065005000,"dur":8000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447065014000,"dur":2000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065016000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065024000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065025000,"dur":17000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065043000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065044000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447065044000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065047000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065049000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065050000,"dur":16000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065068000,"dur":18000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065087000,"dur":8000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065095000,"dur":9000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447065105000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065106000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065108000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447065111000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447065114000,"dur":181000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447065296000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447065300000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447065300000,"dur":100},{"pid":1,"tid":22,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447065307000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-05-318.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-05-318.rawproto
new file mode 100644
index 00000000..6739c114
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-05-318.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-38-886.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-38-886.json
new file mode 100644
index 00000000..2aefa31c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-38-886.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097454000,"args":{"JVM stats":"heap_memory_usage: 133937056\nnon_heap_memory_usage: 168748872\nloaded_class_count: 16726\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 21\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097541000,"args":{"JVM stats":"heap_memory_usage: 144681736\nnon_heap_memory_usage: 168844456\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097541001,"args":{"JVM stats":"heap_memory_usage: 144822096\nnon_heap_memory_usage: 168849320\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097593000,"args":{"JVM stats":"heap_memory_usage: 151142488\nnon_heap_memory_usage: 168871584\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097597000,"args":{"JVM stats":"heap_memory_usage: 151282800\nnon_heap_memory_usage: 168871584\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097601000,"args":{"JVM stats":"heap_memory_usage: 151844112\nnon_heap_memory_usage: 168892752\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097602000,"args":{"JVM stats":"heap_memory_usage: 151844112\nnon_heap_memory_usage: 168891920\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097604000,"args":{"JVM stats":"heap_memory_usage: 151984392\nnon_heap_memory_usage: 168891920\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097605000,"args":{"JVM stats":"heap_memory_usage: 151984392\nnon_heap_memory_usage: 168891920\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097606000,"args":{"JVM stats":"heap_memory_usage: 151984392\nnon_heap_memory_usage: 168892624\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097607000,"args":{"JVM stats":"heap_memory_usage: 151984392\nnon_heap_memory_usage: 168892624\nloaded_class_count: 16738\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097811000,"args":{"JVM stats":"heap_memory_usage: 185831816\nnon_heap_memory_usage: 169007280\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097814000,"args":{"JVM stats":"heap_memory_usage: 186208232\nnon_heap_memory_usage: 169007280\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097824000,"args":{"JVM stats":"heap_memory_usage: 187250584\nnon_heap_memory_usage: 169007984\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447097825000,"args":{"JVM stats":"heap_memory_usage: 187250584\nnon_heap_memory_usage: 169008816\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098389000,"args":{"JVM stats":"heap_memory_usage: 201621408\nnon_heap_memory_usage: 168868336\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098390000,"args":{"JVM stats":"heap_memory_usage: 201686960\nnon_heap_memory_usage: 168868336\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098408000,"args":{"JVM stats":"heap_memory_usage: 202665968\nnon_heap_memory_usage: 168870896\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098417000,"args":{"JVM stats":"heap_memory_usage: 203508296\nnon_heap_memory_usage: 168872592\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098420000,"args":{"JVM stats":"heap_memory_usage: 203648904\nnon_heap_memory_usage: 168872592\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098421000,"args":{"JVM stats":"heap_memory_usage: 203648904\nnon_heap_memory_usage: 168872592\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098421001,"args":{"JVM stats":"heap_memory_usage: 203789232\nnon_heap_memory_usage: 168872592\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098424000,"args":{"JVM stats":"heap_memory_usage: 203929560\nnon_heap_memory_usage: 168872592\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098480000,"args":{"JVM stats":"heap_memory_usage: 212499600\nnon_heap_memory_usage: 168896592\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098483000,"args":{"JVM stats":"heap_memory_usage: 212920880\nnon_heap_memory_usage: 168898760\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098486000,"args":{"JVM stats":"heap_memory_usage: 212920880\nnon_heap_memory_usage: 168898760\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098498000,"args":{"JVM stats":"heap_memory_usage: 213482264\nnon_heap_memory_usage: 168898760\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098516000,"args":{"JVM stats":"heap_memory_usage: 214214920\nnon_heap_memory_usage: 168898760\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098519000,"args":{"JVM stats":"heap_memory_usage: 214214920\nnon_heap_memory_usage: 168898760\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098575000,"args":{"JVM stats":"heap_memory_usage: 214930688\nnon_heap_memory_usage: 168898824\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098580000,"args":{"JVM stats":"heap_memory_usage: 214930688\nnon_heap_memory_usage: 168898824\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098590000,"args":{"JVM stats":"heap_memory_usage: 215772536\nnon_heap_memory_usage: 168898824\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098591000,"args":{"JVM stats":"heap_memory_usage: 215772536\nnon_heap_memory_usage: 168898824\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098601000,"args":{"JVM stats":"heap_memory_usage: 216629032\nnon_heap_memory_usage: 168898824\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098603000,"args":{"JVM stats":"heap_memory_usage: 216769368\nnon_heap_memory_usage: 168904200\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098619000,"args":{"JVM stats":"heap_memory_usage: 218314992\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098620000,"args":{"JVM stats":"heap_memory_usage: 218314992\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098621000,"args":{"JVM stats":"heap_memory_usage: 218314992\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098621001,"args":{"JVM stats":"heap_memory_usage: 218455272\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098622000,"args":{"JVM stats":"heap_memory_usage: 218518360\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098623000,"args":{"JVM stats":"heap_memory_usage: 218518360\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098637000,"args":{"JVM stats":"heap_memory_usage: 219220144\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098660000,"args":{"JVM stats":"heap_memory_usage: 220483816\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098669000,"args":{"JVM stats":"heap_memory_usage: 221045160\nnon_heap_memory_usage: 168901960\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098678000,"args":{"JVM stats":"heap_memory_usage: 221606408\nnon_heap_memory_usage: 168903424\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098679000,"args":{"JVM stats":"heap_memory_usage: 221606408\nnon_heap_memory_usage: 168904128\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098682000,"args":{"JVM stats":"heap_memory_usage: 221746824\nnon_heap_memory_usage: 168904128\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098684000,"args":{"JVM stats":"heap_memory_usage: 221887136\nnon_heap_memory_usage: 168904768\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098687000,"args":{"JVM stats":"heap_memory_usage: 222027488\nnon_heap_memory_usage: 168907712\nloaded_class_count: 16738\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098866000,"args":{"JVM stats":"heap_memory_usage: 253647408\nnon_heap_memory_usage: 168969272\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098870000,"args":{"JVM stats":"heap_memory_usage: 253936328\nnon_heap_memory_usage: 168972728\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098870001,"args":{"JVM stats":"heap_memory_usage: 254076640\nnon_heap_memory_usage: 168972728\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098871000,"args":{"JVM stats":"heap_memory_usage: 254076640\nnon_heap_memory_usage: 168972728\nloaded_class_count: 16738\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447098886000,"args":{"JVM stats":"heap_memory_usage: 255235920\nnon_heap_memory_usage: 168986952\nloaded_class_count: 16741\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":22,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097454000,"dur":3000},{"pid":1,"tid":22,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097457000,"dur":3000},{"pid":1,"tid":22,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097460000,"dur":1000},{"pid":1,"tid":22,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097460000,"dur":1000},{"pid":1,"tid":22,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097467000,"dur":4000},{"pid":1,"tid":22,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097471000,"dur":100},{"pid":1,"tid":22,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097472000,"dur":100},{"pid":1,"tid":22,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097472000,"dur":1000},{"pid":1,"tid":22,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097473000,"dur":100},{"pid":1,"tid":22,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097473000,"dur":100},{"pid":1,"tid":22,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097473000,"dur":100},{"pid":1,"tid":22,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097474000,"dur":100},{"pid":1,"tid":22,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097474000,"dur":2000},{"pid":1,"tid":22,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097476000,"dur":100},{"pid":1,"tid":22,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097476000,"dur":100},{"pid":1,"tid":22,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097476000,"dur":100},{"pid":1,"tid":22,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097476000,"dur":23000},{"pid":1,"tid":22,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097499000,"dur":1000},{"pid":1,"tid":22,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097500000,"dur":8000},{"pid":1,"tid":22,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097509000,"dur":1000},{"pid":1,"tid":22,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097510000,"dur":1000},{"pid":1,"tid":22,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447097471000,"dur":40000},{"pid":1,"tid":22,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097511000,"dur":2000},{"pid":1,"tid":22,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097514000,"dur":8000},{"pid":1,"tid":22,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097467000,"dur":56000},{"pid":1,"tid":22,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097523000,"dur":3000},{"pid":1,"tid":22,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447097465000,"dur":61000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447097539000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097541000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097542000,"dur":51000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097594000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097598000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097602000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097603000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097604000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097606000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097607000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447097607000,"dur":204000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097812000,"dur":2000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097816000,"dur":8000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447097825000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447097828000,"dur":561000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098390000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098391000,"dur":17000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098408000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098418000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098420000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098421000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098421000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098425000,"dur":55000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098480000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098484000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098487000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098498000,"dur":18000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098518000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098519000,"dur":56000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098577000,"dur":3000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098581000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098590000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098591000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098601000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098604000,"dur":15000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098620000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098621000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098621000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098621000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098622000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098623000,"dur":14000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098638000,"dur":22000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098661000,"dur":8000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098670000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098678000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098679000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098682000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447098685000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098687000,"dur":179000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098866000,"dur":4000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098870000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447098870000,"dur":1000},{"pid":1,"tid":22,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447098879000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-38-886.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-38-886.rawproto
new file mode 100644
index 00000000..cdefadbc
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-51-38-886.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-53-12-141.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-53-12-141.json
new file mode 100644
index 00000000..1ea0fb25
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-53-12-141.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447190939000,"args":{"JVM stats":"heap_memory_usage: 310899240\nnon_heap_memory_usage: 169181432\nloaded_class_count: 16749\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191041000,"args":{"JVM stats":"heap_memory_usage: 321644520\nnon_heap_memory_usage: 169279792\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191041001,"args":{"JVM stats":"heap_memory_usage: 321784880\nnon_heap_memory_usage: 169279792\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191082000,"args":{"JVM stats":"heap_memory_usage: 327861544\nnon_heap_memory_usage: 169342488\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191086000,"args":{"JVM stats":"heap_memory_usage: 328422872\nnon_heap_memory_usage: 169342488\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191090000,"args":{"JVM stats":"heap_memory_usage: 328563296\nnon_heap_memory_usage: 169342976\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191091000,"args":{"JVM stats":"heap_memory_usage: 328563296\nnon_heap_memory_usage: 169343480\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191093000,"args":{"JVM stats":"heap_memory_usage: 328703608\nnon_heap_memory_usage: 169353304\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191094000,"args":{"JVM stats":"heap_memory_usage: 328703608\nnon_heap_memory_usage: 169363808\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191095000,"args":{"JVM stats":"heap_memory_usage: 328703608\nnon_heap_memory_usage: 169363808\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191096000,"args":{"JVM stats":"heap_memory_usage: 328703608\nnon_heap_memory_usage: 169363808\nloaded_class_count: 16749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191259000,"args":{"JVM stats":"heap_memory_usage: 363258072\nnon_heap_memory_usage: 169426336\nloaded_class_count: 16749\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191261000,"args":{"JVM stats":"heap_memory_usage: 363258072\nnon_heap_memory_usage: 169426336\nloaded_class_count: 16749\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191266000,"args":{"JVM stats":"heap_memory_usage: 364242808\nnon_heap_memory_usage: 169430408\nloaded_class_count: 16749\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191267000,"args":{"JVM stats":"heap_memory_usage: 364383168\nnon_heap_memory_usage: 169430408\nloaded_class_count: 16749\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191932000,"args":{"JVM stats":"heap_memory_usage: 124735576\nnon_heap_memory_usage: 169544416\nloaded_class_count: 16749\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 22\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191933000,"args":{"JVM stats":"heap_memory_usage: 124801128\nnon_heap_memory_usage: 169544416\nloaded_class_count: 16749\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447191956000,"args":{"JVM stats":"heap_memory_usage: 125906296\nnon_heap_memory_usage: 169548968\nloaded_class_count: 16749\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447192112000,"args":{"JVM stats":"heap_memory_usage: 142989888\nnon_heap_memory_usage: 169641152\nloaded_class_count: 16759\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447192116000,"args":{"JVM stats":"heap_memory_usage: 143604776\nnon_heap_memory_usage: 169648856\nloaded_class_count: 16760\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447192141000,"args":{"JVM stats":"heap_memory_usage: 145365392\nnon_heap_memory_usage: 169719256\nloaded_class_count: 16770\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":23,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447190940000,"dur":4000},{"pid":1,"tid":23,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447190944000,"dur":3000},{"pid":1,"tid":23,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447190947000,"dur":1000},{"pid":1,"tid":23,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447190947000,"dur":1000},{"pid":1,"tid":23,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447190952000,"dur":2000},{"pid":1,"tid":23,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447190954000,"dur":100},{"pid":1,"tid":23,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190955000,"dur":100},{"pid":1,"tid":23,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190955000,"dur":100},{"pid":1,"tid":23,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190955000,"dur":100},{"pid":1,"tid":23,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190955000,"dur":100},{"pid":1,"tid":23,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190955000,"dur":1000},{"pid":1,"tid":23,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190956000,"dur":100},{"pid":1,"tid":23,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190956000,"dur":1000},{"pid":1,"tid":23,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190957000,"dur":1000},{"pid":1,"tid":23,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190958000,"dur":100},{"pid":1,"tid":23,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190958000,"dur":100},{"pid":1,"tid":23,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190958000,"dur":49000},{"pid":1,"tid":23,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447191007000,"dur":100},{"pid":1,"tid":23,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447191007000,"dur":3000},{"pid":1,"tid":23,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447191012000,"dur":1000},{"pid":1,"tid":23,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447191013000,"dur":100},{"pid":1,"tid":23,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447190954000,"dur":59000},{"pid":1,"tid":23,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447191013000,"dur":4000},{"pid":1,"tid":23,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447191017000,"dur":6000},{"pid":1,"tid":23,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447190952000,"dur":71000},{"pid":1,"tid":23,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447191024000,"dur":1000},{"pid":1,"tid":23,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447190950000,"dur":75000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447191039000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191041000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191041000,"dur":41000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191082000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191087000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191090000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191091000,"dur":2000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191093000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191094000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191095000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447191096000,"dur":163000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191260000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191261000,"dur":5000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191267000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447191269000,"dur":663000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447191932000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447191933000,"dur":23000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518447191957000,"dur":155000},{"pid":1,"tid":0,"id":47,"name":"task: build info writer","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447192114000,"dur":2000},{"pid":1,"tid":23,"id":48,"name":"base plugin build finished","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447192130000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-53-12-141.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-53-12-141.rawproto
new file mode 100644
index 00000000..b1b58af1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-53-12-141.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-55-33-567.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-55-33-567.json
new file mode 100644
index 00000000..9fa33c27
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-55-33-567.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331529000,"args":{"JVM stats":"heap_memory_usage: 201981256\nnon_heap_memory_usage: 170204600\nloaded_class_count: 16800\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331637000,"args":{"JVM stats":"heap_memory_usage: 213069792\nnon_heap_memory_usage: 170462712\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331637001,"args":{"JVM stats":"heap_memory_usage: 213069792\nnon_heap_memory_usage: 170462712\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331689000,"args":{"JVM stats":"heap_memory_usage: 219360440\nnon_heap_memory_usage: 170561952\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331695000,"args":{"JVM stats":"heap_memory_usage: 220010520\nnon_heap_memory_usage: 170598712\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331698000,"args":{"JVM stats":"heap_memory_usage: 220140144\nnon_heap_memory_usage: 170599544\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331699000,"args":{"JVM stats":"heap_memory_usage: 220140144\nnon_heap_memory_usage: 170600248\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331699001,"args":{"JVM stats":"heap_memory_usage: 220269768\nnon_heap_memory_usage: 170600248\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331700000,"args":{"JVM stats":"heap_memory_usage: 220269768\nnon_heap_memory_usage: 170600248\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331701000,"args":{"JVM stats":"heap_memory_usage: 220269768\nnon_heap_memory_usage: 170600248\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331701001,"args":{"JVM stats":"heap_memory_usage: 220399504\nnon_heap_memory_usage: 170600248\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331731000,"args":{"JVM stats":"heap_memory_usage: 223905432\nnon_heap_memory_usage: 170600248\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331732000,"args":{"JVM stats":"heap_memory_usage: 223905432\nnon_heap_memory_usage: 170610552\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331735000,"args":{"JVM stats":"heap_memory_usage: 224295632\nnon_heap_memory_usage: 170610552\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331736000,"args":{"JVM stats":"heap_memory_usage: 224295632\nnon_heap_memory_usage: 170610552\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331742000,"args":{"JVM stats":"heap_memory_usage: 225593496\nnon_heap_memory_usage: 170616120\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331742001,"args":{"JVM stats":"heap_memory_usage: 225723144\nnon_heap_memory_usage: 170616120\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447331757000,"args":{"JVM stats":"heap_memory_usage: 226246744\nnon_heap_memory_usage: 170621496\nloaded_class_count: 16822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332074000,"args":{"JVM stats":"heap_memory_usage: 265454176\nnon_heap_memory_usage: 171108664\nloaded_class_count: 16822\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332076000,"args":{"JVM stats":"heap_memory_usage: 265454176\nnon_heap_memory_usage: 171111800\nloaded_class_count: 16822\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332077000,"args":{"JVM stats":"heap_memory_usage: 265717488\nnon_heap_memory_usage: 171111800\nloaded_class_count: 16822\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332078000,"args":{"JVM stats":"heap_memory_usage: 265717488\nnon_heap_memory_usage: 171111800\nloaded_class_count: 16822\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332081000,"args":{"JVM stats":"heap_memory_usage: 266367248\nnon_heap_memory_usage: 171111800\nloaded_class_count: 16822\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332191000,"args":{"JVM stats":"heap_memory_usage: 317305208\nnon_heap_memory_usage: 171244488\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332199000,"args":{"JVM stats":"heap_memory_usage: 317722904\nnon_heap_memory_usage: 171247304\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332200000,"args":{"JVM stats":"heap_memory_usage: 317722904\nnon_heap_memory_usage: 171247304\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332251000,"args":{"JVM stats":"heap_memory_usage: 319321528\nnon_heap_memory_usage: 171255448\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332271000,"args":{"JVM stats":"heap_memory_usage: 320302344\nnon_heap_memory_usage: 171256152\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332273000,"args":{"JVM stats":"heap_memory_usage: 320302344\nnon_heap_memory_usage: 171256152\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332343000,"args":{"JVM stats":"heap_memory_usage: 321085232\nnon_heap_memory_usage: 171256152\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332345000,"args":{"JVM stats":"heap_memory_usage: 321085232\nnon_heap_memory_usage: 171257560\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332356000,"args":{"JVM stats":"heap_memory_usage: 321993096\nnon_heap_memory_usage: 171257560\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332358000,"args":{"JVM stats":"heap_memory_usage: 321993096\nnon_heap_memory_usage: 171257560\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332368000,"args":{"JVM stats":"heap_memory_usage: 322641512\nnon_heap_memory_usage: 171261208\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332369000,"args":{"JVM stats":"heap_memory_usage: 322771104\nnon_heap_memory_usage: 171261208\nloaded_class_count: 16822\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332452000,"args":{"JVM stats":"heap_memory_usage: 331178600\nnon_heap_memory_usage: 171299928\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332456000,"args":{"JVM stats":"heap_memory_usage: 331567528\nnon_heap_memory_usage: 171302768\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332457000,"args":{"JVM stats":"heap_memory_usage: 331596512\nnon_heap_memory_usage: 171302768\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332457001,"args":{"JVM stats":"heap_memory_usage: 331596512\nnon_heap_memory_usage: 171302768\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332460000,"args":{"JVM stats":"heap_memory_usage: 331993592\nnon_heap_memory_usage: 171302768\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332462000,"args":{"JVM stats":"heap_memory_usage: 332127296\nnon_heap_memory_usage: 171302768\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332539000,"args":{"JVM stats":"heap_memory_usage: 334500328\nnon_heap_memory_usage: 171369584\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332779000,"args":{"JVM stats":"heap_memory_usage: 140545448\nnon_heap_memory_usage: 171787600\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 28\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332797000,"args":{"JVM stats":"heap_memory_usage: 143632672\nnon_heap_memory_usage: 171790080\nloaded_class_count: 16825\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332854000,"args":{"JVM stats":"heap_memory_usage: 158720904\nnon_heap_memory_usage: 171875968\nloaded_class_count: 16825\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332856000,"args":{"JVM stats":"heap_memory_usage: 158844832\nnon_heap_memory_usage: 171899968\nloaded_class_count: 16825\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447332865000,"args":{"JVM stats":"heap_memory_usage: 159301592\nnon_heap_memory_usage: 171905824\nloaded_class_count: 16825\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447333299000,"args":{"JVM stats":"heap_memory_usage: 210513880\nnon_heap_memory_usage: 172170256\nloaded_class_count: 16825\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447333302000,"args":{"JVM stats":"heap_memory_usage: 210716488\nnon_heap_memory_usage: 172170256\nloaded_class_count: 16825\nthread_count: 65\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447333544000,"args":{"JVM stats":"heap_memory_usage: 282147968\nnon_heap_memory_usage: 171953744\nloaded_class_count: 16825\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447333547000,"args":{"JVM stats":"heap_memory_usage: 282430208\nnon_heap_memory_usage: 171954640\nloaded_class_count: 16825\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447333548000,"args":{"JVM stats":"heap_memory_usage: 282552832\nnon_heap_memory_usage: 171954640\nloaded_class_count: 16825\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447333548001,"args":{"JVM stats":"heap_memory_usage: 282552832\nnon_heap_memory_usage: 171954640\nloaded_class_count: 16825\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447333567000,"args":{"JVM stats":"heap_memory_usage: 283322280\nnon_heap_memory_usage: 171959560\nloaded_class_count: 16825\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331529000,"dur":5000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331534000,"dur":6000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331540000,"dur":8000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331540000,"dur":8000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331553000,"dur":3000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331556000,"dur":1000},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331558000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331559000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331559000,"dur":100},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331559000,"dur":1000},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331560000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331560000,"dur":100},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331560000,"dur":2000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331562000,"dur":100},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331562000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331562000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331562000,"dur":36000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331598000,"dur":1000},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331599000,"dur":6000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331607000,"dur":2000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331609000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447331557000,"dur":52000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331609000,"dur":4000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331613000,"dur":4000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331553000,"dur":64000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331618000,"dur":1000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447331550000,"dur":69000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447331635000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331637000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331638000,"dur":51000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331690000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331696000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331698000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331699000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331700000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331700000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331701000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331702000,"dur":29000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331732000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331733000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331736000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331737000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447331742000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447331743000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447331758000,"dur":316000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332075000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332077000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332078000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332078000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332082000,"dur":109000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332193000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332199000,"dur":1000},{"pid":1,"tid":25,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447332213000,"dur":1000},{"pid":1,"tid":25,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447332214000,"dur":1000},{"pid":1,"tid":25,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447332214000,"dur":25000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332201000,"dur":50000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332251000,"dur":20000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332272000,"dur":1000},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332273000,"dur":70000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332344000,"dur":1000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332346000,"dur":10000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332357000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332359000,"dur":9000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332368000,"dur":1000},{"pid":1,"tid":26,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447332390000,"dur":8000},{"pid":1,"tid":26,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447332399000,"dur":42000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332370000,"dur":81000},{"pid":1,"tid":26,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447332455000,"dur":100},{"pid":1,"tid":26,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447332455000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332453000,"dur":3000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332457000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332457000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332458000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447332460000,"dur":1000},{"pid":1,"tid":26,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447332479000,"dur":100},{"pid":1,"tid":26,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447332479000,"dur":41000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332462000,"dur":77000},{"pid":1,"tid":26,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447332565000,"dur":1000},{"pid":1,"tid":26,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447332566000,"dur":196000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332539000,"dur":240000},{"pid":1,"tid":26,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447332791000,"dur":3000},{"pid":1,"tid":26,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447332794000,"dur":2000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332779000,"dur":18000},{"pid":1,"tid":26,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447332812000,"dur":2000},{"pid":1,"tid":26,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447332814000,"dur":33000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332797000,"dur":57000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332854000,"dur":2000},{"pid":1,"tid":26,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447332861000,"dur":1000},{"pid":1,"tid":26,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447332862000,"dur":2000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332856000,"dur":9000},{"pid":1,"tid":26,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447332868000,"dur":1000},{"pid":1,"tid":26,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447332869000,"dur":429000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447332866000,"dur":433000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447333299000,"dur":3000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447333303000,"dur":241000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447333545000,"dur":2000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447333547000,"dur":100},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447333548000,"dur":100},{"pid":1,"tid":24,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447333557000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-55-33-567.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-55-33-567.rawproto
new file mode 100644
index 00000000..1eaa41a4
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-55-33-567.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-56-52-381.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-56-52-381.json
new file mode 100644
index 00000000..cb420ae6
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-56-52-381.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411339000,"args":{"JVM stats":"heap_memory_usage: 339876752\nnon_heap_memory_usage: 172137376\nloaded_class_count: 16833\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411424000,"args":{"JVM stats":"heap_memory_usage: 350579256\nnon_heap_memory_usage: 171982536\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411425000,"args":{"JVM stats":"heap_memory_usage: 350579256\nnon_heap_memory_usage: 171982536\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411462000,"args":{"JVM stats":"heap_memory_usage: 357156544\nnon_heap_memory_usage: 171988480\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411465000,"args":{"JVM stats":"heap_memory_usage: 357525520\nnon_heap_memory_usage: 171988480\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411468000,"args":{"JVM stats":"heap_memory_usage: 357895448\nnon_heap_memory_usage: 171988480\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411469000,"args":{"JVM stats":"heap_memory_usage: 358018472\nnon_heap_memory_usage: 171988480\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411471000,"args":{"JVM stats":"heap_memory_usage: 358018472\nnon_heap_memory_usage: 171988480\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411472000,"args":{"JVM stats":"heap_memory_usage: 358018472\nnon_heap_memory_usage: 171990272\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411473000,"args":{"JVM stats":"heap_memory_usage: 358141448\nnon_heap_memory_usage: 171990272\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411473001,"args":{"JVM stats":"heap_memory_usage: 358141448\nnon_heap_memory_usage: 171990272\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411503000,"args":{"JVM stats":"heap_memory_usage: 361587112\nnon_heap_memory_usage: 171992832\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411504000,"args":{"JVM stats":"heap_memory_usage: 361587112\nnon_heap_memory_usage: 171992832\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411507000,"args":{"JVM stats":"heap_memory_usage: 361710088\nnon_heap_memory_usage: 171994424\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411508000,"args":{"JVM stats":"heap_memory_usage: 361833112\nnon_heap_memory_usage: 172005752\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411534000,"args":{"JVM stats":"heap_memory_usage: 113337128\nnon_heap_memory_usage: 172007672\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 20\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411534001,"args":{"JVM stats":"heap_memory_usage: 114331256\nnon_heap_memory_usage: 172007672\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411549000,"args":{"JVM stats":"heap_memory_usage: 115359432\nnon_heap_memory_usage: 172007672\nloaded_class_count: 16842\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411652000,"args":{"JVM stats":"heap_memory_usage: 131924032\nnon_heap_memory_usage: 172178848\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411655000,"args":{"JVM stats":"heap_memory_usage: 132188320\nnon_heap_memory_usage: 172182816\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411657000,"args":{"JVM stats":"heap_memory_usage: 132330304\nnon_heap_memory_usage: 172182816\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411657001,"args":{"JVM stats":"heap_memory_usage: 132330304\nnon_heap_memory_usage: 172182816\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411660000,"args":{"JVM stats":"heap_memory_usage: 132609776\nnon_heap_memory_usage: 172182816\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411662000,"args":{"JVM stats":"heap_memory_usage: 132751472\nnon_heap_memory_usage: 172186592\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411666000,"args":{"JVM stats":"heap_memory_usage: 133051344\nnon_heap_memory_usage: 172186592\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411668000,"args":{"JVM stats":"heap_memory_usage: 133051344\nnon_heap_memory_usage: 172186592\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411695000,"args":{"JVM stats":"heap_memory_usage: 134526984\nnon_heap_memory_usage: 172213768\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411713000,"args":{"JVM stats":"heap_memory_usage: 135429376\nnon_heap_memory_usage: 172213768\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411715000,"args":{"JVM stats":"heap_memory_usage: 135429376\nnon_heap_memory_usage: 172213768\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411776000,"args":{"JVM stats":"heap_memory_usage: 136276816\nnon_heap_memory_usage: 172252840\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411778000,"args":{"JVM stats":"heap_memory_usage: 136396960\nnon_heap_memory_usage: 172272744\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411788000,"args":{"JVM stats":"heap_memory_usage: 137256224\nnon_heap_memory_usage: 172277928\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411789000,"args":{"JVM stats":"heap_memory_usage: 137256224\nnon_heap_memory_usage: 172278632\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411797000,"args":{"JVM stats":"heap_memory_usage: 138068432\nnon_heap_memory_usage: 172276456\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411798000,"args":{"JVM stats":"heap_memory_usage: 138128368\nnon_heap_memory_usage: 172276456\nloaded_class_count: 16843\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411852000,"args":{"JVM stats":"heap_memory_usage: 145929512\nnon_heap_memory_usage: 172338408\nloaded_class_count: 16843\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411858000,"args":{"JVM stats":"heap_memory_usage: 146394336\nnon_heap_memory_usage: 172306984\nloaded_class_count: 16843\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411858001,"args":{"JVM stats":"heap_memory_usage: 146406672\nnon_heap_memory_usage: 172306984\nloaded_class_count: 16843\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411859000,"args":{"JVM stats":"heap_memory_usage: 146551112\nnon_heap_memory_usage: 172306984\nloaded_class_count: 16843\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411860000,"args":{"JVM stats":"heap_memory_usage: 146675048\nnon_heap_memory_usage: 172306984\nloaded_class_count: 16843\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411861000,"args":{"JVM stats":"heap_memory_usage: 146675048\nnon_heap_memory_usage: 172306984\nloaded_class_count: 16843\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447411899000,"args":{"JVM stats":"heap_memory_usage: 148378560\nnon_heap_memory_usage: 172216232\nloaded_class_count: 16843\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412078000,"args":{"JVM stats":"heap_memory_usage: 194144376\nnon_heap_memory_usage: 172552488\nloaded_class_count: 16843\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412093000,"args":{"JVM stats":"heap_memory_usage: 195353056\nnon_heap_memory_usage: 172575784\nloaded_class_count: 16843\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412122000,"args":{"JVM stats":"heap_memory_usage: 202231008\nnon_heap_memory_usage: 172580832\nloaded_class_count: 16843\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412125000,"args":{"JVM stats":"heap_memory_usage: 202459248\nnon_heap_memory_usage: 172580832\nloaded_class_count: 16843\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412135000,"args":{"JVM stats":"heap_memory_usage: 202819072\nnon_heap_memory_usage: 172580832\nloaded_class_count: 16843\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412336000,"args":{"JVM stats":"heap_memory_usage: 214028352\nnon_heap_memory_usage: 172710872\nloaded_class_count: 16843\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412341000,"args":{"JVM stats":"heap_memory_usage: 214220496\nnon_heap_memory_usage: 172710872\nloaded_class_count: 16843\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412361000,"args":{"JVM stats":"heap_memory_usage: 214730288\nnon_heap_memory_usage: 172717600\nloaded_class_count: 16843\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412363000,"args":{"JVM stats":"heap_memory_usage: 214963680\nnon_heap_memory_usage: 172734200\nloaded_class_count: 16844\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412363001,"args":{"JVM stats":"heap_memory_usage: 214963680\nnon_heap_memory_usage: 172734200\nloaded_class_count: 16844\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412363000,"args":{"JVM stats":"heap_memory_usage: 214963680\nnon_heap_memory_usage: 172734200\nloaded_class_count: 16844\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447412381000,"args":{"JVM stats":"heap_memory_usage: 215658536\nnon_heap_memory_usage: 172737752\nloaded_class_count: 16844\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":27,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411339000,"dur":3000},{"pid":1,"tid":27,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411342000,"dur":2000},{"pid":1,"tid":27,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411344000,"dur":4000},{"pid":1,"tid":27,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411344000,"dur":4000},{"pid":1,"tid":27,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411351000,"dur":2000},{"pid":1,"tid":27,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411353000,"dur":1000},{"pid":1,"tid":27,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411354000,"dur":1000},{"pid":1,"tid":27,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411355000,"dur":100},{"pid":1,"tid":27,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411355000,"dur":1000},{"pid":1,"tid":27,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411356000,"dur":100},{"pid":1,"tid":27,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411356000,"dur":100},{"pid":1,"tid":27,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411357000,"dur":100},{"pid":1,"tid":27,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411357000,"dur":1000},{"pid":1,"tid":27,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411358000,"dur":100},{"pid":1,"tid":27,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411358000,"dur":1000},{"pid":1,"tid":27,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411359000,"dur":100},{"pid":1,"tid":27,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411359000,"dur":24000},{"pid":1,"tid":27,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411383000,"dur":2000},{"pid":1,"tid":27,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411385000,"dur":7000},{"pid":1,"tid":27,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411394000,"dur":2000},{"pid":1,"tid":27,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411396000,"dur":100},{"pid":1,"tid":27,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411354000,"dur":42000},{"pid":1,"tid":27,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411396000,"dur":3000},{"pid":1,"tid":27,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411399000,"dur":8000},{"pid":1,"tid":27,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411351000,"dur":58000},{"pid":1,"tid":27,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411409000,"dur":2000},{"pid":1,"tid":27,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447411350000,"dur":61000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411423000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411424000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411425000,"dur":37000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411462000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411465000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411469000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411470000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411471000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411472000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411473000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411474000,"dur":29000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411503000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411504000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411508000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411509000,"dur":25000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411534000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411535000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411549000,"dur":103000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411653000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411656000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411657000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411657000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411660000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411663000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411666000,"dur":2000},{"pid":1,"tid":28,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447411677000,"dur":100},{"pid":1,"tid":28,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411678000,"dur":100},{"pid":1,"tid":28,"id":58,"name":"task file verification","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411679000,"dur":1000},{"pid":1,"tid":28,"id":59,"name":"task file verification","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411681000,"dur":1000},{"pid":1,"tid":28,"id":60,"name":"task file verification","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411683000,"dur":100},{"pid":1,"tid":28,"id":61,"name":"task file verification","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447411686000,"dur":1000},{"pid":1,"tid":28,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447411677000,"dur":12000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411669000,"dur":26000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411695000,"dur":18000},{"pid":1,"tid":0,"id":63,"name":"task: external native build json","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411714000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: external native build","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411715000,"dur":61000},{"pid":1,"tid":0,"id":65,"name":"task: merge source set folders","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411777000,"dur":1000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411779000,"dur":9000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411789000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411790000,"dur":7000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411797000,"dur":1000},{"pid":1,"tid":29,"id":71,"name":"transform prep: instant run","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447411814000,"dur":5000},{"pid":1,"tid":29,"id":72,"name":"transform: instant run","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447411819000,"dur":25000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411798000,"dur":54000},{"pid":1,"tid":29,"id":74,"name":"transform prep: instant run dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447411856000,"dur":100},{"pid":1,"tid":29,"id":75,"name":"transform: instant run dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447411856000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411854000,"dur":4000},{"pid":1,"tid":0,"id":76,"name":"task: unknown task type","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411858000,"dur":100},{"pid":1,"tid":0,"id":77,"name":"task: pre cold swap","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411859000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: fast deploy runtime extractor","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411859000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: generate instant run app info","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447411860000,"dur":1000},{"pid":1,"tid":30,"id":81,"name":"transform prep: instant run slicer","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447411876000,"dur":1000},{"pid":1,"tid":30,"id":82,"name":"transform: instant run slicer","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447411877000,"dur":10000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411861000,"dur":38000},{"pid":1,"tid":30,"id":84,"name":"transform prep: dex archive builder","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447411925000,"dur":1000},{"pid":1,"tid":30,"id":85,"name":"transform: dex archive builder","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447411926000,"dur":142000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447411900000,"dur":178000},{"pid":1,"tid":30,"id":87,"name":"transform prep: external libs merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447412089000,"dur":1000},{"pid":1,"tid":30,"id":88,"name":"transform: external libs merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447412090000,"dur":1000},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447412079000,"dur":14000},{"pid":1,"tid":30,"id":90,"name":"transform prep: dex merger","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447412103000,"dur":2000},{"pid":1,"tid":30,"id":91,"name":"transform: dex merger","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447412105000,"dur":13000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447412093000,"dur":29000},{"pid":1,"tid":0,"id":92,"name":"task: validate signing","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447412123000,"dur":1000},{"pid":1,"tid":30,"id":94,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447412130000,"dur":2000},{"pid":1,"tid":30,"id":95,"name":"transform: instant run dependencies apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447412132000,"dur":1000},{"pid":1,"tid":0,"id":93,"name":"task: transform","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447412125000,"dur":9000},{"pid":1,"tid":30,"id":97,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447412139000,"dur":2000},{"pid":1,"tid":30,"id":98,"name":"transform: instant run slice split apk builder","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447412141000,"dur":192000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447412135000,"dur":200000},{"pid":1,"tid":0,"id":99,"name":"task: transform","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447412336000,"dur":5000},{"pid":1,"tid":0,"id":100,"name":"task: package application","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447412342000,"dur":19000},{"pid":1,"tid":0,"id":101,"name":"task: build info writer","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447412361000,"dur":2000},{"pid":1,"tid":0,"id":102,"name":"task: unknown task type","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447412363000,"dur":100},{"pid":1,"tid":0,"id":103,"name":"task: unknown task type","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447412363000,"dur":100},{"pid":1,"tid":27,"id":104,"name":"base plugin build finished","args":{"span_id":"104","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447412370000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-56-52-381.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-56-52-381.rawproto
new file mode 100644
index 00000000..f0d2d58f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-56-52-381.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-57-30-226.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-57-30-226.json
new file mode 100644
index 00000000..87a5b436
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-57-30-226.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449292000,"args":{"JVM stats":"heap_memory_usage: 270986384\nnon_heap_memory_usage: 173043576\nloaded_class_count: 16851\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449353000,"args":{"JVM stats":"heap_memory_usage: 281176040\nnon_heap_memory_usage: 173183960\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449354000,"args":{"JVM stats":"heap_memory_usage: 281303184\nnon_heap_memory_usage: 173187160\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449388000,"args":{"JVM stats":"heap_memory_usage: 287536360\nnon_heap_memory_usage: 173133136\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449392000,"args":{"JVM stats":"heap_memory_usage: 287788936\nnon_heap_memory_usage: 173129664\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449395000,"args":{"JVM stats":"heap_memory_usage: 288167328\nnon_heap_memory_usage: 173129664\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449396000,"args":{"JVM stats":"heap_memory_usage: 288167328\nnon_heap_memory_usage: 173129664\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449397000,"args":{"JVM stats":"heap_memory_usage: 288294472\nnon_heap_memory_usage: 173129664\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449397001,"args":{"JVM stats":"heap_memory_usage: 288294472\nnon_heap_memory_usage: 173131344\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449398000,"args":{"JVM stats":"heap_memory_usage: 288420576\nnon_heap_memory_usage: 173127696\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449398001,"args":{"JVM stats":"heap_memory_usage: 288420576\nnon_heap_memory_usage: 173127696\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449429000,"args":{"JVM stats":"heap_memory_usage: 291955624\nnon_heap_memory_usage: 173124424\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449430000,"args":{"JVM stats":"heap_memory_usage: 291955624\nnon_heap_memory_usage: 173124424\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449433000,"args":{"JVM stats":"heap_memory_usage: 292334488\nnon_heap_memory_usage: 173131392\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449433001,"args":{"JVM stats":"heap_memory_usage: 292334488\nnon_heap_memory_usage: 173131392\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449438000,"args":{"JVM stats":"heap_memory_usage: 293722976\nnon_heap_memory_usage: 173120824\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449438001,"args":{"JVM stats":"heap_memory_usage: 293722976\nnon_heap_memory_usage: 173121912\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449452000,"args":{"JVM stats":"heap_memory_usage: 294383344\nnon_heap_memory_usage: 173122552\nloaded_class_count: 16851\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449551000,"args":{"JVM stats":"heap_memory_usage: 310268616\nnon_heap_memory_usage: 173377256\nloaded_class_count: 16851\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449552000,"args":{"JVM stats":"heap_memory_usage: 310524936\nnon_heap_memory_usage: 173378024\nloaded_class_count: 16851\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449554000,"args":{"JVM stats":"heap_memory_usage: 310524936\nnon_heap_memory_usage: 173378024\nloaded_class_count: 16851\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449554001,"args":{"JVM stats":"heap_memory_usage: 310651216\nnon_heap_memory_usage: 173378024\nloaded_class_count: 16851\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449558000,"args":{"JVM stats":"heap_memory_usage: 311156096\nnon_heap_memory_usage: 173378024\nloaded_class_count: 16851\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449561000,"args":{"JVM stats":"heap_memory_usage: 311408784\nnon_heap_memory_usage: 173380824\nloaded_class_count: 16851\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449565000,"args":{"JVM stats":"heap_memory_usage: 311685688\nnon_heap_memory_usage: 173385200\nloaded_class_count: 16852\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449566000,"args":{"JVM stats":"heap_memory_usage: 311685688\nnon_heap_memory_usage: 173385200\nloaded_class_count: 16852\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449579000,"args":{"JVM stats":"heap_memory_usage: 312821464\nnon_heap_memory_usage: 173416760\nloaded_class_count: 16852\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449592000,"args":{"JVM stats":"heap_memory_usage: 313761448\nnon_heap_memory_usage: 173416760\nloaded_class_count: 16852\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449593000,"args":{"JVM stats":"heap_memory_usage: 313761448\nnon_heap_memory_usage: 173440824\nloaded_class_count: 16852\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449640000,"args":{"JVM stats":"heap_memory_usage: 314518128\nnon_heap_memory_usage: 173455056\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449643000,"args":{"JVM stats":"heap_memory_usage: 314644336\nnon_heap_memory_usage: 173455056\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449651000,"args":{"JVM stats":"heap_memory_usage: 315528416\nnon_heap_memory_usage: 173455056\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449652000,"args":{"JVM stats":"heap_memory_usage: 315654520\nnon_heap_memory_usage: 173455056\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449660000,"args":{"JVM stats":"heap_memory_usage: 316159472\nnon_heap_memory_usage: 173455056\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449661000,"args":{"JVM stats":"heap_memory_usage: 316285608\nnon_heap_memory_usage: 173455056\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449701000,"args":{"JVM stats":"heap_memory_usage: 321995672\nnon_heap_memory_usage: 173505288\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449704000,"args":{"JVM stats":"heap_memory_usage: 322285288\nnon_heap_memory_usage: 173505288\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449704001,"args":{"JVM stats":"heap_memory_usage: 322415504\nnon_heap_memory_usage: 173505288\nloaded_class_count: 16853\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449705000,"args":{"JVM stats":"heap_memory_usage: 322415504\nnon_heap_memory_usage: 173509664\nloaded_class_count: 16854\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449706000,"args":{"JVM stats":"heap_memory_usage: 322680088\nnon_heap_memory_usage: 173509664\nloaded_class_count: 16854\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449707000,"args":{"JVM stats":"heap_memory_usage: 322680088\nnon_heap_memory_usage: 173509664\nloaded_class_count: 16854\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449728000,"args":{"JVM stats":"heap_memory_usage: 324070488\nnon_heap_memory_usage: 173541640\nloaded_class_count: 16854\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449922000,"args":{"JVM stats":"heap_memory_usage: 133775992\nnon_heap_memory_usage: 174153888\nloaded_class_count: 16854\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 22\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449934000,"args":{"JVM stats":"heap_memory_usage: 136536080\nnon_heap_memory_usage: 174177736\nloaded_class_count: 16854\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449964000,"args":{"JVM stats":"heap_memory_usage: 143340016\nnon_heap_memory_usage: 174177736\nloaded_class_count: 16854\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449966000,"args":{"JVM stats":"heap_memory_usage: 143528856\nnon_heap_memory_usage: 174184472\nloaded_class_count: 16856\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447449972000,"args":{"JVM stats":"heap_memory_usage: 143965840\nnon_heap_memory_usage: 174193296\nloaded_class_count: 16856\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447450190000,"args":{"JVM stats":"heap_memory_usage: 154354936\nnon_heap_memory_usage: 174292640\nloaded_class_count: 16856\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447450193000,"args":{"JVM stats":"heap_memory_usage: 154570104\nnon_heap_memory_usage: 174292640\nloaded_class_count: 16856\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447450201000,"args":{"JVM stats":"heap_memory_usage: 154998440\nnon_heap_memory_usage: 174292640\nloaded_class_count: 16856\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447450204000,"args":{"JVM stats":"heap_memory_usage: 155199280\nnon_heap_memory_usage: 174292672\nloaded_class_count: 16856\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447450205000,"args":{"JVM stats":"heap_memory_usage: 155199280\nnon_heap_memory_usage: 174292672\nloaded_class_count: 16856\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447450206000,"args":{"JVM stats":"heap_memory_usage: 155199280\nnon_heap_memory_usage: 174292672\nloaded_class_count: 16856\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447450227000,"args":{"JVM stats":"heap_memory_usage: 156142536\nnon_heap_memory_usage: 174334304\nloaded_class_count: 16865\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":27,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449293000,"dur":2000},{"pid":1,"tid":27,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449295000,"dur":3000},{"pid":1,"tid":27,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449298000,"dur":100},{"pid":1,"tid":27,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449298000,"dur":100},{"pid":1,"tid":27,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449301000,"dur":1000},{"pid":1,"tid":27,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449302000,"dur":2000},{"pid":1,"tid":27,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449305000,"dur":1000},{"pid":1,"tid":27,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449306000,"dur":100},{"pid":1,"tid":27,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449306000,"dur":100},{"pid":1,"tid":27,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449306000,"dur":1000},{"pid":1,"tid":27,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449307000,"dur":100},{"pid":1,"tid":27,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449307000,"dur":100},{"pid":1,"tid":27,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449307000,"dur":2000},{"pid":1,"tid":27,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449309000,"dur":100},{"pid":1,"tid":27,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449309000,"dur":100},{"pid":1,"tid":27,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449309000,"dur":100},{"pid":1,"tid":27,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449309000,"dur":18000},{"pid":1,"tid":27,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449327000,"dur":100},{"pid":1,"tid":27,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449327000,"dur":3000},{"pid":1,"tid":27,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449331000,"dur":1000},{"pid":1,"tid":27,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449332000,"dur":1000},{"pid":1,"tid":27,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449304000,"dur":29000},{"pid":1,"tid":27,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449333000,"dur":2000},{"pid":1,"tid":27,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449335000,"dur":3000},{"pid":1,"tid":27,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449300000,"dur":39000},{"pid":1,"tid":27,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449339000,"dur":2000},{"pid":1,"tid":27,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447449299000,"dur":42000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449352000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449353000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449354000,"dur":34000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449388000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449392000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449396000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449396000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449397000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449398000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449398000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449399000,"dur":30000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449429000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449430000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449433000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449434000,"dur":4000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449438000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449439000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449453000,"dur":97000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449551000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449553000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449554000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449555000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449558000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449561000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449565000,"dur":1000},{"pid":1,"tid":31,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447449573000,"dur":1000},{"pid":1,"tid":31,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447449574000,"dur":100},{"pid":1,"tid":31,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447449574000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449566000,"dur":13000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449579000,"dur":13000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449593000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449593000,"dur":47000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449641000,"dur":2000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449644000,"dur":7000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449652000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449653000,"dur":7000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449661000,"dur":100},{"pid":1,"tid":32,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447449676000,"dur":7000},{"pid":1,"tid":32,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447449683000,"dur":14000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449662000,"dur":39000},{"pid":1,"tid":32,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447449703000,"dur":100},{"pid":1,"tid":32,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447449703000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449701000,"dur":3000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449704000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449704000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449705000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447449706000,"dur":1000},{"pid":1,"tid":32,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447449717000,"dur":100},{"pid":1,"tid":32,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447449717000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449707000,"dur":20000},{"pid":1,"tid":32,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447449750000,"dur":1000},{"pid":1,"tid":32,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447449751000,"dur":160000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449728000,"dur":194000},{"pid":1,"tid":32,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447449931000,"dur":1000},{"pid":1,"tid":32,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447449932000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449922000,"dur":12000},{"pid":1,"tid":32,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447449945000,"dur":1000},{"pid":1,"tid":32,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447449946000,"dur":15000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449934000,"dur":30000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449964000,"dur":2000},{"pid":1,"tid":32,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447449970000,"dur":100},{"pid":1,"tid":32,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447449970000,"dur":1000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449967000,"dur":5000},{"pid":1,"tid":32,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447449975000,"dur":100},{"pid":1,"tid":32,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447449975000,"dur":214000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447449972000,"dur":218000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447450190000,"dur":3000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447450193000,"dur":8000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447450201000,"dur":3000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447450205000,"dur":100},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447450205000,"dur":1000},{"pid":1,"tid":27,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447450217000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-57-30-226.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-57-30-226.rawproto
new file mode 100644
index 00000000..51059f19
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-57-30-226.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-58-56-451.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-58-56-451.json
new file mode 100644
index 00000000..dc763f9a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-58-56-451.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535331000,"args":{"JVM stats":"heap_memory_usage: 212285128\nnon_heap_memory_usage: 174504248\nloaded_class_count: 16872\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535455000,"args":{"JVM stats":"heap_memory_usage: 222787016\nnon_heap_memory_usage: 174475920\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535456000,"args":{"JVM stats":"heap_memory_usage: 222787016\nnon_heap_memory_usage: 174475920\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535510000,"args":{"JVM stats":"heap_memory_usage: 229479048\nnon_heap_memory_usage: 174490496\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535515000,"args":{"JVM stats":"heap_memory_usage: 229590224\nnon_heap_memory_usage: 174490496\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535518000,"args":{"JVM stats":"heap_memory_usage: 229923776\nnon_heap_memory_usage: 174490496\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535519000,"args":{"JVM stats":"heap_memory_usage: 229923776\nnon_heap_memory_usage: 174490496\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535520000,"args":{"JVM stats":"heap_memory_usage: 230034912\nnon_heap_memory_usage: 174490496\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535520001,"args":{"JVM stats":"heap_memory_usage: 230034912\nnon_heap_memory_usage: 174490496\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535522000,"args":{"JVM stats":"heap_memory_usage: 230034912\nnon_heap_memory_usage: 174505600\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535522001,"args":{"JVM stats":"heap_memory_usage: 230034912\nnon_heap_memory_usage: 174527040\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535557000,"args":{"JVM stats":"heap_memory_usage: 233594696\nnon_heap_memory_usage: 174598704\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535558000,"args":{"JVM stats":"heap_memory_usage: 233594696\nnon_heap_memory_usage: 174598704\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535562000,"args":{"JVM stats":"heap_memory_usage: 233817024\nnon_heap_memory_usage: 174589872\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535562001,"args":{"JVM stats":"heap_memory_usage: 233817024\nnon_heap_memory_usage: 174589872\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535567000,"args":{"JVM stats":"heap_memory_usage: 235263640\nnon_heap_memory_usage: 174590192\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535568000,"args":{"JVM stats":"heap_memory_usage: 235263640\nnon_heap_memory_usage: 174590192\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535589000,"args":{"JVM stats":"heap_memory_usage: 236301384\nnon_heap_memory_usage: 174593520\nloaded_class_count: 16872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535706000,"args":{"JVM stats":"heap_memory_usage: 251980408\nnon_heap_memory_usage: 174679792\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535709000,"args":{"JVM stats":"heap_memory_usage: 252206992\nnon_heap_memory_usage: 174687984\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535712000,"args":{"JVM stats":"heap_memory_usage: 252206992\nnon_heap_memory_usage: 174687984\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535713000,"args":{"JVM stats":"heap_memory_usage: 252318088\nnon_heap_memory_usage: 174687984\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535716000,"args":{"JVM stats":"heap_memory_usage: 252686328\nnon_heap_memory_usage: 174687984\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535718000,"args":{"JVM stats":"heap_memory_usage: 252797568\nnon_heap_memory_usage: 174692656\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535724000,"args":{"JVM stats":"heap_memory_usage: 253147312\nnon_heap_memory_usage: 174692688\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535726000,"args":{"JVM stats":"heap_memory_usage: 253147312\nnon_heap_memory_usage: 174692688\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535742000,"args":{"JVM stats":"heap_memory_usage: 254258920\nnon_heap_memory_usage: 174695496\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535757000,"args":{"JVM stats":"heap_memory_usage: 255390784\nnon_heap_memory_usage: 174697096\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535758000,"args":{"JVM stats":"heap_memory_usage: 255390784\nnon_heap_memory_usage: 174697096\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535813000,"args":{"JVM stats":"heap_memory_usage: 256057872\nnon_heap_memory_usage: 174728680\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535814000,"args":{"JVM stats":"heap_memory_usage: 256169024\nnon_heap_memory_usage: 174728680\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535821000,"args":{"JVM stats":"heap_memory_usage: 257170016\nnon_heap_memory_usage: 174728680\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535822000,"args":{"JVM stats":"heap_memory_usage: 257170016\nnon_heap_memory_usage: 174728680\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535830000,"args":{"JVM stats":"heap_memory_usage: 257725664\nnon_heap_memory_usage: 174728680\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535830001,"args":{"JVM stats":"heap_memory_usage: 257836760\nnon_heap_memory_usage: 174728680\nloaded_class_count: 16872\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535888000,"args":{"JVM stats":"heap_memory_usage: 263606232\nnon_heap_memory_usage: 174823744\nloaded_class_count: 16872\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535891000,"args":{"JVM stats":"heap_memory_usage: 263988224\nnon_heap_memory_usage: 174829800\nloaded_class_count: 16872\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535892000,"args":{"JVM stats":"heap_memory_usage: 264099528\nnon_heap_memory_usage: 174829800\nloaded_class_count: 16872\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535893000,"args":{"JVM stats":"heap_memory_usage: 264099528\nnon_heap_memory_usage: 174829832\nloaded_class_count: 16872\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535895000,"args":{"JVM stats":"heap_memory_usage: 264214736\nnon_heap_memory_usage: 174829832\nloaded_class_count: 16872\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535897000,"args":{"JVM stats":"heap_memory_usage: 264441120\nnon_heap_memory_usage: 174829832\nloaded_class_count: 16872\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447535925000,"args":{"JVM stats":"heap_memory_usage: 265777912\nnon_heap_memory_usage: 174837320\nloaded_class_count: 16872\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536098000,"args":{"JVM stats":"heap_memory_usage: 305729824\nnon_heap_memory_usage: 175041520\nloaded_class_count: 16872\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536112000,"args":{"JVM stats":"heap_memory_usage: 306830768\nnon_heap_memory_usage: 175043312\nloaded_class_count: 16872\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536152000,"args":{"JVM stats":"heap_memory_usage: 313758368\nnon_heap_memory_usage: 175068112\nloaded_class_count: 16872\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536153000,"args":{"JVM stats":"heap_memory_usage: 313873576\nnon_heap_memory_usage: 175068176\nloaded_class_count: 16872\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536162000,"args":{"JVM stats":"heap_memory_usage: 314446216\nnon_heap_memory_usage: 175068176\nloaded_class_count: 16872\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536415000,"args":{"JVM stats":"heap_memory_usage: 325101248\nnon_heap_memory_usage: 175167520\nloaded_class_count: 16872\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536418000,"args":{"JVM stats":"heap_memory_usage: 325327608\nnon_heap_memory_usage: 175167520\nloaded_class_count: 16872\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536428000,"args":{"JVM stats":"heap_memory_usage: 325772440\nnon_heap_memory_usage: 175177184\nloaded_class_count: 16872\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536431000,"args":{"JVM stats":"heap_memory_usage: 325894936\nnon_heap_memory_usage: 175204704\nloaded_class_count: 16872\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536431001,"args":{"JVM stats":"heap_memory_usage: 326006056\nnon_heap_memory_usage: 175204704\nloaded_class_count: 16872\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536431000,"args":{"JVM stats":"heap_memory_usage: 326006056\nnon_heap_memory_usage: 175204704\nloaded_class_count: 16872\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447536451000,"args":{"JVM stats":"heap_memory_usage: 327126528\nnon_heap_memory_usage: 175229208\nloaded_class_count: 16872\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":33,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535331000,"dur":4000},{"pid":1,"tid":33,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535335000,"dur":7000},{"pid":1,"tid":33,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535342000,"dur":7000},{"pid":1,"tid":33,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535342000,"dur":7000},{"pid":1,"tid":33,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535354000,"dur":3000},{"pid":1,"tid":33,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535357000,"dur":1000},{"pid":1,"tid":33,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535359000,"dur":1000},{"pid":1,"tid":33,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535361000,"dur":100},{"pid":1,"tid":33,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535361000,"dur":100},{"pid":1,"tid":33,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535361000,"dur":1000},{"pid":1,"tid":33,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535362000,"dur":1000},{"pid":1,"tid":33,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535363000,"dur":100},{"pid":1,"tid":33,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535363000,"dur":3000},{"pid":1,"tid":33,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535366000,"dur":100},{"pid":1,"tid":33,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535366000,"dur":100},{"pid":1,"tid":33,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535366000,"dur":100},{"pid":1,"tid":33,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535366000,"dur":43000},{"pid":1,"tid":33,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535409000,"dur":1000},{"pid":1,"tid":33,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535410000,"dur":6000},{"pid":1,"tid":33,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535418000,"dur":3000},{"pid":1,"tid":33,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535421000,"dur":100},{"pid":1,"tid":33,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535358000,"dur":63000},{"pid":1,"tid":33,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535421000,"dur":4000},{"pid":1,"tid":33,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535425000,"dur":7000},{"pid":1,"tid":33,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535353000,"dur":80000},{"pid":1,"tid":33,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535433000,"dur":3000},{"pid":1,"tid":33,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447535352000,"dur":84000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535454000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535455000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535456000,"dur":53000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535510000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535515000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535519000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535519000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535520000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535521000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535522000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535523000,"dur":34000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535558000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535559000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535562000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535563000,"dur":4000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535568000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535568000,"dur":21000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535589000,"dur":117000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535707000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535710000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535712000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535713000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535716000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535719000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535725000,"dur":1000},{"pid":1,"tid":34,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447535735000,"dur":1000},{"pid":1,"tid":34,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447535736000,"dur":1000},{"pid":1,"tid":34,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447535736000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535726000,"dur":16000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535743000,"dur":14000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535758000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535759000,"dur":54000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535814000,"dur":100},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535815000,"dur":6000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535822000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535823000,"dur":6000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535830000,"dur":100},{"pid":1,"tid":34,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447535850000,"dur":9000},{"pid":1,"tid":34,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447535859000,"dur":23000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535830000,"dur":58000},{"pid":1,"tid":34,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447535889000,"dur":1000},{"pid":1,"tid":34,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447535890000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535888000,"dur":3000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535891000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535892000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535893000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447535896000,"dur":1000},{"pid":1,"tid":34,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447535910000,"dur":1000},{"pid":1,"tid":34,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447535911000,"dur":4000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535898000,"dur":27000},{"pid":1,"tid":34,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447535947000,"dur":1000},{"pid":1,"tid":34,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447535948000,"dur":138000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447535926000,"dur":172000},{"pid":1,"tid":34,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447536107000,"dur":2000},{"pid":1,"tid":34,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447536109000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447536099000,"dur":13000},{"pid":1,"tid":34,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447536127000,"dur":1000},{"pid":1,"tid":34,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447536128000,"dur":21000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447536112000,"dur":40000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447536152000,"dur":1000},{"pid":1,"tid":34,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447536156000,"dur":2000},{"pid":1,"tid":34,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447536158000,"dur":2000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447536154000,"dur":8000},{"pid":1,"tid":34,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447536169000,"dur":1000},{"pid":1,"tid":34,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447536170000,"dur":244000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447536162000,"dur":253000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447536415000,"dur":2000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447536418000,"dur":10000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447536429000,"dur":2000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447536431000,"dur":100},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447536431000,"dur":100},{"pid":1,"tid":33,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447536437000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-58-56-451.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-58-56-451.rawproto
new file mode 100644
index 00000000..182d11ea
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-58-56-451.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-59-57-987.json b/IGetAndroid/build/android-profile/profile-2018-02-12-15-59-57-987.json
new file mode 100644
index 00000000..d7e1ff3c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-59-57-987.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596355000,"args":{"JVM stats":"heap_memory_usage: 138918792\nnon_heap_memory_usage: 175301272\nloaded_class_count: 16879\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 14\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596454000,"args":{"JVM stats":"heap_memory_usage: 149262448\nnon_heap_memory_usage: 175456032\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596455000,"args":{"JVM stats":"heap_memory_usage: 149389896\nnon_heap_memory_usage: 175456736\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596503000,"args":{"JVM stats":"heap_memory_usage: 155675088\nnon_heap_memory_usage: 175476072\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596509000,"args":{"JVM stats":"heap_memory_usage: 156307592\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596517000,"args":{"JVM stats":"heap_memory_usage: 156686904\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596519000,"args":{"JVM stats":"heap_memory_usage: 156686904\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596520000,"args":{"JVM stats":"heap_memory_usage: 156686904\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596521000,"args":{"JVM stats":"heap_memory_usage: 156813328\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596522000,"args":{"JVM stats":"heap_memory_usage: 156813328\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596523000,"args":{"JVM stats":"heap_memory_usage: 156813328\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596563000,"args":{"JVM stats":"heap_memory_usage: 160361064\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596564000,"args":{"JVM stats":"heap_memory_usage: 160487504\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596567000,"args":{"JVM stats":"heap_memory_usage: 160613912\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596569000,"args":{"JVM stats":"heap_memory_usage: 160613912\nnon_heap_memory_usage: 175476776\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596579000,"args":{"JVM stats":"heap_memory_usage: 161752176\nnon_heap_memory_usage: 175480360\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596579001,"args":{"JVM stats":"heap_memory_usage: 161752176\nnon_heap_memory_usage: 175477288\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596595000,"args":{"JVM stats":"heap_memory_usage: 162472040\nnon_heap_memory_usage: 175477288\nloaded_class_count: 16880\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596783000,"args":{"JVM stats":"heap_memory_usage: 178874824\nnon_heap_memory_usage: 175006744\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596790000,"args":{"JVM stats":"heap_memory_usage: 178874824\nnon_heap_memory_usage: 175010344\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596794000,"args":{"JVM stats":"heap_memory_usage: 179140000\nnon_heap_memory_usage: 175010344\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596797000,"args":{"JVM stats":"heap_memory_usage: 179140000\nnon_heap_memory_usage: 175010344\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596807000,"args":{"JVM stats":"heap_memory_usage: 179519464\nnon_heap_memory_usage: 175010344\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596813000,"args":{"JVM stats":"heap_memory_usage: 179772904\nnon_heap_memory_usage: 175013224\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596823000,"args":{"JVM stats":"heap_memory_usage: 180025752\nnon_heap_memory_usage: 175013224\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596827000,"args":{"JVM stats":"heap_memory_usage: 180152184\nnon_heap_memory_usage: 175013224\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596909000,"args":{"JVM stats":"heap_memory_usage: 181290376\nnon_heap_memory_usage: 175015160\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596936000,"args":{"JVM stats":"heap_memory_usage: 182171472\nnon_heap_memory_usage: 175015160\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447596938000,"args":{"JVM stats":"heap_memory_usage: 182171472\nnon_heap_memory_usage: 175021624\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597047000,"args":{"JVM stats":"heap_memory_usage: 182944256\nnon_heap_memory_usage: 175032824\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597052000,"args":{"JVM stats":"heap_memory_usage: 182944256\nnon_heap_memory_usage: 175032824\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597076000,"args":{"JVM stats":"heap_memory_usage: 183703064\nnon_heap_memory_usage: 175032824\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597077000,"args":{"JVM stats":"heap_memory_usage: 183703064\nnon_heap_memory_usage: 175032824\nloaded_class_count: 16880\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597097000,"args":{"JVM stats":"heap_memory_usage: 184715056\nnon_heap_memory_usage: 175040432\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597099000,"args":{"JVM stats":"heap_memory_usage: 184841464\nnon_heap_memory_usage: 175040432\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597203000,"args":{"JVM stats":"heap_memory_usage: 190247760\nnon_heap_memory_usage: 175107568\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597210000,"args":{"JVM stats":"heap_memory_usage: 190664424\nnon_heap_memory_usage: 175108144\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597211000,"args":{"JVM stats":"heap_memory_usage: 190664424\nnon_heap_memory_usage: 175108144\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597213000,"args":{"JVM stats":"heap_memory_usage: 190790872\nnon_heap_memory_usage: 175108144\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597216000,"args":{"JVM stats":"heap_memory_usage: 190803208\nnon_heap_memory_usage: 175108144\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597219000,"args":{"JVM stats":"heap_memory_usage: 190861488\nnon_heap_memory_usage: 175108144\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597271000,"args":{"JVM stats":"heap_memory_usage: 192254152\nnon_heap_memory_usage: 175113904\nloaded_class_count: 16881\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597565000,"args":{"JVM stats":"heap_memory_usage: 232406736\nnon_heap_memory_usage: 175485040\nloaded_class_count: 16881\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597593000,"args":{"JVM stats":"heap_memory_usage: 233614696\nnon_heap_memory_usage: 175498544\nloaded_class_count: 16881\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597659000,"args":{"JVM stats":"heap_memory_usage: 240440856\nnon_heap_memory_usage: 175522128\nloaded_class_count: 16881\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597662000,"args":{"JVM stats":"heap_memory_usage: 240571376\nnon_heap_memory_usage: 175527504\nloaded_class_count: 16881\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597673000,"args":{"JVM stats":"heap_memory_usage: 241021328\nnon_heap_memory_usage: 175531152\nloaded_class_count: 16881\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597936000,"args":{"JVM stats":"heap_memory_usage: 252185304\nnon_heap_memory_usage: 175598920\nloaded_class_count: 16881\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597942000,"args":{"JVM stats":"heap_memory_usage: 252319952\nnon_heap_memory_usage: 175598920\nloaded_class_count: 16881\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597957000,"args":{"JVM stats":"heap_memory_usage: 252707440\nnon_heap_memory_usage: 175598920\nloaded_class_count: 16881\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597961000,"args":{"JVM stats":"heap_memory_usage: 252987728\nnon_heap_memory_usage: 175598920\nloaded_class_count: 16881\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597961001,"args":{"JVM stats":"heap_memory_usage: 252987728\nnon_heap_memory_usage: 175598920\nloaded_class_count: 16881\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597962000,"args":{"JVM stats":"heap_memory_usage: 252987728\nnon_heap_memory_usage: 175598920\nloaded_class_count: 16881\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447597988000,"args":{"JVM stats":"heap_memory_usage: 253880328\nnon_heap_memory_usage: 175624696\nloaded_class_count: 16881\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":33,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596355000,"dur":2000},{"pid":1,"tid":33,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596357000,"dur":3000},{"pid":1,"tid":33,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596360000,"dur":1000},{"pid":1,"tid":33,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596360000,"dur":1000},{"pid":1,"tid":33,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596365000,"dur":2000},{"pid":1,"tid":33,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596367000,"dur":1000},{"pid":1,"tid":33,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596369000,"dur":100},{"pid":1,"tid":33,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596369000,"dur":1000},{"pid":1,"tid":33,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596370000,"dur":100},{"pid":1,"tid":33,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596370000,"dur":1000},{"pid":1,"tid":33,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596371000,"dur":100},{"pid":1,"tid":33,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596371000,"dur":1000},{"pid":1,"tid":33,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596372000,"dur":2000},{"pid":1,"tid":33,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596374000,"dur":1000},{"pid":1,"tid":33,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596375000,"dur":100},{"pid":1,"tid":33,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596375000,"dur":100},{"pid":1,"tid":33,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596375000,"dur":34000},{"pid":1,"tid":33,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596409000,"dur":100},{"pid":1,"tid":33,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596409000,"dur":8000},{"pid":1,"tid":33,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596419000,"dur":4000},{"pid":1,"tid":33,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596423000,"dur":100},{"pid":1,"tid":33,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596368000,"dur":55000},{"pid":1,"tid":33,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596423000,"dur":4000},{"pid":1,"tid":33,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596427000,"dur":6000},{"pid":1,"tid":33,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596364000,"dur":70000},{"pid":1,"tid":33,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596434000,"dur":4000},{"pid":1,"tid":33,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447596363000,"dur":75000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447596452000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596455000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596456000,"dur":47000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596504000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596512000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596518000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596519000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596520000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596522000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596522000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596523000,"dur":40000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596563000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596564000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596568000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596571000,"dur":8000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447596579000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596579000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447596596000,"dur":187000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596784000,"dur":6000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596791000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596795000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596799000,"dur":8000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596808000,"dur":5000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447596813000,"dur":10000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596824000,"dur":3000},{"pid":1,"tid":35,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447596879000,"dur":10000},{"pid":1,"tid":35,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447596890000,"dur":5000},{"pid":1,"tid":35,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447596889000,"dur":8000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447596829000,"dur":80000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596910000,"dur":26000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447596937000,"dur":1000},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447596939000,"dur":108000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447597049000,"dur":3000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447597054000,"dur":22000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597077000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447597078000,"dur":19000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447597097000,"dur":2000},{"pid":1,"tid":36,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447597132000,"dur":14000},{"pid":1,"tid":36,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447597146000,"dur":47000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597100000,"dur":103000},{"pid":1,"tid":36,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447597209000,"dur":100},{"pid":1,"tid":36,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447597209000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597205000,"dur":5000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597211000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597213000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447597214000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447597217000,"dur":2000},{"pid":1,"tid":37,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447597245000,"dur":1000},{"pid":1,"tid":37,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447597246000,"dur":9000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597220000,"dur":51000},{"pid":1,"tid":37,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447597310000,"dur":3000},{"pid":1,"tid":37,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447597313000,"dur":235000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597273000,"dur":292000},{"pid":1,"tid":37,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447597585000,"dur":3000},{"pid":1,"tid":37,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447597588000,"dur":3000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597565000,"dur":27000},{"pid":1,"tid":37,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447597623000,"dur":2000},{"pid":1,"tid":37,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447597625000,"dur":29000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597593000,"dur":66000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597660000,"dur":2000},{"pid":1,"tid":37,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447597667000,"dur":2000},{"pid":1,"tid":37,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447597669000,"dur":2000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597662000,"dur":11000},{"pid":1,"tid":37,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447597678000,"dur":1000},{"pid":1,"tid":37,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447597679000,"dur":253000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597674000,"dur":261000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447597937000,"dur":4000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447597943000,"dur":14000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597958000,"dur":3000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597961000,"dur":100},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447597962000,"dur":100},{"pid":1,"tid":33,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447597973000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-15-59-57-987.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-15-59-57-987.rawproto
new file mode 100644
index 00000000..5af854bf
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-15-59-57-987.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-16-01-27-089.json b/IGetAndroid/build/android-profile/profile-2018-02-12-16-01-27-089.json
new file mode 100644
index 00000000..55ef1fa2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-16-01-27-089.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685805000,"args":{"JVM stats":"heap_memory_usage: 309927728\nnon_heap_memory_usage: 175723288\nloaded_class_count: 16888\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685889000,"args":{"JVM stats":"heap_memory_usage: 320624128\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685890000,"args":{"JVM stats":"heap_memory_usage: 320750560\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685930000,"args":{"JVM stats":"heap_memory_usage: 326848752\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685934000,"args":{"JVM stats":"heap_memory_usage: 327228336\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685938000,"args":{"JVM stats":"heap_memory_usage: 327609152\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685939000,"args":{"JVM stats":"heap_memory_usage: 327609152\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685940000,"args":{"JVM stats":"heap_memory_usage: 327735616\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685941000,"args":{"JVM stats":"heap_memory_usage: 327735616\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685941001,"args":{"JVM stats":"heap_memory_usage: 327735616\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685941000,"args":{"JVM stats":"heap_memory_usage: 327862048\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685971000,"args":{"JVM stats":"heap_memory_usage: 331405128\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685973000,"args":{"JVM stats":"heap_memory_usage: 331531568\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685976000,"args":{"JVM stats":"heap_memory_usage: 331784440\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685977000,"args":{"JVM stats":"heap_memory_usage: 331910888\nnon_heap_memory_usage: 175526000\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685983000,"args":{"JVM stats":"heap_memory_usage: 332922704\nnon_heap_memory_usage: 175569888\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685984000,"args":{"JVM stats":"heap_memory_usage: 333049192\nnon_heap_memory_usage: 175569888\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447685998000,"args":{"JVM stats":"heap_memory_usage: 333817048\nnon_heap_memory_usage: 175570976\nloaded_class_count: 16888\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686144000,"args":{"JVM stats":"heap_memory_usage: 126984824\nnon_heap_memory_usage: 175587008\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 21\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686146000,"args":{"JVM stats":"heap_memory_usage: 128368072\nnon_heap_memory_usage: 175587008\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686147000,"args":{"JVM stats":"heap_memory_usage: 128368072\nnon_heap_memory_usage: 175587008\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686147001,"args":{"JVM stats":"heap_memory_usage: 128394256\nnon_heap_memory_usage: 175587008\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686151000,"args":{"JVM stats":"heap_memory_usage: 129249784\nnon_heap_memory_usage: 175587008\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686155000,"args":{"JVM stats":"heap_memory_usage: 129368080\nnon_heap_memory_usage: 175587544\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686164000,"args":{"JVM stats":"heap_memory_usage: 129612816\nnon_heap_memory_usage: 175590488\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686165000,"args":{"JVM stats":"heap_memory_usage: 129732120\nnon_heap_memory_usage: 175590488\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686197000,"args":{"JVM stats":"heap_memory_usage: 130823536\nnon_heap_memory_usage: 175590488\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686217000,"args":{"JVM stats":"heap_memory_usage: 131706336\nnon_heap_memory_usage: 175590488\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686218000,"args":{"JVM stats":"heap_memory_usage: 131706336\nnon_heap_memory_usage: 175590488\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686297000,"args":{"JVM stats":"heap_memory_usage: 132497336\nnon_heap_memory_usage: 175590488\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686299000,"args":{"JVM stats":"heap_memory_usage: 132615624\nnon_heap_memory_usage: 175590488\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686311000,"args":{"JVM stats":"heap_memory_usage: 133687376\nnon_heap_memory_usage: 175590832\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686313000,"args":{"JVM stats":"heap_memory_usage: 133687376\nnon_heap_memory_usage: 175590832\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686326000,"args":{"JVM stats":"heap_memory_usage: 134344960\nnon_heap_memory_usage: 175626672\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686329000,"args":{"JVM stats":"heap_memory_usage: 134463600\nnon_heap_memory_usage: 175626672\nloaded_class_count: 16888\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686406000,"args":{"JVM stats":"heap_memory_usage: 142370304\nnon_heap_memory_usage: 175845344\nloaded_class_count: 16888\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686413000,"args":{"JVM stats":"heap_memory_usage: 142742312\nnon_heap_memory_usage: 175827864\nloaded_class_count: 16888\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686414000,"args":{"JVM stats":"heap_memory_usage: 142820360\nnon_heap_memory_usage: 175829080\nloaded_class_count: 16888\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686414001,"args":{"JVM stats":"heap_memory_usage: 142820360\nnon_heap_memory_usage: 175826776\nloaded_class_count: 16888\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686415000,"args":{"JVM stats":"heap_memory_usage: 143091232\nnon_heap_memory_usage: 175826776\nloaded_class_count: 16888\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686418000,"args":{"JVM stats":"heap_memory_usage: 143091232\nnon_heap_memory_usage: 175827608\nloaded_class_count: 16888\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686480000,"args":{"JVM stats":"heap_memory_usage: 144825384\nnon_heap_memory_usage: 175836504\nloaded_class_count: 16888\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686789000,"args":{"JVM stats":"heap_memory_usage: 190182272\nnon_heap_memory_usage: 175899784\nloaded_class_count: 16889\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686807000,"args":{"JVM stats":"heap_memory_usage: 191397784\nnon_heap_memory_usage: 175914376\nloaded_class_count: 16889\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686846000,"args":{"JVM stats":"heap_memory_usage: 198538232\nnon_heap_memory_usage: 175923016\nloaded_class_count: 16889\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686847000,"args":{"JVM stats":"heap_memory_usage: 198603944\nnon_heap_memory_usage: 175923016\nloaded_class_count: 16889\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447686855000,"args":{"JVM stats":"heap_memory_usage: 199114872\nnon_heap_memory_usage: 175923016\nloaded_class_count: 16889\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447687055000,"args":{"JVM stats":"heap_memory_usage: 210151912\nnon_heap_memory_usage: 176192080\nloaded_class_count: 16889\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447687061000,"args":{"JVM stats":"heap_memory_usage: 210345488\nnon_heap_memory_usage: 176192848\nloaded_class_count: 16889\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447687069000,"args":{"JVM stats":"heap_memory_usage: 210789520\nnon_heap_memory_usage: 176194576\nloaded_class_count: 16889\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447687071000,"args":{"JVM stats":"heap_memory_usage: 211035976\nnon_heap_memory_usage: 176194576\nloaded_class_count: 16889\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447687071001,"args":{"JVM stats":"heap_memory_usage: 211035976\nnon_heap_memory_usage: 176194576\nloaded_class_count: 16889\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447687072000,"args":{"JVM stats":"heap_memory_usage: 211035976\nnon_heap_memory_usage: 176194576\nloaded_class_count: 16889\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447687089000,"args":{"JVM stats":"heap_memory_usage: 211733808\nnon_heap_memory_usage: 176213752\nloaded_class_count: 16889\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":38,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685805000,"dur":3000},{"pid":1,"tid":38,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685808000,"dur":2000},{"pid":1,"tid":38,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685810000,"dur":4000},{"pid":1,"tid":38,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685810000,"dur":4000},{"pid":1,"tid":38,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685817000,"dur":3000},{"pid":1,"tid":38,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685820000,"dur":100},{"pid":1,"tid":38,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685821000,"dur":1000},{"pid":1,"tid":38,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685822000,"dur":100},{"pid":1,"tid":38,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685822000,"dur":100},{"pid":1,"tid":38,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685822000,"dur":100},{"pid":1,"tid":38,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685822000,"dur":100},{"pid":1,"tid":38,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685822000,"dur":100},{"pid":1,"tid":38,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685822000,"dur":2000},{"pid":1,"tid":38,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685824000,"dur":100},{"pid":1,"tid":38,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685824000,"dur":100},{"pid":1,"tid":38,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685824000,"dur":1000},{"pid":1,"tid":38,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685825000,"dur":22000},{"pid":1,"tid":38,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685847000,"dur":100},{"pid":1,"tid":38,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685847000,"dur":6000},{"pid":1,"tid":38,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685855000,"dur":3000},{"pid":1,"tid":38,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685858000,"dur":100},{"pid":1,"tid":38,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447685820000,"dur":38000},{"pid":1,"tid":38,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685858000,"dur":5000},{"pid":1,"tid":38,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685863000,"dur":6000},{"pid":1,"tid":38,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685817000,"dur":53000},{"pid":1,"tid":38,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685871000,"dur":2000},{"pid":1,"tid":38,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447685815000,"dur":58000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447685888000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685890000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685890000,"dur":40000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685930000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685935000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685939000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685939000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685940000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685941000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685941000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685942000,"dur":29000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685972000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685974000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685976000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685978000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447685984000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447685984000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447685998000,"dur":146000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686145000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686146000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686147000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686148000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686152000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686155000,"dur":9000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686164000,"dur":1000},{"pid":1,"tid":39,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447686177000,"dur":1000},{"pid":1,"tid":39,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447686178000,"dur":1000},{"pid":1,"tid":39,"id":58,"name":"task file verification","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447686181000,"dur":1000},{"pid":1,"tid":39,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447686178000,"dur":10000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686165000,"dur":32000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686198000,"dur":19000},{"pid":1,"tid":0,"id":60,"name":"task: external native build json","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686218000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: external native build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686219000,"dur":78000},{"pid":1,"tid":0,"id":62,"name":"task: merge source set folders","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686298000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686300000,"dur":11000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686312000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686314000,"dur":12000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686327000,"dur":1000},{"pid":1,"tid":39,"id":68,"name":"transform prep: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447686352000,"dur":9000},{"pid":1,"tid":39,"id":69,"name":"transform: instant run","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447686361000,"dur":32000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686329000,"dur":77000},{"pid":1,"tid":40,"id":71,"name":"transform prep: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447686411000,"dur":100},{"pid":1,"tid":40,"id":72,"name":"transform: instant run dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447686412000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686408000,"dur":5000},{"pid":1,"tid":0,"id":73,"name":"task: unknown task type","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686413000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: pre cold swap","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686414000,"dur":100},{"pid":1,"tid":0,"id":75,"name":"task: fast deploy runtime extractor","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686415000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: generate instant run app info","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447686416000,"dur":2000},{"pid":1,"tid":39,"id":78,"name":"transform prep: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447686439000,"dur":2000},{"pid":1,"tid":39,"id":79,"name":"transform: instant run slicer","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447686441000,"dur":19000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686419000,"dur":61000},{"pid":1,"tid":39,"id":81,"name":"transform prep: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447686512000,"dur":1000},{"pid":1,"tid":39,"id":82,"name":"transform: dex archive builder","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447686513000,"dur":259000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686482000,"dur":307000},{"pid":1,"tid":39,"id":84,"name":"transform prep: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447686804000,"dur":1000},{"pid":1,"tid":39,"id":85,"name":"transform: external libs merger","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447686805000,"dur":1000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686789000,"dur":18000},{"pid":1,"tid":41,"id":87,"name":"transform prep: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447686822000,"dur":1000},{"pid":1,"tid":41,"id":88,"name":"transform: dex merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447686823000,"dur":19000},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686807000,"dur":39000},{"pid":1,"tid":0,"id":89,"name":"task: validate signing","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686846000,"dur":1000},{"pid":1,"tid":41,"id":91,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447686851000,"dur":1000},{"pid":1,"tid":41,"id":92,"name":"transform: instant run dependencies apk builder","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447686852000,"dur":2000},{"pid":1,"tid":0,"id":90,"name":"task: transform","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686847000,"dur":8000},{"pid":1,"tid":41,"id":94,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447686859000,"dur":1000},{"pid":1,"tid":41,"id":95,"name":"transform: instant run slice split apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447686860000,"dur":191000},{"pid":1,"tid":0,"id":93,"name":"task: transform","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447686856000,"dur":199000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447687055000,"dur":5000},{"pid":1,"tid":0,"id":97,"name":"task: package application","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447687061000,"dur":8000},{"pid":1,"tid":0,"id":98,"name":"task: build info writer","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447687069000,"dur":2000},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447687071000,"dur":100},{"pid":1,"tid":0,"id":100,"name":"task: unknown task type","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447687071000,"dur":1000},{"pid":1,"tid":38,"id":101,"name":"base plugin build finished","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447687078000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-16-01-27-089.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-16-01-27-089.rawproto
new file mode 100644
index 00000000..8ab674b4
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-16-01-27-089.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-16-02-12-985.json b/IGetAndroid/build/android-profile/profile-2018-02-12-16-02-12-985.json
new file mode 100644
index 00000000..b5c2e269
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-16-02-12-985.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731352000,"args":{"JVM stats":"heap_memory_usage: 267269504\nnon_heap_memory_usage: 176413144\nloaded_class_count: 16896\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731467000,"args":{"JVM stats":"heap_memory_usage: 277558072\nnon_heap_memory_usage: 176577888\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731467001,"args":{"JVM stats":"heap_memory_usage: 277558072\nnon_heap_memory_usage: 176577888\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731538000,"args":{"JVM stats":"heap_memory_usage: 283890992\nnon_heap_memory_usage: 176596376\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731544000,"args":{"JVM stats":"heap_memory_usage: 284137560\nnon_heap_memory_usage: 176596376\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731553000,"args":{"JVM stats":"heap_memory_usage: 284507296\nnon_heap_memory_usage: 176596376\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731554000,"args":{"JVM stats":"heap_memory_usage: 284507296\nnon_heap_memory_usage: 176596376\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731555000,"args":{"JVM stats":"heap_memory_usage: 284630624\nnon_heap_memory_usage: 176596376\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731557000,"args":{"JVM stats":"heap_memory_usage: 284630624\nnon_heap_memory_usage: 176596376\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731557001,"args":{"JVM stats":"heap_memory_usage: 284630624\nnon_heap_memory_usage: 176596376\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731558000,"args":{"JVM stats":"heap_memory_usage: 284630624\nnon_heap_memory_usage: 176596376\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731739000,"args":{"JVM stats":"heap_memory_usage: 317871848\nnon_heap_memory_usage: 176692048\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731740000,"args":{"JVM stats":"heap_memory_usage: 317995080\nnon_heap_memory_usage: 176692048\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731744000,"args":{"JVM stats":"heap_memory_usage: 318812008\nnon_heap_memory_usage: 176707024\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447731744001,"args":{"JVM stats":"heap_memory_usage: 318812008\nnon_heap_memory_usage: 176706896\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732434000,"args":{"JVM stats":"heap_memory_usage: 332973912\nnon_heap_memory_usage: 176766640\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732435000,"args":{"JVM stats":"heap_memory_usage: 333043576\nnon_heap_memory_usage: 176766640\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732459000,"args":{"JVM stats":"heap_memory_usage: 334173088\nnon_heap_memory_usage: 176770544\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732470000,"args":{"JVM stats":"heap_memory_usage: 335160712\nnon_heap_memory_usage: 176770544\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732472000,"args":{"JVM stats":"heap_memory_usage: 335283944\nnon_heap_memory_usage: 176770544\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732473000,"args":{"JVM stats":"heap_memory_usage: 335283944\nnon_heap_memory_usage: 176770544\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732474000,"args":{"JVM stats":"heap_memory_usage: 335407144\nnon_heap_memory_usage: 176770544\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732479000,"args":{"JVM stats":"heap_memory_usage: 335530408\nnon_heap_memory_usage: 176770544\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732588000,"args":{"JVM stats":"heap_memory_usage: 122863720\nnon_heap_memory_usage: 176812896\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 22\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732593000,"args":{"JVM stats":"heap_memory_usage: 124639080\nnon_heap_memory_usage: 176813600\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732596000,"args":{"JVM stats":"heap_memory_usage: 124639080\nnon_heap_memory_usage: 176817824\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732606000,"args":{"JVM stats":"heap_memory_usage: 125100712\nnon_heap_memory_usage: 176817824\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732623000,"args":{"JVM stats":"heap_memory_usage: 126334856\nnon_heap_memory_usage: 176823200\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732623001,"args":{"JVM stats":"heap_memory_usage: 126334856\nnon_heap_memory_usage: 176823200\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732700000,"args":{"JVM stats":"heap_memory_usage: 127360016\nnon_heap_memory_usage: 176946720\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732702000,"args":{"JVM stats":"heap_memory_usage: 127360016\nnon_heap_memory_usage: 176946720\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732710000,"args":{"JVM stats":"heap_memory_usage: 127949184\nnon_heap_memory_usage: 176946720\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732712000,"args":{"JVM stats":"heap_memory_usage: 127949184\nnon_heap_memory_usage: 176946720\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732720000,"args":{"JVM stats":"heap_memory_usage: 128878080\nnon_heap_memory_usage: 176954072\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732721000,"args":{"JVM stats":"heap_memory_usage: 128878080\nnon_heap_memory_usage: 176954072\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732738000,"args":{"JVM stats":"heap_memory_usage: 130533328\nnon_heap_memory_usage: 176958880\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732739000,"args":{"JVM stats":"heap_memory_usage: 130533328\nnon_heap_memory_usage: 176958880\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732739001,"args":{"JVM stats":"heap_memory_usage: 130533328\nnon_heap_memory_usage: 176958880\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732740000,"args":{"JVM stats":"heap_memory_usage: 130533328\nnon_heap_memory_usage: 176958880\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732742000,"args":{"JVM stats":"heap_memory_usage: 130533328\nnon_heap_memory_usage: 176963464\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732743000,"args":{"JVM stats":"heap_memory_usage: 130601568\nnon_heap_memory_usage: 176963464\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732754000,"args":{"JVM stats":"heap_memory_usage: 131322176\nnon_heap_memory_usage: 176974920\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732772000,"args":{"JVM stats":"heap_memory_usage: 132813136\nnon_heap_memory_usage: 176974920\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732779000,"args":{"JVM stats":"heap_memory_usage: 133293888\nnon_heap_memory_usage: 176974920\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732787000,"args":{"JVM stats":"heap_memory_usage: 133774920\nnon_heap_memory_usage: 176974920\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732789000,"args":{"JVM stats":"heap_memory_usage: 133911360\nnon_heap_memory_usage: 176974920\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732791000,"args":{"JVM stats":"heap_memory_usage: 134031648\nnon_heap_memory_usage: 176974920\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732793000,"args":{"JVM stats":"heap_memory_usage: 134151680\nnon_heap_memory_usage: 176989960\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732795000,"args":{"JVM stats":"heap_memory_usage: 134271992\nnon_heap_memory_usage: 176989960\nloaded_class_count: 16896\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732971000,"args":{"JVM stats":"heap_memory_usage: 169086688\nnon_heap_memory_usage: 177007664\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732975000,"args":{"JVM stats":"heap_memory_usage: 169398792\nnon_heap_memory_usage: 177010928\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732975001,"args":{"JVM stats":"heap_memory_usage: 169398792\nnon_heap_memory_usage: 177010928\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732975000,"args":{"JVM stats":"heap_memory_usage: 169411128\nnon_heap_memory_usage: 177010928\nloaded_class_count: 16896\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447732985000,"args":{"JVM stats":"heap_memory_usage: 170290776\nnon_heap_memory_usage: 177021000\nloaded_class_count: 16896\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":38,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731352000,"dur":3000},{"pid":1,"tid":38,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731355000,"dur":5000},{"pid":1,"tid":38,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731360000,"dur":1000},{"pid":1,"tid":38,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731360000,"dur":1000},{"pid":1,"tid":38,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731365000,"dur":2000},{"pid":1,"tid":38,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731367000,"dur":1000},{"pid":1,"tid":38,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731368000,"dur":1000},{"pid":1,"tid":38,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731369000,"dur":100},{"pid":1,"tid":38,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731369000,"dur":1000},{"pid":1,"tid":38,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731370000,"dur":100},{"pid":1,"tid":38,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731370000,"dur":1000},{"pid":1,"tid":38,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731371000,"dur":100},{"pid":1,"tid":38,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731371000,"dur":2000},{"pid":1,"tid":38,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731373000,"dur":100},{"pid":1,"tid":38,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731373000,"dur":100},{"pid":1,"tid":38,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731373000,"dur":100},{"pid":1,"tid":38,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731373000,"dur":57000},{"pid":1,"tid":38,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731430000,"dur":1000},{"pid":1,"tid":38,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731431000,"dur":5000},{"pid":1,"tid":38,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731437000,"dur":1000},{"pid":1,"tid":38,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731438000,"dur":100},{"pid":1,"tid":38,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447731368000,"dur":70000},{"pid":1,"tid":38,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731438000,"dur":3000},{"pid":1,"tid":38,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731441000,"dur":7000},{"pid":1,"tid":38,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731365000,"dur":84000},{"pid":1,"tid":38,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731450000,"dur":1000},{"pid":1,"tid":38,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447731363000,"dur":88000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447731465000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731467000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731467000,"dur":71000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731538000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731546000,"dur":7000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731553000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731554000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731555000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731557000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731558000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447731559000,"dur":180000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731739000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731740000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447731744000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447731745000,"dur":689000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732435000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732435000,"dur":24000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732459000,"dur":11000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732471000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732472000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732474000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732474000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732481000,"dur":107000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732588000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732594000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732597000,"dur":9000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732607000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732623000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732624000,"dur":76000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732701000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732702000,"dur":8000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732711000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732712000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732720000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732721000,"dur":17000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732739000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732739000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732740000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732741000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732742000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732743000,"dur":11000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732754000,"dur":18000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732772000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732779000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732788000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732790000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732792000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447732794000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732795000,"dur":176000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732972000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732975000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447732975000,"dur":100},{"pid":1,"tid":38,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447732979000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-16-02-12-985.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-16-02-12-985.rawproto
new file mode 100644
index 00000000..fda19c12
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-16-02-12-985.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-16-03-16-732.json b/IGetAndroid/build/android-profile/profile-2018-02-12-16-03-16-732.json
new file mode 100644
index 00000000..c6ac86ef
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-16-03-16-732.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795194000,"args":{"JVM stats":"heap_memory_usage: 224782960\nnon_heap_memory_usage: 177085776\nloaded_class_count: 16903\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795300000,"args":{"JVM stats":"heap_memory_usage: 235235104\nnon_heap_memory_usage: 176993248\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795300001,"args":{"JVM stats":"heap_memory_usage: 235235104\nnon_heap_memory_usage: 177000352\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795348000,"args":{"JVM stats":"heap_memory_usage: 241826160\nnon_heap_memory_usage: 176971736\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795354000,"args":{"JVM stats":"heap_memory_usage: 242048096\nnon_heap_memory_usage: 176971736\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795363000,"args":{"JVM stats":"heap_memory_usage: 242380952\nnon_heap_memory_usage: 176971736\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795364000,"args":{"JVM stats":"heap_memory_usage: 242380952\nnon_heap_memory_usage: 176971736\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795365000,"args":{"JVM stats":"heap_memory_usage: 242491760\nnon_heap_memory_usage: 176971736\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795366000,"args":{"JVM stats":"heap_memory_usage: 242491760\nnon_heap_memory_usage: 176971736\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795366001,"args":{"JVM stats":"heap_memory_usage: 242491760\nnon_heap_memory_usage: 176971736\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795367000,"args":{"JVM stats":"heap_memory_usage: 242602552\nnon_heap_memory_usage: 176971736\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795407000,"args":{"JVM stats":"heap_memory_usage: 246048232\nnon_heap_memory_usage: 176982936\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795409000,"args":{"JVM stats":"heap_memory_usage: 246159056\nnon_heap_memory_usage: 176982936\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795417000,"args":{"JVM stats":"heap_memory_usage: 246602296\nnon_heap_memory_usage: 176982936\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795418000,"args":{"JVM stats":"heap_memory_usage: 246713064\nnon_heap_memory_usage: 176982936\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795442000,"args":{"JVM stats":"heap_memory_usage: 248170328\nnon_heap_memory_usage: 176989656\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795443000,"args":{"JVM stats":"heap_memory_usage: 248170328\nnon_heap_memory_usage: 176947480\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795470000,"args":{"JVM stats":"heap_memory_usage: 248958144\nnon_heap_memory_usage: 176869784\nloaded_class_count: 16903\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795673000,"args":{"JVM stats":"heap_memory_usage: 265133312\nnon_heap_memory_usage: 177014568\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795678000,"args":{"JVM stats":"heap_memory_usage: 265248192\nnon_heap_memory_usage: 177038480\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795680000,"args":{"JVM stats":"heap_memory_usage: 265358992\nnon_heap_memory_usage: 177045216\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795681000,"args":{"JVM stats":"heap_memory_usage: 265358992\nnon_heap_memory_usage: 177052512\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795686000,"args":{"JVM stats":"heap_memory_usage: 265615208\nnon_heap_memory_usage: 177050464\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795702000,"args":{"JVM stats":"heap_memory_usage: 265968456\nnon_heap_memory_usage: 177051232\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795709000,"args":{"JVM stats":"heap_memory_usage: 266202336\nnon_heap_memory_usage: 177051232\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795710000,"args":{"JVM stats":"heap_memory_usage: 266313136\nnon_heap_memory_usage: 177051232\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795742000,"args":{"JVM stats":"heap_memory_usage: 267424608\nnon_heap_memory_usage: 177095176\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795804000,"args":{"JVM stats":"heap_memory_usage: 268447400\nnon_heap_memory_usage: 177130888\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795808000,"args":{"JVM stats":"heap_memory_usage: 268558184\nnon_heap_memory_usage: 177130888\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795912000,"args":{"JVM stats":"heap_memory_usage: 269243536\nnon_heap_memory_usage: 177131720\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795915000,"args":{"JVM stats":"heap_memory_usage: 269243536\nnon_heap_memory_usage: 177131720\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795928000,"args":{"JVM stats":"heap_memory_usage: 270130984\nnon_heap_memory_usage: 177131720\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795930000,"args":{"JVM stats":"heap_memory_usage: 270130984\nnon_heap_memory_usage: 177137096\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795946000,"args":{"JVM stats":"heap_memory_usage: 270907720\nnon_heap_memory_usage: 177133832\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447795949000,"args":{"JVM stats":"heap_memory_usage: 271019016\nnon_heap_memory_usage: 177133832\nloaded_class_count: 16906\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796048000,"args":{"JVM stats":"heap_memory_usage: 276578176\nnon_heap_memory_usage: 177182776\nloaded_class_count: 16906\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796054000,"args":{"JVM stats":"heap_memory_usage: 276957328\nnon_heap_memory_usage: 177182776\nloaded_class_count: 16906\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796056000,"args":{"JVM stats":"heap_memory_usage: 277068128\nnon_heap_memory_usage: 177183160\nloaded_class_count: 16906\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796057000,"args":{"JVM stats":"heap_memory_usage: 277178928\nnon_heap_memory_usage: 177184504\nloaded_class_count: 16906\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796060000,"args":{"JVM stats":"heap_memory_usage: 277178928\nnon_heap_memory_usage: 177184504\nloaded_class_count: 16906\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796062000,"args":{"JVM stats":"heap_memory_usage: 277404608\nnon_heap_memory_usage: 177184504\nloaded_class_count: 16906\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796105000,"args":{"JVM stats":"heap_memory_usage: 278845736\nnon_heap_memory_usage: 177196472\nloaded_class_count: 16906\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796330000,"args":{"JVM stats":"heap_memory_usage: 318518096\nnon_heap_memory_usage: 177448592\nloaded_class_count: 16906\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796353000,"args":{"JVM stats":"heap_memory_usage: 319671408\nnon_heap_memory_usage: 177454032\nloaded_class_count: 16906\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796403000,"args":{"JVM stats":"heap_memory_usage: 326607432\nnon_heap_memory_usage: 177525872\nloaded_class_count: 16906\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796405000,"args":{"JVM stats":"heap_memory_usage: 326830048\nnon_heap_memory_usage: 177525872\nloaded_class_count: 16906\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796415000,"args":{"JVM stats":"heap_memory_usage: 327408800\nnon_heap_memory_usage: 177533296\nloaded_class_count: 16906\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796678000,"args":{"JVM stats":"heap_memory_usage: 125034808\nnon_heap_memory_usage: 177643144\nloaded_class_count: 16906\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 26\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796680000,"args":{"JVM stats":"heap_memory_usage: 126509648\nnon_heap_memory_usage: 177643912\nloaded_class_count: 16906\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796708000,"args":{"JVM stats":"heap_memory_usage: 127120528\nnon_heap_memory_usage: 177646728\nloaded_class_count: 16906\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796711000,"args":{"JVM stats":"heap_memory_usage: 127351520\nnon_heap_memory_usage: 177648072\nloaded_class_count: 16906\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796712000,"args":{"JVM stats":"heap_memory_usage: 127351520\nnon_heap_memory_usage: 177648072\nloaded_class_count: 16906\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796712001,"args":{"JVM stats":"heap_memory_usage: 127351520\nnon_heap_memory_usage: 177648072\nloaded_class_count: 16906\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447796733000,"args":{"JVM stats":"heap_memory_usage: 128090472\nnon_heap_memory_usage: 177656048\nloaded_class_count: 16906\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":42,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795194000,"dur":3000},{"pid":1,"tid":42,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795197000,"dur":4000},{"pid":1,"tid":42,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795201000,"dur":3000},{"pid":1,"tid":42,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795201000,"dur":3000},{"pid":1,"tid":42,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795209000,"dur":3000},{"pid":1,"tid":42,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795212000,"dur":100},{"pid":1,"tid":42,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795213000,"dur":1000},{"pid":1,"tid":42,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795214000,"dur":1000},{"pid":1,"tid":42,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795215000,"dur":100},{"pid":1,"tid":42,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795215000,"dur":1000},{"pid":1,"tid":42,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795216000,"dur":100},{"pid":1,"tid":42,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795216000,"dur":100},{"pid":1,"tid":42,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795216000,"dur":4000},{"pid":1,"tid":42,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795220000,"dur":100},{"pid":1,"tid":42,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795220000,"dur":1000},{"pid":1,"tid":42,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795221000,"dur":100},{"pid":1,"tid":42,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795221000,"dur":43000},{"pid":1,"tid":42,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795264000,"dur":100},{"pid":1,"tid":42,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795264000,"dur":3000},{"pid":1,"tid":42,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795269000,"dur":1000},{"pid":1,"tid":42,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795270000,"dur":1000},{"pid":1,"tid":42,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795212000,"dur":59000},{"pid":1,"tid":42,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795271000,"dur":3000},{"pid":1,"tid":42,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795274000,"dur":7000},{"pid":1,"tid":42,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795208000,"dur":74000},{"pid":1,"tid":42,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795282000,"dur":2000},{"pid":1,"tid":42,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447795206000,"dur":78000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447795298000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795300000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795300000,"dur":47000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795348000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795356000,"dur":7000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795363000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795365000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795365000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795366000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795367000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795368000,"dur":38000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795407000,"dur":2000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795410000,"dur":7000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795417000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795419000,"dur":23000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447795443000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795443000,"dur":27000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447795471000,"dur":202000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795675000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795679000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795681000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795682000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795687000,"dur":14000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447795702000,"dur":7000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795709000,"dur":1000},{"pid":1,"tid":43,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447795728000,"dur":2000},{"pid":1,"tid":43,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447795730000,"dur":1000},{"pid":1,"tid":43,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518447795730000,"dur":3000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447795711000,"dur":30000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795742000,"dur":62000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795806000,"dur":2000},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447795809000,"dur":103000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795914000,"dur":1000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795916000,"dur":12000},{"pid":1,"tid":0,"id":63,"name":"task: unknown task type","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447795929000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795932000,"dur":14000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447795947000,"dur":2000},{"pid":1,"tid":44,"id":67,"name":"transform prep: instant run","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447795984000,"dur":11000},{"pid":1,"tid":44,"id":68,"name":"transform: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518447795996000,"dur":41000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447795950000,"dur":98000},{"pid":1,"tid":44,"id":70,"name":"transform prep: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447796053000,"dur":100},{"pid":1,"tid":44,"id":71,"name":"transform: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518447796053000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796050000,"dur":4000},{"pid":1,"tid":0,"id":72,"name":"task: unknown task type","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796056000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: pre cold swap","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796057000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: fast deploy runtime extractor","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447796058000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: generate instant run app info","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447796061000,"dur":1000},{"pid":1,"tid":44,"id":77,"name":"transform prep: instant run slicer","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447796081000,"dur":2000},{"pid":1,"tid":44,"id":78,"name":"transform: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518447796083000,"dur":6000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796062000,"dur":43000},{"pid":1,"tid":44,"id":80,"name":"transform prep: dex archive builder","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447796142000,"dur":1000},{"pid":1,"tid":44,"id":81,"name":"transform: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518447796144000,"dur":171000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796107000,"dur":223000},{"pid":1,"tid":45,"id":83,"name":"transform prep: external libs merger","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447796348000,"dur":2000},{"pid":1,"tid":45,"id":84,"name":"transform: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518447796350000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796331000,"dur":22000},{"pid":1,"tid":45,"id":86,"name":"transform prep: dex merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447796370000,"dur":2000},{"pid":1,"tid":45,"id":87,"name":"transform: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518447796372000,"dur":26000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796354000,"dur":48000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796403000,"dur":2000},{"pid":1,"tid":45,"id":90,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447796411000,"dur":1000},{"pid":1,"tid":45,"id":91,"name":"transform: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518447796412000,"dur":1000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796406000,"dur":9000},{"pid":1,"tid":45,"id":93,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447796419000,"dur":2000},{"pid":1,"tid":45,"id":94,"name":"transform: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518447796421000,"dur":256000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796415000,"dur":263000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447796678000,"dur":2000},{"pid":1,"tid":0,"id":96,"name":"task: package application","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447796681000,"dur":27000},{"pid":1,"tid":0,"id":97,"name":"task: build info writer","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796709000,"dur":2000},{"pid":1,"tid":0,"id":98,"name":"task: unknown task type","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796712000,"dur":100},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447796712000,"dur":100},{"pid":1,"tid":42,"id":100,"name":"base plugin build finished","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447796721000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-16-03-16-732.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-16-03-16-732.rawproto
new file mode 100644
index 00000000..2aa1baec
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-16-03-16-732.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-16-04-20-349.json b/IGetAndroid/build/android-profile/profile-2018-02-12-16-04-20-349.json
new file mode 100644
index 00000000..6893634e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-16-04-20-349.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518447859975000,"args":{"JVM stats":"heap_memory_usage: 184088264\nnon_heap_memory_usage: 177610576\nloaded_class_count: 16913\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860048000,"args":{"JVM stats":"heap_memory_usage: 194333456\nnon_heap_memory_usage: 177702336\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860048001,"args":{"JVM stats":"heap_memory_usage: 194333456\nnon_heap_memory_usage: 177702336\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860090000,"args":{"JVM stats":"heap_memory_usage: 200799912\nnon_heap_memory_usage: 177772296\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860093000,"args":{"JVM stats":"heap_memory_usage: 201145144\nnon_heap_memory_usage: 177772296\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860097000,"args":{"JVM stats":"heap_memory_usage: 201490744\nnon_heap_memory_usage: 177776776\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860099000,"args":{"JVM stats":"heap_memory_usage: 201490744\nnon_heap_memory_usage: 177779104\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860099001,"args":{"JVM stats":"heap_memory_usage: 201490744\nnon_heap_memory_usage: 177779104\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860100000,"args":{"JVM stats":"heap_memory_usage: 201577808\nnon_heap_memory_usage: 177781856\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860101000,"args":{"JVM stats":"heap_memory_usage: 201577808\nnon_heap_memory_usage: 177781856\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860101001,"args":{"JVM stats":"heap_memory_usage: 201663832\nnon_heap_memory_usage: 177781856\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860130000,"args":{"JVM stats":"heap_memory_usage: 205194608\nnon_heap_memory_usage: 177829024\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860131000,"args":{"JVM stats":"heap_memory_usage: 205280632\nnon_heap_memory_usage: 177829024\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860134000,"args":{"JVM stats":"heap_memory_usage: 205624872\nnon_heap_memory_usage: 177829024\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860135000,"args":{"JVM stats":"heap_memory_usage: 205624872\nnon_heap_memory_usage: 177829024\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860140000,"args":{"JVM stats":"heap_memory_usage: 206744240\nnon_heap_memory_usage: 177829024\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860140001,"args":{"JVM stats":"heap_memory_usage: 206830344\nnon_heap_memory_usage: 177829024\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860153000,"args":{"JVM stats":"heap_memory_usage: 207532136\nnon_heap_memory_usage: 177829024\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860159000,"args":{"JVM stats":"heap_memory_usage: 208307624\nnon_heap_memory_usage: 177829024\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860161000,"args":{"JVM stats":"heap_memory_usage: 208393872\nnon_heap_memory_usage: 177830328\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860161001,"args":{"JVM stats":"heap_memory_usage: 208393872\nnon_heap_memory_usage: 177833144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860162000,"args":{"JVM stats":"heap_memory_usage: 208480936\nnon_heap_memory_usage: 177833144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860164000,"args":{"JVM stats":"heap_memory_usage: 208654048\nnon_heap_memory_usage: 177833144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860166000,"args":{"JVM stats":"heap_memory_usage: 208826464\nnon_heap_memory_usage: 177833144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860170000,"args":{"JVM stats":"heap_memory_usage: 209178848\nnon_heap_memory_usage: 177834640\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860171000,"args":{"JVM stats":"heap_memory_usage: 209178848\nnon_heap_memory_usage: 177834640\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860177000,"args":{"JVM stats":"heap_memory_usage: 209781640\nnon_heap_memory_usage: 177835944\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860192000,"args":{"JVM stats":"heap_memory_usage: 210511968\nnon_heap_memory_usage: 177835944\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860192001,"args":{"JVM stats":"heap_memory_usage: 210511968\nnon_heap_memory_usage: 177835944\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860238000,"args":{"JVM stats":"heap_memory_usage: 211115040\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860240000,"args":{"JVM stats":"heap_memory_usage: 211201088\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860247000,"args":{"JVM stats":"heap_memory_usage: 211976216\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860247001,"args":{"JVM stats":"heap_memory_usage: 212062240\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860254000,"args":{"JVM stats":"heap_memory_usage: 212928128\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860255000,"args":{"JVM stats":"heap_memory_usage: 213014312\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860268000,"args":{"JVM stats":"heap_memory_usage: 214582568\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860269000,"args":{"JVM stats":"heap_memory_usage: 214668672\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860269001,"args":{"JVM stats":"heap_memory_usage: 214754800\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860269000,"args":{"JVM stats":"heap_memory_usage: 214754800\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860270000,"args":{"JVM stats":"heap_memory_usage: 214754800\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860271000,"args":{"JVM stats":"heap_memory_usage: 214840880\nnon_heap_memory_usage: 177860144\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860282000,"args":{"JVM stats":"heap_memory_usage: 215538288\nnon_heap_memory_usage: 177862704\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860299000,"args":{"JVM stats":"heap_memory_usage: 216840248\nnon_heap_memory_usage: 177869488\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860307000,"args":{"JVM stats":"heap_memory_usage: 217373816\nnon_heap_memory_usage: 177869488\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860319000,"args":{"JVM stats":"heap_memory_usage: 217890912\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860320000,"args":{"JVM stats":"heap_memory_usage: 217977464\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860323000,"args":{"JVM stats":"heap_memory_usage: 218063512\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860325000,"args":{"JVM stats":"heap_memory_usage: 218338616\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860327000,"args":{"JVM stats":"heap_memory_usage: 218424664\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860334000,"args":{"JVM stats":"heap_memory_usage: 218941024\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860337000,"args":{"JVM stats":"heap_memory_usage: 219144128\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860337001,"args":{"JVM stats":"heap_memory_usage: 219144128\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860338000,"args":{"JVM stats":"heap_memory_usage: 219144128\nnon_heap_memory_usage: 177875696\nloaded_class_count: 16913\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518447860350000,"args":{"JVM stats":"heap_memory_usage: 220269112\nnon_heap_memory_usage: 177873280\nloaded_class_count: 16913\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":46,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447859975000,"dur":3000},{"pid":1,"tid":46,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447859978000,"dur":2000},{"pid":1,"tid":46,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447859980000,"dur":5000},{"pid":1,"tid":46,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447859980000,"dur":5000},{"pid":1,"tid":46,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447859987000,"dur":2000},{"pid":1,"tid":46,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447859989000,"dur":1000},{"pid":1,"tid":46,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859990000,"dur":1000},{"pid":1,"tid":46,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859991000,"dur":100},{"pid":1,"tid":46,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859991000,"dur":100},{"pid":1,"tid":46,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859991000,"dur":100},{"pid":1,"tid":46,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859991000,"dur":100},{"pid":1,"tid":46,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859991000,"dur":100},{"pid":1,"tid":46,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859991000,"dur":2000},{"pid":1,"tid":46,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859993000,"dur":100},{"pid":1,"tid":46,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859993000,"dur":100},{"pid":1,"tid":46,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859993000,"dur":100},{"pid":1,"tid":46,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859993000,"dur":20000},{"pid":1,"tid":46,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447860013000,"dur":100},{"pid":1,"tid":46,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447860013000,"dur":4000},{"pid":1,"tid":46,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447860019000,"dur":2000},{"pid":1,"tid":46,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447860021000,"dur":1000},{"pid":1,"tid":46,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518447859990000,"dur":32000},{"pid":1,"tid":46,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447860022000,"dur":2000},{"pid":1,"tid":46,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447860024000,"dur":4000},{"pid":1,"tid":46,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447859987000,"dur":41000},{"pid":1,"tid":46,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447860029000,"dur":2000},{"pid":1,"tid":46,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447859986000,"dur":45000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860046000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860048000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860049000,"dur":41000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860090000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860094000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860098000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860099000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860100000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860100000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860101000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860101000,"dur":29000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860131000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860131000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860134000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860135000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860140000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860141000,"dur":12000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860153000,"dur":6000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860160000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860161000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860162000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860162000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860164000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860166000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860170000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860171000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860177000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860192000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860192000,"dur":46000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860239000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860240000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860247000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860248000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860254000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860255000,"dur":13000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860268000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860269000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860269000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860270000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860270000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860271000,"dur":11000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860282000,"dur":17000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860299000,"dur":8000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860308000,"dur":11000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860319000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860320000,"dur":3000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860323000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860326000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518447860327000,"dur":7000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860335000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860337000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518447860338000,"dur":100},{"pid":1,"tid":46,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518447860344000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-16-04-20-349.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-16-04-20-349.rawproto
new file mode 100644
index 00000000..1e58de81
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-16-04-20-349.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-06-32-774.json b/IGetAndroid/build/android-profile/profile-2018-02-12-17-06-32-774.json
new file mode 100644
index 00000000..4780c62e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-06-32-774.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518451572836000,"args":{"JVM stats":"heap_memory_usage: 28722272\nnon_heap_memory_usage: 54001416\nloaded_class_count: 7624\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 5\n gc_time: 57\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 117\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451575696000,"args":{"JVM stats":"heap_memory_usage: 261524744\nnon_heap_memory_usage: 80954928\nloaded_class_count: 10854\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451575976000,"args":{"JVM stats":"heap_memory_usage: 281405408\nnon_heap_memory_usage: 80656072\nloaded_class_count: 11026\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451576003000,"args":{"JVM stats":"heap_memory_usage: 282076976\nnon_heap_memory_usage: 80757056\nloaded_class_count: 11032\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451576018000,"args":{"JVM stats":"heap_memory_usage: 282524800\nnon_heap_memory_usage: 80841624\nloaded_class_count: 11040\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451576020000,"args":{"JVM stats":"heap_memory_usage: 282524800\nnon_heap_memory_usage: 80852248\nloaded_class_count: 11041\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451576049000,"args":{"JVM stats":"heap_memory_usage: 283196240\nnon_heap_memory_usage: 80977464\nloaded_class_count: 11060\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451576057000,"args":{"JVM stats":"heap_memory_usage: 283867360\nnon_heap_memory_usage: 81039048\nloaded_class_count: 11062\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451576064000,"args":{"JVM stats":"heap_memory_usage: 283867600\nnon_heap_memory_usage: 81064400\nloaded_class_count: 11062\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451576065000,"args":{"JVM stats":"heap_memory_usage: 283867600\nnon_heap_memory_usage: 81073616\nloaded_class_count: 11062\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451576987000,"args":{"JVM stats":"heap_memory_usage: 128473592\nnon_heap_memory_usage: 84951688\nloaded_class_count: 11326\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 55\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451577033000,"args":{"JVM stats":"heap_memory_usage: 131505664\nnon_heap_memory_usage: 85198856\nloaded_class_count: 11358\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451577181000,"args":{"JVM stats":"heap_memory_usage: 140525160\nnon_heap_memory_usage: 86572128\nloaded_class_count: 11519\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451577192000,"args":{"JVM stats":"heap_memory_usage: 140958504\nnon_heap_memory_usage: 86616704\nloaded_class_count: 11519\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451578502000,"args":{"JVM stats":"heap_memory_usage: 62621144\nnon_heap_memory_usage: 87612616\nloaded_class_count: 11609\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 23\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 233\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451578503000,"args":{"JVM stats":"heap_memory_usage: 70159288\nnon_heap_memory_usage: 87617800\nloaded_class_count: 11609\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451578555000,"args":{"JVM stats":"heap_memory_usage: 75180016\nnon_heap_memory_usage: 87733952\nloaded_class_count: 11610\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451579805000,"args":{"JVM stats":"heap_memory_usage: 163603128\nnon_heap_memory_usage: 99057400\nloaded_class_count: 12547\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451582422000,"args":{"JVM stats":"heap_memory_usage: 167251720\nnon_heap_memory_usage: 98632960\nloaded_class_count: 12603\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451586731000,"args":{"JVM stats":"heap_memory_usage: 168670368\nnon_heap_memory_usage: 98727920\nloaded_class_count: 12607\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451586732000,"args":{"JVM stats":"heap_memory_usage: 168670368\nnon_heap_memory_usage: 98727600\nloaded_class_count: 12607\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451590321000,"args":{"JVM stats":"heap_memory_usage: 173396920\nnon_heap_memory_usage: 131134440\nloaded_class_count: 15556\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 3\n gc_time: 85\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451590326000,"args":{"JVM stats":"heap_memory_usage: 181307896\nnon_heap_memory_usage: 131146632\nloaded_class_count: 15556\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451590329000,"args":{"JVM stats":"heap_memory_usage: 181307896\nnon_heap_memory_usage: 131153736\nloaded_class_count: 15557\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451590330000,"args":{"JVM stats":"heap_memory_usage: 181307896\nnon_heap_memory_usage: 131153736\nloaded_class_count: 15557\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451590334000,"args":{"JVM stats":"heap_memory_usage: 184234288\nnon_heap_memory_usage: 131163088\nloaded_class_count: 15557\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451590866000,"args":{"JVM stats":"heap_memory_usage: 218978800\nnon_heap_memory_usage: 136260872\nloaded_class_count: 16039\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451591269000,"args":{"JVM stats":"heap_memory_usage: 279927232\nnon_heap_memory_usage: 136556008\nloaded_class_count: 16138\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451591273000,"args":{"JVM stats":"heap_memory_usage: 280310664\nnon_heap_memory_usage: 136589152\nloaded_class_count: 16138\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451591340000,"args":{"JVM stats":"heap_memory_usage: 281047096\nnon_heap_memory_usage: 136719008\nloaded_class_count: 16139\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451591348000,"args":{"JVM stats":"heap_memory_usage: 281391456\nnon_heap_memory_usage: 136721928\nloaded_class_count: 16139\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451591349000,"args":{"JVM stats":"heap_memory_usage: 281391456\nnon_heap_memory_usage: 136724728\nloaded_class_count: 16139\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451591364000,"args":{"JVM stats":"heap_memory_usage: 282511208\nnon_heap_memory_usage: 136804568\nloaded_class_count: 16139\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451591366000,"args":{"JVM stats":"heap_memory_usage: 282511208\nnon_heap_memory_usage: 136823696\nloaded_class_count: 16139\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451592738000,"args":{"JVM stats":"heap_memory_usage: 363559096\nnon_heap_memory_usage: 142057528\nloaded_class_count: 16637\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 27\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451592739000,"args":{"JVM stats":"heap_memory_usage: 369558088\nnon_heap_memory_usage: 142047480\nloaded_class_count: 16637\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451592777000,"args":{"JVM stats":"heap_memory_usage: 373447416\nnon_heap_memory_usage: 141789456\nloaded_class_count: 16687\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451572884000,"dur":419000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451573303000,"dur":405000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451573709000,"dur":51000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451573708000,"dur":53000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451574720000,"dur":141000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451574862000,"dur":28000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451574939000,"dur":26000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451574965000,"dur":5000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451574970000,"dur":8000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451574979000,"dur":34000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575014000,"dur":9000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575023000,"dur":7000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575030000,"dur":57000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575087000,"dur":6000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575093000,"dur":7000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575101000,"dur":1000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575102000,"dur":61000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575163000,"dur":29000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575192000,"dur":68000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575268000,"dur":31000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575299000,"dur":4000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451574891000,"dur":412000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451575303000,"dur":61000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575366000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575367000,"dur":1000},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575368000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575368000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575369000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575369000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575369000,"dur":3000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575372000,"dur":100},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575372000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575373000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575373000,"dur":23000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575396000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575397000,"dur":7000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575406000,"dur":3000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575410000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451575365000,"dur":45000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451575410000,"dur":7000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451575417000,"dur":49000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451574719000,"dur":820000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451573900000,"dur":1642000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451575685000,"dur":2000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451575697000,"dur":279000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451575978000,"dur":24000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451576006000,"dur":12000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451576018000,"dur":2000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451576021000,"dur":28000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451576050000,"dur":7000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451576058000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451576065000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451576067000,"dur":920000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451576988000,"dur":45000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451577035000,"dur":146000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451577182000,"dur":10000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451577194000,"dur":1308000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451578503000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451578504000,"dur":51000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451578556000,"dur":1248000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451579807000,"dur":2615000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451582422000,"dur":4309000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451586732000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451586732000,"dur":3589000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451590322000,"dur":4000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451590326000,"dur":3000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451590330000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451590331000,"dur":3000},{"pid":1,"tid":2,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518451590368000,"dur":14000},{"pid":1,"tid":2,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518451590384000,"dur":479000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451590335000,"dur":531000},{"pid":1,"tid":2,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518451590873000,"dur":100},{"pid":1,"tid":2,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518451590874000,"dur":383000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451590866000,"dur":403000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451591270000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451591275000,"dur":64000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451591340000,"dur":7000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451591348000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451591350000,"dur":14000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451591365000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451591367000,"dur":1371000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451592738000,"dur":1000},{"pid":1,"tid":1,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451592746000,"dur":2000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-06-32-774.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-17-06-32-774.rawproto
new file mode 100644
index 00000000..d02dd0cb
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-06-32-774.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-32-347.json b/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-32-347.json
new file mode 100644
index 00000000..dac01d36
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-32-347.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768069000,"args":{"JVM stats":"heap_memory_usage: 438550904\nnon_heap_memory_usage: 145985240\nloaded_class_count: 17019\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768309000,"args":{"JVM stats":"heap_memory_usage: 455187152\nnon_heap_memory_usage: 146861160\nloaded_class_count: 17053\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768378000,"args":{"JVM stats":"heap_memory_usage: 460736664\nnon_heap_memory_usage: 147127672\nloaded_class_count: 17056\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768384000,"args":{"JVM stats":"heap_memory_usage: 460736664\nnon_heap_memory_usage: 147132376\nloaded_class_count: 17056\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768388000,"args":{"JVM stats":"heap_memory_usage: 460736664\nnon_heap_memory_usage: 147144088\nloaded_class_count: 17056\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768389000,"args":{"JVM stats":"heap_memory_usage: 460736664\nnon_heap_memory_usage: 147150400\nloaded_class_count: 17056\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768397000,"args":{"JVM stats":"heap_memory_usage: 461239976\nnon_heap_memory_usage: 147168296\nloaded_class_count: 17057\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768398000,"args":{"JVM stats":"heap_memory_usage: 461239976\nnon_heap_memory_usage: 147171904\nloaded_class_count: 17057\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768399000,"args":{"JVM stats":"heap_memory_usage: 461239976\nnon_heap_memory_usage: 147175872\nloaded_class_count: 17057\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768400000,"args":{"JVM stats":"heap_memory_usage: 461239976\nnon_heap_memory_usage: 147180352\nloaded_class_count: 17057\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768458000,"args":{"JVM stats":"heap_memory_usage: 465267232\nnon_heap_memory_usage: 147357456\nloaded_class_count: 17057\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768464000,"args":{"JVM stats":"heap_memory_usage: 465803328\nnon_heap_memory_usage: 147400536\nloaded_class_count: 17058\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768508000,"args":{"JVM stats":"heap_memory_usage: 470837344\nnon_heap_memory_usage: 147703536\nloaded_class_count: 17061\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451768509000,"args":{"JVM stats":"heap_memory_usage: 470837344\nnon_heap_memory_usage: 147732800\nloaded_class_count: 17061\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451769466000,"args":{"JVM stats":"heap_memory_usage: 496949032\nnon_heap_memory_usage: 147919504\nloaded_class_count: 17068\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451769467000,"args":{"JVM stats":"heap_memory_usage: 496949032\nnon_heap_memory_usage: 147925712\nloaded_class_count: 17068\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451769493000,"args":{"JVM stats":"heap_memory_usage: 497955656\nnon_heap_memory_usage: 147977896\nloaded_class_count: 17068\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451770079000,"args":{"JVM stats":"heap_memory_usage: 93643288\nnon_heap_memory_usage: 150875032\nloaded_class_count: 17070\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 24\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451770081000,"args":{"JVM stats":"heap_memory_usage: 95541960\nnon_heap_memory_usage: 150882296\nloaded_class_count: 17070\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451770163000,"args":{"JVM stats":"heap_memory_usage: 97016752\nnon_heap_memory_usage: 150943848\nloaded_class_count: 17070\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451770164000,"args":{"JVM stats":"heap_memory_usage: 97016752\nnon_heap_memory_usage: 150944480\nloaded_class_count: 17070\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771243000,"args":{"JVM stats":"heap_memory_usage: 182402712\nnon_heap_memory_usage: 156594240\nloaded_class_count: 17156\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771246000,"args":{"JVM stats":"heap_memory_usage: 182402712\nnon_heap_memory_usage: 156611064\nloaded_class_count: 17158\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771248000,"args":{"JVM stats":"heap_memory_usage: 182402712\nnon_heap_memory_usage: 156614040\nloaded_class_count: 17158\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771249000,"args":{"JVM stats":"heap_memory_usage: 182402712\nnon_heap_memory_usage: 156614040\nloaded_class_count: 17158\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771252000,"args":{"JVM stats":"heap_memory_usage: 183440792\nnon_heap_memory_usage: 156640272\nloaded_class_count: 17162\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771425000,"args":{"JVM stats":"heap_memory_usage: 204971936\nnon_heap_memory_usage: 157395024\nloaded_class_count: 17162\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771587000,"args":{"JVM stats":"heap_memory_usage: 262458632\nnon_heap_memory_usage: 157769944\nloaded_class_count: 17165\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771589000,"args":{"JVM stats":"heap_memory_usage: 263501824\nnon_heap_memory_usage: 157778320\nloaded_class_count: 17165\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771595000,"args":{"JVM stats":"heap_memory_usage: 263746672\nnon_heap_memory_usage: 157833520\nloaded_class_count: 17167\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771598000,"args":{"JVM stats":"heap_memory_usage: 263746672\nnon_heap_memory_usage: 157862688\nloaded_class_count: 17167\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771599000,"args":{"JVM stats":"heap_memory_usage: 263746672\nnon_heap_memory_usage: 157864288\nloaded_class_count: 17167\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771606000,"args":{"JVM stats":"heap_memory_usage: 264784568\nnon_heap_memory_usage: 157867936\nloaded_class_count: 17167\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451771606001,"args":{"JVM stats":"heap_memory_usage: 264784568\nnon_heap_memory_usage: 157867936\nloaded_class_count: 17167\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451772325000,"args":{"JVM stats":"heap_memory_usage: 337339592\nnon_heap_memory_usage: 158086376\nloaded_class_count: 17174\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451772347000,"args":{"JVM stats":"heap_memory_usage: 338015128\nnon_heap_memory_usage: 157727576\nloaded_class_count: 17185\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":3,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768069000,"dur":7000},{"pid":1,"tid":3,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768076000,"dur":11000},{"pid":1,"tid":3,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768087000,"dur":4000},{"pid":1,"tid":3,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768087000,"dur":4000},{"pid":1,"tid":3,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768135000,"dur":5000},{"pid":1,"tid":3,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768140000,"dur":2000},{"pid":1,"tid":3,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768143000,"dur":2000},{"pid":1,"tid":3,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768145000,"dur":1000},{"pid":1,"tid":3,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768146000,"dur":1000},{"pid":1,"tid":3,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768147000,"dur":1000},{"pid":1,"tid":3,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768148000,"dur":100},{"pid":1,"tid":3,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768148000,"dur":1000},{"pid":1,"tid":3,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768149000,"dur":6000},{"pid":1,"tid":3,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768155000,"dur":1000},{"pid":1,"tid":3,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768156000,"dur":1000},{"pid":1,"tid":3,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768157000,"dur":100},{"pid":1,"tid":3,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768157000,"dur":57000},{"pid":1,"tid":3,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768214000,"dur":1000},{"pid":1,"tid":3,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768215000,"dur":5000},{"pid":1,"tid":3,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768225000,"dur":2000},{"pid":1,"tid":3,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768227000,"dur":1000},{"pid":1,"tid":3,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768142000,"dur":86000},{"pid":1,"tid":3,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768228000,"dur":6000},{"pid":1,"tid":3,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768235000,"dur":1000},{"pid":1,"tid":3,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768236000,"dur":100},{"pid":1,"tid":3,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768236000,"dur":1000},{"pid":1,"tid":3,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768237000,"dur":100},{"pid":1,"tid":3,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768237000,"dur":100},{"pid":1,"tid":3,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768237000,"dur":100},{"pid":1,"tid":3,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768238000,"dur":1000},{"pid":1,"tid":3,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768239000,"dur":100},{"pid":1,"tid":3,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768239000,"dur":100},{"pid":1,"tid":3,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768239000,"dur":100},{"pid":1,"tid":3,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768239000,"dur":21000},{"pid":1,"tid":3,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768260000,"dur":1000},{"pid":1,"tid":3,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768261000,"dur":3000},{"pid":1,"tid":3,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768265000,"dur":2000},{"pid":1,"tid":3,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768267000,"dur":100},{"pid":1,"tid":3,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451768234000,"dur":33000},{"pid":1,"tid":3,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768267000,"dur":4000},{"pid":1,"tid":3,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768271000,"dur":9000},{"pid":1,"tid":3,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768134000,"dur":150000},{"pid":1,"tid":3,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451768122000,"dur":163000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768309000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768309000,"dur":69000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768379000,"dur":5000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768385000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768388000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451768389000,"dur":7000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768397000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768398000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768400000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768401000,"dur":57000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451768458000,"dur":5000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451768464000,"dur":44000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451768508000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451768510000,"dur":956000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451769466000,"dur":1000},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451769467000,"dur":26000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451769494000,"dur":584000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451770080000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451770081000,"dur":81000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451770163000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451770164000,"dur":1079000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451771243000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451771247000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451771248000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451771249000,"dur":3000},{"pid":1,"tid":4,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518451771275000,"dur":1000},{"pid":1,"tid":4,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518451771277000,"dur":145000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451771253000,"dur":172000},{"pid":1,"tid":4,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518451771429000,"dur":100},{"pid":1,"tid":4,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518451771429000,"dur":146000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451771426000,"dur":161000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451771587000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451771589000,"dur":6000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451771595000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451771598000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451771599000,"dur":7000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451771606000,"dur":100},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518451771607000,"dur":718000},{"pid":1,"tid":3,"id":83,"name":"base plugin build finished","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451772333000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-32-347.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-32-347.rawproto
new file mode 100644
index 00000000..293e436d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-32-347.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-37-763.json b/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-37-763.json
new file mode 100644
index 00000000..0654776f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-37-763.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775234000,"args":{"JVM stats":"heap_memory_usage: 358431464\nnon_heap_memory_usage: 157835472\nloaded_class_count: 17214\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775380000,"args":{"JVM stats":"heap_memory_usage: 370172864\nnon_heap_memory_usage: 158604952\nloaded_class_count: 17220\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775428000,"args":{"JVM stats":"heap_memory_usage: 376467240\nnon_heap_memory_usage: 158702752\nloaded_class_count: 17220\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775433000,"args":{"JVM stats":"heap_memory_usage: 376781808\nnon_heap_memory_usage: 158628960\nloaded_class_count: 17220\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775436000,"args":{"JVM stats":"heap_memory_usage: 376781808\nnon_heap_memory_usage: 158476128\nloaded_class_count: 17220\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775437000,"args":{"JVM stats":"heap_memory_usage: 376781808\nnon_heap_memory_usage: 158477936\nloaded_class_count: 17220\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775440000,"args":{"JVM stats":"heap_memory_usage: 376781808\nnon_heap_memory_usage: 158481744\nloaded_class_count: 17220\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775441000,"args":{"JVM stats":"heap_memory_usage: 376781808\nnon_heap_memory_usage: 158419496\nloaded_class_count: 17221\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775443000,"args":{"JVM stats":"heap_memory_usage: 377096400\nnon_heap_memory_usage: 158320040\nloaded_class_count: 17221\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775443001,"args":{"JVM stats":"heap_memory_usage: 377096400\nnon_heap_memory_usage: 158320040\nloaded_class_count: 17221\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775486000,"args":{"JVM stats":"heap_memory_usage: 380557640\nnon_heap_memory_usage: 158388392\nloaded_class_count: 17225\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775488000,"args":{"JVM stats":"heap_memory_usage: 380557640\nnon_heap_memory_usage: 158382888\nloaded_class_count: 17225\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775492000,"args":{"JVM stats":"heap_memory_usage: 380557640\nnon_heap_memory_usage: 158397904\nloaded_class_count: 17227\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775493000,"args":{"JVM stats":"heap_memory_usage: 380872248\nnon_heap_memory_usage: 158413136\nloaded_class_count: 17227\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775500000,"args":{"JVM stats":"heap_memory_usage: 382130864\nnon_heap_memory_usage: 158442056\nloaded_class_count: 17229\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775501000,"args":{"JVM stats":"heap_memory_usage: 382130864\nnon_heap_memory_usage: 158442952\nloaded_class_count: 17229\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775515000,"args":{"JVM stats":"heap_memory_usage: 383704440\nnon_heap_memory_usage: 158448200\nloaded_class_count: 17229\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775525000,"args":{"JVM stats":"heap_memory_usage: 384019032\nnon_heap_memory_usage: 158466504\nloaded_class_count: 17230\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775527000,"args":{"JVM stats":"heap_memory_usage: 384019032\nnon_heap_memory_usage: 158470600\nloaded_class_count: 17230\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775577000,"args":{"JVM stats":"heap_memory_usage: 385592288\nnon_heap_memory_usage: 158479784\nloaded_class_count: 17230\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451775577001,"args":{"JVM stats":"heap_memory_usage: 385592288\nnon_heap_memory_usage: 158479784\nloaded_class_count: 17230\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776186000,"args":{"JVM stats":"heap_memory_usage: 468251000\nnon_heap_memory_usage: 160797032\nloaded_class_count: 17232\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776188000,"args":{"JVM stats":"heap_memory_usage: 468251000\nnon_heap_memory_usage: 160803432\nloaded_class_count: 17232\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776190000,"args":{"JVM stats":"heap_memory_usage: 468251000\nnon_heap_memory_usage: 160803432\nloaded_class_count: 17232\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776190001,"args":{"JVM stats":"heap_memory_usage: 468251000\nnon_heap_memory_usage: 160803432\nloaded_class_count: 17232\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776194000,"args":{"JVM stats":"heap_memory_usage: 468565600\nnon_heap_memory_usage: 160809272\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776220000,"args":{"JVM stats":"heap_memory_usage: 469509344\nnon_heap_memory_usage: 160825392\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776223000,"args":{"JVM stats":"heap_memory_usage: 469509344\nnon_heap_memory_usage: 160836400\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776225000,"args":{"JVM stats":"heap_memory_usage: 469509344\nnon_heap_memory_usage: 160836464\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776231000,"args":{"JVM stats":"heap_memory_usage: 470138512\nnon_heap_memory_usage: 160845824\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776234000,"args":{"JVM stats":"heap_memory_usage: 470138512\nnon_heap_memory_usage: 160854360\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776234001,"args":{"JVM stats":"heap_memory_usage: 470138512\nnon_heap_memory_usage: 160855752\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776243000,"args":{"JVM stats":"heap_memory_usage: 471082560\nnon_heap_memory_usage: 160863312\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451776244000,"args":{"JVM stats":"heap_memory_usage: 471082560\nnon_heap_memory_usage: 160864968\nloaded_class_count: 17234\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451777755000,"args":{"JVM stats":"heap_memory_usage: 109706600\nnon_heap_memory_usage: 161418400\nloaded_class_count: 17239\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 38\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451777755001,"args":{"JVM stats":"heap_memory_usage: 111880000\nnon_heap_memory_usage: 161422048\nloaded_class_count: 17239\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451777763000,"args":{"JVM stats":"heap_memory_usage: 112197208\nnon_heap_memory_usage: 161413568\nloaded_class_count: 17239\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":3,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775235000,"dur":4000},{"pid":1,"tid":3,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775239000,"dur":8000},{"pid":1,"tid":3,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775247000,"dur":2000},{"pid":1,"tid":3,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775247000,"dur":2000},{"pid":1,"tid":3,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775259000,"dur":4000},{"pid":1,"tid":3,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775263000,"dur":1000},{"pid":1,"tid":3,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775266000,"dur":1000},{"pid":1,"tid":3,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775267000,"dur":100},{"pid":1,"tid":3,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775268000,"dur":100},{"pid":1,"tid":3,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775268000,"dur":1000},{"pid":1,"tid":3,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775269000,"dur":1000},{"pid":1,"tid":3,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775270000,"dur":100},{"pid":1,"tid":3,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775270000,"dur":3000},{"pid":1,"tid":3,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775273000,"dur":1000},{"pid":1,"tid":3,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775274000,"dur":100},{"pid":1,"tid":3,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775274000,"dur":100},{"pid":1,"tid":3,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775274000,"dur":25000},{"pid":1,"tid":3,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775299000,"dur":1000},{"pid":1,"tid":3,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775300000,"dur":5000},{"pid":1,"tid":3,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775307000,"dur":1000},{"pid":1,"tid":3,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775308000,"dur":1000},{"pid":1,"tid":3,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775264000,"dur":45000},{"pid":1,"tid":3,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775309000,"dur":4000},{"pid":1,"tid":3,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775315000,"dur":100},{"pid":1,"tid":3,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775315000,"dur":100},{"pid":1,"tid":3,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775315000,"dur":100},{"pid":1,"tid":3,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775316000,"dur":100},{"pid":1,"tid":3,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775316000,"dur":100},{"pid":1,"tid":3,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775316000,"dur":100},{"pid":1,"tid":3,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775316000,"dur":2000},{"pid":1,"tid":3,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775318000,"dur":100},{"pid":1,"tid":3,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775318000,"dur":100},{"pid":1,"tid":3,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775318000,"dur":100},{"pid":1,"tid":3,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775318000,"dur":22000},{"pid":1,"tid":3,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775340000,"dur":1000},{"pid":1,"tid":3,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775342000,"dur":2000},{"pid":1,"tid":3,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775344000,"dur":2000},{"pid":1,"tid":3,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775346000,"dur":100},{"pid":1,"tid":3,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451775313000,"dur":33000},{"pid":1,"tid":3,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775346000,"dur":3000},{"pid":1,"tid":3,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775350000,"dur":8000},{"pid":1,"tid":3,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775259000,"dur":101000},{"pid":1,"tid":3,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451775253000,"dur":107000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775379000,"dur":1000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775380000,"dur":48000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775428000,"dur":5000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775434000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775437000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775438000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775440000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775442000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775443000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775444000,"dur":42000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775487000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775489000,"dur":3000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775492000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775494000,"dur":6000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775500000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775501000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775515000,"dur":10000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451775526000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451775527000,"dur":50000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451775577000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451775578000,"dur":608000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776187000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776189000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776190000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776191000,"dur":2000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776194000,"dur":26000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776221000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776224000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776225000,"dur":6000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776232000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451776234000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451776235000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451776243000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: package application","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451776245000,"dur":1510000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451777755000,"dur":100},{"pid":1,"tid":3,"id":80,"name":"base plugin build finished","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 857725\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451777756000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-37-763.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-37-763.rawproto
new file mode 100644
index 00000000..aef4d659
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-09-37-763.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-05-333.json b/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-05-333.json
new file mode 100644
index 00000000..87f9d7be
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-05-333.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800589000,"args":{"JVM stats":"heap_memory_usage: 63904376\nnon_heap_memory_usage: 161898960\nloaded_class_count: 17250\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 12\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 197\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800879000,"args":{"JVM stats":"heap_memory_usage: 78105384\nnon_heap_memory_usage: 162739288\nloaded_class_count: 17277\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800955000,"args":{"JVM stats":"heap_memory_usage: 84353304\nnon_heap_memory_usage: 162980840\nloaded_class_count: 17278\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800966000,"args":{"JVM stats":"heap_memory_usage: 84802576\nnon_heap_memory_usage: 163046608\nloaded_class_count: 17281\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800973000,"args":{"JVM stats":"heap_memory_usage: 84802576\nnon_heap_memory_usage: 163062792\nloaded_class_count: 17285\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800975000,"args":{"JVM stats":"heap_memory_usage: 84802576\nnon_heap_memory_usage: 163066968\nloaded_class_count: 17286\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800988000,"args":{"JVM stats":"heap_memory_usage: 85251808\nnon_heap_memory_usage: 163075616\nloaded_class_count: 17286\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800990000,"args":{"JVM stats":"heap_memory_usage: 85251808\nnon_heap_memory_usage: 163081536\nloaded_class_count: 17286\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800995000,"args":{"JVM stats":"heap_memory_usage: 85251808\nnon_heap_memory_usage: 163083928\nloaded_class_count: 17287\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451800995001,"args":{"JVM stats":"heap_memory_usage: 85251808\nnon_heap_memory_usage: 163083928\nloaded_class_count: 17287\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451801056000,"args":{"JVM stats":"heap_memory_usage: 88848320\nnon_heap_memory_usage: 163120488\nloaded_class_count: 17290\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451801063000,"args":{"JVM stats":"heap_memory_usage: 89330336\nnon_heap_memory_usage: 163134368\nloaded_class_count: 17290\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451801110000,"args":{"JVM stats":"heap_memory_usage: 94452128\nnon_heap_memory_usage: 163341112\nloaded_class_count: 17290\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451801112000,"args":{"JVM stats":"heap_memory_usage: 94452128\nnon_heap_memory_usage: 163351504\nloaded_class_count: 17291\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451802247000,"args":{"JVM stats":"heap_memory_usage: 118278512\nnon_heap_memory_usage: 163693168\nloaded_class_count: 17291\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451802247001,"args":{"JVM stats":"heap_memory_usage: 118278512\nnon_heap_memory_usage: 163696256\nloaded_class_count: 17291\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451802282000,"args":{"JVM stats":"heap_memory_usage: 118684960\nnon_heap_memory_usage: 163765176\nloaded_class_count: 17292\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451802780000,"args":{"JVM stats":"heap_memory_usage: 160377704\nnon_heap_memory_usage: 165395880\nloaded_class_count: 17296\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451802784000,"args":{"JVM stats":"heap_memory_usage: 160377704\nnon_heap_memory_usage: 165404592\nloaded_class_count: 17296\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451802867000,"args":{"JVM stats":"heap_memory_usage: 162175048\nnon_heap_memory_usage: 165567288\nloaded_class_count: 17296\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451802868000,"args":{"JVM stats":"heap_memory_usage: 162175048\nnon_heap_memory_usage: 165568080\nloaded_class_count: 17296\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451803765000,"args":{"JVM stats":"heap_memory_usage: 245157840\nnon_heap_memory_usage: 167134024\nloaded_class_count: 17300\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451803768000,"args":{"JVM stats":"heap_memory_usage: 245157840\nnon_heap_memory_usage: 167138552\nloaded_class_count: 17300\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451803769000,"args":{"JVM stats":"heap_memory_usage: 245157840\nnon_heap_memory_usage: 167142032\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451803770000,"args":{"JVM stats":"heap_memory_usage: 245157840\nnon_heap_memory_usage: 167143000\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451803773000,"args":{"JVM stats":"heap_memory_usage: 245157840\nnon_heap_memory_usage: 167154776\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451803957000,"args":{"JVM stats":"heap_memory_usage: 268096456\nnon_heap_memory_usage: 168045552\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451804167000,"args":{"JVM stats":"heap_memory_usage: 325105696\nnon_heap_memory_usage: 168245544\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451804169000,"args":{"JVM stats":"heap_memory_usage: 325554960\nnon_heap_memory_usage: 168262504\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451804177000,"args":{"JVM stats":"heap_memory_usage: 326453552\nnon_heap_memory_usage: 168290448\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451804183000,"args":{"JVM stats":"heap_memory_usage: 326453552\nnon_heap_memory_usage: 168299056\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451804184000,"args":{"JVM stats":"heap_memory_usage: 326453552\nnon_heap_memory_usage: 168302320\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451804223000,"args":{"JVM stats":"heap_memory_usage: 326902800\nnon_heap_memory_usage: 168321896\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451804224000,"args":{"JVM stats":"heap_memory_usage: 326902800\nnon_heap_memory_usage: 168321896\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451805321000,"args":{"JVM stats":"heap_memory_usage: 434799448\nnon_heap_memory_usage: 168544848\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 14\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451805321001,"args":{"JVM stats":"heap_memory_usage: 434799448\nnon_heap_memory_usage: 168545744\nloaded_class_count: 17301\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451805333000,"args":{"JVM stats":"heap_memory_usage: 437583552\nnon_heap_memory_usage: 168576072\nloaded_class_count: 17302\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":3,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800589000,"dur":4000},{"pid":1,"tid":3,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800593000,"dur":9000},{"pid":1,"tid":3,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800602000,"dur":3000},{"pid":1,"tid":3,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800602000,"dur":3000},{"pid":1,"tid":3,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800644000,"dur":6000},{"pid":1,"tid":3,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800650000,"dur":1000},{"pid":1,"tid":3,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800652000,"dur":2000},{"pid":1,"tid":3,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800654000,"dur":100},{"pid":1,"tid":3,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800654000,"dur":100},{"pid":1,"tid":3,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800655000,"dur":100},{"pid":1,"tid":3,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800655000,"dur":1000},{"pid":1,"tid":3,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800656000,"dur":100},{"pid":1,"tid":3,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800656000,"dur":4000},{"pid":1,"tid":3,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800660000,"dur":1000},{"pid":1,"tid":3,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800661000,"dur":100},{"pid":1,"tid":3,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800661000,"dur":100},{"pid":1,"tid":3,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800661000,"dur":53000},{"pid":1,"tid":3,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800714000,"dur":1000},{"pid":1,"tid":3,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800715000,"dur":6000},{"pid":1,"tid":3,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800722000,"dur":4000},{"pid":1,"tid":3,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800726000,"dur":1000},{"pid":1,"tid":3,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800651000,"dur":76000},{"pid":1,"tid":3,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800727000,"dur":9000},{"pid":1,"tid":3,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800737000,"dur":1000},{"pid":1,"tid":3,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800738000,"dur":100},{"pid":1,"tid":3,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800738000,"dur":1000},{"pid":1,"tid":3,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800739000,"dur":100},{"pid":1,"tid":3,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800739000,"dur":100},{"pid":1,"tid":3,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800739000,"dur":100},{"pid":1,"tid":3,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800739000,"dur":3000},{"pid":1,"tid":3,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800742000,"dur":1000},{"pid":1,"tid":3,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800743000,"dur":100},{"pid":1,"tid":3,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800743000,"dur":100},{"pid":1,"tid":3,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800743000,"dur":36000},{"pid":1,"tid":3,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800779000,"dur":2000},{"pid":1,"tid":3,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800781000,"dur":5000},{"pid":1,"tid":3,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800788000,"dur":1000},{"pid":1,"tid":3,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800789000,"dur":100},{"pid":1,"tid":3,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451800736000,"dur":53000},{"pid":1,"tid":3,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800789000,"dur":10000},{"pid":1,"tid":3,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800799000,"dur":17000},{"pid":1,"tid":3,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800644000,"dur":185000},{"pid":1,"tid":3,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451800636000,"dur":194000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800879000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800880000,"dur":75000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800955000,"dur":10000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800966000,"dur":7000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800974000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451800976000,"dur":12000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800989000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800990000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800995000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451800997000,"dur":59000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451801058000,"dur":5000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451801064000,"dur":46000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451801111000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451801116000,"dur":1126000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451802247000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451802248000,"dur":34000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451802283000,"dur":497000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451802782000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451802784000,"dur":83000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451802868000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451802868000,"dur":897000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451803766000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451803768000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451803770000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451803771000,"dur":2000},{"pid":1,"tid":5,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518451803799000,"dur":2000},{"pid":1,"tid":5,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518451803801000,"dur":153000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451803774000,"dur":183000},{"pid":1,"tid":5,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518451803960000,"dur":100},{"pid":1,"tid":5,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518451803960000,"dur":191000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451803958000,"dur":209000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451804168000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451804170000,"dur":7000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451804178000,"dur":4000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451804183000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451804185000,"dur":37000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451804223000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451804225000,"dur":1096000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451805321000,"dur":100},{"pid":1,"tid":3,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451805323000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-05-333.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-05-333.rawproto
new file mode 100644
index 00000000..39d8e3d7
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-05-333.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-22-869.json b/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-22-869.json
new file mode 100644
index 00000000..cbc8dbbd
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-22-869.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819326000,"args":{"JVM stats":"heap_memory_usage: 468405832\nnon_heap_memory_usage: 169816488\nloaded_class_count: 17319\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819502000,"args":{"JVM stats":"heap_memory_usage: 481837672\nnon_heap_memory_usage: 170534872\nloaded_class_count: 17334\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819546000,"args":{"JVM stats":"heap_memory_usage: 490900192\nnon_heap_memory_usage: 170415584\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819551000,"args":{"JVM stats":"heap_memory_usage: 490900192\nnon_heap_memory_usage: 170417392\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819554000,"args":{"JVM stats":"heap_memory_usage: 491230272\nnon_heap_memory_usage: 170356912\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819556000,"args":{"JVM stats":"heap_memory_usage: 491230272\nnon_heap_memory_usage: 170366264\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819562000,"args":{"JVM stats":"heap_memory_usage: 491230272\nnon_heap_memory_usage: 170387304\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819563000,"args":{"JVM stats":"heap_memory_usage: 491230272\nnon_heap_memory_usage: 170387304\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819564000,"args":{"JVM stats":"heap_memory_usage: 491230272\nnon_heap_memory_usage: 170387632\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819565000,"args":{"JVM stats":"heap_memory_usage: 491230272\nnon_heap_memory_usage: 170388464\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819599000,"args":{"JVM stats":"heap_memory_usage: 495191472\nnon_heap_memory_usage: 170406064\nloaded_class_count: 17334\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819602000,"args":{"JVM stats":"heap_memory_usage: 495554152\nnon_heap_memory_usage: 170412376\nloaded_class_count: 17334\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819628000,"args":{"JVM stats":"heap_memory_usage: 500503672\nnon_heap_memory_usage: 170516768\nloaded_class_count: 17334\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451819630000,"args":{"JVM stats":"heap_memory_usage: 500503672\nnon_heap_memory_usage: 170520256\nloaded_class_count: 17334\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451820130000,"args":{"JVM stats":"heap_memory_usage: 87686416\nnon_heap_memory_usage: 170848576\nloaded_class_count: 17335\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 18\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451820131000,"args":{"JVM stats":"heap_memory_usage: 89107184\nnon_heap_memory_usage: 170848576\nloaded_class_count: 17335\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451820145000,"args":{"JVM stats":"heap_memory_usage: 91231192\nnon_heap_memory_usage: 170891968\nloaded_class_count: 17336\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451820580000,"args":{"JVM stats":"heap_memory_usage: 132684640\nnon_heap_memory_usage: 171815696\nloaded_class_count: 17336\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451820581000,"args":{"JVM stats":"heap_memory_usage: 132684640\nnon_heap_memory_usage: 171815696\nloaded_class_count: 17336\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451820649000,"args":{"JVM stats":"heap_memory_usage: 134103480\nnon_heap_memory_usage: 171716848\nloaded_class_count: 17336\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451820650000,"args":{"JVM stats":"heap_memory_usage: 134103480\nnon_heap_memory_usage: 171712496\nloaded_class_count: 17336\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821440000,"args":{"JVM stats":"heap_memory_usage: 216024400\nnon_heap_memory_usage: 173980112\nloaded_class_count: 17338\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821442000,"args":{"JVM stats":"heap_memory_usage: 216189680\nnon_heap_memory_usage: 173993024\nloaded_class_count: 17338\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821444000,"args":{"JVM stats":"heap_memory_usage: 216189680\nnon_heap_memory_usage: 173993056\nloaded_class_count: 17338\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821444001,"args":{"JVM stats":"heap_memory_usage: 216189680\nnon_heap_memory_usage: 173993056\nloaded_class_count: 17338\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821446000,"args":{"JVM stats":"heap_memory_usage: 216354640\nnon_heap_memory_usage: 173993712\nloaded_class_count: 17338\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821611000,"args":{"JVM stats":"heap_memory_usage: 237663816\nnon_heap_memory_usage: 174735832\nloaded_class_count: 17338\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821777000,"args":{"JVM stats":"heap_memory_usage: 295745032\nnon_heap_memory_usage: 174871552\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821779000,"args":{"JVM stats":"heap_memory_usage: 295909976\nnon_heap_memory_usage: 174871552\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821785000,"args":{"JVM stats":"heap_memory_usage: 296583096\nnon_heap_memory_usage: 174877240\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821788000,"args":{"JVM stats":"heap_memory_usage: 296748112\nnon_heap_memory_usage: 174886440\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821789000,"args":{"JVM stats":"heap_memory_usage: 296748112\nnon_heap_memory_usage: 174888552\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821797000,"args":{"JVM stats":"heap_memory_usage: 297243872\nnon_heap_memory_usage: 174900392\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451821798000,"args":{"JVM stats":"heap_memory_usage: 297243872\nnon_heap_memory_usage: 174916968\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451822854000,"args":{"JVM stats":"heap_memory_usage: 385332936\nnon_heap_memory_usage: 175265328\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 17\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451822855000,"args":{"JVM stats":"heap_memory_usage: 386695872\nnon_heap_memory_usage: 175265328\nloaded_class_count: 17339\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518451822870000,"args":{"JVM stats":"heap_memory_usage: 387118512\nnon_heap_memory_usage: 175214600\nloaded_class_count: 17339\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":3,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819327000,"dur":5000},{"pid":1,"tid":3,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819332000,"dur":11000},{"pid":1,"tid":3,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819343000,"dur":1000},{"pid":1,"tid":3,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819343000,"dur":1000},{"pid":1,"tid":3,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819378000,"dur":4000},{"pid":1,"tid":3,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819382000,"dur":1000},{"pid":1,"tid":3,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819384000,"dur":1000},{"pid":1,"tid":3,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819385000,"dur":100},{"pid":1,"tid":3,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819385000,"dur":100},{"pid":1,"tid":3,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819385000,"dur":1000},{"pid":1,"tid":3,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819386000,"dur":1000},{"pid":1,"tid":3,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819387000,"dur":100},{"pid":1,"tid":3,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819387000,"dur":4000},{"pid":1,"tid":3,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819391000,"dur":100},{"pid":1,"tid":3,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819391000,"dur":1000},{"pid":1,"tid":3,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819392000,"dur":100},{"pid":1,"tid":3,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819392000,"dur":28000},{"pid":1,"tid":3,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819420000,"dur":1000},{"pid":1,"tid":3,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819421000,"dur":5000},{"pid":1,"tid":3,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819427000,"dur":2000},{"pid":1,"tid":3,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819429000,"dur":1000},{"pid":1,"tid":3,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819383000,"dur":47000},{"pid":1,"tid":3,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819430000,"dur":4000},{"pid":1,"tid":3,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819435000,"dur":100},{"pid":1,"tid":3,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819436000,"dur":100},{"pid":1,"tid":3,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819436000,"dur":100},{"pid":1,"tid":3,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819436000,"dur":100},{"pid":1,"tid":3,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819436000,"dur":100},{"pid":1,"tid":3,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819436000,"dur":100},{"pid":1,"tid":3,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819436000,"dur":2000},{"pid":1,"tid":3,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819438000,"dur":1000},{"pid":1,"tid":3,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819439000,"dur":2000},{"pid":1,"tid":3,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819441000,"dur":100},{"pid":1,"tid":3,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819441000,"dur":22000},{"pid":1,"tid":3,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819463000,"dur":1000},{"pid":1,"tid":3,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819464000,"dur":2000},{"pid":1,"tid":3,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819467000,"dur":100},{"pid":1,"tid":3,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819467000,"dur":1000},{"pid":1,"tid":3,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518451819434000,"dur":34000},{"pid":1,"tid":3,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819468000,"dur":3000},{"pid":1,"tid":3,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819471000,"dur":7000},{"pid":1,"tid":3,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819378000,"dur":105000},{"pid":1,"tid":3,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451819371000,"dur":112000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819502000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819502000,"dur":44000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819547000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819551000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819555000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451819556000,"dur":6000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819563000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819564000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819564000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819565000,"dur":34000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451819599000,"dur":3000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451819603000,"dur":25000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451819629000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451819631000,"dur":499000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451820131000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451820131000,"dur":14000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451820145000,"dur":435000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451820581000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451820582000,"dur":67000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451820649000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451820650000,"dur":790000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451821441000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451821443000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451821444000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451821445000,"dur":1000},{"pid":1,"tid":6,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518451821470000,"dur":4000},{"pid":1,"tid":6,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518451821474000,"dur":135000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451821447000,"dur":164000},{"pid":1,"tid":6,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518451821614000,"dur":100},{"pid":1,"tid":6,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518451821614000,"dur":150000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451821612000,"dur":165000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451821778000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451821779000,"dur":6000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451821785000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451821788000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518451821789000,"dur":8000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451821798000,"dur":100},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451821799000,"dur":1055000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518451822854000,"dur":1000},{"pid":1,"tid":3,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518451822857000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-22-869.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-22-869.rawproto
new file mode 100644
index 00000000..6d6e73e5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-12-17-10-22-869.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-14-45-39-964.json b/IGetAndroid/build/android-profile/profile-2018-02-13-14-45-39-964.json
new file mode 100644
index 00000000..4b4b5949
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-14-45-39-964.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531540000,"args":{"JVM stats":"heap_memory_usage: 445317864\nnon_heap_memory_usage: 158863904\nloaded_class_count: 16382\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531692000,"args":{"JVM stats":"heap_memory_usage: 459209480\nnon_heap_memory_usage: 159201752\nloaded_class_count: 16397\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531749000,"args":{"JVM stats":"heap_memory_usage: 471869248\nnon_heap_memory_usage: 159241808\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531754000,"args":{"JVM stats":"heap_memory_usage: 471869248\nnon_heap_memory_usage: 159219152\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531758000,"args":{"JVM stats":"heap_memory_usage: 471869248\nnon_heap_memory_usage: 159223384\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531758001,"args":{"JVM stats":"heap_memory_usage: 472275544\nnon_heap_memory_usage: 159233944\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531760000,"args":{"JVM stats":"heap_memory_usage: 472275544\nnon_heap_memory_usage: 159237144\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531761000,"args":{"JVM stats":"heap_memory_usage: 472685864\nnon_heap_memory_usage: 159238104\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531762000,"args":{"JVM stats":"heap_memory_usage: 472685864\nnon_heap_memory_usage: 159246552\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531763000,"args":{"JVM stats":"heap_memory_usage: 472685864\nnon_heap_memory_usage: 159246552\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531860000,"args":{"JVM stats":"heap_memory_usage: 482903624\nnon_heap_memory_usage: 159303960\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531863000,"args":{"JVM stats":"heap_memory_usage: 483716144\nnon_heap_memory_usage: 159303960\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531868000,"args":{"JVM stats":"heap_memory_usage: 484122384\nnon_heap_memory_usage: 159315752\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531870000,"args":{"JVM stats":"heap_memory_usage: 484122384\nnon_heap_memory_usage: 159335464\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531886000,"args":{"JVM stats":"heap_memory_usage: 487060336\nnon_heap_memory_usage: 159344288\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531886001,"args":{"JVM stats":"heap_memory_usage: 487060336\nnon_heap_memory_usage: 159344288\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531904000,"args":{"JVM stats":"heap_memory_usage: 487872776\nnon_heap_memory_usage: 159347416\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531933000,"args":{"JVM stats":"heap_memory_usage: 490326512\nnon_heap_memory_usage: 159347416\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529531934000,"args":{"JVM stats":"heap_memory_usage: 490326512\nnon_heap_memory_usage: 159347416\nloaded_class_count: 16397\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529539956000,"args":{"JVM stats":"heap_memory_usage: 493105440\nnon_heap_memory_usage: 159600712\nloaded_class_count: 16399\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529539965000,"args":{"JVM stats":"heap_memory_usage: 493105440\nnon_heap_memory_usage: 159549776\nloaded_class_count: 16399\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":12,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531540000,"dur":2000},{"pid":1,"tid":12,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531542000,"dur":5000},{"pid":1,"tid":12,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531547000,"dur":100},{"pid":1,"tid":12,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531547000,"dur":1000},{"pid":1,"tid":12,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531582000,"dur":4000},{"pid":1,"tid":12,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531586000,"dur":100},{"pid":1,"tid":12,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531587000,"dur":1000},{"pid":1,"tid":12,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531588000,"dur":100},{"pid":1,"tid":12,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531588000,"dur":100},{"pid":1,"tid":12,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531588000,"dur":1000},{"pid":1,"tid":12,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531589000,"dur":100},{"pid":1,"tid":12,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531589000,"dur":100},{"pid":1,"tid":12,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531589000,"dur":4000},{"pid":1,"tid":12,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531593000,"dur":100},{"pid":1,"tid":12,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531593000,"dur":1000},{"pid":1,"tid":12,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531594000,"dur":100},{"pid":1,"tid":12,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531594000,"dur":31000},{"pid":1,"tid":12,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531626000,"dur":1000},{"pid":1,"tid":12,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531627000,"dur":4000},{"pid":1,"tid":12,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531633000,"dur":1000},{"pid":1,"tid":12,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531634000,"dur":100},{"pid":1,"tid":12,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531586000,"dur":48000},{"pid":1,"tid":12,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531634000,"dur":2000},{"pid":1,"tid":12,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531637000,"dur":100},{"pid":1,"tid":12,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531637000,"dur":100},{"pid":1,"tid":12,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531637000,"dur":100},{"pid":1,"tid":12,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531637000,"dur":1000},{"pid":1,"tid":12,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531638000,"dur":100},{"pid":1,"tid":12,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531638000,"dur":100},{"pid":1,"tid":12,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531638000,"dur":1000},{"pid":1,"tid":12,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531639000,"dur":100},{"pid":1,"tid":12,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531639000,"dur":100},{"pid":1,"tid":12,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531639000,"dur":100},{"pid":1,"tid":12,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531639000,"dur":19000},{"pid":1,"tid":12,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531658000,"dur":1000},{"pid":1,"tid":12,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531659000,"dur":2000},{"pid":1,"tid":12,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531662000,"dur":1000},{"pid":1,"tid":12,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531663000,"dur":100},{"pid":1,"tid":12,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529531636000,"dur":27000},{"pid":1,"tid":12,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531663000,"dur":1000},{"pid":1,"tid":12,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531665000,"dur":5000},{"pid":1,"tid":12,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531582000,"dur":93000},{"pid":1,"tid":12,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529531576000,"dur":99000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531691000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531693000,"dur":56000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531750000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531755000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531758000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531759000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531760000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531761000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531763000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531764000,"dur":96000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529531860000,"dur":3000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531864000,"dur":4000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531869000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531870000,"dur":16000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531886000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531887000,"dur":17000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531905000,"dur":28000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529531934000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518529531934000,"dur":8022000},{"pid":1,"tid":12,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529539959000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-14-45-39-964.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-14-45-39-964.rawproto
new file mode 100644
index 00000000..12022fd9
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-14-45-39-964.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-14-46-31-576.json b/IGetAndroid/build/android-profile/profile-2018-02-13-14-46-31-576.json
new file mode 100644
index 00000000..a49130f9
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-14-46-31-576.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518529580876000,"args":{"JVM stats":"heap_memory_usage: 515352696\nnon_heap_memory_usage: 159618576\nloaded_class_count: 16416\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581009000,"args":{"JVM stats":"heap_memory_usage: 529302336\nnon_heap_memory_usage: 159720632\nloaded_class_count: 16432\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581049000,"args":{"JVM stats":"heap_memory_usage: 535259080\nnon_heap_memory_usage: 159752384\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581052000,"args":{"JVM stats":"heap_memory_usage: 535259080\nnon_heap_memory_usage: 159760088\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581056000,"args":{"JVM stats":"heap_memory_usage: 535703136\nnon_heap_memory_usage: 159773016\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581057000,"args":{"JVM stats":"heap_memory_usage: 535703136\nnon_heap_memory_usage: 159777912\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581058000,"args":{"JVM stats":"heap_memory_usage: 535703136\nnon_heap_memory_usage: 159785808\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581059000,"args":{"JVM stats":"heap_memory_usage: 535703136\nnon_heap_memory_usage: 159785808\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581059001,"args":{"JVM stats":"heap_memory_usage: 535703136\nnon_heap_memory_usage: 159785808\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581060000,"args":{"JVM stats":"heap_memory_usage: 535703136\nnon_heap_memory_usage: 159785808\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581092000,"args":{"JVM stats":"heap_memory_usage: 539256712\nnon_heap_memory_usage: 159848832\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581093000,"args":{"JVM stats":"heap_memory_usage: 539256712\nnon_heap_memory_usage: 159855552\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581128000,"args":{"JVM stats":"heap_memory_usage: 544589808\nnon_heap_memory_usage: 160048208\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529581129000,"args":{"JVM stats":"heap_memory_usage: 544589808\nnon_heap_memory_usage: 160053552\nloaded_class_count: 16432\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529582051000,"args":{"JVM stats":"heap_memory_usage: 96464072\nnon_heap_memory_usage: 160299280\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 7\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529582052000,"args":{"JVM stats":"heap_memory_usage: 97887536\nnon_heap_memory_usage: 160299280\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529582065000,"args":{"JVM stats":"heap_memory_usage: 100168888\nnon_heap_memory_usage: 160322136\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529582074000,"args":{"JVM stats":"heap_memory_usage: 100924616\nnon_heap_memory_usage: 160326680\nloaded_class_count: 16432\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529583938000,"args":{"JVM stats":"heap_memory_usage: 102269176\nnon_heap_memory_usage: 160373512\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529588760000,"args":{"JVM stats":"heap_memory_usage: 104560672\nnon_heap_memory_usage: 160388520\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529588761000,"args":{"JVM stats":"heap_memory_usage: 104560672\nnon_heap_memory_usage: 160391144\nloaded_class_count: 16432\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589280000,"args":{"JVM stats":"heap_memory_usage: 300569400\nnon_heap_memory_usage: 162114184\nloaded_class_count: 16468\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589283000,"args":{"JVM stats":"heap_memory_usage: 300784960\nnon_heap_memory_usage: 162218560\nloaded_class_count: 16468\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589286000,"args":{"JVM stats":"heap_memory_usage: 300996432\nnon_heap_memory_usage: 162175824\nloaded_class_count: 16468\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589286001,"args":{"JVM stats":"heap_memory_usage: 300996432\nnon_heap_memory_usage: 162178880\nloaded_class_count: 16468\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589289000,"args":{"JVM stats":"heap_memory_usage: 300996432\nnon_heap_memory_usage: 162202704\nloaded_class_count: 16468\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589309000,"args":{"JVM stats":"heap_memory_usage: 302197768\nnon_heap_memory_usage: 162223688\nloaded_class_count: 16468\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589311000,"args":{"JVM stats":"heap_memory_usage: 302197768\nnon_heap_memory_usage: 162234696\nloaded_class_count: 16468\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589314000,"args":{"JVM stats":"heap_memory_usage: 302413352\nnon_heap_memory_usage: 162237928\nloaded_class_count: 16468\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589672000,"args":{"JVM stats":"heap_memory_usage: 325385072\nnon_heap_memory_usage: 162577224\nloaded_class_count: 16469\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589740000,"args":{"JVM stats":"heap_memory_usage: 326847280\nnon_heap_memory_usage: 162593304\nloaded_class_count: 16469\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589741000,"args":{"JVM stats":"heap_memory_usage: 326847280\nnon_heap_memory_usage: 162594072\nloaded_class_count: 16469\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589749000,"args":{"JVM stats":"heap_memory_usage: 328026112\nnon_heap_memory_usage: 162595776\nloaded_class_count: 16469\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529589750000,"args":{"JVM stats":"heap_memory_usage: 328026112\nnon_heap_memory_usage: 162595776\nloaded_class_count: 16469\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529591571000,"args":{"JVM stats":"heap_memory_usage: 399241664\nnon_heap_memory_usage: 162667736\nloaded_class_count: 16469\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 16\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529591571001,"args":{"JVM stats":"heap_memory_usage: 400136024\nnon_heap_memory_usage: 162667736\nloaded_class_count: 16469\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518529591576000,"args":{"JVM stats":"heap_memory_usage: 400474536\nnon_heap_memory_usage: 162682176\nloaded_class_count: 16469\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":12,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580876000,"dur":3000},{"pid":1,"tid":12,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580879000,"dur":4000},{"pid":1,"tid":12,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580883000,"dur":1000},{"pid":1,"tid":12,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580883000,"dur":1000},{"pid":1,"tid":12,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580912000,"dur":3000},{"pid":1,"tid":12,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580915000,"dur":1000},{"pid":1,"tid":12,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580917000,"dur":100},{"pid":1,"tid":12,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580917000,"dur":100},{"pid":1,"tid":12,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580917000,"dur":100},{"pid":1,"tid":12,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580917000,"dur":1000},{"pid":1,"tid":12,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580918000,"dur":100},{"pid":1,"tid":12,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580918000,"dur":100},{"pid":1,"tid":12,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580918000,"dur":3000},{"pid":1,"tid":12,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580921000,"dur":100},{"pid":1,"tid":12,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580921000,"dur":100},{"pid":1,"tid":12,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580921000,"dur":100},{"pid":1,"tid":12,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580921000,"dur":22000},{"pid":1,"tid":12,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580943000,"dur":100},{"pid":1,"tid":12,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580943000,"dur":3000},{"pid":1,"tid":12,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580947000,"dur":1000},{"pid":1,"tid":12,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580948000,"dur":100},{"pid":1,"tid":12,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580916000,"dur":32000},{"pid":1,"tid":12,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580948000,"dur":3000},{"pid":1,"tid":12,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580952000,"dur":100},{"pid":1,"tid":12,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580952000,"dur":100},{"pid":1,"tid":12,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580952000,"dur":100},{"pid":1,"tid":12,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580952000,"dur":100},{"pid":1,"tid":12,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580952000,"dur":100},{"pid":1,"tid":12,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580952000,"dur":100},{"pid":1,"tid":12,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580952000,"dur":2000},{"pid":1,"tid":12,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580954000,"dur":100},{"pid":1,"tid":12,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580954000,"dur":1000},{"pid":1,"tid":12,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580955000,"dur":100},{"pid":1,"tid":12,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580955000,"dur":21000},{"pid":1,"tid":12,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580976000,"dur":100},{"pid":1,"tid":12,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580976000,"dur":2000},{"pid":1,"tid":12,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580979000,"dur":1000},{"pid":1,"tid":12,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580980000,"dur":100},{"pid":1,"tid":12,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518529580951000,"dur":29000},{"pid":1,"tid":12,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580980000,"dur":3000},{"pid":1,"tid":12,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580983000,"dur":7000},{"pid":1,"tid":12,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580911000,"dur":83000},{"pid":1,"tid":12,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529580903000,"dur":92000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581008000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581009000,"dur":40000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581050000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529581053000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581057000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581058000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581059000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581059000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529581060000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581060000,"dur":32000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581092000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529581093000,"dur":35000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529581129000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529581130000,"dur":921000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529582052000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529582052000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529582065000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529582074000,"dur":1864000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529583938000,"dur":4822000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529588760000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529588761000,"dur":519000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529589280000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529589284000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529589286000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529589287000,"dur":2000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529589289000,"dur":19000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529589309000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529589312000,"dur":2000},{"pid":1,"tid":12,"id":74,"name":"transform prep: merge java resources","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518529589386000,"dur":2000},{"pid":1,"tid":12,"id":75,"name":"transform: merge java resources","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518529589388000,"dur":207000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529589314000,"dur":358000},{"pid":1,"tid":12,"id":77,"name":"transform prep: strip debug symbol","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518529589677000,"dur":100},{"pid":1,"tid":12,"id":78,"name":"transform: strip debug symbol","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518529589677000,"dur":46000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529589672000,"dur":68000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529589740000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518529589741000,"dur":8000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529589749000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529589750000,"dur":1821000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518529591571000,"dur":100},{"pid":1,"tid":12,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 49317\n apk_size: 2913141\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518529591572000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-14-46-31-576.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-14-46-31-576.rawproto
new file mode 100644
index 00000000..0b2b8ad3
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-14-46-31-576.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-14-55-43-918.json b/IGetAndroid/build/android-profile/profile-2018-02-13-14-55-43-918.json
new file mode 100644
index 00000000..f9c33ecc
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-14-55-43-918.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139523000,"args":{"JVM stats":"heap_memory_usage: 427753608\nnon_heap_memory_usage: 163384632\nloaded_class_count: 16487\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139627000,"args":{"JVM stats":"heap_memory_usage: 440670392\nnon_heap_memory_usage: 163641824\nloaded_class_count: 16502\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139658000,"args":{"JVM stats":"heap_memory_usage: 446613432\nnon_heap_memory_usage: 163652064\nloaded_class_count: 16502\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139661000,"args":{"JVM stats":"heap_memory_usage: 446871704\nnon_heap_memory_usage: 163652064\nloaded_class_count: 16502\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139663000,"args":{"JVM stats":"heap_memory_usage: 447130032\nnon_heap_memory_usage: 163654304\nloaded_class_count: 16502\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139664000,"args":{"JVM stats":"heap_memory_usage: 447130032\nnon_heap_memory_usage: 163654680\nloaded_class_count: 16502\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139676000,"args":{"JVM stats":"heap_memory_usage: 447647056\nnon_heap_memory_usage: 163711592\nloaded_class_count: 16507\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139677000,"args":{"JVM stats":"heap_memory_usage: 447647056\nnon_heap_memory_usage: 163712368\nloaded_class_count: 16507\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139678000,"args":{"JVM stats":"heap_memory_usage: 447647056\nnon_heap_memory_usage: 163712368\nloaded_class_count: 16507\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139678001,"args":{"JVM stats":"heap_memory_usage: 447647056\nnon_heap_memory_usage: 163712368\nloaded_class_count: 16507\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139707000,"args":{"JVM stats":"heap_memory_usage: 451265200\nnon_heap_memory_usage: 163728488\nloaded_class_count: 16507\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139710000,"args":{"JVM stats":"heap_memory_usage: 451823056\nnon_heap_memory_usage: 163744752\nloaded_class_count: 16507\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139741000,"args":{"JVM stats":"heap_memory_usage: 456576136\nnon_heap_memory_usage: 163862288\nloaded_class_count: 16507\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530139742000,"args":{"JVM stats":"heap_memory_usage: 456576136\nnon_heap_memory_usage: 163862928\nloaded_class_count: 16507\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530140240000,"args":{"JVM stats":"heap_memory_usage: 476608448\nnon_heap_memory_usage: 164118616\nloaded_class_count: 16507\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530140240001,"args":{"JVM stats":"heap_memory_usage: 476608448\nnon_heap_memory_usage: 164121368\nloaded_class_count: 16507\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530140253000,"args":{"JVM stats":"heap_memory_usage: 477457456\nnon_heap_memory_usage: 164081688\nloaded_class_count: 16507\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530141637000,"args":{"JVM stats":"heap_memory_usage: 105362960\nnon_heap_memory_usage: 173072688\nloaded_class_count: 17284\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 9\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 228\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530141639000,"args":{"JVM stats":"heap_memory_usage: 106511792\nnon_heap_memory_usage: 173084376\nloaded_class_count: 17284\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530141689000,"args":{"JVM stats":"heap_memory_usage: 108224792\nnon_heap_memory_usage: 173116752\nloaded_class_count: 17284\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530141690000,"args":{"JVM stats":"heap_memory_usage: 108224792\nnon_heap_memory_usage: 173119056\nloaded_class_count: 17284\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530142212000,"args":{"JVM stats":"heap_memory_usage: 190467880\nnon_heap_memory_usage: 174567024\nloaded_class_count: 17286\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530142214000,"args":{"JVM stats":"heap_memory_usage: 190467880\nnon_heap_memory_usage: 174580384\nloaded_class_count: 17286\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530142216000,"args":{"JVM stats":"heap_memory_usage: 190467880\nnon_heap_memory_usage: 174587560\nloaded_class_count: 17289\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530142216001,"args":{"JVM stats":"heap_memory_usage: 190467880\nnon_heap_memory_usage: 174588696\nloaded_class_count: 17289\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530142218000,"args":{"JVM stats":"heap_memory_usage: 190595776\nnon_heap_memory_usage: 174602136\nloaded_class_count: 17289\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530142680000,"args":{"JVM stats":"heap_memory_usage: 221390136\nnon_heap_memory_usage: 178516272\nloaded_class_count: 17697\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143029000,"args":{"JVM stats":"heap_memory_usage: 282774168\nnon_heap_memory_usage: 180791488\nloaded_class_count: 17795\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143030000,"args":{"JVM stats":"heap_memory_usage: 282774168\nnon_heap_memory_usage: 180794816\nloaded_class_count: 17795\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143034000,"args":{"JVM stats":"heap_memory_usage: 283426520\nnon_heap_memory_usage: 180806688\nloaded_class_count: 17795\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143036000,"args":{"JVM stats":"heap_memory_usage: 283426520\nnon_heap_memory_usage: 180810464\nloaded_class_count: 17795\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143037000,"args":{"JVM stats":"heap_memory_usage: 283426520\nnon_heap_memory_usage: 180810464\nloaded_class_count: 17795\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143044000,"args":{"JVM stats":"heap_memory_usage: 284616768\nnon_heap_memory_usage: 180812896\nloaded_class_count: 17795\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143044001,"args":{"JVM stats":"heap_memory_usage: 284616768\nnon_heap_memory_usage: 180812896\nloaded_class_count: 17795\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143901000,"args":{"JVM stats":"heap_memory_usage: 399611976\nnon_heap_memory_usage: 181038792\nloaded_class_count: 17824\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 19\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143902000,"args":{"JVM stats":"heap_memory_usage: 400359656\nnon_heap_memory_usage: 181038792\nloaded_class_count: 17824\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530143918000,"args":{"JVM stats":"heap_memory_usage: 400711640\nnon_heap_memory_usage: 181036808\nloaded_class_count: 17824\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":13,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139524000,"dur":2000},{"pid":1,"tid":13,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139526000,"dur":3000},{"pid":1,"tid":13,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139529000,"dur":2000},{"pid":1,"tid":13,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139529000,"dur":2000},{"pid":1,"tid":13,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139555000,"dur":4000},{"pid":1,"tid":13,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139559000,"dur":100},{"pid":1,"tid":13,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139560000,"dur":100},{"pid":1,"tid":13,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139560000,"dur":100},{"pid":1,"tid":13,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139560000,"dur":100},{"pid":1,"tid":13,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139560000,"dur":1000},{"pid":1,"tid":13,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139561000,"dur":100},{"pid":1,"tid":13,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139561000,"dur":100},{"pid":1,"tid":13,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139561000,"dur":2000},{"pid":1,"tid":13,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139563000,"dur":100},{"pid":1,"tid":13,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139563000,"dur":100},{"pid":1,"tid":13,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139563000,"dur":100},{"pid":1,"tid":13,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139563000,"dur":18000},{"pid":1,"tid":13,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139581000,"dur":1000},{"pid":1,"tid":13,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139582000,"dur":2000},{"pid":1,"tid":13,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139585000,"dur":1000},{"pid":1,"tid":13,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139586000,"dur":100},{"pid":1,"tid":13,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139559000,"dur":27000},{"pid":1,"tid":13,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139586000,"dur":2000},{"pid":1,"tid":13,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139588000,"dur":1000},{"pid":1,"tid":13,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139589000,"dur":100},{"pid":1,"tid":13,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139589000,"dur":100},{"pid":1,"tid":13,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139589000,"dur":100},{"pid":1,"tid":13,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139589000,"dur":100},{"pid":1,"tid":13,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139589000,"dur":100},{"pid":1,"tid":13,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139589000,"dur":100},{"pid":1,"tid":13,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139589000,"dur":1000},{"pid":1,"tid":13,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139590000,"dur":100},{"pid":1,"tid":13,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139590000,"dur":100},{"pid":1,"tid":13,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139590000,"dur":15000},{"pid":1,"tid":13,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139605000,"dur":1000},{"pid":1,"tid":13,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139606000,"dur":1000},{"pid":1,"tid":13,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139608000,"dur":100},{"pid":1,"tid":13,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139608000,"dur":100},{"pid":1,"tid":13,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530139588000,"dur":20000},{"pid":1,"tid":13,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139608000,"dur":2000},{"pid":1,"tid":13,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139610000,"dur":4000},{"pid":1,"tid":13,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139555000,"dur":62000},{"pid":1,"tid":13,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530139549000,"dur":68000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139627000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139627000,"dur":31000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139658000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139661000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139663000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530139664000,"dur":12000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139677000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139678000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139678000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139679000,"dur":28000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530139707000,"dur":3000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530139710000,"dur":31000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530139742000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530139743000,"dur":497000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530140240000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530140240000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530140254000,"dur":1383000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530141637000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530141639000,"dur":50000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530141689000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530141690000,"dur":522000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530142213000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530142214000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530142216000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530142217000,"dur":1000},{"pid":1,"tid":14,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518530142239000,"dur":1000},{"pid":1,"tid":14,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518530142240000,"dur":438000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530142219000,"dur":461000},{"pid":1,"tid":14,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518530142682000,"dur":1000},{"pid":1,"tid":14,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518530142683000,"dur":333000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530142680000,"dur":348000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530143029000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530143031000,"dur":3000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530143035000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530143036000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530143037000,"dur":6000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530143044000,"dur":100},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530143044000,"dur":857000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530143901000,"dur":1000},{"pid":1,"tid":13,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530143903000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-14-55-43-918.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-14-55-43-918.rawproto
new file mode 100644
index 00000000..7fb390e8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-14-55-43-918.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-14-56-02-730.json b/IGetAndroid/build/android-profile/profile-2018-02-13-14-56-02-730.json
new file mode 100644
index 00000000..ef14f04e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-14-56-02-730.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160242000,"args":{"JVM stats":"heap_memory_usage: 413715608\nnon_heap_memory_usage: 180353272\nloaded_class_count: 17830\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160352000,"args":{"JVM stats":"heap_memory_usage: 424919224\nnon_heap_memory_usage: 180705632\nloaded_class_count: 17830\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160386000,"args":{"JVM stats":"heap_memory_usage: 430673008\nnon_heap_memory_usage: 180708768\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160389000,"args":{"JVM stats":"heap_memory_usage: 430922888\nnon_heap_memory_usage: 180700384\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160391000,"args":{"JVM stats":"heap_memory_usage: 431172744\nnon_heap_memory_usage: 180700384\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160392000,"args":{"JVM stats":"heap_memory_usage: 431422632\nnon_heap_memory_usage: 180700384\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160393000,"args":{"JVM stats":"heap_memory_usage: 431422632\nnon_heap_memory_usage: 180701744\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160393001,"args":{"JVM stats":"heap_memory_usage: 431422632\nnon_heap_memory_usage: 180709552\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160394000,"args":{"JVM stats":"heap_memory_usage: 431422632\nnon_heap_memory_usage: 180709552\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160394001,"args":{"JVM stats":"heap_memory_usage: 431422632\nnon_heap_memory_usage: 180708656\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160423000,"args":{"JVM stats":"heap_memory_usage: 435421584\nnon_heap_memory_usage: 180700800\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160424000,"args":{"JVM stats":"heap_memory_usage: 435421584\nnon_heap_memory_usage: 180702776\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160426000,"args":{"JVM stats":"heap_memory_usage: 435671464\nnon_heap_memory_usage: 180679032\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160426001,"args":{"JVM stats":"heap_memory_usage: 435921400\nnon_heap_memory_usage: 180679032\nloaded_class_count: 17830\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160433000,"args":{"JVM stats":"heap_memory_usage: 436921264\nnon_heap_memory_usage: 180634960\nloaded_class_count: 17831\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160433001,"args":{"JVM stats":"heap_memory_usage: 436921264\nnon_heap_memory_usage: 180614096\nloaded_class_count: 17831\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160445000,"args":{"JVM stats":"heap_memory_usage: 437674976\nnon_heap_memory_usage: 180320848\nloaded_class_count: 17831\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160450000,"args":{"JVM stats":"heap_memory_usage: 438424928\nnon_heap_memory_usage: 180320848\nloaded_class_count: 17831\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160451000,"args":{"JVM stats":"heap_memory_usage: 438424928\nnon_heap_memory_usage: 180320848\nloaded_class_count: 17831\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160493000,"args":{"JVM stats":"heap_memory_usage: 439674208\nnon_heap_memory_usage: 180300992\nloaded_class_count: 17831\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160494000,"args":{"JVM stats":"heap_memory_usage: 439674208\nnon_heap_memory_usage: 180300992\nloaded_class_count: 17831\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160920000,"args":{"JVM stats":"heap_memory_usage: 89723200\nnon_heap_memory_usage: 181694128\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 29\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160922000,"args":{"JVM stats":"heap_memory_usage: 90906912\nnon_heap_memory_usage: 181694128\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160923000,"args":{"JVM stats":"heap_memory_usage: 90906912\nnon_heap_memory_usage: 181694224\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160923001,"args":{"JVM stats":"heap_memory_usage: 90906912\nnon_heap_memory_usage: 181694224\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160925000,"args":{"JVM stats":"heap_memory_usage: 91991808\nnon_heap_memory_usage: 181694224\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160943000,"args":{"JVM stats":"heap_memory_usage: 93279752\nnon_heap_memory_usage: 181702736\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160955000,"args":{"JVM stats":"heap_memory_usage: 93279752\nnon_heap_memory_usage: 181704528\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160957000,"args":{"JVM stats":"heap_memory_usage: 93279752\nnon_heap_memory_usage: 181712504\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160962000,"args":{"JVM stats":"heap_memory_usage: 94297120\nnon_heap_memory_usage: 181726960\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160964000,"args":{"JVM stats":"heap_memory_usage: 94297120\nnon_heap_memory_usage: 181727856\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160965000,"args":{"JVM stats":"heap_memory_usage: 94297120\nnon_heap_memory_usage: 181727856\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160970000,"args":{"JVM stats":"heap_memory_usage: 94305344\nnon_heap_memory_usage: 181727856\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530160971000,"args":{"JVM stats":"heap_memory_usage: 94305344\nnon_heap_memory_usage: 181727856\nloaded_class_count: 17833\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530162723000,"args":{"JVM stats":"heap_memory_usage: 173732472\nnon_heap_memory_usage: 181996072\nloaded_class_count: 17835\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 15\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530162723001,"args":{"JVM stats":"heap_memory_usage: 174420880\nnon_heap_memory_usage: 181996072\nloaded_class_count: 17835\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530162730000,"args":{"JVM stats":"heap_memory_usage: 174684408\nnon_heap_memory_usage: 181988808\nloaded_class_count: 17835\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":13,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160242000,"dur":3000},{"pid":1,"tid":13,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160245000,"dur":4000},{"pid":1,"tid":13,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160249000,"dur":1000},{"pid":1,"tid":13,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160249000,"dur":1000},{"pid":1,"tid":13,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160258000,"dur":4000},{"pid":1,"tid":13,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160262000,"dur":100},{"pid":1,"tid":13,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160263000,"dur":100},{"pid":1,"tid":13,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160263000,"dur":100},{"pid":1,"tid":13,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160263000,"dur":100},{"pid":1,"tid":13,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160263000,"dur":1000},{"pid":1,"tid":13,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160264000,"dur":100},{"pid":1,"tid":13,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160264000,"dur":100},{"pid":1,"tid":13,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160264000,"dur":3000},{"pid":1,"tid":13,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160267000,"dur":100},{"pid":1,"tid":13,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160267000,"dur":100},{"pid":1,"tid":13,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160267000,"dur":100},{"pid":1,"tid":13,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160267000,"dur":24000},{"pid":1,"tid":13,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160291000,"dur":1000},{"pid":1,"tid":13,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160292000,"dur":3000},{"pid":1,"tid":13,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160297000,"dur":1000},{"pid":1,"tid":13,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160298000,"dur":100},{"pid":1,"tid":13,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160262000,"dur":36000},{"pid":1,"tid":13,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160298000,"dur":3000},{"pid":1,"tid":13,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160301000,"dur":1000},{"pid":1,"tid":13,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160302000,"dur":100},{"pid":1,"tid":13,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160302000,"dur":100},{"pid":1,"tid":13,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160302000,"dur":100},{"pid":1,"tid":13,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160302000,"dur":100},{"pid":1,"tid":13,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160302000,"dur":100},{"pid":1,"tid":13,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160302000,"dur":1000},{"pid":1,"tid":13,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160303000,"dur":100},{"pid":1,"tid":13,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160303000,"dur":100},{"pid":1,"tid":13,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160303000,"dur":100},{"pid":1,"tid":13,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160303000,"dur":21000},{"pid":1,"tid":13,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160324000,"dur":1000},{"pid":1,"tid":13,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160325000,"dur":1000},{"pid":1,"tid":13,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160327000,"dur":1000},{"pid":1,"tid":13,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160328000,"dur":100},{"pid":1,"tid":13,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530160301000,"dur":27000},{"pid":1,"tid":13,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160328000,"dur":2000},{"pid":1,"tid":13,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160330000,"dur":6000},{"pid":1,"tid":13,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160258000,"dur":79000},{"pid":1,"tid":13,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530160253000,"dur":84000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160352000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160352000,"dur":34000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160386000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160390000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160392000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160392000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160393000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160393000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160394000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160395000,"dur":28000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160423000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160424000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160426000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160427000,"dur":6000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160433000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160434000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160445000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160450000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530160451000,"dur":42000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530160493000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530160494000,"dur":426000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160921000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160922000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160923000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160924000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160926000,"dur":17000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160943000,"dur":12000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160956000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160957000,"dur":5000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160962000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530160965000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530160965000,"dur":5000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530160971000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: package application","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530160971000,"dur":1752000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530162723000,"dur":100},{"pid":1,"tid":13,"id":80,"name":"base plugin build finished","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 44555\n apk_size: 2913137\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518530162724000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-14-56-02-730.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-14-56-02-730.rawproto
new file mode 100644
index 00000000..37a1dd90
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-14-56-02-730.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-10-08-584.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-10-08-584.json
new file mode 100644
index 00000000..fcf80c01
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-10-08-584.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518530998831000,"args":{"JVM stats":"heap_memory_usage: 218516736\nnon_heap_memory_usage: 182816304\nloaded_class_count: 18027\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999171000,"args":{"JVM stats":"heap_memory_usage: 235829568\nnon_heap_memory_usage: 182974312\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999235000,"args":{"JVM stats":"heap_memory_usage: 240739000\nnon_heap_memory_usage: 182977256\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999241000,"args":{"JVM stats":"heap_memory_usage: 240739000\nnon_heap_memory_usage: 182977256\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999248000,"args":{"JVM stats":"heap_memory_usage: 241603832\nnon_heap_memory_usage: 183031880\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999251000,"args":{"JVM stats":"heap_memory_usage: 241603832\nnon_heap_memory_usage: 183035144\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999259000,"args":{"JVM stats":"heap_memory_usage: 241892344\nnon_heap_memory_usage: 183041288\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999260000,"args":{"JVM stats":"heap_memory_usage: 241892344\nnon_heap_memory_usage: 183041288\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999260001,"args":{"JVM stats":"heap_memory_usage: 241892344\nnon_heap_memory_usage: 183041288\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999261000,"args":{"JVM stats":"heap_memory_usage: 241892344\nnon_heap_memory_usage: 183041288\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999327000,"args":{"JVM stats":"heap_memory_usage: 245643832\nnon_heap_memory_usage: 183048712\nloaded_class_count: 18165\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999334000,"args":{"JVM stats":"heap_memory_usage: 247537224\nnon_heap_memory_usage: 183063608\nloaded_class_count: 18168\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999447000,"args":{"JVM stats":"heap_memory_usage: 261139744\nnon_heap_memory_usage: 183375936\nloaded_class_count: 18168\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518530999455000,"args":{"JVM stats":"heap_memory_usage: 261428072\nnon_heap_memory_usage: 183393176\nloaded_class_count: 18171\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531001298000,"args":{"JVM stats":"heap_memory_usage: 284683408\nnon_heap_memory_usage: 183767944\nloaded_class_count: 18173\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531001299000,"args":{"JVM stats":"heap_memory_usage: 284683408\nnon_heap_memory_usage: 183767944\nloaded_class_count: 18173\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531001327000,"args":{"JVM stats":"heap_memory_usage: 285840288\nnon_heap_memory_usage: 183771272\nloaded_class_count: 18173\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531002172000,"args":{"JVM stats":"heap_memory_usage: 327564088\nnon_heap_memory_usage: 185827064\nloaded_class_count: 18174\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531008550000,"args":{"JVM stats":"heap_memory_usage: 333010840\nnon_heap_memory_usage: 185926840\nloaded_class_count: 18178\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531008585000,"args":{"JVM stats":"heap_memory_usage: 333878824\nnon_heap_memory_usage: 185885640\nloaded_class_count: 18178\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":15,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530998831000,"dur":10000},{"pid":1,"tid":15,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530998841000,"dur":7000},{"pid":1,"tid":15,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530998848000,"dur":7000},{"pid":1,"tid":15,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530998848000,"dur":7000},{"pid":1,"tid":15,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530998960000,"dur":9000},{"pid":1,"tid":15,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530998969000,"dur":2000},{"pid":1,"tid":15,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998972000,"dur":1000},{"pid":1,"tid":15,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998973000,"dur":100},{"pid":1,"tid":15,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998973000,"dur":1000},{"pid":1,"tid":15,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998974000,"dur":1000},{"pid":1,"tid":15,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998975000,"dur":100},{"pid":1,"tid":15,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998975000,"dur":2000},{"pid":1,"tid":15,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998977000,"dur":15000},{"pid":1,"tid":15,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998992000,"dur":6000},{"pid":1,"tid":15,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998998000,"dur":100},{"pid":1,"tid":15,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998998000,"dur":100},{"pid":1,"tid":15,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998999000,"dur":62000},{"pid":1,"tid":15,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999061000,"dur":1000},{"pid":1,"tid":15,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999062000,"dur":3000},{"pid":1,"tid":15,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999068000,"dur":2000},{"pid":1,"tid":15,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999070000,"dur":100},{"pid":1,"tid":15,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530998971000,"dur":99000},{"pid":1,"tid":15,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530999070000,"dur":5000},{"pid":1,"tid":15,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999075000,"dur":1000},{"pid":1,"tid":15,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999076000,"dur":100},{"pid":1,"tid":15,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999076000,"dur":100},{"pid":1,"tid":15,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999076000,"dur":100},{"pid":1,"tid":15,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999076000,"dur":100},{"pid":1,"tid":15,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999076000,"dur":100},{"pid":1,"tid":15,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999076000,"dur":1000},{"pid":1,"tid":15,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999077000,"dur":100},{"pid":1,"tid":15,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999077000,"dur":1000},{"pid":1,"tid":15,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999078000,"dur":100},{"pid":1,"tid":15,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999078000,"dur":31000},{"pid":1,"tid":15,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999109000,"dur":100},{"pid":1,"tid":15,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999109000,"dur":3000},{"pid":1,"tid":15,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999113000,"dur":2000},{"pid":1,"tid":15,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999115000,"dur":100},{"pid":1,"tid":15,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518530999075000,"dur":40000},{"pid":1,"tid":15,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530999115000,"dur":5000},{"pid":1,"tid":15,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530999120000,"dur":10000},{"pid":1,"tid":15,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530998960000,"dur":179000},{"pid":1,"tid":15,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518530998941000,"dur":199000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530999170000,"dur":1000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530999171000,"dur":64000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530999236000,"dur":5000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530999242000,"dur":6000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530999250000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530999251000,"dur":8000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530999259000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530999260000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530999260000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518530999262000,"dur":65000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530999328000,"dur":6000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530999335000,"dur":112000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530999448000,"dur":7000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518530999458000,"dur":1840000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518531001299000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531001300000,"dur":27000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518531001328000,"dur":844000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518531002174000,"dur":6376000},{"pid":1,"tid":15,"id":63,"name":"base plugin build finished","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531008574000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-10-08-584.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-10-08-584.rawproto
new file mode 100644
index 00000000..64ca4966
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-10-08-584.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-22-12-736.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-22-12-736.json
new file mode 100644
index 00000000..ead35981
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-22-12-736.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728607000,"args":{"JVM stats":"heap_memory_usage: 353026576\nnon_heap_memory_usage: 185998256\nloaded_class_count: 18184\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728713000,"args":{"JVM stats":"heap_memory_usage: 364608024\nnon_heap_memory_usage: 185881928\nloaded_class_count: 18185\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728748000,"args":{"JVM stats":"heap_memory_usage: 370951272\nnon_heap_memory_usage: 185902080\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728751000,"args":{"JVM stats":"heap_memory_usage: 371239776\nnon_heap_memory_usage: 185902976\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728753000,"args":{"JVM stats":"heap_memory_usage: 371527976\nnon_heap_memory_usage: 185908352\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728753001,"args":{"JVM stats":"heap_memory_usage: 371527976\nnon_heap_memory_usage: 185906880\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728754000,"args":{"JVM stats":"heap_memory_usage: 371527976\nnon_heap_memory_usage: 185906880\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728755000,"args":{"JVM stats":"heap_memory_usage: 371527976\nnon_heap_memory_usage: 185906880\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728755001,"args":{"JVM stats":"heap_memory_usage: 371527976\nnon_heap_memory_usage: 185906880\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728755000,"args":{"JVM stats":"heap_memory_usage: 371527976\nnon_heap_memory_usage: 185906880\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728783000,"args":{"JVM stats":"heap_memory_usage: 375275664\nnon_heap_memory_usage: 185906880\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728784000,"args":{"JVM stats":"heap_memory_usage: 375275664\nnon_heap_memory_usage: 185906880\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728785000,"args":{"JVM stats":"heap_memory_usage: 375564096\nnon_heap_memory_usage: 185907584\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728786000,"args":{"JVM stats":"heap_memory_usage: 375564096\nnon_heap_memory_usage: 185907584\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728790000,"args":{"JVM stats":"heap_memory_usage: 376720360\nnon_heap_memory_usage: 185936840\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728791000,"args":{"JVM stats":"heap_memory_usage: 376720360\nnon_heap_memory_usage: 185936840\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728802000,"args":{"JVM stats":"heap_memory_usage: 377008544\nnon_heap_memory_usage: 185996184\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531728807000,"args":{"JVM stats":"heap_memory_usage: 377585288\nnon_heap_memory_usage: 185996216\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531732711000,"args":{"JVM stats":"heap_memory_usage: 384115448\nnon_heap_memory_usage: 186019152\nloaded_class_count: 18185\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531732736000,"args":{"JVM stats":"heap_memory_usage: 384981880\nnon_heap_memory_usage: 186001624\nloaded_class_count: 18185\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728608000,"dur":2000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728610000,"dur":4000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728614000,"dur":1000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728614000,"dur":1000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728625000,"dur":3000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728628000,"dur":100},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728629000,"dur":100},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728629000,"dur":1000},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728630000,"dur":100},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728630000,"dur":1000},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728631000,"dur":100},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728631000,"dur":100},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728631000,"dur":2000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728633000,"dur":1000},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728634000,"dur":1000},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728635000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728635000,"dur":22000},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728657000,"dur":100},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728657000,"dur":2000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728661000,"dur":1000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728662000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728628000,"dur":34000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728662000,"dur":3000},{"pid":1,"tid":16,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728666000,"dur":100},{"pid":1,"tid":16,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728666000,"dur":100},{"pid":1,"tid":16,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728666000,"dur":100},{"pid":1,"tid":16,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728666000,"dur":100},{"pid":1,"tid":16,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728666000,"dur":1000},{"pid":1,"tid":16,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728667000,"dur":100},{"pid":1,"tid":16,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728667000,"dur":100},{"pid":1,"tid":16,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728667000,"dur":100},{"pid":1,"tid":16,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728667000,"dur":1000},{"pid":1,"tid":16,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728668000,"dur":100},{"pid":1,"tid":16,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728668000,"dur":17000},{"pid":1,"tid":16,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728685000,"dur":1000},{"pid":1,"tid":16,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728686000,"dur":1000},{"pid":1,"tid":16,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728688000,"dur":100},{"pid":1,"tid":16,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728688000,"dur":100},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531728665000,"dur":23000},{"pid":1,"tid":16,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728688000,"dur":4000},{"pid":1,"tid":16,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728692000,"dur":6000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728625000,"dur":75000},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531728618000,"dur":82000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728713000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728713000,"dur":35000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728749000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728751000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728753000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728754000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728754000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728755000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728755000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728756000,"dur":27000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728783000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728784000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728786000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728786000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728791000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728791000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531728802000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518531728808000,"dur":3903000},{"pid":1,"tid":16,"id":63,"name":"base plugin build finished","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531732731000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-22-12-736.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-22-12-736.rawproto
new file mode 100644
index 00000000..ceb46706
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-22-12-736.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-23-07-539.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-23-07-539.json
new file mode 100644
index 00000000..428cf03b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-23-07-539.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779131000,"args":{"JVM stats":"heap_memory_usage: 397346056\nnon_heap_memory_usage: 185661704\nloaded_class_count: 18187\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779267000,"args":{"JVM stats":"heap_memory_usage: 408589128\nnon_heap_memory_usage: 185885832\nloaded_class_count: 18195\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779316000,"args":{"JVM stats":"heap_memory_usage: 414644656\nnon_heap_memory_usage: 185899912\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779320000,"args":{"JVM stats":"heap_memory_usage: 414644656\nnon_heap_memory_usage: 185894856\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779323000,"args":{"JVM stats":"heap_memory_usage: 415221040\nnon_heap_memory_usage: 185896040\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779324000,"args":{"JVM stats":"heap_memory_usage: 415221040\nnon_heap_memory_usage: 185892648\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779325000,"args":{"JVM stats":"heap_memory_usage: 415221040\nnon_heap_memory_usage: 185892648\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779326000,"args":{"JVM stats":"heap_memory_usage: 415221040\nnon_heap_memory_usage: 185894224\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779326001,"args":{"JVM stats":"heap_memory_usage: 415221040\nnon_heap_memory_usage: 185894224\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779327000,"args":{"JVM stats":"heap_memory_usage: 415221040\nnon_heap_memory_usage: 185894224\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779371000,"args":{"JVM stats":"heap_memory_usage: 418968728\nnon_heap_memory_usage: 185793224\nloaded_class_count: 18195\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779373000,"args":{"JVM stats":"heap_memory_usage: 418968728\nnon_heap_memory_usage: 185795616\nloaded_class_count: 18196\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779376000,"args":{"JVM stats":"heap_memory_usage: 419833736\nnon_heap_memory_usage: 185796320\nloaded_class_count: 18196\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779376001,"args":{"JVM stats":"heap_memory_usage: 419833736\nnon_heap_memory_usage: 185796656\nloaded_class_count: 18196\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779384000,"args":{"JVM stats":"heap_memory_usage: 420986736\nnon_heap_memory_usage: 185794928\nloaded_class_count: 18196\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779384001,"args":{"JVM stats":"heap_memory_usage: 420986736\nnon_heap_memory_usage: 185780272\nloaded_class_count: 18196\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779398000,"args":{"JVM stats":"heap_memory_usage: 421563136\nnon_heap_memory_usage: 185790000\nloaded_class_count: 18196\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531779406000,"args":{"JVM stats":"heap_memory_usage: 422139536\nnon_heap_memory_usage: 185844184\nloaded_class_count: 18196\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531784459000,"args":{"JVM stats":"heap_memory_usage: 428590440\nnon_heap_memory_usage: 185877000\nloaded_class_count: 18196\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531787532000,"args":{"JVM stats":"heap_memory_usage: 430031360\nnon_heap_memory_usage: 185905512\nloaded_class_count: 18197\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531787539000,"args":{"JVM stats":"heap_memory_usage: 430319544\nnon_heap_memory_usage: 185902336\nloaded_class_count: 18197\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":16,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779131000,"dur":5000},{"pid":1,"tid":16,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779136000,"dur":4000},{"pid":1,"tid":16,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779140000,"dur":2000},{"pid":1,"tid":16,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779140000,"dur":2000},{"pid":1,"tid":16,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779153000,"dur":4000},{"pid":1,"tid":16,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779157000,"dur":100},{"pid":1,"tid":16,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779158000,"dur":1000},{"pid":1,"tid":16,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779159000,"dur":100},{"pid":1,"tid":16,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779159000,"dur":100},{"pid":1,"tid":16,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779159000,"dur":1000},{"pid":1,"tid":16,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779160000,"dur":1000},{"pid":1,"tid":16,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779161000,"dur":100},{"pid":1,"tid":16,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779161000,"dur":7000},{"pid":1,"tid":16,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779168000,"dur":1000},{"pid":1,"tid":16,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779169000,"dur":100},{"pid":1,"tid":16,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779169000,"dur":100},{"pid":1,"tid":16,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779169000,"dur":30000},{"pid":1,"tid":16,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779199000,"dur":100},{"pid":1,"tid":16,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779199000,"dur":4000},{"pid":1,"tid":16,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779204000,"dur":1000},{"pid":1,"tid":16,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779205000,"dur":100},{"pid":1,"tid":16,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779157000,"dur":48000},{"pid":1,"tid":16,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779205000,"dur":4000},{"pid":1,"tid":16,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779209000,"dur":100},{"pid":1,"tid":16,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779210000,"dur":100},{"pid":1,"tid":16,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779210000,"dur":100},{"pid":1,"tid":16,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779210000,"dur":100},{"pid":1,"tid":16,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779210000,"dur":100},{"pid":1,"tid":16,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779210000,"dur":100},{"pid":1,"tid":16,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779210000,"dur":1000},{"pid":1,"tid":16,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779211000,"dur":100},{"pid":1,"tid":16,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779211000,"dur":100},{"pid":1,"tid":16,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779211000,"dur":100},{"pid":1,"tid":16,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779211000,"dur":25000},{"pid":1,"tid":16,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779236000,"dur":2000},{"pid":1,"tid":16,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779238000,"dur":1000},{"pid":1,"tid":16,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779240000,"dur":1000},{"pid":1,"tid":16,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779241000,"dur":100},{"pid":1,"tid":16,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531779209000,"dur":32000},{"pid":1,"tid":16,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779241000,"dur":2000},{"pid":1,"tid":16,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779243000,"dur":7000},{"pid":1,"tid":16,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779152000,"dur":100000},{"pid":1,"tid":16,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531779144000,"dur":109000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779267000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779268000,"dur":48000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779317000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779321000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779323000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779324000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779325000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779326000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779327000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779328000,"dur":43000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779372000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779373000,"dur":3000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779376000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779378000,"dur":5000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779384000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779384000,"dur":14000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531779398000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518531779407000,"dur":5051000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518531784459000,"dur":3073000},{"pid":1,"tid":16,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531787534000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-23-07-539.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-23-07-539.rawproto
new file mode 100644
index 00000000..de1cd4fc
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-23-07-539.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-25-38-349.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-25-38-349.json
new file mode 100644
index 00000000..8c56a0b1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-25-38-349.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926194000,"args":{"JVM stats":"heap_memory_usage: 443234512\nnon_heap_memory_usage: 186051424\nloaded_class_count: 18198\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926286000,"args":{"JVM stats":"heap_memory_usage: 454788544\nnon_heap_memory_usage: 186219648\nloaded_class_count: 18198\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926318000,"args":{"JVM stats":"heap_memory_usage: 461136488\nnon_heap_memory_usage: 186230816\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926322000,"args":{"JVM stats":"heap_memory_usage: 461136488\nnon_heap_memory_usage: 186245576\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926324000,"args":{"JVM stats":"heap_memory_usage: 461712872\nnon_heap_memory_usage: 186245576\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926325000,"args":{"JVM stats":"heap_memory_usage: 461712872\nnon_heap_memory_usage: 186245576\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926326000,"args":{"JVM stats":"heap_memory_usage: 461712872\nnon_heap_memory_usage: 186245576\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926326001,"args":{"JVM stats":"heap_memory_usage: 461712872\nnon_heap_memory_usage: 186245576\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926326000,"args":{"JVM stats":"heap_memory_usage: 461712872\nnon_heap_memory_usage: 186245576\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926327000,"args":{"JVM stats":"heap_memory_usage: 461712872\nnon_heap_memory_usage: 186245576\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926355000,"args":{"JVM stats":"heap_memory_usage: 465461168\nnon_heap_memory_usage: 186254024\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926356000,"args":{"JVM stats":"heap_memory_usage: 465461168\nnon_heap_memory_usage: 186254056\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926358000,"args":{"JVM stats":"heap_memory_usage: 465749416\nnon_heap_memory_usage: 186262376\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926358001,"args":{"JVM stats":"heap_memory_usage: 465749416\nnon_heap_memory_usage: 186265704\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926362000,"args":{"JVM stats":"heap_memory_usage: 466902392\nnon_heap_memory_usage: 186273744\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926362001,"args":{"JVM stats":"heap_memory_usage: 466902392\nnon_heap_memory_usage: 186273744\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926374000,"args":{"JVM stats":"heap_memory_usage: 467190576\nnon_heap_memory_usage: 186321232\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531926379000,"args":{"JVM stats":"heap_memory_usage: 468055352\nnon_heap_memory_usage: 186323536\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531930298000,"args":{"JVM stats":"heap_memory_usage: 471233320\nnon_heap_memory_usage: 186350888\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531938342000,"args":{"JVM stats":"heap_memory_usage: 474118176\nnon_heap_memory_usage: 186351600\nloaded_class_count: 18198\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518531938349000,"args":{"JVM stats":"heap_memory_usage: 474422000\nnon_heap_memory_usage: 186347880\nloaded_class_count: 18198\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":17,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926194000,"dur":3000},{"pid":1,"tid":17,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926197000,"dur":2000},{"pid":1,"tid":17,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926199000,"dur":1000},{"pid":1,"tid":17,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926199000,"dur":1000},{"pid":1,"tid":17,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926205000,"dur":3000},{"pid":1,"tid":17,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926208000,"dur":2000},{"pid":1,"tid":17,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926211000,"dur":100},{"pid":1,"tid":17,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926211000,"dur":100},{"pid":1,"tid":17,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926211000,"dur":100},{"pid":1,"tid":17,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926211000,"dur":1000},{"pid":1,"tid":17,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926212000,"dur":100},{"pid":1,"tid":17,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926212000,"dur":100},{"pid":1,"tid":17,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926212000,"dur":2000},{"pid":1,"tid":17,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926214000,"dur":100},{"pid":1,"tid":17,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926214000,"dur":1000},{"pid":1,"tid":17,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926215000,"dur":100},{"pid":1,"tid":17,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926215000,"dur":21000},{"pid":1,"tid":17,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926236000,"dur":1000},{"pid":1,"tid":17,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926237000,"dur":7000},{"pid":1,"tid":17,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926245000,"dur":1000},{"pid":1,"tid":17,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926246000,"dur":100},{"pid":1,"tid":17,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926210000,"dur":36000},{"pid":1,"tid":17,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926246000,"dur":2000},{"pid":1,"tid":17,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926248000,"dur":1000},{"pid":1,"tid":17,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926249000,"dur":100},{"pid":1,"tid":17,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926249000,"dur":100},{"pid":1,"tid":17,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926249000,"dur":100},{"pid":1,"tid":17,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926249000,"dur":100},{"pid":1,"tid":17,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926249000,"dur":100},{"pid":1,"tid":17,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926249000,"dur":1000},{"pid":1,"tid":17,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926250000,"dur":100},{"pid":1,"tid":17,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926250000,"dur":100},{"pid":1,"tid":17,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926250000,"dur":100},{"pid":1,"tid":17,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926250000,"dur":18000},{"pid":1,"tid":17,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926268000,"dur":100},{"pid":1,"tid":17,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926268000,"dur":1000},{"pid":1,"tid":17,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926270000,"dur":100},{"pid":1,"tid":17,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926270000,"dur":100},{"pid":1,"tid":17,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518531926248000,"dur":22000},{"pid":1,"tid":17,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926270000,"dur":2000},{"pid":1,"tid":17,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926272000,"dur":4000},{"pid":1,"tid":17,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926205000,"dur":72000},{"pid":1,"tid":17,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531926201000,"dur":76000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926286000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926287000,"dur":31000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926318000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926322000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926324000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926325000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926326000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926326000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926326000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926327000,"dur":28000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926355000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926356000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926358000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926359000,"dur":3000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926362000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926363000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518531926374000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518531926379000,"dur":3919000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518531930298000,"dur":8044000},{"pid":1,"tid":17,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518531938344000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-25-38-349.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-25-38-349.rawproto
new file mode 100644
index 00000000..2f35216f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-25-38-349.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-27-59-486.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-27-59-486.json
new file mode 100644
index 00000000..205ae720
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-27-59-486.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068131000,"args":{"JVM stats":"heap_memory_usage: 487010680\nnon_heap_memory_usage: 186457592\nloaded_class_count: 18199\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068225000,"args":{"JVM stats":"heap_memory_usage: 498540656\nnon_heap_memory_usage: 186601200\nloaded_class_count: 18208\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068262000,"args":{"JVM stats":"heap_memory_usage: 505177864\nnon_heap_memory_usage: 186662232\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068265000,"args":{"JVM stats":"heap_memory_usage: 505177864\nnon_heap_memory_usage: 186662232\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068267000,"args":{"JVM stats":"heap_memory_usage: 505754304\nnon_heap_memory_usage: 186662232\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068268000,"args":{"JVM stats":"heap_memory_usage: 505754304\nnon_heap_memory_usage: 186662232\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068269000,"args":{"JVM stats":"heap_memory_usage: 505754304\nnon_heap_memory_usage: 186662232\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068269001,"args":{"JVM stats":"heap_memory_usage: 505754304\nnon_heap_memory_usage: 186662232\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068270000,"args":{"JVM stats":"heap_memory_usage: 505754304\nnon_heap_memory_usage: 186662232\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068271000,"args":{"JVM stats":"heap_memory_usage: 505754304\nnon_heap_memory_usage: 186696984\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068302000,"args":{"JVM stats":"heap_memory_usage: 509501952\nnon_heap_memory_usage: 186759072\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068303000,"args":{"JVM stats":"heap_memory_usage: 509501952\nnon_heap_memory_usage: 186759496\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068306000,"args":{"JVM stats":"heap_memory_usage: 509790168\nnon_heap_memory_usage: 186765000\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068307000,"args":{"JVM stats":"heap_memory_usage: 509792296\nnon_heap_memory_usage: 186766136\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068311000,"args":{"JVM stats":"heap_memory_usage: 511233616\nnon_heap_memory_usage: 186801072\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068311001,"args":{"JVM stats":"heap_memory_usage: 511233616\nnon_heap_memory_usage: 186801072\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068324000,"args":{"JVM stats":"heap_memory_usage: 511521800\nnon_heap_memory_usage: 186877104\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532068329000,"args":{"JVM stats":"heap_memory_usage: 512098336\nnon_heap_memory_usage: 186890608\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532072125000,"args":{"JVM stats":"heap_memory_usage: 514717944\nnon_heap_memory_usage: 187001120\nloaded_class_count: 18208\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532079478000,"args":{"JVM stats":"heap_memory_usage: 517757224\nnon_heap_memory_usage: 187008248\nloaded_class_count: 18209\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532079486000,"args":{"JVM stats":"heap_memory_usage: 517757224\nnon_heap_memory_usage: 187007896\nloaded_class_count: 18209\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":18,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068131000,"dur":2000},{"pid":1,"tid":18,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068133000,"dur":4000},{"pid":1,"tid":18,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068137000,"dur":100},{"pid":1,"tid":18,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068137000,"dur":100},{"pid":1,"tid":18,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068143000,"dur":3000},{"pid":1,"tid":18,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068146000,"dur":3000},{"pid":1,"tid":18,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068149000,"dur":100},{"pid":1,"tid":18,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068149000,"dur":1000},{"pid":1,"tid":18,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068150000,"dur":100},{"pid":1,"tid":18,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068150000,"dur":100},{"pid":1,"tid":18,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068150000,"dur":100},{"pid":1,"tid":18,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068150000,"dur":100},{"pid":1,"tid":18,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068150000,"dur":2000},{"pid":1,"tid":18,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068152000,"dur":100},{"pid":1,"tid":18,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068152000,"dur":1000},{"pid":1,"tid":18,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068153000,"dur":100},{"pid":1,"tid":18,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068153000,"dur":23000},{"pid":1,"tid":18,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068176000,"dur":1000},{"pid":1,"tid":18,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068177000,"dur":4000},{"pid":1,"tid":18,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068182000,"dur":1000},{"pid":1,"tid":18,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068183000,"dur":100},{"pid":1,"tid":18,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068149000,"dur":34000},{"pid":1,"tid":18,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068183000,"dur":3000},{"pid":1,"tid":18,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068186000,"dur":1000},{"pid":1,"tid":18,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068187000,"dur":100},{"pid":1,"tid":18,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068187000,"dur":100},{"pid":1,"tid":18,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068187000,"dur":100},{"pid":1,"tid":18,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068187000,"dur":100},{"pid":1,"tid":18,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068187000,"dur":100},{"pid":1,"tid":18,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068187000,"dur":100},{"pid":1,"tid":18,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068187000,"dur":1000},{"pid":1,"tid":18,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068188000,"dur":100},{"pid":1,"tid":18,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068188000,"dur":100},{"pid":1,"tid":18,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068188000,"dur":17000},{"pid":1,"tid":18,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068205000,"dur":1000},{"pid":1,"tid":18,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068206000,"dur":1000},{"pid":1,"tid":18,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068208000,"dur":100},{"pid":1,"tid":18,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068208000,"dur":1000},{"pid":1,"tid":18,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532068186000,"dur":23000},{"pid":1,"tid":18,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068209000,"dur":1000},{"pid":1,"tid":18,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068210000,"dur":4000},{"pid":1,"tid":18,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068143000,"dur":72000},{"pid":1,"tid":18,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532068139000,"dur":77000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068225000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068226000,"dur":36000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068262000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068265000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068267000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068268000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068269000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068270000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068271000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068272000,"dur":30000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068302000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068304000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068306000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068307000,"dur":3000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068311000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068311000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532068324000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532068330000,"dur":3795000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532072125000,"dur":7353000},{"pid":1,"tid":18,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532079480000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-27-59-486.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-27-59-486.rawproto
new file mode 100644
index 00000000..3c526862
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-27-59-486.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-28-22-988.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-28-22-988.json
new file mode 100644
index 00000000..e29a6984
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-28-22-988.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091646000,"args":{"JVM stats":"heap_memory_usage: 529038264\nnon_heap_memory_usage: 187227864\nloaded_class_count: 18210\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091750000,"args":{"JVM stats":"heap_memory_usage: 79411584\nnon_heap_memory_usage: 187489840\nloaded_class_count: 18210\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 14\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091785000,"args":{"JVM stats":"heap_memory_usage: 86770984\nnon_heap_memory_usage: 187500600\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091788000,"args":{"JVM stats":"heap_memory_usage: 86911352\nnon_heap_memory_usage: 187528376\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091789000,"args":{"JVM stats":"heap_memory_usage: 87051848\nnon_heap_memory_usage: 187541920\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091790000,"args":{"JVM stats":"heap_memory_usage: 87192248\nnon_heap_memory_usage: 187541920\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091791000,"args":{"JVM stats":"heap_memory_usage: 87192248\nnon_heap_memory_usage: 187541920\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091791001,"args":{"JVM stats":"heap_memory_usage: 87192248\nnon_heap_memory_usage: 187541920\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091792000,"args":{"JVM stats":"heap_memory_usage: 87192248\nnon_heap_memory_usage: 187541920\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091792001,"args":{"JVM stats":"heap_memory_usage: 87332656\nnon_heap_memory_usage: 187541920\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091819000,"args":{"JVM stats":"heap_memory_usage: 90989208\nnon_heap_memory_usage: 187542624\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091820000,"args":{"JVM stats":"heap_memory_usage: 91129888\nnon_heap_memory_usage: 187542624\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091822000,"args":{"JVM stats":"heap_memory_usage: 91410688\nnon_heap_memory_usage: 187542624\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091823000,"args":{"JVM stats":"heap_memory_usage: 91410688\nnon_heap_memory_usage: 187542624\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091827000,"args":{"JVM stats":"heap_memory_usage: 92820136\nnon_heap_memory_usage: 187544928\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091827001,"args":{"JVM stats":"heap_memory_usage: 92820136\nnon_heap_memory_usage: 187544928\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091838000,"args":{"JVM stats":"heap_memory_usage: 93382128\nnon_heap_memory_usage: 187544928\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532091843000,"args":{"JVM stats":"heap_memory_usage: 94224808\nnon_heap_memory_usage: 187547040\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532095621000,"args":{"JVM stats":"heap_memory_usage: 97596904\nnon_heap_memory_usage: 187562000\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532102979000,"args":{"JVM stats":"heap_memory_usage: 100408560\nnon_heap_memory_usage: 187647176\nloaded_class_count: 18210\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532102988000,"args":{"JVM stats":"heap_memory_usage: 100548984\nnon_heap_memory_usage: 187650160\nloaded_class_count: 18210\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":18,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091646000,"dur":2000},{"pid":1,"tid":18,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091648000,"dur":3000},{"pid":1,"tid":18,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091651000,"dur":1000},{"pid":1,"tid":18,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091651000,"dur":1000},{"pid":1,"tid":18,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091660000,"dur":4000},{"pid":1,"tid":18,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091664000,"dur":1000},{"pid":1,"tid":18,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091665000,"dur":1000},{"pid":1,"tid":18,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091666000,"dur":100},{"pid":1,"tid":18,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091666000,"dur":100},{"pid":1,"tid":18,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091666000,"dur":100},{"pid":1,"tid":18,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091666000,"dur":100},{"pid":1,"tid":18,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091666000,"dur":100},{"pid":1,"tid":18,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091666000,"dur":2000},{"pid":1,"tid":18,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091668000,"dur":1000},{"pid":1,"tid":18,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091669000,"dur":100},{"pid":1,"tid":18,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091669000,"dur":100},{"pid":1,"tid":18,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091669000,"dur":21000},{"pid":1,"tid":18,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091690000,"dur":1000},{"pid":1,"tid":18,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091691000,"dur":2000},{"pid":1,"tid":18,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091694000,"dur":100},{"pid":1,"tid":18,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091694000,"dur":100},{"pid":1,"tid":18,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091665000,"dur":29000},{"pid":1,"tid":18,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091694000,"dur":2000},{"pid":1,"tid":18,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091697000,"dur":100},{"pid":1,"tid":18,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091697000,"dur":100},{"pid":1,"tid":18,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091697000,"dur":100},{"pid":1,"tid":18,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091697000,"dur":100},{"pid":1,"tid":18,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091697000,"dur":100},{"pid":1,"tid":18,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091697000,"dur":100},{"pid":1,"tid":18,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091697000,"dur":1000},{"pid":1,"tid":18,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091698000,"dur":100},{"pid":1,"tid":18,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091698000,"dur":100},{"pid":1,"tid":18,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091698000,"dur":100},{"pid":1,"tid":18,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091698000,"dur":18000},{"pid":1,"tid":18,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091716000,"dur":1000},{"pid":1,"tid":18,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091717000,"dur":1000},{"pid":1,"tid":18,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091718000,"dur":1000},{"pid":1,"tid":18,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091719000,"dur":100},{"pid":1,"tid":18,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532091696000,"dur":23000},{"pid":1,"tid":18,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091719000,"dur":2000},{"pid":1,"tid":18,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091721000,"dur":4000},{"pid":1,"tid":18,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091660000,"dur":66000},{"pid":1,"tid":18,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532091654000,"dur":72000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091735000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091750000,"dur":35000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091785000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091788000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091790000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091790000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091791000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091791000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091792000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091792000,"dur":27000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091819000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091820000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091822000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091823000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091827000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091827000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532091838000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532091844000,"dur":3777000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532095621000,"dur":7358000},{"pid":1,"tid":18,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532102982000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-28-22-988.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-28-22-988.rawproto
new file mode 100644
index 00000000..dba5e1b7
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-28-22-988.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-25-314.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-25-314.json
new file mode 100644
index 00000000..6d17c12c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-25-314.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224022000,"args":{"JVM stats":"heap_memory_usage: 114636536\nnon_heap_memory_usage: 187802432\nloaded_class_count: 18213\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224156000,"args":{"JVM stats":"heap_memory_usage: 126430016\nnon_heap_memory_usage: 187951352\nloaded_class_count: 18223\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224199000,"args":{"JVM stats":"heap_memory_usage: 132337992\nnon_heap_memory_usage: 187950144\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224202000,"args":{"JVM stats":"heap_memory_usage: 132337992\nnon_heap_memory_usage: 187950912\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224205000,"args":{"JVM stats":"heap_memory_usage: 132899632\nnon_heap_memory_usage: 187950912\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224206000,"args":{"JVM stats":"heap_memory_usage: 132899632\nnon_heap_memory_usage: 187952576\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224207000,"args":{"JVM stats":"heap_memory_usage: 132899632\nnon_heap_memory_usage: 187952576\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224207001,"args":{"JVM stats":"heap_memory_usage: 132899632\nnon_heap_memory_usage: 187952576\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224208000,"args":{"JVM stats":"heap_memory_usage: 132899632\nnon_heap_memory_usage: 187952576\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224208001,"args":{"JVM stats":"heap_memory_usage: 132899632\nnon_heap_memory_usage: 187965504\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224239000,"args":{"JVM stats":"heap_memory_usage: 136830872\nnon_heap_memory_usage: 187965504\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224240000,"args":{"JVM stats":"heap_memory_usage: 136830872\nnon_heap_memory_usage: 187965504\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224242000,"args":{"JVM stats":"heap_memory_usage: 137111672\nnon_heap_memory_usage: 187965504\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224243000,"args":{"JVM stats":"heap_memory_usage: 137111672\nnon_heap_memory_usage: 187965504\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224248000,"args":{"JVM stats":"heap_memory_usage: 138235056\nnon_heap_memory_usage: 187969984\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224248001,"args":{"JVM stats":"heap_memory_usage: 138235056\nnon_heap_memory_usage: 187969984\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224260000,"args":{"JVM stats":"heap_memory_usage: 138515800\nnon_heap_memory_usage: 187973648\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224265000,"args":{"JVM stats":"heap_memory_usage: 139077328\nnon_heap_memory_usage: 187974352\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532224266000,"args":{"JVM stats":"heap_memory_usage: 139077328\nnon_heap_memory_usage: 187974352\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532225307000,"args":{"JVM stats":"heap_memory_usage: 141899432\nnon_heap_memory_usage: 188202064\nloaded_class_count: 18223\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532225314000,"args":{"JVM stats":"heap_memory_usage: 142180176\nnon_heap_memory_usage: 188195296\nloaded_class_count: 18223\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":19,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224022000,"dur":4000},{"pid":1,"tid":19,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224026000,"dur":4000},{"pid":1,"tid":19,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224030000,"dur":1000},{"pid":1,"tid":19,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224030000,"dur":1000},{"pid":1,"tid":19,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224039000,"dur":5000},{"pid":1,"tid":19,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224044000,"dur":2000},{"pid":1,"tid":19,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224047000,"dur":1000},{"pid":1,"tid":19,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224048000,"dur":100},{"pid":1,"tid":19,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224048000,"dur":100},{"pid":1,"tid":19,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224048000,"dur":1000},{"pid":1,"tid":19,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224049000,"dur":100},{"pid":1,"tid":19,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224049000,"dur":100},{"pid":1,"tid":19,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224049000,"dur":2000},{"pid":1,"tid":19,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224051000,"dur":1000},{"pid":1,"tid":19,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224052000,"dur":100},{"pid":1,"tid":19,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224052000,"dur":100},{"pid":1,"tid":19,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224052000,"dur":46000},{"pid":1,"tid":19,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224098000,"dur":1000},{"pid":1,"tid":19,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224099000,"dur":5000},{"pid":1,"tid":19,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224106000,"dur":1000},{"pid":1,"tid":19,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224107000,"dur":100},{"pid":1,"tid":19,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224046000,"dur":61000},{"pid":1,"tid":19,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224107000,"dur":3000},{"pid":1,"tid":19,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224110000,"dur":100},{"pid":1,"tid":19,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224110000,"dur":1000},{"pid":1,"tid":19,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224111000,"dur":100},{"pid":1,"tid":19,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224111000,"dur":100},{"pid":1,"tid":19,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224111000,"dur":100},{"pid":1,"tid":19,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224111000,"dur":100},{"pid":1,"tid":19,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224111000,"dur":1000},{"pid":1,"tid":19,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224112000,"dur":100},{"pid":1,"tid":19,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224112000,"dur":100},{"pid":1,"tid":19,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224112000,"dur":100},{"pid":1,"tid":19,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224112000,"dur":21000},{"pid":1,"tid":19,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224133000,"dur":1000},{"pid":1,"tid":19,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224134000,"dur":1000},{"pid":1,"tid":19,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224136000,"dur":1000},{"pid":1,"tid":19,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224137000,"dur":100},{"pid":1,"tid":19,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532224110000,"dur":27000},{"pid":1,"tid":19,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224137000,"dur":2000},{"pid":1,"tid":19,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224139000,"dur":5000},{"pid":1,"tid":19,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224038000,"dur":108000},{"pid":1,"tid":19,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532224034000,"dur":112000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224156000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224156000,"dur":42000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224199000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224203000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224205000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224206000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224207000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224207000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224208000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224208000,"dur":31000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224239000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224241000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224242000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224243000,"dur":5000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224248000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224248000,"dur":12000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224260000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532224265000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532224266000,"dur":1041000},{"pid":1,"tid":19,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532225310000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-25-314.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-25-314.rawproto
new file mode 100644
index 00000000..7f6612bc
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-25-314.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-44-269.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-44-269.json
new file mode 100644
index 00000000..554fd824
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-44-269.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532230919000,"args":{"JVM stats":"heap_memory_usage: 153204688\nnon_heap_memory_usage: 188317096\nloaded_class_count: 18223\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231041000,"args":{"JVM stats":"heap_memory_usage: 164453376\nnon_heap_memory_usage: 188476200\nloaded_class_count: 18224\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231087000,"args":{"JVM stats":"heap_memory_usage: 170351488\nnon_heap_memory_usage: 188484648\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231089000,"args":{"JVM stats":"heap_memory_usage: 170351488\nnon_heap_memory_usage: 188484648\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231092000,"args":{"JVM stats":"heap_memory_usage: 171193816\nnon_heap_memory_usage: 188500008\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231093000,"args":{"JVM stats":"heap_memory_usage: 171193816\nnon_heap_memory_usage: 188491048\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231094000,"args":{"JVM stats":"heap_memory_usage: 171193816\nnon_heap_memory_usage: 188483944\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231095000,"args":{"JVM stats":"heap_memory_usage: 171193816\nnon_heap_memory_usage: 188482984\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231096000,"args":{"JVM stats":"heap_memory_usage: 171193816\nnon_heap_memory_usage: 188483440\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231096001,"args":{"JVM stats":"heap_memory_usage: 171474592\nnon_heap_memory_usage: 188491056\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231126000,"args":{"JVM stats":"heap_memory_usage: 174853160\nnon_heap_memory_usage: 188475120\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231127000,"args":{"JVM stats":"heap_memory_usage: 175134504\nnon_heap_memory_usage: 188475120\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231129000,"args":{"JVM stats":"heap_memory_usage: 175134504\nnon_heap_memory_usage: 188475952\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231130000,"args":{"JVM stats":"heap_memory_usage: 175134504\nnon_heap_memory_usage: 188475952\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231134000,"args":{"JVM stats":"heap_memory_usage: 176261848\nnon_heap_memory_usage: 188482816\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231134001,"args":{"JVM stats":"heap_memory_usage: 176261848\nnon_heap_memory_usage: 188468736\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231145000,"args":{"JVM stats":"heap_memory_usage: 177389048\nnon_heap_memory_usage: 188446720\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532231150000,"args":{"JVM stats":"heap_memory_usage: 177950864\nnon_heap_memory_usage: 188465280\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532235285000,"args":{"JVM stats":"heap_memory_usage: 180490440\nnon_heap_memory_usage: 188417736\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532244263000,"args":{"JVM stats":"heap_memory_usage: 183520520\nnon_heap_memory_usage: 188420272\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532244270000,"args":{"JVM stats":"heap_memory_usage: 183801464\nnon_heap_memory_usage: 188420592\nloaded_class_count: 18224\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":19,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230919000,"dur":2000},{"pid":1,"tid":19,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230921000,"dur":3000},{"pid":1,"tid":19,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230924000,"dur":1000},{"pid":1,"tid":19,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230924000,"dur":1000},{"pid":1,"tid":19,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230937000,"dur":3000},{"pid":1,"tid":19,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230940000,"dur":100},{"pid":1,"tid":19,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230941000,"dur":100},{"pid":1,"tid":19,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230941000,"dur":100},{"pid":1,"tid":19,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230941000,"dur":100},{"pid":1,"tid":19,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230941000,"dur":1000},{"pid":1,"tid":19,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230942000,"dur":100},{"pid":1,"tid":19,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230942000,"dur":100},{"pid":1,"tid":19,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230942000,"dur":2000},{"pid":1,"tid":19,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230944000,"dur":100},{"pid":1,"tid":19,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230944000,"dur":100},{"pid":1,"tid":19,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230944000,"dur":100},{"pid":1,"tid":19,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230944000,"dur":23000},{"pid":1,"tid":19,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230967000,"dur":1000},{"pid":1,"tid":19,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230968000,"dur":3000},{"pid":1,"tid":19,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230973000,"dur":1000},{"pid":1,"tid":19,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230974000,"dur":100},{"pid":1,"tid":19,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230940000,"dur":34000},{"pid":1,"tid":19,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230974000,"dur":4000},{"pid":1,"tid":19,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230978000,"dur":1000},{"pid":1,"tid":19,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230979000,"dur":100},{"pid":1,"tid":19,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230979000,"dur":100},{"pid":1,"tid":19,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230979000,"dur":100},{"pid":1,"tid":19,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230979000,"dur":100},{"pid":1,"tid":19,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230979000,"dur":100},{"pid":1,"tid":19,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230979000,"dur":1000},{"pid":1,"tid":19,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230980000,"dur":100},{"pid":1,"tid":19,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230980000,"dur":100},{"pid":1,"tid":19,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230980000,"dur":100},{"pid":1,"tid":19,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230980000,"dur":28000},{"pid":1,"tid":19,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532231008000,"dur":2000},{"pid":1,"tid":19,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532231010000,"dur":5000},{"pid":1,"tid":19,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532231016000,"dur":1000},{"pid":1,"tid":19,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532231017000,"dur":100},{"pid":1,"tid":19,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532230978000,"dur":39000},{"pid":1,"tid":19,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532231017000,"dur":3000},{"pid":1,"tid":19,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532231020000,"dur":7000},{"pid":1,"tid":19,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230937000,"dur":92000},{"pid":1,"tid":19,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532230929000,"dur":100000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231041000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231042000,"dur":44000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231087000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231089000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231092000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231093000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231094000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231095000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231096000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231096000,"dur":30000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231127000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231128000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231130000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231130000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231134000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231134000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532231145000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532231151000,"dur":4134000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532235286000,"dur":8977000},{"pid":1,"tid":19,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532244265000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-44-269.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-44-269.rawproto
new file mode 100644
index 00000000..e2a399af
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-30-44-269.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-15-320.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-15-320.json
new file mode 100644
index 00000000..a6fe00ac
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-15-320.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262610000,"args":{"JVM stats":"heap_memory_usage: 195056336\nnon_heap_memory_usage: 188466456\nloaded_class_count: 18224\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262716000,"args":{"JVM stats":"heap_memory_usage: 206297936\nnon_heap_memory_usage: 188615792\nloaded_class_count: 18224\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262765000,"args":{"JVM stats":"heap_memory_usage: 212764984\nnon_heap_memory_usage: 188661360\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262767000,"args":{"JVM stats":"heap_memory_usage: 212764984\nnon_heap_memory_usage: 188665840\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262769000,"args":{"JVM stats":"heap_memory_usage: 213045960\nnon_heap_memory_usage: 188665840\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262770000,"args":{"JVM stats":"heap_memory_usage: 213045960\nnon_heap_memory_usage: 188671216\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262771000,"args":{"JVM stats":"heap_memory_usage: 213045960\nnon_heap_memory_usage: 188687088\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262772000,"args":{"JVM stats":"heap_memory_usage: 213045960\nnon_heap_memory_usage: 188689968\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262772001,"args":{"JVM stats":"heap_memory_usage: 213045960\nnon_heap_memory_usage: 188692080\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262772000,"args":{"JVM stats":"heap_memory_usage: 213326744\nnon_heap_memory_usage: 188692080\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262804000,"args":{"JVM stats":"heap_memory_usage: 216696488\nnon_heap_memory_usage: 188696176\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262804001,"args":{"JVM stats":"heap_memory_usage: 216977312\nnon_heap_memory_usage: 188696176\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262806000,"args":{"JVM stats":"heap_memory_usage: 216977312\nnon_heap_memory_usage: 188696176\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262807000,"args":{"JVM stats":"heap_memory_usage: 216977312\nnon_heap_memory_usage: 188696176\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262812000,"args":{"JVM stats":"heap_memory_usage: 218100632\nnon_heap_memory_usage: 188696176\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262812001,"args":{"JVM stats":"heap_memory_usage: 218100632\nnon_heap_memory_usage: 188696176\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262825000,"args":{"JVM stats":"heap_memory_usage: 218947008\nnon_heap_memory_usage: 188735472\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532262832000,"args":{"JVM stats":"heap_memory_usage: 219789344\nnon_heap_memory_usage: 188773104\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532266835000,"args":{"JVM stats":"heap_memory_usage: 222878048\nnon_heap_memory_usage: 188862128\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532275314000,"args":{"JVM stats":"heap_memory_usage: 225691400\nnon_heap_memory_usage: 188883672\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532275321000,"args":{"JVM stats":"heap_memory_usage: 225972160\nnon_heap_memory_usage: 188883672\nloaded_class_count: 18224\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":19,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262610000,"dur":4000},{"pid":1,"tid":19,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262614000,"dur":4000},{"pid":1,"tid":19,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262618000,"dur":1000},{"pid":1,"tid":19,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262618000,"dur":1000},{"pid":1,"tid":19,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262625000,"dur":3000},{"pid":1,"tid":19,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262628000,"dur":1000},{"pid":1,"tid":19,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262629000,"dur":1000},{"pid":1,"tid":19,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262630000,"dur":100},{"pid":1,"tid":19,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262630000,"dur":1000},{"pid":1,"tid":19,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262631000,"dur":1000},{"pid":1,"tid":19,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262632000,"dur":100},{"pid":1,"tid":19,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262632000,"dur":1000},{"pid":1,"tid":19,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262633000,"dur":2000},{"pid":1,"tid":19,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262635000,"dur":100},{"pid":1,"tid":19,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262635000,"dur":100},{"pid":1,"tid":19,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262635000,"dur":100},{"pid":1,"tid":19,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262635000,"dur":24000},{"pid":1,"tid":19,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262659000,"dur":1000},{"pid":1,"tid":19,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262660000,"dur":2000},{"pid":1,"tid":19,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262664000,"dur":1000},{"pid":1,"tid":19,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262665000,"dur":100},{"pid":1,"tid":19,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262629000,"dur":36000},{"pid":1,"tid":19,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262665000,"dur":6000},{"pid":1,"tid":19,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262672000,"dur":100},{"pid":1,"tid":19,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262672000,"dur":100},{"pid":1,"tid":19,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262672000,"dur":100},{"pid":1,"tid":19,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262672000,"dur":100},{"pid":1,"tid":19,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262672000,"dur":100},{"pid":1,"tid":19,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262672000,"dur":100},{"pid":1,"tid":19,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262672000,"dur":1000},{"pid":1,"tid":19,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262673000,"dur":100},{"pid":1,"tid":19,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262673000,"dur":1000},{"pid":1,"tid":19,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262674000,"dur":100},{"pid":1,"tid":19,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262674000,"dur":20000},{"pid":1,"tid":19,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262694000,"dur":1000},{"pid":1,"tid":19,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262695000,"dur":1000},{"pid":1,"tid":19,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262697000,"dur":100},{"pid":1,"tid":19,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262697000,"dur":100},{"pid":1,"tid":19,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532262671000,"dur":26000},{"pid":1,"tid":19,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262697000,"dur":2000},{"pid":1,"tid":19,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262699000,"dur":5000},{"pid":1,"tid":19,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262624000,"dur":81000},{"pid":1,"tid":19,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532262620000,"dur":85000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262716000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262716000,"dur":49000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262765000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262768000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262769000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262770000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262771000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262772000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262772000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262773000,"dur":31000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262804000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262805000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262807000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262807000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262812000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262812000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532262825000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532262832000,"dur":4003000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532266835000,"dur":8479000},{"pid":1,"tid":19,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532275316000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-15-320.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-15-320.rawproto
new file mode 100644
index 00000000..52481049
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-15-320.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-41-606.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-41-606.json
new file mode 100644
index 00000000..da41a052
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-41-606.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288866000,"args":{"JVM stats":"heap_memory_usage: 236897624\nnon_heap_memory_usage: 188977088\nloaded_class_count: 18224\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288952000,"args":{"JVM stats":"heap_memory_usage: 248145272\nnon_heap_memory_usage: 189039736\nloaded_class_count: 18224\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288986000,"args":{"JVM stats":"heap_memory_usage: 254328344\nnon_heap_memory_usage: 189055928\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288988000,"args":{"JVM stats":"heap_memory_usage: 254328344\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288990000,"args":{"JVM stats":"heap_memory_usage: 254609144\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288990001,"args":{"JVM stats":"heap_memory_usage: 254609144\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288991000,"args":{"JVM stats":"heap_memory_usage: 254609144\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288992000,"args":{"JVM stats":"heap_memory_usage: 254609144\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288992001,"args":{"JVM stats":"heap_memory_usage: 254609144\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532288992000,"args":{"JVM stats":"heap_memory_usage: 254889888\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532289021000,"args":{"JVM stats":"heap_memory_usage: 258540448\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532289022000,"args":{"JVM stats":"heap_memory_usage: 258821192\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532289024000,"args":{"JVM stats":"heap_memory_usage: 258821192\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532289024001,"args":{"JVM stats":"heap_memory_usage: 258821192\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532289028000,"args":{"JVM stats":"heap_memory_usage: 260225240\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532289028001,"args":{"JVM stats":"heap_memory_usage: 260225240\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532289039000,"args":{"JVM stats":"heap_memory_usage: 261067536\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532289045000,"args":{"JVM stats":"heap_memory_usage: 261629104\nnon_heap_memory_usage: 189056632\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532292999000,"args":{"JVM stats":"heap_memory_usage: 264169576\nnon_heap_memory_usage: 189065240\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532301600000,"args":{"JVM stats":"heap_memory_usage: 266979792\nnon_heap_memory_usage: 189079600\nloaded_class_count: 18224\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532301607000,"args":{"JVM stats":"heap_memory_usage: 266979792\nnon_heap_memory_usage: 189038720\nloaded_class_count: 18224\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":19,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288866000,"dur":2000},{"pid":1,"tid":19,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288868000,"dur":2000},{"pid":1,"tid":19,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288870000,"dur":1000},{"pid":1,"tid":19,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288870000,"dur":1000},{"pid":1,"tid":19,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288877000,"dur":2000},{"pid":1,"tid":19,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288879000,"dur":100},{"pid":1,"tid":19,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288880000,"dur":1000},{"pid":1,"tid":19,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288881000,"dur":100},{"pid":1,"tid":19,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288881000,"dur":100},{"pid":1,"tid":19,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288881000,"dur":100},{"pid":1,"tid":19,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288881000,"dur":100},{"pid":1,"tid":19,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288881000,"dur":100},{"pid":1,"tid":19,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288881000,"dur":2000},{"pid":1,"tid":19,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288883000,"dur":1000},{"pid":1,"tid":19,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288884000,"dur":100},{"pid":1,"tid":19,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288884000,"dur":100},{"pid":1,"tid":19,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288884000,"dur":19000},{"pid":1,"tid":19,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288903000,"dur":100},{"pid":1,"tid":19,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288903000,"dur":2000},{"pid":1,"tid":19,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288906000,"dur":100},{"pid":1,"tid":19,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288906000,"dur":1000},{"pid":1,"tid":19,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288879000,"dur":28000},{"pid":1,"tid":19,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288907000,"dur":2000},{"pid":1,"tid":19,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288909000,"dur":100},{"pid":1,"tid":19,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288909000,"dur":100},{"pid":1,"tid":19,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288909000,"dur":100},{"pid":1,"tid":19,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288909000,"dur":100},{"pid":1,"tid":19,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288909000,"dur":1000},{"pid":1,"tid":19,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288910000,"dur":100},{"pid":1,"tid":19,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288910000,"dur":100},{"pid":1,"tid":19,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288910000,"dur":100},{"pid":1,"tid":19,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288910000,"dur":100},{"pid":1,"tid":19,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288910000,"dur":100},{"pid":1,"tid":19,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288910000,"dur":22000},{"pid":1,"tid":19,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288932000,"dur":1000},{"pid":1,"tid":19,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288933000,"dur":1000},{"pid":1,"tid":19,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288934000,"dur":1000},{"pid":1,"tid":19,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288935000,"dur":100},{"pid":1,"tid":19,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532288909000,"dur":26000},{"pid":1,"tid":19,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288935000,"dur":1000},{"pid":1,"tid":19,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288936000,"dur":4000},{"pid":1,"tid":19,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288876000,"dur":65000},{"pid":1,"tid":19,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532288872000,"dur":69000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288952000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288953000,"dur":33000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288986000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288988000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288990000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288991000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288991000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288992000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288992000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532288993000,"dur":28000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532289022000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532289022000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532289024000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532289025000,"dur":3000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532289028000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532289028000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532289040000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532289045000,"dur":3954000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532293000000,"dur":8600000},{"pid":1,"tid":19,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n abi_filters: ARM64_V8A_ABI\n}\n"},"ph":"X","ts":1518532301602000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-41-606.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-41-606.rawproto
new file mode 100644
index 00000000..5d44941f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-31-41-606.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-33-36-687.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-33-36-687.json
new file mode 100644
index 00000000..7e98dd64
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-33-36-687.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414491000,"args":{"JVM stats":"heap_memory_usage: 288335616\nnon_heap_memory_usage: 189613864\nloaded_class_count: 18251\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414619000,"args":{"JVM stats":"heap_memory_usage: 301554064\nnon_heap_memory_usage: 189991032\nloaded_class_count: 18268\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414662000,"args":{"JVM stats":"heap_memory_usage: 307738320\nnon_heap_memory_usage: 189997496\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414666000,"args":{"JVM stats":"heap_memory_usage: 307738320\nnon_heap_memory_usage: 189999928\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414668000,"args":{"JVM stats":"heap_memory_usage: 308019096\nnon_heap_memory_usage: 189999928\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414669000,"args":{"JVM stats":"heap_memory_usage: 308019096\nnon_heap_memory_usage: 189999928\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414670000,"args":{"JVM stats":"heap_memory_usage: 308019096\nnon_heap_memory_usage: 189999928\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414671000,"args":{"JVM stats":"heap_memory_usage: 308019096\nnon_heap_memory_usage: 190000632\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414672000,"args":{"JVM stats":"heap_memory_usage: 308019096\nnon_heap_memory_usage: 190000632\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414672001,"args":{"JVM stats":"heap_memory_usage: 308299872\nnon_heap_memory_usage: 190000632\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414707000,"args":{"JVM stats":"heap_memory_usage: 312231592\nnon_heap_memory_usage: 190053368\nloaded_class_count: 18268\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414710000,"args":{"JVM stats":"heap_memory_usage: 313452920\nnon_heap_memory_usage: 190063968\nloaded_class_count: 18268\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414759000,"args":{"JVM stats":"heap_memory_usage: 322777944\nnon_heap_memory_usage: 190269552\nloaded_class_count: 18268\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532414761000,"args":{"JVM stats":"heap_memory_usage: 322777944\nnon_heap_memory_usage: 190295920\nloaded_class_count: 18268\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532416048000,"args":{"JVM stats":"heap_memory_usage: 345213624\nnon_heap_memory_usage: 190480744\nloaded_class_count: 18269\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532416048001,"args":{"JVM stats":"heap_memory_usage: 345279176\nnon_heap_memory_usage: 190480744\nloaded_class_count: 18269\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532416059000,"args":{"JVM stats":"heap_memory_usage: 345840744\nnon_heap_memory_usage: 190447528\nloaded_class_count: 18269\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532416065000,"args":{"JVM stats":"heap_memory_usage: 346121520\nnon_heap_memory_usage: 190448032\nloaded_class_count: 18269\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532416067000,"args":{"JVM stats":"heap_memory_usage: 346683096\nnon_heap_memory_usage: 190434640\nloaded_class_count: 18269\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532416681000,"args":{"JVM stats":"heap_memory_usage: 348091144\nnon_heap_memory_usage: 190421488\nloaded_class_count: 18269\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532416687000,"args":{"JVM stats":"heap_memory_usage: 348377104\nnon_heap_memory_usage: 190421488\nloaded_class_count: 18269\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":20,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414491000,"dur":3000},{"pid":1,"tid":20,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414494000,"dur":3000},{"pid":1,"tid":20,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414497000,"dur":1000},{"pid":1,"tid":20,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414497000,"dur":1000},{"pid":1,"tid":20,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414525000,"dur":3000},{"pid":1,"tid":20,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414528000,"dur":100},{"pid":1,"tid":20,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414531000,"dur":100},{"pid":1,"tid":20,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414531000,"dur":100},{"pid":1,"tid":20,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414531000,"dur":1000},{"pid":1,"tid":20,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414532000,"dur":100},{"pid":1,"tid":20,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414532000,"dur":1000},{"pid":1,"tid":20,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414533000,"dur":100},{"pid":1,"tid":20,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414533000,"dur":2000},{"pid":1,"tid":20,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414535000,"dur":100},{"pid":1,"tid":20,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414535000,"dur":100},{"pid":1,"tid":20,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414535000,"dur":100},{"pid":1,"tid":20,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414535000,"dur":27000},{"pid":1,"tid":20,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414562000,"dur":100},{"pid":1,"tid":20,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414562000,"dur":2000},{"pid":1,"tid":20,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414565000,"dur":4000},{"pid":1,"tid":20,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414569000,"dur":100},{"pid":1,"tid":20,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414528000,"dur":41000},{"pid":1,"tid":20,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414569000,"dur":2000},{"pid":1,"tid":20,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414572000,"dur":1000},{"pid":1,"tid":20,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414573000,"dur":100},{"pid":1,"tid":20,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414573000,"dur":1000},{"pid":1,"tid":20,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414574000,"dur":100},{"pid":1,"tid":20,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414574000,"dur":100},{"pid":1,"tid":20,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414574000,"dur":100},{"pid":1,"tid":20,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414574000,"dur":1000},{"pid":1,"tid":20,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414575000,"dur":100},{"pid":1,"tid":20,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414575000,"dur":1000},{"pid":1,"tid":20,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414576000,"dur":100},{"pid":1,"tid":20,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414576000,"dur":18000},{"pid":1,"tid":20,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414594000,"dur":1000},{"pid":1,"tid":20,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414595000,"dur":2000},{"pid":1,"tid":20,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414597000,"dur":1000},{"pid":1,"tid":20,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414598000,"dur":100},{"pid":1,"tid":20,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532414571000,"dur":27000},{"pid":1,"tid":20,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414598000,"dur":2000},{"pid":1,"tid":20,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414600000,"dur":4000},{"pid":1,"tid":20,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414524000,"dur":84000},{"pid":1,"tid":20,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532414518000,"dur":91000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414619000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414619000,"dur":43000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414662000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414666000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414668000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414669000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414670000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414671000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414672000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532414673000,"dur":34000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532414707000,"dur":3000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532414710000,"dur":49000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532414759000,"dur":2000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532414762000,"dur":1286000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532416048000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532416049000,"dur":10000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532416060000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532416066000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532416068000,"dur":613000},{"pid":1,"tid":20,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532416684000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-33-36-687.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-33-36-687.rawproto
new file mode 100644
index 00000000..33935b0a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-33-36-687.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-23-979.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-23-979.json
new file mode 100644
index 00000000..3108a969
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-23-979.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522735000,"args":{"JVM stats":"heap_memory_usage: 360611720\nnon_heap_memory_usage: 190453592\nloaded_class_count: 18269\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522841000,"args":{"JVM stats":"heap_memory_usage: 372165000\nnon_heap_memory_usage: 190468592\nloaded_class_count: 18271\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522881000,"args":{"JVM stats":"heap_memory_usage: 378624696\nnon_heap_memory_usage: 190482352\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522883000,"args":{"JVM stats":"heap_memory_usage: 378624696\nnon_heap_memory_usage: 190503152\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522885000,"args":{"JVM stats":"heap_memory_usage: 378905496\nnon_heap_memory_usage: 190520048\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522886000,"args":{"JVM stats":"heap_memory_usage: 378905496\nnon_heap_memory_usage: 190528752\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522886001,"args":{"JVM stats":"heap_memory_usage: 378905496\nnon_heap_memory_usage: 190528752\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522887000,"args":{"JVM stats":"heap_memory_usage: 378905496\nnon_heap_memory_usage: 190528752\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522887001,"args":{"JVM stats":"heap_memory_usage: 378905496\nnon_heap_memory_usage: 190544752\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522888000,"args":{"JVM stats":"heap_memory_usage: 379186240\nnon_heap_memory_usage: 190544752\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522916000,"args":{"JVM stats":"heap_memory_usage: 382556080\nnon_heap_memory_usage: 190593104\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522917000,"args":{"JVM stats":"heap_memory_usage: 382836856\nnon_heap_memory_usage: 190593872\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522920000,"args":{"JVM stats":"heap_memory_usage: 382836856\nnon_heap_memory_usage: 190593872\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522920001,"args":{"JVM stats":"heap_memory_usage: 382836856\nnon_heap_memory_usage: 190593872\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522929000,"args":{"JVM stats":"heap_memory_usage: 384241456\nnon_heap_memory_usage: 190594576\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522930000,"args":{"JVM stats":"heap_memory_usage: 384241456\nnon_heap_memory_usage: 190594576\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522942000,"args":{"JVM stats":"heap_memory_usage: 385087848\nnon_heap_memory_usage: 190594576\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522947000,"args":{"JVM stats":"heap_memory_usage: 385649496\nnon_heap_memory_usage: 190594576\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532522948000,"args":{"JVM stats":"heap_memory_usage: 385649496\nnon_heap_memory_usage: 190594576\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532523973000,"args":{"JVM stats":"heap_memory_usage: 387053216\nnon_heap_memory_usage: 190663568\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532523979000,"args":{"JVM stats":"heap_memory_usage: 387333984\nnon_heap_memory_usage: 190668616\nloaded_class_count: 18271\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":21,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522735000,"dur":2000},{"pid":1,"tid":21,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522737000,"dur":4000},{"pid":1,"tid":21,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522741000,"dur":100},{"pid":1,"tid":21,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522741000,"dur":100},{"pid":1,"tid":21,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522748000,"dur":2000},{"pid":1,"tid":21,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522750000,"dur":100},{"pid":1,"tid":21,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522753000,"dur":100},{"pid":1,"tid":21,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522753000,"dur":100},{"pid":1,"tid":21,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522753000,"dur":100},{"pid":1,"tid":21,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522753000,"dur":1000},{"pid":1,"tid":21,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522754000,"dur":100},{"pid":1,"tid":21,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522754000,"dur":100},{"pid":1,"tid":21,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522754000,"dur":2000},{"pid":1,"tid":21,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522756000,"dur":100},{"pid":1,"tid":21,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522756000,"dur":1000},{"pid":1,"tid":21,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522757000,"dur":100},{"pid":1,"tid":21,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522757000,"dur":32000},{"pid":1,"tid":21,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522789000,"dur":100},{"pid":1,"tid":21,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522789000,"dur":2000},{"pid":1,"tid":21,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522792000,"dur":4000},{"pid":1,"tid":21,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522796000,"dur":100},{"pid":1,"tid":21,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522750000,"dur":46000},{"pid":1,"tid":21,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522796000,"dur":3000},{"pid":1,"tid":21,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522799000,"dur":100},{"pid":1,"tid":21,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522799000,"dur":100},{"pid":1,"tid":21,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522799000,"dur":1000},{"pid":1,"tid":21,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522800000,"dur":100},{"pid":1,"tid":21,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522800000,"dur":100},{"pid":1,"tid":21,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522800000,"dur":100},{"pid":1,"tid":21,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522800000,"dur":100},{"pid":1,"tid":21,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522800000,"dur":1000},{"pid":1,"tid":21,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522801000,"dur":100},{"pid":1,"tid":21,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522801000,"dur":100},{"pid":1,"tid":21,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522801000,"dur":18000},{"pid":1,"tid":21,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522819000,"dur":1000},{"pid":1,"tid":21,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522820000,"dur":1000},{"pid":1,"tid":21,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522822000,"dur":100},{"pid":1,"tid":21,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522822000,"dur":100},{"pid":1,"tid":21,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532522799000,"dur":23000},{"pid":1,"tid":21,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522822000,"dur":2000},{"pid":1,"tid":21,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522824000,"dur":4000},{"pid":1,"tid":21,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522747000,"dur":83000},{"pid":1,"tid":21,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532522743000,"dur":87000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522841000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522841000,"dur":40000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522881000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522884000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522885000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522886000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522887000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522887000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522887000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522888000,"dur":28000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522917000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522918000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522920000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522921000,"dur":8000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522930000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522930000,"dur":12000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522942000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532522947000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532522948000,"dur":1025000},{"pid":1,"tid":21,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532523975000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-23-979.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-23-979.rawproto
new file mode 100644
index 00000000..ff76fea8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-23-979.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-53-678.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-53-678.json
new file mode 100644
index 00000000..90dc51bf
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-53-678.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552797000,"args":{"JVM stats":"heap_memory_usage: 398566016\nnon_heap_memory_usage: 190520576\nloaded_class_count: 18271\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552887000,"args":{"JVM stats":"heap_memory_usage: 409814696\nnon_heap_memory_usage: 190693104\nloaded_class_count: 18271\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552919000,"args":{"JVM stats":"heap_memory_usage: 415994344\nnon_heap_memory_usage: 190703088\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552922000,"args":{"JVM stats":"heap_memory_usage: 415994344\nnon_heap_memory_usage: 190703088\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552923000,"args":{"JVM stats":"heap_memory_usage: 416275408\nnon_heap_memory_usage: 190703088\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552924000,"args":{"JVM stats":"heap_memory_usage: 416275408\nnon_heap_memory_usage: 190703088\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552925000,"args":{"JVM stats":"heap_memory_usage: 416275408\nnon_heap_memory_usage: 190703088\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552925001,"args":{"JVM stats":"heap_memory_usage: 416275408\nnon_heap_memory_usage: 190703088\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552926000,"args":{"JVM stats":"heap_memory_usage: 416275408\nnon_heap_memory_usage: 190703088\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552926001,"args":{"JVM stats":"heap_memory_usage: 416556208\nnon_heap_memory_usage: 190703088\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552957000,"args":{"JVM stats":"heap_memory_usage: 419926152\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552958000,"args":{"JVM stats":"heap_memory_usage: 420207208\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552960000,"args":{"JVM stats":"heap_memory_usage: 420487976\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552960001,"args":{"JVM stats":"heap_memory_usage: 420487976\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552964000,"args":{"JVM stats":"heap_memory_usage: 421896424\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552964001,"args":{"JVM stats":"heap_memory_usage: 421896424\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552975000,"args":{"JVM stats":"heap_memory_usage: 422457944\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552981000,"args":{"JVM stats":"heap_memory_usage: 423019776\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532552981001,"args":{"JVM stats":"heap_memory_usage: 423019776\nnon_heap_memory_usage: 190704496\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532553589000,"args":{"JVM stats":"heap_memory_usage: 424423496\nnon_heap_memory_usage: 190706464\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532553589001,"args":{"JVM stats":"heap_memory_usage: 424423496\nnon_heap_memory_usage: 190706464\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532553672000,"args":{"JVM stats":"heap_memory_usage: 435955112\nnon_heap_memory_usage: 190806040\nloaded_class_count: 18271\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532553679000,"args":{"JVM stats":"heap_memory_usage: 435955112\nnon_heap_memory_usage: 190810488\nloaded_class_count: 18271\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":21,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552797000,"dur":2000},{"pid":1,"tid":21,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552799000,"dur":4000},{"pid":1,"tid":21,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552803000,"dur":1000},{"pid":1,"tid":21,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552803000,"dur":1000},{"pid":1,"tid":21,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552809000,"dur":3000},{"pid":1,"tid":21,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552812000,"dur":100},{"pid":1,"tid":21,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552813000,"dur":100},{"pid":1,"tid":21,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552813000,"dur":100},{"pid":1,"tid":21,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552813000,"dur":100},{"pid":1,"tid":21,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552813000,"dur":1000},{"pid":1,"tid":21,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552814000,"dur":100},{"pid":1,"tid":21,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552814000,"dur":100},{"pid":1,"tid":21,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552814000,"dur":1000},{"pid":1,"tid":21,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552815000,"dur":100},{"pid":1,"tid":21,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552816000,"dur":100},{"pid":1,"tid":21,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552816000,"dur":100},{"pid":1,"tid":21,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552816000,"dur":24000},{"pid":1,"tid":21,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552840000,"dur":1000},{"pid":1,"tid":21,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552841000,"dur":2000},{"pid":1,"tid":21,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552844000,"dur":1000},{"pid":1,"tid":21,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552845000,"dur":100},{"pid":1,"tid":21,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552812000,"dur":33000},{"pid":1,"tid":21,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552845000,"dur":2000},{"pid":1,"tid":21,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552847000,"dur":1000},{"pid":1,"tid":21,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552848000,"dur":100},{"pid":1,"tid":21,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552848000,"dur":100},{"pid":1,"tid":21,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552848000,"dur":100},{"pid":1,"tid":21,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552848000,"dur":100},{"pid":1,"tid":21,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552848000,"dur":100},{"pid":1,"tid":21,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552848000,"dur":100},{"pid":1,"tid":21,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552848000,"dur":1000},{"pid":1,"tid":21,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552849000,"dur":100},{"pid":1,"tid":21,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552849000,"dur":100},{"pid":1,"tid":21,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552849000,"dur":19000},{"pid":1,"tid":21,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552868000,"dur":1000},{"pid":1,"tid":21,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552869000,"dur":100},{"pid":1,"tid":21,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552870000,"dur":100},{"pid":1,"tid":21,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552870000,"dur":1000},{"pid":1,"tid":21,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532552847000,"dur":24000},{"pid":1,"tid":21,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552871000,"dur":1000},{"pid":1,"tid":21,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552872000,"dur":5000},{"pid":1,"tid":21,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552809000,"dur":69000},{"pid":1,"tid":21,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532552805000,"dur":73000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552886000,"dur":1000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552887000,"dur":32000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552920000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552922000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552924000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552924000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552925000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552925000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552926000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552926000,"dur":31000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552957000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552958000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552960000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552960000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552964000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552964000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552975000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532552981000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532552982000,"dur":607000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532553589000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532553589000,"dur":83000},{"pid":1,"tid":21,"id":66,"name":"base plugin build finished","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532553674000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-53-678.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-53-678.rawproto
new file mode 100644
index 00000000..66e9d002
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-35-53-678.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-17-361.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-17-361.json
new file mode 100644
index 00000000..ee474e73
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-17-361.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570699000,"args":{"JVM stats":"heap_memory_usage: 447317512\nnon_heap_memory_usage: 190894320\nloaded_class_count: 18276\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570788000,"args":{"JVM stats":"heap_memory_usage: 460437984\nnon_heap_memory_usage: 191209024\nloaded_class_count: 18278\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570824000,"args":{"JVM stats":"heap_memory_usage: 466622056\nnon_heap_memory_usage: 191261216\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570826000,"args":{"JVM stats":"heap_memory_usage: 466622056\nnon_heap_memory_usage: 191277856\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570828000,"args":{"JVM stats":"heap_memory_usage: 466903024\nnon_heap_memory_usage: 191284208\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570829000,"args":{"JVM stats":"heap_memory_usage: 466903024\nnon_heap_memory_usage: 191284208\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570830000,"args":{"JVM stats":"heap_memory_usage: 466903024\nnon_heap_memory_usage: 191284912\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570830001,"args":{"JVM stats":"heap_memory_usage: 466903024\nnon_heap_memory_usage: 191284912\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570830000,"args":{"JVM stats":"heap_memory_usage: 466903024\nnon_heap_memory_usage: 191284912\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570831000,"args":{"JVM stats":"heap_memory_usage: 467183784\nnon_heap_memory_usage: 191284912\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570858000,"args":{"JVM stats":"heap_memory_usage: 470834824\nnon_heap_memory_usage: 191285488\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570859000,"args":{"JVM stats":"heap_memory_usage: 471115880\nnon_heap_memory_usage: 191285488\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570861000,"args":{"JVM stats":"heap_memory_usage: 471115880\nnon_heap_memory_usage: 191285864\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570862000,"args":{"JVM stats":"heap_memory_usage: 471115880\nnon_heap_memory_usage: 191314664\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570866000,"args":{"JVM stats":"heap_memory_usage: 472243592\nnon_heap_memory_usage: 191300392\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570866001,"args":{"JVM stats":"heap_memory_usage: 472243592\nnon_heap_memory_usage: 191300392\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570877000,"args":{"JVM stats":"heap_memory_usage: 473085888\nnon_heap_memory_usage: 191300392\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532570882000,"args":{"JVM stats":"heap_memory_usage: 473647424\nnon_heap_memory_usage: 191300392\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532573103000,"args":{"JVM stats":"heap_memory_usage: 475051144\nnon_heap_memory_usage: 191316640\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532577278000,"args":{"JVM stats":"heap_memory_usage: 476174120\nnon_heap_memory_usage: 191302240\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532577278001,"args":{"JVM stats":"heap_memory_usage: 476174120\nnon_heap_memory_usage: 191302240\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532577353000,"args":{"JVM stats":"heap_memory_usage: 487989752\nnon_heap_memory_usage: 191224656\nloaded_class_count: 18278\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532577361000,"args":{"JVM stats":"heap_memory_usage: 488270528\nnon_heap_memory_usage: 191227920\nloaded_class_count: 18278\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":21,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570700000,"dur":2000},{"pid":1,"tid":21,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570702000,"dur":2000},{"pid":1,"tid":21,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570704000,"dur":100},{"pid":1,"tid":21,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570704000,"dur":100},{"pid":1,"tid":21,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570710000,"dur":2000},{"pid":1,"tid":21,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570712000,"dur":1000},{"pid":1,"tid":21,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570713000,"dur":1000},{"pid":1,"tid":21,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570714000,"dur":100},{"pid":1,"tid":21,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570714000,"dur":100},{"pid":1,"tid":21,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570714000,"dur":100},{"pid":1,"tid":21,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570714000,"dur":1000},{"pid":1,"tid":21,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570715000,"dur":100},{"pid":1,"tid":21,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570715000,"dur":1000},{"pid":1,"tid":21,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570716000,"dur":100},{"pid":1,"tid":21,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570716000,"dur":1000},{"pid":1,"tid":21,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570717000,"dur":100},{"pid":1,"tid":21,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570717000,"dur":24000},{"pid":1,"tid":21,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570741000,"dur":1000},{"pid":1,"tid":21,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570742000,"dur":2000},{"pid":1,"tid":21,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570745000,"dur":1000},{"pid":1,"tid":21,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570746000,"dur":100},{"pid":1,"tid":21,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570713000,"dur":33000},{"pid":1,"tid":21,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570746000,"dur":1000},{"pid":1,"tid":21,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570748000,"dur":100},{"pid":1,"tid":21,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570748000,"dur":100},{"pid":1,"tid":21,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570748000,"dur":100},{"pid":1,"tid":21,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570748000,"dur":100},{"pid":1,"tid":21,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570748000,"dur":100},{"pid":1,"tid":21,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570748000,"dur":100},{"pid":1,"tid":21,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570748000,"dur":1000},{"pid":1,"tid":21,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570749000,"dur":100},{"pid":1,"tid":21,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570749000,"dur":100},{"pid":1,"tid":21,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570749000,"dur":100},{"pid":1,"tid":21,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570749000,"dur":19000},{"pid":1,"tid":21,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570768000,"dur":1000},{"pid":1,"tid":21,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570769000,"dur":100},{"pid":1,"tid":21,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570770000,"dur":100},{"pid":1,"tid":21,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570770000,"dur":100},{"pid":1,"tid":21,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532570747000,"dur":23000},{"pid":1,"tid":21,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570770000,"dur":2000},{"pid":1,"tid":21,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570772000,"dur":4000},{"pid":1,"tid":21,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570710000,"dur":68000},{"pid":1,"tid":21,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532570706000,"dur":72000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570788000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570788000,"dur":36000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570824000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570827000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570828000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570829000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570830000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570830000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570830000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570831000,"dur":27000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570859000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570860000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570862000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570862000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570866000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570866000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532570878000,"dur":4000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532570883000,"dur":2220000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532573103000,"dur":4175000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532577278000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518532577278000,"dur":75000},{"pid":1,"tid":21,"id":66,"name":"base plugin build finished","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n abi_enabled: true\n abi_enable_universal_apk: true\n abi_filters: ARME_ABI_V7A\n}\n"},"ph":"X","ts":1518532577355000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-17-361.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-17-361.rawproto
new file mode 100644
index 00000000..7b315307
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-17-361.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-48-198.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-48-198.json
new file mode 100644
index 00000000..a8cbe55a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-48-198.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604141000,"args":{"JVM stats":"heap_memory_usage: 507471592\nnon_heap_memory_usage: 191635816\nloaded_class_count: 18299\nthread_count: 30\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604269000,"args":{"JVM stats":"heap_memory_usage: 78328288\nnon_heap_memory_usage: 192078200\nloaded_class_count: 18342\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 12\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604307000,"args":{"JVM stats":"heap_memory_usage: 85279248\nnon_heap_memory_usage: 192106936\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604310000,"args":{"JVM stats":"heap_memory_usage: 85569352\nnon_heap_memory_usage: 192106936\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604314000,"args":{"JVM stats":"heap_memory_usage: 86140544\nnon_heap_memory_usage: 192111528\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604315000,"args":{"JVM stats":"heap_memory_usage: 86140544\nnon_heap_memory_usage: 192111528\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604315001,"args":{"JVM stats":"heap_memory_usage: 86140544\nnon_heap_memory_usage: 192111528\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604316000,"args":{"JVM stats":"heap_memory_usage: 86140544\nnon_heap_memory_usage: 192111528\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604316001,"args":{"JVM stats":"heap_memory_usage: 86430696\nnon_heap_memory_usage: 192111528\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604317000,"args":{"JVM stats":"heap_memory_usage: 86430696\nnon_heap_memory_usage: 192111528\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604343000,"args":{"JVM stats":"heap_memory_usage: 89912576\nnon_heap_memory_usage: 192112672\nloaded_class_count: 18342\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604345000,"args":{"JVM stats":"heap_memory_usage: 90375832\nnon_heap_memory_usage: 192116584\nloaded_class_count: 18342\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604370000,"args":{"JVM stats":"heap_memory_usage: 95156912\nnon_heap_memory_usage: 192195016\nloaded_class_count: 18342\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532604372000,"args":{"JVM stats":"heap_memory_usage: 95447016\nnon_heap_memory_usage: 192210144\nloaded_class_count: 18342\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605252000,"args":{"JVM stats":"heap_memory_usage: 115442664\nnon_heap_memory_usage: 192364736\nloaded_class_count: 18342\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605252001,"args":{"JVM stats":"heap_memory_usage: 115847504\nnon_heap_memory_usage: 192364736\nloaded_class_count: 18342\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605264000,"args":{"JVM stats":"heap_memory_usage: 116422840\nnon_heap_memory_usage: 192371840\nloaded_class_count: 18342\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605274000,"args":{"JVM stats":"heap_memory_usage: 117143800\nnon_heap_memory_usage: 192373312\nloaded_class_count: 18342\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605275000,"args":{"JVM stats":"heap_memory_usage: 117143800\nnon_heap_memory_usage: 192373312\nloaded_class_count: 18342\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605332000,"args":{"JVM stats":"heap_memory_usage: 118600320\nnon_heap_memory_usage: 192362000\nloaded_class_count: 18342\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605333000,"args":{"JVM stats":"heap_memory_usage: 118600320\nnon_heap_memory_usage: 192362000\nloaded_class_count: 18342\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605773000,"args":{"JVM stats":"heap_memory_usage: 200354232\nnon_heap_memory_usage: 193590944\nloaded_class_count: 18343\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605774000,"args":{"JVM stats":"heap_memory_usage: 200354232\nnon_heap_memory_usage: 193590944\nloaded_class_count: 18343\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605775000,"args":{"JVM stats":"heap_memory_usage: 200354232\nnon_heap_memory_usage: 193590944\nloaded_class_count: 18343\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605775001,"args":{"JVM stats":"heap_memory_usage: 200354232\nnon_heap_memory_usage: 193590944\nloaded_class_count: 18343\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605776000,"args":{"JVM stats":"heap_memory_usage: 200644368\nnon_heap_memory_usage: 193590944\nloaded_class_count: 18343\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532605953000,"args":{"JVM stats":"heap_memory_usage: 221906056\nnon_heap_memory_usage: 194874488\nloaded_class_count: 18343\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532606095000,"args":{"JVM stats":"heap_memory_usage: 279747520\nnon_heap_memory_usage: 195017616\nloaded_class_count: 18344\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532606096000,"args":{"JVM stats":"heap_memory_usage: 280327760\nnon_heap_memory_usage: 195017616\nloaded_class_count: 18344\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532606605000,"args":{"JVM stats":"heap_memory_usage: 301908616\nnon_heap_memory_usage: 195068520\nloaded_class_count: 18345\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532606726000,"args":{"JVM stats":"heap_memory_usage: 304519584\nnon_heap_memory_usage: 195071552\nloaded_class_count: 18345\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532606727000,"args":{"JVM stats":"heap_memory_usage: 304809720\nnon_heap_memory_usage: 195071552\nloaded_class_count: 18345\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532606733000,"args":{"JVM stats":"heap_memory_usage: 305671192\nnon_heap_memory_usage: 195071104\nloaded_class_count: 18345\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532606734000,"args":{"JVM stats":"heap_memory_usage: 305671192\nnon_heap_memory_usage: 195071104\nloaded_class_count: 18345\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532608192000,"args":{"JVM stats":"heap_memory_usage: 404899632\nnon_heap_memory_usage: 195121480\nloaded_class_count: 18346\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 32\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532608192001,"args":{"JVM stats":"heap_memory_usage: 406334592\nnon_heap_memory_usage: 195121480\nloaded_class_count: 18346\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532608199000,"args":{"JVM stats":"heap_memory_usage: 406638944\nnon_heap_memory_usage: 195128544\nloaded_class_count: 18346\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":21,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604141000,"dur":3000},{"pid":1,"tid":21,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604144000,"dur":5000},{"pid":1,"tid":21,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604149000,"dur":1000},{"pid":1,"tid":21,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604149000,"dur":1000},{"pid":1,"tid":21,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604177000,"dur":2000},{"pid":1,"tid":21,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604180000,"dur":100},{"pid":1,"tid":21,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604181000,"dur":100},{"pid":1,"tid":21,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604181000,"dur":100},{"pid":1,"tid":21,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604181000,"dur":1000},{"pid":1,"tid":21,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604182000,"dur":100},{"pid":1,"tid":21,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604182000,"dur":1000},{"pid":1,"tid":21,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604183000,"dur":100},{"pid":1,"tid":21,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604183000,"dur":2000},{"pid":1,"tid":21,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604185000,"dur":100},{"pid":1,"tid":21,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604185000,"dur":1000},{"pid":1,"tid":21,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604186000,"dur":100},{"pid":1,"tid":21,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604186000,"dur":26000},{"pid":1,"tid":21,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604212000,"dur":12000},{"pid":1,"tid":21,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604224000,"dur":2000},{"pid":1,"tid":21,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604227000,"dur":1000},{"pid":1,"tid":21,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604228000,"dur":100},{"pid":1,"tid":21,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604180000,"dur":48000},{"pid":1,"tid":21,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604228000,"dur":2000},{"pid":1,"tid":21,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604230000,"dur":1000},{"pid":1,"tid":21,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604231000,"dur":100},{"pid":1,"tid":21,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604231000,"dur":100},{"pid":1,"tid":21,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604231000,"dur":100},{"pid":1,"tid":21,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604231000,"dur":100},{"pid":1,"tid":21,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604231000,"dur":100},{"pid":1,"tid":21,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604231000,"dur":1000},{"pid":1,"tid":21,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604232000,"dur":100},{"pid":1,"tid":21,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604232000,"dur":100},{"pid":1,"tid":21,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604232000,"dur":100},{"pid":1,"tid":21,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604232000,"dur":18000},{"pid":1,"tid":21,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604250000,"dur":100},{"pid":1,"tid":21,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604250000,"dur":2000},{"pid":1,"tid":21,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604252000,"dur":1000},{"pid":1,"tid":21,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604253000,"dur":100},{"pid":1,"tid":21,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532604230000,"dur":23000},{"pid":1,"tid":21,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604253000,"dur":1000},{"pid":1,"tid":21,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604254000,"dur":4000},{"pid":1,"tid":21,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604176000,"dur":84000},{"pid":1,"tid":21,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532604171000,"dur":90000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532604268000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532604269000,"dur":38000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532604307000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532604310000,"dur":4000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532604314000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532604315000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532604315000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532604316000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532604316000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532604317000,"dur":26000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532604343000,"dur":2000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532604345000,"dur":25000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532604370000,"dur":2000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532604373000,"dur":878000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532605252000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532605252000,"dur":12000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532605265000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532605274000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532605275000,"dur":57000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532605332000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532605333000,"dur":440000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532605773000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532605774000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532605775000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532605775000,"dur":1000},{"pid":1,"tid":22,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518532605795000,"dur":2000},{"pid":1,"tid":22,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518532605797000,"dur":155000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532605777000,"dur":176000},{"pid":1,"tid":22,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518532605955000,"dur":100},{"pid":1,"tid":22,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518532605955000,"dur":128000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532605954000,"dur":141000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532606095000,"dur":1000},{"pid":1,"tid":22,"id":78,"name":"transform prep: merge java resources","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518532606233000,"dur":2000},{"pid":1,"tid":22,"id":79,"name":"transform: merge java resources","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518532606235000,"dur":238000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532606097000,"dur":508000},{"pid":1,"tid":22,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518532606611000,"dur":100},{"pid":1,"tid":22,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518532606611000,"dur":85000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532606605000,"dur":121000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532606727000,"dur":100},{"pid":1,"tid":0,"id":84,"name":"task: transform","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532606728000,"dur":5000},{"pid":1,"tid":0,"id":85,"name":"task: validate signing","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532606733000,"dur":1000},{"pid":1,"tid":0,"id":86,"name":"task: package application","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532606734000,"dur":1458000},{"pid":1,"tid":0,"id":87,"name":"task: unknown task type","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532608192000,"dur":100},{"pid":1,"tid":21,"id":88,"name":"base plugin build finished","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43651\n apk_size: 2811255\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532608193000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-48-198.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-48-198.rawproto
new file mode 100644
index 00000000..55f9f004
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-36-48-198.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-37-13-130.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-37-13-130.json
new file mode 100644
index 00000000..b3aa4ad2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-37-13-130.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622706000,"args":{"JVM stats":"heap_memory_usage: 427274680\nnon_heap_memory_usage: 195673472\nloaded_class_count: 18363\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622832000,"args":{"JVM stats":"heap_memory_usage: 440120168\nnon_heap_memory_usage: 195879744\nloaded_class_count: 18378\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622872000,"args":{"JVM stats":"heap_memory_usage: 446355840\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622876000,"args":{"JVM stats":"heap_memory_usage: 446626520\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622881000,"args":{"JVM stats":"heap_memory_usage: 446897176\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622881001,"args":{"JVM stats":"heap_memory_usage: 446897176\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622882000,"args":{"JVM stats":"heap_memory_usage: 446897176\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622883000,"args":{"JVM stats":"heap_memory_usage: 446897176\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622884000,"args":{"JVM stats":"heap_memory_usage: 446897176\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622884001,"args":{"JVM stats":"heap_memory_usage: 447167864\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622921000,"args":{"JVM stats":"heap_memory_usage: 450687336\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622922000,"args":{"JVM stats":"heap_memory_usage: 450687336\nnon_heap_memory_usage: 195898256\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622944000,"args":{"JVM stats":"heap_memory_usage: 455340784\nnon_heap_memory_usage: 195910400\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532622945000,"args":{"JVM stats":"heap_memory_usage: 455611440\nnon_heap_memory_usage: 195916096\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532623470000,"args":{"JVM stats":"heap_memory_usage: 473622008\nnon_heap_memory_usage: 196059128\nloaded_class_count: 18378\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532623471000,"args":{"JVM stats":"heap_memory_usage: 473687560\nnon_heap_memory_usage: 196059128\nloaded_class_count: 18378\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532623484000,"args":{"JVM stats":"heap_memory_usage: 475316992\nnon_heap_memory_usage: 196067320\nloaded_class_count: 18378\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532623492000,"args":{"JVM stats":"heap_memory_usage: 475858384\nnon_heap_memory_usage: 196067904\nloaded_class_count: 18378\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532625313000,"args":{"JVM stats":"heap_memory_usage: 477482520\nnon_heap_memory_usage: 196229768\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630089000,"args":{"JVM stats":"heap_memory_usage: 480192296\nnon_heap_memory_usage: 196197960\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630090000,"args":{"JVM stats":"heap_memory_usage: 480192296\nnon_heap_memory_usage: 196197992\nloaded_class_count: 18378\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630496000,"args":{"JVM stats":"heap_memory_usage: 120292144\nnon_heap_memory_usage: 197202776\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 16\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630497000,"args":{"JVM stats":"heap_memory_usage: 121654648\nnon_heap_memory_usage: 197202776\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630498000,"args":{"JVM stats":"heap_memory_usage: 121654648\nnon_heap_memory_usage: 197202776\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630499000,"args":{"JVM stats":"heap_memory_usage: 121654648\nnon_heap_memory_usage: 197202776\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630500000,"args":{"JVM stats":"heap_memory_usage: 122799896\nnon_heap_memory_usage: 197204184\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630516000,"args":{"JVM stats":"heap_memory_usage: 123976960\nnon_heap_memory_usage: 197214056\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630517000,"args":{"JVM stats":"heap_memory_usage: 123976960\nnon_heap_memory_usage: 197214056\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630518000,"args":{"JVM stats":"heap_memory_usage: 123976960\nnon_heap_memory_usage: 197214056\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630589000,"args":{"JVM stats":"heap_memory_usage: 124726512\nnon_heap_memory_usage: 197273448\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630592000,"args":{"JVM stats":"heap_memory_usage: 124726512\nnon_heap_memory_usage: 197273448\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630592001,"args":{"JVM stats":"heap_memory_usage: 124726512\nnon_heap_memory_usage: 197273448\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630598000,"args":{"JVM stats":"heap_memory_usage: 125475968\nnon_heap_memory_usage: 197273448\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532630599000,"args":{"JVM stats":"heap_memory_usage: 125475968\nnon_heap_memory_usage: 197273448\nloaded_class_count: 18379\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532633125000,"args":{"JVM stats":"heap_memory_usage: 264958048\nnon_heap_memory_usage: 197400544\nloaded_class_count: 18379\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 30\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532633125001,"args":{"JVM stats":"heap_memory_usage: 265825880\nnon_heap_memory_usage: 197400544\nloaded_class_count: 18379\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518532633130000,"args":{"JVM stats":"heap_memory_usage: 266110848\nnon_heap_memory_usage: 197435032\nloaded_class_count: 18379\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":21,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622706000,"dur":3000},{"pid":1,"tid":21,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622709000,"dur":3000},{"pid":1,"tid":21,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622713000,"dur":100},{"pid":1,"tid":21,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622713000,"dur":100},{"pid":1,"tid":21,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622740000,"dur":4000},{"pid":1,"tid":21,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622744000,"dur":100},{"pid":1,"tid":21,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622745000,"dur":1000},{"pid":1,"tid":21,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622746000,"dur":100},{"pid":1,"tid":21,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622746000,"dur":100},{"pid":1,"tid":21,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622746000,"dur":1000},{"pid":1,"tid":21,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622747000,"dur":100},{"pid":1,"tid":21,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622747000,"dur":100},{"pid":1,"tid":21,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622747000,"dur":2000},{"pid":1,"tid":21,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622749000,"dur":1000},{"pid":1,"tid":21,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622750000,"dur":100},{"pid":1,"tid":21,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622750000,"dur":100},{"pid":1,"tid":21,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622750000,"dur":23000},{"pid":1,"tid":21,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622773000,"dur":1000},{"pid":1,"tid":21,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622774000,"dur":2000},{"pid":1,"tid":21,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622777000,"dur":1000},{"pid":1,"tid":21,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622778000,"dur":100},{"pid":1,"tid":21,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622744000,"dur":34000},{"pid":1,"tid":21,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622778000,"dur":3000},{"pid":1,"tid":21,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622781000,"dur":100},{"pid":1,"tid":21,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622781000,"dur":100},{"pid":1,"tid":21,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622781000,"dur":1000},{"pid":1,"tid":21,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622782000,"dur":100},{"pid":1,"tid":21,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622782000,"dur":100},{"pid":1,"tid":21,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622782000,"dur":100},{"pid":1,"tid":21,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622782000,"dur":1000},{"pid":1,"tid":21,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622783000,"dur":100},{"pid":1,"tid":21,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622783000,"dur":100},{"pid":1,"tid":21,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622783000,"dur":100},{"pid":1,"tid":21,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622783000,"dur":24000},{"pid":1,"tid":21,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622807000,"dur":100},{"pid":1,"tid":21,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622807000,"dur":1000},{"pid":1,"tid":21,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622809000,"dur":100},{"pid":1,"tid":21,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622809000,"dur":100},{"pid":1,"tid":21,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518532622781000,"dur":28000},{"pid":1,"tid":21,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622809000,"dur":2000},{"pid":1,"tid":21,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622812000,"dur":5000},{"pid":1,"tid":21,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622740000,"dur":80000},{"pid":1,"tid":21,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532622735000,"dur":86000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622832000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622833000,"dur":39000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622873000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532622876000,"dur":5000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622881000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622882000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622883000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622883000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532622884000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622885000,"dur":36000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622921000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532622922000,"dur":22000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532622944000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532622946000,"dur":524000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532623470000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532623471000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532623484000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532623493000,"dur":1820000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532625313000,"dur":4776000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532630090000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532630090000,"dur":406000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630497000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630498000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630498000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630499000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630500000,"dur":16000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630516000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630517000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630518000,"dur":71000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630590000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532630592000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518532630592000,"dur":6000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532630599000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: package application","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532630599000,"dur":2526000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518532633125000,"dur":100},{"pid":1,"tid":21,"id":80,"name":"base plugin build finished","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 43796\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518532633126000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-37-13-130.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-37-13-130.rawproto
new file mode 100644
index 00000000..835d3c38
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-37-13-130.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-47-28-310.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-47-28-310.json
new file mode 100644
index 00000000..58e313fa
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-47-28-310.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243787000,"args":{"JVM stats":"heap_memory_usage: 292445624\nnon_heap_memory_usage: 197410208\nloaded_class_count: 18396\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243942000,"args":{"JVM stats":"heap_memory_usage: 304447536\nnon_heap_memory_usage: 197267120\nloaded_class_count: 18411\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243987000,"args":{"JVM stats":"heap_memory_usage: 311547608\nnon_heap_memory_usage: 197353992\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243990000,"args":{"JVM stats":"heap_memory_usage: 311820288\nnon_heap_memory_usage: 197354760\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243992000,"args":{"JVM stats":"heap_memory_usage: 311820288\nnon_heap_memory_usage: 197354760\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243993000,"args":{"JVM stats":"heap_memory_usage: 311820288\nnon_heap_memory_usage: 197355464\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243995000,"args":{"JVM stats":"heap_memory_usage: 312093160\nnon_heap_memory_usage: 197355464\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243995001,"args":{"JVM stats":"heap_memory_usage: 312093160\nnon_heap_memory_usage: 197356168\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243996000,"args":{"JVM stats":"heap_memory_usage: 312093160\nnon_heap_memory_usage: 197356872\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533243996001,"args":{"JVM stats":"heap_memory_usage: 312093160\nnon_heap_memory_usage: 197356872\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244046000,"args":{"JVM stats":"heap_memory_usage: 315638400\nnon_heap_memory_usage: 197397424\nloaded_class_count: 18411\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244049000,"args":{"JVM stats":"heap_memory_usage: 315943808\nnon_heap_memory_usage: 197397424\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244051000,"args":{"JVM stats":"heap_memory_usage: 316216512\nnon_heap_memory_usage: 197397768\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244051001,"args":{"JVM stats":"heap_memory_usage: 316216512\nnon_heap_memory_usage: 197398728\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244067000,"args":{"JVM stats":"heap_memory_usage: 318398384\nnon_heap_memory_usage: 197407400\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244067001,"args":{"JVM stats":"heap_memory_usage: 318398384\nnon_heap_memory_usage: 197407400\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244090000,"args":{"JVM stats":"heap_memory_usage: 318943664\nnon_heap_memory_usage: 197409512\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244100000,"args":{"JVM stats":"heap_memory_usage: 319762256\nnon_heap_memory_usage: 197410920\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533244101000,"args":{"JVM stats":"heap_memory_usage: 319762256\nnon_heap_memory_usage: 197410920\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533248302000,"args":{"JVM stats":"heap_memory_usage: 322549336\nnon_heap_memory_usage: 197424856\nloaded_class_count: 18411\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533248310000,"args":{"JVM stats":"heap_memory_usage: 322822072\nnon_heap_memory_usage: 197426768\nloaded_class_count: 18411\nthread_count: 33\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":23,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243787000,"dur":3000},{"pid":1,"tid":23,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243790000,"dur":4000},{"pid":1,"tid":23,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243794000,"dur":1000},{"pid":1,"tid":23,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243794000,"dur":1000},{"pid":1,"tid":23,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243826000,"dur":4000},{"pid":1,"tid":23,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243830000,"dur":100},{"pid":1,"tid":23,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243835000,"dur":100},{"pid":1,"tid":23,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243835000,"dur":100},{"pid":1,"tid":23,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243835000,"dur":100},{"pid":1,"tid":23,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243835000,"dur":1000},{"pid":1,"tid":23,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243836000,"dur":100},{"pid":1,"tid":23,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243836000,"dur":100},{"pid":1,"tid":23,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243836000,"dur":3000},{"pid":1,"tid":23,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243839000,"dur":1000},{"pid":1,"tid":23,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243840000,"dur":100},{"pid":1,"tid":23,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243840000,"dur":100},{"pid":1,"tid":23,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243840000,"dur":39000},{"pid":1,"tid":23,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243879000,"dur":1000},{"pid":1,"tid":23,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243880000,"dur":2000},{"pid":1,"tid":23,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243885000,"dur":1000},{"pid":1,"tid":23,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243886000,"dur":100},{"pid":1,"tid":23,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243830000,"dur":56000},{"pid":1,"tid":23,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243886000,"dur":9000},{"pid":1,"tid":23,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243896000,"dur":100},{"pid":1,"tid":23,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243896000,"dur":100},{"pid":1,"tid":23,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243896000,"dur":100},{"pid":1,"tid":23,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243896000,"dur":1000},{"pid":1,"tid":23,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243897000,"dur":100},{"pid":1,"tid":23,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243897000,"dur":100},{"pid":1,"tid":23,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243897000,"dur":100},{"pid":1,"tid":23,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243897000,"dur":100},{"pid":1,"tid":23,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243897000,"dur":1000},{"pid":1,"tid":23,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243898000,"dur":100},{"pid":1,"tid":23,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243898000,"dur":23000},{"pid":1,"tid":23,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243921000,"dur":1000},{"pid":1,"tid":23,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243922000,"dur":1000},{"pid":1,"tid":23,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243923000,"dur":1000},{"pid":1,"tid":23,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243924000,"dur":100},{"pid":1,"tid":23,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533243895000,"dur":29000},{"pid":1,"tid":23,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243924000,"dur":1000},{"pid":1,"tid":23,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243925000,"dur":5000},{"pid":1,"tid":23,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243826000,"dur":106000},{"pid":1,"tid":23,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533243815000,"dur":118000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243942000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243943000,"dur":44000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243988000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243991000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243993000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243994000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243995000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243995000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243996000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533243997000,"dur":49000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518533244046000,"dur":3000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533244049000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533244051000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533244052000,"dur":15000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533244067000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533244068000,"dur":22000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533244090000,"dur":10000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533244100000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518533244101000,"dur":4201000},{"pid":1,"tid":23,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533248304000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-47-28-310.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-47-28-310.rawproto
new file mode 100644
index 00000000..240f4b24
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-47-28-310.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-49-00-454.json b/IGetAndroid/build/android-profile/profile-2018-02-13-15-49-00-454.json
new file mode 100644
index 00000000..b129a17f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-49-00-454.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518533327993000,"args":{"JVM stats":"heap_memory_usage: 334962760\nnon_heap_memory_usage: 196598512\nloaded_class_count: 18411\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328074000,"args":{"JVM stats":"heap_memory_usage: 346689256\nnon_heap_memory_usage: 196605904\nloaded_class_count: 18412\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328115000,"args":{"JVM stats":"heap_memory_usage: 352426104\nnon_heap_memory_usage: 196569368\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328117000,"args":{"JVM stats":"heap_memory_usage: 352698760\nnon_heap_memory_usage: 196569368\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328119000,"args":{"JVM stats":"heap_memory_usage: 352698760\nnon_heap_memory_usage: 196569368\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328119001,"args":{"JVM stats":"heap_memory_usage: 352971384\nnon_heap_memory_usage: 196569368\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328120000,"args":{"JVM stats":"heap_memory_usage: 352971384\nnon_heap_memory_usage: 196569368\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328121000,"args":{"JVM stats":"heap_memory_usage: 352971384\nnon_heap_memory_usage: 196569368\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328121001,"args":{"JVM stats":"heap_memory_usage: 352971384\nnon_heap_memory_usage: 196569368\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328121000,"args":{"JVM stats":"heap_memory_usage: 352971384\nnon_heap_memory_usage: 196569744\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328150000,"args":{"JVM stats":"heap_memory_usage: 356516576\nnon_heap_memory_usage: 196571408\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328151000,"args":{"JVM stats":"heap_memory_usage: 356516576\nnon_heap_memory_usage: 196571408\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328153000,"args":{"JVM stats":"heap_memory_usage: 357061856\nnon_heap_memory_usage: 196590864\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328153001,"args":{"JVM stats":"heap_memory_usage: 357061856\nnon_heap_memory_usage: 196590864\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328158000,"args":{"JVM stats":"heap_memory_usage: 358425400\nnon_heap_memory_usage: 196591696\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328158001,"args":{"JVM stats":"heap_memory_usage: 358425400\nnon_heap_memory_usage: 196591696\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328169000,"args":{"JVM stats":"heap_memory_usage: 358970680\nnon_heap_memory_usage: 196594424\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533328175000,"args":{"JVM stats":"heap_memory_usage: 359516120\nnon_heap_memory_usage: 196594424\nloaded_class_count: 18412\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533332097000,"args":{"JVM stats":"heap_memory_usage: 361978392\nnon_heap_memory_usage: 196612080\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533340448000,"args":{"JVM stats":"heap_memory_usage: 364774200\nnon_heap_memory_usage: 196623408\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518533340454000,"args":{"JVM stats":"heap_memory_usage: 365046856\nnon_heap_memory_usage: 196623736\nloaded_class_count: 18413\nthread_count: 32\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533327993000,"dur":2000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533327995000,"dur":3000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533327998000,"dur":1000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533327998000,"dur":1000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533328004000,"dur":2000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533328006000,"dur":1000},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328009000,"dur":1000},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328010000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328010000,"dur":100},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328010000,"dur":100},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328010000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328010000,"dur":1000},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328011000,"dur":2000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328013000,"dur":100},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328013000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328013000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328013000,"dur":17000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328030000,"dur":1000},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328031000,"dur":2000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328034000,"dur":100},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328034000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328007000,"dur":27000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533328034000,"dur":2000},{"pid":1,"tid":24,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328037000,"dur":100},{"pid":1,"tid":24,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328037000,"dur":100},{"pid":1,"tid":24,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328037000,"dur":100},{"pid":1,"tid":24,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328037000,"dur":100},{"pid":1,"tid":24,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328037000,"dur":100},{"pid":1,"tid":24,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328037000,"dur":100},{"pid":1,"tid":24,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328037000,"dur":1000},{"pid":1,"tid":24,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328038000,"dur":100},{"pid":1,"tid":24,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328038000,"dur":100},{"pid":1,"tid":24,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328038000,"dur":100},{"pid":1,"tid":24,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328038000,"dur":16000},{"pid":1,"tid":24,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328054000,"dur":1000},{"pid":1,"tid":24,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328055000,"dur":1000},{"pid":1,"tid":24,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328056000,"dur":1000},{"pid":1,"tid":24,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328057000,"dur":100},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518533328036000,"dur":21000},{"pid":1,"tid":24,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533328057000,"dur":1000},{"pid":1,"tid":24,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533328058000,"dur":7000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533328004000,"dur":62000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533328000000,"dur":66000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328074000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328075000,"dur":40000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328115000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328117000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328119000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328120000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328120000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328121000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328121000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328122000,"dur":28000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328151000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328151000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328153000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328154000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328158000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328158000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518533328170000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518533328175000,"dur":3922000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518533332097000,"dur":8351000},{"pid":1,"tid":24,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518533340450000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-15-49-00-454.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-15-49-00-454.rawproto
new file mode 100644
index 00000000..c6c9368b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-15-49-00-454.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-00-18-009.json b/IGetAndroid/build/android-profile/profile-2018-02-13-16-00-18-009.json
new file mode 100644
index 00000000..cabde9ec
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-00-18-009.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012207000,"args":{"JVM stats":"heap_memory_usage: 382473768\nnon_heap_memory_usage: 196646368\nloaded_class_count: 18413\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012307000,"args":{"JVM stats":"heap_memory_usage: 393961760\nnon_heap_memory_usage: 196698024\nloaded_class_count: 18413\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012394000,"args":{"JVM stats":"heap_memory_usage: 399975736\nnon_heap_memory_usage: 196706600\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012397000,"args":{"JVM stats":"heap_memory_usage: 400248512\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012400000,"args":{"JVM stats":"heap_memory_usage: 400248512\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012400001,"args":{"JVM stats":"heap_memory_usage: 400248512\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012402000,"args":{"JVM stats":"heap_memory_usage: 400521392\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012402001,"args":{"JVM stats":"heap_memory_usage: 400521392\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012402000,"args":{"JVM stats":"heap_memory_usage: 400521392\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012403000,"args":{"JVM stats":"heap_memory_usage: 400521392\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012448000,"args":{"JVM stats":"heap_memory_usage: 404066608\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012449000,"args":{"JVM stats":"heap_memory_usage: 404066608\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012451000,"args":{"JVM stats":"heap_memory_usage: 404611928\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012452000,"args":{"JVM stats":"heap_memory_usage: 404611928\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012463000,"args":{"JVM stats":"heap_memory_usage: 405702688\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012463001,"args":{"JVM stats":"heap_memory_usage: 405702688\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012475000,"args":{"JVM stats":"heap_memory_usage: 406793496\nnon_heap_memory_usage: 196701224\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012506000,"args":{"JVM stats":"heap_memory_usage: 407066144\nnon_heap_memory_usage: 196693368\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534012507000,"args":{"JVM stats":"heap_memory_usage: 407338768\nnon_heap_memory_usage: 196694712\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534018002000,"args":{"JVM stats":"heap_memory_usage: 409876000\nnon_heap_memory_usage: 196713336\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534018010000,"args":{"JVM stats":"heap_memory_usage: 410148704\nnon_heap_memory_usage: 196733856\nloaded_class_count: 18413\nthread_count: 32\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":25,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012208000,"dur":3000},{"pid":1,"tid":25,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012211000,"dur":4000},{"pid":1,"tid":25,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012215000,"dur":1000},{"pid":1,"tid":25,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012215000,"dur":1000},{"pid":1,"tid":25,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012230000,"dur":2000},{"pid":1,"tid":25,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012232000,"dur":1000},{"pid":1,"tid":25,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012235000,"dur":100},{"pid":1,"tid":25,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012235000,"dur":100},{"pid":1,"tid":25,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012235000,"dur":100},{"pid":1,"tid":25,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012235000,"dur":1000},{"pid":1,"tid":25,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012236000,"dur":100},{"pid":1,"tid":25,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012236000,"dur":100},{"pid":1,"tid":25,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012236000,"dur":2000},{"pid":1,"tid":25,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012238000,"dur":100},{"pid":1,"tid":25,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012238000,"dur":1000},{"pid":1,"tid":25,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012239000,"dur":100},{"pid":1,"tid":25,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012239000,"dur":21000},{"pid":1,"tid":25,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012260000,"dur":100},{"pid":1,"tid":25,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012260000,"dur":2000},{"pid":1,"tid":25,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012265000,"dur":100},{"pid":1,"tid":25,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012265000,"dur":1000},{"pid":1,"tid":25,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012233000,"dur":33000},{"pid":1,"tid":25,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012266000,"dur":2000},{"pid":1,"tid":25,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012268000,"dur":100},{"pid":1,"tid":25,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012268000,"dur":100},{"pid":1,"tid":25,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012268000,"dur":100},{"pid":1,"tid":25,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012268000,"dur":1000},{"pid":1,"tid":25,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012269000,"dur":100},{"pid":1,"tid":25,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012269000,"dur":100},{"pid":1,"tid":25,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012269000,"dur":100},{"pid":1,"tid":25,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012269000,"dur":1000},{"pid":1,"tid":25,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012270000,"dur":100},{"pid":1,"tid":25,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012270000,"dur":100},{"pid":1,"tid":25,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012270000,"dur":17000},{"pid":1,"tid":25,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012287000,"dur":1000},{"pid":1,"tid":25,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012288000,"dur":100},{"pid":1,"tid":25,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012289000,"dur":100},{"pid":1,"tid":25,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012289000,"dur":100},{"pid":1,"tid":25,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534012268000,"dur":21000},{"pid":1,"tid":25,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012289000,"dur":2000},{"pid":1,"tid":25,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012291000,"dur":6000},{"pid":1,"tid":25,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012230000,"dur":68000},{"pid":1,"tid":25,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534012218000,"dur":80000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012307000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012307000,"dur":87000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012395000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012398000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012400000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012401000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012402000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012402000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012402000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012403000,"dur":45000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012448000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012449000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012452000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012453000,"dur":10000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012463000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012464000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012476000,"dur":30000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534012507000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518534012508000,"dur":5494000},{"pid":1,"tid":25,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534018004000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-00-18-009.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-16-00-18-009.rawproto
new file mode 100644
index 00000000..cb255146
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-00-18-009.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-01-55-665.json b/IGetAndroid/build/android-profile/profile-2018-02-13-16-01-55-665.json
new file mode 100644
index 00000000..63f50991
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-01-55-665.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114713000,"args":{"JVM stats":"heap_memory_usage: 422216800\nnon_heap_memory_usage: 196749032\nloaded_class_count: 18413\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114796000,"args":{"JVM stats":"heap_memory_usage: 433430912\nnon_heap_memory_usage: 196860512\nloaded_class_count: 18413\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114832000,"args":{"JVM stats":"heap_memory_usage: 439717112\nnon_heap_memory_usage: 196861664\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114835000,"args":{"JVM stats":"heap_memory_usage: 439989736\nnon_heap_memory_usage: 196861664\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114838000,"args":{"JVM stats":"heap_memory_usage: 440262728\nnon_heap_memory_usage: 196861664\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114838001,"args":{"JVM stats":"heap_memory_usage: 440262728\nnon_heap_memory_usage: 196861664\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114839000,"args":{"JVM stats":"heap_memory_usage: 440535376\nnon_heap_memory_usage: 196861664\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114840000,"args":{"JVM stats":"heap_memory_usage: 440535376\nnon_heap_memory_usage: 196861664\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114840001,"args":{"JVM stats":"heap_memory_usage: 440535376\nnon_heap_memory_usage: 196861664\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114840000,"args":{"JVM stats":"heap_memory_usage: 440535376\nnon_heap_memory_usage: 196861664\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114877000,"args":{"JVM stats":"heap_memory_usage: 444080960\nnon_heap_memory_usage: 196867296\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114878000,"args":{"JVM stats":"heap_memory_usage: 444080960\nnon_heap_memory_usage: 196867296\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114880000,"args":{"JVM stats":"heap_memory_usage: 444626632\nnon_heap_memory_usage: 196868000\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114880001,"args":{"JVM stats":"heap_memory_usage: 444626632\nnon_heap_memory_usage: 196868000\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114884000,"args":{"JVM stats":"heap_memory_usage: 445717656\nnon_heap_memory_usage: 196884672\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114885000,"args":{"JVM stats":"heap_memory_usage: 445717656\nnon_heap_memory_usage: 196884672\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114897000,"args":{"JVM stats":"heap_memory_usage: 446262936\nnon_heap_memory_usage: 196884672\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114903000,"args":{"JVM stats":"heap_memory_usage: 446535744\nnon_heap_memory_usage: 196894656\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534114903001,"args":{"JVM stats":"heap_memory_usage: 446808448\nnon_heap_memory_usage: 196894656\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534115659000,"args":{"JVM stats":"heap_memory_usage: 449536872\nnon_heap_memory_usage: 196924384\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534115665000,"args":{"JVM stats":"heap_memory_usage: 449536872\nnon_heap_memory_usage: 196924384\nloaded_class_count: 18413\nthread_count: 32\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":26,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114713000,"dur":2000},{"pid":1,"tid":26,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114716000,"dur":3000},{"pid":1,"tid":26,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114719000,"dur":100},{"pid":1,"tid":26,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114719000,"dur":100},{"pid":1,"tid":26,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114727000,"dur":2000},{"pid":1,"tid":26,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114729000,"dur":100},{"pid":1,"tid":26,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114730000,"dur":3000},{"pid":1,"tid":26,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114733000,"dur":1000},{"pid":1,"tid":26,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114734000,"dur":100},{"pid":1,"tid":26,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114734000,"dur":100},{"pid":1,"tid":26,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114734000,"dur":100},{"pid":1,"tid":26,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114734000,"dur":100},{"pid":1,"tid":26,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114734000,"dur":4000},{"pid":1,"tid":26,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114738000,"dur":100},{"pid":1,"tid":26,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114738000,"dur":100},{"pid":1,"tid":26,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114738000,"dur":100},{"pid":1,"tid":26,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114738000,"dur":19000},{"pid":1,"tid":26,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114758000,"dur":100},{"pid":1,"tid":26,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114758000,"dur":1000},{"pid":1,"tid":26,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114760000,"dur":1000},{"pid":1,"tid":26,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114761000,"dur":100},{"pid":1,"tid":26,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114729000,"dur":32000},{"pid":1,"tid":26,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114761000,"dur":2000},{"pid":1,"tid":26,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114763000,"dur":1000},{"pid":1,"tid":26,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":100},{"pid":1,"tid":26,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114764000,"dur":17000},{"pid":1,"tid":26,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114781000,"dur":100},{"pid":1,"tid":26,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114781000,"dur":1000},{"pid":1,"tid":26,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114782000,"dur":1000},{"pid":1,"tid":26,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114783000,"dur":100},{"pid":1,"tid":26,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534114763000,"dur":20000},{"pid":1,"tid":26,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114783000,"dur":1000},{"pid":1,"tid":26,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114784000,"dur":4000},{"pid":1,"tid":26,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114727000,"dur":62000},{"pid":1,"tid":26,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534114721000,"dur":68000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114796000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114796000,"dur":35000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114832000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114836000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114838000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114838000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114839000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114840000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114840000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114841000,"dur":36000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114878000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114879000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114880000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114881000,"dur":3000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114885000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114885000,"dur":12000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114897000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534114903000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518534114904000,"dur":755000},{"pid":1,"tid":26,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534115661000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-01-55-665.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-16-01-55-665.rawproto
new file mode 100644
index 00000000..bf3c3939
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-01-55-665.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-03-32-471.json b/IGetAndroid/build/android-profile/profile-2018-02-13-16-03-32-471.json
new file mode 100644
index 00000000..6a7c803b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-03-32-471.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211567000,"args":{"JVM stats":"heap_memory_usage: 461530648\nnon_heap_memory_usage: 197023408\nloaded_class_count: 18413\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211668000,"args":{"JVM stats":"heap_memory_usage: 471925048\nnon_heap_memory_usage: 197095304\nloaded_class_count: 18413\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211711000,"args":{"JVM stats":"heap_memory_usage: 479294192\nnon_heap_memory_usage: 197103880\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211713000,"args":{"JVM stats":"heap_memory_usage: 479839640\nnon_heap_memory_usage: 197103880\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211715000,"args":{"JVM stats":"heap_memory_usage: 479839640\nnon_heap_memory_usage: 197103880\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211715001,"args":{"JVM stats":"heap_memory_usage: 479839640\nnon_heap_memory_usage: 197103880\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211716000,"args":{"JVM stats":"heap_memory_usage: 480112320\nnon_heap_memory_usage: 197103880\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211716001,"args":{"JVM stats":"heap_memory_usage: 480112320\nnon_heap_memory_usage: 197103880\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211717000,"args":{"JVM stats":"heap_memory_usage: 480112320\nnon_heap_memory_usage: 197103880\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211717001,"args":{"JVM stats":"heap_memory_usage: 480112320\nnon_heap_memory_usage: 197103880\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211752000,"args":{"JVM stats":"heap_memory_usage: 483657384\nnon_heap_memory_usage: 197108872\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211753000,"args":{"JVM stats":"heap_memory_usage: 483657384\nnon_heap_memory_usage: 197108872\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211756000,"args":{"JVM stats":"heap_memory_usage: 483930024\nnon_heap_memory_usage: 197112648\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211757000,"args":{"JVM stats":"heap_memory_usage: 483930024\nnon_heap_memory_usage: 197112648\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211762000,"args":{"JVM stats":"heap_memory_usage: 485020816\nnon_heap_memory_usage: 197114504\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211762001,"args":{"JVM stats":"heap_memory_usage: 485020816\nnon_heap_memory_usage: 197114504\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211775000,"args":{"JVM stats":"heap_memory_usage: 485293440\nnon_heap_memory_usage: 197114504\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211782000,"args":{"JVM stats":"heap_memory_usage: 485838744\nnon_heap_memory_usage: 197115272\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534211783000,"args":{"JVM stats":"heap_memory_usage: 485838744\nnon_heap_memory_usage: 197115272\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534212465000,"args":{"JVM stats":"heap_memory_usage: 488565976\nnon_heap_memory_usage: 197237192\nloaded_class_count: 18413\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518534212471000,"args":{"JVM stats":"heap_memory_usage: 488565976\nnon_heap_memory_usage: 197256768\nloaded_class_count: 18413\nthread_count: 32\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":27,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211568000,"dur":1000},{"pid":1,"tid":27,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211569000,"dur":3000},{"pid":1,"tid":27,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211572000,"dur":1000},{"pid":1,"tid":27,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211572000,"dur":1000},{"pid":1,"tid":27,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211579000,"dur":2000},{"pid":1,"tid":27,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211581000,"dur":100},{"pid":1,"tid":27,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211582000,"dur":3000},{"pid":1,"tid":27,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211585000,"dur":100},{"pid":1,"tid":27,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211585000,"dur":1000},{"pid":1,"tid":27,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211586000,"dur":100},{"pid":1,"tid":27,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211586000,"dur":100},{"pid":1,"tid":27,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211586000,"dur":1000},{"pid":1,"tid":27,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211587000,"dur":3000},{"pid":1,"tid":27,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211590000,"dur":100},{"pid":1,"tid":27,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211590000,"dur":100},{"pid":1,"tid":27,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211590000,"dur":100},{"pid":1,"tid":27,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211590000,"dur":23000},{"pid":1,"tid":27,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211613000,"dur":1000},{"pid":1,"tid":27,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211614000,"dur":1000},{"pid":1,"tid":27,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211616000,"dur":1000},{"pid":1,"tid":27,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211617000,"dur":100},{"pid":1,"tid":27,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211581000,"dur":36000},{"pid":1,"tid":27,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211617000,"dur":2000},{"pid":1,"tid":27,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211619000,"dur":1000},{"pid":1,"tid":27,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211620000,"dur":100},{"pid":1,"tid":27,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211620000,"dur":100},{"pid":1,"tid":27,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211620000,"dur":100},{"pid":1,"tid":27,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211620000,"dur":100},{"pid":1,"tid":27,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211620000,"dur":100},{"pid":1,"tid":27,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211620000,"dur":100},{"pid":1,"tid":27,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211620000,"dur":1000},{"pid":1,"tid":27,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211621000,"dur":100},{"pid":1,"tid":27,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211621000,"dur":100},{"pid":1,"tid":27,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211621000,"dur":22000},{"pid":1,"tid":27,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211643000,"dur":1000},{"pid":1,"tid":27,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211644000,"dur":1000},{"pid":1,"tid":27,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211646000,"dur":100},{"pid":1,"tid":27,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211646000,"dur":100},{"pid":1,"tid":27,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518534211619000,"dur":27000},{"pid":1,"tid":27,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211646000,"dur":2000},{"pid":1,"tid":27,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211648000,"dur":6000},{"pid":1,"tid":27,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211578000,"dur":77000},{"pid":1,"tid":27,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534211574000,"dur":81000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211668000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211668000,"dur":43000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211711000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211713000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211715000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211715000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211716000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211716000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211717000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211717000,"dur":35000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211752000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211754000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211757000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211758000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211762000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211762000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211776000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518534211783000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518534211783000,"dur":682000},{"pid":1,"tid":27,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518534212467000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-03-32-471.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-16-03-32-471.rawproto
new file mode 100644
index 00000000..63e329da
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-03-32-471.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-16-47-084.json b/IGetAndroid/build/android-profile/profile-2018-02-13-16-16-47-084.json
new file mode 100644
index 00000000..bea27530
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-16-47-084.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002184000,"args":{"JVM stats":"heap_memory_usage: 506807152\nnon_heap_memory_usage: 197260616\nloaded_class_count: 18413\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002313000,"args":{"JVM stats":"heap_memory_usage: 518003192\nnon_heap_memory_usage: 197381976\nloaded_class_count: 18419\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002422000,"args":{"JVM stats":"heap_memory_usage: 78926752\nnon_heap_memory_usage: 197427616\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 40\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002424000,"args":{"JVM stats":"heap_memory_usage: 79346832\nnon_heap_memory_usage: 197427616\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002427000,"args":{"JVM stats":"heap_memory_usage: 79630280\nnon_heap_memory_usage: 197427616\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002427001,"args":{"JVM stats":"heap_memory_usage: 79777376\nnon_heap_memory_usage: 197427616\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002428000,"args":{"JVM stats":"heap_memory_usage: 79777376\nnon_heap_memory_usage: 197427616\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002429000,"args":{"JVM stats":"heap_memory_usage: 79777376\nnon_heap_memory_usage: 197427616\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002430000,"args":{"JVM stats":"heap_memory_usage: 79777376\nnon_heap_memory_usage: 197427616\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002430001,"args":{"JVM stats":"heap_memory_usage: 79777376\nnon_heap_memory_usage: 197427616\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002486000,"args":{"JVM stats":"heap_memory_usage: 83465696\nnon_heap_memory_usage: 197436512\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002487000,"args":{"JVM stats":"heap_memory_usage: 83465696\nnon_heap_memory_usage: 197436512\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002489000,"args":{"JVM stats":"heap_memory_usage: 83749512\nnon_heap_memory_usage: 197442552\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002490000,"args":{"JVM stats":"heap_memory_usage: 83896616\nnon_heap_memory_usage: 197442552\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002495000,"args":{"JVM stats":"heap_memory_usage: 85063528\nnon_heap_memory_usage: 197449256\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002495001,"args":{"JVM stats":"heap_memory_usage: 85063528\nnon_heap_memory_usage: 197449256\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002506000,"args":{"JVM stats":"heap_memory_usage: 85347072\nnon_heap_memory_usage: 197452392\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002517000,"args":{"JVM stats":"heap_memory_usage: 85788472\nnon_heap_memory_usage: 197452392\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535002518000,"args":{"JVM stats":"heap_memory_usage: 85935544\nnon_heap_memory_usage: 197452392\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535003617000,"args":{"JVM stats":"heap_memory_usage: 88650168\nnon_heap_memory_usage: 197529680\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535003617001,"args":{"JVM stats":"heap_memory_usage: 88650168\nnon_heap_memory_usage: 197529680\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004086000,"args":{"JVM stats":"heap_memory_usage: 170026248\nnon_heap_memory_usage: 198540256\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004088000,"args":{"JVM stats":"heap_memory_usage: 170026248\nnon_heap_memory_usage: 198541856\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004089000,"args":{"JVM stats":"heap_memory_usage: 170173344\nnon_heap_memory_usage: 198543776\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004089001,"args":{"JVM stats":"heap_memory_usage: 170173344\nnon_heap_memory_usage: 198543776\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004091000,"args":{"JVM stats":"heap_memory_usage: 170320448\nnon_heap_memory_usage: 198543776\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004108000,"args":{"JVM stats":"heap_memory_usage: 171326872\nnon_heap_memory_usage: 198564400\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004110000,"args":{"JVM stats":"heap_memory_usage: 171473968\nnon_heap_memory_usage: 198566320\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004111000,"args":{"JVM stats":"heap_memory_usage: 171473968\nnon_heap_memory_usage: 198566704\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004253000,"args":{"JVM stats":"heap_memory_usage: 172204592\nnon_heap_memory_usage: 198569032\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004258000,"args":{"JVM stats":"heap_memory_usage: 172351664\nnon_heap_memory_usage: 198569736\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004258001,"args":{"JVM stats":"heap_memory_usage: 172351664\nnon_heap_memory_usage: 198569736\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004264000,"args":{"JVM stats":"heap_memory_usage: 172793496\nnon_heap_memory_usage: 198569736\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535004265000,"args":{"JVM stats":"heap_memory_usage: 172940584\nnon_heap_memory_usage: 198569736\nloaded_class_count: 18420\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535007074000,"args":{"JVM stats":"heap_memory_usage: 335269752\nnon_heap_memory_usage: 198799984\nloaded_class_count: 18421\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 16\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535007075000,"args":{"JVM stats":"heap_memory_usage: 335979608\nnon_heap_memory_usage: 198799984\nloaded_class_count: 18421\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535007085000,"args":{"JVM stats":"heap_memory_usage: 336250984\nnon_heap_memory_usage: 198824112\nloaded_class_count: 18421\nthread_count: 33\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":28,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002184000,"dur":3000},{"pid":1,"tid":28,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002187000,"dur":4000},{"pid":1,"tid":28,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002191000,"dur":1000},{"pid":1,"tid":28,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002191000,"dur":1000},{"pid":1,"tid":28,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002208000,"dur":2000},{"pid":1,"tid":28,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002210000,"dur":1000},{"pid":1,"tid":28,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002211000,"dur":4000},{"pid":1,"tid":28,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002215000,"dur":100},{"pid":1,"tid":28,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002215000,"dur":100},{"pid":1,"tid":28,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002215000,"dur":1000},{"pid":1,"tid":28,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002216000,"dur":100},{"pid":1,"tid":28,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002216000,"dur":100},{"pid":1,"tid":28,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002216000,"dur":3000},{"pid":1,"tid":28,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002219000,"dur":100},{"pid":1,"tid":28,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002219000,"dur":100},{"pid":1,"tid":28,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002219000,"dur":100},{"pid":1,"tid":28,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002219000,"dur":33000},{"pid":1,"tid":28,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002252000,"dur":1000},{"pid":1,"tid":28,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002253000,"dur":2000},{"pid":1,"tid":28,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002259000,"dur":1000},{"pid":1,"tid":28,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002260000,"dur":100},{"pid":1,"tid":28,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002211000,"dur":49000},{"pid":1,"tid":28,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002260000,"dur":2000},{"pid":1,"tid":28,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002263000,"dur":100},{"pid":1,"tid":28,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002263000,"dur":100},{"pid":1,"tid":28,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002263000,"dur":100},{"pid":1,"tid":28,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002263000,"dur":100},{"pid":1,"tid":28,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002263000,"dur":1000},{"pid":1,"tid":28,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002264000,"dur":100},{"pid":1,"tid":28,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002264000,"dur":100},{"pid":1,"tid":28,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002264000,"dur":1000},{"pid":1,"tid":28,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002265000,"dur":100},{"pid":1,"tid":28,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002265000,"dur":100},{"pid":1,"tid":28,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002265000,"dur":23000},{"pid":1,"tid":28,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002288000,"dur":1000},{"pid":1,"tid":28,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002289000,"dur":2000},{"pid":1,"tid":28,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002291000,"dur":1000},{"pid":1,"tid":28,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002292000,"dur":100},{"pid":1,"tid":28,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535002262000,"dur":30000},{"pid":1,"tid":28,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002292000,"dur":3000},{"pid":1,"tid":28,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002295000,"dur":5000},{"pid":1,"tid":28,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002207000,"dur":94000},{"pid":1,"tid":28,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535002193000,"dur":109000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002313000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002314000,"dur":108000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002422000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002425000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002427000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002427000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002428000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002429000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002430000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002431000,"dur":55000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002486000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002487000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002489000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002490000,"dur":5000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002495000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002495000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002507000,"dur":10000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535002518000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535002518000,"dur":1099000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535003617000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535003617000,"dur":469000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004087000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004088000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004089000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004090000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004091000,"dur":17000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004108000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004110000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004111000,"dur":142000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004253000,"dur":4000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535004258000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535004258000,"dur":6000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535004264000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: package application","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535004265000,"dur":2809000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535007074000,"dur":1000},{"pid":1,"tid":28,"id":80,"name":"base plugin build finished","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 41779\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535007075000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-16-47-084.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-16-16-47-084.rawproto
new file mode 100644
index 00000000..6496d91e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-16-47-084.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-28-985.json b/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-28-985.json
new file mode 100644
index 00000000..614b5faf
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-28-985.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105791000,"args":{"JVM stats":"heap_memory_usage: 350272888\nnon_heap_memory_usage: 198987048\nloaded_class_count: 18421\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105872000,"args":{"JVM stats":"heap_memory_usage: 363073544\nnon_heap_memory_usage: 199020672\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105903000,"args":{"JVM stats":"heap_memory_usage: 368364384\nnon_heap_memory_usage: 198988160\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105906000,"args":{"JVM stats":"heap_memory_usage: 368364384\nnon_heap_memory_usage: 198982016\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105908000,"args":{"JVM stats":"heap_memory_usage: 368642640\nnon_heap_memory_usage: 198982016\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105909000,"args":{"JVM stats":"heap_memory_usage: 368642640\nnon_heap_memory_usage: 198982016\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105910000,"args":{"JVM stats":"heap_memory_usage: 368642640\nnon_heap_memory_usage: 198982016\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105910001,"args":{"JVM stats":"heap_memory_usage: 368642640\nnon_heap_memory_usage: 198982016\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105911000,"args":{"JVM stats":"heap_memory_usage: 368642640\nnon_heap_memory_usage: 198982016\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105911001,"args":{"JVM stats":"heap_memory_usage: 368642640\nnon_heap_memory_usage: 198982016\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105942000,"args":{"JVM stats":"heap_memory_usage: 372539024\nnon_heap_memory_usage: 199011544\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105943000,"args":{"JVM stats":"heap_memory_usage: 372817240\nnon_heap_memory_usage: 199011544\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105944000,"args":{"JVM stats":"heap_memory_usage: 372817240\nnon_heap_memory_usage: 199011544\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105945000,"args":{"JVM stats":"heap_memory_usage: 372817240\nnon_heap_memory_usage: 199016920\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105949000,"args":{"JVM stats":"heap_memory_usage: 373934504\nnon_heap_memory_usage: 199022240\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105949001,"args":{"JVM stats":"heap_memory_usage: 373934504\nnon_heap_memory_usage: 199022240\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105962000,"args":{"JVM stats":"heap_memory_usage: 375047456\nnon_heap_memory_usage: 199022240\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105969000,"args":{"JVM stats":"heap_memory_usage: 375882960\nnon_heap_memory_usage: 199028640\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535105969001,"args":{"JVM stats":"heap_memory_usage: 375882960\nnon_heap_memory_usage: 199036320\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106058000,"args":{"JVM stats":"heap_memory_usage: 378392720\nnon_heap_memory_usage: 199066912\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106058001,"args":{"JVM stats":"heap_memory_usage: 378670960\nnon_heap_memory_usage: 199066912\nloaded_class_count: 18421\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106430000,"args":{"JVM stats":"heap_memory_usage: 459412512\nnon_heap_memory_usage: 200214352\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106432000,"args":{"JVM stats":"heap_memory_usage: 459412512\nnon_heap_memory_usage: 200223184\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106432001,"args":{"JVM stats":"heap_memory_usage: 459412512\nnon_heap_memory_usage: 200232552\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106433000,"args":{"JVM stats":"heap_memory_usage: 459412512\nnon_heap_memory_usage: 200233512\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106434000,"args":{"JVM stats":"heap_memory_usage: 459690760\nnon_heap_memory_usage: 200235744\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106452000,"args":{"JVM stats":"heap_memory_usage: 460526008\nnon_heap_memory_usage: 200262904\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106453000,"args":{"JVM stats":"heap_memory_usage: 460804224\nnon_heap_memory_usage: 200262904\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106454000,"args":{"JVM stats":"heap_memory_usage: 460804224\nnon_heap_memory_usage: 200262904\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106459000,"args":{"JVM stats":"heap_memory_usage: 461360768\nnon_heap_memory_usage: 200264248\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106461000,"args":{"JVM stats":"heap_memory_usage: 461360768\nnon_heap_memory_usage: 200264248\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106461001,"args":{"JVM stats":"heap_memory_usage: 461360768\nnon_heap_memory_usage: 200264248\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106468000,"args":{"JVM stats":"heap_memory_usage: 462195800\nnon_heap_memory_usage: 200269496\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535106468001,"args":{"JVM stats":"heap_memory_usage: 462195800\nnon_heap_memory_usage: 200269496\nloaded_class_count: 18425\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535108979000,"args":{"JVM stats":"heap_memory_usage: 182530944\nnon_heap_memory_usage: 200561752\nloaded_class_count: 18425\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 32\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535108979001,"args":{"JVM stats":"heap_memory_usage: 183643736\nnon_heap_memory_usage: 200561752\nloaded_class_count: 18425\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535108985000,"args":{"JVM stats":"heap_memory_usage: 183925328\nnon_heap_memory_usage: 200561752\nloaded_class_count: 18425\nthread_count: 33\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":29,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105791000,"dur":2000},{"pid":1,"tid":29,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105793000,"dur":2000},{"pid":1,"tid":29,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105795000,"dur":1000},{"pid":1,"tid":29,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105795000,"dur":1000},{"pid":1,"tid":29,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105804000,"dur":2000},{"pid":1,"tid":29,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105806000,"dur":1000},{"pid":1,"tid":29,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105807000,"dur":4000},{"pid":1,"tid":29,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105811000,"dur":100},{"pid":1,"tid":29,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105811000,"dur":100},{"pid":1,"tid":29,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105811000,"dur":100},{"pid":1,"tid":29,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105811000,"dur":1000},{"pid":1,"tid":29,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105812000,"dur":100},{"pid":1,"tid":29,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105812000,"dur":2000},{"pid":1,"tid":29,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105814000,"dur":100},{"pid":1,"tid":29,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105814000,"dur":100},{"pid":1,"tid":29,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105814000,"dur":100},{"pid":1,"tid":29,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105814000,"dur":17000},{"pid":1,"tid":29,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105831000,"dur":100},{"pid":1,"tid":29,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105831000,"dur":1000},{"pid":1,"tid":29,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105833000,"dur":1000},{"pid":1,"tid":29,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105834000,"dur":100},{"pid":1,"tid":29,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105807000,"dur":27000},{"pid":1,"tid":29,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105834000,"dur":2000},{"pid":1,"tid":29,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105836000,"dur":100},{"pid":1,"tid":29,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105836000,"dur":100},{"pid":1,"tid":29,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105836000,"dur":100},{"pid":1,"tid":29,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105836000,"dur":100},{"pid":1,"tid":29,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105836000,"dur":100},{"pid":1,"tid":29,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105836000,"dur":100},{"pid":1,"tid":29,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105836000,"dur":1000},{"pid":1,"tid":29,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105837000,"dur":100},{"pid":1,"tid":29,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105837000,"dur":100},{"pid":1,"tid":29,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105837000,"dur":100},{"pid":1,"tid":29,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105837000,"dur":16000},{"pid":1,"tid":29,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105853000,"dur":100},{"pid":1,"tid":29,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105853000,"dur":1000},{"pid":1,"tid":29,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105854000,"dur":1000},{"pid":1,"tid":29,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105855000,"dur":100},{"pid":1,"tid":29,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535105836000,"dur":19000},{"pid":1,"tid":29,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105855000,"dur":1000},{"pid":1,"tid":29,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105856000,"dur":3000},{"pid":1,"tid":29,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105804000,"dur":58000},{"pid":1,"tid":29,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535105800000,"dur":62000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105871000,"dur":1000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105872000,"dur":31000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105903000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105906000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105908000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105909000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105910000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105910000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105911000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105911000,"dur":31000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105942000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105943000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105944000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105945000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105949000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105950000,"dur":12000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105962000,"dur":7000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535105969000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535105969000,"dur":89000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535106058000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535106058000,"dur":372000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106431000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106432000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106432000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106433000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106434000,"dur":18000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106452000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106454000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106455000,"dur":4000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106459000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535106461000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535106461000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535106468000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: package application","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535106468000,"dur":2511000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535108979000,"dur":100},{"pid":1,"tid":29,"id":80,"name":"base plugin build finished","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 40208\n apk_size: 4246476\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535108980000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-28-985.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-28-985.rawproto
new file mode 100644
index 00000000..c364097d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-28-985.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-42-228.json b/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-42-228.json
new file mode 100644
index 00000000..76362415
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-42-228.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121537000,"args":{"JVM stats":"heap_memory_usage: 198106832\nnon_heap_memory_usage: 200588080\nloaded_class_count: 18425\nthread_count: 32\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121610000,"args":{"JVM stats":"heap_memory_usage: 209752608\nnon_heap_memory_usage: 200740080\nloaded_class_count: 18436\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121638000,"args":{"JVM stats":"heap_memory_usage: 215462920\nnon_heap_memory_usage: 200760432\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121641000,"args":{"JVM stats":"heap_memory_usage: 215819432\nnon_heap_memory_usage: 200760432\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121642000,"args":{"JVM stats":"heap_memory_usage: 215819432\nnon_heap_memory_usage: 200760432\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121643000,"args":{"JVM stats":"heap_memory_usage: 215819432\nnon_heap_memory_usage: 200760432\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121644000,"args":{"JVM stats":"heap_memory_usage: 216175976\nnon_heap_memory_usage: 200760432\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121644001,"args":{"JVM stats":"heap_memory_usage: 216175976\nnon_heap_memory_usage: 200760432\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121645000,"args":{"JVM stats":"heap_memory_usage: 216175976\nnon_heap_memory_usage: 200760432\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121645001,"args":{"JVM stats":"heap_memory_usage: 216175976\nnon_heap_memory_usage: 200760432\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121674000,"args":{"JVM stats":"heap_memory_usage: 219743856\nnon_heap_memory_usage: 200764144\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121675000,"args":{"JVM stats":"heap_memory_usage: 219743856\nnon_heap_memory_usage: 200764144\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121676000,"args":{"JVM stats":"heap_memory_usage: 220100400\nnon_heap_memory_usage: 200764144\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121677000,"args":{"JVM stats":"heap_memory_usage: 220100400\nnon_heap_memory_usage: 200764144\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121681000,"args":{"JVM stats":"heap_memory_usage: 221170088\nnon_heap_memory_usage: 200764144\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121681001,"args":{"JVM stats":"heap_memory_usage: 221170088\nnon_heap_memory_usage: 200764144\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121692000,"args":{"JVM stats":"heap_memory_usage: 222241400\nnon_heap_memory_usage: 200764144\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121697000,"args":{"JVM stats":"heap_memory_usage: 223311312\nnon_heap_memory_usage: 200764144\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121698000,"args":{"JVM stats":"heap_memory_usage: 223311312\nnon_heap_memory_usage: 200775600\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121780000,"args":{"JVM stats":"heap_memory_usage: 226519952\nnon_heap_memory_usage: 200781976\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535121781000,"args":{"JVM stats":"heap_memory_usage: 226519952\nnon_heap_memory_usage: 200781976\nloaded_class_count: 18436\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122159000,"args":{"JVM stats":"heap_memory_usage: 307421936\nnon_heap_memory_usage: 201416736\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122160000,"args":{"JVM stats":"heap_memory_usage: 307421936\nnon_heap_memory_usage: 201416736\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122161000,"args":{"JVM stats":"heap_memory_usage: 307778472\nnon_heap_memory_usage: 201424224\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122162000,"args":{"JVM stats":"heap_memory_usage: 307778472\nnon_heap_memory_usage: 201424224\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122163000,"args":{"JVM stats":"heap_memory_usage: 307778472\nnon_heap_memory_usage: 201424224\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122182000,"args":{"JVM stats":"heap_memory_usage: 308848240\nnon_heap_memory_usage: 201418176\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122184000,"args":{"JVM stats":"heap_memory_usage: 308848240\nnon_heap_memory_usage: 201418176\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122185000,"args":{"JVM stats":"heap_memory_usage: 308848240\nnon_heap_memory_usage: 201418176\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122190000,"args":{"JVM stats":"heap_memory_usage: 309561328\nnon_heap_memory_usage: 201418176\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122192000,"args":{"JVM stats":"heap_memory_usage: 309561328\nnon_heap_memory_usage: 201418176\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122192001,"args":{"JVM stats":"heap_memory_usage: 309561328\nnon_heap_memory_usage: 201418176\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122200000,"args":{"JVM stats":"heap_memory_usage: 310274512\nnon_heap_memory_usage: 201419008\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122200001,"args":{"JVM stats":"heap_memory_usage: 310274512\nnon_heap_memory_usage: 201419008\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122224000,"args":{"JVM stats":"heap_memory_usage: 310989144\nnon_heap_memory_usage: 201457744\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122224001,"args":{"JVM stats":"heap_memory_usage: 310989144\nnon_heap_memory_usage: 201457744\nloaded_class_count: 18437\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518535122228000,"args":{"JVM stats":"heap_memory_usage: 310989144\nnon_heap_memory_usage: 201462416\nloaded_class_count: 18437\nthread_count: 32\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":29,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121537000,"dur":2000},{"pid":1,"tid":29,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121539000,"dur":2000},{"pid":1,"tid":29,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121541000,"dur":1000},{"pid":1,"tid":29,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121541000,"dur":1000},{"pid":1,"tid":29,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121548000,"dur":2000},{"pid":1,"tid":29,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121550000,"dur":100},{"pid":1,"tid":29,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121551000,"dur":100},{"pid":1,"tid":29,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121551000,"dur":100},{"pid":1,"tid":29,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121551000,"dur":100},{"pid":1,"tid":29,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121551000,"dur":1000},{"pid":1,"tid":29,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121552000,"dur":100},{"pid":1,"tid":29,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121552000,"dur":100},{"pid":1,"tid":29,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121552000,"dur":1000},{"pid":1,"tid":29,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121553000,"dur":1000},{"pid":1,"tid":29,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121554000,"dur":100},{"pid":1,"tid":29,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121554000,"dur":100},{"pid":1,"tid":29,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121554000,"dur":17000},{"pid":1,"tid":29,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121571000,"dur":100},{"pid":1,"tid":29,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121571000,"dur":2000},{"pid":1,"tid":29,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121574000,"dur":100},{"pid":1,"tid":29,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121574000,"dur":100},{"pid":1,"tid":29,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121550000,"dur":24000},{"pid":1,"tid":29,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121574000,"dur":2000},{"pid":1,"tid":29,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121577000,"dur":100},{"pid":1,"tid":29,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121577000,"dur":100},{"pid":1,"tid":29,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121577000,"dur":100},{"pid":1,"tid":29,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121577000,"dur":100},{"pid":1,"tid":29,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121577000,"dur":100},{"pid":1,"tid":29,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121577000,"dur":100},{"pid":1,"tid":29,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121577000,"dur":1000},{"pid":1,"tid":29,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121578000,"dur":100},{"pid":1,"tid":29,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121578000,"dur":100},{"pid":1,"tid":29,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121578000,"dur":100},{"pid":1,"tid":29,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121578000,"dur":16000},{"pid":1,"tid":29,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121594000,"dur":100},{"pid":1,"tid":29,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121594000,"dur":2000},{"pid":1,"tid":29,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121596000,"dur":1000},{"pid":1,"tid":29,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121597000,"dur":100},{"pid":1,"tid":29,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518535121576000,"dur":21000},{"pid":1,"tid":29,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121597000,"dur":1000},{"pid":1,"tid":29,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121598000,"dur":3000},{"pid":1,"tid":29,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121548000,"dur":54000},{"pid":1,"tid":29,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535121543000,"dur":59000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121609000,"dur":1000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121610000,"dur":28000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121639000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121641000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121643000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121643000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121644000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121644000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121645000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121645000,"dur":29000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121674000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121675000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121677000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121677000,"dur":3000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121681000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121681000,"dur":11000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121692000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535121697000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535121698000,"dur":82000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535121780000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535121781000,"dur":378000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122159000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122161000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122161000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122162000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122163000,"dur":19000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122182000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122184000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122185000,"dur":5000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122190000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535122192000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122193000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535122200000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: package application","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518535122200000,"dur":24000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518535122224000,"dur":100},{"pid":1,"tid":29,"id":80,"name":"base plugin build finished","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518535122224000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-42-228.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-42-228.rawproto
new file mode 100644
index 00000000..1959173b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-18-42-228.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-34-37-493.json b/IGetAndroid/build/android-profile/profile-2018-02-13-16-34-37-493.json
new file mode 100644
index 00000000..03010fd6
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-34-37-493.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518536073786000,"args":{"JVM stats":"heap_memory_usage: 339981280\nnon_heap_memory_usage: 201736280\nloaded_class_count: 18454\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536073951000,"args":{"JVM stats":"heap_memory_usage: 353249576\nnon_heap_memory_usage: 202003608\nloaded_class_count: 18470\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074006000,"args":{"JVM stats":"heap_memory_usage: 358960560\nnon_heap_memory_usage: 202022416\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074010000,"args":{"JVM stats":"heap_memory_usage: 359317408\nnon_heap_memory_usage: 202022416\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074013000,"args":{"JVM stats":"heap_memory_usage: 359317408\nnon_heap_memory_usage: 202022416\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074014000,"args":{"JVM stats":"heap_memory_usage: 359317408\nnon_heap_memory_usage: 202022416\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074023000,"args":{"JVM stats":"heap_memory_usage: 359673976\nnon_heap_memory_usage: 202040528\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074024000,"args":{"JVM stats":"heap_memory_usage: 359673976\nnon_heap_memory_usage: 202040528\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074025000,"args":{"JVM stats":"heap_memory_usage: 359673976\nnon_heap_memory_usage: 202040528\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074025001,"args":{"JVM stats":"heap_memory_usage: 359673976\nnon_heap_memory_usage: 202040528\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074075000,"args":{"JVM stats":"heap_memory_usage: 363240048\nnon_heap_memory_usage: 202075472\nloaded_class_count: 18471\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074080000,"args":{"JVM stats":"heap_memory_usage: 363985880\nnon_heap_memory_usage: 202075472\nloaded_class_count: 18471\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074107000,"args":{"JVM stats":"heap_memory_usage: 368978520\nnon_heap_memory_usage: 202167736\nloaded_class_count: 18471\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536074109000,"args":{"JVM stats":"heap_memory_usage: 368978520\nnon_heap_memory_usage: 202194616\nloaded_class_count: 18471\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536075064000,"args":{"JVM stats":"heap_memory_usage: 391009376\nnon_heap_memory_usage: 202286728\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536075064001,"args":{"JVM stats":"heap_memory_usage: 391009376\nnon_heap_memory_usage: 202286728\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536075078000,"args":{"JVM stats":"heap_memory_usage: 392176952\nnon_heap_memory_usage: 202287624\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536075456000,"args":{"JVM stats":"heap_memory_usage: 433611088\nnon_heap_memory_usage: 202778368\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536075457000,"args":{"JVM stats":"heap_memory_usage: 433611088\nnon_heap_memory_usage: 202782080\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536075551000,"args":{"JVM stats":"heap_memory_usage: 436819832\nnon_heap_memory_usage: 202836096\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536075552000,"args":{"JVM stats":"heap_memory_usage: 436819832\nnon_heap_memory_usage: 202836096\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076056000,"args":{"JVM stats":"heap_memory_usage: 98718424\nnon_heap_memory_usage: 204558088\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 22\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076057000,"args":{"JVM stats":"heap_memory_usage: 100209752\nnon_heap_memory_usage: 204565192\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076058000,"args":{"JVM stats":"heap_memory_usage: 100388008\nnon_heap_memory_usage: 204565192\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076059000,"args":{"JVM stats":"heap_memory_usage: 101823288\nnon_heap_memory_usage: 204565192\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076060000,"args":{"JVM stats":"heap_memory_usage: 103310352\nnon_heap_memory_usage: 204565192\nloaded_class_count: 18471\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076212000,"args":{"JVM stats":"heap_memory_usage: 124079224\nnon_heap_memory_usage: 205663664\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076375000,"args":{"JVM stats":"heap_memory_usage: 182900104\nnon_heap_memory_usage: 205965536\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076377000,"args":{"JVM stats":"heap_memory_usage: 182900104\nnon_heap_memory_usage: 205965536\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076383000,"args":{"JVM stats":"heap_memory_usage: 182900104\nnon_heap_memory_usage: 205998496\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076388000,"args":{"JVM stats":"heap_memory_usage: 182900104\nnon_heap_memory_usage: 205999264\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076390000,"args":{"JVM stats":"heap_memory_usage: 182900104\nnon_heap_memory_usage: 205999264\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076398000,"args":{"JVM stats":"heap_memory_usage: 182900104\nnon_heap_memory_usage: 205999264\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536076399000,"args":{"JVM stats":"heap_memory_usage: 182900104\nnon_heap_memory_usage: 205999264\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536077485000,"args":{"JVM stats":"heap_memory_usage: 303802408\nnon_heap_memory_usage: 206130808\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 30\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536077485001,"args":{"JVM stats":"heap_memory_usage: 304777904\nnon_heap_memory_usage: 206130808\nloaded_class_count: 18472\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536077494000,"args":{"JVM stats":"heap_memory_usage: 305264816\nnon_heap_memory_usage: 206130808\nloaded_class_count: 18472\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":30,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073786000,"dur":3000},{"pid":1,"tid":30,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073789000,"dur":5000},{"pid":1,"tid":30,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073794000,"dur":1000},{"pid":1,"tid":30,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073794000,"dur":1000},{"pid":1,"tid":30,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073832000,"dur":4000},{"pid":1,"tid":30,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073836000,"dur":100},{"pid":1,"tid":30,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073838000,"dur":1000},{"pid":1,"tid":30,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073839000,"dur":100},{"pid":1,"tid":30,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073839000,"dur":100},{"pid":1,"tid":30,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073839000,"dur":100},{"pid":1,"tid":30,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073839000,"dur":1000},{"pid":1,"tid":30,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073840000,"dur":100},{"pid":1,"tid":30,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073840000,"dur":2000},{"pid":1,"tid":30,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073842000,"dur":100},{"pid":1,"tid":30,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073842000,"dur":1000},{"pid":1,"tid":30,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073843000,"dur":100},{"pid":1,"tid":30,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073843000,"dur":33000},{"pid":1,"tid":30,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073876000,"dur":2000},{"pid":1,"tid":30,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073878000,"dur":4000},{"pid":1,"tid":30,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073886000,"dur":1000},{"pid":1,"tid":30,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073888000,"dur":100},{"pid":1,"tid":30,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073836000,"dur":52000},{"pid":1,"tid":30,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073888000,"dur":2000},{"pid":1,"tid":30,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073891000,"dur":100},{"pid":1,"tid":30,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073891000,"dur":100},{"pid":1,"tid":30,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073891000,"dur":100},{"pid":1,"tid":30,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073891000,"dur":100},{"pid":1,"tid":30,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073891000,"dur":100},{"pid":1,"tid":30,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073891000,"dur":100},{"pid":1,"tid":30,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073891000,"dur":1000},{"pid":1,"tid":30,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073892000,"dur":100},{"pid":1,"tid":30,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073892000,"dur":100},{"pid":1,"tid":30,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073892000,"dur":100},{"pid":1,"tid":30,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073892000,"dur":27000},{"pid":1,"tid":30,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073919000,"dur":100},{"pid":1,"tid":30,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073919000,"dur":2000},{"pid":1,"tid":30,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073922000,"dur":1000},{"pid":1,"tid":30,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073923000,"dur":100},{"pid":1,"tid":30,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536073890000,"dur":33000},{"pid":1,"tid":30,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073923000,"dur":2000},{"pid":1,"tid":30,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073925000,"dur":6000},{"pid":1,"tid":30,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073832000,"dur":107000},{"pid":1,"tid":30,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536073820000,"dur":119000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536073950000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536073952000,"dur":54000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536074007000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536074010000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536074014000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536074015000,"dur":8000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536074024000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536074025000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536074025000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536074026000,"dur":49000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536074075000,"dur":5000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536074081000,"dur":26000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536074108000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536074110000,"dur":954000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536075064000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536075065000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536075078000,"dur":378000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536075456000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536075457000,"dur":94000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536075552000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536075552000,"dur":504000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536076057000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536076058000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536076058000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536076059000,"dur":1000},{"pid":1,"tid":31,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518536076076000,"dur":1000},{"pid":1,"tid":31,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518536076077000,"dur":132000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536076060000,"dur":152000},{"pid":1,"tid":31,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518536076215000,"dur":100},{"pid":1,"tid":31,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518536076215000,"dur":143000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536076212000,"dur":163000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536076375000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536076378000,"dur":5000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536076383000,"dur":5000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536076389000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536076391000,"dur":7000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536076398000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536076399000,"dur":1086000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536077485000,"dur":100},{"pid":1,"tid":30,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536077485000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-34-37-493.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-16-34-37-493.rawproto
new file mode 100644
index 00000000..4628b089
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-34-37-493.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-35-28-484.json b/IGetAndroid/build/android-profile/profile-2018-02-13-16-35-28-484.json
new file mode 100644
index 00000000..ddb48be4
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-35-28-484.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125536000,"args":{"JVM stats":"heap_memory_usage: 326672448\nnon_heap_memory_usage: 206412896\nloaded_class_count: 18489\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125646000,"args":{"JVM stats":"heap_memory_usage: 339947880\nnon_heap_memory_usage: 206628344\nloaded_class_count: 18509\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125686000,"args":{"JVM stats":"heap_memory_usage: 345353200\nnon_heap_memory_usage: 206723720\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125689000,"args":{"JVM stats":"heap_memory_usage: 345637064\nnon_heap_memory_usage: 206726024\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125692000,"args":{"JVM stats":"heap_memory_usage: 345920920\nnon_heap_memory_usage: 206726728\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125692001,"args":{"JVM stats":"heap_memory_usage: 345920920\nnon_heap_memory_usage: 206726728\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125698000,"args":{"JVM stats":"heap_memory_usage: 346204752\nnon_heap_memory_usage: 206732040\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125699000,"args":{"JVM stats":"heap_memory_usage: 346488584\nnon_heap_memory_usage: 206732768\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125699001,"args":{"JVM stats":"heap_memory_usage: 346488584\nnon_heap_memory_usage: 206736416\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125699000,"args":{"JVM stats":"heap_memory_usage: 346488584\nnon_heap_memory_usage: 206736416\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125739000,"args":{"JVM stats":"heap_memory_usage: 349895568\nnon_heap_memory_usage: 206736416\nloaded_class_count: 18509\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125742000,"args":{"JVM stats":"heap_memory_usage: 350496128\nnon_heap_memory_usage: 206736416\nloaded_class_count: 18509\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125768000,"args":{"JVM stats":"heap_memory_usage: 355048840\nnon_heap_memory_usage: 206766880\nloaded_class_count: 18509\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536125769000,"args":{"JVM stats":"heap_memory_usage: 355048840\nnon_heap_memory_usage: 206766880\nloaded_class_count: 18509\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536126269000,"args":{"JVM stats":"heap_memory_usage: 374187408\nnon_heap_memory_usage: 206893864\nloaded_class_count: 18509\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536126269001,"args":{"JVM stats":"heap_memory_usage: 374187408\nnon_heap_memory_usage: 206893864\nloaded_class_count: 18509\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536126282000,"args":{"JVM stats":"heap_memory_usage: 375896696\nnon_heap_memory_usage: 206916456\nloaded_class_count: 18509\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536126685000,"args":{"JVM stats":"heap_memory_usage: 417162736\nnon_heap_memory_usage: 207638896\nloaded_class_count: 18509\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536126686000,"args":{"JVM stats":"heap_memory_usage: 417446736\nnon_heap_memory_usage: 207638896\nloaded_class_count: 18509\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536126817000,"args":{"JVM stats":"heap_memory_usage: 419717872\nnon_heap_memory_usage: 207587112\nloaded_class_count: 18509\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536126818000,"args":{"JVM stats":"heap_memory_usage: 419717872\nnon_heap_memory_usage: 207587112\nloaded_class_count: 18509\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127244000,"args":{"JVM stats":"heap_memory_usage: 94829704\nnon_heap_memory_usage: 208754680\nloaded_class_count: 18555\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 24\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127246000,"args":{"JVM stats":"heap_memory_usage: 96642376\nnon_heap_memory_usage: 208764992\nloaded_class_count: 18555\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127247000,"args":{"JVM stats":"heap_memory_usage: 96642376\nnon_heap_memory_usage: 208764992\nloaded_class_count: 18555\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127247001,"args":{"JVM stats":"heap_memory_usage: 96642376\nnon_heap_memory_usage: 208771968\nloaded_class_count: 18555\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127249000,"args":{"JVM stats":"heap_memory_usage: 97843408\nnon_heap_memory_usage: 208784976\nloaded_class_count: 18555\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127371000,"args":{"JVM stats":"heap_memory_usage: 120409096\nnon_heap_memory_usage: 209719600\nloaded_class_count: 18556\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127479000,"args":{"JVM stats":"heap_memory_usage: 176014256\nnon_heap_memory_usage: 209777576\nloaded_class_count: 18557\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127481000,"args":{"JVM stats":"heap_memory_usage: 176014256\nnon_heap_memory_usage: 209777576\nloaded_class_count: 18557\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127485000,"args":{"JVM stats":"heap_memory_usage: 176861768\nnon_heap_memory_usage: 209791592\nloaded_class_count: 18557\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127486000,"args":{"JVM stats":"heap_memory_usage: 176861768\nnon_heap_memory_usage: 209781672\nloaded_class_count: 18557\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127487000,"args":{"JVM stats":"heap_memory_usage: 176861768\nnon_heap_memory_usage: 209781672\nloaded_class_count: 18557\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127492000,"args":{"JVM stats":"heap_memory_usage: 176861768\nnon_heap_memory_usage: 209781672\nloaded_class_count: 18557\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536127493000,"args":{"JVM stats":"heap_memory_usage: 176861768\nnon_heap_memory_usage: 209788472\nloaded_class_count: 18559\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536128473000,"args":{"JVM stats":"heap_memory_usage: 296267648\nnon_heap_memory_usage: 209710984\nloaded_class_count: 18559\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 59\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536128473001,"args":{"JVM stats":"heap_memory_usage: 297471632\nnon_heap_memory_usage: 209710984\nloaded_class_count: 18559\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518536128484000,"args":{"JVM stats":"heap_memory_usage: 297868152\nnon_heap_memory_usage: 209633976\nloaded_class_count: 18559\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":30,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125536000,"dur":3000},{"pid":1,"tid":30,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125539000,"dur":3000},{"pid":1,"tid":30,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125542000,"dur":1000},{"pid":1,"tid":30,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125542000,"dur":1000},{"pid":1,"tid":30,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125568000,"dur":3000},{"pid":1,"tid":30,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125571000,"dur":1000},{"pid":1,"tid":30,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125572000,"dur":1000},{"pid":1,"tid":30,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125573000,"dur":100},{"pid":1,"tid":30,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125573000,"dur":100},{"pid":1,"tid":30,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125573000,"dur":100},{"pid":1,"tid":30,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125573000,"dur":100},{"pid":1,"tid":30,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125574000,"dur":100},{"pid":1,"tid":30,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125574000,"dur":2000},{"pid":1,"tid":30,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125576000,"dur":100},{"pid":1,"tid":30,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125576000,"dur":1000},{"pid":1,"tid":30,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125577000,"dur":100},{"pid":1,"tid":30,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125577000,"dur":20000},{"pid":1,"tid":30,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125597000,"dur":1000},{"pid":1,"tid":30,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125598000,"dur":2000},{"pid":1,"tid":30,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125601000,"dur":100},{"pid":1,"tid":30,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125601000,"dur":100},{"pid":1,"tid":30,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125572000,"dur":29000},{"pid":1,"tid":30,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125601000,"dur":2000},{"pid":1,"tid":30,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125604000,"dur":100},{"pid":1,"tid":30,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125604000,"dur":100},{"pid":1,"tid":30,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125604000,"dur":100},{"pid":1,"tid":30,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125604000,"dur":100},{"pid":1,"tid":30,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125604000,"dur":100},{"pid":1,"tid":30,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125604000,"dur":100},{"pid":1,"tid":30,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125604000,"dur":1000},{"pid":1,"tid":30,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125605000,"dur":100},{"pid":1,"tid":30,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125605000,"dur":100},{"pid":1,"tid":30,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125605000,"dur":100},{"pid":1,"tid":30,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125605000,"dur":18000},{"pid":1,"tid":30,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125623000,"dur":100},{"pid":1,"tid":30,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125623000,"dur":1000},{"pid":1,"tid":30,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125624000,"dur":1000},{"pid":1,"tid":30,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125625000,"dur":100},{"pid":1,"tid":30,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518536125603000,"dur":22000},{"pid":1,"tid":30,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125625000,"dur":2000},{"pid":1,"tid":30,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125627000,"dur":4000},{"pid":1,"tid":30,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125567000,"dur":68000},{"pid":1,"tid":30,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536125562000,"dur":74000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125646000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125646000,"dur":40000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125686000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125689000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125692000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536125692000,"dur":6000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125698000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125699000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125699000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125700000,"dur":39000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536125739000,"dur":3000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536125743000,"dur":25000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536125769000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536125770000,"dur":499000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536126269000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536126270000,"dur":12000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536126282000,"dur":403000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536126685000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536126686000,"dur":131000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536126817000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536126818000,"dur":426000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536127245000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536127247000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536127247000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536127248000,"dur":1000},{"pid":1,"tid":32,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518536127266000,"dur":1000},{"pid":1,"tid":32,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1518536127267000,"dur":102000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536127249000,"dur":122000},{"pid":1,"tid":32,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518536127373000,"dur":100},{"pid":1,"tid":32,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1518536127373000,"dur":96000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536127371000,"dur":108000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536127480000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536127481000,"dur":3000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536127485000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536127486000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518536127487000,"dur":5000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536127492000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536127493000,"dur":980000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518536128473000,"dur":100},{"pid":1,"tid":30,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518536128474000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-16-35-28-484.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-16-35-28-484.rawproto
new file mode 100644
index 00000000..f75f08db
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-16-35-28-484.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-17-02-21-978.json b/IGetAndroid/build/android-profile/profile-2018-02-13-17-02-21-978.json
new file mode 100644
index 00000000..6768812e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-17-02-21-978.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737295000,"args":{"JVM stats":"heap_memory_usage: 124168912\nnon_heap_memory_usage: 211934912\nloaded_class_count: 18611\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737402000,"args":{"JVM stats":"heap_memory_usage: 136018128\nnon_heap_memory_usage: 211769800\nloaded_class_count: 18612\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737464000,"args":{"JVM stats":"heap_memory_usage: 141572408\nnon_heap_memory_usage: 211564952\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737466000,"args":{"JVM stats":"heap_memory_usage: 141942344\nnon_heap_memory_usage: 211564952\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737469000,"args":{"JVM stats":"heap_memory_usage: 142312432\nnon_heap_memory_usage: 211564952\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737469001,"args":{"JVM stats":"heap_memory_usage: 142312432\nnon_heap_memory_usage: 211564952\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737470000,"args":{"JVM stats":"heap_memory_usage: 142312432\nnon_heap_memory_usage: 211564952\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737471000,"args":{"JVM stats":"heap_memory_usage: 142312432\nnon_heap_memory_usage: 211565584\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737471001,"args":{"JVM stats":"heap_memory_usage: 142312432\nnon_heap_memory_usage: 211565584\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737471000,"args":{"JVM stats":"heap_memory_usage: 142312432\nnon_heap_memory_usage: 211569168\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737528000,"args":{"JVM stats":"heap_memory_usage: 146010440\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737529000,"args":{"JVM stats":"heap_memory_usage: 146010440\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737532000,"args":{"JVM stats":"heap_memory_usage: 146380480\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737532001,"args":{"JVM stats":"heap_memory_usage: 146380480\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737542000,"args":{"JVM stats":"heap_memory_usage: 147490016\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737542001,"args":{"JVM stats":"heap_memory_usage: 147490016\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737561000,"args":{"JVM stats":"heap_memory_usage: 147863864\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737573000,"args":{"JVM stats":"heap_memory_usage: 148603400\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537737575000,"args":{"JVM stats":"heap_memory_usage: 148603400\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537741971000,"args":{"JVM stats":"heap_memory_usage: 151935784\nnon_heap_memory_usage: 211366416\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518537741978000,"args":{"JVM stats":"heap_memory_usage: 152305872\nnon_heap_memory_usage: 211370184\nloaded_class_count: 18612\nthread_count: 32\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":35,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737295000,"dur":2000},{"pid":1,"tid":35,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737297000,"dur":2000},{"pid":1,"tid":35,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737299000,"dur":1000},{"pid":1,"tid":35,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737299000,"dur":1000},{"pid":1,"tid":35,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737313000,"dur":3000},{"pid":1,"tid":35,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737316000,"dur":100},{"pid":1,"tid":35,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737316000,"dur":4000},{"pid":1,"tid":35,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737320000,"dur":100},{"pid":1,"tid":35,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737320000,"dur":100},{"pid":1,"tid":35,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737320000,"dur":1000},{"pid":1,"tid":35,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737321000,"dur":100},{"pid":1,"tid":35,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737321000,"dur":100},{"pid":1,"tid":35,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737321000,"dur":2000},{"pid":1,"tid":35,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737323000,"dur":100},{"pid":1,"tid":35,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737323000,"dur":100},{"pid":1,"tid":35,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737323000,"dur":100},{"pid":1,"tid":35,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737323000,"dur":32000},{"pid":1,"tid":35,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737355000,"dur":100},{"pid":1,"tid":35,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737356000,"dur":1000},{"pid":1,"tid":35,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737360000,"dur":1000},{"pid":1,"tid":35,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737361000,"dur":100},{"pid":1,"tid":35,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737316000,"dur":45000},{"pid":1,"tid":35,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737361000,"dur":1000},{"pid":1,"tid":35,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737363000,"dur":100},{"pid":1,"tid":35,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737363000,"dur":100},{"pid":1,"tid":35,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737363000,"dur":100},{"pid":1,"tid":35,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737363000,"dur":100},{"pid":1,"tid":35,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737363000,"dur":100},{"pid":1,"tid":35,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737363000,"dur":100},{"pid":1,"tid":35,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737363000,"dur":1000},{"pid":1,"tid":35,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737364000,"dur":100},{"pid":1,"tid":35,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737364000,"dur":100},{"pid":1,"tid":35,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737364000,"dur":100},{"pid":1,"tid":35,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737364000,"dur":19000},{"pid":1,"tid":35,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737383000,"dur":100},{"pid":1,"tid":35,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737384000,"dur":100},{"pid":1,"tid":35,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737385000,"dur":100},{"pid":1,"tid":35,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737385000,"dur":100},{"pid":1,"tid":35,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518537737362000,"dur":23000},{"pid":1,"tid":35,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737385000,"dur":1000},{"pid":1,"tid":35,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737387000,"dur":4000},{"pid":1,"tid":35,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737313000,"dur":79000},{"pid":1,"tid":35,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537737302000,"dur":90000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737402000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737403000,"dur":61000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737464000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737467000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737469000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737469000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737470000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737471000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737471000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737472000,"dur":56000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737529000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737530000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737532000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737533000,"dur":9000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737542000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737542000,"dur":19000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737562000,"dur":11000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518537737574000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518537737575000,"dur":4396000},{"pid":1,"tid":35,"id":64,"name":"base plugin build finished","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518537741973000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-17-02-21-978.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-17-02-21-978.rawproto
new file mode 100644
index 00000000..fb06733a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-17-02-21-978.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-17-08-07-202.json b/IGetAndroid/build/android-profile/profile-2018-02-13-17-08-07-202.json
new file mode 100644
index 00000000..8df2660d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-17-08-07-202.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082829000,"args":{"JVM stats":"heap_memory_usage: 167921640\nnon_heap_memory_usage: 210988536\nloaded_class_count: 18612\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082914000,"args":{"JVM stats":"heap_memory_usage: 179754752\nnon_heap_memory_usage: 210982112\nloaded_class_count: 18612\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082949000,"args":{"JVM stats":"heap_memory_usage: 185681608\nnon_heap_memory_usage: 210986592\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082952000,"args":{"JVM stats":"heap_memory_usage: 186051384\nnon_heap_memory_usage: 210986592\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082954000,"args":{"JVM stats":"heap_memory_usage: 186051384\nnon_heap_memory_usage: 210987488\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082955000,"args":{"JVM stats":"heap_memory_usage: 186051384\nnon_heap_memory_usage: 210987488\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082955001,"args":{"JVM stats":"heap_memory_usage: 186051384\nnon_heap_memory_usage: 210987488\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082956000,"args":{"JVM stats":"heap_memory_usage: 186051384\nnon_heap_memory_usage: 210987488\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082956001,"args":{"JVM stats":"heap_memory_usage: 186051384\nnon_heap_memory_usage: 210987488\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082957000,"args":{"JVM stats":"heap_memory_usage: 186051384\nnon_heap_memory_usage: 210987488\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082987000,"args":{"JVM stats":"heap_memory_usage: 190122848\nnon_heap_memory_usage: 211034592\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082988000,"args":{"JVM stats":"heap_memory_usage: 190122848\nnon_heap_memory_usage: 211034592\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082990000,"args":{"JVM stats":"heap_memory_usage: 190492608\nnon_heap_memory_usage: 211034592\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082991000,"args":{"JVM stats":"heap_memory_usage: 190492608\nnon_heap_memory_usage: 211034592\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082997000,"args":{"JVM stats":"heap_memory_usage: 191602224\nnon_heap_memory_usage: 211034592\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538082997001,"args":{"JVM stats":"heap_memory_usage: 191602224\nnon_heap_memory_usage: 211034592\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538083010000,"args":{"JVM stats":"heap_memory_usage: 191602224\nnon_heap_memory_usage: 211043360\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538083016000,"args":{"JVM stats":"heap_memory_usage: 192341760\nnon_heap_memory_usage: 211043360\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538083016001,"args":{"JVM stats":"heap_memory_usage: 192341760\nnon_heap_memory_usage: 211043360\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538086632000,"args":{"JVM stats":"heap_memory_usage: 195720432\nnon_heap_memory_usage: 211099992\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538086632001,"args":{"JVM stats":"heap_memory_usage: 195720432\nnon_heap_memory_usage: 211099992\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087094000,"args":{"JVM stats":"heap_memory_usage: 277507392\nnon_heap_memory_usage: 211902272\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087095000,"args":{"JVM stats":"heap_memory_usage: 277507392\nnon_heap_memory_usage: 211904856\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087096000,"args":{"JVM stats":"heap_memory_usage: 277507392\nnon_heap_memory_usage: 211904856\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087096001,"args":{"JVM stats":"heap_memory_usage: 277507392\nnon_heap_memory_usage: 211904856\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087097000,"args":{"JVM stats":"heap_memory_usage: 277507392\nnon_heap_memory_usage: 211904856\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087113000,"args":{"JVM stats":"heap_memory_usage: 278620776\nnon_heap_memory_usage: 211905688\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087115000,"args":{"JVM stats":"heap_memory_usage: 278620776\nnon_heap_memory_usage: 211905688\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087116000,"args":{"JVM stats":"heap_memory_usage: 278990848\nnon_heap_memory_usage: 211907992\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087178000,"args":{"JVM stats":"heap_memory_usage: 279730424\nnon_heap_memory_usage: 211907992\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087183000,"args":{"JVM stats":"heap_memory_usage: 279730424\nnon_heap_memory_usage: 211907992\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087184000,"args":{"JVM stats":"heap_memory_usage: 279730424\nnon_heap_memory_usage: 211907992\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087190000,"args":{"JVM stats":"heap_memory_usage: 280469968\nnon_heap_memory_usage: 211907992\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087191000,"args":{"JVM stats":"heap_memory_usage: 280469968\nnon_heap_memory_usage: 211907992\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087197000,"args":{"JVM stats":"heap_memory_usage: 280839752\nnon_heap_memory_usage: 211914104\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087197001,"args":{"JVM stats":"heap_memory_usage: 280839752\nnon_heap_memory_usage: 211914104\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518538087202000,"args":{"JVM stats":"heap_memory_usage: 280839752\nnon_heap_memory_usage: 211914104\nloaded_class_count: 18612\nthread_count: 32\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":36,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082829000,"dur":2000},{"pid":1,"tid":36,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082831000,"dur":2000},{"pid":1,"tid":36,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082833000,"dur":1000},{"pid":1,"tid":36,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082833000,"dur":1000},{"pid":1,"tid":36,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082840000,"dur":2000},{"pid":1,"tid":36,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082842000,"dur":1000},{"pid":1,"tid":36,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082843000,"dur":4000},{"pid":1,"tid":36,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082847000,"dur":100},{"pid":1,"tid":36,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082847000,"dur":100},{"pid":1,"tid":36,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082847000,"dur":1000},{"pid":1,"tid":36,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082848000,"dur":100},{"pid":1,"tid":36,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082848000,"dur":100},{"pid":1,"tid":36,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082848000,"dur":2000},{"pid":1,"tid":36,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082850000,"dur":100},{"pid":1,"tid":36,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082850000,"dur":1000},{"pid":1,"tid":36,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082851000,"dur":100},{"pid":1,"tid":36,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082851000,"dur":20000},{"pid":1,"tid":36,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082871000,"dur":1000},{"pid":1,"tid":36,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082872000,"dur":2000},{"pid":1,"tid":36,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082876000,"dur":1000},{"pid":1,"tid":36,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082877000,"dur":1000},{"pid":1,"tid":36,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082843000,"dur":35000},{"pid":1,"tid":36,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082878000,"dur":2000},{"pid":1,"tid":36,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082880000,"dur":100},{"pid":1,"tid":36,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082880000,"dur":100},{"pid":1,"tid":36,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082880000,"dur":100},{"pid":1,"tid":36,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082880000,"dur":100},{"pid":1,"tid":36,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082880000,"dur":1000},{"pid":1,"tid":36,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082881000,"dur":100},{"pid":1,"tid":36,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082881000,"dur":100},{"pid":1,"tid":36,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082881000,"dur":100},{"pid":1,"tid":36,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082881000,"dur":100},{"pid":1,"tid":36,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082882000,"dur":100},{"pid":1,"tid":36,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082882000,"dur":18000},{"pid":1,"tid":36,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082900000,"dur":100},{"pid":1,"tid":36,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082900000,"dur":1000},{"pid":1,"tid":36,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082901000,"dur":1000},{"pid":1,"tid":36,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082902000,"dur":100},{"pid":1,"tid":36,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518538082880000,"dur":22000},{"pid":1,"tid":36,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082902000,"dur":1000},{"pid":1,"tid":36,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082903000,"dur":3000},{"pid":1,"tid":36,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082840000,"dur":67000},{"pid":1,"tid":36,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538082835000,"dur":72000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082914000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082914000,"dur":35000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082950000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082953000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082954000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082955000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082955000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082956000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082957000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082957000,"dur":30000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082987000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082988000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082991000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082992000,"dur":5000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082997000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538082997000,"dur":13000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538083011000,"dur":5000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538083016000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518538083016000,"dur":3616000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518538086632000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518538086632000,"dur":462000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087094000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087095000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087096000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087096000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087098000,"dur":15000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087113000,"dur":2000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087116000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087117000,"dur":61000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087179000,"dur":4000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518538087183000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087184000,"dur":6000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518538087190000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: package application","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518538087191000,"dur":6000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518538087197000,"dur":100},{"pid":1,"tid":36,"id":80,"name":"base plugin build finished","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518538087198000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-17-08-07-202.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-17-08-07-202.rawproto
new file mode 100644
index 00000000..d6845928
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-17-08-07-202.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-17-33-55-036.json b/IGetAndroid/build/android-profile/profile-2018-02-13-17-33-55-036.json
new file mode 100644
index 00000000..621ecb44
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-17-33-55-036.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624020000,"args":{"JVM stats":"heap_memory_usage: 307063800\nnon_heap_memory_usage: 212036960\nloaded_class_count: 18612\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624124000,"args":{"JVM stats":"heap_memory_usage: 319266464\nnon_heap_memory_usage: 212072560\nloaded_class_count: 18612\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624178000,"args":{"JVM stats":"heap_memory_usage: 324449800\nnon_heap_memory_usage: 212072560\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624181000,"args":{"JVM stats":"heap_memory_usage: 324819560\nnon_heap_memory_usage: 212072560\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624184000,"args":{"JVM stats":"heap_memory_usage: 324819560\nnon_heap_memory_usage: 212072560\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624184001,"args":{"JVM stats":"heap_memory_usage: 324819560\nnon_heap_memory_usage: 212072560\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624186000,"args":{"JVM stats":"heap_memory_usage: 324819560\nnon_heap_memory_usage: 212073096\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624186001,"args":{"JVM stats":"heap_memory_usage: 324819560\nnon_heap_memory_usage: 212076104\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624186000,"args":{"JVM stats":"heap_memory_usage: 324819560\nnon_heap_memory_usage: 212076640\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624186001,"args":{"JVM stats":"heap_memory_usage: 324819560\nnon_heap_memory_usage: 212076640\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624226000,"args":{"JVM stats":"heap_memory_usage: 328521424\nnon_heap_memory_usage: 212079648\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624227000,"args":{"JVM stats":"heap_memory_usage: 328521424\nnon_heap_memory_usage: 212079648\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624229000,"args":{"JVM stats":"heap_memory_usage: 328891224\nnon_heap_memory_usage: 212079648\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624229001,"args":{"JVM stats":"heap_memory_usage: 328891224\nnon_heap_memory_usage: 212079648\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624235000,"args":{"JVM stats":"heap_memory_usage: 330000592\nnon_heap_memory_usage: 212079648\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624235001,"args":{"JVM stats":"heap_memory_usage: 330000592\nnon_heap_memory_usage: 212079648\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624256000,"args":{"JVM stats":"heap_memory_usage: 330376552\nnon_heap_memory_usage: 212079648\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624266000,"args":{"JVM stats":"heap_memory_usage: 331116072\nnon_heap_memory_usage: 212083272\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539624267000,"args":{"JVM stats":"heap_memory_usage: 331116072\nnon_heap_memory_usage: 212083272\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539632986000,"args":{"JVM stats":"heap_memory_usage: 334492736\nnon_heap_memory_usage: 212083272\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539632986001,"args":{"JVM stats":"heap_memory_usage: 334492736\nnon_heap_memory_usage: 212084104\nloaded_class_count: 18612\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633363000,"args":{"JVM stats":"heap_memory_usage: 416912488\nnon_heap_memory_usage: 212898680\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633364000,"args":{"JVM stats":"heap_memory_usage: 416912488\nnon_heap_memory_usage: 212910520\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633365000,"args":{"JVM stats":"heap_memory_usage: 416912488\nnon_heap_memory_usage: 212899832\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633365001,"args":{"JVM stats":"heap_memory_usage: 416912488\nnon_heap_memory_usage: 212899832\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633367000,"args":{"JVM stats":"heap_memory_usage: 417652040\nnon_heap_memory_usage: 212903184\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633387000,"args":{"JVM stats":"heap_memory_usage: 418021936\nnon_heap_memory_usage: 212901784\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633389000,"args":{"JVM stats":"heap_memory_usage: 418021936\nnon_heap_memory_usage: 212901784\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633390000,"args":{"JVM stats":"heap_memory_usage: 418021936\nnon_heap_memory_usage: 212901784\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633738000,"args":{"JVM stats":"heap_memory_usage: 439522480\nnon_heap_memory_usage: 213150984\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633792000,"args":{"JVM stats":"heap_memory_usage: 441371192\nnon_heap_memory_usage: 213155216\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633792001,"args":{"JVM stats":"heap_memory_usage: 441371192\nnon_heap_memory_usage: 213155216\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633798000,"args":{"JVM stats":"heap_memory_usage: 442484584\nnon_heap_memory_usage: 213156112\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539633798001,"args":{"JVM stats":"heap_memory_usage: 442484584\nnon_heap_memory_usage: 213156112\nloaded_class_count: 18613\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539635028000,"args":{"JVM stats":"heap_memory_usage: 120371648\nnon_heap_memory_usage: 213309024\nloaded_class_count: 18614\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 16\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539635028001,"args":{"JVM stats":"heap_memory_usage: 122544192\nnon_heap_memory_usage: 213309024\nloaded_class_count: 18614\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518539635036000,"args":{"JVM stats":"heap_memory_usage: 122918096\nnon_heap_memory_usage: 213309984\nloaded_class_count: 18614\nthread_count: 33\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":37,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624021000,"dur":2000},{"pid":1,"tid":37,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624023000,"dur":2000},{"pid":1,"tid":37,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624025000,"dur":100},{"pid":1,"tid":37,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624025000,"dur":100},{"pid":1,"tid":37,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624038000,"dur":2000},{"pid":1,"tid":37,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624040000,"dur":1000},{"pid":1,"tid":37,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624041000,"dur":3000},{"pid":1,"tid":37,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624044000,"dur":100},{"pid":1,"tid":37,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624044000,"dur":100},{"pid":1,"tid":37,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624044000,"dur":1000},{"pid":1,"tid":37,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624045000,"dur":100},{"pid":1,"tid":37,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624045000,"dur":100},{"pid":1,"tid":37,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624045000,"dur":3000},{"pid":1,"tid":37,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624048000,"dur":1000},{"pid":1,"tid":37,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624049000,"dur":100},{"pid":1,"tid":37,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624049000,"dur":100},{"pid":1,"tid":37,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624049000,"dur":34000},{"pid":1,"tid":37,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624083000,"dur":100},{"pid":1,"tid":37,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624083000,"dur":1000},{"pid":1,"tid":37,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624086000,"dur":1000},{"pid":1,"tid":37,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624087000,"dur":100},{"pid":1,"tid":37,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624041000,"dur":46000},{"pid":1,"tid":37,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624087000,"dur":2000},{"pid":1,"tid":37,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624089000,"dur":100},{"pid":1,"tid":37,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624089000,"dur":100},{"pid":1,"tid":37,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624089000,"dur":100},{"pid":1,"tid":37,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624089000,"dur":100},{"pid":1,"tid":37,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624089000,"dur":100},{"pid":1,"tid":37,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624089000,"dur":100},{"pid":1,"tid":37,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624089000,"dur":1000},{"pid":1,"tid":37,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624090000,"dur":100},{"pid":1,"tid":37,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624090000,"dur":100},{"pid":1,"tid":37,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624090000,"dur":100},{"pid":1,"tid":37,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624090000,"dur":16000},{"pid":1,"tid":37,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624106000,"dur":100},{"pid":1,"tid":37,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624106000,"dur":1000},{"pid":1,"tid":37,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624108000,"dur":100},{"pid":1,"tid":37,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624108000,"dur":100},{"pid":1,"tid":37,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518539624089000,"dur":19000},{"pid":1,"tid":37,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624108000,"dur":1000},{"pid":1,"tid":37,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624109000,"dur":6000},{"pid":1,"tid":37,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624037000,"dur":79000},{"pid":1,"tid":37,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539624027000,"dur":89000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624124000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624125000,"dur":53000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624179000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624182000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624184000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624185000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624186000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624186000,"dur":100},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624186000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624187000,"dur":39000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624227000,"dur":100},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624227000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624229000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624230000,"dur":5000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624235000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624235000,"dur":21000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624257000,"dur":9000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539624267000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539624267000,"dur":8719000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539632986000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539632986000,"dur":377000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539633363000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539633364000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539633365000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539633366000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539633367000,"dur":20000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539633388000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539633390000,"dur":100},{"pid":1,"tid":38,"id":74,"name":"transform prep: merge java resources","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518539633514000,"dur":1000},{"pid":1,"tid":38,"id":75,"name":"transform: merge java resources","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518539633515000,"dur":159000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539633391000,"dur":347000},{"pid":1,"tid":38,"id":77,"name":"transform prep: strip debug symbol","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518539633742000,"dur":100},{"pid":1,"tid":38,"id":78,"name":"transform: strip debug symbol","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518539633742000,"dur":37000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539633739000,"dur":52000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539633792000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518539633792000,"dur":6000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539633798000,"dur":100},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539633799000,"dur":1229000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518539635028000,"dur":100},{"pid":1,"tid":37,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518539635029000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-13-17-33-55-036.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-13-17-33-55-036.rawproto
new file mode 100644
index 00000000..19efd149
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-13-17-33-55-036.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-14-11-54-05-131.json b/IGetAndroid/build/android-profile/profile-2018-02-14-11-54-05-131.json
new file mode 100644
index 00000000..15ce27d6
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-14-11-54-05-131.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518605611676000,"args":{"JVM stats":"heap_memory_usage: 113648312\nnon_heap_memory_usage: 136908864\nloaded_class_count: 15749\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605611872000,"args":{"JVM stats":"heap_memory_usage: 132291008\nnon_heap_memory_usage: 136782368\nloaded_class_count: 15764\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605611994000,"args":{"JVM stats":"heap_memory_usage: 144417184\nnon_heap_memory_usage: 136931984\nloaded_class_count: 15764\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612000000,"args":{"JVM stats":"heap_memory_usage: 144417184\nnon_heap_memory_usage: 136952304\nloaded_class_count: 15764\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612008000,"args":{"JVM stats":"heap_memory_usage: 144417184\nnon_heap_memory_usage: 136958712\nloaded_class_count: 15764\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612011000,"args":{"JVM stats":"heap_memory_usage: 144417184\nnon_heap_memory_usage: 136993960\nloaded_class_count: 15764\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612015000,"args":{"JVM stats":"heap_memory_usage: 144417184\nnon_heap_memory_usage: 137048560\nloaded_class_count: 15764\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612016000,"args":{"JVM stats":"heap_memory_usage: 144417184\nnon_heap_memory_usage: 137060696\nloaded_class_count: 15764\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612018000,"args":{"JVM stats":"heap_memory_usage: 144417184\nnon_heap_memory_usage: 137069376\nloaded_class_count: 15764\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612018001,"args":{"JVM stats":"heap_memory_usage: 144417184\nnon_heap_memory_usage: 137072304\nloaded_class_count: 15764\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612117000,"args":{"JVM stats":"heap_memory_usage: 154669232\nnon_heap_memory_usage: 137255832\nloaded_class_count: 15765\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612120000,"args":{"JVM stats":"heap_memory_usage: 154669232\nnon_heap_memory_usage: 137256784\nloaded_class_count: 15765\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612163000,"args":{"JVM stats":"heap_memory_usage: 159325760\nnon_heap_memory_usage: 137316728\nloaded_class_count: 15765\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605612169000,"args":{"JVM stats":"heap_memory_usage: 160256888\nnon_heap_memory_usage: 137324616\nloaded_class_count: 15765\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605613057000,"args":{"JVM stats":"heap_memory_usage: 200831776\nnon_heap_memory_usage: 137665712\nloaded_class_count: 15766\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605613058000,"args":{"JVM stats":"heap_memory_usage: 200831776\nnon_heap_memory_usage: 137665712\nloaded_class_count: 15766\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605613083000,"args":{"JVM stats":"heap_memory_usage: 200831776\nnon_heap_memory_usage: 137746592\nloaded_class_count: 15766\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605613105000,"args":{"JVM stats":"heap_memory_usage: 203656368\nnon_heap_memory_usage: 137787440\nloaded_class_count: 15766\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605621394000,"args":{"JVM stats":"heap_memory_usage: 220418680\nnon_heap_memory_usage: 137902704\nloaded_class_count: 15766\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605637673000,"args":{"JVM stats":"heap_memory_usage: 236249608\nnon_heap_memory_usage: 138093160\nloaded_class_count: 15770\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605637673001,"args":{"JVM stats":"heap_memory_usage: 236249608\nnon_heap_memory_usage: 138093160\nloaded_class_count: 15770\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605638510000,"args":{"JVM stats":"heap_memory_usage: 431827816\nnon_heap_memory_usage: 144203968\nloaded_class_count: 15827\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605638514000,"args":{"JVM stats":"heap_memory_usage: 431827816\nnon_heap_memory_usage: 144230416\nloaded_class_count: 15829\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605638516000,"args":{"JVM stats":"heap_memory_usage: 431827816\nnon_heap_memory_usage: 144231312\nloaded_class_count: 15829\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605638517000,"args":{"JVM stats":"heap_memory_usage: 431827816\nnon_heap_memory_usage: 144234728\nloaded_class_count: 15829\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605638520000,"args":{"JVM stats":"heap_memory_usage: 431827816\nnon_heap_memory_usage: 144241576\nloaded_class_count: 15829\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605638542000,"args":{"JVM stats":"heap_memory_usage: 431827816\nnon_heap_memory_usage: 144271248\nloaded_class_count: 15829\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605638546000,"args":{"JVM stats":"heap_memory_usage: 432758944\nnon_heap_memory_usage: 144294008\nloaded_class_count: 15831\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605638548000,"args":{"JVM stats":"heap_memory_usage: 432758944\nnon_heap_memory_usage: 144296840\nloaded_class_count: 15831\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605639475000,"args":{"JVM stats":"heap_memory_usage: 457145968\nnon_heap_memory_usage: 144811888\nloaded_class_count: 15833\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605639688000,"args":{"JVM stats":"heap_memory_usage: 472975680\nnon_heap_memory_usage: 144926072\nloaded_class_count: 15833\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605639689000,"args":{"JVM stats":"heap_memory_usage: 472975680\nnon_heap_memory_usage: 144926448\nloaded_class_count: 15833\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605639700000,"args":{"JVM stats":"heap_memory_usage: 472975680\nnon_heap_memory_usage: 144921056\nloaded_class_count: 15833\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605639701000,"args":{"JVM stats":"heap_memory_usage: 472975680\nnon_heap_memory_usage: 144921056\nloaded_class_count: 15833\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605645121000,"args":{"JVM stats":"heap_memory_usage: 238502816\nnon_heap_memory_usage: 144590840\nloaded_class_count: 15836\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 51\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605645122000,"args":{"JVM stats":"heap_memory_usage: 244106768\nnon_heap_memory_usage: 144596216\nloaded_class_count: 15836\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518605645131000,"args":{"JVM stats":"heap_memory_usage: 244563992\nnon_heap_memory_usage: 144542776\nloaded_class_count: 15836\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":5,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611676000,"dur":4000},{"pid":1,"tid":5,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611680000,"dur":6000},{"pid":1,"tid":5,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611686000,"dur":5000},{"pid":1,"tid":5,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611686000,"dur":5000},{"pid":1,"tid":5,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611724000,"dur":9000},{"pid":1,"tid":5,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611733000,"dur":1000},{"pid":1,"tid":5,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611735000,"dur":9000},{"pid":1,"tid":5,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611744000,"dur":1000},{"pid":1,"tid":5,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611745000,"dur":1000},{"pid":1,"tid":5,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611746000,"dur":1000},{"pid":1,"tid":5,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611747000,"dur":1000},{"pid":1,"tid":5,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611748000,"dur":1000},{"pid":1,"tid":5,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611749000,"dur":4000},{"pid":1,"tid":5,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611753000,"dur":1000},{"pid":1,"tid":5,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611754000,"dur":100},{"pid":1,"tid":5,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611754000,"dur":100},{"pid":1,"tid":5,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611754000,"dur":28000},{"pid":1,"tid":5,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611782000,"dur":1000},{"pid":1,"tid":5,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611783000,"dur":3000},{"pid":1,"tid":5,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611790000,"dur":1000},{"pid":1,"tid":5,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611791000,"dur":1000},{"pid":1,"tid":5,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611734000,"dur":58000},{"pid":1,"tid":5,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611792000,"dur":5000},{"pid":1,"tid":5,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611798000,"dur":100},{"pid":1,"tid":5,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611798000,"dur":100},{"pid":1,"tid":5,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611798000,"dur":100},{"pid":1,"tid":5,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611798000,"dur":1000},{"pid":1,"tid":5,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611799000,"dur":100},{"pid":1,"tid":5,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611799000,"dur":100},{"pid":1,"tid":5,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611799000,"dur":1000},{"pid":1,"tid":5,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611800000,"dur":100},{"pid":1,"tid":5,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611800000,"dur":100},{"pid":1,"tid":5,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611800000,"dur":100},{"pid":1,"tid":5,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611800000,"dur":19000},{"pid":1,"tid":5,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611819000,"dur":1000},{"pid":1,"tid":5,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611820000,"dur":1000},{"pid":1,"tid":5,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611823000,"dur":1000},{"pid":1,"tid":5,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611824000,"dur":100},{"pid":1,"tid":5,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518605611797000,"dur":27000},{"pid":1,"tid":5,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611824000,"dur":4000},{"pid":1,"tid":5,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611828000,"dur":12000},{"pid":1,"tid":5,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611724000,"dur":122000},{"pid":1,"tid":5,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605611714000,"dur":133000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605611872000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605611873000,"dur":121000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605611995000,"dur":5000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605612001000,"dur":7000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605612008000,"dur":3000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605612012000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605612015000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605612016000,"dur":2000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605612018000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605612020000,"dur":97000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605612118000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605612120000,"dur":42000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605612163000,"dur":5000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605612170000,"dur":887000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605613057000,"dur":1000},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605613058000,"dur":25000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605613083000,"dur":22000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605613107000,"dur":8286000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605621394000,"dur":16278000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605637673000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605637673000,"dur":836000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605638510000,"dur":4000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605638514000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605638517000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605638518000,"dur":2000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605638521000,"dur":21000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605638543000,"dur":3000},{"pid":1,"tid":0,"id":72,"name":"task: merge source set folders","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605638546000,"dur":2000},{"pid":1,"tid":6,"id":74,"name":"transform prep: merge java resources","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518605638799000,"dur":3000},{"pid":1,"tid":6,"id":75,"name":"transform: merge java resources","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518605638802000,"dur":360000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605638549000,"dur":926000},{"pid":1,"tid":6,"id":77,"name":"transform prep: strip debug symbol","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518605639482000,"dur":1000},{"pid":1,"tid":6,"id":78,"name":"transform: strip debug symbol","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518605639483000,"dur":141000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605639476000,"dur":212000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605639688000,"dur":1000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518605639690000,"dur":10000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605639700000,"dur":1000},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605639701000,"dur":5420000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518605645122000,"dur":100},{"pid":1,"tid":5,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 59475\n apk_size: 7336177\n resources_ap_size: 489329\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518605645123000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-14-11-54-05-131.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-14-11-54-05-131.rawproto
new file mode 100644
index 00000000..19c2dade
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-14-11-54-05-131.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-14-12-28-08-010.json b/IGetAndroid/build/android-profile/profile-2018-02-14-12-28-08-010.json
new file mode 100644
index 00000000..b6da4682
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-14-12-28-08-010.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518607676053000,"args":{"JVM stats":"heap_memory_usage: 44822944\nnon_heap_memory_usage: 58998776\nloaded_class_count: 8117\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 5\n gc_time: 77\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 103\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518607688013000,"args":{"JVM stats":"heap_memory_usage: 170578176\nnon_heap_memory_usage: 92432744\nloaded_class_count: 12176\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 62\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 233\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607676098000,"dur":378000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607676477000,"dur":347000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607676825000,"dur":50000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607676824000,"dur":51000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607677871000,"dur":122000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607677993000,"dur":19000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678055000,"dur":25000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678080000,"dur":6000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678086000,"dur":11000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678097000,"dur":31000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678129000,"dur":8000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678137000,"dur":8000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678145000,"dur":62000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678208000,"dur":7000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678215000,"dur":9000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678224000,"dur":2000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678227000,"dur":75000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678303000,"dur":31000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678335000,"dur":75000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678420000,"dur":32000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678452000,"dur":5000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678013000,"dur":444000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607678457000,"dur":61000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678521000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678523000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678523000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678523000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678524000,"dur":1000},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678525000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678525000,"dur":3000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678528000,"dur":100},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678528000,"dur":1000},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678529000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678529000,"dur":22000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678552000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678553000,"dur":7000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678562000,"dur":3000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678565000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518607678518000,"dur":47000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607678565000,"dur":8000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607678573000,"dur":47000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607677869000,"dur":822000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607678695000,"dur":7154000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607676972000,"dur":8877000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518607687966000,"dur":23000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-14-12-28-08-010.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-14-12-28-08-010.rawproto
new file mode 100644
index 00000000..385c87c5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-14-12-28-08-010.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-15-15-42-22-574.json b/IGetAndroid/build/android-profile/profile-2018-02-15-15-42-22-574.json
new file mode 100644
index 00000000..77cc5b69
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-15-15-42-22-574.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518705728745000,"args":{"JVM stats":"heap_memory_usage: 29789840\nnon_heap_memory_usage: 55834040\nloaded_class_count: 7729\nthread_count: 25\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 6\n gc_time: 67\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 80\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518705742581000,"args":{"JVM stats":"heap_memory_usage: 53532880\nnon_heap_memory_usage: 88291392\nloaded_class_count: 11796\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 3\n gc_time: 83\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 311\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705728786000,"dur":399000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705729186000,"dur":307000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705729493000,"dur":45000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705729493000,"dur":46000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705730669000,"dur":98000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705730768000,"dur":22000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730829000,"dur":19000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730848000,"dur":4000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730852000,"dur":8000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730860000,"dur":27000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730887000,"dur":8000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730895000,"dur":7000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730903000,"dur":54000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730957000,"dur":9000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730966000,"dur":11000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730978000,"dur":2000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730980000,"dur":70000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731050000,"dur":21000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731072000,"dur":62000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731140000,"dur":26000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731166000,"dur":4000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705730791000,"dur":379000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705731170000,"dur":53000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731226000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731227000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731227000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731227000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731228000,"dur":1000},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731229000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731229000,"dur":1000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731230000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731231000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731231000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731231000,"dur":24000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731255000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731256000,"dur":4000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731261000,"dur":3000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731264000,"dur":1000},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705731223000,"dur":42000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705731265000,"dur":4000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705731269000,"dur":47000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705730668000,"dur":702000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705731373000,"dur":8386000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705729691000,"dur":10068000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705742178000,"dur":30000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-15-15-42-22-574.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-15-15-42-22-574.rawproto
new file mode 100644
index 00000000..2e83330a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-15-15-42-22-574.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-15-15-43-42-845.json b/IGetAndroid/build/android-profile/profile-2018-02-15-15-43-42-845.json
new file mode 100644
index 00000000..78cacc72
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-15-15-43-42-845.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518705803056000,"args":{"JVM stats":"heap_memory_usage: 33527704\nnon_heap_memory_usage: 54296056\nloaded_class_count: 7732\nthread_count: 25\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 5\n gc_time: 113\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 111\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518705822850000,"args":{"JVM stats":"heap_memory_usage: 55434464\nnon_heap_memory_usage: 87489936\nloaded_class_count: 11801\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 70\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 321\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705803160000,"dur":794000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705803955000,"dur":699000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705804654000,"dur":97000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705804654000,"dur":98000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705806535000,"dur":217000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705806753000,"dur":41000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705806857000,"dur":36000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705806893000,"dur":7000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705806901000,"dur":15000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705806916000,"dur":43000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705806962000,"dur":47000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807009000,"dur":19000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807029000,"dur":108000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807138000,"dur":10000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807148000,"dur":11000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807160000,"dur":3000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807164000,"dur":66000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807231000,"dur":36000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807267000,"dur":92000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807366000,"dur":44000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807411000,"dur":6000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705806795000,"dur":622000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705807417000,"dur":90000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807510000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807511000,"dur":1000},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807512000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807512000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807513000,"dur":1000},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807514000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807514000,"dur":5000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807519000,"dur":2000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807521000,"dur":2000},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807523000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807523000,"dur":33000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807557000,"dur":3000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807560000,"dur":9000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807571000,"dur":3000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807574000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518705807507000,"dur":67000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705807574000,"dur":14000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705807588000,"dur":83000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705806533000,"dur":1259000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705807808000,"dur":10350000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705804956000,"dur":13202000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518705822444000,"dur":379000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-15-15-43-42-845.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-15-15-43-42-845.rawproto
new file mode 100644
index 00000000..a8b4c6f4
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-15-15-43-42-845.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-11-40-841.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-11-40-841.json
new file mode 100644
index 00000000..ca31c6fa
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-11-40-841.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518793889257000,"args":{"JVM stats":"heap_memory_usage: 29601448\nnon_heap_memory_usage: 55976976\nloaded_class_count: 7729\nthread_count: 25\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 6\n gc_time: 63\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 80\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518793900845000,"args":{"JVM stats":"heap_memory_usage: 57971928\nnon_heap_memory_usage: 88183168\nloaded_class_count: 11796\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 3\n gc_time: 89\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 256\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793889296000,"dur":376000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793889673000,"dur":335000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793890009000,"dur":51000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793890009000,"dur":52000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793890995000,"dur":106000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793891101000,"dur":18000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891150000,"dur":16000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891167000,"dur":4000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891171000,"dur":6000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891177000,"dur":28000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891206000,"dur":6000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891213000,"dur":6000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891219000,"dur":49000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891269000,"dur":5000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891274000,"dur":9000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891283000,"dur":2000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891285000,"dur":67000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891352000,"dur":26000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891379000,"dur":60000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891446000,"dur":26000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891472000,"dur":3000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891119000,"dur":356000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793891475000,"dur":47000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891524000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891525000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891525000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891525000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891526000,"dur":1000},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891527000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891527000,"dur":2000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891529000,"dur":100},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891529000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891530000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891530000,"dur":18000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891548000,"dur":1000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891549000,"dur":4000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891554000,"dur":2000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891556000,"dur":1000},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518793891522000,"dur":35000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793891557000,"dur":5000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793891562000,"dur":36000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793890993000,"dur":654000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793891650000,"dur":7179000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793890197000,"dur":8632000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518793900520000,"dur":302000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-11-40-841.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-11-40-841.rawproto
new file mode 100644
index 00000000..b93aa0c6
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-11-40-841.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-36-988.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-36-988.json
new file mode 100644
index 00000000..93089c52
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-36-988.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794001574000,"args":{"JVM stats":"heap_memory_usage: 148653328\nnon_heap_memory_usage: 92936920\nloaded_class_count: 12131\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794016988000,"args":{"JVM stats":"heap_memory_usage: 207752248\nnon_heap_memory_usage: 95334552\nloaded_class_count: 12163\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001576000,"dur":11000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001587000,"dur":12000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001599000,"dur":7000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001599000,"dur":7000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001619000,"dur":10000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001629000,"dur":1000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001634000,"dur":1000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001635000,"dur":100},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001635000,"dur":1000},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001636000,"dur":100},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001636000,"dur":1000},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001637000,"dur":100},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001637000,"dur":5000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001642000,"dur":1000},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001643000,"dur":1000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001644000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001644000,"dur":25000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001669000,"dur":2000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001671000,"dur":7000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001680000,"dur":2000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001682000,"dur":1000},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001631000,"dur":52000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001683000,"dur":5000},{"pid":1,"tid":2,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001690000,"dur":1000},{"pid":1,"tid":2,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001691000,"dur":100},{"pid":1,"tid":2,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001691000,"dur":100},{"pid":1,"tid":2,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001691000,"dur":1000},{"pid":1,"tid":2,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001692000,"dur":1000},{"pid":1,"tid":2,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001693000,"dur":100},{"pid":1,"tid":2,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001693000,"dur":2000},{"pid":1,"tid":2,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001695000,"dur":100},{"pid":1,"tid":2,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001695000,"dur":1000},{"pid":1,"tid":2,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001696000,"dur":100},{"pid":1,"tid":2,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001696000,"dur":22000},{"pid":1,"tid":2,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001719000,"dur":1000},{"pid":1,"tid":2,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001720000,"dur":2000},{"pid":1,"tid":2,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001723000,"dur":2000},{"pid":1,"tid":2,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001725000,"dur":1000},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794001688000,"dur":38000},{"pid":1,"tid":2,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001726000,"dur":5000},{"pid":1,"tid":2,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001731000,"dur":10000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001619000,"dur":124000},{"pid":1,"tid":2,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001744000,"dur":14844000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794001611000,"dur":14977000},{"pid":1,"tid":2,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794016979000,"dur":2000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-36-988.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-36-988.rawproto
new file mode 100644
index 00000000..92888289
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-36-988.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-41-141.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-41-141.json
new file mode 100644
index 00000000..93c16cb8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-41-141.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018181000,"args":{"JVM stats":"heap_memory_usage: 264845288\nnon_heap_memory_usage: 96746680\nloaded_class_count: 12184\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018616000,"args":{"JVM stats":"heap_memory_usage: 285814592\nnon_heap_memory_usage: 98438712\nloaded_class_count: 12331\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018753000,"args":{"JVM stats":"heap_memory_usage: 74984856\nnon_heap_memory_usage: 99068208\nloaded_class_count: 12407\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 17\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018768000,"args":{"JVM stats":"heap_memory_usage: 75989568\nnon_heap_memory_usage: 99149928\nloaded_class_count: 12413\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018796000,"args":{"JVM stats":"heap_memory_usage: 76724048\nnon_heap_memory_usage: 99354592\nloaded_class_count: 12441\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018805000,"args":{"JVM stats":"heap_memory_usage: 77052048\nnon_heap_memory_usage: 99376656\nloaded_class_count: 12446\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018820000,"args":{"JVM stats":"heap_memory_usage: 77411904\nnon_heap_memory_usage: 99442112\nloaded_class_count: 12451\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018825000,"args":{"JVM stats":"heap_memory_usage: 77411904\nnon_heap_memory_usage: 99423736\nloaded_class_count: 12451\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018829000,"args":{"JVM stats":"heap_memory_usage: 77739904\nnon_heap_memory_usage: 99420312\nloaded_class_count: 12451\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018829001,"args":{"JVM stats":"heap_memory_usage: 78096728\nnon_heap_memory_usage: 99417912\nloaded_class_count: 12451\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794018989000,"args":{"JVM stats":"heap_memory_usage: 89643272\nnon_heap_memory_usage: 99862312\nloaded_class_count: 12452\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794019009000,"args":{"JVM stats":"heap_memory_usage: 91041568\nnon_heap_memory_usage: 100007816\nloaded_class_count: 12478\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794019144000,"args":{"JVM stats":"heap_memory_usage: 100310144\nnon_heap_memory_usage: 101221120\nloaded_class_count: 12635\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794019153000,"args":{"JVM stats":"heap_memory_usage: 100634032\nnon_heap_memory_usage: 101230440\nloaded_class_count: 12635\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020218000,"args":{"JVM stats":"heap_memory_usage: 125008680\nnon_heap_memory_usage: 102391424\nloaded_class_count: 12783\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020219000,"args":{"JVM stats":"heap_memory_usage: 126903472\nnon_heap_memory_usage: 102395808\nloaded_class_count: 12783\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020324000,"args":{"JVM stats":"heap_memory_usage: 132438656\nnon_heap_memory_usage: 102666584\nloaded_class_count: 12784\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020338000,"args":{"JVM stats":"heap_memory_usage: 133119376\nnon_heap_memory_usage: 102761136\nloaded_class_count: 12784\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020389000,"args":{"JVM stats":"heap_memory_usage: 136231864\nnon_heap_memory_usage: 103008456\nloaded_class_count: 12793\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020405000,"args":{"JVM stats":"heap_memory_usage: 136912544\nnon_heap_memory_usage: 103101440\nloaded_class_count: 12797\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020415000,"args":{"JVM stats":"heap_memory_usage: 137593480\nnon_heap_memory_usage: 103139544\nloaded_class_count: 12798\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020416000,"args":{"JVM stats":"heap_memory_usage: 137593480\nnon_heap_memory_usage: 103143208\nloaded_class_count: 12798\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020423000,"args":{"JVM stats":"heap_memory_usage: 137593480\nnon_heap_memory_usage: 103143208\nloaded_class_count: 12798\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020563000,"args":{"JVM stats":"heap_memory_usage: 149226464\nnon_heap_memory_usage: 103062912\nloaded_class_count: 12799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794020566000,"args":{"JVM stats":"heap_memory_usage: 149226464\nnon_heap_memory_usage: 103039264\nloaded_class_count: 12799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794021123000,"args":{"JVM stats":"heap_memory_usage: 164580152\nnon_heap_memory_usage: 103309704\nloaded_class_count: 12807\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794021125000,"args":{"JVM stats":"heap_memory_usage: 164580152\nnon_heap_memory_usage: 103319480\nloaded_class_count: 12807\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794021132000,"args":{"JVM stats":"heap_memory_usage: 165232040\nnon_heap_memory_usage: 103348008\nloaded_class_count: 12808\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794021141000,"args":{"JVM stats":"heap_memory_usage: 165232040\nnon_heap_memory_usage: 103362104\nloaded_class_count: 12809\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018182000,"dur":9000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018191000,"dur":14000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018205000,"dur":5000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018205000,"dur":6000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018240000,"dur":11000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018251000,"dur":1000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018255000,"dur":3000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018258000,"dur":1000},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018259000,"dur":1000},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018260000,"dur":1000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018261000,"dur":1000},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018262000,"dur":1000},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018263000,"dur":8000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018271000,"dur":1000},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018272000,"dur":1000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018273000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018273000,"dur":31000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018304000,"dur":1000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018305000,"dur":5000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018312000,"dur":6000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018318000,"dur":1000},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018252000,"dur":67000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018319000,"dur":5000},{"pid":1,"tid":2,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018325000,"dur":100},{"pid":1,"tid":2,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018325000,"dur":1000},{"pid":1,"tid":2,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018326000,"dur":100},{"pid":1,"tid":2,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018326000,"dur":1000},{"pid":1,"tid":2,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018327000,"dur":100},{"pid":1,"tid":2,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018327000,"dur":100},{"pid":1,"tid":2,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018327000,"dur":2000},{"pid":1,"tid":2,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018329000,"dur":100},{"pid":1,"tid":2,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018329000,"dur":1000},{"pid":1,"tid":2,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018330000,"dur":100},{"pid":1,"tid":2,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018330000,"dur":28000},{"pid":1,"tid":2,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018358000,"dur":1000},{"pid":1,"tid":2,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018359000,"dur":4000},{"pid":1,"tid":2,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018365000,"dur":1000},{"pid":1,"tid":2,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018366000,"dur":100},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794018324000,"dur":42000},{"pid":1,"tid":2,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018366000,"dur":3000},{"pid":1,"tid":2,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018369000,"dur":13000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018240000,"dur":143000},{"pid":1,"tid":2,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018387000,"dur":61000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794018218000,"dur":230000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794018608000,"dur":2000},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794018619000,"dur":134000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794018754000,"dur":14000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794018770000,"dur":26000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794018798000,"dur":7000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794018806000,"dur":14000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794018821000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794018825000,"dur":3000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794018829000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794018832000,"dur":157000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794018990000,"dur":18000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794019010000,"dur":134000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794019146000,"dur":7000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794019155000,"dur":1062000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794020219000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: test pre build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 93\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794020220000,"dur":104000},{"pid":1,"tid":0,"id":62,"name":"task: aidl compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794020325000,"dur":13000},{"pid":1,"tid":0,"id":63,"name":"task: process test manifest","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794020341000,"dur":48000},{"pid":1,"tid":0,"id":64,"name":"task: renderscript compile","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794020391000,"dur":14000},{"pid":1,"tid":0,"id":65,"name":"task: generate build config","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794020406000,"dur":8000},{"pid":1,"tid":0,"id":66,"name":"task: generate res values","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794020415000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794020417000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: merge resources","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794020427000,"dur":136000},{"pid":1,"tid":0,"id":69,"name":"task: splits discovery","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794020565000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: process android resources","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794020568000,"dur":555000},{"pid":1,"tid":0,"id":71,"name":"task: unknown task type","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794021124000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: mockable android jar","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794021125000,"dur":6000},{"pid":1,"tid":2,"id":73,"name":"base plugin build finished","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794021133000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-41-141.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-41-141.rawproto
new file mode 100644
index 00000000..0bc33b28
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-13-41-141.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-14-07-766.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-14-07-766.json
new file mode 100644
index 00000000..9540b65d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-14-07-766.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033452000,"args":{"JVM stats":"heap_memory_usage: 236265328\nnon_heap_memory_usage: 105029352\nloaded_class_count: 12890\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033676000,"args":{"JVM stats":"heap_memory_usage: 252907576\nnon_heap_memory_usage: 106103656\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033677000,"args":{"JVM stats":"heap_memory_usage: 252907576\nnon_heap_memory_usage: 106088328\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033745000,"args":{"JVM stats":"heap_memory_usage: 259078640\nnon_heap_memory_usage: 105827984\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033753000,"args":{"JVM stats":"heap_memory_usage: 259726416\nnon_heap_memory_usage: 105841032\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033759000,"args":{"JVM stats":"heap_memory_usage: 260698464\nnon_heap_memory_usage: 105857824\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033760000,"args":{"JVM stats":"heap_memory_usage: 260698464\nnon_heap_memory_usage: 105860920\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033762000,"args":{"JVM stats":"heap_memory_usage: 260698464\nnon_heap_memory_usage: 105882928\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033764000,"args":{"JVM stats":"heap_memory_usage: 260698464\nnon_heap_memory_usage: 105886000\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033768000,"args":{"JVM stats":"heap_memory_usage: 260698464\nnon_heap_memory_usage: 105897280\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033769000,"args":{"JVM stats":"heap_memory_usage: 260698464\nnon_heap_memory_usage: 105902976\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033842000,"args":{"JVM stats":"heap_memory_usage: 264261912\nnon_heap_memory_usage: 105945784\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033844000,"args":{"JVM stats":"heap_memory_usage: 264585800\nnon_heap_memory_usage: 105946488\nloaded_class_count: 12958\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033910000,"args":{"JVM stats":"heap_memory_usage: 269921496\nnon_heap_memory_usage: 106208072\nloaded_class_count: 12963\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794033911000,"args":{"JVM stats":"heap_memory_usage: 269921496\nnon_heap_memory_usage: 106212808\nloaded_class_count: 12963\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794034757000,"args":{"JVM stats":"heap_memory_usage: 289109416\nnon_heap_memory_usage: 106432488\nloaded_class_count: 12967\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794034758000,"args":{"JVM stats":"heap_memory_usage: 289109416\nnon_heap_memory_usage: 106433896\nloaded_class_count: 12967\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794034793000,"args":{"JVM stats":"heap_memory_usage: 290497520\nnon_heap_memory_usage: 106486152\nloaded_class_count: 12967\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794036627000,"args":{"JVM stats":"heap_memory_usage: 97889584\nnon_heap_memory_usage: 117282856\nloaded_class_count: 13898\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 36\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794036639000,"args":{"JVM stats":"heap_memory_usage: 100980368\nnon_heap_memory_usage: 117293904\nloaded_class_count: 13898\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794036645000,"args":{"JVM stats":"heap_memory_usage: 101887744\nnon_heap_memory_usage: 117303144\nloaded_class_count: 13898\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794036645001,"args":{"JVM stats":"heap_memory_usage: 101887744\nnon_heap_memory_usage: 117303144\nloaded_class_count: 13898\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794036656000,"args":{"JVM stats":"heap_memory_usage: 103741624\nnon_heap_memory_usage: 117335744\nloaded_class_count: 13898\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794037008000,"args":{"JVM stats":"heap_memory_usage: 335089872\nnon_heap_memory_usage: 119486656\nloaded_class_count: 14141\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794037021000,"args":{"JVM stats":"heap_memory_usage: 336169816\nnon_heap_memory_usage: 119559264\nloaded_class_count: 14141\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794037025000,"args":{"JVM stats":"heap_memory_usage: 336361776\nnon_heap_memory_usage: 119576248\nloaded_class_count: 14144\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794037154000,"args":{"JVM stats":"heap_memory_usage: 340786424\nnon_heap_memory_usage: 120107056\nloaded_class_count: 14235\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794037182000,"args":{"JVM stats":"heap_memory_usage: 342247408\nnon_heap_memory_usage: 120050072\nloaded_class_count: 14237\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794037210000,"args":{"JVM stats":"heap_memory_usage: 343154792\nnon_heap_memory_usage: 120069488\nloaded_class_count: 14239\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044119000,"args":{"JVM stats":"heap_memory_usage: 344120424\nnon_heap_memory_usage: 120129080\nloaded_class_count: 14239\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044123000,"args":{"JVM stats":"heap_memory_usage: 344305360\nnon_heap_memory_usage: 120129880\nloaded_class_count: 14239\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044754000,"args":{"JVM stats":"heap_memory_usage: 368783920\nnon_heap_memory_usage: 120928944\nloaded_class_count: 14319\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044759000,"args":{"JVM stats":"heap_memory_usage: 368960632\nnon_heap_memory_usage: 120934032\nloaded_class_count: 14319\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044787000,"args":{"JVM stats":"heap_memory_usage: 369828064\nnon_heap_memory_usage: 120958160\nloaded_class_count: 14320\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044793000,"args":{"JVM stats":"heap_memory_usage: 370160272\nnon_heap_memory_usage: 120971480\nloaded_class_count: 14320\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044956000,"args":{"JVM stats":"heap_memory_usage: 81382840\nnon_heap_memory_usage: 121496688\nloaded_class_count: 14383\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 23\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044965000,"args":{"JVM stats":"heap_memory_usage: 81843864\nnon_heap_memory_usage: 121522216\nloaded_class_count: 14389\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044966000,"args":{"JVM stats":"heap_memory_usage: 81977552\nnon_heap_memory_usage: 121526696\nloaded_class_count: 14389\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044967000,"args":{"JVM stats":"heap_memory_usage: 81977552\nnon_heap_memory_usage: 121531648\nloaded_class_count: 14390\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044974000,"args":{"JVM stats":"heap_memory_usage: 82128096\nnon_heap_memory_usage: 121531744\nloaded_class_count: 14390\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794044996000,"args":{"JVM stats":"heap_memory_usage: 82723920\nnon_heap_memory_usage: 121530936\nloaded_class_count: 14394\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794045076000,"args":{"JVM stats":"heap_memory_usage: 85955896\nnon_heap_memory_usage: 121386256\nloaded_class_count: 14398\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794045455000,"args":{"JVM stats":"heap_memory_usage: 110082600\nnon_heap_memory_usage: 122836480\nloaded_class_count: 14793\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794045483000,"args":{"JVM stats":"heap_memory_usage: 111394192\nnon_heap_memory_usage: 122868080\nloaded_class_count: 14793\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794045692000,"args":{"JVM stats":"heap_memory_usage: 122031096\nnon_heap_memory_usage: 124384784\nloaded_class_count: 14932\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794045707000,"args":{"JVM stats":"heap_memory_usage: 122700872\nnon_heap_memory_usage: 124480112\nloaded_class_count: 14959\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794046243000,"args":{"JVM stats":"heap_memory_usage: 156981360\nnon_heap_memory_usage: 125591392\nloaded_class_count: 15117\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794046935000,"args":{"JVM stats":"heap_memory_usage: 238754616\nnon_heap_memory_usage: 125686992\nloaded_class_count: 15121\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794047024000,"args":{"JVM stats":"heap_memory_usage: 240239552\nnon_heap_memory_usage: 125672168\nloaded_class_count: 15123\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794047624000,"args":{"JVM stats":"heap_memory_usage: 221284712\nnon_heap_memory_usage: 125868032\nloaded_class_count: 15127\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 52\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794047645000,"args":{"JVM stats":"heap_memory_usage: 224415752\nnon_heap_memory_usage: 126065008\nloaded_class_count: 15144\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794047645001,"args":{"JVM stats":"heap_memory_usage: 224415752\nnon_heap_memory_usage: 126065776\nloaded_class_count: 15144\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794047646000,"args":{"JVM stats":"heap_memory_usage: 224415752\nnon_heap_memory_usage: 126065776\nloaded_class_count: 15144\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794047766000,"args":{"JVM stats":"heap_memory_usage: 229474256\nnon_heap_memory_usage: 126684464\nloaded_class_count: 15305\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033452000,"dur":19000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033471000,"dur":15000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033486000,"dur":6000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033486000,"dur":6000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033499000,"dur":3000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033503000,"dur":100},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033504000,"dur":1000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033505000,"dur":1000},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033506000,"dur":100},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033506000,"dur":1000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033507000,"dur":1000},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033508000,"dur":100},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033508000,"dur":5000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033513000,"dur":100},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033514000,"dur":1000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033515000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033515000,"dur":27000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033542000,"dur":1000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033543000,"dur":34000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033580000,"dur":11000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033591000,"dur":1000},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794033503000,"dur":89000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033592000,"dur":8000},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033600000,"dur":13000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033499000,"dur":115000},{"pid":1,"tid":2,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033615000,"dur":11000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794033495000,"dur":131000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794033671000,"dur":5000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033677000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033677000,"dur":68000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033746000,"dur":7000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033754000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033760000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033761000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033763000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033766000,"dur":2000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033769000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033770000,"dur":72000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033843000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794033845000,"dur":65000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794033911000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794033913000,"dur":844000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794034758000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794034759000,"dur":34000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794034795000,"dur":1832000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794036628000,"dur":10000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794036640000,"dur":4000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794036645000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794036646000,"dur":10000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794036656000,"dur":352000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794037008000,"dur":12000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794037022000,"dur":3000},{"pid":1,"tid":3,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518794037075000,"dur":18000},{"pid":1,"tid":3,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794037099000,"dur":45000},{"pid":1,"tid":3,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518794037095000,"dur":51000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794037027000,"dur":127000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794037155000,"dur":27000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794037190000,"dur":20000},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794037210000,"dur":6909000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794044120000,"dur":3000},{"pid":1,"tid":3,"id":63,"name":"transform prep: merge java resources","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794044216000,"dur":11000},{"pid":1,"tid":3,"id":64,"name":"transform: merge java resources","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794044227000,"dur":417000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044124000,"dur":629000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044755000,"dur":4000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794044762000,"dur":25000},{"pid":1,"tid":4,"id":68,"name":"transform prep: no changes verifier","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794044791000,"dur":1000},{"pid":1,"tid":4,"id":69,"name":"transform: no changes verifier","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794044792000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044788000,"dur":5000},{"pid":1,"tid":4,"id":71,"name":"transform prep: instant run","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518794044872000,"dur":13000},{"pid":1,"tid":4,"id":72,"name":"transform: instant run","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518794044885000,"dur":62000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044794000,"dur":162000},{"pid":1,"tid":4,"id":74,"name":"transform prep: instant run dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518794044963000,"dur":100},{"pid":1,"tid":4,"id":75,"name":"transform: instant run dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518794044963000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044958000,"dur":6000},{"pid":1,"tid":0,"id":76,"name":"task: unknown task type","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044965000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: pre cold swap","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044966000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: fast deploy runtime extractor","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794044969000,"dur":5000},{"pid":1,"tid":0,"id":79,"name":"task: generate instant run app info","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044976000,"dur":20000},{"pid":1,"tid":4,"id":81,"name":"transform prep: instant run slicer","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518794045050000,"dur":4000},{"pid":1,"tid":4,"id":82,"name":"transform: instant run slicer","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518794045054000,"dur":8000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794044997000,"dur":79000},{"pid":1,"tid":4,"id":84,"name":"transform prep: dex archive builder","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518794045153000,"dur":2000},{"pid":1,"tid":4,"id":85,"name":"transform: dex archive builder","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518794045155000,"dur":287000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794045077000,"dur":378000},{"pid":1,"tid":4,"id":87,"name":"transform prep: external libs merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518794045476000,"dur":2000},{"pid":1,"tid":4,"id":88,"name":"transform: external libs merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518794045478000,"dur":3000},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794045457000,"dur":26000},{"pid":1,"tid":4,"id":90,"name":"transform prep: dex merger","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518794045503000,"dur":3000},{"pid":1,"tid":4,"id":91,"name":"transform: dex merger","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518794045506000,"dur":182000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794045484000,"dur":208000},{"pid":1,"tid":0,"id":92,"name":"task: validate signing","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794045693000,"dur":14000},{"pid":1,"tid":4,"id":94,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1518794045711000,"dur":2000},{"pid":1,"tid":4,"id":95,"name":"transform: instant run dependencies apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1518794045713000,"dur":528000},{"pid":1,"tid":0,"id":93,"name":"task: transform","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794045708000,"dur":535000},{"pid":1,"tid":4,"id":97,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1518794046249000,"dur":1000},{"pid":1,"tid":4,"id":98,"name":"transform: instant run slice split apk builder","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1518794046250000,"dur":682000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794046244000,"dur":691000},{"pid":1,"tid":4,"id":100,"name":"transform prep: strip debug symbol","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794046941000,"dur":1000},{"pid":1,"tid":4,"id":101,"name":"transform: strip debug symbol","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794046942000,"dur":62000},{"pid":1,"tid":0,"id":99,"name":"task: transform","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794046936000,"dur":88000},{"pid":1,"tid":0,"id":102,"name":"task: package application","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794047025000,"dur":599000},{"pid":1,"tid":0,"id":103,"name":"task: build info writer","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794047625000,"dur":20000},{"pid":1,"tid":0,"id":104,"name":"task: unknown task type","args":{"span_id":"104","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794047645000,"dur":100},{"pid":1,"tid":0,"id":105,"name":"task: unknown task type","args":{"span_id":"105","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794047646000,"dur":100},{"pid":1,"tid":2,"id":106,"name":"base plugin build finished","args":{"span_id":"106","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56756\n apk_size: 3457862\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794047733000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-14-07-766.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-14-07-766.rawproto
new file mode 100644
index 00000000..03356e58
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-14-07-766.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-13-015.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-13-015.json
new file mode 100644
index 00000000..e6b671a2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-13-015.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172489000,"args":{"JVM stats":"heap_memory_usage: 293342816\nnon_heap_memory_usage: 127774848\nloaded_class_count: 15337\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172606000,"args":{"JVM stats":"heap_memory_usage: 306239000\nnon_heap_memory_usage: 128227464\nloaded_class_count: 15339\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172607000,"args":{"JVM stats":"heap_memory_usage: 306239000\nnon_heap_memory_usage: 128229000\nloaded_class_count: 15339\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172663000,"args":{"JVM stats":"heap_memory_usage: 313805376\nnon_heap_memory_usage: 128438552\nloaded_class_count: 15339\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172670000,"args":{"JVM stats":"heap_memory_usage: 314027288\nnon_heap_memory_usage: 128471936\nloaded_class_count: 15342\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172674000,"args":{"JVM stats":"heap_memory_usage: 314027288\nnon_heap_memory_usage: 128492768\nloaded_class_count: 15342\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172675000,"args":{"JVM stats":"heap_memory_usage: 314249528\nnon_heap_memory_usage: 128492768\nloaded_class_count: 15342\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172677000,"args":{"JVM stats":"heap_memory_usage: 314249528\nnon_heap_memory_usage: 128502056\nloaded_class_count: 15342\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172678000,"args":{"JVM stats":"heap_memory_usage: 314249528\nnon_heap_memory_usage: 128510664\nloaded_class_count: 15343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172680000,"args":{"JVM stats":"heap_memory_usage: 314249528\nnon_heap_memory_usage: 128517888\nloaded_class_count: 15344\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172681000,"args":{"JVM stats":"heap_memory_usage: 314249528\nnon_heap_memory_usage: 128517888\nloaded_class_count: 15344\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172715000,"args":{"JVM stats":"heap_memory_usage: 318023464\nnon_heap_memory_usage: 128554984\nloaded_class_count: 15351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172716000,"args":{"JVM stats":"heap_memory_usage: 318023464\nnon_heap_memory_usage: 128557344\nloaded_class_count: 15352\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172721000,"args":{"JVM stats":"heap_memory_usage: 318245376\nnon_heap_memory_usage: 128567848\nloaded_class_count: 15354\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172723000,"args":{"JVM stats":"heap_memory_usage: 318467312\nnon_heap_memory_usage: 128575312\nloaded_class_count: 15355\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172731000,"args":{"JVM stats":"heap_memory_usage: 319577008\nnon_heap_memory_usage: 128625256\nloaded_class_count: 15355\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172731001,"args":{"JVM stats":"heap_memory_usage: 319577008\nnon_heap_memory_usage: 128633320\nloaded_class_count: 15355\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172754000,"args":{"JVM stats":"heap_memory_usage: 320242880\nnon_heap_memory_usage: 128697848\nloaded_class_count: 15355\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172763000,"args":{"JVM stats":"heap_memory_usage: 320686824\nnon_heap_memory_usage: 128719480\nloaded_class_count: 15355\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172765000,"args":{"JVM stats":"heap_memory_usage: 320686824\nnon_heap_memory_usage: 128714216\nloaded_class_count: 15357\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172766000,"args":{"JVM stats":"heap_memory_usage: 320686824\nnon_heap_memory_usage: 128726304\nloaded_class_count: 15357\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172767000,"args":{"JVM stats":"heap_memory_usage: 320908736\nnon_heap_memory_usage: 128726304\nloaded_class_count: 15357\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172771000,"args":{"JVM stats":"heap_memory_usage: 321130624\nnon_heap_memory_usage: 128751960\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172773000,"args":{"JVM stats":"heap_memory_usage: 321352512\nnon_heap_memory_usage: 128755712\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172777000,"args":{"JVM stats":"heap_memory_usage: 321574400\nnon_heap_memory_usage: 128760552\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172779000,"args":{"JVM stats":"heap_memory_usage: 321796376\nnon_heap_memory_usage: 128761800\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172787000,"args":{"JVM stats":"heap_memory_usage: 322240488\nnon_heap_memory_usage: 128764744\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172801000,"args":{"JVM stats":"heap_memory_usage: 323132352\nnon_heap_memory_usage: 128802808\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172803000,"args":{"JVM stats":"heap_memory_usage: 323132352\nnon_heap_memory_usage: 128803896\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172850000,"args":{"JVM stats":"heap_memory_usage: 324242256\nnon_heap_memory_usage: 128820560\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172851000,"args":{"JVM stats":"heap_memory_usage: 324242256\nnon_heap_memory_usage: 128820688\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172860000,"args":{"JVM stats":"heap_memory_usage: 326018152\nnon_heap_memory_usage: 128842936\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172861000,"args":{"JVM stats":"heap_memory_usage: 326018152\nnon_heap_memory_usage: 128844800\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172870000,"args":{"JVM stats":"heap_memory_usage: 326906216\nnon_heap_memory_usage: 128863032\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172871000,"args":{"JVM stats":"heap_memory_usage: 326906216\nnon_heap_memory_usage: 128870312\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172890000,"args":{"JVM stats":"heap_memory_usage: 327793888\nnon_heap_memory_usage: 128888848\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172894000,"args":{"JVM stats":"heap_memory_usage: 328015776\nnon_heap_memory_usage: 128913416\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172895000,"args":{"JVM stats":"heap_memory_usage: 328015776\nnon_heap_memory_usage: 128916384\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172896000,"args":{"JVM stats":"heap_memory_usage: 328015776\nnon_heap_memory_usage: 128916384\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172898000,"args":{"JVM stats":"heap_memory_usage: 328467760\nnon_heap_memory_usage: 128947256\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172901000,"args":{"JVM stats":"heap_memory_usage: 328467760\nnon_heap_memory_usage: 128957128\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172911000,"args":{"JVM stats":"heap_memory_usage: 329134296\nnon_heap_memory_usage: 128967288\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172930000,"args":{"JVM stats":"heap_memory_usage: 330470488\nnon_heap_memory_usage: 128992064\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172940000,"args":{"JVM stats":"heap_memory_usage: 330914552\nnon_heap_memory_usage: 128994624\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172952000,"args":{"JVM stats":"heap_memory_usage: 331580440\nnon_heap_memory_usage: 129005360\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172955000,"args":{"JVM stats":"heap_memory_usage: 331580440\nnon_heap_memory_usage: 129004808\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172958000,"args":{"JVM stats":"heap_memory_usage: 331802360\nnon_heap_memory_usage: 129012240\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172962000,"args":{"JVM stats":"heap_memory_usage: 331802360\nnon_heap_memory_usage: 129008080\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172967000,"args":{"JVM stats":"heap_memory_usage: 331802360\nnon_heap_memory_usage: 128994224\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172992000,"args":{"JVM stats":"heap_memory_usage: 332246448\nnon_heap_memory_usage: 128992672\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172995000,"args":{"JVM stats":"heap_memory_usage: 332468416\nnon_heap_memory_usage: 129018176\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172996000,"args":{"JVM stats":"heap_memory_usage: 332468416\nnon_heap_memory_usage: 129019456\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794172997000,"args":{"JVM stats":"heap_memory_usage: 332468416\nnon_heap_memory_usage: 129026368\nloaded_class_count: 15361\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794173015000,"args":{"JVM stats":"heap_memory_usage: 333800040\nnon_heap_memory_usage: 129100744\nloaded_class_count: 15361\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":5,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172489000,"dur":3000},{"pid":1,"tid":5,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172492000,"dur":6000},{"pid":1,"tid":5,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172498000,"dur":2000},{"pid":1,"tid":5,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172498000,"dur":2000},{"pid":1,"tid":5,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172505000,"dur":3000},{"pid":1,"tid":5,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172508000,"dur":1000},{"pid":1,"tid":5,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172510000,"dur":1000},{"pid":1,"tid":5,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172511000,"dur":100},{"pid":1,"tid":5,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172511000,"dur":1000},{"pid":1,"tid":5,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172512000,"dur":1000},{"pid":1,"tid":5,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172513000,"dur":100},{"pid":1,"tid":5,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172513000,"dur":1000},{"pid":1,"tid":5,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172514000,"dur":3000},{"pid":1,"tid":5,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172517000,"dur":100},{"pid":1,"tid":5,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172517000,"dur":1000},{"pid":1,"tid":5,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172518000,"dur":100},{"pid":1,"tid":5,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172518000,"dur":24000},{"pid":1,"tid":5,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172542000,"dur":3000},{"pid":1,"tid":5,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172545000,"dur":8000},{"pid":1,"tid":5,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172555000,"dur":2000},{"pid":1,"tid":5,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172557000,"dur":100},{"pid":1,"tid":5,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794172509000,"dur":48000},{"pid":1,"tid":5,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172557000,"dur":4000},{"pid":1,"tid":5,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172561000,"dur":9000},{"pid":1,"tid":5,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172505000,"dur":66000},{"pid":1,"tid":5,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172571000,"dur":8000},{"pid":1,"tid":5,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794172502000,"dur":77000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172604000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172607000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172607000,"dur":55000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172664000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172671000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172674000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172676000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172677000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172679000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172681000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172682000,"dur":33000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172715000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172717000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172722000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172723000,"dur":8000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172731000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172732000,"dur":22000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172754000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172764000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172766000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172767000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172767000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172771000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172774000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172777000,"dur":2000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172779000,"dur":8000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172787000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172802000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172803000,"dur":46000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172850000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172852000,"dur":8000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172861000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172862000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172870000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172872000,"dur":18000},{"pid":1,"tid":6,"id":65,"name":"transform prep: instant run dex","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518794172892000,"dur":1000},{"pid":1,"tid":6,"id":66,"name":"transform: instant run dex","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518794172893000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172891000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172895000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: pre cold swap","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172896000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: fast deploy runtime extractor","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172897000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: generate instant run app info","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172899000,"dur":2000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172901000,"dur":10000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172911000,"dur":19000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172931000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172941000,"dur":11000},{"pid":1,"tid":0,"id":75,"name":"task: validate signing","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172953000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172955000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172958000,"dur":3000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172962000,"dur":5000},{"pid":1,"tid":0,"id":79,"name":"task: package application","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794172968000,"dur":24000},{"pid":1,"tid":0,"id":80,"name":"task: build info writer","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172993000,"dur":2000},{"pid":1,"tid":0,"id":81,"name":"task: unknown task type","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172996000,"dur":100},{"pid":1,"tid":0,"id":82,"name":"task: unknown task type","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794172996000,"dur":1000},{"pid":1,"tid":5,"id":83,"name":"base plugin build finished","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794173007000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-13-015.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-13-015.rawproto
new file mode 100644
index 00000000..ede22601
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-13-015.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-59-590.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-59-590.json
new file mode 100644
index 00000000..f596670c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-59-590.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200668000,"args":{"JVM stats":"heap_memory_usage: 388482424\nnon_heap_memory_usage: 130083136\nloaded_class_count: 15375\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200916000,"args":{"JVM stats":"heap_memory_usage: 419012984\nnon_heap_memory_usage: 130798856\nloaded_class_count: 15399\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200969000,"args":{"JVM stats":"heap_memory_usage: 426575800\nnon_heap_memory_usage: 130595872\nloaded_class_count: 15400\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200975000,"args":{"JVM stats":"heap_memory_usage: 426797720\nnon_heap_memory_usage: 130598784\nloaded_class_count: 15400\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200978000,"args":{"JVM stats":"heap_memory_usage: 427019640\nnon_heap_memory_usage: 130599680\nloaded_class_count: 15400\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200979000,"args":{"JVM stats":"heap_memory_usage: 427019640\nnon_heap_memory_usage: 130607824\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200981000,"args":{"JVM stats":"heap_memory_usage: 427019640\nnon_heap_memory_usage: 130608528\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200982000,"args":{"JVM stats":"heap_memory_usage: 427241560\nnon_heap_memory_usage: 130609264\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200983000,"args":{"JVM stats":"heap_memory_usage: 427241560\nnon_heap_memory_usage: 130612968\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794200983001,"args":{"JVM stats":"heap_memory_usage: 427241560\nnon_heap_memory_usage: 130612968\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201017000,"args":{"JVM stats":"heap_memory_usage: 430793688\nnon_heap_memory_usage: 130628744\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201019000,"args":{"JVM stats":"heap_memory_usage: 431015712\nnon_heap_memory_usage: 130628776\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201055000,"args":{"JVM stats":"heap_memory_usage: 435948008\nnon_heap_memory_usage: 130868488\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201057000,"args":{"JVM stats":"heap_memory_usage: 435948008\nnon_heap_memory_usage: 130874560\nloaded_class_count: 15401\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201603000,"args":{"JVM stats":"heap_memory_usage: 103267552\nnon_heap_memory_usage: 131081136\nloaded_class_count: 15401\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 52\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201604000,"args":{"JVM stats":"heap_memory_usage: 105915712\nnon_heap_memory_usage: 131081136\nloaded_class_count: 15401\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201626000,"args":{"JVM stats":"heap_memory_usage: 107511072\nnon_heap_memory_usage: 131153568\nloaded_class_count: 15401\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201641000,"args":{"JVM stats":"heap_memory_usage: 108105736\nnon_heap_memory_usage: 131197032\nloaded_class_count: 15404\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794201643000,"args":{"JVM stats":"heap_memory_usage: 108105736\nnon_heap_memory_usage: 131201184\nloaded_class_count: 15404\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794215248000,"args":{"JVM stats":"heap_memory_usage: 112970488\nnon_heap_memory_usage: 131286096\nloaded_class_count: 15406\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794215250000,"args":{"JVM stats":"heap_memory_usage: 112970488\nnon_heap_memory_usage: 131284664\nloaded_class_count: 15406\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794215253000,"args":{"JVM stats":"heap_memory_usage: 112970488\nnon_heap_memory_usage: 131267200\nloaded_class_count: 15406\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794215254000,"args":{"JVM stats":"heap_memory_usage: 113267848\nnon_heap_memory_usage: 131242368\nloaded_class_count: 15406\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794215255000,"args":{"JVM stats":"heap_memory_usage: 113267848\nnon_heap_memory_usage: 131242368\nloaded_class_count: 15406\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794215262000,"args":{"JVM stats":"heap_memory_usage: 113418512\nnon_heap_memory_usage: 131237120\nloaded_class_count: 15408\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794216024000,"args":{"JVM stats":"heap_memory_usage: 144426664\nnon_heap_memory_usage: 133339000\nloaded_class_count: 15449\nthread_count: 48\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794217062000,"args":{"JVM stats":"heap_memory_usage: 300683520\nnon_heap_memory_usage: 135483704\nloaded_class_count: 15460\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794217284000,"args":{"JVM stats":"heap_memory_usage: 351248568\nnon_heap_memory_usage: 135941928\nloaded_class_count: 15469\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794217287000,"args":{"JVM stats":"heap_memory_usage: 351398880\nnon_heap_memory_usage: 135943544\nloaded_class_count: 15469\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794218187000,"args":{"JVM stats":"heap_memory_usage: 375655888\nnon_heap_memory_usage: 136323072\nloaded_class_count: 15471\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794218397000,"args":{"JVM stats":"heap_memory_usage: 379030600\nnon_heap_memory_usage: 136261488\nloaded_class_count: 15471\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794218399000,"args":{"JVM stats":"heap_memory_usage: 379034712\nnon_heap_memory_usage: 136202552\nloaded_class_count: 15472\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794218410000,"args":{"JVM stats":"heap_memory_usage: 379840928\nnon_heap_memory_usage: 136192440\nloaded_class_count: 15472\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794218413000,"args":{"JVM stats":"heap_memory_usage: 379840928\nnon_heap_memory_usage: 136177544\nloaded_class_count: 15472\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794219572000,"args":{"JVM stats":"heap_memory_usage: 193721824\nnon_heap_memory_usage: 136702408\nloaded_class_count: 15472\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 93\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794219574000,"args":{"JVM stats":"heap_memory_usage: 195977832\nnon_heap_memory_usage: 136702408\nloaded_class_count: 15472\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794219590000,"args":{"JVM stats":"heap_memory_usage: 196113856\nnon_heap_memory_usage: 136630936\nloaded_class_count: 15472\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":5,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200669000,"dur":5000},{"pid":1,"tid":5,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200675000,"dur":8000},{"pid":1,"tid":5,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200683000,"dur":2000},{"pid":1,"tid":5,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200683000,"dur":2000},{"pid":1,"tid":5,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200762000,"dur":4000},{"pid":1,"tid":5,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200766000,"dur":1000},{"pid":1,"tid":5,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200768000,"dur":1000},{"pid":1,"tid":5,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200769000,"dur":1000},{"pid":1,"tid":5,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200770000,"dur":100},{"pid":1,"tid":5,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200770000,"dur":2000},{"pid":1,"tid":5,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200772000,"dur":100},{"pid":1,"tid":5,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200772000,"dur":1000},{"pid":1,"tid":5,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200773000,"dur":3000},{"pid":1,"tid":5,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200776000,"dur":1000},{"pid":1,"tid":5,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200777000,"dur":100},{"pid":1,"tid":5,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200777000,"dur":100},{"pid":1,"tid":5,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200777000,"dur":28000},{"pid":1,"tid":5,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200805000,"dur":3000},{"pid":1,"tid":5,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200808000,"dur":5000},{"pid":1,"tid":5,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200814000,"dur":2000},{"pid":1,"tid":5,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200816000,"dur":100},{"pid":1,"tid":5,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200767000,"dur":49000},{"pid":1,"tid":5,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200816000,"dur":4000},{"pid":1,"tid":5,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200822000,"dur":100},{"pid":1,"tid":5,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200822000,"dur":100},{"pid":1,"tid":5,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200822000,"dur":1000},{"pid":1,"tid":5,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200823000,"dur":100},{"pid":1,"tid":5,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200823000,"dur":100},{"pid":1,"tid":5,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200823000,"dur":100},{"pid":1,"tid":5,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200823000,"dur":1000},{"pid":1,"tid":5,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200824000,"dur":1000},{"pid":1,"tid":5,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200825000,"dur":100},{"pid":1,"tid":5,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200825000,"dur":100},{"pid":1,"tid":5,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200825000,"dur":22000},{"pid":1,"tid":5,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200847000,"dur":1000},{"pid":1,"tid":5,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200848000,"dur":2000},{"pid":1,"tid":5,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200851000,"dur":2000},{"pid":1,"tid":5,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200854000,"dur":100},{"pid":1,"tid":5,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794200820000,"dur":34000},{"pid":1,"tid":5,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200854000,"dur":6000},{"pid":1,"tid":5,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200860000,"dur":13000},{"pid":1,"tid":5,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200762000,"dur":114000},{"pid":1,"tid":5,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200876000,"dur":19000},{"pid":1,"tid":5,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794200688000,"dur":207000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200916000,"dur":100},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200917000,"dur":52000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200970000,"dur":5000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200975000,"dur":3000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200979000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200980000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200981000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200982000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200983000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794200985000,"dur":32000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794201018000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794201019000,"dur":35000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794201056000,"dur":100},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794201058000,"dur":545000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794201604000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: java pre compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794201605000,"dur":21000},{"pid":1,"tid":0,"id":62,"name":"task: android java compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794201627000,"dur":14000},{"pid":1,"tid":0,"id":63,"name":"task: external native build json","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794201642000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: external native build","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794201643000,"dur":13605000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794215249000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794215250000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794215253000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794215255000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794215256000,"dur":6000},{"pid":1,"tid":7,"id":71,"name":"transform prep: dex archive builder","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518794215304000,"dur":7000},{"pid":1,"tid":7,"id":72,"name":"transform: dex archive builder","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518794215311000,"dur":613000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794215262000,"dur":762000},{"pid":1,"tid":7,"id":74,"name":"transform prep: external libs merger","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518794216033000,"dur":3000},{"pid":1,"tid":7,"id":75,"name":"transform: external libs merger","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518794216036000,"dur":1013000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794216026000,"dur":1036000},{"pid":1,"tid":7,"id":77,"name":"transform prep: dex merger","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518794217075000,"dur":2000},{"pid":1,"tid":7,"id":78,"name":"transform: dex merger","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518794217078000,"dur":191000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794217063000,"dur":221000},{"pid":1,"tid":0,"id":79,"name":"task: merge source set folders","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794217285000,"dur":2000},{"pid":1,"tid":7,"id":81,"name":"transform prep: merge java resources","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794217488000,"dur":5000},{"pid":1,"tid":7,"id":82,"name":"transform: merge java resources","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794217493000,"dur":448000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794217288000,"dur":898000},{"pid":1,"tid":8,"id":84,"name":"transform prep: strip debug symbol","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794218194000,"dur":100},{"pid":1,"tid":8,"id":85,"name":"transform: strip debug symbol","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794218195000,"dur":150000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794218188000,"dur":209000},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794218398000,"dur":100},{"pid":1,"tid":0,"id":87,"name":"task: transform","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794218399000,"dur":11000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794218410000,"dur":2000},{"pid":1,"tid":0,"id":89,"name":"task: package application","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794218414000,"dur":1158000},{"pid":1,"tid":0,"id":90,"name":"task: unknown task type","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794219574000,"dur":100},{"pid":1,"tid":5,"id":91,"name":"base plugin build finished","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 138453\n apk_size: 8076108\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794219580000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-59-590.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-59-590.rawproto
new file mode 100644
index 00000000..b44569de
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-16-59-590.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-27-938.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-27-938.json
new file mode 100644
index 00000000..0c404319
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-27-938.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245256000,"args":{"JVM stats":"heap_memory_usage: 256876728\nnon_heap_memory_usage: 136548032\nloaded_class_count: 15481\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245400000,"args":{"JVM stats":"heap_memory_usage: 271297304\nnon_heap_memory_usage: 137053688\nloaded_class_count: 15506\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245456000,"args":{"JVM stats":"heap_memory_usage: 278169200\nnon_heap_memory_usage: 137195552\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245460000,"args":{"JVM stats":"heap_memory_usage: 278481544\nnon_heap_memory_usage: 137204816\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245465000,"args":{"JVM stats":"heap_memory_usage: 278793808\nnon_heap_memory_usage: 137209080\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245466000,"args":{"JVM stats":"heap_memory_usage: 278793808\nnon_heap_memory_usage: 137211240\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245467000,"args":{"JVM stats":"heap_memory_usage: 278793808\nnon_heap_memory_usage: 137216384\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245468000,"args":{"JVM stats":"heap_memory_usage: 278793808\nnon_heap_memory_usage: 137216384\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245468001,"args":{"JVM stats":"heap_memory_usage: 278793808\nnon_heap_memory_usage: 137221056\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245469000,"args":{"JVM stats":"heap_memory_usage: 278793808\nnon_heap_memory_usage: 137226208\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245505000,"args":{"JVM stats":"heap_memory_usage: 282541800\nnon_heap_memory_usage: 137233032\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245506000,"args":{"JVM stats":"heap_memory_usage: 282541800\nnon_heap_memory_usage: 137233032\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245511000,"args":{"JVM stats":"heap_memory_usage: 283792328\nnon_heap_memory_usage: 137233032\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245513000,"args":{"JVM stats":"heap_memory_usage: 283792328\nnon_heap_memory_usage: 137256256\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245520000,"args":{"JVM stats":"heap_memory_usage: 285041576\nnon_heap_memory_usage: 137284144\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245520001,"args":{"JVM stats":"heap_memory_usage: 285353840\nnon_heap_memory_usage: 137287512\nloaded_class_count: 15506\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245535000,"args":{"JVM stats":"heap_memory_usage: 285666104\nnon_heap_memory_usage: 137315152\nloaded_class_count: 15507\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245543000,"args":{"JVM stats":"heap_memory_usage: 286290936\nnon_heap_memory_usage: 137332504\nloaded_class_count: 15511\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794245544000,"args":{"JVM stats":"heap_memory_usage: 286290936\nnon_heap_memory_usage: 137332504\nloaded_class_count: 15511\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794247920000,"args":{"JVM stats":"heap_memory_usage: 288797536\nnon_heap_memory_usage: 137455976\nloaded_class_count: 15516\nthread_count: 47\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794247938000,"args":{"JVM stats":"heap_memory_usage: 291927920\nnon_heap_memory_usage: 137525344\nloaded_class_count: 15527\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":5,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245256000,"dur":3000},{"pid":1,"tid":5,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245259000,"dur":6000},{"pid":1,"tid":5,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245265000,"dur":1000},{"pid":1,"tid":5,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245265000,"dur":1000},{"pid":1,"tid":5,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245273000,"dur":5000},{"pid":1,"tid":5,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245278000,"dur":1000},{"pid":1,"tid":5,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245280000,"dur":1000},{"pid":1,"tid":5,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245281000,"dur":100},{"pid":1,"tid":5,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245281000,"dur":100},{"pid":1,"tid":5,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245281000,"dur":1000},{"pid":1,"tid":5,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245282000,"dur":100},{"pid":1,"tid":5,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245282000,"dur":1000},{"pid":1,"tid":5,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245283000,"dur":2000},{"pid":1,"tid":5,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245285000,"dur":100},{"pid":1,"tid":5,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245285000,"dur":1000},{"pid":1,"tid":5,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245286000,"dur":100},{"pid":1,"tid":5,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245286000,"dur":24000},{"pid":1,"tid":5,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245310000,"dur":2000},{"pid":1,"tid":5,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245312000,"dur":4000},{"pid":1,"tid":5,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245317000,"dur":1000},{"pid":1,"tid":5,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245318000,"dur":1000},{"pid":1,"tid":5,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245279000,"dur":40000},{"pid":1,"tid":5,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245319000,"dur":3000},{"pid":1,"tid":5,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245323000,"dur":100},{"pid":1,"tid":5,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245323000,"dur":100},{"pid":1,"tid":5,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245323000,"dur":100},{"pid":1,"tid":5,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245323000,"dur":1000},{"pid":1,"tid":5,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245324000,"dur":100},{"pid":1,"tid":5,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245324000,"dur":100},{"pid":1,"tid":5,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245324000,"dur":2000},{"pid":1,"tid":5,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245326000,"dur":100},{"pid":1,"tid":5,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245326000,"dur":100},{"pid":1,"tid":5,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245326000,"dur":100},{"pid":1,"tid":5,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245326000,"dur":23000},{"pid":1,"tid":5,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245349000,"dur":100},{"pid":1,"tid":5,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245349000,"dur":2000},{"pid":1,"tid":5,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245351000,"dur":1000},{"pid":1,"tid":5,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245352000,"dur":1000},{"pid":1,"tid":5,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794245322000,"dur":31000},{"pid":1,"tid":5,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245353000,"dur":2000},{"pid":1,"tid":5,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245355000,"dur":8000},{"pid":1,"tid":5,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245273000,"dur":92000},{"pid":1,"tid":5,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245365000,"dur":12000},{"pid":1,"tid":5,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794245268000,"dur":109000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245400000,"dur":100},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245401000,"dur":55000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245456000,"dur":4000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245461000,"dur":3000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245465000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245466000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245467000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245468000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245468000,"dur":1000},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245469000,"dur":36000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245505000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245507000,"dur":4000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245512000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245514000,"dur":6000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245520000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: java pre compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245521000,"dur":14000},{"pid":1,"tid":0,"id":62,"name":"task: android java compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245535000,"dur":8000},{"pid":1,"tid":0,"id":63,"name":"task: external native build json","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794245543000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: external native build","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: true\n"},"ph":"X","ts":1518794245545000,"dur":2375000},{"pid":1,"tid":5,"id":65,"name":"base plugin build finished","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794247932000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-27-938.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-27-938.rawproto
new file mode 100644
index 00000000..4f828751
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-27-938.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-51-716.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-51-716.json
new file mode 100644
index 00000000..21c34394
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-51-716.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261030000,"args":{"JVM stats":"heap_memory_usage: 349455800\nnon_heap_memory_usage: 137388248\nloaded_class_count: 15580\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261214000,"args":{"JVM stats":"heap_memory_usage: 361942752\nnon_heap_memory_usage: 137811400\nloaded_class_count: 15594\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261215000,"args":{"JVM stats":"heap_memory_usage: 361942752\nnon_heap_memory_usage: 137813672\nloaded_class_count: 15594\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261264000,"args":{"JVM stats":"heap_memory_usage: 368507112\nnon_heap_memory_usage: 137811400\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261270000,"args":{"JVM stats":"heap_memory_usage: 368819384\nnon_heap_memory_usage: 137830000\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261274000,"args":{"JVM stats":"heap_memory_usage: 369444032\nnon_heap_memory_usage: 137829304\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261275000,"args":{"JVM stats":"heap_memory_usage: 369444032\nnon_heap_memory_usage: 137824376\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261276000,"args":{"JVM stats":"heap_memory_usage: 369444032\nnon_heap_memory_usage: 137822712\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261277000,"args":{"JVM stats":"heap_memory_usage: 369444032\nnon_heap_memory_usage: 137736424\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261278000,"args":{"JVM stats":"heap_memory_usage: 369444032\nnon_heap_memory_usage: 137738472\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261279000,"args":{"JVM stats":"heap_memory_usage: 369444032\nnon_heap_memory_usage: 137738472\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261320000,"args":{"JVM stats":"heap_memory_usage: 373818816\nnon_heap_memory_usage: 137754800\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261322000,"args":{"JVM stats":"heap_memory_usage: 373818816\nnon_heap_memory_usage: 137754800\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261396000,"args":{"JVM stats":"heap_memory_usage: 379229096\nnon_heap_memory_usage: 137960144\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261401000,"args":{"JVM stats":"heap_memory_usage: 379229096\nnon_heap_memory_usage: 137960144\nloaded_class_count: 15595\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261982000,"args":{"JVM stats":"heap_memory_usage: 398360984\nnon_heap_memory_usage: 138157440\nloaded_class_count: 15595\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794261984000,"args":{"JVM stats":"heap_memory_usage: 398360984\nnon_heap_memory_usage: 138151840\nloaded_class_count: 15595\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262001000,"args":{"JVM stats":"heap_memory_usage: 399386288\nnon_heap_memory_usage: 138166024\nloaded_class_count: 15595\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262014000,"args":{"JVM stats":"heap_memory_usage: 400010944\nnon_heap_memory_usage: 138184688\nloaded_class_count: 15595\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262017000,"args":{"JVM stats":"heap_memory_usage: 400010944\nnon_heap_memory_usage: 138191680\nloaded_class_count: 15595\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262019000,"args":{"JVM stats":"heap_memory_usage: 400010944\nnon_heap_memory_usage: 138196024\nloaded_class_count: 15596\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262020000,"args":{"JVM stats":"heap_memory_usage: 400010944\nnon_heap_memory_usage: 138196024\nloaded_class_count: 15596\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262024000,"args":{"JVM stats":"heap_memory_usage: 400323184\nnon_heap_memory_usage: 138223984\nloaded_class_count: 15596\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262029000,"args":{"JVM stats":"heap_memory_usage: 400323184\nnon_heap_memory_usage: 138254120\nloaded_class_count: 15597\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262036000,"args":{"JVM stats":"heap_memory_usage: 400643776\nnon_heap_memory_usage: 138264640\nloaded_class_count: 15597\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262037000,"args":{"JVM stats":"heap_memory_usage: 400643776\nnon_heap_memory_usage: 138268928\nloaded_class_count: 15597\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262047000,"args":{"JVM stats":"heap_memory_usage: 401268616\nnon_heap_memory_usage: 138270144\nloaded_class_count: 15597\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262062000,"args":{"JVM stats":"heap_memory_usage: 401893120\nnon_heap_memory_usage: 138273976\nloaded_class_count: 15597\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794262064000,"args":{"JVM stats":"heap_memory_usage: 401893120\nnon_heap_memory_usage: 138273976\nloaded_class_count: 15597\nthread_count: 46\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266402000,"args":{"JVM stats":"heap_memory_usage: 403470720\nnon_heap_memory_usage: 138341880\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266404000,"args":{"JVM stats":"heap_memory_usage: 403470720\nnon_heap_memory_usage: 138341880\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266853000,"args":{"JVM stats":"heap_memory_usage: 425180192\nnon_heap_memory_usage: 138437472\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266858000,"args":{"JVM stats":"heap_memory_usage: 425492464\nnon_heap_memory_usage: 138438400\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266876000,"args":{"JVM stats":"heap_memory_usage: 426430416\nnon_heap_memory_usage: 138438400\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266884000,"args":{"JVM stats":"heap_memory_usage: 426742688\nnon_heap_memory_usage: 138444384\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266915000,"args":{"JVM stats":"heap_memory_usage: 428616536\nnon_heap_memory_usage: 138461080\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266920000,"args":{"JVM stats":"heap_memory_usage: 428616536\nnon_heap_memory_usage: 138461080\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266922000,"args":{"JVM stats":"heap_memory_usage: 428616536\nnon_heap_memory_usage: 138462032\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266925000,"args":{"JVM stats":"heap_memory_usage: 428616536\nnon_heap_memory_usage: 138475408\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266927000,"args":{"JVM stats":"heap_memory_usage: 428616536\nnon_heap_memory_usage: 138475408\nloaded_class_count: 15597\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266929000,"args":{"JVM stats":"heap_memory_usage: 428928856\nnon_heap_memory_usage: 138482760\nloaded_class_count: 15598\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794266952000,"args":{"JVM stats":"heap_memory_usage: 429553400\nnon_heap_memory_usage: 138488328\nloaded_class_count: 15598\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794268221000,"args":{"JVM stats":"heap_memory_usage: 551565960\nnon_heap_memory_usage: 140639216\nloaded_class_count: 15606\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794269223000,"args":{"JVM stats":"heap_memory_usage: 351880480\nnon_heap_memory_usage: 140945720\nloaded_class_count: 15606\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 28\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794269458000,"args":{"JVM stats":"heap_memory_usage: 418327736\nnon_heap_memory_usage: 141175008\nloaded_class_count: 15608\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794269475000,"args":{"JVM stats":"heap_memory_usage: 418528480\nnon_heap_memory_usage: 141179488\nloaded_class_count: 15608\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794269913000,"args":{"JVM stats":"heap_memory_usage: 445716288\nnon_heap_memory_usage: 141247368\nloaded_class_count: 15609\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794270718000,"args":{"JVM stats":"heap_memory_usage: 526512160\nnon_heap_memory_usage: 141347400\nloaded_class_count: 15611\nthread_count: 55\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794270830000,"args":{"JVM stats":"heap_memory_usage: 527999120\nnon_heap_memory_usage: 141365688\nloaded_class_count: 15611\nthread_count: 53\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794271686000,"args":{"JVM stats":"heap_memory_usage: 488191432\nnon_heap_memory_usage: 141340696\nloaded_class_count: 15611\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 33\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794271696000,"args":{"JVM stats":"heap_memory_usage: 491866104\nnon_heap_memory_usage: 141393064\nloaded_class_count: 15611\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794271697000,"args":{"JVM stats":"heap_memory_usage: 491866104\nnon_heap_memory_usage: 141393064\nloaded_class_count: 15611\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794271698000,"args":{"JVM stats":"heap_memory_usage: 491866104\nnon_heap_memory_usage: 141393064\nloaded_class_count: 15611\nthread_count: 51\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794271716000,"args":{"JVM stats":"heap_memory_usage: 493097864\nnon_heap_memory_usage: 141418480\nloaded_class_count: 15612\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":5,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261030000,"dur":7000},{"pid":1,"tid":5,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261037000,"dur":10000},{"pid":1,"tid":5,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261047000,"dur":2000},{"pid":1,"tid":5,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261047000,"dur":2000},{"pid":1,"tid":5,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261058000,"dur":4000},{"pid":1,"tid":5,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261062000,"dur":1000},{"pid":1,"tid":5,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261064000,"dur":1000},{"pid":1,"tid":5,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261065000,"dur":100},{"pid":1,"tid":5,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261065000,"dur":1000},{"pid":1,"tid":5,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261066000,"dur":1000},{"pid":1,"tid":5,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261067000,"dur":1000},{"pid":1,"tid":5,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261068000,"dur":1000},{"pid":1,"tid":5,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261069000,"dur":4000},{"pid":1,"tid":5,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261073000,"dur":100},{"pid":1,"tid":5,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261073000,"dur":1000},{"pid":1,"tid":5,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261074000,"dur":100},{"pid":1,"tid":5,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261074000,"dur":50000},{"pid":1,"tid":5,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261124000,"dur":3000},{"pid":1,"tid":5,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261128000,"dur":9000},{"pid":1,"tid":5,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261138000,"dur":2000},{"pid":1,"tid":5,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261140000,"dur":1000},{"pid":1,"tid":5,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794261063000,"dur":78000},{"pid":1,"tid":5,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261141000,"dur":3000},{"pid":1,"tid":5,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261144000,"dur":9000},{"pid":1,"tid":5,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261058000,"dur":96000},{"pid":1,"tid":5,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261154000,"dur":16000},{"pid":1,"tid":5,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794261056000,"dur":114000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794261210000,"dur":4000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261215000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261217000,"dur":47000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261265000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261271000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261274000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261275000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261276000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261277000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261279000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261280000,"dur":40000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261321000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794261323000,"dur":73000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261399000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794261402000,"dur":580000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794261983000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794261985000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262002000,"dur":12000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262015000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262018000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262019000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262020000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262026000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794262030000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262036000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262038000,"dur":9000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262047000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794262063000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794262064000,"dur":4337000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794266402000,"dur":2000},{"pid":1,"tid":9,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794266486000,"dur":5000},{"pid":1,"tid":9,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794266491000,"dur":256000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794266405000,"dur":448000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794266856000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794266861000,"dur":15000},{"pid":1,"tid":9,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794266880000,"dur":2000},{"pid":1,"tid":9,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794266882000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794266877000,"dur":7000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794266886000,"dur":29000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794266917000,"dur":3000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794266921000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794266923000,"dur":1000},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794266926000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794266928000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794266930000,"dur":22000},{"pid":1,"tid":10,"id":75,"name":"transform prep: dex archive builder","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518794266977000,"dur":4000},{"pid":1,"tid":10,"id":76,"name":"transform: dex archive builder","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1518794266981000,"dur":1156000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794266954000,"dur":1267000},{"pid":1,"tid":10,"id":78,"name":"transform prep: external libs merger","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518794268241000,"dur":5000},{"pid":1,"tid":10,"id":79,"name":"transform: external libs merger","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1518794268246000,"dur":966000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794268221000,"dur":1002000},{"pid":1,"tid":10,"id":81,"name":"transform prep: dex merger","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518794269268000,"dur":5000},{"pid":1,"tid":10,"id":82,"name":"transform: dex merger","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1518794269273000,"dur":137000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794269226000,"dur":224000},{"pid":1,"tid":0,"id":83,"name":"task: validate signing","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794269465000,"dur":10000},{"pid":1,"tid":10,"id":85,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518794269485000,"dur":5000},{"pid":1,"tid":10,"id":86,"name":"transform: instant run dependencies apk builder","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1518794269490000,"dur":420000},{"pid":1,"tid":0,"id":84,"name":"task: transform","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794269477000,"dur":435000},{"pid":1,"tid":11,"id":88,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518794269921000,"dur":4000},{"pid":1,"tid":11,"id":89,"name":"transform: instant run slice split apk builder","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1518794269925000,"dur":792000},{"pid":1,"tid":0,"id":87,"name":"task: transform","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794269915000,"dur":803000},{"pid":1,"tid":11,"id":91,"name":"transform prep: strip debug symbol","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794270726000,"dur":100},{"pid":1,"tid":11,"id":92,"name":"transform: strip debug symbol","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794270726000,"dur":78000},{"pid":1,"tid":0,"id":90,"name":"task: transform","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794270719000,"dur":111000},{"pid":1,"tid":0,"id":93,"name":"task: package application","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794270831000,"dur":854000},{"pid":1,"tid":0,"id":94,"name":"task: build info writer","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794271686000,"dur":10000},{"pid":1,"tid":0,"id":95,"name":"task: unknown task type","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794271696000,"dur":100},{"pid":1,"tid":0,"id":96,"name":"task: unknown task type","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794271697000,"dur":1000},{"pid":1,"tid":5,"id":97,"name":"base plugin build finished","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 70671\n apk_size: 6911279\n resources_ap_size: 358996\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794271708000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-51-716.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-51-716.rawproto
new file mode 100644
index 00000000..13b323ee
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-17-51-716.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-20-40-119.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-20-40-119.json
new file mode 100644
index 00000000..f9c8d7f4
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-20-40-119.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434256000,"args":{"JVM stats":"heap_memory_usage: 554419728\nnon_heap_memory_usage: 141444456\nloaded_class_count: 15620\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434380000,"args":{"JVM stats":"heap_memory_usage: 567553544\nnon_heap_memory_usage: 141738168\nloaded_class_count: 15629\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434381000,"args":{"JVM stats":"heap_memory_usage: 567804912\nnon_heap_memory_usage: 141750456\nloaded_class_count: 15629\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434437000,"args":{"JVM stats":"heap_memory_usage: 575097976\nnon_heap_memory_usage: 141789016\nloaded_class_count: 15630\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434444000,"args":{"JVM stats":"heap_memory_usage: 575600944\nnon_heap_memory_usage: 141803960\nloaded_class_count: 15633\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434453000,"args":{"JVM stats":"heap_memory_usage: 575852360\nnon_heap_memory_usage: 141856704\nloaded_class_count: 15644\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434454000,"args":{"JVM stats":"heap_memory_usage: 575852360\nnon_heap_memory_usage: 141857328\nloaded_class_count: 15644\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434459000,"args":{"JVM stats":"heap_memory_usage: 575852360\nnon_heap_memory_usage: 141887736\nloaded_class_count: 15653\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434460000,"args":{"JVM stats":"heap_memory_usage: 575852360\nnon_heap_memory_usage: 141887736\nloaded_class_count: 15653\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434462000,"args":{"JVM stats":"heap_memory_usage: 576103776\nnon_heap_memory_usage: 141890928\nloaded_class_count: 15654\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434464000,"args":{"JVM stats":"heap_memory_usage: 576103776\nnon_heap_memory_usage: 141890928\nloaded_class_count: 15654\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434511000,"args":{"JVM stats":"heap_memory_usage: 579623968\nnon_heap_memory_usage: 141983216\nloaded_class_count: 15664\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434514000,"args":{"JVM stats":"heap_memory_usage: 579623968\nnon_heap_memory_usage: 141983216\nloaded_class_count: 15664\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434518000,"args":{"JVM stats":"heap_memory_usage: 579875624\nnon_heap_memory_usage: 141985056\nloaded_class_count: 15664\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434520000,"args":{"JVM stats":"heap_memory_usage: 580126960\nnon_heap_memory_usage: 142014176\nloaded_class_count: 15671\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434534000,"args":{"JVM stats":"heap_memory_usage: 581383880\nnon_heap_memory_usage: 142100536\nloaded_class_count: 15697\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434535000,"args":{"JVM stats":"heap_memory_usage: 581383880\nnon_heap_memory_usage: 142100536\nloaded_class_count: 15697\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434550000,"args":{"JVM stats":"heap_memory_usage: 581886552\nnon_heap_memory_usage: 142104176\nloaded_class_count: 15697\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434559000,"args":{"JVM stats":"heap_memory_usage: 582389272\nnon_heap_memory_usage: 142107624\nloaded_class_count: 15697\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434562000,"args":{"JVM stats":"heap_memory_usage: 582389272\nnon_heap_memory_usage: 142117376\nloaded_class_count: 15697\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434564000,"args":{"JVM stats":"heap_memory_usage: 582389272\nnon_heap_memory_usage: 142127624\nloaded_class_count: 15698\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434565000,"args":{"JVM stats":"heap_memory_usage: 582640608\nnon_heap_memory_usage: 142128520\nloaded_class_count: 15698\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434570000,"args":{"JVM stats":"heap_memory_usage: 582640608\nnon_heap_memory_usage: 142146696\nloaded_class_count: 15698\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434575000,"args":{"JVM stats":"heap_memory_usage: 582891976\nnon_heap_memory_usage: 142203088\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434582000,"args":{"JVM stats":"heap_memory_usage: 583394808\nnon_heap_memory_usage: 142203088\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434584000,"args":{"JVM stats":"heap_memory_usage: 583394808\nnon_heap_memory_usage: 142204432\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434595000,"args":{"JVM stats":"heap_memory_usage: 583897552\nnon_heap_memory_usage: 142215280\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434614000,"args":{"JVM stats":"heap_memory_usage: 584651616\nnon_heap_memory_usage: 142215280\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794434616000,"args":{"JVM stats":"heap_memory_usage: 584651616\nnon_heap_memory_usage: 142222928\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439072000,"args":{"JVM stats":"heap_memory_usage: 585908864\nnon_heap_memory_usage: 142418832\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439073000,"args":{"JVM stats":"heap_memory_usage: 585908864\nnon_heap_memory_usage: 142424232\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439377000,"args":{"JVM stats":"heap_memory_usage: 609162104\nnon_heap_memory_usage: 142399704\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439378000,"args":{"JVM stats":"heap_memory_usage: 609162104\nnon_heap_memory_usage: 142403864\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439386000,"args":{"JVM stats":"heap_memory_usage: 609916888\nnon_heap_memory_usage: 142403864\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439389000,"args":{"JVM stats":"heap_memory_usage: 610193360\nnon_heap_memory_usage: 142413624\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439402000,"args":{"JVM stats":"heap_memory_usage: 611450504\nnon_heap_memory_usage: 142421936\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439403000,"args":{"JVM stats":"heap_memory_usage: 611450504\nnon_heap_memory_usage: 142423064\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439404000,"args":{"JVM stats":"heap_memory_usage: 611450504\nnon_heap_memory_usage: 142423064\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439404001,"args":{"JVM stats":"heap_memory_usage: 611450504\nnon_heap_memory_usage: 142423064\nloaded_class_count: 15720\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439405000,"args":{"JVM stats":"heap_memory_usage: 611450504\nnon_heap_memory_usage: 142425424\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439406000,"args":{"JVM stats":"heap_memory_usage: 611450504\nnon_heap_memory_usage: 142425456\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439417000,"args":{"JVM stats":"heap_memory_usage: 612204976\nnon_heap_memory_usage: 142428080\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439434000,"args":{"JVM stats":"heap_memory_usage: 613713504\nnon_heap_memory_usage: 142428080\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439441000,"args":{"JVM stats":"heap_memory_usage: 614216336\nnon_heap_memory_usage: 142428720\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439450000,"args":{"JVM stats":"heap_memory_usage: 614719168\nnon_heap_memory_usage: 142429992\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439451000,"args":{"JVM stats":"heap_memory_usage: 614719168\nnon_heap_memory_usage: 142429992\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439453000,"args":{"JVM stats":"heap_memory_usage: 614970560\nnon_heap_memory_usage: 142430824\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439455000,"args":{"JVM stats":"heap_memory_usage: 614970560\nnon_heap_memory_usage: 142432080\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794439509000,"args":{"JVM stats":"heap_memory_usage: 616478896\nnon_heap_memory_usage: 142441072\nloaded_class_count: 15721\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794440094000,"args":{"JVM stats":"heap_memory_usage: 280935592\nnon_heap_memory_usage: 142600256\nloaded_class_count: 15736\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 10\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794440100000,"args":{"JVM stats":"heap_memory_usage: 282891944\nnon_heap_memory_usage: 142611984\nloaded_class_count: 15736\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794440100001,"args":{"JVM stats":"heap_memory_usage: 282891944\nnon_heap_memory_usage: 142614696\nloaded_class_count: 15736\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794440101000,"args":{"JVM stats":"heap_memory_usage: 282891944\nnon_heap_memory_usage: 142614696\nloaded_class_count: 15736\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794440119000,"args":{"JVM stats":"heap_memory_usage: 283753408\nnon_heap_memory_usage: 142641328\nloaded_class_count: 15736\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":12,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434257000,"dur":6000},{"pid":1,"tid":12,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434263000,"dur":5000},{"pid":1,"tid":12,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434268000,"dur":1000},{"pid":1,"tid":12,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434268000,"dur":1000},{"pid":1,"tid":12,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434273000,"dur":2000},{"pid":1,"tid":12,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434275000,"dur":1000},{"pid":1,"tid":12,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434278000,"dur":1000},{"pid":1,"tid":12,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434279000,"dur":100},{"pid":1,"tid":12,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434279000,"dur":1000},{"pid":1,"tid":12,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434280000,"dur":1000},{"pid":1,"tid":12,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434281000,"dur":100},{"pid":1,"tid":12,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434281000,"dur":100},{"pid":1,"tid":12,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434281000,"dur":3000},{"pid":1,"tid":12,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434284000,"dur":100},{"pid":1,"tid":12,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434284000,"dur":1000},{"pid":1,"tid":12,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434285000,"dur":100},{"pid":1,"tid":12,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434285000,"dur":28000},{"pid":1,"tid":12,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434313000,"dur":1000},{"pid":1,"tid":12,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434314000,"dur":5000},{"pid":1,"tid":12,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434321000,"dur":2000},{"pid":1,"tid":12,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434323000,"dur":1000},{"pid":1,"tid":12,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794434276000,"dur":48000},{"pid":1,"tid":12,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434324000,"dur":4000},{"pid":1,"tid":12,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434328000,"dur":10000},{"pid":1,"tid":12,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434273000,"dur":66000},{"pid":1,"tid":12,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434339000,"dur":11000},{"pid":1,"tid":12,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794434271000,"dur":79000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794434376000,"dur":4000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434381000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434381000,"dur":56000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434438000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434445000,"dur":8000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434453000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434455000,"dur":4000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434459000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434461000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434464000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434465000,"dur":46000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434513000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434515000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434518000,"dur":2000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434521000,"dur":13000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794434535000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434535000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434551000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434560000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434563000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434565000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434566000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434570000,"dur":5000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794434575000,"dur":7000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434582000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434584000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434596000,"dur":17000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794434615000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794434616000,"dur":4456000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439072000,"dur":1000},{"pid":1,"tid":13,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794439149000,"dur":5000},{"pid":1,"tid":13,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794439154000,"dur":139000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794439074000,"dur":303000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794439378000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439379000,"dur":7000},{"pid":1,"tid":14,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794439388000,"dur":100},{"pid":1,"tid":14,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794439388000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794439386000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439389000,"dur":13000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439403000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439404000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794439404000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439405000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439406000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439407000,"dur":10000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439418000,"dur":16000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439434000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439442000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794439451000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439452000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794439454000,"dur":1000},{"pid":1,"tid":14,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794439458000,"dur":1000},{"pid":1,"tid":14,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794439459000,"dur":32000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794439456000,"dur":53000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794439510000,"dur":583000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794440095000,"dur":4000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794440100000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794440101000,"dur":100},{"pid":1,"tid":12,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794440110000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-20-40-119.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-20-40-119.rawproto
new file mode 100644
index 00000000..b21b0b01
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-20-40-119.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-26-22-094.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-26-22-094.json
new file mode 100644
index 00000000..07a8a88d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-26-22-094.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794776859000,"args":{"JVM stats":"heap_memory_usage: 345488496\nnon_heap_memory_usage: 143144480\nloaded_class_count: 15753\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794776973000,"args":{"JVM stats":"heap_memory_usage: 358232664\nnon_heap_memory_usage: 143283080\nloaded_class_count: 15753\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794776974000,"args":{"JVM stats":"heap_memory_usage: 358476608\nnon_heap_memory_usage: 143283080\nloaded_class_count: 15753\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777029000,"args":{"JVM stats":"heap_memory_usage: 365561560\nnon_heap_memory_usage: 143392472\nloaded_class_count: 15753\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777034000,"args":{"JVM stats":"heap_memory_usage: 366293672\nnon_heap_memory_usage: 143409896\nloaded_class_count: 15753\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777038000,"args":{"JVM stats":"heap_memory_usage: 366293672\nnon_heap_memory_usage: 143411080\nloaded_class_count: 15753\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777039000,"args":{"JVM stats":"heap_memory_usage: 366537616\nnon_heap_memory_usage: 143430232\nloaded_class_count: 15756\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777040000,"args":{"JVM stats":"heap_memory_usage: 366537616\nnon_heap_memory_usage: 143430520\nloaded_class_count: 15756\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777041000,"args":{"JVM stats":"heap_memory_usage: 366537616\nnon_heap_memory_usage: 143430520\nloaded_class_count: 15756\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777042000,"args":{"JVM stats":"heap_memory_usage: 366537616\nnon_heap_memory_usage: 143430552\nloaded_class_count: 15756\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777043000,"args":{"JVM stats":"heap_memory_usage: 366537616\nnon_heap_memory_usage: 143432568\nloaded_class_count: 15756\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777073000,"args":{"JVM stats":"heap_memory_usage: 370198656\nnon_heap_memory_usage: 143514760\nloaded_class_count: 15756\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777074000,"args":{"JVM stats":"heap_memory_usage: 370198656\nnon_heap_memory_usage: 143538264\nloaded_class_count: 15759\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777079000,"args":{"JVM stats":"heap_memory_usage: 370442656\nnon_heap_memory_usage: 143639904\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777080000,"args":{"JVM stats":"heap_memory_usage: 370686632\nnon_heap_memory_usage: 143658432\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777090000,"args":{"JVM stats":"heap_memory_usage: 371662640\nnon_heap_memory_usage: 143677808\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777090001,"args":{"JVM stats":"heap_memory_usage: 371662640\nnon_heap_memory_usage: 143677808\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777104000,"args":{"JVM stats":"heap_memory_usage: 372151568\nnon_heap_memory_usage: 143721584\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777111000,"args":{"JVM stats":"heap_memory_usage: 372639656\nnon_heap_memory_usage: 143721584\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777113000,"args":{"JVM stats":"heap_memory_usage: 372639656\nnon_heap_memory_usage: 143721584\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777114000,"args":{"JVM stats":"heap_memory_usage: 372883600\nnon_heap_memory_usage: 143721584\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777114001,"args":{"JVM stats":"heap_memory_usage: 372883600\nnon_heap_memory_usage: 143721584\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777117000,"args":{"JVM stats":"heap_memory_usage: 372883600\nnon_heap_memory_usage: 143723696\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777119000,"args":{"JVM stats":"heap_memory_usage: 373127584\nnon_heap_memory_usage: 143727920\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777122000,"args":{"JVM stats":"heap_memory_usage: 373371528\nnon_heap_memory_usage: 143730528\nloaded_class_count: 15772\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777124000,"args":{"JVM stats":"heap_memory_usage: 373371528\nnon_heap_memory_usage: 143731736\nloaded_class_count: 15773\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777131000,"args":{"JVM stats":"heap_memory_usage: 373859488\nnon_heap_memory_usage: 143732952\nloaded_class_count: 15773\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777145000,"args":{"JVM stats":"heap_memory_usage: 375084440\nnon_heap_memory_usage: 143732952\nloaded_class_count: 15773\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794777146000,"args":{"JVM stats":"heap_memory_usage: 375084440\nnon_heap_memory_usage: 143732952\nloaded_class_count: 15773\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781102000,"args":{"JVM stats":"heap_memory_usage: 376317792\nnon_heap_memory_usage: 143747440\nloaded_class_count: 15773\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781104000,"args":{"JVM stats":"heap_memory_usage: 376317792\nnon_heap_memory_usage: 143749880\nloaded_class_count: 15773\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781406000,"args":{"JVM stats":"heap_memory_usage: 399443176\nnon_heap_memory_usage: 143864256\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781408000,"args":{"JVM stats":"heap_memory_usage: 399443176\nnon_heap_memory_usage: 143877208\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781415000,"args":{"JVM stats":"heap_memory_usage: 400179312\nnon_heap_memory_usage: 143900280\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781418000,"args":{"JVM stats":"heap_memory_usage: 400423280\nnon_heap_memory_usage: 143900280\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781433000,"args":{"JVM stats":"heap_memory_usage: 401399432\nnon_heap_memory_usage: 143912760\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781435000,"args":{"JVM stats":"heap_memory_usage: 401399432\nnon_heap_memory_usage: 143913104\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781435001,"args":{"JVM stats":"heap_memory_usage: 401399432\nnon_heap_memory_usage: 143914064\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781436000,"args":{"JVM stats":"heap_memory_usage: 401643408\nnon_heap_memory_usage: 143914768\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781437000,"args":{"JVM stats":"heap_memory_usage: 401887352\nnon_heap_memory_usage: 143918408\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781438000,"args":{"JVM stats":"heap_memory_usage: 401887352\nnon_heap_memory_usage: 143920152\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781447000,"args":{"JVM stats":"heap_memory_usage: 402619832\nnon_heap_memory_usage: 143948224\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781464000,"args":{"JVM stats":"heap_memory_usage: 403839920\nnon_heap_memory_usage: 143948224\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781471000,"args":{"JVM stats":"heap_memory_usage: 404083896\nnon_heap_memory_usage: 143948224\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781479000,"args":{"JVM stats":"heap_memory_usage: 404819896\nnon_heap_memory_usage: 143949976\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781480000,"args":{"JVM stats":"heap_memory_usage: 404819896\nnon_heap_memory_usage: 143955352\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781482000,"args":{"JVM stats":"heap_memory_usage: 404819896\nnon_heap_memory_usage: 143969024\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781484000,"args":{"JVM stats":"heap_memory_usage: 405064240\nnon_heap_memory_usage: 143969728\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794781542000,"args":{"JVM stats":"heap_memory_usage: 406285000\nnon_heap_memory_usage: 143971816\nloaded_class_count: 15775\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794782078000,"args":{"JVM stats":"heap_memory_usage: 504511448\nnon_heap_memory_usage: 143957176\nloaded_class_count: 15777\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794782080000,"args":{"JVM stats":"heap_memory_usage: 504755408\nnon_heap_memory_usage: 143955904\nloaded_class_count: 15777\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794782080001,"args":{"JVM stats":"heap_memory_usage: 504755408\nnon_heap_memory_usage: 143955904\nloaded_class_count: 15777\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794782081000,"args":{"JVM stats":"heap_memory_usage: 504755408\nnon_heap_memory_usage: 143957056\nloaded_class_count: 15777\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794782094000,"args":{"JVM stats":"heap_memory_usage: 505734184\nnon_heap_memory_usage: 143970240\nloaded_class_count: 15777\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":15,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776860000,"dur":4000},{"pid":1,"tid":15,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776864000,"dur":5000},{"pid":1,"tid":15,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776869000,"dur":1000},{"pid":1,"tid":15,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776869000,"dur":1000},{"pid":1,"tid":15,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776874000,"dur":3000},{"pid":1,"tid":15,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776877000,"dur":100},{"pid":1,"tid":15,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776879000,"dur":100},{"pid":1,"tid":15,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776879000,"dur":1000},{"pid":1,"tid":15,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776880000,"dur":100},{"pid":1,"tid":15,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776880000,"dur":100},{"pid":1,"tid":15,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776880000,"dur":1000},{"pid":1,"tid":15,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776881000,"dur":100},{"pid":1,"tid":15,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776881000,"dur":3000},{"pid":1,"tid":15,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776884000,"dur":1000},{"pid":1,"tid":15,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776885000,"dur":100},{"pid":1,"tid":15,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776885000,"dur":100},{"pid":1,"tid":15,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776885000,"dur":28000},{"pid":1,"tid":15,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776913000,"dur":1000},{"pid":1,"tid":15,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776914000,"dur":9000},{"pid":1,"tid":15,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776924000,"dur":2000},{"pid":1,"tid":15,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776926000,"dur":100},{"pid":1,"tid":15,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794776877000,"dur":49000},{"pid":1,"tid":15,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776926000,"dur":4000},{"pid":1,"tid":15,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776930000,"dur":8000},{"pid":1,"tid":15,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776874000,"dur":65000},{"pid":1,"tid":15,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776939000,"dur":9000},{"pid":1,"tid":15,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794776872000,"dur":76000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794776970000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794776973000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794776974000,"dur":55000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777029000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777035000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777039000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777040000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777041000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777042000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777042000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777043000,"dur":30000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777073000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777075000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777079000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777081000,"dur":8000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794777090000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777091000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777105000,"dur":6000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777112000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777113000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777114000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777114000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777117000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794777119000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777123000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777124000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777131000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794777146000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794777146000,"dur":3956000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781102000,"dur":2000},{"pid":1,"tid":16,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794781180000,"dur":6000},{"pid":1,"tid":16,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794781187000,"dur":141000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794781104000,"dur":302000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794781407000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781408000,"dur":7000},{"pid":1,"tid":16,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794781417000,"dur":1000},{"pid":1,"tid":16,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794781418000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794781415000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781419000,"dur":14000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781434000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781435000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794781435000,"dur":1000},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781436000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781437000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781438000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781448000,"dur":16000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781464000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781471000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794781479000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781480000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794781482000,"dur":2000},{"pid":1,"tid":16,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794781487000,"dur":100},{"pid":1,"tid":16,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794781487000,"dur":37000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794781484000,"dur":57000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794781542000,"dur":536000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794782078000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794782080000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794782080000,"dur":1000},{"pid":1,"tid":15,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794782088000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-26-22-094.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-26-22-094.rawproto
new file mode 100644
index 00000000..27622c04
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-26-22-094.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-08-431.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-08-431.json
new file mode 100644
index 00000000..e6d89c15
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-08-431.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823241000,"args":{"JVM stats":"heap_memory_usage: 561091432\nnon_heap_memory_usage: 144352712\nloaded_class_count: 15784\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823332000,"args":{"JVM stats":"heap_memory_usage: 573917792\nnon_heap_memory_usage: 144680920\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823333000,"args":{"JVM stats":"heap_memory_usage: 574161816\nnon_heap_memory_usage: 144682584\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823378000,"args":{"JVM stats":"heap_memory_usage: 581251280\nnon_heap_memory_usage: 144785368\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823382000,"args":{"JVM stats":"heap_memory_usage: 581739328\nnon_heap_memory_usage: 144789336\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823385000,"args":{"JVM stats":"heap_memory_usage: 581984312\nnon_heap_memory_usage: 144800120\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823386000,"args":{"JVM stats":"heap_memory_usage: 581984312\nnon_heap_memory_usage: 144804888\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823387000,"args":{"JVM stats":"heap_memory_usage: 582228288\nnon_heap_memory_usage: 144812976\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823388000,"args":{"JVM stats":"heap_memory_usage: 582228288\nnon_heap_memory_usage: 144837488\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823389000,"args":{"JVM stats":"heap_memory_usage: 582228288\nnon_heap_memory_usage: 144838960\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823390000,"args":{"JVM stats":"heap_memory_usage: 582228288\nnon_heap_memory_usage: 144850480\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823420000,"args":{"JVM stats":"heap_memory_usage: 585891192\nnon_heap_memory_usage: 144888880\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823421000,"args":{"JVM stats":"heap_memory_usage: 585891192\nnon_heap_memory_usage: 144888976\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823424000,"args":{"JVM stats":"heap_memory_usage: 586135168\nnon_heap_memory_usage: 144906632\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823425000,"args":{"JVM stats":"heap_memory_usage: 586135168\nnon_heap_memory_usage: 144906632\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823431000,"args":{"JVM stats":"heap_memory_usage: 587355288\nnon_heap_memory_usage: 144911240\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823431001,"args":{"JVM stats":"heap_memory_usage: 587355288\nnon_heap_memory_usage: 144911240\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823444000,"args":{"JVM stats":"heap_memory_usage: 587599232\nnon_heap_memory_usage: 144912008\nloaded_class_count: 15807\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823453000,"args":{"JVM stats":"heap_memory_usage: 588331208\nnon_heap_memory_usage: 144986416\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823454000,"args":{"JVM stats":"heap_memory_usage: 588331208\nnon_heap_memory_usage: 144986416\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823455000,"args":{"JVM stats":"heap_memory_usage: 588331208\nnon_heap_memory_usage: 144987120\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823455001,"args":{"JVM stats":"heap_memory_usage: 588331208\nnon_heap_memory_usage: 144987120\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823458000,"args":{"JVM stats":"heap_memory_usage: 588819648\nnon_heap_memory_usage: 145016136\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823460000,"args":{"JVM stats":"heap_memory_usage: 589063624\nnon_heap_memory_usage: 145030112\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823463000,"args":{"JVM stats":"heap_memory_usage: 589307568\nnon_heap_memory_usage: 145048128\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823465000,"args":{"JVM stats":"heap_memory_usage: 589307568\nnon_heap_memory_usage: 145060224\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823473000,"args":{"JVM stats":"heap_memory_usage: 589796088\nnon_heap_memory_usage: 145085376\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823489000,"args":{"JVM stats":"heap_memory_usage: 590772016\nnon_heap_memory_usage: 145090880\nloaded_class_count: 15822\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794823492000,"args":{"JVM stats":"heap_memory_usage: 590772016\nnon_heap_memory_usage: 145117240\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827336000,"args":{"JVM stats":"heap_memory_usage: 591994096\nnon_heap_memory_usage: 145117240\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827338000,"args":{"JVM stats":"heap_memory_usage: 592238040\nnon_heap_memory_usage: 145117240\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827663000,"args":{"JVM stats":"heap_memory_usage: 615118160\nnon_heap_memory_usage: 145232304\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827664000,"args":{"JVM stats":"heap_memory_usage: 615118160\nnon_heap_memory_usage: 145233072\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827670000,"args":{"JVM stats":"heap_memory_usage: 615854600\nnon_heap_memory_usage: 145233072\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827674000,"args":{"JVM stats":"heap_memory_usage: 616098584\nnon_heap_memory_usage: 145234224\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827691000,"args":{"JVM stats":"heap_memory_usage: 617319320\nnon_heap_memory_usage: 145252336\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827692000,"args":{"JVM stats":"heap_memory_usage: 617319320\nnon_heap_memory_usage: 145252336\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827693000,"args":{"JVM stats":"heap_memory_usage: 617563296\nnon_heap_memory_usage: 145254768\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827694000,"args":{"JVM stats":"heap_memory_usage: 617563296\nnon_heap_memory_usage: 145259056\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827695000,"args":{"JVM stats":"heap_memory_usage: 617563296\nnon_heap_memory_usage: 145261424\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827698000,"args":{"JVM stats":"heap_memory_usage: 617807240\nnon_heap_memory_usage: 145261456\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827708000,"args":{"JVM stats":"heap_memory_usage: 618537336\nnon_heap_memory_usage: 145264632\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827746000,"args":{"JVM stats":"heap_memory_usage: 198756520\nnon_heap_memory_usage: 145331544\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 15\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827787000,"args":{"JVM stats":"heap_memory_usage: 199225248\nnon_heap_memory_usage: 145361592\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827797000,"args":{"JVM stats":"heap_memory_usage: 199693960\nnon_heap_memory_usage: 145388200\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827798000,"args":{"JVM stats":"heap_memory_usage: 199693960\nnon_heap_memory_usage: 145388200\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827800000,"args":{"JVM stats":"heap_memory_usage: 199693960\nnon_heap_memory_usage: 145388200\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827802000,"args":{"JVM stats":"heap_memory_usage: 199693960\nnon_heap_memory_usage: 145388200\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794827866000,"args":{"JVM stats":"heap_memory_usage: 201343128\nnon_heap_memory_usage: 145389800\nloaded_class_count: 15832\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794828414000,"args":{"JVM stats":"heap_memory_usage: 299573832\nnon_heap_memory_usage: 145424536\nloaded_class_count: 15832\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794828416000,"args":{"JVM stats":"heap_memory_usage: 299698072\nnon_heap_memory_usage: 145425944\nloaded_class_count: 15832\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794828416001,"args":{"JVM stats":"heap_memory_usage: 299698072\nnon_heap_memory_usage: 145425944\nloaded_class_count: 15832\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794828417000,"args":{"JVM stats":"heap_memory_usage: 299698072\nnon_heap_memory_usage: 145425944\nloaded_class_count: 15832\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794828431000,"args":{"JVM stats":"heap_memory_usage: 299815936\nnon_heap_memory_usage: 145499776\nloaded_class_count: 15845\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":15,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823241000,"dur":4000},{"pid":1,"tid":15,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823245000,"dur":2000},{"pid":1,"tid":15,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823247000,"dur":1000},{"pid":1,"tid":15,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823247000,"dur":1000},{"pid":1,"tid":15,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823251000,"dur":2000},{"pid":1,"tid":15,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823253000,"dur":100},{"pid":1,"tid":15,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823254000,"dur":1000},{"pid":1,"tid":15,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823255000,"dur":1000},{"pid":1,"tid":15,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823256000,"dur":100},{"pid":1,"tid":15,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823256000,"dur":100},{"pid":1,"tid":15,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823256000,"dur":1000},{"pid":1,"tid":15,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823257000,"dur":100},{"pid":1,"tid":15,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823257000,"dur":2000},{"pid":1,"tid":15,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823259000,"dur":100},{"pid":1,"tid":15,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823259000,"dur":1000},{"pid":1,"tid":15,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823260000,"dur":100},{"pid":1,"tid":15,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823260000,"dur":23000},{"pid":1,"tid":15,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823283000,"dur":1000},{"pid":1,"tid":15,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823284000,"dur":5000},{"pid":1,"tid":15,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823291000,"dur":2000},{"pid":1,"tid":15,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823293000,"dur":100},{"pid":1,"tid":15,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794823253000,"dur":40000},{"pid":1,"tid":15,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823293000,"dur":6000},{"pid":1,"tid":15,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823299000,"dur":6000},{"pid":1,"tid":15,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823250000,"dur":57000},{"pid":1,"tid":15,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823308000,"dur":7000},{"pid":1,"tid":15,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794823249000,"dur":66000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794823330000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823333000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823333000,"dur":44000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823378000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823383000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823386000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823387000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823388000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823389000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823389000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823390000,"dur":30000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823420000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823421000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823424000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823425000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794823431000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823431000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823444000,"dur":9000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823453000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823454000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823455000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823455000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823459000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794823460000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823464000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823465000,"dur":8000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823474000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794823490000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794823493000,"dur":3843000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827337000,"dur":1000},{"pid":1,"tid":17,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794827415000,"dur":4000},{"pid":1,"tid":17,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794827419000,"dur":163000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794827339000,"dur":324000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794827663000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827664000,"dur":6000},{"pid":1,"tid":17,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794827673000,"dur":1000},{"pid":1,"tid":17,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794827674000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794827670000,"dur":4000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827675000,"dur":16000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827692000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827693000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794827693000,"dur":1000},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827694000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827697000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827698000,"dur":10000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827708000,"dur":38000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827747000,"dur":40000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827788000,"dur":9000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794827797000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827799000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794827800000,"dur":2000},{"pid":1,"tid":17,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794827804000,"dur":1000},{"pid":1,"tid":17,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794827805000,"dur":40000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794827802000,"dur":64000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794827866000,"dur":548000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794828414000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794828416000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794828417000,"dur":100},{"pid":1,"tid":15,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794828425000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-08-431.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-08-431.rawproto
new file mode 100644
index 00000000..fc424b33
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-08-431.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-34-956.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-34-956.json
new file mode 100644
index 00000000..ae460690
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-34-956.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854475000,"args":{"JVM stats":"heap_memory_usage: 357497352\nnon_heap_memory_usage: 145778032\nloaded_class_count: 15855\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854565000,"args":{"JVM stats":"heap_memory_usage: 369007832\nnon_heap_memory_usage: 145931792\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854566000,"args":{"JVM stats":"heap_memory_usage: 369007832\nnon_heap_memory_usage: 145931792\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854615000,"args":{"JVM stats":"heap_memory_usage: 375859280\nnon_heap_memory_usage: 146035960\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854620000,"args":{"JVM stats":"heap_memory_usage: 376330880\nnon_heap_memory_usage: 146035960\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854624000,"args":{"JVM stats":"heap_memory_usage: 376802672\nnon_heap_memory_usage: 146035960\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854625000,"args":{"JVM stats":"heap_memory_usage: 376802672\nnon_heap_memory_usage: 146035960\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854626000,"args":{"JVM stats":"heap_memory_usage: 376802672\nnon_heap_memory_usage: 146035960\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854627000,"args":{"JVM stats":"heap_memory_usage: 377038336\nnon_heap_memory_usage: 146035960\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854629000,"args":{"JVM stats":"heap_memory_usage: 377038336\nnon_heap_memory_usage: 146035960\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854629001,"args":{"JVM stats":"heap_memory_usage: 377038336\nnon_heap_memory_usage: 146036664\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854676000,"args":{"JVM stats":"heap_memory_usage: 380810408\nnon_heap_memory_usage: 146036664\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854677000,"args":{"JVM stats":"heap_memory_usage: 380810408\nnon_heap_memory_usage: 146036664\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854682000,"args":{"JVM stats":"heap_memory_usage: 381046104\nnon_heap_memory_usage: 146038880\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854683000,"args":{"JVM stats":"heap_memory_usage: 381046104\nnon_heap_memory_usage: 146038880\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854689000,"args":{"JVM stats":"heap_memory_usage: 382224560\nnon_heap_memory_usage: 146053888\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854690000,"args":{"JVM stats":"heap_memory_usage: 382224560\nnon_heap_memory_usage: 146053888\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854704000,"args":{"JVM stats":"heap_memory_usage: 382695840\nnon_heap_memory_usage: 146102136\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854711000,"args":{"JVM stats":"heap_memory_usage: 383402848\nnon_heap_memory_usage: 146108856\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854714000,"args":{"JVM stats":"heap_memory_usage: 383402848\nnon_heap_memory_usage: 146111944\nloaded_class_count: 15855\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854716000,"args":{"JVM stats":"heap_memory_usage: 383638496\nnon_heap_memory_usage: 146134128\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854717000,"args":{"JVM stats":"heap_memory_usage: 383638496\nnon_heap_memory_usage: 146126384\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854722000,"args":{"JVM stats":"heap_memory_usage: 383638496\nnon_heap_memory_usage: 146126384\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854724000,"args":{"JVM stats":"heap_memory_usage: 383874232\nnon_heap_memory_usage: 146126384\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854727000,"args":{"JVM stats":"heap_memory_usage: 384109848\nnon_heap_memory_usage: 146142152\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854728000,"args":{"JVM stats":"heap_memory_usage: 384109848\nnon_heap_memory_usage: 146142152\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854737000,"args":{"JVM stats":"heap_memory_usage: 384816912\nnon_heap_memory_usage: 146142152\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854751000,"args":{"JVM stats":"heap_memory_usage: 385523784\nnon_heap_memory_usage: 146142152\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854752000,"args":{"JVM stats":"heap_memory_usage: 385523784\nnon_heap_memory_usage: 146142440\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854810000,"args":{"JVM stats":"heap_memory_usage: 386701896\nnon_heap_memory_usage: 146198368\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854811000,"args":{"JVM stats":"heap_memory_usage: 386937560\nnon_heap_memory_usage: 146205064\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854819000,"args":{"JVM stats":"heap_memory_usage: 388352888\nnon_heap_memory_usage: 146205736\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854819001,"args":{"JVM stats":"heap_memory_usage: 388352888\nnon_heap_memory_usage: 146218920\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854826000,"args":{"JVM stats":"heap_memory_usage: 389295856\nnon_heap_memory_usage: 146213544\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854828000,"args":{"JVM stats":"heap_memory_usage: 389295856\nnon_heap_memory_usage: 146214032\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854844000,"args":{"JVM stats":"heap_memory_usage: 390475128\nnon_heap_memory_usage: 146230696\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854845000,"args":{"JVM stats":"heap_memory_usage: 390475128\nnon_heap_memory_usage: 146230696\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854846000,"args":{"JVM stats":"heap_memory_usage: 390710776\nnon_heap_memory_usage: 146230696\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854846001,"args":{"JVM stats":"heap_memory_usage: 390710776\nnon_heap_memory_usage: 146230696\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854848000,"args":{"JVM stats":"heap_memory_usage: 390710776\nnon_heap_memory_usage: 146230696\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854850000,"args":{"JVM stats":"heap_memory_usage: 390710776\nnon_heap_memory_usage: 146230696\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854863000,"args":{"JVM stats":"heap_memory_usage: 391418000\nnon_heap_memory_usage: 146230696\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854883000,"args":{"JVM stats":"heap_memory_usage: 392832040\nnon_heap_memory_usage: 146232360\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854891000,"args":{"JVM stats":"heap_memory_usage: 393303568\nnon_heap_memory_usage: 146232360\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854899000,"args":{"JVM stats":"heap_memory_usage: 393774864\nnon_heap_memory_usage: 146232360\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854900000,"args":{"JVM stats":"heap_memory_usage: 393774864\nnon_heap_memory_usage: 146232360\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854903000,"args":{"JVM stats":"heap_memory_usage: 394010544\nnon_heap_memory_usage: 146233064\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854905000,"args":{"JVM stats":"heap_memory_usage: 394246200\nnon_heap_memory_usage: 146233064\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854908000,"args":{"JVM stats":"heap_memory_usage: 394246200\nnon_heap_memory_usage: 146245456\nloaded_class_count: 15858\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854941000,"args":{"JVM stats":"heap_memory_usage: 394717464\nnon_heap_memory_usage: 146277856\nloaded_class_count: 15863\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854943000,"args":{"JVM stats":"heap_memory_usage: 394953160\nnon_heap_memory_usage: 146284192\nloaded_class_count: 15863\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854943001,"args":{"JVM stats":"heap_memory_usage: 394953160\nnon_heap_memory_usage: 146284192\nloaded_class_count: 15863\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854944000,"args":{"JVM stats":"heap_memory_usage: 394953160\nnon_heap_memory_usage: 146284192\nloaded_class_count: 15863\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794854956000,"args":{"JVM stats":"heap_memory_usage: 396260616\nnon_heap_memory_usage: 146297744\nloaded_class_count: 15863\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":15,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854475000,"dur":3000},{"pid":1,"tid":15,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854478000,"dur":3000},{"pid":1,"tid":15,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854481000,"dur":1000},{"pid":1,"tid":15,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854481000,"dur":1000},{"pid":1,"tid":15,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854486000,"dur":2000},{"pid":1,"tid":15,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854488000,"dur":100},{"pid":1,"tid":15,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854489000,"dur":100},{"pid":1,"tid":15,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854489000,"dur":100},{"pid":1,"tid":15,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854489000,"dur":100},{"pid":1,"tid":15,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854489000,"dur":1000},{"pid":1,"tid":15,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854490000,"dur":100},{"pid":1,"tid":15,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854490000,"dur":100},{"pid":1,"tid":15,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854490000,"dur":2000},{"pid":1,"tid":15,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854492000,"dur":100},{"pid":1,"tid":15,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854492000,"dur":100},{"pid":1,"tid":15,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854492000,"dur":100},{"pid":1,"tid":15,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854492000,"dur":22000},{"pid":1,"tid":15,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854514000,"dur":1000},{"pid":1,"tid":15,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854515000,"dur":8000},{"pid":1,"tid":15,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854524000,"dur":2000},{"pid":1,"tid":15,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854526000,"dur":100},{"pid":1,"tid":15,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794854488000,"dur":38000},{"pid":1,"tid":15,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854526000,"dur":4000},{"pid":1,"tid":15,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854530000,"dur":9000},{"pid":1,"tid":15,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854485000,"dur":55000},{"pid":1,"tid":15,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854540000,"dur":7000},{"pid":1,"tid":15,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854484000,"dur":63000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854562000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854565000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854566000,"dur":49000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854616000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854621000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854624000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854625000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854627000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854628000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854629000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854630000,"dur":46000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854677000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854678000,"dur":4000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854683000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854684000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854689000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854690000,"dur":14000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854704000,"dur":7000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854712000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854714000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854717000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854718000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854722000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854724000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854727000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854728000,"dur":8000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854737000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854751000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854752000,"dur":57000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854810000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854812000,"dur":7000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854819000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854820000,"dur":6000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854827000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854828000,"dur":16000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854844000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854845000,"dur":1000},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854846000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854847000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854849000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854851000,"dur":12000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854863000,"dur":20000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854884000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854891000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854899000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854901000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854904000,"dur":1000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854906000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794854909000,"dur":32000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854941000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854943000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794854944000,"dur":100},{"pid":1,"tid":15,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794854951000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-34-956.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-34-956.rawproto
new file mode 100644
index 00000000..d68cdaca
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-27-34-956.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-28-17-682.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-28-17-682.json
new file mode 100644
index 00000000..bc925682
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-28-17-682.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897222000,"args":{"JVM stats":"heap_memory_usage: 451387072\nnon_heap_memory_usage: 146549512\nloaded_class_count: 15870\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897312000,"args":{"JVM stats":"heap_memory_usage: 464203144\nnon_heap_memory_usage: 146749216\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897312001,"args":{"JVM stats":"heap_memory_usage: 464203144\nnon_heap_memory_usage: 146750752\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897353000,"args":{"JVM stats":"heap_memory_usage: 470816784\nnon_heap_memory_usage: 146769576\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897358000,"args":{"JVM stats":"heap_memory_usage: 471052736\nnon_heap_memory_usage: 146768768\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897361000,"args":{"JVM stats":"heap_memory_usage: 471524384\nnon_heap_memory_usage: 146760152\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897362000,"args":{"JVM stats":"heap_memory_usage: 471524384\nnon_heap_memory_usage: 146765528\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897363000,"args":{"JVM stats":"heap_memory_usage: 471524384\nnon_heap_memory_usage: 146763288\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897364000,"args":{"JVM stats":"heap_memory_usage: 471760088\nnon_heap_memory_usage: 146761112\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897365000,"args":{"JVM stats":"heap_memory_usage: 471760088\nnon_heap_memory_usage: 146761112\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897366000,"args":{"JVM stats":"heap_memory_usage: 471760088\nnon_heap_memory_usage: 146761112\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897397000,"args":{"JVM stats":"heap_memory_usage: 475539784\nnon_heap_memory_usage: 146758552\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897398000,"args":{"JVM stats":"heap_memory_usage: 475539784\nnon_heap_memory_usage: 146759672\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897401000,"args":{"JVM stats":"heap_memory_usage: 475775704\nnon_heap_memory_usage: 146749200\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897402000,"args":{"JVM stats":"heap_memory_usage: 475775704\nnon_heap_memory_usage: 146749200\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897408000,"args":{"JVM stats":"heap_memory_usage: 477190840\nnon_heap_memory_usage: 146755056\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897409000,"args":{"JVM stats":"heap_memory_usage: 477190840\nnon_heap_memory_usage: 146755056\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897423000,"args":{"JVM stats":"heap_memory_usage: 477430568\nnon_heap_memory_usage: 146748592\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897430000,"args":{"JVM stats":"heap_memory_usage: 478374152\nnon_heap_memory_usage: 146748592\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897431000,"args":{"JVM stats":"heap_memory_usage: 478609800\nnon_heap_memory_usage: 146748592\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897432000,"args":{"JVM stats":"heap_memory_usage: 478609800\nnon_heap_memory_usage: 146749456\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897433000,"args":{"JVM stats":"heap_memory_usage: 478609800\nnon_heap_memory_usage: 146749456\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897436000,"args":{"JVM stats":"heap_memory_usage: 478609800\nnon_heap_memory_usage: 146749456\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897439000,"args":{"JVM stats":"heap_memory_usage: 478845840\nnon_heap_memory_usage: 146750352\nloaded_class_count: 15870\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897442000,"args":{"JVM stats":"heap_memory_usage: 479097912\nnon_heap_memory_usage: 146755072\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897443000,"args":{"JVM stats":"heap_memory_usage: 479333560\nnon_heap_memory_usage: 146755072\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897450000,"args":{"JVM stats":"heap_memory_usage: 479805592\nnon_heap_memory_usage: 146774856\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897464000,"args":{"JVM stats":"heap_memory_usage: 480748128\nnon_heap_memory_usage: 146774856\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897466000,"args":{"JVM stats":"heap_memory_usage: 480748128\nnon_heap_memory_usage: 146774856\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897527000,"args":{"JVM stats":"heap_memory_usage: 481928536\nnon_heap_memory_usage: 146850120\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897530000,"args":{"JVM stats":"heap_memory_usage: 481928536\nnon_heap_memory_usage: 146850120\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897542000,"args":{"JVM stats":"heap_memory_usage: 483106864\nnon_heap_memory_usage: 146815320\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897543000,"args":{"JVM stats":"heap_memory_usage: 483106864\nnon_heap_memory_usage: 146816664\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897555000,"args":{"JVM stats":"heap_memory_usage: 483578176\nnon_heap_memory_usage: 146794648\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897557000,"args":{"JVM stats":"heap_memory_usage: 483813816\nnon_heap_memory_usage: 146794648\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897575000,"args":{"JVM stats":"heap_memory_usage: 485228048\nnon_heap_memory_usage: 146794648\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897578000,"args":{"JVM stats":"heap_memory_usage: 485228048\nnon_heap_memory_usage: 146787520\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897579000,"args":{"JVM stats":"heap_memory_usage: 485228048\nnon_heap_memory_usage: 146787520\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897580000,"args":{"JVM stats":"heap_memory_usage: 485228048\nnon_heap_memory_usage: 146792192\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897581000,"args":{"JVM stats":"heap_memory_usage: 485228048\nnon_heap_memory_usage: 146760512\nloaded_class_count: 15872\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897584000,"args":{"JVM stats":"heap_memory_usage: 485463664\nnon_heap_memory_usage: 146712992\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897597000,"args":{"JVM stats":"heap_memory_usage: 486170976\nnon_heap_memory_usage: 146684440\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897620000,"args":{"JVM stats":"heap_memory_usage: 487586400\nnon_heap_memory_usage: 146666456\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897630000,"args":{"JVM stats":"heap_memory_usage: 488057672\nnon_heap_memory_usage: 146669800\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897640000,"args":{"JVM stats":"heap_memory_usage: 488764600\nnon_heap_memory_usage: 146673152\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897643000,"args":{"JVM stats":"heap_memory_usage: 488764600\nnon_heap_memory_usage: 146678208\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897646000,"args":{"JVM stats":"heap_memory_usage: 488764600\nnon_heap_memory_usage: 146699680\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897648000,"args":{"JVM stats":"heap_memory_usage: 489001256\nnon_heap_memory_usage: 146716008\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897652000,"args":{"JVM stats":"heap_memory_usage: 489237032\nnon_heap_memory_usage: 146718944\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897661000,"args":{"JVM stats":"heap_memory_usage: 489708264\nnon_heap_memory_usage: 146729088\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897664000,"args":{"JVM stats":"heap_memory_usage: 489708264\nnon_heap_memory_usage: 146735488\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897664001,"args":{"JVM stats":"heap_memory_usage: 489708264\nnon_heap_memory_usage: 146736000\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897665000,"args":{"JVM stats":"heap_memory_usage: 489708264\nnon_heap_memory_usage: 146736000\nloaded_class_count: 15873\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794897682000,"args":{"JVM stats":"heap_memory_usage: 491015688\nnon_heap_memory_usage: 146815256\nloaded_class_count: 15875\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":15,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897223000,"dur":7000},{"pid":1,"tid":15,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897230000,"dur":3000},{"pid":1,"tid":15,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897233000,"dur":100},{"pid":1,"tid":15,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897233000,"dur":100},{"pid":1,"tid":15,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897236000,"dur":3000},{"pid":1,"tid":15,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897239000,"dur":100},{"pid":1,"tid":15,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897240000,"dur":100},{"pid":1,"tid":15,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897240000,"dur":100},{"pid":1,"tid":15,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897240000,"dur":100},{"pid":1,"tid":15,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897240000,"dur":1000},{"pid":1,"tid":15,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897241000,"dur":100},{"pid":1,"tid":15,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897241000,"dur":100},{"pid":1,"tid":15,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897241000,"dur":2000},{"pid":1,"tid":15,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897243000,"dur":100},{"pid":1,"tid":15,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897243000,"dur":100},{"pid":1,"tid":15,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897243000,"dur":100},{"pid":1,"tid":15,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897243000,"dur":24000},{"pid":1,"tid":15,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897267000,"dur":100},{"pid":1,"tid":15,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897267000,"dur":5000},{"pid":1,"tid":15,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897274000,"dur":2000},{"pid":1,"tid":15,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897276000,"dur":100},{"pid":1,"tid":15,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794897239000,"dur":37000},{"pid":1,"tid":15,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897276000,"dur":3000},{"pid":1,"tid":15,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897279000,"dur":6000},{"pid":1,"tid":15,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897236000,"dur":50000},{"pid":1,"tid":15,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897287000,"dur":7000},{"pid":1,"tid":15,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897235000,"dur":59000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897310000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897312000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897312000,"dur":41000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897353000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897359000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897362000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897362000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897363000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897364000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897365000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897366000,"dur":31000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897398000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897399000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897402000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897403000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897409000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897410000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897423000,"dur":7000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897431000,"dur":100},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897432000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897432000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897433000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897437000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897439000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897442000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897443000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897451000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897465000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897466000,"dur":61000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897528000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897532000,"dur":10000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897543000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897544000,"dur":11000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897555000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897558000,"dur":17000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897576000,"dur":2000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897579000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897579000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897580000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897582000,"dur":2000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897585000,"dur":12000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897598000,"dur":21000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897621000,"dur":9000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897631000,"dur":9000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897641000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897644000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897646000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897648000,"dur":4000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794897653000,"dur":8000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897661000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897664000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794897664000,"dur":1000},{"pid":1,"tid":15,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794897674000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-28-17-682.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-28-17-682.rawproto
new file mode 100644
index 00000000..eb5dddd1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-28-17-682.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-29-45-593.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-29-45-593.json
new file mode 100644
index 00000000..d47797b2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-29-45-593.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980564000,"args":{"JVM stats":"heap_memory_usage: 547372856\nnon_heap_memory_usage: 147325336\nloaded_class_count: 15937\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980646000,"args":{"JVM stats":"heap_memory_usage: 560108400\nnon_heap_memory_usage: 147349904\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980646001,"args":{"JVM stats":"heap_memory_usage: 560108400\nnon_heap_memory_usage: 147349904\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980687000,"args":{"JVM stats":"heap_memory_usage: 567427352\nnon_heap_memory_usage: 147432520\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980692000,"args":{"JVM stats":"heap_memory_usage: 567663000\nnon_heap_memory_usage: 147437128\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980697000,"args":{"JVM stats":"heap_memory_usage: 567898720\nnon_heap_memory_usage: 147446224\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980698000,"args":{"JVM stats":"heap_memory_usage: 567898720\nnon_heap_memory_usage: 147446224\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980699000,"args":{"JVM stats":"heap_memory_usage: 567898720\nnon_heap_memory_usage: 147459248\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980699001,"args":{"JVM stats":"heap_memory_usage: 568134472\nnon_heap_memory_usage: 147459248\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980700000,"args":{"JVM stats":"heap_memory_usage: 568134472\nnon_heap_memory_usage: 147459248\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980700001,"args":{"JVM stats":"heap_memory_usage: 568134472\nnon_heap_memory_usage: 147459248\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980729000,"args":{"JVM stats":"heap_memory_usage: 571674376\nnon_heap_memory_usage: 147480536\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980730000,"args":{"JVM stats":"heap_memory_usage: 571674376\nnon_heap_memory_usage: 147480536\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980733000,"args":{"JVM stats":"heap_memory_usage: 571910080\nnon_heap_memory_usage: 147480536\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980734000,"args":{"JVM stats":"heap_memory_usage: 571910080\nnon_heap_memory_usage: 147480536\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980742000,"args":{"JVM stats":"heap_memory_usage: 573324656\nnon_heap_memory_usage: 147551776\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980742001,"args":{"JVM stats":"heap_memory_usage: 573324656\nnon_heap_memory_usage: 147559016\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980756000,"args":{"JVM stats":"heap_memory_usage: 573795952\nnon_heap_memory_usage: 147630384\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980764000,"args":{"JVM stats":"heap_memory_usage: 574267520\nnon_heap_memory_usage: 147644736\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980765000,"args":{"JVM stats":"heap_memory_usage: 574267520\nnon_heap_memory_usage: 147644736\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980766000,"args":{"JVM stats":"heap_memory_usage: 574267520\nnon_heap_memory_usage: 147644736\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980766001,"args":{"JVM stats":"heap_memory_usage: 574503664\nnon_heap_memory_usage: 147644736\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980769000,"args":{"JVM stats":"heap_memory_usage: 574503664\nnon_heap_memory_usage: 147650200\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980771000,"args":{"JVM stats":"heap_memory_usage: 574739280\nnon_heap_memory_usage: 147659064\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980775000,"args":{"JVM stats":"heap_memory_usage: 574978624\nnon_heap_memory_usage: 147710712\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980777000,"args":{"JVM stats":"heap_memory_usage: 574978624\nnon_heap_memory_usage: 147729056\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980783000,"args":{"JVM stats":"heap_memory_usage: 575449944\nnon_heap_memory_usage: 147761440\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980797000,"args":{"JVM stats":"heap_memory_usage: 576867920\nnon_heap_memory_usage: 147761440\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794980799000,"args":{"JVM stats":"heap_memory_usage: 576867920\nnon_heap_memory_usage: 147766600\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984623000,"args":{"JVM stats":"heap_memory_usage: 578048360\nnon_heap_memory_usage: 147880392\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984626000,"args":{"JVM stats":"heap_memory_usage: 578283976\nnon_heap_memory_usage: 147880392\nloaded_class_count: 15939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984945000,"args":{"JVM stats":"heap_memory_usage: 197452640\nnon_heap_memory_usage: 148053120\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 9\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984946000,"args":{"JVM stats":"heap_memory_usage: 199222872\nnon_heap_memory_usage: 148053120\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984953000,"args":{"JVM stats":"heap_memory_usage: 200802080\nnon_heap_memory_usage: 148058752\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984957000,"args":{"JVM stats":"heap_memory_usage: 201182792\nnon_heap_memory_usage: 148058752\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984970000,"args":{"JVM stats":"heap_memory_usage: 202070432\nnon_heap_memory_usage: 148074304\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984971000,"args":{"JVM stats":"heap_memory_usage: 202070432\nnon_heap_memory_usage: 148075008\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984972000,"args":{"JVM stats":"heap_memory_usage: 202070432\nnon_heap_memory_usage: 148089280\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984972001,"args":{"JVM stats":"heap_memory_usage: 202070432\nnon_heap_memory_usage: 148087488\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984973000,"args":{"JVM stats":"heap_memory_usage: 202070432\nnon_heap_memory_usage: 148083712\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984975000,"args":{"JVM stats":"heap_memory_usage: 202451192\nnon_heap_memory_usage: 148083744\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794984984000,"args":{"JVM stats":"heap_memory_usage: 202831896\nnon_heap_memory_usage: 148095840\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985003000,"args":{"JVM stats":"heap_memory_usage: 204454976\nnon_heap_memory_usage: 148104160\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985012000,"args":{"JVM stats":"heap_memory_usage: 205216408\nnon_heap_memory_usage: 148113952\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985020000,"args":{"JVM stats":"heap_memory_usage: 205597144\nnon_heap_memory_usage: 148113952\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985021000,"args":{"JVM stats":"heap_memory_usage: 205597144\nnon_heap_memory_usage: 148113952\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985023000,"args":{"JVM stats":"heap_memory_usage: 205977880\nnon_heap_memory_usage: 148113952\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985026000,"args":{"JVM stats":"heap_memory_usage: 205977880\nnon_heap_memory_usage: 148117496\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985080000,"args":{"JVM stats":"heap_memory_usage: 207382752\nnon_heap_memory_usage: 148121592\nloaded_class_count: 15940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985577000,"args":{"JVM stats":"heap_memory_usage: 305428864\nnon_heap_memory_usage: 148061784\nloaded_class_count: 15940\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985581000,"args":{"JVM stats":"heap_memory_usage: 305660600\nnon_heap_memory_usage: 148062048\nloaded_class_count: 15940\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985581001,"args":{"JVM stats":"heap_memory_usage: 305660600\nnon_heap_memory_usage: 148064392\nloaded_class_count: 15940\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985581000,"args":{"JVM stats":"heap_memory_usage: 305660600\nnon_heap_memory_usage: 148064392\nloaded_class_count: 15940\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518794985593000,"args":{"JVM stats":"heap_memory_usage: 306587232\nnon_heap_memory_usage: 148079064\nloaded_class_count: 15940\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":18,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980564000,"dur":3000},{"pid":1,"tid":18,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980567000,"dur":2000},{"pid":1,"tid":18,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980569000,"dur":1000},{"pid":1,"tid":18,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980569000,"dur":1000},{"pid":1,"tid":18,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980575000,"dur":3000},{"pid":1,"tid":18,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980578000,"dur":100},{"pid":1,"tid":18,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980579000,"dur":100},{"pid":1,"tid":18,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980579000,"dur":100},{"pid":1,"tid":18,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980579000,"dur":100},{"pid":1,"tid":18,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980579000,"dur":1000},{"pid":1,"tid":18,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980580000,"dur":100},{"pid":1,"tid":18,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980580000,"dur":100},{"pid":1,"tid":18,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980580000,"dur":2000},{"pid":1,"tid":18,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980582000,"dur":100},{"pid":1,"tid":18,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980582000,"dur":100},{"pid":1,"tid":18,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980582000,"dur":100},{"pid":1,"tid":18,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980582000,"dur":23000},{"pid":1,"tid":18,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980605000,"dur":100},{"pid":1,"tid":18,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980605000,"dur":5000},{"pid":1,"tid":18,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980611000,"dur":2000},{"pid":1,"tid":18,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980613000,"dur":100},{"pid":1,"tid":18,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518794980578000,"dur":35000},{"pid":1,"tid":18,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980613000,"dur":3000},{"pid":1,"tid":18,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980616000,"dur":7000},{"pid":1,"tid":18,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980575000,"dur":49000},{"pid":1,"tid":18,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980624000,"dur":7000},{"pid":1,"tid":18,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794980573000,"dur":58000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794980645000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980646000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980647000,"dur":40000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980688000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980693000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980697000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980698000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980699000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980700000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980700000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980701000,"dur":28000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980730000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980730000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980733000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980735000,"dur":7000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794980742000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980743000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980757000,"dur":7000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980764000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980766000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980766000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980767000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980769000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794980771000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980776000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980777000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980783000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794980797000,"dur":2000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794980799000,"dur":3824000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984624000,"dur":1000},{"pid":1,"tid":19,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794984698000,"dur":5000},{"pid":1,"tid":19,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518794984703000,"dur":156000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794984626000,"dur":319000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794984946000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984947000,"dur":6000},{"pid":1,"tid":19,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794984956000,"dur":100},{"pid":1,"tid":19,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518794984956000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794984954000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984957000,"dur":13000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984971000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984972000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794984972000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984973000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984974000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984975000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794984985000,"dur":17000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794985003000,"dur":9000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794985013000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794985021000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794985022000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518794985024000,"dur":2000},{"pid":1,"tid":19,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794985028000,"dur":100},{"pid":1,"tid":19,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518794985028000,"dur":35000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794985026000,"dur":54000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794985081000,"dur":496000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794985578000,"dur":3000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794985581000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518794985581000,"dur":100},{"pid":1,"tid":18,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518794985586000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-29-45-593.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-29-45-593.rawproto
new file mode 100644
index 00000000..984845e2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-29-45-593.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-32-29-323.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-32-29-323.json
new file mode 100644
index 00000000..3e6870f2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-32-29-323.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144076000,"args":{"JVM stats":"heap_memory_usage: 363978392\nnon_heap_memory_usage: 148411016\nloaded_class_count: 15949\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144163000,"args":{"JVM stats":"heap_memory_usage: 376823608\nnon_heap_memory_usage: 148562168\nloaded_class_count: 15949\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144164000,"args":{"JVM stats":"heap_memory_usage: 376823608\nnon_heap_memory_usage: 148584120\nloaded_class_count: 15949\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144210000,"args":{"JVM stats":"heap_memory_usage: 384123632\nnon_heap_memory_usage: 148648384\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144214000,"args":{"JVM stats":"heap_memory_usage: 384578912\nnon_heap_memory_usage: 148662168\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144219000,"args":{"JVM stats":"heap_memory_usage: 384806512\nnon_heap_memory_usage: 148662168\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144220000,"args":{"JVM stats":"heap_memory_usage: 384806512\nnon_heap_memory_usage: 148662168\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144221000,"args":{"JVM stats":"heap_memory_usage: 384806512\nnon_heap_memory_usage: 148662168\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144222000,"args":{"JVM stats":"heap_memory_usage: 384806512\nnon_heap_memory_usage: 148662168\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144222001,"args":{"JVM stats":"heap_memory_usage: 384806512\nnon_heap_memory_usage: 148664088\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144223000,"args":{"JVM stats":"heap_memory_usage: 384806512\nnon_heap_memory_usage: 148664088\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144260000,"args":{"JVM stats":"heap_memory_usage: 388450032\nnon_heap_memory_usage: 148666008\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144261000,"args":{"JVM stats":"heap_memory_usage: 388450032\nnon_heap_memory_usage: 148666008\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144265000,"args":{"JVM stats":"heap_memory_usage: 388677720\nnon_heap_memory_usage: 148668016\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144266000,"args":{"JVM stats":"heap_memory_usage: 388677720\nnon_heap_memory_usage: 148668016\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144272000,"args":{"JVM stats":"heap_memory_usage: 389817976\nnon_heap_memory_usage: 148668016\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144272001,"args":{"JVM stats":"heap_memory_usage: 389817976\nnon_heap_memory_usage: 148668016\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144286000,"args":{"JVM stats":"heap_memory_usage: 390273224\nnon_heap_memory_usage: 148668016\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144292000,"args":{"JVM stats":"heap_memory_usage: 390957128\nnon_heap_memory_usage: 148669272\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144294000,"args":{"JVM stats":"heap_memory_usage: 391184760\nnon_heap_memory_usage: 148674224\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144294001,"args":{"JVM stats":"heap_memory_usage: 391184760\nnon_heap_memory_usage: 148675824\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144295000,"args":{"JVM stats":"heap_memory_usage: 391184760\nnon_heap_memory_usage: 148675824\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144298000,"args":{"JVM stats":"heap_memory_usage: 391867672\nnon_heap_memory_usage: 148676592\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144300000,"args":{"JVM stats":"heap_memory_usage: 391867672\nnon_heap_memory_usage: 148676592\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144305000,"args":{"JVM stats":"heap_memory_usage: 392095416\nnon_heap_memory_usage: 148676592\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144306000,"args":{"JVM stats":"heap_memory_usage: 392324056\nnon_heap_memory_usage: 148676592\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144312000,"args":{"JVM stats":"heap_memory_usage: 392779752\nnon_heap_memory_usage: 148676592\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144325000,"args":{"JVM stats":"heap_memory_usage: 393463240\nnon_heap_memory_usage: 148676592\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795144326000,"args":{"JVM stats":"heap_memory_usage: 393463240\nnon_heap_memory_usage: 148676592\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148323000,"args":{"JVM stats":"heap_memory_usage: 394601712\nnon_heap_memory_usage: 148688112\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148325000,"args":{"JVM stats":"heap_memory_usage: 394601712\nnon_heap_memory_usage: 148688112\nloaded_class_count: 15950\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148625000,"args":{"JVM stats":"heap_memory_usage: 417416048\nnon_heap_memory_usage: 148722424\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148626000,"args":{"JVM stats":"heap_memory_usage: 417643672\nnon_heap_memory_usage: 148722768\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148633000,"args":{"JVM stats":"heap_memory_usage: 418326576\nnon_heap_memory_usage: 148723728\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148636000,"args":{"JVM stats":"heap_memory_usage: 418554224\nnon_heap_memory_usage: 148734704\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148649000,"args":{"JVM stats":"heap_memory_usage: 419464864\nnon_heap_memory_usage: 148734704\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148650000,"args":{"JVM stats":"heap_memory_usage: 419464864\nnon_heap_memory_usage: 148740720\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148650001,"args":{"JVM stats":"heap_memory_usage: 419692488\nnon_heap_memory_usage: 148740720\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148651000,"args":{"JVM stats":"heap_memory_usage: 419692488\nnon_heap_memory_usage: 148747568\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148651001,"args":{"JVM stats":"heap_memory_usage: 419692488\nnon_heap_memory_usage: 148756184\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148652000,"args":{"JVM stats":"heap_memory_usage: 419692488\nnon_heap_memory_usage: 148757016\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148663000,"args":{"JVM stats":"heap_memory_usage: 420375576\nnon_heap_memory_usage: 148757016\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148679000,"args":{"JVM stats":"heap_memory_usage: 422197496\nnon_heap_memory_usage: 148763256\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148687000,"args":{"JVM stats":"heap_memory_usage: 422652752\nnon_heap_memory_usage: 148763256\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148694000,"args":{"JVM stats":"heap_memory_usage: 423335760\nnon_heap_memory_usage: 148763256\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148695000,"args":{"JVM stats":"heap_memory_usage: 423335760\nnon_heap_memory_usage: 148763256\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148697000,"args":{"JVM stats":"heap_memory_usage: 423335760\nnon_heap_memory_usage: 148776808\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148699000,"args":{"JVM stats":"heap_memory_usage: 423563392\nnon_heap_memory_usage: 148778344\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795148773000,"args":{"JVM stats":"heap_memory_usage: 424929008\nnon_heap_memory_usage: 148796840\nloaded_class_count: 15951\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795149307000,"args":{"JVM stats":"heap_memory_usage: 523268136\nnon_heap_memory_usage: 148784560\nloaded_class_count: 15951\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795149309000,"args":{"JVM stats":"heap_memory_usage: 523268136\nnon_heap_memory_usage: 148784560\nloaded_class_count: 15951\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795149310000,"args":{"JVM stats":"heap_memory_usage: 523268136\nnon_heap_memory_usage: 148784560\nloaded_class_count: 15951\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795149310001,"args":{"JVM stats":"heap_memory_usage: 523268136\nnon_heap_memory_usage: 148784560\nloaded_class_count: 15951\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795149323000,"args":{"JVM stats":"heap_memory_usage: 524414744\nnon_heap_memory_usage: 148749320\nloaded_class_count: 15951\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":20,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144076000,"dur":3000},{"pid":1,"tid":20,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144079000,"dur":4000},{"pid":1,"tid":20,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144083000,"dur":2000},{"pid":1,"tid":20,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144083000,"dur":2000},{"pid":1,"tid":20,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144090000,"dur":2000},{"pid":1,"tid":20,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144092000,"dur":100},{"pid":1,"tid":20,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144093000,"dur":100},{"pid":1,"tid":20,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144093000,"dur":100},{"pid":1,"tid":20,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144093000,"dur":100},{"pid":1,"tid":20,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144093000,"dur":1000},{"pid":1,"tid":20,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144094000,"dur":100},{"pid":1,"tid":20,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144094000,"dur":100},{"pid":1,"tid":20,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144094000,"dur":2000},{"pid":1,"tid":20,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144096000,"dur":1000},{"pid":1,"tid":20,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144097000,"dur":100},{"pid":1,"tid":20,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144097000,"dur":100},{"pid":1,"tid":20,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144097000,"dur":26000},{"pid":1,"tid":20,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144123000,"dur":1000},{"pid":1,"tid":20,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144124000,"dur":5000},{"pid":1,"tid":20,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144130000,"dur":2000},{"pid":1,"tid":20,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144132000,"dur":100},{"pid":1,"tid":20,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795144092000,"dur":40000},{"pid":1,"tid":20,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144132000,"dur":3000},{"pid":1,"tid":20,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144135000,"dur":6000},{"pid":1,"tid":20,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144089000,"dur":53000},{"pid":1,"tid":20,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144142000,"dur":8000},{"pid":1,"tid":20,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795144087000,"dur":63000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795144161000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144164000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144164000,"dur":46000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144210000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144215000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144219000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144220000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144221000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144222000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144223000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144223000,"dur":37000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144261000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144262000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144265000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144267000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795144272000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144273000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144286000,"dur":6000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144293000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144294000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144294000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144295000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144298000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795144300000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144305000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144306000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144312000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795144325000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795144326000,"dur":3996000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148323000,"dur":1000},{"pid":1,"tid":21,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795148395000,"dur":5000},{"pid":1,"tid":21,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795148400000,"dur":145000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795148325000,"dur":300000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795148625000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148626000,"dur":7000},{"pid":1,"tid":21,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795148635000,"dur":1000},{"pid":1,"tid":21,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795148636000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795148633000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148637000,"dur":12000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148649000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148650000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795148650000,"dur":1000},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148651000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148652000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148653000,"dur":10000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148664000,"dur":15000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148680000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148687000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795148695000,"dur":100},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148696000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795148698000,"dur":1000},{"pid":1,"tid":21,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795148717000,"dur":1000},{"pid":1,"tid":21,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795148718000,"dur":38000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795148699000,"dur":74000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795148774000,"dur":533000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795149308000,"dur":1000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795149310000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795149310000,"dur":100},{"pid":1,"tid":20,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795149316000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-32-29-323.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-32-29-323.rawproto
new file mode 100644
index 00000000..92da98c1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-32-29-323.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-33-57-066.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-33-57-066.json
new file mode 100644
index 00000000..ee3cc6ac
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-33-57-066.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518795231958000,"args":{"JVM stats":"heap_memory_usage: 197393624\nnon_heap_memory_usage: 149072592\nloaded_class_count: 16122\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 29\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232069000,"args":{"JVM stats":"heap_memory_usage: 211354648\nnon_heap_memory_usage: 149596896\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232069001,"args":{"JVM stats":"heap_memory_usage: 211622088\nnon_heap_memory_usage: 149596896\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232107000,"args":{"JVM stats":"heap_memory_usage: 217987640\nnon_heap_memory_usage: 149592656\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232110000,"args":{"JVM stats":"heap_memory_usage: 218790336\nnon_heap_memory_usage: 149582984\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232113000,"args":{"JVM stats":"heap_memory_usage: 219325384\nnon_heap_memory_usage: 149582984\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232113001,"args":{"JVM stats":"heap_memory_usage: 219325384\nnon_heap_memory_usage: 149582984\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232114000,"args":{"JVM stats":"heap_memory_usage: 219325384\nnon_heap_memory_usage: 149582984\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232115000,"args":{"JVM stats":"heap_memory_usage: 219325384\nnon_heap_memory_usage: 149583288\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232116000,"args":{"JVM stats":"heap_memory_usage: 219325384\nnon_heap_memory_usage: 149572856\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232117000,"args":{"JVM stats":"heap_memory_usage: 219592976\nnon_heap_memory_usage: 149572856\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232146000,"args":{"JVM stats":"heap_memory_usage: 223070152\nnon_heap_memory_usage: 149577848\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232147000,"args":{"JVM stats":"heap_memory_usage: 223070152\nnon_heap_memory_usage: 149577848\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232150000,"args":{"JVM stats":"heap_memory_usage: 223337856\nnon_heap_memory_usage: 149578304\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232151000,"args":{"JVM stats":"heap_memory_usage: 223337856\nnon_heap_memory_usage: 149579648\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232156000,"args":{"JVM stats":"heap_memory_usage: 224676368\nnon_heap_memory_usage: 149579768\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232156001,"args":{"JVM stats":"heap_memory_usage: 224676368\nnon_heap_memory_usage: 149579768\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232170000,"args":{"JVM stats":"heap_memory_usage: 225542544\nnon_heap_memory_usage: 149580792\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232176000,"args":{"JVM stats":"heap_memory_usage: 226344864\nnon_heap_memory_usage: 149585600\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232177000,"args":{"JVM stats":"heap_memory_usage: 226344864\nnon_heap_memory_usage: 149585600\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232178000,"args":{"JVM stats":"heap_memory_usage: 226344864\nnon_heap_memory_usage: 149585600\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232178001,"args":{"JVM stats":"heap_memory_usage: 226344864\nnon_heap_memory_usage: 149585600\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232181000,"args":{"JVM stats":"heap_memory_usage: 226612264\nnon_heap_memory_usage: 149585600\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232183000,"args":{"JVM stats":"heap_memory_usage: 226612264\nnon_heap_memory_usage: 149586216\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232187000,"args":{"JVM stats":"heap_memory_usage: 226880024\nnon_heap_memory_usage: 149588456\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232188000,"args":{"JVM stats":"heap_memory_usage: 227147496\nnon_heap_memory_usage: 149588456\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232194000,"args":{"JVM stats":"heap_memory_usage: 227682288\nnon_heap_memory_usage: 149589160\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232209000,"args":{"JVM stats":"heap_memory_usage: 228076240\nnon_heap_memory_usage: 149589160\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795232211000,"args":{"JVM stats":"heap_memory_usage: 228076240\nnon_heap_memory_usage: 149589160\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236058000,"args":{"JVM stats":"heap_memory_usage: 229502264\nnon_heap_memory_usage: 149731824\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236059000,"args":{"JVM stats":"heap_memory_usage: 229502264\nnon_heap_memory_usage: 149731824\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236363000,"args":{"JVM stats":"heap_memory_usage: 252240552\nnon_heap_memory_usage: 149782216\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236364000,"args":{"JVM stats":"heap_memory_usage: 252240552\nnon_heap_memory_usage: 149782216\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236372000,"args":{"JVM stats":"heap_memory_usage: 253165376\nnon_heap_memory_usage: 149786016\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236374000,"args":{"JVM stats":"heap_memory_usage: 253432792\nnon_heap_memory_usage: 149786016\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236389000,"args":{"JVM stats":"heap_memory_usage: 254772384\nnon_heap_memory_usage: 149803424\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236390000,"args":{"JVM stats":"heap_memory_usage: 254772384\nnon_heap_memory_usage: 149803424\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236391000,"args":{"JVM stats":"heap_memory_usage: 254772384\nnon_heap_memory_usage: 149803424\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236391001,"args":{"JVM stats":"heap_memory_usage: 254772384\nnon_heap_memory_usage: 149803424\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236392000,"args":{"JVM stats":"heap_memory_usage: 254772384\nnon_heap_memory_usage: 149803840\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236393000,"args":{"JVM stats":"heap_memory_usage: 254772384\nnon_heap_memory_usage: 149814336\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236403000,"args":{"JVM stats":"heap_memory_usage: 255574992\nnon_heap_memory_usage: 149846336\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236418000,"args":{"JVM stats":"heap_memory_usage: 256912208\nnon_heap_memory_usage: 149848128\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236426000,"args":{"JVM stats":"heap_memory_usage: 257447032\nnon_heap_memory_usage: 149848128\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236433000,"args":{"JVM stats":"heap_memory_usage: 257982056\nnon_heap_memory_usage: 149848128\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236434000,"args":{"JVM stats":"heap_memory_usage: 257982056\nnon_heap_memory_usage: 149848128\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236436000,"args":{"JVM stats":"heap_memory_usage: 258249464\nnon_heap_memory_usage: 149848128\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236438000,"args":{"JVM stats":"heap_memory_usage: 258249464\nnon_heap_memory_usage: 149848128\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795236497000,"args":{"JVM stats":"heap_memory_usage: 259854064\nnon_heap_memory_usage: 149881872\nloaded_class_count: 16248\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795237053000,"args":{"JVM stats":"heap_memory_usage: 357744088\nnon_heap_memory_usage: 149960936\nloaded_class_count: 16248\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795237055000,"args":{"JVM stats":"heap_memory_usage: 358280872\nnon_heap_memory_usage: 149968704\nloaded_class_count: 16248\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795237055001,"args":{"JVM stats":"heap_memory_usage: 358280872\nnon_heap_memory_usage: 149968704\nloaded_class_count: 16248\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795237055000,"args":{"JVM stats":"heap_memory_usage: 358280872\nnon_heap_memory_usage: 149968704\nloaded_class_count: 16248\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795237066000,"args":{"JVM stats":"heap_memory_usage: 359466920\nnon_heap_memory_usage: 149984672\nloaded_class_count: 16249\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":22,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795231958000,"dur":9000},{"pid":1,"tid":22,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795231967000,"dur":7000},{"pid":1,"tid":22,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795231974000,"dur":2000},{"pid":1,"tid":22,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795231974000,"dur":2000},{"pid":1,"tid":22,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795231988000,"dur":2000},{"pid":1,"tid":22,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795231990000,"dur":1000},{"pid":1,"tid":22,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231992000,"dur":100},{"pid":1,"tid":22,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231992000,"dur":100},{"pid":1,"tid":22,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231992000,"dur":100},{"pid":1,"tid":22,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231992000,"dur":1000},{"pid":1,"tid":22,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231993000,"dur":100},{"pid":1,"tid":22,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231993000,"dur":1000},{"pid":1,"tid":22,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231994000,"dur":1000},{"pid":1,"tid":22,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231995000,"dur":1000},{"pid":1,"tid":22,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231996000,"dur":100},{"pid":1,"tid":22,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231996000,"dur":100},{"pid":1,"tid":22,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231996000,"dur":24000},{"pid":1,"tid":22,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795232020000,"dur":1000},{"pid":1,"tid":22,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795232021000,"dur":5000},{"pid":1,"tid":22,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795232027000,"dur":2000},{"pid":1,"tid":22,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795232029000,"dur":100},{"pid":1,"tid":22,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795231991000,"dur":38000},{"pid":1,"tid":22,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795232029000,"dur":5000},{"pid":1,"tid":22,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795232034000,"dur":8000},{"pid":1,"tid":22,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795231988000,"dur":56000},{"pid":1,"tid":22,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795232044000,"dur":5000},{"pid":1,"tid":22,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795231986000,"dur":63000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795232067000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232069000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232069000,"dur":38000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232107000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232110000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232113000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232114000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232114000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232115000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232116000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232117000,"dur":29000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232146000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232147000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232150000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232151000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795232156000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232157000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232170000,"dur":6000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232176000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232177000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232178000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232179000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232182000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795232183000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232187000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232188000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232194000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795232210000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795232211000,"dur":3847000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236059000,"dur":100},{"pid":1,"tid":23,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795236135000,"dur":4000},{"pid":1,"tid":23,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795236139000,"dur":149000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795236060000,"dur":303000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795236364000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236365000,"dur":7000},{"pid":1,"tid":23,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795236374000,"dur":100},{"pid":1,"tid":23,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795236374000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795236373000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236375000,"dur":14000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236390000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236391000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795236391000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236391000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236392000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236393000,"dur":10000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236403000,"dur":15000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236419000,"dur":6000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236426000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795236433000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236435000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795236437000,"dur":1000},{"pid":1,"tid":23,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795236441000,"dur":100},{"pid":1,"tid":23,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795236441000,"dur":38000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795236438000,"dur":59000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795236498000,"dur":555000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795237053000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795237055000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795237055000,"dur":100},{"pid":1,"tid":22,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795237060000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-33-57-066.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-33-57-066.rawproto
new file mode 100644
index 00000000..24a1197d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-33-57-066.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-34-18-878.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-34-18-878.json
new file mode 100644
index 00000000..0174ac3c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-34-18-878.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258396000,"args":{"JVM stats":"heap_memory_usage: 416126464\nnon_heap_memory_usage: 150118064\nloaded_class_count: 16256\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258482000,"args":{"JVM stats":"heap_memory_usage: 428635704\nnon_heap_memory_usage: 150275128\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258482001,"args":{"JVM stats":"heap_memory_usage: 428903144\nnon_heap_memory_usage: 150275128\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258522000,"args":{"JVM stats":"heap_memory_usage: 435595760\nnon_heap_memory_usage: 150350888\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258526000,"args":{"JVM stats":"heap_memory_usage: 436131600\nnon_heap_memory_usage: 150350888\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258529000,"args":{"JVM stats":"heap_memory_usage: 436399016\nnon_heap_memory_usage: 150351176\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258530000,"args":{"JVM stats":"heap_memory_usage: 436399016\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258531000,"args":{"JVM stats":"heap_memory_usage: 436399016\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258532000,"args":{"JVM stats":"heap_memory_usage: 436399016\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258532001,"args":{"JVM stats":"heap_memory_usage: 436399016\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258533000,"args":{"JVM stats":"heap_memory_usage: 436399016\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258564000,"args":{"JVM stats":"heap_memory_usage: 440412184\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258565000,"args":{"JVM stats":"heap_memory_usage: 440412184\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258568000,"args":{"JVM stats":"heap_memory_usage: 440679608\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258569000,"args":{"JVM stats":"heap_memory_usage: 440679608\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258575000,"args":{"JVM stats":"heap_memory_usage: 441749392\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258575001,"args":{"JVM stats":"heap_memory_usage: 441749392\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258589000,"args":{"JVM stats":"heap_memory_usage: 442819672\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258597000,"args":{"JVM stats":"heap_memory_usage: 443087088\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258599000,"args":{"JVM stats":"heap_memory_usage: 443354568\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258601000,"args":{"JVM stats":"heap_memory_usage: 443354568\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258601001,"args":{"JVM stats":"heap_memory_usage: 443354568\nnon_heap_memory_usage: 150352008\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258606000,"args":{"JVM stats":"heap_memory_usage: 443354568\nnon_heap_memory_usage: 150352584\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258611000,"args":{"JVM stats":"heap_memory_usage: 443622992\nnon_heap_memory_usage: 150352584\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258617000,"args":{"JVM stats":"heap_memory_usage: 443890376\nnon_heap_memory_usage: 150371016\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258618000,"args":{"JVM stats":"heap_memory_usage: 443890376\nnon_heap_memory_usage: 150365576\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258629000,"args":{"JVM stats":"heap_memory_usage: 444425208\nnon_heap_memory_usage: 150365576\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258647000,"args":{"JVM stats":"heap_memory_usage: 445227808\nnon_heap_memory_usage: 150365576\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258649000,"args":{"JVM stats":"heap_memory_usage: 445227808\nnon_heap_memory_usage: 150365576\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258720000,"args":{"JVM stats":"heap_memory_usage: 446564792\nnon_heap_memory_usage: 150394776\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258725000,"args":{"JVM stats":"heap_memory_usage: 446564792\nnon_heap_memory_usage: 150394776\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258736000,"args":{"JVM stats":"heap_memory_usage: 447903472\nnon_heap_memory_usage: 150394776\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258739000,"args":{"JVM stats":"heap_memory_usage: 447903472\nnon_heap_memory_usage: 150394776\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258748000,"args":{"JVM stats":"heap_memory_usage: 448438392\nnon_heap_memory_usage: 150399960\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258751000,"args":{"JVM stats":"heap_memory_usage: 448438392\nnon_heap_memory_usage: 150399960\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258772000,"args":{"JVM stats":"heap_memory_usage: 450043544\nnon_heap_memory_usage: 150400792\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258775000,"args":{"JVM stats":"heap_memory_usage: 450043544\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258776000,"args":{"JVM stats":"heap_memory_usage: 450043544\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258777000,"args":{"JVM stats":"heap_memory_usage: 450043544\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258778000,"args":{"JVM stats":"heap_memory_usage: 450043544\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258779000,"args":{"JVM stats":"heap_memory_usage: 450310960\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258789000,"args":{"JVM stats":"heap_memory_usage: 450845808\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258807000,"args":{"JVM stats":"heap_memory_usage: 452451024\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258815000,"args":{"JVM stats":"heap_memory_usage: 452718680\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258823000,"args":{"JVM stats":"heap_memory_usage: 453311712\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258824000,"args":{"JVM stats":"heap_memory_usage: 453311712\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258826000,"args":{"JVM stats":"heap_memory_usage: 453311712\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258828000,"args":{"JVM stats":"heap_memory_usage: 453311712\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258831000,"args":{"JVM stats":"heap_memory_usage: 453311712\nnon_heap_memory_usage: 150403736\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258864000,"args":{"JVM stats":"heap_memory_usage: 453905152\nnon_heap_memory_usage: 150407808\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258866000,"args":{"JVM stats":"heap_memory_usage: 453905152\nnon_heap_memory_usage: 150411792\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258866001,"args":{"JVM stats":"heap_memory_usage: 453905152\nnon_heap_memory_usage: 150406800\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258866000,"args":{"JVM stats":"heap_memory_usage: 454498176\nnon_heap_memory_usage: 150400976\nloaded_class_count: 16256\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795258878000,"args":{"JVM stats":"heap_memory_usage: 455091232\nnon_heap_memory_usage: 150396512\nloaded_class_count: 16257\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":22,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258396000,"dur":3000},{"pid":1,"tid":22,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258399000,"dur":4000},{"pid":1,"tid":22,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258403000,"dur":1000},{"pid":1,"tid":22,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258403000,"dur":1000},{"pid":1,"tid":22,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258410000,"dur":3000},{"pid":1,"tid":22,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258413000,"dur":100},{"pid":1,"tid":22,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258414000,"dur":100},{"pid":1,"tid":22,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258414000,"dur":100},{"pid":1,"tid":22,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258414000,"dur":1000},{"pid":1,"tid":22,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258415000,"dur":100},{"pid":1,"tid":22,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258415000,"dur":100},{"pid":1,"tid":22,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258415000,"dur":100},{"pid":1,"tid":22,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258415000,"dur":2000},{"pid":1,"tid":22,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258417000,"dur":100},{"pid":1,"tid":22,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258417000,"dur":1000},{"pid":1,"tid":22,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258418000,"dur":100},{"pid":1,"tid":22,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258418000,"dur":26000},{"pid":1,"tid":22,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258444000,"dur":100},{"pid":1,"tid":22,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258444000,"dur":4000},{"pid":1,"tid":22,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258450000,"dur":1000},{"pid":1,"tid":22,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258451000,"dur":100},{"pid":1,"tid":22,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795258413000,"dur":38000},{"pid":1,"tid":22,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258451000,"dur":3000},{"pid":1,"tid":22,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258454000,"dur":6000},{"pid":1,"tid":22,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258409000,"dur":52000},{"pid":1,"tid":22,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258461000,"dur":6000},{"pid":1,"tid":22,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258407000,"dur":60000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258481000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258482000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258483000,"dur":39000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258523000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258527000,"dur":2000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258529000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258530000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258531000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258532000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258532000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258533000,"dur":31000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258564000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258565000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258568000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258569000,"dur":6000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258575000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258576000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258589000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258597000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258599000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258601000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258601000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258608000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258611000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258617000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258619000,"dur":10000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258629000,"dur":18000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258648000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258649000,"dur":71000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258722000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258726000,"dur":9000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258738000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258740000,"dur":8000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258749000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258751000,"dur":21000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258773000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258775000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258776000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258777000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258778000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258779000,"dur":10000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258790000,"dur":17000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258808000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258815000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258824000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258825000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258826000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258828000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795258831000,"dur":33000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258864000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258866000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795258866000,"dur":100},{"pid":1,"tid":22,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795258872000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-34-18-878.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-34-18-878.rawproto
new file mode 100644
index 00000000..aa695175
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-34-18-878.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-37-10-306.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-37-10-306.json
new file mode 100644
index 00000000..663a1a5c
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-37-10-306.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428289000,"args":{"JVM stats":"heap_memory_usage: 512401968\nnon_heap_memory_usage: 150878656\nloaded_class_count: 16265\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428380000,"args":{"JVM stats":"heap_memory_usage: 525551752\nnon_heap_memory_usage: 151014024\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428380001,"args":{"JVM stats":"heap_memory_usage: 525820176\nnon_heap_memory_usage: 151014024\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428418000,"args":{"JVM stats":"heap_memory_usage: 531982816\nnon_heap_memory_usage: 151093112\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428422000,"args":{"JVM stats":"heap_memory_usage: 532785200\nnon_heap_memory_usage: 151105656\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428425000,"args":{"JVM stats":"heap_memory_usage: 533052608\nnon_heap_memory_usage: 151107704\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428425001,"args":{"JVM stats":"heap_memory_usage: 533052608\nnon_heap_memory_usage: 151108600\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428426000,"args":{"JVM stats":"heap_memory_usage: 533052608\nnon_heap_memory_usage: 151108600\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428427000,"args":{"JVM stats":"heap_memory_usage: 533052608\nnon_heap_memory_usage: 151108600\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428427001,"args":{"JVM stats":"heap_memory_usage: 533052608\nnon_heap_memory_usage: 151108600\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428428000,"args":{"JVM stats":"heap_memory_usage: 533052608\nnon_heap_memory_usage: 151108600\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428458000,"args":{"JVM stats":"heap_memory_usage: 537064872\nnon_heap_memory_usage: 151110264\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428459000,"args":{"JVM stats":"heap_memory_usage: 537064872\nnon_heap_memory_usage: 151110264\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428462000,"args":{"JVM stats":"heap_memory_usage: 537600080\nnon_heap_memory_usage: 151114360\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428462001,"args":{"JVM stats":"heap_memory_usage: 537600080\nnon_heap_memory_usage: 151114360\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428468000,"args":{"JVM stats":"heap_memory_usage: 538670160\nnon_heap_memory_usage: 151117432\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428468001,"args":{"JVM stats":"heap_memory_usage: 538670160\nnon_heap_memory_usage: 151117432\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428482000,"args":{"JVM stats":"heap_memory_usage: 539472424\nnon_heap_memory_usage: 151117432\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428489000,"args":{"JVM stats":"heap_memory_usage: 540007344\nnon_heap_memory_usage: 151117432\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428490000,"args":{"JVM stats":"heap_memory_usage: 540274864\nnon_heap_memory_usage: 151117432\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428491000,"args":{"JVM stats":"heap_memory_usage: 540274864\nnon_heap_memory_usage: 151117432\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428491001,"args":{"JVM stats":"heap_memory_usage: 540274864\nnon_heap_memory_usage: 151117432\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428496000,"args":{"JVM stats":"heap_memory_usage: 540274864\nnon_heap_memory_usage: 151117432\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428497000,"args":{"JVM stats":"heap_memory_usage: 540542280\nnon_heap_memory_usage: 151117968\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428501000,"args":{"JVM stats":"heap_memory_usage: 540809808\nnon_heap_memory_usage: 151124624\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428503000,"args":{"JVM stats":"heap_memory_usage: 540809808\nnon_heap_memory_usage: 151126800\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428510000,"args":{"JVM stats":"heap_memory_usage: 541344808\nnon_heap_memory_usage: 151126800\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428525000,"args":{"JVM stats":"heap_memory_usage: 542415840\nnon_heap_memory_usage: 151145792\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795428527000,"args":{"JVM stats":"heap_memory_usage: 542415840\nnon_heap_memory_usage: 151145792\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430072000,"args":{"JVM stats":"heap_memory_usage: 543753376\nnon_heap_memory_usage: 151145792\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430077000,"args":{"JVM stats":"heap_memory_usage: 543753376\nnon_heap_memory_usage: 151147264\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430175000,"args":{"JVM stats":"heap_memory_usage: 544557088\nnon_heap_memory_usage: 151156336\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430177000,"args":{"JVM stats":"heap_memory_usage: 544557088\nnon_heap_memory_usage: 151156336\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430193000,"args":{"JVM stats":"heap_memory_usage: 545360376\nnon_heap_memory_usage: 151156336\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430195000,"args":{"JVM stats":"heap_memory_usage: 545627760\nnon_heap_memory_usage: 151161872\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430217000,"args":{"JVM stats":"heap_memory_usage: 546966224\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430220000,"args":{"JVM stats":"heap_memory_usage: 547233664\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430221000,"args":{"JVM stats":"heap_memory_usage: 547233664\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430223000,"args":{"JVM stats":"heap_memory_usage: 547233664\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430224000,"args":{"JVM stats":"heap_memory_usage: 547233664\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430225000,"args":{"JVM stats":"heap_memory_usage: 547233664\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430237000,"args":{"JVM stats":"heap_memory_usage: 548036064\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430255000,"args":{"JVM stats":"heap_memory_usage: 549373528\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430262000,"args":{"JVM stats":"heap_memory_usage: 549908320\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430271000,"args":{"JVM stats":"heap_memory_usage: 550443592\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430272000,"args":{"JVM stats":"heap_memory_usage: 550443592\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430274000,"args":{"JVM stats":"heap_memory_usage: 550711128\nnon_heap_memory_usage: 151166736\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430277000,"args":{"JVM stats":"heap_memory_usage: 550711128\nnon_heap_memory_usage: 151176336\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430280000,"args":{"JVM stats":"heap_memory_usage: 550978672\nnon_heap_memory_usage: 151179984\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430286000,"args":{"JVM stats":"heap_memory_usage: 551513504\nnon_heap_memory_usage: 151179984\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430290000,"args":{"JVM stats":"heap_memory_usage: 551513504\nnon_heap_memory_usage: 151182608\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430290001,"args":{"JVM stats":"heap_memory_usage: 551513504\nnon_heap_memory_usage: 151182608\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430291000,"args":{"JVM stats":"heap_memory_usage: 551513504\nnon_heap_memory_usage: 151181392\nloaded_class_count: 16287\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795430306000,"args":{"JVM stats":"heap_memory_usage: 552583272\nnon_heap_memory_usage: 151172192\nloaded_class_count: 16287\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":24,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428289000,"dur":7000},{"pid":1,"tid":24,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428296000,"dur":4000},{"pid":1,"tid":24,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428300000,"dur":2000},{"pid":1,"tid":24,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428300000,"dur":2000},{"pid":1,"tid":24,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428305000,"dur":2000},{"pid":1,"tid":24,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428307000,"dur":1000},{"pid":1,"tid":24,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428309000,"dur":100},{"pid":1,"tid":24,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428309000,"dur":100},{"pid":1,"tid":24,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428309000,"dur":1000},{"pid":1,"tid":24,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428310000,"dur":100},{"pid":1,"tid":24,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428310000,"dur":100},{"pid":1,"tid":24,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428310000,"dur":100},{"pid":1,"tid":24,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428310000,"dur":3000},{"pid":1,"tid":24,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428313000,"dur":100},{"pid":1,"tid":24,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428313000,"dur":100},{"pid":1,"tid":24,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428313000,"dur":100},{"pid":1,"tid":24,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428313000,"dur":24000},{"pid":1,"tid":24,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428337000,"dur":1000},{"pid":1,"tid":24,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428338000,"dur":5000},{"pid":1,"tid":24,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428344000,"dur":2000},{"pid":1,"tid":24,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428346000,"dur":100},{"pid":1,"tid":24,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795428308000,"dur":38000},{"pid":1,"tid":24,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428346000,"dur":3000},{"pid":1,"tid":24,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428349000,"dur":7000},{"pid":1,"tid":24,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428305000,"dur":52000},{"pid":1,"tid":24,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428357000,"dur":6000},{"pid":1,"tid":24,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795428304000,"dur":59000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795428379000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428380000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428381000,"dur":37000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428418000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428422000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428425000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428426000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428426000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428427000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428428000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428428000,"dur":30000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428458000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428459000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428462000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428463000,"dur":5000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795428468000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428469000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428482000,"dur":7000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428489000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428490000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428491000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428492000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428496000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795428498000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428502000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428504000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428510000,"dur":15000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795428526000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795428527000,"dur":1545000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430073000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430078000,"dur":97000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795430176000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430177000,"dur":15000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430193000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430196000,"dur":20000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430218000,"dur":2000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430221000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795430222000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430223000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430224000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430226000,"dur":11000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430237000,"dur":18000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430255000,"dur":7000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430263000,"dur":8000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795430271000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430273000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430275000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430278000,"dur":2000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795430280000,"dur":6000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795430287000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795430290000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795430291000,"dur":100},{"pid":1,"tid":24,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795430299000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-37-10-306.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-37-10-306.rawproto
new file mode 100644
index 00000000..21837dc5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-37-10-306.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-40-04-834.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-40-04-834.json
new file mode 100644
index 00000000..7e47f159
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-40-04-834.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602489000,"args":{"JVM stats":"heap_memory_usage: 231268912\nnon_heap_memory_usage: 151303560\nloaded_class_count: 16294\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 10\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602564000,"args":{"JVM stats":"heap_memory_usage: 244596240\nnon_heap_memory_usage: 151329568\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602564001,"args":{"JVM stats":"heap_memory_usage: 244596240\nnon_heap_memory_usage: 151329568\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602601000,"args":{"JVM stats":"heap_memory_usage: 251367328\nnon_heap_memory_usage: 151358240\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602606000,"args":{"JVM stats":"heap_memory_usage: 251367328\nnon_heap_memory_usage: 151363616\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602610000,"args":{"JVM stats":"heap_memory_usage: 251972184\nnon_heap_memory_usage: 151363616\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602610001,"args":{"JVM stats":"heap_memory_usage: 251972184\nnon_heap_memory_usage: 151363616\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602611000,"args":{"JVM stats":"heap_memory_usage: 251972184\nnon_heap_memory_usage: 151363616\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602612000,"args":{"JVM stats":"heap_memory_usage: 251972184\nnon_heap_memory_usage: 151363616\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602612001,"args":{"JVM stats":"heap_memory_usage: 251972184\nnon_heap_memory_usage: 151363616\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602613000,"args":{"JVM stats":"heap_memory_usage: 251972184\nnon_heap_memory_usage: 151363616\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602644000,"args":{"JVM stats":"heap_memory_usage: 255902928\nnon_heap_memory_usage: 151419664\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602645000,"args":{"JVM stats":"heap_memory_usage: 256204856\nnon_heap_memory_usage: 151425456\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602648000,"args":{"JVM stats":"heap_memory_usage: 256204856\nnon_heap_memory_usage: 151447424\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602649000,"args":{"JVM stats":"heap_memory_usage: 256204856\nnon_heap_memory_usage: 151455856\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602656000,"args":{"JVM stats":"heap_memory_usage: 257714520\nnon_heap_memory_usage: 151470896\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602657000,"args":{"JVM stats":"heap_memory_usage: 257714520\nnon_heap_memory_usage: 151470896\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602669000,"args":{"JVM stats":"heap_memory_usage: 258711048\nnon_heap_memory_usage: 151471536\nloaded_class_count: 16296\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602676000,"args":{"JVM stats":"heap_memory_usage: 259012992\nnon_heap_memory_usage: 151473960\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602677000,"args":{"JVM stats":"heap_memory_usage: 259012992\nnon_heap_memory_usage: 151477736\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602678000,"args":{"JVM stats":"heap_memory_usage: 259314888\nnon_heap_memory_usage: 151477736\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602678001,"args":{"JVM stats":"heap_memory_usage: 259314888\nnon_heap_memory_usage: 151477736\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602681000,"args":{"JVM stats":"heap_memory_usage: 259314888\nnon_heap_memory_usage: 151477736\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602682000,"args":{"JVM stats":"heap_memory_usage: 259616808\nnon_heap_memory_usage: 151483592\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602691000,"args":{"JVM stats":"heap_memory_usage: 259918704\nnon_heap_memory_usage: 151489224\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602692000,"args":{"JVM stats":"heap_memory_usage: 259918704\nnon_heap_memory_usage: 151489224\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602700000,"args":{"JVM stats":"heap_memory_usage: 260522800\nnon_heap_memory_usage: 151489224\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602714000,"args":{"JVM stats":"heap_memory_usage: 260975064\nnon_heap_memory_usage: 151489224\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795602715000,"args":{"JVM stats":"heap_memory_usage: 260975064\nnon_heap_memory_usage: 151489224\nloaded_class_count: 16297\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795603869000,"args":{"JVM stats":"heap_memory_usage: 262484600\nnon_heap_memory_usage: 151515744\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795603872000,"args":{"JVM stats":"heap_memory_usage: 262484600\nnon_heap_memory_usage: 151515744\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604179000,"args":{"JVM stats":"heap_memory_usage: 285163784\nnon_heap_memory_usage: 151547848\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604179001,"args":{"JVM stats":"heap_memory_usage: 285163784\nnon_heap_memory_usage: 151547848\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604186000,"args":{"JVM stats":"heap_memory_usage: 285767664\nnon_heap_memory_usage: 151547848\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604188000,"args":{"JVM stats":"heap_memory_usage: 286073672\nnon_heap_memory_usage: 151548144\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604201000,"args":{"JVM stats":"heap_memory_usage: 287885680\nnon_heap_memory_usage: 151559504\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604202000,"args":{"JVM stats":"heap_memory_usage: 287885680\nnon_heap_memory_usage: 151559504\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604202001,"args":{"JVM stats":"heap_memory_usage: 287885680\nnon_heap_memory_usage: 151558608\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604203000,"args":{"JVM stats":"heap_memory_usage: 287885680\nnon_heap_memory_usage: 151558608\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604204000,"args":{"JVM stats":"heap_memory_usage: 287885680\nnon_heap_memory_usage: 151554512\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604205000,"args":{"JVM stats":"heap_memory_usage: 287885680\nnon_heap_memory_usage: 151555408\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604214000,"args":{"JVM stats":"heap_memory_usage: 288791488\nnon_heap_memory_usage: 151566288\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604230000,"args":{"JVM stats":"heap_memory_usage: 289999464\nnon_heap_memory_usage: 151577592\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604236000,"args":{"JVM stats":"heap_memory_usage: 290603384\nnon_heap_memory_usage: 151577592\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604246000,"args":{"JVM stats":"heap_memory_usage: 291207512\nnon_heap_memory_usage: 151577592\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604248000,"args":{"JVM stats":"heap_memory_usage: 291207512\nnon_heap_memory_usage: 151577592\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604249000,"args":{"JVM stats":"heap_memory_usage: 291207512\nnon_heap_memory_usage: 151577592\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604251000,"args":{"JVM stats":"heap_memory_usage: 291509432\nnon_heap_memory_usage: 151577592\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604314000,"args":{"JVM stats":"heap_memory_usage: 293018944\nnon_heap_memory_usage: 151585016\nloaded_class_count: 16298\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604823000,"args":{"JVM stats":"heap_memory_usage: 391199896\nnon_heap_memory_usage: 151684096\nloaded_class_count: 16298\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604824000,"args":{"JVM stats":"heap_memory_usage: 391505904\nnon_heap_memory_usage: 151689240\nloaded_class_count: 16298\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604824001,"args":{"JVM stats":"heap_memory_usage: 391505904\nnon_heap_memory_usage: 151690904\nloaded_class_count: 16298\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604825000,"args":{"JVM stats":"heap_memory_usage: 391807848\nnon_heap_memory_usage: 151690904\nloaded_class_count: 16298\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795604835000,"args":{"JVM stats":"heap_memory_usage: 392936288\nnon_heap_memory_usage: 151705832\nloaded_class_count: 16300\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":25,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602489000,"dur":4000},{"pid":1,"tid":25,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602493000,"dur":2000},{"pid":1,"tid":25,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602495000,"dur":4000},{"pid":1,"tid":25,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602495000,"dur":4000},{"pid":1,"tid":25,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602502000,"dur":2000},{"pid":1,"tid":25,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602504000,"dur":1000},{"pid":1,"tid":25,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602506000,"dur":100},{"pid":1,"tid":25,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602506000,"dur":100},{"pid":1,"tid":25,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602506000,"dur":100},{"pid":1,"tid":25,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602506000,"dur":1000},{"pid":1,"tid":25,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602507000,"dur":100},{"pid":1,"tid":25,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602507000,"dur":100},{"pid":1,"tid":25,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602507000,"dur":2000},{"pid":1,"tid":25,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602509000,"dur":100},{"pid":1,"tid":25,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602509000,"dur":100},{"pid":1,"tid":25,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602509000,"dur":100},{"pid":1,"tid":25,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602509000,"dur":19000},{"pid":1,"tid":25,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602528000,"dur":1000},{"pid":1,"tid":25,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602529000,"dur":3000},{"pid":1,"tid":25,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602535000,"dur":2000},{"pid":1,"tid":25,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602537000,"dur":1000},{"pid":1,"tid":25,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795602505000,"dur":33000},{"pid":1,"tid":25,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602538000,"dur":3000},{"pid":1,"tid":25,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602541000,"dur":5000},{"pid":1,"tid":25,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602502000,"dur":44000},{"pid":1,"tid":25,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602547000,"dur":5000},{"pid":1,"tid":25,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795602500000,"dur":52000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795602562000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602564000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602564000,"dur":37000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602602000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602606000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602610000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602611000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602611000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602612000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602613000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602613000,"dur":31000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602645000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602645000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602648000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602649000,"dur":7000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795602656000,"dur":1000},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602657000,"dur":12000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602669000,"dur":7000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602677000,"dur":100},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602678000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602678000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602679000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602681000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795602682000,"dur":9000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602692000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602693000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602701000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795602715000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795602716000,"dur":1153000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795603870000,"dur":2000},{"pid":1,"tid":26,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795603952000,"dur":4000},{"pid":1,"tid":26,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795603956000,"dur":142000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795603873000,"dur":305000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604179000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604180000,"dur":6000},{"pid":1,"tid":26,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795604187000,"dur":1000},{"pid":1,"tid":26,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795604188000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604186000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604189000,"dur":12000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604201000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604202000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604202000,"dur":1000},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604203000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604204000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604205000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604215000,"dur":15000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604230000,"dur":6000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604237000,"dur":9000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604247000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604248000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795604250000,"dur":1000},{"pid":1,"tid":26,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795604254000,"dur":100},{"pid":1,"tid":26,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795604254000,"dur":42000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604251000,"dur":63000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604315000,"dur":507000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604823000,"dur":1000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604824000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795604825000,"dur":100},{"pid":1,"tid":25,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795604829000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-40-04-834.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-40-04-834.rawproto
new file mode 100644
index 00000000..b02cbf5d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-40-04-834.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-42-19-225.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-42-19-225.json
new file mode 100644
index 00000000..2a92df45
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-42-19-225.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733833000,"args":{"JVM stats":"heap_memory_usage: 451089232\nnon_heap_memory_usage: 151907368\nloaded_class_count: 16307\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733912000,"args":{"JVM stats":"heap_memory_usage: 464089400\nnon_heap_memory_usage: 151963608\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733913000,"args":{"JVM stats":"heap_memory_usage: 464089400\nnon_heap_memory_usage: 151970960\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733958000,"args":{"JVM stats":"heap_memory_usage: 470442232\nnon_heap_memory_usage: 152023624\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733963000,"args":{"JVM stats":"heap_memory_usage: 470442232\nnon_heap_memory_usage: 152028752\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733975000,"args":{"JVM stats":"heap_memory_usage: 470442232\nnon_heap_memory_usage: 152028752\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733976000,"args":{"JVM stats":"heap_memory_usage: 470442232\nnon_heap_memory_usage: 152028752\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733978000,"args":{"JVM stats":"heap_memory_usage: 470442232\nnon_heap_memory_usage: 152028752\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733979000,"args":{"JVM stats":"heap_memory_usage: 470442232\nnon_heap_memory_usage: 152028752\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733980000,"args":{"JVM stats":"heap_memory_usage: 470744128\nnon_heap_memory_usage: 152028752\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795733980001,"args":{"JVM stats":"heap_memory_usage: 470744128\nnon_heap_memory_usage: 152034128\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734014000,"args":{"JVM stats":"heap_memory_usage: 474368872\nnon_heap_memory_usage: 152043344\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734015000,"args":{"JVM stats":"heap_memory_usage: 474368872\nnon_heap_memory_usage: 152066384\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734018000,"args":{"JVM stats":"heap_memory_usage: 475577800\nnon_heap_memory_usage: 152080200\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734019000,"args":{"JVM stats":"heap_memory_usage: 475577800\nnon_heap_memory_usage: 152080200\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734024000,"args":{"JVM stats":"heap_memory_usage: 476786680\nnon_heap_memory_usage: 152086112\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734024001,"args":{"JVM stats":"heap_memory_usage: 476786680\nnon_heap_memory_usage: 152086112\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734040000,"args":{"JVM stats":"heap_memory_usage: 477696560\nnon_heap_memory_usage: 152086112\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734048000,"args":{"JVM stats":"heap_memory_usage: 477998480\nnon_heap_memory_usage: 152086144\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734050000,"args":{"JVM stats":"heap_memory_usage: 478300376\nnon_heap_memory_usage: 152089336\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734051000,"args":{"JVM stats":"heap_memory_usage: 478300376\nnon_heap_memory_usage: 152106936\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734051001,"args":{"JVM stats":"heap_memory_usage: 478300376\nnon_heap_memory_usage: 152106936\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734054000,"args":{"JVM stats":"heap_memory_usage: 478300376\nnon_heap_memory_usage: 152103160\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734056000,"args":{"JVM stats":"heap_memory_usage: 478602416\nnon_heap_memory_usage: 152103160\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734059000,"args":{"JVM stats":"heap_memory_usage: 478602416\nnon_heap_memory_usage: 152106168\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734061000,"args":{"JVM stats":"heap_memory_usage: 478904368\nnon_heap_memory_usage: 152114616\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734068000,"args":{"JVM stats":"heap_memory_usage: 479510584\nnon_heap_memory_usage: 152117432\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734081000,"args":{"JVM stats":"heap_memory_usage: 480420728\nnon_heap_memory_usage: 152144120\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795734082000,"args":{"JVM stats":"heap_memory_usage: 480420728\nnon_heap_memory_usage: 152144120\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738129000,"args":{"JVM stats":"heap_memory_usage: 481983200\nnon_heap_memory_usage: 152164248\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738131000,"args":{"JVM stats":"heap_memory_usage: 481983200\nnon_heap_memory_usage: 152164248\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738516000,"args":{"JVM stats":"heap_memory_usage: 504553072\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738517000,"args":{"JVM stats":"heap_memory_usage: 504553072\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738523000,"args":{"JVM stats":"heap_memory_usage: 505156920\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738525000,"args":{"JVM stats":"heap_memory_usage: 505156920\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738538000,"args":{"JVM stats":"heap_memory_usage: 506973560\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738538001,"args":{"JVM stats":"heap_memory_usage: 507275456\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738539000,"args":{"JVM stats":"heap_memory_usage: 507275456\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738539001,"args":{"JVM stats":"heap_memory_usage: 507275456\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738540000,"args":{"JVM stats":"heap_memory_usage: 507275456\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738541000,"args":{"JVM stats":"heap_memory_usage: 507275456\nnon_heap_memory_usage: 152160656\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738550000,"args":{"JVM stats":"heap_memory_usage: 508181560\nnon_heap_memory_usage: 152161872\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738567000,"args":{"JVM stats":"heap_memory_usage: 509389320\nnon_heap_memory_usage: 152152848\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738574000,"args":{"JVM stats":"heap_memory_usage: 509993224\nnon_heap_memory_usage: 152152848\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738582000,"args":{"JVM stats":"heap_memory_usage: 510597368\nnon_heap_memory_usage: 152152848\nloaded_class_count: 16307\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738584000,"args":{"JVM stats":"heap_memory_usage: 510597368\nnon_heap_memory_usage: 152159584\nloaded_class_count: 16309\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738586000,"args":{"JVM stats":"heap_memory_usage: 510597368\nnon_heap_memory_usage: 152159584\nloaded_class_count: 16309\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738587000,"args":{"JVM stats":"heap_memory_usage: 510899632\nnon_heap_memory_usage: 152161040\nloaded_class_count: 16309\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795738658000,"args":{"JVM stats":"heap_memory_usage: 512417344\nnon_heap_memory_usage: 152192272\nloaded_class_count: 16309\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795739212000,"args":{"JVM stats":"heap_memory_usage: 266711136\nnon_heap_memory_usage: 152222288\nloaded_class_count: 16309\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 18\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795739215000,"args":{"JVM stats":"heap_memory_usage: 268564768\nnon_heap_memory_usage: 152222288\nloaded_class_count: 16309\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795739215001,"args":{"JVM stats":"heap_memory_usage: 268564768\nnon_heap_memory_usage: 152233424\nloaded_class_count: 16309\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795739215000,"args":{"JVM stats":"heap_memory_usage: 268564768\nnon_heap_memory_usage: 152234896\nloaded_class_count: 16309\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795739225000,"args":{"JVM stats":"heap_memory_usage: 269437616\nnon_heap_memory_usage: 152243696\nloaded_class_count: 16309\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":27,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733833000,"dur":4000},{"pid":1,"tid":27,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733837000,"dur":3000},{"pid":1,"tid":27,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733840000,"dur":4000},{"pid":1,"tid":27,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733840000,"dur":4000},{"pid":1,"tid":27,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733848000,"dur":2000},{"pid":1,"tid":27,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733850000,"dur":100},{"pid":1,"tid":27,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733851000,"dur":1000},{"pid":1,"tid":27,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733852000,"dur":100},{"pid":1,"tid":27,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733852000,"dur":100},{"pid":1,"tid":27,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733852000,"dur":100},{"pid":1,"tid":27,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733852000,"dur":100},{"pid":1,"tid":27,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733853000,"dur":100},{"pid":1,"tid":27,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733853000,"dur":4000},{"pid":1,"tid":27,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733857000,"dur":100},{"pid":1,"tid":27,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733857000,"dur":100},{"pid":1,"tid":27,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733857000,"dur":100},{"pid":1,"tid":27,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733857000,"dur":22000},{"pid":1,"tid":27,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733879000,"dur":1000},{"pid":1,"tid":27,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733880000,"dur":4000},{"pid":1,"tid":27,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733884000,"dur":2000},{"pid":1,"tid":27,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733886000,"dur":100},{"pid":1,"tid":27,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795733850000,"dur":36000},{"pid":1,"tid":27,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733886000,"dur":2000},{"pid":1,"tid":27,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733888000,"dur":6000},{"pid":1,"tid":27,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733847000,"dur":48000},{"pid":1,"tid":27,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733895000,"dur":4000},{"pid":1,"tid":27,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795733845000,"dur":54000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795733909000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733912000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733913000,"dur":45000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733958000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733971000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733975000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733976000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733978000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733979000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733980000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795733981000,"dur":33000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734014000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734015000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734019000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734020000,"dur":4000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795734024000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734024000,"dur":16000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734040000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734049000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734050000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734051000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734051000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734054000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795734056000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734060000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734062000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734068000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795734082000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795734082000,"dur":4047000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738130000,"dur":1000},{"pid":1,"tid":28,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795738290000,"dur":4000},{"pid":1,"tid":28,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795738294000,"dur":136000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795738132000,"dur":384000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795738516000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738517000,"dur":6000},{"pid":1,"tid":28,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795738524000,"dur":1000},{"pid":1,"tid":28,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795738525000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795738523000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738525000,"dur":13000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738538000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738539000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795738539000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738539000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738540000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738541000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738551000,"dur":16000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738567000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738574000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795738582000,"dur":2000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738584000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795738586000,"dur":1000},{"pid":1,"tid":28,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795738607000,"dur":100},{"pid":1,"tid":28,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795738607000,"dur":33000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795738588000,"dur":70000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795738658000,"dur":554000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795739212000,"dur":3000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795739215000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795739215000,"dur":100},{"pid":1,"tid":27,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795739220000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-42-19-225.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-42-19-225.rawproto
new file mode 100644
index 00000000..4a03b0d5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-42-19-225.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-43-38-137.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-43-38-137.json
new file mode 100644
index 00000000..70a5644a
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-43-38-137.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518795812901000,"args":{"JVM stats":"heap_memory_usage: 327569576\nnon_heap_memory_usage: 152395472\nloaded_class_count: 16317\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795812990000,"args":{"JVM stats":"heap_memory_usage: 340402328\nnon_heap_memory_usage: 152542768\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795812990001,"args":{"JVM stats":"heap_memory_usage: 340653896\nnon_heap_memory_usage: 152542768\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813029000,"args":{"JVM stats":"heap_memory_usage: 347695632\nnon_heap_memory_usage: 152625264\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813033000,"args":{"JVM stats":"heap_memory_usage: 348196776\nnon_heap_memory_usage: 152625264\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813036000,"args":{"JVM stats":"heap_memory_usage: 348196776\nnon_heap_memory_usage: 152625264\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813037000,"args":{"JVM stats":"heap_memory_usage: 348447328\nnon_heap_memory_usage: 152625264\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813038000,"args":{"JVM stats":"heap_memory_usage: 348447328\nnon_heap_memory_usage: 152625264\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813038001,"args":{"JVM stats":"heap_memory_usage: 348447328\nnon_heap_memory_usage: 152625640\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813039000,"args":{"JVM stats":"heap_memory_usage: 348447328\nnon_heap_memory_usage: 152626728\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813039001,"args":{"JVM stats":"heap_memory_usage: 348447328\nnon_heap_memory_usage: 152626728\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813068000,"args":{"JVM stats":"heap_memory_usage: 352458280\nnon_heap_memory_usage: 152626728\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813069000,"args":{"JVM stats":"heap_memory_usage: 352458280\nnon_heap_memory_usage: 152626728\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813072000,"args":{"JVM stats":"heap_memory_usage: 352708808\nnon_heap_memory_usage: 152637304\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813072001,"args":{"JVM stats":"heap_memory_usage: 352708808\nnon_heap_memory_usage: 152637304\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813078000,"args":{"JVM stats":"heap_memory_usage: 353711296\nnon_heap_memory_usage: 152637304\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813078001,"args":{"JVM stats":"heap_memory_usage: 353711296\nnon_heap_memory_usage: 152637304\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813091000,"args":{"JVM stats":"heap_memory_usage: 354212416\nnon_heap_memory_usage: 152637304\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813099000,"args":{"JVM stats":"heap_memory_usage: 354713528\nnon_heap_memory_usage: 152637304\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813100000,"args":{"JVM stats":"heap_memory_usage: 354713528\nnon_heap_memory_usage: 152638768\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813100001,"args":{"JVM stats":"heap_memory_usage: 354713528\nnon_heap_memory_usage: 152638768\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813101000,"args":{"JVM stats":"heap_memory_usage: 354713528\nnon_heap_memory_usage: 152638768\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813103000,"args":{"JVM stats":"heap_memory_usage: 354964192\nnon_heap_memory_usage: 152652576\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813105000,"args":{"JVM stats":"heap_memory_usage: 355214720\nnon_heap_memory_usage: 152652576\nloaded_class_count: 16324\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813109000,"args":{"JVM stats":"heap_memory_usage: 355465400\nnon_heap_memory_usage: 152663960\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813110000,"args":{"JVM stats":"heap_memory_usage: 355465400\nnon_heap_memory_usage: 152663960\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813117000,"args":{"JVM stats":"heap_memory_usage: 355966984\nnon_heap_memory_usage: 152663960\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813130000,"args":{"JVM stats":"heap_memory_usage: 357224872\nnon_heap_memory_usage: 152663960\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795813131000,"args":{"JVM stats":"heap_memory_usage: 357224872\nnon_heap_memory_usage: 152663960\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817085000,"args":{"JVM stats":"heap_memory_usage: 358517536\nnon_heap_memory_usage: 152663960\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817088000,"args":{"JVM stats":"heap_memory_usage: 358517536\nnon_heap_memory_usage: 152663960\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817390000,"args":{"JVM stats":"heap_memory_usage: 380698680\nnon_heap_memory_usage: 152676120\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817390001,"args":{"JVM stats":"heap_memory_usage: 380698680\nnon_heap_memory_usage: 152676120\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817398000,"args":{"JVM stats":"heap_memory_usage: 382202752\nnon_heap_memory_usage: 152676824\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817400000,"args":{"JVM stats":"heap_memory_usage: 382453320\nnon_heap_memory_usage: 152680456\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817412000,"args":{"JVM stats":"heap_memory_usage: 383456856\nnon_heap_memory_usage: 152686704\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817413000,"args":{"JVM stats":"heap_memory_usage: 383707408\nnon_heap_memory_usage: 152695408\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817414000,"args":{"JVM stats":"heap_memory_usage: 383707408\nnon_heap_memory_usage: 152695408\nloaded_class_count: 16325\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817414001,"args":{"JVM stats":"heap_memory_usage: 383707408\nnon_heap_memory_usage: 152699784\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817415000,"args":{"JVM stats":"heap_memory_usage: 383707408\nnon_heap_memory_usage: 152699784\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817416000,"args":{"JVM stats":"heap_memory_usage: 383707408\nnon_heap_memory_usage: 152699784\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817425000,"args":{"JVM stats":"heap_memory_usage: 384459512\nnon_heap_memory_usage: 152699784\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817443000,"args":{"JVM stats":"heap_memory_usage: 385712320\nnon_heap_memory_usage: 152699784\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817450000,"args":{"JVM stats":"heap_memory_usage: 385963024\nnon_heap_memory_usage: 152699784\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817458000,"args":{"JVM stats":"heap_memory_usage: 386719208\nnon_heap_memory_usage: 152699784\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817459000,"args":{"JVM stats":"heap_memory_usage: 386719208\nnon_heap_memory_usage: 152699848\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817461000,"args":{"JVM stats":"heap_memory_usage: 386719208\nnon_heap_memory_usage: 152699848\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817463000,"args":{"JVM stats":"heap_memory_usage: 386969792\nnon_heap_memory_usage: 152699848\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795817527000,"args":{"JVM stats":"heap_memory_usage: 388477104\nnon_heap_memory_usage: 152699848\nloaded_class_count: 16326\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795818121000,"args":{"JVM stats":"heap_memory_usage: 486737312\nnon_heap_memory_usage: 152756296\nloaded_class_count: 16326\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795818123000,"args":{"JVM stats":"heap_memory_usage: 486987840\nnon_heap_memory_usage: 152761440\nloaded_class_count: 16327\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795818123001,"args":{"JVM stats":"heap_memory_usage: 486987840\nnon_heap_memory_usage: 152761440\nloaded_class_count: 16327\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795818124000,"args":{"JVM stats":"heap_memory_usage: 486987840\nnon_heap_memory_usage: 152761440\nloaded_class_count: 16327\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518795818137000,"args":{"JVM stats":"heap_memory_usage: 487990136\nnon_heap_memory_usage: 152793336\nloaded_class_count: 16336\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":29,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812901000,"dur":3000},{"pid":1,"tid":29,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812904000,"dur":3000},{"pid":1,"tid":29,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812907000,"dur":5000},{"pid":1,"tid":29,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812907000,"dur":5000},{"pid":1,"tid":29,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812916000,"dur":2000},{"pid":1,"tid":29,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812918000,"dur":100},{"pid":1,"tid":29,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812919000,"dur":100},{"pid":1,"tid":29,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812919000,"dur":100},{"pid":1,"tid":29,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812919000,"dur":100},{"pid":1,"tid":29,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812919000,"dur":1000},{"pid":1,"tid":29,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812920000,"dur":100},{"pid":1,"tid":29,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812920000,"dur":100},{"pid":1,"tid":29,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812920000,"dur":2000},{"pid":1,"tid":29,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812922000,"dur":100},{"pid":1,"tid":29,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812922000,"dur":100},{"pid":1,"tid":29,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812922000,"dur":100},{"pid":1,"tid":29,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812922000,"dur":19000},{"pid":1,"tid":29,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812941000,"dur":100},{"pid":1,"tid":29,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812941000,"dur":10000},{"pid":1,"tid":29,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812954000,"dur":1000},{"pid":1,"tid":29,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812955000,"dur":1000},{"pid":1,"tid":29,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518795812918000,"dur":38000},{"pid":1,"tid":29,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812956000,"dur":3000},{"pid":1,"tid":29,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812959000,"dur":9000},{"pid":1,"tid":29,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812915000,"dur":54000},{"pid":1,"tid":29,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812969000,"dur":6000},{"pid":1,"tid":29,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795812914000,"dur":61000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795812988000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795812990000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795812991000,"dur":38000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813029000,"dur":4000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813033000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813037000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813037000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813038000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813038000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813039000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813039000,"dur":29000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813069000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813070000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813072000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813073000,"dur":4000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795813078000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813078000,"dur":13000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813091000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813099000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813100000,"dur":100},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813101000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813101000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813103000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795813105000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813109000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813110000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813117000,"dur":13000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795813131000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795813131000,"dur":3954000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817086000,"dur":2000},{"pid":1,"tid":30,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795817163000,"dur":6000},{"pid":1,"tid":30,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518795817169000,"dur":139000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795817088000,"dur":301000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795817390000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817391000,"dur":7000},{"pid":1,"tid":30,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795817399000,"dur":100},{"pid":1,"tid":30,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518795817399000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795817398000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817400000,"dur":12000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817413000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817413000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795817414000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817414000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817415000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817416000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817426000,"dur":16000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817443000,"dur":7000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817450000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795817458000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817460000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518795817462000,"dur":1000},{"pid":1,"tid":30,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795817466000,"dur":100},{"pid":1,"tid":30,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518795817466000,"dur":42000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795817464000,"dur":63000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795817529000,"dur":592000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795818121000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795818123000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518795818124000,"dur":100},{"pid":1,"tid":29,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518795818131000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-43-38-137.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-43-38-137.rawproto
new file mode 100644
index 00000000..ac5cf40f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-43-38-137.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-47-59-541.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-47-59-541.json
new file mode 100644
index 00000000..6318cb50
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-47-59-541.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518796078857000,"args":{"JVM stats":"heap_memory_usage: 545813104\nnon_heap_memory_usage: 152964712\nloaded_class_count: 16343\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796078988000,"args":{"JVM stats":"heap_memory_usage: 194189152\nnon_heap_memory_usage: 153079648\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 17\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796078988001,"args":{"JVM stats":"heap_memory_usage: 194189152\nnon_heap_memory_usage: 153079648\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079075000,"args":{"JVM stats":"heap_memory_usage: 201122800\nnon_heap_memory_usage: 153068192\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079082000,"args":{"JVM stats":"heap_memory_usage: 201374488\nnon_heap_memory_usage: 153071072\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079088000,"args":{"JVM stats":"heap_memory_usage: 201747808\nnon_heap_memory_usage: 153071072\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079089000,"args":{"JVM stats":"heap_memory_usage: 201747808\nnon_heap_memory_usage: 153071072\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079091000,"args":{"JVM stats":"heap_memory_usage: 201747808\nnon_heap_memory_usage: 153071072\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079092000,"args":{"JVM stats":"heap_memory_usage: 201747808\nnon_heap_memory_usage: 153071072\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079093000,"args":{"JVM stats":"heap_memory_usage: 201747808\nnon_heap_memory_usage: 153071072\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079094000,"args":{"JVM stats":"heap_memory_usage: 201747808\nnon_heap_memory_usage: 153071072\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079137000,"args":{"JVM stats":"heap_memory_usage: 205768184\nnon_heap_memory_usage: 153083488\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079138000,"args":{"JVM stats":"heap_memory_usage: 205768184\nnon_heap_memory_usage: 153083488\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079142000,"args":{"JVM stats":"heap_memory_usage: 206011392\nnon_heap_memory_usage: 153083488\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079143000,"args":{"JVM stats":"heap_memory_usage: 206263080\nnon_heap_memory_usage: 153083488\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079153000,"args":{"JVM stats":"heap_memory_usage: 207391504\nnon_heap_memory_usage: 153121376\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079155000,"args":{"JVM stats":"heap_memory_usage: 207391504\nnon_heap_memory_usage: 153121376\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079173000,"args":{"JVM stats":"heap_memory_usage: 208024080\nnon_heap_memory_usage: 153168096\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079182000,"args":{"JVM stats":"heap_memory_usage: 208648952\nnon_heap_memory_usage: 153168096\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079185000,"args":{"JVM stats":"heap_memory_usage: 208648952\nnon_heap_memory_usage: 153168096\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079186000,"args":{"JVM stats":"heap_memory_usage: 208900952\nnon_heap_memory_usage: 153168096\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079187000,"args":{"JVM stats":"heap_memory_usage: 208900952\nnon_heap_memory_usage: 153168096\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079190000,"args":{"JVM stats":"heap_memory_usage: 209023320\nnon_heap_memory_usage: 153168096\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079193000,"args":{"JVM stats":"heap_memory_usage: 209274976\nnon_heap_memory_usage: 153168096\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079199000,"args":{"JVM stats":"heap_memory_usage: 209526688\nnon_heap_memory_usage: 153173632\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079202000,"args":{"JVM stats":"heap_memory_usage: 209526688\nnon_heap_memory_usage: 153177408\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079215000,"args":{"JVM stats":"heap_memory_usage: 210281736\nnon_heap_memory_usage: 153177408\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079244000,"args":{"JVM stats":"heap_memory_usage: 211036264\nnon_heap_memory_usage: 153189376\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079245000,"args":{"JVM stats":"heap_memory_usage: 211036264\nnon_heap_memory_usage: 153189376\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079340000,"args":{"JVM stats":"heap_memory_usage: 212164304\nnon_heap_memory_usage: 153222368\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079343000,"args":{"JVM stats":"heap_memory_usage: 212164304\nnon_heap_memory_usage: 153222368\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079364000,"args":{"JVM stats":"heap_memory_usage: 213170992\nnon_heap_memory_usage: 153222368\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079366000,"args":{"JVM stats":"heap_memory_usage: 213170992\nnon_heap_memory_usage: 153234912\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079376000,"args":{"JVM stats":"heap_memory_usage: 214038560\nnon_heap_memory_usage: 153230624\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079377000,"args":{"JVM stats":"heap_memory_usage: 214290240\nnon_heap_memory_usage: 153230624\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079398000,"args":{"JVM stats":"heap_memory_usage: 215409384\nnon_heap_memory_usage: 153230624\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079399000,"args":{"JVM stats":"heap_memory_usage: 215662080\nnon_heap_memory_usage: 153230624\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079400000,"args":{"JVM stats":"heap_memory_usage: 215662080\nnon_heap_memory_usage: 153230624\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079400001,"args":{"JVM stats":"heap_memory_usage: 215662080\nnon_heap_memory_usage: 153230656\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079403000,"args":{"JVM stats":"heap_memory_usage: 215662080\nnon_heap_memory_usage: 153230656\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079405000,"args":{"JVM stats":"heap_memory_usage: 215662080\nnon_heap_memory_usage: 153230656\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079420000,"args":{"JVM stats":"heap_memory_usage: 216417280\nnon_heap_memory_usage: 153230656\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079450000,"args":{"JVM stats":"heap_memory_usage: 217797184\nnon_heap_memory_usage: 153237464\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079460000,"args":{"JVM stats":"heap_memory_usage: 218049000\nnon_heap_memory_usage: 153237464\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079472000,"args":{"JVM stats":"heap_memory_usage: 218552400\nnon_heap_memory_usage: 153237464\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079474000,"args":{"JVM stats":"heap_memory_usage: 218804096\nnon_heap_memory_usage: 153237464\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079475000,"args":{"JVM stats":"heap_memory_usage: 218804096\nnon_heap_memory_usage: 153237464\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079479000,"args":{"JVM stats":"heap_memory_usage: 219056008\nnon_heap_memory_usage: 153237464\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079483000,"args":{"JVM stats":"heap_memory_usage: 219056008\nnon_heap_memory_usage: 153237464\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079522000,"args":{"JVM stats":"heap_memory_usage: 219684840\nnon_heap_memory_usage: 153238872\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079524000,"args":{"JVM stats":"heap_memory_usage: 219936552\nnon_heap_memory_usage: 153238904\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079524001,"args":{"JVM stats":"heap_memory_usage: 219936552\nnon_heap_memory_usage: 153238904\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079525000,"args":{"JVM stats":"heap_memory_usage: 219936552\nnon_heap_memory_usage: 153238904\nloaded_class_count: 16343\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796079541000,"args":{"JVM stats":"heap_memory_usage: 221441664\nnon_heap_memory_usage: 153248048\nloaded_class_count: 16343\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":31,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078857000,"dur":4000},{"pid":1,"tid":31,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078861000,"dur":5000},{"pid":1,"tid":31,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078866000,"dur":5000},{"pid":1,"tid":31,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078866000,"dur":5000},{"pid":1,"tid":31,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078874000,"dur":4000},{"pid":1,"tid":31,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078878000,"dur":100},{"pid":1,"tid":31,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078879000,"dur":1000},{"pid":1,"tid":31,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078880000,"dur":100},{"pid":1,"tid":31,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078881000,"dur":100},{"pid":1,"tid":31,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078881000,"dur":100},{"pid":1,"tid":31,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078881000,"dur":1000},{"pid":1,"tid":31,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078882000,"dur":100},{"pid":1,"tid":31,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078882000,"dur":2000},{"pid":1,"tid":31,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078884000,"dur":100},{"pid":1,"tid":31,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078884000,"dur":1000},{"pid":1,"tid":31,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078885000,"dur":100},{"pid":1,"tid":31,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078885000,"dur":26000},{"pid":1,"tid":31,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078911000,"dur":2000},{"pid":1,"tid":31,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078913000,"dur":4000},{"pid":1,"tid":31,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078919000,"dur":3000},{"pid":1,"tid":31,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078922000,"dur":100},{"pid":1,"tid":31,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796078879000,"dur":43000},{"pid":1,"tid":31,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078922000,"dur":3000},{"pid":1,"tid":31,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078925000,"dur":9000},{"pid":1,"tid":31,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078874000,"dur":61000},{"pid":1,"tid":31,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078935000,"dur":11000},{"pid":1,"tid":31,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796078873000,"dur":73000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796078985000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796078988000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796078989000,"dur":86000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079076000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079083000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079089000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079090000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079091000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079093000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079094000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079096000,"dur":41000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079138000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079139000,"dur":3000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079142000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079143000,"dur":10000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079154000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079155000,"dur":18000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079174000,"dur":8000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079183000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079185000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079186000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079187000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079191000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079193000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079201000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079203000,"dur":12000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079216000,"dur":28000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079245000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079246000,"dur":94000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079341000,"dur":2000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079345000,"dur":18000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079365000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: transform","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079366000,"dur":10000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079376000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079377000,"dur":20000},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079398000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079400000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: pre cold swap","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079400000,"dur":100},{"pid":1,"tid":0,"id":67,"name":"task: fast deploy runtime extractor","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079401000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: generate instant run app info","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079404000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079406000,"dur":14000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079421000,"dur":29000},{"pid":1,"tid":0,"id":71,"name":"task: transform","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079451000,"dur":9000},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079460000,"dur":11000},{"pid":1,"tid":0,"id":73,"name":"task: validate signing","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079472000,"dur":1000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079474000,"dur":1000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079476000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079480000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: package application","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796079484000,"dur":38000},{"pid":1,"tid":0,"id":78,"name":"task: build info writer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079522000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079524000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: unknown task type","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796079524000,"dur":100},{"pid":1,"tid":31,"id":81,"name":"base plugin build finished","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796079533000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-47-59-541.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-47-59-541.rawproto
new file mode 100644
index 00000000..cbe04d6e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-47-59-541.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-48-30-524.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-48-30-524.json
new file mode 100644
index 00000000..4718e41b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-48-30-524.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108132000,"args":{"JVM stats":"heap_memory_usage: 276616096\nnon_heap_memory_usage: 153339936\nloaded_class_count: 16350\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108207000,"args":{"JVM stats":"heap_memory_usage: 289502152\nnon_heap_memory_usage: 153483456\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108207001,"args":{"JVM stats":"heap_memory_usage: 289502152\nnon_heap_memory_usage: 153483456\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108250000,"args":{"JVM stats":"heap_memory_usage: 295801592\nnon_heap_memory_usage: 153492480\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108255000,"args":{"JVM stats":"heap_memory_usage: 296306024\nnon_heap_memory_usage: 153497600\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108259000,"args":{"JVM stats":"heap_memory_usage: 297061384\nnon_heap_memory_usage: 153521064\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108259001,"args":{"JVM stats":"heap_memory_usage: 297061384\nnon_heap_memory_usage: 153521064\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108260000,"args":{"JVM stats":"heap_memory_usage: 297061384\nnon_heap_memory_usage: 153526440\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108261000,"args":{"JVM stats":"heap_memory_usage: 297061384\nnon_heap_memory_usage: 153522152\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108262000,"args":{"JVM stats":"heap_memory_usage: 297061384\nnon_heap_memory_usage: 153522152\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108262001,"args":{"JVM stats":"heap_memory_usage: 297061384\nnon_heap_memory_usage: 153522152\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108292000,"args":{"JVM stats":"heap_memory_usage: 301341440\nnon_heap_memory_usage: 153535272\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108293000,"args":{"JVM stats":"heap_memory_usage: 301341440\nnon_heap_memory_usage: 153540648\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108296000,"args":{"JVM stats":"heap_memory_usage: 301341440\nnon_heap_memory_usage: 153559144\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108297000,"args":{"JVM stats":"heap_memory_usage: 301593240\nnon_heap_memory_usage: 153576040\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108306000,"args":{"JVM stats":"heap_memory_usage: 302600328\nnon_heap_memory_usage: 153579816\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108306001,"args":{"JVM stats":"heap_memory_usage: 302600328\nnon_heap_memory_usage: 153579816\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108321000,"args":{"JVM stats":"heap_memory_usage: 303355368\nnon_heap_memory_usage: 153587624\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108328000,"args":{"JVM stats":"heap_memory_usage: 303860768\nnon_heap_memory_usage: 153596904\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108329000,"args":{"JVM stats":"heap_memory_usage: 303860768\nnon_heap_memory_usage: 153596904\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108330000,"args":{"JVM stats":"heap_memory_usage: 303860768\nnon_heap_memory_usage: 153596904\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108330001,"args":{"JVM stats":"heap_memory_usage: 303860768\nnon_heap_memory_usage: 153596904\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108333000,"args":{"JVM stats":"heap_memory_usage: 304112448\nnon_heap_memory_usage: 153596904\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108336000,"args":{"JVM stats":"heap_memory_usage: 304112448\nnon_heap_memory_usage: 153598440\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108340000,"args":{"JVM stats":"heap_memory_usage: 304364104\nnon_heap_memory_usage: 153616232\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108342000,"args":{"JVM stats":"heap_memory_usage: 304615880\nnon_heap_memory_usage: 153616232\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108349000,"args":{"JVM stats":"heap_memory_usage: 305119264\nnon_heap_memory_usage: 153616232\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108366000,"args":{"JVM stats":"heap_memory_usage: 305622632\nnon_heap_memory_usage: 153616232\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796108367000,"args":{"JVM stats":"heap_memory_usage: 305874712\nnon_heap_memory_usage: 153616232\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109535000,"args":{"JVM stats":"heap_memory_usage: 307133024\nnon_heap_memory_usage: 153676264\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109538000,"args":{"JVM stats":"heap_memory_usage: 307133024\nnon_heap_memory_usage: 153676264\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109859000,"args":{"JVM stats":"heap_memory_usage: 329468088\nnon_heap_memory_usage: 153708000\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109860000,"args":{"JVM stats":"heap_memory_usage: 329468088\nnon_heap_memory_usage: 153708000\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109867000,"args":{"JVM stats":"heap_memory_usage: 330223240\nnon_heap_memory_usage: 153708000\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109869000,"args":{"JVM stats":"heap_memory_usage: 330474984\nnon_heap_memory_usage: 153708376\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109883000,"args":{"JVM stats":"heap_memory_usage: 332238072\nnon_heap_memory_usage: 153712216\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109884000,"args":{"JVM stats":"heap_memory_usage: 332490768\nnon_heap_memory_usage: 153712216\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109884001,"args":{"JVM stats":"heap_memory_usage: 332490768\nnon_heap_memory_usage: 153712216\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109885000,"args":{"JVM stats":"heap_memory_usage: 332490768\nnon_heap_memory_usage: 153712216\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109886000,"args":{"JVM stats":"heap_memory_usage: 332490768\nnon_heap_memory_usage: 153712216\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109887000,"args":{"JVM stats":"heap_memory_usage: 332490768\nnon_heap_memory_usage: 153712216\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109896000,"args":{"JVM stats":"heap_memory_usage: 333246264\nnon_heap_memory_usage: 153712216\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109912000,"args":{"JVM stats":"heap_memory_usage: 335008480\nnon_heap_memory_usage: 153712216\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109920000,"args":{"JVM stats":"heap_memory_usage: 335512176\nnon_heap_memory_usage: 153724440\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109928000,"args":{"JVM stats":"heap_memory_usage: 336015824\nnon_heap_memory_usage: 153724440\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109929000,"args":{"JVM stats":"heap_memory_usage: 336015824\nnon_heap_memory_usage: 153724440\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109931000,"args":{"JVM stats":"heap_memory_usage: 336015824\nnon_heap_memory_usage: 153730264\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109933000,"args":{"JVM stats":"heap_memory_usage: 336267480\nnon_heap_memory_usage: 153730264\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796109996000,"args":{"JVM stats":"heap_memory_usage: 337274160\nnon_heap_memory_usage: 153730264\nloaded_class_count: 16351\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796110510000,"args":{"JVM stats":"heap_memory_usage: 435593672\nnon_heap_memory_usage: 153791968\nloaded_class_count: 16351\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796110512000,"args":{"JVM stats":"heap_memory_usage: 435593672\nnon_heap_memory_usage: 153796960\nloaded_class_count: 16351\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796110512001,"args":{"JVM stats":"heap_memory_usage: 435593672\nnon_heap_memory_usage: 153796960\nloaded_class_count: 16351\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796110513000,"args":{"JVM stats":"heap_memory_usage: 435845328\nnon_heap_memory_usage: 153796960\nloaded_class_count: 16351\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796110524000,"args":{"JVM stats":"heap_memory_usage: 437233272\nnon_heap_memory_usage: 153763216\nloaded_class_count: 16351\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":31,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108132000,"dur":4000},{"pid":1,"tid":31,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108136000,"dur":3000},{"pid":1,"tid":31,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108139000,"dur":1000},{"pid":1,"tid":31,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108139000,"dur":1000},{"pid":1,"tid":31,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108142000,"dur":2000},{"pid":1,"tid":31,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108144000,"dur":100},{"pid":1,"tid":31,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108145000,"dur":1000},{"pid":1,"tid":31,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108146000,"dur":100},{"pid":1,"tid":31,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108146000,"dur":100},{"pid":1,"tid":31,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108146000,"dur":100},{"pid":1,"tid":31,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108146000,"dur":100},{"pid":1,"tid":31,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108146000,"dur":100},{"pid":1,"tid":31,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108146000,"dur":2000},{"pid":1,"tid":31,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108148000,"dur":100},{"pid":1,"tid":31,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108148000,"dur":1000},{"pid":1,"tid":31,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108149000,"dur":100},{"pid":1,"tid":31,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108149000,"dur":21000},{"pid":1,"tid":31,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108170000,"dur":1000},{"pid":1,"tid":31,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108171000,"dur":4000},{"pid":1,"tid":31,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108177000,"dur":2000},{"pid":1,"tid":31,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108179000,"dur":100},{"pid":1,"tid":31,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796108144000,"dur":35000},{"pid":1,"tid":31,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108179000,"dur":3000},{"pid":1,"tid":31,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108182000,"dur":6000},{"pid":1,"tid":31,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108142000,"dur":47000},{"pid":1,"tid":31,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108189000,"dur":5000},{"pid":1,"tid":31,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796108141000,"dur":53000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796108205000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108207000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108207000,"dur":42000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108250000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108255000,"dur":4000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108259000,"dur":100},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108260000,"dur":100},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108261000,"dur":100},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108261000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108262000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108262000,"dur":30000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108293000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108294000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108297000,"dur":100},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108299000,"dur":7000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796108306000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108306000,"dur":15000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108321000,"dur":7000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108328000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108329000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108330000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108330000,"dur":3000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108334000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796108337000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108341000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108342000,"dur":7000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108350000,"dur":16000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796108367000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796108368000,"dur":1167000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109536000,"dur":2000},{"pid":1,"tid":32,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518796109619000,"dur":4000},{"pid":1,"tid":32,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518796109623000,"dur":149000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796109538000,"dur":321000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796109860000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109860000,"dur":6000},{"pid":1,"tid":32,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518796109869000,"dur":100},{"pid":1,"tid":32,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518796109869000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796109867000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109870000,"dur":13000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109883000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109884000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796109884000,"dur":1000},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109885000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109886000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109887000,"dur":9000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109896000,"dur":16000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109912000,"dur":8000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109921000,"dur":7000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796109928000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109929000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796109932000,"dur":1000},{"pid":1,"tid":32,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518796109936000,"dur":1000},{"pid":1,"tid":32,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518796109937000,"dur":42000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796109934000,"dur":62000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796109996000,"dur":514000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796110511000,"dur":1000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796110512000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796110513000,"dur":100},{"pid":1,"tid":31,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796110517000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-48-30-524.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-48-30-524.rawproto
new file mode 100644
index 00000000..49781360
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-48-30-524.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-50-02-430.json b/IGetAndroid/build/android-profile/profile-2018-02-16-16-50-02-430.json
new file mode 100644
index 00000000..77cfa55f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-50-02-430.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518796199947000,"args":{"JVM stats":"heap_memory_usage: 493489544\nnon_heap_memory_usage: 153898984\nloaded_class_count: 16358\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200027000,"args":{"JVM stats":"heap_memory_usage: 506350664\nnon_heap_memory_usage: 154044216\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200028000,"args":{"JVM stats":"heap_memory_usage: 506350664\nnon_heap_memory_usage: 154044216\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200061000,"args":{"JVM stats":"heap_memory_usage: 512906808\nnon_heap_memory_usage: 154050744\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200065000,"args":{"JVM stats":"heap_memory_usage: 513914096\nnon_heap_memory_usage: 154050744\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200068000,"args":{"JVM stats":"heap_memory_usage: 513914096\nnon_heap_memory_usage: 154050744\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200069000,"args":{"JVM stats":"heap_memory_usage: 514165784\nnon_heap_memory_usage: 154050744\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200070000,"args":{"JVM stats":"heap_memory_usage: 514165784\nnon_heap_memory_usage: 154050744\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200071000,"args":{"JVM stats":"heap_memory_usage: 514165784\nnon_heap_memory_usage: 154050744\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200071001,"args":{"JVM stats":"heap_memory_usage: 514165784\nnon_heap_memory_usage: 154050744\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200072000,"args":{"JVM stats":"heap_memory_usage: 514165784\nnon_heap_memory_usage: 154050744\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200102000,"args":{"JVM stats":"heap_memory_usage: 518195528\nnon_heap_memory_usage: 154060152\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200103000,"args":{"JVM stats":"heap_memory_usage: 518195528\nnon_heap_memory_usage: 154060152\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200106000,"args":{"JVM stats":"heap_memory_usage: 518195528\nnon_heap_memory_usage: 154060152\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200107000,"args":{"JVM stats":"heap_memory_usage: 518447184\nnon_heap_memory_usage: 154060152\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200111000,"args":{"JVM stats":"heap_memory_usage: 519454240\nnon_heap_memory_usage: 154063776\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200112000,"args":{"JVM stats":"heap_memory_usage: 519454240\nnon_heap_memory_usage: 154063776\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200124000,"args":{"JVM stats":"heap_memory_usage: 519961696\nnon_heap_memory_usage: 154063776\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200131000,"args":{"JVM stats":"heap_memory_usage: 520465040\nnon_heap_memory_usage: 154066592\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200132000,"args":{"JVM stats":"heap_memory_usage: 520465040\nnon_heap_memory_usage: 154066592\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200133000,"args":{"JVM stats":"heap_memory_usage: 520465040\nnon_heap_memory_usage: 154066592\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200133001,"args":{"JVM stats":"heap_memory_usage: 520465040\nnon_heap_memory_usage: 154066592\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200135000,"args":{"JVM stats":"heap_memory_usage: 520969416\nnon_heap_memory_usage: 154067616\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200137000,"args":{"JVM stats":"heap_memory_usage: 520969416\nnon_heap_memory_usage: 154067616\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200140000,"args":{"JVM stats":"heap_memory_usage: 521221208\nnon_heap_memory_usage: 154068864\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200141000,"args":{"JVM stats":"heap_memory_usage: 521472944\nnon_heap_memory_usage: 154068864\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200147000,"args":{"JVM stats":"heap_memory_usage: 521976328\nnon_heap_memory_usage: 154074176\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200161000,"args":{"JVM stats":"heap_memory_usage: 522483808\nnon_heap_memory_usage: 154074176\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796200161001,"args":{"JVM stats":"heap_memory_usage: 522735496\nnon_heap_memory_usage: 154074176\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201357000,"args":{"JVM stats":"heap_memory_usage: 523742120\nnon_heap_memory_usage: 154197616\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201358000,"args":{"JVM stats":"heap_memory_usage: 523993832\nnon_heap_memory_usage: 154197616\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201713000,"args":{"JVM stats":"heap_memory_usage: 208902224\nnon_heap_memory_usage: 154235248\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 18\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201714000,"args":{"JVM stats":"heap_memory_usage: 210335640\nnon_heap_memory_usage: 154235248\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201723000,"args":{"JVM stats":"heap_memory_usage: 212207152\nnon_heap_memory_usage: 154235248\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201724000,"args":{"JVM stats":"heap_memory_usage: 212493128\nnon_heap_memory_usage: 154235248\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201740000,"args":{"JVM stats":"heap_memory_usage: 213473408\nnon_heap_memory_usage: 154235248\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201741000,"args":{"JVM stats":"heap_memory_usage: 213473408\nnon_heap_memory_usage: 154235248\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201743000,"args":{"JVM stats":"heap_memory_usage: 213759912\nnon_heap_memory_usage: 154235248\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201743001,"args":{"JVM stats":"heap_memory_usage: 213759912\nnon_heap_memory_usage: 154235248\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201744000,"args":{"JVM stats":"heap_memory_usage: 213762000\nnon_heap_memory_usage: 154236560\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201745000,"args":{"JVM stats":"heap_memory_usage: 213762000\nnon_heap_memory_usage: 154236560\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201757000,"args":{"JVM stats":"heap_memory_usage: 214334168\nnon_heap_memory_usage: 154251920\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201776000,"args":{"JVM stats":"heap_memory_usage: 215742040\nnon_heap_memory_usage: 154251920\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201785000,"args":{"JVM stats":"heap_memory_usage: 216314208\nnon_heap_memory_usage: 154251920\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201794000,"args":{"JVM stats":"heap_memory_usage: 216886584\nnon_heap_memory_usage: 154251920\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201795000,"args":{"JVM stats":"heap_memory_usage: 216886584\nnon_heap_memory_usage: 154252984\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201798000,"args":{"JVM stats":"heap_memory_usage: 217172584\nnon_heap_memory_usage: 154259192\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201800000,"args":{"JVM stats":"heap_memory_usage: 217172584\nnon_heap_memory_usage: 154259192\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796201864000,"args":{"JVM stats":"heap_memory_usage: 218594320\nnon_heap_memory_usage: 154263960\nloaded_class_count: 16358\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796202416000,"args":{"JVM stats":"heap_memory_usage: 316573840\nnon_heap_memory_usage: 154271152\nloaded_class_count: 16358\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796202419000,"args":{"JVM stats":"heap_memory_usage: 317000224\nnon_heap_memory_usage: 154271152\nloaded_class_count: 16358\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796202419001,"args":{"JVM stats":"heap_memory_usage: 317000224\nnon_heap_memory_usage: 154271152\nloaded_class_count: 16358\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796202419000,"args":{"JVM stats":"heap_memory_usage: 317000224\nnon_heap_memory_usage: 154271152\nloaded_class_count: 16358\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518796202430000,"args":{"JVM stats":"heap_memory_usage: 317823896\nnon_heap_memory_usage: 154267040\nloaded_class_count: 16358\nthread_count: 28\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":33,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199948000,"dur":5000},{"pid":1,"tid":33,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199953000,"dur":3000},{"pid":1,"tid":33,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199956000,"dur":3000},{"pid":1,"tid":33,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199956000,"dur":3000},{"pid":1,"tid":33,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199962000,"dur":1000},{"pid":1,"tid":33,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199963000,"dur":1000},{"pid":1,"tid":33,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199964000,"dur":100},{"pid":1,"tid":33,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199964000,"dur":1000},{"pid":1,"tid":33,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199965000,"dur":100},{"pid":1,"tid":33,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199965000,"dur":100},{"pid":1,"tid":33,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199965000,"dur":100},{"pid":1,"tid":33,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199965000,"dur":1000},{"pid":1,"tid":33,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199966000,"dur":2000},{"pid":1,"tid":33,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199968000,"dur":100},{"pid":1,"tid":33,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199968000,"dur":1000},{"pid":1,"tid":33,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199969000,"dur":100},{"pid":1,"tid":33,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199969000,"dur":20000},{"pid":1,"tid":33,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199989000,"dur":100},{"pid":1,"tid":33,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199989000,"dur":4000},{"pid":1,"tid":33,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199994000,"dur":1000},{"pid":1,"tid":33,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199995000,"dur":100},{"pid":1,"tid":33,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518796199964000,"dur":31000},{"pid":1,"tid":33,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199995000,"dur":3000},{"pid":1,"tid":33,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199998000,"dur":7000},{"pid":1,"tid":33,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199962000,"dur":44000},{"pid":1,"tid":33,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796200006000,"dur":8000},{"pid":1,"tid":33,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796199960000,"dur":54000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796200026000,"dur":1000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200028000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200028000,"dur":33000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200062000,"dur":3000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200065000,"dur":3000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200068000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200069000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200070000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200071000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200072000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200072000,"dur":30000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200103000,"dur":100},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200104000,"dur":2000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200106000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200107000,"dur":4000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796200112000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200112000,"dur":12000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200125000,"dur":6000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200131000,"dur":1000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200132000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200133000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200133000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200136000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796200137000,"dur":3000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200140000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200141000,"dur":6000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200147000,"dur":14000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796200161000,"dur":100},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796200162000,"dur":1194000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201357000,"dur":1000},{"pid":1,"tid":34,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518796201442000,"dur":5000},{"pid":1,"tid":34,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518796201447000,"dur":184000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796201359000,"dur":354000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796201714000,"dur":100},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201715000,"dur":7000},{"pid":1,"tid":34,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518796201724000,"dur":100},{"pid":1,"tid":34,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518796201724000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796201723000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201725000,"dur":15000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201740000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: unknown task type","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201742000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: pre cold swap","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796201743000,"dur":100},{"pid":1,"tid":0,"id":71,"name":"task: fast deploy runtime extractor","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201743000,"dur":1000},{"pid":1,"tid":0,"id":72,"name":"task: generate instant run app info","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201744000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201745000,"dur":12000},{"pid":1,"tid":0,"id":74,"name":"task: transform","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201757000,"dur":19000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201777000,"dur":8000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201786000,"dur":8000},{"pid":1,"tid":0,"id":77,"name":"task: validate signing","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796201794000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201796000,"dur":2000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518796201798000,"dur":2000},{"pid":1,"tid":34,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518796201803000,"dur":100},{"pid":1,"tid":34,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518796201804000,"dur":41000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796201800000,"dur":64000},{"pid":1,"tid":0,"id":83,"name":"task: package application","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796201864000,"dur":552000},{"pid":1,"tid":0,"id":84,"name":"task: build info writer","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796202417000,"dur":2000},{"pid":1,"tid":0,"id":85,"name":"task: unknown task type","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796202419000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518796202419000,"dur":100},{"pid":1,"tid":33,"id":87,"name":"base plugin build finished","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518796202425000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-16-50-02-430.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-16-50-02-430.rawproto
new file mode 100644
index 00000000..6a5b3978
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-16-50-02-430.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-18-42-49-607.json b/IGetAndroid/build/android-profile/profile-2018-02-16-18-42-49-607.json
new file mode 100644
index 00000000..f68f273d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-18-42-49-607.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518802956686000,"args":{"JVM stats":"heap_memory_usage: 22418080\nnon_heap_memory_usage: 54952656\nloaded_class_count: 7565\nthread_count: 25\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 6\n gc_time: 67\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 77\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959234000,"args":{"JVM stats":"heap_memory_usage: 108721976\nnon_heap_memory_usage: 78865688\nloaded_class_count: 10744\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 19\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959237000,"args":{"JVM stats":"heap_memory_usage: 108721976\nnon_heap_memory_usage: 78889096\nloaded_class_count: 10749\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959524000,"args":{"JVM stats":"heap_memory_usage: 129931704\nnon_heap_memory_usage: 79403224\nloaded_class_count: 10926\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959544000,"args":{"JVM stats":"heap_memory_usage: 129932168\nnon_heap_memory_usage: 79491824\nloaded_class_count: 10932\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959559000,"args":{"JVM stats":"heap_memory_usage: 130375440\nnon_heap_memory_usage: 79574856\nloaded_class_count: 10938\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959563000,"args":{"JVM stats":"heap_memory_usage: 130375744\nnon_heap_memory_usage: 79593208\nloaded_class_count: 10939\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959568000,"args":{"JVM stats":"heap_memory_usage: 130375952\nnon_heap_memory_usage: 79627912\nloaded_class_count: 10940\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959571000,"args":{"JVM stats":"heap_memory_usage: 130375952\nnon_heap_memory_usage: 79650336\nloaded_class_count: 10941\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959573000,"args":{"JVM stats":"heap_memory_usage: 130375952\nnon_heap_memory_usage: 79663696\nloaded_class_count: 10941\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959574000,"args":{"JVM stats":"heap_memory_usage: 130375952\nnon_heap_memory_usage: 79666752\nloaded_class_count: 10941\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959748000,"args":{"JVM stats":"heap_memory_usage: 142507176\nnon_heap_memory_usage: 79819456\nloaded_class_count: 10943\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959760000,"args":{"JVM stats":"heap_memory_usage: 142656472\nnon_heap_memory_usage: 79857056\nloaded_class_count: 10948\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959774000,"args":{"JVM stats":"heap_memory_usage: 142656472\nnon_heap_memory_usage: 79901672\nloaded_class_count: 10952\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959778000,"args":{"JVM stats":"heap_memory_usage: 142656472\nnon_heap_memory_usage: 79919016\nloaded_class_count: 10952\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959803000,"args":{"JVM stats":"heap_memory_usage: 145062848\nnon_heap_memory_usage: 79883448\nloaded_class_count: 10952\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959804000,"args":{"JVM stats":"heap_memory_usage: 145062848\nnon_heap_memory_usage: 79863904\nloaded_class_count: 10952\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802959845000,"args":{"JVM stats":"heap_memory_usage: 146085064\nnon_heap_memory_usage: 79737056\nloaded_class_count: 10953\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961363000,"args":{"JVM stats":"heap_memory_usage: 82499512\nnon_heap_memory_usage: 91882712\nloaded_class_count: 11902\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 30\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 212\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961374000,"args":{"JVM stats":"heap_memory_usage: 89954864\nnon_heap_memory_usage: 91950920\nloaded_class_count: 11903\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961377000,"args":{"JVM stats":"heap_memory_usage: 89954864\nnon_heap_memory_usage: 91988576\nloaded_class_count: 11904\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961378000,"args":{"JVM stats":"heap_memory_usage: 89954864\nnon_heap_memory_usage: 91977920\nloaded_class_count: 11904\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961388000,"args":{"JVM stats":"heap_memory_usage: 93878352\nnon_heap_memory_usage: 92024856\nloaded_class_count: 11904\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961404000,"args":{"JVM stats":"heap_memory_usage: 94988912\nnon_heap_memory_usage: 92082616\nloaded_class_count: 11919\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961413000,"args":{"JVM stats":"heap_memory_usage: 95519864\nnon_heap_memory_usage: 92116536\nloaded_class_count: 11922\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961418000,"args":{"JVM stats":"heap_memory_usage: 95519864\nnon_heap_memory_usage: 92129128\nloaded_class_count: 11925\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961522000,"args":{"JVM stats":"heap_memory_usage: 100024424\nnon_heap_memory_usage: 92882976\nloaded_class_count: 12022\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961554000,"args":{"JVM stats":"heap_memory_usage: 101493392\nnon_heap_memory_usage: 93051752\nloaded_class_count: 12026\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802961559000,"args":{"JVM stats":"heap_memory_usage: 101493392\nnon_heap_memory_usage: 93098480\nloaded_class_count: 12028\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802966252000,"args":{"JVM stats":"heap_memory_usage: 107821808\nnon_heap_memory_usage: 93547544\nloaded_class_count: 12085\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802966255000,"args":{"JVM stats":"heap_memory_usage: 107821808\nnon_heap_memory_usage: 93563544\nloaded_class_count: 12085\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802966781000,"args":{"JVM stats":"heap_memory_usage: 137299328\nnon_heap_memory_usage: 95785008\nloaded_class_count: 12285\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802966787000,"args":{"JVM stats":"heap_memory_usage: 137883056\nnon_heap_memory_usage: 95804688\nloaded_class_count: 12285\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802966808000,"args":{"JVM stats":"heap_memory_usage: 138737896\nnon_heap_memory_usage: 95862488\nloaded_class_count: 12286\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802966816000,"args":{"JVM stats":"heap_memory_usage: 139268472\nnon_heap_memory_usage: 95884648\nloaded_class_count: 12286\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802966995000,"args":{"JVM stats":"heap_memory_usage: 149968576\nnon_heap_memory_usage: 96560952\nloaded_class_count: 12394\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967009000,"args":{"JVM stats":"heap_memory_usage: 149968576\nnon_heap_memory_usage: 96374288\nloaded_class_count: 12402\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967010000,"args":{"JVM stats":"heap_memory_usage: 149968576\nnon_heap_memory_usage: 96299344\nloaded_class_count: 12402\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967011000,"args":{"JVM stats":"heap_memory_usage: 149968576\nnon_heap_memory_usage: 96263400\nloaded_class_count: 12403\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967015000,"args":{"JVM stats":"heap_memory_usage: 150581560\nnon_heap_memory_usage: 96231424\nloaded_class_count: 12403\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967017000,"args":{"JVM stats":"heap_memory_usage: 150581560\nnon_heap_memory_usage: 96245200\nloaded_class_count: 12403\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967077000,"args":{"JVM stats":"heap_memory_usage: 154341720\nnon_heap_memory_usage: 95447088\nloaded_class_count: 12407\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967779000,"args":{"JVM stats":"heap_memory_usage: 207997632\nnon_heap_memory_usage: 102309200\nloaded_class_count: 12835\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967802000,"args":{"JVM stats":"heap_memory_usage: 209638584\nnon_heap_memory_usage: 102368088\nloaded_class_count: 12835\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967919000,"args":{"JVM stats":"heap_memory_usage: 220490200\nnon_heap_memory_usage: 103895320\nloaded_class_count: 12977\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967930000,"args":{"JVM stats":"heap_memory_usage: 221650152\nnon_heap_memory_usage: 103981672\nloaded_class_count: 13004\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802967940000,"args":{"JVM stats":"heap_memory_usage: 222180856\nnon_heap_memory_usage: 104025984\nloaded_class_count: 13005\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802968662000,"args":{"JVM stats":"heap_memory_usage: 254335160\nnon_heap_memory_usage: 105768944\nloaded_class_count: 13352\nthread_count: 56\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802968740000,"args":{"JVM stats":"heap_memory_usage: 256500792\nnon_heap_memory_usage: 105791360\nloaded_class_count: 13354\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802969422000,"args":{"JVM stats":"heap_memory_usage: 127214824\nnon_heap_memory_usage: 105585960\nloaded_class_count: 13418\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 30\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802969443000,"args":{"JVM stats":"heap_memory_usage: 133361864\nnon_heap_memory_usage: 105832880\nloaded_class_count: 13446\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802969444000,"args":{"JVM stats":"heap_memory_usage: 134044504\nnon_heap_memory_usage: 105839616\nloaded_class_count: 13446\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802969444001,"args":{"JVM stats":"heap_memory_usage: 134044504\nnon_heap_memory_usage: 105840264\nloaded_class_count: 13446\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518802969612000,"args":{"JVM stats":"heap_memory_usage: 145633912\nnon_heap_memory_usage: 107445800\nloaded_class_count: 13739\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802956730000,"dur":369000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802957099000,"dur":300000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802957400000,"dur":51000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802957400000,"dur":52000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802958344000,"dur":94000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802958439000,"dur":18000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958490000,"dur":42000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958532000,"dur":3000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958536000,"dur":6000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958542000,"dur":29000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958572000,"dur":5000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958578000,"dur":5000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958583000,"dur":46000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958630000,"dur":4000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958635000,"dur":8000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958643000,"dur":2000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958646000,"dur":68000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958714000,"dur":21000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958736000,"dur":102000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958843000,"dur":39000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958883000,"dur":4000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802958458000,"dur":430000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802958888000,"dur":52000},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802958940000,"dur":44000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802958342000,"dur":695000},{"pid":1,"tid":1,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802959039000,"dur":31000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802957563000,"dur":1507000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802959216000,"dur":12000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959236000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959238000,"dur":286000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959527000,"dur":16000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959547000,"dur":12000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959560000,"dur":3000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959564000,"dur":4000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959569000,"dur":2000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959572000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959574000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959576000,"dur":172000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959750000,"dur":10000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959763000,"dur":11000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959775000,"dur":2000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959780000,"dur":23000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802959804000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802959805000,"dur":39000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802959847000,"dur":1515000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802961364000,"dur":10000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802961374000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802961378000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802961379000,"dur":8000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802961389000,"dur":15000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802961404000,"dur":9000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802961414000,"dur":4000},{"pid":1,"tid":2,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518802961466000,"dur":14000},{"pid":1,"tid":2,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518802961484000,"dur":29000},{"pid":1,"tid":2,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518802961482000,"dur":33000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802961419000,"dur":103000},{"pid":1,"tid":0,"id":58,"name":"task: transform","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802961522000,"dur":31000},{"pid":1,"tid":0,"id":59,"name":"task: external native build json","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802961556000,"dur":3000},{"pid":1,"tid":0,"id":60,"name":"task: external native build","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802961559000,"dur":4693000},{"pid":1,"tid":0,"id":61,"name":"task: merge source set folders","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802966252000,"dur":3000},{"pid":1,"tid":2,"id":63,"name":"transform prep: merge java resources","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518802966348000,"dur":11000},{"pid":1,"tid":2,"id":64,"name":"transform: merge java resources","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518802966359000,"dur":341000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802966256000,"dur":525000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802966782000,"dur":5000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802966791000,"dur":17000},{"pid":1,"tid":2,"id":68,"name":"transform prep: no changes verifier","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518802966812000,"dur":2000},{"pid":1,"tid":2,"id":69,"name":"transform: no changes verifier","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518802966814000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802966809000,"dur":6000},{"pid":1,"tid":2,"id":71,"name":"transform prep: instant run","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518802966866000,"dur":15000},{"pid":1,"tid":2,"id":72,"name":"transform: instant run","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518802966881000,"dur":104000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802966817000,"dur":178000},{"pid":1,"tid":2,"id":74,"name":"transform prep: instant run dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518802967007000,"dur":100},{"pid":1,"tid":2,"id":75,"name":"transform: instant run dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518802967007000,"dur":1000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802966999000,"dur":10000},{"pid":1,"tid":0,"id":76,"name":"task: unknown task type","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967009000,"dur":100},{"pid":1,"tid":0,"id":77,"name":"task: pre cold swap","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967010000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: fast deploy runtime extractor","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802967011000,"dur":4000},{"pid":1,"tid":0,"id":79,"name":"task: generate instant run app info","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518802967015000,"dur":2000},{"pid":1,"tid":2,"id":81,"name":"transform prep: instant run slicer","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518802967055000,"dur":1000},{"pid":1,"tid":2,"id":82,"name":"transform: instant run slicer","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518802967056000,"dur":9000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967018000,"dur":59000},{"pid":1,"tid":2,"id":84,"name":"transform prep: dex archive builder","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518802967141000,"dur":2000},{"pid":1,"tid":2,"id":85,"name":"transform: dex archive builder","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518802967143000,"dur":623000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967079000,"dur":699000},{"pid":1,"tid":2,"id":87,"name":"transform prep: external libs merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518802967795000,"dur":2000},{"pid":1,"tid":2,"id":88,"name":"transform: external libs merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518802967797000,"dur":3000},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967780000,"dur":21000},{"pid":1,"tid":2,"id":90,"name":"transform prep: dex merger","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518802967820000,"dur":2000},{"pid":1,"tid":2,"id":91,"name":"transform: dex merger","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518802967822000,"dur":93000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967802000,"dur":116000},{"pid":1,"tid":0,"id":92,"name":"task: validate signing","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967919000,"dur":11000},{"pid":1,"tid":2,"id":94,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518802967936000,"dur":1000},{"pid":1,"tid":2,"id":95,"name":"transform: instant run dependencies apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518802967937000,"dur":2000},{"pid":1,"tid":0,"id":93,"name":"task: transform","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967932000,"dur":8000},{"pid":1,"tid":2,"id":97,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518802967947000,"dur":1000},{"pid":1,"tid":2,"id":98,"name":"transform: instant run slice split apk builder","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518802967948000,"dur":711000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802967941000,"dur":720000},{"pid":1,"tid":2,"id":100,"name":"transform prep: strip debug symbol","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518802968670000,"dur":1000},{"pid":1,"tid":2,"id":101,"name":"transform: strip debug symbol","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518802968671000,"dur":50000},{"pid":1,"tid":0,"id":99,"name":"task: transform","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802968663000,"dur":77000},{"pid":1,"tid":0,"id":102,"name":"task: package application","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802968741000,"dur":681000},{"pid":1,"tid":0,"id":103,"name":"task: build info writer","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802969422000,"dur":21000},{"pid":1,"tid":0,"id":104,"name":"task: unknown task type","args":{"span_id":"104","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802969443000,"dur":1000},{"pid":1,"tid":0,"id":105,"name":"task: unknown task type","args":{"span_id":"105","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518802969444000,"dur":100},{"pid":1,"tid":1,"id":106,"name":"base plugin build finished","args":{"span_id":"106","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518802969567000,"dur":8000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-18-42-49-607.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-18-42-49-607.rawproto
new file mode 100644
index 00000000..2d5b4d43
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-18-42-49-607.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-18-43-46-848.json b/IGetAndroid/build/android-profile/profile-2018-02-16-18-43-46-848.json
new file mode 100644
index 00000000..0a6f3029
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-18-43-46-848.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021291000,"args":{"JVM stats":"heap_memory_usage: 238099552\nnon_heap_memory_usage: 113683232\nloaded_class_count: 14093\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021423000,"args":{"JVM stats":"heap_memory_usage: 251820088\nnon_heap_memory_usage: 114420920\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021423001,"args":{"JVM stats":"heap_memory_usage: 251820088\nnon_heap_memory_usage: 114420920\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021496000,"args":{"JVM stats":"heap_memory_usage: 258464520\nnon_heap_memory_usage: 114837336\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021503000,"args":{"JVM stats":"heap_memory_usage: 258729808\nnon_heap_memory_usage: 114907104\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021510000,"args":{"JVM stats":"heap_memory_usage: 258995096\nnon_heap_memory_usage: 114951800\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021512000,"args":{"JVM stats":"heap_memory_usage: 258995096\nnon_heap_memory_usage: 114950344\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021514000,"args":{"JVM stats":"heap_memory_usage: 258995096\nnon_heap_memory_usage: 114952872\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021516000,"args":{"JVM stats":"heap_memory_usage: 258995096\nnon_heap_memory_usage: 114967416\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021518000,"args":{"JVM stats":"heap_memory_usage: 258995096\nnon_heap_memory_usage: 114975992\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021519000,"args":{"JVM stats":"heap_memory_usage: 258995096\nnon_heap_memory_usage: 114978672\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021568000,"args":{"JVM stats":"heap_memory_usage: 262710608\nnon_heap_memory_usage: 115045040\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021570000,"args":{"JVM stats":"heap_memory_usage: 262710608\nnon_heap_memory_usage: 115051008\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021576000,"args":{"JVM stats":"heap_memory_usage: 262710608\nnon_heap_memory_usage: 115078728\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021579000,"args":{"JVM stats":"heap_memory_usage: 262975896\nnon_heap_memory_usage: 115093136\nloaded_class_count: 14105\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021590000,"args":{"JVM stats":"heap_memory_usage: 264302536\nnon_heap_memory_usage: 115174256\nloaded_class_count: 14106\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021591000,"args":{"JVM stats":"heap_memory_usage: 264302536\nnon_heap_memory_usage: 115181792\nloaded_class_count: 14106\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021611000,"args":{"JVM stats":"heap_memory_usage: 265098864\nnon_heap_memory_usage: 115240360\nloaded_class_count: 14106\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021625000,"args":{"JVM stats":"heap_memory_usage: 265894752\nnon_heap_memory_usage: 115317032\nloaded_class_count: 14106\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021629000,"args":{"JVM stats":"heap_memory_usage: 265894752\nnon_heap_memory_usage: 115322520\nloaded_class_count: 14108\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021631000,"args":{"JVM stats":"heap_memory_usage: 266160040\nnon_heap_memory_usage: 115322520\nloaded_class_count: 14108\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021632000,"args":{"JVM stats":"heap_memory_usage: 266160040\nnon_heap_memory_usage: 115357920\nloaded_class_count: 14108\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021638000,"args":{"JVM stats":"heap_memory_usage: 266160040\nnon_heap_memory_usage: 115382800\nloaded_class_count: 14112\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021644000,"args":{"JVM stats":"heap_memory_usage: 266425352\nnon_heap_memory_usage: 115397184\nloaded_class_count: 14114\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021648000,"args":{"JVM stats":"heap_memory_usage: 266690672\nnon_heap_memory_usage: 115411656\nloaded_class_count: 14114\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021651000,"args":{"JVM stats":"heap_memory_usage: 266690672\nnon_heap_memory_usage: 115423344\nloaded_class_count: 14114\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021662000,"args":{"JVM stats":"heap_memory_usage: 267486792\nnon_heap_memory_usage: 115445232\nloaded_class_count: 14114\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021683000,"args":{"JVM stats":"heap_memory_usage: 268282680\nnon_heap_memory_usage: 115472424\nloaded_class_count: 14114\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803021685000,"args":{"JVM stats":"heap_memory_usage: 268282680\nnon_heap_memory_usage: 115473128\nloaded_class_count: 14114\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803025675000,"args":{"JVM stats":"heap_memory_usage: 269615240\nnon_heap_memory_usage: 115834104\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803025678000,"args":{"JVM stats":"heap_memory_usage: 269615240\nnon_heap_memory_usage: 115780280\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026035000,"args":{"JVM stats":"heap_memory_usage: 293424840\nnon_heap_memory_usage: 115809192\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026037000,"args":{"JVM stats":"heap_memory_usage: 293424840\nnon_heap_memory_usage: 115810216\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026050000,"args":{"JVM stats":"heap_memory_usage: 294220720\nnon_heap_memory_usage: 115889144\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026057000,"args":{"JVM stats":"heap_memory_usage: 294486008\nnon_heap_memory_usage: 115935904\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026080000,"args":{"JVM stats":"heap_memory_usage: 296078088\nnon_heap_memory_usage: 116058064\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026086000,"args":{"JVM stats":"heap_memory_usage: 296343608\nnon_heap_memory_usage: 116091384\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026086001,"args":{"JVM stats":"heap_memory_usage: 296343608\nnon_heap_memory_usage: 116096376\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026087000,"args":{"JVM stats":"heap_memory_usage: 296608928\nnon_heap_memory_usage: 116096376\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026090000,"args":{"JVM stats":"heap_memory_usage: 296608928\nnon_heap_memory_usage: 116106248\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026093000,"args":{"JVM stats":"heap_memory_usage: 296874216\nnon_heap_memory_usage: 116132320\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026112000,"args":{"JVM stats":"heap_memory_usage: 297404816\nnon_heap_memory_usage: 116137120\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026143000,"args":{"JVM stats":"heap_memory_usage: 298731888\nnon_heap_memory_usage: 116175008\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026154000,"args":{"JVM stats":"heap_memory_usage: 299262528\nnon_heap_memory_usage: 116195168\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026166000,"args":{"JVM stats":"heap_memory_usage: 299793168\nnon_heap_memory_usage: 116215840\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026168000,"args":{"JVM stats":"heap_memory_usage: 299793168\nnon_heap_memory_usage: 116223120\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026170000,"args":{"JVM stats":"heap_memory_usage: 299793168\nnon_heap_memory_usage: 116228432\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026173000,"args":{"JVM stats":"heap_memory_usage: 300058856\nnon_heap_memory_usage: 116230352\nloaded_class_count: 14115\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026238000,"args":{"JVM stats":"heap_memory_usage: 301385712\nnon_heap_memory_usage: 116322920\nloaded_class_count: 14117\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026822000,"args":{"JVM stats":"heap_memory_usage: 148774320\nnon_heap_memory_usage: 116622192\nloaded_class_count: 14117\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 37\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026827000,"args":{"JVM stats":"heap_memory_usage: 152886624\nnon_heap_memory_usage: 116630336\nloaded_class_count: 14117\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026827001,"args":{"JVM stats":"heap_memory_usage: 152886624\nnon_heap_memory_usage: 116631232\nloaded_class_count: 14117\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026828000,"args":{"JVM stats":"heap_memory_usage: 152886624\nnon_heap_memory_usage: 116631232\nloaded_class_count: 14117\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803026849000,"args":{"JVM stats":"heap_memory_usage: 153042648\nnon_heap_memory_usage: 116465312\nloaded_class_count: 14120\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021292000,"dur":8000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021300000,"dur":10000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021310000,"dur":3000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021310000,"dur":3000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021319000,"dur":3000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021322000,"dur":1000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021325000,"dur":2000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021328000,"dur":100},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021328000,"dur":1000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021329000,"dur":100},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021330000,"dur":100},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021330000,"dur":100},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021330000,"dur":5000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021335000,"dur":100},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021335000,"dur":1000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021336000,"dur":100},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021336000,"dur":21000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021357000,"dur":1000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021358000,"dur":6000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021365000,"dur":2000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021367000,"dur":1000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803021323000,"dur":45000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021368000,"dur":4000},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021372000,"dur":12000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021319000,"dur":66000},{"pid":1,"tid":1,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021385000,"dur":11000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803021317000,"dur":79000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803021420000,"dur":3000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021423000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021424000,"dur":72000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021497000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021504000,"dur":6000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021511000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021513000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021514000,"dur":2000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021517000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021518000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021520000,"dur":48000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021569000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021571000,"dur":5000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021577000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021580000,"dur":10000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803021590000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021592000,"dur":19000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021612000,"dur":12000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021626000,"dur":3000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021630000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021632000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021632000,"dur":6000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021639000,"dur":5000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803021644000,"dur":4000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021649000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021651000,"dur":11000},{"pid":1,"tid":0,"id":55,"name":"task: transform","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021662000,"dur":21000},{"pid":1,"tid":0,"id":56,"name":"task: external native build json","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803021684000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: external native build","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803021685000,"dur":3990000},{"pid":1,"tid":0,"id":58,"name":"task: merge source set folders","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803025676000,"dur":2000},{"pid":1,"tid":3,"id":60,"name":"transform prep: merge java resources","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518803025763000,"dur":8000},{"pid":1,"tid":3,"id":61,"name":"transform: merge java resources","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1518803025771000,"dur":183000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803025679000,"dur":356000},{"pid":1,"tid":0,"id":62,"name":"task: unknown task type","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026036000,"dur":1000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026038000,"dur":12000},{"pid":1,"tid":4,"id":65,"name":"transform prep: no changes verifier","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518803026055000,"dur":1000},{"pid":1,"tid":4,"id":66,"name":"transform: no changes verifier","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1518803026056000,"dur":100},{"pid":1,"tid":0,"id":64,"name":"task: transform","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026050000,"dur":7000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026058000,"dur":22000},{"pid":1,"tid":4,"id":69,"name":"transform prep: instant run dex","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518803026084000,"dur":1000},{"pid":1,"tid":4,"id":70,"name":"transform: instant run dex","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1518803026085000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026081000,"dur":5000},{"pid":1,"tid":0,"id":71,"name":"task: unknown task type","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026086000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: pre cold swap","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026087000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: fast deploy runtime extractor","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026088000,"dur":2000},{"pid":1,"tid":0,"id":74,"name":"task: generate instant run app info","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026091000,"dur":2000},{"pid":1,"tid":0,"id":75,"name":"task: transform","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026094000,"dur":17000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026113000,"dur":30000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026144000,"dur":10000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026155000,"dur":11000},{"pid":1,"tid":0,"id":79,"name":"task: validate signing","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026166000,"dur":2000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026168000,"dur":2000},{"pid":1,"tid":0,"id":81,"name":"task: transform","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803026171000,"dur":2000},{"pid":1,"tid":4,"id":83,"name":"transform prep: strip debug symbol","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518803026179000,"dur":100},{"pid":1,"tid":4,"id":84,"name":"transform: strip debug symbol","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1518803026179000,"dur":41000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026174000,"dur":64000},{"pid":1,"tid":0,"id":85,"name":"task: package application","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026240000,"dur":582000},{"pid":1,"tid":0,"id":86,"name":"task: build info writer","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026823000,"dur":4000},{"pid":1,"tid":0,"id":87,"name":"task: unknown task type","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026827000,"dur":100},{"pid":1,"tid":0,"id":88,"name":"task: unknown task type","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803026828000,"dur":100},{"pid":1,"tid":1,"id":89,"name":"base plugin build finished","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803026839000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-18-43-46-848.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-18-43-46-848.rawproto
new file mode 100644
index 00000000..38ff6328
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-18-43-46-848.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-18-46-30-922.json b/IGetAndroid/build/android-profile/profile-2018-02-16-18-46-30-922.json
new file mode 100644
index 00000000..e9072750
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-18-46-30-922.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189363000,"args":{"JVM stats":"heap_memory_usage: 220144672\nnon_heap_memory_usage: 117488880\nloaded_class_count: 14129\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189495000,"args":{"JVM stats":"heap_memory_usage: 233921016\nnon_heap_memory_usage: 118001344\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189496000,"args":{"JVM stats":"heap_memory_usage: 233921016\nnon_heap_memory_usage: 118016704\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189570000,"args":{"JVM stats":"heap_memory_usage: 241372272\nnon_heap_memory_usage: 118106424\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189575000,"args":{"JVM stats":"heap_memory_usage: 241372272\nnon_heap_memory_usage: 118116312\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189582000,"args":{"JVM stats":"heap_memory_usage: 241852216\nnon_heap_memory_usage: 118138944\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189585000,"args":{"JVM stats":"heap_memory_usage: 241852216\nnon_heap_memory_usage: 118145728\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189588000,"args":{"JVM stats":"heap_memory_usage: 242092216\nnon_heap_memory_usage: 118146496\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189590000,"args":{"JVM stats":"heap_memory_usage: 242092216\nnon_heap_memory_usage: 118147552\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189592000,"args":{"JVM stats":"heap_memory_usage: 242092216\nnon_heap_memory_usage: 118156328\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189592001,"args":{"JVM stats":"heap_memory_usage: 242092216\nnon_heap_memory_usage: 118159872\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189640000,"args":{"JVM stats":"heap_memory_usage: 245693592\nnon_heap_memory_usage: 118184528\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189642000,"args":{"JVM stats":"heap_memory_usage: 245693592\nnon_heap_memory_usage: 118185232\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189648000,"args":{"JVM stats":"heap_memory_usage: 245933552\nnon_heap_memory_usage: 118210760\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189650000,"args":{"JVM stats":"heap_memory_usage: 245933552\nnon_heap_memory_usage: 118210760\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189659000,"args":{"JVM stats":"heap_memory_usage: 247373800\nnon_heap_memory_usage: 118217096\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189660000,"args":{"JVM stats":"heap_memory_usage: 247373800\nnon_heap_memory_usage: 118219456\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189678000,"args":{"JVM stats":"heap_memory_usage: 247613760\nnon_heap_memory_usage: 118241944\nloaded_class_count: 14138\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189893000,"args":{"JVM stats":"heap_memory_usage: 267263792\nnon_heap_memory_usage: 119298792\nloaded_class_count: 14143\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189896000,"args":{"JVM stats":"heap_memory_usage: 267530120\nnon_heap_memory_usage: 119309192\nloaded_class_count: 14143\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189899000,"args":{"JVM stats":"heap_memory_usage: 267530120\nnon_heap_memory_usage: 119325224\nloaded_class_count: 14143\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189899001,"args":{"JVM stats":"heap_memory_usage: 267530120\nnon_heap_memory_usage: 119327120\nloaded_class_count: 14143\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189906000,"args":{"JVM stats":"heap_memory_usage: 267770128\nnon_heap_memory_usage: 119333168\nloaded_class_count: 14145\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189911000,"args":{"JVM stats":"heap_memory_usage: 268010120\nnon_heap_memory_usage: 119386584\nloaded_class_count: 14151\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189917000,"args":{"JVM stats":"heap_memory_usage: 268250080\nnon_heap_memory_usage: 119415888\nloaded_class_count: 14152\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189920000,"args":{"JVM stats":"heap_memory_usage: 268250080\nnon_heap_memory_usage: 119434704\nloaded_class_count: 14152\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189960000,"args":{"JVM stats":"heap_memory_usage: 269929952\nnon_heap_memory_usage: 119560832\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189979000,"args":{"JVM stats":"heap_memory_usage: 271134048\nnon_heap_memory_usage: 119595392\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803189981000,"args":{"JVM stats":"heap_memory_usage: 271374024\nnon_heap_memory_usage: 119599800\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190063000,"args":{"JVM stats":"heap_memory_usage: 272334280\nnon_heap_memory_usage: 119639480\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190066000,"args":{"JVM stats":"heap_memory_usage: 272574240\nnon_heap_memory_usage: 119658320\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190077000,"args":{"JVM stats":"heap_memory_usage: 273774112\nnon_heap_memory_usage: 119665520\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190078000,"args":{"JVM stats":"heap_memory_usage: 273774112\nnon_heap_memory_usage: 119672416\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190089000,"args":{"JVM stats":"heap_memory_usage: 274494464\nnon_heap_memory_usage: 119703272\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190091000,"args":{"JVM stats":"heap_memory_usage: 274494464\nnon_heap_memory_usage: 119704816\nloaded_class_count: 14156\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190176000,"args":{"JVM stats":"heap_memory_usage: 282684960\nnon_heap_memory_usage: 119723144\nloaded_class_count: 14156\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190180000,"args":{"JVM stats":"heap_memory_usage: 283195280\nnon_heap_memory_usage: 119671624\nloaded_class_count: 14156\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190180001,"args":{"JVM stats":"heap_memory_usage: 283195280\nnon_heap_memory_usage: 119671624\nloaded_class_count: 14156\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190181000,"args":{"JVM stats":"heap_memory_usage: 283195280\nnon_heap_memory_usage: 119671624\nloaded_class_count: 14156\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190182000,"args":{"JVM stats":"heap_memory_usage: 283675200\nnon_heap_memory_usage: 119671176\nloaded_class_count: 14156\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190184000,"args":{"JVM stats":"heap_memory_usage: 283675200\nnon_heap_memory_usage: 119670664\nloaded_class_count: 14156\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190236000,"args":{"JVM stats":"heap_memory_usage: 285355664\nnon_heap_memory_usage: 119686200\nloaded_class_count: 14156\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190540000,"args":{"JVM stats":"heap_memory_usage: 331202136\nnon_heap_memory_usage: 120259040\nloaded_class_count: 14158\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190555000,"args":{"JVM stats":"heap_memory_usage: 332490248\nnon_heap_memory_usage: 120323144\nloaded_class_count: 14158\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190607000,"args":{"JVM stats":"heap_memory_usage: 339909248\nnon_heap_memory_usage: 120528664\nloaded_class_count: 14159\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190610000,"args":{"JVM stats":"heap_memory_usage: 340389192\nnon_heap_memory_usage: 120533536\nloaded_class_count: 14159\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190618000,"args":{"JVM stats":"heap_memory_usage: 340629296\nnon_heap_memory_usage: 120587976\nloaded_class_count: 14159\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190809000,"args":{"JVM stats":"heap_memory_usage: 355539064\nnon_heap_memory_usage: 120612504\nloaded_class_count: 14159\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190833000,"args":{"JVM stats":"heap_memory_usage: 355539064\nnon_heap_memory_usage: 120434776\nloaded_class_count: 14159\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190889000,"args":{"JVM stats":"heap_memory_usage: 356019064\nnon_heap_memory_usage: 120242360\nloaded_class_count: 14159\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190892000,"args":{"JVM stats":"heap_memory_usage: 356259056\nnon_heap_memory_usage: 120249824\nloaded_class_count: 14159\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190893000,"args":{"JVM stats":"heap_memory_usage: 356259056\nnon_heap_memory_usage: 120246472\nloaded_class_count: 14159\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190894000,"args":{"JVM stats":"heap_memory_usage: 356259056\nnon_heap_memory_usage: 120246472\nloaded_class_count: 14159\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803190922000,"args":{"JVM stats":"heap_memory_usage: 357467120\nnon_heap_memory_usage: 120331624\nloaded_class_count: 14159\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":5,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189363000,"dur":13000},{"pid":1,"tid":5,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189376000,"dur":10000},{"pid":1,"tid":5,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189386000,"dur":9000},{"pid":1,"tid":5,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189386000,"dur":9000},{"pid":1,"tid":5,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189402000,"dur":4000},{"pid":1,"tid":5,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189406000,"dur":1000},{"pid":1,"tid":5,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189409000,"dur":1000},{"pid":1,"tid":5,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189410000,"dur":100},{"pid":1,"tid":5,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189410000,"dur":1000},{"pid":1,"tid":5,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189411000,"dur":100},{"pid":1,"tid":5,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189411000,"dur":1000},{"pid":1,"tid":5,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189412000,"dur":100},{"pid":1,"tid":5,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189412000,"dur":3000},{"pid":1,"tid":5,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189415000,"dur":1000},{"pid":1,"tid":5,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189416000,"dur":1000},{"pid":1,"tid":5,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189417000,"dur":100},{"pid":1,"tid":5,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189417000,"dur":21000},{"pid":1,"tid":5,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189438000,"dur":1000},{"pid":1,"tid":5,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189439000,"dur":6000},{"pid":1,"tid":5,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189447000,"dur":3000},{"pid":1,"tid":5,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189450000,"dur":1000},{"pid":1,"tid":5,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189407000,"dur":44000},{"pid":1,"tid":5,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189451000,"dur":5000},{"pid":1,"tid":5,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189456000,"dur":8000},{"pid":1,"tid":5,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189401000,"dur":64000},{"pid":1,"tid":5,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189465000,"dur":8000},{"pid":1,"tid":5,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803189399000,"dur":74000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803189493000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189495000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189496000,"dur":73000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189570000,"dur":5000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189576000,"dur":6000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189583000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189586000,"dur":2000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189589000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189591000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189592000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189593000,"dur":47000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189641000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189643000,"dur":5000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189649000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189651000,"dur":8000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803189660000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189660000,"dur":17000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803189678000,"dur":215000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189894000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189897000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189899000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189900000,"dur":6000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189907000,"dur":4000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803189912000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189918000,"dur":2000},{"pid":1,"tid":6,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518803189934000,"dur":2000},{"pid":1,"tid":6,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189936000,"dur":1000},{"pid":1,"tid":6,"id":58,"name":"task file verification","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189939000,"dur":1000},{"pid":1,"tid":6,"id":59,"name":"task file verification","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189941000,"dur":8000},{"pid":1,"tid":6,"id":60,"name":"task file verification","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189951000,"dur":100},{"pid":1,"tid":6,"id":61,"name":"task file verification","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803189952000,"dur":1000},{"pid":1,"tid":6,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518803189936000,"dur":18000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803189921000,"dur":39000},{"pid":1,"tid":0,"id":62,"name":"task: transform","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189960000,"dur":19000},{"pid":1,"tid":0,"id":63,"name":"task: external native build json","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803189980000,"dur":1000},{"pid":1,"tid":0,"id":64,"name":"task: external native build","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803189982000,"dur":81000},{"pid":1,"tid":0,"id":65,"name":"task: merge source set folders","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803190064000,"dur":2000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803190068000,"dur":8000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190077000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: transform","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803190079000,"dur":10000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803190090000,"dur":1000},{"pid":1,"tid":7,"id":71,"name":"transform prep: instant run","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518803190113000,"dur":9000},{"pid":1,"tid":7,"id":72,"name":"transform: instant run","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518803190122000,"dur":44000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190092000,"dur":84000},{"pid":1,"tid":7,"id":74,"name":"transform prep: instant run dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518803190178000,"dur":1000},{"pid":1,"tid":7,"id":75,"name":"transform: instant run dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518803190179000,"dur":100},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190177000,"dur":3000},{"pid":1,"tid":0,"id":76,"name":"task: unknown task type","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190180000,"dur":100},{"pid":1,"tid":0,"id":77,"name":"task: pre cold swap","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190180000,"dur":1000},{"pid":1,"tid":0,"id":78,"name":"task: fast deploy runtime extractor","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803190181000,"dur":1000},{"pid":1,"tid":0,"id":79,"name":"task: generate instant run app info","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803190183000,"dur":1000},{"pid":1,"tid":7,"id":81,"name":"transform prep: instant run slicer","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518803190204000,"dur":2000},{"pid":1,"tid":7,"id":82,"name":"transform: instant run slicer","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518803190206000,"dur":16000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190186000,"dur":50000},{"pid":1,"tid":7,"id":84,"name":"transform prep: dex archive builder","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518803190268000,"dur":2000},{"pid":1,"tid":7,"id":85,"name":"transform: dex archive builder","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518803190270000,"dur":258000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190237000,"dur":303000},{"pid":1,"tid":8,"id":87,"name":"transform prep: external libs merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518803190550000,"dur":2000},{"pid":1,"tid":8,"id":88,"name":"transform: external libs merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518803190552000,"dur":2000},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190541000,"dur":14000},{"pid":1,"tid":8,"id":90,"name":"transform prep: dex merger","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518803190564000,"dur":1000},{"pid":1,"tid":8,"id":91,"name":"transform: dex merger","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518803190565000,"dur":36000},{"pid":1,"tid":0,"id":89,"name":"task: transform","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190555000,"dur":52000},{"pid":1,"tid":0,"id":92,"name":"task: validate signing","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190608000,"dur":1000},{"pid":1,"tid":8,"id":94,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518803190613000,"dur":2000},{"pid":1,"tid":8,"id":95,"name":"transform: instant run dependencies apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518803190615000,"dur":2000},{"pid":1,"tid":0,"id":93,"name":"task: transform","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190610000,"dur":8000},{"pid":1,"tid":9,"id":97,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518803190623000,"dur":1000},{"pid":1,"tid":9,"id":98,"name":"transform: instant run slice split apk builder","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518803190624000,"dur":184000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190619000,"dur":190000},{"pid":1,"tid":0,"id":99,"name":"task: transform","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803190810000,"dur":23000},{"pid":1,"tid":0,"id":100,"name":"task: package application","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803190834000,"dur":55000},{"pid":1,"tid":0,"id":101,"name":"task: build info writer","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190890000,"dur":2000},{"pid":1,"tid":0,"id":102,"name":"task: unknown task type","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190893000,"dur":100},{"pid":1,"tid":0,"id":103,"name":"task: unknown task type","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803190893000,"dur":1000},{"pid":1,"tid":5,"id":104,"name":"base plugin build finished","args":{"span_id":"104","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803190908000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-18-46-30-922.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-18-46-30-922.rawproto
new file mode 100644
index 00000000..96520fdb
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-18-46-30-922.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-18-47-33-642.json b/IGetAndroid/build/android-profile/profile-2018-02-16-18-47-33-642.json
new file mode 100644
index 00000000..7f9747c2
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-18-47-33-642.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252287000,"args":{"JVM stats":"heap_memory_usage: 94028616\nnon_heap_memory_usage: 121851448\nloaded_class_count: 14183\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 23\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252413000,"args":{"JVM stats":"heap_memory_usage: 107718200\nnon_heap_memory_usage: 122285528\nloaded_class_count: 14193\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252414000,"args":{"JVM stats":"heap_memory_usage: 107989992\nnon_heap_memory_usage: 122285528\nloaded_class_count: 14193\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252464000,"args":{"JVM stats":"heap_memory_usage: 114895456\nnon_heap_memory_usage: 122424728\nloaded_class_count: 14194\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252472000,"args":{"JVM stats":"heap_memory_usage: 115167272\nnon_heap_memory_usage: 122462504\nloaded_class_count: 14197\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252478000,"args":{"JVM stats":"heap_memory_usage: 115710712\nnon_heap_memory_usage: 122485768\nloaded_class_count: 14201\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252481000,"args":{"JVM stats":"heap_memory_usage: 115710712\nnon_heap_memory_usage: 122499264\nloaded_class_count: 14202\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252483000,"args":{"JVM stats":"heap_memory_usage: 115710712\nnon_heap_memory_usage: 122501624\nloaded_class_count: 14203\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252485000,"args":{"JVM stats":"heap_memory_usage: 115982424\nnon_heap_memory_usage: 122507184\nloaded_class_count: 14204\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252486000,"args":{"JVM stats":"heap_memory_usage: 115982424\nnon_heap_memory_usage: 122512408\nloaded_class_count: 14205\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252487000,"args":{"JVM stats":"heap_memory_usage: 115982424\nnon_heap_memory_usage: 122512408\nloaded_class_count: 14205\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252526000,"args":{"JVM stats":"heap_memory_usage: 120059664\nnon_heap_memory_usage: 122571808\nloaded_class_count: 14213\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252530000,"args":{"JVM stats":"heap_memory_usage: 120059664\nnon_heap_memory_usage: 122574168\nloaded_class_count: 14214\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252536000,"args":{"JVM stats":"heap_memory_usage: 120331432\nnon_heap_memory_usage: 122594680\nloaded_class_count: 14219\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252538000,"args":{"JVM stats":"heap_memory_usage: 120331432\nnon_heap_memory_usage: 122600208\nloaded_class_count: 14220\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252549000,"args":{"JVM stats":"heap_memory_usage: 121418520\nnon_heap_memory_usage: 122627592\nloaded_class_count: 14227\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252549001,"args":{"JVM stats":"heap_memory_usage: 121418520\nnon_heap_memory_usage: 122627592\nloaded_class_count: 14227\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252568000,"args":{"JVM stats":"heap_memory_usage: 121791408\nnon_heap_memory_usage: 122655608\nloaded_class_count: 14228\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252730000,"args":{"JVM stats":"heap_memory_usage: 138863056\nnon_heap_memory_usage: 123437368\nloaded_class_count: 14232\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252733000,"args":{"JVM stats":"heap_memory_usage: 138863056\nnon_heap_memory_usage: 123448800\nloaded_class_count: 14232\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252734000,"args":{"JVM stats":"heap_memory_usage: 139142976\nnon_heap_memory_usage: 123452328\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252735000,"args":{"JVM stats":"heap_memory_usage: 139142976\nnon_heap_memory_usage: 123453024\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252740000,"args":{"JVM stats":"heap_memory_usage: 139686456\nnon_heap_memory_usage: 123517896\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252744000,"args":{"JVM stats":"heap_memory_usage: 139686456\nnon_heap_memory_usage: 123507720\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252751000,"args":{"JVM stats":"heap_memory_usage: 139990968\nnon_heap_memory_usage: 123507720\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252753000,"args":{"JVM stats":"heap_memory_usage: 140262680\nnon_heap_memory_usage: 123512008\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252775000,"args":{"JVM stats":"heap_memory_usage: 141351984\nnon_heap_memory_usage: 123537960\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252793000,"args":{"JVM stats":"heap_memory_usage: 142448664\nnon_heap_memory_usage: 123389456\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252794000,"args":{"JVM stats":"heap_memory_usage: 142448664\nnon_heap_memory_usage: 123389456\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252853000,"args":{"JVM stats":"heap_memory_usage: 143535824\nnon_heap_memory_usage: 123387200\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252855000,"args":{"JVM stats":"heap_memory_usage: 143535824\nnon_heap_memory_usage: 123387656\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252864000,"args":{"JVM stats":"heap_memory_usage: 144351480\nnon_heap_memory_usage: 123398600\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252866000,"args":{"JVM stats":"heap_memory_usage: 144351480\nnon_heap_memory_usage: 123401208\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252878000,"args":{"JVM stats":"heap_memory_usage: 145982928\nnon_heap_memory_usage: 123403040\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252881000,"args":{"JVM stats":"heap_memory_usage: 146254680\nnon_heap_memory_usage: 123409624\nloaded_class_count: 14233\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252958000,"args":{"JVM stats":"heap_memory_usage: 152432744\nnon_heap_memory_usage: 123555680\nloaded_class_count: 14233\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252963000,"args":{"JVM stats":"heap_memory_usage: 152733832\nnon_heap_memory_usage: 123566240\nloaded_class_count: 14233\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252964000,"args":{"JVM stats":"heap_memory_usage: 152733832\nnon_heap_memory_usage: 123568736\nloaded_class_count: 14233\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252965000,"args":{"JVM stats":"heap_memory_usage: 152733832\nnon_heap_memory_usage: 123574112\nloaded_class_count: 14233\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252968000,"args":{"JVM stats":"heap_memory_usage: 152733832\nnon_heap_memory_usage: 123575768\nloaded_class_count: 14234\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803252970000,"args":{"JVM stats":"heap_memory_usage: 153005544\nnon_heap_memory_usage: 123579088\nloaded_class_count: 14235\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253020000,"args":{"JVM stats":"heap_memory_usage: 154517512\nnon_heap_memory_usage: 123617856\nloaded_class_count: 14235\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253301000,"args":{"JVM stats":"heap_memory_usage: 199688720\nnon_heap_memory_usage: 124097616\nloaded_class_count: 14236\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253316000,"args":{"JVM stats":"heap_memory_usage: 200936864\nnon_heap_memory_usage: 124169416\nloaded_class_count: 14236\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253371000,"args":{"JVM stats":"heap_memory_usage: 208539000\nnon_heap_memory_usage: 124336768\nloaded_class_count: 14236\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253373000,"args":{"JVM stats":"heap_memory_usage: 208539000\nnon_heap_memory_usage: 124344040\nloaded_class_count: 14236\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253382000,"args":{"JVM stats":"heap_memory_usage: 208810752\nnon_heap_memory_usage: 124358256\nloaded_class_count: 14236\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253587000,"args":{"JVM stats":"heap_memory_usage: 225021632\nnon_heap_memory_usage: 124507008\nloaded_class_count: 14236\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253592000,"args":{"JVM stats":"heap_memory_usage: 225021632\nnon_heap_memory_usage: 124507584\nloaded_class_count: 14236\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253609000,"args":{"JVM stats":"heap_memory_usage: 225836952\nnon_heap_memory_usage: 124561736\nloaded_class_count: 14258\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253613000,"args":{"JVM stats":"heap_memory_usage: 225836952\nnon_heap_memory_usage: 124567400\nloaded_class_count: 14258\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253614000,"args":{"JVM stats":"heap_memory_usage: 225836952\nnon_heap_memory_usage: 124569328\nloaded_class_count: 14258\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253615000,"args":{"JVM stats":"heap_memory_usage: 225836952\nnon_heap_memory_usage: 124569328\nloaded_class_count: 14258\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1518803253642000,"args":{"JVM stats":"heap_memory_usage: 227148696\nnon_heap_memory_usage: 124616800\nloaded_class_count: 14260\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":10,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252288000,"dur":6000},{"pid":1,"tid":10,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252294000,"dur":9000},{"pid":1,"tid":10,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252303000,"dur":4000},{"pid":1,"tid":10,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252303000,"dur":4000},{"pid":1,"tid":10,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252314000,"dur":3000},{"pid":1,"tid":10,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252317000,"dur":1000},{"pid":1,"tid":10,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252319000,"dur":1000},{"pid":1,"tid":10,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252320000,"dur":100},{"pid":1,"tid":10,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252320000,"dur":100},{"pid":1,"tid":10,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252320000,"dur":1000},{"pid":1,"tid":10,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252321000,"dur":1000},{"pid":1,"tid":10,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252322000,"dur":100},{"pid":1,"tid":10,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252322000,"dur":3000},{"pid":1,"tid":10,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252325000,"dur":1000},{"pid":1,"tid":10,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252326000,"dur":100},{"pid":1,"tid":10,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252326000,"dur":100},{"pid":1,"tid":10,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252326000,"dur":26000},{"pid":1,"tid":10,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252352000,"dur":1000},{"pid":1,"tid":10,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252353000,"dur":6000},{"pid":1,"tid":10,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252361000,"dur":4000},{"pid":1,"tid":10,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252365000,"dur":100},{"pid":1,"tid":10,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252318000,"dur":47000},{"pid":1,"tid":10,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252365000,"dur":4000},{"pid":1,"tid":10,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252369000,"dur":7000},{"pid":1,"tid":10,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252313000,"dur":65000},{"pid":1,"tid":10,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252379000,"dur":7000},{"pid":1,"tid":10,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803252311000,"dur":75000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252410000,"dur":2000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252413000,"dur":1000},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252415000,"dur":49000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252465000,"dur":7000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252473000,"dur":5000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252479000,"dur":2000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252482000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252484000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252485000,"dur":1000},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252486000,"dur":1000},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252488000,"dur":38000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252528000,"dur":2000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252531000,"dur":5000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252537000,"dur":1000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252539000,"dur":10000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252549000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252550000,"dur":18000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252569000,"dur":161000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252731000,"dur":2000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252733000,"dur":1000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252735000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252736000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252741000,"dur":3000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252745000,"dur":6000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252752000,"dur":1000},{"pid":1,"tid":11,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518803252765000,"dur":1000},{"pid":1,"tid":11,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252766000,"dur":1000},{"pid":1,"tid":11,"id":58,"name":"task file verification","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1518803252769000,"dur":1000},{"pid":1,"tid":11,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1518803252766000,"dur":4000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252754000,"dur":21000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252776000,"dur":16000},{"pid":1,"tid":0,"id":60,"name":"task: external native build json","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252793000,"dur":1000},{"pid":1,"tid":0,"id":61,"name":"task: external native build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252794000,"dur":59000},{"pid":1,"tid":0,"id":62,"name":"task: merge source set folders","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252853000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252855000,"dur":9000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252865000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252866000,"dur":11000},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252878000,"dur":3000},{"pid":1,"tid":11,"id":68,"name":"transform prep: instant run","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518803252903000,"dur":9000},{"pid":1,"tid":11,"id":69,"name":"transform: instant run","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1518803252912000,"dur":40000},{"pid":1,"tid":0,"id":67,"name":"task: transform","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252882000,"dur":76000},{"pid":1,"tid":11,"id":71,"name":"transform prep: instant run dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518803252962000,"dur":100},{"pid":1,"tid":11,"id":72,"name":"transform: instant run dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: true\n"},"ph":"X","ts":1518803252962000,"dur":100},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252959000,"dur":4000},{"pid":1,"tid":0,"id":73,"name":"task: unknown task type","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252964000,"dur":100},{"pid":1,"tid":0,"id":74,"name":"task: pre cold swap","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252965000,"dur":100},{"pid":1,"tid":0,"id":75,"name":"task: fast deploy runtime extractor","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252966000,"dur":2000},{"pid":1,"tid":0,"id":76,"name":"task: generate instant run app info","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803252969000,"dur":1000},{"pid":1,"tid":11,"id":78,"name":"transform prep: instant run slicer","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518803252996000,"dur":2000},{"pid":1,"tid":11,"id":79,"name":"transform: instant run slicer","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1518803252998000,"dur":6000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803252971000,"dur":49000},{"pid":1,"tid":11,"id":81,"name":"transform prep: dex archive builder","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518803253052000,"dur":3000},{"pid":1,"tid":11,"id":82,"name":"transform: dex archive builder","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: true\n"},"ph":"X","ts":1518803253055000,"dur":233000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253021000,"dur":280000},{"pid":1,"tid":11,"id":84,"name":"transform prep: external libs merger","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518803253311000,"dur":1000},{"pid":1,"tid":11,"id":85,"name":"transform: external libs merger","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: true\n"},"ph":"X","ts":1518803253312000,"dur":2000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253301000,"dur":14000},{"pid":1,"tid":11,"id":87,"name":"transform prep: dex merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518803253329000,"dur":1000},{"pid":1,"tid":11,"id":88,"name":"transform: dex merger","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: true\n"},"ph":"X","ts":1518803253330000,"dur":36000},{"pid":1,"tid":0,"id":86,"name":"task: transform","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253316000,"dur":55000},{"pid":1,"tid":0,"id":89,"name":"task: validate signing","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253371000,"dur":2000},{"pid":1,"tid":11,"id":91,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518803253377000,"dur":2000},{"pid":1,"tid":11,"id":92,"name":"transform: instant run dependencies apk builder","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: true\n"},"ph":"X","ts":1518803253379000,"dur":1000},{"pid":1,"tid":0,"id":90,"name":"task: transform","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253374000,"dur":8000},{"pid":1,"tid":11,"id":94,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518803253386000,"dur":1000},{"pid":1,"tid":11,"id":95,"name":"transform: instant run slice split apk builder","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: true\n"},"ph":"X","ts":1518803253387000,"dur":198000},{"pid":1,"tid":0,"id":93,"name":"task: transform","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253383000,"dur":203000},{"pid":1,"tid":0,"id":96,"name":"task: transform","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803253588000,"dur":4000},{"pid":1,"tid":0,"id":97,"name":"task: package application","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1518803253592000,"dur":16000},{"pid":1,"tid":0,"id":98,"name":"task: build info writer","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253609000,"dur":4000},{"pid":1,"tid":0,"id":99,"name":"task: unknown task type","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253614000,"dur":100},{"pid":1,"tid":0,"id":100,"name":"task: unknown task type","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1518803253615000,"dur":100},{"pid":1,"tid":10,"id":101,"name":"base plugin build finished","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1518803253628000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-16-18-47-33-642.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-16-18-47-33-642.rawproto
new file mode 100644
index 00000000..960832e9
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-16-18-47-33-642.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-10-31-40-696.json b/IGetAndroid/build/android-profile/profile-2018-02-20-10-31-40-696.json
new file mode 100644
index 00000000..91789835
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-10-31-40-696.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519119065792000,"args":{"JVM stats":"heap_memory_usage: 96931936\nnon_heap_memory_usage: 49297872\nloaded_class_count: 7229\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 4\n gc_time: 35\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 28\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068154000,"args":{"JVM stats":"heap_memory_usage: 119851296\nnon_heap_memory_usage: 76943912\nloaded_class_count: 10450\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 26\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 68\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068436000,"args":{"JVM stats":"heap_memory_usage: 139451312\nnon_heap_memory_usage: 77365000\nloaded_class_count: 10626\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068450000,"args":{"JVM stats":"heap_memory_usage: 139925216\nnon_heap_memory_usage: 77431472\nloaded_class_count: 10632\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068461000,"args":{"JVM stats":"heap_memory_usage: 140399032\nnon_heap_memory_usage: 77543112\nloaded_class_count: 10640\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068463000,"args":{"JVM stats":"heap_memory_usage: 140399032\nnon_heap_memory_usage: 77552552\nloaded_class_count: 10641\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068467000,"args":{"JVM stats":"heap_memory_usage: 140399032\nnon_heap_memory_usage: 77581752\nloaded_class_count: 10642\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068475000,"args":{"JVM stats":"heap_memory_usage: 140872704\nnon_heap_memory_usage: 77641792\nloaded_class_count: 10653\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068480000,"args":{"JVM stats":"heap_memory_usage: 140872704\nnon_heap_memory_usage: 77668504\nloaded_class_count: 10654\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068480001,"args":{"JVM stats":"heap_memory_usage: 140872992\nnon_heap_memory_usage: 77675608\nloaded_class_count: 10654\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068644000,"args":{"JVM stats":"heap_memory_usage: 156131288\nnon_heap_memory_usage: 77144792\nloaded_class_count: 10655\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068650000,"args":{"JVM stats":"heap_memory_usage: 156131368\nnon_heap_memory_usage: 77185296\nloaded_class_count: 10660\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068662000,"args":{"JVM stats":"heap_memory_usage: 157078560\nnon_heap_memory_usage: 77313224\nloaded_class_count: 10664\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068664000,"args":{"JVM stats":"heap_memory_usage: 157078560\nnon_heap_memory_usage: 77318608\nloaded_class_count: 10664\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068684000,"args":{"JVM stats":"heap_memory_usage: 159254032\nnon_heap_memory_usage: 77567200\nloaded_class_count: 10664\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068685000,"args":{"JVM stats":"heap_memory_usage: 159254032\nnon_heap_memory_usage: 77568712\nloaded_class_count: 10664\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119068716000,"args":{"JVM stats":"heap_memory_usage: 159952328\nnon_heap_memory_usage: 77716352\nloaded_class_count: 10665\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119069873000,"args":{"JVM stats":"heap_memory_usage: 95497432\nnon_heap_memory_usage: 88779704\nloaded_class_count: 11606\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 26\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119069916000,"args":{"JVM stats":"heap_memory_usage: 101393144\nnon_heap_memory_usage: 89048000\nloaded_class_count: 11641\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119086691000,"args":{"JVM stats":"heap_memory_usage: 48129496\nnon_heap_memory_usage: 88831616\nloaded_class_count: 11699\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 37\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 207\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119086691001,"args":{"JVM stats":"heap_memory_usage: 53969192\nnon_heap_memory_usage: 88832448\nloaded_class_count: 11699\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119092665000,"args":{"JVM stats":"heap_memory_usage: 365970688\nnon_heap_memory_usage: 129087064\nloaded_class_count: 15423\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 4\n gc_time: 118\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119092669000,"args":{"JVM stats":"heap_memory_usage: 373037336\nnon_heap_memory_usage: 129121152\nloaded_class_count: 15423\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119092673000,"args":{"JVM stats":"heap_memory_usage: 373532152\nnon_heap_memory_usage: 129135376\nloaded_class_count: 15424\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119092673001,"args":{"JVM stats":"heap_memory_usage: 373532152\nnon_heap_memory_usage: 129138872\nloaded_class_count: 15424\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119092679000,"args":{"JVM stats":"heap_memory_usage: 376015744\nnon_heap_memory_usage: 129175960\nloaded_class_count: 15424\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119093293000,"args":{"JVM stats":"heap_memory_usage: 413125032\nnon_heap_memory_usage: 134880504\nloaded_class_count: 15917\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119093796000,"args":{"JVM stats":"heap_memory_usage: 474127776\nnon_heap_memory_usage: 136078728\nloaded_class_count: 16019\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119093803000,"args":{"JVM stats":"heap_memory_usage: 474525144\nnon_heap_memory_usage: 136090128\nloaded_class_count: 16019\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119094823000,"args":{"JVM stats":"heap_memory_usage: 124861344\nnon_heap_memory_usage: 138035536\nloaded_class_count: 16208\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 21\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119095085000,"args":{"JVM stats":"heap_memory_usage: 138221960\nnon_heap_memory_usage: 138008176\nloaded_class_count: 16213\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119095088000,"args":{"JVM stats":"heap_memory_usage: 138221960\nnon_heap_memory_usage: 137997872\nloaded_class_count: 16213\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119095100000,"args":{"JVM stats":"heap_memory_usage: 145757072\nnon_heap_memory_usage: 138052696\nloaded_class_count: 16213\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119095101000,"args":{"JVM stats":"heap_memory_usage: 145757072\nnon_heap_memory_usage: 138060304\nloaded_class_count: 16213\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119100665000,"args":{"JVM stats":"heap_memory_usage: 454952744\nnon_heap_memory_usage: 139776208\nloaded_class_count: 16496\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 44\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119100665001,"args":{"JVM stats":"heap_memory_usage: 458220024\nnon_heap_memory_usage: 139776856\nloaded_class_count: 16496\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519119100700000,"args":{"JVM stats":"heap_memory_usage: 459418152\nnon_heap_memory_usage: 140115616\nloaded_class_count: 16546\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119065833000,"dur":440000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119066274000,"dur":307000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119066581000,"dur":47000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119066581000,"dur":48000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119067340000,"dur":91000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119067431000,"dur":16000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067480000,"dur":16000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067496000,"dur":4000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067500000,"dur":7000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067507000,"dur":26000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067534000,"dur":6000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067540000,"dur":5000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067546000,"dur":53000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067600000,"dur":7000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067607000,"dur":7000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067615000,"dur":1000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067617000,"dur":61000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067678000,"dur":24000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067703000,"dur":67000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067776000,"dur":31000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067807000,"dur":5000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067447000,"dur":365000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119067812000,"dur":61000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067875000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067876000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067876000,"dur":100},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067876000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067877000,"dur":100},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067877000,"dur":1000},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067878000,"dur":1000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067879000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067880000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067880000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067880000,"dur":17000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067897000,"dur":2000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067899000,"dur":5000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067905000,"dur":2000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067908000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519119067873000,"dur":35000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119067908000,"dur":5000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119067913000,"dur":41000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119067339000,"dur":669000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119066729000,"dur":1282000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068143000,"dur":3000},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068155000,"dur":281000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068437000,"dur":13000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068451000,"dur":10000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068461000,"dur":2000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068463000,"dur":4000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119068467000,"dur":7000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068475000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068480000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068482000,"dur":162000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068644000,"dur":6000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068651000,"dur":11000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068662000,"dur":2000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068666000,"dur":18000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119068685000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119068686000,"dur":30000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119068717000,"dur":1156000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119069875000,"dur":40000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119069916000,"dur":16775000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119086691000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119086692000,"dur":5972000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119092666000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119092670000,"dur":3000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119092673000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119092674000,"dur":5000},{"pid":1,"tid":2,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1519119092713000,"dur":14000},{"pid":1,"tid":2,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1519119092729000,"dur":561000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119092681000,"dur":612000},{"pid":1,"tid":2,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1519119093303000,"dur":100},{"pid":1,"tid":2,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1519119093303000,"dur":480000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119093294000,"dur":502000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119093797000,"dur":6000},{"pid":1,"tid":2,"id":78,"name":"transform prep: merge java resources","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1519119094068000,"dur":4000},{"pid":1,"tid":2,"id":79,"name":"transform: merge java resources","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1519119094072000,"dur":481000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119093804000,"dur":1019000},{"pid":1,"tid":2,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1519119094834000,"dur":1000},{"pid":1,"tid":2,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1519119094835000,"dur":185000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119094823000,"dur":262000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119095086000,"dur":2000},{"pid":1,"tid":0,"id":84,"name":"task: transform","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519119095089000,"dur":11000},{"pid":1,"tid":0,"id":85,"name":"task: validate signing","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119095100000,"dur":1000},{"pid":1,"tid":0,"id":86,"name":"task: package application","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119095102000,"dur":5563000},{"pid":1,"tid":0,"id":87,"name":"task: unknown task type","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519119100665000,"dur":100},{"pid":1,"tid":1,"id":88,"name":"base plugin build finished","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519119100671000,"dur":2000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-10-31-40-696.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-10-31-40-696.rawproto
new file mode 100644
index 00000000..a629a4b1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-10-31-40-696.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-13-59-57-038.json b/IGetAndroid/build/android-profile/profile-2018-02-20-13-59-57-038.json
new file mode 100644
index 00000000..3f6582cc
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-13-59-57-038.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519131572968000,"args":{"JVM stats":"heap_memory_usage: 48422512\nnon_heap_memory_usage: 59287664\nloaded_class_count: 8149\nthread_count: 25\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 6\n gc_time: 107\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 129\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519131597044000,"args":{"JVM stats":"heap_memory_usage: 174511968\nnon_heap_memory_usage: 93227840\nloaded_class_count: 12198\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 3\n gc_time: 102\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 306\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131573012000,"dur":515000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131573528000,"dur":442000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131573971000,"dur":67000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131573971000,"dur":68000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131575217000,"dur":122000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131575340000,"dur":26000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575418000,"dur":23000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575442000,"dur":8000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575450000,"dur":13000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575463000,"dur":40000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575504000,"dur":12000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575517000,"dur":10000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575527000,"dur":55000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575583000,"dur":5000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575589000,"dur":9000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575599000,"dur":1000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575601000,"dur":75000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575678000,"dur":46000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575725000,"dur":78000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575815000,"dur":37000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575852000,"dur":3000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575367000,"dur":488000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131575855000,"dur":76000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575934000,"dur":1000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575935000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575935000,"dur":1000},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575936000,"dur":100},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575936000,"dur":1000},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575937000,"dur":100},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575937000,"dur":4000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575941000,"dur":1000},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575942000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575942000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575942000,"dur":38000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575980000,"dur":2000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575982000,"dur":8000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575992000,"dur":5000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575997000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519131575931000,"dur":66000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131575997000,"dur":7000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131576005000,"dur":76000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131575216000,"dur":981000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131576201000,"dur":17536000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131574173000,"dur":19564000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519131596988000,"dur":20000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-13-59-57-038.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-13-59-57-038.rawproto
new file mode 100644
index 00000000..e4a8150d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-13-59-57-038.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-16-58-29-981.json b/IGetAndroid/build/android-profile/profile-2018-02-20-16-58-29-981.json
new file mode 100644
index 00000000..7de35ede
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-16-58-29-981.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519142296229000,"args":{"JVM stats":"heap_memory_usage: 396025064\nnon_heap_memory_usage: 172636760\nloaded_class_count: 16762\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142309981000,"args":{"JVM stats":"heap_memory_usage: 464302768\nnon_heap_memory_usage: 173522312\nloaded_class_count: 16779\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":47,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296229000,"dur":2000},{"pid":1,"tid":47,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296231000,"dur":4000},{"pid":1,"tid":47,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296235000,"dur":2000},{"pid":1,"tid":47,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296235000,"dur":2000},{"pid":1,"tid":47,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296332000,"dur":4000},{"pid":1,"tid":47,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296336000,"dur":1000},{"pid":1,"tid":47,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296337000,"dur":1000},{"pid":1,"tid":47,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296338000,"dur":100},{"pid":1,"tid":47,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296338000,"dur":100},{"pid":1,"tid":47,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296338000,"dur":1000},{"pid":1,"tid":47,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296339000,"dur":100},{"pid":1,"tid":47,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296339000,"dur":100},{"pid":1,"tid":47,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296339000,"dur":3000},{"pid":1,"tid":47,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296342000,"dur":100},{"pid":1,"tid":47,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296342000,"dur":100},{"pid":1,"tid":47,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296342000,"dur":100},{"pid":1,"tid":47,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296342000,"dur":27000},{"pid":1,"tid":47,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296369000,"dur":1000},{"pid":1,"tid":47,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296370000,"dur":5000},{"pid":1,"tid":47,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296380000,"dur":2000},{"pid":1,"tid":47,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296382000,"dur":100},{"pid":1,"tid":47,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296337000,"dur":45000},{"pid":1,"tid":47,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296382000,"dur":4000},{"pid":1,"tid":47,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296387000,"dur":1000},{"pid":1,"tid":47,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296388000,"dur":100},{"pid":1,"tid":47,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296388000,"dur":100},{"pid":1,"tid":47,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296388000,"dur":1000},{"pid":1,"tid":47,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296389000,"dur":100},{"pid":1,"tid":47,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296389000,"dur":100},{"pid":1,"tid":47,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296389000,"dur":1000},{"pid":1,"tid":47,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296390000,"dur":100},{"pid":1,"tid":47,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296390000,"dur":2000},{"pid":1,"tid":47,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296392000,"dur":100},{"pid":1,"tid":47,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296392000,"dur":22000},{"pid":1,"tid":47,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296414000,"dur":100},{"pid":1,"tid":47,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296414000,"dur":3000},{"pid":1,"tid":47,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296418000,"dur":1000},{"pid":1,"tid":47,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296419000,"dur":100},{"pid":1,"tid":47,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142296386000,"dur":33000},{"pid":1,"tid":47,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296419000,"dur":4000},{"pid":1,"tid":47,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296423000,"dur":9000},{"pid":1,"tid":47,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296332000,"dur":106000},{"pid":1,"tid":47,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296438000,"dur":13273000},{"pid":1,"tid":47,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142296257000,"dur":13454000},{"pid":1,"tid":47,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142309977000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-16-58-29-981.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-16-58-29-981.rawproto
new file mode 100644
index 00000000..fd8eb84b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-16-58-29-981.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-29-370.json b/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-29-370.json
new file mode 100644
index 00000000..8e1e6aac
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-29-370.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519142342650000,"args":{"JVM stats":"heap_memory_usage: 140519248\nnon_heap_memory_usage: 173879960\nloaded_class_count: 16786\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 56\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142369371000,"args":{"JVM stats":"heap_memory_usage: 188429736\nnon_heap_memory_usage: 174416024\nloaded_class_count: 16792\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":47,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342650000,"dur":9000},{"pid":1,"tid":47,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342660000,"dur":5000},{"pid":1,"tid":47,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342665000,"dur":2000},{"pid":1,"tid":47,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342665000,"dur":2000},{"pid":1,"tid":47,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342681000,"dur":11000},{"pid":1,"tid":47,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342692000,"dur":1000},{"pid":1,"tid":47,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342695000,"dur":2000},{"pid":1,"tid":47,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342697000,"dur":100},{"pid":1,"tid":47,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342697000,"dur":1000},{"pid":1,"tid":47,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342698000,"dur":1000},{"pid":1,"tid":47,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342699000,"dur":100},{"pid":1,"tid":47,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342699000,"dur":1000},{"pid":1,"tid":47,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342700000,"dur":6000},{"pid":1,"tid":47,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342707000,"dur":1000},{"pid":1,"tid":47,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342708000,"dur":1000},{"pid":1,"tid":47,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342709000,"dur":100},{"pid":1,"tid":47,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342709000,"dur":50000},{"pid":1,"tid":47,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342759000,"dur":2000},{"pid":1,"tid":47,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342761000,"dur":9000},{"pid":1,"tid":47,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342774000,"dur":3000},{"pid":1,"tid":47,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342777000,"dur":1000},{"pid":1,"tid":47,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342693000,"dur":85000},{"pid":1,"tid":47,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342778000,"dur":13000},{"pid":1,"tid":47,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342794000,"dur":1000},{"pid":1,"tid":47,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342795000,"dur":100},{"pid":1,"tid":47,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342795000,"dur":100},{"pid":1,"tid":47,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342795000,"dur":2000},{"pid":1,"tid":47,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342797000,"dur":100},{"pid":1,"tid":47,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342797000,"dur":100},{"pid":1,"tid":47,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342797000,"dur":4000},{"pid":1,"tid":47,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342801000,"dur":100},{"pid":1,"tid":47,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342801000,"dur":1000},{"pid":1,"tid":47,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342802000,"dur":100},{"pid":1,"tid":47,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342803000,"dur":34000},{"pid":1,"tid":47,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342837000,"dur":1000},{"pid":1,"tid":47,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342838000,"dur":3000},{"pid":1,"tid":47,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342843000,"dur":1000},{"pid":1,"tid":47,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342844000,"dur":100},{"pid":1,"tid":47,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142342791000,"dur":53000},{"pid":1,"tid":47,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342844000,"dur":5000},{"pid":1,"tid":47,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342849000,"dur":17000},{"pid":1,"tid":47,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342681000,"dur":189000},{"pid":1,"tid":47,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342871000,"dur":26203000},{"pid":1,"tid":47,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142342672000,"dur":26402000},{"pid":1,"tid":47,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142369363000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-29-370.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-29-370.rawproto
new file mode 100644
index 00000000..3ab021b1
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-29-370.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-33-213.json b/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-33-213.json
new file mode 100644
index 00000000..f8071ee0
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-33-213.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371415000,"args":{"JVM stats":"heap_memory_usage: 244678320\nnon_heap_memory_usage: 174806104\nloaded_class_count: 16799\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371568000,"args":{"JVM stats":"heap_memory_usage: 258564432\nnon_heap_memory_usage: 175029120\nloaded_class_count: 16799\nthread_count: 33\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371623000,"args":{"JVM stats":"heap_memory_usage: 264875072\nnon_heap_memory_usage: 175097720\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371629000,"args":{"JVM stats":"heap_memory_usage: 265576136\nnon_heap_memory_usage: 175098680\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371635000,"args":{"JVM stats":"heap_memory_usage: 265926680\nnon_heap_memory_usage: 175100024\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371636000,"args":{"JVM stats":"heap_memory_usage: 266281312\nnon_heap_memory_usage: 175097336\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371638000,"args":{"JVM stats":"heap_memory_usage: 266281312\nnon_heap_memory_usage: 175099448\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371640000,"args":{"JVM stats":"heap_memory_usage: 266632872\nnon_heap_memory_usage: 175121688\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371642000,"args":{"JVM stats":"heap_memory_usage: 266632872\nnon_heap_memory_usage: 175100824\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371643000,"args":{"JVM stats":"heap_memory_usage: 266632872\nnon_heap_memory_usage: 175100824\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371789000,"args":{"JVM stats":"heap_memory_usage: 277797744\nnon_heap_memory_usage: 175061640\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371795000,"args":{"JVM stats":"heap_memory_usage: 277797744\nnon_heap_memory_usage: 175061640\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371874000,"args":{"JVM stats":"heap_memory_usage: 283109184\nnon_heap_memory_usage: 175108960\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142371881000,"args":{"JVM stats":"heap_memory_usage: 283463816\nnon_heap_memory_usage: 175112312\nloaded_class_count: 16799\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372760000,"args":{"JVM stats":"heap_memory_usage: 306216856\nnon_heap_memory_usage: 175328544\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372761000,"args":{"JVM stats":"heap_memory_usage: 306216856\nnon_heap_memory_usage: 175329248\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372866000,"args":{"JVM stats":"heap_memory_usage: 310441712\nnon_heap_memory_usage: 175330656\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372879000,"args":{"JVM stats":"heap_memory_usage: 310441712\nnon_heap_memory_usage: 175331360\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372893000,"args":{"JVM stats":"heap_memory_usage: 311147904\nnon_heap_memory_usage: 175332064\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372904000,"args":{"JVM stats":"heap_memory_usage: 311147904\nnon_heap_memory_usage: 175355296\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372908000,"args":{"JVM stats":"heap_memory_usage: 311147904\nnon_heap_memory_usage: 175357216\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372911000,"args":{"JVM stats":"heap_memory_usage: 311502536\nnon_heap_memory_usage: 175369576\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142372912000,"args":{"JVM stats":"heap_memory_usage: 311502536\nnon_heap_memory_usage: 175370280\nloaded_class_count: 16799\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142373058000,"args":{"JVM stats":"heap_memory_usage: 321849464\nnon_heap_memory_usage: 175516072\nloaded_class_count: 16799\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142373059000,"args":{"JVM stats":"heap_memory_usage: 322200008\nnon_heap_memory_usage: 175516072\nloaded_class_count: 16799\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142373071000,"args":{"JVM stats":"heap_memory_usage: 324769272\nnon_heap_memory_usage: 175516072\nloaded_class_count: 16799\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142373071001,"args":{"JVM stats":"heap_memory_usage: 324769272\nnon_heap_memory_usage: 175516072\nloaded_class_count: 16799\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142373202000,"args":{"JVM stats":"heap_memory_usage: 324769272\nnon_heap_memory_usage: 175578664\nloaded_class_count: 16799\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142373214000,"args":{"JVM stats":"heap_memory_usage: 324769272\nnon_heap_memory_usage: 175599224\nloaded_class_count: 16799\nthread_count: 34\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":47,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371415000,"dur":5000},{"pid":1,"tid":47,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371420000,"dur":6000},{"pid":1,"tid":47,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371426000,"dur":1000},{"pid":1,"tid":47,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371426000,"dur":1000},{"pid":1,"tid":47,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371437000,"dur":4000},{"pid":1,"tid":47,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371441000,"dur":100},{"pid":1,"tid":47,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371442000,"dur":1000},{"pid":1,"tid":47,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371443000,"dur":100},{"pid":1,"tid":47,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371443000,"dur":100},{"pid":1,"tid":47,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371443000,"dur":1000},{"pid":1,"tid":47,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371444000,"dur":100},{"pid":1,"tid":47,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371444000,"dur":100},{"pid":1,"tid":47,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371444000,"dur":3000},{"pid":1,"tid":47,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371447000,"dur":100},{"pid":1,"tid":47,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371447000,"dur":100},{"pid":1,"tid":47,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371447000,"dur":100},{"pid":1,"tid":47,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371447000,"dur":31000},{"pid":1,"tid":47,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371478000,"dur":1000},{"pid":1,"tid":47,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371479000,"dur":4000},{"pid":1,"tid":47,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371485000,"dur":1000},{"pid":1,"tid":47,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371486000,"dur":1000},{"pid":1,"tid":47,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371441000,"dur":46000},{"pid":1,"tid":47,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371487000,"dur":3000},{"pid":1,"tid":47,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371491000,"dur":100},{"pid":1,"tid":47,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371491000,"dur":100},{"pid":1,"tid":47,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371491000,"dur":100},{"pid":1,"tid":47,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371491000,"dur":100},{"pid":1,"tid":47,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371491000,"dur":1000},{"pid":1,"tid":47,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371492000,"dur":100},{"pid":1,"tid":47,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371492000,"dur":1000},{"pid":1,"tid":47,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371493000,"dur":100},{"pid":1,"tid":47,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371493000,"dur":100},{"pid":1,"tid":47,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371493000,"dur":100},{"pid":1,"tid":47,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371493000,"dur":29000},{"pid":1,"tid":47,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371522000,"dur":1000},{"pid":1,"tid":47,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371523000,"dur":1000},{"pid":1,"tid":47,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371525000,"dur":1000},{"pid":1,"tid":47,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371526000,"dur":100},{"pid":1,"tid":47,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142371490000,"dur":36000},{"pid":1,"tid":47,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371526000,"dur":2000},{"pid":1,"tid":47,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371528000,"dur":8000},{"pid":1,"tid":47,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371436000,"dur":101000},{"pid":1,"tid":47,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371538000,"dur":20000},{"pid":1,"tid":47,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142371429000,"dur":129000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371568000,"dur":100},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371568000,"dur":55000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371624000,"dur":5000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371630000,"dur":5000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371635000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371637000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142371638000,"dur":2000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371641000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371643000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371644000,"dur":145000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371790000,"dur":4000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142371797000,"dur":76000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142371875000,"dur":6000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142371884000,"dur":876000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142372761000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: test pre build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 93\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142372761000,"dur":104000},{"pid":1,"tid":0,"id":62,"name":"task: aidl compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142372867000,"dur":12000},{"pid":1,"tid":0,"id":63,"name":"task: process test manifest","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142372880000,"dur":13000},{"pid":1,"tid":0,"id":64,"name":"task: renderscript compile","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142372895000,"dur":9000},{"pid":1,"tid":0,"id":65,"name":"task: generate build config","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142372905000,"dur":3000},{"pid":1,"tid":0,"id":66,"name":"task: generate res values","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142372909000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142372911000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: merge resources","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142372914000,"dur":144000},{"pid":1,"tid":0,"id":69,"name":"task: splits discovery","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142373058000,"dur":1000},{"pid":1,"tid":0,"id":70,"name":"task: process android resources","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142373060000,"dur":11000},{"pid":1,"tid":0,"id":71,"name":"task: unknown task type","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142373071000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: mockable android jar","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142373072000,"dur":130000},{"pid":1,"tid":47,"id":73,"name":"base plugin build finished","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142373203000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-33-213.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-33-213.rawproto
new file mode 100644
index 00000000..b4a2c86e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-16-59-33-213.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-17-03-36-937.json b/IGetAndroid/build/android-profile/profile-2018-02-20-17-03-36-937.json
new file mode 100644
index 00000000..78b5769b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-17-03-36-937.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595584000,"args":{"JVM stats":"heap_memory_usage: 384165144\nnon_heap_memory_usage: 175854176\nloaded_class_count: 16808\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595699000,"args":{"JVM stats":"heap_memory_usage: 398551368\nnon_heap_memory_usage: 175992160\nloaded_class_count: 16808\nthread_count: 33\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595740000,"args":{"JVM stats":"heap_memory_usage: 405923520\nnon_heap_memory_usage: 176003120\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595745000,"args":{"JVM stats":"heap_memory_usage: 406274040\nnon_heap_memory_usage: 176005808\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595748000,"args":{"JVM stats":"heap_memory_usage: 406274040\nnon_heap_memory_usage: 176007296\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595748001,"args":{"JVM stats":"heap_memory_usage: 406274040\nnon_heap_memory_usage: 176007296\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595749000,"args":{"JVM stats":"heap_memory_usage: 406274040\nnon_heap_memory_usage: 176008000\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595750000,"args":{"JVM stats":"heap_memory_usage: 406624592\nnon_heap_memory_usage: 175988736\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595750001,"args":{"JVM stats":"heap_memory_usage: 406624592\nnon_heap_memory_usage: 175988736\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595750000,"args":{"JVM stats":"heap_memory_usage: 406624592\nnon_heap_memory_usage: 175988736\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595785000,"args":{"JVM stats":"heap_memory_usage: 410481736\nnon_heap_memory_usage: 176009384\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595786000,"args":{"JVM stats":"heap_memory_usage: 410481736\nnon_heap_memory_usage: 176009384\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595789000,"args":{"JVM stats":"heap_memory_usage: 411533728\nnon_heap_memory_usage: 176013416\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595790000,"args":{"JVM stats":"heap_memory_usage: 411533728\nnon_heap_memory_usage: 176014120\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595796000,"args":{"JVM stats":"heap_memory_usage: 412585608\nnon_heap_memory_usage: 176014120\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595796001,"args":{"JVM stats":"heap_memory_usage: 412585608\nnon_heap_memory_usage: 176014120\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142595815000,"args":{"JVM stats":"heap_memory_usage: 413641376\nnon_heap_memory_usage: 176014120\nloaded_class_count: 16808\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142596345000,"args":{"JVM stats":"heap_memory_usage: 458576416\nnon_heap_memory_usage: 177202048\nloaded_class_count: 16808\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142596359000,"args":{"JVM stats":"heap_memory_usage: 459986976\nnon_heap_memory_usage: 177221424\nloaded_class_count: 16808\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142614174000,"args":{"JVM stats":"heap_memory_usage: 466414320\nnon_heap_memory_usage: 177277040\nloaded_class_count: 16808\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142614175000,"args":{"JVM stats":"heap_memory_usage: 466764864\nnon_heap_memory_usage: 177277040\nloaded_class_count: 16808\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142614178000,"args":{"JVM stats":"heap_memory_usage: 466764864\nnon_heap_memory_usage: 177277040\nloaded_class_count: 16808\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142614181000,"args":{"JVM stats":"heap_memory_usage: 467119496\nnon_heap_memory_usage: 177282416\nloaded_class_count: 16808\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142614182000,"args":{"JVM stats":"heap_memory_usage: 467119496\nnon_heap_memory_usage: 177291312\nloaded_class_count: 16808\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142614185000,"args":{"JVM stats":"heap_memory_usage: 467119496\nnon_heap_memory_usage: 177279984\nloaded_class_count: 16808\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142614556000,"args":{"JVM stats":"heap_memory_usage: 136829024\nnon_heap_memory_usage: 178004184\nloaded_class_count: 16808\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 25\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142615059000,"args":{"JVM stats":"heap_memory_usage: 289481616\nnon_heap_memory_usage: 178371712\nloaded_class_count: 16818\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142615190000,"args":{"JVM stats":"heap_memory_usage: 340391376\nnon_heap_memory_usage: 178784424\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142615193000,"args":{"JVM stats":"heap_memory_usage: 340620400\nnon_heap_memory_usage: 178784424\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142616029000,"args":{"JVM stats":"heap_memory_usage: 364870240\nnon_heap_memory_usage: 178879712\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142616280000,"args":{"JVM stats":"heap_memory_usage: 369718008\nnon_heap_memory_usage: 178886712\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142616281000,"args":{"JVM stats":"heap_memory_usage: 370389272\nnon_heap_memory_usage: 178886712\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142616290000,"args":{"JVM stats":"heap_memory_usage: 370810856\nnon_heap_memory_usage: 178887416\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142616291000,"args":{"JVM stats":"heap_memory_usage: 370810856\nnon_heap_memory_usage: 178887416\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142616926000,"args":{"JVM stats":"heap_memory_usage: 303841664\nnon_heap_memory_usage: 179032872\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 59\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142616927000,"args":{"JVM stats":"heap_memory_usage: 304956432\nnon_heap_memory_usage: 179032872\nloaded_class_count: 16824\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519142616937000,"args":{"JVM stats":"heap_memory_usage: 305462472\nnon_heap_memory_usage: 179036464\nloaded_class_count: 16824\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":48,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595584000,"dur":3000},{"pid":1,"tid":48,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595587000,"dur":2000},{"pid":1,"tid":48,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595589000,"dur":100},{"pid":1,"tid":48,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595589000,"dur":100},{"pid":1,"tid":48,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595598000,"dur":2000},{"pid":1,"tid":48,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595600000,"dur":100},{"pid":1,"tid":48,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595601000,"dur":100},{"pid":1,"tid":48,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595601000,"dur":100},{"pid":1,"tid":48,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595601000,"dur":1000},{"pid":1,"tid":48,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595602000,"dur":100},{"pid":1,"tid":48,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595602000,"dur":100},{"pid":1,"tid":48,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595602000,"dur":100},{"pid":1,"tid":48,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595602000,"dur":4000},{"pid":1,"tid":48,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595606000,"dur":100},{"pid":1,"tid":48,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595606000,"dur":100},{"pid":1,"tid":48,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595606000,"dur":1000},{"pid":1,"tid":48,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595607000,"dur":27000},{"pid":1,"tid":48,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595634000,"dur":100},{"pid":1,"tid":48,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595634000,"dur":2000},{"pid":1,"tid":48,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595637000,"dur":1000},{"pid":1,"tid":48,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595638000,"dur":100},{"pid":1,"tid":48,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595600000,"dur":38000},{"pid":1,"tid":48,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595638000,"dur":2000},{"pid":1,"tid":48,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595640000,"dur":100},{"pid":1,"tid":48,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595640000,"dur":100},{"pid":1,"tid":48,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595640000,"dur":100},{"pid":1,"tid":48,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595640000,"dur":1000},{"pid":1,"tid":48,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595641000,"dur":100},{"pid":1,"tid":48,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595641000,"dur":100},{"pid":1,"tid":48,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595641000,"dur":100},{"pid":1,"tid":48,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595641000,"dur":100},{"pid":1,"tid":48,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595641000,"dur":1000},{"pid":1,"tid":48,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595642000,"dur":100},{"pid":1,"tid":48,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595642000,"dur":21000},{"pid":1,"tid":48,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595663000,"dur":1000},{"pid":1,"tid":48,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595664000,"dur":1000},{"pid":1,"tid":48,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595666000,"dur":1000},{"pid":1,"tid":48,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595667000,"dur":100},{"pid":1,"tid":48,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519142595640000,"dur":27000},{"pid":1,"tid":48,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595667000,"dur":2000},{"pid":1,"tid":48,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595669000,"dur":7000},{"pid":1,"tid":48,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595598000,"dur":79000},{"pid":1,"tid":48,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595677000,"dur":11000},{"pid":1,"tid":48,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142595593000,"dur":95000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595698000,"dur":100},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595699000,"dur":41000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595741000,"dur":4000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595746000,"dur":2000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595748000,"dur":100},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595749000,"dur":100},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595749000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595750000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595750000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595751000,"dur":34000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595785000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595787000,"dur":2000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595789000,"dur":1000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595790000,"dur":6000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595796000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: java pre compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142595797000,"dur":18000},{"pid":1,"tid":0,"id":62,"name":"task: android java compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142595815000,"dur":530000},{"pid":1,"tid":0,"id":63,"name":"task: external native build json","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142596347000,"dur":12000},{"pid":1,"tid":0,"id":64,"name":"task: external native build","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142596359000,"dur":17815000},{"pid":1,"tid":0,"id":65,"name":"task: unknown task type","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142614175000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142614176000,"dur":2000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142614179000,"dur":2000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142614181000,"dur":1000},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142614182000,"dur":3000},{"pid":1,"tid":49,"id":71,"name":"transform prep: dex archive builder","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1519142614233000,"dur":3000},{"pid":1,"tid":49,"id":72,"name":"transform: dex archive builder","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1519142614236000,"dur":229000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142614185000,"dur":371000},{"pid":1,"tid":49,"id":74,"name":"transform prep: external libs merger","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1519142614568000,"dur":2000},{"pid":1,"tid":49,"id":75,"name":"transform: external libs merger","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1519142614570000,"dur":481000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142614557000,"dur":502000},{"pid":1,"tid":49,"id":77,"name":"transform prep: dex merger","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1519142615070000,"dur":1000},{"pid":1,"tid":49,"id":78,"name":"transform: dex merger","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1519142615071000,"dur":108000},{"pid":1,"tid":0,"id":76,"name":"task: transform","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142615059000,"dur":131000},{"pid":1,"tid":0,"id":79,"name":"task: merge source set folders","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142615190000,"dur":3000},{"pid":1,"tid":49,"id":81,"name":"transform prep: merge java resources","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1519142615462000,"dur":3000},{"pid":1,"tid":49,"id":82,"name":"transform: merge java resources","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1519142615465000,"dur":300000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142615193000,"dur":836000},{"pid":1,"tid":49,"id":84,"name":"transform prep: strip debug symbol","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1519142616035000,"dur":1000},{"pid":1,"tid":49,"id":85,"name":"transform: strip debug symbol","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1519142616036000,"dur":180000},{"pid":1,"tid":0,"id":83,"name":"task: transform","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142616029000,"dur":251000},{"pid":1,"tid":0,"id":86,"name":"task: unknown task type","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142616281000,"dur":100},{"pid":1,"tid":0,"id":87,"name":"task: transform","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519142616282000,"dur":8000},{"pid":1,"tid":0,"id":88,"name":"task: validate signing","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142616290000,"dur":1000},{"pid":1,"tid":0,"id":89,"name":"task: package application","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142616291000,"dur":635000},{"pid":1,"tid":0,"id":90,"name":"task: unknown task type","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519142616927000,"dur":100},{"pid":1,"tid":48,"id":91,"name":"base plugin build finished","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 107808\n apk_size: 8095888\n resources_ap_size: 490761\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519142616927000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-17-03-36-937.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-17-03-36-937.rawproto
new file mode 100644
index 00000000..0dcea7d8
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-17-03-36-937.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-17-14-35-299.json b/IGetAndroid/build/android-profile/profile-2018-02-20-17-14-35-299.json
new file mode 100644
index 00000000..8da6b209
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-17-14-35-299.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240560000,"args":{"JVM stats":"heap_memory_usage: 275526968\nnon_heap_memory_usage: 205843144\nloaded_class_count: 18677\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240883000,"args":{"JVM stats":"heap_memory_usage: 303883240\nnon_heap_memory_usage: 206397464\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240975000,"args":{"JVM stats":"heap_memory_usage: 315063200\nnon_heap_memory_usage: 206438864\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240980000,"args":{"JVM stats":"heap_memory_usage: 315508056\nnon_heap_memory_usage: 206438864\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240983000,"args":{"JVM stats":"heap_memory_usage: 315956984\nnon_heap_memory_usage: 206444240\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240984000,"args":{"JVM stats":"heap_memory_usage: 315956984\nnon_heap_memory_usage: 206461544\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240986000,"args":{"JVM stats":"heap_memory_usage: 315956984\nnon_heap_memory_usage: 206469544\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240988000,"args":{"JVM stats":"heap_memory_usage: 315956984\nnon_heap_memory_usage: 206482144\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240989000,"args":{"JVM stats":"heap_memory_usage: 316405912\nnon_heap_memory_usage: 206491792\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143240990000,"args":{"JVM stats":"heap_memory_usage: 316405912\nnon_heap_memory_usage: 206528968\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143241094000,"args":{"JVM stats":"heap_memory_usage: 327138448\nnon_heap_memory_usage: 206614664\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143241096000,"args":{"JVM stats":"heap_memory_usage: 327583632\nnon_heap_memory_usage: 206614664\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143241101000,"args":{"JVM stats":"heap_memory_usage: 328032560\nnon_heap_memory_usage: 206614664\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143241102000,"args":{"JVM stats":"heap_memory_usage: 328032560\nnon_heap_memory_usage: 206614664\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143241113000,"args":{"JVM stats":"heap_memory_usage: 330261088\nnon_heap_memory_usage: 206614664\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143241113001,"args":{"JVM stats":"heap_memory_usage: 330261088\nnon_heap_memory_usage: 206614664\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143241136000,"args":{"JVM stats":"heap_memory_usage: 330261088\nnon_heap_memory_usage: 206614664\nloaded_class_count: 18695\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143241708000,"args":{"JVM stats":"heap_memory_usage: 376330880\nnon_heap_memory_usage: 207032424\nloaded_class_count: 18695\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143250096000,"args":{"JVM stats":"heap_memory_usage: 385688360\nnon_heap_memory_usage: 207169160\nloaded_class_count: 18695\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143267600000,"args":{"JVM stats":"heap_memory_usage: 394013072\nnon_heap_memory_usage: 207185200\nloaded_class_count: 18695\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143267601000,"args":{"JVM stats":"heap_memory_usage: 394013072\nnon_heap_memory_usage: 207185200\nloaded_class_count: 18695\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143268772000,"args":{"JVM stats":"heap_memory_usage: 236548544\nnon_heap_memory_usage: 209080712\nloaded_class_count: 18706\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 293\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143268775000,"args":{"JVM stats":"heap_memory_usage: 239306288\nnon_heap_memory_usage: 209082120\nloaded_class_count: 18706\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143268777000,"args":{"JVM stats":"heap_memory_usage: 239306288\nnon_heap_memory_usage: 209082120\nloaded_class_count: 18706\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143268777001,"args":{"JVM stats":"heap_memory_usage: 239306288\nnon_heap_memory_usage: 209082120\nloaded_class_count: 18706\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143268781000,"args":{"JVM stats":"heap_memory_usage: 241383640\nnon_heap_memory_usage: 209082120\nloaded_class_count: 18706\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143268987000,"args":{"JVM stats":"heap_memory_usage: 262726952\nnon_heap_memory_usage: 209285400\nloaded_class_count: 18707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143269325000,"args":{"JVM stats":"heap_memory_usage: 324305880\nnon_heap_memory_usage: 209638912\nloaded_class_count: 18707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143269327000,"args":{"JVM stats":"heap_memory_usage: 324556600\nnon_heap_memory_usage: 209638912\nloaded_class_count: 18707\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143270096000,"args":{"JVM stats":"heap_memory_usage: 346096384\nnon_heap_memory_usage: 209806072\nloaded_class_count: 18709\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143270374000,"args":{"JVM stats":"heap_memory_usage: 350653008\nnon_heap_memory_usage: 209809656\nloaded_class_count: 18709\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143270376000,"args":{"JVM stats":"heap_memory_usage: 350653008\nnon_heap_memory_usage: 209809656\nloaded_class_count: 18709\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143270384000,"args":{"JVM stats":"heap_memory_usage: 351306792\nnon_heap_memory_usage: 209803000\nloaded_class_count: 18709\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143270384001,"args":{"JVM stats":"heap_memory_usage: 351306792\nnon_heap_memory_usage: 209803000\nloaded_class_count: 18709\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143275291000,"args":{"JVM stats":"heap_memory_usage: 569544384\nnon_heap_memory_usage: 209685944\nloaded_class_count: 18709\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 158\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143275291001,"args":{"JVM stats":"heap_memory_usage: 570772064\nnon_heap_memory_usage: 209685944\nloaded_class_count: 18709\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143275300000,"args":{"JVM stats":"heap_memory_usage: 571269112\nnon_heap_memory_usage: 209690872\nloaded_class_count: 18709\nthread_count: 33\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":17,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240563000,"dur":22000},{"pid":1,"tid":17,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240585000,"dur":30000},{"pid":1,"tid":17,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240615000,"dur":7000},{"pid":1,"tid":17,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240615000,"dur":7000},{"pid":1,"tid":17,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240767000,"dur":6000},{"pid":1,"tid":17,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240773000,"dur":1000},{"pid":1,"tid":17,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240776000,"dur":1000},{"pid":1,"tid":17,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240777000,"dur":1000},{"pid":1,"tid":17,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240778000,"dur":100},{"pid":1,"tid":17,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240778000,"dur":1000},{"pid":1,"tid":17,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240779000,"dur":1000},{"pid":1,"tid":17,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240780000,"dur":1000},{"pid":1,"tid":17,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240781000,"dur":5000},{"pid":1,"tid":17,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240786000,"dur":100},{"pid":1,"tid":17,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240786000,"dur":1000},{"pid":1,"tid":17,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240787000,"dur":100},{"pid":1,"tid":17,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240787000,"dur":25000},{"pid":1,"tid":17,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240812000,"dur":2000},{"pid":1,"tid":17,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240814000,"dur":5000},{"pid":1,"tid":17,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240820000,"dur":3000},{"pid":1,"tid":17,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240823000,"dur":100},{"pid":1,"tid":17,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240774000,"dur":49000},{"pid":1,"tid":17,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240823000,"dur":5000},{"pid":1,"tid":17,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240829000,"dur":100},{"pid":1,"tid":17,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240829000,"dur":100},{"pid":1,"tid":17,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240829000,"dur":100},{"pid":1,"tid":17,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240829000,"dur":100},{"pid":1,"tid":17,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240829000,"dur":1000},{"pid":1,"tid":17,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240830000,"dur":100},{"pid":1,"tid":17,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240830000,"dur":100},{"pid":1,"tid":17,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240830000,"dur":100},{"pid":1,"tid":17,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240830000,"dur":1000},{"pid":1,"tid":17,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240831000,"dur":100},{"pid":1,"tid":17,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240831000,"dur":15000},{"pid":1,"tid":17,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240846000,"dur":100},{"pid":1,"tid":17,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240846000,"dur":1000},{"pid":1,"tid":17,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240848000,"dur":2000},{"pid":1,"tid":17,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240850000,"dur":100},{"pid":1,"tid":17,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143240828000,"dur":22000},{"pid":1,"tid":17,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240850000,"dur":2000},{"pid":1,"tid":17,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240852000,"dur":5000},{"pid":1,"tid":17,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240767000,"dur":99000},{"pid":1,"tid":17,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143240678000,"dur":188000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240883000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240884000,"dur":91000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240976000,"dur":4000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240981000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240984000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240985000,"dur":1000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143240986000,"dur":2000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240988000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240990000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143240991000,"dur":103000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143241094000,"dur":1000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143241096000,"dur":5000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143241101000,"dur":1000},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143241103000,"dur":10000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143241113000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143241114000,"dur":22000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143241136000,"dur":572000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143241709000,"dur":8387000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143250097000,"dur":17503000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143267600000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143267601000,"dur":1170000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143268772000,"dur":3000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143268776000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143268777000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143268778000,"dur":3000},{"pid":1,"tid":18,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1519143268823000,"dur":2000},{"pid":1,"tid":18,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1519143268825000,"dur":160000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143268782000,"dur":205000},{"pid":1,"tid":18,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1519143268994000,"dur":100},{"pid":1,"tid":18,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1519143268994000,"dur":319000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143268988000,"dur":337000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143269325000,"dur":2000},{"pid":1,"tid":18,"id":78,"name":"transform prep: merge java resources","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1519143269606000,"dur":1000},{"pid":1,"tid":18,"id":79,"name":"transform: merge java resources","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 13\nis_incremental: true\n"},"ph":"X","ts":1519143269608000,"dur":269000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143269328000,"dur":768000},{"pid":1,"tid":18,"id":81,"name":"transform prep: strip debug symbol","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1519143270104000,"dur":100},{"pid":1,"tid":18,"id":82,"name":"transform: strip debug symbol","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 21\nis_incremental: true\n"},"ph":"X","ts":1519143270104000,"dur":216000},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143270100000,"dur":274000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143270375000,"dur":1000},{"pid":1,"tid":0,"id":84,"name":"task: transform","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143270376000,"dur":8000},{"pid":1,"tid":0,"id":85,"name":"task: validate signing","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143270384000,"dur":100},{"pid":1,"tid":0,"id":86,"name":"task: package application","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143270384000,"dur":4907000},{"pid":1,"tid":0,"id":87,"name":"task: unknown task type","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143275291000,"dur":100},{"pid":1,"tid":17,"id":88,"name":"base plugin build finished","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143275292000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-17-14-35-299.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-17-14-35-299.rawproto
new file mode 100644
index 00000000..88355058
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-17-14-35-299.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-17-15-57-006.json b/IGetAndroid/build/android-profile/profile-2018-02-20-17-15-57-006.json
new file mode 100644
index 00000000..da410758
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-17-15-57-006.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519143332307000,"args":{"JVM stats":"heap_memory_usage: 375142824\nnon_heap_memory_usage: 178814592\nloaded_class_count: 16832\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143357008000,"args":{"JVM stats":"heap_memory_usage: 445077880\nnon_heap_memory_usage: 178658760\nloaded_class_count: 16833\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":50,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332308000,"dur":4000},{"pid":1,"tid":50,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332312000,"dur":6000},{"pid":1,"tid":50,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332318000,"dur":100},{"pid":1,"tid":50,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332318000,"dur":100},{"pid":1,"tid":50,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332389000,"dur":4000},{"pid":1,"tid":50,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332393000,"dur":1000},{"pid":1,"tid":50,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332396000,"dur":1000},{"pid":1,"tid":50,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332397000,"dur":100},{"pid":1,"tid":50,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332397000,"dur":100},{"pid":1,"tid":50,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332398000,"dur":1000},{"pid":1,"tid":50,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332399000,"dur":100},{"pid":1,"tid":50,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332399000,"dur":1000},{"pid":1,"tid":50,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332400000,"dur":3000},{"pid":1,"tid":50,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332403000,"dur":1000},{"pid":1,"tid":50,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332404000,"dur":100},{"pid":1,"tid":50,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332404000,"dur":1000},{"pid":1,"tid":50,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332405000,"dur":48000},{"pid":1,"tid":50,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332453000,"dur":100},{"pid":1,"tid":50,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332453000,"dur":2000},{"pid":1,"tid":50,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332456000,"dur":1000},{"pid":1,"tid":50,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332457000,"dur":100},{"pid":1,"tid":50,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332394000,"dur":63000},{"pid":1,"tid":50,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332457000,"dur":3000},{"pid":1,"tid":50,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332460000,"dur":100},{"pid":1,"tid":50,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332460000,"dur":100},{"pid":1,"tid":50,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332460000,"dur":1000},{"pid":1,"tid":50,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332461000,"dur":100},{"pid":1,"tid":50,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332461000,"dur":100},{"pid":1,"tid":50,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332461000,"dur":100},{"pid":1,"tid":50,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332461000,"dur":100},{"pid":1,"tid":50,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332461000,"dur":100},{"pid":1,"tid":50,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332461000,"dur":1000},{"pid":1,"tid":50,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332462000,"dur":100},{"pid":1,"tid":50,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332462000,"dur":28000},{"pid":1,"tid":50,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332490000,"dur":17000},{"pid":1,"tid":50,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332507000,"dur":12000},{"pid":1,"tid":50,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332519000,"dur":1000},{"pid":1,"tid":50,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332520000,"dur":100},{"pid":1,"tid":50,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143332460000,"dur":60000},{"pid":1,"tid":50,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332520000,"dur":2000},{"pid":1,"tid":50,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332522000,"dur":4000},{"pid":1,"tid":50,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332389000,"dur":138000},{"pid":1,"tid":50,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332527000,"dur":23995000},{"pid":1,"tid":50,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143332320000,"dur":24202000},{"pid":1,"tid":50,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143357001000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-17-15-57-006.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-17-15-57-006.rawproto
new file mode 100644
index 00000000..ff9b2487
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-17-15-57-006.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-17-16-31-323.json b/IGetAndroid/build/android-profile/profile-2018-02-20-17-16-31-323.json
new file mode 100644
index 00000000..0cb3ca2b
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-17-16-31-323.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355568000,"args":{"JVM stats":"heap_memory_usage: 597587536\nnon_heap_memory_usage: 209822736\nloaded_class_count: 18728\nthread_count: 31\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355825000,"args":{"JVM stats":"heap_memory_usage: 624334136\nnon_heap_memory_usage: 210475704\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355893000,"args":{"JVM stats":"heap_memory_usage: 636391360\nnon_heap_memory_usage: 210519304\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355899000,"args":{"JVM stats":"heap_memory_usage: 636391360\nnon_heap_memory_usage: 210510856\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355902000,"args":{"JVM stats":"heap_memory_usage: 637021352\nnon_heap_memory_usage: 210511368\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355903000,"args":{"JVM stats":"heap_memory_usage: 637021352\nnon_heap_memory_usage: 210511368\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355908000,"args":{"JVM stats":"heap_memory_usage: 637336312\nnon_heap_memory_usage: 210511368\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355909000,"args":{"JVM stats":"heap_memory_usage: 637336312\nnon_heap_memory_usage: 210511368\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355910000,"args":{"JVM stats":"heap_memory_usage: 637336312\nnon_heap_memory_usage: 210511368\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143355910001,"args":{"JVM stats":"heap_memory_usage: 637336312\nnon_heap_memory_usage: 210511368\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143356019000,"args":{"JVM stats":"heap_memory_usage: 187396032\nnon_heap_memory_usage: 210519752\nloaded_class_count: 18743\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 24\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143356024000,"args":{"JVM stats":"heap_memory_usage: 187856736\nnon_heap_memory_usage: 210520520\nloaded_class_count: 18743\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143356063000,"args":{"JVM stats":"heap_memory_usage: 192727544\nnon_heap_memory_usage: 210670376\nloaded_class_count: 18743\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143356064000,"args":{"JVM stats":"heap_memory_usage: 192727544\nnon_heap_memory_usage: 210676456\nloaded_class_count: 18743\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143357089000,"args":{"JVM stats":"heap_memory_usage: 213243800\nnon_heap_memory_usage: 210719064\nloaded_class_count: 18744\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143357090000,"args":{"JVM stats":"heap_memory_usage: 213309352\nnon_heap_memory_usage: 210719064\nloaded_class_count: 18744\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143357120000,"args":{"JVM stats":"heap_memory_usage: 214954320\nnon_heap_memory_usage: 210726424\nloaded_class_count: 18744\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143358033000,"args":{"JVM stats":"heap_memory_usage: 255183816\nnon_heap_memory_usage: 211549312\nloaded_class_count: 18744\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143366896000,"args":{"JVM stats":"heap_memory_usage: 260089752\nnon_heap_memory_usage: 211188560\nloaded_class_count: 18744\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143388571000,"args":{"JVM stats":"heap_memory_usage: 265275488\nnon_heap_memory_usage: 210330552\nloaded_class_count: 18744\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143388572000,"args":{"JVM stats":"heap_memory_usage: 265275488\nnon_heap_memory_usage: 210330552\nloaded_class_count: 18744\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389274000,"args":{"JVM stats":"heap_memory_usage: 347582144\nnon_heap_memory_usage: 211590536\nloaded_class_count: 18746\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389279000,"args":{"JVM stats":"heap_memory_usage: 347582144\nnon_heap_memory_usage: 211591720\nloaded_class_count: 18746\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389282000,"args":{"JVM stats":"heap_memory_usage: 347582144\nnon_heap_memory_usage: 211594056\nloaded_class_count: 18746\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389283000,"args":{"JVM stats":"heap_memory_usage: 347582144\nnon_heap_memory_usage: 211594056\nloaded_class_count: 18746\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389286000,"args":{"JVM stats":"heap_memory_usage: 348087408\nnon_heap_memory_usage: 211594056\nloaded_class_count: 18746\nthread_count: 49\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389511000,"args":{"JVM stats":"heap_memory_usage: 370097280\nnon_heap_memory_usage: 211851160\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389697000,"args":{"JVM stats":"heap_memory_usage: 429650336\nnon_heap_memory_usage: 212178736\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389698000,"args":{"JVM stats":"heap_memory_usage: 429650336\nnon_heap_memory_usage: 212178736\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389963000,"args":{"JVM stats":"heap_memory_usage: 430817856\nnon_heap_memory_usage: 212286536\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389967000,"args":{"JVM stats":"heap_memory_usage: 431212584\nnon_heap_memory_usage: 212287496\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389967001,"args":{"JVM stats":"heap_memory_usage: 431212584\nnon_heap_memory_usage: 212288200\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389974000,"args":{"JVM stats":"heap_memory_usage: 431671656\nnon_heap_memory_usage: 212288576\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143389974001,"args":{"JVM stats":"heap_memory_usage: 431824496\nnon_heap_memory_usage: 212289664\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143391315000,"args":{"JVM stats":"heap_memory_usage: 196577640\nnon_heap_memory_usage: 212339592\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 2\n gc_time: 24\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143391316000,"args":{"JVM stats":"heap_memory_usage: 198484928\nnon_heap_memory_usage: 212339592\nloaded_class_count: 18747\nthread_count: 50\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519143391324000,"args":{"JVM stats":"heap_memory_usage: 198889656\nnon_heap_memory_usage: 212343648\nloaded_class_count: 18747\nthread_count: 40\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":19,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355570000,"dur":12000},{"pid":1,"tid":19,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355582000,"dur":7000},{"pid":1,"tid":19,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355589000,"dur":3000},{"pid":1,"tid":19,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355589000,"dur":4000},{"pid":1,"tid":19,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355712000,"dur":7000},{"pid":1,"tid":19,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355719000,"dur":100},{"pid":1,"tid":19,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355721000,"dur":100},{"pid":1,"tid":19,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355721000,"dur":100},{"pid":1,"tid":19,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355721000,"dur":1000},{"pid":1,"tid":19,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355722000,"dur":100},{"pid":1,"tid":19,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355722000,"dur":1000},{"pid":1,"tid":19,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355723000,"dur":100},{"pid":1,"tid":19,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355723000,"dur":3000},{"pid":1,"tid":19,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355726000,"dur":100},{"pid":1,"tid":19,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355726000,"dur":100},{"pid":1,"tid":19,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355726000,"dur":100},{"pid":1,"tid":19,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355726000,"dur":31000},{"pid":1,"tid":19,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355757000,"dur":1000},{"pid":1,"tid":19,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355758000,"dur":5000},{"pid":1,"tid":19,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355765000,"dur":1000},{"pid":1,"tid":19,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355766000,"dur":100},{"pid":1,"tid":19,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355719000,"dur":47000},{"pid":1,"tid":19,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355766000,"dur":3000},{"pid":1,"tid":19,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355770000,"dur":100},{"pid":1,"tid":19,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355770000,"dur":100},{"pid":1,"tid":19,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355770000,"dur":100},{"pid":1,"tid":19,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355770000,"dur":100},{"pid":1,"tid":19,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355770000,"dur":100},{"pid":1,"tid":19,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355770000,"dur":1000},{"pid":1,"tid":19,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355771000,"dur":100},{"pid":1,"tid":19,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355771000,"dur":100},{"pid":1,"tid":19,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355771000,"dur":1000},{"pid":1,"tid":19,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355772000,"dur":100},{"pid":1,"tid":19,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355772000,"dur":23000},{"pid":1,"tid":19,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355795000,"dur":100},{"pid":1,"tid":19,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355795000,"dur":2000},{"pid":1,"tid":19,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355798000,"dur":1000},{"pid":1,"tid":19,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355799000,"dur":100},{"pid":1,"tid":19,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519143355769000,"dur":30000},{"pid":1,"tid":19,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355799000,"dur":2000},{"pid":1,"tid":19,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355801000,"dur":8000},{"pid":1,"tid":19,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355712000,"dur":101000},{"pid":1,"tid":19,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143355638000,"dur":175000},{"pid":1,"tid":0,"id":45,"name":"task: unknown task type","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355824000,"dur":100},{"pid":1,"tid":0,"id":46,"name":"task: app pre build","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355825000,"dur":68000},{"pid":1,"tid":0,"id":47,"name":"task: aidl compile","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355894000,"dur":5000},{"pid":1,"tid":0,"id":48,"name":"task: renderscript compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355900000,"dur":2000},{"pid":1,"tid":0,"id":49,"name":"task: check manifest","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355902000,"dur":1000},{"pid":1,"tid":0,"id":50,"name":"task: generate build config","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143355903000,"dur":5000},{"pid":1,"tid":0,"id":51,"name":"task: prepare lint jar","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355908000,"dur":1000},{"pid":1,"tid":0,"id":52,"name":"task: generate res values","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355909000,"dur":1000},{"pid":1,"tid":0,"id":53,"name":"task: unknown task type","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355910000,"dur":100},{"pid":1,"tid":0,"id":54,"name":"task: merge resources","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143355911000,"dur":108000},{"pid":1,"tid":0,"id":55,"name":"task: compatible screens manifest","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143356019000,"dur":5000},{"pid":1,"tid":0,"id":56,"name":"task: merge manifests","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143356024000,"dur":39000},{"pid":1,"tid":0,"id":57,"name":"task: splits discovery","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143356064000,"dur":100},{"pid":1,"tid":0,"id":58,"name":"task: process android resources","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143356066000,"dur":1023000},{"pid":1,"tid":0,"id":59,"name":"task: unknown task type","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143357090000,"dur":100},{"pid":1,"tid":0,"id":60,"name":"task: java pre compile","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143357090000,"dur":30000},{"pid":1,"tid":0,"id":61,"name":"task: android java compile","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143357121000,"dur":912000},{"pid":1,"tid":0,"id":62,"name":"task: external native build json","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143358034000,"dur":8862000},{"pid":1,"tid":0,"id":63,"name":"task: external native build","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143366897000,"dur":21674000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143388571000,"dur":1000},{"pid":1,"tid":0,"id":65,"name":"task: lint per variant","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 118\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143388572000,"dur":702000},{"pid":1,"tid":0,"id":66,"name":"task: merge source set folders","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143389275000,"dur":4000},{"pid":1,"tid":0,"id":67,"name":"task: shader compile","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143389280000,"dur":1000},{"pid":1,"tid":0,"id":68,"name":"task: unknown task type","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143389282000,"dur":100},{"pid":1,"tid":0,"id":69,"name":"task: merge source set folders","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143389283000,"dur":3000},{"pid":1,"tid":20,"id":71,"name":"transform prep: pre dex","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1519143389334000,"dur":3000},{"pid":1,"tid":20,"id":72,"name":"transform: pre dex","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 25\nis_incremental: true\n"},"ph":"X","ts":1519143389337000,"dur":170000},{"pid":1,"tid":0,"id":70,"name":"task: transform","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143389288000,"dur":223000},{"pid":1,"tid":20,"id":74,"name":"transform prep: dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1519143389518000,"dur":1000},{"pid":1,"tid":20,"id":75,"name":"transform: dex","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 1\nis_incremental: false\n"},"ph":"X","ts":1519143389519000,"dur":164000},{"pid":1,"tid":0,"id":73,"name":"task: transform","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143389512000,"dur":185000},{"pid":1,"tid":0,"id":76,"name":"task: merge source set folders","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143389697000,"dur":1000},{"pid":1,"tid":0,"id":77,"name":"task: transform","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143389698000,"dur":265000},{"pid":1,"tid":0,"id":78,"name":"task: transform","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143389964000,"dur":3000},{"pid":1,"tid":0,"id":79,"name":"task: unknown task type","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143389967000,"dur":100},{"pid":1,"tid":0,"id":80,"name":"task: transform","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519143389968000,"dur":6000},{"pid":1,"tid":0,"id":81,"name":"task: validate signing","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143389974000,"dur":100},{"pid":1,"tid":0,"id":82,"name":"task: package application","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143389975000,"dur":1340000},{"pid":1,"tid":0,"id":83,"name":"task: unknown task type","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519143391316000,"dur":100},{"pid":1,"tid":19,"id":84,"name":"base plugin build finished","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519143391316000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-17-16-31-323.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-17-16-31-323.rawproto
new file mode 100644
index 00000000..a4ac7c1f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-17-16-31-323.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-18-40-40-997.json b/IGetAndroid/build/android-profile/profile-2018-02-20-18-40-40-997.json
new file mode 100644
index 00000000..98f006c5
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-18-40-40-997.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519148407394000,"args":{"JVM stats":"heap_memory_usage: 221508168\nnon_heap_memory_usage: 115346488\nloaded_class_count: 13381\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519148441002000,"args":{"JVM stats":"heap_memory_usage: 304154992\nnon_heap_memory_usage: 117606392\nloaded_class_count: 13413\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148407396000,"dur":14000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148407410000,"dur":27000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148407437000,"dur":20000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148407437000,"dur":20000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148408434000,"dur":23000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148408458000,"dur":4000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408550000,"dur":8000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408558000,"dur":2000},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408561000,"dur":5000},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408566000,"dur":7000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408574000,"dur":2000},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408576000,"dur":2000},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408578000,"dur":70000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408649000,"dur":2000},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408651000,"dur":2000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408654000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408654000,"dur":106000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408760000,"dur":3000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408763000,"dur":10000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408778000,"dur":3000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408781000,"dur":1000},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408462000,"dur":320000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148408782000,"dur":35000},{"pid":1,"tid":2,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408835000,"dur":1000},{"pid":1,"tid":2,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408836000,"dur":100},{"pid":1,"tid":2,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408836000,"dur":100},{"pid":1,"tid":2,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408836000,"dur":100},{"pid":1,"tid":2,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408836000,"dur":2000},{"pid":1,"tid":2,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408838000,"dur":100},{"pid":1,"tid":2,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408838000,"dur":3000},{"pid":1,"tid":2,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408841000,"dur":100},{"pid":1,"tid":2,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408841000,"dur":1000},{"pid":1,"tid":2,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408842000,"dur":100},{"pid":1,"tid":2,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408842000,"dur":42000},{"pid":1,"tid":2,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408884000,"dur":1000},{"pid":1,"tid":2,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408885000,"dur":2000},{"pid":1,"tid":2,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408888000,"dur":2000},{"pid":1,"tid":2,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408890000,"dur":100},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519148408817000,"dur":73000},{"pid":1,"tid":2,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148408890000,"dur":5000},{"pid":1,"tid":2,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148408895000,"dur":14000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148408432000,"dur":487000},{"pid":1,"tid":2,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148408920000,"dur":28888000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148407627000,"dur":30181000},{"pid":1,"tid":2,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519148440978000,"dur":2000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-20-18-40-40-997.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-20-18-40-40-997.rawproto
new file mode 100644
index 00000000..6a5a2cfc
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-20-18-40-40-997.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-21-10-12-55-071.json b/IGetAndroid/build/android-profile/profile-2018-02-21-10-12-55-071.json
new file mode 100644
index 00000000..86698560
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-21-10-12-55-071.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519204340597000,"args":{"JVM stats":"heap_memory_usage: 29835208\nnon_heap_memory_usage: 54960776\nloaded_class_count: 7743\nthread_count: 25\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 6\n gc_time: 207\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 2\n gc_time: 289\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204375075000,"args":{"JVM stats":"heap_memory_usage: 60115416\nnon_heap_memory_usage: 88277888\nloaded_class_count: 11799\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 3\n gc_time: 88\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 1\n gc_time: 293\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204340779000,"dur":1730000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204342510000,"dur":1490000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204344002000,"dur":182000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204344001000,"dur":187000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204347806000,"dur":292000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204348103000,"dur":180000},{"pid":1,"tid":1,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204348454000,"dur":120000},{"pid":1,"tid":1,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204348575000,"dur":12000},{"pid":1,"tid":1,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204348588000,"dur":90000},{"pid":1,"tid":1,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204348687000,"dur":308000},{"pid":1,"tid":1,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204348997000,"dur":30000},{"pid":1,"tid":1,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349028000,"dur":16000},{"pid":1,"tid":1,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349044000,"dur":279000},{"pid":1,"tid":1,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349325000,"dur":32000},{"pid":1,"tid":1,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349357000,"dur":31000},{"pid":1,"tid":1,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349389000,"dur":9000},{"pid":1,"tid":1,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349398000,"dur":146000},{"pid":1,"tid":1,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349546000,"dur":63000},{"pid":1,"tid":1,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349611000,"dur":211000},{"pid":1,"tid":1,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349835000,"dur":79000},{"pid":1,"tid":1,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204349915000,"dur":14000},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204348284000,"dur":1645000},{"pid":1,"tid":1,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204349929000,"dur":232000},{"pid":1,"tid":1,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350178000,"dur":9000},{"pid":1,"tid":1,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350187000,"dur":1000},{"pid":1,"tid":1,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350188000,"dur":1000},{"pid":1,"tid":1,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350190000,"dur":1000},{"pid":1,"tid":1,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350191000,"dur":2000},{"pid":1,"tid":1,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350193000,"dur":1000},{"pid":1,"tid":1,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350194000,"dur":9000},{"pid":1,"tid":1,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350203000,"dur":100},{"pid":1,"tid":1,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350204000,"dur":1000},{"pid":1,"tid":1,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350205000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350205000,"dur":57000},{"pid":1,"tid":1,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350262000,"dur":9000},{"pid":1,"tid":1,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350272000,"dur":18000},{"pid":1,"tid":1,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350294000,"dur":7000},{"pid":1,"tid":1,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350301000,"dur":100},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204350161000,"dur":140000},{"pid":1,"tid":1,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204350301000,"dur":16000},{"pid":1,"tid":1,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204350318000,"dur":121000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204347802000,"dur":2956000},{"pid":1,"tid":1,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204350778000,"dur":19693000},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204344683000,"dur":25788000},{"pid":1,"tid":1,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204374700000,"dur":350000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-21-10-12-55-071.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-21-10-12-55-071.rawproto
new file mode 100644
index 00000000..6c77060f
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-21-10-12-55-071.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-22-826.json b/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-22-826.json
new file mode 100644
index 00000000..a8817d26
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-22-826.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519204677341000,"args":{"JVM stats":"heap_memory_usage: 158117384\nnon_heap_memory_usage: 93441992\nloaded_class_count: 12135\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204702826000,"args":{"JVM stats":"heap_memory_usage: 215074992\nnon_heap_memory_usage: 95943648\nloaded_class_count: 12167\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677341000,"dur":19000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677360000,"dur":14000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677374000,"dur":6000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677374000,"dur":6000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677396000,"dur":10000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677406000,"dur":2000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677413000,"dur":1000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677414000,"dur":1000},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677415000,"dur":100},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677415000,"dur":1000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677417000,"dur":100},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677417000,"dur":1000},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677418000,"dur":6000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677424000,"dur":1000},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677425000,"dur":2000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677427000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677427000,"dur":41000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677468000,"dur":1000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677469000,"dur":10000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677482000,"dur":4000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677486000,"dur":1000},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677408000,"dur":79000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677487000,"dur":8000},{"pid":1,"tid":2,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677497000,"dur":1000},{"pid":1,"tid":2,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677498000,"dur":100},{"pid":1,"tid":2,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677498000,"dur":100},{"pid":1,"tid":2,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677498000,"dur":1000},{"pid":1,"tid":2,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677499000,"dur":100},{"pid":1,"tid":2,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677499000,"dur":1000},{"pid":1,"tid":2,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677500000,"dur":2000},{"pid":1,"tid":2,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677502000,"dur":100},{"pid":1,"tid":2,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677502000,"dur":1000},{"pid":1,"tid":2,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677503000,"dur":100},{"pid":1,"tid":2,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677503000,"dur":26000},{"pid":1,"tid":2,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677529000,"dur":1000},{"pid":1,"tid":2,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677530000,"dur":3000},{"pid":1,"tid":2,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677533000,"dur":2000},{"pid":1,"tid":2,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677535000,"dur":100},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204677496000,"dur":39000},{"pid":1,"tid":2,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677535000,"dur":4000},{"pid":1,"tid":2,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677539000,"dur":13000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677395000,"dur":159000},{"pid":1,"tid":2,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677554000,"dur":24526000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204677384000,"dur":24696000},{"pid":1,"tid":2,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204702817000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-22-826.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-22-826.rawproto
new file mode 100644
index 00000000..4a82e293
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-22-826.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-27-787.json b/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-27-787.json
new file mode 100644
index 00000000..38bcc015
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-27-787.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519204704410000,"args":{"JVM stats":"heap_memory_usage: 273037984\nnon_heap_memory_usage: 97498848\nloaded_class_count: 12190\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204704826000,"args":{"JVM stats":"heap_memory_usage: 72856400\nnon_heap_memory_usage: 99111056\nloaded_class_count: 12338\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 12\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204704952000,"args":{"JVM stats":"heap_memory_usage: 82704568\nnon_heap_memory_usage: 99809544\nloaded_class_count: 12414\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204704971000,"args":{"JVM stats":"heap_memory_usage: 83333800\nnon_heap_memory_usage: 99879448\nloaded_class_count: 12420\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204704988000,"args":{"JVM stats":"heap_memory_usage: 84092744\nnon_heap_memory_usage: 99933440\nloaded_class_count: 12427\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204704991000,"args":{"JVM stats":"heap_memory_usage: 84092744\nnon_heap_memory_usage: 99956072\nloaded_class_count: 12428\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204705024000,"args":{"JVM stats":"heap_memory_usage: 84847848\nnon_heap_memory_usage: 100071728\nloaded_class_count: 12444\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204705030000,"args":{"JVM stats":"heap_memory_usage: 84847848\nnon_heap_memory_usage: 100042096\nloaded_class_count: 12445\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204705037000,"args":{"JVM stats":"heap_memory_usage: 85225328\nnon_heap_memory_usage: 99997752\nloaded_class_count: 12445\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204705038000,"args":{"JVM stats":"heap_memory_usage: 85225328\nnon_heap_memory_usage: 99987992\nloaded_class_count: 12445\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204705284000,"args":{"JVM stats":"heap_memory_usage: 99633720\nnon_heap_memory_usage: 100135352\nloaded_class_count: 12446\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204705308000,"args":{"JVM stats":"heap_memory_usage: 100798944\nnon_heap_memory_usage: 100316072\nloaded_class_count: 12473\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204705444000,"args":{"JVM stats":"heap_memory_usage: 110212016\nnon_heap_memory_usage: 100640656\nloaded_class_count: 12633\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204705455000,"args":{"JVM stats":"heap_memory_usage: 110589496\nnon_heap_memory_usage: 100658448\nloaded_class_count: 12633\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706695000,"args":{"JVM stats":"heap_memory_usage: 135532208\nnon_heap_memory_usage: 102119064\nloaded_class_count: 12783\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706699000,"args":{"JVM stats":"heap_memory_usage: 135532208\nnon_heap_memory_usage: 102139648\nloaded_class_count: 12783\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706813000,"args":{"JVM stats":"heap_memory_usage: 143229288\nnon_heap_memory_usage: 102360104\nloaded_class_count: 12784\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706825000,"args":{"JVM stats":"heap_memory_usage: 143984336\nnon_heap_memory_usage: 102426968\nloaded_class_count: 12784\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706871000,"args":{"JVM stats":"heap_memory_usage: 146880248\nnon_heap_memory_usage: 102717656\nloaded_class_count: 12793\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706881000,"args":{"JVM stats":"heap_memory_usage: 147635232\nnon_heap_memory_usage: 102747032\nloaded_class_count: 12793\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706892000,"args":{"JVM stats":"heap_memory_usage: 147635232\nnon_heap_memory_usage: 102757800\nloaded_class_count: 12794\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706896000,"args":{"JVM stats":"heap_memory_usage: 147635232\nnon_heap_memory_usage: 102764200\nloaded_class_count: 12794\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204706897000,"args":{"JVM stats":"heap_memory_usage: 147635232\nnon_heap_memory_usage: 102764200\nloaded_class_count: 12794\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204707047000,"args":{"JVM stats":"heap_memory_usage: 158394056\nnon_heap_memory_usage: 102817576\nloaded_class_count: 12795\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204707050000,"args":{"JVM stats":"heap_memory_usage: 158771536\nnon_heap_memory_usage: 102832368\nloaded_class_count: 12795\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204707765000,"args":{"JVM stats":"heap_memory_usage: 176871912\nnon_heap_memory_usage: 102866536\nloaded_class_count: 12803\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204707766000,"args":{"JVM stats":"heap_memory_usage: 176871912\nnon_heap_memory_usage: 102838760\nloaded_class_count: 12803\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204707775000,"args":{"JVM stats":"heap_memory_usage: 177339816\nnon_heap_memory_usage: 102751952\nloaded_class_count: 12804\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519204707788000,"args":{"JVM stats":"heap_memory_usage: 177339816\nnon_heap_memory_usage: 102780808\nloaded_class_count: 12805\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":2,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704410000,"dur":7000},{"pid":1,"tid":2,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704417000,"dur":12000},{"pid":1,"tid":2,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704429000,"dur":3000},{"pid":1,"tid":2,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704429000,"dur":3000},{"pid":1,"tid":2,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704449000,"dur":10000},{"pid":1,"tid":2,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704459000,"dur":1000},{"pid":1,"tid":2,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704463000,"dur":3000},{"pid":1,"tid":2,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704466000,"dur":1000},{"pid":1,"tid":2,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704467000,"dur":1000},{"pid":1,"tid":2,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704468000,"dur":2000},{"pid":1,"tid":2,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704470000,"dur":1000},{"pid":1,"tid":2,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704471000,"dur":100},{"pid":1,"tid":2,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704471000,"dur":8000},{"pid":1,"tid":2,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704480000,"dur":1000},{"pid":1,"tid":2,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704481000,"dur":1000},{"pid":1,"tid":2,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704482000,"dur":100},{"pid":1,"tid":2,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704482000,"dur":39000},{"pid":1,"tid":2,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704521000,"dur":2000},{"pid":1,"tid":2,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704523000,"dur":9000},{"pid":1,"tid":2,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704534000,"dur":3000},{"pid":1,"tid":2,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704537000,"dur":100},{"pid":1,"tid":2,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704460000,"dur":77000},{"pid":1,"tid":2,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704537000,"dur":9000},{"pid":1,"tid":2,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704547000,"dur":1000},{"pid":1,"tid":2,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704548000,"dur":100},{"pid":1,"tid":2,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704548000,"dur":100},{"pid":1,"tid":2,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704548000,"dur":1000},{"pid":1,"tid":2,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704549000,"dur":100},{"pid":1,"tid":2,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704549000,"dur":100},{"pid":1,"tid":2,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704549000,"dur":2000},{"pid":1,"tid":2,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704551000,"dur":100},{"pid":1,"tid":2,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704551000,"dur":1000},{"pid":1,"tid":2,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704552000,"dur":100},{"pid":1,"tid":2,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704552000,"dur":36000},{"pid":1,"tid":2,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704588000,"dur":1000},{"pid":1,"tid":2,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704589000,"dur":4000},{"pid":1,"tid":2,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704594000,"dur":2000},{"pid":1,"tid":2,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704596000,"dur":1000},{"pid":1,"tid":2,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519204704546000,"dur":51000},{"pid":1,"tid":2,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704597000,"dur":7000},{"pid":1,"tid":2,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704604000,"dur":16000},{"pid":1,"tid":2,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704448000,"dur":175000},{"pid":1,"tid":2,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704624000,"dur":55000},{"pid":1,"tid":2,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204704437000,"dur":242000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204704819000,"dur":2000},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204704830000,"dur":122000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204704953000,"dur":18000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204704973000,"dur":15000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204704989000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204704992000,"dur":32000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204705025000,"dur":5000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204705031000,"dur":5000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204705037000,"dur":1000},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204705039000,"dur":245000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204705285000,"dur":23000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204705309000,"dur":135000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204705445000,"dur":10000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204705457000,"dur":1236000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204706699000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: test pre build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 93\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204706701000,"dur":112000},{"pid":1,"tid":0,"id":62,"name":"task: aidl compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204706814000,"dur":11000},{"pid":1,"tid":0,"id":63,"name":"task: process test manifest","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204706826000,"dur":45000},{"pid":1,"tid":0,"id":64,"name":"task: renderscript compile","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204706872000,"dur":9000},{"pid":1,"tid":0,"id":65,"name":"task: generate build config","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204706882000,"dur":10000},{"pid":1,"tid":0,"id":66,"name":"task: generate res values","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204706894000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204706897000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: merge resources","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204706899000,"dur":148000},{"pid":1,"tid":0,"id":69,"name":"task: splits discovery","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204707048000,"dur":2000},{"pid":1,"tid":0,"id":70,"name":"task: process android resources","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204707052000,"dur":713000},{"pid":1,"tid":0,"id":71,"name":"task: unknown task type","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519204707766000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: mockable android jar","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519204707766000,"dur":9000},{"pid":1,"tid":2,"id":73,"name":"base plugin build finished","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519204707777000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-27-787.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-27-787.rawproto
new file mode 100644
index 00000000..2e859bdb
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-21-10-18-27-787.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-27-13-27-59-859.json b/IGetAndroid/build/android-profile/profile-2018-02-27-13-27-59-859.json
new file mode 100644
index 00000000..4a93042d
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-27-13-27-59-859.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519734460857000,"args":{"JVM stats":"heap_memory_usage: 376181768\nnon_heap_memory_usage: 149414656\nloaded_class_count: 15735\nthread_count: 26\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734479859000,"args":{"JVM stats":"heap_memory_usage: 434796256\nnon_heap_memory_usage: 150799824\nloaded_class_count: 15751\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":19,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460858000,"dur":4000},{"pid":1,"tid":19,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460862000,"dur":9000},{"pid":1,"tid":19,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460871000,"dur":1000},{"pid":1,"tid":19,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460871000,"dur":1000},{"pid":1,"tid":19,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460880000,"dur":5000},{"pid":1,"tid":19,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460885000,"dur":1000},{"pid":1,"tid":19,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460886000,"dur":1000},{"pid":1,"tid":19,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460887000,"dur":100},{"pid":1,"tid":19,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460887000,"dur":100},{"pid":1,"tid":19,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460887000,"dur":1000},{"pid":1,"tid":19,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460888000,"dur":100},{"pid":1,"tid":19,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460888000,"dur":100},{"pid":1,"tid":19,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460888000,"dur":4000},{"pid":1,"tid":19,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460892000,"dur":100},{"pid":1,"tid":19,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460892000,"dur":1000},{"pid":1,"tid":19,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460893000,"dur":100},{"pid":1,"tid":19,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460893000,"dur":42000},{"pid":1,"tid":19,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460935000,"dur":100},{"pid":1,"tid":19,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460935000,"dur":4000},{"pid":1,"tid":19,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460943000,"dur":2000},{"pid":1,"tid":19,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460945000,"dur":100},{"pid":1,"tid":19,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460886000,"dur":59000},{"pid":1,"tid":19,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460946000,"dur":4000},{"pid":1,"tid":19,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460950000,"dur":1000},{"pid":1,"tid":19,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460951000,"dur":100},{"pid":1,"tid":19,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460951000,"dur":100},{"pid":1,"tid":19,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460951000,"dur":100},{"pid":1,"tid":19,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460951000,"dur":100},{"pid":1,"tid":19,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460951000,"dur":100},{"pid":1,"tid":19,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460951000,"dur":1000},{"pid":1,"tid":19,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460952000,"dur":100},{"pid":1,"tid":19,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460952000,"dur":100},{"pid":1,"tid":19,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460952000,"dur":100},{"pid":1,"tid":19,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460952000,"dur":20000},{"pid":1,"tid":19,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460972000,"dur":1000},{"pid":1,"tid":19,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460973000,"dur":1000},{"pid":1,"tid":19,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460975000,"dur":2000},{"pid":1,"tid":19,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460977000,"dur":100},{"pid":1,"tid":19,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734460950000,"dur":27000},{"pid":1,"tid":19,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460977000,"dur":4000},{"pid":1,"tid":19,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460981000,"dur":8000},{"pid":1,"tid":19,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460879000,"dur":132000},{"pid":1,"tid":19,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734461012000,"dur":18312000},{"pid":1,"tid":19,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734460874000,"dur":18450000},{"pid":1,"tid":19,"id":46,"name":"base plugin build finished","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734479853000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-27-13-27-59-859.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-27-13-27-59-859.rawproto
new file mode 100644
index 00000000..bc7f63f9
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-27-13-27-59-859.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-27-13-28-02-211.json b/IGetAndroid/build/android-profile/profile-2018-02-27-13-28-02-211.json
new file mode 100644
index 00000000..5e9f85c7
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-27-13-28-02-211.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481289000,"args":{"JVM stats":"heap_memory_usage: 489437336\nnon_heap_memory_usage: 151077648\nloaded_class_count: 15767\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481487000,"args":{"JVM stats":"heap_memory_usage: 503204152\nnon_heap_memory_usage: 151348176\nloaded_class_count: 15769\nthread_count: 29\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481553000,"args":{"JVM stats":"heap_memory_usage: 511167288\nnon_heap_memory_usage: 151395920\nloaded_class_count: 15769\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481563000,"args":{"JVM stats":"heap_memory_usage: 512021104\nnon_heap_memory_usage: 151403000\nloaded_class_count: 15772\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481576000,"args":{"JVM stats":"heap_memory_usage: 512877632\nnon_heap_memory_usage: 151444472\nloaded_class_count: 15783\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481578000,"args":{"JVM stats":"heap_memory_usage: 512877632\nnon_heap_memory_usage: 151451832\nloaded_class_count: 15783\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481584000,"args":{"JVM stats":"heap_memory_usage: 512877632\nnon_heap_memory_usage: 151496128\nloaded_class_count: 15792\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481587000,"args":{"JVM stats":"heap_memory_usage: 512877632\nnon_heap_memory_usage: 151496128\nloaded_class_count: 15792\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481589000,"args":{"JVM stats":"heap_memory_usage: 512877632\nnon_heap_memory_usage: 151498488\nloaded_class_count: 15793\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481589001,"args":{"JVM stats":"heap_memory_usage: 513161808\nnon_heap_memory_usage: 151498488\nloaded_class_count: 15793\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481772000,"args":{"JVM stats":"heap_memory_usage: 524470040\nnon_heap_memory_usage: 151551128\nloaded_class_count: 15803\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481774000,"args":{"JVM stats":"heap_memory_usage: 524470040\nnon_heap_memory_usage: 151552192\nloaded_class_count: 15803\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481786000,"args":{"JVM stats":"heap_memory_usage: 525038376\nnon_heap_memory_usage: 151576864\nloaded_class_count: 15803\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481791000,"args":{"JVM stats":"heap_memory_usage: 525326616\nnon_heap_memory_usage: 151642720\nloaded_class_count: 15810\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481835000,"args":{"JVM stats":"heap_memory_usage: 527320448\nnon_heap_memory_usage: 151722296\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481835001,"args":{"JVM stats":"heap_memory_usage: 527320448\nnon_heap_memory_usage: 151722296\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481897000,"args":{"JVM stats":"heap_memory_usage: 531600776\nnon_heap_memory_usage: 151786728\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481905000,"args":{"JVM stats":"heap_memory_usage: 532454264\nnon_heap_memory_usage: 151819464\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481912000,"args":{"JVM stats":"heap_memory_usage: 533310872\nnon_heap_memory_usage: 151841216\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481920000,"args":{"JVM stats":"heap_memory_usage: 534164200\nnon_heap_memory_usage: 151841568\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481922000,"args":{"JVM stats":"heap_memory_usage: 534164200\nnon_heap_memory_usage: 151841856\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481923000,"args":{"JVM stats":"heap_memory_usage: 534164200\nnon_heap_memory_usage: 151841888\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734481924000,"args":{"JVM stats":"heap_memory_usage: 534164200\nnon_heap_memory_usage: 151841888\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734482080000,"args":{"JVM stats":"heap_memory_usage: 109329128\nnon_heap_memory_usage: 151699320\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 15\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734482084000,"args":{"JVM stats":"heap_memory_usage: 112829472\nnon_heap_memory_usage: 151700104\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734482099000,"args":{"JVM stats":"heap_memory_usage: 116003120\nnon_heap_memory_usage: 151681488\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734482100000,"args":{"JVM stats":"heap_memory_usage: 116003120\nnon_heap_memory_usage: 151681488\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734482206000,"args":{"JVM stats":"heap_memory_usage: 116178600\nnon_heap_memory_usage: 151708176\nloaded_class_count: 15836\nthread_count: 35\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519734482212000,"args":{"JVM stats":"heap_memory_usage: 116178600\nnon_heap_memory_usage: 151708816\nloaded_class_count: 15836\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":19,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481289000,"dur":7000},{"pid":1,"tid":19,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481296000,"dur":5000},{"pid":1,"tid":19,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481301000,"dur":1000},{"pid":1,"tid":19,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481301000,"dur":1000},{"pid":1,"tid":19,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481310000,"dur":5000},{"pid":1,"tid":19,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481315000,"dur":100},{"pid":1,"tid":19,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481316000,"dur":1000},{"pid":1,"tid":19,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481317000,"dur":100},{"pid":1,"tid":19,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481317000,"dur":1000},{"pid":1,"tid":19,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481318000,"dur":1000},{"pid":1,"tid":19,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481319000,"dur":1000},{"pid":1,"tid":19,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481320000,"dur":1000},{"pid":1,"tid":19,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481321000,"dur":3000},{"pid":1,"tid":19,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481324000,"dur":1000},{"pid":1,"tid":19,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481325000,"dur":100},{"pid":1,"tid":19,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481325000,"dur":100},{"pid":1,"tid":19,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481325000,"dur":28000},{"pid":1,"tid":19,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481353000,"dur":100},{"pid":1,"tid":19,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481353000,"dur":4000},{"pid":1,"tid":19,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481359000,"dur":1000},{"pid":1,"tid":19,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481360000,"dur":100},{"pid":1,"tid":19,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481315000,"dur":45000},{"pid":1,"tid":19,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481360000,"dur":5000},{"pid":1,"tid":19,"id":28,"name":"app task manager create merge manifest task","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481366000,"dur":100},{"pid":1,"tid":19,"id":29,"name":"app task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481366000,"dur":100},{"pid":1,"tid":19,"id":30,"name":"app task manager create create renderscript task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481366000,"dur":100},{"pid":1,"tid":19,"id":31,"name":"app task manager create merge resources task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481366000,"dur":1000},{"pid":1,"tid":19,"id":32,"name":"app task manager create merge assets task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481367000,"dur":100},{"pid":1,"tid":19,"id":33,"name":"app task manager create build config task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481367000,"dur":100},{"pid":1,"tid":19,"id":34,"name":"app task manager create process res task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481367000,"dur":1000},{"pid":1,"tid":19,"id":35,"name":"app task manager create aidl task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481368000,"dur":100},{"pid":1,"tid":19,"id":36,"name":"app task manager create shader task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481368000,"dur":100},{"pid":1,"tid":19,"id":37,"name":"app task manager create ndk task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481368000,"dur":100},{"pid":1,"tid":19,"id":38,"name":"app task manager create external native build task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481368000,"dur":29000},{"pid":1,"tid":19,"id":39,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481397000,"dur":2000},{"pid":1,"tid":19,"id":40,"name":"app task manager create compile task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481399000,"dur":9000},{"pid":1,"tid":19,"id":41,"name":"app task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481409000,"dur":1000},{"pid":1,"tid":19,"id":42,"name":"app task manager create lint task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481410000,"dur":100},{"pid":1,"tid":19,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519734481365000,"dur":45000},{"pid":1,"tid":19,"id":43,"name":"variant manager create tasks for variant","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481410000,"dur":4000},{"pid":1,"tid":19,"id":44,"name":"variant manager create tasks for variant","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481414000,"dur":9000},{"pid":1,"tid":19,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481310000,"dur":115000},{"pid":1,"tid":19,"id":45,"name":"variant manager external native config values","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481425000,"dur":45000},{"pid":1,"tid":19,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734481304000,"dur":166000},{"pid":1,"tid":0,"id":46,"name":"task: unknown task type","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481487000,"dur":100},{"pid":1,"tid":0,"id":47,"name":"task: app pre build","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481488000,"dur":65000},{"pid":1,"tid":0,"id":48,"name":"task: aidl compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481554000,"dur":9000},{"pid":1,"tid":0,"id":49,"name":"task: renderscript compile","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481564000,"dur":12000},{"pid":1,"tid":0,"id":50,"name":"task: check manifest","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481576000,"dur":2000},{"pid":1,"tid":0,"id":51,"name":"task: generate build config","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481578000,"dur":6000},{"pid":1,"tid":0,"id":52,"name":"task: prepare lint jar","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481585000,"dur":2000},{"pid":1,"tid":0,"id":53,"name":"task: generate res values","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481588000,"dur":1000},{"pid":1,"tid":0,"id":54,"name":"task: unknown task type","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481589000,"dur":100},{"pid":1,"tid":0,"id":55,"name":"task: merge resources","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481591000,"dur":181000},{"pid":1,"tid":0,"id":56,"name":"task: compatible screens manifest","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481773000,"dur":1000},{"pid":1,"tid":0,"id":57,"name":"task: merge manifests","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481775000,"dur":11000},{"pid":1,"tid":0,"id":58,"name":"task: splits discovery","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481787000,"dur":4000},{"pid":1,"tid":0,"id":59,"name":"task: process android resources","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481793000,"dur":42000},{"pid":1,"tid":0,"id":60,"name":"task: unknown task type","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481835000,"dur":100},{"pid":1,"tid":0,"id":61,"name":"task: test pre build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 93\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481836000,"dur":61000},{"pid":1,"tid":0,"id":62,"name":"task: aidl compile","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481898000,"dur":7000},{"pid":1,"tid":0,"id":63,"name":"task: process test manifest","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481905000,"dur":7000},{"pid":1,"tid":0,"id":64,"name":"task: renderscript compile","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481913000,"dur":7000},{"pid":1,"tid":0,"id":65,"name":"task: generate build config","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481920000,"dur":2000},{"pid":1,"tid":0,"id":66,"name":"task: generate res values","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481922000,"dur":1000},{"pid":1,"tid":0,"id":67,"name":"task: unknown task type","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481923000,"dur":100},{"pid":1,"tid":0,"id":68,"name":"task: merge resources","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734481925000,"dur":155000},{"pid":1,"tid":0,"id":69,"name":"task: splits discovery","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734482081000,"dur":3000},{"pid":1,"tid":0,"id":70,"name":"task: process android resources","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734482086000,"dur":13000},{"pid":1,"tid":0,"id":71,"name":"task: unknown task type","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734482099000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: mockable android jar","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519734482100000,"dur":106000},{"pid":1,"tid":19,"id":73,"name":"base plugin build finished","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519734482207000,"dur":100}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-27-13-28-02-211.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-27-13-28-02-211.rawproto
new file mode 100644
index 00000000..e5ce2d36
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-27-13-28-02-211.rawproto
Binary files differ
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-28-11-38-55-150.json b/IGetAndroid/build/android-profile/profile-2018-02-28-11-38-55-150.json
new file mode 100644
index 00000000..01943c3e
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-28-11-38-55-150.json
@@ -0,0 +1 @@
+[{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323050000,"args":{"JVM stats":"heap_memory_usage: 177897784\nnon_heap_memory_usage: 173961864\nloaded_class_count: 16418\nthread_count: 27\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323224000,"args":{"JVM stats":"heap_memory_usage: 197399392\nnon_heap_memory_usage: 174203056\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323224001,"args":{"JVM stats":"heap_memory_usage: 197684992\nnon_heap_memory_usage: 174203056\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323326000,"args":{"JVM stats":"heap_memory_usage: 210318144\nnon_heap_memory_usage: 174253808\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323332000,"args":{"JVM stats":"heap_memory_usage: 210318144\nnon_heap_memory_usage: 174253808\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323339000,"args":{"JVM stats":"heap_memory_usage: 210891408\nnon_heap_memory_usage: 174253808\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323341000,"args":{"JVM stats":"heap_memory_usage: 210891408\nnon_heap_memory_usage: 174253808\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323343000,"args":{"JVM stats":"heap_memory_usage: 210891408\nnon_heap_memory_usage: 174254384\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323344000,"args":{"JVM stats":"heap_memory_usage: 210891408\nnon_heap_memory_usage: 174255088\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323345000,"args":{"JVM stats":"heap_memory_usage: 210891408\nnon_heap_memory_usage: 174255088\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323345001,"args":{"JVM stats":"heap_memory_usage: 210891408\nnon_heap_memory_usage: 174255088\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323491000,"args":{"JVM stats":"heap_memory_usage: 222505216\nnon_heap_memory_usage: 174277424\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323493000,"args":{"JVM stats":"heap_memory_usage: 222505216\nnon_heap_memory_usage: 174277424\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323532000,"args":{"JVM stats":"heap_memory_usage: 228253968\nnon_heap_memory_usage: 174280072\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814323539000,"args":{"JVM stats":"heap_memory_usage: 228542640\nnon_heap_memory_usage: 174280776\nloaded_class_count: 16442\nthread_count: 36\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814324399000,"args":{"JVM stats":"heap_memory_usage: 248498320\nnon_heap_memory_usage: 174398056\nloaded_class_count: 16442\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814324400000,"args":{"JVM stats":"heap_memory_usage: 248782912\nnon_heap_memory_usage: 174398056\nloaded_class_count: 16442\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814324433000,"args":{"JVM stats":"heap_memory_usage: 249733288\nnon_heap_memory_usage: 174400888\nloaded_class_count: 16442\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325128000,"args":{"JVM stats":"heap_memory_usage: 295137576\nnon_heap_memory_usage: 175438536\nloaded_class_count: 16443\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325136000,"args":{"JVM stats":"heap_memory_usage: 295426248\nnon_heap_memory_usage: 175451288\nloaded_class_count: 16443\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325140000,"args":{"JVM stats":"heap_memory_usage: 295714920\nnon_heap_memory_usage: 175454296\nloaded_class_count: 16443\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325140001,"args":{"JVM stats":"heap_memory_usage: 295999512\nnon_heap_memory_usage: 175454296\nloaded_class_count: 16443\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325147000,"args":{"JVM stats":"heap_memory_usage: 295999512\nnon_heap_memory_usage: 175454296\nloaded_class_count: 16443\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325262000,"args":{"JVM stats":"heap_memory_usage: 373201752\nnon_heap_memory_usage: 175468256\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325279000,"args":{"JVM stats":"heap_memory_usage: 373787304\nnon_heap_memory_usage: 175470264\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325285000,"args":{"JVM stats":"heap_memory_usage: 373787304\nnon_heap_memory_usage: 175470264\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325349000,"args":{"JVM stats":"heap_memory_usage: 376365760\nnon_heap_memory_usage: 175531424\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325369000,"args":{"JVM stats":"heap_memory_usage: 377512776\nnon_heap_memory_usage: 175534048\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814325388000,"args":{"JVM stats":"heap_memory_usage: 378663368\nnon_heap_memory_usage: 175567912\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331247000,"args":{"JVM stats":"heap_memory_usage: 380370856\nnon_heap_memory_usage: 175688296\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331250000,"args":{"JVM stats":"heap_memory_usage: 380655440\nnon_heap_memory_usage: 175688296\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331329000,"args":{"JVM stats":"heap_memory_usage: 381224616\nnon_heap_memory_usage: 175688296\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331330000,"args":{"JVM stats":"heap_memory_usage: 381224616\nnon_heap_memory_usage: 175688296\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331342000,"args":{"JVM stats":"heap_memory_usage: 382656864\nnon_heap_memory_usage: 175689000\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331345000,"args":{"JVM stats":"heap_memory_usage: 382941464\nnon_heap_memory_usage: 175689000\nloaded_class_count: 16443\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331740000,"args":{"JVM stats":"heap_memory_usage: 399851200\nnon_heap_memory_usage: 175757736\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331749000,"args":{"JVM stats":"heap_memory_usage: 400135936\nnon_heap_memory_usage: 175757736\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331751000,"args":{"JVM stats":"heap_memory_usage: 400135936\nnon_heap_memory_usage: 175758552\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331754000,"args":{"JVM stats":"heap_memory_usage: 400135936\nnon_heap_memory_usage: 175760344\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331757000,"args":{"JVM stats":"heap_memory_usage: 400713280\nnon_heap_memory_usage: 175760344\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331765000,"args":{"JVM stats":"heap_memory_usage: 400997976\nnon_heap_memory_usage: 175761496\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814331843000,"args":{"JVM stats":"heap_memory_usage: 404434088\nnon_heap_memory_usage: 175786584\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814332662000,"args":{"JVM stats":"heap_memory_usage: 120521408\nnon_heap_memory_usage: 176799176\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 44\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814333337000,"args":{"JVM stats":"heap_memory_usage: 331760688\nnon_heap_memory_usage: 177253784\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814333447000,"args":{"JVM stats":"heap_memory_usage: 393523184\nnon_heap_memory_usage: 177279120\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814333448000,"args":{"JVM stats":"heap_memory_usage: 393741040\nnon_heap_memory_usage: 177279120\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814333779000,"args":{"JVM stats":"heap_memory_usage: 421985160\nnon_heap_memory_usage: 177323128\nloaded_class_count: 16443\nthread_count: 54\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814334312000,"args":{"JVM stats":"heap_memory_usage: 503221688\nnon_heap_memory_usage: 177161952\nloaded_class_count: 16443\nthread_count: 64\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814334317000,"args":{"JVM stats":"heap_memory_usage: 504037496\nnon_heap_memory_usage: 177161952\nloaded_class_count: 16443\nthread_count: 64\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814335131000,"args":{"JVM stats":"heap_memory_usage: 448651440\nnon_heap_memory_usage: 176952456\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 67\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814335133000,"args":{"JVM stats":"heap_memory_usage: 452629912\nnon_heap_memory_usage: 176952456\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814335134000,"args":{"JVM stats":"heap_memory_usage: 452782048\nnon_heap_memory_usage: 176952456\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814335134001,"args":{"JVM stats":"heap_memory_usage: 452782048\nnon_heap_memory_usage: 176952456\nloaded_class_count: 16443\nthread_count: 52\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1519814335150000,"args":{"JVM stats":"heap_memory_usage: 454080264\nnon_heap_memory_usage: 176952456\nloaded_class_count: 16443\nthread_count: 42\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":52,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323050000,"dur":5000},{"pid":1,"tid":52,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323055000,"dur":5000},{"pid":1,"tid":52,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323060000,"dur":100},{"pid":1,"tid":52,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323060000,"dur":100},{"pid":1,"tid":52,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323092000,"dur":3000},{"pid":1,"tid":52,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323095000,"dur":100},{"pid":1,"tid":52,"id":11,"name":"app task manager create merge manifest task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323095000,"dur":1000},{"pid":1,"tid":52,"id":12,"name":"app task manager create generate res values task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323096000,"dur":100},{"pid":1,"tid":52,"id":13,"name":"app task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323096000,"dur":100},{"pid":1,"tid":52,"id":14,"name":"app task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323096000,"dur":100},{"pid":1,"tid":52,"id":15,"name":"app task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323096000,"dur":100},{"pid":1,"tid":52,"id":16,"name":"app task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323096000,"dur":1000},{"pid":1,"tid":52,"id":17,"name":"app task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323097000,"dur":3000},{"pid":1,"tid":52,"id":18,"name":"app task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323100000,"dur":1000},{"pid":1,"tid":52,"id":19,"name":"app task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323101000,"dur":100},{"pid":1,"tid":52,"id":20,"name":"app task manager create ndk task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323101000,"dur":100},{"pid":1,"tid":52,"id":21,"name":"app task manager create external native build task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323101000,"dur":38000},{"pid":1,"tid":52,"id":22,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323139000,"dur":2000},{"pid":1,"tid":52,"id":23,"name":"app task manager create compile task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323141000,"dur":3000},{"pid":1,"tid":52,"id":24,"name":"app task manager create packaging task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323145000,"dur":4000},{"pid":1,"tid":52,"id":25,"name":"app task manager create lint task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323149000,"dur":100},{"pid":1,"tid":52,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814323095000,"dur":54000},{"pid":1,"tid":52,"id":26,"name":"variant manager create tasks for variant","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323149000,"dur":5000},{"pid":1,"tid":52,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323154000,"dur":8000},{"pid":1,"tid":52,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323092000,"dur":99000},{"pid":1,"tid":52,"id":28,"name":"variant manager external native config values","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323192000,"dur":9000},{"pid":1,"tid":52,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814323091000,"dur":110000},{"pid":1,"tid":0,"id":29,"name":"task: build info loader","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 7\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814323220000,"dur":4000},{"pid":1,"tid":0,"id":30,"name":"task: unknown task type","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323224000,"dur":100},{"pid":1,"tid":0,"id":31,"name":"task: app pre build","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323224000,"dur":102000},{"pid":1,"tid":0,"id":32,"name":"task: aidl compile","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323326000,"dur":6000},{"pid":1,"tid":0,"id":33,"name":"task: renderscript compile","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323333000,"dur":6000},{"pid":1,"tid":0,"id":34,"name":"task: check manifest","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323340000,"dur":1000},{"pid":1,"tid":0,"id":35,"name":"task: generate build config","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323342000,"dur":1000},{"pid":1,"tid":0,"id":36,"name":"task: prepare lint jar","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323343000,"dur":1000},{"pid":1,"tid":0,"id":37,"name":"task: generate res values","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323345000,"dur":100},{"pid":1,"tid":0,"id":38,"name":"task: unknown task type","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323345000,"dur":100},{"pid":1,"tid":0,"id":39,"name":"task: merge resources","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323346000,"dur":145000},{"pid":1,"tid":0,"id":40,"name":"task: compatible screens manifest","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323492000,"dur":1000},{"pid":1,"tid":0,"id":41,"name":"task: merge manifests","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814323493000,"dur":39000},{"pid":1,"tid":0,"id":42,"name":"task: splits discovery","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814323532000,"dur":7000},{"pid":1,"tid":0,"id":43,"name":"task: process android resources","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814323541000,"dur":857000},{"pid":1,"tid":0,"id":44,"name":"task: unknown task type","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814324400000,"dur":100},{"pid":1,"tid":0,"id":45,"name":"task: java pre compile","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 76\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814324402000,"dur":31000},{"pid":1,"tid":0,"id":46,"name":"task: android java compile","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 3\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814324434000,"dur":693000},{"pid":1,"tid":0,"id":47,"name":"task: merge source set folders","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814325129000,"dur":6000},{"pid":1,"tid":0,"id":48,"name":"task: shader compile","args":{"span_id":"48","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 55\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814325137000,"dur":3000},{"pid":1,"tid":0,"id":49,"name":"task: unknown task type","args":{"span_id":"49","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814325140000,"dur":100},{"pid":1,"tid":0,"id":50,"name":"task: merge source set folders","args":{"span_id":"50","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814325141000,"dur":6000},{"pid":1,"tid":0,"id":51,"name":"task: package application","args":{"span_id":"51","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814325148000,"dur":114000},{"pid":1,"tid":0,"id":52,"name":"task: check manifest in instant run mode","args":{"span_id":"52","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 72\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814325263000,"dur":15000},{"pid":1,"tid":0,"id":53,"name":"task: transform","args":{"span_id":"53","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814325281000,"dur":4000},{"pid":1,"tid":55,"id":55,"name":"transform prep: instant run verifier","args":{"span_id":"55","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1519814325336000,"dur":2000},{"pid":1,"tid":55,"id":57,"name":"task file verification","args":{"span_id":"57","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814325338000,"dur":1000},{"pid":1,"tid":55,"id":58,"name":"task file verification","args":{"span_id":"58","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1519814325341000,"dur":100},{"pid":1,"tid":55,"id":56,"name":"transform: instant run verifier","args":{"span_id":"56","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 20\nis_incremental: true\n"},"ph":"X","ts":1519814325338000,"dur":7000},{"pid":1,"tid":0,"id":54,"name":"task: transform","args":{"span_id":"54","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814325287000,"dur":62000},{"pid":1,"tid":0,"id":59,"name":"task: transform","args":{"span_id":"59","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814325349000,"dur":20000},{"pid":1,"tid":0,"id":60,"name":"task: external native build json","args":{"span_id":"60","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 16\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814325371000,"dur":17000},{"pid":1,"tid":0,"id":61,"name":"task: external native build","args":{"span_id":"61","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 17\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814325389000,"dur":5858000},{"pid":1,"tid":0,"id":62,"name":"task: merge source set folders","args":{"span_id":"62","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 41\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814331248000,"dur":2000},{"pid":1,"tid":0,"id":63,"name":"task: transform","args":{"span_id":"63","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814331251000,"dur":78000},{"pid":1,"tid":0,"id":64,"name":"task: unknown task type","args":{"span_id":"64","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331330000,"dur":100},{"pid":1,"tid":0,"id":65,"name":"task: transform","args":{"span_id":"65","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814331331000,"dur":11000},{"pid":1,"tid":55,"id":67,"name":"transform prep: no changes verifier","args":{"span_id":"67","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1519814331344000,"dur":1000},{"pid":1,"tid":55,"id":68,"name":"transform: no changes verifier","args":{"span_id":"68","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 16\nis_incremental: true\n"},"ph":"X","ts":1519814331345000,"dur":100},{"pid":1,"tid":0,"id":66,"name":"task: transform","args":{"span_id":"66","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331343000,"dur":2000},{"pid":1,"tid":55,"id":70,"name":"transform prep: instant run","args":{"span_id":"70","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: true\n"},"ph":"X","ts":1519814331524000,"dur":6000},{"pid":1,"tid":55,"id":71,"name":"transform: instant run","args":{"span_id":"71","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 5\nis_incremental: false\n"},"ph":"X","ts":1519814331530000,"dur":166000},{"pid":1,"tid":0,"id":69,"name":"task: transform","args":{"span_id":"69","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331346000,"dur":394000},{"pid":1,"tid":55,"id":73,"name":"transform prep: instant run dex","args":{"span_id":"73","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1519814331748000,"dur":100},{"pid":1,"tid":55,"id":74,"name":"transform: instant run dex","args":{"span_id":"74","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 3\nis_incremental: false\n"},"ph":"X","ts":1519814331748000,"dur":100},{"pid":1,"tid":0,"id":72,"name":"task: transform","args":{"span_id":"72","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331742000,"dur":7000},{"pid":1,"tid":0,"id":75,"name":"task: unknown task type","args":{"span_id":"75","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331750000,"dur":100},{"pid":1,"tid":0,"id":76,"name":"task: pre cold swap","args":{"span_id":"76","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 48\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331751000,"dur":3000},{"pid":1,"tid":0,"id":77,"name":"task: fast deploy runtime extractor","args":{"span_id":"77","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 21\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814331755000,"dur":2000},{"pid":1,"tid":0,"id":78,"name":"task: generate instant run app info","args":{"span_id":"78","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 25\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331758000,"dur":7000},{"pid":1,"tid":56,"id":80,"name":"transform prep: instant run slicer","args":{"span_id":"80","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1519814331812000,"dur":100},{"pid":1,"tid":56,"id":81,"name":"transform: instant run slicer","args":{"span_id":"81","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 4\nis_incremental: true\n"},"ph":"X","ts":1519814331812000,"dur":17000},{"pid":1,"tid":0,"id":79,"name":"task: transform","args":{"span_id":"79","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331765000,"dur":78000},{"pid":1,"tid":56,"id":83,"name":"transform prep: dex archive builder","args":{"span_id":"83","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1519814331890000,"dur":1000},{"pid":1,"tid":56,"id":84,"name":"transform: dex archive builder","args":{"span_id":"84","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 29\nis_incremental: false\n"},"ph":"X","ts":1519814331891000,"dur":683000},{"pid":1,"tid":0,"id":82,"name":"task: transform","args":{"span_id":"82","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814331844000,"dur":818000},{"pid":1,"tid":56,"id":86,"name":"transform prep: external libs merger","args":{"span_id":"86","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1519814332675000,"dur":2000},{"pid":1,"tid":56,"id":87,"name":"transform: external libs merger","args":{"span_id":"87","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 34\nis_incremental: false\n"},"ph":"X","ts":1519814332677000,"dur":649000},{"pid":1,"tid":0,"id":85,"name":"task: transform","args":{"span_id":"85","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814332663000,"dur":674000},{"pid":1,"tid":56,"id":89,"name":"transform prep: dex merger","args":{"span_id":"89","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1519814333348000,"dur":1000},{"pid":1,"tid":56,"id":90,"name":"transform: dex merger","args":{"span_id":"90","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 30\nis_incremental: false\n"},"ph":"X","ts":1519814333349000,"dur":75000},{"pid":1,"tid":0,"id":88,"name":"task: transform","args":{"span_id":"88","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814333338000,"dur":109000},{"pid":1,"tid":0,"id":91,"name":"task: validate signing","args":{"span_id":"91","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 67\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814333447000,"dur":1000},{"pid":1,"tid":57,"id":93,"name":"transform prep: instant run dependencies apk builder","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1519814333453000,"dur":1000},{"pid":1,"tid":57,"id":94,"name":"transform: instant run dependencies apk builder","args":{"span_id":"94","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 23\nis_incremental: false\n"},"ph":"X","ts":1519814333454000,"dur":324000},{"pid":1,"tid":0,"id":92,"name":"task: transform","args":{"span_id":"92","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814333449000,"dur":330000},{"pid":1,"tid":57,"id":96,"name":"transform prep: instant run slice split apk builder","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1519814333783000,"dur":1000},{"pid":1,"tid":57,"id":97,"name":"transform: instant run slice split apk builder","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","transform":"type: 24\nis_incremental: false\n"},"ph":"X","ts":1519814333784000,"dur":526000},{"pid":1,"tid":0,"id":95,"name":"task: transform","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814333779000,"dur":533000},{"pid":1,"tid":0,"id":98,"name":"task: transform","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 65\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1519814334313000,"dur":4000},{"pid":1,"tid":0,"id":99,"name":"task: package application","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 45\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814334318000,"dur":813000},{"pid":1,"tid":0,"id":100,"name":"task: build info writer","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 24\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 70\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814335132000,"dur":1000},{"pid":1,"tid":0,"id":101,"name":"task: unknown task type","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814335134000,"dur":100},{"pid":1,"tid":0,"id":102,"name":"task: unknown task type","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1519814335134000,"dur":100},{"pid":1,"tid":52,"id":103,"name":"base plugin build finished","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.1\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\nmetrics {\n metrics_time_ns: 56415\n apk_size: 6922178\n resources_ap_size: 349830\n}\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1519814335140000,"dur":1000}] \ No newline at end of file
diff --git a/IGetAndroid/build/android-profile/profile-2018-02-28-11-38-55-150.rawproto b/IGetAndroid/build/android-profile/profile-2018-02-28-11-38-55-150.rawproto
new file mode 100644
index 00000000..befd56b4
--- /dev/null
+++ b/IGetAndroid/build/android-profile/profile-2018-02-28-11-38-55-150.rawproto
Binary files differ
diff --git a/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/constraint/group-index.xml b/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/constraint/group-index.xml
new file mode 100644
index 00000000..6d4bc2fd
--- /dev/null
+++ b/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/constraint/group-index.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<com.android.support.constraint>
+ <constraint-layout-solver versions="1.0.2,1.1.0-beta1,1.1.0-beta2,1.1.0-beta3,1.1.0-beta4,1.1.0-beta5"/>
+ <constraint-layout versions="1.0.2,1.1.0-beta1,1.1.0-beta2,1.1.0-beta3,1.1.0-beta4,1.1.0-beta5"/>
+</com.android.support.constraint>
diff --git a/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml b/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml
new file mode 100644
index 00000000..e4efa4a0
--- /dev/null
+++ b/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/group-index.xml
@@ -0,0 +1,40 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<com.android.support>
+ <support-compat versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <leanback-v17 versions="21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <recommendation versions="23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-tv-provider versions="26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-vector-drawable versions="23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <recyclerview-v7 versions="21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <preference-leanback-v17 versions="23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <preference-v14 versions="23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <percent versions="22.2.0,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-media-compat versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <cardview-v7 versions="21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <wearable versions="26.0.0-alpha1"/>
+ <exifinterface versions="25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-annotations versions="19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <appcompat-v7 versions="18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <palette-v7 versions="21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <multidex-instrumentation versions="1.0.0,1.0.1,1.0.2"/>
+ <multidex versions="1.0.0,1.0.1,1.0.2"/>
+ <mediarouter-v7 versions="18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <preference-v7 versions="23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-dynamic-animation versions="25.3.0,25.3.1,25.4.0,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-fragment versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <design versions="22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <transition versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <customtabs versions="23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-core-ui versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <gridlayout-v7 versions="13.0.0,18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <animated-vector-drawable versions="23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-core-utils versions="24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-v13 versions="13.0.0,18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <instantvideo versions="26.0.0-alpha1"/>
+ <support-v4 versions="13.0.0,18.0.0,19.0.0,19.0.1,19.1.0,20.0.0,21.0.0,21.0.2,21.0.3,22.0.0,22.1.0,22.1.1,22.2.0,22.2.1,23.0.0,23.0.1,23.1.0,23.1.1,23.2.0,23.2.1,23.3.0,23.4.0,24.0.0-alpha1,24.0.0-alpha2,24.0.0-beta1,24.0.0,24.1.0,24.1.1,24.2.0,24.2.1,25.0.0,25.0.1,25.1.0,25.1.1,25.2.0,25.3.0,25.3.1,25.4.0,26.0.0-alpha1,26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-emoji versions="26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <wear versions="26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-emoji-appcompat versions="26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-emoji-bundled versions="26.0.0-beta1,26.0.0-beta2,26.0.0,26.0.1,26.0.2,26.1.0,27.0.0,27.0.1,27.0.2"/>
+ <support-content versions="27.0.0,27.0.1,27.0.2"/>
+</com.android.support>
diff --git a/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/test/espresso/group-index.xml b/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/test/espresso/group-index.xml
new file mode 100644
index 00000000..b7814498
--- /dev/null
+++ b/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/test/espresso/group-index.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<com.android.support.test.espresso>
+ <espresso-core versions="2.0,2.1,2.2,2.2.1,2.2.2,2.3-alpha,3.0.0,3.0.1-alpha-1,3.0.1,3.0.2-alpha1"/>
+ <espresso-web versions="2.2,2.2.1,2.2.2,2.3-alpha,3.0.0,3.0.1-alpha-1,3.0.1,3.0.2-alpha1"/>
+ <espresso-intents versions="2.1,2.2,2.2.1,2.2.2,2.3-alpha,3.0.0,3.0.1-alpha-1,3.0.1,3.0.2-alpha1"/>
+ <espresso-contrib versions="2.0,2.1,2.2,2.2.1,2.2.2,2.3-alpha,3.0.0,3.0.1-alpha-1,3.0.1,3.0.2-alpha1"/>
+ <espresso-idling-resource versions="2.0,2.1,2.2,2.2.1,2.2.2,2.3-alpha,3.0.0,3.0.1-alpha-1,3.0.1,3.0.2-alpha1"/>
+ <espresso-accessibility versions="3.0.0,3.0.1-alpha-1,3.0.1,3.0.2-alpha1"/>
+</com.android.support.test.espresso>
diff --git a/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/test/group-index.xml b/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/test/group-index.xml
new file mode 100644
index 00000000..5d0024a0
--- /dev/null
+++ b/IGetAndroid/build/intermediates/lint-cache/maven.google/com/android/support/test/group-index.xml
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<com.android.support.test>
+ <runner versions="0.2,0.3,0.4,0.4.1,0.5,0.6-alpha,1.0.0,1.0.1-alpha-1,1.0.1,1.0.2-alpha1"/>
+ <rules versions="0.2,0.3,0.4,0.4.1,0.5,0.6-alpha,1.0.0,1.0.1-alpha-1,1.0.1,1.0.2-alpha1"/>
+ <exposed-instrumentation-api-publish versions="0.2,0.3,0.4,0.4.1,0.5,0.6-alpha"/>
+ <testing-support-lib versions="0.1"/>
+ <orchestrator versions="1.0.0,1.0.1-alpha-1,1.0.1,1.0.2-alpha1"/>
+ <monitor versions="1.0.2-alpha1"/>
+</com.android.support.test>
diff --git a/IGetAndroid/build/intermediates/lint-cache/maven.google/master-index.xml b/IGetAndroid/build/intermediates/lint-cache/maven.google/master-index.xml
new file mode 100644
index 00000000..3d76f583
--- /dev/null
+++ b/IGetAndroid/build/intermediates/lint-cache/maven.google/master-index.xml
@@ -0,0 +1,39 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<metadata>
+ <com.android.support.constraint/>
+ <com.android.databinding/>
+ <com.android.support/>
+ <com.android.support.test/>
+ <com.android.support.test.janktesthelper/>
+ <com.android.support.test.uiautomator/>
+ <com.android.support.test.espresso/>
+ <android.arch.persistence.room/>
+ <android.arch.lifecycle/>
+ <android.arch.core/>
+ <com.google.android.instantapps/>
+ <com.google.android.instantapps.thirdpartycompat/>
+ <com.android.java.tools.build/>
+ <com.android.tools/>
+ <com.android.tools.layoutlib/>
+ <com.android.tools.ddms/>
+ <com.android.tools.external.com-intellij/>
+ <com.android.tools.build/>
+ <com.android.tools.analytics-library/>
+ <com.android.tools.internal.build.test/>
+ <com.android.tools.lint/>
+ <com.android.tools.external.org-jetbrains/>
+ <com.android.support.test.espresso.idling/>
+ <com.android.support.test.services/>
+ <com.google.firebase/>
+ <com.google.android.gms/>
+ <com.google.gms/>
+ <android.arch.paging/>
+ <com.crashlytics.sdk.android/>
+ <io.fabric.sdk.android/>
+ <android.arch.persistence/>
+ <com.google.android.wearable/>
+ <com.google.android.support/>
+ <com.android.installreferrer/>
+ <com.google.ar/>
+ <androidx.core/>
+</metadata>
diff --git a/iGetAndroid/gradle.properties b/IGetAndroid/gradle.properties
index aac7c9b4..aac7c9b4 100644
--- a/iGetAndroid/gradle.properties
+++ b/IGetAndroid/gradle.properties
diff --git a/iGetAndroid/gradle/wrapper/gradle-wrapper.jar b/IGetAndroid/gradle/wrapper/gradle-wrapper.jar
index 13372aef..13372aef 100644
--- a/iGetAndroid/gradle/wrapper/gradle-wrapper.jar
+++ b/IGetAndroid/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/iGetAndroid/gradle/wrapper/gradle-wrapper.properties b/IGetAndroid/gradle/wrapper/gradle-wrapper.properties
index 0017e2b1..46ebbb8e 100644
--- a/iGetAndroid/gradle/wrapper/gradle-wrapper.properties
+++ b/IGetAndroid/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Fri May 19 11:24:23 CEST 2017
+#Tue Dec 12 13:07:45 CET 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
diff --git a/iGetAndroid/gradlew b/IGetAndroid/gradlew
index 9d82f789..9d82f789 100755
--- a/iGetAndroid/gradlew
+++ b/IGetAndroid/gradlew
diff --git a/iGetAndroid/gradlew.bat b/IGetAndroid/gradlew.bat
index aec99730..aec99730 100644
--- a/iGetAndroid/gradlew.bat
+++ b/IGetAndroid/gradlew.bat
diff --git a/iGetAndroid/settings.gradle b/IGetAndroid/settings.gradle
index e7b4def4..e7b4def4 100644
--- a/iGetAndroid/settings.gradle
+++ b/IGetAndroid/settings.gradle
diff --git a/Makefile b/Makefile
index b8a2a80a..704ea8a7 100644
--- a/Makefile
+++ b/Makefile
@@ -81,14 +81,18 @@ modules_dir=
include config/modules/002-cmake-modules.mk
include config/modules/002-make-modules.mk
include config/modules/100-distillery.mk
+ include config/modules/106-jsoncpp.mk
+ include config/modules/107-libevent.mk
+ include config/modules/108-libxml2.mk
include config/modules/110-longbow.mk
include config/modules/120-libparc.mk
include config/modules/210-libccnx-common.mk
include config/modules/220-libccnx-transport-rta.mk
include config/modules/230-libccnx-portal.mk
- include config/modules/510-Metis.mk
+ include config/modules/510-forwarder.mk
include config/modules/610-libicnet.mk
include config/modules/610-libdash.mk
+ include config/modules/710-http-server.mk
# Load user defined modules
DISTILLERY_USER_MODULES_DIR=${DISTILLERY_USER_CONFIG_DIR}/modules
@@ -110,9 +114,9 @@ init_depend:
./scripts/init.sh ${ABI} ${DISTILLERY_INSTALL_DIR};
init_qt:
./scripts/init_qt.sh
-android_metis:
+android_metisforwarder:
./scripts/compile_metisforwarder.sh
-android_metis_debug:
+android_metisforwarder_debug:
./scripts/compile_metisforwarder.sh DEBUG
android_iget:
./scripts/compile_iget.sh
@@ -122,6 +126,10 @@ android_viper:
./scripts/compile_androidviper.sh
android_viper_debug:
./scripts/compile_androidviper.sh DEBUG
+android_httpserver:
+ ./scripts/compile_httpserver.sh
+android_httpserver_debug:
+ ./scripts/compile_httpserver.sh DEBUG
curl-clean:
@rm -rf external/curl
@@ -131,7 +139,7 @@ curl-clean:
@rm -rf external/libcurl_android/jni/libcurl/lib
@rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libcurl*
@rm -rf ${DISTILLERY_INSTALL_DIR}/include/curl
-
+
openssl-clean:
@rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libssl.*
@rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libcrypto.*
@@ -144,14 +152,12 @@ boost-clean:
@rm -rf ${DISTILLERY_INSTALL_DIR}/include/boost
@rm -rf external/boost_1_63_0
@rm -rf external/boost_1_63_0.tar.gz
-
-
+
event-clean:
@rm -rf external/libevent
@rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libevent*
@rm -rf ${DISTILLERY_INSTALL_DIR}/include/event2
-
-
+
xml2-clean:
@rm -rf external/libxml2
@rm -rf external/libxml2_android/obj
@@ -159,11 +165,17 @@ xml2-clean:
@rm -rf external/libxml2_android/jni/libxml2/*.h
@rm -rf external/libxml2_android/jni/libxml2/include
@rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libxml2*
- @rm -rf ${DISTILLERY_INSTALL_DIR}/include/libxml
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/include/jsoncpp
@rm -rf ${DISTILLERY_INSTALL_DIR}/include/win32config.h
@rm -rf ${DISTILLERY_INSTALL_DIR}/include/wsockcompat.h
-
-dependencies-clean: event-clean openssl-clean boost-clean curl-clean xml2-clean
+
+jsoncpp-clean:
+ @rm -rf external/jsoncpp
+ @rm -rf external/jsoncpp_android/obj
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libjsoncpp.*
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/include/libxml
+
+dependencies-clean: event-clean openssl-clean boost-clean curl-clean xml2-clean jsoncpp-clean
sdk-clean:
@rm -rf sdk/android-sdk_*
@@ -194,18 +206,25 @@ ccnxlibs-clean:
@rm -rf ${DISTILLERY_INSTALL_DIR}/include/ccnx/transport
@rm -rf ${DISTILLERY_INSTALL_DIR}/include/ccnx/api
-sb-forwarder-clean:
+hicn-fwd-clean:
@rm -rf src/sb-forwarder
- @rm -rf ${DISTILLERY_BUILD_DIR}/sb-forwarder
- @rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libmetis*
- @rm -rf ${DISTILLERY_INSTALL_DIR}/include/ccnx/forwarder
+ @rm -rf ${DISTILLERY_BUILD_DIR}/hicn-fwd
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libhicnfwd.*
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/include/hicn-forwarder
@rm -rf ${DISTILLERY_INSTALL_DIR}/include/config.h
-libicnet-clean:
- @rm -rf src/libicnet
- @rm -rf ${DISTILLERY_BUILD_DIR}/libicnet
- @rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libicnet*
- @rm -rf ${DISTILLERY_INSTALL_DIR}/include/ccnx/icnet
+libhicnet-clean:
+ @rm -rf src/libhicnet
+ @rm -rf ${DISTILLERY_BUILD_DIR}/libhicnet
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libhicnet*
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/include/hicnet
+
+libhicn-clean:
+ @rm -rf src/libhicnet
+ @rm -rf ${DISTILLERY_BUILD_DIR}/libhicn
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/lib/libhicn.*
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/include/hicnet.h
+ @rm -rf ${DISTILLERY_INSTALL_DIR}/include/hicnet_*
libdash-clean:
@rm -rf ${DISTILLERY_BUILD_DIR}/libdash
@@ -215,8 +234,8 @@ libdash-clean:
qt-clean:
@rm -rf qt/*
@rm -rf ${DISTILLERY_BUILD_DIR}/qtav
-
-all-clean: dependencies-clean cframework-clean ccnxlibs-clean sb-forwarder-clean libicnet-clean qt-clean
+
+all-clean: dependencies-clean cframework-clean ccnxlibs-clean hicn-fwd-clean libhicnet-clean qt-clean libhicn-clean
update:
./scripts/update.sh
@@ -232,6 +251,7 @@ help:
@echo "boost-clean - Clean boost files and libs"
@echo "openssl-clean - Clean opennssl files and libs"
@echo "event-clean - Clean libevent files and libs"
+ @echo "jsoncpp-clean - Clean libjsoncpp files and libs"
@echo "xml2-clean - Clean libxml2 files and libs"
@echo "dependencies-clean - Clean all dependencies files and libs"
@echo "sdk-clean - Clean sdk files"
@@ -240,15 +260,20 @@ help:
@echo "androidsdk-clean - Clean sdk, ndk and cmake files"
@echo "cframework-clean - Clean cframework (libparc and longbow) files and libs"
@echo "ccnxlibs-clean - Clean ccnxlibs files and libs"
- @echo "sb-forwarder-clean - Clean sb-forwarder (metis) files and libs"
- @echo "libicnet-clean - Clean libicnet files and libs"
+ @echo "hicn-fwd-clean - Clean hicn-fwd files and libs"
+ @echo "libhicnet-clean - Clean libhicnet files and libs"
+ @echo "libhicn-clean - Clean libhicn files and libs"
@echo "libdash-clean - Clean libdash files and libs"
@echo "all-clean - Clean all files and libs"
- @echo "android_metis - Build metis apk for android"
- @echo "android_metis_debug - Build metis apk for android in debug mode"
- @echo "android_iget - Build iGet apk for android apk in debug mode"
- @echo "android_iget_debug - Build iGet apk for android apk"
-
+ @echo "android_metisforwarder - Build MetisForwarder apk for android"
+ @echo "android_metisforwarder_debug - Build MetisForwarder apk for android in debug mode"
+ @echo "android_iget - Build iGet apk for android apk"
+ @echo "android_iget_debug - Build iGet apk for android apk in debug mode"
+ @echo "android_httpserver - Build HttpServer apk for android apk"
+ @echo "android_httpserver_debug - Build HttpServer apk for android apk in debug mode"
+ @echo "android_viper - Build Viper apk for android apk"
+ @echo "android_viper_debug - Build Viper apk for android apk in debug mode"
+
${DISTILLERY_STAMP}: ${REBUILD_DEPENDS}
touch $@
diff --git a/MetisForwarder/app/build.gradle b/MetisForwarder/app/build.gradle
deleted file mode 100644
index 18dd28c4..00000000
--- a/MetisForwarder/app/build.gradle
+++ /dev/null
@@ -1,65 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 25
- buildToolsVersion "25.0.2"
- defaultConfig {
- applicationId "metisforwarder.metis.com.metisforwarder"
- minSdkVersion 24
- targetSdkVersion 25
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- externalNativeBuild {
- cmake {
- cppFlags "-frtti -fexceptions -Wno-error=format-security"
- }
- }
- ndk {
- // Specifies the ABI configurations of your native
- // libraries Gradle should build and package with your APK.
- abiFilters 'armeabi-v7a'
- }
- }
-
- signingConfigs {
- release {
- storeFile file("metisforwarder.keystore")
- storePassword "metisforwarder"
- keyAlias "metisforwarder"
- keyPassword "metisforwarder"
- }
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- signingConfig signingConfigs.release
- applicationVariants.all { variant ->
- variant.outputs.each { output ->
- project.ext { appName = 'metis-forwarder' }
- def newName = output.outputFile.name
- newName = newName.replace("app", "$project.ext.appName-$System.env.ABI")
- output.outputFile = new File(output.outputFile.parent, newName)
- }
- }
- }
- }
- externalNativeBuild {
- cmake {
- path "CMakeLists.txt"
- }
- }
-
-}
-
-dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
- exclude group: 'com.android.support', module: 'support-annotations'
- })
- compile 'com.android.support:appcompat-v7:25.2.0'
- compile 'com.android.support.constraint:constraint-layout:1.0.2'
- testCompile 'junit:junit:4.12'
-}
diff --git a/MetisForwarder/app/metisforwarder.keystore b/MetisForwarder/app/metisforwarder.keystore
deleted file mode 100644
index 06f918cc..00000000
--- a/MetisForwarder/app/metisforwarder.keystore
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/java/com/metis/ccnx/utility/Constants.java b/MetisForwarder/app/src/main/java/com/metis/ccnx/utility/Constants.java
deleted file mode 100644
index f25bc825..00000000
--- a/MetisForwarder/app/src/main/java/com/metis/ccnx/utility/Constants.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.metis.ccnx.utility;
-
-/**
- * Created by angelomantellini on 18/05/2017.
- */
-
-public class Constants {
- public static final String DEFAULT_NEXT_HOP_IP = "10.60.17.200";
- public static final String DEFAULT_NEXT_HOP_PORT = "11111";
- public static final String DEFAULT_PREFIX = "ccnx:/webserver";
- public static final String ENABLED = "Enabled";
- public static final String DISABLED = "Disabled";
- public static final String METIS_FORWARDER_PREFERENCES = "metisForwarderPreferences";
- public static final String DEFAULT_SOURCE_INTERFACE = "eth0";
- public static final String DEFAULT_SOURCE_PORT = "11111";
- public static final String DEFAULT_CONFIGURATION = "add listener tcp local0 127.0.0.1 9695\n" +
- "add listener udp remote0 %%source_ip%% %%source_port%%\n" +
- "add connection udp conn0 %%next_hop_ip%% %%next_hop_port%% %%source_ip%% %%source_port%%\n" +
- "add route conn0 %%prefix%% 1";
-
-
-
- //"add connection udp conn0 %%next_ip%% %%next_port_ip%% %%source_ip%% %%source_port%%\n" +
- //"add route conn0 %%prefix%%";
- public static final String SOURCE_IP = "%%source_ip%%";
- public static final String SOURCE_PORT = "%%source_port%%";
- public static final String NEXT_HOP_IP = "%%next_hop_ip%%";
- public static final String NEXT_HOP_PORT = "%%next_hop_port%%";
- public static final String PREFIX = "%%prefix%%";
- public static final String NETMASK = "%%netmask%%";
- public static final String CONFIGURATION_PATH = "Configuration";
- public static final String CONFIGURATION_FILE_NAME = "metis_forwarder.conf";
- public static final int FOREGROUND_SERVICE = 101;
-}
diff --git a/MetisForwarder/app/src/main/res/mipmap-hdpi/ic_launcher.png b/MetisForwarder/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index cde69bcc..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/MetisForwarder/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 9a078e3e..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-mdpi/ic_launcher.png b/MetisForwarder/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index c133a0cb..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/MetisForwarder/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index efc028a6..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/MetisForwarder/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index bfa42f0e..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/MetisForwarder/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 3af2608a..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/MetisForwarder/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 324e72cd..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/MetisForwarder/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 9bec2e62..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/MetisForwarder/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index aee44e13..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/MetisForwarder/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 34947cd6..00000000
--- a/MetisForwarder/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/MetisForwarder/app/src/main/res/values/strings.xml b/MetisForwarder/app/src/main/res/values/strings.xml
deleted file mode 100644
index 8be706b0..00000000
--- a/MetisForwarder/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<resources>
- <string name="app_name">MetisForwarder</string>
-</resources>
diff --git a/iGetAndroid/.gitignore b/MetisForwarderAndroid/.gitignore
index 39fb081a..39fb081a 100644
--- a/iGetAndroid/.gitignore
+++ b/MetisForwarderAndroid/.gitignore
diff --git a/MetisForwarderAndroid/app/.gitignore b/MetisForwarderAndroid/app/.gitignore
new file mode 100644
index 00000000..796b96d1
--- /dev/null
+++ b/MetisForwarderAndroid/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/MetisForwarder/app/CMakeLists.txt b/MetisForwarderAndroid/app/CMakeLists.txt
index 3c794a8a..dfe35997 100644
--- a/MetisForwarder/app/CMakeLists.txt
+++ b/MetisForwarderAndroid/app/CMakeLists.txt
@@ -5,17 +5,15 @@
cmake_minimum_required(VERSION 3.4.1)
+
+set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
+set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+set(CMAKE_FIND_ROOT_PATH "$ENV{DISTILLERY_ROOT_DIR}/usr_${CMAKE_SYSTEM_PROCESSOR};${CMAKE_FIND_ROOT_PATH}")
+
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
-set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/")
-set_property(GLOBAL PROPERTY USE_FOLDERS ON)
-set(CMAKE_FIND_ROOT_PATH "$ENV{CCNX_HOME};${CMAKE_FIND_ROOT_PATH}")
-include_directories(${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR}/metis-forwarder)
-
-include_directories($ENV{CCNX_DEPENDENCIES}/include)
-set(OPENSSL_ROOT_DIR $ENV{CCNX_DEPENDENCIES})
find_package( LongBow REQUIRED )
include_directories(${LONGBOW_INCLUDE_DIRS})
@@ -44,13 +42,13 @@ find_package( Metis REQUIRED)
include_directories(${Metis_INCLUDE_DIRS})
add_library( # Sets the name of the library.
- metisForwarderWrap
+ forwarderWrap
# Sets the library as a shared library.
SHARED
# Provides a relative path to your source file(s).
- src/main/c/metisForwarderWrap.c )
+ src/main/jni/forwarderWrap.c)
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
@@ -68,9 +66,10 @@ find_library( # Sets the name of the path variable.
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
+
target_link_libraries( # Specifies the target library.
- metisForwarderWrap
+ forwarderWrap
# Links the target library to the log library
# included in the NDK.
- ${log-lib} ${LIBMETIS_LIBRARIES} ${CCNX_PORTAL_LIBRARIES} ${CCNX_TRANSPORT_RTA_LIBRARIES} ${CCNX_COMMON_LIBRARIES} ${LIBPARC_LIBRARIES} ${LONGBOW_LIBRARIES} ${LIBEVENT_LIBRARIES} ${OPENSSL_LIBRARIES}) \ No newline at end of file
+ ${log-lib} ${LIBMETIS_LIBRARIES} ${CCNX_PORTAL_LIBRARIES} ${CCNX_TRANSPORT_RTA_LIBRARIES} ${CCNX_COMMON_LIBRARIES} ${LIBPARC_LIBRARIES} ${LONGBOW_LIBRARIES} ${LIBEVENT_LIBRARIES} ${OPENSSL_LIBRARIES}) \ No newline at end of file
diff --git a/MetisForwarderAndroid/app/build.gradle b/MetisForwarderAndroid/app/build.gradle
new file mode 100644
index 00000000..3d5d0915
--- /dev/null
+++ b/MetisForwarderAndroid/app/build.gradle
@@ -0,0 +1,70 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 26
+ defaultConfig {
+ applicationId "icn.forwarder.com.icnforwarderandroid"
+ minSdkVersion 24
+ targetSdkVersion 26
+ versionCode 8
+
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ externalNativeBuild {
+ cmake {
+ cppFlags "-std=c++11 -frtti -fexceptions"
+ }
+ }
+ ndk {
+ // Specifies the ABI configurations of your native
+ // libraries Gradle should build and package with your APK.
+ abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
+ }
+ }
+
+ signingConfigs {
+ release {
+ storeFile file("metis.keystore")
+ storePassword "metisandroid"
+ keyAlias "metis"
+ keyPassword "metisandroid"
+ }
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.release
+ }
+ }
+
+ android.applicationVariants.all { variant ->
+ variant.outputs.all { output ->
+ def outputFile = output.outputFile
+ if (outputFile != null && outputFile.name.endsWith('.apk')) {
+ project.ext { appName = 'metis' }
+ def fileName = outputFile.name.replace("app",
+ "$project.ext.appName")
+ outputFileName = fileName
+
+ }
+
+ }
+ }
+
+ externalNativeBuild {
+ cmake {
+ path "CMakeLists.txt"
+ }
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:appcompat-v7:26.1.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.0.2'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.1'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
+}
diff --git a/iGetAndroid/app/cmake/Modules/FindCCNX_Common.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Common.cmake
index 2629c160..2629c160 100644
--- a/iGetAndroid/app/cmake/Modules/FindCCNX_Common.cmake
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Common.cmake
diff --git a/iGetAndroid/app/cmake/Modules/FindCCNX_Portal.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Portal.cmake
index 68384bab..68384bab 100644
--- a/iGetAndroid/app/cmake/Modules/FindCCNX_Portal.cmake
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Portal.cmake
diff --git a/iGetAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake
index c43436d1..c43436d1 100644
--- a/iGetAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindCCNX_Transport_Rta.cmake
diff --git a/MetisForwarderAndroid/app/cmake/Modules/FindLibEvent.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindLibEvent.cmake
new file mode 100644
index 00000000..2d1ca4fe
--- /dev/null
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindLibEvent.cmake
@@ -0,0 +1,47 @@
+########################################
+#
+# Find the LibEvent libraries and includes
+# This module sets:
+# LIBEVENT_FOUND: True if LibEvent was found
+# LIBEVENT_LIBRARY: The LibEvent library
+# LIBEVENT_LIBRARIES: The LibEvent library and dependencies
+# LIBEVENT_INCLUDE_DIR: The LibEvent include dir
+#
+# This module will look for the libraries in various locations
+# See the LIBEVENT_SEARCH_PATH_LIST for a full list.
+#
+# The caller can hint at locations using the following variables:
+#
+# LIBEVENT_HOME (passed as -D to cmake)
+# CCNX_DEPENDENCIES (in environment)
+# LIBEVENT_HOME (in environment)
+# CCNX_HOME (in environment)
+#
+
+set(LIBEVENT_SEARCH_PATH_LIST
+ ${LIBEVENT_HOME}
+ $ENV{CCNX_DEPENDENCIES}
+ $ENV{LIBEVENT_HOME}
+ $ENV{CCNX_HOME}
+ /usr/local/ccnx
+ /usr/local/ccn
+ /usr/local
+ /opt
+ /usr
+ )
+
+find_path(LIBEVENT_INCLUDE_DIR event2/event.h
+ HINTS ${LIBEVENT_SEARCH_PATH_LIST}
+ PATH_SUFFIXES include
+ DOC "Find the LibEvent includes" )
+
+find_library(LIBEVENT_LIBRARY NAMES event
+ HINTS ${LIBEVENT_SEARCH_PATH_LIST}
+ PATH_SUFFIXES lib
+ DOC "Find the LibEvent libraries" )
+
+set(LIBEVENT_LIBRARIES ${LIBEVENT_LIBRARY})
+set(LIBEVENT_INCLUDE_DIRS ${LIBEVENT_INCLUDE_DIR})
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(LibEvent DEFAULT_MSG LIBEVENT_LIBRARY LIBEVENT_INCLUDE_DIR)
diff --git a/iGetAndroid/app/cmake/Modules/FindLibicnet.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindLibicnet.cmake
index 4472060b..4472060b 100644
--- a/iGetAndroid/app/cmake/Modules/FindLibicnet.cmake
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindLibicnet.cmake
diff --git a/iGetAndroid/app/cmake/Modules/FindLibparc.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindLibparc.cmake
index 02835161..02835161 100644
--- a/iGetAndroid/app/cmake/Modules/FindLibparc.cmake
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindLibparc.cmake
diff --git a/iGetAndroid/app/cmake/Modules/FindLongBow.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindLongBow.cmake
index e35888eb..e35888eb 100644
--- a/iGetAndroid/app/cmake/Modules/FindLongBow.cmake
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindLongBow.cmake
diff --git a/MetisForwarder/app/cmake/Modules/FindMetis.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindMetis.cmake
index a3b4bff1..a3b4bff1 100644
--- a/MetisForwarder/app/cmake/Modules/FindMetis.cmake
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindMetis.cmake
diff --git a/MetisForwarderAndroid/app/cmake/Modules/FindUncrustify.cmake b/MetisForwarderAndroid/app/cmake/Modules/FindUncrustify.cmake
new file mode 100644
index 00000000..e53f65fe
--- /dev/null
+++ b/MetisForwarderAndroid/app/cmake/Modules/FindUncrustify.cmake
@@ -0,0 +1,8 @@
+# Find uncrustify program
+#
+find_program( UNCRUSTIFY_BIN uncrustify
+ PATHS
+ $ENV{UNCRUSTIFY_HOME}
+ )
+
+message( "-- UNCRUSTIFY found in ${UNCRUSTIFY_BIN}" )
diff --git a/MetisForwarderAndroid/app/cmake/Modules/detectCacheSize.cmake b/MetisForwarderAndroid/app/cmake/Modules/detectCacheSize.cmake
new file mode 100644
index 00000000..469d2627
--- /dev/null
+++ b/MetisForwarderAndroid/app/cmake/Modules/detectCacheSize.cmake
@@ -0,0 +1,21 @@
+# Detect the cache size
+#
+# XXX: TODO: This is a bug when cross compiling. We are detecting the local
+# Cache Line size and not the target cache line size. We should provide some
+# way to define this
+
+set(LEVEL1_DCACHE_LINESIZE 32)
+
+if( APPLE )
+ execute_process(COMMAND sysctl -n hw.cachelinesize
+ OUTPUT_VARIABLE LEVEL1_DCACHE_LINESIZE
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+endif( APPLE )
+
+if( ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" )
+ execute_process(COMMAND getconf LEVEL1_DCACHE_LINESIZE
+ OUTPUT_VARIABLE LEVEL1_DCACHE_LINESIZE
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+endif()
+
+message("-- Cache line size: ${LEVEL1_DCACHE_LINESIZE}")
diff --git a/MetisForwarderAndroid/app/cmake/Modules/version.cmake b/MetisForwarderAndroid/app/cmake/Modules/version.cmake
new file mode 100644
index 00000000..74831674
--- /dev/null
+++ b/MetisForwarderAndroid/app/cmake/Modules/version.cmake
@@ -0,0 +1,15 @@
+#
+# Get a version to pass on the command line
+#
+execute_process(COMMAND ${PROJECT_SOURCE_DIR}/cmake/get_version.sh ${PROJECT_SOURCE_DIR}
+ OUTPUT_VARIABLE RELEASE_VERSION
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+execute_process(COMMAND date -u +%Y-%m-%dT%H:%M:%SZ
+ OUTPUT_VARIABLE ISO_DATE
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+MESSAGE( STATUS "Configuring version ${RELEASE_VERSION}" )
+
+add_definitions("-DRELEASE_VERSION=\"${RELEASE_VERSION}\"")
+
diff --git a/MetisForwarderAndroid/app/cmake/get_version.sh b/MetisForwarderAndroid/app/cmake/get_version.sh
new file mode 100755
index 00000000..34c6ddb2
--- /dev/null
+++ b/MetisForwarderAndroid/app/cmake/get_version.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+DATE_VERSION=`date "+%Y%m%d"`
+
+if [ ! -d $1 ]; then
+ echo 0.$DATE_VERSION
+ exit
+fi
+
+if [ -f $1/BASE_VERSION ]; then
+ BASE_VERSION=`cat $1/BASE_VERSION`.
+fi
+
+GIT=`which git`
+
+if test -x $GIT -a -f $1/.git/config; then
+ GIT_VERSION=.`git -C $1 rev-parse HEAD | cut -c 1-8`
+fi
+
+echo $BASE_VERSION$DATE_VERSION$GIT_VERSION
diff --git a/MetisForwarderAndroid/app/metis.keystore b/MetisForwarderAndroid/app/metis.keystore
new file mode 100644
index 00000000..3cfa9030
--- /dev/null
+++ b/MetisForwarderAndroid/app/metis.keystore
Binary files differ
diff --git a/MetisForwarderAndroid/app/proguard-rules.pro b/MetisForwarderAndroid/app/proguard-rules.pro
new file mode 100644
index 00000000..f1b42451
--- /dev/null
+++ b/MetisForwarderAndroid/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/iGetAndroid/app/src/androidTest/java/com/iget/ccnx/igetandroid/ExampleInstrumentedTest.java b/MetisForwarderAndroid/app/src/androidTest/java/icn/forwarder/com/forwarderandroid/ExampleInstrumentedTest.java
index 9b4f15d4..6304d1b2 100644
--- a/iGetAndroid/app/src/androidTest/java/com/iget/ccnx/igetandroid/ExampleInstrumentedTest.java
+++ b/MetisForwarderAndroid/app/src/androidTest/java/icn/forwarder/com/forwarderandroid/ExampleInstrumentedTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -13,7 +13,7 @@
* limitations under the License.
*/
-package com.iget.ccnx.igetandroid;
+package icn.forwarder.com.forwarderandroid;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
@@ -24,6 +24,11 @@ import org.junit.runner.RunWith;
import static org.junit.Assert.*;
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
@@ -31,6 +36,6 @@ public class ExampleInstrumentedTest {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getTargetContext();
- assertEquals("com.iget.ccnx.igetandroid", appContext.getPackageName());
+ assertEquals("icn.forwarder.com.forwarderandroid", appContext.getPackageName());
}
}
diff --git a/MetisForwarderAndroid/app/src/main/AndroidManifest.xml b/MetisForwarderAndroid/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..eec39eb7
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="icn.forwarder.com.forwarderandroid">
+
+ <application
+ android:allowBackup="true"
+ android:configChanges="orientation|screenSize|keyboard"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/AppTheme">
+ <activity
+ android:name=".ForwarderAndroidActivity"
+ android:screenOrientation="portrait">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <service android:name="icn.forwarder.com.service.ForwarderAndroidService" />
+ </application>
+
+ <uses-permission android:name="android.permission.INTERNET" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission
+ android:name="android.permission.READ_EXTERNAL_STORAGE"
+ android:maxSdkVersion="21" />
+
+</manifest> \ No newline at end of file
diff --git a/MetisForwarderAndroid/app/src/main/ic_launcher-web.png b/MetisForwarderAndroid/app/src/main/ic_launcher-web.png
new file mode 100644
index 00000000..1c610caf
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/ic_launcher-web.png
Binary files differ
diff --git a/MetisForwarder/app/src/main/java/com/metis/ccnx/metisforwarder/MetisForwarderActivity.java b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/forwarderandroid/ForwarderAndroidActivity.java
index 82e833bc..d64e37cc 100644
--- a/MetisForwarder/app/src/main/java/com/metis/ccnx/metisforwarder/MetisForwarderActivity.java
+++ b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/forwarderandroid/ForwarderAndroidActivity.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -12,10 +12,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.metis.ccnx.metisforwarder;
+
+package icn.forwarder.com.forwarderandroid;
import android.Manifest;
-import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@@ -24,19 +24,16 @@ import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
-import android.view.View;
-import android.widget.AdapterView;
-import android.widget.EditText;
-import android.widget.TextView;
import android.util.Log;
-import android.widget.Switch;
-import android.widget.CompoundButton;
-import android.widget.Spinner;
+import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
+import android.widget.CompoundButton;
+import android.widget.EditText;
+import android.widget.Spinner;
+import android.widget.Switch;
import java.net.Inet4Address;
-import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
@@ -45,33 +42,30 @@ import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
-import metisforwarder.metis.com.metisforwarder.R;
-
-import com.metis.ccnx.service.MetisForwarderService;
-import com.metis.ccnx.supportlibrary.MetisForwarder;
-import com.metis.ccnx.utility.Constants;
-import com.metis.ccnx.utility.ResourcesEnumerator;
+import icn.forwarder.com.supportlibrary.Forwarder;
+import icn.forwarder.com.utility.Constants;
+import icn.forwarder.com.utility.ResourcesEnumerator;
+public class ForwarderAndroidActivity extends AppCompatActivity {
-public class MetisForwarderActivity extends AppCompatActivity {
private Spinner sourceIpSpinner;
private EditText sourcePortEditText;
private EditText nextHopIpEditText;
private EditText nextHopPortEditText;
private EditText configurationEditText;
private EditText prefixEditText;
- private Switch metisForwarderSwitch;
+ private Switch forwarderSwitch;
private Button sourceIpRefreshButton;
private List<String> sourceIpArrayList = new ArrayList<String>();
private List<String> sourceNetworkInterfaceArrayList = new ArrayList<>();
private HashMap<String, String> addressesMap = new HashMap<String, String>();
private SharedPreferences sharedPreferences;
- private View _selectedItemView;
+
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_metis_forwarder);
+ setContentView(R.layout.activity_forwarder_android);
checkEnabledPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
checkEnabledPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
init();
@@ -114,7 +108,7 @@ public class MetisForwarderActivity extends AppCompatActivity {
private void init() {
sourceIpSpinner = (Spinner) findViewById(R.id.sourceIpSpinner);
- sharedPreferences = getSharedPreferences(Constants.METIS_FORWARDER_PREFERENCES, MODE_PRIVATE);
+ sharedPreferences = getSharedPreferences(Constants.FORWARDER_PREFERENCES, MODE_PRIVATE);
addressesMap = getLocalIpAddress();
for (String networkInterface : addressesMap.keySet()) {
sourceIpArrayList.add(networkInterface + ": " + addressesMap.get(networkInterface));
@@ -166,20 +160,19 @@ public class MetisForwarderActivity extends AppCompatActivity {
nextHopPortEditText.setText(sharedPreferences.getString(ResourcesEnumerator.NEXT_HOP_PORT.key(), Constants.DEFAULT_NEXT_HOP_PORT));
configurationEditText = (EditText) findViewById(R.id.configurationEditText);
- //configurationEditText.setText(sharedPreferences.getString(ResourcesEnumerator.CONFIGURATION.key(), Constants.DEFAULT_CONFIGURATION));
- configurationEditText.setText(Constants.DEFAULT_CONFIGURATION);
+ configurationEditText.setText(sharedPreferences.getString(ResourcesEnumerator.CONFIGURATION.key(), Constants.DEFAULT_CONFIGURATION));
prefixEditText = (EditText) findViewById(R.id.prefixEditText);
prefixEditText.setText(sharedPreferences.getString(ResourcesEnumerator.PREFIX.key(), Constants.DEFAULT_PREFIX));
- metisForwarderSwitch = (Switch) findViewById(R.id.metisForwarderSwitch);
- metisForwarderSwitch.setText(Constants.DISABLED);
- metisForwarderSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ forwarderSwitch = (Switch) findViewById(R.id.forwarderSwitch);
+
+ forwarderSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Log.v("Switch State=", "" + isChecked);
if (isChecked) {
- metisForwarderSwitch.setText(Constants.ENABLED);
- SharedPreferences.Editor sharedPreferencesEditor = getSharedPreferences(Constants.METIS_FORWARDER_PREFERENCES, MODE_PRIVATE).edit();
+ forwarderSwitch.setText(Constants.ENABLED);
+ SharedPreferences.Editor sharedPreferencesEditor = getSharedPreferences(Constants.FORWARDER_PREFERENCES, MODE_PRIVATE).edit();
sharedPreferencesEditor.putString(ResourcesEnumerator.SOURCE_NETWORK_INTERFACE.key(), sourceNetworkInterfaceArrayList.get(sourceIpSpinner.getSelectedItemPosition()));
sharedPreferencesEditor.putString(ResourcesEnumerator.SOURCE_IP.key(), addressesMap.get(sourceNetworkInterfaceArrayList.get(sourceIpSpinner.getSelectedItemPosition())));
sharedPreferencesEditor.putString(ResourcesEnumerator.SOURCE_PORT.key(), sourcePortEditText.getText().toString());
@@ -188,6 +181,15 @@ public class MetisForwarderActivity extends AppCompatActivity {
sharedPreferencesEditor.putString(ResourcesEnumerator.CONFIGURATION.key(), configurationEditText.getText().toString());
sharedPreferencesEditor.putString(ResourcesEnumerator.PREFIX.key(), prefixEditText.getText().toString());
sharedPreferencesEditor.commit();
+
+
+ String configuration = configurationEditText.getText().toString();
+ configuration = configuration.replace(Constants.SOURCE_IP, addressesMap.get(sourceNetworkInterfaceArrayList.get(sourceIpSpinner.getSelectedItemPosition())));
+ configuration = configuration.replace(Constants.SOURCE_PORT, sourcePortEditText.getText().toString());
+ configuration = configuration.replace(Constants.NEXT_HOP_IP, nextHopIpEditText.getText().toString());
+ configuration = configuration.replace(Constants.NEXT_HOP_PORT, nextHopPortEditText.getText().toString());
+ configuration = configuration.replace(Constants.PREFIX, prefixEditText.getText().toString());
+ configurationEditText.setText(configuration);
sourceIpSpinner.setEnabled(false);
sourceIpRefreshButton.setEnabled(false);
sourcePortEditText.setEnabled(false);
@@ -195,10 +197,11 @@ public class MetisForwarderActivity extends AppCompatActivity {
nextHopPortEditText.setEnabled(false);
prefixEditText.setEnabled(false);
configurationEditText.setEnabled(false);
- startMetisForwarder();
+ startForwarder();
} else {
- metisForwarderSwitch.setText(Constants.DISABLED);
+ configurationEditText.setText(sharedPreferences.getString(ResourcesEnumerator.CONFIGURATION.key(), Constants.DEFAULT_CONFIGURATION));
+ forwarderSwitch.setText(Constants.DISABLED);
sourceIpSpinner.setEnabled(true);
sourceIpRefreshButton.setEnabled(true);
sourcePortEditText.setEnabled(true);
@@ -206,23 +209,28 @@ public class MetisForwarderActivity extends AppCompatActivity {
nextHopPortEditText.setEnabled(true);
prefixEditText.setEnabled(true);
configurationEditText.setEnabled(true);
- stopMetisForwarder();
+ stopForwarder();
}
}
});
-
+ if (Forwarder.getInstance().isRunning()) {
+ forwarderSwitch.setText(Constants.ENABLED);
+ forwarderSwitch.setChecked(true);
+ } else {
+ forwarderSwitch.setText(Constants.DISABLED);
+ }
}
- private void startMetisForwarder() {
- Intent intent = new Intent(this, MetisForwarderService.class);
+ private void startForwarder() {
+ //Forwarder forwarder = Forwarder.getInstance();
+ Intent intent = new Intent(this, icn.forwarder.com.service.ForwarderAndroidService.class);
startService(intent);
}
- private void stopMetisForwarder() {
- Intent intent = new Intent(this, MetisForwarderService.class);
-
+ private void stopForwarder() {
+ Intent intent = new Intent(this, icn.forwarder.com.service.ForwarderAndroidService.class);
stopService(intent);
}
diff --git a/MetisForwarder/app/src/main/java/com/metis/ccnx/service/MetisForwarderService.java b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/service/ForwarderAndroidService.java
index 25d7c68a..95668a08 100644
--- a/MetisForwarder/app/src/main/java/com/metis/ccnx/service/MetisForwarderService.java
+++ b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/service/ForwarderAndroidService.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -12,19 +12,23 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.metis.ccnx.service;
+
+package icn.forwarder.com.service;
import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
import android.app.Service;
+import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
+import android.os.Build;
import android.os.IBinder;
import android.util.Log;
+import android.widget.EditText;
-import com.metis.ccnx.supportlibrary.MetisForwarder;
-import com.metis.ccnx.utility.Constants;
-import com.metis.ccnx.utility.ResourcesEnumerator;
import java.io.BufferedWriter;
import java.io.File;
@@ -33,12 +37,18 @@ import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
-public class MetisForwarderService extends Service {
- private final static String TAG = "MetisForwarderService";
+import icn.forwarder.com.forwarderandroid.ForwarderAndroidActivity;
+import icn.forwarder.com.supportlibrary.Forwarder;
+import icn.forwarder.com.utility.Constants;
+import icn.forwarder.com.utility.ResourcesEnumerator;
+
+public class ForwarderAndroidService extends Service {
+ private final static String TAG = "ForwarderService";
private static Thread sForwarderThread = null;
+ private EditText configurationEditText;
- public MetisForwarderService() {
+ public ForwarderAndroidService() {
}
private String path;
@@ -52,10 +62,10 @@ public class MetisForwarderService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
- MetisForwarder metisForwarder = MetisForwarder.getInstance();
- if (!metisForwarder.isRunning()) {
- Log.d(TAG, "Starting Metis Forwarder");
- SharedPreferences sharedPreferences = getSharedPreferences(Constants.METIS_FORWARDER_PREFERENCES, MODE_PRIVATE);
+ Forwarder forwarder = Forwarder.getInstance();
+ if (!forwarder.isRunning()) {
+ Log.d(TAG, "Starting Forwarder");
+ SharedPreferences sharedPreferences = getSharedPreferences(Constants.FORWARDER_PREFERENCES, MODE_PRIVATE);
String configuration = sharedPreferences.getString(ResourcesEnumerator.CONFIGURATION.key(), Constants.DEFAULT_CONFIGURATION);
String sourceIp = sharedPreferences.getString(ResourcesEnumerator.SOURCE_IP.key(), null);
String sourcePort = sharedPreferences.getString(ResourcesEnumerator.SOURCE_PORT.key(), null);
@@ -76,6 +86,7 @@ public class MetisForwarderService extends Service {
}
writeToFile(configuration, configurationDir + File.separator + Constants.CONFIGURATION_FILE_NAME);
+ Log.d(TAG, configurationDir + File.separator + Constants.CONFIGURATION_FILE_NAME);
startForwarder(intent, configurationDir + File.separator + Constants.CONFIGURATION_FILE_NAME);
} catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, "Error Package name not found ", e);
@@ -83,7 +94,7 @@ public class MetisForwarderService extends Service {
} else {
- Log.d(TAG, "Metis Forwarder already running.");
+ Log.d(TAG, "Forwarder already running.");
}
return Service.START_STICKY;
}
@@ -91,10 +102,10 @@ public class MetisForwarderService extends Service {
@Override
public void onDestroy() {
- MetisForwarder metisForwarder = MetisForwarder.getInstance();
- Log.d(TAG, "Destroying Metis Forwarder");
- if (metisForwarder.isRunning()) {
- metisForwarder.stop();
+ Forwarder forwarder = Forwarder.getInstance();
+ Log.d(TAG, "Destroying Forwarder");
+ if (forwarder.isRunning()) {
+ forwarder.stop();
stopForeground(true);
}
super.onDestroy();
@@ -105,8 +116,8 @@ public class MetisForwarderService extends Service {
//private String path;
@Override
public void run() {
- MetisForwarder metisForwarder = MetisForwarder.getInstance();
- metisForwarder.start(path);
+ Forwarder forwarder = Forwarder.getInstance();
+ forwarder.start(path);
}
@@ -126,20 +137,41 @@ public class MetisForwarderService extends Service {
private void startForwarder(Intent intent, String path) {
+ String NOTIFICATION_CHANNEL_ID = "12345";
+ Notification.Builder notificationBuilder = null;
+ if (Build.VERSION.SDK_INT >= 26) {
+ notificationBuilder =
+ new Notification.Builder(this, NOTIFICATION_CHANNEL_ID);
+ } else {
+ notificationBuilder = new Notification.Builder(this);
+ }
+
+ Intent notificationIntent = new Intent(this, ForwarderAndroidActivity.class);
+ PendingIntent activity = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ notificationBuilder.setContentTitle("ForwarderAndroid").setContentText("ForwarderAndroid").setOngoing(true).setContentIntent(activity);
+ Notification notification = notificationBuilder.build();
+
+ if (Build.VERSION.SDK_INT >= 26) {
+ NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "ForwarderAndroid", NotificationManager.IMPORTANCE_DEFAULT);
+ channel.setDescription("ForwarderAndroid");
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ notificationManager.createNotificationChannel(channel);
- int NOTIFICATION_ID = 12345;
- startForeground(Constants.FOREGROUND_SERVICE, new Notification.Builder(this).build());
- MetisForwarder metisForwarder = MetisForwarder.getInstance();
- if (!metisForwarder.isRunning()) {
- this.path = path;
- sForwarderThread = new Thread(mForwarderRunner, "MetisForwarderRunner");
- sForwarderThread.start();
}
+ startForeground(Constants.FOREGROUND_SERVICE, notification);
- }
+ Forwarder forwarder = Forwarder.getInstance();
+ if (!forwarder.isRunning()) {
+ this.path = path;
+ sForwarderThread = new Thread(mForwarderRunner, "ForwarderRunner");
+ sForwarderThread.start();
+ }
+ Log.e(TAG, "ForwarderAndroid starterd");
+ }
}
diff --git a/MetisForwarder/app/src/main/java/com/metis/ccnx/supportlibrary/MetisForwarder.java b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/supportlibrary/Forwarder.java
index 45932cfa..117aa6de 100644
--- a/MetisForwarder/app/src/main/java/com/metis/ccnx/supportlibrary/MetisForwarder.java
+++ b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/supportlibrary/Forwarder.java
@@ -1,6 +1,5 @@
-
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -14,29 +13,29 @@
* limitations under the License.
*/
+package icn.forwarder.com.supportlibrary;
-package com.metis.ccnx.supportlibrary;
-
-public class MetisForwarder {
+public class Forwarder {
- private static MetisForwarder sInstance = null;
+ private static Forwarder sInstance = null;
static {
- System.loadLibrary("metisForwarderWrap");
+ System.loadLibrary("forwarderWrap");
}
- public static MetisForwarder getInstance() {
+ public static Forwarder getInstance() {
if (sInstance == null) {
- sInstance = new MetisForwarder();
+ sInstance = new Forwarder();
}
return sInstance;
}
- private MetisForwarder() {
+ private Forwarder() {
}
public native boolean isRunning();
public native void start(String path);
public native void stop();
+
}
diff --git a/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/utility/Constants.java b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/utility/Constants.java
new file mode 100644
index 00000000..abcfb70e
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/utility/Constants.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2018 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package icn.forwarder.com.utility;
+
+public class Constants {
+ public static final String DEFAULT_NEXT_HOP_IP = "137.194.54.121";
+ public static final String DEFAULT_NEXT_HOP_PORT = "8080";
+ public static final String DEFAULT_PREFIX = "ccnx:/systemx-cicn.enst.fr";
+ public static final String ENABLED = "Enabled";
+ public static final String DISABLED = "Disabled";
+ public static final String FORWARDER_PREFERENCES = "forwarderPreferences";
+ public static final String DEFAULT_SOURCE_INTERFACE = "eth0";
+ public static final String DEFAULT_SOURCE_PORT = "1111";
+ public static final String DEFAULT_CONFIGURATION = "add listener tcp local0 127.0.0.1 9695\n" +
+ "add listener udp remote0 %%source_ip%% %%source_port%%\n" +
+ "add connection udp conn0 %%next_hop_ip%% %%next_hop_port%% %%source_ip%% %%source_port%%\n" +
+ "add route conn0 %%prefix%% 1";
+ public static final String SOURCE_IP = "%%source_ip%%";
+ public static final String SOURCE_PORT = "%%source_port%%";
+ public static final String NEXT_HOP_IP = "%%next_hop_ip%%";
+ public static final String NEXT_HOP_PORT = "%%next_hop_port%%";
+ public static final String PREFIX = "%%prefix%%";
+ public static final String CONFIGURATION_PATH = "Configuration";
+ public static final String CONFIGURATION_FILE_NAME = "forwarder.conf";
+ public static final int FOREGROUND_SERVICE = 101;
+}
diff --git a/MetisForwarder/app/src/main/java/com/metis/ccnx/utility/ResourcesEnumerator.java b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/utility/ResourcesEnumerator.java
index 85284f86..3d2409ea 100644
--- a/MetisForwarder/app/src/main/java/com/metis/ccnx/utility/ResourcesEnumerator.java
+++ b/MetisForwarderAndroid/app/src/main/java/icn/forwarder/com/utility/ResourcesEnumerator.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -12,7 +12,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.metis.ccnx.utility;
+
+package icn.forwarder.com.utility;
public enum ResourcesEnumerator {
SOURCE_IP("sourceIp"),
diff --git a/MetisForwarder/app/src/main/c/metisForwarderWrap.c b/MetisForwarderAndroid/app/src/main/jni/forwarderWrap.c
index d0603d5c..ab4de15e 100644
--- a/MetisForwarder/app/src/main/c/metisForwarderWrap.c
+++ b/MetisForwarderAndroid/app/src/main/jni/forwarderWrap.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -20,17 +20,21 @@
#include <stdbool.h>
#include <ccnx/forwarder/metis/core/metis_Forwarder.h>
-
static bool _isRunning = false;
MetisForwarder *metis = NULL;
-JNIEXPORT void JNICALL
-Java_com_metis_ccnx_supportlibrary_MetisForwarder_start(JNIEnv *env, jobject instance,
- jstring path_) {
+JNIEXPORT jboolean JNICALL
+Java_icn_forwarder_com_supportlibrary_Forwarder_isRunning(JNIEnv *env, jobject instance) {
+ return _isRunning;
+}
+
+JNIEXPORT void JNICALL
+Java_icn_forwarder_com_supportlibrary_Forwarder_start(JNIEnv *env, jobject instance,
+ jstring path_) {
if (!_isRunning) {
+ __android_log_print(ANDROID_LOG_DEBUG, "HicnFwdWrap", "starting HicnFwd...");
metis = metisForwarder_Create(NULL);
-
MetisConfiguration *configuration = metisForwarder_GetConfiguration(metis);
metisConfiguration_SetObjectStoreSize(configuration, 0);
metisConfiguration_StartCLI(configuration, 2001);
@@ -44,27 +48,15 @@ Java_com_metis_ccnx_supportlibrary_MetisForwarder_start(JNIEnv *env, jobject ins
_isRunning = true;
metisDispatcher_Run(dispatcher);
}
-
-
}
JNIEXPORT void JNICALL
-Java_com_metis_ccnx_supportlibrary_MetisForwarder_stop(JNIEnv *env, jobject instance) {
-
+Java_icn_forwarder_com_supportlibrary_Forwarder_stop(JNIEnv *env, jobject instance) {
if (_isRunning) {
__android_log_print(ANDROID_LOG_DEBUG, "MetisForwarderWrap", "stopping Metis...");
metisDispatcher_Stop(metisForwarder_GetDispatcher(metis));
-
sleep(2);
metisForwarder_Destroy(&metis);
_isRunning = false;
}
-
-}
-
-JNIEXPORT jboolean JNICALL
-Java_com_metis_ccnx_supportlibrary_MetisForwarder_isRunning(JNIEnv *env, jobject instance) {
-
- return _isRunning;
-
}
diff --git a/MetisForwarderAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/MetisForwarderAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 00000000..c7bd21db
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportHeight="108"
+ android:viewportWidth="108">
+ <path
+ android:fillType="evenOdd"
+ android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
+ android:strokeColor="#00000000"
+ android:strokeWidth="1">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="78.5885"
+ android:endY="90.9159"
+ android:startX="48.7653"
+ android:startY="61.0927"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
+ android:strokeColor="#00000000"
+ android:strokeWidth="1" />
+</vector>
diff --git a/MetisForwarder/app/src/main/res/drawable/border.xml b/MetisForwarderAndroid/app/src/main/res/drawable/border.xml
index c1f839b3..c1f839b3 100644
--- a/MetisForwarder/app/src/main/res/drawable/border.xml
+++ b/MetisForwarderAndroid/app/src/main/res/drawable/border.xml
diff --git a/MetisForwarderAndroid/app/src/main/res/drawable/ic_cached_black_24px.xml b/MetisForwarderAndroid/app/src/main/res/drawable/ic_cached_black_24px.xml
new file mode 100644
index 00000000..5b228f76
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/drawable/ic_cached_black_24px.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path
+ android:pathData="M19,8l-4,4h3c0,3.31 -2.69,6 -6,6 -1.01,0 -1.97,-0.25 -2.8,-0.7l-1.46,1.46C8.97,19.54 10.43,20 12,20c4.42,0 8,-3.58 8,-8h3l-4,-4zM6,12c0,-3.31 2.69,-6 6,-6 1.01,0 1.97,0.25 2.8,0.7l1.46,-1.46C15.03,4.46 13.57,4 12,4c-4.42,0 -8,3.58 -8,8H1l4,4 4,-4H6z"
+ android:fillColor="#000000"/>
+</vector>
diff --git a/MetisForwarderAndroid/app/src/main/res/drawable/ic_launcher_background.xml b/MetisForwarderAndroid/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 00000000..d5fccc53
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportHeight="108"
+ android:viewportWidth="108">
+ <path
+ android:fillColor="#26A69A"
+ android:pathData="M0,0h108v108h-108z" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M9,0L9,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,0L19,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,0L29,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,0L39,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,0L49,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,0L59,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,0L69,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,0L79,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M89,0L89,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M99,0L99,108"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,9L108,9"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,19L108,19"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,29L108,29"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,39L108,39"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,49L108,49"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,59L108,59"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,69L108,69"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,79L108,79"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,89L108,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,99L108,99"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,29L89,29"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,39L89,39"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,49L89,49"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,59L89,59"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,69L89,69"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,79L89,79"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,19L29,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,19L39,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,19L49,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,19L59,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,19L69,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,19L79,89"
+ android:strokeColor="#33FFFFFF"
+ android:strokeWidth="0.8" />
+</vector>
diff --git a/MetisForwarderAndroid/app/src/main/res/ic_cached_black_24px.svg b/MetisForwarderAndroid/app/src/main/res/ic_cached_black_24px.svg
new file mode 100644
index 00000000..b08e815e
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/ic_cached_black_24px.svg
@@ -0,0 +1,4 @@
+<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
+ <path d="M19 8l-4 4h3c0 3.31-2.69 6-6 6-1.01 0-1.97-.25-2.8-.7l-1.46 1.46C8.97 19.54 10.43 20 12 20c4.42 0 8-3.58 8-8h3l-4-4zM6 12c0-3.31 2.69-6 6-6 1.01 0 1.97.25 2.8.7l1.46-1.46C15.03 4.46 13.57 4 12 4c-4.42 0-8 3.58-8 8H1l4 4 4-4H6z"/>
+ <path d="M0 0h24v24H0z" fill="none"/>
+</svg> \ No newline at end of file
diff --git a/MetisForwarderAndroid/app/src/main/res/layout/activity_forwarder_android.xml b/MetisForwarderAndroid/app/src/main/res/layout/activity_forwarder_android.xml
new file mode 100644
index 00000000..650a9571
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/layout/activity_forwarder_android.xml
@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context="icn.forwarder.com.forwarderandroid.ForwarderAndroidActivity">
+
+ <ScrollView
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent">
+
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintHorizontal_bias="0.099"
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintVertical_bias="0.029999971">
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/sourceTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Source"
+ android:textSize="30sp"
+ android:textStyle="bold" />
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.25"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/sourceIpTextView"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="20"
+ android:text="IP"
+ android:textAlignment="textEnd"
+ android:textSize="24sp"
+ android:textStyle="bold" />
+ <LinearLayout
+ android:layout_width="0dip"
+ android:layout_weight="80"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <Spinner
+ android:id="@+id/sourceIpSpinner"
+ android:layout_width="0dip"
+ android:layout_weight="20"
+ android:layout_height="match_parent"
+ />
+
+ <Button
+ android:id="@+id/sourceIpRefreshButton"
+ android:layout_width="50sp"
+ android:layout_height="50sp"
+ android:drawableLeft="@drawable/ic_cached_black_24px" />
+ </LinearLayout>
+
+
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.25"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/sourcePortTextView"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="20"
+ android:text="Port"
+ android:textAlignment="textEnd"
+ android:textSize="24sp"
+ android:textStyle="bold" />
+
+ <EditText
+ android:id="@+id/sourcePortEditText"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="80"
+ android:ems="10"
+ android:inputType="number"
+ android:text="88888"
+ android:textSize="24sp" />
+
+ </LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/nextHopTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Next Hop"
+ android:textSize="30sp"
+ android:textStyle="bold" />
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.25"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/destinationIpTextView"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="20"
+ android:text="IP"
+ android:textAlignment="textEnd"
+ android:textSize="24sp"
+ android:textStyle="bold" />
+
+ <EditText
+ android:id="@+id/nextHopIpEditText"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="80"
+ android:ems="10"
+ android:inputType="textUri"
+ android:text="8888:8888:8888:8888:8888:8888:8888:8888"
+ android:textSize="24sp" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.25"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/nextHopPortTextView"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="20"
+ android:text="Port"
+ android:textAlignment="textEnd"
+ android:textSize="24sp"
+ android:textStyle="bold" />
+
+ <EditText
+ android:id="@+id/nextHopPortEditText"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="80"
+ android:ems="10"
+ android:inputType="number"
+ android:text="88888"
+ android:textSize="24sp" />
+
+
+ </LinearLayout>
+
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/routeTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Route"
+ android:textSize="30sp"
+ android:textStyle="bold" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="0.25"
+ android:orientation="horizontal">
+
+ <TextView
+ android:id="@+id/prefixTextView"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="20"
+ android:text="Prefix"
+ android:textAlignment="textEnd"
+ android:textSize="24sp"
+ android:textStyle="bold" />
+
+ <EditText
+ android:id="@+id/prefixEditText"
+ android:layout_width="0dip"
+ android:layout_height="wrap_content"
+ android:layout_weight="80"
+ android:ems="10"
+ android:inputType="textUri"
+ android:text="8888:8888:8888:8888:8888:8888:8888:8888"
+ android:textSize="24sp" />
+ </LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/configurationTextView"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Configuration"
+ android:textSize="30sp"
+ android:textStyle="bold" />
+
+ <ScrollView
+ android:layout_width="fill_parent"
+ android:layout_height="200dp"
+ android:background="@drawable/border">
+
+ <EditText
+ android:id="@+id/configurationEditText"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:background="@android:color/transparent"
+ android:ems="10"
+ android:inputType="textMultiLine"
+ android:text="# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1# Local listeners add listener tcp local0 127.0.0.1 9695 add listener udp local1 127.0.0.1 9695 # Remote face add listener udp remote0 %%source_ip%% %%source_port%% add connection udp conn0 %%destination_ip%% %%destination_port%% %%source_ip%% %%source_port%% # Route add route conn0 ccnx:/webserver 1"
+ app:layout_constraintVertical_bias="0.33999997" />
+ </ScrollView>
+
+ </LinearLayout>
+
+ <Switch
+ android:id="@+id/forwarderSwitch"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:text="Disabled"
+ android:textSize="30sp" />
+
+ </LinearLayout>
+ </ScrollView>
+
+</android.support.constraint.ConstraintLayout>
diff --git a/MetisForwarder/app/src/main/res/layout/spinner_layout.xml b/MetisForwarderAndroid/app/src/main/res/layout/spinner_layout.xml
index c73af27b..c73af27b 100644
--- a/MetisForwarder/app/src/main/res/layout/spinner_layout.xml
+++ b/MetisForwarderAndroid/app/src/main/res/layout/spinner_layout.xml
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/MetisForwarderAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 00000000..036d09bc
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@color/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon> \ No newline at end of file
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/MetisForwarderAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 00000000..036d09bc
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@color/ic_launcher_background"/>
+ <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
+</adaptive-icon> \ No newline at end of file
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png b/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..6ab8b2c6
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..2d97d2fb
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 00000000..211f018d
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png b/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..988a9675
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..85c34503
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 00000000..4dfe5d85
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..10c00a27
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..32a5ec25
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..7934e70a
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..631943ce
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..67886e23
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..c409ed28
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..6c8a206f
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 00000000..aa3c8401
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 00000000..69c50e4f
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Binary files differ
diff --git a/MetisForwarderAndroid/app/src/main/res/values/colors.xml b/MetisForwarderAndroid/app/src/main/res/values/colors.xml
new file mode 100644
index 00000000..3ab3e9cb
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="colorPrimary">#3F51B5</color>
+ <color name="colorPrimaryDark">#303F9F</color>
+ <color name="colorAccent">#FF4081</color>
+</resources>
diff --git a/MetisForwarderAndroid/app/src/main/res/values/ic_launcher_background.xml b/MetisForwarderAndroid/app/src/main/res/values/ic_launcher_background.xml
new file mode 100644
index 00000000..fb66f3a0
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/values/ic_launcher_background.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="ic_launcher_background">#FEFEFE</color>
+</resources> \ No newline at end of file
diff --git a/MetisForwarderAndroid/app/src/main/res/values/strings.xml b/MetisForwarderAndroid/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..85af98c2
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">ICN Metis</string>
+</resources>
diff --git a/MetisForwarderAndroid/app/src/main/res/values/styles.xml b/MetisForwarderAndroid/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..5885930d
--- /dev/null
+++ b/MetisForwarderAndroid/app/src/main/res/values/styles.xml
@@ -0,0 +1,11 @@
+<resources>
+
+ <!-- Base application theme. -->
+ <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
+ <!-- Customize your theme here. -->
+ <item name="colorPrimary">@color/colorPrimary</item>
+ <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
+ <item name="colorAccent">@color/colorAccent</item>
+ </style>
+
+</resources>
diff --git a/MetisForwarder/app/src/test/java/com/metis/ccnx/metisforwarder/ExampleUnitTest.java b/MetisForwarderAndroid/app/src/test/java/icn/forwarder/com/forwarderandroid/ExampleUnitTest.java
index 1b8f1316..01352cb3 100644
--- a/MetisForwarder/app/src/test/java/com/metis/ccnx/metisforwarder/ExampleUnitTest.java
+++ b/MetisForwarderAndroid/app/src/test/java/icn/forwarder/com/forwarderandroid/ExampleUnitTest.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
+ * Copyright (c) 2018 Cisco and/or its affiliates.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at:
@@ -12,12 +12,18 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.metis.ccnx.metisforwarder;
+
+package icn.forwarder.com.forwarderandroid;
import org.junit.Test;
import static org.junit.Assert.*;
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
public class ExampleUnitTest {
@Test
public void addition_isCorrect() throws Exception {
diff --git a/iGetAndroid/build.gradle b/MetisForwarderAndroid/build.gradle
index d0aa7043..e6b32bc7 100644
--- a/iGetAndroid/build.gradle
+++ b/MetisForwarderAndroid/build.gradle
@@ -1,11 +1,14 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
+
repositories {
+ google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.3.2'
+ classpath 'com.android.tools.build:gradle:3.0.1'
+
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -14,6 +17,7 @@ buildscript {
allprojects {
repositories {
+ google()
jcenter()
}
}
diff --git a/MetisForwarderAndroid/gradle.properties b/MetisForwarderAndroid/gradle.properties
new file mode 100644
index 00000000..aac7c9b4
--- /dev/null
+++ b/MetisForwarderAndroid/gradle.properties
@@ -0,0 +1,17 @@
+# Project-wide Gradle settings.
+
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/MetisForwarderAndroid/gradle/wrapper/gradle-wrapper.jar b/MetisForwarderAndroid/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 00000000..13372aef
--- /dev/null
+++ b/MetisForwarderAndroid/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/MetisForwarderAndroid/gradle/wrapper/gradle-wrapper.properties b/MetisForwarderAndroid/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..fcf4d03b
--- /dev/null
+++ b/MetisForwarderAndroid/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Wed Dec 13 11:41:14 CET 2017
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
diff --git a/MetisForwarderAndroid/gradlew b/MetisForwarderAndroid/gradlew
new file mode 100755
index 00000000..9d82f789
--- /dev/null
+++ b/MetisForwarderAndroid/gradlew
@@ -0,0 +1,160 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+ echo "$*"
+}
+
+die ( ) {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+esac
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+ JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
diff --git a/MetisForwarderAndroid/gradlew.bat b/MetisForwarderAndroid/gradlew.bat
new file mode 100644
index 00000000..aec99730
--- /dev/null
+++ b/MetisForwarderAndroid/gradlew.bat
@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/MetisForwarderAndroid/settings.gradle b/MetisForwarderAndroid/settings.gradle
new file mode 100644
index 00000000..e7b4def4
--- /dev/null
+++ b/MetisForwarderAndroid/settings.gradle
@@ -0,0 +1 @@
+include ':app'
diff --git a/README.md b/README.md
index 6b311f85..649d9f27 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ Install tools to build libcurl
If Ubuntu:
```
-sudo apt-get automake libconf libtool
+sudo apt-get automake libconf libtool clang
```
If Max Os X
@@ -19,13 +19,14 @@ If Max Os X
brew install automake libconf libtool
```
+
## Quick Start ##
Clone this distro
```
-git clone -b androidsdk/master https://gerrit.fd.io/r/cicn androidSdk
-cd androidSdk
+git clone -b androidsdk/master https://gerrit.fd.io/r/cicn android-sdk
+cd android-sdk
```
Export Android Sdk path
@@ -40,45 +41,75 @@ Export Android Ndk path
export SDK_PATH=/Users/angelomantellini/Library/Android/sdk/ndk-bundle
```
-Export Android Android CMAKE path
-
-```
-export SDK_PATH=/Users/angelomantellini/Library/Android/sdk/cmake/3.6.3155560/bin
-```
If the previous variables are not set, Sdk, Ndk and CMake for android will be downloaded
Compile everything (dependencies and CCNx modules)
```
+export ANDROID_ARCH="arm"
+make all
+make android_viper
+export ANDROID_ARCH="x86_64"
+make all
+export ANDROID_ARCH="arm64"
+make all
+export ANDROID_ARCH="x86"
make all
+
```
-The CCNx software will be installed in androidSdk/usr
+The CCNx software will be installed in androidSdk/usr_{arch}
-To compile Metis for android app (ccnxandroidmetis)
+To compile Metis for android app
```
make android_metis
```
-To install the application run
+To install the application, run
```
-adb install -r ccnxandroidmetis/app/build/outputs/apk/app-armeabi-v7a-release.apk
+adb install -r MetisForwarderAndroid/app/build/outputs/apk/release/.apk
```
-To compile IGet for android app (ccnxandroidmetis)
+To compile IGet for android app
```
make android_iget
```
-To install the application run
+To install the application, run
+
+```
+adb install -r IGetAndroid/app/build/outputs/apk/debug/iget-debug.apk
+```
+
+To compile HttpServer for android app
+
+```
+make android_httpserver
+```
+
+To install the application, run
+
+```
+adb install -r HttpServer/app/build/outputs/apk/release/httpserver-release.apk
+```
+
+
+To compile Viper for android app
+
+```
+export ANDROID_ARCH="arm"
+make android_viper
+```
+
+To install the application, run
```
-adb install -r iget_android/app/build/outputs/apk/app-armeabi-v7a-release.apk
+adb install -r build_armv7-a/viper/viper-armv7/build/outputs/apk/viper-armv7-release-signed.apk
```
@@ -103,7 +134,9 @@ Here's a short summary:
- `curl-clean` - Clean curl files and libs
- `boost-clean` - Clean boost files and libs
- `openssl-clean` - Clean opennssl files and libs
+- `crystax-clean` - Clean crystax files and libs
- `event-clean` - Clean libevent files and libs
+- `crystaxndk-clean` - Clean crystax ndk files
- `xml2-clean` - Clean libxml2 files and libs
- `dependencies-clean` - Clean all dependencies files and libs
- `sdk-clean` - Clean sdk files
@@ -121,10 +154,12 @@ Here's a short summary:
- `android_metis_debug` - Build metis apk for android in debug mode
- `android_iget` - Build iGet apk for android
- `android_iget_debug` - Build iGet apk for android in debug mode
+- `android_httpserver' - Build Viper apk for android
+- `android_httpserver_debug` - Build Viper apk for android in debug mode
- `android_viper` - Build Viper apk for android
- `android_iget_debug` - Build Viper apk for android in debug mode
## Configuration ##
-Distillery can be configured in multiple ways. Please check the config directory (specifically `config/config.mk`) for more information.
+Distillery can be configured in multiple ways. Please check the config directory (specifically `config/config.mk`) for more information. \ No newline at end of file
diff --git a/config/config.android b/config/config.android
index ee531cab..47f207a2 100644
--- a/config/config.android
+++ b/config/config.android
@@ -8,27 +8,28 @@
#
#
-set(ANDROID_NDK_VERSION "android-ndk-r13b")
-set(ANDROID_API_VERSION "android-24")
-set(ANDROID_TOOLCHAIN "arm-linux-androideabi")
-set(ANDROID_TOOLCHAIN_VERSION "${ANDROID_TOOLCHAIN}-4.9")
+#set(ANDROID_NDK_VERSION "android-ndk-r13b")
+#set(ANDROID_API_VERSION "android-24")
+#set(ANDROID_TOOLCHAIN "arm-linux-androideabi")
+#set(ANDROID_TOOLCHAIN_VERSION "${ANDROID_TOOLCHAIN}-4.9")
set(ANDROID_API "${ANDROID_API_VERSION}")
-set(ANDROID_SDK "$ENV{SDK}")
-set(ANDROID_NDK "$ENV{NDK}")
-set(ANDROID_NDK_ROOT "${ANDROID_NDK}")
+#set(ANDROID_SDK "$ENV{SDK}")
+#set(ANDROID_NDK "$ENV{NDK}")
+#set(ANDROID_NDK_ROOT "${ANDROID_NDK}")
-set(TOOLCHAIN_VERSION_ROOT "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_VERSION}")
-set(TOOLCHAIN_BIN "${TOOLCHAIN_VERSION_ROOT}/prebuilt/$ENV{OS}-$ENV{ARCH}/bin")
+#set(TOOLCHAIN_VERSION_ROOT "${ANDROID_NDK}/toolchains/${ANDROID_TOOLCHAIN_VERSION}")
+#set(TOOLCHAIN_BIN "${TOOLCHAIN_VERSION_ROOT}/prebuilt/$ENV{OS}-$ENV{ARCH}/bin")
-set(SYSROOT "${ANDROID_NDK}/platforms/${ANDROID_API_VERSION}/arch-arm/")
+#set(SYSROOT "${ANDROID_NDK}/platforms/${ANDROID_API_VERSION}/arch-arm/")
-set(CMAKE_SYSTEM_NAME Android)
-set(CMAKE_SYSROOT "${ANDROID_NDK}/platforms/${ANDROID_API_VERSION}/arch-arm/")
-set(CMAKE_C_COMPILER "${TOOLCHAIN_BIN}/${ANDROID_TOOLCHAIN}-gcc")
-set(CMAKE_RANLIB "${TOOLCHAIN_BIN}/${ANDROID_TOOLCHAIN}-ranlib")
+#set(CMAKE_SYSTEM_NAME Android)
+#set(CMAKE_SYSROOT "${ANDROID_NDK}/platforms/${ANDROID_API_VERSION}/arch-arm/")
+#set(CMAKE_C_COMPILER "${TOOLCHAIN_BIN}/${ANDROID_TOOLCHAIN}-gcc")
+#set(CMAKE_RANLIB "${TOOLCHAIN_BIN}/${ANDROID_TOOLCHAIN}-ranlib")
-set(ANDROID_C_FLAGS "--sysroot=${SYSROOT} -Wall -D_ANDROID_ -D_$ENV{ANDROID_API_VERSION}_")
+#set(ANDROID_C_FLAGS "--sysroot=${SYSROOT} -Wall -D_ANDROID_ -D_$ENV{ANDROID_API_VERSION}_")
+
+#set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "--sysroot=${SYSROOT}")
+#set(CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS} "--sysroot=${SYSROOT}")
+#set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "--sysroot=${SYSROOT}")
-set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} "--sysroot=${SYSROOT}")
-set(CMAKE_MODULE_LINKER_FLAGS ${CMAKE_MODULE_LINKER_FLAGS} "--sysroot=${SYSROOT}")
-set(CMAKE_SHARED_LINKER_FLAGS ${CMAKE_SHARED_LINKER_FLAGS} "--sysroot=${SYSROOT}")
diff --git a/config/config.mk b/config/config.mk
index af30b3f0..4fc382c8 100644
--- a/config/config.mk
+++ b/config/config.mk
@@ -37,8 +37,19 @@ DISTILLERY_BUILD_NAME?=
# This is the directory where things are built.
# Note that if some modules don't support off-tree builds you may have problems
-DISTILLERY_BUILD_DIR?=${DISTILLERY_ROOT_DIR}/build${DISTILLERY_BUILD_NAME}
-
+DISTILLERY_BUILD_DIR?=${DISTILLERY_ROOT_DIR}/$(shell if [ "${ANDROID_ARCH}" = "arm64" ]; \
+then echo build_aarch64; \
+else \
+if [ "${ANDROID_ARCH}" = "x86" ]; then \
+echo build_x86; \
+else \
+if [ "${ANDROID_ARCH}" = "x86_64" ]; then \
+echo build_x86_64; \
+else \
+echo build_armv7-a; \
+fi; \
+fi; \
+fi;)
# This is the directory where the source is checked out.
DISTILLERY_SOURCE_DIR?=${DISTILLERY_ROOT_DIR}/src
@@ -51,7 +62,20 @@ MAKE_BUILD_FLAGS?=-j8
# This is the directory where all the ccn software will be installed. This
# directory will be DELETED if you do a make clobber. Do not treat this the
# same way you would treat a system install directory.
-DISTILLERY_INSTALL_DIR?=${DISTILLERY_ROOT_DIR}/usr
+DISTILLERY_INSTALL_DIR?=${DISTILLERY_ROOT_DIR}/$(shell if [ "${ANDROID_ARCH}" = "arm64" ]; \
+then echo usr_aarch64; \
+else \
+if [ "${ANDROID_ARCH}" = "x86" ]; then \
+echo usr_i686; \
+else \
+if [ "${ANDROID_ARCH}" = "x86_64" ]; then \
+echo usr_x86_64; \
+else \
+echo usr_armv7-a; \
+fi; \
+fi; \
+fi;)
+
# DISTILLERY_DEPENDENCIES_DIR=/path/to/dependencies/dir
# This is the path to the dependencies directory. It is used as the base for
@@ -101,9 +125,33 @@ export ARCH=$(shell uname -m)
CCNX_COMPILE_ENVIRONMENT=-DCMAKE_TOOLCHAIN_FILE=${DISTILLERY_ROOT_DIR}/config/config.android
OPEN_SSL_DIR=-DOPENSSL_ROOT_DIR=${DISTILLERY_INSTALL_DIR}
LIBEVENT_ROOT=${DISTILLERY_INSTALL_DIR}
-export ABI=armeabi-v7a
+export ABI=$(shell if [ "${ANDROID_ARCH}" = "arm64" ]; \
+then echo arm64; \
+else \
+if [ "${ANDROID_ARCH}" = "x86" ]; then \
+echo x86; \
+else \
+if [ "${ANDROID_ARCH}" = "x86_64" ]; then \
+echo x86_64; \
+else \
+echo arm; \
+fi; \
+fi; \
+fi;)
+export ANDROID_ABI=$(shell if [ "${ABI}" = "arm64" ]; then \
+echo arm64-v8a; \
+else \
+if [ "${ANDROID_ARCH}" = "x86" ]; then \
+echo x86; \
+else \
+if [ "${ANDROID_ARCH}" = "x86_64" ]; then \
+echo x86_64; \
+else \
+echo armeabi-v7a; \
+fi; \
+fi; \
+fi;)
export QT_HOME=${DISTILLERY_ROOT_DIR}/qt/Qt
-export ANDROID_ARCH=armv7
export DISTILLERY_BUILD_DIR
export DISTILLERY_INSTALL_DIR
-export ANDROID_PLATFORM=android-23
+export ANDROID_PLATFORM=android-26
diff --git a/config/modules/002-cmake-modules.mk b/config/modules/002-cmake-modules.mk
index 3378443c..f713af8f 100644
--- a/config/modules/002-cmake-modules.mk
+++ b/config/modules/002-cmake-modules.mk
@@ -45,14 +45,17 @@ $(eval $1_XCODE_DIR?=${DISTILLERY_XCODE_DIR}/$1)
$(eval modules_xcode+=$1)
${$1_BUILD_DIR}/Makefile: ${$1_SOURCE_DIR}/CMakeLists.txt ${DISTILLERY_STAMP}
- mkdir -p ${$1_BUILD_DIR}
- cd ${$1_BUILD_DIR}; \
- DEPENDENCY_HOME=${DISTILLERY_EXTERN_DIR} \
- ${CMAKE}/cmake ${$1_SOURCE_DIR} \
- -DOPENSSL_ROOT_DIR=OPEN_SSL_DIR \
- ${CMAKE_BUILD_TYPE_FLAG} \
- ${CCNX_COMPILE_ENVIRONMENT} \
- -DCMAKE_INSTALL_PREFIX=${DISTILLERY_INSTALL_DIR}
+ mkdir -p ${$1_BUILD_DIR};
+ echo ${$1_BUILD_DIR};
+ cd ${$1_BUILD_DIR}; \
+ DEPENDENCY_HOME=${DISTILLERY_EXTERN_DIR} \
+ cmake -DCMAKE_TOOLCHAIN_FILE=${NDK}/build/cmake/android.toolchain.cmake \
+ -DANDROID_TOOLCHAIN=clang \
+ -DANDROID_ABI=${ANDROID_ABI} \
+ -DCMAKE_FIND_ROOT_PATH=${DISTILLERY_INSTALL_DIR} \
+ -DANDROID_NATIVE_API_LEVEL=26 -DANDROID_API=ON -DINSTALL_HEADER=ON -DHAVE_FSETXATTR=OFF -DHAVE_GLIBC_STRERROR_R=OFF \
+ -DICNET=ON -DCMAKE_INSTALL_PREFIX=${DISTILLERY_INSTALL_DIR} ${$1_SOURCE_DIR} -DBUILD_SHARED_LIBS=0
+
${$1_SOURCE_DIR}/CMakeLists.txt:
@echo "**option **1"
diff --git a/config/modules/106-jsoncpp.mk b/config/modules/106-jsoncpp.mk
new file mode 100644
index 00000000..b8c1ef33
--- /dev/null
+++ b/config/modules/106-jsoncpp.mk
@@ -0,0 +1 @@
+$(eval $(call addCMakeModule,jsoncpp))
diff --git a/config/modules/107-libevent.mk b/config/modules/107-libevent.mk
new file mode 100644
index 00000000..a3ee3251
--- /dev/null
+++ b/config/modules/107-libevent.mk
@@ -0,0 +1 @@
+$(eval $(call addCMakeModule,libevent))
diff --git a/config/modules/108-libxml2.mk b/config/modules/108-libxml2.mk
new file mode 100644
index 00000000..09fec5bb
--- /dev/null
+++ b/config/modules/108-libxml2.mk
@@ -0,0 +1 @@
+$(eval $(call addCMakeModule,libxml2))
diff --git a/config/modules/109-libhicn.mk b/config/modules/109-libhicn.mk
deleted file mode 100644
index 7c947e22..00000000
--- a/config/modules/109-libhicn.mk
+++ /dev/null
@@ -1 +0,0 @@
-$(eval $(call addCMakeModule,libhicn))
diff --git a/config/modules/510-Metis.mk b/config/modules/510-forwarder.mk
index ba11067e..ba11067e 100644
--- a/config/modules/510-Metis.mk
+++ b/config/modules/510-forwarder.mk
diff --git a/config/modules/710-http-server.mk b/config/modules/710-http-server.mk
new file mode 100644
index 00000000..abf5500a
--- /dev/null
+++ b/config/modules/710-http-server.mk
@@ -0,0 +1 @@
+$(eval $(call addCMakeModule,http-server))
diff --git a/external/glob.h b/external/glob.h
new file mode 100644
index 00000000..b755ed21
--- /dev/null
+++ b/external/glob.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 1989, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Guido van Rossum.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)glob.h 8.1 (Berkeley) 6/2/93
+ * $FreeBSD$
+ */
+
+#ifndef _GLOB_H_
+#define _GLOB_H_
+
+#include <sys/cdefs.h>
+#include <sys/types.h>
+
+struct dirent;
+struct stat;
+
+typedef struct {
+ size_t gl_pathc; /* Count of total paths so far. */
+ size_t gl_matchc; /* Count of paths matching pattern. */
+ size_t gl_offs; /* Reserved at beginning of gl_pathv. */
+ int gl_flags; /* Copy of flags parameter to glob. */
+ char** gl_pathv; /* List of paths matching pattern. */
+
+ /* Copy of `__error_callback` parameter to glob. */
+ int (*gl_errfunc)(const char* __failure_path, int __failure_errno);
+
+ /*
+ * Alternate filesystem access methods for glob; replacement
+ * versions of closedir(3), readdir(3), opendir(3), stat(2)
+ * and lstat(2).
+ */
+ void (*gl_closedir)(void*);
+ struct dirent* (*gl_readdir)(void*);
+ void* (*gl_opendir)(const char*);
+ int (*gl_lstat)(const char*, struct stat*);
+ int (*gl_stat)(const char*, struct stat*);
+} glob_t;
+
+/* Believed to have been introduced in 1003.2-1992 */
+#define GLOB_APPEND 0x0001 /* Append to output from previous call. */
+#define GLOB_DOOFFS 0x0002 /* Prepend `gl_offs` null pointers (leaving space for exec, say). */
+#define GLOB_ERR 0x0004 /* Return on error. */
+#define GLOB_MARK 0x0008 /* Append "/" to the names of returned directories. */
+#define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */
+#define GLOB_NOSORT 0x0020 /* Don't sort. */
+#define GLOB_NOESCAPE 0x2000 /* Disable backslash escaping. */
+
+/* Error values returned by glob(3) */
+#define GLOB_NOSPACE (-1) /* Malloc call failed. */
+#define GLOB_ABORTED (-2) /* Unignored error. */
+#define GLOB_NOMATCH (-3) /* No match and GLOB_NOCHECK was not set. */
+
+#if __USE_BSD
+#define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */
+#define GLOB_BRACE 0x0080 /* Expand braces like csh. */
+#define GLOB_MAGCHAR 0x0100 /* Set in `gl_flags` if the pattern had globbing characters. */
+#define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */
+#define GLOB_QUOTE 0x0400 /* Quote special chars with \. */
+#define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */
+#define GLOB_LIMIT 0x1000 /* limit number of returned paths */
+#endif
+
+__BEGIN_DECLS
+
+
+#if __ANDROID_API__ >= __ANDROID_API_FUTURE__
+int glob(const char* __pattern, int __flags, int (*__error_callback)(const char* __failure_path, int __failure_errno), glob_t* __result_ptr) __INTRODUCED_IN_FUTURE;
+void globfree(glob_t* __result_ptr) __INTRODUCED_IN_FUTURE;
+#endif /* __ANDROID_API__ >= __ANDROID_API_FUTURE__ */
+
+
+__END_DECLS
+
+#endif
diff --git a/external/jsoncpp/CMakeLists.txt b/external/jsoncpp/CMakeLists.txt
new file mode 100644
index 00000000..fc3fd86d
--- /dev/null
+++ b/external/jsoncpp/CMakeLists.txt
@@ -0,0 +1,160 @@
+# vim: et ts=4 sts=4 sw=4 tw=0
+
+CMAKE_MINIMUM_REQUIRED(VERSION 3.1)
+PROJECT(jsoncpp)
+ENABLE_TESTING()
+
+#OPTION(JSONCPP_WITH_TESTS "Compile and (for jsoncpp_check) run JsonCpp test executables" ON)
+OPTION(JSONCPP_WITH_POST_BUILD_UNITTEST "Automatically run unit-tests as a post build step" ON)
+OPTION(JSONCPP_WITH_WARNING_AS_ERROR "Force compilation to fail if a warning occurs" OFF)
+OPTION(JSONCPP_WITH_STRICT_ISO "Issue all the warnings demanded by strict ISO C and ISO C++" ON)
+OPTION(JSONCPP_WITH_PKGCONFIG_SUPPORT "Generate and install .pc files" ON)
+OPTION(JSONCPP_WITH_CMAKE_PACKAGE "Generate and install cmake package files" OFF)
+OPTION(BUILD_SHARED_LIBS "Build jsoncpp_lib as a shared library." OFF)
+OPTION(BUILD_STATIC_LIBS "Build jsoncpp_lib static library." ON)
+
+# Ensures that CMAKE_BUILD_TYPE is visible in cmake-gui on Unix
+IF(NOT WIN32)
+ IF(NOT CMAKE_BUILD_TYPE)
+ SET(CMAKE_BUILD_TYPE Release CACHE STRING
+ "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel Coverage."
+ FORCE)
+ ENDIF()
+ENDIF()
+
+# Enable runtime search path support for dynamic libraries on OSX
+IF(APPLE)
+ SET(CMAKE_MACOSX_RPATH 1)
+ENDIF()
+
+# Adhere to GNU filesystem layout conventions
+INCLUDE(GNUInstallDirs)
+
+SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build")
+
+# Set variable named ${VAR_NAME} to value ${VALUE}
+FUNCTION(set_using_dynamic_name VAR_NAME VALUE)
+ SET( "${VAR_NAME}" "${VALUE}" PARENT_SCOPE)
+ENDFUNCTION()
+
+# Extract major, minor, patch from version text
+# Parse a version string "X.Y.Z" and outputs
+# version parts in ${OUPUT_PREFIX}_MAJOR, _MINOR, _PATCH.
+# If parse succeeds then ${OUPUT_PREFIX}_FOUND is TRUE.
+MACRO(jsoncpp_parse_version VERSION_TEXT OUPUT_PREFIX)
+ SET(VERSION_REGEX "[0-9]+\\.[0-9]+\\.[0-9]+(-[a-zA-Z0-9_]+)?")
+ IF( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} )
+ STRING(REGEX MATCHALL "[0-9]+|-([A-Za-z0-9_]+)" VERSION_PARTS ${VERSION_TEXT})
+ LIST(GET VERSION_PARTS 0 ${OUPUT_PREFIX}_MAJOR)
+ LIST(GET VERSION_PARTS 1 ${OUPUT_PREFIX}_MINOR)
+ LIST(GET VERSION_PARTS 2 ${OUPUT_PREFIX}_PATCH)
+ set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" TRUE )
+ ELSE( ${VERSION_TEXT} MATCHES ${VERSION_REGEX} )
+ set_using_dynamic_name( "${OUPUT_PREFIX}_FOUND" FALSE )
+ ENDIF()
+ENDMACRO()
+
+# Read out version from "version" file
+#FILE(STRINGS "version" JSONCPP_VERSION)
+#SET( JSONCPP_VERSION_MAJOR X )
+#SET( JSONCPP_VERSION_MINOR Y )
+#SET( JSONCPP_VERSION_PATCH Z )
+SET( JSONCPP_VERSION 1.8.4 )
+jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION )
+#IF(NOT JSONCPP_VERSION_FOUND)
+# MESSAGE(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z")
+#ENDIF(NOT JSONCPP_VERSION_FOUND)
+SET( JSONCPP_SOVERSION 19 )
+SET( JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL" )
+
+MESSAGE(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}")
+# File version.h is only regenerated on CMake configure step
+CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/src/lib_json/version.h.in"
+ "${PROJECT_SOURCE_DIR}/include/json/version.h"
+ NEWLINE_STYLE UNIX )
+CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/version.in"
+ "${PROJECT_SOURCE_DIR}/version"
+ NEWLINE_STYLE UNIX )
+
+MACRO(UseCompilationWarningAsError)
+ IF(MSVC)
+ # Only enabled in debug because some old versions of VS STL generate
+ # warnings when compiled in release configuration.
+ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /WX ")
+ ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
+ IF(JSONCPP_WITH_STRICT_ISO)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors")
+ ENDIF()
+ ENDIF()
+ENDMACRO()
+
+# Include our configuration header
+INCLUDE_DIRECTORIES( ${jsoncpp_SOURCE_DIR}/include )
+
+IF(MSVC)
+ # Only enabled in debug because some old versions of VS STL generate
+ # unreachable code warning when compiled in release configuration.
+ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /W4 ")
+ENDIF()
+
+# Require C++11 support, prefer ISO C++ over GNU variants,
+# as relying solely on ISO C++ is more portable.
+SET(CMAKE_CXX_STANDARD 11)
+SET(CMAKE_CXX_STANDARD_REQUIRED ON)
+SET(CMAKE_CXX_EXTENSIONS OFF)
+
+IF(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ # using regular Clang or AppleClang
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare")
+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ # using GCC
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra")
+ # not yet ready for -Wsign-conversion
+
+ IF(JSONCPP_WITH_STRICT_ISO)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
+ ENDIF()
+ IF(JSONCPP_WITH_WARNING_AS_ERROR)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion")
+ ENDIF()
+ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
+ # using Intel compiler
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wconversion -Wshadow -Wextra -Werror=conversion")
+
+ IF(JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
+ ENDIF()
+ENDIF()
+
+FIND_PROGRAM(CCACHE_FOUND ccache)
+IF(CCACHE_FOUND)
+ SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache)
+ SET_PROPERTY(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache)
+ENDIF(CCACHE_FOUND)
+
+IF(JSONCPP_WITH_WARNING_AS_ERROR)
+ UseCompilationWarningAsError()
+ENDIF()
+
+IF(JSONCPP_WITH_PKGCONFIG_SUPPORT)
+ CONFIGURE_FILE(
+ "pkg-config/jsoncpp.pc.in"
+ "pkg-config/jsoncpp.pc"
+ @ONLY)
+ INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/pkg-config/jsoncpp.pc"
+ DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
+ENDIF()
+
+IF(JSONCPP_WITH_CMAKE_PACKAGE)
+ INSTALL(EXPORT jsoncpp
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/jsoncpp
+ FILE jsoncppConfig.cmake)
+ENDIF()
+
+# Build the different applications
+ADD_SUBDIRECTORY( src )
+
+#install the includes
+ADD_SUBDIRECTORY( include )
+
diff --git a/external/libcurl_android/jni/Android.mk b/external/libcurl_android/jni/Android.mk
deleted file mode 100644
index 5053e7d6..00000000
--- a/external/libcurl_android/jni/Android.mk
+++ /dev/null
@@ -1 +0,0 @@
-include $(call all-subdir-makefiles)
diff --git a/external/libcurl_android/jni/Application.mk b/external/libcurl_android/jni/Application.mk
deleted file mode 100644
index 7bb1628b..00000000
--- a/external/libcurl_android/jni/Application.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-APP_ABI := armeabi-v7a
-
-APP_STL := gnustl_shared
-APP_CPPFLAGS += -fexceptions -frtti -std=c++11 -Wno-deprecated-declarations
-NDK_TOOLCHAIN_VERSION := 4.9
-APP_PLATFORM := android-21 \ No newline at end of file
diff --git a/external/libcurl_android/jni/libcurl/Android.mk b/external/libcurl_android/jni/libcurl/Android.mk
deleted file mode 100755
index 10946bac..00000000
--- a/external/libcurl_android/jni/libcurl/Android.mk
+++ /dev/null
@@ -1,114 +0,0 @@
-# Google Android makefile for curl and libcurl
-#
-# This file can be used when building curl using the full Android source
-# release or the NDK. Most users do not want or need to do this; please
-# instead read the Android section in docs/INSTALL for alternate
-# methods.
-#
-# Place the curl source (including this makefile) into external/curl/ in the
-# Android source tree. Then build them with 'make curl' or just 'make libcurl'
-# from the Android root. Tested with Android versions 1.5, 2.1-2.3
-#
-# Note: you must first create a curl_config.h file by running configure in the
-# Android environment. The only way I've found to do this is tricky. Perform a
-# normal Android build with libcurl in the source tree, providing the target
-# "showcommands" to make. The build will eventually fail (because curl_config.h
-# doesn't exist yet), but the compiler commands used to build curl will be
-# shown. Now, from the external/curl/ directory, run curl's normal configure
-# command with flags that match what Android itself uses. This will mean
-# putting the compiler directory into the PATH, putting the -I, -isystem and
-# -D options into CPPFLAGS, putting the -W, -m, -f, -O and -nostdlib options
-# into CFLAGS, and putting the -Wl, -L and -l options into LIBS, along with the
-# path to the files libgcc.a, crtbegin_dynamic.o, and ccrtend_android.o.
-# Remember that the paths must be absolute since you will not be running
-# configure from the same directory as the Android make. The normal
-# cross-compiler options must also be set. Note that the -c, -o, -MD and
-# similar flags must not be set.
-#
-# To see all the LIBS options, you'll need to do the "showcommands" trick on an
-# executable that's already buildable and watch what flags Android uses to link
-# it (dhcpcd is a good choice to watch). You'll also want to add -L options to
-# LIBS that point to the out/.../obj/lib/ and out/.../obj/system/lib/
-# directories so that additional libraries can be found and used by curl.
-#
-# The end result will be a configure command that looks something like this
-# (the environment variable A is set to the Android root path which makes the
-# command shorter):
-#
-# A=`realpath ../..` && \
-# PATH="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/bin:$PATH" \
-# ./configure --host=arm-linux CC=arm-eabi-gcc \
-# CPPFLAGS="-I $A/system/core/include ..." \
-# CFLAGS="-nostdlib -fno-exceptions -Wno-multichar ..." \
-# LIBS="$A/prebuilt/linux-x86/toolchain/arm-eabi-X/lib/gcc/arm-eabi/X\
-# /interwork/libgcc.a ..."
-#
-# Finally, copy the file COPYING to NOTICE so that the curl license gets put
-# into the right place (but see the note about this below).
-#
-# Dan Fandrich
-# November 2011
-
-LOCAL_PATH:= $(call my-dir)
-
-common_CFLAGS := -Wpointer-arith -Wwrite-strings -Wunused -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers -DHAVE_CONFIG_H
-
-#########################
-# Build the libcurl library
-
-include $(CLEAR_VARS)
-include $(LOCAL_PATH)/lib/Makefile.inc
-CURL_HEADERS := \
- curlbuild.h \
- curl.h \
- curlrules.h \
- curlver.h \
- easy.h \
- mprintf.h \
- multi.h \
- stdcheaders.h \
- typecheck-gcc.h
-
-LOCAL_SRC_FILES := $(addprefix lib/,$(CSOURCES))
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/include/ $(LOCAL_PATH)/lib
-LOCAL_CFLAGS += $(common_CFLAGS)
-
-LOCAL_COPY_HEADERS_TO := libcurl/curl
-LOCAL_COPY_HEADERS := $(addprefix include/curl/,$(CURL_HEADERS))
-
-LOCAL_MODULE:= curl-library
-LOCAL_MODULE_TAGS := optional
-
-# Copy the licence to a place where Android will find it.
-# Actually, this doesn't quite work because the build system searches
-# for NOTICE files before it gets to this point, so it will only be seen
-# on subsequent builds.
-ALL_PREBUILT += $(LOCAL_PATH)/NOTICE
-$(LOCAL_PATH)/NOTICE: $(LOCAL_PATH)/COPYING | $(ACP)
- $(copy-file-to-target)
-
-include $(BUILD_STATIC_LIBRARY)
-
-
-#########################
-# Build the curl binary
-
-include $(CLEAR_VARS)
-include $(LOCAL_PATH)/src/Makefile.inc
-LOCAL_SRC_FILES := $(addprefix src/,$(CURL_CFILES))
-
-LOCAL_MODULE := curl
-LOCAL_MODULE_TAGS := optional
-LOCAL_STATIC_LIBRARIES := curl-library
-LOCAL_SYSTEM_SHARED_LIBRARIES := libc
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/include $(LOCAL_PATH)/lib
-
-# This may also need to include $(CURLX_CFILES) in order to correctly link
-# if libcurl is changed to be built as a dynamic library
-LOCAL_CFLAGS += $(common_CFLAGS)
-
-#include $(BUILD_EXECUTABLE)
-include $(BUILD_STATIC_LIBRARY)
-
-
diff --git a/external/libcurl_android/jni/libcurl/include/curl/curl.h b/external/libcurl_android/jni/libcurl/include/curl/curl.h
deleted file mode 100755
index d40b2dbb..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/curl.h
+++ /dev/null
@@ -1,2336 +0,0 @@
-#ifndef __CURL_CURL_H
-#define __CURL_CURL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * If you have libcurl problems, all docs and details are found here:
- * http://curl.haxx.se/libcurl/
- *
- * curl-library mailing list subscription and unsubscription web interface:
- * http://cool.haxx.se/mailman/listinfo/curl-library/
- */
-
-#include "curlver.h" /* libcurl version defines */
-#include "curlbuild.h" /* libcurl build definitions */
-#include "curlrules.h" /* libcurl rules enforcement */
-
-/*
- * Define WIN32 when build target is Win32 API
- */
-
-#if (defined(_WIN32) || defined(__WIN32__)) && \
- !defined(WIN32) && !defined(__SYMBIAN32__)
-#define WIN32
-#endif
-
-#include <stdio.h>
-#include <limits.h>
-
-#if defined(__FreeBSD__) && (__FreeBSD__ >= 2)
-/* Needed for __FreeBSD_version symbol definition */
-#include <osreldate.h>
-#endif
-
-/* The include stuff here below is mainly for time_t! */
-#include <sys/types.h>
-#include <time.h>
-
-#if defined(WIN32) && !defined(_WIN32_WCE) && !defined(__CYGWIN__)
-#if !(defined(_WINSOCKAPI_) || defined(_WINSOCK_H) || defined(__LWIP_OPT_H__))
-/* The check above prevents the winsock2 inclusion if winsock.h already was
- included, since they can't co-exist without problems */
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#endif
-#endif
-
-/* HP-UX systems version 9, 10 and 11 lack sys/select.h and so does oldish
- libc5-based Linux systems. Only include it on systems that are known to
- require it! */
-#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
- defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
- defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
- (defined(__FreeBSD_version) && (__FreeBSD_version < 800000))
-#include <sys/select.h>
-#endif
-
-#if !defined(WIN32) && !defined(_WIN32_WCE)
-#include <sys/socket.h>
-#endif
-
-#if !defined(WIN32) && !defined(__WATCOMC__) && !defined(__VXWORKS__)
-#include <sys/time.h>
-#endif
-
-#ifdef __BEOS__
-#include <support/SupportDefs.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void CURL;
-
-/*
- * libcurl external API function linkage decorations.
- */
-
-#ifdef CURL_STATICLIB
-# define CURL_EXTERN
-#elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
-# if defined(BUILDING_LIBCURL)
-# define CURL_EXTERN __declspec(dllexport)
-# else
-# define CURL_EXTERN __declspec(dllimport)
-# endif
-#elif defined(BUILDING_LIBCURL) && defined(CURL_HIDDEN_SYMBOLS)
-# define CURL_EXTERN CURL_EXTERN_SYMBOL
-#else
-# define CURL_EXTERN
-#endif
-
-#ifndef curl_socket_typedef
-/* socket typedef */
-#if defined(WIN32) && !defined(__LWIP_OPT_H__)
-typedef SOCKET curl_socket_t;
-#define CURL_SOCKET_BAD INVALID_SOCKET
-#else
-typedef int curl_socket_t;
-#define CURL_SOCKET_BAD -1
-#endif
-#define curl_socket_typedef
-#endif /* curl_socket_typedef */
-
-struct curl_httppost {
- struct curl_httppost *next; /* next entry in the list */
- char *name; /* pointer to allocated name */
- long namelength; /* length of name length */
- char *contents; /* pointer to allocated data contents */
- long contentslength; /* length of contents field */
- char *buffer; /* pointer to allocated buffer contents */
- long bufferlength; /* length of buffer field */
- char *contenttype; /* Content-Type */
- struct curl_slist* contentheader; /* list of extra headers for this form */
- struct curl_httppost *more; /* if one field name has more than one
- file, this link should link to following
- files */
- long flags; /* as defined below */
-#define HTTPPOST_FILENAME (1<<0) /* specified content is a file name */
-#define HTTPPOST_READFILE (1<<1) /* specified content is a file name */
-#define HTTPPOST_PTRNAME (1<<2) /* name is only stored pointer
- do not free in formfree */
-#define HTTPPOST_PTRCONTENTS (1<<3) /* contents is only stored pointer
- do not free in formfree */
-#define HTTPPOST_BUFFER (1<<4) /* upload file from buffer */
-#define HTTPPOST_PTRBUFFER (1<<5) /* upload file from pointer contents */
-#define HTTPPOST_CALLBACK (1<<6) /* upload file contents by using the
- regular read callback to get the data
- and pass the given pointer as custom
- pointer */
-
- char *showfilename; /* The file name to show. If not set, the
- actual file name will be used (if this
- is a file part) */
- void *userp; /* custom pointer used for
- HTTPPOST_CALLBACK posts */
-};
-
-/* This is the CURLOPT_PROGRESSFUNCTION callback proto. It is now considered
- deprecated but was the only choice up until 7.31.0 */
-typedef int (*curl_progress_callback)(void *clientp,
- double dltotal,
- double dlnow,
- double ultotal,
- double ulnow);
-
-/* This is the CURLOPT_XFERINFOFUNCTION callback proto. It was introduced in
- 7.32.0, it avoids floating point and provides more detailed information. */
-typedef int (*curl_xferinfo_callback)(void *clientp,
- curl_off_t dltotal,
- curl_off_t dlnow,
- curl_off_t ultotal,
- curl_off_t ulnow);
-
-#ifndef CURL_MAX_WRITE_SIZE
- /* Tests have proven that 20K is a very bad buffer size for uploads on
- Windows, while 16K for some odd reason performed a lot better.
- We do the ifndef check to allow this value to easier be changed at build
- time for those who feel adventurous. The practical minimum is about
- 400 bytes since libcurl uses a buffer of this size as a scratch area
- (unrelated to network send operations). */
-#define CURL_MAX_WRITE_SIZE 16384
-#endif
-
-#ifndef CURL_MAX_HTTP_HEADER
-/* The only reason to have a max limit for this is to avoid the risk of a bad
- server feeding libcurl with a never-ending header that will cause reallocs
- infinitely */
-#define CURL_MAX_HTTP_HEADER (100*1024)
-#endif
-
-/* This is a magic return code for the write callback that, when returned,
- will signal libcurl to pause receiving on the current transfer. */
-#define CURL_WRITEFUNC_PAUSE 0x10000001
-
-typedef size_t (*curl_write_callback)(char *buffer,
- size_t size,
- size_t nitems,
- void *outstream);
-
-
-
-/* enumeration of file types */
-typedef enum {
- CURLFILETYPE_FILE = 0,
- CURLFILETYPE_DIRECTORY,
- CURLFILETYPE_SYMLINK,
- CURLFILETYPE_DEVICE_BLOCK,
- CURLFILETYPE_DEVICE_CHAR,
- CURLFILETYPE_NAMEDPIPE,
- CURLFILETYPE_SOCKET,
- CURLFILETYPE_DOOR, /* is possible only on Sun Solaris now */
-
- CURLFILETYPE_UNKNOWN /* should never occur */
-} curlfiletype;
-
-#define CURLFINFOFLAG_KNOWN_FILENAME (1<<0)
-#define CURLFINFOFLAG_KNOWN_FILETYPE (1<<1)
-#define CURLFINFOFLAG_KNOWN_TIME (1<<2)
-#define CURLFINFOFLAG_KNOWN_PERM (1<<3)
-#define CURLFINFOFLAG_KNOWN_UID (1<<4)
-#define CURLFINFOFLAG_KNOWN_GID (1<<5)
-#define CURLFINFOFLAG_KNOWN_SIZE (1<<6)
-#define CURLFINFOFLAG_KNOWN_HLINKCOUNT (1<<7)
-
-/* Content of this structure depends on information which is known and is
- achievable (e.g. by FTP LIST parsing). Please see the url_easy_setopt(3) man
- page for callbacks returning this structure -- some fields are mandatory,
- some others are optional. The FLAG field has special meaning. */
-struct curl_fileinfo {
- char *filename;
- curlfiletype filetype;
- time_t time;
- unsigned int perm;
- int uid;
- int gid;
- curl_off_t size;
- long int hardlinks;
-
- struct {
- /* If some of these fields is not NULL, it is a pointer to b_data. */
- char *time;
- char *perm;
- char *user;
- char *group;
- char *target; /* pointer to the target filename of a symlink */
- } strings;
-
- unsigned int flags;
-
- /* used internally */
- char * b_data;
- size_t b_size;
- size_t b_used;
-};
-
-/* return codes for CURLOPT_CHUNK_BGN_FUNCTION */
-#define CURL_CHUNK_BGN_FUNC_OK 0
-#define CURL_CHUNK_BGN_FUNC_FAIL 1 /* tell the lib to end the task */
-#define CURL_CHUNK_BGN_FUNC_SKIP 2 /* skip this chunk over */
-
-/* if splitting of data transfer is enabled, this callback is called before
- download of an individual chunk started. Note that parameter "remains" works
- only for FTP wildcard downloading (for now), otherwise is not used */
-typedef long (*curl_chunk_bgn_callback)(const void *transfer_info,
- void *ptr,
- int remains);
-
-/* return codes for CURLOPT_CHUNK_END_FUNCTION */
-#define CURL_CHUNK_END_FUNC_OK 0
-#define CURL_CHUNK_END_FUNC_FAIL 1 /* tell the lib to end the task */
-
-/* If splitting of data transfer is enabled this callback is called after
- download of an individual chunk finished.
- Note! After this callback was set then it have to be called FOR ALL chunks.
- Even if downloading of this chunk was skipped in CHUNK_BGN_FUNC.
- This is the reason why we don't need "transfer_info" parameter in this
- callback and we are not interested in "remains" parameter too. */
-typedef long (*curl_chunk_end_callback)(void *ptr);
-
-/* return codes for FNMATCHFUNCTION */
-#define CURL_FNMATCHFUNC_MATCH 0 /* string corresponds to the pattern */
-#define CURL_FNMATCHFUNC_NOMATCH 1 /* pattern doesn't match the string */
-#define CURL_FNMATCHFUNC_FAIL 2 /* an error occurred */
-
-/* callback type for wildcard downloading pattern matching. If the
- string matches the pattern, return CURL_FNMATCHFUNC_MATCH value, etc. */
-typedef int (*curl_fnmatch_callback)(void *ptr,
- const char *pattern,
- const char *string);
-
-/* These are the return codes for the seek callbacks */
-#define CURL_SEEKFUNC_OK 0
-#define CURL_SEEKFUNC_FAIL 1 /* fail the entire transfer */
-#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so
- libcurl might try other means instead */
-typedef int (*curl_seek_callback)(void *instream,
- curl_off_t offset,
- int origin); /* 'whence' */
-
-/* This is a return code for the read callback that, when returned, will
- signal libcurl to immediately abort the current transfer. */
-#define CURL_READFUNC_ABORT 0x10000000
-/* This is a return code for the read callback that, when returned, will
- signal libcurl to pause sending data on the current transfer. */
-#define CURL_READFUNC_PAUSE 0x10000001
-
-typedef size_t (*curl_read_callback)(char *buffer,
- size_t size,
- size_t nitems,
- void *instream);
-
-typedef enum {
- CURLSOCKTYPE_IPCXN, /* socket created for a specific IP connection */
- CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */
- CURLSOCKTYPE_LAST /* never use */
-} curlsocktype;
-
-/* The return code from the sockopt_callback can signal information back
- to libcurl: */
-#define CURL_SOCKOPT_OK 0
-#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return
- CURLE_ABORTED_BY_CALLBACK */
-#define CURL_SOCKOPT_ALREADY_CONNECTED 2
-
-typedef int (*curl_sockopt_callback)(void *clientp,
- curl_socket_t curlfd,
- curlsocktype purpose);
-
-struct curl_sockaddr {
- int family;
- int socktype;
- int protocol;
- unsigned int addrlen; /* addrlen was a socklen_t type before 7.18.0 but it
- turned really ugly and painful on the systems that
- lack this type */
- struct sockaddr addr;
-};
-
-typedef curl_socket_t
-(*curl_opensocket_callback)(void *clientp,
- curlsocktype purpose,
- struct curl_sockaddr *address);
-
-typedef int
-(*curl_closesocket_callback)(void *clientp, curl_socket_t item);
-
-typedef enum {
- CURLIOE_OK, /* I/O operation successful */
- CURLIOE_UNKNOWNCMD, /* command was unknown to callback */
- CURLIOE_FAILRESTART, /* failed to restart the read */
- CURLIOE_LAST /* never use */
-} curlioerr;
-
-typedef enum {
- CURLIOCMD_NOP, /* no operation */
- CURLIOCMD_RESTARTREAD, /* restart the read stream from start */
- CURLIOCMD_LAST /* never use */
-} curliocmd;
-
-typedef curlioerr (*curl_ioctl_callback)(CURL *handle,
- int cmd,
- void *clientp);
-
-/*
- * The following typedef's are signatures of malloc, free, realloc, strdup and
- * calloc respectively. Function pointers of these types can be passed to the
- * curl_global_init_mem() function to set user defined memory management
- * callback routines.
- */
-typedef void *(*curl_malloc_callback)(size_t size);
-typedef void (*curl_free_callback)(void *ptr);
-typedef void *(*curl_realloc_callback)(void *ptr, size_t size);
-typedef char *(*curl_strdup_callback)(const char *str);
-typedef void *(*curl_calloc_callback)(size_t nmemb, size_t size);
-
-/* the kind of data that is passed to information_callback*/
-typedef enum {
- CURLINFO_TEXT = 0,
- CURLINFO_HEADER_IN, /* 1 */
- CURLINFO_HEADER_OUT, /* 2 */
- CURLINFO_DATA_IN, /* 3 */
- CURLINFO_DATA_OUT, /* 4 */
- CURLINFO_SSL_DATA_IN, /* 5 */
- CURLINFO_SSL_DATA_OUT, /* 6 */
- CURLINFO_END
-} curl_infotype;
-
-typedef int (*curl_debug_callback)
- (CURL *handle, /* the handle/transfer this concerns */
- curl_infotype type, /* what kind of data */
- char *data, /* points to the data */
- size_t size, /* size of the data pointed to */
- void *userptr); /* whatever the user please */
-
-/* All possible error codes from all sorts of curl functions. Future versions
- may return other values, stay prepared.
-
- Always add new return codes last. Never *EVER* remove any. The return
- codes must remain the same!
- */
-
-typedef enum {
- CURLE_OK = 0,
- CURLE_UNSUPPORTED_PROTOCOL, /* 1 */
- CURLE_FAILED_INIT, /* 2 */
- CURLE_URL_MALFORMAT, /* 3 */
- CURLE_NOT_BUILT_IN, /* 4 - [was obsoleted in August 2007 for
- 7.17.0, reused in April 2011 for 7.21.5] */
- CURLE_COULDNT_RESOLVE_PROXY, /* 5 */
- CURLE_COULDNT_RESOLVE_HOST, /* 6 */
- CURLE_COULDNT_CONNECT, /* 7 */
- CURLE_FTP_WEIRD_SERVER_REPLY, /* 8 */
- CURLE_REMOTE_ACCESS_DENIED, /* 9 a service was denied by the server
- due to lack of access - when login fails
- this is not returned. */
- CURLE_FTP_ACCEPT_FAILED, /* 10 - [was obsoleted in April 2006 for
- 7.15.4, reused in Dec 2011 for 7.24.0]*/
- CURLE_FTP_WEIRD_PASS_REPLY, /* 11 */
- CURLE_FTP_ACCEPT_TIMEOUT, /* 12 - timeout occurred accepting server
- [was obsoleted in August 2007 for 7.17.0,
- reused in Dec 2011 for 7.24.0]*/
- CURLE_FTP_WEIRD_PASV_REPLY, /* 13 */
- CURLE_FTP_WEIRD_227_FORMAT, /* 14 */
- CURLE_FTP_CANT_GET_HOST, /* 15 */
- CURLE_HTTP2, /* 16 - A problem in the http2 framing layer.
- [was obsoleted in August 2007 for 7.17.0,
- reused in July 2014 for 7.38.0] */
- CURLE_FTP_COULDNT_SET_TYPE, /* 17 */
- CURLE_PARTIAL_FILE, /* 18 */
- CURLE_FTP_COULDNT_RETR_FILE, /* 19 */
- CURLE_OBSOLETE20, /* 20 - NOT USED */
- CURLE_QUOTE_ERROR, /* 21 - quote command failure */
- CURLE_HTTP_RETURNED_ERROR, /* 22 */
- CURLE_WRITE_ERROR, /* 23 */
- CURLE_OBSOLETE24, /* 24 - NOT USED */
- CURLE_UPLOAD_FAILED, /* 25 - failed upload "command" */
- CURLE_READ_ERROR, /* 26 - couldn't open/read from file */
- CURLE_OUT_OF_MEMORY, /* 27 */
- /* Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error
- instead of a memory allocation error if CURL_DOES_CONVERSIONS
- is defined
- */
- CURLE_OPERATION_TIMEDOUT, /* 28 - the timeout time was reached */
- CURLE_OBSOLETE29, /* 29 - NOT USED */
- CURLE_FTP_PORT_FAILED, /* 30 - FTP PORT operation failed */
- CURLE_FTP_COULDNT_USE_REST, /* 31 - the REST command failed */
- CURLE_OBSOLETE32, /* 32 - NOT USED */
- CURLE_RANGE_ERROR, /* 33 - RANGE "command" didn't work */
- CURLE_HTTP_POST_ERROR, /* 34 */
- CURLE_SSL_CONNECT_ERROR, /* 35 - wrong when connecting with SSL */
- CURLE_BAD_DOWNLOAD_RESUME, /* 36 - couldn't resume download */
- CURLE_FILE_COULDNT_READ_FILE, /* 37 */
- CURLE_LDAP_CANNOT_BIND, /* 38 */
- CURLE_LDAP_SEARCH_FAILED, /* 39 */
- CURLE_OBSOLETE40, /* 40 - NOT USED */
- CURLE_FUNCTION_NOT_FOUND, /* 41 */
- CURLE_ABORTED_BY_CALLBACK, /* 42 */
- CURLE_BAD_FUNCTION_ARGUMENT, /* 43 */
- CURLE_OBSOLETE44, /* 44 - NOT USED */
- CURLE_INTERFACE_FAILED, /* 45 - CURLOPT_INTERFACE failed */
- CURLE_OBSOLETE46, /* 46 - NOT USED */
- CURLE_TOO_MANY_REDIRECTS , /* 47 - catch endless re-direct loops */
- CURLE_UNKNOWN_OPTION, /* 48 - User specified an unknown option */
- CURLE_TELNET_OPTION_SYNTAX , /* 49 - Malformed telnet option */
- CURLE_OBSOLETE50, /* 50 - NOT USED */
- CURLE_PEER_FAILED_VERIFICATION, /* 51 - peer's certificate or fingerprint
- wasn't verified fine */
- CURLE_GOT_NOTHING, /* 52 - when this is a specific error */
- CURLE_SSL_ENGINE_NOTFOUND, /* 53 - SSL crypto engine not found */
- CURLE_SSL_ENGINE_SETFAILED, /* 54 - can not set SSL crypto engine as
- default */
- CURLE_SEND_ERROR, /* 55 - failed sending network data */
- CURLE_RECV_ERROR, /* 56 - failure in receiving network data */
- CURLE_OBSOLETE57, /* 57 - NOT IN USE */
- CURLE_SSL_CERTPROBLEM, /* 58 - problem with the local certificate */
- CURLE_SSL_CIPHER, /* 59 - couldn't use specified cipher */
- CURLE_SSL_CACERT, /* 60 - problem with the CA cert (path?) */
- CURLE_BAD_CONTENT_ENCODING, /* 61 - Unrecognized/bad encoding */
- CURLE_LDAP_INVALID_URL, /* 62 - Invalid LDAP URL */
- CURLE_FILESIZE_EXCEEDED, /* 63 - Maximum file size exceeded */
- CURLE_USE_SSL_FAILED, /* 64 - Requested FTP SSL level failed */
- CURLE_SEND_FAIL_REWIND, /* 65 - Sending the data requires a rewind
- that failed */
- CURLE_SSL_ENGINE_INITFAILED, /* 66 - failed to initialise ENGINE */
- CURLE_LOGIN_DENIED, /* 67 - user, password or similar was not
- accepted and we failed to login */
- CURLE_TFTP_NOTFOUND, /* 68 - file not found on server */
- CURLE_TFTP_PERM, /* 69 - permission problem on server */
- CURLE_REMOTE_DISK_FULL, /* 70 - out of disk space on server */
- CURLE_TFTP_ILLEGAL, /* 71 - Illegal TFTP operation */
- CURLE_TFTP_UNKNOWNID, /* 72 - Unknown transfer ID */
- CURLE_REMOTE_FILE_EXISTS, /* 73 - File already exists */
- CURLE_TFTP_NOSUCHUSER, /* 74 - No such user */
- CURLE_CONV_FAILED, /* 75 - conversion failed */
- CURLE_CONV_REQD, /* 76 - caller must register conversion
- callbacks using curl_easy_setopt options
- CURLOPT_CONV_FROM_NETWORK_FUNCTION,
- CURLOPT_CONV_TO_NETWORK_FUNCTION, and
- CURLOPT_CONV_FROM_UTF8_FUNCTION */
- CURLE_SSL_CACERT_BADFILE, /* 77 - could not load CACERT file, missing
- or wrong format */
- CURLE_REMOTE_FILE_NOT_FOUND, /* 78 - remote file not found */
- CURLE_SSH, /* 79 - error from the SSH layer, somewhat
- generic so the error message will be of
- interest when this has happened */
-
- CURLE_SSL_SHUTDOWN_FAILED, /* 80 - Failed to shut down the SSL
- connection */
- CURLE_AGAIN, /* 81 - socket is not ready for send/recv,
- wait till it's ready and try again (Added
- in 7.18.2) */
- CURLE_SSL_CRL_BADFILE, /* 82 - could not load CRL file, missing or
- wrong format (Added in 7.19.0) */
- CURLE_SSL_ISSUER_ERROR, /* 83 - Issuer check failed. (Added in
- 7.19.0) */
- CURLE_FTP_PRET_FAILED, /* 84 - a PRET command failed */
- CURLE_RTSP_CSEQ_ERROR, /* 85 - mismatch of RTSP CSeq numbers */
- CURLE_RTSP_SESSION_ERROR, /* 86 - mismatch of RTSP Session Ids */
- CURLE_FTP_BAD_FILE_LIST, /* 87 - unable to parse FTP file list */
- CURLE_CHUNK_FAILED, /* 88 - chunk callback reported error */
- CURLE_NO_CONNECTION_AVAILABLE, /* 89 - No connection available, the
- session will be queued */
- CURL_LAST /* never use! */
-} CURLcode;
-
-#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
- the obsolete stuff removed! */
-
-/* Previously obsolete error code re-used in 7.38.0 */
-#define CURLE_OBSOLETE16 CURLE_HTTP2
-
-/* Previously obsolete error codes re-used in 7.24.0 */
-#define CURLE_OBSOLETE10 CURLE_FTP_ACCEPT_FAILED
-#define CURLE_OBSOLETE12 CURLE_FTP_ACCEPT_TIMEOUT
-
-/* compatibility with older names */
-#define CURLOPT_ENCODING CURLOPT_ACCEPT_ENCODING
-
-/* The following were added in 7.21.5, April 2011 */
-#define CURLE_UNKNOWN_TELNET_OPTION CURLE_UNKNOWN_OPTION
-
-/* The following were added in 7.17.1 */
-/* These are scheduled to disappear by 2009 */
-#define CURLE_SSL_PEER_CERTIFICATE CURLE_PEER_FAILED_VERIFICATION
-
-/* The following were added in 7.17.0 */
-/* These are scheduled to disappear by 2009 */
-#define CURLE_OBSOLETE CURLE_OBSOLETE50 /* no one should be using this! */
-#define CURLE_BAD_PASSWORD_ENTERED CURLE_OBSOLETE46
-#define CURLE_BAD_CALLING_ORDER CURLE_OBSOLETE44
-#define CURLE_FTP_USER_PASSWORD_INCORRECT CURLE_OBSOLETE10
-#define CURLE_FTP_CANT_RECONNECT CURLE_OBSOLETE16
-#define CURLE_FTP_COULDNT_GET_SIZE CURLE_OBSOLETE32
-#define CURLE_FTP_COULDNT_SET_ASCII CURLE_OBSOLETE29
-#define CURLE_FTP_WEIRD_USER_REPLY CURLE_OBSOLETE12
-#define CURLE_FTP_WRITE_ERROR CURLE_OBSOLETE20
-#define CURLE_LIBRARY_NOT_FOUND CURLE_OBSOLETE40
-#define CURLE_MALFORMAT_USER CURLE_OBSOLETE24
-#define CURLE_SHARE_IN_USE CURLE_OBSOLETE57
-#define CURLE_URL_MALFORMAT_USER CURLE_NOT_BUILT_IN
-
-#define CURLE_FTP_ACCESS_DENIED CURLE_REMOTE_ACCESS_DENIED
-#define CURLE_FTP_COULDNT_SET_BINARY CURLE_FTP_COULDNT_SET_TYPE
-#define CURLE_FTP_QUOTE_ERROR CURLE_QUOTE_ERROR
-#define CURLE_TFTP_DISKFULL CURLE_REMOTE_DISK_FULL
-#define CURLE_TFTP_EXISTS CURLE_REMOTE_FILE_EXISTS
-#define CURLE_HTTP_RANGE_ERROR CURLE_RANGE_ERROR
-#define CURLE_FTP_SSL_FAILED CURLE_USE_SSL_FAILED
-
-/* The following were added earlier */
-
-#define CURLE_OPERATION_TIMEOUTED CURLE_OPERATION_TIMEDOUT
-
-#define CURLE_HTTP_NOT_FOUND CURLE_HTTP_RETURNED_ERROR
-#define CURLE_HTTP_PORT_FAILED CURLE_INTERFACE_FAILED
-#define CURLE_FTP_COULDNT_STOR_FILE CURLE_UPLOAD_FAILED
-
-#define CURLE_FTP_PARTIAL_FILE CURLE_PARTIAL_FILE
-#define CURLE_FTP_BAD_DOWNLOAD_RESUME CURLE_BAD_DOWNLOAD_RESUME
-
-/* This was the error code 50 in 7.7.3 and a few earlier versions, this
- is no longer used by libcurl but is instead #defined here only to not
- make programs break */
-#define CURLE_ALREADY_COMPLETE 99999
-
-/* Provide defines for really old option names */
-#define CURLOPT_FILE CURLOPT_WRITEDATA /* name changed in 7.9.7 */
-#define CURLOPT_INFILE CURLOPT_READDATA /* name changed in 7.9.7 */
-#define CURLOPT_WRITEHEADER CURLOPT_HEADERDATA
-
-/* Since long deprecated options with no code in the lib that does anything
- with them. */
-#define CURLOPT_WRITEINFO CURLOPT_OBSOLETE40
-#define CURLOPT_CLOSEPOLICY CURLOPT_OBSOLETE72
-
-#endif /*!CURL_NO_OLDIES*/
-
-/* This prototype applies to all conversion callbacks */
-typedef CURLcode (*curl_conv_callback)(char *buffer, size_t length);
-
-typedef CURLcode (*curl_ssl_ctx_callback)(CURL *curl, /* easy handle */
- void *ssl_ctx, /* actually an
- OpenSSL SSL_CTX */
- void *userptr);
-
-typedef enum {
- CURLPROXY_HTTP = 0, /* added in 7.10, new in 7.19.4 default is to use
- CONNECT HTTP/1.1 */
- CURLPROXY_HTTP_1_0 = 1, /* added in 7.19.4, force to use CONNECT
- HTTP/1.0 */
- CURLPROXY_SOCKS4 = 4, /* support added in 7.15.2, enum existed already
- in 7.10 */
- CURLPROXY_SOCKS5 = 5, /* added in 7.10 */
- CURLPROXY_SOCKS4A = 6, /* added in 7.18.0 */
- CURLPROXY_SOCKS5_HOSTNAME = 7 /* Use the SOCKS5 protocol but pass along the
- host name rather than the IP address. added
- in 7.18.0 */
-} curl_proxytype; /* this enum was added in 7.10 */
-
-/*
- * Bitmasks for CURLOPT_HTTPAUTH and CURLOPT_PROXYAUTH options:
- *
- * CURLAUTH_NONE - No HTTP authentication
- * CURLAUTH_BASIC - HTTP Basic authentication (default)
- * CURLAUTH_DIGEST - HTTP Digest authentication
- * CURLAUTH_NEGOTIATE - HTTP Negotiate (SPNEGO) authentication
- * CURLAUTH_GSSNEGOTIATE - Alias for CURLAUTH_NEGOTIATE (deprecated)
- * CURLAUTH_NTLM - HTTP NTLM authentication
- * CURLAUTH_DIGEST_IE - HTTP Digest authentication with IE flavour
- * CURLAUTH_NTLM_WB - HTTP NTLM authentication delegated to winbind helper
- * CURLAUTH_ONLY - Use together with a single other type to force no
- * authentication or just that single type
- * CURLAUTH_ANY - All fine types set
- * CURLAUTH_ANYSAFE - All fine types except Basic
- */
-
-#define CURLAUTH_NONE ((unsigned long)0)
-#define CURLAUTH_BASIC (((unsigned long)1)<<0)
-#define CURLAUTH_DIGEST (((unsigned long)1)<<1)
-#define CURLAUTH_NEGOTIATE (((unsigned long)1)<<2)
-/* Deprecated since the advent of CURLAUTH_NEGOTIATE */
-#define CURLAUTH_GSSNEGOTIATE CURLAUTH_NEGOTIATE
-#define CURLAUTH_NTLM (((unsigned long)1)<<3)
-#define CURLAUTH_DIGEST_IE (((unsigned long)1)<<4)
-#define CURLAUTH_NTLM_WB (((unsigned long)1)<<5)
-#define CURLAUTH_ONLY (((unsigned long)1)<<31)
-#define CURLAUTH_ANY (~CURLAUTH_DIGEST_IE)
-#define CURLAUTH_ANYSAFE (~(CURLAUTH_BASIC|CURLAUTH_DIGEST_IE))
-
-#define CURLSSH_AUTH_ANY ~0 /* all types supported by the server */
-#define CURLSSH_AUTH_NONE 0 /* none allowed, silly but complete */
-#define CURLSSH_AUTH_PUBLICKEY (1<<0) /* public/private key files */
-#define CURLSSH_AUTH_PASSWORD (1<<1) /* password */
-#define CURLSSH_AUTH_HOST (1<<2) /* host key files */
-#define CURLSSH_AUTH_KEYBOARD (1<<3) /* keyboard interactive */
-#define CURLSSH_AUTH_AGENT (1<<4) /* agent (ssh-agent, pageant...) */
-#define CURLSSH_AUTH_DEFAULT CURLSSH_AUTH_ANY
-
-#define CURLGSSAPI_DELEGATION_NONE 0 /* no delegation (default) */
-#define CURLGSSAPI_DELEGATION_POLICY_FLAG (1<<0) /* if permitted by policy */
-#define CURLGSSAPI_DELEGATION_FLAG (1<<1) /* delegate always */
-
-#define CURL_ERROR_SIZE 256
-
-enum curl_khtype {
- CURLKHTYPE_UNKNOWN,
- CURLKHTYPE_RSA1,
- CURLKHTYPE_RSA,
- CURLKHTYPE_DSS
-};
-
-struct curl_khkey {
- const char *key; /* points to a zero-terminated string encoded with base64
- if len is zero, otherwise to the "raw" data */
- size_t len;
- enum curl_khtype keytype;
-};
-
-/* this is the set of return values expected from the curl_sshkeycallback
- callback */
-enum curl_khstat {
- CURLKHSTAT_FINE_ADD_TO_FILE,
- CURLKHSTAT_FINE,
- CURLKHSTAT_REJECT, /* reject the connection, return an error */
- CURLKHSTAT_DEFER, /* do not accept it, but we can't answer right now so
- this causes a CURLE_DEFER error but otherwise the
- connection will be left intact etc */
- CURLKHSTAT_LAST /* not for use, only a marker for last-in-list */
-};
-
-/* this is the set of status codes pass in to the callback */
-enum curl_khmatch {
- CURLKHMATCH_OK, /* match */
- CURLKHMATCH_MISMATCH, /* host found, key mismatch! */
- CURLKHMATCH_MISSING, /* no matching host/key found */
- CURLKHMATCH_LAST /* not for use, only a marker for last-in-list */
-};
-
-typedef int
- (*curl_sshkeycallback) (CURL *easy, /* easy handle */
- const struct curl_khkey *knownkey, /* known */
- const struct curl_khkey *foundkey, /* found */
- enum curl_khmatch, /* libcurl's view on the keys */
- void *clientp); /* custom pointer passed from app */
-
-/* parameter for the CURLOPT_USE_SSL option */
-typedef enum {
- CURLUSESSL_NONE, /* do not attempt to use SSL */
- CURLUSESSL_TRY, /* try using SSL, proceed anyway otherwise */
- CURLUSESSL_CONTROL, /* SSL for the control connection or fail */
- CURLUSESSL_ALL, /* SSL for all communication or fail */
- CURLUSESSL_LAST /* not an option, never use */
-} curl_usessl;
-
-/* Definition of bits for the CURLOPT_SSL_OPTIONS argument: */
-
-/* - ALLOW_BEAST tells libcurl to allow the BEAST SSL vulnerability in the
- name of improving interoperability with older servers. Some SSL libraries
- have introduced work-arounds for this flaw but those work-arounds sometimes
- make the SSL communication fail. To regain functionality with those broken
- servers, a user can this way allow the vulnerability back. */
-#define CURLSSLOPT_ALLOW_BEAST (1<<0)
-
-#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
- the obsolete stuff removed! */
-
-/* Backwards compatibility with older names */
-/* These are scheduled to disappear by 2009 */
-
-#define CURLFTPSSL_NONE CURLUSESSL_NONE
-#define CURLFTPSSL_TRY CURLUSESSL_TRY
-#define CURLFTPSSL_CONTROL CURLUSESSL_CONTROL
-#define CURLFTPSSL_ALL CURLUSESSL_ALL
-#define CURLFTPSSL_LAST CURLUSESSL_LAST
-#define curl_ftpssl curl_usessl
-#endif /*!CURL_NO_OLDIES*/
-
-/* parameter for the CURLOPT_FTP_SSL_CCC option */
-typedef enum {
- CURLFTPSSL_CCC_NONE, /* do not send CCC */
- CURLFTPSSL_CCC_PASSIVE, /* Let the server initiate the shutdown */
- CURLFTPSSL_CCC_ACTIVE, /* Initiate the shutdown */
- CURLFTPSSL_CCC_LAST /* not an option, never use */
-} curl_ftpccc;
-
-/* parameter for the CURLOPT_FTPSSLAUTH option */
-typedef enum {
- CURLFTPAUTH_DEFAULT, /* let libcurl decide */
- CURLFTPAUTH_SSL, /* use "AUTH SSL" */
- CURLFTPAUTH_TLS, /* use "AUTH TLS" */
- CURLFTPAUTH_LAST /* not an option, never use */
-} curl_ftpauth;
-
-/* parameter for the CURLOPT_FTP_CREATE_MISSING_DIRS option */
-typedef enum {
- CURLFTP_CREATE_DIR_NONE, /* do NOT create missing dirs! */
- CURLFTP_CREATE_DIR, /* (FTP/SFTP) if CWD fails, try MKD and then CWD
- again if MKD succeeded, for SFTP this does
- similar magic */
- CURLFTP_CREATE_DIR_RETRY, /* (FTP only) if CWD fails, try MKD and then CWD
- again even if MKD failed! */
- CURLFTP_CREATE_DIR_LAST /* not an option, never use */
-} curl_ftpcreatedir;
-
-/* parameter for the CURLOPT_FTP_FILEMETHOD option */
-typedef enum {
- CURLFTPMETHOD_DEFAULT, /* let libcurl pick */
- CURLFTPMETHOD_MULTICWD, /* single CWD operation for each path part */
- CURLFTPMETHOD_NOCWD, /* no CWD at all */
- CURLFTPMETHOD_SINGLECWD, /* one CWD to full dir, then work on file */
- CURLFTPMETHOD_LAST /* not an option, never use */
-} curl_ftpmethod;
-
-/* bitmask defines for CURLOPT_HEADEROPT */
-#define CURLHEADER_UNIFIED 0
-#define CURLHEADER_SEPARATE (1<<0)
-
-/* CURLPROTO_ defines are for the CURLOPT_*PROTOCOLS options */
-#define CURLPROTO_HTTP (1<<0)
-#define CURLPROTO_HTTPS (1<<1)
-#define CURLPROTO_FTP (1<<2)
-#define CURLPROTO_FTPS (1<<3)
-#define CURLPROTO_SCP (1<<4)
-#define CURLPROTO_SFTP (1<<5)
-#define CURLPROTO_TELNET (1<<6)
-#define CURLPROTO_LDAP (1<<7)
-#define CURLPROTO_LDAPS (1<<8)
-#define CURLPROTO_DICT (1<<9)
-#define CURLPROTO_FILE (1<<10)
-#define CURLPROTO_TFTP (1<<11)
-#define CURLPROTO_IMAP (1<<12)
-#define CURLPROTO_IMAPS (1<<13)
-#define CURLPROTO_POP3 (1<<14)
-#define CURLPROTO_POP3S (1<<15)
-#define CURLPROTO_SMTP (1<<16)
-#define CURLPROTO_SMTPS (1<<17)
-#define CURLPROTO_RTSP (1<<18)
-#define CURLPROTO_RTMP (1<<19)
-#define CURLPROTO_RTMPT (1<<20)
-#define CURLPROTO_RTMPE (1<<21)
-#define CURLPROTO_RTMPTE (1<<22)
-#define CURLPROTO_RTMPS (1<<23)
-#define CURLPROTO_RTMPTS (1<<24)
-#define CURLPROTO_GOPHER (1<<25)
-#define CURLPROTO_ALL (~0) /* enable everything */
-
-/* long may be 32 or 64 bits, but we should never depend on anything else
- but 32 */
-#define CURLOPTTYPE_LONG 0
-#define CURLOPTTYPE_OBJECTPOINT 10000
-#define CURLOPTTYPE_FUNCTIONPOINT 20000
-#define CURLOPTTYPE_OFF_T 30000
-
-/* name is uppercase CURLOPT_<name>,
- type is one of the defined CURLOPTTYPE_<type>
- number is unique identifier */
-#ifdef CINIT
-#undef CINIT
-#endif
-
-#ifdef CURL_ISOCPP
-#define CINIT(na,t,nu) CURLOPT_ ## na = CURLOPTTYPE_ ## t + nu
-#else
-/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
-#define LONG CURLOPTTYPE_LONG
-#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
-#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
-#define OFF_T CURLOPTTYPE_OFF_T
-#define CINIT(name,type,number) CURLOPT_/**/name = type + number
-#endif
-
-/*
- * This macro-mania below setups the CURLOPT_[what] enum, to be used with
- * curl_easy_setopt(). The first argument in the CINIT() macro is the [what]
- * word.
- */
-
-typedef enum {
- /* This is the FILE * or void * the regular output should be written to. */
- CINIT(WRITEDATA, OBJECTPOINT, 1),
-
- /* The full URL to get/put */
- CINIT(URL, OBJECTPOINT, 2),
-
- /* Port number to connect to, if other than default. */
- CINIT(PORT, LONG, 3),
-
- /* Name of proxy to use. */
- CINIT(PROXY, OBJECTPOINT, 4),
-
- /* "user:password;options" to use when fetching. */
- CINIT(USERPWD, OBJECTPOINT, 5),
-
- /* "user:password" to use with proxy. */
- CINIT(PROXYUSERPWD, OBJECTPOINT, 6),
-
- /* Range to get, specified as an ASCII string. */
- CINIT(RANGE, OBJECTPOINT, 7),
-
- /* not used */
-
- /* Specified file stream to upload from (use as input): */
- CINIT(READDATA, OBJECTPOINT, 9),
-
- /* Buffer to receive error messages in, must be at least CURL_ERROR_SIZE
- * bytes big. If this is not used, error messages go to stderr instead: */
- CINIT(ERRORBUFFER, OBJECTPOINT, 10),
-
- /* Function that will be called to store the output (instead of fwrite). The
- * parameters will use fwrite() syntax, make sure to follow them. */
- CINIT(WRITEFUNCTION, FUNCTIONPOINT, 11),
-
- /* Function that will be called to read the input (instead of fread). The
- * parameters will use fread() syntax, make sure to follow them. */
- CINIT(READFUNCTION, FUNCTIONPOINT, 12),
-
- /* Time-out the read operation after this amount of seconds */
- CINIT(TIMEOUT, LONG, 13),
-
- /* If the CURLOPT_INFILE is used, this can be used to inform libcurl about
- * how large the file being sent really is. That allows better error
- * checking and better verifies that the upload was successful. -1 means
- * unknown size.
- *
- * For large file support, there is also a _LARGE version of the key
- * which takes an off_t type, allowing platforms with larger off_t
- * sizes to handle larger files. See below for INFILESIZE_LARGE.
- */
- CINIT(INFILESIZE, LONG, 14),
-
- /* POST static input fields. */
- CINIT(POSTFIELDS, OBJECTPOINT, 15),
-
- /* Set the referrer page (needed by some CGIs) */
- CINIT(REFERER, OBJECTPOINT, 16),
-
- /* Set the FTP PORT string (interface name, named or numerical IP address)
- Use i.e '-' to use default address. */
- CINIT(FTPPORT, OBJECTPOINT, 17),
-
- /* Set the User-Agent string (examined by some CGIs) */
- CINIT(USERAGENT, OBJECTPOINT, 18),
-
- /* If the download receives less than "low speed limit" bytes/second
- * during "low speed time" seconds, the operations is aborted.
- * You could i.e if you have a pretty high speed connection, abort if
- * it is less than 2000 bytes/sec during 20 seconds.
- */
-
- /* Set the "low speed limit" */
- CINIT(LOW_SPEED_LIMIT, LONG, 19),
-
- /* Set the "low speed time" */
- CINIT(LOW_SPEED_TIME, LONG, 20),
-
- /* Set the continuation offset.
- *
- * Note there is also a _LARGE version of this key which uses
- * off_t types, allowing for large file offsets on platforms which
- * use larger-than-32-bit off_t's. Look below for RESUME_FROM_LARGE.
- */
- CINIT(RESUME_FROM, LONG, 21),
-
- /* Set cookie in request: */
- CINIT(COOKIE, OBJECTPOINT, 22),
-
- /* This points to a linked list of headers, struct curl_slist kind. This
- list is also used for RTSP (in spite of its name) */
- CINIT(HTTPHEADER, OBJECTPOINT, 23),
-
- /* This points to a linked list of post entries, struct curl_httppost */
- CINIT(HTTPPOST, OBJECTPOINT, 24),
-
- /* name of the file keeping your private SSL-certificate */
- CINIT(SSLCERT, OBJECTPOINT, 25),
-
- /* password for the SSL or SSH private key */
- CINIT(KEYPASSWD, OBJECTPOINT, 26),
-
- /* send TYPE parameter? */
- CINIT(CRLF, LONG, 27),
-
- /* send linked-list of QUOTE commands */
- CINIT(QUOTE, OBJECTPOINT, 28),
-
- /* send FILE * or void * to store headers to, if you use a callback it
- is simply passed to the callback unmodified */
- CINIT(HEADERDATA, OBJECTPOINT, 29),
-
- /* point to a file to read the initial cookies from, also enables
- "cookie awareness" */
- CINIT(COOKIEFILE, OBJECTPOINT, 31),
-
- /* What version to specifically try to use.
- See CURL_SSLVERSION defines below. */
- CINIT(SSLVERSION, LONG, 32),
-
- /* What kind of HTTP time condition to use, see defines */
- CINIT(TIMECONDITION, LONG, 33),
-
- /* Time to use with the above condition. Specified in number of seconds
- since 1 Jan 1970 */
- CINIT(TIMEVALUE, LONG, 34),
-
- /* 35 = OBSOLETE */
-
- /* Custom request, for customizing the get command like
- HTTP: DELETE, TRACE and others
- FTP: to use a different list command
- */
- CINIT(CUSTOMREQUEST, OBJECTPOINT, 36),
-
- /* HTTP request, for odd commands like DELETE, TRACE and others */
- CINIT(STDERR, OBJECTPOINT, 37),
-
- /* 38 is not used */
-
- /* send linked-list of post-transfer QUOTE commands */
- CINIT(POSTQUOTE, OBJECTPOINT, 39),
-
- CINIT(OBSOLETE40, OBJECTPOINT, 40), /* OBSOLETE, do not use! */
-
- CINIT(VERBOSE, LONG, 41), /* talk a lot */
- CINIT(HEADER, LONG, 42), /* throw the header out too */
- CINIT(NOPROGRESS, LONG, 43), /* shut off the progress meter */
- CINIT(NOBODY, LONG, 44), /* use HEAD to get http document */
- CINIT(FAILONERROR, LONG, 45), /* no output on http error codes >= 300 */
- CINIT(UPLOAD, LONG, 46), /* this is an upload */
- CINIT(POST, LONG, 47), /* HTTP POST method */
- CINIT(DIRLISTONLY, LONG, 48), /* bare names when listing directories */
-
- CINIT(APPEND, LONG, 50), /* Append instead of overwrite on upload! */
-
- /* Specify whether to read the user+password from the .netrc or the URL.
- * This must be one of the CURL_NETRC_* enums below. */
- CINIT(NETRC, LONG, 51),
-
- CINIT(FOLLOWLOCATION, LONG, 52), /* use Location: Luke! */
-
- CINIT(TRANSFERTEXT, LONG, 53), /* transfer data in text/ASCII format */
- CINIT(PUT, LONG, 54), /* HTTP PUT */
-
- /* 55 = OBSOLETE */
-
- /* DEPRECATED
- * Function that will be called instead of the internal progress display
- * function. This function should be defined as the curl_progress_callback
- * prototype defines. */
- CINIT(PROGRESSFUNCTION, FUNCTIONPOINT, 56),
-
- /* Data passed to the CURLOPT_PROGRESSFUNCTION and CURLOPT_XFERINFOFUNCTION
- callbacks */
- CINIT(PROGRESSDATA, OBJECTPOINT, 57),
-#define CURLOPT_XFERINFODATA CURLOPT_PROGRESSDATA
-
- /* We want the referrer field set automatically when following locations */
- CINIT(AUTOREFERER, LONG, 58),
-
- /* Port of the proxy, can be set in the proxy string as well with:
- "[host]:[port]" */
- CINIT(PROXYPORT, LONG, 59),
-
- /* size of the POST input data, if strlen() is not good to use */
- CINIT(POSTFIELDSIZE, LONG, 60),
-
- /* tunnel non-http operations through a HTTP proxy */
- CINIT(HTTPPROXYTUNNEL, LONG, 61),
-
- /* Set the interface string to use as outgoing network interface */
- CINIT(INTERFACE, OBJECTPOINT, 62),
-
- /* Set the krb4/5 security level, this also enables krb4/5 awareness. This
- * is a string, 'clear', 'safe', 'confidential' or 'private'. If the string
- * is set but doesn't match one of these, 'private' will be used. */
- CINIT(KRBLEVEL, OBJECTPOINT, 63),
-
- /* Set if we should verify the peer in ssl handshake, set 1 to verify. */
- CINIT(SSL_VERIFYPEER, LONG, 64),
-
- /* The CApath or CAfile used to validate the peer certificate
- this option is used only if SSL_VERIFYPEER is true */
- CINIT(CAINFO, OBJECTPOINT, 65),
-
- /* 66 = OBSOLETE */
- /* 67 = OBSOLETE */
-
- /* Maximum number of http redirects to follow */
- CINIT(MAXREDIRS, LONG, 68),
-
- /* Pass a long set to 1 to get the date of the requested document (if
- possible)! Pass a zero to shut it off. */
- CINIT(FILETIME, LONG, 69),
-
- /* This points to a linked list of telnet options */
- CINIT(TELNETOPTIONS, OBJECTPOINT, 70),
-
- /* Max amount of cached alive connections */
- CINIT(MAXCONNECTS, LONG, 71),
-
- CINIT(OBSOLETE72, LONG, 72), /* OBSOLETE, do not use! */
-
- /* 73 = OBSOLETE */
-
- /* Set to explicitly use a new connection for the upcoming transfer.
- Do not use this unless you're absolutely sure of this, as it makes the
- operation slower and is less friendly for the network. */
- CINIT(FRESH_CONNECT, LONG, 74),
-
- /* Set to explicitly forbid the upcoming transfer's connection to be re-used
- when done. Do not use this unless you're absolutely sure of this, as it
- makes the operation slower and is less friendly for the network. */
- CINIT(FORBID_REUSE, LONG, 75),
-
- /* Set to a file name that contains random data for libcurl to use to
- seed the random engine when doing SSL connects. */
- CINIT(RANDOM_FILE, OBJECTPOINT, 76),
-
- /* Set to the Entropy Gathering Daemon socket pathname */
- CINIT(EGDSOCKET, OBJECTPOINT, 77),
-
- /* Time-out connect operations after this amount of seconds, if connects are
- OK within this time, then fine... This only aborts the connect phase. */
- CINIT(CONNECTTIMEOUT, LONG, 78),
-
- /* Function that will be called to store headers (instead of fwrite). The
- * parameters will use fwrite() syntax, make sure to follow them. */
- CINIT(HEADERFUNCTION, FUNCTIONPOINT, 79),
-
- /* Set this to force the HTTP request to get back to GET. Only really usable
- if POST, PUT or a custom request have been used first.
- */
- CINIT(HTTPGET, LONG, 80),
-
- /* Set if we should verify the Common name from the peer certificate in ssl
- * handshake, set 1 to check existence, 2 to ensure that it matches the
- * provided hostname. */
- CINIT(SSL_VERIFYHOST, LONG, 81),
-
- /* Specify which file name to write all known cookies in after completed
- operation. Set file name to "-" (dash) to make it go to stdout. */
- CINIT(COOKIEJAR, OBJECTPOINT, 82),
-
- /* Specify which SSL ciphers to use */
- CINIT(SSL_CIPHER_LIST, OBJECTPOINT, 83),
-
- /* Specify which HTTP version to use! This must be set to one of the
- CURL_HTTP_VERSION* enums set below. */
- CINIT(HTTP_VERSION, LONG, 84),
-
- /* Specifically switch on or off the FTP engine's use of the EPSV command. By
- default, that one will always be attempted before the more traditional
- PASV command. */
- CINIT(FTP_USE_EPSV, LONG, 85),
-
- /* type of the file keeping your SSL-certificate ("DER", "PEM", "ENG") */
- CINIT(SSLCERTTYPE, OBJECTPOINT, 86),
-
- /* name of the file keeping your private SSL-key */
- CINIT(SSLKEY, OBJECTPOINT, 87),
-
- /* type of the file keeping your private SSL-key ("DER", "PEM", "ENG") */
- CINIT(SSLKEYTYPE, OBJECTPOINT, 88),
-
- /* crypto engine for the SSL-sub system */
- CINIT(SSLENGINE, OBJECTPOINT, 89),
-
- /* set the crypto engine for the SSL-sub system as default
- the param has no meaning...
- */
- CINIT(SSLENGINE_DEFAULT, LONG, 90),
-
- /* Non-zero value means to use the global dns cache */
- CINIT(DNS_USE_GLOBAL_CACHE, LONG, 91), /* DEPRECATED, do not use! */
-
- /* DNS cache timeout */
- CINIT(DNS_CACHE_TIMEOUT, LONG, 92),
-
- /* send linked-list of pre-transfer QUOTE commands */
- CINIT(PREQUOTE, OBJECTPOINT, 93),
-
- /* set the debug function */
- CINIT(DEBUGFUNCTION, FUNCTIONPOINT, 94),
-
- /* set the data for the debug function */
- CINIT(DEBUGDATA, OBJECTPOINT, 95),
-
- /* mark this as start of a cookie session */
- CINIT(COOKIESESSION, LONG, 96),
-
- /* The CApath directory used to validate the peer certificate
- this option is used only if SSL_VERIFYPEER is true */
- CINIT(CAPATH, OBJECTPOINT, 97),
-
- /* Instruct libcurl to use a smaller receive buffer */
- CINIT(BUFFERSIZE, LONG, 98),
-
- /* Instruct libcurl to not use any signal/alarm handlers, even when using
- timeouts. This option is useful for multi-threaded applications.
- See libcurl-the-guide for more background information. */
- CINIT(NOSIGNAL, LONG, 99),
-
- /* Provide a CURLShare for mutexing non-ts data */
- CINIT(SHARE, OBJECTPOINT, 100),
-
- /* indicates type of proxy. accepted values are CURLPROXY_HTTP (default),
- CURLPROXY_SOCKS4, CURLPROXY_SOCKS4A and CURLPROXY_SOCKS5. */
- CINIT(PROXYTYPE, LONG, 101),
-
- /* Set the Accept-Encoding string. Use this to tell a server you would like
- the response to be compressed. Before 7.21.6, this was known as
- CURLOPT_ENCODING */
- CINIT(ACCEPT_ENCODING, OBJECTPOINT, 102),
-
- /* Set pointer to private data */
- CINIT(PRIVATE, OBJECTPOINT, 103),
-
- /* Set aliases for HTTP 200 in the HTTP Response header */
- CINIT(HTTP200ALIASES, OBJECTPOINT, 104),
-
- /* Continue to send authentication (user+password) when following locations,
- even when hostname changed. This can potentially send off the name
- and password to whatever host the server decides. */
- CINIT(UNRESTRICTED_AUTH, LONG, 105),
-
- /* Specifically switch on or off the FTP engine's use of the EPRT command (
- it also disables the LPRT attempt). By default, those ones will always be
- attempted before the good old traditional PORT command. */
- CINIT(FTP_USE_EPRT, LONG, 106),
-
- /* Set this to a bitmask value to enable the particular authentications
- methods you like. Use this in combination with CURLOPT_USERPWD.
- Note that setting multiple bits may cause extra network round-trips. */
- CINIT(HTTPAUTH, LONG, 107),
-
- /* Set the ssl context callback function, currently only for OpenSSL ssl_ctx
- in second argument. The function must be matching the
- curl_ssl_ctx_callback proto. */
- CINIT(SSL_CTX_FUNCTION, FUNCTIONPOINT, 108),
-
- /* Set the userdata for the ssl context callback function's third
- argument */
- CINIT(SSL_CTX_DATA, OBJECTPOINT, 109),
-
- /* FTP Option that causes missing dirs to be created on the remote server.
- In 7.19.4 we introduced the convenience enums for this option using the
- CURLFTP_CREATE_DIR prefix.
- */
- CINIT(FTP_CREATE_MISSING_DIRS, LONG, 110),
-
- /* Set this to a bitmask value to enable the particular authentications
- methods you like. Use this in combination with CURLOPT_PROXYUSERPWD.
- Note that setting multiple bits may cause extra network round-trips. */
- CINIT(PROXYAUTH, LONG, 111),
-
- /* FTP option that changes the timeout, in seconds, associated with
- getting a response. This is different from transfer timeout time and
- essentially places a demand on the FTP server to acknowledge commands
- in a timely manner. */
- CINIT(FTP_RESPONSE_TIMEOUT, LONG, 112),
-#define CURLOPT_SERVER_RESPONSE_TIMEOUT CURLOPT_FTP_RESPONSE_TIMEOUT
-
- /* Set this option to one of the CURL_IPRESOLVE_* defines (see below) to
- tell libcurl to resolve names to those IP versions only. This only has
- affect on systems with support for more than one, i.e IPv4 _and_ IPv6. */
- CINIT(IPRESOLVE, LONG, 113),
-
- /* Set this option to limit the size of a file that will be downloaded from
- an HTTP or FTP server.
-
- Note there is also _LARGE version which adds large file support for
- platforms which have larger off_t sizes. See MAXFILESIZE_LARGE below. */
- CINIT(MAXFILESIZE, LONG, 114),
-
- /* See the comment for INFILESIZE above, but in short, specifies
- * the size of the file being uploaded. -1 means unknown.
- */
- CINIT(INFILESIZE_LARGE, OFF_T, 115),
-
- /* Sets the continuation offset. There is also a LONG version of this;
- * look above for RESUME_FROM.
- */
- CINIT(RESUME_FROM_LARGE, OFF_T, 116),
-
- /* Sets the maximum size of data that will be downloaded from
- * an HTTP or FTP server. See MAXFILESIZE above for the LONG version.
- */
- CINIT(MAXFILESIZE_LARGE, OFF_T, 117),
-
- /* Set this option to the file name of your .netrc file you want libcurl
- to parse (using the CURLOPT_NETRC option). If not set, libcurl will do
- a poor attempt to find the user's home directory and check for a .netrc
- file in there. */
- CINIT(NETRC_FILE, OBJECTPOINT, 118),
-
- /* Enable SSL/TLS for FTP, pick one of:
- CURLUSESSL_TRY - try using SSL, proceed anyway otherwise
- CURLUSESSL_CONTROL - SSL for the control connection or fail
- CURLUSESSL_ALL - SSL for all communication or fail
- */
- CINIT(USE_SSL, LONG, 119),
-
- /* The _LARGE version of the standard POSTFIELDSIZE option */
- CINIT(POSTFIELDSIZE_LARGE, OFF_T, 120),
-
- /* Enable/disable the TCP Nagle algorithm */
- CINIT(TCP_NODELAY, LONG, 121),
-
- /* 122 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
- /* 123 OBSOLETE. Gone in 7.16.0 */
- /* 124 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
- /* 125 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
- /* 126 OBSOLETE, used in 7.12.3. Gone in 7.13.0 */
- /* 127 OBSOLETE. Gone in 7.16.0 */
- /* 128 OBSOLETE. Gone in 7.16.0 */
-
- /* When FTP over SSL/TLS is selected (with CURLOPT_USE_SSL), this option
- can be used to change libcurl's default action which is to first try
- "AUTH SSL" and then "AUTH TLS" in this order, and proceed when a OK
- response has been received.
-
- Available parameters are:
- CURLFTPAUTH_DEFAULT - let libcurl decide
- CURLFTPAUTH_SSL - try "AUTH SSL" first, then TLS
- CURLFTPAUTH_TLS - try "AUTH TLS" first, then SSL
- */
- CINIT(FTPSSLAUTH, LONG, 129),
-
- CINIT(IOCTLFUNCTION, FUNCTIONPOINT, 130),
- CINIT(IOCTLDATA, OBJECTPOINT, 131),
-
- /* 132 OBSOLETE. Gone in 7.16.0 */
- /* 133 OBSOLETE. Gone in 7.16.0 */
-
- /* zero terminated string for pass on to the FTP server when asked for
- "account" info */
- CINIT(FTP_ACCOUNT, OBJECTPOINT, 134),
-
- /* feed cookies into cookie engine */
- CINIT(COOKIELIST, OBJECTPOINT, 135),
-
- /* ignore Content-Length */
- CINIT(IGNORE_CONTENT_LENGTH, LONG, 136),
-
- /* Set to non-zero to skip the IP address received in a 227 PASV FTP server
- response. Typically used for FTP-SSL purposes but is not restricted to
- that. libcurl will then instead use the same IP address it used for the
- control connection. */
- CINIT(FTP_SKIP_PASV_IP, LONG, 137),
-
- /* Select "file method" to use when doing FTP, see the curl_ftpmethod
- above. */
- CINIT(FTP_FILEMETHOD, LONG, 138),
-
- /* Local port number to bind the socket to */
- CINIT(LOCALPORT, LONG, 139),
-
- /* Number of ports to try, including the first one set with LOCALPORT.
- Thus, setting it to 1 will make no additional attempts but the first.
- */
- CINIT(LOCALPORTRANGE, LONG, 140),
-
- /* no transfer, set up connection and let application use the socket by
- extracting it with CURLINFO_LASTSOCKET */
- CINIT(CONNECT_ONLY, LONG, 141),
-
- /* Function that will be called to convert from the
- network encoding (instead of using the iconv calls in libcurl) */
- CINIT(CONV_FROM_NETWORK_FUNCTION, FUNCTIONPOINT, 142),
-
- /* Function that will be called to convert to the
- network encoding (instead of using the iconv calls in libcurl) */
- CINIT(CONV_TO_NETWORK_FUNCTION, FUNCTIONPOINT, 143),
-
- /* Function that will be called to convert from UTF8
- (instead of using the iconv calls in libcurl)
- Note that this is used only for SSL certificate processing */
- CINIT(CONV_FROM_UTF8_FUNCTION, FUNCTIONPOINT, 144),
-
- /* if the connection proceeds too quickly then need to slow it down */
- /* limit-rate: maximum number of bytes per second to send or receive */
- CINIT(MAX_SEND_SPEED_LARGE, OFF_T, 145),
- CINIT(MAX_RECV_SPEED_LARGE, OFF_T, 146),
-
- /* Pointer to command string to send if USER/PASS fails. */
- CINIT(FTP_ALTERNATIVE_TO_USER, OBJECTPOINT, 147),
-
- /* callback function for setting socket options */
- CINIT(SOCKOPTFUNCTION, FUNCTIONPOINT, 148),
- CINIT(SOCKOPTDATA, OBJECTPOINT, 149),
-
- /* set to 0 to disable session ID re-use for this transfer, default is
- enabled (== 1) */
- CINIT(SSL_SESSIONID_CACHE, LONG, 150),
-
- /* allowed SSH authentication methods */
- CINIT(SSH_AUTH_TYPES, LONG, 151),
-
- /* Used by scp/sftp to do public/private key authentication */
- CINIT(SSH_PUBLIC_KEYFILE, OBJECTPOINT, 152),
- CINIT(SSH_PRIVATE_KEYFILE, OBJECTPOINT, 153),
-
- /* Send CCC (Clear Command Channel) after authentication */
- CINIT(FTP_SSL_CCC, LONG, 154),
-
- /* Same as TIMEOUT and CONNECTTIMEOUT, but with ms resolution */
- CINIT(TIMEOUT_MS, LONG, 155),
- CINIT(CONNECTTIMEOUT_MS, LONG, 156),
-
- /* set to zero to disable the libcurl's decoding and thus pass the raw body
- data to the application even when it is encoded/compressed */
- CINIT(HTTP_TRANSFER_DECODING, LONG, 157),
- CINIT(HTTP_CONTENT_DECODING, LONG, 158),
-
- /* Permission used when creating new files and directories on the remote
- server for protocols that support it, SFTP/SCP/FILE */
- CINIT(NEW_FILE_PERMS, LONG, 159),
- CINIT(NEW_DIRECTORY_PERMS, LONG, 160),
-
- /* Set the behaviour of POST when redirecting. Values must be set to one
- of CURL_REDIR* defines below. This used to be called CURLOPT_POST301 */
- CINIT(POSTREDIR, LONG, 161),
-
- /* used by scp/sftp to verify the host's public key */
- CINIT(SSH_HOST_PUBLIC_KEY_MD5, OBJECTPOINT, 162),
-
- /* Callback function for opening socket (instead of socket(2)). Optionally,
- callback is able change the address or refuse to connect returning
- CURL_SOCKET_BAD. The callback should have type
- curl_opensocket_callback */
- CINIT(OPENSOCKETFUNCTION, FUNCTIONPOINT, 163),
- CINIT(OPENSOCKETDATA, OBJECTPOINT, 164),
-
- /* POST volatile input fields. */
- CINIT(COPYPOSTFIELDS, OBJECTPOINT, 165),
-
- /* set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy */
- CINIT(PROXY_TRANSFER_MODE, LONG, 166),
-
- /* Callback function for seeking in the input stream */
- CINIT(SEEKFUNCTION, FUNCTIONPOINT, 167),
- CINIT(SEEKDATA, OBJECTPOINT, 168),
-
- /* CRL file */
- CINIT(CRLFILE, OBJECTPOINT, 169),
-
- /* Issuer certificate */
- CINIT(ISSUERCERT, OBJECTPOINT, 170),
-
- /* (IPv6) Address scope */
- CINIT(ADDRESS_SCOPE, LONG, 171),
-
- /* Collect certificate chain info and allow it to get retrievable with
- CURLINFO_CERTINFO after the transfer is complete. */
- CINIT(CERTINFO, LONG, 172),
-
- /* "name" and "pwd" to use when fetching. */
- CINIT(USERNAME, OBJECTPOINT, 173),
- CINIT(PASSWORD, OBJECTPOINT, 174),
-
- /* "name" and "pwd" to use with Proxy when fetching. */
- CINIT(PROXYUSERNAME, OBJECTPOINT, 175),
- CINIT(PROXYPASSWORD, OBJECTPOINT, 176),
-
- /* Comma separated list of hostnames defining no-proxy zones. These should
- match both hostnames directly, and hostnames within a domain. For
- example, local.com will match local.com and www.local.com, but NOT
- notlocal.com or www.notlocal.com. For compatibility with other
- implementations of this, .local.com will be considered to be the same as
- local.com. A single * is the only valid wildcard, and effectively
- disables the use of proxy. */
- CINIT(NOPROXY, OBJECTPOINT, 177),
-
- /* block size for TFTP transfers */
- CINIT(TFTP_BLKSIZE, LONG, 178),
-
- /* Socks Service */
- CINIT(SOCKS5_GSSAPI_SERVICE, OBJECTPOINT, 179),
-
- /* Socks Service */
- CINIT(SOCKS5_GSSAPI_NEC, LONG, 180),
-
- /* set the bitmask for the protocols that are allowed to be used for the
- transfer, which thus helps the app which takes URLs from users or other
- external inputs and want to restrict what protocol(s) to deal
- with. Defaults to CURLPROTO_ALL. */
- CINIT(PROTOCOLS, LONG, 181),
-
- /* set the bitmask for the protocols that libcurl is allowed to follow to,
- as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
- to be set in both bitmasks to be allowed to get redirected to. Defaults
- to all protocols except FILE and SCP. */
- CINIT(REDIR_PROTOCOLS, LONG, 182),
-
- /* set the SSH knownhost file name to use */
- CINIT(SSH_KNOWNHOSTS, OBJECTPOINT, 183),
-
- /* set the SSH host key callback, must point to a curl_sshkeycallback
- function */
- CINIT(SSH_KEYFUNCTION, FUNCTIONPOINT, 184),
-
- /* set the SSH host key callback custom pointer */
- CINIT(SSH_KEYDATA, OBJECTPOINT, 185),
-
- /* set the SMTP mail originator */
- CINIT(MAIL_FROM, OBJECTPOINT, 186),
-
- /* set the SMTP mail receiver(s) */
- CINIT(MAIL_RCPT, OBJECTPOINT, 187),
-
- /* FTP: send PRET before PASV */
- CINIT(FTP_USE_PRET, LONG, 188),
-
- /* RTSP request method (OPTIONS, SETUP, PLAY, etc...) */
- CINIT(RTSP_REQUEST, LONG, 189),
-
- /* The RTSP session identifier */
- CINIT(RTSP_SESSION_ID, OBJECTPOINT, 190),
-
- /* The RTSP stream URI */
- CINIT(RTSP_STREAM_URI, OBJECTPOINT, 191),
-
- /* The Transport: header to use in RTSP requests */
- CINIT(RTSP_TRANSPORT, OBJECTPOINT, 192),
-
- /* Manually initialize the client RTSP CSeq for this handle */
- CINIT(RTSP_CLIENT_CSEQ, LONG, 193),
-
- /* Manually initialize the server RTSP CSeq for this handle */
- CINIT(RTSP_SERVER_CSEQ, LONG, 194),
-
- /* The stream to pass to INTERLEAVEFUNCTION. */
- CINIT(INTERLEAVEDATA, OBJECTPOINT, 195),
-
- /* Let the application define a custom write method for RTP data */
- CINIT(INTERLEAVEFUNCTION, FUNCTIONPOINT, 196),
-
- /* Turn on wildcard matching */
- CINIT(WILDCARDMATCH, LONG, 197),
-
- /* Directory matching callback called before downloading of an
- individual file (chunk) started */
- CINIT(CHUNK_BGN_FUNCTION, FUNCTIONPOINT, 198),
-
- /* Directory matching callback called after the file (chunk)
- was downloaded, or skipped */
- CINIT(CHUNK_END_FUNCTION, FUNCTIONPOINT, 199),
-
- /* Change match (fnmatch-like) callback for wildcard matching */
- CINIT(FNMATCH_FUNCTION, FUNCTIONPOINT, 200),
-
- /* Let the application define custom chunk data pointer */
- CINIT(CHUNK_DATA, OBJECTPOINT, 201),
-
- /* FNMATCH_FUNCTION user pointer */
- CINIT(FNMATCH_DATA, OBJECTPOINT, 202),
-
- /* send linked-list of name:port:address sets */
- CINIT(RESOLVE, OBJECTPOINT, 203),
-
- /* Set a username for authenticated TLS */
- CINIT(TLSAUTH_USERNAME, OBJECTPOINT, 204),
-
- /* Set a password for authenticated TLS */
- CINIT(TLSAUTH_PASSWORD, OBJECTPOINT, 205),
-
- /* Set authentication type for authenticated TLS */
- CINIT(TLSAUTH_TYPE, OBJECTPOINT, 206),
-
- /* Set to 1 to enable the "TE:" header in HTTP requests to ask for
- compressed transfer-encoded responses. Set to 0 to disable the use of TE:
- in outgoing requests. The current default is 0, but it might change in a
- future libcurl release.
-
- libcurl will ask for the compressed methods it knows of, and if that
- isn't any, it will not ask for transfer-encoding at all even if this
- option is set to 1.
-
- */
- CINIT(TRANSFER_ENCODING, LONG, 207),
-
- /* Callback function for closing socket (instead of close(2)). The callback
- should have type curl_closesocket_callback */
- CINIT(CLOSESOCKETFUNCTION, FUNCTIONPOINT, 208),
- CINIT(CLOSESOCKETDATA, OBJECTPOINT, 209),
-
- /* allow GSSAPI credential delegation */
- CINIT(GSSAPI_DELEGATION, LONG, 210),
-
- /* Set the name servers to use for DNS resolution */
- CINIT(DNS_SERVERS, OBJECTPOINT, 211),
-
- /* Time-out accept operations (currently for FTP only) after this amount
- of miliseconds. */
- CINIT(ACCEPTTIMEOUT_MS, LONG, 212),
-
- /* Set TCP keepalive */
- CINIT(TCP_KEEPALIVE, LONG, 213),
-
- /* non-universal keepalive knobs (Linux, AIX, HP-UX, more) */
- CINIT(TCP_KEEPIDLE, LONG, 214),
- CINIT(TCP_KEEPINTVL, LONG, 215),
-
- /* Enable/disable specific SSL features with a bitmask, see CURLSSLOPT_* */
- CINIT(SSL_OPTIONS, LONG, 216),
-
- /* Set the SMTP auth originator */
- CINIT(MAIL_AUTH, OBJECTPOINT, 217),
-
- /* Enable/disable SASL initial response */
- CINIT(SASL_IR, LONG, 218),
-
- /* Function that will be called instead of the internal progress display
- * function. This function should be defined as the curl_xferinfo_callback
- * prototype defines. (Deprecates CURLOPT_PROGRESSFUNCTION) */
- CINIT(XFERINFOFUNCTION, FUNCTIONPOINT, 219),
-
- /* The XOAUTH2 bearer token */
- CINIT(XOAUTH2_BEARER, OBJECTPOINT, 220),
-
- /* Set the interface string to use as outgoing network
- * interface for DNS requests.
- * Only supported by the c-ares DNS backend */
- CINIT(DNS_INTERFACE, OBJECTPOINT, 221),
-
- /* Set the local IPv4 address to use for outgoing DNS requests.
- * Only supported by the c-ares DNS backend */
- CINIT(DNS_LOCAL_IP4, OBJECTPOINT, 222),
-
- /* Set the local IPv4 address to use for outgoing DNS requests.
- * Only supported by the c-ares DNS backend */
- CINIT(DNS_LOCAL_IP6, OBJECTPOINT, 223),
-
- /* Set authentication options directly */
- CINIT(LOGIN_OPTIONS, OBJECTPOINT, 224),
-
- /* Enable/disable TLS NPN extension (http2 over ssl might fail without) */
- CINIT(SSL_ENABLE_NPN, LONG, 225),
-
- /* Enable/disable TLS ALPN extension (http2 over ssl might fail without) */
- CINIT(SSL_ENABLE_ALPN, LONG, 226),
-
- /* Time to wait for a response to a HTTP request containing an
- * Expect: 100-continue header before sending the data anyway. */
- CINIT(EXPECT_100_TIMEOUT_MS, LONG, 227),
-
- /* This points to a linked list of headers used for proxy requests only,
- struct curl_slist kind */
- CINIT(PROXYHEADER, OBJECTPOINT, 228),
-
- /* Pass in a bitmask of "header options" */
- CINIT(HEADEROPT, LONG, 229),
-
- CURLOPT_LASTENTRY /* the last unused */
-} CURLoption;
-
-#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
- the obsolete stuff removed! */
-
-/* Backwards compatibility with older names */
-/* These are scheduled to disappear by 2011 */
-
-/* This was added in version 7.19.1 */
-#define CURLOPT_POST301 CURLOPT_POSTREDIR
-
-/* These are scheduled to disappear by 2009 */
-
-/* The following were added in 7.17.0 */
-#define CURLOPT_SSLKEYPASSWD CURLOPT_KEYPASSWD
-#define CURLOPT_FTPAPPEND CURLOPT_APPEND
-#define CURLOPT_FTPLISTONLY CURLOPT_DIRLISTONLY
-#define CURLOPT_FTP_SSL CURLOPT_USE_SSL
-
-/* The following were added earlier */
-
-#define CURLOPT_SSLCERTPASSWD CURLOPT_KEYPASSWD
-#define CURLOPT_KRB4LEVEL CURLOPT_KRBLEVEL
-
-#else
-/* This is set if CURL_NO_OLDIES is defined at compile-time */
-#undef CURLOPT_DNS_USE_GLOBAL_CACHE /* soon obsolete */
-#endif
-
-
- /* Below here follows defines for the CURLOPT_IPRESOLVE option. If a host
- name resolves addresses using more than one IP protocol version, this
- option might be handy to force libcurl to use a specific IP version. */
-#define CURL_IPRESOLVE_WHATEVER 0 /* default, resolves addresses to all IP
- versions that your system allows */
-#define CURL_IPRESOLVE_V4 1 /* resolve to ipv4 addresses */
-#define CURL_IPRESOLVE_V6 2 /* resolve to ipv6 addresses */
-
- /* three convenient "aliases" that follow the name scheme better */
-#define CURLOPT_RTSPHEADER CURLOPT_HTTPHEADER
-
- /* These enums are for use with the CURLOPT_HTTP_VERSION option. */
-enum {
- CURL_HTTP_VERSION_NONE, /* setting this means we don't care, and that we'd
- like the library to choose the best possible
- for us! */
- CURL_HTTP_VERSION_1_0, /* please use HTTP 1.0 in the request */
- CURL_HTTP_VERSION_1_1, /* please use HTTP 1.1 in the request */
- CURL_HTTP_VERSION_2_0, /* please use HTTP 2.0 in the request */
-
- CURL_HTTP_VERSION_LAST /* *ILLEGAL* http version */
-};
-
-/*
- * Public API enums for RTSP requests
- */
-enum {
- CURL_RTSPREQ_NONE, /* first in list */
- CURL_RTSPREQ_OPTIONS,
- CURL_RTSPREQ_DESCRIBE,
- CURL_RTSPREQ_ANNOUNCE,
- CURL_RTSPREQ_SETUP,
- CURL_RTSPREQ_PLAY,
- CURL_RTSPREQ_PAUSE,
- CURL_RTSPREQ_TEARDOWN,
- CURL_RTSPREQ_GET_PARAMETER,
- CURL_RTSPREQ_SET_PARAMETER,
- CURL_RTSPREQ_RECORD,
- CURL_RTSPREQ_RECEIVE,
- CURL_RTSPREQ_LAST /* last in list */
-};
-
- /* These enums are for use with the CURLOPT_NETRC option. */
-enum CURL_NETRC_OPTION {
- CURL_NETRC_IGNORED, /* The .netrc will never be read.
- * This is the default. */
- CURL_NETRC_OPTIONAL, /* A user:password in the URL will be preferred
- * to one in the .netrc. */
- CURL_NETRC_REQUIRED, /* A user:password in the URL will be ignored.
- * Unless one is set programmatically, the .netrc
- * will be queried. */
- CURL_NETRC_LAST
-};
-
-enum {
- CURL_SSLVERSION_DEFAULT,
- CURL_SSLVERSION_TLSv1, /* TLS 1.x */
- CURL_SSLVERSION_SSLv2,
- CURL_SSLVERSION_SSLv3,
- CURL_SSLVERSION_TLSv1_0,
- CURL_SSLVERSION_TLSv1_1,
- CURL_SSLVERSION_TLSv1_2,
-
- CURL_SSLVERSION_LAST /* never use, keep last */
-};
-
-enum CURL_TLSAUTH {
- CURL_TLSAUTH_NONE,
- CURL_TLSAUTH_SRP,
- CURL_TLSAUTH_LAST /* never use, keep last */
-};
-
-/* symbols to use with CURLOPT_POSTREDIR.
- CURL_REDIR_POST_301, CURL_REDIR_POST_302 and CURL_REDIR_POST_303
- can be bitwise ORed so that CURL_REDIR_POST_301 | CURL_REDIR_POST_302
- | CURL_REDIR_POST_303 == CURL_REDIR_POST_ALL */
-
-#define CURL_REDIR_GET_ALL 0
-#define CURL_REDIR_POST_301 1
-#define CURL_REDIR_POST_302 2
-#define CURL_REDIR_POST_303 4
-#define CURL_REDIR_POST_ALL \
- (CURL_REDIR_POST_301|CURL_REDIR_POST_302|CURL_REDIR_POST_303)
-
-typedef enum {
- CURL_TIMECOND_NONE,
-
- CURL_TIMECOND_IFMODSINCE,
- CURL_TIMECOND_IFUNMODSINCE,
- CURL_TIMECOND_LASTMOD,
-
- CURL_TIMECOND_LAST
-} curl_TimeCond;
-
-
-/* curl_strequal() and curl_strnequal() are subject for removal in a future
- libcurl, see lib/README.curlx for details */
-CURL_EXTERN int (curl_strequal)(const char *s1, const char *s2);
-CURL_EXTERN int (curl_strnequal)(const char *s1, const char *s2, size_t n);
-
-/* name is uppercase CURLFORM_<name> */
-#ifdef CFINIT
-#undef CFINIT
-#endif
-
-#ifdef CURL_ISOCPP
-#define CFINIT(name) CURLFORM_ ## name
-#else
-/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
-#define CFINIT(name) CURLFORM_/**/name
-#endif
-
-typedef enum {
- CFINIT(NOTHING), /********* the first one is unused ************/
-
- /* */
- CFINIT(COPYNAME),
- CFINIT(PTRNAME),
- CFINIT(NAMELENGTH),
- CFINIT(COPYCONTENTS),
- CFINIT(PTRCONTENTS),
- CFINIT(CONTENTSLENGTH),
- CFINIT(FILECONTENT),
- CFINIT(ARRAY),
- CFINIT(OBSOLETE),
- CFINIT(FILE),
-
- CFINIT(BUFFER),
- CFINIT(BUFFERPTR),
- CFINIT(BUFFERLENGTH),
-
- CFINIT(CONTENTTYPE),
- CFINIT(CONTENTHEADER),
- CFINIT(FILENAME),
- CFINIT(END),
- CFINIT(OBSOLETE2),
-
- CFINIT(STREAM),
-
- CURLFORM_LASTENTRY /* the last unused */
-} CURLformoption;
-
-#undef CFINIT /* done */
-
-/* structure to be used as parameter for CURLFORM_ARRAY */
-struct curl_forms {
- CURLformoption option;
- const char *value;
-};
-
-/* use this for multipart formpost building */
-/* Returns code for curl_formadd()
- *
- * Returns:
- * CURL_FORMADD_OK on success
- * CURL_FORMADD_MEMORY if the FormInfo allocation fails
- * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form
- * CURL_FORMADD_NULL if a null pointer was given for a char
- * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed
- * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used
- * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error)
- * CURL_FORMADD_MEMORY if a curl_httppost struct cannot be allocated
- * CURL_FORMADD_MEMORY if some allocation for string copying failed.
- * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array
- *
- ***************************************************************************/
-typedef enum {
- CURL_FORMADD_OK, /* first, no error */
-
- CURL_FORMADD_MEMORY,
- CURL_FORMADD_OPTION_TWICE,
- CURL_FORMADD_NULL,
- CURL_FORMADD_UNKNOWN_OPTION,
- CURL_FORMADD_INCOMPLETE,
- CURL_FORMADD_ILLEGAL_ARRAY,
- CURL_FORMADD_DISABLED, /* libcurl was built with this disabled */
-
- CURL_FORMADD_LAST /* last */
-} CURLFORMcode;
-
-/*
- * NAME curl_formadd()
- *
- * DESCRIPTION
- *
- * Pretty advanced function for building multi-part formposts. Each invoke
- * adds one part that together construct a full post. Then use
- * CURLOPT_HTTPPOST to send it off to libcurl.
- */
-CURL_EXTERN CURLFORMcode curl_formadd(struct curl_httppost **httppost,
- struct curl_httppost **last_post,
- ...);
-
-/*
- * callback function for curl_formget()
- * The void *arg pointer will be the one passed as second argument to
- * curl_formget().
- * The character buffer passed to it must not be freed.
- * Should return the buffer length passed to it as the argument "len" on
- * success.
- */
-typedef size_t (*curl_formget_callback)(void *arg, const char *buf,
- size_t len);
-
-/*
- * NAME curl_formget()
- *
- * DESCRIPTION
- *
- * Serialize a curl_httppost struct built with curl_formadd().
- * Accepts a void pointer as second argument which will be passed to
- * the curl_formget_callback function.
- * Returns 0 on success.
- */
-CURL_EXTERN int curl_formget(struct curl_httppost *form, void *arg,
- curl_formget_callback append);
-/*
- * NAME curl_formfree()
- *
- * DESCRIPTION
- *
- * Free a multipart formpost previously built with curl_formadd().
- */
-CURL_EXTERN void curl_formfree(struct curl_httppost *form);
-
-/*
- * NAME curl_getenv()
- *
- * DESCRIPTION
- *
- * Returns a malloc()'ed string that MUST be curl_free()ed after usage is
- * complete. DEPRECATED - see lib/README.curlx
- */
-CURL_EXTERN char *curl_getenv(const char *variable);
-
-/*
- * NAME curl_version()
- *
- * DESCRIPTION
- *
- * Returns a static ascii string of the libcurl version.
- */
-CURL_EXTERN char *curl_version(void);
-
-/*
- * NAME curl_easy_escape()
- *
- * DESCRIPTION
- *
- * Escapes URL strings (converts all letters consider illegal in URLs to their
- * %XX versions). This function returns a new allocated string or NULL if an
- * error occurred.
- */
-CURL_EXTERN char *curl_easy_escape(CURL *handle,
- const char *string,
- int length);
-
-/* the previous version: */
-CURL_EXTERN char *curl_escape(const char *string,
- int length);
-
-
-/*
- * NAME curl_easy_unescape()
- *
- * DESCRIPTION
- *
- * Unescapes URL encoding in strings (converts all %XX codes to their 8bit
- * versions). This function returns a new allocated string or NULL if an error
- * occurred.
- * Conversion Note: On non-ASCII platforms the ASCII %XX codes are
- * converted into the host encoding.
- */
-CURL_EXTERN char *curl_easy_unescape(CURL *handle,
- const char *string,
- int length,
- int *outlength);
-
-/* the previous version */
-CURL_EXTERN char *curl_unescape(const char *string,
- int length);
-
-/*
- * NAME curl_free()
- *
- * DESCRIPTION
- *
- * Provided for de-allocation in the same translation unit that did the
- * allocation. Added in libcurl 7.10
- */
-CURL_EXTERN void curl_free(void *p);
-
-/*
- * NAME curl_global_init()
- *
- * DESCRIPTION
- *
- * curl_global_init() should be invoked exactly once for each application that
- * uses libcurl and before any call of other libcurl functions.
- *
- * This function is not thread-safe!
- */
-CURL_EXTERN CURLcode curl_global_init(long flags);
-
-/*
- * NAME curl_global_init_mem()
- *
- * DESCRIPTION
- *
- * curl_global_init() or curl_global_init_mem() should be invoked exactly once
- * for each application that uses libcurl. This function can be used to
- * initialize libcurl and set user defined memory management callback
- * functions. Users can implement memory management routines to check for
- * memory leaks, check for mis-use of the curl library etc. User registered
- * callback routines with be invoked by this library instead of the system
- * memory management routines like malloc, free etc.
- */
-CURL_EXTERN CURLcode curl_global_init_mem(long flags,
- curl_malloc_callback m,
- curl_free_callback f,
- curl_realloc_callback r,
- curl_strdup_callback s,
- curl_calloc_callback c);
-
-/*
- * NAME curl_global_cleanup()
- *
- * DESCRIPTION
- *
- * curl_global_cleanup() should be invoked exactly once for each application
- * that uses libcurl
- */
-CURL_EXTERN void curl_global_cleanup(void);
-
-/* linked-list structure for the CURLOPT_QUOTE option (and other) */
-struct curl_slist {
- char *data;
- struct curl_slist *next;
-};
-
-/*
- * NAME curl_slist_append()
- *
- * DESCRIPTION
- *
- * Appends a string to a linked list. If no list exists, it will be created
- * first. Returns the new list, after appending.
- */
-CURL_EXTERN struct curl_slist *curl_slist_append(struct curl_slist *,
- const char *);
-
-/*
- * NAME curl_slist_free_all()
- *
- * DESCRIPTION
- *
- * free a previously built curl_slist.
- */
-CURL_EXTERN void curl_slist_free_all(struct curl_slist *);
-
-/*
- * NAME curl_getdate()
- *
- * DESCRIPTION
- *
- * Returns the time, in seconds since 1 Jan 1970 of the time string given in
- * the first argument. The time argument in the second parameter is unused
- * and should be set to NULL.
- */
-CURL_EXTERN time_t curl_getdate(const char *p, const time_t *unused);
-
-/* info about the certificate chain, only for OpenSSL builds. Asked
- for with CURLOPT_CERTINFO / CURLINFO_CERTINFO */
-struct curl_certinfo {
- int num_of_certs; /* number of certificates with information */
- struct curl_slist **certinfo; /* for each index in this array, there's a
- linked list with textual information in the
- format "name: value" */
-};
-
-/* enum for the different supported SSL backends */
-typedef enum {
- CURLSSLBACKEND_NONE = 0,
- CURLSSLBACKEND_OPENSSL = 1,
- CURLSSLBACKEND_GNUTLS = 2,
- CURLSSLBACKEND_NSS = 3,
- CURLSSLBACKEND_QSOSSL = 4,
- CURLSSLBACKEND_GSKIT = 5,
- CURLSSLBACKEND_POLARSSL = 6,
- CURLSSLBACKEND_CYASSL = 7,
- CURLSSLBACKEND_SCHANNEL = 8,
- CURLSSLBACKEND_DARWINSSL = 9,
- CURLSSLBACKEND_AXTLS = 10
-} curl_sslbackend;
-
-/* Information about the SSL library used and the respective internal SSL
- handle, which can be used to obtain further information regarding the
- connection. Asked for with CURLINFO_TLS_SESSION. */
-struct curl_tlssessioninfo {
- curl_sslbackend backend;
- void *internals;
-};
-
-#define CURLINFO_STRING 0x100000
-#define CURLINFO_LONG 0x200000
-#define CURLINFO_DOUBLE 0x300000
-#define CURLINFO_SLIST 0x400000
-#define CURLINFO_MASK 0x0fffff
-#define CURLINFO_TYPEMASK 0xf00000
-
-typedef enum {
- CURLINFO_NONE, /* first, never use this */
- CURLINFO_EFFECTIVE_URL = CURLINFO_STRING + 1,
- CURLINFO_RESPONSE_CODE = CURLINFO_LONG + 2,
- CURLINFO_TOTAL_TIME = CURLINFO_DOUBLE + 3,
- CURLINFO_NAMELOOKUP_TIME = CURLINFO_DOUBLE + 4,
- CURLINFO_CONNECT_TIME = CURLINFO_DOUBLE + 5,
- CURLINFO_PRETRANSFER_TIME = CURLINFO_DOUBLE + 6,
- CURLINFO_SIZE_UPLOAD = CURLINFO_DOUBLE + 7,
- CURLINFO_SIZE_DOWNLOAD = CURLINFO_DOUBLE + 8,
- CURLINFO_SPEED_DOWNLOAD = CURLINFO_DOUBLE + 9,
- CURLINFO_SPEED_UPLOAD = CURLINFO_DOUBLE + 10,
- CURLINFO_HEADER_SIZE = CURLINFO_LONG + 11,
- CURLINFO_REQUEST_SIZE = CURLINFO_LONG + 12,
- CURLINFO_SSL_VERIFYRESULT = CURLINFO_LONG + 13,
- CURLINFO_FILETIME = CURLINFO_LONG + 14,
- CURLINFO_CONTENT_LENGTH_DOWNLOAD = CURLINFO_DOUBLE + 15,
- CURLINFO_CONTENT_LENGTH_UPLOAD = CURLINFO_DOUBLE + 16,
- CURLINFO_STARTTRANSFER_TIME = CURLINFO_DOUBLE + 17,
- CURLINFO_CONTENT_TYPE = CURLINFO_STRING + 18,
- CURLINFO_REDIRECT_TIME = CURLINFO_DOUBLE + 19,
- CURLINFO_REDIRECT_COUNT = CURLINFO_LONG + 20,
- CURLINFO_PRIVATE = CURLINFO_STRING + 21,
- CURLINFO_HTTP_CONNECTCODE = CURLINFO_LONG + 22,
- CURLINFO_HTTPAUTH_AVAIL = CURLINFO_LONG + 23,
- CURLINFO_PROXYAUTH_AVAIL = CURLINFO_LONG + 24,
- CURLINFO_OS_ERRNO = CURLINFO_LONG + 25,
- CURLINFO_NUM_CONNECTS = CURLINFO_LONG + 26,
- CURLINFO_SSL_ENGINES = CURLINFO_SLIST + 27,
- CURLINFO_COOKIELIST = CURLINFO_SLIST + 28,
- CURLINFO_LASTSOCKET = CURLINFO_LONG + 29,
- CURLINFO_FTP_ENTRY_PATH = CURLINFO_STRING + 30,
- CURLINFO_REDIRECT_URL = CURLINFO_STRING + 31,
- CURLINFO_PRIMARY_IP = CURLINFO_STRING + 32,
- CURLINFO_APPCONNECT_TIME = CURLINFO_DOUBLE + 33,
- CURLINFO_CERTINFO = CURLINFO_SLIST + 34,
- CURLINFO_CONDITION_UNMET = CURLINFO_LONG + 35,
- CURLINFO_RTSP_SESSION_ID = CURLINFO_STRING + 36,
- CURLINFO_RTSP_CLIENT_CSEQ = CURLINFO_LONG + 37,
- CURLINFO_RTSP_SERVER_CSEQ = CURLINFO_LONG + 38,
- CURLINFO_RTSP_CSEQ_RECV = CURLINFO_LONG + 39,
- CURLINFO_PRIMARY_PORT = CURLINFO_LONG + 40,
- CURLINFO_LOCAL_IP = CURLINFO_STRING + 41,
- CURLINFO_LOCAL_PORT = CURLINFO_LONG + 42,
- CURLINFO_TLS_SESSION = CURLINFO_SLIST + 43,
- /* Fill in new entries below here! */
-
- CURLINFO_LASTONE = 43
-} CURLINFO;
-
-/* CURLINFO_RESPONSE_CODE is the new name for the option previously known as
- CURLINFO_HTTP_CODE */
-#define CURLINFO_HTTP_CODE CURLINFO_RESPONSE_CODE
-
-typedef enum {
- CURLCLOSEPOLICY_NONE, /* first, never use this */
-
- CURLCLOSEPOLICY_OLDEST,
- CURLCLOSEPOLICY_LEAST_RECENTLY_USED,
- CURLCLOSEPOLICY_LEAST_TRAFFIC,
- CURLCLOSEPOLICY_SLOWEST,
- CURLCLOSEPOLICY_CALLBACK,
-
- CURLCLOSEPOLICY_LAST /* last, never use this */
-} curl_closepolicy;
-
-#define CURL_GLOBAL_SSL (1<<0)
-#define CURL_GLOBAL_WIN32 (1<<1)
-#define CURL_GLOBAL_ALL (CURL_GLOBAL_SSL|CURL_GLOBAL_WIN32)
-#define CURL_GLOBAL_NOTHING 0
-#define CURL_GLOBAL_DEFAULT CURL_GLOBAL_ALL
-#define CURL_GLOBAL_ACK_EINTR (1<<2)
-
-
-/*****************************************************************************
- * Setup defines, protos etc for the sharing stuff.
- */
-
-/* Different data locks for a single share */
-typedef enum {
- CURL_LOCK_DATA_NONE = 0,
- /* CURL_LOCK_DATA_SHARE is used internally to say that
- * the locking is just made to change the internal state of the share
- * itself.
- */
- CURL_LOCK_DATA_SHARE,
- CURL_LOCK_DATA_COOKIE,
- CURL_LOCK_DATA_DNS,
- CURL_LOCK_DATA_SSL_SESSION,
- CURL_LOCK_DATA_CONNECT,
- CURL_LOCK_DATA_LAST
-} curl_lock_data;
-
-/* Different lock access types */
-typedef enum {
- CURL_LOCK_ACCESS_NONE = 0, /* unspecified action */
- CURL_LOCK_ACCESS_SHARED = 1, /* for read perhaps */
- CURL_LOCK_ACCESS_SINGLE = 2, /* for write perhaps */
- CURL_LOCK_ACCESS_LAST /* never use */
-} curl_lock_access;
-
-typedef void (*curl_lock_function)(CURL *handle,
- curl_lock_data data,
- curl_lock_access locktype,
- void *userptr);
-typedef void (*curl_unlock_function)(CURL *handle,
- curl_lock_data data,
- void *userptr);
-
-typedef void CURLSH;
-
-typedef enum {
- CURLSHE_OK, /* all is fine */
- CURLSHE_BAD_OPTION, /* 1 */
- CURLSHE_IN_USE, /* 2 */
- CURLSHE_INVALID, /* 3 */
- CURLSHE_NOMEM, /* 4 out of memory */
- CURLSHE_NOT_BUILT_IN, /* 5 feature not present in lib */
- CURLSHE_LAST /* never use */
-} CURLSHcode;
-
-typedef enum {
- CURLSHOPT_NONE, /* don't use */
- CURLSHOPT_SHARE, /* specify a data type to share */
- CURLSHOPT_UNSHARE, /* specify which data type to stop sharing */
- CURLSHOPT_LOCKFUNC, /* pass in a 'curl_lock_function' pointer */
- CURLSHOPT_UNLOCKFUNC, /* pass in a 'curl_unlock_function' pointer */
- CURLSHOPT_USERDATA, /* pass in a user data pointer used in the lock/unlock
- callback functions */
- CURLSHOPT_LAST /* never use */
-} CURLSHoption;
-
-CURL_EXTERN CURLSH *curl_share_init(void);
-CURL_EXTERN CURLSHcode curl_share_setopt(CURLSH *, CURLSHoption option, ...);
-CURL_EXTERN CURLSHcode curl_share_cleanup(CURLSH *);
-
-/****************************************************************************
- * Structures for querying information about the curl library at runtime.
- */
-
-typedef enum {
- CURLVERSION_FIRST,
- CURLVERSION_SECOND,
- CURLVERSION_THIRD,
- CURLVERSION_FOURTH,
- CURLVERSION_LAST /* never actually use this */
-} CURLversion;
-
-/* The 'CURLVERSION_NOW' is the symbolic name meant to be used by
- basically all programs ever that want to get version information. It is
- meant to be a built-in version number for what kind of struct the caller
- expects. If the struct ever changes, we redefine the NOW to another enum
- from above. */
-#define CURLVERSION_NOW CURLVERSION_FOURTH
-
-typedef struct {
- CURLversion age; /* age of the returned struct */
- const char *version; /* LIBCURL_VERSION */
- unsigned int version_num; /* LIBCURL_VERSION_NUM */
- const char *host; /* OS/host/cpu/machine when configured */
- int features; /* bitmask, see defines below */
- const char *ssl_version; /* human readable string */
- long ssl_version_num; /* not used anymore, always 0 */
- const char *libz_version; /* human readable string */
- /* protocols is terminated by an entry with a NULL protoname */
- const char * const *protocols;
-
- /* The fields below this were added in CURLVERSION_SECOND */
- const char *ares;
- int ares_num;
-
- /* This field was added in CURLVERSION_THIRD */
- const char *libidn;
-
- /* These field were added in CURLVERSION_FOURTH */
-
- /* Same as '_libiconv_version' if built with HAVE_ICONV */
- int iconv_ver_num;
-
- const char *libssh_version; /* human readable string */
-
-} curl_version_info_data;
-
-#define CURL_VERSION_IPV6 (1<<0) /* IPv6-enabled */
-#define CURL_VERSION_KERBEROS4 (1<<1) /* kerberos auth is supported */
-#define CURL_VERSION_SSL (1<<2) /* SSL options are present */
-#define CURL_VERSION_LIBZ (1<<3) /* libz features are present */
-#define CURL_VERSION_NTLM (1<<4) /* NTLM auth is supported */
-#define CURL_VERSION_GSSNEGOTIATE (1<<5) /* Negotiate auth support
- (deprecated) */
-#define CURL_VERSION_DEBUG (1<<6) /* built with debug capabilities */
-#define CURL_VERSION_ASYNCHDNS (1<<7) /* asynchronous dns resolves */
-#define CURL_VERSION_SPNEGO (1<<8) /* SPNEGO auth is supported */
-#define CURL_VERSION_LARGEFILE (1<<9) /* supports files bigger than 2GB */
-#define CURL_VERSION_IDN (1<<10) /* International Domain Names support */
-#define CURL_VERSION_SSPI (1<<11) /* SSPI is supported */
-#define CURL_VERSION_CONV (1<<12) /* character conversions supported */
-#define CURL_VERSION_CURLDEBUG (1<<13) /* debug memory tracking supported */
-#define CURL_VERSION_TLSAUTH_SRP (1<<14) /* TLS-SRP auth is supported */
-#define CURL_VERSION_NTLM_WB (1<<15) /* NTLM delegating to winbind helper */
-#define CURL_VERSION_HTTP2 (1<<16) /* HTTP2 support built-in */
-#define CURL_VERSION_GSSAPI (1<<17) /* GSS-API is supported */
-
- /*
- * NAME curl_version_info()
- *
- * DESCRIPTION
- *
- * This function returns a pointer to a static copy of the version info
- * struct. See above.
- */
-CURL_EXTERN curl_version_info_data *curl_version_info(CURLversion);
-
-/*
- * NAME curl_easy_strerror()
- *
- * DESCRIPTION
- *
- * The curl_easy_strerror function may be used to turn a CURLcode value
- * into the equivalent human readable error string. This is useful
- * for printing meaningful error messages.
- */
-CURL_EXTERN const char *curl_easy_strerror(CURLcode);
-
-/*
- * NAME curl_share_strerror()
- *
- * DESCRIPTION
- *
- * The curl_share_strerror function may be used to turn a CURLSHcode value
- * into the equivalent human readable error string. This is useful
- * for printing meaningful error messages.
- */
-CURL_EXTERN const char *curl_share_strerror(CURLSHcode);
-
-/*
- * NAME curl_easy_pause()
- *
- * DESCRIPTION
- *
- * The curl_easy_pause function pauses or unpauses transfers. Select the new
- * state by setting the bitmask, use the convenience defines below.
- *
- */
-CURL_EXTERN CURLcode curl_easy_pause(CURL *handle, int bitmask);
-
-#define CURLPAUSE_RECV (1<<0)
-#define CURLPAUSE_RECV_CONT (0)
-
-#define CURLPAUSE_SEND (1<<2)
-#define CURLPAUSE_SEND_CONT (0)
-
-#define CURLPAUSE_ALL (CURLPAUSE_RECV|CURLPAUSE_SEND)
-#define CURLPAUSE_CONT (CURLPAUSE_RECV_CONT|CURLPAUSE_SEND_CONT)
-
-#ifdef __cplusplus
-}
-#endif
-
-/* unfortunately, the easy.h and multi.h include files need options and info
- stuff before they can be included! */
-#include "easy.h" /* nothing in curl is fun without the easy stuff */
-#include "multi.h"
-
-/* the typechecker doesn't work in C++ (yet) */
-#if defined(__GNUC__) && defined(__GNUC_MINOR__) && \
- ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) && \
- !defined(__cplusplus) && !defined(CURL_DISABLE_TYPECHECK)
-#include "typecheck-gcc.h"
-#else
-#if defined(__STDC__) && (__STDC__ >= 1)
-/* This preprocessor magic that replaces a call with the exact same call is
- only done to make sure application authors pass exactly three arguments
- to these functions. */
-#define curl_easy_setopt(handle,opt,param) curl_easy_setopt(handle,opt,param)
-#define curl_easy_getinfo(handle,info,arg) curl_easy_getinfo(handle,info,arg)
-#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
-#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
-#endif /* __STDC__ >= 1 */
-#endif /* gcc >= 4.3 && !__cplusplus */
-
-#endif /* __CURL_CURL_H */
diff --git a/external/libcurl_android/jni/libcurl/include/curl/curlbuild.h b/external/libcurl_android/jni/libcurl/include/curl/curlbuild.h
deleted file mode 100755
index 15a321ec..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/curlbuild.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/* include/curl/curlbuild.h. Generated from curlbuild.h.in by configure. */
-#ifndef __CURL_CURLBUILD_H
-#define __CURL_CURLBUILD_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
-/* ================================================================ */
-
-/*
- * NOTE 1:
- * -------
- *
- * Nothing in this file is intended to be modified or adjusted by the
- * curl library user nor by the curl library builder.
- *
- * If you think that something actually needs to be changed, adjusted
- * or fixed in this file, then, report it on the libcurl development
- * mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
- *
- * This header file shall only export symbols which are 'curl' or 'CURL'
- * prefixed, otherwise public name space would be polluted.
- *
- * NOTE 2:
- * -------
- *
- * Right now you might be staring at file include/curl/curlbuild.h.in or
- * at file include/curl/curlbuild.h, this is due to the following reason:
- *
- * On systems capable of running the configure script, the configure process
- * will overwrite the distributed include/curl/curlbuild.h file with one that
- * is suitable and specific to the library being configured and built, which
- * is generated from the include/curl/curlbuild.h.in template file.
- *
- */
-
-/* ================================================================ */
-/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
-/* ================================================================ */
-
-#ifdef CURL_SIZEOF_LONG
-#error "CURL_SIZEOF_LONG shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SIZEOF_LONG_already_defined
-#endif
-
-#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
-#error "CURL_TYPEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_already_defined
-#endif
-
-#ifdef CURL_SIZEOF_CURL_SOCKLEN_T
-#error "CURL_SIZEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_already_defined
-#endif
-
-#ifdef CURL_TYPEOF_CURL_OFF_T
-#error "CURL_TYPEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_already_defined
-#endif
-
-#ifdef CURL_FORMAT_CURL_OFF_T
-#error "CURL_FORMAT_CURL_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_already_defined
-#endif
-
-#ifdef CURL_FORMAT_CURL_OFF_TU
-#error "CURL_FORMAT_CURL_OFF_TU shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_already_defined
-#endif
-
-#ifdef CURL_FORMAT_OFF_T
-#error "CURL_FORMAT_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_FORMAT_OFF_T_already_defined
-#endif
-
-#ifdef CURL_SIZEOF_CURL_OFF_T
-#error "CURL_SIZEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_already_defined
-#endif
-
-#ifdef CURL_SUFFIX_CURL_OFF_T
-#error "CURL_SUFFIX_CURL_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_already_defined
-#endif
-
-#ifdef CURL_SUFFIX_CURL_OFF_TU
-#error "CURL_SUFFIX_CURL_OFF_TU shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_already_defined
-#endif
-
-/* ================================================================ */
-/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */
-/* ================================================================ */
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file ws2tcpip.h must be included by the external interface. */
-/* #undef CURL_PULL_WS2TCPIP_H */
-#ifdef CURL_PULL_WS2TCPIP_H
-# ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-# endif
-# include <windows.h>
-# include <winsock2.h>
-# include <ws2tcpip.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file sys/types.h must be included by the external interface. */
-#define CURL_PULL_SYS_TYPES_H 1
-#ifdef CURL_PULL_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file stdint.h must be included by the external interface. */
-#define CURL_PULL_STDINT_H 1
-#ifdef CURL_PULL_STDINT_H
-# include <stdint.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file inttypes.h must be included by the external interface. */
-#define CURL_PULL_INTTYPES_H 1
-#ifdef CURL_PULL_INTTYPES_H
-# include <inttypes.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file sys/socket.h must be included by the external interface. */
-#define CURL_PULL_SYS_SOCKET_H 1
-#ifdef CURL_PULL_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file sys/poll.h must be included by the external interface. */
-/* #undef CURL_PULL_SYS_POLL_H */
-#ifdef CURL_PULL_SYS_POLL_H
-# include <sys/poll.h>
-#endif
-
-/* The size of `long', as computed by sizeof. */
-#define CURL_SIZEOF_LONG 4
-
-/* Integral data type used for curl_socklen_t. */
-#define CURL_TYPEOF_CURL_SOCKLEN_T socklen_t
-
-/* The size of `curl_socklen_t', as computed by sizeof. */
-#define CURL_SIZEOF_CURL_SOCKLEN_T 4
-
-/* Data type definition of curl_socklen_t. */
-typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
-
-/* Signed integral data type used for curl_off_t. */
-#define CURL_TYPEOF_CURL_OFF_T int64_t
-
-/* Data type definition of curl_off_t. */
-typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
-
-/* curl_off_t formatting string directive without "%" conversion specifier. */
-#define CURL_FORMAT_CURL_OFF_T "lld"
-
-/* unsigned curl_off_t formatting string without "%" conversion specifier. */
-#define CURL_FORMAT_CURL_OFF_TU "llu"
-
-/* curl_off_t formatting string directive with "%" conversion specifier. */
-#define CURL_FORMAT_OFF_T "%lld"
-
-/* The size of `curl_off_t', as computed by sizeof. */
-#define CURL_SIZEOF_CURL_OFF_T 8
-
-/* curl_off_t constant suffix. */
-#define CURL_SUFFIX_CURL_OFF_T LL
-
-/* unsigned curl_off_t constant suffix. */
-#define CURL_SUFFIX_CURL_OFF_TU ULL
-
-#endif /* __CURL_CURLBUILD_H */
diff --git a/external/libcurl_android/jni/libcurl/include/curl/curlbuild.h.in b/external/libcurl_android/jni/libcurl/include/curl/curlbuild.h.in
deleted file mode 100755
index e29f195d..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/curlbuild.h.in
+++ /dev/null
@@ -1,197 +0,0 @@
-#ifndef __CURL_CURLBUILD_H
-#define __CURL_CURLBUILD_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
-/* ================================================================ */
-
-/*
- * NOTE 1:
- * -------
- *
- * Nothing in this file is intended to be modified or adjusted by the
- * curl library user nor by the curl library builder.
- *
- * If you think that something actually needs to be changed, adjusted
- * or fixed in this file, then, report it on the libcurl development
- * mailing list: http://cool.haxx.se/mailman/listinfo/curl-library/
- *
- * This header file shall only export symbols which are 'curl' or 'CURL'
- * prefixed, otherwise public name space would be polluted.
- *
- * NOTE 2:
- * -------
- *
- * Right now you might be staring at file include/curl/curlbuild.h.in or
- * at file include/curl/curlbuild.h, this is due to the following reason:
- *
- * On systems capable of running the configure script, the configure process
- * will overwrite the distributed include/curl/curlbuild.h file with one that
- * is suitable and specific to the library being configured and built, which
- * is generated from the include/curl/curlbuild.h.in template file.
- *
- */
-
-/* ================================================================ */
-/* DEFINITION OF THESE SYMBOLS SHALL NOT TAKE PLACE ANYWHERE ELSE */
-/* ================================================================ */
-
-#ifdef CURL_SIZEOF_LONG
-#error "CURL_SIZEOF_LONG shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SIZEOF_LONG_already_defined
-#endif
-
-#ifdef CURL_TYPEOF_CURL_SOCKLEN_T
-#error "CURL_TYPEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_already_defined
-#endif
-
-#ifdef CURL_SIZEOF_CURL_SOCKLEN_T
-#error "CURL_SIZEOF_CURL_SOCKLEN_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_already_defined
-#endif
-
-#ifdef CURL_TYPEOF_CURL_OFF_T
-#error "CURL_TYPEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_already_defined
-#endif
-
-#ifdef CURL_FORMAT_CURL_OFF_T
-#error "CURL_FORMAT_CURL_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_already_defined
-#endif
-
-#ifdef CURL_FORMAT_CURL_OFF_TU
-#error "CURL_FORMAT_CURL_OFF_TU shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_already_defined
-#endif
-
-#ifdef CURL_FORMAT_OFF_T
-#error "CURL_FORMAT_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_FORMAT_OFF_T_already_defined
-#endif
-
-#ifdef CURL_SIZEOF_CURL_OFF_T
-#error "CURL_SIZEOF_CURL_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_already_defined
-#endif
-
-#ifdef CURL_SUFFIX_CURL_OFF_T
-#error "CURL_SUFFIX_CURL_OFF_T shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_already_defined
-#endif
-
-#ifdef CURL_SUFFIX_CURL_OFF_TU
-#error "CURL_SUFFIX_CURL_OFF_TU shall not be defined except in curlbuild.h"
- Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_already_defined
-#endif
-
-/* ================================================================ */
-/* EXTERNAL INTERFACE SETTINGS FOR CONFIGURE CAPABLE SYSTEMS ONLY */
-/* ================================================================ */
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file ws2tcpip.h must be included by the external interface. */
-#undef CURL_PULL_WS2TCPIP_H
-#ifdef CURL_PULL_WS2TCPIP_H
-# ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-# endif
-# include <windows.h>
-# include <winsock2.h>
-# include <ws2tcpip.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file sys/types.h must be included by the external interface. */
-#undef CURL_PULL_SYS_TYPES_H
-#ifdef CURL_PULL_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file stdint.h must be included by the external interface. */
-#undef CURL_PULL_STDINT_H
-#ifdef CURL_PULL_STDINT_H
-# include <stdint.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file inttypes.h must be included by the external interface. */
-#undef CURL_PULL_INTTYPES_H
-#ifdef CURL_PULL_INTTYPES_H
-# include <inttypes.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file sys/socket.h must be included by the external interface. */
-#undef CURL_PULL_SYS_SOCKET_H
-#ifdef CURL_PULL_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-
-/* Configure process defines this to 1 when it finds out that system */
-/* header file sys/poll.h must be included by the external interface. */
-#undef CURL_PULL_SYS_POLL_H
-#ifdef CURL_PULL_SYS_POLL_H
-# include <sys/poll.h>
-#endif
-
-/* The size of `long', as computed by sizeof. */
-#undef CURL_SIZEOF_LONG
-
-/* Integral data type used for curl_socklen_t. */
-#undef CURL_TYPEOF_CURL_SOCKLEN_T
-
-/* The size of `curl_socklen_t', as computed by sizeof. */
-#undef CURL_SIZEOF_CURL_SOCKLEN_T
-
-/* Data type definition of curl_socklen_t. */
-typedef CURL_TYPEOF_CURL_SOCKLEN_T curl_socklen_t;
-
-/* Signed integral data type used for curl_off_t. */
-#undef CURL_TYPEOF_CURL_OFF_T
-
-/* Data type definition of curl_off_t. */
-typedef CURL_TYPEOF_CURL_OFF_T curl_off_t;
-
-/* curl_off_t formatting string directive without "%" conversion specifier. */
-#undef CURL_FORMAT_CURL_OFF_T
-
-/* unsigned curl_off_t formatting string without "%" conversion specifier. */
-#undef CURL_FORMAT_CURL_OFF_TU
-
-/* curl_off_t formatting string directive with "%" conversion specifier. */
-#undef CURL_FORMAT_OFF_T
-
-/* The size of `curl_off_t', as computed by sizeof. */
-#undef CURL_SIZEOF_CURL_OFF_T
-
-/* curl_off_t constant suffix. */
-#undef CURL_SUFFIX_CURL_OFF_T
-
-/* unsigned curl_off_t constant suffix. */
-#undef CURL_SUFFIX_CURL_OFF_TU
-
-#endif /* __CURL_CURLBUILD_H */
diff --git a/external/libcurl_android/jni/libcurl/include/curl/curlrules.h b/external/libcurl_android/jni/libcurl/include/curl/curlrules.h
deleted file mode 100755
index 7c2ede35..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/curlrules.h
+++ /dev/null
@@ -1,262 +0,0 @@
-#ifndef __CURL_CURLRULES_H
-#define __CURL_CURLRULES_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* COMPILE TIME SANITY CHECKS */
-/* ================================================================ */
-
-/*
- * NOTE 1:
- * -------
- *
- * All checks done in this file are intentionally placed in a public
- * header file which is pulled by curl/curl.h when an application is
- * being built using an already built libcurl library. Additionally
- * this file is also included and used when building the library.
- *
- * If compilation fails on this file it is certainly sure that the
- * problem is elsewhere. It could be a problem in the curlbuild.h
- * header file, or simply that you are using different compilation
- * settings than those used to build the library.
- *
- * Nothing in this file is intended to be modified or adjusted by the
- * curl library user nor by the curl library builder.
- *
- * Do not deactivate any check, these are done to make sure that the
- * library is properly built and used.
- *
- * You can find further help on the libcurl development mailing list:
- * http://cool.haxx.se/mailman/listinfo/curl-library/
- *
- * NOTE 2
- * ------
- *
- * Some of the following compile time checks are based on the fact
- * that the dimension of a constant array can not be a negative one.
- * In this way if the compile time verification fails, the compilation
- * will fail issuing an error. The error description wording is compiler
- * dependent but it will be quite similar to one of the following:
- *
- * "negative subscript or subscript is too large"
- * "array must have at least one element"
- * "-1 is an illegal array size"
- * "size of array is negative"
- *
- * If you are building an application which tries to use an already
- * built libcurl library and you are getting this kind of errors on
- * this file, it is a clear indication that there is a mismatch between
- * how the library was built and how you are trying to use it for your
- * application. Your already compiled or binary library provider is the
- * only one who can give you the details you need to properly use it.
- */
-
-/*
- * Verify that some macros are actually defined.
- */
-
-#ifndef CURL_SIZEOF_LONG
-# error "CURL_SIZEOF_LONG definition is missing!"
- Error Compilation_aborted_CURL_SIZEOF_LONG_is_missing
-#endif
-
-#ifndef CURL_TYPEOF_CURL_SOCKLEN_T
-# error "CURL_TYPEOF_CURL_SOCKLEN_T definition is missing!"
- Error Compilation_aborted_CURL_TYPEOF_CURL_SOCKLEN_T_is_missing
-#endif
-
-#ifndef CURL_SIZEOF_CURL_SOCKLEN_T
-# error "CURL_SIZEOF_CURL_SOCKLEN_T definition is missing!"
- Error Compilation_aborted_CURL_SIZEOF_CURL_SOCKLEN_T_is_missing
-#endif
-
-#ifndef CURL_TYPEOF_CURL_OFF_T
-# error "CURL_TYPEOF_CURL_OFF_T definition is missing!"
- Error Compilation_aborted_CURL_TYPEOF_CURL_OFF_T_is_missing
-#endif
-
-#ifndef CURL_FORMAT_CURL_OFF_T
-# error "CURL_FORMAT_CURL_OFF_T definition is missing!"
- Error Compilation_aborted_CURL_FORMAT_CURL_OFF_T_is_missing
-#endif
-
-#ifndef CURL_FORMAT_CURL_OFF_TU
-# error "CURL_FORMAT_CURL_OFF_TU definition is missing!"
- Error Compilation_aborted_CURL_FORMAT_CURL_OFF_TU_is_missing
-#endif
-
-#ifndef CURL_FORMAT_OFF_T
-# error "CURL_FORMAT_OFF_T definition is missing!"
- Error Compilation_aborted_CURL_FORMAT_OFF_T_is_missing
-#endif
-
-#ifndef CURL_SIZEOF_CURL_OFF_T
-# error "CURL_SIZEOF_CURL_OFF_T definition is missing!"
- Error Compilation_aborted_CURL_SIZEOF_CURL_OFF_T_is_missing
-#endif
-
-#ifndef CURL_SUFFIX_CURL_OFF_T
-# error "CURL_SUFFIX_CURL_OFF_T definition is missing!"
- Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_T_is_missing
-#endif
-
-#ifndef CURL_SUFFIX_CURL_OFF_TU
-# error "CURL_SUFFIX_CURL_OFF_TU definition is missing!"
- Error Compilation_aborted_CURL_SUFFIX_CURL_OFF_TU_is_missing
-#endif
-
-/*
- * Macros private to this header file.
- */
-
-#define CurlchkszEQ(t, s) sizeof(t) == s ? 1 : -1
-
-#define CurlchkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1
-
-/*
- * Verify that the size previously defined and expected for long
- * is the same as the one reported by sizeof() at compile time.
- */
-
-typedef char
- __curl_rule_01__
- [CurlchkszEQ(long, CURL_SIZEOF_LONG)];
-
-/*
- * Verify that the size previously defined and expected for
- * curl_off_t is actually the the same as the one reported
- * by sizeof() at compile time.
- */
-
-typedef char
- __curl_rule_02__
- [CurlchkszEQ(curl_off_t, CURL_SIZEOF_CURL_OFF_T)];
-
-/*
- * Verify at compile time that the size of curl_off_t as reported
- * by sizeof() is greater or equal than the one reported for long
- * for the current compilation.
- */
-
-typedef char
- __curl_rule_03__
- [CurlchkszGE(curl_off_t, long)];
-
-/*
- * Verify that the size previously defined and expected for
- * curl_socklen_t is actually the the same as the one reported
- * by sizeof() at compile time.
- */
-
-typedef char
- __curl_rule_04__
- [CurlchkszEQ(curl_socklen_t, CURL_SIZEOF_CURL_SOCKLEN_T)];
-
-/*
- * Verify at compile time that the size of curl_socklen_t as reported
- * by sizeof() is greater or equal than the one reported for int for
- * the current compilation.
- */
-
-typedef char
- __curl_rule_05__
- [CurlchkszGE(curl_socklen_t, int)];
-
-/* ================================================================ */
-/* EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS */
-/* ================================================================ */
-
-/*
- * CURL_ISOCPP and CURL_OFF_T_C definitions are done here in order to allow
- * these to be visible and exported by the external libcurl interface API,
- * while also making them visible to the library internals, simply including
- * curl_setup.h, without actually needing to include curl.h internally.
- * If some day this section would grow big enough, all this should be moved
- * to its own header file.
- */
-
-/*
- * Figure out if we can use the ## preprocessor operator, which is supported
- * by ISO/ANSI C and C++. Some compilers support it without setting __STDC__
- * or __cplusplus so we need to carefully check for them too.
- */
-
-#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) || \
- defined(__HP_aCC) || defined(__BORLANDC__) || defined(__LCC__) || \
- defined(__POCC__) || defined(__SALFORDC__) || defined(__HIGHC__) || \
- defined(__ILEC400__)
- /* This compiler is believed to have an ISO compatible preprocessor */
-#define CURL_ISOCPP
-#else
- /* This compiler is believed NOT to have an ISO compatible preprocessor */
-#undef CURL_ISOCPP
-#endif
-
-/*
- * Macros for minimum-width signed and unsigned curl_off_t integer constants.
- */
-
-#if defined(__BORLANDC__) && (__BORLANDC__ == 0x0551)
-# define __CURL_OFF_T_C_HLPR2(x) x
-# define __CURL_OFF_T_C_HLPR1(x) __CURL_OFF_T_C_HLPR2(x)
-# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \
- __CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_T)
-# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val) ## \
- __CURL_OFF_T_C_HLPR1(CURL_SUFFIX_CURL_OFF_TU)
-#else
-# ifdef CURL_ISOCPP
-# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val ## Suffix
-# else
-# define __CURL_OFF_T_C_HLPR2(Val,Suffix) Val/**/Suffix
-# endif
-# define __CURL_OFF_T_C_HLPR1(Val,Suffix) __CURL_OFF_T_C_HLPR2(Val,Suffix)
-# define CURL_OFF_T_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_T)
-# define CURL_OFF_TU_C(Val) __CURL_OFF_T_C_HLPR1(Val,CURL_SUFFIX_CURL_OFF_TU)
-#endif
-
-/*
- * Get rid of macros private to this header file.
- */
-
-#undef CurlchkszEQ
-#undef CurlchkszGE
-
-/*
- * Get rid of macros not intended to exist beyond this point.
- */
-
-#undef CURL_PULL_WS2TCPIP_H
-#undef CURL_PULL_SYS_TYPES_H
-#undef CURL_PULL_SYS_SOCKET_H
-#undef CURL_PULL_SYS_POLL_H
-#undef CURL_PULL_STDINT_H
-#undef CURL_PULL_INTTYPES_H
-
-#undef CURL_TYPEOF_CURL_SOCKLEN_T
-#undef CURL_TYPEOF_CURL_OFF_T
-
-#ifdef CURL_NO_OLDIES
-#undef CURL_FORMAT_OFF_T /* not required since 7.19.0 - obsoleted in 7.20.0 */
-#endif
-
-#endif /* __CURL_CURLRULES_H */
diff --git a/external/libcurl_android/jni/libcurl/include/curl/curlver.h b/external/libcurl_android/jni/libcurl/include/curl/curlver.h
deleted file mode 100755
index ee9a0589..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/curlver.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef __CURL_CURLVER_H
-#define __CURL_CURLVER_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* This header file contains nothing but libcurl version info, generated by
- a script at release-time. This was made its own header file in 7.11.2 */
-
-/* This is the global package copyright */
-#define LIBCURL_COPYRIGHT "1996 - 2014 Daniel Stenberg, <daniel@haxx.se>."
-
-/* This is the version number of the libcurl package from which this header
- file origins: */
-#define LIBCURL_VERSION "7.38.0"
-
-/* The numeric version number is also available "in parts" by using these
- defines: */
-#define LIBCURL_VERSION_MAJOR 7
-#define LIBCURL_VERSION_MINOR 38
-#define LIBCURL_VERSION_PATCH 0
-
-/* This is the numeric version of the libcurl version number, meant for easier
- parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
- always follow this syntax:
-
- 0xXXYYZZ
-
- Where XX, YY and ZZ are the main version, release and patch numbers in
- hexadecimal (using 8 bits each). All three numbers are always represented
- using two digits. 1.2 would appear as "0x010200" while version 9.11.7
- appears as "0x090b07".
-
- This 6-digit (24 bits) hexadecimal number does not show pre-release number,
- and it is always a greater number in a more recent release. It makes
- comparisons with greater than and less than work.
-*/
-#define LIBCURL_VERSION_NUM 0x072600
-
-/*
- * This is the date and time when the full source package was created. The
- * timestamp is not stored in git, as the timestamp is properly set in the
- * tarballs by the maketgz script.
- *
- * The format of the date should follow this template:
- *
- * "Mon Feb 12 11:35:33 UTC 2007"
- */
-#define LIBCURL_TIMESTAMP "Wed Sep 10 06:19:50 UTC 2014"
-
-#endif /* __CURL_CURLVER_H */
diff --git a/external/libcurl_android/jni/libcurl/include/curl/easy.h b/external/libcurl_android/jni/libcurl/include/curl/easy.h
deleted file mode 100755
index c1e3e760..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/easy.h
+++ /dev/null
@@ -1,102 +0,0 @@
-#ifndef __CURL_EASY_H
-#define __CURL_EASY_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-CURL_EXTERN CURL *curl_easy_init(void);
-CURL_EXTERN CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
-CURL_EXTERN CURLcode curl_easy_perform(CURL *curl);
-CURL_EXTERN void curl_easy_cleanup(CURL *curl);
-
-/*
- * NAME curl_easy_getinfo()
- *
- * DESCRIPTION
- *
- * Request internal information from the curl session with this function. The
- * third argument MUST be a pointer to a long, a pointer to a char * or a
- * pointer to a double (as the documentation describes elsewhere). The data
- * pointed to will be filled in accordingly and can be relied upon only if the
- * function returns CURLE_OK. This function is intended to get used *AFTER* a
- * performed transfer, all results from this function are undefined until the
- * transfer is completed.
- */
-CURL_EXTERN CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...);
-
-
-/*
- * NAME curl_easy_duphandle()
- *
- * DESCRIPTION
- *
- * Creates a new curl session handle with the same options set for the handle
- * passed in. Duplicating a handle could only be a matter of cloning data and
- * options, internal state info and things like persistent connections cannot
- * be transferred. It is useful in multithreaded applications when you can run
- * curl_easy_duphandle() for each new thread to avoid a series of identical
- * curl_easy_setopt() invokes in every thread.
- */
-CURL_EXTERN CURL* curl_easy_duphandle(CURL *curl);
-
-/*
- * NAME curl_easy_reset()
- *
- * DESCRIPTION
- *
- * Re-initializes a CURL handle to the default values. This puts back the
- * handle to the same state as it was in when it was just created.
- *
- * It does keep: live connections, the Session ID cache, the DNS cache and the
- * cookies.
- */
-CURL_EXTERN void curl_easy_reset(CURL *curl);
-
-/*
- * NAME curl_easy_recv()
- *
- * DESCRIPTION
- *
- * Receives data from the connected socket. Use after successful
- * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
- */
-CURL_EXTERN CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen,
- size_t *n);
-
-/*
- * NAME curl_easy_send()
- *
- * DESCRIPTION
- *
- * Sends data over the connected socket. Use after successful
- * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
- */
-CURL_EXTERN CURLcode curl_easy_send(CURL *curl, const void *buffer,
- size_t buflen, size_t *n);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/include/curl/mprintf.h b/external/libcurl_android/jni/libcurl/include/curl/mprintf.h
deleted file mode 100755
index cc9e7f5d..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/mprintf.h
+++ /dev/null
@@ -1,81 +0,0 @@
-#ifndef __CURL_MPRINTF_H
-#define __CURL_MPRINTF_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <stdarg.h>
-#include <stdio.h> /* needed for FILE */
-
-#include "curl.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-CURL_EXTERN int curl_mprintf(const char *format, ...);
-CURL_EXTERN int curl_mfprintf(FILE *fd, const char *format, ...);
-CURL_EXTERN int curl_msprintf(char *buffer, const char *format, ...);
-CURL_EXTERN int curl_msnprintf(char *buffer, size_t maxlength,
- const char *format, ...);
-CURL_EXTERN int curl_mvprintf(const char *format, va_list args);
-CURL_EXTERN int curl_mvfprintf(FILE *fd, const char *format, va_list args);
-CURL_EXTERN int curl_mvsprintf(char *buffer, const char *format, va_list args);
-CURL_EXTERN int curl_mvsnprintf(char *buffer, size_t maxlength,
- const char *format, va_list args);
-CURL_EXTERN char *curl_maprintf(const char *format, ...);
-CURL_EXTERN char *curl_mvaprintf(const char *format, va_list args);
-
-#ifdef _MPRINTF_REPLACE
-# undef printf
-# undef fprintf
-# undef sprintf
-# undef vsprintf
-# undef snprintf
-# undef vprintf
-# undef vfprintf
-# undef vsnprintf
-# undef aprintf
-# undef vaprintf
-# define printf curl_mprintf
-# define fprintf curl_mfprintf
-#ifdef CURLDEBUG
-/* When built with CURLDEBUG we define away the sprintf functions since we
- don't want internal code to be using them */
-# define sprintf sprintf_was_used
-# define vsprintf vsprintf_was_used
-#else
-# define sprintf curl_msprintf
-# define vsprintf curl_mvsprintf
-#endif
-# define snprintf curl_msnprintf
-# define vprintf curl_mvprintf
-# define vfprintf curl_mvfprintf
-# define vsnprintf curl_mvsnprintf
-# define aprintf curl_maprintf
-# define vaprintf curl_mvaprintf
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __CURL_MPRINTF_H */
diff --git a/external/libcurl_android/jni/libcurl/include/curl/multi.h b/external/libcurl_android/jni/libcurl/include/curl/multi.h
deleted file mode 100755
index 3c4acb0f..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/multi.h
+++ /dev/null
@@ -1,399 +0,0 @@
-#ifndef __CURL_MULTI_H
-#define __CURL_MULTI_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-/*
- This is an "external" header file. Don't give away any internals here!
-
- GOALS
-
- o Enable a "pull" interface. The application that uses libcurl decides where
- and when to ask libcurl to get/send data.
-
- o Enable multiple simultaneous transfers in the same thread without making it
- complicated for the application.
-
- o Enable the application to select() on its own file descriptors and curl's
- file descriptors simultaneous easily.
-
-*/
-
-/*
- * This header file should not really need to include "curl.h" since curl.h
- * itself includes this file and we expect user applications to do #include
- * <curl/curl.h> without the need for especially including multi.h.
- *
- * For some reason we added this include here at one point, and rather than to
- * break existing (wrongly written) libcurl applications, we leave it as-is
- * but with this warning attached.
- */
-#include "curl.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void CURLM;
-
-typedef enum {
- CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
- curl_multi_socket*() soon */
- CURLM_OK,
- CURLM_BAD_HANDLE, /* the passed-in handle is not a valid CURLM handle */
- CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
- CURLM_OUT_OF_MEMORY, /* if you ever get this, you're in deep sh*t */
- CURLM_INTERNAL_ERROR, /* this is a libcurl bug */
- CURLM_BAD_SOCKET, /* the passed in socket argument did not match */
- CURLM_UNKNOWN_OPTION, /* curl_multi_setopt() with unsupported option */
- CURLM_ADDED_ALREADY, /* an easy handle already added to a multi handle was
- attempted to get added - again */
- CURLM_LAST
-} CURLMcode;
-
-/* just to make code nicer when using curl_multi_socket() you can now check
- for CURLM_CALL_MULTI_SOCKET too in the same style it works for
- curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
-#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
-
-typedef enum {
- CURLMSG_NONE, /* first, not used */
- CURLMSG_DONE, /* This easy handle has completed. 'result' contains
- the CURLcode of the transfer */
- CURLMSG_LAST /* last, not used */
-} CURLMSG;
-
-struct CURLMsg {
- CURLMSG msg; /* what this message means */
- CURL *easy_handle; /* the handle it concerns */
- union {
- void *whatever; /* message-specific data */
- CURLcode result; /* return code for transfer */
- } data;
-};
-typedef struct CURLMsg CURLMsg;
-
-/* Based on poll(2) structure and values.
- * We don't use pollfd and POLL* constants explicitly
- * to cover platforms without poll(). */
-#define CURL_WAIT_POLLIN 0x0001
-#define CURL_WAIT_POLLPRI 0x0002
-#define CURL_WAIT_POLLOUT 0x0004
-
-struct curl_waitfd {
- curl_socket_t fd;
- short events;
- short revents; /* not supported yet */
-};
-
-/*
- * Name: curl_multi_init()
- *
- * Desc: inititalize multi-style curl usage
- *
- * Returns: a new CURLM handle to use in all 'curl_multi' functions.
- */
-CURL_EXTERN CURLM *curl_multi_init(void);
-
-/*
- * Name: curl_multi_add_handle()
- *
- * Desc: add a standard curl handle to the multi stack
- *
- * Returns: CURLMcode type, general multi error code.
- */
-CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
- CURL *curl_handle);
-
- /*
- * Name: curl_multi_remove_handle()
- *
- * Desc: removes a curl handle from the multi stack again
- *
- * Returns: CURLMcode type, general multi error code.
- */
-CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
- CURL *curl_handle);
-
- /*
- * Name: curl_multi_fdset()
- *
- * Desc: Ask curl for its fd_set sets. The app can use these to select() or
- * poll() on. We want curl_multi_perform() called as soon as one of
- * them are ready.
- *
- * Returns: CURLMcode type, general multi error code.
- */
-CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
- fd_set *read_fd_set,
- fd_set *write_fd_set,
- fd_set *exc_fd_set,
- int *max_fd);
-
-/*
- * Name: curl_multi_wait()
- *
- * Desc: Poll on all fds within a CURLM set as well as any
- * additional fds passed to the function.
- *
- * Returns: CURLMcode type, general multi error code.
- */
-CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle,
- struct curl_waitfd extra_fds[],
- unsigned int extra_nfds,
- int timeout_ms,
- int *ret);
-
- /*
- * Name: curl_multi_perform()
- *
- * Desc: When the app thinks there's data available for curl it calls this
- * function to read/write whatever there is right now. This returns
- * as soon as the reads and writes are done. This function does not
- * require that there actually is data available for reading or that
- * data can be written, it can be called just in case. It returns
- * the number of handles that still transfer data in the second
- * argument's integer-pointer.
- *
- * Returns: CURLMcode type, general multi error code. *NOTE* that this only
- * returns errors etc regarding the whole multi stack. There might
- * still have occurred problems on invidual transfers even when this
- * returns OK.
- */
-CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
- int *running_handles);
-
- /*
- * Name: curl_multi_cleanup()
- *
- * Desc: Cleans up and removes a whole multi stack. It does not free or
- * touch any individual easy handles in any way. We need to define
- * in what state those handles will be if this function is called
- * in the middle of a transfer.
- *
- * Returns: CURLMcode type, general multi error code.
- */
-CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
-
-/*
- * Name: curl_multi_info_read()
- *
- * Desc: Ask the multi handle if there's any messages/informationals from
- * the individual transfers. Messages include informationals such as
- * error code from the transfer or just the fact that a transfer is
- * completed. More details on these should be written down as well.
- *
- * Repeated calls to this function will return a new struct each
- * time, until a special "end of msgs" struct is returned as a signal
- * that there is no more to get at this point.
- *
- * The data the returned pointer points to will not survive calling
- * curl_multi_cleanup().
- *
- * The 'CURLMsg' struct is meant to be very simple and only contain
- * very basic informations. If more involved information is wanted,
- * we will provide the particular "transfer handle" in that struct
- * and that should/could/would be used in subsequent
- * curl_easy_getinfo() calls (or similar). The point being that we
- * must never expose complex structs to applications, as then we'll
- * undoubtably get backwards compatibility problems in the future.
- *
- * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
- * of structs. It also writes the number of messages left in the
- * queue (after this read) in the integer the second argument points
- * to.
- */
-CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
- int *msgs_in_queue);
-
-/*
- * Name: curl_multi_strerror()
- *
- * Desc: The curl_multi_strerror function may be used to turn a CURLMcode
- * value into the equivalent human readable error string. This is
- * useful for printing meaningful error messages.
- *
- * Returns: A pointer to a zero-terminated error message.
- */
-CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
-
-/*
- * Name: curl_multi_socket() and
- * curl_multi_socket_all()
- *
- * Desc: An alternative version of curl_multi_perform() that allows the
- * application to pass in one of the file descriptors that have been
- * detected to have "action" on them and let libcurl perform.
- * See man page for details.
- */
-#define CURL_POLL_NONE 0
-#define CURL_POLL_IN 1
-#define CURL_POLL_OUT 2
-#define CURL_POLL_INOUT 3
-#define CURL_POLL_REMOVE 4
-
-#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
-
-#define CURL_CSELECT_IN 0x01
-#define CURL_CSELECT_OUT 0x02
-#define CURL_CSELECT_ERR 0x04
-
-typedef int (*curl_socket_callback)(CURL *easy, /* easy handle */
- curl_socket_t s, /* socket */
- int what, /* see above */
- void *userp, /* private callback
- pointer */
- void *socketp); /* private socket
- pointer */
-/*
- * Name: curl_multi_timer_callback
- *
- * Desc: Called by libcurl whenever the library detects a change in the
- * maximum number of milliseconds the app is allowed to wait before
- * curl_multi_socket() or curl_multi_perform() must be called
- * (to allow libcurl's timed events to take place).
- *
- * Returns: The callback should return zero.
- */
-typedef int (*curl_multi_timer_callback)(CURLM *multi, /* multi handle */
- long timeout_ms, /* see above */
- void *userp); /* private callback
- pointer */
-
-CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
- int *running_handles);
-
-CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
- curl_socket_t s,
- int ev_bitmask,
- int *running_handles);
-
-CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
- int *running_handles);
-
-#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
-/* This macro below was added in 7.16.3 to push users who recompile to use
- the new curl_multi_socket_action() instead of the old curl_multi_socket()
-*/
-#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
-#endif
-
-/*
- * Name: curl_multi_timeout()
- *
- * Desc: Returns the maximum number of milliseconds the app is allowed to
- * wait before curl_multi_socket() or curl_multi_perform() must be
- * called (to allow libcurl's timed events to take place).
- *
- * Returns: CURLM error code.
- */
-CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
- long *milliseconds);
-
-#undef CINIT /* re-using the same name as in curl.h */
-
-#ifdef CURL_ISOCPP
-#define CINIT(name,type,num) CURLMOPT_ ## name = CURLOPTTYPE_ ## type + num
-#else
-/* The macro "##" is ISO C, we assume pre-ISO C doesn't support it. */
-#define LONG CURLOPTTYPE_LONG
-#define OBJECTPOINT CURLOPTTYPE_OBJECTPOINT
-#define FUNCTIONPOINT CURLOPTTYPE_FUNCTIONPOINT
-#define OFF_T CURLOPTTYPE_OFF_T
-#define CINIT(name,type,number) CURLMOPT_/**/name = type + number
-#endif
-
-typedef enum {
- /* This is the socket callback function pointer */
- CINIT(SOCKETFUNCTION, FUNCTIONPOINT, 1),
-
- /* This is the argument passed to the socket callback */
- CINIT(SOCKETDATA, OBJECTPOINT, 2),
-
- /* set to 1 to enable pipelining for this multi handle */
- CINIT(PIPELINING, LONG, 3),
-
- /* This is the timer callback function pointer */
- CINIT(TIMERFUNCTION, FUNCTIONPOINT, 4),
-
- /* This is the argument passed to the timer callback */
- CINIT(TIMERDATA, OBJECTPOINT, 5),
-
- /* maximum number of entries in the connection cache */
- CINIT(MAXCONNECTS, LONG, 6),
-
- /* maximum number of (pipelining) connections to one host */
- CINIT(MAX_HOST_CONNECTIONS, LONG, 7),
-
- /* maximum number of requests in a pipeline */
- CINIT(MAX_PIPELINE_LENGTH, LONG, 8),
-
- /* a connection with a content-length longer than this
- will not be considered for pipelining */
- CINIT(CONTENT_LENGTH_PENALTY_SIZE, OFF_T, 9),
-
- /* a connection with a chunk length longer than this
- will not be considered for pipelining */
- CINIT(CHUNK_LENGTH_PENALTY_SIZE, OFF_T, 10),
-
- /* a list of site names(+port) that are blacklisted from
- pipelining */
- CINIT(PIPELINING_SITE_BL, OBJECTPOINT, 11),
-
- /* a list of server types that are blacklisted from
- pipelining */
- CINIT(PIPELINING_SERVER_BL, OBJECTPOINT, 12),
-
- /* maximum number of open connections in total */
- CINIT(MAX_TOTAL_CONNECTIONS, LONG, 13),
-
- CURLMOPT_LASTENTRY /* the last unused */
-} CURLMoption;
-
-
-/*
- * Name: curl_multi_setopt()
- *
- * Desc: Sets options for the multi handle.
- *
- * Returns: CURLM error code.
- */
-CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
- CURLMoption option, ...);
-
-
-/*
- * Name: curl_multi_assign()
- *
- * Desc: This function sets an association in the multi handle between the
- * given socket and a private pointer of the application. This is
- * (only) useful for curl_multi_socket uses.
- *
- * Returns: CURLM error code.
- */
-CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
- curl_socket_t sockfd, void *sockp);
-
-#ifdef __cplusplus
-} /* end of extern "C" */
-#endif
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/include/curl/stamp-h2 b/external/libcurl_android/jni/libcurl/include/curl/stamp-h2
deleted file mode 100755
index e4ea1b88..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/stamp-h2
+++ /dev/null
@@ -1 +0,0 @@
-timestamp for include/curl/curlbuild.h
diff --git a/external/libcurl_android/jni/libcurl/include/curl/stdcheaders.h b/external/libcurl_android/jni/libcurl/include/curl/stdcheaders.h
deleted file mode 100755
index ad82ef63..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/stdcheaders.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef __STDC_HEADERS_H
-#define __STDC_HEADERS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <sys/types.h>
-
-size_t fread (void *, size_t, size_t, FILE *);
-size_t fwrite (const void *, size_t, size_t, FILE *);
-
-int strcasecmp(const char *, const char *);
-int strncasecmp(const char *, const char *, size_t);
-
-#endif /* __STDC_HEADERS_H */
diff --git a/external/libcurl_android/jni/libcurl/include/curl/typecheck-gcc.h b/external/libcurl_android/jni/libcurl/include/curl/typecheck-gcc.h
deleted file mode 100755
index 69d41a20..00000000
--- a/external/libcurl_android/jni/libcurl/include/curl/typecheck-gcc.h
+++ /dev/null
@@ -1,610 +0,0 @@
-#ifndef __CURL_TYPECHECK_GCC_H
-#define __CURL_TYPECHECK_GCC_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* wraps curl_easy_setopt() with typechecking */
-
-/* To add a new kind of warning, add an
- * if(_curl_is_sometype_option(_curl_opt))
- * if(!_curl_is_sometype(value))
- * _curl_easy_setopt_err_sometype();
- * block and define _curl_is_sometype_option, _curl_is_sometype and
- * _curl_easy_setopt_err_sometype below
- *
- * NOTE: We use two nested 'if' statements here instead of the && operator, in
- * order to work around gcc bug #32061. It affects only gcc 4.3.x/4.4.x
- * when compiling with -Wlogical-op.
- *
- * To add an option that uses the same type as an existing option, you'll just
- * need to extend the appropriate _curl_*_option macro
- */
-#define curl_easy_setopt(handle, option, value) \
-__extension__ ({ \
- __typeof__ (option) _curl_opt = option; \
- if(__builtin_constant_p(_curl_opt)) { \
- if(_curl_is_long_option(_curl_opt)) \
- if(!_curl_is_long(value)) \
- _curl_easy_setopt_err_long(); \
- if(_curl_is_off_t_option(_curl_opt)) \
- if(!_curl_is_off_t(value)) \
- _curl_easy_setopt_err_curl_off_t(); \
- if(_curl_is_string_option(_curl_opt)) \
- if(!_curl_is_string(value)) \
- _curl_easy_setopt_err_string(); \
- if(_curl_is_write_cb_option(_curl_opt)) \
- if(!_curl_is_write_cb(value)) \
- _curl_easy_setopt_err_write_callback(); \
- if((_curl_opt) == CURLOPT_READFUNCTION) \
- if(!_curl_is_read_cb(value)) \
- _curl_easy_setopt_err_read_cb(); \
- if((_curl_opt) == CURLOPT_IOCTLFUNCTION) \
- if(!_curl_is_ioctl_cb(value)) \
- _curl_easy_setopt_err_ioctl_cb(); \
- if((_curl_opt) == CURLOPT_SOCKOPTFUNCTION) \
- if(!_curl_is_sockopt_cb(value)) \
- _curl_easy_setopt_err_sockopt_cb(); \
- if((_curl_opt) == CURLOPT_OPENSOCKETFUNCTION) \
- if(!_curl_is_opensocket_cb(value)) \
- _curl_easy_setopt_err_opensocket_cb(); \
- if((_curl_opt) == CURLOPT_PROGRESSFUNCTION) \
- if(!_curl_is_progress_cb(value)) \
- _curl_easy_setopt_err_progress_cb(); \
- if((_curl_opt) == CURLOPT_DEBUGFUNCTION) \
- if(!_curl_is_debug_cb(value)) \
- _curl_easy_setopt_err_debug_cb(); \
- if((_curl_opt) == CURLOPT_SSL_CTX_FUNCTION) \
- if(!_curl_is_ssl_ctx_cb(value)) \
- _curl_easy_setopt_err_ssl_ctx_cb(); \
- if(_curl_is_conv_cb_option(_curl_opt)) \
- if(!_curl_is_conv_cb(value)) \
- _curl_easy_setopt_err_conv_cb(); \
- if((_curl_opt) == CURLOPT_SEEKFUNCTION) \
- if(!_curl_is_seek_cb(value)) \
- _curl_easy_setopt_err_seek_cb(); \
- if(_curl_is_cb_data_option(_curl_opt)) \
- if(!_curl_is_cb_data(value)) \
- _curl_easy_setopt_err_cb_data(); \
- if((_curl_opt) == CURLOPT_ERRORBUFFER) \
- if(!_curl_is_error_buffer(value)) \
- _curl_easy_setopt_err_error_buffer(); \
- if((_curl_opt) == CURLOPT_STDERR) \
- if(!_curl_is_FILE(value)) \
- _curl_easy_setopt_err_FILE(); \
- if(_curl_is_postfields_option(_curl_opt)) \
- if(!_curl_is_postfields(value)) \
- _curl_easy_setopt_err_postfields(); \
- if((_curl_opt) == CURLOPT_HTTPPOST) \
- if(!_curl_is_arr((value), struct curl_httppost)) \
- _curl_easy_setopt_err_curl_httpost(); \
- if(_curl_is_slist_option(_curl_opt)) \
- if(!_curl_is_arr((value), struct curl_slist)) \
- _curl_easy_setopt_err_curl_slist(); \
- if((_curl_opt) == CURLOPT_SHARE) \
- if(!_curl_is_ptr((value), CURLSH)) \
- _curl_easy_setopt_err_CURLSH(); \
- } \
- curl_easy_setopt(handle, _curl_opt, value); \
-})
-
-/* wraps curl_easy_getinfo() with typechecking */
-/* FIXME: don't allow const pointers */
-#define curl_easy_getinfo(handle, info, arg) \
-__extension__ ({ \
- __typeof__ (info) _curl_info = info; \
- if(__builtin_constant_p(_curl_info)) { \
- if(_curl_is_string_info(_curl_info)) \
- if(!_curl_is_arr((arg), char *)) \
- _curl_easy_getinfo_err_string(); \
- if(_curl_is_long_info(_curl_info)) \
- if(!_curl_is_arr((arg), long)) \
- _curl_easy_getinfo_err_long(); \
- if(_curl_is_double_info(_curl_info)) \
- if(!_curl_is_arr((arg), double)) \
- _curl_easy_getinfo_err_double(); \
- if(_curl_is_slist_info(_curl_info)) \
- if(!_curl_is_arr((arg), struct curl_slist *)) \
- _curl_easy_getinfo_err_curl_slist(); \
- } \
- curl_easy_getinfo(handle, _curl_info, arg); \
-})
-
-/* TODO: typechecking for curl_share_setopt() and curl_multi_setopt(),
- * for now just make sure that the functions are called with three
- * arguments
- */
-#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
-#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)
-
-
-/* the actual warnings, triggered by calling the _curl_easy_setopt_err*
- * functions */
-
-/* To define a new warning, use _CURL_WARNING(identifier, "message") */
-#define _CURL_WARNING(id, message) \
- static void __attribute__((__warning__(message))) \
- __attribute__((__unused__)) __attribute__((__noinline__)) \
- id(void) { __asm__(""); }
-
-_CURL_WARNING(_curl_easy_setopt_err_long,
- "curl_easy_setopt expects a long argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_curl_off_t,
- "curl_easy_setopt expects a curl_off_t argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_string,
- "curl_easy_setopt expects a "
- "string (char* or char[]) argument for this option"
- )
-_CURL_WARNING(_curl_easy_setopt_err_write_callback,
- "curl_easy_setopt expects a curl_write_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_read_cb,
- "curl_easy_setopt expects a curl_read_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_ioctl_cb,
- "curl_easy_setopt expects a curl_ioctl_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_sockopt_cb,
- "curl_easy_setopt expects a curl_sockopt_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_opensocket_cb,
- "curl_easy_setopt expects a "
- "curl_opensocket_callback argument for this option"
- )
-_CURL_WARNING(_curl_easy_setopt_err_progress_cb,
- "curl_easy_setopt expects a curl_progress_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_debug_cb,
- "curl_easy_setopt expects a curl_debug_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_ssl_ctx_cb,
- "curl_easy_setopt expects a curl_ssl_ctx_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_conv_cb,
- "curl_easy_setopt expects a curl_conv_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_seek_cb,
- "curl_easy_setopt expects a curl_seek_callback argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_cb_data,
- "curl_easy_setopt expects a "
- "private data pointer as argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_error_buffer,
- "curl_easy_setopt expects a "
- "char buffer of CURL_ERROR_SIZE as argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_FILE,
- "curl_easy_setopt expects a FILE* argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_postfields,
- "curl_easy_setopt expects a void* or char* argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_curl_httpost,
- "curl_easy_setopt expects a struct curl_httppost* argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_curl_slist,
- "curl_easy_setopt expects a struct curl_slist* argument for this option")
-_CURL_WARNING(_curl_easy_setopt_err_CURLSH,
- "curl_easy_setopt expects a CURLSH* argument for this option")
-
-_CURL_WARNING(_curl_easy_getinfo_err_string,
- "curl_easy_getinfo expects a pointer to char * for this info")
-_CURL_WARNING(_curl_easy_getinfo_err_long,
- "curl_easy_getinfo expects a pointer to long for this info")
-_CURL_WARNING(_curl_easy_getinfo_err_double,
- "curl_easy_getinfo expects a pointer to double for this info")
-_CURL_WARNING(_curl_easy_getinfo_err_curl_slist,
- "curl_easy_getinfo expects a pointer to struct curl_slist * for this info")
-
-/* groups of curl_easy_setops options that take the same type of argument */
-
-/* To add a new option to one of the groups, just add
- * (option) == CURLOPT_SOMETHING
- * to the or-expression. If the option takes a long or curl_off_t, you don't
- * have to do anything
- */
-
-/* evaluates to true if option takes a long argument */
-#define _curl_is_long_option(option) \
- (0 < (option) && (option) < CURLOPTTYPE_OBJECTPOINT)
-
-#define _curl_is_off_t_option(option) \
- ((option) > CURLOPTTYPE_OFF_T)
-
-/* evaluates to true if option takes a char* argument */
-#define _curl_is_string_option(option) \
- ((option) == CURLOPT_URL || \
- (option) == CURLOPT_PROXY || \
- (option) == CURLOPT_INTERFACE || \
- (option) == CURLOPT_NETRC_FILE || \
- (option) == CURLOPT_USERPWD || \
- (option) == CURLOPT_USERNAME || \
- (option) == CURLOPT_PASSWORD || \
- (option) == CURLOPT_PROXYUSERPWD || \
- (option) == CURLOPT_PROXYUSERNAME || \
- (option) == CURLOPT_PROXYPASSWORD || \
- (option) == CURLOPT_NOPROXY || \
- (option) == CURLOPT_ACCEPT_ENCODING || \
- (option) == CURLOPT_REFERER || \
- (option) == CURLOPT_USERAGENT || \
- (option) == CURLOPT_COOKIE || \
- (option) == CURLOPT_COOKIEFILE || \
- (option) == CURLOPT_COOKIEJAR || \
- (option) == CURLOPT_COOKIELIST || \
- (option) == CURLOPT_FTPPORT || \
- (option) == CURLOPT_FTP_ALTERNATIVE_TO_USER || \
- (option) == CURLOPT_FTP_ACCOUNT || \
- (option) == CURLOPT_RANGE || \
- (option) == CURLOPT_CUSTOMREQUEST || \
- (option) == CURLOPT_SSLCERT || \
- (option) == CURLOPT_SSLCERTTYPE || \
- (option) == CURLOPT_SSLKEY || \
- (option) == CURLOPT_SSLKEYTYPE || \
- (option) == CURLOPT_KEYPASSWD || \
- (option) == CURLOPT_SSLENGINE || \
- (option) == CURLOPT_CAINFO || \
- (option) == CURLOPT_CAPATH || \
- (option) == CURLOPT_RANDOM_FILE || \
- (option) == CURLOPT_EGDSOCKET || \
- (option) == CURLOPT_SSL_CIPHER_LIST || \
- (option) == CURLOPT_KRBLEVEL || \
- (option) == CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 || \
- (option) == CURLOPT_SSH_PUBLIC_KEYFILE || \
- (option) == CURLOPT_SSH_PRIVATE_KEYFILE || \
- (option) == CURLOPT_CRLFILE || \
- (option) == CURLOPT_ISSUERCERT || \
- (option) == CURLOPT_SOCKS5_GSSAPI_SERVICE || \
- (option) == CURLOPT_SSH_KNOWNHOSTS || \
- (option) == CURLOPT_MAIL_FROM || \
- (option) == CURLOPT_RTSP_SESSION_ID || \
- (option) == CURLOPT_RTSP_STREAM_URI || \
- (option) == CURLOPT_RTSP_TRANSPORT || \
- (option) == CURLOPT_XOAUTH2_BEARER || \
- (option) == CURLOPT_DNS_SERVERS || \
- (option) == CURLOPT_DNS_INTERFACE || \
- (option) == CURLOPT_DNS_LOCAL_IP4 || \
- (option) == CURLOPT_DNS_LOCAL_IP6 || \
- (option) == CURLOPT_LOGIN_OPTIONS || \
- 0)
-
-/* evaluates to true if option takes a curl_write_callback argument */
-#define _curl_is_write_cb_option(option) \
- ((option) == CURLOPT_HEADERFUNCTION || \
- (option) == CURLOPT_WRITEFUNCTION)
-
-/* evaluates to true if option takes a curl_conv_callback argument */
-#define _curl_is_conv_cb_option(option) \
- ((option) == CURLOPT_CONV_TO_NETWORK_FUNCTION || \
- (option) == CURLOPT_CONV_FROM_NETWORK_FUNCTION || \
- (option) == CURLOPT_CONV_FROM_UTF8_FUNCTION)
-
-/* evaluates to true if option takes a data argument to pass to a callback */
-#define _curl_is_cb_data_option(option) \
- ((option) == CURLOPT_WRITEDATA || \
- (option) == CURLOPT_READDATA || \
- (option) == CURLOPT_IOCTLDATA || \
- (option) == CURLOPT_SOCKOPTDATA || \
- (option) == CURLOPT_OPENSOCKETDATA || \
- (option) == CURLOPT_PROGRESSDATA || \
- (option) == CURLOPT_HEADERDATA || \
- (option) == CURLOPT_DEBUGDATA || \
- (option) == CURLOPT_SSL_CTX_DATA || \
- (option) == CURLOPT_SEEKDATA || \
- (option) == CURLOPT_PRIVATE || \
- (option) == CURLOPT_SSH_KEYDATA || \
- (option) == CURLOPT_INTERLEAVEDATA || \
- (option) == CURLOPT_CHUNK_DATA || \
- (option) == CURLOPT_FNMATCH_DATA || \
- 0)
-
-/* evaluates to true if option takes a POST data argument (void* or char*) */
-#define _curl_is_postfields_option(option) \
- ((option) == CURLOPT_POSTFIELDS || \
- (option) == CURLOPT_COPYPOSTFIELDS || \
- 0)
-
-/* evaluates to true if option takes a struct curl_slist * argument */
-#define _curl_is_slist_option(option) \
- ((option) == CURLOPT_HTTPHEADER || \
- (option) == CURLOPT_HTTP200ALIASES || \
- (option) == CURLOPT_QUOTE || \
- (option) == CURLOPT_POSTQUOTE || \
- (option) == CURLOPT_PREQUOTE || \
- (option) == CURLOPT_TELNETOPTIONS || \
- (option) == CURLOPT_MAIL_RCPT || \
- 0)
-
-/* groups of curl_easy_getinfo infos that take the same type of argument */
-
-/* evaluates to true if info expects a pointer to char * argument */
-#define _curl_is_string_info(info) \
- (CURLINFO_STRING < (info) && (info) < CURLINFO_LONG)
-
-/* evaluates to true if info expects a pointer to long argument */
-#define _curl_is_long_info(info) \
- (CURLINFO_LONG < (info) && (info) < CURLINFO_DOUBLE)
-
-/* evaluates to true if info expects a pointer to double argument */
-#define _curl_is_double_info(info) \
- (CURLINFO_DOUBLE < (info) && (info) < CURLINFO_SLIST)
-
-/* true if info expects a pointer to struct curl_slist * argument */
-#define _curl_is_slist_info(info) \
- (CURLINFO_SLIST < (info))
-
-
-/* typecheck helpers -- check whether given expression has requested type*/
-
-/* For pointers, you can use the _curl_is_ptr/_curl_is_arr macros,
- * otherwise define a new macro. Search for __builtin_types_compatible_p
- * in the GCC manual.
- * NOTE: these macros MUST NOT EVALUATE their arguments! The argument is
- * the actual expression passed to the curl_easy_setopt macro. This
- * means that you can only apply the sizeof and __typeof__ operators, no
- * == or whatsoever.
- */
-
-/* XXX: should evaluate to true iff expr is a pointer */
-#define _curl_is_any_ptr(expr) \
- (sizeof(expr) == sizeof(void*))
-
-/* evaluates to true if expr is NULL */
-/* XXX: must not evaluate expr, so this check is not accurate */
-#define _curl_is_NULL(expr) \
- (__builtin_types_compatible_p(__typeof__(expr), __typeof__(NULL)))
-
-/* evaluates to true if expr is type*, const type* or NULL */
-#define _curl_is_ptr(expr, type) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), type *) || \
- __builtin_types_compatible_p(__typeof__(expr), const type *))
-
-/* evaluates to true if expr is one of type[], type*, NULL or const type* */
-#define _curl_is_arr(expr, type) \
- (_curl_is_ptr((expr), type) || \
- __builtin_types_compatible_p(__typeof__(expr), type []))
-
-/* evaluates to true if expr is a string */
-#define _curl_is_string(expr) \
- (_curl_is_arr((expr), char) || \
- _curl_is_arr((expr), signed char) || \
- _curl_is_arr((expr), unsigned char))
-
-/* evaluates to true if expr is a long (no matter the signedness)
- * XXX: for now, int is also accepted (and therefore short and char, which
- * are promoted to int when passed to a variadic function) */
-#define _curl_is_long(expr) \
- (__builtin_types_compatible_p(__typeof__(expr), long) || \
- __builtin_types_compatible_p(__typeof__(expr), signed long) || \
- __builtin_types_compatible_p(__typeof__(expr), unsigned long) || \
- __builtin_types_compatible_p(__typeof__(expr), int) || \
- __builtin_types_compatible_p(__typeof__(expr), signed int) || \
- __builtin_types_compatible_p(__typeof__(expr), unsigned int) || \
- __builtin_types_compatible_p(__typeof__(expr), short) || \
- __builtin_types_compatible_p(__typeof__(expr), signed short) || \
- __builtin_types_compatible_p(__typeof__(expr), unsigned short) || \
- __builtin_types_compatible_p(__typeof__(expr), char) || \
- __builtin_types_compatible_p(__typeof__(expr), signed char) || \
- __builtin_types_compatible_p(__typeof__(expr), unsigned char))
-
-/* evaluates to true if expr is of type curl_off_t */
-#define _curl_is_off_t(expr) \
- (__builtin_types_compatible_p(__typeof__(expr), curl_off_t))
-
-/* evaluates to true if expr is abuffer suitable for CURLOPT_ERRORBUFFER */
-/* XXX: also check size of an char[] array? */
-#define _curl_is_error_buffer(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), char *) || \
- __builtin_types_compatible_p(__typeof__(expr), char[]))
-
-/* evaluates to true if expr is of type (const) void* or (const) FILE* */
-#if 0
-#define _curl_is_cb_data(expr) \
- (_curl_is_ptr((expr), void) || \
- _curl_is_ptr((expr), FILE))
-#else /* be less strict */
-#define _curl_is_cb_data(expr) \
- _curl_is_any_ptr(expr)
-#endif
-
-/* evaluates to true if expr is of type FILE* */
-#define _curl_is_FILE(expr) \
- (__builtin_types_compatible_p(__typeof__(expr), FILE *))
-
-/* evaluates to true if expr can be passed as POST data (void* or char*) */
-#define _curl_is_postfields(expr) \
- (_curl_is_ptr((expr), void) || \
- _curl_is_arr((expr), char))
-
-/* FIXME: the whole callback checking is messy...
- * The idea is to tolerate char vs. void and const vs. not const
- * pointers in arguments at least
- */
-/* helper: __builtin_types_compatible_p distinguishes between functions and
- * function pointers, hide it */
-#define _curl_callback_compatible(func, type) \
- (__builtin_types_compatible_p(__typeof__(func), type) || \
- __builtin_types_compatible_p(__typeof__(func), type*))
-
-/* evaluates to true if expr is of type curl_read_callback or "similar" */
-#define _curl_is_read_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), __typeof__(fread)) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_read_callback) || \
- _curl_callback_compatible((expr), _curl_read_callback1) || \
- _curl_callback_compatible((expr), _curl_read_callback2) || \
- _curl_callback_compatible((expr), _curl_read_callback3) || \
- _curl_callback_compatible((expr), _curl_read_callback4) || \
- _curl_callback_compatible((expr), _curl_read_callback5) || \
- _curl_callback_compatible((expr), _curl_read_callback6))
-typedef size_t (_curl_read_callback1)(char *, size_t, size_t, void*);
-typedef size_t (_curl_read_callback2)(char *, size_t, size_t, const void*);
-typedef size_t (_curl_read_callback3)(char *, size_t, size_t, FILE*);
-typedef size_t (_curl_read_callback4)(void *, size_t, size_t, void*);
-typedef size_t (_curl_read_callback5)(void *, size_t, size_t, const void*);
-typedef size_t (_curl_read_callback6)(void *, size_t, size_t, FILE*);
-
-/* evaluates to true if expr is of type curl_write_callback or "similar" */
-#define _curl_is_write_cb(expr) \
- (_curl_is_read_cb(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), __typeof__(fwrite)) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_write_callback) || \
- _curl_callback_compatible((expr), _curl_write_callback1) || \
- _curl_callback_compatible((expr), _curl_write_callback2) || \
- _curl_callback_compatible((expr), _curl_write_callback3) || \
- _curl_callback_compatible((expr), _curl_write_callback4) || \
- _curl_callback_compatible((expr), _curl_write_callback5) || \
- _curl_callback_compatible((expr), _curl_write_callback6))
-typedef size_t (_curl_write_callback1)(const char *, size_t, size_t, void*);
-typedef size_t (_curl_write_callback2)(const char *, size_t, size_t,
- const void*);
-typedef size_t (_curl_write_callback3)(const char *, size_t, size_t, FILE*);
-typedef size_t (_curl_write_callback4)(const void *, size_t, size_t, void*);
-typedef size_t (_curl_write_callback5)(const void *, size_t, size_t,
- const void*);
-typedef size_t (_curl_write_callback6)(const void *, size_t, size_t, FILE*);
-
-/* evaluates to true if expr is of type curl_ioctl_callback or "similar" */
-#define _curl_is_ioctl_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_ioctl_callback) || \
- _curl_callback_compatible((expr), _curl_ioctl_callback1) || \
- _curl_callback_compatible((expr), _curl_ioctl_callback2) || \
- _curl_callback_compatible((expr), _curl_ioctl_callback3) || \
- _curl_callback_compatible((expr), _curl_ioctl_callback4))
-typedef curlioerr (_curl_ioctl_callback1)(CURL *, int, void*);
-typedef curlioerr (_curl_ioctl_callback2)(CURL *, int, const void*);
-typedef curlioerr (_curl_ioctl_callback3)(CURL *, curliocmd, void*);
-typedef curlioerr (_curl_ioctl_callback4)(CURL *, curliocmd, const void*);
-
-/* evaluates to true if expr is of type curl_sockopt_callback or "similar" */
-#define _curl_is_sockopt_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_sockopt_callback) || \
- _curl_callback_compatible((expr), _curl_sockopt_callback1) || \
- _curl_callback_compatible((expr), _curl_sockopt_callback2))
-typedef int (_curl_sockopt_callback1)(void *, curl_socket_t, curlsocktype);
-typedef int (_curl_sockopt_callback2)(const void *, curl_socket_t,
- curlsocktype);
-
-/* evaluates to true if expr is of type curl_opensocket_callback or
- "similar" */
-#define _curl_is_opensocket_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_opensocket_callback) ||\
- _curl_callback_compatible((expr), _curl_opensocket_callback1) || \
- _curl_callback_compatible((expr), _curl_opensocket_callback2) || \
- _curl_callback_compatible((expr), _curl_opensocket_callback3) || \
- _curl_callback_compatible((expr), _curl_opensocket_callback4))
-typedef curl_socket_t (_curl_opensocket_callback1)
- (void *, curlsocktype, struct curl_sockaddr *);
-typedef curl_socket_t (_curl_opensocket_callback2)
- (void *, curlsocktype, const struct curl_sockaddr *);
-typedef curl_socket_t (_curl_opensocket_callback3)
- (const void *, curlsocktype, struct curl_sockaddr *);
-typedef curl_socket_t (_curl_opensocket_callback4)
- (const void *, curlsocktype, const struct curl_sockaddr *);
-
-/* evaluates to true if expr is of type curl_progress_callback or "similar" */
-#define _curl_is_progress_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_progress_callback) || \
- _curl_callback_compatible((expr), _curl_progress_callback1) || \
- _curl_callback_compatible((expr), _curl_progress_callback2))
-typedef int (_curl_progress_callback1)(void *,
- double, double, double, double);
-typedef int (_curl_progress_callback2)(const void *,
- double, double, double, double);
-
-/* evaluates to true if expr is of type curl_debug_callback or "similar" */
-#define _curl_is_debug_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_debug_callback) || \
- _curl_callback_compatible((expr), _curl_debug_callback1) || \
- _curl_callback_compatible((expr), _curl_debug_callback2) || \
- _curl_callback_compatible((expr), _curl_debug_callback3) || \
- _curl_callback_compatible((expr), _curl_debug_callback4) || \
- _curl_callback_compatible((expr), _curl_debug_callback5) || \
- _curl_callback_compatible((expr), _curl_debug_callback6) || \
- _curl_callback_compatible((expr), _curl_debug_callback7) || \
- _curl_callback_compatible((expr), _curl_debug_callback8))
-typedef int (_curl_debug_callback1) (CURL *,
- curl_infotype, char *, size_t, void *);
-typedef int (_curl_debug_callback2) (CURL *,
- curl_infotype, char *, size_t, const void *);
-typedef int (_curl_debug_callback3) (CURL *,
- curl_infotype, const char *, size_t, void *);
-typedef int (_curl_debug_callback4) (CURL *,
- curl_infotype, const char *, size_t, const void *);
-typedef int (_curl_debug_callback5) (CURL *,
- curl_infotype, unsigned char *, size_t, void *);
-typedef int (_curl_debug_callback6) (CURL *,
- curl_infotype, unsigned char *, size_t, const void *);
-typedef int (_curl_debug_callback7) (CURL *,
- curl_infotype, const unsigned char *, size_t, void *);
-typedef int (_curl_debug_callback8) (CURL *,
- curl_infotype, const unsigned char *, size_t, const void *);
-
-/* evaluates to true if expr is of type curl_ssl_ctx_callback or "similar" */
-/* this is getting even messier... */
-#define _curl_is_ssl_ctx_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_ssl_ctx_callback) || \
- _curl_callback_compatible((expr), _curl_ssl_ctx_callback1) || \
- _curl_callback_compatible((expr), _curl_ssl_ctx_callback2) || \
- _curl_callback_compatible((expr), _curl_ssl_ctx_callback3) || \
- _curl_callback_compatible((expr), _curl_ssl_ctx_callback4) || \
- _curl_callback_compatible((expr), _curl_ssl_ctx_callback5) || \
- _curl_callback_compatible((expr), _curl_ssl_ctx_callback6) || \
- _curl_callback_compatible((expr), _curl_ssl_ctx_callback7) || \
- _curl_callback_compatible((expr), _curl_ssl_ctx_callback8))
-typedef CURLcode (_curl_ssl_ctx_callback1)(CURL *, void *, void *);
-typedef CURLcode (_curl_ssl_ctx_callback2)(CURL *, void *, const void *);
-typedef CURLcode (_curl_ssl_ctx_callback3)(CURL *, const void *, void *);
-typedef CURLcode (_curl_ssl_ctx_callback4)(CURL *, const void *, const void *);
-#ifdef HEADER_SSL_H
-/* hack: if we included OpenSSL's ssl.h, we know about SSL_CTX
- * this will of course break if we're included before OpenSSL headers...
- */
-typedef CURLcode (_curl_ssl_ctx_callback5)(CURL *, SSL_CTX, void *);
-typedef CURLcode (_curl_ssl_ctx_callback6)(CURL *, SSL_CTX, const void *);
-typedef CURLcode (_curl_ssl_ctx_callback7)(CURL *, const SSL_CTX, void *);
-typedef CURLcode (_curl_ssl_ctx_callback8)(CURL *, const SSL_CTX,
- const void *);
-#else
-typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback5;
-typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback6;
-typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback7;
-typedef _curl_ssl_ctx_callback1 _curl_ssl_ctx_callback8;
-#endif
-
-/* evaluates to true if expr is of type curl_conv_callback or "similar" */
-#define _curl_is_conv_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_conv_callback) || \
- _curl_callback_compatible((expr), _curl_conv_callback1) || \
- _curl_callback_compatible((expr), _curl_conv_callback2) || \
- _curl_callback_compatible((expr), _curl_conv_callback3) || \
- _curl_callback_compatible((expr), _curl_conv_callback4))
-typedef CURLcode (*_curl_conv_callback1)(char *, size_t length);
-typedef CURLcode (*_curl_conv_callback2)(const char *, size_t length);
-typedef CURLcode (*_curl_conv_callback3)(void *, size_t length);
-typedef CURLcode (*_curl_conv_callback4)(const void *, size_t length);
-
-/* evaluates to true if expr is of type curl_seek_callback or "similar" */
-#define _curl_is_seek_cb(expr) \
- (_curl_is_NULL(expr) || \
- __builtin_types_compatible_p(__typeof__(expr), curl_seek_callback) || \
- _curl_callback_compatible((expr), _curl_seek_callback1) || \
- _curl_callback_compatible((expr), _curl_seek_callback2))
-typedef CURLcode (*_curl_seek_callback1)(void *, curl_off_t, int);
-typedef CURLcode (*_curl_seek_callback2)(const void *, curl_off_t, int);
-
-
-#endif /* __CURL_TYPECHECK_GCC_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/chkhostname-curl_gethostname.Po b/external/libcurl_android/jni/libcurl/lib/.deps/chkhostname-curl_gethostname.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/chkhostname-curl_gethostname.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/curl-nonblock.Po b/external/libcurl_android/jni/libcurl/lib/.deps/curl-nonblock.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/curl-nonblock.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/curl-rawstr.Po b/external/libcurl_android/jni/libcurl/lib/.deps/curl-rawstr.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/curl-rawstr.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/curl-strdup.Po b/external/libcurl_android/jni/libcurl/lib/.deps/curl-strdup.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/curl-strdup.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/curl-strtoofft.Po b/external/libcurl_android/jni/libcurl/lib/.deps/curl-strtoofft.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/curl-strtoofft.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/curl-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/curl-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/curl-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-base64.Po b/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-base64.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-base64.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-memdebug.Po b/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-memdebug.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-memdebug.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-mprintf.Po b/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-mprintf.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-mprintf.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-nonblock.Po b/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-nonblock.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-nonblock.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-strequal.Po b/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-strequal.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-strequal.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-strtoofft.Po b/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-strtoofft.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-strtoofft.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-timeval.Po b/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-timeval.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-timeval.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/fake_ntlm-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-base64.Po b/external/libcurl_android/jni/libcurl/lib/.deps/getpart-base64.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-base64.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-memdebug.Po b/external/libcurl_android/jni/libcurl/lib/.deps/getpart-memdebug.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-memdebug.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-mprintf.Po b/external/libcurl_android/jni/libcurl/lib/.deps/getpart-mprintf.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-mprintf.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-nonblock.Po b/external/libcurl_android/jni/libcurl/lib/.deps/getpart-nonblock.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-nonblock.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-strequal.Po b/external/libcurl_android/jni/libcurl/lib/.deps/getpart-strequal.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-strequal.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-strtoofft.Po b/external/libcurl_android/jni/libcurl/lib/.deps/getpart-strtoofft.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-strtoofft.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-timeval.Po b/external/libcurl_android/jni/libcurl/lib/.deps/getpart-timeval.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-timeval.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/getpart-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/getpart-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1501-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1501-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1501-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1502-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1502-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1502-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1503-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1503-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1503-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1504-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1504-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1504-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1505-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1505-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1505-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1506-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1506-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1506-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1507-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1507-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1507-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1508-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1508-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1508-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1509-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1509-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1509-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1510-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1510-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1510-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1511-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1511-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1511-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1512-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1512-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1512-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1513-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1513-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1513-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1514-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1514-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1514-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1515-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1515-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1515-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1525-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1525-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1525-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1526-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1526-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1526-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1527-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1527-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1527-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1528-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1528-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1528-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib1900-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib1900-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib1900-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib2033-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib2033-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib2033-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib502-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib502-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib502-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib503-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib503-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib503-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib504-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib504-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib504-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib507-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib507-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib507-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib518-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib518-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib518-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib525-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib525-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib525-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib526-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib526-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib526-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib527-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib527-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib527-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib529-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib529-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib529-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib530-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib530-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib530-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib532-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib532-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib532-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib533-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib533-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib533-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib536-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib536-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib536-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib537-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib537-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib537-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib540-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib540-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib540-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib552-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib552-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib552-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib555-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib555-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib555-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib560-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib560-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib560-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib564-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib564-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib564-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib571-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib571-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib571-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib573-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib573-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib573-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib575-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib575-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib575-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib582-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib582-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib582-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib591-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib591-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib591-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/lib597-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/lib597-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/lib597-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-amigaos.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-amigaos.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-amigaos.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-asyn-ares.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-asyn-ares.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-asyn-ares.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-asyn-thread.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-asyn-thread.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-asyn-thread.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-base64.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-base64.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-base64.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-bundles.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-bundles.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-bundles.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-conncache.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-conncache.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-conncache.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-connect.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-connect.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-connect.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-content_encoding.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-content_encoding.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-content_encoding.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-cookie.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-cookie.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-cookie.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_addrinfo.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_addrinfo.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_addrinfo.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_fnmatch.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_fnmatch.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_fnmatch.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_gethostname.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_gethostname.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_gethostname.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_gssapi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_gssapi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_gssapi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_memrchr.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_memrchr.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_memrchr.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_multibyte.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_multibyte.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_multibyte.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_core.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_core.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_core.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_msgs.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_msgs.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_msgs.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_wb.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_wb.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_ntlm_wb.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_rtmp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_rtmp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_rtmp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sasl.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sasl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sasl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sasl_sspi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sasl_sspi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sasl_sspi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sspi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sspi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_sspi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_threads.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_threads.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-curl_threads.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-dict.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-dict.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-dict.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-dotdot.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-dotdot.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-dotdot.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-easy.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-easy.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-easy.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-escape.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-escape.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-escape.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-file.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-file.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-file.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-fileinfo.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-fileinfo.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-fileinfo.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-formdata.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-formdata.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-formdata.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ftp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ftp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ftp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ftplistparser.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ftplistparser.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ftplistparser.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-getenv.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-getenv.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-getenv.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-getinfo.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-getinfo.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-getinfo.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-gopher.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-gopher.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-gopher.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hash.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hash.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hash.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hmac.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hmac.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hmac.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostasyn.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostasyn.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostasyn.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostcheck.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostcheck.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostcheck.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip4.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip4.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip4.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip6.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip6.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostip6.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostsyn.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostsyn.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-hostsyn.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http2.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http2.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http2.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_chunks.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_chunks.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_chunks.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_digest.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_digest.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_digest.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_negotiate.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_negotiate.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_negotiate.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_negotiate_sspi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_negotiate_sspi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_negotiate_sspi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_proxy.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_proxy.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-http_proxy.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-idn_win32.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-idn_win32.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-idn_win32.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-if2ip.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-if2ip.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-if2ip.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-imap.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-imap.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-imap.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-inet_ntop.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-inet_ntop.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-inet_ntop.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-inet_pton.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-inet_pton.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-inet_pton.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-krb5.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-krb5.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-krb5.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ldap.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ldap.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ldap.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-llist.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-llist.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-llist.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-md4.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-md4.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-md4.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-md5.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-md5.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-md5.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-memdebug.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-memdebug.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-memdebug.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-mprintf.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-mprintf.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-mprintf.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-multi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-multi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-multi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-netrc.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-netrc.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-netrc.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-non-ascii.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-non-ascii.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-non-ascii.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-nonblock.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-nonblock.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-nonblock.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-openldap.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-openldap.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-openldap.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-parsedate.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-parsedate.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-parsedate.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pingpong.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pingpong.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pingpong.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pipeline.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pipeline.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pipeline.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pop3.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pop3.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-pop3.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-progress.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-progress.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-progress.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-rawstr.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-rawstr.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-rawstr.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-rtsp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-rtsp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-rtsp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-security.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-security.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-security.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-select.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-select.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-select.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-sendf.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-sendf.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-sendf.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-share.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-share.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-share.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-slist.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-slist.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-slist.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-smtp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-smtp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-smtp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks_gssapi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks_gssapi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks_gssapi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks_sspi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks_sspi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-socks_sspi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-speedcheck.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-speedcheck.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-speedcheck.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-splay.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-splay.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-splay.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ssh.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ssh.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-ssh.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strdup.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strdup.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strdup.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strequal.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strequal.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strequal.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strerror.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strerror.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strerror.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strtok.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strtok.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strtok.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strtoofft.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strtoofft.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-strtoofft.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-telnet.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-telnet.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-telnet.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-tftp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-tftp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-tftp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-timeval.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-timeval.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-timeval.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-transfer.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-transfer.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-transfer.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-url.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-url.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-url.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-version.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-version.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-version.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-warnless.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-warnless.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-warnless.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-wildcard.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-wildcard.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-wildcard.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-x509asn1.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-x509asn1.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurl_la-x509asn1.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-nonblock.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-nonblock.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-nonblock.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-rawstr.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-rawstr.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-rawstr.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-strdup.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-strdup.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-strdup.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-strtoofft.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-strtoofft.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-strtoofft.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-warnless.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-warnless.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurltool_la-warnless.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-amigaos.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-amigaos.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-amigaos.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-asyn-ares.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-asyn-ares.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-asyn-ares.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-asyn-thread.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-asyn-thread.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-asyn-thread.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-base64.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-base64.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-base64.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-bundles.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-bundles.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-bundles.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-conncache.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-conncache.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-conncache.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-connect.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-connect.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-connect.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-content_encoding.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-content_encoding.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-content_encoding.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-cookie.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-cookie.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-cookie.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_addrinfo.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_addrinfo.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_addrinfo.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_fnmatch.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_fnmatch.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_fnmatch.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_gethostname.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_gethostname.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_gethostname.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_gssapi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_gssapi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_gssapi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_memrchr.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_memrchr.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_memrchr.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_multibyte.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_multibyte.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_multibyte.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_core.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_core.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_core.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_msgs.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_msgs.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_msgs.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_wb.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_wb.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_ntlm_wb.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_rtmp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_rtmp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_rtmp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sasl.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sasl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sasl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sasl_sspi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sasl_sspi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sasl_sspi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sspi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sspi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_sspi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_threads.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_threads.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-curl_threads.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-dict.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-dict.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-dict.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-dotdot.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-dotdot.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-dotdot.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-easy.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-easy.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-easy.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-escape.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-escape.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-escape.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-file.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-file.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-file.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-fileinfo.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-fileinfo.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-fileinfo.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-formdata.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-formdata.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-formdata.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ftp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ftp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ftp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ftplistparser.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ftplistparser.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ftplistparser.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-getenv.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-getenv.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-getenv.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-getinfo.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-getinfo.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-getinfo.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-gopher.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-gopher.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-gopher.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hash.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hash.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hash.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hmac.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hmac.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hmac.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostasyn.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostasyn.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostasyn.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostcheck.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostcheck.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostcheck.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip4.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip4.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip4.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip6.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip6.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostip6.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostsyn.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostsyn.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-hostsyn.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http2.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http2.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http2.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_chunks.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_chunks.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_chunks.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_digest.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_digest.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_digest.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_negotiate.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_negotiate.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_negotiate.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_negotiate_sspi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_negotiate_sspi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_negotiate_sspi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_proxy.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_proxy.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-http_proxy.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-idn_win32.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-idn_win32.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-idn_win32.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-if2ip.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-if2ip.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-if2ip.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-imap.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-imap.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-imap.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-inet_ntop.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-inet_ntop.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-inet_ntop.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-inet_pton.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-inet_pton.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-inet_pton.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-krb5.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-krb5.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-krb5.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ldap.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ldap.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ldap.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-llist.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-llist.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-llist.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-md4.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-md4.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-md4.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-md5.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-md5.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-md5.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-memdebug.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-memdebug.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-memdebug.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-mprintf.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-mprintf.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-mprintf.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-multi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-multi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-multi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-netrc.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-netrc.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-netrc.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-non-ascii.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-non-ascii.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-non-ascii.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-nonblock.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-nonblock.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-nonblock.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-openldap.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-openldap.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-openldap.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-parsedate.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-parsedate.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-parsedate.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pingpong.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pingpong.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pingpong.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pipeline.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pipeline.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pipeline.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pop3.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pop3.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-pop3.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-progress.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-progress.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-progress.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-rawstr.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-rawstr.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-rawstr.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-rtsp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-rtsp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-rtsp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-security.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-security.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-security.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-select.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-select.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-select.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-sendf.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-sendf.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-sendf.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-share.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-share.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-share.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-slist.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-slist.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-slist.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-smtp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-smtp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-smtp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks_gssapi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks_gssapi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks_gssapi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks_sspi.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks_sspi.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-socks_sspi.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-speedcheck.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-speedcheck.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-speedcheck.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-splay.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-splay.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-splay.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ssh.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ssh.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-ssh.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strdup.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strdup.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strdup.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strequal.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strequal.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strequal.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strerror.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strerror.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strerror.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strtok.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strtok.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strtok.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strtoofft.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strtoofft.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-strtoofft.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-telnet.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-telnet.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-telnet.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-tftp.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-tftp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-tftp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-timeval.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-timeval.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-timeval.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-transfer.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-transfer.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-transfer.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-url.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-url.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-url.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-version.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-version.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-version.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-warnless.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-warnless.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-warnless.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-wildcard.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-wildcard.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-wildcard.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-x509asn1.Plo b/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-x509asn1.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libcurlu_la-x509asn1.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/libntlmconnect-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/libntlmconnect-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/libntlmconnect-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-base64.Po b/external/libcurl_android/jni/libcurl/lib/.deps/resolve-base64.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-base64.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-memdebug.Po b/external/libcurl_android/jni/libcurl/lib/.deps/resolve-memdebug.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-memdebug.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-mprintf.Po b/external/libcurl_android/jni/libcurl/lib/.deps/resolve-mprintf.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-mprintf.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-nonblock.Po b/external/libcurl_android/jni/libcurl/lib/.deps/resolve-nonblock.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-nonblock.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-strequal.Po b/external/libcurl_android/jni/libcurl/lib/.deps/resolve-strequal.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-strequal.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-strtoofft.Po b/external/libcurl_android/jni/libcurl/lib/.deps/resolve-strtoofft.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-strtoofft.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-timeval.Po b/external/libcurl_android/jni/libcurl/lib/.deps/resolve-timeval.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-timeval.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/resolve-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/resolve-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-base64.Po b/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-base64.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-base64.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-memdebug.Po b/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-memdebug.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-memdebug.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-mprintf.Po b/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-mprintf.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-mprintf.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-nonblock.Po b/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-nonblock.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-nonblock.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-strequal.Po b/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-strequal.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-strequal.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-strtoofft.Po b/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-strtoofft.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-strtoofft.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-timeval.Po b/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-timeval.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-timeval.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/rtspd-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-base64.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-base64.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-base64.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-inet_pton.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-inet_pton.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-inet_pton.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-memdebug.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-memdebug.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-memdebug.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-mprintf.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-mprintf.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-mprintf.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-nonblock.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-nonblock.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-nonblock.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-strequal.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-strequal.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-strequal.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-strtoofft.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-strtoofft.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-strtoofft.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-timeval.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-timeval.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-timeval.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sockfilt-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-base64.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-base64.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-base64.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-inet_pton.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-inet_pton.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-inet_pton.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-memdebug.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-memdebug.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-memdebug.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-mprintf.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-mprintf.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-mprintf.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-nonblock.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-nonblock.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-nonblock.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-strequal.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-strequal.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-strequal.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-strtoofft.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-strtoofft.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-strtoofft.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-timeval.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-timeval.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-timeval.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/sws-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/sws-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/sws-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-base64.Po b/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-base64.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-base64.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-memdebug.Po b/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-memdebug.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-memdebug.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-mprintf.Po b/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-mprintf.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-mprintf.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-nonblock.Po b/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-nonblock.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-nonblock.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-strequal.Po b/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-strequal.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-strequal.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-strtoofft.Po b/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-strtoofft.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-strtoofft.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-timeval.Po b/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-timeval.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-timeval.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-warnless.Po b/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-warnless.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/.deps/tftpd-warnless.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/Makefile.inc b/external/libcurl_android/jni/libcurl/lib/Makefile.inc
deleted file mode 100755
index 462d72a5..00000000
--- a/external/libcurl_android/jni/libcurl/lib/Makefile.inc
+++ /dev/null
@@ -1,71 +0,0 @@
-#***************************************************************************
-# _ _ ____ _
-# Project ___| | | | _ \| |
-# / __| | | | |_) | |
-# | (__| |_| | _ <| |___
-# \___|\___/|_| \_\_____|
-#
-# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
-#
-# This software is licensed as described in the file COPYING, which
-# you should have received as part of this distribution. The terms
-# are also available at http://curl.haxx.se/docs/copyright.html.
-#
-# You may opt to use, copy, modify, merge, publish, distribute and/or sell
-# copies of the Software, and permit persons to whom the Software is
-# furnished to do so, under the terms of the COPYING file.
-#
-# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
-# KIND, either express or implied.
-#
-###########################################################################
-
-LIB_VTLS_CFILES = vtls/openssl.c vtls/gtls.c vtls/vtls.c vtls/nss.c \
- vtls/qssl.c vtls/polarssl.c vtls/polarssl_threadlock.c vtls/axtls.c \
- vtls/cyassl.c vtls/curl_schannel.c vtls/curl_darwinssl.c vtls/gskit.c
-
-LIB_VTLS_HFILES = vtls/qssl.h vtls/openssl.h vtls/vtls.h vtls/gtls.h \
- vtls/nssg.h vtls/polarssl.h vtls/polarssl_threadlock.h vtls/axtls.h \
- vtls/cyassl.h vtls/curl_schannel.h vtls/curl_darwinssl.h vtls/gskit.h
-
-LIB_CFILES = file.c timeval.c base64.c hostip.c progress.c formdata.c \
- cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \
- ldap.c version.c getenv.c escape.c mprintf.c telnet.c netrc.c \
- getinfo.c transfer.c strequal.c easy.c security.c curl_fnmatch.c \
- fileinfo.c ftplistparser.c wildcard.c krb5.c memdebug.c http_chunks.c \
- strtok.c connect.c llist.c hash.c multi.c content_encoding.c share.c \
- http_digest.c md4.c md5.c http_negotiate.c inet_pton.c strtoofft.c \
- strerror.c amigaos.c hostasyn.c hostip4.c hostip6.c hostsyn.c \
- inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c \
- ssh.c rawstr.c curl_addrinfo.c socks_gssapi.c socks_sspi.c \
- curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c \
- pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c \
- openldap.c curl_gethostname.c gopher.c idn_win32.c \
- http_negotiate_sspi.c http_proxy.c non-ascii.c asyn-ares.c \
- asyn-thread.c curl_gssapi.c curl_ntlm.c curl_ntlm_wb.c \
- curl_ntlm_core.c curl_ntlm_msgs.c curl_sasl.c curl_multibyte.c \
- hostcheck.c bundles.c conncache.c pipeline.c dotdot.c x509asn1.c \
- http2.c curl_sasl_sspi.c
-
-LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
- formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h \
- speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h \
- strequal.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h \
- wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h \
- hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
- http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h \
- inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h \
- easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h \
- socks.h ssh.h curl_base64.h rawstr.h curl_addrinfo.h curl_sspi.h \
- slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h \
- rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h \
- curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h \
- curl_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h \
- curl_ntlm_msgs.h curl_sasl.h curl_multibyte.h hostcheck.h bundles.h \
- conncache.h curl_setup_once.h multihandle.h setup-vms.h pipeline.h \
- dotdot.h x509asn1.h http2.h sigpipe.h
-
-LIB_RCFILES = libcurl.rc
-
-CSOURCES = $(LIB_CFILES) $(LIB_VTLS_CFILES)
-HHEADERS = $(LIB_HFILES) $(LIB_VTLS_HFILES)
diff --git a/external/libcurl_android/jni/libcurl/lib/amigaos.c b/external/libcurl_android/jni/libcurl/lib/amigaos.c
deleted file mode 100755
index 34f95e9b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/amigaos.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(__AMIGA__) && !defined(__ixemul__)
-
-#include <amitcp/socketbasetags.h>
-
-#include "amigaos.h"
-
-struct Library *SocketBase = NULL;
-extern int errno, h_errno;
-
-#ifdef __libnix__
-#include <stabs.h>
-void __request(const char *msg);
-#else
-# define __request( msg ) Printf( msg "\n\a")
-#endif
-
-void Curl_amiga_cleanup()
-{
- if(SocketBase) {
- CloseLibrary(SocketBase);
- SocketBase = NULL;
- }
-}
-
-bool Curl_amiga_init()
-{
- if(!SocketBase)
- SocketBase = OpenLibrary("bsdsocket.library", 4);
-
- if(!SocketBase) {
- __request("No TCP/IP Stack running!");
- return FALSE;
- }
-
- if(SocketBaseTags(SBTM_SETVAL(SBTC_ERRNOPTR(sizeof(errno))), (ULONG) &errno,
- SBTM_SETVAL(SBTC_LOGTAGPTR), (ULONG) "cURL",
- TAG_DONE)) {
- __request("SocketBaseTags ERROR");
- return FALSE;
- }
-
-#ifndef __libnix__
- atexit(Curl_amiga_cleanup);
-#endif
-
- return TRUE;
-}
-
-#ifdef __libnix__
-ADD2EXIT(Curl_amiga_cleanup,-50);
-#endif
-
-#endif /* __AMIGA__ && ! __ixemul__ */
diff --git a/external/libcurl_android/jni/libcurl/lib/amigaos.h b/external/libcurl_android/jni/libcurl/lib/amigaos.h
deleted file mode 100755
index 76578be8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/amigaos.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef HEADER_CURL_AMIGAOS_H
-#define HEADER_CURL_AMIGAOS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#if defined(__AMIGA__) && !defined(__ixemul__)
-
-bool Curl_amiga_init();
-void Curl_amiga_cleanup();
-
-#else
-
-#define Curl_amiga_init() 1
-#define Curl_amiga_cleanup() Curl_nop_stmt
-
-#endif
-
-#endif /* HEADER_CURL_AMIGAOS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/arpa_telnet.h b/external/libcurl_android/jni/libcurl/lib/arpa_telnet.h
deleted file mode 100755
index 098d9a92..00000000
--- a/external/libcurl_android/jni/libcurl/lib/arpa_telnet.h
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef HEADER_CURL_ARPA_TELNET_H
-#define HEADER_CURL_ARPA_TELNET_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#ifndef CURL_DISABLE_TELNET
-/*
- * Telnet option defines. Add more here if in need.
- */
-#define CURL_TELOPT_BINARY 0 /* binary 8bit data */
-#define CURL_TELOPT_ECHO 1 /* just echo! */
-#define CURL_TELOPT_SGA 3 /* Suppress Go Ahead */
-#define CURL_TELOPT_EXOPL 255 /* EXtended OPtions List */
-#define CURL_TELOPT_TTYPE 24 /* Terminal TYPE */
-#define CURL_TELOPT_NAWS 31 /* Negotiate About Window Size */
-#define CURL_TELOPT_XDISPLOC 35 /* X DISPlay LOCation */
-
-#define CURL_TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */
-#define CURL_NEW_ENV_VAR 0
-#define CURL_NEW_ENV_VALUE 1
-
-/*
- * The telnet options represented as strings
- */
-static const char * const telnetoptions[]=
-{
- "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD",
- "NAME", "STATUS", "TIMING MARK", "RCTE",
- "NAOL", "NAOP", "NAOCRD", "NAOHTS",
- "NAOHTD", "NAOFFD", "NAOVTS", "NAOVTD",
- "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO",
- "DE TERMINAL", "SUPDUP", "SUPDUP OUTPUT", "SEND LOCATION",
- "TERM TYPE", "END OF RECORD", "TACACS UID", "OUTPUT MARKING",
- "TTYLOC", "3270 REGIME", "X3 PAD", "NAWS",
- "TERM SPEED", "LFLOW", "LINEMODE", "XDISPLOC",
- "OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON"
-};
-
-#define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON
-
-#define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM)
-#define CURL_TELOPT(x) telnetoptions[x]
-
-#define CURL_NTELOPTS 40
-
-/*
- * First some defines
- */
-#define CURL_xEOF 236 /* End Of File */
-#define CURL_SE 240 /* Sub negotiation End */
-#define CURL_NOP 241 /* No OPeration */
-#define CURL_DM 242 /* Data Mark */
-#define CURL_GA 249 /* Go Ahead, reverse the line */
-#define CURL_SB 250 /* SuBnegotiation */
-#define CURL_WILL 251 /* Our side WILL use this option */
-#define CURL_WONT 252 /* Our side WON'T use this option */
-#define CURL_DO 253 /* DO use this option! */
-#define CURL_DONT 254 /* DON'T use this option! */
-#define CURL_IAC 255 /* Interpret As Command */
-
-/*
- * Then those numbers represented as strings:
- */
-static const char * const telnetcmds[]=
-{
- "EOF", "SUSP", "ABORT", "EOR", "SE",
- "NOP", "DMARK", "BRK", "IP", "AO",
- "AYT", "EC", "EL", "GA", "SB",
- "WILL", "WONT", "DO", "DONT", "IAC"
-};
-
-#define CURL_TELCMD_MINIMUM CURL_xEOF /* the first one */
-#define CURL_TELCMD_MAXIMUM CURL_IAC /* surprise, 255 is the last one! ;-) */
-
-#define CURL_TELQUAL_IS 0
-#define CURL_TELQUAL_SEND 1
-#define CURL_TELQUAL_INFO 2
-#define CURL_TELQUAL_NAME 3
-
-#define CURL_TELCMD_OK(x) ( ((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \
- ((unsigned int)(x) <= CURL_TELCMD_MAXIMUM) )
-#define CURL_TELCMD(x) telnetcmds[(x)-CURL_TELCMD_MINIMUM]
-
-#endif /* CURL_DISABLE_TELNET */
-
-#endif /* HEADER_CURL_ARPA_TELNET_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/asyn-ares.c b/external/libcurl_android/jni/libcurl/lib/asyn-ares.c
deleted file mode 100755
index 01a9c9b5..00000000
--- a/external/libcurl_android/jni/libcurl/lib/asyn-ares.c
+++ /dev/null
@@ -1,694 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
-/***********************************************************************
- * Only for ares-enabled builds
- * And only for functions that fulfill the asynch resolver backend API
- * as defined in asyn.h, nothing else belongs in this file!
- **********************************************************************/
-
-#ifdef CURLRES_ARES
-
-#include "urldata.h"
-#include "sendf.h"
-#include "hostip.h"
-#include "hash.h"
-#include "share.h"
-#include "strerror.h"
-#include "url.h"
-#include "multiif.h"
-#include "inet_pton.h"
-#include "connect.h"
-#include "select.h"
-#include "progress.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-# if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
- (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__))
-# define CARES_STATICLIB
-# endif
-# include <ares.h>
-# include <ares_version.h> /* really old c-ares didn't include this by
- itself */
-
-#if ARES_VERSION >= 0x010500
-/* c-ares 1.5.0 or later, the callback proto is modified */
-#define HAVE_CARES_CALLBACK_TIMEOUTS 1
-#endif
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-struct ResolverResults {
- int num_pending; /* number of ares_gethostbyname() requests */
- Curl_addrinfo *temp_ai; /* intermediary result while fetching c-ares parts */
- int last_status;
-};
-
-/*
- * Curl_resolver_global_init() - the generic low-level asynchronous name
- * resolve API. Called from curl_global_init() to initialize global resolver
- * environment. Initializes ares library.
- */
-int Curl_resolver_global_init(void)
-{
-#ifdef CARES_HAVE_ARES_LIBRARY_INIT
- if(ares_library_init(ARES_LIB_INIT_ALL)) {
- return CURLE_FAILED_INIT;
- }
-#endif
- return CURLE_OK;
-}
-
-/*
- * Curl_resolver_global_cleanup()
- *
- * Called from curl_global_cleanup() to destroy global resolver environment.
- * Deinitializes ares library.
- */
-void Curl_resolver_global_cleanup(void)
-{
-#ifdef CARES_HAVE_ARES_LIBRARY_CLEANUP
- ares_library_cleanup();
-#endif
-}
-
-/*
- * Curl_resolver_init()
- *
- * Called from curl_easy_init() -> Curl_open() to initialize resolver
- * URL-state specific environment ('resolver' member of the UrlState
- * structure). Fills the passed pointer by the initialized ares_channel.
- */
-CURLcode Curl_resolver_init(void **resolver)
-{
- int status = ares_init((ares_channel*)resolver);
- if(status != ARES_SUCCESS) {
- if(status == ARES_ENOMEM)
- return CURLE_OUT_OF_MEMORY;
- else
- return CURLE_FAILED_INIT;
- }
- return CURLE_OK;
- /* make sure that all other returns from this function should destroy the
- ares channel before returning error! */
-}
-
-/*
- * Curl_resolver_cleanup()
- *
- * Called from curl_easy_cleanup() -> Curl_close() to cleanup resolver
- * URL-state specific environment ('resolver' member of the UrlState
- * structure). Destroys the ares channel.
- */
-void Curl_resolver_cleanup(void *resolver)
-{
- ares_destroy((ares_channel)resolver);
-}
-
-/*
- * Curl_resolver_duphandle()
- *
- * Called from curl_easy_duphandle() to duplicate resolver URL-state specific
- * environment ('resolver' member of the UrlState structure). Duplicates the
- * 'from' ares channel and passes the resulting channel to the 'to' pointer.
- */
-int Curl_resolver_duphandle(void **to, void *from)
-{
- /* Clone the ares channel for the new handle */
- if(ARES_SUCCESS != ares_dup((ares_channel*)to,(ares_channel)from))
- return CURLE_FAILED_INIT;
- return CURLE_OK;
-}
-
-static void destroy_async_data (struct Curl_async *async);
-
-/*
- * Cancel all possibly still on-going resolves for this connection.
- */
-void Curl_resolver_cancel(struct connectdata *conn)
-{
- if(conn && conn->data && conn->data->state.resolver)
- ares_cancel((ares_channel)conn->data->state.resolver);
- destroy_async_data(&conn->async);
-}
-
-/*
- * destroy_async_data() cleans up async resolver data.
- */
-static void destroy_async_data (struct Curl_async *async)
-{
- if(async->hostname)
- free(async->hostname);
-
- if(async->os_specific) {
- struct ResolverResults *res = (struct ResolverResults *)async->os_specific;
- if(res) {
- if(res->temp_ai) {
- Curl_freeaddrinfo(res->temp_ai);
- res->temp_ai = NULL;
- }
- free(res);
- }
- async->os_specific = NULL;
- }
-
- async->hostname = NULL;
-}
-
-/*
- * Curl_resolver_getsock() is called when someone from the outside world
- * (using curl_multi_fdset()) wants to get our fd_set setup and we're talking
- * with ares. The caller must make sure that this function is only called when
- * we have a working ares channel.
- *
- * Returns: sockets-in-use-bitmap
- */
-
-int Curl_resolver_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-
-{
- struct timeval maxtime;
- struct timeval timebuf;
- struct timeval *timeout;
- long milli;
- int max = ares_getsock((ares_channel)conn->data->state.resolver,
- (ares_socket_t *)socks, numsocks);
-
- maxtime.tv_sec = CURL_TIMEOUT_RESOLVE;
- maxtime.tv_usec = 0;
-
- timeout = ares_timeout((ares_channel)conn->data->state.resolver, &maxtime,
- &timebuf);
- milli = (timeout->tv_sec * 1000) + (timeout->tv_usec/1000);
- if(milli == 0)
- milli += 10;
- Curl_expire_latest(conn->data, milli);
-
- return max;
-}
-
-/*
- * waitperform()
- *
- * 1) Ask ares what sockets it currently plays with, then
- * 2) wait for the timeout period to check for action on ares' sockets.
- * 3) tell ares to act on all the sockets marked as "with action"
- *
- * return number of sockets it worked on
- */
-
-static int waitperform(struct connectdata *conn, int timeout_ms)
-{
- struct SessionHandle *data = conn->data;
- int nfds;
- int bitmask;
- ares_socket_t socks[ARES_GETSOCK_MAXNUM];
- struct pollfd pfd[ARES_GETSOCK_MAXNUM];
- int i;
- int num = 0;
-
- bitmask = ares_getsock((ares_channel)data->state.resolver, socks,
- ARES_GETSOCK_MAXNUM);
-
- for(i=0; i < ARES_GETSOCK_MAXNUM; i++) {
- pfd[i].events = 0;
- pfd[i].revents = 0;
- if(ARES_GETSOCK_READABLE(bitmask, i)) {
- pfd[i].fd = socks[i];
- pfd[i].events |= POLLRDNORM|POLLIN;
- }
- if(ARES_GETSOCK_WRITABLE(bitmask, i)) {
- pfd[i].fd = socks[i];
- pfd[i].events |= POLLWRNORM|POLLOUT;
- }
- if(pfd[i].events != 0)
- num++;
- else
- break;
- }
-
- if(num)
- nfds = Curl_poll(pfd, num, timeout_ms);
- else
- nfds = 0;
-
- if(!nfds)
- /* Call ares_process() unconditonally here, even if we simply timed out
- above, as otherwise the ares name resolve won't timeout! */
- ares_process_fd((ares_channel)data->state.resolver, ARES_SOCKET_BAD,
- ARES_SOCKET_BAD);
- else {
- /* move through the descriptors and ask for processing on them */
- for(i=0; i < num; i++)
- ares_process_fd((ares_channel)data->state.resolver,
- pfd[i].revents & (POLLRDNORM|POLLIN)?
- pfd[i].fd:ARES_SOCKET_BAD,
- pfd[i].revents & (POLLWRNORM|POLLOUT)?
- pfd[i].fd:ARES_SOCKET_BAD);
- }
- return nfds;
-}
-
-/*
- * Curl_resolver_is_resolved() is called repeatedly to check if a previous
- * name resolve request has completed. It should also make sure to time-out if
- * the operation seems to take too long.
- *
- * Returns normal CURLcode errors.
- */
-CURLcode Curl_resolver_is_resolved(struct connectdata *conn,
- struct Curl_dns_entry **dns)
-{
- struct SessionHandle *data = conn->data;
- struct ResolverResults *res = (struct ResolverResults *)
- conn->async.os_specific;
- CURLcode rc = CURLE_OK;
-
- *dns = NULL;
-
- waitperform(conn, 0);
-
- if(res && !res->num_pending) {
- (void)Curl_addrinfo_callback(conn, res->last_status, res->temp_ai);
- /* temp_ai ownership is moved to the connection, so we need not free-up
- them */
- res->temp_ai = NULL;
- if(!conn->async.dns) {
- failf(data, "Could not resolve: %s (%s)",
- conn->async.hostname, ares_strerror(conn->async.status));
- rc = conn->bits.proxy?CURLE_COULDNT_RESOLVE_PROXY:
- CURLE_COULDNT_RESOLVE_HOST;
- }
- else
- *dns = conn->async.dns;
-
- destroy_async_data(&conn->async);
- }
-
- return rc;
-}
-
-/*
- * Curl_resolver_wait_resolv()
- *
- * waits for a resolve to finish. This function should be avoided since using
- * this risk getting the multi interface to "hang".
- *
- * If 'entry' is non-NULL, make it point to the resolved dns entry
- *
- * Returns CURLE_COULDNT_RESOLVE_HOST if the host was not resolved, and
- * CURLE_OPERATION_TIMEDOUT if a time-out occurred.
- */
-CURLcode Curl_resolver_wait_resolv(struct connectdata *conn,
- struct Curl_dns_entry **entry)
-{
- CURLcode rc=CURLE_OK;
- struct SessionHandle *data = conn->data;
- long timeout;
- struct timeval now = Curl_tvnow();
- struct Curl_dns_entry *temp_entry;
-
- timeout = Curl_timeleft(data, &now, TRUE);
- if(!timeout)
- timeout = CURL_TIMEOUT_RESOLVE * 1000; /* default name resolve timeout */
-
- /* Wait for the name resolve query to complete. */
- for(;;) {
- struct timeval *tvp, tv, store;
- long timediff;
- int itimeout;
- int timeout_ms;
-
- itimeout = (timeout > (long)INT_MAX) ? INT_MAX : (int)timeout;
-
- store.tv_sec = itimeout/1000;
- store.tv_usec = (itimeout%1000)*1000;
-
- tvp = ares_timeout((ares_channel)data->state.resolver, &store, &tv);
-
- /* use the timeout period ares returned to us above if less than one
- second is left, otherwise just use 1000ms to make sure the progress
- callback gets called frequent enough */
- if(!tvp->tv_sec)
- timeout_ms = (int)(tvp->tv_usec/1000);
- else
- timeout_ms = 1000;
-
- waitperform(conn, timeout_ms);
- Curl_resolver_is_resolved(conn,&temp_entry);
-
- if(conn->async.done)
- break;
-
- if(Curl_pgrsUpdate(conn)) {
- rc = CURLE_ABORTED_BY_CALLBACK;
- timeout = -1; /* trigger the cancel below */
- }
- else {
- struct timeval now2 = Curl_tvnow();
- timediff = Curl_tvdiff(now2, now); /* spent time */
- timeout -= timediff?timediff:1; /* always deduct at least 1 */
- now = now2; /* for next loop */
- }
- if(timeout < 0) {
- /* our timeout, so we cancel the ares operation */
- ares_cancel((ares_channel)data->state.resolver);
- break;
- }
- }
-
- /* Operation complete, if the lookup was successful we now have the entry
- in the cache. */
-
- if(entry)
- *entry = conn->async.dns;
-
- if(rc)
- /* close the connection, since we can't return failure here without
- cleaning up this connection properly.
- TODO: remove this action from here, it is not a name resolver decision.
- */
- connclose(conn, "c-ares resolve failed");
-
- return rc;
-}
-
-/* Connects results to the list */
-static void compound_results(struct ResolverResults *res,
- Curl_addrinfo *ai)
-{
- Curl_addrinfo *ai_tail;
- if(!ai)
- return;
- ai_tail = ai;
-
- while(ai_tail->ai_next)
- ai_tail = ai_tail->ai_next;
-
- /* Add the new results to the list of old results. */
- ai_tail->ai_next = res->temp_ai;
- res->temp_ai = ai;
-}
-
-/*
- * ares_query_completed_cb() is the callback that ares will call when
- * the host query initiated by ares_gethostbyname() from Curl_getaddrinfo(),
- * when using ares, is completed either successfully or with failure.
- */
-static void query_completed_cb(void *arg, /* (struct connectdata *) */
- int status,
-#ifdef HAVE_CARES_CALLBACK_TIMEOUTS
- int timeouts,
-#endif
- struct hostent *hostent)
-{
- struct connectdata *conn = (struct connectdata *)arg;
- struct ResolverResults *res;
-
-#ifdef HAVE_CARES_CALLBACK_TIMEOUTS
- (void)timeouts; /* ignored */
-#endif
-
- if(ARES_EDESTRUCTION == status)
- /* when this ares handle is getting destroyed, the 'arg' pointer may not
- be valid so only defer it when we know the 'status' says its fine! */
- return;
-
- res = (struct ResolverResults *)conn->async.os_specific;
- res->num_pending--;
-
- if(CURL_ASYNC_SUCCESS == status) {
- Curl_addrinfo *ai = Curl_he2ai(hostent, conn->async.port);
- if(ai) {
- compound_results(res, ai);
- }
- }
- /* A successful result overwrites any previous error */
- if(res->last_status != ARES_SUCCESS)
- res->last_status = status;
-}
-
-/*
- * Curl_resolver_getaddrinfo() - when using ares
- *
- * Returns name information about the given hostname and port number. If
- * successful, the 'hostent' is returned and the forth argument will point to
- * memory we need to free after use. That memory *MUST* be freed with
- * Curl_freeaddrinfo(), nothing else.
- */
-Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
- const char *hostname,
- int port,
- int *waitp)
-{
- char *bufp;
- struct SessionHandle *data = conn->data;
- struct in_addr in;
- int family = PF_INET;
-#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */
- struct in6_addr in6;
-#endif /* CURLRES_IPV6 */
-
- *waitp = 0; /* default to synchronous response */
-
- /* First check if this is an IPv4 address string */
- if(Curl_inet_pton(AF_INET, hostname, &in) > 0) {
- /* This is a dotted IP address 123.123.123.123-style */
- return Curl_ip2addr(AF_INET, &in, hostname, port);
- }
-
-#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */
- /* Otherwise, check if this is an IPv6 address string */
- if(Curl_inet_pton (AF_INET6, hostname, &in6) > 0)
- /* This must be an IPv6 address literal. */
- return Curl_ip2addr(AF_INET6, &in6, hostname, port);
-
- switch(conn->ip_version) {
- default:
-#if ARES_VERSION >= 0x010601
- family = PF_UNSPEC; /* supported by c-ares since 1.6.1, so for older
- c-ares versions this just falls through and defaults
- to PF_INET */
- break;
-#endif
- case CURL_IPRESOLVE_V4:
- family = PF_INET;
- break;
- case CURL_IPRESOLVE_V6:
- family = PF_INET6;
- break;
- }
-#endif /* CURLRES_IPV6 */
-
- bufp = strdup(hostname);
- if(bufp) {
- struct ResolverResults *res = NULL;
- Curl_safefree(conn->async.hostname);
- conn->async.hostname = bufp;
- conn->async.port = port;
- conn->async.done = FALSE; /* not done */
- conn->async.status = 0; /* clear */
- conn->async.dns = NULL; /* clear */
- res = calloc(sizeof(struct ResolverResults),1);
- if(!res) {
- Curl_safefree(conn->async.hostname);
- conn->async.hostname = NULL;
- return NULL;
- }
- conn->async.os_specific = res;
-
- /* initial status - failed */
- res->last_status = ARES_ENOTFOUND;
-#ifdef ENABLE_IPV6 /* CURLRES_IPV6 */
- if(family == PF_UNSPEC) {
- if(Curl_ipv6works()) {
- res->num_pending = 2;
-
- /* areschannel is already setup in the Curl_open() function */
- ares_gethostbyname((ares_channel)data->state.resolver, hostname,
- PF_INET, query_completed_cb, conn);
- ares_gethostbyname((ares_channel)data->state.resolver, hostname,
- PF_INET6, query_completed_cb, conn);
- }
- else {
- res->num_pending = 1;
-
- /* areschannel is already setup in the Curl_open() function */
- ares_gethostbyname((ares_channel)data->state.resolver, hostname,
- PF_INET, query_completed_cb, conn);
- }
- }
- else
-#endif /* CURLRES_IPV6 */
- {
- res->num_pending = 1;
-
- /* areschannel is already setup in the Curl_open() function */
- ares_gethostbyname((ares_channel)data->state.resolver, hostname, family,
- query_completed_cb, conn);
- }
-
- *waitp = 1; /* expect asynchronous response */
- }
- return NULL; /* no struct yet */
-}
-
-CURLcode Curl_set_dns_servers(struct SessionHandle *data,
- char *servers)
-{
- CURLcode result = CURLE_NOT_BUILT_IN;
- int ares_result;
-
- /* If server is NULL or empty, this would purge all DNS servers
- * from ares library, which will cause any and all queries to fail.
- * So, just return OK if none are configured and don't actually make
- * any changes to c-ares. This lets c-ares use it's defaults, which
- * it gets from the OS (for instance from /etc/resolv.conf on Linux).
- */
- if(!(servers && servers[0]))
- return CURLE_OK;
-
-#if (ARES_VERSION >= 0x010704)
- ares_result = ares_set_servers_csv(data->state.resolver, servers);
- switch(ares_result) {
- case ARES_SUCCESS:
- result = CURLE_OK;
- break;
- case ARES_ENOMEM:
- result = CURLE_OUT_OF_MEMORY;
- break;
- case ARES_ENOTINITIALIZED:
- case ARES_ENODATA:
- case ARES_EBADSTR:
- default:
- result = CURLE_BAD_FUNCTION_ARGUMENT;
- break;
- }
-#else /* too old c-ares version! */
- (void)data;
- (void)(ares_result);
-#endif
- return result;
-}
-
-CURLcode Curl_set_dns_interface(struct SessionHandle *data,
- const char *interf)
-{
-#if (ARES_VERSION >= 0x010704)
- if(!interf)
- interf = "";
-
- ares_set_local_dev((ares_channel)data->state.resolver, interf);
-
- return CURLE_OK;
-#else /* c-ares version too old! */
- (void)data;
- (void)interf;
- return CURLE_NOT_BUILT_IN;
-#endif
-}
-
-CURLcode Curl_set_dns_local_ip4(struct SessionHandle *data,
- const char *local_ip4)
-{
-#if (ARES_VERSION >= 0x010704)
- struct in_addr a4;
-
- if((!local_ip4) || (local_ip4[0] == 0)) {
- a4.s_addr = 0; /* disabled: do not bind to a specific address */
- }
- else {
- if(Curl_inet_pton(AF_INET, local_ip4, &a4) != 1) {
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- }
-
- ares_set_local_ip4((ares_channel)data->state.resolver, ntohl(a4.s_addr));
-
- return CURLE_OK;
-#else /* c-ares version too old! */
- (void)data;
- (void)local_ip4;
- return CURLE_NOT_BUILT_IN;
-#endif
-}
-
-CURLcode Curl_set_dns_local_ip6(struct SessionHandle *data,
- const char *local_ip6)
-{
-#if (ARES_VERSION >= 0x010704) && defined(ENABLE_IPV6)
- unsigned char a6[INET6_ADDRSTRLEN];
-
- if((!local_ip6) || (local_ip6[0] == 0)) {
- /* disabled: do not bind to a specific address */
- memset(a6, 0, sizeof(a6));
- }
- else {
- if(Curl_inet_pton(AF_INET6, local_ip6, a6) != 1) {
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- }
-
- ares_set_local_ip6((ares_channel)data->state.resolver, a6);
-
- return CURLE_OK;
-#else /* c-ares version too old! */
- (void)data;
- (void)local_ip6;
- return CURLE_NOT_BUILT_IN;
-#endif
-}
-#endif /* CURLRES_ARES */
diff --git a/external/libcurl_android/jni/libcurl/lib/asyn-thread.c b/external/libcurl_android/jni/libcurl/lib/asyn-thread.c
deleted file mode 100755
index e4ad32bb..00000000
--- a/external/libcurl_android/jni/libcurl/lib/asyn-thread.c
+++ /dev/null
@@ -1,701 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#if defined(USE_THREADS_POSIX)
-# ifdef HAVE_PTHREAD_H
-# include <pthread.h>
-# endif
-#elif defined(USE_THREADS_WIN32)
-# ifdef HAVE_PROCESS_H
-# include <process.h>
-# endif
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
-#ifdef HAVE_GETADDRINFO
-# define RESOLVER_ENOMEM EAI_MEMORY
-#else
-# define RESOLVER_ENOMEM ENOMEM
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "hostip.h"
-#include "hash.h"
-#include "share.h"
-#include "strerror.h"
-#include "url.h"
-#include "multiif.h"
-#include "inet_pton.h"
-#include "inet_ntop.h"
-#include "curl_threads.h"
-#include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/***********************************************************************
- * Only for threaded name resolves builds
- **********************************************************************/
-#ifdef CURLRES_THREADED
-
-/*
- * Curl_resolver_global_init()
- * Called from curl_global_init() to initialize global resolver environment.
- * Does nothing here.
- */
-int Curl_resolver_global_init(void)
-{
- return CURLE_OK;
-}
-
-/*
- * Curl_resolver_global_cleanup()
- * Called from curl_global_cleanup() to destroy global resolver environment.
- * Does nothing here.
- */
-void Curl_resolver_global_cleanup(void)
-{
-}
-
-/*
- * Curl_resolver_init()
- * Called from curl_easy_init() -> Curl_open() to initialize resolver
- * URL-state specific environment ('resolver' member of the UrlState
- * structure). Does nothing here.
- */
-CURLcode Curl_resolver_init(void **resolver)
-{
- (void)resolver;
- return CURLE_OK;
-}
-
-/*
- * Curl_resolver_cleanup()
- * Called from curl_easy_cleanup() -> Curl_close() to cleanup resolver
- * URL-state specific environment ('resolver' member of the UrlState
- * structure). Does nothing here.
- */
-void Curl_resolver_cleanup(void *resolver)
-{
- (void)resolver;
-}
-
-/*
- * Curl_resolver_duphandle()
- * Called from curl_easy_duphandle() to duplicate resolver URL state-specific
- * environment ('resolver' member of the UrlState structure). Does nothing
- * here.
- */
-int Curl_resolver_duphandle(void **to, void *from)
-{
- (void)to;
- (void)from;
- return CURLE_OK;
-}
-
-static void destroy_async_data(struct Curl_async *);
-
-/*
- * Cancel all possibly still on-going resolves for this connection.
- */
-void Curl_resolver_cancel(struct connectdata *conn)
-{
- destroy_async_data(&conn->async);
-}
-
-/* This function is used to init a threaded resolve */
-static bool init_resolve_thread(struct connectdata *conn,
- const char *hostname, int port,
- const struct addrinfo *hints);
-
-
-/* Data for synchronization between resolver thread and its parent */
-struct thread_sync_data {
- curl_mutex_t * mtx;
- int done;
-
- char * hostname; /* hostname to resolve, Curl_async.hostname
- duplicate */
- int port;
- int sock_error;
- Curl_addrinfo *res;
-#ifdef HAVE_GETADDRINFO
- struct addrinfo hints;
-#endif
- struct thread_data *td; /* for thread-self cleanup */
-};
-
-struct thread_data {
- curl_thread_t thread_hnd;
- unsigned int poll_interval;
- long interval_end;
- struct thread_sync_data tsd;
-};
-
-static struct thread_sync_data *conn_thread_sync_data(struct connectdata *conn)
-{
- return &(((struct thread_data *)conn->async.os_specific)->tsd);
-}
-
-#define CONN_THREAD_SYNC_DATA(conn) &(((conn)->async.os_specific)->tsd);
-
-/* Destroy resolver thread synchronization data */
-static
-void destroy_thread_sync_data(struct thread_sync_data * tsd)
-{
- if(tsd->mtx) {
- Curl_mutex_destroy(tsd->mtx);
- free(tsd->mtx);
- }
-
- if(tsd->hostname)
- free(tsd->hostname);
-
- if(tsd->res)
- Curl_freeaddrinfo(tsd->res);
-
- memset(tsd,0,sizeof(*tsd));
-}
-
-/* Initialize resolver thread synchronization data */
-static
-int init_thread_sync_data(struct thread_data * td,
- const char * hostname,
- int port,
- const struct addrinfo *hints)
-{
- struct thread_sync_data *tsd = &td->tsd;
-
- memset(tsd, 0, sizeof(*tsd));
-
- tsd->td = td;
- tsd->port = port;
-#ifdef HAVE_GETADDRINFO
- DEBUGASSERT(hints);
- tsd->hints = *hints;
-#else
- (void) hints;
-#endif
-
- tsd->mtx = malloc(sizeof(curl_mutex_t));
- if(tsd->mtx == NULL)
- goto err_exit;
-
- Curl_mutex_init(tsd->mtx);
-
- tsd->sock_error = CURL_ASYNC_SUCCESS;
-
- /* Copying hostname string because original can be destroyed by parent
- * thread during gethostbyname execution.
- */
- tsd->hostname = strdup(hostname);
- if(!tsd->hostname)
- goto err_exit;
-
- return 1;
-
- err_exit:
- /* Memory allocation failed */
- destroy_thread_sync_data(tsd);
- return 0;
-}
-
-static int getaddrinfo_complete(struct connectdata *conn)
-{
- struct thread_sync_data *tsd = conn_thread_sync_data(conn);
- int rc;
-
- rc = Curl_addrinfo_callback(conn, tsd->sock_error, tsd->res);
- /* The tsd->res structure has been copied to async.dns and perhaps the DNS
- cache. Set our copy to NULL so destroy_thread_sync_data doesn't free it.
- */
- tsd->res = NULL;
-
- return rc;
-}
-
-
-#ifdef HAVE_GETADDRINFO
-
-/*
- * getaddrinfo_thread() resolves a name and then exits.
- *
- * For builds without ARES, but with ENABLE_IPV6, create a resolver thread
- * and wait on it.
- */
-static unsigned int CURL_STDCALL getaddrinfo_thread (void *arg)
-{
- struct thread_sync_data *tsd = (struct thread_sync_data*)arg;
- struct thread_data *td = tsd->td;
- char service[12];
- int rc;
-
- snprintf(service, sizeof(service), "%d", tsd->port);
-
- rc = Curl_getaddrinfo_ex(tsd->hostname, service, &tsd->hints, &tsd->res);
-
- if(rc != 0) {
- tsd->sock_error = SOCKERRNO?SOCKERRNO:rc;
- if(tsd->sock_error == 0)
- tsd->sock_error = RESOLVER_ENOMEM;
- }
-
- Curl_mutex_acquire(tsd->mtx);
- if(tsd->done) {
- /* too late, gotta clean up the mess */
- Curl_mutex_release(tsd->mtx);
- destroy_thread_sync_data(tsd);
- free(td);
- }
- else {
- tsd->done = 1;
- Curl_mutex_release(tsd->mtx);
- }
-
- return 0;
-}
-
-#else /* HAVE_GETADDRINFO */
-
-/*
- * gethostbyname_thread() resolves a name and then exits.
- */
-static unsigned int CURL_STDCALL gethostbyname_thread (void *arg)
-{
- struct thread_sync_data *tsd = (struct thread_sync_data *)arg;
- struct thread_data *td = tsd->td;
-
- tsd->res = Curl_ipv4_resolve_r(tsd->hostname, tsd->port);
-
- if(!tsd->res) {
- tsd->sock_error = SOCKERRNO;
- if(tsd->sock_error == 0)
- tsd->sock_error = RESOLVER_ENOMEM;
- }
-
- Curl_mutex_acquire(tsd->mtx);
- if(tsd->done) {
- /* too late, gotta clean up the mess */
- Curl_mutex_release(tsd->mtx);
- destroy_thread_sync_data(tsd);
- free(td);
- }
- else {
- tsd->done = 1;
- Curl_mutex_release(tsd->mtx);
- }
-
- return 0;
-}
-
-#endif /* HAVE_GETADDRINFO */
-
-/*
- * destroy_async_data() cleans up async resolver data and thread handle.
- */
-static void destroy_async_data (struct Curl_async *async)
-{
- if(async->os_specific) {
- struct thread_data *td = (struct thread_data*) async->os_specific;
- int done;
-
- /*
- * if the thread is still blocking in the resolve syscall, detach it and
- * let the thread do the cleanup...
- */
- Curl_mutex_acquire(td->tsd.mtx);
- done = td->tsd.done;
- td->tsd.done = 1;
- Curl_mutex_release(td->tsd.mtx);
-
- if(!done) {
- Curl_thread_destroy(td->thread_hnd);
- }
- else {
- if(td->thread_hnd != curl_thread_t_null)
- Curl_thread_join(&td->thread_hnd);
-
- destroy_thread_sync_data(&td->tsd);
-
- free(async->os_specific);
- }
- }
- async->os_specific = NULL;
-
- if(async->hostname)
- free(async->hostname);
-
- async->hostname = NULL;
-}
-
-/*
- * init_resolve_thread() starts a new thread that performs the actual
- * resolve. This function returns before the resolve is done.
- *
- * Returns FALSE in case of failure, otherwise TRUE.
- */
-static bool init_resolve_thread (struct connectdata *conn,
- const char *hostname, int port,
- const struct addrinfo *hints)
-{
- struct thread_data *td = calloc(1, sizeof(struct thread_data));
- int err = RESOLVER_ENOMEM;
-
- conn->async.os_specific = (void*) td;
- if(!td)
- goto err_exit;
-
- conn->async.port = port;
- conn->async.done = FALSE;
- conn->async.status = 0;
- conn->async.dns = NULL;
- td->thread_hnd = curl_thread_t_null;
-
- if(!init_thread_sync_data(td, hostname, port, hints))
- goto err_exit;
-
- Curl_safefree(conn->async.hostname);
- conn->async.hostname = strdup(hostname);
- if(!conn->async.hostname)
- goto err_exit;
-
-#ifdef HAVE_GETADDRINFO
- td->thread_hnd = Curl_thread_create(getaddrinfo_thread, &td->tsd);
-#else
- td->thread_hnd = Curl_thread_create(gethostbyname_thread, &td->tsd);
-#endif
-
- if(!td->thread_hnd) {
-#ifndef _WIN32_WCE
- err = errno;
-#endif
- goto err_exit;
- }
-
- return TRUE;
-
- err_exit:
- destroy_async_data(&conn->async);
-
- SET_ERRNO(err);
-
- return FALSE;
-}
-
-/*
- * resolver_error() calls failf() with the appropriate message after a resolve
- * error
- */
-
-static CURLcode resolver_error(struct connectdata *conn)
-{
- const char *host_or_proxy;
- CURLcode rc;
- if(conn->bits.httpproxy) {
- host_or_proxy = "proxy";
- rc = CURLE_COULDNT_RESOLVE_PROXY;
- }
- else {
- host_or_proxy = "host";
- rc = CURLE_COULDNT_RESOLVE_HOST;
- }
-
- failf(conn->data, "Could not resolve %s: %s", host_or_proxy,
- conn->async.hostname);
- return rc;
-}
-
-/*
- * Curl_resolver_wait_resolv()
- *
- * waits for a resolve to finish. This function should be avoided since using
- * this risk getting the multi interface to "hang".
- *
- * If 'entry' is non-NULL, make it point to the resolved dns entry
- *
- * This is the version for resolves-in-a-thread.
- */
-CURLcode Curl_resolver_wait_resolv(struct connectdata *conn,
- struct Curl_dns_entry **entry)
-{
- struct thread_data *td = (struct thread_data*) conn->async.os_specific;
- CURLcode rc = CURLE_OK;
-
- DEBUGASSERT(conn && td);
-
- /* wait for the thread to resolve the name */
- if(Curl_thread_join(&td->thread_hnd))
- rc = getaddrinfo_complete(conn);
- else
- DEBUGASSERT(0);
-
- conn->async.done = TRUE;
-
- if(entry)
- *entry = conn->async.dns;
-
- if(!conn->async.dns)
- /* a name was not resolved, report error */
- rc = resolver_error(conn);
-
- destroy_async_data(&conn->async);
-
- if(!conn->async.dns)
- connclose(conn, "asynch resolve failed");
-
- return (rc);
-}
-
-/*
- * Curl_resolver_is_resolved() is called repeatedly to check if a previous
- * name resolve request has completed. It should also make sure to time-out if
- * the operation seems to take too long.
- */
-CURLcode Curl_resolver_is_resolved(struct connectdata *conn,
- struct Curl_dns_entry **entry)
-{
- struct SessionHandle *data = conn->data;
- struct thread_data *td = (struct thread_data*) conn->async.os_specific;
- int done = 0;
-
- *entry = NULL;
-
- if(!td) {
- DEBUGASSERT(td);
- return CURLE_COULDNT_RESOLVE_HOST;
- }
-
- Curl_mutex_acquire(td->tsd.mtx);
- done = td->tsd.done;
- Curl_mutex_release(td->tsd.mtx);
-
- if(done) {
- getaddrinfo_complete(conn);
-
- if(!conn->async.dns) {
- CURLcode rc = resolver_error(conn);
- destroy_async_data(&conn->async);
- return rc;
- }
- destroy_async_data(&conn->async);
- *entry = conn->async.dns;
- }
- else {
- /* poll for name lookup done with exponential backoff up to 250ms */
- long elapsed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle);
- if(elapsed < 0)
- elapsed = 0;
-
- if(td->poll_interval == 0)
- /* Start at 1ms poll interval */
- td->poll_interval = 1;
- else if(elapsed >= td->interval_end)
- /* Back-off exponentially if last interval expired */
- td->poll_interval *= 2;
-
- if(td->poll_interval > 250)
- td->poll_interval = 250;
-
- td->interval_end = elapsed + td->poll_interval;
- Curl_expire_latest(conn->data, td->poll_interval);
- }
-
- return CURLE_OK;
-}
-
-int Curl_resolver_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- (void)conn;
- (void)socks;
- (void)numsocks;
- return 0;
-}
-
-#ifndef HAVE_GETADDRINFO
-/*
- * Curl_getaddrinfo() - for platforms without getaddrinfo
- */
-Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
- const char *hostname,
- int port,
- int *waitp)
-{
- struct in_addr in;
-
- *waitp = 0; /* default to synchronous response */
-
- if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
- /* This is a dotted IP address 123.123.123.123-style */
- return Curl_ip2addr(AF_INET, &in, hostname, port);
-
- /* fire up a new resolver thread! */
- if(init_resolve_thread(conn, hostname, port, NULL)) {
- *waitp = 1; /* expect asynchronous response */
- return NULL;
- }
-
- /* fall-back to blocking version */
- return Curl_ipv4_resolve_r(hostname, port);
-}
-
-#else /* !HAVE_GETADDRINFO */
-
-/*
- * Curl_resolver_getaddrinfo() - for getaddrinfo
- */
-Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
- const char *hostname,
- int port,
- int *waitp)
-{
- struct addrinfo hints;
- struct in_addr in;
- Curl_addrinfo *res;
- int error;
- char sbuf[12];
- int pf = PF_INET;
-#ifdef CURLRES_IPV6
- struct in6_addr in6;
-#endif /* CURLRES_IPV6 */
-
- *waitp = 0; /* default to synchronous response */
-
- /* First check if this is an IPv4 address string */
- if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
- /* This is a dotted IP address 123.123.123.123-style */
- return Curl_ip2addr(AF_INET, &in, hostname, port);
-
-#ifdef CURLRES_IPV6
- /* check if this is an IPv6 address string */
- if(Curl_inet_pton (AF_INET6, hostname, &in6) > 0)
- /* This is an IPv6 address literal */
- return Curl_ip2addr(AF_INET6, &in6, hostname, port);
-
- /*
- * Check if a limited name resolve has been requested.
- */
- switch(conn->ip_version) {
- case CURL_IPRESOLVE_V4:
- pf = PF_INET;
- break;
- case CURL_IPRESOLVE_V6:
- pf = PF_INET6;
- break;
- default:
- pf = PF_UNSPEC;
- break;
- }
-
- if((pf != PF_INET) && !Curl_ipv6works())
- /* the stack seems to be a non-ipv6 one */
- pf = PF_INET;
-
-#endif /* CURLRES_IPV6 */
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = pf;
- hints.ai_socktype = conn->socktype;
-
- snprintf(sbuf, sizeof(sbuf), "%d", port);
-
- /* fire up a new resolver thread! */
- if(init_resolve_thread(conn, hostname, port, &hints)) {
- *waitp = 1; /* expect asynchronous response */
- return NULL;
- }
-
- /* fall-back to blocking version */
- infof(conn->data, "init_resolve_thread() failed for %s; %s\n",
- hostname, Curl_strerror(conn, ERRNO));
-
- error = Curl_getaddrinfo_ex(hostname, sbuf, &hints, &res);
- if(error) {
- infof(conn->data, "getaddrinfo() failed for %s:%d; %s\n",
- hostname, port, Curl_strerror(conn, SOCKERRNO));
- return NULL;
- }
- return res;
-}
-
-#endif /* !HAVE_GETADDRINFO */
-
-CURLcode Curl_set_dns_servers(struct SessionHandle *data,
- char *servers)
-{
- (void)data;
- (void)servers;
- return CURLE_NOT_BUILT_IN;
-
-}
-
-CURLcode Curl_set_dns_interface(struct SessionHandle *data,
- const char *interf)
-{
- (void)data;
- (void)interf;
- return CURLE_NOT_BUILT_IN;
-}
-
-CURLcode Curl_set_dns_local_ip4(struct SessionHandle *data,
- const char *local_ip4)
-{
- (void)data;
- (void)local_ip4;
- return CURLE_NOT_BUILT_IN;
-}
-
-CURLcode Curl_set_dns_local_ip6(struct SessionHandle *data,
- const char *local_ip6)
-{
- (void)data;
- (void)local_ip6;
- return CURLE_NOT_BUILT_IN;
-}
-
-#endif /* CURLRES_THREADED */
diff --git a/external/libcurl_android/jni/libcurl/lib/asyn.h b/external/libcurl_android/jni/libcurl/lib/asyn.h
deleted file mode 100755
index 1b681ea1..00000000
--- a/external/libcurl_android/jni/libcurl/lib/asyn.h
+++ /dev/null
@@ -1,168 +0,0 @@
-#ifndef HEADER_CURL_ASYN_H
-#define HEADER_CURL_ASYN_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-#include "curl_addrinfo.h"
-
-struct addrinfo;
-struct hostent;
-struct SessionHandle;
-struct connectdata;
-struct Curl_dns_entry;
-
-/*
- * This header defines all functions in the internal asynch resolver interface.
- * All asynch resolvers need to provide these functions.
- * asyn-ares.c and asyn-thread.c are the current implementations of asynch
- * resolver backends.
- */
-
-/*
- * Curl_resolver_global_init()
- *
- * Called from curl_global_init() to initialize global resolver environment.
- * Returning anything else than CURLE_OK fails curl_global_init().
- */
-int Curl_resolver_global_init(void);
-
-/*
- * Curl_resolver_global_cleanup()
- * Called from curl_global_cleanup() to destroy global resolver environment.
- */
-void Curl_resolver_global_cleanup(void);
-
-/*
- * Curl_resolver_init()
- * Called from curl_easy_init() -> Curl_open() to initialize resolver
- * URL-state specific environment ('resolver' member of the UrlState
- * structure). Should fill the passed pointer by the initialized handler.
- * Returning anything else than CURLE_OK fails curl_easy_init() with the
- * correspondent code.
- */
-CURLcode Curl_resolver_init(void **resolver);
-
-/*
- * Curl_resolver_cleanup()
- * Called from curl_easy_cleanup() -> Curl_close() to cleanup resolver
- * URL-state specific environment ('resolver' member of the UrlState
- * structure). Should destroy the handler and free all resources connected to
- * it.
- */
-void Curl_resolver_cleanup(void *resolver);
-
-/*
- * Curl_resolver_duphandle()
- * Called from curl_easy_duphandle() to duplicate resolver URL-state specific
- * environment ('resolver' member of the UrlState structure). Should
- * duplicate the 'from' handle and pass the resulting handle to the 'to'
- * pointer. Returning anything else than CURLE_OK causes failed
- * curl_easy_duphandle() call.
- */
-int Curl_resolver_duphandle(void **to, void *from);
-
-/*
- * Curl_resolver_cancel().
- *
- * It is called from inside other functions to cancel currently performing
- * resolver request. Should also free any temporary resources allocated to
- * perform a request.
- */
-void Curl_resolver_cancel(struct connectdata *conn);
-
-/* Curl_resolver_getsock()
- *
- * This function is called from the multi_getsock() function. 'sock' is a
- * pointer to an array to hold the file descriptors, with 'numsock' being the
- * size of that array (in number of entries). This function is supposed to
- * return bitmask indicating what file descriptors (referring to array indexes
- * in the 'sock' array) to wait for, read/write.
- */
-int Curl_resolver_getsock(struct connectdata *conn, curl_socket_t *sock,
- int numsocks);
-
-/*
- * Curl_resolver_is_resolved()
- *
- * Called repeatedly to check if a previous name resolve request has
- * completed. It should also make sure to time-out if the operation seems to
- * take too long.
- *
- * Returns normal CURLcode errors.
- */
-CURLcode Curl_resolver_is_resolved(struct connectdata *conn,
- struct Curl_dns_entry **dns);
-
-/*
- * Curl_resolver_wait_resolv()
- *
- * waits for a resolve to finish. This function should be avoided since using
- * this risk getting the multi interface to "hang".
- *
- * If 'entry' is non-NULL, make it point to the resolved dns entry
- *
- * Returns CURLE_COULDNT_RESOLVE_HOST if the host was not resolved, and
- * CURLE_OPERATION_TIMEDOUT if a time-out occurred.
-
- */
-CURLcode Curl_resolver_wait_resolv(struct connectdata *conn,
- struct Curl_dns_entry **dnsentry);
-
-/*
- * Curl_resolver_getaddrinfo() - when using this resolver
- *
- * Returns name information about the given hostname and port number. If
- * successful, the 'hostent' is returned and the forth argument will point to
- * memory we need to free after use. That memory *MUST* be freed with
- * Curl_freeaddrinfo(), nothing else.
- *
- * Each resolver backend must of course make sure to return data in the
- * correct format to comply with this.
- */
-Curl_addrinfo *Curl_resolver_getaddrinfo(struct connectdata *conn,
- const char *hostname,
- int port,
- int *waitp);
-
-#ifndef CURLRES_ASYNCH
-/* convert these functions if an asynch resolver isn't used */
-#define Curl_resolver_cancel(x) Curl_nop_stmt
-#define Curl_resolver_is_resolved(x,y) CURLE_COULDNT_RESOLVE_HOST
-#define Curl_resolver_wait_resolv(x,y) CURLE_COULDNT_RESOLVE_HOST
-#define Curl_resolver_getsock(x,y,z) 0
-#define Curl_resolver_duphandle(x,y) CURLE_OK
-#define Curl_resolver_init(x) CURLE_OK
-#define Curl_resolver_global_init() CURLE_OK
-#define Curl_resolver_global_cleanup() Curl_nop_stmt
-#define Curl_resolver_cleanup(x) Curl_nop_stmt
-#endif
-
-#ifdef CURLRES_ASYNCH
-#define Curl_resolver_asynch() 1
-#else
-#define Curl_resolver_asynch() 0
-#endif
-
-
-/********** end of generic resolver interface functions *****************/
-#endif /* HEADER_CURL_ASYN_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/base64.c b/external/libcurl_android/jni/libcurl/lib/base64.c
deleted file mode 100755
index bd9ba35b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/base64.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* Base64 encoding/decoding */
-
-#include "curl_setup.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "urldata.h" /* for the SessionHandle definition */
-#include "warnless.h"
-#include "curl_base64.h"
-#include "curl_memory.h"
-#include "non-ascii.h"
-
-/* include memdebug.h last */
-#include "memdebug.h"
-
-/* ---- Base64 Encoding/Decoding Table --- */
-static const char base64[]=
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-
-/* The Base 64 encoding with an URL and filename safe alphabet, RFC 4648
- section 5 */
-static const char base64url[]=
- "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
-
-static size_t decodeQuantum(unsigned char *dest, const char *src)
-{
- size_t padding = 0;
- const char *s, *p;
- unsigned long i, v, x = 0;
-
- for(i = 0, s = src; i < 4; i++, s++) {
- v = 0;
-
- if(*s == '=') {
- x = (x << 6);
- padding++;
- }
- else {
- p = base64;
-
- while(*p && (*p != *s)) {
- v++;
- p++;
- }
-
- if(*p == *s)
- x = (x << 6) + v;
- else
- return 0;
- }
- }
-
- if(padding < 1)
- dest[2] = curlx_ultouc(x & 0xFFUL);
-
- x >>= 8;
- if(padding < 2)
- dest[1] = curlx_ultouc(x & 0xFFUL);
-
- x >>= 8;
- dest[0] = curlx_ultouc(x & 0xFFUL);
-
- return 3 - padding;
-}
-
-/*
- * Curl_base64_decode()
- *
- * Given a base64 NUL-terminated string at src, decode it and return a
- * pointer in *outptr to a newly allocated memory area holding decoded
- * data. Size of decoded data is returned in variable pointed by outlen.
- *
- * Returns CURLE_OK on success, otherwise specific error code. Function
- * output shall not be considered valid unless CURLE_OK is returned.
- *
- * When decoded data length is 0, returns NULL in *outptr.
- *
- * @unittest: 1302
- */
-CURLcode Curl_base64_decode(const char *src,
- unsigned char **outptr, size_t *outlen)
-{
- size_t srclen = 0;
- size_t length = 0;
- size_t padding = 0;
- size_t i;
- size_t result;
- size_t numQuantums;
- size_t rawlen = 0;
- unsigned char *pos;
- unsigned char *newstr;
-
- *outptr = NULL;
- *outlen = 0;
- srclen = strlen(src);
-
- /* Check the length of the input string is valid */
- if(!srclen || srclen % 4)
- return CURLE_BAD_CONTENT_ENCODING;
-
- /* Find the position of any = padding characters */
- while((src[length] != '=') && src[length])
- length++;
-
- /* A maximum of two = padding characters is allowed */
- if(src[length] == '=') {
- padding++;
- if(src[length + 1] == '=')
- padding++;
- }
-
- /* Check the = padding characters weren't part way through the input */
- if(length + padding != srclen)
- return CURLE_BAD_CONTENT_ENCODING;
-
- /* Calculate the number of quantums */
- numQuantums = srclen / 4;
-
- /* Calculate the size of the decoded string */
- rawlen = (numQuantums * 3) - padding;
-
- /* Allocate our buffer including room for a zero terminator */
- newstr = malloc(rawlen + 1);
- if(!newstr)
- return CURLE_OUT_OF_MEMORY;
-
- pos = newstr;
-
- /* Decode the quantums */
- for(i = 0; i < numQuantums; i++) {
- result = decodeQuantum(pos, src);
- if(!result) {
- Curl_safefree(newstr);
-
- return CURLE_BAD_CONTENT_ENCODING;
- }
-
- pos += result;
- src += 4;
- }
-
- /* Zero terminate */
- *pos = '\0';
-
- /* Return the decoded data */
- *outptr = newstr;
- *outlen = rawlen;
-
- return CURLE_OK;
-}
-
-static CURLcode base64_encode(const char *table64,
- struct SessionHandle *data,
- const char *inputbuff, size_t insize,
- char **outptr, size_t *outlen)
-{
- CURLcode error;
- unsigned char ibuf[3];
- unsigned char obuf[4];
- int i;
- int inputparts;
- char *output;
- char *base64data;
- char *convbuf = NULL;
-
- const char *indata = inputbuff;
-
- *outptr = NULL;
- *outlen = 0;
-
- if(0 == insize)
- insize = strlen(indata);
-
- base64data = output = malloc(insize*4/3+4);
- if(NULL == output)
- return CURLE_OUT_OF_MEMORY;
-
- /*
- * The base64 data needs to be created using the network encoding
- * not the host encoding. And we can't change the actual input
- * so we copy it to a buffer, translate it, and use that instead.
- */
- error = Curl_convert_clone(data, indata, insize, &convbuf);
- if(error) {
- free(output);
- return error;
- }
-
- if(convbuf)
- indata = (char *)convbuf;
-
- while(insize > 0) {
- for(i = inputparts = 0; i < 3; i++) {
- if(insize > 0) {
- inputparts++;
- ibuf[i] = (unsigned char) *indata;
- indata++;
- insize--;
- }
- else
- ibuf[i] = 0;
- }
-
- obuf[0] = (unsigned char) ((ibuf[0] & 0xFC) >> 2);
- obuf[1] = (unsigned char) (((ibuf[0] & 0x03) << 4) | \
- ((ibuf[1] & 0xF0) >> 4));
- obuf[2] = (unsigned char) (((ibuf[1] & 0x0F) << 2) | \
- ((ibuf[2] & 0xC0) >> 6));
- obuf[3] = (unsigned char) (ibuf[2] & 0x3F);
-
- switch(inputparts) {
- case 1: /* only one byte read */
- snprintf(output, 5, "%c%c==",
- table64[obuf[0]],
- table64[obuf[1]]);
- break;
- case 2: /* two bytes read */
- snprintf(output, 5, "%c%c%c=",
- table64[obuf[0]],
- table64[obuf[1]],
- table64[obuf[2]]);
- break;
- default:
- snprintf(output, 5, "%c%c%c%c",
- table64[obuf[0]],
- table64[obuf[1]],
- table64[obuf[2]],
- table64[obuf[3]] );
- break;
- }
- output += 4;
- }
- *output = '\0';
- *outptr = base64data; /* return pointer to new data, allocated memory */
-
- if(convbuf)
- free(convbuf);
-
- *outlen = strlen(base64data); /* return the length of the new data */
-
- return CURLE_OK;
-}
-
-/*
- * Curl_base64_encode()
- *
- * Given a pointer to an input buffer and an input size, encode it and
- * return a pointer in *outptr to a newly allocated memory area holding
- * encoded data. Size of encoded data is returned in variable pointed by
- * outlen.
- *
- * Input length of 0 indicates input buffer holds a NUL-terminated string.
- *
- * Returns CURLE_OK on success, otherwise specific error code. Function
- * output shall not be considered valid unless CURLE_OK is returned.
- *
- * When encoded data length is 0, returns NULL in *outptr.
- *
- * @unittest: 1302
- */
-CURLcode Curl_base64_encode(struct SessionHandle *data,
- const char *inputbuff, size_t insize,
- char **outptr, size_t *outlen)
-{
- return base64_encode(base64, data, inputbuff, insize, outptr, outlen);
-}
-
-/*
- * Curl_base64url_encode()
- *
- * Given a pointer to an input buffer and an input size, encode it and
- * return a pointer in *outptr to a newly allocated memory area holding
- * encoded data. Size of encoded data is returned in variable pointed by
- * outlen.
- *
- * Input length of 0 indicates input buffer holds a NUL-terminated string.
- *
- * Returns CURLE_OK on success, otherwise specific error code. Function
- * output shall not be considered valid unless CURLE_OK is returned.
- *
- * When encoded data length is 0, returns NULL in *outptr.
- *
- * @unittest: 1302
- */
-CURLcode Curl_base64url_encode(struct SessionHandle *data,
- const char *inputbuff, size_t insize,
- char **outptr, size_t *outlen)
-{
- return base64_encode(base64url, data, inputbuff, insize, outptr, outlen);
-}
-/* ---- End of Base64 Encoding ---- */
diff --git a/external/libcurl_android/jni/libcurl/lib/bundles.c b/external/libcurl_android/jni/libcurl/lib/bundles.c
deleted file mode 100755
index aadf0265..00000000
--- a/external/libcurl_android/jni/libcurl/lib/bundles.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012, Linus Nielsen Feltzing, <linus@haxx.se>
- * Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "url.h"
-#include "progress.h"
-#include "multiif.h"
-#include "bundles.h"
-#include "sendf.h"
-#include "rawstr.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static void conn_llist_dtor(void *user, void *element)
-{
- struct connectdata *data = element;
- (void)user;
-
- data->bundle = NULL;
-}
-
-CURLcode Curl_bundle_create(struct SessionHandle *data,
- struct connectbundle **cb_ptr)
-{
- (void)data;
- DEBUGASSERT(*cb_ptr == NULL);
- *cb_ptr = malloc(sizeof(struct connectbundle));
- if(!*cb_ptr)
- return CURLE_OUT_OF_MEMORY;
-
- (*cb_ptr)->num_connections = 0;
- (*cb_ptr)->server_supports_pipelining = FALSE;
-
- (*cb_ptr)->conn_list = Curl_llist_alloc((curl_llist_dtor) conn_llist_dtor);
- if(!(*cb_ptr)->conn_list) {
- Curl_safefree(*cb_ptr);
- return CURLE_OUT_OF_MEMORY;
- }
- return CURLE_OK;
-}
-
-void Curl_bundle_destroy(struct connectbundle *cb_ptr)
-{
- if(!cb_ptr)
- return;
-
- if(cb_ptr->conn_list) {
- Curl_llist_destroy(cb_ptr->conn_list, NULL);
- cb_ptr->conn_list = NULL;
- }
- Curl_safefree(cb_ptr);
-}
-
-/* Add a connection to a bundle */
-CURLcode Curl_bundle_add_conn(struct connectbundle *cb_ptr,
- struct connectdata *conn)
-{
- if(!Curl_llist_insert_next(cb_ptr->conn_list, cb_ptr->conn_list->tail, conn))
- return CURLE_OUT_OF_MEMORY;
-
- conn->bundle = cb_ptr;
-
- cb_ptr->num_connections++;
- return CURLE_OK;
-}
-
-/* Remove a connection from a bundle */
-int Curl_bundle_remove_conn(struct connectbundle *cb_ptr,
- struct connectdata *conn)
-{
- struct curl_llist_element *curr;
-
- curr = cb_ptr->conn_list->head;
- while(curr) {
- if(curr->ptr == conn) {
- Curl_llist_remove(cb_ptr->conn_list, curr, NULL);
- cb_ptr->num_connections--;
- conn->bundle = NULL;
- return 1; /* we removed a handle */
- }
- curr = curr->next;
- }
- return 0;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/bundles.h b/external/libcurl_android/jni/libcurl/lib/bundles.h
deleted file mode 100755
index 3816c406..00000000
--- a/external/libcurl_android/jni/libcurl/lib/bundles.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef HEADER_CURL_BUNDLES_H
-#define HEADER_CURL_BUNDLES_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012, Linus Nielsen Feltzing, <linus@haxx.se>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-struct connectbundle {
- bool server_supports_pipelining; /* TRUE if server supports pipelining,
- set after first response */
- size_t num_connections; /* Number of connections in the bundle */
- struct curl_llist *conn_list; /* The connectdata members of the bundle */
-};
-
-CURLcode Curl_bundle_create(struct SessionHandle *data,
- struct connectbundle **cb_ptr);
-
-void Curl_bundle_destroy(struct connectbundle *cb_ptr);
-
-CURLcode Curl_bundle_add_conn(struct connectbundle *cb_ptr,
- struct connectdata *conn);
-
-int Curl_bundle_remove_conn(struct connectbundle *cb_ptr,
- struct connectdata *conn);
-
-
-#endif /* HEADER_CURL_BUNDLES_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/config-amigaos.h b/external/libcurl_android/jni/libcurl/lib/config-amigaos.h
deleted file mode 100755
index 76d88775..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-amigaos.h
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_AMIGAOS_H
-#define HEADER_CURL_CONFIG_AMIGAOS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* Hand crafted config file for AmigaOS */
-/* ================================================================ */
-
-#ifdef __AMIGA__ /* Any AmigaOS flavour */
-
-#define HAVE_ARPA_INET_H 1
-#define HAVE_CLOSESOCKET_CAMEL 1
-#define HAVE_ERRNO_H 1
-#define HAVE_GETHOSTBYADDR 1
-#define HAVE_INET_ADDR 1
-#define HAVE_INTTYPES_H 1
-#define HAVE_IOCTLSOCKET_CAMEL 1
-#define HAVE_IOCTLSOCKET_CAMEL_FIONBIO 1
-#define HAVE_LIBCRYPTO 1
-#define HAVE_LIBSSL 1
-#define HAVE_LIBZ 1
-#define HAVE_LONGLONG 1
-#define HAVE_MALLOC_H 1
-#define HAVE_MEMORY_H 1
-#define HAVE_NETDB_H 1
-#define HAVE_NETINET_IN_H 1
-#define HAVE_NET_IF_H 1
-#define HAVE_OPENSSL_CRYPTO_H 1
-#define HAVE_OPENSSL_ERR_H 1
-#define HAVE_OPENSSL_PEM_H 1
-#define HAVE_OPENSSL_RSA_H 1
-#define HAVE_OPENSSL_SSL_H 1
-#define HAVE_OPENSSL_X509_H 1
-#define HAVE_PERROR 1
-#define HAVE_PWD_H 1
-#define HAVE_RAND_EGD 1
-#define HAVE_RAND_STATUS 1
-#define HAVE_SELECT 1
-#define HAVE_SETJMP_H 1
-#define HAVE_SGTTY_H 1
-#define HAVE_SIGNAL 1
-#define HAVE_SIGNAL_H 1
-#define HAVE_SIG_ATOMIC_T 1
-#define HAVE_SOCKET 1
-#define HAVE_STRCASECMP 1
-#define HAVE_STRDUP 1
-#define HAVE_STRFTIME 1
-#define HAVE_STRICMP 1
-#define HAVE_STRINGS_H 1
-#define HAVE_STRING_H 1
-#define HAVE_STRSTR 1
-#define HAVE_STRUCT_TIMEVAL 1
-#define HAVE_SYS_PARAM_H 1
-#define HAVE_SYS_SOCKET_H 1
-#define HAVE_SYS_SOCKIO_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_TIME_H 1
-#define HAVE_UNAME 1
-#define HAVE_UNISTD_H 1
-#define HAVE_UTIME 1
-#define HAVE_UTIME_H 1
-#define HAVE_WRITABLE_ARGV 1
-#define HAVE_ZLIB_H 1
-#define HAVE_SYS_IOCTL_H 1
-
-#define NEED_MALLOC_H 1
-
-#define SIZEOF_INT 4
-#define SIZEOF_SHORT 2
-#define SIZEOF_SIZE_T 4
-
-#define USE_MANUAL 1
-#define USE_OPENSSL 1
-#define USE_SSLEAY 1
-#define CURL_DISABLE_LDAP 1
-
-#define OS "AmigaOS"
-
-#define PACKAGE "curl"
-#define PACKAGE_BUGREPORT "curl-bug@haxx.se"
-#define PACKAGE_NAME "curl"
-#define PACKAGE_STRING "curl -"
-#define PACKAGE_TARNAME "curl"
-#define PACKAGE_VERSION "-"
-#define CURL_CA_BUNDLE "s:curl-ca-bundle.crt"
-
-#define RETSIGTYPE void
-#define SELECT_TYPE_ARG1 int
-#define SELECT_TYPE_ARG234 (fd_set *)
-#define SELECT_TYPE_ARG5 (struct timeval *)
-
-#define STDC_HEADERS 1
-#define TIME_WITH_SYS_TIME 1
-
-#define in_addr_t int
-
-#ifndef F_OK
-# define F_OK 0
-#endif
-
-#ifndef O_RDONLY
-# define O_RDONLY 0x0000
-#endif
-
-#ifndef LONG_MAX
-# define LONG_MAX 0x7fffffffL
-#endif
-
-#ifndef LONG_MIN
-# define LONG_MIN (-0x7fffffffL-1)
-#endif
-
-#define HAVE_GETNAMEINFO 1
-#define GETNAMEINFO_QUAL_ARG1 const
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-#define GETNAMEINFO_TYPE_ARG2 int
-#define GETNAMEINFO_TYPE_ARG46 size_t
-#define GETNAMEINFO_TYPE_ARG7 int
-
-#define HAVE_RECV 1
-#define RECV_TYPE_ARG1 long
-#define RECV_TYPE_ARG2 char *
-#define RECV_TYPE_ARG3 long
-#define RECV_TYPE_ARG4 long
-#define RECV_TYPE_RETV long
-
-#define HAVE_RECVFROM 1
-#define RECVFROM_TYPE_ARG1 long
-#define RECVFROM_TYPE_ARG2 char
-#define RECVFROM_TYPE_ARG3 long
-#define RECVFROM_TYPE_ARG4 long
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-#define RECVFROM_TYPE_ARG6 long
-#define RECVFROM_TYPE_RETV long
-
-#define HAVE_SEND 1
-#define SEND_TYPE_ARG1 int
-#define SEND_QUAL_ARG2 const
-#define SEND_TYPE_ARG2 char *
-#define SEND_TYPE_ARG3 int
-#define SEND_TYPE_ARG4 int
-#define SEND_TYPE_RETV int
-
-#endif /* __AMIGA__ */
-#endif /* HEADER_CURL_CONFIG_AMIGAOS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/config-dos.h b/external/libcurl_android/jni/libcurl/lib/config-dos.h
deleted file mode 100755
index dd5b06db..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-dos.h
+++ /dev/null
@@ -1,187 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_DOS_H
-#define HEADER_CURL_CONFIG_DOS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-
-/* ================================================================ */
-/* lib/config-dos.h - Hand crafted config file for DOS */
-/* ================================================================ */
-
-#if defined(DJGPP)
- #define OS "MSDOS/djgpp"
-#elif defined(__HIGHC__)
- #define OS "MSDOS/HighC"
-#elif defined(__WATCOMC__)
- #define OS "MSDOS/Watcom"
-#else
- #define OS "MSDOS/?"
-#endif
-
-#define PACKAGE "curl"
-
-#define HAVE_ARPA_INET_H 1
-#define HAVE_ERRNO_H 1
-#define HAVE_FCNTL_H 1
-#define HAVE_GETADDRINFO 1
-#define HAVE_GETNAMEINFO 1
-#define HAVE_GETPROTOBYNAME 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_IO_H 1
-#define HAVE_IOCTL 1
-#define HAVE_IOCTL_FIONBIO 1
-#define HAVE_IOCTLSOCKET 1
-#define HAVE_IOCTLSOCKET_FIONBIO 1
-#define HAVE_LIMITS_H 1
-#define HAVE_LOCALE_H 1
-#define HAVE_LONGLONG 1
-#define HAVE_MEMORY_H 1
-#define HAVE_NETDB_H 1
-#define HAVE_NETINET_IN_H 1
-#define HAVE_NETINET_TCP_H 1
-#define HAVE_NET_IF_H 1
-#define HAVE_PROCESS_H 1
-#define HAVE_RECV 1
-#define HAVE_RECVFROM 1
-#define HAVE_SELECT 1
-#define HAVE_SEND 1
-#define HAVE_SETJMP_H 1
-#define HAVE_SETLOCALE 1
-#define HAVE_SETMODE 1
-#define HAVE_SIGNAL 1
-#define HAVE_SOCKET 1
-#define HAVE_STRDUP 1
-#define HAVE_STRICMP 1
-#define HAVE_STRTOLL 1
-#define HAVE_STRUCT_TIMEVAL 1
-#define HAVE_STRUCT_IN6_ADDR 1
-#define HAVE_SYS_IOCTL_H 1
-#define HAVE_SYS_SOCKET_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_TIME_H 1
-#define HAVE_UNISTD_H 1
-
-#define NEED_MALLOC_H 1
-
-#define RETSIGTYPE void
-#define SIZEOF_INT 4
-#define SIZEOF_LONG_DOUBLE 16
-#define SIZEOF_SHORT 2
-#define SIZEOF_SIZE_T 4
-#define STDC_HEADERS 1
-#define TIME_WITH_SYS_TIME 1
-
-/* Qualifiers for send(), recv(), recvfrom() and getnameinfo(). */
-
-#define SEND_TYPE_ARG1 int
-#define SEND_QUAL_ARG2 const
-#define SEND_TYPE_ARG2 void *
-#define SEND_TYPE_ARG3 int
-#define SEND_TYPE_ARG4 int
-#define SEND_TYPE_RETV int
-
-#define RECV_TYPE_ARG1 int
-#define RECV_TYPE_ARG2 void *
-#define RECV_TYPE_ARG3 int
-#define RECV_TYPE_ARG4 int
-#define RECV_TYPE_RETV int
-
-#define RECVFROM_TYPE_ARG1 int
-#define RECVFROM_TYPE_ARG2 void
-#define RECVFROM_TYPE_ARG3 int
-#define RECVFROM_TYPE_ARG4 int
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-#define RECVFROM_TYPE_ARG6 int
-#define RECVFROM_TYPE_RETV int
-#define RECVFROM_TYPE_ARG2_IS_VOID 1
-
-#define GETNAMEINFO_QUAL_ARG1 const
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-#define GETNAMEINFO_TYPE_ARG2 int
-#define GETNAMEINFO_TYPE_ARG46 int
-#define GETNAMEINFO_TYPE_ARG7 int
-
-#define BSD
-
-/* CURLDEBUG definition enables memory tracking */
-/* #define CURLDEBUG */
-
-/* USE_ZLIB on cmd-line */
-#ifdef USE_ZLIB
- #define HAVE_ZLIB_H 1
- #define HAVE_LIBZ 1
-#endif
-
-/* USE_SSLEAY on cmd-line */
-#ifdef USE_SSLEAY
- #define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
- #define HAVE_OPENSSL_ENGINE_H 1
- #define OPENSSL_NO_KRB5 1
- #define USE_OPENSSL 1
-#endif
-
-/* to disable LDAP */
-#define CURL_DISABLE_LDAP 1
-
-#define in_addr_t u_long
-
-#if defined(__HIGHC__) || \
- (defined(__GNUC__) && (__GNUC__ < 4))
- #define ssize_t int
-#endif
-
-#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")
-
-/* Target HAVE_x section */
-
-#if defined(DJGPP)
- #define HAVE_BASENAME 1
- #define HAVE_STRCASECMP 1
- #define HAVE_SIGACTION 1
- #define HAVE_SIGSETJMP 1
- #define HAVE_SYS_TIME_H 1
- #define HAVE_TERMIOS_H 1
- #define HAVE_VARIADIC_MACROS_GCC 1
-
- /* Because djgpp <= 2.03 doesn't have snprintf() etc. */
- #if (DJGPP_MINOR < 4)
- #define _MPRINTF_REPLACE
- #endif
-
-#elif defined(__WATCOMC__)
- #define HAVE_STRCASECMP 1
-
-#elif defined(__HIGHC__)
- #define HAVE_SYS_TIME_H 1
- #define strerror(e) strerror_s_((e))
-#endif
-
-#ifdef MSDOS /* Watt-32 */
- #define HAVE_CLOSE_S 1
-#endif
-
-#undef word
-#undef byte
-
-#endif /* HEADER_CURL_CONFIG_DOS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/config-mac.h b/external/libcurl_android/jni/libcurl/lib/config-mac.h
deleted file mode 100755
index d89c3851..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-mac.h
+++ /dev/null
@@ -1,126 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_MAC_H
-#define HEADER_CURL_CONFIG_MAC_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* =================================================================== */
-/* Hand crafted config file for Mac OS 9 */
-/* =================================================================== */
-/* On Mac OS X you must run configure to generate curl_config.h file */
-/* =================================================================== */
-
-#define OS "mac"
-
-/* Define if you want the built-in manual */
-#define USE_MANUAL 1
-
-#define HAVE_ERRNO_H 1
-#define HAVE_NETINET_IN_H 1
-#define HAVE_SYS_SOCKET_H 1
-#define HAVE_SYS_SELECT_H 1
-#define HAVE_NETDB_H 1
-#define HAVE_ARPA_INET_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_NET_IF_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_FCNTL_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_ALLOCA_H 1
-#define HAVE_STDLIB_H 1
-#define HAVE_TIME_H 1
-#define HAVE_UTIME_H 1
-#define HAVE_SYS_TIME_H 1
-#define HAVE_SYS_UTIME_H 1
-
-#define TIME_WITH_SYS_TIME 1
-
-#define HAVE_ALARM 1
-#define HAVE_FTRUNCATE 1
-#define HAVE_UTIME 1
-#define HAVE_SETVBUF 1
-#define HAVE_STRFTIME 1
-#define HAVE_INET_ADDR 1
-#define HAVE_MEMCPY 1
-#define HAVE_SELECT 1
-#define HAVE_SOCKET 1
-#define HAVE_STRUCT_TIMEVAL 1
-
-#define HAVE_SIGACTION 1
-#define HAVE_SIGNAL_H 1
-#define HAVE_SIG_ATOMIC_T 1
-
-#ifdef MACOS_SSL_SUPPORT
-# define USE_SSLEAY 1
-# define USE_OPENSSL 1
-#endif
-
-#define CURL_DISABLE_LDAP 1
-
-#define HAVE_RAND_STATUS 1
-#define HAVE_RAND_EGD 1
-
-#define HAVE_IOCTL 1
-#define HAVE_IOCTL_FIONBIO 1
-
-#define RETSIGTYPE void
-
-#define SIZEOF_INT 4
-#define SIZEOF_SHORT 2
-#define SIZEOF_SIZE_T 4
-
-#define HAVE_GETNAMEINFO 1
-#define GETNAMEINFO_QUAL_ARG1 const
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-#define GETNAMEINFO_TYPE_ARG2 socklen_t
-#define GETNAMEINFO_TYPE_ARG46 size_t
-#define GETNAMEINFO_TYPE_ARG7 int
-
-#define HAVE_RECV 1
-#define RECV_TYPE_ARG1 int
-#define RECV_TYPE_ARG2 void *
-#define RECV_TYPE_ARG3 size_t
-#define RECV_TYPE_ARG4 int
-#define RECV_TYPE_RETV ssize_t
-
-#define HAVE_RECVFROM 1
-#define RECVFROM_TYPE_ARG1 int
-#define RECVFROM_TYPE_ARG2 void
-#define RECVFROM_TYPE_ARG3 size_t
-#define RECVFROM_TYPE_ARG4 int
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-#define RECVFROM_TYPE_ARG6 int
-#define RECVFROM_TYPE_RETV ssize_t
-#define RECVFROM_TYPE_ARG2_IS_VOID 1
-
-#define HAVE_SEND 1
-#define SEND_TYPE_ARG1 int
-#define SEND_QUAL_ARG2 const
-#define SEND_TYPE_ARG2 void *
-#define SEND_TYPE_ARG3 size_T
-#define SEND_TYPE_ARG4 int
-#define SEND_TYPE_RETV ssize_t
-
-#define HAVE_EXTRA_STRICMP_H 1
-#define HAVE_EXTRA_STRDUP_H 1
-
-#endif /* HEADER_CURL_CONFIG_MAC_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/config-os400.h b/external/libcurl_android/jni/libcurl/lib/config-os400.h
deleted file mode 100755
index e65e30ac..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-os400.h
+++ /dev/null
@@ -1,560 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_OS400_H
-#define HEADER_CURL_CONFIG_OS400_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* Hand crafted config file for OS/400 */
-/* ================================================================ */
-
-#pragma enum(int)
-
-#undef PACKAGE
-
-/* Version number of this archive. */
-#undef VERSION
-
-/* Define if you have the getpass function. */
-#undef HAVE_GETPASS
-
-/* Define cpu-machine-OS */
-#define OS "OS/400"
-
-/* Define if you have the gethostbyaddr_r() function with 5 arguments */
-#define HAVE_GETHOSTBYADDR_R_5
-
-/* Define if you have the gethostbyaddr_r() function with 7 arguments */
-#undef HAVE_GETHOSTBYADDR_R_7
-
-/* Define if you have the gethostbyaddr_r() function with 8 arguments */
-#undef HAVE_GETHOSTBYADDR_R_8
-
-/* OS400 supports a 3-argument ASCII version of gethostbyaddr_r(), but its
- * prototype is incompatible with the "standard" one (1st argument is not
- * const). However, getaddrinfo() is supported (ASCII version defined as
- * a local wrapper in setup-os400.h) in a threadsafe way: we can then
- * configure getaddrinfo() as such and get rid of gethostbyname_r() without
- * loss of threadsafeness. */
-#undef HAVE_GETHOSTBYNAME_R
-#undef HAVE_GETHOSTBYNAME_R_3
-#undef HAVE_GETHOSTBYNAME_R_5
-#undef HAVE_GETHOSTBYNAME_R_6
-#define HAVE_GETADDRINFO
-#define HAVE_GETADDRINFO_THREADSAFE
-
-/* Define if you need the _REENTRANT define for some functions */
-#undef NEED_REENTRANT
-
-/* Define if you have the Kerberos4 libraries (including -ldes) */
-#undef HAVE_KRB4
-
-/* Define if you want to enable IPv6 support */
-#define ENABLE_IPV6
-
-/* Define if struct sockaddr_in6 has the sin6_scope_id member */
-#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
-
-/* Define this to 'int' if ssize_t is not an available typedefed type */
-#undef ssize_t
-
-/* Define this as a suitable file to read random data from */
-#undef RANDOM_FILE
-
-/* Define this to your Entropy Gathering Daemon socket pathname */
-#undef EGD_SOCKET
-
-/* Define to 1 if you have the alarm function. */
-#define HAVE_ALARM 1
-
-/* Define if you have the <alloca.h> header file. */
-#undef HAVE_ALLOCA_H
-
-/* Define if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H
-
-/* Define if you have the `closesocket' function. */
-#undef HAVE_CLOSESOCKET
-
-/* Define if you have the <crypto.h> header file. */
-#undef HAVE_CRYPTO_H
-
-/* Define if you have the <des.h> header file. */
-#undef HAVE_DES_H
-
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H
-
-/* Define if you have the <err.h> header file. */
-#undef HAVE_ERR_H
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H
-
-/* Define if you have the `geteuid' function. */
-#define HAVE_GETEUID
-
-/* Define if you have the `gethostbyaddr' function. */
-#define HAVE_GETHOSTBYADDR
-
-/* Define if you have the `gethostbyaddr_r' function. */
-#define HAVE_GETHOSTBYADDR_R
-
-/* Define if you have the `gethostname' function. */
-#define HAVE_GETHOSTNAME
-
-/* Define if you have the <getopt.h> header file. */
-#undef HAVE_GETOPT_H
-
-/* Define if you have the `getpass_r' function. */
-#undef HAVE_GETPASS_R
-
-/* Define if you have the `getpwuid' function. */
-#define HAVE_GETPWUID
-
-/* Define if you have the `getservbyname' function. */
-#define HAVE_GETSERVBYNAME
-
-/* Define if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY
-
-/* Define if you have the `timeval' struct. */
-#define HAVE_STRUCT_TIMEVAL
-
-/* Define if you have the `inet_addr' function. */
-#define HAVE_INET_ADDR
-
-/* Define if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H
-
-/* Define if you have the <io.h> header file. */
-#undef HAVE_IO_H
-
-/* Define if you have the `krb_get_our_ip_for_realm' function. */
-#undef HAVE_KRB_GET_OUR_IP_FOR_REALM
-
-/* Define if you have the <krb.h> header file. */
-#undef HAVE_KRB_H
-
-/* Define if you have the `crypto' library (-lcrypto). */
-#undef HAVE_LIBCRYPTO
-
-/* Define if you have the `nsl' library (-lnsl). */
-#undef HAVE_LIBNSL
-
-/* Define if you have the `resolv' library (-lresolv). */
-#undef HAVE_LIBRESOLV
-
-/* Define if you have the `resolve' library (-lresolve). */
-#undef HAVE_LIBRESOLVE
-
-/* Define if you have the `socket' library (-lsocket). */
-#undef HAVE_LIBSOCKET
-
-/* Define if you have the `ssl' library (-lssl). */
-#undef HAVE_LIBSSL
-
-/* Define if you have GSS API. */
-#define HAVE_GSSAPI
-
-/* Define if you have the GNU gssapi libraries */
-#undef HAVE_GSSGNU
-
-/* Define if you have the Heimdal gssapi libraries */
-#define HAVE_GSSHEIMDAL
-
-/* Define if you have the MIT gssapi libraries */
-#undef HAVE_GSSMIT
-
-/* Define if you have the `ucb' library (-lucb). */
-#undef HAVE_LIBUCB
-
-/* Define if you have the `localtime_r' function. */
-#define HAVE_LOCALTIME_R
-
-/* Define if you have the <malloc.h> header file. */
-#define HAVE_MALLOC_H
-
-/* Define if you need the malloc.h header file even with stdlib.h */
-/* #define NEED_MALLOC_H 1 */
-
-/* Define if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H
-
-/* Define if you have the <netinet/if_ether.h> header file. */
-#undef HAVE_NETINET_IF_ETHER_H
-
-/* Define if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H
-
-/* Define if you have the <net/if.h> header file. */
-#define HAVE_NET_IF_H
-
-/* Define if you have the <openssl/crypto.h> header file. */
-#undef HAVE_OPENSSL_CRYPTO_H
-
-/* Define if you have the <openssl/err.h> header file. */
-#undef HAVE_OPENSSL_ERR_H
-
-/* Define if you have the <openssl/pem.h> header file. */
-#undef HAVE_OPENSSL_PEM_H
-
-/* Define if you have the <openssl/rsa.h> header file. */
-#undef HAVE_OPENSSL_RSA_H
-
-/* Define if you have the <openssl/ssl.h> header file. */
-#undef HAVE_OPENSSL_SSL_H
-
-/* Define if you have the <openssl/x509.h> header file. */
-#undef HAVE_OPENSSL_X509_H
-
-/* Define if you have the <pem.h> header file. */
-#undef HAVE_PEM_H
-
-/* Define if you have the `perror' function. */
-#define HAVE_PERROR
-
-/* Define if you have the <pwd.h> header file. */
-#define HAVE_PWD_H
-
-/* Define if you have the `RAND_egd' function. */
-#undef HAVE_RAND_EGD
-
-/* Define if you have the `RAND_screen' function. */
-#undef HAVE_RAND_SCREEN
-
-/* Define if you have the `RAND_status' function. */
-#undef HAVE_RAND_STATUS
-
-/* Define if you have the <rsa.h> header file. */
-#undef HAVE_RSA_H
-
-/* Define if you have the `select' function. */
-#define HAVE_SELECT
-
-/* Define if you have the `setvbuf' function. */
-#define HAVE_SETVBUF
-
-/* Define if you have the <sgtty.h> header file. */
-#undef HAVE_SGTTY_H
-
-/* Define if you have the `sigaction' function. */
-#define HAVE_SIGACTION
-
-/* Define if you have the `signal' function. */
-#undef HAVE_SIGNAL
-
-/* Define if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H
-
-/* Define if sig_atomic_t is an available typedef. */
-#define HAVE_SIG_ATOMIC_T
-
-/* Define if sig_atomic_t is already defined as volatile. */
-#undef HAVE_SIG_ATOMIC_T_VOLATILE
-
-/* Define if you have the `socket' function. */
-#define HAVE_SOCKET
-
-/* Define if you have the <ssl.h> header file. */
-#undef HAVE_SSL_H
-
-/* Define if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-
-/* The following define is needed on OS400 to enable strcmpi(), stricmp() and
- strdup(). */
-#define __cplusplus__strings__
-
-/* Define if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define if you have the `strcmpi' function. */
-#define HAVE_STRCMPI
-
-/* Define if you have the `stricmp' function. */
-#define HAVE_STRICMP
-
-/* Define if you have the `strdup' function. */
-#define HAVE_STRDUP
-
-
-/* Define if you have the `strftime' function. */
-#define HAVE_STRFTIME
-
-/* Define if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H
-
-/* Define if you have the `strlcpy' function. */
-#undef HAVE_STRLCPY
-
-/* Define if you have the <stropts.h> header file. */
-#undef HAVE_STROPTS_H
-
-/* Define if you have the `strstr' function. */
-#define HAVE_STRSTR
-
-/* Define if you have the `strtok_r' function. */
-#define HAVE_STRTOK_R
-
-/* Define if you have the `strtoll' function. */
-#undef HAVE_STRTOLL /* Allows ASCII compile on V5R1. */
-
-/* Define if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H
-
-/* Define if you have the <sys/select.h> header file. */
-#undef HAVE_SYS_SELECT_H
-
-/* Define if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H
-
-/* Define if you have the <sys/sockio.h> header file. */
-#undef HAVE_SYS_SOCKIO_H
-
-/* Define if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H
-
-/* Define if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H
-
-/* Define if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H
-
-/* Define if you have the <sys/un.h> header file. */
-#define HAVE_SYS_UN_H
-
-/* Define if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H
-
-/* Define if you have the `tcgetattr' function. */
-#undef HAVE_TCGETATTR
-
-/* Define if you have the `tcsetattr' function. */
-#undef HAVE_TCSETATTR
-
-/* Define if you have the <termios.h> header file. */
-#undef HAVE_TERMIOS_H
-
-/* Define if you have the <termio.h> header file. */
-#undef HAVE_TERMIO_H
-
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H
-
-/* Define if you have the `uname' function. */
-#undef HAVE_UNAME
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H
-
-/* Define if you have the <winsock.h> header file. */
-#undef HAVE_WINSOCK_H
-
-/* Define if you have the <x509.h> header file. */
-#undef HAVE_X509_H
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#define RETSIGTYPE void
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of a `long double', as computed by sizeof. */
-#define SIZEOF_LONG_DOUBLE 8
-
-/* Define if the compiler supports the 'long long' data type. */
-#define HAVE_LONGLONG
-
-/* The size of a `long long', as computed by sizeof. */
-#define SIZEOF_LONG_LONG 8
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 8
-
-/* Whether long long constants must be suffixed by LL. */
-
-#define HAVE_LL
-
-/* Define this if you have struct sockaddr_storage */
-#define HAVE_STRUCT_SOCKADDR_STORAGE
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME
-
-/* Version number of package */
-#undef VERSION
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define for large files, on AIX-style hosts. */
-#define _LARGE_FILES
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* type to use in place of in_addr_t if not defined */
-#define in_addr_t unsigned long
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef size_t
-
-/* Define if you have the ioctl function. */
-#define HAVE_IOCTL
-
-/* Define if you have a working ioctl FIONBIO function. */
-#define HAVE_IOCTL_FIONBIO
-
-/* Define if you have a working ioctl SIOCGIFADDR function. */
-#define HAVE_IOCTL_SIOCGIFADDR
-
-/* To disable LDAP */
-#undef CURL_DISABLE_LDAP
-
-/* Definition to make a library symbol externally visible. */
-#define CURL_EXTERN_SYMBOL
-
-/* Define if you have the ldap_url_parse procedure. */
-/* #define HAVE_LDAP_URL_PARSE */ /* Disabled because of an IBM bug. */
-
-/* Define if you have the getnameinfo function. */
-/* OS400 has no ASCII version of this procedure: wrapped in setup-os400.h. */
-#define HAVE_GETNAMEINFO
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-#define GETNAMEINFO_QUAL_ARG1 const
-
-/* Define to the type of arg 1 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-
-/* Define to the type of arg 2 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG2 socklen_t
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 socklen_t
-
-/* Define to the type of arg 7 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG7 int
-
-/* Define if you have the recv function. */
-#define HAVE_RECV
-
-/* Define to the type of arg 1 for recv. */
-#define RECV_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for recv. */
-#define RECV_TYPE_ARG2 char *
-
-/* Define to the type of arg 3 for recv. */
-#define RECV_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for recv. */
-#define RECV_TYPE_ARG4 int
-
-/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV int
-
-/* Define if you have the recvfrom function. */
-#define HAVE_RECVFROM
-
-/* Define to the type of arg 1 for recvfrom. */
-#define RECVFROM_TYPE_ARG1 int
-
-/* Define to the type pointed by arg 2 for recvfrom. */
-#define RECVFROM_TYPE_ARG2 char
-
-/* Define to the type of arg 3 for recvfrom. */
-#define RECVFROM_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for recvfrom. */
-#define RECVFROM_TYPE_ARG4 int
-
-/* Define to the type pointed by arg 5 for recvfrom. */
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-
-/* Define to the type pointed by arg 6 for recvfrom. */
-#define RECVFROM_TYPE_ARG6 int
-
-/* Define to the function return type for recvfrom. */
-#define RECVFROM_TYPE_RETV int
-
-/* Define if you have the send function. */
-#define HAVE_SEND
-
-/* Define to the type of arg 1 for send. */
-#define SEND_TYPE_ARG1 int
-
-/* Define to the type qualifier of arg 2 for send. */
-#define SEND_QUAL_ARG2
-
-/* Define to the type of arg 2 for send. */
-#define SEND_TYPE_ARG2 char *
-
-/* Define to the type of arg 3 for send. */
-#define SEND_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for send. */
-#define SEND_TYPE_ARG4 int
-
-/* Define to the function return type for send. */
-#define SEND_TYPE_RETV int
-
-/* Define to use the QsoSSL package. */
-#undef USE_QSOSSL
-
-/* Define to use the GSKit package. */
-#define USE_GSKIT
-
-/* Use the system keyring as the default CA bundle. */
-#define CURL_CA_BUNDLE "/QIBM/UserData/ICSS/Cert/Server/DEFAULT.KDB"
-
-/* ---------------------------------------------------------------- */
-/* ADDITIONAL DEFINITIONS */
-/* ---------------------------------------------------------------- */
-
-/* The following must be defined BEFORE system header files inclusion. */
-
-#define __ptr128 /* No teraspace. */
-#define qadrt_use_fputc_inline /* Generate fputc() wrapper inline. */
-#define qadrt_use_fread_inline /* Generate fread() wrapper inline. */
-#define qadrt_use_fwrite_inline /* Generate fwrite() wrapper inline. */
-
-#endif /* HEADER_CURL_CONFIG_OS400_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/config-riscos.h b/external/libcurl_android/jni/libcurl/lib/config-riscos.h
deleted file mode 100755
index e4005778..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-riscos.h
+++ /dev/null
@@ -1,513 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_RISCOS_H
-#define HEADER_CURL_CONFIG_RISCOS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* Hand crafted config file for RISC OS */
-/* ================================================================ */
-
-/* Name of this package! */
-#undef PACKAGE
-
-/* Version number of this archive. */
-#undef VERSION
-
-/* Define if you have the getpass function. */
-#undef HAVE_GETPASS
-
-/* Define cpu-machine-OS */
-#define OS "ARM-RISC OS"
-
-/* Define if you want the built-in manual */
-#define USE_MANUAL
-
-/* Define if you have the gethostbyaddr_r() function with 5 arguments */
-#undef HAVE_GETHOSTBYADDR_R_5
-
-/* Define if you have the gethostbyaddr_r() function with 7 arguments */
-#undef HAVE_GETHOSTBYADDR_R_7
-
-/* Define if you have the gethostbyaddr_r() function with 8 arguments */
-#undef HAVE_GETHOSTBYADDR_R_8
-
-/* Define if you have the gethostbyname_r() function with 3 arguments */
-#undef HAVE_GETHOSTBYNAME_R_3
-
-/* Define if you have the gethostbyname_r() function with 5 arguments */
-#undef HAVE_GETHOSTBYNAME_R_5
-
-/* Define if you have the gethostbyname_r() function with 6 arguments */
-#undef HAVE_GETHOSTBYNAME_R_6
-
-/* Define if you need the _REENTRANT define for some functions */
-#undef NEED_REENTRANT
-
-/* Define if you have the Kerberos4 libraries (including -ldes) */
-#undef HAVE_KRB4
-
-/* Define if you want to enable IPv6 support */
-#undef ENABLE_IPV6
-
-/* Define if struct sockaddr_in6 has the sin6_scope_id member */
-#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
-
-/* Define this to 'int' if ssize_t is not an available typedefed type */
-#undef ssize_t
-
-/* Define this as a suitable file to read random data from */
-#undef RANDOM_FILE
-
-/* Define this to your Entropy Gathering Daemon socket pathname */
-#undef EGD_SOCKET
-
-/* Define if you want to enable IPv6 support */
-#undef ENABLE_IPV6
-
-/* Define if you have the alarm function. */
-#define HAVE_ALARM
-
-/* Define if you have the <alloca.h> header file. */
-#define HAVE_ALLOCA_H
-
-/* Define if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H
-
-/* Define if you have the `closesocket' function. */
-#undef HAVE_CLOSESOCKET
-
-/* Define if you have the <crypto.h> header file. */
-#undef HAVE_CRYPTO_H
-
-/* Define if you have the <des.h> header file. */
-#undef HAVE_DES_H
-
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H
-
-/* Define if you have the <err.h> header file. */
-#undef HAVE_ERR_H
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H
-
-/* Define if you have the `ftruncate' function. */
-#define HAVE_FTRUNCATE
-
-/* Define if getaddrinfo exists and works */
-#define HAVE_GETADDRINFO
-
-/* Define if you have the `geteuid' function. */
-#undef HAVE_GETEUID
-
-/* Define if you have the `gethostbyaddr' function. */
-#define HAVE_GETHOSTBYADDR
-
-/* Define if you have the `gethostbyaddr_r' function. */
-#undef HAVE_GETHOSTBYADDR_R
-
-/* Define if you have the `gethostbyname_r' function. */
-#undef HAVE_GETHOSTBYNAME_R
-
-/* Define if you have the `gethostname' function. */
-#define HAVE_GETHOSTNAME
-
-/* Define if you have the <getopt.h> header file. */
-#define HAVE_GETOPT_H
-
-/* Define if you have the `getpass_r' function. */
-#undef HAVE_GETPASS_R
-
-/* Define if you have the `getpwuid' function. */
-#undef HAVE_GETPWUID
-
-/* Define if you have the `getservbyname' function. */
-#undef HAVE_GETSERVBYNAME
-
-/* Define if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY
-
-/* Define if you have the `timeval' struct. */
-#define HAVE_STRUCT_TIMEVAL
-
-/* Define if you have the `inet_addr' function. */
-#undef HAVE_INET_ADDR
-
-/* Define if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H
-
-/* Define if you have the <io.h> header file. */
-#undef HAVE_IO_H
-
-/* Define if you have the `krb_get_our_ip_for_realm' function. */
-#undef HAVE_KRB_GET_OUR_IP_FOR_REALM
-
-/* Define if you have the <krb.h> header file. */
-#undef HAVE_KRB_H
-
-/* Define if you have the `crypto' library (-lcrypto). */
-#undef HAVE_LIBCRYPTO
-
-/* Define if you have the `nsl' library (-lnsl). */
-#undef HAVE_LIBNSL
-
-/* Define if you have the `resolv' library (-lresolv). */
-#undef HAVE_LIBRESOLV
-
-/* Define if you have the `resolve' library (-lresolve). */
-#undef HAVE_LIBRESOLVE
-
-/* Define if you have the `socket' library (-lsocket). */
-#undef HAVE_LIBSOCKET
-
-/* Define if you have the `ssl' library (-lssl). */
-#undef HAVE_LIBSSL
-
-/* Define if you have the `ucb' library (-lucb). */
-#undef HAVE_LIBUCB
-
-/* Define if you have the `localtime_r' function. */
-#undef HAVE_LOCALTIME_R
-
-/* Define if you have the <malloc.h> header file. */
-#define HAVE_MALLOC_H
-
-/* Define if you need the malloc.h header file even with stdlib.h */
-/* #define NEED_MALLOC_H 1 */
-
-/* Define if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H
-
-/* Define if you have the <netinet/if_ether.h> header file. */
-#undef HAVE_NETINET_IF_ETHER_H
-
-/* Define if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H
-
-/* Define if you have the <net/if.h> header file. */
-#define HAVE_NET_IF_H
-
-/* Define if you have the <openssl/crypto.h> header file. */
-#undef HAVE_OPENSSL_CRYPTO_H
-
-/* Define if you have the <openssl/err.h> header file. */
-#undef HAVE_OPENSSL_ERR_H
-
-/* Define if you have the <openssl/pem.h> header file. */
-#undef HAVE_OPENSSL_PEM_H
-
-/* Define if you have the <openssl/rsa.h> header file. */
-#undef HAVE_OPENSSL_RSA_H
-
-/* Define if you have the <openssl/ssl.h> header file. */
-#undef HAVE_OPENSSL_SSL_H
-
-/* Define if you have the <openssl/x509.h> header file. */
-#undef HAVE_OPENSSL_X509_H
-
-/* Define if you have the <pem.h> header file. */
-#undef HAVE_PEM_H
-
-/* Define if you have the `perror' function. */
-#undef HAVE_PERROR
-
-/* Define if you have the <pwd.h> header file. */
-#undef HAVE_PWD_H
-
-/* Define if you have the `RAND_egd' function. */
-#undef HAVE_RAND_EGD
-
-/* Define if you have the `RAND_screen' function. */
-#undef HAVE_RAND_SCREEN
-
-/* Define if you have the `RAND_status' function. */
-#undef HAVE_RAND_STATUS
-
-/* Define if you have the <rsa.h> header file. */
-#undef HAVE_RSA_H
-
-/* Define if you have the `select' function. */
-#define HAVE_SELECT
-
-/* Define if you have the `setvbuf' function. */
-#undef HAVE_SETVBUF
-
-/* Define if you have the <sgtty.h> header file. */
-#define HAVE_SGTTY_H
-
-/* Define if you have the `sigaction' function. */
-#undef HAVE_SIGACTION
-
-/* Define if you have the `signal' function. */
-#define HAVE_SIGNAL
-
-/* Define if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H
-
-/* Define if sig_atomic_t is an available typedef. */
-#define HAVE_SIG_ATOMIC_T
-
-/* Define if sig_atomic_t is already defined as volatile. */
-#undef HAVE_SIG_ATOMIC_T_VOLATILE
-
-/* Define if you have the `socket' function. */
-#define HAVE_SOCKET
-
-/* Define if you have the <ssl.h> header file. */
-#undef HAVE_SSL_H
-
-/* Define if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H
-
-/* Define if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define if you have the `strcmpi' function. */
-#undef HAVE_STRCMPI
-
-/* Define if you have the `strdup' function. */
-#define HAVE_STRDUP
-
-/* Define if you have the `strftime' function. */
-#define HAVE_STRFTIME
-
-/* Define if you have the `stricmp' function. */
-#define HAVE_STRICMP
-
-/* Define if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define if you have the <string.h> header file. */
-#define HAVE_STRING_H
-
-/* Define if you have the `strlcpy' function. */
-#undef HAVE_STRLCPY
-
-/* Define if you have the `strstr' function. */
-#define HAVE_STRSTR
-
-/* Define if you have the `strtok_r' function. */
-#undef HAVE_STRTOK_R
-
-/* Define if you have the `strtoll' function. */
-#undef HAVE_STRTOLL
-
-/* Define if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define if you have the <sys/select.h> header file. */
-#undef HAVE_SYS_SELECT_H
-
-/* Define if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H
-
-/* Define if you have the <sys/sockio.h> header file. */
-#undef HAVE_SYS_SOCKIO_H
-
-/* Define if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H
-
-/* Define if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H
-
-/* Define if you have the `tcgetattr' function. */
-#define HAVE_TCGETATTR
-
-/* Define if you have the `tcsetattr' function. */
-#define HAVE_TCSETATTR
-
-/* Define if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H
-
-/* Define if you have the <termio.h> header file. */
-#undef HAVE_TERMIO_H
-
-/* Define if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* Define if you have the `uname' function. */
-#define HAVE_UNAME
-
-/* Define if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H
-
-/* Define if you have the <winsock.h> header file. */
-#undef HAVE_WINSOCK_H
-
-/* Define if you have the <x509.h> header file. */
-#undef HAVE_X509_H
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#define RETSIGTYPE void
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `long double', as computed by sizeof. */
-#undef SIZEOF_LONG_DOUBLE
-
-/* The size of `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 4
-
-/* Define if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Version number of package */
-#undef VERSION
-
-/* Define if on AIX 3.
- System headers sometimes define this.
- We just want to avoid a redefinition error message. */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-#undef size_t
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef ssize_t
-
-/* Define if you have the ioctl function. */
-#define HAVE_IOCTL
-
-/* Define if you have a working ioctl FIONBIO function. */
-#define HAVE_IOCTL_FIONBIO
-
-/* to disable LDAP */
-#define CURL_DISABLE_LDAP
-
-/* Define if you have the getnameinfo function. */
-#define HAVE_GETNAMEINFO 1
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-#define GETNAMEINFO_QUAL_ARG1 const
-
-/* Define to the type of arg 1 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-
-/* Define to the type of arg 2 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG2 socklen_t
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 size_t
-
-/* Define to the type of arg 7 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG7 int
-
-/* Define if you have the recv function. */
-#define HAVE_RECV 1
-
-/* Define to the type of arg 1 for recv. */
-#define RECV_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for recv. */
-#define RECV_TYPE_ARG2 void *
-
-/* Define to the type of arg 3 for recv. */
-#define RECV_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for recv. */
-#define RECV_TYPE_ARG4 int
-
-/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV ssize_t
-
-/* Define 1 if you have the recvfrom function. */
-#define HAVE_RECVFROM 1
-
-/* Define to the type of arg 1 for recvfrom. */
-#define RECVFROM_TYPE_ARG1 int
-
-/* Define to the type pointed by arg 2 for recvfrom. */
-#define RECVFROM_TYPE_ARG2 void
-
-/* Define if the type pointed by arg 2 for recvfrom is void. */
-#define RECVFROM_TYPE_ARG2_IS_VOID
-
-/* Define to the type of arg 3 for recvfrom. */
-#define RECVFROM_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for recvfrom. */
-#define RECVFROM_TYPE_ARG4 int
-
-/* Define to the type pointed by arg 5 for recvfrom. */
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-
-/* Define to the type pointed by arg 6 for recvfrom. */
-#define RECVFROM_TYPE_ARG6 int
-
-/* Define to the function return type for recvfrom. */
-#define RECVFROM_TYPE_RETV ssize_t
-
-/* Define if you have the send function. */
-#define HAVE_SEND 1
-
-/* Define to the type of arg 1 for send. */
-#define SEND_TYPE_ARG1 int
-
-/* Define to the type qualifier of arg 2 for send. */
-#define SEND_QUAL_ARG2 const
-
-/* Define to the type of arg 2 for send. */
-#define SEND_TYPE_ARG2 void *
-
-/* Define to the type of arg 3 for send. */
-#define SEND_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for send. */
-#define SEND_TYPE_ARG4 int
-
-/* Define to the function return type for send. */
-#define SEND_TYPE_RETV ssize_t
-
-#endif /* HEADER_CURL_CONFIG_RISCOS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/config-symbian.h b/external/libcurl_android/jni/libcurl/lib/config-symbian.h
deleted file mode 100755
index f7eaab92..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-symbian.h
+++ /dev/null
@@ -1,817 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_SYMBIAN_H
-#define HEADER_CURL_CONFIG_SYMBIAN_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* Hand crafted config file for Symbian */
-/* ================================================================ */
-
-/* Location of default ca bundle */
-/* #define CURL_CA_BUNDLE "/etc/pki/tls/certs/ca-bundle.crt"*/
-
-/* Location of default ca path */
-/* #undef CURL_CA_PATH */
-
-/* to disable cookies support */
-/* #undef CURL_DISABLE_COOKIES */
-
-/* to disable cryptographic authentication */
-/* #undef CURL_DISABLE_CRYPTO_AUTH */
-
-/* to disable DICT */
-/* #undef CURL_DISABLE_DICT */
-
-/* to disable FILE */
-/* #undef CURL_DISABLE_FILE */
-
-/* to disable FTP */
-/* #undef CURL_DISABLE_FTP */
-
-/* to disable HTTP */
-/* #undef CURL_DISABLE_HTTP */
-
-/* to disable LDAP */
-#define CURL_DISABLE_LDAP 1
-
-/* to disable LDAPS */
-#define CURL_DISABLE_LDAPS 1
-
-/* to disable TELNET */
-/* #undef CURL_DISABLE_TELNET */
-
-/* to disable TFTP */
-/* #undef CURL_DISABLE_TFTP */
-
-/* to disable verbose strings */
-/* #define CURL_DISABLE_VERBOSE_STRINGS 1*/
-
-/* Definition to make a library symbol externally visible. */
-/* #undef CURL_EXTERN_SYMBOL */
-
-/* Use Windows LDAP implementation */
-/* #undef CURL_LDAP_WIN */
-
-/* your Entropy Gathering Daemon socket pathname */
-/* #undef EGD_SOCKET */
-
-/* Define if you want to enable IPv6 support */
-#define ENABLE_IPV6 1
-
-/* Define if struct sockaddr_in6 has the sin6_scope_id member */
-#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-#define GETNAMEINFO_QUAL_ARG1 const
-
-/* Define to the type of arg 1 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-
-/* Define to the type of arg 2 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG2 socklen_t
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 size_t
-
-/* Define to the type of arg 7 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG7 int
-
-/* Define to 1 if you have the <alloca.h> header file. */
-/*#define HAVE_ALLOCA_H 1*/
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the <arpa/tftp.h> header file. */
-/*#define HAVE_ARPA_TFTP_H 1*/
-
-/* Define to 1 if you have the <assert.h> header file. */
-#define HAVE_ASSERT_H 1
-
-/* Define to 1 if you have the `basename' function. */
-/*#define HAVE_BASENAME 1*/
-
-/* Define to 1 if bool is an available type. */
-/*#define HAVE_BOOL_T 1*/
-
-/* Define to 1 if you have the `closesocket' function. */
-/* #undef HAVE_CLOSESOCKET */
-
-/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
-/*#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1*/
-
-/* Define to 1 if you have the <crypto.h> header file. */
-/* #undef HAVE_CRYPTO_H */
-
-/* Define to 1 if you have the <des.h> header file. */
-/* #undef HAVE_DES_H */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
-/*#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1*/
-
-/* Define to 1 if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the <err.h> header file. */
-#define HAVE_ERR_H 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have the fcntl function. */
-#define HAVE_FCNTL 1
-
-/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
-#define HAVE_FCNTL_O_NONBLOCK 1
-
-/* Define to 1 if you have the `fork' function. */
-/*#define HAVE_FORK 1*/
-
-/* Define to 1 if you have the `ftruncate' function. */
-#define HAVE_FTRUNCATE 1
-
-/* Define if getaddrinfo exists and works */
-#define HAVE_GETADDRINFO 1
-
-/* Define to 1 if you have the `geteuid' function. */
-#define HAVE_GETEUID 1
-
-/* Define to 1 if you have the `gethostbyaddr' function. */
-#define HAVE_GETHOSTBYADDR 1
-
-/* If you have gethostbyname */
-#define HAVE_GETHOSTBYNAME 1
-
-/* Define to 1 if you have the `gethostbyname_r' function. */
-/* #undef HAVE_GETHOSTBYNAME_R */
-
-/* gethostbyname_r() takes 3 args */
-/* #undef HAVE_GETHOSTBYNAME_R_3 */
-
-/* gethostbyname_r() takes 5 args */
-/* #undef HAVE_GETHOSTBYNAME_R_5 */
-
-/* gethostbyname_r() takes 6 args */
-/* #undef HAVE_GETHOSTBYNAME_R_6 */
-
-/* Define to 1 if you have the getnameinfo function. */
-#define HAVE_GETNAMEINFO 1
-
-/* Define to 1 if you have the `getpass_r' function. */
-/* #undef HAVE_GETPASS_R */
-
-/* Define to 1 if you have the `getppid' function. */
-#define HAVE_GETPPID 1
-
-/* Define to 1 if you have the `getprotobyname' function. */
-#define HAVE_GETPROTOBYNAME 1
-
-/* Define to 1 if you have the `getpwuid' function. */
-#define HAVE_GETPWUID 1
-
-/* Define to 1 if you have the `getrlimit' function. */
-/*#define HAVE_GETRLIMIT 1*/
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* we have a glibc-style strerror_r() */
-/* #undef HAVE_GLIBC_STRERROR_R */
-
-/* Define to 1 if you have the `gmtime_r' function. */
-#define HAVE_GMTIME_R 1
-
-/* if you have the gssapi libraries */
-/* #undef HAVE_GSSAPI */
-
-/* Define to 1 if you have the <gssapi/gssapi_generic.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_GENERIC_H */
-
-/* Define to 1 if you have the <gssapi/gssapi.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_H */
-
-/* Define to 1 if you have the <gssapi/gssapi_krb5.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_KRB5_H */
-
-/* if you have the GNU gssapi libraries */
-/* #undef HAVE_GSSGNU */
-
-/* if you have the Heimdal gssapi libraries */
-/* #undef HAVE_GSSHEIMDAL */
-
-/* if you have the MIT gssapi libraries */
-/* #undef HAVE_GSSMIT */
-
-/* Define to 1 if you have the `idna_strerror' function. */
-/*#define HAVE_IDNA_STRERROR 1*/
-
-/* Define to 1 if you have the `idn_free' function. */
-/*#define HAVE_IDN_FREE 1*/
-
-/* Define to 1 if you have the <idn-free.h> header file. */
-/*#define HAVE_IDN_FREE_H 1*/
-
-/* Define to 1 if you have the `inet_addr' function. */
-/*#define HAVE_INET_ADDR 1*/
-
-/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
-/*#define HAVE_INET_NTOP 1*/
-
-/* Define to 1 if you have a IPv6 capable working inet_pton function. */
-/*#define HAVE_INET_PTON 1*/
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the ioctl function. */
-#define HAVE_IOCTL 1
-
-/* Define to 1 if you have a working ioctl FIONBIO function. */
-#define HAVE_IOCTL_FIONBIO 1
-
-/* Define to 1 if you have the ioctlsocket function. */
-/* #undef HAVE_IOCTLSOCKET */
-
-/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
-/* #undef HAVE_IOCTLSOCKET_FIONBIO */
-
-/* Define to 1 if you have the IoctlSocket camel case function. */
-/* #undef HAVE_IOCTLSOCKET_CAMEL */
-
-/* Define to 1 if you have a working IoctlSocket camel case FIONBIO
- function. */
-/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
-
-/* Define to 1 if you have the <io.h> header file. */
-/* #undef HAVE_IO_H */
-
-/* if you have the Kerberos4 libraries (including -ldes) */
-/* #undef HAVE_KRB4 */
-
-/* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */
-/* #undef HAVE_KRB_GET_OUR_IP_FOR_REALM */
-
-/* Define to 1 if you have the <krb.h> header file. */
-/* #undef HAVE_KRB_H */
-
-/* Define to 1 if you have the lber.h header file. */
-/*#define HAVE_LBER_H 1*/
-
-/* Define to 1 if you have the ldapssl.h header file. */
-/* #undef HAVE_LDAPSSL_H */
-
-/* Define to 1 if you have the ldap.h header file. */
-/*#define HAVE_LDAP_H 1*/
-
-/* Use LDAPS implementation */
-/*#define HAVE_LDAP_SSL 1*/
-
-/* Define to 1 if you have the ldap_ssl.h header file. */
-/* #undef HAVE_LDAP_SSL_H */
-
-/* Define to 1 if you have the `ldap_url_parse' function. */
-/*#define HAVE_LDAP_URL_PARSE 1*/
-
-/* Define to 1 if you have the <libgen.h> header file. */
-/*#define HAVE_LIBGEN_H 1*/
-
-/* Define to 1 if you have the `idn' library (-lidn). */
-/*#define HAVE_LIBIDN 1*/
-
-/* Define to 1 if you have the `resolv' library (-lresolv). */
-/* #undef HAVE_LIBRESOLV */
-
-/* Define to 1 if you have the `resolve' library (-lresolve). */
-/* #undef HAVE_LIBRESOLVE */
-
-/* Define to 1 if you have the `socket' library (-lsocket). */
-/* #undef HAVE_LIBSOCKET */
-
-/* Define to 1 if you have the `ssh2' library (-lssh2). */
-/*#define HAVE_LIBSSH2 1*/
-
-/* Define to 1 if you have the <libssh2.h> header file. */
-/*#define HAVE_LIBSSH2_H 1*/
-
-/* Define to 1 if you have the `ssl' library (-lssl). */
-/*#define HAVE_LIBSSL 1*/
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* if your compiler supports LL */
-#define HAVE_LL 1
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define to 1 if you have the `localtime_r' function. */
-#define HAVE_LOCALTIME_R 1
-
-/* Define to 1 if the compiler supports the 'long long' data type. */
-#define HAVE_LONGLONG 1
-
-/* Define to 1 if you have the malloc.h header file. */
-/*#define HAVE_MALLOC_H 1*/
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the MSG_NOSIGNAL flag. */
-/*#define HAVE_MSG_NOSIGNAL 1*/
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-/*#define HAVE_NETINET_TCP_H 1*/
-
-/* Define to 1 if you have the <net/if.h> header file. */
-#define HAVE_NET_IF_H 1
-
-/* Define to 1 if NI_WITHSCOPEID exists and works. */
-/*#define HAVE_NI_WITHSCOPEID 1*/
-
-/* we have no strerror_r() proto */
-/* #undef HAVE_NO_STRERROR_R_DECL */
-
-/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
- */
-/* #undef HAVE_OLD_GSSMIT */
-
-/* Define to 1 if you have the <openssl/crypto.h> header file. */
-/*#define HAVE_OPENSSL_CRYPTO_H 1*/
-
-/* Define to 1 if you have the <openssl/engine.h> header file. */
-/*#define HAVE_OPENSSL_ENGINE_H 1*/
-
-/* Define to 1 if you have the <openssl/err.h> header file. */
-/*#define HAVE_OPENSSL_ERR_H 1*/
-
-/* Define to 1 if you have the <openssl/pem.h> header file. */
-/*#define HAVE_OPENSSL_PEM_H 1*/
-
-/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
-/*#define HAVE_OPENSSL_PKCS12_H 1*/
-
-/* Define to 1 if you have the <openssl/rsa.h> header file. */
-/*#define HAVE_OPENSSL_RSA_H 1*/
-
-/* Define to 1 if you have the <openssl/ssl.h> header file. */
-/*#define HAVE_OPENSSL_SSL_H 1*/
-
-/* Define to 1 if you have the <openssl/x509.h> header file. */
-/*#define HAVE_OPENSSL_X509_H 1*/
-
-/* Define to 1 if you have the <pem.h> header file. */
-/* #undef HAVE_PEM_H */
-
-/* Define to 1 if you have the `perror' function. */
-#define HAVE_PERROR 1
-
-/* Define to 1 if you have the `pipe' function. */
-#define HAVE_PIPE 1
-
-/* Define to 1 if you have the `poll' function. */
-/*#define HAVE_POLL 1*/
-
-/* If you have a fine poll */
-/*#define HAVE_POLL_FINE 1*/
-
-/* Define to 1 if you have the <poll.h> header file. */
-/*#define HAVE_POLL_H 1*/
-
-/* we have a POSIX-style strerror_r() */
-#define HAVE_POSIX_STRERROR_R 1
-
-/* Define to 1 if you have the <pwd.h> header file. */
-#define HAVE_PWD_H 1
-
-/* Define to 1 if you have the `RAND_egd' function. */
-#define HAVE_RAND_EGD 1
-
-/* Define to 1 if you have the `RAND_screen' function. */
-/* #undef HAVE_RAND_SCREEN */
-
-/* Define to 1 if you have the `RAND_status' function. */
-/*#define HAVE_RAND_STATUS 1*/
-
-/* Define to 1 if you have the recv function. */
-#define HAVE_RECV 1
-
-/* Define to 1 if you have the recvfrom function. */
-#define HAVE_RECVFROM 1
-
-/* Define to 1 if you have the <rsa.h> header file. */
-/* #undef HAVE_RSA_H */
-
-/* Define to 1 if you have the select function. */
-#define HAVE_SELECT 1
-
-/* Define to 1 if you have the send function. */
-#define HAVE_SEND 1
-
-/* Define to 1 if you have the <setjmp.h> header file. */
-#define HAVE_SETJMP_H 1
-
-/* Define to 1 if you have the `setlocale' function. */
-#define HAVE_SETLOCALE 1
-
-/* Define to 1 if you have the `setmode' function. */
-/* #undef HAVE_SETMODE */
-
-/* Define to 1 if you have the `setrlimit' function. */
-/*#define HAVE_SETRLIMIT 1*/
-
-/* Define to 1 if you have the setsockopt function. */
-/* #undef HAVE_SETSOCKOPT */
-
-/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
-/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
-
-/* Define to 1 if you have the <sgtty.h> header file. */
-/*#define HAVE_SGTTY_H 1*/
-
-/* Define to 1 if you have the `sigaction' function. */
-/*#define HAVE_SIGACTION 1*/
-
-/* Define to 1 if you have the `siginterrupt' function. */
-/*#define HAVE_SIGINTERRUPT 1*/
-
-/* Define to 1 if you have the `signal' function. */
-/*#define HAVE_SIGNAL 1*/
-
-/* Define to 1 if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* If you have sigsetjmp */
-/*#define HAVE_SIGSETJMP 1*/
-
-/* Define to 1 if sig_atomic_t is an available typedef. */
-/*#define HAVE_SIG_ATOMIC_T 1*/
-
-/* Define to 1 if sig_atomic_t is already defined as volatile. */
-/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
-
-/* Define to 1 if you have the `socket' function. */
-#define HAVE_SOCKET 1
-
-/* Define to 1 if you have the `SSL_get_shutdown' function. */
-/*#define HAVE_SSL_GET_SHUTDOWN 1*/
-
-/* Define to 1 if you have the <ssl.h> header file. */
-/* #undef HAVE_SSL_H */
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-#define HAVE_STDBOOL_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdio.h> header file. */
-#define HAVE_STDIO_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#define HAVE_STRCASECMP 1
-
-/* Define to 1 if you have the `strcmpi' function. */
-/* #undef HAVE_STRCMPI */
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the `strerror_r' function. */
-#define HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the `stricmp' function. */
-/* #undef HAVE_STRICMP */
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strlcpy' function. */
-#define HAVE_STRLCPY 1
-
-/* Define to 1 if you have the `strstr' function. */
-#define HAVE_STRSTR 1
-
-/* Define to 1 if you have the `strtok_r' function. */
-#define HAVE_STRTOK_R 1
-
-/* Define to 1 if you have the `strtoll' function. */
-#define HAVE_STRTOLL 1
-
-/* if struct sockaddr_storage is defined */
-#define HAVE_STRUCT_SOCKADDR_STORAGE 1
-
-/* Define to 1 if you have the timeval struct. */
-#define HAVE_STRUCT_TIMEVAL 1
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-#define HAVE_SYS_FILIO_H 1
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/poll.h> header file. */
-/*#define HAVE_SYS_POLL_H 1*/
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/sockio.h> header file. */
-#define HAVE_SYS_SOCKIO_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/utime.h> header file. */
-/* #undef HAVE_SYS_UTIME_H */
-
-/* Define to 1 if you have the <termios.h> header file. */
-/*#define HAVE_TERMIOS_H 1*/
-
-/* Define to 1 if you have the <termio.h> header file. */
-/*#define HAVE_TERMIO_H 1*/
-
-/* Define to 1 if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define to 1 if you have the <tld.h> header file. */
-/*#define HAVE_TLD_H 1*/
-
-/* Define to 1 if you have the `tld_strerror' function. */
-/*#define HAVE_TLD_STRERROR 1*/
-
-/* Define to 1 if you have the `uname' function. */
-#define HAVE_UNAME 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `utime' function. */
-#define HAVE_UTIME 1
-
-/* Define to 1 if you have the <utime.h> header file. */
-#define HAVE_UTIME_H 1
-
-/* Define to 1 if compiler supports C99 variadic macro style. */
-#define HAVE_VARIADIC_MACROS_C99 1
-
-/* Define to 1 if compiler supports old gcc variadic macro style. */
-/*#define HAVE_VARIADIC_MACROS_GCC 1*/
-
-/* Define to 1 if you have the winber.h header file. */
-/* #undef HAVE_WINBER_H */
-
-/* Define to 1 if you have the windows.h header file. */
-/* #undef HAVE_WINDOWS_H */
-
-/* Define to 1 if you have the winldap.h header file. */
-/* #undef HAVE_WINLDAP_H */
-
-/* Define to 1 if you have the winsock2.h header file. */
-/* #undef HAVE_WINSOCK2_H */
-
-/* Define to 1 if you have the winsock.h header file. */
-/* #undef HAVE_WINSOCK_H */
-
-/* Define this symbol if your OS supports changing the contents of argv */
-/*#define HAVE_WRITABLE_ARGV 1*/
-
-/* Define to 1 if you have the ws2tcpip.h header file. */
-/* #undef HAVE_WS2TCPIP_H */
-
-/* Define to 1 if you have the <x509.h> header file. */
-/* #undef HAVE_X509_H */
-
-/* Define to 1 if you need the lber.h header file even with ldap.h */
-/* #undef NEED_LBER_H */
-
-/* Define to 1 if you need the malloc.h header file even with stdlib.h */
-/* #undef NEED_MALLOC_H */
-
-/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
-/* #undef NEED_REENTRANT */
-
-/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
-/* #undef NEED_THREAD_SAFE */
-
-/* cpu-machine-OS */
-#ifdef __WINS__
-#define OS "i386-pc-epoc32"
-#elif __MARM__
-#define OS "arm-unknown-epoc32"
-#else
-/* This won't happen on any current Symbian version */
-#define OS "unknown-unknown-epoc32"
-#endif
-
-/* Name of package */
-/*#define PACKAGE "curl"*/
-
-/* Define to the address where bug reports for this package should be sent. */
-/*#define PACKAGE_BUGREPORT \
- "a suitable curl mailing list => http://curl.haxx.se/mail/"*/
-
-/* Define to the full name of this package. */
-/*#define PACKAGE_NAME "curl"*/
-
-/* Define to the full name and version of this package. */
-/*#define PACKAGE_STRING "curl -"*/
-
-/* Define to the one symbol short name of this package. */
-/*#define PACKAGE_TARNAME "curl"*/
-
-/* Define to the version of this package. */
-/*#define PACKAGE_VERSION "-"*/
-
-/* a suitable file to read random data from */
-/*#define RANDOM_FILE "/dev/urandom"*/
-
-#define RECV_TYPE_ARG1 int
-#define RECV_TYPE_ARG2 void*
-#define RECV_TYPE_ARG3 size_t
-#define RECV_TYPE_ARG4 int
-#define RECV_TYPE_RETV ssize_t
-
-#define RECVFROM_TYPE_ARG1 int
-#define RECVFROM_TYPE_ARG2 void
-#define RECVFROM_TYPE_ARG3 size_t
-#define RECVFROM_TYPE_ARG4 int
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-#define RECVFROM_TYPE_ARG6 size_t
-#define RECVFROM_TYPE_RETV ssize_t
-#define RECVFROM_TYPE_ARG2_IS_VOID 1
-
-#define SEND_TYPE_ARG1 int
-#define SEND_QUAL_ARG2 const
-#define SEND_TYPE_ARG2 void*
-#define SEND_TYPE_ARG3 size_t
-#define SEND_TYPE_ARG4 int
-#define SEND_TYPE_RETV ssize_t
-
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-/*#define RETSIGTYPE void*/
-
-/* Define to the type of arg 1 for `select'. */
-#define SELECT_TYPE_ARG1 int
-
-/* Define to the type of args 2, 3 and 4 for `select'. */
-#define SELECT_TYPE_ARG234 (fd_set *)
-
-/* Define to the type of arg 5 for `select'. */
-#define SELECT_TYPE_ARG5 (struct timeval *)
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `off_t', as computed by sizeof. */
-#define SIZEOF_OFF_T 8
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 4
-
-/* The size of `time_t', as computed by sizeof. */
-#define SIZEOF_TIME_T 4
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
-/* Define if you want to enable c-ares support */
-/* #undef USE_ARES */
-
-/* Define to disable non-blocking sockets */
-/* #undef USE_BLOCKING_SOCKETS */
-
-/* if GnuTLS is enabled */
-/* #undef USE_GNUTLS */
-
-/* if libSSH2 is in use */
-/*#define USE_LIBSSH2 1*/
-
-/* If you want to build curl with the built-in manual */
-/*#define USE_MANUAL 1*/
-
-/* if NSS is enabled */
-/* #undef USE_NSS */
-
-/* to enable SSPI support */
-/* #undef USE_WINDOWS_SSPI */
-
-/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
-/* #undef USE_YASSLEMUL */
-
-/* Version number of package */
-/*#define VERSION "7.18.2-CVS"*/
-
-/* Define to avoid automatic inclusion of winsock.h */
-/* #undef WIN32_LEAN_AND_MEAN */
-
-/* Define to 1 if on AIX 3.
- System headers sometimes define this.
- We just want to avoid a redefinition error message. */
-#ifndef _ALL_SOURCE
-/* # undef _ALL_SOURCE */
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#define _FILE_OFFSET_BITS 64
-
-/* Define for large files, on AIX-style hosts. */
-/* #undef _LARGE_FILES */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* type to use in place of in_addr_t if not defined */
-/* #undef in_addr_t */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-/* the signed version of size_t */
-/* #undef ssize_t */
-
-/* Enabling curl debug mode when building in Symbian debug mode would work */
-/* except that debug mode introduces new exports that must be frozen. */
-#ifdef _DEBUG
-/* #define CURLDEBUG */
-#endif
-
-/* sys/cdefs.h fails to define this for WINSCW prior to Symbian OS ver. 9.4 */
-#ifndef __LONG_LONG_SUPPORTED
-#define __LONG_LONG_SUPPORTED
-#endif
-
-/* Enable appropriate header only when zlib support is enabled */
-#ifdef HAVE_LIBZ
-#define HAVE_ZLIB_H 1
-#endif
-
-/* Enable appropriate definitions only when OpenSSL support is enabled */
-#ifdef USE_SSLEAY
-/* if OpenSSL is in use */
-#define USE_OPENSSL
-#endif
-
-#endif /* HEADER_CURL_CONFIG_SYMBIAN_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/config-tpf.h b/external/libcurl_android/jni/libcurl/lib/config-tpf.h
deleted file mode 100755
index 6ff701a9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-tpf.h
+++ /dev/null
@@ -1,772 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_TPF_H
-#define HEADER_CURL_CONFIG_TPF_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* Hand crafted config file for TPF */
-/* ================================================================ */
-
-/* ---------------------------------------------------------------- */
-/* FEATURES, FUNCTIONS, and DEFINITIONS */
-/* ---------------------------------------------------------------- */
-
-/* NOTE: Refer also to the .mak file for some of the flags below */
-
-/* to disable cookies support */
-/* #undef CURL_DISABLE_COOKIES */
-
-/* to disable cryptographic authentication */
-/* #undef CURL_DISABLE_CRYPTO_AUTH */
-
-/* to disable DICT */
-/* #undef CURL_DISABLE_DICT */
-
-/* to disable FILE */
-/* #undef CURL_DISABLE_FILE */
-
-/* to disable FTP */
-/* #undef CURL_DISABLE_FTP */
-
-/* to disable HTTP */
-/* #undef CURL_DISABLE_HTTP */
-
-/* to disable LDAP */
-/* #undef CURL_DISABLE_LDAP */
-
-/* to disable TELNET */
-/* #undef CURL_DISABLE_TELNET */
-
-/* to disable TFTP */
-/* #undef CURL_DISABLE_TFTP */
-
-/* to disable verbose strings */
-/* #undef CURL_DISABLE_VERBOSE_STRINGS */
-
-/* lber dynamic library file */
-/* #undef DL_LBER_FILE */
-
-/* ldap dynamic library file */
-/* #undef DL_LDAP_FILE */
-
-/* your Entropy Gathering Daemon socket pathname */
-/* #undef EGD_SOCKET */
-
-/* Define if you want to enable IPv6 support */
-/* #undef ENABLE_IPV6 */
-
-/* Define if struct sockaddr_in6 has the sin6_scope_id member */
-/* #undef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID */
-
-/* Define to the type of arg 1 for getnameinfo. */
-/* #undef GETNAMEINFO_TYPE_ARG1 */
-
-/* Define to the type of arg 2 for getnameinfo. */
-/* #undef GETNAMEINFO_TYPE_ARG2 */
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-/* #undef GETNAMEINFO_TYPE_ARG46 */
-
-/* Define to the type of arg 7 for getnameinfo. */
-/* #undef GETNAMEINFO_TYPE_ARG7 */
-
-/* Define to 1 if you have the alarm function. */
-#define HAVE_ALARM 1
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the <arpa/tftp.h> header file. */
-/* #undef HAVE_ARPA_TFTP_H */
-
-/* Define to 1 if you have the <assert.h> header file. */
-#define HAVE_ASSERT_H 1
-
-/* Define to 1 if you have the `basename' function. */
-#define HAVE_BASENAME 1
-
-/* Define to 1 if you have the `closesocket' function. */
-/* #undef HAVE_CLOSESOCKET */
-
-/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
-/* #undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA */
-#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
-
-/* Define to 1 if you have the <crypto.h> header file. */
-/* #undef HAVE_CRYPTO_H */
-#define HAVE_CRYPTO_H 1
-
-/* Define to 1 if you have the <des.h> header file. */
-/* #undef HAVE_DES_H */
-#define HAVE_DES_H 1
-
-/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
-/* #undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES */
-#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1
-
-/* Define to 1 if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the <err.h> header file. */
-/* #undef HAVE_ERR_H */
-#define HAVE_ERR_H 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have the fcntl function. */
-#define HAVE_FCNTL 1
-
-/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
-#define HAVE_FCNTL_O_NONBLOCK 1
-
-/* Define to 1 if you have the `fork' function. */
-/* #undef HAVE_FORK */
-#define HAVE_FORK 1
-
-/* Define to 1 if you have the `ftruncate' function. */
-#define HAVE_FTRUNCATE 1
-
-/* Define if getaddrinfo exists and works */
-/* #undef HAVE_GETADDRINFO */
-
-/* Define to 1 if you have the `geteuid' function. */
-#define HAVE_GETEUID 1
-
-/* Define to 1 if you have the `gethostbyaddr' function. */
-#define HAVE_GETHOSTBYADDR 1
-
-/* If you have gethostbyname */
-#define HAVE_GETHOSTBYNAME 1
-
-/* Define to 1 if you have the `gethostbyname_r' function. */
-/* #undef HAVE_GETHOSTBYNAME_R */
-
-/* gethostbyname_r() takes 3 args */
-/* #undef HAVE_GETHOSTBYNAME_R_3 */
-
-/* gethostbyname_r() takes 5 args */
-/* #undef HAVE_GETHOSTBYNAME_R_5 */
-
-/* gethostbyname_r() takes 6 args */
-/* #undef HAVE_GETHOSTBYNAME_R_6 1 */
-
-/* Define to 1 if you have the getnameinfo function. */
-/* #undef HAVE_GETNAMEINFO */
-
-/* Define to 1 if you have the `getpass_r' function. */
-/* #undef HAVE_GETPASS_R */
-
-/* Define to 1 if you have the `getprotobyname' function. */
-/* #undef HAVE_GETPROTOBYNAME */
-
-/* Define to 1 if you have the `getpwuid' function. */
-#define HAVE_GETPWUID 1
-
-/* Define to 1 if you have the `getrlimit' function. */
-/* #undef HAVE_GETRLIMIT */
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* we have a glibc-style strerror_r() */
-/* #undef HAVE_GLIBC_STRERROR_R */
-#define HAVE_GLIBC_STRERROR_R 1
-
-/* Define to 1 if you have the `gmtime_r' function. */
-#define HAVE_GMTIME_R 1
-
-/* if you have the gssapi libraries */
-/* #undef HAVE_GSSAPI */
-
-/* if you have the GNU gssapi libraries */
-/* #undef HAVE_GSSGNU */
-
-/* if you have the Heimdal gssapi libraries */
-/* #undef HAVE_GSSHEIMDAL */
-
-/* if you have the MIT gssapi libraries */
-/* #undef HAVE_GSSMIT */
-
-/* Define to 1 if you have the `iconv' functions. */
-#define HAVE_ICONV 1
-
-/* Define to 1 if you have the `idna_strerror' function. */
-/* #undef HAVE_IDNA_STRERROR */
-
-/* Define to 1 if you have the `idn_free' function. */
-/* #undef HAVE_IDN_FREE */
-
-/* Define to 1 if you have the <idn-free.h> header file. */
-/* #undef HAVE_IDN_FREE_H */
-
-/* Define to 1 if you have the `inet_addr' function. */
-#define HAVE_INET_ADDR 1
-
-/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
-/* #undef HAVE_INET_NTOP */
-
-/* Define to 1 if you have a IPv6 capable working inet_pton function. */
-/* #undef HAVE_INET_PTON */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the ioctl function. */
-#define HAVE_IOCTL 1
-
-/* Define to 1 if you have a working ioctl FIONBIO function. */
-#define HAVE_IOCTL_FIONBIO 1
-
-/* Define to 1 if you have the ioctlsocket function. */
-/* #undef HAVE_IOCTLSOCKET */
-
-/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
-/* #undef HAVE_IOCTLSOCKET_FIONBIO */
-
-/* Define to 1 if you have the IoctlSocket camel case function. */
-/* #undef HAVE_IOCTLSOCKET_CAMEL */
-
-/* Define to 1 if you have a working IoctlSocket camel case FIONBIO
- function. */
-/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
-
-/* Define to 1 if you have the <io.h> header file. */
-/* #undef HAVE_IO_H */
-
-/* if you have the Kerberos4 libraries (including -ldes) */
-/* #undef HAVE_KRB4 */
-
-/* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */
-/* #undef HAVE_KRB_GET_OUR_IP_FOR_REALM */
-
-/* Define to 1 if you have the <krb.h> header file. */
-/* #undef HAVE_KRB_H */
-
-/* Define to 1 if you have the <libgen.h> header file. */
-/* #undef HAVE_LIBGEN_H 1 */
-
-/* Define to 1 if you have the `idn' library (-lidn). */
-/* #undef HAVE_LIBIDN */
-
-/* Define to 1 if you have the `resolv' library (-lresolv). */
-/* #undef HAVE_LIBRESOLV */
-
-/* Define to 1 if you have the `resolve' library (-lresolve). */
-/* #undef HAVE_LIBRESOLVE */
-
-/* Define to 1 if you have the `socket' library (-lsocket). */
-/* #undef HAVE_LIBSOCKET */
-
-/* Define to 1 if you have the `ssl' library (-lssl). */
-/* #undef HAVE_LIBSSL */
-#define HAVE_LIBSSL 1
-
-/* if zlib is available */
-/* #undef HAVE_LIBZ */
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* if your compiler supports LL */
-#define HAVE_LL 1
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define to 1 if you have the `localtime_r' function. */
-#define HAVE_LOCALTIME_R 1
-
-/* Define to 1 if the compiler supports the 'long long' data type. */
-#define HAVE_LONGLONG 1
-
-/* Define to 1 if you need the malloc.h header file even with stdlib.h */
-/* #undef NEED_MALLOC_H */
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-/* undef HAVE_NETINET_TCP_H */
-
-/* Define to 1 if you have the <net/if.h> header file. */
-#define HAVE_NET_IF_H 1
-
-/* Define if NI_WITHSCOPEID exists and works */
-/* #undef HAVE_NI_WITHSCOPEID */
-
-/* we have no strerror_r() proto */
-/* #undef HAVE_NO_STRERROR_R_DECL */
-
-/* Define to 1 if you have the <openssl/crypto.h> header file. */
-/* #undef HAVE_OPENSSL_CRYPTO_H */
-#define HAVE_OPENSSL_CRYPTO_H 1
-
-/* Define to 1 if you have the <openssl/engine.h> header file. */
-/* #undef HAVE_OPENSSL_ENGINE_H */
-#define HAVE_OPENSSL_ENGINE_H 1
-
-/* Define to 1 if you have the <openssl/err.h> header file. */
-/* #undef HAVE_OPENSSL_ERR_H */
-#define HAVE_OPENSSL_ERR_H 1
-
-/* Define to 1 if you have the <openssl/pem.h> header file. */
-/* #undef HAVE_OPENSSL_PEM_H */
-#define HAVE_OPENSSL_PEM_H 1
-
-/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
-/* #undef HAVE_OPENSSL_PKCS12_H */
-#define HAVE_OPENSSL_PKCS12_H 1
-
-/* Define to 1 if you have the <openssl/rsa.h> header file. */
-/* #undef HAVE_OPENSSL_RSA_H */
-#define HAVE_OPENSSL_RSA_H 1
-
-/* Define to 1 if you have the <openssl/ssl.h> header file. */
-/* #undef HAVE_OPENSSL_SSL_H */
-#define HAVE_OPENSSL_SSL_H 1
-
-/* Define to 1 if you have the <openssl/x509.h> header file. */
-/* #undef HAVE_OPENSSL_X509_H */
-#define HAVE_OPENSSL_X509_H 1
-
-/* Define to 1 if you have the <pem.h> header file. */
-/* #undef HAVE_PEM_H */
-#define HAVE_PEM_H 1
-
-/* Define to 1 if you have the `perror' function. */
-#define HAVE_PERROR 1
-
-/* Define to 1 if you have the `pipe' function. */
-#define HAVE_PIPE 1
-
-/* Define to 1 if you have the `poll' function. */
-/* #undef HAVE_POLL */
-
-/* If you have a fine poll */
-/* #undef HAVE_POLL_FINE */
-
-/* we have a POSIX-style strerror_r() */
-/* #undef HAVE_POSIX_STRERROR_R */
-
-/* Define to 1 if you have the <pwd.h> header file. */
-#define HAVE_PWD_H 1
-
-/* Define to 1 if you have the `RAND_egd' function. */
-/* #undef HAVE_RAND_EGD */
-#define HAVE_RAND_EGD 1
-
-/* Define to 1 if you have the `RAND_screen' function. */
-/* #undef HAVE_RAND_SCREEN */
-
-/* Define to 1 if you have the `RAND_status' function. */
-/* #undef HAVE_RAND_STATUS */
-#define HAVE_RAND_STATUS 1
-
-/* Define to 1 if you have the <rsa.h> header file. */
-/* #undef HAVE_RSA_H */
-#define HAVE_RSA_H 1
-
-/* Define to 1 if you have the `select' function. */
-#define HAVE_SELECT 1
-
-/* Define to 1 if you have the <setjmp.h> header file. */
-#define HAVE_SETJMP_H 1
-
-/* Define to 1 if you have the `setlocale' function. */
-#define HAVE_SETLOCALE 1
-
-/* Define to 1 if you have the `setrlimit' function. */
-#define HAVE_SETRLIMIT 1
-
-/* Define to 1 if you have the setsockopt function. */
-/* #undef HAVE_SETSOCKOPT */
-
-/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
-/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
-
-/* Define to 1 if you have the <sgtty.h> header file. */
-/* #undef HAVE_SGTTY_H 1 */
-
-/* Define to 1 if you have the `sigaction' function. */
-#define HAVE_SIGACTION 1
-
-/* Define to 1 if you have the `siginterrupt' function. */
-/* #undef HAVE_SIGINTERRUPT */
-
-/* Define to 1 if you have the `signal' function. */
-#define HAVE_SIGNAL 1
-
-/* Define to 1 if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define to 1 if sig_atomic_t is an available typedef. */
-#define HAVE_SIG_ATOMIC_T 1
-
-/* Define to 1 if sig_atomic_t is already defined as volatile. */
-/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
-
-/* If you have sigsetjmp */
-/* #undef HAVE_SIGSETJMP */
-
-/* Define to 1 if you have the `socket' function. */
-#define HAVE_SOCKET 1
-
-/* Define to 1 if you have the <ssl.h> header file. */
-/* #undef HAVE_SSL_H */
-#define HAVE_SSL_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#define HAVE_STRCASECMP 1
-
-/* Define to 1 if you have the `strcmpi' function. */
-/* #undef HAVE_STRCMPI */
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the `strerror_r' function. */
-#define HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the `stricmp' function. */
-/* #undef HAVE_STRICMP */
-#define HAVE_STRICMP 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strlcpy' function. */
-/* #undef HAVE_STRLCPY */
-
-/* Define to 1 if you have the `strstr' function. */
-#define HAVE_STRSTR 1
-
-/* Define to 1 if you have the `strtok_r' function. */
-#define HAVE_STRTOK_R 1
-
-/* Define to 1 if you have the `strtoll' function. */
-#define HAVE_STRTOLL 1
-
-/* if struct sockaddr_storage is defined */
-/* #undef HAVE_STRUCT_SOCKADDR_STORAGE */
-
-/* Define this if you have struct timeval */
-#define HAVE_STRUCT_TIMEVAL 1
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-#define HAVE_SYS_FILIO_H 1
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/poll.h> header file. */
-/* #undef HAVE_SYS_POLL_H */
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/sockio.h> header file. */
-/* #undef HAVE_SYS_SOCKIO_H */
-#define HAVE_SYS_SOCKIO_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/utime.h> header file. */
-/* #undef HAVE_SYS_UTIME_H */
-
-/* Define to 1 if you have the <termios.h> header file. */
-/* #undef HAVE_TERMIOS_H */
-
-/* Define to 1 if you have the <termio.h> header file. */
-/* #undef HAVE_TERMIO_H */
-
-/* Define to 1 if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define to 1 if you have the <tld.h> header file. */
-/* #undef HAVE_TLD_H */
-
-/* Define to 1 if you have the `tld_strerror' function. */
-/* #undef HAVE_TLD_STRERROR */
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `utime' function. */
-#define HAVE_UTIME 1
-
-/* Define to 1 if you have the <utime.h> header file. */
-#define HAVE_UTIME_H 1
-
-/* Define to 1 if you have the <winsock2.h> header file. */
-/* #undef HAVE_WINSOCK2_H */
-
-/* Define to 1 if you have the <winsock.h> header file. */
-/* #undef HAVE_WINSOCK_H */
-
-/* Define this symbol if your OS supports changing the contents of argv */
-/* #undef HAVE_WRITABLE_ARGV */
-
-/* Define to 1 if you have the ws2tcpip.h header file. */
-/* #undef HAVE_WS2TCPIP_H */
-
-/* Define to 1 if you have the <x509.h> header file. */
-/* #undef HAVE_X509_H */
-
-/* if you have the zlib.h header file */
-/* #undef HAVE_ZLIB_H */
-
-/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
-/* #undef NEED_REENTRANT */
-
-/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
-/* #undef NEED_THREAD_SAFE */
-
-/* cpu-machine-OS */
-#define OS "s390x-ibm-tpf"
-
-/* Name of package */
-#define PACKAGE "curl"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT \
- "a suitable curl mailing list => http://curl.haxx.se/mail/"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "curl"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "curl -"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "curl"
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "-"
-
-/* a suitable file to read random data from */
-/* #undef RANDOM_FILE */
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#define RETSIGTYPE void
-
-/* Define to the type of arg 1 for `select'. */
-#define SELECT_TYPE_ARG1 int
-
-/* Define to the type of args 2, 3 and 4 for `select'. */
-#define SELECT_TYPE_ARG234 (fd_set *)
-
-/* Define to the type of arg 5 for `select'. */
-#define SELECT_TYPE_ARG5 (struct timeval *)
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `off_t', as computed by sizeof. */
-#define SIZEOF_OFF_T 8
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 8
-
-/* The size of `time_t', as computed by sizeof. */
-#define SIZEOF_TIME_T 8
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
-/* Define if you want to enable ares support */
-/* #undef USE_ARES */
-
-/* Define to disable non-blocking sockets */
-/* #undef USE_BLOCKING_SOCKETS */
-
-/* if GnuTLS is enabled */
-/* #undef USE_GNUTLS */
-
-/* If you want to build curl with the built-in manual */
-/* #undef USE_MANUAL */
-
-/* if OpenSSL is in use */
-/* #undef USE_OPENSSL */
-
-/* if SSL is enabled */
-/* #undef USE_SSLEAY */
-
-/* to enable SSPI support */
-/* #undef USE_WINDOWS_SSPI */
-
-/* Version number of package */
-#define VERSION "not-used"
-
-/* Define to avoid automatic inclusion of winsock.h */
-/* #undef WIN32_LEAN_AND_MEAN */
-
-/* Define to 1 if on AIX 3.
- System headers sometimes define this.
- We just want to avoid a redefinition error message. */
-#ifndef _ALL_SOURCE
-/* # undef _ALL_SOURCE */
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-/* #undef _FILE_OFFSET_BITS */
-
-/* Define for large files, on AIX-style hosts. */
-/* #undef _LARGE_FILES */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* type to use in place of in_addr_t if not defined */
-/* #undef in_addr_t */
-
-/* Define to `unsigned' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-/* the signed version of size_t */
-/* #undef ssize_t */
-
-/* Define to 1 if you have the getnameinfo function. */
-/* #undef HAVE_GETNAMEINFO 1 */
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-/* #undef GETNAMEINFO_QUAL_ARG1 const */
-
-/* Define to the type of arg 1 for getnameinfo. */
-/* #undef GETNAMEINFO_TYPE_ARG1 struct sockaddr * */
-
-/* Define to the type of arg 2 for getnameinfo. */
-/* #undef GETNAMEINFO_TYPE_ARG2 socklen_t */
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-/* #undef GETNAMEINFO_TYPE_ARG46 size_t */
-
-/* Define to the type of arg 7 for getnameinfo. */
-/* #undef GETNAMEINFO_TYPE_ARG7 int */
-
-/* Define to 1 if you have the recv function. */
-#define HAVE_RECV 1
-
-/* Define to the type of arg 1 for recv. */
-#define RECV_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for recv. */
-#define RECV_TYPE_ARG2 char *
-
-/* Define to the type of arg 3 for recv. */
-#define RECV_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for recv. */
-#define RECV_TYPE_ARG4 int
-
-/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV int
-
-/* Define to 1 if you have the recvfrom function. */
-#define HAVE_RECVFROM 1
-
-/* Define to the type of arg 1 for recvfrom. */
-#define RECVFROM_TYPE_ARG1 int
-
-/* Define to the type pointed by arg 2 for recvfrom. */
-#define RECVFROM_TYPE_ARG2 char
-
-/* Define to the type of arg 3 for recvfrom. */
-#define RECVFROM_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for recvfrom. */
-#define RECVFROM_TYPE_ARG4 int
-
-/* Define to the type pointed by arg 5 for recvfrom. */
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-
-/* Define to the type pointed by arg 6 for recvfrom. */
-#define RECVFROM_TYPE_ARG6 int
-
-/* Define to the function return type for recvfrom. */
-#define RECVFROM_TYPE_RETV int
-
-/* Define to 1 if you have the send function. */
-#define HAVE_SEND 1
-
-/* Define to the type of arg 1 for send. */
-#define SEND_TYPE_ARG1 int
-
-/* Define to the type qualifier of arg 2 for send. */
-#define SEND_QUAL_ARG2 const
-
-/* Define to the type of arg 2 for send. */
-#define SEND_TYPE_ARG2 char *
-
-/* Define to the type of arg 3 for send. */
-#define SEND_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for send. */
-#define SEND_TYPE_ARG4 int
-
-/* Define to the function return type for send. */
-#define SEND_TYPE_RETV int
-
-#define CURL_DOES_CONVERSIONS
-#ifndef CURL_ICONV_CODESET_OF_HOST
-#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
-#endif
-
-
-#endif /* HEADER_CURL_CONFIG_TPF_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/config-vxworks.h b/external/libcurl_android/jni/libcurl/lib/config-vxworks.h
deleted file mode 100755
index 05220b58..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-vxworks.h
+++ /dev/null
@@ -1,931 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_VXWORKS_H
-#define HEADER_CURL_CONFIG_VXWORKS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* =============================================================== */
-/* Hand crafted config file for VxWorks */
-/* =============================================================== */
-
-/* Location of default ca bundle */
-/* #undef CURL_CA_BUNDLE */
-
-/* Location of default ca path */
-/* #undef CURL_CA_PATH */
-
-/* to disable cookies support */
-/* #undef CURL_DISABLE_COOKIES */
-
-/* to disable cryptographic authentication */
-/* #undef CURL_DISABLE_CRYPTO_AUTH */
-
-/* to disable DICT */
-/* #undef CURL_DISABLE_DICT */
-
-/* to disable FILE */
-/* #undef CURL_DISABLE_FILE */
-
-/* to disable FTP */
-#define CURL_DISABLE_FTP 1
-
-/* to disable HTTP */
-/* #undef CURL_DISABLE_HTTP */
-
-/* to disable LDAP */
-#define CURL_DISABLE_LDAP 1
-
-/* to disable LDAPS */
-#define CURL_DISABLE_LDAPS 1
-
-/* to disable NTLM authentication */
-#define CURL_DISABLE_NTLM 1
-
-/* to disable proxies */
-/* #undef CURL_DISABLE_PROXY */
-
-/* to disable TELNET */
-#define CURL_DISABLE_TELNET 1
-
-/* to disable TFTP */
-#define CURL_DISABLE_TFTP 1
-
-/* to disable verbose strings */
-/* #undef CURL_DISABLE_VERBOSE_STRINGS */
-
-/* Definition to make a library symbol externally visible. */
-/* #undef CURL_EXTERN_SYMBOL */
-
-/* Use Windows LDAP implementation */
-/* #undef CURL_LDAP_WIN */
-
-/* your Entropy Gathering Daemon socket pathname */
-/* #undef EGD_SOCKET */
-
-/* Define if you want to enable IPv6 support */
-#define ENABLE_IPV6 1
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-#define GETNAMEINFO_QUAL_ARG1 const
-
-/* Define to the type of arg 1 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-
-/* Define to the type of arg 2 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG2 socklen_t
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 size_t
-
-/* Define to the type of arg 7 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG7 unsigned int
-
-/* Specifies the number of arguments to getservbyport_r */
-#define GETSERVBYPORT_R_ARGS 6
-
-/* Specifies the size of the buffer to pass to getservbyport_r */
-#define GETSERVBYPORT_R_BUFSIZE 4096
-
-/* Define to 1 if you have the alarm function. */
-#define HAVE_ALARM 1
-
-/* Define to 1 if you have the <alloca.h> header file. */
-#define HAVE_ALLOCA_H 1
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the <arpa/tftp.h> header file. */
-/* #undef HAVE_ARPA_TFTP_H */
-
-/* Define to 1 if you have the <assert.h> header file. */
-#define HAVE_ASSERT_H 1
-
-/* Define to 1 if you have the `basename' function. */
-/* #undef HAVE_BASENAME */
-
-/* Define to 1 if bool is an available type. */
-#define HAVE_BOOL_T 1
-
-/* Define to 1 if you have the clock_gettime function and monotonic timer. */
-/* #undef HAVE_CLOCK_GETTIME_MONOTONIC */
-
-/* Define to 1 if you have the `closesocket' function. */
-/* #undef HAVE_CLOSESOCKET */
-
-/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
-#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
-
-/* Define to 1 if you have the <crypto.h> header file. */
-/* #undef HAVE_CRYPTO_H */
-
-/* Define to 1 if you have the <des.h> header file. */
-/* #undef HAVE_DES_H */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
-#define HAVE_ENGINE_LOAD_BUILTIN_ENGINES 1
-
-/* Define to 1 if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the <err.h> header file. */
-/* #undef HAVE_ERR_H */
-
-/* Define to 1 if you have the fcntl function. */
-#define HAVE_FCNTL 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
-#define HAVE_FCNTL_O_NONBLOCK 1
-
-/* Define to 1 if you have the fdopen function. */
-#define HAVE_FDOPEN 1
-
-/* Define to 1 if you have the `fork' function. */
-#define HAVE_FORK 1
-
-/* Define to 1 if you have the freeaddrinfo function. */
-#define HAVE_FREEADDRINFO 1
-
-/* Define to 1 if you have the freeifaddrs function. */
-#define HAVE_FREEIFADDRS 1
-
-/* Define to 1 if you have the ftruncate function. */
-#define HAVE_FTRUNCATE 1
-
-/* Define to 1 if you have a working getaddrinfo function. */
-#define HAVE_GETADDRINFO 1
-
-/* Define to 1 if you have the `geteuid' function. */
-/* #undef HAVE_GETEUID */
-
-/* Define to 1 if you have the gethostbyaddr function. */
-#define HAVE_GETHOSTBYADDR 1
-
-/* Define to 1 if you have the gethostbyaddr_r function. */
-#define HAVE_GETHOSTBYADDR_R 1
-
-/* gethostbyaddr_r() takes 5 args */
-/* #undef HAVE_GETHOSTBYADDR_R_5 */
-
-/* gethostbyaddr_r() takes 7 args */
-/* #undef HAVE_GETHOSTBYADDR_R_7 */
-
-/* gethostbyaddr_r() takes 8 args */
-#define HAVE_GETHOSTBYADDR_R_8 1
-
-/* Define to 1 if you have the gethostbyname function. */
-#define HAVE_GETHOSTBYNAME 1
-
-/* Define to 1 if you have the gethostbyname_r function. */
-/* #undef HAVE_GETHOSTBYNAME_R */
-
-/* gethostbyname_r() takes 3 args */
-/* #undef HAVE_GETHOSTBYNAME_R_3 */
-
-/* gethostbyname_r() takes 5 args */
-/* #undef HAVE_GETHOSTBYNAME_R_5 */
-
-/* gethostbyname_r() takes 6 args */
-/* #undef HAVE_GETHOSTBYNAME_R_6 */
-
-/* Define to 1 if you have the gethostname function. */
-#define HAVE_GETHOSTNAME 1
-
-/* Define to 1 if you have a working getifaddrs function. */
-/* #undef HAVE_GETIFADDRS */
-
-/* Define to 1 if you have the getnameinfo function. */
-#define HAVE_GETNAMEINFO 1
-
-/* Define to 1 if you have the `getpass_r' function. */
-/* #undef HAVE_GETPASS_R */
-
-/* Define to 1 if you have the `getppid' function. */
-#define HAVE_GETPPID 1
-
-/* Define to 1 if you have the `getprotobyname' function. */
-#define HAVE_GETPROTOBYNAME 1
-
-/* Define to 1 if you have the `getpwuid' function. */
-/* #undef HAVE_GETPWUID */
-
-/* Define to 1 if you have the `getrlimit' function. */
-#define HAVE_GETRLIMIT 1
-
-/* Define to 1 if you have the getservbyport_r function. */
-/* #undef HAVE_GETSERVBYPORT_R */
-
-/* Define to 1 if you have the `gettimeofday' function. */
-/* #undef HAVE_GETTIMEOFDAY */
-
-/* Define to 1 if you have a working glibc-style strerror_r function. */
-/* #undef HAVE_GLIBC_STRERROR_R */
-
-/* Define to 1 if you have a working gmtime_r function. */
-#define HAVE_GMTIME_R 1
-
-/* if you have the gssapi libraries */
-/* #undef HAVE_GSSAPI */
-
-/* Define to 1 if you have the <gssapi/gssapi_generic.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_GENERIC_H */
-
-/* Define to 1 if you have the <gssapi/gssapi.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_H */
-
-/* Define to 1 if you have the <gssapi/gssapi_krb5.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_KRB5_H */
-
-/* if you have the GNU gssapi libraries */
-/* #undef HAVE_GSSGNU */
-
-/* if you have the Heimdal gssapi libraries */
-/* #undef HAVE_GSSHEIMDAL */
-
-/* if you have the MIT gssapi libraries */
-/* #undef HAVE_GSSMIT */
-
-/* Define to 1 if you have the `idna_strerror' function. */
-/* #undef HAVE_IDNA_STRERROR */
-
-/* Define to 1 if you have the `idn_free' function. */
-/* #undef HAVE_IDN_FREE */
-
-/* Define to 1 if you have the <idn-free.h> header file. */
-/* #undef HAVE_IDN_FREE_H */
-
-/* Define to 1 if you have the <ifaddrs.h> header file. */
-/* #undef HAVE_IFADDRS_H */
-
-/* Define to 1 if you have the `inet_addr' function. */
-#define HAVE_INET_ADDR 1
-
-/* Define to 1 if you have the inet_ntoa_r function. */
-/* #undef HAVE_INET_NTOA_R */
-
-/* inet_ntoa_r() takes 2 args */
-/* #undef HAVE_INET_NTOA_R_2 */
-
-/* inet_ntoa_r() takes 3 args */
-/* #undef HAVE_INET_NTOA_R_3 */
-
-/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
-/* #undef HAVE_INET_NTOP */
-
-/* Define to 1 if you have a IPv6 capable working inet_pton function. */
-/* #undef HAVE_INET_PTON */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the ioctl function. */
-#define HAVE_IOCTL 1
-
-/* Define to 1 if you have the ioctlsocket function. */
-/* #undef HAVE_IOCTLSOCKET */
-
-/* Define to 1 if you have the IoctlSocket camel case function. */
-/* #undef HAVE_IOCTLSOCKET_CAMEL */
-
-/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
- */
-/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
-
-/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
-/* #undef HAVE_IOCTLSOCKET_FIONBIO */
-
-/* Define to 1 if you have a working ioctl FIONBIO function. */
-#define HAVE_IOCTL_FIONBIO 1
-
-/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */
-#define HAVE_IOCTL_SIOCGIFADDR 1
-
-/* Define to 1 if you have the <io.h> header file. */
-#define HAVE_IO_H 1
-
-/* if you have the Kerberos4 libraries (including -ldes) */
-/* #undef HAVE_KRB4 */
-
-/* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */
-/* #undef HAVE_KRB_GET_OUR_IP_FOR_REALM */
-
-/* Define to 1 if you have the <krb.h> header file. */
-/* #undef HAVE_KRB_H */
-
-/* Define to 1 if you have the lber.h header file. */
-/* #undef HAVE_LBER_H */
-
-/* Define to 1 if you have the ldapssl.h header file. */
-/* #undef HAVE_LDAPSSL_H */
-
-/* Define to 1 if you have the ldap.h header file. */
-/* #undef HAVE_LDAP_H */
-
-/* Use LDAPS implementation */
-/* #undef HAVE_LDAP_SSL */
-
-/* Define to 1 if you have the ldap_ssl.h header file. */
-/* #undef HAVE_LDAP_SSL_H */
-
-/* Define to 1 if you have the `ldap_url_parse' function. */
-/* #undef HAVE_LDAP_URL_PARSE */
-
-/* Define to 1 if you have the <libgen.h> header file. */
-/* #undef HAVE_LIBGEN_H */
-
-/* Define to 1 if you have the `idn' library (-lidn). */
-/* #undef HAVE_LIBIDN */
-
-/* Define to 1 if you have the `resolv' library (-lresolv). */
-/* #undef HAVE_LIBRESOLV */
-
-/* Define to 1 if you have the `resolve' library (-lresolve). */
-/* #undef HAVE_LIBRESOLVE */
-
-/* Define to 1 if you have the `socket' library (-lsocket). */
-/* #undef HAVE_LIBSOCKET */
-
-/* Define to 1 if you have the `ssh2' library (-lssh2). */
-/* #undef HAVE_LIBSSH2 */
-
-/* Define to 1 if you have the <libssh2.h> header file. */
-/* #undef HAVE_LIBSSH2_H */
-
-/* Define to 1 if you have the `libssh2_version' function. */
-/* #undef HAVE_LIBSSH2_VERSION */
-
-/* Define to 1 if you have the `ssl' library (-lssl). */
-#define HAVE_LIBSSL 1
-
-/* if zlib is available */
-#define HAVE_LIBZ 1
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* if your compiler supports LL */
-#define HAVE_LL 1
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define to 1 if you have a working localtime_r function. */
-#define HAVE_LOCALTIME_R 1
-
-/* Define to 1 if the compiler supports the 'long long' data type. */
-#define HAVE_LONGLONG 1
-
-/* Define to 1 if you have the malloc.h header file. */
-#define HAVE_MALLOC_H 1
-
-/* Define to 1 if you have the memory.h header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the MSG_NOSIGNAL flag. */
-/* #undef HAVE_MSG_NOSIGNAL */
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-#define HAVE_NETINET_TCP_H 1
-
-/* Define to 1 if you have the <net/if.h> header file. */
-#define HAVE_NET_IF_H 1
-
-/* Define to 1 if NI_WITHSCOPEID exists and works. */
-/* #undef HAVE_NI_WITHSCOPEID */
-
-/* if you have an old MIT gssapi library, lacking GSS_C_NT_HOSTBASED_SERVICE
- */
-/* #undef HAVE_OLD_GSSMIT */
-
-/* Define to 1 if you have the <openssl/crypto.h> header file. */
-#define HAVE_OPENSSL_CRYPTO_H 1
-
-/* Define to 1 if you have the <openssl/engine.h> header file. */
-#define HAVE_OPENSSL_ENGINE_H 1
-
-/* Define to 1 if you have the <openssl/err.h> header file. */
-#define HAVE_OPENSSL_ERR_H 1
-
-/* Define to 1 if you have the <openssl/pem.h> header file. */
-#define HAVE_OPENSSL_PEM_H 1
-
-/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
-#define HAVE_OPENSSL_PKCS12_H 1
-
-/* Define to 1 if you have the <openssl/rsa.h> header file. */
-#define HAVE_OPENSSL_RSA_H 1
-
-/* Define to 1 if you have the <openssl/ssl.h> header file. */
-#define HAVE_OPENSSL_SSL_H 1
-
-/* Define to 1 if you have the <openssl/x509.h> header file. */
-#define HAVE_OPENSSL_X509_H 1
-
-/* Define to 1 if you have the <pem.h> header file. */
-/* #undef HAVE_PEM_H */
-
-/* Define to 1 if you have the `perror' function. */
-#define HAVE_PERROR 1
-
-/* Define to 1 if you have the `pipe' function. */
-#define HAVE_PIPE 1
-
-/* Define to 1 if you have a working poll function. */
-/* #undef HAVE_POLL */
-
-/* If you have a fine poll */
-/* #undef HAVE_POLL_FINE */
-
-/* Define to 1 if you have the <poll.h> header file. */
-/* #undef HAVE_POLL_H */
-
-/* Define to 1 if you have a working POSIX-style strerror_r function. */
-/* #undef HAVE_POSIX_STRERROR_R */
-
-/* Define to 1 if you have the <pwd.h> header file. */
-/* #undef HAVE_PWD_H */
-
-/* Define to 1 if you have the `RAND_egd' function. */
-#define HAVE_RAND_EGD 1
-
-/* Define to 1 if you have the `RAND_screen' function. */
-/* #undef HAVE_RAND_SCREEN */
-
-/* Define to 1 if you have the `RAND_status' function. */
-#define HAVE_RAND_STATUS 1
-
-/* Define to 1 if you have the recv function. */
-#define HAVE_RECV 1
-
-/* Define to 1 if you have the recvfrom function. */
-#define HAVE_RECVFROM 1
-
-/* Define to 1 if you have the <rsa.h> header file. */
-/* #undef HAVE_RSA_H */
-
-/* Define to 1 if you have the select function. */
-#define HAVE_SELECT 1
-
-/* Define to 1 if you have the send function. */
-#define HAVE_SEND 1
-
-/* Define to 1 if you have the <setjmp.h> header file. */
-#define HAVE_SETJMP_H 1
-
-/* Define to 1 if you have the `setlocale' function. */
-#define HAVE_SETLOCALE 1
-
-/* Define to 1 if you have the `setmode' function. */
-#define HAVE_SETMODE 1
-
-/* Define to 1 if you have the `setrlimit' function. */
-#define HAVE_SETRLIMIT 1
-
-/* Define to 1 if you have the setsockopt function. */
-#define HAVE_SETSOCKOPT 1
-
-/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
-/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
-
-/* Define to 1 if you have the <sgtty.h> header file. */
-/* #undef HAVE_SGTTY_H */
-
-/* Define to 1 if you have the sigaction function. */
-#define HAVE_SIGACTION 1
-
-/* Define to 1 if you have the siginterrupt function. */
-#define HAVE_SIGINTERRUPT 1
-
-/* Define to 1 if you have the signal function. */
-#define HAVE_SIGNAL 1
-
-/* Define to 1 if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define to 1 if you have the sigsetjmp function or macro. */
-/* #undef HAVE_SIGSETJMP */
-
-/* Define to 1 if sig_atomic_t is an available typedef. */
-#define HAVE_SIG_ATOMIC_T 1
-
-/* Define to 1 if sig_atomic_t is already defined as volatile. */
-/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
-
-/* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */
-#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
-
-/* Define to 1 if you have the `socket' function. */
-#define HAVE_SOCKET 1
-
-/* Define to 1 if you have the `SSL_get_shutdown' function. */
-#define HAVE_SSL_GET_SHUTDOWN 1
-
-/* Define to 1 if you have the <ssl.h> header file. */
-/* #undef HAVE_SSL_H */
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-#define HAVE_STDBOOL_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-/* #undef HAVE_STDINT_H */
-
-/* Define to 1 if you have the <stdio.h> header file. */
-#define HAVE_STDIO_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the strcasecmp function. */
-#define HAVE_STRCASECMP 1
-
-/* Define to 1 if you have the strcmpi function. */
-/* #undef HAVE_STRCMPI */
-
-/* Define to 1 if you have the strdup function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the strerror_r function. */
-#define HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the stricmp function. */
-/* #undef HAVE_STRICMP */
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strlcpy' function. */
-/* #undef HAVE_STRLCPY */
-
-/* Define to 1 if you have the strncasecmp function. */
-#define HAVE_STRNCASECMP 1
-
-/* Define to 1 if you have the strncmpi function. */
-/* #undef HAVE_STRNCMPI */
-
-/* Define to 1 if you have the strnicmp function. */
-/* #undef HAVE_STRNICMP */
-
-/* Define to 1 if you have the <stropts.h> header file. */
-/* #undef HAVE_STROPTS_H */
-
-/* Define to 1 if you have the strstr function. */
-#define HAVE_STRSTR 1
-
-/* Define to 1 if you have the strtok_r function. */
-#define HAVE_STRTOK_R 1
-
-/* Define to 1 if you have the strtoll function. */
-/* #undef HAVE_STRTOLL */
-
-/* if struct sockaddr_storage is defined */
-#define HAVE_STRUCT_SOCKADDR_STORAGE 1
-
-/* Define to 1 if you have the timeval struct. */
-#define HAVE_STRUCT_TIMEVAL 1
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef HAVE_SYS_FILIO_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-/* #undef HAVE_SYS_PARAM_H */
-
-/* Define to 1 if you have the <sys/poll.h> header file. */
-/* #undef HAVE_SYS_POLL_H */
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-/* #undef HAVE_SYS_SELECT_H */
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/sockio.h> header file. */
-/* #undef HAVE_SYS_SOCKIO_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-/* #undef HAVE_SYS_TIME_H */
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define HAVE_SYS_UIO_H 1
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-#define HAVE_SYS_UN_H 1
-
-/* Define to 1 if you have the <sys/utime.h> header file. */
-#define HAVE_SYS_UTIME_H 1
-
-/* Define to 1 if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 1
-
-/* Define to 1 if you have the <termio.h> header file. */
-#define HAVE_TERMIO_H 1
-
-/* Define to 1 if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define to 1 if you have the <tld.h> header file. */
-/* #undef HAVE_TLD_H */
-
-/* Define to 1 if you have the `tld_strerror' function. */
-/* #undef HAVE_TLD_STRERROR */
-
-/* Define to 1 if you have the `uname' function. */
-#define HAVE_UNAME 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `utime' function. */
-#define HAVE_UTIME 1
-
-/* Define to 1 if you have the <utime.h> header file. */
-#define HAVE_UTIME_H 1
-
-/* Define to 1 if compiler supports C99 variadic macro style. */
-#define HAVE_VARIADIC_MACROS_C99 1
-
-/* Define to 1 if compiler supports old gcc variadic macro style. */
-#define HAVE_VARIADIC_MACROS_GCC 1
-
-/* Define to 1 if you have a working vxworks-style strerror_r function. */
-#define HAVE_VXWORKS_STRERROR_R 1
-
-/* Define to 1 if you have the winber.h header file. */
-/* #undef HAVE_WINBER_H */
-
-/* Define to 1 if you have the windows.h header file. */
-/* #undef HAVE_WINDOWS_H */
-
-/* Define to 1 if you have the winldap.h header file. */
-/* #undef HAVE_WINLDAP_H */
-
-/* Define to 1 if you have the winsock2.h header file. */
-/* #undef HAVE_WINSOCK2_H */
-
-/* Define to 1 if you have the winsock.h header file. */
-/* #undef HAVE_WINSOCK_H */
-
-/* Define this symbol if your OS supports changing the contents of argv */
-#define HAVE_WRITABLE_ARGV 1
-
-/* Define to 1 if you have the writev function. */
-#define HAVE_WRITEV 1
-
-/* Define to 1 if you have the ws2tcpip.h header file. */
-/* #undef HAVE_WS2TCPIP_H */
-
-/* Define to 1 if you have the <x509.h> header file. */
-/* #undef HAVE_X509_H */
-
-/* if you have the zlib.h header file */
-#define HAVE_ZLIB_H 1
-
-/* Define to 1 if you need the lber.h header file even with ldap.h */
-/* #undef NEED_LBER_H */
-
-/* Define to 1 if you need the malloc.h header file even with stdlib.h */
-/* #undef NEED_MALLOC_H */
-
-/* Define to 1 if you need the memory.h header file even with stdlib.h */
-/* #undef NEED_MEMORY_H */
-
-/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
-/* #undef NEED_REENTRANT */
-
-/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
-/* #undef NEED_THREAD_SAFE */
-
-/* Define to 1 if the open function requires three arguments. */
-#define OPEN_NEEDS_ARG3 1
-
-/* cpu-machine-OS */
-#define OS "unknown-unknown-vxworks"
-
-/* Name of package */
-#define PACKAGE "curl"
-
-/* a suitable file to read random data from */
-#define RANDOM_FILE "/dev/urandom"
-
-/* Define to the type of arg 1 for recvfrom. */
-#define RECVFROM_TYPE_ARG1 int
-
-/* Define to the type pointed by arg 2 for recvfrom. */
-#define RECVFROM_TYPE_ARG2 void
-
-/* Define to 1 if the type pointed by arg 2 for recvfrom is void. */
-#define RECVFROM_TYPE_ARG2_IS_VOID 1
-
-/* Define to the type of arg 3 for recvfrom. */
-#define RECVFROM_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for recvfrom. */
-#define RECVFROM_TYPE_ARG4 int
-
-/* Define to the type pointed by arg 5 for recvfrom. */
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-
-/* Define to 1 if the type pointed by arg 5 for recvfrom is void. */
-/* #undef RECVFROM_TYPE_ARG5_IS_VOID */
-
-/* Define to the type pointed by arg 6 for recvfrom. */
-#define RECVFROM_TYPE_ARG6 socklen_t
-
-/* Define to 1 if the type pointed by arg 6 for recvfrom is void. */
-/* #undef RECVFROM_TYPE_ARG6_IS_VOID */
-
-/* Define to the function return type for recvfrom. */
-#define RECVFROM_TYPE_RETV int
-
-/* Define to the type of arg 1 for recv. */
-#define RECV_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for recv. */
-#define RECV_TYPE_ARG2 void *
-
-/* Define to the type of arg 3 for recv. */
-#define RECV_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for recv. */
-#define RECV_TYPE_ARG4 int
-
-/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV int
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#define RETSIGTYPE void
-
-/* Define to the type qualifier of arg 5 for select. */
-#define SELECT_QUAL_ARG5
-
-/* Define to the type of arg 1 for select. */
-#define SELECT_TYPE_ARG1 int
-
-/* Define to the type of args 2, 3 and 4 for select. */
-#define SELECT_TYPE_ARG234 fd_set *
-
-/* Define to the type of arg 5 for select. */
-#define SELECT_TYPE_ARG5 struct timeval *
-
-/* Define to the function return type for select. */
-#define SELECT_TYPE_RETV int
-
-/* Define to the type qualifier of arg 2 for send. */
-#define SEND_QUAL_ARG2 const
-
-/* Define to the type of arg 1 for send. */
-#define SEND_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for send. */
-#define SEND_TYPE_ARG2 void *
-
-/* Define to the type of arg 3 for send. */
-#define SEND_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for send. */
-#define SEND_TYPE_ARG4 int
-
-/* Define to the function return type for send. */
-#define SEND_TYPE_RETV int
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `long', as computed by sizeof. */
-#define SIZEOF_LONG 4
-
-/* The size of `off_t', as computed by sizeof. */
-#define SIZEOF_OFF_T 8
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 4
-
-/* The size of `time_t', as computed by sizeof. */
-#define SIZEOF_TIME_T 4
-
-/* The size of `void*', as computed by sizeof. */
-#define SIZEOF_VOIDP 4
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to the type of arg 3 for strerror_r. */
-/* #undef STRERROR_R_TYPE_ARG3 */
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-/* #undef TIME_WITH_SYS_TIME */
-
-/* Define if you want to enable c-ares support */
-/* #undef USE_ARES */
-
-/* Define to disable non-blocking sockets. */
-/* #undef USE_BLOCKING_SOCKETS */
-
-/* if GnuTLS is enabled */
-/* #undef USE_GNUTLS */
-
-/* if libSSH2 is in use */
-/* #undef USE_LIBSSH2 */
-
-/* If you want to build curl with the built-in manual */
-#define USE_MANUAL 1
-
-/* if NSS is enabled */
-/* #undef USE_NSS */
-
-/* if OpenSSL is in use */
-#define USE_OPENSSL 1
-
-/* if SSL is enabled */
-#define USE_SSLEAY 1
-
-/* Define to 1 if you are building a Windows target without large file
- support. */
-/* #undef USE_WIN32_LARGE_FILES */
-
-/* to enable SSPI support */
-/* #undef USE_WINDOWS_SSPI */
-
-/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
-/* #undef USE_YASSLEMUL */
-
-/* Define to avoid automatic inclusion of winsock.h */
-/* #undef WIN32_LEAN_AND_MEAN */
-
-/* Define to 1 if OS is AIX. */
-#ifndef _ALL_SOURCE
-/* # undef _ALL_SOURCE */
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-/* #undef _FILE_OFFSET_BITS */
-
-/* Define for large files, on AIX-style hosts. */
-/* #undef _LARGE_FILES */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Type to use in place of in_addr_t when system does not provide it. */
-/* #undef in_addr_t */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-/* the signed version of size_t */
-/* #undef ssize_t */
-
-#endif /* HEADER_CURL_CONFIG_VXWORKS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/config-win32.h b/external/libcurl_android/jni/libcurl/lib/config-win32.h
deleted file mode 100755
index 62bbedca..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-win32.h
+++ /dev/null
@@ -1,698 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_WIN32_H
-#define HEADER_CURL_CONFIG_WIN32_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* Hand crafted config file for Windows */
-/* ================================================================ */
-
-/* ---------------------------------------------------------------- */
-/* HEADER FILES */
-/* ---------------------------------------------------------------- */
-
-/* Define if you have the <arpa/inet.h> header file. */
-/* #define HAVE_ARPA_INET_H 1 */
-
-/* Define if you have the <assert.h> header file. */
-#define HAVE_ASSERT_H 1
-
-/* Define if you have the <crypto.h> header file. */
-/* #define HAVE_CRYPTO_H 1 */
-
-/* Define if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define if you have the <err.h> header file. */
-/* #define HAVE_ERR_H 1 */
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define if you have the <getopt.h> header file. */
-#if defined(__MINGW32__) || defined(__POCC__)
-#define HAVE_GETOPT_H 1
-#endif
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1800)
-#define HAVE_INTTYPES_H 1
-#endif
-
-/* Define if you have the <io.h> header file. */
-#define HAVE_IO_H 1
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define if you need <malloc.h> header even with <stdlib.h> header file. */
-#if !defined(__SALFORDC__) && !defined(__POCC__)
-#define NEED_MALLOC_H 1
-#endif
-
-/* Define if you have the <netdb.h> header file. */
-/* #define HAVE_NETDB_H 1 */
-
-/* Define if you have the <netinet/in.h> header file. */
-/* #define HAVE_NETINET_IN_H 1 */
-
-/* Define if you have the <process.h> header file. */
-#ifndef __SALFORDC__
-#define HAVE_PROCESS_H 1
-#endif
-
-/* Define if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define if you have the <sgtty.h> header file. */
-/* #define HAVE_SGTTY_H 1 */
-
-/* Define if you have the <ssl.h> header file. */
-/* #define HAVE_SSL_H 1 */
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1800)
-#define HAVE_STDBOOL_H 1
-#endif
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define if you have the <sys/param.h> header file. */
-/* #define HAVE_SYS_PARAM_H 1 */
-
-/* Define if you have the <sys/select.h> header file. */
-/* #define HAVE_SYS_SELECT_H 1 */
-
-/* Define if you have the <sys/socket.h> header file. */
-/* #define HAVE_SYS_SOCKET_H 1 */
-
-/* Define if you have the <sys/sockio.h> header file. */
-/* #define HAVE_SYS_SOCKIO_H 1 */
-
-/* Define if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define if you have the <sys/time.h> header file. */
-/* #define HAVE_SYS_TIME_H 1 */
-
-/* Define if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define if you have the <sys/utime.h> header file. */
-#ifndef __BORLANDC__
-#define HAVE_SYS_UTIME_H 1
-#endif
-
-/* Define if you have the <termio.h> header file. */
-/* #define HAVE_TERMIO_H 1 */
-
-/* Define if you have the <termios.h> header file. */
-/* #define HAVE_TERMIOS_H 1 */
-
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define if you have the <unistd.h> header file. */
-#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
- defined(__POCC__)
-#define HAVE_UNISTD_H 1
-#endif
-
-/* Define if you have the <windows.h> header file. */
-#define HAVE_WINDOWS_H 1
-
-/* Define if you have the <winsock.h> header file. */
-#define HAVE_WINSOCK_H 1
-
-/* Define if you have the <winsock2.h> header file. */
-#ifndef __SALFORDC__
-#define HAVE_WINSOCK2_H 1
-#endif
-
-/* Define if you have the <ws2tcpip.h> header file. */
-#ifndef __SALFORDC__
-#define HAVE_WS2TCPIP_H 1
-#endif
-
-/* ---------------------------------------------------------------- */
-/* OTHER HEADER INFO */
-/* ---------------------------------------------------------------- */
-
-/* Define if sig_atomic_t is an available typedef. */
-#define HAVE_SIG_ATOMIC_T 1
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-/* #define TIME_WITH_SYS_TIME 1 */
-
-/* Define to 1 if bool is an available type. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1800)
-#define HAVE_BOOL_T 1
-#endif
-
-/* ---------------------------------------------------------------- */
-/* FUNCTIONS */
-/* ---------------------------------------------------------------- */
-
-/* Define if you have the closesocket function. */
-#define HAVE_CLOSESOCKET 1
-
-/* Define if you don't have vprintf but do have _doprnt. */
-/* #define HAVE_DOPRNT 1 */
-
-/* Define if you have the ftruncate function. */
-#define HAVE_FTRUNCATE 1
-
-/* Define if you have the gethostbyaddr function. */
-#define HAVE_GETHOSTBYADDR 1
-
-/* Define if you have the gethostname function. */
-#define HAVE_GETHOSTNAME 1
-
-/* Define if you have the getpass function. */
-/* #define HAVE_GETPASS 1 */
-
-/* Define if you have the getservbyname function. */
-#define HAVE_GETSERVBYNAME 1
-
-/* Define if you have the getprotobyname function. */
-#define HAVE_GETPROTOBYNAME
-
-/* Define if you have the gettimeofday function. */
-/* #define HAVE_GETTIMEOFDAY 1 */
-
-/* Define if you have the inet_addr function. */
-#define HAVE_INET_ADDR 1
-
-/* Define if you have the ioctlsocket function. */
-#define HAVE_IOCTLSOCKET 1
-
-/* Define if you have a working ioctlsocket FIONBIO function. */
-#define HAVE_IOCTLSOCKET_FIONBIO 1
-
-/* Define if you have the perror function. */
-#define HAVE_PERROR 1
-
-/* Define if you have the RAND_screen function when using SSL. */
-#define HAVE_RAND_SCREEN 1
-
-/* Define if you have the `RAND_status' function when using SSL. */
-#define HAVE_RAND_STATUS 1
-
-/* Define if you have the `CRYPTO_cleanup_all_ex_data' function.
- This is present in OpenSSL versions after 0.9.6b */
-#define HAVE_CRYPTO_CLEANUP_ALL_EX_DATA 1
-
-/* Define if you have the select function. */
-#define HAVE_SELECT 1
-
-/* Define if you have the setlocale function. */
-#define HAVE_SETLOCALE 1
-
-/* Define if you have the setmode function. */
-#define HAVE_SETMODE 1
-
-/* Define if you have the setvbuf function. */
-#define HAVE_SETVBUF 1
-
-/* Define if you have the socket function. */
-#define HAVE_SOCKET 1
-
-/* Define if you have the strcasecmp function. */
-/* #define HAVE_STRCASECMP 1 */
-
-/* Define if you have the strdup function. */
-#define HAVE_STRDUP 1
-
-/* Define if you have the strftime function. */
-#define HAVE_STRFTIME 1
-
-/* Define if you have the stricmp function. */
-#define HAVE_STRICMP 1
-
-/* Define if you have the strncasecmp function. */
-/* #define HAVE_STRNCASECMP 1 */
-
-/* Define if you have the strnicmp function. */
-#define HAVE_STRNICMP 1
-
-/* Define if you have the strstr function. */
-#define HAVE_STRSTR 1
-
-/* Define if you have the strtoll function. */
-#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__POCC__) || \
- (defined(_MSC_VER) && (_MSC_VER >= 1800))
-#define HAVE_STRTOLL 1
-#endif
-
-/* Define if you have the tcgetattr function. */
-/* #define HAVE_TCGETATTR 1 */
-
-/* Define if you have the tcsetattr function. */
-/* #define HAVE_TCSETATTR 1 */
-
-/* Define if you have the utime function. */
-#ifndef __BORLANDC__
-#define HAVE_UTIME 1
-#endif
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-#define GETNAMEINFO_QUAL_ARG1 const
-
-/* Define to the type of arg 1 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-
-/* Define to the type of arg 2 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG2 socklen_t
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 DWORD
-
-/* Define to the type of arg 7 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG7 int
-
-/* Define if you have the recv function. */
-#define HAVE_RECV 1
-
-/* Define to the type of arg 1 for recv. */
-#define RECV_TYPE_ARG1 SOCKET
-
-/* Define to the type of arg 2 for recv. */
-#define RECV_TYPE_ARG2 char *
-
-/* Define to the type of arg 3 for recv. */
-#define RECV_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for recv. */
-#define RECV_TYPE_ARG4 int
-
-/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV int
-
-/* Define if you have the recvfrom function. */
-#define HAVE_RECVFROM 1
-
-/* Define to the type of arg 1 for recvfrom. */
-#define RECVFROM_TYPE_ARG1 SOCKET
-
-/* Define to the type pointed by arg 2 for recvfrom. */
-#define RECVFROM_TYPE_ARG2 char
-
-/* Define to the type of arg 3 for recvfrom. */
-#define RECVFROM_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for recvfrom. */
-#define RECVFROM_TYPE_ARG4 int
-
-/* Define to the type pointed by arg 5 for recvfrom. */
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-
-/* Define to the type pointed by arg 6 for recvfrom. */
-#define RECVFROM_TYPE_ARG6 int
-
-/* Define to the function return type for recvfrom. */
-#define RECVFROM_TYPE_RETV int
-
-/* Define if you have the send function. */
-#define HAVE_SEND 1
-
-/* Define to the type of arg 1 for send. */
-#define SEND_TYPE_ARG1 SOCKET
-
-/* Define to the type qualifier of arg 2 for send. */
-#define SEND_QUAL_ARG2 const
-
-/* Define to the type of arg 2 for send. */
-#define SEND_TYPE_ARG2 char *
-
-/* Define to the type of arg 3 for send. */
-#define SEND_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for send. */
-#define SEND_TYPE_ARG4 int
-
-/* Define to the function return type for send. */
-#define SEND_TYPE_RETV int
-
-/* ---------------------------------------------------------------- */
-/* TYPEDEF REPLACEMENTS */
-/* ---------------------------------------------------------------- */
-
-/* Define if in_addr_t is not an available 'typedefed' type. */
-#define in_addr_t unsigned long
-
-/* Define to the return type of signal handlers (int or void). */
-#define RETSIGTYPE void
-
-/* Define if ssize_t is not an available 'typedefed' type. */
-#ifndef _SSIZE_T_DEFINED
-# if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || \
- defined(__POCC__) || \
- defined(__MINGW32__)
-# elif defined(_WIN64)
-# define _SSIZE_T_DEFINED
-# define ssize_t __int64
-# else
-# define _SSIZE_T_DEFINED
-# define ssize_t int
-# endif
-#endif
-
-/* ---------------------------------------------------------------- */
-/* TYPE SIZES */
-/* ---------------------------------------------------------------- */
-
-/* Define to the size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* Define to the size of `long double', as computed by sizeof. */
-#define SIZEOF_LONG_DOUBLE 16
-
-/* Define to the size of `long long', as computed by sizeof. */
-/* #define SIZEOF_LONG_LONG 8 */
-
-/* Define to the size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* Define to the size of `size_t', as computed by sizeof. */
-#if defined(_WIN64)
-# define SIZEOF_SIZE_T 8
-#else
-# define SIZEOF_SIZE_T 4
-#endif
-
-/* ---------------------------------------------------------------- */
-/* BSD-style lwIP TCP/IP stack SPECIFIC */
-/* ---------------------------------------------------------------- */
-
-/* Define to use BSD-style lwIP TCP/IP stack. */
-/* #define USE_LWIPSOCK 1 */
-
-#ifdef USE_LWIPSOCK
-# undef USE_WINSOCK
-# undef HAVE_WINSOCK_H
-# undef HAVE_WINSOCK2_H
-# undef HAVE_WS2TCPIP_H
-# undef HAVE_ERRNO_H
-# undef HAVE_GETHOSTNAME
-# undef HAVE_GETNAMEINFO
-# undef LWIP_POSIX_SOCKETS_IO_NAMES
-# undef RECV_TYPE_ARG1
-# undef RECV_TYPE_ARG3
-# undef SEND_TYPE_ARG1
-# undef SEND_TYPE_ARG3
-# define HAVE_FREEADDRINFO
-# define HAVE_GETADDRINFO
-# define HAVE_GETHOSTBYNAME
-# define HAVE_GETHOSTBYNAME_R
-# define HAVE_GETHOSTBYNAME_R_6
-# define LWIP_POSIX_SOCKETS_IO_NAMES 0
-# define RECV_TYPE_ARG1 int
-# define RECV_TYPE_ARG3 size_t
-# define SEND_TYPE_ARG1 int
-# define SEND_TYPE_ARG3 size_t
-#endif
-
-/* ---------------------------------------------------------------- */
-/* Watt-32 tcp/ip SPECIFIC */
-/* ---------------------------------------------------------------- */
-
-#ifdef USE_WATT32
- #include <tcp.h>
- #undef byte
- #undef word
- #undef USE_WINSOCK
- #undef HAVE_WINSOCK_H
- #undef HAVE_WINSOCK2_H
- #undef HAVE_WS2TCPIP_H
- #define HAVE_GETADDRINFO
- #define HAVE_GETNAMEINFO
- #define HAVE_SYS_IOCTL_H
- #define HAVE_SYS_SOCKET_H
- #define HAVE_NETINET_IN_H
- #define HAVE_NETDB_H
- #define HAVE_ARPA_INET_H
- #define HAVE_FREEADDRINFO
- #define SOCKET int
-#endif
-
-
-/* ---------------------------------------------------------------- */
-/* COMPILER SPECIFIC */
-/* ---------------------------------------------------------------- */
-
-/* Define to nothing if compiler does not support 'const' qualifier. */
-/* #define const */
-
-/* Define to nothing if compiler does not support 'volatile' qualifier. */
-/* #define volatile */
-
-/* Windows should not have HAVE_GMTIME_R defined */
-/* #undef HAVE_GMTIME_R */
-
-/* Define if the compiler supports C99 variadic macro style. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define HAVE_VARIADIC_MACROS_C99 1
-#endif
-
-/* Define if the compiler supports the 'long long' data type. */
-#if defined(__MINGW32__) || defined(__WATCOMC__) || \
- (defined(_MSC_VER) && (_MSC_VER >= 1310))
-#define HAVE_LONGLONG 1
-#endif
-
-/* Define to avoid VS2005 complaining about portable C functions. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define _CRT_SECURE_NO_DEPRECATE 1
-#define _CRT_NONSTDC_NO_DEPRECATE 1
-#endif
-
-/* VS2005 and later dafault size for time_t is 64-bit, unless
- _USE_32BIT_TIME_T has been defined to get a 32-bit time_t. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-# ifndef _USE_32BIT_TIME_T
-# define SIZEOF_TIME_T 8
-# else
-# define SIZEOF_TIME_T 4
-# endif
-#endif
-
-/* Officially, Microsoft's Windows SDK versions 6.X do not support Windows
- 2000 as a supported build target. VS2008 default installations provide
- an embedded Windows SDK v6.0A along with the claim that Windows 2000 is
- a valid build target for VS2008. Popular belief is that binaries built
- with VS2008 using Windows SDK versions 6.X and Windows 2000 as a build
- target are functional. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1500)
-# define VS2008_MIN_TARGET 0x0500
-#endif
-
-/* When no build target is specified VS2008 default build target is Windows
- Vista, which leaves out even Winsows XP. If no build target has been given
- for VS2008 we will target the minimum Officially supported build target,
- which happens to be Windows XP. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1500)
-# define VS2008_DEF_TARGET 0x0501
-#endif
-
-/* VS2008 default target settings and minimum build target check. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1500)
-# ifndef _WIN32_WINNT
-# define _WIN32_WINNT VS2008_DEF_TARGET
-# endif
-# ifndef WINVER
-# define WINVER VS2008_DEF_TARGET
-# endif
-# if (_WIN32_WINNT < VS2008_MIN_TARGET) || (WINVER < VS2008_MIN_TARGET)
-# error VS2008 does not support Windows build targets prior to Windows 2000
-# endif
-#endif
-
-/* When no build target is specified Pelles C 5.00 and later default build
- target is Windows Vista. We override default target to be Windows 2000. */
-#if defined(__POCC__) && (__POCC__ >= 500)
-# ifndef _WIN32_WINNT
-# define _WIN32_WINNT 0x0500
-# endif
-# ifndef WINVER
-# define WINVER 0x0500
-# endif
-#endif
-
-/* Availability of freeaddrinfo, getaddrinfo and getnameinfo functions is
- quite convoluted, compiler dependent and even build target dependent. */
-#if defined(HAVE_WS2TCPIP_H)
-# if defined(__POCC__)
-# define HAVE_FREEADDRINFO 1
-# define HAVE_GETADDRINFO 1
-# define HAVE_GETADDRINFO_THREADSAFE 1
-# define HAVE_GETNAMEINFO 1
-# elif defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0501)
-# define HAVE_FREEADDRINFO 1
-# define HAVE_GETADDRINFO 1
-# define HAVE_GETADDRINFO_THREADSAFE 1
-# define HAVE_GETNAMEINFO 1
-# elif defined(_MSC_VER) && (_MSC_VER >= 1200)
-# define HAVE_FREEADDRINFO 1
-# define HAVE_GETADDRINFO 1
-# define HAVE_GETADDRINFO_THREADSAFE 1
-# define HAVE_GETNAMEINFO 1
-# endif
-#endif
-
-#if defined(__POCC__)
-# ifndef _MSC_VER
-# error Microsoft extensions /Ze compiler option is required
-# endif
-# ifndef __POCC__OLDNAMES
-# error Compatibility names /Go compiler option is required
-# endif
-#endif
-
-/* ---------------------------------------------------------------- */
-/* STRUCT RELATED */
-/* ---------------------------------------------------------------- */
-
-/* Define if you have struct sockaddr_storage. */
-#if !defined(__SALFORDC__) && !defined(__BORLANDC__)
-#define HAVE_STRUCT_SOCKADDR_STORAGE 1
-#endif
-
-/* Define if you have struct timeval. */
-#define HAVE_STRUCT_TIMEVAL 1
-
-/* Define if struct sockaddr_in6 has the sin6_scope_id member. */
-#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
-
-#if HAVE_WINSOCK2_H && defined(_WIN32_WINNT) && (_WIN32_WINNT >= 0x0600)
-#define HAVE_STRUCT_POLLFD 1
-#endif
-
-/* ---------------------------------------------------------------- */
-/* LARGE FILE SUPPORT */
-/* ---------------------------------------------------------------- */
-
-#if defined(_MSC_VER) && !defined(_WIN32_WCE)
-# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
-# define USE_WIN32_LARGE_FILES
-# else
-# define USE_WIN32_SMALL_FILES
-# endif
-#endif
-
-#if defined(__MINGW32__) && !defined(USE_WIN32_LARGE_FILES)
-# define USE_WIN32_LARGE_FILES
-#endif
-
-#if defined(__WATCOMC__) && !defined(USE_WIN32_LARGE_FILES)
-# define USE_WIN32_LARGE_FILES
-#endif
-
-#if defined(__POCC__)
-# undef USE_WIN32_LARGE_FILES
-#endif
-
-#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES)
-# define USE_WIN32_SMALL_FILES
-#endif
-
-/* ---------------------------------------------------------------- */
-/* DNS RESOLVER SPECIALTY */
-/* ---------------------------------------------------------------- */
-
-/*
- * Undefine both USE_ARES and USE_THREADS_WIN32 for synchronous DNS.
- */
-
-/* Define to enable c-ares asynchronous DNS lookups. */
-/* #define USE_ARES 1 */
-
-/* Default define to enable threaded asynchronous DNS lookups. */
-#if !defined(USE_SYNC_DNS) && !defined(USE_ARES) && \
- !defined(USE_THREADS_WIN32)
-# define USE_THREADS_WIN32 1
-#endif
-
-#if defined(USE_ARES) && defined(USE_THREADS_WIN32)
-# error "Only one DNS lookup specialty may be defined at most"
-#endif
-
-/* ---------------------------------------------------------------- */
-/* LDAP SUPPORT */
-/* ---------------------------------------------------------------- */
-
-#if defined(CURL_HAS_NOVELL_LDAPSDK) || defined(CURL_HAS_MOZILLA_LDAPSDK)
-#undef CURL_LDAP_WIN
-#define HAVE_LDAP_SSL_H 1
-#define HAVE_LDAP_URL_PARSE 1
-#elif defined(CURL_HAS_OPENLDAP_LDAPSDK)
-#undef CURL_LDAP_WIN
-#define HAVE_LDAP_URL_PARSE 1
-#else
-#undef HAVE_LDAP_URL_PARSE
-#define CURL_LDAP_WIN 1
-#endif
-
-#if defined(__WATCOMC__) && defined(CURL_LDAP_WIN)
-#if __WATCOMC__ < 1280
-#define WINBERAPI __declspec(cdecl)
-#define WINLDAPAPI __declspec(cdecl)
-#endif
-#endif
-
-#if defined(__POCC__) && defined(CURL_LDAP_WIN)
-# define CURL_DISABLE_LDAP 1
-#endif
-
-/* ---------------------------------------------------------------- */
-/* ADDITIONAL DEFINITIONS */
-/* ---------------------------------------------------------------- */
-
-/* Define cpu-machine-OS */
-#undef OS
-#if defined(_M_IX86) || defined(__i386__) /* x86 (MSVC or gcc) */
-#define OS "i386-pc-win32"
-#elif defined(_M_X64) || defined(__x86_64__) /* x86_64 (MSVC >=2005 or gcc) */
-#define OS "x86_64-pc-win32"
-#elif defined(_M_IA64) /* Itanium */
-#define OS "ia64-pc-win32"
-#else
-#define OS "unknown-pc-win32"
-#endif
-
-/* Name of package */
-#define PACKAGE "curl"
-
-/* If you want to build curl with the built-in manual */
-#define USE_MANUAL 1
-
-#if defined(__POCC__) || (USE_IPV6)
-# define ENABLE_IPV6 1
-#endif
-
-#endif /* HEADER_CURL_CONFIG_WIN32_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/config-win32ce.h b/external/libcurl_android/jni/libcurl/lib/config-win32ce.h
deleted file mode 100755
index a8ab0d34..00000000
--- a/external/libcurl_android/jni/libcurl/lib/config-win32ce.h
+++ /dev/null
@@ -1,448 +0,0 @@
-#ifndef HEADER_CURL_CONFIG_WIN32CE_H
-#define HEADER_CURL_CONFIG_WIN32CE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* ================================================================ */
-/* lib/config-win32ce.h - Hand crafted config file for windows ce */
-/* ================================================================ */
-
-/* ---------------------------------------------------------------- */
-/* HEADER FILES */
-/* ---------------------------------------------------------------- */
-
-/* Define if you have the <arpa/inet.h> header file. */
-/* #define HAVE_ARPA_INET_H 1 */
-
-/* Define if you have the <assert.h> header file. */
-/* #define HAVE_ASSERT_H 1 */
-
-/* Define if you have the <crypto.h> header file. */
-/* #define HAVE_CRYPTO_H 1 */
-
-/* Define if you have the <errno.h> header file. */
-/* #define HAVE_ERRNO_H 1 */
-
-/* Define if you have the <err.h> header file. */
-/* #define HAVE_ERR_H 1 */
-
-/* Define if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define if you have the <getopt.h> header file. */
-/* #define HAVE_GETOPT_H 1 */
-
-/* Define if you have the <io.h> header file. */
-#define HAVE_IO_H 1
-
-/* Define if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define if you need the malloc.h header header file even with stdlib.h */
-#define NEED_MALLOC_H 1
-
-/* Define if you have the <netdb.h> header file. */
-/* #define HAVE_NETDB_H 1 */
-
-/* Define if you have the <netinet/in.h> header file. */
-/* #define HAVE_NETINET_IN_H 1 */
-
-/* Define if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define if you have the <sgtty.h> header file. */
-/* #define HAVE_SGTTY_H 1 */
-
-/* Define if you have the <ssl.h> header file. */
-/* #define HAVE_SSL_H 1 */
-
-/* Define if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define if you have the <process.h> header file. */
-/* #define HAVE_PROCESS_H 1 */
-
-/* Define if you have the <sys/param.h> header file. */
-/* #define HAVE_SYS_PARAM_H 1 */
-
-/* Define if you have the <sys/select.h> header file. */
-/* #define HAVE_SYS_SELECT_H 1 */
-
-/* Define if you have the <sys/socket.h> header file. */
-/* #define HAVE_SYS_SOCKET_H 1 */
-
-/* Define if you have the <sys/sockio.h> header file. */
-/* #define HAVE_SYS_SOCKIO_H 1 */
-
-/* Define if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define if you have the <sys/time.h> header file */
-/* #define HAVE_SYS_TIME_H 1 */
-
-/* Define if you have the <sys/types.h> header file. */
-/* #define HAVE_SYS_TYPES_H 1 */
-
-/* Define if you have the <sys/utime.h> header file */
-#define HAVE_SYS_UTIME_H 1
-
-/* Define if you have the <termio.h> header file. */
-/* #define HAVE_TERMIO_H 1 */
-
-/* Define if you have the <termios.h> header file. */
-/* #define HAVE_TERMIOS_H 1 */
-
-/* Define if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define if you have the <unistd.h> header file. */
-#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__)
-#define HAVE_UNISTD_H 1
-#endif
-
-/* Define if you have the <windows.h> header file. */
-#define HAVE_WINDOWS_H 1
-
-/* Define if you have the <winsock.h> header file. */
-#define HAVE_WINSOCK_H 1
-
-/* Define if you have the <winsock2.h> header file. */
-/* #define HAVE_WINSOCK2_H 1 */
-
-/* Define if you have the <ws2tcpip.h> header file. */
-/* #define HAVE_WS2TCPIP_H 1 */
-
-/* ---------------------------------------------------------------- */
-/* OTHER HEADER INFO */
-/* ---------------------------------------------------------------- */
-
-/* Define if sig_atomic_t is an available typedef. */
-#define HAVE_SIG_ATOMIC_T 1
-
-/* Define if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define if you can safely include both <sys/time.h> and <time.h>. */
-/* #define TIME_WITH_SYS_TIME 1 */
-
-/* ---------------------------------------------------------------- */
-/* FUNCTIONS */
-/* ---------------------------------------------------------------- */
-
-/* Define if you have the closesocket function. */
-#define HAVE_CLOSESOCKET 1
-
-/* Define if you don't have vprintf but do have _doprnt. */
-/* #define HAVE_DOPRNT 1 */
-
-/* Define if you have the gethostbyaddr function. */
-#define HAVE_GETHOSTBYADDR 1
-
-/* Define if you have the gethostname function. */
-#define HAVE_GETHOSTNAME 1
-
-/* Define if you have the getpass function. */
-/* #define HAVE_GETPASS 1 */
-
-/* Define if you have the getservbyname function. */
-#define HAVE_GETSERVBYNAME 1
-
-/* Define if you have the gettimeofday function. */
-/* #define HAVE_GETTIMEOFDAY 1 */
-
-/* Define if you have the inet_addr function. */
-#define HAVE_INET_ADDR 1
-
-/* Define if you have the ioctlsocket function. */
-#define HAVE_IOCTLSOCKET 1
-
-/* Define if you have a working ioctlsocket FIONBIO function. */
-#define HAVE_IOCTLSOCKET_FIONBIO 1
-
-/* Define if you have the perror function. */
-#define HAVE_PERROR 1
-
-/* Define if you have the RAND_screen function when using SSL */
-#define HAVE_RAND_SCREEN 1
-
-/* Define if you have the `RAND_status' function when using SSL. */
-#define HAVE_RAND_STATUS 1
-
-/* Define if you have the select function. */
-#define HAVE_SELECT 1
-
-/* Define if you have the setvbuf function. */
-#define HAVE_SETVBUF 1
-
-/* Define if you have the socket function. */
-#define HAVE_SOCKET 1
-
-/* Define if you have the strcasecmp function. */
-/* #define HAVE_STRCASECMP 1 */
-
-/* Define if you have the strdup function. */
-/* #define HAVE_STRDUP 1 */
-
-/* Define if you have the strftime function. */
-/* #define HAVE_STRFTIME 1 */
-
-/* Define if you have the stricmp function. */
-/* #define HAVE_STRICMP 1 */
-
-/* Define if you have the strncasecmp function. */
-/* #define HAVE_STRNCASECMP 1 */
-
-/* Define if you have the strnicmp function. */
-/* #define HAVE_STRNICMP 1 */
-
-/* Define if you have the strstr function. */
-#define HAVE_STRSTR 1
-
-/* Define if you have the strtoll function. */
-#if defined(__MINGW32__) || defined(__WATCOMC__)
-#define HAVE_STRTOLL 1
-#endif
-
-/* Define if you have the tcgetattr function. */
-/* #define HAVE_TCGETATTR 1 */
-
-/* Define if you have the tcsetattr function. */
-/* #define HAVE_TCSETATTR 1 */
-
-/* Define if you have the utime function */
-#define HAVE_UTIME 1
-
-/* Define if you have the getnameinfo function. */
-#define HAVE_GETNAMEINFO 1
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-#define GETNAMEINFO_QUAL_ARG1 const
-
-/* Define to the type of arg 1 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-
-/* Define to the type of arg 2 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG2 socklen_t
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 DWORD
-
-/* Define to the type of arg 7 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG7 int
-
-/* Define if you have the recv function. */
-#define HAVE_RECV 1
-
-/* Define to the type of arg 1 for recv. */
-#define RECV_TYPE_ARG1 SOCKET
-
-/* Define to the type of arg 2 for recv. */
-#define RECV_TYPE_ARG2 char *
-
-/* Define to the type of arg 3 for recv. */
-#define RECV_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for recv. */
-#define RECV_TYPE_ARG4 int
-
-/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV int
-
-/* Define if you have the recvfrom function. */
-#define HAVE_RECVFROM 1
-
-/* Define to the type of arg 1 for recvfrom. */
-#define RECVFROM_TYPE_ARG1 SOCKET
-
-/* Define to the type pointed by arg 2 for recvfrom. */
-#define RECVFROM_TYPE_ARG2 char
-
-/* Define to the type of arg 3 for recvfrom. */
-#define RECVFROM_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for recvfrom. */
-#define RECVFROM_TYPE_ARG4 int
-
-/* Define to the type pointed by arg 5 for recvfrom. */
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-
-/* Define to the type pointed by arg 6 for recvfrom. */
-#define RECVFROM_TYPE_ARG6 int
-
-/* Define to the function return type for recvfrom. */
-#define RECVFROM_TYPE_RETV int
-
-/* Define if you have the send function. */
-#define HAVE_SEND 1
-
-/* Define to the type of arg 1 for send. */
-#define SEND_TYPE_ARG1 SOCKET
-
-/* Define to the type qualifier of arg 2 for send. */
-#define SEND_QUAL_ARG2 const
-
-/* Define to the type of arg 2 for send. */
-#define SEND_TYPE_ARG2 char *
-
-/* Define to the type of arg 3 for send. */
-#define SEND_TYPE_ARG3 int
-
-/* Define to the type of arg 4 for send. */
-#define SEND_TYPE_ARG4 int
-
-/* Define to the function return type for send. */
-#define SEND_TYPE_RETV int
-
-/* ---------------------------------------------------------------- */
-/* TYPEDEF REPLACEMENTS */
-/* ---------------------------------------------------------------- */
-
-/* Define this if in_addr_t is not an available 'typedefed' type */
-#define in_addr_t unsigned long
-
-/* Define as the return type of signal handlers (int or void). */
-#define RETSIGTYPE void
-
-/* Define ssize_t if it is not an available 'typedefed' type */
-#if (defined(__WATCOMC__) && (__WATCOMC__ >= 1240)) || defined(__POCC__)
-#elif defined(_WIN64)
-#define ssize_t __int64
-#else
-#define ssize_t int
-#endif
-
-/* ---------------------------------------------------------------- */
-/* TYPE SIZES */
-/* ---------------------------------------------------------------- */
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `long double', as computed by sizeof. */
-#define SIZEOF_LONG_DOUBLE 16
-
-/* The size of `long long', as computed by sizeof. */
-/* #define SIZEOF_LONG_LONG 8 */
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#if defined(_WIN64)
-# define SIZEOF_SIZE_T 8
-#else
-# define SIZEOF_SIZE_T 4
-#endif
-
-/* ---------------------------------------------------------------- */
-/* STRUCT RELATED */
-/* ---------------------------------------------------------------- */
-
-/* Define this if you have struct sockaddr_storage */
-/* #define HAVE_STRUCT_SOCKADDR_STORAGE 1 */
-
-/* Define this if you have struct timeval */
-#define HAVE_STRUCT_TIMEVAL 1
-
-/* Define this if struct sockaddr_in6 has the sin6_scope_id member */
-#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
-
-/* ---------------------------------------------------------------- */
-/* COMPILER SPECIFIC */
-/* ---------------------------------------------------------------- */
-
-/* Undef keyword 'const' if it does not work. */
-/* #undef const */
-
-/* Define to avoid VS2005 complaining about portable C functions */
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define _CRT_SECURE_NO_DEPRECATE 1
-#define _CRT_NONSTDC_NO_DEPRECATE 1
-#endif
-
-/* VS2005 and later dafault size for time_t is 64-bit, unless */
-/* _USE_32BIT_TIME_T has been defined to get a 32-bit time_t. */
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-# ifndef _USE_32BIT_TIME_T
-# define SIZEOF_TIME_T 8
-# else
-# define SIZEOF_TIME_T 4
-# endif
-#endif
-
-/* ---------------------------------------------------------------- */
-/* LARGE FILE SUPPORT */
-/* ---------------------------------------------------------------- */
-
-#if defined(_MSC_VER) && !defined(_WIN32_WCE)
-# if (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
-# define USE_WIN32_LARGE_FILES
-# else
-# define USE_WIN32_SMALL_FILES
-# endif
-#endif
-
-#if !defined(USE_WIN32_LARGE_FILES) && !defined(USE_WIN32_SMALL_FILES)
-# define USE_WIN32_SMALL_FILES
-#endif
-
-/* ---------------------------------------------------------------- */
-/* LDAP SUPPORT */
-/* ---------------------------------------------------------------- */
-
-#define CURL_LDAP_WIN 1
-#undef HAVE_LDAP_URL_PARSE
-
-/* ---------------------------------------------------------------- */
-/* ADDITIONAL DEFINITIONS */
-/* ---------------------------------------------------------------- */
-
-/* Define cpu-machine-OS */
-#undef OS
-#define OS "i386-pc-win32ce"
-
-/* Name of package */
-#define PACKAGE "curl"
-
-/* ---------------------------------------------------------------- */
-/* WinCE */
-/* ---------------------------------------------------------------- */
-
-#ifndef UNICODE
-# define UNICODE
-#endif
-
-#ifndef _UNICODE
-# define _UNICODE
-#endif
-
-#define CURL_DISABLE_FILE 1
-#define CURL_DISABLE_TELNET 1
-#define CURL_DISABLE_LDAP 1
-
-#define ENOSPC 1
-#define ENOMEM 2
-#define EAGAIN 3
-
-extern int stat(const char *path,struct stat *buffer );
-
-#endif /* HEADER_CURL_CONFIG_WIN32CE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/conncache.c b/external/libcurl_android/jni/libcurl/lib/conncache.c
deleted file mode 100755
index 5bbcf3c8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/conncache.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012, Linus Nielsen Feltzing, <linus@haxx.se>
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "url.h"
-#include "progress.h"
-#include "multiif.h"
-#include "sendf.h"
-#include "rawstr.h"
-#include "bundles.h"
-#include "conncache.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static void free_bundle_hash_entry(void *freethis)
-{
- struct connectbundle *b = (struct connectbundle *) freethis;
-
- Curl_bundle_destroy(b);
-}
-
-struct conncache *Curl_conncache_init(int size)
-{
- struct conncache *connc;
-
- connc = calloc(1, sizeof(struct conncache));
- if(!connc)
- return NULL;
-
- connc->hash = Curl_hash_alloc(size, Curl_hash_str,
- Curl_str_key_compare, free_bundle_hash_entry);
-
- if(!connc->hash) {
- free(connc);
- return NULL;
- }
-
- return connc;
-}
-
-void Curl_conncache_destroy(struct conncache *connc)
-{
- if(connc) {
- Curl_hash_destroy(connc->hash);
- connc->hash = NULL;
- free(connc);
- }
-}
-
-struct connectbundle *Curl_conncache_find_bundle(struct conncache *connc,
- char *hostname)
-{
- struct connectbundle *bundle = NULL;
-
- if(connc)
- bundle = Curl_hash_pick(connc->hash, hostname, strlen(hostname)+1);
-
- return bundle;
-}
-
-static bool conncache_add_bundle(struct conncache *connc,
- char *hostname,
- struct connectbundle *bundle)
-{
- void *p;
-
- p = Curl_hash_add(connc->hash, hostname, strlen(hostname)+1, bundle);
-
- return p?TRUE:FALSE;
-}
-
-static void conncache_remove_bundle(struct conncache *connc,
- struct connectbundle *bundle)
-{
- struct curl_hash_iterator iter;
- struct curl_hash_element *he;
-
- if(!connc)
- return;
-
- Curl_hash_start_iterate(connc->hash, &iter);
-
- he = Curl_hash_next_element(&iter);
- while(he) {
- if(he->ptr == bundle) {
- /* The bundle is destroyed by the hash destructor function,
- free_bundle_hash_entry() */
- Curl_hash_delete(connc->hash, he->key, he->key_len);
- return;
- }
-
- he = Curl_hash_next_element(&iter);
- }
-}
-
-CURLcode Curl_conncache_add_conn(struct conncache *connc,
- struct connectdata *conn)
-{
- CURLcode result;
- struct connectbundle *bundle;
- struct connectbundle *new_bundle = NULL;
- struct SessionHandle *data = conn->data;
-
- bundle = Curl_conncache_find_bundle(data->state.conn_cache,
- conn->host.name);
- if(!bundle) {
- result = Curl_bundle_create(data, &new_bundle);
- if(result != CURLE_OK)
- return result;
-
- if(!conncache_add_bundle(data->state.conn_cache,
- conn->host.name, new_bundle)) {
- Curl_bundle_destroy(new_bundle);
- return CURLE_OUT_OF_MEMORY;
- }
- bundle = new_bundle;
- }
-
- result = Curl_bundle_add_conn(bundle, conn);
- if(result != CURLE_OK) {
- if(new_bundle)
- conncache_remove_bundle(data->state.conn_cache, new_bundle);
- return result;
- }
-
- conn->connection_id = connc->next_connection_id++;
- connc->num_connections++;
-
- return CURLE_OK;
-}
-
-void Curl_conncache_remove_conn(struct conncache *connc,
- struct connectdata *conn)
-{
- struct connectbundle *bundle = conn->bundle;
-
- /* The bundle pointer can be NULL, since this function can be called
- due to a failed connection attempt, before being added to a bundle */
- if(bundle) {
- Curl_bundle_remove_conn(bundle, conn);
- if(bundle->num_connections == 0) {
- conncache_remove_bundle(connc, bundle);
- }
-
- if(connc) {
- connc->num_connections--;
-
- DEBUGF(infof(conn->data, "The cache now contains %d members\n",
- connc->num_connections));
- }
- }
-}
-
-/* This function iterates the entire connection cache and calls the
- function func() with the connection pointer as the first argument
- and the supplied 'param' argument as the other,
-
- Return 0 from func() to continue the loop, return 1 to abort it.
- */
-void Curl_conncache_foreach(struct conncache *connc,
- void *param,
- int (*func)(struct connectdata *conn, void *param))
-{
- struct curl_hash_iterator iter;
- struct curl_llist_element *curr;
- struct curl_hash_element *he;
-
- if(!connc)
- return;
-
- Curl_hash_start_iterate(connc->hash, &iter);
-
- he = Curl_hash_next_element(&iter);
- while(he) {
- struct connectbundle *bundle;
- struct connectdata *conn;
-
- bundle = he->ptr;
- he = Curl_hash_next_element(&iter);
-
- curr = bundle->conn_list->head;
- while(curr) {
- /* Yes, we need to update curr before calling func(), because func()
- might decide to remove the connection */
- conn = curr->ptr;
- curr = curr->next;
-
- if(1 == func(conn, param))
- return;
- }
- }
-}
-
-/* Return the first connection found in the cache. Used when closing all
- connections */
-struct connectdata *
-Curl_conncache_find_first_connection(struct conncache *connc)
-{
- struct curl_hash_iterator iter;
- struct curl_llist_element *curr;
- struct curl_hash_element *he;
- struct connectbundle *bundle;
-
- Curl_hash_start_iterate(connc->hash, &iter);
-
- he = Curl_hash_next_element(&iter);
- while(he) {
- bundle = he->ptr;
-
- curr = bundle->conn_list->head;
- if(curr) {
- return curr->ptr;
- }
-
- he = Curl_hash_next_element(&iter);
- }
-
- return NULL;
-}
-
-
-#if 0
-/* Useful for debugging the connection cache */
-void Curl_conncache_print(struct conncache *connc)
-{
- struct curl_hash_iterator iter;
- struct curl_llist_element *curr;
- struct curl_hash_element *he;
-
- if(!connc)
- return;
-
- fprintf(stderr, "=Bundle cache=\n");
-
- Curl_hash_start_iterate(connc->hash, &iter);
-
- he = Curl_hash_next_element(&iter);
- while(he) {
- struct connectbundle *bundle;
- struct connectdata *conn;
-
- bundle = he->ptr;
-
- fprintf(stderr, "%s -", he->key);
- curr = bundle->conn_list->head;
- while(curr) {
- conn = curr->ptr;
-
- fprintf(stderr, " [%p %d]", (void *)conn, conn->inuse);
- curr = curr->next;
- }
- fprintf(stderr, "\n");
-
- he = Curl_hash_next_element(&iter);
- }
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/conncache.h b/external/libcurl_android/jni/libcurl/lib/conncache.h
deleted file mode 100755
index d793f248..00000000
--- a/external/libcurl_android/jni/libcurl/lib/conncache.h
+++ /dev/null
@@ -1,55 +0,0 @@
-#ifndef HEADER_CURL_CONNCACHE_H
-#define HEADER_CURL_CONNCACHE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-struct conncache {
- struct curl_hash *hash;
- size_t num_connections;
- long next_connection_id;
- struct timeval last_cleanup;
-};
-
-struct conncache *Curl_conncache_init(int size);
-
-void Curl_conncache_destroy(struct conncache *connc);
-
-struct connectbundle *Curl_conncache_find_bundle(struct conncache *connc,
- char *hostname);
-
-CURLcode Curl_conncache_add_conn(struct conncache *connc,
- struct connectdata *conn);
-
-void Curl_conncache_remove_conn(struct conncache *connc,
- struct connectdata *conn);
-
-void Curl_conncache_foreach(struct conncache *connc,
- void *param,
- int (*func)(struct connectdata *conn,
- void *param));
-
-struct connectdata *
-Curl_conncache_find_first_connection(struct conncache *connc);
-
-void Curl_conncache_print(struct conncache *connc);
-
-#endif /* HEADER_CURL_CONNCACHE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/connect.c b/external/libcurl_android/jni/libcurl/lib/connect.c
deleted file mode 100755
index fb315fc8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/connect.c
+++ /dev/null
@@ -1,1340 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h> /* <netinet/tcp.h> may need it */
-#endif
-#ifdef HAVE_SYS_UN_H
-#include <sys/un.h> /* for sockaddr_un */
-#endif
-#ifdef HAVE_NETINET_TCP_H
-#include <netinet/tcp.h> /* for TCP_NODELAY */
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#if (defined(HAVE_IOCTL_FIONBIO) && defined(NETWARE))
-#include <sys/filio.h>
-#endif
-#ifdef NETWARE
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "urldata.h"
-#include "sendf.h"
-#include "if2ip.h"
-#include "strerror.h"
-#include "connect.h"
-#include "curl_memory.h"
-#include "select.h"
-#include "url.h" /* for Curl_safefree() */
-#include "multiif.h"
-#include "sockaddr.h" /* required for Curl_sockaddr_storage */
-#include "inet_ntop.h"
-#include "inet_pton.h"
-#include "vtls/vtls.h" /* for Curl_ssl_check_cxn() */
-#include "progress.h"
-#include "warnless.h"
-#include "conncache.h"
-#include "multihandle.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifdef __SYMBIAN32__
-/* This isn't actually supported under Symbian OS */
-#undef SO_NOSIGPIPE
-#endif
-
-static bool verifyconnect(curl_socket_t sockfd, int *error);
-
-#if defined(__DragonFly__) || defined(HAVE_WINSOCK_H)
-/* DragonFlyBSD and Windows use millisecond units */
-#define KEEPALIVE_FACTOR(x) (x *= 1000)
-#else
-#define KEEPALIVE_FACTOR(x)
-#endif
-
-#if defined(HAVE_WINSOCK2_H) && !defined(SIO_KEEPALIVE_VALS)
-#define SIO_KEEPALIVE_VALS _WSAIOW(IOC_VENDOR,4)
-
-struct tcp_keepalive {
- u_long onoff;
- u_long keepalivetime;
- u_long keepaliveinterval;
-};
-#endif
-
-static void
-tcpkeepalive(struct SessionHandle *data,
- curl_socket_t sockfd)
-{
- int optval = data->set.tcp_keepalive?1:0;
-
- /* only set IDLE and INTVL if setting KEEPALIVE is successful */
- if(setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE,
- (void *)&optval, sizeof(optval)) < 0) {
- infof(data, "Failed to set SO_KEEPALIVE on fd %d\n", sockfd);
- }
- else {
-#if defined(SIO_KEEPALIVE_VALS)
- struct tcp_keepalive vals;
- DWORD dummy;
- vals.onoff = 1;
- optval = curlx_sltosi(data->set.tcp_keepidle);
- KEEPALIVE_FACTOR(optval);
- vals.keepalivetime = optval;
- optval = curlx_sltosi(data->set.tcp_keepintvl);
- KEEPALIVE_FACTOR(optval);
- vals.keepaliveinterval = optval;
- if(WSAIoctl(sockfd, SIO_KEEPALIVE_VALS, (LPVOID) &vals, sizeof(vals),
- NULL, 0, &dummy, NULL, NULL) != 0) {
- infof(data, "Failed to set SIO_KEEPALIVE_VALS on fd %d: %d\n",
- (int)sockfd, WSAGetLastError());
- }
-#else
-#ifdef TCP_KEEPIDLE
- optval = curlx_sltosi(data->set.tcp_keepidle);
- KEEPALIVE_FACTOR(optval);
- if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE,
- (void *)&optval, sizeof(optval)) < 0) {
- infof(data, "Failed to set TCP_KEEPIDLE on fd %d\n", sockfd);
- }
-#endif
-#ifdef TCP_KEEPINTVL
- optval = curlx_sltosi(data->set.tcp_keepintvl);
- KEEPALIVE_FACTOR(optval);
- if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL,
- (void *)&optval, sizeof(optval)) < 0) {
- infof(data, "Failed to set TCP_KEEPINTVL on fd %d\n", sockfd);
- }
-#endif
-#ifdef TCP_KEEPALIVE
- /* Mac OS X style */
- optval = curlx_sltosi(data->set.tcp_keepidle);
- KEEPALIVE_FACTOR(optval);
- if(setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPALIVE,
- (void *)&optval, sizeof(optval)) < 0) {
- infof(data, "Failed to set TCP_KEEPALIVE on fd %d\n", sockfd);
- }
-#endif
-#endif
- }
-}
-
-static CURLcode
-singleipconnect(struct connectdata *conn,
- const Curl_addrinfo *ai, /* start connecting to this */
- curl_socket_t *sock);
-
-/*
- * Curl_timeleft() returns the amount of milliseconds left allowed for the
- * transfer/connection. If the value is negative, the timeout time has already
- * elapsed.
- *
- * The start time is stored in progress.t_startsingle - as set with
- * Curl_pgrsTime(..., TIMER_STARTSINGLE);
- *
- * If 'nowp' is non-NULL, it points to the current time.
- * 'duringconnect' is FALSE if not during a connect, as then of course the
- * connect timeout is not taken into account!
- *
- * @unittest: 1303
- */
-long Curl_timeleft(struct SessionHandle *data,
- struct timeval *nowp,
- bool duringconnect)
-{
- int timeout_set = 0;
- long timeout_ms = duringconnect?DEFAULT_CONNECT_TIMEOUT:0;
- struct timeval now;
-
- /* if a timeout is set, use the most restrictive one */
-
- if(data->set.timeout > 0)
- timeout_set |= 1;
- if(duringconnect && (data->set.connecttimeout > 0))
- timeout_set |= 2;
-
- switch (timeout_set) {
- case 1:
- timeout_ms = data->set.timeout;
- break;
- case 2:
- timeout_ms = data->set.connecttimeout;
- break;
- case 3:
- if(data->set.timeout < data->set.connecttimeout)
- timeout_ms = data->set.timeout;
- else
- timeout_ms = data->set.connecttimeout;
- break;
- default:
- /* use the default */
- if(!duringconnect)
- /* if we're not during connect, there's no default timeout so if we're
- at zero we better just return zero and not make it a negative number
- by the math below */
- return 0;
- break;
- }
-
- if(!nowp) {
- now = Curl_tvnow();
- nowp = &now;
- }
-
- /* subtract elapsed time */
- if(duringconnect)
- /* since this most recent connect started */
- timeout_ms -= Curl_tvdiff(*nowp, data->progress.t_startsingle);
- else
- /* since the entire operation started */
- timeout_ms -= Curl_tvdiff(*nowp, data->progress.t_startop);
- if(!timeout_ms)
- /* avoid returning 0 as that means no timeout! */
- return -1;
-
- return timeout_ms;
-}
-
-static CURLcode bindlocal(struct connectdata *conn,
- curl_socket_t sockfd, int af)
-{
- struct SessionHandle *data = conn->data;
-
- struct Curl_sockaddr_storage sa;
- struct sockaddr *sock = (struct sockaddr *)&sa; /* bind to this address */
- curl_socklen_t sizeof_sa = 0; /* size of the data sock points to */
- struct sockaddr_in *si4 = (struct sockaddr_in *)&sa;
-#ifdef ENABLE_IPV6
- struct sockaddr_in6 *si6 = (struct sockaddr_in6 *)&sa;
-#endif
-
- struct Curl_dns_entry *h=NULL;
- unsigned short port = data->set.localport; /* use this port number, 0 for
- "random" */
- /* how many port numbers to try to bind to, increasing one at a time */
- int portnum = data->set.localportrange;
- const char *dev = data->set.str[STRING_DEVICE];
- int error;
- char myhost[256] = "";
- int done = 0; /* -1 for error, 1 for address found */
- bool is_interface = FALSE;
- bool is_host = FALSE;
- static const char *if_prefix = "if!";
- static const char *host_prefix = "host!";
-
- /*************************************************************
- * Select device to bind socket to
- *************************************************************/
- if(!dev && !port)
- /* no local kind of binding was requested */
- return CURLE_OK;
-
- memset(&sa, 0, sizeof(struct Curl_sockaddr_storage));
-
- if(dev && (strlen(dev)<255) ) {
- if(strncmp(if_prefix, dev, strlen(if_prefix)) == 0) {
- dev += strlen(if_prefix);
- is_interface = TRUE;
- }
- else if(strncmp(host_prefix, dev, strlen(host_prefix)) == 0) {
- dev += strlen(host_prefix);
- is_host = TRUE;
- }
-
- /* interface */
- if(!is_host) {
- switch(Curl_if2ip(af, conn->scope, dev, myhost, sizeof(myhost))) {
- case IF2IP_NOT_FOUND:
- if(is_interface) {
- /* Do not fall back to treating it as a host name */
- failf(data, "Couldn't bind to interface '%s'", dev);
- return CURLE_INTERFACE_FAILED;
- }
- break;
- case IF2IP_AF_NOT_SUPPORTED:
- /* Signal the caller to try another address family if available */
- return CURLE_UNSUPPORTED_PROTOCOL;
- case IF2IP_FOUND:
- is_interface = TRUE;
- /*
- * We now have the numerical IP address in the 'myhost' buffer
- */
- infof(data, "Local Interface %s is ip %s using address family %i\n",
- dev, myhost, af);
- done = 1;
-
-#ifdef SO_BINDTODEVICE
- /* I am not sure any other OSs than Linux that provide this feature,
- * and at the least I cannot test. --Ben
- *
- * This feature allows one to tightly bind the local socket to a
- * particular interface. This will force even requests to other
- * local interfaces to go out the external interface.
- *
- *
- * Only bind to the interface when specified as interface, not just
- * as a hostname or ip address.
- */
- if(setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE,
- dev, (curl_socklen_t)strlen(dev)+1) != 0) {
- error = SOCKERRNO;
- infof(data, "SO_BINDTODEVICE %s failed with errno %d: %s;"
- " will do regular bind\n",
- dev, error, Curl_strerror(conn, error));
- /* This is typically "errno 1, error: Operation not permitted" if
- you're not running as root or another suitable privileged
- user */
- }
-#endif
- break;
- }
- }
- if(!is_interface) {
- /*
- * This was not an interface, resolve the name as a host name
- * or IP number
- *
- * Temporarily force name resolution to use only the address type
- * of the connection. The resolve functions should really be changed
- * to take a type parameter instead.
- */
- long ipver = conn->ip_version;
- int rc;
-
- if(af == AF_INET)
- conn->ip_version = CURL_IPRESOLVE_V4;
-#ifdef ENABLE_IPV6
- else if(af == AF_INET6)
- conn->ip_version = CURL_IPRESOLVE_V6;
-#endif
-
- rc = Curl_resolv(conn, dev, 0, &h);
- if(rc == CURLRESOLV_PENDING)
- (void)Curl_resolver_wait_resolv(conn, &h);
- conn->ip_version = ipver;
-
- if(h) {
- /* convert the resolved address, sizeof myhost >= INET_ADDRSTRLEN */
- Curl_printable_address(h->addr, myhost, sizeof(myhost));
- infof(data, "Name '%s' family %i resolved to '%s' family %i\n",
- dev, af, myhost, h->addr->ai_family);
- Curl_resolv_unlock(data, h);
- done = 1;
- }
- else {
- /*
- * provided dev was no interface (or interfaces are not supported
- * e.g. solaris) no ip address and no domain we fail here
- */
- done = -1;
- }
- }
-
- if(done > 0) {
-#ifdef ENABLE_IPV6
- /* ipv6 address */
- if(af == AF_INET6) {
-#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
- char *scope_ptr = strchr(myhost, '%');
- if(scope_ptr)
- *(scope_ptr++) = 0;
-#endif
- if(Curl_inet_pton(AF_INET6, myhost, &si6->sin6_addr) > 0) {
- si6->sin6_family = AF_INET6;
- si6->sin6_port = htons(port);
-#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
- if(scope_ptr)
- /* The "myhost" string either comes from Curl_if2ip or from
- Curl_printable_address. The latter returns only numeric scope
- IDs and the former returns none at all. So the scope ID, if
- present, is known to be numeric */
- si6->sin6_scope_id = atoi(scope_ptr);
-#endif
- }
- sizeof_sa = sizeof(struct sockaddr_in6);
- }
- else
-#endif
- /* ipv4 address */
- if((af == AF_INET) &&
- (Curl_inet_pton(AF_INET, myhost, &si4->sin_addr) > 0)) {
- si4->sin_family = AF_INET;
- si4->sin_port = htons(port);
- sizeof_sa = sizeof(struct sockaddr_in);
- }
- }
-
- if(done < 1) {
- failf(data, "Couldn't bind to '%s'", dev);
- return CURLE_INTERFACE_FAILED;
- }
- }
- else {
- /* no device was given, prepare sa to match af's needs */
-#ifdef ENABLE_IPV6
- if(af == AF_INET6) {
- si6->sin6_family = AF_INET6;
- si6->sin6_port = htons(port);
- sizeof_sa = sizeof(struct sockaddr_in6);
- }
- else
-#endif
- if(af == AF_INET) {
- si4->sin_family = AF_INET;
- si4->sin_port = htons(port);
- sizeof_sa = sizeof(struct sockaddr_in);
- }
- }
-
- for(;;) {
- if(bind(sockfd, sock, sizeof_sa) >= 0) {
- /* we succeeded to bind */
- struct Curl_sockaddr_storage add;
- curl_socklen_t size = sizeof(add);
- memset(&add, 0, sizeof(struct Curl_sockaddr_storage));
- if(getsockname(sockfd, (struct sockaddr *) &add, &size) < 0) {
- data->state.os_errno = error = SOCKERRNO;
- failf(data, "getsockname() failed with errno %d: %s",
- error, Curl_strerror(conn, error));
- return CURLE_INTERFACE_FAILED;
- }
- infof(data, "Local port: %hu\n", port);
- conn->bits.bound = TRUE;
- return CURLE_OK;
- }
-
- if(--portnum > 0) {
- infof(data, "Bind to local port %hu failed, trying next\n", port);
- port++; /* try next port */
- /* We re-use/clobber the port variable here below */
- if(sock->sa_family == AF_INET)
- si4->sin_port = ntohs(port);
-#ifdef ENABLE_IPV6
- else
- si6->sin6_port = ntohs(port);
-#endif
- }
- else
- break;
- }
-
- data->state.os_errno = error = SOCKERRNO;
- failf(data, "bind failed with errno %d: %s",
- error, Curl_strerror(conn, error));
-
- return CURLE_INTERFACE_FAILED;
-}
-
-/*
- * verifyconnect() returns TRUE if the connect really has happened.
- */
-static bool verifyconnect(curl_socket_t sockfd, int *error)
-{
- bool rc = TRUE;
-#ifdef SO_ERROR
- int err = 0;
- curl_socklen_t errSize = sizeof(err);
-
-#ifdef WIN32
- /*
- * In October 2003 we effectively nullified this function on Windows due to
- * problems with it using all CPU in multi-threaded cases.
- *
- * In May 2004, we bring it back to offer more info back on connect failures.
- * Gisle Vanem could reproduce the former problems with this function, but
- * could avoid them by adding this SleepEx() call below:
- *
- * "I don't have Rational Quantify, but the hint from his post was
- * ntdll::NtRemoveIoCompletion(). So I'd assume the SleepEx (or maybe
- * just Sleep(0) would be enough?) would release whatever
- * mutex/critical-section the ntdll call is waiting on.
- *
- * Someone got to verify this on Win-NT 4.0, 2000."
- */
-
-#ifdef _WIN32_WCE
- Sleep(0);
-#else
- SleepEx(0, FALSE);
-#endif
-
-#endif
-
- if(0 != getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void *)&err, &errSize))
- err = SOCKERRNO;
-#ifdef _WIN32_WCE
- /* Old WinCE versions don't support SO_ERROR */
- if(WSAENOPROTOOPT == err) {
- SET_SOCKERRNO(0);
- err = 0;
- }
-#endif
-#ifdef __minix
- /* Minix 3.1.x doesn't support getsockopt on UDP sockets */
- if(EBADIOCTL == err) {
- SET_SOCKERRNO(0);
- err = 0;
- }
-#endif
- if((0 == err) || (EISCONN == err))
- /* we are connected, awesome! */
- rc = TRUE;
- else
- /* This wasn't a successful connect */
- rc = FALSE;
- if(error)
- *error = err;
-#else
- (void)sockfd;
- if(error)
- *error = SOCKERRNO;
-#endif
- return rc;
-}
-
-/* Used within the multi interface. Try next IP address, return TRUE if no
- more address exists or error */
-static CURLcode trynextip(struct connectdata *conn,
- int sockindex,
- int tempindex)
-{
- CURLcode rc = CURLE_COULDNT_CONNECT;
-
- /* First clean up after the failed socket.
- Don't close it yet to ensure that the next IP's socket gets a different
- file descriptor, which can prevent bugs when the curl_multi_socket_action
- interface is used with certain select() replacements such as kqueue. */
- curl_socket_t fd_to_close = conn->tempsock[tempindex];
- conn->tempsock[tempindex] = CURL_SOCKET_BAD;
-
- if(sockindex == FIRSTSOCKET) {
- Curl_addrinfo *ai = NULL;
- int family = AF_UNSPEC;
-
- if(conn->tempaddr[tempindex]) {
- /* find next address in the same protocol family */
- family = conn->tempaddr[tempindex]->ai_family;
- ai = conn->tempaddr[tempindex]->ai_next;
- }
- else if(conn->tempaddr[0]) {
- /* happy eyeballs - try the other protocol family */
- int firstfamily = conn->tempaddr[0]->ai_family;
-#ifdef ENABLE_IPV6
- family = (firstfamily == AF_INET) ? AF_INET6 : AF_INET;
-#else
- family = firstfamily;
-#endif
- ai = conn->tempaddr[0]->ai_next;
- }
-
- while(ai) {
- while(ai && ai->ai_family != family)
- ai = ai->ai_next;
-
- if(ai) {
- rc = singleipconnect(conn, ai, &conn->tempsock[tempindex]);
- if(rc == CURLE_COULDNT_CONNECT) {
- ai = ai->ai_next;
- continue;
- }
- conn->tempaddr[tempindex] = ai;
- }
- break;
- }
- }
-
- if(fd_to_close != CURL_SOCKET_BAD)
- Curl_closesocket(conn, fd_to_close);
-
- return rc;
-}
-
-/* Copies connection info into the session handle to make it available
- when the session handle is no longer associated with a connection. */
-void Curl_persistconninfo(struct connectdata *conn)
-{
- memcpy(conn->data->info.conn_primary_ip, conn->primary_ip, MAX_IPADR_LEN);
- memcpy(conn->data->info.conn_local_ip, conn->local_ip, MAX_IPADR_LEN);
- conn->data->info.conn_primary_port = conn->primary_port;
- conn->data->info.conn_local_port = conn->local_port;
-}
-
-/* retrieves ip address and port from a sockaddr structure */
-static bool getaddressinfo(struct sockaddr* sa, char* addr,
- long* port)
-{
- unsigned short us_port;
- struct sockaddr_in* si = NULL;
-#ifdef ENABLE_IPV6
- struct sockaddr_in6* si6 = NULL;
-#endif
-#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
- struct sockaddr_un* su = NULL;
-#endif
-
- switch (sa->sa_family) {
- case AF_INET:
- si = (struct sockaddr_in*) sa;
- if(Curl_inet_ntop(sa->sa_family, &si->sin_addr,
- addr, MAX_IPADR_LEN)) {
- us_port = ntohs(si->sin_port);
- *port = us_port;
- return TRUE;
- }
- break;
-#ifdef ENABLE_IPV6
- case AF_INET6:
- si6 = (struct sockaddr_in6*)sa;
- if(Curl_inet_ntop(sa->sa_family, &si6->sin6_addr,
- addr, MAX_IPADR_LEN)) {
- us_port = ntohs(si6->sin6_port);
- *port = us_port;
- return TRUE;
- }
- break;
-#endif
-#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
- case AF_UNIX:
- su = (struct sockaddr_un*)sa;
- snprintf(addr, MAX_IPADR_LEN, "%s", su->sun_path);
- *port = 0;
- return TRUE;
-#endif
- default:
- break;
- }
-
- addr[0] = '\0';
- *port = 0;
-
- return FALSE;
-}
-
-/* retrieves the start/end point information of a socket of an established
- connection */
-void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd)
-{
- int error;
- curl_socklen_t len;
- struct Curl_sockaddr_storage ssrem;
- struct Curl_sockaddr_storage ssloc;
- struct SessionHandle *data = conn->data;
-
- if(conn->socktype == SOCK_DGRAM)
- /* there's no connection! */
- return;
-
- if(!conn->bits.reuse) {
-
- len = sizeof(struct Curl_sockaddr_storage);
- if(getpeername(sockfd, (struct sockaddr*) &ssrem, &len)) {
- error = SOCKERRNO;
- failf(data, "getpeername() failed with errno %d: %s",
- error, Curl_strerror(conn, error));
- return;
- }
-
- len = sizeof(struct Curl_sockaddr_storage);
- if(getsockname(sockfd, (struct sockaddr*) &ssloc, &len)) {
- error = SOCKERRNO;
- failf(data, "getsockname() failed with errno %d: %s",
- error, Curl_strerror(conn, error));
- return;
- }
-
- if(!getaddressinfo((struct sockaddr*)&ssrem,
- conn->primary_ip, &conn->primary_port)) {
- error = ERRNO;
- failf(data, "ssrem inet_ntop() failed with errno %d: %s",
- error, Curl_strerror(conn, error));
- return;
- }
- memcpy(conn->ip_addr_str, conn->primary_ip, MAX_IPADR_LEN);
-
- if(!getaddressinfo((struct sockaddr*)&ssloc,
- conn->local_ip, &conn->local_port)) {
- error = ERRNO;
- failf(data, "ssloc inet_ntop() failed with errno %d: %s",
- error, Curl_strerror(conn, error));
- return;
- }
-
- }
-
- /* persist connection info in session handle */
- Curl_persistconninfo(conn);
-}
-
-/*
- * Curl_is_connected() checks if the socket has connected.
- */
-
-CURLcode Curl_is_connected(struct connectdata *conn,
- int sockindex,
- bool *connected)
-{
- struct SessionHandle *data = conn->data;
- CURLcode code = CURLE_OK;
- long allow;
- int error = 0;
- struct timeval now;
- int result;
- int i;
-
- DEBUGASSERT(sockindex >= FIRSTSOCKET && sockindex <= SECONDARYSOCKET);
-
- *connected = FALSE; /* a very negative world view is best */
-
- if(conn->bits.tcpconnect[sockindex]) {
- /* we are connected already! */
- *connected = TRUE;
- return CURLE_OK;
- }
-
- now = Curl_tvnow();
-
- /* figure out how long time we have left to connect */
- allow = Curl_timeleft(data, &now, TRUE);
-
- if(allow < 0) {
- /* time-out, bail out, go home */
- failf(data, "Connection time-out");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- for(i=0; i<2; i++) {
- if(conn->tempsock[i] == CURL_SOCKET_BAD)
- continue;
-
-#ifdef mpeix
- /* Call this function once now, and ignore the results. We do this to
- "clear" the error state on the socket so that we can later read it
- reliably. This is reported necessary on the MPE/iX operating system. */
- (void)verifyconnect(conn->tempsock[i], NULL);
-#endif
-
- /* check socket for connect */
- result = Curl_socket_ready(CURL_SOCKET_BAD, conn->tempsock[i], 0);
-
- if(result == 0) { /* no connection yet */
- if(curlx_tvdiff(now, conn->connecttime) >= conn->timeoutms_per_addr) {
- infof(data, "After %ldms connect time, move on!\n",
- conn->timeoutms_per_addr);
- error = ETIMEDOUT;
- }
-
- /* should we try another protocol family? */
- if(i == 0 && conn->tempaddr[1] == NULL &&
- curlx_tvdiff(now, conn->connecttime) >= HAPPY_EYEBALLS_TIMEOUT) {
- trynextip(conn, sockindex, 1);
- }
- }
- else if(result == CURL_CSELECT_OUT) {
- if(verifyconnect(conn->tempsock[i], &error)) {
- /* we are connected with TCP, awesome! */
- int other = i ^ 1;
-
- /* use this socket from now on */
- conn->sock[sockindex] = conn->tempsock[i];
- conn->ip_addr = conn->tempaddr[i];
- conn->tempsock[i] = CURL_SOCKET_BAD;
-
- /* close the other socket, if open */
- if(conn->tempsock[other] != CURL_SOCKET_BAD) {
- Curl_closesocket(conn, conn->tempsock[other]);
- conn->tempsock[other] = CURL_SOCKET_BAD;
- }
-
- /* see if we need to do any proxy magic first once we connected */
- code = Curl_connected_proxy(conn, sockindex);
- if(code)
- return code;
-
- conn->bits.tcpconnect[sockindex] = TRUE;
-
- *connected = TRUE;
- if(sockindex == FIRSTSOCKET)
- Curl_pgrsTime(data, TIMER_CONNECT); /* connect done */
- Curl_updateconninfo(conn, conn->sock[sockindex]);
- Curl_verboseconnect(conn);
-
- return CURLE_OK;
- }
- else
- infof(data, "Connection failed\n");
- }
- else if(result & CURL_CSELECT_ERR)
- (void)verifyconnect(conn->tempsock[i], &error);
-
- /*
- * The connection failed here, we should attempt to connect to the "next
- * address" for the given host. But first remember the latest error.
- */
- if(error) {
- char ipaddress[MAX_IPADR_LEN];
- data->state.os_errno = error;
- SET_SOCKERRNO(error);
- if(conn->tempaddr[i]) {
- Curl_printable_address(conn->tempaddr[i], ipaddress, MAX_IPADR_LEN);
- infof(data, "connect to %s port %ld failed: %s\n",
- ipaddress, conn->port, Curl_strerror(conn, error));
-
- conn->timeoutms_per_addr = conn->tempaddr[i]->ai_next == NULL ?
- allow : allow / 2;
-
- code = trynextip(conn, sockindex, i);
- }
- }
- }
-
- if(code) {
- /* no more addresses to try */
-
- /* if the first address family runs out of addresses to try before
- the happy eyeball timeout, go ahead and try the next family now */
- if(conn->tempaddr[1] == NULL) {
- int rc;
- rc = trynextip(conn, sockindex, 1);
- if(rc == CURLE_OK)
- return CURLE_OK;
- }
-
- failf(data, "Failed to connect to %s port %ld: %s",
- conn->bits.proxy?conn->proxy.name:conn->host.name,
- conn->port, Curl_strerror(conn, error));
- }
-
- return code;
-}
-
-static void tcpnodelay(struct connectdata *conn,
- curl_socket_t sockfd)
-{
-#ifdef TCP_NODELAY
- struct SessionHandle *data= conn->data;
- curl_socklen_t onoff = (curl_socklen_t) data->set.tcp_nodelay;
- int level = IPPROTO_TCP;
-
-#if 0
- /* The use of getprotobyname() is disabled since it isn't thread-safe on
- numerous systems. On these getprotobyname_r() should be used instead, but
- that exists in at least one 4 arg version and one 5 arg version, and
- since the proto number rarely changes anyway we now just use the hard
- coded number. The "proper" fix would need a configure check for the
- correct function much in the same style the gethostbyname_r versions are
- detected. */
- struct protoent *pe = getprotobyname("tcp");
- if(pe)
- level = pe->p_proto;
-#endif
-
- if(setsockopt(sockfd, level, TCP_NODELAY, (void *)&onoff,
- sizeof(onoff)) < 0)
- infof(data, "Could not set TCP_NODELAY: %s\n",
- Curl_strerror(conn, SOCKERRNO));
- else
- infof(data,"TCP_NODELAY set\n");
-#else
- (void)conn;
- (void)sockfd;
-#endif
-}
-
-#ifdef SO_NOSIGPIPE
-/* The preferred method on Mac OS X (10.2 and later) to prevent SIGPIPEs when
- sending data to a dead peer (instead of relying on the 4th argument to send
- being MSG_NOSIGNAL). Possibly also existing and in use on other BSD
- systems? */
-static void nosigpipe(struct connectdata *conn,
- curl_socket_t sockfd)
-{
- struct SessionHandle *data= conn->data;
- int onoff = 1;
- if(setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&onoff,
- sizeof(onoff)) < 0)
- infof(data, "Could not set SO_NOSIGPIPE: %s\n",
- Curl_strerror(conn, SOCKERRNO));
-}
-#else
-#define nosigpipe(x,y) Curl_nop_stmt
-#endif
-
-#ifdef USE_WINSOCK
-/* When you run a program that uses the Windows Sockets API, you may
- experience slow performance when you copy data to a TCP server.
-
- http://support.microsoft.com/kb/823764
-
- Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
- Buffer Size
-
- The problem described in this knowledge-base is applied only to pre-Vista
- Windows. Following function trying to detect OS version and skips
- SO_SNDBUF adjustment for Windows Vista and above.
-*/
-#define DETECT_OS_NONE 0
-#define DETECT_OS_PREVISTA 1
-#define DETECT_OS_VISTA_OR_LATER 2
-
-void Curl_sndbufset(curl_socket_t sockfd)
-{
- int val = CURL_MAX_WRITE_SIZE + 32;
- int curval = 0;
- int curlen = sizeof(curval);
- DWORD majorVersion = 6;
-
- static int detectOsState = DETECT_OS_NONE;
-
- if(detectOsState == DETECT_OS_NONE) {
-#if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \
- (_WIN32_WINNT < _WIN32_WINNT_WIN2K)
- OSVERSIONINFO osver;
-
- memset(&osver, 0, sizeof(osver));
- osver.dwOSVersionInfoSize = sizeof(osver);
-
- detectOsState = DETECT_OS_PREVISTA;
- if(GetVersionEx(&osver)) {
- if(osver.dwMajorVersion >= majorVersion)
- detectOsState = DETECT_OS_VISTA_OR_LATER;
- }
-#else
- ULONGLONG majorVersionMask;
- OSVERSIONINFOEX osver;
-
- memset(&osver, 0, sizeof(osver));
- osver.dwOSVersionInfoSize = sizeof(osver);
- osver.dwMajorVersion = majorVersion;
- majorVersionMask = VerSetConditionMask(0, VER_MAJORVERSION,
- VER_GREATER_EQUAL);
-
- if(VerifyVersionInfo(&osver, VER_MAJORVERSION, majorVersionMask))
- detectOsState = DETECT_OS_VISTA_OR_LATER;
- else
- detectOsState = DETECT_OS_PREVISTA;
-#endif
- }
-
- if(detectOsState == DETECT_OS_VISTA_OR_LATER)
- return;
-
- if(getsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (char *)&curval, &curlen) == 0)
- if(curval > val)
- return;
-
- setsockopt(sockfd, SOL_SOCKET, SO_SNDBUF, (const char *)&val, sizeof(val));
-}
-#endif
-
-/*
- * singleipconnect()
- *
- * Note that even on connect fail it returns CURLE_OK, but with 'sock' set to
- * CURL_SOCKET_BAD. Other errors will however return proper errors.
- *
- * singleipconnect() connects to the given IP only, and it may return without
- * having connected.
- */
-static CURLcode
-singleipconnect(struct connectdata *conn,
- const Curl_addrinfo *ai,
- curl_socket_t *sockp)
-{
- struct Curl_sockaddr_ex addr;
- int rc;
- int error = 0;
- bool isconnected = FALSE;
- struct SessionHandle *data = conn->data;
- curl_socket_t sockfd;
- CURLcode res = CURLE_OK;
- char ipaddress[MAX_IPADR_LEN];
- long port;
-
- *sockp = CURL_SOCKET_BAD;
-
- res = Curl_socket(conn, ai, &addr, &sockfd);
- if(res)
- /* Failed to create the socket, but still return OK since we signal the
- lack of socket as well. This allows the parent function to keep looping
- over alternative addresses/socket families etc. */
- return CURLE_OK;
-
- /* store remote address and port used in this connection attempt */
- if(!getaddressinfo((struct sockaddr*)&addr.sa_addr,
- ipaddress, &port)) {
- /* malformed address or bug in inet_ntop, try next address */
- error = ERRNO;
- failf(data, "sa_addr inet_ntop() failed with errno %d: %s",
- error, Curl_strerror(conn, error));
- Curl_closesocket(conn, sockfd);
- return CURLE_OK;
- }
- infof(data, " Trying %s...\n", ipaddress);
-
- if(data->set.tcp_nodelay)
- tcpnodelay(conn, sockfd);
-
- nosigpipe(conn, sockfd);
-
- Curl_sndbufset(sockfd);
-
- if(data->set.tcp_keepalive)
- tcpkeepalive(data, sockfd);
-
- if(data->set.fsockopt) {
- /* activate callback for setting socket options */
- error = data->set.fsockopt(data->set.sockopt_client,
- sockfd,
- CURLSOCKTYPE_IPCXN);
-
- if(error == CURL_SOCKOPT_ALREADY_CONNECTED)
- isconnected = TRUE;
- else if(error) {
- Curl_closesocket(conn, sockfd); /* close the socket and bail out */
- return CURLE_ABORTED_BY_CALLBACK;
- }
- }
-
- /* possibly bind the local end to an IP, interface or port */
- res = bindlocal(conn, sockfd, addr.family);
- if(res) {
- Curl_closesocket(conn, sockfd); /* close socket and bail out */
- if(res == CURLE_UNSUPPORTED_PROTOCOL) {
- /* The address family is not supported on this interface.
- We can continue trying addresses */
- return CURLE_OK;
- }
- return res;
- }
-
- /* set socket non-blocking */
- curlx_nonblock(sockfd, TRUE);
-
- conn->connecttime = Curl_tvnow();
- if(conn->num_addr > 1)
- Curl_expire_latest(data, conn->timeoutms_per_addr);
-
- /* Connect TCP sockets, bind UDP */
- if(!isconnected && (conn->socktype == SOCK_STREAM)) {
- rc = connect(sockfd, &addr.sa_addr, addr.addrlen);
- if(-1 == rc)
- error = SOCKERRNO;
- }
- else {
- *sockp = sockfd;
- return CURLE_OK;
- }
-
-#ifdef ENABLE_IPV6
- conn->bits.ipv6 = (addr.family == AF_INET6)?TRUE:FALSE;
-#endif
-
- if(-1 == rc) {
- switch(error) {
- case EINPROGRESS:
- case EWOULDBLOCK:
-#if defined(EAGAIN)
-#if (EAGAIN) != (EWOULDBLOCK)
- /* On some platforms EAGAIN and EWOULDBLOCK are the
- * same value, and on others they are different, hence
- * the odd #if
- */
- case EAGAIN:
-#endif
-#endif
- res = CURLE_OK;
- break;
-
- default:
- /* unknown error, fallthrough and try another address! */
- infof(data, "Immediate connect fail for %s: %s\n",
- ipaddress, Curl_strerror(conn,error));
- data->state.os_errno = error;
-
- /* connect failed */
- Curl_closesocket(conn, sockfd);
- res = CURLE_COULDNT_CONNECT;
- }
- }
-
- if(!res)
- *sockp = sockfd;
-
- return res;
-}
-
-/*
- * TCP connect to the given host with timeout, proxy or remote doesn't matter.
- * There might be more than one IP address to try out. Fill in the passed
- * pointer with the connected socket.
- */
-
-CURLcode Curl_connecthost(struct connectdata *conn, /* context */
- const struct Curl_dns_entry *remotehost)
-{
- struct SessionHandle *data = conn->data;
- struct timeval before = Curl_tvnow();
- CURLcode res = CURLE_COULDNT_CONNECT;
-
- long timeout_ms = Curl_timeleft(data, &before, TRUE);
-
- if(timeout_ms < 0) {
- /* a precaution, no need to continue if time already is up */
- failf(data, "Connection time-out");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- conn->num_addr = Curl_num_addresses(remotehost->addr);
- conn->tempaddr[0] = remotehost->addr;
- conn->tempaddr[1] = NULL;
- conn->tempsock[0] = CURL_SOCKET_BAD;
- conn->tempsock[1] = CURL_SOCKET_BAD;
- Curl_expire(conn->data, HAPPY_EYEBALLS_TIMEOUT);
-
- /* Max time for the next connection attempt */
- conn->timeoutms_per_addr =
- conn->tempaddr[0]->ai_next == NULL ? timeout_ms : timeout_ms / 2;
-
- /* start connecting to first IP */
- while(conn->tempaddr[0]) {
- res = singleipconnect(conn, conn->tempaddr[0], &(conn->tempsock[0]));
- if(res == CURLE_OK)
- break;
- conn->tempaddr[0] = conn->tempaddr[0]->ai_next;
- }
-
- if(conn->tempsock[0] == CURL_SOCKET_BAD)
- return res;
-
- data->info.numconnects++; /* to track the number of connections made */
-
- return CURLE_OK;
-}
-
-struct connfind {
- struct connectdata *tofind;
- bool found;
-};
-
-static int conn_is_conn(struct connectdata *conn, void *param)
-{
- struct connfind *f = (struct connfind *)param;
- if(conn == f->tofind) {
- f->found = TRUE;
- return 1;
- }
- return 0;
-}
-
-/*
- * Used to extract socket and connectdata struct for the most recent
- * transfer on the given SessionHandle.
- *
- * The returned socket will be CURL_SOCKET_BAD in case of failure!
- */
-curl_socket_t Curl_getconnectinfo(struct SessionHandle *data,
- struct connectdata **connp)
-{
- curl_socket_t sockfd;
-
- DEBUGASSERT(data);
-
- /* this only works for an easy handle that has been used for
- curl_easy_perform()! */
- if(data->state.lastconnect && data->multi_easy) {
- struct connectdata *c = data->state.lastconnect;
- struct connfind find;
- find.tofind = data->state.lastconnect;
- find.found = FALSE;
-
- Curl_conncache_foreach(data->multi_easy->conn_cache, &find, conn_is_conn);
-
- if(!find.found) {
- data->state.lastconnect = NULL;
- return CURL_SOCKET_BAD;
- }
-
- if(connp)
- /* only store this if the caller cares for it */
- *connp = c;
- sockfd = c->sock[FIRSTSOCKET];
- /* we have a socket connected, let's determine if the server shut down */
- /* determine if ssl */
- if(c->ssl[FIRSTSOCKET].use) {
- /* use the SSL context */
- if(!Curl_ssl_check_cxn(c))
- return CURL_SOCKET_BAD; /* FIN received */
- }
-/* Minix 3.1 doesn't support any flags on recv; just assume socket is OK */
-#ifdef MSG_PEEK
- else {
- /* use the socket */
- char buf;
- if(recv((RECV_TYPE_ARG1)c->sock[FIRSTSOCKET], (RECV_TYPE_ARG2)&buf,
- (RECV_TYPE_ARG3)1, (RECV_TYPE_ARG4)MSG_PEEK) == 0) {
- return CURL_SOCKET_BAD; /* FIN received */
- }
- }
-#endif
- }
- else
- return CURL_SOCKET_BAD;
-
- return sockfd;
-}
-
-/*
- * Close a socket.
- *
- * 'conn' can be NULL, beware!
- */
-int Curl_closesocket(struct connectdata *conn,
- curl_socket_t sock)
-{
- if(conn && conn->fclosesocket) {
- if((sock == conn->sock[SECONDARYSOCKET]) &&
- conn->sock_accepted[SECONDARYSOCKET])
- /* if this socket matches the second socket, and that was created with
- accept, then we MUST NOT call the callback but clear the accepted
- status */
- conn->sock_accepted[SECONDARYSOCKET] = FALSE;
- else
- return conn->fclosesocket(conn->closesocket_client, sock);
- }
- sclose(sock);
-
- if(conn)
- /* tell the multi-socket code about this */
- Curl_multi_closed(conn, sock);
-
- return 0;
-}
-
-/*
- * Create a socket based on info from 'conn' and 'ai'.
- *
- * 'addr' should be a pointer to the correct struct to get data back, or NULL.
- * 'sockfd' must be a pointer to a socket descriptor.
- *
- * If the open socket callback is set, used that!
- *
- */
-CURLcode Curl_socket(struct connectdata *conn,
- const Curl_addrinfo *ai,
- struct Curl_sockaddr_ex *addr,
- curl_socket_t *sockfd)
-{
- struct SessionHandle *data = conn->data;
- struct Curl_sockaddr_ex dummy;
-
- if(!addr)
- /* if the caller doesn't want info back, use a local temp copy */
- addr = &dummy;
-
- /*
- * The Curl_sockaddr_ex structure is basically libcurl's external API
- * curl_sockaddr structure with enough space available to directly hold
- * any protocol-specific address structures. The variable declared here
- * will be used to pass / receive data to/from the fopensocket callback
- * if this has been set, before that, it is initialized from parameters.
- */
-
- addr->family = ai->ai_family;
- addr->socktype = conn->socktype;
- addr->protocol = conn->socktype==SOCK_DGRAM?IPPROTO_UDP:ai->ai_protocol;
- addr->addrlen = ai->ai_addrlen;
-
- if(addr->addrlen > sizeof(struct Curl_sockaddr_storage))
- addr->addrlen = sizeof(struct Curl_sockaddr_storage);
- memcpy(&addr->sa_addr, ai->ai_addr, addr->addrlen);
-
- if(data->set.fopensocket)
- /*
- * If the opensocket callback is set, all the destination address
- * information is passed to the callback. Depending on this information the
- * callback may opt to abort the connection, this is indicated returning
- * CURL_SOCKET_BAD; otherwise it will return a not-connected socket. When
- * the callback returns a valid socket the destination address information
- * might have been changed and this 'new' address will actually be used
- * here to connect.
- */
- *sockfd = data->set.fopensocket(data->set.opensocket_client,
- CURLSOCKTYPE_IPCXN,
- (struct curl_sockaddr *)addr);
- else
- /* opensocket callback not set, so simply create the socket now */
- *sockfd = socket(addr->family, addr->socktype, addr->protocol);
-
- if(*sockfd == CURL_SOCKET_BAD)
- /* no socket, no connection */
- return CURLE_COULDNT_CONNECT;
-
-#if defined(ENABLE_IPV6) && defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID)
- if(conn->scope && (addr->family == AF_INET6)) {
- struct sockaddr_in6 * const sa6 = (void *)&addr->sa_addr;
- sa6->sin6_scope_id = conn->scope;
- }
-#endif
-
- return CURLE_OK;
-
-}
-
-#ifdef CURLDEBUG
-/*
- * Curl_conncontrol() is used to set the conn->bits.close bit on or off. It
- * MUST be called with the connclose() or connclose() macros with a stated
- * reason. The reason is only shown in debug builds but helps to figure out
- * decision paths when connections are or aren't re-used as expected.
- */
-void Curl_conncontrol(struct connectdata *conn, bool closeit,
- const char *reason)
-{
- infof(conn->data, "Marked for [%s]: %s\n", closeit?"closure":"keep alive",
- reason);
- conn->bits.close = closeit; /* the only place in the source code that should
- assign this bit */
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/connect.h b/external/libcurl_android/jni/libcurl/lib/connect.h
deleted file mode 100755
index 7bc391be..00000000
--- a/external/libcurl_android/jni/libcurl/lib/connect.h
+++ /dev/null
@@ -1,122 +0,0 @@
-#ifndef HEADER_CURL_CONNECT_H
-#define HEADER_CURL_CONNECT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#include "nonblock.h" /* for curlx_nonblock(), formerly Curl_nonblock() */
-#include "sockaddr.h"
-
-CURLcode Curl_is_connected(struct connectdata *conn,
- int sockindex,
- bool *connected);
-
-CURLcode Curl_connecthost(struct connectdata *conn,
- const struct Curl_dns_entry *host);
-
-/* generic function that returns how much time there's left to run, according
- to the timeouts set */
-long Curl_timeleft(struct SessionHandle *data,
- struct timeval *nowp,
- bool duringconnect);
-
-#define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */
-#define HAPPY_EYEBALLS_TIMEOUT 200 /* milliseconds to wait between
- ipv4/ipv6 connection attempts */
-
-/*
- * Used to extract socket and connectdata struct for the most recent
- * transfer on the given SessionHandle.
- *
- * The returned socket will be CURL_SOCKET_BAD in case of failure!
- */
-curl_socket_t Curl_getconnectinfo(struct SessionHandle *data,
- struct connectdata **connp);
-
-#ifdef USE_WINSOCK
-/* When you run a program that uses the Windows Sockets API, you may
- experience slow performance when you copy data to a TCP server.
-
- http://support.microsoft.com/kb/823764
-
- Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
- Buffer Size
-
-*/
-void Curl_sndbufset(curl_socket_t sockfd);
-#else
-#define Curl_sndbufset(y) Curl_nop_stmt
-#endif
-
-void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd);
-void Curl_persistconninfo(struct connectdata *conn);
-int Curl_closesocket(struct connectdata *conn, curl_socket_t sock);
-
-/*
- * The Curl_sockaddr_ex structure is basically libcurl's external API
- * curl_sockaddr structure with enough space available to directly hold any
- * protocol-specific address structures. The variable declared here will be
- * used to pass / receive data to/from the fopensocket callback if this has
- * been set, before that, it is initialized from parameters.
- */
-struct Curl_sockaddr_ex {
- int family;
- int socktype;
- int protocol;
- unsigned int addrlen;
- union {
- struct sockaddr addr;
- struct Curl_sockaddr_storage buff;
- } _sa_ex_u;
-};
-#define sa_addr _sa_ex_u.addr
-
-/*
- * Create a socket based on info from 'conn' and 'ai'.
- *
- * Fill in 'addr' and 'sockfd' accordingly if OK is returned. If the open
- * socket callback is set, used that!
- *
- */
-CURLcode Curl_socket(struct connectdata *conn,
- const Curl_addrinfo *ai,
- struct Curl_sockaddr_ex *addr,
- curl_socket_t *sockfd);
-
-#ifdef CURLDEBUG
-/*
- * Curl_connclose() sets the bit.close bit to TRUE with an explanation.
- * Nothing else.
- */
-void Curl_conncontrol(struct connectdata *conn,
- bool closeit,
- const char *reason);
-#define connclose(x,y) Curl_conncontrol(x,TRUE, y)
-#define connkeep(x,y) Curl_conncontrol(x, FALSE, y)
-#else /* if !CURLDEBUG */
-
-#define connclose(x,y) (x)->bits.close = TRUE
-#define connkeep(x,y) (x)->bits.close = FALSE
-
-#endif
-
-#endif /* HEADER_CURL_CONNECT_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/content_encoding.c b/external/libcurl_android/jni/libcurl/lib/content_encoding.c
deleted file mode 100755
index c68e6e5f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/content_encoding.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_LIBZ
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "sendf.h"
-#include "content_encoding.h"
-#include "curl_memory.h"
-
-#include "memdebug.h"
-
-/* Comment this out if zlib is always going to be at least ver. 1.2.0.4
- (doing so will reduce code size slightly). */
-#define OLD_ZLIB_SUPPORT 1
-
-#define DSIZ CURL_MAX_WRITE_SIZE /* buffer size for decompressed data */
-
-#define GZIP_MAGIC_0 0x1f
-#define GZIP_MAGIC_1 0x8b
-
-/* gzip flag byte */
-#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
-#define HEAD_CRC 0x02 /* bit 1 set: header CRC present */
-#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
-#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
-#define COMMENT 0x10 /* bit 4 set: file comment present */
-#define RESERVED 0xE0 /* bits 5..7: reserved */
-
-static voidpf
-zalloc_cb(voidpf opaque, unsigned int items, unsigned int size)
-{
- (void) opaque;
- /* not a typo, keep it calloc() */
- return (voidpf) calloc(items, size);
-}
-
-static void
-zfree_cb(voidpf opaque, voidpf ptr)
-{
- (void) opaque;
- free(ptr);
-}
-
-static CURLcode
-process_zlib_error(struct connectdata *conn, z_stream *z)
-{
- struct SessionHandle *data = conn->data;
- if(z->msg)
- failf (data, "Error while processing content unencoding: %s",
- z->msg);
- else
- failf (data, "Error while processing content unencoding: "
- "Unknown failure within decompression software.");
-
- return CURLE_BAD_CONTENT_ENCODING;
-}
-
-static CURLcode
-exit_zlib(z_stream *z, zlibInitState *zlib_init, CURLcode result)
-{
- inflateEnd(z);
- *zlib_init = ZLIB_UNINIT;
- return result;
-}
-
-static CURLcode
-inflate_stream(struct connectdata *conn,
- struct SingleRequest *k)
-{
- int allow_restart = 1;
- z_stream *z = &k->z; /* zlib state structure */
- uInt nread = z->avail_in;
- Bytef *orig_in = z->next_in;
- int status; /* zlib status */
- CURLcode result = CURLE_OK; /* Curl_client_write status */
- char *decomp; /* Put the decompressed data here. */
-
- /* Dynamically allocate a buffer for decompression because it's uncommonly
- large to hold on the stack */
- decomp = malloc(DSIZ);
- if(decomp == NULL) {
- return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY);
- }
-
- /* because the buffer size is fixed, iteratively decompress and transfer to
- the client via client_write. */
- for(;;) {
- /* (re)set buffer for decompressed output for every iteration */
- z->next_out = (Bytef *)decomp;
- z->avail_out = DSIZ;
-
- status = inflate(z, Z_SYNC_FLUSH);
- if(status == Z_OK || status == Z_STREAM_END) {
- allow_restart = 0;
- if((DSIZ - z->avail_out) && (!k->ignorebody)) {
- result = Curl_client_write(conn, CLIENTWRITE_BODY, decomp,
- DSIZ - z->avail_out);
- /* if !CURLE_OK, clean up, return */
- if(result) {
- free(decomp);
- return exit_zlib(z, &k->zlib_init, result);
- }
- }
-
- /* Done? clean up, return */
- if(status == Z_STREAM_END) {
- free(decomp);
- if(inflateEnd(z) == Z_OK)
- return exit_zlib(z, &k->zlib_init, result);
- else
- return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
- }
-
- /* Done with these bytes, exit */
-
- /* status is always Z_OK at this point! */
- if(z->avail_in == 0) {
- free(decomp);
- return result;
- }
- }
- else if(allow_restart && status == Z_DATA_ERROR) {
- /* some servers seem to not generate zlib headers, so this is an attempt
- to fix and continue anyway */
-
- (void) inflateEnd(z); /* don't care about the return code */
- if(inflateInit2(z, -MAX_WBITS) != Z_OK) {
- free(decomp);
- return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
- }
- z->next_in = orig_in;
- z->avail_in = nread;
- allow_restart = 0;
- continue;
- }
- else { /* Error; exit loop, handle below */
- free(decomp);
- return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
- }
- }
- /* Will never get here */
-}
-
-CURLcode
-Curl_unencode_deflate_write(struct connectdata *conn,
- struct SingleRequest *k,
- ssize_t nread)
-{
- z_stream *z = &k->z; /* zlib state structure */
-
- /* Initialize zlib? */
- if(k->zlib_init == ZLIB_UNINIT) {
- memset(z, 0, sizeof(z_stream));
- z->zalloc = (alloc_func)zalloc_cb;
- z->zfree = (free_func)zfree_cb;
-
- if(inflateInit(z) != Z_OK)
- return process_zlib_error(conn, z);
- k->zlib_init = ZLIB_INIT;
- }
-
- /* Set the compressed input when this function is called */
- z->next_in = (Bytef *)k->str;
- z->avail_in = (uInt)nread;
-
- /* Now uncompress the data */
- return inflate_stream(conn, k);
-}
-
-#ifdef OLD_ZLIB_SUPPORT
-/* Skip over the gzip header */
-static enum {
- GZIP_OK,
- GZIP_BAD,
- GZIP_UNDERFLOW
-} check_gzip_header(unsigned char const *data, ssize_t len, ssize_t *headerlen)
-{
- int method, flags;
- const ssize_t totallen = len;
-
- /* The shortest header is 10 bytes */
- if(len < 10)
- return GZIP_UNDERFLOW;
-
- if((data[0] != GZIP_MAGIC_0) || (data[1] != GZIP_MAGIC_1))
- return GZIP_BAD;
-
- method = data[2];
- flags = data[3];
-
- if(method != Z_DEFLATED || (flags & RESERVED) != 0) {
- /* Can't handle this compression method or unknown flag */
- return GZIP_BAD;
- }
-
- /* Skip over time, xflags, OS code and all previous bytes */
- len -= 10;
- data += 10;
-
- if(flags & EXTRA_FIELD) {
- ssize_t extra_len;
-
- if(len < 2)
- return GZIP_UNDERFLOW;
-
- extra_len = (data[1] << 8) | data[0];
-
- if(len < (extra_len+2))
- return GZIP_UNDERFLOW;
-
- len -= (extra_len + 2);
- data += (extra_len + 2);
- }
-
- if(flags & ORIG_NAME) {
- /* Skip over NUL-terminated file name */
- while(len && *data) {
- --len;
- ++data;
- }
- if(!len || *data)
- return GZIP_UNDERFLOW;
-
- /* Skip over the NUL */
- --len;
- ++data;
- }
-
- if(flags & COMMENT) {
- /* Skip over NUL-terminated comment */
- while(len && *data) {
- --len;
- ++data;
- }
- if(!len || *data)
- return GZIP_UNDERFLOW;
-
- /* Skip over the NUL */
- --len;
- }
-
- if(flags & HEAD_CRC) {
- if(len < 2)
- return GZIP_UNDERFLOW;
-
- len -= 2;
- }
-
- *headerlen = totallen - len;
- return GZIP_OK;
-}
-#endif
-
-CURLcode
-Curl_unencode_gzip_write(struct connectdata *conn,
- struct SingleRequest *k,
- ssize_t nread)
-{
- z_stream *z = &k->z; /* zlib state structure */
-
- /* Initialize zlib? */
- if(k->zlib_init == ZLIB_UNINIT) {
- memset(z, 0, sizeof(z_stream));
- z->zalloc = (alloc_func)zalloc_cb;
- z->zfree = (free_func)zfree_cb;
-
- if(strcmp(zlibVersion(), "1.2.0.4") >= 0) {
- /* zlib ver. >= 1.2.0.4 supports transparent gzip decompressing */
- if(inflateInit2(z, MAX_WBITS+32) != Z_OK) {
- return process_zlib_error(conn, z);
- }
- k->zlib_init = ZLIB_INIT_GZIP; /* Transparent gzip decompress state */
- }
- else {
- /* we must parse the gzip header ourselves */
- if(inflateInit2(z, -MAX_WBITS) != Z_OK) {
- return process_zlib_error(conn, z);
- }
- k->zlib_init = ZLIB_INIT; /* Initial call state */
- }
- }
-
- if(k->zlib_init == ZLIB_INIT_GZIP) {
- /* Let zlib handle the gzip decompression entirely */
- z->next_in = (Bytef *)k->str;
- z->avail_in = (uInt)nread;
- /* Now uncompress the data */
- return inflate_stream(conn, k);
- }
-
-#ifndef OLD_ZLIB_SUPPORT
- /* Support for old zlib versions is compiled away and we are running with
- an old version, so return an error. */
- return exit_zlib(z, &k->zlib_init, CURLE_FUNCTION_NOT_FOUND);
-
-#else
- /* This next mess is to get around the potential case where there isn't
- * enough data passed in to skip over the gzip header. If that happens, we
- * malloc a block and copy what we have then wait for the next call. If
- * there still isn't enough (this is definitely a worst-case scenario), we
- * make the block bigger, copy the next part in and keep waiting.
- *
- * This is only required with zlib versions < 1.2.0.4 as newer versions
- * can handle the gzip header themselves.
- */
-
- switch (k->zlib_init) {
- /* Skip over gzip header? */
- case ZLIB_INIT:
- {
- /* Initial call state */
- ssize_t hlen;
-
- switch (check_gzip_header((unsigned char *)k->str, nread, &hlen)) {
- case GZIP_OK:
- z->next_in = (Bytef *)k->str + hlen;
- z->avail_in = (uInt)(nread - hlen);
- k->zlib_init = ZLIB_GZIP_INFLATING; /* Inflating stream state */
- break;
-
- case GZIP_UNDERFLOW:
- /* We need more data so we can find the end of the gzip header. It's
- * possible that the memory block we malloc here will never be freed if
- * the transfer abruptly aborts after this point. Since it's unlikely
- * that circumstances will be right for this code path to be followed in
- * the first place, and it's even more unlikely for a transfer to fail
- * immediately afterwards, it should seldom be a problem.
- */
- z->avail_in = (uInt)nread;
- z->next_in = malloc(z->avail_in);
- if(z->next_in == NULL) {
- return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY);
- }
- memcpy(z->next_in, k->str, z->avail_in);
- k->zlib_init = ZLIB_GZIP_HEADER; /* Need more gzip header data state */
- /* We don't have any data to inflate yet */
- return CURLE_OK;
-
- case GZIP_BAD:
- default:
- return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
- }
-
- }
- break;
-
- case ZLIB_GZIP_HEADER:
- {
- /* Need more gzip header data state */
- ssize_t hlen;
- unsigned char *oldblock = z->next_in;
-
- z->avail_in += (uInt)nread;
- z->next_in = realloc(z->next_in, z->avail_in);
- if(z->next_in == NULL) {
- free(oldblock);
- return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY);
- }
- /* Append the new block of data to the previous one */
- memcpy(z->next_in + z->avail_in - nread, k->str, nread);
-
- switch (check_gzip_header(z->next_in, z->avail_in, &hlen)) {
- case GZIP_OK:
- /* This is the zlib stream data */
- free(z->next_in);
- /* Don't point into the malloced block since we just freed it */
- z->next_in = (Bytef *)k->str + hlen + nread - z->avail_in;
- z->avail_in = (uInt)(z->avail_in - hlen);
- k->zlib_init = ZLIB_GZIP_INFLATING; /* Inflating stream state */
- break;
-
- case GZIP_UNDERFLOW:
- /* We still don't have any data to inflate! */
- return CURLE_OK;
-
- case GZIP_BAD:
- default:
- free(z->next_in);
- return exit_zlib(z, &k->zlib_init, process_zlib_error(conn, z));
- }
-
- }
- break;
-
- case ZLIB_GZIP_INFLATING:
- default:
- /* Inflating stream state */
- z->next_in = (Bytef *)k->str;
- z->avail_in = (uInt)nread;
- break;
- }
-
- if(z->avail_in == 0) {
- /* We don't have any data to inflate; wait until next time */
- return CURLE_OK;
- }
-
- /* We've parsed the header, now uncompress the data */
- return inflate_stream(conn, k);
-#endif
-}
-
-void Curl_unencode_cleanup(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- struct SingleRequest *k = &data->req;
- z_stream *z = &k->z;
- if(k->zlib_init != ZLIB_UNINIT)
- (void) exit_zlib(z, &k->zlib_init, CURLE_OK);
-}
-
-#endif /* HAVE_LIBZ */
diff --git a/external/libcurl_android/jni/libcurl/lib/content_encoding.h b/external/libcurl_android/jni/libcurl/lib/content_encoding.h
deleted file mode 100755
index 501f6c8c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/content_encoding.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef HEADER_CURL_CONTENT_ENCODING_H
-#define HEADER_CURL_CONTENT_ENCODING_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-/*
- * Comma-separated list all supported Content-Encodings ('identity' is implied)
- */
-#ifdef HAVE_LIBZ
-#define ALL_CONTENT_ENCODINGS "deflate, gzip"
-/* force a cleanup */
-void Curl_unencode_cleanup(struct connectdata *conn);
-#else
-#define ALL_CONTENT_ENCODINGS "identity"
-#define Curl_unencode_cleanup(x) Curl_nop_stmt
-#endif
-
-CURLcode Curl_unencode_deflate_write(struct connectdata *conn,
- struct SingleRequest *req,
- ssize_t nread);
-
-CURLcode
-Curl_unencode_gzip_write(struct connectdata *conn,
- struct SingleRequest *k,
- ssize_t nread);
-
-
-#endif /* HEADER_CURL_CONTENT_ENCODING_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/cookie.c b/external/libcurl_android/jni/libcurl/lib/cookie.c
deleted file mode 100755
index 375485f5..00000000
--- a/external/libcurl_android/jni/libcurl/lib/cookie.c
+++ /dev/null
@@ -1,1365 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/***
-
-
-RECEIVING COOKIE INFORMATION
-============================
-
-struct CookieInfo *cookie_init(char *file);
-
- Inits a cookie struct to store data in a local file. This is always
- called before any cookies are set.
-
-int cookies_set(struct CookieInfo *cookie, char *cookie_line);
-
- The 'cookie_line' parameter is a full "Set-cookie:" line as
- received from a server.
-
- The function need to replace previously stored lines that this new
- line superceeds.
-
- It may remove lines that are expired.
-
- It should return an indication of success/error.
-
-
-SENDING COOKIE INFORMATION
-==========================
-
-struct Cookies *cookie_getlist(struct CookieInfo *cookie,
- char *host, char *path, bool secure);
-
- For a given host and path, return a linked list of cookies that
- the client should send to the server if used now. The secure
- boolean informs the cookie if a secure connection is achieved or
- not.
-
- It shall only return cookies that haven't expired.
-
-
-Example set of cookies:
-
- Set-cookie: PRODUCTINFO=webxpress; domain=.fidelity.com; path=/; secure
- Set-cookie: PERSONALIZE=none;expires=Monday, 13-Jun-1988 03:04:55 GMT;
- domain=.fidelity.com; path=/ftgw; secure
- Set-cookie: FidHist=none;expires=Monday, 13-Jun-1988 03:04:55 GMT;
- domain=.fidelity.com; path=/; secure
- Set-cookie: FidOrder=none;expires=Monday, 13-Jun-1988 03:04:55 GMT;
- domain=.fidelity.com; path=/; secure
- Set-cookie: DisPend=none;expires=Monday, 13-Jun-1988 03:04:55 GMT;
- domain=.fidelity.com; path=/; secure
- Set-cookie: FidDis=none;expires=Monday, 13-Jun-1988 03:04:55 GMT;
- domain=.fidelity.com; path=/; secure
- Set-cookie:
- Session_Key@6791a9e0-901a-11d0-a1c8-9b012c88aa77=none;expires=Monday,
- 13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure
-****/
-
-
-#include "curl_setup.h"
-
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
-
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
-
-#include "urldata.h"
-#include "cookie.h"
-#include "strequal.h"
-#include "strtok.h"
-#include "sendf.h"
-#include "slist.h"
-#include "curl_memory.h"
-#include "share.h"
-#include "strtoofft.h"
-#include "rawstr.h"
-#include "curl_memrchr.h"
-#include "inet_pton.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static void freecookie(struct Cookie *co)
-{
- if(co->expirestr)
- free(co->expirestr);
- if(co->domain)
- free(co->domain);
- if(co->path)
- free(co->path);
- if(co->spath)
- free(co->spath);
- if(co->name)
- free(co->name);
- if(co->value)
- free(co->value);
- if(co->maxage)
- free(co->maxage);
- if(co->version)
- free(co->version);
-
- free(co);
-}
-
-static bool tailmatch(const char *cooke_domain, const char *hostname)
-{
- size_t cookie_domain_len = strlen(cooke_domain);
- size_t hostname_len = strlen(hostname);
-
- if(hostname_len < cookie_domain_len)
- return FALSE;
-
- if(!Curl_raw_equal(cooke_domain, hostname+hostname_len-cookie_domain_len))
- return FALSE;
-
- /* A lead char of cookie_domain is not '.'.
- RFC6265 4.1.2.3. The Domain Attribute says:
- For example, if the value of the Domain attribute is
- "example.com", the user agent will include the cookie in the Cookie
- header when making HTTP requests to example.com, www.example.com, and
- www.corp.example.com.
- */
- if(hostname_len == cookie_domain_len)
- return TRUE;
- if('.' == *(hostname + hostname_len - cookie_domain_len - 1))
- return TRUE;
- return FALSE;
-}
-
-/*
- * matching cookie path and url path
- * RFC6265 5.1.4 Paths and Path-Match
- */
-static bool pathmatch(const char* cookie_path, const char* request_uri)
-{
- size_t cookie_path_len;
- size_t uri_path_len;
- char* uri_path = NULL;
- char* pos;
- bool ret = FALSE;
-
- /* cookie_path must not have last '/' separator. ex: /sample */
- cookie_path_len = strlen(cookie_path);
- if(1 == cookie_path_len) {
- /* cookie_path must be '/' */
- return TRUE;
- }
-
- uri_path = strdup(request_uri);
- if(!uri_path)
- return FALSE;
- pos = strchr(uri_path, '?');
- if(pos)
- *pos = 0x0;
-
- /* #-fragments are already cut off! */
- if(0 == strlen(uri_path) || uri_path[0] != '/') {
- free(uri_path);
- uri_path = strdup("/");
- if(!uri_path)
- return FALSE;
- }
-
- /* here, RFC6265 5.1.4 says
- 4. Output the characters of the uri-path from the first character up
- to, but not including, the right-most %x2F ("/").
- but URL path /hoge?fuga=xxx means /hoge/index.cgi?fuga=xxx in some site
- without redirect.
- Ignore this algorithm because /hoge is uri path for this case
- (uri path is not /).
- */
-
- uri_path_len = strlen(uri_path);
-
- if(uri_path_len < cookie_path_len) {
- ret = FALSE;
- goto pathmatched;
- }
-
- /* not using checkprefix() because matching should be case-sensitive */
- if(strncmp(cookie_path, uri_path, cookie_path_len)) {
- ret = FALSE;
- goto pathmatched;
- }
-
- /* The cookie-path and the uri-path are identical. */
- if(cookie_path_len == uri_path_len) {
- ret = TRUE;
- goto pathmatched;
- }
-
- /* here, cookie_path_len < url_path_len */
- if(uri_path[cookie_path_len] == '/') {
- ret = TRUE;
- goto pathmatched;
- }
-
- ret = FALSE;
-
-pathmatched:
- free(uri_path);
- return ret;
-}
-
-/*
- * cookie path sanitize
- */
-static char *sanitize_cookie_path(const char *cookie_path)
-{
- size_t len;
- char *new_path = strdup(cookie_path);
- if(!new_path)
- return NULL;
-
- /* some stupid site sends path attribute with '"'. */
- if(new_path[0] == '\"') {
- memmove((void *)new_path, (const void *)(new_path + 1), strlen(new_path));
- }
- if(new_path[strlen(new_path) - 1] == '\"') {
- new_path[strlen(new_path) - 1] = 0x0;
- }
-
- /* RFC6265 5.2.4 The Path Attribute */
- if(new_path[0] != '/') {
- /* Let cookie-path be the default-path. */
- free(new_path);
- new_path = strdup("/");
- return new_path;
- }
-
- /* convert /hoge/ to /hoge */
- len = strlen(new_path);
- if(1 < len && new_path[len - 1] == '/') {
- new_path[len - 1] = 0x0;
- }
-
- return new_path;
-}
-
-/*
- * Load cookies from all given cookie files (CURLOPT_COOKIEFILE).
- */
-void Curl_cookie_loadfiles(struct SessionHandle *data)
-{
- struct curl_slist *list = data->change.cookielist;
- if(list) {
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- while(list) {
- data->cookies = Curl_cookie_init(data,
- list->data,
- data->cookies,
- data->set.cookiesession);
- list = list->next;
- }
- curl_slist_free_all(data->change.cookielist); /* clean up list */
- data->change.cookielist = NULL; /* don't do this again! */
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
-}
-
-/*
- * strstore() makes a strdup() on the 'newstr' and if '*str' is non-NULL
- * that will be freed before the allocated string is stored there.
- *
- * It is meant to easily replace strdup()
- */
-static void strstore(char **str, const char *newstr)
-{
- if(*str)
- free(*str);
- *str = strdup(newstr);
-}
-
-/*
- * remove_expired() removes expired cookies.
- */
-static void remove_expired(struct CookieInfo *cookies)
-{
- struct Cookie *co, *nx, *pv;
- curl_off_t now = (curl_off_t)time(NULL);
-
- co = cookies->cookies;
- pv = NULL;
- while(co) {
- nx = co->next;
- if((co->expirestr || co->maxage) && co->expires < now) {
- if(co == cookies->cookies) {
- cookies->cookies = co->next;
- }
- else {
- pv->next = co->next;
- }
- cookies->numcookies--;
- freecookie(co);
- }
- else {
- pv = co;
- }
- co = nx;
- }
-}
-
-/*
- * Return true if the given string is an IP(v4|v6) address.
- */
-static bool isip(const char *domain)
-{
- struct in_addr addr;
-#ifdef ENABLE_IPV6
- struct in6_addr addr6;
-#endif
-
- if(Curl_inet_pton(AF_INET, domain, &addr)
-#ifdef ENABLE_IPV6
- || Curl_inet_pton(AF_INET6, domain, &addr6)
-#endif
- ) {
- /* domain name given as IP address */
- return TRUE;
- }
-
- return FALSE;
-}
-
-/****************************************************************************
- *
- * Curl_cookie_add()
- *
- * Add a single cookie line to the cookie keeping object.
- *
- * Be aware that sometimes we get an IP-only host name, and that might also be
- * a numerical IPv6 address.
- *
- ***************************************************************************/
-
-struct Cookie *
-Curl_cookie_add(struct SessionHandle *data,
- /* The 'data' pointer here may be NULL at times, and thus
- must only be used very carefully for things that can deal
- with data being NULL. Such as infof() and similar */
-
- struct CookieInfo *c,
- bool httpheader, /* TRUE if HTTP header-style line */
- char *lineptr, /* first character of the line */
- const char *domain, /* default domain */
- const char *path) /* full path used when this cookie is set,
- used to get default path for the cookie
- unless set */
-{
- struct Cookie *clist;
- char name[MAX_NAME];
- struct Cookie *co;
- struct Cookie *lastc=NULL;
- time_t now = time(NULL);
- bool replace_old = FALSE;
- bool badcookie = FALSE; /* cookies are good by default. mmmmm yummy */
-
-#ifdef CURL_DISABLE_VERBOSE_STRINGS
- (void)data;
-#endif
-
- /* First, alloc and init a new struct for it */
- co = calloc(1, sizeof(struct Cookie));
- if(!co)
- return NULL; /* bail out if we're this low on memory */
-
- if(httpheader) {
- /* This line was read off a HTTP-header */
- const char *ptr;
- const char *semiptr;
- char *what;
-
- what = malloc(MAX_COOKIE_LINE);
- if(!what) {
- free(co);
- return NULL;
- }
-
- semiptr=strchr(lineptr, ';'); /* first, find a semicolon */
-
- while(*lineptr && ISBLANK(*lineptr))
- lineptr++;
-
- ptr = lineptr;
- do {
- /* we have a <what>=<this> pair or a stand-alone word here */
- name[0]=what[0]=0; /* init the buffers */
- if(1 <= sscanf(ptr, "%" MAX_NAME_TXT "[^;\r\n =]=%"
- MAX_COOKIE_LINE_TXT "[^;\r\n]",
- name, what)) {
- /* Use strstore() below to properly deal with received cookie
- headers that have the same string property set more than once,
- and then we use the last one. */
- const char *whatptr;
- bool done = FALSE;
- bool sep;
- size_t len=strlen(what);
- const char *endofn = &ptr[ strlen(name) ];
-
- /* skip trailing spaces in name */
- while(*endofn && ISBLANK(*endofn))
- endofn++;
-
- /* name ends with a '=' ? */
- sep = (*endofn == '=')?TRUE:FALSE;
-
- /* Strip off trailing whitespace from the 'what' */
- while(len && ISBLANK(what[len-1])) {
- what[len-1]=0;
- len--;
- }
-
- /* Skip leading whitespace from the 'what' */
- whatptr=what;
- while(*whatptr && ISBLANK(*whatptr))
- whatptr++;
-
- if(!len) {
- /* this was a "<name>=" with no content, and we must allow
- 'secure' and 'httponly' specified this weirdly */
- done = TRUE;
- if(Curl_raw_equal("secure", name))
- co->secure = TRUE;
- else if(Curl_raw_equal("httponly", name))
- co->httponly = TRUE;
- else if(sep)
- /* there was a '=' so we're not done parsing this field */
- done = FALSE;
- }
- if(done)
- ;
- else if(Curl_raw_equal("path", name)) {
- strstore(&co->path, whatptr);
- if(!co->path) {
- badcookie = TRUE; /* out of memory bad */
- break;
- }
- co->spath = sanitize_cookie_path(co->path);
- if(!co->spath) {
- badcookie = TRUE; /* out of memory bad */
- break;
- }
- }
- else if(Curl_raw_equal("domain", name)) {
- bool is_ip;
- const char *dotp;
-
- /* Now, we make sure that our host is within the given domain,
- or the given domain is not valid and thus cannot be set. */
-
- if('.' == whatptr[0])
- whatptr++; /* ignore preceding dot */
-
- is_ip = isip(domain ? domain : whatptr);
-
- /* check for more dots */
- dotp = strchr(whatptr, '.');
- if(!dotp)
- domain=":";
-
- if(!domain
- || (is_ip && !strcmp(whatptr, domain))
- || (!is_ip && tailmatch(whatptr, domain))) {
- strstore(&co->domain, whatptr);
- if(!co->domain) {
- badcookie = TRUE;
- break;
- }
- if(!is_ip)
- co->tailmatch=TRUE; /* we always do that if the domain name was
- given */
- }
- else {
- /* we did not get a tailmatch and then the attempted set domain
- is not a domain to which the current host belongs. Mark as
- bad. */
- badcookie=TRUE;
- infof(data, "skipped cookie with bad tailmatch domain: %s\n",
- whatptr);
- }
- }
- else if(Curl_raw_equal("version", name)) {
- strstore(&co->version, whatptr);
- if(!co->version) {
- badcookie = TRUE;
- break;
- }
- }
- else if(Curl_raw_equal("max-age", name)) {
- /* Defined in RFC2109:
-
- Optional. The Max-Age attribute defines the lifetime of the
- cookie, in seconds. The delta-seconds value is a decimal non-
- negative integer. After delta-seconds seconds elapse, the
- client should discard the cookie. A value of zero means the
- cookie should be discarded immediately.
-
- */
- strstore(&co->maxage, whatptr);
- if(!co->maxage) {
- badcookie = TRUE;
- break;
- }
- }
- else if(Curl_raw_equal("expires", name)) {
- strstore(&co->expirestr, whatptr);
- if(!co->expirestr) {
- badcookie = TRUE;
- break;
- }
- }
- else if(!co->name) {
- co->name = strdup(name);
- co->value = strdup(whatptr);
- if(!co->name || !co->value) {
- badcookie = TRUE;
- break;
- }
- }
- /*
- else this is the second (or more) name we don't know
- about! */
- }
- else {
- /* this is an "illegal" <what>=<this> pair */
- }
-
- if(!semiptr || !*semiptr) {
- /* we already know there are no more cookies */
- semiptr = NULL;
- continue;
- }
-
- ptr=semiptr+1;
- while(*ptr && ISBLANK(*ptr))
- ptr++;
- semiptr=strchr(ptr, ';'); /* now, find the next semicolon */
-
- if(!semiptr && *ptr)
- /* There are no more semicolons, but there's a final name=value pair
- coming up */
- semiptr=strchr(ptr, '\0');
- } while(semiptr);
-
- if(co->maxage) {
- co->expires =
- curlx_strtoofft((*co->maxage=='\"')?
- &co->maxage[1]:&co->maxage[0], NULL, 10);
- if(CURL_OFF_T_MAX - now < co->expires)
- /* avoid overflow */
- co->expires = CURL_OFF_T_MAX;
- else
- co->expires += now;
- }
- else if(co->expirestr) {
- /* Note that if the date couldn't get parsed for whatever reason,
- the cookie will be treated as a session cookie */
- co->expires = curl_getdate(co->expirestr, NULL);
-
- /* Session cookies have expires set to 0 so if we get that back
- from the date parser let's add a second to make it a
- non-session cookie */
- if(co->expires == 0)
- co->expires = 1;
- else if(co->expires < 0)
- co->expires = 0;
- }
-
- if(!badcookie && !co->domain) {
- if(domain) {
- /* no domain was given in the header line, set the default */
- co->domain=strdup(domain);
- if(!co->domain)
- badcookie = TRUE;
- }
- }
-
- if(!badcookie && !co->path && path) {
- /* No path was given in the header line, set the default.
- Note that the passed-in path to this function MAY have a '?' and
- following part that MUST not be stored as part of the path. */
- char *queryp = strchr(path, '?');
-
- /* queryp is where the interesting part of the path ends, so now we
- want to the find the last */
- char *endslash;
- if(!queryp)
- endslash = strrchr(path, '/');
- else
- endslash = memrchr(path, '/', (size_t)(queryp - path));
- if(endslash) {
- size_t pathlen = (size_t)(endslash-path+1); /* include ending slash */
- co->path=malloc(pathlen+1); /* one extra for the zero byte */
- if(co->path) {
- memcpy(co->path, path, pathlen);
- co->path[pathlen]=0; /* zero terminate */
- co->spath = sanitize_cookie_path(co->path);
- if(!co->spath)
- badcookie = TRUE; /* out of memory bad */
- }
- else
- badcookie = TRUE;
- }
- }
-
- free(what);
-
- if(badcookie || !co->name) {
- /* we didn't get a cookie name or a bad one,
- this is an illegal line, bail out */
- freecookie(co);
- return NULL;
- }
-
- }
- else {
- /* This line is NOT a HTTP header style line, we do offer support for
- reading the odd netscape cookies-file format here */
- char *ptr;
- char *firstptr;
- char *tok_buf=NULL;
- int fields;
-
- /* IE introduced HTTP-only cookies to prevent XSS attacks. Cookies
- marked with httpOnly after the domain name are not accessible
- from javascripts, but since curl does not operate at javascript
- level, we include them anyway. In Firefox's cookie files, these
- lines are preceded with #HttpOnly_ and then everything is
- as usual, so we skip 10 characters of the line..
- */
- if(strncmp(lineptr, "#HttpOnly_", 10) == 0) {
- lineptr += 10;
- co->httponly = TRUE;
- }
-
- if(lineptr[0]=='#') {
- /* don't even try the comments */
- free(co);
- return NULL;
- }
- /* strip off the possible end-of-line characters */
- ptr=strchr(lineptr, '\r');
- if(ptr)
- *ptr=0; /* clear it */
- ptr=strchr(lineptr, '\n');
- if(ptr)
- *ptr=0; /* clear it */
-
- firstptr=strtok_r(lineptr, "\t", &tok_buf); /* tokenize it on the TAB */
-
- /* Now loop through the fields and init the struct we already have
- allocated */
- for(ptr=firstptr, fields=0; ptr && !badcookie;
- ptr=strtok_r(NULL, "\t", &tok_buf), fields++) {
- switch(fields) {
- case 0:
- if(ptr[0]=='.') /* skip preceding dots */
- ptr++;
- co->domain = strdup(ptr);
- if(!co->domain)
- badcookie = TRUE;
- break;
- case 1:
- /* This field got its explanation on the 23rd of May 2001 by
- Andrés García:
-
- flag: A TRUE/FALSE value indicating if all machines within a given
- domain can access the variable. This value is set automatically by
- the browser, depending on the value you set for the domain.
-
- As far as I can see, it is set to true when the cookie says
- .domain.com and to false when the domain is complete www.domain.com
- */
- co->tailmatch = Curl_raw_equal(ptr, "TRUE")?TRUE:FALSE;
- break;
- case 2:
- /* It turns out, that sometimes the file format allows the path
- field to remain not filled in, we try to detect this and work
- around it! Andrés García made us aware of this... */
- if(strcmp("TRUE", ptr) && strcmp("FALSE", ptr)) {
- /* only if the path doesn't look like a boolean option! */
- co->path = strdup(ptr);
- if(!co->path)
- badcookie = TRUE;
- else {
- co->spath = sanitize_cookie_path(co->path);
- if(!co->spath) {
- badcookie = TRUE; /* out of memory bad */
- }
- }
- break;
- }
- /* this doesn't look like a path, make one up! */
- co->path = strdup("/");
- if(!co->path)
- badcookie = TRUE;
- co->spath = strdup("/");
- if(!co->spath)
- badcookie = TRUE;
- fields++; /* add a field and fall down to secure */
- /* FALLTHROUGH */
- case 3:
- co->secure = Curl_raw_equal(ptr, "TRUE")?TRUE:FALSE;
- break;
- case 4:
- co->expires = curlx_strtoofft(ptr, NULL, 10);
- break;
- case 5:
- co->name = strdup(ptr);
- if(!co->name)
- badcookie = TRUE;
- break;
- case 6:
- co->value = strdup(ptr);
- if(!co->value)
- badcookie = TRUE;
- break;
- }
- }
- if(6 == fields) {
- /* we got a cookie with blank contents, fix it */
- co->value = strdup("");
- if(!co->value)
- badcookie = TRUE;
- else
- fields++;
- }
-
- if(!badcookie && (7 != fields))
- /* we did not find the sufficient number of fields */
- badcookie = TRUE;
-
- if(badcookie) {
- freecookie(co);
- return NULL;
- }
-
- }
-
- if(!c->running && /* read from a file */
- c->newsession && /* clean session cookies */
- !co->expires) { /* this is a session cookie since it doesn't expire! */
- freecookie(co);
- return NULL;
- }
-
- co->livecookie = c->running;
-
- /* now, we have parsed the incoming line, we must now check if this
- superceeds an already existing cookie, which it may if the previous have
- the same domain and path as this */
-
- /* at first, remove expired cookies */
- remove_expired(c);
-
- clist = c->cookies;
- replace_old = FALSE;
- while(clist) {
- if(Curl_raw_equal(clist->name, co->name)) {
- /* the names are identical */
-
- if(clist->domain && co->domain) {
- if(Curl_raw_equal(clist->domain, co->domain))
- /* The domains are identical */
- replace_old=TRUE;
- }
- else if(!clist->domain && !co->domain)
- replace_old = TRUE;
-
- if(replace_old) {
- /* the domains were identical */
-
- if(clist->spath && co->spath) {
- if(Curl_raw_equal(clist->spath, co->spath)) {
- replace_old = TRUE;
- }
- else
- replace_old = FALSE;
- }
- else if(!clist->spath && !co->spath)
- replace_old = TRUE;
- else
- replace_old = FALSE;
-
- }
-
- if(replace_old && !co->livecookie && clist->livecookie) {
- /* Both cookies matched fine, except that the already present
- cookie is "live", which means it was set from a header, while
- the new one isn't "live" and thus only read from a file. We let
- live cookies stay alive */
-
- /* Free the newcomer and get out of here! */
- freecookie(co);
- return NULL;
- }
-
- if(replace_old) {
- co->next = clist->next; /* get the next-pointer first */
-
- /* then free all the old pointers */
- free(clist->name);
- if(clist->value)
- free(clist->value);
- if(clist->domain)
- free(clist->domain);
- if(clist->path)
- free(clist->path);
- if(clist->spath)
- free(clist->spath);
- if(clist->expirestr)
- free(clist->expirestr);
-
- if(clist->version)
- free(clist->version);
- if(clist->maxage)
- free(clist->maxage);
-
- *clist = *co; /* then store all the new data */
-
- free(co); /* free the newly alloced memory */
- co = clist; /* point to the previous struct instead */
-
- /* We have replaced a cookie, now skip the rest of the list but
- make sure the 'lastc' pointer is properly set */
- do {
- lastc = clist;
- clist = clist->next;
- } while(clist);
- break;
- }
- }
- lastc = clist;
- clist = clist->next;
- }
-
- if(c->running)
- /* Only show this when NOT reading the cookies from a file */
- infof(data, "%s cookie %s=\"%s\" for domain %s, path %s, "
- "expire %" CURL_FORMAT_CURL_OFF_T "\n",
- replace_old?"Replaced":"Added", co->name, co->value,
- co->domain, co->path, co->expires);
-
- if(!replace_old) {
- /* then make the last item point on this new one */
- if(lastc)
- lastc->next = co;
- else
- c->cookies = co;
- c->numcookies++; /* one more cookie in the jar */
- }
-
- return co;
-}
-
-/*****************************************************************************
- *
- * Curl_cookie_init()
- *
- * Inits a cookie struct to read data from a local file. This is always
- * called before any cookies are set. File may be NULL.
- *
- * If 'newsession' is TRUE, discard all "session cookies" on read from file.
- *
- ****************************************************************************/
-struct CookieInfo *Curl_cookie_init(struct SessionHandle *data,
- const char *file,
- struct CookieInfo *inc,
- bool newsession)
-{
- struct CookieInfo *c;
- FILE *fp;
- bool fromfile=TRUE;
-
- if(NULL == inc) {
- /* we didn't get a struct, create one */
- c = calloc(1, sizeof(struct CookieInfo));
- if(!c)
- return NULL; /* failed to get memory */
- c->filename = strdup(file?file:"none"); /* copy the name just in case */
- }
- else {
- /* we got an already existing one, use that */
- c = inc;
- }
- c->running = FALSE; /* this is not running, this is init */
-
- if(file && strequal(file, "-")) {
- fp = stdin;
- fromfile=FALSE;
- }
- else if(file && !*file) {
- /* points to a "" string */
- fp = NULL;
- }
- else
- fp = file?fopen(file, "r"):NULL;
-
- c->newsession = newsession; /* new session? */
-
- if(fp) {
- char *lineptr;
- bool headerline;
-
- char *line = malloc(MAX_COOKIE_LINE);
- if(line) {
- while(fgets(line, MAX_COOKIE_LINE, fp)) {
- if(checkprefix("Set-Cookie:", line)) {
- /* This is a cookie line, get it! */
- lineptr=&line[11];
- headerline=TRUE;
- }
- else {
- lineptr=line;
- headerline=FALSE;
- }
- while(*lineptr && ISBLANK(*lineptr))
- lineptr++;
-
- Curl_cookie_add(data, c, headerline, lineptr, NULL, NULL);
- }
- free(line); /* free the line buffer */
- }
- if(fromfile)
- fclose(fp);
- }
-
- c->running = TRUE; /* now, we're running */
-
- return c;
-}
-
-/* sort this so that the longest path gets before the shorter path */
-static int cookie_sort(const void *p1, const void *p2)
-{
- struct Cookie *c1 = *(struct Cookie **)p1;
- struct Cookie *c2 = *(struct Cookie **)p2;
- size_t l1, l2;
-
- /* 1 - compare cookie path lengths */
- l1 = c1->path ? strlen(c1->path) : 0;
- l2 = c2->path ? strlen(c2->path) : 0;
-
- if(l1 != l2)
- return (l2 > l1) ? 1 : -1 ; /* avoid size_t <=> int conversions */
-
- /* 2 - compare cookie domain lengths */
- l1 = c1->domain ? strlen(c1->domain) : 0;
- l2 = c2->domain ? strlen(c2->domain) : 0;
-
- if(l1 != l2)
- return (l2 > l1) ? 1 : -1 ; /* avoid size_t <=> int conversions */
-
- /* 3 - compare cookie names */
- if(c1->name && c2->name)
- return strcmp(c1->name, c2->name);
-
- /* sorry, can't be more deterministic */
- return 0;
-}
-
-/*****************************************************************************
- *
- * Curl_cookie_getlist()
- *
- * For a given host and path, return a linked list of cookies that the
- * client should send to the server if used now. The secure boolean informs
- * the cookie if a secure connection is achieved or not.
- *
- * It shall only return cookies that haven't expired.
- *
- ****************************************************************************/
-
-struct Cookie *Curl_cookie_getlist(struct CookieInfo *c,
- const char *host, const char *path,
- bool secure)
-{
- struct Cookie *newco;
- struct Cookie *co;
- time_t now = time(NULL);
- struct Cookie *mainco=NULL;
- size_t matches = 0;
- bool is_ip;
-
- if(!c || !c->cookies)
- return NULL; /* no cookie struct or no cookies in the struct */
-
- /* at first, remove expired cookies */
- remove_expired(c);
-
- /* check if host is an IP(v4|v6) address */
- is_ip = isip(host);
-
- co = c->cookies;
-
- while(co) {
- /* only process this cookie if it is not expired or had no expire
- date AND that if the cookie requires we're secure we must only
- continue if we are! */
- if((!co->expires || (co->expires > now)) &&
- (co->secure?secure:TRUE)) {
-
- /* now check if the domain is correct */
- if(!co->domain ||
- (co->tailmatch && !is_ip && tailmatch(co->domain, host)) ||
- ((!co->tailmatch || is_ip) && Curl_raw_equal(host, co->domain)) ) {
- /* the right part of the host matches the domain stuff in the
- cookie data */
-
- /* now check the left part of the path with the cookies path
- requirement */
- if(!co->spath || pathmatch(co->spath, path) ) {
-
- /* and now, we know this is a match and we should create an
- entry for the return-linked-list */
-
- newco = malloc(sizeof(struct Cookie));
- if(newco) {
- /* first, copy the whole source cookie: */
- memcpy(newco, co, sizeof(struct Cookie));
-
- /* then modify our next */
- newco->next = mainco;
-
- /* point the main to us */
- mainco = newco;
-
- matches++;
- }
- else {
- fail:
- /* failure, clear up the allocated chain and return NULL */
- while(mainco) {
- co = mainco->next;
- free(mainco);
- mainco = co;
- }
-
- return NULL;
- }
- }
- }
- }
- co = co->next;
- }
-
- if(matches) {
- /* Now we need to make sure that if there is a name appearing more than
- once, the longest specified path version comes first. To make this
- the swiftest way, we just sort them all based on path length. */
- struct Cookie **array;
- size_t i;
-
- /* alloc an array and store all cookie pointers */
- array = malloc(sizeof(struct Cookie *) * matches);
- if(!array)
- goto fail;
-
- co = mainco;
-
- for(i=0; co; co = co->next)
- array[i++] = co;
-
- /* now sort the cookie pointers in path length order */
- qsort(array, matches, sizeof(struct Cookie *), cookie_sort);
-
- /* remake the linked list order according to the new order */
-
- mainco = array[0]; /* start here */
- for(i=0; i<matches-1; i++)
- array[i]->next = array[i+1];
- array[matches-1]->next = NULL; /* terminate the list */
-
- free(array); /* remove the temporary data again */
- }
-
- return mainco; /* return the new list */
-}
-
-/*****************************************************************************
- *
- * Curl_cookie_clearall()
- *
- * Clear all existing cookies and reset the counter.
- *
- ****************************************************************************/
-void Curl_cookie_clearall(struct CookieInfo *cookies)
-{
- if(cookies) {
- Curl_cookie_freelist(cookies->cookies, TRUE);
- cookies->cookies = NULL;
- cookies->numcookies = 0;
- }
-}
-
-/*****************************************************************************
- *
- * Curl_cookie_freelist()
- *
- * Free a list of cookies previously returned by Curl_cookie_getlist();
- *
- * The 'cookiestoo' argument tells this function whether to just free the
- * list or actually also free all cookies within the list as well.
- *
- ****************************************************************************/
-
-void Curl_cookie_freelist(struct Cookie *co, bool cookiestoo)
-{
- struct Cookie *next;
- if(co) {
- while(co) {
- next = co->next;
- if(cookiestoo)
- freecookie(co);
- else
- free(co); /* we only free the struct since the "members" are all just
- pointed out in the main cookie list! */
- co = next;
- }
- }
-}
-
-
-/*****************************************************************************
- *
- * Curl_cookie_clearsess()
- *
- * Free all session cookies in the cookies list.
- *
- ****************************************************************************/
-void Curl_cookie_clearsess(struct CookieInfo *cookies)
-{
- struct Cookie *first, *curr, *next, *prev = NULL;
-
- if(!cookies || !cookies->cookies)
- return;
-
- first = curr = prev = cookies->cookies;
-
- for(; curr; curr = next) {
- next = curr->next;
- if(!curr->expires) {
- if(first == curr)
- first = next;
-
- if(prev == curr)
- prev = next;
- else
- prev->next = next;
-
- freecookie(curr);
- cookies->numcookies--;
- }
- else
- prev = curr;
- }
-
- cookies->cookies = first;
-}
-
-
-/*****************************************************************************
- *
- * Curl_cookie_cleanup()
- *
- * Free a "cookie object" previous created with cookie_init().
- *
- ****************************************************************************/
-void Curl_cookie_cleanup(struct CookieInfo *c)
-{
- struct Cookie *co;
- struct Cookie *next;
- if(c) {
- if(c->filename)
- free(c->filename);
- co = c->cookies;
-
- while(co) {
- next = co->next;
- freecookie(co);
- co = next;
- }
- free(c); /* free the base struct as well */
- }
-}
-
-/* get_netscape_format()
- *
- * Formats a string for Netscape output file, w/o a newline at the end.
- *
- * Function returns a char * to a formatted line. Has to be free()d
-*/
-static char *get_netscape_format(const struct Cookie *co)
-{
- return aprintf(
- "%s" /* httponly preamble */
- "%s%s\t" /* domain */
- "%s\t" /* tailmatch */
- "%s\t" /* path */
- "%s\t" /* secure */
- "%" CURL_FORMAT_CURL_OFF_T "\t" /* expires */
- "%s\t" /* name */
- "%s", /* value */
- co->httponly?"#HttpOnly_":"",
- /* Make sure all domains are prefixed with a dot if they allow
- tailmatching. This is Mozilla-style. */
- (co->tailmatch && co->domain && co->domain[0] != '.')? ".":"",
- co->domain?co->domain:"unknown",
- co->tailmatch?"TRUE":"FALSE",
- co->path?co->path:"/",
- co->secure?"TRUE":"FALSE",
- co->expires,
- co->name,
- co->value?co->value:"");
-}
-
-/*
- * cookie_output()
- *
- * Writes all internally known cookies to the specified file. Specify
- * "-" as file name to write to stdout.
- *
- * The function returns non-zero on write failure.
- */
-static int cookie_output(struct CookieInfo *c, const char *dumphere)
-{
- struct Cookie *co;
- FILE *out;
- bool use_stdout=FALSE;
-
- if((NULL == c) || (0 == c->numcookies))
- /* If there are no known cookies, we don't write or even create any
- destination file */
- return 0;
-
- /* at first, remove expired cookies */
- remove_expired(c);
-
- if(strequal("-", dumphere)) {
- /* use stdout */
- out = stdout;
- use_stdout=TRUE;
- }
- else {
- out = fopen(dumphere, "w");
- if(!out)
- return 1; /* failure */
- }
-
- if(c) {
- char *format_ptr;
-
- fputs("# Netscape HTTP Cookie File\n"
- "# http://curl.haxx.se/docs/http-cookies.html\n"
- "# This file was generated by libcurl! Edit at your own risk.\n\n",
- out);
- co = c->cookies;
-
- while(co) {
- format_ptr = get_netscape_format(co);
- if(format_ptr == NULL) {
- fprintf(out, "#\n# Fatal libcurl error\n");
- if(!use_stdout)
- fclose(out);
- return 1;
- }
- fprintf(out, "%s\n", format_ptr);
- free(format_ptr);
- co=co->next;
- }
- }
-
- if(!use_stdout)
- fclose(out);
-
- return 0;
-}
-
-struct curl_slist *Curl_cookie_list(struct SessionHandle *data)
-{
- struct curl_slist *list = NULL;
- struct curl_slist *beg;
- struct Cookie *c;
- char *line;
-
- if((data->cookies == NULL) ||
- (data->cookies->numcookies == 0))
- return NULL;
-
- c = data->cookies->cookies;
-
- while(c) {
- /* fill the list with _all_ the cookies we know */
- line = get_netscape_format(c);
- if(!line) {
- curl_slist_free_all(list);
- return NULL;
- }
- beg = Curl_slist_append_nodup(list, line);
- if(!beg) {
- free(line);
- curl_slist_free_all(list);
- return NULL;
- }
- list = beg;
- c = c->next;
- }
-
- return list;
-}
-
-void Curl_flush_cookies(struct SessionHandle *data, int cleanup)
-{
- if(data->set.str[STRING_COOKIEJAR]) {
- if(data->change.cookielist) {
- /* If there is a list of cookie files to read, do it first so that
- we have all the told files read before we write the new jar.
- Curl_cookie_loadfiles() LOCKS and UNLOCKS the share itself! */
- Curl_cookie_loadfiles(data);
- }
-
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
-
- /* if we have a destination file for all the cookies to get dumped to */
- if(cookie_output(data->cookies, data->set.str[STRING_COOKIEJAR]))
- infof(data, "WARNING: failed to save cookies in %s\n",
- data->set.str[STRING_COOKIEJAR]);
- }
- else {
- if(cleanup && data->change.cookielist) {
- /* since nothing is written, we can just free the list of cookie file
- names */
- curl_slist_free_all(data->change.cookielist); /* clean up list */
- data->change.cookielist = NULL;
- }
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- }
-
- if(cleanup && (!data->share || (data->cookies != data->share->cookies))) {
- Curl_cookie_cleanup(data->cookies);
- }
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
-}
-
-#endif /* CURL_DISABLE_HTTP || CURL_DISABLE_COOKIES */
diff --git a/external/libcurl_android/jni/libcurl/lib/cookie.h b/external/libcurl_android/jni/libcurl/lib/cookie.h
deleted file mode 100755
index bd890827..00000000
--- a/external/libcurl_android/jni/libcurl/lib/cookie.h
+++ /dev/null
@@ -1,104 +0,0 @@
-#ifndef HEADER_CURL_COOKIE_H
-#define HEADER_CURL_COOKIE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-struct Cookie {
- struct Cookie *next; /* next in the chain */
- char *name; /* <this> = value */
- char *value; /* name = <this> */
- char *path; /* path = <this> which is in Set-Cookie: */
- char *spath; /* sanitized cookie path */
- char *domain; /* domain = <this> */
- curl_off_t expires; /* expires = <this> */
- char *expirestr; /* the plain text version */
- bool tailmatch; /* weather we do tail-matchning of the domain name */
-
- /* RFC 2109 keywords. Version=1 means 2109-compliant cookie sending */
- char *version; /* Version = <value> */
- char *maxage; /* Max-Age = <value> */
-
- bool secure; /* whether the 'secure' keyword was used */
- bool livecookie; /* updated from a server, not a stored file */
- bool httponly; /* true if the httponly directive is present */
-};
-
-struct CookieInfo {
- /* linked list of cookies we know of */
- struct Cookie *cookies;
-
- char *filename; /* file we read from/write to */
- bool running; /* state info, for cookie adding information */
- long numcookies; /* number of cookies in the "jar" */
- bool newsession; /* new session, discard session cookies on load */
-};
-
-/* This is the maximum line length we accept for a cookie line. RFC 2109
- section 6.3 says:
-
- "at least 4096 bytes per cookie (as measured by the size of the characters
- that comprise the cookie non-terminal in the syntax description of the
- Set-Cookie header)"
-
-*/
-#define MAX_COOKIE_LINE 5000
-#define MAX_COOKIE_LINE_TXT "4999"
-
-/* This is the maximum length of a cookie name we deal with: */
-#define MAX_NAME 1024
-#define MAX_NAME_TXT "1023"
-
-struct SessionHandle;
-/*
- * Add a cookie to the internal list of cookies. The domain and path arguments
- * are only used if the header boolean is TRUE.
- */
-
-struct Cookie *Curl_cookie_add(struct SessionHandle *data,
- struct CookieInfo *, bool header, char *lineptr,
- const char *domain, const char *path);
-
-struct Cookie *Curl_cookie_getlist(struct CookieInfo *, const char *,
- const char *, bool);
-void Curl_cookie_freelist(struct Cookie *cookies, bool cookiestoo);
-void Curl_cookie_clearall(struct CookieInfo *cookies);
-void Curl_cookie_clearsess(struct CookieInfo *cookies);
-
-#if defined(CURL_DISABLE_HTTP) || defined(CURL_DISABLE_COOKIES)
-#define Curl_cookie_list(x) NULL
-#define Curl_cookie_loadfiles(x) Curl_nop_stmt
-#define Curl_cookie_init(x,y,z,w) NULL
-#define Curl_cookie_cleanup(x) Curl_nop_stmt
-#define Curl_flush_cookies(x,y) Curl_nop_stmt
-#else
-void Curl_flush_cookies(struct SessionHandle *data, int cleanup);
-void Curl_cookie_cleanup(struct CookieInfo *);
-struct CookieInfo *Curl_cookie_init(struct SessionHandle *data,
- const char *, struct CookieInfo *, bool);
-struct curl_slist *Curl_cookie_list(struct SessionHandle *data);
-void Curl_cookie_loadfiles(struct SessionHandle *data);
-#endif
-
-#endif /* HEADER_CURL_COOKIE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_addrinfo.c b/external/libcurl_android/jni/libcurl/lib/curl_addrinfo.c
deleted file mode 100755
index 10652c64..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_addrinfo.c
+++ /dev/null
@@ -1,527 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#ifdef __VMS
-# include <in.h>
-# include <inet.h>
-#endif
-
-#if defined(NETWARE) && defined(__NOVELL_LIBC__)
-# undef in_addr_t
-# define in_addr_t unsigned long
-#endif
-
-#include "curl_addrinfo.h"
-#include "inet_pton.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-
-/*
- * Curl_freeaddrinfo()
- *
- * This is used to free a linked list of Curl_addrinfo structs along
- * with all its associated allocated storage. This function should be
- * called once for each successful call to Curl_getaddrinfo_ex() or to
- * any function call which actually allocates a Curl_addrinfo struct.
- */
-
-#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 910) && \
- defined(__OPTIMIZE__) && defined(__unix__) && defined(__i386__)
- /* workaround icc 9.1 optimizer issue */
-# define vqualifier volatile
-#else
-# define vqualifier
-#endif
-
-void
-Curl_freeaddrinfo(Curl_addrinfo *cahead)
-{
- Curl_addrinfo *vqualifier canext;
- Curl_addrinfo *ca;
-
- for(ca = cahead; ca != NULL; ca = canext) {
-
- if(ca->ai_addr)
- free(ca->ai_addr);
-
- if(ca->ai_canonname)
- free(ca->ai_canonname);
-
- canext = ca->ai_next;
-
- free(ca);
- }
-}
-
-
-#ifdef HAVE_GETADDRINFO
-/*
- * Curl_getaddrinfo_ex()
- *
- * This is a wrapper function around system's getaddrinfo(), with
- * the only difference that instead of returning a linked list of
- * addrinfo structs this one returns a linked list of Curl_addrinfo
- * ones. The memory allocated by this function *MUST* be free'd with
- * Curl_freeaddrinfo(). For each successful call to this function
- * there must be an associated call later to Curl_freeaddrinfo().
- *
- * There should be no single call to system's getaddrinfo() in the
- * whole library, any such call should be 'routed' through this one.
- */
-
-int
-Curl_getaddrinfo_ex(const char *nodename,
- const char *servname,
- const struct addrinfo *hints,
- Curl_addrinfo **result)
-{
- const struct addrinfo *ai;
- struct addrinfo *aihead;
- Curl_addrinfo *cafirst = NULL;
- Curl_addrinfo *calast = NULL;
- Curl_addrinfo *ca;
- size_t ss_size;
- int error;
-
- *result = NULL; /* assume failure */
-
- error = getaddrinfo(nodename, servname, hints, &aihead);
- if(error)
- return error;
-
- /* traverse the addrinfo list */
-
- for(ai = aihead; ai != NULL; ai = ai->ai_next) {
-
- /* ignore elements with unsupported address family, */
- /* settle family-specific sockaddr structure size. */
- if(ai->ai_family == AF_INET)
- ss_size = sizeof(struct sockaddr_in);
-#ifdef ENABLE_IPV6
- else if(ai->ai_family == AF_INET6)
- ss_size = sizeof(struct sockaddr_in6);
-#endif
- else
- continue;
-
- /* ignore elements without required address info */
- if((ai->ai_addr == NULL) || !(ai->ai_addrlen > 0))
- continue;
-
- /* ignore elements with bogus address size */
- if((size_t)ai->ai_addrlen < ss_size)
- continue;
-
- if((ca = malloc(sizeof(Curl_addrinfo))) == NULL) {
- error = EAI_MEMORY;
- break;
- }
-
- /* copy each structure member individually, member ordering, */
- /* size, or padding might be different for each platform. */
-
- ca->ai_flags = ai->ai_flags;
- ca->ai_family = ai->ai_family;
- ca->ai_socktype = ai->ai_socktype;
- ca->ai_protocol = ai->ai_protocol;
- ca->ai_addrlen = (curl_socklen_t)ss_size;
- ca->ai_addr = NULL;
- ca->ai_canonname = NULL;
- ca->ai_next = NULL;
-
- if((ca->ai_addr = malloc(ss_size)) == NULL) {
- error = EAI_MEMORY;
- free(ca);
- break;
- }
- memcpy(ca->ai_addr, ai->ai_addr, ss_size);
-
- if(ai->ai_canonname != NULL) {
- if((ca->ai_canonname = strdup(ai->ai_canonname)) == NULL) {
- error = EAI_MEMORY;
- free(ca->ai_addr);
- free(ca);
- break;
- }
- }
-
- /* if the return list is empty, this becomes the first element */
- if(!cafirst)
- cafirst = ca;
-
- /* add this element last in the return list */
- if(calast)
- calast->ai_next = ca;
- calast = ca;
-
- }
-
- /* destroy the addrinfo list */
- if(aihead)
- freeaddrinfo(aihead);
-
- /* if we failed, also destroy the Curl_addrinfo list */
- if(error) {
- Curl_freeaddrinfo(cafirst);
- cafirst = NULL;
- }
- else if(!cafirst) {
-#ifdef EAI_NONAME
- /* rfc3493 conformant */
- error = EAI_NONAME;
-#else
- /* rfc3493 obsoleted */
- error = EAI_NODATA;
-#endif
-#ifdef USE_WINSOCK
- SET_SOCKERRNO(error);
-#endif
- }
-
- *result = cafirst;
-
- /* This is not a CURLcode */
- return error;
-}
-#endif /* HAVE_GETADDRINFO */
-
-
-/*
- * Curl_he2ai()
- *
- * This function returns a pointer to the first element of a newly allocated
- * Curl_addrinfo struct linked list filled with the data of a given hostent.
- * Curl_addrinfo is meant to work like the addrinfo struct does for a IPv6
- * stack, but usable also for IPv4, all hosts and environments.
- *
- * The memory allocated by this function *MUST* be free'd later on calling
- * Curl_freeaddrinfo(). For each successful call to this function there
- * must be an associated call later to Curl_freeaddrinfo().
- *
- * Curl_addrinfo defined in "lib/curl_addrinfo.h"
- *
- * struct Curl_addrinfo {
- * int ai_flags;
- * int ai_family;
- * int ai_socktype;
- * int ai_protocol;
- * curl_socklen_t ai_addrlen; * Follow rfc3493 struct addrinfo *
- * char *ai_canonname;
- * struct sockaddr *ai_addr;
- * struct Curl_addrinfo *ai_next;
- * };
- * typedef struct Curl_addrinfo Curl_addrinfo;
- *
- * hostent defined in <netdb.h>
- *
- * struct hostent {
- * char *h_name;
- * char **h_aliases;
- * int h_addrtype;
- * int h_length;
- * char **h_addr_list;
- * };
- *
- * for backward compatibility:
- *
- * #define h_addr h_addr_list[0]
- */
-
-Curl_addrinfo *
-Curl_he2ai(const struct hostent *he, int port)
-{
- Curl_addrinfo *ai;
- Curl_addrinfo *prevai = NULL;
- Curl_addrinfo *firstai = NULL;
- struct sockaddr_in *addr;
-#ifdef ENABLE_IPV6
- struct sockaddr_in6 *addr6;
-#endif
- CURLcode result = CURLE_OK;
- int i;
- char *curr;
-
- if(!he)
- /* no input == no output! */
- return NULL;
-
- DEBUGASSERT((he->h_name != NULL) && (he->h_addr_list != NULL));
-
- for(i=0; (curr = he->h_addr_list[i]) != NULL; i++) {
-
- size_t ss_size;
-#ifdef ENABLE_IPV6
- if(he->h_addrtype == AF_INET6)
- ss_size = sizeof (struct sockaddr_in6);
- else
-#endif
- ss_size = sizeof (struct sockaddr_in);
-
- if((ai = calloc(1, sizeof(Curl_addrinfo))) == NULL) {
- result = CURLE_OUT_OF_MEMORY;
- break;
- }
- if((ai->ai_canonname = strdup(he->h_name)) == NULL) {
- result = CURLE_OUT_OF_MEMORY;
- free(ai);
- break;
- }
- if((ai->ai_addr = calloc(1, ss_size)) == NULL) {
- result = CURLE_OUT_OF_MEMORY;
- free(ai->ai_canonname);
- free(ai);
- break;
- }
-
- if(!firstai)
- /* store the pointer we want to return from this function */
- firstai = ai;
-
- if(prevai)
- /* make the previous entry point to this */
- prevai->ai_next = ai;
-
- ai->ai_family = he->h_addrtype;
-
- /* we return all names as STREAM, so when using this address for TFTP
- the type must be ignored and conn->socktype be used instead! */
- ai->ai_socktype = SOCK_STREAM;
-
- ai->ai_addrlen = (curl_socklen_t)ss_size;
-
- /* leave the rest of the struct filled with zero */
-
- switch (ai->ai_family) {
- case AF_INET:
- addr = (void *)ai->ai_addr; /* storage area for this info */
-
- memcpy(&addr->sin_addr, curr, sizeof(struct in_addr));
- addr->sin_family = (unsigned short)(he->h_addrtype);
- addr->sin_port = htons((unsigned short)port);
- break;
-
-#ifdef ENABLE_IPV6
- case AF_INET6:
- addr6 = (void *)ai->ai_addr; /* storage area for this info */
-
- memcpy(&addr6->sin6_addr, curr, sizeof(struct in6_addr));
- addr6->sin6_family = (unsigned short)(he->h_addrtype);
- addr6->sin6_port = htons((unsigned short)port);
- break;
-#endif
- }
-
- prevai = ai;
- }
-
- if(result != CURLE_OK) {
- Curl_freeaddrinfo(firstai);
- firstai = NULL;
- }
-
- return firstai;
-}
-
-
-struct namebuff {
- struct hostent hostentry;
- union {
- struct in_addr ina4;
-#ifdef ENABLE_IPV6
- struct in6_addr ina6;
-#endif
- } addrentry;
- char *h_addr_list[2];
-};
-
-
-/*
- * Curl_ip2addr()
- *
- * This function takes an internet address, in binary form, as input parameter
- * along with its address family and the string version of the address, and it
- * returns a Curl_addrinfo chain filled in correctly with information for the
- * given address/host
- */
-
-Curl_addrinfo *
-Curl_ip2addr(int af, const void *inaddr, const char *hostname, int port)
-{
- Curl_addrinfo *ai;
-
-#if defined(__VMS) && \
- defined(__INITIAL_POINTER_SIZE) && (__INITIAL_POINTER_SIZE == 64)
-#pragma pointer_size save
-#pragma pointer_size short
-#pragma message disable PTRMISMATCH
-#endif
-
- struct hostent *h;
- struct namebuff *buf;
- char *addrentry;
- char *hoststr;
- size_t addrsize;
-
- DEBUGASSERT(inaddr && hostname);
-
- buf = malloc(sizeof(struct namebuff));
- if(!buf)
- return NULL;
-
- hoststr = strdup(hostname);
- if(!hoststr) {
- free(buf);
- return NULL;
- }
-
- switch(af) {
- case AF_INET:
- addrsize = sizeof(struct in_addr);
- addrentry = (void *)&buf->addrentry.ina4;
- memcpy(addrentry, inaddr, sizeof(struct in_addr));
- break;
-#ifdef ENABLE_IPV6
- case AF_INET6:
- addrsize = sizeof(struct in6_addr);
- addrentry = (void *)&buf->addrentry.ina6;
- memcpy(addrentry, inaddr, sizeof(struct in6_addr));
- break;
-#endif
- default:
- free(hoststr);
- free(buf);
- return NULL;
- }
-
- h = &buf->hostentry;
- h->h_name = hoststr;
- h->h_aliases = NULL;
- h->h_addrtype = (short)af;
- h->h_length = (short)addrsize;
- h->h_addr_list = &buf->h_addr_list[0];
- h->h_addr_list[0] = addrentry;
- h->h_addr_list[1] = NULL; /* terminate list of entries */
-
-#if defined(__VMS) && \
- defined(__INITIAL_POINTER_SIZE) && (__INITIAL_POINTER_SIZE == 64)
-#pragma pointer_size restore
-#pragma message enable PTRMISMATCH
-#endif
-
- ai = Curl_he2ai(h, port);
-
- free(hoststr);
- free(buf);
-
- return ai;
-}
-
-/*
- * Given an IPv4 or IPv6 dotted string address, this converts it to a proper
- * allocated Curl_addrinfo struct and returns it.
- */
-Curl_addrinfo *Curl_str2addr(char *address, int port)
-{
- struct in_addr in;
- if(Curl_inet_pton(AF_INET, address, &in) > 0)
- /* This is a dotted IP address 123.123.123.123-style */
- return Curl_ip2addr(AF_INET, &in, address, port);
-#ifdef ENABLE_IPV6
- else {
- struct in6_addr in6;
- if(Curl_inet_pton(AF_INET6, address, &in6) > 0)
- /* This is a dotted IPv6 address ::1-style */
- return Curl_ip2addr(AF_INET6, &in6, address, port);
- }
-#endif
- return NULL; /* bad input format */
-}
-
-#if defined(CURLDEBUG) && defined(HAVE_FREEADDRINFO)
-/*
- * curl_dofreeaddrinfo()
- *
- * This is strictly for memory tracing and are using the same style as the
- * family otherwise present in memdebug.c. I put these ones here since they
- * require a bunch of structs I didn't want to include in memdebug.c
- */
-
-void
-curl_dofreeaddrinfo(struct addrinfo *freethis,
- int line, const char *source)
-{
- (freeaddrinfo)(freethis);
- curl_memlog("ADDR %s:%d freeaddrinfo(%p)\n",
- source, line, (void *)freethis);
-}
-#endif /* defined(CURLDEBUG) && defined(HAVE_FREEADDRINFO) */
-
-
-#if defined(CURLDEBUG) && defined(HAVE_GETADDRINFO)
-/*
- * curl_dogetaddrinfo()
- *
- * This is strictly for memory tracing and are using the same style as the
- * family otherwise present in memdebug.c. I put these ones here since they
- * require a bunch of structs I didn't want to include in memdebug.c
- */
-
-int
-curl_dogetaddrinfo(const char *hostname,
- const char *service,
- const struct addrinfo *hints,
- struct addrinfo **result,
- int line, const char *source)
-{
- int res=(getaddrinfo)(hostname, service, hints, result);
- if(0 == res)
- /* success */
- curl_memlog("ADDR %s:%d getaddrinfo() = %p\n",
- source, line, (void *)*result);
- else
- curl_memlog("ADDR %s:%d getaddrinfo() failed\n",
- source, line);
- return res;
-}
-#endif /* defined(CURLDEBUG) && defined(HAVE_GETADDRINFO) */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_addrinfo.h b/external/libcurl_android/jni/libcurl/lib/curl_addrinfo.h
deleted file mode 100755
index 6d2b753e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_addrinfo.h
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef HEADER_CURL_ADDRINFO_H
-#define HEADER_CURL_ADDRINFO_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#ifdef __VMS
-# include <in.h>
-# include <inet.h>
-# include <stdlib.h>
-#endif
-
-
-/*
- * Curl_addrinfo is our internal struct definition that we use to allow
- * consistent internal handling of this data. We use this even when the
- * system provides an addrinfo structure definition. And we use this for
- * all sorts of IPv4 and IPV6 builds.
- */
-
-struct Curl_addrinfo {
- int ai_flags;
- int ai_family;
- int ai_socktype;
- int ai_protocol;
- curl_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */
- char *ai_canonname;
- struct sockaddr *ai_addr;
- struct Curl_addrinfo *ai_next;
-};
-typedef struct Curl_addrinfo Curl_addrinfo;
-
-void
-Curl_freeaddrinfo(Curl_addrinfo *cahead);
-
-#ifdef HAVE_GETADDRINFO
-int
-Curl_getaddrinfo_ex(const char *nodename,
- const char *servname,
- const struct addrinfo *hints,
- Curl_addrinfo **result);
-#endif
-
-Curl_addrinfo *
-Curl_he2ai(const struct hostent *he, int port);
-
-Curl_addrinfo *
-Curl_ip2addr(int af, const void *inaddr, const char *hostname, int port);
-
-Curl_addrinfo *Curl_str2addr(char *dotted, int port);
-
-#if defined(CURLDEBUG) && defined(HAVE_FREEADDRINFO)
-void
-curl_dofreeaddrinfo(struct addrinfo *freethis,
- int line, const char *source);
-#endif
-
-#if defined(CURLDEBUG) && defined(HAVE_GETADDRINFO)
-int
-curl_dogetaddrinfo(const char *hostname,
- const char *service,
- const struct addrinfo *hints,
- struct addrinfo **result,
- int line, const char *source);
-#endif
-
-#endif /* HEADER_CURL_ADDRINFO_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_base64.h b/external/libcurl_android/jni/libcurl/lib/curl_base64.h
deleted file mode 100755
index 92896fec..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_base64.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef HEADER_CURL_BASE64_H
-#define HEADER_CURL_BASE64_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-CURLcode Curl_base64_encode(struct SessionHandle *data,
- const char *inputbuff, size_t insize,
- char **outptr, size_t *outlen);
-CURLcode Curl_base64url_encode(struct SessionHandle *data,
- const char *inputbuff, size_t insize,
- char **outptr, size_t *outlen);
-
-CURLcode Curl_base64_decode(const char *src,
- unsigned char **outptr, size_t *outlen);
-
-#endif /* HEADER_CURL_BASE64_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_config.h b/external/libcurl_android/jni/libcurl/lib/curl_config.h
deleted file mode 100755
index 27ea909b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_config.h
+++ /dev/null
@@ -1,1037 +0,0 @@
-/* lib/curl_config.h. Generated from curl_config.h.in by configure. */
-/* lib/curl_config.h.in. Generated from configure.ac by autoheader. */
-
-/* Location of default ca bundle */
-/* #undef CURL_CA_BUNDLE */
-
-/* Location of default ca path */
-/* #undef CURL_CA_PATH */
-
-/* to disable cookies support */
-/* #undef CURL_DISABLE_COOKIES */
-
-/* to disable cryptographic authentication */
-/* #undef CURL_DISABLE_CRYPTO_AUTH */
-
-/* to disable DICT */
-/* #undef CURL_DISABLE_DICT */
-
-/* to disable FILE */
-/* #undef CURL_DISABLE_FILE */
-
-/* to disable FTP */
-/* #undef CURL_DISABLE_FTP */
-
-/* to disable Gopher */
-/* #undef CURL_DISABLE_GOPHER */
-
-/* to disable HTTP */
-/* #undef CURL_DISABLE_HTTP */
-
-/* to disable IMAP */
-/* #undef CURL_DISABLE_IMAP */
-
-/* to disable LDAP */
-#define CURL_DISABLE_LDAP 1
-
-/* to disable LDAPS */
-#define CURL_DISABLE_LDAPS 1
-
-/* to disable --libcurl C code generation option */
-/* #undef CURL_DISABLE_LIBCURL_OPTION */
-
-/* to disable POP3 */
-/* #undef CURL_DISABLE_POP3 */
-
-/* to disable proxies */
-/* #undef CURL_DISABLE_PROXY */
-
-/* to disable RTSP */
-/* #undef CURL_DISABLE_RTSP */
-
-/* to disable SMTP */
-/* #undef CURL_DISABLE_SMTP */
-
-/* to disable TELNET */
-/* #undef CURL_DISABLE_TELNET */
-
-/* to disable TFTP */
-/* #undef CURL_DISABLE_TFTP */
-
-/* to disable TLS-SRP authentication */
-/* #undef CURL_DISABLE_TLS_SRP */
-
-/* to disable verbose strings */
-/* #undef CURL_DISABLE_VERBOSE_STRINGS */
-
-/* Definition to make a library symbol externally visible. */
-#define CURL_EXTERN_SYMBOL __attribute__ ((__visibility__ ("default")))
-
-/* Use Windows LDAP implementation */
-/* #undef CURL_LDAP_WIN */
-
-/* your Entropy Gathering Daemon socket pathname */
-/* #undef EGD_SOCKET */
-
-/* Define if you want to enable IPv6 support */
-/* #undef ENABLE_IPV6 */
-
-/* Define to the type of arg 2 for gethostname. */
-#define GETHOSTNAME_TYPE_ARG2 unsigned int
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-#define GETNAMEINFO_QUAL_ARG1 const
-
-/* Define to the type of arg 1 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG1 struct sockaddr *
-
-/* Define to the type of arg 2 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG2 socklen_t
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG46 size_t
-
-/* Define to the type of arg 7 for getnameinfo. */
-#define GETNAMEINFO_TYPE_ARG7 int
-
-/* Specifies the number of arguments to getservbyport_r */
-/* #undef GETSERVBYPORT_R_ARGS */
-
-/* Specifies the size of the buffer to pass to getservbyport_r */
-/* #undef GETSERVBYPORT_R_BUFSIZE */
-
-/* Define to 1 if you have the alarm function. */
-#define HAVE_ALARM 1
-
-/* Define to 1 if you have the <alloca.h> header file. */
-#define HAVE_ALLOCA_H 1
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the <arpa/tftp.h> header file. */
-/* #undef HAVE_ARPA_TFTP_H */
-
-/* Define to 1 if you have the <assert.h> header file. */
-#define HAVE_ASSERT_H 1
-
-/* Define to 1 if you have the basename function. */
-#define HAVE_BASENAME 1
-
-/* Define to 1 if bool is an available type. */
-#define HAVE_BOOL_T 1
-
-/* Define to 1 if you have the clock_gettime function and monotonic timer. */
-#define HAVE_CLOCK_GETTIME_MONOTONIC 1
-
-/* Define to 1 if you have the closesocket function. */
-/* #undef HAVE_CLOSESOCKET */
-
-/* Define to 1 if you have the CloseSocket camel case function. */
-/* #undef HAVE_CLOSESOCKET_CAMEL */
-
-/* Define to 1 if you have the connect function. */
-#define HAVE_CONNECT 1
-
-/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
-/* #undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA */
-
-/* Define to 1 if you have the <crypto.h> header file. */
-/* #undef HAVE_CRYPTO_H */
-
-/* Define to 1 if you have the <cyassl/error-ssl.h> header file. */
-/* #undef HAVE_CYASSL_ERROR_SSL_H */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define to 1 if you have the `ENGINE_cleanup' function. */
-/* #undef HAVE_ENGINE_CLEANUP */
-
-/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
-/* #undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES */
-
-/* Define to 1 if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the <err.h> header file. */
-/* #undef HAVE_ERR_H */
-
-/* Define to 1 if you have the fcntl function. */
-#define HAVE_FCNTL 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
-#define HAVE_FCNTL_O_NONBLOCK 1
-
-/* Define to 1 if you have the fdopen function. */
-#define HAVE_FDOPEN 1
-
-/* Define to 1 if you have the `fork' function. */
-#define HAVE_FORK 1
-
-/* Define to 1 if you have the freeaddrinfo function. */
-#define HAVE_FREEADDRINFO 1
-
-/* Define to 1 if you have the freeifaddrs function. */
-/* #undef HAVE_FREEIFADDRS */
-
-/* Define to 1 if you have the fsetxattr function. */
-/* #undef HAVE_FSETXATTR */
-
-/* fsetxattr() takes 5 args */
-/* #undef HAVE_FSETXATTR_5 */
-
-/* fsetxattr() takes 6 args */
-/* #undef HAVE_FSETXATTR_6 */
-
-/* Define to 1 if you have the ftruncate function. */
-#define HAVE_FTRUNCATE 1
-
-/* Define to 1 if you have the gai_strerror function. */
-#define HAVE_GAI_STRERROR 1
-
-/* Define to 1 if you have a working getaddrinfo function. */
-#define HAVE_GETADDRINFO 1
-
-/* Define to 1 if the getaddrinfo function is threadsafe. */
-#define HAVE_GETADDRINFO_THREADSAFE 1
-
-/* Define to 1 if you have the `geteuid' function. */
-#define HAVE_GETEUID 1
-
-/* Define to 1 if you have the gethostbyaddr function. */
-#define HAVE_GETHOSTBYADDR 1
-
-/* Define to 1 if you have the gethostbyaddr_r function. */
-/* #undef HAVE_GETHOSTBYADDR_R */
-
-/* gethostbyaddr_r() takes 5 args */
-/* #undef HAVE_GETHOSTBYADDR_R_5 */
-
-/* gethostbyaddr_r() takes 7 args */
-/* #undef HAVE_GETHOSTBYADDR_R_7 */
-
-/* gethostbyaddr_r() takes 8 args */
-/* #undef HAVE_GETHOSTBYADDR_R_8 */
-
-/* Define to 1 if you have the gethostbyname function. */
-#define HAVE_GETHOSTBYNAME 1
-
-/* Define to 1 if you have the gethostbyname_r function. */
-#define HAVE_GETHOSTBYNAME_R 1
-
-/* gethostbyname_r() takes 3 args */
-/* #undef HAVE_GETHOSTBYNAME_R_3 */
-
-/* gethostbyname_r() takes 5 args */
-/* #undef HAVE_GETHOSTBYNAME_R_5 */
-
-/* gethostbyname_r() takes 6 args */
-#define HAVE_GETHOSTBYNAME_R_6 1
-
-/* Define to 1 if you have the gethostname function. */
-#define HAVE_GETHOSTNAME 1
-
-/* Define to 1 if you have a working getifaddrs function. */
-/* #undef HAVE_GETIFADDRS */
-
-/* Define to 1 if you have the getnameinfo function. */
-#define HAVE_GETNAMEINFO 1
-
-/* Define to 1 if you have the `getpass_r' function. */
-/* #undef HAVE_GETPASS_R */
-
-/* Define to 1 if you have the `getppid' function. */
-#define HAVE_GETPPID 1
-
-/* Define to 1 if you have the `getprotobyname' function. */
-#define HAVE_GETPROTOBYNAME 1
-
-/* Define to 1 if you have the `getpwuid' function. */
-#define HAVE_GETPWUID 1
-
-/* Define to 1 if you have the `getpwuid_r' function. */
-/* #undef HAVE_GETPWUID_R */
-
-/* Define to 1 if you have the `getrlimit' function. */
-#define HAVE_GETRLIMIT 1
-
-/* Define to 1 if you have the getservbyport_r function. */
-/* #undef HAVE_GETSERVBYPORT_R */
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have a working glibc-style strerror_r function. */
-/* #undef HAVE_GLIBC_STRERROR_R */
-
-/* Define to 1 if you have a working gmtime_r function. */
-#define HAVE_GMTIME_R 1
-
-/* if you have the function gnutls_srp_verifier */
-/* #undef HAVE_GNUTLS_SRP */
-
-/* if you have GSS-API libraries */
-/* #undef HAVE_GSSAPI */
-
-/* Define to 1 if you have the <gssapi/gssapi_generic.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_GENERIC_H */
-
-/* Define to 1 if you have the <gssapi/gssapi.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_H */
-
-/* Define to 1 if you have the <gssapi/gssapi_krb5.h> header file. */
-/* #undef HAVE_GSSAPI_GSSAPI_KRB5_H */
-
-/* if you have GNU GSS */
-/* #undef HAVE_GSSGNU */
-
-/* if you have Heimdal */
-/* #undef HAVE_GSSHEIMDAL */
-
-/* if you have MIT Kerberos */
-/* #undef HAVE_GSSMIT */
-
-/* Define to 1 if you have the `idna_strerror' function. */
-/* #undef HAVE_IDNA_STRERROR */
-
-/* Define to 1 if you have the `idn_free' function. */
-/* #undef HAVE_IDN_FREE */
-
-/* Define to 1 if you have the <idn-free.h> header file. */
-/* #undef HAVE_IDN_FREE_H */
-
-/* Define to 1 if you have the <ifaddrs.h> header file. */
-/* #undef HAVE_IFADDRS_H */
-
-/* Define to 1 if you have the `if_nametoindex' function. */
-#define HAVE_IF_NAMETOINDEX 1
-
-/* Define to 1 if you have the `inet_addr' function. */
-#define HAVE_INET_ADDR 1
-
-/* Define to 1 if you have the inet_ntoa_r function. */
-/* #undef HAVE_INET_NTOA_R */
-
-/* inet_ntoa_r() takes 2 args */
-/* #undef HAVE_INET_NTOA_R_2 */
-
-/* inet_ntoa_r() takes 3 args */
-/* #undef HAVE_INET_NTOA_R_3 */
-
-/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
-#define HAVE_INET_NTOP 1
-
-/* Define to 1 if you have a IPv6 capable working inet_pton function. */
-#define HAVE_INET_PTON 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the ioctl function. */
-#define HAVE_IOCTL 1
-
-/* Define to 1 if you have the ioctlsocket function. */
-/* #undef HAVE_IOCTLSOCKET */
-
-/* Define to 1 if you have the IoctlSocket camel case function. */
-/* #undef HAVE_IOCTLSOCKET_CAMEL */
-
-/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
- */
-/* #undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO */
-
-/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
-/* #undef HAVE_IOCTLSOCKET_FIONBIO */
-
-/* Define to 1 if you have a working ioctl FIONBIO function. */
-#define HAVE_IOCTL_FIONBIO 1
-
-/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */
-#define HAVE_IOCTL_SIOCGIFADDR 1
-
-/* Define to 1 if you have the <io.h> header file. */
-/* #undef HAVE_IO_H */
-
-/* Define to 1 if you have the lber.h header file. */
-/* #undef HAVE_LBER_H */
-
-/* Define to 1 if you have the ldapssl.h header file. */
-/* #undef HAVE_LDAPSSL_H */
-
-/* Define to 1 if you have the ldap.h header file. */
-/* #undef HAVE_LDAP_H */
-
-/* Define to 1 if you have the `ldap_init_fd' function. */
-/* #undef HAVE_LDAP_INIT_FD */
-
-/* Use LDAPS implementation */
-#define HAVE_LDAP_SSL 1
-
-/* Define to 1 if you have the ldap_ssl.h header file. */
-/* #undef HAVE_LDAP_SSL_H */
-
-/* Define to 1 if you have the `ldap_url_parse' function. */
-/* #undef HAVE_LDAP_URL_PARSE */
-
-/* Define to 1 if you have the <libgen.h> header file. */
-#define HAVE_LIBGEN_H 1
-
-/* Define to 1 if you have the `idn' library (-lidn). */
-/* #undef HAVE_LIBIDN */
-
-/* Define to 1 if you have the `resolve' library (-lresolve). */
-/* #undef HAVE_LIBRESOLVE */
-
-/* Define to 1 if you have the <librtmp/rtmp.h> header file. */
-/* #undef HAVE_LIBRTMP_RTMP_H */
-
-/* Define to 1 if you have the `ssh2' library (-lssh2). */
-/* #undef HAVE_LIBSSH2 */
-
-/* Define to 1 if you have the `libssh2_exit' function. */
-/* #undef HAVE_LIBSSH2_EXIT */
-
-/* Define to 1 if you have the <libssh2.h> header file. */
-/* #undef HAVE_LIBSSH2_H */
-
-/* Define to 1 if you have the `libssh2_init' function. */
-/* #undef HAVE_LIBSSH2_INIT */
-
-/* Define to 1 if you have the `libssh2_scp_send64' function. */
-/* #undef HAVE_LIBSSH2_SCP_SEND64 */
-
-/* Define to 1 if you have the `libssh2_session_handshake' function. */
-/* #undef HAVE_LIBSSH2_SESSION_HANDSHAKE */
-
-/* Define to 1 if you have the `libssh2_version' function. */
-/* #undef HAVE_LIBSSH2_VERSION */
-
-/* Define to 1 if you have the `ssl' library (-lssl). */
-/* #undef HAVE_LIBSSL */
-
-/* if zlib is available */
-#define HAVE_LIBZ 1
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* if your compiler supports LL */
-#define HAVE_LL 1
-
-/* Define to 1 if you have the <locale.h> header file. */
-#define HAVE_LOCALE_H 1
-
-/* Define to 1 if you have a working localtime_r function. */
-#define HAVE_LOCALTIME_R 1
-
-/* Define to 1 if the compiler supports the 'long long' data type. */
-#define HAVE_LONGLONG 1
-
-/* Define to 1 if you have the malloc.h header file. */
-#define HAVE_MALLOC_H 1
-
-/* Define to 1 if you have the memory.h header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the memrchr function or macro. */
-#define HAVE_MEMRCHR 1
-
-/* Define to 1 if you have the MSG_NOSIGNAL flag. */
-#define HAVE_MSG_NOSIGNAL 1
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-#define HAVE_NETINET_TCP_H 1
-
-/* Define to 1 if you have the <net/if.h> header file. */
-#define HAVE_NET_IF_H 1
-
-/* Define to 1 if you have the <nghttp2/nghttp2.h> header file. */
-/* #undef HAVE_NGHTTP2_NGHTTP2_H */
-
-/* Define to 1 if NI_WITHSCOPEID exists and works. */
-/* #undef HAVE_NI_WITHSCOPEID */
-
-/* if you have an old MIT Kerberos version, lacking GSS_C_NT_HOSTBASED_SERVICE
- */
-/* #undef HAVE_OLD_GSSMIT */
-
-/* Define to 1 if you have the <openssl/crypto.h> header file. */
-/* #undef HAVE_OPENSSL_CRYPTO_H */
-
-/* Define to 1 if you have the <openssl/engine.h> header file. */
-/* #undef HAVE_OPENSSL_ENGINE_H */
-
-/* Define to 1 if you have the <openssl/err.h> header file. */
-/* #undef HAVE_OPENSSL_ERR_H */
-
-/* Define to 1 if you have the <openssl/pem.h> header file. */
-/* #undef HAVE_OPENSSL_PEM_H */
-
-/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
-/* #undef HAVE_OPENSSL_PKCS12_H */
-
-/* Define to 1 if you have the <openssl/rsa.h> header file. */
-/* #undef HAVE_OPENSSL_RSA_H */
-
-/* Define to 1 if you have the <openssl/ssl.h> header file. */
-/* #undef HAVE_OPENSSL_SSL_H */
-
-/* Define to 1 if you have the <openssl/x509.h> header file. */
-/* #undef HAVE_OPENSSL_X509_H */
-
-/* Define to 1 if you have the <pem.h> header file. */
-/* #undef HAVE_PEM_H */
-
-/* Define to 1 if you have the `perror' function. */
-#define HAVE_PERROR 1
-
-/* Define to 1 if you have the `pipe' function. */
-#define HAVE_PIPE 1
-
-/* Define to 1 if you have a working poll function. */
-#define HAVE_POLL 1
-
-/* If you have a fine poll */
-#define HAVE_POLL_FINE 1
-
-/* Define to 1 if you have the <poll.h> header file. */
-#define HAVE_POLL_H 1
-
-/* Define to 1 if you have a working POSIX-style strerror_r function. */
-#define HAVE_POSIX_STRERROR_R 1
-
-/* if you have <pthread.h> */
-/* #undef HAVE_PTHREAD_H */
-
-/* Define to 1 if you have the <pwd.h> header file. */
-#define HAVE_PWD_H 1
-
-/* Define to 1 if you have the `RAND_egd' function. */
-/* #undef HAVE_RAND_EGD */
-
-/* Define to 1 if you have the `RAND_screen' function. */
-/* #undef HAVE_RAND_SCREEN */
-
-/* Define to 1 if you have the `RAND_status' function. */
-/* #undef HAVE_RAND_STATUS */
-
-/* Define to 1 if you have the recv function. */
-#define HAVE_RECV 1
-
-/* Define to 1 if you have the <rsa.h> header file. */
-/* #undef HAVE_RSA_H */
-
-/* Define to 1 if you have the select function. */
-#define HAVE_SELECT 1
-
-/* Define to 1 if you have the send function. */
-#define HAVE_SEND 1
-
-/* Define to 1 if you have the <setjmp.h> header file. */
-#define HAVE_SETJMP_H 1
-
-/* Define to 1 if you have the `setlocale' function. */
-#define HAVE_SETLOCALE 1
-
-/* Define to 1 if you have the `setmode' function. */
-/* #undef HAVE_SETMODE */
-
-/* Define to 1 if you have the `setrlimit' function. */
-#define HAVE_SETRLIMIT 1
-
-/* Define to 1 if you have the setsockopt function. */
-#define HAVE_SETSOCKOPT 1
-
-/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
-/* #undef HAVE_SETSOCKOPT_SO_NONBLOCK */
-
-/* Define to 1 if you have the <sgtty.h> header file. */
-#define HAVE_SGTTY_H 1
-
-/* Define to 1 if you have the sigaction function. */
-#define HAVE_SIGACTION 1
-
-/* Define to 1 if you have the siginterrupt function. */
-#define HAVE_SIGINTERRUPT 1
-
-/* Define to 1 if you have the signal function. */
-/* #undef HAVE_SIGNAL */
-
-/* Define to 1 if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define to 1 if you have the sigsetjmp function or macro. */
-#define HAVE_SIGSETJMP 1
-
-/* Define to 1 if sig_atomic_t is an available typedef. */
-#define HAVE_SIG_ATOMIC_T 1
-
-/* Define to 1 if sig_atomic_t is already defined as volatile. */
-/* #undef HAVE_SIG_ATOMIC_T_VOLATILE */
-
-/* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */
-/* #undef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID */
-
-/* Define to 1 if you have the socket function. */
-#define HAVE_SOCKET 1
-
-/* Define to 1 if you have the socketpair function. */
-#define HAVE_SOCKETPAIR 1
-
-/* Define to 1 if you have the <socket.h> header file. */
-/* #undef HAVE_SOCKET_H */
-
-/* if you have the function SRP_Calc_client_key */
-/* #undef HAVE_SSLEAY_SRP */
-
-/* Define to 1 if you have the `SSLv2_client_method' function. */
-/* #undef HAVE_SSLV2_CLIENT_METHOD */
-
-/* Define to 1 if you have the `SSL_CTX_set_alpn_protos' function. */
-/* #undef HAVE_SSL_CTX_SET_ALPN_PROTOS */
-
-/* Define to 1 if you have the `SSL_CTX_set_alpn_select_cb' function. */
-/* #undef HAVE_SSL_CTX_SET_ALPN_SELECT_CB */
-
-/* Define to 1 if you have the `SSL_CTX_set_next_proto_select_cb' function. */
-/* #undef HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB */
-
-/* Define to 1 if you have the `SSL_get_shutdown' function. */
-/* #undef HAVE_SSL_GET_SHUTDOWN */
-
-/* Define to 1 if you have the <ssl.h> header file. */
-/* #undef HAVE_SSL_H */
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-#define HAVE_STDBOOL_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdio.h> header file. */
-#define HAVE_STDIO_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the strcasecmp function. */
-#define HAVE_STRCASECMP 1
-
-/* Define to 1 if you have the strcmpi function. */
-/* #undef HAVE_STRCMPI */
-
-/* Define to 1 if you have the strdup function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the strerror_r function. */
-#define HAVE_STRERROR_R 1
-
-/* Define to 1 if you have the stricmp function. */
-/* #undef HAVE_STRICMP */
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the strncasecmp function. */
-#define HAVE_STRNCASECMP 1
-
-/* Define to 1 if you have the strncmpi function. */
-/* #undef HAVE_STRNCMPI */
-
-/* Define to 1 if you have the strnicmp function. */
-/* #undef HAVE_STRNICMP */
-
-/* Define to 1 if you have the <stropts.h> header file. */
-/* #undef HAVE_STROPTS_H */
-
-/* Define to 1 if you have the strstr function. */
-#define HAVE_STRSTR 1
-
-/* Define to 1 if you have the strtok_r function. */
-#define HAVE_STRTOK_R 1
-
-/* Define to 1 if you have the strtoll function. */
-#define HAVE_STRTOLL 1
-
-/* if struct sockaddr_storage is defined */
-#define HAVE_STRUCT_SOCKADDR_STORAGE 1
-
-/* Define to 1 if you have the timeval struct. */
-#define HAVE_STRUCT_TIMEVAL 1
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-/* #undef HAVE_SYS_FILIO_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/poll.h> header file. */
-#define HAVE_SYS_POLL_H 1
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#define HAVE_SYS_RESOURCE_H 1
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/sockio.h> header file. */
-/* #undef HAVE_SYS_SOCKIO_H */
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define HAVE_SYS_UIO_H 1
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-#define HAVE_SYS_UN_H 1
-
-/* Define to 1 if you have the <sys/utime.h> header file. */
-#define HAVE_SYS_UTIME_H 1
-
-/* Define to 1 if you have the <sys/wait.h> header file. */
-#define HAVE_SYS_WAIT_H 1
-
-/* Define to 1 if you have the <sys/xattr.h> header file. */
-/* #undef HAVE_SYS_XATTR_H */
-
-/* Define to 1 if you have the <termios.h> header file. */
-#define HAVE_TERMIOS_H 1
-
-/* Define to 1 if you have the <termio.h> header file. */
-#define HAVE_TERMIO_H 1
-
-/* Define to 1 if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define to 1 if you have the <tld.h> header file. */
-/* #undef HAVE_TLD_H */
-
-/* Define to 1 if you have the `tld_strerror' function. */
-/* #undef HAVE_TLD_STRERROR */
-
-/* Define to 1 if you have the `uname' function. */
-#define HAVE_UNAME 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `utime' function. */
-#define HAVE_UTIME 1
-
-/* Define to 1 if you have the <utime.h> header file. */
-#define HAVE_UTIME_H 1
-
-/* Define to 1 if compiler supports C99 variadic macro style. */
-#define HAVE_VARIADIC_MACROS_C99 1
-
-/* Define to 1 if compiler supports old gcc variadic macro style. */
-#define HAVE_VARIADIC_MACROS_GCC 1
-
-/* Define to 1 if you have the winber.h header file. */
-/* #undef HAVE_WINBER_H */
-
-/* Define to 1 if you have the windows.h header file. */
-/* #undef HAVE_WINDOWS_H */
-
-/* Define to 1 if you have the winldap.h header file. */
-/* #undef HAVE_WINLDAP_H */
-
-/* Define to 1 if you have the winsock2.h header file. */
-/* #undef HAVE_WINSOCK2_H */
-
-/* Define to 1 if you have the winsock.h header file. */
-/* #undef HAVE_WINSOCK_H */
-
-/* Define this symbol if your OS supports changing the contents of argv */
-/* #undef HAVE_WRITABLE_ARGV */
-
-/* Define to 1 if you have the writev function. */
-#define HAVE_WRITEV 1
-
-/* Define to 1 if you have the ws2tcpip.h header file. */
-/* #undef HAVE_WS2TCPIP_H */
-
-/* Define to 1 if you have the <x509.h> header file. */
-/* #undef HAVE_X509_H */
-
-/* if you have the zlib.h header file */
-#define HAVE_ZLIB_H 1
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define LT_OBJDIR ".libs/"
-
-/* Define to 1 if you need the lber.h header file even with ldap.h */
-/* #undef NEED_LBER_H */
-
-/* Define to 1 if you need the malloc.h header file even with stdlib.h */
-/* #undef NEED_MALLOC_H */
-
-/* Define to 1 if you need the memory.h header file even with stdlib.h */
-/* #undef NEED_MEMORY_H */
-
-/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
-/* #undef NEED_REENTRANT */
-
-/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
-/* #undef NEED_THREAD_SAFE */
-
-/* Define to enable NTLM delegation to winbind's ntlm_auth helper. */
-/* #undef NTLM_WB_ENABLED */
-
-/* Define absolute filename for winbind's ntlm_auth helper. */
-/* #undef NTLM_WB_FILE */
-
-/* cpu-machine-OS */
-#define OS "arm-unknown-none"
-
-/* Name of package */
-#define PACKAGE "curl"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT "a suitable curl mailing list: http://curl.haxx.se/mail/"
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME "curl"
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "curl -"
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME "curl"
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION "-"
-
-/* a suitable file to read random data from */
-/* #undef RANDOM_FILE */
-
-/* Define to the type of arg 1 for recv. */
-#define RECV_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for recv. */
-#define RECV_TYPE_ARG2 void *
-
-/* Define to the type of arg 3 for recv. */
-#define RECV_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for recv. */
-#define RECV_TYPE_ARG4 unsigned int
-
-/* Define to the function return type for recv. */
-#define RECV_TYPE_RETV int
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#define RETSIGTYPE void
-
-/* Define to the type qualifier of arg 5 for select. */
-#define SELECT_QUAL_ARG5
-
-/* Define to the type of arg 1 for select. */
-#define SELECT_TYPE_ARG1 int
-
-/* Define to the type of args 2, 3 and 4 for select. */
-#define SELECT_TYPE_ARG234 fd_set *
-
-/* Define to the type of arg 5 for select. */
-#define SELECT_TYPE_ARG5 struct timeval *
-
-/* Define to the function return type for select. */
-#define SELECT_TYPE_RETV int
-
-/* Define to the type qualifier of arg 2 for send. */
-#define SEND_QUAL_ARG2 const
-
-/* Define to the type of arg 1 for send. */
-#define SEND_TYPE_ARG1 int
-
-/* Define to the type of arg 2 for send. */
-#define SEND_TYPE_ARG2 void *
-
-/* Define to the type of arg 3 for send. */
-#define SEND_TYPE_ARG3 size_t
-
-/* Define to the type of arg 4 for send. */
-#define SEND_TYPE_ARG4 unsigned int
-
-/* Define to the function return type for send. */
-#define SEND_TYPE_RETV int
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `long', as computed by sizeof. */
-#define SIZEOF_LONG 4
-
-/* The size of `long long', as computed by sizeof. */
-/* #undef SIZEOF_LONG_LONG */
-
-/* The size of `off_t', as computed by sizeof. */
-#define SIZEOF_OFF_T 4
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 4
-
-/* The size of `time_t', as computed by sizeof. */
-#define SIZEOF_TIME_T 4
-
-/* The size of `void*', as computed by sizeof. */
-#define SIZEOF_VOIDP 4
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to the type of arg 3 for strerror_r. */
-#define STRERROR_R_TYPE_ARG3 size_t
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
-/* Define to enable c-ares support */
-/* #undef USE_ARES */
-
-/* if axTLS is enabled */
-/* #undef USE_AXTLS */
-
-/* if CyaSSL is enabled */
-/* #undef USE_CYASSL */
-
-/* to enable iOS/Mac OS X native SSL/TLS support */
-/* #undef USE_DARWINSSL */
-
-/* if GnuTLS is enabled */
-/* #undef USE_GNUTLS */
-
-/* if GnuTLS uses nettle as crypto backend */
-/* #undef USE_GNUTLS_NETTLE */
-
-/* if librtmp is in use */
-/* #undef USE_LIBRTMP */
-
-/* if libSSH2 is in use */
-/* #undef USE_LIBSSH2 */
-
-/* If you want to build curl with the built-in manual */
-#define USE_MANUAL 1
-
-/* Define to enable metalink support */
-/* #undef USE_METALINK */
-
-/* if nghttp2 is in use */
-/* #undef USE_NGHTTP2 */
-
-/* if NSS is enabled */
-/* #undef USE_NSS */
-
-/* Use OpenLDAP-specific code */
-/* #undef USE_OPENLDAP */
-
-/* if OpenSSL is in use */
-/* #undef USE_OPENSSL */
-
-/* if PolarSSL is enabled */
-/* #undef USE_POLARSSL */
-
-/* to enable Windows native SSL/TLS support */
-/* #undef USE_SCHANNEL */
-
-/* if SSL is enabled */
-/* #undef USE_SSLEAY */
-
-/* if you want POSIX threaded DNS lookup */
-/* #undef USE_THREADS_POSIX */
-
-/* Use TLS-SRP authentication */
-/* #undef USE_TLS_SRP */
-
-/* Define to 1 if you have the `normaliz' (WinIDN) library (-lnormaliz). */
-/* #undef USE_WIN32_IDN */
-
-/* Define to 1 if you are building a Windows target with large file support.
- */
-/* #undef USE_WIN32_LARGE_FILES */
-
-/* Define to 1 if you are building a Windows target without large file
- support. */
-/* #undef USE_WIN32_SMALL_FILES */
-
-/* to enable SSPI support */
-/* #undef USE_WINDOWS_SSPI */
-
-/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
-/* #undef USE_YASSLEMUL */
-
-/* Version number of package */
-#define VERSION "-"
-
-/* Define to 1 to provide own prototypes. */
-/* #undef WANT_IDN_PROTOTYPES */
-
-/* Define to avoid automatic inclusion of winsock.h */
-/* #undef WIN32_LEAN_AND_MEAN */
-
-/* Define to 1 if OS is AIX. */
-#ifndef _ALL_SOURCE
-/* # undef _ALL_SOURCE */
-#endif
-
-/* Enable large inode numbers on Mac OS X 10.5. */
-#ifndef _DARWIN_USE_64_BIT_INODE
-# define _DARWIN_USE_64_BIT_INODE 1
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-/* #undef _FILE_OFFSET_BITS */
-
-/* Define for large files, on AIX-style hosts. */
-/* #undef _LARGE_FILES */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Type to use in place of in_addr_t when system does not provide it. */
-/* #undef in_addr_t */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-/* the signed version of size_t */
-/* #undef ssize_t */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_config.h.in b/external/libcurl_android/jni/libcurl/lib/curl_config.h.in
deleted file mode 100755
index 8273c326..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_config.h.in
+++ /dev/null
@@ -1,1036 +0,0 @@
-/* lib/curl_config.h.in. Generated from configure.ac by autoheader. */
-
-/* Location of default ca bundle */
-#undef CURL_CA_BUNDLE
-
-/* Location of default ca path */
-#undef CURL_CA_PATH
-
-/* to disable cookies support */
-#undef CURL_DISABLE_COOKIES
-
-/* to disable cryptographic authentication */
-#undef CURL_DISABLE_CRYPTO_AUTH
-
-/* to disable DICT */
-#undef CURL_DISABLE_DICT
-
-/* to disable FILE */
-#undef CURL_DISABLE_FILE
-
-/* to disable FTP */
-#undef CURL_DISABLE_FTP
-
-/* to disable Gopher */
-#undef CURL_DISABLE_GOPHER
-
-/* to disable HTTP */
-#undef CURL_DISABLE_HTTP
-
-/* to disable IMAP */
-#undef CURL_DISABLE_IMAP
-
-/* to disable LDAP */
-#undef CURL_DISABLE_LDAP
-
-/* to disable LDAPS */
-#undef CURL_DISABLE_LDAPS
-
-/* to disable --libcurl C code generation option */
-#undef CURL_DISABLE_LIBCURL_OPTION
-
-/* to disable POP3 */
-#undef CURL_DISABLE_POP3
-
-/* to disable proxies */
-#undef CURL_DISABLE_PROXY
-
-/* to disable RTSP */
-#undef CURL_DISABLE_RTSP
-
-/* to disable SMTP */
-#undef CURL_DISABLE_SMTP
-
-/* to disable TELNET */
-#undef CURL_DISABLE_TELNET
-
-/* to disable TFTP */
-#undef CURL_DISABLE_TFTP
-
-/* to disable TLS-SRP authentication */
-#undef CURL_DISABLE_TLS_SRP
-
-/* to disable verbose strings */
-#undef CURL_DISABLE_VERBOSE_STRINGS
-
-/* Definition to make a library symbol externally visible. */
-#undef CURL_EXTERN_SYMBOL
-
-/* Use Windows LDAP implementation */
-#undef CURL_LDAP_WIN
-
-/* your Entropy Gathering Daemon socket pathname */
-#undef EGD_SOCKET
-
-/* Define if you want to enable IPv6 support */
-#undef ENABLE_IPV6
-
-/* Define to the type of arg 2 for gethostname. */
-#undef GETHOSTNAME_TYPE_ARG2
-
-/* Define to the type qualifier of arg 1 for getnameinfo. */
-#undef GETNAMEINFO_QUAL_ARG1
-
-/* Define to the type of arg 1 for getnameinfo. */
-#undef GETNAMEINFO_TYPE_ARG1
-
-/* Define to the type of arg 2 for getnameinfo. */
-#undef GETNAMEINFO_TYPE_ARG2
-
-/* Define to the type of args 4 and 6 for getnameinfo. */
-#undef GETNAMEINFO_TYPE_ARG46
-
-/* Define to the type of arg 7 for getnameinfo. */
-#undef GETNAMEINFO_TYPE_ARG7
-
-/* Specifies the number of arguments to getservbyport_r */
-#undef GETSERVBYPORT_R_ARGS
-
-/* Specifies the size of the buffer to pass to getservbyport_r */
-#undef GETSERVBYPORT_R_BUFSIZE
-
-/* Define to 1 if you have the alarm function. */
-#undef HAVE_ALARM
-
-/* Define to 1 if you have the <alloca.h> header file. */
-#undef HAVE_ALLOCA_H
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#undef HAVE_ARPA_INET_H
-
-/* Define to 1 if you have the <arpa/tftp.h> header file. */
-#undef HAVE_ARPA_TFTP_H
-
-/* Define to 1 if you have the <assert.h> header file. */
-#undef HAVE_ASSERT_H
-
-/* Define to 1 if you have the basename function. */
-#undef HAVE_BASENAME
-
-/* Define to 1 if bool is an available type. */
-#undef HAVE_BOOL_T
-
-/* Define to 1 if you have the clock_gettime function and monotonic timer. */
-#undef HAVE_CLOCK_GETTIME_MONOTONIC
-
-/* Define to 1 if you have the closesocket function. */
-#undef HAVE_CLOSESOCKET
-
-/* Define to 1 if you have the CloseSocket camel case function. */
-#undef HAVE_CLOSESOCKET_CAMEL
-
-/* Define to 1 if you have the connect function. */
-#undef HAVE_CONNECT
-
-/* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */
-#undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
-
-/* Define to 1 if you have the <crypto.h> header file. */
-#undef HAVE_CRYPTO_H
-
-/* Define to 1 if you have the <cyassl/error-ssl.h> header file. */
-#undef HAVE_CYASSL_ERROR_SSL_H
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the `ENGINE_cleanup' function. */
-#undef HAVE_ENGINE_CLEANUP
-
-/* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */
-#undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES
-
-/* Define to 1 if you have the <errno.h> header file. */
-#undef HAVE_ERRNO_H
-
-/* Define to 1 if you have the <err.h> header file. */
-#undef HAVE_ERR_H
-
-/* Define to 1 if you have the fcntl function. */
-#undef HAVE_FCNTL
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have a working fcntl O_NONBLOCK function. */
-#undef HAVE_FCNTL_O_NONBLOCK
-
-/* Define to 1 if you have the fdopen function. */
-#undef HAVE_FDOPEN
-
-/* Define to 1 if you have the `fork' function. */
-#undef HAVE_FORK
-
-/* Define to 1 if you have the freeaddrinfo function. */
-#undef HAVE_FREEADDRINFO
-
-/* Define to 1 if you have the freeifaddrs function. */
-#undef HAVE_FREEIFADDRS
-
-/* Define to 1 if you have the fsetxattr function. */
-#undef HAVE_FSETXATTR
-
-/* fsetxattr() takes 5 args */
-#undef HAVE_FSETXATTR_5
-
-/* fsetxattr() takes 6 args */
-#undef HAVE_FSETXATTR_6
-
-/* Define to 1 if you have the ftruncate function. */
-#undef HAVE_FTRUNCATE
-
-/* Define to 1 if you have the gai_strerror function. */
-#undef HAVE_GAI_STRERROR
-
-/* Define to 1 if you have a working getaddrinfo function. */
-#undef HAVE_GETADDRINFO
-
-/* Define to 1 if the getaddrinfo function is threadsafe. */
-#undef HAVE_GETADDRINFO_THREADSAFE
-
-/* Define to 1 if you have the `geteuid' function. */
-#undef HAVE_GETEUID
-
-/* Define to 1 if you have the gethostbyaddr function. */
-#undef HAVE_GETHOSTBYADDR
-
-/* Define to 1 if you have the gethostbyaddr_r function. */
-#undef HAVE_GETHOSTBYADDR_R
-
-/* gethostbyaddr_r() takes 5 args */
-#undef HAVE_GETHOSTBYADDR_R_5
-
-/* gethostbyaddr_r() takes 7 args */
-#undef HAVE_GETHOSTBYADDR_R_7
-
-/* gethostbyaddr_r() takes 8 args */
-#undef HAVE_GETHOSTBYADDR_R_8
-
-/* Define to 1 if you have the gethostbyname function. */
-#undef HAVE_GETHOSTBYNAME
-
-/* Define to 1 if you have the gethostbyname_r function. */
-#undef HAVE_GETHOSTBYNAME_R
-
-/* gethostbyname_r() takes 3 args */
-#undef HAVE_GETHOSTBYNAME_R_3
-
-/* gethostbyname_r() takes 5 args */
-#undef HAVE_GETHOSTBYNAME_R_5
-
-/* gethostbyname_r() takes 6 args */
-#undef HAVE_GETHOSTBYNAME_R_6
-
-/* Define to 1 if you have the gethostname function. */
-#undef HAVE_GETHOSTNAME
-
-/* Define to 1 if you have a working getifaddrs function. */
-#undef HAVE_GETIFADDRS
-
-/* Define to 1 if you have the getnameinfo function. */
-#undef HAVE_GETNAMEINFO
-
-/* Define to 1 if you have the `getpass_r' function. */
-#undef HAVE_GETPASS_R
-
-/* Define to 1 if you have the `getppid' function. */
-#undef HAVE_GETPPID
-
-/* Define to 1 if you have the `getprotobyname' function. */
-#undef HAVE_GETPROTOBYNAME
-
-/* Define to 1 if you have the `getpwuid' function. */
-#undef HAVE_GETPWUID
-
-/* Define to 1 if you have the `getpwuid_r' function. */
-#undef HAVE_GETPWUID_R
-
-/* Define to 1 if you have the `getrlimit' function. */
-#undef HAVE_GETRLIMIT
-
-/* Define to 1 if you have the getservbyport_r function. */
-#undef HAVE_GETSERVBYPORT_R
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define to 1 if you have a working glibc-style strerror_r function. */
-#undef HAVE_GLIBC_STRERROR_R
-
-/* Define to 1 if you have a working gmtime_r function. */
-#undef HAVE_GMTIME_R
-
-/* if you have the function gnutls_srp_verifier */
-#undef HAVE_GNUTLS_SRP
-
-/* if you have GSS-API libraries */
-#undef HAVE_GSSAPI
-
-/* Define to 1 if you have the <gssapi/gssapi_generic.h> header file. */
-#undef HAVE_GSSAPI_GSSAPI_GENERIC_H
-
-/* Define to 1 if you have the <gssapi/gssapi.h> header file. */
-#undef HAVE_GSSAPI_GSSAPI_H
-
-/* Define to 1 if you have the <gssapi/gssapi_krb5.h> header file. */
-#undef HAVE_GSSAPI_GSSAPI_KRB5_H
-
-/* if you have GNU GSS */
-#undef HAVE_GSSGNU
-
-/* if you have Heimdal */
-#undef HAVE_GSSHEIMDAL
-
-/* if you have MIT Kerberos */
-#undef HAVE_GSSMIT
-
-/* Define to 1 if you have the `idna_strerror' function. */
-#undef HAVE_IDNA_STRERROR
-
-/* Define to 1 if you have the `idn_free' function. */
-#undef HAVE_IDN_FREE
-
-/* Define to 1 if you have the <idn-free.h> header file. */
-#undef HAVE_IDN_FREE_H
-
-/* Define to 1 if you have the <ifaddrs.h> header file. */
-#undef HAVE_IFADDRS_H
-
-/* Define to 1 if you have the `if_nametoindex' function. */
-#undef HAVE_IF_NAMETOINDEX
-
-/* Define to 1 if you have the `inet_addr' function. */
-#undef HAVE_INET_ADDR
-
-/* Define to 1 if you have the inet_ntoa_r function. */
-#undef HAVE_INET_NTOA_R
-
-/* inet_ntoa_r() takes 2 args */
-#undef HAVE_INET_NTOA_R_2
-
-/* inet_ntoa_r() takes 3 args */
-#undef HAVE_INET_NTOA_R_3
-
-/* Define to 1 if you have a IPv6 capable working inet_ntop function. */
-#undef HAVE_INET_NTOP
-
-/* Define to 1 if you have a IPv6 capable working inet_pton function. */
-#undef HAVE_INET_PTON
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the ioctl function. */
-#undef HAVE_IOCTL
-
-/* Define to 1 if you have the ioctlsocket function. */
-#undef HAVE_IOCTLSOCKET
-
-/* Define to 1 if you have the IoctlSocket camel case function. */
-#undef HAVE_IOCTLSOCKET_CAMEL
-
-/* Define to 1 if you have a working IoctlSocket camel case FIONBIO function.
- */
-#undef HAVE_IOCTLSOCKET_CAMEL_FIONBIO
-
-/* Define to 1 if you have a working ioctlsocket FIONBIO function. */
-#undef HAVE_IOCTLSOCKET_FIONBIO
-
-/* Define to 1 if you have a working ioctl FIONBIO function. */
-#undef HAVE_IOCTL_FIONBIO
-
-/* Define to 1 if you have a working ioctl SIOCGIFADDR function. */
-#undef HAVE_IOCTL_SIOCGIFADDR
-
-/* Define to 1 if you have the <io.h> header file. */
-#undef HAVE_IO_H
-
-/* Define to 1 if you have the lber.h header file. */
-#undef HAVE_LBER_H
-
-/* Define to 1 if you have the ldapssl.h header file. */
-#undef HAVE_LDAPSSL_H
-
-/* Define to 1 if you have the ldap.h header file. */
-#undef HAVE_LDAP_H
-
-/* Define to 1 if you have the `ldap_init_fd' function. */
-#undef HAVE_LDAP_INIT_FD
-
-/* Use LDAPS implementation */
-#undef HAVE_LDAP_SSL
-
-/* Define to 1 if you have the ldap_ssl.h header file. */
-#undef HAVE_LDAP_SSL_H
-
-/* Define to 1 if you have the `ldap_url_parse' function. */
-#undef HAVE_LDAP_URL_PARSE
-
-/* Define to 1 if you have the <libgen.h> header file. */
-#undef HAVE_LIBGEN_H
-
-/* Define to 1 if you have the `idn' library (-lidn). */
-#undef HAVE_LIBIDN
-
-/* Define to 1 if you have the `resolve' library (-lresolve). */
-#undef HAVE_LIBRESOLVE
-
-/* Define to 1 if you have the <librtmp/rtmp.h> header file. */
-#undef HAVE_LIBRTMP_RTMP_H
-
-/* Define to 1 if you have the `ssh2' library (-lssh2). */
-#undef HAVE_LIBSSH2
-
-/* Define to 1 if you have the `libssh2_exit' function. */
-#undef HAVE_LIBSSH2_EXIT
-
-/* Define to 1 if you have the <libssh2.h> header file. */
-#undef HAVE_LIBSSH2_H
-
-/* Define to 1 if you have the `libssh2_init' function. */
-#undef HAVE_LIBSSH2_INIT
-
-/* Define to 1 if you have the `libssh2_scp_send64' function. */
-#undef HAVE_LIBSSH2_SCP_SEND64
-
-/* Define to 1 if you have the `libssh2_session_handshake' function. */
-#undef HAVE_LIBSSH2_SESSION_HANDSHAKE
-
-/* Define to 1 if you have the `libssh2_version' function. */
-#undef HAVE_LIBSSH2_VERSION
-
-/* Define to 1 if you have the `ssl' library (-lssl). */
-#undef HAVE_LIBSSL
-
-/* if zlib is available */
-#undef HAVE_LIBZ
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* if your compiler supports LL */
-#undef HAVE_LL
-
-/* Define to 1 if you have the <locale.h> header file. */
-#undef HAVE_LOCALE_H
-
-/* Define to 1 if you have a working localtime_r function. */
-#undef HAVE_LOCALTIME_R
-
-/* Define to 1 if the compiler supports the 'long long' data type. */
-#undef HAVE_LONGLONG
-
-/* Define to 1 if you have the malloc.h header file. */
-#undef HAVE_MALLOC_H
-
-/* Define to 1 if you have the memory.h header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the memrchr function or macro. */
-#undef HAVE_MEMRCHR
-
-/* Define to 1 if you have the MSG_NOSIGNAL flag. */
-#undef HAVE_MSG_NOSIGNAL
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#undef HAVE_NETDB_H
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#undef HAVE_NETINET_IN_H
-
-/* Define to 1 if you have the <netinet/tcp.h> header file. */
-#undef HAVE_NETINET_TCP_H
-
-/* Define to 1 if you have the <net/if.h> header file. */
-#undef HAVE_NET_IF_H
-
-/* Define to 1 if you have the <nghttp2/nghttp2.h> header file. */
-#undef HAVE_NGHTTP2_NGHTTP2_H
-
-/* Define to 1 if NI_WITHSCOPEID exists and works. */
-#undef HAVE_NI_WITHSCOPEID
-
-/* if you have an old MIT Kerberos version, lacking GSS_C_NT_HOSTBASED_SERVICE
- */
-#undef HAVE_OLD_GSSMIT
-
-/* Define to 1 if you have the <openssl/crypto.h> header file. */
-#undef HAVE_OPENSSL_CRYPTO_H
-
-/* Define to 1 if you have the <openssl/engine.h> header file. */
-#undef HAVE_OPENSSL_ENGINE_H
-
-/* Define to 1 if you have the <openssl/err.h> header file. */
-#undef HAVE_OPENSSL_ERR_H
-
-/* Define to 1 if you have the <openssl/pem.h> header file. */
-#undef HAVE_OPENSSL_PEM_H
-
-/* Define to 1 if you have the <openssl/pkcs12.h> header file. */
-#undef HAVE_OPENSSL_PKCS12_H
-
-/* Define to 1 if you have the <openssl/rsa.h> header file. */
-#undef HAVE_OPENSSL_RSA_H
-
-/* Define to 1 if you have the <openssl/ssl.h> header file. */
-#undef HAVE_OPENSSL_SSL_H
-
-/* Define to 1 if you have the <openssl/x509.h> header file. */
-#undef HAVE_OPENSSL_X509_H
-
-/* Define to 1 if you have the <pem.h> header file. */
-#undef HAVE_PEM_H
-
-/* Define to 1 if you have the `perror' function. */
-#undef HAVE_PERROR
-
-/* Define to 1 if you have the `pipe' function. */
-#undef HAVE_PIPE
-
-/* Define to 1 if you have a working poll function. */
-#undef HAVE_POLL
-
-/* If you have a fine poll */
-#undef HAVE_POLL_FINE
-
-/* Define to 1 if you have the <poll.h> header file. */
-#undef HAVE_POLL_H
-
-/* Define to 1 if you have a working POSIX-style strerror_r function. */
-#undef HAVE_POSIX_STRERROR_R
-
-/* if you have <pthread.h> */
-#undef HAVE_PTHREAD_H
-
-/* Define to 1 if you have the <pwd.h> header file. */
-#undef HAVE_PWD_H
-
-/* Define to 1 if you have the `RAND_egd' function. */
-#undef HAVE_RAND_EGD
-
-/* Define to 1 if you have the `RAND_screen' function. */
-#undef HAVE_RAND_SCREEN
-
-/* Define to 1 if you have the `RAND_status' function. */
-#undef HAVE_RAND_STATUS
-
-/* Define to 1 if you have the recv function. */
-#undef HAVE_RECV
-
-/* Define to 1 if you have the <rsa.h> header file. */
-#undef HAVE_RSA_H
-
-/* Define to 1 if you have the select function. */
-#undef HAVE_SELECT
-
-/* Define to 1 if you have the send function. */
-#undef HAVE_SEND
-
-/* Define to 1 if you have the <setjmp.h> header file. */
-#undef HAVE_SETJMP_H
-
-/* Define to 1 if you have the `setlocale' function. */
-#undef HAVE_SETLOCALE
-
-/* Define to 1 if you have the `setmode' function. */
-#undef HAVE_SETMODE
-
-/* Define to 1 if you have the `setrlimit' function. */
-#undef HAVE_SETRLIMIT
-
-/* Define to 1 if you have the setsockopt function. */
-#undef HAVE_SETSOCKOPT
-
-/* Define to 1 if you have a working setsockopt SO_NONBLOCK function. */
-#undef HAVE_SETSOCKOPT_SO_NONBLOCK
-
-/* Define to 1 if you have the <sgtty.h> header file. */
-#undef HAVE_SGTTY_H
-
-/* Define to 1 if you have the sigaction function. */
-#undef HAVE_SIGACTION
-
-/* Define to 1 if you have the siginterrupt function. */
-#undef HAVE_SIGINTERRUPT
-
-/* Define to 1 if you have the signal function. */
-#undef HAVE_SIGNAL
-
-/* Define to 1 if you have the <signal.h> header file. */
-#undef HAVE_SIGNAL_H
-
-/* Define to 1 if you have the sigsetjmp function or macro. */
-#undef HAVE_SIGSETJMP
-
-/* Define to 1 if sig_atomic_t is an available typedef. */
-#undef HAVE_SIG_ATOMIC_T
-
-/* Define to 1 if sig_atomic_t is already defined as volatile. */
-#undef HAVE_SIG_ATOMIC_T_VOLATILE
-
-/* Define to 1 if struct sockaddr_in6 has the sin6_scope_id member */
-#undef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
-
-/* Define to 1 if you have the socket function. */
-#undef HAVE_SOCKET
-
-/* Define to 1 if you have the socketpair function. */
-#undef HAVE_SOCKETPAIR
-
-/* Define to 1 if you have the <socket.h> header file. */
-#undef HAVE_SOCKET_H
-
-/* if you have the function SRP_Calc_client_key */
-#undef HAVE_SSLEAY_SRP
-
-/* Define to 1 if you have the `SSLv2_client_method' function. */
-#undef HAVE_SSLV2_CLIENT_METHOD
-
-/* Define to 1 if you have the `SSL_CTX_set_alpn_protos' function. */
-#undef HAVE_SSL_CTX_SET_ALPN_PROTOS
-
-/* Define to 1 if you have the `SSL_CTX_set_alpn_select_cb' function. */
-#undef HAVE_SSL_CTX_SET_ALPN_SELECT_CB
-
-/* Define to 1 if you have the `SSL_CTX_set_next_proto_select_cb' function. */
-#undef HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB
-
-/* Define to 1 if you have the `SSL_get_shutdown' function. */
-#undef HAVE_SSL_GET_SHUTDOWN
-
-/* Define to 1 if you have the <ssl.h> header file. */
-#undef HAVE_SSL_H
-
-/* Define to 1 if you have the <stdbool.h> header file. */
-#undef HAVE_STDBOOL_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdio.h> header file. */
-#undef HAVE_STDIO_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the strcasecmp function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the strcmpi function. */
-#undef HAVE_STRCMPI
-
-/* Define to 1 if you have the strdup function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the strerror_r function. */
-#undef HAVE_STRERROR_R
-
-/* Define to 1 if you have the stricmp function. */
-#undef HAVE_STRICMP
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the strncasecmp function. */
-#undef HAVE_STRNCASECMP
-
-/* Define to 1 if you have the strncmpi function. */
-#undef HAVE_STRNCMPI
-
-/* Define to 1 if you have the strnicmp function. */
-#undef HAVE_STRNICMP
-
-/* Define to 1 if you have the <stropts.h> header file. */
-#undef HAVE_STROPTS_H
-
-/* Define to 1 if you have the strstr function. */
-#undef HAVE_STRSTR
-
-/* Define to 1 if you have the strtok_r function. */
-#undef HAVE_STRTOK_R
-
-/* Define to 1 if you have the strtoll function. */
-#undef HAVE_STRTOLL
-
-/* if struct sockaddr_storage is defined */
-#undef HAVE_STRUCT_SOCKADDR_STORAGE
-
-/* Define to 1 if you have the timeval struct. */
-#undef HAVE_STRUCT_TIMEVAL
-
-/* Define to 1 if you have the <sys/filio.h> header file. */
-#undef HAVE_SYS_FILIO_H
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#undef HAVE_SYS_IOCTL_H
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define to 1 if you have the <sys/poll.h> header file. */
-#undef HAVE_SYS_POLL_H
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#undef HAVE_SYS_RESOURCE_H
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#undef HAVE_SYS_SELECT_H
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#undef HAVE_SYS_SOCKET_H
-
-/* Define to 1 if you have the <sys/sockio.h> header file. */
-#undef HAVE_SYS_SOCKIO_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#undef HAVE_SYS_UIO_H
-
-/* Define to 1 if you have the <sys/un.h> header file. */
-#undef HAVE_SYS_UN_H
-
-/* Define to 1 if you have the <sys/utime.h> header file. */
-#undef HAVE_SYS_UTIME_H
-
-/* Define to 1 if you have the <sys/wait.h> header file. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define to 1 if you have the <sys/xattr.h> header file. */
-#undef HAVE_SYS_XATTR_H
-
-/* Define to 1 if you have the <termios.h> header file. */
-#undef HAVE_TERMIOS_H
-
-/* Define to 1 if you have the <termio.h> header file. */
-#undef HAVE_TERMIO_H
-
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* Define to 1 if you have the <tld.h> header file. */
-#undef HAVE_TLD_H
-
-/* Define to 1 if you have the `tld_strerror' function. */
-#undef HAVE_TLD_STRERROR
-
-/* Define to 1 if you have the `uname' function. */
-#undef HAVE_UNAME
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `utime' function. */
-#undef HAVE_UTIME
-
-/* Define to 1 if you have the <utime.h> header file. */
-#undef HAVE_UTIME_H
-
-/* Define to 1 if compiler supports C99 variadic macro style. */
-#undef HAVE_VARIADIC_MACROS_C99
-
-/* Define to 1 if compiler supports old gcc variadic macro style. */
-#undef HAVE_VARIADIC_MACROS_GCC
-
-/* Define to 1 if you have the winber.h header file. */
-#undef HAVE_WINBER_H
-
-/* Define to 1 if you have the windows.h header file. */
-#undef HAVE_WINDOWS_H
-
-/* Define to 1 if you have the winldap.h header file. */
-#undef HAVE_WINLDAP_H
-
-/* Define to 1 if you have the winsock2.h header file. */
-#undef HAVE_WINSOCK2_H
-
-/* Define to 1 if you have the winsock.h header file. */
-#undef HAVE_WINSOCK_H
-
-/* Define this symbol if your OS supports changing the contents of argv */
-#undef HAVE_WRITABLE_ARGV
-
-/* Define to 1 if you have the writev function. */
-#undef HAVE_WRITEV
-
-/* Define to 1 if you have the ws2tcpip.h header file. */
-#undef HAVE_WS2TCPIP_H
-
-/* Define to 1 if you have the <x509.h> header file. */
-#undef HAVE_X509_H
-
-/* if you have the zlib.h header file */
-#undef HAVE_ZLIB_H
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#undef LT_OBJDIR
-
-/* Define to 1 if you need the lber.h header file even with ldap.h */
-#undef NEED_LBER_H
-
-/* Define to 1 if you need the malloc.h header file even with stdlib.h */
-#undef NEED_MALLOC_H
-
-/* Define to 1 if you need the memory.h header file even with stdlib.h */
-#undef NEED_MEMORY_H
-
-/* Define to 1 if _REENTRANT preprocessor symbol must be defined. */
-#undef NEED_REENTRANT
-
-/* Define to 1 if _THREAD_SAFE preprocessor symbol must be defined. */
-#undef NEED_THREAD_SAFE
-
-/* Define to enable NTLM delegation to winbind's ntlm_auth helper. */
-#undef NTLM_WB_ENABLED
-
-/* Define absolute filename for winbind's ntlm_auth helper. */
-#undef NTLM_WB_FILE
-
-/* cpu-machine-OS */
-#undef OS
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* a suitable file to read random data from */
-#undef RANDOM_FILE
-
-/* Define to the type of arg 1 for recv. */
-#undef RECV_TYPE_ARG1
-
-/* Define to the type of arg 2 for recv. */
-#undef RECV_TYPE_ARG2
-
-/* Define to the type of arg 3 for recv. */
-#undef RECV_TYPE_ARG3
-
-/* Define to the type of arg 4 for recv. */
-#undef RECV_TYPE_ARG4
-
-/* Define to the function return type for recv. */
-#undef RECV_TYPE_RETV
-
-/* Define as the return type of signal handlers (`int' or `void'). */
-#undef RETSIGTYPE
-
-/* Define to the type qualifier of arg 5 for select. */
-#undef SELECT_QUAL_ARG5
-
-/* Define to the type of arg 1 for select. */
-#undef SELECT_TYPE_ARG1
-
-/* Define to the type of args 2, 3 and 4 for select. */
-#undef SELECT_TYPE_ARG234
-
-/* Define to the type of arg 5 for select. */
-#undef SELECT_TYPE_ARG5
-
-/* Define to the function return type for select. */
-#undef SELECT_TYPE_RETV
-
-/* Define to the type qualifier of arg 2 for send. */
-#undef SEND_QUAL_ARG2
-
-/* Define to the type of arg 1 for send. */
-#undef SEND_TYPE_ARG1
-
-/* Define to the type of arg 2 for send. */
-#undef SEND_TYPE_ARG2
-
-/* Define to the type of arg 3 for send. */
-#undef SEND_TYPE_ARG3
-
-/* Define to the type of arg 4 for send. */
-#undef SEND_TYPE_ARG4
-
-/* Define to the function return type for send. */
-#undef SEND_TYPE_RETV
-
-/* The size of `int', as computed by sizeof. */
-#undef SIZEOF_INT
-
-/* The size of `long', as computed by sizeof. */
-#undef SIZEOF_LONG
-
-/* The size of `long long', as computed by sizeof. */
-#undef SIZEOF_LONG_LONG
-
-/* The size of `off_t', as computed by sizeof. */
-#undef SIZEOF_OFF_T
-
-/* The size of `short', as computed by sizeof. */
-#undef SIZEOF_SHORT
-
-/* The size of `size_t', as computed by sizeof. */
-#undef SIZEOF_SIZE_T
-
-/* The size of `time_t', as computed by sizeof. */
-#undef SIZEOF_TIME_T
-
-/* The size of `void*', as computed by sizeof. */
-#undef SIZEOF_VOIDP
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to the type of arg 3 for strerror_r. */
-#undef STRERROR_R_TYPE_ARG3
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define to enable c-ares support */
-#undef USE_ARES
-
-/* if axTLS is enabled */
-#undef USE_AXTLS
-
-/* if CyaSSL is enabled */
-#undef USE_CYASSL
-
-/* to enable iOS/Mac OS X native SSL/TLS support */
-#undef USE_DARWINSSL
-
-/* if GnuTLS is enabled */
-#undef USE_GNUTLS
-
-/* if GnuTLS uses nettle as crypto backend */
-#undef USE_GNUTLS_NETTLE
-
-/* if librtmp is in use */
-#undef USE_LIBRTMP
-
-/* if libSSH2 is in use */
-#undef USE_LIBSSH2
-
-/* If you want to build curl with the built-in manual */
-#undef USE_MANUAL
-
-/* Define to enable metalink support */
-#undef USE_METALINK
-
-/* if nghttp2 is in use */
-#undef USE_NGHTTP2
-
-/* if NSS is enabled */
-#undef USE_NSS
-
-/* Use OpenLDAP-specific code */
-#undef USE_OPENLDAP
-
-/* if OpenSSL is in use */
-#undef USE_OPENSSL
-
-/* if PolarSSL is enabled */
-#undef USE_POLARSSL
-
-/* to enable Windows native SSL/TLS support */
-#undef USE_SCHANNEL
-
-/* if SSL is enabled */
-#undef USE_SSLEAY
-
-/* if you want POSIX threaded DNS lookup */
-#undef USE_THREADS_POSIX
-
-/* Use TLS-SRP authentication */
-#undef USE_TLS_SRP
-
-/* Define to 1 if you have the `normaliz' (WinIDN) library (-lnormaliz). */
-#undef USE_WIN32_IDN
-
-/* Define to 1 if you are building a Windows target with large file support.
- */
-#undef USE_WIN32_LARGE_FILES
-
-/* Define to 1 if you are building a Windows target without large file
- support. */
-#undef USE_WIN32_SMALL_FILES
-
-/* to enable SSPI support */
-#undef USE_WINDOWS_SSPI
-
-/* Define to 1 if using yaSSL in OpenSSL compatibility mode. */
-#undef USE_YASSLEMUL
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to 1 to provide own prototypes. */
-#undef WANT_IDN_PROTOTYPES
-
-/* Define to avoid automatic inclusion of winsock.h */
-#undef WIN32_LEAN_AND_MEAN
-
-/* Define to 1 if OS is AIX. */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-
-/* Enable large inode numbers on Mac OS X 10.5. */
-#ifndef _DARWIN_USE_64_BIT_INODE
-# define _DARWIN_USE_64_BIT_INODE 1
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Type to use in place of in_addr_t when system does not provide it. */
-#undef in_addr_t
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-#undef size_t
-
-/* the signed version of size_t */
-#undef ssize_t
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_fnmatch.c b/external/libcurl_android/jni/libcurl/lib/curl_fnmatch.c
deleted file mode 100755
index 63f67b9a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_fnmatch.c
+++ /dev/null
@@ -1,427 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "curl_fnmatch.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#define CURLFNM_CHARSET_LEN (sizeof(char) * 256)
-#define CURLFNM_CHSET_SIZE (CURLFNM_CHARSET_LEN + 15)
-
-#define CURLFNM_NEGATE CURLFNM_CHARSET_LEN
-
-#define CURLFNM_ALNUM (CURLFNM_CHARSET_LEN + 1)
-#define CURLFNM_DIGIT (CURLFNM_CHARSET_LEN + 2)
-#define CURLFNM_XDIGIT (CURLFNM_CHARSET_LEN + 3)
-#define CURLFNM_ALPHA (CURLFNM_CHARSET_LEN + 4)
-#define CURLFNM_PRINT (CURLFNM_CHARSET_LEN + 5)
-#define CURLFNM_BLANK (CURLFNM_CHARSET_LEN + 6)
-#define CURLFNM_LOWER (CURLFNM_CHARSET_LEN + 7)
-#define CURLFNM_GRAPH (CURLFNM_CHARSET_LEN + 8)
-#define CURLFNM_SPACE (CURLFNM_CHARSET_LEN + 9)
-#define CURLFNM_UPPER (CURLFNM_CHARSET_LEN + 10)
-
-typedef enum {
- CURLFNM_LOOP_DEFAULT = 0,
- CURLFNM_LOOP_BACKSLASH
-} loop_state;
-
-typedef enum {
- CURLFNM_SCHS_DEFAULT = 0,
- CURLFNM_SCHS_MAYRANGE,
- CURLFNM_SCHS_MAYRANGE2,
- CURLFNM_SCHS_RIGHTBR,
- CURLFNM_SCHS_RIGHTBRLEFTBR
-} setcharset_state;
-
-typedef enum {
- CURLFNM_PKW_INIT = 0,
- CURLFNM_PKW_DDOT
-} parsekey_state;
-
-#define SETCHARSET_OK 1
-#define SETCHARSET_FAIL 0
-
-static int parsekeyword(unsigned char **pattern, unsigned char *charset)
-{
- parsekey_state state = CURLFNM_PKW_INIT;
-#define KEYLEN 10
- char keyword[KEYLEN] = { 0 };
- int found = FALSE;
- int i;
- unsigned char *p = *pattern;
- for(i = 0; !found; i++) {
- char c = *p++;
- if(i >= KEYLEN)
- return SETCHARSET_FAIL;
- switch(state) {
- case CURLFNM_PKW_INIT:
- if(ISALPHA(c) && ISLOWER(c))
- keyword[i] = c;
- else if(c == ':')
- state = CURLFNM_PKW_DDOT;
- else
- return 0;
- break;
- case CURLFNM_PKW_DDOT:
- if(c == ']')
- found = TRUE;
- else
- return SETCHARSET_FAIL;
- }
- }
-#undef KEYLEN
-
- *pattern = p; /* move caller's pattern pointer */
- if(strcmp(keyword, "digit") == 0)
- charset[CURLFNM_DIGIT] = 1;
- else if(strcmp(keyword, "alnum") == 0)
- charset[CURLFNM_ALNUM] = 1;
- else if(strcmp(keyword, "alpha") == 0)
- charset[CURLFNM_ALPHA] = 1;
- else if(strcmp(keyword, "xdigit") == 0)
- charset[CURLFNM_XDIGIT] = 1;
- else if(strcmp(keyword, "print") == 0)
- charset[CURLFNM_PRINT] = 1;
- else if(strcmp(keyword, "graph") == 0)
- charset[CURLFNM_GRAPH] = 1;
- else if(strcmp(keyword, "space") == 0)
- charset[CURLFNM_SPACE] = 1;
- else if(strcmp(keyword, "blank") == 0)
- charset[CURLFNM_BLANK] = 1;
- else if(strcmp(keyword, "upper") == 0)
- charset[CURLFNM_UPPER] = 1;
- else if(strcmp(keyword, "lower") == 0)
- charset[CURLFNM_LOWER] = 1;
- else
- return SETCHARSET_FAIL;
- return SETCHARSET_OK;
-}
-
-/* returns 1 (true) if pattern is OK, 0 if is bad ("p" is pattern pointer) */
-static int setcharset(unsigned char **p, unsigned char *charset)
-{
- setcharset_state state = CURLFNM_SCHS_DEFAULT;
- unsigned char rangestart = 0;
- unsigned char lastchar = 0;
- bool something_found = FALSE;
- unsigned char c;
- for(;;) {
- c = **p;
- switch(state) {
- case CURLFNM_SCHS_DEFAULT:
- if(ISALNUM(c)) { /* ASCII value */
- rangestart = c;
- charset[c] = 1;
- (*p)++;
- state = CURLFNM_SCHS_MAYRANGE;
- something_found = TRUE;
- }
- else if(c == ']') {
- if(something_found)
- return SETCHARSET_OK;
- else
- something_found = TRUE;
- state = CURLFNM_SCHS_RIGHTBR;
- charset[c] = 1;
- (*p)++;
- }
- else if(c == '[') {
- char c2 = *((*p)+1);
- if(c2 == ':') { /* there has to be a keyword */
- (*p) += 2;
- if(parsekeyword(p, charset)) {
- state = CURLFNM_SCHS_DEFAULT;
- }
- else
- return SETCHARSET_FAIL;
- }
- else {
- charset[c] = 1;
- (*p)++;
- }
- something_found = TRUE;
- }
- else if(c == '?' || c == '*') {
- something_found = TRUE;
- charset[c] = 1;
- (*p)++;
- }
- else if(c == '^' || c == '!') {
- if(!something_found) {
- if(charset[CURLFNM_NEGATE]) {
- charset[c] = 1;
- something_found = TRUE;
- }
- else
- charset[CURLFNM_NEGATE] = 1; /* negate charset */
- }
- else
- charset[c] = 1;
- (*p)++;
- }
- else if(c == '\\') {
- c = *(++(*p));
- if(ISPRINT((c))) {
- something_found = TRUE;
- state = CURLFNM_SCHS_MAYRANGE;
- charset[c] = 1;
- rangestart = c;
- (*p)++;
- }
- else
- return SETCHARSET_FAIL;
- }
- else if(c == '\0') {
- return SETCHARSET_FAIL;
- }
- else {
- charset[c] = 1;
- (*p)++;
- something_found = TRUE;
- }
- break;
- case CURLFNM_SCHS_MAYRANGE:
- if(c == '-') {
- charset[c] = 1;
- (*p)++;
- lastchar = '-';
- state = CURLFNM_SCHS_MAYRANGE2;
- }
- else if(c == '[') {
- state = CURLFNM_SCHS_DEFAULT;
- }
- else if(ISALNUM(c)) {
- charset[c] = 1;
- (*p)++;
- }
- else if(c == '\\') {
- c = *(++(*p));
- if(ISPRINT(c)) {
- charset[c] = 1;
- (*p)++;
- }
- else
- return SETCHARSET_FAIL;
- }
- else if(c == ']') {
- return SETCHARSET_OK;
- }
- else
- return SETCHARSET_FAIL;
- break;
- case CURLFNM_SCHS_MAYRANGE2:
- if(c == '\\') {
- c = *(++(*p));
- if(!ISPRINT(c))
- return SETCHARSET_FAIL;
- }
- if(c == ']') {
- return SETCHARSET_OK;
- }
- else if(c == '\\') {
- c = *(++(*p));
- if(ISPRINT(c)) {
- charset[c] = 1;
- state = CURLFNM_SCHS_DEFAULT;
- (*p)++;
- }
- else
- return SETCHARSET_FAIL;
- }
- if(c >= rangestart) {
- if((ISLOWER(c) && ISLOWER(rangestart)) ||
- (ISDIGIT(c) && ISDIGIT(rangestart)) ||
- (ISUPPER(c) && ISUPPER(rangestart))) {
- charset[lastchar] = 0;
- rangestart++;
- while(rangestart++ <= c)
- charset[rangestart-1] = 1;
- (*p)++;
- state = CURLFNM_SCHS_DEFAULT;
- }
- else
- return SETCHARSET_FAIL;
- }
- break;
- case CURLFNM_SCHS_RIGHTBR:
- if(c == '[') {
- state = CURLFNM_SCHS_RIGHTBRLEFTBR;
- charset[c] = 1;
- (*p)++;
- }
- else if(c == ']') {
- return SETCHARSET_OK;
- }
- else if(c == '\0') {
- return SETCHARSET_FAIL;
- }
- else if(ISPRINT(c)) {
- charset[c] = 1;
- (*p)++;
- state = CURLFNM_SCHS_DEFAULT;
- }
- else
- /* used 'goto fail' instead of 'return SETCHARSET_FAIL' to avoid a
- * nonsense warning 'statement not reached' at end of the fnc when
- * compiling on Solaris */
- goto fail;
- break;
- case CURLFNM_SCHS_RIGHTBRLEFTBR:
- if(c == ']') {
- return SETCHARSET_OK;
- }
- else {
- state = CURLFNM_SCHS_DEFAULT;
- charset[c] = 1;
- (*p)++;
- }
- break;
- }
- }
-fail:
- return SETCHARSET_FAIL;
-}
-
-static int loop(const unsigned char *pattern, const unsigned char *string)
-{
- loop_state state = CURLFNM_LOOP_DEFAULT;
- unsigned char *p = (unsigned char *)pattern;
- unsigned char *s = (unsigned char *)string;
- unsigned char charset[CURLFNM_CHSET_SIZE] = { 0 };
- int rc = 0;
-
- for(;;) {
- switch(state) {
- case CURLFNM_LOOP_DEFAULT:
- if(*p == '*') {
- while(*(p+1) == '*') /* eliminate multiple stars */
- p++;
- if(*s == '\0' && *(p+1) == '\0')
- return CURL_FNMATCH_MATCH;
- rc = loop(p + 1, s); /* *.txt matches .txt <=> .txt matches .txt */
- if(rc == CURL_FNMATCH_MATCH)
- return CURL_FNMATCH_MATCH;
- if(*s) /* let the star eat up one character */
- s++;
- else
- return CURL_FNMATCH_NOMATCH;
- }
- else if(*p == '?') {
- if(ISPRINT(*s)) {
- s++;
- p++;
- }
- else if(*s == '\0')
- return CURL_FNMATCH_NOMATCH;
- else
- return CURL_FNMATCH_FAIL; /* cannot deal with other character */
- }
- else if(*p == '\0') {
- if(*s == '\0')
- return CURL_FNMATCH_MATCH;
- else
- return CURL_FNMATCH_NOMATCH;
- }
- else if(*p == '\\') {
- state = CURLFNM_LOOP_BACKSLASH;
- p++;
- }
- else if(*p == '[') {
- unsigned char *pp = p+1; /* cannot handle with pointer to register */
- if(setcharset(&pp, charset)) {
- int found = FALSE;
- if(charset[(unsigned int)*s])
- found = TRUE;
- else if(charset[CURLFNM_ALNUM])
- found = ISALNUM(*s);
- else if(charset[CURLFNM_ALPHA])
- found = ISALPHA(*s);
- else if(charset[CURLFNM_DIGIT])
- found = ISDIGIT(*s);
- else if(charset[CURLFNM_XDIGIT])
- found = ISXDIGIT(*s);
- else if(charset[CURLFNM_PRINT])
- found = ISPRINT(*s);
- else if(charset[CURLFNM_SPACE])
- found = ISSPACE(*s);
- else if(charset[CURLFNM_UPPER])
- found = ISUPPER(*s);
- else if(charset[CURLFNM_LOWER])
- found = ISLOWER(*s);
- else if(charset[CURLFNM_BLANK])
- found = ISBLANK(*s);
- else if(charset[CURLFNM_GRAPH])
- found = ISGRAPH(*s);
-
- if(charset[CURLFNM_NEGATE])
- found = !found;
-
- if(found) {
- p = pp+1;
- s++;
- memset(charset, 0, CURLFNM_CHSET_SIZE);
- }
- else
- return CURL_FNMATCH_NOMATCH;
- }
- else
- return CURL_FNMATCH_FAIL;
- }
- else {
- if(*p++ != *s++)
- return CURL_FNMATCH_NOMATCH;
- }
- break;
- case CURLFNM_LOOP_BACKSLASH:
- if(ISPRINT(*p)) {
- if(*p++ == *s++)
- state = CURLFNM_LOOP_DEFAULT;
- else
- return CURL_FNMATCH_NOMATCH;
- }
- else
- return CURL_FNMATCH_FAIL;
- break;
- }
- }
-}
-
-/*
- * @unittest: 1307
- */
-int Curl_fnmatch(void *ptr, const char *pattern, const char *string)
-{
- (void)ptr; /* the argument is specified by the curl_fnmatch_callback
- prototype, but not used by Curl_fnmatch() */
- if(!pattern || !string) {
- return CURL_FNMATCH_FAIL;
- }
- return loop((unsigned char *)pattern, (unsigned char *)string);
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_fnmatch.h b/external/libcurl_android/jni/libcurl/lib/curl_fnmatch.h
deleted file mode 100755
index 6335d031..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_fnmatch.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef HEADER_CURL_FNMATCH_H
-#define HEADER_CURL_FNMATCH_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#define CURL_FNMATCH_MATCH 0
-#define CURL_FNMATCH_NOMATCH 1
-#define CURL_FNMATCH_FAIL 2
-
-/* default pattern matching function
- * =================================
- * Implemented with recursive backtracking, if you want to use Curl_fnmatch,
- * please note that there is not implemented UTF/UNICODE support.
- *
- * Implemented features:
- * '?' notation, does not match UTF characters
- * '*' can also work with UTF string
- * [a-zA-Z0-9] enumeration support
- *
- * keywords: alnum, digit, xdigit, alpha, print, blank, lower, graph, space
- * and upper (use as "[[:alnum:]]")
- */
-int Curl_fnmatch(void *ptr, const char *pattern, const char *string);
-
-#endif /* HEADER_CURL_FNMATCH_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_gethostname.c b/external/libcurl_android/jni/libcurl/lib/curl_gethostname.c
deleted file mode 100755
index ded1e6f9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_gethostname.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "curl_gethostname.h"
-
-/*
- * Curl_gethostname() is a wrapper around gethostname() which allows
- * overriding the host name that the function would normally return.
- * This capability is used by the test suite to verify exact matching
- * of NTLM authentication, which exercises libcurl's MD4 and DES code
- * as well as by the SMTP module when a hostname is not provided.
- *
- * For libcurl debug enabled builds host name overriding takes place
- * when environment variable CURL_GETHOSTNAME is set, using the value
- * held by the variable to override returned host name.
- *
- * Note: The function always returns the un-qualified hostname rather
- * than being provider dependent.
- *
- * For libcurl shared library release builds the test suite preloads
- * another shared library named libhostname using the LD_PRELOAD
- * mechanism which intercepts, and might override, the gethostname()
- * function call. In this case a given platform must support the
- * LD_PRELOAD mechanism and additionally have environment variable
- * CURL_GETHOSTNAME set in order to override the returned host name.
- *
- * For libcurl static library release builds no overriding takes place.
- */
-
-int Curl_gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen) {
-
-#ifndef HAVE_GETHOSTNAME
-
- /* Allow compilation and return failure when unavailable */
- (void) name;
- (void) namelen;
- return -1;
-
-#else
- int err;
- char* dot;
-
-#ifdef DEBUGBUILD
-
- /* Override host name when environment variable CURL_GETHOSTNAME is set */
- const char *force_hostname = getenv("CURL_GETHOSTNAME");
- if(force_hostname) {
- strncpy(name, force_hostname, namelen);
- err = 0;
- }
- else {
- name[0] = '\0';
- err = gethostname(name, namelen);
- }
-
-#else /* DEBUGBUILD */
-
- /* The call to system's gethostname() might get intercepted by the
- libhostname library when libcurl is built as a non-debug shared
- library when running the test suite. */
- name[0] = '\0';
- err = gethostname(name, namelen);
-
-#endif
-
- name[namelen - 1] = '\0';
-
- if(err)
- return err;
-
- /* Truncate domain, leave only machine name */
- dot = strchr(name, '.');
- if(dot)
- *dot = '\0';
-
- return 0;
-#endif
-
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_gethostname.h b/external/libcurl_android/jni/libcurl/lib/curl_gethostname.h
deleted file mode 100755
index 48740f62..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_gethostname.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef HEADER_CURL_GETHOSTNAME_H
-#define HEADER_CURL_GETHOSTNAME_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* Hostname buffer size */
-#define HOSTNAME_MAX 1024
-
-/* This returns the local machine's un-qualified hostname */
-int Curl_gethostname(char *name, GETHOSTNAME_TYPE_ARG2 namelen);
-
-#endif /* HEADER_CURL_GETHOSTNAME_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_gssapi.c b/external/libcurl_android/jni/libcurl/lib/curl_gssapi.c
deleted file mode 100755
index 232b3ef9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_gssapi.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2011 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_GSSAPI
-
-#include "curl_gssapi.h"
-#include "sendf.h"
-
-static const char spnego_oid_bytes[] = "\x2b\x06\x01\x05\x05\x02";
-gss_OID_desc Curl_spnego_mech_oid = { 6, &spnego_oid_bytes };
-static const char krb5_oid_bytes[] = "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02";
-gss_OID_desc Curl_krb5_mech_oid = { 9, &krb5_oid_bytes };
-
-OM_uint32 Curl_gss_init_sec_context(
- struct SessionHandle *data,
- OM_uint32 *minor_status,
- gss_ctx_id_t *context,
- gss_name_t target_name,
- gss_OID mech_type,
- gss_channel_bindings_t input_chan_bindings,
- gss_buffer_t input_token,
- gss_buffer_t output_token,
- OM_uint32 *ret_flags)
-{
- OM_uint32 req_flags = GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG;
-
- if(data->set.gssapi_delegation & CURLGSSAPI_DELEGATION_POLICY_FLAG) {
-#ifdef GSS_C_DELEG_POLICY_FLAG
- req_flags |= GSS_C_DELEG_POLICY_FLAG;
-#else
- infof(data, "warning: support for CURLGSSAPI_DELEGATION_POLICY_FLAG not "
- "compiled in\n");
-#endif
- }
-
- if(data->set.gssapi_delegation & CURLGSSAPI_DELEGATION_FLAG)
- req_flags |= GSS_C_DELEG_FLAG;
-
- return gss_init_sec_context(minor_status,
- GSS_C_NO_CREDENTIAL, /* cred_handle */
- context,
- target_name,
- mech_type,
- req_flags,
- 0, /* time_req */
- input_chan_bindings,
- input_token,
- NULL, /* actual_mech_type */
- output_token,
- ret_flags,
- NULL /* time_rec */);
-}
-
-#endif /* HAVE_GSSAPI */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_gssapi.h b/external/libcurl_android/jni/libcurl/lib/curl_gssapi.h
deleted file mode 100755
index b91bd7ea..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_gssapi.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef HEADER_CURL_GSSAPI_H
-#define HEADER_CURL_GSSAPI_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-#include "urldata.h"
-
-#ifdef HAVE_GSSAPI
-
-#ifdef HAVE_GSSGNU
-# include <gss.h>
-#elif defined HAVE_GSSMIT
- /* MIT style */
-# include <gssapi/gssapi.h>
-# include <gssapi/gssapi_generic.h>
-# include <gssapi/gssapi_krb5.h>
-#else
- /* Heimdal-style */
-# include <gssapi.h>
-#endif
-
-extern gss_OID_desc Curl_spnego_mech_oid;
-extern gss_OID_desc Curl_krb5_mech_oid;
-
-/* Common method for using GSS-API */
-
-OM_uint32 Curl_gss_init_sec_context(
- struct SessionHandle *data,
- OM_uint32 *minor_status,
- gss_ctx_id_t *context,
- gss_name_t target_name,
- gss_OID mech_type,
- gss_channel_bindings_t input_chan_bindings,
- gss_buffer_t input_token,
- gss_buffer_t output_token,
- OM_uint32 *ret_flags);
-
-#endif /* HAVE_GSSAPI */
-
-#endif /* HEADER_CURL_GSSAPI_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_hmac.h b/external/libcurl_android/jni/libcurl/lib/curl_hmac.h
deleted file mode 100755
index 9b65c8c2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_hmac.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef HEADER_CURL_HMAC_H
-#define HEADER_CURL_HMAC_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-
-typedef void (* HMAC_hinit_func)(void * context);
-typedef void (* HMAC_hupdate_func)(void * context,
- const unsigned char * data,
- unsigned int len);
-typedef void (* HMAC_hfinal_func)(unsigned char * result, void * context);
-
-
-/* Per-hash function HMAC parameters. */
-
-typedef struct {
- HMAC_hinit_func hmac_hinit; /* Initialize context procedure. */
- HMAC_hupdate_func hmac_hupdate; /* Update context with data. */
- HMAC_hfinal_func hmac_hfinal; /* Get final result procedure. */
- unsigned int hmac_ctxtsize; /* Context structure size. */
- unsigned int hmac_maxkeylen; /* Maximum key length (bytes). */
- unsigned int hmac_resultlen; /* Result length (bytes). */
-} HMAC_params;
-
-
-/* HMAC computation context. */
-
-typedef struct {
- const HMAC_params * hmac_hash; /* Hash function definition. */
- void * hmac_hashctxt1; /* Hash function context 1. */
- void * hmac_hashctxt2; /* Hash function context 2. */
-} HMAC_context;
-
-
-/* Prototypes. */
-
-HMAC_context * Curl_HMAC_init(const HMAC_params * hashparams,
- const unsigned char * key,
- unsigned int keylen);
-int Curl_HMAC_update(HMAC_context * context,
- const unsigned char * data,
- unsigned int len);
-int Curl_HMAC_final(HMAC_context * context, unsigned char * result);
-
-#endif
-
-#endif /* HEADER_CURL_HMAC_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ldap.h b/external/libcurl_android/jni/libcurl/lib/curl_ldap.h
deleted file mode 100755
index 93fb4b07..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ldap.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef HEADER_CURL_LDAP_H
-#define HEADER_CURL_LDAP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#ifndef CURL_DISABLE_LDAP
-extern const struct Curl_handler Curl_handler_ldap;
-
-#if !defined(CURL_DISABLE_LDAPS) && \
- ((defined(USE_OPENLDAP) && defined(USE_SSL)) || \
- (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL)))
-extern const struct Curl_handler Curl_handler_ldaps;
-#endif
-
-#endif
-#endif /* HEADER_CURL_LDAP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_md4.h b/external/libcurl_android/jni/libcurl/lib/curl_md4.h
deleted file mode 100755
index b0be9cf6..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_md4.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_MD4_H
-#define HEADER_CURL_MD4_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-/* NSS crypto library does not provide the MD4 hash algorithm, so that we have
- * a local implementation of it */
-#ifdef USE_NSS
-void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len);
-#endif /* USE_NSS */
-
-#endif /* HEADER_CURL_MD4_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_md5.h b/external/libcurl_android/jni/libcurl/lib/curl_md5.h
deleted file mode 100755
index 9c0e0b5e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_md5.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef HEADER_CURL_MD5_H
-#define HEADER_CURL_MD5_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-#include "curl_hmac.h"
-
-#define MD5_DIGEST_LEN 16
-
-typedef void (* Curl_MD5_init_func)(void *context);
-typedef void (* Curl_MD5_update_func)(void *context,
- const unsigned char *data,
- unsigned int len);
-typedef void (* Curl_MD5_final_func)(unsigned char *result, void *context);
-
-typedef struct {
- Curl_MD5_init_func md5_init_func; /* Initialize context procedure */
- Curl_MD5_update_func md5_update_func; /* Update context with data */
- Curl_MD5_final_func md5_final_func; /* Get final result procedure */
- unsigned int md5_ctxtsize; /* Context structure size */
- unsigned int md5_resultlen; /* Result length (bytes) */
-} MD5_params;
-
-typedef struct {
- const MD5_params *md5_hash; /* Hash function definition */
- void *md5_hashctx; /* Hash function context */
-} MD5_context;
-
-extern const MD5_params Curl_DIGEST_MD5[1];
-extern const HMAC_params Curl_HMAC_MD5[1];
-
-void Curl_md5it(unsigned char *output,
- const unsigned char *input);
-
-MD5_context * Curl_MD5_init(const MD5_params *md5params);
-int Curl_MD5_update(MD5_context *context,
- const unsigned char *data,
- unsigned int len);
-int Curl_MD5_final(MD5_context *context, unsigned char *result);
-
-#endif
-
-#endif /* HEADER_CURL_MD5_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_memory.h b/external/libcurl_android/jni/libcurl/lib/curl_memory.h
deleted file mode 100755
index e3cdc721..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_memory.h
+++ /dev/null
@@ -1,140 +0,0 @@
-#ifndef HEADER_CURL_MEMORY_H
-#define HEADER_CURL_MEMORY_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Nasty internal details ahead...
- *
- * File curl_memory.h must be included by _all_ *.c source files
- * that use memory related functions strdup, malloc, calloc, realloc
- * or free, and given source file is used to build libcurl library.
- *
- * There is nearly no exception to above rule. All libcurl source
- * files in 'lib' subdirectory as well as those living deep inside
- * 'packages' subdirectories and linked together in order to build
- * libcurl library shall follow it.
- *
- * File lib/strdup.c is an exception, given that it provides a strdup
- * clone implementation while using malloc. Extra care needed inside
- * this one. TODO: revisit this paragraph and related code.
- *
- * The need for curl_memory.h inclusion is due to libcurl's feature
- * of allowing library user to provide memory replacement functions,
- * memory callbacks, at runtime with curl_global_init_mem()
- *
- * Any *.c source file used to build libcurl library that does not
- * include curl_memory.h and uses any memory function of the five
- * mentioned above will compile without any indication, but it will
- * trigger weird memory related issues at runtime.
- *
- * OTOH some source files from 'lib' subdirectory may additionally be
- * used directly as source code when using some curlx_ functions by
- * third party programs that don't even use libcurl at all. When using
- * these source files in this way it is necessary these are compiled
- * with CURLX_NO_MEMORY_CALLBACKS defined, in order to ensure that no
- * attempt of calling libcurl's memory callbacks is done from code
- * which can not use this machinery.
- *
- * Notice that libcurl's 'memory tracking' system works chaining into
- * the memory callback machinery. This implies that when compiling
- * 'lib' source files with CURLX_NO_MEMORY_CALLBACKS defined this file
- * disengages usage of libcurl's 'memory tracking' system, defining
- * MEMDEBUG_NODEFINES and overriding CURLDEBUG purpose.
- *
- * CURLX_NO_MEMORY_CALLBACKS takes precedence over CURLDEBUG. This is
- * done in order to allow building a 'memory tracking' enabled libcurl
- * and at the same time allow building programs which do not use it.
- *
- * Programs and libraries in 'tests' subdirectories have specific
- * purposes and needs, and as such each one will use whatever fits
- * best, depending additionally wether it links with libcurl or not.
- *
- * Caveat emptor. Proper curlx_* separation is a work in progress
- * the same as CURLX_NO_MEMORY_CALLBACKS usage, some adjustments may
- * still be required. IOW don't use them yet, there are sharp edges.
- */
-
-#ifdef HEADER_CURL_MEMDEBUG_H
-#error "Header memdebug.h shall not be included before curl_memory.h"
-#endif
-
-#ifndef CURLX_NO_MEMORY_CALLBACKS
-
-#include <curl/curl.h> /* for the callback typedefs */
-
-extern curl_malloc_callback Curl_cmalloc;
-extern curl_free_callback Curl_cfree;
-extern curl_realloc_callback Curl_crealloc;
-extern curl_strdup_callback Curl_cstrdup;
-extern curl_calloc_callback Curl_ccalloc;
-#if defined(WIN32) && defined(UNICODE)
-extern curl_wcsdup_callback Curl_cwcsdup;
-#endif
-
-#ifndef CURLDEBUG
-
-/*
- * libcurl's 'memory tracking' system defines strdup, malloc, calloc,
- * realloc and free, along with others, in memdebug.h in a different
- * way although still using memory callbacks forward declared above.
- * When using the 'memory tracking' system (CURLDEBUG defined) we do
- * not define here the five memory functions given that definitions
- * from memdebug.h are the ones that shall be used.
- */
-
-#undef strdup
-#define strdup(ptr) Curl_cstrdup(ptr)
-#undef malloc
-#define malloc(size) Curl_cmalloc(size)
-#undef calloc
-#define calloc(nbelem,size) Curl_ccalloc(nbelem, size)
-#undef realloc
-#define realloc(ptr,size) Curl_crealloc(ptr, size)
-#undef free
-#define free(ptr) Curl_cfree(ptr)
-
-#ifdef WIN32
-# ifdef UNICODE
-# undef wcsdup
-# define wcsdup(ptr) Curl_cwcsdup(ptr)
-# undef _wcsdup
-# define _wcsdup(ptr) Curl_cwcsdup(ptr)
-# undef _tcsdup
-# define _tcsdup(ptr) Curl_cwcsdup(ptr)
-# else
-# undef _tcsdup
-# define _tcsdup(ptr) Curl_cstrdup(ptr)
-# endif
-#endif
-
-#endif /* CURLDEBUG */
-
-#else /* CURLX_NO_MEMORY_CALLBACKS */
-
-#ifndef MEMDEBUG_NODEFINES
-#define MEMDEBUG_NODEFINES
-#endif
-
-#endif /* CURLX_NO_MEMORY_CALLBACKS */
-
-#endif /* HEADER_CURL_MEMORY_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_memrchr.c b/external/libcurl_android/jni/libcurl/lib/curl_memrchr.c
deleted file mode 100755
index a71c2bb4..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_memrchr.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "curl_memrchr.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifndef HAVE_MEMRCHR
-
-/*
- * Curl_memrchr()
- *
- * Our memrchr() function clone for systems which lack this function. The
- * memrchr() function is like the memchr() function, except that it searches
- * backwards from the end of the n bytes pointed to by s instead of forward
- * from the beginning.
- */
-
-void *
-Curl_memrchr(const void *s, int c, size_t n)
-{
- const unsigned char *p = s;
- const unsigned char *q = s;
-
- p += n - 1;
-
- while(p >= q) {
- if(*p == (unsigned char)c)
- return (void *)p;
- p--;
- }
-
- return NULL;
-}
-
-#endif /* HAVE_MEMRCHR */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_memrchr.h b/external/libcurl_android/jni/libcurl/lib/curl_memrchr.h
deleted file mode 100755
index 324c73a7..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_memrchr.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef HEADER_CURL_MEMRCHR_H
-#define HEADER_CURL_MEMRCHR_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_MEMRCHR
-
-#ifdef HAVE_STRING_H
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-
-#else /* HAVE_MEMRCHR */
-
-void *Curl_memrchr(const void *s, int c, size_t n);
-
-#define memrchr(x,y,z) Curl_memrchr((x),(y),(z))
-
-#endif /* HAVE_MEMRCHR */
-
-#endif /* HEADER_CURL_MEMRCHR_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_multibyte.c b/external/libcurl_android/jni/libcurl/lib/curl_multibyte.c
deleted file mode 100755
index 6c02239e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_multibyte.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_WIN32_IDN) || (defined(USE_WINDOWS_SSPI) && defined(UNICODE))
-
- /*
- * MultiByte conversions using Windows kernel32 library.
- */
-
-#include "curl_multibyte.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-wchar_t *Curl_convert_UTF8_to_wchar(const char *str_utf8)
-{
- wchar_t *str_w = NULL;
-
- if(str_utf8) {
- int str_w_len = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS,
- str_utf8, -1, NULL, 0);
- if(str_w_len > 0) {
- str_w = malloc(str_w_len * sizeof(wchar_t));
- if(str_w) {
- if(MultiByteToWideChar(CP_UTF8, 0, str_utf8, -1, str_w,
- str_w_len) == 0) {
- Curl_safefree(str_w);
- }
- }
- }
- }
-
- return str_w;
-}
-
-char *Curl_convert_wchar_to_UTF8(const wchar_t *str_w)
-{
- char *str_utf8 = NULL;
-
- if(str_w) {
- int str_utf8_len = WideCharToMultiByte(CP_UTF8, 0, str_w, -1, NULL,
- 0, NULL, NULL);
- if(str_utf8_len > 0) {
- str_utf8 = malloc(str_utf8_len * sizeof(wchar_t));
- if(str_utf8) {
- if(WideCharToMultiByte(CP_UTF8, 0, str_w, -1, str_utf8, str_utf8_len,
- NULL, FALSE) == 0) {
- Curl_safefree(str_utf8);
- }
- }
- }
- }
-
- return str_utf8;
-}
-
-#endif /* USE_WIN32_IDN || (USE_WINDOWS_SSPI && UNICODE) */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_multibyte.h b/external/libcurl_android/jni/libcurl/lib/curl_multibyte.h
deleted file mode 100755
index 7ee5eae1..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_multibyte.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef HEADER_CURL_MULTIBYTE_H
-#define HEADER_CURL_MULTIBYTE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#if defined(USE_WIN32_IDN) || (defined(USE_WINDOWS_SSPI) && defined(UNICODE))
-
- /*
- * MultiByte conversions using Windows kernel32 library.
- */
-
-wchar_t *Curl_convert_UTF8_to_wchar(const char *str_utf8);
-char *Curl_convert_wchar_to_UTF8(const wchar_t *str_w);
-
-#endif /* USE_WIN32_IDN || (USE_WINDOWS_SSPI && UNICODE) */
-
-
-#if defined(USE_WIN32_IDN) || defined(USE_WINDOWS_SSPI)
-
-/*
- * Macros Curl_convert_UTF8_to_tchar(), Curl_convert_tchar_to_UTF8()
- * and Curl_unicodefree() main purpose is to minimize the number of
- * preprocessor conditional directives needed by code using these
- * to differentiate UNICODE from non-UNICODE builds.
- *
- * When building with UNICODE defined, this two macros
- * Curl_convert_UTF8_to_tchar() and Curl_convert_tchar_to_UTF8()
- * return a pointer to a newly allocated memory area holding result.
- * When the result is no longer needed, allocated memory is intended
- * to be free'ed with Curl_unicodefree().
- *
- * When building without UNICODE defined, this macros
- * Curl_convert_UTF8_to_tchar() and Curl_convert_tchar_to_UTF8()
- * return the pointer received as argument. Curl_unicodefree() does
- * no actual free'ing of this pointer it is simply set to NULL.
- */
-
-#ifdef UNICODE
-
-#define Curl_convert_UTF8_to_tchar(ptr) Curl_convert_UTF8_to_wchar((ptr))
-#define Curl_convert_tchar_to_UTF8(ptr) Curl_convert_wchar_to_UTF8((ptr))
-#define Curl_unicodefree(ptr) \
- do {if((ptr)) {free((ptr)); (ptr) = NULL;}} WHILE_FALSE
-
-typedef union {
- unsigned short *tchar_ptr;
- const unsigned short *const_tchar_ptr;
- unsigned short *tbyte_ptr;
- const unsigned short *const_tbyte_ptr;
-} xcharp_u;
-
-#else
-
-#define Curl_convert_UTF8_to_tchar(ptr) (ptr)
-#define Curl_convert_tchar_to_UTF8(ptr) (ptr)
-#define Curl_unicodefree(ptr) \
- do {(ptr) = NULL;} WHILE_FALSE
-
-typedef union {
- char *tchar_ptr;
- const char *const_tchar_ptr;
- unsigned char *tbyte_ptr;
- const unsigned char *const_tbyte_ptr;
-} xcharp_u;
-
-#endif /* UNICODE */
-
-#endif /* USE_WIN32_IDN || USE_WINDOWS_SSPI */
-
-#endif /* HEADER_CURL_MULTIBYTE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ntlm.c b/external/libcurl_android/jni/libcurl/lib/curl_ntlm.c
deleted file mode 100755
index 8c02aba5..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ntlm.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_NTLM
-
-/*
- * NTLM details:
- *
- * http://davenport.sourceforge.net/ntlm.html
- * http://www.innovation.ch/java/ntlm.html
- */
-
-#define DEBUG_ME 0
-
-#include "urldata.h"
-#include "sendf.h"
-#include "rawstr.h"
-#include "curl_ntlm.h"
-#include "curl_ntlm_msgs.h"
-#include "curl_ntlm_wb.h"
-#include "url.h"
-#include "curl_memory.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#if defined(USE_NSS)
-#include "vtls/nssg.h"
-#elif defined(USE_WINDOWS_SSPI)
-#include "curl_sspi.h"
-#endif
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#if DEBUG_ME
-# define DEBUG_OUT(x) x
-#else
-# define DEBUG_OUT(x) Curl_nop_stmt
-#endif
-
-CURLcode Curl_input_ntlm(struct connectdata *conn,
- bool proxy, /* if proxy or not */
- const char *header) /* rest of the www-authenticate:
- header */
-{
- /* point to the correct struct with this */
- struct ntlmdata *ntlm;
- CURLcode result = CURLE_OK;
-
-#ifdef USE_NSS
- result = Curl_nss_force_init(conn->data);
- if(result)
- return result;
-#endif
-
- ntlm = proxy ? &conn->proxyntlm : &conn->ntlm;
-
- if(checkprefix("NTLM", header)) {
- header += strlen("NTLM");
-
- while(*header && ISSPACE(*header))
- header++;
-
- if(*header) {
- result = Curl_ntlm_decode_type2_message(conn->data, header, ntlm);
- if(CURLE_OK != result)
- return result;
-
- ntlm->state = NTLMSTATE_TYPE2; /* We got a type-2 message */
- }
- else {
- if(ntlm->state == NTLMSTATE_TYPE3) {
- infof(conn->data, "NTLM handshake rejected\n");
- Curl_http_ntlm_cleanup(conn);
- ntlm->state = NTLMSTATE_NONE;
- return CURLE_REMOTE_ACCESS_DENIED;
- }
- else if(ntlm->state >= NTLMSTATE_TYPE1) {
- infof(conn->data, "NTLM handshake failure (internal error)\n");
- return CURLE_REMOTE_ACCESS_DENIED;
- }
-
- ntlm->state = NTLMSTATE_TYPE1; /* We should send away a type-1 */
- }
- }
-
- return result;
-}
-
-/*
- * This is for creating ntlm header output
- */
-CURLcode Curl_output_ntlm(struct connectdata *conn,
- bool proxy)
-{
- char *base64 = NULL;
- size_t len = 0;
- CURLcode error;
-
- /* point to the address of the pointer that holds the string to send to the
- server, which is for a plain host or for a HTTP proxy */
- char **allocuserpwd;
-
- /* point to the name and password for this */
- const char *userp;
- const char *passwdp;
-
- /* point to the correct struct with this */
- struct ntlmdata *ntlm;
- struct auth *authp;
-
- DEBUGASSERT(conn);
- DEBUGASSERT(conn->data);
-
-#ifdef USE_NSS
- if(CURLE_OK != Curl_nss_force_init(conn->data))
- return CURLE_OUT_OF_MEMORY;
-#endif
-
- if(proxy) {
- allocuserpwd = &conn->allocptr.proxyuserpwd;
- userp = conn->proxyuser;
- passwdp = conn->proxypasswd;
- ntlm = &conn->proxyntlm;
- authp = &conn->data->state.authproxy;
- }
- else {
- allocuserpwd = &conn->allocptr.userpwd;
- userp = conn->user;
- passwdp = conn->passwd;
- ntlm = &conn->ntlm;
- authp = &conn->data->state.authhost;
- }
- authp->done = FALSE;
-
- /* not set means empty */
- if(!userp)
- userp = "";
-
- if(!passwdp)
- passwdp = "";
-
-#ifdef USE_WINDOWS_SSPI
- if(s_hSecDll == NULL) {
- /* not thread safe and leaks - use curl_global_init() to avoid */
- CURLcode err = Curl_sspi_global_init();
- if(s_hSecDll == NULL)
- return err;
- }
-#endif
-
- switch(ntlm->state) {
- case NTLMSTATE_TYPE1:
- default: /* for the weird cases we (re)start here */
- /* Create a type-1 message */
- error = Curl_ntlm_create_type1_message(userp, passwdp, ntlm, &base64,
- &len);
- if(error)
- return error;
-
- if(base64) {
- Curl_safefree(*allocuserpwd);
- *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n",
- proxy ? "Proxy-" : "",
- base64);
- free(base64);
- if(!*allocuserpwd)
- return CURLE_OUT_OF_MEMORY;
- DEBUG_OUT(fprintf(stderr, "**** Header %s\n ", *allocuserpwd));
- }
- break;
-
- case NTLMSTATE_TYPE2:
- /* We already received the type-2 message, create a type-3 message */
- error = Curl_ntlm_create_type3_message(conn->data, userp, passwdp,
- ntlm, &base64, &len);
- if(error)
- return error;
-
- if(base64) {
- Curl_safefree(*allocuserpwd);
- *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n",
- proxy ? "Proxy-" : "",
- base64);
- free(base64);
- if(!*allocuserpwd)
- return CURLE_OUT_OF_MEMORY;
- DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd));
-
- ntlm->state = NTLMSTATE_TYPE3; /* we send a type-3 */
- authp->done = TRUE;
- }
- break;
-
- case NTLMSTATE_TYPE3:
- /* connection is already authenticated,
- * don't send a header in future requests */
- Curl_safefree(*allocuserpwd);
- authp->done = TRUE;
- break;
- }
-
- return CURLE_OK;
-}
-
-void Curl_http_ntlm_cleanup(struct connectdata *conn)
-{
-#ifdef USE_WINDOWS_SSPI
- Curl_ntlm_sspi_cleanup(&conn->ntlm);
- Curl_ntlm_sspi_cleanup(&conn->proxyntlm);
-#elif defined(NTLM_WB_ENABLED)
- Curl_ntlm_wb_cleanup(conn);
-#else
- (void)conn;
-#endif
-
-#ifndef USE_WINDOWS_SSPI
- Curl_safefree(conn->ntlm.target_info);
- conn->ntlm.target_info_len = 0;
-
- Curl_safefree(conn->proxyntlm.target_info);
- conn->proxyntlm.target_info_len = 0;
-#endif
-}
-
-#endif /* USE_NTLM */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ntlm.h b/external/libcurl_android/jni/libcurl/lib/curl_ntlm.h
deleted file mode 100755
index 21a9e9e4..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ntlm.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef HEADER_CURL_NTLM_H
-#define HEADER_CURL_NTLM_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_NTLM
-
-/* this is for ntlm header input */
-CURLcode Curl_input_ntlm(struct connectdata *conn, bool proxy,
- const char *header);
-
-/* this is for creating ntlm header output */
-CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy);
-
-void Curl_http_ntlm_cleanup(struct connectdata *conn);
-
-#else
-
-#define Curl_http_ntlm_cleanup(a) Curl_nop_stmt
-
-#endif
-
-#endif /* HEADER_CURL_NTLM_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_core.c b/external/libcurl_android/jni/libcurl/lib/curl_ntlm_core.c
deleted file mode 100755
index b0116262..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_core.c
+++ /dev/null
@@ -1,651 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_NTLM) && !defined(USE_WINDOWS_SSPI)
-
-/*
- * NTLM details:
- *
- * http://davenport.sourceforge.net/ntlm.html
- * http://www.innovation.ch/java/ntlm.html
- */
-
-#ifdef USE_SSLEAY
-
-# ifdef USE_OPENSSL
-# include <openssl/des.h>
-# ifndef OPENSSL_NO_MD4
-# include <openssl/md4.h>
-# endif
-# include <openssl/md5.h>
-# include <openssl/ssl.h>
-# include <openssl/rand.h>
-# else
-# include <des.h>
-# ifndef OPENSSL_NO_MD4
-# include <md4.h>
-# endif
-# include <md5.h>
-# include <ssl.h>
-# include <rand.h>
-# endif
-# if (OPENSSL_VERSION_NUMBER < 0x00907001L)
-# define DES_key_schedule des_key_schedule
-# define DES_cblock des_cblock
-# define DES_set_odd_parity des_set_odd_parity
-# define DES_set_key des_set_key
-# define DES_ecb_encrypt des_ecb_encrypt
-# define DESKEY(x) x
-# define DESKEYARG(x) x
-# else
-# define DESKEYARG(x) *x
-# define DESKEY(x) &x
-# endif
-
-#elif defined(USE_GNUTLS_NETTLE)
-
-# include <nettle/des.h>
-# include <nettle/md4.h>
-
-#elif defined(USE_GNUTLS)
-
-# include <gcrypt.h>
-# define MD5_DIGEST_LENGTH 16
-# define MD4_DIGEST_LENGTH 16
-
-#elif defined(USE_NSS)
-
-# include <nss.h>
-# include <pk11pub.h>
-# include <hasht.h>
-# include "curl_md4.h"
-# define MD5_DIGEST_LENGTH MD5_LENGTH
-
-#elif defined(USE_DARWINSSL)
-
-# include <CommonCrypto/CommonCryptor.h>
-# include <CommonCrypto/CommonDigest.h>
-
-#else
-# error "Can't compile NTLM support without a crypto library."
-#endif
-
-#include "urldata.h"
-#include "non-ascii.h"
-#include "rawstr.h"
-#include "curl_memory.h"
-#include "curl_ntlm_core.h"
-#include "curl_md5.h"
-#include "curl_hmac.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#define NTLM_HMAC_MD5_LEN (16)
-#define NTLMv2_BLOB_SIGNATURE "\x01\x01\x00\x00"
-#define NTLMv2_BLOB_LEN (44 -16 + ntlm->target_info_len + 4)
-
-#ifdef USE_SSLEAY
-/*
- * Turns a 56 bit key into the 64 bit, odd parity key and sets the key. The
- * key schedule ks is also set.
- */
-static void setup_des_key(const unsigned char *key_56,
- DES_key_schedule DESKEYARG(ks))
-{
- DES_cblock key;
-
- key[0] = key_56[0];
- key[1] = (unsigned char)(((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1));
- key[2] = (unsigned char)(((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2));
- key[3] = (unsigned char)(((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3));
- key[4] = (unsigned char)(((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4));
- key[5] = (unsigned char)(((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5));
- key[6] = (unsigned char)(((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6));
- key[7] = (unsigned char) ((key_56[6] << 1) & 0xFF);
-
- DES_set_odd_parity(&key);
- DES_set_key(&key, ks);
-}
-
-#else /* defined(USE_SSLEAY) */
-
-/*
- * Turns a 56 bit key into the 64 bit, odd parity key. Used by GnuTLS and NSS.
- */
-static void extend_key_56_to_64(const unsigned char *key_56, char *key)
-{
- key[0] = key_56[0];
- key[1] = (unsigned char)(((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1));
- key[2] = (unsigned char)(((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2));
- key[3] = (unsigned char)(((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3));
- key[4] = (unsigned char)(((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4));
- key[5] = (unsigned char)(((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5));
- key[6] = (unsigned char)(((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6));
- key[7] = (unsigned char) ((key_56[6] << 1) & 0xFF);
-}
-
-#if defined(USE_GNUTLS_NETTLE)
-
-static void setup_des_key(const unsigned char *key_56,
- struct des_ctx *des)
-{
- char key[8];
- extend_key_56_to_64(key_56, key);
- des_set_key(des, (const uint8_t*)key);
-}
-
-#elif defined(USE_GNUTLS)
-
-/*
- * Turns a 56 bit key into the 64 bit, odd parity key and sets the key.
- */
-static void setup_des_key(const unsigned char *key_56,
- gcry_cipher_hd_t *des)
-{
- char key[8];
- extend_key_56_to_64(key_56, key);
- gcry_cipher_setkey(*des, key, 8);
-}
-
-#elif defined(USE_NSS)
-
-/*
- * Expands a 56 bit key KEY_56 to 64 bit and encrypts 64 bit of data, using
- * the expanded key. The caller is responsible for giving 64 bit of valid
- * data is IN and (at least) 64 bit large buffer as OUT.
- */
-static bool encrypt_des(const unsigned char *in, unsigned char *out,
- const unsigned char *key_56)
-{
- const CK_MECHANISM_TYPE mech = CKM_DES_ECB; /* DES cipher in ECB mode */
- PK11SlotInfo *slot = NULL;
- char key[8]; /* expanded 64 bit key */
- SECItem key_item;
- PK11SymKey *symkey = NULL;
- SECItem *param = NULL;
- PK11Context *ctx = NULL;
- int out_len; /* not used, required by NSS */
- bool rv = FALSE;
-
- /* use internal slot for DES encryption (requires NSS to be initialized) */
- slot = PK11_GetInternalKeySlot();
- if(!slot)
- return FALSE;
-
- /* expand the 56 bit key to 64 bit and wrap by NSS */
- extend_key_56_to_64(key_56, key);
- key_item.data = (unsigned char *)key;
- key_item.len = /* hard-wired */ 8;
- symkey = PK11_ImportSymKey(slot, mech, PK11_OriginUnwrap, CKA_ENCRYPT,
- &key_item, NULL);
- if(!symkey)
- goto fail;
-
- /* create DES encryption context */
- param = PK11_ParamFromIV(mech, /* no IV in ECB mode */ NULL);
- if(!param)
- goto fail;
- ctx = PK11_CreateContextBySymKey(mech, CKA_ENCRYPT, symkey, param);
- if(!ctx)
- goto fail;
-
- /* perform the encryption */
- if(SECSuccess == PK11_CipherOp(ctx, out, &out_len, /* outbuflen */ 8,
- (unsigned char *)in, /* inbuflen */ 8)
- && SECSuccess == PK11_Finalize(ctx))
- rv = /* all OK */ TRUE;
-
-fail:
- /* cleanup */
- if(ctx)
- PK11_DestroyContext(ctx, PR_TRUE);
- if(symkey)
- PK11_FreeSymKey(symkey);
- if(param)
- SECITEM_FreeItem(param, PR_TRUE);
- PK11_FreeSlot(slot);
- return rv;
-}
-
-#elif defined(USE_DARWINSSL)
-
-static bool encrypt_des(const unsigned char *in, unsigned char *out,
- const unsigned char *key_56)
-{
- char key[8];
- size_t out_len;
- CCCryptorStatus err;
-
- extend_key_56_to_64(key_56, key);
- err = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionECBMode, key,
- kCCKeySizeDES, NULL, in, 8 /* inbuflen */, out,
- 8 /* outbuflen */, &out_len);
- return err == kCCSuccess;
-}
-
-#endif /* defined(USE_DARWINSSL) */
-
-#endif /* defined(USE_SSLEAY) */
-
- /*
- * takes a 21 byte array and treats it as 3 56-bit DES keys. The
- * 8 byte plaintext is encrypted with each key and the resulting 24
- * bytes are stored in the results array.
- */
-void Curl_ntlm_core_lm_resp(const unsigned char *keys,
- const unsigned char *plaintext,
- unsigned char *results)
-{
-#ifdef USE_SSLEAY
- DES_key_schedule ks;
-
- setup_des_key(keys, DESKEY(ks));
- DES_ecb_encrypt((DES_cblock*) plaintext, (DES_cblock*) results,
- DESKEY(ks), DES_ENCRYPT);
-
- setup_des_key(keys + 7, DESKEY(ks));
- DES_ecb_encrypt((DES_cblock*) plaintext, (DES_cblock*) (results + 8),
- DESKEY(ks), DES_ENCRYPT);
-
- setup_des_key(keys + 14, DESKEY(ks));
- DES_ecb_encrypt((DES_cblock*) plaintext, (DES_cblock*) (results + 16),
- DESKEY(ks), DES_ENCRYPT);
-#elif defined(USE_GNUTLS_NETTLE)
- struct des_ctx des;
- setup_des_key(keys, &des);
- des_encrypt(&des, 8, results, plaintext);
- setup_des_key(keys + 7, &des);
- des_encrypt(&des, 8, results + 8, plaintext);
- setup_des_key(keys + 14, &des);
- des_encrypt(&des, 8, results + 16, plaintext);
-#elif defined(USE_GNUTLS)
- gcry_cipher_hd_t des;
-
- gcry_cipher_open(&des, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0);
- setup_des_key(keys, &des);
- gcry_cipher_encrypt(des, results, 8, plaintext, 8);
- gcry_cipher_close(des);
-
- gcry_cipher_open(&des, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0);
- setup_des_key(keys + 7, &des);
- gcry_cipher_encrypt(des, results + 8, 8, plaintext, 8);
- gcry_cipher_close(des);
-
- gcry_cipher_open(&des, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0);
- setup_des_key(keys + 14, &des);
- gcry_cipher_encrypt(des, results + 16, 8, plaintext, 8);
- gcry_cipher_close(des);
-#elif defined(USE_NSS) || defined(USE_DARWINSSL)
- encrypt_des(plaintext, results, keys);
- encrypt_des(plaintext, results + 8, keys + 7);
- encrypt_des(plaintext, results + 16, keys + 14);
-#endif
-}
-
-/*
- * Set up lanmanager hashed password
- */
-void Curl_ntlm_core_mk_lm_hash(struct SessionHandle *data,
- const char *password,
- unsigned char *lmbuffer /* 21 bytes */)
-{
- CURLcode res;
- unsigned char pw[14];
- static const unsigned char magic[] = {
- 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 /* i.e. KGS!@#$% */
- };
- size_t len = CURLMIN(strlen(password), 14);
-
- Curl_strntoupper((char *)pw, password, len);
- memset(&pw[len], 0, 14 - len);
-
- /*
- * The LanManager hashed password needs to be created using the
- * password in the network encoding not the host encoding.
- */
- res = Curl_convert_to_network(data, (char *)pw, 14);
- if(res)
- return;
-
- {
- /* Create LanManager hashed password. */
-
-#ifdef USE_SSLEAY
- DES_key_schedule ks;
-
- setup_des_key(pw, DESKEY(ks));
- DES_ecb_encrypt((DES_cblock *)magic, (DES_cblock *)lmbuffer,
- DESKEY(ks), DES_ENCRYPT);
-
- setup_des_key(pw + 7, DESKEY(ks));
- DES_ecb_encrypt((DES_cblock *)magic, (DES_cblock *)(lmbuffer + 8),
- DESKEY(ks), DES_ENCRYPT);
-#elif defined(USE_GNUTLS_NETTLE)
- struct des_ctx des;
- setup_des_key(pw, &des);
- des_encrypt(&des, 8, lmbuffer, magic);
- setup_des_key(pw + 7, &des);
- des_encrypt(&des, 8, lmbuffer + 8, magic);
-#elif defined(USE_GNUTLS)
- gcry_cipher_hd_t des;
-
- gcry_cipher_open(&des, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0);
- setup_des_key(pw, &des);
- gcry_cipher_encrypt(des, lmbuffer, 8, magic, 8);
- gcry_cipher_close(des);
-
- gcry_cipher_open(&des, GCRY_CIPHER_DES, GCRY_CIPHER_MODE_ECB, 0);
- setup_des_key(pw + 7, &des);
- gcry_cipher_encrypt(des, lmbuffer + 8, 8, magic, 8);
- gcry_cipher_close(des);
-#elif defined(USE_NSS) || defined(USE_DARWINSSL)
- encrypt_des(magic, lmbuffer, pw);
- encrypt_des(magic, lmbuffer + 8, pw + 7);
-#endif
-
- memset(lmbuffer + 16, 0, 21 - 16);
- }
-}
-
-#if USE_NTRESPONSES
-static void ascii_to_unicode_le(unsigned char *dest, const char *src,
- size_t srclen)
-{
- size_t i;
- for(i = 0; i < srclen; i++) {
- dest[2 * i] = (unsigned char)src[i];
- dest[2 * i + 1] = '\0';
- }
-}
-
-static void ascii_uppercase_to_unicode_le(unsigned char *dest,
- const char *src, size_t srclen)
-{
- size_t i;
- for(i = 0; i < srclen; i++) {
- dest[2 * i] = (unsigned char)(toupper(src[i]));
- dest[2 * i + 1] = '\0';
- }
-}
-
-static void write32_le(const int value, unsigned char *buffer)
-{
- buffer[0] = (char)(value & 0x000000FF);
- buffer[1] = (char)((value & 0x0000FF00) >> 8);
- buffer[2] = (char)((value & 0x00FF0000) >> 16);
- buffer[3] = (char)((value & 0xFF000000) >> 24);
-}
-
-#if defined(HAVE_LONGLONG)
-static void write64_le(const long long value, unsigned char *buffer)
-#else
-static void write64_le(const __int64 value, unsigned char *buffer)
-#endif
-{
- write32_le((int)value, buffer);
- write32_le((int)(value >> 32), buffer + 4);
-}
-
-/*
- * Set up nt hashed passwords
- */
-CURLcode Curl_ntlm_core_mk_nt_hash(struct SessionHandle *data,
- const char *password,
- unsigned char *ntbuffer /* 21 bytes */)
-{
- size_t len = strlen(password);
- unsigned char *pw = malloc(len * 2);
- CURLcode result;
- if(!pw)
- return CURLE_OUT_OF_MEMORY;
-
- ascii_to_unicode_le(pw, password, len);
-
- /*
- * The NT hashed password needs to be created using the password in the
- * network encoding not the host encoding.
- */
- result = Curl_convert_to_network(data, (char *)pw, len * 2);
- if(result)
- return result;
-
- {
- /* Create NT hashed password. */
-#ifdef USE_SSLEAY
- MD4_CTX MD4pw;
- MD4_Init(&MD4pw);
- MD4_Update(&MD4pw, pw, 2 * len);
- MD4_Final(ntbuffer, &MD4pw);
-#elif defined(USE_GNUTLS_NETTLE)
- struct md4_ctx MD4pw;
- md4_init(&MD4pw);
- md4_update(&MD4pw, (unsigned int)(2 * len), pw);
- md4_digest(&MD4pw, MD4_DIGEST_SIZE, ntbuffer);
-#elif defined(USE_GNUTLS)
- gcry_md_hd_t MD4pw;
- gcry_md_open(&MD4pw, GCRY_MD_MD4, 0);
- gcry_md_write(MD4pw, pw, 2 * len);
- memcpy (ntbuffer, gcry_md_read (MD4pw, 0), MD4_DIGEST_LENGTH);
- gcry_md_close(MD4pw);
-#elif defined(USE_NSS)
- Curl_md4it(ntbuffer, pw, 2 * len);
-#elif defined(USE_DARWINSSL)
- (void)CC_MD4(pw, (CC_LONG)(2 * len), ntbuffer);
-#endif
-
- memset(ntbuffer + 16, 0, 21 - 16);
- }
-
- free(pw);
-
- return CURLE_OK;
-}
-
-/* This returns the HMAC MD5 digest */
-CURLcode Curl_hmac_md5(const unsigned char *key, unsigned int keylen,
- const unsigned char *data, unsigned int datalen,
- unsigned char *output)
-{
- HMAC_context *ctxt = Curl_HMAC_init(Curl_HMAC_MD5, key, keylen);
-
- if(!ctxt)
- return CURLE_OUT_OF_MEMORY;
-
- /* Update the digest with the given challenge */
- Curl_HMAC_update(ctxt, data, datalen);
-
- /* Finalise the digest */
- Curl_HMAC_final(ctxt, output);
-
- return CURLE_OK;
-}
-
-/* This creates the NTLMv2 hash by using NTLM hash as the key and Unicode
- * (uppercase UserName + Domain) as the data
- */
-CURLcode Curl_ntlm_core_mk_ntlmv2_hash(const char *user, size_t userlen,
- const char *domain, size_t domlen,
- unsigned char *ntlmhash,
- unsigned char *ntlmv2hash)
-{
- /* Unicode representation */
- size_t identity_len = (userlen + domlen) * 2;
- unsigned char *identity = malloc(identity_len);
- CURLcode res = CURLE_OK;
-
- if(!identity)
- return CURLE_OUT_OF_MEMORY;
-
- ascii_uppercase_to_unicode_le(identity, user, userlen);
- ascii_to_unicode_le(identity + (userlen << 1), domain, domlen);
-
- res = Curl_hmac_md5(ntlmhash, 16, identity, curlx_uztoui(identity_len),
- ntlmv2hash);
-
- Curl_safefree(identity);
-
- return res;
-}
-
-/*
- * Curl_ntlm_core_mk_ntlmv2_resp()
- *
- * This creates the NTLMv2 response as set in the ntlm type-3 message.
- *
- * Parameters:
- *
- * ntlmv2hash [in] - The ntlmv2 hash (16 bytes)
- * challenge_client [in] - The client nonce (8 bytes)
- * ntlm [in] - The ntlm data struct being used to read TargetInfo
- and Server challenge received in the type-2 message
- * ntresp [out] - The address where a pointer to newly allocated
- * memory holding the NTLMv2 response.
- * ntresp_len [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash,
- unsigned char *challenge_client,
- struct ntlmdata *ntlm,
- unsigned char **ntresp,
- unsigned int *ntresp_len)
-{
-/* NTLMv2 response structure :
-------------------------------------------------------------------------------
-0 HMAC MD5 16 bytes
-------BLOB--------------------------------------------------------------------
-16 Signature 0x01010000
-20 Reserved long (0x00000000)
-24 Timestamp LE, 64-bit signed value representing the number of
- tenths of a microsecond since January 1, 1601.
-32 Client Nonce 8 bytes
-40 Unknown 4 bytes
-44 Target Info N bytes (from the type-2 message)
-44+N Unknown 4 bytes
-------------------------------------------------------------------------------
-*/
-
- unsigned int len = 0;
- unsigned char *ptr = NULL;
- unsigned char hmac_output[NTLM_HMAC_MD5_LEN];
-#if defined(HAVE_LONGLONG)
- long long tw;
-#else
- __int64 tw;
-#endif
- CURLcode res = CURLE_OK;
-
- /* Calculate the timestamp */
-#ifdef DEBUGBUILD
- char *force_timestamp = getenv("CURL_FORCETIME");
- if(force_timestamp)
- tw = 11644473600ULL * 10000000ULL;
- else
-#endif
- tw = ((long long)time(NULL) + 11644473600ULL) * 10000000ULL;
-
- /* Calculate the response len */
- len = NTLM_HMAC_MD5_LEN + NTLMv2_BLOB_LEN;
-
- /* Allocate the response */
- ptr = malloc(len);
- if(!ptr)
- return CURLE_OUT_OF_MEMORY;
-
- memset(ptr, 0, len);
-
- /* Create the BLOB structure */
- snprintf((char *)ptr + NTLM_HMAC_MD5_LEN, NTLMv2_BLOB_LEN,
- NTLMv2_BLOB_SIGNATURE
- "%c%c%c%c", /* Reserved = 0 */
- 0, 0, 0, 0);
-
- write64_le(tw, ptr + 24);
- memcpy(ptr + 32, challenge_client, 8);
- memcpy(ptr + 44, ntlm->target_info, ntlm->target_info_len);
-
- /* Concatenate the Type 2 challenge with the BLOB and do HMAC MD5 */
- memcpy(ptr + 8, &ntlm->nonce[0], 8);
- res = Curl_hmac_md5(ntlmv2hash, NTLM_HMAC_MD5_LEN, ptr + 8,
- NTLMv2_BLOB_LEN + 8, hmac_output);
- if(res) {
- Curl_safefree(ptr);
- return res;
- }
-
- /* Concatenate the HMAC MD5 output with the BLOB */
- memcpy(ptr, hmac_output, NTLM_HMAC_MD5_LEN);
-
- /* Return the response */
- *ntresp = ptr;
- *ntresp_len = len;
-
- return res;
-}
-
-/*
- * Curl_ntlm_core_mk_lmv2_resp()
- *
- * This creates the LMv2 response as used in the ntlm type-3 message.
- *
- * Parameters:
- *
- * ntlmv2hash [in] - The ntlmv2 hash (16 bytes)
- * challenge_client [in] - The client nonce (8 bytes)
- * challenge_client [in] - The server challenge (8 bytes)
- * lmresp [out] - The LMv2 response (24 bytes)
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_ntlm_core_mk_lmv2_resp(unsigned char *ntlmv2hash,
- unsigned char *challenge_client,
- unsigned char *challenge_server,
- unsigned char *lmresp)
-{
- unsigned char data[16];
- unsigned char hmac_output[16];
- CURLcode res = CURLE_OK;
-
- memcpy(&data[0], challenge_server, 8);
- memcpy(&data[8], challenge_client, 8);
-
- res = Curl_hmac_md5(ntlmv2hash, 16, &data[0], 16, hmac_output);
- if(res)
- return res;
-
- /* Concatenate the HMAC MD5 output with the client nonce */
- memcpy(lmresp, hmac_output, 16);
- memcpy(lmresp+16, challenge_client, 8);
-
- return res;
-}
-
-#endif /* USE_NTRESPONSES */
-
-#endif /* USE_NTLM && !USE_WINDOWS_SSPI */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_core.h b/external/libcurl_android/jni/libcurl/lib/curl_ntlm_core.h
deleted file mode 100755
index fe41cddf..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_core.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef HEADER_CURL_NTLM_CORE_H
-#define HEADER_CURL_NTLM_CORE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_NTLM) && !defined(USE_WINDOWS_SSPI)
-
-#ifdef USE_SSLEAY
-# if !defined(OPENSSL_VERSION_NUMBER) && \
- !defined(HEADER_SSL_H) && !defined(HEADER_MD5_H)
-# error "curl_ntlm_core.h shall not be included before OpenSSL headers."
-# endif
-# ifdef OPENSSL_NO_MD4
-# define USE_NTRESPONSES 0
-# define USE_NTLM2SESSION 0
-# endif
-#endif
-
-/*
- * Define USE_NTRESPONSES to 1 in order to make the type-3 message include
- * the NT response message. Define USE_NTLM2SESSION to 1 in order to make
- * the type-3 message include the NTLM2Session response message, requires
- * USE_NTRESPONSES defined to 1.
- */
-
-#ifndef USE_NTRESPONSES
-# define USE_NTRESPONSES 1
-# define USE_NTLM2SESSION 1
-#endif
-
-void Curl_ntlm_core_lm_resp(const unsigned char *keys,
- const unsigned char *plaintext,
- unsigned char *results);
-
-void Curl_ntlm_core_mk_lm_hash(struct SessionHandle *data,
- const char *password,
- unsigned char *lmbuffer /* 21 bytes */);
-
-#if USE_NTRESPONSES
-CURLcode Curl_hmac_md5(const unsigned char *key, unsigned int keylen,
- const unsigned char *data, unsigned int datalen,
- unsigned char *output);
-
-CURLcode Curl_ntlm_core_mk_nt_hash(struct SessionHandle *data,
- const char *password,
- unsigned char *ntbuffer /* 21 bytes */);
-
-CURLcode Curl_ntlm_core_mk_ntlmv2_hash(const char *user, size_t userlen,
- const char *domain, size_t domlen,
- unsigned char *ntlmhash,
- unsigned char *ntlmv2hash);
-
-CURLcode Curl_ntlm_core_mk_ntlmv2_resp(unsigned char *ntlmv2hash,
- unsigned char *challenge_client,
- struct ntlmdata *ntlm,
- unsigned char **ntresp,
- unsigned int *ntresp_len);
-
-CURLcode Curl_ntlm_core_mk_lmv2_resp(unsigned char *ntlmv2hash,
- unsigned char *challenge_client,
- unsigned char *challenge_server,
- unsigned char *lmresp);
-
-#endif
-
-#endif /* USE_NTLM && !USE_WINDOWS_SSPI */
-
-#endif /* HEADER_CURL_NTLM_CORE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_msgs.c b/external/libcurl_android/jni/libcurl/lib/curl_ntlm_msgs.c
deleted file mode 100755
index b8079263..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_msgs.c
+++ /dev/null
@@ -1,1010 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_NTLM
-
-/*
- * NTLM details:
- *
- * http://davenport.sourceforge.net/ntlm.html
- * http://www.innovation.ch/java/ntlm.html
- */
-
-#define DEBUG_ME 0
-
-#include "urldata.h"
-#include "non-ascii.h"
-#include "sendf.h"
-#include "curl_base64.h"
-#include "curl_ntlm_core.h"
-#include "curl_gethostname.h"
-#include "curl_multibyte.h"
-#include "warnless.h"
-#include "curl_memory.h"
-
-#ifdef USE_WINDOWS_SSPI
-# include "curl_sspi.h"
-#endif
-
-#include "vtls/vtls.h"
-
-#define BUILDING_CURL_NTLM_MSGS_C
-#include "curl_ntlm_msgs.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* "NTLMSSP" signature is always in ASCII regardless of the platform */
-#define NTLMSSP_SIGNATURE "\x4e\x54\x4c\x4d\x53\x53\x50"
-
-#define SHORTPAIR(x) ((x) & 0xff), (((x) >> 8) & 0xff)
-#define LONGQUARTET(x) ((x) & 0xff), (((x) >> 8) & 0xff), \
- (((x) >> 16) & 0xff), (((x) >> 24) & 0xff)
-
-#if DEBUG_ME
-# define DEBUG_OUT(x) x
-static void ntlm_print_flags(FILE *handle, unsigned long flags)
-{
- if(flags & NTLMFLAG_NEGOTIATE_UNICODE)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_UNICODE ");
- if(flags & NTLMFLAG_NEGOTIATE_OEM)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_OEM ");
- if(flags & NTLMFLAG_REQUEST_TARGET)
- fprintf(handle, "NTLMFLAG_REQUEST_TARGET ");
- if(flags & (1<<3))
- fprintf(handle, "NTLMFLAG_UNKNOWN_3 ");
- if(flags & NTLMFLAG_NEGOTIATE_SIGN)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_SIGN ");
- if(flags & NTLMFLAG_NEGOTIATE_SEAL)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_SEAL ");
- if(flags & NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE ");
- if(flags & NTLMFLAG_NEGOTIATE_LM_KEY)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_LM_KEY ");
- if(flags & NTLMFLAG_NEGOTIATE_NETWARE)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_NETWARE ");
- if(flags & NTLMFLAG_NEGOTIATE_NTLM_KEY)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_NTLM_KEY ");
- if(flags & (1<<10))
- fprintf(handle, "NTLMFLAG_UNKNOWN_10 ");
- if(flags & NTLMFLAG_NEGOTIATE_ANONYMOUS)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_ANONYMOUS ");
- if(flags & NTLMFLAG_NEGOTIATE_DOMAIN_SUPPLIED)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_DOMAIN_SUPPLIED ");
- if(flags & NTLMFLAG_NEGOTIATE_WORKSTATION_SUPPLIED)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_WORKSTATION_SUPPLIED ");
- if(flags & NTLMFLAG_NEGOTIATE_LOCAL_CALL)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_LOCAL_CALL ");
- if(flags & NTLMFLAG_NEGOTIATE_ALWAYS_SIGN)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_ALWAYS_SIGN ");
- if(flags & NTLMFLAG_TARGET_TYPE_DOMAIN)
- fprintf(handle, "NTLMFLAG_TARGET_TYPE_DOMAIN ");
- if(flags & NTLMFLAG_TARGET_TYPE_SERVER)
- fprintf(handle, "NTLMFLAG_TARGET_TYPE_SERVER ");
- if(flags & NTLMFLAG_TARGET_TYPE_SHARE)
- fprintf(handle, "NTLMFLAG_TARGET_TYPE_SHARE ");
- if(flags & NTLMFLAG_NEGOTIATE_NTLM2_KEY)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_NTLM2_KEY ");
- if(flags & NTLMFLAG_REQUEST_INIT_RESPONSE)
- fprintf(handle, "NTLMFLAG_REQUEST_INIT_RESPONSE ");
- if(flags & NTLMFLAG_REQUEST_ACCEPT_RESPONSE)
- fprintf(handle, "NTLMFLAG_REQUEST_ACCEPT_RESPONSE ");
- if(flags & NTLMFLAG_REQUEST_NONNT_SESSION_KEY)
- fprintf(handle, "NTLMFLAG_REQUEST_NONNT_SESSION_KEY ");
- if(flags & NTLMFLAG_NEGOTIATE_TARGET_INFO)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_TARGET_INFO ");
- if(flags & (1<<24))
- fprintf(handle, "NTLMFLAG_UNKNOWN_24 ");
- if(flags & (1<<25))
- fprintf(handle, "NTLMFLAG_UNKNOWN_25 ");
- if(flags & (1<<26))
- fprintf(handle, "NTLMFLAG_UNKNOWN_26 ");
- if(flags & (1<<27))
- fprintf(handle, "NTLMFLAG_UNKNOWN_27 ");
- if(flags & (1<<28))
- fprintf(handle, "NTLMFLAG_UNKNOWN_28 ");
- if(flags & NTLMFLAG_NEGOTIATE_128)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_128 ");
- if(flags & NTLMFLAG_NEGOTIATE_KEY_EXCHANGE)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_KEY_EXCHANGE ");
- if(flags & NTLMFLAG_NEGOTIATE_56)
- fprintf(handle, "NTLMFLAG_NEGOTIATE_56 ");
-}
-
-static void ntlm_print_hex(FILE *handle, const char *buf, size_t len)
-{
- const char *p = buf;
- (void)handle;
- fprintf(stderr, "0x");
- while(len-- > 0)
- fprintf(stderr, "%02.2x", (unsigned int)*p++);
-}
-#else
-# define DEBUG_OUT(x) Curl_nop_stmt
-#endif
-
-#ifndef USE_WINDOWS_SSPI
-/*
- * This function converts from the little endian format used in the
- * incoming package to whatever endian format we're using natively.
- * Argument is a pointer to a 4 byte buffer.
- */
-static unsigned int readint_le(unsigned char *buf)
-{
- return ((unsigned int)buf[0]) | ((unsigned int)buf[1] << 8) |
- ((unsigned int)buf[2] << 16) | ((unsigned int)buf[3] << 24);
-}
-
-/*
- * This function converts from the little endian format used in the incoming
- * package to whatever endian format we're using natively. Argument is a
- * pointer to a 2 byte buffer.
- */
-static unsigned int readshort_le(unsigned char *buf)
-{
- return ((unsigned int)buf[0]) | ((unsigned int)buf[1] << 8);
-}
-
-/*
- * Curl_ntlm_decode_type2_target()
- *
- * This is used to decode the "target info" in the ntlm type-2 message
- * received.
- *
- * Parameters:
- *
- * data [in] - Pointer to the session handle
- * buffer [in] - The decoded base64 ntlm header of Type 2
- * size [in] - The input buffer size, atleast 32 bytes
- * ntlm [in] - Pointer to ntlm data struct being used and modified.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_ntlm_decode_type2_target(struct SessionHandle *data,
- unsigned char *buffer,
- size_t size,
- struct ntlmdata *ntlm)
-{
- unsigned int target_info_len = 0;
- unsigned int target_info_offset = 0;
-
- Curl_safefree(ntlm->target_info);
- ntlm->target_info_len = 0;
-
- if(size >= 48) {
- target_info_len = readshort_le(&buffer[40]);
- target_info_offset = readint_le(&buffer[44]);
- if(target_info_len > 0) {
- if(((target_info_offset + target_info_len) > size) ||
- (target_info_offset < 48)) {
- infof(data, "NTLM handshake failure (bad type-2 message). "
- "Target Info Offset Len is set incorrect by the peer\n");
- return CURLE_REMOTE_ACCESS_DENIED;
- }
-
- ntlm->target_info = malloc(target_info_len);
- if(!ntlm->target_info)
- return CURLE_OUT_OF_MEMORY;
-
- memcpy(ntlm->target_info, &buffer[target_info_offset], target_info_len);
- ntlm->target_info_len = target_info_len;
-
- }
-
- }
-
- return CURLE_OK;
-}
-
-#endif
-
-/*
- NTLM message structure notes:
-
- A 'short' is a 'network short', a little-endian 16-bit unsigned value.
-
- A 'long' is a 'network long', a little-endian, 32-bit unsigned value.
-
- A 'security buffer' represents a triplet used to point to a buffer,
- consisting of two shorts and one long:
-
- 1. A 'short' containing the length of the buffer content in bytes.
- 2. A 'short' containing the allocated space for the buffer in bytes.
- 3. A 'long' containing the offset to the start of the buffer in bytes,
- from the beginning of the NTLM message.
-*/
-
-/*
- * Curl_ntlm_decode_type2_message()
- *
- * This is used to decode a ntlm type-2 message received from a HTTP or SASL
- * based (such as SMTP, POP3 or IMAP) server. The message is first decoded
- * from a base64 string into a raw ntlm message and checked for validity
- * before the appropriate data for creating a type-3 message is written to
- * the given ntlm data structure.
- *
- * Parameters:
- *
- * data [in] - Pointer to session handle.
- * header [in] - Pointer to the input buffer.
- * ntlm [in] - Pointer to ntlm data struct being used and modified.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_ntlm_decode_type2_message(struct SessionHandle *data,
- const char *header,
- struct ntlmdata *ntlm)
-{
-#ifndef USE_WINDOWS_SSPI
- static const char type2_marker[] = { 0x02, 0x00, 0x00, 0x00 };
-#endif
-
- /* NTLM type-2 message structure:
-
- Index Description Content
- 0 NTLMSSP Signature Null-terminated ASCII "NTLMSSP"
- (0x4e544c4d53535000)
- 8 NTLM Message Type long (0x02000000)
- 12 Target Name security buffer
- 20 Flags long
- 24 Challenge 8 bytes
- (32) Context 8 bytes (two consecutive longs) (*)
- (40) Target Information security buffer (*)
- (48) OS Version Structure 8 bytes (*)
- 32 (48) (56) Start of data block (*)
- (*) -> Optional
- */
-
- size_t size = 0;
- unsigned char *buffer = NULL;
- CURLcode error;
-
-#if defined(CURL_DISABLE_VERBOSE_STRINGS) || defined(USE_WINDOWS_SSPI)
- (void)data;
-#endif
-
- error = Curl_base64_decode(header, &buffer, &size);
- if(error)
- return error;
-
- if(!buffer) {
- infof(data, "NTLM handshake failure (unhandled condition)\n");
- return CURLE_REMOTE_ACCESS_DENIED;
- }
-
-#ifdef USE_WINDOWS_SSPI
- ntlm->type_2 = malloc(size + 1);
- if(ntlm->type_2 == NULL) {
- free(buffer);
- return CURLE_OUT_OF_MEMORY;
- }
- ntlm->n_type_2 = curlx_uztoul(size);
- memcpy(ntlm->type_2, buffer, size);
-#else
- ntlm->flags = 0;
-
- if((size < 32) ||
- (memcmp(buffer, NTLMSSP_SIGNATURE, 8) != 0) ||
- (memcmp(buffer + 8, type2_marker, sizeof(type2_marker)) != 0)) {
- /* This was not a good enough type-2 message */
- free(buffer);
- infof(data, "NTLM handshake failure (bad type-2 message)\n");
- return CURLE_REMOTE_ACCESS_DENIED;
- }
-
- ntlm->flags = readint_le(&buffer[20]);
- memcpy(ntlm->nonce, &buffer[24], 8);
-
- if(ntlm->flags & NTLMFLAG_NEGOTIATE_TARGET_INFO) {
- error = Curl_ntlm_decode_type2_target(data, buffer, size, ntlm);
- if(error) {
- free(buffer);
- infof(data, "NTLM handshake failure (bad type-2 message)\n");
- return error;
- }
- }
-
- DEBUG_OUT({
- fprintf(stderr, "**** TYPE2 header flags=0x%08.8lx ", ntlm->flags);
- ntlm_print_flags(stderr, ntlm->flags);
- fprintf(stderr, "\n nonce=");
- ntlm_print_hex(stderr, (char *)ntlm->nonce, 8);
- fprintf(stderr, "\n****\n");
- fprintf(stderr, "**** Header %s\n ", header);
- });
-#endif
- free(buffer);
-
- return CURLE_OK;
-}
-
-#ifdef USE_WINDOWS_SSPI
-void Curl_ntlm_sspi_cleanup(struct ntlmdata *ntlm)
-{
- Curl_safefree(ntlm->type_2);
-
- if(ntlm->has_handles) {
- s_pSecFn->DeleteSecurityContext(&ntlm->c_handle);
- s_pSecFn->FreeCredentialsHandle(&ntlm->handle);
- ntlm->has_handles = 0;
- }
-
- ntlm->max_token_length = 0;
- Curl_safefree(ntlm->output_token);
-
- Curl_sspi_free_identity(ntlm->p_identity);
- ntlm->p_identity = NULL;
-}
-#endif
-
-#ifndef USE_WINDOWS_SSPI
-/* copy the source to the destination and fill in zeroes in every
- other destination byte! */
-static void unicodecpy(unsigned char *dest, const char *src, size_t length)
-{
- size_t i;
- for(i = 0; i < length; i++) {
- dest[2 * i] = (unsigned char)src[i];
- dest[2 * i + 1] = '\0';
- }
-}
-#endif
-
-/*
- * Curl_ntlm_create_type1_message()
- *
- * This is used to generate an already encoded NTLM type-1 message ready for
- * sending to the recipient, be it a HTTP or SASL based (such as SMTP, POP3
- * or IMAP) server, using the appropriate compile time crypo API.
- *
- * Parameters:
- *
- * userp [in] - The user name in the format User or Domain\User.
- * passdwp [in] - The user's password.
- * ntlm [in/out] - The ntlm data struct being used and modified.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_ntlm_create_type1_message(const char *userp,
- const char *passwdp,
- struct ntlmdata *ntlm,
- char **outptr,
- size_t *outlen)
-{
- /* NTLM type-1 message structure:
-
- Index Description Content
- 0 NTLMSSP Signature Null-terminated ASCII "NTLMSSP"
- (0x4e544c4d53535000)
- 8 NTLM Message Type long (0x01000000)
- 12 Flags long
- (16) Supplied Domain security buffer (*)
- (24) Supplied Workstation security buffer (*)
- (32) OS Version Structure 8 bytes (*)
- (32) (40) Start of data block (*)
- (*) -> Optional
- */
-
- size_t size;
-
-#ifdef USE_WINDOWS_SSPI
-
- PSecPkgInfo SecurityPackage;
- SecBuffer type_1_buf;
- SecBufferDesc type_1_desc;
- SECURITY_STATUS status;
- unsigned long attrs;
- TimeStamp tsDummy; /* For Windows 9x compatibility of SSPI calls */
-
- Curl_ntlm_sspi_cleanup(ntlm);
-
- /* Query the security package for NTLM */
- status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT("NTLM"),
- &SecurityPackage);
- if(status != SEC_E_OK)
- return CURLE_NOT_BUILT_IN;
-
- ntlm->max_token_length = SecurityPackage->cbMaxToken;
-
- /* Release the package buffer as it is not required anymore */
- s_pSecFn->FreeContextBuffer(SecurityPackage);
-
- /* Allocate our output buffer */
- ntlm->output_token = malloc(ntlm->max_token_length);
- if(!ntlm->output_token)
- return CURLE_OUT_OF_MEMORY;
-
- if(userp && *userp) {
- CURLcode result;
-
- /* Populate our identity structure */
- result = Curl_create_sspi_identity(userp, passwdp, &ntlm->identity);
- if(result)
- return result;
-
- /* Allow proper cleanup of the identity structure */
- ntlm->p_identity = &ntlm->identity;
- }
- else
- /* Use the current Windows user */
- ntlm->p_identity = NULL;
-
- /* Acquire our credientials handle */
- status = s_pSecFn->AcquireCredentialsHandle(NULL,
- (TCHAR *) TEXT("NTLM"),
- SECPKG_CRED_OUTBOUND, NULL,
- ntlm->p_identity, NULL, NULL,
- &ntlm->handle, &tsDummy);
- if(status != SEC_E_OK)
- return CURLE_OUT_OF_MEMORY;
-
- /* Setup the type-1 "output" security buffer */
- type_1_desc.ulVersion = SECBUFFER_VERSION;
- type_1_desc.cBuffers = 1;
- type_1_desc.pBuffers = &type_1_buf;
- type_1_buf.BufferType = SECBUFFER_TOKEN;
- type_1_buf.pvBuffer = ntlm->output_token;
- type_1_buf.cbBuffer = curlx_uztoul(ntlm->max_token_length);
-
- /* Generate our type-1 message */
- status = s_pSecFn->InitializeSecurityContext(&ntlm->handle, NULL,
- (TCHAR *) TEXT(""),
- ISC_REQ_CONFIDENTIALITY |
- ISC_REQ_REPLAY_DETECT |
- ISC_REQ_CONNECTION,
- 0, SECURITY_NETWORK_DREP,
- NULL, 0,
- &ntlm->c_handle, &type_1_desc,
- &attrs, &tsDummy);
-
- if(status == SEC_I_COMPLETE_AND_CONTINUE ||
- status == SEC_I_CONTINUE_NEEDED)
- s_pSecFn->CompleteAuthToken(&ntlm->c_handle, &type_1_desc);
- else if(status != SEC_E_OK) {
- s_pSecFn->FreeCredentialsHandle(&ntlm->handle);
- return CURLE_RECV_ERROR;
- }
-
- ntlm->has_handles = 1;
- size = type_1_buf.cbBuffer;
-
-#else
-
- unsigned char ntlmbuf[NTLM_BUFSIZE];
- const char *host = ""; /* empty */
- const char *domain = ""; /* empty */
- size_t hostlen = 0;
- size_t domlen = 0;
- size_t hostoff = 0;
- size_t domoff = hostoff + hostlen; /* This is 0: remember that host and
- domain are empty */
- (void)userp;
- (void)passwdp;
- (void)ntlm;
-
-#if USE_NTLM2SESSION
-#define NTLM2FLAG NTLMFLAG_NEGOTIATE_NTLM2_KEY
-#else
-#define NTLM2FLAG 0
-#endif
- snprintf((char *)ntlmbuf, NTLM_BUFSIZE,
- NTLMSSP_SIGNATURE "%c"
- "\x01%c%c%c" /* 32-bit type = 1 */
- "%c%c%c%c" /* 32-bit NTLM flag field */
- "%c%c" /* domain length */
- "%c%c" /* domain allocated space */
- "%c%c" /* domain name offset */
- "%c%c" /* 2 zeroes */
- "%c%c" /* host length */
- "%c%c" /* host allocated space */
- "%c%c" /* host name offset */
- "%c%c" /* 2 zeroes */
- "%s" /* host name */
- "%s", /* domain string */
- 0, /* trailing zero */
- 0, 0, 0, /* part of type-1 long */
-
- LONGQUARTET(NTLMFLAG_NEGOTIATE_OEM |
- NTLMFLAG_REQUEST_TARGET |
- NTLMFLAG_NEGOTIATE_NTLM_KEY |
- NTLM2FLAG |
- NTLMFLAG_NEGOTIATE_ALWAYS_SIGN),
- SHORTPAIR(domlen),
- SHORTPAIR(domlen),
- SHORTPAIR(domoff),
- 0, 0,
- SHORTPAIR(hostlen),
- SHORTPAIR(hostlen),
- SHORTPAIR(hostoff),
- 0, 0,
- host, /* this is empty */
- domain /* this is empty */);
-
- /* Initial packet length */
- size = 32 + hostlen + domlen;
-
-#endif
-
- DEBUG_OUT({
- fprintf(stderr, "* TYPE1 header flags=0x%02.2x%02.2x%02.2x%02.2x "
- "0x%08.8x ",
- LONGQUARTET(NTLMFLAG_NEGOTIATE_OEM |
- NTLMFLAG_REQUEST_TARGET |
- NTLMFLAG_NEGOTIATE_NTLM_KEY |
- NTLM2FLAG |
- NTLMFLAG_NEGOTIATE_ALWAYS_SIGN),
- NTLMFLAG_NEGOTIATE_OEM |
- NTLMFLAG_REQUEST_TARGET |
- NTLMFLAG_NEGOTIATE_NTLM_KEY |
- NTLM2FLAG |
- NTLMFLAG_NEGOTIATE_ALWAYS_SIGN);
- ntlm_print_flags(stderr,
- NTLMFLAG_NEGOTIATE_OEM |
- NTLMFLAG_REQUEST_TARGET |
- NTLMFLAG_NEGOTIATE_NTLM_KEY |
- NTLM2FLAG |
- NTLMFLAG_NEGOTIATE_ALWAYS_SIGN);
- fprintf(stderr, "\n****\n");
- });
-
- /* Return with binary blob encoded into base64 */
-#ifdef USE_WINDOWS_SSPI
- return Curl_base64_encode(NULL, (char *)ntlm->output_token, size,
- outptr, outlen);
-#else
- return Curl_base64_encode(NULL, (char *)ntlmbuf, size, outptr, outlen);
-#endif
-}
-
-/*
- * Curl_ntlm_create_type3_message()
- *
- * This is used to generate an already encoded NTLM type-3 message ready for
- * sending to the recipient, be it a HTTP or SASL based (such as SMTP, POP3
- * or IMAP) server, using the appropriate compile time crypo API.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * userp [in] - The user name in the format User or Domain\User.
- * passdwp [in] - The user's password.
- * ntlm [in/out] - The ntlm data struct being used and modified.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_ntlm_create_type3_message(struct SessionHandle *data,
- const char *userp,
- const char *passwdp,
- struct ntlmdata *ntlm,
- char **outptr,
- size_t *outlen)
-{
- /* NTLM type-3 message structure:
-
- Index Description Content
- 0 NTLMSSP Signature Null-terminated ASCII "NTLMSSP"
- (0x4e544c4d53535000)
- 8 NTLM Message Type long (0x03000000)
- 12 LM/LMv2 Response security buffer
- 20 NTLM/NTLMv2 Response security buffer
- 28 Target Name security buffer
- 36 User Name security buffer
- 44 Workstation Name security buffer
- (52) Session Key security buffer (*)
- (60) Flags long (*)
- (64) OS Version Structure 8 bytes (*)
- 52 (64) (72) Start of data block
- (*) -> Optional
- */
-
- size_t size;
-
-#ifdef USE_WINDOWS_SSPI
- CURLcode result = CURLE_OK;
- SecBuffer type_2_buf;
- SecBuffer type_3_buf;
- SecBufferDesc type_2_desc;
- SecBufferDesc type_3_desc;
- SECURITY_STATUS status;
- unsigned long attrs;
- TimeStamp tsDummy; /* For Windows 9x compatibility of SSPI calls */
-
- (void)passwdp;
- (void)userp;
- (void)data;
-
- /* Setup the type-2 "input" security buffer */
- type_2_desc.ulVersion = SECBUFFER_VERSION;
- type_2_desc.cBuffers = 1;
- type_2_desc.pBuffers = &type_2_buf;
- type_2_buf.BufferType = SECBUFFER_TOKEN;
- type_2_buf.pvBuffer = ntlm->type_2;
- type_2_buf.cbBuffer = ntlm->n_type_2;
-
- /* Setup the type-3 "output" security buffer */
- type_3_desc.ulVersion = SECBUFFER_VERSION;
- type_3_desc.cBuffers = 1;
- type_3_desc.pBuffers = &type_3_buf;
- type_3_buf.BufferType = SECBUFFER_TOKEN;
- type_3_buf.pvBuffer = ntlm->output_token;
- type_3_buf.cbBuffer = curlx_uztoul(ntlm->max_token_length);
-
- /* Generate our type-3 message */
- status = s_pSecFn->InitializeSecurityContext(&ntlm->handle,
- &ntlm->c_handle,
- (TCHAR *) TEXT(""),
- ISC_REQ_CONFIDENTIALITY |
- ISC_REQ_REPLAY_DETECT |
- ISC_REQ_CONNECTION,
- 0, SECURITY_NETWORK_DREP,
- &type_2_desc,
- 0, &ntlm->c_handle,
- &type_3_desc,
- &attrs, &tsDummy);
- if(status != SEC_E_OK)
- return CURLE_RECV_ERROR;
-
- size = type_3_buf.cbBuffer;
-
- /* Return with binary blob encoded into base64 */
- result = Curl_base64_encode(NULL, (char *)ntlm->output_token, size,
- outptr, outlen);
-
- Curl_ntlm_sspi_cleanup(ntlm);
-
- return result;
-
-#else
-
- unsigned char ntlmbuf[NTLM_BUFSIZE];
- int lmrespoff;
- unsigned char lmresp[24]; /* fixed-size */
-#if USE_NTRESPONSES
- int ntrespoff;
- unsigned int ntresplen = 24;
- unsigned char ntresp[24]; /* fixed-size */
- unsigned char *ptr_ntresp = &ntresp[0];
- unsigned char *ntlmv2resp = NULL;
-#endif
- bool unicode = (ntlm->flags & NTLMFLAG_NEGOTIATE_UNICODE) ? TRUE : FALSE;
- char host[HOSTNAME_MAX + 1] = "";
- const char *user;
- const char *domain = "";
- size_t hostoff = 0;
- size_t useroff = 0;
- size_t domoff = 0;
- size_t hostlen = 0;
- size_t userlen = 0;
- size_t domlen = 0;
- CURLcode res = CURLE_OK;
-
- user = strchr(userp, '\\');
- if(!user)
- user = strchr(userp, '/');
-
- if(user) {
- domain = userp;
- domlen = (user - domain);
- user++;
- }
- else
- user = userp;
-
- if(user)
- userlen = strlen(user);
-
- /* Get the machine's un-qualified host name as NTLM doesn't like the fully
- qualified domain name */
- if(Curl_gethostname(host, sizeof(host))) {
- infof(data, "gethostname() failed, continuing without!\n");
- hostlen = 0;
- }
- else {
- hostlen = strlen(host);
- }
-
-#if USE_NTRESPONSES
- if(ntlm->target_info_len) {
- unsigned char ntbuffer[0x18];
- unsigned int entropy[2];
- unsigned char ntlmv2hash[0x18];
-
- entropy[0] = Curl_rand(data);
- entropy[1] = Curl_rand(data);
-
- res = Curl_ntlm_core_mk_nt_hash(data, passwdp, ntbuffer);
- if(res)
- return res;
-
- res = Curl_ntlm_core_mk_ntlmv2_hash(user, userlen, domain, domlen,
- ntbuffer, ntlmv2hash);
- if(res)
- return res;
-
- /* LMv2 response */
- res = Curl_ntlm_core_mk_lmv2_resp(ntlmv2hash,
- (unsigned char *)&entropy[0],
- &ntlm->nonce[0], lmresp);
- if(res)
- return res;
-
- /* NTLMv2 response */
- res = Curl_ntlm_core_mk_ntlmv2_resp(ntlmv2hash,
- (unsigned char *)&entropy[0],
- ntlm, &ntlmv2resp, &ntresplen);
- if(res)
- return res;
-
- ptr_ntresp = ntlmv2resp;
- }
- else
-#endif
-
-#if USE_NTLM2SESSION
- /* We don't support NTLM2 if we don't have USE_NTRESPONSES */
- if(ntlm->flags & NTLMFLAG_NEGOTIATE_NTLM2_KEY) {
- unsigned char ntbuffer[0x18];
- unsigned char tmp[0x18];
- unsigned char md5sum[MD5_DIGEST_LENGTH];
- unsigned int entropy[2];
-
- /* Need to create 8 bytes random data */
- entropy[0] = Curl_rand(data);
- entropy[1] = Curl_rand(data);
-
- /* 8 bytes random data as challenge in lmresp */
- memcpy(lmresp, entropy, 8);
-
- /* Pad with zeros */
- memset(lmresp + 8, 0, 0x10);
-
- /* Fill tmp with challenge(nonce?) + entropy */
- memcpy(tmp, &ntlm->nonce[0], 8);
- memcpy(tmp + 8, entropy, 8);
-
- Curl_ssl_md5sum(tmp, 16, md5sum, MD5_DIGEST_LENGTH);
-
- /* We shall only use the first 8 bytes of md5sum, but the des
- code in Curl_ntlm_core_lm_resp only encrypt the first 8 bytes */
- if(CURLE_OUT_OF_MEMORY ==
- Curl_ntlm_core_mk_nt_hash(data, passwdp, ntbuffer))
- return CURLE_OUT_OF_MEMORY;
-
- Curl_ntlm_core_lm_resp(ntbuffer, md5sum, ntresp);
-
- /* End of NTLM2 Session code */
-
- }
- else
-#endif
- {
-
-#if USE_NTRESPONSES
- unsigned char ntbuffer[0x18];
-#endif
- unsigned char lmbuffer[0x18];
-
-#if USE_NTRESPONSES
- if(CURLE_OUT_OF_MEMORY ==
- Curl_ntlm_core_mk_nt_hash(data, passwdp, ntbuffer))
- return CURLE_OUT_OF_MEMORY;
- Curl_ntlm_core_lm_resp(ntbuffer, &ntlm->nonce[0], ntresp);
-#endif
-
- Curl_ntlm_core_mk_lm_hash(data, passwdp, lmbuffer);
- Curl_ntlm_core_lm_resp(lmbuffer, &ntlm->nonce[0], lmresp);
- /* A safer but less compatible alternative is:
- * Curl_ntlm_core_lm_resp(ntbuffer, &ntlm->nonce[0], lmresp);
- * See http://davenport.sourceforge.net/ntlm.html#ntlmVersion2 */
- }
-
- if(unicode) {
- domlen = domlen * 2;
- userlen = userlen * 2;
- hostlen = hostlen * 2;
- }
-
- lmrespoff = 64; /* size of the message header */
-#if USE_NTRESPONSES
- ntrespoff = lmrespoff + 0x18;
- domoff = ntrespoff + ntresplen;
-#else
- domoff = lmrespoff + 0x18;
-#endif
- useroff = domoff + domlen;
- hostoff = useroff + userlen;
-
- /* Create the big type-3 message binary blob */
- size = snprintf((char *)ntlmbuf, NTLM_BUFSIZE,
- NTLMSSP_SIGNATURE "%c"
- "\x03%c%c%c" /* 32-bit type = 3 */
-
- "%c%c" /* LanManager length */
- "%c%c" /* LanManager allocated space */
- "%c%c" /* LanManager offset */
- "%c%c" /* 2 zeroes */
-
- "%c%c" /* NT-response length */
- "%c%c" /* NT-response allocated space */
- "%c%c" /* NT-response offset */
- "%c%c" /* 2 zeroes */
-
- "%c%c" /* domain length */
- "%c%c" /* domain allocated space */
- "%c%c" /* domain name offset */
- "%c%c" /* 2 zeroes */
-
- "%c%c" /* user length */
- "%c%c" /* user allocated space */
- "%c%c" /* user offset */
- "%c%c" /* 2 zeroes */
-
- "%c%c" /* host length */
- "%c%c" /* host allocated space */
- "%c%c" /* host offset */
- "%c%c" /* 2 zeroes */
-
- "%c%c" /* session key length (unknown purpose) */
- "%c%c" /* session key allocated space (unknown purpose) */
- "%c%c" /* session key offset (unknown purpose) */
- "%c%c" /* 2 zeroes */
-
- "%c%c%c%c", /* flags */
-
- /* domain string */
- /* user string */
- /* host string */
- /* LanManager response */
- /* NT response */
-
- 0, /* zero termination */
- 0, 0, 0, /* type-3 long, the 24 upper bits */
-
- SHORTPAIR(0x18), /* LanManager response length, twice */
- SHORTPAIR(0x18),
- SHORTPAIR(lmrespoff),
- 0x0, 0x0,
-
-#if USE_NTRESPONSES
- SHORTPAIR(ntresplen), /* NT-response length, twice */
- SHORTPAIR(ntresplen),
- SHORTPAIR(ntrespoff),
- 0x0, 0x0,
-#else
- 0x0, 0x0,
- 0x0, 0x0,
- 0x0, 0x0,
- 0x0, 0x0,
-#endif
- SHORTPAIR(domlen),
- SHORTPAIR(domlen),
- SHORTPAIR(domoff),
- 0x0, 0x0,
-
- SHORTPAIR(userlen),
- SHORTPAIR(userlen),
- SHORTPAIR(useroff),
- 0x0, 0x0,
-
- SHORTPAIR(hostlen),
- SHORTPAIR(hostlen),
- SHORTPAIR(hostoff),
- 0x0, 0x0,
-
- 0x0, 0x0,
- 0x0, 0x0,
- 0x0, 0x0,
- 0x0, 0x0,
-
- LONGQUARTET(ntlm->flags));
-
- DEBUGASSERT(size == 64);
- DEBUGASSERT(size == (size_t)lmrespoff);
-
- /* We append the binary hashes */
- if(size < (NTLM_BUFSIZE - 0x18)) {
- memcpy(&ntlmbuf[size], lmresp, 0x18);
- size += 0x18;
- }
-
- DEBUG_OUT({
- fprintf(stderr, "**** TYPE3 header lmresp=");
- ntlm_print_hex(stderr, (char *)&ntlmbuf[lmrespoff], 0x18);
- });
-
-#if USE_NTRESPONSES
- if(size < (NTLM_BUFSIZE - ntresplen)) {
- DEBUGASSERT(size == (size_t)ntrespoff);
- memcpy(&ntlmbuf[size], ptr_ntresp, ntresplen);
- size += ntresplen;
- }
-
- DEBUG_OUT({
- fprintf(stderr, "\n ntresp=");
- ntlm_print_hex(stderr, (char *)&ntlmbuf[ntrespoff], ntresplen);
- });
-
- Curl_safefree(ntlmv2resp);/* Free the dynamic buffer allocated for NTLMv2 */
-
-#endif
-
- DEBUG_OUT({
- fprintf(stderr, "\n flags=0x%02.2x%02.2x%02.2x%02.2x 0x%08.8x ",
- LONGQUARTET(ntlm->flags), ntlm->flags);
- ntlm_print_flags(stderr, ntlm->flags);
- fprintf(stderr, "\n****\n");
- });
-
- /* Make sure that the domain, user and host strings fit in the
- buffer before we copy them there. */
- if(size + userlen + domlen + hostlen >= NTLM_BUFSIZE) {
- failf(data, "user + domain + host name too big");
- return CURLE_OUT_OF_MEMORY;
- }
-
- DEBUGASSERT(size == domoff);
- if(unicode)
- unicodecpy(&ntlmbuf[size], domain, domlen / 2);
- else
- memcpy(&ntlmbuf[size], domain, domlen);
-
- size += domlen;
-
- DEBUGASSERT(size == useroff);
- if(unicode)
- unicodecpy(&ntlmbuf[size], user, userlen / 2);
- else
- memcpy(&ntlmbuf[size], user, userlen);
-
- size += userlen;
-
- DEBUGASSERT(size == hostoff);
- if(unicode)
- unicodecpy(&ntlmbuf[size], host, hostlen / 2);
- else
- memcpy(&ntlmbuf[size], host, hostlen);
-
- size += hostlen;
-
- /* Convert domain, user, and host to ASCII but leave the rest as-is */
- res = Curl_convert_to_network(data, (char *)&ntlmbuf[domoff],
- size - domoff);
- if(res)
- return CURLE_CONV_FAILED;
-
- /* Return with binary blob encoded into base64 */
- return Curl_base64_encode(NULL, (char *)ntlmbuf, size, outptr, outlen);
-#endif
-}
-
-#endif /* USE_NTLM */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_msgs.h b/external/libcurl_android/jni/libcurl/lib/curl_ntlm_msgs.h
deleted file mode 100755
index 80413c88..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_msgs.h
+++ /dev/null
@@ -1,177 +0,0 @@
-#ifndef HEADER_CURL_NTLM_MSGS_H
-#define HEADER_CURL_NTLM_MSGS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_NTLM
-
-/* This is to generate a base64 encoded NTLM type-1 message */
-CURLcode Curl_ntlm_create_type1_message(const char *userp,
- const char *passwdp,
- struct ntlmdata *ntlm,
- char **outptr,
- size_t *outlen);
-
-/* This is to generate a base64 encoded NTLM type-3 message */
-CURLcode Curl_ntlm_create_type3_message(struct SessionHandle *data,
- const char *userp,
- const char *passwdp,
- struct ntlmdata *ntlm,
- char **outptr,
- size_t *outlen);
-
-/* This is to decode a NTLM type-2 message */
-CURLcode Curl_ntlm_decode_type2_message(struct SessionHandle *data,
- const char* header,
- struct ntlmdata* ntlm);
-
-/* This is to decode target info received in NTLM type-2 message */
-CURLcode Curl_ntlm_decode_type2_target(struct SessionHandle *data,
- unsigned char* buffer,
- size_t size,
- struct ntlmdata* ntlm);
-
-
-/* This is to clean up the ntlm data structure */
-#ifdef USE_WINDOWS_SSPI
-void Curl_ntlm_sspi_cleanup(struct ntlmdata *ntlm);
-#else
-#define Curl_ntlm_sspi_cleanup(x)
-#endif
-
-/* NTLM buffer fixed size, large enough for long user + host + domain */
-#define NTLM_BUFSIZE 1024
-
-/* Stuff only required for curl_ntlm_msgs.c */
-#ifdef BUILDING_CURL_NTLM_MSGS_C
-
-/* Flag bits definitions based on http://davenport.sourceforge.net/ntlm.html */
-
-#define NTLMFLAG_NEGOTIATE_UNICODE (1<<0)
-/* Indicates that Unicode strings are supported for use in security buffer
- data. */
-
-#define NTLMFLAG_NEGOTIATE_OEM (1<<1)
-/* Indicates that OEM strings are supported for use in security buffer data. */
-
-#define NTLMFLAG_REQUEST_TARGET (1<<2)
-/* Requests that the server's authentication realm be included in the Type 2
- message. */
-
-/* unknown (1<<3) */
-#define NTLMFLAG_NEGOTIATE_SIGN (1<<4)
-/* Specifies that authenticated communication between the client and server
- should carry a digital signature (message integrity). */
-
-#define NTLMFLAG_NEGOTIATE_SEAL (1<<5)
-/* Specifies that authenticated communication between the client and server
- should be encrypted (message confidentiality). */
-
-#define NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE (1<<6)
-/* Indicates that datagram authentication is being used. */
-
-#define NTLMFLAG_NEGOTIATE_LM_KEY (1<<7)
-/* Indicates that the LAN Manager session key should be used for signing and
- sealing authenticated communications. */
-
-#define NTLMFLAG_NEGOTIATE_NETWARE (1<<8)
-/* unknown purpose */
-
-#define NTLMFLAG_NEGOTIATE_NTLM_KEY (1<<9)
-/* Indicates that NTLM authentication is being used. */
-
-/* unknown (1<<10) */
-
-#define NTLMFLAG_NEGOTIATE_ANONYMOUS (1<<11)
-/* Sent by the client in the Type 3 message to indicate that an anonymous
- context has been established. This also affects the response fields. */
-
-#define NTLMFLAG_NEGOTIATE_DOMAIN_SUPPLIED (1<<12)
-/* Sent by the client in the Type 1 message to indicate that a desired
- authentication realm is included in the message. */
-
-#define NTLMFLAG_NEGOTIATE_WORKSTATION_SUPPLIED (1<<13)
-/* Sent by the client in the Type 1 message to indicate that the client
- workstation's name is included in the message. */
-
-#define NTLMFLAG_NEGOTIATE_LOCAL_CALL (1<<14)
-/* Sent by the server to indicate that the server and client are on the same
- machine. Implies that the client may use a pre-established local security
- context rather than responding to the challenge. */
-
-#define NTLMFLAG_NEGOTIATE_ALWAYS_SIGN (1<<15)
-/* Indicates that authenticated communication between the client and server
- should be signed with a "dummy" signature. */
-
-#define NTLMFLAG_TARGET_TYPE_DOMAIN (1<<16)
-/* Sent by the server in the Type 2 message to indicate that the target
- authentication realm is a domain. */
-
-#define NTLMFLAG_TARGET_TYPE_SERVER (1<<17)
-/* Sent by the server in the Type 2 message to indicate that the target
- authentication realm is a server. */
-
-#define NTLMFLAG_TARGET_TYPE_SHARE (1<<18)
-/* Sent by the server in the Type 2 message to indicate that the target
- authentication realm is a share. Presumably, this is for share-level
- authentication. Usage is unclear. */
-
-#define NTLMFLAG_NEGOTIATE_NTLM2_KEY (1<<19)
-/* Indicates that the NTLM2 signing and sealing scheme should be used for
- protecting authenticated communications. */
-
-#define NTLMFLAG_REQUEST_INIT_RESPONSE (1<<20)
-/* unknown purpose */
-
-#define NTLMFLAG_REQUEST_ACCEPT_RESPONSE (1<<21)
-/* unknown purpose */
-
-#define NTLMFLAG_REQUEST_NONNT_SESSION_KEY (1<<22)
-/* unknown purpose */
-
-#define NTLMFLAG_NEGOTIATE_TARGET_INFO (1<<23)
-/* Sent by the server in the Type 2 message to indicate that it is including a
- Target Information block in the message. */
-
-/* unknown (1<24) */
-/* unknown (1<25) */
-/* unknown (1<26) */
-/* unknown (1<27) */
-/* unknown (1<28) */
-
-#define NTLMFLAG_NEGOTIATE_128 (1<<29)
-/* Indicates that 128-bit encryption is supported. */
-
-#define NTLMFLAG_NEGOTIATE_KEY_EXCHANGE (1<<30)
-/* Indicates that the client will provide an encrypted master key in
- the "Session Key" field of the Type 3 message. */
-
-#define NTLMFLAG_NEGOTIATE_56 (1<<31)
-/* Indicates that 56-bit encryption is supported. */
-
-#endif /* BUILDING_CURL_NTLM_MSGS_C */
-
-#endif /* USE_NTLM */
-
-#endif /* HEADER_CURL_NTLM_MSGS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_wb.c b/external/libcurl_android/jni/libcurl/lib/curl_ntlm_wb.c
deleted file mode 100755
index 23ee7264..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_wb.c
+++ /dev/null
@@ -1,435 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_NTLM) && defined(NTLM_WB_ENABLED)
-
-/*
- * NTLM details:
- *
- * http://davenport.sourceforge.net/ntlm.html
- * http://www.innovation.ch/java/ntlm.html
- */
-
-#define DEBUG_ME 0
-
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "select.h"
-#include "curl_ntlm_msgs.h"
-#include "curl_ntlm_wb.h"
-#include "url.h"
-#include "strerror.h"
-#include "curl_memory.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#if DEBUG_ME
-# define DEBUG_OUT(x) x
-#else
-# define DEBUG_OUT(x) Curl_nop_stmt
-#endif
-
-/* Portable 'sclose_nolog' used only in child process instead of 'sclose'
- to avoid fooling the socket leak detector */
-#if defined(HAVE_CLOSESOCKET)
-# define sclose_nolog(x) closesocket((x))
-#elif defined(HAVE_CLOSESOCKET_CAMEL)
-# define sclose_nolog(x) CloseSocket((x))
-#else
-# define sclose_nolog(x) close((x))
-#endif
-
-void Curl_ntlm_wb_cleanup(struct connectdata *conn)
-{
- if(conn->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD) {
- sclose(conn->ntlm_auth_hlpr_socket);
- conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;
- }
-
- if(conn->ntlm_auth_hlpr_pid) {
- int i;
- for(i = 0; i < 4; i++) {
- pid_t ret = waitpid(conn->ntlm_auth_hlpr_pid, NULL, WNOHANG);
- if(ret == conn->ntlm_auth_hlpr_pid || errno == ECHILD)
- break;
- switch(i) {
- case 0:
- kill(conn->ntlm_auth_hlpr_pid, SIGTERM);
- break;
- case 1:
- /* Give the process another moment to shut down cleanly before
- bringing down the axe */
- Curl_wait_ms(1);
- break;
- case 2:
- kill(conn->ntlm_auth_hlpr_pid, SIGKILL);
- break;
- case 3:
- break;
- }
- }
- conn->ntlm_auth_hlpr_pid = 0;
- }
-
- Curl_safefree(conn->challenge_header);
- conn->challenge_header = NULL;
- Curl_safefree(conn->response_header);
- conn->response_header = NULL;
-}
-
-static CURLcode ntlm_wb_init(struct connectdata *conn, const char *userp)
-{
- curl_socket_t sockfds[2];
- pid_t child_pid;
- const char *username;
- char *slash, *domain = NULL;
- const char *ntlm_auth = NULL;
- char *ntlm_auth_alloc = NULL;
-#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID)
- struct passwd pw, *pw_res;
- char pwbuf[1024];
-#endif
- int error;
-
- /* Return if communication with ntlm_auth already set up */
- if(conn->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD ||
- conn->ntlm_auth_hlpr_pid)
- return CURLE_OK;
-
- username = userp;
- /* The real ntlm_auth really doesn't like being invoked with an
- empty username. It won't make inferences for itself, and expects
- the client to do so (mostly because it's really designed for
- servers like squid to use for auth, and client support is an
- afterthought for it). So try hard to provide a suitable username
- if we don't already have one. But if we can't, provide the
- empty one anyway. Perhaps they have an implementation of the
- ntlm_auth helper which *doesn't* need it so we might as well try */
- if(!username || !username[0]) {
- username = getenv("NTLMUSER");
- if(!username || !username[0])
- username = getenv("LOGNAME");
- if(!username || !username[0])
- username = getenv("USER");
-#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID)
- if((!username || !username[0]) &&
- !getpwuid_r(geteuid(), &pw, pwbuf, sizeof(pwbuf), &pw_res) &&
- pw_res) {
- username = pw.pw_name;
- }
-#endif
- if(!username || !username[0])
- username = userp;
- }
- slash = strpbrk(username, "\\/");
- if(slash) {
- if((domain = strdup(username)) == NULL)
- return CURLE_OUT_OF_MEMORY;
- slash = domain + (slash - username);
- *slash = '\0';
- username = username + (slash - domain) + 1;
- }
-
- /* For testing purposes, when DEBUGBUILD is defined and environment
- variable CURL_NTLM_WB_FILE is set a fake_ntlm is used to perform
- NTLM challenge/response which only accepts commands and output
- strings pre-written in test case definitions */
-#ifdef DEBUGBUILD
- ntlm_auth_alloc = curl_getenv("CURL_NTLM_WB_FILE");
- if(ntlm_auth_alloc)
- ntlm_auth = ntlm_auth_alloc;
- else
-#endif
- ntlm_auth = NTLM_WB_FILE;
-
- if(access(ntlm_auth, X_OK) != 0) {
- error = ERRNO;
- failf(conn->data, "Could not access ntlm_auth: %s errno %d: %s",
- ntlm_auth, error, Curl_strerror(conn, error));
- goto done;
- }
-
- if(socketpair(AF_UNIX, SOCK_STREAM, 0, sockfds)) {
- error = ERRNO;
- failf(conn->data, "Could not open socket pair. errno %d: %s",
- error, Curl_strerror(conn, error));
- goto done;
- }
-
- child_pid = fork();
- if(child_pid == -1) {
- error = ERRNO;
- sclose(sockfds[0]);
- sclose(sockfds[1]);
- failf(conn->data, "Could not fork. errno %d: %s",
- error, Curl_strerror(conn, error));
- goto done;
- }
- else if(!child_pid) {
- /*
- * child process
- */
-
- /* Don't use sclose in the child since it fools the socket leak detector */
- sclose_nolog(sockfds[0]);
- if(dup2(sockfds[1], STDIN_FILENO) == -1) {
- error = ERRNO;
- failf(conn->data, "Could not redirect child stdin. errno %d: %s",
- error, Curl_strerror(conn, error));
- exit(1);
- }
-
- if(dup2(sockfds[1], STDOUT_FILENO) == -1) {
- error = ERRNO;
- failf(conn->data, "Could not redirect child stdout. errno %d: %s",
- error, Curl_strerror(conn, error));
- exit(1);
- }
-
- if(domain)
- execl(ntlm_auth, ntlm_auth,
- "--helper-protocol", "ntlmssp-client-1",
- "--use-cached-creds",
- "--username", username,
- "--domain", domain,
- NULL);
- else
- execl(ntlm_auth, ntlm_auth,
- "--helper-protocol", "ntlmssp-client-1",
- "--use-cached-creds",
- "--username", username,
- NULL);
-
- error = ERRNO;
- sclose_nolog(sockfds[1]);
- failf(conn->data, "Could not execl(). errno %d: %s",
- error, Curl_strerror(conn, error));
- exit(1);
- }
-
- sclose(sockfds[1]);
- conn->ntlm_auth_hlpr_socket = sockfds[0];
- conn->ntlm_auth_hlpr_pid = child_pid;
- Curl_safefree(domain);
- Curl_safefree(ntlm_auth_alloc);
- return CURLE_OK;
-
-done:
- Curl_safefree(domain);
- Curl_safefree(ntlm_auth_alloc);
- return CURLE_REMOTE_ACCESS_DENIED;
-}
-
-static CURLcode ntlm_wb_response(struct connectdata *conn,
- const char *input, curlntlm state)
-{
- char *buf = malloc(NTLM_BUFSIZE);
- size_t len_in = strlen(input), len_out = 0;
-
- if(!buf)
- return CURLE_OUT_OF_MEMORY;
-
- while(len_in > 0) {
- ssize_t written = swrite(conn->ntlm_auth_hlpr_socket, input, len_in);
- if(written == -1) {
- /* Interrupted by a signal, retry it */
- if(errno == EINTR)
- continue;
- /* write failed if other errors happen */
- goto done;
- }
- input += written;
- len_in -= written;
- }
- /* Read one line */
- while(1) {
- ssize_t size;
- char *newbuf;
-
- size = sread(conn->ntlm_auth_hlpr_socket, buf + len_out, NTLM_BUFSIZE);
- if(size == -1) {
- if(errno == EINTR)
- continue;
- goto done;
- }
- else if(size == 0)
- goto done;
-
- len_out += size;
- if(buf[len_out - 1] == '\n') {
- buf[len_out - 1] = '\0';
- goto wrfinish;
- }
- newbuf = realloc(buf, len_out + NTLM_BUFSIZE);
- if(!newbuf) {
- free(buf);
- return CURLE_OUT_OF_MEMORY;
- }
- buf = newbuf;
- }
- goto done;
-wrfinish:
- /* Samba/winbind installed but not configured */
- if(state == NTLMSTATE_TYPE1 &&
- len_out == 3 &&
- buf[0] == 'P' && buf[1] == 'W')
- return CURLE_REMOTE_ACCESS_DENIED;
- /* invalid response */
- if(len_out < 4)
- goto done;
- if(state == NTLMSTATE_TYPE1 &&
- (buf[0]!='Y' || buf[1]!='R' || buf[2]!=' '))
- goto done;
- if(state == NTLMSTATE_TYPE2 &&
- (buf[0]!='K' || buf[1]!='K' || buf[2]!=' ') &&
- (buf[0]!='A' || buf[1]!='F' || buf[2]!=' '))
- goto done;
-
- conn->response_header = aprintf("NTLM %.*s", len_out - 4, buf + 3);
- free(buf);
- return CURLE_OK;
-done:
- free(buf);
- return CURLE_REMOTE_ACCESS_DENIED;
-}
-
-/*
- * This is for creating ntlm header output by delegating challenge/response
- * to Samba's winbind daemon helper ntlm_auth.
- */
-CURLcode Curl_output_ntlm_wb(struct connectdata *conn,
- bool proxy)
-{
- /* point to the address of the pointer that holds the string to send to the
- server, which is for a plain host or for a HTTP proxy */
- char **allocuserpwd;
- /* point to the name and password for this */
- const char *userp;
- /* point to the correct struct with this */
- struct ntlmdata *ntlm;
- struct auth *authp;
-
- CURLcode res = CURLE_OK;
- char *input;
-
- DEBUGASSERT(conn);
- DEBUGASSERT(conn->data);
-
- if(proxy) {
- allocuserpwd = &conn->allocptr.proxyuserpwd;
- userp = conn->proxyuser;
- ntlm = &conn->proxyntlm;
- authp = &conn->data->state.authproxy;
- }
- else {
- allocuserpwd = &conn->allocptr.userpwd;
- userp = conn->user;
- ntlm = &conn->ntlm;
- authp = &conn->data->state.authhost;
- }
- authp->done = FALSE;
-
- /* not set means empty */
- if(!userp)
- userp="";
-
- switch(ntlm->state) {
- case NTLMSTATE_TYPE1:
- default:
- /* Use Samba's 'winbind' daemon to support NTLM authentication,
- * by delegating the NTLM challenge/response protocal to a helper
- * in ntlm_auth.
- * http://devel.squid-cache.org/ntlm/squid_helper_protocol.html
- * http://www.samba.org/samba/docs/man/manpages-3/winbindd.8.html
- * http://www.samba.org/samba/docs/man/manpages-3/ntlm_auth.1.html
- * Preprocessor symbol 'NTLM_WB_ENABLED' is defined when this
- * feature is enabled and 'NTLM_WB_FILE' symbol holds absolute
- * filename of ntlm_auth helper.
- * If NTLM authentication using winbind fails, go back to original
- * request handling process.
- */
- /* Create communication with ntlm_auth */
- res = ntlm_wb_init(conn, userp);
- if(res)
- return res;
- res = ntlm_wb_response(conn, "YR\n", ntlm->state);
- if(res)
- return res;
-
- Curl_safefree(*allocuserpwd);
- *allocuserpwd = aprintf("%sAuthorization: %s\r\n",
- proxy ? "Proxy-" : "",
- conn->response_header);
- DEBUG_OUT(fprintf(stderr, "**** Header %s\n ", *allocuserpwd));
- Curl_safefree(conn->response_header);
- conn->response_header = NULL;
- break;
- case NTLMSTATE_TYPE2:
- input = aprintf("TT %s\n", conn->challenge_header);
- if(!input)
- return CURLE_OUT_OF_MEMORY;
- res = ntlm_wb_response(conn, input, ntlm->state);
- free(input);
- input = NULL;
- if(res)
- return res;
-
- Curl_safefree(*allocuserpwd);
- *allocuserpwd = aprintf("%sAuthorization: %s\r\n",
- proxy ? "Proxy-" : "",
- conn->response_header);
- DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd));
- ntlm->state = NTLMSTATE_TYPE3; /* we sent a type-3 */
- authp->done = TRUE;
- Curl_ntlm_wb_cleanup(conn);
- break;
- case NTLMSTATE_TYPE3:
- /* connection is already authenticated,
- * don't send a header in future requests */
- if(*allocuserpwd) {
- free(*allocuserpwd);
- *allocuserpwd=NULL;
- }
- authp->done = TRUE;
- break;
- }
-
- return CURLE_OK;
-}
-
-#endif /* USE_NTLM && NTLM_WB_ENABLED */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_wb.h b/external/libcurl_android/jni/libcurl/lib/curl_ntlm_wb.h
deleted file mode 100755
index db6bc16b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_ntlm_wb.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef HEADER_CURL_NTLM_WB_H
-#define HEADER_CURL_NTLM_WB_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_NTLM) && defined(NTLM_WB_ENABLED)
-
-/* this is for creating ntlm header output by delegating challenge/response
- to Samba's winbind daemon helper ntlm_auth */
-CURLcode Curl_output_ntlm_wb(struct connectdata *conn, bool proxy);
-
-void Curl_ntlm_wb_cleanup(struct connectdata *conn);
-
-#endif /* USE_NTLM && NTLM_WB_ENABLED */
-
-#endif /* HEADER_CURL_NTLM_WB_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_rtmp.c b/external/libcurl_android/jni/libcurl/lib/curl_rtmp.c
deleted file mode 100755
index e0c24b03..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_rtmp.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- * Copyright (C) 2010, Howard Chu, <hyc@highlandsun.com>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_LIBRTMP
-
-#include "urldata.h"
-#include "nonblock.h" /* for curlx_nonblock */
-#include "progress.h" /* for Curl_pgrsSetUploadSize */
-#include "transfer.h"
-#include "warnless.h"
-#include <curl/curl.h>
-#include <librtmp/rtmp.h>
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifdef _WIN32
-#define setsockopt(a,b,c,d,e) (setsockopt)(a,b,c,(const char *)d,(int)e)
-#define SET_RCVTIMEO(tv,s) int tv = s*1000
-#else
-#define SET_RCVTIMEO(tv,s) struct timeval tv = {s,0}
-#endif
-
-#define DEF_BUFTIME (2*60*60*1000) /* 2 hours */
-
-static CURLcode rtmp_setup(struct connectdata *conn);
-static CURLcode rtmp_do(struct connectdata *conn, bool *done);
-static CURLcode rtmp_done(struct connectdata *conn, CURLcode, bool premature);
-static CURLcode rtmp_connect(struct connectdata *conn, bool *done);
-static CURLcode rtmp_disconnect(struct connectdata *conn, bool dead);
-
-static Curl_recv rtmp_recv;
-static Curl_send rtmp_send;
-
-/*
- * RTMP protocol handler.h, based on http://rtmpdump.mplayerhq.hu
- */
-
-const struct Curl_handler Curl_handler_rtmp = {
- "RTMP", /* scheme */
- rtmp_setup, /* setup_connection */
- rtmp_do, /* do_it */
- rtmp_done, /* done */
- ZERO_NULL, /* do_more */
- rtmp_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- rtmp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_RTMP, /* defport */
- CURLPROTO_RTMP, /* protocol */
- PROTOPT_NONE /* flags*/
-};
-
-const struct Curl_handler Curl_handler_rtmpt = {
- "RTMPT", /* scheme */
- rtmp_setup, /* setup_connection */
- rtmp_do, /* do_it */
- rtmp_done, /* done */
- ZERO_NULL, /* do_more */
- rtmp_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- rtmp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_RTMPT, /* defport */
- CURLPROTO_RTMPT, /* protocol */
- PROTOPT_NONE /* flags*/
-};
-
-const struct Curl_handler Curl_handler_rtmpe = {
- "RTMPE", /* scheme */
- rtmp_setup, /* setup_connection */
- rtmp_do, /* do_it */
- rtmp_done, /* done */
- ZERO_NULL, /* do_more */
- rtmp_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- rtmp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_RTMP, /* defport */
- CURLPROTO_RTMPE, /* protocol */
- PROTOPT_NONE /* flags*/
-};
-
-const struct Curl_handler Curl_handler_rtmpte = {
- "RTMPTE", /* scheme */
- rtmp_setup, /* setup_connection */
- rtmp_do, /* do_it */
- rtmp_done, /* done */
- ZERO_NULL, /* do_more */
- rtmp_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- rtmp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_RTMPT, /* defport */
- CURLPROTO_RTMPTE, /* protocol */
- PROTOPT_NONE /* flags*/
-};
-
-const struct Curl_handler Curl_handler_rtmps = {
- "RTMPS", /* scheme */
- rtmp_setup, /* setup_connection */
- rtmp_do, /* do_it */
- rtmp_done, /* done */
- ZERO_NULL, /* do_more */
- rtmp_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- rtmp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_RTMPS, /* defport */
- CURLPROTO_RTMPS, /* protocol */
- PROTOPT_NONE /* flags*/
-};
-
-const struct Curl_handler Curl_handler_rtmpts = {
- "RTMPTS", /* scheme */
- rtmp_setup, /* setup_connection */
- rtmp_do, /* do_it */
- rtmp_done, /* done */
- ZERO_NULL, /* do_more */
- rtmp_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- rtmp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_RTMPS, /* defport */
- CURLPROTO_RTMPTS, /* protocol */
- PROTOPT_NONE /* flags*/
-};
-
-static CURLcode rtmp_setup(struct connectdata *conn)
-{
- RTMP *r = RTMP_Alloc();
-
- if(!r)
- return CURLE_OUT_OF_MEMORY;
-
- RTMP_Init(r);
- RTMP_SetBufferMS(r, DEF_BUFTIME);
- if(!RTMP_SetupURL(r, conn->data->change.url)) {
- RTMP_Free(r);
- return CURLE_URL_MALFORMAT;
- }
- conn->proto.generic = r;
- return CURLE_OK;
-}
-
-static CURLcode rtmp_connect(struct connectdata *conn, bool *done)
-{
- RTMP *r = conn->proto.generic;
- SET_RCVTIMEO(tv,10);
-
- r->m_sb.sb_socket = conn->sock[FIRSTSOCKET];
-
- /* We have to know if it's a write before we send the
- * connect request packet
- */
- if(conn->data->set.upload)
- r->Link.protocol |= RTMP_FEATURE_WRITE;
-
- /* For plain streams, use the buffer toggle trick to keep data flowing */
- if(!(r->Link.lFlags & RTMP_LF_LIVE) &&
- !(r->Link.protocol & RTMP_FEATURE_HTTP))
- r->Link.lFlags |= RTMP_LF_BUFX;
-
- curlx_nonblock(r->m_sb.sb_socket, FALSE);
- setsockopt(r->m_sb.sb_socket, SOL_SOCKET, SO_RCVTIMEO,
- (char *)&tv, sizeof(tv));
-
- if(!RTMP_Connect1(r, NULL))
- return CURLE_FAILED_INIT;
-
- /* Clients must send a periodic BytesReceived report to the server */
- r->m_bSendCounter = true;
-
- *done = TRUE;
- conn->recv[FIRSTSOCKET] = rtmp_recv;
- conn->send[FIRSTSOCKET] = rtmp_send;
- return CURLE_OK;
-}
-
-static CURLcode rtmp_do(struct connectdata *conn, bool *done)
-{
- RTMP *r = conn->proto.generic;
-
- if(!RTMP_ConnectStream(r, 0))
- return CURLE_FAILED_INIT;
-
- if(conn->data->set.upload) {
- Curl_pgrsSetUploadSize(conn->data, conn->data->state.infilesize);
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
- }
- else
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
- *done = TRUE;
- return CURLE_OK;
-}
-
-static CURLcode rtmp_done(struct connectdata *conn, CURLcode status,
- bool premature)
-{
- (void)conn; /* unused */
- (void)status; /* unused */
- (void)premature; /* unused */
-
- return CURLE_OK;
-}
-
-static CURLcode rtmp_disconnect(struct connectdata *conn,
- bool dead_connection)
-{
- RTMP *r = conn->proto.generic;
- (void)dead_connection;
- if(r) {
- conn->proto.generic = NULL;
- RTMP_Close(r);
- RTMP_Free(r);
- }
- return CURLE_OK;
-}
-
-static ssize_t rtmp_recv(struct connectdata *conn, int sockindex, char *buf,
- size_t len, CURLcode *err)
-{
- RTMP *r = conn->proto.generic;
- ssize_t nread;
-
- (void)sockindex; /* unused */
-
- nread = RTMP_Read(r, buf, curlx_uztosi(len));
- if(nread < 0) {
- if(r->m_read.status == RTMP_READ_COMPLETE ||
- r->m_read.status == RTMP_READ_EOF) {
- conn->data->req.size = conn->data->req.bytecount;
- nread = 0;
- }
- else
- *err = CURLE_RECV_ERROR;
- }
- return nread;
-}
-
-static ssize_t rtmp_send(struct connectdata *conn, int sockindex,
- const void *buf, size_t len, CURLcode *err)
-{
- RTMP *r = conn->proto.generic;
- ssize_t num;
-
- (void)sockindex; /* unused */
-
- num = RTMP_Write(r, (char *)buf, curlx_uztosi(len));
- if(num < 0)
- *err = CURLE_SEND_ERROR;
-
- return num;
-}
-#endif /* USE_LIBRTMP */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_rtmp.h b/external/libcurl_android/jni/libcurl/lib/curl_rtmp.h
deleted file mode 100755
index 4a9e9e60..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_rtmp.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_RTMP_H
-#define HEADER_CURL_RTMP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010, Howard Chu, <hyc@highlandsun.com>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#ifdef USE_LIBRTMP
-extern const struct Curl_handler Curl_handler_rtmp;
-extern const struct Curl_handler Curl_handler_rtmpt;
-extern const struct Curl_handler Curl_handler_rtmpe;
-extern const struct Curl_handler Curl_handler_rtmpte;
-extern const struct Curl_handler Curl_handler_rtmps;
-extern const struct Curl_handler Curl_handler_rtmpts;
-#endif
-
-#endif /* HEADER_CURL_RTMP_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_sasl.c b/external/libcurl_android/jni/libcurl/lib/curl_sasl.c
deleted file mode 100755
index 7e2b8afa..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_sasl.c
+++ /dev/null
@@ -1,741 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * RFC2195 CRAM-MD5 authentication
- * RFC2831 DIGEST-MD5 authentication
- * RFC4422 Simple Authentication and Security Layer (SASL)
- * RFC4616 PLAIN authentication
- * RFC6749 OAuth 2.0 Authorization Framework
- * Draft LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-#include "urldata.h"
-
-#include "curl_base64.h"
-#include "curl_md5.h"
-#include "vtls/vtls.h"
-#include "curl_hmac.h"
-#include "curl_ntlm_msgs.h"
-#include "curl_sasl.h"
-#include "warnless.h"
-#include "curl_memory.h"
-#include "strtok.h"
-#include "rawstr.h"
-
-#ifdef USE_NSS
-#include "vtls/nssg.h" /* for Curl_nss_force_init() */
-#endif
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#if defined(USE_WINDOWS_SSPI)
-extern void Curl_sasl_gssapi_cleanup(struct kerberos5data *krb5);
-#endif
-
-#if !defined(CURL_DISABLE_CRYPTO_AUTH) && !defined(USE_WINDOWS_SSPI)
-#define DIGEST_QOP_VALUE_AUTH (1 << 0)
-#define DIGEST_QOP_VALUE_AUTH_INT (1 << 1)
-#define DIGEST_QOP_VALUE_AUTH_CONF (1 << 2)
-
-#define DIGEST_QOP_VALUE_STRING_AUTH "auth"
-#define DIGEST_QOP_VALUE_STRING_AUTH_INT "auth-int"
-#define DIGEST_QOP_VALUE_STRING_AUTH_CONF "auth-conf"
-
-/* Retrieves the value for a corresponding key from the challenge string
- * returns TRUE if the key could be found, FALSE if it does not exists
- */
-static bool sasl_digest_get_key_value(const char *chlg,
- const char *key,
- char *value,
- size_t max_val_len,
- char end_char)
-{
- char *find_pos;
- size_t i;
-
- find_pos = strstr(chlg, key);
- if(!find_pos)
- return FALSE;
-
- find_pos += strlen(key);
-
- for(i = 0; *find_pos && *find_pos != end_char && i < max_val_len - 1; ++i)
- value[i] = *find_pos++;
- value[i] = '\0';
-
- return TRUE;
-}
-
-static CURLcode sasl_digest_get_qop_values(const char *options, int *value)
-{
- char *tmp;
- char *token;
- char *tok_buf;
-
- /* Initialise the output */
- *value = 0;
-
- /* Tokenise the list of qop values. Use a temporary clone of the buffer since
- strtok_r() ruins it. */
- tmp = strdup(options);
- if(!tmp)
- return CURLE_OUT_OF_MEMORY;
-
- token = strtok_r(tmp, ",", &tok_buf);
- while(token != NULL) {
- if(Curl_raw_equal(token, DIGEST_QOP_VALUE_STRING_AUTH))
- *value |= DIGEST_QOP_VALUE_AUTH;
- else if(Curl_raw_equal(token, DIGEST_QOP_VALUE_STRING_AUTH_INT))
- *value |= DIGEST_QOP_VALUE_AUTH_INT;
- else if(Curl_raw_equal(token, DIGEST_QOP_VALUE_STRING_AUTH_CONF))
- *value |= DIGEST_QOP_VALUE_AUTH_CONF;
-
- token = strtok_r(NULL, ",", &tok_buf);
- }
-
- Curl_safefree(tmp);
-
- return CURLE_OK;
-}
-#endif
-
-#if !defined(USE_WINDOWS_SSPI)
-/*
- * Curl_sasl_build_spn()
- *
- * This is used to build a SPN string in the format service/host.
- *
- * Parameters:
- *
- * serivce [in] - The service type such as www, smtp, pop or imap.
- * instance [in] - The instance name such as the host nme or realm.
- *
- * Returns a pointer to the newly allocated SPN.
- */
-char *Curl_sasl_build_spn(const char *service, const char *host)
-{
- /* Generate and return our SPN */
- return aprintf("%s/%s", service, host);
-}
-#endif
-
-/*
- * Curl_sasl_create_plain_message()
- *
- * This is used to generate an already encoded PLAIN message ready
- * for sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * userp [in] - The user name.
- * passdwp [in] - The user's password.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
- const char *userp,
- const char *passwdp,
- char **outptr, size_t *outlen)
-{
- CURLcode result;
- char *plainauth;
- size_t ulen;
- size_t plen;
-
- ulen = strlen(userp);
- plen = strlen(passwdp);
-
- plainauth = malloc(2 * ulen + plen + 2);
- if(!plainauth) {
- *outlen = 0;
- *outptr = NULL;
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Calculate the reply */
- memcpy(plainauth, userp, ulen);
- plainauth[ulen] = '\0';
- memcpy(plainauth + ulen + 1, userp, ulen);
- plainauth[2 * ulen + 1] = '\0';
- memcpy(plainauth + 2 * ulen + 2, passwdp, plen);
-
- /* Base64 encode the reply */
- result = Curl_base64_encode(data, plainauth, 2 * ulen + plen + 2, outptr,
- outlen);
- Curl_safefree(plainauth);
- return result;
-}
-
-/*
- * Curl_sasl_create_login_message()
- *
- * This is used to generate an already encoded LOGIN message containing the
- * user name or password ready for sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * valuep [in] - The user name or user's password.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
- const char *valuep, char **outptr,
- size_t *outlen)
-{
- size_t vlen = strlen(valuep);
-
- if(!vlen) {
- /* Calculate an empty reply */
- *outptr = strdup("=");
- if(*outptr) {
- *outlen = (size_t) 1;
- return CURLE_OK;
- }
-
- *outlen = 0;
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Base64 encode the value */
- return Curl_base64_encode(data, valuep, vlen, outptr, outlen);
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- /*
- * Curl_sasl_decode_cram_md5_message()
- *
- * This is used to decode an already encoded CRAM-MD5 challenge message.
- *
- * Parameters:
- *
- * chlg64 [in] - Pointer to the base64 encoded challenge message.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_decode_cram_md5_message(const char *chlg64, char **outptr,
- size_t *outlen)
-{
- CURLcode result = CURLE_OK;
- size_t chlg64len = strlen(chlg64);
-
- *outptr = NULL;
- *outlen = 0;
-
- /* Decode the challenge if necessary */
- if(chlg64len && *chlg64 != '=')
- result = Curl_base64_decode(chlg64, (unsigned char **) outptr, outlen);
-
- return result;
- }
-
- /*
- * Curl_sasl_create_cram_md5_message()
- *
- * This is used to generate an already encoded CRAM-MD5 response message ready
- * for sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * chlg [in] - The challenge.
- * userp [in] - The user name.
- * passdwp [in] - The user's password.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_cram_md5_message(struct SessionHandle *data,
- const char *chlg,
- const char *userp,
- const char *passwdp,
- char **outptr, size_t *outlen)
-{
- CURLcode result = CURLE_OK;
- size_t chlglen = 0;
- HMAC_context *ctxt;
- unsigned char digest[MD5_DIGEST_LEN];
- char *response;
-
- if(chlg)
- chlglen = strlen(chlg);
-
- /* Compute the digest using the password as the key */
- ctxt = Curl_HMAC_init(Curl_HMAC_MD5,
- (const unsigned char *) passwdp,
- curlx_uztoui(strlen(passwdp)));
- if(!ctxt)
- return CURLE_OUT_OF_MEMORY;
-
- /* Update the digest with the given challenge */
- if(chlglen > 0)
- Curl_HMAC_update(ctxt, (const unsigned char *) chlg,
- curlx_uztoui(chlglen));
-
- /* Finalise the digest */
- Curl_HMAC_final(ctxt, digest);
-
- /* Generate the response */
- response = aprintf(
- "%s %02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
- userp, digest[0], digest[1], digest[2], digest[3], digest[4],
- digest[5], digest[6], digest[7], digest[8], digest[9], digest[10],
- digest[11], digest[12], digest[13], digest[14], digest[15]);
- if(!response)
- return CURLE_OUT_OF_MEMORY;
-
- /* Base64 encode the response */
- result = Curl_base64_encode(data, response, 0, outptr, outlen);
-
- Curl_safefree(response);
-
- return result;
-}
-
-#ifndef USE_WINDOWS_SSPI
-/*
- * sasl_decode_digest_md5_message()
- *
- * This is used internally to decode an already encoded DIGEST-MD5 challenge
- * message into the seperate attributes.
- *
- * Parameters:
- *
- * chlg64 [in] - Pointer to the base64 encoded challenge message.
- * nonce [in/out] - The buffer where the nonce will be stored.
- * nlen [in] - The length of the nonce buffer.
- * realm [in/out] - The buffer where the realm will be stored.
- * rlen [in] - The length of the realm buffer.
- * alg [in/out] - The buffer where the algorithm will be stored.
- * alen [in] - The length of the algorithm buffer.
- * qop [in/out] - The buffer where the qop-options will be stored.
- * qlen [in] - The length of the qop buffer.
- *
- * Returns CURLE_OK on success.
- */
-static CURLcode sasl_decode_digest_md5_message(const char *chlg64,
- char *nonce, size_t nlen,
- char *realm, size_t rlen,
- char *alg, size_t alen,
- char *qop, size_t qlen)
-{
- CURLcode result = CURLE_OK;
- unsigned char *chlg = NULL;
- size_t chlglen = 0;
- size_t chlg64len = strlen(chlg64);
-
- /* Decode the base-64 encoded challenge message */
- if(chlg64len && *chlg64 != '=') {
- result = Curl_base64_decode(chlg64, &chlg, &chlglen);
- if(result)
- return result;
- }
-
- /* Ensure we have a valid challenge message */
- if(!chlg)
- return CURLE_BAD_CONTENT_ENCODING;
-
- /* Retrieve nonce string from the challenge */
- if(!sasl_digest_get_key_value((char *)chlg, "nonce=\"", nonce, nlen, '\"')) {
- Curl_safefree(chlg);
- return CURLE_BAD_CONTENT_ENCODING;
- }
-
- /* Retrieve realm string from the challenge */
- if(!sasl_digest_get_key_value((char *)chlg, "realm=\"", realm, rlen, '\"')) {
- /* Challenge does not have a realm, set empty string [RFC2831] page 6 */
- strcpy(realm, "");
- }
-
- /* Retrieve algorithm string from the challenge */
- if(!sasl_digest_get_key_value((char *)chlg, "algorithm=", alg, alen, ',')) {
- Curl_safefree(chlg);
- return CURLE_BAD_CONTENT_ENCODING;
- }
-
- /* Retrieve qop-options string from the challenge */
- if(!sasl_digest_get_key_value((char *)chlg, "qop=\"", qop, qlen, '\"')) {
- Curl_safefree(chlg);
- return CURLE_BAD_CONTENT_ENCODING;
- }
-
- Curl_safefree(chlg);
-
- return CURLE_OK;
-}
-
-/*
- * Curl_sasl_create_digest_md5_message()
- *
- * This is used to generate an already encoded DIGEST-MD5 response message
- * ready for sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * chlg64 [in] - Pointer to the base64 encoded challenge message.
- * userp [in] - The user name.
- * passdwp [in] - The user's password.
- * service [in] - The service type such as www, smtp, pop or imap.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
- const char *chlg64,
- const char *userp,
- const char *passwdp,
- const char *service,
- char **outptr, size_t *outlen)
-{
- CURLcode result = CURLE_OK;
- size_t i;
- MD5_context *ctxt;
- char *response = NULL;
- unsigned char digest[MD5_DIGEST_LEN];
- char HA1_hex[2 * MD5_DIGEST_LEN + 1];
- char HA2_hex[2 * MD5_DIGEST_LEN + 1];
- char resp_hash_hex[2 * MD5_DIGEST_LEN + 1];
- char nonce[64];
- char realm[128];
- char algorithm[64];
- char qop_options[64];
- int qop_values;
- char cnonce[33];
- unsigned int entropy[4];
- char nonceCount[] = "00000001";
- char method[] = "AUTHENTICATE";
- char qop[] = DIGEST_QOP_VALUE_STRING_AUTH;
- char *spn = NULL;
-
- /* Decode the challange message */
- result = sasl_decode_digest_md5_message(chlg64, nonce, sizeof(nonce),
- realm, sizeof(realm),
- algorithm, sizeof(algorithm),
- qop_options, sizeof(qop_options));
- if(result)
- return result;
-
- /* We only support md5 sessions */
- if(strcmp(algorithm, "md5-sess") != 0)
- return CURLE_BAD_CONTENT_ENCODING;
-
- /* Get the qop-values from the qop-options */
- result = sasl_digest_get_qop_values(qop_options, &qop_values);
- if(result)
- return result;
-
- /* We only support auth quality-of-protection */
- if(!(qop_values & DIGEST_QOP_VALUE_AUTH))
- return CURLE_BAD_CONTENT_ENCODING;
-
- /* Generate 16 bytes of random data */
- entropy[0] = Curl_rand(data);
- entropy[1] = Curl_rand(data);
- entropy[2] = Curl_rand(data);
- entropy[3] = Curl_rand(data);
-
- /* Convert the random data into a 32 byte hex string */
- snprintf(cnonce, sizeof(cnonce), "%08x%08x%08x%08x",
- entropy[0], entropy[1], entropy[2], entropy[3]);
-
- /* So far so good, now calculate A1 and H(A1) according to RFC 2831 */
- ctxt = Curl_MD5_init(Curl_DIGEST_MD5);
- if(!ctxt)
- return CURLE_OUT_OF_MEMORY;
-
- Curl_MD5_update(ctxt, (const unsigned char *) userp,
- curlx_uztoui(strlen(userp)));
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
- Curl_MD5_update(ctxt, (const unsigned char *) realm,
- curlx_uztoui(strlen(realm)));
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
- Curl_MD5_update(ctxt, (const unsigned char *) passwdp,
- curlx_uztoui(strlen(passwdp)));
- Curl_MD5_final(ctxt, digest);
-
- ctxt = Curl_MD5_init(Curl_DIGEST_MD5);
- if(!ctxt)
- return CURLE_OUT_OF_MEMORY;
-
- Curl_MD5_update(ctxt, (const unsigned char *) digest, MD5_DIGEST_LEN);
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
- Curl_MD5_update(ctxt, (const unsigned char *) nonce,
- curlx_uztoui(strlen(nonce)));
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
- Curl_MD5_update(ctxt, (const unsigned char *) cnonce,
- curlx_uztoui(strlen(cnonce)));
- Curl_MD5_final(ctxt, digest);
-
- /* Convert calculated 16 octet hex into 32 bytes string */
- for(i = 0; i < MD5_DIGEST_LEN; i++)
- snprintf(&HA1_hex[2 * i], 3, "%02x", digest[i]);
-
- /* Generate our SPN */
- spn = Curl_sasl_build_spn(service, realm);
- if(!spn)
- return CURLE_OUT_OF_MEMORY;
-
- /* Calculate H(A2) */
- ctxt = Curl_MD5_init(Curl_DIGEST_MD5);
- if(!ctxt) {
- Curl_safefree(spn);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- Curl_MD5_update(ctxt, (const unsigned char *) method,
- curlx_uztoui(strlen(method)));
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
- Curl_MD5_update(ctxt, (const unsigned char *) spn,
- curlx_uztoui(strlen(spn)));
- Curl_MD5_final(ctxt, digest);
-
- for(i = 0; i < MD5_DIGEST_LEN; i++)
- snprintf(&HA2_hex[2 * i], 3, "%02x", digest[i]);
-
- /* Now calculate the response hash */
- ctxt = Curl_MD5_init(Curl_DIGEST_MD5);
- if(!ctxt) {
- Curl_safefree(spn);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- Curl_MD5_update(ctxt, (const unsigned char *) HA1_hex, 2 * MD5_DIGEST_LEN);
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
- Curl_MD5_update(ctxt, (const unsigned char *) nonce,
- curlx_uztoui(strlen(nonce)));
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
-
- Curl_MD5_update(ctxt, (const unsigned char *) nonceCount,
- curlx_uztoui(strlen(nonceCount)));
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
- Curl_MD5_update(ctxt, (const unsigned char *) cnonce,
- curlx_uztoui(strlen(cnonce)));
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
- Curl_MD5_update(ctxt, (const unsigned char *) qop,
- curlx_uztoui(strlen(qop)));
- Curl_MD5_update(ctxt, (const unsigned char *) ":", 1);
-
- Curl_MD5_update(ctxt, (const unsigned char *) HA2_hex, 2 * MD5_DIGEST_LEN);
- Curl_MD5_final(ctxt, digest);
-
- for(i = 0; i < MD5_DIGEST_LEN; i++)
- snprintf(&resp_hash_hex[2 * i], 3, "%02x", digest[i]);
-
- /* Generate the response */
- response = aprintf("username=\"%s\",realm=\"%s\",nonce=\"%s\","
- "cnonce=\"%s\",nc=\"%s\",digest-uri=\"%s\",response=%s,"
- "qop=%s",
- userp, realm, nonce,
- cnonce, nonceCount, spn, resp_hash_hex, qop);
- Curl_safefree(spn);
- if(!response)
- return CURLE_OUT_OF_MEMORY;
-
- /* Base64 encode the response */
- result = Curl_base64_encode(data, response, 0, outptr, outlen);
-
- Curl_safefree(response);
-
- return result;
-}
-#endif /* !USE_WINDOWS_SSPI */
-
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
-
-#ifdef USE_NTLM
-/*
- * Curl_sasl_create_ntlm_type1_message()
- *
- * This is used to generate an already encoded NTLM type-1 message ready for
- * sending to the recipient.
- *
- * Note: This is a simple wrapper of the NTLM function which means that any
- * SASL based protocols don't have to include the NTLM functions directly.
- *
- * Parameters:
- *
- * userp [in] - The user name in the format User or Domain\User.
- * passdwp [in] - The user's password.
- * ntlm [in/out] - The ntlm data struct being used and modified.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_ntlm_type1_message(const char *userp,
- const char *passwdp,
- struct ntlmdata *ntlm,
- char **outptr, size_t *outlen)
-{
- return Curl_ntlm_create_type1_message(userp, passwdp, ntlm, outptr, outlen);
-}
-
-/*
- * Curl_sasl_decode_ntlm_type2_message()
- *
- * This is used to decode an already encoded NTLM type-2 message.
- *
- * Parameters:
- *
- * data [in] - Pointer to session handle.
- * type2msg [in] - Pointer to the base64 encoded type-2 message.
- * ntlm [in/out] - The ntlm data struct being used and modified.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_decode_ntlm_type2_message(struct SessionHandle *data,
- const char *type2msg,
- struct ntlmdata *ntlm)
-{
-#ifdef USE_NSS
- CURLcode result;
-
- /* make sure the crypto backend is initialized */
- result = Curl_nss_force_init(data);
- if(result)
- return result;
-#endif
-
- return Curl_ntlm_decode_type2_message(data, type2msg, ntlm);
-}
-
-/*
- * Curl_sasl_create_ntlm_type3_message()
- *
- * This is used to generate an already encoded NTLM type-3 message ready for
- * sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - Pointer to session handle.
- * userp [in] - The user name in the format User or Domain\User.
- * passdwp [in] - The user's password.
- * ntlm [in/out] - The ntlm data struct being used and modified.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,
- const char *userp,
- const char *passwdp,
- struct ntlmdata *ntlm,
- char **outptr, size_t *outlen)
-{
- return Curl_ntlm_create_type3_message(data, userp, passwdp, ntlm, outptr,
- outlen);
-}
-#endif /* USE_NTLM */
-
-/*
- * Curl_sasl_create_xoauth2_message()
- *
- * This is used to generate an already encoded OAuth 2.0 message ready for
- * sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * user [in] - The user name.
- * bearer [in] - The bearer token.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_xoauth2_message(struct SessionHandle *data,
- const char *user,
- const char *bearer,
- char **outptr, size_t *outlen)
-{
- CURLcode result = CURLE_OK;
- char *xoauth = NULL;
-
- /* Generate the message */
- xoauth = aprintf("user=%s\1auth=Bearer %s\1\1", user, bearer);
- if(!xoauth)
- return CURLE_OUT_OF_MEMORY;
-
- /* Base64 encode the reply */
- result = Curl_base64_encode(data, xoauth, strlen(xoauth), outptr, outlen);
-
- Curl_safefree(xoauth);
-
- return result;
-}
-
-/*
- * Curl_sasl_cleanup()
- *
- * This is used to cleanup any libraries or curl modules used by the sasl
- * functions.
- *
- * Parameters:
- *
- * conn [in] - Pointer to the connection data.
- * authused [in] - The authentication mechanism used.
- */
-void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused)
-{
-#if defined(USE_WINDOWS_SSPI)
- /* Cleanup the gssapi structure */
- if(authused == SASL_MECH_GSSAPI) {
- Curl_sasl_gssapi_cleanup(&conn->krb5);
- }
-#ifdef USE_NTLM
- /* Cleanup the ntlm structure */
- else if(authused == SASL_MECH_NTLM) {
- Curl_ntlm_sspi_cleanup(&conn->ntlm);
- }
-#endif
-#else
- /* Reserved for future use */
- (void)conn;
- (void)authused;
-#endif
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_sasl.h b/external/libcurl_android/jni/libcurl/lib/curl_sasl.h
deleted file mode 100755
index e56fa1a5..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_sasl.h
+++ /dev/null
@@ -1,158 +0,0 @@
-#ifndef HEADER_CURL_SASL_H
-#define HEADER_CURL_SASL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <curl/curl.h>
-
-struct SessionHandle;
-struct connectdata;
-struct ntlmdata;
-
-#if defined(USE_WINDOWS_SSPI)
-struct kerberos5data;
-#endif
-
-/* Authentication mechanism values */
-#define SASL_AUTH_NONE 0
-#define SASL_AUTH_ANY ~0U
-
-/* Authentication mechanism flags */
-#define SASL_MECH_LOGIN (1 << 0)
-#define SASL_MECH_PLAIN (1 << 1)
-#define SASL_MECH_CRAM_MD5 (1 << 2)
-#define SASL_MECH_DIGEST_MD5 (1 << 3)
-#define SASL_MECH_GSSAPI (1 << 4)
-#define SASL_MECH_EXTERNAL (1 << 5)
-#define SASL_MECH_NTLM (1 << 6)
-#define SASL_MECH_XOAUTH2 (1 << 7)
-
-/* Authentication mechanism strings */
-#define SASL_MECH_STRING_LOGIN "LOGIN"
-#define SASL_MECH_STRING_PLAIN "PLAIN"
-#define SASL_MECH_STRING_CRAM_MD5 "CRAM-MD5"
-#define SASL_MECH_STRING_DIGEST_MD5 "DIGEST-MD5"
-#define SASL_MECH_STRING_GSSAPI "GSSAPI"
-#define SASL_MECH_STRING_EXTERNAL "EXTERNAL"
-#define SASL_MECH_STRING_NTLM "NTLM"
-#define SASL_MECH_STRING_XOAUTH2 "XOAUTH2"
-
-/* This is used to test whether the line starts with the given mechanism */
-#define sasl_mech_equal(line, wordlen, mech) \
- (wordlen == (sizeof(mech) - 1) / sizeof(char) && \
- !memcmp(line, mech, wordlen))
-
-/* This is used to build a SPN string */
-#if !defined(USE_WINDOWS_SSPI)
-char *Curl_sasl_build_spn(const char *service, const char *instance);
-#else
-TCHAR *Curl_sasl_build_spn(const char *service, const char *instance);
-#endif
-
-/* This is used to generate a base64 encoded PLAIN authentication message */
-CURLcode Curl_sasl_create_plain_message(struct SessionHandle *data,
- const char *userp,
- const char *passwdp,
- char **outptr, size_t *outlen);
-
-/* This is used to generate a base64 encoded LOGIN authentication message
- containing either the user name or password details */
-CURLcode Curl_sasl_create_login_message(struct SessionHandle *data,
- const char *valuep, char **outptr,
- size_t *outlen);
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/* This is used to decode a base64 encoded CRAM-MD5 challange message */
-CURLcode Curl_sasl_decode_cram_md5_message(const char *chlg64, char **outptr,
- size_t *outlen);
-
-/* This is used to generate a base64 encoded CRAM-MD5 response message */
-CURLcode Curl_sasl_create_cram_md5_message(struct SessionHandle *data,
- const char *chlg,
- const char *user,
- const char *passwdp,
- char **outptr, size_t *outlen);
-
-/* This is used to generate a base64 encoded DIGEST-MD5 response message */
-CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
- const char *chlg64,
- const char *userp,
- const char *passwdp,
- const char *service,
- char **outptr, size_t *outlen);
-#endif
-
-#ifdef USE_NTLM
-/* This is used to generate a base64 encoded NTLM type-1 message */
-CURLcode Curl_sasl_create_ntlm_type1_message(const char *userp,
- const char *passwdp,
- struct ntlmdata *ntlm,
- char **outptr,
- size_t *outlen);
-
-/* This is used to decode a base64 encoded NTLM type-2 message */
-CURLcode Curl_sasl_decode_ntlm_type2_message(struct SessionHandle *data,
- const char *type2msg,
- struct ntlmdata *ntlm);
-
-/* This is used to generate a base64 encoded NTLM type-3 message */
-CURLcode Curl_sasl_create_ntlm_type3_message(struct SessionHandle *data,
- const char *userp,
- const char *passwdp,
- struct ntlmdata *ntlm,
- char **outptr, size_t *outlen);
-
-#endif /* USE_NTLM */
-
-#if defined(USE_WINDOWS_SSPI)
-/* This is used to generate a base64 encoded GSSAPI (Kerberos V5) user token
- message */
-CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
- const char *userp,
- const char *passwdp,
- const char *service,
- const bool mutual,
- const char *chlg64,
- struct kerberos5data *krb5,
- char **outptr, size_t *outlen);
-
-/* This is used to generate a base64 encoded GSSAPI (Kerberos V5) security
- token message */
-CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
- const char *input,
- struct kerberos5data *krb5,
- char **outptr,
- size_t *outlen);
-#endif
-
-/* This is used to generate a base64 encoded XOAUTH2 authentication message
- containing the user name and bearer token */
-CURLcode Curl_sasl_create_xoauth2_message(struct SessionHandle *data,
- const char *user,
- const char *bearer,
- char **outptr, size_t *outlen);
-
-/* This is used to cleanup any libraries or curl modules used by the sasl
- functions */
-void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused);
-
-#endif /* HEADER_CURL_SASL_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_sasl_sspi.c b/external/libcurl_android/jni/libcurl/lib/curl_sasl_sspi.c
deleted file mode 100755
index df4da964..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_sasl_sspi.c
+++ /dev/null
@@ -1,696 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2014, Steve Holme, <steve_holme@hotmail.com>.
- * Copyright (C) 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * RFC2831 DIGEST-MD5 authentication
- * RFC4422 Simple Authentication and Security Layer (SASL)
- * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_WINDOWS_SSPI)
-
-#include <curl/curl.h>
-
-#include "curl_sasl.h"
-#include "urldata.h"
-#include "curl_base64.h"
-#include "warnless.h"
-#include "curl_memory.h"
-#include "curl_multibyte.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-void Curl_sasl_gssapi_cleanup(struct kerberos5data *krb5);
-
-/*
- * Curl_sasl_build_spn()
- *
- * This is used to build a SPN string in the format service/host.
- *
- * Parameters:
- *
- * serivce [in] - The service type such as www, smtp, pop or imap.
- * instance [in] - The instance name such as the host nme or realm.
- *
- * Returns a pointer to the newly allocated SPN.
- */
-TCHAR *Curl_sasl_build_spn(const char *service, const char *host)
-{
- char *utf8_spn = NULL;
- TCHAR *tchar_spn = NULL;
-
- /* Note: We could use DsMakeSPN() or DsClientMakeSpnForTargetServer() rather
- than doing this ourselves but the first is only available in Windows XP
- and Windows Server 2003 and the latter is only available in Windows 2000
- but not Windows95/98/ME or Windows NT4.0 unless the Active Directory
- Client Extensions are installed. As such it is far simpler for us to
- formulate the SPN instead. */
-
- /* Allocate our UTF8 based SPN */
- utf8_spn = aprintf("%s/%s", service, host);
- if(!utf8_spn) {
- return NULL;
- }
-
- /* Allocate our TCHAR based SPN */
- tchar_spn = Curl_convert_UTF8_to_tchar(utf8_spn);
- if(!tchar_spn) {
- Curl_safefree(utf8_spn);
-
- return NULL;
- }
-
- /* Release the UTF8 variant when operating with Unicode */
- if(utf8_spn != tchar_spn)
- Curl_safefree(utf8_spn);
-
- /* Return our newly allocated SPN */
- return tchar_spn;
-}
-
-#if !defined(CURL_DISABLE_CRYPTO_AUTH)
-/*
- * Curl_sasl_create_digest_md5_message()
- *
- * This is used to generate an already encoded DIGEST-MD5 response message
- * ready for sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * chlg64 [in] - Pointer to the base64 encoded challenge message.
- * userp [in] - The user name.
- * passdwp [in] - The user's password.
- * service [in] - The service type such as www, smtp, pop or imap.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_digest_md5_message(struct SessionHandle *data,
- const char *chlg64,
- const char *userp,
- const char *passwdp,
- const char *service,
- char **outptr, size_t *outlen)
-{
- CURLcode result = CURLE_OK;
- TCHAR *spn = NULL;
- size_t chlglen = 0;
- size_t resp_max = 0;
- unsigned char *chlg = NULL;
- unsigned char *resp = NULL;
- CredHandle handle;
- CtxtHandle ctx;
- PSecPkgInfo SecurityPackage;
- SEC_WINNT_AUTH_IDENTITY identity;
- SecBuffer chlg_buf;
- SecBuffer resp_buf;
- SecBufferDesc chlg_desc;
- SecBufferDesc resp_desc;
- SECURITY_STATUS status;
- unsigned long attrs;
- TimeStamp tsDummy; /* For Windows 9x compatibility of SSPI calls */
-
- /* Decode the base-64 encoded challenge message */
- if(strlen(chlg64) && *chlg64 != '=') {
- result = Curl_base64_decode(chlg64, &chlg, &chlglen);
- if(result)
- return result;
- }
-
- /* Ensure we have a valid challenge message */
- if(!chlg)
- return CURLE_BAD_CONTENT_ENCODING;
-
- /* Ensure we have some login credientials as DigestSSP cannot use the current
- Windows user like NTLMSSP can */
- if(!userp || !*userp) {
- Curl_safefree(chlg);
- return CURLE_LOGIN_DENIED;
- }
-
- /* Query the security package for DigestSSP */
- status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT("WDigest"),
- &SecurityPackage);
- if(status != SEC_E_OK) {
- Curl_safefree(chlg);
-
- return CURLE_NOT_BUILT_IN;
- }
-
- resp_max = SecurityPackage->cbMaxToken;
-
- /* Release the package buffer as it is not required anymore */
- s_pSecFn->FreeContextBuffer(SecurityPackage);
-
- /* Allocate our response buffer */
- resp = malloc(resp_max);
- if(!resp) {
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Generate our SPN */
- spn = Curl_sasl_build_spn(service, data->easy_conn->host.name);
- if(!spn) {
- Curl_safefree(resp);
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Populate our identity structure */
- result = Curl_create_sspi_identity(userp, passwdp, &identity);
- if(result) {
- Curl_safefree(spn);
- Curl_safefree(resp);
- Curl_safefree(chlg);
-
- return result;
- }
-
- /* Acquire our credientials handle */
- status = s_pSecFn->AcquireCredentialsHandle(NULL,
- (TCHAR *) TEXT("WDigest"),
- SECPKG_CRED_OUTBOUND, NULL,
- &identity, NULL, NULL,
- &handle, &tsDummy);
-
- if(status != SEC_E_OK) {
- Curl_sspi_free_identity(&identity);
- Curl_safefree(spn);
- Curl_safefree(resp);
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Setup the challenge "input" security buffer */
- chlg_desc.ulVersion = SECBUFFER_VERSION;
- chlg_desc.cBuffers = 1;
- chlg_desc.pBuffers = &chlg_buf;
- chlg_buf.BufferType = SECBUFFER_TOKEN;
- chlg_buf.pvBuffer = chlg;
- chlg_buf.cbBuffer = curlx_uztoul(chlglen);
-
- /* Setup the response "output" security buffer */
- resp_desc.ulVersion = SECBUFFER_VERSION;
- resp_desc.cBuffers = 1;
- resp_desc.pBuffers = &resp_buf;
- resp_buf.BufferType = SECBUFFER_TOKEN;
- resp_buf.pvBuffer = resp;
- resp_buf.cbBuffer = curlx_uztoul(resp_max);
-
- /* Generate our challenge-response message */
- status = s_pSecFn->InitializeSecurityContext(&handle, NULL, spn, 0, 0, 0,
- &chlg_desc, 0, &ctx,
- &resp_desc, &attrs, &tsDummy);
-
- if(status == SEC_I_COMPLETE_AND_CONTINUE ||
- status == SEC_I_CONTINUE_NEEDED)
- s_pSecFn->CompleteAuthToken(&handle, &resp_desc);
- else if(status != SEC_E_OK) {
- s_pSecFn->FreeCredentialsHandle(&handle);
- Curl_sspi_free_identity(&identity);
- Curl_safefree(spn);
- Curl_safefree(resp);
- Curl_safefree(chlg);
-
- return CURLE_RECV_ERROR;
- }
-
- /* Base64 encode the response */
- result = Curl_base64_encode(data, (char *)resp, resp_buf.cbBuffer, outptr,
- outlen);
-
- /* Free our handles */
- s_pSecFn->DeleteSecurityContext(&ctx);
- s_pSecFn->FreeCredentialsHandle(&handle);
-
- /* Free the identity structure */
- Curl_sspi_free_identity(&identity);
-
- /* Free the SPN */
- Curl_safefree(spn);
-
- /* Free the response buffer */
- Curl_safefree(resp);
-
- /* Free the decoeded challenge message */
- Curl_safefree(chlg);
-
- return result;
-}
-
-#endif /* !CURL_DISABLE_CRYPTO_AUTH */
-
-/*
- * Curl_sasl_create_gssapi_user_message()
- *
- * This is used to generate an already encoded GSSAPI (Kerberos V5) user token
- * message ready for sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * userp [in] - The user name.
- * passdwp [in] - The user's password.
- * service [in] - The service type such as www, smtp, pop or imap.
- * mutual_auth [in] - Flag specifing whether or not mutual authentication
- * is enabled.
- * chlg64 [in] - Pointer to the optional base64 encoded challenge
- * message.
- * krb5 [in/out] - The gssapi data struct being used and modified.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_gssapi_user_message(struct SessionHandle *data,
- const char *userp,
- const char *passwdp,
- const char *service,
- const bool mutual_auth,
- const char *chlg64,
- struct kerberos5data *krb5,
- char **outptr, size_t *outlen)
-{
- CURLcode result = CURLE_OK;
- size_t chlglen = 0;
- unsigned char *chlg = NULL;
- CtxtHandle context;
- PSecPkgInfo SecurityPackage;
- SecBuffer chlg_buf;
- SecBuffer resp_buf;
- SecBufferDesc chlg_desc;
- SecBufferDesc resp_desc;
- SECURITY_STATUS status;
- unsigned long attrs;
- TimeStamp tsDummy; /* For Windows 9x compatibility of SSPI calls */
-
- if(!krb5->credentials) {
- /* Query the security package for Kerberos */
- status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT("Kerberos"),
- &SecurityPackage);
- if(status != SEC_E_OK) {
- return CURLE_NOT_BUILT_IN;
- }
-
- krb5->token_max = SecurityPackage->cbMaxToken;
-
- /* Release the package buffer as it is not required anymore */
- s_pSecFn->FreeContextBuffer(SecurityPackage);
-
- /* Generate our SPN */
- krb5->spn = Curl_sasl_build_spn(service, data->easy_conn->host.name);
- if(!krb5->spn)
- return CURLE_OUT_OF_MEMORY;
-
- if(userp && *userp) {
- /* Populate our identity structure */
- result = Curl_create_sspi_identity(userp, passwdp, &krb5->identity);
- if(result)
- return result;
-
- /* Allow proper cleanup of the identity structure */
- krb5->p_identity = &krb5->identity;
-
- /* Allocate our response buffer */
- krb5->output_token = malloc(krb5->token_max);
- if(!krb5->output_token)
- return CURLE_OUT_OF_MEMORY;
- }
- else
- /* Use the current Windows user */
- krb5->p_identity = NULL;
-
- /* Allocate our credentials handle */
- krb5->credentials = malloc(sizeof(CredHandle));
- if(!krb5->credentials)
- return CURLE_OUT_OF_MEMORY;
-
- memset(krb5->credentials, 0, sizeof(CredHandle));
-
- /* Acquire our credientials handle */
- status = s_pSecFn->AcquireCredentialsHandle(NULL,
- (TCHAR *) TEXT("Kerberos"),
- SECPKG_CRED_OUTBOUND, NULL,
- krb5->p_identity, NULL, NULL,
- krb5->credentials, &tsDummy);
- if(status != SEC_E_OK)
- return CURLE_OUT_OF_MEMORY;
-
- /* Allocate our new context handle */
- krb5->context = malloc(sizeof(CtxtHandle));
- if(!krb5->context)
- return CURLE_OUT_OF_MEMORY;
-
- memset(krb5->context, 0, sizeof(CtxtHandle));
- }
- else {
- /* Decode the base-64 encoded challenge message */
- if(strlen(chlg64) && *chlg64 != '=') {
- result = Curl_base64_decode(chlg64, &chlg, &chlglen);
- if(result)
- return result;
- }
-
- /* Ensure we have a valid challenge message */
- if(!chlg)
- return CURLE_BAD_CONTENT_ENCODING;
-
- /* Setup the challenge "input" security buffer */
- chlg_desc.ulVersion = SECBUFFER_VERSION;
- chlg_desc.cBuffers = 1;
- chlg_desc.pBuffers = &chlg_buf;
- chlg_buf.BufferType = SECBUFFER_TOKEN;
- chlg_buf.pvBuffer = chlg;
- chlg_buf.cbBuffer = curlx_uztoul(chlglen);
- }
-
- /* Setup the response "output" security buffer */
- resp_desc.ulVersion = SECBUFFER_VERSION;
- resp_desc.cBuffers = 1;
- resp_desc.pBuffers = &resp_buf;
- resp_buf.BufferType = SECBUFFER_TOKEN;
- resp_buf.pvBuffer = krb5->output_token;
- resp_buf.cbBuffer = curlx_uztoul(krb5->token_max);
-
- /* Generate our challenge-response message */
- status = s_pSecFn->InitializeSecurityContext(krb5->credentials,
- chlg ? krb5->context : NULL,
- krb5->spn,
- (mutual_auth ?
- ISC_REQ_MUTUAL_AUTH : 0),
- 0, SECURITY_NATIVE_DREP,
- chlg ? &chlg_desc : NULL, 0,
- &context,
- &resp_desc, &attrs,
- &tsDummy);
-
- if(status != SEC_E_OK && status != SEC_I_CONTINUE_NEEDED) {
- Curl_safefree(chlg);
-
- return CURLE_RECV_ERROR;
- }
-
- if(memcmp(&context, krb5->context, sizeof(context))) {
- s_pSecFn->DeleteSecurityContext(krb5->context);
-
- memcpy(krb5->context, &context, sizeof(context));
- }
-
- if(resp_buf.cbBuffer) {
- /* Base64 encode the response */
- result = Curl_base64_encode(data, (char *)resp_buf.pvBuffer,
- resp_buf.cbBuffer, outptr, outlen);
- }
-
- /* Free the decoded challenge */
- Curl_safefree(chlg);
-
- return result;
-}
-
-/*
- * Curl_sasl_create_gssapi_security_message()
- *
- * This is used to generate an already encoded GSSAPI (Kerberos V5) security
- * token message ready for sending to the recipient.
- *
- * Parameters:
- *
- * data [in] - The session handle.
- * chlg64 [in] - Pointer to the optional base64 encoded challenge message.
- * krb5 [in/out] - The gssapi data struct being used and modified.
- * outptr [in/out] - The address where a pointer to newly allocated memory
- * holding the result will be stored upon completion.
- * outlen [out] - The length of the output message.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_sasl_create_gssapi_security_message(struct SessionHandle *data,
- const char *chlg64,
- struct kerberos5data *krb5,
- char **outptr,
- size_t *outlen)
-{
- CURLcode result = CURLE_OK;
- size_t offset = 0;
- size_t chlglen = 0;
- size_t messagelen = 0;
- size_t appdatalen = 0;
- unsigned char *chlg = NULL;
- unsigned char *trailer = NULL;
- unsigned char *message = NULL;
- unsigned char *padding = NULL;
- unsigned char *appdata = NULL;
- SecBuffer input_buf[2];
- SecBuffer wrap_buf[3];
- SecBufferDesc input_desc;
- SecBufferDesc wrap_desc;
- unsigned long indata = 0;
- unsigned long outdata = 0;
- unsigned long qop = 0;
- unsigned long sec_layer = 0;
- unsigned long max_size = 0;
- SecPkgContext_Sizes sizes;
- SecPkgCredentials_Names names;
- SECURITY_STATUS status;
-
- /* TODO: Verify the unicodeness of this function */
-
- /* Decode the base-64 encoded input message */
- if(strlen(chlg64) && *chlg64 != '=') {
- result = Curl_base64_decode(chlg64, &chlg, &chlglen);
- if(result)
- return result;
- }
-
- /* Ensure we have a valid challenge message */
- if(!chlg)
- return CURLE_BAD_CONTENT_ENCODING;
-
- /* Get our response size information */
- status = s_pSecFn->QueryContextAttributes(krb5->context,
- SECPKG_ATTR_SIZES,
- &sizes);
- if(status != SEC_E_OK) {
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Get the fully qualified username back from the context */
- status = s_pSecFn->QueryCredentialsAttributes(krb5->credentials,
- SECPKG_CRED_ATTR_NAMES,
- &names);
- if(status != SEC_E_OK) {
- Curl_safefree(chlg);
-
- return CURLE_RECV_ERROR;
- }
-
- /* Setup the "input" security buffer */
- input_desc.ulVersion = SECBUFFER_VERSION;
- input_desc.cBuffers = 2;
- input_desc.pBuffers = input_buf;
- input_buf[0].BufferType = SECBUFFER_STREAM;
- input_buf[0].pvBuffer = chlg;
- input_buf[0].cbBuffer = curlx_uztoul(chlglen);
- input_buf[1].BufferType = SECBUFFER_DATA;
- input_buf[1].pvBuffer = NULL;
- input_buf[1].cbBuffer = 0;
-
- /* Decrypt in the inbound challenge obtaining the qop */
- status = s_pSecFn->DecryptMessage(krb5->context, &input_desc, 0, &qop);
- if(status != SEC_E_OK) {
- Curl_safefree(chlg);
-
- return CURLE_BAD_CONTENT_ENCODING;
- }
-
- /* Not 4 octets long to fail as per RFC4752 Section 3.1 */
- if(input_buf[1].cbBuffer != 4) {
- Curl_safefree(chlg);
-
- return CURLE_BAD_CONTENT_ENCODING;
- }
-
- /* Copy the data out into a coinput_bufnvenient variable and free the SSPI
- allocated buffer as it is not required anymore */
- memcpy(&indata, input_buf[1].pvBuffer, 4);
- s_pSecFn->FreeContextBuffer(input_buf[1].pvBuffer);
-
- /* Extract the security layer */
- sec_layer = indata & 0x000000FF;
- if(!(sec_layer & KERB_WRAP_NO_ENCRYPT)) {
- Curl_safefree(chlg);
-
- return CURLE_BAD_CONTENT_ENCODING;
- }
-
- /* Extract the maximum message size the server can receive */
- max_size = ntohl(indata & 0xFFFFFF00);
- if(max_size > 0) {
- /* The server has told us it supports a maximum receive buffer, however, as
- we don't require one unless we are encrypting data we, tell the server
- our receive buffer is zero. */
- max_size = 0;
- }
-
- outdata = htonl(max_size) | sec_layer;
-
- /* Allocate the trailer */
- trailer = malloc(sizes.cbSecurityTrailer);
- if(!trailer) {
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Allocate our message */
- messagelen = 4 + strlen(names.sUserName) + 1;
- message = malloc(messagelen);
- if(!message) {
- Curl_safefree(trailer);
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Populate the message with the security layer, client supported receive
- message size and authorization identity including the 0x00 based
- terminator. Note: Dispite RFC4752 Section 3.1 stating "The authorization
- identity is not terminated with the zero-valued (%x00) octet." it seems
- necessary to include it. */
- memcpy(message, &outdata, 4);
- strcpy((char *)message + 4, names.sUserName);
-
- /* Allocate the padding */
- padding = malloc(sizes.cbBlockSize);
- if(!padding) {
- Curl_safefree(message);
- Curl_safefree(trailer);
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Setup the "authentication data" security buffer */
- wrap_desc.ulVersion = SECBUFFER_VERSION;
- wrap_desc.cBuffers = 3;
- wrap_desc.pBuffers = wrap_buf;
- wrap_buf[0].BufferType = SECBUFFER_TOKEN;
- wrap_buf[0].pvBuffer = trailer;
- wrap_buf[0].cbBuffer = sizes.cbSecurityTrailer;
- wrap_buf[1].BufferType = SECBUFFER_DATA;
- wrap_buf[1].pvBuffer = message;
- wrap_buf[1].cbBuffer = curlx_uztoul(messagelen);
- wrap_buf[2].BufferType = SECBUFFER_PADDING;
- wrap_buf[2].pvBuffer = padding;
- wrap_buf[2].cbBuffer = sizes.cbBlockSize;
-
- /* Encrypt the data */
- status = s_pSecFn->EncryptMessage(krb5->context, KERB_WRAP_NO_ENCRYPT,
- &wrap_desc, 0);
- if(status != SEC_E_OK) {
- Curl_safefree(padding);
- Curl_safefree(message);
- Curl_safefree(trailer);
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Allocate the encryption (wrap) buffer */
- appdatalen = wrap_buf[0].cbBuffer + wrap_buf[1].cbBuffer +
- wrap_buf[2].cbBuffer;
- appdata = malloc(appdatalen);
- if(!appdata) {
- Curl_safefree(padding);
- Curl_safefree(message);
- Curl_safefree(trailer);
- Curl_safefree(chlg);
-
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Populate the encryption buffer */
- memcpy(appdata, wrap_buf[0].pvBuffer, wrap_buf[0].cbBuffer);
- offset += wrap_buf[0].cbBuffer;
- memcpy(appdata + offset, wrap_buf[1].pvBuffer, wrap_buf[1].cbBuffer);
- offset += wrap_buf[1].cbBuffer;
- memcpy(appdata + offset, wrap_buf[2].pvBuffer, wrap_buf[2].cbBuffer);
-
- /* Base64 encode the response */
- result = Curl_base64_encode(data, (char *)appdata, appdatalen, outptr,
- outlen);
-
- /* Free all of our local buffers */
- Curl_safefree(appdata);
- Curl_safefree(padding);
- Curl_safefree(message);
- Curl_safefree(trailer);
- Curl_safefree(chlg);
-
- return result;
-}
-
-void Curl_sasl_gssapi_cleanup(struct kerberos5data *krb5)
-{
- /* Free the context */
- if(krb5->context) {
- s_pSecFn->DeleteSecurityContext(krb5->context);
- free(krb5->context);
- krb5->context = NULL;
- }
-
- /* Free the credientials handle */
- if(krb5->credentials) {
- s_pSecFn->FreeCredentialsHandle(krb5->credentials);
- free(krb5->credentials);
- krb5->credentials = NULL;
- }
-
- /* Free our identity */
- Curl_sspi_free_identity(krb5->p_identity);
- krb5->p_identity = NULL;
-
- /* Free the SPN and output token */
- Curl_safefree(krb5->spn);
- Curl_safefree(krb5->output_token);
-
- /* Reset any variables */
- krb5->token_max = 0;
-}
-
-#endif /* USE_WINDOWS_SSPI */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_sec.h b/external/libcurl_android/jni/libcurl/lib/curl_sec.h
deleted file mode 100755
index 82151e9c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_sec.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef HEADER_CURL_SECURITY_H
-#define HEADER_CURL_SECURITY_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-struct Curl_sec_client_mech {
- const char *name;
- size_t size;
- int (*init)(void *);
- int (*auth)(void *, struct connectdata *);
- void (*end)(void *);
- int (*check_prot)(void *, int);
- int (*overhead)(void *, int, int);
- int (*encode)(void *, const void*, int, int, void**, struct connectdata *);
- int (*decode)(void *, void*, int, int, struct connectdata *);
-};
-
-#define AUTH_OK 0
-#define AUTH_CONTINUE 1
-#define AUTH_ERROR 2
-
-#ifdef HAVE_GSSAPI
-int Curl_sec_read_msg (struct connectdata *conn, char *,
- enum protection_level);
-void Curl_sec_end (struct connectdata *);
-CURLcode Curl_sec_login (struct connectdata *);
-int Curl_sec_request_prot (struct connectdata *conn, const char *level);
-
-extern struct Curl_sec_client_mech Curl_krb5_client_mech;
-#endif
-
-#endif /* HEADER_CURL_SECURITY_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_setup.h b/external/libcurl_android/jni/libcurl/lib/curl_setup.h
deleted file mode 100755
index 173731c4..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_setup.h
+++ /dev/null
@@ -1,693 +0,0 @@
-#ifndef HEADER_CURL_SETUP_H
-#define HEADER_CURL_SETUP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Define WIN32 when build target is Win32 API
- */
-
-#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) && \
- !defined(__SYMBIAN32__)
-#define WIN32
-#endif
-
-/*
- * Include configuration script results or hand-crafted
- * configuration file for platforms which lack config tool.
- */
-
-#ifdef HAVE_CONFIG_H
-
-#include "curl_config.h"
-
-#else /* HAVE_CONFIG_H */
-
-#ifdef _WIN32_WCE
-# include "config-win32ce.h"
-#else
-# ifdef WIN32
-# include "config-win32.h"
-# endif
-#endif
-
-#if defined(macintosh) && defined(__MRC__)
-# include "config-mac.h"
-#endif
-
-#ifdef __riscos__
-# include "config-riscos.h"
-#endif
-
-#ifdef __AMIGA__
-# include "config-amigaos.h"
-#endif
-
-#ifdef __SYMBIAN32__
-# include "config-symbian.h"
-#endif
-
-#ifdef __OS400__
-# include "config-os400.h"
-#endif
-
-#ifdef TPF
-# include "config-tpf.h"
-#endif
-
-#ifdef __VXWORKS__
-# include "config-vxworks.h"
-#endif
-
-#endif /* HAVE_CONFIG_H */
-
-/* ================================================================ */
-/* Definition of preprocessor macros/symbols which modify compiler */
-/* behavior or generated code characteristics must be done here, */
-/* as appropriate, before any system header file is included. It is */
-/* also possible to have them defined in the config file included */
-/* before this point. As a result of all this we frown inclusion of */
-/* system header files in our config files, avoid this at any cost. */
-/* ================================================================ */
-
-/*
- * AIX 4.3 and newer needs _THREAD_SAFE defined to build
- * proper reentrant code. Others may also need it.
- */
-
-#ifdef NEED_THREAD_SAFE
-# ifndef _THREAD_SAFE
-# define _THREAD_SAFE
-# endif
-#endif
-
-/*
- * Tru64 needs _REENTRANT set for a few function prototypes and
- * things to appear in the system header files. Unixware needs it
- * to build proper reentrant code. Others may also need it.
- */
-
-#ifdef NEED_REENTRANT
-# ifndef _REENTRANT
-# define _REENTRANT
-# endif
-#endif
-
-/* Solaris needs this to get a POSIX-conformant getpwuid_r */
-#if defined(sun) || defined(__sun)
-# ifndef _POSIX_PTHREAD_SEMANTICS
-# define _POSIX_PTHREAD_SEMANTICS 1
-# endif
-#endif
-
-/* ================================================================ */
-/* If you need to include a system header file for your platform, */
-/* please, do it beyond the point further indicated in this file. */
-/* ================================================================ */
-
-/*
- * libcurl's external interface definitions are also used internally,
- * and might also include required system header files to define them.
- */
-
-#include <curl/curlbuild.h>
-
-/*
- * Compile time sanity checks must also be done when building the library.
- */
-
-#include <curl/curlrules.h>
-
-/*
- * Ensure that no one is using the old SIZEOF_CURL_OFF_T macro
- */
-
-#ifdef SIZEOF_CURL_OFF_T
-# error "SIZEOF_CURL_OFF_T shall not be defined!"
- Error Compilation_aborted_SIZEOF_CURL_OFF_T_shall_not_be_defined
-#endif
-
-/*
- * Disable other protocols when http is the only one desired.
- */
-
-#ifdef HTTP_ONLY
-# ifndef CURL_DISABLE_TFTP
-# define CURL_DISABLE_TFTP
-# endif
-# ifndef CURL_DISABLE_FTP
-# define CURL_DISABLE_FTP
-# endif
-# ifndef CURL_DISABLE_LDAP
-# define CURL_DISABLE_LDAP
-# endif
-# ifndef CURL_DISABLE_TELNET
-# define CURL_DISABLE_TELNET
-# endif
-# ifndef CURL_DISABLE_DICT
-# define CURL_DISABLE_DICT
-# endif
-# ifndef CURL_DISABLE_FILE
-# define CURL_DISABLE_FILE
-# endif
-# ifndef CURL_DISABLE_RTSP
-# define CURL_DISABLE_RTSP
-# endif
-# ifndef CURL_DISABLE_POP3
-# define CURL_DISABLE_POP3
-# endif
-# ifndef CURL_DISABLE_IMAP
-# define CURL_DISABLE_IMAP
-# endif
-# ifndef CURL_DISABLE_SMTP
-# define CURL_DISABLE_SMTP
-# endif
-# ifndef CURL_DISABLE_RTSP
-# define CURL_DISABLE_RTSP
-# endif
-# ifndef CURL_DISABLE_RTMP
-# define CURL_DISABLE_RTMP
-# endif
-# ifndef CURL_DISABLE_GOPHER
-# define CURL_DISABLE_GOPHER
-# endif
-#endif
-
-/*
- * When http is disabled rtsp is not supported.
- */
-
-#if defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_RTSP)
-# define CURL_DISABLE_RTSP
-#endif
-
-/* ================================================================ */
-/* No system header file shall be included in this file before this */
-/* point. The only allowed ones are those included from curlbuild.h */
-/* ================================================================ */
-
-/*
- * OS/400 setup file includes some system headers.
- */
-
-#ifdef __OS400__
-# include "setup-os400.h"
-#endif
-
-/*
- * VMS setup file includes some system headers.
- */
-
-#ifdef __VMS
-# include "setup-vms.h"
-#endif
-
-/*
- * Include header files for windows builds before redefining anything.
- * Use this preprocessor block only to include or exclude windows.h,
- * winsock2.h, ws2tcpip.h or winsock.h. Any other windows thing belongs
- * to any other further and independent block. Under Cygwin things work
- * just as under linux (e.g. <sys/socket.h>) and the winsock headers should
- * never be included when __CYGWIN__ is defined. configure script takes
- * care of this, not defining HAVE_WINDOWS_H, HAVE_WINSOCK_H, HAVE_WINSOCK2_H,
- * neither HAVE_WS2TCPIP_H when __CYGWIN__ is defined.
- */
-
-#ifdef HAVE_WINDOWS_H
-# if defined(UNICODE) && !defined(_UNICODE)
-# define _UNICODE
-# endif
-# if defined(_UNICODE) && !defined(UNICODE)
-# define UNICODE
-# endif
-# ifndef WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-# endif
-# include <windows.h>
-# ifdef HAVE_WINSOCK2_H
-# include <winsock2.h>
-# ifdef HAVE_WS2TCPIP_H
-# include <ws2tcpip.h>
-# endif
-# else
-# ifdef HAVE_WINSOCK_H
-# include <winsock.h>
-# endif
-# endif
-# include <tchar.h>
-# ifdef UNICODE
- typedef wchar_t *(*curl_wcsdup_callback)(const wchar_t *str);
-# endif
-#endif
-
-/*
- * Define USE_WINSOCK to 2 if we have and use WINSOCK2 API, else
- * define USE_WINSOCK to 1 if we have and use WINSOCK API, else
- * undefine USE_WINSOCK.
- */
-
-#undef USE_WINSOCK
-
-#ifdef HAVE_WINSOCK2_H
-# define USE_WINSOCK 2
-#else
-# ifdef HAVE_WINSOCK_H
-# define USE_WINSOCK 1
-# endif
-#endif
-
-#ifdef USE_LWIPSOCK
-# include <lwip/init.h>
-# include <lwip/sockets.h>
-# include <lwip/netdb.h>
-#endif
-
-#ifdef HAVE_EXTRA_STRICMP_H
-# include <extra/stricmp.h>
-#endif
-
-#ifdef HAVE_EXTRA_STRDUP_H
-# include <extra/strdup.h>
-#endif
-
-#ifdef TPF
-# include <strings.h> /* for bzero, strcasecmp, and strncasecmp */
-# include <string.h> /* for strcpy and strlen */
-# include <stdlib.h> /* for rand and srand */
-# include <sys/socket.h> /* for select and ioctl*/
-# include <netdb.h> /* for in_addr_t definition */
-# include <tpf/sysapi.h> /* for tpf_process_signals */
- /* change which select is used for libcurl */
-# define select(a,b,c,d,e) tpf_select_libcurl(a,b,c,d,e)
-#endif
-
-#ifdef __VXWORKS__
-# include <sockLib.h> /* for generic BSD socket functions */
-# include <ioLib.h> /* for basic I/O interface functions */
-#endif
-
-#ifdef __AMIGA__
-# ifndef __ixemul__
-# include <exec/types.h>
-# include <exec/execbase.h>
-# include <proto/exec.h>
-# include <proto/dos.h>
-# define select(a,b,c,d,e) WaitSelect(a,b,c,d,e,0)
-# endif
-#endif
-
-#include <stdio.h>
-#ifdef HAVE_ASSERT_H
-#include <assert.h>
-#endif
-
-#ifdef __TANDEM /* for nsr-tandem-nsk systems */
-#include <floss.h>
-#endif
-
-#ifndef STDC_HEADERS /* no standard C headers! */
-#include <curl/stdcheaders.h>
-#endif
-
-#ifdef __POCC__
-# include <sys/types.h>
-# include <unistd.h>
-# define sys_nerr EILSEQ
-#endif
-
-/*
- * Salford-C kludge section (mostly borrowed from wxWidgets).
- */
-#ifdef __SALFORDC__
- #pragma suppress 353 /* Possible nested comments */
- #pragma suppress 593 /* Define not used */
- #pragma suppress 61 /* enum has no name */
- #pragma suppress 106 /* unnamed, unused parameter */
- #include <clib.h>
-#endif
-
-/*
- * Large file (>2Gb) support using WIN32 functions.
- */
-
-#ifdef USE_WIN32_LARGE_FILES
-# include <io.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# undef lseek
-# define lseek(fdes,offset,whence) _lseeki64(fdes, offset, whence)
-# undef fstat
-# define fstat(fdes,stp) _fstati64(fdes, stp)
-# undef stat
-# define stat(fname,stp) _stati64(fname, stp)
-# define struct_stat struct _stati64
-# define LSEEK_ERROR (__int64)-1
-#endif
-
-/*
- * Small file (<2Gb) support using WIN32 functions.
- */
-
-#ifdef USE_WIN32_SMALL_FILES
-# include <io.h>
-# include <sys/types.h>
-# include <sys/stat.h>
-# ifndef _WIN32_WCE
-# undef lseek
-# define lseek(fdes,offset,whence) _lseek(fdes, (long)offset, whence)
-# define fstat(fdes,stp) _fstat(fdes, stp)
-# define stat(fname,stp) _stat(fname, stp)
-# define struct_stat struct _stat
-# endif
-# define LSEEK_ERROR (long)-1
-#endif
-
-#ifndef struct_stat
-# define struct_stat struct stat
-#endif
-
-#ifndef LSEEK_ERROR
-# define LSEEK_ERROR (off_t)-1
-#endif
-
-/*
- * Default sizeof(off_t) in case it hasn't been defined in config file.
- */
-
-#ifndef SIZEOF_OFF_T
-# if defined(__VMS) && !defined(__VAX)
-# if defined(_LARGEFILE)
-# define SIZEOF_OFF_T 8
-# endif
-# elif defined(__OS400__) && defined(__ILEC400__)
-# if defined(_LARGE_FILES)
-# define SIZEOF_OFF_T 8
-# endif
-# elif defined(__MVS__) && defined(__IBMC__)
-# if defined(_LP64) || defined(_LARGE_FILES)
-# define SIZEOF_OFF_T 8
-# endif
-# elif defined(__370__) && defined(__IBMC__)
-# if defined(_LP64) || defined(_LARGE_FILES)
-# define SIZEOF_OFF_T 8
-# endif
-# endif
-# ifndef SIZEOF_OFF_T
-# define SIZEOF_OFF_T 4
-# endif
-#endif
-
-/*
- * Arg 2 type for gethostname in case it hasn't been defined in config file.
- */
-
-#ifndef GETHOSTNAME_TYPE_ARG2
-# ifdef USE_WINSOCK
-# define GETHOSTNAME_TYPE_ARG2 int
-# else
-# define GETHOSTNAME_TYPE_ARG2 size_t
-# endif
-#endif
-
-/* Below we define some functions. They should
-
- 4. set the SIGALRM signal timeout
- 5. set dir/file naming defines
- */
-
-#ifdef WIN32
-
-# define DIR_CHAR "\\"
-# define DOT_CHAR "_"
-
-#else /* WIN32 */
-
-# ifdef MSDOS /* Watt-32 */
-
-# include <sys/ioctl.h>
-# define select(n,r,w,x,t) select_s(n,r,w,x,t)
-# define ioctl(x,y,z) ioctlsocket(x,y,(char *)(z))
-# include <tcp.h>
-# ifdef word
-# undef word
-# endif
-# ifdef byte
-# undef byte
-# endif
-
-# endif /* MSDOS */
-
-# ifdef __minix
- /* Minix 3 versions up to at least 3.1.3 are missing these prototypes */
- extern char * strtok_r(char *s, const char *delim, char **last);
- extern struct tm * gmtime_r(const time_t * const timep, struct tm *tmp);
-# endif
-
-# define DIR_CHAR "/"
-# ifndef DOT_CHAR
-# define DOT_CHAR "."
-# endif
-
-# ifdef MSDOS
-# undef DOT_CHAR
-# define DOT_CHAR "_"
-# endif
-
-# ifndef fileno /* sunos 4 have this as a macro! */
- int fileno( FILE *stream);
-# endif
-
-#endif /* WIN32 */
-
-/*
- * msvc 6.0 requires PSDK in order to have INET6_ADDRSTRLEN
- * defined in ws2tcpip.h as well as to provide IPv6 support.
- */
-
-#if defined(_MSC_VER) && !defined(__POCC__)
-# if !defined(HAVE_WS2TCPIP_H) || \
- ((_MSC_VER < 1300) && !defined(INET6_ADDRSTRLEN))
-# undef HAVE_GETADDRINFO_THREADSAFE
-# undef HAVE_FREEADDRINFO
-# undef HAVE_GETADDRINFO
-# undef HAVE_GETNAMEINFO
-# undef ENABLE_IPV6
-# endif
-#endif
-
-/* ---------------------------------------------------------------- */
-/* resolver specialty compile-time defines */
-/* CURLRES_* defines to use in the host*.c sources */
-/* ---------------------------------------------------------------- */
-
-/*
- * lcc-win32 doesn't have _beginthreadex(), lacks threads support.
- */
-
-#if defined(__LCC__) && defined(WIN32)
-# undef USE_THREADS_POSIX
-# undef USE_THREADS_WIN32
-#endif
-
-/*
- * MSVC threads support requires a multi-threaded runtime library.
- * _beginthreadex() is not available in single-threaded ones.
- */
-
-#if defined(_MSC_VER) && !defined(__POCC__) && !defined(_MT)
-# undef USE_THREADS_POSIX
-# undef USE_THREADS_WIN32
-#endif
-
-/*
- * Mutually exclusive CURLRES_* definitions.
- */
-
-#ifdef USE_ARES
-# define CURLRES_ASYNCH
-# define CURLRES_ARES
-/* now undef the stock libc functions just to avoid them being used */
-# undef HAVE_GETADDRINFO
-# undef HAVE_GETHOSTBYNAME
-#elif defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
-# define CURLRES_ASYNCH
-# define CURLRES_THREADED
-#else
-# define CURLRES_SYNCH
-#endif
-
-#ifdef ENABLE_IPV6
-# define CURLRES_IPV6
-#else
-# define CURLRES_IPV4
-#endif
-
-/* ---------------------------------------------------------------- */
-
-/*
- * When using WINSOCK, TELNET protocol requires WINSOCK2 API.
- */
-
-#if defined(USE_WINSOCK) && (USE_WINSOCK != 2)
-# define CURL_DISABLE_TELNET 1
-#endif
-
-/*
- * msvc 6.0 does not have struct sockaddr_storage and
- * does not define IPPROTO_ESP in winsock2.h. But both
- * are available if PSDK is properly installed.
- */
-
-#if defined(_MSC_VER) && !defined(__POCC__)
-# if !defined(HAVE_WINSOCK2_H) || ((_MSC_VER < 1300) && !defined(IPPROTO_ESP))
-# undef HAVE_STRUCT_SOCKADDR_STORAGE
-# endif
-#endif
-
-/*
- * Intentionally fail to build when using msvc 6.0 without PSDK installed.
- * The brave of heart can circumvent this, defining ALLOW_MSVC6_WITHOUT_PSDK
- * in lib/config-win32.h although absolutely discouraged and unsupported.
- */
-
-#if defined(_MSC_VER) && !defined(__POCC__)
-# if !defined(HAVE_WINDOWS_H) || ((_MSC_VER < 1300) && !defined(_FILETIME_))
-# if !defined(ALLOW_MSVC6_WITHOUT_PSDK)
-# error MSVC 6.0 requires "February 2003 Platform SDK" a.k.a. \
- "Windows Server 2003 PSDK"
-# else
-# define CURL_DISABLE_LDAP 1
-# endif
-# endif
-#endif
-
-#ifdef NETWARE
-int netware_init(void);
-#ifndef __NOVELL_LIBC__
-#include <sys/bsdskt.h>
-#include <sys/timeval.h>
-#endif
-#endif
-
-#if defined(HAVE_LIBIDN) && defined(HAVE_TLD_H)
-/* The lib was present and the tld.h header (which is missing in libidn 0.3.X
- but we only work with libidn 0.4.1 or later) */
-#define USE_LIBIDN
-#endif
-
-#ifndef SIZEOF_TIME_T
-/* assume default size of time_t to be 32 bit */
-#define SIZEOF_TIME_T 4
-#endif
-
-#define LIBIDN_REQUIRED_VERSION "0.4.1"
-
-#if defined(USE_GNUTLS) || defined(USE_SSLEAY) || defined(USE_NSS) || \
- defined(USE_QSOSSL) || defined(USE_POLARSSL) || defined(USE_AXTLS) || \
- defined(USE_CYASSL) || defined(USE_SCHANNEL) || \
- defined(USE_DARWINSSL) || defined(USE_GSKIT)
-#define USE_SSL /* SSL support has been enabled */
-#endif
-
-#if !defined(CURL_DISABLE_CRYPTO_AUTH) && \
- (defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI))
-#define USE_SPNEGO
-#endif
-
-/* Single point where USE_NTLM definition might be done */
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_NTLM) && \
- !defined(CURL_DISABLE_CRYPTO_AUTH)
-#if defined(USE_SSLEAY) || defined(USE_WINDOWS_SSPI) || \
- defined(USE_GNUTLS) || defined(USE_NSS) || defined(USE_DARWINSSL)
-#define USE_NTLM
-#endif
-#endif
-
-/* non-configure builds may define CURL_WANTS_CA_BUNDLE_ENV */
-#if defined(CURL_WANTS_CA_BUNDLE_ENV) && !defined(CURL_CA_BUNDLE)
-#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")
-#endif
-
-/*
- * Provide a mechanism to silence picky compilers, such as gcc 4.6+.
- * Parameters should of course normally not be unused, but for example when
- * we have multiple implementations of the same interface it may happen.
- */
-
-#if defined(__GNUC__) && ((__GNUC__ >= 3) || \
- ((__GNUC__ == 2) && defined(__GNUC_MINOR__) && (__GNUC_MINOR__ >= 7)))
-# define UNUSED_PARAM __attribute__((__unused__))
-#else
-# define UNUSED_PARAM /*NOTHING*/
-#endif
-
-/*
- * Include macros and defines that should only be processed once.
- */
-
-#ifndef HEADER_CURL_SETUP_ONCE_H
-#include "curl_setup_once.h"
-#endif
-
-/*
- * Definition of our NOP statement Object-like macro
- */
-
-#ifndef Curl_nop_stmt
-# define Curl_nop_stmt do { } WHILE_FALSE
-#endif
-
-/*
- * Ensure that Winsock and lwIP TCP/IP stacks are not mixed.
- */
-
-#if defined(__LWIP_OPT_H__)
-# if defined(SOCKET) || \
- defined(USE_WINSOCK) || \
- defined(HAVE_WINSOCK_H) || \
- defined(HAVE_WINSOCK2_H) || \
- defined(HAVE_WS2TCPIP_H)
-# error "Winsock and lwIP TCP/IP stack definitions shall not coexist!"
-# endif
-#endif
-
-/*
- * Portable symbolic names for Winsock shutdown() mode flags.
- */
-
-#ifdef USE_WINSOCK
-# define SHUT_RD 0x00
-# define SHUT_WR 0x01
-# define SHUT_RDWR 0x02
-#endif
-
-/* Define S_ISREG if not defined by system headers, f.e. MSVC */
-#if !defined(S_ISREG) && defined(S_IFMT) && defined(S_IFREG)
-#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
-#endif
-
-/* Define S_ISDIR if not defined by system headers, f.e. MSVC */
-#if !defined(S_ISDIR) && defined(S_IFMT) && defined(S_IFDIR)
-#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-#endif
-
-#endif /* HEADER_CURL_SETUP_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_setup_once.h b/external/libcurl_android/jni/libcurl/lib/curl_setup_once.h
deleted file mode 100755
index 69d6d479..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_setup_once.h
+++ /dev/null
@@ -1,551 +0,0 @@
-#ifndef HEADER_CURL_SETUP_ONCE_H
-#define HEADER_CURL_SETUP_ONCE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-
-/*
- * Inclusion of common header files.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-#include <ctype.h>
-
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#ifdef NEED_MALLOC_H
-#include <malloc.h>
-#endif
-
-#ifdef NEED_MEMORY_H
-#include <memory.h>
-#endif
-
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#ifdef TIME_WITH_SYS_TIME
-#include <time.h>
-#endif
-#else
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#endif
-
-#ifdef WIN32
-#include <io.h>
-#include <fcntl.h>
-#endif
-
-#if defined(HAVE_STDBOOL_H) && defined(HAVE_BOOL_T)
-#include <stdbool.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef __hpux
-# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL)
-# ifdef _APP32_64BIT_OFF_T
-# define OLD_APP32_64BIT_OFF_T _APP32_64BIT_OFF_T
-# undef _APP32_64BIT_OFF_T
-# else
-# undef OLD_APP32_64BIT_OFF_T
-# endif
-# endif
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-
-#ifdef __hpux
-# if !defined(_XOPEN_SOURCE_EXTENDED) || defined(_KERNEL)
-# ifdef OLD_APP32_64BIT_OFF_T
-# define _APP32_64BIT_OFF_T OLD_APP32_64BIT_OFF_T
-# undef OLD_APP32_64BIT_OFF_T
-# endif
-# endif
-#endif
-
-
-/*
- * Definition of timeval struct for platforms that don't have it.
- */
-
-#ifndef HAVE_STRUCT_TIMEVAL
-struct timeval {
- long tv_sec;
- long tv_usec;
-};
-#endif
-
-
-/*
- * If we have the MSG_NOSIGNAL define, make sure we use
- * it as the fourth argument of function send()
- */
-
-#ifdef HAVE_MSG_NOSIGNAL
-#define SEND_4TH_ARG MSG_NOSIGNAL
-#else
-#define SEND_4TH_ARG 0
-#endif
-
-
-#if defined(__minix)
-/* Minix doesn't support recv on TCP sockets */
-#define sread(x,y,z) (ssize_t)read((RECV_TYPE_ARG1)(x), \
- (RECV_TYPE_ARG2)(y), \
- (RECV_TYPE_ARG3)(z))
-
-#elif defined(HAVE_RECV)
-/*
- * The definitions for the return type and arguments types
- * of functions recv() and send() belong and come from the
- * configuration file. Do not define them in any other place.
- *
- * HAVE_RECV is defined if you have a function named recv()
- * which is used to read incoming data from sockets. If your
- * function has another name then don't define HAVE_RECV.
- *
- * If HAVE_RECV is defined then RECV_TYPE_ARG1, RECV_TYPE_ARG2,
- * RECV_TYPE_ARG3, RECV_TYPE_ARG4 and RECV_TYPE_RETV must also
- * be defined.
- *
- * HAVE_SEND is defined if you have a function named send()
- * which is used to write outgoing data on a connected socket.
- * If yours has another name then don't define HAVE_SEND.
- *
- * If HAVE_SEND is defined then SEND_TYPE_ARG1, SEND_QUAL_ARG2,
- * SEND_TYPE_ARG2, SEND_TYPE_ARG3, SEND_TYPE_ARG4 and
- * SEND_TYPE_RETV must also be defined.
- */
-
-#if !defined(RECV_TYPE_ARG1) || \
- !defined(RECV_TYPE_ARG2) || \
- !defined(RECV_TYPE_ARG3) || \
- !defined(RECV_TYPE_ARG4) || \
- !defined(RECV_TYPE_RETV)
- /* */
- Error Missing_definition_of_return_and_arguments_types_of_recv
- /* */
-#else
-#define sread(x,y,z) (ssize_t)recv((RECV_TYPE_ARG1)(x), \
- (RECV_TYPE_ARG2)(y), \
- (RECV_TYPE_ARG3)(z), \
- (RECV_TYPE_ARG4)(0))
-#endif
-#else /* HAVE_RECV */
-#ifndef sread
- /* */
- Error Missing_definition_of_macro_sread
- /* */
-#endif
-#endif /* HAVE_RECV */
-
-
-#if defined(__minix)
-/* Minix doesn't support send on TCP sockets */
-#define swrite(x,y,z) (ssize_t)write((SEND_TYPE_ARG1)(x), \
- (SEND_TYPE_ARG2)(y), \
- (SEND_TYPE_ARG3)(z))
-
-#elif defined(HAVE_SEND)
-#if !defined(SEND_TYPE_ARG1) || \
- !defined(SEND_QUAL_ARG2) || \
- !defined(SEND_TYPE_ARG2) || \
- !defined(SEND_TYPE_ARG3) || \
- !defined(SEND_TYPE_ARG4) || \
- !defined(SEND_TYPE_RETV)
- /* */
- Error Missing_definition_of_return_and_arguments_types_of_send
- /* */
-#else
-#define swrite(x,y,z) (ssize_t)send((SEND_TYPE_ARG1)(x), \
- (SEND_TYPE_ARG2)(y), \
- (SEND_TYPE_ARG3)(z), \
- (SEND_TYPE_ARG4)(SEND_4TH_ARG))
-#endif
-#else /* HAVE_SEND */
-#ifndef swrite
- /* */
- Error Missing_definition_of_macro_swrite
- /* */
-#endif
-#endif /* HAVE_SEND */
-
-
-#if 0
-#if defined(HAVE_RECVFROM)
-/*
- * Currently recvfrom is only used on udp sockets.
- */
-#if !defined(RECVFROM_TYPE_ARG1) || \
- !defined(RECVFROM_TYPE_ARG2) || \
- !defined(RECVFROM_TYPE_ARG3) || \
- !defined(RECVFROM_TYPE_ARG4) || \
- !defined(RECVFROM_TYPE_ARG5) || \
- !defined(RECVFROM_TYPE_ARG6) || \
- !defined(RECVFROM_TYPE_RETV)
- /* */
- Error Missing_definition_of_return_and_arguments_types_of_recvfrom
- /* */
-#else
-#define sreadfrom(s,b,bl,f,fl) (ssize_t)recvfrom((RECVFROM_TYPE_ARG1) (s), \
- (RECVFROM_TYPE_ARG2 *)(b), \
- (RECVFROM_TYPE_ARG3) (bl), \
- (RECVFROM_TYPE_ARG4) (0), \
- (RECVFROM_TYPE_ARG5 *)(f), \
- (RECVFROM_TYPE_ARG6 *)(fl))
-#endif
-#else /* HAVE_RECVFROM */
-#ifndef sreadfrom
- /* */
- Error Missing_definition_of_macro_sreadfrom
- /* */
-#endif
-#endif /* HAVE_RECVFROM */
-
-
-#ifdef RECVFROM_TYPE_ARG6_IS_VOID
-# define RECVFROM_ARG6_T int
-#else
-# define RECVFROM_ARG6_T RECVFROM_TYPE_ARG6
-#endif
-#endif /* if 0 */
-
-
-/*
- * Function-like macro definition used to close a socket.
- */
-
-#if defined(HAVE_CLOSESOCKET)
-# define sclose(x) closesocket((x))
-#elif defined(HAVE_CLOSESOCKET_CAMEL)
-# define sclose(x) CloseSocket((x))
-#elif defined(HAVE_CLOSE_S)
-# define sclose(x) close_s((x))
-#elif defined(USE_LWIPSOCK)
-# define sclose(x) lwip_close((x))
-#else
-# define sclose(x) close((x))
-#endif
-
-/*
- * Stack-independent version of fcntl() on sockets:
- */
-#if defined(USE_LWIPSOCK)
-# define sfcntl lwip_fcntl
-#else
-# define sfcntl fcntl
-#endif
-
-/*
- * Uppercase macro versions of ANSI/ISO is*() functions/macros which
- * avoid negative number inputs with argument byte codes > 127.
- */
-
-#define ISSPACE(x) (isspace((int) ((unsigned char)x)))
-#define ISDIGIT(x) (isdigit((int) ((unsigned char)x)))
-#define ISALNUM(x) (isalnum((int) ((unsigned char)x)))
-#define ISXDIGIT(x) (isxdigit((int) ((unsigned char)x)))
-#define ISGRAPH(x) (isgraph((int) ((unsigned char)x)))
-#define ISALPHA(x) (isalpha((int) ((unsigned char)x)))
-#define ISPRINT(x) (isprint((int) ((unsigned char)x)))
-#define ISUPPER(x) (isupper((int) ((unsigned char)x)))
-#define ISLOWER(x) (islower((int) ((unsigned char)x)))
-#define ISASCII(x) (isascii((int) ((unsigned char)x)))
-
-#define ISBLANK(x) (int)((((unsigned char)x) == ' ') || \
- (((unsigned char)x) == '\t'))
-
-#define TOLOWER(x) (tolower((int) ((unsigned char)x)))
-
-
-/*
- * 'bool' stuff compatible with HP-UX headers.
- */
-
-#if defined(__hpux) && !defined(HAVE_BOOL_T)
- typedef int bool;
-# define false 0
-# define true 1
-# define HAVE_BOOL_T
-#endif
-
-
-/*
- * 'bool' exists on platforms with <stdbool.h>, i.e. C99 platforms.
- * On non-C99 platforms there's no bool, so define an enum for that.
- * On C99 platforms 'false' and 'true' also exist. Enum uses a
- * global namespace though, so use bool_false and bool_true.
- */
-
-#ifndef HAVE_BOOL_T
- typedef enum {
- bool_false = 0,
- bool_true = 1
- } bool;
-
-/*
- * Use a define to let 'true' and 'false' use those enums. There
- * are currently no use of true and false in libcurl proper, but
- * there are some in the examples. This will cater for any later
- * code happening to use true and false.
- */
-# define false bool_false
-# define true bool_true
-# define HAVE_BOOL_T
-#endif
-
-
-/*
- * Redefine TRUE and FALSE too, to catch current use. With this
- * change, 'bool found = 1' will give a warning on MIPSPro, but
- * 'bool found = TRUE' will not. Change tested on IRIX/MIPSPro,
- * AIX 5.1/Xlc, Tru64 5.1/cc, w/make test too.
- */
-
-#ifndef TRUE
-#define TRUE true
-#endif
-#ifndef FALSE
-#define FALSE false
-#endif
-
-
-/*
- * Macro WHILE_FALSE may be used to build single-iteration do-while loops,
- * avoiding compiler warnings. Mostly intended for other macro definitions.
- */
-
-#define WHILE_FALSE while(0)
-
-#if defined(_MSC_VER) && !defined(__POCC__)
-# undef WHILE_FALSE
-# if (_MSC_VER < 1500)
-# define WHILE_FALSE while(1, 0)
-# else
-# define WHILE_FALSE \
-__pragma(warning(push)) \
-__pragma(warning(disable:4127)) \
-while(0) \
-__pragma(warning(pop))
-# endif
-#endif
-
-
-/*
- * Typedef to 'int' if sig_atomic_t is not an available 'typedefed' type.
- */
-
-#ifndef HAVE_SIG_ATOMIC_T
-typedef int sig_atomic_t;
-#define HAVE_SIG_ATOMIC_T
-#endif
-
-
-/*
- * Convenience SIG_ATOMIC_T definition
- */
-
-#ifdef HAVE_SIG_ATOMIC_T_VOLATILE
-#define SIG_ATOMIC_T static sig_atomic_t
-#else
-#define SIG_ATOMIC_T static volatile sig_atomic_t
-#endif
-
-
-/*
- * Default return type for signal handlers.
- */
-
-#ifndef RETSIGTYPE
-#define RETSIGTYPE void
-#endif
-
-
-/*
- * Macro used to include code only in debug builds.
- */
-
-#ifdef DEBUGBUILD
-#define DEBUGF(x) x
-#else
-#define DEBUGF(x) do { } WHILE_FALSE
-#endif
-
-
-/*
- * Macro used to include assertion code only in debug builds.
- */
-
-#if defined(DEBUGBUILD) && defined(HAVE_ASSERT_H)
-#define DEBUGASSERT(x) assert(x)
-#else
-#define DEBUGASSERT(x) do { } WHILE_FALSE
-#endif
-
-
-/*
- * Macro SOCKERRNO / SET_SOCKERRNO() returns / sets the *socket-related* errno
- * (or equivalent) on this platform to hide platform details to code using it.
- */
-
-#ifdef USE_WINSOCK
-#define SOCKERRNO ((int)WSAGetLastError())
-#define SET_SOCKERRNO(x) (WSASetLastError((int)(x)))
-#else
-#define SOCKERRNO (errno)
-#define SET_SOCKERRNO(x) (errno = (x))
-#endif
-
-
-/*
- * Macro ERRNO / SET_ERRNO() returns / sets the NOT *socket-related* errno
- * (or equivalent) on this platform to hide platform details to code using it.
- */
-
-#if defined(WIN32) && !defined(USE_LWIPSOCK)
-#define ERRNO ((int)GetLastError())
-#define SET_ERRNO(x) (SetLastError((DWORD)(x)))
-#else
-#define ERRNO (errno)
-#define SET_ERRNO(x) (errno = (x))
-#endif
-
-
-/*
- * Portable error number symbolic names defined to Winsock error codes.
- */
-
-#ifdef USE_WINSOCK
-#undef EBADF /* override definition in errno.h */
-#define EBADF WSAEBADF
-#undef EINTR /* override definition in errno.h */
-#define EINTR WSAEINTR
-#undef EINVAL /* override definition in errno.h */
-#define EINVAL WSAEINVAL
-#undef EWOULDBLOCK /* override definition in errno.h */
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#undef EINPROGRESS /* override definition in errno.h */
-#define EINPROGRESS WSAEINPROGRESS
-#undef EALREADY /* override definition in errno.h */
-#define EALREADY WSAEALREADY
-#undef ENOTSOCK /* override definition in errno.h */
-#define ENOTSOCK WSAENOTSOCK
-#undef EDESTADDRREQ /* override definition in errno.h */
-#define EDESTADDRREQ WSAEDESTADDRREQ
-#undef EMSGSIZE /* override definition in errno.h */
-#define EMSGSIZE WSAEMSGSIZE
-#undef EPROTOTYPE /* override definition in errno.h */
-#define EPROTOTYPE WSAEPROTOTYPE
-#undef ENOPROTOOPT /* override definition in errno.h */
-#define ENOPROTOOPT WSAENOPROTOOPT
-#undef EPROTONOSUPPORT /* override definition in errno.h */
-#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
-#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
-#undef EOPNOTSUPP /* override definition in errno.h */
-#define EOPNOTSUPP WSAEOPNOTSUPP
-#define EPFNOSUPPORT WSAEPFNOSUPPORT
-#undef EAFNOSUPPORT /* override definition in errno.h */
-#define EAFNOSUPPORT WSAEAFNOSUPPORT
-#undef EADDRINUSE /* override definition in errno.h */
-#define EADDRINUSE WSAEADDRINUSE
-#undef EADDRNOTAVAIL /* override definition in errno.h */
-#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
-#undef ENETDOWN /* override definition in errno.h */
-#define ENETDOWN WSAENETDOWN
-#undef ENETUNREACH /* override definition in errno.h */
-#define ENETUNREACH WSAENETUNREACH
-#undef ENETRESET /* override definition in errno.h */
-#define ENETRESET WSAENETRESET
-#undef ECONNABORTED /* override definition in errno.h */
-#define ECONNABORTED WSAECONNABORTED
-#undef ECONNRESET /* override definition in errno.h */
-#define ECONNRESET WSAECONNRESET
-#undef ENOBUFS /* override definition in errno.h */
-#define ENOBUFS WSAENOBUFS
-#undef EISCONN /* override definition in errno.h */
-#define EISCONN WSAEISCONN
-#undef ENOTCONN /* override definition in errno.h */
-#define ENOTCONN WSAENOTCONN
-#define ESHUTDOWN WSAESHUTDOWN
-#define ETOOMANYREFS WSAETOOMANYREFS
-#undef ETIMEDOUT /* override definition in errno.h */
-#define ETIMEDOUT WSAETIMEDOUT
-#undef ECONNREFUSED /* override definition in errno.h */
-#define ECONNREFUSED WSAECONNREFUSED
-#undef ELOOP /* override definition in errno.h */
-#define ELOOP WSAELOOP
-#ifndef ENAMETOOLONG /* possible previous definition in errno.h */
-#define ENAMETOOLONG WSAENAMETOOLONG
-#endif
-#define EHOSTDOWN WSAEHOSTDOWN
-#undef EHOSTUNREACH /* override definition in errno.h */
-#define EHOSTUNREACH WSAEHOSTUNREACH
-#ifndef ENOTEMPTY /* possible previous definition in errno.h */
-#define ENOTEMPTY WSAENOTEMPTY
-#endif
-#define EPROCLIM WSAEPROCLIM
-#define EUSERS WSAEUSERS
-#define EDQUOT WSAEDQUOT
-#define ESTALE WSAESTALE
-#define EREMOTE WSAEREMOTE
-#endif
-
-/*
- * Macro argv_item_t hides platform details to code using it.
- */
-
-#ifdef __VMS
-#define argv_item_t __char_ptr32
-#else
-#define argv_item_t char *
-#endif
-
-
-/*
- * We use this ZERO_NULL to avoid picky compiler warnings,
- * when assigning a NULL pointer to a function pointer var.
- */
-
-#define ZERO_NULL 0
-
-
-#endif /* HEADER_CURL_SETUP_ONCE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_sspi.c b/external/libcurl_android/jni/libcurl/lib/curl_sspi.c
deleted file mode 100755
index f09d2882..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_sspi.c
+++ /dev/null
@@ -1,257 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_WINDOWS_SSPI
-
-#include <curl/curl.h>
-
-#include "curl_sspi.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-#include "curl_multibyte.h"
-#include "warnless.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* We use our own typedef here since some headers might lack these */
-typedef PSecurityFunctionTable (APIENTRY *INITSECURITYINTERFACE_FN)(VOID);
-
-/* See definition of SECURITY_ENTRYPOINT in sspi.h */
-#ifdef UNICODE
-# ifdef _WIN32_WCE
-# define SECURITYENTRYPOINT L"InitSecurityInterfaceW"
-# else
-# define SECURITYENTRYPOINT "InitSecurityInterfaceW"
-# endif
-#else
-# define SECURITYENTRYPOINT "InitSecurityInterfaceA"
-#endif
-
-/* Handle of security.dll or secur32.dll, depending on Windows version */
-HMODULE s_hSecDll = NULL;
-
-/* Pointer to SSPI dispatch table */
-PSecurityFunctionTable s_pSecFn = NULL;
-
-/*
- * Curl_sspi_global_init()
- *
- * This is used to load the Security Service Provider Interface (SSPI)
- * dynamic link library portably across all Windows versions, without
- * the need to directly link libcurl, nor the application using it, at
- * build time.
- *
- * Once this function has been executed, Windows SSPI functions can be
- * called through the Security Service Provider Interface dispatch table.
- */
-CURLcode Curl_sspi_global_init(void)
-{
- bool securityDll = FALSE;
- INITSECURITYINTERFACE_FN pInitSecurityInterface;
-
- /* If security interface is not yet initialized try to do this */
- if(!s_hSecDll) {
- /* Security Service Provider Interface (SSPI) functions are located in
- * security.dll on WinNT 4.0 and in secur32.dll on Win9x. Win2K and XP
- * have both these DLLs (security.dll forwards calls to secur32.dll) */
- DWORD majorVersion = 4;
- DWORD platformId = VER_PLATFORM_WIN32_NT;
-
-#if !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \
- (_WIN32_WINNT < _WIN32_WINNT_WIN2K)
- OSVERSIONINFO osver;
-
- memset(&osver, 0, sizeof(osver));
- osver.dwOSVersionInfoSize = sizeof(osver);
-
- /* Find out Windows version */
- if(!GetVersionEx(&osver))
- return CURLE_FAILED_INIT;
-
- /* Verify the major version number == 4 and platform id == WIN_NT */
- if(osver.dwMajorVersion == majorVersion &&
- osver.dwPlatformId == platformId)
- securityDll = TRUE;
-#else
- ULONGLONG majorVersionMask;
- ULONGLONG platformIdMask;
- OSVERSIONINFOEX osver;
-
- memset(&osver, 0, sizeof(osver));
- osver.dwOSVersionInfoSize = sizeof(osver);
- osver.dwMajorVersion = majorVersion;
- osver.dwPlatformId = platformId;
- majorVersionMask = VerSetConditionMask(0, VER_MAJORVERSION, VER_EQUAL);
- platformIdMask = VerSetConditionMask(0, VER_PLATFORMID, VER_EQUAL);
-
- /* Verify the major version number == 4 and platform id == WIN_NT */
- if(VerifyVersionInfo(&osver, VER_MAJORVERSION, majorVersionMask) &&
- VerifyVersionInfo(&osver, VER_PLATFORMID, platformIdMask))
- securityDll = TRUE;
-#endif
-
- /* Load SSPI dll into the address space of the calling process */
- if(securityDll)
- s_hSecDll = LoadLibrary(TEXT("security.dll"));
- else
- s_hSecDll = LoadLibrary(TEXT("secur32.dll"));
- if(!s_hSecDll)
- return CURLE_FAILED_INIT;
-
- /* Get address of the InitSecurityInterfaceA function from the SSPI dll */
- pInitSecurityInterface = (INITSECURITYINTERFACE_FN)
- GetProcAddress(s_hSecDll, SECURITYENTRYPOINT);
- if(!pInitSecurityInterface)
- return CURLE_FAILED_INIT;
-
- /* Get pointer to Security Service Provider Interface dispatch table */
- s_pSecFn = pInitSecurityInterface();
- if(!s_pSecFn)
- return CURLE_FAILED_INIT;
- }
-
- return CURLE_OK;
-}
-
-/*
- * Curl_sspi_global_cleanup()
- *
- * This deinitializes the Security Service Provider Interface from libcurl.
- */
-
-void Curl_sspi_global_cleanup(void)
-{
- if(s_hSecDll) {
- FreeLibrary(s_hSecDll);
- s_hSecDll = NULL;
- s_pSecFn = NULL;
- }
-}
-
-/*
- * Curl_create_sspi_identity()
- *
- * This is used to populate a SSPI identity structure based on the supplied
- * username and password.
- *
- * Parameters:
- *
- * userp [in] - The user name in the format User or Domain\User.
- * passdwp [in] - The user's password.
- * identity [in/out] - The identity structure.
- *
- * Returns CURLE_OK on success.
- */
-CURLcode Curl_create_sspi_identity(const char *userp, const char *passwdp,
- SEC_WINNT_AUTH_IDENTITY *identity)
-{
- xcharp_u useranddomain;
- xcharp_u user, dup_user;
- xcharp_u domain, dup_domain;
- xcharp_u passwd, dup_passwd;
- size_t domlen = 0;
-
- domain.const_tchar_ptr = TEXT("");
-
- /* Initialize the identity */
- memset(identity, 0, sizeof(*identity));
-
- useranddomain.tchar_ptr = Curl_convert_UTF8_to_tchar((char *)userp);
- if(!useranddomain.tchar_ptr)
- return CURLE_OUT_OF_MEMORY;
-
- user.const_tchar_ptr = _tcschr(useranddomain.const_tchar_ptr, TEXT('\\'));
- if(!user.const_tchar_ptr)
- user.const_tchar_ptr = _tcschr(useranddomain.const_tchar_ptr, TEXT('/'));
-
- if(user.tchar_ptr) {
- domain.tchar_ptr = useranddomain.tchar_ptr;
- domlen = user.tchar_ptr - useranddomain.tchar_ptr;
- user.tchar_ptr++;
- }
- else {
- user.tchar_ptr = useranddomain.tchar_ptr;
- domain.const_tchar_ptr = TEXT("");
- domlen = 0;
- }
-
- /* Setup the identity's user and length */
- dup_user.tchar_ptr = _tcsdup(user.tchar_ptr);
- if(!dup_user.tchar_ptr) {
- Curl_unicodefree(useranddomain.tchar_ptr);
- return CURLE_OUT_OF_MEMORY;
- }
- identity->User = dup_user.tbyte_ptr;
- identity->UserLength = curlx_uztoul(_tcslen(dup_user.tchar_ptr));
- dup_user.tchar_ptr = NULL;
-
- /* Setup the identity's domain and length */
- dup_domain.tchar_ptr = malloc(sizeof(TCHAR) * (domlen + 1));
- if(!dup_domain.tchar_ptr) {
- Curl_unicodefree(useranddomain.tchar_ptr);
- return CURLE_OUT_OF_MEMORY;
- }
- _tcsncpy(dup_domain.tchar_ptr, domain.tchar_ptr, domlen);
- *(dup_domain.tchar_ptr + domlen) = TEXT('\0');
- identity->Domain = dup_domain.tbyte_ptr;
- identity->DomainLength = curlx_uztoul(domlen);
- dup_domain.tchar_ptr = NULL;
-
- Curl_unicodefree(useranddomain.tchar_ptr);
-
- /* Setup ntlm identity's password and length */
- passwd.tchar_ptr = Curl_convert_UTF8_to_tchar((char *)passwdp);
- if(!passwd.tchar_ptr)
- return CURLE_OUT_OF_MEMORY;
- dup_passwd.tchar_ptr = _tcsdup(passwd.tchar_ptr);
- if(!dup_passwd.tchar_ptr) {
- Curl_unicodefree(passwd.tchar_ptr);
- return CURLE_OUT_OF_MEMORY;
- }
- identity->Password = dup_passwd.tbyte_ptr;
- identity->PasswordLength = curlx_uztoul(_tcslen(dup_passwd.tchar_ptr));
- dup_passwd.tchar_ptr = NULL;
-
- Curl_unicodefree(passwd.tchar_ptr);
-
- /* Setup the identity's flags */
- identity->Flags = SECFLAG_WINNT_AUTH_IDENTITY;
-
- return CURLE_OK;
-}
-
-void Curl_sspi_free_identity(SEC_WINNT_AUTH_IDENTITY *identity)
-{
- if(identity) {
- Curl_safefree(identity->User);
- Curl_safefree(identity->Password);
- Curl_safefree(identity->Domain);
- }
-}
-
-#endif /* USE_WINDOWS_SSPI */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_sspi.h b/external/libcurl_android/jni/libcurl/lib/curl_sspi.h
deleted file mode 100755
index 5ab17d5f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_sspi.h
+++ /dev/null
@@ -1,315 +0,0 @@
-#ifndef HEADER_CURL_SSPI_H
-#define HEADER_CURL_SSPI_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_WINDOWS_SSPI
-
-#include <curl/curl.h>
-
-/*
- * When including the following three headers, it is mandatory to define either
- * SECURITY_WIN32 or SECURITY_KERNEL, indicating who is compiling the code.
- */
-
-#undef SECURITY_WIN32
-#undef SECURITY_KERNEL
-#define SECURITY_WIN32 1
-#include <security.h>
-#include <sspi.h>
-#include <rpc.h>
-
-CURLcode Curl_sspi_global_init(void);
-void Curl_sspi_global_cleanup(void);
-
-/* This is used to generate an SSPI identity structure */
-CURLcode Curl_create_sspi_identity(const char *userp, const char *passwdp,
- SEC_WINNT_AUTH_IDENTITY *identity);
-
-/* This is used to free an SSPI identity structure */
-void Curl_sspi_free_identity(SEC_WINNT_AUTH_IDENTITY *identity);
-
-/* Forward-declaration of global variables defined in curl_sspi.c */
-
-extern HMODULE s_hSecDll;
-extern PSecurityFunctionTable s_pSecFn;
-
-/* Provide some definitions missing in old headers */
-
-#ifndef SEC_E_INSUFFICIENT_MEMORY
-# define SEC_E_INSUFFICIENT_MEMORY ((HRESULT)0x80090300L)
-#endif
-#ifndef SEC_E_INVALID_HANDLE
-# define SEC_E_INVALID_HANDLE ((HRESULT)0x80090301L)
-#endif
-#ifndef SEC_E_UNSUPPORTED_FUNCTION
-# define SEC_E_UNSUPPORTED_FUNCTION ((HRESULT)0x80090302L)
-#endif
-#ifndef SEC_E_TARGET_UNKNOWN
-# define SEC_E_TARGET_UNKNOWN ((HRESULT)0x80090303L)
-#endif
-#ifndef SEC_E_INTERNAL_ERROR
-# define SEC_E_INTERNAL_ERROR ((HRESULT)0x80090304L)
-#endif
-#ifndef SEC_E_SECPKG_NOT_FOUND
-# define SEC_E_SECPKG_NOT_FOUND ((HRESULT)0x80090305L)
-#endif
-#ifndef SEC_E_NOT_OWNER
-# define SEC_E_NOT_OWNER ((HRESULT)0x80090306L)
-#endif
-#ifndef SEC_E_CANNOT_INSTALL
-# define SEC_E_CANNOT_INSTALL ((HRESULT)0x80090307L)
-#endif
-#ifndef SEC_E_INVALID_TOKEN
-# define SEC_E_INVALID_TOKEN ((HRESULT)0x80090308L)
-#endif
-#ifndef SEC_E_CANNOT_PACK
-# define SEC_E_CANNOT_PACK ((HRESULT)0x80090309L)
-#endif
-#ifndef SEC_E_QOP_NOT_SUPPORTED
-# define SEC_E_QOP_NOT_SUPPORTED ((HRESULT)0x8009030AL)
-#endif
-#ifndef SEC_E_NO_IMPERSONATION
-# define SEC_E_NO_IMPERSONATION ((HRESULT)0x8009030BL)
-#endif
-#ifndef SEC_E_LOGON_DENIED
-# define SEC_E_LOGON_DENIED ((HRESULT)0x8009030CL)
-#endif
-#ifndef SEC_E_UNKNOWN_CREDENTIALS
-# define SEC_E_UNKNOWN_CREDENTIALS ((HRESULT)0x8009030DL)
-#endif
-#ifndef SEC_E_NO_CREDENTIALS
-# define SEC_E_NO_CREDENTIALS ((HRESULT)0x8009030EL)
-#endif
-#ifndef SEC_E_MESSAGE_ALTERED
-# define SEC_E_MESSAGE_ALTERED ((HRESULT)0x8009030FL)
-#endif
-#ifndef SEC_E_OUT_OF_SEQUENCE
-# define SEC_E_OUT_OF_SEQUENCE ((HRESULT)0x80090310L)
-#endif
-#ifndef SEC_E_NO_AUTHENTICATING_AUTHORITY
-# define SEC_E_NO_AUTHENTICATING_AUTHORITY ((HRESULT)0x80090311L)
-#endif
-#ifndef SEC_E_BAD_PKGID
-# define SEC_E_BAD_PKGID ((HRESULT)0x80090316L)
-#endif
-#ifndef SEC_E_CONTEXT_EXPIRED
-# define SEC_E_CONTEXT_EXPIRED ((HRESULT)0x80090317L)
-#endif
-#ifndef SEC_E_INCOMPLETE_MESSAGE
-# define SEC_E_INCOMPLETE_MESSAGE ((HRESULT)0x80090318L)
-#endif
-#ifndef SEC_E_INCOMPLETE_CREDENTIALS
-# define SEC_E_INCOMPLETE_CREDENTIALS ((HRESULT)0x80090320L)
-#endif
-#ifndef SEC_E_BUFFER_TOO_SMALL
-# define SEC_E_BUFFER_TOO_SMALL ((HRESULT)0x80090321L)
-#endif
-#ifndef SEC_E_WRONG_PRINCIPAL
-# define SEC_E_WRONG_PRINCIPAL ((HRESULT)0x80090322L)
-#endif
-#ifndef SEC_E_TIME_SKEW
-# define SEC_E_TIME_SKEW ((HRESULT)0x80090324L)
-#endif
-#ifndef SEC_E_UNTRUSTED_ROOT
-# define SEC_E_UNTRUSTED_ROOT ((HRESULT)0x80090325L)
-#endif
-#ifndef SEC_E_ILLEGAL_MESSAGE
-# define SEC_E_ILLEGAL_MESSAGE ((HRESULT)0x80090326L)
-#endif
-#ifndef SEC_E_CERT_UNKNOWN
-# define SEC_E_CERT_UNKNOWN ((HRESULT)0x80090327L)
-#endif
-#ifndef SEC_E_CERT_EXPIRED
-# define SEC_E_CERT_EXPIRED ((HRESULT)0x80090328L)
-#endif
-#ifndef SEC_E_ENCRYPT_FAILURE
-# define SEC_E_ENCRYPT_FAILURE ((HRESULT)0x80090329L)
-#endif
-#ifndef SEC_E_DECRYPT_FAILURE
-# define SEC_E_DECRYPT_FAILURE ((HRESULT)0x80090330L)
-#endif
-#ifndef SEC_E_ALGORITHM_MISMATCH
-# define SEC_E_ALGORITHM_MISMATCH ((HRESULT)0x80090331L)
-#endif
-#ifndef SEC_E_SECURITY_QOS_FAILED
-# define SEC_E_SECURITY_QOS_FAILED ((HRESULT)0x80090332L)
-#endif
-#ifndef SEC_E_UNFINISHED_CONTEXT_DELETED
-# define SEC_E_UNFINISHED_CONTEXT_DELETED ((HRESULT)0x80090333L)
-#endif
-#ifndef SEC_E_NO_TGT_REPLY
-# define SEC_E_NO_TGT_REPLY ((HRESULT)0x80090334L)
-#endif
-#ifndef SEC_E_NO_IP_ADDRESSES
-# define SEC_E_NO_IP_ADDRESSES ((HRESULT)0x80090335L)
-#endif
-#ifndef SEC_E_WRONG_CREDENTIAL_HANDLE
-# define SEC_E_WRONG_CREDENTIAL_HANDLE ((HRESULT)0x80090336L)
-#endif
-#ifndef SEC_E_CRYPTO_SYSTEM_INVALID
-# define SEC_E_CRYPTO_SYSTEM_INVALID ((HRESULT)0x80090337L)
-#endif
-#ifndef SEC_E_MAX_REFERRALS_EXCEEDED
-# define SEC_E_MAX_REFERRALS_EXCEEDED ((HRESULT)0x80090338L)
-#endif
-#ifndef SEC_E_MUST_BE_KDC
-# define SEC_E_MUST_BE_KDC ((HRESULT)0x80090339L)
-#endif
-#ifndef SEC_E_STRONG_CRYPTO_NOT_SUPPORTED
-# define SEC_E_STRONG_CRYPTO_NOT_SUPPORTED ((HRESULT)0x8009033AL)
-#endif
-#ifndef SEC_E_TOO_MANY_PRINCIPALS
-# define SEC_E_TOO_MANY_PRINCIPALS ((HRESULT)0x8009033BL)
-#endif
-#ifndef SEC_E_NO_PA_DATA
-# define SEC_E_NO_PA_DATA ((HRESULT)0x8009033CL)
-#endif
-#ifndef SEC_E_PKINIT_NAME_MISMATCH
-# define SEC_E_PKINIT_NAME_MISMATCH ((HRESULT)0x8009033DL)
-#endif
-#ifndef SEC_E_SMARTCARD_LOGON_REQUIRED
-# define SEC_E_SMARTCARD_LOGON_REQUIRED ((HRESULT)0x8009033EL)
-#endif
-#ifndef SEC_E_SHUTDOWN_IN_PROGRESS
-# define SEC_E_SHUTDOWN_IN_PROGRESS ((HRESULT)0x8009033FL)
-#endif
-#ifndef SEC_E_KDC_INVALID_REQUEST
-# define SEC_E_KDC_INVALID_REQUEST ((HRESULT)0x80090340L)
-#endif
-#ifndef SEC_E_KDC_UNABLE_TO_REFER
-# define SEC_E_KDC_UNABLE_TO_REFER ((HRESULT)0x80090341L)
-#endif
-#ifndef SEC_E_KDC_UNKNOWN_ETYPE
-# define SEC_E_KDC_UNKNOWN_ETYPE ((HRESULT)0x80090342L)
-#endif
-#ifndef SEC_E_UNSUPPORTED_PREAUTH
-# define SEC_E_UNSUPPORTED_PREAUTH ((HRESULT)0x80090343L)
-#endif
-#ifndef SEC_E_DELEGATION_REQUIRED
-# define SEC_E_DELEGATION_REQUIRED ((HRESULT)0x80090345L)
-#endif
-#ifndef SEC_E_BAD_BINDINGS
-# define SEC_E_BAD_BINDINGS ((HRESULT)0x80090346L)
-#endif
-#ifndef SEC_E_MULTIPLE_ACCOUNTS
-# define SEC_E_MULTIPLE_ACCOUNTS ((HRESULT)0x80090347L)
-#endif
-#ifndef SEC_E_NO_KERB_KEY
-# define SEC_E_NO_KERB_KEY ((HRESULT)0x80090348L)
-#endif
-#ifndef SEC_E_CERT_WRONG_USAGE
-# define SEC_E_CERT_WRONG_USAGE ((HRESULT)0x80090349L)
-#endif
-#ifndef SEC_E_DOWNGRADE_DETECTED
-# define SEC_E_DOWNGRADE_DETECTED ((HRESULT)0x80090350L)
-#endif
-#ifndef SEC_E_SMARTCARD_CERT_REVOKED
-# define SEC_E_SMARTCARD_CERT_REVOKED ((HRESULT)0x80090351L)
-#endif
-#ifndef SEC_E_ISSUING_CA_UNTRUSTED
-# define SEC_E_ISSUING_CA_UNTRUSTED ((HRESULT)0x80090352L)
-#endif
-#ifndef SEC_E_REVOCATION_OFFLINE_C
-# define SEC_E_REVOCATION_OFFLINE_C ((HRESULT)0x80090353L)
-#endif
-#ifndef SEC_E_PKINIT_CLIENT_FAILURE
-# define SEC_E_PKINIT_CLIENT_FAILURE ((HRESULT)0x80090354L)
-#endif
-#ifndef SEC_E_SMARTCARD_CERT_EXPIRED
-# define SEC_E_SMARTCARD_CERT_EXPIRED ((HRESULT)0x80090355L)
-#endif
-#ifndef SEC_E_NO_S4U_PROT_SUPPORT
-# define SEC_E_NO_S4U_PROT_SUPPORT ((HRESULT)0x80090356L)
-#endif
-#ifndef SEC_E_CROSSREALM_DELEGATION_FAILURE
-# define SEC_E_CROSSREALM_DELEGATION_FAILURE ((HRESULT)0x80090357L)
-#endif
-#ifndef SEC_E_REVOCATION_OFFLINE_KDC
-# define SEC_E_REVOCATION_OFFLINE_KDC ((HRESULT)0x80090358L)
-#endif
-#ifndef SEC_E_ISSUING_CA_UNTRUSTED_KDC
-# define SEC_E_ISSUING_CA_UNTRUSTED_KDC ((HRESULT)0x80090359L)
-#endif
-#ifndef SEC_E_KDC_CERT_EXPIRED
-# define SEC_E_KDC_CERT_EXPIRED ((HRESULT)0x8009035AL)
-#endif
-#ifndef SEC_E_KDC_CERT_REVOKED
-# define SEC_E_KDC_CERT_REVOKED ((HRESULT)0x8009035BL)
-#endif
-#ifndef SEC_E_INVALID_PARAMETER
-# define SEC_E_INVALID_PARAMETER ((HRESULT)0x8009035DL)
-#endif
-#ifndef SEC_E_DELEGATION_POLICY
-# define SEC_E_DELEGATION_POLICY ((HRESULT)0x8009035EL)
-#endif
-#ifndef SEC_E_POLICY_NLTM_ONLY
-# define SEC_E_POLICY_NLTM_ONLY ((HRESULT)0x8009035FL)
-#endif
-
-#ifndef SEC_I_CONTINUE_NEEDED
-# define SEC_I_CONTINUE_NEEDED ((HRESULT)0x00090312L)
-#endif
-#ifndef SEC_I_COMPLETE_NEEDED
-# define SEC_I_COMPLETE_NEEDED ((HRESULT)0x00090313L)
-#endif
-#ifndef SEC_I_COMPLETE_AND_CONTINUE
-# define SEC_I_COMPLETE_AND_CONTINUE ((HRESULT)0x00090314L)
-#endif
-#ifndef SEC_I_LOCAL_LOGON
-# define SEC_I_LOCAL_LOGON ((HRESULT)0x00090315L)
-#endif
-#ifndef SEC_I_CONTEXT_EXPIRED
-# define SEC_I_CONTEXT_EXPIRED ((HRESULT)0x00090317L)
-#endif
-#ifndef SEC_I_INCOMPLETE_CREDENTIALS
-# define SEC_I_INCOMPLETE_CREDENTIALS ((HRESULT)0x00090320L)
-#endif
-#ifndef SEC_I_RENEGOTIATE
-# define SEC_I_RENEGOTIATE ((HRESULT)0x00090321L)
-#endif
-#ifndef SEC_I_NO_LSA_CONTEXT
-# define SEC_I_NO_LSA_CONTEXT ((HRESULT)0x00090323L)
-#endif
-#ifndef SEC_I_SIGNATURE_NEEDED
-# define SEC_I_SIGNATURE_NEEDED ((HRESULT)0x0009035CL)
-#endif
-
-#ifdef UNICODE
-# define SECFLAG_WINNT_AUTH_IDENTITY \
- (unsigned long)SEC_WINNT_AUTH_IDENTITY_UNICODE
-#else
-# define SECFLAG_WINNT_AUTH_IDENTITY \
- (unsigned long)SEC_WINNT_AUTH_IDENTITY_ANSI
-#endif
-
-/*
- * Definitions required from ntsecapi.h are directly provided below this point
- * to avoid including ntsecapi.h due to a conflict with OpenSSL's safestack.h
- */
-#define KERB_WRAP_NO_ENCRYPT 0x80000001
-
-#endif /* USE_WINDOWS_SSPI */
-
-#endif /* HEADER_CURL_SSPI_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_threads.c b/external/libcurl_android/jni/libcurl/lib/curl_threads.c
deleted file mode 100755
index d40e024c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_threads.c
+++ /dev/null
@@ -1,135 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_THREADS_POSIX)
-# ifdef HAVE_PTHREAD_H
-# include <pthread.h>
-# endif
-#elif defined(USE_THREADS_WIN32)
-# ifdef HAVE_PROCESS_H
-# include <process.h>
-# endif
-#endif
-
-#include "curl_threads.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#if defined(USE_THREADS_POSIX)
-
-struct curl_actual_call {
- unsigned int (*func)(void *);
- void *arg;
-};
-
-static void *curl_thread_create_thunk(void *arg)
-{
- struct curl_actual_call * ac = arg;
- unsigned int (*func)(void *) = ac->func;
- void *real_arg = ac->arg;
-
- free(ac);
-
- (*func)(real_arg);
-
- return 0;
-}
-
-curl_thread_t Curl_thread_create(unsigned int (*func) (void*), void *arg)
-{
- curl_thread_t t = malloc(sizeof(pthread_t));
- struct curl_actual_call *ac = malloc(sizeof(struct curl_actual_call));
- if(!(ac && t))
- goto err;
-
- ac->func = func;
- ac->arg = arg;
-
- if(pthread_create(t, NULL, curl_thread_create_thunk, ac) != 0)
- goto err;
-
- return t;
-
-err:
- Curl_safefree(t);
- Curl_safefree(ac);
- return curl_thread_t_null;
-}
-
-void Curl_thread_destroy(curl_thread_t hnd)
-{
- if(hnd != curl_thread_t_null) {
- pthread_detach(*hnd);
- free(hnd);
- }
-}
-
-int Curl_thread_join(curl_thread_t *hnd)
-{
- int ret = (pthread_join(**hnd, NULL) == 0);
-
- free(*hnd);
- *hnd = curl_thread_t_null;
-
- return ret;
-}
-
-#elif defined(USE_THREADS_WIN32)
-
-curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void*),
- void *arg)
-{
-#ifdef _WIN32_WCE
- return CreateThread(NULL, 0, func, arg, 0, NULL);
-#else
- curl_thread_t t;
- t = (curl_thread_t)_beginthreadex(NULL, 0, func, arg, 0, NULL);
- if((t == 0) || (t == (curl_thread_t)-1L))
- return curl_thread_t_null;
- return t;
-#endif
-}
-
-void Curl_thread_destroy(curl_thread_t hnd)
-{
- CloseHandle(hnd);
-}
-
-int Curl_thread_join(curl_thread_t *hnd)
-{
- int ret = (WaitForSingleObject(*hnd, INFINITE) == WAIT_OBJECT_0);
-
- Curl_thread_destroy(*hnd);
-
- *hnd = curl_thread_t_null;
-
- return ret;
-}
-
-#endif /* USE_THREADS_* */
diff --git a/external/libcurl_android/jni/libcurl/lib/curl_threads.h b/external/libcurl_android/jni/libcurl/lib/curl_threads.h
deleted file mode 100755
index 6457cbb1..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curl_threads.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef HEADER_CURL_THREADS_H
-#define HEADER_CURL_THREADS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#if defined(USE_THREADS_POSIX)
-# define CURL_STDCALL
-# define curl_mutex_t pthread_mutex_t
-# define curl_thread_t pthread_t *
-# define curl_thread_t_null (pthread_t *)0
-# define Curl_mutex_init(m) pthread_mutex_init(m, NULL)
-# define Curl_mutex_acquire(m) pthread_mutex_lock(m)
-# define Curl_mutex_release(m) pthread_mutex_unlock(m)
-# define Curl_mutex_destroy(m) pthread_mutex_destroy(m)
-#elif defined(USE_THREADS_WIN32)
-# define CURL_STDCALL __stdcall
-# define curl_mutex_t CRITICAL_SECTION
-# define curl_thread_t HANDLE
-# define curl_thread_t_null (HANDLE)0
-# define Curl_mutex_init(m) InitializeCriticalSection(m)
-# define Curl_mutex_acquire(m) EnterCriticalSection(m)
-# define Curl_mutex_release(m) LeaveCriticalSection(m)
-# define Curl_mutex_destroy(m) DeleteCriticalSection(m)
-#endif
-
-#if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
-
-curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void*),
- void *arg);
-
-void Curl_thread_destroy(curl_thread_t hnd);
-
-int Curl_thread_join(curl_thread_t *hnd);
-
-#endif /* USE_THREADS_POSIX || USE_THREADS_WIN32 */
-
-#endif /* HEADER_CURL_THREADS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/curlx.h b/external/libcurl_android/jni/libcurl/lib/curlx.h
deleted file mode 100755
index 9dc90a00..00000000
--- a/external/libcurl_android/jni/libcurl/lib/curlx.h
+++ /dev/null
@@ -1,119 +0,0 @@
-#ifndef HEADER_CURL_CURLX_H
-#define HEADER_CURL_CURLX_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Defines protos and includes all header files that provide the curlx_*
- * functions. The curlx_* functions are not part of the libcurl API, but are
- * stand-alone functions whose sources can be built and linked by apps if need
- * be.
- */
-
-#include <curl/mprintf.h>
-/* this is still a public header file that provides the curl_mprintf()
- functions while they still are offered publicly. They will be made library-
- private one day */
-
-#include "strequal.h"
-/* "strequal.h" provides the strequal protos */
-
-#include "strtoofft.h"
-/* "strtoofft.h" provides this function: curlx_strtoofft(), returns a
- curl_off_t number from a given string.
-*/
-
-#include "timeval.h"
-/*
- "timeval.h" sets up a 'struct timeval' even for platforms that otherwise
- don't have one and has protos for these functions:
-
- curlx_tvnow()
- curlx_tvdiff()
- curlx_tvdiff_secs()
-*/
-
-#include "nonblock.h"
-/* "nonblock.h" provides curlx_nonblock() */
-
-#include "warnless.h"
-/* "warnless.h" provides functions:
-
- curlx_ultous()
- curlx_ultouc()
- curlx_uztosi()
-*/
-
-/* Now setup curlx_ * names for the functions that are to become curlx_ and
- be removed from a future libcurl official API:
- curlx_getenv
- curlx_mprintf (and its variations)
- curlx_strequal
- curlx_strnequal
-
-*/
-
-#define curlx_getenv curl_getenv
-#define curlx_strequal curl_strequal
-#define curlx_strnequal curl_strnequal
-#define curlx_raw_equal Curl_raw_equal
-#define curlx_mvsnprintf curl_mvsnprintf
-#define curlx_msnprintf curl_msnprintf
-#define curlx_maprintf curl_maprintf
-#define curlx_mvaprintf curl_mvaprintf
-#define curlx_msprintf curl_msprintf
-#define curlx_mprintf curl_mprintf
-#define curlx_mfprintf curl_mfprintf
-#define curlx_mvsprintf curl_mvsprintf
-#define curlx_mvprintf curl_mvprintf
-#define curlx_mvfprintf curl_mvfprintf
-
-#ifdef ENABLE_CURLX_PRINTF
-/* If this define is set, we define all "standard" printf() functions to use
- the curlx_* version instead. It makes the source code transparent and
- easier to understand/patch. Undefine them first in case _MPRINTF_REPLACE
- is set. */
-# undef printf
-# undef fprintf
-# undef sprintf
-# undef snprintf
-# undef vprintf
-# undef vfprintf
-# undef vsprintf
-# undef vsnprintf
-# undef aprintf
-# undef vaprintf
-
-# define printf curlx_mprintf
-# define fprintf curlx_mfprintf
-# define sprintf curlx_msprintf
-# define snprintf curlx_msnprintf
-# define vprintf curlx_mvprintf
-# define vfprintf curlx_mvfprintf
-# define vsprintf curlx_mvsprintf
-# define vsnprintf curlx_mvsnprintf
-# define aprintf curlx_maprintf
-# define vaprintf curlx_mvaprintf
-#endif /* ENABLE_CURLX_PRINTF */
-
-#endif /* HEADER_CURL_CURLX_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/dict.c b/external/libcurl_android/jni/libcurl/lib/dict.c
deleted file mode 100755
index 86ddfb9e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/dict.c
+++ /dev/null
@@ -1,283 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_DICT
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "transfer.h"
-#include "sendf.h"
-
-#include "progress.h"
-#include "strequal.h"
-#include "dict.h"
-#include "rawstr.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * Forward declarations.
- */
-
-static CURLcode dict_do(struct connectdata *conn, bool *done);
-
-/*
- * DICT protocol handler.
- */
-
-const struct Curl_handler Curl_handler_dict = {
- "DICT", /* scheme */
- ZERO_NULL, /* setup_connection */
- dict_do, /* do_it */
- ZERO_NULL, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_DICT, /* defport */
- CURLPROTO_DICT, /* protocol */
- PROTOPT_NONE | PROTOPT_NOURLQUERY /* flags */
-};
-
-static char *unescape_word(struct SessionHandle *data, const char *inputbuff)
-{
- char *newp;
- char *dictp;
- char *ptr;
- int len;
- char byte;
- int olen=0;
-
- newp = curl_easy_unescape(data, inputbuff, 0, &len);
- if(!newp)
- return NULL;
-
- dictp = malloc(((size_t)len)*2 + 1); /* add one for terminating zero */
- if(dictp) {
- /* According to RFC2229 section 2.2, these letters need to be escaped with
- \[letter] */
- for(ptr = newp;
- (byte = *ptr) != 0;
- ptr++) {
- if((byte <= 32) || (byte == 127) ||
- (byte == '\'') || (byte == '\"') || (byte == '\\')) {
- dictp[olen++] = '\\';
- }
- dictp[olen++] = byte;
- }
- dictp[olen]=0;
- }
- free(newp);
- return dictp;
-}
-
-static CURLcode dict_do(struct connectdata *conn, bool *done)
-{
- char *word;
- char *eword;
- char *ppath;
- char *database = NULL;
- char *strategy = NULL;
- char *nthdef = NULL; /* This is not part of the protocol, but required
- by RFC 2229 */
- CURLcode result=CURLE_OK;
- struct SessionHandle *data=conn->data;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
-
- char *path = data->state.path;
- curl_off_t *bytecount = &data->req.bytecount;
-
- *done = TRUE; /* unconditionally */
-
- if(conn->bits.user_passwd) {
- /* AUTH is missing */
- }
-
- if(Curl_raw_nequal(path, DICT_MATCH, sizeof(DICT_MATCH)-1) ||
- Curl_raw_nequal(path, DICT_MATCH2, sizeof(DICT_MATCH2)-1) ||
- Curl_raw_nequal(path, DICT_MATCH3, sizeof(DICT_MATCH3)-1)) {
-
- word = strchr(path, ':');
- if(word) {
- word++;
- database = strchr(word, ':');
- if(database) {
- *database++ = (char)0;
- strategy = strchr(database, ':');
- if(strategy) {
- *strategy++ = (char)0;
- nthdef = strchr(strategy, ':');
- if(nthdef) {
- *nthdef = (char)0;
- }
- }
- }
- }
-
- if((word == NULL) || (*word == (char)0)) {
- infof(data, "lookup word is missing\n");
- word=(char *)"default";
- }
- if((database == NULL) || (*database == (char)0)) {
- database = (char *)"!";
- }
- if((strategy == NULL) || (*strategy == (char)0)) {
- strategy = (char *)".";
- }
-
- eword = unescape_word(data, word);
- if(!eword)
- return CURLE_OUT_OF_MEMORY;
-
- result = Curl_sendf(sockfd, conn,
- "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n"
- "MATCH "
- "%s " /* database */
- "%s " /* strategy */
- "%s\r\n" /* word */
- "QUIT\r\n",
-
- database,
- strategy,
- eword
- );
-
- free(eword);
-
- if(result) {
- failf(data, "Failed sending DICT request");
- return result;
- }
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
- -1, NULL); /* no upload */
- }
- else if(Curl_raw_nequal(path, DICT_DEFINE, sizeof(DICT_DEFINE)-1) ||
- Curl_raw_nequal(path, DICT_DEFINE2, sizeof(DICT_DEFINE2)-1) ||
- Curl_raw_nequal(path, DICT_DEFINE3, sizeof(DICT_DEFINE3)-1)) {
-
- word = strchr(path, ':');
- if(word) {
- word++;
- database = strchr(word, ':');
- if(database) {
- *database++ = (char)0;
- nthdef = strchr(database, ':');
- if(nthdef) {
- *nthdef = (char)0;
- }
- }
- }
-
- if((word == NULL) || (*word == (char)0)) {
- infof(data, "lookup word is missing\n");
- word=(char *)"default";
- }
- if((database == NULL) || (*database == (char)0)) {
- database = (char *)"!";
- }
-
- eword = unescape_word(data, word);
- if(!eword)
- return CURLE_OUT_OF_MEMORY;
-
- result = Curl_sendf(sockfd, conn,
- "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n"
- "DEFINE "
- "%s " /* database */
- "%s\r\n" /* word */
- "QUIT\r\n",
- database,
- eword);
-
- free(eword);
-
- if(result) {
- failf(data, "Failed sending DICT request");
- return result;
- }
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
- -1, NULL); /* no upload */
- }
- else {
-
- ppath = strchr(path, '/');
- if(ppath) {
- int i;
-
- ppath++;
- for(i = 0; ppath[i]; i++) {
- if(ppath[i] == ':')
- ppath[i] = ' ';
- }
- result = Curl_sendf(sockfd, conn,
- "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n"
- "%s\r\n"
- "QUIT\r\n", ppath);
- if(result) {
- failf(data, "Failed sending DICT request");
- return result;
- }
-
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount, -1, NULL);
- }
- }
-
- return CURLE_OK;
-}
-#endif /*CURL_DISABLE_DICT*/
diff --git a/external/libcurl_android/jni/libcurl/lib/dict.h b/external/libcurl_android/jni/libcurl/lib/dict.h
deleted file mode 100755
index 44fd9d49..00000000
--- a/external/libcurl_android/jni/libcurl/lib/dict.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef HEADER_CURL_DICT_H
-#define HEADER_CURL_DICT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#ifndef CURL_DISABLE_DICT
-extern const struct Curl_handler Curl_handler_dict;
-#endif
-
-#endif /* HEADER_CURL_DICT_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/dotdot.c b/external/libcurl_android/jni/libcurl/lib/dotdot.c
deleted file mode 100755
index ae169411..00000000
--- a/external/libcurl_android/jni/libcurl/lib/dotdot.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "dotdot.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * "Remove Dot Segments"
- * http://tools.ietf.org/html/rfc3986#section-5.2.4
- */
-
-/*
- * Curl_dedotdotify()
- *
- * This function gets a zero-terminated path with dot and dotdot sequences
- * passed in and strips them off according to the rules in RFC 3986 section
- * 5.2.4.
- *
- * The function handles a query part ('?' + stuff) appended but it expects
- * that fragments ('#' + stuff) have already been cut off.
- *
- * RETURNS
- *
- * an allocated dedotdotified output string
- */
-char *Curl_dedotdotify(const char *input)
-{
- size_t inlen = strlen(input);
- char *clone;
- size_t clen = inlen; /* the length of the cloned input */
- char *out = malloc(inlen+1);
- char *outptr;
- char *orgclone;
- char *queryp;
- if(!out)
- return NULL; /* out of memory */
-
- /* get a cloned copy of the input */
- clone = strdup(input);
- if(!clone) {
- free(out);
- return NULL;
- }
- orgclone = clone;
- outptr = out;
-
- /*
- * To handle query-parts properly, we must find it and remove it during the
- * dotdot-operation and then append it again at the end to the output
- * string.
- */
- queryp = strchr(clone, '?');
- if(queryp)
- *queryp = 0;
-
- do {
-
- /* A. If the input buffer begins with a prefix of "../" or "./", then
- remove that prefix from the input buffer; otherwise, */
-
- if(!strncmp("./", clone, 2)) {
- clone+=2;
- clen-=2;
- }
- else if(!strncmp("../", clone, 3)) {
- clone+=3;
- clen-=3;
- }
-
- /* B. if the input buffer begins with a prefix of "/./" or "/.", where
- "." is a complete path segment, then replace that prefix with "/" in
- the input buffer; otherwise, */
- else if(!strncmp("/./", clone, 3)) {
- clone+=2;
- clen-=2;
- }
- else if(!strcmp("/.", clone)) {
- clone[1]='/';
- clone++;
- clen-=1;
- }
-
- /* C. if the input buffer begins with a prefix of "/../" or "/..", where
- ".." is a complete path segment, then replace that prefix with "/" in
- the input buffer and remove the last segment and its preceding "/" (if
- any) from the output buffer; otherwise, */
-
- else if(!strncmp("/../", clone, 4)) {
- clone+=3;
- clen-=3;
- /* remove the last segment from the output buffer */
- while(outptr > out) {
- outptr--;
- if(*outptr == '/')
- break;
- }
- *outptr = 0; /* zero-terminate where it stops */
- }
- else if(!strcmp("/..", clone)) {
- clone[2]='/';
- clone+=2;
- clen-=2;
- /* remove the last segment from the output buffer */
- while(outptr > out) {
- outptr--;
- if(*outptr == '/')
- break;
- }
- *outptr = 0; /* zero-terminate where it stops */
- }
-
- /* D. if the input buffer consists only of "." or "..", then remove
- that from the input buffer; otherwise, */
-
- else if(!strcmp(".", clone) || !strcmp("..", clone)) {
- *clone=0;
- }
-
- else {
- /* E. move the first path segment in the input buffer to the end of
- the output buffer, including the initial "/" character (if any) and
- any subsequent characters up to, but not including, the next "/"
- character or the end of the input buffer. */
-
- do {
- *outptr++ = *clone++;
- clen--;
- } while(*clone && (*clone != '/'));
- *outptr = 0;
- }
-
- } while(*clone);
-
- if(queryp) {
- size_t qlen;
- /* There was a query part, append that to the output. The 'clone' string
- may now have been altered so we copy from the original input string
- from the correct index. */
- size_t oindex = queryp - orgclone;
- qlen = strlen(&input[oindex]);
- memcpy(outptr, &input[oindex], qlen+1); /* include the ending zero byte */
- }
-
- free(orgclone);
- return out;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/dotdot.h b/external/libcurl_android/jni/libcurl/lib/dotdot.h
deleted file mode 100755
index cd57822b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/dotdot.h
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef HEADER_CURL_DOTDOT_H
-#define HEADER_CURL_DOTDOT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-char *Curl_dedotdotify(const char *input);
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/easy.c b/external/libcurl_android/jni/libcurl/lib/easy.c
deleted file mode 100755
index 160712e8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/easy.c
+++ /dev/null
@@ -1,1182 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-/*
- * See comment in curl_memory.h for the explanation of this sanity check.
- */
-
-#ifdef CURLX_NO_MEMORY_CALLBACKS
-#error "libcurl shall not ever be built with CURLX_NO_MEMORY_CALLBACKS defined"
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#include "strequal.h"
-#include "urldata.h"
-#include <curl/curl.h>
-#include "transfer.h"
-#include "vtls/vtls.h"
-#include "url.h"
-#include "getinfo.h"
-#include "hostip.h"
-#include "share.h"
-#include "strdup.h"
-#include "curl_memory.h"
-#include "progress.h"
-#include "easyif.h"
-#include "select.h"
-#include "sendf.h" /* for failf function prototype */
-#include "curl_ntlm.h"
-#include "connect.h" /* for Curl_getconnectinfo */
-#include "slist.h"
-#include "amigaos.h"
-#include "non-ascii.h"
-#include "warnless.h"
-#include "conncache.h"
-#include "multiif.h"
-#include "sigpipe.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* win32_cleanup() is for win32 socket cleanup functionality, the opposite
- of win32_init() */
-static void win32_cleanup(void)
-{
-#ifdef USE_WINSOCK
- WSACleanup();
-#endif
-#ifdef USE_WINDOWS_SSPI
- Curl_sspi_global_cleanup();
-#endif
-}
-
-/* win32_init() performs win32 socket initialization to properly setup the
- stack to allow networking */
-static CURLcode win32_init(void)
-{
-#ifdef USE_WINSOCK
- WORD wVersionRequested;
- WSADATA wsaData;
- int res;
-
-#if defined(ENABLE_IPV6) && (USE_WINSOCK < 2)
- Error IPV6_requires_winsock2
-#endif
-
- wVersionRequested = MAKEWORD(USE_WINSOCK, USE_WINSOCK);
-
- res = WSAStartup(wVersionRequested, &wsaData);
-
- if(res != 0)
- /* Tell the user that we couldn't find a useable */
- /* winsock.dll. */
- return CURLE_FAILED_INIT;
-
- /* Confirm that the Windows Sockets DLL supports what we need.*/
- /* Note that if the DLL supports versions greater */
- /* than wVersionRequested, it will still return */
- /* wVersionRequested in wVersion. wHighVersion contains the */
- /* highest supported version. */
-
- if(LOBYTE( wsaData.wVersion ) != LOBYTE(wVersionRequested) ||
- HIBYTE( wsaData.wVersion ) != HIBYTE(wVersionRequested) ) {
- /* Tell the user that we couldn't find a useable */
-
- /* winsock.dll. */
- WSACleanup();
- return CURLE_FAILED_INIT;
- }
- /* The Windows Sockets DLL is acceptable. Proceed. */
-#elif defined(USE_LWIPSOCK)
- lwip_init();
-#endif
-
-#ifdef USE_WINDOWS_SSPI
- {
- CURLcode err = Curl_sspi_global_init();
- if(err != CURLE_OK)
- return err;
- }
-#endif
-
- return CURLE_OK;
-}
-
-#ifdef USE_LIBIDN
-/*
- * Initialise use of IDNA library.
- * It falls back to ASCII if $CHARSET isn't defined. This doesn't work for
- * idna_to_ascii_lz().
- */
-static void idna_init (void)
-{
-#ifdef WIN32
- char buf[60];
- UINT cp = GetACP();
-
- if(!getenv("CHARSET") && cp > 0) {
- snprintf(buf, sizeof(buf), "CHARSET=cp%u", cp);
- putenv(buf);
- }
-#else
- /* to do? */
-#endif
-}
-#endif /* USE_LIBIDN */
-
-/* true globals -- for curl_global_init() and curl_global_cleanup() */
-static unsigned int initialized;
-static long init_flags;
-
-/*
- * strdup (and other memory functions) is redefined in complicated
- * ways, but at this point it must be defined as the system-supplied strdup
- * so the callback pointer is initialized correctly.
- */
-#if defined(_WIN32_WCE)
-#define system_strdup _strdup
-#elif !defined(HAVE_STRDUP)
-#define system_strdup curlx_strdup
-#else
-#define system_strdup strdup
-#endif
-
-#if defined(_MSC_VER) && defined(_DLL) && !defined(__POCC__)
-# pragma warning(disable:4232) /* MSVC extension, dllimport identity */
-#endif
-
-#ifndef __SYMBIAN32__
-/*
- * If a memory-using function (like curl_getenv) is used before
- * curl_global_init() is called, we need to have these pointers set already.
- */
-curl_malloc_callback Curl_cmalloc = (curl_malloc_callback)malloc;
-curl_free_callback Curl_cfree = (curl_free_callback)free;
-curl_realloc_callback Curl_crealloc = (curl_realloc_callback)realloc;
-curl_strdup_callback Curl_cstrdup = (curl_strdup_callback)system_strdup;
-curl_calloc_callback Curl_ccalloc = (curl_calloc_callback)calloc;
-#if defined(WIN32) && defined(UNICODE)
-curl_wcsdup_callback Curl_cwcsdup = (curl_wcsdup_callback)_wcsdup;
-#endif
-#else
-/*
- * Symbian OS doesn't support initialization to code in writeable static data.
- * Initialization will occur in the curl_global_init() call.
- */
-curl_malloc_callback Curl_cmalloc;
-curl_free_callback Curl_cfree;
-curl_realloc_callback Curl_crealloc;
-curl_strdup_callback Curl_cstrdup;
-curl_calloc_callback Curl_ccalloc;
-#endif
-
-#if defined(_MSC_VER) && defined(_DLL) && !defined(__POCC__)
-# pragma warning(default:4232) /* MSVC extension, dllimport identity */
-#endif
-
-/**
- * curl_global_init() globally initializes cURL given a bitwise set of the
- * different features of what to initialize.
- */
-CURLcode curl_global_init(long flags)
-{
- if(initialized++)
- return CURLE_OK;
-
- /* Setup the default memory functions here (again) */
- Curl_cmalloc = (curl_malloc_callback)malloc;
- Curl_cfree = (curl_free_callback)free;
- Curl_crealloc = (curl_realloc_callback)realloc;
- Curl_cstrdup = (curl_strdup_callback)system_strdup;
- Curl_ccalloc = (curl_calloc_callback)calloc;
-#if defined(WIN32) && defined(UNICODE)
- Curl_cwcsdup = (curl_wcsdup_callback)_wcsdup;
-#endif
-
- if(flags & CURL_GLOBAL_SSL)
- if(!Curl_ssl_init()) {
- DEBUGF(fprintf(stderr, "Error: Curl_ssl_init failed\n"));
- return CURLE_FAILED_INIT;
- }
-
- if(flags & CURL_GLOBAL_WIN32)
- if(win32_init() != CURLE_OK) {
- DEBUGF(fprintf(stderr, "Error: win32_init failed\n"));
- return CURLE_FAILED_INIT;
- }
-
-#ifdef __AMIGA__
- if(!Curl_amiga_init()) {
- DEBUGF(fprintf(stderr, "Error: Curl_amiga_init failed\n"));
- return CURLE_FAILED_INIT;
- }
-#endif
-
-#ifdef NETWARE
- if(netware_init()) {
- DEBUGF(fprintf(stderr, "Warning: LONG namespace not available\n"));
- }
-#endif
-
-#ifdef USE_LIBIDN
- idna_init();
-#endif
-
- if(Curl_resolver_global_init() != CURLE_OK) {
- DEBUGF(fprintf(stderr, "Error: resolver_global_init failed\n"));
- return CURLE_FAILED_INIT;
- }
-
-#if defined(USE_LIBSSH2) && defined(HAVE_LIBSSH2_INIT)
- if(libssh2_init(0)) {
- DEBUGF(fprintf(stderr, "Error: libssh2_init failed\n"));
- return CURLE_FAILED_INIT;
- }
-#endif
-
- if(flags & CURL_GLOBAL_ACK_EINTR)
- Curl_ack_eintr = 1;
-
- init_flags = flags;
-
- return CURLE_OK;
-}
-
-/*
- * curl_global_init_mem() globally initializes cURL and also registers the
- * user provided callback routines.
- */
-CURLcode curl_global_init_mem(long flags, curl_malloc_callback m,
- curl_free_callback f, curl_realloc_callback r,
- curl_strdup_callback s, curl_calloc_callback c)
-{
- CURLcode code = CURLE_OK;
-
- /* Invalid input, return immediately */
- if(!m || !f || !r || !s || !c)
- return CURLE_FAILED_INIT;
-
- if(initialized) {
- /* Already initialized, don't do it again, but bump the variable anyway to
- work like curl_global_init() and require the same amount of cleanup
- calls. */
- initialized++;
- return CURLE_OK;
- }
-
- /* Call the actual init function first */
- code = curl_global_init(flags);
- if(code == CURLE_OK) {
- Curl_cmalloc = m;
- Curl_cfree = f;
- Curl_cstrdup = s;
- Curl_crealloc = r;
- Curl_ccalloc = c;
- }
-
- return code;
-}
-
-/**
- * curl_global_cleanup() globally cleanups cURL, uses the value of
- * "init_flags" to determine what needs to be cleaned up and what doesn't.
- */
-void curl_global_cleanup(void)
-{
- if(!initialized)
- return;
-
- if(--initialized)
- return;
-
- Curl_global_host_cache_dtor();
-
- if(init_flags & CURL_GLOBAL_SSL)
- Curl_ssl_cleanup();
-
- Curl_resolver_global_cleanup();
-
- if(init_flags & CURL_GLOBAL_WIN32)
- win32_cleanup();
-
- Curl_amiga_cleanup();
-
-#if defined(USE_LIBSSH2) && defined(HAVE_LIBSSH2_EXIT)
- (void)libssh2_exit();
-#endif
-
- init_flags = 0;
-}
-
-/*
- * curl_easy_init() is the external interface to alloc, setup and init an
- * easy handle that is returned. If anything goes wrong, NULL is returned.
- */
-CURL *curl_easy_init(void)
-{
- CURLcode res;
- struct SessionHandle *data;
-
- /* Make sure we inited the global SSL stuff */
- if(!initialized) {
- res = curl_global_init(CURL_GLOBAL_DEFAULT);
- if(res) {
- /* something in the global init failed, return nothing */
- DEBUGF(fprintf(stderr, "Error: curl_global_init failed\n"));
- return NULL;
- }
- }
-
- /* We use curl_open() with undefined URL so far */
- res = Curl_open(&data);
- if(res != CURLE_OK) {
- DEBUGF(fprintf(stderr, "Error: Curl_open failed\n"));
- return NULL;
- }
-
- return data;
-}
-
-/*
- * curl_easy_setopt() is the external interface for setting options on an
- * easy handle.
- */
-
-#undef curl_easy_setopt
-CURLcode curl_easy_setopt(CURL *curl, CURLoption tag, ...)
-{
- va_list arg;
- struct SessionHandle *data = curl;
- CURLcode ret;
-
- if(!curl)
- return CURLE_BAD_FUNCTION_ARGUMENT;
-
- va_start(arg, tag);
-
- ret = Curl_setopt(data, tag, arg);
-
- va_end(arg);
- return ret;
-}
-
-#ifdef CURLDEBUG
-
-struct socketmonitor {
- struct socketmonitor *next; /* the next node in the list or NULL */
- struct pollfd socket; /* socket info of what to monitor */
-};
-
-struct events {
- long ms; /* timeout, run the timeout function when reached */
- bool msbump; /* set TRUE when timeout is set by callback */
- int num_sockets; /* number of nodes in the monitor list */
- struct socketmonitor *list; /* list of sockets to monitor */
- int running_handles; /* store the returned number */
-};
-
-/* events_timer
- *
- * Callback that gets called with a new value when the timeout should be
- * updated.
- */
-
-static int events_timer(CURLM *multi, /* multi handle */
- long timeout_ms, /* see above */
- void *userp) /* private callback pointer */
-{
- struct events *ev = userp;
- (void)multi;
- if(timeout_ms == -1)
- /* timeout removed */
- timeout_ms = 0;
- else if(timeout_ms == 0)
- /* timeout is already reached! */
- timeout_ms = 1; /* trigger asap */
-
- ev->ms = timeout_ms;
- ev->msbump = TRUE;
- return 0;
-}
-
-
-/* poll2cselect
- *
- * convert from poll() bit definitions to libcurl's CURL_CSELECT_* ones
- */
-static int poll2cselect(int pollmask)
-{
- int omask=0;
- if(pollmask & POLLIN)
- omask |= CURL_CSELECT_IN;
- if(pollmask & POLLOUT)
- omask |= CURL_CSELECT_OUT;
- if(pollmask & POLLERR)
- omask |= CURL_CSELECT_ERR;
- return omask;
-}
-
-
-/* socketcb2poll
- *
- * convert from libcurl' CURL_POLL_* bit definitions to poll()'s
- */
-static short socketcb2poll(int pollmask)
-{
- short omask=0;
- if(pollmask & CURL_POLL_IN)
- omask |= POLLIN;
- if(pollmask & CURL_POLL_OUT)
- omask |= POLLOUT;
- return omask;
-}
-
-/* events_socket
- *
- * Callback that gets called with information about socket activity to
- * monitor.
- */
-static int events_socket(CURL *easy, /* easy handle */
- curl_socket_t s, /* socket */
- int what, /* see above */
- void *userp, /* private callback
- pointer */
- void *socketp) /* private socket
- pointer */
-{
- struct events *ev = userp;
- struct socketmonitor *m;
- struct socketmonitor *prev=NULL;
- (void)socketp;
-
- m = ev->list;
- while(m) {
- if(m->socket.fd == s) {
-
- if(what == CURL_POLL_REMOVE) {
- struct socketmonitor *nxt = m->next;
- /* remove this node from the list of monitored sockets */
- if(prev)
- prev->next = nxt;
- else
- ev->list = nxt;
- free(m);
- m = nxt;
- infof(easy, "socket cb: socket %d REMOVED\n", s);
- }
- else {
- /* The socket 's' is already being monitored, update the activity
- mask. Convert from libcurl bitmask to the poll one. */
- m->socket.events = socketcb2poll(what);
- infof(easy, "socket cb: socket %d UPDATED as %s%s\n", s,
- what&CURL_POLL_IN?"IN":"",
- what&CURL_POLL_OUT?"OUT":"");
- }
- break;
- }
- prev = m;
- m = m->next; /* move to next node */
- }
- if(!m) {
- if(what == CURL_POLL_REMOVE) {
- /* this happens a bit too often, libcurl fix perhaps? */
- /* fprintf(stderr,
- "%s: socket %d asked to be REMOVED but not present!\n",
- __func__, s); */
- }
- else {
- m = malloc(sizeof(struct socketmonitor));
- m->next = ev->list;
- m->socket.fd = s;
- m->socket.events = socketcb2poll(what);
- m->socket.revents = 0;
- ev->list = m;
- infof(easy, "socket cb: socket %d ADDED as %s%s\n", s,
- what&CURL_POLL_IN?"IN":"",
- what&CURL_POLL_OUT?"OUT":"");
- }
- }
-
- return 0;
-}
-
-
-/*
- * events_setup()
- *
- * Do the multi handle setups that only event-based transfers need.
- */
-static void events_setup(CURLM *multi, struct events *ev)
-{
- /* timer callback */
- curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, events_timer);
- curl_multi_setopt(multi, CURLMOPT_TIMERDATA, ev);
-
- /* socket callback */
- curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, events_socket);
- curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, ev);
-}
-
-
-/* wait_or_timeout()
- *
- * waits for activity on any of the given sockets, or the timeout to trigger.
- */
-
-static CURLcode wait_or_timeout(struct Curl_multi *multi, struct events *ev)
-{
- bool done = FALSE;
- CURLMcode mcode;
- CURLcode rc = CURLE_OK;
-
- while(!done) {
- CURLMsg *msg;
- struct socketmonitor *m;
- struct pollfd *f;
- struct pollfd fds[4];
- int numfds=0;
- int pollrc;
- int i;
- struct timeval before;
- struct timeval after;
-
- /* populate the fds[] array */
- for(m = ev->list, f=&fds[0]; m; m = m->next) {
- f->fd = m->socket.fd;
- f->events = m->socket.events;
- f->revents = 0;
- /* fprintf(stderr, "poll() %d check socket %d\n", numfds, f->fd); */
- f++;
- numfds++;
- }
-
- /* get the time stamp to use to figure out how long poll takes */
- before = curlx_tvnow();
-
- /* wait for activity or timeout */
- pollrc = Curl_poll(fds, numfds, (int)ev->ms);
-
- after = curlx_tvnow();
-
- ev->msbump = FALSE; /* reset here */
-
- if(0 == pollrc) {
- /* timeout! */
- ev->ms = 0;
- /* fprintf(stderr, "call curl_multi_socket_action( TIMEOUT )\n"); */
- mcode = curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0,
- &ev->running_handles);
- }
- else if(pollrc > 0) {
- /* loop over the monitored sockets to see which ones had activity */
- for(i = 0; i< numfds; i++) {
- if(fds[i].revents) {
- /* socket activity, tell libcurl */
- int act = poll2cselect(fds[i].revents); /* convert */
- infof(multi->easyp, "call curl_multi_socket_action( socket %d )\n",
- fds[i].fd);
- mcode = curl_multi_socket_action(multi, fds[i].fd, act,
- &ev->running_handles);
- }
- }
-
- if(!ev->msbump)
- /* If nothing updated the timeout, we decrease it by the spent time.
- * If it was updated, it has the new timeout time stored already.
- */
- ev->ms += curlx_tvdiff(after, before);
-
- }
- if(mcode)
- return CURLE_URL_MALFORMAT; /* TODO: return a proper error! */
-
- /* we don't really care about the "msgs_in_queue" value returned in the
- second argument */
- msg = curl_multi_info_read(multi, &pollrc);
- if(msg) {
- rc = msg->data.result;
- done = TRUE;
- }
- }
-
- return rc;
-}
-
-
-/* easy_events()
- *
- * Runs a transfer in a blocking manner using the events-based API
- */
-static CURLcode easy_events(CURLM *multi)
-{
- struct events evs= {2, FALSE, 0, NULL, 0};
-
- /* if running event-based, do some further multi inits */
- events_setup(multi, &evs);
-
- return wait_or_timeout(multi, &evs);
-}
-#else /* CURLDEBUG */
-/* when not built with debug, this function doesn't exist */
-#define easy_events(x) CURLE_NOT_BUILT_IN
-#endif
-
-static CURLcode easy_transfer(CURLM *multi)
-{
- bool done = FALSE;
- CURLMcode mcode = CURLM_OK;
- CURLcode code = CURLE_OK;
- struct timeval before;
- int without_fds = 0; /* count number of consecutive returns from
- curl_multi_wait() without any filedescriptors */
-
- while(!done && !mcode) {
- int still_running = 0;
- int ret;
-
- before = curlx_tvnow();
- mcode = curl_multi_wait(multi, NULL, 0, 1000, &ret);
-
- if(mcode == CURLM_OK) {
- if(ret == -1) {
- /* poll() failed not on EINTR, indicate a network problem */
- code = CURLE_RECV_ERROR;
- break;
- }
- else if(ret == 0) {
- struct timeval after = curlx_tvnow();
- /* If it returns without any filedescriptor instantly, we need to
- avoid busy-looping during periods where it has nothing particular
- to wait for */
- if(curlx_tvdiff(after, before) <= 10) {
- without_fds++;
- if(without_fds > 2) {
- int sleep_ms = without_fds < 10 ? (1 << (without_fds-1)): 1000;
- Curl_wait_ms(sleep_ms);
- }
- }
- else
- /* it wasn't "instant", restart counter */
- without_fds = 0;
- }
- else
- /* got file descriptor, restart counter */
- without_fds = 0;
-
- mcode = curl_multi_perform(multi, &still_running);
- }
-
- /* only read 'still_running' if curl_multi_perform() return OK */
- if((mcode == CURLM_OK) && !still_running) {
- int rc;
- CURLMsg *msg = curl_multi_info_read(multi, &rc);
- if(msg) {
- code = msg->data.result;
- done = TRUE;
- }
- }
- }
-
- /* Make sure to return some kind of error if there was a multi problem */
- if(mcode) {
- return (mcode == CURLM_OUT_OF_MEMORY) ? CURLE_OUT_OF_MEMORY :
- /* The other multi errors should never happen, so return
- something suitably generic */
- CURLE_BAD_FUNCTION_ARGUMENT;
- }
-
- return code;
-}
-
-
-/*
- * easy_perform() is the external interface that performs a blocking
- * transfer as previously setup.
- *
- * CONCEPT: This function creates a multi handle, adds the easy handle to it,
- * runs curl_multi_perform() until the transfer is done, then detaches the
- * easy handle, destroys the multi handle and returns the easy handle's return
- * code.
- *
- * REALITY: it can't just create and destroy the multi handle that easily. It
- * needs to keep it around since if this easy handle is used again by this
- * function, the same multi handle must be re-used so that the same pools and
- * caches can be used.
- *
- * DEBUG: if 'events' is set TRUE, this function will use a replacement engine
- * instead of curl_multi_perform() and use curl_multi_socket_action().
- */
-static CURLcode easy_perform(struct SessionHandle *data, bool events)
-{
- CURLM *multi;
- CURLMcode mcode;
- CURLcode code = CURLE_OK;
- SIGPIPE_VARIABLE(pipe_st);
-
- if(!data)
- return CURLE_BAD_FUNCTION_ARGUMENT;
-
- if(data->multi) {
- failf(data, "easy handle already used in multi handle");
- return CURLE_FAILED_INIT;
- }
-
- if(data->multi_easy)
- multi = data->multi_easy;
- else {
- /* this multi handle will only ever have a single easy handled attached
- to it, so make it use minimal hashes */
- multi = Curl_multi_handle(1, 3);
- if(!multi)
- return CURLE_OUT_OF_MEMORY;
- data->multi_easy = multi;
- }
-
- /* Copy the MAXCONNECTS option to the multi handle */
- curl_multi_setopt(multi, CURLMOPT_MAXCONNECTS, data->set.maxconnects);
-
- mcode = curl_multi_add_handle(multi, data);
- if(mcode) {
- curl_multi_cleanup(multi);
- if(mcode == CURLM_OUT_OF_MEMORY)
- return CURLE_OUT_OF_MEMORY;
- else
- return CURLE_FAILED_INIT;
- }
-
- sigpipe_ignore(data, &pipe_st);
-
- /* assign this after curl_multi_add_handle() since that function checks for
- it and rejects this handle otherwise */
- data->multi = multi;
-
- /* run the transfer */
- code = events ? easy_events(multi) : easy_transfer(multi);
-
- /* ignoring the return code isn't nice, but atm we can't really handle
- a failure here, room for future improvement! */
- (void)curl_multi_remove_handle(multi, data);
-
- sigpipe_restore(&pipe_st);
-
- /* The multi handle is kept alive, owned by the easy handle */
- return code;
-}
-
-
-/*
- * curl_easy_perform() is the external interface that performs a blocking
- * transfer as previously setup.
- */
-CURLcode curl_easy_perform(CURL *easy)
-{
- return easy_perform(easy, FALSE);
-}
-
-#ifdef CURLDEBUG
-/*
- * curl_easy_perform_ev() is the external interface that performs a blocking
- * transfer using the event-based API internally.
- */
-CURLcode curl_easy_perform_ev(CURL *easy)
-{
- return easy_perform(easy, TRUE);
-}
-
-#endif
-
-/*
- * curl_easy_cleanup() is the external interface to cleaning/freeing the given
- * easy handle.
- */
-void curl_easy_cleanup(CURL *curl)
-{
- struct SessionHandle *data = (struct SessionHandle *)curl;
- SIGPIPE_VARIABLE(pipe_st);
-
- if(!data)
- return;
-
- sigpipe_ignore(data, &pipe_st);
- Curl_close(data);
- sigpipe_restore(&pipe_st);
-}
-
-/*
- * curl_easy_getinfo() is an external interface that allows an app to retrieve
- * information from a performed transfer and similar.
- */
-#undef curl_easy_getinfo
-CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...)
-{
- va_list arg;
- void *paramp;
- CURLcode ret;
- struct SessionHandle *data = (struct SessionHandle *)curl;
-
- va_start(arg, info);
- paramp = va_arg(arg, void *);
-
- ret = Curl_getinfo(data, info, paramp);
-
- va_end(arg);
- return ret;
-}
-
-/*
- * curl_easy_duphandle() is an external interface to allow duplication of a
- * given input easy handle. The returned handle will be a new working handle
- * with all options set exactly as the input source handle.
- */
-CURL *curl_easy_duphandle(CURL *incurl)
-{
- struct SessionHandle *data=(struct SessionHandle *)incurl;
-
- struct SessionHandle *outcurl = calloc(1, sizeof(struct SessionHandle));
- if(NULL == outcurl)
- goto fail;
-
- /*
- * We setup a few buffers we need. We should probably make them
- * get setup on-demand in the code, as that would probably decrease
- * the likeliness of us forgetting to init a buffer here in the future.
- */
- outcurl->state.headerbuff = malloc(HEADERSIZE);
- if(!outcurl->state.headerbuff)
- goto fail;
- outcurl->state.headersize = HEADERSIZE;
-
- /* copy all userdefined values */
- if(Curl_dupset(outcurl, data) != CURLE_OK)
- goto fail;
-
- /* the connection cache is setup on demand */
- outcurl->state.conn_cache = NULL;
-
- outcurl->state.lastconnect = NULL;
-
- outcurl->progress.flags = data->progress.flags;
- outcurl->progress.callback = data->progress.callback;
-
- if(data->cookies) {
- /* If cookies are enabled in the parent handle, we enable them
- in the clone as well! */
- outcurl->cookies = Curl_cookie_init(data,
- data->cookies->filename,
- outcurl->cookies,
- data->set.cookiesession);
- if(!outcurl->cookies)
- goto fail;
- }
-
- /* duplicate all values in 'change' */
- if(data->change.cookielist) {
- outcurl->change.cookielist =
- Curl_slist_duplicate(data->change.cookielist);
- if(!outcurl->change.cookielist)
- goto fail;
- }
-
- if(data->change.url) {
- outcurl->change.url = strdup(data->change.url);
- if(!outcurl->change.url)
- goto fail;
- outcurl->change.url_alloc = TRUE;
- }
-
- if(data->change.referer) {
- outcurl->change.referer = strdup(data->change.referer);
- if(!outcurl->change.referer)
- goto fail;
- outcurl->change.referer_alloc = TRUE;
- }
-
- /* Clone the resolver handle, if present, for the new handle */
- if(Curl_resolver_duphandle(&outcurl->state.resolver,
- data->state.resolver) != CURLE_OK)
- goto fail;
-
- Curl_convert_setup(outcurl);
-
- outcurl->magic = CURLEASY_MAGIC_NUMBER;
-
- /* we reach this point and thus we are OK */
-
- return outcurl;
-
- fail:
-
- if(outcurl) {
- curl_slist_free_all(outcurl->change.cookielist);
- outcurl->change.cookielist = NULL;
- Curl_safefree(outcurl->state.headerbuff);
- Curl_safefree(outcurl->change.url);
- Curl_safefree(outcurl->change.referer);
- Curl_freeset(outcurl);
- free(outcurl);
- }
-
- return NULL;
-}
-
-/*
- * curl_easy_reset() is an external interface that allows an app to re-
- * initialize a session handle to the default values.
- */
-void curl_easy_reset(CURL *curl)
-{
- struct SessionHandle *data = (struct SessionHandle *)curl;
-
- Curl_safefree(data->state.pathbuffer);
-
- data->state.path = NULL;
-
- Curl_free_request_state(data);
-
- /* zero out UserDefined data: */
- Curl_freeset(data);
- memset(&data->set, 0, sizeof(struct UserDefined));
- (void)Curl_init_userdefined(&data->set);
-
- /* zero out Progress data: */
- memset(&data->progress, 0, sizeof(struct Progress));
-
- data->progress.flags |= PGRS_HIDE;
- data->state.current_speed = -1; /* init to negative == impossible */
-}
-
-/*
- * curl_easy_pause() allows an application to pause or unpause a specific
- * transfer and direction. This function sets the full new state for the
- * current connection this easy handle operates on.
- *
- * NOTE: if you have the receiving paused and you call this function to remove
- * the pausing, you may get your write callback called at this point.
- *
- * Action is a bitmask consisting of CURLPAUSE_* bits in curl/curl.h
- */
-CURLcode curl_easy_pause(CURL *curl, int action)
-{
- struct SessionHandle *data = (struct SessionHandle *)curl;
- struct SingleRequest *k = &data->req;
- CURLcode result = CURLE_OK;
-
- /* first switch off both pause bits */
- int newstate = k->keepon &~ (KEEP_RECV_PAUSE| KEEP_SEND_PAUSE);
-
- /* set the new desired pause bits */
- newstate |= ((action & CURLPAUSE_RECV)?KEEP_RECV_PAUSE:0) |
- ((action & CURLPAUSE_SEND)?KEEP_SEND_PAUSE:0);
-
- /* put it back in the keepon */
- k->keepon = newstate;
-
- if(!(newstate & KEEP_RECV_PAUSE) && data->state.tempwrite) {
- /* we have a buffer for sending that we now seem to be able to deliver
- since the receive pausing is lifted! */
-
- /* get the pointer, type and length in local copies since the function may
- return PAUSE again and then we'll get a new copy allocted and stored in
- the tempwrite variables */
- char *tempwrite = data->state.tempwrite;
- char *freewrite = tempwrite; /* store this pointer to free it later */
- size_t tempsize = data->state.tempwritesize;
- int temptype = data->state.tempwritetype;
- size_t chunklen;
-
- /* clear tempwrite here just to make sure it gets cleared if there's no
- further use of it, and make sure we don't clear it after the function
- invoke as it may have been set to a new value by then */
- data->state.tempwrite = NULL;
-
- /* since the write callback API is define to never exceed
- CURL_MAX_WRITE_SIZE bytes in a single call, and since we may in fact
- have more data than that in our buffer here, we must loop sending the
- data in multiple calls until there's no data left or we get another
- pause returned.
-
- A tricky part is that the function we call will "buffer" the data
- itself when it pauses on a particular buffer, so we may need to do some
- extra trickery if we get a pause return here.
- */
- do {
- chunklen = (tempsize > CURL_MAX_WRITE_SIZE)?CURL_MAX_WRITE_SIZE:tempsize;
-
- result = Curl_client_write(data->easy_conn,
- temptype, tempwrite, chunklen);
- if(result)
- /* failures abort the loop at once */
- break;
-
- if(data->state.tempwrite && (tempsize - chunklen)) {
- /* Ouch, the reading is again paused and the block we send is now
- "cached". If this is the final chunk we can leave it like this, but
- if we have more chunks that are cached after this, we need to free
- the newly cached one and put back a version that is truly the entire
- contents that is saved for later
- */
- char *newptr;
-
- /* note that tempsize is still the size as before the callback was
- used, and thus the whole piece of data to keep */
- newptr = realloc(data->state.tempwrite, tempsize);
-
- if(!newptr) {
- free(data->state.tempwrite); /* free old area */
- data->state.tempwrite = NULL;
- result = CURLE_OUT_OF_MEMORY;
- /* tempwrite will be freed further down */
- break;
- }
- data->state.tempwrite = newptr; /* store new pointer */
- memcpy(newptr, tempwrite, tempsize);
- data->state.tempwritesize = tempsize; /* store new size */
- /* tempwrite will be freed further down */
- break; /* go back to pausing until further notice */
- }
- else {
- tempsize -= chunklen; /* left after the call above */
- tempwrite += chunklen; /* advance the pointer */
- }
-
- } while((result == CURLE_OK) && tempsize);
-
- free(freewrite); /* this is unconditionally no longer used */
- }
-
- /* if there's no error and we're not pausing both directions, we want
- to have this handle checked soon */
- if(!result &&
- ((newstate&(KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) !=
- (KEEP_RECV_PAUSE|KEEP_SEND_PAUSE)) )
- Curl_expire(data, 1); /* get this handle going again */
-
- return result;
-}
-
-
-static CURLcode easy_connection(struct SessionHandle *data,
- curl_socket_t *sfd,
- struct connectdata **connp)
-{
- if(data == NULL)
- return CURLE_BAD_FUNCTION_ARGUMENT;
-
- /* only allow these to be called on handles with CURLOPT_CONNECT_ONLY */
- if(!data->set.connect_only) {
- failf(data, "CONNECT_ONLY is required!");
- return CURLE_UNSUPPORTED_PROTOCOL;
- }
-
- *sfd = Curl_getconnectinfo(data, connp);
-
- if(*sfd == CURL_SOCKET_BAD) {
- failf(data, "Failed to get recent socket");
- return CURLE_UNSUPPORTED_PROTOCOL;
- }
-
- return CURLE_OK;
-}
-
-/*
- * Receives data from the connected socket. Use after successful
- * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
- * Returns CURLE_OK on success, error code on error.
- */
-CURLcode curl_easy_recv(CURL *curl, void *buffer, size_t buflen, size_t *n)
-{
- curl_socket_t sfd;
- CURLcode ret;
- ssize_t n1;
- struct connectdata *c;
- struct SessionHandle *data = (struct SessionHandle *)curl;
-
- ret = easy_connection(data, &sfd, &c);
- if(ret)
- return ret;
-
- *n = 0;
- ret = Curl_read(c, sfd, buffer, buflen, &n1);
-
- if(ret != CURLE_OK)
- return ret;
-
- *n = (size_t)n1;
-
- return CURLE_OK;
-}
-
-/*
- * Sends data over the connected socket. Use after successful
- * curl_easy_perform() with CURLOPT_CONNECT_ONLY option.
- */
-CURLcode curl_easy_send(CURL *curl, const void *buffer, size_t buflen,
- size_t *n)
-{
- curl_socket_t sfd;
- CURLcode ret;
- ssize_t n1;
- struct connectdata *c = NULL;
- struct SessionHandle *data = (struct SessionHandle *)curl;
-
- ret = easy_connection(data, &sfd, &c);
- if(ret)
- return ret;
-
- *n = 0;
- ret = Curl_write(c, sfd, buffer, buflen, &n1);
-
- if(n1 == -1)
- return CURLE_SEND_ERROR;
-
- /* detect EAGAIN */
- if((CURLE_OK == ret) && (0 == n1))
- return CURLE_AGAIN;
-
- *n = (size_t)n1;
-
- return ret;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/easyif.h b/external/libcurl_android/jni/libcurl/lib/easyif.h
deleted file mode 100755
index 043ff437..00000000
--- a/external/libcurl_android/jni/libcurl/lib/easyif.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_EASYIF_H
-#define HEADER_CURL_EASYIF_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Prototypes for library-wide functions provided by easy.c
- */
-#ifdef CURLDEBUG
-CURL_EXTERN CURLcode curl_easy_perform_ev(CURL *easy);
-#endif
-
-#endif /* HEADER_CURL_EASYIF_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/escape.c b/external/libcurl_android/jni/libcurl/lib/escape.c
deleted file mode 100755
index d7f8a8f5..00000000
--- a/external/libcurl_android/jni/libcurl/lib/escape.c
+++ /dev/null
@@ -1,233 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* Escape and unescape URL encoding in strings. The functions return a new
- * allocated string or NULL if an error occurred. */
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#include "curl_memory.h"
-#include "urldata.h"
-#include "warnless.h"
-#include "non-ascii.h"
-#include "escape.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* Portable character check (remember EBCDIC). Do not use isalnum() because
- its behavior is altered by the current locale.
- See http://tools.ietf.org/html/rfc3986#section-2.3
-*/
-static bool Curl_isunreserved(unsigned char in)
-{
- switch (in) {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case 'a': case 'b': case 'c': case 'd': case 'e':
- case 'f': case 'g': case 'h': case 'i': case 'j':
- case 'k': case 'l': case 'm': case 'n': case 'o':
- case 'p': case 'q': case 'r': case 's': case 't':
- case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
- case 'A': case 'B': case 'C': case 'D': case 'E':
- case 'F': case 'G': case 'H': case 'I': case 'J':
- case 'K': case 'L': case 'M': case 'N': case 'O':
- case 'P': case 'Q': case 'R': case 'S': case 'T':
- case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
- case '-': case '.': case '_': case '~':
- return TRUE;
- default:
- break;
- }
- return FALSE;
-}
-
-/* for ABI-compatibility with previous versions */
-char *curl_escape(const char *string, int inlength)
-{
- return curl_easy_escape(NULL, string, inlength);
-}
-
-/* for ABI-compatibility with previous versions */
-char *curl_unescape(const char *string, int length)
-{
- return curl_easy_unescape(NULL, string, length, NULL);
-}
-
-char *curl_easy_escape(CURL *handle, const char *string, int inlength)
-{
- size_t alloc = (inlength?(size_t)inlength:strlen(string))+1;
- char *ns;
- char *testing_ptr = NULL;
- unsigned char in; /* we need to treat the characters unsigned */
- size_t newlen = alloc;
- size_t strindex=0;
- size_t length;
- CURLcode res;
-
- ns = malloc(alloc);
- if(!ns)
- return NULL;
-
- length = alloc-1;
- while(length--) {
- in = *string;
-
- if(Curl_isunreserved(in))
- /* just copy this */
- ns[strindex++]=in;
- else {
- /* encode it */
- newlen += 2; /* the size grows with two, since this'll become a %XX */
- if(newlen > alloc) {
- alloc *= 2;
- testing_ptr = realloc(ns, alloc);
- if(!testing_ptr) {
- free( ns );
- return NULL;
- }
- else {
- ns = testing_ptr;
- }
- }
-
- res = Curl_convert_to_network(handle, &in, 1);
- if(res) {
- /* Curl_convert_to_network calls failf if unsuccessful */
- free(ns);
- return NULL;
- }
-
- snprintf(&ns[strindex], 4, "%%%02X", in);
-
- strindex+=3;
- }
- string++;
- }
- ns[strindex]=0; /* terminate it */
- return ns;
-}
-
-/*
- * Curl_urldecode() URL decodes the given string.
- *
- * Optionally detects control characters (byte codes lower than 32) in the
- * data and rejects such data.
- *
- * Returns a pointer to a malloced string in *ostring with length given in
- * *olen. If length == 0, the length is assumed to be strlen(string).
- *
- */
-CURLcode Curl_urldecode(struct SessionHandle *data,
- const char *string, size_t length,
- char **ostring, size_t *olen,
- bool reject_ctrl)
-{
- size_t alloc = (length?length:strlen(string))+1;
- char *ns = malloc(alloc);
- unsigned char in;
- size_t strindex=0;
- unsigned long hex;
- CURLcode res;
-
- if(!ns)
- return CURLE_OUT_OF_MEMORY;
-
- while(--alloc > 0) {
- in = *string;
- if(('%' == in) && (alloc > 2) &&
- ISXDIGIT(string[1]) && ISXDIGIT(string[2])) {
- /* this is two hexadecimal digits following a '%' */
- char hexstr[3];
- char *ptr;
- hexstr[0] = string[1];
- hexstr[1] = string[2];
- hexstr[2] = 0;
-
- hex = strtoul(hexstr, &ptr, 16);
-
- in = curlx_ultouc(hex); /* this long is never bigger than 255 anyway */
-
- res = Curl_convert_from_network(data, &in, 1);
- if(res) {
- /* Curl_convert_from_network calls failf if unsuccessful */
- free(ns);
- return res;
- }
-
- string+=2;
- alloc-=2;
- }
- if(reject_ctrl && (in < 0x20)) {
- free(ns);
- return CURLE_URL_MALFORMAT;
- }
-
- ns[strindex++] = in;
- string++;
- }
- ns[strindex]=0; /* terminate it */
-
- if(olen)
- /* store output size */
- *olen = strindex;
-
- /* store output string */
- *ostring = ns;
-
- return CURLE_OK;
-}
-
-/*
- * Unescapes the given URL escaped string of given length. Returns a
- * pointer to a malloced string with length given in *olen.
- * If length == 0, the length is assumed to be strlen(string).
- * If olen == NULL, no output length is stored.
- */
-char *curl_easy_unescape(CURL *handle, const char *string, int length,
- int *olen)
-{
- char *str = NULL;
- size_t inputlen = length;
- size_t outputlen;
- CURLcode res = Curl_urldecode(handle, string, inputlen, &str, &outputlen,
- FALSE);
- if(res)
- return NULL;
- if(olen)
- *olen = curlx_uztosi(outputlen);
- return str;
-}
-
-/* For operating systems/environments that use different malloc/free
- systems for the app and for this library, we provide a free that uses
- the library's memory system */
-void curl_free(void *p)
-{
- if(p)
- free(p);
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/escape.h b/external/libcurl_android/jni/libcurl/lib/escape.h
deleted file mode 100755
index 731b1365..00000000
--- a/external/libcurl_android/jni/libcurl/lib/escape.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_ESCAPE_H
-#define HEADER_CURL_ESCAPE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-/* Escape and unescape URL encoding in strings. The functions return a new
- * allocated string or NULL if an error occurred. */
-
-CURLcode Curl_urldecode(struct SessionHandle *data,
- const char *string, size_t length,
- char **ostring, size_t *olen,
- bool reject_crlf);
-
-#endif /* HEADER_CURL_ESCAPE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/file.c b/external/libcurl_android/jni/libcurl/lib/file.c
deleted file mode 100755
index 73df42e0..00000000
--- a/external/libcurl_android/jni/libcurl/lib/file.c
+++ /dev/null
@@ -1,583 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_FILE
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#include "strtoofft.h"
-#include "urldata.h"
-#include <curl/curl.h>
-#include "progress.h"
-#include "sendf.h"
-#include "escape.h"
-#include "file.h"
-#include "speedcheck.h"
-#include "getinfo.h"
-#include "transfer.h"
-#include "url.h"
-#include "curl_memory.h"
-#include "parsedate.h" /* for the week day and month names */
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#if defined(WIN32) || defined(MSDOS) || defined(__EMX__) || \
- defined(__SYMBIAN32__)
-#define DOS_FILESYSTEM 1
-#endif
-
-#ifdef OPEN_NEEDS_ARG3
-# define open_readonly(p,f) open((p),(f),(0))
-#else
-# define open_readonly(p,f) open((p),(f))
-#endif
-
-/*
- * Forward declarations.
- */
-
-static CURLcode file_do(struct connectdata *, bool *done);
-static CURLcode file_done(struct connectdata *conn,
- CURLcode status, bool premature);
-static CURLcode file_connect(struct connectdata *conn, bool *done);
-static CURLcode file_disconnect(struct connectdata *conn,
- bool dead_connection);
-static CURLcode file_setup_connection(struct connectdata *conn);
-
-/*
- * FILE scheme handler.
- */
-
-const struct Curl_handler Curl_handler_file = {
- "FILE", /* scheme */
- file_setup_connection, /* setup_connection */
- file_do, /* do_it */
- file_done, /* done */
- ZERO_NULL, /* do_more */
- file_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- file_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- 0, /* defport */
- CURLPROTO_FILE, /* protocol */
- PROTOPT_NONETWORK | PROTOPT_NOURLQUERY /* flags */
-};
-
-
-static CURLcode file_setup_connection(struct connectdata *conn)
-{
- /* allocate the FILE specific struct */
- conn->data->req.protop = calloc(1, sizeof(struct FILEPROTO));
- if(!conn->data->req.protop)
- return CURLE_OUT_OF_MEMORY;
-
- return CURLE_OK;
-}
-
- /*
- Check if this is a range download, and if so, set the internal variables
- properly. This code is copied from the FTP implementation and might as
- well be factored out.
- */
-static CURLcode file_range(struct connectdata *conn)
-{
- curl_off_t from, to;
- curl_off_t totalsize=-1;
- char *ptr;
- char *ptr2;
- struct SessionHandle *data = conn->data;
-
- if(data->state.use_range && data->state.range) {
- from=curlx_strtoofft(data->state.range, &ptr, 0);
- while(*ptr && (ISSPACE(*ptr) || (*ptr=='-')))
- ptr++;
- to=curlx_strtoofft(ptr, &ptr2, 0);
- if(ptr == ptr2) {
- /* we didn't get any digit */
- to=-1;
- }
- if((-1 == to) && (from>=0)) {
- /* X - */
- data->state.resume_from = from;
- DEBUGF(infof(data, "RANGE %" CURL_FORMAT_CURL_OFF_T " to end of file\n",
- from));
- }
- else if(from < 0) {
- /* -Y */
- data->req.maxdownload = -from;
- data->state.resume_from = from;
- DEBUGF(infof(data, "RANGE the last %" CURL_FORMAT_CURL_OFF_T " bytes\n",
- -from));
- }
- else {
- /* X-Y */
- totalsize = to-from;
- data->req.maxdownload = totalsize+1; /* include last byte */
- data->state.resume_from = from;
- DEBUGF(infof(data, "RANGE from %" CURL_FORMAT_CURL_OFF_T
- " getting %" CURL_FORMAT_CURL_OFF_T " bytes\n",
- from, data->req.maxdownload));
- }
- DEBUGF(infof(data, "range-download from %" CURL_FORMAT_CURL_OFF_T
- " to %" CURL_FORMAT_CURL_OFF_T ", totally %"
- CURL_FORMAT_CURL_OFF_T " bytes\n",
- from, to, data->req.maxdownload));
- }
- else
- data->req.maxdownload = -1;
- return CURLE_OK;
-}
-
-/*
- * file_connect() gets called from Curl_protocol_connect() to allow us to
- * do protocol-specific actions at connect-time. We emulate a
- * connect-then-transfer protocol and "connect" to the file here
- */
-static CURLcode file_connect(struct connectdata *conn, bool *done)
-{
- struct SessionHandle *data = conn->data;
- char *real_path;
- struct FILEPROTO *file = data->req.protop;
- int fd;
-#ifdef DOS_FILESYSTEM
- int i;
- char *actual_path;
-#endif
-
- real_path = curl_easy_unescape(data, data->state.path, 0, NULL);
- if(!real_path)
- return CURLE_OUT_OF_MEMORY;
-
-#ifdef DOS_FILESYSTEM
- /* If the first character is a slash, and there's
- something that looks like a drive at the beginning of
- the path, skip the slash. If we remove the initial
- slash in all cases, paths without drive letters end up
- relative to the current directory which isn't how
- browsers work.
-
- Some browsers accept | instead of : as the drive letter
- separator, so we do too.
-
- On other platforms, we need the slash to indicate an
- absolute pathname. On Windows, absolute paths start
- with a drive letter.
- */
- actual_path = real_path;
- if((actual_path[0] == '/') &&
- actual_path[1] &&
- (actual_path[2] == ':' || actual_path[2] == '|')) {
- actual_path[2] = ':';
- actual_path++;
- }
-
- /* change path separators from '/' to '\\' for DOS, Windows and OS/2 */
- for(i=0; actual_path[i] != '\0'; ++i)
- if(actual_path[i] == '/')
- actual_path[i] = '\\';
-
- fd = open_readonly(actual_path, O_RDONLY|O_BINARY);
- file->path = actual_path;
-#else
- fd = open_readonly(real_path, O_RDONLY);
- file->path = real_path;
-#endif
- file->freepath = real_path; /* free this when done */
-
- file->fd = fd;
- if(!data->set.upload && (fd == -1)) {
- failf(data, "Couldn't open file %s", data->state.path);
- file_done(conn, CURLE_FILE_COULDNT_READ_FILE, FALSE);
- return CURLE_FILE_COULDNT_READ_FILE;
- }
- *done = TRUE;
-
- return CURLE_OK;
-}
-
-static CURLcode file_done(struct connectdata *conn,
- CURLcode status, bool premature)
-{
- struct FILEPROTO *file = conn->data->req.protop;
- (void)status; /* not used */
- (void)premature; /* not used */
-
- if(file) {
- Curl_safefree(file->freepath);
- file->path = NULL;
- if(file->fd != -1)
- close(file->fd);
- file->fd = -1;
- }
-
- return CURLE_OK;
-}
-
-static CURLcode file_disconnect(struct connectdata *conn,
- bool dead_connection)
-{
- struct FILEPROTO *file = conn->data->req.protop;
- (void)dead_connection; /* not used */
-
- if(file) {
- Curl_safefree(file->freepath);
- file->path = NULL;
- if(file->fd != -1)
- close(file->fd);
- file->fd = -1;
- }
-
- return CURLE_OK;
-}
-
-#ifdef DOS_FILESYSTEM
-#define DIRSEP '\\'
-#else
-#define DIRSEP '/'
-#endif
-
-static CURLcode file_upload(struct connectdata *conn)
-{
- struct FILEPROTO *file = conn->data->req.protop;
- const char *dir = strchr(file->path, DIRSEP);
- int fd;
- int mode;
- CURLcode res=CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *buf = data->state.buffer;
- size_t nread;
- size_t nwrite;
- curl_off_t bytecount = 0;
- struct timeval now = Curl_tvnow();
- struct_stat file_stat;
- const char* buf2;
-
- /*
- * Since FILE: doesn't do the full init, we need to provide some extra
- * assignments here.
- */
- conn->fread_func = data->set.fread_func;
- conn->fread_in = data->set.in;
- conn->data->req.upload_fromhere = buf;
-
- if(!dir)
- return CURLE_FILE_COULDNT_READ_FILE; /* fix: better error code */
-
- if(!dir[1])
- return CURLE_FILE_COULDNT_READ_FILE; /* fix: better error code */
-
-#ifdef O_BINARY
-#define MODE_DEFAULT O_WRONLY|O_CREAT|O_BINARY
-#else
-#define MODE_DEFAULT O_WRONLY|O_CREAT
-#endif
-
- if(data->state.resume_from)
- mode = MODE_DEFAULT|O_APPEND;
- else
- mode = MODE_DEFAULT|O_TRUNC;
-
- fd = open(file->path, mode, conn->data->set.new_file_perms);
- if(fd < 0) {
- failf(data, "Can't open %s for writing", file->path);
- return CURLE_WRITE_ERROR;
- }
-
- if(-1 != data->state.infilesize)
- /* known size of data to "upload" */
- Curl_pgrsSetUploadSize(data, data->state.infilesize);
-
- /* treat the negative resume offset value as the case of "-" */
- if(data->state.resume_from < 0) {
- if(fstat(fd, &file_stat)) {
- close(fd);
- failf(data, "Can't get the size of %s", file->path);
- return CURLE_WRITE_ERROR;
- }
- else
- data->state.resume_from = (curl_off_t)file_stat.st_size;
- }
-
- while(res == CURLE_OK) {
- int readcount;
- res = Curl_fillreadbuffer(conn, BUFSIZE, &readcount);
- if(res)
- break;
-
- if(readcount <= 0) /* fix questionable compare error. curlvms */
- break;
-
- nread = (size_t)readcount;
-
- /*skip bytes before resume point*/
- if(data->state.resume_from) {
- if((curl_off_t)nread <= data->state.resume_from ) {
- data->state.resume_from -= nread;
- nread = 0;
- buf2 = buf;
- }
- else {
- buf2 = buf + data->state.resume_from;
- nread -= (size_t)data->state.resume_from;
- data->state.resume_from = 0;
- }
- }
- else
- buf2 = buf;
-
- /* write the data to the target */
- nwrite = write(fd, buf2, nread);
- if(nwrite != nread) {
- res = CURLE_SEND_ERROR;
- break;
- }
-
- bytecount += nread;
-
- Curl_pgrsSetUploadCounter(data, bytecount);
-
- if(Curl_pgrsUpdate(conn))
- res = CURLE_ABORTED_BY_CALLBACK;
- else
- res = Curl_speedcheck(data, now);
- }
- if(!res && Curl_pgrsUpdate(conn))
- res = CURLE_ABORTED_BY_CALLBACK;
-
- close(fd);
-
- return res;
-}
-
-/*
- * file_do() is the protocol-specific function for the do-phase, separated
- * from the connect-phase above. Other protocols merely setup the transfer in
- * the do-phase, to have it done in the main transfer loop but since some
- * platforms we support don't allow select()ing etc on file handles (as
- * opposed to sockets) we instead perform the whole do-operation in this
- * function.
- */
-static CURLcode file_do(struct connectdata *conn, bool *done)
-{
- /* This implementation ignores the host name in conformance with
- RFC 1738. Only local files (reachable via the standard file system)
- are supported. This means that files on remotely mounted directories
- (via NFS, Samba, NT sharing) can be accessed through a file:// URL
- */
- CURLcode res = CURLE_OK;
- struct_stat statbuf; /* struct_stat instead of struct stat just to allow the
- Windows version to have a different struct without
- having to redefine the simple word 'stat' */
- curl_off_t expected_size=0;
- bool fstated=FALSE;
- ssize_t nread;
- struct SessionHandle *data = conn->data;
- char *buf = data->state.buffer;
- curl_off_t bytecount = 0;
- int fd;
- struct timeval now = Curl_tvnow();
- struct FILEPROTO *file;
-
- *done = TRUE; /* unconditionally */
-
- Curl_initinfo(data);
- Curl_pgrsStartNow(data);
-
- if(data->set.upload)
- return file_upload(conn);
-
- file = conn->data->req.protop;
-
- /* get the fd from the connection phase */
- fd = file->fd;
-
- /* VMS: This only works reliable for STREAMLF files */
- if(-1 != fstat(fd, &statbuf)) {
- /* we could stat it, then read out the size */
- expected_size = statbuf.st_size;
- /* and store the modification time */
- data->info.filetime = (long)statbuf.st_mtime;
- fstated = TRUE;
- }
-
- if(fstated && !data->state.range && data->set.timecondition) {
- if(!Curl_meets_timecondition(data, (time_t)data->info.filetime)) {
- *done = TRUE;
- return CURLE_OK;
- }
- }
-
- /* If we have selected NOBODY and HEADER, it means that we only want file
- information. Which for FILE can't be much more than the file size and
- date. */
- if(data->set.opt_no_body && data->set.include_header && fstated) {
- CURLcode result;
- snprintf(buf, sizeof(data->state.buffer),
- "Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", expected_size);
- result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
- if(result)
- return result;
-
- result = Curl_client_write(conn, CLIENTWRITE_BOTH,
- (char *)"Accept-ranges: bytes\r\n", 0);
- if(result)
- return result;
-
- if(fstated) {
- time_t filetime = (time_t)statbuf.st_mtime;
- struct tm buffer;
- const struct tm *tm = &buffer;
- result = Curl_gmtime(filetime, &buffer);
- if(result)
- return result;
-
- /* format: "Tue, 15 Nov 1994 12:45:26 GMT" */
- snprintf(buf, BUFSIZE-1,
- "Last-Modified: %s, %02d %s %4d %02d:%02d:%02d GMT\r\n",
- Curl_wkday[tm->tm_wday?tm->tm_wday-1:6],
- tm->tm_mday,
- Curl_month[tm->tm_mon],
- tm->tm_year + 1900,
- tm->tm_hour,
- tm->tm_min,
- tm->tm_sec);
- result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
- }
- /* if we fstat()ed the file, set the file size to make it available post-
- transfer */
- if(fstated)
- Curl_pgrsSetDownloadSize(data, expected_size);
- return result;
- }
-
- /* Check whether file range has been specified */
- file_range(conn);
-
- /* Adjust the start offset in case we want to get the N last bytes
- * of the stream iff the filesize could be determined */
- if(data->state.resume_from < 0) {
- if(!fstated) {
- failf(data, "Can't get the size of file.");
- return CURLE_READ_ERROR;
- }
- else
- data->state.resume_from += (curl_off_t)statbuf.st_size;
- }
-
- if(data->state.resume_from <= expected_size)
- expected_size -= data->state.resume_from;
- else {
- failf(data, "failed to resume file:// transfer");
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
-
- /* A high water mark has been specified so we obey... */
- if(data->req.maxdownload > 0)
- expected_size = data->req.maxdownload;
-
- if(fstated && (expected_size == 0))
- return CURLE_OK;
-
- /* The following is a shortcut implementation of file reading
- this is both more efficient than the former call to download() and
- it avoids problems with select() and recv() on file descriptors
- in Winsock */
- if(fstated)
- Curl_pgrsSetDownloadSize(data, expected_size);
-
- if(data->state.resume_from) {
- if(data->state.resume_from !=
- lseek(fd, data->state.resume_from, SEEK_SET))
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
-
- Curl_pgrsTime(data, TIMER_STARTTRANSFER);
-
- while(res == CURLE_OK) {
- /* Don't fill a whole buffer if we want less than all data */
- size_t bytestoread =
- (expected_size < CURL_OFF_T_C(BUFSIZE) - CURL_OFF_T_C(1)) ?
- curlx_sotouz(expected_size) : BUFSIZE - 1;
-
- nread = read(fd, buf, bytestoread);
-
- if(nread > 0)
- buf[nread] = 0;
-
- if(nread <= 0 || expected_size == 0)
- break;
-
- bytecount += nread;
- expected_size -= nread;
-
- res = Curl_client_write(conn, CLIENTWRITE_BODY, buf, nread);
- if(res)
- return res;
-
- Curl_pgrsSetDownloadCounter(data, bytecount);
-
- if(Curl_pgrsUpdate(conn))
- res = CURLE_ABORTED_BY_CALLBACK;
- else
- res = Curl_speedcheck(data, now);
- }
- if(Curl_pgrsUpdate(conn))
- res = CURLE_ABORTED_BY_CALLBACK;
-
- return res;
-}
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/file.h b/external/libcurl_android/jni/libcurl/lib/file.h
deleted file mode 100755
index 997474bc..00000000
--- a/external/libcurl_android/jni/libcurl/lib/file.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef HEADER_CURL_FILE_H
-#define HEADER_CURL_FILE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-
-/****************************************************************************
- * FILE unique setup
- ***************************************************************************/
-struct FILEPROTO {
- char *path; /* the path we operate on */
- char *freepath; /* pointer to the allocated block we must free, this might
- differ from the 'path' pointer */
- int fd; /* open file descriptor to read from! */
-};
-
-#ifndef CURL_DISABLE_FILE
-extern const struct Curl_handler Curl_handler_file;
-#endif
-
-#endif /* HEADER_CURL_FILE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/fileinfo.c b/external/libcurl_android/jni/libcurl/lib/fileinfo.c
deleted file mode 100755
index 8c8ee981..00000000
--- a/external/libcurl_android/jni/libcurl/lib/fileinfo.c
+++ /dev/null
@@ -1,54 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010-2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "strdup.h"
-#include "fileinfo.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-struct curl_fileinfo *Curl_fileinfo_alloc(void)
-{
- struct curl_fileinfo *tmp = malloc(sizeof(struct curl_fileinfo));
- if(!tmp)
- return NULL;
- memset(tmp, 0, sizeof(struct curl_fileinfo));
- return tmp;
-}
-
-void Curl_fileinfo_dtor(void *user, void *element)
-{
- struct curl_fileinfo *finfo = element;
- (void) user;
- if(!finfo)
- return;
-
- Curl_safefree(finfo->b_data);
-
- free(finfo);
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/fileinfo.h b/external/libcurl_android/jni/libcurl/lib/fileinfo.h
deleted file mode 100755
index b0e5e59e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/fileinfo.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_FILEINFO_H
-#define HEADER_CURL_FILEINFO_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <curl/curl.h>
-
-struct curl_fileinfo *Curl_fileinfo_alloc(void);
-
-void Curl_fileinfo_dtor(void *, void *);
-
-struct curl_fileinfo *Curl_fileinfo_dup(const struct curl_fileinfo *src);
-
-#endif /* HEADER_CURL_FILEINFO_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/firefox-db2pem.sh b/external/libcurl_android/jni/libcurl/lib/firefox-db2pem.sh
deleted file mode 100755
index 14ac5760..00000000
--- a/external/libcurl_android/jni/libcurl/lib/firefox-db2pem.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh
-# ***************************************************************************
-# * _ _ ____ _
-# * Project ___| | | | _ \| |
-# * / __| | | | |_) | |
-# * | (__| |_| | _ <| |___
-# * \___|\___/|_| \_\_____|
-# *
-# * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
-# *
-# * This software is licensed as described in the file COPYING, which
-# * you should have received as part of this distribution. The terms
-# * are also available at http://curl.haxx.se/docs/copyright.html.
-# *
-# * You may opt to use, copy, modify, merge, publish, distribute and/or sell
-# * copies of the Software, and permit persons to whom the Software is
-# * furnished to do so, under the terms of the COPYING file.
-# *
-# * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
-# * KIND, either express or implied.
-# *
-# ***************************************************************************
-# This shell script creates a fresh ca-bundle.crt file for use with libcurl.
-# It extracts all ca certs it finds in the local Firefox database and converts
-# them all into PEM format.
-#
-db=`ls -1d $HOME/.mozilla/firefox/*default`
-out=$1
-
-if test -z "$out"; then
- out="ca-bundle.crt" # use a sensible default
-fi
-
-currentdate=`date`
-
-cat >$out <<EOF
-##
-## Bundle of CA Root Certificates
-##
-## Converted at: ${currentdate}
-## These were converted from the local Firefox directory by the db2pem script.
-##
-EOF
-
-
-certutil -L -h 'Builtin Object Token' -d $db | \
-grep ' *[CcGTPpu]*,[CcGTPpu]*,[CcGTPpu]* *$' | \
-sed -e 's/ *[CcGTPpu]*,[CcGTPpu]*,[CcGTPpu]* *$//' -e 's/\(.*\)/"\1"/' | \
-sort | \
-while read nickname; \
- do echo $nickname | sed -e "s/Builtin Object Token://g"; \
-eval certutil -d $db -L -n "$nickname" -a ; \
-done >> $out
-
diff --git a/external/libcurl_android/jni/libcurl/lib/formdata.c b/external/libcurl_android/jni/libcurl/lib/formdata.c
deleted file mode 100755
index 3260928f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/formdata.c
+++ /dev/null
@@ -1,1596 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#if !defined(CURL_DISABLE_HTTP) || defined(USE_SSLEAY)
-
-#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
-#include <libgen.h>
-#endif
-
-#include "urldata.h" /* for struct SessionHandle */
-#include "formdata.h"
-#include "vtls/vtls.h"
-#include "strequal.h"
-#include "curl_memory.h"
-#include "sendf.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#endif /* !defined(CURL_DISABLE_HTTP) || defined(USE_SSLEAY) */
-
-#ifndef CURL_DISABLE_HTTP
-
-#ifndef HAVE_BASENAME
-static char *Curl_basename(char *path);
-#define basename(x) Curl_basename((x))
-#endif
-
-static size_t readfromfile(struct Form *form, char *buffer, size_t size);
-static char *formboundary(struct SessionHandle *data);
-
-/* What kind of Content-Type to use on un-specified files with unrecognized
- extensions. */
-#define HTTPPOST_CONTENTTYPE_DEFAULT "application/octet-stream"
-
-#define FORM_FILE_SEPARATOR ','
-#define FORM_TYPE_SEPARATOR ';'
-
-/***************************************************************************
- *
- * AddHttpPost()
- *
- * Adds a HttpPost structure to the list, if parent_post is given becomes
- * a subpost of parent_post instead of a direct list element.
- *
- * Returns newly allocated HttpPost on success and NULL if malloc failed.
- *
- ***************************************************************************/
-static struct curl_httppost *
-AddHttpPost(char *name, size_t namelength,
- char *value, size_t contentslength,
- char *buffer, size_t bufferlength,
- char *contenttype,
- long flags,
- struct curl_slist* contentHeader,
- char *showfilename, char *userp,
- struct curl_httppost *parent_post,
- struct curl_httppost **httppost,
- struct curl_httppost **last_post)
-{
- struct curl_httppost *post;
- post = calloc(1, sizeof(struct curl_httppost));
- if(post) {
- post->name = name;
- post->namelength = (long)(name?(namelength?namelength:strlen(name)):0);
- post->contents = value;
- post->contentslength = (long)contentslength;
- post->buffer = buffer;
- post->bufferlength = (long)bufferlength;
- post->contenttype = contenttype;
- post->contentheader = contentHeader;
- post->showfilename = showfilename;
- post->userp = userp,
- post->flags = flags;
- }
- else
- return NULL;
-
- if(parent_post) {
- /* now, point our 'more' to the original 'more' */
- post->more = parent_post->more;
-
- /* then move the original 'more' to point to ourselves */
- parent_post->more = post;
- }
- else {
- /* make the previous point to this */
- if(*last_post)
- (*last_post)->next = post;
- else
- (*httppost) = post;
-
- (*last_post) = post;
- }
- return post;
-}
-
-/***************************************************************************
- *
- * AddFormInfo()
- *
- * Adds a FormInfo structure to the list presented by parent_form_info.
- *
- * Returns newly allocated FormInfo on success and NULL if malloc failed/
- * parent_form_info is NULL.
- *
- ***************************************************************************/
-static FormInfo * AddFormInfo(char *value,
- char *contenttype,
- FormInfo *parent_form_info)
-{
- FormInfo *form_info;
- form_info = calloc(1, sizeof(struct FormInfo));
- if(form_info) {
- if(value)
- form_info->value = value;
- if(contenttype)
- form_info->contenttype = contenttype;
- form_info->flags = HTTPPOST_FILENAME;
- }
- else
- return NULL;
-
- if(parent_form_info) {
- /* now, point our 'more' to the original 'more' */
- form_info->more = parent_form_info->more;
-
- /* then move the original 'more' to point to ourselves */
- parent_form_info->more = form_info;
- }
-
- return form_info;
-}
-
-/***************************************************************************
- *
- * ContentTypeForFilename()
- *
- * Provides content type for filename if one of the known types (else
- * (either the prevtype or the default is returned).
- *
- * Returns some valid contenttype for filename.
- *
- ***************************************************************************/
-static const char *ContentTypeForFilename(const char *filename,
- const char *prevtype)
-{
- const char *contenttype = NULL;
- unsigned int i;
- /*
- * No type was specified, we scan through a few well-known
- * extensions and pick the first we match!
- */
- struct ContentType {
- const char *extension;
- const char *type;
- };
- static const struct ContentType ctts[]={
- {".gif", "image/gif"},
- {".jpg", "image/jpeg"},
- {".jpeg", "image/jpeg"},
- {".txt", "text/plain"},
- {".html", "text/html"},
- {".xml", "application/xml"}
- };
-
- if(prevtype)
- /* default to the previously set/used! */
- contenttype = prevtype;
- else
- contenttype = HTTPPOST_CONTENTTYPE_DEFAULT;
-
- if(filename) { /* in case a NULL was passed in */
- for(i=0; i<sizeof(ctts)/sizeof(ctts[0]); i++) {
- if(strlen(filename) >= strlen(ctts[i].extension)) {
- if(strequal(filename +
- strlen(filename) - strlen(ctts[i].extension),
- ctts[i].extension)) {
- contenttype = ctts[i].type;
- break;
- }
- }
- }
- }
- /* we have a contenttype by now */
- return contenttype;
-}
-
-/***************************************************************************
- *
- * memdup()
- *
- * Copies the 'source' data to a newly allocated buffer buffer (that is
- * returned). Uses buffer_length if not null, else uses strlen to determine
- * the length of the buffer to be copied
- *
- * Returns the new pointer or NULL on failure.
- *
- ***************************************************************************/
-static char *memdup(const char *src, size_t buffer_length)
-{
- size_t length;
- bool add = FALSE;
- char *buffer;
-
- if(buffer_length)
- length = buffer_length;
- else if(src) {
- length = strlen(src);
- add = TRUE;
- }
- else
- /* no length and a NULL src pointer! */
- return strdup("");
-
- buffer = malloc(length+add);
- if(!buffer)
- return NULL; /* fail */
-
- memcpy(buffer, src, length);
-
- /* if length unknown do null termination */
- if(add)
- buffer[length] = '\0';
-
- return buffer;
-}
-
-/***************************************************************************
- *
- * FormAdd()
- *
- * Stores a formpost parameter and builds the appropriate linked list.
- *
- * Has two principal functionalities: using files and byte arrays as
- * post parts. Byte arrays are either copied or just the pointer is stored
- * (as the user requests) while for files only the filename and not the
- * content is stored.
- *
- * While you may have only one byte array for each name, multiple filenames
- * are allowed (and because of this feature CURLFORM_END is needed after
- * using CURLFORM_FILE).
- *
- * Examples:
- *
- * Simple name/value pair with copied contents:
- * curl_formadd (&post, &last, CURLFORM_COPYNAME, "name",
- * CURLFORM_COPYCONTENTS, "value", CURLFORM_END);
- *
- * name/value pair where only the content pointer is remembered:
- * curl_formadd (&post, &last, CURLFORM_COPYNAME, "name",
- * CURLFORM_PTRCONTENTS, ptr, CURLFORM_CONTENTSLENGTH, 10, CURLFORM_END);
- * (if CURLFORM_CONTENTSLENGTH is missing strlen () is used)
- *
- * storing a filename (CONTENTTYPE is optional!):
- * curl_formadd (&post, &last, CURLFORM_COPYNAME, "name",
- * CURLFORM_FILE, "filename1", CURLFORM_CONTENTTYPE, "plain/text",
- * CURLFORM_END);
- *
- * storing multiple filenames:
- * curl_formadd (&post, &last, CURLFORM_COPYNAME, "name",
- * CURLFORM_FILE, "filename1", CURLFORM_FILE, "filename2", CURLFORM_END);
- *
- * Returns:
- * CURL_FORMADD_OK on success
- * CURL_FORMADD_MEMORY if the FormInfo allocation fails
- * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form
- * CURL_FORMADD_NULL if a null pointer was given for a char
- * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed
- * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used
- * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or error)
- * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated
- * CURL_FORMADD_MEMORY if some allocation for string copying failed.
- * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array
- *
- ***************************************************************************/
-
-static
-CURLFORMcode FormAdd(struct curl_httppost **httppost,
- struct curl_httppost **last_post,
- va_list params)
-{
- FormInfo *first_form, *current_form, *form = NULL;
- CURLFORMcode return_value = CURL_FORMADD_OK;
- const char *prevtype = NULL;
- struct curl_httppost *post = NULL;
- CURLformoption option;
- struct curl_forms *forms = NULL;
- char *array_value=NULL; /* value read from an array */
-
- /* This is a state variable, that if TRUE means that we're parsing an
- array that we got passed to us. If FALSE we're parsing the input
- va_list arguments. */
- bool array_state = FALSE;
-
- /*
- * We need to allocate the first struct to fill in.
- */
- first_form = calloc(1, sizeof(struct FormInfo));
- if(!first_form)
- return CURL_FORMADD_MEMORY;
-
- current_form = first_form;
-
- /*
- * Loop through all the options set. Break if we have an error to report.
- */
- while(return_value == CURL_FORMADD_OK) {
-
- /* first see if we have more parts of the array param */
- if(array_state && forms) {
- /* get the upcoming option from the given array */
- option = forms->option;
- array_value = (char *)forms->value;
-
- forms++; /* advance this to next entry */
- if(CURLFORM_END == option) {
- /* end of array state */
- array_state = FALSE;
- continue;
- }
- }
- else {
- /* This is not array-state, get next option */
- option = va_arg(params, CURLformoption);
- if(CURLFORM_END == option)
- break;
- }
-
- switch (option) {
- case CURLFORM_ARRAY:
- if(array_state)
- /* we don't support an array from within an array */
- return_value = CURL_FORMADD_ILLEGAL_ARRAY;
- else {
- forms = va_arg(params, struct curl_forms *);
- if(forms)
- array_state = TRUE;
- else
- return_value = CURL_FORMADD_NULL;
- }
- break;
-
- /*
- * Set the Name property.
- */
- case CURLFORM_PTRNAME:
-#ifdef CURL_DOES_CONVERSIONS
- /* Treat CURLFORM_PTR like CURLFORM_COPYNAME so that libcurl will copy
- * the data in all cases so that we'll have safe memory for the eventual
- * conversion.
- */
-#else
- current_form->flags |= HTTPPOST_PTRNAME; /* fall through */
-#endif
- case CURLFORM_COPYNAME:
- if(current_form->name)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else {
- char *name = array_state?
- array_value:va_arg(params, char *);
- if(name)
- current_form->name = name; /* store for the moment */
- else
- return_value = CURL_FORMADD_NULL;
- }
- break;
- case CURLFORM_NAMELENGTH:
- if(current_form->namelength)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else
- current_form->namelength =
- array_state?(size_t)array_value:(size_t)va_arg(params, long);
- break;
-
- /*
- * Set the contents property.
- */
- case CURLFORM_PTRCONTENTS:
- current_form->flags |= HTTPPOST_PTRCONTENTS; /* fall through */
- case CURLFORM_COPYCONTENTS:
- if(current_form->value)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else {
- char *value =
- array_state?array_value:va_arg(params, char *);
- if(value)
- current_form->value = value; /* store for the moment */
- else
- return_value = CURL_FORMADD_NULL;
- }
- break;
- case CURLFORM_CONTENTSLENGTH:
- if(current_form->contentslength)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else
- current_form->contentslength =
- array_state?(size_t)array_value:(size_t)va_arg(params, long);
- break;
-
- /* Get contents from a given file name */
- case CURLFORM_FILECONTENT:
- if(current_form->flags & (HTTPPOST_PTRCONTENTS|HTTPPOST_READFILE))
- return_value = CURL_FORMADD_OPTION_TWICE;
- else {
- const char *filename = array_state?
- array_value:va_arg(params, char *);
- if(filename) {
- current_form->value = strdup(filename);
- if(!current_form->value)
- return_value = CURL_FORMADD_MEMORY;
- else {
- current_form->flags |= HTTPPOST_READFILE;
- current_form->value_alloc = TRUE;
- }
- }
- else
- return_value = CURL_FORMADD_NULL;
- }
- break;
-
- /* We upload a file */
- case CURLFORM_FILE:
- {
- const char *filename = array_state?array_value:
- va_arg(params, char *);
-
- if(current_form->value) {
- if(current_form->flags & HTTPPOST_FILENAME) {
- if(filename) {
- char *fname = strdup(filename);
- if(!fname)
- return_value = CURL_FORMADD_MEMORY;
- else {
- form = AddFormInfo(fname, NULL, current_form);
- if(!form) {
- Curl_safefree(fname);
- return_value = CURL_FORMADD_MEMORY;
- }
- else {
- form->value_alloc = TRUE;
- current_form = form;
- form = NULL;
- }
- }
- }
- else
- return_value = CURL_FORMADD_NULL;
- }
- else
- return_value = CURL_FORMADD_OPTION_TWICE;
- }
- else {
- if(filename) {
- current_form->value = strdup(filename);
- if(!current_form->value)
- return_value = CURL_FORMADD_MEMORY;
- else {
- current_form->flags |= HTTPPOST_FILENAME;
- current_form->value_alloc = TRUE;
- }
- }
- else
- return_value = CURL_FORMADD_NULL;
- }
- break;
- }
-
- case CURLFORM_BUFFERPTR:
- current_form->flags |= HTTPPOST_PTRBUFFER|HTTPPOST_BUFFER;
- if(current_form->buffer)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else {
- char *buffer =
- array_state?array_value:va_arg(params, char *);
- if(buffer) {
- current_form->buffer = buffer; /* store for the moment */
- current_form->value = buffer; /* make it non-NULL to be accepted
- as fine */
- }
- else
- return_value = CURL_FORMADD_NULL;
- }
- break;
-
- case CURLFORM_BUFFERLENGTH:
- if(current_form->bufferlength)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else
- current_form->bufferlength =
- array_state?(size_t)array_value:(size_t)va_arg(params, long);
- break;
-
- case CURLFORM_STREAM:
- current_form->flags |= HTTPPOST_CALLBACK;
- if(current_form->userp)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else {
- char *userp =
- array_state?array_value:va_arg(params, char *);
- if(userp) {
- current_form->userp = userp;
- current_form->value = userp; /* this isn't strictly true but we
- derive a value from this later on
- and we need this non-NULL to be
- accepted as a fine form part */
- }
- else
- return_value = CURL_FORMADD_NULL;
- }
- break;
-
- case CURLFORM_CONTENTTYPE:
- {
- const char *contenttype =
- array_state?array_value:va_arg(params, char *);
- if(current_form->contenttype) {
- if(current_form->flags & HTTPPOST_FILENAME) {
- if(contenttype) {
- char *type = strdup(contenttype);
- if(!type)
- return_value = CURL_FORMADD_MEMORY;
- else {
- form = AddFormInfo(NULL, type, current_form);
- if(!form) {
- Curl_safefree(type);
- return_value = CURL_FORMADD_MEMORY;
- }
- else {
- form->contenttype_alloc = TRUE;
- current_form = form;
- form = NULL;
- }
- }
- }
- else
- return_value = CURL_FORMADD_NULL;
- }
- else
- return_value = CURL_FORMADD_OPTION_TWICE;
- }
- else {
- if(contenttype) {
- current_form->contenttype = strdup(contenttype);
- if(!current_form->contenttype)
- return_value = CURL_FORMADD_MEMORY;
- else
- current_form->contenttype_alloc = TRUE;
- }
- else
- return_value = CURL_FORMADD_NULL;
- }
- break;
- }
- case CURLFORM_CONTENTHEADER:
- {
- /* this "cast increases required alignment of target type" but
- we consider it OK anyway */
- struct curl_slist* list = array_state?
- (struct curl_slist*)array_value:
- va_arg(params, struct curl_slist*);
-
- if(current_form->contentheader)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else
- current_form->contentheader = list;
-
- break;
- }
- case CURLFORM_FILENAME:
- case CURLFORM_BUFFER:
- {
- const char *filename = array_state?array_value:
- va_arg(params, char *);
- if(current_form->showfilename)
- return_value = CURL_FORMADD_OPTION_TWICE;
- else {
- current_form->showfilename = strdup(filename);
- if(!current_form->showfilename)
- return_value = CURL_FORMADD_MEMORY;
- else
- current_form->showfilename_alloc = TRUE;
- }
- break;
- }
- default:
- return_value = CURL_FORMADD_UNKNOWN_OPTION;
- break;
- }
- }
-
- if(CURL_FORMADD_OK != return_value) {
- /* On error, free allocated fields for all nodes of the FormInfo linked
- list without deallocating nodes. List nodes are deallocated later on */
- FormInfo *ptr;
- for(ptr = first_form; ptr != NULL; ptr = ptr->more) {
- if(ptr->name_alloc) {
- Curl_safefree(ptr->name);
- ptr->name_alloc = FALSE;
- }
- if(ptr->value_alloc) {
- Curl_safefree(ptr->value);
- ptr->value_alloc = FALSE;
- }
- if(ptr->contenttype_alloc) {
- Curl_safefree(ptr->contenttype);
- ptr->contenttype_alloc = FALSE;
- }
- if(ptr->showfilename_alloc) {
- Curl_safefree(ptr->showfilename);
- ptr->showfilename_alloc = FALSE;
- }
- }
- }
-
- if(CURL_FORMADD_OK == return_value) {
- /* go through the list, check for completeness and if everything is
- * alright add the HttpPost item otherwise set return_value accordingly */
-
- post = NULL;
- for(form = first_form;
- form != NULL;
- form = form->more) {
- if(((!form->name || !form->value) && !post) ||
- ( (form->contentslength) &&
- (form->flags & HTTPPOST_FILENAME) ) ||
- ( (form->flags & HTTPPOST_FILENAME) &&
- (form->flags & HTTPPOST_PTRCONTENTS) ) ||
-
- ( (!form->buffer) &&
- (form->flags & HTTPPOST_BUFFER) &&
- (form->flags & HTTPPOST_PTRBUFFER) ) ||
-
- ( (form->flags & HTTPPOST_READFILE) &&
- (form->flags & HTTPPOST_PTRCONTENTS) )
- ) {
- return_value = CURL_FORMADD_INCOMPLETE;
- break;
- }
- else {
- if(((form->flags & HTTPPOST_FILENAME) ||
- (form->flags & HTTPPOST_BUFFER)) &&
- !form->contenttype ) {
- char *f = form->flags & HTTPPOST_BUFFER?
- form->showfilename : form->value;
-
- /* our contenttype is missing */
- form->contenttype = strdup(ContentTypeForFilename(f, prevtype));
- if(!form->contenttype) {
- return_value = CURL_FORMADD_MEMORY;
- break;
- }
- form->contenttype_alloc = TRUE;
- }
- if(!(form->flags & HTTPPOST_PTRNAME) &&
- (form == first_form) ) {
- /* Note that there's small risk that form->name is NULL here if the
- app passed in a bad combo, so we better check for that first. */
- if(form->name)
- /* copy name (without strdup; possibly contains null characters) */
- form->name = memdup(form->name, form->namelength);
- if(!form->name) {
- return_value = CURL_FORMADD_MEMORY;
- break;
- }
- form->name_alloc = TRUE;
- }
- if(!(form->flags & (HTTPPOST_FILENAME | HTTPPOST_READFILE |
- HTTPPOST_PTRCONTENTS | HTTPPOST_PTRBUFFER |
- HTTPPOST_CALLBACK)) ) {
- /* copy value (without strdup; possibly contains null characters) */
- form->value = memdup(form->value, form->contentslength);
- if(!form->value) {
- return_value = CURL_FORMADD_MEMORY;
- break;
- }
- form->value_alloc = TRUE;
- }
- post = AddHttpPost(form->name, form->namelength,
- form->value, form->contentslength,
- form->buffer, form->bufferlength,
- form->contenttype, form->flags,
- form->contentheader, form->showfilename,
- form->userp,
- post, httppost,
- last_post);
-
- if(!post) {
- return_value = CURL_FORMADD_MEMORY;
- break;
- }
-
- if(form->contenttype)
- prevtype = form->contenttype;
- }
- }
- if(CURL_FORMADD_OK != return_value) {
- /* On error, free allocated fields for nodes of the FormInfo linked
- list which are not already owned by the httppost linked list
- without deallocating nodes. List nodes are deallocated later on */
- FormInfo *ptr;
- for(ptr = form; ptr != NULL; ptr = ptr->more) {
- if(ptr->name_alloc) {
- Curl_safefree(ptr->name);
- ptr->name_alloc = FALSE;
- }
- if(ptr->value_alloc) {
- Curl_safefree(ptr->value);
- ptr->value_alloc = FALSE;
- }
- if(ptr->contenttype_alloc) {
- Curl_safefree(ptr->contenttype);
- ptr->contenttype_alloc = FALSE;
- }
- if(ptr->showfilename_alloc) {
- Curl_safefree(ptr->showfilename);
- ptr->showfilename_alloc = FALSE;
- }
- }
- }
- }
-
- /* Always deallocate FormInfo linked list nodes without touching node
- fields given that these have either been deallocated or are owned
- now by the httppost linked list */
- while(first_form) {
- FormInfo *ptr = first_form->more;
- Curl_safefree(first_form);
- first_form = ptr;
- }
-
- return return_value;
-}
-
-/*
- * curl_formadd() is a public API to add a section to the multipart formpost.
- *
- * @unittest: 1308
- */
-
-CURLFORMcode curl_formadd(struct curl_httppost **httppost,
- struct curl_httppost **last_post,
- ...)
-{
- va_list arg;
- CURLFORMcode result;
- va_start(arg, last_post);
- result = FormAdd(httppost, last_post, arg);
- va_end(arg);
- return result;
-}
-
-#ifdef __VMS
-#include <fabdef.h>
-/*
- * get_vms_file_size does what it takes to get the real size of the file
- *
- * For fixed files, find out the size of the EOF block and adjust.
- *
- * For all others, have to read the entire file in, discarding the contents.
- * Most posted text files will be small, and binary files like zlib archives
- * and CD/DVD images should be either a STREAM_LF format or a fixed format.
- *
- */
-curl_off_t VmsRealFileSize(const char * name,
- const struct_stat * stat_buf)
-{
- char buffer[8192];
- curl_off_t count;
- int ret_stat;
- FILE * file;
-
- file = fopen(name, "r");
- if(file == NULL)
- return 0;
-
- count = 0;
- ret_stat = 1;
- while(ret_stat > 0) {
- ret_stat = fread(buffer, 1, sizeof(buffer), file);
- if(ret_stat != 0)
- count += ret_stat;
- }
- fclose(file);
-
- return count;
-}
-
-/*
- *
- * VmsSpecialSize checks to see if the stat st_size can be trusted and
- * if not to call a routine to get the correct size.
- *
- */
-static curl_off_t VmsSpecialSize(const char * name,
- const struct_stat * stat_buf)
-{
- switch(stat_buf->st_fab_rfm) {
- case FAB$C_VAR:
- case FAB$C_VFC:
- return VmsRealFileSize(name, stat_buf);
- break;
- default:
- return stat_buf->st_size;
- }
-}
-
-#endif
-
-#ifndef __VMS
-#define filesize(name, stat_data) (stat_data.st_size)
-#else
- /* Getting the expected file size needs help on VMS */
-#define filesize(name, stat_data) VmsSpecialSize(name, &stat_data)
-#endif
-
-/*
- * AddFormData() adds a chunk of data to the FormData linked list.
- *
- * size is incremented by the chunk length, unless it is NULL
- */
-static CURLcode AddFormData(struct FormData **formp,
- enum formtype type,
- const void *line,
- size_t length,
- curl_off_t *size)
-{
- struct FormData *newform = malloc(sizeof(struct FormData));
- if(!newform)
- return CURLE_OUT_OF_MEMORY;
- newform->next = NULL;
-
- if(type <= FORM_CONTENT) {
- /* we make it easier for plain strings: */
- if(!length)
- length = strlen((char *)line);
-
- newform->line = malloc(length+1);
- if(!newform->line) {
- free(newform);
- return CURLE_OUT_OF_MEMORY;
- }
- memcpy(newform->line, line, length);
- newform->length = length;
- newform->line[length]=0; /* zero terminate for easier debugging */
- }
- else
- /* For callbacks and files we don't have any actual data so we just keep a
- pointer to whatever this points to */
- newform->line = (char *)line;
-
- newform->type = type;
-
- if(*formp) {
- (*formp)->next = newform;
- *formp = newform;
- }
- else
- *formp = newform;
-
- if(size) {
- if(type != FORM_FILE)
- /* for static content as well as callback data we add the size given
- as input argument */
- *size += length;
- else {
- /* Since this is a file to be uploaded here, add the size of the actual
- file */
- if(!strequal("-", newform->line)) {
- struct_stat file;
- if(!stat(newform->line, &file) && !S_ISDIR(file.st_mode))
- *size += filesize(newform->line, file);
- else
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- }
- }
- return CURLE_OK;
-}
-
-/*
- * AddFormDataf() adds printf()-style formatted data to the formdata chain.
- */
-
-static CURLcode AddFormDataf(struct FormData **formp,
- curl_off_t *size,
- const char *fmt, ...)
-{
- char s[4096];
- va_list ap;
- va_start(ap, fmt);
- vsnprintf(s, sizeof(s), fmt, ap);
- va_end(ap);
-
- return AddFormData(formp, FORM_DATA, s, 0, size);
-}
-
-/*
- * Curl_formclean() is used from http.c, this cleans a built FormData linked
- * list
- */
-void Curl_formclean(struct FormData **form_ptr)
-{
- struct FormData *next, *form;
-
- form = *form_ptr;
- if(!form)
- return;
-
- do {
- next=form->next; /* the following form line */
- if(form->type <= FORM_CONTENT)
- free(form->line); /* free the line */
- free(form); /* free the struct */
-
- } while((form = next) != NULL); /* continue */
-
- *form_ptr = NULL;
-}
-
-/*
- * curl_formget()
- * Serialize a curl_httppost struct.
- * Returns 0 on success.
- *
- * @unittest: 1308
- */
-int curl_formget(struct curl_httppost *form, void *arg,
- curl_formget_callback append)
-{
- CURLcode rc;
- curl_off_t size;
- struct FormData *data, *ptr;
-
- rc = Curl_getformdata(NULL, &data, form, NULL, &size);
- if(rc != CURLE_OK)
- return (int)rc;
-
- for(ptr = data; ptr; ptr = ptr->next) {
- if((ptr->type == FORM_FILE) || (ptr->type == FORM_CALLBACK)) {
- char buffer[8192];
- size_t nread;
- struct Form temp;
-
- Curl_FormInit(&temp, ptr);
-
- do {
- nread = readfromfile(&temp, buffer, sizeof(buffer));
- if((nread == (size_t) -1) ||
- (nread > sizeof(buffer)) ||
- (nread != append(arg, buffer, nread))) {
- if(temp.fp)
- fclose(temp.fp);
- Curl_formclean(&data);
- return -1;
- }
- } while(nread);
- }
- else {
- if(ptr->length != append(arg, ptr->line, ptr->length)) {
- Curl_formclean(&data);
- return -1;
- }
- }
- }
- Curl_formclean(&data);
- return 0;
-}
-
-/*
- * curl_formfree() is an external function to free up a whole form post
- * chain
- */
-void curl_formfree(struct curl_httppost *form)
-{
- struct curl_httppost *next;
-
- if(!form)
- /* no form to free, just get out of this */
- return;
-
- do {
- next=form->next; /* the following form line */
-
- /* recurse to sub-contents */
- if(form->more)
- curl_formfree(form->more);
-
- if(!(form->flags & HTTPPOST_PTRNAME) && form->name)
- free(form->name); /* free the name */
- if(!(form->flags &
- (HTTPPOST_PTRCONTENTS|HTTPPOST_BUFFER|HTTPPOST_CALLBACK)) &&
- form->contents)
- free(form->contents); /* free the contents */
- if(form->contenttype)
- free(form->contenttype); /* free the content type */
- if(form->showfilename)
- free(form->showfilename); /* free the faked file name */
- free(form); /* free the struct */
-
- } while((form = next) != NULL); /* continue */
-}
-
-#ifndef HAVE_BASENAME
-/*
- (Quote from The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004
- Edition)
-
- The basename() function shall take the pathname pointed to by path and
- return a pointer to the final component of the pathname, deleting any
- trailing '/' characters.
-
- If the string pointed to by path consists entirely of the '/' character,
- basename() shall return a pointer to the string "/". If the string pointed
- to by path is exactly "//", it is implementation-defined whether '/' or "//"
- is returned.
-
- If path is a null pointer or points to an empty string, basename() shall
- return a pointer to the string ".".
-
- The basename() function may modify the string pointed to by path, and may
- return a pointer to static storage that may then be overwritten by a
- subsequent call to basename().
-
- The basename() function need not be reentrant. A function that is not
- required to be reentrant is not required to be thread-safe.
-
-*/
-static char *Curl_basename(char *path)
-{
- /* Ignore all the details above for now and make a quick and simple
- implementaion here */
- char *s1;
- char *s2;
-
- s1=strrchr(path, '/');
- s2=strrchr(path, '\\');
-
- if(s1 && s2) {
- path = (s1 > s2? s1 : s2)+1;
- }
- else if(s1)
- path = s1 + 1;
- else if(s2)
- path = s2 + 1;
-
- return path;
-}
-#endif
-
-static char *strippath(const char *fullfile)
-{
- char *filename;
- char *base;
- filename = strdup(fullfile); /* duplicate since basename() may ruin the
- buffer it works on */
- if(!filename)
- return NULL;
- base = strdup(basename(filename));
-
- free(filename); /* free temporary buffer */
-
- return base; /* returns an allocated string or NULL ! */
-}
-
-static CURLcode formdata_add_filename(const struct curl_httppost *file,
- struct FormData **form,
- curl_off_t *size)
-{
- CURLcode result = CURLE_OK;
- char *filename = file->showfilename;
- char *filebasename = NULL;
- char *filename_escaped = NULL;
-
- if(!filename) {
- filebasename = strippath(file->contents);
- if(!filebasename)
- return CURLE_OUT_OF_MEMORY;
- filename = filebasename;
- }
-
- if(strchr(filename, '\\') || strchr(filename, '"')) {
- char *p0, *p1;
-
- /* filename need be escaped */
- filename_escaped = malloc(strlen(filename)*2+1);
- if(!filename_escaped) {
- Curl_safefree(filebasename);
- return CURLE_OUT_OF_MEMORY;
- }
- p0 = filename_escaped;
- p1 = filename;
- while(*p1) {
- if(*p1 == '\\' || *p1 == '"')
- *p0++ = '\\';
- *p0++ = *p1++;
- }
- *p0 = '\0';
- filename = filename_escaped;
- }
- result = AddFormDataf(form, size,
- "; filename=\"%s\"",
- filename);
- Curl_safefree(filename_escaped);
- Curl_safefree(filebasename);
- return result;
-}
-
-/*
- * Curl_getformdata() converts a linked list of "meta data" into a complete
- * (possibly huge) multipart formdata. The input list is in 'post', while the
- * output resulting linked lists gets stored in '*finalform'. *sizep will get
- * the total size of the whole POST.
- * A multipart/form_data content-type is built, unless a custom content-type
- * is passed in 'custom_content_type'.
- *
- * This function will not do a failf() for the potential memory failures but
- * should for all other errors it spots. Just note that this function MAY get
- * a NULL pointer in the 'data' argument.
- */
-
-CURLcode Curl_getformdata(struct SessionHandle *data,
- struct FormData **finalform,
- struct curl_httppost *post,
- const char *custom_content_type,
- curl_off_t *sizep)
-{
- struct FormData *form = NULL;
- struct FormData *firstform;
- struct curl_httppost *file;
- CURLcode result = CURLE_OK;
-
- curl_off_t size = 0; /* support potentially ENORMOUS formposts */
- char *boundary;
- char *fileboundary = NULL;
- struct curl_slist* curList;
-
- *finalform = NULL; /* default form is empty */
-
- if(!post)
- return result; /* no input => no output! */
-
- boundary = formboundary(data);
- if(!boundary)
- return CURLE_OUT_OF_MEMORY;
-
- /* Make the first line of the output */
- result = AddFormDataf(&form, NULL,
- "%s; boundary=%s\r\n",
- custom_content_type?custom_content_type:
- "Content-Type: multipart/form-data",
- boundary);
-
- if(result) {
- Curl_safefree(boundary);
- return result;
- }
- /* we DO NOT include that line in the total size of the POST, since it'll be
- part of the header! */
-
- firstform = form;
-
- do {
-
- if(size) {
- result = AddFormDataf(&form, &size, "\r\n");
- if(result)
- break;
- }
-
- /* boundary */
- result = AddFormDataf(&form, &size, "--%s\r\n", boundary);
- if(result)
- break;
-
- /* Maybe later this should be disabled when a custom_content_type is
- passed, since Content-Disposition is not meaningful for all multipart
- types.
- */
- result = AddFormDataf(&form, &size,
- "Content-Disposition: form-data; name=\"");
- if(result)
- break;
-
- result = AddFormData(&form, FORM_DATA, post->name, post->namelength,
- &size);
- if(result)
- break;
-
- result = AddFormDataf(&form, &size, "\"");
- if(result)
- break;
-
- if(post->more) {
- /* If used, this is a link to more file names, we must then do
- the magic to include several files with the same field name */
-
- Curl_safefree(fileboundary);
- fileboundary = formboundary(data);
- if(!fileboundary) {
- result = CURLE_OUT_OF_MEMORY;
- break;
- }
-
- result = AddFormDataf(&form, &size,
- "\r\nContent-Type: multipart/mixed;"
- " boundary=%s\r\n",
- fileboundary);
- if(result)
- break;
- }
-
- file = post;
-
- do {
-
- /* If 'showfilename' is set, that is a faked name passed on to us
- to use to in the formpost. If that is not set, the actually used
- local file name should be added. */
-
- if(post->more) {
- /* if multiple-file */
- result = AddFormDataf(&form, &size,
- "\r\n--%s\r\nContent-Disposition: "
- "attachment",
- fileboundary);
- if(result)
- break;
- result = formdata_add_filename(file, &form, &size);
- if(result)
- break;
- }
- else if(post->flags & (HTTPPOST_FILENAME|HTTPPOST_BUFFER|
- HTTPPOST_CALLBACK)) {
- /* it should be noted that for the HTTPPOST_FILENAME and
- HTTPPOST_CALLBACK cases the ->showfilename struct member is always
- assigned at this point */
- if(post->showfilename || (post->flags & HTTPPOST_FILENAME)) {
- result = formdata_add_filename(post, &form, &size);
- }
-
- if(result)
- break;
- }
-
- if(file->contenttype) {
- /* we have a specified type */
- result = AddFormDataf(&form, &size,
- "\r\nContent-Type: %s",
- file->contenttype);
- if(result)
- break;
- }
-
- curList = file->contentheader;
- while(curList) {
- /* Process the additional headers specified for this form */
- result = AddFormDataf( &form, &size, "\r\n%s", curList->data );
- if(result)
- break;
- curList = curList->next;
- }
- if(result)
- break;
-
- result = AddFormDataf(&form, &size, "\r\n\r\n");
- if(result)
- break;
-
- if((post->flags & HTTPPOST_FILENAME) ||
- (post->flags & HTTPPOST_READFILE)) {
- /* we should include the contents from the specified file */
- FILE *fileread;
-
- fileread = strequal("-", file->contents)?
- stdin:fopen(file->contents, "rb"); /* binary read for win32 */
-
- /*
- * VMS: This only allows for stream files on VMS. Stream files are
- * OK, as are FIXED & VAR files WITHOUT implied CC For implied CC,
- * every record needs to have a \n appended & 1 added to SIZE
- */
-
- if(fileread) {
- if(fileread != stdin) {
- /* close the file */
- fclose(fileread);
- /* add the file name only - for later reading from this */
- result = AddFormData(&form, FORM_FILE, file->contents, 0, &size);
- }
- else {
- /* When uploading from stdin, we can't know the size of the file,
- * thus must read the full file as before. We *could* use chunked
- * transfer-encoding, but that only works for HTTP 1.1 and we
- * can't be sure we work with such a server.
- */
- size_t nread;
- char buffer[512];
- while((nread = fread(buffer, 1, sizeof(buffer), fileread)) != 0) {
- result = AddFormData(&form, FORM_CONTENT, buffer, nread, &size);
- if(result)
- break;
- }
- }
- }
- else {
- if(data)
- failf(data, "couldn't open file \"%s\"", file->contents);
- *finalform = NULL;
- result = CURLE_READ_ERROR;
- }
- }
- else if(post->flags & HTTPPOST_BUFFER)
- /* include contents of buffer */
- result = AddFormData(&form, FORM_CONTENT, post->buffer,
- post->bufferlength, &size);
- else if(post->flags & HTTPPOST_CALLBACK)
- /* the contents should be read with the callback and the size
- is set with the contentslength */
- result = AddFormData(&form, FORM_CALLBACK, post->userp,
- post->contentslength, &size);
- else
- /* include the contents we got */
- result = AddFormData(&form, FORM_CONTENT, post->contents,
- post->contentslength, &size);
-
- file = file->more;
- } while(file && !result); /* for each specified file for this field */
-
- if(result)
- break;
-
- if(post->more) {
- /* this was a multiple-file inclusion, make a termination file
- boundary: */
- result = AddFormDataf(&form, &size,
- "\r\n--%s--",
- fileboundary);
- if(result)
- break;
- }
-
- } while((post = post->next) != NULL); /* for each field */
-
- /* end-boundary for everything */
- if(CURLE_OK == result)
- result = AddFormDataf(&form, &size,
- "\r\n--%s--\r\n",
- boundary);
-
- if(result) {
- Curl_formclean(&firstform);
- Curl_safefree(fileboundary);
- Curl_safefree(boundary);
- return result;
- }
-
- *sizep = size;
-
- Curl_safefree(fileboundary);
- Curl_safefree(boundary);
-
- *finalform = firstform;
-
- return result;
-}
-
-/*
- * Curl_FormInit() inits the struct 'form' points to with the 'formdata'
- * and resets the 'sent' counter.
- */
-int Curl_FormInit(struct Form *form, struct FormData *formdata )
-{
- if(!formdata)
- return 1; /* error */
-
- form->data = formdata;
- form->sent = 0;
- form->fp = NULL;
- form->fread_func = ZERO_NULL;
-
- return 0;
-}
-
-#ifndef __VMS
-# define fopen_read fopen
-#else
- /*
- * vmsfopenread
- *
- * For upload to work as expected on VMS, different optional
- * parameters must be added to the fopen command based on
- * record format of the file.
- *
- */
-# define fopen_read vmsfopenread
-static FILE * vmsfopenread(const char *file, const char *mode) {
- struct_stat statbuf;
- int result;
-
- result = stat(file, &statbuf);
-
- switch (statbuf.st_fab_rfm) {
- case FAB$C_VAR:
- case FAB$C_VFC:
- case FAB$C_STMCR:
- return fopen(file, "r");
- break;
- default:
- return fopen(file, "r", "rfm=stmlf", "ctx=stm");
- }
-}
-#endif
-
-/*
- * readfromfile()
- *
- * The read callback that this function may use can return a value larger than
- * 'size' (which then this function returns) that indicates a problem and it
- * must be properly dealt with
- */
-static size_t readfromfile(struct Form *form, char *buffer,
- size_t size)
-{
- size_t nread;
- bool callback = (form->data->type == FORM_CALLBACK)?TRUE:FALSE;
-
- if(callback) {
- if(form->fread_func == ZERO_NULL)
- return 0;
- else
- nread = form->fread_func(buffer, 1, size, form->data->line);
- }
- else {
- if(!form->fp) {
- /* this file hasn't yet been opened */
- form->fp = fopen_read(form->data->line, "rb"); /* b is for binary */
- if(!form->fp)
- return (size_t)-1; /* failure */
- }
- nread = fread(buffer, 1, size, form->fp);
- }
- if(!nread) {
- /* this is the last chunk from the file, move on */
- if(form->fp) {
- fclose(form->fp);
- form->fp = NULL;
- }
- form->data = form->data->next;
- }
-
- return nread;
-}
-
-/*
- * Curl_FormReader() is the fread() emulation function that will be used to
- * deliver the formdata to the transfer loop and then sent away to the peer.
- */
-size_t Curl_FormReader(char *buffer,
- size_t size,
- size_t nitems,
- FILE *mydata)
-{
- struct Form *form;
- size_t wantedsize;
- size_t gotsize = 0;
-
- form=(struct Form *)mydata;
-
- wantedsize = size * nitems;
-
- if(!form->data)
- return 0; /* nothing, error, empty */
-
- if((form->data->type == FORM_FILE) ||
- (form->data->type == FORM_CALLBACK)) {
- gotsize = readfromfile(form, buffer, wantedsize);
-
- if(gotsize)
- /* If positive or -1, return. If zero, continue! */
- return gotsize;
- }
- do {
-
- if((form->data->length - form->sent ) > wantedsize - gotsize) {
-
- memcpy(buffer + gotsize , form->data->line + form->sent,
- wantedsize - gotsize);
-
- form->sent += wantedsize-gotsize;
-
- return wantedsize;
- }
-
- memcpy(buffer+gotsize,
- form->data->line + form->sent,
- (form->data->length - form->sent) );
- gotsize += form->data->length - form->sent;
-
- form->sent = 0;
-
- form->data = form->data->next; /* advance */
-
- } while(form->data && (form->data->type < FORM_CALLBACK));
- /* If we got an empty line and we have more data, we proceed to the next
- line immediately to avoid returning zero before we've reached the end. */
-
- return gotsize;
-}
-
-/*
- * Curl_formpostheader() returns the first line of the formpost, the
- * request-header part (which is not part of the request-body like the rest of
- * the post).
- */
-char *Curl_formpostheader(void *formp, size_t *len)
-{
- char *header;
- struct Form *form=(struct Form *)formp;
-
- if(!form->data)
- return 0; /* nothing, ERROR! */
-
- header = form->data->line;
- *len = form->data->length;
-
- form->data = form->data->next; /* advance */
-
- return header;
-}
-
-/*
- * formboundary() creates a suitable boundary string and returns an allocated
- * one.
- */
-static char *formboundary(struct SessionHandle *data)
-{
- /* 24 dashes and 16 hexadecimal digits makes 64 bit (18446744073709551615)
- combinations */
- return aprintf("------------------------%08x%08x",
- Curl_rand(data), Curl_rand(data));
-}
-
-#else /* CURL_DISABLE_HTTP */
-CURLFORMcode curl_formadd(struct curl_httppost **httppost,
- struct curl_httppost **last_post,
- ...)
-{
- (void)httppost;
- (void)last_post;
- return CURL_FORMADD_DISABLED;
-}
-
-int curl_formget(struct curl_httppost *form, void *arg,
- curl_formget_callback append)
-{
- (void) form;
- (void) arg;
- (void) append;
- return CURL_FORMADD_DISABLED;
-}
-
-void curl_formfree(struct curl_httppost *form)
-{
- (void)form;
- /* does nothing HTTP is disabled */
-}
-
-
-#endif /* !defined(CURL_DISABLE_HTTP) */
diff --git a/external/libcurl_android/jni/libcurl/lib/formdata.h b/external/libcurl_android/jni/libcurl/lib/formdata.h
deleted file mode 100755
index 22f504bb..00000000
--- a/external/libcurl_android/jni/libcurl/lib/formdata.h
+++ /dev/null
@@ -1,98 +0,0 @@
-#ifndef HEADER_CURL_FORMDATA_H
-#define HEADER_CURL_FORMDATA_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-enum formtype {
- FORM_DATA, /* form metadata (convert to network encoding if necessary) */
- FORM_CONTENT, /* form content (never convert) */
- FORM_CALLBACK, /* 'line' points to the custom pointer we pass to the callback
- */
- FORM_FILE /* 'line' points to a file name we should read from
- to create the form data (never convert) */
-};
-
-/* plain and simple linked list with lines to send */
-struct FormData {
- struct FormData *next;
- enum formtype type;
- char *line;
- size_t length;
-};
-
-struct Form {
- struct FormData *data; /* current form line to send */
- size_t sent; /* number of bytes of the current line that has
- already been sent in a previous invoke */
- FILE *fp; /* file to read from */
- curl_read_callback fread_func; /* fread callback pointer */
-};
-
-/* used by FormAdd for temporary storage */
-typedef struct FormInfo {
- char *name;
- bool name_alloc;
- size_t namelength;
- char *value;
- bool value_alloc;
- size_t contentslength;
- char *contenttype;
- bool contenttype_alloc;
- long flags;
- char *buffer; /* pointer to existing buffer used for file upload */
- size_t bufferlength;
- char *showfilename; /* The file name to show. If not set, the actual
- file name will be used */
- bool showfilename_alloc;
- char *userp; /* pointer for the read callback */
- struct curl_slist* contentheader;
- struct FormInfo *more;
-} FormInfo;
-
-int Curl_FormInit(struct Form *form, struct FormData *formdata );
-
-CURLcode Curl_getformdata(struct SessionHandle *data,
- struct FormData **,
- struct curl_httppost *post,
- const char *custom_contenttype,
- curl_off_t *size);
-
-/* fread() emulation */
-size_t Curl_FormReader(char *buffer,
- size_t size,
- size_t nitems,
- FILE *mydata);
-
-/*
- * Curl_formpostheader() returns the first line of the formpost, the
- * request-header part (which is not part of the request-body like the rest of
- * the post).
- */
-char *Curl_formpostheader(void *formp, size_t *len);
-
-char *Curl_FormBoundary(void);
-
-void Curl_formclean(struct FormData **);
-
-CURLcode Curl_formconvert(struct SessionHandle *, struct FormData *);
-
-#endif /* HEADER_CURL_FORMDATA_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/ftp.c b/external/libcurl_android/jni/libcurl/lib/ftp.c
deleted file mode 100755
index 715afc2f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/ftp.c
+++ /dev/null
@@ -1,4585 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_FTP
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "if2ip.h"
-#include "hostip.h"
-#include "progress.h"
-#include "transfer.h"
-#include "escape.h"
-#include "http.h" /* for HTTP proxy tunnel stuff */
-#include "socks.h"
-#include "ftp.h"
-#include "fileinfo.h"
-#include "ftplistparser.h"
-#include "curl_sec.h"
-#include "strtoofft.h"
-#include "strequal.h"
-#include "vtls/vtls.h"
-#include "connect.h"
-#include "strerror.h"
-#include "inet_ntop.h"
-#include "inet_pton.h"
-#include "select.h"
-#include "parsedate.h" /* for the week day and month names */
-#include "sockaddr.h" /* required for Curl_sockaddr_storage */
-#include "multiif.h"
-#include "url.h"
-#include "rawstr.h"
-#include "speedcheck.h"
-#include "warnless.h"
-#include "http_proxy.h"
-#include "non-ascii.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifndef NI_MAXHOST
-#define NI_MAXHOST 1025
-#endif
-#ifndef INET_ADDRSTRLEN
-#define INET_ADDRSTRLEN 16
-#endif
-
-#ifdef CURL_DISABLE_VERBOSE_STRINGS
-#define ftp_pasv_verbose(a,b,c,d) Curl_nop_stmt
-#endif
-
-/* Local API functions */
-#ifndef DEBUGBUILD
-static void _state(struct connectdata *conn,
- ftpstate newstate);
-#define state(x,y) _state(x,y)
-#else
-static void _state(struct connectdata *conn,
- ftpstate newstate,
- int lineno);
-#define state(x,y) _state(x,y,__LINE__)
-#endif
-
-static CURLcode ftp_sendquote(struct connectdata *conn,
- struct curl_slist *quote);
-static CURLcode ftp_quit(struct connectdata *conn);
-static CURLcode ftp_parse_url_path(struct connectdata *conn);
-static CURLcode ftp_regular_transfer(struct connectdata *conn, bool *done);
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-static void ftp_pasv_verbose(struct connectdata *conn,
- Curl_addrinfo *ai,
- char *newhost, /* ascii version */
- int port);
-#endif
-static CURLcode ftp_state_prepare_transfer(struct connectdata *conn);
-static CURLcode ftp_state_mdtm(struct connectdata *conn);
-static CURLcode ftp_state_quote(struct connectdata *conn,
- bool init, ftpstate instate);
-static CURLcode ftp_nb_type(struct connectdata *conn,
- bool ascii, ftpstate newstate);
-static int ftp_need_type(struct connectdata *conn,
- bool ascii);
-static CURLcode ftp_do(struct connectdata *conn, bool *done);
-static CURLcode ftp_done(struct connectdata *conn,
- CURLcode, bool premature);
-static CURLcode ftp_connect(struct connectdata *conn, bool *done);
-static CURLcode ftp_disconnect(struct connectdata *conn, bool dead_connection);
-static CURLcode ftp_do_more(struct connectdata *conn, int *completed);
-static CURLcode ftp_multi_statemach(struct connectdata *conn, bool *done);
-static int ftp_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks);
-static int ftp_domore_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks);
-static CURLcode ftp_doing(struct connectdata *conn,
- bool *dophase_done);
-static CURLcode ftp_setup_connection(struct connectdata * conn);
-
-static CURLcode init_wc_data(struct connectdata *conn);
-static CURLcode wc_statemach(struct connectdata *conn);
-
-static void wc_data_dtor(void *ptr);
-
-static CURLcode ftp_state_retr(struct connectdata *conn, curl_off_t filesize);
-
-static CURLcode ftp_readresp(curl_socket_t sockfd,
- struct pingpong *pp,
- int *ftpcode,
- size_t *size);
-static CURLcode ftp_dophase_done(struct connectdata *conn,
- bool connected);
-
-/* easy-to-use macro: */
-#define PPSENDF(x,y,z) if((result = Curl_pp_sendf(x,y,z)) != CURLE_OK) \
- return result
-
-
-/*
- * FTP protocol handler.
- */
-
-const struct Curl_handler Curl_handler_ftp = {
- "FTP", /* scheme */
- ftp_setup_connection, /* setup_connection */
- ftp_do, /* do_it */
- ftp_done, /* done */
- ftp_do_more, /* do_more */
- ftp_connect, /* connect_it */
- ftp_multi_statemach, /* connecting */
- ftp_doing, /* doing */
- ftp_getsock, /* proto_getsock */
- ftp_getsock, /* doing_getsock */
- ftp_domore_getsock, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ftp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_FTP, /* defport */
- CURLPROTO_FTP, /* protocol */
- PROTOPT_DUAL | PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD
- | PROTOPT_NOURLQUERY /* flags */
-};
-
-
-#ifdef USE_SSL
-/*
- * FTPS protocol handler.
- */
-
-const struct Curl_handler Curl_handler_ftps = {
- "FTPS", /* scheme */
- ftp_setup_connection, /* setup_connection */
- ftp_do, /* do_it */
- ftp_done, /* done */
- ftp_do_more, /* do_more */
- ftp_connect, /* connect_it */
- ftp_multi_statemach, /* connecting */
- ftp_doing, /* doing */
- ftp_getsock, /* proto_getsock */
- ftp_getsock, /* doing_getsock */
- ftp_domore_getsock, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ftp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_FTPS, /* defport */
- CURLPROTO_FTPS, /* protocol */
- PROTOPT_SSL | PROTOPT_DUAL | PROTOPT_CLOSEACTION |
- PROTOPT_NEEDSPWD | PROTOPT_NOURLQUERY /* flags */
-};
-#endif
-
-#ifndef CURL_DISABLE_HTTP
-/*
- * HTTP-proxyed FTP protocol handler.
- */
-
-static const struct Curl_handler Curl_handler_ftp_proxy = {
- "FTP", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_FTP, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-
-#ifdef USE_SSL
-/*
- * HTTP-proxyed FTPS protocol handler.
- */
-
-static const struct Curl_handler Curl_handler_ftps_proxy = {
- "FTPS", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_FTPS, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-#endif
-#endif
-
-
-/*
- * NOTE: back in the old days, we added code in the FTP code that made NOBODY
- * requests on files respond with headers passed to the client/stdout that
- * looked like HTTP ones.
- *
- * This approach is not very elegant, it causes confusion and is error-prone.
- * It is subject for removal at the next (or at least a future) soname bump.
- * Until then you can test the effects of the removal by undefining the
- * following define named CURL_FTP_HTTPSTYLE_HEAD.
- */
-#define CURL_FTP_HTTPSTYLE_HEAD 1
-
-static void freedirs(struct ftp_conn *ftpc)
-{
- int i;
- if(ftpc->dirs) {
- for(i=0; i < ftpc->dirdepth; i++) {
- if(ftpc->dirs[i]) {
- free(ftpc->dirs[i]);
- ftpc->dirs[i]=NULL;
- }
- }
- free(ftpc->dirs);
- ftpc->dirs = NULL;
- ftpc->dirdepth = 0;
- }
- if(ftpc->file) {
- free(ftpc->file);
- ftpc->file = NULL;
- }
-}
-
-/* Returns non-zero if the given string contains CR (\r) or LF (\n),
- which are not allowed within RFC 959 <string>.
- Note: The input string is in the client's encoding which might
- not be ASCII, so escape sequences \r & \n must be used instead
- of hex values 0x0d & 0x0a.
-*/
-static bool isBadFtpString(const char *string)
-{
- return ((NULL != strchr(string, '\r')) ||
- (NULL != strchr(string, '\n'))) ? TRUE : FALSE;
-}
-
-/***********************************************************************
- *
- * AcceptServerConnect()
- *
- * After connection request is received from the server this function is
- * called to accept the connection and close the listening socket
- *
- */
-static CURLcode AcceptServerConnect(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- curl_socket_t sock = conn->sock[SECONDARYSOCKET];
- curl_socket_t s = CURL_SOCKET_BAD;
-#ifdef ENABLE_IPV6
- struct Curl_sockaddr_storage add;
-#else
- struct sockaddr_in add;
-#endif
- curl_socklen_t size = (curl_socklen_t) sizeof(add);
-
- if(0 == getsockname(sock, (struct sockaddr *) &add, &size)) {
- size = sizeof(add);
-
- s=accept(sock, (struct sockaddr *) &add, &size);
- }
- Curl_closesocket(conn, sock); /* close the first socket */
-
- if(CURL_SOCKET_BAD == s) {
- failf(data, "Error accept()ing server connect");
- return CURLE_FTP_PORT_FAILED;
- }
- infof(data, "Connection accepted from server\n");
-
- conn->sock[SECONDARYSOCKET] = s;
- curlx_nonblock(s, TRUE); /* enable non-blocking */
- conn->sock_accepted[SECONDARYSOCKET] = TRUE;
-
- if(data->set.fsockopt) {
- int error = 0;
-
- /* activate callback for setting socket options */
- error = data->set.fsockopt(data->set.sockopt_client,
- s,
- CURLSOCKTYPE_ACCEPT);
-
- if(error) {
- Curl_closesocket(conn, s); /* close the socket and bail out */
- conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
- return CURLE_ABORTED_BY_CALLBACK;
- }
- }
-
- return CURLE_OK;
-
-}
-
-/*
- * ftp_timeleft_accept() returns the amount of milliseconds left allowed for
- * waiting server to connect. If the value is negative, the timeout time has
- * already elapsed.
- *
- * The start time is stored in progress.t_acceptdata - as set with
- * Curl_pgrsTime(..., TIMER_STARTACCEPT);
- *
- */
-static long ftp_timeleft_accept(struct SessionHandle *data)
-{
- long timeout_ms = DEFAULT_ACCEPT_TIMEOUT;
- long other;
- struct timeval now;
-
- if(data->set.accepttimeout > 0)
- timeout_ms = data->set.accepttimeout;
-
- now = Curl_tvnow();
-
- /* check if the generic timeout possibly is set shorter */
- other = Curl_timeleft(data, &now, FALSE);
- if(other && (other < timeout_ms))
- /* note that this also works fine for when other happens to be negative
- due to it already having elapsed */
- timeout_ms = other;
- else {
- /* subtract elapsed time */
- timeout_ms -= Curl_tvdiff(now, data->progress.t_acceptdata);
- if(!timeout_ms)
- /* avoid returning 0 as that means no timeout! */
- return -1;
- }
-
- return timeout_ms;
-}
-
-
-/***********************************************************************
- *
- * ReceivedServerConnect()
- *
- * After allowing server to connect to us from data port, this function
- * checks both data connection for connection establishment and ctrl
- * connection for a negative response regarding a failure in connecting
- *
- */
-static CURLcode ReceivedServerConnect(struct connectdata *conn, bool *received)
-{
- struct SessionHandle *data = conn->data;
- curl_socket_t ctrl_sock = conn->sock[FIRSTSOCKET];
- curl_socket_t data_sock = conn->sock[SECONDARYSOCKET];
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct pingpong *pp = &ftpc->pp;
- int result;
- long timeout_ms;
- ssize_t nread;
- int ftpcode;
-
- *received = FALSE;
-
- timeout_ms = ftp_timeleft_accept(data);
- infof(data, "Checking for server connect\n");
- if(timeout_ms < 0) {
- /* if a timeout was already reached, bail out */
- failf(data, "Accept timeout occurred while waiting server connect");
- return CURLE_FTP_ACCEPT_TIMEOUT;
- }
-
- /* First check whether there is a cached response from server */
- if(pp->cache_size && pp->cache && pp->cache[0] > '3') {
- /* Data connection could not be established, let's return */
- infof(data, "There is negative response in cache while serv connect\n");
- Curl_GetFTPResponse(&nread, conn, &ftpcode);
- return CURLE_FTP_ACCEPT_FAILED;
- }
-
- result = Curl_socket_check(ctrl_sock, data_sock, CURL_SOCKET_BAD, 0);
-
- /* see if the connection request is already here */
- switch (result) {
- case -1: /* error */
- /* let's die here */
- failf(data, "Error while waiting for server connect");
- return CURLE_FTP_ACCEPT_FAILED;
- case 0: /* Server connect is not received yet */
- break; /* loop */
- default:
-
- if(result & CURL_CSELECT_IN2) {
- infof(data, "Ready to accept data connection from server\n");
- *received = TRUE;
- }
- else if(result & CURL_CSELECT_IN) {
- infof(data, "Ctrl conn has data while waiting for data conn\n");
- Curl_GetFTPResponse(&nread, conn, &ftpcode);
-
- if(ftpcode/100 > 3)
- return CURLE_FTP_ACCEPT_FAILED;
-
- return CURLE_FTP_WEIRD_SERVER_REPLY;
- }
-
- break;
- } /* switch() */
-
- return CURLE_OK;
-}
-
-
-/***********************************************************************
- *
- * InitiateTransfer()
- *
- * After connection from server is accepted this function is called to
- * setup transfer parameters and initiate the data transfer.
- *
- */
-static CURLcode InitiateTransfer(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- struct FTP *ftp = data->req.protop;
- CURLcode result = CURLE_OK;
-
- if(conn->ssl[SECONDARYSOCKET].use) {
- /* since we only have a plaintext TCP connection here, we must now
- * do the TLS stuff */
- infof(data, "Doing the SSL/TLS handshake on the data stream\n");
- result = Curl_ssl_connect(conn, SECONDARYSOCKET);
- if(result)
- return result;
- }
-
- if(conn->proto.ftpc.state_saved == FTP_STOR) {
- *(ftp->bytecountp)=0;
-
- /* When we know we're uploading a specified file, we can get the file
- size prior to the actual upload. */
-
- Curl_pgrsSetUploadSize(data, data->state.infilesize);
-
- /* set the SO_SNDBUF for the secondary socket for those who need it */
- Curl_sndbufset(conn->sock[SECONDARYSOCKET]);
-
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
- SECONDARYSOCKET, ftp->bytecountp);
- }
- else {
- /* FTP download: */
- Curl_setup_transfer(conn, SECONDARYSOCKET,
- conn->proto.ftpc.retr_size_saved, FALSE,
- ftp->bytecountp, -1, NULL); /* no upload here */
- }
-
- conn->proto.ftpc.pp.pending_resp = TRUE; /* expect server response */
- state(conn, FTP_STOP);
-
- return CURLE_OK;
-}
-
-/***********************************************************************
- *
- * AllowServerConnect()
- *
- * When we've issue the PORT command, we have told the server to connect to
- * us. This function checks whether data connection is established if so it is
- * accepted.
- *
- */
-static CURLcode AllowServerConnect(struct connectdata *conn, bool *connected)
-{
- struct SessionHandle *data = conn->data;
- long timeout_ms;
- CURLcode ret = CURLE_OK;
-
- *connected = FALSE;
- infof(data, "Preparing for accepting server on data port\n");
-
- /* Save the time we start accepting server connect */
- Curl_pgrsTime(data, TIMER_STARTACCEPT);
-
- timeout_ms = ftp_timeleft_accept(data);
- if(timeout_ms < 0) {
- /* if a timeout was already reached, bail out */
- failf(data, "Accept timeout occurred while waiting server connect");
- return CURLE_FTP_ACCEPT_TIMEOUT;
- }
-
- /* see if the connection request is already here */
- ret = ReceivedServerConnect(conn, connected);
- if(ret)
- return ret;
-
- if(*connected) {
- ret = AcceptServerConnect(conn);
- if(ret)
- return ret;
-
- ret = InitiateTransfer(conn);
- if(ret)
- return ret;
- }
- else {
- /* Add timeout to multi handle and break out of the loop */
- if(ret == CURLE_OK && *connected == FALSE) {
- if(data->set.accepttimeout > 0)
- Curl_expire(data, data->set.accepttimeout);
- else
- Curl_expire(data, DEFAULT_ACCEPT_TIMEOUT);
- }
- }
-
- return ret;
-}
-
-/* macro to check for a three-digit ftp status code at the start of the
- given string */
-#define STATUSCODE(line) (ISDIGIT(line[0]) && ISDIGIT(line[1]) && \
- ISDIGIT(line[2]))
-
-/* macro to check for the last line in an FTP server response */
-#define LASTLINE(line) (STATUSCODE(line) && (' ' == line[3]))
-
-static bool ftp_endofresp(struct connectdata *conn, char *line, size_t len,
- int *code)
-{
- (void)conn;
-
- if((len > 3) && LASTLINE(line)) {
- *code = curlx_sltosi(strtol(line, NULL, 10));
- return TRUE;
- }
-
- return FALSE;
-}
-
-static CURLcode ftp_readresp(curl_socket_t sockfd,
- struct pingpong *pp,
- int *ftpcode, /* return the ftp-code if done */
- size_t *size) /* size of the response */
-{
- struct connectdata *conn = pp->conn;
- struct SessionHandle *data = conn->data;
-#ifdef HAVE_GSSAPI
- char * const buf = data->state.buffer;
-#endif
- CURLcode result = CURLE_OK;
- int code;
-
- result = Curl_pp_readresp(sockfd, pp, &code, size);
-
-#if defined(HAVE_GSSAPI)
- /* handle the security-oriented responses 6xx ***/
- /* FIXME: some errorchecking perhaps... ***/
- switch(code) {
- case 631:
- code = Curl_sec_read_msg(conn, buf, PROT_SAFE);
- break;
- case 632:
- code = Curl_sec_read_msg(conn, buf, PROT_PRIVATE);
- break;
- case 633:
- code = Curl_sec_read_msg(conn, buf, PROT_CONFIDENTIAL);
- break;
- default:
- /* normal ftp stuff we pass through! */
- break;
- }
-#endif
-
- /* store the latest code for later retrieval */
- data->info.httpcode=code;
-
- if(ftpcode)
- *ftpcode = code;
-
- if(421 == code) {
- /* 421 means "Service not available, closing control connection." and FTP
- * servers use it to signal that idle session timeout has been exceeded.
- * If we ignored the response, it could end up hanging in some cases.
- *
- * This response code can come at any point so having it treated
- * generically is a good idea.
- */
- infof(data, "We got a 421 - timeout!\n");
- state(conn, FTP_STOP);
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- return result;
-}
-
-/* --- parse FTP server responses --- */
-
-/*
- * Curl_GetFTPResponse() is a BLOCKING function to read the full response
- * from a server after a command.
- *
- */
-
-CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */
- struct connectdata *conn,
- int *ftpcode) /* return the ftp-code */
-{
- /*
- * We cannot read just one byte per read() and then go back to select() as
- * the OpenSSL read() doesn't grok that properly.
- *
- * Alas, read as much as possible, split up into lines, use the ending
- * line in a response or continue reading. */
-
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
- long timeout; /* timeout in milliseconds */
- long interval_ms;
- struct SessionHandle *data = conn->data;
- CURLcode result = CURLE_OK;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct pingpong *pp = &ftpc->pp;
- size_t nread;
- int cache_skip=0;
- int value_to_be_ignored=0;
-
- if(ftpcode)
- *ftpcode = 0; /* 0 for errors */
- else
- /* make the pointer point to something for the rest of this function */
- ftpcode = &value_to_be_ignored;
-
- *nreadp=0;
-
- while(!*ftpcode && !result) {
- /* check and reset timeout value every lap */
- timeout = Curl_pp_state_timeout(pp);
-
- if(timeout <=0 ) {
- failf(data, "FTP response timeout");
- return CURLE_OPERATION_TIMEDOUT; /* already too little time */
- }
-
- interval_ms = 1000; /* use 1 second timeout intervals */
- if(timeout < interval_ms)
- interval_ms = timeout;
-
- /*
- * Since this function is blocking, we need to wait here for input on the
- * connection and only then we call the response reading function. We do
- * timeout at least every second to make the timeout check run.
- *
- * A caution here is that the ftp_readresp() function has a cache that may
- * contain pieces of a response from the previous invoke and we need to
- * make sure we don't just wait for input while there is unhandled data in
- * that cache. But also, if the cache is there, we call ftp_readresp() and
- * the cache wasn't good enough to continue we must not just busy-loop
- * around this function.
- *
- */
-
- if(pp->cache && (cache_skip < 2)) {
- /*
- * There's a cache left since before. We then skipping the wait for
- * socket action, unless this is the same cache like the previous round
- * as then the cache was deemed not enough to act on and we then need to
- * wait for more data anyway.
- */
- }
- else {
- switch (Curl_socket_ready(sockfd, CURL_SOCKET_BAD, interval_ms)) {
- case -1: /* select() error, stop reading */
- failf(data, "FTP response aborted due to select/poll error: %d",
- SOCKERRNO);
- return CURLE_RECV_ERROR;
-
- case 0: /* timeout */
- if(Curl_pgrsUpdate(conn))
- return CURLE_ABORTED_BY_CALLBACK;
- continue; /* just continue in our loop for the timeout duration */
-
- default: /* for clarity */
- break;
- }
- }
- result = ftp_readresp(sockfd, pp, ftpcode, &nread);
- if(result)
- break;
-
- if(!nread && pp->cache)
- /* bump cache skip counter as on repeated skips we must wait for more
- data */
- cache_skip++;
- else
- /* when we got data or there is no cache left, we reset the cache skip
- counter */
- cache_skip=0;
-
- *nreadp += nread;
-
- } /* while there's buffer left and loop is requested */
-
- pp->pending_resp = FALSE;
-
- return result;
-}
-
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- /* for debug purposes */
-static const char * const ftp_state_names[]={
- "STOP",
- "WAIT220",
- "AUTH",
- "USER",
- "PASS",
- "ACCT",
- "PBSZ",
- "PROT",
- "CCC",
- "PWD",
- "SYST",
- "NAMEFMT",
- "QUOTE",
- "RETR_PREQUOTE",
- "STOR_PREQUOTE",
- "POSTQUOTE",
- "CWD",
- "MKD",
- "MDTM",
- "TYPE",
- "LIST_TYPE",
- "RETR_TYPE",
- "STOR_TYPE",
- "SIZE",
- "RETR_SIZE",
- "STOR_SIZE",
- "REST",
- "RETR_REST",
- "PORT",
- "PRET",
- "PASV",
- "LIST",
- "RETR",
- "STOR",
- "QUIT"
-};
-#endif
-
-/* This is the ONLY way to change FTP state! */
-static void _state(struct connectdata *conn,
- ftpstate newstate
-#ifdef DEBUGBUILD
- , int lineno
-#endif
- )
-{
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- if(ftpc->state != newstate)
- infof(conn->data, "FTP %p (line %d) state change from %s to %s\n",
- (void *)ftpc, lineno, ftp_state_names[ftpc->state],
- ftp_state_names[newstate]);
-#endif
- ftpc->state = newstate;
-}
-
-static CURLcode ftp_state_user(struct connectdata *conn)
-{
- CURLcode result;
- struct FTP *ftp = conn->data->req.protop;
- /* send USER */
- PPSENDF(&conn->proto.ftpc.pp, "USER %s", ftp->user?ftp->user:"");
-
- state(conn, FTP_USER);
- conn->data->state.ftp_trying_alternative = FALSE;
-
- return CURLE_OK;
-}
-
-static CURLcode ftp_state_pwd(struct connectdata *conn)
-{
- CURLcode result;
-
- /* send PWD to discover our entry point */
- PPSENDF(&conn->proto.ftpc.pp, "%s", "PWD");
- state(conn, FTP_PWD);
-
- return CURLE_OK;
-}
-
-/* For the FTP "protocol connect" and "doing" phases only */
-static int ftp_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- return Curl_pp_getsock(&conn->proto.ftpc.pp, socks, numsocks);
-}
-
-/* For the FTP "DO_MORE" phase only */
-static int ftp_domore_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks)
-{
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- if(!numsocks)
- return GETSOCK_BLANK;
-
- /* When in DO_MORE state, we could be either waiting for us to connect to a
- * remote site, or we could wait for that site to connect to us. Or just
- * handle ordinary commands.
- */
-
- if(FTP_STOP == ftpc->state) {
- int bits = GETSOCK_READSOCK(0);
-
- /* if stopped and still in this state, then we're also waiting for a
- connect on the secondary connection */
- socks[0] = conn->sock[FIRSTSOCKET];
-
- if(!conn->data->set.ftp_use_port) {
- int s;
- int i;
- /* PORT is used to tell the server to connect to us, and during that we
- don't do happy eyeballs, but we do if we connect to the server */
- for(s=1, i=0; i<2; i++) {
- if(conn->tempsock[i] != CURL_SOCKET_BAD) {
- socks[s] = conn->tempsock[i];
- bits |= GETSOCK_WRITESOCK(s++);
- }
- }
- }
- else {
- socks[1] = conn->sock[SECONDARYSOCKET];
- bits |= GETSOCK_WRITESOCK(1);
- }
-
- return bits;
- }
- else
- return Curl_pp_getsock(&conn->proto.ftpc.pp, socks, numsocks);
-}
-
-/* This is called after the FTP_QUOTE state is passed.
-
- ftp_state_cwd() sends the range of CWD commands to the server to change to
- the correct directory. It may also need to send MKD commands to create
- missing ones, if that option is enabled.
-*/
-static CURLcode ftp_state_cwd(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- if(ftpc->cwddone)
- /* already done and fine */
- result = ftp_state_mdtm(conn);
- else {
- ftpc->count2 = 0; /* count2 counts failed CWDs */
-
- /* count3 is set to allow a MKD to fail once. In the case when first CWD
- fails and then MKD fails (due to another session raced it to create the
- dir) this then allows for a second try to CWD to it */
- ftpc->count3 = (conn->data->set.ftp_create_missing_dirs==2)?1:0;
-
- if(conn->bits.reuse && ftpc->entrypath) {
- /* This is a re-used connection. Since we change directory to where the
- transfer is taking place, we must first get back to the original dir
- where we ended up after login: */
- ftpc->count1 = 0; /* we count this as the first path, then we add one
- for all upcoming ones in the ftp->dirs[] array */
- PPSENDF(&conn->proto.ftpc.pp, "CWD %s", ftpc->entrypath);
- state(conn, FTP_CWD);
- }
- else {
- if(ftpc->dirdepth) {
- ftpc->count1 = 1;
- /* issue the first CWD, the rest is sent when the CWD responses are
- received... */
- PPSENDF(&conn->proto.ftpc.pp, "CWD %s", ftpc->dirs[ftpc->count1 -1]);
- state(conn, FTP_CWD);
- }
- else {
- /* No CWD necessary */
- result = ftp_state_mdtm(conn);
- }
- }
- }
- return result;
-}
-
-typedef enum {
- EPRT,
- PORT,
- DONE
-} ftpport;
-
-static CURLcode ftp_state_use_port(struct connectdata *conn,
- ftpport fcmd) /* start with this */
-
-{
- CURLcode result = CURLE_OK;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct SessionHandle *data=conn->data;
- curl_socket_t portsock= CURL_SOCKET_BAD;
- char myhost[256] = "";
-
- struct Curl_sockaddr_storage ss;
- Curl_addrinfo *res, *ai;
- curl_socklen_t sslen;
- char hbuf[NI_MAXHOST];
- struct sockaddr *sa=(struct sockaddr *)&ss;
- struct sockaddr_in * const sa4 = (void *)sa;
-#ifdef ENABLE_IPV6
- struct sockaddr_in6 * const sa6 = (void *)sa;
-#endif
- char tmp[1024];
- static const char mode[][5] = { "EPRT", "PORT" };
- int rc;
- int error;
- char *host = NULL;
- char *string_ftpport = data->set.str[STRING_FTPPORT];
- struct Curl_dns_entry *h=NULL;
- unsigned short port_min = 0;
- unsigned short port_max = 0;
- unsigned short port;
- bool possibly_non_local = TRUE;
-
- char *addr = NULL;
-
- /* Step 1, figure out what is requested,
- * accepted format :
- * (ipv4|ipv6|domain|interface)?(:port(-range)?)?
- */
-
- if(data->set.str[STRING_FTPPORT] &&
- (strlen(data->set.str[STRING_FTPPORT]) > 1)) {
-
-#ifdef ENABLE_IPV6
- size_t addrlen = INET6_ADDRSTRLEN > strlen(string_ftpport) ?
- INET6_ADDRSTRLEN : strlen(string_ftpport);
-#else
- size_t addrlen = INET_ADDRSTRLEN > strlen(string_ftpport) ?
- INET_ADDRSTRLEN : strlen(string_ftpport);
-#endif
- char *ip_start = string_ftpport;
- char *ip_end = NULL;
- char *port_start = NULL;
- char *port_sep = NULL;
-
- addr = calloc(addrlen+1, 1);
- if(!addr)
- return CURLE_OUT_OF_MEMORY;
-
-#ifdef ENABLE_IPV6
- if(*string_ftpport == '[') {
- /* [ipv6]:port(-range) */
- ip_start = string_ftpport + 1;
- if((ip_end = strchr(string_ftpport, ']')) != NULL )
- strncpy(addr, ip_start, ip_end - ip_start);
- }
- else
-#endif
- if(*string_ftpport == ':') {
- /* :port */
- ip_end = string_ftpport;
- }
- else if((ip_end = strchr(string_ftpport, ':')) != NULL) {
- /* either ipv6 or (ipv4|domain|interface):port(-range) */
-#ifdef ENABLE_IPV6
- if(Curl_inet_pton(AF_INET6, string_ftpport, sa6) == 1) {
- /* ipv6 */
- port_min = port_max = 0;
- strcpy(addr, string_ftpport);
- ip_end = NULL; /* this got no port ! */
- }
- else
-#endif
- /* (ipv4|domain|interface):port(-range) */
- strncpy(addr, string_ftpport, ip_end - ip_start );
- }
- else
- /* ipv4|interface */
- strcpy(addr, string_ftpport);
-
- /* parse the port */
- if(ip_end != NULL) {
- if((port_start = strchr(ip_end, ':')) != NULL) {
- port_min = curlx_ultous(strtoul(port_start+1, NULL, 10));
- if((port_sep = strchr(port_start, '-')) != NULL) {
- port_max = curlx_ultous(strtoul(port_sep + 1, NULL, 10));
- }
- else
- port_max = port_min;
- }
- }
-
- /* correct errors like:
- * :1234-1230
- * :-4711 , in this case port_min is (unsigned)-1,
- * therefore port_min > port_max for all cases
- * but port_max = (unsigned)-1
- */
- if(port_min > port_max )
- port_min = port_max = 0;
-
-
- if(*addr != '\0') {
- /* attempt to get the address of the given interface name */
- switch(Curl_if2ip(conn->ip_addr->ai_family, conn->scope, addr,
- hbuf, sizeof(hbuf))) {
- case IF2IP_NOT_FOUND:
- /* not an interface, use the given string as host name instead */
- host = addr;
- break;
- case IF2IP_AF_NOT_SUPPORTED:
- return CURLE_FTP_PORT_FAILED;
- case IF2IP_FOUND:
- host = hbuf; /* use the hbuf for host name */
- }
- }
- else
- /* there was only a port(-range) given, default the host */
- host = NULL;
- } /* data->set.ftpport */
-
- if(!host) {
- /* not an interface and not a host name, get default by extracting
- the IP from the control connection */
-
- sslen = sizeof(ss);
- if(getsockname(conn->sock[FIRSTSOCKET], sa, &sslen)) {
- failf(data, "getsockname() failed: %s",
- Curl_strerror(conn, SOCKERRNO) );
- Curl_safefree(addr);
- return CURLE_FTP_PORT_FAILED;
- }
- switch(sa->sa_family) {
-#ifdef ENABLE_IPV6
- case AF_INET6:
- Curl_inet_ntop(sa->sa_family, &sa6->sin6_addr, hbuf, sizeof(hbuf));
- break;
-#endif
- default:
- Curl_inet_ntop(sa->sa_family, &sa4->sin_addr, hbuf, sizeof(hbuf));
- break;
- }
- host = hbuf; /* use this host name */
- possibly_non_local = FALSE; /* we know it is local now */
- }
-
- /* resolv ip/host to ip */
- rc = Curl_resolv(conn, host, 0, &h);
- if(rc == CURLRESOLV_PENDING)
- (void)Curl_resolver_wait_resolv(conn, &h);
- if(h) {
- res = h->addr;
- /* when we return from this function, we can forget about this entry
- to we can unlock it now already */
- Curl_resolv_unlock(data, h);
- } /* (h) */
- else
- res = NULL; /* failure! */
-
- if(res == NULL) {
- failf(data, "failed to resolve the address provided to PORT: %s", host);
- Curl_safefree(addr);
- return CURLE_FTP_PORT_FAILED;
- }
-
- Curl_safefree(addr);
- host = NULL;
-
- /* step 2, create a socket for the requested address */
-
- portsock = CURL_SOCKET_BAD;
- error = 0;
- for(ai = res; ai; ai = ai->ai_next) {
- result = Curl_socket(conn, ai, NULL, &portsock);
- if(result) {
- error = SOCKERRNO;
- continue;
- }
- break;
- }
- if(!ai) {
- failf(data, "socket failure: %s", Curl_strerror(conn, error));
- return CURLE_FTP_PORT_FAILED;
- }
-
- /* step 3, bind to a suitable local address */
-
- memcpy(sa, ai->ai_addr, ai->ai_addrlen);
- sslen = ai->ai_addrlen;
-
- for(port = port_min; port <= port_max;) {
- if(sa->sa_family == AF_INET)
- sa4->sin_port = htons(port);
-#ifdef ENABLE_IPV6
- else
- sa6->sin6_port = htons(port);
-#endif
- /* Try binding the given address. */
- if(bind(portsock, sa, sslen) ) {
- /* It failed. */
- error = SOCKERRNO;
- if(possibly_non_local && (error == EADDRNOTAVAIL)) {
- /* The requested bind address is not local. Use the address used for
- * the control connection instead and restart the port loop
- */
-
- infof(data, "bind(port=%hu) on non-local address failed: %s\n", port,
- Curl_strerror(conn, error) );
-
- sslen = sizeof(ss);
- if(getsockname(conn->sock[FIRSTSOCKET], sa, &sslen)) {
- failf(data, "getsockname() failed: %s",
- Curl_strerror(conn, SOCKERRNO) );
- Curl_closesocket(conn, portsock);
- return CURLE_FTP_PORT_FAILED;
- }
- port = port_min;
- possibly_non_local = FALSE; /* don't try this again */
- continue;
- }
- else if(error != EADDRINUSE && error != EACCES) {
- failf(data, "bind(port=%hu) failed: %s", port,
- Curl_strerror(conn, error) );
- Curl_closesocket(conn, portsock);
- return CURLE_FTP_PORT_FAILED;
- }
- }
- else
- break;
-
- port++;
- }
-
- /* maybe all ports were in use already*/
- if(port > port_max) {
- failf(data, "bind() failed, we ran out of ports!");
- Curl_closesocket(conn, portsock);
- return CURLE_FTP_PORT_FAILED;
- }
-
- /* get the name again after the bind() so that we can extract the
- port number it uses now */
- sslen = sizeof(ss);
- if(getsockname(portsock, (struct sockaddr *)sa, &sslen)) {
- failf(data, "getsockname() failed: %s",
- Curl_strerror(conn, SOCKERRNO) );
- Curl_closesocket(conn, portsock);
- return CURLE_FTP_PORT_FAILED;
- }
-
- /* step 4, listen on the socket */
-
- if(listen(portsock, 1)) {
- failf(data, "socket failure: %s", Curl_strerror(conn, SOCKERRNO));
- Curl_closesocket(conn, portsock);
- return CURLE_FTP_PORT_FAILED;
- }
-
- /* step 5, send the proper FTP command */
-
- /* get a plain printable version of the numerical address to work with
- below */
- Curl_printable_address(ai, myhost, sizeof(myhost));
-
-#ifdef ENABLE_IPV6
- if(!conn->bits.ftp_use_eprt && conn->bits.ipv6)
- /* EPRT is disabled but we are connected to a IPv6 host, so we ignore the
- request and enable EPRT again! */
- conn->bits.ftp_use_eprt = TRUE;
-#endif
-
- for(; fcmd != DONE; fcmd++) {
-
- if(!conn->bits.ftp_use_eprt && (EPRT == fcmd))
- /* if disabled, goto next */
- continue;
-
- if((PORT == fcmd) && sa->sa_family != AF_INET)
- /* PORT is ipv4 only */
- continue;
-
- switch (sa->sa_family) {
- case AF_INET:
- port = ntohs(sa4->sin_port);
- break;
-#ifdef ENABLE_IPV6
- case AF_INET6:
- port = ntohs(sa6->sin6_port);
- break;
-#endif
- default:
- continue; /* might as well skip this */
- }
-
- if(EPRT == fcmd) {
- /*
- * Two fine examples from RFC2428;
- *
- * EPRT |1|132.235.1.2|6275|
- *
- * EPRT |2|1080::8:800:200C:417A|5282|
- */
-
- result = Curl_pp_sendf(&ftpc->pp, "%s |%d|%s|%hu|", mode[fcmd],
- sa->sa_family == AF_INET?1:2,
- myhost, port);
- if(result) {
- failf(data, "Failure sending EPRT command: %s",
- curl_easy_strerror(result));
- Curl_closesocket(conn, portsock);
- /* don't retry using PORT */
- ftpc->count1 = PORT;
- /* bail out */
- state(conn, FTP_STOP);
- return result;
- }
- break;
- }
- else if(PORT == fcmd) {
- char *source = myhost;
- char *dest = tmp;
-
- /* translate x.x.x.x to x,x,x,x */
- while(source && *source) {
- if(*source == '.')
- *dest=',';
- else
- *dest = *source;
- dest++;
- source++;
- }
- *dest = 0;
- snprintf(dest, 20, ",%d,%d", (int)(port>>8), (int)(port&0xff));
-
- result = Curl_pp_sendf(&ftpc->pp, "%s %s", mode[fcmd], tmp);
- if(result) {
- failf(data, "Failure sending PORT command: %s",
- curl_easy_strerror(result));
- Curl_closesocket(conn, portsock);
- /* bail out */
- state(conn, FTP_STOP);
- return result;
- }
- break;
- }
- }
-
- /* store which command was sent */
- ftpc->count1 = fcmd;
-
- /* we set the secondary socket variable to this for now, it is only so that
- the cleanup function will close it in case we fail before the true
- secondary stuff is made */
- if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET])
- Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
- conn->sock[SECONDARYSOCKET] = portsock;
-
- /* this tcpconnect assignment below is a hackish work-around to make the
- multi interface with active FTP work - as it will not wait for a
- (passive) connect in Curl_is_connected().
-
- The *proper* fix is to make sure that the active connection from the
- server is done in a non-blocking way. Currently, it is still BLOCKING.
- */
- conn->bits.tcpconnect[SECONDARYSOCKET] = TRUE;
-
- state(conn, FTP_PORT);
- return result;
-}
-
-static CURLcode ftp_state_use_pasv(struct connectdata *conn)
-{
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- CURLcode result = CURLE_OK;
- /*
- Here's the excecutive summary on what to do:
-
- PASV is RFC959, expect:
- 227 Entering Passive Mode (a1,a2,a3,a4,p1,p2)
-
- LPSV is RFC1639, expect:
- 228 Entering Long Passive Mode (4,4,a1,a2,a3,a4,2,p1,p2)
-
- EPSV is RFC2428, expect:
- 229 Entering Extended Passive Mode (|||port|)
-
- */
-
- static const char mode[][5] = { "EPSV", "PASV" };
- int modeoff;
-
-#ifdef PF_INET6
- if(!conn->bits.ftp_use_epsv && conn->bits.ipv6)
- /* EPSV is disabled but we are connected to a IPv6 host, so we ignore the
- request and enable EPSV again! */
- conn->bits.ftp_use_epsv = TRUE;
-#endif
-
- modeoff = conn->bits.ftp_use_epsv?0:1;
-
- PPSENDF(&ftpc->pp, "%s", mode[modeoff]);
-
- ftpc->count1 = modeoff;
- state(conn, FTP_PASV);
- infof(conn->data, "Connect data stream passively\n");
-
- return result;
-}
-
-/*
- * ftp_state_prepare_transfer() starts PORT, PASV or PRET etc.
- *
- * REST is the last command in the chain of commands when a "head"-like
- * request is made. Thus, if an actual transfer is to be made this is where we
- * take off for real.
- */
-static CURLcode ftp_state_prepare_transfer(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct FTP *ftp = conn->data->req.protop;
- struct SessionHandle *data = conn->data;
-
- if(ftp->transfer != FTPTRANSFER_BODY) {
- /* doesn't transfer any data */
-
- /* still possibly do PRE QUOTE jobs */
- state(conn, FTP_RETR_PREQUOTE);
- result = ftp_state_quote(conn, TRUE, FTP_RETR_PREQUOTE);
- }
- else if(data->set.ftp_use_port) {
- /* We have chosen to use the PORT (or similar) command */
- result = ftp_state_use_port(conn, EPRT);
- }
- else {
- /* We have chosen (this is default) to use the PASV (or similar) command */
- if(data->set.ftp_use_pret) {
- /* The user has requested that we send a PRET command
- to prepare the server for the upcoming PASV */
- if(!conn->proto.ftpc.file) {
- PPSENDF(&conn->proto.ftpc.pp, "PRET %s",
- data->set.str[STRING_CUSTOMREQUEST]?
- data->set.str[STRING_CUSTOMREQUEST]:
- (data->set.ftp_list_only?"NLST":"LIST"));
- }
- else if(data->set.upload) {
- PPSENDF(&conn->proto.ftpc.pp, "PRET STOR %s", conn->proto.ftpc.file);
- }
- else {
- PPSENDF(&conn->proto.ftpc.pp, "PRET RETR %s", conn->proto.ftpc.file);
- }
- state(conn, FTP_PRET);
- }
- else {
- result = ftp_state_use_pasv(conn);
- }
- }
- return result;
-}
-
-static CURLcode ftp_state_rest(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct FTP *ftp = conn->data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- if((ftp->transfer != FTPTRANSFER_BODY) && ftpc->file) {
- /* if a "head"-like request is being made (on a file) */
-
- /* Determine if server can respond to REST command and therefore
- whether it supports range */
- PPSENDF(&conn->proto.ftpc.pp, "REST %d", 0);
-
- state(conn, FTP_REST);
- }
- else
- result = ftp_state_prepare_transfer(conn);
-
- return result;
-}
-
-static CURLcode ftp_state_size(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct FTP *ftp = conn->data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- if((ftp->transfer == FTPTRANSFER_INFO) && ftpc->file) {
- /* if a "head"-like request is being made (on a file) */
-
- /* we know ftpc->file is a valid pointer to a file name */
- PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
-
- state(conn, FTP_SIZE);
- }
- else
- result = ftp_state_rest(conn);
-
- return result;
-}
-
-static CURLcode ftp_state_list(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- /* If this output is to be machine-parsed, the NLST command might be better
- to use, since the LIST command output is not specified or standard in any
- way. It has turned out that the NLST list output is not the same on all
- servers either... */
-
- /*
- if FTPFILE_NOCWD was specified, we are currently in
- the user's home directory, so we should add the path
- as argument for the LIST / NLST / or custom command.
- Whether the server will support this, is uncertain.
-
- The other ftp_filemethods will CWD into dir/dir/ first and
- then just do LIST (in that case: nothing to do here)
- */
- char *cmd,*lstArg,*slashPos;
-
- lstArg = NULL;
- if((data->set.ftp_filemethod == FTPFILE_NOCWD) &&
- data->state.path &&
- data->state.path[0] &&
- strchr(data->state.path,'/')) {
-
- lstArg = strdup(data->state.path);
- if(!lstArg)
- return CURLE_OUT_OF_MEMORY;
-
- /* Check if path does not end with /, as then we cut off the file part */
- if(lstArg[strlen(lstArg) - 1] != '/') {
-
- /* chop off the file part if format is dir/dir/file */
- slashPos = strrchr(lstArg,'/');
- if(slashPos)
- *(slashPos+1) = '\0';
- }
- }
-
- cmd = aprintf( "%s%s%s",
- data->set.str[STRING_CUSTOMREQUEST]?
- data->set.str[STRING_CUSTOMREQUEST]:
- (data->set.ftp_list_only?"NLST":"LIST"),
- lstArg? " ": "",
- lstArg? lstArg: "" );
-
- if(!cmd) {
- if(lstArg)
- free(lstArg);
- return CURLE_OUT_OF_MEMORY;
- }
-
- result = Curl_pp_sendf(&conn->proto.ftpc.pp, "%s", cmd);
-
- if(lstArg)
- free(lstArg);
-
- free(cmd);
-
- if(result != CURLE_OK)
- return result;
-
- state(conn, FTP_LIST);
-
- return result;
-}
-
-static CURLcode ftp_state_retr_prequote(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* We've sent the TYPE, now we must send the list of prequote strings */
-
- result = ftp_state_quote(conn, TRUE, FTP_RETR_PREQUOTE);
-
- return result;
-}
-
-static CURLcode ftp_state_stor_prequote(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* We've sent the TYPE, now we must send the list of prequote strings */
-
- result = ftp_state_quote(conn, TRUE, FTP_STOR_PREQUOTE);
-
- return result;
-}
-
-static CURLcode ftp_state_type(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct FTP *ftp = conn->data->req.protop;
- struct SessionHandle *data = conn->data;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- /* If we have selected NOBODY and HEADER, it means that we only want file
- information. Which in FTP can't be much more than the file size and
- date. */
- if(data->set.opt_no_body && ftpc->file &&
- ftp_need_type(conn, data->set.prefer_ascii)) {
- /* The SIZE command is _not_ RFC 959 specified, and therefor many servers
- may not support it! It is however the only way we have to get a file's
- size! */
-
- ftp->transfer = FTPTRANSFER_INFO;
- /* this means no actual transfer will be made */
-
- /* Some servers return different sizes for different modes, and thus we
- must set the proper type before we check the size */
- result = ftp_nb_type(conn, data->set.prefer_ascii, FTP_TYPE);
- if(result)
- return result;
- }
- else
- result = ftp_state_size(conn);
-
- return result;
-}
-
-/* This is called after the CWD commands have been done in the beginning of
- the DO phase */
-static CURLcode ftp_state_mdtm(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- /* Requested time of file or time-depended transfer? */
- if((data->set.get_filetime || data->set.timecondition) && ftpc->file) {
-
- /* we have requested to get the modified-time of the file, this is a white
- spot as the MDTM is not mentioned in RFC959 */
- PPSENDF(&ftpc->pp, "MDTM %s", ftpc->file);
-
- state(conn, FTP_MDTM);
- }
- else
- result = ftp_state_type(conn);
-
- return result;
-}
-
-
-/* This is called after the TYPE and possible quote commands have been sent */
-static CURLcode ftp_state_ul_setup(struct connectdata *conn,
- bool sizechecked)
-{
- CURLcode result = CURLE_OK;
- struct FTP *ftp = conn->data->req.protop;
- struct SessionHandle *data = conn->data;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- int seekerr = CURL_SEEKFUNC_OK;
-
- if((data->state.resume_from && !sizechecked) ||
- ((data->state.resume_from > 0) && sizechecked)) {
- /* we're about to continue the uploading of a file */
- /* 1. get already existing file's size. We use the SIZE command for this
- which may not exist in the server! The SIZE command is not in
- RFC959. */
-
- /* 2. This used to set REST. But since we can do append, we
- don't another ftp command. We just skip the source file
- offset and then we APPEND the rest on the file instead */
-
- /* 3. pass file-size number of bytes in the source file */
- /* 4. lower the infilesize counter */
- /* => transfer as usual */
-
- if(data->state.resume_from < 0 ) {
- /* Got no given size to start from, figure it out */
- PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
- state(conn, FTP_STOR_SIZE);
- return result;
- }
-
- /* enable append */
- data->set.ftp_append = TRUE;
-
- /* Let's read off the proper amount of bytes from the input. */
- if(conn->seek_func) {
- seekerr = conn->seek_func(conn->seek_client, data->state.resume_from,
- SEEK_SET);
- }
-
- if(seekerr != CURL_SEEKFUNC_OK) {
- if(seekerr != CURL_SEEKFUNC_CANTSEEK) {
- failf(data, "Could not seek stream");
- return CURLE_FTP_COULDNT_USE_REST;
- }
- /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */
- else {
- curl_off_t passed=0;
- do {
- size_t readthisamountnow =
- (data->state.resume_from - passed > CURL_OFF_T_C(BUFSIZE)) ?
- BUFSIZE : curlx_sotouz(data->state.resume_from - passed);
-
- size_t actuallyread =
- conn->fread_func(data->state.buffer, 1, readthisamountnow,
- conn->fread_in);
-
- passed += actuallyread;
- if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
- /* this checks for greater-than only to make sure that the
- CURL_READFUNC_ABORT return code still aborts */
- failf(data, "Failed to read data");
- return CURLE_FTP_COULDNT_USE_REST;
- }
- } while(passed < data->state.resume_from);
- }
- }
- /* now, decrease the size of the read */
- if(data->state.infilesize>0) {
- data->state.infilesize -= data->state.resume_from;
-
- if(data->state.infilesize <= 0) {
- infof(data, "File already completely uploaded\n");
-
- /* no data to transfer */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
-
- /* Set ->transfer so that we won't get any error in
- * ftp_done() because we didn't transfer anything! */
- ftp->transfer = FTPTRANSFER_NONE;
-
- state(conn, FTP_STOP);
- return CURLE_OK;
- }
- }
- /* we've passed, proceed as normal */
- } /* resume_from */
-
- PPSENDF(&ftpc->pp, data->set.ftp_append?"APPE %s":"STOR %s",
- ftpc->file);
-
- state(conn, FTP_STOR);
-
- return result;
-}
-
-static CURLcode ftp_state_quote(struct connectdata *conn,
- bool init,
- ftpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct FTP *ftp = data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- bool quote=FALSE;
- struct curl_slist *item;
-
- switch(instate) {
- case FTP_QUOTE:
- default:
- item = data->set.quote;
- break;
- case FTP_RETR_PREQUOTE:
- case FTP_STOR_PREQUOTE:
- item = data->set.prequote;
- break;
- case FTP_POSTQUOTE:
- item = data->set.postquote;
- break;
- }
-
- /*
- * This state uses:
- * 'count1' to iterate over the commands to send
- * 'count2' to store wether to allow commands to fail
- */
-
- if(init)
- ftpc->count1 = 0;
- else
- ftpc->count1++;
-
- if(item) {
- int i = 0;
-
- /* Skip count1 items in the linked list */
- while((i< ftpc->count1) && item) {
- item = item->next;
- i++;
- }
- if(item) {
- char *cmd = item->data;
- if(cmd[0] == '*') {
- cmd++;
- ftpc->count2 = 1; /* the sent command is allowed to fail */
- }
- else
- ftpc->count2 = 0; /* failure means cancel operation */
-
- PPSENDF(&ftpc->pp, "%s", cmd);
- state(conn, instate);
- quote = TRUE;
- }
- }
-
- if(!quote) {
- /* No more quote to send, continue to ... */
- switch(instate) {
- case FTP_QUOTE:
- default:
- result = ftp_state_cwd(conn);
- break;
- case FTP_RETR_PREQUOTE:
- if(ftp->transfer != FTPTRANSFER_BODY)
- state(conn, FTP_STOP);
- else {
- if(ftpc->known_filesize != -1) {
- Curl_pgrsSetDownloadSize(data, ftpc->known_filesize);
- result = ftp_state_retr(conn, ftpc->known_filesize);
- }
- else {
- PPSENDF(&ftpc->pp, "SIZE %s", ftpc->file);
- state(conn, FTP_RETR_SIZE);
- }
- }
- break;
- case FTP_STOR_PREQUOTE:
- result = ftp_state_ul_setup(conn, FALSE);
- break;
- case FTP_POSTQUOTE:
- break;
- }
- }
-
- return result;
-}
-
-/* called from ftp_state_pasv_resp to switch to PASV in case of EPSV
- problems */
-static CURLcode ftp_epsv_disable(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- infof(conn->data, "Failed EPSV attempt. Disabling EPSV\n");
- /* disable it for next transfer */
- conn->bits.ftp_use_epsv = FALSE;
- conn->data->state.errorbuf = FALSE; /* allow error message to get
- rewritten */
- PPSENDF(&conn->proto.ftpc.pp, "%s", "PASV");
- conn->proto.ftpc.count1++;
- /* remain in/go to the FTP_PASV state */
- state(conn, FTP_PASV);
- return result;
-}
-
-/*
- * Perform the necessary magic that needs to be done once the TCP connection
- * to the proxy has completed.
- */
-static CURLcode proxy_magic(struct connectdata *conn,
- char *newhost, unsigned short newport,
- bool *magicdone)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data=conn->data;
-
- *magicdone = FALSE;
- switch(conn->proxytype) {
- case CURLPROXY_SOCKS5:
- case CURLPROXY_SOCKS5_HOSTNAME:
- result = Curl_SOCKS5(conn->proxyuser, conn->proxypasswd, newhost,
- newport, SECONDARYSOCKET, conn);
- *magicdone = TRUE;
- break;
- case CURLPROXY_SOCKS4:
- result = Curl_SOCKS4(conn->proxyuser, newhost, newport,
- SECONDARYSOCKET, conn, FALSE);
- *magicdone = TRUE;
- break;
- case CURLPROXY_SOCKS4A:
- result = Curl_SOCKS4(conn->proxyuser, newhost, newport,
- SECONDARYSOCKET, conn, TRUE);
- *magicdone = TRUE;
- break;
- case CURLPROXY_HTTP:
- case CURLPROXY_HTTP_1_0:
- /* do nothing here. handled later. */
- break;
- default:
- failf(data, "unknown proxytype option given");
- result = CURLE_COULDNT_CONNECT;
- break;
- }
-
- if(conn->bits.tunnel_proxy && conn->bits.httpproxy) {
- /* BLOCKING */
- /* We want "seamless" FTP operations through HTTP proxy tunnel */
-
- /* Curl_proxyCONNECT is based on a pointer to a struct HTTP at the
- * member conn->proto.http; we want FTP through HTTP and we have to
- * change the member temporarily for connecting to the HTTP proxy. After
- * Curl_proxyCONNECT we have to set back the member to the original
- * struct FTP pointer
- */
- struct HTTP http_proxy;
- struct FTP *ftp_save = data->req.protop;
- memset(&http_proxy, 0, sizeof(http_proxy));
- data->req.protop = &http_proxy;
-
- result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, newhost, newport);
-
- data->req.protop = ftp_save;
-
- if(result)
- return result;
-
- if(conn->tunnel_state[SECONDARYSOCKET] != TUNNEL_COMPLETE) {
- /* the CONNECT procedure is not complete, the tunnel is not yet up */
- state(conn, FTP_STOP); /* this phase is completed */
- return result;
- }
- else
- *magicdone = TRUE;
- }
- return result;
-}
-
-static CURLcode ftp_state_pasv_resp(struct connectdata *conn,
- int ftpcode)
-{
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- CURLcode result;
- struct SessionHandle *data=conn->data;
- struct Curl_dns_entry *addr=NULL;
- int rc;
- unsigned short connectport; /* the local port connect() should use! */
- char *str=&data->state.buffer[4]; /* start on the first letter */
-
- if((ftpc->count1 == 0) &&
- (ftpcode == 229)) {
- /* positive EPSV response */
- char *ptr = strchr(str, '(');
- if(ptr) {
- unsigned int num;
- char separator[4];
- ptr++;
- if(5 == sscanf(ptr, "%c%c%c%u%c",
- &separator[0],
- &separator[1],
- &separator[2],
- &num,
- &separator[3])) {
- const char sep1 = separator[0];
- int i;
-
- /* The four separators should be identical, or else this is an oddly
- formatted reply and we bail out immediately. */
- for(i=1; i<4; i++) {
- if(separator[i] != sep1) {
- ptr=NULL; /* set to NULL to signal error */
- break;
- }
- }
- if(num > 0xffff) {
- failf(data, "Illegal port number in EPSV reply");
- return CURLE_FTP_WEIRD_PASV_REPLY;
- }
- if(ptr) {
- ftpc->newport = (unsigned short)(num & 0xffff);
-
- if(conn->bits.tunnel_proxy ||
- conn->proxytype == CURLPROXY_SOCKS5 ||
- conn->proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
- conn->proxytype == CURLPROXY_SOCKS4 ||
- conn->proxytype == CURLPROXY_SOCKS4A)
- /* proxy tunnel -> use other host info because ip_addr_str is the
- proxy address not the ftp host */
- snprintf(ftpc->newhost, sizeof(ftpc->newhost), "%s",
- conn->host.name);
- else
- /* use the same IP we are already connected to */
- snprintf(ftpc->newhost, NEWHOST_BUFSIZE, "%s", conn->ip_addr_str);
- }
- }
- else
- ptr=NULL;
- }
- if(!ptr) {
- failf(data, "Weirdly formatted EPSV reply");
- return CURLE_FTP_WEIRD_PASV_REPLY;
- }
- }
- else if((ftpc->count1 == 1) &&
- (ftpcode == 227)) {
- /* positive PASV response */
- int ip[4];
- int port[2];
-
- /*
- * Scan for a sequence of six comma-separated numbers and use them as
- * IP+port indicators.
- *
- * Found reply-strings include:
- * "227 Entering Passive Mode (127,0,0,1,4,51)"
- * "227 Data transfer will passively listen to 127,0,0,1,4,51"
- * "227 Entering passive mode. 127,0,0,1,4,51"
- */
- while(*str) {
- if(6 == sscanf(str, "%d,%d,%d,%d,%d,%d",
- &ip[0], &ip[1], &ip[2], &ip[3],
- &port[0], &port[1]))
- break;
- str++;
- }
-
- if(!*str) {
- failf(data, "Couldn't interpret the 227-response");
- return CURLE_FTP_WEIRD_227_FORMAT;
- }
-
- /* we got OK from server */
- if(data->set.ftp_skip_ip) {
- /* told to ignore the remotely given IP but instead use the one we used
- for the control connection */
- infof(data, "Skips %d.%d.%d.%d for data connection, uses %s instead\n",
- ip[0], ip[1], ip[2], ip[3],
- conn->ip_addr_str);
- if(conn->bits.tunnel_proxy ||
- conn->proxytype == CURLPROXY_SOCKS5 ||
- conn->proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
- conn->proxytype == CURLPROXY_SOCKS4 ||
- conn->proxytype == CURLPROXY_SOCKS4A)
- /* proxy tunnel -> use other host info because ip_addr_str is the
- proxy address not the ftp host */
- snprintf(ftpc->newhost, sizeof(ftpc->newhost), "%s", conn->host.name);
- else
- snprintf(ftpc->newhost, sizeof(ftpc->newhost), "%s",
- conn->ip_addr_str);
- }
- else
- snprintf(ftpc->newhost, sizeof(ftpc->newhost),
- "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
- ftpc->newport = (unsigned short)(((port[0]<<8) + port[1]) & 0xffff);
- }
- else if(ftpc->count1 == 0) {
- /* EPSV failed, move on to PASV */
- return ftp_epsv_disable(conn);
- }
- else {
- failf(data, "Bad PASV/EPSV response: %03d", ftpcode);
- return CURLE_FTP_WEIRD_PASV_REPLY;
- }
-
- if(conn->bits.proxy) {
- /*
- * This connection uses a proxy and we need to connect to the proxy again
- * here. We don't want to rely on a former host lookup that might've
- * expired now, instead we remake the lookup here and now!
- */
- rc = Curl_resolv(conn, conn->proxy.name, (int)conn->port, &addr);
- if(rc == CURLRESOLV_PENDING)
- /* BLOCKING, ignores the return code but 'addr' will be NULL in
- case of failure */
- (void)Curl_resolver_wait_resolv(conn, &addr);
-
- connectport =
- (unsigned short)conn->port; /* we connect to the proxy's port */
-
- if(!addr) {
- failf(data, "Can't resolve proxy host %s:%hu",
- conn->proxy.name, connectport);
- return CURLE_FTP_CANT_GET_HOST;
- }
- }
- else {
- /* normal, direct, ftp connection */
- rc = Curl_resolv(conn, ftpc->newhost, ftpc->newport, &addr);
- if(rc == CURLRESOLV_PENDING)
- /* BLOCKING */
- (void)Curl_resolver_wait_resolv(conn, &addr);
-
- connectport = ftpc->newport; /* we connect to the remote port */
-
- if(!addr) {
- failf(data, "Can't resolve new host %s:%hu", ftpc->newhost, connectport);
- return CURLE_FTP_CANT_GET_HOST;
- }
- }
-
- conn->bits.tcpconnect[SECONDARYSOCKET] = FALSE;
- result = Curl_connecthost(conn, addr);
-
- Curl_resolv_unlock(data, addr); /* we're done using this address */
-
- if(result) {
- if(ftpc->count1 == 0 && ftpcode == 229)
- return ftp_epsv_disable(conn);
-
- return result;
- }
-
-
- /*
- * When this is used from the multi interface, this might've returned with
- * the 'connected' set to FALSE and thus we are now awaiting a non-blocking
- * connect to connect.
- */
-
- if(data->set.verbose)
- /* this just dumps information about this second connection */
- ftp_pasv_verbose(conn, conn->ip_addr, ftpc->newhost, connectport);
-
- conn->bits.do_more = TRUE;
- state(conn, FTP_STOP); /* this phase is completed */
-
- return result;
-}
-
-static CURLcode ftp_state_port_resp(struct connectdata *conn,
- int ftpcode)
-{
- struct SessionHandle *data = conn->data;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- ftpport fcmd = (ftpport)ftpc->count1;
- CURLcode result = CURLE_OK;
-
- if(ftpcode != 200) {
- /* the command failed */
-
- if(EPRT == fcmd) {
- infof(data, "disabling EPRT usage\n");
- conn->bits.ftp_use_eprt = FALSE;
- }
- fcmd++;
-
- if(fcmd == DONE) {
- failf(data, "Failed to do PORT");
- result = CURLE_FTP_PORT_FAILED;
- }
- else
- /* try next */
- result = ftp_state_use_port(conn, fcmd);
- }
- else {
- infof(data, "Connect data stream actively\n");
- state(conn, FTP_STOP); /* end of DO phase */
- result = ftp_dophase_done(conn, FALSE);
- }
-
- return result;
-}
-
-static CURLcode ftp_state_mdtm_resp(struct connectdata *conn,
- int ftpcode)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data=conn->data;
- struct FTP *ftp = data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- switch(ftpcode) {
- case 213:
- {
- /* we got a time. Format should be: "YYYYMMDDHHMMSS[.sss]" where the
- last .sss part is optional and means fractions of a second */
- int year, month, day, hour, minute, second;
- char *buf = data->state.buffer;
- if(6 == sscanf(buf+4, "%04d%02d%02d%02d%02d%02d",
- &year, &month, &day, &hour, &minute, &second)) {
- /* we have a time, reformat it */
- time_t secs=time(NULL);
- /* using the good old yacc/bison yuck */
- snprintf(buf, sizeof(conn->data->state.buffer),
- "%04d%02d%02d %02d:%02d:%02d GMT",
- year, month, day, hour, minute, second);
- /* now, convert this into a time() value: */
- data->info.filetime = (long)curl_getdate(buf, &secs);
- }
-
-#ifdef CURL_FTP_HTTPSTYLE_HEAD
- /* If we asked for a time of the file and we actually got one as well,
- we "emulate" a HTTP-style header in our output. */
-
- if(data->set.opt_no_body &&
- ftpc->file &&
- data->set.get_filetime &&
- (data->info.filetime>=0) ) {
- time_t filetime = (time_t)data->info.filetime;
- struct tm buffer;
- const struct tm *tm = &buffer;
-
- result = Curl_gmtime(filetime, &buffer);
- if(result)
- return result;
-
- /* format: "Tue, 15 Nov 1994 12:45:26" */
- snprintf(buf, BUFSIZE-1,
- "Last-Modified: %s, %02d %s %4d %02d:%02d:%02d GMT\r\n",
- Curl_wkday[tm->tm_wday?tm->tm_wday-1:6],
- tm->tm_mday,
- Curl_month[tm->tm_mon],
- tm->tm_year + 1900,
- tm->tm_hour,
- tm->tm_min,
- tm->tm_sec);
- result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
- if(result)
- return result;
- } /* end of a ridiculous amount of conditionals */
-#endif
- }
- break;
- default:
- infof(data, "unsupported MDTM reply format\n");
- break;
- case 550: /* "No such file or directory" */
- failf(data, "Given file does not exist");
- result = CURLE_FTP_COULDNT_RETR_FILE;
- break;
- }
-
- if(data->set.timecondition) {
- if((data->info.filetime > 0) && (data->set.timevalue > 0)) {
- switch(data->set.timecondition) {
- case CURL_TIMECOND_IFMODSINCE:
- default:
- if(data->info.filetime <= data->set.timevalue) {
- infof(data, "The requested document is not new enough\n");
- ftp->transfer = FTPTRANSFER_NONE; /* mark to not transfer data */
- data->info.timecond = TRUE;
- state(conn, FTP_STOP);
- return CURLE_OK;
- }
- break;
- case CURL_TIMECOND_IFUNMODSINCE:
- if(data->info.filetime > data->set.timevalue) {
- infof(data, "The requested document is not old enough\n");
- ftp->transfer = FTPTRANSFER_NONE; /* mark to not transfer data */
- data->info.timecond = TRUE;
- state(conn, FTP_STOP);
- return CURLE_OK;
- }
- break;
- } /* switch */
- }
- else {
- infof(data, "Skipping time comparison\n");
- }
- }
-
- if(!result)
- result = ftp_state_type(conn);
-
- return result;
-}
-
-static CURLcode ftp_state_type_resp(struct connectdata *conn,
- int ftpcode,
- ftpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data=conn->data;
-
- if(ftpcode/100 != 2) {
- /* "sasserftpd" and "(u)r(x)bot ftpd" both responds with 226 after a
- successful 'TYPE I'. While that is not as RFC959 says, it is still a
- positive response code and we allow that. */
- failf(data, "Couldn't set desired mode");
- return CURLE_FTP_COULDNT_SET_TYPE;
- }
- if(ftpcode != 200)
- infof(data, "Got a %03d response code instead of the assumed 200\n",
- ftpcode);
-
- if(instate == FTP_TYPE)
- result = ftp_state_size(conn);
- else if(instate == FTP_LIST_TYPE)
- result = ftp_state_list(conn);
- else if(instate == FTP_RETR_TYPE)
- result = ftp_state_retr_prequote(conn);
- else if(instate == FTP_STOR_TYPE)
- result = ftp_state_stor_prequote(conn);
-
- return result;
-}
-
-static CURLcode ftp_state_retr(struct connectdata *conn,
- curl_off_t filesize)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data=conn->data;
- struct FTP *ftp = data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- if(data->set.max_filesize && (filesize > data->set.max_filesize)) {
- failf(data, "Maximum file size exceeded");
- return CURLE_FILESIZE_EXCEEDED;
- }
- ftp->downloadsize = filesize;
-
- if(data->state.resume_from) {
- /* We always (attempt to) get the size of downloads, so it is done before
- this even when not doing resumes. */
- if(filesize == -1) {
- infof(data, "ftp server doesn't support SIZE\n");
- /* We couldn't get the size and therefore we can't know if there really
- is a part of the file left to get, although the server will just
- close the connection when we start the connection so it won't cause
- us any harm, just not make us exit as nicely. */
- }
- else {
- /* We got a file size report, so we check that there actually is a
- part of the file left to get, or else we go home. */
- if(data->state.resume_from< 0) {
- /* We're supposed to download the last abs(from) bytes */
- if(filesize < -data->state.resume_from) {
- failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T
- ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")",
- data->state.resume_from, filesize);
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
- /* convert to size to download */
- ftp->downloadsize = -data->state.resume_from;
- /* download from where? */
- data->state.resume_from = filesize - ftp->downloadsize;
- }
- else {
- if(filesize < data->state.resume_from) {
- failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T
- ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")",
- data->state.resume_from, filesize);
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
- /* Now store the number of bytes we are expected to download */
- ftp->downloadsize = filesize-data->state.resume_from;
- }
- }
-
- if(ftp->downloadsize == 0) {
- /* no data to transfer */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- infof(data, "File already completely downloaded\n");
-
- /* Set ->transfer so that we won't get any error in ftp_done()
- * because we didn't transfer the any file */
- ftp->transfer = FTPTRANSFER_NONE;
- state(conn, FTP_STOP);
- return CURLE_OK;
- }
-
- /* Set resume file transfer offset */
- infof(data, "Instructs server to resume from offset %"
- CURL_FORMAT_CURL_OFF_T "\n", data->state.resume_from);
-
- PPSENDF(&ftpc->pp, "REST %" CURL_FORMAT_CURL_OFF_T,
- data->state.resume_from);
-
- state(conn, FTP_RETR_REST);
- }
- else {
- /* no resume */
- PPSENDF(&ftpc->pp, "RETR %s", ftpc->file);
- state(conn, FTP_RETR);
- }
-
- return result;
-}
-
-static CURLcode ftp_state_size_resp(struct connectdata *conn,
- int ftpcode,
- ftpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data=conn->data;
- curl_off_t filesize;
- char *buf = data->state.buffer;
-
- /* get the size from the ascii string: */
- filesize = (ftpcode == 213)?curlx_strtoofft(buf+4, NULL, 0):-1;
-
- if(instate == FTP_SIZE) {
-#ifdef CURL_FTP_HTTPSTYLE_HEAD
- if(-1 != filesize) {
- snprintf(buf, sizeof(data->state.buffer),
- "Content-Length: %" CURL_FORMAT_CURL_OFF_T "\r\n", filesize);
- result = Curl_client_write(conn, CLIENTWRITE_BOTH, buf, 0);
- if(result)
- return result;
- }
-#endif
- Curl_pgrsSetDownloadSize(data, filesize);
- result = ftp_state_rest(conn);
- }
- else if(instate == FTP_RETR_SIZE) {
- Curl_pgrsSetDownloadSize(data, filesize);
- result = ftp_state_retr(conn, filesize);
- }
- else if(instate == FTP_STOR_SIZE) {
- data->state.resume_from = filesize;
- result = ftp_state_ul_setup(conn, TRUE);
- }
-
- return result;
-}
-
-static CURLcode ftp_state_rest_resp(struct connectdata *conn,
- int ftpcode,
- ftpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- switch(instate) {
- case FTP_REST:
- default:
-#ifdef CURL_FTP_HTTPSTYLE_HEAD
- if(ftpcode == 350) {
- char buffer[24]= { "Accept-ranges: bytes\r\n" };
- result = Curl_client_write(conn, CLIENTWRITE_BOTH, buffer, 0);
- if(result)
- return result;
- }
-#endif
- result = ftp_state_prepare_transfer(conn);
- break;
-
- case FTP_RETR_REST:
- if(ftpcode != 350) {
- failf(conn->data, "Couldn't use REST");
- result = CURLE_FTP_COULDNT_USE_REST;
- }
- else {
- PPSENDF(&ftpc->pp, "RETR %s", ftpc->file);
- state(conn, FTP_RETR);
- }
- break;
- }
-
- return result;
-}
-
-static CURLcode ftp_state_stor_resp(struct connectdata *conn,
- int ftpcode, ftpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- if(ftpcode>=400) {
- failf(data, "Failed FTP upload: %0d", ftpcode);
- state(conn, FTP_STOP);
- /* oops, we never close the sockets! */
- return CURLE_UPLOAD_FAILED;
- }
-
- conn->proto.ftpc.state_saved = instate;
-
- /* PORT means we are now awaiting the server to connect to us. */
- if(data->set.ftp_use_port) {
- bool connected;
-
- state(conn, FTP_STOP); /* no longer in STOR state */
-
- result = AllowServerConnect(conn, &connected);
- if(result)
- return result;
-
- if(!connected) {
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- infof(data, "Data conn was not available immediately\n");
- ftpc->wait_data_conn = TRUE;
- }
-
- return CURLE_OK;
- }
- else
- return InitiateTransfer(conn);
-}
-
-/* for LIST and RETR responses */
-static CURLcode ftp_state_get_resp(struct connectdata *conn,
- int ftpcode,
- ftpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct FTP *ftp = data->req.protop;
- char *buf = data->state.buffer;
-
- if((ftpcode == 150) || (ftpcode == 125)) {
-
- /*
- A;
- 150 Opening BINARY mode data connection for /etc/passwd (2241
- bytes). (ok, the file is being transferred)
-
- B:
- 150 Opening ASCII mode data connection for /bin/ls
-
- C:
- 150 ASCII data connection for /bin/ls (137.167.104.91,37445) (0 bytes).
-
- D:
- 150 Opening ASCII mode data connection for [file] (0.0.0.0,0) (545 bytes)
-
- E:
- 125 Data connection already open; Transfer starting. */
-
- curl_off_t size=-1; /* default unknown size */
-
-
- /*
- * It appears that there are FTP-servers that return size 0 for files when
- * SIZE is used on the file while being in BINARY mode. To work around
- * that (stupid) behavior, we attempt to parse the RETR response even if
- * the SIZE returned size zero.
- *
- * Debugging help from Salvatore Sorrentino on February 26, 2003.
- */
-
- if((instate != FTP_LIST) &&
- !data->set.prefer_ascii &&
- (ftp->downloadsize < 1)) {
- /*
- * It seems directory listings either don't show the size or very
- * often uses size 0 anyway. ASCII transfers may very well turn out
- * that the transferred amount of data is not the same as this line
- * tells, why using this number in those cases only confuses us.
- *
- * Example D above makes this parsing a little tricky */
- char *bytes;
- bytes=strstr(buf, " bytes");
- if(bytes--) {
- long in=(long)(bytes-buf);
- /* this is a hint there is size information in there! ;-) */
- while(--in) {
- /* scan for the left parenthesis and break there */
- if('(' == *bytes)
- break;
- /* skip only digits */
- if(!ISDIGIT(*bytes)) {
- bytes=NULL;
- break;
- }
- /* one more estep backwards */
- bytes--;
- }
- /* if we have nothing but digits: */
- if(bytes++) {
- /* get the number! */
- size = curlx_strtoofft(bytes, NULL, 0);
- }
- }
- }
- else if(ftp->downloadsize > -1)
- size = ftp->downloadsize;
-
- if(size > data->req.maxdownload && data->req.maxdownload > 0)
- size = data->req.size = data->req.maxdownload;
- else if((instate != FTP_LIST) && (data->set.prefer_ascii))
- size = -1; /* kludge for servers that understate ASCII mode file size */
-
- infof(data, "Maxdownload = %" CURL_FORMAT_CURL_OFF_T "\n",
- data->req.maxdownload);
-
- if(instate != FTP_LIST)
- infof(data, "Getting file with size: %" CURL_FORMAT_CURL_OFF_T "\n",
- size);
-
- /* FTP download: */
- conn->proto.ftpc.state_saved = instate;
- conn->proto.ftpc.retr_size_saved = size;
-
- if(data->set.ftp_use_port) {
- bool connected;
-
- result = AllowServerConnect(conn, &connected);
- if(result)
- return result;
-
- if(!connected) {
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- infof(data, "Data conn was not available immediately\n");
- state(conn, FTP_STOP);
- ftpc->wait_data_conn = TRUE;
- }
- }
- else
- return InitiateTransfer(conn);
- }
- else {
- if((instate == FTP_LIST) && (ftpcode == 450)) {
- /* simply no matching files in the dir listing */
- ftp->transfer = FTPTRANSFER_NONE; /* don't download anything */
- state(conn, FTP_STOP); /* this phase is over */
- }
- else {
- failf(data, "RETR response: %03d", ftpcode);
- return instate == FTP_RETR && ftpcode == 550?
- CURLE_REMOTE_FILE_NOT_FOUND:
- CURLE_FTP_COULDNT_RETR_FILE;
- }
- }
-
- return result;
-}
-
-/* after USER, PASS and ACCT */
-static CURLcode ftp_state_loggedin(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- if(conn->ssl[FIRSTSOCKET].use) {
- /* PBSZ = PROTECTION BUFFER SIZE.
-
- The 'draft-murray-auth-ftp-ssl' (draft 12, page 7) says:
-
- Specifically, the PROT command MUST be preceded by a PBSZ
- command and a PBSZ command MUST be preceded by a successful
- security data exchange (the TLS negotiation in this case)
-
- ... (and on page 8):
-
- Thus the PBSZ command must still be issued, but must have a
- parameter of '0' to indicate that no buffering is taking place
- and the data connection should not be encapsulated.
- */
- PPSENDF(&conn->proto.ftpc.pp, "PBSZ %d", 0);
- state(conn, FTP_PBSZ);
- }
- else {
- result = ftp_state_pwd(conn);
- }
- return result;
-}
-
-/* for USER and PASS responses */
-static CURLcode ftp_state_user_resp(struct connectdata *conn,
- int ftpcode,
- ftpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct FTP *ftp = data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- (void)instate; /* no use for this yet */
-
- /* some need password anyway, and others just return 2xx ignored */
- if((ftpcode == 331) && (ftpc->state == FTP_USER)) {
- /* 331 Password required for ...
- (the server requires to send the user's password too) */
- PPSENDF(&ftpc->pp, "PASS %s", ftp->passwd?ftp->passwd:"");
- state(conn, FTP_PASS);
- }
- else if(ftpcode/100 == 2) {
- /* 230 User ... logged in.
- (the user logged in with or without password) */
- result = ftp_state_loggedin(conn);
- }
- else if(ftpcode == 332) {
- if(data->set.str[STRING_FTP_ACCOUNT]) {
- PPSENDF(&ftpc->pp, "ACCT %s", data->set.str[STRING_FTP_ACCOUNT]);
- state(conn, FTP_ACCT);
- }
- else {
- failf(data, "ACCT requested but none available");
- result = CURLE_LOGIN_DENIED;
- }
- }
- else {
- /* All other response codes, like:
-
- 530 User ... access denied
- (the server denies to log the specified user) */
-
- if(conn->data->set.str[STRING_FTP_ALTERNATIVE_TO_USER] &&
- !conn->data->state.ftp_trying_alternative) {
- /* Ok, USER failed. Let's try the supplied command. */
- PPSENDF(&conn->proto.ftpc.pp, "%s",
- conn->data->set.str[STRING_FTP_ALTERNATIVE_TO_USER]);
- conn->data->state.ftp_trying_alternative = TRUE;
- state(conn, FTP_USER);
- result = CURLE_OK;
- }
- else {
- failf(data, "Access denied: %03d", ftpcode);
- result = CURLE_LOGIN_DENIED;
- }
- }
- return result;
-}
-
-/* for ACCT response */
-static CURLcode ftp_state_acct_resp(struct connectdata *conn,
- int ftpcode)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- if(ftpcode != 230) {
- failf(data, "ACCT rejected by server: %03d", ftpcode);
- result = CURLE_FTP_WEIRD_PASS_REPLY; /* FIX */
- }
- else
- result = ftp_state_loggedin(conn);
-
- return result;
-}
-
-
-static CURLcode ftp_statemach_act(struct connectdata *conn)
-{
- CURLcode result;
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
- struct SessionHandle *data=conn->data;
- int ftpcode;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct pingpong *pp = &ftpc->pp;
- static const char ftpauth[][4] = { "SSL", "TLS" };
- size_t nread = 0;
-
- if(pp->sendleft)
- return Curl_pp_flushsend(pp);
-
- result = ftp_readresp(sock, pp, &ftpcode, &nread);
- if(result)
- return result;
-
- if(ftpcode) {
- /* we have now received a full FTP server response */
- switch(ftpc->state) {
- case FTP_WAIT220:
- if(ftpcode == 230)
- /* 230 User logged in - already! */
- return ftp_state_user_resp(conn, ftpcode, ftpc->state);
- else if(ftpcode != 220) {
- failf(data, "Got a %03d ftp-server response when 220 was expected",
- ftpcode);
- return CURLE_FTP_WEIRD_SERVER_REPLY;
- }
-
- /* We have received a 220 response fine, now we proceed. */
-#ifdef HAVE_GSSAPI
- if(data->set.krb) {
- /* If not anonymous login, try a secure login. Note that this
- procedure is still BLOCKING. */
-
- Curl_sec_request_prot(conn, "private");
- /* We set private first as default, in case the line below fails to
- set a valid level */
- Curl_sec_request_prot(conn, data->set.str[STRING_KRB_LEVEL]);
-
- if(Curl_sec_login(conn) != CURLE_OK)
- infof(data, "Logging in with password in cleartext!\n");
- else
- infof(data, "Authentication successful\n");
- }
-#endif
-
- if(data->set.use_ssl && !conn->ssl[FIRSTSOCKET].use) {
- /* We don't have a SSL/TLS connection yet, but FTPS is
- requested. Try a FTPS connection now */
-
- ftpc->count3=0;
- switch(data->set.ftpsslauth) {
- case CURLFTPAUTH_DEFAULT:
- case CURLFTPAUTH_SSL:
- ftpc->count2 = 1; /* add one to get next */
- ftpc->count1 = 0;
- break;
- case CURLFTPAUTH_TLS:
- ftpc->count2 = -1; /* subtract one to get next */
- ftpc->count1 = 1;
- break;
- default:
- failf(data, "unsupported parameter to CURLOPT_FTPSSLAUTH: %d",
- (int)data->set.ftpsslauth);
- return CURLE_UNKNOWN_OPTION; /* we don't know what to do */
- }
- PPSENDF(&ftpc->pp, "AUTH %s", ftpauth[ftpc->count1]);
- state(conn, FTP_AUTH);
- }
- else {
- result = ftp_state_user(conn);
- if(result)
- return result;
- }
-
- break;
-
- case FTP_AUTH:
- /* we have gotten the response to a previous AUTH command */
-
- /* RFC2228 (page 5) says:
- *
- * If the server is willing to accept the named security mechanism,
- * and does not require any security data, it must respond with
- * reply code 234/334.
- */
-
- if((ftpcode == 234) || (ftpcode == 334)) {
- /* Curl_ssl_connect is BLOCKING */
- result = Curl_ssl_connect(conn, FIRSTSOCKET);
- if(CURLE_OK == result) {
- conn->ssl[SECONDARYSOCKET].use = FALSE; /* clear-text data */
- result = ftp_state_user(conn);
- }
- }
- else if(ftpc->count3 < 1) {
- ftpc->count3++;
- ftpc->count1 += ftpc->count2; /* get next attempt */
- result = Curl_pp_sendf(&ftpc->pp, "AUTH %s", ftpauth[ftpc->count1]);
- /* remain in this same state */
- }
- else {
- if(data->set.use_ssl > CURLUSESSL_TRY)
- /* we failed and CURLUSESSL_CONTROL or CURLUSESSL_ALL is set */
- result = CURLE_USE_SSL_FAILED;
- else
- /* ignore the failure and continue */
- result = ftp_state_user(conn);
- }
-
- if(result)
- return result;
- break;
-
- case FTP_USER:
- case FTP_PASS:
- result = ftp_state_user_resp(conn, ftpcode, ftpc->state);
- break;
-
- case FTP_ACCT:
- result = ftp_state_acct_resp(conn, ftpcode);
- break;
-
- case FTP_PBSZ:
- PPSENDF(&ftpc->pp, "PROT %c",
- data->set.use_ssl == CURLUSESSL_CONTROL ? 'C' : 'P');
- state(conn, FTP_PROT);
-
- break;
-
- case FTP_PROT:
- if(ftpcode/100 == 2)
- /* We have enabled SSL for the data connection! */
- conn->ssl[SECONDARYSOCKET].use =
- (data->set.use_ssl != CURLUSESSL_CONTROL) ? TRUE : FALSE;
- /* FTP servers typically responds with 500 if they decide to reject
- our 'P' request */
- else if(data->set.use_ssl > CURLUSESSL_CONTROL)
- /* we failed and bails out */
- return CURLE_USE_SSL_FAILED;
-
- if(data->set.ftp_ccc) {
- /* CCC - Clear Command Channel
- */
- PPSENDF(&ftpc->pp, "%s", "CCC");
- state(conn, FTP_CCC);
- }
- else {
- result = ftp_state_pwd(conn);
- if(result)
- return result;
- }
- break;
-
- case FTP_CCC:
- if(ftpcode < 500) {
- /* First shut down the SSL layer (note: this call will block) */
- result = Curl_ssl_shutdown(conn, FIRSTSOCKET);
-
- if(result) {
- failf(conn->data, "Failed to clear the command channel (CCC)");
- return result;
- }
- }
-
- /* Then continue as normal */
- result = ftp_state_pwd(conn);
- if(result)
- return result;
- break;
-
- case FTP_PWD:
- if(ftpcode == 257) {
- char *ptr=&data->state.buffer[4]; /* start on the first letter */
- char *dir;
- char *store;
-
- dir = malloc(nread + 1);
- if(!dir)
- return CURLE_OUT_OF_MEMORY;
-
- /* Reply format is like
- 257<space>[rubbish]"<directory-name>"<space><commentary> and the
- RFC959 says
-
- The directory name can contain any character; embedded
- double-quotes should be escaped by double-quotes (the
- "quote-doubling" convention).
- */
-
- /* scan for the first double-quote for non-standard responses */
- while(ptr < &data->state.buffer[sizeof(data->state.buffer)]
- && *ptr != '\n' && *ptr != '\0' && *ptr != '"')
- ptr++;
-
- if('\"' == *ptr) {
- /* it started good */
- ptr++;
- for(store = dir; *ptr;) {
- if('\"' == *ptr) {
- if('\"' == ptr[1]) {
- /* "quote-doubling" */
- *store = ptr[1];
- ptr++;
- }
- else {
- /* end of path */
- *store = '\0'; /* zero terminate */
- break; /* get out of this loop */
- }
- }
- else
- *store = *ptr;
- store++;
- ptr++;
- }
-
- /* If the path name does not look like an absolute path (i.e.: it
- does not start with a '/'), we probably need some server-dependent
- adjustments. For example, this is the case when connecting to
- an OS400 FTP server: this server supports two name syntaxes,
- the default one being incompatible with standard pathes. In
- addition, this server switches automatically to the regular path
- syntax when one is encountered in a command: this results in
- having an entrypath in the wrong syntax when later used in CWD.
- The method used here is to check the server OS: we do it only
- if the path name looks strange to minimize overhead on other
- systems. */
-
- if(!ftpc->server_os && dir[0] != '/') {
-
- result = Curl_pp_sendf(&ftpc->pp, "%s", "SYST");
- if(result != CURLE_OK) {
- free(dir);
- return result;
- }
- Curl_safefree(ftpc->entrypath);
- ftpc->entrypath = dir; /* remember this */
- infof(data, "Entry path is '%s'\n", ftpc->entrypath);
- /* also save it where getinfo can access it: */
- data->state.most_recent_ftp_entrypath = ftpc->entrypath;
- state(conn, FTP_SYST);
- break;
- }
-
- Curl_safefree(ftpc->entrypath);
- ftpc->entrypath = dir; /* remember this */
- infof(data, "Entry path is '%s'\n", ftpc->entrypath);
- /* also save it where getinfo can access it: */
- data->state.most_recent_ftp_entrypath = ftpc->entrypath;
- }
- else {
- /* couldn't get the path */
- free(dir);
- infof(data, "Failed to figure out path\n");
- }
- }
- state(conn, FTP_STOP); /* we are done with the CONNECT phase! */
- DEBUGF(infof(data, "protocol connect phase DONE\n"));
- break;
-
- case FTP_SYST:
- if(ftpcode == 215) {
- char *ptr=&data->state.buffer[4]; /* start on the first letter */
- char *os;
- char *store;
-
- os = malloc(nread + 1);
- if(!os)
- return CURLE_OUT_OF_MEMORY;
-
- /* Reply format is like
- 215<space><OS-name><space><commentary>
- */
- while(*ptr == ' ')
- ptr++;
- for(store = os; *ptr && *ptr != ' ';)
- *store++ = *ptr++;
- *store = '\0'; /* zero terminate */
-
- /* Check for special servers here. */
-
- if(strequal(os, "OS/400")) {
- /* Force OS400 name format 1. */
- result = Curl_pp_sendf(&ftpc->pp, "%s", "SITE NAMEFMT 1");
- if(result != CURLE_OK) {
- free(os);
- return result;
- }
- /* remember target server OS */
- Curl_safefree(ftpc->server_os);
- ftpc->server_os = os;
- state(conn, FTP_NAMEFMT);
- break;
- }
- else {
- /* Nothing special for the target server. */
- /* remember target server OS */
- Curl_safefree(ftpc->server_os);
- ftpc->server_os = os;
- }
- }
- else {
- /* Cannot identify server OS. Continue anyway and cross fingers. */
- }
-
- state(conn, FTP_STOP); /* we are done with the CONNECT phase! */
- DEBUGF(infof(data, "protocol connect phase DONE\n"));
- break;
-
- case FTP_NAMEFMT:
- if(ftpcode == 250) {
- /* Name format change successful: reload initial path. */
- ftp_state_pwd(conn);
- break;
- }
-
- state(conn, FTP_STOP); /* we are done with the CONNECT phase! */
- DEBUGF(infof(data, "protocol connect phase DONE\n"));
- break;
-
- case FTP_QUOTE:
- case FTP_POSTQUOTE:
- case FTP_RETR_PREQUOTE:
- case FTP_STOR_PREQUOTE:
- if((ftpcode >= 400) && !ftpc->count2) {
- /* failure response code, and not allowed to fail */
- failf(conn->data, "QUOT command failed with %03d", ftpcode);
- return CURLE_QUOTE_ERROR;
- }
- result = ftp_state_quote(conn, FALSE, ftpc->state);
- if(result)
- return result;
-
- break;
-
- case FTP_CWD:
- if(ftpcode/100 != 2) {
- /* failure to CWD there */
- if(conn->data->set.ftp_create_missing_dirs &&
- ftpc->count1 && !ftpc->count2) {
- /* try making it */
- ftpc->count2++; /* counter to prevent CWD-MKD loops */
- PPSENDF(&ftpc->pp, "MKD %s", ftpc->dirs[ftpc->count1 - 1]);
- state(conn, FTP_MKD);
- }
- else {
- /* return failure */
- failf(data, "Server denied you to change to the given directory");
- ftpc->cwdfail = TRUE; /* don't remember this path as we failed
- to enter it */
- return CURLE_REMOTE_ACCESS_DENIED;
- }
- }
- else {
- /* success */
- ftpc->count2=0;
- if(++ftpc->count1 <= ftpc->dirdepth) {
- /* send next CWD */
- PPSENDF(&ftpc->pp, "CWD %s", ftpc->dirs[ftpc->count1 - 1]);
- }
- else {
- result = ftp_state_mdtm(conn);
- if(result)
- return result;
- }
- }
- break;
-
- case FTP_MKD:
- if((ftpcode/100 != 2) && !ftpc->count3--) {
- /* failure to MKD the dir */
- failf(data, "Failed to MKD dir: %03d", ftpcode);
- return CURLE_REMOTE_ACCESS_DENIED;
- }
- state(conn, FTP_CWD);
- /* send CWD */
- PPSENDF(&ftpc->pp, "CWD %s", ftpc->dirs[ftpc->count1 - 1]);
- break;
-
- case FTP_MDTM:
- result = ftp_state_mdtm_resp(conn, ftpcode);
- break;
-
- case FTP_TYPE:
- case FTP_LIST_TYPE:
- case FTP_RETR_TYPE:
- case FTP_STOR_TYPE:
- result = ftp_state_type_resp(conn, ftpcode, ftpc->state);
- break;
-
- case FTP_SIZE:
- case FTP_RETR_SIZE:
- case FTP_STOR_SIZE:
- result = ftp_state_size_resp(conn, ftpcode, ftpc->state);
- break;
-
- case FTP_REST:
- case FTP_RETR_REST:
- result = ftp_state_rest_resp(conn, ftpcode, ftpc->state);
- break;
-
- case FTP_PRET:
- if(ftpcode != 200) {
- /* there only is this one standard OK return code. */
- failf(data, "PRET command not accepted: %03d", ftpcode);
- return CURLE_FTP_PRET_FAILED;
- }
- result = ftp_state_use_pasv(conn);
- break;
-
- case FTP_PASV:
- result = ftp_state_pasv_resp(conn, ftpcode);
- break;
-
- case FTP_PORT:
- result = ftp_state_port_resp(conn, ftpcode);
- break;
-
- case FTP_LIST:
- case FTP_RETR:
- result = ftp_state_get_resp(conn, ftpcode, ftpc->state);
- break;
-
- case FTP_STOR:
- result = ftp_state_stor_resp(conn, ftpcode, ftpc->state);
- break;
-
- case FTP_QUIT:
- /* fallthrough, just stop! */
- default:
- /* internal error */
- state(conn, FTP_STOP);
- break;
- }
- } /* if(ftpcode) */
-
- return result;
-}
-
-
-/* called repeatedly until done from multi.c */
-static CURLcode ftp_multi_statemach(struct connectdata *conn,
- bool *done)
-{
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- CURLcode result = Curl_pp_statemach(&ftpc->pp, FALSE);
-
- /* Check for the state outside of the Curl_socket_ready() return code checks
- since at times we are in fact already in this state when this function
- gets called. */
- *done = (ftpc->state == FTP_STOP) ? TRUE : FALSE;
-
- return result;
-}
-
-static CURLcode ftp_block_statemach(struct connectdata *conn)
-{
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct pingpong *pp = &ftpc->pp;
- CURLcode result = CURLE_OK;
-
- while(ftpc->state != FTP_STOP) {
- result = Curl_pp_statemach(pp, TRUE);
- if(result)
- break;
- }
-
- return result;
-}
-
-/*
- * ftp_connect() should do everything that is to be considered a part of
- * the connection phase.
- *
- * The variable 'done' points to will be TRUE if the protocol-layer connect
- * phase is done when this function returns, or FALSE if not.
- *
- */
-static CURLcode ftp_connect(struct connectdata *conn,
- bool *done) /* see description above */
-{
- CURLcode result;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct pingpong *pp = &ftpc->pp;
-
- *done = FALSE; /* default to not done yet */
-
- /* We always support persistent connections on ftp */
- connkeep(conn, "FTP default");
-
- pp->response_time = RESP_TIMEOUT; /* set default response time-out */
- pp->statemach_act = ftp_statemach_act;
- pp->endofresp = ftp_endofresp;
- pp->conn = conn;
-
- if(conn->handler->flags & PROTOPT_SSL) {
- /* BLOCKING */
- result = Curl_ssl_connect(conn, FIRSTSOCKET);
- if(result)
- return result;
- }
-
- Curl_pp_init(pp); /* init the generic pingpong data */
-
- /* When we connect, we start in the state where we await the 220
- response */
- state(conn, FTP_WAIT220);
-
- result = ftp_multi_statemach(conn, done);
-
- return result;
-}
-
-/***********************************************************************
- *
- * ftp_done()
- *
- * The DONE function. This does what needs to be done after a single DO has
- * performed.
- *
- * Input argument is already checked for validity.
- */
-static CURLcode ftp_done(struct connectdata *conn, CURLcode status,
- bool premature)
-{
- struct SessionHandle *data = conn->data;
- struct FTP *ftp = data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct pingpong *pp = &ftpc->pp;
- ssize_t nread;
- int ftpcode;
- CURLcode result = CURLE_OK;
- bool was_ctl_valid = ftpc->ctl_valid;
- char *path;
- const char *path_to_use = data->state.path;
-
- if(!ftp)
- /* When the easy handle is removed from the multi while libcurl is still
- * trying to resolve the host name, it seems that the ftp struct is not
- * yet initialized, but the removal action calls Curl_done() which calls
- * this function. So we simply return success if no ftp pointer is set.
- */
- return CURLE_OK;
-
- switch(status) {
- case CURLE_BAD_DOWNLOAD_RESUME:
- case CURLE_FTP_WEIRD_PASV_REPLY:
- case CURLE_FTP_PORT_FAILED:
- case CURLE_FTP_ACCEPT_FAILED:
- case CURLE_FTP_ACCEPT_TIMEOUT:
- case CURLE_FTP_COULDNT_SET_TYPE:
- case CURLE_FTP_COULDNT_RETR_FILE:
- case CURLE_PARTIAL_FILE:
- case CURLE_UPLOAD_FAILED:
- case CURLE_REMOTE_ACCESS_DENIED:
- case CURLE_FILESIZE_EXCEEDED:
- case CURLE_REMOTE_FILE_NOT_FOUND:
- case CURLE_WRITE_ERROR:
- /* the connection stays alive fine even though this happened */
- /* fall-through */
- case CURLE_OK: /* doesn't affect the control connection's status */
- if(!premature) {
- ftpc->ctl_valid = was_ctl_valid;
- break;
- }
- /* until we cope better with prematurely ended requests, let them
- * fallback as if in complete failure */
- default: /* by default, an error means the control connection is
- wedged and should not be used anymore */
- ftpc->ctl_valid = FALSE;
- ftpc->cwdfail = TRUE; /* set this TRUE to prevent us to remember the
- current path, as this connection is going */
- connclose(conn, "FTP ended with bad error code");
- result = status; /* use the already set error code */
- break;
- }
-
- /* now store a copy of the directory we are in */
- if(ftpc->prevpath)
- free(ftpc->prevpath);
-
- if(data->set.wildcardmatch) {
- if(data->set.chunk_end && ftpc->file) {
- data->set.chunk_end(data->wildcard.customptr);
- }
- ftpc->known_filesize = -1;
- }
-
- /* get the "raw" path */
- path = curl_easy_unescape(data, path_to_use, 0, NULL);
- if(!path) {
- /* out of memory, but we can limp along anyway (and should try to
- * since we may already be in the out of memory cleanup path) */
- if(!result)
- result = CURLE_OUT_OF_MEMORY;
- ftpc->ctl_valid = FALSE; /* mark control connection as bad */
- connclose(conn, "FTP: out of memory!"); /* mark for connection closure */
- ftpc->prevpath = NULL; /* no path remembering */
- }
- else {
- size_t flen = ftpc->file?strlen(ftpc->file):0; /* file is "raw" already */
- size_t dlen = strlen(path)-flen;
- if(!ftpc->cwdfail) {
- if(dlen && (data->set.ftp_filemethod != FTPFILE_NOCWD)) {
- ftpc->prevpath = path;
- if(flen)
- /* if 'path' is not the whole string */
- ftpc->prevpath[dlen]=0; /* terminate */
- }
- else {
- /* we never changed dir */
- ftpc->prevpath=strdup("");
- free(path);
- }
- if(ftpc->prevpath)
- infof(data, "Remembering we are in dir \"%s\"\n", ftpc->prevpath);
- }
- else {
- ftpc->prevpath = NULL; /* no path */
- free(path);
- }
- }
- /* free the dir tree and file parts */
- freedirs(ftpc);
-
- /* shut down the socket to inform the server we're done */
-
-#ifdef _WIN32_WCE
- shutdown(conn->sock[SECONDARYSOCKET],2); /* SD_BOTH */
-#endif
-
- if(conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) {
- if(!result && ftpc->dont_check && data->req.maxdownload > 0) {
- /* partial download completed */
- result = Curl_pp_sendf(pp, "%s", "ABOR");
- if(result) {
- failf(data, "Failure sending ABOR command: %s",
- curl_easy_strerror(result));
- ftpc->ctl_valid = FALSE; /* mark control connection as bad */
- connclose(conn, "ABOR command failed"); /* connection closure */
- }
- }
-
- if(conn->ssl[SECONDARYSOCKET].use) {
- /* The secondary socket is using SSL so we must close down that part
- first before we close the socket for real */
- Curl_ssl_close(conn, SECONDARYSOCKET);
-
- /* Note that we keep "use" set to TRUE since that (next) connection is
- still requested to use SSL */
- }
- if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) {
- Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
- conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
- conn->bits.tcpconnect[SECONDARYSOCKET] = FALSE;
- }
- }
-
- if(!result && (ftp->transfer == FTPTRANSFER_BODY) && ftpc->ctl_valid &&
- pp->pending_resp && !premature) {
- /*
- * Let's see what the server says about the transfer we just performed,
- * but lower the timeout as sometimes this connection has died while the
- * data has been transferred. This happens when doing through NATs etc that
- * abandon old silent connections.
- */
- long old_time = pp->response_time;
-
- pp->response_time = 60*1000; /* give it only a minute for now */
- pp->response = Curl_tvnow(); /* timeout relative now */
-
- result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
-
- pp->response_time = old_time; /* set this back to previous value */
-
- if(!nread && (CURLE_OPERATION_TIMEDOUT == result)) {
- failf(data, "control connection looks dead");
- ftpc->ctl_valid = FALSE; /* mark control connection as bad */
- connclose(conn, "Timeout or similar in FTP DONE operation"); /* close */
- }
-
- if(result)
- return result;
-
- if(ftpc->dont_check && data->req.maxdownload > 0) {
- /* we have just sent ABOR and there is no reliable way to check if it was
- * successful or not; we have to close the connection now */
- infof(data, "partial download completed, closing connection\n");
- connclose(conn, "Partial download with no ability to check");
- return result;
- }
-
- if(!ftpc->dont_check) {
- /* 226 Transfer complete, 250 Requested file action okay, completed. */
- if((ftpcode != 226) && (ftpcode != 250)) {
- failf(data, "server did not report OK, got %d", ftpcode);
- result = CURLE_PARTIAL_FILE;
- }
- }
- }
-
- if(result || premature)
- /* the response code from the transfer showed an error already so no
- use checking further */
- ;
- else if(data->set.upload) {
- if((-1 != data->state.infilesize) &&
- (data->state.infilesize != *ftp->bytecountp) &&
- !data->set.crlf &&
- (ftp->transfer == FTPTRANSFER_BODY)) {
- failf(data, "Uploaded unaligned file size (%" CURL_FORMAT_CURL_OFF_T
- " out of %" CURL_FORMAT_CURL_OFF_T " bytes)",
- *ftp->bytecountp, data->state.infilesize);
- result = CURLE_PARTIAL_FILE;
- }
- }
- else {
- if((-1 != data->req.size) &&
- (data->req.size != *ftp->bytecountp) &&
-#ifdef CURL_DO_LINEEND_CONV
- /* Most FTP servers don't adjust their file SIZE response for CRLFs, so
- * we'll check to see if the discrepancy can be explained by the number
- * of CRLFs we've changed to LFs.
- */
- ((data->req.size + data->state.crlf_conversions) !=
- *ftp->bytecountp) &&
-#endif /* CURL_DO_LINEEND_CONV */
- (data->req.maxdownload != *ftp->bytecountp)) {
- failf(data, "Received only partial file: %" CURL_FORMAT_CURL_OFF_T
- " bytes", *ftp->bytecountp);
- result = CURLE_PARTIAL_FILE;
- }
- else if(!ftpc->dont_check &&
- !*ftp->bytecountp &&
- (data->req.size>0)) {
- failf(data, "No data was received!");
- result = CURLE_FTP_COULDNT_RETR_FILE;
- }
- }
-
- /* clear these for next connection */
- ftp->transfer = FTPTRANSFER_BODY;
- ftpc->dont_check = FALSE;
-
- /* Send any post-transfer QUOTE strings? */
- if(!status && !result && !premature && data->set.postquote)
- result = ftp_sendquote(conn, data->set.postquote);
-
- return result;
-}
-
-/***********************************************************************
- *
- * ftp_sendquote()
- *
- * Where a 'quote' means a list of custom commands to send to the server.
- * The quote list is passed as an argument.
- *
- * BLOCKING
- */
-
-static
-CURLcode ftp_sendquote(struct connectdata *conn, struct curl_slist *quote)
-{
- struct curl_slist *item;
- ssize_t nread;
- int ftpcode;
- CURLcode result;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct pingpong *pp = &ftpc->pp;
-
- item = quote;
- while(item) {
- if(item->data) {
- char *cmd = item->data;
- bool acceptfail = FALSE;
-
- /* if a command starts with an asterisk, which a legal FTP command never
- can, the command will be allowed to fail without it causing any
- aborts or cancels etc. It will cause libcurl to act as if the command
- is successful, whatever the server reponds. */
-
- if(cmd[0] == '*') {
- cmd++;
- acceptfail = TRUE;
- }
-
- PPSENDF(&conn->proto.ftpc.pp, "%s", cmd);
-
- pp->response = Curl_tvnow(); /* timeout relative now */
-
- result = Curl_GetFTPResponse(&nread, conn, &ftpcode);
- if(result)
- return result;
-
- if(!acceptfail && (ftpcode >= 400)) {
- failf(conn->data, "QUOT string not accepted: %s", cmd);
- return CURLE_QUOTE_ERROR;
- }
- }
-
- item = item->next;
- }
-
- return CURLE_OK;
-}
-
-/***********************************************************************
- *
- * ftp_need_type()
- *
- * Returns TRUE if we in the current situation should send TYPE
- */
-static int ftp_need_type(struct connectdata *conn,
- bool ascii_wanted)
-{
- return conn->proto.ftpc.transfertype != (ascii_wanted?'A':'I');
-}
-
-/***********************************************************************
- *
- * ftp_nb_type()
- *
- * Set TYPE. We only deal with ASCII or BINARY so this function
- * sets one of them.
- * If the transfer type is not sent, simulate on OK response in newstate
- */
-static CURLcode ftp_nb_type(struct connectdata *conn,
- bool ascii, ftpstate newstate)
-{
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- CURLcode result;
- char want = (char)(ascii?'A':'I');
-
- if(ftpc->transfertype == want) {
- state(conn, newstate);
- return ftp_state_type_resp(conn, 200, newstate);
- }
-
- PPSENDF(&ftpc->pp, "TYPE %c", want);
- state(conn, newstate);
-
- /* keep track of our current transfer type */
- ftpc->transfertype = want;
- return CURLE_OK;
-}
-
-/***************************************************************************
- *
- * ftp_pasv_verbose()
- *
- * This function only outputs some informationals about this second connection
- * when we've issued a PASV command before and thus we have connected to a
- * possibly new IP address.
- *
- */
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-static void
-ftp_pasv_verbose(struct connectdata *conn,
- Curl_addrinfo *ai,
- char *newhost, /* ascii version */
- int port)
-{
- char buf[256];
- Curl_printable_address(ai, buf, sizeof(buf));
- infof(conn->data, "Connecting to %s (%s) port %d\n", newhost, buf, port);
-}
-#endif
-
-/*
- Check if this is a range download, and if so, set the internal variables
- properly.
- */
-
-static CURLcode ftp_range(struct connectdata *conn)
-{
- curl_off_t from, to;
- char *ptr;
- char *ptr2;
- struct SessionHandle *data = conn->data;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- if(data->state.use_range && data->state.range) {
- from=curlx_strtoofft(data->state.range, &ptr, 0);
- while(*ptr && (ISSPACE(*ptr) || (*ptr=='-')))
- ptr++;
- to=curlx_strtoofft(ptr, &ptr2, 0);
- if(ptr == ptr2) {
- /* we didn't get any digit */
- to=-1;
- }
- if((-1 == to) && (from>=0)) {
- /* X - */
- data->state.resume_from = from;
- DEBUGF(infof(conn->data, "FTP RANGE %" CURL_FORMAT_CURL_OFF_T
- " to end of file\n", from));
- }
- else if(from < 0) {
- /* -Y */
- data->req.maxdownload = -from;
- data->state.resume_from = from;
- DEBUGF(infof(conn->data, "FTP RANGE the last %" CURL_FORMAT_CURL_OFF_T
- " bytes\n", -from));
- }
- else {
- /* X-Y */
- data->req.maxdownload = (to-from)+1; /* include last byte */
- data->state.resume_from = from;
- DEBUGF(infof(conn->data, "FTP RANGE from %" CURL_FORMAT_CURL_OFF_T
- " getting %" CURL_FORMAT_CURL_OFF_T " bytes\n",
- from, data->req.maxdownload));
- }
- DEBUGF(infof(conn->data, "range-download from %" CURL_FORMAT_CURL_OFF_T
- " to %" CURL_FORMAT_CURL_OFF_T ", totally %"
- CURL_FORMAT_CURL_OFF_T " bytes\n",
- from, to, data->req.maxdownload));
- ftpc->dont_check = TRUE; /* dont check for successful transfer */
- }
- else
- data->req.maxdownload = -1;
- return CURLE_OK;
-}
-
-
-/*
- * ftp_do_more()
- *
- * This function shall be called when the second FTP (data) connection is
- * connected.
- *
- * 'complete' can return 0 for incomplete, 1 for done and -1 for go back
- * (which basically is only for when PASV is being sent to retry a failed
- * EPSV).
- */
-
-static CURLcode ftp_do_more(struct connectdata *conn, int *completep)
-{
- struct SessionHandle *data=conn->data;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- CURLcode result = CURLE_OK;
- bool connected = FALSE;
- bool complete = FALSE;
-
- /* the ftp struct is inited in ftp_connect() */
- struct FTP *ftp = data->req.protop;
-
- /* if the second connection isn't done yet, wait for it */
- if(!conn->bits.tcpconnect[SECONDARYSOCKET]) {
- if(conn->tunnel_state[SECONDARYSOCKET] == TUNNEL_CONNECT) {
- /* As we're in TUNNEL_CONNECT state now, we know the proxy name and port
- aren't used so we blank their arguments. TODO: make this nicer */
- result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, NULL, 0);
-
- return result;
- }
-
- result = Curl_is_connected(conn, SECONDARYSOCKET, &connected);
-
- /* Ready to do more? */
- if(connected) {
- DEBUGF(infof(data, "DO-MORE connected phase starts\n"));
- if(conn->bits.proxy) {
- infof(data, "Connection to proxy confirmed\n");
- result = proxy_magic(conn, ftpc->newhost, ftpc->newport, &connected);
- }
- }
- else {
- if(result && (ftpc->count1 == 0)) {
- *completep = -1; /* go back to DOING please */
- /* this is a EPSV connect failing, try PASV instead */
- return ftp_epsv_disable(conn);
- }
- return result;
- }
- }
-
- if(ftpc->state) {
- /* already in a state so skip the intial commands.
- They are only done to kickstart the do_more state */
- result = ftp_multi_statemach(conn, &complete);
-
- *completep = (int)complete;
-
- /* if we got an error or if we don't wait for a data connection return
- immediately */
- if(result || (ftpc->wait_data_conn != TRUE))
- return result;
-
- if(ftpc->wait_data_conn)
- /* if we reach the end of the FTP state machine here, *complete will be
- TRUE but so is ftpc->wait_data_conn, which says we need to wait for
- the data connection and therefore we're not actually complete */
- *completep = 0;
- }
-
- if(ftp->transfer <= FTPTRANSFER_INFO) {
- /* a transfer is about to take place, or if not a file name was given
- so we'll do a SIZE on it later and then we need the right TYPE first */
-
- if(ftpc->wait_data_conn == TRUE) {
- bool serv_conned;
-
- result = ReceivedServerConnect(conn, &serv_conned);
- if(result)
- return result; /* Failed to accept data connection */
-
- if(serv_conned) {
- /* It looks data connection is established */
- result = AcceptServerConnect(conn);
- ftpc->wait_data_conn = FALSE;
- if(!result)
- result = InitiateTransfer(conn);
-
- if(result)
- return result;
-
- *completep = 1; /* this state is now complete when the server has
- connected back to us */
- }
- }
- else if(data->set.upload) {
- result = ftp_nb_type(conn, data->set.prefer_ascii, FTP_STOR_TYPE);
- if(result)
- return result;
-
- result = ftp_multi_statemach(conn, &complete);
- *completep = (int)complete;
- }
- else {
- /* download */
- ftp->downloadsize = -1; /* unknown as of yet */
-
- result = ftp_range(conn);
- if(result)
- ;
- else if(data->set.ftp_list_only || !ftpc->file) {
- /* The specified path ends with a slash, and therefore we think this
- is a directory that is requested, use LIST. But before that we
- need to set ASCII transfer mode. */
-
- /* But only if a body transfer was requested. */
- if(ftp->transfer == FTPTRANSFER_BODY) {
- result = ftp_nb_type(conn, TRUE, FTP_LIST_TYPE);
- if(result)
- return result;
- }
- /* otherwise just fall through */
- }
- else {
- result = ftp_nb_type(conn, data->set.prefer_ascii, FTP_RETR_TYPE);
- if(result)
- return result;
- }
-
- result = ftp_multi_statemach(conn, &complete);
- *completep = (int)complete;
- }
- return result;
- }
-
- if((result == CURLE_OK) && (ftp->transfer != FTPTRANSFER_BODY))
- /* no data to transfer. FIX: it feels like a kludge to have this here
- too! */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
-
- if(!ftpc->wait_data_conn) {
- /* no waiting for the data connection so this is now complete */
- *completep = 1;
- DEBUGF(infof(data, "DO-MORE phase ends with %d\n", (int)result));
- }
-
- return result;
-}
-
-
-
-/***********************************************************************
- *
- * ftp_perform()
- *
- * This is the actual DO function for FTP. Get a file/directory according to
- * the options previously setup.
- */
-
-static
-CURLcode ftp_perform(struct connectdata *conn,
- bool *connected, /* connect status after PASV / PORT */
- bool *dophase_done)
-{
- /* this is FTP and no proxy */
- CURLcode result=CURLE_OK;
-
- DEBUGF(infof(conn->data, "DO phase starts\n"));
-
- if(conn->data->set.opt_no_body) {
- /* requested no body means no transfer... */
- struct FTP *ftp = conn->data->req.protop;
- ftp->transfer = FTPTRANSFER_INFO;
- }
-
- *dophase_done = FALSE; /* not done yet */
-
- /* start the first command in the DO phase */
- result = ftp_state_quote(conn, TRUE, FTP_QUOTE);
- if(result)
- return result;
-
- /* run the state-machine */
- result = ftp_multi_statemach(conn, dophase_done);
-
- *connected = conn->bits.tcpconnect[SECONDARYSOCKET];
-
- infof(conn->data, "ftp_perform ends with SECONDARY: %d\n", *connected);
-
- if(*dophase_done)
- DEBUGF(infof(conn->data, "DO phase is complete1\n"));
-
- return result;
-}
-
-static void wc_data_dtor(void *ptr)
-{
- struct ftp_wc_tmpdata *tmp = ptr;
- if(tmp)
- Curl_ftp_parselist_data_free(&tmp->parser);
- Curl_safefree(tmp);
-}
-
-static CURLcode init_wc_data(struct connectdata *conn)
-{
- char *last_slash;
- char *path = conn->data->state.path;
- struct WildcardData *wildcard = &(conn->data->wildcard);
- CURLcode ret = CURLE_OK;
- struct ftp_wc_tmpdata *ftp_tmp;
-
- last_slash = strrchr(conn->data->state.path, '/');
- if(last_slash) {
- last_slash++;
- if(last_slash[0] == '\0') {
- wildcard->state = CURLWC_CLEAN;
- ret = ftp_parse_url_path(conn);
- return ret;
- }
- else {
- wildcard->pattern = strdup(last_slash);
- if(!wildcard->pattern)
- return CURLE_OUT_OF_MEMORY;
- last_slash[0] = '\0'; /* cut file from path */
- }
- }
- else { /* there is only 'wildcard pattern' or nothing */
- if(path[0]) {
- wildcard->pattern = strdup(path);
- if(!wildcard->pattern)
- return CURLE_OUT_OF_MEMORY;
- path[0] = '\0';
- }
- else { /* only list */
- wildcard->state = CURLWC_CLEAN;
- ret = ftp_parse_url_path(conn);
- return ret;
- }
- }
-
- /* program continues only if URL is not ending with slash, allocate needed
- resources for wildcard transfer */
-
- /* allocate ftp protocol specific temporary wildcard data */
- ftp_tmp = calloc(1, sizeof(struct ftp_wc_tmpdata));
- if(!ftp_tmp) {
- Curl_safefree(wildcard->pattern);
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* INITIALIZE parselist structure */
- ftp_tmp->parser = Curl_ftp_parselist_data_alloc();
- if(!ftp_tmp->parser) {
- Curl_safefree(wildcard->pattern);
- Curl_safefree(ftp_tmp);
- return CURLE_OUT_OF_MEMORY;
- }
-
- wildcard->tmp = ftp_tmp; /* put it to the WildcardData tmp pointer */
- wildcard->tmp_dtor = wc_data_dtor;
-
- /* wildcard does not support NOCWD option (assert it?) */
- if(conn->data->set.ftp_filemethod == FTPFILE_NOCWD)
- conn->data->set.ftp_filemethod = FTPFILE_MULTICWD;
-
- /* try to parse ftp url */
- ret = ftp_parse_url_path(conn);
- if(ret) {
- Curl_safefree(wildcard->pattern);
- wildcard->tmp_dtor(wildcard->tmp);
- wildcard->tmp_dtor = ZERO_NULL;
- wildcard->tmp = NULL;
- return ret;
- }
-
- wildcard->path = strdup(conn->data->state.path);
- if(!wildcard->path) {
- Curl_safefree(wildcard->pattern);
- wildcard->tmp_dtor(wildcard->tmp);
- wildcard->tmp_dtor = ZERO_NULL;
- wildcard->tmp = NULL;
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* backup old write_function */
- ftp_tmp->backup.write_function = conn->data->set.fwrite_func;
- /* parsing write function */
- conn->data->set.fwrite_func = Curl_ftp_parselist;
- /* backup old file descriptor */
- ftp_tmp->backup.file_descriptor = conn->data->set.out;
- /* let the writefunc callback know what curl pointer is working with */
- conn->data->set.out = conn;
-
- infof(conn->data, "Wildcard - Parsing started\n");
- return CURLE_OK;
-}
-
-/* This is called recursively */
-static CURLcode wc_statemach(struct connectdata *conn)
-{
- struct WildcardData * const wildcard = &(conn->data->wildcard);
- CURLcode ret = CURLE_OK;
-
- switch (wildcard->state) {
- case CURLWC_INIT:
- ret = init_wc_data(conn);
- if(wildcard->state == CURLWC_CLEAN)
- /* only listing! */
- break;
- else
- wildcard->state = ret ? CURLWC_ERROR : CURLWC_MATCHING;
- break;
-
- case CURLWC_MATCHING: {
- /* In this state is LIST response successfully parsed, so lets restore
- previous WRITEFUNCTION callback and WRITEDATA pointer */
- struct ftp_wc_tmpdata *ftp_tmp = wildcard->tmp;
- conn->data->set.fwrite_func = ftp_tmp->backup.write_function;
- conn->data->set.out = ftp_tmp->backup.file_descriptor;
- ftp_tmp->backup.write_function = ZERO_NULL;
- ftp_tmp->backup.file_descriptor = NULL;
- wildcard->state = CURLWC_DOWNLOADING;
-
- if(Curl_ftp_parselist_geterror(ftp_tmp->parser)) {
- /* error found in LIST parsing */
- wildcard->state = CURLWC_CLEAN;
- return wc_statemach(conn);
- }
- else if(wildcard->filelist->size == 0) {
- /* no corresponding file */
- wildcard->state = CURLWC_CLEAN;
- return CURLE_REMOTE_FILE_NOT_FOUND;
- }
- return wc_statemach(conn);
- }
-
- case CURLWC_DOWNLOADING: {
- /* filelist has at least one file, lets get first one */
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- struct curl_fileinfo *finfo = wildcard->filelist->head->ptr;
-
- char *tmp_path = aprintf("%s%s", wildcard->path, finfo->filename);
- if(!tmp_path)
- return CURLE_OUT_OF_MEMORY;
-
- /* switch default "state.pathbuffer" and tmp_path, good to see
- ftp_parse_url_path function to understand this trick */
- Curl_safefree(conn->data->state.pathbuffer);
- conn->data->state.pathbuffer = tmp_path;
- conn->data->state.path = tmp_path;
-
- infof(conn->data, "Wildcard - START of \"%s\"\n", finfo->filename);
- if(conn->data->set.chunk_bgn) {
- long userresponse = conn->data->set.chunk_bgn(
- finfo, wildcard->customptr, (int)wildcard->filelist->size);
- switch(userresponse) {
- case CURL_CHUNK_BGN_FUNC_SKIP:
- infof(conn->data, "Wildcard - \"%s\" skipped by user\n",
- finfo->filename);
- wildcard->state = CURLWC_SKIP;
- return wc_statemach(conn);
- case CURL_CHUNK_BGN_FUNC_FAIL:
- return CURLE_CHUNK_FAILED;
- }
- }
-
- if(finfo->filetype != CURLFILETYPE_FILE) {
- wildcard->state = CURLWC_SKIP;
- return wc_statemach(conn);
- }
-
- if(finfo->flags & CURLFINFOFLAG_KNOWN_SIZE)
- ftpc->known_filesize = finfo->size;
-
- ret = ftp_parse_url_path(conn);
- if(ret) {
- return ret;
- }
-
- /* we don't need the Curl_fileinfo of first file anymore */
- Curl_llist_remove(wildcard->filelist, wildcard->filelist->head, NULL);
-
- if(wildcard->filelist->size == 0) { /* remains only one file to down. */
- wildcard->state = CURLWC_CLEAN;
- /* after that will be ftp_do called once again and no transfer
- will be done because of CURLWC_CLEAN state */
- return CURLE_OK;
- }
- } break;
-
- case CURLWC_SKIP: {
- if(conn->data->set.chunk_end)
- conn->data->set.chunk_end(conn->data->wildcard.customptr);
- Curl_llist_remove(wildcard->filelist, wildcard->filelist->head, NULL);
- wildcard->state = (wildcard->filelist->size == 0) ?
- CURLWC_CLEAN : CURLWC_DOWNLOADING;
- return wc_statemach(conn);
- }
-
- case CURLWC_CLEAN: {
- struct ftp_wc_tmpdata *ftp_tmp = wildcard->tmp;
- ret = CURLE_OK;
- if(ftp_tmp) {
- ret = Curl_ftp_parselist_geterror(ftp_tmp->parser);
- }
- wildcard->state = ret ? CURLWC_ERROR : CURLWC_DONE;
- } break;
-
- case CURLWC_DONE:
- case CURLWC_ERROR:
- break;
- }
-
- return ret;
-}
-
-/***********************************************************************
- *
- * ftp_do()
- *
- * This function is registered as 'curl_do' function. It decodes the path
- * parts etc as a wrapper to the actual DO function (ftp_perform).
- *
- * The input argument is already checked for validity.
- */
-static CURLcode ftp_do(struct connectdata *conn, bool *done)
-{
- CURLcode retcode = CURLE_OK;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- *done = FALSE; /* default to false */
- ftpc->wait_data_conn = FALSE; /* default to no such wait */
-
- if(conn->data->set.wildcardmatch) {
- retcode = wc_statemach(conn);
- if(conn->data->wildcard.state == CURLWC_SKIP ||
- conn->data->wildcard.state == CURLWC_DONE) {
- /* do not call ftp_regular_transfer */
- return CURLE_OK;
- }
- if(retcode) /* error, loop or skipping the file */
- return retcode;
- }
- else { /* no wildcard FSM needed */
- retcode = ftp_parse_url_path(conn);
- if(retcode)
- return retcode;
- }
-
- retcode = ftp_regular_transfer(conn, done);
-
- return retcode;
-}
-
-
-CURLcode Curl_ftpsendf(struct connectdata *conn,
- const char *fmt, ...)
-{
- ssize_t bytes_written;
-#define SBUF_SIZE 1024
- char s[SBUF_SIZE];
- size_t write_len;
- char *sptr=s;
- CURLcode res = CURLE_OK;
-#ifdef HAVE_GSSAPI
- enum protection_level data_sec = conn->data_prot;
-#endif
-
- va_list ap;
- va_start(ap, fmt);
- write_len = vsnprintf(s, SBUF_SIZE-3, fmt, ap);
- va_end(ap);
-
- strcpy(&s[write_len], "\r\n"); /* append a trailing CRLF */
- write_len +=2;
-
- bytes_written=0;
-
- res = Curl_convert_to_network(conn->data, s, write_len);
- /* Curl_convert_to_network calls failf if unsuccessful */
- if(res)
- return(res);
-
- for(;;) {
-#ifdef HAVE_GSSAPI
- conn->data_prot = PROT_CMD;
-#endif
- res = Curl_write(conn, conn->sock[FIRSTSOCKET], sptr, write_len,
- &bytes_written);
-#ifdef HAVE_GSSAPI
- DEBUGASSERT(data_sec > PROT_NONE && data_sec < PROT_LAST);
- conn->data_prot = data_sec;
-#endif
-
- if(CURLE_OK != res)
- break;
-
- if(conn->data->set.verbose)
- Curl_debug(conn->data, CURLINFO_HEADER_OUT,
- sptr, (size_t)bytes_written, conn);
-
- if(bytes_written != (ssize_t)write_len) {
- write_len -= bytes_written;
- sptr += bytes_written;
- }
- else
- break;
- }
-
- return res;
-}
-
-/***********************************************************************
- *
- * ftp_quit()
- *
- * This should be called before calling sclose() on an ftp control connection
- * (not data connections). We should then wait for the response from the
- * server before returning. The calling code should then try to close the
- * connection.
- *
- */
-static CURLcode ftp_quit(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- if(conn->proto.ftpc.ctl_valid) {
- result = Curl_pp_sendf(&conn->proto.ftpc.pp, "%s", "QUIT");
- if(result) {
- failf(conn->data, "Failure sending QUIT command: %s",
- curl_easy_strerror(result));
- conn->proto.ftpc.ctl_valid = FALSE; /* mark control connection as bad */
- connclose(conn, "QUIT command failed"); /* mark for connection closure */
- state(conn, FTP_STOP);
- return result;
- }
-
- state(conn, FTP_QUIT);
-
- result = ftp_block_statemach(conn);
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * ftp_disconnect()
- *
- * Disconnect from an FTP server. Cleanup protocol-specific per-connection
- * resources. BLOCKING.
- */
-static CURLcode ftp_disconnect(struct connectdata *conn, bool dead_connection)
-{
- struct ftp_conn *ftpc= &conn->proto.ftpc;
- struct pingpong *pp = &ftpc->pp;
-
- /* We cannot send quit unconditionally. If this connection is stale or
- bad in any way, sending quit and waiting around here will make the
- disconnect wait in vain and cause more problems than we need to.
-
- ftp_quit() will check the state of ftp->ctl_valid. If it's ok it
- will try to send the QUIT command, otherwise it will just return.
- */
- if(dead_connection)
- ftpc->ctl_valid = FALSE;
-
- /* The FTP session may or may not have been allocated/setup at this point! */
- (void)ftp_quit(conn); /* ignore errors on the QUIT */
-
- if(ftpc->entrypath) {
- struct SessionHandle *data = conn->data;
- if(data->state.most_recent_ftp_entrypath == ftpc->entrypath) {
- data->state.most_recent_ftp_entrypath = NULL;
- }
- free(ftpc->entrypath);
- ftpc->entrypath = NULL;
- }
-
- freedirs(ftpc);
- if(ftpc->prevpath) {
- free(ftpc->prevpath);
- ftpc->prevpath = NULL;
- }
- if(ftpc->server_os) {
- free(ftpc->server_os);
- ftpc->server_os = NULL;
- }
-
- Curl_pp_disconnect(pp);
-
-#ifdef HAVE_GSSAPI
- Curl_sec_end(conn);
-#endif
-
- return CURLE_OK;
-}
-
-/***********************************************************************
- *
- * ftp_parse_url_path()
- *
- * Parse the URL path into separate path components.
- *
- */
-static
-CURLcode ftp_parse_url_path(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- /* the ftp struct is already inited in ftp_connect() */
- struct FTP *ftp = data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- const char *slash_pos; /* position of the first '/' char in curpos */
- const char *path_to_use = data->state.path;
- const char *cur_pos;
- const char *filename = NULL;
-
- cur_pos = path_to_use; /* current position in path. point at the begin
- of next path component */
-
- ftpc->ctl_valid = FALSE;
- ftpc->cwdfail = FALSE;
-
- switch(data->set.ftp_filemethod) {
- case FTPFILE_NOCWD:
- /* fastest, but less standard-compliant */
-
- /*
- The best time to check whether the path is a file or directory is right
- here. so:
-
- the first condition in the if() right here, is there just in case
- someone decides to set path to NULL one day
- */
- if(data->state.path &&
- data->state.path[0] &&
- (data->state.path[strlen(data->state.path) - 1] != '/') )
- filename = data->state.path; /* this is a full file path */
- /*
- ftpc->file is not used anywhere other than for operations on a file.
- In other words, never for directory operations.
- So we can safely leave filename as NULL here and use it as a
- argument in dir/file decisions.
- */
- break;
-
- case FTPFILE_SINGLECWD:
- /* get the last slash */
- if(!path_to_use[0]) {
- /* no dir, no file */
- ftpc->dirdepth = 0;
- break;
- }
- slash_pos=strrchr(cur_pos, '/');
- if(slash_pos || !*cur_pos) {
- size_t dirlen = slash_pos-cur_pos;
-
- ftpc->dirs = calloc(1, sizeof(ftpc->dirs[0]));
- if(!ftpc->dirs)
- return CURLE_OUT_OF_MEMORY;
-
- if(!dirlen)
- dirlen++;
-
- ftpc->dirs[0] = curl_easy_unescape(conn->data, slash_pos ? cur_pos : "/",
- slash_pos ? curlx_uztosi(dirlen) : 1,
- NULL);
- if(!ftpc->dirs[0]) {
- freedirs(ftpc);
- return CURLE_OUT_OF_MEMORY;
- }
- ftpc->dirdepth = 1; /* we consider it to be a single dir */
- filename = slash_pos ? slash_pos+1 : cur_pos; /* rest is file name */
- }
- else
- filename = cur_pos; /* this is a file name only */
- break;
-
- default: /* allow pretty much anything */
- case FTPFILE_MULTICWD:
- ftpc->dirdepth = 0;
- ftpc->diralloc = 5; /* default dir depth to allocate */
- ftpc->dirs = calloc(ftpc->diralloc, sizeof(ftpc->dirs[0]));
- if(!ftpc->dirs)
- return CURLE_OUT_OF_MEMORY;
-
- /* we have a special case for listing the root dir only */
- if(strequal(path_to_use, "/")) {
- cur_pos++; /* make it point to the zero byte */
- ftpc->dirs[0] = strdup("/");
- ftpc->dirdepth++;
- }
- else {
- /* parse the URL path into separate path components */
- while((slash_pos = strchr(cur_pos, '/')) != NULL) {
- /* 1 or 0 pointer offset to indicate absolute directory */
- ssize_t absolute_dir = ((cur_pos - data->state.path > 0) &&
- (ftpc->dirdepth == 0))?1:0;
-
- /* seek out the next path component */
- if(slash_pos-cur_pos) {
- /* we skip empty path components, like "x//y" since the FTP command
- CWD requires a parameter and a non-existent parameter a) doesn't
- work on many servers and b) has no effect on the others. */
- int len = curlx_sztosi(slash_pos - cur_pos + absolute_dir);
- ftpc->dirs[ftpc->dirdepth] =
- curl_easy_unescape(conn->data, cur_pos - absolute_dir, len, NULL);
- if(!ftpc->dirs[ftpc->dirdepth]) { /* run out of memory ... */
- failf(data, "no memory");
- freedirs(ftpc);
- return CURLE_OUT_OF_MEMORY;
- }
- if(isBadFtpString(ftpc->dirs[ftpc->dirdepth])) {
- free(ftpc->dirs[ftpc->dirdepth]);
- freedirs(ftpc);
- return CURLE_URL_MALFORMAT;
- }
- }
- else {
- cur_pos = slash_pos + 1; /* jump to the rest of the string */
- if(!ftpc->dirdepth) {
- /* path starts with a slash, add that as a directory */
- ftpc->dirs[ftpc->dirdepth] = strdup("/");
- if(!ftpc->dirs[ftpc->dirdepth++]) { /* run out of memory ... */
- failf(data, "no memory");
- freedirs(ftpc);
- return CURLE_OUT_OF_MEMORY;
- }
- }
- continue;
- }
-
- cur_pos = slash_pos + 1; /* jump to the rest of the string */
- if(++ftpc->dirdepth >= ftpc->diralloc) {
- /* enlarge array */
- char **bigger;
- ftpc->diralloc *= 2; /* double the size each time */
- bigger = realloc(ftpc->dirs, ftpc->diralloc * sizeof(ftpc->dirs[0]));
- if(!bigger) {
- freedirs(ftpc);
- return CURLE_OUT_OF_MEMORY;
- }
- ftpc->dirs = bigger;
- }
- }
- }
- filename = cur_pos; /* the rest is the file name */
- break;
- } /* switch */
-
- if(filename && *filename) {
- ftpc->file = curl_easy_unescape(conn->data, filename, 0, NULL);
- if(NULL == ftpc->file) {
- freedirs(ftpc);
- failf(data, "no memory");
- return CURLE_OUT_OF_MEMORY;
- }
- if(isBadFtpString(ftpc->file)) {
- freedirs(ftpc);
- return CURLE_URL_MALFORMAT;
- }
- }
- else
- ftpc->file=NULL; /* instead of point to a zero byte, we make it a NULL
- pointer */
-
- if(data->set.upload && !ftpc->file && (ftp->transfer == FTPTRANSFER_BODY)) {
- /* We need a file name when uploading. Return error! */
- failf(data, "Uploading to a URL without a file name!");
- return CURLE_URL_MALFORMAT;
- }
-
- ftpc->cwddone = FALSE; /* default to not done */
-
- if(ftpc->prevpath) {
- /* prevpath is "raw" so we convert the input path before we compare the
- strings */
- int dlen;
- char *path = curl_easy_unescape(conn->data, data->state.path, 0, &dlen);
- if(!path) {
- freedirs(ftpc);
- return CURLE_OUT_OF_MEMORY;
- }
-
- dlen -= ftpc->file?curlx_uztosi(strlen(ftpc->file)):0;
- if((dlen == curlx_uztosi(strlen(ftpc->prevpath))) &&
- strnequal(path, ftpc->prevpath, dlen)) {
- infof(data, "Request has same path as previous transfer\n");
- ftpc->cwddone = TRUE;
- }
- free(path);
- }
-
- return CURLE_OK;
-}
-
-/* call this when the DO phase has completed */
-static CURLcode ftp_dophase_done(struct connectdata *conn,
- bool connected)
-{
- struct FTP *ftp = conn->data->req.protop;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
-
- if(connected) {
- int completed;
- CURLcode result = ftp_do_more(conn, &completed);
-
- if(result) {
- if(conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD) {
- /* close the second socket if it was created already */
- Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
- conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD;
- }
- return result;
- }
- }
-
- if(ftp->transfer != FTPTRANSFER_BODY)
- /* no data to transfer */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- else if(!connected)
- /* since we didn't connect now, we want do_more to get called */
- conn->bits.do_more = TRUE;
-
- ftpc->ctl_valid = TRUE; /* seems good */
-
- return CURLE_OK;
-}
-
-/* called from multi.c while DOing */
-static CURLcode ftp_doing(struct connectdata *conn,
- bool *dophase_done)
-{
- CURLcode result = ftp_multi_statemach(conn, dophase_done);
-
- if(result)
- DEBUGF(infof(conn->data, "DO phase failed\n"));
- else if(*dophase_done) {
- result = ftp_dophase_done(conn, FALSE /* not connected */);
-
- DEBUGF(infof(conn->data, "DO phase is complete2\n"));
- }
- return result;
-}
-
-/***********************************************************************
- *
- * ftp_regular_transfer()
- *
- * The input argument is already checked for validity.
- *
- * Performs all commands done before a regular transfer between a local and a
- * remote host.
- *
- * ftp->ctl_valid starts out as FALSE, and gets set to TRUE if we reach the
- * ftp_done() function without finding any major problem.
- */
-static
-CURLcode ftp_regular_transfer(struct connectdata *conn,
- bool *dophase_done)
-{
- CURLcode result=CURLE_OK;
- bool connected=FALSE;
- struct SessionHandle *data = conn->data;
- struct ftp_conn *ftpc = &conn->proto.ftpc;
- data->req.size = -1; /* make sure this is unknown at this point */
-
- Curl_pgrsSetUploadCounter(data, 0);
- Curl_pgrsSetDownloadCounter(data, 0);
- Curl_pgrsSetUploadSize(data, -1);
- Curl_pgrsSetDownloadSize(data, -1);
-
- ftpc->ctl_valid = TRUE; /* starts good */
-
- result = ftp_perform(conn,
- &connected, /* have we connected after PASV/PORT */
- dophase_done); /* all commands in the DO-phase done? */
-
- if(CURLE_OK == result) {
-
- if(!*dophase_done)
- /* the DO phase has not completed yet */
- return CURLE_OK;
-
- result = ftp_dophase_done(conn, connected);
-
- if(result)
- return result;
- }
- else
- freedirs(ftpc);
-
- return result;
-}
-
-static CURLcode ftp_setup_connection(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- char *type;
- char command;
- struct FTP *ftp;
-
- if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) {
- /* Unless we have asked to tunnel ftp operations through the proxy, we
- switch and use HTTP operations only */
-#ifndef CURL_DISABLE_HTTP
- if(conn->handler == &Curl_handler_ftp)
- conn->handler = &Curl_handler_ftp_proxy;
- else {
-#ifdef USE_SSL
- conn->handler = &Curl_handler_ftps_proxy;
-#else
- failf(data, "FTPS not supported!");
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- }
- /* set it up as a HTTP connection instead */
- return conn->handler->setup_connection(conn);
-#else
- failf(data, "FTP over http proxy requires HTTP support built-in!");
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- }
-
- conn->data->req.protop = ftp = malloc(sizeof(struct FTP));
- if(NULL == ftp)
- return CURLE_OUT_OF_MEMORY;
-
- data->state.path++; /* don't include the initial slash */
- data->state.slash_removed = TRUE; /* we've skipped the slash */
-
- /* FTP URLs support an extension like ";type=<typecode>" that
- * we'll try to get now! */
- type = strstr(data->state.path, ";type=");
-
- if(!type)
- type = strstr(conn->host.rawalloc, ";type=");
-
- if(type) {
- *type = 0; /* it was in the middle of the hostname */
- command = Curl_raw_toupper(type[6]);
- conn->bits.type_set = TRUE;
-
- switch (command) {
- case 'A': /* ASCII mode */
- data->set.prefer_ascii = TRUE;
- break;
-
- case 'D': /* directory mode */
- data->set.ftp_list_only = TRUE;
- break;
-
- case 'I': /* binary mode */
- default:
- /* switch off ASCII */
- data->set.prefer_ascii = FALSE;
- break;
- }
- }
-
- /* get some initial data into the ftp struct */
- ftp->bytecountp = &conn->data->req.bytecount;
- ftp->transfer = FTPTRANSFER_BODY;
- ftp->downloadsize = 0;
-
- /* No need to duplicate user+password, the connectdata struct won't change
- during a session, but we re-init them here since on subsequent inits
- since the conn struct may have changed or been replaced.
- */
- ftp->user = conn->user;
- ftp->passwd = conn->passwd;
- if(isBadFtpString(ftp->user))
- return CURLE_URL_MALFORMAT;
- if(isBadFtpString(ftp->passwd))
- return CURLE_URL_MALFORMAT;
-
- conn->proto.ftpc.known_filesize = -1; /* unknown size for now */
-
- return CURLE_OK;
-}
-
-#endif /* CURL_DISABLE_FTP */
diff --git a/external/libcurl_android/jni/libcurl/lib/ftp.h b/external/libcurl_android/jni/libcurl/lib/ftp.h
deleted file mode 100755
index b6bfc028..00000000
--- a/external/libcurl_android/jni/libcurl/lib/ftp.h
+++ /dev/null
@@ -1,160 +0,0 @@
-#ifndef HEADER_CURL_FTP_H
-#define HEADER_CURL_FTP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "pingpong.h"
-
-#ifndef CURL_DISABLE_FTP
-extern const struct Curl_handler Curl_handler_ftp;
-
-#ifdef USE_SSL
-extern const struct Curl_handler Curl_handler_ftps;
-#endif
-
-CURLcode Curl_ftpsendf(struct connectdata *, const char *fmt, ...);
-CURLcode Curl_GetFTPResponse(ssize_t *nread, struct connectdata *conn,
- int *ftpcode);
-#endif /* CURL_DISABLE_FTP */
-
-/****************************************************************************
- * FTP unique setup
- ***************************************************************************/
-typedef enum {
- FTP_STOP, /* do nothing state, stops the state machine */
- FTP_WAIT220, /* waiting for the initial 220 response immediately after
- a connect */
- FTP_AUTH,
- FTP_USER,
- FTP_PASS,
- FTP_ACCT,
- FTP_PBSZ,
- FTP_PROT,
- FTP_CCC,
- FTP_PWD,
- FTP_SYST,
- FTP_NAMEFMT,
- FTP_QUOTE, /* waiting for a response to a command sent in a quote list */
- FTP_RETR_PREQUOTE,
- FTP_STOR_PREQUOTE,
- FTP_POSTQUOTE,
- FTP_CWD, /* change dir */
- FTP_MKD, /* if the dir didn't exist */
- FTP_MDTM, /* to figure out the datestamp */
- FTP_TYPE, /* to set type when doing a head-like request */
- FTP_LIST_TYPE, /* set type when about to do a dir list */
- FTP_RETR_TYPE, /* set type when about to RETR a file */
- FTP_STOR_TYPE, /* set type when about to STOR a file */
- FTP_SIZE, /* get the remote file's size for head-like request */
- FTP_RETR_SIZE, /* get the remote file's size for RETR */
- FTP_STOR_SIZE, /* get the size for STOR */
- FTP_REST, /* when used to check if the server supports it in head-like */
- FTP_RETR_REST, /* when asking for "resume" in for RETR */
- FTP_PORT, /* generic state for PORT, LPRT and EPRT, check count1 */
- FTP_PRET, /* generic state for PRET RETR, PRET STOR and PRET LIST/NLST */
- FTP_PASV, /* generic state for PASV and EPSV, check count1 */
- FTP_LIST, /* generic state for LIST, NLST or a custom list command */
- FTP_RETR,
- FTP_STOR, /* generic state for STOR and APPE */
- FTP_QUIT,
- FTP_LAST /* never used */
-} ftpstate;
-
-struct ftp_parselist_data; /* defined later in ftplistparser.c */
-
-struct ftp_wc_tmpdata {
- struct ftp_parselist_data *parser;
-
- struct {
- curl_write_callback write_function;
- FILE *file_descriptor;
- } backup;
-};
-
-typedef enum {
- FTPFILE_MULTICWD = 1, /* as defined by RFC1738 */
- FTPFILE_NOCWD = 2, /* use SIZE / RETR / STOR on the full path */
- FTPFILE_SINGLECWD = 3 /* make one CWD, then SIZE / RETR / STOR on the
- file */
-} curl_ftpfile;
-
-/* This FTP struct is used in the SessionHandle. All FTP data that is
- connection-oriented must be in FTP_conn to properly deal with the fact that
- perhaps the SessionHandle is changed between the times the connection is
- used. */
-struct FTP {
- curl_off_t *bytecountp;
- char *user; /* user name string */
- char *passwd; /* password string */
-
- /* transfer a file/body or not, done as a typedefed enum just to make
- debuggers display the full symbol and not just the numerical value */
- curl_pp_transfer transfer;
- curl_off_t downloadsize;
-};
-
-
-/* ftp_conn is used for struct connection-oriented data in the connectdata
- struct */
-struct ftp_conn {
- struct pingpong pp;
- char *entrypath; /* the PWD reply when we logged on */
- char **dirs; /* realloc()ed array for path components */
- int dirdepth; /* number of entries used in the 'dirs' array */
- int diralloc; /* number of entries allocated for the 'dirs' array */
- char *file; /* decoded file */
- bool dont_check; /* Set to TRUE to prevent the final (post-transfer)
- file size and 226/250 status check. It should still
- read the line, just ignore the result. */
- bool ctl_valid; /* Tells Curl_ftp_quit() whether or not to do anything. If
- the connection has timed out or been closed, this
- should be FALSE when it gets to Curl_ftp_quit() */
- bool cwddone; /* if it has been determined that the proper CWD combo
- already has been done */
- bool cwdfail; /* set TRUE if a CWD command fails, as then we must prevent
- caching the current directory */
- bool wait_data_conn; /* this is set TRUE if data connection is waited */
- char *prevpath; /* conn->path from the previous transfer */
- char transfertype; /* set by ftp_transfertype for use by Curl_client_write()a
- and others (A/I or zero) */
- int count1; /* general purpose counter for the state machine */
- int count2; /* general purpose counter for the state machine */
- int count3; /* general purpose counter for the state machine */
- ftpstate state; /* always use ftp.c:state() to change state! */
- ftpstate state_saved; /* transfer type saved to be reloaded after
- data connection is established */
- curl_off_t retr_size_saved; /* Size of retrieved file saved */
- char * server_os; /* The target server operating system. */
- curl_off_t known_filesize; /* file size is different from -1, if wildcard
- LIST parsing was done and wc_statemach set
- it */
- /* newhost must be able to hold a full IP-style address in ASCII, which
- in the IPv6 case means 5*8-1 = 39 letters */
-#define NEWHOST_BUFSIZE 48
- char newhost[NEWHOST_BUFSIZE]; /* this is the pair to connect the DATA... */
- unsigned short newport; /* connection to */
-
-};
-
-#define DEFAULT_ACCEPT_TIMEOUT 60000 /* milliseconds == one minute */
-
-#endif /* HEADER_CURL_FTP_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/ftplistparser.c b/external/libcurl_android/jni/libcurl/lib/ftplistparser.c
deleted file mode 100755
index 4a46dd13..00000000
--- a/external/libcurl_android/jni/libcurl/lib/ftplistparser.c
+++ /dev/null
@@ -1,1053 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/**
- * Now implemented:
- *
- * 1) UNIX version 1
- * drwxr-xr-x 1 user01 ftp 512 Jan 29 23:32 prog
- * 2) UNIX version 2
- * drwxr-xr-x 1 user01 ftp 512 Jan 29 1997 prog
- * 3) UNIX version 3
- * drwxr-xr-x 1 1 1 512 Jan 29 23:32 prog
- * 4) UNIX symlink
- * lrwxr-xr-x 1 user01 ftp 512 Jan 29 23:32 prog -> prog2000
- * 5) DOS style
- * 01-29-97 11:32PM <DIR> prog
- */
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_FTP
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "fileinfo.h"
-#include "llist.h"
-#include "strtoofft.h"
-#include "rawstr.h"
-#include "ftp.h"
-#include "ftplistparser.h"
-#include "curl_fnmatch.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* allocs buffer which will contain one line of LIST command response */
-#define FTP_BUFFER_ALLOCSIZE 160
-
-typedef enum {
- PL_UNIX_TOTALSIZE = 0,
- PL_UNIX_FILETYPE,
- PL_UNIX_PERMISSION,
- PL_UNIX_HLINKS,
- PL_UNIX_USER,
- PL_UNIX_GROUP,
- PL_UNIX_SIZE,
- PL_UNIX_TIME,
- PL_UNIX_FILENAME,
- PL_UNIX_SYMLINK
-} pl_unix_mainstate;
-
-typedef union {
- enum {
- PL_UNIX_TOTALSIZE_INIT = 0,
- PL_UNIX_TOTALSIZE_READING
- } total_dirsize;
-
- enum {
- PL_UNIX_HLINKS_PRESPACE = 0,
- PL_UNIX_HLINKS_NUMBER
- } hlinks;
-
- enum {
- PL_UNIX_USER_PRESPACE = 0,
- PL_UNIX_USER_PARSING
- } user;
-
- enum {
- PL_UNIX_GROUP_PRESPACE = 0,
- PL_UNIX_GROUP_NAME
- } group;
-
- enum {
- PL_UNIX_SIZE_PRESPACE = 0,
- PL_UNIX_SIZE_NUMBER
- } size;
-
- enum {
- PL_UNIX_TIME_PREPART1 = 0,
- PL_UNIX_TIME_PART1,
- PL_UNIX_TIME_PREPART2,
- PL_UNIX_TIME_PART2,
- PL_UNIX_TIME_PREPART3,
- PL_UNIX_TIME_PART3
- } time;
-
- enum {
- PL_UNIX_FILENAME_PRESPACE = 0,
- PL_UNIX_FILENAME_NAME,
- PL_UNIX_FILENAME_WINDOWSEOL
- } filename;
-
- enum {
- PL_UNIX_SYMLINK_PRESPACE = 0,
- PL_UNIX_SYMLINK_NAME,
- PL_UNIX_SYMLINK_PRETARGET1,
- PL_UNIX_SYMLINK_PRETARGET2,
- PL_UNIX_SYMLINK_PRETARGET3,
- PL_UNIX_SYMLINK_PRETARGET4,
- PL_UNIX_SYMLINK_TARGET,
- PL_UNIX_SYMLINK_WINDOWSEOL
- } symlink;
-} pl_unix_substate;
-
-typedef enum {
- PL_WINNT_DATE = 0,
- PL_WINNT_TIME,
- PL_WINNT_DIRORSIZE,
- PL_WINNT_FILENAME
-} pl_winNT_mainstate;
-
-typedef union {
- enum {
- PL_WINNT_TIME_PRESPACE = 0,
- PL_WINNT_TIME_TIME
- } time;
- enum {
- PL_WINNT_DIRORSIZE_PRESPACE = 0,
- PL_WINNT_DIRORSIZE_CONTENT
- } dirorsize;
- enum {
- PL_WINNT_FILENAME_PRESPACE = 0,
- PL_WINNT_FILENAME_CONTENT,
- PL_WINNT_FILENAME_WINEOL
- } filename;
-} pl_winNT_substate;
-
-/* This struct is used in wildcard downloading - for parsing LIST response */
-struct ftp_parselist_data {
- enum {
- OS_TYPE_UNKNOWN = 0,
- OS_TYPE_UNIX,
- OS_TYPE_WIN_NT
- } os_type;
-
- union {
- struct {
- pl_unix_mainstate main;
- pl_unix_substate sub;
- } UNIX;
-
- struct {
- pl_winNT_mainstate main;
- pl_winNT_substate sub;
- } NT;
- } state;
-
- CURLcode error;
- struct curl_fileinfo *file_data;
- unsigned int item_length;
- size_t item_offset;
- struct {
- size_t filename;
- size_t user;
- size_t group;
- size_t time;
- size_t perm;
- size_t symlink_target;
- } offsets;
-};
-
-struct ftp_parselist_data *Curl_ftp_parselist_data_alloc(void)
-{
- return calloc(1, sizeof(struct ftp_parselist_data));
-}
-
-
-void Curl_ftp_parselist_data_free(struct ftp_parselist_data **pl_data)
-{
- if(*pl_data)
- free(*pl_data);
- *pl_data = NULL;
-}
-
-
-CURLcode Curl_ftp_parselist_geterror(struct ftp_parselist_data *pl_data)
-{
- return pl_data->error;
-}
-
-
-#define FTP_LP_MALFORMATED_PERM 0x01000000
-
-static int ftp_pl_get_permission(const char *str)
-{
- int permissions = 0;
- /* USER */
- if(str[0] == 'r')
- permissions |= 1 << 8;
- else if(str[0] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
- if(str[1] == 'w')
- permissions |= 1 << 7;
- else if(str[1] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
-
- if(str[2] == 'x')
- permissions |= 1 << 6;
- else if(str[2] == 's') {
- permissions |= 1 << 6;
- permissions |= 1 << 11;
- }
- else if(str[2] == 'S')
- permissions |= 1 << 11;
- else if(str[2] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
- /* GROUP */
- if(str[3] == 'r')
- permissions |= 1 << 5;
- else if(str[3] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
- if(str[4] == 'w')
- permissions |= 1 << 4;
- else if(str[4] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
- if(str[5] == 'x')
- permissions |= 1 << 3;
- else if(str[5] == 's') {
- permissions |= 1 << 3;
- permissions |= 1 << 10;
- }
- else if(str[5] == 'S')
- permissions |= 1 << 10;
- else if(str[5] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
- /* others */
- if(str[6] == 'r')
- permissions |= 1 << 2;
- else if(str[6] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
- if(str[7] == 'w')
- permissions |= 1 << 1;
- else if(str[7] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
- if(str[8] == 'x')
- permissions |= 1;
- else if(str[8] == 't') {
- permissions |= 1;
- permissions |= 1 << 9;
- }
- else if(str[8] == 'T')
- permissions |= 1 << 9;
- else if(str[8] != '-')
- permissions |= FTP_LP_MALFORMATED_PERM;
-
- return permissions;
-}
-
-static void PL_ERROR(struct connectdata *conn, CURLcode err)
-{
- struct ftp_wc_tmpdata *tmpdata = conn->data->wildcard.tmp;
- struct ftp_parselist_data *parser = tmpdata->parser;
- if(parser->file_data)
- Curl_fileinfo_dtor(NULL, parser->file_data);
- parser->file_data = NULL;
- parser->error = err;
-}
-
-static bool ftp_pl_gettime(struct ftp_parselist_data *parser, char *string)
-{
- (void)parser;
- (void)string;
- /* TODO
- * There could be possible parse timestamp from server. Leaving unimplemented
- * for now.
- * If you want implement this, please add CURLFINFOFLAG_KNOWN_TIME flag to
- * parser->file_data->flags
- *
- * Ftp servers are giving usually these formats:
- * Apr 11 1998 (unknown time.. set it to 00:00:00?)
- * Apr 11 12:21 (unknown year -> set it to NOW() time?)
- * 08-05-09 02:49PM (ms-dos format)
- * 20100421092538 -> for MLST/MLSD response
- */
-
- return FALSE;
-}
-
-static CURLcode ftp_pl_insert_finfo(struct connectdata *conn,
- struct curl_fileinfo *finfo)
-{
- curl_fnmatch_callback compare;
- struct WildcardData *wc = &conn->data->wildcard;
- struct ftp_wc_tmpdata *tmpdata = wc->tmp;
- struct curl_llist *llist = wc->filelist;
- struct ftp_parselist_data *parser = tmpdata->parser;
- bool add = TRUE;
-
- /* move finfo pointers to b_data */
- char *str = finfo->b_data;
- finfo->filename = str + parser->offsets.filename;
- finfo->strings.group = parser->offsets.group ?
- str + parser->offsets.group : NULL;
- finfo->strings.perm = parser->offsets.perm ?
- str + parser->offsets.perm : NULL;
- finfo->strings.target = parser->offsets.symlink_target ?
- str + parser->offsets.symlink_target : NULL;
- finfo->strings.time = str + parser->offsets.time;
- finfo->strings.user = parser->offsets.user ?
- str + parser->offsets.user : NULL;
-
- /* get correct fnmatch callback */
- compare = conn->data->set.fnmatch;
- if(!compare)
- compare = Curl_fnmatch;
-
- /* filter pattern-corresponding filenames */
- if(compare(conn->data->set.fnmatch_data, wc->pattern,
- finfo->filename) == 0) {
- /* discard symlink which is containing multiple " -> " */
- if((finfo->filetype == CURLFILETYPE_SYMLINK) && finfo->strings.target &&
- (strstr(finfo->strings.target, " -> "))) {
- add = FALSE;
- }
- }
- else {
- add = FALSE;
- }
-
- if(add) {
- if(!Curl_llist_insert_next(llist, llist->tail, finfo)) {
- Curl_fileinfo_dtor(NULL, finfo);
- tmpdata->parser->file_data = NULL;
- return CURLE_OUT_OF_MEMORY;
- }
- }
- else {
- Curl_fileinfo_dtor(NULL, finfo);
- }
-
- tmpdata->parser->file_data = NULL;
- return CURLE_OK;
-}
-
-size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
- void *connptr)
-{
- size_t bufflen = size*nmemb;
- struct connectdata *conn = (struct connectdata *)connptr;
- struct ftp_wc_tmpdata *tmpdata = conn->data->wildcard.tmp;
- struct ftp_parselist_data *parser = tmpdata->parser;
- struct curl_fileinfo *finfo;
- unsigned long i = 0;
- CURLcode rc;
-
- if(parser->error) { /* error in previous call */
- /* scenario:
- * 1. call => OK..
- * 2. call => OUT_OF_MEMORY (or other error)
- * 3. (last) call => is skipped RIGHT HERE and the error is hadled later
- * in wc_statemach()
- */
- return bufflen;
- }
-
- if(parser->os_type == OS_TYPE_UNKNOWN && bufflen > 0) {
- /* considering info about FILE response format */
- parser->os_type = (buffer[0] >= '0' && buffer[0] <= '9') ?
- OS_TYPE_WIN_NT : OS_TYPE_UNIX;
- }
-
- while(i < bufflen) { /* FSM */
-
- char c = buffer[i];
- if(!parser->file_data) { /* tmp file data is not allocated yet */
- parser->file_data = Curl_fileinfo_alloc();
- if(!parser->file_data) {
- parser->error = CURLE_OUT_OF_MEMORY;
- return bufflen;
- }
- parser->file_data->b_data = malloc(FTP_BUFFER_ALLOCSIZE);
- if(!parser->file_data->b_data) {
- PL_ERROR(conn, CURLE_OUT_OF_MEMORY);
- return bufflen;
- }
- parser->file_data->b_size = FTP_BUFFER_ALLOCSIZE;
- parser->item_offset = 0;
- parser->item_length = 0;
- }
-
- finfo = parser->file_data;
- finfo->b_data[finfo->b_used++] = c;
-
- if(finfo->b_used >= finfo->b_size - 1) {
- /* if it is important, extend buffer space for file data */
- char *tmp = realloc(finfo->b_data,
- finfo->b_size + FTP_BUFFER_ALLOCSIZE);
- if(tmp) {
- finfo->b_size += FTP_BUFFER_ALLOCSIZE;
- finfo->b_data = tmp;
- }
- else {
- Curl_fileinfo_dtor(NULL, parser->file_data);
- parser->file_data = NULL;
- parser->error = CURLE_OUT_OF_MEMORY;
- PL_ERROR(conn, CURLE_OUT_OF_MEMORY);
- return bufflen;
- }
- }
-
- switch (parser->os_type) {
- case OS_TYPE_UNIX:
- switch (parser->state.UNIX.main) {
- case PL_UNIX_TOTALSIZE:
- switch(parser->state.UNIX.sub.total_dirsize) {
- case PL_UNIX_TOTALSIZE_INIT:
- if(c == 't') {
- parser->state.UNIX.sub.total_dirsize = PL_UNIX_TOTALSIZE_READING;
- parser->item_length++;
- }
- else {
- parser->state.UNIX.main = PL_UNIX_FILETYPE;
- /* start FSM again not considering size of directory */
- finfo->b_used = 0;
- i--;
- }
- break;
- case PL_UNIX_TOTALSIZE_READING:
- parser->item_length++;
- if(c == '\r') {
- parser->item_length--;
- finfo->b_used--;
- }
- else if(c == '\n') {
- finfo->b_data[parser->item_length - 1] = 0;
- if(strncmp("total ", finfo->b_data, 6) == 0) {
- char *endptr = finfo->b_data+6;
- /* here we can deal with directory size, pass the leading white
- spaces and then the digits */
- while(ISSPACE(*endptr))
- endptr++;
- while(ISDIGIT(*endptr))
- endptr++;
- if(*endptr != 0) {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- else {
- parser->state.UNIX.main = PL_UNIX_FILETYPE;
- finfo->b_used = 0;
- }
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- break;
- }
- break;
- case PL_UNIX_FILETYPE:
- switch (c) {
- case '-':
- finfo->filetype = CURLFILETYPE_FILE;
- break;
- case 'd':
- finfo->filetype = CURLFILETYPE_DIRECTORY;
- break;
- case 'l':
- finfo->filetype = CURLFILETYPE_SYMLINK;
- break;
- case 'p':
- finfo->filetype = CURLFILETYPE_NAMEDPIPE;
- break;
- case 's':
- finfo->filetype = CURLFILETYPE_SOCKET;
- break;
- case 'c':
- finfo->filetype = CURLFILETYPE_DEVICE_CHAR;
- break;
- case 'b':
- finfo->filetype = CURLFILETYPE_DEVICE_BLOCK;
- break;
- case 'D':
- finfo->filetype = CURLFILETYPE_DOOR;
- break;
- default:
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- parser->state.UNIX.main = PL_UNIX_PERMISSION;
- parser->item_length = 0;
- parser->item_offset = 1;
- break;
- case PL_UNIX_PERMISSION:
- parser->item_length++;
- if(parser->item_length <= 9) {
- if(!strchr("rwx-tTsS", c)) {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- else if(parser->item_length == 10) {
- unsigned int perm;
- if(c != ' ') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- finfo->b_data[10] = 0; /* terminate permissions */
- perm = ftp_pl_get_permission(finfo->b_data + parser->item_offset);
- if(perm & FTP_LP_MALFORMATED_PERM) {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- parser->file_data->flags |= CURLFINFOFLAG_KNOWN_PERM;
- parser->file_data->perm = perm;
- parser->offsets.perm = parser->item_offset;
-
- parser->item_length = 0;
- parser->state.UNIX.main = PL_UNIX_HLINKS;
- parser->state.UNIX.sub.hlinks = PL_UNIX_HLINKS_PRESPACE;
- }
- break;
- case PL_UNIX_HLINKS:
- switch(parser->state.UNIX.sub.hlinks) {
- case PL_UNIX_HLINKS_PRESPACE:
- if(c != ' ') {
- if(c >= '0' && c <= '9') {
- parser->item_offset = finfo->b_used - 1;
- parser->item_length = 1;
- parser->state.UNIX.sub.hlinks = PL_UNIX_HLINKS_NUMBER;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- break;
- case PL_UNIX_HLINKS_NUMBER:
- parser->item_length ++;
- if(c == ' ') {
- char *p;
- long int hlinks;
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- hlinks = strtol(finfo->b_data + parser->item_offset, &p, 10);
- if(p[0] == '\0' && hlinks != LONG_MAX && hlinks != LONG_MIN) {
- parser->file_data->flags |= CURLFINFOFLAG_KNOWN_HLINKCOUNT;
- parser->file_data->hardlinks = hlinks;
- }
- parser->item_length = 0;
- parser->item_offset = 0;
- parser->state.UNIX.main = PL_UNIX_USER;
- parser->state.UNIX.sub.user = PL_UNIX_USER_PRESPACE;
- }
- else if(c < '0' || c > '9') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- }
- break;
- case PL_UNIX_USER:
- switch(parser->state.UNIX.sub.user) {
- case PL_UNIX_USER_PRESPACE:
- if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
- parser->item_length = 1;
- parser->state.UNIX.sub.user = PL_UNIX_USER_PARSING;
- }
- break;
- case PL_UNIX_USER_PARSING:
- parser->item_length++;
- if(c == ' ') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- parser->offsets.user = parser->item_offset;
- parser->state.UNIX.main = PL_UNIX_GROUP;
- parser->state.UNIX.sub.group = PL_UNIX_GROUP_PRESPACE;
- parser->item_offset = 0;
- parser->item_length = 0;
- }
- break;
- }
- break;
- case PL_UNIX_GROUP:
- switch(parser->state.UNIX.sub.group) {
- case PL_UNIX_GROUP_PRESPACE:
- if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
- parser->item_length = 1;
- parser->state.UNIX.sub.group = PL_UNIX_GROUP_NAME;
- }
- break;
- case PL_UNIX_GROUP_NAME:
- parser->item_length++;
- if(c == ' ') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- parser->offsets.group = parser->item_offset;
- parser->state.UNIX.main = PL_UNIX_SIZE;
- parser->state.UNIX.sub.size = PL_UNIX_SIZE_PRESPACE;
- parser->item_offset = 0;
- parser->item_length = 0;
- }
- break;
- }
- break;
- case PL_UNIX_SIZE:
- switch(parser->state.UNIX.sub.size) {
- case PL_UNIX_SIZE_PRESPACE:
- if(c != ' ') {
- if(c >= '0' && c <= '9') {
- parser->item_offset = finfo->b_used - 1;
- parser->item_length = 1;
- parser->state.UNIX.sub.size = PL_UNIX_SIZE_NUMBER;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- break;
- case PL_UNIX_SIZE_NUMBER:
- parser->item_length++;
- if(c == ' ') {
- char *p;
- curl_off_t fsize;
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- fsize = curlx_strtoofft(finfo->b_data+parser->item_offset, &p, 10);
- if(p[0] == '\0' && fsize != CURL_OFF_T_MAX &&
- fsize != CURL_OFF_T_MIN) {
- parser->file_data->flags |= CURLFINFOFLAG_KNOWN_SIZE;
- parser->file_data->size = fsize;
- }
- parser->item_length = 0;
- parser->item_offset = 0;
- parser->state.UNIX.main = PL_UNIX_TIME;
- parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART1;
- }
- else if(!ISDIGIT(c)) {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- }
- break;
- case PL_UNIX_TIME:
- switch(parser->state.UNIX.sub.time) {
- case PL_UNIX_TIME_PREPART1:
- if(c != ' ') {
- if(ISALNUM(c)) {
- parser->item_offset = finfo->b_used -1;
- parser->item_length = 1;
- parser->state.UNIX.sub.time = PL_UNIX_TIME_PART1;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- break;
- case PL_UNIX_TIME_PART1:
- parser->item_length++;
- if(c == ' ') {
- parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART2;
- }
- else if(!ISALNUM(c) && c != '.') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- case PL_UNIX_TIME_PREPART2:
- parser->item_length++;
- if(c != ' ') {
- if(ISALNUM(c)) {
- parser->state.UNIX.sub.time = PL_UNIX_TIME_PART2;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- break;
- case PL_UNIX_TIME_PART2:
- parser->item_length++;
- if(c == ' ') {
- parser->state.UNIX.sub.time = PL_UNIX_TIME_PREPART3;
- }
- else if(!ISALNUM(c) && c != '.') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- case PL_UNIX_TIME_PREPART3:
- parser->item_length++;
- if(c != ' ') {
- if(ISALNUM(c)) {
- parser->state.UNIX.sub.time = PL_UNIX_TIME_PART3;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- break;
- case PL_UNIX_TIME_PART3:
- parser->item_length++;
- if(c == ' ') {
- finfo->b_data[parser->item_offset + parser->item_length -1] = 0;
- parser->offsets.time = parser->item_offset;
- if(ftp_pl_gettime(parser, finfo->b_data + parser->item_offset)) {
- parser->file_data->flags |= CURLFINFOFLAG_KNOWN_TIME;
- }
- if(finfo->filetype == CURLFILETYPE_SYMLINK) {
- parser->state.UNIX.main = PL_UNIX_SYMLINK;
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRESPACE;
- }
- else {
- parser->state.UNIX.main = PL_UNIX_FILENAME;
- parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_PRESPACE;
- }
- }
- else if(!ISALNUM(c) && c != '.' && c != ':') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- }
- break;
- case PL_UNIX_FILENAME:
- switch(parser->state.UNIX.sub.filename) {
- case PL_UNIX_FILENAME_PRESPACE:
- if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
- parser->item_length = 1;
- parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_NAME;
- }
- break;
- case PL_UNIX_FILENAME_NAME:
- parser->item_length++;
- if(c == '\r') {
- parser->item_length--;
- parser->state.UNIX.sub.filename = PL_UNIX_FILENAME_WINDOWSEOL;
- }
- else if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- parser->offsets.filename = parser->item_offset;
- parser->state.UNIX.main = PL_UNIX_FILETYPE;
- rc = ftp_pl_insert_finfo(conn, finfo);
- if(rc) {
- PL_ERROR(conn, rc);
- return bufflen;
- }
- }
- break;
- case PL_UNIX_FILENAME_WINDOWSEOL:
- if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length] = 0;
- parser->offsets.filename = parser->item_offset;
- parser->state.UNIX.main = PL_UNIX_FILETYPE;
- rc = ftp_pl_insert_finfo(conn, finfo);
- if(rc) {
- PL_ERROR(conn, rc);
- return bufflen;
- }
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- }
- break;
- case PL_UNIX_SYMLINK:
- switch(parser->state.UNIX.sub.symlink) {
- case PL_UNIX_SYMLINK_PRESPACE:
- if(c != ' ') {
- parser->item_offset = finfo->b_used - 1;
- parser->item_length = 1;
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
- }
- break;
- case PL_UNIX_SYMLINK_NAME:
- parser->item_length++;
- if(c == ' ') {
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET1;
- }
- else if(c == '\r' || c == '\n') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- case PL_UNIX_SYMLINK_PRETARGET1:
- parser->item_length++;
- if(c == '-') {
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET2;
- }
- else if(c == '\r' || c == '\n') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- else {
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
- }
- break;
- case PL_UNIX_SYMLINK_PRETARGET2:
- parser->item_length++;
- if(c == '>') {
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET3;
- }
- else if(c == '\r' || c == '\n') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- else {
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
- }
- break;
- case PL_UNIX_SYMLINK_PRETARGET3:
- parser->item_length++;
- if(c == ' ') {
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_PRETARGET4;
- /* now place where is symlink following */
- finfo->b_data[parser->item_offset + parser->item_length - 4] = 0;
- parser->offsets.filename = parser->item_offset;
- parser->item_length = 0;
- parser->item_offset = 0;
- }
- else if(c == '\r' || c == '\n') {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- else {
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_NAME;
- }
- break;
- case PL_UNIX_SYMLINK_PRETARGET4:
- if(c != '\r' && c != '\n') {
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_TARGET;
- parser->item_offset = finfo->b_used - 1;
- parser->item_length = 1;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- case PL_UNIX_SYMLINK_TARGET:
- parser->item_length ++;
- if(c == '\r') {
- parser->item_length --;
- parser->state.UNIX.sub.symlink = PL_UNIX_SYMLINK_WINDOWSEOL;
- }
- else if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- parser->offsets.symlink_target = parser->item_offset;
- rc = ftp_pl_insert_finfo(conn, finfo);
- if(rc) {
- PL_ERROR(conn, rc);
- return bufflen;
- }
- parser->state.UNIX.main = PL_UNIX_FILETYPE;
- }
- break;
- case PL_UNIX_SYMLINK_WINDOWSEOL:
- if(c == '\n') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- parser->offsets.symlink_target = parser->item_offset;
- rc = ftp_pl_insert_finfo(conn, finfo);
- if(rc) {
- PL_ERROR(conn, rc);
- return bufflen;
- }
- parser->state.UNIX.main = PL_UNIX_FILETYPE;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- }
- break;
- }
- break;
- case OS_TYPE_WIN_NT:
- switch(parser->state.NT.main) {
- case PL_WINNT_DATE:
- parser->item_length++;
- if(parser->item_length < 9) {
- if(!strchr("0123456789-", c)) { /* only simple control */
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- else if(parser->item_length == 9) {
- if(c == ' ') {
- parser->state.NT.main = PL_WINNT_TIME;
- parser->state.NT.sub.time = PL_WINNT_TIME_PRESPACE;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- case PL_WINNT_TIME:
- parser->item_length++;
- switch(parser->state.NT.sub.time) {
- case PL_WINNT_TIME_PRESPACE:
- if(!ISSPACE(c)) {
- parser->state.NT.sub.time = PL_WINNT_TIME_TIME;
- }
- break;
- case PL_WINNT_TIME_TIME:
- if(c == ' ') {
- parser->offsets.time = parser->item_offset;
- finfo->b_data[parser->item_offset + parser->item_length -1] = 0;
- parser->state.NT.main = PL_WINNT_DIRORSIZE;
- parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_PRESPACE;
- parser->item_length = 0;
- }
- else if(!strchr("APM0123456789:", c)) {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- }
- break;
- case PL_WINNT_DIRORSIZE:
- switch(parser->state.NT.sub.dirorsize) {
- case PL_WINNT_DIRORSIZE_PRESPACE:
- if(c == ' ') {
-
- }
- else {
- parser->item_offset = finfo->b_used - 1;
- parser->item_length = 1;
- parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_CONTENT;
- }
- break;
- case PL_WINNT_DIRORSIZE_CONTENT:
- parser->item_length ++;
- if(c == ' ') {
- finfo->b_data[parser->item_offset + parser->item_length - 1] = 0;
- if(strcmp("<DIR>", finfo->b_data + parser->item_offset) == 0) {
- finfo->filetype = CURLFILETYPE_DIRECTORY;
- finfo->size = 0;
- }
- else {
- char *endptr;
- finfo->size = curlx_strtoofft(finfo->b_data +
- parser->item_offset,
- &endptr, 10);
- if(!*endptr) {
- if(finfo->size == CURL_OFF_T_MAX ||
- finfo->size == CURL_OFF_T_MIN) {
- if(errno == ERANGE) {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- }
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- /* correct file type */
- parser->file_data->filetype = CURLFILETYPE_FILE;
- }
-
- parser->file_data->flags |= CURLFINFOFLAG_KNOWN_SIZE;
- parser->item_length = 0;
- parser->state.NT.main = PL_WINNT_FILENAME;
- parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
- }
- break;
- }
- break;
- case PL_WINNT_FILENAME:
- switch (parser->state.NT.sub.filename) {
- case PL_WINNT_FILENAME_PRESPACE:
- if(c != ' ') {
- parser->item_offset = finfo->b_used -1;
- parser->item_length = 1;
- parser->state.NT.sub.filename = PL_WINNT_FILENAME_CONTENT;
- }
- break;
- case PL_WINNT_FILENAME_CONTENT:
- parser->item_length++;
- if(c == '\r') {
- parser->state.NT.sub.filename = PL_WINNT_FILENAME_WINEOL;
- finfo->b_data[finfo->b_used - 1] = 0;
- }
- else if(c == '\n') {
- parser->offsets.filename = parser->item_offset;
- finfo->b_data[finfo->b_used - 1] = 0;
- parser->offsets.filename = parser->item_offset;
- rc = ftp_pl_insert_finfo(conn, finfo);
- if(rc) {
- PL_ERROR(conn, rc);
- return bufflen;
- }
- parser->state.NT.main = PL_WINNT_DATE;
- parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
- }
- break;
- case PL_WINNT_FILENAME_WINEOL:
- if(c == '\n') {
- parser->offsets.filename = parser->item_offset;
- rc = ftp_pl_insert_finfo(conn, finfo);
- if(rc) {
- PL_ERROR(conn, rc);
- return bufflen;
- }
- parser->state.NT.main = PL_WINNT_DATE;
- parser->state.NT.sub.filename = PL_WINNT_FILENAME_PRESPACE;
- }
- else {
- PL_ERROR(conn, CURLE_FTP_BAD_FILE_LIST);
- return bufflen;
- }
- break;
- }
- break;
- }
- break;
- default:
- return bufflen+1;
- }
-
- i++;
- }
-
- return bufflen;
-}
-
-#endif /* CURL_DISABLE_FTP */
diff --git a/external/libcurl_android/jni/libcurl/lib/ftplistparser.h b/external/libcurl_android/jni/libcurl/lib/ftplistparser.h
deleted file mode 100755
index 96764e2a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/ftplistparser.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef HEADER_CURL_FTPLISTPARSER_H
-#define HEADER_CURL_FTPLISTPARSER_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_FTP
-
-/* WRITEFUNCTION callback for parsing LIST responses */
-size_t Curl_ftp_parselist(char *buffer, size_t size, size_t nmemb,
- void *connptr);
-
-struct ftp_parselist_data; /* defined inside ftplibparser.c */
-
-CURLcode Curl_ftp_parselist_geterror(struct ftp_parselist_data *pl_data);
-
-struct ftp_parselist_data *Curl_ftp_parselist_data_alloc(void);
-
-void Curl_ftp_parselist_data_free(struct ftp_parselist_data **pl_data);
-
-#endif /* CURL_DISABLE_FTP */
-#endif /* HEADER_CURL_FTPLISTPARSER_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/getenv.c b/external/libcurl_android/jni/libcurl/lib/getenv.c
deleted file mode 100755
index 36215aab..00000000
--- a/external/libcurl_android/jni/libcurl/lib/getenv.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-#include "curl_memory.h"
-
-#include "memdebug.h"
-
-static
-char *GetEnv(const char *variable)
-{
-#ifdef _WIN32_WCE
- return NULL;
-#else
-#ifdef WIN32
- char env[MAX_PATH]; /* MAX_PATH is from windef.h */
- char *temp = getenv(variable);
- env[0] = '\0';
- if(temp != NULL)
- ExpandEnvironmentStringsA(temp, env, sizeof(env));
- return (env[0] != '\0')?strdup(env):NULL;
-#else
- char *env = getenv(variable);
- return (env && env[0])?strdup(env):NULL;
-#endif
-#endif
-}
-
-char *curl_getenv(const char *v)
-{
- return GetEnv(v);
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/getinfo.c b/external/libcurl_android/jni/libcurl/lib/getinfo.c
deleted file mode 100755
index 8905d361..00000000
--- a/external/libcurl_android/jni/libcurl/lib/getinfo.c
+++ /dev/null
@@ -1,381 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "getinfo.h"
-
-#include "curl_memory.h"
-#include "vtls/vtls.h"
-#include "connect.h" /* Curl_getconnectinfo() */
-#include "progress.h"
-
-/* Make this the last #include */
-#include "memdebug.h"
-
-/*
- * This is supposed to be called in the beginning of a perform() session
- * and should reset all session-info variables
- */
-CURLcode Curl_initinfo(struct SessionHandle *data)
-{
- struct Progress *pro = &data->progress;
- struct PureInfo *info =&data->info;
-
- pro->t_nslookup = 0;
- pro->t_connect = 0;
- pro->t_appconnect = 0;
- pro->t_pretransfer = 0;
- pro->t_starttransfer = 0;
- pro->timespent = 0;
- pro->t_redirect = 0;
-
- info->httpcode = 0;
- info->httpproxycode = 0;
- info->httpversion = 0;
- info->filetime = -1; /* -1 is an illegal time and thus means unknown */
- info->timecond = FALSE;
-
- if(info->contenttype)
- free(info->contenttype);
- info->contenttype = NULL;
-
- info->header_size = 0;
- info->request_size = 0;
- info->numconnects = 0;
-
- info->conn_primary_ip[0] = '\0';
- info->conn_local_ip[0] = '\0';
- info->conn_primary_port = 0;
- info->conn_local_port = 0;
-
- return CURLE_OK;
-}
-
-static CURLcode getinfo_char(struct SessionHandle *data, CURLINFO info,
- char **param_charp)
-{
- switch(info) {
- case CURLINFO_EFFECTIVE_URL:
- *param_charp = data->change.url?data->change.url:(char *)"";
- break;
- case CURLINFO_CONTENT_TYPE:
- *param_charp = data->info.contenttype;
- break;
- case CURLINFO_PRIVATE:
- *param_charp = (char *) data->set.private_data;
- break;
- case CURLINFO_FTP_ENTRY_PATH:
- /* Return the entrypath string from the most recent connection.
- This pointer was copied from the connectdata structure by FTP.
- The actual string may be free()ed by subsequent libcurl calls so
- it must be copied to a safer area before the next libcurl call.
- Callers must never free it themselves. */
- *param_charp = data->state.most_recent_ftp_entrypath;
- break;
- case CURLINFO_REDIRECT_URL:
- /* Return the URL this request would have been redirected to if that
- option had been enabled! */
- *param_charp = data->info.wouldredirect;
- break;
- case CURLINFO_PRIMARY_IP:
- /* Return the ip address of the most recent (primary) connection */
- *param_charp = data->info.conn_primary_ip;
- break;
- case CURLINFO_LOCAL_IP:
- /* Return the source/local ip address of the most recent (primary)
- connection */
- *param_charp = data->info.conn_local_ip;
- break;
- case CURLINFO_RTSP_SESSION_ID:
- *param_charp = data->set.str[STRING_RTSP_SESSION_ID];
- break;
-
- default:
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- return CURLE_OK;
-}
-
-static CURLcode getinfo_long(struct SessionHandle *data, CURLINFO info,
- long *param_longp)
-{
- curl_socket_t sockfd;
-
- union {
- unsigned long *to_ulong;
- long *to_long;
- } lptr;
-
- switch(info) {
- case CURLINFO_RESPONSE_CODE:
- *param_longp = data->info.httpcode;
- break;
- case CURLINFO_HTTP_CONNECTCODE:
- *param_longp = data->info.httpproxycode;
- break;
- case CURLINFO_FILETIME:
- *param_longp = data->info.filetime;
- break;
- case CURLINFO_HEADER_SIZE:
- *param_longp = data->info.header_size;
- break;
- case CURLINFO_REQUEST_SIZE:
- *param_longp = data->info.request_size;
- break;
- case CURLINFO_SSL_VERIFYRESULT:
- *param_longp = data->set.ssl.certverifyresult;
- break;
- case CURLINFO_REDIRECT_COUNT:
- *param_longp = data->set.followlocation;
- break;
- case CURLINFO_HTTPAUTH_AVAIL:
- lptr.to_long = param_longp;
- *lptr.to_ulong = data->info.httpauthavail;
- break;
- case CURLINFO_PROXYAUTH_AVAIL:
- lptr.to_long = param_longp;
- *lptr.to_ulong = data->info.proxyauthavail;
- break;
- case CURLINFO_OS_ERRNO:
- *param_longp = data->state.os_errno;
- break;
- case CURLINFO_NUM_CONNECTS:
- *param_longp = data->info.numconnects;
- break;
- case CURLINFO_LASTSOCKET:
- sockfd = Curl_getconnectinfo(data, NULL);
-
- /* note: this is not a good conversion for systems with 64 bit sockets and
- 32 bit longs */
- if(sockfd != CURL_SOCKET_BAD)
- *param_longp = (long)sockfd;
- else
- /* this interface is documented to return -1 in case of badness, which
- may not be the same as the CURL_SOCKET_BAD value */
- *param_longp = -1;
- break;
- case CURLINFO_PRIMARY_PORT:
- /* Return the (remote) port of the most recent (primary) connection */
- *param_longp = data->info.conn_primary_port;
- break;
- case CURLINFO_LOCAL_PORT:
- /* Return the local port of the most recent (primary) connection */
- *param_longp = data->info.conn_local_port;
- break;
- case CURLINFO_CONDITION_UNMET:
- /* return if the condition prevented the document to get transferred */
- *param_longp = data->info.timecond ? 1L : 0L;
- break;
- case CURLINFO_RTSP_CLIENT_CSEQ:
- *param_longp = data->state.rtsp_next_client_CSeq;
- break;
- case CURLINFO_RTSP_SERVER_CSEQ:
- *param_longp = data->state.rtsp_next_server_CSeq;
- break;
- case CURLINFO_RTSP_CSEQ_RECV:
- *param_longp = data->state.rtsp_CSeq_recv;
- break;
-
- default:
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- return CURLE_OK;
-}
-
-static CURLcode getinfo_double(struct SessionHandle *data, CURLINFO info,
- double *param_doublep)
-{
- switch(info) {
- case CURLINFO_TOTAL_TIME:
- *param_doublep = data->progress.timespent;
- break;
- case CURLINFO_NAMELOOKUP_TIME:
- *param_doublep = data->progress.t_nslookup;
- break;
- case CURLINFO_CONNECT_TIME:
- *param_doublep = data->progress.t_connect;
- break;
- case CURLINFO_APPCONNECT_TIME:
- *param_doublep = data->progress.t_appconnect;
- break;
- case CURLINFO_PRETRANSFER_TIME:
- *param_doublep = data->progress.t_pretransfer;
- break;
- case CURLINFO_STARTTRANSFER_TIME:
- *param_doublep = data->progress.t_starttransfer;
- break;
- case CURLINFO_SIZE_UPLOAD:
- *param_doublep = (double)data->progress.uploaded;
- break;
- case CURLINFO_SIZE_DOWNLOAD:
- *param_doublep = (double)data->progress.downloaded;
- break;
- case CURLINFO_SPEED_DOWNLOAD:
- *param_doublep = (double)data->progress.dlspeed;
- break;
- case CURLINFO_SPEED_UPLOAD:
- *param_doublep = (double)data->progress.ulspeed;
- break;
- case CURLINFO_CONTENT_LENGTH_DOWNLOAD:
- *param_doublep = (data->progress.flags & PGRS_DL_SIZE_KNOWN)?
- (double)data->progress.size_dl:-1;
- break;
- case CURLINFO_CONTENT_LENGTH_UPLOAD:
- *param_doublep = (data->progress.flags & PGRS_UL_SIZE_KNOWN)?
- (double)data->progress.size_ul:-1;
- break;
- case CURLINFO_REDIRECT_TIME:
- *param_doublep = data->progress.t_redirect;
- break;
-
- default:
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- return CURLE_OK;
-}
-
-static CURLcode getinfo_slist(struct SessionHandle *data, CURLINFO info,
- struct curl_slist **param_slistp)
-{
- union {
- struct curl_certinfo * to_certinfo;
- struct curl_slist * to_slist;
- } ptr;
-
- switch(info) {
- case CURLINFO_SSL_ENGINES:
- *param_slistp = Curl_ssl_engines_list(data);
- break;
- case CURLINFO_COOKIELIST:
- *param_slistp = Curl_cookie_list(data);
- break;
- case CURLINFO_CERTINFO:
- /* Return the a pointer to the certinfo struct. Not really an slist
- pointer but we can pretend it is here */
- ptr.to_certinfo = &data->info.certs;
- *param_slistp = ptr.to_slist;
- break;
- case CURLINFO_TLS_SESSION:
- {
- struct curl_tlssessioninfo **tsip = (struct curl_tlssessioninfo **)
- param_slistp;
- struct curl_tlssessioninfo *tsi = &data->tsi;
- struct connectdata *conn = data->easy_conn;
- unsigned int sockindex = 0;
- void *internals = NULL;
-
- *tsip = tsi;
- tsi->backend = CURLSSLBACKEND_NONE;
- tsi->internals = NULL;
-
- if(!conn)
- break;
-
- /* Find the active ("in use") SSL connection, if any */
- while((sockindex < sizeof(conn->ssl) / sizeof(conn->ssl[0])) &&
- (!conn->ssl[sockindex].use))
- sockindex++;
-
- if(sockindex == sizeof(conn->ssl) / sizeof(conn->ssl[0]))
- break; /* no SSL session found */
-
- /* Return the TLS session information from the relevant backend */
-#ifdef USE_SSLEAY
- internals = conn->ssl[sockindex].ctx;
-#endif
-#ifdef USE_GNUTLS
- internals = conn->ssl[sockindex].session;
-#endif
-#ifdef USE_NSS
- internals = conn->ssl[sockindex].handle;
-#endif
-#ifdef USE_QSOSSL
- internals = conn->ssl[sockindex].handle;
-#endif
-#ifdef USE_GSKIT
- internals = conn->ssl[sockindex].handle;
-#endif
- if(internals) {
- tsi->backend = Curl_ssl_backend();
- tsi->internals = internals;
- }
- /* NOTE: For other SSL backends, it is not immediately clear what data
- to return from 'struct ssl_connect_data'; thus, for now we keep the
- backend as CURLSSLBACKEND_NONE in those cases, which should be
- interpreted as "not supported" */
- }
- break;
- default:
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- return CURLE_OK;
-}
-
-CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
-{
- va_list arg;
- long *param_longp=NULL;
- double *param_doublep=NULL;
- char **param_charp=NULL;
- struct curl_slist **param_slistp=NULL;
- int type;
- /* default return code is to error out! */
- CURLcode ret = CURLE_BAD_FUNCTION_ARGUMENT;
-
- if(!data)
- return ret;
-
- va_start(arg, info);
-
- type = CURLINFO_TYPEMASK & (int)info;
- switch(type) {
- case CURLINFO_STRING:
- param_charp = va_arg(arg, char **);
- if(NULL != param_charp)
- ret = getinfo_char(data, info, param_charp);
- break;
- case CURLINFO_LONG:
- param_longp = va_arg(arg, long *);
- if(NULL != param_longp)
- ret = getinfo_long(data, info, param_longp);
- break;
- case CURLINFO_DOUBLE:
- param_doublep = va_arg(arg, double *);
- if(NULL != param_doublep)
- ret = getinfo_double(data, info, param_doublep);
- break;
- case CURLINFO_SLIST:
- param_slistp = va_arg(arg, struct curl_slist **);
- if(NULL != param_slistp)
- ret = getinfo_slist(data, info, param_slistp);
- break;
- default:
- break;
- }
-
- va_end(arg);
- return ret;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/getinfo.h b/external/libcurl_android/jni/libcurl/lib/getinfo.h
deleted file mode 100755
index 3879ff73..00000000
--- a/external/libcurl_android/jni/libcurl/lib/getinfo.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef HEADER_CURL_GETINFO_H
-#define HEADER_CURL_GETINFO_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...);
-CURLcode Curl_initinfo(struct SessionHandle *data);
-
-#endif /* HEADER_CURL_GETINFO_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/gopher.c b/external/libcurl_android/jni/libcurl/lib/gopher.c
deleted file mode 100755
index b1dd65ff..00000000
--- a/external/libcurl_android/jni/libcurl/lib/gopher.c
+++ /dev/null
@@ -1,169 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_GOPHER
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "transfer.h"
-#include "sendf.h"
-
-#include "progress.h"
-#include "strequal.h"
-#include "gopher.h"
-#include "rawstr.h"
-#include "select.h"
-#include "url.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * Forward declarations.
- */
-
-static CURLcode gopher_do(struct connectdata *conn, bool *done);
-
-/*
- * Gopher protocol handler.
- * This is also a nice simple template to build off for simple
- * connect-command-download protocols.
- */
-
-const struct Curl_handler Curl_handler_gopher = {
- "GOPHER", /* scheme */
- ZERO_NULL, /* setup_connection */
- gopher_do, /* do_it */
- ZERO_NULL, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_GOPHER, /* defport */
- CURLPROTO_GOPHER, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-static CURLcode gopher_do(struct connectdata *conn, bool *done)
-{
- CURLcode result=CURLE_OK;
- struct SessionHandle *data=conn->data;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
-
- curl_off_t *bytecount = &data->req.bytecount;
- char *path = data->state.path;
- char *sel;
- char *sel_org = NULL;
- ssize_t amount, k;
-
- *done = TRUE; /* unconditionally */
-
- /* Create selector. Degenerate cases: / and /1 => convert to "" */
- if(strlen(path) <= 2)
- sel = (char *)"";
- else {
- char *newp;
- size_t j, i;
- int len;
-
- /* Otherwise, drop / and the first character (i.e., item type) ... */
- newp = path;
- newp+=2;
-
- /* ... then turn ? into TAB for search servers, Veronica, etc. ... */
- j = strlen(newp);
- for(i=0; i<j; i++)
- if(newp[i] == '?')
- newp[i] = '\x09';
-
- /* ... and finally unescape */
- sel = curl_easy_unescape(data, newp, 0, &len);
- if(!sel)
- return CURLE_OUT_OF_MEMORY;
- sel_org = sel;
- }
-
- /* We use Curl_write instead of Curl_sendf to make sure the entire buffer is
- sent, which could be sizeable with long selectors. */
- k = curlx_uztosz(strlen(sel));
-
- for(;;) {
- result = Curl_write(conn, sockfd, sel, k, &amount);
- if(CURLE_OK == result) { /* Which may not have written it all! */
- result = Curl_client_write(conn, CLIENTWRITE_HEADER, sel, amount);
- if(result) {
- Curl_safefree(sel_org);
- return result;
- }
- k -= amount;
- sel += amount;
- if(k < 1)
- break; /* but it did write it all */
- }
- else {
- failf(data, "Failed sending Gopher request");
- Curl_safefree(sel_org);
- return result;
- }
- /* Don't busyloop. The entire loop thing is a work-around as it causes a
- BLOCKING behavior which is a NO-NO. This function should rather be
- split up in a do and a doing piece where the pieces that aren't
- possible to send now will be sent in the doing function repeatedly
- until the entire request is sent.
-
- Wait a while for the socket to be writable. Note that this doesn't
- acknowledge the timeout.
- */
- Curl_socket_ready(CURL_SOCKET_BAD, sockfd, 100);
- }
-
- Curl_safefree(sel_org);
-
- /* We can use Curl_sendf to send the terminal \r\n relatively safely and
- save allocing another string/doing another _write loop. */
- result = Curl_sendf(sockfd, conn, "\r\n");
- if(result != CURLE_OK) {
- failf(data, "Failed sending Gopher request");
- return result;
- }
- result = Curl_client_write(conn, CLIENTWRITE_HEADER, (char *)"\r\n", 2);
- if(result)
- return result;
-
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,
- -1, NULL); /* no upload */
- return CURLE_OK;
-}
-#endif /*CURL_DISABLE_GOPHER*/
diff --git a/external/libcurl_android/jni/libcurl/lib/gopher.h b/external/libcurl_android/jni/libcurl/lib/gopher.h
deleted file mode 100755
index 38bbc4b7..00000000
--- a/external/libcurl_android/jni/libcurl/lib/gopher.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef HEADER_CURL_GOPHER_H
-#define HEADER_CURL_GOPHER_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#ifndef CURL_DISABLE_GOPHER
-extern const struct Curl_handler Curl_handler_gopher;
-#endif
-
-#endif /* HEADER_CURL_GOPHER_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/hash.c b/external/libcurl_android/jni/libcurl/lib/hash.c
deleted file mode 100755
index 4a12e1a7..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hash.c
+++ /dev/null
@@ -1,400 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "hash.h"
-#include "llist.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static void
-hash_element_dtor(void *user, void *element)
-{
- struct curl_hash *h = (struct curl_hash *) user;
- struct curl_hash_element *e = (struct curl_hash_element *) element;
-
- Curl_safefree(e->key);
-
- if(e->ptr) {
- h->dtor(e->ptr);
- e->ptr = NULL;
- }
-
- e->key_len = 0;
-
- free(e);
-}
-
-/* return 1 on error, 0 is fine */
-int
-Curl_hash_init(struct curl_hash *h,
- int slots,
- hash_function hfunc,
- comp_function comparator,
- curl_hash_dtor dtor)
-{
- int i;
-
- if(!slots || !hfunc || !comparator ||!dtor) {
- return 1; /* failure */
- }
-
- h->hash_func = hfunc;
- h->comp_func = comparator;
- h->dtor = dtor;
- h->size = 0;
- h->slots = slots;
-
- h->table = malloc(slots * sizeof(struct curl_llist *));
- if(h->table) {
- for(i = 0; i < slots; ++i) {
- h->table[i] = Curl_llist_alloc((curl_llist_dtor) hash_element_dtor);
- if(!h->table[i]) {
- while(i--) {
- Curl_llist_destroy(h->table[i], NULL);
- h->table[i] = NULL;
- }
- free(h->table);
- h->table = NULL;
- h->slots = 0;
- return 1; /* failure */
- }
- }
- return 0; /* fine */
- }
- else {
- h->slots = 0;
- return 1; /* failure */
- }
-}
-
-struct curl_hash *
-Curl_hash_alloc(int slots,
- hash_function hfunc,
- comp_function comparator,
- curl_hash_dtor dtor)
-{
- struct curl_hash *h;
-
- if(!slots || !hfunc || !comparator ||!dtor) {
- return NULL; /* failure */
- }
-
- h = malloc(sizeof(struct curl_hash));
- if(h) {
- if(Curl_hash_init(h, slots, hfunc, comparator, dtor)) {
- /* failure */
- free(h);
- h = NULL;
- }
- }
-
- return h;
-}
-
-
-
-static struct curl_hash_element *
-mk_hash_element(const void *key, size_t key_len, const void *p)
-{
- struct curl_hash_element *he = malloc(sizeof(struct curl_hash_element));
-
- if(he) {
- void *dupkey = malloc(key_len);
- if(dupkey) {
- /* copy the key */
- memcpy(dupkey, key, key_len);
-
- he->key = dupkey;
- he->key_len = key_len;
- he->ptr = (void *) p;
- }
- else {
- /* failed to duplicate the key, free memory and fail */
- free(he);
- he = NULL;
- }
- }
- return he;
-}
-
-#define FETCH_LIST(x,y,z) x->table[x->hash_func(y, z, x->slots)]
-
-/* Insert the data in the hash. If there already was a match in the hash,
- * that data is replaced.
- *
- * @unittest: 1305
- */
-void *
-Curl_hash_add(struct curl_hash *h, void *key, size_t key_len, void *p)
-{
- struct curl_hash_element *he;
- struct curl_llist_element *le;
- struct curl_llist *l = FETCH_LIST (h, key, key_len);
-
- for(le = l->head; le; le = le->next) {
- he = (struct curl_hash_element *) le->ptr;
- if(h->comp_func(he->key, he->key_len, key, key_len)) {
- Curl_llist_remove(l, le, (void *)h);
- --h->size;
- break;
- }
- }
-
- he = mk_hash_element(key, key_len, p);
- if(he) {
- if(Curl_llist_insert_next(l, l->tail, he)) {
- ++h->size;
- return p; /* return the new entry */
- }
- /*
- * Couldn't insert it, destroy the 'he' element and the key again. We
- * don't call hash_element_dtor() since that would also call the
- * "destructor" for the actual data 'p'. When we fail, we shall not touch
- * that data.
- */
- free(he->key);
- free(he);
- }
-
- return NULL; /* failure */
-}
-
-/* remove the identified hash entry, returns non-zero on failure */
-int Curl_hash_delete(struct curl_hash *h, void *key, size_t key_len)
-{
- struct curl_llist_element *le;
- struct curl_hash_element *he;
- struct curl_llist *l = FETCH_LIST(h, key, key_len);
-
- for(le = l->head; le; le = le->next) {
- he = le->ptr;
- if(h->comp_func(he->key, he->key_len, key, key_len)) {
- Curl_llist_remove(l, le, (void *) h);
- --h->size;
- return 0;
- }
- }
- return 1;
-}
-
-void *
-Curl_hash_pick(struct curl_hash *h, void *key, size_t key_len)
-{
- struct curl_llist_element *le;
- struct curl_hash_element *he;
- struct curl_llist *l;
-
- if(h) {
- l = FETCH_LIST(h, key, key_len);
- for(le = l->head; le; le = le->next) {
- he = le->ptr;
- if(h->comp_func(he->key, he->key_len, key, key_len)) {
- return he->ptr;
- }
- }
- }
-
- return NULL;
-}
-
-#if defined(DEBUGBUILD) && defined(AGGRESIVE_TEST)
-void
-Curl_hash_apply(curl_hash *h, void *user,
- void (*cb)(void *user, void *ptr))
-{
- struct curl_llist_element *le;
- int i;
-
- for(i = 0; i < h->slots; ++i) {
- for(le = (h->table[i])->head;
- le;
- le = le->next) {
- curl_hash_element *el = le->ptr;
- cb(user, el->ptr);
- }
- }
-}
-#endif
-
-void
-Curl_hash_clean(struct curl_hash *h)
-{
- int i;
-
- for(i = 0; i < h->slots; ++i) {
- Curl_llist_destroy(h->table[i], (void *) h);
- h->table[i] = NULL;
- }
-
- Curl_safefree(h->table);
- h->size = 0;
- h->slots = 0;
-}
-
-void
-Curl_hash_clean_with_criterium(struct curl_hash *h, void *user,
- int (*comp)(void *, void *))
-{
- struct curl_llist_element *le;
- struct curl_llist_element *lnext;
- struct curl_llist *list;
- int i;
-
- if(!h)
- return;
-
- for(i = 0; i < h->slots; ++i) {
- list = h->table[i];
- le = list->head; /* get first list entry */
- while(le) {
- struct curl_hash_element *he = le->ptr;
- lnext = le->next;
- /* ask the callback function if we shall remove this entry or not */
- if(comp(user, he->ptr)) {
- Curl_llist_remove(list, le, (void *) h);
- --h->size; /* one less entry in the hash now */
- }
- le = lnext;
- }
- }
-}
-
-void
-Curl_hash_destroy(struct curl_hash *h)
-{
- if(!h)
- return;
-
- Curl_hash_clean(h);
-
- free(h);
-}
-
-size_t Curl_hash_str(void* key, size_t key_length, size_t slots_num)
-{
- const char* key_str = (const char *) key;
- const char *end = key_str + key_length;
- unsigned long h = 5381;
-
- while(key_str < end) {
- h += h << 5;
- h ^= (unsigned long) *key_str++;
- }
-
- return (h % slots_num);
-}
-
-size_t Curl_str_key_compare(void*k1, size_t key1_len, void*k2, size_t key2_len)
-{
- char *key1 = (char *)k1;
- char *key2 = (char *)k2;
-
- if(key1_len == key2_len &&
- *key1 == *key2 &&
- memcmp(key1, key2, key1_len) == 0) {
- return 1;
- }
-
- return 0;
-}
-
-void Curl_hash_start_iterate(struct curl_hash *hash,
- struct curl_hash_iterator *iter)
-{
- iter->hash = hash;
- iter->slot_index = 0;
- iter->current_element = NULL;
-}
-
-struct curl_hash_element *
-Curl_hash_next_element(struct curl_hash_iterator *iter)
-{
- int i;
- struct curl_hash *h = iter->hash;
-
- /* Get the next element in the current list, if any */
- if(iter->current_element)
- iter->current_element = iter->current_element->next;
-
- /* If we have reached the end of the list, find the next one */
- if(!iter->current_element) {
- for(i = iter->slot_index;i < h->slots;i++) {
- if(h->table[i]->head) {
- iter->current_element = h->table[i]->head;
- iter->slot_index = i+1;
- break;
- }
- }
- }
-
- if(iter->current_element) {
- struct curl_hash_element *he = iter->current_element->ptr;
- return he;
- }
- else {
- iter->current_element = NULL;
- return NULL;
- }
-}
-
-#if 0 /* useful function for debugging hashes and their contents */
-void Curl_hash_print(struct curl_hash *h,
- void (*func)(void *))
-{
- struct curl_hash_iterator iter;
- struct curl_hash_element *he;
- int last_index = -1;
-
- if(!h)
- return;
-
- fprintf(stderr, "=Hash dump=\n");
-
- Curl_hash_start_iterate(h, &iter);
-
- he = Curl_hash_next_element(&iter);
- while(he) {
- if(iter.slot_index != last_index) {
- fprintf(stderr, "index %d:", iter.slot_index);
- if(last_index >= 0) {
- fprintf(stderr, "\n");
- }
- last_index = iter.slot_index;
- }
-
- if(func)
- func(he->ptr);
- else
- fprintf(stderr, " [%p]", (void *)he->ptr);
-
- he = Curl_hash_next_element(&iter);
- }
- fprintf(stderr, "\n");
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/hash.h b/external/libcurl_android/jni/libcurl/lib/hash.h
deleted file mode 100755
index aa935d4e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hash.h
+++ /dev/null
@@ -1,106 +0,0 @@
-#ifndef HEADER_CURL_HASH_H
-#define HEADER_CURL_HASH_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <stddef.h>
-
-#include "llist.h"
-
-/* Hash function prototype */
-typedef size_t (*hash_function) (void* key,
- size_t key_length,
- size_t slots_num);
-
-/*
- Comparator function prototype. Compares two keys.
-*/
-typedef size_t (*comp_function) (void* key1,
- size_t key1_len,
- void*key2,
- size_t key2_len);
-
-typedef void (*curl_hash_dtor)(void *);
-
-struct curl_hash {
- struct curl_llist **table;
-
- /* Hash function to be used for this hash table */
- hash_function hash_func;
-
- /* Comparator function to compare keys */
- comp_function comp_func;
- curl_hash_dtor dtor;
- int slots;
- size_t size;
-};
-
-struct curl_hash_element {
- void *ptr;
- char *key;
- size_t key_len;
-};
-
-struct curl_hash_iterator {
- struct curl_hash *hash;
- int slot_index;
- struct curl_llist_element *current_element;
-};
-
-int Curl_hash_init(struct curl_hash *h,
- int slots,
- hash_function hfunc,
- comp_function comparator,
- curl_hash_dtor dtor);
-
-struct curl_hash *Curl_hash_alloc(int slots,
- hash_function hfunc,
- comp_function comparator,
- curl_hash_dtor dtor);
-
-void *Curl_hash_add(struct curl_hash *h, void *key, size_t key_len, void *p);
-int Curl_hash_delete(struct curl_hash *h, void *key, size_t key_len);
-void *Curl_hash_pick(struct curl_hash *, void * key, size_t key_len);
-void Curl_hash_apply(struct curl_hash *h, void *user,
- void (*cb)(void *user, void *ptr));
-int Curl_hash_count(struct curl_hash *h);
-void Curl_hash_clean(struct curl_hash *h);
-void Curl_hash_clean_with_criterium(struct curl_hash *h, void *user,
- int (*comp)(void *, void *));
-void Curl_hash_destroy(struct curl_hash *h);
-
-size_t Curl_hash_str(void* key, size_t key_length, size_t slots_num);
-size_t Curl_str_key_compare(void*k1, size_t key1_len, void*k2,
- size_t key2_len);
-
-void Curl_hash_start_iterate(struct curl_hash *hash,
- struct curl_hash_iterator *iter);
-struct curl_hash_element *
-Curl_hash_next_element(struct curl_hash_iterator *iter);
-
-void Curl_hash_print(struct curl_hash *h,
- void (*func)(void *));
-
-
-#endif /* HEADER_CURL_HASH_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/hmac.c b/external/libcurl_android/jni/libcurl/lib/hmac.c
deleted file mode 100755
index dace8203..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hmac.c
+++ /dev/null
@@ -1,133 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * RFC2104 Keyed-Hashing for Message Authentication
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-
-#include "curl_hmac.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * Generic HMAC algorithm.
- *
- * This module computes HMAC digests based on any hash function. Parameters
- * and computing procedures are set-up dynamically at HMAC computation
- * context initialisation.
- */
-
-static const unsigned char hmac_ipad = 0x36;
-static const unsigned char hmac_opad = 0x5C;
-
-
-
-HMAC_context *
-Curl_HMAC_init(const HMAC_params * hashparams,
- const unsigned char * key,
- unsigned int keylen)
-{
- size_t i;
- HMAC_context * ctxt;
- unsigned char * hkey;
- unsigned char b;
-
- /* Create HMAC context. */
- i = sizeof *ctxt + 2 * hashparams->hmac_ctxtsize +
- hashparams->hmac_resultlen;
- ctxt = malloc(i);
-
- if(!ctxt)
- return ctxt;
-
- ctxt->hmac_hash = hashparams;
- ctxt->hmac_hashctxt1 = (void *) (ctxt + 1);
- ctxt->hmac_hashctxt2 = (void *) ((char *) ctxt->hmac_hashctxt1 +
- hashparams->hmac_ctxtsize);
-
- /* If the key is too long, replace it by its hash digest. */
- if(keylen > hashparams->hmac_maxkeylen) {
- (*hashparams->hmac_hinit)(ctxt->hmac_hashctxt1);
- (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt1, key, keylen);
- hkey = (unsigned char *) ctxt->hmac_hashctxt2 + hashparams->hmac_ctxtsize;
- (*hashparams->hmac_hfinal)(hkey, ctxt->hmac_hashctxt1);
- key = hkey;
- keylen = hashparams->hmac_resultlen;
- }
-
- /* Prime the two hash contexts with the modified key. */
- (*hashparams->hmac_hinit)(ctxt->hmac_hashctxt1);
- (*hashparams->hmac_hinit)(ctxt->hmac_hashctxt2);
-
- for(i = 0; i < keylen; i++) {
- b = (unsigned char)(*key ^ hmac_ipad);
- (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt1, &b, 1);
- b = (unsigned char)(*key++ ^ hmac_opad);
- (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt2, &b, 1);
- }
-
- for(; i < hashparams->hmac_maxkeylen; i++) {
- (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt1, &hmac_ipad, 1);
- (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt2, &hmac_opad, 1);
- }
-
- /* Done, return pointer to HMAC context. */
- return ctxt;
-}
-
-int Curl_HMAC_update(HMAC_context * ctxt,
- const unsigned char * data,
- unsigned int len)
-{
- /* Update first hash calculation. */
- (*ctxt->hmac_hash->hmac_hupdate)(ctxt->hmac_hashctxt1, data, len);
- return 0;
-}
-
-
-int Curl_HMAC_final(HMAC_context * ctxt, unsigned char * result)
-{
- const HMAC_params * hashparams = ctxt->hmac_hash;
-
- /* Do not get result if called with a null parameter: only release
- storage. */
-
- if(!result)
- result = (unsigned char *) ctxt->hmac_hashctxt2 +
- ctxt->hmac_hash->hmac_ctxtsize;
-
- (*hashparams->hmac_hfinal)(result, ctxt->hmac_hashctxt1);
- (*hashparams->hmac_hupdate)(ctxt->hmac_hashctxt2,
- result, hashparams->hmac_resultlen);
- (*hashparams->hmac_hfinal)(result, ctxt->hmac_hashctxt2);
- free((char *) ctxt);
- return 0;
-}
-
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
diff --git a/external/libcurl_android/jni/libcurl/lib/hostasyn.c b/external/libcurl_android/jni/libcurl/lib/hostasyn.c
deleted file mode 100755
index 8151b671..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hostasyn.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "hostip.h"
-#include "hash.h"
-#include "share.h"
-#include "strerror.h"
-#include "url.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/***********************************************************************
- * Only for builds using asynchronous name resolves
- **********************************************************************/
-#ifdef CURLRES_ASYNCH
-
-/*
- * Curl_addrinfo_callback() gets called by ares, gethostbyname_thread()
- * or getaddrinfo_thread() when we got the name resolved (or not!).
- *
- * If the status argument is CURL_ASYNC_SUCCESS, this function takes
- * ownership of the Curl_addrinfo passed, storing the resolved data
- * in the DNS cache.
- *
- * The storage operation locks and unlocks the DNS cache.
- */
-CURLcode Curl_addrinfo_callback(struct connectdata *conn,
- int status,
- struct Curl_addrinfo *ai)
-{
- struct Curl_dns_entry *dns = NULL;
- CURLcode rc = CURLE_OK;
-
- conn->async.status = status;
-
- if(CURL_ASYNC_SUCCESS == status) {
- if(ai) {
- struct SessionHandle *data = conn->data;
-
- if(data->share)
- Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
-
- dns = Curl_cache_addr(data, ai,
- conn->async.hostname,
- conn->async.port);
- if(!dns) {
- /* failed to store, cleanup and return error */
- Curl_freeaddrinfo(ai);
- rc = CURLE_OUT_OF_MEMORY;
- }
-
- if(data->share)
- Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
- }
- else {
- rc = CURLE_OUT_OF_MEMORY;
- }
- }
-
- conn->async.dns = dns;
-
- /* Set async.done TRUE last in this function since it may be used multi-
- threaded and once this is TRUE the other thread may read fields from the
- async struct */
- conn->async.done = TRUE;
-
- /* ipv4: The input hostent struct will be freed by ares when we return from
- this function */
- return rc;
-}
-
-/* Call this function after Curl_connect() has returned async=TRUE and
- then a successful name resolve has been received.
-
- Note: this function disconnects and frees the conn data in case of
- resolve failure */
-CURLcode Curl_async_resolved(struct connectdata *conn,
- bool *protocol_done)
-{
- CURLcode code;
-
- if(conn->async.dns) {
- conn->dns_entry = conn->async.dns;
- conn->async.dns = NULL;
- }
-
- code = Curl_setup_conn(conn, protocol_done);
-
- if(code)
- /* We're not allowed to return failure with memory left allocated
- in the connectdata struct, free those here */
- Curl_disconnect(conn, FALSE); /* close the connection */
-
- return code;
-}
-
-/*
- * Curl_getaddrinfo() is the generic low-level name resolve API within this
- * source file. There are several versions of this function - for different
- * name resolve layers (selected at build-time). They all take this same set
- * of arguments
- */
-Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
- const char *hostname,
- int port,
- int *waitp)
-{
- return Curl_resolver_getaddrinfo(conn, hostname, port, waitp);
-}
-
-#endif /* CURLRES_ASYNCH */
diff --git a/external/libcurl_android/jni/libcurl/lib/hostcheck.c b/external/libcurl_android/jni/libcurl/lib/hostcheck.c
deleted file mode 100755
index 42eb2ee7..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hostcheck.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_SSLEAY) || defined(USE_AXTLS) || defined(USE_QSOSSL) || \
- defined(USE_GSKIT)
-/* these backends use functions from this file */
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#include "hostcheck.h"
-#include "rawstr.h"
-#include "inet_pton.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * Match a hostname against a wildcard pattern.
- * E.g.
- * "foo.host.com" matches "*.host.com".
- *
- * We use the matching rule described in RFC6125, section 6.4.3.
- * http://tools.ietf.org/html/rfc6125#section-6.4.3
- *
- * In addition: ignore trailing dots in the host names and wildcards, so that
- * the names are used normalized. This is what the browsers do.
- *
- * Do not allow wildcard matching on IP numbers. There are apparently
- * certificates being used with an IP address in the CN field, thus making no
- * apparent distinction between a name and an IP. We need to detect the use of
- * an IP address and not wildcard match on such names.
- *
- * NOTE: hostmatch() gets called with copied buffers so that it can modify the
- * contents at will.
- */
-
-static int hostmatch(char *hostname, char *pattern)
-{
- const char *pattern_label_end, *pattern_wildcard, *hostname_label_end;
- int wildcard_enabled;
- size_t prefixlen, suffixlen;
- struct in_addr ignored;
-#ifdef ENABLE_IPV6
- struct sockaddr_in6 si6;
-#endif
-
- /* normalize pattern and hostname by stripping off trailing dots */
- size_t len = strlen(hostname);
- if(hostname[len-1]=='.')
- hostname[len-1]=0;
- len = strlen(pattern);
- if(pattern[len-1]=='.')
- pattern[len-1]=0;
-
- pattern_wildcard = strchr(pattern, '*');
- if(pattern_wildcard == NULL)
- return Curl_raw_equal(pattern, hostname) ?
- CURL_HOST_MATCH : CURL_HOST_NOMATCH;
-
- /* detect IP address as hostname and fail the match if so */
- if(Curl_inet_pton(AF_INET, hostname, &ignored) > 0)
- return CURL_HOST_NOMATCH;
-#ifdef ENABLE_IPV6
- else if(Curl_inet_pton(AF_INET6, hostname, &si6.sin6_addr) > 0)
- return CURL_HOST_NOMATCH;
-#endif
-
- /* We require at least 2 dots in pattern to avoid too wide wildcard
- match. */
- wildcard_enabled = 1;
- pattern_label_end = strchr(pattern, '.');
- if(pattern_label_end == NULL || strchr(pattern_label_end+1, '.') == NULL ||
- pattern_wildcard > pattern_label_end ||
- Curl_raw_nequal(pattern, "xn--", 4)) {
- wildcard_enabled = 0;
- }
- if(!wildcard_enabled)
- return Curl_raw_equal(pattern, hostname) ?
- CURL_HOST_MATCH : CURL_HOST_NOMATCH;
-
- hostname_label_end = strchr(hostname, '.');
- if(hostname_label_end == NULL ||
- !Curl_raw_equal(pattern_label_end, hostname_label_end))
- return CURL_HOST_NOMATCH;
-
- /* The wildcard must match at least one character, so the left-most
- label of the hostname is at least as large as the left-most label
- of the pattern. */
- if(hostname_label_end - hostname < pattern_label_end - pattern)
- return CURL_HOST_NOMATCH;
-
- prefixlen = pattern_wildcard - pattern;
- suffixlen = pattern_label_end - (pattern_wildcard+1);
- return Curl_raw_nequal(pattern, hostname, prefixlen) &&
- Curl_raw_nequal(pattern_wildcard+1, hostname_label_end - suffixlen,
- suffixlen) ?
- CURL_HOST_MATCH : CURL_HOST_NOMATCH;
-}
-
-int Curl_cert_hostcheck(const char *match_pattern, const char *hostname)
-{
- char *matchp;
- char *hostp;
- int res = 0;
- if(!match_pattern || !*match_pattern ||
- !hostname || !*hostname) /* sanity check */
- ;
- else {
- matchp = strdup(match_pattern);
- if(matchp) {
- hostp = strdup(hostname);
- if(hostp) {
- if(hostmatch(hostp, matchp) == CURL_HOST_MATCH)
- res= 1;
- free(hostp);
- }
- free(matchp);
- }
- }
-
- return res;
-}
-
-#endif /* SSLEAY or AXTLS or QSOSSL or GSKIT */
diff --git a/external/libcurl_android/jni/libcurl/lib/hostcheck.h b/external/libcurl_android/jni/libcurl/lib/hostcheck.h
deleted file mode 100755
index f4a517a8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hostcheck.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef HEADER_CURL_HOSTCHECK_H
-#define HEADER_CURL_HOSTCHECK_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <curl/curl.h>
-
-#define CURL_HOST_NOMATCH 0
-#define CURL_HOST_MATCH 1
-int Curl_cert_hostcheck(const char *match_pattern, const char *hostname);
-
-#endif /* HEADER_CURL_HOSTCHECK_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/hostip.c b/external/libcurl_android/jni/libcurl/lib/hostip.c
deleted file mode 100755
index 73b3f820..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hostip.c
+++ /dev/null
@@ -1,857 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#ifdef HAVE_SETJMP_H
-#include <setjmp.h>
-#endif
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "hostip.h"
-#include "hash.h"
-#include "share.h"
-#include "strerror.h"
-#include "url.h"
-#include "inet_ntop.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#if defined(CURLRES_SYNCH) && \
- defined(HAVE_ALARM) && defined(SIGALRM) && defined(HAVE_SIGSETJMP)
-/* alarm-based timeouts can only be used with all the dependencies satisfied */
-#define USE_ALARM_TIMEOUT
-#endif
-
-/*
- * hostip.c explained
- * ==================
- *
- * The main COMPILE-TIME DEFINES to keep in mind when reading the host*.c
- * source file are these:
- *
- * CURLRES_IPV6 - this host has getaddrinfo() and family, and thus we use
- * that. The host may not be able to resolve IPv6, but we don't really have to
- * take that into account. Hosts that aren't IPv6-enabled have CURLRES_IPV4
- * defined.
- *
- * CURLRES_ARES - is defined if libcurl is built to use c-ares for
- * asynchronous name resolves. This can be Windows or *nix.
- *
- * CURLRES_THREADED - is defined if libcurl is built to run under (native)
- * Windows, and then the name resolve will be done in a new thread, and the
- * supported API will be the same as for ares-builds.
- *
- * If any of the two previous are defined, CURLRES_ASYNCH is defined too. If
- * libcurl is not built to use an asynchronous resolver, CURLRES_SYNCH is
- * defined.
- *
- * The host*.c sources files are split up like this:
- *
- * hostip.c - method-independent resolver functions and utility functions
- * hostasyn.c - functions for asynchronous name resolves
- * hostsyn.c - functions for synchronous name resolves
- * hostip4.c - ipv4-specific functions
- * hostip6.c - ipv6-specific functions
- *
- * The two asynchronous name resolver backends are implemented in:
- * asyn-ares.c - functions for ares-using name resolves
- * asyn-thread.c - functions for threaded name resolves
-
- * The hostip.h is the united header file for all this. It defines the
- * CURLRES_* defines based on the config*.h and curl_setup.h defines.
- */
-
-/* These two symbols are for the global DNS cache */
-static struct curl_hash hostname_cache;
-static int host_cache_initialized;
-
-static void freednsentry(void *freethis);
-
-/*
- * Curl_global_host_cache_init() initializes and sets up a global DNS cache.
- * Global DNS cache is general badness. Do not use. This will be removed in
- * a future version. Use the share interface instead!
- *
- * Returns a struct curl_hash pointer on success, NULL on failure.
- */
-struct curl_hash *Curl_global_host_cache_init(void)
-{
- int rc = 0;
- if(!host_cache_initialized) {
- rc = Curl_hash_init(&hostname_cache, 7, Curl_hash_str,
- Curl_str_key_compare, freednsentry);
- if(!rc)
- host_cache_initialized = 1;
- }
- return rc?NULL:&hostname_cache;
-}
-
-/*
- * Destroy and cleanup the global DNS cache
- */
-void Curl_global_host_cache_dtor(void)
-{
- if(host_cache_initialized) {
- /* first make sure that any custom "CURLOPT_RESOLVE" names are
- cleared off */
- Curl_hostcache_clean(NULL, &hostname_cache);
- /* then free the remaining hash completely */
- Curl_hash_clean(&hostname_cache);
- host_cache_initialized = 0;
- }
-}
-
-/*
- * Return # of adresses in a Curl_addrinfo struct
- */
-int Curl_num_addresses(const Curl_addrinfo *addr)
-{
- int i = 0;
- while(addr) {
- addr = addr->ai_next;
- i++;
- }
- return i;
-}
-
-/*
- * Curl_printable_address() returns a printable version of the 1st address
- * given in the 'ai' argument. The result will be stored in the buf that is
- * bufsize bytes big.
- *
- * If the conversion fails, it returns NULL.
- */
-const char *
-Curl_printable_address(const Curl_addrinfo *ai, char *buf, size_t bufsize)
-{
- const struct sockaddr_in *sa4;
- const struct in_addr *ipaddr4;
-#ifdef ENABLE_IPV6
- const struct sockaddr_in6 *sa6;
- const struct in6_addr *ipaddr6;
-#endif
-
- switch (ai->ai_family) {
- case AF_INET:
- sa4 = (const void *)ai->ai_addr;
- ipaddr4 = &sa4->sin_addr;
- return Curl_inet_ntop(ai->ai_family, (const void *)ipaddr4, buf,
- bufsize);
-#ifdef ENABLE_IPV6
- case AF_INET6:
- sa6 = (const void *)ai->ai_addr;
- ipaddr6 = &sa6->sin6_addr;
- return Curl_inet_ntop(ai->ai_family, (const void *)ipaddr6, buf,
- bufsize);
-#endif
- default:
- break;
- }
- return NULL;
-}
-
-/*
- * Return a hostcache id string for the provided host + port, to be used by
- * the DNS caching.
- */
-static char *
-create_hostcache_id(const char *name, int port)
-{
- /* create and return the new allocated entry */
- char *id = aprintf("%s:%d", name, port);
- char *ptr = id;
- if(ptr) {
- /* lower case the name part */
- while(*ptr && (*ptr != ':')) {
- *ptr = (char)TOLOWER(*ptr);
- ptr++;
- }
- }
- return id;
-}
-
-struct hostcache_prune_data {
- long cache_timeout;
- time_t now;
-};
-
-/*
- * This function is set as a callback to be called for every entry in the DNS
- * cache when we want to prune old unused entries.
- *
- * Returning non-zero means remove the entry, return 0 to keep it in the
- * cache.
- */
-static int
-hostcache_timestamp_remove(void *datap, void *hc)
-{
- struct hostcache_prune_data *data =
- (struct hostcache_prune_data *) datap;
- struct Curl_dns_entry *c = (struct Curl_dns_entry *) hc;
-
- return !c->inuse && (data->now - c->timestamp >= data->cache_timeout);
-}
-
-/*
- * Prune the DNS cache. This assumes that a lock has already been taken.
- */
-static void
-hostcache_prune(struct curl_hash *hostcache, long cache_timeout, time_t now)
-{
- struct hostcache_prune_data user;
-
- user.cache_timeout = cache_timeout;
- user.now = now;
-
- Curl_hash_clean_with_criterium(hostcache,
- (void *) &user,
- hostcache_timestamp_remove);
-}
-
-/*
- * Library-wide function for pruning the DNS cache. This function takes and
- * returns the appropriate locks.
- */
-void Curl_hostcache_prune(struct SessionHandle *data)
-{
- time_t now;
-
- if((data->set.dns_cache_timeout == -1) || !data->dns.hostcache)
- /* cache forever means never prune, and NULL hostcache means
- we can't do it */
- return;
-
- if(data->share)
- Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
-
- time(&now);
-
- /* Remove outdated and unused entries from the hostcache */
- hostcache_prune(data->dns.hostcache,
- data->set.dns_cache_timeout,
- now);
-
- if(data->share)
- Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
-}
-
-/*
- * Check if the entry should be pruned. Assumes a locked cache.
- */
-static int
-remove_entry_if_stale(struct SessionHandle *data, struct Curl_dns_entry *dns)
-{
- struct hostcache_prune_data user;
-
- if(!dns || (data->set.dns_cache_timeout == -1) || !data->dns.hostcache ||
- dns->inuse)
- /* cache forever means never prune, and NULL hostcache means we can't do
- it, if it still is in use then we leave it */
- return 0;
-
- time(&user.now);
- user.cache_timeout = data->set.dns_cache_timeout;
-
- if(!hostcache_timestamp_remove(&user,dns) )
- return 0;
-
- Curl_hash_clean_with_criterium(data->dns.hostcache,
- (void *) &user,
- hostcache_timestamp_remove);
-
- return 1;
-}
-
-
-#ifdef HAVE_SIGSETJMP
-/* Beware this is a global and unique instance. This is used to store the
- return address that we can jump back to from inside a signal handler. This
- is not thread-safe stuff. */
-sigjmp_buf curl_jmpenv;
-#endif
-
-/*
- * Curl_fetch_addr() fetches a 'Curl_dns_entry' already in the DNS cache.
- *
- * Curl_resolv() checks initially and multi_runsingle() checks each time
- * it discovers the handle in the state WAITRESOLVE whether the hostname
- * has already been resolved and the address has already been stored in
- * the DNS cache. This short circuits waiting for a lot of pending
- * lookups for the same hostname requested by different handles.
- *
- * Returns the Curl_dns_entry entry pointer or NULL if not in the cache.
- */
-struct Curl_dns_entry *
-Curl_fetch_addr(struct connectdata *conn,
- const char *hostname,
- int port, int *stale)
-{
- char *entry_id = NULL;
- struct Curl_dns_entry *dns = NULL;
- size_t entry_len;
- struct SessionHandle *data = conn->data;
-
- /* Create an entry id, based upon the hostname and port */
- entry_id = create_hostcache_id(hostname, port);
- /* If we can't create the entry id, fail */
- if(!entry_id)
- return dns;
-
- entry_len = strlen(entry_id);
-
- /* See if its already in our dns cache */
- dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len+1);
-
- /* free the allocated entry_id again */
- free(entry_id);
-
- /* See whether the returned entry is stale. Done before we release lock */
- *stale = remove_entry_if_stale(data, dns);
- if(*stale)
- dns = NULL; /* the memory deallocation is being handled by the hash */
-
- return dns;
-}
-
-/*
- * Curl_cache_addr() stores a 'Curl_addrinfo' struct in the DNS cache.
- *
- * When calling Curl_resolv() has resulted in a response with a returned
- * address, we call this function to store the information in the dns
- * cache etc
- *
- * Returns the Curl_dns_entry entry pointer or NULL if the storage failed.
- */
-struct Curl_dns_entry *
-Curl_cache_addr(struct SessionHandle *data,
- Curl_addrinfo *addr,
- const char *hostname,
- int port)
-{
- char *entry_id;
- size_t entry_len;
- struct Curl_dns_entry *dns;
- struct Curl_dns_entry *dns2;
-
- /* Create an entry id, based upon the hostname and port */
- entry_id = create_hostcache_id(hostname, port);
- /* If we can't create the entry id, fail */
- if(!entry_id)
- return NULL;
- entry_len = strlen(entry_id);
-
- /* Create a new cache entry */
- dns = calloc(1, sizeof(struct Curl_dns_entry));
- if(!dns) {
- free(entry_id);
- return NULL;
- }
-
- dns->inuse = 0; /* init to not used */
- dns->addr = addr; /* this is the address(es) */
- time(&dns->timestamp);
- if(dns->timestamp == 0)
- dns->timestamp = 1; /* zero indicates that entry isn't in hash table */
-
- /* Store the resolved data in our DNS cache. */
- dns2 = Curl_hash_add(data->dns.hostcache, entry_id, entry_len+1,
- (void *)dns);
- if(!dns2) {
- free(dns);
- free(entry_id);
- return NULL;
- }
-
- dns = dns2;
- dns->inuse++; /* mark entry as in-use */
-
- /* free the allocated entry_id */
- free(entry_id);
-
- return dns;
-}
-
-/*
- * Curl_resolv() is the main name resolve function within libcurl. It resolves
- * a name and returns a pointer to the entry in the 'entry' argument (if one
- * is provided). This function might return immediately if we're using asynch
- * resolves. See the return codes.
- *
- * The cache entry we return will get its 'inuse' counter increased when this
- * function is used. You MUST call Curl_resolv_unlock() later (when you're
- * done using this struct) to decrease the counter again.
- *
- * In debug mode, we specifically test for an interface name "LocalHost"
- * and resolve "localhost" instead as a means to permit test cases
- * to connect to a local test server with any host name.
- *
- * Return codes:
- *
- * CURLRESOLV_ERROR (-1) = error, no pointer
- * CURLRESOLV_RESOLVED (0) = OK, pointer provided
- * CURLRESOLV_PENDING (1) = waiting for response, no pointer
- */
-
-int Curl_resolv(struct connectdata *conn,
- const char *hostname,
- int port,
- struct Curl_dns_entry **entry)
-{
- struct Curl_dns_entry *dns = NULL;
- struct SessionHandle *data = conn->data;
- CURLcode result;
- int stale, rc = CURLRESOLV_ERROR; /* default to failure */
-
- *entry = NULL;
-
- if(data->share)
- Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
-
- dns = Curl_fetch_addr(conn, hostname, port, &stale);
-
- infof(data, "Hostname was %sfound in DNS cache\n", dns||stale?"":"NOT ");
- if(stale)
- infof(data, "Hostname in DNS cache was stale, zapped\n");
-
-
- if(dns) {
- dns->inuse++; /* we use it! */
- rc = CURLRESOLV_RESOLVED;
- }
-
- if(data->share)
- Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
-
- if(!dns) {
- /* The entry was not in the cache. Resolve it to IP address */
-
- Curl_addrinfo *addr;
- int respwait;
-
- /* Check what IP specifics the app has requested and if we can provide it.
- * If not, bail out. */
- if(!Curl_ipvalid(conn))
- return CURLRESOLV_ERROR;
-
- /* If Curl_getaddrinfo() returns NULL, 'respwait' might be set to a
- non-zero value indicating that we need to wait for the response to the
- resolve call */
- addr = Curl_getaddrinfo(conn,
-#ifdef DEBUGBUILD
- (data->set.str[STRING_DEVICE]
- && !strcmp(data->set.str[STRING_DEVICE],
- "LocalHost"))?"localhost":
-#endif
- hostname, port, &respwait);
-
- if(!addr) {
- if(respwait) {
- /* the response to our resolve call will come asynchronously at
- a later time, good or bad */
- /* First, check that we haven't received the info by now */
- result = Curl_resolver_is_resolved(conn, &dns);
- if(result) /* error detected */
- return CURLRESOLV_ERROR;
- if(dns)
- rc = CURLRESOLV_RESOLVED; /* pointer provided */
- else
- rc = CURLRESOLV_PENDING; /* no info yet */
- }
- }
- else {
- if(data->share)
- Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
-
- /* we got a response, store it in the cache */
- dns = Curl_cache_addr(data, addr, hostname, port);
-
- if(data->share)
- Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
-
- if(!dns)
- /* returned failure, bail out nicely */
- Curl_freeaddrinfo(addr);
- else
- rc = CURLRESOLV_RESOLVED;
- }
- }
-
- *entry = dns;
-
- return rc;
-}
-
-#ifdef USE_ALARM_TIMEOUT
-/*
- * This signal handler jumps back into the main libcurl code and continues
- * execution. This effectively causes the remainder of the application to run
- * within a signal handler which is nonportable and could lead to problems.
- */
-static
-RETSIGTYPE alarmfunc(int sig)
-{
- /* this is for "-ansi -Wall -pedantic" to stop complaining! (rabe) */
- (void)sig;
- siglongjmp(curl_jmpenv, 1);
- return;
-}
-#endif /* USE_ALARM_TIMEOUT */
-
-/*
- * Curl_resolv_timeout() is the same as Curl_resolv() but specifies a
- * timeout. This function might return immediately if we're using asynch
- * resolves. See the return codes.
- *
- * The cache entry we return will get its 'inuse' counter increased when this
- * function is used. You MUST call Curl_resolv_unlock() later (when you're
- * done using this struct) to decrease the counter again.
- *
- * If built with a synchronous resolver and use of signals is not
- * disabled by the application, then a nonzero timeout will cause a
- * timeout after the specified number of milliseconds. Otherwise, timeout
- * is ignored.
- *
- * Return codes:
- *
- * CURLRESOLV_TIMEDOUT(-2) = warning, time too short or previous alarm expired
- * CURLRESOLV_ERROR (-1) = error, no pointer
- * CURLRESOLV_RESOLVED (0) = OK, pointer provided
- * CURLRESOLV_PENDING (1) = waiting for response, no pointer
- */
-
-int Curl_resolv_timeout(struct connectdata *conn,
- const char *hostname,
- int port,
- struct Curl_dns_entry **entry,
- long timeoutms)
-{
-#ifdef USE_ALARM_TIMEOUT
-#ifdef HAVE_SIGACTION
- struct sigaction keep_sigact; /* store the old struct here */
- volatile bool keep_copysig = FALSE; /* wether old sigact has been saved */
- struct sigaction sigact;
-#else
-#ifdef HAVE_SIGNAL
- void (*keep_sigact)(int); /* store the old handler here */
-#endif /* HAVE_SIGNAL */
-#endif /* HAVE_SIGACTION */
- volatile long timeout;
- volatile unsigned int prev_alarm = 0;
- struct SessionHandle *data = conn->data;
-#endif /* USE_ALARM_TIMEOUT */
- int rc;
-
- *entry = NULL;
-
- if(timeoutms < 0)
- /* got an already expired timeout */
- return CURLRESOLV_TIMEDOUT;
-
-#ifdef USE_ALARM_TIMEOUT
- if(data->set.no_signal)
- /* Ignore the timeout when signals are disabled */
- timeout = 0;
- else
- timeout = timeoutms;
-
- if(!timeout)
- /* USE_ALARM_TIMEOUT defined, but no timeout actually requested */
- return Curl_resolv(conn, hostname, port, entry);
-
- if(timeout < 1000)
- /* The alarm() function only provides integer second resolution, so if
- we want to wait less than one second we must bail out already now. */
- return CURLRESOLV_TIMEDOUT;
-
- /*************************************************************
- * Set signal handler to catch SIGALRM
- * Store the old value to be able to set it back later!
- *************************************************************/
-#ifdef HAVE_SIGACTION
- sigaction(SIGALRM, NULL, &sigact);
- keep_sigact = sigact;
- keep_copysig = TRUE; /* yes, we have a copy */
- sigact.sa_handler = alarmfunc;
-#ifdef SA_RESTART
- /* HPUX doesn't have SA_RESTART but defaults to that behaviour! */
- sigact.sa_flags &= ~SA_RESTART;
-#endif
- /* now set the new struct */
- sigaction(SIGALRM, &sigact, NULL);
-#else /* HAVE_SIGACTION */
- /* no sigaction(), revert to the much lamer signal() */
-#ifdef HAVE_SIGNAL
- keep_sigact = signal(SIGALRM, alarmfunc);
-#endif
-#endif /* HAVE_SIGACTION */
-
- /* alarm() makes a signal get sent when the timeout fires off, and that
- will abort system calls */
- prev_alarm = alarm(curlx_sltoui(timeout/1000L));
-
- /* This allows us to time-out from the name resolver, as the timeout
- will generate a signal and we will siglongjmp() from that here.
- This technique has problems (see alarmfunc).
- This should be the last thing we do before calling Curl_resolv(),
- as otherwise we'd have to worry about variables that get modified
- before we invoke Curl_resolv() (and thus use "volatile"). */
- if(sigsetjmp(curl_jmpenv, 1)) {
- /* this is coming from a siglongjmp() after an alarm signal */
- failf(data, "name lookup timed out");
- rc = CURLRESOLV_ERROR;
- goto clean_up;
- }
-
-#else
-#ifndef CURLRES_ASYNCH
- if(timeoutms)
- infof(conn->data, "timeout on name lookup is not supported\n");
-#else
- (void)timeoutms; /* timeoutms not used with an async resolver */
-#endif
-#endif /* USE_ALARM_TIMEOUT */
-
- /* Perform the actual name resolution. This might be interrupted by an
- * alarm if it takes too long.
- */
- rc = Curl_resolv(conn, hostname, port, entry);
-
-#ifdef USE_ALARM_TIMEOUT
-clean_up:
-
- if(!prev_alarm)
- /* deactivate a possibly active alarm before uninstalling the handler */
- alarm(0);
-
-#ifdef HAVE_SIGACTION
- if(keep_copysig) {
- /* we got a struct as it looked before, now put that one back nice
- and clean */
- sigaction(SIGALRM, &keep_sigact, NULL); /* put it back */
- }
-#else
-#ifdef HAVE_SIGNAL
- /* restore the previous SIGALRM handler */
- signal(SIGALRM, keep_sigact);
-#endif
-#endif /* HAVE_SIGACTION */
-
- /* switch back the alarm() to either zero or to what it was before minus
- the time we spent until now! */
- if(prev_alarm) {
- /* there was an alarm() set before us, now put it back */
- unsigned long elapsed_ms = Curl_tvdiff(Curl_tvnow(), conn->created);
-
- /* the alarm period is counted in even number of seconds */
- unsigned long alarm_set = prev_alarm - elapsed_ms/1000;
-
- if(!alarm_set ||
- ((alarm_set >= 0x80000000) && (prev_alarm < 0x80000000)) ) {
- /* if the alarm time-left reached zero or turned "negative" (counted
- with unsigned values), we should fire off a SIGALRM here, but we
- won't, and zero would be to switch it off so we never set it to
- less than 1! */
- alarm(1);
- rc = CURLRESOLV_TIMEDOUT;
- failf(data, "Previous alarm fired off!");
- }
- else
- alarm((unsigned int)alarm_set);
- }
-#endif /* USE_ALARM_TIMEOUT */
-
- return rc;
-}
-
-/*
- * Curl_resolv_unlock() unlocks the given cached DNS entry. When this has been
- * made, the struct may be destroyed due to pruning. It is important that only
- * one unlock is made for each Curl_resolv() call.
- *
- * May be called with 'data' == NULL for global cache.
- */
-void Curl_resolv_unlock(struct SessionHandle *data, struct Curl_dns_entry *dns)
-{
- DEBUGASSERT(dns && (dns->inuse>0));
-
- if(data && data->share)
- Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
-
- dns->inuse--;
- /* only free if nobody is using AND it is not in hostcache (timestamp ==
- 0) */
- if(dns->inuse == 0 && dns->timestamp == 0) {
- Curl_freeaddrinfo(dns->addr);
- free(dns);
- }
-
- if(data && data->share)
- Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
-}
-
-/*
- * File-internal: free a cache dns entry.
- */
-static void freednsentry(void *freethis)
-{
- struct Curl_dns_entry *p = (struct Curl_dns_entry *) freethis;
-
- /* mark the entry as not in hostcache */
- p->timestamp = 0;
- if(p->inuse == 0) {
- Curl_freeaddrinfo(p->addr);
- free(p);
- }
-}
-
-/*
- * Curl_mk_dnscache() creates a new DNS cache and returns the handle for it.
- */
-struct curl_hash *Curl_mk_dnscache(void)
-{
- return Curl_hash_alloc(7, Curl_hash_str, Curl_str_key_compare, freednsentry);
-}
-
-static int hostcache_inuse(void *data, void *hc)
-{
- struct Curl_dns_entry *c = (struct Curl_dns_entry *) hc;
-
- if(c->inuse == 1)
- Curl_resolv_unlock(data, c);
-
- return 1; /* free all entries */
-}
-
-/*
- * Curl_hostcache_clean()
- *
- * This _can_ be called with 'data' == NULL but then of course no locking
- * can be done!
- */
-
-void Curl_hostcache_clean(struct SessionHandle *data,
- struct curl_hash *hash)
-{
- /* Entries added to the hostcache with the CURLOPT_RESOLVE function are
- * still present in the cache with the inuse counter set to 1. Detect them
- * and cleanup!
- */
- Curl_hash_clean_with_criterium(hash, data, hostcache_inuse);
-}
-
-
-CURLcode Curl_loadhostpairs(struct SessionHandle *data)
-{
- struct curl_slist *hostp;
- char hostname[256];
- char address[256];
- int port;
-
- for(hostp = data->change.resolve; hostp; hostp = hostp->next ) {
- if(!hostp->data)
- continue;
- if(hostp->data[0] == '-') {
- /* TODO: mark an entry for removal */
- }
- else if(3 == sscanf(hostp->data, "%255[^:]:%d:%255s", hostname, &port,
- address)) {
- struct Curl_dns_entry *dns;
- Curl_addrinfo *addr;
- char *entry_id;
- size_t entry_len;
-
- addr = Curl_str2addr(address, port);
- if(!addr) {
- infof(data, "Resolve %s found illegal!\n", hostp->data);
- continue;
- }
-
- /* Create an entry id, based upon the hostname and port */
- entry_id = create_hostcache_id(hostname, port);
- /* If we can't create the entry id, fail */
- if(!entry_id) {
- Curl_freeaddrinfo(addr);
- return CURLE_OUT_OF_MEMORY;
- }
-
- entry_len = strlen(entry_id);
-
- if(data->share)
- Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
-
- /* See if its already in our dns cache */
- dns = Curl_hash_pick(data->dns.hostcache, entry_id, entry_len+1);
-
- /* free the allocated entry_id again */
- free(entry_id);
-
- if(!dns)
- /* if not in the cache already, put this host in the cache */
- dns = Curl_cache_addr(data, addr, hostname, port);
- else
- /* this is a duplicate, free it again */
- Curl_freeaddrinfo(addr);
-
- if(data->share)
- Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
-
- if(!dns) {
- Curl_freeaddrinfo(addr);
- return CURLE_OUT_OF_MEMORY;
- }
- infof(data, "Added %s:%d:%s to DNS cache\n",
- hostname, port, address);
- }
- }
- data->change.resolve = NULL; /* dealt with now */
-
- return CURLE_OK;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/hostip.h b/external/libcurl_android/jni/libcurl/lib/hostip.h
deleted file mode 100755
index 44046519..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hostip.h
+++ /dev/null
@@ -1,250 +0,0 @@
-#ifndef HEADER_CURL_HOSTIP_H
-#define HEADER_CURL_HOSTIP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-#include "hash.h"
-#include "curl_addrinfo.h"
-#include "asyn.h"
-
-#ifdef HAVE_SETJMP_H
-#include <setjmp.h>
-#endif
-
-#ifdef NETWARE
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
-/* Allocate enough memory to hold the full name information structs and
- * everything. OSF1 is known to require at least 8872 bytes. The buffer
- * required for storing all possible aliases and IP numbers is according to
- * Stevens' Unix Network Programming 2nd edition, p. 304: 8192 bytes!
- */
-#define CURL_HOSTENT_SIZE 9000
-
-#define CURL_TIMEOUT_RESOLVE 300 /* when using asynch methods, we allow this
- many seconds for a name resolve */
-
-#define CURL_ASYNC_SUCCESS CURLE_OK
-
-struct addrinfo;
-struct hostent;
-struct SessionHandle;
-struct connectdata;
-
-/*
- * Curl_global_host_cache_init() initializes and sets up a global DNS cache.
- * Global DNS cache is general badness. Do not use. This will be removed in
- * a future version. Use the share interface instead!
- *
- * Returns a struct curl_hash pointer on success, NULL on failure.
- */
-struct curl_hash *Curl_global_host_cache_init(void);
-void Curl_global_host_cache_dtor(void);
-
-struct Curl_dns_entry {
- Curl_addrinfo *addr;
- /* timestamp == 0 -- entry not in hostcache
- timestamp != 0 -- entry is in hostcache */
- time_t timestamp;
- long inuse; /* use-counter, make very sure you decrease this
- when you're done using the address you received */
-};
-
-/*
- * Curl_resolv() returns an entry with the info for the specified host
- * and port.
- *
- * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after
- * use, or we'll leak memory!
- */
-/* return codes */
-#define CURLRESOLV_TIMEDOUT -2
-#define CURLRESOLV_ERROR -1
-#define CURLRESOLV_RESOLVED 0
-#define CURLRESOLV_PENDING 1
-int Curl_resolv(struct connectdata *conn, const char *hostname,
- int port, struct Curl_dns_entry **dnsentry);
-int Curl_resolv_timeout(struct connectdata *conn, const char *hostname,
- int port, struct Curl_dns_entry **dnsentry,
- long timeoutms);
-
-#ifdef CURLRES_IPV6
-/*
- * Curl_ipv6works() returns TRUE if ipv6 seems to work.
- */
-bool Curl_ipv6works(void);
-#else
-#define Curl_ipv6works() FALSE
-#endif
-
-/*
- * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've
- * been set and returns TRUE if they are OK.
- */
-bool Curl_ipvalid(struct connectdata *conn);
-
-
-/*
- * Curl_getaddrinfo() is the generic low-level name resolve API within this
- * source file. There are several versions of this function - for different
- * name resolve layers (selected at build-time). They all take this same set
- * of arguments
- */
-Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
- const char *hostname,
- int port,
- int *waitp);
-
-
-/* unlock a previously resolved dns entry */
-void Curl_resolv_unlock(struct SessionHandle *data,
- struct Curl_dns_entry *dns);
-
-/* for debugging purposes only: */
-void Curl_scan_cache_used(void *user, void *ptr);
-
-/* make a new dns cache and return the handle */
-struct curl_hash *Curl_mk_dnscache(void);
-
-/* prune old entries from the DNS cache */
-void Curl_hostcache_prune(struct SessionHandle *data);
-
-/* Return # of adresses in a Curl_addrinfo struct */
-int Curl_num_addresses (const Curl_addrinfo *addr);
-
-#if defined(CURLDEBUG) && defined(HAVE_GETNAMEINFO)
-int curl_dogetnameinfo(GETNAMEINFO_QUAL_ARG1 GETNAMEINFO_TYPE_ARG1 sa,
- GETNAMEINFO_TYPE_ARG2 salen,
- char *host, GETNAMEINFO_TYPE_ARG46 hostlen,
- char *serv, GETNAMEINFO_TYPE_ARG46 servlen,
- GETNAMEINFO_TYPE_ARG7 flags,
- int line, const char *source);
-#endif
-
-/* IPv4 threadsafe resolve function used for synch and asynch builds */
-Curl_addrinfo *Curl_ipv4_resolve_r(const char * hostname, int port);
-
-CURLcode Curl_async_resolved(struct connectdata *conn,
- bool *protocol_connect);
-
-#ifndef CURLRES_ASYNCH
-#define Curl_async_resolved(x,y) CURLE_OK
-#endif
-
-/*
- * Curl_addrinfo_callback() is used when we build with any asynch specialty.
- * Handles end of async request processing. Inserts ai into hostcache when
- * status is CURL_ASYNC_SUCCESS. Twiddles fields in conn to indicate async
- * request completed whether successful or failed.
- */
-CURLcode Curl_addrinfo_callback(struct connectdata *conn,
- int status,
- Curl_addrinfo *ai);
-
-/*
- * Curl_printable_address() returns a printable version of the 1st address
- * given in the 'ip' argument. The result will be stored in the buf that is
- * bufsize bytes big.
- */
-const char *Curl_printable_address(const Curl_addrinfo *ip,
- char *buf, size_t bufsize);
-
-/*
- * Curl_fetch_addr() fetches a 'Curl_dns_entry' already in the DNS cache.
- *
- * Returns the Curl_dns_entry entry pointer or NULL if not in the cache.
- */
-struct Curl_dns_entry *
-Curl_fetch_addr(struct connectdata *conn,
- const char *hostname,
- int port,
- int *stale);
-
-/*
- * Curl_cache_addr() stores a 'Curl_addrinfo' struct in the DNS cache.
- *
- * Returns the Curl_dns_entry entry pointer or NULL if the storage failed.
- */
-struct Curl_dns_entry *
-Curl_cache_addr(struct SessionHandle *data, Curl_addrinfo *addr,
- const char *hostname, int port);
-
-#ifndef INADDR_NONE
-#define CURL_INADDR_NONE (in_addr_t) ~0
-#else
-#define CURL_INADDR_NONE INADDR_NONE
-#endif
-
-#ifdef HAVE_SIGSETJMP
-/* Forward-declaration of variable defined in hostip.c. Beware this
- * is a global and unique instance. This is used to store the return
- * address that we can jump back to from inside a signal handler.
- * This is not thread-safe stuff.
- */
-extern sigjmp_buf curl_jmpenv;
-#endif
-
-/*
- * Function provided by the resolver backend to set DNS servers to use.
- */
-CURLcode Curl_set_dns_servers(struct SessionHandle *data, char *servers);
-
-/*
- * Function provided by the resolver backend to set
- * outgoing interface to use for DNS requests
- */
-CURLcode Curl_set_dns_interface(struct SessionHandle *data,
- const char *interf);
-
-/*
- * Function provided by the resolver backend to set
- * local IPv4 address to use as source address for DNS requests
- */
-CURLcode Curl_set_dns_local_ip4(struct SessionHandle *data,
- const char *local_ip4);
-
-/*
- * Function provided by the resolver backend to set
- * local IPv6 address to use as source address for DNS requests
- */
-CURLcode Curl_set_dns_local_ip6(struct SessionHandle *data,
- const char *local_ip6);
-
-/*
- * Clean off entries from the cache
- */
-void Curl_hostcache_clean(struct SessionHandle *data, struct curl_hash *hash);
-
-/*
- * Destroy the hostcache of this handle.
- */
-void Curl_hostcache_destroy(struct SessionHandle *data);
-
-/*
- * Populate the cache with specified entries from CURLOPT_RESOLVE.
- */
-CURLcode Curl_loadhostpairs(struct SessionHandle *data);
-
-#endif /* HEADER_CURL_HOSTIP_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/hostip4.c b/external/libcurl_android/jni/libcurl/lib/hostip4.c
deleted file mode 100755
index 1e39f4a9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hostip4.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "hostip.h"
-#include "hash.h"
-#include "share.h"
-#include "strerror.h"
-#include "url.h"
-#include "inet_pton.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/***********************************************************************
- * Only for plain-ipv4 builds
- **********************************************************************/
-#ifdef CURLRES_IPV4 /* plain ipv4 code coming up */
-/*
- * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've
- * been set and returns TRUE if they are OK.
- */
-bool Curl_ipvalid(struct connectdata *conn)
-{
- if(conn->ip_version == CURL_IPRESOLVE_V6)
- /* an ipv6 address was requested and we can't get/use one */
- return FALSE;
-
- return TRUE; /* OK, proceed */
-}
-
-#ifdef CURLRES_SYNCH
-
-/*
- * Curl_getaddrinfo() - the ipv4 synchronous version.
- *
- * The original code to this function was from the Dancer source code, written
- * by Bjorn Reese, it has since been patched and modified considerably.
- *
- * gethostbyname_r() is the thread-safe version of the gethostbyname()
- * function. When we build for plain IPv4, we attempt to use this
- * function. There are _three_ different gethostbyname_r() versions, and we
- * detect which one this platform supports in the configure script and set up
- * the HAVE_GETHOSTBYNAME_R_3, HAVE_GETHOSTBYNAME_R_5 or
- * HAVE_GETHOSTBYNAME_R_6 defines accordingly. Note that HAVE_GETADDRBYNAME
- * has the corresponding rules. This is primarily on *nix. Note that some unix
- * flavours have thread-safe versions of the plain gethostbyname() etc.
- *
- */
-Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
- const char *hostname,
- int port,
- int *waitp)
-{
- Curl_addrinfo *ai = NULL;
-
-#ifdef CURL_DISABLE_VERBOSE_STRINGS
- (void)conn;
-#endif
-
- *waitp = 0; /* synchronous response only */
-
- ai = Curl_ipv4_resolve_r(hostname, port);
- if(!ai)
- infof(conn->data, "Curl_ipv4_resolve_r failed for %s\n", hostname);
-
- return ai;
-}
-#endif /* CURLRES_SYNCH */
-#endif /* CURLRES_IPV4 */
-
-#if defined(CURLRES_IPV4) && !defined(CURLRES_ARES)
-
-/*
- * Curl_ipv4_resolve_r() - ipv4 threadsafe resolver function.
- *
- * This is used for both synchronous and asynchronous resolver builds,
- * implying that only threadsafe code and function calls may be used.
- *
- */
-Curl_addrinfo *Curl_ipv4_resolve_r(const char *hostname,
- int port)
-{
-#if !defined(HAVE_GETADDRINFO_THREADSAFE) && defined(HAVE_GETHOSTBYNAME_R_3)
- int res;
-#endif
- Curl_addrinfo *ai = NULL;
- struct hostent *h = NULL;
- struct in_addr in;
- struct hostent *buf = NULL;
-
- if(Curl_inet_pton(AF_INET, hostname, &in) > 0)
- /* This is a dotted IP address 123.123.123.123-style */
- return Curl_ip2addr(AF_INET, &in, hostname, port);
-
-#if defined(HAVE_GETADDRINFO_THREADSAFE)
- else {
- struct addrinfo hints;
- char sbuf[12];
- char *sbufptr = NULL;
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = PF_INET;
- hints.ai_socktype = SOCK_STREAM;
- if(port) {
- snprintf(sbuf, sizeof(sbuf), "%d", port);
- sbufptr = sbuf;
- }
-
- (void)Curl_getaddrinfo_ex(hostname, sbufptr, &hints, &ai);
-
-#elif defined(HAVE_GETHOSTBYNAME_R)
- /*
- * gethostbyname_r() is the preferred resolve function for many platforms.
- * Since there are three different versions of it, the following code is
- * somewhat #ifdef-ridden.
- */
- else {
- int h_errnop;
-
- buf = calloc(1, CURL_HOSTENT_SIZE);
- if(!buf)
- return NULL; /* major failure */
- /*
- * The clearing of the buffer is a workaround for a gethostbyname_r bug in
- * qnx nto and it is also _required_ for some of these functions on some
- * platforms.
- */
-
-#if defined(HAVE_GETHOSTBYNAME_R_5)
- /* Solaris, IRIX and more */
- h = gethostbyname_r(hostname,
- (struct hostent *)buf,
- (char *)buf + sizeof(struct hostent),
- CURL_HOSTENT_SIZE - sizeof(struct hostent),
- &h_errnop);
-
- /* If the buffer is too small, it returns NULL and sets errno to
- * ERANGE. The errno is thread safe if this is compiled with
- * -D_REENTRANT as then the 'errno' variable is a macro defined to get
- * used properly for threads.
- */
-
- if(h) {
- ;
- }
- else
-#elif defined(HAVE_GETHOSTBYNAME_R_6)
- /* Linux */
-
- (void)gethostbyname_r(hostname,
- (struct hostent *)buf,
- (char *)buf + sizeof(struct hostent),
- CURL_HOSTENT_SIZE - sizeof(struct hostent),
- &h, /* DIFFERENCE */
- &h_errnop);
- /* Redhat 8, using glibc 2.2.93 changed the behavior. Now all of a
- * sudden this function returns EAGAIN if the given buffer size is too
- * small. Previous versions are known to return ERANGE for the same
- * problem.
- *
- * This wouldn't be such a big problem if older versions wouldn't
- * sometimes return EAGAIN on a common failure case. Alas, we can't
- * assume that EAGAIN *or* ERANGE means ERANGE for any given version of
- * glibc.
- *
- * For now, we do that and thus we may call the function repeatedly and
- * fail for older glibc versions that return EAGAIN, until we run out of
- * buffer size (step_size grows beyond CURL_HOSTENT_SIZE).
- *
- * If anyone has a better fix, please tell us!
- *
- * -------------------------------------------------------------------
- *
- * On October 23rd 2003, Dan C dug up more details on the mysteries of
- * gethostbyname_r() in glibc:
- *
- * In glibc 2.2.5 the interface is different (this has also been
- * discovered in glibc 2.1.1-6 as shipped by Redhat 6). What I can't
- * explain, is that tests performed on glibc 2.2.4-34 and 2.2.4-32
- * (shipped/upgraded by Redhat 7.2) don't show this behavior!
- *
- * In this "buggy" version, the return code is -1 on error and 'errno'
- * is set to the ERANGE or EAGAIN code. Note that 'errno' is not a
- * thread-safe variable.
- */
-
- if(!h) /* failure */
-#elif defined(HAVE_GETHOSTBYNAME_R_3)
- /* AIX, Digital Unix/Tru64, HPUX 10, more? */
-
- /* For AIX 4.3 or later, we don't use gethostbyname_r() at all, because of
- * the plain fact that it does not return unique full buffers on each
- * call, but instead several of the pointers in the hostent structs will
- * point to the same actual data! This have the unfortunate down-side that
- * our caching system breaks down horribly. Luckily for us though, AIX 4.3
- * and more recent versions have a "completely thread-safe"[*] libc where
- * all the data is stored in thread-specific memory areas making calls to
- * the plain old gethostbyname() work fine even for multi-threaded
- * programs.
- *
- * This AIX 4.3 or later detection is all made in the configure script.
- *
- * Troels Walsted Hansen helped us work this out on March 3rd, 2003.
- *
- * [*] = much later we've found out that it isn't at all "completely
- * thread-safe", but at least the gethostbyname() function is.
- */
-
- if(CURL_HOSTENT_SIZE >=
- (sizeof(struct hostent)+sizeof(struct hostent_data))) {
-
- /* August 22nd, 2000: Albert Chin-A-Young brought an updated version
- * that should work! September 20: Richard Prescott worked on the buffer
- * size dilemma.
- */
-
- res = gethostbyname_r(hostname,
- (struct hostent *)buf,
- (struct hostent_data *)((char *)buf +
- sizeof(struct hostent)));
- h_errnop = SOCKERRNO; /* we don't deal with this, but set it anyway */
- }
- else
- res = -1; /* failure, too smallish buffer size */
-
- if(!res) { /* success */
-
- h = buf; /* result expected in h */
-
- /* This is the worst kind of the different gethostbyname_r() interfaces.
- * Since we don't know how big buffer this particular lookup required,
- * we can't realloc down the huge alloc without doing closer analysis of
- * the returned data. Thus, we always use CURL_HOSTENT_SIZE for every
- * name lookup. Fixing this would require an extra malloc() and then
- * calling Curl_addrinfo_copy() that subsequent realloc()s down the new
- * memory area to the actually used amount.
- */
- }
- else
-#endif /* HAVE_...BYNAME_R_5 || HAVE_...BYNAME_R_6 || HAVE_...BYNAME_R_3 */
- {
- h = NULL; /* set return code to NULL */
- free(buf);
- }
-#else /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */
- /*
- * Here is code for platforms that don't have a thread safe
- * getaddrinfo() nor gethostbyname_r() function or for which
- * gethostbyname() is the preferred one.
- */
- else {
- h = gethostbyname((void*)hostname);
-#endif /* HAVE_GETADDRINFO_THREADSAFE || HAVE_GETHOSTBYNAME_R */
- }
-
- if(h) {
- ai = Curl_he2ai(h, port);
-
- if(buf) /* used a *_r() function */
- free(buf);
- }
-
- return ai;
-}
-#endif /* defined(CURLRES_IPV4) && !defined(CURLRES_ARES) */
diff --git a/external/libcurl_android/jni/libcurl/lib/hostip6.c b/external/libcurl_android/jni/libcurl/lib/hostip6.c
deleted file mode 100755
index 8327004c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hostip6.c
+++ /dev/null
@@ -1,224 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "hostip.h"
-#include "hash.h"
-#include "share.h"
-#include "strerror.h"
-#include "url.h"
-#include "inet_pton.h"
-#include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/***********************************************************************
- * Only for ipv6-enabled builds
- **********************************************************************/
-#ifdef CURLRES_IPV6
-
-
-#if defined(CURLDEBUG) && defined(HAVE_GETNAMEINFO)
-/* These are strictly for memory tracing and are using the same style as the
- * family otherwise present in memdebug.c. I put these ones here since they
- * require a bunch of structs I didn't want to include in memdebug.c
- */
-
-/*
- * For CURLRES_ARS, this should be written using ares_gethostbyaddr()
- * (ignoring the fact c-ares doesn't return 'serv').
- */
-
-int curl_dogetnameinfo(GETNAMEINFO_QUAL_ARG1 GETNAMEINFO_TYPE_ARG1 sa,
- GETNAMEINFO_TYPE_ARG2 salen,
- char *host, GETNAMEINFO_TYPE_ARG46 hostlen,
- char *serv, GETNAMEINFO_TYPE_ARG46 servlen,
- GETNAMEINFO_TYPE_ARG7 flags,
- int line, const char *source)
-{
- int res = (getnameinfo)(sa, salen,
- host, hostlen,
- serv, servlen,
- flags);
- if(0 == res)
- /* success */
- curl_memlog("GETNAME %s:%d getnameinfo()\n",
- source, line);
- else
- curl_memlog("GETNAME %s:%d getnameinfo() failed = %d\n",
- source, line, res);
- return res;
-}
-#endif /* defined(CURLDEBUG) && defined(HAVE_GETNAMEINFO) */
-
-/*
- * Curl_ipv6works() returns TRUE if ipv6 seems to work.
- */
-bool Curl_ipv6works(void)
-{
- /* the nature of most system is that IPv6 status doesn't come and go
- during a program's lifetime so we only probe the first time and then we
- have the info kept for fast re-use */
- static int ipv6_works = -1;
- if(-1 == ipv6_works) {
- /* probe to see if we have a working IPv6 stack */
- curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0);
- if(s == CURL_SOCKET_BAD)
- /* an ipv6 address was requested but we can't get/use one */
- ipv6_works = 0;
- else {
- ipv6_works = 1;
- Curl_closesocket(NULL, s);
- }
- }
- return (ipv6_works>0)?TRUE:FALSE;
-}
-
-/*
- * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've
- * been set and returns TRUE if they are OK.
- */
-bool Curl_ipvalid(struct connectdata *conn)
-{
- if(conn->ip_version == CURL_IPRESOLVE_V6)
- return Curl_ipv6works();
- return TRUE;
-}
-
-#if defined(CURLRES_SYNCH)
-
-#ifdef DEBUG_ADDRINFO
-static void dump_addrinfo(struct connectdata *conn, const Curl_addrinfo *ai)
-{
- printf("dump_addrinfo:\n");
- for(; ai; ai = ai->ai_next) {
- char buf[INET6_ADDRSTRLEN];
-
- printf(" fam %2d, CNAME %s, ",
- ai->ai_family, ai->ai_canonname ? ai->ai_canonname : "<none>");
- if(Curl_printable_address(ai, buf, sizeof(buf)))
- printf("%s\n", buf);
- else
- printf("failed; %s\n", Curl_strerror(conn, SOCKERRNO));
- }
-}
-#else
-#define dump_addrinfo(x,y) Curl_nop_stmt
-#endif
-
-/*
- * Curl_getaddrinfo() when built ipv6-enabled (non-threading and
- * non-ares version).
- *
- * Returns name information about the given hostname and port number. If
- * successful, the 'addrinfo' is returned and the forth argument will point to
- * memory we need to free after use. That memory *MUST* be freed with
- * Curl_freeaddrinfo(), nothing else.
- */
-Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn,
- const char *hostname,
- int port,
- int *waitp)
-{
- struct addrinfo hints;
- Curl_addrinfo *res;
- int error;
- char sbuf[12];
- char *sbufptr = NULL;
- char addrbuf[128];
- int pf;
- struct SessionHandle *data = conn->data;
-
- *waitp = 0; /* synchronous response only */
-
- /*
- * Check if a limited name resolve has been requested.
- */
- switch(conn->ip_version) {
- case CURL_IPRESOLVE_V4:
- pf = PF_INET;
- break;
- case CURL_IPRESOLVE_V6:
- pf = PF_INET6;
- break;
- default:
- pf = PF_UNSPEC;
- break;
- }
-
- if((pf != PF_INET) && !Curl_ipv6works())
- /* the stack seems to be a non-ipv6 one */
- pf = PF_INET;
-
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = pf;
- hints.ai_socktype = conn->socktype;
-
- if((1 == Curl_inet_pton(AF_INET, hostname, addrbuf)) ||
- (1 == Curl_inet_pton(AF_INET6, hostname, addrbuf))) {
- /* the given address is numerical only, prevent a reverse lookup */
- hints.ai_flags = AI_NUMERICHOST;
- }
-
- if(port) {
- snprintf(sbuf, sizeof(sbuf), "%d", port);
- sbufptr=sbuf;
- }
- error = Curl_getaddrinfo_ex(hostname, sbufptr, &hints, &res);
- if(error) {
- infof(data, "getaddrinfo(3) failed for %s:%d\n", hostname, port);
- return NULL;
- }
-
- dump_addrinfo(conn, res);
-
- return res;
-}
-#endif /* CURLRES_SYNCH */
-#endif /* CURLRES_IPV6 */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/hostsyn.c b/external/libcurl_android/jni/libcurl/lib/hostsyn.c
deleted file mode 100755
index 4ad3c63d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/hostsyn.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "hostip.h"
-#include "hash.h"
-#include "share.h"
-#include "strerror.h"
-#include "url.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/***********************************************************************
- * Only for builds using synchronous name resolves
- **********************************************************************/
-#ifdef CURLRES_SYNCH
-
-/*
- * Function provided by the resolver backend to set DNS servers to use.
- */
-CURLcode Curl_set_dns_servers(struct SessionHandle *data,
- char *servers)
-{
- (void)data;
- (void)servers;
- return CURLE_NOT_BUILT_IN;
-
-}
-
-/*
- * Function provided by the resolver backend to set
- * outgoing interface to use for DNS requests
- */
-CURLcode Curl_set_dns_interface(struct SessionHandle *data,
- const char *interf)
-{
- (void)data;
- (void)interf;
- return CURLE_NOT_BUILT_IN;
-}
-
-/*
- * Function provided by the resolver backend to set
- * local IPv4 address to use as source address for DNS requests
- */
-CURLcode Curl_set_dns_local_ip4(struct SessionHandle *data,
- const char *local_ip4)
-{
- (void)data;
- (void)local_ip4;
- return CURLE_NOT_BUILT_IN;
-}
-
-/*
- * Function provided by the resolver backend to set
- * local IPv6 address to use as source address for DNS requests
- */
-CURLcode Curl_set_dns_local_ip6(struct SessionHandle *data,
- const char *local_ip6)
-{
- (void)data;
- (void)local_ip6;
- return CURLE_NOT_BUILT_IN;
-}
-
-#endif /* truly sync */
diff --git a/external/libcurl_android/jni/libcurl/lib/http.c b/external/libcurl_android/jni/libcurl/lib/http.c
deleted file mode 100755
index 35baa340..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http.c
+++ /dev/null
@@ -1,3664 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_HTTP
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "transfer.h"
-#include "sendf.h"
-#include "formdata.h"
-#include "progress.h"
-#include "curl_base64.h"
-#include "cookie.h"
-#include "strequal.h"
-#include "vtls/vtls.h"
-#include "http_digest.h"
-#include "curl_ntlm.h"
-#include "curl_ntlm_wb.h"
-#include "http_negotiate.h"
-#include "url.h"
-#include "share.h"
-#include "hostip.h"
-#include "http.h"
-#include "curl_memory.h"
-#include "select.h"
-#include "parsedate.h" /* for the week day and month names */
-#include "strtoofft.h"
-#include "multiif.h"
-#include "rawstr.h"
-#include "content_encoding.h"
-#include "http_proxy.h"
-#include "warnless.h"
-#include "non-ascii.h"
-#include "bundles.h"
-#include "pipeline.h"
-#include "http2.h"
-#include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * Forward declarations.
- */
-
-static int http_getsock_do(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-static int http_should_fail(struct connectdata *conn);
-
-#ifdef USE_SSL
-static CURLcode https_connecting(struct connectdata *conn, bool *done);
-static int https_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-#else
-#define https_connecting(x,y) CURLE_COULDNT_CONNECT
-#endif
-
-/*
- * HTTP handler interface.
- */
-const struct Curl_handler Curl_handler_http = {
- "HTTP", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- Curl_http_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- http_getsock_do, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_HTTP, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_CREDSPERREQUEST /* flags */
-};
-
-#ifdef USE_SSL
-/*
- * HTTPS handler interface.
- */
-const struct Curl_handler Curl_handler_https = {
- "HTTPS", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- Curl_http_connect, /* connect_it */
- https_connecting, /* connecting */
- ZERO_NULL, /* doing */
- https_getsock, /* proto_getsock */
- http_getsock_do, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_HTTPS, /* defport */
- CURLPROTO_HTTPS, /* protocol */
- PROTOPT_SSL | PROTOPT_CREDSPERREQUEST /* flags */
-};
-#endif
-
-
-CURLcode Curl_http_setup_conn(struct connectdata *conn)
-{
- /* allocate the HTTP-specific struct for the SessionHandle, only to survive
- during this request */
- DEBUGASSERT(conn->data->req.protop == NULL);
-
- conn->data->req.protop = calloc(1, sizeof(struct HTTP));
- if(!conn->data->req.protop)
- return CURLE_OUT_OF_MEMORY;
-
- return CURLE_OK;
-}
-
-/*
- * checkheaders() checks the linked list of custom HTTP headers for a
- * particular header (prefix).
- *
- * Returns a pointer to the first matching header or NULL if none matched.
- */
-char *Curl_checkheaders(const struct connectdata *conn,
- const char *thisheader)
-{
- struct curl_slist *head;
- size_t thislen = strlen(thisheader);
- struct SessionHandle *data = conn->data;
-
- for(head = data->set.headers;head; head=head->next) {
- if(Curl_raw_nequal(head->data, thisheader, thislen))
- return head->data;
- }
- return NULL;
-}
-
-/*
- * checkProxyHeaders() checks the linked list of custom proxy headers
- * if proxy headers are not available, then it will lookup into http header
- * link list
- *
- * It takes a connectdata struct as input instead of the SessionHandle simply
- * to know if this is a proxy request or not, as it then might check a
- * different header list.
- *
- */
-char *Curl_checkProxyheaders(const struct connectdata *conn,
- const char *thisheader)
-{
- struct curl_slist *head;
- size_t thislen = strlen(thisheader);
- struct SessionHandle *data = conn->data;
-
- for(head = (conn->bits.proxy && data->set.sep_headers)?
- data->set.proxyheaders:data->set.headers;
- head; head=head->next) {
- if(Curl_raw_nequal(head->data, thisheader, thislen))
- return head->data;
- }
- return NULL;
-}
-
-/*
- * Strip off leading and trailing whitespace from the value in the
- * given HTTP header line and return a strdupped copy. Returns NULL in
- * case of allocation failure. Returns an empty string if the header value
- * consists entirely of whitespace.
- */
-char *Curl_copy_header_value(const char *header)
-{
- const char *start;
- const char *end;
- char *value;
- size_t len;
-
- DEBUGASSERT(header);
-
- /* Find the end of the header name */
- while(*header && (*header != ':'))
- ++header;
-
- if(*header)
- /* Skip over colon */
- ++header;
-
- /* Find the first non-space letter */
- start = header;
- while(*start && ISSPACE(*start))
- start++;
-
- /* data is in the host encoding so
- use '\r' and '\n' instead of 0x0d and 0x0a */
- end = strchr(start, '\r');
- if(!end)
- end = strchr(start, '\n');
- if(!end)
- end = strchr(start, '\0');
- if(!end)
- return NULL;
-
- /* skip all trailing space letters */
- while((end > start) && ISSPACE(*end))
- end--;
-
- /* get length of the type */
- len = end - start + 1;
-
- value = malloc(len + 1);
- if(!value)
- return NULL;
-
- memcpy(value, start, len);
- value[len] = 0; /* zero terminate */
-
- return value;
-}
-
-/*
- * http_output_basic() sets up an Authorization: header (or the proxy version)
- * for HTTP Basic authentication.
- *
- * Returns CURLcode.
- */
-static CURLcode http_output_basic(struct connectdata *conn, bool proxy)
-{
- size_t size = 0;
- char *authorization = NULL;
- struct SessionHandle *data = conn->data;
- char **userp;
- const char *user;
- const char *pwd;
- CURLcode error;
-
- if(proxy) {
- userp = &conn->allocptr.proxyuserpwd;
- user = conn->proxyuser;
- pwd = conn->proxypasswd;
- }
- else {
- userp = &conn->allocptr.userpwd;
- user = conn->user;
- pwd = conn->passwd;
- }
-
- snprintf(data->state.buffer, sizeof(data->state.buffer), "%s:%s", user, pwd);
-
- error = Curl_base64_encode(data,
- data->state.buffer, strlen(data->state.buffer),
- &authorization, &size);
- if(error)
- return error;
-
- if(!authorization)
- return CURLE_REMOTE_ACCESS_DENIED;
-
- Curl_safefree(*userp);
- *userp = aprintf("%sAuthorization: Basic %s\r\n",
- proxy?"Proxy-":"",
- authorization);
- free(authorization);
- if(!*userp)
- return CURLE_OUT_OF_MEMORY;
-
- return CURLE_OK;
-}
-
-/* pickoneauth() selects the most favourable authentication method from the
- * ones available and the ones we want.
- *
- * return TRUE if one was picked
- */
-static bool pickoneauth(struct auth *pick)
-{
- bool picked;
- /* only deal with authentication we want */
- unsigned long avail = pick->avail & pick->want;
- picked = TRUE;
-
- /* The order of these checks is highly relevant, as this will be the order
- of preference in case of the existence of multiple accepted types. */
- if(avail & CURLAUTH_NEGOTIATE)
- pick->picked = CURLAUTH_NEGOTIATE;
- else if(avail & CURLAUTH_DIGEST)
- pick->picked = CURLAUTH_DIGEST;
- else if(avail & CURLAUTH_NTLM)
- pick->picked = CURLAUTH_NTLM;
- else if(avail & CURLAUTH_NTLM_WB)
- pick->picked = CURLAUTH_NTLM_WB;
- else if(avail & CURLAUTH_BASIC)
- pick->picked = CURLAUTH_BASIC;
- else {
- pick->picked = CURLAUTH_PICKNONE; /* we select to use nothing */
- picked = FALSE;
- }
- pick->avail = CURLAUTH_NONE; /* clear it here */
-
- return picked;
-}
-
-/*
- * Curl_http_perhapsrewind()
- *
- * If we are doing POST or PUT {
- * If we have more data to send {
- * If we are doing NTLM {
- * Keep sending since we must not disconnect
- * }
- * else {
- * If there is more than just a little data left to send, close
- * the current connection by force.
- * }
- * }
- * If we have sent any data {
- * If we don't have track of all the data {
- * call app to tell it to rewind
- * }
- * else {
- * rewind internally so that the operation can restart fine
- * }
- * }
- * }
- */
-static CURLcode http_perhapsrewind(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- struct HTTP *http = data->req.protop;
- curl_off_t bytessent;
- curl_off_t expectsend = -1; /* default is unknown */
-
- if(!http)
- /* If this is still NULL, we have not reach very far and we can safely
- skip this rewinding stuff */
- return CURLE_OK;
-
- switch(data->set.httpreq) {
- case HTTPREQ_GET:
- case HTTPREQ_HEAD:
- return CURLE_OK;
- default:
- break;
- }
-
- bytessent = http->writebytecount;
-
- if(conn->bits.authneg)
- /* This is a state where we are known to be negotiating and we don't send
- any data then. */
- expectsend = 0;
- else {
- /* figure out how much data we are expected to send */
- switch(data->set.httpreq) {
- case HTTPREQ_POST:
- if(data->set.postfieldsize != -1)
- expectsend = data->set.postfieldsize;
- else if(data->set.postfields)
- expectsend = (curl_off_t)strlen(data->set.postfields);
- break;
- case HTTPREQ_PUT:
- if(data->state.infilesize != -1)
- expectsend = data->state.infilesize;
- break;
- case HTTPREQ_POST_FORM:
- expectsend = http->postsize;
- break;
- default:
- break;
- }
- }
-
- conn->bits.rewindaftersend = FALSE; /* default */
-
- if((expectsend == -1) || (expectsend > bytessent)) {
- /* There is still data left to send */
- if((data->state.authproxy.picked == CURLAUTH_NTLM) ||
- (data->state.authhost.picked == CURLAUTH_NTLM) ||
- (data->state.authproxy.picked == CURLAUTH_NTLM_WB) ||
- (data->state.authhost.picked == CURLAUTH_NTLM_WB)) {
- if(((expectsend - bytessent) < 2000) ||
- (conn->ntlm.state != NTLMSTATE_NONE) ||
- (conn->proxyntlm.state != NTLMSTATE_NONE)) {
- /* The NTLM-negotiation has started *OR* there is just a little (<2K)
- data left to send, keep on sending. */
-
- /* rewind data when completely done sending! */
- if(!conn->bits.authneg) {
- conn->bits.rewindaftersend = TRUE;
- infof(data, "Rewind stream after send\n");
- }
-
- return CURLE_OK;
- }
- if(conn->bits.close)
- /* this is already marked to get closed */
- return CURLE_OK;
-
- infof(data, "NTLM send, close instead of sending %"
- CURL_FORMAT_CURL_OFF_T " bytes\n",
- (curl_off_t)(expectsend - bytessent));
- }
-
- /* This is not NTLM or many bytes left to send: close
- */
- connclose(conn, "Mid-auth HTTP and much data left to send");
- data->req.size = 0; /* don't download any more than 0 bytes */
-
- /* There still is data left to send, but this connection is marked for
- closure so we can safely do the rewind right now */
- }
-
- if(bytessent)
- /* we rewind now at once since if we already sent something */
- return Curl_readrewind(conn);
-
- return CURLE_OK;
-}
-
-/*
- * Curl_http_auth_act() gets called when all HTTP headers have been received
- * and it checks what authentication methods that are available and decides
- * which one (if any) to use. It will set 'newurl' if an auth method was
- * picked.
- */
-
-CURLcode Curl_http_auth_act(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- bool pickhost = FALSE;
- bool pickproxy = FALSE;
- CURLcode code = CURLE_OK;
-
- if(100 <= data->req.httpcode && 199 >= data->req.httpcode)
- /* this is a transient response code, ignore */
- return CURLE_OK;
-
- if(data->state.authproblem)
- return data->set.http_fail_on_error?CURLE_HTTP_RETURNED_ERROR:CURLE_OK;
-
- if(conn->bits.user_passwd &&
- ((data->req.httpcode == 401) ||
- (conn->bits.authneg && data->req.httpcode < 300))) {
- pickhost = pickoneauth(&data->state.authhost);
- if(!pickhost)
- data->state.authproblem = TRUE;
- }
- if(conn->bits.proxy_user_passwd &&
- ((data->req.httpcode == 407) ||
- (conn->bits.authneg && data->req.httpcode < 300))) {
- pickproxy = pickoneauth(&data->state.authproxy);
- if(!pickproxy)
- data->state.authproblem = TRUE;
- }
-
- if(pickhost || pickproxy) {
- /* In case this is GSS auth, the newurl field is already allocated so
- we must make sure to free it before allocating a new one. As figured
- out in bug #2284386 */
- Curl_safefree(data->req.newurl);
- data->req.newurl = strdup(data->change.url); /* clone URL */
- if(!data->req.newurl)
- return CURLE_OUT_OF_MEMORY;
-
- if((data->set.httpreq != HTTPREQ_GET) &&
- (data->set.httpreq != HTTPREQ_HEAD) &&
- !conn->bits.rewindaftersend) {
- code = http_perhapsrewind(conn);
- if(code)
- return code;
- }
- }
-
- else if((data->req.httpcode < 300) &&
- (!data->state.authhost.done) &&
- conn->bits.authneg) {
- /* no (known) authentication available,
- authentication is not "done" yet and
- no authentication seems to be required and
- we didn't try HEAD or GET */
- if((data->set.httpreq != HTTPREQ_GET) &&
- (data->set.httpreq != HTTPREQ_HEAD)) {
- data->req.newurl = strdup(data->change.url); /* clone URL */
- if(!data->req.newurl)
- return CURLE_OUT_OF_MEMORY;
- data->state.authhost.done = TRUE;
- }
- }
- if(http_should_fail(conn)) {
- failf (data, "The requested URL returned error: %d",
- data->req.httpcode);
- code = CURLE_HTTP_RETURNED_ERROR;
- }
-
- return code;
-}
-
-
-/*
- * Output the correct authentication header depending on the auth type
- * and whether or not it is to a proxy.
- */
-static CURLcode
-output_auth_headers(struct connectdata *conn,
- struct auth *authstatus,
- const char *request,
- const char *path,
- bool proxy)
-{
- struct SessionHandle *data = conn->data;
- const char *auth=NULL;
- CURLcode result = CURLE_OK;
-#ifdef USE_SPNEGO
- struct negotiatedata *negdata = proxy?
- &data->state.proxyneg:&data->state.negotiate;
-#endif
-
-#ifdef CURL_DISABLE_CRYPTO_AUTH
- (void)request;
- (void)path;
-#endif
-
-#ifdef USE_SPNEGO
- negdata->state = GSS_AUTHNONE;
- if((authstatus->picked == CURLAUTH_NEGOTIATE) &&
- negdata->context && !GSS_ERROR(negdata->status)) {
- auth="Negotiate";
- result = Curl_output_negotiate(conn, proxy);
- if(result)
- return result;
- authstatus->done = TRUE;
- negdata->state = GSS_AUTHSENT;
- }
- else
-#endif
-#ifdef USE_NTLM
- if(authstatus->picked == CURLAUTH_NTLM) {
- auth="NTLM";
- result = Curl_output_ntlm(conn, proxy);
- if(result)
- return result;
- }
- else
-#endif
-#if defined(USE_NTLM) && defined(NTLM_WB_ENABLED)
- if(authstatus->picked == CURLAUTH_NTLM_WB) {
- auth="NTLM_WB";
- result = Curl_output_ntlm_wb(conn, proxy);
- if(result)
- return result;
- }
- else
-#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- if(authstatus->picked == CURLAUTH_DIGEST) {
- auth="Digest";
- result = Curl_output_digest(conn,
- proxy,
- (const unsigned char *)request,
- (const unsigned char *)path);
- if(result)
- return result;
- }
- else
-#endif
- if(authstatus->picked == CURLAUTH_BASIC) {
- /* Basic */
- if((proxy && conn->bits.proxy_user_passwd &&
- !Curl_checkProxyheaders(conn, "Proxy-authorization:")) ||
- (!proxy && conn->bits.user_passwd &&
- !Curl_checkheaders(conn, "Authorization:"))) {
- auth="Basic";
- result = http_output_basic(conn, proxy);
- if(result)
- return result;
- }
- /* NOTE: this function should set 'done' TRUE, as the other auth
- functions work that way */
- authstatus->done = TRUE;
- }
-
- if(auth) {
- infof(data, "%s auth using %s with user '%s'\n",
- proxy?"Proxy":"Server", auth,
- proxy?(conn->proxyuser?conn->proxyuser:""):
- (conn->user?conn->user:""));
- authstatus->multi = (!authstatus->done) ? TRUE : FALSE;
- }
- else
- authstatus->multi = FALSE;
-
- return CURLE_OK;
-}
-
-/**
- * Curl_http_output_auth() setups the authentication headers for the
- * host/proxy and the correct authentication
- * method. conn->data->state.authdone is set to TRUE when authentication is
- * done.
- *
- * @param conn all information about the current connection
- * @param request pointer to the request keyword
- * @param path pointer to the requested path
- * @param proxytunnel boolean if this is the request setting up a "proxy
- * tunnel"
- *
- * @returns CURLcode
- */
-CURLcode
-Curl_http_output_auth(struct connectdata *conn,
- const char *request,
- const char *path,
- bool proxytunnel) /* TRUE if this is the request setting
- up the proxy tunnel */
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct auth *authhost;
- struct auth *authproxy;
-
- DEBUGASSERT(data);
-
- authhost = &data->state.authhost;
- authproxy = &data->state.authproxy;
-
- if((conn->bits.httpproxy && conn->bits.proxy_user_passwd) ||
- conn->bits.user_passwd)
- /* continue please */ ;
- else {
- authhost->done = TRUE;
- authproxy->done = TRUE;
- return CURLE_OK; /* no authentication with no user or password */
- }
-
- if(authhost->want && !authhost->picked)
- /* The app has selected one or more methods, but none has been picked
- so far by a server round-trip. Then we set the picked one to the
- want one, and if this is one single bit it'll be used instantly. */
- authhost->picked = authhost->want;
-
- if(authproxy->want && !authproxy->picked)
- /* The app has selected one or more methods, but none has been picked so
- far by a proxy round-trip. Then we set the picked one to the want one,
- and if this is one single bit it'll be used instantly. */
- authproxy->picked = authproxy->want;
-
-#ifndef CURL_DISABLE_PROXY
- /* Send proxy authentication header if needed */
- if(conn->bits.httpproxy &&
- (conn->bits.tunnel_proxy == proxytunnel)) {
- result = output_auth_headers(conn, authproxy, request, path, TRUE);
- if(result)
- return result;
- }
- else
-#else
- (void)proxytunnel;
-#endif /* CURL_DISABLE_PROXY */
- /* we have no proxy so let's pretend we're done authenticating
- with it */
- authproxy->done = TRUE;
-
- /* To prevent the user+password to get sent to other than the original
- host due to a location-follow, we do some weirdo checks here */
- if(!data->state.this_is_a_follow ||
- conn->bits.netrc ||
- !data->state.first_host ||
- data->set.http_disable_hostname_check_before_authentication ||
- Curl_raw_equal(data->state.first_host, conn->host.name)) {
- result = output_auth_headers(conn, authhost, request, path, FALSE);
- }
- else
- authhost->done = TRUE;
-
- return result;
-}
-
-
-/*
- * Curl_http_input_auth() deals with Proxy-Authenticate: and WWW-Authenticate:
- * headers. They are dealt with both in the transfer.c main loop and in the
- * proxy CONNECT loop.
- */
-
-CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
- const char *auth) /* the first non-space */
-{
- /*
- * This resource requires authentication
- */
- struct SessionHandle *data = conn->data;
-
-#ifdef USE_SPNEGO
- struct negotiatedata *negdata = proxy?
- &data->state.proxyneg:&data->state.negotiate;
-#endif
- unsigned long *availp;
- struct auth *authp;
-
- if(proxy) {
- availp = &data->info.proxyauthavail;
- authp = &data->state.authproxy;
- }
- else {
- availp = &data->info.httpauthavail;
- authp = &data->state.authhost;
- }
-
- /*
- * Here we check if we want the specific single authentication (using ==) and
- * if we do, we initiate usage of it.
- *
- * If the provided authentication is wanted as one out of several accepted
- * types (using &), we OR this authentication type to the authavail
- * variable.
- *
- * Note:
- *
- * ->picked is first set to the 'want' value (one or more bits) before the
- * request is sent, and then it is again set _after_ all response 401/407
- * headers have been received but then only to a single preferred method
- * (bit).
- *
- */
-
- while(*auth) {
-#ifdef USE_SPNEGO
- if(checkprefix("Negotiate", auth)) {
- int neg;
- *availp |= CURLAUTH_NEGOTIATE;
- authp->avail |= CURLAUTH_NEGOTIATE;
-
- if(authp->picked == CURLAUTH_NEGOTIATE) {
- if(negdata->state == GSS_AUTHSENT || negdata->state == GSS_AUTHNONE) {
- neg = Curl_input_negotiate(conn, proxy, auth);
- if(neg == 0) {
- DEBUGASSERT(!data->req.newurl);
- data->req.newurl = strdup(data->change.url);
- if(!data->req.newurl)
- return CURLE_OUT_OF_MEMORY;
- data->state.authproblem = FALSE;
- /* we received a GSS auth token and we dealt with it fine */
- negdata->state = GSS_AUTHRECV;
- }
- else
- data->state.authproblem = TRUE;
- }
- }
- }
- else
-#endif
-#ifdef USE_NTLM
- /* NTLM support requires the SSL crypto libs */
- if(checkprefix("NTLM", auth)) {
- *availp |= CURLAUTH_NTLM;
- authp->avail |= CURLAUTH_NTLM;
- if(authp->picked == CURLAUTH_NTLM ||
- authp->picked == CURLAUTH_NTLM_WB) {
- /* NTLM authentication is picked and activated */
- CURLcode ntlm =
- Curl_input_ntlm(conn, proxy, auth);
- if(CURLE_OK == ntlm) {
- data->state.authproblem = FALSE;
-#ifdef NTLM_WB_ENABLED
- if(authp->picked == CURLAUTH_NTLM_WB) {
- *availp &= ~CURLAUTH_NTLM;
- authp->avail &= ~CURLAUTH_NTLM;
- *availp |= CURLAUTH_NTLM_WB;
- authp->avail |= CURLAUTH_NTLM_WB;
-
- /* Get the challenge-message which will be passed to
- * ntlm_auth for generating the type 3 message later */
- while(*auth && ISSPACE(*auth))
- auth++;
- if(checkprefix("NTLM", auth)) {
- auth += strlen("NTLM");
- while(*auth && ISSPACE(*auth))
- auth++;
- if(*auth)
- if((conn->challenge_header = strdup(auth)) == NULL)
- return CURLE_OUT_OF_MEMORY;
- }
- }
-#endif
- }
- else {
- infof(data, "Authentication problem. Ignoring this.\n");
- data->state.authproblem = TRUE;
- }
- }
- }
- else
-#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- if(checkprefix("Digest", auth)) {
- if((authp->avail & CURLAUTH_DIGEST) != 0) {
- infof(data, "Ignoring duplicate digest auth header.\n");
- }
- else {
- CURLdigest dig;
- *availp |= CURLAUTH_DIGEST;
- authp->avail |= CURLAUTH_DIGEST;
-
- /* We call this function on input Digest headers even if Digest
- * authentication isn't activated yet, as we need to store the
- * incoming data from this header in case we are gonna use
- * Digest. */
- dig = Curl_input_digest(conn, proxy, auth);
-
- if(CURLDIGEST_FINE != dig) {
- infof(data, "Authentication problem. Ignoring this.\n");
- data->state.authproblem = TRUE;
- }
- }
- }
- else
-#endif
- if(checkprefix("Basic", auth)) {
- *availp |= CURLAUTH_BASIC;
- authp->avail |= CURLAUTH_BASIC;
- if(authp->picked == CURLAUTH_BASIC) {
- /* We asked for Basic authentication but got a 40X back
- anyway, which basically means our name+password isn't
- valid. */
- authp->avail = CURLAUTH_NONE;
- infof(data, "Authentication problem. Ignoring this.\n");
- data->state.authproblem = TRUE;
- }
- }
-
- /* there may be multiple methods on one line, so keep reading */
- while(*auth && *auth != ',') /* read up to the next comma */
- auth++;
- if(*auth == ',') /* if we're on a comma, skip it */
- auth++;
- while(*auth && ISSPACE(*auth))
- auth++;
- }
- return CURLE_OK;
-}
-
-/**
- * http_should_fail() determines whether an HTTP response has gotten us
- * into an error state or not.
- *
- * @param conn all information about the current connection
- *
- * @retval 0 communications should continue
- *
- * @retval 1 communications should not continue
- */
-static int http_should_fail(struct connectdata *conn)
-{
- struct SessionHandle *data;
- int httpcode;
-
- DEBUGASSERT(conn);
- data = conn->data;
- DEBUGASSERT(data);
-
- httpcode = data->req.httpcode;
-
- /*
- ** If we haven't been asked to fail on error,
- ** don't fail.
- */
- if(!data->set.http_fail_on_error)
- return 0;
-
- /*
- ** Any code < 400 is never terminal.
- */
- if(httpcode < 400)
- return 0;
-
- /*
- ** Any code >= 400 that's not 401 or 407 is always
- ** a terminal error
- */
- if((httpcode != 401) &&
- (httpcode != 407))
- return 1;
-
- /*
- ** All we have left to deal with is 401 and 407
- */
- DEBUGASSERT((httpcode == 401) || (httpcode == 407));
-
- /*
- ** Examine the current authentication state to see if this
- ** is an error. The idea is for this function to get
- ** called after processing all the headers in a response
- ** message. So, if we've been to asked to authenticate a
- ** particular stage, and we've done it, we're OK. But, if
- ** we're already completely authenticated, it's not OK to
- ** get another 401 or 407.
- **
- ** It is possible for authentication to go stale such that
- ** the client needs to reauthenticate. Once that info is
- ** available, use it here.
- */
-
- /*
- ** Either we're not authenticating, or we're supposed to
- ** be authenticating something else. This is an error.
- */
- if((httpcode == 401) && !conn->bits.user_passwd)
- return TRUE;
- if((httpcode == 407) && !conn->bits.proxy_user_passwd)
- return TRUE;
-
- return data->state.authproblem;
-}
-
-/*
- * readmoredata() is a "fread() emulation" to provide POST and/or request
- * data. It is used when a huge POST is to be made and the entire chunk wasn't
- * sent in the first send(). This function will then be called from the
- * transfer.c loop when more data is to be sent to the peer.
- *
- * Returns the amount of bytes it filled the buffer with.
- */
-static size_t readmoredata(char *buffer,
- size_t size,
- size_t nitems,
- void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- struct HTTP *http = conn->data->req.protop;
- size_t fullsize = size * nitems;
-
- if(0 == http->postsize)
- /* nothing to return */
- return 0;
-
- /* make sure that a HTTP request is never sent away chunked! */
- conn->data->req.forbidchunk = (http->sending == HTTPSEND_REQUEST)?TRUE:FALSE;
-
- if(http->postsize <= (curl_off_t)fullsize) {
- memcpy(buffer, http->postdata, (size_t)http->postsize);
- fullsize = (size_t)http->postsize;
-
- if(http->backup.postsize) {
- /* move backup data into focus and continue on that */
- http->postdata = http->backup.postdata;
- http->postsize = http->backup.postsize;
- conn->fread_func = http->backup.fread_func;
- conn->fread_in = http->backup.fread_in;
-
- http->sending++; /* move one step up */
-
- http->backup.postsize=0;
- }
- else
- http->postsize = 0;
-
- return fullsize;
- }
-
- memcpy(buffer, http->postdata, fullsize);
- http->postdata += fullsize;
- http->postsize -= fullsize;
-
- return fullsize;
-}
-
-/* ------------------------------------------------------------------------- */
-/* add_buffer functions */
-
-/*
- * Curl_add_buffer_init() sets up and returns a fine buffer struct
- */
-Curl_send_buffer *Curl_add_buffer_init(void)
-{
- return calloc(1, sizeof(Curl_send_buffer));
-}
-
-/*
- * Curl_add_buffer_send() sends a header buffer and frees all associated
- * memory. Body data may be appended to the header data if desired.
- *
- * Returns CURLcode
- */
-CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
- struct connectdata *conn,
-
- /* add the number of sent bytes to this
- counter */
- long *bytes_written,
-
- /* how much of the buffer contains body data */
- size_t included_body_bytes,
- int socketindex)
-
-{
- ssize_t amount;
- CURLcode res;
- char *ptr;
- size_t size;
- struct HTTP *http = conn->data->req.protop;
- size_t sendsize;
- curl_socket_t sockfd;
- size_t headersize;
-
- DEBUGASSERT(socketindex <= SECONDARYSOCKET);
-
- sockfd = conn->sock[socketindex];
-
- /* The looping below is required since we use non-blocking sockets, but due
- to the circumstances we will just loop and try again and again etc */
-
- ptr = in->buffer;
- size = in->size_used;
-
- headersize = size - included_body_bytes; /* the initial part that isn't body
- is header */
-
- DEBUGASSERT(size > included_body_bytes);
-
- res = Curl_convert_to_network(conn->data, ptr, headersize);
- /* Curl_convert_to_network calls failf if unsuccessful */
- if(res) {
- /* conversion failed, free memory and return to the caller */
- if(in->buffer)
- free(in->buffer);
- free(in);
- return res;
- }
-
-
- if(conn->handler->flags & PROTOPT_SSL) {
- /* We never send more than CURL_MAX_WRITE_SIZE bytes in one single chunk
- when we speak HTTPS, as if only a fraction of it is sent now, this data
- needs to fit into the normal read-callback buffer later on and that
- buffer is using this size.
- */
-
- sendsize= (size > CURL_MAX_WRITE_SIZE)?CURL_MAX_WRITE_SIZE:size;
-
- /* OpenSSL is very picky and we must send the SAME buffer pointer to the
- library when we attempt to re-send this buffer. Sending the same data
- is not enough, we must use the exact same address. For this reason, we
- must copy the data to the uploadbuffer first, since that is the buffer
- we will be using if this send is retried later.
- */
- memcpy(conn->data->state.uploadbuffer, ptr, sendsize);
- ptr = conn->data->state.uploadbuffer;
- }
- else
- sendsize = size;
-
- res = Curl_write(conn, sockfd, ptr, sendsize, &amount);
-
- if(CURLE_OK == res) {
- /*
- * Note that we may not send the entire chunk at once, and we have a set
- * number of data bytes at the end of the big buffer (out of which we may
- * only send away a part).
- */
- /* how much of the header that was sent */
- size_t headlen = (size_t)amount>headersize?headersize:(size_t)amount;
- size_t bodylen = amount - headlen;
-
- if(conn->data->set.verbose) {
- /* this data _may_ contain binary stuff */
- Curl_debug(conn->data, CURLINFO_HEADER_OUT, ptr, headlen, conn);
- if(bodylen) {
- /* there was body data sent beyond the initial header part, pass that
- on to the debug callback too */
- Curl_debug(conn->data, CURLINFO_DATA_OUT,
- ptr+headlen, bodylen, conn);
- }
- }
- if(bodylen)
- /* since we sent a piece of the body here, up the byte counter for it
- accordingly */
- http->writebytecount += bodylen;
-
- /* 'amount' can never be a very large value here so typecasting it so a
- signed 31 bit value should not cause problems even if ssize_t is
- 64bit */
- *bytes_written += (long)amount;
-
- if(http) {
- if((size_t)amount != size) {
- /* The whole request could not be sent in one system call. We must
- queue it up and send it later when we get the chance. We must not
- loop here and wait until it might work again. */
-
- size -= amount;
-
- ptr = in->buffer + amount;
-
- /* backup the currently set pointers */
- http->backup.fread_func = conn->fread_func;
- http->backup.fread_in = conn->fread_in;
- http->backup.postdata = http->postdata;
- http->backup.postsize = http->postsize;
-
- /* set the new pointers for the request-sending */
- conn->fread_func = (curl_read_callback)readmoredata;
- conn->fread_in = (void *)conn;
- http->postdata = ptr;
- http->postsize = (curl_off_t)size;
-
- http->send_buffer = in;
- http->sending = HTTPSEND_REQUEST;
-
- return CURLE_OK;
- }
- http->sending = HTTPSEND_BODY;
- /* the full buffer was sent, clean up and return */
- }
- else {
- if((size_t)amount != size)
- /* We have no continue-send mechanism now, fail. This can only happen
- when this function is used from the CONNECT sending function. We
- currently (stupidly) assume that the whole request is always sent
- away in the first single chunk.
-
- This needs FIXing.
- */
- return CURLE_SEND_ERROR;
- else
- conn->writechannel_inuse = FALSE;
- }
- }
- if(in->buffer)
- free(in->buffer);
- free(in);
-
- return res;
-}
-
-
-/*
- * add_bufferf() add the formatted input to the buffer.
- */
-CURLcode Curl_add_bufferf(Curl_send_buffer *in, const char *fmt, ...)
-{
- char *s;
- va_list ap;
- va_start(ap, fmt);
- s = vaprintf(fmt, ap); /* this allocs a new string to append */
- va_end(ap);
-
- if(s) {
- CURLcode result = Curl_add_buffer(in, s, strlen(s));
- free(s);
- return result;
- }
- /* If we failed, we cleanup the whole buffer and return error */
- if(in->buffer)
- free(in->buffer);
- free(in);
- return CURLE_OUT_OF_MEMORY;
-}
-
-/*
- * add_buffer() appends a memory chunk to the existing buffer
- */
-CURLcode Curl_add_buffer(Curl_send_buffer *in, const void *inptr, size_t size)
-{
- char *new_rb;
- size_t new_size;
-
- if(~size < in->size_used) {
- /* If resulting used size of send buffer would wrap size_t, cleanup
- the whole buffer and return error. Otherwise the required buffer
- size will fit into a single allocatable memory chunk */
- Curl_safefree(in->buffer);
- free(in);
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(!in->buffer ||
- ((in->size_used + size) > (in->size_max - 1))) {
-
- /* If current buffer size isn't enough to hold the result, use a
- buffer size that doubles the required size. If this new size
- would wrap size_t, then just use the largest possible one */
-
- if((size > (size_t)-1/2) || (in->size_used > (size_t)-1/2) ||
- (~(size*2) < (in->size_used*2)))
- new_size = (size_t)-1;
- else
- new_size = (in->size_used+size)*2;
-
- if(in->buffer)
- /* we have a buffer, enlarge the existing one */
- new_rb = realloc(in->buffer, new_size);
- else
- /* create a new buffer */
- new_rb = malloc(new_size);
-
- if(!new_rb) {
- /* If we failed, we cleanup the whole buffer and return error */
- Curl_safefree(in->buffer);
- free(in);
- return CURLE_OUT_OF_MEMORY;
- }
-
- in->buffer = new_rb;
- in->size_max = new_size;
- }
- memcpy(&in->buffer[in->size_used], inptr, size);
-
- in->size_used += size;
-
- return CURLE_OK;
-}
-
-/* end of the add_buffer functions */
-/* ------------------------------------------------------------------------- */
-
-
-
-/*
- * Curl_compareheader()
- *
- * Returns TRUE if 'headerline' contains the 'header' with given 'content'.
- * Pass headers WITH the colon.
- */
-bool
-Curl_compareheader(const char *headerline, /* line to check */
- const char *header, /* header keyword _with_ colon */
- const char *content) /* content string to find */
-{
- /* RFC2616, section 4.2 says: "Each header field consists of a name followed
- * by a colon (":") and the field value. Field names are case-insensitive.
- * The field value MAY be preceded by any amount of LWS, though a single SP
- * is preferred." */
-
- size_t hlen = strlen(header);
- size_t clen;
- size_t len;
- const char *start;
- const char *end;
-
- if(!Curl_raw_nequal(headerline, header, hlen))
- return FALSE; /* doesn't start with header */
-
- /* pass the header */
- start = &headerline[hlen];
-
- /* pass all white spaces */
- while(*start && ISSPACE(*start))
- start++;
-
- /* find the end of the header line */
- end = strchr(start, '\r'); /* lines end with CRLF */
- if(!end) {
- /* in case there's a non-standard compliant line here */
- end = strchr(start, '\n');
-
- if(!end)
- /* hm, there's no line ending here, use the zero byte! */
- end = strchr(start, '\0');
- }
-
- len = end-start; /* length of the content part of the input line */
- clen = strlen(content); /* length of the word to find */
-
- /* find the content string in the rest of the line */
- for(;len>=clen;len--, start++) {
- if(Curl_raw_nequal(start, content, clen))
- return TRUE; /* match! */
- }
-
- return FALSE; /* no match */
-}
-
-/*
- * Curl_http_connect() performs HTTP stuff to do at connect-time, called from
- * the generic Curl_connect().
- */
-CURLcode Curl_http_connect(struct connectdata *conn, bool *done)
-{
- CURLcode result;
-
- /* We default to persistent connections. We set this already in this connect
- function to make the re-use checks properly be able to check this bit. */
- connkeep(conn, "HTTP default");
-
- /* the CONNECT procedure might not have been completed */
- result = Curl_proxy_connect(conn);
- if(result)
- return result;
-
- if(conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
- /* nothing else to do except wait right now - we're not done here. */
- return CURLE_OK;
-
- if(conn->given->flags & PROTOPT_SSL) {
- /* perform SSL initialization */
- result = https_connecting(conn, done);
- if(result)
- return result;
- }
- else
- *done = TRUE;
-
- return CURLE_OK;
-}
-
-/* this returns the socket to wait for in the DO and DOING state for the multi
- interface and then we're always _sending_ a request and thus we wait for
- the single socket to become writable only */
-static int http_getsock_do(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- /* write mode */
- (void)numsocks; /* unused, we trust it to be at least 1 */
- socks[0] = conn->sock[FIRSTSOCKET];
- return GETSOCK_WRITESOCK(0);
-}
-
-#ifdef USE_SSL
-static CURLcode https_connecting(struct connectdata *conn, bool *done)
-{
- CURLcode result;
- DEBUGASSERT((conn) && (conn->handler->flags & PROTOPT_SSL));
-
- /* perform SSL initialization for this socket */
- result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, done);
- if(result)
- connclose(conn, "Failed HTTPS connection");
-
- return result;
-}
-#endif
-
-#if defined(USE_SSLEAY) || defined(USE_GNUTLS) || defined(USE_SCHANNEL) || \
- defined(USE_DARWINSSL) || defined(USE_POLARSSL) || defined(USE_NSS)
-/* This function is for OpenSSL, GnuTLS, darwinssl, schannel and polarssl only.
- It should be made to query the generic SSL layer instead. */
-static int https_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- if(conn->handler->flags & PROTOPT_SSL) {
- struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];
-
- if(!numsocks)
- return GETSOCK_BLANK;
-
- if(connssl->connecting_state == ssl_connect_2_writing) {
- /* write mode */
- socks[0] = conn->sock[FIRSTSOCKET];
- return GETSOCK_WRITESOCK(0);
- }
- else if(connssl->connecting_state == ssl_connect_2_reading) {
- /* read mode */
- socks[0] = conn->sock[FIRSTSOCKET];
- return GETSOCK_READSOCK(0);
- }
- }
- return CURLE_OK;
-}
-#else
-#ifdef USE_SSL
-static int https_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- (void)conn;
- (void)socks;
- (void)numsocks;
- return GETSOCK_BLANK;
-}
-#endif /* USE_SSL */
-#endif /* USE_SSLEAY || USE_GNUTLS || USE_SCHANNEL */
-
-/*
- * Curl_http_done() gets called from Curl_done() after a single HTTP request
- * has been performed.
- */
-
-CURLcode Curl_http_done(struct connectdata *conn,
- CURLcode status, bool premature)
-{
- struct SessionHandle *data = conn->data;
- struct HTTP *http =data->req.protop;
-
- Curl_unencode_cleanup(conn);
-
-#ifdef USE_SPNEGO
- if(data->state.proxyneg.state == GSS_AUTHSENT ||
- data->state.negotiate.state == GSS_AUTHSENT)
- Curl_cleanup_negotiate(data);
-#endif
-
- /* set the proper values (possibly modified on POST) */
- conn->fread_func = data->set.fread_func; /* restore */
- conn->fread_in = data->set.in; /* restore */
- conn->seek_func = data->set.seek_func; /* restore */
- conn->seek_client = data->set.seek_client; /* restore */
-
- if(http == NULL)
- return CURLE_OK;
-
- if(http->send_buffer) {
- Curl_send_buffer *buff = http->send_buffer;
-
- free(buff->buffer);
- free(buff);
- http->send_buffer = NULL; /* clear the pointer */
- }
-
- if(HTTPREQ_POST_FORM == data->set.httpreq) {
- data->req.bytecount = http->readbytecount + http->writebytecount;
-
- Curl_formclean(&http->sendit); /* Now free that whole lot */
- if(http->form.fp) {
- /* a file being uploaded was left opened, close it! */
- fclose(http->form.fp);
- http->form.fp = NULL;
- }
- }
- else if(HTTPREQ_PUT == data->set.httpreq)
- data->req.bytecount = http->readbytecount + http->writebytecount;
-
- if(status != CURLE_OK)
- return (status);
-
- if(!premature && /* this check is pointless when DONE is called before the
- entire operation is complete */
- !conn->bits.retry &&
- !data->set.connect_only &&
- ((http->readbytecount +
- data->req.headerbytecount -
- data->req.deductheadercount)) <= 0) {
- /* If this connection isn't simply closed to be retried, AND nothing was
- read from the HTTP server (that counts), this can't be right so we
- return an error here */
- failf(data, "Empty reply from server");
- return CURLE_GOT_NOTHING;
- }
-
- return CURLE_OK;
-}
-
-
-/*
- * Determine if we should use HTTP 1.1 (OR BETTER) for this request. Reasons
- * to avoid it include:
- *
- * - if the user specifically requested HTTP 1.0
- * - if the server we are connected to only supports 1.0
- * - if any server previously contacted to handle this request only supports
- * 1.0.
- */
-static bool use_http_1_1plus(const struct SessionHandle *data,
- const struct connectdata *conn)
-{
- return ((data->set.httpversion >= CURL_HTTP_VERSION_1_1) ||
- ((data->set.httpversion != CURL_HTTP_VERSION_1_0) &&
- ((conn->httpversion == 11) ||
- ((conn->httpversion != 10) &&
- (data->state.httpversion != 10))))) ? TRUE : FALSE;
-}
-
-/* check and possibly add an Expect: header */
-static CURLcode expect100(struct SessionHandle *data,
- struct connectdata *conn,
- Curl_send_buffer *req_buffer)
-{
- CURLcode result = CURLE_OK;
- const char *ptr;
- data->state.expect100header = FALSE; /* default to false unless it is set
- to TRUE below */
- if(use_http_1_1plus(data, conn)) {
- /* if not doing HTTP 1.0 or disabled explicitly, we add a Expect:
- 100-continue to the headers which actually speeds up post operations
- (as there is one packet coming back from the web server) */
- ptr = Curl_checkheaders(conn, "Expect:");
- if(ptr) {
- data->state.expect100header =
- Curl_compareheader(ptr, "Expect:", "100-continue");
- }
- else {
- result = Curl_add_bufferf(req_buffer,
- "Expect: 100-continue\r\n");
- if(result == CURLE_OK)
- data->state.expect100header = TRUE;
- }
- }
- return result;
-}
-
-enum proxy_use {
- HEADER_SERVER, /* direct to server */
- HEADER_PROXY, /* regular request to proxy */
- HEADER_CONNECT /* sending CONNECT to a proxy */
-};
-
-CURLcode Curl_add_custom_headers(struct connectdata *conn,
- bool is_connect,
- Curl_send_buffer *req_buffer)
-{
- char *ptr;
- struct curl_slist *h[2];
- struct curl_slist *headers;
- int numlists=1; /* by default */
- struct SessionHandle *data = conn->data;
- int i;
-
- enum proxy_use proxy;
-
- if(is_connect)
- proxy = HEADER_CONNECT;
- else
- proxy = conn->bits.httpproxy && !conn->bits.tunnel_proxy?
- HEADER_PROXY:HEADER_SERVER;
-
- switch(proxy) {
- case HEADER_SERVER:
- h[0] = data->set.headers;
- break;
- case HEADER_PROXY:
- h[0] = data->set.headers;
- if(data->set.sep_headers) {
- h[1] = data->set.proxyheaders;
- numlists++;
- }
- break;
- case HEADER_CONNECT:
- if(data->set.sep_headers)
- h[0] = data->set.proxyheaders;
- else
- h[0] = data->set.headers;
- break;
- }
-
- /* loop through one or two lists */
- for(i=0; i < numlists; i++) {
- headers = h[i];
-
- while(headers) {
- ptr = strchr(headers->data, ':');
- if(ptr) {
- /* we require a colon for this to be a true header */
-
- ptr++; /* pass the colon */
- while(*ptr && ISSPACE(*ptr))
- ptr++;
-
- if(*ptr) {
- /* only send this if the contents was non-blank */
-
- if(conn->allocptr.host &&
- /* a Host: header was sent already, don't pass on any custom Host:
- header as that will produce *two* in the same request! */
- checkprefix("Host:", headers->data))
- ;
- else if(data->set.httpreq == HTTPREQ_POST_FORM &&
- /* this header (extended by formdata.c) is sent later */
- checkprefix("Content-Type:", headers->data))
- ;
- else if(conn->bits.authneg &&
- /* while doing auth neg, don't allow the custom length since
- we will force length zero then */
- checkprefix("Content-Length", headers->data))
- ;
- else if(conn->allocptr.te &&
- /* when asking for Transfer-Encoding, don't pass on a custom
- Connection: */
- checkprefix("Connection", headers->data))
- ;
- else {
- CURLcode result = Curl_add_bufferf(req_buffer, "%s\r\n",
- headers->data);
- if(result)
- return result;
- }
- }
- }
- else {
- ptr = strchr(headers->data, ';');
- if(ptr) {
-
- ptr++; /* pass the semicolon */
- while(*ptr && ISSPACE(*ptr))
- ptr++;
-
- if(*ptr) {
- /* this may be used for something else in the future */
- }
- else {
- if(*(--ptr) == ';') {
- CURLcode result;
-
- /* send no-value custom header if terminated by semicolon */
- *ptr = ':';
- result = Curl_add_bufferf(req_buffer, "%s\r\n",
- headers->data);
- if(result)
- return result;
- }
- }
- }
- }
- headers = headers->next;
- }
- }
- return CURLE_OK;
-}
-
-CURLcode Curl_add_timecondition(struct SessionHandle *data,
- Curl_send_buffer *req_buffer)
-{
- const struct tm *tm;
- char *buf = data->state.buffer;
- CURLcode result = CURLE_OK;
- struct tm keeptime;
-
- result = Curl_gmtime(data->set.timevalue, &keeptime);
- if(result) {
- failf(data, "Invalid TIMEVALUE");
- return result;
- }
- tm = &keeptime;
-
- /* The If-Modified-Since header family should have their times set in
- * GMT as RFC2616 defines: "All HTTP date/time stamps MUST be
- * represented in Greenwich Mean Time (GMT), without exception. For the
- * purposes of HTTP, GMT is exactly equal to UTC (Coordinated Universal
- * Time)." (see page 20 of RFC2616).
- */
-
- /* format: "Tue, 15 Nov 1994 12:45:26 GMT" */
- snprintf(buf, BUFSIZE-1,
- "%s, %02d %s %4d %02d:%02d:%02d GMT",
- Curl_wkday[tm->tm_wday?tm->tm_wday-1:6],
- tm->tm_mday,
- Curl_month[tm->tm_mon],
- tm->tm_year + 1900,
- tm->tm_hour,
- tm->tm_min,
- tm->tm_sec);
-
- switch(data->set.timecondition) {
- case CURL_TIMECOND_IFMODSINCE:
- default:
- result = Curl_add_bufferf(req_buffer,
- "If-Modified-Since: %s\r\n", buf);
- break;
- case CURL_TIMECOND_IFUNMODSINCE:
- result = Curl_add_bufferf(req_buffer,
- "If-Unmodified-Since: %s\r\n", buf);
- break;
- case CURL_TIMECOND_LASTMOD:
- result = Curl_add_bufferf(req_buffer,
- "Last-Modified: %s\r\n", buf);
- break;
- }
-
- return result;
-}
-
-/*
- * Curl_http() gets called from the generic Curl_do() function when a HTTP
- * request is to be performed. This creates and sends a properly constructed
- * HTTP request.
- */
-CURLcode Curl_http(struct connectdata *conn, bool *done)
-{
- struct SessionHandle *data=conn->data;
- CURLcode result=CURLE_OK;
- struct HTTP *http;
- const char *ppath = data->state.path;
- bool paste_ftp_userpwd = FALSE;
- char ftp_typecode[sizeof("/;type=?")] = "";
- const char *host = conn->host.name;
- const char *te = ""; /* transfer-encoding */
- const char *ptr;
- const char *request;
- Curl_HttpReq httpreq = data->set.httpreq;
- char *addcookies = NULL;
- curl_off_t included_body = 0;
- const char *httpstring;
- Curl_send_buffer *req_buffer;
- curl_off_t postsize = 0; /* curl_off_t to handle large file sizes */
- int seekerr = CURL_SEEKFUNC_OK;
-
- /* Always consider the DO phase done after this function call, even if there
- may be parts of the request that is not yet sent, since we can deal with
- the rest of the request in the PERFORM phase. */
- *done = TRUE;
-
- if(conn->httpversion < 20) { /* unless the connection is re-used and already
- http2 */
- switch (conn->negnpn) {
- case NPN_HTTP2:
- result = Curl_http2_init(conn);
- if(result)
- return result;
-
- result = Curl_http2_setup(conn);
- if(result)
- return result;
-
- result = Curl_http2_switched(conn);
- if(result)
- return result;
- break;
- case NPN_HTTP1_1:
- /* continue with HTTP/1.1 when explicitly requested */
- break;
- default:
- /* and as fallback */
- break;
- }
- }
- else {
- /* prepare for a http2 request */
- result = Curl_http2_setup(conn);
- if(result)
- return result;
- }
-
- http = data->req.protop;
-
- if(!data->state.this_is_a_follow) {
- /* this is not a followed location, get the original host name */
- if(data->state.first_host)
- /* Free to avoid leaking memory on multiple requests*/
- free(data->state.first_host);
-
- data->state.first_host = strdup(conn->host.name);
- if(!data->state.first_host)
- return CURLE_OUT_OF_MEMORY;
- }
- http->writebytecount = http->readbytecount = 0;
-
- if((conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_FTP)) &&
- data->set.upload) {
- httpreq = HTTPREQ_PUT;
- }
-
- /* Now set the 'request' pointer to the proper request string */
- if(data->set.str[STRING_CUSTOMREQUEST])
- request = data->set.str[STRING_CUSTOMREQUEST];
- else {
- if(data->set.opt_no_body)
- request = "HEAD";
- else {
- DEBUGASSERT((httpreq > HTTPREQ_NONE) && (httpreq < HTTPREQ_LAST));
- switch(httpreq) {
- case HTTPREQ_POST:
- case HTTPREQ_POST_FORM:
- request = "POST";
- break;
- case HTTPREQ_PUT:
- request = "PUT";
- break;
- default: /* this should never happen */
- case HTTPREQ_GET:
- request = "GET";
- break;
- case HTTPREQ_HEAD:
- request = "HEAD";
- break;
- }
- }
- }
-
- /* The User-Agent string might have been allocated in url.c already, because
- it might have been used in the proxy connect, but if we have got a header
- with the user-agent string specified, we erase the previously made string
- here. */
- if(Curl_checkheaders(conn, "User-Agent:") && conn->allocptr.uagent) {
- free(conn->allocptr.uagent);
- conn->allocptr.uagent=NULL;
- }
-
- /* setup the authentication headers */
- result = Curl_http_output_auth(conn, request, ppath, FALSE);
- if(result)
- return result;
-
- if((data->state.authhost.multi || data->state.authproxy.multi) &&
- (httpreq != HTTPREQ_GET) &&
- (httpreq != HTTPREQ_HEAD)) {
- /* Auth is required and we are not authenticated yet. Make a PUT or POST
- with content-length zero as a "probe". */
- conn->bits.authneg = TRUE;
- }
- else
- conn->bits.authneg = FALSE;
-
- Curl_safefree(conn->allocptr.ref);
- if(data->change.referer && !Curl_checkheaders(conn, "Referer:")) {
- conn->allocptr.ref = aprintf("Referer: %s\r\n", data->change.referer);
- if(!conn->allocptr.ref)
- return CURLE_OUT_OF_MEMORY;
- }
- else
- conn->allocptr.ref = NULL;
-
- if(data->set.str[STRING_COOKIE] && !Curl_checkheaders(conn, "Cookie:"))
- addcookies = data->set.str[STRING_COOKIE];
-
- if(!Curl_checkheaders(conn, "Accept-Encoding:") &&
- data->set.str[STRING_ENCODING]) {
- Curl_safefree(conn->allocptr.accept_encoding);
- conn->allocptr.accept_encoding =
- aprintf("Accept-Encoding: %s\r\n", data->set.str[STRING_ENCODING]);
- if(!conn->allocptr.accept_encoding)
- return CURLE_OUT_OF_MEMORY;
- }
-
-#ifdef HAVE_LIBZ
- /* we only consider transfer-encoding magic if libz support is built-in */
-
- if(!Curl_checkheaders(conn, "TE:") &&
- data->set.http_transfer_encoding) {
- /* When we are to insert a TE: header in the request, we must also insert
- TE in a Connection: header, so we need to merge the custom provided
- Connection: header and prevent the original to get sent. Note that if
- the user has inserted his/hers own TE: header we don't do this magic
- but then assume that the user will handle it all! */
- char *cptr = Curl_checkheaders(conn, "Connection:");
-#define TE_HEADER "TE: gzip\r\n"
-
- Curl_safefree(conn->allocptr.te);
-
- /* Create the (updated) Connection: header */
- conn->allocptr.te = cptr? aprintf("%s, TE\r\n" TE_HEADER, cptr):
- strdup("Connection: TE\r\n" TE_HEADER);
-
- if(!conn->allocptr.te)
- return CURLE_OUT_OF_MEMORY;
- }
-#endif
-
- if(conn->httpversion == 20)
- /* In HTTP2 forbids Transfer-Encoding: chunked */
- ptr = NULL;
- else {
- ptr = Curl_checkheaders(conn, "Transfer-Encoding:");
- if(ptr) {
- /* Some kind of TE is requested, check if 'chunked' is chosen */
- data->req.upload_chunky =
- Curl_compareheader(ptr, "Transfer-Encoding:", "chunked");
- }
- else {
- if((conn->handler->protocol&PROTO_FAMILY_HTTP) &&
- data->set.upload &&
- (data->state.infilesize == -1)) {
- if(conn->bits.authneg)
- /* don't enable chunked during auth neg */
- ;
- else if(use_http_1_1plus(data, conn)) {
- /* HTTP, upload, unknown file size and not HTTP 1.0 */
- data->req.upload_chunky = TRUE;
- }
- else {
- failf(data, "Chunky upload is not supported by HTTP 1.0");
- return CURLE_UPLOAD_FAILED;
- }
- }
- else {
- /* else, no chunky upload */
- data->req.upload_chunky = FALSE;
- }
-
- if(data->req.upload_chunky)
- te = "Transfer-Encoding: chunked\r\n";
- }
- }
-
- Curl_safefree(conn->allocptr.host);
-
- ptr = Curl_checkheaders(conn, "Host:");
- if(ptr && (!data->state.this_is_a_follow ||
- Curl_raw_equal(data->state.first_host, conn->host.name))) {
-#if !defined(CURL_DISABLE_COOKIES)
- /* If we have a given custom Host: header, we extract the host name in
- order to possibly use it for cookie reasons later on. We only allow the
- custom Host: header if this is NOT a redirect, as setting Host: in the
- redirected request is being out on thin ice. Except if the host name
- is the same as the first one! */
- char *cookiehost = Curl_copy_header_value(ptr);
- if(!cookiehost)
- return CURLE_OUT_OF_MEMORY;
- if(!*cookiehost)
- /* ignore empty data */
- free(cookiehost);
- else {
- /* If the host begins with '[', we start searching for the port after
- the bracket has been closed */
- int startsearch = 0;
- if(*cookiehost == '[') {
- char *closingbracket;
- /* since the 'cookiehost' is an allocated memory area that will be
- freed later we cannot simply increment the pointer */
- memmove(cookiehost, cookiehost + 1, strlen(cookiehost) - 1);
- closingbracket = strchr(cookiehost, ']');
- if(closingbracket)
- *closingbracket = 0;
- }
- else {
- char *colon = strchr(cookiehost + startsearch, ':');
- if(colon)
- *colon = 0; /* The host must not include an embedded port number */
- }
- Curl_safefree(conn->allocptr.cookiehost);
- conn->allocptr.cookiehost = cookiehost;
- }
-#endif
-
- conn->allocptr.host = NULL;
- }
- else {
- /* When building Host: headers, we must put the host name within
- [brackets] if the host name is a plain IPv6-address. RFC2732-style. */
-
- if(((conn->given->protocol&CURLPROTO_HTTPS) &&
- (conn->remote_port == PORT_HTTPS)) ||
- ((conn->given->protocol&CURLPROTO_HTTP) &&
- (conn->remote_port == PORT_HTTP)) )
- /* if(HTTPS on port 443) OR (HTTP on port 80) then don't include
- the port number in the host string */
- conn->allocptr.host = aprintf("Host: %s%s%s\r\n",
- conn->bits.ipv6_ip?"[":"",
- host,
- conn->bits.ipv6_ip?"]":"");
- else
- conn->allocptr.host = aprintf("Host: %s%s%s:%hu\r\n",
- conn->bits.ipv6_ip?"[":"",
- host,
- conn->bits.ipv6_ip?"]":"",
- conn->remote_port);
-
- if(!conn->allocptr.host)
- /* without Host: we can't make a nice request */
- return CURLE_OUT_OF_MEMORY;
- }
-
-#ifndef CURL_DISABLE_PROXY
- if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) {
- /* Using a proxy but does not tunnel through it */
-
- /* The path sent to the proxy is in fact the entire URL. But if the remote
- host is a IDN-name, we must make sure that the request we produce only
- uses the encoded host name! */
- if(conn->host.dispname != conn->host.name) {
- char *url = data->change.url;
- ptr = strstr(url, conn->host.dispname);
- if(ptr) {
- /* This is where the display name starts in the URL, now replace this
- part with the encoded name. TODO: This method of replacing the host
- name is rather crude as I believe there's a slight risk that the
- user has entered a user name or password that contain the host name
- string. */
- size_t currlen = strlen(conn->host.dispname);
- size_t newlen = strlen(conn->host.name);
- size_t urllen = strlen(url);
-
- char *newurl;
-
- newurl = malloc(urllen + newlen - currlen + 1);
- if(newurl) {
- /* copy the part before the host name */
- memcpy(newurl, url, ptr - url);
- /* append the new host name instead of the old */
- memcpy(newurl + (ptr - url), conn->host.name, newlen);
- /* append the piece after the host name */
- memcpy(newurl + newlen + (ptr - url),
- ptr + currlen, /* copy the trailing zero byte too */
- urllen - (ptr-url) - currlen + 1);
- if(data->change.url_alloc) {
- Curl_safefree(data->change.url);
- data->change.url_alloc = FALSE;
- }
- data->change.url = newurl;
- data->change.url_alloc = TRUE;
- }
- else
- return CURLE_OUT_OF_MEMORY;
- }
- }
- ppath = data->change.url;
- if(checkprefix("ftp://", ppath)) {
- if(data->set.proxy_transfer_mode) {
- /* when doing ftp, append ;type=<a|i> if not present */
- char *type = strstr(ppath, ";type=");
- if(type && type[6] && type[7] == 0) {
- switch (Curl_raw_toupper(type[6])) {
- case 'A':
- case 'D':
- case 'I':
- break;
- default:
- type = NULL;
- }
- }
- if(!type) {
- char *p = ftp_typecode;
- /* avoid sending invalid URLs like ftp://example.com;type=i if the
- * user specified ftp://example.com without the slash */
- if(!*data->state.path && ppath[strlen(ppath) - 1] != '/') {
- *p++ = '/';
- }
- snprintf(p, sizeof(ftp_typecode) - 1, ";type=%c",
- data->set.prefer_ascii ? 'a' : 'i');
- }
- }
- if(conn->bits.user_passwd && !conn->bits.userpwd_in_url)
- paste_ftp_userpwd = TRUE;
- }
- }
-#endif /* CURL_DISABLE_PROXY */
-
- if(HTTPREQ_POST_FORM == httpreq) {
- /* we must build the whole post sequence first, so that we have a size of
- the whole transfer before we start to send it */
- result = Curl_getformdata(data, &http->sendit, data->set.httppost,
- Curl_checkheaders(conn, "Content-Type:"),
- &http->postsize);
- if(result)
- return result;
- }
-
- http->p_accept = Curl_checkheaders(conn, "Accept:")?NULL:"Accept: */*\r\n";
-
- if(( (HTTPREQ_POST == httpreq) ||
- (HTTPREQ_POST_FORM == httpreq) ||
- (HTTPREQ_PUT == httpreq) ) &&
- data->state.resume_from) {
- /**********************************************************************
- * Resuming upload in HTTP means that we PUT or POST and that we have
- * got a resume_from value set. The resume value has already created
- * a Range: header that will be passed along. We need to "fast forward"
- * the file the given number of bytes and decrease the assume upload
- * file size before we continue this venture in the dark lands of HTTP.
- *********************************************************************/
-
- if(data->state.resume_from < 0 ) {
- /*
- * This is meant to get the size of the present remote-file by itself.
- * We don't support this now. Bail out!
- */
- data->state.resume_from = 0;
- }
-
- if(data->state.resume_from && !data->state.this_is_a_follow) {
- /* do we still game? */
-
- /* Now, let's read off the proper amount of bytes from the
- input. */
- if(conn->seek_func) {
- seekerr = conn->seek_func(conn->seek_client, data->state.resume_from,
- SEEK_SET);
- }
-
- if(seekerr != CURL_SEEKFUNC_OK) {
- if(seekerr != CURL_SEEKFUNC_CANTSEEK) {
- failf(data, "Could not seek stream");
- return CURLE_READ_ERROR;
- }
- /* when seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */
- else {
- curl_off_t passed=0;
- do {
- size_t readthisamountnow =
- (data->state.resume_from - passed > CURL_OFF_T_C(BUFSIZE)) ?
- BUFSIZE : curlx_sotouz(data->state.resume_from - passed);
-
- size_t actuallyread =
- data->set.fread_func(data->state.buffer, 1, readthisamountnow,
- data->set.in);
-
- passed += actuallyread;
- if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
- /* this checks for greater-than only to make sure that the
- CURL_READFUNC_ABORT return code still aborts */
- failf(data, "Could only read %" CURL_FORMAT_CURL_OFF_T
- " bytes from the input", passed);
- return CURLE_READ_ERROR;
- }
- } while(passed < data->state.resume_from);
- }
- }
-
- /* now, decrease the size of the read */
- if(data->state.infilesize>0) {
- data->state.infilesize -= data->state.resume_from;
-
- if(data->state.infilesize <= 0) {
- failf(data, "File already completely uploaded");
- return CURLE_PARTIAL_FILE;
- }
- }
- /* we've passed, proceed as normal */
- }
- }
- if(data->state.use_range) {
- /*
- * A range is selected. We use different headers whether we're downloading
- * or uploading and we always let customized headers override our internal
- * ones if any such are specified.
- */
- if(((httpreq == HTTPREQ_GET) || (httpreq == HTTPREQ_HEAD)) &&
- !Curl_checkheaders(conn, "Range:")) {
- /* if a line like this was already allocated, free the previous one */
- if(conn->allocptr.rangeline)
- free(conn->allocptr.rangeline);
- conn->allocptr.rangeline = aprintf("Range: bytes=%s\r\n",
- data->state.range);
- }
- else if((httpreq != HTTPREQ_GET) &&
- !Curl_checkheaders(conn, "Content-Range:")) {
-
- /* if a line like this was already allocated, free the previous one */
- if(conn->allocptr.rangeline)
- free(conn->allocptr.rangeline);
-
- if(data->set.set_resume_from < 0) {
- /* Upload resume was asked for, but we don't know the size of the
- remote part so we tell the server (and act accordingly) that we
- upload the whole file (again) */
- conn->allocptr.rangeline =
- aprintf("Content-Range: bytes 0-%" CURL_FORMAT_CURL_OFF_T
- "/%" CURL_FORMAT_CURL_OFF_T "\r\n",
- data->state.infilesize - 1, data->state.infilesize);
-
- }
- else if(data->state.resume_from) {
- /* This is because "resume" was selected */
- curl_off_t total_expected_size=
- data->state.resume_from + data->state.infilesize;
- conn->allocptr.rangeline =
- aprintf("Content-Range: bytes %s%" CURL_FORMAT_CURL_OFF_T
- "/%" CURL_FORMAT_CURL_OFF_T "\r\n",
- data->state.range, total_expected_size-1,
- total_expected_size);
- }
- else {
- /* Range was selected and then we just pass the incoming range and
- append total size */
- conn->allocptr.rangeline =
- aprintf("Content-Range: bytes %s/%" CURL_FORMAT_CURL_OFF_T "\r\n",
- data->state.range, data->state.infilesize);
- }
- if(!conn->allocptr.rangeline)
- return CURLE_OUT_OF_MEMORY;
- }
- }
-
- /* Use 1.1 unless the user specifically asked for 1.0 or the server only
- supports 1.0 */
- httpstring= use_http_1_1plus(data, conn)?"1.1":"1.0";
-
- /* initialize a dynamic send-buffer */
- req_buffer = Curl_add_buffer_init();
-
- if(!req_buffer)
- return CURLE_OUT_OF_MEMORY;
-
- /* add the main request stuff */
- /* GET/HEAD/POST/PUT */
- result = Curl_add_bufferf(req_buffer, "%s ", request);
- if(result)
- return result;
-
- /* url */
- if(paste_ftp_userpwd)
- result = Curl_add_bufferf(req_buffer, "ftp://%s:%s@%s",
- conn->user, conn->passwd,
- ppath + sizeof("ftp://") - 1);
- else
- result = Curl_add_buffer(req_buffer, ppath, strlen(ppath));
- if(result)
- return result;
-
- result =
- Curl_add_bufferf(req_buffer,
- "%s" /* ftp typecode (;type=x) */
- " HTTP/%s\r\n" /* HTTP version */
- "%s" /* proxyuserpwd */
- "%s" /* userpwd */
- "%s" /* range */
- "%s" /* user agent */
- "%s" /* host */
- "%s" /* accept */
- "%s" /* TE: */
- "%s" /* accept-encoding */
- "%s" /* referer */
- "%s" /* Proxy-Connection */
- "%s",/* transfer-encoding */
-
- ftp_typecode,
- httpstring,
- conn->allocptr.proxyuserpwd?
- conn->allocptr.proxyuserpwd:"",
- conn->allocptr.userpwd?conn->allocptr.userpwd:"",
- (data->state.use_range && conn->allocptr.rangeline)?
- conn->allocptr.rangeline:"",
- (data->set.str[STRING_USERAGENT] &&
- *data->set.str[STRING_USERAGENT] &&
- conn->allocptr.uagent)?
- conn->allocptr.uagent:"",
- (conn->allocptr.host?conn->allocptr.host:""),
- http->p_accept?http->p_accept:"",
- conn->allocptr.te?conn->allocptr.te:"",
- (data->set.str[STRING_ENCODING] &&
- *data->set.str[STRING_ENCODING] &&
- conn->allocptr.accept_encoding)?
- conn->allocptr.accept_encoding:"",
- (data->change.referer && conn->allocptr.ref)?
- conn->allocptr.ref:"" /* Referer: <data> */,
- (conn->bits.httpproxy &&
- !conn->bits.tunnel_proxy &&
- !Curl_checkProxyheaders(conn, "Proxy-Connection:"))?
- "Proxy-Connection: Keep-Alive\r\n":"",
- te
- );
-
- /*
- * Free userpwd now --- cannot reuse this for Negotiate and possibly NTLM
- * with basic and digest, it will be freed anyway by the next request
- */
-
- Curl_safefree (conn->allocptr.userpwd);
- conn->allocptr.userpwd = NULL;
-
- if(result)
- return result;
-
- if(!(conn->handler->flags&PROTOPT_SSL) &&
- (data->set.httpversion == CURL_HTTP_VERSION_2_0)) {
- /* append HTTP2 upgrade magic stuff to the HTTP request if it isn't done
- over SSL */
- result = Curl_http2_request_upgrade(req_buffer, conn);
- if(result)
- return result;
- }
-
-#if !defined(CURL_DISABLE_COOKIES)
- if(data->cookies || addcookies) {
- struct Cookie *co=NULL; /* no cookies from start */
- int count=0;
-
- if(data->cookies) {
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- co = Curl_cookie_getlist(data->cookies,
- conn->allocptr.cookiehost?
- conn->allocptr.cookiehost:host,
- data->state.path,
- (conn->handler->protocol&CURLPROTO_HTTPS)?
- TRUE:FALSE);
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
- if(co) {
- struct Cookie *store=co;
- /* now loop through all cookies that matched */
- while(co) {
- if(co->value) {
- if(0 == count) {
- result = Curl_add_bufferf(req_buffer, "Cookie: ");
- if(result)
- break;
- }
- result = Curl_add_bufferf(req_buffer,
- "%s%s=%s", count?"; ":"",
- co->name, co->value);
- if(result)
- break;
- count++;
- }
- co = co->next; /* next cookie please */
- }
- Curl_cookie_freelist(store, FALSE); /* free the cookie list */
- }
- if(addcookies && (CURLE_OK == result)) {
- if(!count)
- result = Curl_add_bufferf(req_buffer, "Cookie: ");
- if(CURLE_OK == result) {
- result = Curl_add_bufferf(req_buffer, "%s%s",
- count?"; ":"",
- addcookies);
- count++;
- }
- }
- if(count && (CURLE_OK == result))
- result = Curl_add_buffer(req_buffer, "\r\n", 2);
-
- if(result)
- return result;
- }
-#endif
-
- if(data->set.timecondition) {
- result = Curl_add_timecondition(data, req_buffer);
- if(result)
- return result;
- }
-
- result = Curl_add_custom_headers(conn, FALSE, req_buffer);
- if(result)
- return result;
-
- http->postdata = NULL; /* nothing to post at this point */
- Curl_pgrsSetUploadSize(data, -1); /* upload size is unknown atm */
-
- /* If 'authdone' is FALSE, we must not set the write socket index to the
- Curl_transfer() call below, as we're not ready to actually upload any
- data yet. */
-
- switch(httpreq) {
-
- case HTTPREQ_POST_FORM:
- if(!http->sendit || conn->bits.authneg) {
- /* nothing to post! */
- result = Curl_add_bufferf(req_buffer, "Content-Length: 0\r\n\r\n");
- if(result)
- return result;
-
- result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
- if(result)
- failf(data, "Failed sending POST request");
- else
- /* setup variables for the upcoming transfer */
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
- -1, NULL);
- break;
- }
-
- if(Curl_FormInit(&http->form, http->sendit)) {
- failf(data, "Internal HTTP POST error!");
- return CURLE_HTTP_POST_ERROR;
- }
-
- /* Get the currently set callback function pointer and store that in the
- form struct since we might want the actual user-provided callback later
- on. The conn->fread_func pointer itself will be changed for the
- multipart case to the function that returns a multipart formatted
- stream. */
- http->form.fread_func = conn->fread_func;
-
- /* Set the read function to read from the generated form data */
- conn->fread_func = (curl_read_callback)Curl_FormReader;
- conn->fread_in = &http->form;
-
- http->sending = HTTPSEND_BODY;
-
- if(!data->req.upload_chunky &&
- !Curl_checkheaders(conn, "Content-Length:")) {
- /* only add Content-Length if not uploading chunked */
- result = Curl_add_bufferf(req_buffer,
- "Content-Length: %" CURL_FORMAT_CURL_OFF_T
- "\r\n", http->postsize);
- if(result)
- return result;
- }
-
- result = expect100(data, conn, req_buffer);
- if(result)
- return result;
-
- {
-
- /* Get Content-Type: line from Curl_formpostheader.
- */
- char *contentType;
- size_t linelength=0;
- contentType = Curl_formpostheader((void *)&http->form,
- &linelength);
- if(!contentType) {
- failf(data, "Could not get Content-Type header line!");
- return CURLE_HTTP_POST_ERROR;
- }
-
- result = Curl_add_buffer(req_buffer, contentType, linelength);
- if(result)
- return result;
- }
-
- /* make the request end in a true CRLF */
- result = Curl_add_buffer(req_buffer, "\r\n", 2);
- if(result)
- return result;
-
- /* set upload size to the progress meter */
- Curl_pgrsSetUploadSize(data, http->postsize);
-
- /* fire away the whole request to the server */
- result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
- if(result)
- failf(data, "Failed sending POST request");
- else
- /* setup variables for the upcoming transfer */
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount, FIRSTSOCKET,
- &http->writebytecount);
-
- if(result) {
- Curl_formclean(&http->sendit); /* free that whole lot */
- return result;
- }
-
- /* convert the form data */
- result = Curl_convert_form(data, http->sendit);
- if(result) {
- Curl_formclean(&http->sendit); /* free that whole lot */
- return result;
- }
-
- break;
-
- case HTTPREQ_PUT: /* Let's PUT the data to the server! */
-
- if(conn->bits.authneg)
- postsize = 0;
- else
- postsize = data->state.infilesize;
-
- if((postsize != -1) && !data->req.upload_chunky &&
- !Curl_checkheaders(conn, "Content-Length:")) {
- /* only add Content-Length if not uploading chunked */
- result = Curl_add_bufferf(req_buffer,
- "Content-Length: %" CURL_FORMAT_CURL_OFF_T
- "\r\n", postsize);
- if(result)
- return result;
- }
-
- if(postsize != 0) {
- result = expect100(data, conn, req_buffer);
- if(result)
- return result;
- }
-
- result = Curl_add_buffer(req_buffer, "\r\n", 2); /* end of headers */
- if(result)
- return result;
-
- /* set the upload size to the progress meter */
- Curl_pgrsSetUploadSize(data, postsize);
-
- /* this sends the buffer and frees all the buffer resources */
- result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
- if(result)
- failf(data, "Failed sending PUT request");
- else
- /* prepare for transfer */
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount, postsize?FIRSTSOCKET:-1,
- postsize?&http->writebytecount:NULL);
- if(result)
- return result;
- break;
-
- case HTTPREQ_POST:
- /* this is the simple POST, using x-www-form-urlencoded style */
-
- if(conn->bits.authneg)
- postsize = 0;
- else {
- /* figure out the size of the postfields */
- postsize = (data->set.postfieldsize != -1)?
- data->set.postfieldsize:
- (data->set.postfields? (curl_off_t)strlen(data->set.postfields):-1);
- }
-
- /* We only set Content-Length and allow a custom Content-Length if
- we don't upload data chunked, as RFC2616 forbids us to set both
- kinds of headers (Transfer-Encoding: chunked and Content-Length) */
- if((postsize != -1) && !data->req.upload_chunky &&
- !Curl_checkheaders(conn, "Content-Length:")) {
- /* we allow replacing this header if not during auth negotiation,
- although it isn't very wise to actually set your own */
- result = Curl_add_bufferf(req_buffer,
- "Content-Length: %" CURL_FORMAT_CURL_OFF_T
- "\r\n", postsize);
- if(result)
- return result;
- }
-
- if(!Curl_checkheaders(conn, "Content-Type:")) {
- result = Curl_add_bufferf(req_buffer,
- "Content-Type: application/"
- "x-www-form-urlencoded\r\n");
- if(result)
- return result;
- }
-
- /* For really small posts we don't use Expect: headers at all, and for
- the somewhat bigger ones we allow the app to disable it. Just make
- sure that the expect100header is always set to the preferred value
- here. */
- ptr = Curl_checkheaders(conn, "Expect:");
- if(ptr) {
- data->state.expect100header =
- Curl_compareheader(ptr, "Expect:", "100-continue");
- }
- else if(postsize > TINY_INITIAL_POST_SIZE || postsize < 0) {
- result = expect100(data, conn, req_buffer);
- if(result)
- return result;
- }
- else
- data->state.expect100header = FALSE;
-
- if(data->set.postfields) {
-
- /* In HTTP2, we send request body in DATA frame regardless of
- its size. */
- if(conn->httpversion != 20 &&
- !data->state.expect100header &&
- (postsize < MAX_INITIAL_POST_SIZE)) {
- /* if we don't use expect: 100 AND
- postsize is less than MAX_INITIAL_POST_SIZE
-
- then append the post data to the HTTP request header. This limit
- is no magic limit but only set to prevent really huge POSTs to
- get the data duplicated with malloc() and family. */
-
- result = Curl_add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
- if(result)
- return result;
-
- if(!data->req.upload_chunky) {
- /* We're not sending it 'chunked', append it to the request
- already now to reduce the number if send() calls */
- result = Curl_add_buffer(req_buffer, data->set.postfields,
- (size_t)postsize);
- included_body = postsize;
- }
- else {
- if(postsize) {
- /* Append the POST data chunky-style */
- result = Curl_add_bufferf(req_buffer, "%x\r\n", (int)postsize);
- if(CURLE_OK == result) {
- result = Curl_add_buffer(req_buffer, data->set.postfields,
- (size_t)postsize);
- if(CURLE_OK == result)
- result = Curl_add_buffer(req_buffer, "\r\n", 2);
- included_body = postsize + 2;
- }
- }
- if(CURLE_OK == result)
- result = Curl_add_buffer(req_buffer,
- "\x30\x0d\x0a\x0d\x0a", 5);
- /* 0 CR LF CR LF */
- included_body += 5;
- }
- if(result)
- return result;
- /* Make sure the progress information is accurate */
- Curl_pgrsSetUploadSize(data, postsize);
- }
- else {
- /* A huge POST coming up, do data separate from the request */
- http->postsize = postsize;
- http->postdata = data->set.postfields;
-
- http->sending = HTTPSEND_BODY;
-
- conn->fread_func = (curl_read_callback)readmoredata;
- conn->fread_in = (void *)conn;
-
- /* set the upload size to the progress meter */
- Curl_pgrsSetUploadSize(data, http->postsize);
-
- result = Curl_add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
- if(result)
- return result;
- }
- }
- else {
- result = Curl_add_buffer(req_buffer, "\r\n", 2); /* end of headers! */
- if(result)
- return result;
-
- if(data->req.upload_chunky && conn->bits.authneg) {
- /* Chunky upload is selected and we're negotiating auth still, send
- end-of-data only */
- result = Curl_add_buffer(req_buffer,
- "\x30\x0d\x0a\x0d\x0a", 5);
- /* 0 CR LF CR LF */
- if(result)
- return result;
- }
-
- else if(data->set.postfieldsize) {
- /* set the upload size to the progress meter */
- Curl_pgrsSetUploadSize(data, postsize?postsize:-1);
-
- /* set the pointer to mark that we will send the post body using the
- read callback, but only if we're not in authenticate
- negotiation */
- if(!conn->bits.authneg) {
- http->postdata = (char *)&http->postdata;
- http->postsize = postsize;
- }
- }
- }
- /* issue the request */
- result = Curl_add_buffer_send(req_buffer, conn, &data->info.request_size,
- (size_t)included_body, FIRSTSOCKET);
-
- if(result)
- failf(data, "Failed sending HTTP POST request");
- else
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount, http->postdata?FIRSTSOCKET:-1,
- http->postdata?&http->writebytecount:NULL);
- break;
-
- default:
- result = Curl_add_buffer(req_buffer, "\r\n", 2);
- if(result)
- return result;
-
- /* issue the request */
- result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
-
- if(result)
- failf(data, "Failed sending HTTP request");
- else
- /* HTTP GET/HEAD download: */
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
- http->postdata?FIRSTSOCKET:-1,
- http->postdata?&http->writebytecount:NULL);
- }
- if(result)
- return result;
-
- if(http->writebytecount) {
- /* if a request-body has been sent off, we make sure this progress is noted
- properly */
- Curl_pgrsSetUploadCounter(data, http->writebytecount);
- if(Curl_pgrsUpdate(conn))
- result = CURLE_ABORTED_BY_CALLBACK;
-
- if(http->writebytecount >= postsize) {
- /* already sent the entire request body, mark the "upload" as
- complete */
- infof(data, "upload completely sent off: %" CURL_FORMAT_CURL_OFF_T
- " out of %" CURL_FORMAT_CURL_OFF_T " bytes\n",
- http->writebytecount, postsize);
- data->req.upload_done = TRUE;
- data->req.keepon &= ~KEEP_SEND; /* we're done writing */
- data->req.exp100 = EXP100_SEND_DATA; /* already sent */
- }
- }
-
- return result;
-}
-
-/*
- * checkhttpprefix()
- *
- * Returns TRUE if member of the list matches prefix of string
- */
-static bool
-checkhttpprefix(struct SessionHandle *data,
- const char *s)
-{
- struct curl_slist *head = data->set.http200aliases;
- bool rc = FALSE;
-#ifdef CURL_DOES_CONVERSIONS
- /* convert from the network encoding using a scratch area */
- char *scratch = strdup(s);
- if(NULL == scratch) {
- failf (data, "Failed to allocate memory for conversion!");
- return FALSE; /* can't return CURLE_OUT_OF_MEMORY so return FALSE */
- }
- if(CURLE_OK != Curl_convert_from_network(data, scratch, strlen(s)+1)) {
- /* Curl_convert_from_network calls failf if unsuccessful */
- free(scratch);
- return FALSE; /* can't return CURLE_foobar so return FALSE */
- }
- s = scratch;
-#endif /* CURL_DOES_CONVERSIONS */
-
- while(head) {
- if(checkprefix(head->data, s)) {
- rc = TRUE;
- break;
- }
- head = head->next;
- }
-
- if(!rc && (checkprefix("HTTP/", s)))
- rc = TRUE;
-
-#ifdef CURL_DOES_CONVERSIONS
- free(scratch);
-#endif /* CURL_DOES_CONVERSIONS */
- return rc;
-}
-
-#ifndef CURL_DISABLE_RTSP
-static bool
-checkrtspprefix(struct SessionHandle *data,
- const char *s)
-{
-
-#ifdef CURL_DOES_CONVERSIONS
- /* convert from the network encoding using a scratch area */
- char *scratch = strdup(s);
- if(NULL == scratch) {
- failf (data, "Failed to allocate memory for conversion!");
- return FALSE; /* can't return CURLE_OUT_OF_MEMORY so return FALSE */
- }
- if(CURLE_OK != Curl_convert_from_network(data, scratch, strlen(s)+1)) {
- /* Curl_convert_from_network calls failf if unsuccessful */
- free(scratch);
- return FALSE; /* can't return CURLE_foobar so return FALSE */
- }
- s = scratch;
-#else
- (void)data; /* unused */
-#endif /* CURL_DOES_CONVERSIONS */
- if(checkprefix("RTSP/", s))
- return TRUE;
- else
- return FALSE;
-}
-#endif /* CURL_DISABLE_RTSP */
-
-static bool
-checkprotoprefix(struct SessionHandle *data, struct connectdata *conn,
- const char *s)
-{
-#ifndef CURL_DISABLE_RTSP
- if(conn->handler->protocol & CURLPROTO_RTSP)
- return checkrtspprefix(data, s);
-#else
- (void)conn;
-#endif /* CURL_DISABLE_RTSP */
-
- return checkhttpprefix(data, s);
-}
-
-/*
- * header_append() copies a chunk of data to the end of the already received
- * header. We make sure that the full string fit in the allocated header
- * buffer, or else we enlarge it.
- */
-static CURLcode header_append(struct SessionHandle *data,
- struct SingleRequest *k,
- size_t length)
-{
- if(k->hbuflen + length >= data->state.headersize) {
- /* We enlarge the header buffer as it is too small */
- char *newbuff;
- size_t hbufp_index;
- size_t newsize;
-
- if(k->hbuflen + length > CURL_MAX_HTTP_HEADER) {
- /* The reason to have a max limit for this is to avoid the risk of a bad
- server feeding libcurl with a never-ending header that will cause
- reallocs infinitely */
- failf (data, "Avoided giant realloc for header (max is %d)!",
- CURL_MAX_HTTP_HEADER);
- return CURLE_OUT_OF_MEMORY;
- }
-
- newsize=CURLMAX((k->hbuflen+ length)*3/2, data->state.headersize*2);
- hbufp_index = k->hbufp - data->state.headerbuff;
- newbuff = realloc(data->state.headerbuff, newsize);
- if(!newbuff) {
- failf (data, "Failed to alloc memory for big header!");
- return CURLE_OUT_OF_MEMORY;
- }
- data->state.headersize=newsize;
- data->state.headerbuff = newbuff;
- k->hbufp = data->state.headerbuff + hbufp_index;
- }
- memcpy(k->hbufp, k->str_start, length);
- k->hbufp += length;
- k->hbuflen += length;
- *k->hbufp = 0;
-
- return CURLE_OK;
-}
-
-static void print_http_error(struct SessionHandle *data)
-{
- struct SingleRequest *k = &data->req;
- char *beg = k->p;
-
- /* make sure that data->req.p points to the HTTP status line */
- if(!strncmp(beg, "HTTP", 4)) {
-
- /* skip to HTTP status code */
- beg = strchr(beg, ' ');
- if(beg && *++beg) {
-
- /* find trailing CR */
- char end_char = '\r';
- char *end = strchr(beg, end_char);
- if(!end) {
- /* try to find LF (workaround for non-compliant HTTP servers) */
- end_char = '\n';
- end = strchr(beg, end_char);
- }
-
- if(end) {
- /* temporarily replace CR or LF by NUL and print the error message */
- *end = '\0';
- failf(data, "The requested URL returned error: %s", beg);
-
- /* restore the previously replaced CR or LF */
- *end = end_char;
- return;
- }
- }
- }
-
- /* fall-back to printing the HTTP status code only */
- failf(data, "The requested URL returned error: %d", k->httpcode);
-}
-
-/*
- * Read any HTTP header lines from the server and pass them to the client app.
- */
-CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
- struct connectdata *conn,
- ssize_t *nread,
- bool *stop_reading)
-{
- CURLcode result;
- struct SingleRequest *k = &data->req;
-
- /* header line within buffer loop */
- do {
- size_t rest_length;
- size_t full_length;
- int writetype;
-
- /* str_start is start of line within buf */
- k->str_start = k->str;
-
- /* data is in network encoding so use 0x0a instead of '\n' */
- k->end_ptr = memchr(k->str_start, 0x0a, *nread);
-
- if(!k->end_ptr) {
- /* Not a complete header line within buffer, append the data to
- the end of the headerbuff. */
- result = header_append(data, k, *nread);
- if(result)
- return result;
-
- if(!k->headerline && (k->hbuflen>5)) {
- /* make a first check that this looks like a protocol header */
- if(!checkprotoprefix(data, conn, data->state.headerbuff)) {
- /* this is not the beginning of a protocol first header line */
- k->header = FALSE;
- k->badheader = HEADER_ALLBAD;
- break;
- }
- }
-
- break; /* read more and try again */
- }
-
- /* decrease the size of the remaining (supposed) header line */
- rest_length = (k->end_ptr - k->str)+1;
- *nread -= (ssize_t)rest_length;
-
- k->str = k->end_ptr + 1; /* move past new line */
-
- full_length = k->str - k->str_start;
-
- result = header_append(data, k, full_length);
- if(result)
- return result;
-
- k->end_ptr = k->hbufp;
- k->p = data->state.headerbuff;
-
- /****
- * We now have a FULL header line that p points to
- *****/
-
- if(!k->headerline) {
- /* the first read header */
- if((k->hbuflen>5) &&
- !checkprotoprefix(data, conn, data->state.headerbuff)) {
- /* this is not the beginning of a protocol first header line */
- k->header = FALSE;
- if(*nread)
- /* since there's more, this is a partial bad header */
- k->badheader = HEADER_PARTHEADER;
- else {
- /* this was all we read so it's all a bad header */
- k->badheader = HEADER_ALLBAD;
- *nread = (ssize_t)rest_length;
- }
- break;
- }
- }
-
- /* headers are in network encoding so
- use 0x0a and 0x0d instead of '\n' and '\r' */
- if((0x0a == *k->p) || (0x0d == *k->p)) {
- size_t headerlen;
- /* Zero-length header line means end of headers! */
-
-#ifdef CURL_DOES_CONVERSIONS
- if(0x0d == *k->p) {
- *k->p = '\r'; /* replace with CR in host encoding */
- k->p++; /* pass the CR byte */
- }
- if(0x0a == *k->p) {
- *k->p = '\n'; /* replace with LF in host encoding */
- k->p++; /* pass the LF byte */
- }
-#else
- if('\r' == *k->p)
- k->p++; /* pass the \r byte */
- if('\n' == *k->p)
- k->p++; /* pass the \n byte */
-#endif /* CURL_DOES_CONVERSIONS */
-
- if(100 <= k->httpcode && 199 >= k->httpcode) {
- /*
- * We have made a HTTP PUT or POST and this is 1.1-lingo
- * that tells us that the server is OK with this and ready
- * to receive the data.
- * However, we'll get more headers now so we must get
- * back into the header-parsing state!
- */
- k->header = TRUE;
- k->headerline = 0; /* restart the header line counter */
-
- /* "A user agent MAY ignore unexpected 1xx status responses." */
- switch(k->httpcode) {
- case 100:
- /* if we did wait for this do enable write now! */
- if(k->exp100) {
- k->exp100 = EXP100_SEND_DATA;
- k->keepon |= KEEP_SEND;
- }
- break;
- case 101:
- /* Switching Protocols */
- if(k->upgr101 == UPGR101_REQUESTED) {
- infof(data, "Received 101\n");
- k->upgr101 = UPGR101_RECEIVED;
-
- /* switch to http2 now */
- result = Curl_http2_switched(conn);
- if(result)
- return result;
- }
- break;
- default:
- break;
- }
- }
- else {
- k->header = FALSE; /* no more header to parse! */
-
- if((k->size == -1) && !k->chunk && !conn->bits.close &&
- (conn->httpversion == 11) &&
- !(conn->handler->protocol & CURLPROTO_RTSP) &&
- data->set.httpreq != HTTPREQ_HEAD) {
- /* On HTTP 1.1, when connection is not to get closed, but no
- Content-Length nor Content-Encoding chunked have been
- received, according to RFC2616 section 4.4 point 5, we
- assume that the server will close the connection to
- signal the end of the document. */
- infof(data, "no chunk, no close, no size. Assume close to "
- "signal end\n");
- connclose(conn, "HTTP: No end-of-message indicator");
- }
- }
-
- /*
- * When all the headers have been parsed, see if we should give
- * up and return an error.
- */
- if(http_should_fail(conn)) {
- failf (data, "The requested URL returned error: %d",
- k->httpcode);
- return CURLE_HTTP_RETURNED_ERROR;
- }
-
- /* now, only output this if the header AND body are requested:
- */
- writetype = CLIENTWRITE_HEADER;
- if(data->set.include_header)
- writetype |= CLIENTWRITE_BODY;
-
- headerlen = k->p - data->state.headerbuff;
-
- result = Curl_client_write(conn, writetype,
- data->state.headerbuff,
- headerlen);
- if(result)
- return result;
-
- data->info.header_size += (long)headerlen;
- data->req.headerbytecount += (long)headerlen;
-
- data->req.deductheadercount =
- (100 <= k->httpcode && 199 >= k->httpcode)?data->req.headerbytecount:0;
-
- if(!*stop_reading) {
- /* Curl_http_auth_act() checks what authentication methods
- * that are available and decides which one (if any) to
- * use. It will set 'newurl' if an auth method was picked. */
- result = Curl_http_auth_act(conn);
-
- if(result)
- return result;
-
- if(k->httpcode >= 300) {
- if((!conn->bits.authneg) && !conn->bits.close &&
- !conn->bits.rewindaftersend) {
- /*
- * General treatment of errors when about to send data. Including :
- * "417 Expectation Failed", while waiting for 100-continue.
- *
- * The check for close above is done simply because of something
- * else has already deemed the connection to get closed then
- * something else should've considered the big picture and we
- * avoid this check.
- *
- * rewindaftersend indicates that something has told libcurl to
- * continue sending even if it gets discarded
- */
-
- switch(data->set.httpreq) {
- case HTTPREQ_PUT:
- case HTTPREQ_POST:
- case HTTPREQ_POST_FORM:
- /* We got an error response. If this happened before the whole
- * request body has been sent we stop sending and mark the
- * connection for closure after we've read the entire response.
- */
- if(!k->upload_done) {
- infof(data, "HTTP error before end of send, stop sending\n");
- connclose(conn, "Stop sending data before everything sent");
- k->upload_done = TRUE;
- k->keepon &= ~KEEP_SEND; /* don't send */
- if(data->state.expect100header)
- k->exp100 = EXP100_FAILED;
- }
- break;
-
- default: /* default label present to avoid compiler warnings */
- break;
- }
- }
- }
-
- if(conn->bits.rewindaftersend) {
- /* We rewind after a complete send, so thus we continue
- sending now */
- infof(data, "Keep sending data to get tossed away!\n");
- k->keepon |= KEEP_SEND;
- }
- }
-
- if(!k->header) {
- /*
- * really end-of-headers.
- *
- * If we requested a "no body", this is a good time to get
- * out and return home.
- */
- if(data->set.opt_no_body)
- *stop_reading = TRUE;
- else {
- /* If we know the expected size of this document, we set the
- maximum download size to the size of the expected
- document or else, we won't know when to stop reading!
-
- Note that we set the download maximum even if we read a
- "Connection: close" header, to make sure that
- "Content-Length: 0" still prevents us from attempting to
- read the (missing) response-body.
- */
- /* According to RFC2616 section 4.4, we MUST ignore
- Content-Length: headers if we are now receiving data
- using chunked Transfer-Encoding.
- */
- if(k->chunk)
- k->maxdownload = k->size = -1;
- }
- if(-1 != k->size) {
- /* We do this operation even if no_body is true, since this
- data might be retrieved later with curl_easy_getinfo()
- and its CURLINFO_CONTENT_LENGTH_DOWNLOAD option. */
-
- Curl_pgrsSetDownloadSize(data, k->size);
- k->maxdownload = k->size;
- }
-
- /* If max download size is *zero* (nothing) we already
- have nothing and can safely return ok now! */
- if(0 == k->maxdownload)
- *stop_reading = TRUE;
-
- if(*stop_reading) {
- /* we make sure that this socket isn't read more now */
- k->keepon &= ~KEEP_RECV;
- }
-
- if(data->set.verbose)
- Curl_debug(data, CURLINFO_HEADER_IN,
- k->str_start, headerlen, conn);
- break; /* exit header line loop */
- }
-
- /* We continue reading headers, so reset the line-based
- header parsing variables hbufp && hbuflen */
- k->hbufp = data->state.headerbuff;
- k->hbuflen = 0;
- continue;
- }
-
- /*
- * Checks for special headers coming up.
- */
-
- if(!k->headerline++) {
- /* This is the first header, it MUST be the error code line
- or else we consider this to be the body right away! */
- int httpversion_major;
- int rtspversion_major;
- int nc = 0;
-#ifdef CURL_DOES_CONVERSIONS
-#define HEADER1 scratch
-#define SCRATCHSIZE 21
- CURLcode res;
- char scratch[SCRATCHSIZE+1]; /* "HTTP/major.minor 123" */
- /* We can't really convert this yet because we
- don't know if it's the 1st header line or the body.
- So we do a partial conversion into a scratch area,
- leaving the data at k->p as-is.
- */
- strncpy(&scratch[0], k->p, SCRATCHSIZE);
- scratch[SCRATCHSIZE] = 0; /* null terminate */
- res = Curl_convert_from_network(data,
- &scratch[0],
- SCRATCHSIZE);
- if(res)
- /* Curl_convert_from_network calls failf if unsuccessful */
- return res;
-#else
-#define HEADER1 k->p /* no conversion needed, just use k->p */
-#endif /* CURL_DOES_CONVERSIONS */
-
- if(conn->handler->protocol & PROTO_FAMILY_HTTP) {
- nc = sscanf(HEADER1,
- " HTTP/%d.%d %3d",
- &httpversion_major,
- &conn->httpversion,
- &k->httpcode);
- if(nc==3) {
- conn->httpversion += 10 * httpversion_major;
- }
- else {
- /* this is the real world, not a Nirvana
- NCSA 1.5.x returns this crap when asked for HTTP/1.1
- */
- nc=sscanf(HEADER1, " HTTP %3d", &k->httpcode);
- conn->httpversion = 10;
-
- /* If user has set option HTTP200ALIASES,
- compare header line against list of aliases
- */
- if(!nc) {
- if(checkhttpprefix(data, k->p)) {
- nc = 1;
- k->httpcode = 200;
- conn->httpversion = 10;
- }
- }
- }
- }
- else if(conn->handler->protocol & CURLPROTO_RTSP) {
- nc = sscanf(HEADER1,
- " RTSP/%d.%d %3d",
- &rtspversion_major,
- &conn->rtspversion,
- &k->httpcode);
- if(nc==3) {
- conn->rtspversion += 10 * rtspversion_major;
- conn->httpversion = 11; /* For us, RTSP acts like HTTP 1.1 */
- }
- else {
- /* TODO: do we care about the other cases here? */
- nc = 0;
- }
- }
-
- if(nc) {
- data->info.httpcode = k->httpcode;
-
- data->info.httpversion = conn->httpversion;
- if(!data->state.httpversion ||
- data->state.httpversion > conn->httpversion)
- /* store the lowest server version we encounter */
- data->state.httpversion = conn->httpversion;
-
- /*
- * This code executes as part of processing the header. As a
- * result, it's not totally clear how to interpret the
- * response code yet as that depends on what other headers may
- * be present. 401 and 407 may be errors, but may be OK
- * depending on how authentication is working. Other codes
- * are definitely errors, so give up here.
- */
- if(data->set.http_fail_on_error && (k->httpcode >= 400) &&
- ((k->httpcode != 401) || !conn->bits.user_passwd) &&
- ((k->httpcode != 407) || !conn->bits.proxy_user_passwd) ) {
-
- if(data->state.resume_from &&
- (data->set.httpreq==HTTPREQ_GET) &&
- (k->httpcode == 416)) {
- /* "Requested Range Not Satisfiable", just proceed and
- pretend this is no error */
- }
- else {
- /* serious error, go home! */
- print_http_error(data);
- return CURLE_HTTP_RETURNED_ERROR;
- }
- }
-
- if(conn->httpversion == 10) {
- /* Default action for HTTP/1.0 must be to close, unless
- we get one of those fancy headers that tell us the
- server keeps it open for us! */
- infof(data, "HTTP 1.0, assume close after body\n");
- connclose(conn, "HTTP/1.0 close after body");
- }
- else if(conn->httpversion >= 11 &&
- !conn->bits.close) {
- struct connectbundle *cb_ptr;
-
- /* If HTTP version is >= 1.1 and connection is persistent
- server supports pipelining. */
- DEBUGF(infof(data,
- "HTTP 1.1 or later with persistent connection, "
- "pipelining supported\n"));
- /* Activate pipelining if needed */
- cb_ptr = conn->bundle;
- if(cb_ptr) {
- if(!Curl_pipeline_site_blacklisted(data, conn))
- cb_ptr->server_supports_pipelining = TRUE;
- }
- }
-
- switch(k->httpcode) {
- case 204:
- /* (quote from RFC2616, section 10.2.5): The server has
- * fulfilled the request but does not need to return an
- * entity-body ... The 204 response MUST NOT include a
- * message-body, and thus is always terminated by the first
- * empty line after the header fields. */
- /* FALLTHROUGH */
- case 304:
- /* (quote from RFC2616, section 10.3.5): The 304 response
- * MUST NOT contain a message-body, and thus is always
- * terminated by the first empty line after the header
- * fields. */
- if(data->set.timecondition)
- data->info.timecond = TRUE;
- k->size=0;
- k->maxdownload=0;
- k->ignorecl = TRUE; /* ignore Content-Length headers */
- break;
- default:
- /* nothing */
- break;
- }
- }
- else {
- k->header = FALSE; /* this is not a header line */
- break;
- }
- }
-
- result = Curl_convert_from_network(data, k->p, strlen(k->p));
- /* Curl_convert_from_network calls failf if unsuccessful */
- if(result)
- return result;
-
- /* Check for Content-Length: header lines to get size */
- if(!k->ignorecl && !data->set.ignorecl &&
- checkprefix("Content-Length:", k->p)) {
- curl_off_t contentlength = curlx_strtoofft(k->p+15, NULL, 10);
- if(data->set.max_filesize &&
- contentlength > data->set.max_filesize) {
- failf(data, "Maximum file size exceeded");
- return CURLE_FILESIZE_EXCEEDED;
- }
- if(contentlength >= 0) {
- k->size = contentlength;
- k->maxdownload = k->size;
- /* we set the progress download size already at this point
- just to make it easier for apps/callbacks to extract this
- info as soon as possible */
- Curl_pgrsSetDownloadSize(data, k->size);
- }
- else {
- /* Negative Content-Length is really odd, and we know it
- happens for example when older Apache servers send large
- files */
- connclose(conn, "negative content-length");
- infof(data, "Negative content-length: %" CURL_FORMAT_CURL_OFF_T
- ", closing after transfer\n", contentlength);
- }
- }
- /* check for Content-Type: header lines to get the MIME-type */
- else if(checkprefix("Content-Type:", k->p)) {
- char *contenttype = Curl_copy_header_value(k->p);
- if(!contenttype)
- return CURLE_OUT_OF_MEMORY;
- if(!*contenttype)
- /* ignore empty data */
- free(contenttype);
- else {
- Curl_safefree(data->info.contenttype);
- data->info.contenttype = contenttype;
- }
- }
- else if(checkprefix("Server:", k->p)) {
- char *server_name = Curl_copy_header_value(k->p);
-
- /* Turn off pipelining if the server version is blacklisted */
- if(conn->bundle && conn->bundle->server_supports_pipelining) {
- if(Curl_pipeline_server_blacklisted(data, server_name))
- conn->bundle->server_supports_pipelining = FALSE;
- }
- Curl_safefree(server_name);
- }
- else if((conn->httpversion == 10) &&
- conn->bits.httpproxy &&
- Curl_compareheader(k->p,
- "Proxy-Connection:", "keep-alive")) {
- /*
- * When a HTTP/1.0 reply comes when using a proxy, the
- * 'Proxy-Connection: keep-alive' line tells us the
- * connection will be kept alive for our pleasure.
- * Default action for 1.0 is to close.
- */
- connkeep(conn, "Proxy-Connection keep-alive"); /* don't close */
- infof(data, "HTTP/1.0 proxy connection set to keep alive!\n");
- }
- else if((conn->httpversion == 11) &&
- conn->bits.httpproxy &&
- Curl_compareheader(k->p,
- "Proxy-Connection:", "close")) {
- /*
- * We get a HTTP/1.1 response from a proxy and it says it'll
- * close down after this transfer.
- */
- connclose(conn, "Proxy-Connection: asked to close after done");
- infof(data, "HTTP/1.1 proxy connection set close!\n");
- }
- else if((conn->httpversion == 10) &&
- Curl_compareheader(k->p, "Connection:", "keep-alive")) {
- /*
- * A HTTP/1.0 reply with the 'Connection: keep-alive' line
- * tells us the connection will be kept alive for our
- * pleasure. Default action for 1.0 is to close.
- *
- * [RFC2068, section 19.7.1] */
- connkeep(conn, "Connection keep-alive");
- infof(data, "HTTP/1.0 connection set to keep alive!\n");
- }
- else if(Curl_compareheader(k->p, "Connection:", "close")) {
- /*
- * [RFC 2616, section 8.1.2.1]
- * "Connection: close" is HTTP/1.1 language and means that
- * the connection will close when this request has been
- * served.
- */
- connclose(conn, "Connection: close used");
- }
- else if(checkprefix("Transfer-Encoding:", k->p)) {
- /* One or more encodings. We check for chunked and/or a compression
- algorithm. */
- /*
- * [RFC 2616, section 3.6.1] A 'chunked' transfer encoding
- * means that the server will send a series of "chunks". Each
- * chunk starts with line with info (including size of the
- * coming block) (terminated with CRLF), then a block of data
- * with the previously mentioned size. There can be any amount
- * of chunks, and a chunk-data set to zero signals the
- * end-of-chunks. */
-
- char *start;
-
- /* Find the first non-space letter */
- start = k->p + 18;
-
- for(;;) {
- /* skip whitespaces and commas */
- while(*start && (ISSPACE(*start) || (*start == ',')))
- start++;
-
- if(checkprefix("chunked", start)) {
- k->chunk = TRUE; /* chunks coming our way */
-
- /* init our chunky engine */
- Curl_httpchunk_init(conn);
-
- start += 7;
- }
-
- if(k->auto_decoding)
- /* TODO: we only support the first mentioned compression for now */
- break;
-
- if(checkprefix("identity", start)) {
- k->auto_decoding = IDENTITY;
- start += 8;
- }
- else if(checkprefix("deflate", start)) {
- k->auto_decoding = DEFLATE;
- start += 7;
- }
- else if(checkprefix("gzip", start)) {
- k->auto_decoding = GZIP;
- start += 4;
- }
- else if(checkprefix("x-gzip", start)) {
- k->auto_decoding = GZIP;
- start += 6;
- }
- else if(checkprefix("compress", start)) {
- k->auto_decoding = COMPRESS;
- start += 8;
- }
- else if(checkprefix("x-compress", start)) {
- k->auto_decoding = COMPRESS;
- start += 10;
- }
- else
- /* unknown! */
- break;
-
- }
-
- }
- else if(checkprefix("Content-Encoding:", k->p) &&
- (data->set.str[STRING_ENCODING] ||
- conn->httpversion == 20)) {
- /*
- * Process Content-Encoding. Look for the values: identity,
- * gzip, deflate, compress, x-gzip and x-compress. x-gzip and
- * x-compress are the same as gzip and compress. (Sec 3.5 RFC
- * 2616). zlib cannot handle compress. However, errors are
- * handled further down when the response body is processed
- */
- char *start;
-
- /* Find the first non-space letter */
- start = k->p + 17;
- while(*start && ISSPACE(*start))
- start++;
-
- /* Record the content-encoding for later use */
- if(checkprefix("identity", start))
- k->auto_decoding = IDENTITY;
- else if(checkprefix("deflate", start))
- k->auto_decoding = DEFLATE;
- else if(checkprefix("gzip", start)
- || checkprefix("x-gzip", start))
- k->auto_decoding = GZIP;
- else if(checkprefix("compress", start)
- || checkprefix("x-compress", start))
- k->auto_decoding = COMPRESS;
- }
- else if(checkprefix("Content-Range:", k->p)) {
- /* Content-Range: bytes [num]-
- Content-Range: bytes: [num]-
- Content-Range: [num]-
- Content-Range: [asterisk]/[total]
-
- The second format was added since Sun's webserver
- JavaWebServer/1.1.1 obviously sends the header this way!
- The third added since some servers use that!
- The forth means the requested range was unsatisfied.
- */
-
- char *ptr = k->p + 14;
-
- /* Move forward until first digit or asterisk */
- while(*ptr && !ISDIGIT(*ptr) && *ptr != '*')
- ptr++;
-
- /* if it truly stopped on a digit */
- if(ISDIGIT(*ptr)) {
- k->offset = curlx_strtoofft(ptr, NULL, 10);
-
- if(data->state.resume_from == k->offset)
- /* we asked for a resume and we got it */
- k->content_range = TRUE;
- }
- else
- data->state.resume_from = 0; /* get everything */
- }
-#if !defined(CURL_DISABLE_COOKIES)
- else if(data->cookies &&
- checkprefix("Set-Cookie:", k->p)) {
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE,
- CURL_LOCK_ACCESS_SINGLE);
- Curl_cookie_add(data,
- data->cookies, TRUE, k->p+11,
- /* If there is a custom-set Host: name, use it
- here, or else use real peer host name. */
- conn->allocptr.cookiehost?
- conn->allocptr.cookiehost:conn->host.name,
- data->state.path);
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
-#endif
- else if(checkprefix("Last-Modified:", k->p) &&
- (data->set.timecondition || data->set.get_filetime) ) {
- time_t secs=time(NULL);
- k->timeofdoc = curl_getdate(k->p+strlen("Last-Modified:"),
- &secs);
- if(data->set.get_filetime)
- data->info.filetime = (long)k->timeofdoc;
- }
- else if((checkprefix("WWW-Authenticate:", k->p) &&
- (401 == k->httpcode)) ||
- (checkprefix("Proxy-authenticate:", k->p) &&
- (407 == k->httpcode))) {
-
- bool proxy = (k->httpcode == 407) ? TRUE : FALSE;
- char *auth = Curl_copy_header_value(k->p);
- if(!auth)
- return CURLE_OUT_OF_MEMORY;
-
- result = Curl_http_input_auth(conn, proxy, auth);
-
- Curl_safefree(auth);
-
- if(result)
- return result;
- }
- else if((k->httpcode >= 300 && k->httpcode < 400) &&
- checkprefix("Location:", k->p) &&
- !data->req.location) {
- /* this is the URL that the server advises us to use instead */
- char *location = Curl_copy_header_value(k->p);
- if(!location)
- return CURLE_OUT_OF_MEMORY;
- if(!*location)
- /* ignore empty data */
- free(location);
- else {
- data->req.location = location;
-
- if(data->set.http_follow_location) {
- DEBUGASSERT(!data->req.newurl);
- data->req.newurl = strdup(data->req.location); /* clone */
- if(!data->req.newurl)
- return CURLE_OUT_OF_MEMORY;
-
- /* some cases of POST and PUT etc needs to rewind the data
- stream at this point */
- result = http_perhapsrewind(conn);
- if(result)
- return result;
- }
- }
- }
- else if(conn->handler->protocol & CURLPROTO_RTSP) {
- result = Curl_rtsp_parseheader(conn, k->p);
- if(result)
- return result;
- }
-
- /*
- * End of header-checks. Write them to the client.
- */
-
- writetype = CLIENTWRITE_HEADER;
- if(data->set.include_header)
- writetype |= CLIENTWRITE_BODY;
-
- if(data->set.verbose)
- Curl_debug(data, CURLINFO_HEADER_IN,
- k->p, (size_t)k->hbuflen, conn);
-
- result = Curl_client_write(conn, writetype, k->p, k->hbuflen);
- if(result)
- return result;
-
- data->info.header_size += (long)k->hbuflen;
- data->req.headerbytecount += (long)k->hbuflen;
-
- /* reset hbufp pointer && hbuflen */
- k->hbufp = data->state.headerbuff;
- k->hbuflen = 0;
- }
- while(!*stop_reading && *k->str); /* header line within buffer */
-
- /* We might have reached the end of the header part here, but
- there might be a non-header part left in the end of the read
- buffer. */
-
- return CURLE_OK;
-}
-
-#endif /* CURL_DISABLE_HTTP */
diff --git a/external/libcurl_android/jni/libcurl/lib/http.h b/external/libcurl_android/jni/libcurl/lib/http.h
deleted file mode 100755
index 907755a8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http.h
+++ /dev/null
@@ -1,223 +0,0 @@
-#ifndef HEADER_CURL_HTTP_H
-#define HEADER_CURL_HTTP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_HTTP
-
-#ifdef USE_NGHTTP2
-#include <nghttp2/nghttp2.h>
-#endif
-
-extern const struct Curl_handler Curl_handler_http;
-
-#ifdef USE_SSL
-extern const struct Curl_handler Curl_handler_https;
-#endif
-
-/* Header specific functions */
-bool Curl_compareheader(const char *headerline, /* line to check */
- const char *header, /* header keyword _with_ colon */
- const char *content); /* content string to find */
-
-char *Curl_checkheaders(const struct connectdata *conn,
- const char *thisheader);
-char *Curl_copy_header_value(const char *header);
-
-char *Curl_checkProxyheaders(const struct connectdata *conn,
- const char *thisheader);
-/* ------------------------------------------------------------------------- */
-/*
- * The add_buffer series of functions are used to build one large memory chunk
- * from repeated function invokes. Used so that the entire HTTP request can
- * be sent in one go.
- */
-struct Curl_send_buffer {
- char *buffer;
- size_t size_max;
- size_t size_used;
-};
-typedef struct Curl_send_buffer Curl_send_buffer;
-
-Curl_send_buffer *Curl_add_buffer_init(void);
-CURLcode Curl_add_bufferf(Curl_send_buffer *in, const char *fmt, ...);
-CURLcode Curl_add_buffer(Curl_send_buffer *in, const void *inptr, size_t size);
-CURLcode Curl_add_buffer_send(Curl_send_buffer *in,
- struct connectdata *conn,
- long *bytes_written,
- size_t included_body_bytes,
- int socketindex);
-
-CURLcode Curl_add_timecondition(struct SessionHandle *data,
- Curl_send_buffer *buf);
-CURLcode Curl_add_custom_headers(struct connectdata *conn,
- bool is_connect,
- Curl_send_buffer *req_buffer);
-
-/* protocol-specific functions set up to be called by the main engine */
-CURLcode Curl_http(struct connectdata *conn, bool *done);
-CURLcode Curl_http_done(struct connectdata *, CURLcode, bool premature);
-CURLcode Curl_http_connect(struct connectdata *conn, bool *done);
-CURLcode Curl_http_setup_conn(struct connectdata *conn);
-
-/* The following functions are defined in http_chunks.c */
-void Curl_httpchunk_init(struct connectdata *conn);
-CHUNKcode Curl_httpchunk_read(struct connectdata *conn, char *datap,
- ssize_t length, ssize_t *wrote);
-
-/* These functions are in http.c */
-void Curl_http_auth_stage(struct SessionHandle *data, int stage);
-CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
- const char *auth);
-CURLcode Curl_http_auth_act(struct connectdata *conn);
-CURLcode Curl_http_perhapsrewind(struct connectdata *conn);
-
-/* If only the PICKNONE bit is set, there has been a round-trip and we
- selected to use no auth at all. Ie, we actively select no auth, as opposed
- to not having one selected. The other CURLAUTH_* defines are present in the
- public curl/curl.h header. */
-#define CURLAUTH_PICKNONE (1<<30) /* don't use auth */
-
-/* MAX_INITIAL_POST_SIZE indicates the number of bytes that will make the POST
- data get included in the initial data chunk sent to the server. If the
- data is larger than this, it will automatically get split up in multiple
- system calls.
-
- This value used to be fairly big (100K), but we must take into account that
- if the server rejects the POST due for authentication reasons, this data
- will always be uncondtionally sent and thus it may not be larger than can
- always be afforded to send twice.
-
- It must not be greater than 64K to work on VMS.
-*/
-#ifndef MAX_INITIAL_POST_SIZE
-#define MAX_INITIAL_POST_SIZE (64*1024)
-#endif
-
-#ifndef TINY_INITIAL_POST_SIZE
-#define TINY_INITIAL_POST_SIZE 1024
-#endif
-
-#endif /* CURL_DISABLE_HTTP */
-
-/****************************************************************************
- * HTTP unique setup
- ***************************************************************************/
-struct HTTP {
- struct FormData *sendit;
- curl_off_t postsize; /* off_t to handle large file sizes */
- const char *postdata;
-
- const char *p_pragma; /* Pragma: string */
- const char *p_accept; /* Accept: string */
- curl_off_t readbytecount;
- curl_off_t writebytecount;
-
- /* For FORM posting */
- struct Form form;
-
- struct back {
- curl_read_callback fread_func; /* backup storage for fread pointer */
- void *fread_in; /* backup storage for fread_in pointer */
- const char *postdata;
- curl_off_t postsize;
- } backup;
-
- enum {
- HTTPSEND_NADA, /* init */
- HTTPSEND_REQUEST, /* sending a request */
- HTTPSEND_BODY, /* sending body */
- HTTPSEND_LAST /* never use this */
- } sending;
-
- void *send_buffer; /* used if the request couldn't be sent in one chunk,
- points to an allocated send_buffer struct */
-};
-
-typedef int (*sending)(void); /* Curl_send */
-typedef int (*recving)(void); /* Curl_recv */
-
-struct http_conn {
-#ifdef USE_NGHTTP2
-#define H2_BINSETTINGS_LEN 80
- nghttp2_session *h2;
- uint8_t binsettings[H2_BINSETTINGS_LEN];
- size_t binlen; /* length of the binsettings data */
- char *mem; /* points to a buffer in memory to store */
- size_t len; /* size of the buffer 'mem' points to */
- bool bodystarted;
- sending send_underlying; /* underlying send Curl_send callback */
- recving recv_underlying; /* underlying recv Curl_recv callback */
- bool closed; /* TRUE on HTTP2 stream close */
- Curl_send_buffer *header_recvbuf; /* store response headers. We
- store non-final and final
- response headers into it. */
- size_t nread_header_recvbuf; /* number of bytes in header_recvbuf
- fed into upper layer */
- int32_t stream_id; /* stream we are interested in */
- const uint8_t *data; /* pointer to data chunk, received in
- on_data_chunk */
- size_t datalen; /* the number of bytes left in data */
- char *inbuf; /* buffer to receive data from underlying socket */
- /* We need separate buffer for transmission and reception because we
- may call nghttp2_session_send() after the
- nghttp2_session_mem_recv() but mem buffer is still not full. In
- this case, we wrongly sends the content of mem buffer if we share
- them for both cases. */
- const uint8_t *upload_mem; /* points to a buffer to read from */
- size_t upload_len; /* size of the buffer 'upload_mem' points to */
- size_t upload_left; /* number of bytes left to upload */
- int status_code; /* HTTP status code */
-#else
- int unused; /* prevent a compiler warning */
-#endif
-};
-
-CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
- struct connectdata *conn,
- ssize_t *nread,
- bool *stop_reading);
-
-/**
- * Curl_http_output_auth() setups the authentication headers for the
- * host/proxy and the correct authentication
- * method. conn->data->state.authdone is set to TRUE when authentication is
- * done.
- *
- * @param conn all information about the current connection
- * @param request pointer to the request keyword
- * @param path pointer to the requested path
- * @param proxytunnel boolean if this is the request setting up a "proxy
- * tunnel"
- *
- * @returns CURLcode
- */
-CURLcode
-Curl_http_output_auth(struct connectdata *conn,
- const char *request,
- const char *path,
- bool proxytunnel); /* TRUE if this is the request setting
- up the proxy tunnel */
-
-#endif /* HEADER_CURL_HTTP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/http2.c b/external/libcurl_android/jni/libcurl/lib/http2.c
deleted file mode 100755
index 604514d7..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http2.c
+++ /dev/null
@@ -1,1036 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_NGHTTP2
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
-
-#include <nghttp2/nghttp2.h>
-#include "urldata.h"
-#include "http2.h"
-#include "http.h"
-#include "sendf.h"
-#include "curl_base64.h"
-#include "curl_memory.h"
-#include "rawstr.h"
-#include "multiif.h"
-
-/* include memdebug.h last */
-#include "memdebug.h"
-
-#if (NGHTTP2_VERSION_NUM < 0x000600)
-#error too old nghttp2 version, upgrade!
-#endif
-
-static int http2_perform_getsock(const struct connectdata *conn,
- curl_socket_t *sock, /* points to
- numsocks
- number of
- sockets */
- int numsocks)
-{
- const struct http_conn *httpc = &conn->proto.httpc;
- int bitmap = GETSOCK_BLANK;
- (void)numsocks;
-
- /* TODO We should check underlying socket state if it is SSL socket
- because of renegotiation. */
- sock[0] = conn->sock[FIRSTSOCKET];
-
- if(nghttp2_session_want_read(httpc->h2))
- bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
-
- if(nghttp2_session_want_write(httpc->h2))
- bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET);
-
- return bitmap;
-}
-
-static int http2_getsock(struct connectdata *conn,
- curl_socket_t *sock, /* points to numsocks
- number of sockets */
- int numsocks)
-{
- return http2_perform_getsock(conn, sock, numsocks);
-}
-
-static CURLcode http2_disconnect(struct connectdata *conn,
- bool dead_connection)
-{
- struct http_conn *httpc = &conn->proto.httpc;
- (void)dead_connection;
-
- infof(conn->data, "HTTP/2 DISCONNECT starts now\n");
-
- nghttp2_session_del(httpc->h2);
-
- Curl_safefree(httpc->header_recvbuf->buffer);
- Curl_safefree(httpc->header_recvbuf);
-
- Curl_safefree(httpc->inbuf);
-
- infof(conn->data, "HTTP/2 DISCONNECT done\n");
-
- return CURLE_OK;
-}
-
-/*
- * HTTP2 handler interface. This isn't added to the general list of protocols
- * but will be used at run-time when the protocol is dynamically switched from
- * HTTP to HTTP2.
- */
-const struct Curl_handler Curl_handler_http2 = {
- "HTTP2", /* scheme */
- ZERO_NULL, /* setup_connection */
- Curl_http, /* do_it */
- ZERO_NULL, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- http2_getsock, /* proto_getsock */
- http2_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- http2_perform_getsock, /* perform_getsock */
- http2_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_HTTP, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-const struct Curl_handler Curl_handler_http2_ssl = {
- "HTTP2", /* scheme */
- ZERO_NULL, /* setup_connection */
- Curl_http, /* do_it */
- ZERO_NULL, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- http2_getsock, /* proto_getsock */
- http2_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- http2_perform_getsock, /* perform_getsock */
- http2_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_HTTP, /* defport */
- CURLPROTO_HTTPS, /* protocol */
- PROTOPT_SSL /* flags */
-};
-
-/*
- * Store nghttp2 version info in this buffer, Prefix with a space. Return
- * total length written.
- */
-int Curl_http2_ver(char *p, size_t len)
-{
- nghttp2_info *h2 = nghttp2_version(0);
- return snprintf(p, len, " nghttp2/%s", h2->version_str);
-}
-
-/*
- * The implementation of nghttp2_send_callback type. Here we write |data| with
- * size |length| to the network and return the number of bytes actually
- * written. See the documentation of nghttp2_send_callback for the details.
- */
-static ssize_t send_callback(nghttp2_session *h2,
- const uint8_t *data, size_t length, int flags,
- void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *httpc = &conn->proto.httpc;
- ssize_t written;
- CURLcode rc;
- (void)h2;
- (void)flags;
-
- rc = 0;
- written = ((Curl_send*)httpc->send_underlying)(conn, FIRSTSOCKET,
- data, length, &rc);
-
- if(rc == CURLE_AGAIN) {
- return NGHTTP2_ERR_WOULDBLOCK;
- }
-
- if(written == -1) {
- failf(conn->data, "Failed sending HTTP2 data");
- return NGHTTP2_ERR_CALLBACK_FAILURE;
- }
-
- if(!written)
- return NGHTTP2_ERR_WOULDBLOCK;
-
- return written;
-}
-
-static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
- void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *c = &conn->proto.httpc;
- int rv;
- size_t left, ncopy;
-
- (void)session;
- (void)frame;
- infof(conn->data, "on_frame_recv() was called with header %x\n",
- frame->hd.type);
- switch(frame->hd.type) {
- case NGHTTP2_DATA:
- /* If body started, then receiving DATA is illegal. */
- if(!c->bodystarted) {
- rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
- frame->hd.stream_id,
- NGHTTP2_PROTOCOL_ERROR);
-
- if(nghttp2_is_fatal(rv)) {
- return NGHTTP2_ERR_CALLBACK_FAILURE;
- }
- }
- break;
- case NGHTTP2_HEADERS:
- if(frame->headers.cat == NGHTTP2_HCAT_REQUEST)
- break;
-
- if(c->bodystarted) {
- /* Only valid HEADERS after body started is trailer header,
- which is not fully supported in this code. If HEADERS is not
- trailer, then it is a PROTOCOL_ERROR. */
- if((frame->hd.flags & NGHTTP2_FLAG_END_STREAM) == 0) {
- rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
- frame->hd.stream_id,
- NGHTTP2_PROTOCOL_ERROR);
-
- if(nghttp2_is_fatal(rv)) {
- return NGHTTP2_ERR_CALLBACK_FAILURE;
- }
- }
- break;
- }
-
- if(c->status_code == -1) {
- /* No :status header field means PROTOCOL_ERROR. */
- rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
- frame->hd.stream_id,
- NGHTTP2_PROTOCOL_ERROR);
-
- if(nghttp2_is_fatal(rv)) {
- return NGHTTP2_ERR_CALLBACK_FAILURE;
- }
-
- break;
- }
-
- /* Only final status code signals the end of header */
- if(c->status_code / 100 != 1) {
- c->bodystarted = TRUE;
- }
-
- c->status_code = -1;
-
- Curl_add_buffer(c->header_recvbuf, "\r\n", 2);
-
- left = c->header_recvbuf->size_used - c->nread_header_recvbuf;
- ncopy = c->len < left ? c->len : left;
-
- memcpy(c->mem, c->header_recvbuf->buffer + c->nread_header_recvbuf, ncopy);
- c->nread_header_recvbuf += ncopy;
-
- c->mem += ncopy;
- c->len -= ncopy;
- break;
- case NGHTTP2_PUSH_PROMISE:
- rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
- frame->push_promise.promised_stream_id,
- NGHTTP2_CANCEL);
- if(nghttp2_is_fatal(rv)) {
- return rv;
- }
- break;
- }
- return 0;
-}
-
-static int on_invalid_frame_recv(nghttp2_session *session,
- const nghttp2_frame *frame,
- uint32_t error_code, void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- (void)session;
- (void)frame;
- infof(conn->data, "on_invalid_frame_recv() was called, error_code = %d\n",
- error_code);
- return 0;
-}
-
-static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
- int32_t stream_id,
- const uint8_t *data, size_t len, void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *c = &conn->proto.httpc;
- size_t nread;
- (void)session;
- (void)flags;
- (void)data;
- infof(conn->data, "on_data_chunk_recv() "
- "len = %u, stream = %x\n", len, stream_id);
-
- if(stream_id != c->stream_id) {
- return 0;
- }
-
- nread = c->len < len ? c->len : len;
- memcpy(c->mem, data, nread);
-
- c->mem += nread;
- c->len -= nread;
-
- infof(conn->data, "%zu data written\n", nread);
-
- if(nread < len) {
- c->data = data + nread;
- c->datalen = len - nread;
- return NGHTTP2_ERR_PAUSE;
- }
- return 0;
-}
-
-static int before_frame_send(nghttp2_session *session,
- const nghttp2_frame *frame,
- void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- (void)session;
- (void)frame;
- infof(conn->data, "before_frame_send() was called\n");
- return 0;
-}
-static int on_frame_send(nghttp2_session *session,
- const nghttp2_frame *frame,
- void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- (void)session;
- (void)frame;
- infof(conn->data, "on_frame_send() was called\n");
- return 0;
-}
-static int on_frame_not_send(nghttp2_session *session,
- const nghttp2_frame *frame,
- int lib_error_code, void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- (void)session;
- (void)frame;
- infof(conn->data, "on_frame_not_send() was called, lib_error_code = %d\n",
- lib_error_code);
- return 0;
-}
-static int on_stream_close(nghttp2_session *session, int32_t stream_id,
- uint32_t error_code, void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *c = &conn->proto.httpc;
- (void)session;
- (void)stream_id;
- infof(conn->data, "on_stream_close() was called, error_code = %d\n",
- error_code);
-
- if(stream_id != c->stream_id) {
- return 0;
- }
-
- c->closed = TRUE;
-
- return 0;
-}
-
-static int on_begin_headers(nghttp2_session *session,
- const nghttp2_frame *frame, void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- (void)session;
- (void)frame;
- infof(conn->data, "on_begin_headers() was called\n");
- return 0;
-}
-
-/* Decode HTTP status code. Returns -1 if no valid status code was
- decoded. */
-static int decode_status_code(const uint8_t *value, size_t len)
-{
- int i;
- int res;
-
- if(len != 3) {
- return -1;
- }
-
- res = 0;
-
- for(i = 0; i < 3; ++i) {
- char c = value[i];
-
- if(c < '0' || c > '9') {
- return -1;
- }
-
- res *= 10;
- res += c - '0';
- }
-
- return res;
-}
-
-static const char STATUS[] = ":status";
-
-/* frame->hd.type is either NGHTTP2_HEADERS or NGHTTP2_PUSH_PROMISE */
-static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
- const uint8_t *name, size_t namelen,
- const uint8_t *value, size_t valuelen,
- uint8_t flags,
- void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *c = &conn->proto.httpc;
- int rv;
- int goodname;
- int goodheader;
-
- (void)session;
- (void)frame;
- (void)flags;
-
- if(frame->hd.stream_id != c->stream_id) {
- return 0;
- }
-
- if(c->bodystarted) {
- /* Ignore trailer or HEADERS not mapped to HTTP semantics. The
- consequence is handled in on_frame_recv(). */
- return 0;
- }
-
- goodname = nghttp2_check_header_name(name, namelen);
- goodheader = nghttp2_check_header_value(value, valuelen);
-
- if(!goodname || !goodheader) {
-
- infof(conn->data, "Detected bad incoming header %s%s, reset stream!\n",
- goodname?"":"name",
- goodheader?"":"value");
-
- rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
- frame->hd.stream_id,
- NGHTTP2_PROTOCOL_ERROR);
-
- if(nghttp2_is_fatal(rv)) {
- return NGHTTP2_ERR_CALLBACK_FAILURE;
- }
-
- return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
- }
-
- if(namelen == sizeof(":status") - 1 &&
- memcmp(STATUS, name, namelen) == 0) {
-
- /* :status must appear exactly once. */
- if(c->status_code != -1 ||
- (c->status_code = decode_status_code(value, valuelen)) == -1) {
-
- rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
- frame->hd.stream_id,
- NGHTTP2_PROTOCOL_ERROR);
- if(nghttp2_is_fatal(rv)) {
- return NGHTTP2_ERR_CALLBACK_FAILURE;
- }
-
- return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
- }
-
- Curl_add_buffer(c->header_recvbuf, "HTTP/2.0 ", 9);
- Curl_add_buffer(c->header_recvbuf, value, valuelen);
- Curl_add_buffer(c->header_recvbuf, "\r\n", 2);
-
- return 0;
- }
- else {
- /* Here we are sure that namelen > 0 because of
- nghttp2_check_header_name(). Pseudo header other than :status
- is illegal. */
- if(c->status_code == -1 || name[0] == ':') {
- rv = nghttp2_submit_rst_stream(session, NGHTTP2_FLAG_NONE,
- frame->hd.stream_id,
- NGHTTP2_PROTOCOL_ERROR);
- if(nghttp2_is_fatal(rv)) {
- return NGHTTP2_ERR_CALLBACK_FAILURE;
- }
-
- return NGHTTP2_ERR_TEMPORAL_CALLBACK_FAILURE;
- }
-
- /* convert to a HTTP1-style header */
- Curl_add_buffer(c->header_recvbuf, name, namelen);
- Curl_add_buffer(c->header_recvbuf, ":", 1);
- Curl_add_buffer(c->header_recvbuf, value, valuelen);
- Curl_add_buffer(c->header_recvbuf, "\r\n", 2);
-
- infof(conn->data, "got http2 header: %.*s: %.*s\n",
- namelen, name, valuelen, value);
- }
-
- return 0; /* 0 is successful */
-}
-
-static ssize_t data_source_read_callback(nghttp2_session *session,
- int32_t stream_id,
- uint8_t *buf, size_t length,
- uint32_t *data_flags,
- nghttp2_data_source *source,
- void *userp)
-{
- struct connectdata *conn = (struct connectdata *)userp;
- struct http_conn *c = &conn->proto.httpc;
- size_t nread;
- (void)session;
- (void)stream_id;
- (void)source;
-
- nread = c->upload_len < length ? c->upload_len : length;
- if(nread > 0) {
- memcpy(buf, c->upload_mem, nread);
- c->upload_mem += nread;
- c->upload_len -= nread;
- c->upload_left -= nread;
- }
-
- if(c->upload_left == 0)
- *data_flags = 1;
- else if(nread == 0)
- return NGHTTP2_ERR_DEFERRED;
-
- return nread;
-}
-
-/*
- * The HTTP2 settings we send in the Upgrade request
- */
-static nghttp2_settings_entry settings[] = {
- { NGHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS, 100 },
- { NGHTTP2_SETTINGS_INITIAL_WINDOW_SIZE, NGHTTP2_INITIAL_WINDOW_SIZE },
-};
-
-#define H2_BUFSIZE 4096
-
-/*
- * Initialize nghttp2 for a Curl connection
- */
-CURLcode Curl_http2_init(struct connectdata *conn)
-{
- if(!conn->proto.httpc.h2) {
- int rc;
- nghttp2_session_callbacks *callbacks;
-
- conn->proto.httpc.inbuf = malloc(H2_BUFSIZE);
- if(conn->proto.httpc.inbuf == NULL)
- return CURLE_OUT_OF_MEMORY;
-
- rc = nghttp2_session_callbacks_new(&callbacks);
-
- if(rc) {
- failf(conn->data, "Couldn't initialize nghttp2 callbacks!");
- return CURLE_OUT_OF_MEMORY; /* most likely at least */
- }
-
- /* nghttp2_send_callback */
- nghttp2_session_callbacks_set_send_callback(callbacks, send_callback);
- /* nghttp2_on_frame_recv_callback */
- nghttp2_session_callbacks_set_on_frame_recv_callback
- (callbacks, on_frame_recv);
- /* nghttp2_on_invalid_frame_recv_callback */
- nghttp2_session_callbacks_set_on_invalid_frame_recv_callback
- (callbacks, on_invalid_frame_recv);
- /* nghttp2_on_data_chunk_recv_callback */
- nghttp2_session_callbacks_set_on_data_chunk_recv_callback
- (callbacks, on_data_chunk_recv);
- /* nghttp2_before_frame_send_callback */
- nghttp2_session_callbacks_set_before_frame_send_callback
- (callbacks, before_frame_send);
- /* nghttp2_on_frame_send_callback */
- nghttp2_session_callbacks_set_on_frame_send_callback
- (callbacks, on_frame_send);
- /* nghttp2_on_frame_not_send_callback */
- nghttp2_session_callbacks_set_on_frame_not_send_callback
- (callbacks, on_frame_not_send);
- /* nghttp2_on_stream_close_callback */
- nghttp2_session_callbacks_set_on_stream_close_callback
- (callbacks, on_stream_close);
- /* nghttp2_on_begin_headers_callback */
- nghttp2_session_callbacks_set_on_begin_headers_callback
- (callbacks, on_begin_headers);
- /* nghttp2_on_header_callback */
- nghttp2_session_callbacks_set_on_header_callback(callbacks, on_header);
-
- /* The nghttp2 session is not yet setup, do it */
- rc = nghttp2_session_client_new(&conn->proto.httpc.h2,
- callbacks, conn);
-
- nghttp2_session_callbacks_del(callbacks);
-
- if(rc) {
- failf(conn->data, "Couldn't initialize nghttp2!");
- return CURLE_OUT_OF_MEMORY; /* most likely at least */
- }
- }
- return CURLE_OK;
-}
-
-/*
- * Send a request using http2
- */
-CURLcode Curl_http2_send_request(struct connectdata *conn)
-{
- (void)conn;
- return CURLE_OK;
-}
-
-/*
- * Append headers to ask for a HTTP1.1 to HTTP2 upgrade.
- */
-CURLcode Curl_http2_request_upgrade(Curl_send_buffer *req,
- struct connectdata *conn)
-{
- CURLcode result;
- ssize_t binlen;
- char *base64;
- size_t blen;
- struct SingleRequest *k = &conn->data->req;
- uint8_t *binsettings = conn->proto.httpc.binsettings;
-
- result = Curl_http2_init(conn);
- if(result)
- return result;
-
- result = Curl_http2_setup(conn);
- if(result)
- return result;
-
- /* As long as we have a fixed set of settings, we don't have to dynamically
- * figure out the base64 strings since it'll always be the same. However,
- * the settings will likely not be fixed every time in the future.
- */
-
- /* this returns number of bytes it wrote */
- binlen = nghttp2_pack_settings_payload(binsettings, H2_BINSETTINGS_LEN,
- settings,
- sizeof(settings)/sizeof(settings[0]));
- if(!binlen) {
- failf(conn->data, "nghttp2 unexpectedly failed on pack_settings_payload");
- return CURLE_FAILED_INIT;
- }
- conn->proto.httpc.binlen = binlen;
-
- result = Curl_base64url_encode(conn->data, (const char *)binsettings, binlen,
- &base64, &blen);
- if(result)
- return result;
-
- result = Curl_add_bufferf(req,
- "Connection: Upgrade, HTTP2-Settings\r\n"
- "Upgrade: %s\r\n"
- "HTTP2-Settings: %s\r\n",
- NGHTTP2_CLEARTEXT_PROTO_VERSION_ID, base64);
- Curl_safefree(base64);
-
- k->upgr101 = UPGR101_REQUESTED;
-
- return result;
-}
-
-/*
- * If the read would block (EWOULDBLOCK) we return -1. Otherwise we return
- * a regular CURLcode value.
- */
-static ssize_t http2_recv(struct connectdata *conn, int sockindex,
- char *mem, size_t len, CURLcode *err)
-{
- CURLcode rc;
- ssize_t rv;
- ssize_t nread;
- struct http_conn *httpc = &conn->proto.httpc;
-
- (void)sockindex; /* we always do HTTP2 on sockindex 0 */
-
- if(httpc->closed) {
- /* Reset to FALSE to prevent infinite loop in readwrite_data
- function. */
- httpc->closed = FALSE;
- return 0;
- }
-
- /* Nullify here because we call nghttp2_session_send() and they
- might refer to the old buffer. */
- httpc->upload_mem = NULL;
- httpc->upload_len = 0;
-
- if(httpc->bodystarted &&
- httpc->nread_header_recvbuf < httpc->header_recvbuf->size_used) {
- size_t left =
- httpc->header_recvbuf->size_used - httpc->nread_header_recvbuf;
- size_t ncopy = len < left ? len : left;
- memcpy(mem, httpc->header_recvbuf->buffer + httpc->nread_header_recvbuf,
- ncopy);
- httpc->nread_header_recvbuf += ncopy;
- return ncopy;
- }
-
- if(httpc->data) {
- nread = len < httpc->datalen ? len : httpc->datalen;
- memcpy(mem, httpc->data, nread);
-
- httpc->data += nread;
- httpc->datalen -= nread;
-
- infof(conn->data, "%zu data written\n", nread);
- if(httpc->datalen == 0) {
- httpc->data = NULL;
- httpc->datalen = 0;
- }
- return nread;
- }
-
- conn->proto.httpc.mem = mem;
- conn->proto.httpc.len = len;
-
- infof(conn->data, "http2_recv: %d bytes buffer\n",
- conn->proto.httpc.len);
-
- rc = 0;
- nread = ((Curl_recv*)httpc->recv_underlying)(conn, FIRSTSOCKET,
- httpc->inbuf, H2_BUFSIZE, &rc);
-
- if(rc == CURLE_AGAIN) {
- *err = rc;
- return -1;
- }
-
- if(nread == -1) {
- failf(conn->data, "Failed receiving HTTP2 data");
- *err = rc;
- return 0;
- }
-
- infof(conn->data, "nread=%zd\n", nread);
- rv = nghttp2_session_mem_recv(httpc->h2,
- (const uint8_t *)httpc->inbuf, nread);
-
- if(nghttp2_is_fatal((int)rv)) {
- failf(conn->data, "nghttp2_session_mem_recv() returned %d:%s\n",
- rv, nghttp2_strerror((int)rv));
- *err = CURLE_RECV_ERROR;
- return 0;
- }
- infof(conn->data, "nghttp2_session_mem_recv() returns %zd\n", rv);
- /* Always send pending frames in nghttp2 session, because
- nghttp2_session_mem_recv() may queue new frame */
- rv = nghttp2_session_send(httpc->h2);
- if(rv != 0) {
- *err = CURLE_SEND_ERROR;
- return 0;
- }
- if(len != httpc->len) {
- return len - conn->proto.httpc.len;
- }
- /* If stream is closed, return 0 to signal the http routine to close
- the connection */
- if(httpc->closed) {
- /* Reset to FALSE to prevent infinite loop in readwrite_data
- function. */
- httpc->closed = FALSE;
- return 0;
- }
- *err = CURLE_AGAIN;
- return -1;
-}
-
-/* Index where :authority header field will appear in request header
- field list. */
-#define AUTHORITY_DST_IDX 3
-
-/* return number of received (decrypted) bytes */
-static ssize_t http2_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len, CURLcode *err)
-{
- /*
- * BIG TODO: Currently, we send request in this function, but this
- * function is also used to send request body. It would be nice to
- * add dedicated function for request.
- */
- int rv;
- struct http_conn *httpc = &conn->proto.httpc;
- nghttp2_nv *nva;
- size_t nheader;
- size_t i;
- size_t authority_idx;
- char *hdbuf = (char*)mem;
- char *end;
- nghttp2_data_provider data_prd;
- int32_t stream_id;
-
- (void)sockindex;
-
- infof(conn->data, "http2_send len=%zu\n", len);
-
- if(httpc->stream_id != -1) {
- /* If stream_id != -1, we have dispatched request HEADERS, and now
- are going to send or sending request body in DATA frame */
- httpc->upload_mem = mem;
- httpc->upload_len = len;
- nghttp2_session_resume_data(httpc->h2, httpc->stream_id);
- rv = nghttp2_session_send(httpc->h2);
- if(nghttp2_is_fatal(rv)) {
- *err = CURLE_SEND_ERROR;
- return -1;
- }
- return len - httpc->upload_len;
- }
-
- /* Calculate number of headers contained in [mem, mem + len) */
- /* Here, we assume the curl http code generate *correct* HTTP header
- field block */
- nheader = 0;
- for(i = 0; i < len; ++i) {
- if(hdbuf[i] == 0x0a) {
- ++nheader;
- }
- }
- /* We counted additional 2 \n in the first and last line. We need 3
- new headers: :method, :path and :scheme. Therefore we need one
- more space. */
- nheader += 1;
- nva = malloc(sizeof(nghttp2_nv) * nheader);
- if(nva == NULL) {
- *err = CURLE_OUT_OF_MEMORY;
- return -1;
- }
- /* Extract :method, :path from request line */
- end = strchr(hdbuf, ' ');
- nva[0].name = (unsigned char *)":method";
- nva[0].namelen = (uint16_t)strlen((char *)nva[0].name);
- nva[0].value = (unsigned char *)hdbuf;
- nva[0].valuelen = (uint16_t)(end - hdbuf);
- nva[0].flags = NGHTTP2_NV_FLAG_NONE;
-
- hdbuf = end + 1;
-
- end = strchr(hdbuf, ' ');
- nva[1].name = (unsigned char *)":path";
- nva[1].namelen = (uint16_t)strlen((char *)nva[1].name);
- nva[1].value = (unsigned char *)hdbuf;
- nva[1].valuelen = (uint16_t)(end - hdbuf);
- nva[1].flags = NGHTTP2_NV_FLAG_NONE;
-
- nva[2].name = (unsigned char *)":scheme";
- nva[2].namelen = (uint16_t)strlen((char *)nva[2].name);
- if(conn->handler->flags & PROTOPT_SSL)
- nva[2].value = (unsigned char *)"https";
- else
- nva[2].value = (unsigned char *)"http";
- nva[2].valuelen = (uint16_t)strlen((char *)nva[2].value);
- nva[2].flags = NGHTTP2_NV_FLAG_NONE;
-
- hdbuf = strchr(hdbuf, 0x0a);
- ++hdbuf;
-
- authority_idx = 0;
-
- for(i = 3; i < nheader; ++i) {
- end = strchr(hdbuf, ':');
- assert(end);
- if(end - hdbuf == 4 && Curl_raw_nequal("host", hdbuf, 4)) {
- authority_idx = i;
- nva[i].name = (unsigned char *)":authority";
- nva[i].namelen = (uint16_t)strlen((char *)nva[i].name);
- }
- else {
- nva[i].name = (unsigned char *)hdbuf;
- nva[i].namelen = (uint16_t)(end - hdbuf);
- }
- hdbuf = end + 1;
- for(; *hdbuf == ' '; ++hdbuf);
- end = strchr(hdbuf, 0x0d);
- assert(end);
- nva[i].value = (unsigned char *)hdbuf;
- nva[i].valuelen = (uint16_t)(end - hdbuf);
- nva[i].flags = NGHTTP2_NV_FLAG_NONE;
-
- hdbuf = end + 2;
- /* Inspect Content-Length header field and retrieve the request
- entity length so that we can set END_STREAM to the last DATA
- frame. */
- if(nva[i].namelen == 14 &&
- Curl_raw_nequal("content-length", (char*)nva[i].name, 14)) {
- size_t j;
- for(j = 0; j < nva[i].valuelen; ++j) {
- httpc->upload_left *= 10;
- httpc->upload_left += nva[i].value[j] - '0';
- }
- infof(conn->data, "request content-length=%zu\n", httpc->upload_left);
- }
- }
-
- /* :authority must come before non-pseudo header fields */
- if(authority_idx != 0 && authority_idx != AUTHORITY_DST_IDX) {
- nghttp2_nv authority = nva[authority_idx];
- for(i = authority_idx; i > AUTHORITY_DST_IDX; --i) {
- nva[i] = nva[i - 1];
- }
- nva[i] = authority;
- }
-
- switch(conn->data->set.httpreq) {
- case HTTPREQ_POST:
- case HTTPREQ_POST_FORM:
- case HTTPREQ_PUT:
- data_prd.read_callback = data_source_read_callback;
- data_prd.source.ptr = NULL;
- stream_id = nghttp2_submit_request(httpc->h2, NULL, nva, nheader,
- &data_prd, NULL);
- break;
- default:
- stream_id = nghttp2_submit_request(httpc->h2, NULL, nva, nheader,
- NULL, NULL);
- }
-
- Curl_safefree(nva);
-
- if(stream_id < 0) {
- *err = CURLE_SEND_ERROR;
- return -1;
- }
-
- httpc->stream_id = stream_id;
-
- rv = nghttp2_session_send(httpc->h2);
-
- if(rv != 0) {
- *err = CURLE_SEND_ERROR;
- return -1;
- }
-
- if(httpc->stream_id != -1) {
- /* If whole HEADERS frame was sent off to the underlying socket,
- the nghttp2 library calls data_source_read_callback. But only
- it found that no data available, so it deferred the DATA
- transmission. Which means that nghttp2_session_want_write()
- returns 0 on http2_perform_getsock(), which results that no
- writable socket check is performed. To workaround this, we
- issue nghttp2_session_resume_data() here to bring back DATA
- transmission from deferred state. */
- nghttp2_session_resume_data(httpc->h2, httpc->stream_id);
- }
-
- return len;
-}
-
-CURLcode Curl_http2_setup(struct connectdata *conn)
-{
- struct http_conn *httpc = &conn->proto.httpc;
- if(conn->handler->flags & PROTOPT_SSL)
- conn->handler = &Curl_handler_http2_ssl;
- else
- conn->handler = &Curl_handler_http2;
-
- infof(conn->data, "Using HTTP2\n");
- httpc->bodystarted = FALSE;
- httpc->closed = FALSE;
- httpc->header_recvbuf = Curl_add_buffer_init();
- httpc->nread_header_recvbuf = 0;
- httpc->data = NULL;
- httpc->datalen = 0;
- httpc->upload_left = 0;
- httpc->upload_mem = NULL;
- httpc->upload_len = 0;
- httpc->stream_id = -1;
- httpc->status_code = -1;
-
- conn->httpversion = 20;
-
- return 0;
-}
-
-CURLcode Curl_http2_switched(struct connectdata *conn)
-{
- CURLcode rc;
- struct http_conn *httpc = &conn->proto.httpc;
- int rv;
- struct SessionHandle *data = conn->data;
-
- httpc->recv_underlying = (recving)conn->recv[FIRSTSOCKET];
- httpc->send_underlying = (sending)conn->send[FIRSTSOCKET];
- conn->recv[FIRSTSOCKET] = http2_recv;
- conn->send[FIRSTSOCKET] = http2_send;
-
- rv = (int) ((Curl_send*)httpc->send_underlying)
- (conn, FIRSTSOCKET,
- NGHTTP2_CLIENT_CONNECTION_PREFACE,
- NGHTTP2_CLIENT_CONNECTION_PREFACE_LEN,
- &rc);
- if(rc)
- /* TODO: This may get CURLE_AGAIN */
- return rc;
-
- if(rv != 24) {
- failf(data, "Only sent partial HTTP2 packet");
- return CURLE_SEND_ERROR;
- }
-
- if(conn->data->req.upgr101 == UPGR101_RECEIVED) {
- /* stream 1 is opened implicitly on upgrade */
- httpc->stream_id = 1;
- /* queue SETTINGS frame (again) */
- rv = nghttp2_session_upgrade(httpc->h2, httpc->binsettings,
- httpc->binlen, NULL);
- if(rv != 0) {
- failf(data, "nghttp2_session_upgrade() failed: %s(%d)",
- nghttp2_strerror(rv), rv);
- return CURLE_HTTP2;
- }
- }
- else {
- /* stream ID is unknown at this point */
- httpc->stream_id = -1;
- rv = nghttp2_submit_settings(httpc->h2, NGHTTP2_FLAG_NONE, NULL, 0);
- if(rv != 0) {
- failf(data, "nghttp2_submit_settings() failed: %s(%d)",
- nghttp2_strerror(rv), rv);
- return CURLE_HTTP2;
- }
- }
- return CURLE_OK;
-}
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/http2.h b/external/libcurl_android/jni/libcurl/lib/http2.h
deleted file mode 100755
index 66aa6fd5..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http2.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef HEADER_CURL_HTTP2_H
-#define HEADER_CURL_HTTP2_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_NGHTTP2
-#include "http.h"
-/*
- * Store nghttp2 version info in this buffer, Prefix with a space. Return
- * total length written.
- */
-int Curl_http2_ver(char *p, size_t len);
-
-CURLcode Curl_http2_init(struct connectdata *conn);
-CURLcode Curl_http2_send_request(struct connectdata *conn);
-CURLcode Curl_http2_request_upgrade(Curl_send_buffer *req,
- struct connectdata *conn);
-CURLcode Curl_http2_setup(struct connectdata *conn);
-CURLcode Curl_http2_switched(struct connectdata *conn);
-#else /* USE_NGHTTP2 */
-#define Curl_http2_init(x) CURLE_UNSUPPORTED_PROTOCOL
-#define Curl_http2_send_request(x) CURLE_UNSUPPORTED_PROTOCOL
-#define Curl_http2_request_upgrade(x,y) CURLE_UNSUPPORTED_PROTOCOL
-#define Curl_http2_setup(x) CURLE_UNSUPPORTED_PROTOCOL
-#define Curl_http2_switched(x) CURLE_UNSUPPORTED_PROTOCOL
-#endif
-
-#endif /* HEADER_CURL_HTTP2_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/http_chunks.c b/external/libcurl_android/jni/libcurl/lib/http_chunks.c
deleted file mode 100755
index 61a6098a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_chunks.c
+++ /dev/null
@@ -1,385 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_HTTP
-
-#include "urldata.h" /* it includes http_chunks.h */
-#include "sendf.h" /* for the client write stuff */
-
-#include "content_encoding.h"
-#include "http.h"
-#include "curl_memory.h"
-#include "non-ascii.h" /* for Curl_convert_to_network prototype */
-#include "strtoofft.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * Chunk format (simplified):
- *
- * <HEX SIZE>[ chunk extension ] CRLF
- * <DATA> CRLF
- *
- * Highlights from RFC2616 section 3.6 say:
-
- The chunked encoding modifies the body of a message in order to
- transfer it as a series of chunks, each with its own size indicator,
- followed by an OPTIONAL trailer containing entity-header fields. This
- allows dynamically produced content to be transferred along with the
- information necessary for the recipient to verify that it has
- received the full message.
-
- Chunked-Body = *chunk
- last-chunk
- trailer
- CRLF
-
- chunk = chunk-size [ chunk-extension ] CRLF
- chunk-data CRLF
- chunk-size = 1*HEX
- last-chunk = 1*("0") [ chunk-extension ] CRLF
-
- chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] )
- chunk-ext-name = token
- chunk-ext-val = token | quoted-string
- chunk-data = chunk-size(OCTET)
- trailer = *(entity-header CRLF)
-
- The chunk-size field is a string of hex digits indicating the size of
- the chunk. The chunked encoding is ended by any chunk whose size is
- zero, followed by the trailer, which is terminated by an empty line.
-
- */
-
-/* Check for an ASCII hex digit.
- We avoid the use of isxdigit to accommodate non-ASCII hosts. */
-static bool Curl_isxdigit(char digit)
-{
- return ( (digit >= 0x30 && digit <= 0x39) /* 0-9 */
- || (digit >= 0x41 && digit <= 0x46) /* A-F */
- || (digit >= 0x61 && digit <= 0x66) /* a-f */ ) ? TRUE : FALSE;
-}
-
-void Curl_httpchunk_init(struct connectdata *conn)
-{
- struct Curl_chunker *chunk = &conn->chunk;
- chunk->hexindex=0; /* start at 0 */
- chunk->dataleft=0; /* no data left yet! */
- chunk->state = CHUNK_HEX; /* we get hex first! */
-}
-
-/*
- * chunk_read() returns a OK for normal operations, or a positive return code
- * for errors. STOP means this sequence of chunks is complete. The 'wrote'
- * argument is set to tell the caller how many bytes we actually passed to the
- * client (for byte-counting and whatever).
- *
- * The states and the state-machine is further explained in the header file.
- *
- * This function always uses ASCII hex values to accommodate non-ASCII hosts.
- * For example, 0x0d and 0x0a are used instead of '\r' and '\n'.
- */
-CHUNKcode Curl_httpchunk_read(struct connectdata *conn,
- char *datap,
- ssize_t datalen,
- ssize_t *wrotep)
-{
- CURLcode result=CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct Curl_chunker *ch = &conn->chunk;
- struct SingleRequest *k = &data->req;
- size_t piece;
- curl_off_t length = (curl_off_t)datalen;
- size_t *wrote = (size_t *)wrotep;
-
- *wrote = 0; /* nothing's written yet */
-
- /* the original data is written to the client, but we go on with the
- chunk read process, to properly calculate the content length*/
- if(data->set.http_te_skip && !k->ignorebody) {
- result = Curl_client_write(conn, CLIENTWRITE_BODY, datap, datalen);
- if(result)
- return CHUNKE_WRITE_ERROR;
- }
-
- while(length) {
- switch(ch->state) {
- case CHUNK_HEX:
- if(Curl_isxdigit(*datap)) {
- if(ch->hexindex < MAXNUM_SIZE) {
- ch->hexbuffer[ch->hexindex] = *datap;
- datap++;
- length--;
- ch->hexindex++;
- }
- else {
- return CHUNKE_TOO_LONG_HEX; /* longer hex than we support */
- }
- }
- else {
- char *endptr;
- if(0 == ch->hexindex)
- /* This is illegal data, we received junk where we expected
- a hexadecimal digit. */
- return CHUNKE_ILLEGAL_HEX;
-
- /* length and datap are unmodified */
- ch->hexbuffer[ch->hexindex]=0;
-
- /* convert to host encoding before calling strtoul */
- result = Curl_convert_from_network(conn->data, ch->hexbuffer,
- ch->hexindex);
- if(result) {
- /* Curl_convert_from_network calls failf if unsuccessful */
- /* Treat it as a bad hex character */
- return CHUNKE_ILLEGAL_HEX ;
- }
-
- ch->datasize=curlx_strtoofft(ch->hexbuffer, &endptr, 16);
- if((ch->datasize == CURL_OFF_T_MAX) && (errno == ERANGE))
- /* overflow is an error */
- return CHUNKE_ILLEGAL_HEX;
- ch->state = CHUNK_LF; /* now wait for the CRLF */
- }
- break;
-
- case CHUNK_LF:
- /* waiting for the LF after a chunk size */
- if(*datap == 0x0a) {
- /* we're now expecting data to come, unless size was zero! */
- if(0 == ch->datasize) {
- ch->state = CHUNK_TRAILER; /* now check for trailers */
- conn->trlPos=0;
- }
- else
- ch->state = CHUNK_DATA;
- }
-
- datap++;
- length--;
- break;
-
- case CHUNK_DATA:
- /* We expect 'datasize' of data. We have 'length' right now, it can be
- more or less than 'datasize'. Get the smallest piece.
- */
- piece = curlx_sotouz((ch->datasize >= length)?length:ch->datasize);
-
- /* Write the data portion available */
-#ifdef HAVE_LIBZ
- switch (conn->data->set.http_ce_skip?
- IDENTITY : data->req.auto_decoding) {
- case IDENTITY:
-#endif
- if(!k->ignorebody) {
- if(!data->set.http_te_skip)
- result = Curl_client_write(conn, CLIENTWRITE_BODY, datap,
- piece);
- else
- result = CURLE_OK;
- }
-#ifdef HAVE_LIBZ
- break;
-
- case DEFLATE:
- /* update data->req.keep.str to point to the chunk data. */
- data->req.str = datap;
- result = Curl_unencode_deflate_write(conn, &data->req,
- (ssize_t)piece);
- break;
-
- case GZIP:
- /* update data->req.keep.str to point to the chunk data. */
- data->req.str = datap;
- result = Curl_unencode_gzip_write(conn, &data->req,
- (ssize_t)piece);
- break;
-
- case COMPRESS:
- default:
- failf (conn->data,
- "Unrecognized content encoding type. "
- "libcurl understands `identity', `deflate' and `gzip' "
- "content encodings.");
- return CHUNKE_BAD_ENCODING;
- }
-#endif
-
- if(result)
- return CHUNKE_WRITE_ERROR;
-
- *wrote += piece;
-
- ch->datasize -= piece; /* decrease amount left to expect */
- datap += piece; /* move read pointer forward */
- length -= piece; /* decrease space left in this round */
-
- if(0 == ch->datasize)
- /* end of data this round, we now expect a trailing CRLF */
- ch->state = CHUNK_POSTLF;
- break;
-
- case CHUNK_POSTLF:
- if(*datap == 0x0a) {
- /* The last one before we go back to hex state and start all over. */
- Curl_httpchunk_init(conn); /* sets state back to CHUNK_HEX */
- }
- else if(*datap != 0x0d)
- return CHUNKE_BAD_CHUNK;
- datap++;
- length--;
- break;
-
- case CHUNK_TRAILER:
- if((*datap == 0x0d) || (*datap == 0x0a)) {
- /* this is the end of a trailer, but if the trailer was zero bytes
- there was no trailer and we move on */
-
- if(conn->trlPos) {
- /* we allocate trailer with 3 bytes extra room to fit this */
- conn->trailer[conn->trlPos++]=0x0d;
- conn->trailer[conn->trlPos++]=0x0a;
- conn->trailer[conn->trlPos]=0;
-
- /* Convert to host encoding before calling Curl_client_write */
- result = Curl_convert_from_network(conn->data, conn->trailer,
- conn->trlPos);
- if(result)
- /* Curl_convert_from_network calls failf if unsuccessful */
- /* Treat it as a bad chunk */
- return CHUNKE_BAD_CHUNK;
-
- if(!data->set.http_te_skip) {
- result = Curl_client_write(conn, CLIENTWRITE_HEADER,
- conn->trailer, conn->trlPos);
- if(result)
- return CHUNKE_WRITE_ERROR;
- }
- conn->trlPos=0;
- ch->state = CHUNK_TRAILER_CR;
- if(*datap == 0x0a)
- /* already on the LF */
- break;
- }
- else {
- /* no trailer, we're on the final CRLF pair */
- ch->state = CHUNK_TRAILER_POSTCR;
- break; /* don't advance the pointer */
- }
- }
- else {
- /* conn->trailer is assumed to be freed in url.c on a
- connection basis */
- if(conn->trlPos >= conn->trlMax) {
- /* we always allocate three extra bytes, just because when the full
- header has been received we append CRLF\0 */
- char *ptr;
- if(conn->trlMax) {
- conn->trlMax *= 2;
- ptr = realloc(conn->trailer, conn->trlMax + 3);
- }
- else {
- conn->trlMax=128;
- ptr = malloc(conn->trlMax + 3);
- }
- if(!ptr)
- return CHUNKE_OUT_OF_MEMORY;
- conn->trailer = ptr;
- }
- conn->trailer[conn->trlPos++]=*datap;
- }
- datap++;
- length--;
- break;
-
- case CHUNK_TRAILER_CR:
- if(*datap == 0x0a) {
- ch->state = CHUNK_TRAILER_POSTCR;
- datap++;
- length--;
- }
- else
- return CHUNKE_BAD_CHUNK;
- break;
-
- case CHUNK_TRAILER_POSTCR:
- /* We enter this state when a CR should arrive so we expect to
- have to first pass a CR before we wait for LF */
- if((*datap != 0x0d) && (*datap != 0x0a)) {
- /* not a CR then it must be another header in the trailer */
- ch->state = CHUNK_TRAILER;
- break;
- }
- if(*datap == 0x0d) {
- /* skip if CR */
- datap++;
- length--;
- }
- /* now wait for the final LF */
- ch->state = CHUNK_STOP;
- break;
-
- case CHUNK_STOP:
- if(*datap == 0x0a) {
- length--;
-
- /* Record the length of any data left in the end of the buffer
- even if there's no more chunks to read */
- ch->dataleft = curlx_sotouz(length);
-
- return CHUNKE_STOP; /* return stop */
- }
- else
- return CHUNKE_BAD_CHUNK;
- }
- }
- return CHUNKE_OK;
-}
-
-const char *Curl_chunked_strerror(CHUNKcode code)
-{
- switch (code) {
- default:
- return "OK";
- case CHUNKE_TOO_LONG_HEX:
- return "Too long hexadecimal number";
- case CHUNKE_ILLEGAL_HEX:
- return "Illegal or missing hexadecimal sequence";
- case CHUNKE_BAD_CHUNK:
- return "Malformed encoding found";
- case CHUNKE_WRITE_ERROR:
- return "Write error";
- case CHUNKE_BAD_ENCODING:
- return "Bad content-encoding found";
- case CHUNKE_OUT_OF_MEMORY:
- return "Out of memory";
- }
-}
-
-#endif /* CURL_DISABLE_HTTP */
diff --git a/external/libcurl_android/jni/libcurl/lib/http_chunks.h b/external/libcurl_android/jni/libcurl/lib/http_chunks.h
deleted file mode 100755
index 0489eb85..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_chunks.h
+++ /dev/null
@@ -1,91 +0,0 @@
-#ifndef HEADER_CURL_HTTP_CHUNKS_H
-#define HEADER_CURL_HTTP_CHUNKS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-/*
- * The longest possible hexadecimal number we support in a chunked transfer.
- * Weird enough, RFC2616 doesn't set a maximum size! Since we use strtoul()
- * to convert it, we "only" support 2^32 bytes chunk data.
- */
-#define MAXNUM_SIZE 16
-
-typedef enum {
- /* await and buffer all hexadecimal digits until we get one that isn't a
- hexadecimal digit. When done, we go CHUNK_LF */
- CHUNK_HEX,
-
- /* wait for LF, ignore all else */
- CHUNK_LF,
-
- /* We eat the amount of data specified. When done, we move on to the
- POST_CR state. */
- CHUNK_DATA,
-
- /* POSTLF should get a CR and then a LF and nothing else, then move back to
- HEX as the CRLF combination marks the end of a chunk. A missing CR is no
- big deal. */
- CHUNK_POSTLF,
-
- /* Used to mark that we're out of the game. NOTE: that there's a 'dataleft'
- field in the struct that will tell how many bytes that were not passed to
- the client in the end of the last buffer! */
- CHUNK_STOP,
-
- /* At this point optional trailer headers can be found, unless the next line
- is CRLF */
- CHUNK_TRAILER,
-
- /* A trailer CR has been found - next state is CHUNK_TRAILER_POSTCR.
- Next char must be a LF */
- CHUNK_TRAILER_CR,
-
- /* A trailer LF must be found now, otherwise CHUNKE_BAD_CHUNK will be
- signalled If this is an empty trailer CHUNKE_STOP will be signalled.
- Otherwise the trailer will be broadcasted via Curl_client_write() and the
- next state will be CHUNK_TRAILER */
- CHUNK_TRAILER_POSTCR
-} ChunkyState;
-
-typedef enum {
- CHUNKE_STOP = -1,
- CHUNKE_OK = 0,
- CHUNKE_TOO_LONG_HEX = 1,
- CHUNKE_ILLEGAL_HEX,
- CHUNKE_BAD_CHUNK,
- CHUNKE_WRITE_ERROR,
- CHUNKE_BAD_ENCODING,
- CHUNKE_OUT_OF_MEMORY,
- CHUNKE_LAST
-} CHUNKcode;
-
-const char *Curl_chunked_strerror(CHUNKcode code);
-
-struct Curl_chunker {
- char hexbuffer[ MAXNUM_SIZE + 1];
- int hexindex;
- ChunkyState state;
- curl_off_t datasize;
- size_t dataleft; /* untouched data amount at the end of the last buffer */
-};
-
-#endif /* HEADER_CURL_HTTP_CHUNKS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/http_digest.c b/external/libcurl_android/jni/libcurl/lib/http_digest.c
deleted file mode 100755
index 55f5108c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_digest.c
+++ /dev/null
@@ -1,598 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
-
-#include "urldata.h"
-#include "rawstr.h"
-#include "curl_base64.h"
-#include "curl_md5.h"
-#include "http_digest.h"
-#include "strtok.h"
-#include "curl_memory.h"
-#include "vtls/vtls.h" /* for Curl_rand() */
-#include "non-ascii.h" /* included for Curl_convert_... prototypes */
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#define MAX_VALUE_LENGTH 256
-#define MAX_CONTENT_LENGTH 1024
-
-static void digest_cleanup_one(struct digestdata *dig);
-
-/*
- * Return 0 on success and then the buffers are filled in fine.
- *
- * Non-zero means failure to parse.
- */
-static int get_pair(const char *str, char *value, char *content,
- const char **endptr)
-{
- int c;
- bool starts_with_quote = FALSE;
- bool escape = FALSE;
-
- for(c=MAX_VALUE_LENGTH-1; (*str && (*str != '=') && c--); )
- *value++ = *str++;
- *value=0;
-
- if('=' != *str++)
- /* eek, no match */
- return 1;
-
- if('\"' == *str) {
- /* this starts with a quote so it must end with one as well! */
- str++;
- starts_with_quote = TRUE;
- }
-
- for(c=MAX_CONTENT_LENGTH-1; *str && c--; str++) {
- switch(*str) {
- case '\\':
- if(!escape) {
- /* possibly the start of an escaped quote */
- escape = TRUE;
- *content++ = '\\'; /* even though this is an escape character, we still
- store it as-is in the target buffer */
- continue;
- }
- break;
- case ',':
- if(!starts_with_quote) {
- /* this signals the end of the content if we didn't get a starting
- quote and then we do "sloppy" parsing */
- c=0; /* the end */
- continue;
- }
- break;
- case '\r':
- case '\n':
- /* end of string */
- c=0;
- continue;
- case '\"':
- if(!escape && starts_with_quote) {
- /* end of string */
- c=0;
- continue;
- }
- break;
- }
- escape = FALSE;
- *content++ = *str;
- }
- *content=0;
-
- *endptr = str;
-
- return 0; /* all is fine! */
-}
-
-/* Test example headers:
-
-WWW-Authenticate: Digest realm="testrealm", nonce="1053604598"
-Proxy-Authenticate: Digest realm="testrealm", nonce="1053604598"
-
-*/
-
-CURLdigest Curl_input_digest(struct connectdata *conn,
- bool proxy,
- const char *header) /* rest of the *-authenticate:
- header */
-{
- char *token = NULL;
- char *tmp = NULL;
- bool foundAuth = FALSE;
- bool foundAuthInt = FALSE;
- struct SessionHandle *data=conn->data;
- bool before = FALSE; /* got a nonce before */
- struct digestdata *d;
-
- if(proxy) {
- d = &data->state.proxydigest;
- }
- else {
- d = &data->state.digest;
- }
-
- if(checkprefix("Digest", header)) {
- header += strlen("Digest");
-
- /* If we already have received a nonce, keep that in mind */
- if(d->nonce)
- before = TRUE;
-
- /* clear off any former leftovers and init to defaults */
- digest_cleanup_one(d);
-
- for(;;) {
- char value[MAX_VALUE_LENGTH];
- char content[MAX_CONTENT_LENGTH];
-
- while(*header && ISSPACE(*header))
- header++;
-
- /* extract a value=content pair */
- if(!get_pair(header, value, content, &header)) {
- if(Curl_raw_equal(value, "nonce")) {
- d->nonce = strdup(content);
- if(!d->nonce)
- return CURLDIGEST_NOMEM;
- }
- else if(Curl_raw_equal(value, "stale")) {
- if(Curl_raw_equal(content, "true")) {
- d->stale = TRUE;
- d->nc = 1; /* we make a new nonce now */
- }
- }
- else if(Curl_raw_equal(value, "realm")) {
- d->realm = strdup(content);
- if(!d->realm)
- return CURLDIGEST_NOMEM;
- }
- else if(Curl_raw_equal(value, "opaque")) {
- d->opaque = strdup(content);
- if(!d->opaque)
- return CURLDIGEST_NOMEM;
- }
- else if(Curl_raw_equal(value, "qop")) {
- char *tok_buf;
- /* tokenize the list and choose auth if possible, use a temporary
- clone of the buffer since strtok_r() ruins it */
- tmp = strdup(content);
- if(!tmp)
- return CURLDIGEST_NOMEM;
- token = strtok_r(tmp, ",", &tok_buf);
- while(token != NULL) {
- if(Curl_raw_equal(token, "auth")) {
- foundAuth = TRUE;
- }
- else if(Curl_raw_equal(token, "auth-int")) {
- foundAuthInt = TRUE;
- }
- token = strtok_r(NULL, ",", &tok_buf);
- }
- free(tmp);
- /*select only auth o auth-int. Otherwise, ignore*/
- if(foundAuth) {
- d->qop = strdup("auth");
- if(!d->qop)
- return CURLDIGEST_NOMEM;
- }
- else if(foundAuthInt) {
- d->qop = strdup("auth-int");
- if(!d->qop)
- return CURLDIGEST_NOMEM;
- }
- }
- else if(Curl_raw_equal(value, "algorithm")) {
- d->algorithm = strdup(content);
- if(!d->algorithm)
- return CURLDIGEST_NOMEM;
- if(Curl_raw_equal(content, "MD5-sess"))
- d->algo = CURLDIGESTALGO_MD5SESS;
- else if(Curl_raw_equal(content, "MD5"))
- d->algo = CURLDIGESTALGO_MD5;
- else
- return CURLDIGEST_BADALGO;
- }
- else {
- /* unknown specifier, ignore it! */
- }
- }
- else
- break; /* we're done here */
-
- /* pass all additional spaces here */
- while(*header && ISSPACE(*header))
- header++;
- if(',' == *header)
- /* allow the list to be comma-separated */
- header++;
- }
- /* We had a nonce since before, and we got another one now without
- 'stale=true'. This means we provided bad credentials in the previous
- request */
- if(before && !d->stale)
- return CURLDIGEST_BAD;
-
- /* We got this header without a nonce, that's a bad Digest line! */
- if(!d->nonce)
- return CURLDIGEST_BAD;
- }
- else
- /* else not a digest, get out */
- return CURLDIGEST_NONE;
-
- return CURLDIGEST_FINE;
-}
-
-/* convert md5 chunk to RFC2617 (section 3.1.3) -suitable ascii string*/
-static void md5_to_ascii(unsigned char *source, /* 16 bytes */
- unsigned char *dest) /* 33 bytes */
-{
- int i;
- for(i=0; i<16; i++)
- snprintf((char *)&dest[i*2], 3, "%02x", source[i]);
-}
-
-/* Perform quoted-string escaping as described in RFC2616 and its errata */
-static char *string_quoted(const char *source)
-{
- char *dest, *d;
- const char *s = source;
- size_t n = 1; /* null terminator */
-
- /* Calculate size needed */
- while(*s) {
- ++n;
- if(*s == '"' || *s == '\\') {
- ++n;
- }
- ++s;
- }
-
- dest = malloc(n);
- if(dest) {
- s = source;
- d = dest;
- while(*s) {
- if(*s == '"' || *s == '\\') {
- *d++ = '\\';
- }
- *d++ = *s++;
- }
- *d = 0;
- }
-
- return dest;
-}
-
-CURLcode Curl_output_digest(struct connectdata *conn,
- bool proxy,
- const unsigned char *request,
- const unsigned char *uripath)
-{
- /* We have a Digest setup for this, use it! Now, to get all the details for
- this sorted out, I must urge you dear friend to read up on the RFC2617
- section 3.2.2, */
- size_t urilen;
- unsigned char md5buf[16]; /* 16 bytes/128 bits */
- unsigned char request_digest[33];
- unsigned char *md5this;
- unsigned char ha1[33];/* 32 digits and 1 zero byte */
- unsigned char ha2[33];/* 32 digits and 1 zero byte */
- char cnoncebuf[33];
- char *cnonce = NULL;
- size_t cnonce_sz = 0;
- char *tmp = NULL;
- char **allocuserpwd;
- size_t userlen;
- const char *userp;
- char *userp_quoted;
- const char *passwdp;
- struct auth *authp;
-
- struct SessionHandle *data = conn->data;
- struct digestdata *d;
- CURLcode rc;
-/* The CURL_OUTPUT_DIGEST_CONV macro below is for non-ASCII machines.
- It converts digest text to ASCII so the MD5 will be correct for
- what ultimately goes over the network.
-*/
-#define CURL_OUTPUT_DIGEST_CONV(a, b) \
- rc = Curl_convert_to_network(a, (char *)b, strlen((const char*)b)); \
- if(rc != CURLE_OK) { \
- free(b); \
- return rc; \
- }
-
- if(proxy) {
- d = &data->state.proxydigest;
- allocuserpwd = &conn->allocptr.proxyuserpwd;
- userp = conn->proxyuser;
- passwdp = conn->proxypasswd;
- authp = &data->state.authproxy;
- }
- else {
- d = &data->state.digest;
- allocuserpwd = &conn->allocptr.userpwd;
- userp = conn->user;
- passwdp = conn->passwd;
- authp = &data->state.authhost;
- }
-
- Curl_safefree(*allocuserpwd);
-
- /* not set means empty */
- if(!userp)
- userp="";
-
- if(!passwdp)
- passwdp="";
-
- if(!d->nonce) {
- authp->done = FALSE;
- return CURLE_OK;
- }
- authp->done = TRUE;
-
- if(!d->nc)
- d->nc = 1;
-
- if(!d->cnonce) {
- snprintf(cnoncebuf, sizeof(cnoncebuf), "%08x%08x%08x%08x",
- Curl_rand(data), Curl_rand(data),
- Curl_rand(data), Curl_rand(data));
- rc = Curl_base64_encode(data, cnoncebuf, strlen(cnoncebuf),
- &cnonce, &cnonce_sz);
- if(rc)
- return rc;
- d->cnonce = cnonce;
- }
-
- /*
- if the algorithm is "MD5" or unspecified (which then defaults to MD5):
-
- A1 = unq(username-value) ":" unq(realm-value) ":" passwd
-
- if the algorithm is "MD5-sess" then:
-
- A1 = H( unq(username-value) ":" unq(realm-value) ":" passwd )
- ":" unq(nonce-value) ":" unq(cnonce-value)
- */
-
- md5this = (unsigned char *)
- aprintf("%s:%s:%s", userp, d->realm, passwdp);
- if(!md5this)
- return CURLE_OUT_OF_MEMORY;
-
- CURL_OUTPUT_DIGEST_CONV(data, md5this); /* convert on non-ASCII machines */
- Curl_md5it(md5buf, md5this);
- Curl_safefree(md5this);
- md5_to_ascii(md5buf, ha1);
-
- if(d->algo == CURLDIGESTALGO_MD5SESS) {
- /* nonce and cnonce are OUTSIDE the hash */
- tmp = aprintf("%s:%s:%s", ha1, d->nonce, d->cnonce);
- if(!tmp)
- return CURLE_OUT_OF_MEMORY;
- CURL_OUTPUT_DIGEST_CONV(data, tmp); /* convert on non-ASCII machines */
- Curl_md5it(md5buf, (unsigned char *)tmp);
- Curl_safefree(tmp);
- md5_to_ascii(md5buf, ha1);
- }
-
- /*
- If the "qop" directive's value is "auth" or is unspecified, then A2 is:
-
- A2 = Method ":" digest-uri-value
-
- If the "qop" value is "auth-int", then A2 is:
-
- A2 = Method ":" digest-uri-value ":" H(entity-body)
-
- (The "Method" value is the HTTP request method as specified in section
- 5.1.1 of RFC 2616)
- */
-
- /* So IE browsers < v7 cut off the URI part at the query part when they
- evaluate the MD5 and some (IIS?) servers work with them so we may need to
- do the Digest IE-style. Note that the different ways cause different MD5
- sums to get sent.
-
- Apache servers can be set to do the Digest IE-style automatically using
- the BrowserMatch feature:
- http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html#msie
-
- Further details on Digest implementation differences:
- http://www.fngtps.com/2006/09/http-authentication
- */
-
- if(authp->iestyle && ((tmp = strchr((char *)uripath, '?')) != NULL))
- urilen = tmp - (char *)uripath;
- else
- urilen = strlen((char *)uripath);
-
- md5this = (unsigned char *)aprintf("%s:%.*s", request, urilen, uripath);
-
- if(d->qop && Curl_raw_equal(d->qop, "auth-int")) {
- /* We don't support auth-int for PUT or POST at the moment.
- TODO: replace md5 of empty string with entity-body for PUT/POST */
- unsigned char *md5this2 = (unsigned char *)
- aprintf("%s:%s", md5this, "d41d8cd98f00b204e9800998ecf8427e");
- Curl_safefree(md5this);
- md5this = md5this2;
- }
-
- if(!md5this)
- return CURLE_OUT_OF_MEMORY;
-
- CURL_OUTPUT_DIGEST_CONV(data, md5this); /* convert on non-ASCII machines */
- Curl_md5it(md5buf, md5this);
- Curl_safefree(md5this);
- md5_to_ascii(md5buf, ha2);
-
- if(d->qop) {
- md5this = (unsigned char *)aprintf("%s:%s:%08x:%s:%s:%s",
- ha1,
- d->nonce,
- d->nc,
- d->cnonce,
- d->qop,
- ha2);
- }
- else {
- md5this = (unsigned char *)aprintf("%s:%s:%s",
- ha1,
- d->nonce,
- ha2);
- }
- if(!md5this)
- return CURLE_OUT_OF_MEMORY;
-
- CURL_OUTPUT_DIGEST_CONV(data, md5this); /* convert on non-ASCII machines */
- Curl_md5it(md5buf, md5this);
- Curl_safefree(md5this);
- md5_to_ascii(md5buf, request_digest);
-
- /* for test case 64 (snooped from a Mozilla 1.3a request)
-
- Authorization: Digest username="testuser", realm="testrealm", \
- nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca"
-
- Digest parameters are all quoted strings. Username which is provided by
- the user will need double quotes and backslashes within it escaped. For
- the other fields, this shouldn't be an issue. realm, nonce, and opaque
- are copied as is from the server, escapes and all. cnonce is generated
- with web-safe characters. uri is already percent encoded. nc is 8 hex
- characters. algorithm and qop with standard values only contain web-safe
- chracters.
- */
- userp_quoted = string_quoted(userp);
- if(!userp_quoted)
- return CURLE_OUT_OF_MEMORY;
-
- if(d->qop) {
- *allocuserpwd =
- aprintf( "%sAuthorization: Digest "
- "username=\"%s\", "
- "realm=\"%s\", "
- "nonce=\"%s\", "
- "uri=\"%.*s\", "
- "cnonce=\"%s\", "
- "nc=%08x, "
- "qop=%s, "
- "response=\"%s\"",
- proxy?"Proxy-":"",
- userp_quoted,
- d->realm,
- d->nonce,
- urilen, uripath, /* this is the PATH part of the URL */
- d->cnonce,
- d->nc,
- d->qop,
- request_digest);
-
- if(Curl_raw_equal(d->qop, "auth"))
- d->nc++; /* The nc (from RFC) has to be a 8 hex digit number 0 padded
- which tells to the server how many times you are using the
- same nonce in the qop=auth mode. */
- }
- else {
- *allocuserpwd =
- aprintf( "%sAuthorization: Digest "
- "username=\"%s\", "
- "realm=\"%s\", "
- "nonce=\"%s\", "
- "uri=\"%.*s\", "
- "response=\"%s\"",
- proxy?"Proxy-":"",
- userp_quoted,
- d->realm,
- d->nonce,
- urilen, uripath, /* this is the PATH part of the URL */
- request_digest);
- }
- Curl_safefree(userp_quoted);
- if(!*allocuserpwd)
- return CURLE_OUT_OF_MEMORY;
-
- /* Add optional fields */
- if(d->opaque) {
- /* append opaque */
- tmp = aprintf("%s, opaque=\"%s\"", *allocuserpwd, d->opaque);
- if(!tmp)
- return CURLE_OUT_OF_MEMORY;
- free(*allocuserpwd);
- *allocuserpwd = tmp;
- }
-
- if(d->algorithm) {
- /* append algorithm */
- tmp = aprintf("%s, algorithm=\"%s\"", *allocuserpwd, d->algorithm);
- if(!tmp)
- return CURLE_OUT_OF_MEMORY;
- free(*allocuserpwd);
- *allocuserpwd = tmp;
- }
-
- /* append CRLF + zero (3 bytes) to the userpwd header */
- userlen = strlen(*allocuserpwd);
- tmp = realloc(*allocuserpwd, userlen + 3);
- if(!tmp)
- return CURLE_OUT_OF_MEMORY;
- strcpy(&tmp[userlen], "\r\n"); /* append the data */
- *allocuserpwd = tmp;
-
- return CURLE_OK;
-}
-
-static void digest_cleanup_one(struct digestdata *d)
-{
- Curl_safefree(d->nonce);
- Curl_safefree(d->cnonce);
- Curl_safefree(d->realm);
- Curl_safefree(d->opaque);
- Curl_safefree(d->qop);
- Curl_safefree(d->algorithm);
-
- d->nc = 0;
- d->algo = CURLDIGESTALGO_MD5; /* default algorithm */
- d->stale = FALSE; /* default means normal, not stale */
-}
-
-
-void Curl_digest_cleanup(struct SessionHandle *data)
-{
- digest_cleanup_one(&data->state.digest);
- digest_cleanup_one(&data->state.proxydigest);
-}
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/http_digest.h b/external/libcurl_android/jni/libcurl/lib/http_digest.h
deleted file mode 100755
index c6a4e916..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_digest.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef HEADER_CURL_HTTP_DIGEST_H
-#define HEADER_CURL_HTTP_DIGEST_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-typedef enum {
- CURLDIGEST_NONE, /* not a digest */
- CURLDIGEST_BAD, /* a digest, but one we don't like */
- CURLDIGEST_BADALGO, /* unsupported algorithm requested */
- CURLDIGEST_NOMEM,
- CURLDIGEST_FINE, /* a digest we act on */
-
- CURLDIGEST_LAST /* last entry in this enum, don't use */
-} CURLdigest;
-
-enum {
- CURLDIGESTALGO_MD5,
- CURLDIGESTALGO_MD5SESS
-};
-
-/* this is for digest header input */
-CURLdigest Curl_input_digest(struct connectdata *conn,
- bool proxy, const char *header);
-
-/* this is for creating digest header output */
-CURLcode Curl_output_digest(struct connectdata *conn,
- bool proxy,
- const unsigned char *request,
- const unsigned char *uripath);
-
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
-void Curl_digest_cleanup(struct SessionHandle *data);
-#else
-#define Curl_digest_cleanup(x) Curl_nop_stmt
-#endif
-
-#endif /* HEADER_CURL_HTTP_DIGEST_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/http_negotiate.c b/external/libcurl_android/jni/libcurl/lib/http_negotiate.c
deleted file mode 100755
index c8bfa29b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_negotiate.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_GSSAPI
-#ifdef HAVE_OLD_GSSMIT
-#define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
-#define NCOMPAT 1
-#endif
-
-#ifndef CURL_DISABLE_HTTP
-
-#include "urldata.h"
-#include "sendf.h"
-#include "curl_gssapi.h"
-#include "rawstr.h"
-#include "curl_base64.h"
-#include "http_negotiate.h"
-#include "curl_memory.h"
-#include "url.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static int
-get_gss_name(struct connectdata *conn, bool proxy, gss_name_t *server)
-{
- OM_uint32 major_status, minor_status;
- gss_buffer_desc token = GSS_C_EMPTY_BUFFER;
- char name[2048];
- const char* service = "HTTP";
-
- token.length = strlen(service) + 1 + strlen(proxy ? conn->proxy.name :
- conn->host.name) + 1;
- if(token.length + 1 > sizeof(name))
- return EMSGSIZE;
-
- snprintf(name, sizeof(name), "%s@%s", service, proxy ? conn->proxy.name :
- conn->host.name);
-
- token.value = (void *) name;
- major_status = gss_import_name(&minor_status,
- &token,
- GSS_C_NT_HOSTBASED_SERVICE,
- server);
-
- return GSS_ERROR(major_status) ? -1 : 0;
-}
-
-static void
-log_gss_error(struct connectdata *conn, OM_uint32 error_status,
- const char *prefix)
-{
- OM_uint32 maj_stat, min_stat;
- OM_uint32 msg_ctx = 0;
- gss_buffer_desc status_string;
- char buf[1024];
- size_t len;
-
- snprintf(buf, sizeof(buf), "%s", prefix);
- len = strlen(buf);
- do {
- maj_stat = gss_display_status(&min_stat,
- error_status,
- GSS_C_MECH_CODE,
- GSS_C_NO_OID,
- &msg_ctx,
- &status_string);
- if(sizeof(buf) > len + status_string.length + 1) {
- snprintf(buf + len, sizeof(buf) - len,
- ": %s", (char*) status_string.value);
- len += status_string.length;
- }
- gss_release_buffer(&min_stat, &status_string);
- } while(!GSS_ERROR(maj_stat) && msg_ctx != 0);
-
- infof(conn->data, "%s\n", buf);
-}
-
-/* returning zero (0) means success, everything else is treated as "failure"
- with no care exactly what the failure was */
-int Curl_input_negotiate(struct connectdata *conn, bool proxy,
- const char *header)
-{
- struct SessionHandle *data = conn->data;
- struct negotiatedata *neg_ctx = proxy?&data->state.proxyneg:
- &data->state.negotiate;
- OM_uint32 major_status, minor_status, discard_st;
- gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER;
- gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER;
- int ret;
- size_t len;
- size_t rawlen = 0;
- CURLcode error;
-
- if(neg_ctx->context && neg_ctx->status == GSS_S_COMPLETE) {
- /* We finished successfully our part of authentication, but server
- * rejected it (since we're again here). Exit with an error since we
- * can't invent anything better */
- Curl_cleanup_negotiate(data);
- return -1;
- }
-
- if(neg_ctx->server_name == NULL &&
- (ret = get_gss_name(conn, proxy, &neg_ctx->server_name)))
- return ret;
-
- header += strlen("Negotiate");
- while(*header && ISSPACE(*header))
- header++;
-
- len = strlen(header);
- if(len > 0) {
- error = Curl_base64_decode(header,
- (unsigned char **)&input_token.value, &rawlen);
- if(error || rawlen == 0)
- return -1;
- input_token.length = rawlen;
-
- DEBUGASSERT(input_token.value != NULL);
- }
-
- major_status = Curl_gss_init_sec_context(data,
- &minor_status,
- &neg_ctx->context,
- neg_ctx->server_name,
- &Curl_spnego_mech_oid,
- GSS_C_NO_CHANNEL_BINDINGS,
- &input_token,
- &output_token,
- NULL);
- Curl_safefree(input_token.value);
-
- neg_ctx->status = major_status;
- if(GSS_ERROR(major_status)) {
- if(output_token.value)
- gss_release_buffer(&discard_st, &output_token);
- log_gss_error(conn, minor_status, "gss_init_sec_context() failed: ");
- return -1;
- }
-
- if(!output_token.value || !output_token.length) {
- if(output_token.value)
- gss_release_buffer(&discard_st, &output_token);
- return -1;
- }
-
- neg_ctx->output_token = output_token;
- return 0;
-}
-
-
-CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
-{
- struct negotiatedata *neg_ctx = proxy?&conn->data->state.proxyneg:
- &conn->data->state.negotiate;
- char *encoded = NULL;
- size_t len = 0;
- char *userp;
- CURLcode error;
- OM_uint32 discard_st;
-
- error = Curl_base64_encode(conn->data,
- neg_ctx->output_token.value,
- neg_ctx->output_token.length,
- &encoded, &len);
- if(error) {
- gss_release_buffer(&discard_st, &neg_ctx->output_token);
- neg_ctx->output_token.value = NULL;
- neg_ctx->output_token.length = 0;
- return error;
- }
-
- if(!encoded || !len) {
- gss_release_buffer(&discard_st, &neg_ctx->output_token);
- neg_ctx->output_token.value = NULL;
- neg_ctx->output_token.length = 0;
- return CURLE_REMOTE_ACCESS_DENIED;
- }
-
- userp = aprintf("%sAuthorization: Negotiate %s\r\n", proxy ? "Proxy-" : "",
- encoded);
- if(proxy) {
- Curl_safefree(conn->allocptr.proxyuserpwd);
- conn->allocptr.proxyuserpwd = userp;
- }
- else {
- Curl_safefree(conn->allocptr.userpwd);
- conn->allocptr.userpwd = userp;
- }
-
- Curl_safefree(encoded);
-
- return (userp == NULL) ? CURLE_OUT_OF_MEMORY : CURLE_OK;
-}
-
-static void cleanup(struct negotiatedata *neg_ctx)
-{
- OM_uint32 minor_status;
- if(neg_ctx->context != GSS_C_NO_CONTEXT)
- gss_delete_sec_context(&minor_status, &neg_ctx->context, GSS_C_NO_BUFFER);
-
- if(neg_ctx->output_token.value)
- gss_release_buffer(&minor_status, &neg_ctx->output_token);
-
- if(neg_ctx->server_name != GSS_C_NO_NAME)
- gss_release_name(&minor_status, &neg_ctx->server_name);
-
- memset(neg_ctx, 0, sizeof(*neg_ctx));
-}
-
-void Curl_cleanup_negotiate(struct SessionHandle *data)
-{
- cleanup(&data->state.negotiate);
- cleanup(&data->state.proxyneg);
-}
-
-
-#endif
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/http_negotiate.h b/external/libcurl_android/jni/libcurl/lib/http_negotiate.h
deleted file mode 100755
index f7efe8cd..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_negotiate.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef HEADER_CURL_HTTP_NEGOTIATE_H
-#define HEADER_CURL_HTTP_NEGOTIATE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#ifdef USE_SPNEGO
-
-/* this is for Negotiate header input */
-int Curl_input_negotiate(struct connectdata *conn, bool proxy,
- const char *header);
-
-/* this is for creating Negotiate header output */
-CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy);
-
-void Curl_cleanup_negotiate(struct SessionHandle *data);
-
-#ifdef USE_WINDOWS_SSPI
-#define GSS_ERROR(status) (status & 0x80000000)
-#endif
-
-#endif /* USE_SPNEGO */
-
-#endif /* HEADER_CURL_HTTP_NEGOTIATE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/http_negotiate_sspi.c b/external/libcurl_android/jni/libcurl/lib/http_negotiate_sspi.c
deleted file mode 100755
index 61581f1f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_negotiate_sspi.c
+++ /dev/null
@@ -1,290 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_WINDOWS_SSPI
-
-#if !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)
-
-#include "urldata.h"
-#include "sendf.h"
-#include "rawstr.h"
-#include "warnless.h"
-#include "curl_base64.h"
-#include "curl_sasl.h"
-#include "http_negotiate.h"
-#include "curl_memory.h"
-#include "curl_multibyte.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* returning zero (0) means success, everything else is treated as "failure"
- with no care exactly what the failure was */
-int Curl_input_negotiate(struct connectdata *conn, bool proxy,
- const char *header)
-{
- BYTE *input_token = NULL;
- SecBufferDesc out_buff_desc;
- SecBuffer out_sec_buff;
- SecBufferDesc in_buff_desc;
- SecBuffer in_sec_buff;
- unsigned long context_attributes;
- TimeStamp lifetime;
- int ret;
- size_t len = 0, input_token_len = 0;
- CURLcode error;
-
- /* Point to the username and password */
- const char *userp;
- const char *passwdp;
-
- /* Point to the correct struct with this */
- struct negotiatedata *neg_ctx;
-
- if(proxy) {
- userp = conn->proxyuser;
- passwdp = conn->proxypasswd;
- neg_ctx = &conn->data->state.proxyneg;
- }
- else {
- userp = conn->user;
- passwdp = conn->passwd;
- neg_ctx = &conn->data->state.negotiate;
- }
-
- /* Not set means empty */
- if(!userp)
- userp = "";
-
- if(!passwdp)
- passwdp = "";
-
- if(neg_ctx->context && neg_ctx->status == SEC_E_OK) {
- /* We finished successfully our part of authentication, but server
- * rejected it (since we're again here). Exit with an error since we
- * can't invent anything better */
- Curl_cleanup_negotiate(conn->data);
- return -1;
- }
-
- if(!neg_ctx->server_name) {
- /* Check proxy auth requested but no given proxy name */
- if(proxy && !conn->proxy.name)
- return -1;
-
- /* Generate our SPN */
- neg_ctx->server_name = Curl_sasl_build_spn("HTTP",
- proxy ? conn->proxy.name :
- conn->host.name);
- if(!neg_ctx->server_name)
- return -1;
- }
-
- if(!neg_ctx->output_token) {
- PSecPkgInfo SecurityPackage;
- ret = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT("Negotiate"),
- &SecurityPackage);
- if(ret != SEC_E_OK)
- return -1;
-
- /* Allocate input and output buffers according to the max token size
- as indicated by the security package */
- neg_ctx->max_token_length = SecurityPackage->cbMaxToken;
- neg_ctx->output_token = malloc(neg_ctx->max_token_length);
- s_pSecFn->FreeContextBuffer(SecurityPackage);
- }
-
- /* Obtain the input token, if any */
- header += strlen("Negotiate");
- while(*header && ISSPACE(*header))
- header++;
-
- len = strlen(header);
- if(!len) {
- /* Is this the first call in a new negotiation? */
- if(neg_ctx->context) {
- /* The server rejected our authentication and hasn't suppled any more
- negotiation mechanisms */
- return -1;
- }
-
- /* We have to acquire credentials and allocate memory for the context */
- neg_ctx->credentials = malloc(sizeof(CredHandle));
- neg_ctx->context = malloc(sizeof(CtxtHandle));
-
- if(!neg_ctx->credentials || !neg_ctx->context)
- return -1;
-
- if(userp && *userp) {
- /* Populate our identity structure */
- error = Curl_create_sspi_identity(userp, passwdp, &neg_ctx->identity);
- if(error)
- return -1;
-
- /* Allow proper cleanup of the identity structure */
- neg_ctx->p_identity = &neg_ctx->identity;
- }
- else
- /* Use the current Windows user */
- neg_ctx->p_identity = NULL;
-
- /* Acquire our credientials handle */
- neg_ctx->status =
- s_pSecFn->AcquireCredentialsHandle(NULL,
- (TCHAR *) TEXT("Negotiate"),
- SECPKG_CRED_OUTBOUND, NULL,
- neg_ctx->p_identity, NULL, NULL,
- neg_ctx->credentials, &lifetime);
- if(neg_ctx->status != SEC_E_OK)
- return -1;
- }
- else {
- error = Curl_base64_decode(header,
- (unsigned char **)&input_token,
- &input_token_len);
- if(error || !input_token_len)
- return -1;
- }
-
- /* Setup the "output" security buffer */
- out_buff_desc.ulVersion = SECBUFFER_VERSION;
- out_buff_desc.cBuffers = 1;
- out_buff_desc.pBuffers = &out_sec_buff;
- out_sec_buff.BufferType = SECBUFFER_TOKEN;
- out_sec_buff.pvBuffer = neg_ctx->output_token;
- out_sec_buff.cbBuffer = curlx_uztoul(neg_ctx->max_token_length);
-
- /* Setup the "input" security buffer if present */
- if(input_token) {
- in_buff_desc.ulVersion = SECBUFFER_VERSION;
- in_buff_desc.cBuffers = 1;
- in_buff_desc.pBuffers = &in_sec_buff;
- in_sec_buff.BufferType = SECBUFFER_TOKEN;
- in_sec_buff.pvBuffer = input_token;
- in_sec_buff.cbBuffer = curlx_uztoul(input_token_len);
- }
-
- /* Generate our message */
- neg_ctx->status = s_pSecFn->InitializeSecurityContext(
- neg_ctx->credentials,
- input_token ? neg_ctx->context : NULL,
- neg_ctx->server_name,
- ISC_REQ_CONFIDENTIALITY,
- 0,
- SECURITY_NATIVE_DREP,
- input_token ? &in_buff_desc : NULL,
- 0,
- neg_ctx->context,
- &out_buff_desc,
- &context_attributes,
- &lifetime);
-
- Curl_safefree(input_token);
-
- if(GSS_ERROR(neg_ctx->status))
- return -1;
-
- if(neg_ctx->status == SEC_I_COMPLETE_NEEDED ||
- neg_ctx->status == SEC_I_COMPLETE_AND_CONTINUE) {
- neg_ctx->status = s_pSecFn->CompleteAuthToken(neg_ctx->context,
- &out_buff_desc);
- if(GSS_ERROR(neg_ctx->status))
- return -1;
- }
-
- neg_ctx->output_token_length = out_sec_buff.cbBuffer;
-
- return 0;
-}
-
-
-CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
-{
- struct negotiatedata *neg_ctx = proxy?&conn->data->state.proxyneg:
- &conn->data->state.negotiate;
- char *encoded = NULL;
- size_t len = 0;
- char *userp;
- CURLcode error;
-
- error = Curl_base64_encode(conn->data,
- (const char*)neg_ctx->output_token,
- neg_ctx->output_token_length,
- &encoded, &len);
- if(error)
- return error;
-
- if(!len)
- return CURLE_REMOTE_ACCESS_DENIED;
-
- userp = aprintf("%sAuthorization: Negotiate %s\r\n", proxy ? "Proxy-" : "",
- encoded);
-
- if(proxy) {
- Curl_safefree(conn->allocptr.proxyuserpwd);
- conn->allocptr.proxyuserpwd = userp;
- }
- else {
- Curl_safefree(conn->allocptr.userpwd);
- conn->allocptr.userpwd = userp;
- }
- free(encoded);
- return (userp == NULL) ? CURLE_OUT_OF_MEMORY : CURLE_OK;
-}
-
-static void cleanup(struct negotiatedata *neg_ctx)
-{
- if(neg_ctx->context) {
- s_pSecFn->DeleteSecurityContext(neg_ctx->context);
- free(neg_ctx->context);
- neg_ctx->context = NULL;
- }
-
- if(neg_ctx->credentials) {
- s_pSecFn->FreeCredentialsHandle(neg_ctx->credentials);
- free(neg_ctx->credentials);
- neg_ctx->credentials = NULL;
- }
-
- neg_ctx->max_token_length = 0;
- Curl_safefree(neg_ctx->output_token);
-
- Curl_safefree(neg_ctx->server_name);
-
- Curl_sspi_free_identity(neg_ctx->p_identity);
- neg_ctx->p_identity = NULL;
-}
-
-void Curl_cleanup_negotiate(struct SessionHandle *data)
-{
- cleanup(&data->state.negotiate);
- cleanup(&data->state.proxyneg);
-}
-
-#endif /* !CURL_DISABLE_HTTP && USE_SPNEGO */
-
-#endif /* USE_WINDOWS_SSPI */
diff --git a/external/libcurl_android/jni/libcurl/lib/http_proxy.c b/external/libcurl_android/jni/libcurl/lib/http_proxy.c
deleted file mode 100755
index 5343eb71..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_proxy.c
+++ /dev/null
@@ -1,598 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if !defined(CURL_DISABLE_PROXY) && !defined(CURL_DISABLE_HTTP)
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "http_proxy.h"
-#include "sendf.h"
-#include "http.h"
-#include "url.h"
-#include "select.h"
-#include "rawstr.h"
-#include "progress.h"
-#include "non-ascii.h"
-#include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curlx.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-CURLcode Curl_proxy_connect(struct connectdata *conn)
-{
- if(conn->bits.tunnel_proxy && conn->bits.httpproxy) {
-#ifndef CURL_DISABLE_PROXY
- /* for [protocol] tunneled through HTTP proxy */
- struct HTTP http_proxy;
- void *prot_save;
- CURLcode result;
-
- /* BLOCKING */
- /* We want "seamless" operations through HTTP proxy tunnel */
-
- /* Curl_proxyCONNECT is based on a pointer to a struct HTTP at the
- * member conn->proto.http; we want [protocol] through HTTP and we have
- * to change the member temporarily for connecting to the HTTP
- * proxy. After Curl_proxyCONNECT we have to set back the member to the
- * original pointer
- *
- * This function might be called several times in the multi interface case
- * if the proxy's CONNTECT response is not instant.
- */
- prot_save = conn->data->req.protop;
- memset(&http_proxy, 0, sizeof(http_proxy));
- conn->data->req.protop = &http_proxy;
- connkeep(conn, "HTTP proxy CONNECT");
- result = Curl_proxyCONNECT(conn, FIRSTSOCKET,
- conn->host.name, conn->remote_port);
- conn->data->req.protop = prot_save;
- if(CURLE_OK != result)
- return result;
-#else
- return CURLE_NOT_BUILT_IN;
-#endif
- }
- /* no HTTP tunnel proxy, just return */
- return CURLE_OK;
-}
-
-/*
- * Curl_proxyCONNECT() requires that we're connected to a HTTP proxy. This
- * function will issue the necessary commands to get a seamless tunnel through
- * this proxy. After that, the socket can be used just as a normal socket.
- */
-
-CURLcode Curl_proxyCONNECT(struct connectdata *conn,
- int sockindex,
- const char *hostname,
- int remote_port)
-{
- int subversion=0;
- struct SessionHandle *data=conn->data;
- struct SingleRequest *k = &data->req;
- CURLcode result;
- curl_socket_t tunnelsocket = conn->sock[sockindex];
- curl_off_t cl=0;
- bool closeConnection = FALSE;
- bool chunked_encoding = FALSE;
- long check;
-
-#define SELECT_OK 0
-#define SELECT_ERROR 1
-#define SELECT_TIMEOUT 2
- int error = SELECT_OK;
-
- if(conn->tunnel_state[sockindex] == TUNNEL_COMPLETE)
- return CURLE_OK; /* CONNECT is already completed */
-
- conn->bits.proxy_connect_closed = FALSE;
-
- do {
- if(TUNNEL_INIT == conn->tunnel_state[sockindex]) {
- /* BEGIN CONNECT PHASE */
- char *host_port;
- Curl_send_buffer *req_buffer;
-
- infof(data, "Establish HTTP proxy tunnel to %s:%hu\n",
- hostname, remote_port);
-
- if(data->req.newurl) {
- /* This only happens if we've looped here due to authentication
- reasons, and we don't really use the newly cloned URL here
- then. Just free() it. */
- free(data->req.newurl);
- data->req.newurl = NULL;
- }
-
- /* initialize a dynamic send-buffer */
- req_buffer = Curl_add_buffer_init();
-
- if(!req_buffer)
- return CURLE_OUT_OF_MEMORY;
-
- host_port = aprintf("%s:%hu", hostname, remote_port);
- if(!host_port) {
- free(req_buffer);
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Setup the proxy-authorization header, if any */
- result = Curl_http_output_auth(conn, "CONNECT", host_port, TRUE);
-
- free(host_port);
-
- if(CURLE_OK == result) {
- char *host=(char *)"";
- const char *proxyconn="";
- const char *useragent="";
- const char *http = (conn->proxytype == CURLPROXY_HTTP_1_0) ?
- "1.0" : "1.1";
- char *hostheader= /* host:port with IPv6 support */
- aprintf("%s%s%s:%hu", conn->bits.ipv6_ip?"[":"",
- hostname, conn->bits.ipv6_ip?"]":"",
- remote_port);
- if(!hostheader) {
- free(req_buffer);
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(!Curl_checkProxyheaders(conn, "Host:")) {
- host = aprintf("Host: %s\r\n", hostheader);
- if(!host) {
- free(hostheader);
- free(req_buffer);
- return CURLE_OUT_OF_MEMORY;
- }
- }
- if(!Curl_checkProxyheaders(conn, "Proxy-Connection:"))
- proxyconn = "Proxy-Connection: Keep-Alive\r\n";
-
- if(!Curl_checkProxyheaders(conn, "User-Agent:") &&
- data->set.str[STRING_USERAGENT])
- useragent = conn->allocptr.uagent;
-
- result =
- Curl_add_bufferf(req_buffer,
- "CONNECT %s HTTP/%s\r\n"
- "%s" /* Host: */
- "%s" /* Proxy-Authorization */
- "%s" /* User-Agent */
- "%s", /* Proxy-Connection */
- hostheader,
- http,
- host,
- conn->allocptr.proxyuserpwd?
- conn->allocptr.proxyuserpwd:"",
- useragent,
- proxyconn);
-
- if(host && *host)
- free(host);
- free(hostheader);
-
- if(CURLE_OK == result)
- result = Curl_add_custom_headers(conn, TRUE, req_buffer);
-
- if(CURLE_OK == result)
- /* CRLF terminate the request */
- result = Curl_add_bufferf(req_buffer, "\r\n");
-
- if(CURLE_OK == result) {
- /* Send the connect request to the proxy */
- /* BLOCKING */
- result =
- Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, sockindex);
- }
- req_buffer = NULL;
- if(result)
- failf(data, "Failed sending CONNECT to proxy");
- }
-
- Curl_safefree(req_buffer);
- if(result)
- return result;
-
- conn->tunnel_state[sockindex] = TUNNEL_CONNECT;
- } /* END CONNECT PHASE */
-
- check = Curl_timeleft(data, NULL, TRUE);
- if(check <= 0) {
- failf(data, "Proxy CONNECT aborted due to timeout");
- return CURLE_RECV_ERROR;
- }
-
- if(0 == Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD, 0))
- /* return so we'll be called again polling-style */
- return CURLE_OK;
- else {
- DEBUGF(infof(data,
- "Read response immediately from proxy CONNECT\n"));
- }
-
- /* at this point, the tunnel_connecting phase is over. */
-
- { /* READING RESPONSE PHASE */
- size_t nread; /* total size read */
- int perline; /* count bytes per line */
- int keepon=TRUE;
- ssize_t gotbytes;
- char *ptr;
- char *line_start;
-
- ptr=data->state.buffer;
- line_start = ptr;
-
- nread=0;
- perline=0;
- keepon=TRUE;
-
- while((nread<BUFSIZE) && (keepon && !error)) {
-
- check = Curl_timeleft(data, NULL, TRUE);
- if(check <= 0) {
- failf(data, "Proxy CONNECT aborted due to timeout");
- error = SELECT_TIMEOUT; /* already too little time */
- break;
- }
-
- /* loop every second at least, less if the timeout is near */
- switch (Curl_socket_ready(tunnelsocket, CURL_SOCKET_BAD,
- check<1000L?check:1000)) {
- case -1: /* select() error, stop reading */
- error = SELECT_ERROR;
- failf(data, "Proxy CONNECT aborted due to select/poll error");
- break;
- case 0: /* timeout */
- break;
- default:
- DEBUGASSERT(ptr+BUFSIZE-nread <= data->state.buffer+BUFSIZE+1);
- result = Curl_read(conn, tunnelsocket, ptr, BUFSIZE-nread,
- &gotbytes);
- if(result==CURLE_AGAIN)
- continue; /* go loop yourself */
- else if(result)
- keepon = FALSE;
- else if(gotbytes <= 0) {
- keepon = FALSE;
- if(data->set.proxyauth && data->state.authproxy.avail) {
- /* proxy auth was requested and there was proxy auth available,
- then deem this as "mere" proxy disconnect */
- conn->bits.proxy_connect_closed = TRUE;
- infof(data, "Proxy CONNECT connection closed");
- }
- else {
- error = SELECT_ERROR;
- failf(data, "Proxy CONNECT aborted");
- }
- }
- else {
- /*
- * We got a whole chunk of data, which can be anything from one
- * byte to a set of lines and possibly just a piece of the last
- * line.
- */
- int i;
-
- nread += gotbytes;
-
- if(keepon > TRUE) {
- /* This means we are currently ignoring a response-body */
-
- nread = 0; /* make next read start over in the read buffer */
- ptr=data->state.buffer;
- if(cl) {
- /* A Content-Length based body: simply count down the counter
- and make sure to break out of the loop when we're done! */
- cl -= gotbytes;
- if(cl<=0) {
- keepon = FALSE;
- break;
- }
- }
- else {
- /* chunked-encoded body, so we need to do the chunked dance
- properly to know when the end of the body is reached */
- CHUNKcode r;
- ssize_t tookcareof=0;
-
- /* now parse the chunked piece of data so that we can
- properly tell when the stream ends */
- r = Curl_httpchunk_read(conn, ptr, gotbytes, &tookcareof);
- if(r == CHUNKE_STOP) {
- /* we're done reading chunks! */
- infof(data, "chunk reading DONE\n");
- keepon = FALSE;
- /* we did the full CONNECT treatment, go COMPLETE */
- conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
- }
- else
- infof(data, "Read %zd bytes of chunk, continue\n",
- tookcareof);
- }
- }
- else
- for(i = 0; i < gotbytes; ptr++, i++) {
- perline++; /* amount of bytes in this line so far */
- if(*ptr == 0x0a) {
- char letter;
- int writetype;
-
- /* convert from the network encoding */
- result = Curl_convert_from_network(data, line_start,
- perline);
- /* Curl_convert_from_network calls failf if unsuccessful */
- if(result)
- return result;
-
- /* output debug if that is requested */
- if(data->set.verbose)
- Curl_debug(data, CURLINFO_HEADER_IN,
- line_start, (size_t)perline, conn);
-
- /* send the header to the callback */
- writetype = CLIENTWRITE_HEADER;
- if(data->set.include_header)
- writetype |= CLIENTWRITE_BODY;
-
- result = Curl_client_write(conn, writetype, line_start,
- perline);
-
- data->info.header_size += (long)perline;
- data->req.headerbytecount += (long)perline;
-
- if(result)
- return result;
-
- /* Newlines are CRLF, so the CR is ignored as the line isn't
- really terminated until the LF comes. Treat a following CR
- as end-of-headers as well.*/
-
- if(('\r' == line_start[0]) ||
- ('\n' == line_start[0])) {
- /* end of response-headers from the proxy */
- nread = 0; /* make next read start over in the read
- buffer */
- ptr=data->state.buffer;
- if((407 == k->httpcode) && !data->state.authproblem) {
- /* If we get a 407 response code with content length
- when we have no auth problem, we must ignore the
- whole response-body */
- keepon = 2;
-
- if(cl) {
- infof(data, "Ignore %" CURL_FORMAT_CURL_OFF_T
- " bytes of response-body\n", cl);
-
- /* remove the remaining chunk of what we already
- read */
- cl -= (gotbytes - i);
-
- if(cl<=0)
- /* if the whole thing was already read, we are done!
- */
- keepon=FALSE;
- }
- else if(chunked_encoding) {
- CHUNKcode r;
- /* We set ignorebody true here since the chunked
- decoder function will acknowledge that. Pay
- attention so that this is cleared again when this
- function returns! */
- k->ignorebody = TRUE;
- infof(data, "%zd bytes of chunk left\n", gotbytes-i);
-
- if(line_start[1] == '\n') {
- /* this can only be a LF if the letter at index 0
- was a CR */
- line_start++;
- i++;
- }
-
- /* now parse the chunked piece of data so that we can
- properly tell when the stream ends */
- r = Curl_httpchunk_read(conn, line_start+1,
- gotbytes -i, &gotbytes);
- if(r == CHUNKE_STOP) {
- /* we're done reading chunks! */
- infof(data, "chunk reading DONE\n");
- keepon = FALSE;
- /* we did the full CONNECT treatment, go to
- COMPLETE */
- conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
- }
- else
- infof(data, "Read %zd bytes of chunk, continue\n",
- gotbytes);
- }
- else {
- /* without content-length or chunked encoding, we
- can't keep the connection alive since the close is
- the end signal so we bail out at once instead */
- keepon=FALSE;
- }
- }
- else {
- keepon = FALSE;
- if(200 == data->info.httpproxycode) {
- if(gotbytes - (i+1))
- failf(data, "Proxy CONNECT followed by %zd bytes "
- "of opaque data. Data ignored (known bug #39)",
- gotbytes - (i+1));
- }
- }
- /* we did the full CONNECT treatment, go to COMPLETE */
- conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
- break; /* breaks out of for-loop, not switch() */
- }
-
- /* keep a backup of the position we are about to blank */
- letter = line_start[perline];
- line_start[perline]=0; /* zero terminate the buffer */
- if((checkprefix("WWW-Authenticate:", line_start) &&
- (401 == k->httpcode)) ||
- (checkprefix("Proxy-authenticate:", line_start) &&
- (407 == k->httpcode))) {
-
- bool proxy = (k->httpcode == 407) ? TRUE : FALSE;
- char *auth = Curl_copy_header_value(line_start);
- if(!auth)
- return CURLE_OUT_OF_MEMORY;
-
- result = Curl_http_input_auth(conn, proxy, auth);
-
- Curl_safefree(auth);
-
- if(result)
- return result;
- }
- else if(checkprefix("Content-Length:", line_start)) {
- cl = curlx_strtoofft(line_start +
- strlen("Content-Length:"), NULL, 10);
- }
- else if(Curl_compareheader(line_start,
- "Connection:", "close"))
- closeConnection = TRUE;
- else if(Curl_compareheader(line_start,
- "Transfer-Encoding:",
- "chunked")) {
- infof(data, "CONNECT responded chunked\n");
- chunked_encoding = TRUE;
- /* init our chunky engine */
- Curl_httpchunk_init(conn);
- }
- else if(Curl_compareheader(line_start,
- "Proxy-Connection:", "close"))
- closeConnection = TRUE;
- else if(2 == sscanf(line_start, "HTTP/1.%d %d",
- &subversion,
- &k->httpcode)) {
- /* store the HTTP code from the proxy */
- data->info.httpproxycode = k->httpcode;
- }
- /* put back the letter we blanked out before */
- line_start[perline]= letter;
-
- perline=0; /* line starts over here */
- line_start = ptr+1; /* this skips the zero byte we wrote */
- }
- }
- }
- break;
- } /* switch */
- if(Curl_pgrsUpdate(conn))
- return CURLE_ABORTED_BY_CALLBACK;
- } /* while there's buffer left and loop is requested */
-
- if(error)
- return CURLE_RECV_ERROR;
-
- if(data->info.httpproxycode != 200) {
- /* Deal with the possibly already received authenticate
- headers. 'newurl' is set to a new URL if we must loop. */
- result = Curl_http_auth_act(conn);
- if(result)
- return result;
-
- if(conn->bits.close)
- /* the connection has been marked for closure, most likely in the
- Curl_http_auth_act() function and thus we can kill it at once
- below
- */
- closeConnection = TRUE;
- }
-
- if(closeConnection && data->req.newurl) {
- /* Connection closed by server. Don't use it anymore */
- Curl_closesocket(conn, conn->sock[sockindex]);
- conn->sock[sockindex] = CURL_SOCKET_BAD;
- break;
- }
- } /* END READING RESPONSE PHASE */
-
- /* If we are supposed to continue and request a new URL, which basically
- * means the HTTP authentication is still going on so if the tunnel
- * is complete we start over in INIT state */
- if(data->req.newurl &&
- (TUNNEL_COMPLETE == conn->tunnel_state[sockindex])) {
- conn->tunnel_state[sockindex] = TUNNEL_INIT;
- infof(data, "TUNNEL_STATE switched to: %d\n",
- conn->tunnel_state[sockindex]);
- }
-
- } while(data->req.newurl);
-
- if(200 != data->req.httpcode) {
- if(closeConnection && data->req.newurl) {
- conn->bits.proxy_connect_closed = TRUE;
- infof(data, "Connect me again please\n");
- }
- else {
- if(data->req.newurl) {
- /* this won't be used anymore for the CONNECT so free it now */
- free(data->req.newurl);
- data->req.newurl = NULL;
- }
- /* failure, close this connection to avoid re-use */
- connclose(conn, "proxy CONNECT failure");
- Curl_closesocket(conn, conn->sock[sockindex]);
- conn->sock[sockindex] = CURL_SOCKET_BAD;
- }
-
- /* to back to init state */
- conn->tunnel_state[sockindex] = TUNNEL_INIT;
-
- if(conn->bits.proxy_connect_closed)
- /* this is not an error, just part of the connection negotiation */
- return CURLE_OK;
- else {
- failf(data, "Received HTTP code %d from proxy after CONNECT",
- data->req.httpcode);
- return CURLE_RECV_ERROR;
- }
- }
-
- conn->tunnel_state[sockindex] = TUNNEL_COMPLETE;
-
- /* If a proxy-authorization header was used for the proxy, then we should
- make sure that it isn't accidentally used for the document request
- after we've connected. So let's free and clear it here. */
- Curl_safefree(conn->allocptr.proxyuserpwd);
- conn->allocptr.proxyuserpwd = NULL;
-
- data->state.authproxy.done = TRUE;
-
- infof (data, "Proxy replied OK to CONNECT request\n");
- data->req.ignorebody = FALSE; /* put it (back) to non-ignore state */
- conn->bits.rewindaftersend = FALSE; /* make sure this isn't set for the
- document request */
- return CURLE_OK;
-}
-#endif /* CURL_DISABLE_PROXY */
diff --git a/external/libcurl_android/jni/libcurl/lib/http_proxy.h b/external/libcurl_android/jni/libcurl/lib/http_proxy.h
deleted file mode 100755
index 2b5e9c9b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/http_proxy.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef HEADER_CURL_HTTP_PROXY_H
-#define HEADER_CURL_HTTP_PROXY_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#if !defined(CURL_DISABLE_PROXY) && !defined(CURL_DISABLE_HTTP)
-/* ftp can use this as well */
-CURLcode Curl_proxyCONNECT(struct connectdata *conn,
- int tunnelsocket,
- const char *hostname, int remote_port);
-
-/* Default proxy timeout in milliseconds */
-#define PROXY_TIMEOUT (3600*1000)
-
-CURLcode Curl_proxy_connect(struct connectdata *conn);
-
-#else
-#define Curl_proxyCONNECT(x,y,z,w) CURLE_NOT_BUILT_IN
-#define Curl_proxy_connect(x) CURLE_OK
-#endif
-
-#endif /* HEADER_CURL_HTTP_PROXY_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/idn_win32.c b/external/libcurl_android/jni/libcurl/lib/idn_win32.c
deleted file mode 100755
index 464964bc..00000000
--- a/external/libcurl_android/jni/libcurl/lib/idn_win32.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
- /*
- * IDN conversions using Windows kernel32 and normaliz libraries.
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_WIN32_IDN
-
-#include "curl_multibyte.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifdef WANT_IDN_PROTOTYPES
-WINBASEAPI int WINAPI IdnToAscii(DWORD, const WCHAR *, int, WCHAR *, int);
-WINBASEAPI int WINAPI IdnToUnicode(DWORD, const WCHAR *, int, WCHAR *, int);
-#endif
-
-#define IDN_MAX_LENGTH 255
-
-int curl_win32_idn_to_ascii(const char *in, char **out);
-int curl_win32_ascii_to_idn(const char *in, size_t in_len, char **out_utf8);
-
-int curl_win32_idn_to_ascii(const char *in, char **out)
-{
- wchar_t *in_w = Curl_convert_UTF8_to_wchar(in);
- if(in_w) {
- wchar_t punycode[IDN_MAX_LENGTH];
- if(IdnToAscii(0, in_w, -1, punycode, IDN_MAX_LENGTH) == 0) {
- wprintf(L"ERROR %d converting to Punycode\n", GetLastError());
- free(in_w);
- return 0;
- }
- free(in_w);
-
- *out = Curl_convert_wchar_to_UTF8(punycode);
- if(!*out)
- return 0;
- }
- return 1;
-}
-
-int curl_win32_ascii_to_idn(const char *in, size_t in_len, char **out_utf8)
-{
- (void)in_len; /* unused */
- if(in) {
- WCHAR unicode[IDN_MAX_LENGTH];
-
- if(IdnToUnicode(0, (wchar_t *)in, -1, unicode, IDN_MAX_LENGTH) == 0) {
- wprintf(L"ERROR %d converting to Punycode\n", GetLastError());
- return 0;
- }
- else {
- *out_utf8 = Curl_convert_wchar_to_UTF8(unicode);
- if(!*out_utf8)
- return 0;
- }
- }
- return 1;
-}
-
-#endif /* USE_WIN32_IDN */
diff --git a/external/libcurl_android/jni/libcurl/lib/if2ip.c b/external/libcurl_android/jni/libcurl/lib/if2ip.c
deleted file mode 100755
index 05ae7d6f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/if2ip.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-# include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-# include <sys/ioctl.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_SYS_SOCKIO_H
-# include <sys/sockio.h>
-#endif
-#ifdef HAVE_IFADDRS_H
-# include <ifaddrs.h>
-#endif
-#ifdef HAVE_STROPTS_H
-# include <stropts.h>
-#endif
-#ifdef __VMS
-# include <inet.h>
-#endif
-
-#include "inet_ntop.h"
-#include "strequal.h"
-#include "if2ip.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* ------------------------------------------------------------------ */
-
-#if defined(HAVE_GETIFADDRS)
-
-bool Curl_if_is_interface_name(const char *interf)
-{
- bool result = FALSE;
-
- struct ifaddrs *iface, *head;
-
- if(getifaddrs(&head) >= 0) {
- for(iface=head; iface != NULL; iface=iface->ifa_next) {
- if(curl_strequal(iface->ifa_name, interf)) {
- result = TRUE;
- break;
- }
- }
- freeifaddrs(head);
- }
- return result;
-}
-
-if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
- const char *interf, char *buf, int buf_size)
-{
- struct ifaddrs *iface, *head;
- if2ip_result_t res = IF2IP_NOT_FOUND;
-
-#ifndef ENABLE_IPV6
- (void) remote_scope;
-#endif
-
- if(getifaddrs(&head) >= 0) {
- for(iface=head; iface != NULL; iface=iface->ifa_next) {
- if(iface->ifa_addr != NULL) {
- if(iface->ifa_addr->sa_family == af) {
- if(curl_strequal(iface->ifa_name, interf)) {
- void *addr;
- char *ip;
- char scope[12]="";
- char ipstr[64];
-#ifdef ENABLE_IPV6
- if(af == AF_INET6) {
- unsigned int scopeid = 0;
- addr = &((struct sockaddr_in6 *)iface->ifa_addr)->sin6_addr;
-#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
- /* Include the scope of this interface as part of the address */
- scopeid =
- ((struct sockaddr_in6 *)iface->ifa_addr)->sin6_scope_id;
-#endif
- if(scopeid != remote_scope) {
- /* We are interested only in interface addresses whose
- scope ID matches the remote address we want to
- connect to: global (0) for global, link-local for
- link-local, etc... */
- if(res == IF2IP_NOT_FOUND) res = IF2IP_AF_NOT_SUPPORTED;
- continue;
- }
- if(scopeid)
- snprintf(scope, sizeof(scope), "%%%u", scopeid);
- }
- else
-#endif
- addr = &((struct sockaddr_in *)iface->ifa_addr)->sin_addr;
- res = IF2IP_FOUND;
- ip = (char *) Curl_inet_ntop(af, addr, ipstr, sizeof(ipstr));
- snprintf(buf, buf_size, "%s%s", ip, scope);
- break;
- }
- }
- else if((res == IF2IP_NOT_FOUND) &&
- curl_strequal(iface->ifa_name, interf)) {
- res = IF2IP_AF_NOT_SUPPORTED;
- }
- }
- }
- freeifaddrs(head);
- }
- return res;
-}
-
-#elif defined(HAVE_IOCTL_SIOCGIFADDR)
-
-bool Curl_if_is_interface_name(const char *interf)
-{
- /* This is here just to support the old interfaces */
- char buf[256];
-
- return (Curl_if2ip(AF_INET, 0, interf, buf, sizeof(buf)) ==
- IF2IP_NOT_FOUND) ? FALSE : TRUE;
-}
-
-if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
- const char *interf, char *buf, int buf_size)
-{
- struct ifreq req;
- struct in_addr in;
- struct sockaddr_in *s;
- curl_socket_t dummy;
- size_t len;
-
- (void)remote_scope;
-
- if(!interf || (af != AF_INET))
- return IF2IP_NOT_FOUND;
-
- len = strlen(interf);
- if(len >= sizeof(req.ifr_name))
- return IF2IP_NOT_FOUND;
-
- dummy = socket(AF_INET, SOCK_STREAM, 0);
- if(CURL_SOCKET_BAD == dummy)
- return IF2IP_NOT_FOUND;
-
- memset(&req, 0, sizeof(req));
- memcpy(req.ifr_name, interf, len+1);
- req.ifr_addr.sa_family = AF_INET;
-
- if(ioctl(dummy, SIOCGIFADDR, &req) < 0) {
- sclose(dummy);
- /* With SIOCGIFADDR, we cannot tell the difference between an interface
- that does not exist and an interface that has no address of the
- correct family. Assume the interface does not exist */
- return IF2IP_NOT_FOUND;
- }
-
- s = (struct sockaddr_in *)&req.ifr_addr;
- memcpy(&in, &s->sin_addr, sizeof(in));
- Curl_inet_ntop(s->sin_family, &in, buf, buf_size);
-
- sclose(dummy);
- return IF2IP_FOUND;
-}
-
-#else
-
-bool Curl_if_is_interface_name(const char *interf)
-{
- (void) interf;
-
- return FALSE;
-}
-
-if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
- const char *interf, char *buf, int buf_size)
-{
- (void) af;
- (void) remote_scope;
- (void) interf;
- (void) buf;
- (void) buf_size;
- return IF2IP_NOT_FOUND;
-}
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/if2ip.h b/external/libcurl_android/jni/libcurl/lib/if2ip.h
deleted file mode 100755
index ac587523..00000000
--- a/external/libcurl_android/jni/libcurl/lib/if2ip.h
+++ /dev/null
@@ -1,74 +0,0 @@
-#ifndef HEADER_CURL_IF2IP_H
-#define HEADER_CURL_IF2IP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-bool Curl_if_is_interface_name(const char *interf);
-
-typedef enum {
- IF2IP_NOT_FOUND = 0, /* Interface not found */
- IF2IP_AF_NOT_SUPPORTED = 1, /* Int. exists but has no address for this af */
- IF2IP_FOUND = 2 /* The address has been stored in "buf" */
-} if2ip_result_t;
-
-if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
- const char *interf, char *buf, int buf_size);
-
-#ifdef __INTERIX
-
-/* Nedelcho Stanev's work-around for SFU 3.0 */
-struct ifreq {
-#define IFNAMSIZ 16
-#define IFHWADDRLEN 6
- union {
- char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */
- } ifr_ifrn;
-
- union {
- struct sockaddr ifru_addr;
- struct sockaddr ifru_broadaddr;
- struct sockaddr ifru_netmask;
- struct sockaddr ifru_hwaddr;
- short ifru_flags;
- int ifru_metric;
- int ifru_mtu;
- } ifr_ifru;
-};
-
-/* This define was added by Daniel to avoid an extra #ifdef INTERIX in the
- C code. */
-
-#define ifr_name ifr_ifrn.ifrn_name /* interface name */
-#define ifr_addr ifr_ifru.ifru_addr /* address */
-#define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */
-#define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */
-#define ifr_flags ifr_ifru.ifru_flags /* flags */
-#define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */
-#define ifr_metric ifr_ifru.ifru_metric /* metric */
-#define ifr_mtu ifr_ifru.ifru_mtu /* mtu */
-
-#define SIOCGIFADDR _IOW('s', 102, struct ifreq) /* Get if addr */
-
-#endif /* __INTERIX */
-
-#endif /* HEADER_CURL_IF2IP_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/imap.c b/external/libcurl_android/jni/libcurl/lib/imap.c
deleted file mode 100755
index 9fc47286..00000000
--- a/external/libcurl_android/jni/libcurl/lib/imap.c
+++ /dev/null
@@ -1,2893 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * RFC2195 CRAM-MD5 authentication
- * RFC2595 Using TLS with IMAP, POP3 and ACAP
- * RFC2831 DIGEST-MD5 authentication
- * RFC3501 IMAPv4 protocol
- * RFC4422 Simple Authentication and Security Layer (SASL)
- * RFC4616 PLAIN authentication
- * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
- * RFC4959 IMAP Extension for SASL Initial Client Response
- * RFC5092 IMAP URL Scheme
- * RFC6749 OAuth 2.0 Authorization Framework
- * Draft LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_IMAP
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "if2ip.h"
-#include "hostip.h"
-#include "progress.h"
-#include "transfer.h"
-#include "escape.h"
-#include "http.h" /* for HTTP proxy tunnel stuff */
-#include "socks.h"
-#include "imap.h"
-
-#include "strtoofft.h"
-#include "strequal.h"
-#include "vtls/vtls.h"
-#include "connect.h"
-#include "strerror.h"
-#include "select.h"
-#include "multiif.h"
-#include "url.h"
-#include "rawstr.h"
-#include "curl_sasl.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* Local API functions */
-static CURLcode imap_regular_transfer(struct connectdata *conn, bool *done);
-static CURLcode imap_do(struct connectdata *conn, bool *done);
-static CURLcode imap_done(struct connectdata *conn, CURLcode status,
- bool premature);
-static CURLcode imap_connect(struct connectdata *conn, bool *done);
-static CURLcode imap_disconnect(struct connectdata *conn, bool dead);
-static CURLcode imap_multi_statemach(struct connectdata *conn, bool *done);
-static int imap_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks);
-static CURLcode imap_doing(struct connectdata *conn, bool *dophase_done);
-static CURLcode imap_setup_connection(struct connectdata *conn);
-static char *imap_atom(const char *str);
-static CURLcode imap_sendf(struct connectdata *conn, const char *fmt, ...);
-static CURLcode imap_parse_url_options(struct connectdata *conn);
-static CURLcode imap_parse_url_path(struct connectdata *conn);
-static CURLcode imap_parse_custom_request(struct connectdata *conn);
-static CURLcode imap_calc_sasl_details(struct connectdata *conn,
- const char **mech,
- char **initresp, size_t *len,
- imapstate *state1, imapstate *state2);
-
-/*
- * IMAP protocol handler.
- */
-
-const struct Curl_handler Curl_handler_imap = {
- "IMAP", /* scheme */
- imap_setup_connection, /* setup_connection */
- imap_do, /* do_it */
- imap_done, /* done */
- ZERO_NULL, /* do_more */
- imap_connect, /* connect_it */
- imap_multi_statemach, /* connecting */
- imap_doing, /* doing */
- imap_getsock, /* proto_getsock */
- imap_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- imap_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_IMAP, /* defport */
- CURLPROTO_IMAP, /* protocol */
- PROTOPT_CLOSEACTION | PROTOPT_NEEDSPWD /* flags */
-};
-
-#ifdef USE_SSL
-/*
- * IMAPS protocol handler.
- */
-
-const struct Curl_handler Curl_handler_imaps = {
- "IMAPS", /* scheme */
- imap_setup_connection, /* setup_connection */
- imap_do, /* do_it */
- imap_done, /* done */
- ZERO_NULL, /* do_more */
- imap_connect, /* connect_it */
- imap_multi_statemach, /* connecting */
- imap_doing, /* doing */
- imap_getsock, /* proto_getsock */
- imap_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- imap_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_IMAPS, /* defport */
- CURLPROTO_IMAPS, /* protocol */
- PROTOPT_CLOSEACTION | PROTOPT_SSL |
- PROTOPT_NEEDSPWD /* flags */
-};
-#endif
-
-#ifndef CURL_DISABLE_HTTP
-/*
- * HTTP-proxyed IMAP protocol handler.
- */
-
-static const struct Curl_handler Curl_handler_imap_proxy = {
- "IMAP", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_IMAP, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-#ifdef USE_SSL
-/*
- * HTTP-proxyed IMAPS protocol handler.
- */
-
-static const struct Curl_handler Curl_handler_imaps_proxy = {
- "IMAPS", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_IMAPS, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-#endif
-#endif
-
-#ifdef USE_SSL
-static void imap_to_imaps(struct connectdata *conn)
-{
- conn->handler = &Curl_handler_imaps;
-}
-#else
-#define imap_to_imaps(x) Curl_nop_stmt
-#endif
-
-/***********************************************************************
- *
- * imap_matchresp()
- *
- * Determines whether the untagged response is related to the specified
- * command by checking if it is in format "* <command-name> ..." or
- * "* <number> <command-name> ...".
- *
- * The "* " marker is assumed to have already been checked by the caller.
- */
-static bool imap_matchresp(const char *line, size_t len, const char *cmd)
-{
- const char *end = line + len;
- size_t cmd_len = strlen(cmd);
-
- /* Skip the untagged response marker */
- line += 2;
-
- /* Do we have a number after the marker? */
- if(line < end && ISDIGIT(*line)) {
- /* Skip the number */
- do
- line++;
- while(line < end && ISDIGIT(*line));
-
- /* Do we have the space character? */
- if(line == end || *line != ' ')
- return FALSE;
-
- line++;
- }
-
- /* Does the command name match and is it followed by a space character or at
- the end of line? */
- if(line + cmd_len <= end && Curl_raw_nequal(line, cmd, cmd_len) &&
- (line[cmd_len] == ' ' || line + cmd_len + 2 == end))
- return TRUE;
-
- return FALSE;
-}
-
-/***********************************************************************
- *
- * imap_endofresp()
- *
- * Checks whether the given string is a valid tagged, untagged or continuation
- * response which can be processed by the response handler.
- */
-static bool imap_endofresp(struct connectdata *conn, char *line, size_t len,
- int *resp)
-{
- struct IMAP *imap = conn->data->req.protop;
- struct imap_conn *imapc = &conn->proto.imapc;
- const char *id = imapc->resptag;
- size_t id_len = strlen(id);
-
- /* Do we have a tagged command response? */
- if(len >= id_len + 1 && !memcmp(id, line, id_len) && line[id_len] == ' ') {
- line += id_len + 1;
- len -= id_len + 1;
-
- if(len >= 2 && !memcmp(line, "OK", 2))
- *resp = 'O';
- else if(len >= 2 && !memcmp(line, "NO", 2))
- *resp = 'N';
- else if(len >= 3 && !memcmp(line, "BAD", 3))
- *resp = 'B';
- else {
- failf(conn->data, "Bad tagged response");
- *resp = -1;
- }
-
- return TRUE;
- }
-
- /* Do we have an untagged command response? */
- if(len >= 2 && !memcmp("* ", line, 2)) {
- switch(imapc->state) {
- /* States which are interested in untagged responses */
- case IMAP_CAPABILITY:
- if(!imap_matchresp(line, len, "CAPABILITY"))
- return FALSE;
- break;
-
- case IMAP_LIST:
- if((!imap->custom && !imap_matchresp(line, len, "LIST")) ||
- (imap->custom && !imap_matchresp(line, len, imap->custom) &&
- (strcmp(imap->custom, "STORE") ||
- !imap_matchresp(line, len, "FETCH")) &&
- strcmp(imap->custom, "SELECT") &&
- strcmp(imap->custom, "EXAMINE") &&
- strcmp(imap->custom, "SEARCH") &&
- strcmp(imap->custom, "EXPUNGE") &&
- strcmp(imap->custom, "LSUB") &&
- strcmp(imap->custom, "UID") &&
- strcmp(imap->custom, "NOOP")))
- return FALSE;
- break;
-
- case IMAP_SELECT:
- /* SELECT is special in that its untagged responses do not have a
- common prefix so accept anything! */
- break;
-
- case IMAP_FETCH:
- if(!imap_matchresp(line, len, "FETCH"))
- return FALSE;
- break;
-
- case IMAP_SEARCH:
- if(!imap_matchresp(line, len, "SEARCH"))
- return FALSE;
- break;
-
- /* Ignore other untagged responses */
- default:
- return FALSE;
- }
-
- *resp = '*';
- return TRUE;
- }
-
- /* Do we have a continuation response? This should be a + symbol followed by
- a space and optionally some text as per RFC-3501 for the AUTHENTICATE and
- APPEND commands and as outlined in Section 4. Examples of RFC-4959 but
- some e-mail servers ignore this and only send a single + instead. */
- if((len == 3 && !memcmp("+", line, 1)) ||
- (len >= 2 && !memcmp("+ ", line, 2))) {
- switch(imapc->state) {
- /* States which are interested in continuation responses */
- case IMAP_AUTHENTICATE_PLAIN:
- case IMAP_AUTHENTICATE_LOGIN:
- case IMAP_AUTHENTICATE_LOGIN_PASSWD:
- case IMAP_AUTHENTICATE_CRAMMD5:
- case IMAP_AUTHENTICATE_DIGESTMD5:
- case IMAP_AUTHENTICATE_DIGESTMD5_RESP:
- case IMAP_AUTHENTICATE_NTLM:
- case IMAP_AUTHENTICATE_NTLM_TYPE2MSG:
- case IMAP_AUTHENTICATE_XOAUTH2:
- case IMAP_AUTHENTICATE_FINAL:
- case IMAP_APPEND:
- *resp = '+';
- break;
-
- default:
- failf(conn->data, "Unexpected continuation response");
- *resp = -1;
- break;
- }
-
- return TRUE;
- }
-
- return FALSE; /* Nothing for us */
-}
-
-/***********************************************************************
- *
- * imap_get_message()
- *
- * Gets the authentication message from the response buffer.
- */
-static void imap_get_message(char *buffer, char** outptr)
-{
- size_t len = 0;
- char* message = NULL;
-
- /* Find the start of the message */
- for(message = buffer + 2; *message == ' ' || *message == '\t'; message++)
- ;
-
- /* Find the end of the message */
- for(len = strlen(message); len--;)
- if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
- message[len] != '\t')
- break;
-
- /* Terminate the message */
- if(++len) {
- message[len] = '\0';
- }
-
- *outptr = message;
-}
-
-/***********************************************************************
- *
- * state()
- *
- * This is the ONLY way to change IMAP state!
- */
-static void state(struct connectdata *conn, imapstate newstate)
-{
- struct imap_conn *imapc = &conn->proto.imapc;
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- /* for debug purposes */
- static const char * const names[]={
- "STOP",
- "SERVERGREET",
- "CAPABILITY",
- "STARTTLS",
- "UPGRADETLS",
- "AUTHENTICATE_PLAIN",
- "AUTHENTICATE_LOGIN",
- "AUTHENTICATE_LOGIN_PASSWD",
- "AUTHENTICATE_CRAMMD5",
- "AUTHENTICATE_DIGESTMD5",
- "AUTHENTICATE_DIGESTMD5_RESP",
- "AUTHENTICATE_NTLM",
- "AUTHENTICATE_NTLM_TYPE2MSG",
- "AUTHENTICATE_GSSAPI",
- "AUTHENTICATE_GSSAPI_TOKEN",
- "AUTHENTICATE_GSSAPI_NO_DATA",
- "AUTHENTICATE_XOAUTH2",
- "AUTHENTICATE_CANCEL",
- "AUTHENTICATE_FINAL",
- "LOGIN",
- "LIST",
- "SELECT",
- "FETCH",
- "FETCH_FINAL",
- "APPEND",
- "APPEND_FINAL",
- "SEARCH",
- "LOGOUT",
- /* LAST */
- };
-
- if(imapc->state != newstate)
- infof(conn->data, "IMAP %p state change from %s to %s\n",
- (void *)imapc, names[imapc->state], names[newstate]);
-#endif
-
- imapc->state = newstate;
-}
-
-/***********************************************************************
- *
- * imap_perform_capability()
- *
- * Sends the CAPABILITY command in order to obtain a list of server side
- * supported capabilities.
- */
-static CURLcode imap_perform_capability(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct imap_conn *imapc = &conn->proto.imapc;
-
- imapc->authmechs = 0; /* No known authentication mechanisms yet */
- imapc->authused = 0; /* Clear the authentication mechanism used */
- imapc->tls_supported = FALSE; /* Clear the TLS capability */
-
- /* Send the CAPABILITY command */
- result = imap_sendf(conn, "CAPABILITY");
-
- if(!result)
- state(conn, IMAP_CAPABILITY);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_starttls()
- *
- * Sends the STARTTLS command to start the upgrade to TLS.
- */
-static CURLcode imap_perform_starttls(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* Send the STARTTLS command */
- result = imap_sendf(conn, "STARTTLS");
-
- if(!result)
- state(conn, IMAP_STARTTLS);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_upgrade_tls()
- *
- * Performs the upgrade to TLS.
- */
-static CURLcode imap_perform_upgrade_tls(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct imap_conn *imapc = &conn->proto.imapc;
-
- /* Start the SSL connection */
- result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &imapc->ssldone);
-
- if(!result) {
- if(imapc->state != IMAP_UPGRADETLS)
- state(conn, IMAP_UPGRADETLS);
-
- if(imapc->ssldone) {
- imap_to_imaps(conn);
- result = imap_perform_capability(conn);
- }
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_login()
- *
- * Sends a clear text LOGIN command to authenticate with.
- */
-static CURLcode imap_perform_login(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- char *user;
- char *passwd;
-
- /* Check we have a username and password to authenticate with and end the
- connect phase if we don't */
- if(!conn->bits.user_passwd) {
- state(conn, IMAP_STOP);
-
- return result;
- }
-
- /* Make sure the username and password are in the correct atom format */
- user = imap_atom(conn->user);
- passwd = imap_atom(conn->passwd);
-
- /* Send the LOGIN command */
- result = imap_sendf(conn, "LOGIN %s %s", user ? user : "",
- passwd ? passwd : "");
-
- Curl_safefree(user);
- Curl_safefree(passwd);
-
- if(!result)
- state(conn, IMAP_LOGIN);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_authenticate()
- *
- * Sends an AUTHENTICATE command allowing the client to login with the given
- * SASL authentication mechanism.
- */
-static CURLcode imap_perform_authenticate(struct connectdata *conn,
- const char *mech,
- const char *initresp,
- imapstate state1, imapstate state2)
-{
- CURLcode result = CURLE_OK;
-
- if(initresp) {
- /* Send the AUTHENTICATE command with the initial response */
- result = imap_sendf(conn, "AUTHENTICATE %s %s", mech, initresp);
-
- if(!result)
- state(conn, state2);
- }
- else {
- /* Send the AUTHENTICATE command */
- result = imap_sendf(conn, "AUTHENTICATE %s", mech);
-
- if(!result)
- state(conn, state1);
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_authentication()
- *
- * Initiates the authentication sequence, with the appropriate SASL
- * authentication mechanism, falling back to clear text should a common
- * mechanism not be available between the client and server.
- */
-static CURLcode imap_perform_authentication(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct imap_conn *imapc = &conn->proto.imapc;
- const char *mech = NULL;
- char *initresp = NULL;
- size_t len = 0;
- imapstate state1 = IMAP_STOP;
- imapstate state2 = IMAP_STOP;
-
- /* Check we have a username and password to authenticate with and end the
- connect phase if we don't */
- if(!conn->bits.user_passwd) {
- state(conn, IMAP_STOP);
-
- return result;
- }
-
- /* Calculate the SASL login details */
- result = imap_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
- &state2);
-
- if(!result) {
- if(mech && (imapc->preftype & IMAP_TYPE_SASL)) {
- /* Perform SASL based authentication */
- result = imap_perform_authenticate(conn, mech, initresp, state1, state2);
-
- Curl_safefree(initresp);
- }
- else if((!imapc->login_disabled) &&
- (imapc->preftype & IMAP_TYPE_CLEARTEXT))
- /* Perform clear text authentication */
- result = imap_perform_login(conn);
- else {
- /* Other mechanisms not supported */
- infof(conn->data, "No known authentication mechanisms supported!\n");
- result = CURLE_LOGIN_DENIED;
- }
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_list()
- *
- * Sends a LIST command or an alternative custom request.
- */
-static CURLcode imap_perform_list(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct IMAP *imap = data->req.protop;
- char *mailbox;
-
- if(imap->custom)
- /* Send the custom request */
- result = imap_sendf(conn, "%s%s", imap->custom,
- imap->custom_params ? imap->custom_params : "");
- else {
- /* Make sure the mailbox is in the correct atom format */
- mailbox = imap_atom(imap->mailbox ? imap->mailbox : "");
- if(!mailbox)
- return CURLE_OUT_OF_MEMORY;
-
- /* Send the LIST command */
- result = imap_sendf(conn, "LIST \"%s\" *", mailbox);
-
- Curl_safefree(mailbox);
- }
-
- if(!result)
- state(conn, IMAP_LIST);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_select()
- *
- * Sends a SELECT command to ask the server to change the selected mailbox.
- */
-static CURLcode imap_perform_select(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct IMAP *imap = data->req.protop;
- struct imap_conn *imapc = &conn->proto.imapc;
- char *mailbox;
-
- /* Invalidate old information as we are switching mailboxes */
- Curl_safefree(imapc->mailbox);
- Curl_safefree(imapc->mailbox_uidvalidity);
-
- /* Check we have a mailbox */
- if(!imap->mailbox) {
- failf(conn->data, "Cannot SELECT without a mailbox.");
- return CURLE_URL_MALFORMAT;
- }
-
- /* Make sure the mailbox is in the correct atom format */
- mailbox = imap_atom(imap->mailbox);
- if(!mailbox)
- return CURLE_OUT_OF_MEMORY;
-
- /* Send the SELECT command */
- result = imap_sendf(conn, "SELECT %s", mailbox);
-
- Curl_safefree(mailbox);
-
- if(!result)
- state(conn, IMAP_SELECT);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_fetch()
- *
- * Sends a FETCH command to initiate the download of a message.
- */
-static CURLcode imap_perform_fetch(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct IMAP *imap = conn->data->req.protop;
-
- /* Check we have a UID */
- if(!imap->uid) {
- failf(conn->data, "Cannot FETCH without a UID.");
- return CURLE_URL_MALFORMAT;
- }
-
- /* Send the FETCH command */
- if(imap->partial)
- result = imap_sendf(conn, "FETCH %s BODY[%s]<%s>",
- imap->uid,
- imap->section ? imap->section : "",
- imap->partial);
- else
- result = imap_sendf(conn, "FETCH %s BODY[%s]",
- imap->uid,
- imap->section ? imap->section : "");
-
- if(!result)
- state(conn, IMAP_FETCH);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_append()
- *
- * Sends an APPEND command to initiate the upload of a message.
- */
-static CURLcode imap_perform_append(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct IMAP *imap = conn->data->req.protop;
- char *mailbox;
-
- /* Check we have a mailbox */
- if(!imap->mailbox) {
- failf(conn->data, "Cannot APPEND without a mailbox.");
- return CURLE_URL_MALFORMAT;
- }
-
- /* Check we know the size of the upload */
- if(conn->data->state.infilesize < 0) {
- failf(conn->data, "Cannot APPEND with unknown input file size\n");
- return CURLE_UPLOAD_FAILED;
- }
-
- /* Make sure the mailbox is in the correct atom format */
- mailbox = imap_atom(imap->mailbox);
- if(!mailbox)
- return CURLE_OUT_OF_MEMORY;
-
- /* Send the APPEND command */
- result = imap_sendf(conn, "APPEND %s (\\Seen) {%" CURL_FORMAT_CURL_OFF_T "}",
- mailbox, conn->data->state.infilesize);
-
- Curl_safefree(mailbox);
-
- if(!result)
- state(conn, IMAP_APPEND);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_search()
- *
- * Sends a SEARCH command.
- */
-static CURLcode imap_perform_search(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct IMAP *imap = conn->data->req.protop;
-
- /* Check we have a query string */
- if(!imap->query) {
- failf(conn->data, "Cannot SEARCH without a query string.");
- return CURLE_URL_MALFORMAT;
- }
-
- /* Send the SEARCH command */
- result = imap_sendf(conn, "SEARCH %s", imap->query);
-
- if(!result)
- state(conn, IMAP_SEARCH);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform_logout()
- *
- * Performs the logout action prior to sclose() being called.
- */
-static CURLcode imap_perform_logout(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* Send the LOGOUT command */
- result = imap_sendf(conn, "LOGOUT");
-
- if(!result)
- state(conn, IMAP_LOGOUT);
-
- return result;
-}
-
-/* For the initial server greeting */
-static CURLcode imap_state_servergreet_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != 'O') {
- failf(data, "Got unexpected imap-server response");
- result = CURLE_FTP_WEIRD_SERVER_REPLY; /* TODO: fix this code */
- }
- else
- result = imap_perform_capability(conn);
-
- return result;
-}
-
-/* For CAPABILITY responses */
-static CURLcode imap_state_capability_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct imap_conn *imapc = &conn->proto.imapc;
- const char *line = data->state.buffer;
- size_t wordlen;
-
- (void)instate; /* no use for this yet */
-
- /* Do we have a untagged response? */
- if(imapcode == '*') {
- line += 2;
-
- /* Loop through the data line */
- for(;;) {
- while(*line &&
- (*line == ' ' || *line == '\t' ||
- *line == '\r' || *line == '\n')) {
-
- line++;
- }
-
- if(!*line)
- break;
-
- /* Extract the word */
- for(wordlen = 0; line[wordlen] && line[wordlen] != ' ' &&
- line[wordlen] != '\t' && line[wordlen] != '\r' &&
- line[wordlen] != '\n';)
- wordlen++;
-
- /* Does the server support the STARTTLS capability? */
- if(wordlen == 8 && !memcmp(line, "STARTTLS", 8))
- imapc->tls_supported = TRUE;
-
- /* Has the server explicitly disabled clear text authentication? */
- else if(wordlen == 13 && !memcmp(line, "LOGINDISABLED", 13))
- imapc->login_disabled = TRUE;
-
- /* Does the server support the SASL-IR capability? */
- else if(wordlen == 7 && !memcmp(line, "SASL-IR", 7))
- imapc->ir_supported = TRUE;
-
- /* Do we have a SASL based authentication mechanism? */
- else if(wordlen > 5 && !memcmp(line, "AUTH=", 5)) {
- line += 5;
- wordlen -= 5;
-
- /* Test the word for a matching authentication mechanism */
- if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_LOGIN))
- imapc->authmechs |= SASL_MECH_LOGIN;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_PLAIN))
- imapc->authmechs |= SASL_MECH_PLAIN;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_CRAM_MD5))
- imapc->authmechs |= SASL_MECH_CRAM_MD5;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_DIGEST_MD5))
- imapc->authmechs |= SASL_MECH_DIGEST_MD5;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_GSSAPI))
- imapc->authmechs |= SASL_MECH_GSSAPI;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_EXTERNAL))
- imapc->authmechs |= SASL_MECH_EXTERNAL;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_NTLM))
- imapc->authmechs |= SASL_MECH_NTLM;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_XOAUTH2))
- imapc->authmechs |= SASL_MECH_XOAUTH2;
- }
-
- line += wordlen;
- }
- }
- else if(imapcode == 'O') {
- if(data->set.use_ssl && !conn->ssl[FIRSTSOCKET].use) {
- /* We don't have a SSL/TLS connection yet, but SSL is requested */
- if(imapc->tls_supported)
- /* Switch to TLS connection now */
- result = imap_perform_starttls(conn);
- else if(data->set.use_ssl == CURLUSESSL_TRY)
- /* Fallback and carry on with authentication */
- result = imap_perform_authentication(conn);
- else {
- failf(data, "STARTTLS not supported.");
- result = CURLE_USE_SSL_FAILED;
- }
- }
- else
- result = imap_perform_authentication(conn);
- }
- else
- result = imap_perform_authentication(conn);
-
- return result;
-}
-
-/* For STARTTLS responses */
-static CURLcode imap_state_starttls_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != 'O') {
- if(data->set.use_ssl != CURLUSESSL_TRY) {
- failf(data, "STARTTLS denied. %c", imapcode);
- result = CURLE_USE_SSL_FAILED;
- }
- else
- result = imap_perform_authentication(conn);
- }
- else
- result = imap_perform_upgrade_tls(conn);
-
- return result;
-}
-
-/* For AUTHENTICATE PLAIN (without initial response) responses */
-static CURLcode imap_state_auth_plain_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *plainauth = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied. %c", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the authorisation message */
- result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
- &plainauth, &len);
- if(!result && plainauth) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", plainauth);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_FINAL);
- }
- }
-
- Curl_safefree(plainauth);
-
- return result;
-}
-
-/* For AUTHENTICATE LOGIN (without initial response) responses */
-static CURLcode imap_state_auth_login_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *authuser = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the user message */
- result = Curl_sasl_create_login_message(data, conn->user,
- &authuser, &len);
- if(!result && authuser) {
- /* Send the user */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", authuser);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_LOGIN_PASSWD);
- }
- }
-
- Curl_safefree(authuser);
-
- return result;
-}
-
-/* For AUTHENTICATE LOGIN user entry responses */
-static CURLcode imap_state_auth_login_password_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *authpasswd = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the password message */
- result = Curl_sasl_create_login_message(data, conn->passwd,
- &authpasswd, &len);
- if(!result && authpasswd) {
- /* Send the password */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", authpasswd);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_FINAL);
- }
- }
-
- Curl_safefree(authpasswd);
-
- return result;
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/* For AUTHENTICATE CRAM-MD5 responses */
-static CURLcode imap_state_auth_cram_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlg = NULL;
- char *chlg64 = NULL;
- char *rplyb64 = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- return CURLE_LOGIN_DENIED;
- }
-
- /* Get the challenge message */
- imap_get_message(data->state.buffer, &chlg64);
-
- /* Decode the challenge message */
- result = Curl_sasl_decode_cram_md5_message(chlg64, &chlg, &len);
- if(result) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "*");
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_CANCEL);
- }
- else {
- /* Create the response message */
- result = Curl_sasl_create_cram_md5_message(data, chlg, conn->user,
- conn->passwd, &rplyb64, &len);
- if(!result && rplyb64) {
- /* Send the response */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", rplyb64);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_FINAL);
- }
- }
-
- Curl_safefree(chlg);
- Curl_safefree(rplyb64);
-
- return result;
-}
-
-/* For AUTHENTICATE DIGEST-MD5 challenge responses */
-static CURLcode imap_state_auth_digest_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlg64 = NULL;
- char *rplyb64 = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- return CURLE_LOGIN_DENIED;
- }
-
- /* Get the challenge message */
- imap_get_message(data->state.buffer, &chlg64);
-
- /* Create the response message */
- result = Curl_sasl_create_digest_md5_message(data, chlg64,
- conn->user, conn->passwd,
- "imap", &rplyb64, &len);
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "*");
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_CANCEL);
- }
- }
- else {
- /* Send the response */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", rplyb64);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_DIGESTMD5_RESP);
- }
-
- Curl_safefree(rplyb64);
-
- return result;
-}
-
-/* For AUTHENTICATE DIGEST-MD5 challenge-response responses */
-static CURLcode imap_state_auth_digest_resp_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Authentication failed: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Send an empty response */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "");
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_FINAL);
- }
-
- return result;
-}
-#endif
-
-#ifdef USE_NTLM
-/* For AUTHENTICATE NTLM (without initial response) responses */
-static CURLcode imap_state_auth_ntlm_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *type1msg = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the type-1 message */
- result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
- &conn->ntlm,
- &type1msg, &len);
- if(!result && type1msg) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", type1msg);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_NTLM_TYPE2MSG);
- }
- }
-
- Curl_safefree(type1msg);
-
- return result;
-}
-
-/* For NTLM type-2 responses (sent in reponse to our type-1 message) */
-static CURLcode imap_state_auth_ntlm_type2msg_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *type2msg = NULL;
- char *type3msg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the challenge message */
- imap_get_message(data->state.buffer, &type2msg);
-
- /* Decode the type-2 message */
- result = Curl_sasl_decode_ntlm_type2_message(data, type2msg, &conn->ntlm);
- if(result) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "*");
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_CANCEL);
- }
- else {
- /* Create the type-3 message */
- result = Curl_sasl_create_ntlm_type3_message(data, conn->user,
- conn->passwd, &conn->ntlm,
- &type3msg, &len);
- if(!result && type3msg) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", type3msg);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_FINAL);
- }
- }
- }
-
- Curl_safefree(type3msg);
-
- return result;
-}
-#endif
-
-#if defined(USE_WINDOWS_SSPI)
-/* For AUTHENTICATE GSSAPI (without initial response) responses */
-static CURLcode imap_state_auth_gssapi_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct imap_conn *imapc = &conn->proto.imapc;
- size_t len = 0;
- char *respmsg = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the initial response message */
- result = Curl_sasl_create_gssapi_user_message(data, conn->user,
- conn->passwd, "imap",
- imapc->mutual_auth,
- NULL, &conn->krb5,
- &respmsg, &len);
- if(!result && respmsg) {
- /* Send the message */
- result = Curl_pp_sendf(&imapc->pp, "%s", respmsg);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_GSSAPI_TOKEN);
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-
-/* For AUTHENTICATE GSSAPI user token responses */
-static CURLcode imap_state_auth_gssapi_token_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct imap_conn *imapc = &conn->proto.imapc;
- char *chlgmsg = NULL;
- char *respmsg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the challenge message */
- imap_get_message(data->state.buffer, &chlgmsg);
-
- if(imapc->mutual_auth)
- /* Decode the user token challenge and create the optional response
- message */
- result = Curl_sasl_create_gssapi_user_message(data, NULL, NULL, NULL,
- imapc->mutual_auth,
- chlgmsg, &conn->krb5,
- &respmsg, &len);
- else
- /* Decode the security challenge and create the response message */
- result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
- &conn->krb5,
- &respmsg, &len);
-
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&imapc->pp, "%s", "*");
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_CANCEL);
- }
- }
- else {
- /* Send the response */
- if(respmsg)
- result = Curl_pp_sendf(&imapc->pp, "%s", respmsg);
- else
- result = Curl_pp_sendf(&imapc->pp, "%s", "");
-
- if(!result)
- state(conn, (imapc->mutual_auth ? IMAP_AUTHENTICATE_GSSAPI_NO_DATA :
- IMAP_AUTHENTICATE_FINAL));
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-
-/* For AUTHENTICATE GSSAPI no data responses */
-static CURLcode imap_state_auth_gssapi_no_data_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlgmsg = NULL;
- char *respmsg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the challenge message */
- imap_get_message(data->state.buffer, &chlgmsg);
-
- /* Decode the security challenge and create the response message */
- result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
- &conn->krb5,
- &respmsg, &len);
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "*");
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_CANCEL);
- }
- }
- else {
- /* Send the response */
- if(respmsg) {
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", respmsg);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_FINAL);
- }
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-#endif
-
-/* For AUTHENTICATE XOAUTH2 (without initial response) responses */
-static CURLcode imap_state_auth_xoauth2_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *xoauth = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '+') {
- failf(data, "Access denied: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the authorisation message */
- result = Curl_sasl_create_xoauth2_message(conn->data, conn->user,
- conn->xoauth2_bearer,
- &xoauth, &len);
- if(!result && xoauth) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", xoauth);
-
- if(!result)
- state(conn, IMAP_AUTHENTICATE_FINAL);
- }
- }
-
- Curl_safefree(xoauth);
-
- return result;
-}
-
-/* For AUTHENTICATE cancellation responses */
-static CURLcode imap_state_auth_cancel_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct imap_conn *imapc = &conn->proto.imapc;
- const char *mech = NULL;
- char *initresp = NULL;
- size_t len = 0;
- imapstate state1 = IMAP_STOP;
- imapstate state2 = IMAP_STOP;
-
- (void)imapcode;
- (void)instate; /* no use for this yet */
-
- /* Remove the offending mechanism from the supported list */
- imapc->authmechs ^= imapc->authused;
-
- /* Calculate alternative SASL login details */
- result = imap_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
- &state2);
-
- if(!result) {
- /* Do we have any mechanisms left or can we fallback to clear text? */
- if(mech) {
- /* Retry SASL based authentication */
- result = imap_perform_authenticate(conn, mech, initresp, state1, state2);
-
- Curl_safefree(initresp);
- }
- else if((!imapc->login_disabled) &&
- (imapc->preftype & IMAP_TYPE_CLEARTEXT))
- /* Perform clear text authentication */
- result = imap_perform_login(conn);
- else {
- failf(data, "Authentication cancelled");
-
- result = CURLE_LOGIN_DENIED;
- }
- }
-
- return result;
-}
-
-/* For final responses in the AUTHENTICATE sequence */
-static CURLcode imap_state_auth_final_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != 'O') {
- failf(data, "Authentication failed: %d", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else
- /* End of connect phase */
- state(conn, IMAP_STOP);
-
- return result;
-}
-
-/* For LOGIN responses */
-static CURLcode imap_state_login_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != 'O') {
- failf(data, "Access denied. %c", imapcode);
- result = CURLE_LOGIN_DENIED;
- }
- else
- /* End of connect phase */
- state(conn, IMAP_STOP);
-
- return result;
-}
-
-/* For LIST responses */
-static CURLcode imap_state_list_resp(struct connectdata *conn, int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- char *line = conn->data->state.buffer;
- size_t len = strlen(line);
-
- (void)instate; /* No use for this yet */
-
- if(imapcode == '*') {
- /* Temporarily add the LF character back and send as body to the client */
- line[len] = '\n';
- result = Curl_client_write(conn, CLIENTWRITE_BODY, line, len + 1);
- line[len] = '\0';
- }
- else if(imapcode != 'O')
- result = CURLE_QUOTE_ERROR; /* TODO: Fix error code */
- else
- /* End of DO phase */
- state(conn, IMAP_STOP);
-
- return result;
-}
-
-/* For SELECT responses */
-static CURLcode imap_state_select_resp(struct connectdata *conn, int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct IMAP *imap = conn->data->req.protop;
- struct imap_conn *imapc = &conn->proto.imapc;
- const char *line = data->state.buffer;
- char tmp[20];
-
- (void)instate; /* no use for this yet */
-
- if(imapcode == '*') {
- /* See if this is an UIDVALIDITY response */
- if(sscanf(line + 2, "OK [UIDVALIDITY %19[0123456789]]", tmp) == 1) {
- Curl_safefree(imapc->mailbox_uidvalidity);
- imapc->mailbox_uidvalidity = strdup(tmp);
- }
- }
- else if(imapcode == 'O') {
- /* Check if the UIDVALIDITY has been specified and matches */
- if(imap->uidvalidity && imapc->mailbox_uidvalidity &&
- strcmp(imap->uidvalidity, imapc->mailbox_uidvalidity)) {
- failf(conn->data, "Mailbox UIDVALIDITY has changed");
- result = CURLE_REMOTE_FILE_NOT_FOUND;
- }
- else {
- /* Note the currently opened mailbox on this connection */
- imapc->mailbox = strdup(imap->mailbox);
-
- if(imap->custom)
- result = imap_perform_list(conn);
- else if(imap->query)
- result = imap_perform_search(conn);
- else
- result = imap_perform_fetch(conn);
- }
- }
- else {
- failf(data, "Select failed");
- result = CURLE_LOGIN_DENIED;
- }
-
- return result;
-}
-
-/* For the (first line of the) FETCH responses */
-static CURLcode imap_state_fetch_resp(struct connectdata *conn, int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct imap_conn *imapc = &conn->proto.imapc;
- struct pingpong *pp = &imapc->pp;
- const char *ptr = data->state.buffer;
- bool parsed = FALSE;
- curl_off_t size;
-
- (void)instate; /* no use for this yet */
-
- if(imapcode != '*') {
- Curl_pgrsSetDownloadSize(data, -1);
- state(conn, IMAP_STOP);
- return CURLE_REMOTE_FILE_NOT_FOUND; /* TODO: Fix error code */
- }
-
- /* Something like this is received "* 1 FETCH (BODY[TEXT] {2021}\r" so parse
- the continuation data contained within the curly brackets */
- while(*ptr && (*ptr != '{'))
- ptr++;
-
- if(*ptr == '{') {
- char *endptr;
- size = curlx_strtoofft(ptr + 1, &endptr, 10);
- if(endptr - ptr > 1 && endptr[0] == '}' &&
- endptr[1] == '\r' && endptr[2] == '\0')
- parsed = TRUE;
- }
-
- if(parsed) {
- infof(data, "Found %" CURL_FORMAT_CURL_OFF_TU " bytes to download\n",
- size);
- Curl_pgrsSetDownloadSize(data, size);
-
- if(pp->cache) {
- /* At this point there is a bunch of data in the header "cache" that is
- actually body content, send it as body and then skip it. Do note
- that there may even be additional "headers" after the body. */
- size_t chunk = pp->cache_size;
-
- if(chunk > (size_t)size)
- /* The conversion from curl_off_t to size_t is always fine here */
- chunk = (size_t)size;
-
- result = Curl_client_write(conn, CLIENTWRITE_BODY, pp->cache, chunk);
- if(result)
- return result;
-
- data->req.bytecount += chunk;
-
- infof(data, "Written %" CURL_FORMAT_CURL_OFF_TU
- " bytes, %" CURL_FORMAT_CURL_OFF_TU
- " bytes are left for transfer\n", (curl_off_t)chunk,
- size - chunk);
-
- /* Have we used the entire cache or just part of it?*/
- if(pp->cache_size > chunk) {
- /* Only part of it so shrink the cache to fit the trailing data */
- memmove(pp->cache, pp->cache + chunk, pp->cache_size - chunk);
- pp->cache_size -= chunk;
- }
- else {
- /* Free the cache */
- Curl_safefree(pp->cache);
-
- /* Reset the cache size */
- pp->cache_size = 0;
- }
- }
-
- if(data->req.bytecount == size)
- /* The entire data is already transferred! */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- else {
- /* IMAP download */
- data->req.maxdownload = size;
- Curl_setup_transfer(conn, FIRSTSOCKET, size, FALSE, NULL, -1, NULL);
- }
- }
- else {
- /* We don't know how to parse this line */
- failf(pp->conn->data, "Failed to parse FETCH response.");
- result = CURLE_FTP_WEIRD_SERVER_REPLY; /* TODO: fix this code */
- }
-
- /* End of DO phase */
- state(conn, IMAP_STOP);
-
- return result;
-}
-
-/* For final FETCH responses performed after the download */
-static CURLcode imap_state_fetch_final_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
-
- (void)instate; /* No use for this yet */
-
- if(imapcode != 'O')
- result = CURLE_FTP_WEIRD_SERVER_REPLY; /* TODO: Fix error code */
- else
- /* End of DONE phase */
- state(conn, IMAP_STOP);
-
- return result;
-}
-
-/* For APPEND responses */
-static CURLcode imap_state_append_resp(struct connectdata *conn, int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* No use for this yet */
-
- if(imapcode != '+') {
- result = CURLE_UPLOAD_FAILED;
- }
- else {
- /* Set the progress upload size */
- Curl_pgrsSetUploadSize(data, data->state.infilesize);
-
- /* IMAP upload */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
-
- /* End of DO phase */
- state(conn, IMAP_STOP);
- }
-
- return result;
-}
-
-/* For final APPEND responses performed after the upload */
-static CURLcode imap_state_append_final_resp(struct connectdata *conn,
- int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
-
- (void)instate; /* No use for this yet */
-
- if(imapcode != 'O')
- result = CURLE_UPLOAD_FAILED;
- else
- /* End of DONE phase */
- state(conn, IMAP_STOP);
-
- return result;
-}
-
-/* For SEARCH responses */
-static CURLcode imap_state_search_resp(struct connectdata *conn, int imapcode,
- imapstate instate)
-{
- CURLcode result = CURLE_OK;
- char *line = conn->data->state.buffer;
- size_t len = strlen(line);
-
- (void)instate; /* No use for this yet */
-
- if(imapcode == '*') {
- /* Temporarily add the LF character back and send as body to the client */
- line[len] = '\n';
- result = Curl_client_write(conn, CLIENTWRITE_BODY, line, len + 1);
- line[len] = '\0';
- }
- else if(imapcode != 'O')
- result = CURLE_QUOTE_ERROR; /* TODO: Fix error code */
- else
- /* End of DO phase */
- state(conn, IMAP_STOP);
-
- return result;
-}
-
-static CURLcode imap_statemach_act(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
- int imapcode;
- struct imap_conn *imapc = &conn->proto.imapc;
- struct pingpong *pp = &imapc->pp;
- size_t nread = 0;
-
- /* Busy upgrading the connection; right now all I/O is SSL/TLS, not IMAP */
- if(imapc->state == IMAP_UPGRADETLS)
- return imap_perform_upgrade_tls(conn);
-
- /* Flush any data that needs to be sent */
- if(pp->sendleft)
- return Curl_pp_flushsend(pp);
-
- do {
- /* Read the response from the server */
- result = Curl_pp_readresp(sock, pp, &imapcode, &nread);
- if(result)
- return result;
-
- /* Was there an error parsing the response line? */
- if(imapcode == -1)
- return CURLE_FTP_WEIRD_SERVER_REPLY;
-
- if(!imapcode)
- break;
-
- /* We have now received a full IMAP server response */
- switch(imapc->state) {
- case IMAP_SERVERGREET:
- result = imap_state_servergreet_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_CAPABILITY:
- result = imap_state_capability_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_STARTTLS:
- result = imap_state_starttls_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_PLAIN:
- result = imap_state_auth_plain_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_LOGIN:
- result = imap_state_auth_login_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_LOGIN_PASSWD:
- result = imap_state_auth_login_password_resp(conn, imapcode,
- imapc->state);
- break;
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- case IMAP_AUTHENTICATE_CRAMMD5:
- result = imap_state_auth_cram_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_DIGESTMD5:
- result = imap_state_auth_digest_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_DIGESTMD5_RESP:
- result = imap_state_auth_digest_resp_resp(conn, imapcode, imapc->state);
- break;
-#endif
-
-#ifdef USE_NTLM
- case IMAP_AUTHENTICATE_NTLM:
- result = imap_state_auth_ntlm_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_NTLM_TYPE2MSG:
- result = imap_state_auth_ntlm_type2msg_resp(conn, imapcode,
- imapc->state);
- break;
-#endif
-
-#if defined(USE_WINDOWS_SSPI)
- case IMAP_AUTHENTICATE_GSSAPI:
- result = imap_state_auth_gssapi_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_GSSAPI_TOKEN:
- result = imap_state_auth_gssapi_token_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_GSSAPI_NO_DATA:
- result = imap_state_auth_gssapi_no_data_resp(conn, imapcode,
- imapc->state);
- break;
-#endif
-
- case IMAP_AUTHENTICATE_XOAUTH2:
- result = imap_state_auth_xoauth2_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_CANCEL:
- result = imap_state_auth_cancel_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_AUTHENTICATE_FINAL:
- result = imap_state_auth_final_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_LOGIN:
- result = imap_state_login_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_LIST:
- result = imap_state_list_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_SELECT:
- result = imap_state_select_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_FETCH:
- result = imap_state_fetch_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_FETCH_FINAL:
- result = imap_state_fetch_final_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_APPEND:
- result = imap_state_append_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_APPEND_FINAL:
- result = imap_state_append_final_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_SEARCH:
- result = imap_state_search_resp(conn, imapcode, imapc->state);
- break;
-
- case IMAP_LOGOUT:
- /* fallthrough, just stop! */
- default:
- /* internal error */
- state(conn, IMAP_STOP);
- break;
- }
- } while(!result && imapc->state != IMAP_STOP && Curl_pp_moredata(pp));
-
- return result;
-}
-
-/* Called repeatedly until done from multi.c */
-static CURLcode imap_multi_statemach(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
- struct imap_conn *imapc = &conn->proto.imapc;
-
- if((conn->handler->flags & PROTOPT_SSL) && !imapc->ssldone) {
- result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &imapc->ssldone);
- if(result || !imapc->ssldone)
- return result;
- }
-
- result = Curl_pp_statemach(&imapc->pp, FALSE);
- *done = (imapc->state == IMAP_STOP) ? TRUE : FALSE;
-
- return result;
-}
-
-static CURLcode imap_block_statemach(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct imap_conn *imapc = &conn->proto.imapc;
-
- while(imapc->state != IMAP_STOP && !result)
- result = Curl_pp_statemach(&imapc->pp, TRUE);
-
- return result;
-}
-
-/* Allocate and initialize the struct IMAP for the current SessionHandle if
- required */
-static CURLcode imap_init(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct IMAP *imap;
-
- imap = data->req.protop = calloc(sizeof(struct IMAP), 1);
- if(!imap)
- result = CURLE_OUT_OF_MEMORY;
-
- return result;
-}
-
-/* For the IMAP "protocol connect" and "doing" phases only */
-static int imap_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks)
-{
- return Curl_pp_getsock(&conn->proto.imapc.pp, socks, numsocks);
-}
-
-/***********************************************************************
- *
- * imap_connect()
- *
- * This function should do everything that is to be considered a part of the
- * connection phase.
- *
- * The variable 'done' points to will be TRUE if the protocol-layer connect
- * phase is done when this function returns, or FALSE if not.
- */
-static CURLcode imap_connect(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
- struct imap_conn *imapc = &conn->proto.imapc;
- struct pingpong *pp = &imapc->pp;
-
- *done = FALSE; /* default to not done yet */
-
- /* We always support persistent connections in IMAP */
- connkeep(conn, "IMAP default");
-
- /* Set the default response time-out */
- pp->response_time = RESP_TIMEOUT;
- pp->statemach_act = imap_statemach_act;
- pp->endofresp = imap_endofresp;
- pp->conn = conn;
-
- /* Set the default preferred authentication type and mechanism */
- imapc->preftype = IMAP_TYPE_ANY;
- imapc->prefmech = SASL_AUTH_ANY;
-
- /* Initialise the pingpong layer */
- Curl_pp_init(pp);
-
- /* Parse the URL options */
- result = imap_parse_url_options(conn);
- if(result)
- return result;
-
- /* Start off waiting for the server greeting response */
- state(conn, IMAP_SERVERGREET);
-
- /* Start off with an response id of '*' */
- strcpy(imapc->resptag, "*");
-
- result = imap_multi_statemach(conn, done);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_done()
- *
- * The DONE function. This does what needs to be done after a single DO has
- * performed.
- *
- * Input argument is already checked for validity.
- */
-static CURLcode imap_done(struct connectdata *conn, CURLcode status,
- bool premature)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct IMAP *imap = data->req.protop;
-
- (void)premature;
-
- if(!imap)
- /* When the easy handle is removed from the multi interface while libcurl
- is still trying to resolve the host name, the IMAP struct is not yet
- initialized. However, the removal action calls Curl_done() which in
- turn calls this function, so we simply return success. */
- return CURLE_OK;
-
- if(status) {
- connclose(conn, "IMAP done with bad status"); /* marked for closure */
- result = status; /* use the already set error code */
- }
- else if(!data->set.connect_only && !imap->custom &&
- (imap->uid || data->set.upload)) {
- /* Handle responses after FETCH or APPEND transfer has finished */
- if(!data->set.upload)
- state(conn, IMAP_FETCH_FINAL);
- else {
- /* End the APPEND command first by sending an empty line */
- result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "");
- if(!result)
- state(conn, IMAP_APPEND_FINAL);
- }
-
- /* Run the state-machine
-
- TODO: when the multi interface is used, this _really_ should be using
- the imap_multi_statemach function but we have no general support for
- non-blocking DONE operations, not in the multi state machine and with
- Curl_done() invokes on several places in the code!
- */
- if(!result)
- result = imap_block_statemach(conn);
- }
-
- /* Cleanup our per-request based variables */
- Curl_safefree(imap->mailbox);
- Curl_safefree(imap->uidvalidity);
- Curl_safefree(imap->uid);
- Curl_safefree(imap->section);
- Curl_safefree(imap->partial);
- Curl_safefree(imap->query);
- Curl_safefree(imap->custom);
- Curl_safefree(imap->custom_params);
-
- /* Clear the transfer mode for the next request */
- imap->transfer = FTPTRANSFER_BODY;
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_perform()
- *
- * This is the actual DO function for IMAP. Fetch or append a message, or do
- * other things according to the options previously setup.
- */
-static CURLcode imap_perform(struct connectdata *conn, bool *connected,
- bool *dophase_done)
-{
- /* This is IMAP and no proxy */
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct IMAP *imap = data->req.protop;
- struct imap_conn *imapc = &conn->proto.imapc;
- bool selected = FALSE;
-
- DEBUGF(infof(conn->data, "DO phase starts\n"));
-
- if(conn->data->set.opt_no_body) {
- /* Requested no body means no transfer */
- imap->transfer = FTPTRANSFER_INFO;
- }
-
- *dophase_done = FALSE; /* not done yet */
-
- /* Determine if the requested mailbox (with the same UIDVALIDITY if set)
- has already been selected on this connection */
- if(imap->mailbox && imapc->mailbox &&
- !strcmp(imap->mailbox, imapc->mailbox) &&
- (!imap->uidvalidity || !imapc->mailbox_uidvalidity ||
- !strcmp(imap->uidvalidity, imapc->mailbox_uidvalidity)))
- selected = TRUE;
-
- /* Start the first command in the DO phase */
- if(conn->data->set.upload)
- /* APPEND can be executed directly */
- result = imap_perform_append(conn);
- else if(imap->custom && (selected || !imap->mailbox))
- /* Custom command using the same mailbox or no mailbox */
- result = imap_perform_list(conn);
- else if(!imap->custom && selected && imap->uid)
- /* FETCH from the same mailbox */
- result = imap_perform_fetch(conn);
- else if(!imap->custom && selected && imap->query)
- /* SEARCH the current mailbox */
- result = imap_perform_search(conn);
- else if(imap->mailbox && !selected &&
- (imap->custom || imap->uid || imap->query))
- /* SELECT the mailbox */
- result = imap_perform_select(conn);
- else
- /* LIST */
- result = imap_perform_list(conn);
-
- if(result)
- return result;
-
- /* Run the state-machine */
- result = imap_multi_statemach(conn, dophase_done);
-
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
-
- if(*dophase_done)
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_do()
- *
- * This function is registered as 'curl_do' function. It decodes the path
- * parts etc as a wrapper to the actual DO function (imap_perform).
- *
- * The input argument is already checked for validity.
- */
-static CURLcode imap_do(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
-
- *done = FALSE; /* default to false */
-
- /* Parse the URL path */
- result = imap_parse_url_path(conn);
- if(result)
- return result;
-
- /* Parse the custom request */
- result = imap_parse_custom_request(conn);
- if(result)
- return result;
-
- result = imap_regular_transfer(conn, done);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_disconnect()
- *
- * Disconnect from an IMAP server. Cleanup protocol-specific per-connection
- * resources. BLOCKING.
- */
-static CURLcode imap_disconnect(struct connectdata *conn, bool dead_connection)
-{
- struct imap_conn *imapc = &conn->proto.imapc;
-
- /* We cannot send quit unconditionally. If this connection is stale or
- bad in any way, sending quit and waiting around here will make the
- disconnect wait in vain and cause more problems than we need to. */
-
- /* The IMAP session may or may not have been allocated/setup at this
- point! */
- if(!dead_connection && imapc->pp.conn && imapc->pp.conn->bits.protoconnstart)
- if(!imap_perform_logout(conn))
- (void)imap_block_statemach(conn); /* ignore errors on LOGOUT */
-
- /* Disconnect from the server */
- Curl_pp_disconnect(&imapc->pp);
-
- /* Cleanup the SASL module */
- Curl_sasl_cleanup(conn, imapc->authused);
-
- /* Cleanup our connection based variables */
- Curl_safefree(imapc->mailbox);
- Curl_safefree(imapc->mailbox_uidvalidity);
-
- return CURLE_OK;
-}
-
-/* Call this when the DO phase has completed */
-static CURLcode imap_dophase_done(struct connectdata *conn, bool connected)
-{
- struct IMAP *imap = conn->data->req.protop;
-
- (void)connected;
-
- if(imap->transfer != FTPTRANSFER_BODY)
- /* no data to transfer */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
-
- return CURLE_OK;
-}
-
-/* Called from multi.c while DOing */
-static CURLcode imap_doing(struct connectdata *conn, bool *dophase_done)
-{
- CURLcode result = imap_multi_statemach(conn, dophase_done);
-
- if(result)
- DEBUGF(infof(conn->data, "DO phase failed\n"));
- else if(*dophase_done) {
- result = imap_dophase_done(conn, FALSE /* not connected */);
-
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_regular_transfer()
- *
- * The input argument is already checked for validity.
- *
- * Performs all commands done before a regular transfer between a local and a
- * remote host.
- */
-static CURLcode imap_regular_transfer(struct connectdata *conn,
- bool *dophase_done)
-{
- CURLcode result = CURLE_OK;
- bool connected = FALSE;
- struct SessionHandle *data = conn->data;
-
- /* Make sure size is unknown at this point */
- data->req.size = -1;
-
- /* Set the progress data */
- Curl_pgrsSetUploadCounter(data, 0);
- Curl_pgrsSetDownloadCounter(data, 0);
- Curl_pgrsSetUploadSize(data, -1);
- Curl_pgrsSetDownloadSize(data, -1);
-
- /* Carry out the perform */
- result = imap_perform(conn, &connected, dophase_done);
-
- /* Perform post DO phase operations if necessary */
- if(!result && *dophase_done)
- result = imap_dophase_done(conn, connected);
-
- return result;
-}
-
-static CURLcode imap_setup_connection(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
-
- /* Initialise the IMAP layer */
- CURLcode result = imap_init(conn);
- if(result)
- return result;
-
- if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) {
- /* Unless we have asked to tunnel IMAP operations through the proxy, we
- switch and use HTTP operations only */
-#ifndef CURL_DISABLE_HTTP
- if(conn->handler == &Curl_handler_imap)
- conn->handler = &Curl_handler_imap_proxy;
- else {
-#ifdef USE_SSL
- conn->handler = &Curl_handler_imaps_proxy;
-#else
- failf(data, "IMAPS not supported!");
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- }
-
- /* set it up as an HTTP connection instead */
- return conn->handler->setup_connection(conn);
-#else
- failf(data, "IMAP over http proxy requires HTTP support built-in!");
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- }
-
- data->state.path++; /* don't include the initial slash */
-
- return CURLE_OK;
-}
-
-/***********************************************************************
- *
- * imap_sendf()
- *
- * Sends the formated string as an IMAP command to the server.
- *
- * Designed to never block.
- */
-static CURLcode imap_sendf(struct connectdata *conn, const char *fmt, ...)
-{
- CURLcode result = CURLE_OK;
- struct imap_conn *imapc = &conn->proto.imapc;
- char *taggedfmt;
- va_list ap;
-
- DEBUGASSERT(fmt);
-
- /* Calculate the next command ID wrapping at 3 digits */
- imapc->cmdid = (imapc->cmdid + 1) % 1000;
-
- /* Calculate the tag based on the connection ID and command ID */
- snprintf(imapc->resptag, sizeof(imapc->resptag), "%c%03d",
- 'A' + curlx_sltosi(conn->connection_id % 26), imapc->cmdid);
-
- /* Prefix the format with the tag */
- taggedfmt = aprintf("%s %s", imapc->resptag, fmt);
- if(!taggedfmt)
- return CURLE_OUT_OF_MEMORY;
-
- /* Send the data with the tag */
- va_start(ap, fmt);
- result = Curl_pp_vsendf(&imapc->pp, taggedfmt, ap);
- va_end(ap);
-
- Curl_safefree(taggedfmt);
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_atom()
- *
- * Checks the input string for characters that need escaping and returns an
- * atom ready for sending to the server.
- *
- * The returned string needs to be freed.
- *
- */
-static char *imap_atom(const char *str)
-{
- const char *p1;
- char *p2;
- size_t backsp_count = 0;
- size_t quote_count = 0;
- bool space_exists = FALSE;
- size_t newlen = 0;
- char *newstr = NULL;
-
- if(!str)
- return NULL;
-
- /* Count any unescapped characters */
- p1 = str;
- while(*p1) {
- if(*p1 == '\\')
- backsp_count++;
- else if(*p1 == '"')
- quote_count++;
- else if(*p1 == ' ')
- space_exists = TRUE;
-
- p1++;
- }
-
- /* Does the input contain any unescapped characters? */
- if(!backsp_count && !quote_count && !space_exists)
- return strdup(str);
-
- /* Calculate the new string length */
- newlen = strlen(str) + backsp_count + quote_count + (space_exists ? 2 : 0);
-
- /* Allocate the new string */
- newstr = (char *) malloc((newlen + 1) * sizeof(char));
- if(!newstr)
- return NULL;
-
- /* Surround the string in quotes if necessary */
- p2 = newstr;
- if(space_exists) {
- newstr[0] = '"';
- newstr[newlen - 1] = '"';
- p2++;
- }
-
- /* Copy the string, escaping backslash and quote characters along the way */
- p1 = str;
- while(*p1) {
- if(*p1 == '\\' || *p1 == '"') {
- *p2 = '\\';
- p2++;
- }
-
- *p2 = *p1;
-
- p1++;
- p2++;
- }
-
- /* Terminate the string */
- newstr[newlen] = '\0';
-
- return newstr;
-}
-
-/***********************************************************************
- *
- * imap_is_bchar()
- *
- * Portable test of whether the specified char is a "bchar" as defined in the
- * grammar of RFC-5092.
- */
-static bool imap_is_bchar(char ch)
-{
- switch(ch) {
- /* bchar */
- case ':': case '@': case '/':
- /* bchar -> achar */
- case '&': case '=':
- /* bchar -> achar -> uchar -> unreserved */
- case '0': case '1': case '2': case '3': case '4': case '5': case '6':
- case '7': case '8': case '9':
- case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
- case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N':
- case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U':
- case 'V': case 'W': case 'X': case 'Y': case 'Z':
- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
- case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n':
- case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u':
- case 'v': case 'w': case 'x': case 'y': case 'z':
- case '-': case '.': case '_': case '~':
- /* bchar -> achar -> uchar -> sub-delims-sh */
- case '!': case '$': case '\'': case '(': case ')': case '*':
- case '+': case ',':
- /* bchar -> achar -> uchar -> pct-encoded */
- case '%': /* HEXDIG chars are already included above */
- return true;
-
- default:
- return false;
- }
-}
-
-/***********************************************************************
- *
- * imap_parse_url_options()
- *
- * Parse the URL login options.
- */
-static CURLcode imap_parse_url_options(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct imap_conn *imapc = &conn->proto.imapc;
- const char *options = conn->options;
- const char *ptr = options;
- bool reset = TRUE;
-
- while(ptr && *ptr) {
- const char *key = ptr;
-
- while(*ptr && *ptr != '=')
- ptr++;
-
- if(strnequal(key, "AUTH", 4)) {
- size_t len = 0;
- const char *value = ++ptr;
-
- if(reset) {
- reset = FALSE;
- imapc->preftype = IMAP_TYPE_NONE;
- imapc->prefmech = SASL_AUTH_NONE;
- }
-
- while(*ptr && *ptr != ';') {
- ptr++;
- len++;
- }
-
- if(strnequal(value, "*", len)) {
- imapc->preftype = IMAP_TYPE_ANY;
- imapc->prefmech = SASL_AUTH_ANY;
- }
- else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) {
- imapc->preftype = IMAP_TYPE_SASL;
- imapc->prefmech |= SASL_MECH_LOGIN;
- }
- else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) {
- imapc->preftype = IMAP_TYPE_SASL;
- imapc->prefmech |= SASL_MECH_PLAIN;
- }
- else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) {
- imapc->preftype = IMAP_TYPE_SASL;
- imapc->prefmech |= SASL_MECH_CRAM_MD5;
- }
- else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) {
- imapc->preftype = IMAP_TYPE_SASL;
- imapc->prefmech |= SASL_MECH_DIGEST_MD5;
- }
- else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) {
- imapc->preftype = IMAP_TYPE_SASL;
- imapc->prefmech |= SASL_MECH_GSSAPI;
- }
- else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) {
- imapc->preftype = IMAP_TYPE_SASL;
- imapc->prefmech |= SASL_MECH_NTLM;
- }
- else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) {
- imapc->preftype = IMAP_TYPE_SASL;
- imapc->prefmech |= SASL_MECH_XOAUTH2;
- }
-
- if(*ptr == ';')
- ptr++;
- }
- else
- result = CURLE_URL_MALFORMAT;
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_parse_url_path()
- *
- * Parse the URL path into separate path components.
- *
- */
-static CURLcode imap_parse_url_path(struct connectdata *conn)
-{
- /* The imap struct is already initialised in imap_connect() */
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct IMAP *imap = data->req.protop;
- const char *begin = data->state.path;
- const char *ptr = begin;
-
- /* See how much of the URL is a valid path and decode it */
- while(imap_is_bchar(*ptr))
- ptr++;
-
- if(ptr != begin) {
- /* Remove the trailing slash if present */
- const char *end = ptr;
- if(end > begin && end[-1] == '/')
- end--;
-
- result = Curl_urldecode(data, begin, end - begin, &imap->mailbox, NULL,
- TRUE);
- if(result)
- return result;
- }
- else
- imap->mailbox = NULL;
-
- /* There can be any number of parameters in the form ";NAME=VALUE" */
- while(*ptr == ';') {
- char *name;
- char *value;
- size_t valuelen;
-
- /* Find the length of the name parameter */
- begin = ++ptr;
- while(*ptr && *ptr != '=')
- ptr++;
-
- if(!*ptr)
- return CURLE_URL_MALFORMAT;
-
- /* Decode the name parameter */
- result = Curl_urldecode(data, begin, ptr - begin, &name, NULL, TRUE);
- if(result)
- return result;
-
- /* Find the length of the value parameter */
- begin = ++ptr;
- while(imap_is_bchar(*ptr))
- ptr++;
-
- /* Decode the value parameter */
- result = Curl_urldecode(data, begin, ptr - begin, &value, &valuelen, TRUE);
- if(result) {
- Curl_safefree(name);
- return result;
- }
-
- DEBUGF(infof(conn->data, "IMAP URL parameter '%s' = '%s'\n", name, value));
-
- /* Process the known hierarchical parameters (UIDVALIDITY, UID, SECTION and
- PARTIAL) stripping of the trailing slash character if it is present.
-
- Note: Unknown parameters trigger a URL_MALFORMAT error. */
- if(Curl_raw_equal(name, "UIDVALIDITY") && !imap->uidvalidity) {
- if(valuelen > 0 && value[valuelen - 1] == '/')
- value[valuelen - 1] = '\0';
-
- imap->uidvalidity = value;
- value = NULL;
- }
- else if(Curl_raw_equal(name, "UID") && !imap->uid) {
- if(valuelen > 0 && value[valuelen - 1] == '/')
- value[valuelen - 1] = '\0';
-
- imap->uid = value;
- value = NULL;
- }
- else if(Curl_raw_equal(name, "SECTION") && !imap->section) {
- if(valuelen > 0 && value[valuelen - 1] == '/')
- value[valuelen - 1] = '\0';
-
- imap->section = value;
- value = NULL;
- }
- else if(Curl_raw_equal(name, "PARTIAL") && !imap->partial) {
- if(valuelen > 0 && value[valuelen - 1] == '/')
- value[valuelen - 1] = '\0';
-
- imap->partial = value;
- value = NULL;
- }
- else {
- Curl_safefree(name);
- Curl_safefree(value);
-
- return CURLE_URL_MALFORMAT;
- }
-
- Curl_safefree(name);
- Curl_safefree(value);
- }
-
- /* Does the URL contain a query parameter? Only valid when we have a mailbox
- and no UID as per RFC-5092 */
- if(imap->mailbox && !imap->uid && *ptr == '?') {
- /* Find the length of the query parameter */
- begin = ++ptr;
- while(imap_is_bchar(*ptr))
- ptr++;
-
- /* Decode the query parameter */
- result = Curl_urldecode(data, begin, ptr - begin, &imap->query, NULL,
- TRUE);
- if(result)
- return result;
- }
-
- /* Any extra stuff at the end of the URL is an error */
- if(*ptr)
- return CURLE_URL_MALFORMAT;
-
- return CURLE_OK;
-}
-
-/***********************************************************************
- *
- * imap_parse_custom_request()
- *
- * Parse the custom request.
- */
-static CURLcode imap_parse_custom_request(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct IMAP *imap = data->req.protop;
- const char *custom = data->set.str[STRING_CUSTOMREQUEST];
-
- if(custom) {
- /* URL decode the custom request */
- result = Curl_urldecode(data, custom, 0, &imap->custom, NULL, TRUE);
-
- /* Extract the parameters if specified */
- if(!result) {
- const char *params = imap->custom;
-
- while(*params && *params != ' ')
- params++;
-
- if(*params) {
- imap->custom_params = strdup(params);
- imap->custom[params - imap->custom] = '\0';
-
- if(!imap->custom_params)
- result = CURLE_OUT_OF_MEMORY;
- }
- }
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * imap_calc_sasl_details()
- *
- * Calculate the required login details for SASL authentication.
- */
-static CURLcode imap_calc_sasl_details(struct connectdata *conn,
- const char **mech,
- char **initresp, size_t *len,
- imapstate *state1, imapstate *state2)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct imap_conn *imapc = &conn->proto.imapc;
-
- /* Calculate the supported authentication mechanism, by decreasing order of
- security, as well as the initial response where appropriate */
-#if defined(USE_WINDOWS_SSPI)
- if((imapc->authmechs & SASL_MECH_GSSAPI) &&
- (imapc->prefmech & SASL_MECH_GSSAPI)) {
- imapc->mutual_auth = FALSE; /* TODO: Calculate mutual authentication */
-
- *mech = SASL_MECH_STRING_GSSAPI;
- *state1 = IMAP_AUTHENTICATE_GSSAPI;
- *state2 = IMAP_AUTHENTICATE_GSSAPI_TOKEN;
- imapc->authused = SASL_MECH_GSSAPI;
-
- if(imapc->ir_supported || data->set.sasl_ir)
- result = Curl_sasl_create_gssapi_user_message(data, conn->user,
- conn->passwd, "imap",
- imapc->mutual_auth,
- NULL, &conn->krb5,
- initresp, len);
- }
- else
-#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- if((imapc->authmechs & SASL_MECH_DIGEST_MD5) &&
- (imapc->prefmech & SASL_MECH_DIGEST_MD5)) {
- *mech = SASL_MECH_STRING_DIGEST_MD5;
- *state1 = IMAP_AUTHENTICATE_DIGESTMD5;
- imapc->authused = SASL_MECH_DIGEST_MD5;
- }
- else if((imapc->authmechs & SASL_MECH_CRAM_MD5) &&
- (imapc->prefmech & SASL_MECH_CRAM_MD5)) {
- *mech = SASL_MECH_STRING_CRAM_MD5;
- *state1 = IMAP_AUTHENTICATE_CRAMMD5;
- imapc->authused = SASL_MECH_CRAM_MD5;
- }
- else
-#endif
-#ifdef USE_NTLM
- if((imapc->authmechs & SASL_MECH_NTLM) &&
- (imapc->prefmech & SASL_MECH_NTLM)) {
- *mech = SASL_MECH_STRING_NTLM;
- *state1 = IMAP_AUTHENTICATE_NTLM;
- *state2 = IMAP_AUTHENTICATE_NTLM_TYPE2MSG;
- imapc->authused = SASL_MECH_NTLM;
-
- if(imapc->ir_supported || data->set.sasl_ir)
- result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
- &conn->ntlm,
- initresp, len);
- }
- else
-#endif
- if(((imapc->authmechs & SASL_MECH_XOAUTH2) &&
- (imapc->prefmech & SASL_MECH_XOAUTH2) &&
- (imapc->prefmech != SASL_AUTH_ANY)) || conn->xoauth2_bearer) {
- *mech = SASL_MECH_STRING_XOAUTH2;
- *state1 = IMAP_AUTHENTICATE_XOAUTH2;
- *state2 = IMAP_AUTHENTICATE_FINAL;
- imapc->authused = SASL_MECH_XOAUTH2;
-
- if(imapc->ir_supported || data->set.sasl_ir)
- result = Curl_sasl_create_xoauth2_message(data, conn->user,
- conn->xoauth2_bearer,
- initresp, len);
- }
- else if((imapc->authmechs & SASL_MECH_LOGIN) &&
- (imapc->prefmech & SASL_MECH_LOGIN)) {
- *mech = SASL_MECH_STRING_LOGIN;
- *state1 = IMAP_AUTHENTICATE_LOGIN;
- *state2 = IMAP_AUTHENTICATE_LOGIN_PASSWD;
- imapc->authused = SASL_MECH_LOGIN;
-
- if(imapc->ir_supported || data->set.sasl_ir)
- result = Curl_sasl_create_login_message(data, conn->user, initresp, len);
- }
- else if((imapc->authmechs & SASL_MECH_PLAIN) &&
- (imapc->prefmech & SASL_MECH_PLAIN)) {
- *mech = SASL_MECH_STRING_PLAIN;
- *state1 = IMAP_AUTHENTICATE_PLAIN;
- *state2 = IMAP_AUTHENTICATE_FINAL;
- imapc->authused = SASL_MECH_PLAIN;
-
- if(imapc->ir_supported || data->set.sasl_ir)
- result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
- initresp, len);
- }
-
- return result;
-}
-
-#endif /* CURL_DISABLE_IMAP */
diff --git a/external/libcurl_android/jni/libcurl/lib/imap.h b/external/libcurl_android/jni/libcurl/lib/imap.h
deleted file mode 100755
index 768fc4b8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/imap.h
+++ /dev/null
@@ -1,111 +0,0 @@
-#ifndef HEADER_CURL_IMAP_H
-#define HEADER_CURL_IMAP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2009 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "pingpong.h"
-
-/****************************************************************************
- * IMAP unique setup
- ***************************************************************************/
-typedef enum {
- IMAP_STOP, /* do nothing state, stops the state machine */
- IMAP_SERVERGREET, /* waiting for the initial greeting immediately after
- a connect */
- IMAP_CAPABILITY,
- IMAP_STARTTLS,
- IMAP_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS
- (multi mode only) */
- IMAP_AUTHENTICATE_PLAIN,
- IMAP_AUTHENTICATE_LOGIN,
- IMAP_AUTHENTICATE_LOGIN_PASSWD,
- IMAP_AUTHENTICATE_CRAMMD5,
- IMAP_AUTHENTICATE_DIGESTMD5,
- IMAP_AUTHENTICATE_DIGESTMD5_RESP,
- IMAP_AUTHENTICATE_NTLM,
- IMAP_AUTHENTICATE_NTLM_TYPE2MSG,
- IMAP_AUTHENTICATE_GSSAPI,
- IMAP_AUTHENTICATE_GSSAPI_TOKEN,
- IMAP_AUTHENTICATE_GSSAPI_NO_DATA,
- IMAP_AUTHENTICATE_XOAUTH2,
- IMAP_AUTHENTICATE_CANCEL,
- IMAP_AUTHENTICATE_FINAL,
- IMAP_LOGIN,
- IMAP_LIST,
- IMAP_SELECT,
- IMAP_FETCH,
- IMAP_FETCH_FINAL,
- IMAP_APPEND,
- IMAP_APPEND_FINAL,
- IMAP_SEARCH,
- IMAP_LOGOUT,
- IMAP_LAST /* never used */
-} imapstate;
-
-/* This IMAP struct is used in the SessionHandle. All IMAP data that is
- connection-oriented must be in imap_conn to properly deal with the fact that
- perhaps the SessionHandle is changed between the times the connection is
- used. */
-struct IMAP {
- curl_pp_transfer transfer;
- char *mailbox; /* Mailbox to select */
- char *uidvalidity; /* UIDVALIDITY to check in select */
- char *uid; /* Message UID to fetch */
- char *section; /* Message SECTION to fetch */
- char *partial; /* Message PARTIAL to fetch */
- char *query; /* Query to search for */
- char *custom; /* Custom request */
- char *custom_params; /* Parameters for the custom request */
-};
-
-/* imap_conn is used for struct connection-oriented data in the connectdata
- struct */
-struct imap_conn {
- struct pingpong pp;
- imapstate state; /* Always use imap.c:state() to change state! */
- bool ssldone; /* Is connect() over SSL done? */
- unsigned int authmechs; /* Accepted authentication mechanisms */
- unsigned int preftype; /* Preferred authentication type */
- unsigned int prefmech; /* Preferred authentication mechanism */
- unsigned int authused; /* Auth mechanism used for the connection */
- int cmdid; /* Last used command ID */
- char resptag[5]; /* Response tag to wait for */
- bool tls_supported; /* StartTLS capability supported by server */
- bool login_disabled; /* LOGIN command disabled by server */
- bool ir_supported; /* Initial response supported by server */
- bool mutual_auth; /* Mutual authentication enabled (GSSAPI only) */
- char *mailbox; /* The last selected mailbox */
- char *mailbox_uidvalidity; /* UIDVALIDITY parsed from select response */
-};
-
-extern const struct Curl_handler Curl_handler_imap;
-extern const struct Curl_handler Curl_handler_imaps;
-
-/* Authentication type flags */
-#define IMAP_TYPE_CLEARTEXT (1 << 0)
-#define IMAP_TYPE_SASL (1 << 1)
-
-/* Authentication type values */
-#define IMAP_TYPE_NONE 0
-#define IMAP_TYPE_ANY ~0U
-
-#endif /* HEADER_CURL_IMAP_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/inet_ntop.c b/external/libcurl_android/jni/libcurl/lib/inet_ntop.c
deleted file mode 100755
index c3271500..00000000
--- a/external/libcurl_android/jni/libcurl/lib/inet_ntop.c
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (C) 1996-2001 Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
- * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
- * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
- * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
- * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
- * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
- * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Original code by Paul Vixie. "curlified" by Gisle Vanem.
- */
-
-#include "curl_setup.h"
-
-#ifndef HAVE_INET_NTOP
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "inet_ntop.h"
-
-#define IN6ADDRSZ 16
-#define INADDRSZ 4
-#define INT16SZ 2
-
-/*
- * Format an IPv4 address, more or less like inet_ntoa().
- *
- * Returns `dst' (as a const)
- * Note:
- * - uses no statics
- * - takes a unsigned char* not an in_addr as input
- */
-static char *inet_ntop4 (const unsigned char *src, char *dst, size_t size)
-{
- char tmp[sizeof "255.255.255.255"];
- size_t len;
-
- DEBUGASSERT(size >= 16);
-
- tmp[0] = '\0';
- (void)snprintf(tmp, sizeof(tmp), "%d.%d.%d.%d",
- ((int)((unsigned char)src[0])) & 0xff,
- ((int)((unsigned char)src[1])) & 0xff,
- ((int)((unsigned char)src[2])) & 0xff,
- ((int)((unsigned char)src[3])) & 0xff);
-
- len = strlen(tmp);
- if(len == 0 || len >= size) {
- SET_ERRNO(ENOSPC);
- return (NULL);
- }
- strcpy(dst, tmp);
- return dst;
-}
-
-#ifdef ENABLE_IPV6
-/*
- * Convert IPv6 binary address into presentation (printable) format.
- */
-static char *inet_ntop6 (const unsigned char *src, char *dst, size_t size)
-{
- /*
- * Note that int32_t and int16_t need only be "at least" large enough
- * to contain a value of the specified size. On some systems, like
- * Crays, there is no such thing as an integer variable with 16 bits.
- * Keep this in mind if you think this function should have been coded
- * to use pointer overlays. All the world's not a VAX.
- */
- char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
- char *tp;
- struct {
- long base;
- long len;
- } best, cur;
- unsigned long words[IN6ADDRSZ / INT16SZ];
- int i;
-
- /* Preprocess:
- * Copy the input (bytewise) array into a wordwise array.
- * Find the longest run of 0x00's in src[] for :: shorthanding.
- */
- memset(words, '\0', sizeof(words));
- for(i = 0; i < IN6ADDRSZ; i++)
- words[i/2] |= (src[i] << ((1 - (i % 2)) << 3));
-
- best.base = -1;
- cur.base = -1;
- best.len = 0;
- cur.len = 0;
-
- for(i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
- if(words[i] == 0) {
- if(cur.base == -1)
- cur.base = i, cur.len = 1;
- else
- cur.len++;
- }
- else if(cur.base != -1) {
- if(best.base == -1 || cur.len > best.len)
- best = cur;
- cur.base = -1;
- }
- }
- if((cur.base != -1) && (best.base == -1 || cur.len > best.len))
- best = cur;
- if(best.base != -1 && best.len < 2)
- best.base = -1;
- /* Format the result. */
- tp = tmp;
- for(i = 0; i < (IN6ADDRSZ / INT16SZ); i++) {
- /* Are we inside the best run of 0x00's? */
- if(best.base != -1 && i >= best.base && i < (best.base + best.len)) {
- if(i == best.base)
- *tp++ = ':';
- continue;
- }
-
- /* Are we following an initial run of 0x00s or any real hex?
- */
- if(i != 0)
- *tp++ = ':';
-
- /* Is this address an encapsulated IPv4?
- */
- if(i == 6 && best.base == 0 &&
- (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) {
- if(!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp))) {
- SET_ERRNO(ENOSPC);
- return (NULL);
- }
- tp += strlen(tp);
- break;
- }
- tp += snprintf(tp, 5, "%lx", words[i]);
- }
-
- /* Was it a trailing run of 0x00's?
- */
- if(best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ))
- *tp++ = ':';
- *tp++ = '\0';
-
- /* Check for overflow, copy, and we're done.
- */
- if((size_t)(tp - tmp) > size) {
- SET_ERRNO(ENOSPC);
- return (NULL);
- }
- strcpy(dst, tmp);
- return dst;
-}
-#endif /* ENABLE_IPV6 */
-
-/*
- * Convert a network format address to presentation format.
- *
- * Returns pointer to presentation format address (`buf').
- * Returns NULL on error and errno set with the specific
- * error, EAFNOSUPPORT or ENOSPC.
- *
- * On Windows we store the error in the thread errno, not
- * in the winsock error code. This is to avoid losing the
- * actual last winsock error. So use macro ERRNO to fetch the
- * errno this function sets when returning NULL, not SOCKERRNO.
- */
-char *Curl_inet_ntop(int af, const void *src, char *buf, size_t size)
-{
- switch (af) {
- case AF_INET:
- return inet_ntop4((const unsigned char*)src, buf, size);
-#ifdef ENABLE_IPV6
- case AF_INET6:
- return inet_ntop6((const unsigned char*)src, buf, size);
-#endif
- default:
- SET_ERRNO(EAFNOSUPPORT);
- return NULL;
- }
-}
-#endif /* HAVE_INET_NTOP */
diff --git a/external/libcurl_android/jni/libcurl/lib/inet_ntop.h b/external/libcurl_android/jni/libcurl/lib/inet_ntop.h
deleted file mode 100755
index db28ed80..00000000
--- a/external/libcurl_android/jni/libcurl/lib/inet_ntop.h
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef HEADER_CURL_INET_NTOP_H
-#define HEADER_CURL_INET_NTOP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-char *Curl_inet_ntop(int af, const void *addr, char *buf, size_t size);
-
-#ifdef HAVE_INET_NTOP
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#define Curl_inet_ntop(af,addr,buf,size) \
- inet_ntop(af,addr,buf,(curl_socklen_t)size)
-#endif
-
-#endif /* HEADER_CURL_INET_NTOP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/inet_pton.c b/external/libcurl_android/jni/libcurl/lib/inet_pton.c
deleted file mode 100755
index f50b365d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/inet_pton.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/* This is from the BIND 4.9.4 release, modified to compile by itself */
-
-/* Copyright (c) 1996 by Internet Software Consortium.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
- * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
- * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
- * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- * SOFTWARE.
- */
-
-#include "curl_setup.h"
-
-#ifndef HAVE_INET_PTON
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#include "inet_pton.h"
-
-#define IN6ADDRSZ 16
-#define INADDRSZ 4
-#define INT16SZ 2
-
-/*
- * WARNING: Don't even consider trying to compile this on a system where
- * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
- */
-
-static int inet_pton4(const char *src, unsigned char *dst);
-#ifdef ENABLE_IPV6
-static int inet_pton6(const char *src, unsigned char *dst);
-#endif
-
-/* int
- * inet_pton(af, src, dst)
- * convert from presentation format (which usually means ASCII printable)
- * to network format (which is usually some kind of binary format).
- * return:
- * 1 if the address was valid for the specified address family
- * 0 if the address wasn't valid (`dst' is untouched in this case)
- * -1 if some other error occurred (`dst' is untouched in this case, too)
- * notice:
- * On Windows we store the error in the thread errno, not
- * in the winsock error code. This is to avoid losing the
- * actual last winsock error. So use macro ERRNO to fetch the
- * errno this function sets when returning (-1), not SOCKERRNO.
- * author:
- * Paul Vixie, 1996.
- */
-int
-Curl_inet_pton(int af, const char *src, void *dst)
-{
- switch (af) {
- case AF_INET:
- return (inet_pton4(src, (unsigned char *)dst));
-#ifdef ENABLE_IPV6
- case AF_INET6:
- return (inet_pton6(src, (unsigned char *)dst));
-#endif
- default:
- SET_ERRNO(EAFNOSUPPORT);
- return (-1);
- }
- /* NOTREACHED */
-}
-
-/* int
- * inet_pton4(src, dst)
- * like inet_aton() but without all the hexadecimal and shorthand.
- * return:
- * 1 if `src' is a valid dotted quad, else 0.
- * notice:
- * does not touch `dst' unless it's returning 1.
- * author:
- * Paul Vixie, 1996.
- */
-static int
-inet_pton4(const char *src, unsigned char *dst)
-{
- static const char digits[] = "0123456789";
- int saw_digit, octets, ch;
- unsigned char tmp[INADDRSZ], *tp;
-
- saw_digit = 0;
- octets = 0;
- tp = tmp;
- *tp = 0;
- while((ch = *src++) != '\0') {
- const char *pch;
-
- if((pch = strchr(digits, ch)) != NULL) {
- unsigned int val = *tp * 10 + (unsigned int)(pch - digits);
-
- if(saw_digit && *tp == 0)
- return (0);
- if(val > 255)
- return (0);
- *tp = (unsigned char)val;
- if(! saw_digit) {
- if(++octets > 4)
- return (0);
- saw_digit = 1;
- }
- }
- else if(ch == '.' && saw_digit) {
- if(octets == 4)
- return (0);
- *++tp = 0;
- saw_digit = 0;
- }
- else
- return (0);
- }
- if(octets < 4)
- return (0);
- memcpy(dst, tmp, INADDRSZ);
- return (1);
-}
-
-#ifdef ENABLE_IPV6
-/* int
- * inet_pton6(src, dst)
- * convert presentation level address to network order binary form.
- * return:
- * 1 if `src' is a valid [RFC1884 2.2] address, else 0.
- * notice:
- * (1) does not touch `dst' unless it's returning 1.
- * (2) :: in a full address is silently ignored.
- * credit:
- * inspired by Mark Andrews.
- * author:
- * Paul Vixie, 1996.
- */
-static int
-inet_pton6(const char *src, unsigned char *dst)
-{
- static const char xdigits_l[] = "0123456789abcdef",
- xdigits_u[] = "0123456789ABCDEF";
- unsigned char tmp[IN6ADDRSZ], *tp, *endp, *colonp;
- const char *xdigits, *curtok;
- int ch, saw_xdigit;
- size_t val;
-
- memset((tp = tmp), 0, IN6ADDRSZ);
- endp = tp + IN6ADDRSZ;
- colonp = NULL;
- /* Leading :: requires some special handling. */
- if(*src == ':')
- if(*++src != ':')
- return (0);
- curtok = src;
- saw_xdigit = 0;
- val = 0;
- while((ch = *src++) != '\0') {
- const char *pch;
-
- if((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
- pch = strchr((xdigits = xdigits_u), ch);
- if(pch != NULL) {
- val <<= 4;
- val |= (pch - xdigits);
- if(++saw_xdigit > 4)
- return (0);
- continue;
- }
- if(ch == ':') {
- curtok = src;
- if(!saw_xdigit) {
- if(colonp)
- return (0);
- colonp = tp;
- continue;
- }
- if(tp + INT16SZ > endp)
- return (0);
- *tp++ = (unsigned char) (val >> 8) & 0xff;
- *tp++ = (unsigned char) val & 0xff;
- saw_xdigit = 0;
- val = 0;
- continue;
- }
- if(ch == '.' && ((tp + INADDRSZ) <= endp) &&
- inet_pton4(curtok, tp) > 0) {
- tp += INADDRSZ;
- saw_xdigit = 0;
- break; /* '\0' was seen by inet_pton4(). */
- }
- return (0);
- }
- if(saw_xdigit) {
- if(tp + INT16SZ > endp)
- return (0);
- *tp++ = (unsigned char) (val >> 8) & 0xff;
- *tp++ = (unsigned char) val & 0xff;
- }
- if(colonp != NULL) {
- /*
- * Since some memmove()'s erroneously fail to handle
- * overlapping regions, we'll do the shift by hand.
- */
- const ssize_t n = tp - colonp;
- ssize_t i;
-
- if(tp == endp)
- return (0);
- for(i = 1; i <= n; i++) {
- *(endp - i) = *(colonp + n - i);
- *(colonp + n - i) = 0;
- }
- tp = endp;
- }
- if(tp != endp)
- return (0);
- memcpy(dst, tmp, IN6ADDRSZ);
- return (1);
-}
-#endif /* ENABLE_IPV6 */
-
-#endif /* HAVE_INET_PTON */
diff --git a/external/libcurl_android/jni/libcurl/lib/inet_pton.h b/external/libcurl_android/jni/libcurl/lib/inet_pton.h
deleted file mode 100755
index 43c54914..00000000
--- a/external/libcurl_android/jni/libcurl/lib/inet_pton.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef HEADER_CURL_INET_PTON_H
-#define HEADER_CURL_INET_PTON_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2005, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-int Curl_inet_pton(int, const char *, void *);
-
-#ifdef HAVE_INET_PTON
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#define Curl_inet_pton(x,y,z) inet_pton(x,y,z)
-#endif
-
-#endif /* HEADER_CURL_INET_PTON_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/krb5.c b/external/libcurl_android/jni/libcurl/lib/krb5.c
deleted file mode 100755
index 7e82a680..00000000
--- a/external/libcurl_android/jni/libcurl/lib/krb5.c
+++ /dev/null
@@ -1,342 +0,0 @@
-/* GSSAPI/krb5 support for FTP - loosely based on old krb4.c
- *
- * Copyright (c) 1995, 1996, 1997, 1998, 1999, 2013 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- * Copyright (c) 2004 - 2012 Daniel Stenberg
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE. */
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_FTP
-#ifdef HAVE_GSSAPI
-
-#ifdef HAVE_OLD_GSSMIT
-#define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
-#define NCOMPAT 1
-#endif
-
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#include "urldata.h"
-#include "curl_base64.h"
-#include "ftp.h"
-#include "curl_gssapi.h"
-#include "sendf.h"
-#include "curl_sec.h"
-#include "curl_memory.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#define LOCAL_ADDR (&conn->local_addr)
-#define REMOTE_ADDR conn->ip_addr->ai_addr
-
-static int
-krb5_init(void *app_data)
-{
- gss_ctx_id_t *context = app_data;
- /* Make sure our context is initialized for krb5_end. */
- *context = GSS_C_NO_CONTEXT;
- return 0;
-}
-
-static int
-krb5_check_prot(void *app_data, int level)
-{
- (void)app_data; /* unused */
- if(level == PROT_CONFIDENTIAL)
- return -1;
- return 0;
-}
-
-static int
-krb5_decode(void *app_data, void *buf, int len,
- int level UNUSED_PARAM,
- struct connectdata *conn UNUSED_PARAM)
-{
- gss_ctx_id_t *context = app_data;
- OM_uint32 maj, min;
- gss_buffer_desc enc, dec;
-
- (void)level;
- (void)conn;
-
- enc.value = buf;
- enc.length = len;
- maj = gss_unseal(&min, *context, &enc, &dec, NULL, NULL);
- if(maj != GSS_S_COMPLETE) {
- if(len >= 4)
- strcpy(buf, "599 ");
- return -1;
- }
-
- memcpy(buf, dec.value, dec.length);
- len = curlx_uztosi(dec.length);
- gss_release_buffer(&min, &dec);
-
- return len;
-}
-
-static int
-krb5_overhead(void *app_data, int level, int len)
-{
- /* no arguments are used */
- (void)app_data;
- (void)level;
- (void)len;
- return 0;
-}
-
-static int
-krb5_encode(void *app_data, const void *from, int length, int level, void **to,
- struct connectdata *conn UNUSED_PARAM)
-{
- gss_ctx_id_t *context = app_data;
- gss_buffer_desc dec, enc;
- OM_uint32 maj, min;
- int state;
- int len;
-
- /* shut gcc up */
- conn = NULL;
-
- /* NOTE that the cast is safe, neither of the krb5, gnu gss and heimdal
- * libraries modify the input buffer in gss_seal()
- */
- dec.value = (void*)from;
- dec.length = length;
- maj = gss_seal(&min, *context,
- level == PROT_PRIVATE,
- GSS_C_QOP_DEFAULT,
- &dec, &state, &enc);
-
- if(maj != GSS_S_COMPLETE)
- return -1;
-
- /* malloc a new buffer, in case gss_release_buffer doesn't work as
- expected */
- *to = malloc(enc.length);
- if(!*to)
- return -1;
- memcpy(*to, enc.value, enc.length);
- len = curlx_uztosi(enc.length);
- gss_release_buffer(&min, &enc);
- return len;
-}
-
-static int
-krb5_auth(void *app_data, struct connectdata *conn)
-{
- int ret = AUTH_OK;
- char *p;
- const char *host = conn->host.name;
- ssize_t nread;
- curl_socklen_t l = sizeof(conn->local_addr);
- struct SessionHandle *data = conn->data;
- CURLcode result;
- const char *service = "ftp", *srv_host = "host";
- gss_buffer_desc input_buffer, output_buffer, _gssresp, *gssresp;
- OM_uint32 maj, min;
- gss_name_t gssname;
- gss_ctx_id_t *context = app_data;
- struct gss_channel_bindings_struct chan;
- size_t base64_sz = 0;
-
- if(getsockname(conn->sock[FIRSTSOCKET],
- (struct sockaddr *)LOCAL_ADDR, &l) < 0)
- perror("getsockname()");
-
- chan.initiator_addrtype = GSS_C_AF_INET;
- chan.initiator_address.length = l - 4;
- chan.initiator_address.value =
- &((struct sockaddr_in *)LOCAL_ADDR)->sin_addr.s_addr;
- chan.acceptor_addrtype = GSS_C_AF_INET;
- chan.acceptor_address.length = l - 4;
- chan.acceptor_address.value =
- &((struct sockaddr_in *)REMOTE_ADDR)->sin_addr.s_addr;
- chan.application_data.length = 0;
- chan.application_data.value = NULL;
-
- /* this loop will execute twice (once for service, once for host) */
- for(;;) {
- /* this really shouldn't be repeated here, but can't help it */
- if(service == srv_host) {
- result = Curl_ftpsendf(conn, "AUTH GSSAPI");
-
- if(result)
- return -2;
- if(Curl_GetFTPResponse(&nread, conn, NULL))
- return -1;
-
- if(data->state.buffer[0] != '3')
- return -1;
- }
-
- input_buffer.value = data->state.buffer;
- input_buffer.length = snprintf(input_buffer.value, BUFSIZE, "%s@%s",
- service, host);
- maj = gss_import_name(&min, &input_buffer, GSS_C_NT_HOSTBASED_SERVICE,
- &gssname);
- if(maj != GSS_S_COMPLETE) {
- gss_release_name(&min, &gssname);
- if(service == srv_host) {
- Curl_failf(data, "Error importing service name %s",
- input_buffer.value);
- return AUTH_ERROR;
- }
- service = srv_host;
- continue;
- }
- /* We pass NULL as |output_name_type| to avoid a leak. */
- gss_display_name(&min, gssname, &output_buffer, NULL);
- Curl_infof(data, "Trying against %s\n", output_buffer.value);
- gssresp = GSS_C_NO_BUFFER;
- *context = GSS_C_NO_CONTEXT;
-
- do {
- /* Release the buffer at each iteration to avoid leaking: the first time
- we are releasing the memory from gss_display_name. The last item is
- taken care by a final gss_release_buffer. */
- gss_release_buffer(&min, &output_buffer);
- ret = AUTH_OK;
- maj = Curl_gss_init_sec_context(data,
- &min,
- context,
- gssname,
- &Curl_krb5_mech_oid,
- &chan,
- gssresp,
- &output_buffer,
- NULL);
-
- if(gssresp) {
- free(_gssresp.value);
- gssresp = NULL;
- }
-
- if(GSS_ERROR(maj)) {
- Curl_infof(data, "Error creating security context\n");
- ret = AUTH_ERROR;
- break;
- }
-
- if(output_buffer.length != 0) {
- result = Curl_base64_encode(data, (char *)output_buffer.value,
- output_buffer.length, &p, &base64_sz);
- if(result) {
- Curl_infof(data,"base64-encoding: %s\n", curl_easy_strerror(result));
- ret = AUTH_CONTINUE;
- break;
- }
-
- result = Curl_ftpsendf(conn, "ADAT %s", p);
-
- free(p);
-
- if(result) {
- ret = -2;
- break;
- }
-
- if(Curl_GetFTPResponse(&nread, conn, NULL)) {
- ret = -1;
- break;
- }
-
- if(data->state.buffer[0] != '2' && data->state.buffer[0] != '3') {
- Curl_infof(data, "Server didn't accept auth data\n");
- ret = AUTH_ERROR;
- break;
- }
-
- p = data->state.buffer + 4;
- p = strstr(p, "ADAT=");
- if(p) {
- result = Curl_base64_decode(p + 5,
- (unsigned char **)&_gssresp.value,
- &_gssresp.length);
- if(result) {
- Curl_failf(data,"base64-decoding: %s", curl_easy_strerror(result));
- ret = AUTH_CONTINUE;
- break;
- }
- }
-
- gssresp = &_gssresp;
- }
- } while(maj == GSS_S_CONTINUE_NEEDED);
-
- gss_release_name(&min, &gssname);
- gss_release_buffer(&min, &output_buffer);
-
- if(gssresp)
- free(_gssresp.value);
-
- if(ret == AUTH_OK || service == srv_host)
- return ret;
-
- service = srv_host;
- }
- return ret;
-}
-
-static void krb5_end(void *app_data)
-{
- OM_uint32 min;
- gss_ctx_id_t *context = app_data;
- if(*context != GSS_C_NO_CONTEXT) {
-#ifdef DEBUGBUILD
- OM_uint32 maj =
-#endif
- gss_delete_sec_context(&min, context, GSS_C_NO_BUFFER);
- DEBUGASSERT(maj == GSS_S_COMPLETE);
- }
-}
-
-struct Curl_sec_client_mech Curl_krb5_client_mech = {
- "GSSAPI",
- sizeof(gss_ctx_id_t),
- krb5_init,
- krb5_auth,
- krb5_end,
- krb5_check_prot,
- krb5_overhead,
- krb5_encode,
- krb5_decode
-};
-
-#endif /* HAVE_GSSAPI */
-#endif /* CURL_DISABLE_FTP */
diff --git a/external/libcurl_android/jni/libcurl/lib/ldap.c b/external/libcurl_android/jni/libcurl/lib/ldap.c
deleted file mode 100755
index ae484488..00000000
--- a/external/libcurl_android/jni/libcurl/lib/ldap.c
+++ /dev/null
@@ -1,709 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if !defined(CURL_DISABLE_LDAP) && !defined(USE_OPENLDAP)
-
-/*
- * Notice that USE_OPENLDAP is only a source code selection switch. When
- * libcurl is built with USE_OPENLDAP defined the libcurl source code that
- * gets compiled is the code from openldap.c, otherwise the code that gets
- * compiled is the code from ldap.c.
- *
- * When USE_OPENLDAP is defined a recent version of the OpenLDAP library
- * might be required for compilation and runtime. In order to use ancient
- * OpenLDAP library versions, USE_OPENLDAP shall not be defined.
- */
-
-#ifdef CURL_LDAP_WIN /* Use Windows LDAP implementation. */
-# include <winldap.h>
-# ifndef LDAP_VENDOR_NAME
-# error Your Platform SDK is NOT sufficient for LDAP support! \
- Update your Platform SDK, or disable LDAP support!
-# else
-# include <winber.h>
-# endif
-#else
-# define LDAP_DEPRECATED 1 /* Be sure ldap_init() is defined. */
-# ifdef HAVE_LBER_H
-# include <lber.h>
-# endif
-# include <ldap.h>
-# if (defined(HAVE_LDAP_SSL) && defined(HAVE_LDAP_SSL_H))
-# include <ldap_ssl.h>
-# endif /* HAVE_LDAP_SSL && HAVE_LDAP_SSL_H */
-#endif
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "sendf.h"
-#include "escape.h"
-#include "progress.h"
-#include "transfer.h"
-#include "strequal.h"
-#include "strtok.h"
-#include "curl_ldap.h"
-#include "curl_memory.h"
-#include "curl_base64.h"
-#include "rawstr.h"
-#include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "memdebug.h"
-
-#ifndef HAVE_LDAP_URL_PARSE
-
-/* Use our own implementation. */
-
-typedef struct {
- char *lud_host;
- int lud_port;
- char *lud_dn;
- char **lud_attrs;
- int lud_scope;
- char *lud_filter;
- char **lud_exts;
- size_t lud_attrs_dups; /* how many were dup'ed, this field is not in the
- "real" struct so can only be used in code
- without HAVE_LDAP_URL_PARSE defined */
-} CURL_LDAPURLDesc;
-
-#undef LDAPURLDesc
-#define LDAPURLDesc CURL_LDAPURLDesc
-
-static int _ldap_url_parse (const struct connectdata *conn,
- LDAPURLDesc **ludp);
-static void _ldap_free_urldesc (LDAPURLDesc *ludp);
-
-#undef ldap_free_urldesc
-#define ldap_free_urldesc _ldap_free_urldesc
-#endif
-
-#ifdef DEBUG_LDAP
- #define LDAP_TRACE(x) do { \
- _ldap_trace ("%u: ", __LINE__); \
- _ldap_trace x; \
- } WHILE_FALSE
-
- static void _ldap_trace (const char *fmt, ...);
-#else
- #define LDAP_TRACE(x) Curl_nop_stmt
-#endif
-
-
-static CURLcode Curl_ldap(struct connectdata *conn, bool *done);
-
-/*
- * LDAP protocol handler.
- */
-
-const struct Curl_handler Curl_handler_ldap = {
- "LDAP", /* scheme */
- ZERO_NULL, /* setup_connection */
- Curl_ldap, /* do_it */
- ZERO_NULL, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_LDAP, /* defport */
- CURLPROTO_LDAP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-#ifdef HAVE_LDAP_SSL
-/*
- * LDAPS protocol handler.
- */
-
-const struct Curl_handler Curl_handler_ldaps = {
- "LDAPS", /* scheme */
- ZERO_NULL, /* setup_connection */
- Curl_ldap, /* do_it */
- ZERO_NULL, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_LDAPS, /* defport */
- CURLPROTO_LDAPS, /* protocol */
- PROTOPT_SSL /* flags */
-};
-#endif
-
-
-static CURLcode Curl_ldap(struct connectdata *conn, bool *done)
-{
- CURLcode status = CURLE_OK;
- int rc = 0;
- LDAP *server = NULL;
- LDAPURLDesc *ludp = NULL;
- LDAPMessage *result = NULL;
- LDAPMessage *entryIterator;
- int num = 0;
- struct SessionHandle *data=conn->data;
- int ldap_proto = LDAP_VERSION3;
- int ldap_ssl = 0;
- char *val_b64 = NULL;
- size_t val_b64_sz = 0;
- curl_off_t dlsize = 0;
-#ifdef LDAP_OPT_NETWORK_TIMEOUT
- struct timeval ldap_timeout = {10,0}; /* 10 sec connection/search timeout */
-#endif
-
- *done = TRUE; /* unconditionally */
- infof(data, "LDAP local: LDAP Vendor = %s ; LDAP Version = %d\n",
- LDAP_VENDOR_NAME, LDAP_VENDOR_VERSION);
- infof(data, "LDAP local: %s\n", data->change.url);
-
-#ifdef HAVE_LDAP_URL_PARSE
- rc = ldap_url_parse(data->change.url, &ludp);
-#else
- rc = _ldap_url_parse(conn, &ludp);
-#endif
- if(rc != 0) {
- failf(data, "LDAP local: %s", ldap_err2string(rc));
- status = CURLE_LDAP_INVALID_URL;
- goto quit;
- }
-
- /* Get the URL scheme ( either ldap or ldaps ) */
- if(conn->given->flags & PROTOPT_SSL)
- ldap_ssl = 1;
- infof(data, "LDAP local: trying to establish %s connection\n",
- ldap_ssl ? "encrypted" : "cleartext");
-
-#ifdef LDAP_OPT_NETWORK_TIMEOUT
- ldap_set_option(NULL, LDAP_OPT_NETWORK_TIMEOUT, &ldap_timeout);
-#endif
- ldap_set_option(NULL, LDAP_OPT_PROTOCOL_VERSION, &ldap_proto);
-
- if(ldap_ssl) {
-#ifdef HAVE_LDAP_SSL
-#ifdef CURL_LDAP_WIN
- /* Win32 LDAP SDK doesn't support insecure mode without CA! */
- server = ldap_sslinit(conn->host.name, (int)conn->port, 1);
- ldap_set_option(server, LDAP_OPT_SSL, LDAP_OPT_ON);
-#else
- int ldap_option;
- char* ldap_ca = data->set.str[STRING_SSL_CAFILE];
-#if defined(CURL_HAS_NOVELL_LDAPSDK)
- rc = ldapssl_client_init(NULL, NULL);
- if(rc != LDAP_SUCCESS) {
- failf(data, "LDAP local: ldapssl_client_init %s", ldap_err2string(rc));
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
- if(data->set.ssl.verifypeer) {
- /* Novell SDK supports DER or BASE64 files. */
- int cert_type = LDAPSSL_CERT_FILETYPE_B64;
- if((data->set.str[STRING_CERT_TYPE]) &&
- (Curl_raw_equal(data->set.str[STRING_CERT_TYPE], "DER")))
- cert_type = LDAPSSL_CERT_FILETYPE_DER;
- if(!ldap_ca) {
- failf(data, "LDAP local: ERROR %s CA cert not set!",
- (cert_type == LDAPSSL_CERT_FILETYPE_DER ? "DER" : "PEM"));
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
- infof(data, "LDAP local: using %s CA cert '%s'\n",
- (cert_type == LDAPSSL_CERT_FILETYPE_DER ? "DER" : "PEM"),
- ldap_ca);
- rc = ldapssl_add_trusted_cert(ldap_ca, cert_type);
- if(rc != LDAP_SUCCESS) {
- failf(data, "LDAP local: ERROR setting %s CA cert: %s",
- (cert_type == LDAPSSL_CERT_FILETYPE_DER ? "DER" : "PEM"),
- ldap_err2string(rc));
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
- ldap_option = LDAPSSL_VERIFY_SERVER;
- }
- else
- ldap_option = LDAPSSL_VERIFY_NONE;
- rc = ldapssl_set_verify_mode(ldap_option);
- if(rc != LDAP_SUCCESS) {
- failf(data, "LDAP local: ERROR setting cert verify mode: %s",
- ldap_err2string(rc));
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
- server = ldapssl_init(conn->host.name, (int)conn->port, 1);
- if(server == NULL) {
- failf(data, "LDAP local: Cannot connect to %s:%ld",
- conn->host.name, conn->port);
- status = CURLE_COULDNT_CONNECT;
- goto quit;
- }
-#elif defined(LDAP_OPT_X_TLS)
- if(data->set.ssl.verifypeer) {
- /* OpenLDAP SDK supports BASE64 files. */
- if((data->set.str[STRING_CERT_TYPE]) &&
- (!Curl_raw_equal(data->set.str[STRING_CERT_TYPE], "PEM"))) {
- failf(data, "LDAP local: ERROR OpenLDAP only supports PEM cert-type!");
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
- if(!ldap_ca) {
- failf(data, "LDAP local: ERROR PEM CA cert not set!");
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
- infof(data, "LDAP local: using PEM CA cert: %s\n", ldap_ca);
- rc = ldap_set_option(NULL, LDAP_OPT_X_TLS_CACERTFILE, ldap_ca);
- if(rc != LDAP_SUCCESS) {
- failf(data, "LDAP local: ERROR setting PEM CA cert: %s",
- ldap_err2string(rc));
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
- ldap_option = LDAP_OPT_X_TLS_DEMAND;
- }
- else
- ldap_option = LDAP_OPT_X_TLS_NEVER;
-
- rc = ldap_set_option(NULL, LDAP_OPT_X_TLS_REQUIRE_CERT, &ldap_option);
- if(rc != LDAP_SUCCESS) {
- failf(data, "LDAP local: ERROR setting cert verify mode: %s",
- ldap_err2string(rc));
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
- server = ldap_init(conn->host.name, (int)conn->port);
- if(server == NULL) {
- failf(data, "LDAP local: Cannot connect to %s:%ld",
- conn->host.name, conn->port);
- status = CURLE_COULDNT_CONNECT;
- goto quit;
- }
- ldap_option = LDAP_OPT_X_TLS_HARD;
- rc = ldap_set_option(server, LDAP_OPT_X_TLS, &ldap_option);
- if(rc != LDAP_SUCCESS) {
- failf(data, "LDAP local: ERROR setting SSL/TLS mode: %s",
- ldap_err2string(rc));
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
-/*
- rc = ldap_start_tls_s(server, NULL, NULL);
- if(rc != LDAP_SUCCESS) {
- failf(data, "LDAP local: ERROR starting SSL/TLS mode: %s",
- ldap_err2string(rc));
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
- }
-*/
-#else
- /* we should probably never come up to here since configure
- should check in first place if we can support LDAP SSL/TLS */
- failf(data, "LDAP local: SSL/TLS not supported with this version "
- "of the OpenLDAP toolkit\n");
- status = CURLE_SSL_CERTPROBLEM;
- goto quit;
-#endif
-#endif
-#endif /* CURL_LDAP_USE_SSL */
- }
- else {
- server = ldap_init(conn->host.name, (int)conn->port);
- if(server == NULL) {
- failf(data, "LDAP local: Cannot connect to %s:%ld",
- conn->host.name, conn->port);
- status = CURLE_COULDNT_CONNECT;
- goto quit;
- }
- }
-#ifdef CURL_LDAP_WIN
- ldap_set_option(server, LDAP_OPT_PROTOCOL_VERSION, &ldap_proto);
-#endif
-
- rc = ldap_simple_bind_s(server,
- conn->bits.user_passwd ? conn->user : NULL,
- conn->bits.user_passwd ? conn->passwd : NULL);
- if(!ldap_ssl && rc != 0) {
- ldap_proto = LDAP_VERSION2;
- ldap_set_option(server, LDAP_OPT_PROTOCOL_VERSION, &ldap_proto);
- rc = ldap_simple_bind_s(server,
- conn->bits.user_passwd ? conn->user : NULL,
- conn->bits.user_passwd ? conn->passwd : NULL);
- }
- if(rc != 0) {
- failf(data, "LDAP local: ldap_simple_bind_s %s", ldap_err2string(rc));
- status = CURLE_LDAP_CANNOT_BIND;
- goto quit;
- }
-
- rc = ldap_search_s(server, ludp->lud_dn, ludp->lud_scope,
- ludp->lud_filter, ludp->lud_attrs, 0, &result);
-
- if(rc != 0 && rc != LDAP_SIZELIMIT_EXCEEDED) {
- failf(data, "LDAP remote: %s", ldap_err2string(rc));
- status = CURLE_LDAP_SEARCH_FAILED;
- goto quit;
- }
-
- for(num = 0, entryIterator = ldap_first_entry(server, result);
- entryIterator;
- entryIterator = ldap_next_entry(server, entryIterator), num++) {
- BerElement *ber = NULL;
- char *attribute; /*! suspicious that this isn't 'const' */
- char *dn = ldap_get_dn(server, entryIterator);
- int i;
-
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)dn, 0);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
-
- dlsize += strlen(dn)+5;
-
- for(attribute = ldap_first_attribute(server, entryIterator, &ber);
- attribute;
- attribute = ldap_next_attribute(server, entryIterator, ber)) {
- BerValue **vals = ldap_get_values_len(server, entryIterator, attribute);
-
- if(vals != NULL) {
- for(i = 0; (vals[i] != NULL); i++) {
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *) attribute, 0);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)": ", 2);
- dlsize += strlen(attribute)+3;
-
- if((strlen(attribute) > 7) &&
- (strcmp(";binary",
- (char *)attribute +
- (strlen((char *)attribute) - 7)) == 0)) {
- /* Binary attribute, encode to base64. */
- CURLcode error = Curl_base64_encode(data,
- vals[i]->bv_val,
- vals[i]->bv_len,
- &val_b64,
- &val_b64_sz);
- if(error) {
- ldap_value_free_len(vals);
- ldap_memfree(attribute);
- ldap_memfree(dn);
- if(ber)
- ber_free(ber, 0);
- status = error;
- goto quit;
- }
- if(val_b64_sz > 0) {
- Curl_client_write(conn, CLIENTWRITE_BODY, val_b64, val_b64_sz);
- free(val_b64);
- dlsize += val_b64_sz;
- }
- }
- else {
- Curl_client_write(conn, CLIENTWRITE_BODY, vals[i]->bv_val,
- vals[i]->bv_len);
- dlsize += vals[i]->bv_len;
- }
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
- dlsize++;
- }
-
- /* Free memory used to store values */
- ldap_value_free_len(vals);
- }
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
- dlsize++;
- Curl_pgrsSetDownloadCounter(data, dlsize);
- ldap_memfree(attribute);
- }
- ldap_memfree(dn);
- if(ber)
- ber_free(ber, 0);
- }
-
-quit:
- if(result) {
- ldap_msgfree(result);
- LDAP_TRACE (("Received %d entries\n", num));
- }
- if(rc == LDAP_SIZELIMIT_EXCEEDED)
- infof(data, "There are more than %d entries\n", num);
- if(ludp)
- ldap_free_urldesc(ludp);
- if(server)
- ldap_unbind_s(server);
-#if defined(HAVE_LDAP_SSL) && defined(CURL_HAS_NOVELL_LDAPSDK)
- if(ldap_ssl)
- ldapssl_client_deinit();
-#endif /* HAVE_LDAP_SSL && CURL_HAS_NOVELL_LDAPSDK */
-
- /* no data to transfer */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- connclose(conn, "LDAP connection always disable re-use");
-
- return status;
-}
-
-#ifdef DEBUG_LDAP
-static void _ldap_trace (const char *fmt, ...)
-{
- static int do_trace = -1;
- va_list args;
-
- if(do_trace == -1) {
- const char *env = getenv("CURL_TRACE");
- do_trace = (env && strtol(env, NULL, 10) > 0);
- }
- if(!do_trace)
- return;
-
- va_start (args, fmt);
- vfprintf (stderr, fmt, args);
- va_end (args);
-}
-#endif
-
-#ifndef HAVE_LDAP_URL_PARSE
-
-/*
- * Return scope-value for a scope-string.
- */
-static int str2scope (const char *p)
-{
- if(strequal(p, "one"))
- return LDAP_SCOPE_ONELEVEL;
- if(strequal(p, "onetree"))
- return LDAP_SCOPE_ONELEVEL;
- if(strequal(p, "base"))
- return LDAP_SCOPE_BASE;
- if(strequal(p, "sub"))
- return LDAP_SCOPE_SUBTREE;
- if(strequal( p, "subtree"))
- return LDAP_SCOPE_SUBTREE;
- return (-1);
-}
-
-/*
- * Split 'str' into strings separated by commas.
- * Note: res[] points into 'str'.
- */
-static char **split_str (char *str)
-{
- char **res, *lasts, *s;
- int i;
-
- for(i = 2, s = strchr(str,','); s; i++)
- s = strchr(++s,',');
-
- res = calloc(i, sizeof(char*));
- if(!res)
- return NULL;
-
- for(i = 0, s = strtok_r(str, ",", &lasts); s;
- s = strtok_r(NULL, ",", &lasts), i++)
- res[i] = s;
- return res;
-}
-
-/*
- * Unescape the LDAP-URL components
- */
-static bool unescape_elements (void *data, LDAPURLDesc *ludp)
-{
- int i;
-
- if(ludp->lud_filter) {
- ludp->lud_filter = curl_easy_unescape(data, ludp->lud_filter, 0, NULL);
- if(!ludp->lud_filter)
- return FALSE;
- }
-
- for(i = 0; ludp->lud_attrs && ludp->lud_attrs[i]; i++) {
- ludp->lud_attrs[i] = curl_easy_unescape(data, ludp->lud_attrs[i],
- 0, NULL);
- if(!ludp->lud_attrs[i])
- return FALSE;
- ludp->lud_attrs_dups++;
- }
-
- if(ludp->lud_dn) {
- char *dn = ludp->lud_dn;
- char *new_dn = curl_easy_unescape(data, dn, 0, NULL);
-
- free(dn);
- ludp->lud_dn = new_dn;
- if(!new_dn)
- return (FALSE);
- }
- return (TRUE);
-}
-
-/*
- * Break apart the pieces of an LDAP URL.
- * Syntax:
- * ldap://<hostname>:<port>/<base_dn>?<attributes>?<scope>?<filter>?<ext>
- *
- * <hostname> already known from 'conn->host.name'.
- * <port> already known from 'conn->remote_port'.
- * extract the rest from 'conn->data->state.path+1'. All fields are optional.
- * e.g.
- * ldap://<hostname>:<port>/?<attributes>?<scope>?<filter>
- * yields ludp->lud_dn = "".
- *
- * Defined in RFC4516 section 2.
- */
-static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp)
-{
- char *p, *q;
- int i;
-
- if(!conn->data ||
- !conn->data->state.path ||
- conn->data->state.path[0] != '/' ||
- !checkprefix("LDAP", conn->data->change.url))
- return LDAP_INVALID_SYNTAX;
-
- ludp->lud_scope = LDAP_SCOPE_BASE;
- ludp->lud_port = conn->remote_port;
- ludp->lud_host = conn->host.name;
-
- /* parse DN (Distinguished Name).
- */
- ludp->lud_dn = strdup(conn->data->state.path+1);
- if(!ludp->lud_dn)
- return LDAP_NO_MEMORY;
-
- p = strchr(ludp->lud_dn, '?');
- LDAP_TRACE (("DN '%.*s'\n", p ? (size_t)(p-ludp->lud_dn) :
- strlen(ludp->lud_dn), ludp->lud_dn));
-
- if(!p)
- goto success;
-
- *p++ = '\0';
-
- /* parse attributes. skip "??".
- */
- q = strchr(p, '?');
- if(q)
- *q++ = '\0';
-
- if(*p && *p != '?') {
- ludp->lud_attrs = split_str(p);
- if(!ludp->lud_attrs)
- return LDAP_NO_MEMORY;
-
- for(i = 0; ludp->lud_attrs[i]; i++)
- LDAP_TRACE (("attr[%d] '%s'\n", i, ludp->lud_attrs[i]));
- }
-
- p = q;
- if(!p)
- goto success;
-
- /* parse scope. skip "??"
- */
- q = strchr(p, '?');
- if(q)
- *q++ = '\0';
-
- if(*p && *p != '?') {
- ludp->lud_scope = str2scope(p);
- if(ludp->lud_scope == -1) {
- return LDAP_INVALID_SYNTAX;
- }
- LDAP_TRACE (("scope %d\n", ludp->lud_scope));
- }
-
- p = q;
- if(!p)
- goto success;
-
- /* parse filter
- */
- q = strchr(p, '?');
- if(q)
- *q++ = '\0';
- if(!*p) {
- return LDAP_INVALID_SYNTAX;
- }
-
- ludp->lud_filter = p;
- LDAP_TRACE (("filter '%s'\n", ludp->lud_filter));
-
- success:
- if(!unescape_elements(conn->data, ludp))
- return LDAP_NO_MEMORY;
- return LDAP_SUCCESS;
-}
-
-static int _ldap_url_parse (const struct connectdata *conn,
- LDAPURLDesc **ludpp)
-{
- LDAPURLDesc *ludp = calloc(1, sizeof(*ludp));
- int rc;
-
- *ludpp = NULL;
- if(!ludp)
- return LDAP_NO_MEMORY;
-
- rc = _ldap_url_parse2 (conn, ludp);
- if(rc != LDAP_SUCCESS) {
- _ldap_free_urldesc(ludp);
- ludp = NULL;
- }
- *ludpp = ludp;
- return (rc);
-}
-
-static void _ldap_free_urldesc (LDAPURLDesc *ludp)
-{
- size_t i;
-
- if(!ludp)
- return;
-
- if(ludp->lud_dn)
- free(ludp->lud_dn);
-
- if(ludp->lud_filter)
- free(ludp->lud_filter);
-
- if(ludp->lud_attrs) {
- for(i = 0; i < ludp->lud_attrs_dups; i++)
- free(ludp->lud_attrs[i]);
- free(ludp->lud_attrs);
- }
-
- free (ludp);
-}
-#endif /* !HAVE_LDAP_URL_PARSE */
-#endif /* !CURL_DISABLE_LDAP && !USE_OPENLDAP */
diff --git a/external/libcurl_android/jni/libcurl/lib/libcurl.rc b/external/libcurl_android/jni/libcurl/lib/libcurl.rc
deleted file mode 100755
index 47b944ac..00000000
--- a/external/libcurl_android/jni/libcurl/lib/libcurl.rc
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include <winver.h>
-#include "../include/curl/curlver.h"
-
-LANGUAGE 0x09,0x01
-
-#define RC_VERSION LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINOR, LIBCURL_VERSION_PATCH, 0
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION RC_VERSION
- PRODUCTVERSION RC_VERSION
- FILEFLAGSMASK 0x3fL
-#if defined(DEBUGBUILD) || defined(_DEBUG)
- FILEFLAGS 1
-#else
- FILEFLAGS 0
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_DLL
- FILESUBTYPE 0x0L
-
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "The cURL library, http://curl.haxx.se/\0"
- VALUE "FileDescription", "libcurl Shared Library\0"
- VALUE "FileVersion", LIBCURL_VERSION "\0"
- VALUE "InternalName", "libcurl\0"
- VALUE "OriginalFilename", "libcurl.dll\0"
- VALUE "ProductName", "The cURL library\0"
- VALUE "ProductVersion", LIBCURL_VERSION "\0"
- VALUE "LegalCopyright", "© " LIBCURL_COPYRIGHT "\0"
- VALUE "License", "http://curl.haxx.se/docs/copyright.html\0"
- END
- END
-
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
diff --git a/external/libcurl_android/jni/libcurl/lib/llist.c b/external/libcurl_android/jni/libcurl/lib/llist.c
deleted file mode 100755
index 40bb6283..00000000
--- a/external/libcurl_android/jni/libcurl/lib/llist.c
+++ /dev/null
@@ -1,212 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "llist.h"
-#include "curl_memory.h"
-
-/* this must be the last include file */
-#include "memdebug.h"
-
-/*
- * @unittest: 1300
- */
-static void
-llist_init(struct curl_llist *l, curl_llist_dtor dtor)
-{
- l->size = 0;
- l->dtor = dtor;
- l->head = NULL;
- l->tail = NULL;
-}
-
-struct curl_llist *
-Curl_llist_alloc(curl_llist_dtor dtor)
-{
- struct curl_llist *list;
-
- list = malloc(sizeof(struct curl_llist));
- if(!list)
- return NULL;
-
- llist_init(list, dtor);
-
- return list;
-}
-
-/*
- * Curl_llist_insert_next()
- *
- * Inserts a new list element after the given one 'e'. If the given existing
- * entry is NULL and the list already has elements, the new one will be
- * inserted first in the list.
- *
- * Returns: 1 on success and 0 on failure.
- *
- * @unittest: 1300
- */
-int
-Curl_llist_insert_next(struct curl_llist *list, struct curl_llist_element *e,
- const void *p)
-{
- struct curl_llist_element *ne = malloc(sizeof(struct curl_llist_element));
- if(!ne)
- return 0;
-
- ne->ptr = (void *) p;
- if(list->size == 0) {
- list->head = ne;
- list->head->prev = NULL;
- list->head->next = NULL;
- list->tail = ne;
- }
- else {
- /* if 'e' is NULL here, we insert the new element first in the list */
- ne->next = e?e->next:list->head;
- ne->prev = e;
- if(!e) {
- list->head->prev = ne;
- list->head = ne;
- }
- else if(e->next) {
- e->next->prev = ne;
- }
- else {
- list->tail = ne;
- }
- if(e)
- e->next = ne;
- }
-
- ++list->size;
-
- return 1;
-}
-
-/*
- * @unittest: 1300
- */
-int
-Curl_llist_remove(struct curl_llist *list, struct curl_llist_element *e,
- void *user)
-{
- if(e == NULL || list->size == 0)
- return 1;
-
- if(e == list->head) {
- list->head = e->next;
-
- if(list->head == NULL)
- list->tail = NULL;
- else
- e->next->prev = NULL;
- }
- else {
- e->prev->next = e->next;
- if(!e->next)
- list->tail = e->prev;
- else
- e->next->prev = e->prev;
- }
-
- list->dtor(user, e->ptr);
-
- e->ptr = NULL;
- e->prev = NULL;
- e->next = NULL;
-
- free(e);
- --list->size;
-
- return 1;
-}
-
-void
-Curl_llist_destroy(struct curl_llist *list, void *user)
-{
- if(list) {
- while(list->size > 0)
- Curl_llist_remove(list, list->tail, user);
-
- free(list);
- }
-}
-
-size_t
-Curl_llist_count(struct curl_llist *list)
-{
- return list->size;
-}
-
-/*
- * @unittest: 1300
- */
-int Curl_llist_move(struct curl_llist *list, struct curl_llist_element *e,
- struct curl_llist *to_list,
- struct curl_llist_element *to_e)
-{
- /* Remove element from list */
- if(e == NULL || list->size == 0)
- return 0;
-
- if(e == list->head) {
- list->head = e->next;
-
- if(list->head == NULL)
- list->tail = NULL;
- else
- e->next->prev = NULL;
- }
- else {
- e->prev->next = e->next;
- if(!e->next)
- list->tail = e->prev;
- else
- e->next->prev = e->prev;
- }
-
- --list->size;
-
- /* Add element to to_list after to_e */
- if(to_list->size == 0) {
- to_list->head = e;
- to_list->head->prev = NULL;
- to_list->head->next = NULL;
- to_list->tail = e;
- }
- else {
- e->next = to_e->next;
- e->prev = to_e;
- if(to_e->next) {
- to_e->next->prev = e;
- }
- else {
- to_list->tail = e;
- }
- to_e->next = e;
- }
-
- ++to_list->size;
-
- return 1;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/llist.h b/external/libcurl_android/jni/libcurl/lib/llist.h
deleted file mode 100755
index 27ddb719..00000000
--- a/external/libcurl_android/jni/libcurl/lib/llist.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef HEADER_CURL_LLIST_H
-#define HEADER_CURL_LLIST_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-#include <stddef.h>
-
-typedef void (*curl_llist_dtor)(void *, void *);
-
-struct curl_llist_element {
- void *ptr;
-
- struct curl_llist_element *prev;
- struct curl_llist_element *next;
-};
-
-struct curl_llist {
- struct curl_llist_element *head;
- struct curl_llist_element *tail;
-
- curl_llist_dtor dtor;
-
- size_t size;
-};
-
-struct curl_llist *Curl_llist_alloc(curl_llist_dtor);
-int Curl_llist_insert_next(struct curl_llist *, struct curl_llist_element *,
- const void *);
-int Curl_llist_remove(struct curl_llist *, struct curl_llist_element *,
- void *);
-size_t Curl_llist_count(struct curl_llist *);
-void Curl_llist_destroy(struct curl_llist *, void *);
-int Curl_llist_move(struct curl_llist *, struct curl_llist_element *,
- struct curl_llist *, struct curl_llist_element *);
-
-#endif /* HEADER_CURL_LLIST_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/md4.c b/external/libcurl_android/jni/libcurl/lib/md4.c
deleted file mode 100755
index 6930e021..00000000
--- a/external/libcurl_android/jni/libcurl/lib/md4.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*-
- Copyright (C) 1990-2, RSA Data Security, Inc. All rights reserved.
-
- License to copy and use this software is granted provided that it
- is identified as the "RSA Data Security, Inc. MD4 Message-Digest
- Algorithm" in all material mentioning or referencing this software
- or this function.
-
- License is also granted to make and use derivative works provided
- that such works are identified as "derived from the RSA Data
- Security, Inc. MD4 Message-Digest Algorithm" in all material
- mentioning or referencing the derived work.
-
- RSA Data Security, Inc. makes no representations concerning either
- the merchantability of this software or the suitability of this
- software for any particular purpose. It is provided "as is"
- without express or implied warranty of any kind.
-
- These notices must be retained in any copies of any part of this
- documentation and/or software.
- */
-
-#include "curl_setup.h"
-
-/* NSS crypto library does not provide the MD4 hash algorithm, so that we have
- * a local implementation of it */
-#ifdef USE_NSS
-
-#include "curl_md4.h"
-#include "warnless.h"
-
-typedef unsigned int UINT4;
-
-typedef struct MD4Context {
- UINT4 state[4]; /* state (ABCD) */
- UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-} MD4_CTX;
-
-/* Constants for MD4Transform routine.
- */
-#define S11 3
-#define S12 7
-#define S13 11
-#define S14 19
-#define S21 3
-#define S22 5
-#define S23 9
-#define S24 13
-#define S31 3
-#define S32 9
-#define S33 11
-#define S34 15
-
-static void MD4Transform(UINT4 [4], const unsigned char [64]);
-static void Encode(unsigned char *, UINT4 *, unsigned int);
-static void Decode(UINT4 *, const unsigned char *, unsigned int);
-
-static unsigned char PADDING[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/* F, G and H are basic MD4 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (y)) | ((x) & (z)) | ((y) & (z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG and HH are transformations for rounds 1, 2 and 3 */
-/* Rotation is separate from addition to prevent recomputation */
-#define FF(a, b, c, d, x, s) { \
- (a) += F ((b), (c), (d)) + (x); \
- (a) = ROTATE_LEFT ((a), (s)); \
- }
-#define GG(a, b, c, d, x, s) { \
- (a) += G ((b), (c), (d)) + (x) + (UINT4)0x5a827999; \
- (a) = ROTATE_LEFT ((a), (s)); \
- }
-#define HH(a, b, c, d, x, s) { \
- (a) += H ((b), (c), (d)) + (x) + (UINT4)0x6ed9eba1; \
- (a) = ROTATE_LEFT ((a), (s)); \
- }
-
-/* MD4 initialization. Begins an MD4 operation, writing a new context.
- */
-static void MD4Init(MD4_CTX *context)
-{
- context->count[0] = context->count[1] = 0;
-
- /* Load magic initialization constants.
- */
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
-}
-
-/* MD4 block update operation. Continues an MD4 message-digest
- operation, processing another message block, and updating the
- context.
- */
-static void MD4Update(MD4_CTX *context, const unsigned char *input,
- unsigned int inputLen)
-{
- unsigned int i, bufindex, partLen;
-
- /* Compute number of bytes mod 64 */
- bufindex = (unsigned int)((context->count[0] >> 3) & 0x3F);
- /* Update number of bits */
- if((context->count[0] += ((UINT4)inputLen << 3))
- < ((UINT4)inputLen << 3))
- context->count[1]++;
- context->count[1] += ((UINT4)inputLen >> 29);
-
- partLen = 64 - bufindex;
- /* Transform as many times as possible.
- */
- if(inputLen >= partLen) {
- memcpy(&context->buffer[bufindex], input, partLen);
- MD4Transform (context->state, context->buffer);
-
- for(i = partLen; i + 63 < inputLen; i += 64)
- MD4Transform (context->state, &input[i]);
-
- bufindex = 0;
- }
- else
- i = 0;
-
- /* Buffer remaining input */
- memcpy(&context->buffer[bufindex], &input[i], inputLen-i);
-}
-
-/* MD4 padding. */
-static void MD4Pad(MD4_CTX *context)
-{
- unsigned char bits[8];
- unsigned int bufindex, padLen;
-
- /* Save number of bits */
- Encode (bits, context->count, 8);
-
- /* Pad out to 56 mod 64.
- */
- bufindex = (unsigned int)((context->count[0] >> 3) & 0x3f);
- padLen = (bufindex < 56) ? (56 - bufindex) : (120 - bufindex);
- MD4Update (context, PADDING, padLen);
-
- /* Append length (before padding) */
- MD4Update (context, bits, 8);
-}
-
-/* MD4 finalization. Ends an MD4 message-digest operation, writing the
- the message digest and zeroizing the context.
- */
-static void MD4Final (unsigned char digest[16], MD4_CTX *context)
-{
- /* Do padding */
- MD4Pad (context);
-
- /* Store state in digest */
- Encode (digest, context->state, 16);
-
- /* Zeroize sensitive information.
- */
- memset(context, 0, sizeof(*context));
-}
-
-/* MD4 basic transformation. Transforms state based on block.
- */
-static void MD4Transform (UINT4 state[4], const unsigned char block[64])
-{
- UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode (x, block, 64);
-
- /* Round 1 */
- FF (a, b, c, d, x[ 0], S11); /* 1 */
- FF (d, a, b, c, x[ 1], S12); /* 2 */
- FF (c, d, a, b, x[ 2], S13); /* 3 */
- FF (b, c, d, a, x[ 3], S14); /* 4 */
- FF (a, b, c, d, x[ 4], S11); /* 5 */
- FF (d, a, b, c, x[ 5], S12); /* 6 */
- FF (c, d, a, b, x[ 6], S13); /* 7 */
- FF (b, c, d, a, x[ 7], S14); /* 8 */
- FF (a, b, c, d, x[ 8], S11); /* 9 */
- FF (d, a, b, c, x[ 9], S12); /* 10 */
- FF (c, d, a, b, x[10], S13); /* 11 */
- FF (b, c, d, a, x[11], S14); /* 12 */
- FF (a, b, c, d, x[12], S11); /* 13 */
- FF (d, a, b, c, x[13], S12); /* 14 */
- FF (c, d, a, b, x[14], S13); /* 15 */
- FF (b, c, d, a, x[15], S14); /* 16 */
-
- /* Round 2 */
- GG (a, b, c, d, x[ 0], S21); /* 17 */
- GG (d, a, b, c, x[ 4], S22); /* 18 */
- GG (c, d, a, b, x[ 8], S23); /* 19 */
- GG (b, c, d, a, x[12], S24); /* 20 */
- GG (a, b, c, d, x[ 1], S21); /* 21 */
- GG (d, a, b, c, x[ 5], S22); /* 22 */
- GG (c, d, a, b, x[ 9], S23); /* 23 */
- GG (b, c, d, a, x[13], S24); /* 24 */
- GG (a, b, c, d, x[ 2], S21); /* 25 */
- GG (d, a, b, c, x[ 6], S22); /* 26 */
- GG (c, d, a, b, x[10], S23); /* 27 */
- GG (b, c, d, a, x[14], S24); /* 28 */
- GG (a, b, c, d, x[ 3], S21); /* 29 */
- GG (d, a, b, c, x[ 7], S22); /* 30 */
- GG (c, d, a, b, x[11], S23); /* 31 */
- GG (b, c, d, a, x[15], S24); /* 32 */
-
- /* Round 3 */
- HH (a, b, c, d, x[ 0], S31); /* 33 */
- HH (d, a, b, c, x[ 8], S32); /* 34 */
- HH (c, d, a, b, x[ 4], S33); /* 35 */
- HH (b, c, d, a, x[12], S34); /* 36 */
- HH (a, b, c, d, x[ 2], S31); /* 37 */
- HH (d, a, b, c, x[10], S32); /* 38 */
- HH (c, d, a, b, x[ 6], S33); /* 39 */
- HH (b, c, d, a, x[14], S34); /* 40 */
- HH (a, b, c, d, x[ 1], S31); /* 41 */
- HH (d, a, b, c, x[ 9], S32); /* 42 */
- HH (c, d, a, b, x[ 5], S33); /* 43 */
- HH (b, c, d, a, x[13], S34); /* 44 */
- HH (a, b, c, d, x[ 3], S31); /* 45 */
- HH (d, a, b, c, x[11], S32); /* 46 */
- HH (c, d, a, b, x[ 7], S33); /* 47 */
- HH (b, c, d, a, x[15], S34); /* 48 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information.
- */
- memset(x, 0, sizeof(x));
-}
-
-/* Encodes input (UINT4) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void Encode(unsigned char *output, UINT4 *input, unsigned int len)
-{
- unsigned int i, j;
-
- for(i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char)(input[i] & 0xff);
- output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
- output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
- output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
- }
-}
-
-/* Decodes input (unsigned char) into output (UINT4). Assumes len is
- a multiple of 4.
- */
-static void Decode (UINT4 *output, const unsigned char *input,
- unsigned int len)
-{
- unsigned int i, j;
-
- for(i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
- (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
-}
-
-void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len)
-{
- MD4_CTX ctx;
- MD4Init(&ctx);
- MD4Update(&ctx, input, curlx_uztoui(len));
- MD4Final(output, &ctx);
-}
-#endif /* USE_NSS */
diff --git a/external/libcurl_android/jni/libcurl/lib/md5.c b/external/libcurl_android/jni/libcurl/lib/md5.c
deleted file mode 100755
index af39fd41..00000000
--- a/external/libcurl_android/jni/libcurl/lib/md5.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-
-#include "curl_md5.h"
-#include "curl_hmac.h"
-#include "warnless.h"
-
-#include "curl_memory.h"
-
-#if defined(USE_GNUTLS_NETTLE)
-
-#include <nettle/md5.h>
-/* The last #include file should be: */
-#include "memdebug.h"
-
-typedef struct md5_ctx MD5_CTX;
-
-static void MD5_Init(MD5_CTX * ctx)
-{
- md5_init(ctx);
-}
-
-static void MD5_Update(MD5_CTX * ctx,
- const unsigned char * input,
- unsigned int inputLen)
-{
- md5_update(ctx, inputLen, input);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX * ctx)
-{
- md5_digest(ctx, 16, digest);
-}
-
-#elif defined(USE_GNUTLS)
-
-#include <gcrypt.h>
-/* The last #include file should be: */
-#include "memdebug.h"
-
-typedef gcry_md_hd_t MD5_CTX;
-
-static void MD5_Init(MD5_CTX * ctx)
-{
- gcry_md_open(ctx, GCRY_MD_MD5, 0);
-}
-
-static void MD5_Update(MD5_CTX * ctx,
- const unsigned char * input,
- unsigned int inputLen)
-{
- gcry_md_write(*ctx, input, inputLen);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX * ctx)
-{
- memcpy(digest, gcry_md_read(*ctx, 0), 16);
- gcry_md_close(*ctx);
-}
-
-#elif defined(USE_SSLEAY)
-/* When OpenSSL is available we use the MD5-function from OpenSSL */
-
-# ifdef USE_OPENSSL
-# include <openssl/md5.h>
-# else
-# include <md5.h>
-# endif
-
-#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
- (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
- (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
- (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
-
-/* For Apple operating systems: CommonCrypto has the functions we need.
- These functions are available on Tiger and later, as well as iOS 2.0
- and later. If you're building for an older cat, well, sorry.
-
- Declaring the functions as static like this seems to be a bit more
- reliable than defining COMMON_DIGEST_FOR_OPENSSL on older cats. */
-# include <CommonCrypto/CommonDigest.h>
-# define MD5_CTX CC_MD5_CTX
-
-static void MD5_Init(MD5_CTX *ctx)
-{
- CC_MD5_Init(ctx);
-}
-
-static void MD5_Update(MD5_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- CC_MD5_Update(ctx, input, inputLen);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
-{
- CC_MD5_Final(digest, ctx);
-}
-
-#elif defined(_WIN32)
-
-#include <wincrypt.h>
-
-typedef struct {
- HCRYPTPROV hCryptProv;
- HCRYPTHASH hHash;
-} MD5_CTX;
-
-static void MD5_Init(MD5_CTX *ctx)
-{
- if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL,
- PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
- CryptCreateHash(ctx->hCryptProv, CALG_MD5, 0, 0, &ctx->hHash);
- }
-}
-
-static void MD5_Update(MD5_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
-{
- unsigned long length = 0;
- CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
- if(length == 16)
- CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
- if(ctx->hHash)
- CryptDestroyHash(ctx->hHash);
- if(ctx->hCryptProv)
- CryptReleaseContext(ctx->hCryptProv, 0);
-}
-
-#else
-/* When no other crypto library is available we use this code segment */
-
-/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
-rights reserved.
-
-License to copy and use this software is granted provided that it
-is identified as the "RSA Data Security, Inc. MD5 Message-Digest
-Algorithm" in all material mentioning or referencing this software
-or this function.
-
-License is also granted to make and use derivative works provided
-that such works are identified as "derived from the RSA Data
-Security, Inc. MD5 Message-Digest Algorithm" in all material
-mentioning or referencing the derived work.
-
-RSA Data Security, Inc. makes no representations concerning either
-the merchantability of this software or the suitability of this
-software for any particular purpose. It is provided "as is"
-without express or implied warranty of any kind.
-
-These notices must be retained in any copies of any part of this
-documentation and/or software.
- */
-
-/* UINT4 defines a four byte word */
-typedef unsigned int UINT4;
-
-/* MD5 context. */
-struct md5_ctx {
- UINT4 state[4]; /* state (ABCD) */
- UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */
- unsigned char buffer[64]; /* input buffer */
-};
-
-typedef struct md5_ctx MD5_CTX;
-
-static void MD5_Init(struct md5_ctx *);
-static void MD5_Update(struct md5_ctx *, const unsigned char *, unsigned int);
-static void MD5_Final(unsigned char [16], struct md5_ctx *);
-
-/* Constants for MD5Transform routine.
- */
-
-#define S11 7
-#define S12 12
-#define S13 17
-#define S14 22
-#define S21 5
-#define S22 9
-#define S23 14
-#define S24 20
-#define S31 4
-#define S32 11
-#define S33 16
-#define S34 23
-#define S41 6
-#define S42 10
-#define S43 15
-#define S44 21
-
-static void MD5Transform(UINT4 [4], const unsigned char [64]);
-static void Encode(unsigned char *, UINT4 *, unsigned int);
-static void Decode(UINT4 *, const unsigned char *, unsigned int);
-
-static const unsigned char PADDING[64] = {
- 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-};
-
-/* F, G, H and I are basic MD5 functions.
- */
-#define F(x, y, z) (((x) & (y)) | ((~x) & (z)))
-#define G(x, y, z) (((x) & (z)) | ((y) & (~z)))
-#define H(x, y, z) ((x) ^ (y) ^ (z))
-#define I(x, y, z) ((y) ^ ((x) | (~z)))
-
-/* ROTATE_LEFT rotates x left n bits.
- */
-#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n))))
-
-/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4.
-Rotation is separate from addition to prevent recomputation.
- */
-#define FF(a, b, c, d, x, s, ac) { \
- (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define GG(a, b, c, d, x, s, ac) { \
- (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define HH(a, b, c, d, x, s, ac) { \
- (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-#define II(a, b, c, d, x, s, ac) { \
- (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \
- (a) = ROTATE_LEFT ((a), (s)); \
- (a) += (b); \
- }
-
-/* MD5 initialization. Begins an MD5 operation, writing a new context.
- */
-static void MD5_Init(struct md5_ctx *context)
-{
- context->count[0] = context->count[1] = 0;
- /* Load magic initialization constants. */
- context->state[0] = 0x67452301;
- context->state[1] = 0xefcdab89;
- context->state[2] = 0x98badcfe;
- context->state[3] = 0x10325476;
-}
-
-/* MD5 block update operation. Continues an MD5 message-digest
- operation, processing another message block, and updating the
- context.
- */
-static void MD5_Update (struct md5_ctx *context, /* context */
- const unsigned char *input, /* input block */
- unsigned int inputLen) /* length of input block */
-{
- unsigned int i, bufindex, partLen;
-
- /* Compute number of bytes mod 64 */
- bufindex = (unsigned int)((context->count[0] >> 3) & 0x3F);
-
- /* Update number of bits */
- if((context->count[0] += ((UINT4)inputLen << 3))
- < ((UINT4)inputLen << 3))
- context->count[1]++;
- context->count[1] += ((UINT4)inputLen >> 29);
-
- partLen = 64 - bufindex;
-
- /* Transform as many times as possible. */
- if(inputLen >= partLen) {
- memcpy(&context->buffer[bufindex], input, partLen);
- MD5Transform(context->state, context->buffer);
-
- for(i = partLen; i + 63 < inputLen; i += 64)
- MD5Transform(context->state, &input[i]);
-
- bufindex = 0;
- }
- else
- i = 0;
-
- /* Buffer remaining input */
- memcpy(&context->buffer[bufindex], &input[i], inputLen-i);
-}
-
-/* MD5 finalization. Ends an MD5 message-digest operation, writing the
- the message digest and zeroizing the context.
-*/
-static void MD5_Final(unsigned char digest[16], /* message digest */
- struct md5_ctx *context) /* context */
-{
- unsigned char bits[8];
- unsigned int count, padLen;
-
- /* Save number of bits */
- Encode (bits, context->count, 8);
-
- /* Pad out to 56 mod 64. */
- count = (unsigned int)((context->count[0] >> 3) & 0x3f);
- padLen = (count < 56) ? (56 - count) : (120 - count);
- MD5_Update (context, PADDING, padLen);
-
- /* Append length (before padding) */
- MD5_Update (context, bits, 8);
-
- /* Store state in digest */
- Encode (digest, context->state, 16);
-
- /* Zeroize sensitive information. */
- memset ((void *)context, 0, sizeof (*context));
-}
-
-/* MD5 basic transformation. Transforms state based on block. */
-static void MD5Transform(UINT4 state[4],
- const unsigned char block[64])
-{
- UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16];
-
- Decode (x, block, 64);
-
- /* Round 1 */
- FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */
- FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */
- FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */
- FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */
- FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */
- FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */
- FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */
- FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */
- FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */
- FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */
- FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */
- FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */
- FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */
- FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */
- FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */
- FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */
-
- /* Round 2 */
- GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */
- GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */
- GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */
- GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */
- GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */
- GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */
- GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */
- GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */
- GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */
- GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */
- GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */
- GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */
- GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */
- GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */
- GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */
- GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */
-
- /* Round 3 */
- HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */
- HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */
- HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */
- HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */
- HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */
- HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */
- HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */
- HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */
- HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */
- HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */
- HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */
- HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */
- HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */
- HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */
- HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */
- HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */
-
- /* Round 4 */
- II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */
- II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */
- II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */
- II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */
- II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */
- II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */
- II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */
- II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */
- II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */
- II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */
- II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */
- II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */
- II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */
- II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */
- II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */
- II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */
-
- state[0] += a;
- state[1] += b;
- state[2] += c;
- state[3] += d;
-
- /* Zeroize sensitive information. */
- memset((void *)x, 0, sizeof (x));
-}
-
-/* Encodes input (UINT4) into output (unsigned char). Assumes len is
- a multiple of 4.
- */
-static void Encode (unsigned char *output,
- UINT4 *input,
- unsigned int len)
-{
- unsigned int i, j;
-
- for(i = 0, j = 0; j < len; i++, j += 4) {
- output[j] = (unsigned char)(input[i] & 0xff);
- output[j+1] = (unsigned char)((input[i] >> 8) & 0xff);
- output[j+2] = (unsigned char)((input[i] >> 16) & 0xff);
- output[j+3] = (unsigned char)((input[i] >> 24) & 0xff);
- }
-}
-
-/* Decodes input (unsigned char) into output (UINT4). Assumes len is
- a multiple of 4.
-*/
-static void Decode (UINT4 *output,
- const unsigned char *input,
- unsigned int len)
-{
- unsigned int i, j;
-
- for(i = 0, j = 0; j < len; i++, j += 4)
- output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) |
- (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24);
-}
-
-#endif /* CRYPTO LIBS */
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-const HMAC_params Curl_HMAC_MD5[] = {
- {
- (HMAC_hinit_func) MD5_Init, /* Hash initialization function. */
- (HMAC_hupdate_func) MD5_Update, /* Hash update function. */
- (HMAC_hfinal_func) MD5_Final, /* Hash computation end function. */
- sizeof(MD5_CTX), /* Size of hash context structure. */
- 64, /* Maximum key length. */
- 16 /* Result size. */
- }
-};
-
-const MD5_params Curl_DIGEST_MD5[] = {
- {
- (Curl_MD5_init_func) MD5_Init, /* Digest initialization function */
- (Curl_MD5_update_func) MD5_Update, /* Digest update function */
- (Curl_MD5_final_func) MD5_Final, /* Digest computation end function */
- sizeof(MD5_CTX), /* Size of digest context struct */
- 16 /* Result size */
- }
-};
-
-void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */
- const unsigned char *input)
-{
- MD5_CTX ctx;
- MD5_Init(&ctx);
- MD5_Update(&ctx, input, curlx_uztoui(strlen((char *)input)));
- MD5_Final(outbuffer, &ctx);
-}
-
-MD5_context *Curl_MD5_init(const MD5_params *md5params)
-{
- MD5_context *ctxt;
-
- /* Create MD5 context */
- ctxt = malloc(sizeof *ctxt);
-
- if(!ctxt)
- return ctxt;
-
- ctxt->md5_hashctx = malloc(md5params->md5_ctxtsize);
-
- if(!ctxt->md5_hashctx) {
- free(ctxt);
- return NULL;
- }
-
- ctxt->md5_hash = md5params;
-
- (*md5params->md5_init_func)(ctxt->md5_hashctx);
-
- return ctxt;
-}
-
-int Curl_MD5_update(MD5_context *context,
- const unsigned char *data,
- unsigned int len)
-{
- (*context->md5_hash->md5_update_func)(context->md5_hashctx, data, len);
-
- return 0;
-}
-
-int Curl_MD5_final(MD5_context *context, unsigned char *result)
-{
- (*context->md5_hash->md5_final_func)(result, context->md5_hashctx);
-
- free(context->md5_hashctx);
- free(context);
-
- return 0;
-}
-
-#endif /* CURL_DISABLE_CRYPTO_AUTH */
diff --git a/external/libcurl_android/jni/libcurl/lib/memdebug.c b/external/libcurl_android/jni/libcurl/lib/memdebug.c
deleted file mode 100755
index 4afa620a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/memdebug.c
+++ /dev/null
@@ -1,490 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef CURLDEBUG
-
-#include <curl/curl.h>
-
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
-#include "urldata.h"
-
-#define MEMDEBUG_NODEFINES /* don't redefine the standard functions */
-#include "curl_memory.h"
-#include "memdebug.h"
-
-#ifndef HAVE_ASSERT_H
-# define assert(x) Curl_nop_stmt
-#endif
-
-/*
- * Until 2011-08-17 libcurl's Memory Tracking feature also performed
- * automatic malloc and free filling operations using 0xA5 and 0x13
- * values. Our own preinitialization of dynamically allocated memory
- * might be useful when not using third party memory debuggers, but
- * on the other hand this would fool memory debuggers into thinking
- * that all dynamically allocated memory is properly initialized.
- *
- * As a default setting, libcurl's Memory Tracking feature no longer
- * performs preinitialization of dynamically allocated memory on its
- * own. If you know what you are doing, and really want to retain old
- * behavior, you can achieve this compiling with preprocessor symbols
- * CURL_MT_MALLOC_FILL and CURL_MT_FREE_FILL defined with appropriate
- * values.
- */
-
-#ifdef CURL_MT_MALLOC_FILL
-# if (CURL_MT_MALLOC_FILL < 0) || (CURL_MT_MALLOC_FILL > 0xff)
-# error "invalid CURL_MT_MALLOC_FILL or out of range"
-# endif
-#endif
-
-#ifdef CURL_MT_FREE_FILL
-# if (CURL_MT_FREE_FILL < 0) || (CURL_MT_FREE_FILL > 0xff)
-# error "invalid CURL_MT_FREE_FILL or out of range"
-# endif
-#endif
-
-#if defined(CURL_MT_MALLOC_FILL) && defined(CURL_MT_FREE_FILL)
-# if (CURL_MT_MALLOC_FILL == CURL_MT_FREE_FILL)
-# error "CURL_MT_MALLOC_FILL same as CURL_MT_FREE_FILL"
-# endif
-#endif
-
-#ifdef CURL_MT_MALLOC_FILL
-# define mt_malloc_fill(buf,len) memset((buf), CURL_MT_MALLOC_FILL, (len))
-#else
-# define mt_malloc_fill(buf,len) Curl_nop_stmt
-#endif
-
-#ifdef CURL_MT_FREE_FILL
-# define mt_free_fill(buf,len) memset((buf), CURL_MT_FREE_FILL, (len))
-#else
-# define mt_free_fill(buf,len) Curl_nop_stmt
-#endif
-
-struct memdebug {
- size_t size;
- union {
- curl_off_t o;
- double d;
- void * p;
- } mem[1];
- /* I'm hoping this is the thing with the strictest alignment
- * requirements. That also means we waste some space :-( */
-};
-
-/*
- * Note that these debug functions are very simple and they are meant to
- * remain so. For advanced analysis, record a log file and write perl scripts
- * to analyze them!
- *
- * Don't use these with multithreaded test programs!
- */
-
-#define logfile curl_debuglogfile
-FILE *curl_debuglogfile = NULL;
-static bool memlimit = FALSE; /* enable memory limit */
-static long memsize = 0; /* set number of mallocs allowed */
-
-/* this sets the log file name */
-void curl_memdebug(const char *logname)
-{
- if(!logfile) {
- if(logname && *logname)
- logfile = fopen(logname, "w");
- else
- logfile = stderr;
-#ifdef MEMDEBUG_LOG_SYNC
- /* Flush the log file after every line so the log isn't lost in a crash */
- setvbuf(logfile, (char *)NULL, _IOLBF, 0);
-#endif
- }
-}
-
-/* This function sets the number of malloc() calls that should return
- successfully! */
-void curl_memlimit(long limit)
-{
- if(!memlimit) {
- memlimit = TRUE;
- memsize = limit;
- }
-}
-
-/* returns TRUE if this isn't allowed! */
-static bool countcheck(const char *func, int line, const char *source)
-{
- /* if source is NULL, then the call is made internally and this check
- should not be made */
- if(memlimit && source) {
- if(!memsize) {
- if(source) {
- /* log to file */
- curl_memlog("LIMIT %s:%d %s reached memlimit\n",
- source, line, func);
- /* log to stderr also */
- fprintf(stderr, "LIMIT %s:%d %s reached memlimit\n",
- source, line, func);
- }
- SET_ERRNO(ENOMEM);
- return TRUE; /* RETURN ERROR! */
- }
- else
- memsize--; /* countdown */
-
- /* log the countdown */
- if(source)
- curl_memlog("LIMIT %s:%d %ld ALLOCS left\n",
- source, line, memsize);
-
- }
-
- return FALSE; /* allow this */
-}
-
-void *curl_domalloc(size_t wantedsize, int line, const char *source)
-{
- struct memdebug *mem;
- size_t size;
-
- assert(wantedsize != 0);
-
- if(countcheck("malloc", line, source))
- return NULL;
-
- /* alloc at least 64 bytes */
- size = sizeof(struct memdebug)+wantedsize;
-
- mem = (Curl_cmalloc)(size);
- if(mem) {
- /* fill memory with junk */
- mt_malloc_fill(mem->mem, wantedsize);
- mem->size = wantedsize;
- }
-
- if(source)
- curl_memlog("MEM %s:%d malloc(%zu) = %p\n",
- source, line, wantedsize,
- mem ? (void *)mem->mem : (void *)0);
-
- return (mem ? mem->mem : NULL);
-}
-
-void *curl_docalloc(size_t wanted_elements, size_t wanted_size,
- int line, const char *source)
-{
- struct memdebug *mem;
- size_t size, user_size;
-
- assert(wanted_elements != 0);
- assert(wanted_size != 0);
-
- if(countcheck("calloc", line, source))
- return NULL;
-
- /* alloc at least 64 bytes */
- user_size = wanted_size * wanted_elements;
- size = sizeof(struct memdebug) + user_size;
-
- mem = (Curl_ccalloc)(1, size);
- if(mem)
- mem->size = user_size;
-
- if(source)
- curl_memlog("MEM %s:%d calloc(%zu,%zu) = %p\n",
- source, line, wanted_elements, wanted_size,
- mem ? (void *)mem->mem : (void *)0);
-
- return (mem ? mem->mem : NULL);
-}
-
-char *curl_dostrdup(const char *str, int line, const char *source)
-{
- char *mem;
- size_t len;
-
- assert(str != NULL);
-
- if(countcheck("strdup", line, source))
- return NULL;
-
- len=strlen(str)+1;
-
- mem=curl_domalloc(len, 0, NULL); /* NULL prevents logging */
- if(mem)
- memcpy(mem, str, len);
-
- if(source)
- curl_memlog("MEM %s:%d strdup(%p) (%zu) = %p\n",
- source, line, (void *)str, len, (void *)mem);
-
- return mem;
-}
-
-#if defined(WIN32) && defined(UNICODE)
-wchar_t *curl_dowcsdup(const wchar_t *str, int line, const char *source)
-{
- wchar_t *mem;
- size_t wsiz, bsiz;
-
- assert(str != NULL);
-
- if(countcheck("wcsdup", line, source))
- return NULL;
-
- wsiz = wcslen(str) + 1;
- bsiz = wsiz * sizeof(wchar_t);
-
- mem = curl_domalloc(bsiz, 0, NULL); /* NULL prevents logging */
- if(mem)
- memcpy(mem, str, bsiz);
-
- if(source)
- curl_memlog("MEM %s:%d wcsdup(%p) (%zu) = %p\n",
- source, line, (void *)str, bsiz, (void *)mem);
-
- return mem;
-}
-#endif
-
-/* We provide a realloc() that accepts a NULL as pointer, which then
- performs a malloc(). In order to work with ares. */
-void *curl_dorealloc(void *ptr, size_t wantedsize,
- int line, const char *source)
-{
- struct memdebug *mem=NULL;
-
- size_t size = sizeof(struct memdebug)+wantedsize;
-
- assert(wantedsize != 0);
-
- if(countcheck("realloc", line, source))
- return NULL;
-
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:1684)
- /* 1684: conversion from pointer to same-sized integral type */
-#endif
-
- if(ptr)
- mem = (void *)((char *)ptr - offsetof(struct memdebug, mem));
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-
- mem = (Curl_crealloc)(mem, size);
- if(source)
- curl_memlog("MEM %s:%d realloc(%p, %zu) = %p\n",
- source, line, (void *)ptr, wantedsize,
- mem ? (void *)mem->mem : (void *)0);
-
- if(mem) {
- mem->size = wantedsize;
- return mem->mem;
- }
-
- return NULL;
-}
-
-void curl_dofree(void *ptr, int line, const char *source)
-{
- struct memdebug *mem;
-
- if(ptr) {
-
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:1684)
- /* 1684: conversion from pointer to same-sized integral type */
-#endif
-
- mem = (void *)((char *)ptr - offsetof(struct memdebug, mem));
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-
- /* destroy */
- mt_free_fill(mem->mem, mem->size);
-
- /* free for real */
- (Curl_cfree)(mem);
- }
-
- if(source)
- curl_memlog("MEM %s:%d free(%p)\n", source, line, (void *)ptr);
-}
-
-curl_socket_t curl_socket(int domain, int type, int protocol,
- int line, const char *source)
-{
- const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
- "FD %s:%d socket() = %d\n" :
- (sizeof(curl_socket_t) == sizeof(long)) ?
- "FD %s:%d socket() = %ld\n" :
- "FD %s:%d socket() = %zd\n" ;
-
- curl_socket_t sockfd = socket(domain, type, protocol);
-
- if(source && (sockfd != CURL_SOCKET_BAD))
- curl_memlog(fmt, source, line, sockfd);
-
- return sockfd;
-}
-
-#ifdef HAVE_SOCKETPAIR
-int curl_socketpair(int domain, int type, int protocol,
- curl_socket_t socket_vector[2],
- int line, const char *source)
-{
- const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
- "FD %s:%d socketpair() = %d %d\n" :
- (sizeof(curl_socket_t) == sizeof(long)) ?
- "FD %s:%d socketpair() = %ld %ld\n" :
- "FD %s:%d socketpair() = %zd %zd\n" ;
-
- int res = socketpair(domain, type, protocol, socket_vector);
-
- if(source && (0 == res))
- curl_memlog(fmt, source, line, socket_vector[0], socket_vector[1]);
-
- return res;
-}
-#endif
-
-curl_socket_t curl_accept(curl_socket_t s, void *saddr, void *saddrlen,
- int line, const char *source)
-{
- const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
- "FD %s:%d accept() = %d\n" :
- (sizeof(curl_socket_t) == sizeof(long)) ?
- "FD %s:%d accept() = %ld\n" :
- "FD %s:%d accept() = %zd\n" ;
-
- struct sockaddr *addr = (struct sockaddr *)saddr;
- curl_socklen_t *addrlen = (curl_socklen_t *)saddrlen;
-
- curl_socket_t sockfd = accept(s, addr, addrlen);
-
- if(source && (sockfd != CURL_SOCKET_BAD))
- curl_memlog(fmt, source, line, sockfd);
-
- return sockfd;
-}
-
-/* separate function to allow libcurl to mark a "faked" close */
-void curl_mark_sclose(curl_socket_t sockfd, int line, const char *source)
-{
- const char *fmt = (sizeof(curl_socket_t) == sizeof(int)) ?
- "FD %s:%d sclose(%d)\n" :
- (sizeof(curl_socket_t) == sizeof(long)) ?
- "FD %s:%d sclose(%ld)\n" :
- "FD %s:%d sclose(%zd)\n" ;
-
- if(source)
- curl_memlog(fmt, source, line, sockfd);
-}
-
-/* this is our own defined way to close sockets on *ALL* platforms */
-int curl_sclose(curl_socket_t sockfd, int line, const char *source)
-{
- int res=sclose(sockfd);
- curl_mark_sclose(sockfd, line, source);
- return res;
-}
-
-FILE *curl_fopen(const char *file, const char *mode,
- int line, const char *source)
-{
- FILE *res=fopen(file, mode);
-
- if(source)
- curl_memlog("FILE %s:%d fopen(\"%s\",\"%s\") = %p\n",
- source, line, file, mode, (void *)res);
-
- return res;
-}
-
-#ifdef HAVE_FDOPEN
-FILE *curl_fdopen(int filedes, const char *mode,
- int line, const char *source)
-{
- FILE *res=fdopen(filedes, mode);
-
- if(source)
- curl_memlog("FILE %s:%d fdopen(\"%d\",\"%s\") = %p\n",
- source, line, filedes, mode, (void *)res);
-
- return res;
-}
-#endif
-
-int curl_fclose(FILE *file, int line, const char *source)
-{
- int res;
-
- assert(file != NULL);
-
- res=fclose(file);
-
- if(source)
- curl_memlog("FILE %s:%d fclose(%p)\n",
- source, line, (void *)file);
-
- return res;
-}
-
-#define LOGLINE_BUFSIZE 1024
-
-/* this does the writting to the memory tracking log file */
-void curl_memlog(const char *format, ...)
-{
- char *buf;
- int nchars;
- va_list ap;
-
- if(!logfile)
- return;
-
- buf = (Curl_cmalloc)(LOGLINE_BUFSIZE);
- if(!buf)
- return;
-
- va_start(ap, format);
- nchars = vsnprintf(buf, LOGLINE_BUFSIZE, format, ap);
- va_end(ap);
-
- if(nchars > LOGLINE_BUFSIZE - 1)
- nchars = LOGLINE_BUFSIZE - 1;
-
- if(nchars > 0)
- fwrite(buf, 1, nchars, logfile);
-
- (Curl_cfree)(buf);
-}
-
-#endif /* CURLDEBUG */
diff --git a/external/libcurl_android/jni/libcurl/lib/memdebug.h b/external/libcurl_android/jni/libcurl/lib/memdebug.h
deleted file mode 100755
index bd565c8d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/memdebug.h
+++ /dev/null
@@ -1,176 +0,0 @@
-#ifndef HEADER_CURL_MEMDEBUG_H
-#define HEADER_CURL_MEMDEBUG_H
-#ifdef CURLDEBUG
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * CAUTION: this header is designed to work when included by the app-side
- * as well as the library. Do not mix with library internals!
- */
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#define CURL_MT_LOGFNAME_BUFSIZE 512
-
-#define logfile curl_debuglogfile
-
-extern FILE *logfile;
-
-/* memory functions */
-CURL_EXTERN void *curl_domalloc(size_t size, int line, const char *source);
-CURL_EXTERN void *curl_docalloc(size_t elements, size_t size, int line,
- const char *source);
-CURL_EXTERN void *curl_dorealloc(void *ptr, size_t size, int line,
- const char *source);
-CURL_EXTERN void curl_dofree(void *ptr, int line, const char *source);
-CURL_EXTERN char *curl_dostrdup(const char *str, int line, const char *source);
-#if defined(WIN32) && defined(UNICODE)
-CURL_EXTERN wchar_t *curl_dowcsdup(const wchar_t *str, int line,
- const char *source);
-#endif
-
-CURL_EXTERN void curl_memdebug(const char *logname);
-CURL_EXTERN void curl_memlimit(long limit);
-CURL_EXTERN void curl_memlog(const char *format, ...);
-
-/* file descriptor manipulators */
-CURL_EXTERN curl_socket_t curl_socket(int domain, int type, int protocol,
- int line , const char *source);
-CURL_EXTERN void curl_mark_sclose(curl_socket_t sockfd,
- int line , const char *source);
-CURL_EXTERN int curl_sclose(curl_socket_t sockfd,
- int line , const char *source);
-CURL_EXTERN curl_socket_t curl_accept(curl_socket_t s, void *a, void *alen,
- int line, const char *source);
-#ifdef HAVE_SOCKETPAIR
-CURL_EXTERN int curl_socketpair(int domain, int type, int protocol,
- curl_socket_t socket_vector[2],
- int line , const char *source);
-#endif
-
-/* FILE functions */
-CURL_EXTERN FILE *curl_fopen(const char *file, const char *mode, int line,
- const char *source);
-#ifdef HAVE_FDOPEN
-CURL_EXTERN FILE *curl_fdopen(int filedes, const char *mode, int line,
- const char *source);
-#endif
-CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source);
-
-#ifndef MEMDEBUG_NODEFINES
-
-/* Set this symbol on the command-line, recompile all lib-sources */
-#undef strdup
-#define strdup(ptr) curl_dostrdup(ptr, __LINE__, __FILE__)
-#define malloc(size) curl_domalloc(size, __LINE__, __FILE__)
-#define calloc(nbelem,size) curl_docalloc(nbelem, size, __LINE__, __FILE__)
-#define realloc(ptr,size) curl_dorealloc(ptr, size, __LINE__, __FILE__)
-#define free(ptr) curl_dofree(ptr, __LINE__, __FILE__)
-
-#ifdef WIN32
-# ifdef UNICODE
-# undef wcsdup
-# define wcsdup(ptr) curl_dowcsdup(ptr, __LINE__, __FILE__)
-# undef _wcsdup
-# define _wcsdup(ptr) curl_dowcsdup(ptr, __LINE__, __FILE__)
-# undef _tcsdup
-# define _tcsdup(ptr) curl_dowcsdup(ptr, __LINE__, __FILE__)
-# else
-# undef _tcsdup
-# define _tcsdup(ptr) curl_dostrdup(ptr, __LINE__, __FILE__)
-# endif
-#endif
-
-#define socket(domain,type,protocol)\
- curl_socket(domain,type,protocol,__LINE__,__FILE__)
-#undef accept /* for those with accept as a macro */
-#define accept(sock,addr,len)\
- curl_accept(sock,addr,len,__LINE__,__FILE__)
-#ifdef HAVE_SOCKETPAIR
-#define socketpair(domain,type,protocol,socket_vector)\
- curl_socketpair(domain,type,protocol,socket_vector,__LINE__,__FILE__)
-#endif
-
-#ifdef HAVE_GETADDRINFO
-#if defined(getaddrinfo) && defined(__osf__)
-/* OSF/1 and Tru64 have getaddrinfo as a define already, so we cannot define
- our macro as for other platforms. Instead, we redefine the new name they
- define getaddrinfo to become! */
-#define ogetaddrinfo(host,serv,hint,res) \
- curl_dogetaddrinfo(host,serv,hint,res,__LINE__,__FILE__)
-#else
-#undef getaddrinfo
-#define getaddrinfo(host,serv,hint,res) \
- curl_dogetaddrinfo(host,serv,hint,res,__LINE__,__FILE__)
-#endif
-#endif /* HAVE_GETADDRINFO */
-
-#ifdef HAVE_GETNAMEINFO
-#undef getnameinfo
-#define getnameinfo(sa,salen,host,hostlen,serv,servlen,flags) \
- curl_dogetnameinfo(sa,salen,host,hostlen,serv,servlen,flags, __LINE__, \
- __FILE__)
-#endif /* HAVE_GETNAMEINFO */
-
-#ifdef HAVE_FREEADDRINFO
-#undef freeaddrinfo
-#define freeaddrinfo(data) \
- curl_dofreeaddrinfo(data,__LINE__,__FILE__)
-#endif /* HAVE_FREEADDRINFO */
-
-/* sclose is probably already defined, redefine it! */
-#undef sclose
-#define sclose(sockfd) curl_sclose(sockfd,__LINE__,__FILE__)
-
-#define fake_sclose(sockfd) curl_mark_sclose(sockfd,__LINE__,__FILE__)
-
-#undef fopen
-#define fopen(file,mode) curl_fopen(file,mode,__LINE__,__FILE__)
-#undef fdopen
-#define fdopen(file,mode) curl_fdopen(file,mode,__LINE__,__FILE__)
-#define fclose(file) curl_fclose(file,__LINE__,__FILE__)
-
-#endif /* MEMDEBUG_NODEFINES */
-
-#endif /* CURLDEBUG */
-
-/*
-** Following section applies even when CURLDEBUG is not defined.
-*/
-
-#ifndef fake_sclose
-#define fake_sclose(x) Curl_nop_stmt
-#endif
-
-/*
- * Curl_safefree defined as a macro to allow MemoryTracking feature
- * to log free() calls at same location where Curl_safefree is used.
- * This macro also assigns NULL to given pointer when free'd.
- */
-
-#define Curl_safefree(ptr) \
- do {if((ptr)) {free((ptr)); (ptr) = NULL;}} WHILE_FALSE
-
-#endif /* HEADER_CURL_MEMDEBUG_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/mprintf.c b/external/libcurl_android/jni/libcurl/lib/mprintf.c
deleted file mode 100755
index 23070a76..00000000
--- a/external/libcurl_android/jni/libcurl/lib/mprintf.c
+++ /dev/null
@@ -1,1142 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1999 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- *
- * Purpose:
- * A merge of Bjorn Reese's format() function and Daniel's dsprintf()
- * 1.0. A full blooded printf() clone with full support for <num>$
- * everywhere (parameters, widths and precisions) including variabled
- * sized parameters (like doubles, long longs, long doubles and even
- * void * in 64-bit architectures).
- *
- * Current restrictions:
- * - Max 128 parameters
- * - No 'long double' support.
- *
- * If you ever want truly portable and good *printf() clones, the project that
- * took on from here is named 'Trio' and you find more details on the trio web
- * page at http://daniel.haxx.se/trio/
- */
-
-#include "curl_setup.h"
-
-#if defined(DJGPP) && (DJGPP_MINOR < 4)
-#undef _MPRINTF_REPLACE /* don't use x_was_used() here */
-#endif
-
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifndef SIZEOF_LONG_DOUBLE
-#define SIZEOF_LONG_DOUBLE 0
-#endif
-
-/*
- * If SIZEOF_SIZE_T has not been defined, default to the size of long.
- */
-
-#ifndef SIZEOF_SIZE_T
-# define SIZEOF_SIZE_T CURL_SIZEOF_LONG
-#endif
-
-#ifdef HAVE_LONGLONG
-# define LONG_LONG_TYPE long long
-# define HAVE_LONG_LONG_TYPE
-#else
-# if defined(_MSC_VER) && (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64)
-# define LONG_LONG_TYPE __int64
-# define HAVE_LONG_LONG_TYPE
-# else
-# undef LONG_LONG_TYPE
-# undef HAVE_LONG_LONG_TYPE
-# endif
-#endif
-
-/*
- * Non-ANSI integer extensions
- */
-
-#if (defined(__BORLANDC__) && (__BORLANDC__ >= 0x520)) || \
- (defined(__WATCOMC__) && defined(__386__)) || \
- (defined(__POCC__) && defined(_MSC_VER)) || \
- (defined(_WIN32_WCE)) || \
- (defined(__MINGW32__)) || \
- (defined(_MSC_VER) && (_MSC_VER >= 900) && (_INTEGRAL_MAX_BITS >= 64))
-# define MP_HAVE_INT_EXTENSIONS
-#endif
-
-/*
- * Max integer data types that mprintf.c is capable
- */
-
-#ifdef HAVE_LONG_LONG_TYPE
-# define mp_intmax_t LONG_LONG_TYPE
-# define mp_uintmax_t unsigned LONG_LONG_TYPE
-#else
-# define mp_intmax_t long
-# define mp_uintmax_t unsigned long
-#endif
-
-#define BUFFSIZE 256 /* buffer for long-to-str and float-to-str calcs */
-#define MAX_PARAMETERS 128 /* lame static limit */
-
-#ifdef __AMIGA__
-# undef FORMAT_INT
-#endif
-
-/* Lower-case digits. */
-static const char lower_digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-
-/* Upper-case digits. */
-static const char upper_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-
-#define OUTCHAR(x) \
- do{ \
- if(stream((unsigned char)(x), (FILE *)data) != -1) \
- done++; \
- else \
- return done; /* return immediately on failure */ \
- } WHILE_FALSE
-
-/* Data type to read from the arglist */
-typedef enum {
- FORMAT_UNKNOWN = 0,
- FORMAT_STRING,
- FORMAT_PTR,
- FORMAT_INT,
- FORMAT_INTPTR,
- FORMAT_LONG,
- FORMAT_LONGLONG,
- FORMAT_DOUBLE,
- FORMAT_LONGDOUBLE,
- FORMAT_WIDTH /* For internal use */
-} FormatType;
-
-/* conversion and display flags */
-enum {
- FLAGS_NEW = 0,
- FLAGS_SPACE = 1<<0,
- FLAGS_SHOWSIGN = 1<<1,
- FLAGS_LEFT = 1<<2,
- FLAGS_ALT = 1<<3,
- FLAGS_SHORT = 1<<4,
- FLAGS_LONG = 1<<5,
- FLAGS_LONGLONG = 1<<6,
- FLAGS_LONGDOUBLE = 1<<7,
- FLAGS_PAD_NIL = 1<<8,
- FLAGS_UNSIGNED = 1<<9,
- FLAGS_OCTAL = 1<<10,
- FLAGS_HEX = 1<<11,
- FLAGS_UPPER = 1<<12,
- FLAGS_WIDTH = 1<<13, /* '*' or '*<num>$' used */
- FLAGS_WIDTHPARAM = 1<<14, /* width PARAMETER was specified */
- FLAGS_PREC = 1<<15, /* precision was specified */
- FLAGS_PRECPARAM = 1<<16, /* precision PARAMETER was specified */
- FLAGS_CHAR = 1<<17, /* %c story */
- FLAGS_FLOATE = 1<<18, /* %e or %E */
- FLAGS_FLOATG = 1<<19 /* %g or %G */
-};
-
-typedef struct {
- FormatType type;
- int flags;
- long width; /* width OR width parameter number */
- long precision; /* precision OR precision parameter number */
- union {
- char *str;
- void *ptr;
- union {
- mp_intmax_t as_signed;
- mp_uintmax_t as_unsigned;
- } num;
- double dnum;
- } data;
-} va_stack_t;
-
-struct nsprintf {
- char *buffer;
- size_t length;
- size_t max;
-};
-
-struct asprintf {
- char *buffer; /* allocated buffer */
- size_t len; /* length of string */
- size_t alloc; /* length of alloc */
- int fail; /* (!= 0) if an alloc has failed and thus
- the output is not the complete data */
-};
-
-static long dprintf_DollarString(char *input, char **end)
-{
- int number=0;
- while(ISDIGIT(*input)) {
- number *= 10;
- number += *input-'0';
- input++;
- }
- if(number && ('$'==*input++)) {
- *end = input;
- return number;
- }
- return 0;
-}
-
-static bool dprintf_IsQualifierNoDollar(const char *fmt)
-{
-#if defined(MP_HAVE_INT_EXTENSIONS)
- if(!strncmp(fmt, "I32", 3) || !strncmp(fmt, "I64", 3)) {
- return TRUE;
- }
-#endif
-
- switch(*fmt) {
- case '-': case '+': case ' ': case '#': case '.':
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case 'h': case 'l': case 'L': case 'z': case 'q':
- case '*': case 'O':
-#if defined(MP_HAVE_INT_EXTENSIONS)
- case 'I':
-#endif
- return TRUE;
-
- default:
- return FALSE;
- }
-}
-
-/******************************************************************
- *
- * Pass 1:
- * Create an index with the type of each parameter entry and its
- * value (may vary in size)
- *
- ******************************************************************/
-
-static long dprintf_Pass1(const char *format, va_stack_t *vto, char **endpos,
- va_list arglist)
-{
- char *fmt = (char *)format;
- int param_num = 0;
- long this_param;
- long width;
- long precision;
- int flags;
- long max_param=0;
- long i;
-
- while(*fmt) {
- if(*fmt++ == '%') {
- if(*fmt == '%') {
- fmt++;
- continue; /* while */
- }
-
- flags = FLAGS_NEW;
-
- /* Handle the positional case (N$) */
-
- param_num++;
-
- this_param = dprintf_DollarString(fmt, &fmt);
- if(0 == this_param)
- /* we got no positional, get the next counter */
- this_param = param_num;
-
- if(this_param > max_param)
- max_param = this_param;
-
- /*
- * The parameter with number 'i' should be used. Next, we need
- * to get SIZE and TYPE of the parameter. Add the information
- * to our array.
- */
-
- width = 0;
- precision = 0;
-
- /* Handle the flags */
-
- while(dprintf_IsQualifierNoDollar(fmt)) {
-#if defined(MP_HAVE_INT_EXTENSIONS)
- if(!strncmp(fmt, "I32", 3)) {
- flags |= FLAGS_LONG;
- fmt += 3;
- }
- else if(!strncmp(fmt, "I64", 3)) {
- flags |= FLAGS_LONGLONG;
- fmt += 3;
- }
- else
-#endif
-
- switch(*fmt++) {
- case ' ':
- flags |= FLAGS_SPACE;
- break;
- case '+':
- flags |= FLAGS_SHOWSIGN;
- break;
- case '-':
- flags |= FLAGS_LEFT;
- flags &= ~FLAGS_PAD_NIL;
- break;
- case '#':
- flags |= FLAGS_ALT;
- break;
- case '.':
- flags |= FLAGS_PREC;
- if('*' == *fmt) {
- /* The precision is picked from a specified parameter */
-
- flags |= FLAGS_PRECPARAM;
- fmt++;
- param_num++;
-
- i = dprintf_DollarString(fmt, &fmt);
- if(i)
- precision = i;
- else
- precision = param_num;
-
- if(precision > max_param)
- max_param = precision;
- }
- else {
- flags |= FLAGS_PREC;
- precision = strtol(fmt, &fmt, 10);
- }
- break;
- case 'h':
- flags |= FLAGS_SHORT;
- break;
-#if defined(MP_HAVE_INT_EXTENSIONS)
- case 'I':
-#if (CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
- flags |= FLAGS_LONGLONG;
-#else
- flags |= FLAGS_LONG;
-#endif
- break;
-#endif
- case 'l':
- if(flags & FLAGS_LONG)
- flags |= FLAGS_LONGLONG;
- else
- flags |= FLAGS_LONG;
- break;
- case 'L':
- flags |= FLAGS_LONGDOUBLE;
- break;
- case 'q':
- flags |= FLAGS_LONGLONG;
- break;
- case 'z':
- /* the code below generates a warning if -Wunreachable-code is
- used */
-#if (SIZEOF_SIZE_T > CURL_SIZEOF_LONG)
- flags |= FLAGS_LONGLONG;
-#else
- flags |= FLAGS_LONG;
-#endif
- break;
- case 'O':
-#if (CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
- flags |= FLAGS_LONGLONG;
-#else
- flags |= FLAGS_LONG;
-#endif
- break;
- case '0':
- if(!(flags & FLAGS_LEFT))
- flags |= FLAGS_PAD_NIL;
- /* FALLTHROUGH */
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- flags |= FLAGS_WIDTH;
- width = strtol(fmt-1, &fmt, 10);
- break;
- case '*': /* Special case */
- flags |= FLAGS_WIDTHPARAM;
- param_num++;
-
- i = dprintf_DollarString(fmt, &fmt);
- if(i)
- width = i;
- else
- width = param_num;
- if(width > max_param)
- max_param=width;
- break;
- default:
- break;
- }
- } /* switch */
-
- /* Handle the specifier */
-
- i = this_param - 1;
-
- switch (*fmt) {
- case 'S':
- flags |= FLAGS_ALT;
- /* FALLTHROUGH */
- case 's':
- vto[i].type = FORMAT_STRING;
- break;
- case 'n':
- vto[i].type = FORMAT_INTPTR;
- break;
- case 'p':
- vto[i].type = FORMAT_PTR;
- break;
- case 'd': case 'i':
- vto[i].type = FORMAT_INT;
- break;
- case 'u':
- vto[i].type = FORMAT_INT;
- flags |= FLAGS_UNSIGNED;
- break;
- case 'o':
- vto[i].type = FORMAT_INT;
- flags |= FLAGS_OCTAL;
- break;
- case 'x':
- vto[i].type = FORMAT_INT;
- flags |= FLAGS_HEX|FLAGS_UNSIGNED;
- break;
- case 'X':
- vto[i].type = FORMAT_INT;
- flags |= FLAGS_HEX|FLAGS_UPPER|FLAGS_UNSIGNED;
- break;
- case 'c':
- vto[i].type = FORMAT_INT;
- flags |= FLAGS_CHAR;
- break;
- case 'f':
- vto[i].type = FORMAT_DOUBLE;
- break;
- case 'e':
- vto[i].type = FORMAT_DOUBLE;
- flags |= FLAGS_FLOATE;
- break;
- case 'E':
- vto[i].type = FORMAT_DOUBLE;
- flags |= FLAGS_FLOATE|FLAGS_UPPER;
- break;
- case 'g':
- vto[i].type = FORMAT_DOUBLE;
- flags |= FLAGS_FLOATG;
- break;
- case 'G':
- vto[i].type = FORMAT_DOUBLE;
- flags |= FLAGS_FLOATG|FLAGS_UPPER;
- break;
- default:
- vto[i].type = FORMAT_UNKNOWN;
- break;
- } /* switch */
-
- vto[i].flags = flags;
- vto[i].width = width;
- vto[i].precision = precision;
-
- if(flags & FLAGS_WIDTHPARAM) {
- /* we have the width specified from a parameter, so we make that
- parameter's info setup properly */
- vto[i].width = width - 1;
- i = width - 1;
- vto[i].type = FORMAT_WIDTH;
- vto[i].flags = FLAGS_NEW;
- vto[i].precision = vto[i].width = 0; /* can't use width or precision
- of width! */
- }
- if(flags & FLAGS_PRECPARAM) {
- /* we have the precision specified from a parameter, so we make that
- parameter's info setup properly */
- vto[i].precision = precision - 1;
- i = precision - 1;
- vto[i].type = FORMAT_WIDTH;
- vto[i].flags = FLAGS_NEW;
- vto[i].precision = vto[i].width = 0; /* can't use width or precision
- of width! */
- }
- *endpos++ = fmt + 1; /* end of this sequence */
- }
- }
-
- /* Read the arg list parameters into our data list */
- for(i=0; i<max_param; i++) {
- if((i + 1 < max_param) && (vto[i + 1].type == FORMAT_WIDTH)) {
- /* Width/precision arguments must be read before the main argument
- * they are attached to
- */
- vto[i + 1].data.num.as_signed = (mp_intmax_t)va_arg(arglist, int);
- }
-
- switch (vto[i].type) {
- case FORMAT_STRING:
- vto[i].data.str = va_arg(arglist, char *);
- break;
-
- case FORMAT_INTPTR:
- case FORMAT_UNKNOWN:
- case FORMAT_PTR:
- vto[i].data.ptr = va_arg(arglist, void *);
- break;
-
- case FORMAT_INT:
-#ifdef HAVE_LONG_LONG_TYPE
- if((vto[i].flags & FLAGS_LONGLONG) && (vto[i].flags & FLAGS_UNSIGNED))
- vto[i].data.num.as_unsigned =
- (mp_uintmax_t)va_arg(arglist, mp_uintmax_t);
- else if(vto[i].flags & FLAGS_LONGLONG)
- vto[i].data.num.as_signed =
- (mp_intmax_t)va_arg(arglist, mp_intmax_t);
- else
-#endif
- {
- if((vto[i].flags & FLAGS_LONG) && (vto[i].flags & FLAGS_UNSIGNED))
- vto[i].data.num.as_unsigned =
- (mp_uintmax_t)va_arg(arglist, unsigned long);
- else if(vto[i].flags & FLAGS_LONG)
- vto[i].data.num.as_signed =
- (mp_intmax_t)va_arg(arglist, long);
- else if(vto[i].flags & FLAGS_UNSIGNED)
- vto[i].data.num.as_unsigned =
- (mp_uintmax_t)va_arg(arglist, unsigned int);
- else
- vto[i].data.num.as_signed =
- (mp_intmax_t)va_arg(arglist, int);
- }
- break;
-
- case FORMAT_DOUBLE:
- vto[i].data.dnum = va_arg(arglist, double);
- break;
-
- case FORMAT_WIDTH:
- /* Argument has been read. Silently convert it into an integer
- * for later use
- */
- vto[i].type = FORMAT_INT;
- break;
-
- default:
- break;
- }
- }
-
- return max_param;
-
-}
-
-static int dprintf_formatf(
- void *data, /* untouched by format(), just sent to the stream() function in
- the second argument */
- /* function pointer called for each output character */
- int (*stream)(int, FILE *),
- const char *format, /* %-formatted string */
- va_list ap_save) /* list of parameters */
-{
- /* Base-36 digits for numbers. */
- const char *digits = lower_digits;
-
- /* Pointer into the format string. */
- char *f;
-
- /* Number of characters written. */
- int done = 0;
-
- long param; /* current parameter to read */
- long param_num=0; /* parameter counter */
-
- va_stack_t vto[MAX_PARAMETERS];
- char *endpos[MAX_PARAMETERS];
- char **end;
-
- char work[BUFFSIZE];
-
- va_stack_t *p;
-
- /* Do the actual %-code parsing */
- dprintf_Pass1(format, vto, endpos, ap_save);
-
- end = &endpos[0]; /* the initial end-position from the list dprintf_Pass1()
- created for us */
-
- f = (char *)format;
- while(*f != '\0') {
- /* Format spec modifiers. */
- int is_alt;
-
- /* Width of a field. */
- long width;
-
- /* Precision of a field. */
- long prec;
-
- /* Decimal integer is negative. */
- int is_neg;
-
- /* Base of a number to be written. */
- long base;
-
- /* Integral values to be written. */
- mp_uintmax_t num;
-
- /* Used to convert negative in positive. */
- mp_intmax_t signed_num;
-
- if(*f != '%') {
- /* This isn't a format spec, so write everything out until the next one
- OR end of string is reached. */
- do {
- OUTCHAR(*f);
- } while(*++f && ('%' != *f));
- continue;
- }
-
- ++f;
-
- /* Check for "%%". Note that although the ANSI standard lists
- '%' as a conversion specifier, it says "The complete format
- specification shall be `%%'," so we can avoid all the width
- and precision processing. */
- if(*f == '%') {
- ++f;
- OUTCHAR('%');
- continue;
- }
-
- /* If this is a positional parameter, the position must follow immediately
- after the %, thus create a %<num>$ sequence */
- param=dprintf_DollarString(f, &f);
-
- if(!param)
- param = param_num;
- else
- --param;
-
- param_num++; /* increase this always to allow "%2$s %1$s %s" and then the
- third %s will pick the 3rd argument */
-
- p = &vto[param];
-
- /* pick up the specified width */
- if(p->flags & FLAGS_WIDTHPARAM)
- width = (long)vto[p->width].data.num.as_signed;
- else
- width = p->width;
-
- /* pick up the specified precision */
- if(p->flags & FLAGS_PRECPARAM) {
- prec = (long)vto[p->precision].data.num.as_signed;
- param_num++; /* since the precision is extraced from a parameter, we
- must skip that to get to the next one properly */
- }
- else if(p->flags & FLAGS_PREC)
- prec = p->precision;
- else
- prec = -1;
-
- is_alt = (p->flags & FLAGS_ALT) ? 1 : 0;
-
- switch (p->type) {
- case FORMAT_INT:
- num = p->data.num.as_unsigned;
- if(p->flags & FLAGS_CHAR) {
- /* Character. */
- if(!(p->flags & FLAGS_LEFT))
- while(--width > 0)
- OUTCHAR(' ');
- OUTCHAR((char) num);
- if(p->flags & FLAGS_LEFT)
- while(--width > 0)
- OUTCHAR(' ');
- break;
- }
- if(p->flags & FLAGS_OCTAL) {
- /* Octal unsigned integer. */
- base = 8;
- goto unsigned_number;
- }
- else if(p->flags & FLAGS_HEX) {
- /* Hexadecimal unsigned integer. */
-
- digits = (p->flags & FLAGS_UPPER)? upper_digits : lower_digits;
- base = 16;
- goto unsigned_number;
- }
- else if(p->flags & FLAGS_UNSIGNED) {
- /* Decimal unsigned integer. */
- base = 10;
- goto unsigned_number;
- }
-
- /* Decimal integer. */
- base = 10;
-
- is_neg = (p->data.num.as_signed < (mp_intmax_t)0) ? 1 : 0;
- if(is_neg) {
- /* signed_num might fail to hold absolute negative minimum by 1 */
- signed_num = p->data.num.as_signed + (mp_intmax_t)1;
- signed_num = -signed_num;
- num = (mp_uintmax_t)signed_num;
- num += (mp_uintmax_t)1;
- }
-
- goto number;
-
- unsigned_number:
- /* Unsigned number of base BASE. */
- is_neg = 0;
-
- number:
- /* Number of base BASE. */
- {
- char *workend = &work[sizeof(work) - 1];
- char *w;
-
- /* Supply a default precision if none was given. */
- if(prec == -1)
- prec = 1;
-
- /* Put the number in WORK. */
- w = workend;
- while(num > 0) {
- *w-- = digits[num % base];
- num /= base;
- }
- width -= (long)(workend - w);
- prec -= (long)(workend - w);
-
- if(is_alt && base == 8 && prec <= 0) {
- *w-- = '0';
- --width;
- }
-
- if(prec > 0) {
- width -= prec;
- while(prec-- > 0)
- *w-- = '0';
- }
-
- if(is_alt && base == 16)
- width -= 2;
-
- if(is_neg || (p->flags & FLAGS_SHOWSIGN) || (p->flags & FLAGS_SPACE))
- --width;
-
- if(!(p->flags & FLAGS_LEFT) && !(p->flags & FLAGS_PAD_NIL))
- while(width-- > 0)
- OUTCHAR(' ');
-
- if(is_neg)
- OUTCHAR('-');
- else if(p->flags & FLAGS_SHOWSIGN)
- OUTCHAR('+');
- else if(p->flags & FLAGS_SPACE)
- OUTCHAR(' ');
-
- if(is_alt && base == 16) {
- OUTCHAR('0');
- if(p->flags & FLAGS_UPPER)
- OUTCHAR('X');
- else
- OUTCHAR('x');
- }
-
- if(!(p->flags & FLAGS_LEFT) && (p->flags & FLAGS_PAD_NIL))
- while(width-- > 0)
- OUTCHAR('0');
-
- /* Write the number. */
- while(++w <= workend) {
- OUTCHAR(*w);
- }
-
- if(p->flags & FLAGS_LEFT)
- while(width-- > 0)
- OUTCHAR(' ');
- }
- break;
-
- case FORMAT_STRING:
- /* String. */
- {
- static const char null[] = "(nil)";
- const char *str;
- size_t len;
-
- str = (char *) p->data.str;
- if(str == NULL) {
- /* Write null[] if there's space. */
- if(prec == -1 || prec >= (long) sizeof(null) - 1) {
- str = null;
- len = sizeof(null) - 1;
- /* Disable quotes around (nil) */
- p->flags &= (~FLAGS_ALT);
- }
- else {
- str = "";
- len = 0;
- }
- }
- else if(prec != -1)
- len = (size_t)prec;
- else
- len = strlen(str);
-
- width -= (long)len;
-
- if(p->flags & FLAGS_ALT)
- OUTCHAR('"');
-
- if(!(p->flags&FLAGS_LEFT))
- while(width-- > 0)
- OUTCHAR(' ');
-
- while((len-- > 0) && *str)
- OUTCHAR(*str++);
- if(p->flags&FLAGS_LEFT)
- while(width-- > 0)
- OUTCHAR(' ');
-
- if(p->flags & FLAGS_ALT)
- OUTCHAR('"');
- }
- break;
-
- case FORMAT_PTR:
- /* Generic pointer. */
- {
- void *ptr;
- ptr = (void *) p->data.ptr;
- if(ptr != NULL) {
- /* If the pointer is not NULL, write it as a %#x spec. */
- base = 16;
- digits = (p->flags & FLAGS_UPPER)? upper_digits : lower_digits;
- is_alt = 1;
- num = (size_t) ptr;
- is_neg = 0;
- goto number;
- }
- else {
- /* Write "(nil)" for a nil pointer. */
- static const char strnil[] = "(nil)";
- const char *point;
-
- width -= (long)(sizeof(strnil) - 1);
- if(p->flags & FLAGS_LEFT)
- while(width-- > 0)
- OUTCHAR(' ');
- for(point = strnil; *point != '\0'; ++point)
- OUTCHAR(*point);
- if(! (p->flags & FLAGS_LEFT))
- while(width-- > 0)
- OUTCHAR(' ');
- }
- }
- break;
-
- case FORMAT_DOUBLE:
- {
- char formatbuf[32]="%";
- char *fptr = &formatbuf[1];
- size_t left = sizeof(formatbuf)-strlen(formatbuf);
- int len;
-
- width = -1;
- if(p->flags & FLAGS_WIDTH)
- width = p->width;
- else if(p->flags & FLAGS_WIDTHPARAM)
- width = (long)vto[p->width].data.num.as_signed;
-
- prec = -1;
- if(p->flags & FLAGS_PREC)
- prec = p->precision;
- else if(p->flags & FLAGS_PRECPARAM)
- prec = (long)vto[p->precision].data.num.as_signed;
-
- if(p->flags & FLAGS_LEFT)
- *fptr++ = '-';
- if(p->flags & FLAGS_SHOWSIGN)
- *fptr++ = '+';
- if(p->flags & FLAGS_SPACE)
- *fptr++ = ' ';
- if(p->flags & FLAGS_ALT)
- *fptr++ = '#';
-
- *fptr = 0;
-
- if(width >= 0) {
- /* RECURSIVE USAGE */
- len = curl_msnprintf(fptr, left, "%ld", width);
- fptr += len;
- left -= len;
- }
- if(prec >= 0) {
- /* RECURSIVE USAGE */
- len = curl_msnprintf(fptr, left, ".%ld", prec);
- fptr += len;
- }
- if(p->flags & FLAGS_LONG)
- *fptr++ = 'l';
-
- if(p->flags & FLAGS_FLOATE)
- *fptr++ = (char)((p->flags & FLAGS_UPPER) ? 'E':'e');
- else if(p->flags & FLAGS_FLOATG)
- *fptr++ = (char)((p->flags & FLAGS_UPPER) ? 'G' : 'g');
- else
- *fptr++ = 'f';
-
- *fptr = 0; /* and a final zero termination */
-
- /* NOTE NOTE NOTE!! Not all sprintf implementations return number of
- output characters */
- (sprintf)(work, formatbuf, p->data.dnum);
-
- for(fptr=work; *fptr; fptr++)
- OUTCHAR(*fptr);
- }
- break;
-
- case FORMAT_INTPTR:
- /* Answer the count of characters written. */
-#ifdef HAVE_LONG_LONG_TYPE
- if(p->flags & FLAGS_LONGLONG)
- *(LONG_LONG_TYPE *) p->data.ptr = (LONG_LONG_TYPE)done;
- else
-#endif
- if(p->flags & FLAGS_LONG)
- *(long *) p->data.ptr = (long)done;
- else if(!(p->flags & FLAGS_SHORT))
- *(int *) p->data.ptr = (int)done;
- else
- *(short *) p->data.ptr = (short)done;
- break;
-
- default:
- break;
- }
- f = *end++; /* goto end of %-code */
-
- }
- return done;
-}
-
-/* fputc() look-alike */
-static int addbyter(int output, FILE *data)
-{
- struct nsprintf *infop=(struct nsprintf *)data;
- unsigned char outc = (unsigned char)output;
-
- if(infop->length < infop->max) {
- /* only do this if we haven't reached max length yet */
- infop->buffer[0] = outc; /* store */
- infop->buffer++; /* increase pointer */
- infop->length++; /* we are now one byte larger */
- return outc; /* fputc() returns like this on success */
- }
- return -1;
-}
-
-int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format,
- va_list ap_save)
-{
- int retcode;
- struct nsprintf info;
-
- info.buffer = buffer;
- info.length = 0;
- info.max = maxlength;
-
- retcode = dprintf_formatf(&info, addbyter, format, ap_save);
- if(info.max) {
- /* we terminate this with a zero byte */
- if(info.max == info.length)
- /* we're at maximum, scrap the last letter */
- info.buffer[-1] = 0;
- else
- info.buffer[0] = 0;
- }
- return retcode;
-}
-
-int curl_msnprintf(char *buffer, size_t maxlength, const char *format, ...)
-{
- int retcode;
- va_list ap_save; /* argument pointer */
- va_start(ap_save, format);
- retcode = curl_mvsnprintf(buffer, maxlength, format, ap_save);
- va_end(ap_save);
- return retcode;
-}
-
-/* fputc() look-alike */
-static int alloc_addbyter(int output, FILE *data)
-{
- struct asprintf *infop=(struct asprintf *)data;
- unsigned char outc = (unsigned char)output;
-
- if(!infop->buffer) {
- infop->buffer = malloc(32);
- if(!infop->buffer) {
- infop->fail = 1;
- return -1; /* fail */
- }
- infop->alloc = 32;
- infop->len =0;
- }
- else if(infop->len+1 >= infop->alloc) {
- char *newptr;
-
- newptr = realloc(infop->buffer, infop->alloc*2);
-
- if(!newptr) {
- infop->fail = 1;
- return -1; /* fail */
- }
- infop->buffer = newptr;
- infop->alloc *= 2;
- }
-
- infop->buffer[ infop->len ] = outc;
-
- infop->len++;
-
- return outc; /* fputc() returns like this on success */
-}
-
-char *curl_maprintf(const char *format, ...)
-{
- va_list ap_save; /* argument pointer */
- int retcode;
- struct asprintf info;
-
- info.buffer = NULL;
- info.len = 0;
- info.alloc = 0;
- info.fail = 0;
-
- va_start(ap_save, format);
- retcode = dprintf_formatf(&info, alloc_addbyter, format, ap_save);
- va_end(ap_save);
- if((-1 == retcode) || info.fail) {
- if(info.alloc)
- free(info.buffer);
- return NULL;
- }
- if(info.alloc) {
- info.buffer[info.len] = 0; /* we terminate this with a zero byte */
- return info.buffer;
- }
- else
- return strdup("");
-}
-
-char *curl_mvaprintf(const char *format, va_list ap_save)
-{
- int retcode;
- struct asprintf info;
-
- info.buffer = NULL;
- info.len = 0;
- info.alloc = 0;
- info.fail = 0;
-
- retcode = dprintf_formatf(&info, alloc_addbyter, format, ap_save);
- if((-1 == retcode) || info.fail) {
- if(info.alloc)
- free(info.buffer);
- return NULL;
- }
-
- if(info.alloc) {
- info.buffer[info.len] = 0; /* we terminate this with a zero byte */
- return info.buffer;
- }
- else
- return strdup("");
-}
-
-static int storebuffer(int output, FILE *data)
-{
- char **buffer = (char **)data;
- unsigned char outc = (unsigned char)output;
- **buffer = outc;
- (*buffer)++;
- return outc; /* act like fputc() ! */
-}
-
-int curl_msprintf(char *buffer, const char *format, ...)
-{
- va_list ap_save; /* argument pointer */
- int retcode;
- va_start(ap_save, format);
- retcode = dprintf_formatf(&buffer, storebuffer, format, ap_save);
- va_end(ap_save);
- *buffer=0; /* we terminate this with a zero byte */
- return retcode;
-}
-
-int curl_mprintf(const char *format, ...)
-{
- int retcode;
- va_list ap_save; /* argument pointer */
- va_start(ap_save, format);
-
- retcode = dprintf_formatf(stdout, fputc, format, ap_save);
- va_end(ap_save);
- return retcode;
-}
-
-int curl_mfprintf(FILE *whereto, const char *format, ...)
-{
- int retcode;
- va_list ap_save; /* argument pointer */
- va_start(ap_save, format);
- retcode = dprintf_formatf(whereto, fputc, format, ap_save);
- va_end(ap_save);
- return retcode;
-}
-
-int curl_mvsprintf(char *buffer, const char *format, va_list ap_save)
-{
- int retcode;
- retcode = dprintf_formatf(&buffer, storebuffer, format, ap_save);
- *buffer=0; /* we terminate this with a zero byte */
- return retcode;
-}
-
-int curl_mvprintf(const char *format, va_list ap_save)
-{
- return dprintf_formatf(stdout, fputc, format, ap_save);
-}
-
-int curl_mvfprintf(FILE *whereto, const char *format, va_list ap_save)
-{
- return dprintf_formatf(whereto, fputc, format, ap_save);
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/multi.c b/external/libcurl_android/jni/libcurl/lib/multi.c
deleted file mode 100755
index a1dc2c82..00000000
--- a/external/libcurl_android/jni/libcurl/lib/multi.c
+++ /dev/null
@@ -1,2835 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "transfer.h"
-#include "url.h"
-#include "connect.h"
-#include "progress.h"
-#include "easyif.h"
-#include "share.h"
-#include "multiif.h"
-#include "sendf.h"
-#include "timeval.h"
-#include "http.h"
-#include "select.h"
-#include "warnless.h"
-#include "speedcheck.h"
-#include "conncache.h"
-#include "bundles.h"
-#include "multihandle.h"
-#include "pipeline.h"
-#include "sigpipe.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- CURL_SOCKET_HASH_TABLE_SIZE should be a prime number. Increasing it from 97
- to 911 takes on a 32-bit machine 4 x 804 = 3211 more bytes. Still, every
- CURL handle takes 45-50 K memory, therefore this 3K are not significant.
-*/
-#ifndef CURL_SOCKET_HASH_TABLE_SIZE
-#define CURL_SOCKET_HASH_TABLE_SIZE 911
-#endif
-
-#define CURL_CONNECTION_HASH_SIZE 97
-
-#define CURL_MULTI_HANDLE 0x000bab1e
-
-#define GOOD_MULTI_HANDLE(x) \
- ((x) && (((struct Curl_multi *)(x))->type == CURL_MULTI_HANDLE))
-#define GOOD_EASY_HANDLE(x) \
- ((x) && (((struct SessionHandle *)(x))->magic == CURLEASY_MAGIC_NUMBER))
-
-static void singlesocket(struct Curl_multi *multi,
- struct SessionHandle *data);
-static int update_timer(struct Curl_multi *multi);
-
-static bool isHandleAtHead(struct SessionHandle *handle,
- struct curl_llist *pipeline);
-static CURLMcode add_next_timeout(struct timeval now,
- struct Curl_multi *multi,
- struct SessionHandle *d);
-static CURLMcode multi_timeout(struct Curl_multi *multi,
- long *timeout_ms);
-
-#ifdef DEBUGBUILD
-static const char * const statename[]={
- "INIT",
- "CONNECT_PEND",
- "CONNECT",
- "WAITRESOLVE",
- "WAITCONNECT",
- "WAITPROXYCONNECT",
- "PROTOCONNECT",
- "WAITDO",
- "DO",
- "DOING",
- "DO_MORE",
- "DO_DONE",
- "WAITPERFORM",
- "PERFORM",
- "TOOFAST",
- "DONE",
- "COMPLETED",
- "MSGSENT",
-};
-#endif
-
-static void multi_freetimeout(void *a, void *b);
-
-/* always use this function to change state, to make debugging easier */
-static void mstate(struct SessionHandle *data, CURLMstate state
-#ifdef DEBUGBUILD
- , int lineno
-#endif
-)
-{
-#ifdef DEBUGBUILD
- long connection_id = -5000;
-#endif
- CURLMstate oldstate = data->mstate;
-
- if(oldstate == state)
- /* don't bother when the new state is the same as the old state */
- return;
-
- data->mstate = state;
-
-#ifdef DEBUGBUILD
- if(data->mstate >= CURLM_STATE_CONNECT_PEND &&
- data->mstate < CURLM_STATE_COMPLETED) {
- if(data->easy_conn)
- connection_id = data->easy_conn->connection_id;
-
- infof(data,
- "STATE: %s => %s handle %p; line %d (connection #%ld) \n",
- statename[oldstate], statename[data->mstate],
- (void *)data, lineno, connection_id);
- }
-#endif
- if(state == CURLM_STATE_COMPLETED)
- /* changing to COMPLETED means there's one less easy handle 'alive' */
- data->multi->num_alive--;
-}
-
-#ifndef DEBUGBUILD
-#define multistate(x,y) mstate(x,y)
-#else
-#define multistate(x,y) mstate(x,y, __LINE__)
-#endif
-
-/*
- * We add one of these structs to the sockhash for a particular socket
- */
-
-struct Curl_sh_entry {
- struct SessionHandle *easy;
- time_t timestamp;
- int action; /* what action READ/WRITE this socket waits for */
- curl_socket_t socket; /* mainly to ease debugging */
- void *socketp; /* settable by users with curl_multi_assign() */
-};
-/* bits for 'action' having no bits means this socket is not expecting any
- action */
-#define SH_READ 1
-#define SH_WRITE 2
-
-/* make sure this socket is present in the hash for this handle */
-static struct Curl_sh_entry *sh_addentry(struct curl_hash *sh,
- curl_socket_t s,
- struct SessionHandle *data)
-{
- struct Curl_sh_entry *there =
- Curl_hash_pick(sh, (char *)&s, sizeof(curl_socket_t));
- struct Curl_sh_entry *check;
-
- if(there)
- /* it is present, return fine */
- return there;
-
- /* not present, add it */
- check = calloc(1, sizeof(struct Curl_sh_entry));
- if(!check)
- return NULL; /* major failure */
- check->easy = data;
- check->socket = s;
-
- /* make/add new hash entry */
- if(NULL == Curl_hash_add(sh, (char *)&s, sizeof(curl_socket_t), check)) {
- free(check);
- return NULL; /* major failure */
- }
-
- return check; /* things are good in sockhash land */
-}
-
-
-/* delete the given socket + handle from the hash */
-static void sh_delentry(struct curl_hash *sh, curl_socket_t s)
-{
- struct Curl_sh_entry *there =
- Curl_hash_pick(sh, (char *)&s, sizeof(curl_socket_t));
-
- if(there) {
- /* this socket is in the hash */
- /* We remove the hash entry. (This'll end up in a call to
- sh_freeentry().) */
- Curl_hash_delete(sh, (char *)&s, sizeof(curl_socket_t));
- }
-}
-
-/*
- * free a sockhash entry
- */
-static void sh_freeentry(void *freethis)
-{
- struct Curl_sh_entry *p = (struct Curl_sh_entry *) freethis;
-
- if(p)
- free(p);
-}
-
-static size_t fd_key_compare(void *k1, size_t k1_len, void *k2, size_t k2_len)
-{
- (void) k1_len; (void) k2_len;
-
- return (*((int *) k1)) == (*((int *) k2));
-}
-
-static size_t hash_fd(void *key, size_t key_length, size_t slots_num)
-{
- int fd = *((int *) key);
- (void) key_length;
-
- return (fd % (int)slots_num);
-}
-
-/*
- * sh_init() creates a new socket hash and returns the handle for it.
- *
- * Quote from README.multi_socket:
- *
- * "Some tests at 7000 and 9000 connections showed that the socket hash lookup
- * is somewhat of a bottle neck. Its current implementation may be a bit too
- * limiting. It simply has a fixed-size array, and on each entry in the array
- * it has a linked list with entries. So the hash only checks which list to
- * scan through. The code I had used so for used a list with merely 7 slots
- * (as that is what the DNS hash uses) but with 7000 connections that would
- * make an average of 1000 nodes in each list to run through. I upped that to
- * 97 slots (I believe a prime is suitable) and noticed a significant speed
- * increase. I need to reconsider the hash implementation or use a rather
- * large default value like this. At 9000 connections I was still below 10us
- * per call."
- *
- */
-static struct curl_hash *sh_init(int hashsize)
-{
- return Curl_hash_alloc(hashsize, hash_fd, fd_key_compare,
- sh_freeentry);
-}
-
-/*
- * multi_addmsg()
- *
- * Called when a transfer is completed. Adds the given msg pointer to
- * the list kept in the multi handle.
- */
-static CURLMcode multi_addmsg(struct Curl_multi *multi,
- struct Curl_message *msg)
-{
- if(!Curl_llist_insert_next(multi->msglist, multi->msglist->tail, msg))
- return CURLM_OUT_OF_MEMORY;
-
- return CURLM_OK;
-}
-
-/*
- * multi_freeamsg()
- *
- * Callback used by the llist system when a single list entry is destroyed.
- */
-static void multi_freeamsg(void *a, void *b)
-{
- (void)a;
- (void)b;
-}
-
-struct Curl_multi *Curl_multi_handle(int hashsize, /* socket hash */
- int chashsize) /* connection hash */
-{
- struct Curl_multi *multi = calloc(1, sizeof(struct Curl_multi));
-
- if(!multi)
- return NULL;
-
- multi->type = CURL_MULTI_HANDLE;
-
- multi->hostcache = Curl_mk_dnscache();
- if(!multi->hostcache)
- goto error;
-
- multi->sockhash = sh_init(hashsize);
- if(!multi->sockhash)
- goto error;
-
- multi->conn_cache = Curl_conncache_init(chashsize);
- if(!multi->conn_cache)
- goto error;
-
- multi->msglist = Curl_llist_alloc(multi_freeamsg);
- if(!multi->msglist)
- goto error;
-
- multi->pending = Curl_llist_alloc(multi_freeamsg);
- if(!multi->pending)
- goto error;
-
- /* allocate a new easy handle to use when closing cached connections */
- multi->closure_handle = curl_easy_init();
- if(!multi->closure_handle)
- goto error;
-
- multi->closure_handle->multi = multi;
- multi->closure_handle->state.conn_cache = multi->conn_cache;
-
- multi->max_pipeline_length = 5;
-
- /* -1 means it not set by user, use the default value */
- multi->maxconnects = -1;
- return (CURLM *) multi;
-
- error:
-
- Curl_hash_destroy(multi->sockhash);
- multi->sockhash = NULL;
- Curl_hash_destroy(multi->hostcache);
- multi->hostcache = NULL;
- Curl_conncache_destroy(multi->conn_cache);
- multi->conn_cache = NULL;
- Curl_close(multi->closure_handle);
- multi->closure_handle = NULL;
- Curl_llist_destroy(multi->msglist, NULL);
- Curl_llist_destroy(multi->pending, NULL);
-
- free(multi);
- return NULL;
-}
-
-CURLM *curl_multi_init(void)
-{
- return Curl_multi_handle(CURL_SOCKET_HASH_TABLE_SIZE,
- CURL_CONNECTION_HASH_SIZE);
-}
-
-CURLMcode curl_multi_add_handle(CURLM *multi_handle,
- CURL *easy_handle)
-{
- struct curl_llist *timeoutlist;
- struct Curl_multi *multi = (struct Curl_multi *)multi_handle;
- struct SessionHandle *data = (struct SessionHandle *)easy_handle;
-
- /* First, make some basic checks that the CURLM handle is a good handle */
- if(!GOOD_MULTI_HANDLE(multi))
- return CURLM_BAD_HANDLE;
-
- /* Verify that we got a somewhat good easy handle too */
- if(!GOOD_EASY_HANDLE(easy_handle))
- return CURLM_BAD_EASY_HANDLE;
-
- /* Prevent users from adding same easy handle more than once and prevent
- adding to more than one multi stack */
- if(data->multi)
- return CURLM_ADDED_ALREADY;
-
- /* Allocate and initialize timeout list for easy handle */
- timeoutlist = Curl_llist_alloc(multi_freetimeout);
- if(!timeoutlist)
- return CURLM_OUT_OF_MEMORY;
-
- /*
- * No failure allowed in this function beyond this point. And no
- * modification of easy nor multi handle allowed before this except for
- * potential multi's connection cache growing which won't be undone in this
- * function no matter what.
- */
-
- /* Make easy handle use timeout list initialized above */
- data->state.timeoutlist = timeoutlist;
- timeoutlist = NULL;
-
- /* set the easy handle */
- multistate(data, CURLM_STATE_INIT);
-
- if((data->set.global_dns_cache) &&
- (data->dns.hostcachetype != HCACHE_GLOBAL)) {
- /* global dns cache was requested but still isn't */
- struct curl_hash *global = Curl_global_host_cache_init();
- if(global) {
- /* only do this if the global cache init works */
- data->dns.hostcache = global;
- data->dns.hostcachetype = HCACHE_GLOBAL;
- }
- }
- /* for multi interface connections, we share DNS cache automatically if the
- easy handle's one is currently not set. */
- else if(!data->dns.hostcache ||
- (data->dns.hostcachetype == HCACHE_NONE)) {
- data->dns.hostcache = multi->hostcache;
- data->dns.hostcachetype = HCACHE_MULTI;
- }
-
- /* Point to the multi's connection cache */
- data->state.conn_cache = multi->conn_cache;
-
- data->state.infilesize = data->set.filesize;
-
- /* This adds the new entry at the 'end' of the doubly-linked circular
- list of SessionHandle structs to try and maintain a FIFO queue so
- the pipelined requests are in order. */
-
- /* We add this new entry last in the list. */
-
- data->next = NULL; /* end of the line */
- if(multi->easyp) {
- struct SessionHandle *last = multi->easylp;
- last->next = data;
- data->prev = last;
- multi->easylp = data; /* the new last node */
- }
- else {
- /* first node, make both prev and next be NULL! */
- data->next = NULL;
- data->prev = NULL;
- multi->easylp = multi->easyp = data; /* both first and last */
- }
-
- /* make the SessionHandle refer back to this multi handle */
- data->multi = multi_handle;
-
- /* Set the timeout for this handle to expire really soon so that it will
- be taken care of even when this handle is added in the midst of operation
- when only the curl_multi_socket() API is used. During that flow, only
- sockets that time-out or have actions will be dealt with. Since this
- handle has no action yet, we make sure it times out to get things to
- happen. */
- Curl_expire(data, 1);
-
- /* increase the node-counter */
- multi->num_easy++;
-
- /* increase the alive-counter */
- multi->num_alive++;
-
- /* A somewhat crude work-around for a little glitch in update_timer() that
- happens if the lastcall time is set to the same time when the handle is
- removed as when the next handle is added, as then the check in
- update_timer() that prevents calling the application multiple times with
- the same timer infor will not trigger and then the new handle's timeout
- will not be notified to the app.
-
- The work-around is thus simply to clear the 'lastcall' variable to force
- update_timer() to always trigger a callback to the app when a new easy
- handle is added */
- memset(&multi->timer_lastcall, 0, sizeof(multi->timer_lastcall));
-
- update_timer(multi);
- return CURLM_OK;
-}
-
-#if 0
-/* Debug-function, used like this:
- *
- * Curl_hash_print(multi->sockhash, debug_print_sock_hash);
- *
- * Enable the hash print function first by editing hash.c
- */
-static void debug_print_sock_hash(void *p)
-{
- struct Curl_sh_entry *sh = (struct Curl_sh_entry *)p;
-
- fprintf(stderr, " [easy %p/magic %x/socket %d]",
- (void *)sh->data, sh->data->magic, (int)sh->socket);
-}
-#endif
-
-CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
- CURL *curl_handle)
-{
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *easy = curl_handle;
- struct SessionHandle *data = easy;
-
- /* First, make some basic checks that the CURLM handle is a good handle */
- if(!GOOD_MULTI_HANDLE(multi))
- return CURLM_BAD_HANDLE;
-
- /* Verify that we got a somewhat good easy handle too */
- if(!GOOD_EASY_HANDLE(curl_handle))
- return CURLM_BAD_EASY_HANDLE;
-
- /* Prevent users from trying to remove same easy handle more than once */
- if(!data->multi)
- return CURLM_OK; /* it is already removed so let's say it is fine! */
-
- if(easy) {
- bool premature = (data->mstate < CURLM_STATE_COMPLETED) ? TRUE : FALSE;
- bool easy_owns_conn = (data->easy_conn &&
- (data->easy_conn->data == easy)) ?
- TRUE : FALSE;
-
- /* If the 'state' is not INIT or COMPLETED, we might need to do something
- nice to put the easy_handle in a good known state when this returns. */
- if(premature)
- /* this handle is "alive" so we need to count down the total number of
- alive connections when this is removed */
- multi->num_alive--;
-
- if(data->easy_conn &&
- (data->easy_conn->send_pipe->size +
- data->easy_conn->recv_pipe->size > 1) &&
- data->mstate > CURLM_STATE_WAITDO &&
- data->mstate < CURLM_STATE_COMPLETED) {
- /* If the handle is in a pipeline and has started sending off its
- request but not received its response yet, we need to close
- connection. */
- connclose(data->easy_conn, "Removed with partial response");
- /* Set connection owner so that Curl_done() closes it.
- We can sefely do this here since connection is killed. */
- data->easy_conn->data = easy;
- }
-
- /* The timer must be shut down before data->multi is set to NULL,
- else the timenode will remain in the splay tree after
- curl_easy_cleanup is called. */
- Curl_expire(data, 0);
-
- /* destroy the timeout list that is held in the easy handle */
- if(data->state.timeoutlist) {
- Curl_llist_destroy(data->state.timeoutlist, NULL);
- data->state.timeoutlist = NULL;
- }
-
- if(data->dns.hostcachetype == HCACHE_MULTI) {
- /* stop using the multi handle's DNS cache */
- data->dns.hostcache = NULL;
- data->dns.hostcachetype = HCACHE_NONE;
- }
-
- if(data->easy_conn) {
-
- /* we must call Curl_done() here (if we still "own it") so that we don't
- leave a half-baked one around */
- if(easy_owns_conn) {
-
- /* Curl_done() clears the conn->data field to lose the association
- between the easy handle and the connection
-
- Note that this ignores the return code simply because there's
- nothing really useful to do with it anyway! */
- (void)Curl_done(&data->easy_conn, data->result, premature);
- }
- else
- /* Clear connection pipelines, if Curl_done above was not called */
- Curl_getoff_all_pipelines(data, data->easy_conn);
- }
-
- Curl_wildcard_dtor(&data->wildcard);
-
- /* as this was using a shared connection cache we clear the pointer
- to that since we're not part of that multi handle anymore */
- data->state.conn_cache = NULL;
-
- /* change state without using multistate(), only to make singlesocket() do
- what we want */
- data->mstate = CURLM_STATE_COMPLETED;
- singlesocket(multi, easy); /* to let the application know what sockets
- that vanish with this handle */
-
- /* Remove the association between the connection and the handle */
- if(data->easy_conn) {
- data->easy_conn->data = NULL;
- data->easy_conn = NULL;
- }
-
- data->multi = NULL; /* clear the association to this multi handle */
-
- {
- /* make sure there's no pending message in the queue sent from this easy
- handle */
- struct curl_llist_element *e;
-
- for(e = multi->msglist->head; e; e = e->next) {
- struct Curl_message *msg = e->ptr;
-
- if(msg->extmsg.easy_handle == easy) {
- Curl_llist_remove(multi->msglist, e, NULL);
- /* there can only be one from this specific handle */
- break;
- }
- }
- }
-
- /* make the previous node point to our next */
- if(data->prev)
- data->prev->next = data->next;
- else
- multi->easyp = data->next; /* point to first node */
-
- /* make our next point to our previous node */
- if(data->next)
- data->next->prev = data->prev;
- else
- multi->easylp = data->prev; /* point to last node */
-
- /* NOTE NOTE NOTE
- We do not touch the easy handle here! */
-
- multi->num_easy--; /* one less to care about now */
-
- update_timer(multi);
- return CURLM_OK;
- }
- else
- return CURLM_BAD_EASY_HANDLE; /* twasn't found */
-}
-
-bool Curl_multi_pipeline_enabled(const struct Curl_multi *multi)
-{
- return (multi && multi->pipelining_enabled) ? TRUE : FALSE;
-}
-
-void Curl_multi_handlePipeBreak(struct SessionHandle *data)
-{
- data->easy_conn = NULL;
-}
-
-static int waitconnect_getsock(struct connectdata *conn,
- curl_socket_t *sock,
- int numsocks)
-{
- int i;
- int s=0;
- int rc=0;
-
- if(!numsocks)
- return GETSOCK_BLANK;
-
- for(i=0; i<2; i++) {
- if(conn->tempsock[i] != CURL_SOCKET_BAD) {
- sock[s] = conn->tempsock[i];
- rc |= GETSOCK_WRITESOCK(s++);
- }
- }
-
- /* when we've sent a CONNECT to a proxy, we should rather wait for the
- socket to become readable to be able to get the response headers */
- if(conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT) {
- sock[0] = conn->sock[FIRSTSOCKET];
- rc = GETSOCK_READSOCK(0);
- }
-
- return rc;
-}
-
-static int domore_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- if(conn && conn->handler->domore_getsock)
- return conn->handler->domore_getsock(conn, socks, numsocks);
- return GETSOCK_BLANK;
-}
-
-/* returns bitmapped flags for this handle and its sockets */
-static int multi_getsock(struct SessionHandle *data,
- curl_socket_t *socks, /* points to numsocks number
- of sockets */
- int numsocks)
-{
- /* If the pipe broke, or if there's no connection left for this easy handle,
- then we MUST bail out now with no bitmask set. The no connection case can
- happen when this is called from curl_multi_remove_handle() =>
- singlesocket() => multi_getsock().
- */
- if(data->state.pipe_broke || !data->easy_conn)
- return 0;
-
- if(data->mstate > CURLM_STATE_CONNECT &&
- data->mstate < CURLM_STATE_COMPLETED) {
- /* Set up ownership correctly */
- data->easy_conn->data = data;
- }
-
- switch(data->mstate) {
- default:
-#if 0 /* switch back on these cases to get the compiler to check for all enums
- to be present */
- case CURLM_STATE_TOOFAST: /* returns 0, so will not select. */
- case CURLM_STATE_COMPLETED:
- case CURLM_STATE_MSGSENT:
- case CURLM_STATE_INIT:
- case CURLM_STATE_CONNECT:
- case CURLM_STATE_WAITDO:
- case CURLM_STATE_DONE:
- case CURLM_STATE_LAST:
- /* this will get called with CURLM_STATE_COMPLETED when a handle is
- removed */
-#endif
- return 0;
-
- case CURLM_STATE_WAITRESOLVE:
- return Curl_resolver_getsock(data->easy_conn, socks, numsocks);
-
- case CURLM_STATE_PROTOCONNECT:
- return Curl_protocol_getsock(data->easy_conn, socks, numsocks);
-
- case CURLM_STATE_DO:
- case CURLM_STATE_DOING:
- return Curl_doing_getsock(data->easy_conn, socks, numsocks);
-
- case CURLM_STATE_WAITPROXYCONNECT:
- case CURLM_STATE_WAITCONNECT:
- return waitconnect_getsock(data->easy_conn, socks, numsocks);
-
- case CURLM_STATE_DO_MORE:
- return domore_getsock(data->easy_conn, socks, numsocks);
-
- case CURLM_STATE_DO_DONE: /* since is set after DO is completed, we switch
- to waiting for the same as the *PERFORM
- states */
- case CURLM_STATE_PERFORM:
- case CURLM_STATE_WAITPERFORM:
- return Curl_single_getsock(data->easy_conn, socks, numsocks);
- }
-
-}
-
-CURLMcode curl_multi_fdset(CURLM *multi_handle,
- fd_set *read_fd_set, fd_set *write_fd_set,
- fd_set *exc_fd_set, int *max_fd)
-{
- /* Scan through all the easy handles to get the file descriptors set.
- Some easy handles may not have connected to the remote host yet,
- and then we must make sure that is done. */
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *data;
- int this_max_fd=-1;
- curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
- int bitmap;
- int i;
- (void)exc_fd_set; /* not used */
-
- if(!GOOD_MULTI_HANDLE(multi))
- return CURLM_BAD_HANDLE;
-
- data=multi->easyp;
- while(data) {
- bitmap = multi_getsock(data, sockbunch, MAX_SOCKSPEREASYHANDLE);
-
- for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
- curl_socket_t s = CURL_SOCKET_BAD;
-
- if((bitmap & GETSOCK_READSOCK(i)) && VALID_SOCK((sockbunch[i]))) {
- FD_SET(sockbunch[i], read_fd_set);
- s = sockbunch[i];
- }
- if((bitmap & GETSOCK_WRITESOCK(i)) && VALID_SOCK((sockbunch[i]))) {
- FD_SET(sockbunch[i], write_fd_set);
- s = sockbunch[i];
- }
- if(s == CURL_SOCKET_BAD)
- /* this socket is unused, break out of loop */
- break;
- else {
- if((int)s > this_max_fd)
- this_max_fd = (int)s;
- }
- }
-
- data = data->next; /* check next handle */
- }
-
- *max_fd = this_max_fd;
-
- return CURLM_OK;
-}
-
-CURLMcode curl_multi_wait(CURLM *multi_handle,
- struct curl_waitfd extra_fds[],
- unsigned int extra_nfds,
- int timeout_ms,
- int *ret)
-{
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *data;
- curl_socket_t sockbunch[MAX_SOCKSPEREASYHANDLE];
- int bitmap;
- unsigned int i;
- unsigned int nfds = 0;
- unsigned int curlfds;
- struct pollfd *ufds = NULL;
- long timeout_internal;
-
- if(!GOOD_MULTI_HANDLE(multi))
- return CURLM_BAD_HANDLE;
-
- /* If the internally desired timeout is actually shorter than requested from
- the outside, then use the shorter time! But only if the internal timer
- is actually larger than -1! */
- (void)multi_timeout(multi, &timeout_internal);
- if((timeout_internal >= 0) && (timeout_internal < (long)timeout_ms))
- timeout_ms = (int)timeout_internal;
-
- /* Count up how many fds we have from the multi handle */
- data=multi->easyp;
- while(data) {
- bitmap = multi_getsock(data, sockbunch, MAX_SOCKSPEREASYHANDLE);
-
- for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
- curl_socket_t s = CURL_SOCKET_BAD;
-
- if(bitmap & GETSOCK_READSOCK(i)) {
- ++nfds;
- s = sockbunch[i];
- }
- if(bitmap & GETSOCK_WRITESOCK(i)) {
- ++nfds;
- s = sockbunch[i];
- }
- if(s == CURL_SOCKET_BAD) {
- break;
- }
- }
-
- data = data->next; /* check next handle */
- }
-
- curlfds = nfds; /* number of internal file descriptors */
- nfds += extra_nfds; /* add the externally provided ones */
-
- if(nfds || extra_nfds) {
- ufds = malloc(nfds * sizeof(struct pollfd));
- if(!ufds)
- return CURLM_OUT_OF_MEMORY;
- }
- nfds = 0;
-
- /* only do the second loop if we found descriptors in the first stage run
- above */
-
- if(curlfds) {
- /* Add the curl handles to our pollfds first */
- data=multi->easyp;
- while(data) {
- bitmap = multi_getsock(data, sockbunch, MAX_SOCKSPEREASYHANDLE);
-
- for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++) {
- curl_socket_t s = CURL_SOCKET_BAD;
-
- if(bitmap & GETSOCK_READSOCK(i)) {
- ufds[nfds].fd = sockbunch[i];
- ufds[nfds].events = POLLIN;
- ++nfds;
- s = sockbunch[i];
- }
- if(bitmap & GETSOCK_WRITESOCK(i)) {
- ufds[nfds].fd = sockbunch[i];
- ufds[nfds].events = POLLOUT;
- ++nfds;
- s = sockbunch[i];
- }
- if(s == CURL_SOCKET_BAD) {
- break;
- }
- }
-
- data = data->next; /* check next handle */
- }
- }
-
- /* Add external file descriptions from poll-like struct curl_waitfd */
- for(i = 0; i < extra_nfds; i++) {
- ufds[nfds].fd = extra_fds[i].fd;
- ufds[nfds].events = 0;
- if(extra_fds[i].events & CURL_WAIT_POLLIN)
- ufds[nfds].events |= POLLIN;
- if(extra_fds[i].events & CURL_WAIT_POLLPRI)
- ufds[nfds].events |= POLLPRI;
- if(extra_fds[i].events & CURL_WAIT_POLLOUT)
- ufds[nfds].events |= POLLOUT;
- ++nfds;
- }
-
- if(nfds) {
- /* wait... */
- infof(data, "Curl_poll(%d ds, %d ms)\n", nfds, timeout_ms);
- i = Curl_poll(ufds, nfds, timeout_ms);
-
- if(i) {
- unsigned int j;
- /* copy revents results from the poll to the curl_multi_wait poll
- struct, the bit values of the actual underlying poll() implementation
- may not be the same as the ones in the public libcurl API! */
- for(j = 0; j < extra_nfds; j++) {
- unsigned short mask = 0;
- unsigned r = ufds[curlfds + j].revents;
-
- if(r & POLLIN)
- mask |= CURL_WAIT_POLLIN;
- if(r & POLLOUT)
- mask |= CURL_WAIT_POLLOUT;
- if(r & POLLPRI)
- mask |= CURL_WAIT_POLLPRI;
-
- extra_fds[j].revents = mask;
- }
- }
- }
- else
- i = 0;
-
- Curl_safefree(ufds);
- if(ret)
- *ret = i;
- return CURLM_OK;
-}
-
-static CURLMcode multi_runsingle(struct Curl_multi *multi,
- struct timeval now,
- struct SessionHandle *data)
-{
- struct Curl_message *msg = NULL;
- bool connected;
- bool async;
- bool protocol_connect = FALSE;
- bool dophase_done = FALSE;
- bool done = FALSE;
- CURLMcode result = CURLM_OK;
- struct SingleRequest *k;
- long timeout_ms;
- int control;
-
- if(!GOOD_EASY_HANDLE(data))
- return CURLM_BAD_EASY_HANDLE;
-
- do {
- /* this is a single-iteration do-while loop just to allow a
- break to skip to the end of it */
- bool disconnect_conn = FALSE;
-
- /* Handle the case when the pipe breaks, i.e., the connection
- we're using gets cleaned up and we're left with nothing. */
- if(data->state.pipe_broke) {
- infof(data, "Pipe broke: handle 0x%p, url = %s\n",
- (void *)data, data->state.path);
-
- if(data->mstate < CURLM_STATE_COMPLETED) {
- /* Head back to the CONNECT state */
- multistate(data, CURLM_STATE_CONNECT);
- result = CURLM_CALL_MULTI_PERFORM;
- data->result = CURLE_OK;
- }
-
- data->state.pipe_broke = FALSE;
- data->easy_conn = NULL;
- break;
- }
-
- if(!data->easy_conn &&
- data->mstate > CURLM_STATE_CONNECT &&
- data->mstate < CURLM_STATE_DONE) {
- /* In all these states, the code will blindly access 'data->easy_conn'
- so this is precaution that it isn't NULL. And it silences static
- analyzers. */
- failf(data, "In state %d with no easy_conn, bail out!\n", data->mstate);
- return CURLM_INTERNAL_ERROR;
- }
-
- if(data->easy_conn && data->mstate > CURLM_STATE_CONNECT &&
- data->mstate < CURLM_STATE_COMPLETED)
- /* Make sure we set the connection's current owner */
- data->easy_conn->data = data;
-
- if(data->easy_conn &&
- (data->mstate >= CURLM_STATE_CONNECT) &&
- (data->mstate < CURLM_STATE_COMPLETED)) {
- /* we need to wait for the connect state as only then is the start time
- stored, but we must not check already completed handles */
-
- timeout_ms = Curl_timeleft(data, &now,
- (data->mstate <= CURLM_STATE_WAITDO)?
- TRUE:FALSE);
-
- if(timeout_ms < 0) {
- /* Handle timed out */
- if(data->mstate == CURLM_STATE_WAITRESOLVE)
- failf(data, "Resolving timed out after %ld milliseconds",
- Curl_tvdiff(now, data->progress.t_startsingle));
- else if(data->mstate == CURLM_STATE_WAITCONNECT)
- failf(data, "Connection timed out after %ld milliseconds",
- Curl_tvdiff(now, data->progress.t_startsingle));
- else {
- k = &data->req;
- if(k->size != -1) {
- failf(data, "Operation timed out after %ld milliseconds with %"
- CURL_FORMAT_CURL_OFF_T " out of %"
- CURL_FORMAT_CURL_OFF_T " bytes received",
- Curl_tvdiff(k->now, data->progress.t_startsingle),
- k->bytecount, k->size);
- }
- else {
- failf(data, "Operation timed out after %ld milliseconds with %"
- CURL_FORMAT_CURL_OFF_T " bytes received",
- Curl_tvdiff(now, data->progress.t_startsingle),
- k->bytecount);
- }
- }
-
- /* Force the connection closed because the server could continue to
- send us stuff at any time. (The disconnect_conn logic used below
- doesn't work at this point). */
- connclose(data->easy_conn, "Disconnected with pending data");
- data->result = CURLE_OPERATION_TIMEDOUT;
- multistate(data, CURLM_STATE_COMPLETED);
- break;
- }
- }
-
- switch(data->mstate) {
- case CURLM_STATE_INIT:
- /* init this transfer. */
- data->result=Curl_pretransfer(data);
-
- if(CURLE_OK == data->result) {
- /* after init, go CONNECT */
- multistate(data, CURLM_STATE_CONNECT);
- Curl_pgrsTime(data, TIMER_STARTOP);
- result = CURLM_CALL_MULTI_PERFORM;
- }
- break;
-
- case CURLM_STATE_CONNECT_PEND:
- /* We will stay here until there is a connection available. Then
- we try again in the CURLM_STATE_CONNECT state. */
- break;
-
- case CURLM_STATE_CONNECT:
- /* Connect. We want to get a connection identifier filled in. */
- Curl_pgrsTime(data, TIMER_STARTSINGLE);
- data->result = Curl_connect(data, &data->easy_conn,
- &async, &protocol_connect);
- if(CURLE_NO_CONNECTION_AVAILABLE == data->result) {
- /* There was no connection available. We will go to the pending
- state and wait for an available connection. */
- multistate(data, CURLM_STATE_CONNECT_PEND);
-
- /* add this handle to the list of connect-pending handles */
- if(!Curl_llist_insert_next(multi->pending, multi->pending->tail, data))
- data->result = CURLE_OUT_OF_MEMORY;
- else
- data->result = CURLE_OK;
- break;
- }
-
- if(CURLE_OK == data->result) {
- /* Add this handle to the send or pend pipeline */
- data->result = Curl_add_handle_to_pipeline(data, data->easy_conn);
- if(CURLE_OK != data->result)
- disconnect_conn = TRUE;
- else {
- if(async)
- /* We're now waiting for an asynchronous name lookup */
- multistate(data, CURLM_STATE_WAITRESOLVE);
- else {
- /* after the connect has been sent off, go WAITCONNECT unless the
- protocol connect is already done and we can go directly to
- WAITDO or DO! */
- result = CURLM_CALL_MULTI_PERFORM;
-
- if(protocol_connect)
- multistate(data, multi->pipelining_enabled?
- CURLM_STATE_WAITDO:CURLM_STATE_DO);
- else {
-#ifndef CURL_DISABLE_HTTP
- if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
- multistate(data, CURLM_STATE_WAITPROXYCONNECT);
- else
-#endif
- multistate(data, CURLM_STATE_WAITCONNECT);
- }
- }
- }
- }
- break;
-
- case CURLM_STATE_WAITRESOLVE:
- /* awaiting an asynch name resolve to complete */
- {
- struct Curl_dns_entry *dns = NULL;
- struct connectdata *conn = data->easy_conn;
- int stale;
-
- /* check if we have the name resolved by now */
- if(data->share)
- Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE);
-
- dns = Curl_fetch_addr(conn, conn->host.name, (int)conn->port, &stale);
-
- if(dns) {
- dns->inuse++; /* we use it! */
-#ifdef CURLRES_ASYNCH
- conn->async.dns = dns;
- conn->async.done = TRUE;
-#endif
- data->result = CURLRESOLV_RESOLVED;
- infof(data, "Hostname was found in DNS cache\n");
- }
- if(stale)
- infof(data, "Hostname in DNS cache was stale, zapped\n");
-
- if(data->share)
- Curl_share_unlock(data, CURL_LOCK_DATA_DNS);
-
- if(!dns)
- data->result = Curl_resolver_is_resolved(data->easy_conn, &dns);
-
- /* Update sockets here, because the socket(s) may have been
- closed and the application thus needs to be told, even if it
- is likely that the same socket(s) will again be used further
- down. If the name has not yet been resolved, it is likely
- that new sockets have been opened in an attempt to contact
- another resolver. */
- singlesocket(multi, data);
-
- if(dns) {
- /* Perform the next step in the connection phase, and then move on
- to the WAITCONNECT state */
- data->result = Curl_async_resolved(data->easy_conn,
- &protocol_connect);
-
- if(CURLE_OK != data->result)
- /* if Curl_async_resolved() returns failure, the connection struct
- is already freed and gone */
- data->easy_conn = NULL; /* no more connection */
- else {
- /* call again please so that we get the next socket setup */
- result = CURLM_CALL_MULTI_PERFORM;
- if(protocol_connect)
- multistate(data, multi->pipelining_enabled?
- CURLM_STATE_WAITDO:CURLM_STATE_DO);
- else {
-#ifndef CURL_DISABLE_HTTP
- if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
- multistate(data, CURLM_STATE_WAITPROXYCONNECT);
- else
-#endif
- multistate(data, CURLM_STATE_WAITCONNECT);
- }
- }
- }
-
- if(CURLE_OK != data->result) {
- /* failure detected */
- disconnect_conn = TRUE;
- break;
- }
- }
- break;
-
-#ifndef CURL_DISABLE_HTTP
- case CURLM_STATE_WAITPROXYCONNECT:
- /* this is HTTP-specific, but sending CONNECT to a proxy is HTTP... */
- data->result = Curl_http_connect(data->easy_conn, &protocol_connect);
-
- if(data->easy_conn->bits.proxy_connect_closed) {
- /* connect back to proxy again */
- data->result = CURLE_OK;
- result = CURLM_CALL_MULTI_PERFORM;
- multistate(data, CURLM_STATE_CONNECT);
- }
- else if(CURLE_OK == data->result) {
- if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_COMPLETE)
- multistate(data, CURLM_STATE_WAITCONNECT);
- }
- break;
-#endif
-
- case CURLM_STATE_WAITCONNECT:
- /* awaiting a completion of an asynch connect */
- data->result = Curl_is_connected(data->easy_conn,
- FIRSTSOCKET,
- &connected);
- if(connected) {
-
- if(!data->result)
- /* if everything is still fine we do the protocol-specific connect
- setup */
- data->result = Curl_protocol_connect(data->easy_conn,
- &protocol_connect);
- }
-
- if(data->easy_conn->bits.proxy_connect_closed) {
- /* connect back to proxy again since it was closed in a proxy CONNECT
- setup */
- data->result = CURLE_OK;
- result = CURLM_CALL_MULTI_PERFORM;
- multistate(data, CURLM_STATE_CONNECT);
- break;
- }
- else if(CURLE_OK != data->result) {
- /* failure detected */
- /* Just break, the cleaning up is handled all in one place */
- disconnect_conn = TRUE;
- break;
- }
-
- if(connected) {
- if(!protocol_connect) {
- /* We have a TCP connection, but 'protocol_connect' may be false
- and then we continue to 'STATE_PROTOCONNECT'. If protocol
- connect is TRUE, we move on to STATE_DO.
- BUT if we are using a proxy we must change to WAITPROXYCONNECT
- */
-#ifndef CURL_DISABLE_HTTP
- if(data->easy_conn->tunnel_state[FIRSTSOCKET] == TUNNEL_CONNECT)
- multistate(data, CURLM_STATE_WAITPROXYCONNECT);
- else
-#endif
- multistate(data, CURLM_STATE_PROTOCONNECT);
-
- }
- else
- /* after the connect has completed, go WAITDO or DO */
- multistate(data, multi->pipelining_enabled?
- CURLM_STATE_WAITDO:CURLM_STATE_DO);
-
- result = CURLM_CALL_MULTI_PERFORM;
- }
- break;
-
- case CURLM_STATE_PROTOCONNECT:
- /* protocol-specific connect phase */
- data->result = Curl_protocol_connecting(data->easy_conn,
- &protocol_connect);
- if((data->result == CURLE_OK) && protocol_connect) {
- /* after the connect has completed, go WAITDO or DO */
- multistate(data, multi->pipelining_enabled?
- CURLM_STATE_WAITDO:CURLM_STATE_DO);
- result = CURLM_CALL_MULTI_PERFORM;
- }
- else if(data->result) {
- /* failure detected */
- Curl_posttransfer(data);
- Curl_done(&data->easy_conn, data->result, TRUE);
- disconnect_conn = TRUE;
- }
- break;
-
- case CURLM_STATE_WAITDO:
- /* Wait for our turn to DO when we're pipelining requests */
-#ifdef DEBUGBUILD
- infof(data, "WAITDO: Conn %ld send pipe %zu inuse %s athead %s\n",
- data->easy_conn->connection_id,
- data->easy_conn->send_pipe->size,
- data->easy_conn->writechannel_inuse?"TRUE":"FALSE",
- isHandleAtHead(data,
- data->easy_conn->send_pipe)?"TRUE":"FALSE");
-#endif
- if(!data->easy_conn->writechannel_inuse &&
- isHandleAtHead(data,
- data->easy_conn->send_pipe)) {
- /* Grab the channel */
- data->easy_conn->writechannel_inuse = TRUE;
- multistate(data, CURLM_STATE_DO);
- result = CURLM_CALL_MULTI_PERFORM;
- }
- break;
-
- case CURLM_STATE_DO:
- if(data->set.connect_only) {
- /* keep connection open for application to use the socket */
- connkeep(data->easy_conn, "CONNECT_ONLY");
- multistate(data, CURLM_STATE_DONE);
- data->result = CURLE_OK;
- result = CURLM_CALL_MULTI_PERFORM;
- }
- else {
- /* Perform the protocol's DO action */
- data->result = Curl_do(&data->easy_conn, &dophase_done);
-
- /* When Curl_do() returns failure, data->easy_conn might be NULL! */
-
- if(CURLE_OK == data->result) {
- if(!dophase_done) {
- /* some steps needed for wildcard matching */
- if(data->set.wildcardmatch) {
- struct WildcardData *wc = &data->wildcard;
- if(wc->state == CURLWC_DONE || wc->state == CURLWC_SKIP) {
- /* skip some states if it is important */
- Curl_done(&data->easy_conn, CURLE_OK, FALSE);
- multistate(data, CURLM_STATE_DONE);
- result = CURLM_CALL_MULTI_PERFORM;
- break;
- }
- }
- /* DO was not completed in one function call, we must continue
- DOING... */
- multistate(data, CURLM_STATE_DOING);
- result = CURLM_OK;
- }
-
- /* after DO, go DO_DONE... or DO_MORE */
- else if(data->easy_conn->bits.do_more) {
- /* we're supposed to do more, but we need to sit down, relax
- and wait a little while first */
- multistate(data, CURLM_STATE_DO_MORE);
- result = CURLM_OK;
- }
- else {
- /* we're done with the DO, now DO_DONE */
- multistate(data, CURLM_STATE_DO_DONE);
- result = CURLM_CALL_MULTI_PERFORM;
- }
- }
- else if((CURLE_SEND_ERROR == data->result) &&
- data->easy_conn->bits.reuse) {
- /*
- * In this situation, a connection that we were trying to use
- * may have unexpectedly died. If possible, send the connection
- * back to the CONNECT phase so we can try again.
- */
- char *newurl = NULL;
- followtype follow=FOLLOW_NONE;
- CURLcode drc;
- bool retry = FALSE;
-
- drc = Curl_retry_request(data->easy_conn, &newurl);
- if(drc) {
- /* a failure here pretty much implies an out of memory */
- data->result = drc;
- disconnect_conn = TRUE;
- }
- else
- retry = (newurl)?TRUE:FALSE;
-
- Curl_posttransfer(data);
- drc = Curl_done(&data->easy_conn, data->result, FALSE);
-
- /* When set to retry the connection, we must to go back to
- * the CONNECT state */
- if(retry) {
- if((drc == CURLE_OK) || (drc == CURLE_SEND_ERROR)) {
- follow = FOLLOW_RETRY;
- drc = Curl_follow(data, newurl, follow);
- if(drc == CURLE_OK) {
- multistate(data, CURLM_STATE_CONNECT);
- result = CURLM_CALL_MULTI_PERFORM;
- data->result = CURLE_OK;
- }
- else {
- /* Follow failed */
- data->result = drc;
- free(newurl);
- }
- }
- else {
- /* done didn't return OK or SEND_ERROR */
- data->result = drc;
- free(newurl);
- }
- }
- else {
- /* Have error handler disconnect conn if we can't retry */
- disconnect_conn = TRUE;
- }
- }
- else {
- /* failure detected */
- Curl_posttransfer(data);
- if(data->easy_conn)
- Curl_done(&data->easy_conn, data->result, FALSE);
- disconnect_conn = TRUE;
- }
- }
- break;
-
- case CURLM_STATE_DOING:
- /* we continue DOING until the DO phase is complete */
- data->result = Curl_protocol_doing(data->easy_conn,
- &dophase_done);
- if(CURLE_OK == data->result) {
- if(dophase_done) {
- /* after DO, go DO_DONE or DO_MORE */
- multistate(data, data->easy_conn->bits.do_more?
- CURLM_STATE_DO_MORE:
- CURLM_STATE_DO_DONE);
- result = CURLM_CALL_MULTI_PERFORM;
- } /* dophase_done */
- }
- else {
- /* failure detected */
- Curl_posttransfer(data);
- Curl_done(&data->easy_conn, data->result, FALSE);
- disconnect_conn = TRUE;
- }
- break;
-
- case CURLM_STATE_DO_MORE:
- /*
- * When we are connected, DO MORE and then go DO_DONE
- */
- data->result = Curl_do_more(data->easy_conn, &control);
-
- /* No need to remove this handle from the send pipeline here since that
- is done in Curl_done() */
- if(CURLE_OK == data->result) {
- if(control) {
- /* if positive, advance to DO_DONE
- if negative, go back to DOING */
- multistate(data, control==1?
- CURLM_STATE_DO_DONE:
- CURLM_STATE_DOING);
- result = CURLM_CALL_MULTI_PERFORM;
- }
- else
- /* stay in DO_MORE */
- result = CURLM_OK;
- }
- else {
- /* failure detected */
- Curl_posttransfer(data);
- Curl_done(&data->easy_conn, data->result, FALSE);
- disconnect_conn = TRUE;
- }
- break;
-
- case CURLM_STATE_DO_DONE:
- /* Move ourselves from the send to recv pipeline */
- Curl_move_handle_from_send_to_recv_pipe(data, data->easy_conn);
- /* Check if we can move pending requests to send pipe */
- Curl_multi_process_pending_handles(multi);
-
- /* Only perform the transfer if there's a good socket to work with.
- Having both BAD is a signal to skip immediately to DONE */
- if((data->easy_conn->sockfd != CURL_SOCKET_BAD) ||
- (data->easy_conn->writesockfd != CURL_SOCKET_BAD))
- multistate(data, CURLM_STATE_WAITPERFORM);
- else
- multistate(data, CURLM_STATE_DONE);
- result = CURLM_CALL_MULTI_PERFORM;
- break;
-
- case CURLM_STATE_WAITPERFORM:
- /* Wait for our turn to PERFORM */
- if(!data->easy_conn->readchannel_inuse &&
- isHandleAtHead(data,
- data->easy_conn->recv_pipe)) {
- /* Grab the channel */
- data->easy_conn->readchannel_inuse = TRUE;
- multistate(data, CURLM_STATE_PERFORM);
- result = CURLM_CALL_MULTI_PERFORM;
- }
-#ifdef DEBUGBUILD
- else {
- infof(data, "WAITPERFORM: Conn %ld recv pipe %zu inuse %s athead %s\n",
- data->easy_conn->connection_id,
- data->easy_conn->recv_pipe->size,
- data->easy_conn->readchannel_inuse?"TRUE":"FALSE",
- isHandleAtHead(data,
- data->easy_conn->recv_pipe)?"TRUE":"FALSE");
- }
-#endif
- break;
-
- case CURLM_STATE_TOOFAST: /* limit-rate exceeded in either direction */
- /* if both rates are within spec, resume transfer */
- if(Curl_pgrsUpdate(data->easy_conn))
- data->result = CURLE_ABORTED_BY_CALLBACK;
- else
- data->result = Curl_speedcheck(data, now);
-
- if(( (data->set.max_send_speed == 0) ||
- (data->progress.ulspeed < data->set.max_send_speed )) &&
- ( (data->set.max_recv_speed == 0) ||
- (data->progress.dlspeed < data->set.max_recv_speed)))
- multistate(data, CURLM_STATE_PERFORM);
- break;
-
- case CURLM_STATE_PERFORM:
- {
- char *newurl = NULL;
- bool retry = FALSE;
-
- /* check if over send speed */
- if((data->set.max_send_speed > 0) &&
- (data->progress.ulspeed > data->set.max_send_speed)) {
- int buffersize;
-
- multistate(data, CURLM_STATE_TOOFAST);
-
- /* calculate upload rate-limitation timeout. */
- buffersize = (int)(data->set.buffer_size ?
- data->set.buffer_size : BUFSIZE);
- timeout_ms = Curl_sleep_time(data->set.max_send_speed,
- data->progress.ulspeed, buffersize);
- Curl_expire_latest(data, timeout_ms);
- break;
- }
-
- /* check if over recv speed */
- if((data->set.max_recv_speed > 0) &&
- (data->progress.dlspeed > data->set.max_recv_speed)) {
- int buffersize;
-
- multistate(data, CURLM_STATE_TOOFAST);
-
- /* Calculate download rate-limitation timeout. */
- buffersize = (int)(data->set.buffer_size ?
- data->set.buffer_size : BUFSIZE);
- timeout_ms = Curl_sleep_time(data->set.max_recv_speed,
- data->progress.dlspeed, buffersize);
- Curl_expire_latest(data, timeout_ms);
- break;
- }
-
- /* read/write data if it is ready to do so */
- data->result = Curl_readwrite(data->easy_conn, &done);
-
- k = &data->req;
-
- if(!(k->keepon & KEEP_RECV)) {
- /* We're done receiving */
- data->easy_conn->readchannel_inuse = FALSE;
- }
-
- if(!(k->keepon & KEEP_SEND)) {
- /* We're done sending */
- data->easy_conn->writechannel_inuse = FALSE;
- }
-
- if(done || (data->result == CURLE_RECV_ERROR)) {
- /* If CURLE_RECV_ERROR happens early enough, we assume it was a race
- * condition and the server closed the re-used connection exactly when
- * we wanted to use it, so figure out if that is indeed the case.
- */
- CURLcode ret = Curl_retry_request(data->easy_conn, &newurl);
- if(!ret)
- retry = (newurl)?TRUE:FALSE;
-
- if(retry) {
- /* if we are to retry, set the result to OK and consider the
- request as done */
- data->result = CURLE_OK;
- done = TRUE;
- }
- }
-
- if(data->result) {
- /*
- * The transfer phase returned error, we mark the connection to get
- * closed to prevent being re-used. This is because we can't possibly
- * know if the connection is in a good shape or not now. Unless it is
- * a protocol which uses two "channels" like FTP, as then the error
- * happened in the data connection.
- */
-
- if(!(data->easy_conn->handler->flags & PROTOPT_DUAL))
- connclose(data->easy_conn, "Transfer returned error");
-
- Curl_posttransfer(data);
- Curl_done(&data->easy_conn, data->result, FALSE);
- }
- else if(done) {
- followtype follow=FOLLOW_NONE;
-
- /* call this even if the readwrite function returned error */
- Curl_posttransfer(data);
-
- /* we're no longer receiving */
- Curl_removeHandleFromPipeline(data, data->easy_conn->recv_pipe);
-
- /* expire the new receiving pipeline head */
- if(data->easy_conn->recv_pipe->head)
- Curl_expire_latest(data->easy_conn->recv_pipe->head->ptr, 1);
-
- /* Check if we can move pending requests to send pipe */
- Curl_multi_process_pending_handles(multi);
-
- /* When we follow redirects or is set to retry the connection, we must
- to go back to the CONNECT state */
- if(data->req.newurl || retry) {
- if(!retry) {
- /* if the URL is a follow-location and not just a retried request
- then figure out the URL here */
- newurl = data->req.newurl;
- data->req.newurl = NULL;
- follow = FOLLOW_REDIR;
- }
- else
- follow = FOLLOW_RETRY;
- data->result = Curl_done(&data->easy_conn, CURLE_OK, FALSE);
- if(CURLE_OK == data->result) {
- data->result = Curl_follow(data, newurl, follow);
- if(CURLE_OK == data->result) {
- multistate(data, CURLM_STATE_CONNECT);
- result = CURLM_CALL_MULTI_PERFORM;
- newurl = NULL; /* handed over the memory ownership to
- Curl_follow(), make sure we don't free() it
- here */
- }
- }
- }
- else {
- /* after the transfer is done, go DONE */
-
- /* but first check to see if we got a location info even though we're
- not following redirects */
- if(data->req.location) {
- if(newurl)
- free(newurl);
- newurl = data->req.location;
- data->req.location = NULL;
- data->result = Curl_follow(data, newurl, FOLLOW_FAKE);
- if(CURLE_OK == data->result)
- newurl = NULL; /* allocation was handed over Curl_follow() */
- else
- disconnect_conn = TRUE;
- }
-
- multistate(data, CURLM_STATE_DONE);
- result = CURLM_CALL_MULTI_PERFORM;
- }
- }
-
- if(newurl)
- free(newurl);
- break;
- }
-
- case CURLM_STATE_DONE:
- /* this state is highly transient, so run another loop after this */
- result = CURLM_CALL_MULTI_PERFORM;
-
- if(data->easy_conn) {
- CURLcode res;
-
- /* Remove ourselves from the receive pipeline, if we are there. */
- Curl_removeHandleFromPipeline(data, data->easy_conn->recv_pipe);
- /* Check if we can move pending requests to send pipe */
- Curl_multi_process_pending_handles(multi);
-
- /* post-transfer command */
- res = Curl_done(&data->easy_conn, data->result, FALSE);
-
- /* allow a previously set error code take precedence */
- if(!data->result)
- data->result = res;
-
- /*
- * If there are other handles on the pipeline, Curl_done won't set
- * easy_conn to NULL. In such a case, curl_multi_remove_handle() can
- * access free'd data, if the connection is free'd and the handle
- * removed before we perform the processing in CURLM_STATE_COMPLETED
- */
- if(data->easy_conn)
- data->easy_conn = NULL;
- }
-
- if(data->set.wildcardmatch) {
- if(data->wildcard.state != CURLWC_DONE) {
- /* if a wildcard is set and we are not ending -> lets start again
- with CURLM_STATE_INIT */
- multistate(data, CURLM_STATE_INIT);
- break;
- }
- }
-
- /* after we have DONE what we're supposed to do, go COMPLETED, and
- it doesn't matter what the Curl_done() returned! */
- multistate(data, CURLM_STATE_COMPLETED);
- break;
-
- case CURLM_STATE_COMPLETED:
- /* this is a completed transfer, it is likely to still be connected */
-
- /* This node should be delinked from the list now and we should post
- an information message that we are complete. */
-
- /* Important: reset the conn pointer so that we don't point to memory
- that could be freed anytime */
- data->easy_conn = NULL;
-
- Curl_expire(data, 0); /* stop all timers */
- break;
-
- case CURLM_STATE_MSGSENT:
- return CURLM_OK; /* do nothing */
-
- default:
- return CURLM_INTERNAL_ERROR;
- }
-
- if(data->mstate < CURLM_STATE_COMPLETED) {
- if(CURLE_OK != data->result) {
- /*
- * If an error was returned, and we aren't in completed state now,
- * then we go to completed and consider this transfer aborted.
- */
-
- /* NOTE: no attempt to disconnect connections must be made
- in the case blocks above - cleanup happens only here */
-
- data->state.pipe_broke = FALSE;
-
- if(data->easy_conn) {
- /* if this has a connection, unsubscribe from the pipelines */
- data->easy_conn->writechannel_inuse = FALSE;
- data->easy_conn->readchannel_inuse = FALSE;
- Curl_removeHandleFromPipeline(data,
- data->easy_conn->send_pipe);
- Curl_removeHandleFromPipeline(data,
- data->easy_conn->recv_pipe);
- /* Check if we can move pending requests to send pipe */
- Curl_multi_process_pending_handles(multi);
-
- if(disconnect_conn) {
- /* disconnect properly */
- Curl_disconnect(data->easy_conn, /* dead_connection */ FALSE);
-
- /* This is where we make sure that the easy_conn pointer is reset.
- We don't have to do this in every case block above where a
- failure is detected */
- data->easy_conn = NULL;
- }
- }
- else if(data->mstate == CURLM_STATE_CONNECT) {
- /* Curl_connect() failed */
- (void)Curl_posttransfer(data);
- }
-
- multistate(data, CURLM_STATE_COMPLETED);
- }
- /* if there's still a connection to use, call the progress function */
- else if(data->easy_conn && Curl_pgrsUpdate(data->easy_conn)) {
- /* aborted due to progress callback return code must close the
- connection */
- data->result = CURLE_ABORTED_BY_CALLBACK;
- connclose(data->easy_conn, "Aborted by callback");
-
- /* if not yet in DONE state, go there, otherwise COMPLETED */
- multistate(data, (data->mstate < CURLM_STATE_DONE)?
- CURLM_STATE_DONE: CURLM_STATE_COMPLETED);
- result = CURLM_CALL_MULTI_PERFORM;
- }
- }
- } WHILE_FALSE; /* just to break out from! */
-
- if(CURLM_STATE_COMPLETED == data->mstate) {
- /* now fill in the Curl_message with this info */
- msg = &data->msg;
-
- msg->extmsg.msg = CURLMSG_DONE;
- msg->extmsg.easy_handle = data;
- msg->extmsg.data.result = data->result;
-
- result = multi_addmsg(multi, msg);
-
- multistate(data, CURLM_STATE_MSGSENT);
- }
-
- return result;
-}
-
-
-CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles)
-{
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *data;
- CURLMcode returncode=CURLM_OK;
- struct Curl_tree *t;
- struct timeval now = Curl_tvnow();
-
- if(!GOOD_MULTI_HANDLE(multi))
- return CURLM_BAD_HANDLE;
-
- data=multi->easyp;
- while(data) {
- CURLMcode result;
- struct WildcardData *wc = &data->wildcard;
- SIGPIPE_VARIABLE(pipe_st);
-
- if(data->set.wildcardmatch) {
- if(!wc->filelist) {
- CURLcode ret = Curl_wildcard_init(wc); /* init wildcard structures */
- if(ret)
- return CURLM_OUT_OF_MEMORY;
- }
- }
-
- sigpipe_ignore(data, &pipe_st);
- do
- result = multi_runsingle(multi, now, data);
- while(CURLM_CALL_MULTI_PERFORM == result);
- sigpipe_restore(&pipe_st);
-
- if(data->set.wildcardmatch) {
- /* destruct wildcard structures if it is needed */
- if(wc->state == CURLWC_DONE || result)
- Curl_wildcard_dtor(wc);
- }
-
- if(result)
- returncode = result;
-
- data = data->next; /* operate on next handle */
- }
-
- /*
- * Simply remove all expired timers from the splay since handles are dealt
- * with unconditionally by this function and curl_multi_timeout() requires
- * that already passed/handled expire times are removed from the splay.
- *
- * It is important that the 'now' value is set at the entry of this function
- * and not for the current time as it may have ticked a little while since
- * then and then we risk this loop to remove timers that actually have not
- * been handled!
- */
- do {
- multi->timetree = Curl_splaygetbest(now, multi->timetree, &t);
- if(t)
- /* the removed may have another timeout in queue */
- (void)add_next_timeout(now, multi, t->payload);
-
- } while(t);
-
- *running_handles = multi->num_alive;
-
- if(CURLM_OK >= returncode)
- update_timer(multi);
-
- return returncode;
-}
-
-static void close_all_connections(struct Curl_multi *multi)
-{
- struct connectdata *conn;
-
- conn = Curl_conncache_find_first_connection(multi->conn_cache);
- while(conn) {
- SIGPIPE_VARIABLE(pipe_st);
- conn->data = multi->closure_handle;
-
- sigpipe_ignore(conn->data, &pipe_st);
- /* This will remove the connection from the cache */
- (void)Curl_disconnect(conn, FALSE);
- sigpipe_restore(&pipe_st);
-
- conn = Curl_conncache_find_first_connection(multi->conn_cache);
- }
-}
-
-CURLMcode curl_multi_cleanup(CURLM *multi_handle)
-{
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *data;
- struct SessionHandle *nextdata;
-
- if(GOOD_MULTI_HANDLE(multi)) {
- bool restore_pipe = FALSE;
- SIGPIPE_VARIABLE(pipe_st);
-
- multi->type = 0; /* not good anymore */
-
- /* Close all the connections in the connection cache */
- close_all_connections(multi);
-
- if(multi->closure_handle) {
- sigpipe_ignore(multi->closure_handle, &pipe_st);
- restore_pipe = TRUE;
-
- multi->closure_handle->dns.hostcache = multi->hostcache;
- Curl_hostcache_clean(multi->closure_handle,
- multi->closure_handle->dns.hostcache);
-
- Curl_close(multi->closure_handle);
- }
-
- Curl_hash_destroy(multi->sockhash);
- Curl_conncache_destroy(multi->conn_cache);
- Curl_llist_destroy(multi->msglist, NULL);
- Curl_llist_destroy(multi->pending, NULL);
-
- /* remove all easy handles */
- data = multi->easyp;
- while(data) {
- nextdata=data->next;
- if(data->dns.hostcachetype == HCACHE_MULTI) {
- /* clear out the usage of the shared DNS cache */
- Curl_hostcache_clean(data, data->dns.hostcache);
- data->dns.hostcache = NULL;
- data->dns.hostcachetype = HCACHE_NONE;
- }
-
- /* Clear the pointer to the connection cache */
- data->state.conn_cache = NULL;
- data->multi = NULL; /* clear the association */
-
- data = nextdata;
- }
-
- Curl_hash_destroy(multi->hostcache);
-
- /* Free the blacklists by setting them to NULL */
- Curl_pipeline_set_site_blacklist(NULL, &multi->pipelining_site_bl);
- Curl_pipeline_set_server_blacklist(NULL, &multi->pipelining_server_bl);
-
- free(multi);
- if(restore_pipe)
- sigpipe_restore(&pipe_st);
-
- return CURLM_OK;
- }
- else
- return CURLM_BAD_HANDLE;
-}
-
-/*
- * curl_multi_info_read()
- *
- * This function is the primary way for a multi/multi_socket application to
- * figure out if a transfer has ended. We MUST make this function as fast as
- * possible as it will be polled frequently and we MUST NOT scan any lists in
- * here to figure out things. We must scale fine to thousands of handles and
- * beyond. The current design is fully O(1).
- */
-
-CURLMsg *curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue)
-{
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct Curl_message *msg;
-
- *msgs_in_queue = 0; /* default to none */
-
- if(GOOD_MULTI_HANDLE(multi) && Curl_llist_count(multi->msglist)) {
- /* there is one or more messages in the list */
- struct curl_llist_element *e;
-
- /* extract the head of the list to return */
- e = multi->msglist->head;
-
- msg = e->ptr;
-
- /* remove the extracted entry */
- Curl_llist_remove(multi->msglist, e, NULL);
-
- *msgs_in_queue = curlx_uztosi(Curl_llist_count(multi->msglist));
-
- return &msg->extmsg;
- }
- else
- return NULL;
-}
-
-/*
- * singlesocket() checks what sockets we deal with and their "action state"
- * and if we have a different state in any of those sockets from last time we
- * call the callback accordingly.
- */
-static void singlesocket(struct Curl_multi *multi,
- struct SessionHandle *data)
-{
- curl_socket_t socks[MAX_SOCKSPEREASYHANDLE];
- int i;
- struct Curl_sh_entry *entry;
- curl_socket_t s;
- int num;
- unsigned int curraction;
- bool remove_sock_from_hash;
-
- for(i=0; i< MAX_SOCKSPEREASYHANDLE; i++)
- socks[i] = CURL_SOCKET_BAD;
-
- /* Fill in the 'current' struct with the state as it is now: what sockets to
- supervise and for what actions */
- curraction = multi_getsock(data, socks, MAX_SOCKSPEREASYHANDLE);
-
- /* We have 0 .. N sockets already and we get to know about the 0 .. M
- sockets we should have from now on. Detect the differences, remove no
- longer supervised ones and add new ones */
-
- /* walk over the sockets we got right now */
- for(i=0; (i< MAX_SOCKSPEREASYHANDLE) &&
- (curraction & (GETSOCK_READSOCK(i) | GETSOCK_WRITESOCK(i)));
- i++) {
- int action = CURL_POLL_NONE;
-
- s = socks[i];
-
- /* get it from the hash */
- entry = Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
-
- if(curraction & GETSOCK_READSOCK(i))
- action |= CURL_POLL_IN;
- if(curraction & GETSOCK_WRITESOCK(i))
- action |= CURL_POLL_OUT;
-
- if(entry) {
- /* yeps, already present so check if it has the same action set */
- if(entry->action == action)
- /* same, continue */
- continue;
- }
- else {
- /* this is a socket we didn't have before, add it! */
- entry = sh_addentry(multi->sockhash, s, data);
- if(!entry)
- /* fatal */
- return;
- }
-
- /* we know (entry != NULL) at this point, see the logic above */
- if(multi->socket_cb)
- multi->socket_cb(data,
- s,
- action,
- multi->socket_userp,
- entry->socketp);
-
- entry->action = action; /* store the current action state */
- }
-
- num = i; /* number of sockets */
-
- /* when we've walked over all the sockets we should have right now, we must
- make sure to detect sockets that are removed */
- for(i=0; i< data->numsocks; i++) {
- int j;
- s = data->sockets[i];
- for(j=0; j<num; j++) {
- if(s == socks[j]) {
- /* this is still supervised */
- s = CURL_SOCKET_BAD;
- break;
- }
- }
- if(s != CURL_SOCKET_BAD) {
-
- /* this socket has been removed. Tell the app to remove it */
- remove_sock_from_hash = TRUE;
-
- entry = Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
- if(entry) {
- /* check if the socket to be removed serves a connection which has
- other easy-s in a pipeline. In this case the socket should not be
- removed. */
- struct connectdata *easy_conn = data->easy_conn;
- if(easy_conn) {
- if(easy_conn->recv_pipe && easy_conn->recv_pipe->size > 1) {
- /* the handle should not be removed from the pipe yet */
- remove_sock_from_hash = FALSE;
-
- /* Update the sockhash entry to instead point to the next in line
- for the recv_pipe, or the first (in case this particular easy
- isn't already) */
- if(entry->easy == data) {
- if(isHandleAtHead(data, easy_conn->recv_pipe))
- entry->easy = easy_conn->recv_pipe->head->next->ptr;
- else
- entry->easy = easy_conn->recv_pipe->head->ptr;
- }
- }
- if(easy_conn->send_pipe && easy_conn->send_pipe->size > 1) {
- /* the handle should not be removed from the pipe yet */
- remove_sock_from_hash = FALSE;
-
- /* Update the sockhash entry to instead point to the next in line
- for the send_pipe, or the first (in case this particular easy
- isn't already) */
- if(entry->easy == data) {
- if(isHandleAtHead(data, easy_conn->send_pipe))
- entry->easy = easy_conn->send_pipe->head->next->ptr;
- else
- entry->easy = easy_conn->send_pipe->head->ptr;
- }
- }
- /* Don't worry about overwriting recv_pipe head with send_pipe_head,
- when action will be asked on the socket (see multi_socket()), the
- head of the correct pipe will be taken according to the
- action. */
- }
- }
- else
- /* just a precaution, this socket really SHOULD be in the hash already
- but in case it isn't, we don't have to tell the app to remove it
- either since it never got to know about it */
- remove_sock_from_hash = FALSE;
-
- if(remove_sock_from_hash) {
- /* in this case 'entry' is always non-NULL */
- if(multi->socket_cb)
- multi->socket_cb(data,
- s,
- CURL_POLL_REMOVE,
- multi->socket_userp,
- entry->socketp);
- sh_delentry(multi->sockhash, s);
- }
-
- }
- }
-
- memcpy(data->sockets, socks, num*sizeof(curl_socket_t));
- data->numsocks = num;
-}
-
-/*
- * Curl_multi_closed()
- *
- * Used by the connect code to tell the multi_socket code that one of the
- * sockets we were using have just been closed. This function will then
- * remove it from the sockethash for this handle to make the multi_socket API
- * behave properly, especially for the case when libcurl will create another
- * socket again and it gets the same file descriptor number.
- */
-
-void Curl_multi_closed(struct connectdata *conn, curl_socket_t s)
-{
- struct Curl_multi *multi = conn->data->multi;
- if(multi) {
- /* this is set if this connection is part of a handle that is added to
- a multi handle, and only then this is necessary */
- struct Curl_sh_entry *entry =
- Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
-
- if(entry) {
- if(multi->socket_cb)
- multi->socket_cb(conn->data, s, CURL_POLL_REMOVE,
- multi->socket_userp,
- entry->socketp);
-
- /* now remove it from the socket hash */
- sh_delentry(multi->sockhash, s);
- }
- }
-}
-
-
-
-/*
- * add_next_timeout()
- *
- * Each SessionHandle has a list of timeouts. The add_next_timeout() is called
- * when it has just been removed from the splay tree because the timeout has
- * expired. This function is then to advance in the list to pick the next
- * timeout to use (skip the already expired ones) and add this node back to
- * the splay tree again.
- *
- * The splay tree only has each sessionhandle as a single node and the nearest
- * timeout is used to sort it on.
- */
-static CURLMcode add_next_timeout(struct timeval now,
- struct Curl_multi *multi,
- struct SessionHandle *d)
-{
- struct timeval *tv = &d->state.expiretime;
- struct curl_llist *list = d->state.timeoutlist;
- struct curl_llist_element *e;
-
- /* move over the timeout list for this specific handle and remove all
- timeouts that are now passed tense and store the next pending
- timeout in *tv */
- for(e = list->head; e; ) {
- struct curl_llist_element *n = e->next;
- long diff = curlx_tvdiff(*(struct timeval *)e->ptr, now);
- if(diff <= 0)
- /* remove outdated entry */
- Curl_llist_remove(list, e, NULL);
- else
- /* the list is sorted so get out on the first mismatch */
- break;
- e = n;
- }
- e = list->head;
- if(!e) {
- /* clear the expire times within the handles that we remove from the
- splay tree */
- tv->tv_sec = 0;
- tv->tv_usec = 0;
- }
- else {
- /* copy the first entry to 'tv' */
- memcpy(tv, e->ptr, sizeof(*tv));
-
- /* remove first entry from list */
- Curl_llist_remove(list, e, NULL);
-
- /* insert this node again into the splay */
- multi->timetree = Curl_splayinsert(*tv, multi->timetree,
- &d->state.timenode);
- }
- return CURLM_OK;
-}
-
-static CURLMcode multi_socket(struct Curl_multi *multi,
- bool checkall,
- curl_socket_t s,
- int ev_bitmask,
- int *running_handles)
-{
- CURLMcode result = CURLM_OK;
- struct SessionHandle *data = NULL;
- struct Curl_tree *t;
- struct timeval now = Curl_tvnow();
-
- if(checkall) {
- /* *perform() deals with running_handles on its own */
- result = curl_multi_perform(multi, running_handles);
-
- /* walk through each easy handle and do the socket state change magic
- and callbacks */
- if(result != CURLM_BAD_HANDLE) {
- data=multi->easyp;
- while(data) {
- singlesocket(multi, data);
- data = data->next;
- }
- }
-
- /* or should we fall-through and do the timer-based stuff? */
- return result;
- }
- else if(s != CURL_SOCKET_TIMEOUT) {
-
- struct Curl_sh_entry *entry =
- Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
-
- if(!entry)
- /* Unmatched socket, we can't act on it but we ignore this fact. In
- real-world tests it has been proved that libevent can in fact give
- the application actions even though the socket was just previously
- asked to get removed, so thus we better survive stray socket actions
- and just move on. */
- ;
- else {
- SIGPIPE_VARIABLE(pipe_st);
-
- data = entry->easy;
-
- if(data->magic != CURLEASY_MAGIC_NUMBER)
- /* bad bad bad bad bad bad bad */
- return CURLM_INTERNAL_ERROR;
-
- /* If the pipeline is enabled, take the handle which is in the head of
- the pipeline. If we should write into the socket, take the send_pipe
- head. If we should read from the socket, take the recv_pipe head. */
- if(data->easy_conn) {
- if((ev_bitmask & CURL_POLL_OUT) &&
- data->easy_conn->send_pipe &&
- data->easy_conn->send_pipe->head)
- data = data->easy_conn->send_pipe->head->ptr;
- else if((ev_bitmask & CURL_POLL_IN) &&
- data->easy_conn->recv_pipe &&
- data->easy_conn->recv_pipe->head)
- data = data->easy_conn->recv_pipe->head->ptr;
- }
-
- if(data->easy_conn &&
- !(data->easy_conn->handler->flags & PROTOPT_DIRLOCK))
- /* set socket event bitmask if they're not locked */
- data->easy_conn->cselect_bits = ev_bitmask;
-
- sigpipe_ignore(data, &pipe_st);
- do
- result = multi_runsingle(multi, now, data);
- while(CURLM_CALL_MULTI_PERFORM == result);
- sigpipe_restore(&pipe_st);
-
- if(data->easy_conn &&
- !(data->easy_conn->handler->flags & PROTOPT_DIRLOCK))
- /* clear the bitmask only if not locked */
- data->easy_conn->cselect_bits = 0;
-
- if(CURLM_OK >= result)
- /* get the socket(s) and check if the state has been changed since
- last */
- singlesocket(multi, data);
-
- /* Now we fall-through and do the timer-based stuff, since we don't want
- to force the user to have to deal with timeouts as long as at least
- one connection in fact has traffic. */
-
- data = NULL; /* set data to NULL again to avoid calling
- multi_runsingle() in case there's no need to */
- now = Curl_tvnow(); /* get a newer time since the multi_runsingle() loop
- may have taken some time */
- }
- }
- else {
- /* Asked to run due to time-out. Clear the 'lastcall' variable to force
- update_timer() to trigger a callback to the app again even if the same
- timeout is still the one to run after this call. That handles the case
- when the application asks libcurl to run the timeout prematurely. */
- memset(&multi->timer_lastcall, 0, sizeof(multi->timer_lastcall));
- }
-
- /*
- * The loop following here will go on as long as there are expire-times left
- * to process in the splay and 'data' will be re-assigned for every expired
- * handle we deal with.
- */
- do {
- /* the first loop lap 'data' can be NULL */
- if(data) {
- SIGPIPE_VARIABLE(pipe_st);
-
- sigpipe_ignore(data, &pipe_st);
- do
- result = multi_runsingle(multi, now, data);
- while(CURLM_CALL_MULTI_PERFORM == result);
- sigpipe_restore(&pipe_st);
-
- if(CURLM_OK >= result)
- /* get the socket(s) and check if the state has been changed since
- last */
- singlesocket(multi, data);
- }
-
- /* Check if there's one (more) expired timer to deal with! This function
- extracts a matching node if there is one */
-
- multi->timetree = Curl_splaygetbest(now, multi->timetree, &t);
- if(t) {
- data = t->payload; /* assign this for next loop */
- (void)add_next_timeout(now, multi, t->payload);
- }
-
- } while(t);
-
- *running_handles = multi->num_alive;
- return result;
-}
-
-#undef curl_multi_setopt
-CURLMcode curl_multi_setopt(CURLM *multi_handle,
- CURLMoption option, ...)
-{
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- CURLMcode res = CURLM_OK;
- va_list param;
-
- if(!GOOD_MULTI_HANDLE(multi))
- return CURLM_BAD_HANDLE;
-
- va_start(param, option);
-
- switch(option) {
- case CURLMOPT_SOCKETFUNCTION:
- multi->socket_cb = va_arg(param, curl_socket_callback);
- break;
- case CURLMOPT_SOCKETDATA:
- multi->socket_userp = va_arg(param, void *);
- break;
- case CURLMOPT_PIPELINING:
- multi->pipelining_enabled = (0 != va_arg(param, long)) ? TRUE : FALSE;
- break;
- case CURLMOPT_TIMERFUNCTION:
- multi->timer_cb = va_arg(param, curl_multi_timer_callback);
- break;
- case CURLMOPT_TIMERDATA:
- multi->timer_userp = va_arg(param, void *);
- break;
- case CURLMOPT_MAXCONNECTS:
- multi->maxconnects = va_arg(param, long);
- break;
- case CURLMOPT_MAX_HOST_CONNECTIONS:
- multi->max_host_connections = va_arg(param, long);
- break;
- case CURLMOPT_MAX_PIPELINE_LENGTH:
- multi->max_pipeline_length = va_arg(param, long);
- break;
- case CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE:
- multi->content_length_penalty_size = va_arg(param, long);
- break;
- case CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE:
- multi->chunk_length_penalty_size = va_arg(param, long);
- break;
- case CURLMOPT_PIPELINING_SITE_BL:
- res = Curl_pipeline_set_site_blacklist(va_arg(param, char **),
- &multi->pipelining_site_bl);
- break;
- case CURLMOPT_PIPELINING_SERVER_BL:
- res = Curl_pipeline_set_server_blacklist(va_arg(param, char **),
- &multi->pipelining_server_bl);
- break;
- case CURLMOPT_MAX_TOTAL_CONNECTIONS:
- multi->max_total_connections = va_arg(param, long);
- break;
- default:
- res = CURLM_UNKNOWN_OPTION;
- break;
- }
- va_end(param);
- return res;
-}
-
-/* we define curl_multi_socket() in the public multi.h header */
-#undef curl_multi_socket
-
-CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
- int *running_handles)
-{
- CURLMcode result = multi_socket((struct Curl_multi *)multi_handle, FALSE, s,
- 0, running_handles);
- if(CURLM_OK >= result)
- update_timer((struct Curl_multi *)multi_handle);
- return result;
-}
-
-CURLMcode curl_multi_socket_action(CURLM *multi_handle, curl_socket_t s,
- int ev_bitmask, int *running_handles)
-{
- CURLMcode result = multi_socket((struct Curl_multi *)multi_handle, FALSE, s,
- ev_bitmask, running_handles);
- if(CURLM_OK >= result)
- update_timer((struct Curl_multi *)multi_handle);
- return result;
-}
-
-CURLMcode curl_multi_socket_all(CURLM *multi_handle, int *running_handles)
-
-{
- CURLMcode result = multi_socket((struct Curl_multi *)multi_handle,
- TRUE, CURL_SOCKET_BAD, 0, running_handles);
- if(CURLM_OK >= result)
- update_timer((struct Curl_multi *)multi_handle);
- return result;
-}
-
-static CURLMcode multi_timeout(struct Curl_multi *multi,
- long *timeout_ms)
-{
- static struct timeval tv_zero = {0,0};
-
- if(multi->timetree) {
- /* we have a tree of expire times */
- struct timeval now = Curl_tvnow();
-
- /* splay the lowest to the bottom */
- multi->timetree = Curl_splay(tv_zero, multi->timetree);
-
- if(Curl_splaycomparekeys(multi->timetree->key, now) > 0) {
- /* some time left before expiration */
- *timeout_ms = curlx_tvdiff(multi->timetree->key, now);
- if(!*timeout_ms)
- /*
- * Since we only provide millisecond resolution on the returned value
- * and the diff might be less than one millisecond here, we don't
- * return zero as that may cause short bursts of busyloops on fast
- * processors while the diff is still present but less than one
- * millisecond! instead we return 1 until the time is ripe.
- */
- *timeout_ms=1;
- }
- else
- /* 0 means immediately */
- *timeout_ms = 0;
- }
- else
- *timeout_ms = -1;
-
- return CURLM_OK;
-}
-
-CURLMcode curl_multi_timeout(CURLM *multi_handle,
- long *timeout_ms)
-{
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
-
- /* First, make some basic checks that the CURLM handle is a good handle */
- if(!GOOD_MULTI_HANDLE(multi))
- return CURLM_BAD_HANDLE;
-
- return multi_timeout(multi, timeout_ms);
-}
-
-/*
- * Tell the application it should update its timers, if it subscribes to the
- * update timer callback.
- */
-static int update_timer(struct Curl_multi *multi)
-{
- long timeout_ms;
-
- if(!multi->timer_cb)
- return 0;
- if(multi_timeout(multi, &timeout_ms)) {
- return -1;
- }
- if(timeout_ms < 0) {
- static const struct timeval none={0,0};
- if(Curl_splaycomparekeys(none, multi->timer_lastcall)) {
- multi->timer_lastcall = none;
- /* there's no timeout now but there was one previously, tell the app to
- disable it */
- return multi->timer_cb((CURLM*)multi, -1, multi->timer_userp);
- }
- return 0;
- }
-
- /* When multi_timeout() is done, multi->timetree points to the node with the
- * timeout we got the (relative) time-out time for. We can thus easily check
- * if this is the same (fixed) time as we got in a previous call and then
- * avoid calling the callback again. */
- if(Curl_splaycomparekeys(multi->timetree->key, multi->timer_lastcall) == 0)
- return 0;
-
- multi->timer_lastcall = multi->timetree->key;
-
- return multi->timer_cb((CURLM*)multi, timeout_ms, multi->timer_userp);
-}
-
-void Curl_multi_set_easy_connection(struct SessionHandle *handle,
- struct connectdata *conn)
-{
- handle->easy_conn = conn;
-}
-
-static bool isHandleAtHead(struct SessionHandle *handle,
- struct curl_llist *pipeline)
-{
- struct curl_llist_element *curr = pipeline->head;
- if(curr)
- return (curr->ptr == handle) ? TRUE : FALSE;
-
- return FALSE;
-}
-
-/*
- * multi_freetimeout()
- *
- * Callback used by the llist system when a single timeout list entry is
- * destroyed.
- */
-static void multi_freetimeout(void *user, void *entryptr)
-{
- (void)user;
-
- /* the entry was plain malloc()'ed */
- free(entryptr);
-}
-
-/*
- * multi_addtimeout()
- *
- * Add a timestamp to the list of timeouts. Keep the list sorted so that head
- * of list is always the timeout nearest in time.
- *
- */
-static CURLMcode
-multi_addtimeout(struct curl_llist *timeoutlist,
- struct timeval *stamp)
-{
- struct curl_llist_element *e;
- struct timeval *timedup;
- struct curl_llist_element *prev = NULL;
-
- timedup = malloc(sizeof(*timedup));
- if(!timedup)
- return CURLM_OUT_OF_MEMORY;
-
- /* copy the timestamp */
- memcpy(timedup, stamp, sizeof(*timedup));
-
- if(Curl_llist_count(timeoutlist)) {
- /* find the correct spot in the list */
- for(e = timeoutlist->head; e; e = e->next) {
- struct timeval *checktime = e->ptr;
- long diff = curlx_tvdiff(*checktime, *timedup);
- if(diff > 0)
- break;
- prev = e;
- }
-
- }
- /* else
- this is the first timeout on the list */
-
- if(!Curl_llist_insert_next(timeoutlist, prev, timedup)) {
- free(timedup);
- return CURLM_OUT_OF_MEMORY;
- }
-
- return CURLM_OK;
-}
-
-/*
- * Curl_expire()
- *
- * given a number of milliseconds from now to use to set the 'act before
- * this'-time for the transfer, to be extracted by curl_multi_timeout()
- *
- * Note that the timeout will be added to a queue of timeouts if it defines a
- * moment in time that is later than the current head of queue.
- *
- * Pass zero to clear all timeout values for this handle.
-*/
-void Curl_expire(struct SessionHandle *data, long milli)
-{
- struct Curl_multi *multi = data->multi;
- struct timeval *nowp = &data->state.expiretime;
- int rc;
-
- /* this is only interesting while there is still an associated multi struct
- remaining! */
- if(!multi)
- return;
-
- if(!milli) {
- /* No timeout, clear the time data. */
- if(nowp->tv_sec || nowp->tv_usec) {
- /* Since this is an cleared time, we must remove the previous entry from
- the splay tree */
- struct curl_llist *list = data->state.timeoutlist;
-
- rc = Curl_splayremovebyaddr(multi->timetree,
- &data->state.timenode,
- &multi->timetree);
- if(rc)
- infof(data, "Internal error clearing splay node = %d\n", rc);
-
- /* flush the timeout list too */
- while(list->size > 0)
- Curl_llist_remove(list, list->tail, NULL);
-
-#ifdef DEBUGBUILD
- infof(data, "Expire cleared\n");
-#endif
- nowp->tv_sec = 0;
- nowp->tv_usec = 0;
- }
- }
- else {
- struct timeval set;
-
- set = Curl_tvnow();
- set.tv_sec += milli/1000;
- set.tv_usec += (milli%1000)*1000;
-
- if(set.tv_usec >= 1000000) {
- set.tv_sec++;
- set.tv_usec -= 1000000;
- }
-
- if(nowp->tv_sec || nowp->tv_usec) {
- /* This means that the struct is added as a node in the splay tree.
- Compare if the new time is earlier, and only remove-old/add-new if it
- is. */
- long diff = curlx_tvdiff(set, *nowp);
- if(diff > 0) {
- /* the new expire time was later so just add it to the queue
- and get out */
- multi_addtimeout(data->state.timeoutlist, &set);
- return;
- }
-
- /* the new time is newer than the presently set one, so add the current
- to the queue and update the head */
- multi_addtimeout(data->state.timeoutlist, nowp);
-
- /* Since this is an updated time, we must remove the previous entry from
- the splay tree first and then re-add the new value */
- rc = Curl_splayremovebyaddr(multi->timetree,
- &data->state.timenode,
- &multi->timetree);
- if(rc)
- infof(data, "Internal error removing splay node = %d\n", rc);
- }
-
- *nowp = set;
- data->state.timenode.payload = data;
- multi->timetree = Curl_splayinsert(*nowp,
- multi->timetree,
- &data->state.timenode);
- }
-#if 0
- Curl_splayprint(multi->timetree, 0, TRUE);
-#endif
-}
-
-/*
- * Curl_expire_latest()
- *
- * This is like Curl_expire() but will only add a timeout node to the list of
- * timers if there is no timeout that will expire before the given time.
- *
- * Use this function if the code logic risks calling this function many times
- * or if there's no particular conditional wait in the code for this specific
- * time-out period to expire.
- *
- */
-void Curl_expire_latest(struct SessionHandle *data, long milli)
-{
- struct timeval *exp = &data->state.expiretime;
-
- struct timeval set;
-
- set = Curl_tvnow();
- set.tv_sec += milli/1000;
- set.tv_usec += (milli%1000)*1000;
-
- if(set.tv_usec >= 1000000) {
- set.tv_sec++;
- set.tv_usec -= 1000000;
- }
-
- if(exp->tv_sec || exp->tv_usec) {
- /* This means that the struct is added as a node in the splay tree.
- Compare if the new time is earlier, and only remove-old/add-new if it
- is. */
- long diff = curlx_tvdiff(set, *exp);
- if(diff > 0)
- /* the new expire time was later than the top time, so just skip this */
- return;
- }
-
- /* Just add the timeout like normal */
- Curl_expire(data, milli);
-}
-
-CURLMcode curl_multi_assign(CURLM *multi_handle,
- curl_socket_t s, void *hashp)
-{
- struct Curl_sh_entry *there = NULL;
- struct Curl_multi *multi = (struct Curl_multi *)multi_handle;
-
- if(s != CURL_SOCKET_BAD)
- there = Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(curl_socket_t));
-
- if(!there)
- return CURLM_BAD_SOCKET;
-
- there->socketp = hashp;
-
- return CURLM_OK;
-}
-
-size_t Curl_multi_max_host_connections(struct Curl_multi *multi)
-{
- return multi ? multi->max_host_connections : 0;
-}
-
-size_t Curl_multi_max_total_connections(struct Curl_multi *multi)
-{
- return multi ? multi->max_total_connections : 0;
-}
-
-size_t Curl_multi_max_pipeline_length(struct Curl_multi *multi)
-{
- return multi ? multi->max_pipeline_length : 0;
-}
-
-curl_off_t Curl_multi_content_length_penalty_size(struct Curl_multi *multi)
-{
- return multi ? multi->content_length_penalty_size : 0;
-}
-
-curl_off_t Curl_multi_chunk_length_penalty_size(struct Curl_multi *multi)
-{
- return multi ? multi->chunk_length_penalty_size : 0;
-}
-
-struct curl_llist *Curl_multi_pipelining_site_bl(struct Curl_multi *multi)
-{
- return multi->pipelining_site_bl;
-}
-
-struct curl_llist *Curl_multi_pipelining_server_bl(struct Curl_multi *multi)
-{
- return multi->pipelining_server_bl;
-}
-
-void Curl_multi_process_pending_handles(struct Curl_multi *multi)
-{
- struct curl_llist_element *e = multi->pending->head;
-
- while(e) {
- struct SessionHandle *data = e->ptr;
- struct curl_llist_element *next = e->next;
-
- if(data->mstate == CURLM_STATE_CONNECT_PEND) {
- multistate(data, CURLM_STATE_CONNECT);
-
- /* Remove this node from the list */
- Curl_llist_remove(multi->pending, e, NULL);
-
- /* Make sure that the handle will be processed soonish. */
- Curl_expire_latest(data, 1);
- }
-
- e = next; /* operate on next handle */
- }
-}
-
-#ifdef DEBUGBUILD
-void Curl_multi_dump(const struct Curl_multi *multi_handle)
-{
- struct Curl_multi *multi=(struct Curl_multi *)multi_handle;
- struct SessionHandle *data;
- int i;
- fprintf(stderr, "* Multi status: %d handles, %d alive\n",
- multi->num_easy, multi->num_alive);
- for(data=multi->easyp; data; data = data->next) {
- if(data->mstate < CURLM_STATE_COMPLETED) {
- /* only display handles that are not completed */
- fprintf(stderr, "handle %p, state %s, %d sockets\n",
- (void *)data,
- statename[data->mstate], data->numsocks);
- for(i=0; i < data->numsocks; i++) {
- curl_socket_t s = data->sockets[i];
- struct Curl_sh_entry *entry =
- Curl_hash_pick(multi->sockhash, (char *)&s, sizeof(s));
-
- fprintf(stderr, "%d ", (int)s);
- if(!entry) {
- fprintf(stderr, "INTERNAL CONFUSION\n");
- continue;
- }
- fprintf(stderr, "[%s %s] ",
- entry->action&CURL_POLL_IN?"RECVING":"",
- entry->action&CURL_POLL_OUT?"SENDING":"");
- }
- if(data->numsocks)
- fprintf(stderr, "\n");
- }
- }
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/multihandle.h b/external/libcurl_android/jni/libcurl/lib/multihandle.h
deleted file mode 100755
index 1a4b1d96..00000000
--- a/external/libcurl_android/jni/libcurl/lib/multihandle.h
+++ /dev/null
@@ -1,142 +0,0 @@
-#ifndef HEADER_CURL_MULTIHANDLE_H
-#define HEADER_CURL_MULTIHANDLE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-struct Curl_message {
- /* the 'CURLMsg' is the part that is visible to the external user */
- struct CURLMsg extmsg;
-};
-
-/* NOTE: if you add a state here, add the name to the statename[] array as
- well!
-*/
-typedef enum {
- CURLM_STATE_INIT, /* 0 - start in this state */
- CURLM_STATE_CONNECT_PEND, /* 1 - no connections, waiting for one */
- CURLM_STATE_CONNECT, /* 2 - resolve/connect has been sent off */
- CURLM_STATE_WAITRESOLVE, /* 3 - awaiting the resolve to finalize */
- CURLM_STATE_WAITCONNECT, /* 4 - awaiting the connect to finalize */
- CURLM_STATE_WAITPROXYCONNECT, /* 5 - awaiting proxy CONNECT to finalize */
- CURLM_STATE_PROTOCONNECT, /* 6 - completing the protocol-specific connect
- phase */
- CURLM_STATE_WAITDO, /* 7 - wait for our turn to send the request */
- CURLM_STATE_DO, /* 8 - start send off the request (part 1) */
- CURLM_STATE_DOING, /* 9 - sending off the request (part 1) */
- CURLM_STATE_DO_MORE, /* 10 - send off the request (part 2) */
- CURLM_STATE_DO_DONE, /* 11 - done sending off request */
- CURLM_STATE_WAITPERFORM, /* 12 - wait for our turn to read the response */
- CURLM_STATE_PERFORM, /* 13 - transfer data */
- CURLM_STATE_TOOFAST, /* 14 - wait because limit-rate exceeded */
- CURLM_STATE_DONE, /* 15 - post data transfer operation */
- CURLM_STATE_COMPLETED, /* 16 - operation complete */
- CURLM_STATE_MSGSENT, /* 17 - the operation complete message is sent */
- CURLM_STATE_LAST /* 18 - not a true state, never use this */
-} CURLMstate;
-
-/* we support N sockets per easy handle. Set the corresponding bit to what
- action we should wait for */
-#define MAX_SOCKSPEREASYHANDLE 5
-#define GETSOCK_READABLE (0x00ff)
-#define GETSOCK_WRITABLE (0xff00)
-
-/* This is the struct known as CURLM on the outside */
-struct Curl_multi {
- /* First a simple identifier to easier detect if a user mix up
- this multi handle with an easy handle. Set this to CURL_MULTI_HANDLE. */
- long type;
-
- /* We have a doubly-linked circular list with easy handles */
- struct SessionHandle *easyp;
- struct SessionHandle *easylp; /* last node */
-
- int num_easy; /* amount of entries in the linked list above. */
- int num_alive; /* amount of easy handles that are added but have not yet
- reached COMPLETE state */
-
- struct curl_llist *msglist; /* a list of messages from completed transfers */
-
- struct curl_llist *pending; /* SessionHandles that are in the
- CURLM_STATE_CONNECT_PEND state */
-
- /* callback function and user data pointer for the *socket() API */
- curl_socket_callback socket_cb;
- void *socket_userp;
-
- /* Hostname cache */
- struct curl_hash *hostcache;
-
- /* timetree points to the splay-tree of time nodes to figure out expire
- times of all currently set timers */
- struct Curl_tree *timetree;
-
- /* 'sockhash' is the lookup hash for socket descriptor => easy handles (note
- the pluralis form, there can be more than one easy handle waiting on the
- same actual socket) */
- struct curl_hash *sockhash;
-
- /* Whether pipelining is enabled for this multi handle */
- bool pipelining_enabled;
-
- /* Shared connection cache (bundles)*/
- struct conncache *conn_cache;
-
- /* This handle will be used for closing the cached connections in
- curl_multi_cleanup() */
- struct SessionHandle *closure_handle;
-
- long maxconnects; /* if >0, a fixed limit of the maximum number of entries
- we're allowed to grow the connection cache to */
-
- long max_host_connections; /* if >0, a fixed limit of the maximum number
- of connections per host */
-
- long max_total_connections; /* if >0, a fixed limit of the maximum number
- of connections in total */
-
- long max_pipeline_length; /* if >0, maximum number of requests in a
- pipeline */
-
- long content_length_penalty_size; /* a connection with a
- content-length bigger than
- this is not considered
- for pipelining */
-
- long chunk_length_penalty_size; /* a connection with a chunk length
- bigger than this is not
- considered for pipelining */
-
- struct curl_llist *pipelining_site_bl; /* List of sites that are blacklisted
- from pipelining */
-
- struct curl_llist *pipelining_server_bl; /* List of server types that are
- blacklisted from pipelining */
-
- /* timer callback and user data pointer for the *socket() API */
- curl_multi_timer_callback timer_cb;
- void *timer_userp;
- struct timeval timer_lastcall; /* the fixed time for the timeout for the
- previous callback */
-};
-
-#endif /* HEADER_CURL_MULTIHANDLE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/multiif.h b/external/libcurl_android/jni/libcurl/lib/multiif.h
deleted file mode 100755
index c77b3ca3..00000000
--- a/external/libcurl_android/jni/libcurl/lib/multiif.h
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef HEADER_CURL_MULTIIF_H
-#define HEADER_CURL_MULTIIF_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Prototypes for library-wide functions provided by multi.c
- */
-void Curl_expire(struct SessionHandle *data, long milli);
-void Curl_expire_latest(struct SessionHandle *data, long milli);
-
-bool Curl_multi_pipeline_enabled(const struct Curl_multi* multi);
-void Curl_multi_handlePipeBreak(struct SessionHandle *data);
-
-/* Internal version of curl_multi_init() accepts size parameters for the
- socket and connection hashes */
-struct Curl_multi *Curl_multi_handle(int hashsize, int chashsize);
-
-/* the write bits start at bit 16 for the *getsock() bitmap */
-#define GETSOCK_WRITEBITSTART 16
-
-#define GETSOCK_BLANK 0 /* no bits set */
-
-/* set the bit for the given sock number to make the bitmap for writable */
-#define GETSOCK_WRITESOCK(x) (1 << (GETSOCK_WRITEBITSTART + (x)))
-
-/* set the bit for the given sock number to make the bitmap for readable */
-#define GETSOCK_READSOCK(x) (1 << (x))
-
-#ifdef DEBUGBUILD
- /*
- * Curl_multi_dump is not a stable public function, this is only meant to
- * allow easier tracking of the internal handle's state and what sockets
- * they use. Only for research and development DEBUGBUILD enabled builds.
- */
-void Curl_multi_dump(const struct Curl_multi *multi_handle);
-#endif
-
-/* Update the current connection of a One_Easy handle */
-void Curl_multi_set_easy_connection(struct SessionHandle *handle,
- struct connectdata *conn);
-
-void Curl_multi_process_pending_handles(struct Curl_multi *multi);
-
-/* Return the value of the CURLMOPT_MAX_HOST_CONNECTIONS option */
-size_t Curl_multi_max_host_connections(struct Curl_multi *multi);
-
-/* Return the value of the CURLMOPT_MAX_PIPELINE_LENGTH option */
-size_t Curl_multi_max_pipeline_length(struct Curl_multi *multi);
-
-/* Return the value of the CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE option */
-curl_off_t Curl_multi_content_length_penalty_size(struct Curl_multi *multi);
-
-/* Return the value of the CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE option */
-curl_off_t Curl_multi_chunk_length_penalty_size(struct Curl_multi *multi);
-
-/* Return the value of the CURLMOPT_PIPELINING_SITE_BL option */
-struct curl_llist *Curl_multi_pipelining_site_bl(struct Curl_multi *multi);
-
-/* Return the value of the CURLMOPT_PIPELINING_SERVER_BL option */
-struct curl_llist *Curl_multi_pipelining_server_bl(struct Curl_multi *multi);
-
-/* Return the value of the CURLMOPT_MAX_TOTAL_CONNECTIONS option */
-size_t Curl_multi_max_total_connections(struct Curl_multi *multi);
-
-/*
- * Curl_multi_closed()
- *
- * Used by the connect code to tell the multi_socket code that one of the
- * sockets we were using have just been closed. This function will then
- * remove it from the sockethash for this handle to make the multi_socket API
- * behave properly, especially for the case when libcurl will create another
- * socket again and it gets the same file descriptor number.
- */
-
-void Curl_multi_closed(struct connectdata *conn, curl_socket_t s);
-
-#endif /* HEADER_CURL_MULTIIF_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/netrc.c b/external/libcurl_android/jni/libcurl/lib/netrc.c
deleted file mode 100755
index 7435d94c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/netrc.c
+++ /dev/null
@@ -1,201 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_PWD_H
-#include <pwd.h>
-#endif
-
-#include <curl/curl.h>
-#include "netrc.h"
-
-#include "strequal.h"
-#include "strtok.h"
-#include "curl_memory.h"
-#include "rawstr.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* Get user and password from .netrc when given a machine name */
-
-enum host_lookup_state {
- NOTHING,
- HOSTFOUND, /* the 'machine' keyword was found */
- HOSTVALID /* this is "our" machine! */
-};
-
-/*
- * @unittest: 1304
- *
- * *loginp and *passwordp MUST be allocated if they aren't NULL when passed
- * in.
- */
-int Curl_parsenetrc(const char *host,
- char **loginp,
- char **passwordp,
- char *netrcfile)
-{
- FILE *file;
- int retcode=1;
- int specific_login = (*loginp && **loginp != 0);
- bool netrc_alloc = FALSE;
- enum host_lookup_state state=NOTHING;
-
- char state_login=0; /* Found a login keyword */
- char state_password=0; /* Found a password keyword */
- int state_our_login=FALSE; /* With specific_login, found *our* login name */
-
-#define NETRC DOT_CHAR "netrc"
-
- if(!netrcfile) {
- bool home_alloc = FALSE;
- char *home = curl_getenv("HOME"); /* portable environment reader */
- if(home) {
- home_alloc = TRUE;
-#if defined(HAVE_GETPWUID_R) && defined(HAVE_GETEUID)
- }
- else {
- struct passwd pw, *pw_res;
- char pwbuf[1024];
- if(!getpwuid_r(geteuid(), &pw, pwbuf, sizeof(pwbuf), &pw_res)
- && pw_res) {
- home = strdup(pw.pw_dir);
- if(!home)
- return CURLE_OUT_OF_MEMORY;
- home_alloc = TRUE;
- }
-#elif defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
- }
- else {
- struct passwd *pw;
- pw= getpwuid(geteuid());
- if(pw) {
- home = pw->pw_dir;
- }
-#endif
- }
-
- if(!home)
- return retcode; /* no home directory found (or possibly out of memory) */
-
- netrcfile = curl_maprintf("%s%s%s", home, DIR_CHAR, NETRC);
- if(home_alloc)
- Curl_safefree(home);
- if(!netrcfile) {
- return -1;
- }
- netrc_alloc = TRUE;
- }
-
- file = fopen(netrcfile, "r");
- if(netrc_alloc)
- Curl_safefree(netrcfile);
- if(file) {
- char *tok;
- char *tok_buf;
- bool done=FALSE;
- char netrcbuffer[256];
- int netrcbuffsize = (int)sizeof(netrcbuffer);
-
- while(!done && fgets(netrcbuffer, netrcbuffsize, file)) {
- tok=strtok_r(netrcbuffer, " \t\n", &tok_buf);
- while(!done && tok) {
-
- if((*loginp && **loginp) && (*passwordp && **passwordp)) {
- done=TRUE;
- break;
- }
-
- switch(state) {
- case NOTHING:
- if(Curl_raw_equal("machine", tok)) {
- /* the next tok is the machine name, this is in itself the
- delimiter that starts the stuff entered for this machine,
- after this we need to search for 'login' and
- 'password'. */
- state=HOSTFOUND;
- }
- break;
- case HOSTFOUND:
- if(Curl_raw_equal(host, tok)) {
- /* and yes, this is our host! */
- state=HOSTVALID;
- retcode=0; /* we did find our host */
- }
- else
- /* not our host */
- state=NOTHING;
- break;
- case HOSTVALID:
- /* we are now parsing sub-keywords concerning "our" host */
- if(state_login) {
- if(specific_login) {
- state_our_login = Curl_raw_equal(*loginp, tok);
- }
- else {
- free(*loginp);
- *loginp = strdup(tok);
- if(!*loginp) {
- retcode = -1; /* allocation failed */
- goto out;
- }
- }
- state_login=0;
- }
- else if(state_password) {
- if(state_our_login || !specific_login) {
- free(*passwordp);
- *passwordp = strdup(tok);
- if(!*passwordp) {
- retcode = -1; /* allocation failed */
- goto out;
- }
- }
- state_password=0;
- }
- else if(Curl_raw_equal("login", tok))
- state_login=1;
- else if(Curl_raw_equal("password", tok))
- state_password=1;
- else if(Curl_raw_equal("machine", tok)) {
- /* ok, there's machine here go => */
- state = HOSTFOUND;
- state_our_login = FALSE;
- }
- break;
- } /* switch (state) */
-
- tok = strtok_r(NULL, " \t\n", &tok_buf);
- } /* while(tok) */
- } /* while fgets() */
-
- out:
- fclose(file);
- }
-
- return retcode;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/netrc.h b/external/libcurl_android/jni/libcurl/lib/netrc.h
deleted file mode 100755
index a1456011..00000000
--- a/external/libcurl_android/jni/libcurl/lib/netrc.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef HEADER_CURL_NETRC_H
-#define HEADER_CURL_NETRC_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* returns -1 on failure, 0 if the host is found, 1 is the host isn't found */
-int Curl_parsenetrc(const char *host,
- char **loginp,
- char **passwordp,
- char *filename);
- /* Assume: (*passwordp)[0]=0, host[0] != 0.
- * If (*loginp)[0] = 0, search for login and password within a machine
- * section in the netrc.
- * If (*loginp)[0] != 0, search for password within machine and login.
- */
-
-#endif /* HEADER_CURL_NETRC_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/non-ascii.c b/external/libcurl_android/jni/libcurl/lib/non-ascii.c
deleted file mode 100755
index 91d6a54f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/non-ascii.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef CURL_DOES_CONVERSIONS
-
-#include <curl/curl.h>
-
-#include "non-ascii.h"
-#include "formdata.h"
-#include "sendf.h"
-#include "urldata.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifdef HAVE_ICONV
-#include <iconv.h>
-/* set default codesets for iconv */
-#ifndef CURL_ICONV_CODESET_OF_NETWORK
-#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
-#endif
-#ifndef CURL_ICONV_CODESET_FOR_UTF8
-#define CURL_ICONV_CODESET_FOR_UTF8 "UTF-8"
-#endif
-#define ICONV_ERROR (size_t)-1
-#endif /* HAVE_ICONV */
-
-/*
- * Curl_convert_clone() returns a malloced copy of the source string (if
- * returning CURLE_OK), with the data converted to network format.
- */
-CURLcode Curl_convert_clone(struct SessionHandle *data,
- const char *indata,
- size_t insize,
- char **outbuf)
-{
- char *convbuf;
- CURLcode result;
-
- convbuf = malloc(insize);
- if(!convbuf)
- return CURLE_OUT_OF_MEMORY;
-
- memcpy(convbuf, indata, insize);
- result = Curl_convert_to_network(data, convbuf, insize);
- if(result) {
- free(convbuf);
- return result;
- }
-
- *outbuf = convbuf; /* return the converted buffer */
-
- return CURLE_OK;
-}
-
-/*
- * Curl_convert_to_network() is an internal function for performing ASCII
- * conversions on non-ASCII platforms. It convers the buffer _in place_.
- */
-CURLcode Curl_convert_to_network(struct SessionHandle *data,
- char *buffer, size_t length)
-{
- CURLcode rc;
-
- if(data->set.convtonetwork) {
- /* use translation callback */
- rc = data->set.convtonetwork(buffer, length);
- if(rc != CURLE_OK) {
- failf(data,
- "CURLOPT_CONV_TO_NETWORK_FUNCTION callback returned %d: %s",
- (int)rc, curl_easy_strerror(rc));
- }
- return rc;
- }
- else {
-#ifdef HAVE_ICONV
- /* do the translation ourselves */
- char *input_ptr, *output_ptr;
- size_t in_bytes, out_bytes, rc;
- int error;
-
- /* open an iconv conversion descriptor if necessary */
- if(data->outbound_cd == (iconv_t)-1) {
- data->outbound_cd = iconv_open(CURL_ICONV_CODESET_OF_NETWORK,
- CURL_ICONV_CODESET_OF_HOST);
- if(data->outbound_cd == (iconv_t)-1) {
- error = ERRNO;
- failf(data,
- "The iconv_open(\"%s\", \"%s\") call failed with errno %i: %s",
- CURL_ICONV_CODESET_OF_NETWORK,
- CURL_ICONV_CODESET_OF_HOST,
- error, strerror(error));
- return CURLE_CONV_FAILED;
- }
- }
- /* call iconv */
- input_ptr = output_ptr = buffer;
- in_bytes = out_bytes = length;
- rc = iconv(data->outbound_cd, (const char**)&input_ptr, &in_bytes,
- &output_ptr, &out_bytes);
- if((rc == ICONV_ERROR) || (in_bytes != 0)) {
- error = ERRNO;
- failf(data,
- "The Curl_convert_to_network iconv call failed with errno %i: %s",
- error, strerror(error));
- return CURLE_CONV_FAILED;
- }
-#else
- failf(data, "CURLOPT_CONV_TO_NETWORK_FUNCTION callback required");
- return CURLE_CONV_REQD;
-#endif /* HAVE_ICONV */
- }
-
- return CURLE_OK;
-}
-
-/*
- * Curl_convert_from_network() is an internal function for performing ASCII
- * conversions on non-ASCII platforms. It convers the buffer _in place_.
- */
-CURLcode Curl_convert_from_network(struct SessionHandle *data,
- char *buffer, size_t length)
-{
- CURLcode rc;
-
- if(data->set.convfromnetwork) {
- /* use translation callback */
- rc = data->set.convfromnetwork(buffer, length);
- if(rc != CURLE_OK) {
- failf(data,
- "CURLOPT_CONV_FROM_NETWORK_FUNCTION callback returned %d: %s",
- (int)rc, curl_easy_strerror(rc));
- }
- return rc;
- }
- else {
-#ifdef HAVE_ICONV
- /* do the translation ourselves */
- char *input_ptr, *output_ptr;
- size_t in_bytes, out_bytes, rc;
- int error;
-
- /* open an iconv conversion descriptor if necessary */
- if(data->inbound_cd == (iconv_t)-1) {
- data->inbound_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST,
- CURL_ICONV_CODESET_OF_NETWORK);
- if(data->inbound_cd == (iconv_t)-1) {
- error = ERRNO;
- failf(data,
- "The iconv_open(\"%s\", \"%s\") call failed with errno %i: %s",
- CURL_ICONV_CODESET_OF_HOST,
- CURL_ICONV_CODESET_OF_NETWORK,
- error, strerror(error));
- return CURLE_CONV_FAILED;
- }
- }
- /* call iconv */
- input_ptr = output_ptr = buffer;
- in_bytes = out_bytes = length;
- rc = iconv(data->inbound_cd, (const char **)&input_ptr, &in_bytes,
- &output_ptr, &out_bytes);
- if((rc == ICONV_ERROR) || (in_bytes != 0)) {
- error = ERRNO;
- failf(data,
- "Curl_convert_from_network iconv call failed with errno %i: %s",
- error, strerror(error));
- return CURLE_CONV_FAILED;
- }
-#else
- failf(data, "CURLOPT_CONV_FROM_NETWORK_FUNCTION callback required");
- return CURLE_CONV_REQD;
-#endif /* HAVE_ICONV */
- }
-
- return CURLE_OK;
-}
-
-/*
- * Curl_convert_from_utf8() is an internal function for performing UTF-8
- * conversions on non-ASCII platforms.
- */
-CURLcode Curl_convert_from_utf8(struct SessionHandle *data,
- char *buffer, size_t length)
-{
- CURLcode rc;
-
- if(data->set.convfromutf8) {
- /* use translation callback */
- rc = data->set.convfromutf8(buffer, length);
- if(rc != CURLE_OK) {
- failf(data,
- "CURLOPT_CONV_FROM_UTF8_FUNCTION callback returned %d: %s",
- (int)rc, curl_easy_strerror(rc));
- }
- return rc;
- }
- else {
-#ifdef HAVE_ICONV
- /* do the translation ourselves */
- const char *input_ptr;
- char *output_ptr;
- size_t in_bytes, out_bytes, rc;
- int error;
-
- /* open an iconv conversion descriptor if necessary */
- if(data->utf8_cd == (iconv_t)-1) {
- data->utf8_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST,
- CURL_ICONV_CODESET_FOR_UTF8);
- if(data->utf8_cd == (iconv_t)-1) {
- error = ERRNO;
- failf(data,
- "The iconv_open(\"%s\", \"%s\") call failed with errno %i: %s",
- CURL_ICONV_CODESET_OF_HOST,
- CURL_ICONV_CODESET_FOR_UTF8,
- error, strerror(error));
- return CURLE_CONV_FAILED;
- }
- }
- /* call iconv */
- input_ptr = output_ptr = buffer;
- in_bytes = out_bytes = length;
- rc = iconv(data->utf8_cd, &input_ptr, &in_bytes,
- &output_ptr, &out_bytes);
- if((rc == ICONV_ERROR) || (in_bytes != 0)) {
- error = ERRNO;
- failf(data,
- "The Curl_convert_from_utf8 iconv call failed with errno %i: %s",
- error, strerror(error));
- return CURLE_CONV_FAILED;
- }
- if(output_ptr < input_ptr) {
- /* null terminate the now shorter output string */
- *output_ptr = 0x00;
- }
-#else
- failf(data, "CURLOPT_CONV_FROM_UTF8_FUNCTION callback required");
- return CURLE_CONV_REQD;
-#endif /* HAVE_ICONV */
- }
-
- return CURLE_OK;
-}
-
-/*
- * Init conversion stuff for a SessionHandle
- */
-void Curl_convert_init(struct SessionHandle *data)
-{
-#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV)
- /* conversion descriptors for iconv calls */
- data->outbound_cd = (iconv_t)-1;
- data->inbound_cd = (iconv_t)-1;
- data->utf8_cd = (iconv_t)-1;
-#else
- (void)data;
-#endif /* CURL_DOES_CONVERSIONS && HAVE_ICONV */
-}
-
-/*
- * Setup conversion stuff for a SessionHandle
- */
-void Curl_convert_setup(struct SessionHandle *data)
-{
- data->inbound_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST,
- CURL_ICONV_CODESET_OF_NETWORK);
- data->outbound_cd = iconv_open(CURL_ICONV_CODESET_OF_NETWORK,
- CURL_ICONV_CODESET_OF_HOST);
- data->utf8_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST,
- CURL_ICONV_CODESET_FOR_UTF8);
-}
-
-/*
- * Close conversion stuff for a SessionHandle
- */
-
-void Curl_convert_close(struct SessionHandle *data)
-{
-#ifdef HAVE_ICONV
- /* close iconv conversion descriptors */
- if(data->inbound_cd != (iconv_t)-1) {
- iconv_close(data->inbound_cd);
- }
- if(data->outbound_cd != (iconv_t)-1) {
- iconv_close(data->outbound_cd);
- }
- if(data->utf8_cd != (iconv_t)-1) {
- iconv_close(data->utf8_cd);
- }
-#else
- (void)data;
-#endif /* HAVE_ICONV */
-}
-
-/*
- * Curl_convert_form() is used from http.c, this converts any form items that
- need to be sent in the network encoding. Returns CURLE_OK on success.
- */
-CURLcode Curl_convert_form(struct SessionHandle *data, struct FormData *form)
-{
- struct FormData *next;
- CURLcode rc;
-
- if(!form)
- return CURLE_OK;
-
- if(!data)
- return CURLE_BAD_FUNCTION_ARGUMENT;
-
- do {
- next=form->next; /* the following form line */
- if(form->type == FORM_DATA) {
- rc = Curl_convert_to_network(data, form->line, form->length);
- /* Curl_convert_to_network calls failf if unsuccessful */
- if(rc != CURLE_OK)
- return rc;
- }
- } while((form = next) != NULL); /* continue */
- return CURLE_OK;
-}
-
-#endif /* CURL_DOES_CONVERSIONS */
diff --git a/external/libcurl_android/jni/libcurl/lib/non-ascii.h b/external/libcurl_android/jni/libcurl/lib/non-ascii.h
deleted file mode 100755
index 8b4b7c22..00000000
--- a/external/libcurl_android/jni/libcurl/lib/non-ascii.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef HEADER_CURL_NON_ASCII_H
-#define HEADER_CURL_NON_ASCII_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifdef CURL_DOES_CONVERSIONS
-
-#include "urldata.h"
-
-/*
- * Curl_convert_clone() returns a malloced copy of the source string (if
- * returning CURLE_OK), with the data converted to network format.
- *
- * If no conversion was needed *outbuf may be NULL.
- */
-CURLcode Curl_convert_clone(struct SessionHandle *data,
- const char *indata,
- size_t insize,
- char **outbuf);
-
-void Curl_convert_init(struct SessionHandle *data);
-void Curl_convert_setup(struct SessionHandle *data);
-void Curl_convert_close(struct SessionHandle *data);
-
-CURLcode Curl_convert_to_network(struct SessionHandle *data,
- char *buffer, size_t length);
-CURLcode Curl_convert_from_network(struct SessionHandle *data,
- char *buffer, size_t length);
-CURLcode Curl_convert_from_utf8(struct SessionHandle *data,
- char *buffer, size_t length);
-CURLcode Curl_convert_form(struct SessionHandle *data, struct FormData *form);
-#else
-#define Curl_convert_clone(a,b,c,d) ((void)a, CURLE_OK)
-#define Curl_convert_init(x) Curl_nop_stmt
-#define Curl_convert_setup(x) Curl_nop_stmt
-#define Curl_convert_close(x) Curl_nop_stmt
-#define Curl_convert_to_network(a,b,c) ((void)a, CURLE_OK)
-#define Curl_convert_from_network(a,b,c) ((void)a, CURLE_OK)
-#define Curl_convert_from_utf8(a,b,c) ((void)a, CURLE_OK)
-#define Curl_convert_form(a,b) CURLE_OK
-#endif
-
-#endif /* HEADER_CURL_NON_ASCII_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/nonblock.c b/external/libcurl_android/jni/libcurl/lib/nonblock.c
deleted file mode 100755
index 1447c877..00000000
--- a/external/libcurl_android/jni/libcurl/lib/nonblock.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#if (defined(HAVE_IOCTL_FIONBIO) && defined(NETWARE))
-#include <sys/filio.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#include "nonblock.h"
-
-/*
- * curlx_nonblock() set the given socket to either blocking or non-blocking
- * mode based on the 'nonblock' boolean argument. This function is highly
- * portable.
- */
-int curlx_nonblock(curl_socket_t sockfd, /* operate on this */
- int nonblock /* TRUE or FALSE */)
-{
-#if defined(USE_BLOCKING_SOCKETS)
-
- return 0; /* returns success */
-
-#elif defined(HAVE_FCNTL_O_NONBLOCK)
-
- /* most recent unix versions */
- int flags;
- flags = sfcntl(sockfd, F_GETFL, 0);
- if(nonblock)
- return sfcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
- else
- return sfcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK));
-
-#elif defined(HAVE_IOCTL_FIONBIO)
-
- /* older unix versions */
- int flags = nonblock ? 1 : 0;
- return ioctl(sockfd, FIONBIO, &flags);
-
-#elif defined(HAVE_IOCTLSOCKET_FIONBIO)
-
- /* Windows */
- unsigned long flags = nonblock ? 1UL : 0UL;
- return ioctlsocket(sockfd, FIONBIO, &flags);
-
-#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO)
-
- /* Amiga */
- long flags = nonblock ? 1L : 0L;
- return IoctlSocket(sockfd, FIONBIO, flags);
-
-#elif defined(HAVE_SETSOCKOPT_SO_NONBLOCK)
-
- /* BeOS */
- long b = nonblock ? 1L : 0L;
- return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b));
-
-#else
-# error "no non-blocking method was found/used/set"
-#endif
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/nonblock.h b/external/libcurl_android/jni/libcurl/lib/nonblock.h
deleted file mode 100755
index b540ae46..00000000
--- a/external/libcurl_android/jni/libcurl/lib/nonblock.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef HEADER_CURL_NONBLOCK_H
-#define HEADER_CURL_NONBLOCK_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <curl/curl.h> /* for curl_socket_t */
-
-int curlx_nonblock(curl_socket_t sockfd, /* operate on this */
- int nonblock /* TRUE or FALSE */);
-
-#endif /* HEADER_CURL_NONBLOCK_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/nwlib.c b/external/libcurl_android/jni/libcurl/lib/nwlib.c
deleted file mode 100755
index 252bf11e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/nwlib.c
+++ /dev/null
@@ -1,329 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef NETWARE /* Novell NetWare */
-
-#ifdef __NOVELL_LIBC__
-/* For native LibC-based NLM we need to register as a real lib. */
-#include <library.h>
-#include <netware.h>
-#include <screen.h>
-#include <nks/thread.h>
-#include <nks/synch.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-typedef struct
-{
- int _errno;
- void *twentybytes;
-} libthreaddata_t;
-
-typedef struct
-{
- int x;
- int y;
- int z;
- void *tenbytes;
- NXKey_t perthreadkey; /* if -1, no key obtained... */
- NXMutex_t *lock;
-} libdata_t;
-
-int gLibId = -1;
-void *gLibHandle = (void *) NULL;
-rtag_t gAllocTag = (rtag_t) NULL;
-NXMutex_t *gLibLock = (NXMutex_t *) NULL;
-
-/* internal library function prototypes... */
-int DisposeLibraryData( void * );
-void DisposeThreadData( void * );
-int GetOrSetUpData( int id, libdata_t **data, libthreaddata_t **threaddata );
-
-
-int _NonAppStart( void *NLMHandle,
- void *errorScreen,
- const char *cmdLine,
- const char *loadDirPath,
- size_t uninitializedDataLength,
- void *NLMFileHandle,
- int (*readRoutineP)( int conn,
- void *fileHandle, size_t offset,
- size_t nbytes,
- size_t *bytesRead,
- void *buffer ),
- size_t customDataOffset,
- size_t customDataSize,
- int messageCount,
- const char **messages )
-{
- NX_LOCK_INFO_ALLOC(liblock, "Per-Application Data Lock", 0);
-
-#ifndef __GNUC__
-#pragma unused(cmdLine)
-#pragma unused(loadDirPath)
-#pragma unused(uninitializedDataLength)
-#pragma unused(NLMFileHandle)
-#pragma unused(readRoutineP)
-#pragma unused(customDataOffset)
-#pragma unused(customDataSize)
-#pragma unused(messageCount)
-#pragma unused(messages)
-#endif
-
- /*
- * Here we process our command line, post errors (to the error screen),
- * perform initializations and anything else we need to do before being able
- * to accept calls into us. If we succeed, we return non-zero and the NetWare
- * Loader will leave us up, otherwise we fail to load and get dumped.
- */
- gAllocTag = AllocateResourceTag(NLMHandle,
- "<library-name> memory allocations",
- AllocSignature);
-
- if(!gAllocTag) {
- OutputToScreen(errorScreen, "Unable to allocate resource tag for "
- "library memory allocations.\n");
- return -1;
- }
-
- gLibId = register_library(DisposeLibraryData);
-
- if(gLibId < -1) {
- OutputToScreen(errorScreen, "Unable to register library with kernel.\n");
- return -1;
- }
-
- gLibHandle = NLMHandle;
-
- gLibLock = NXMutexAlloc(0, 0, &liblock);
-
- if(!gLibLock) {
- OutputToScreen(errorScreen, "Unable to allocate library data lock.\n");
- return -1;
- }
-
- return 0;
-}
-
-/*
- * Here we clean up any resources we allocated. Resource tags is a big part
- * of what we created, but NetWare doesn't ask us to free those.
- */
-void _NonAppStop( void )
-{
- (void) unregister_library(gLibId);
- NXMutexFree(gLibLock);
-}
-
-/*
- * This function cannot be the first in the file for if the file is linked
- * first, then the check-unload function's offset will be nlmname.nlm+0
- * which is how to tell that there isn't one. When the check function is
- * first in the linked objects, it is ambiguous. For this reason, we will
- * put it inside this file after the stop function.
- *
- * Here we check to see if it's alright to ourselves to be unloaded. If not,
- * we return a non-zero value. Right now, there isn't any reason not to allow
- * it.
- */
-int _NonAppCheckUnload( void )
-{
- return 0;
-}
-
-int GetOrSetUpData(int id, libdata_t **appData,
- libthreaddata_t **threadData )
-{
- int err;
- libdata_t *app_data;
- libthreaddata_t *thread_data;
- NXKey_t key;
- NX_LOCK_INFO_ALLOC(liblock, "Application Data Lock", 0);
-
- err = 0;
- thread_data = (libthreaddata_t *) NULL;
-
- /*
- * Attempt to get our data for the application calling us. This is where we
- * store whatever application-specific information we need to carry in
- * support of calling applications.
- */
- app_data = (libdata_t *) get_app_data(id);
-
- if(!app_data) {
- /*
- * This application hasn't called us before; set up application AND
- * per-thread data. Of course, just in case a thread from this same
- * application is calling us simultaneously, we better lock our application
- * data-creation mutex. We also need to recheck for data after we acquire
- * the lock because WE might be that other thread that was too late to
- * create the data and the first thread in will have created it.
- */
- NXLock(gLibLock);
-
- if(!(app_data = (libdata_t *) get_app_data(id))) {
- app_data = malloc(sizeof(libdata_t));
-
- if(app_data) {
- memset(app_data, 0, sizeof(libdata_t));
-
- app_data->tenbytes = malloc(10);
- app_data->lock = NXMutexAlloc(0, 0, &liblock);
-
- if(!app_data->tenbytes || !app_data->lock) {
- if(app_data->lock)
- NXMutexFree(app_data->lock);
-
- free(app_data);
- app_data = (libdata_t *) NULL;
- err = ENOMEM;
- }
-
- if(app_data) {
- /*
- * Here we burn in the application data that we were trying to get
- * by calling get_app_data(). Next time we call the first function,
- * we'll get this data we're just now setting. We also go on here to
- * establish the per-thread data for the calling thread, something
- * we'll have to do on each application thread the first time
- * it calls us.
- */
- err = set_app_data(gLibId, app_data);
-
- if(err) {
- free(app_data);
- app_data = (libdata_t *) NULL;
- err = ENOMEM;
- }
- else {
- /* create key for thread-specific data... */
- err = NXKeyCreate(DisposeThreadData, (void *) NULL, &key);
-
- if(err) /* (no more keys left?) */
- key = -1;
-
- app_data->perthreadkey = key;
- }
- }
- }
- }
-
- NXUnlock(gLibLock);
- }
-
- if(app_data) {
- key = app_data->perthreadkey;
-
- if(key != -1 /* couldn't create a key? no thread data */
- && !(err = NXKeyGetValue(key, (void **) &thread_data))
- && !thread_data) {
- /*
- * Allocate the per-thread data for the calling thread. Regardless of
- * whether there was already application data or not, this may be the
- * first call by a new thread. The fact that we allocation 20 bytes on
- * a pointer is not very important, this just helps to demonstrate that
- * we can have arbitrarily complex per-thread data.
- */
- thread_data = malloc(sizeof(libthreaddata_t));
-
- if(thread_data) {
- thread_data->_errno = 0;
- thread_data->twentybytes = malloc(20);
-
- if(!thread_data->twentybytes) {
- free(thread_data);
- thread_data = (libthreaddata_t *) NULL;
- err = ENOMEM;
- }
-
- if((err = NXKeySetValue(key, thread_data))) {
- free(thread_data->twentybytes);
- free(thread_data);
- thread_data = (libthreaddata_t *) NULL;
- }
- }
- }
- }
-
- if(appData)
- *appData = app_data;
-
- if(threadData)
- *threadData = thread_data;
-
- return err;
-}
-
-int DisposeLibraryData( void *data )
-{
- if(data) {
- void *tenbytes = ((libdata_t *) data)->tenbytes;
-
- if(tenbytes)
- free(tenbytes);
-
- free(data);
- }
-
- return 0;
-}
-
-void DisposeThreadData( void *data )
-{
- if(data) {
- void *twentybytes = ((libthreaddata_t *) data)->twentybytes;
-
- if(twentybytes)
- free(twentybytes);
-
- free(data);
- }
-}
-
-#else /* __NOVELL_LIBC__ */
-/* For native CLib-based NLM seems we can do a bit more simple. */
-#include <nwthread.h>
-
-int main ( void )
-{
- /* initialize any globals here... */
-
- /* do this if any global initializing was done
- SynchronizeStart();
- */
- ExitThread (TSR_THREAD, 0);
- return 0;
-}
-
-#endif /* __NOVELL_LIBC__ */
-
-#else /* NETWARE */
-
-#ifdef __POCC__
-# pragma warn(disable:2024) /* Disable warning #2024: Empty input file */
-#endif
-
-#endif /* NETWARE */
diff --git a/external/libcurl_android/jni/libcurl/lib/nwos.c b/external/libcurl_android/jni/libcurl/lib/nwos.c
deleted file mode 100755
index 23ff2a71..00000000
--- a/external/libcurl_android/jni/libcurl/lib/nwos.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef NETWARE /* Novell NetWare */
-
-#ifdef __NOVELL_LIBC__
-/* For native LibC-based NLM we need to do nothing. */
-int netware_init ( void )
-{
- return 0;
-}
-
-#else /* __NOVELL_LIBC__ */
-
-/* For native CLib-based NLM we need to initialize the LONG namespace. */
-#include <nwnspace.h>
-#include <nwthread.h>
-#include <nwadv.h>
-/* Make the CLIB Ctx stuff link */
-#include <netdb.h>
-NETDB_DEFINE_CONTEXT
-/* Make the CLIB Inet stuff link */
-#include <netinet/in.h>
-#include <arpa/inet.h>
-NETINET_DEFINE_CONTEXT
-
-int netware_init ( void )
-{
- int rc = 0;
- unsigned int myHandle = GetNLMHandle();
- /* import UnAugmentAsterisk dynamically for NW4.x compatibility */
- void (*pUnAugmentAsterisk)(int) = (void(*)(int))
- ImportSymbol(myHandle, "UnAugmentAsterisk");
- /* import UseAccurateCaseForPaths dynamically for NW3.x compatibility */
- void (*pUseAccurateCaseForPaths)(int) = (void(*)(int))
- ImportSymbol(myHandle, "UseAccurateCaseForPaths");
- if(pUnAugmentAsterisk)
- pUnAugmentAsterisk(1);
- if(pUseAccurateCaseForPaths)
- pUseAccurateCaseForPaths(1);
- UnimportSymbol(myHandle, "UnAugmentAsterisk");
- UnimportSymbol(myHandle, "UseAccurateCaseForPaths");
- /* set long name space */
- if((SetCurrentNameSpace(4) == 255)) {
- rc = 1;
- }
- if((SetTargetNameSpace(4) == 255)) {
- rc = rc + 2;
- }
- return rc;
-}
-
-/* dummy function to satisfy newer prelude */
-int __init_environment ( void )
-{
- return 0;
-}
-
-/* dummy function to satisfy newer prelude */
-int __deinit_environment ( void )
-{
- return 0;
-}
-
-#endif /* __NOVELL_LIBC__ */
-
-#endif /* NETWARE */
diff --git a/external/libcurl_android/jni/libcurl/lib/objnames.inc b/external/libcurl_android/jni/libcurl/lib/objnames.inc
deleted file mode 100755
index 8778492b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/objnames.inc
+++ /dev/null
@@ -1,107 +0,0 @@
-# ***************************************************************************
-# * _ _ ____ _
-# * Project ___| | | | _ \| |
-# * / __| | | | |_) | |
-# * | (__| |_| | _ <| |___
-# * \___|\___/|_| \_\_____|
-# *
-# * Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
-# *
-# * This software is licensed as described in the file COPYING, which
-# * you should have received as part of this distribution. The terms
-# * are also available at http://curl.haxx.se/docs/copyright.html.
-# *
-# * You may opt to use, copy, modify, merge, publish, distribute and/or sell
-# * copies of the Software, and permit persons to whom the Software is
-# * furnished to do so, under the terms of the COPYING file.
-# *
-# * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
-# * KIND, either express or implied.
-# *
-# ***************************************************************************
-
-#
-# This file is sourced from curl/packages/OS400/initscript.sh and
-# other Bourne shell scripts. Keep it as portable as possible.
-#
-
-#
-# curl_10char_object_name
-#
-# This shell function accepts a single string argument with unspecified
-# length representing a (*.c) source file name and returns a string which
-# is a transformation of given argument.
-#
-# The intended purpose of this function is to transliterate a (*.c) source
-# file name that may be longer than 10 characters, or not, into a string
-# with at most 10 characters which may be used as an OS/400 object name.
-#
-# This function might not be universally usefull, nor we care about it.
-#
-# It is intended to be used with libcurl's (*.c) source file names, so
-# dependency on libcurl's source file naming scheme is acceptable and
-# good enough for its intended use. Specifically it makes use of the fact
-# that libcurl's (*.c) source file names which may be longer than 10 chars
-# are conformed with underscore '_' separated substrings, or separated by
-# other character which does not belong to the [0-9], [a-z] or [A-Z] sets.
-#
-# This allows repeatable and automatic short object name generation with
-# no need for a hardcoded mapping table.
-#
-# Transformation is done in the following way:
-#
-# 1) Leading directory components are removed.
-# 2) Leftmost dot character and any other char following it are removed.
-# 3) Lowercase characters are transliterated to uppercase.
-# 4) Characters not in [A-Z] or [0-9] are transliterated to underscore '_'.
-# 5) Every sequence of one or more underscores is replaced with a single one.
-# 6) Five leftmost substrings which end in an underscore character are
-# replaced by the first character of each substring, while retaining
-# the rest of the string.
-# 7) Finally the result is truncated to 10 characters.
-#
-# Resulting object name may be shorter than 10 characters.
-#
-# Test case 1221 does unit testng of this function and also verifies
-# that it is possible to generate distinct short object names for all
-# curl and libcurl *.c source file names.
-#
-
-curl_10char_object_name() {
- echo "${1}" | \
- sed -e 's:.*/::' \
- -e 's:[.].*::' \
- -e 'y:abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:' \
- -e 's:[^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_]:_:g' \
- -e 's:__*:_:g' \
- -e 's:\([^_]\)[^_]*_\(.*\):\1\2:' \
- -e 's:\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3:' \
- -e 's:\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4:' \
- -e 's:\([^_]\)\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4\5:' \
- -e 's:\([^_]\)\([^_]\)\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4\5\6:' \
- -e 's:^\(..........\).*:\1:'
-}
-
-#
-# curl_8char_object_name
-#
-# Same as curl_10char_object_name() description and details above, except
-# that object name is limited to 8 charcters maximum.
-#
-
-curl_8char_object_name() {
- echo "${1}" | \
- sed -e 's:.*/::' \
- -e 's:[.].*::' \
- -e 'y:abcdefghijklmnopqrstuvwxyz:ABCDEFGHIJKLMNOPQRSTUVWXYZ:' \
- -e 's:[^ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_]:_:g' \
- -e 's:__*:_:g' \
- -e 's:\([^_]\)[^_]*_\(.*\):\1\2:' \
- -e 's:\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3:' \
- -e 's:\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4:' \
- -e 's:\([^_]\)\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4\5:' \
- -e 's:\([^_]\)\([^_]\)\([^_]\)\([^_]\)\([^_]\)[^_]*_\(.*\):\1\2\3\4\5\6:' \
- -e 's:^\(........\).*:\1:'
-}
-
-# end of objectname.inc
diff --git a/external/libcurl_android/jni/libcurl/lib/openldap.c b/external/libcurl_android/jni/libcurl/lib/openldap.c
deleted file mode 100755
index df8d9388..00000000
--- a/external/libcurl_android/jni/libcurl/lib/openldap.c
+++ /dev/null
@@ -1,640 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010, 2013, Howard Chu, <hyc@openldap.org>
- * Copyright (C) 2011 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if !defined(CURL_DISABLE_LDAP) && defined(USE_OPENLDAP)
-
-/*
- * Notice that USE_OPENLDAP is only a source code selection switch. When
- * libcurl is built with USE_OPENLDAP defined the libcurl source code that
- * gets compiled is the code from openldap.c, otherwise the code that gets
- * compiled is the code from ldap.c.
- *
- * When USE_OPENLDAP is defined a recent version of the OpenLDAP library
- * might be required for compilation and runtime. In order to use ancient
- * OpenLDAP library versions, USE_OPENLDAP shall not be defined.
- */
-
-#include <ldap.h>
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "sendf.h"
-#include "vtls/vtls.h"
-#include "transfer.h"
-#include "curl_ldap.h"
-#include "curl_memory.h"
-#include "curl_base64.h"
-#include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "memdebug.h"
-
-#ifndef _LDAP_PVT_H
-extern int ldap_pvt_url_scheme2proto(const char *);
-extern int ldap_init_fd(ber_socket_t fd, int proto, const char *url,
- LDAP **ld);
-#endif
-
-static CURLcode ldap_setup(struct connectdata *conn);
-static CURLcode ldap_do(struct connectdata *conn, bool *done);
-static CURLcode ldap_done(struct connectdata *conn, CURLcode, bool);
-static CURLcode ldap_connect(struct connectdata *conn, bool *done);
-static CURLcode ldap_connecting(struct connectdata *conn, bool *done);
-static CURLcode ldap_disconnect(struct connectdata *conn, bool dead);
-
-static Curl_recv ldap_recv;
-
-/*
- * LDAP protocol handler.
- */
-
-const struct Curl_handler Curl_handler_ldap = {
- "LDAP", /* scheme */
- ldap_setup, /* setup_connection */
- ldap_do, /* do_it */
- ldap_done, /* done */
- ZERO_NULL, /* do_more */
- ldap_connect, /* connect_it */
- ldap_connecting, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ldap_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_LDAP, /* defport */
- CURLPROTO_LDAP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-#ifdef USE_SSL
-/*
- * LDAPS protocol handler.
- */
-
-const struct Curl_handler Curl_handler_ldaps = {
- "LDAPS", /* scheme */
- ldap_setup, /* setup_connection */
- ldap_do, /* do_it */
- ldap_done, /* done */
- ZERO_NULL, /* do_more */
- ldap_connect, /* connect_it */
- ldap_connecting, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ldap_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_LDAPS, /* defport */
- CURLPROTO_LDAP, /* protocol */
- PROTOPT_SSL /* flags */
-};
-#endif
-
-static const char *url_errs[] = {
- "success",
- "out of memory",
- "bad parameter",
- "unrecognized scheme",
- "unbalanced delimiter",
- "bad URL",
- "bad host or port",
- "bad or missing attributes",
- "bad or missing scope",
- "bad or missing filter",
- "bad or missing extensions"
-};
-
-typedef struct ldapconninfo {
- LDAP *ld;
- Curl_recv *recv; /* for stacking SSL handler */
- Curl_send *send;
- int proto;
- int msgid;
- bool ssldone;
- bool sslinst;
- bool didbind;
-} ldapconninfo;
-
-typedef struct ldapreqinfo {
- int msgid;
- int nument;
-} ldapreqinfo;
-
-static CURLcode ldap_setup(struct connectdata *conn)
-{
- ldapconninfo *li;
- LDAPURLDesc *lud;
- struct SessionHandle *data=conn->data;
- int rc, proto;
- CURLcode status;
-
- rc = ldap_url_parse(data->change.url, &lud);
- if(rc != LDAP_URL_SUCCESS) {
- const char *msg = "url parsing problem";
- status = CURLE_URL_MALFORMAT;
- if(rc > LDAP_URL_SUCCESS && rc <= LDAP_URL_ERR_BADEXTS) {
- if(rc == LDAP_URL_ERR_MEM)
- status = CURLE_OUT_OF_MEMORY;
- msg = url_errs[rc];
- }
- failf(conn->data, "LDAP local: %s", msg);
- return status;
- }
- proto = ldap_pvt_url_scheme2proto(lud->lud_scheme);
- ldap_free_urldesc(lud);
-
- li = calloc(1, sizeof(ldapconninfo));
- if(!li)
- return CURLE_OUT_OF_MEMORY;
- li->proto = proto;
- conn->proto.generic = li;
- connkeep(conn, "OpenLDAP default");
- /* TODO:
- * - provide option to choose SASL Binds instead of Simple
- */
- return CURLE_OK;
-}
-
-#ifdef USE_SSL
-static Sockbuf_IO ldapsb_tls;
-#endif
-
-static CURLcode ldap_connect(struct connectdata *conn, bool *done)
-{
- ldapconninfo *li = conn->proto.generic;
- struct SessionHandle *data=conn->data;
- int rc, proto = LDAP_VERSION3;
- char hosturl[1024], *ptr;
- (void)done;
-
- strcpy(hosturl, "ldap");
- ptr = hosturl+4;
- if(conn->handler->flags & PROTOPT_SSL)
- *ptr++ = 's';
- snprintf(ptr, sizeof(hosturl)-(ptr-hosturl), "://%s:%d",
- conn->host.name, conn->remote_port);
-
- rc = ldap_init_fd(conn->sock[FIRSTSOCKET], li->proto, hosturl, &li->ld);
- if(rc) {
- failf(data, "LDAP local: Cannot connect to %s, %s",
- hosturl, ldap_err2string(rc));
- return CURLE_COULDNT_CONNECT;
- }
-
- ldap_set_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto);
-
-#ifdef USE_SSL
- if(conn->handler->flags & PROTOPT_SSL) {
- CURLcode res;
- res = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &li->ssldone);
- if(res)
- return res;
- }
-#endif
-
- return CURLE_OK;
-}
-
-static CURLcode ldap_connecting(struct connectdata *conn, bool *done)
-{
- ldapconninfo *li = conn->proto.generic;
- struct SessionHandle *data=conn->data;
- LDAPMessage *result = NULL;
- struct timeval tv = {0,1}, *tvp;
- int rc, err;
- char *info = NULL;
-
-#ifdef USE_SSL
- if(conn->handler->flags & PROTOPT_SSL) {
- /* Is the SSL handshake complete yet? */
- if(!li->ssldone) {
- CURLcode res = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET,
- &li->ssldone);
- if(res || !li->ssldone)
- return res;
- }
- /* Have we installed the libcurl SSL handlers into the sockbuf yet? */
- if(!li->sslinst) {
- Sockbuf *sb;
- ldap_get_option(li->ld, LDAP_OPT_SOCKBUF, &sb);
- ber_sockbuf_add_io(sb, &ldapsb_tls, LBER_SBIOD_LEVEL_TRANSPORT, conn);
- li->sslinst = TRUE;
- li->recv = conn->recv[FIRSTSOCKET];
- li->send = conn->send[FIRSTSOCKET];
- }
- }
-#endif
-
- tvp = &tv;
-
-retry:
- if(!li->didbind) {
- char *binddn;
- struct berval passwd;
-
- if(conn->bits.user_passwd) {
- binddn = conn->user;
- passwd.bv_val = conn->passwd;
- passwd.bv_len = strlen(passwd.bv_val);
- }
- else {
- binddn = NULL;
- passwd.bv_val = NULL;
- passwd.bv_len = 0;
- }
- rc = ldap_sasl_bind(li->ld, binddn, LDAP_SASL_SIMPLE, &passwd,
- NULL, NULL, &li->msgid);
- if(rc)
- return CURLE_LDAP_CANNOT_BIND;
- li->didbind = TRUE;
- if(tvp)
- return CURLE_OK;
- }
-
- rc = ldap_result(li->ld, li->msgid, LDAP_MSG_ONE, tvp, &result);
- if(rc < 0) {
- failf(data, "LDAP local: bind ldap_result %s", ldap_err2string(rc));
- return CURLE_LDAP_CANNOT_BIND;
- }
- if(rc == 0) {
- /* timed out */
- return CURLE_OK;
- }
- rc = ldap_parse_result(li->ld, result, &err, NULL, &info, NULL, NULL, 1);
- if(rc) {
- failf(data, "LDAP local: bind ldap_parse_result %s", ldap_err2string(rc));
- return CURLE_LDAP_CANNOT_BIND;
- }
- /* Try to fallback to LDAPv2? */
- if(err == LDAP_PROTOCOL_ERROR) {
- int proto;
- ldap_get_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto);
- if(proto == LDAP_VERSION3) {
- if(info) {
- ldap_memfree(info);
- info = NULL;
- }
- proto = LDAP_VERSION2;
- ldap_set_option(li->ld, LDAP_OPT_PROTOCOL_VERSION, &proto);
- li->didbind = FALSE;
- goto retry;
- }
- }
-
- if(err) {
- failf(data, "LDAP remote: bind failed %s %s", ldap_err2string(rc),
- info ? info : "");
- if(info)
- ldap_memfree(info);
- return CURLE_LOGIN_DENIED;
- }
-
- if(info)
- ldap_memfree(info);
- conn->recv[FIRSTSOCKET] = ldap_recv;
- *done = TRUE;
- return CURLE_OK;
-}
-
-static CURLcode ldap_disconnect(struct connectdata *conn, bool dead_connection)
-{
- ldapconninfo *li = conn->proto.generic;
- (void) dead_connection;
-
- if(li) {
- if(li->ld) {
- ldap_unbind_ext(li->ld, NULL, NULL);
- li->ld = NULL;
- }
- conn->proto.generic = NULL;
- free(li);
- }
- return CURLE_OK;
-}
-
-static CURLcode ldap_do(struct connectdata *conn, bool *done)
-{
- ldapconninfo *li = conn->proto.generic;
- ldapreqinfo *lr;
- CURLcode status = CURLE_OK;
- int rc = 0;
- LDAPURLDesc *ludp = NULL;
- int msgid;
- struct SessionHandle *data=conn->data;
-
- connkeep(conn, "OpenLDAP do");
-
- infof(data, "LDAP local: %s\n", data->change.url);
-
- rc = ldap_url_parse(data->change.url, &ludp);
- if(rc != LDAP_URL_SUCCESS) {
- const char *msg = "url parsing problem";
- status = CURLE_URL_MALFORMAT;
- if(rc > LDAP_URL_SUCCESS && rc <= LDAP_URL_ERR_BADEXTS) {
- if(rc == LDAP_URL_ERR_MEM)
- status = CURLE_OUT_OF_MEMORY;
- msg = url_errs[rc];
- }
- failf(conn->data, "LDAP local: %s", msg);
- return status;
- }
-
- rc = ldap_search_ext(li->ld, ludp->lud_dn, ludp->lud_scope,
- ludp->lud_filter, ludp->lud_attrs, 0,
- NULL, NULL, NULL, 0, &msgid);
- ldap_free_urldesc(ludp);
- if(rc != LDAP_SUCCESS) {
- failf(data, "LDAP local: ldap_search_ext %s", ldap_err2string(rc));
- return CURLE_LDAP_SEARCH_FAILED;
- }
- lr = calloc(1,sizeof(ldapreqinfo));
- if(!lr)
- return CURLE_OUT_OF_MEMORY;
- lr->msgid = msgid;
- data->req.protop = lr;
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
- *done = TRUE;
- return CURLE_OK;
-}
-
-static CURLcode ldap_done(struct connectdata *conn, CURLcode res,
- bool premature)
-{
- ldapreqinfo *lr = conn->data->req.protop;
- (void)res;
- (void)premature;
-
- if(lr) {
- /* if there was a search in progress, abandon it */
- if(lr->msgid) {
- ldapconninfo *li = conn->proto.generic;
- ldap_abandon_ext(li->ld, lr->msgid, NULL, NULL);
- lr->msgid = 0;
- }
- conn->data->req.protop = NULL;
- free(lr);
- }
- return CURLE_OK;
-}
-
-static ssize_t ldap_recv(struct connectdata *conn, int sockindex, char *buf,
- size_t len, CURLcode *err)
-{
- ldapconninfo *li = conn->proto.generic;
- struct SessionHandle *data=conn->data;
- ldapreqinfo *lr = data->req.protop;
- int rc, ret;
- LDAPMessage *result = NULL;
- LDAPMessage *ent;
- BerElement *ber = NULL;
- struct timeval tv = {0,1};
- (void)len;
- (void)buf;
- (void)sockindex;
-
- rc = ldap_result(li->ld, lr->msgid, LDAP_MSG_RECEIVED, &tv, &result);
- if(rc < 0) {
- failf(data, "LDAP local: search ldap_result %s", ldap_err2string(rc));
- *err = CURLE_RECV_ERROR;
- return -1;
- }
-
- *err = CURLE_AGAIN;
- ret = -1;
-
- /* timed out */
- if(result == NULL)
- return ret;
-
- for(ent = ldap_first_message(li->ld, result); ent;
- ent = ldap_next_message(li->ld, ent)) {
- struct berval bv, *bvals, **bvp = &bvals;
- int binary = 0, msgtype;
-
- msgtype = ldap_msgtype(ent);
- if(msgtype == LDAP_RES_SEARCH_RESULT) {
- int code;
- char *info = NULL;
- rc = ldap_parse_result(li->ld, ent, &code, NULL, &info, NULL, NULL, 0);
- if(rc) {
- failf(data, "LDAP local: search ldap_parse_result %s",
- ldap_err2string(rc));
- *err = CURLE_LDAP_SEARCH_FAILED;
- }
- else if(code && code != LDAP_SIZELIMIT_EXCEEDED) {
- failf(data, "LDAP remote: search failed %s %s", ldap_err2string(rc),
- info ? info : "");
- *err = CURLE_LDAP_SEARCH_FAILED;
- }
- else {
- /* successful */
- if(code == LDAP_SIZELIMIT_EXCEEDED)
- infof(data, "There are more than %d entries\n", lr->nument);
- data->req.size = data->req.bytecount;
- *err = CURLE_OK;
- ret = 0;
- }
- lr->msgid = 0;
- ldap_memfree(info);
- break;
- }
- else if(msgtype != LDAP_RES_SEARCH_ENTRY)
- continue;
-
- lr->nument++;
- rc = ldap_get_dn_ber(li->ld, ent, &ber, &bv);
- if(rc < 0) {
- /* TODO: verify that this is really how this return code should be
- handled */
- *err = CURLE_RECV_ERROR;
- return -1;
- }
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val, bv.bv_len);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 1);
- data->req.bytecount += bv.bv_len + 5;
-
- for(rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, bvp);
- rc == LDAP_SUCCESS;
- rc = ldap_get_attribute_ber(li->ld, ent, ber, &bv, bvp)) {
- int i;
-
- if(bv.bv_val == NULL) break;
-
- if(bv.bv_len > 7 && !strncmp(bv.bv_val + bv.bv_len - 7, ";binary", 7))
- binary = 1;
- else
- binary = 0;
-
- for(i=0; bvals[i].bv_val != NULL; i++) {
- int binval = 0;
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\t", 1);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)bv.bv_val,
- bv.bv_len);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)":", 1);
- data->req.bytecount += bv.bv_len + 2;
-
- if(!binary) {
- /* check for leading or trailing whitespace */
- if(ISSPACE(bvals[i].bv_val[0]) ||
- ISSPACE(bvals[i].bv_val[bvals[i].bv_len-1]))
- binval = 1;
- else {
- /* check for unprintable characters */
- unsigned int j;
- for(j=0; j<bvals[i].bv_len; j++)
- if(!ISPRINT(bvals[i].bv_val[j])) {
- binval = 1;
- break;
- }
- }
- }
- if(binary || binval) {
- char *val_b64 = NULL;
- size_t val_b64_sz = 0;
- /* Binary value, encode to base64. */
- CURLcode error = Curl_base64_encode(data,
- bvals[i].bv_val,
- bvals[i].bv_len,
- &val_b64,
- &val_b64_sz);
- if(error) {
- ber_memfree(bvals);
- ber_free(ber, 0);
- ldap_msgfree(result);
- *err = error;
- return -1;
- }
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)": ", 2);
- data->req.bytecount += 2;
- if(val_b64_sz > 0) {
- Curl_client_write(conn, CLIENTWRITE_BODY, val_b64, val_b64_sz);
- free(val_b64);
- data->req.bytecount += val_b64_sz;
- }
- }
- else {
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)" ", 1);
- Curl_client_write(conn, CLIENTWRITE_BODY, bvals[i].bv_val,
- bvals[i].bv_len);
- data->req.bytecount += bvals[i].bv_len + 1;
- }
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
- data->req.bytecount++;
- }
- ber_memfree(bvals);
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
- data->req.bytecount++;
- }
- Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"\n", 0);
- data->req.bytecount++;
- ber_free(ber, 0);
- }
- ldap_msgfree(result);
- return ret;
-}
-
-#ifdef USE_SSL
-static int
-ldapsb_tls_setup(Sockbuf_IO_Desc *sbiod, void *arg)
-{
- sbiod->sbiod_pvt = arg;
- return 0;
-}
-
-static int
-ldapsb_tls_remove(Sockbuf_IO_Desc *sbiod)
-{
- sbiod->sbiod_pvt = NULL;
- return 0;
-}
-
-/* We don't need to do anything because libcurl does it already */
-static int
-ldapsb_tls_close(Sockbuf_IO_Desc *sbiod)
-{
- (void)sbiod;
- return 0;
-}
-
-static int
-ldapsb_tls_ctrl(Sockbuf_IO_Desc *sbiod, int opt, void *arg)
-{
- (void)arg;
- if(opt == LBER_SB_OPT_DATA_READY) {
- struct connectdata *conn = sbiod->sbiod_pvt;
- return Curl_ssl_data_pending(conn, FIRSTSOCKET);
- }
- return 0;
-}
-
-static ber_slen_t
-ldapsb_tls_read(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
-{
- struct connectdata *conn = sbiod->sbiod_pvt;
- ldapconninfo *li = conn->proto.generic;
- ber_slen_t ret;
- CURLcode err = CURLE_RECV_ERROR;
-
- ret = li->recv(conn, FIRSTSOCKET, buf, len, &err);
- if(ret < 0 && err == CURLE_AGAIN) {
- SET_SOCKERRNO(EWOULDBLOCK);
- }
- return ret;
-}
-
-static ber_slen_t
-ldapsb_tls_write(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len)
-{
- struct connectdata *conn = sbiod->sbiod_pvt;
- ldapconninfo *li = conn->proto.generic;
- ber_slen_t ret;
- CURLcode err = CURLE_SEND_ERROR;
-
- ret = li->send(conn, FIRSTSOCKET, buf, len, &err);
- if(ret < 0 && err == CURLE_AGAIN) {
- SET_SOCKERRNO(EWOULDBLOCK);
- }
- return ret;
-}
-
-static Sockbuf_IO ldapsb_tls =
-{
- ldapsb_tls_setup,
- ldapsb_tls_remove,
- ldapsb_tls_ctrl,
- ldapsb_tls_read,
- ldapsb_tls_write,
- ldapsb_tls_close
-};
-#endif /* USE_SSL */
-
-#endif /* !CURL_DISABLE_LDAP && USE_OPENLDAP */
diff --git a/external/libcurl_android/jni/libcurl/lib/parsedate.c b/external/libcurl_android/jni/libcurl/lib/parsedate.c
deleted file mode 100755
index ecb8dfb4..00000000
--- a/external/libcurl_android/jni/libcurl/lib/parsedate.c
+++ /dev/null
@@ -1,583 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-/*
- A brief summary of the date string formats this parser groks:
-
- RFC 2616 3.3.1
-
- Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
- Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
- Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
-
- we support dates without week day name:
-
- 06 Nov 1994 08:49:37 GMT
- 06-Nov-94 08:49:37 GMT
- Nov 6 08:49:37 1994
-
- without the time zone:
-
- 06 Nov 1994 08:49:37
- 06-Nov-94 08:49:37
-
- weird order:
-
- 1994 Nov 6 08:49:37 (GNU date fails)
- GMT 08:49:37 06-Nov-94 Sunday
- 94 6 Nov 08:49:37 (GNU date fails)
-
- time left out:
-
- 1994 Nov 6
- 06-Nov-94
- Sun Nov 6 94
-
- unusual separators:
-
- 1994.Nov.6
- Sun/Nov/6/94/GMT
-
- commonly used time zone names:
-
- Sun, 06 Nov 1994 08:49:37 CET
- 06 Nov 1994 08:49:37 EST
-
- time zones specified using RFC822 style:
-
- Sun, 12 Sep 2004 15:05:58 -0700
- Sat, 11 Sep 2004 21:32:11 +0200
-
- compact numerical date strings:
-
- 20040912 15:05:58 -0700
- 20040911 +0200
-
-*/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include <curl/curl.h>
-#include "rawstr.h"
-#include "warnless.h"
-#include "parsedate.h"
-
-const char * const Curl_wkday[] =
-{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
-static const char * const weekday[] =
-{ "Monday", "Tuesday", "Wednesday", "Thursday",
- "Friday", "Saturday", "Sunday" };
-const char * const Curl_month[]=
-{ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-
-struct tzinfo {
- char name[5];
- int offset; /* +/- in minutes */
-};
-
-/*
- * parsedate()
- *
- * Returns:
- *
- * PARSEDATE_OK - a fine conversion
- * PARSEDATE_FAIL - failed to convert
- * PARSEDATE_LATER - time overflow at the far end of time_t
- * PARSEDATE_SOONER - time underflow at the low end of time_t
- */
-
-static int parsedate(const char *date, time_t *output);
-
-#define PARSEDATE_OK 0
-#define PARSEDATE_FAIL -1
-#define PARSEDATE_LATER 1
-#define PARSEDATE_SOONER 2
-
-/* Here's a bunch of frequently used time zone names. These were supported
- by the old getdate parser. */
-#define tDAYZONE -60 /* offset for daylight savings time */
-static const struct tzinfo tz[]= {
- {"GMT", 0}, /* Greenwich Mean */
- {"UTC", 0}, /* Universal (Coordinated) */
- {"WET", 0}, /* Western European */
- {"BST", 0 tDAYZONE}, /* British Summer */
- {"WAT", 60}, /* West Africa */
- {"AST", 240}, /* Atlantic Standard */
- {"ADT", 240 tDAYZONE}, /* Atlantic Daylight */
- {"EST", 300}, /* Eastern Standard */
- {"EDT", 300 tDAYZONE}, /* Eastern Daylight */
- {"CST", 360}, /* Central Standard */
- {"CDT", 360 tDAYZONE}, /* Central Daylight */
- {"MST", 420}, /* Mountain Standard */
- {"MDT", 420 tDAYZONE}, /* Mountain Daylight */
- {"PST", 480}, /* Pacific Standard */
- {"PDT", 480 tDAYZONE}, /* Pacific Daylight */
- {"YST", 540}, /* Yukon Standard */
- {"YDT", 540 tDAYZONE}, /* Yukon Daylight */
- {"HST", 600}, /* Hawaii Standard */
- {"HDT", 600 tDAYZONE}, /* Hawaii Daylight */
- {"CAT", 600}, /* Central Alaska */
- {"AHST", 600}, /* Alaska-Hawaii Standard */
- {"NT", 660}, /* Nome */
- {"IDLW", 720}, /* International Date Line West */
- {"CET", -60}, /* Central European */
- {"MET", -60}, /* Middle European */
- {"MEWT", -60}, /* Middle European Winter */
- {"MEST", -60 tDAYZONE}, /* Middle European Summer */
- {"CEST", -60 tDAYZONE}, /* Central European Summer */
- {"MESZ", -60 tDAYZONE}, /* Middle European Summer */
- {"FWT", -60}, /* French Winter */
- {"FST", -60 tDAYZONE}, /* French Summer */
- {"EET", -120}, /* Eastern Europe, USSR Zone 1 */
- {"WAST", -420}, /* West Australian Standard */
- {"WADT", -420 tDAYZONE}, /* West Australian Daylight */
- {"CCT", -480}, /* China Coast, USSR Zone 7 */
- {"JST", -540}, /* Japan Standard, USSR Zone 8 */
- {"EAST", -600}, /* Eastern Australian Standard */
- {"EADT", -600 tDAYZONE}, /* Eastern Australian Daylight */
- {"GST", -600}, /* Guam Standard, USSR Zone 9 */
- {"NZT", -720}, /* New Zealand */
- {"NZST", -720}, /* New Zealand Standard */
- {"NZDT", -720 tDAYZONE}, /* New Zealand Daylight */
- {"IDLE", -720}, /* International Date Line East */
- /* Next up: Military timezone names. RFC822 allowed these, but (as noted in
- RFC 1123) had their signs wrong. Here we use the correct signs to match
- actual military usage.
- */
- {"A", +1 * 60}, /* Alpha */
- {"B", +2 * 60}, /* Bravo */
- {"C", +3 * 60}, /* Charlie */
- {"D", +4 * 60}, /* Delta */
- {"E", +5 * 60}, /* Echo */
- {"F", +6 * 60}, /* Foxtrot */
- {"G", +7 * 60}, /* Golf */
- {"H", +8 * 60}, /* Hotel */
- {"I", +9 * 60}, /* India */
- /* "J", Juliet is not used as a timezone, to indicate the observer's local
- time */
- {"K", +10 * 60}, /* Kilo */
- {"L", +11 * 60}, /* Lima */
- {"M", +12 * 60}, /* Mike */
- {"N", -1 * 60}, /* November */
- {"O", -2 * 60}, /* Oscar */
- {"P", -3 * 60}, /* Papa */
- {"Q", -4 * 60}, /* Quebec */
- {"R", -5 * 60}, /* Romeo */
- {"S", -6 * 60}, /* Sierra */
- {"T", -7 * 60}, /* Tango */
- {"U", -8 * 60}, /* Uniform */
- {"V", -9 * 60}, /* Victor */
- {"W", -10 * 60}, /* Whiskey */
- {"X", -11 * 60}, /* X-ray */
- {"Y", -12 * 60}, /* Yankee */
- {"Z", 0}, /* Zulu, zero meridian, a.k.a. UTC */
-};
-
-/* returns:
- -1 no day
- 0 monday - 6 sunday
-*/
-
-static int checkday(const char *check, size_t len)
-{
- int i;
- const char * const *what;
- bool found= FALSE;
- if(len > 3)
- what = &weekday[0];
- else
- what = &Curl_wkday[0];
- for(i=0; i<7; i++) {
- if(Curl_raw_equal(check, what[0])) {
- found=TRUE;
- break;
- }
- what++;
- }
- return found?i:-1;
-}
-
-static int checkmonth(const char *check)
-{
- int i;
- const char * const *what;
- bool found= FALSE;
-
- what = &Curl_month[0];
- for(i=0; i<12; i++) {
- if(Curl_raw_equal(check, what[0])) {
- found=TRUE;
- break;
- }
- what++;
- }
- return found?i:-1; /* return the offset or -1, no real offset is -1 */
-}
-
-/* return the time zone offset between GMT and the input one, in number
- of seconds or -1 if the timezone wasn't found/legal */
-
-static int checktz(const char *check)
-{
- unsigned int i;
- const struct tzinfo *what;
- bool found= FALSE;
-
- what = tz;
- for(i=0; i< sizeof(tz)/sizeof(tz[0]); i++) {
- if(Curl_raw_equal(check, what->name)) {
- found=TRUE;
- break;
- }
- what++;
- }
- return found?what->offset*60:-1;
-}
-
-static void skip(const char **date)
-{
- /* skip everything that aren't letters or digits */
- while(**date && !ISALNUM(**date))
- (*date)++;
-}
-
-enum assume {
- DATE_MDAY,
- DATE_YEAR,
- DATE_TIME
-};
-
-/* this is a clone of 'struct tm' but with all fields we don't need or use
- cut out */
-struct my_tm {
- int tm_sec;
- int tm_min;
- int tm_hour;
- int tm_mday;
- int tm_mon;
- int tm_year;
-};
-
-/* struct tm to time since epoch in GMT time zone.
- * This is similar to the standard mktime function but for GMT only, and
- * doesn't suffer from the various bugs and portability problems that
- * some systems' implementations have.
- */
-static time_t my_timegm(struct my_tm *tm)
-{
- static const int month_days_cumulative [12] =
- { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
- int month, year, leap_days;
-
- if(tm->tm_year < 70)
- /* we don't support years before 1970 as they will cause this function
- to return a negative value */
- return -1;
-
- year = tm->tm_year + 1900;
- month = tm->tm_mon;
- if(month < 0) {
- year += (11 - month) / 12;
- month = 11 - (11 - month) % 12;
- }
- else if(month >= 12) {
- year -= month / 12;
- month = month % 12;
- }
-
- leap_days = year - (tm->tm_mon <= 1);
- leap_days = ((leap_days / 4) - (leap_days / 100) + (leap_days / 400)
- - (1969 / 4) + (1969 / 100) - (1969 / 400));
-
- return ((((time_t) (year - 1970) * 365
- + leap_days + month_days_cumulative [month] + tm->tm_mday - 1) * 24
- + tm->tm_hour) * 60 + tm->tm_min) * 60 + tm->tm_sec;
-}
-
-/*
- * parsedate()
- *
- * Returns:
- *
- * PARSEDATE_OK - a fine conversion
- * PARSEDATE_FAIL - failed to convert
- * PARSEDATE_LATER - time overflow at the far end of time_t
- * PARSEDATE_SOONER - time underflow at the low end of time_t
- */
-
-static int parsedate(const char *date, time_t *output)
-{
- time_t t = 0;
- int wdaynum=-1; /* day of the week number, 0-6 (mon-sun) */
- int monnum=-1; /* month of the year number, 0-11 */
- int mdaynum=-1; /* day of month, 1 - 31 */
- int hournum=-1;
- int minnum=-1;
- int secnum=-1;
- int yearnum=-1;
- int tzoff=-1;
- struct my_tm tm;
- enum assume dignext = DATE_MDAY;
- const char *indate = date; /* save the original pointer */
- int part = 0; /* max 6 parts */
-
- while(*date && (part < 6)) {
- bool found=FALSE;
-
- skip(&date);
-
- if(ISALPHA(*date)) {
- /* a name coming up */
- char buf[32]="";
- size_t len;
- if(sscanf(date, "%31[ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz]", buf))
- len = strlen(buf);
- else
- len = 0;
-
- if(wdaynum == -1) {
- wdaynum = checkday(buf, len);
- if(wdaynum != -1)
- found = TRUE;
- }
- if(!found && (monnum == -1)) {
- monnum = checkmonth(buf);
- if(monnum != -1)
- found = TRUE;
- }
-
- if(!found && (tzoff == -1)) {
- /* this just must be a time zone string */
- tzoff = checktz(buf);
- if(tzoff != -1)
- found = TRUE;
- }
-
- if(!found)
- return PARSEDATE_FAIL; /* bad string */
-
- date += len;
- }
- else if(ISDIGIT(*date)) {
- /* a digit */
- int val;
- char *end;
- if((secnum == -1) &&
- (3 == sscanf(date, "%02d:%02d:%02d", &hournum, &minnum, &secnum))) {
- /* time stamp! */
- date += 8;
- }
- else if((secnum == -1) &&
- (2 == sscanf(date, "%02d:%02d", &hournum, &minnum))) {
- /* time stamp without seconds */
- date += 5;
- secnum = 0;
- }
- else {
- long lval;
- int error;
- int old_errno;
-
- old_errno = ERRNO;
- SET_ERRNO(0);
- lval = strtol(date, &end, 10);
- error = ERRNO;
- if(error != old_errno)
- SET_ERRNO(old_errno);
-
- if(error)
- return PARSEDATE_FAIL;
-
-#if LONG_MAX != INT_MAX
- if((lval > (long)INT_MAX) || (lval < (long)INT_MIN))
- return PARSEDATE_FAIL;
-#endif
-
- val = curlx_sltosi(lval);
-
- if((tzoff == -1) &&
- ((end - date) == 4) &&
- (val <= 1400) &&
- (indate< date) &&
- ((date[-1] == '+' || date[-1] == '-'))) {
- /* four digits and a value less than or equal to 1400 (to take into
- account all sorts of funny time zone diffs) and it is preceded
- with a plus or minus. This is a time zone indication. 1400 is
- picked since +1300 is frequently used and +1400 is mentioned as
- an edge number in the document "ISO C 200X Proposal: Timezone
- Functions" at http://david.tribble.com/text/c0xtimezone.html If
- anyone has a more authoritative source for the exact maximum time
- zone offsets, please speak up! */
- found = TRUE;
- tzoff = (val/100 * 60 + val%100)*60;
-
- /* the + and - prefix indicates the local time compared to GMT,
- this we need ther reversed math to get what we want */
- tzoff = date[-1]=='+'?-tzoff:tzoff;
- }
-
- if(((end - date) == 8) &&
- (yearnum == -1) &&
- (monnum == -1) &&
- (mdaynum == -1)) {
- /* 8 digits, no year, month or day yet. This is YYYYMMDD */
- found = TRUE;
- yearnum = val/10000;
- monnum = (val%10000)/100-1; /* month is 0 - 11 */
- mdaynum = val%100;
- }
-
- if(!found && (dignext == DATE_MDAY) && (mdaynum == -1)) {
- if((val > 0) && (val<32)) {
- mdaynum = val;
- found = TRUE;
- }
- dignext = DATE_YEAR;
- }
-
- if(!found && (dignext == DATE_YEAR) && (yearnum == -1)) {
- yearnum = val;
- found = TRUE;
- if(yearnum < 1900) {
- if(yearnum > 70)
- yearnum += 1900;
- else
- yearnum += 2000;
- }
- if(mdaynum == -1)
- dignext = DATE_MDAY;
- }
-
- if(!found)
- return PARSEDATE_FAIL;
-
- date = end;
- }
- }
-
- part++;
- }
-
- if(-1 == secnum)
- secnum = minnum = hournum = 0; /* no time, make it zero */
-
- if((-1 == mdaynum) ||
- (-1 == monnum) ||
- (-1 == yearnum))
- /* lacks vital info, fail */
- return PARSEDATE_FAIL;
-
-#if SIZEOF_TIME_T < 5
- /* 32 bit time_t can only hold dates to the beginning of 2038 */
- if(yearnum > 2037) {
- *output = 0x7fffffff;
- return PARSEDATE_LATER;
- }
-#endif
-
- if(yearnum < 1970) {
- *output = 0;
- return PARSEDATE_SOONER;
- }
-
- if((mdaynum > 31) || (monnum > 11) ||
- (hournum > 23) || (minnum > 59) || (secnum > 60))
- return PARSEDATE_FAIL; /* clearly an illegal date */
-
- tm.tm_sec = secnum;
- tm.tm_min = minnum;
- tm.tm_hour = hournum;
- tm.tm_mday = mdaynum;
- tm.tm_mon = monnum;
- tm.tm_year = yearnum - 1900;
-
- /* my_timegm() returns a time_t. time_t is often 32 bits, even on many
- architectures that feature 64 bit 'long'.
-
- Some systems have 64 bit time_t and deal with years beyond 2038. However,
- even on some of the systems with 64 bit time_t mktime() returns -1 for
- dates beyond 03:14:07 UTC, January 19, 2038. (Such as AIX 5100-06)
- */
- t = my_timegm(&tm);
-
- /* time zone adjust (cast t to int to compare to negative one) */
- if(-1 != (int)t) {
-
- /* Add the time zone diff between local time zone and GMT. */
- long delta = (long)(tzoff!=-1?tzoff:0);
-
- if((delta>0) && (t > LONG_MAX - delta)) {
- *output = 0x7fffffff;
- return PARSEDATE_LATER; /* time_t overflow */
- }
-
- t += delta;
- }
-
- *output = t;
-
- return PARSEDATE_OK;
-}
-
-time_t curl_getdate(const char *p, const time_t *now)
-{
- time_t parsed;
- int rc = parsedate(p, &parsed);
- (void)now; /* legacy argument from the past that we ignore */
-
- switch(rc) {
- case PARSEDATE_OK:
- case PARSEDATE_LATER:
- case PARSEDATE_SOONER:
- return parsed;
- }
- /* everything else is fail */
- return -1;
-}
-
-/*
- * Curl_gmtime() is a gmtime() replacement for portability. Do not use the
- * gmtime_r() or gmtime() functions anywhere else but here.
- *
- */
-
-CURLcode Curl_gmtime(time_t intime, struct tm *store)
-{
- const struct tm *tm;
-#ifdef HAVE_GMTIME_R
- /* thread-safe version */
- tm = (struct tm *)gmtime_r(&intime, store);
-#else
- tm = gmtime(&intime);
- if(tm)
- *store = *tm; /* copy the pointed struct to the local copy */
-#endif
-
- if(!tm)
- return CURLE_BAD_FUNCTION_ARGUMENT;
- return CURLE_OK;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/parsedate.h b/external/libcurl_android/jni/libcurl/lib/parsedate.h
deleted file mode 100755
index ade0f4f6..00000000
--- a/external/libcurl_android/jni/libcurl/lib/parsedate.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef HEADER_CURL_PARSEDATE_H
-#define HEADER_CURL_PARSEDATE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-extern const char * const Curl_wkday[7];
-extern const char * const Curl_month[12];
-
-CURLcode Curl_gmtime(time_t intime, struct tm *store);
-
-#endif /* HEADER_CURL_PARSEDATE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/pingpong.c b/external/libcurl_android/jni/libcurl/lib/pingpong.c
deleted file mode 100755
index c7e89d0a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/pingpong.c
+++ /dev/null
@@ -1,517 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * 'pingpong' is for generic back-and-forth support functions used by FTP,
- * IMAP, POP3, SMTP and whatever more that likes them.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "urldata.h"
-#include "sendf.h"
-#include "select.h"
-#include "progress.h"
-#include "speedcheck.h"
-#include "pingpong.h"
-#include "multiif.h"
-#include "non-ascii.h"
-#include "vtls/vtls.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifdef USE_PINGPONG
-
-/* Returns timeout in ms. 0 or negative number means the timeout has already
- triggered */
-long Curl_pp_state_timeout(struct pingpong *pp)
-{
- struct connectdata *conn = pp->conn;
- struct SessionHandle *data=conn->data;
- long timeout_ms; /* in milliseconds */
- long timeout2_ms; /* in milliseconds */
- long response_time= (data->set.server_response_timeout)?
- data->set.server_response_timeout: pp->response_time;
-
- /* if CURLOPT_SERVER_RESPONSE_TIMEOUT is set, use that to determine
- remaining time, or use pp->response because SERVER_RESPONSE_TIMEOUT is
- supposed to govern the response for any given server response, not for
- the time from connect to the given server response. */
-
- /* Without a requested timeout, we only wait 'response_time' seconds for the
- full response to arrive before we bail out */
- timeout_ms = response_time -
- Curl_tvdiff(Curl_tvnow(), pp->response); /* spent time */
-
- if(data->set.timeout) {
- /* if timeout is requested, find out how much remaining time we have */
- timeout2_ms = data->set.timeout - /* timeout time */
- Curl_tvdiff(Curl_tvnow(), conn->now); /* spent time */
-
- /* pick the lowest number */
- timeout_ms = CURLMIN(timeout_ms, timeout2_ms);
- }
-
- return timeout_ms;
-}
-
-/*
- * Curl_pp_statemach()
- */
-CURLcode Curl_pp_statemach(struct pingpong *pp, bool block)
-{
- struct connectdata *conn = pp->conn;
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
- int rc;
- long interval_ms;
- long timeout_ms = Curl_pp_state_timeout(pp);
- struct SessionHandle *data=conn->data;
- CURLcode result = CURLE_OK;
-
- if(timeout_ms <=0 ) {
- failf(data, "server response timeout");
- return CURLE_OPERATION_TIMEDOUT; /* already too little time */
- }
-
- if(block) {
- interval_ms = 1000; /* use 1 second timeout intervals */
- if(timeout_ms < interval_ms)
- interval_ms = timeout_ms;
- }
- else
- interval_ms = 0; /* immediate */
-
- if(Curl_pp_moredata(pp))
- /* We are receiving and there is data in the cache so just read it */
- rc = 1;
- else if(!pp->sendleft && Curl_ssl_data_pending(conn, FIRSTSOCKET))
- /* We are receiving and there is data ready in the SSL library */
- rc = 1;
- else
- rc = Curl_socket_ready(pp->sendleft?CURL_SOCKET_BAD:sock, /* reading */
- pp->sendleft?sock:CURL_SOCKET_BAD, /* writing */
- interval_ms);
-
- if(block) {
- /* if we didn't wait, we don't have to spend time on this now */
- if(Curl_pgrsUpdate(conn))
- result = CURLE_ABORTED_BY_CALLBACK;
- else
- result = Curl_speedcheck(data, Curl_tvnow());
-
- if(result)
- return result;
- }
-
- if(rc == -1) {
- failf(data, "select/poll error");
- result = CURLE_OUT_OF_MEMORY;
- }
- else if(rc)
- result = pp->statemach_act(conn);
-
- return result;
-}
-
-/* initialize stuff to prepare for reading a fresh new response */
-void Curl_pp_init(struct pingpong *pp)
-{
- struct connectdata *conn = pp->conn;
- pp->nread_resp = 0;
- pp->linestart_resp = conn->data->state.buffer;
- pp->pending_resp = TRUE;
- pp->response = Curl_tvnow(); /* start response time-out now! */
-}
-
-
-
-/***********************************************************************
- *
- * Curl_pp_vsendf()
- *
- * Send the formated string as a command to a pingpong server. Note that
- * the string should not have any CRLF appended, as this function will
- * append the necessary things itself.
- *
- * made to never block
- */
-CURLcode Curl_pp_vsendf(struct pingpong *pp,
- const char *fmt,
- va_list args)
-{
- ssize_t bytes_written;
- size_t write_len;
- char *fmt_crlf;
- char *s;
- CURLcode error;
- struct connectdata *conn = pp->conn;
- struct SessionHandle *data = conn->data;
-
-#ifdef HAVE_GSSAPI
- enum protection_level data_sec = conn->data_prot;
-#endif
-
- DEBUGASSERT(pp->sendleft == 0);
- DEBUGASSERT(pp->sendsize == 0);
- DEBUGASSERT(pp->sendthis == NULL);
-
- fmt_crlf = aprintf("%s\r\n", fmt); /* append a trailing CRLF */
- if(!fmt_crlf)
- return CURLE_OUT_OF_MEMORY;
-
- s = vaprintf(fmt_crlf, args); /* trailing CRLF appended */
- free(fmt_crlf);
- if(!s)
- return CURLE_OUT_OF_MEMORY;
-
- bytes_written = 0;
- write_len = strlen(s);
-
- Curl_pp_init(pp);
-
- error = Curl_convert_to_network(data, s, write_len);
- /* Curl_convert_to_network calls failf if unsuccessful */
- if(error) {
- free(s);
- return error;
- }
-
-#ifdef HAVE_GSSAPI
- conn->data_prot = PROT_CMD;
-#endif
- error = Curl_write(conn, conn->sock[FIRSTSOCKET], s, write_len,
- &bytes_written);
-#ifdef HAVE_GSSAPI
- DEBUGASSERT(data_sec > PROT_NONE && data_sec < PROT_LAST);
- conn->data_prot = data_sec;
-#endif
-
- if(error) {
- free(s);
- return error;
- }
-
- if(conn->data->set.verbose)
- Curl_debug(conn->data, CURLINFO_HEADER_OUT,
- s, (size_t)bytes_written, conn);
-
- if(bytes_written != (ssize_t)write_len) {
- /* the whole chunk was not sent, keep it around and adjust sizes */
- pp->sendthis = s;
- pp->sendsize = write_len;
- pp->sendleft = write_len - bytes_written;
- }
- else {
- free(s);
- pp->sendthis = NULL;
- pp->sendleft = pp->sendsize = 0;
- pp->response = Curl_tvnow();
- }
-
- return CURLE_OK;
-}
-
-
-/***********************************************************************
- *
- * Curl_pp_sendf()
- *
- * Send the formated string as a command to a pingpong server. Note that
- * the string should not have any CRLF appended, as this function will
- * append the necessary things itself.
- *
- * made to never block
- */
-CURLcode Curl_pp_sendf(struct pingpong *pp,
- const char *fmt, ...)
-{
- CURLcode res;
- va_list ap;
- va_start(ap, fmt);
-
- res = Curl_pp_vsendf(pp, fmt, ap);
-
- va_end(ap);
-
- return res;
-}
-
-/*
- * Curl_pp_readresp()
- *
- * Reads a piece of a server response.
- */
-CURLcode Curl_pp_readresp(curl_socket_t sockfd,
- struct pingpong *pp,
- int *code, /* return the server code if done */
- size_t *size) /* size of the response */
-{
- ssize_t perline; /* count bytes per line */
- bool keepon=TRUE;
- ssize_t gotbytes;
- char *ptr;
- struct connectdata *conn = pp->conn;
- struct SessionHandle *data = conn->data;
- char * const buf = data->state.buffer;
- CURLcode result = CURLE_OK;
-
- *code = 0; /* 0 for errors or not done */
- *size = 0;
-
- ptr=buf + pp->nread_resp;
-
- /* number of bytes in the current line, so far */
- perline = (ssize_t)(ptr-pp->linestart_resp);
-
- keepon=TRUE;
-
- while((pp->nread_resp<BUFSIZE) && (keepon && !result)) {
-
- if(pp->cache) {
- /* we had data in the "cache", copy that instead of doing an actual
- * read
- *
- * pp->cache_size is cast to ssize_t here. This should be safe, because
- * it would have been populated with something of size int to begin
- * with, even though its datatype may be larger than an int.
- */
- DEBUGASSERT((ptr+pp->cache_size) <= (buf+BUFSIZE+1));
- memcpy(ptr, pp->cache, pp->cache_size);
- gotbytes = (ssize_t)pp->cache_size;
- free(pp->cache); /* free the cache */
- pp->cache = NULL; /* clear the pointer */
- pp->cache_size = 0; /* zero the size just in case */
- }
- else {
- int res;
-#ifdef HAVE_GSSAPI
- enum protection_level prot = conn->data_prot;
- conn->data_prot = PROT_CLEAR;
-#endif
- DEBUGASSERT((ptr+BUFSIZE-pp->nread_resp) <= (buf+BUFSIZE+1));
- res = Curl_read(conn, sockfd, ptr, BUFSIZE-pp->nread_resp,
- &gotbytes);
-#ifdef HAVE_GSSAPI
- DEBUGASSERT(prot > PROT_NONE && prot < PROT_LAST);
- conn->data_prot = prot;
-#endif
- if(res == CURLE_AGAIN)
- return CURLE_OK; /* return */
-
- if((res == CURLE_OK) && (gotbytes > 0))
- /* convert from the network encoding */
- res = Curl_convert_from_network(data, ptr, gotbytes);
- /* Curl_convert_from_network calls failf if unsuccessful */
-
- if(CURLE_OK != res) {
- result = (CURLcode)res; /* Set outer result variable to this error. */
- keepon = FALSE;
- }
- }
-
- if(!keepon)
- ;
- else if(gotbytes <= 0) {
- keepon = FALSE;
- result = CURLE_RECV_ERROR;
- failf(data, "response reading failed");
- }
- else {
- /* we got a whole chunk of data, which can be anything from one
- * byte to a set of lines and possible just a piece of the last
- * line */
- ssize_t i;
- ssize_t clipamount = 0;
- bool restart = FALSE;
-
- data->req.headerbytecount += (long)gotbytes;
-
- pp->nread_resp += gotbytes;
- for(i = 0; i < gotbytes; ptr++, i++) {
- perline++;
- if(*ptr=='\n') {
- /* a newline is CRLF in pp-talk, so the CR is ignored as
- the line isn't really terminated until the LF comes */
-
- /* output debug output if that is requested */
-#ifdef HAVE_GSSAPI
- if(!conn->sec_complete)
-#endif
- if(data->set.verbose)
- Curl_debug(data, CURLINFO_HEADER_IN,
- pp->linestart_resp, (size_t)perline, conn);
-
- /*
- * We pass all response-lines to the callback function registered
- * for "headers". The response lines can be seen as a kind of
- * headers.
- */
- result = Curl_client_write(conn, CLIENTWRITE_HEADER,
- pp->linestart_resp, perline);
- if(result)
- return result;
-
- if(pp->endofresp(conn, pp->linestart_resp, perline, code)) {
- /* This is the end of the last line, copy the last line to the
- start of the buffer and zero terminate, for old times sake */
- size_t n = ptr - pp->linestart_resp;
- memmove(buf, pp->linestart_resp, n);
- buf[n]=0; /* zero terminate */
- keepon=FALSE;
- pp->linestart_resp = ptr+1; /* advance pointer */
- i++; /* skip this before getting out */
-
- *size = pp->nread_resp; /* size of the response */
- pp->nread_resp = 0; /* restart */
- break;
- }
- perline=0; /* line starts over here */
- pp->linestart_resp = ptr+1;
- }
- }
-
- if(!keepon && (i != gotbytes)) {
- /* We found the end of the response lines, but we didn't parse the
- full chunk of data we have read from the server. We therefore need
- to store the rest of the data to be checked on the next invoke as
- it may actually contain another end of response already! */
- clipamount = gotbytes - i;
- restart = TRUE;
- DEBUGF(infof(data, "Curl_pp_readresp_ %d bytes of trailing "
- "server response left\n",
- (int)clipamount));
- }
- else if(keepon) {
-
- if((perline == gotbytes) && (gotbytes > BUFSIZE/2)) {
- /* We got an excessive line without newlines and we need to deal
- with it. We keep the first bytes of the line then we throw
- away the rest. */
- infof(data, "Excessive server response line length received, "
- "%zd bytes. Stripping\n", gotbytes);
- restart = TRUE;
-
- /* we keep 40 bytes since all our pingpong protocols are only
- interested in the first piece */
- clipamount = 40;
- }
- else if(pp->nread_resp > BUFSIZE/2) {
- /* We got a large chunk of data and there's potentially still
- trailing data to take care of, so we put any such part in the
- "cache", clear the buffer to make space and restart. */
- clipamount = perline;
- restart = TRUE;
- }
- }
- else if(i == gotbytes)
- restart = TRUE;
-
- if(clipamount) {
- pp->cache_size = clipamount;
- pp->cache = malloc(pp->cache_size);
- if(pp->cache)
- memcpy(pp->cache, pp->linestart_resp, pp->cache_size);
- else
- return CURLE_OUT_OF_MEMORY;
- }
- if(restart) {
- /* now reset a few variables to start over nicely from the start of
- the big buffer */
- pp->nread_resp = 0; /* start over from scratch in the buffer */
- ptr = pp->linestart_resp = buf;
- perline = 0;
- }
-
- } /* there was data */
-
- } /* while there's buffer left and loop is requested */
-
- pp->pending_resp = FALSE;
-
- return result;
-}
-
-int Curl_pp_getsock(struct pingpong *pp,
- curl_socket_t *socks,
- int numsocks)
-{
- struct connectdata *conn = pp->conn;
-
- if(!numsocks)
- return GETSOCK_BLANK;
-
- socks[0] = conn->sock[FIRSTSOCKET];
-
- if(pp->sendleft) {
- /* write mode */
- return GETSOCK_WRITESOCK(0);
- }
-
- /* read mode */
- return GETSOCK_READSOCK(0);
-}
-
-CURLcode Curl_pp_flushsend(struct pingpong *pp)
-{
- /* we have a piece of a command still left to send */
- struct connectdata *conn = pp->conn;
- ssize_t written;
- CURLcode result = CURLE_OK;
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
-
- result = Curl_write(conn, sock, pp->sendthis + pp->sendsize -
- pp->sendleft, pp->sendleft, &written);
- if(result)
- return result;
-
- if(written != (ssize_t)pp->sendleft) {
- /* only a fraction was sent */
- pp->sendleft -= written;
- }
- else {
- free(pp->sendthis);
- pp->sendthis=NULL;
- pp->sendleft = pp->sendsize = 0;
- pp->response = Curl_tvnow();
- }
- return CURLE_OK;
-}
-
-CURLcode Curl_pp_disconnect(struct pingpong *pp)
-{
- if(pp->cache) {
- free(pp->cache);
- pp->cache = NULL;
- }
- return CURLE_OK;
-}
-
-bool Curl_pp_moredata(struct pingpong *pp)
-{
- return (!pp->sendleft && pp->cache && pp->nread_resp < pp->cache_size) ?
- TRUE : FALSE;
-}
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/pingpong.h b/external/libcurl_android/jni/libcurl/lib/pingpong.h
deleted file mode 100755
index b925ab98..00000000
--- a/external/libcurl_android/jni/libcurl/lib/pingpong.h
+++ /dev/null
@@ -1,150 +0,0 @@
-#ifndef HEADER_CURL_PINGPONG_H
-#define HEADER_CURL_PINGPONG_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_FTP) || \
- !defined(CURL_DISABLE_POP3) || !defined(CURL_DISABLE_SMTP)
-#define USE_PINGPONG
-#endif
-
-/* forward-declaration, this is defined in urldata.h */
-struct connectdata;
-
-typedef enum {
- FTPTRANSFER_BODY, /* yes do transfer a body */
- FTPTRANSFER_INFO, /* do still go through to get info/headers */
- FTPTRANSFER_NONE, /* don't get anything and don't get info */
- FTPTRANSFER_LAST /* end of list marker, never used */
-} curl_pp_transfer;
-
-/*
- * 'pingpong' is the generic struct used for protocols doing server<->client
- * conversations in a back-and-forth style such as FTP, IMAP, POP3, SMTP etc.
- *
- * It holds response cache and non-blocking sending data.
- */
-struct pingpong {
- char *cache; /* data cache between getresponse()-calls */
- size_t cache_size; /* size of cache in bytes */
- size_t nread_resp; /* number of bytes currently read of a server response */
- char *linestart_resp; /* line start pointer for the server response
- reader function */
- bool pending_resp; /* set TRUE when a server response is pending or in
- progress, and is cleared once the last response is
- read */
- char *sendthis; /* allocated pointer to a buffer that is to be sent to the
- server */
- size_t sendleft; /* number of bytes left to send from the sendthis buffer */
- size_t sendsize; /* total size of the sendthis buffer */
- struct timeval response; /* set to Curl_tvnow() when a command has been sent
- off, used to time-out response reading */
- long response_time; /* When no timeout is given, this is the amount of
- milliseconds we await for a server response. */
-
- struct connectdata *conn; /* points to the connectdata struct that this
- belongs to */
-
- /* Function pointers the protocols MUST implement and provide for the
- pingpong layer to function */
-
- CURLcode (*statemach_act)(struct connectdata *conn);
-
- bool (*endofresp)(struct connectdata *conn, char *ptr, size_t len,
- int *code);
-};
-
-/*
- * Curl_pp_statemach()
- *
- * called repeatedly until done. Set 'wait' to make it wait a while on the
- * socket if there's no traffic.
- */
-CURLcode Curl_pp_statemach(struct pingpong *pp, bool block);
-
-/* initialize stuff to prepare for reading a fresh new response */
-void Curl_pp_init(struct pingpong *pp);
-
-/* Returns timeout in ms. 0 or negative number means the timeout has already
- triggered */
-long Curl_pp_state_timeout(struct pingpong *pp);
-
-
-/***********************************************************************
- *
- * Curl_pp_sendf()
- *
- * Send the formated string as a command to a pingpong server. Note that
- * the string should not have any CRLF appended, as this function will
- * append the necessary things itself.
- *
- * made to never block
- */
-CURLcode Curl_pp_sendf(struct pingpong *pp,
- const char *fmt, ...);
-
-/***********************************************************************
- *
- * Curl_pp_vsendf()
- *
- * Send the formated string as a command to a pingpong server. Note that
- * the string should not have any CRLF appended, as this function will
- * append the necessary things itself.
- *
- * made to never block
- */
-CURLcode Curl_pp_vsendf(struct pingpong *pp,
- const char *fmt,
- va_list args);
-
-/*
- * Curl_pp_readresp()
- *
- * Reads a piece of a server response.
- */
-CURLcode Curl_pp_readresp(curl_socket_t sockfd,
- struct pingpong *pp,
- int *code, /* return the server code if done */
- size_t *size); /* size of the response */
-
-
-CURLcode Curl_pp_flushsend(struct pingpong *pp);
-
-/* call this when a pingpong connection is disconnected */
-CURLcode Curl_pp_disconnect(struct pingpong *pp);
-
-int Curl_pp_getsock(struct pingpong *pp, curl_socket_t *socks,
- int numsocks);
-
-
-/***********************************************************************
- *
- * Curl_pp_moredata()
- *
- * Returns whether there are still more data in the cache and so a call
- * to Curl_pp_readresp() will not block.
- */
-bool Curl_pp_moredata(struct pingpong *pp);
-
-#endif /* HEADER_CURL_PINGPONG_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/pipeline.c b/external/libcurl_android/jni/libcurl/lib/pipeline.c
deleted file mode 100755
index 8d2544b8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/pipeline.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2013, Linus Nielsen Feltzing, <linus@haxx.se>
- * Copyright (C) 2013-2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "url.h"
-#include "progress.h"
-#include "multiif.h"
-#include "pipeline.h"
-#include "sendf.h"
-#include "rawstr.h"
-#include "bundles.h"
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-struct site_blacklist_entry {
- char *hostname;
- unsigned short port;
-};
-
-static void site_blacklist_llist_dtor(void *user, void *element)
-{
- struct site_blacklist_entry *entry = element;
- (void)user;
-
- Curl_safefree(entry->hostname);
- Curl_safefree(entry);
-}
-
-static void server_blacklist_llist_dtor(void *user, void *element)
-{
- char *server_name = element;
- (void)user;
-
- Curl_safefree(server_name);
-}
-
-bool Curl_pipeline_penalized(struct SessionHandle *data,
- struct connectdata *conn)
-{
- if(data) {
- bool penalized = FALSE;
- curl_off_t penalty_size =
- Curl_multi_content_length_penalty_size(data->multi);
- curl_off_t chunk_penalty_size =
- Curl_multi_chunk_length_penalty_size(data->multi);
- curl_off_t recv_size = -2; /* Make it easy to spot in the log */
-
- /* Find the head of the recv pipe, if any */
- if(conn->recv_pipe && conn->recv_pipe->head) {
- struct SessionHandle *recv_handle = conn->recv_pipe->head->ptr;
-
- recv_size = recv_handle->req.size;
-
- if(penalty_size > 0 && recv_size > penalty_size)
- penalized = TRUE;
- }
-
- if(chunk_penalty_size > 0 &&
- (curl_off_t)conn->chunk.datasize > chunk_penalty_size)
- penalized = TRUE;
-
- infof(data, "Conn: %ld (%p) Receive pipe weight: (%"
- CURL_FORMAT_CURL_OFF_T "/%zu), penalized: %s\n",
- conn->connection_id, (void *)conn, recv_size,
- conn->chunk.datasize, penalized?"TRUE":"FALSE");
- return penalized;
- }
- return FALSE;
-}
-
-CURLcode Curl_add_handle_to_pipeline(struct SessionHandle *handle,
- struct connectdata *conn)
-{
- struct curl_llist_element *sendhead = conn->send_pipe->head;
- struct curl_llist *pipeline;
- CURLcode rc;
-
- pipeline = conn->send_pipe;
-
- rc = Curl_addHandleToPipeline(handle, pipeline);
-
- if(pipeline == conn->send_pipe && sendhead != conn->send_pipe->head) {
- /* this is a new one as head, expire it */
- conn->writechannel_inuse = FALSE; /* not in use yet */
- Curl_expire(conn->send_pipe->head->ptr, 1);
- }
-
-#if 0 /* enable for pipeline debugging */
- print_pipeline(conn);
-#endif
-
- return rc;
-}
-
-/* Move this transfer from the sending list to the receiving list.
-
- Pay special attention to the new sending list "leader" as it needs to get
- checked to update what sockets it acts on.
-
-*/
-void Curl_move_handle_from_send_to_recv_pipe(struct SessionHandle *handle,
- struct connectdata *conn)
-{
- struct curl_llist_element *curr;
-
- curr = conn->send_pipe->head;
- while(curr) {
- if(curr->ptr == handle) {
- Curl_llist_move(conn->send_pipe, curr,
- conn->recv_pipe, conn->recv_pipe->tail);
-
- if(conn->send_pipe->head) {
- /* Since there's a new easy handle at the start of the send pipeline,
- set its timeout value to 1ms to make it trigger instantly */
- conn->writechannel_inuse = FALSE; /* not used now */
-#ifdef DEBUGBUILD
- infof(conn->data, "%p is at send pipe head B!\n",
- (void *)conn->send_pipe->head->ptr);
-#endif
- Curl_expire(conn->send_pipe->head->ptr, 1);
- }
-
- /* The receiver's list is not really interesting here since either this
- handle is now first in the list and we'll deal with it soon, or
- another handle is already first and thus is already taken care of */
-
- break; /* we're done! */
- }
- curr = curr->next;
- }
-}
-
-bool Curl_pipeline_site_blacklisted(struct SessionHandle *handle,
- struct connectdata *conn)
-{
- if(handle->multi) {
- struct curl_llist *blacklist =
- Curl_multi_pipelining_site_bl(handle->multi);
-
- if(blacklist) {
- struct curl_llist_element *curr;
-
- curr = blacklist->head;
- while(curr) {
- struct site_blacklist_entry *site;
-
- site = curr->ptr;
- if(Curl_raw_equal(site->hostname, conn->host.name) &&
- site->port == conn->remote_port) {
- infof(handle, "Site %s:%d is pipeline blacklisted\n",
- conn->host.name, conn->remote_port);
- return TRUE;
- }
- curr = curr->next;
- }
- }
- }
- return FALSE;
-}
-
-CURLMcode Curl_pipeline_set_site_blacklist(char **sites,
- struct curl_llist **list_ptr)
-{
- struct curl_llist *old_list = *list_ptr;
- struct curl_llist *new_list = NULL;
-
- if(sites) {
- new_list = Curl_llist_alloc((curl_llist_dtor) site_blacklist_llist_dtor);
- if(!new_list)
- return CURLM_OUT_OF_MEMORY;
-
- /* Parse the URLs and populate the list */
- while(*sites) {
- char *hostname;
- char *port;
- struct site_blacklist_entry *entry;
-
- hostname = strdup(*sites);
- if(!hostname) {
- Curl_llist_destroy(new_list, NULL);
- return CURLM_OUT_OF_MEMORY;
- }
-
- entry = malloc(sizeof(struct site_blacklist_entry));
- if(!entry) {
- free(hostname);
- Curl_llist_destroy(new_list, NULL);
- return CURLM_OUT_OF_MEMORY;
- }
-
- port = strchr(hostname, ':');
- if(port) {
- *port = '\0';
- port++;
- entry->port = (unsigned short)strtol(port, NULL, 10);
- }
- else {
- /* Default port number for HTTP */
- entry->port = 80;
- }
-
- entry->hostname = hostname;
-
- if(!Curl_llist_insert_next(new_list, new_list->tail, entry)) {
- site_blacklist_llist_dtor(NULL, entry);
- Curl_llist_destroy(new_list, NULL);
- return CURLM_OUT_OF_MEMORY;
- }
-
- sites++;
- }
- }
-
- /* Free the old list */
- if(old_list) {
- Curl_llist_destroy(old_list, NULL);
- }
-
- /* This might be NULL if sites == NULL, i.e the blacklist is cleared */
- *list_ptr = new_list;
-
- return CURLM_OK;
-}
-
-bool Curl_pipeline_server_blacklisted(struct SessionHandle *handle,
- char *server_name)
-{
- if(handle->multi) {
- struct curl_llist *blacklist =
- Curl_multi_pipelining_server_bl(handle->multi);
-
- if(blacklist) {
- struct curl_llist_element *curr;
-
- curr = blacklist->head;
- while(curr) {
- char *bl_server_name;
-
- bl_server_name = curr->ptr;
- if(Curl_raw_nequal(bl_server_name, server_name,
- strlen(bl_server_name))) {
- infof(handle, "Server %s is blacklisted\n", server_name);
- return TRUE;
- }
- curr = curr->next;
- }
- }
-
- infof(handle, "Server %s is not blacklisted\n", server_name);
- }
- return FALSE;
-}
-
-CURLMcode Curl_pipeline_set_server_blacklist(char **servers,
- struct curl_llist **list_ptr)
-{
- struct curl_llist *old_list = *list_ptr;
- struct curl_llist *new_list = NULL;
-
- if(servers) {
- new_list = Curl_llist_alloc((curl_llist_dtor) server_blacklist_llist_dtor);
- if(!new_list)
- return CURLM_OUT_OF_MEMORY;
-
- /* Parse the URLs and populate the list */
- while(*servers) {
- char *server_name;
-
- server_name = strdup(*servers);
- if(!server_name)
- return CURLM_OUT_OF_MEMORY;
-
- if(!Curl_llist_insert_next(new_list, new_list->tail, server_name))
- return CURLM_OUT_OF_MEMORY;
-
- servers++;
- }
- }
-
- /* Free the old list */
- if(old_list) {
- Curl_llist_destroy(old_list, NULL);
- }
-
- /* This might be NULL if sites == NULL, i.e the blacklist is cleared */
- *list_ptr = new_list;
-
- return CURLM_OK;
-}
-
-#if 0
-void print_pipeline(struct connectdata *conn)
-{
- struct curl_llist_element *curr;
- struct connectbundle *cb_ptr;
- struct SessionHandle *data = conn->data;
-
- cb_ptr = conn->bundle;
-
- if(cb_ptr) {
- curr = cb_ptr->conn_list->head;
- while(curr) {
- conn = curr->ptr;
- infof(data, "- Conn %ld (%p) send_pipe: %zu, recv_pipe: %zu\n",
- conn->connection_id,
- (void *)conn,
- conn->send_pipe->size,
- conn->recv_pipe->size);
- curr = curr->next;
- }
- }
-}
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/pipeline.h b/external/libcurl_android/jni/libcurl/lib/pipeline.h
deleted file mode 100755
index 96c4c33e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/pipeline.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef HEADER_CURL_PIPELINE_H
-#define HEADER_CURL_PIPELINE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2013 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-CURLcode Curl_add_handle_to_pipeline(struct SessionHandle *handle,
- struct connectdata *conn);
-void Curl_move_handle_from_send_to_recv_pipe(struct SessionHandle *handle,
- struct connectdata *conn);
-bool Curl_pipeline_penalized(struct SessionHandle *data,
- struct connectdata *conn);
-
-bool Curl_pipeline_site_blacklisted(struct SessionHandle *handle,
- struct connectdata *conn);
-
-CURLMcode Curl_pipeline_set_site_blacklist(char **sites,
- struct curl_llist **list_ptr);
-
-bool Curl_pipeline_server_blacklisted(struct SessionHandle *handle,
- char *server_name);
-
-CURLMcode Curl_pipeline_set_server_blacklist(char **servers,
- struct curl_llist **list_ptr);
-
-#endif /* HEADER_CURL_PIPELINE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/pop3.c b/external/libcurl_android/jni/libcurl/lib/pop3.c
deleted file mode 100755
index dc64f810..00000000
--- a/external/libcurl_android/jni/libcurl/lib/pop3.c
+++ /dev/null
@@ -1,2339 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * RFC1734 POP3 Authentication
- * RFC1939 POP3 protocol
- * RFC2195 CRAM-MD5 authentication
- * RFC2384 POP URL Scheme
- * RFC2449 POP3 Extension Mechanism
- * RFC2595 Using TLS with IMAP, POP3 and ACAP
- * RFC2831 DIGEST-MD5 authentication
- * RFC4422 Simple Authentication and Security Layer (SASL)
- * RFC4616 PLAIN authentication
- * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
- * RFC5034 POP3 SASL Authentication Mechanism
- * RFC6749 OAuth 2.0 Authorization Framework
- * Draft LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_POP3
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "if2ip.h"
-#include "hostip.h"
-#include "progress.h"
-#include "transfer.h"
-#include "escape.h"
-#include "http.h" /* for HTTP proxy tunnel stuff */
-#include "socks.h"
-#include "pop3.h"
-
-#include "strtoofft.h"
-#include "strequal.h"
-#include "vtls/vtls.h"
-#include "connect.h"
-#include "strerror.h"
-#include "select.h"
-#include "multiif.h"
-#include "url.h"
-#include "rawstr.h"
-#include "curl_sasl.h"
-#include "curl_md5.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* Local API functions */
-static CURLcode pop3_regular_transfer(struct connectdata *conn, bool *done);
-static CURLcode pop3_do(struct connectdata *conn, bool *done);
-static CURLcode pop3_done(struct connectdata *conn, CURLcode status,
- bool premature);
-static CURLcode pop3_connect(struct connectdata *conn, bool *done);
-static CURLcode pop3_disconnect(struct connectdata *conn, bool dead);
-static CURLcode pop3_multi_statemach(struct connectdata *conn, bool *done);
-static int pop3_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks);
-static CURLcode pop3_doing(struct connectdata *conn, bool *dophase_done);
-static CURLcode pop3_setup_connection(struct connectdata *conn);
-static CURLcode pop3_parse_url_options(struct connectdata *conn);
-static CURLcode pop3_parse_url_path(struct connectdata *conn);
-static CURLcode pop3_parse_custom_request(struct connectdata *conn);
-static CURLcode pop3_calc_sasl_details(struct connectdata *conn,
- const char **mech,
- char **initresp, size_t *len,
- pop3state *state1, pop3state *state2);
-
-/*
- * POP3 protocol handler.
- */
-
-const struct Curl_handler Curl_handler_pop3 = {
- "POP3", /* scheme */
- pop3_setup_connection, /* setup_connection */
- pop3_do, /* do_it */
- pop3_done, /* done */
- ZERO_NULL, /* do_more */
- pop3_connect, /* connect_it */
- pop3_multi_statemach, /* connecting */
- pop3_doing, /* doing */
- pop3_getsock, /* proto_getsock */
- pop3_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- pop3_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_POP3, /* defport */
- CURLPROTO_POP3, /* protocol */
- PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY /* flags */
-};
-
-#ifdef USE_SSL
-/*
- * POP3S protocol handler.
- */
-
-const struct Curl_handler Curl_handler_pop3s = {
- "POP3S", /* scheme */
- pop3_setup_connection, /* setup_connection */
- pop3_do, /* do_it */
- pop3_done, /* done */
- ZERO_NULL, /* do_more */
- pop3_connect, /* connect_it */
- pop3_multi_statemach, /* connecting */
- pop3_doing, /* doing */
- pop3_getsock, /* proto_getsock */
- pop3_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- pop3_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_POP3S, /* defport */
- CURLPROTO_POP3S, /* protocol */
- PROTOPT_CLOSEACTION | PROTOPT_SSL
- | PROTOPT_NOURLQUERY /* flags */
-};
-#endif
-
-#ifndef CURL_DISABLE_HTTP
-/*
- * HTTP-proxyed POP3 protocol handler.
- */
-
-static const struct Curl_handler Curl_handler_pop3_proxy = {
- "POP3", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_POP3, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-#ifdef USE_SSL
-/*
- * HTTP-proxyed POP3S protocol handler.
- */
-
-static const struct Curl_handler Curl_handler_pop3s_proxy = {
- "POP3S", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_POP3S, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-#endif
-#endif
-
-#ifdef USE_SSL
-static void pop3_to_pop3s(struct connectdata *conn)
-{
- conn->handler = &Curl_handler_pop3s;
-}
-#else
-#define pop3_to_pop3s(x) Curl_nop_stmt
-#endif
-
-/***********************************************************************
- *
- * pop3_endofresp()
- *
- * Checks for an ending POP3 status code at the start of the given string, but
- * also detects the APOP timestamp from the server greeting and various
- * capabilities from the CAPA response including the supported authentication
- * types and allowed SASL mechanisms.
- */
-static bool pop3_endofresp(struct connectdata *conn, char *line, size_t len,
- int *resp)
-{
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-
- /* Do we have an error response? */
- if(len >= 4 && !memcmp("-ERR", line, 4)) {
- *resp = '-';
-
- return TRUE;
- }
-
- /* Are we processing CAPA command responses? */
- if(pop3c->state == POP3_CAPA) {
- /* Do we have the terminating line? */
- if(len >= 1 && !memcmp(line, ".", 1))
- *resp = '+';
- else
- *resp = '*';
-
- return TRUE;
- }
-
- /* Do we have a command or continuation response? */
- if((len >= 3 && !memcmp("+OK", line, 3)) ||
- (len >= 1 && !memcmp("+", line, 1))) {
- *resp = '+';
-
- return TRUE;
- }
-
- return FALSE; /* Nothing for us */
-}
-
-/***********************************************************************
- *
- * pop3_get_message()
- *
- * Gets the authentication message from the response buffer.
- */
-static void pop3_get_message(char *buffer, char** outptr)
-{
- size_t len = 0;
- char* message = NULL;
-
- /* Find the start of the message */
- for(message = buffer + 2; *message == ' ' || *message == '\t'; message++)
- ;
-
- /* Find the end of the message */
- for(len = strlen(message); len--;)
- if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
- message[len] != '\t')
- break;
-
- /* Terminate the message */
- if(++len) {
- message[len] = '\0';
- }
-
- *outptr = message;
-}
-
-/***********************************************************************
- *
- * state()
- *
- * This is the ONLY way to change POP3 state!
- */
-static void state(struct connectdata *conn, pop3state newstate)
-{
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- /* for debug purposes */
- static const char * const names[] = {
- "STOP",
- "SERVERGREET",
- "CAPA",
- "STARTTLS",
- "UPGRADETLS",
- "AUTH_PLAIN",
- "AUTH_LOGIN",
- "AUTH_LOGIN_PASSWD",
- "AUTH_CRAMMD5",
- "AUTH_DIGESTMD5",
- "AUTH_DIGESTMD5_RESP",
- "AUTH_NTLM",
- "AUTH_NTLM_TYPE2MSG",
- "AUTH_GSSAPI",
- "AUTH_GSSAPI_TOKEN",
- "AUTH_GSSAPI_NO_DATA",
- "AUTH_XOAUTH2",
- "AUTH_CANCEL",
- "AUTH_FINAL",
- "APOP",
- "USER",
- "PASS",
- "COMMAND",
- "QUIT",
- /* LAST */
- };
-
- if(pop3c->state != newstate)
- infof(conn->data, "POP3 %p state change from %s to %s\n",
- (void *)pop3c, names[pop3c->state], names[newstate]);
-#endif
-
- pop3c->state = newstate;
-}
-
-/***********************************************************************
- *
- * pop3_perform_capa()
- *
- * Sends the CAPA command in order to obtain a list of server side supported
- * capabilities.
- */
-static CURLcode pop3_perform_capa(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-
- pop3c->authmechs = 0; /* No known authentication mechanisms yet */
- pop3c->authused = 0; /* Clear the authentication mechanism used */
- pop3c->tls_supported = FALSE; /* Clear the TLS capability */
-
- /* Send the CAPA command */
- result = Curl_pp_sendf(&pop3c->pp, "%s", "CAPA");
-
- if(!result)
- state(conn, POP3_CAPA);
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_perform_starttls()
- *
- * Sends the STLS command to start the upgrade to TLS.
- */
-static CURLcode pop3_perform_starttls(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* Send the STLS command */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "STLS");
-
- if(!result)
- state(conn, POP3_STARTTLS);
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_perform_upgrade_tls()
- *
- * Performs the upgrade to TLS.
- */
-static CURLcode pop3_perform_upgrade_tls(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-
- /* Start the SSL connection */
- result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &pop3c->ssldone);
-
- if(!result) {
- if(pop3c->state != POP3_UPGRADETLS)
- state(conn, POP3_UPGRADETLS);
-
- if(pop3c->ssldone) {
- pop3_to_pop3s(conn);
- result = pop3_perform_capa(conn);
- }
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_perform_user()
- *
- * Sends a clear text USER command to authenticate with.
- */
-static CURLcode pop3_perform_user(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* Check we have a username and password to authenticate with and end the
- connect phase if we don't */
- if(!conn->bits.user_passwd) {
- state(conn, POP3_STOP);
-
- return result;
- }
-
- /* Send the USER command */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "USER %s",
- conn->user ? conn->user : "");
- if(!result)
- state(conn, POP3_USER);
-
- return result;
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/***********************************************************************
- *
- * pop3_perform_apop()
- *
- * Sends an APOP command to authenticate with.
- */
-static CURLcode pop3_perform_apop(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- size_t i;
- MD5_context *ctxt;
- unsigned char digest[MD5_DIGEST_LEN];
- char secret[2 * MD5_DIGEST_LEN + 1];
-
- /* Check we have a username and password to authenticate with and end the
- connect phase if we don't */
- if(!conn->bits.user_passwd) {
- state(conn, POP3_STOP);
-
- return result;
- }
-
- /* Create the digest */
- ctxt = Curl_MD5_init(Curl_DIGEST_MD5);
- if(!ctxt)
- return CURLE_OUT_OF_MEMORY;
-
- Curl_MD5_update(ctxt, (const unsigned char *) pop3c->apoptimestamp,
- curlx_uztoui(strlen(pop3c->apoptimestamp)));
-
- Curl_MD5_update(ctxt, (const unsigned char *) conn->passwd,
- curlx_uztoui(strlen(conn->passwd)));
-
- /* Finalise the digest */
- Curl_MD5_final(ctxt, digest);
-
- /* Convert the calculated 16 octet digest into a 32 byte hex string */
- for(i = 0; i < MD5_DIGEST_LEN; i++)
- snprintf(&secret[2 * i], 3, "%02x", digest[i]);
-
- result = Curl_pp_sendf(&pop3c->pp, "APOP %s %s", conn->user, secret);
-
- if(!result)
- state(conn, POP3_APOP);
-
- return result;
-}
-#endif
-
-/***********************************************************************
- *
- * pop3_perform_auth()
- *
- * Sends an AUTH command allowing the client to login with the given SASL
- * authentication mechanism.
- */
-static CURLcode pop3_perform_auth(struct connectdata *conn,
- const char *mech,
- const char *initresp, size_t len,
- pop3state state1, pop3state state2)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-
- if(initresp && 8 + strlen(mech) + len <= 255) { /* AUTH <mech> ...<crlf> */
- /* Send the AUTH command with the initial response */
- result = Curl_pp_sendf(&pop3c->pp, "AUTH %s %s", mech, initresp);
-
- if(!result)
- state(conn, state2);
- }
- else {
- /* Send the AUTH command */
- result = Curl_pp_sendf(&pop3c->pp, "AUTH %s", mech);
-
- if(!result)
- state(conn, state1);
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_perform_authentication()
- *
- * Initiates the authentication sequence, with the appropriate SASL
- * authentication mechanism, falling back to APOP and clear text should a
- * common mechanism not be available between the client and server.
- */
-static CURLcode pop3_perform_authentication(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- const char *mech = NULL;
- char *initresp = NULL;
- size_t len = 0;
- pop3state state1 = POP3_STOP;
- pop3state state2 = POP3_STOP;
-
- /* Check we have a username and password to authenticate with and end the
- connect phase if we don't */
- if(!conn->bits.user_passwd) {
- state(conn, POP3_STOP);
-
- return result;
- }
-
- /* Calculate the SASL login details */
- if(pop3c->authtypes & POP3_TYPE_SASL)
- result = pop3_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
- &state2);
-
- if(!result) {
- if(mech && (pop3c->preftype & POP3_TYPE_SASL)) {
- /* Perform SASL based authentication */
- result = pop3_perform_auth(conn, mech, initresp, len, state1, state2);
-
- Curl_safefree(initresp);
- }
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- else if((pop3c->authtypes & POP3_TYPE_APOP) &&
- (pop3c->preftype & POP3_TYPE_APOP))
- /* Perform APOP authentication */
- result = pop3_perform_apop(conn);
-#endif
- else if((pop3c->authtypes & POP3_TYPE_CLEARTEXT) &&
- (pop3c->preftype & POP3_TYPE_CLEARTEXT))
- /* Perform clear text authentication */
- result = pop3_perform_user(conn);
- else {
- /* Other mechanisms not supported */
- infof(conn->data, "No known authentication mechanisms supported!\n");
- result = CURLE_LOGIN_DENIED;
- }
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_perform_command()
- *
- * Sends a POP3 based command.
- */
-static CURLcode pop3_perform_command(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct POP3 *pop3 = data->req.protop;
- const char *command = NULL;
-
- /* Calculate the default command */
- if(pop3->id[0] == '\0' || conn->data->set.ftp_list_only) {
- command = "LIST";
-
- if(pop3->id[0] != '\0')
- /* Message specific LIST so skip the BODY transfer */
- pop3->transfer = FTPTRANSFER_INFO;
- }
- else
- command = "RETR";
-
- /* Send the command */
- if(pop3->id[0] != '\0')
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s %s",
- (pop3->custom && pop3->custom[0] != '\0' ?
- pop3->custom : command), pop3->id);
- else
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s",
- (pop3->custom && pop3->custom[0] != '\0' ?
- pop3->custom : command));
-
- if(!result)
- state(conn, POP3_COMMAND);
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_perform_quit()
- *
- * Performs the quit action prior to sclose() be called.
- */
-static CURLcode pop3_perform_quit(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* Send the QUIT command */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "QUIT");
-
- if(!result)
- state(conn, POP3_QUIT);
-
- return result;
-}
-
-/* For the initial server greeting */
-static CURLcode pop3_state_servergreet_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- const char *line = data->state.buffer;
- size_t len = strlen(line);
- size_t i;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Got unexpected pop3-server response");
- result = CURLE_FTP_WEIRD_SERVER_REPLY;
- }
- else {
- /* Does the server support APOP authentication? */
- if(len >= 4 && line[len - 2] == '>') {
- /* Look for the APOP timestamp */
- for(i = 3; i < len - 2; ++i) {
- if(line[i] == '<') {
- /* Calculate the length of the timestamp */
- size_t timestamplen = len - 1 - i;
- if(!timestamplen)
- break;
-
- /* Allocate some memory for the timestamp */
- pop3c->apoptimestamp = (char *)calloc(1, timestamplen + 1);
-
- if(!pop3c->apoptimestamp)
- break;
-
- /* Copy the timestamp */
- memcpy(pop3c->apoptimestamp, line + i, timestamplen);
- pop3c->apoptimestamp[timestamplen] = '\0';
-
- /* Store the APOP capability */
- pop3c->authtypes |= POP3_TYPE_APOP;
- break;
- }
- }
- }
-
- result = pop3_perform_capa(conn);
- }
-
- return result;
-}
-
-/* For CAPA responses */
-static CURLcode pop3_state_capa_resp(struct connectdata *conn, int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- const char *line = data->state.buffer;
- size_t len = strlen(line);
- size_t wordlen;
-
- (void)instate; /* no use for this yet */
-
- /* Do we have a untagged response? */
- if(pop3code == '*') {
- /* Does the server support the STLS capability? */
- if(len >= 4 && !memcmp(line, "STLS", 4))
- pop3c->tls_supported = TRUE;
-
- /* Does the server support clear text authentication? */
- else if(len >= 4 && !memcmp(line, "USER", 4))
- pop3c->authtypes |= POP3_TYPE_CLEARTEXT;
-
- /* Does the server support SASL based authentication? */
- else if(len >= 5 && !memcmp(line, "SASL ", 5)) {
- pop3c->authtypes |= POP3_TYPE_SASL;
-
- /* Advance past the SASL keyword */
- line += 5;
- len -= 5;
-
- /* Loop through the data line */
- for(;;) {
- while(len &&
- (*line == ' ' || *line == '\t' ||
- *line == '\r' || *line == '\n')) {
-
- line++;
- len--;
- }
-
- if(!len)
- break;
-
- /* Extract the word */
- for(wordlen = 0; wordlen < len && line[wordlen] != ' ' &&
- line[wordlen] != '\t' && line[wordlen] != '\r' &&
- line[wordlen] != '\n';)
- wordlen++;
-
- /* Test the word for a matching authentication mechanism */
- if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_LOGIN))
- pop3c->authmechs |= SASL_MECH_LOGIN;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_PLAIN))
- pop3c->authmechs |= SASL_MECH_PLAIN;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_CRAM_MD5))
- pop3c->authmechs |= SASL_MECH_CRAM_MD5;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_DIGEST_MD5))
- pop3c->authmechs |= SASL_MECH_DIGEST_MD5;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_GSSAPI))
- pop3c->authmechs |= SASL_MECH_GSSAPI;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_EXTERNAL))
- pop3c->authmechs |= SASL_MECH_EXTERNAL;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_NTLM))
- pop3c->authmechs |= SASL_MECH_NTLM;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_XOAUTH2))
- pop3c->authmechs |= SASL_MECH_XOAUTH2;
-
- line += wordlen;
- len -= wordlen;
- }
- }
- }
- else if(pop3code == '+') {
- if(data->set.use_ssl && !conn->ssl[FIRSTSOCKET].use) {
- /* We don't have a SSL/TLS connection yet, but SSL is requested */
- if(pop3c->tls_supported)
- /* Switch to TLS connection now */
- result = pop3_perform_starttls(conn);
- else if(data->set.use_ssl == CURLUSESSL_TRY)
- /* Fallback and carry on with authentication */
- result = pop3_perform_authentication(conn);
- else {
- failf(data, "STLS not supported.");
- result = CURLE_USE_SSL_FAILED;
- }
- }
- else
- result = pop3_perform_authentication(conn);
- }
- else {
- /* Clear text is supported when CAPA isn't recognised */
- pop3c->authtypes |= POP3_TYPE_CLEARTEXT;
-
- result = pop3_perform_authentication(conn);
- }
-
- return result;
-}
-
-/* For STARTTLS responses */
-static CURLcode pop3_state_starttls_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- if(data->set.use_ssl != CURLUSESSL_TRY) {
- failf(data, "STARTTLS denied. %c", pop3code);
- result = CURLE_USE_SSL_FAILED;
- }
- else
- result = pop3_perform_authentication(conn);
- }
- else
- result = pop3_perform_upgrade_tls(conn);
-
- return result;
-}
-
-/* For AUTH PLAIN (without initial response) responses */
-static CURLcode pop3_state_auth_plain_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *plainauth = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied. %c", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the authorisation message */
- result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
- &plainauth, &len);
- if(!result && plainauth) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", plainauth);
-
- if(!result)
- state(conn, POP3_AUTH_FINAL);
- }
- }
-
- Curl_safefree(plainauth);
-
- return result;
-}
-
-/* For AUTH LOGIN (without initial response) responses */
-static CURLcode pop3_state_auth_login_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *authuser = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the user message */
- result = Curl_sasl_create_login_message(data, conn->user,
- &authuser, &len);
- if(!result && authuser) {
- /* Send the user */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", authuser);
-
- if(!result)
- state(conn, POP3_AUTH_LOGIN_PASSWD);
- }
- }
-
- Curl_safefree(authuser);
-
- return result;
-}
-
-/* For AUTH LOGIN user entry responses */
-static CURLcode pop3_state_auth_login_password_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *authpasswd = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the password message */
- result = Curl_sasl_create_login_message(data, conn->passwd,
- &authpasswd, &len);
- if(!result && authpasswd) {
- /* Send the password */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", authpasswd);
-
- if(!result)
- state(conn, POP3_AUTH_FINAL);
- }
- }
-
- Curl_safefree(authpasswd);
-
- return result;
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/* For AUTH CRAM-MD5 responses */
-static CURLcode pop3_state_auth_cram_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlg = NULL;
- char *chlg64 = NULL;
- char *rplyb64 = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- return CURLE_LOGIN_DENIED;
- }
-
- /* Get the challenge message */
- pop3_get_message(data->state.buffer, &chlg64);
-
- /* Decode the challenge message */
- result = Curl_sasl_decode_cram_md5_message(chlg64, &chlg, &len);
- if(result) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "*");
-
- if(!result)
- state(conn, POP3_AUTH_CANCEL);
- }
- else {
- /* Create the response message */
- result = Curl_sasl_create_cram_md5_message(data, chlg, conn->user,
- conn->passwd, &rplyb64, &len);
- if(!result && rplyb64) {
- /* Send the response */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", rplyb64);
-
- if(!result)
- state(conn, POP3_AUTH_FINAL);
- }
- }
-
- Curl_safefree(chlg);
- Curl_safefree(rplyb64);
-
- return result;
-}
-
-/* For AUTH DIGEST-MD5 challenge responses */
-static CURLcode pop3_state_auth_digest_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlg64 = NULL;
- char *rplyb64 = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- return CURLE_LOGIN_DENIED;
- }
-
- /* Get the challenge message */
- pop3_get_message(data->state.buffer, &chlg64);
-
- /* Create the response message */
- result = Curl_sasl_create_digest_md5_message(data, chlg64,
- conn->user, conn->passwd,
- "pop", &rplyb64, &len);
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "*");
-
- if(!result)
- state(conn, POP3_AUTH_CANCEL);
- }
- }
- else {
- /* Send the response */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", rplyb64);
-
- if(!result)
- state(conn, POP3_AUTH_DIGESTMD5_RESP);
- }
-
- Curl_safefree(rplyb64);
-
- return result;
-}
-
-/* For AUTH DIGEST-MD5 challenge-response responses */
-static CURLcode pop3_state_auth_digest_resp_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Authentication failed: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Send an empty response */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "");
-
- if(!result)
- state(conn, POP3_AUTH_FINAL);
- }
-
- return result;
-}
-#endif
-
-#ifdef USE_NTLM
-/* For AUTH NTLM (without initial response) responses */
-static CURLcode pop3_state_auth_ntlm_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *type1msg = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the type-1 message */
- result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
- &conn->ntlm,
- &type1msg, &len);
- if(!result && type1msg) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", type1msg);
-
- if(!result)
- state(conn, POP3_AUTH_NTLM_TYPE2MSG);
- }
- }
-
- Curl_safefree(type1msg);
-
- return result;
-}
-
-/* For NTLM type-2 responses (sent in reponse to our type-1 message) */
-static CURLcode pop3_state_auth_ntlm_type2msg_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *type2msg = NULL;
- char *type3msg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the type-2 message */
- pop3_get_message(data->state.buffer, &type2msg);
-
- /* Decode the type-2 message */
- result = Curl_sasl_decode_ntlm_type2_message(data, type2msg, &conn->ntlm);
- if(result) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "*");
-
- if(!result)
- state(conn, POP3_AUTH_CANCEL);
- }
- else {
- /* Create the type-3 message */
- result = Curl_sasl_create_ntlm_type3_message(data, conn->user,
- conn->passwd, &conn->ntlm,
- &type3msg, &len);
- if(!result && type3msg) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", type3msg);
-
- if(!result)
- state(conn, POP3_AUTH_FINAL);
- }
- }
- }
-
- Curl_safefree(type3msg);
-
- return result;
-}
-#endif
-
-#if defined(USE_WINDOWS_SSPI)
-/* For AUTH GSSAPI (without initial response) responses */
-static CURLcode pop3_state_auth_gssapi_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- size_t len = 0;
- char *respmsg = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the initial response message */
- result = Curl_sasl_create_gssapi_user_message(data, conn->user,
- conn->passwd, "pop",
- pop3c->mutual_auth,
- NULL, &conn->krb5,
- &respmsg, &len);
- if(!result && respmsg) {
- /* Send the message */
- result = Curl_pp_sendf(&pop3c->pp, "%s", respmsg);
-
- if(!result)
- state(conn, POP3_AUTH_GSSAPI_TOKEN);
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-
-/* For AUTH GSSAPI user token responses */
-static CURLcode pop3_state_auth_gssapi_token_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- char *chlgmsg = NULL;
- char *respmsg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the challenge message */
- pop3_get_message(data->state.buffer, &chlgmsg);
-
- if(pop3c->mutual_auth)
- /* Decode the user token challenge and create the optional response
- message */
- result = Curl_sasl_create_gssapi_user_message(data, NULL, NULL, NULL,
- pop3c->mutual_auth,
- chlgmsg, &conn->krb5,
- &respmsg, &len);
- else
- /* Decode the security challenge and create the response message */
- result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
- &conn->krb5,
- &respmsg, &len);
-
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&pop3c->pp, "%s", "*");
-
- if(!result)
- state(conn, POP3_AUTH_CANCEL);
- }
- }
- else {
- /* Send the response */
- if(respmsg)
- result = Curl_pp_sendf(&pop3c->pp, "%s", respmsg);
- else
- result = Curl_pp_sendf(&pop3c->pp, "%s", "");
-
- if(!result)
- state(conn, (pop3c->mutual_auth ? POP3_AUTH_GSSAPI_NO_DATA :
- POP3_AUTH_FINAL));
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-
-/* For AUTH GSSAPI no data responses */
-static CURLcode pop3_state_auth_gssapi_no_data_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlgmsg = NULL;
- char *respmsg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the challenge message */
- pop3_get_message(data->state.buffer, &chlgmsg);
-
- /* Decode the security challenge and create the security message */
- result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
- &conn->krb5,
- &respmsg, &len);
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", "*");
-
- if(!result)
- state(conn, POP3_AUTH_CANCEL);
- }
- }
- else {
- /* Send the response */
- if(respmsg) {
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", respmsg);
-
- if(!result)
- state(conn, POP3_AUTH_FINAL);
- }
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-#endif
-
-/* For AUTH XOAUTH2 (without initial response) responses */
-static CURLcode pop3_state_auth_xoauth2_resp(struct connectdata *conn,
- int pop3code, pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *xoauth = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the authorisation message */
- result = Curl_sasl_create_xoauth2_message(conn->data, conn->user,
- conn->xoauth2_bearer,
- &xoauth, &len);
- if(!result && xoauth) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "%s", xoauth);
-
- if(!result)
- state(conn, POP3_AUTH_FINAL);
- }
- }
-
- Curl_safefree(xoauth);
-
- return result;
-}
-
-/* For AUTH cancellation responses */
-static CURLcode pop3_state_auth_cancel_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- const char *mech = NULL;
- char *initresp = NULL;
- size_t len = 0;
- pop3state state1 = POP3_STOP;
- pop3state state2 = POP3_STOP;
-
- (void)pop3code;
- (void)instate; /* no use for this yet */
-
- /* Remove the offending mechanism from the supported list */
- pop3c->authmechs ^= pop3c->authused;
-
- /* Calculate alternative SASL login details */
- result = pop3_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
- &state2);
-
- if(!result) {
- /* Do we have any mechanisms left or can we fallback to another
- authentication type? */
- if(mech) {
- /* Retry SASL based authentication */
- result = pop3_perform_auth(conn, mech, initresp, len, state1, state2);
-
- Curl_safefree(initresp);
- }
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- else if((pop3c->authtypes & POP3_TYPE_APOP) &&
- (pop3c->preftype & POP3_TYPE_APOP))
- /* Perform APOP authentication */
- result = pop3_perform_apop(conn);
-#endif
- else if((pop3c->authtypes & POP3_TYPE_CLEARTEXT) &&
- (pop3c->preftype & POP3_TYPE_CLEARTEXT))
- /* Perform clear text authentication */
- result = pop3_perform_user(conn);
- else {
- failf(data, "Authentication cancelled");
-
- result = CURLE_LOGIN_DENIED;
- }
- }
-
- return result;
-}
-
-/* For final responses in the AUTH sequence */
-static CURLcode pop3_state_auth_final_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Authentication failed: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else
- /* End of connect phase */
- state(conn, POP3_STOP);
-
- return result;
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/* For APOP responses */
-static CURLcode pop3_state_apop_resp(struct connectdata *conn, int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Authentication failed: %d", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else
- /* End of connect phase */
- state(conn, POP3_STOP);
-
- return result;
-}
-#endif
-
-/* For USER responses */
-static CURLcode pop3_state_user_resp(struct connectdata *conn, int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied. %c", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else
- /* Send the PASS command */
- result = Curl_pp_sendf(&conn->proto.pop3c.pp, "PASS %s",
- conn->passwd ? conn->passwd : "");
- if(!result)
- state(conn, POP3_PASS);
-
- return result;
-}
-
-/* For PASS responses */
-static CURLcode pop3_state_pass_resp(struct connectdata *conn, int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- failf(data, "Access denied. %c", pop3code);
- result = CURLE_LOGIN_DENIED;
- }
- else
- /* End of connect phase */
- state(conn, POP3_STOP);
-
- return result;
-}
-
-/* For command responses */
-static CURLcode pop3_state_command_resp(struct connectdata *conn,
- int pop3code,
- pop3state instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct POP3 *pop3 = data->req.protop;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- struct pingpong *pp = &pop3c->pp;
-
- (void)instate; /* no use for this yet */
-
- if(pop3code != '+') {
- state(conn, POP3_STOP);
- return CURLE_RECV_ERROR;
- }
-
- /* This 'OK' line ends with a CR LF pair which is the two first bytes of the
- EOB string so count this is two matching bytes. This is necessary to make
- the code detect the EOB if the only data than comes now is %2e CR LF like
- when there is no body to return. */
- pop3c->eob = 2;
-
- /* But since this initial CR LF pair is not part of the actual body, we set
- the strip counter here so that these bytes won't be delivered. */
- pop3c->strip = 2;
-
- if(pop3->transfer == FTPTRANSFER_BODY) {
- /* POP3 download */
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, NULL, -1, NULL);
-
- if(pp->cache) {
- /* The header "cache" contains a bunch of data that is actually body
- content so send it as such. Note that there may even be additional
- "headers" after the body */
-
- if(!data->set.opt_no_body) {
- result = Curl_pop3_write(conn, pp->cache, pp->cache_size);
- if(result)
- return result;
- }
-
- /* Free the cache */
- Curl_safefree(pp->cache);
-
- /* Reset the cache size */
- pp->cache_size = 0;
- }
- }
-
- /* End of DO phase */
- state(conn, POP3_STOP);
-
- return result;
-}
-
-static CURLcode pop3_statemach_act(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
- int pop3code;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- struct pingpong *pp = &pop3c->pp;
- size_t nread = 0;
-
- /* Busy upgrading the connection; right now all I/O is SSL/TLS, not POP3 */
- if(pop3c->state == POP3_UPGRADETLS)
- return pop3_perform_upgrade_tls(conn);
-
- /* Flush any data that needs to be sent */
- if(pp->sendleft)
- return Curl_pp_flushsend(pp);
-
- do {
- /* Read the response from the server */
- result = Curl_pp_readresp(sock, pp, &pop3code, &nread);
- if(result)
- return result;
-
- if(!pop3code)
- break;
-
- /* We have now received a full POP3 server response */
- switch(pop3c->state) {
- case POP3_SERVERGREET:
- result = pop3_state_servergreet_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_CAPA:
- result = pop3_state_capa_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_STARTTLS:
- result = pop3_state_starttls_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_PLAIN:
- result = pop3_state_auth_plain_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_LOGIN:
- result = pop3_state_auth_login_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_LOGIN_PASSWD:
- result = pop3_state_auth_login_password_resp(conn, pop3code,
- pop3c->state);
- break;
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- case POP3_AUTH_CRAMMD5:
- result = pop3_state_auth_cram_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_DIGESTMD5:
- result = pop3_state_auth_digest_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_DIGESTMD5_RESP:
- result = pop3_state_auth_digest_resp_resp(conn, pop3code, pop3c->state);
- break;
-#endif
-
-#ifdef USE_NTLM
- case POP3_AUTH_NTLM:
- result = pop3_state_auth_ntlm_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_NTLM_TYPE2MSG:
- result = pop3_state_auth_ntlm_type2msg_resp(conn, pop3code,
- pop3c->state);
- break;
-#endif
-
-#if defined(USE_WINDOWS_SSPI)
- case POP3_AUTH_GSSAPI:
- result = pop3_state_auth_gssapi_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_GSSAPI_TOKEN:
- result = pop3_state_auth_gssapi_token_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_GSSAPI_NO_DATA:
- result = pop3_state_auth_gssapi_no_data_resp(conn, pop3code,
- pop3c->state);
- break;
-#endif
-
- case POP3_AUTH_XOAUTH2:
- result = pop3_state_auth_xoauth2_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_CANCEL:
- result = pop3_state_auth_cancel_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_AUTH_FINAL:
- result = pop3_state_auth_final_resp(conn, pop3code, pop3c->state);
- break;
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- case POP3_APOP:
- result = pop3_state_apop_resp(conn, pop3code, pop3c->state);
- break;
-#endif
-
- case POP3_USER:
- result = pop3_state_user_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_PASS:
- result = pop3_state_pass_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_COMMAND:
- result = pop3_state_command_resp(conn, pop3code, pop3c->state);
- break;
-
- case POP3_QUIT:
- /* fallthrough, just stop! */
- default:
- /* internal error */
- state(conn, POP3_STOP);
- break;
- }
- } while(!result && pop3c->state != POP3_STOP && Curl_pp_moredata(pp));
-
- return result;
-}
-
-/* Called repeatedly until done from multi.c */
-static CURLcode pop3_multi_statemach(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-
- if((conn->handler->flags & PROTOPT_SSL) && !pop3c->ssldone) {
- result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &pop3c->ssldone);
- if(result || !pop3c->ssldone)
- return result;
- }
-
- result = Curl_pp_statemach(&pop3c->pp, FALSE);
- *done = (pop3c->state == POP3_STOP) ? TRUE : FALSE;
-
- return result;
-}
-
-static CURLcode pop3_block_statemach(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-
- while(pop3c->state != POP3_STOP && !result)
- result = Curl_pp_statemach(&pop3c->pp, TRUE);
-
- return result;
-}
-
-/* Allocate and initialize the POP3 struct for the current SessionHandle if
- required */
-static CURLcode pop3_init(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct POP3 *pop3;
-
- pop3 = data->req.protop = calloc(sizeof(struct POP3), 1);
- if(!pop3)
- result = CURLE_OUT_OF_MEMORY;
-
- return result;
-}
-
-/* For the POP3 "protocol connect" and "doing" phases only */
-static int pop3_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks)
-{
- return Curl_pp_getsock(&conn->proto.pop3c.pp, socks, numsocks);
-}
-
-/***********************************************************************
- *
- * pop3_connect()
- *
- * This function should do everything that is to be considered a part of the
- * connection phase.
- *
- * The variable 'done' points to will be TRUE if the protocol-layer connect
- * phase is done when this function returns, or FALSE if not.
- */
-static CURLcode pop3_connect(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- struct pingpong *pp = &pop3c->pp;
-
- *done = FALSE; /* default to not done yet */
-
- /* We always support persistent connections in POP3 */
- connkeep(conn, "POP3 default");
-
- /* Set the default response time-out */
- pp->response_time = RESP_TIMEOUT;
- pp->statemach_act = pop3_statemach_act;
- pp->endofresp = pop3_endofresp;
- pp->conn = conn;
-
- /* Set the default preferred authentication type and mechanism */
- pop3c->preftype = POP3_TYPE_ANY;
- pop3c->prefmech = SASL_AUTH_ANY;
-
- /* Initialise the pingpong layer */
- Curl_pp_init(pp);
-
- /* Parse the URL options */
- result = pop3_parse_url_options(conn);
- if(result)
- return result;
-
- /* Start off waiting for the server greeting response */
- state(conn, POP3_SERVERGREET);
-
- result = pop3_multi_statemach(conn, done);
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_done()
- *
- * The DONE function. This does what needs to be done after a single DO has
- * performed.
- *
- * Input argument is already checked for validity.
- */
-static CURLcode pop3_done(struct connectdata *conn, CURLcode status,
- bool premature)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct POP3 *pop3 = data->req.protop;
-
- (void)premature;
-
- if(!pop3)
- /* When the easy handle is removed from the multi interface while libcurl
- is still trying to resolve the host name, the POP3 struct is not yet
- initialized. However, the removal action calls Curl_done() which in
- turn calls this function, so we simply return success. */
- return CURLE_OK;
-
- if(status) {
- connclose(conn, "POP3 done with bad status");
- result = status; /* use the already set error code */
- }
-
- /* Cleanup our per-request based variables */
- Curl_safefree(pop3->id);
- Curl_safefree(pop3->custom);
-
- /* Clear the transfer mode for the next request */
- pop3->transfer = FTPTRANSFER_BODY;
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_perform()
- *
- * This is the actual DO function for POP3. Get a message/listing according to
- * the options previously setup.
- */
-static CURLcode pop3_perform(struct connectdata *conn, bool *connected,
- bool *dophase_done)
-{
- /* This is POP3 and no proxy */
- CURLcode result = CURLE_OK;
- struct POP3 *pop3 = conn->data->req.protop;
-
- DEBUGF(infof(conn->data, "DO phase starts\n"));
-
- if(conn->data->set.opt_no_body) {
- /* Requested no body means no transfer */
- pop3->transfer = FTPTRANSFER_INFO;
- }
-
- *dophase_done = FALSE; /* not done yet */
-
- /* Start the first command in the DO phase */
- result = pop3_perform_command(conn);
- if(result)
- return result;
-
- /* Run the state-machine */
- result = pop3_multi_statemach(conn, dophase_done);
-
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
-
- if(*dophase_done)
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_do()
- *
- * This function is registered as 'curl_do' function. It decodes the path
- * parts etc as a wrapper to the actual DO function (pop3_perform).
- *
- * The input argument is already checked for validity.
- */
-static CURLcode pop3_do(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
-
- *done = FALSE; /* default to false */
-
- /* Parse the URL path */
- result = pop3_parse_url_path(conn);
- if(result)
- return result;
-
- /* Parse the custom request */
- result = pop3_parse_custom_request(conn);
- if(result)
- return result;
-
- result = pop3_regular_transfer(conn, done);
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_disconnect()
- *
- * Disconnect from an POP3 server. Cleanup protocol-specific per-connection
- * resources. BLOCKING.
- */
-static CURLcode pop3_disconnect(struct connectdata *conn, bool dead_connection)
-{
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-
- /* We cannot send quit unconditionally. If this connection is stale or
- bad in any way, sending quit and waiting around here will make the
- disconnect wait in vain and cause more problems than we need to. */
-
- /* The POP3 session may or may not have been allocated/setup at this
- point! */
- if(!dead_connection && pop3c->pp.conn && pop3c->pp.conn->bits.protoconnstart)
- if(!pop3_perform_quit(conn))
- (void)pop3_block_statemach(conn); /* ignore errors on QUIT */
-
- /* Disconnect from the server */
- Curl_pp_disconnect(&pop3c->pp);
-
- /* Cleanup the SASL module */
- Curl_sasl_cleanup(conn, pop3c->authused);
-
- /* Cleanup our connection based variables */
- Curl_safefree(pop3c->apoptimestamp);
-
- return CURLE_OK;
-}
-
-/* Call this when the DO phase has completed */
-static CURLcode pop3_dophase_done(struct connectdata *conn, bool connected)
-{
- (void)conn;
- (void)connected;
-
- return CURLE_OK;
-}
-
-/* Called from multi.c while DOing */
-static CURLcode pop3_doing(struct connectdata *conn, bool *dophase_done)
-{
- CURLcode result = pop3_multi_statemach(conn, dophase_done);
-
- if(result)
- DEBUGF(infof(conn->data, "DO phase failed\n"));
- else if(*dophase_done) {
- result = pop3_dophase_done(conn, FALSE /* not connected */);
-
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_regular_transfer()
- *
- * The input argument is already checked for validity.
- *
- * Performs all commands done before a regular transfer between a local and a
- * remote host.
- */
-static CURLcode pop3_regular_transfer(struct connectdata *conn,
- bool *dophase_done)
-{
- CURLcode result = CURLE_OK;
- bool connected = FALSE;
- struct SessionHandle *data = conn->data;
-
- /* Make sure size is unknown at this point */
- data->req.size = -1;
-
- /* Set the progress data */
- Curl_pgrsSetUploadCounter(data, 0);
- Curl_pgrsSetDownloadCounter(data, 0);
- Curl_pgrsSetUploadSize(data, -1);
- Curl_pgrsSetDownloadSize(data, -1);
-
- /* Carry out the perform */
- result = pop3_perform(conn, &connected, dophase_done);
-
- /* Perform post DO phase operations if necessary */
- if(!result && *dophase_done)
- result = pop3_dophase_done(conn, connected);
-
- return result;
-}
-
-static CURLcode pop3_setup_connection(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
-
- /* Initialise the POP3 layer */
- CURLcode result = pop3_init(conn);
- if(result)
- return result;
-
- if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) {
- /* Unless we have asked to tunnel POP3 operations through the proxy, we
- switch and use HTTP operations only */
-#ifndef CURL_DISABLE_HTTP
- if(conn->handler == &Curl_handler_pop3)
- conn->handler = &Curl_handler_pop3_proxy;
- else {
-#ifdef USE_SSL
- conn->handler = &Curl_handler_pop3s_proxy;
-#else
- failf(data, "POP3S not supported!");
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- }
-
- /* set it up as an HTTP connection instead */
- return conn->handler->setup_connection(conn);
-#else
- failf(data, "POP3 over http proxy requires HTTP support built-in!");
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- }
-
- data->state.path++; /* don't include the initial slash */
-
- return CURLE_OK;
-}
-
-/***********************************************************************
- *
- * pop3_parse_url_options()
- *
- * Parse the URL login options.
- */
-static CURLcode pop3_parse_url_options(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- const char *options = conn->options;
- const char *ptr = options;
- bool reset = TRUE;
-
- while(ptr && *ptr) {
- const char *key = ptr;
-
- while(*ptr && *ptr != '=')
- ptr++;
-
- if(strnequal(key, "AUTH", 4)) {
- size_t len = 0;
- const char *value = ++ptr;
-
- if(reset) {
- reset = FALSE;
- pop3c->preftype = POP3_TYPE_NONE;
- pop3c->prefmech = SASL_AUTH_NONE;
- }
-
- while(*ptr && *ptr != ';') {
- ptr++;
- len++;
- }
-
- if(strnequal(value, "*", len)) {
- pop3c->preftype = POP3_TYPE_ANY;
- pop3c->prefmech = SASL_AUTH_ANY;
- }
- else if(strnequal(value, "+APOP", len)) {
- pop3c->preftype = POP3_TYPE_APOP;
- pop3c->prefmech = SASL_AUTH_NONE;
- }
- else if(strnequal(value, SASL_MECH_STRING_LOGIN, len)) {
- pop3c->preftype = POP3_TYPE_SASL;
- pop3c->prefmech |= SASL_MECH_LOGIN;
- }
- else if(strnequal(value, SASL_MECH_STRING_PLAIN, len)) {
- pop3c->preftype = POP3_TYPE_SASL;
- pop3c->prefmech |= SASL_MECH_PLAIN;
- }
- else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len)) {
- pop3c->preftype = POP3_TYPE_SASL;
- pop3c->prefmech |= SASL_MECH_CRAM_MD5;
- }
- else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len)) {
- pop3c->preftype = POP3_TYPE_SASL;
- pop3c->prefmech |= SASL_MECH_DIGEST_MD5;
- }
- else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len)) {
- pop3c->preftype = POP3_TYPE_SASL;
- pop3c->prefmech |= SASL_MECH_GSSAPI;
- }
- else if(strnequal(value, SASL_MECH_STRING_NTLM, len)) {
- pop3c->preftype = POP3_TYPE_SASL;
- pop3c->prefmech |= SASL_MECH_NTLM;
- }
- else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len)) {
- pop3c->preftype = POP3_TYPE_SASL;
- pop3c->prefmech |= SASL_MECH_XOAUTH2;
- }
-
- if(*ptr == ';')
- ptr++;
- }
- else
- result = CURLE_URL_MALFORMAT;
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_parse_url_path()
- *
- * Parse the URL path into separate path components.
- */
-static CURLcode pop3_parse_url_path(struct connectdata *conn)
-{
- /* The POP3 struct is already initialised in pop3_connect() */
- struct SessionHandle *data = conn->data;
- struct POP3 *pop3 = data->req.protop;
- const char *path = data->state.path;
-
- /* URL decode the path for the message ID */
- return Curl_urldecode(data, path, 0, &pop3->id, NULL, TRUE);
-}
-
-/***********************************************************************
- *
- * pop3_parse_custom_request()
- *
- * Parse the custom request.
- */
-static CURLcode pop3_parse_custom_request(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct POP3 *pop3 = data->req.protop;
- const char *custom = data->set.str[STRING_CUSTOMREQUEST];
-
- /* URL decode the custom request */
- if(custom)
- result = Curl_urldecode(data, custom, 0, &pop3->custom, NULL, TRUE);
-
- return result;
-}
-
-/***********************************************************************
- *
- * pop3_calc_sasl_details()
- *
- * Calculate the required login details for SASL authentication.
- */
-static CURLcode pop3_calc_sasl_details(struct connectdata *conn,
- const char **mech,
- char **initresp, size_t *len,
- pop3state *state1, pop3state *state2)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct pop3_conn *pop3c = &conn->proto.pop3c;
-
- /* Calculate the supported authentication mechanism, by decreasing order of
- security, as well as the initial response where appropriate */
-#if defined(USE_WINDOWS_SSPI)
- if((pop3c->authmechs & SASL_MECH_GSSAPI) &&
- (pop3c->prefmech & SASL_MECH_GSSAPI)) {
- pop3c->mutual_auth = FALSE; /* TODO: Calculate mutual authentication */
-
- *mech = SASL_MECH_STRING_GSSAPI;
- *state1 = POP3_AUTH_GSSAPI;
- *state2 = POP3_AUTH_GSSAPI_TOKEN;
- pop3c->authused = SASL_MECH_GSSAPI;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_gssapi_user_message(data, conn->user,
- conn->passwd, "pop",
- pop3c->mutual_auth,
- NULL, &conn->krb5,
- initresp, len);
- }
- else
-#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- if((pop3c->authmechs & SASL_MECH_DIGEST_MD5) &&
- (pop3c->prefmech & SASL_MECH_DIGEST_MD5)) {
- *mech = SASL_MECH_STRING_DIGEST_MD5;
- *state1 = POP3_AUTH_DIGESTMD5;
- pop3c->authused = SASL_MECH_DIGEST_MD5;
- }
- else if((pop3c->authmechs & SASL_MECH_CRAM_MD5) &&
- (pop3c->prefmech & SASL_MECH_CRAM_MD5)) {
- *mech = SASL_MECH_STRING_CRAM_MD5;
- *state1 = POP3_AUTH_CRAMMD5;
- pop3c->authused = SASL_MECH_CRAM_MD5;
- }
- else
-#endif
-#ifdef USE_NTLM
- if((pop3c->authmechs & SASL_MECH_NTLM) &&
- (pop3c->prefmech & SASL_MECH_NTLM)) {
- *mech = SASL_MECH_STRING_NTLM;
- *state1 = POP3_AUTH_NTLM;
- *state2 = POP3_AUTH_NTLM_TYPE2MSG;
- pop3c->authused = SASL_MECH_NTLM;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
- &conn->ntlm,
- initresp, len);
- }
- else
-#endif
- if(((pop3c->authmechs & SASL_MECH_XOAUTH2) &&
- (pop3c->prefmech & SASL_MECH_XOAUTH2) &&
- (pop3c->prefmech != SASL_AUTH_ANY)) || conn->xoauth2_bearer) {
- *mech = SASL_MECH_STRING_XOAUTH2;
- *state1 = POP3_AUTH_XOAUTH2;
- *state2 = POP3_AUTH_FINAL;
- pop3c->authused = SASL_MECH_XOAUTH2;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_xoauth2_message(data, conn->user,
- conn->xoauth2_bearer,
- initresp, len);
- }
- else if((pop3c->authmechs & SASL_MECH_LOGIN) &&
- (pop3c->prefmech & SASL_MECH_LOGIN)) {
- *mech = SASL_MECH_STRING_LOGIN;
- *state1 = POP3_AUTH_LOGIN;
- *state2 = POP3_AUTH_LOGIN_PASSWD;
- pop3c->authused = SASL_MECH_LOGIN;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_login_message(data, conn->user, initresp, len);
- }
- else if((pop3c->authmechs & SASL_MECH_PLAIN) &&
- (pop3c->prefmech & SASL_MECH_PLAIN)) {
- *mech = SASL_MECH_STRING_PLAIN;
- *state1 = POP3_AUTH_PLAIN;
- *state2 = POP3_AUTH_FINAL;
- pop3c->authused = SASL_MECH_PLAIN;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
- initresp, len);
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * Curl_pop3_write()
- *
- * This function scans the body after the end-of-body and writes everything
- * until the end is found.
- */
-CURLcode Curl_pop3_write(struct connectdata *conn, char *str, size_t nread)
-{
- /* This code could be made into a special function in the handler struct */
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SingleRequest *k = &data->req;
-
- struct pop3_conn *pop3c = &conn->proto.pop3c;
- bool strip_dot = FALSE;
- size_t last = 0;
- size_t i;
-
- /* Search through the buffer looking for the end-of-body marker which is
- 5 bytes (0d 0a 2e 0d 0a). Note that a line starting with a dot matches
- the eob so the server will have prefixed it with an extra dot which we
- need to strip out. Additionally the marker could of course be spread out
- over 5 different data chunks. */
- for(i = 0; i < nread; i++) {
- size_t prev = pop3c->eob;
-
- switch(str[i]) {
- case 0x0d:
- if(pop3c->eob == 0) {
- pop3c->eob++;
-
- if(i) {
- /* Write out the body part that didn't match */
- result = Curl_client_write(conn, CLIENTWRITE_BODY, &str[last],
- i - last);
-
- if(result)
- return result;
-
- last = i;
- }
- }
- else if(pop3c->eob == 3)
- pop3c->eob++;
- else
- /* If the character match wasn't at position 0 or 3 then restart the
- pattern matching */
- pop3c->eob = 1;
- break;
-
- case 0x0a:
- if(pop3c->eob == 1 || pop3c->eob == 4)
- pop3c->eob++;
- else
- /* If the character match wasn't at position 1 or 4 then start the
- search again */
- pop3c->eob = 0;
- break;
-
- case 0x2e:
- if(pop3c->eob == 2)
- pop3c->eob++;
- else if(pop3c->eob == 3) {
- /* We have an extra dot after the CRLF which we need to strip off */
- strip_dot = TRUE;
- pop3c->eob = 0;
- }
- else
- /* If the character match wasn't at position 2 then start the search
- again */
- pop3c->eob = 0;
- break;
-
- default:
- pop3c->eob = 0;
- break;
- }
-
- /* Did we have a partial match which has subsequently failed? */
- if(prev && prev >= pop3c->eob) {
- /* Strip can only be non-zero for the very first mismatch after CRLF
- and then both prev and strip are equal and nothing will be output
- below */
- while(prev && pop3c->strip) {
- prev--;
- pop3c->strip--;
- }
-
- if(prev) {
- /* If the partial match was the CRLF and dot then only write the CRLF
- as the server would have inserted the dot */
- result = Curl_client_write(conn, CLIENTWRITE_BODY, (char*)POP3_EOB,
- strip_dot ? prev - 1 : prev);
-
- if(result)
- return result;
-
- last = i;
- strip_dot = FALSE;
- }
- }
- }
-
- if(pop3c->eob == POP3_EOB_LEN) {
- /* We have a full match so the transfer is done, however we must transfer
- the CRLF at the start of the EOB as this is considered to be part of the
- message as per RFC-1939, sect. 3 */
- result = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)POP3_EOB, 2);
-
- k->keepon &= ~KEEP_RECV;
- pop3c->eob = 0;
-
- return result;
- }
-
- if(pop3c->eob)
- /* While EOB is matching nothing should be output */
- return CURLE_OK;
-
- if(nread - last) {
- result = Curl_client_write(conn, CLIENTWRITE_BODY, &str[last],
- nread - last);
- }
-
- return result;
-}
-
-#endif /* CURL_DISABLE_POP3 */
diff --git a/external/libcurl_android/jni/libcurl/lib/pop3.h b/external/libcurl_android/jni/libcurl/lib/pop3.h
deleted file mode 100755
index 729a55ad..00000000
--- a/external/libcurl_android/jni/libcurl/lib/pop3.h
+++ /dev/null
@@ -1,110 +0,0 @@
-#ifndef HEADER_CURL_POP3_H
-#define HEADER_CURL_POP3_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2009 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "pingpong.h"
-
-/****************************************************************************
- * POP3 unique setup
- ***************************************************************************/
-typedef enum {
- POP3_STOP, /* do nothing state, stops the state machine */
- POP3_SERVERGREET, /* waiting for the initial greeting immediately after
- a connect */
- POP3_CAPA,
- POP3_STARTTLS,
- POP3_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS
- (multi mode only) */
- POP3_AUTH_PLAIN,
- POP3_AUTH_LOGIN,
- POP3_AUTH_LOGIN_PASSWD,
- POP3_AUTH_CRAMMD5,
- POP3_AUTH_DIGESTMD5,
- POP3_AUTH_DIGESTMD5_RESP,
- POP3_AUTH_NTLM,
- POP3_AUTH_NTLM_TYPE2MSG,
- POP3_AUTH_GSSAPI,
- POP3_AUTH_GSSAPI_TOKEN,
- POP3_AUTH_GSSAPI_NO_DATA,
- POP3_AUTH_XOAUTH2,
- POP3_AUTH_CANCEL,
- POP3_AUTH_FINAL,
- POP3_APOP,
- POP3_USER,
- POP3_PASS,
- POP3_COMMAND,
- POP3_QUIT,
- POP3_LAST /* never used */
-} pop3state;
-
-/* This POP3 struct is used in the SessionHandle. All POP3 data that is
- connection-oriented must be in pop3_conn to properly deal with the fact that
- perhaps the SessionHandle is changed between the times the connection is
- used. */
-struct POP3 {
- curl_pp_transfer transfer;
- char *id; /* Message ID */
- char *custom; /* Custom Request */
-};
-
-/* pop3_conn is used for struct connection-oriented data in the connectdata
- struct */
-struct pop3_conn {
- struct pingpong pp;
- pop3state state; /* Always use pop3.c:state() to change state! */
- bool ssldone; /* Is connect() over SSL done? */
- size_t eob; /* Number of bytes of the EOB (End Of Body) that
- have been received so far */
- size_t strip; /* Number of bytes from the start to ignore as
- non-body */
- unsigned int authtypes; /* Accepted authentication types */
- unsigned int authmechs; /* Accepted SASL authentication mechanisms */
- unsigned int preftype; /* Preferred authentication type */
- unsigned int prefmech; /* Preferred SASL authentication mechanism */
- unsigned int authused; /* SASL auth mechanism used for the connection */
- char *apoptimestamp; /* APOP timestamp from the server greeting */
- bool tls_supported; /* StartTLS capability supported by server */
- bool mutual_auth; /* Mutual authentication enabled (GSSAPI only) */
-};
-
-extern const struct Curl_handler Curl_handler_pop3;
-extern const struct Curl_handler Curl_handler_pop3s;
-
-/* Authentication type flags */
-#define POP3_TYPE_CLEARTEXT (1 << 0)
-#define POP3_TYPE_APOP (1 << 1)
-#define POP3_TYPE_SASL (1 << 2)
-
-/* Authentication type values */
-#define POP3_TYPE_NONE 0
-#define POP3_TYPE_ANY ~0U
-
-/* This is the 5-bytes End-Of-Body marker for POP3 */
-#define POP3_EOB "\x0d\x0a\x2e\x0d\x0a"
-#define POP3_EOB_LEN 5
-
-/* This function scans the body after the end-of-body and writes everything
- * until the end is found */
-CURLcode Curl_pop3_write(struct connectdata *conn, char *str, size_t nread);
-
-#endif /* HEADER_CURL_POP3_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/progress.c b/external/libcurl_android/jni/libcurl/lib/progress.c
deleted file mode 100755
index f147ce71..00000000
--- a/external/libcurl_android/jni/libcurl/lib/progress.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "urldata.h"
-#include "sendf.h"
-#include "progress.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* Provide a string that is 2 + 1 + 2 + 1 + 2 = 8 letters long (plus the zero
- byte) */
-static void time2str(char *r, curl_off_t seconds)
-{
- curl_off_t d, h, m, s;
- if(seconds <= 0) {
- strcpy(r, "--:--:--");
- return;
- }
- h = seconds / CURL_OFF_T_C(3600);
- if(h <= CURL_OFF_T_C(99)) {
- m = (seconds - (h*CURL_OFF_T_C(3600))) / CURL_OFF_T_C(60);
- s = (seconds - (h*CURL_OFF_T_C(3600))) - (m*CURL_OFF_T_C(60));
- snprintf(r, 9, "%2" CURL_FORMAT_CURL_OFF_T ":%02" CURL_FORMAT_CURL_OFF_T
- ":%02" CURL_FORMAT_CURL_OFF_T, h, m, s);
- }
- else {
- /* this equals to more than 99 hours, switch to a more suitable output
- format to fit within the limits. */
- d = seconds / CURL_OFF_T_C(86400);
- h = (seconds - (d*CURL_OFF_T_C(86400))) / CURL_OFF_T_C(3600);
- if(d <= CURL_OFF_T_C(999))
- snprintf(r, 9, "%3" CURL_FORMAT_CURL_OFF_T
- "d %02" CURL_FORMAT_CURL_OFF_T "h", d, h);
- else
- snprintf(r, 9, "%7" CURL_FORMAT_CURL_OFF_T "d", d);
- }
-}
-
-/* The point of this function would be to return a string of the input data,
- but never longer than 5 columns (+ one zero byte).
- Add suffix k, M, G when suitable... */
-static char *max5data(curl_off_t bytes, char *max5)
-{
-#define ONE_KILOBYTE CURL_OFF_T_C(1024)
-#define ONE_MEGABYTE (CURL_OFF_T_C(1024) * ONE_KILOBYTE)
-#define ONE_GIGABYTE (CURL_OFF_T_C(1024) * ONE_MEGABYTE)
-#define ONE_TERABYTE (CURL_OFF_T_C(1024) * ONE_GIGABYTE)
-#define ONE_PETABYTE (CURL_OFF_T_C(1024) * ONE_TERABYTE)
-
- if(bytes < CURL_OFF_T_C(100000))
- snprintf(max5, 6, "%5" CURL_FORMAT_CURL_OFF_T, bytes);
-
- else if(bytes < CURL_OFF_T_C(10000) * ONE_KILOBYTE)
- snprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "k", bytes/ONE_KILOBYTE);
-
- else if(bytes < CURL_OFF_T_C(100) * ONE_MEGABYTE)
- /* 'XX.XM' is good as long as we're less than 100 megs */
- snprintf(max5, 6, "%2" CURL_FORMAT_CURL_OFF_T ".%0"
- CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE,
- (bytes%ONE_MEGABYTE) / (ONE_MEGABYTE/CURL_OFF_T_C(10)) );
-
-#if (CURL_SIZEOF_CURL_OFF_T > 4)
-
- else if(bytes < CURL_OFF_T_C(10000) * ONE_MEGABYTE)
- /* 'XXXXM' is good until we're at 10000MB or above */
- snprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE);
-
- else if(bytes < CURL_OFF_T_C(100) * ONE_GIGABYTE)
- /* 10000 MB - 100 GB, we show it as XX.XG */
- snprintf(max5, 6, "%2" CURL_FORMAT_CURL_OFF_T ".%0"
- CURL_FORMAT_CURL_OFF_T "G", bytes/ONE_GIGABYTE,
- (bytes%ONE_GIGABYTE) / (ONE_GIGABYTE/CURL_OFF_T_C(10)) );
-
- else if(bytes < CURL_OFF_T_C(10000) * ONE_GIGABYTE)
- /* up to 10000GB, display without decimal: XXXXG */
- snprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "G", bytes/ONE_GIGABYTE);
-
- else if(bytes < CURL_OFF_T_C(10000) * ONE_TERABYTE)
- /* up to 10000TB, display without decimal: XXXXT */
- snprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "T", bytes/ONE_TERABYTE);
-
- else
- /* up to 10000PB, display without decimal: XXXXP */
- snprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "P", bytes/ONE_PETABYTE);
-
- /* 16384 petabytes (16 exabytes) is the maximum a 64 bit unsigned number
- can hold, but our data type is signed so 8192PB will be the maximum. */
-
-#else
-
- else
- snprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE);
-
-#endif
-
- return max5;
-}
-
-/*
-
- New proposed interface, 9th of February 2000:
-
- pgrsStartNow() - sets start time
- pgrsSetDownloadSize(x) - known expected download size
- pgrsSetUploadSize(x) - known expected upload size
- pgrsSetDownloadCounter() - amount of data currently downloaded
- pgrsSetUploadCounter() - amount of data currently uploaded
- pgrsUpdate() - show progress
- pgrsDone() - transfer complete
-
-*/
-
-int Curl_pgrsDone(struct connectdata *conn)
-{
- int rc;
- struct SessionHandle *data = conn->data;
- data->progress.lastshow=0;
- rc = Curl_pgrsUpdate(conn); /* the final (forced) update */
- if(rc)
- return rc;
-
- if(!(data->progress.flags & PGRS_HIDE) &&
- !data->progress.callback)
- /* only output if we don't use a progress callback and we're not
- * hidden */
- fprintf(data->set.err, "\n");
-
- data->progress.speeder_c = 0; /* reset the progress meter display */
- return 0;
-}
-
-/* reset all times except redirect, and reset the known transfer sizes */
-void Curl_pgrsResetTimesSizes(struct SessionHandle *data)
-{
- data->progress.t_nslookup = 0.0;
- data->progress.t_connect = 0.0;
- data->progress.t_pretransfer = 0.0;
- data->progress.t_starttransfer = 0.0;
-
- Curl_pgrsSetDownloadSize(data, -1);
- Curl_pgrsSetUploadSize(data, -1);
-}
-
-void Curl_pgrsTime(struct SessionHandle *data, timerid timer)
-{
- struct timeval now = Curl_tvnow();
-
- switch(timer) {
- default:
- case TIMER_NONE:
- /* mistake filter */
- break;
- case TIMER_STARTOP:
- /* This is set at the start of a transfer */
- data->progress.t_startop = now;
- break;
- case TIMER_STARTSINGLE:
- /* This is set at the start of each single fetch */
- data->progress.t_startsingle = now;
- break;
-
- case TIMER_STARTACCEPT:
- data->progress.t_acceptdata = Curl_tvnow();
- break;
-
- case TIMER_NAMELOOKUP:
- data->progress.t_nslookup =
- Curl_tvdiff_secs(now, data->progress.t_startsingle);
- break;
- case TIMER_CONNECT:
- data->progress.t_connect =
- Curl_tvdiff_secs(now, data->progress.t_startsingle);
- break;
- case TIMER_APPCONNECT:
- data->progress.t_appconnect =
- Curl_tvdiff_secs(now, data->progress.t_startsingle);
- break;
- case TIMER_PRETRANSFER:
- data->progress.t_pretransfer =
- Curl_tvdiff_secs(now, data->progress.t_startsingle);
- break;
- case TIMER_STARTTRANSFER:
- data->progress.t_starttransfer =
- Curl_tvdiff_secs(now, data->progress.t_startsingle);
- break;
- case TIMER_POSTRANSFER:
- /* this is the normal end-of-transfer thing */
- break;
- case TIMER_REDIRECT:
- data->progress.t_redirect = Curl_tvdiff_secs(now, data->progress.start);
- break;
- }
-}
-
-void Curl_pgrsStartNow(struct SessionHandle *data)
-{
- data->progress.speeder_c = 0; /* reset the progress meter display */
- data->progress.start = Curl_tvnow();
- /* clear all bits except HIDE and HEADERS_OUT */
- data->progress.flags &= PGRS_HIDE|PGRS_HEADERS_OUT;
-}
-
-void Curl_pgrsSetDownloadCounter(struct SessionHandle *data, curl_off_t size)
-{
- data->progress.downloaded = size;
-}
-
-void Curl_pgrsSetUploadCounter(struct SessionHandle *data, curl_off_t size)
-{
- data->progress.uploaded = size;
-}
-
-void Curl_pgrsSetDownloadSize(struct SessionHandle *data, curl_off_t size)
-{
- if(size >= 0) {
- data->progress.size_dl = size;
- data->progress.flags |= PGRS_DL_SIZE_KNOWN;
- }
- else {
- data->progress.size_dl = 0;
- data->progress.flags &= ~PGRS_DL_SIZE_KNOWN;
- }
-}
-
-void Curl_pgrsSetUploadSize(struct SessionHandle *data, curl_off_t size)
-{
- if(size >= 0) {
- data->progress.size_ul = size;
- data->progress.flags |= PGRS_UL_SIZE_KNOWN;
- }
- else {
- data->progress.size_ul = 0;
- data->progress.flags &= ~PGRS_UL_SIZE_KNOWN;
- }
-}
-
-/*
- * Curl_pgrsUpdate() returns 0 for success or the value returned by the
- * progress callback!
- */
-int Curl_pgrsUpdate(struct connectdata *conn)
-{
- struct timeval now;
- int result;
- char max5[6][10];
- curl_off_t dlpercen=0;
- curl_off_t ulpercen=0;
- curl_off_t total_percen=0;
- curl_off_t total_transfer;
- curl_off_t total_expected_transfer;
- curl_off_t timespent;
- struct SessionHandle *data = conn->data;
- int nowindex = data->progress.speeder_c% CURR_TIME;
- int checkindex;
- int countindex; /* amount of seconds stored in the speeder array */
- char time_left[10];
- char time_total[10];
- char time_spent[10];
- curl_off_t ulestimate=0;
- curl_off_t dlestimate=0;
- curl_off_t total_estimate;
- bool shownow=FALSE;
-
- now = Curl_tvnow(); /* what time is it */
-
- /* The time spent so far (from the start) */
- data->progress.timespent =
- (double)(now.tv_sec - data->progress.start.tv_sec) +
- (double)(now.tv_usec - data->progress.start.tv_usec)/1000000.0;
- timespent = (curl_off_t)data->progress.timespent;
-
- /* The average download speed this far */
- data->progress.dlspeed = (curl_off_t)
- ((double)data->progress.downloaded/
- (data->progress.timespent>0?data->progress.timespent:1));
-
- /* The average upload speed this far */
- data->progress.ulspeed = (curl_off_t)
- ((double)data->progress.uploaded/
- (data->progress.timespent>0?data->progress.timespent:1));
-
- /* Calculations done at most once a second, unless end is reached */
- if(data->progress.lastshow != (long)now.tv_sec) {
- shownow = TRUE;
-
- data->progress.lastshow = now.tv_sec;
-
- /* Let's do the "current speed" thing, which should use the fastest
- of the dl/ul speeds. Store the faster speed at entry 'nowindex'. */
- data->progress.speeder[ nowindex ] =
- data->progress.downloaded>data->progress.uploaded?
- data->progress.downloaded:data->progress.uploaded;
-
- /* remember the exact time for this moment */
- data->progress.speeder_time [ nowindex ] = now;
-
- /* advance our speeder_c counter, which is increased every time we get
- here and we expect it to never wrap as 2^32 is a lot of seconds! */
- data->progress.speeder_c++;
-
- /* figure out how many index entries of data we have stored in our speeder
- array. With N_ENTRIES filled in, we have about N_ENTRIES-1 seconds of
- transfer. Imagine, after one second we have filled in two entries,
- after two seconds we've filled in three entries etc. */
- countindex = ((data->progress.speeder_c>=CURR_TIME)?
- CURR_TIME:data->progress.speeder_c) - 1;
-
- /* first of all, we don't do this if there's no counted seconds yet */
- if(countindex) {
- long span_ms;
-
- /* Get the index position to compare with the 'nowindex' position.
- Get the oldest entry possible. While we have less than CURR_TIME
- entries, the first entry will remain the oldest. */
- checkindex = (data->progress.speeder_c>=CURR_TIME)?
- data->progress.speeder_c%CURR_TIME:0;
-
- /* Figure out the exact time for the time span */
- span_ms = Curl_tvdiff(now,
- data->progress.speeder_time[checkindex]);
- if(0 == span_ms)
- span_ms=1; /* at least one millisecond MUST have passed */
-
- /* Calculate the average speed the last 'span_ms' milliseconds */
- {
- curl_off_t amount = data->progress.speeder[nowindex]-
- data->progress.speeder[checkindex];
-
- if(amount > CURL_OFF_T_C(4294967) /* 0xffffffff/1000 */)
- /* the 'amount' value is bigger than would fit in 32 bits if
- multiplied with 1000, so we use the double math for this */
- data->progress.current_speed = (curl_off_t)
- ((double)amount/((double)span_ms/1000.0));
- else
- /* the 'amount' value is small enough to fit within 32 bits even
- when multiplied with 1000 */
- data->progress.current_speed = amount*CURL_OFF_T_C(1000)/span_ms;
- }
- }
- else
- /* the first second we use the main average */
- data->progress.current_speed =
- (data->progress.ulspeed>data->progress.dlspeed)?
- data->progress.ulspeed:data->progress.dlspeed;
-
- } /* Calculations end */
-
- if(!(data->progress.flags & PGRS_HIDE)) {
- /* progress meter has not been shut off */
-
- if(data->set.fxferinfo) {
- /* There's a callback set, call that */
- result= data->set.fxferinfo(data->set.progress_client,
- data->progress.size_dl,
- data->progress.downloaded,
- data->progress.size_ul,
- data->progress.uploaded);
- if(result)
- failf(data, "Callback aborted");
- return result;
- }
- else if(data->set.fprogress) {
- /* The older deprecated callback is set, call that */
- result= data->set.fprogress(data->set.progress_client,
- (double)data->progress.size_dl,
- (double)data->progress.downloaded,
- (double)data->progress.size_ul,
- (double)data->progress.uploaded);
- if(result)
- failf(data, "Callback aborted");
- return result;
- }
-
- if(!shownow)
- /* only show the internal progress meter once per second */
- return 0;
-
- /* If there's no external callback set, use internal code to show
- progress */
-
- if(!(data->progress.flags & PGRS_HEADERS_OUT)) {
- if(data->state.resume_from) {
- fprintf(data->set.err,
- "** Resuming transfer from byte position %"
- CURL_FORMAT_CURL_OFF_T "\n", data->state.resume_from);
- }
- fprintf(data->set.err,
- " %% Total %% Received %% Xferd Average Speed "
- "Time Time Time Current\n"
- " Dload Upload "
- "Total Spent Left Speed\n");
- data->progress.flags |= PGRS_HEADERS_OUT; /* headers are shown */
- }
-
- /* Figure out the estimated time of arrival for the upload */
- if((data->progress.flags & PGRS_UL_SIZE_KNOWN) &&
- (data->progress.ulspeed > CURL_OFF_T_C(0))) {
- ulestimate = data->progress.size_ul / data->progress.ulspeed;
-
- if(data->progress.size_ul > CURL_OFF_T_C(10000))
- ulpercen = data->progress.uploaded /
- (data->progress.size_ul/CURL_OFF_T_C(100));
- else if(data->progress.size_ul > CURL_OFF_T_C(0))
- ulpercen = (data->progress.uploaded*100) /
- data->progress.size_ul;
- }
-
- /* ... and the download */
- if((data->progress.flags & PGRS_DL_SIZE_KNOWN) &&
- (data->progress.dlspeed > CURL_OFF_T_C(0))) {
- dlestimate = data->progress.size_dl / data->progress.dlspeed;
-
- if(data->progress.size_dl > CURL_OFF_T_C(10000))
- dlpercen = data->progress.downloaded /
- (data->progress.size_dl/CURL_OFF_T_C(100));
- else if(data->progress.size_dl > CURL_OFF_T_C(0))
- dlpercen = (data->progress.downloaded*100) /
- data->progress.size_dl;
- }
-
- /* Now figure out which of them is slower and use that one for the
- total estimate! */
- total_estimate = ulestimate>dlestimate?ulestimate:dlestimate;
-
- /* create the three time strings */
- time2str(time_left, total_estimate > 0?(total_estimate - timespent):0);
- time2str(time_total, total_estimate);
- time2str(time_spent, timespent);
-
- /* Get the total amount of data expected to get transferred */
- total_expected_transfer =
- (data->progress.flags & PGRS_UL_SIZE_KNOWN?
- data->progress.size_ul:data->progress.uploaded)+
- (data->progress.flags & PGRS_DL_SIZE_KNOWN?
- data->progress.size_dl:data->progress.downloaded);
-
- /* We have transferred this much so far */
- total_transfer = data->progress.downloaded + data->progress.uploaded;
-
- /* Get the percentage of data transferred so far */
- if(total_expected_transfer > CURL_OFF_T_C(10000))
- total_percen = total_transfer /
- (total_expected_transfer/CURL_OFF_T_C(100));
- else if(total_expected_transfer > CURL_OFF_T_C(0))
- total_percen = (total_transfer*100) / total_expected_transfer;
-
- fprintf(data->set.err,
- "\r"
- "%3" CURL_FORMAT_CURL_OFF_T " %s "
- "%3" CURL_FORMAT_CURL_OFF_T " %s "
- "%3" CURL_FORMAT_CURL_OFF_T " %s %s %s %s %s %s %s",
- total_percen, /* 3 letters */ /* total % */
- max5data(total_expected_transfer, max5[2]), /* total size */
- dlpercen, /* 3 letters */ /* rcvd % */
- max5data(data->progress.downloaded, max5[0]), /* rcvd size */
- ulpercen, /* 3 letters */ /* xfer % */
- max5data(data->progress.uploaded, max5[1]), /* xfer size */
- max5data(data->progress.dlspeed, max5[3]), /* avrg dl speed */
- max5data(data->progress.ulspeed, max5[4]), /* avrg ul speed */
- time_total, /* 8 letters */ /* total time */
- time_spent, /* 8 letters */ /* time spent */
- time_left, /* 8 letters */ /* time left */
- max5data(data->progress.current_speed, max5[5]) /* current speed */
- );
-
- /* we flush the output stream to make it appear as soon as possible */
- fflush(data->set.err);
-
- } /* !(data->progress.flags & PGRS_HIDE) */
-
- return 0;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/progress.h b/external/libcurl_android/jni/libcurl/lib/progress.h
deleted file mode 100755
index a1e6f1a2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/progress.h
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef HEADER_CURL_PROGRESS_H
-#define HEADER_CURL_PROGRESS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "timeval.h"
-
-
-typedef enum {
- TIMER_NONE,
- TIMER_STARTOP,
- TIMER_STARTSINGLE,
- TIMER_NAMELOOKUP,
- TIMER_CONNECT,
- TIMER_APPCONNECT,
- TIMER_PRETRANSFER,
- TIMER_STARTTRANSFER,
- TIMER_POSTRANSFER,
- TIMER_STARTACCEPT,
- TIMER_REDIRECT,
- TIMER_LAST /* must be last */
-} timerid;
-
-int Curl_pgrsDone(struct connectdata *);
-void Curl_pgrsStartNow(struct SessionHandle *data);
-void Curl_pgrsSetDownloadSize(struct SessionHandle *data, curl_off_t size);
-void Curl_pgrsSetUploadSize(struct SessionHandle *data, curl_off_t size);
-void Curl_pgrsSetDownloadCounter(struct SessionHandle *data, curl_off_t size);
-void Curl_pgrsSetUploadCounter(struct SessionHandle *data, curl_off_t size);
-int Curl_pgrsUpdate(struct connectdata *);
-void Curl_pgrsResetTimesSizes(struct SessionHandle *data);
-void Curl_pgrsTime(struct SessionHandle *data, timerid timer);
-
-
-/* Don't show progress for sizes smaller than: */
-#define LEAST_SIZE_PROGRESS BUFSIZE
-
-#define PROGRESS_DOWNLOAD (1<<0)
-#define PROGRESS_UPLOAD (1<<1)
-#define PROGRESS_DOWN_AND_UP (PROGRESS_UPLOAD | PROGRESS_DOWNLOAD)
-
-#define PGRS_SHOW_DL (1<<0)
-#define PGRS_SHOW_UL (1<<1)
-#define PGRS_DONE_DL (1<<2)
-#define PGRS_DONE_UL (1<<3)
-#define PGRS_HIDE (1<<4)
-#define PGRS_UL_SIZE_KNOWN (1<<5)
-#define PGRS_DL_SIZE_KNOWN (1<<6)
-
-#define PGRS_HEADERS_OUT (1<<7) /* set when the headers have been written */
-
-
-#endif /* HEADER_CURL_PROGRESS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/rawstr.c b/external/libcurl_android/jni/libcurl/lib/rawstr.c
deleted file mode 100755
index e27dac4a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/rawstr.c
+++ /dev/null
@@ -1,142 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "rawstr.h"
-
-/* Portable, consistent toupper (remember EBCDIC). Do not use toupper() because
- its behavior is altered by the current locale. */
-char Curl_raw_toupper(char in)
-{
- switch (in) {
- case 'a':
- return 'A';
- case 'b':
- return 'B';
- case 'c':
- return 'C';
- case 'd':
- return 'D';
- case 'e':
- return 'E';
- case 'f':
- return 'F';
- case 'g':
- return 'G';
- case 'h':
- return 'H';
- case 'i':
- return 'I';
- case 'j':
- return 'J';
- case 'k':
- return 'K';
- case 'l':
- return 'L';
- case 'm':
- return 'M';
- case 'n':
- return 'N';
- case 'o':
- return 'O';
- case 'p':
- return 'P';
- case 'q':
- return 'Q';
- case 'r':
- return 'R';
- case 's':
- return 'S';
- case 't':
- return 'T';
- case 'u':
- return 'U';
- case 'v':
- return 'V';
- case 'w':
- return 'W';
- case 'x':
- return 'X';
- case 'y':
- return 'Y';
- case 'z':
- return 'Z';
- }
- return in;
-}
-
-/*
- * Curl_raw_equal() is for doing "raw" case insensitive strings. This is meant
- * to be locale independent and only compare strings we know are safe for
- * this. See http://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for
- * some further explanation to why this function is necessary.
- *
- * The function is capable of comparing a-z case insensitively even for
- * non-ascii.
- */
-
-int Curl_raw_equal(const char *first, const char *second)
-{
- while(*first && *second) {
- if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
- /* get out of the loop as soon as they don't match */
- break;
- first++;
- second++;
- }
- /* we do the comparison here (possibly again), just to make sure that if the
- loop above is skipped because one of the strings reached zero, we must not
- return this as a successful match */
- return (Curl_raw_toupper(*first) == Curl_raw_toupper(*second));
-}
-
-int Curl_raw_nequal(const char *first, const char *second, size_t max)
-{
- while(*first && *second && max) {
- if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second)) {
- break;
- }
- max--;
- first++;
- second++;
- }
- if(0 == max)
- return 1; /* they are equal this far */
-
- return Curl_raw_toupper(*first) == Curl_raw_toupper(*second);
-}
-
-/* Copy an upper case version of the string from src to dest. The
- * strings may overlap. No more than n characters of the string are copied
- * (including any NUL) and the destination string will NOT be
- * NUL-terminated if that limit is reached.
- */
-void Curl_strntoupper(char *dest, const char *src, size_t n)
-{
- if(n < 1)
- return;
-
- do {
- *dest++ = Curl_raw_toupper(*src);
- } while(*src++ && --n);
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/rawstr.h b/external/libcurl_android/jni/libcurl/lib/rawstr.h
deleted file mode 100755
index b491460d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/rawstr.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef HEADER_CURL_RAWSTR_H
-#define HEADER_CURL_RAWSTR_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <curl/curl.h>
-
-/*
- * Curl_raw_equal() is for doing "raw" case insensitive strings. This is meant
- * to be locale independent and only compare strings we know are safe for
- * this.
- *
- * The function is capable of comparing a-z case insensitively even for
- * non-ascii.
- */
-int Curl_raw_equal(const char *first, const char *second);
-int Curl_raw_nequal(const char *first, const char *second, size_t max);
-
-char Curl_raw_toupper(char in);
-
-/* checkprefix() is a shorter version of the above, used when the first
- argument is zero-byte terminated */
-#define checkprefix(a,b) Curl_raw_nequal(a,b,strlen(a))
-
-void Curl_strntoupper(char *dest, const char *src, size_t n);
-
-#endif /* HEADER_CURL_RAWSTR_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/rtsp.c b/external/libcurl_android/jni/libcurl/lib/rtsp.c
deleted file mode 100755
index 029738d9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/rtsp.c
+++ /dev/null
@@ -1,809 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_RTSP
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "transfer.h"
-#include "sendf.h"
-#include "multiif.h"
-#include "http.h"
-#include "url.h"
-#include "progress.h"
-#include "rtsp.h"
-#include "rawstr.h"
-#include "curl_memory.h"
-#include "select.h"
-#include "connect.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * TODO (general)
- * -incoming server requests
- * -server CSeq counter
- * -digest authentication
- * -connect thru proxy
- * -pipelining?
- */
-
-
-#define RTP_PKT_CHANNEL(p) ((int)((unsigned char)((p)[1])))
-
-#define RTP_PKT_LENGTH(p) ((((int)((unsigned char)((p)[2]))) << 8) | \
- ((int)((unsigned char)((p)[3]))))
-
-/* protocol-specific functions set up to be called by the main engine */
-static CURLcode rtsp_do(struct connectdata *conn, bool *done);
-static CURLcode rtsp_done(struct connectdata *conn, CURLcode, bool premature);
-static CURLcode rtsp_connect(struct connectdata *conn, bool *done);
-static CURLcode rtsp_disconnect(struct connectdata *conn, bool dead);
-
-static int rtsp_getsock_do(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-
-/*
- * Parse and write out any available RTP data.
- *
- * nread: amount of data left after k->str. will be modified if RTP
- * data is parsed and k->str is moved up
- * readmore: whether or not the RTP parser needs more data right away
- */
-static CURLcode rtsp_rtp_readwrite(struct SessionHandle *data,
- struct connectdata *conn,
- ssize_t *nread,
- bool *readmore);
-
-static CURLcode rtsp_setup_connection(struct connectdata *conn);
-
-
-/* this returns the socket to wait for in the DO and DOING state for the multi
- interface and then we're always _sending_ a request and thus we wait for
- the single socket to become writable only */
-static int rtsp_getsock_do(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- /* write mode */
- (void)numsocks; /* unused, we trust it to be at least 1 */
- socks[0] = conn->sock[FIRSTSOCKET];
- return GETSOCK_WRITESOCK(0);
-}
-
-static
-CURLcode rtp_client_write(struct connectdata *conn, char *ptr, size_t len);
-
-
-/*
- * RTSP handler interface.
- */
-const struct Curl_handler Curl_handler_rtsp = {
- "RTSP", /* scheme */
- rtsp_setup_connection, /* setup_connection */
- rtsp_do, /* do_it */
- rtsp_done, /* done */
- ZERO_NULL, /* do_more */
- rtsp_connect, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- rtsp_getsock_do, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- rtsp_disconnect, /* disconnect */
- rtsp_rtp_readwrite, /* readwrite */
- PORT_RTSP, /* defport */
- CURLPROTO_RTSP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-
-static CURLcode rtsp_setup_connection(struct connectdata *conn)
-{
- struct RTSP *rtsp;
-
- conn->data->req.protop = rtsp = calloc(1, sizeof(struct RTSP));
- if(!rtsp)
- return CURLE_OUT_OF_MEMORY;
-
- return CURLE_OK;
-}
-
-
-/*
- * The server may send us RTP data at any point, and RTSPREQ_RECEIVE does not
- * want to block the application forever while receiving a stream. Therefore,
- * we cannot assume that an RTSP socket is dead just because it is readable.
- *
- * Instead, if it is readable, run Curl_getconnectinfo() to peek at the socket
- * and distinguish between closed and data.
- */
-bool Curl_rtsp_connisdead(struct connectdata *check)
-{
- int sval;
- bool ret_val = TRUE;
-
- sval = Curl_socket_ready(check->sock[FIRSTSOCKET], CURL_SOCKET_BAD, 0);
- if(sval == 0) {
- /* timeout */
- ret_val = FALSE;
- }
- else if(sval & CURL_CSELECT_ERR) {
- /* socket is in an error state */
- ret_val = TRUE;
- }
- else if((sval & CURL_CSELECT_IN) && check->data) {
- /* readable with no error. could be closed or could be alive but we can
- only check if we have a proper SessionHandle for the connection */
- curl_socket_t connectinfo = Curl_getconnectinfo(check->data, &check);
- if(connectinfo != CURL_SOCKET_BAD)
- ret_val = FALSE;
- }
-
- return ret_val;
-}
-
-static CURLcode rtsp_connect(struct connectdata *conn, bool *done)
-{
- CURLcode httpStatus;
- struct SessionHandle *data = conn->data;
-
- httpStatus = Curl_http_connect(conn, done);
-
- /* Initialize the CSeq if not already done */
- if(data->state.rtsp_next_client_CSeq == 0)
- data->state.rtsp_next_client_CSeq = 1;
- if(data->state.rtsp_next_server_CSeq == 0)
- data->state.rtsp_next_server_CSeq = 1;
-
- conn->proto.rtspc.rtp_channel = -1;
-
- return httpStatus;
-}
-
-static CURLcode rtsp_disconnect(struct connectdata *conn, bool dead)
-{
- (void) dead;
- Curl_safefree(conn->proto.rtspc.rtp_buf);
- return CURLE_OK;
-}
-
-
-static CURLcode rtsp_done(struct connectdata *conn,
- CURLcode status, bool premature)
-{
- struct SessionHandle *data = conn->data;
- struct RTSP *rtsp = data->req.protop;
- CURLcode httpStatus;
- long CSeq_sent;
- long CSeq_recv;
-
- /* Bypass HTTP empty-reply checks on receive */
- if(data->set.rtspreq == RTSPREQ_RECEIVE)
- premature = TRUE;
-
- httpStatus = Curl_http_done(conn, status, premature);
-
- if(rtsp) {
- /* Check the sequence numbers */
- CSeq_sent = rtsp->CSeq_sent;
- CSeq_recv = rtsp->CSeq_recv;
- if((data->set.rtspreq != RTSPREQ_RECEIVE) && (CSeq_sent != CSeq_recv)) {
- failf(data,
- "The CSeq of this request %ld did not match the response %ld",
- CSeq_sent, CSeq_recv);
- return CURLE_RTSP_CSEQ_ERROR;
- }
- else if(data->set.rtspreq == RTSPREQ_RECEIVE &&
- (conn->proto.rtspc.rtp_channel == -1)) {
- infof(data, "Got an RTP Receive with a CSeq of %ld\n", CSeq_recv);
- /* TODO CPC: Server -> Client logic here */
- }
- }
-
- return httpStatus;
-}
-
-static CURLcode rtsp_do(struct connectdata *conn, bool *done)
-{
- struct SessionHandle *data = conn->data;
- CURLcode result=CURLE_OK;
- Curl_RtspReq rtspreq = data->set.rtspreq;
- struct RTSP *rtsp = data->req.protop;
- struct HTTP *http;
- Curl_send_buffer *req_buffer;
- curl_off_t postsize = 0; /* for ANNOUNCE and SET_PARAMETER */
- curl_off_t putsize = 0; /* for ANNOUNCE and SET_PARAMETER */
-
- const char *p_request = NULL;
- const char *p_session_id = NULL;
- const char *p_accept = NULL;
- const char *p_accept_encoding = NULL;
- const char *p_range = NULL;
- const char *p_referrer = NULL;
- const char *p_stream_uri = NULL;
- const char *p_transport = NULL;
- const char *p_uagent = NULL;
-
- *done = TRUE;
-
- http = &(rtsp->http_wrapper);
- /* Assert that no one has changed the RTSP struct in an evil way */
- DEBUGASSERT((void *)http == (void *)rtsp);
-
- rtsp->CSeq_sent = data->state.rtsp_next_client_CSeq;
- rtsp->CSeq_recv = 0;
-
- /* Setup the 'p_request' pointer to the proper p_request string
- * Since all RTSP requests are included here, there is no need to
- * support custom requests like HTTP.
- **/
- DEBUGASSERT((rtspreq > RTSPREQ_NONE && rtspreq < RTSPREQ_LAST));
- data->set.opt_no_body = TRUE; /* most requests don't contain a body */
- switch(rtspreq) {
- case RTSPREQ_NONE:
- failf(data, "Got invalid RTSP request: RTSPREQ_NONE");
- return CURLE_BAD_FUNCTION_ARGUMENT;
- case RTSPREQ_OPTIONS:
- p_request = "OPTIONS";
- break;
- case RTSPREQ_DESCRIBE:
- p_request = "DESCRIBE";
- data->set.opt_no_body = FALSE;
- break;
- case RTSPREQ_ANNOUNCE:
- p_request = "ANNOUNCE";
- break;
- case RTSPREQ_SETUP:
- p_request = "SETUP";
- break;
- case RTSPREQ_PLAY:
- p_request = "PLAY";
- break;
- case RTSPREQ_PAUSE:
- p_request = "PAUSE";
- break;
- case RTSPREQ_TEARDOWN:
- p_request = "TEARDOWN";
- break;
- case RTSPREQ_GET_PARAMETER:
- /* GET_PARAMETER's no_body status is determined later */
- p_request = "GET_PARAMETER";
- data->set.opt_no_body = FALSE;
- break;
- case RTSPREQ_SET_PARAMETER:
- p_request = "SET_PARAMETER";
- break;
- case RTSPREQ_RECORD:
- p_request = "RECORD";
- break;
- case RTSPREQ_RECEIVE:
- p_request = "";
- /* Treat interleaved RTP as body*/
- data->set.opt_no_body = FALSE;
- break;
- case RTSPREQ_LAST:
- failf(data, "Got invalid RTSP request: RTSPREQ_LAST");
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
-
- if(rtspreq == RTSPREQ_RECEIVE) {
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE,
- &http->readbytecount, -1, NULL);
-
- return result;
- }
-
- p_session_id = data->set.str[STRING_RTSP_SESSION_ID];
- if(!p_session_id &&
- (rtspreq & ~(RTSPREQ_OPTIONS | RTSPREQ_DESCRIBE | RTSPREQ_SETUP))) {
- failf(data, "Refusing to issue an RTSP request [%s] without a session ID.",
- p_request ? p_request : "");
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
-
- /* TODO: auth? */
- /* TODO: proxy? */
-
- /* Stream URI. Default to server '*' if not specified */
- if(data->set.str[STRING_RTSP_STREAM_URI]) {
- p_stream_uri = data->set.str[STRING_RTSP_STREAM_URI];
- }
- else {
- p_stream_uri = "*";
- }
-
- /* Transport Header for SETUP requests */
- p_transport = Curl_checkheaders(conn, "Transport:");
- if(rtspreq == RTSPREQ_SETUP && !p_transport) {
- /* New Transport: setting? */
- if(data->set.str[STRING_RTSP_TRANSPORT]) {
- Curl_safefree(conn->allocptr.rtsp_transport);
-
- conn->allocptr.rtsp_transport =
- aprintf("Transport: %s\r\n",
- data->set.str[STRING_RTSP_TRANSPORT]);
- if(!conn->allocptr.rtsp_transport)
- return CURLE_OUT_OF_MEMORY;
- }
- else {
- failf(data,
- "Refusing to issue an RTSP SETUP without a Transport: header.");
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
-
- p_transport = conn->allocptr.rtsp_transport;
- }
-
- /* Accept Headers for DESCRIBE requests */
- if(rtspreq == RTSPREQ_DESCRIBE) {
- /* Accept Header */
- p_accept = Curl_checkheaders(conn, "Accept:")?
- NULL:"Accept: application/sdp\r\n";
-
- /* Accept-Encoding header */
- if(!Curl_checkheaders(conn, "Accept-Encoding:") &&
- data->set.str[STRING_ENCODING]) {
- Curl_safefree(conn->allocptr.accept_encoding);
- conn->allocptr.accept_encoding =
- aprintf("Accept-Encoding: %s\r\n", data->set.str[STRING_ENCODING]);
-
- if(!conn->allocptr.accept_encoding)
- return CURLE_OUT_OF_MEMORY;
-
- p_accept_encoding = conn->allocptr.accept_encoding;
- }
- }
-
- /* The User-Agent string might have been allocated in url.c already, because
- it might have been used in the proxy connect, but if we have got a header
- with the user-agent string specified, we erase the previously made string
- here. */
- if(Curl_checkheaders(conn, "User-Agent:") && conn->allocptr.uagent) {
- Curl_safefree(conn->allocptr.uagent);
- conn->allocptr.uagent = NULL;
- }
- else if(!Curl_checkheaders(conn, "User-Agent:") &&
- data->set.str[STRING_USERAGENT]) {
- p_uagent = conn->allocptr.uagent;
- }
-
- /* Referrer */
- Curl_safefree(conn->allocptr.ref);
- if(data->change.referer && !Curl_checkheaders(conn, "Referer:"))
- conn->allocptr.ref = aprintf("Referer: %s\r\n", data->change.referer);
- else
- conn->allocptr.ref = NULL;
-
- p_referrer = conn->allocptr.ref;
-
- /*
- * Range Header
- * Only applies to PLAY, PAUSE, RECORD
- *
- * Go ahead and use the Range stuff supplied for HTTP
- */
- if(data->state.use_range &&
- (rtspreq & (RTSPREQ_PLAY | RTSPREQ_PAUSE | RTSPREQ_RECORD))) {
-
- /* Check to see if there is a range set in the custom headers */
- if(!Curl_checkheaders(conn, "Range:") && data->state.range) {
- Curl_safefree(conn->allocptr.rangeline);
- conn->allocptr.rangeline = aprintf("Range: %s\r\n", data->state.range);
- p_range = conn->allocptr.rangeline;
- }
- }
-
- /*
- * Sanity check the custom headers
- */
- if(Curl_checkheaders(conn, "CSeq:")) {
- failf(data, "CSeq cannot be set as a custom header.");
- return CURLE_RTSP_CSEQ_ERROR;
- }
- if(Curl_checkheaders(conn, "Session:")) {
- failf(data, "Session ID cannot be set as a custom header.");
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
-
- /* Initialize a dynamic send buffer */
- req_buffer = Curl_add_buffer_init();
-
- if(!req_buffer)
- return CURLE_OUT_OF_MEMORY;
-
- result =
- Curl_add_bufferf(req_buffer,
- "%s %s RTSP/1.0\r\n" /* Request Stream-URI RTSP/1.0 */
- "CSeq: %ld\r\n", /* CSeq */
- (p_request ? p_request : ""), p_stream_uri,
- rtsp->CSeq_sent);
- if(result)
- return result;
-
- /*
- * Rather than do a normal alloc line, keep the session_id unformatted
- * to make comparison easier
- */
- if(p_session_id) {
- result = Curl_add_bufferf(req_buffer, "Session: %s\r\n", p_session_id);
- if(result)
- return result;
- }
-
- /*
- * Shared HTTP-like options
- */
- result = Curl_add_bufferf(req_buffer,
- "%s" /* transport */
- "%s" /* accept */
- "%s" /* accept-encoding */
- "%s" /* range */
- "%s" /* referrer */
- "%s" /* user-agent */
- ,
- p_transport ? p_transport : "",
- p_accept ? p_accept : "",
- p_accept_encoding ? p_accept_encoding : "",
- p_range ? p_range : "",
- p_referrer ? p_referrer : "",
- p_uagent ? p_uagent : "");
- if(result)
- return result;
-
- if((rtspreq == RTSPREQ_SETUP) || (rtspreq == RTSPREQ_DESCRIBE)) {
- result = Curl_add_timecondition(data, req_buffer);
- if(result)
- return result;
- }
-
- result = Curl_add_custom_headers(conn, FALSE, req_buffer);
- if(result)
- return result;
-
- if(rtspreq == RTSPREQ_ANNOUNCE ||
- rtspreq == RTSPREQ_SET_PARAMETER ||
- rtspreq == RTSPREQ_GET_PARAMETER) {
-
- if(data->set.upload) {
- putsize = data->state.infilesize;
- data->set.httpreq = HTTPREQ_PUT;
-
- }
- else {
- postsize = (data->set.postfieldsize != -1)?
- data->set.postfieldsize:
- (data->set.postfields? (curl_off_t)strlen(data->set.postfields):0);
- data->set.httpreq = HTTPREQ_POST;
- }
-
- if(putsize > 0 || postsize > 0) {
- /* As stated in the http comments, it is probably not wise to
- * actually set a custom Content-Length in the headers */
- if(!Curl_checkheaders(conn, "Content-Length:")) {
- result = Curl_add_bufferf(req_buffer,
- "Content-Length: %" CURL_FORMAT_CURL_OFF_T"\r\n",
- (data->set.upload ? putsize : postsize));
- if(result)
- return result;
- }
-
- if(rtspreq == RTSPREQ_SET_PARAMETER ||
- rtspreq == RTSPREQ_GET_PARAMETER) {
- if(!Curl_checkheaders(conn, "Content-Type:")) {
- result = Curl_add_bufferf(req_buffer,
- "Content-Type: text/parameters\r\n");
- if(result)
- return result;
- }
- }
-
- if(rtspreq == RTSPREQ_ANNOUNCE) {
- if(!Curl_checkheaders(conn, "Content-Type:")) {
- result = Curl_add_bufferf(req_buffer,
- "Content-Type: application/sdp\r\n");
- if(result)
- return result;
- }
- }
-
- data->state.expect100header = FALSE; /* RTSP posts are simple/small */
- }
- else if(rtspreq == RTSPREQ_GET_PARAMETER) {
- /* Check for an empty GET_PARAMETER (heartbeat) request */
- data->set.httpreq = HTTPREQ_HEAD;
- data->set.opt_no_body = TRUE;
- }
- }
-
- /* RTSP never allows chunked transfer */
- data->req.forbidchunk = TRUE;
- /* Finish the request buffer */
- result = Curl_add_buffer(req_buffer, "\r\n", 2);
- if(result)
- return result;
-
- if(postsize > 0) {
- result = Curl_add_buffer(req_buffer, data->set.postfields,
- (size_t)postsize);
- if(result)
- return result;
- }
-
- /* issue the request */
- result = Curl_add_buffer_send(req_buffer, conn,
- &data->info.request_size, 0, FIRSTSOCKET);
- if(result) {
- failf(data, "Failed sending RTSP request");
- return result;
- }
-
- Curl_setup_transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount,
- putsize?FIRSTSOCKET:-1,
- putsize?&http->writebytecount:NULL);
-
- /* Increment the CSeq on success */
- data->state.rtsp_next_client_CSeq++;
-
- if(http->writebytecount) {
- /* if a request-body has been sent off, we make sure this progress is
- noted properly */
- Curl_pgrsSetUploadCounter(data, http->writebytecount);
- if(Curl_pgrsUpdate(conn))
- result = CURLE_ABORTED_BY_CALLBACK;
- }
-
- return result;
-}
-
-
-static CURLcode rtsp_rtp_readwrite(struct SessionHandle *data,
- struct connectdata *conn,
- ssize_t *nread,
- bool *readmore) {
- struct SingleRequest *k = &data->req;
- struct rtsp_conn *rtspc = &(conn->proto.rtspc);
-
- char *rtp; /* moving pointer to rtp data */
- ssize_t rtp_dataleft; /* how much data left to parse in this round */
- char *scratch;
- CURLcode result;
-
- if(rtspc->rtp_buf) {
- /* There was some leftover data the last time. Merge buffers */
- char *newptr = realloc(rtspc->rtp_buf, rtspc->rtp_bufsize + *nread);
- if(!newptr) {
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = NULL;
- rtspc->rtp_bufsize = 0;
- return CURLE_OUT_OF_MEMORY;
- }
- rtspc->rtp_buf = newptr;
- memcpy(rtspc->rtp_buf + rtspc->rtp_bufsize, k->str, *nread);
- rtspc->rtp_bufsize += *nread;
- rtp = rtspc->rtp_buf;
- rtp_dataleft = rtspc->rtp_bufsize;
- }
- else {
- /* Just parse the request buffer directly */
- rtp = k->str;
- rtp_dataleft = *nread;
- }
-
- while((rtp_dataleft > 0) &&
- (rtp[0] == '$')) {
- if(rtp_dataleft > 4) {
- int rtp_length;
-
- /* Parse the header */
- /* The channel identifier immediately follows and is 1 byte */
- rtspc->rtp_channel = RTP_PKT_CHANNEL(rtp);
-
- /* The length is two bytes */
- rtp_length = RTP_PKT_LENGTH(rtp);
-
- if(rtp_dataleft < rtp_length + 4) {
- /* Need more - incomplete payload*/
- *readmore = TRUE;
- break;
- }
- else {
- /* We have the full RTP interleaved packet
- * Write out the header including the leading '$' */
- DEBUGF(infof(data, "RTP write channel %d rtp_length %d\n",
- rtspc->rtp_channel, rtp_length));
- result = rtp_client_write(conn, &rtp[0], rtp_length + 4);
- if(result) {
- failf(data, "Got an error writing an RTP packet");
- *readmore = FALSE;
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = NULL;
- rtspc->rtp_bufsize = 0;
- return result;
- }
-
- /* Move forward in the buffer */
- rtp_dataleft -= rtp_length + 4;
- rtp += rtp_length + 4;
-
- if(data->set.rtspreq == RTSPREQ_RECEIVE) {
- /* If we are in a passive receive, give control back
- * to the app as often as we can.
- */
- k->keepon &= ~KEEP_RECV;
- }
- }
- }
- else {
- /* Need more - incomplete header */
- *readmore = TRUE;
- break;
- }
- }
-
- if(rtp_dataleft != 0 && rtp[0] == '$') {
- DEBUGF(infof(data, "RTP Rewinding %zd %s\n", rtp_dataleft,
- *readmore ? "(READMORE)" : ""));
-
- /* Store the incomplete RTP packet for a "rewind" */
- scratch = malloc(rtp_dataleft);
- if(!scratch) {
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = NULL;
- rtspc->rtp_bufsize = 0;
- return CURLE_OUT_OF_MEMORY;
- }
- memcpy(scratch, rtp, rtp_dataleft);
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = scratch;
- rtspc->rtp_bufsize = rtp_dataleft;
-
- /* As far as the transfer is concerned, this data is consumed */
- *nread = 0;
- return CURLE_OK;
- }
- else {
- /* Fix up k->str to point just after the last RTP packet */
- k->str += *nread - rtp_dataleft;
-
- /* either all of the data has been read or...
- * rtp now points at the next byte to parse
- */
- if(rtp_dataleft > 0)
- DEBUGASSERT(k->str[0] == rtp[0]);
-
- DEBUGASSERT(rtp_dataleft <= *nread); /* sanity check */
-
- *nread = rtp_dataleft;
- }
-
- /* If we get here, we have finished with the leftover/merge buffer */
- Curl_safefree(rtspc->rtp_buf);
- rtspc->rtp_buf = NULL;
- rtspc->rtp_bufsize = 0;
-
- return CURLE_OK;
-}
-
-static
-CURLcode rtp_client_write(struct connectdata *conn, char *ptr, size_t len)
-{
- struct SessionHandle *data = conn->data;
- size_t wrote;
- curl_write_callback writeit;
-
- if(len == 0) {
- failf (data, "Cannot write a 0 size RTP packet.");
- return CURLE_WRITE_ERROR;
- }
-
- writeit = data->set.fwrite_rtp?data->set.fwrite_rtp:data->set.fwrite_func;
- wrote = writeit(ptr, 1, len, data->set.rtp_out);
-
- if(CURL_WRITEFUNC_PAUSE == wrote) {
- failf (data, "Cannot pause RTP");
- return CURLE_WRITE_ERROR;
- }
-
- if(wrote != len) {
- failf (data, "Failed writing RTP data");
- return CURLE_WRITE_ERROR;
- }
-
- return CURLE_OK;
-}
-
-CURLcode Curl_rtsp_parseheader(struct connectdata *conn,
- char *header)
-{
- struct SessionHandle *data = conn->data;
- long CSeq = 0;
-
- if(checkprefix("CSeq:", header)) {
- /* Store the received CSeq. Match is verified in rtsp_done */
- int nc = sscanf(&header[4], ": %ld", &CSeq);
- if(nc == 1) {
- struct RTSP *rtsp = data->req.protop;
- rtsp->CSeq_recv = CSeq; /* mark the request */
- data->state.rtsp_CSeq_recv = CSeq; /* update the handle */
- }
- else {
- failf(data, "Unable to read the CSeq header: [%s]", header);
- return CURLE_RTSP_CSEQ_ERROR;
- }
- }
- else if(checkprefix("Session:", header)) {
- char *start;
-
- /* Find the first non-space letter */
- start = header + 8;
- while(*start && ISSPACE(*start))
- start++;
-
- if(!*start) {
- failf(data, "Got a blank Session ID");
- }
- else if(data->set.str[STRING_RTSP_SESSION_ID]) {
- /* If the Session ID is set, then compare */
- if(strncmp(start, data->set.str[STRING_RTSP_SESSION_ID],
- strlen(data->set.str[STRING_RTSP_SESSION_ID])) != 0) {
- failf(data, "Got RTSP Session ID Line [%s], but wanted ID [%s]",
- start, data->set.str[STRING_RTSP_SESSION_ID]);
- return CURLE_RTSP_SESSION_ERROR;
- }
- }
- else {
- /* If the Session ID is not set, and we find it in a response, then
- set it */
-
- /* The session ID can be an alphanumeric or a 'safe' character
- *
- * RFC 2326 15.1 Base Syntax:
- * safe = "\$" | "-" | "_" | "." | "+"
- * */
- char *end = start;
- while(*end &&
- (ISALNUM(*end) || *end == '-' || *end == '_' || *end == '.' ||
- *end == '+' ||
- (*end == '\\' && *(end + 1) && *(end + 1) == '$' && (++end, 1))))
- end++;
-
- /* Copy the id substring into a new buffer */
- data->set.str[STRING_RTSP_SESSION_ID] = malloc(end - start + 1);
- if(data->set.str[STRING_RTSP_SESSION_ID] == NULL)
- return CURLE_OUT_OF_MEMORY;
- memcpy(data->set.str[STRING_RTSP_SESSION_ID], start, end - start);
- (data->set.str[STRING_RTSP_SESSION_ID])[end - start] = '\0';
- }
- }
- return CURLE_OK;
-}
-
-#endif /* CURL_DISABLE_RTSP */
diff --git a/external/libcurl_android/jni/libcurl/lib/rtsp.h b/external/libcurl_android/jni/libcurl/lib/rtsp.h
deleted file mode 100755
index 3ffa70cc..00000000
--- a/external/libcurl_android/jni/libcurl/lib/rtsp.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef HEADER_CURL_RTSP_H
-#define HEADER_CURL_RTSP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#ifndef CURL_DISABLE_RTSP
-
-extern const struct Curl_handler Curl_handler_rtsp;
-
-bool Curl_rtsp_connisdead(struct connectdata *check);
-CURLcode Curl_rtsp_parseheader(struct connectdata *conn, char *header);
-
-#else
-/* disabled */
-#define Curl_rtsp_parseheader(x,y) CURLE_NOT_BUILT_IN
-#define Curl_rtsp_connisdead(x) TRUE
-
-#endif /* CURL_DISABLE_RTSP */
-
-/*
- * RTSP Connection data
- *
- * Currently, only used for tracking incomplete RTP data reads
- */
-struct rtsp_conn {
- char *rtp_buf;
- ssize_t rtp_bufsize;
- int rtp_channel;
-};
-
-/****************************************************************************
- * RTSP unique setup
- ***************************************************************************/
-struct RTSP {
- /*
- * http_wrapper MUST be the first element of this structure for the wrap
- * logic to work. In this way, we get a cheap polymorphism because
- * &(data->state.proto.rtsp) == &(data->state.proto.http) per the C spec
- *
- * HTTP functions can safely treat this as an HTTP struct, but RTSP aware
- * functions can also index into the later elements.
- */
- struct HTTP http_wrapper; /*wrap HTTP to do the heavy lifting */
-
- long CSeq_sent; /* CSeq of this request */
- long CSeq_recv; /* CSeq received */
-};
-
-
-#endif /* HEADER_CURL_RTSP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/security.c b/external/libcurl_android/jni/libcurl/lib/security.c
deleted file mode 100755
index 508c7b41..00000000
--- a/external/libcurl_android/jni/libcurl/lib/security.c
+++ /dev/null
@@ -1,601 +0,0 @@
-/* This source code was modified by Martin Hedenfalk <mhe@stacken.kth.se> for
- * use in Curl. His latest changes were done 2000-09-18.
- *
- * It has since been patched and modified a lot by Daniel Stenberg
- * <daniel@haxx.se> to make it better applied to curl conditions, and to make
- * it not use globals, pollute name space and more. This source code awaits a
- * rewrite to work around the paragraph 2 in the BSD licenses as explained
- * below.
- *
- * Copyright (c) 1998, 1999, 2013 Kungliga Tekniska Högskolan
- * (Royal Institute of Technology, Stockholm, Sweden).
- *
- * Copyright (C) 2001 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * 3. Neither the name of the Institute nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE. */
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_FTP
-#ifdef HAVE_GSSAPI
-
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include "urldata.h"
-#include "curl_base64.h"
-#include "curl_memory.h"
-#include "curl_sec.h"
-#include "ftp.h"
-#include "sendf.h"
-#include "rawstr.h"
-#include "warnless.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static const struct {
- enum protection_level level;
- const char *name;
-} level_names[] = {
- { PROT_CLEAR, "clear" },
- { PROT_SAFE, "safe" },
- { PROT_CONFIDENTIAL, "confidential" },
- { PROT_PRIVATE, "private" }
-};
-
-static enum protection_level
-name_to_level(const char *name)
-{
- int i;
- for(i = 0; i < (int)sizeof(level_names)/(int)sizeof(level_names[0]); i++)
- if(checkprefix(name, level_names[i].name))
- return level_names[i].level;
- return PROT_NONE;
-}
-
-/* Convert a protocol |level| to its char representation.
- We take an int to catch programming mistakes. */
-static char level_to_char(int level) {
- switch(level) {
- case PROT_CLEAR:
- return 'C';
- case PROT_SAFE:
- return 'S';
- case PROT_CONFIDENTIAL:
- return 'E';
- case PROT_PRIVATE:
- return 'P';
- case PROT_CMD:
- /* Fall through */
- default:
- /* Those 2 cases should not be reached! */
- break;
- }
- DEBUGASSERT(0);
- /* Default to the most secure alternative. */
- return 'P';
-}
-
-static const struct Curl_sec_client_mech * const mechs[] = {
-#ifdef HAVE_GSSAPI
- &Curl_krb5_client_mech,
-#endif
- NULL
-};
-
-/* Send an FTP command defined by |message| and the optional arguments. The
- function returns the ftp_code. If an error occurs, -1 is returned. */
-static int ftp_send_command(struct connectdata *conn, const char *message, ...)
-{
- int ftp_code;
- ssize_t nread;
- va_list args;
- char print_buffer[50];
-
- va_start(args, message);
- vsnprintf(print_buffer, sizeof(print_buffer), message, args);
- va_end(args);
-
- if(Curl_ftpsendf(conn, print_buffer) != CURLE_OK) {
- ftp_code = -1;
- }
- else {
- if(Curl_GetFTPResponse(&nread, conn, &ftp_code) != CURLE_OK)
- ftp_code = -1;
- }
-
- (void)nread; /* Unused */
- return ftp_code;
-}
-
-/* Read |len| from the socket |fd| and store it in |to|. Return a CURLcode
- saying whether an error occurred or CURLE_OK if |len| was read. */
-static CURLcode
-socket_read(curl_socket_t fd, void *to, size_t len)
-{
- char *to_p = to;
- CURLcode code;
- ssize_t nread;
-
- while(len > 0) {
- code = Curl_read_plain(fd, to_p, len, &nread);
- if(code == CURLE_OK) {
- len -= nread;
- to_p += nread;
- }
- else {
- /* FIXME: We are doing a busy wait */
- if(code == CURLE_AGAIN)
- continue;
- return code;
- }
- }
- return CURLE_OK;
-}
-
-
-/* Write |len| bytes from the buffer |to| to the socket |fd|. Return a
- CURLcode saying whether an error occurred or CURLE_OK if |len| was
- written. */
-static CURLcode
-socket_write(struct connectdata *conn, curl_socket_t fd, const void *to,
- size_t len)
-{
- const char *to_p = to;
- CURLcode code;
- ssize_t written;
-
- while(len > 0) {
- code = Curl_write_plain(conn, fd, to_p, len, &written);
- if(code == CURLE_OK) {
- len -= written;
- to_p += written;
- }
- else {
- /* FIXME: We are doing a busy wait */
- if(code == CURLE_AGAIN)
- continue;
- return code;
- }
- }
- return CURLE_OK;
-}
-
-static CURLcode read_data(struct connectdata *conn,
- curl_socket_t fd,
- struct krb5buffer *buf)
-{
- int len;
- void* tmp;
- CURLcode ret;
-
- ret = socket_read(fd, &len, sizeof(len));
- if(ret != CURLE_OK)
- return ret;
-
- len = ntohl(len);
- tmp = realloc(buf->data, len);
- if(tmp == NULL)
- return CURLE_OUT_OF_MEMORY;
-
- buf->data = tmp;
- ret = socket_read(fd, buf->data, len);
- if(ret != CURLE_OK)
- return ret;
- buf->size = conn->mech->decode(conn->app_data, buf->data, len,
- conn->data_prot, conn);
- buf->index = 0;
- return CURLE_OK;
-}
-
-static size_t
-buffer_read(struct krb5buffer *buf, void *data, size_t len)
-{
- if(buf->size - buf->index < len)
- len = buf->size - buf->index;
- memcpy(data, (char*)buf->data + buf->index, len);
- buf->index += len;
- return len;
-}
-
-/* Matches Curl_recv signature */
-static ssize_t sec_recv(struct connectdata *conn, int sockindex,
- char *buffer, size_t len, CURLcode *err)
-{
- size_t bytes_read;
- size_t total_read = 0;
- curl_socket_t fd = conn->sock[sockindex];
-
- *err = CURLE_OK;
-
- /* Handle clear text response. */
- if(conn->sec_complete == 0 || conn->data_prot == PROT_CLEAR)
- return read(fd, buffer, len);
-
- if(conn->in_buffer.eof_flag) {
- conn->in_buffer.eof_flag = 0;
- return 0;
- }
-
- bytes_read = buffer_read(&conn->in_buffer, buffer, len);
- len -= bytes_read;
- total_read += bytes_read;
- buffer += bytes_read;
-
- while(len > 0) {
- if(read_data(conn, fd, &conn->in_buffer) != CURLE_OK)
- return -1;
- if(conn->in_buffer.size == 0) {
- if(bytes_read > 0)
- conn->in_buffer.eof_flag = 1;
- return bytes_read;
- }
- bytes_read = buffer_read(&conn->in_buffer, buffer, len);
- len -= bytes_read;
- total_read += bytes_read;
- buffer += bytes_read;
- }
- /* FIXME: Check for overflow */
- return total_read;
-}
-
-/* Send |length| bytes from |from| to the |fd| socket taking care of encoding
- and negociating with the server. |from| can be NULL. */
-/* FIXME: We don't check for errors nor report any! */
-static void do_sec_send(struct connectdata *conn, curl_socket_t fd,
- const char *from, int length)
-{
- int bytes, htonl_bytes; /* 32-bit integers for htonl */
- char *buffer = NULL;
- char *cmd_buffer;
- size_t cmd_size = 0;
- CURLcode error;
- enum protection_level prot_level = conn->data_prot;
- bool iscmd = (prot_level == PROT_CMD)?TRUE:FALSE;
-
- DEBUGASSERT(prot_level > PROT_NONE && prot_level < PROT_LAST);
-
- if(iscmd) {
- if(!strncmp(from, "PASS ", 5) || !strncmp(from, "ACCT ", 5))
- prot_level = PROT_PRIVATE;
- else
- prot_level = conn->command_prot;
- }
- bytes = conn->mech->encode(conn->app_data, from, length, prot_level,
- (void**)&buffer, conn);
- if(!buffer || bytes <= 0)
- return; /* error */
-
- if(iscmd) {
- error = Curl_base64_encode(conn->data, buffer, curlx_sitouz(bytes),
- &cmd_buffer, &cmd_size);
- if(error) {
- free(buffer);
- return; /* error */
- }
- if(cmd_size > 0) {
- static const char *enc = "ENC ";
- static const char *mic = "MIC ";
- if(prot_level == PROT_PRIVATE)
- socket_write(conn, fd, enc, 4);
- else
- socket_write(conn, fd, mic, 4);
-
- socket_write(conn, fd, cmd_buffer, cmd_size);
- socket_write(conn, fd, "\r\n", 2);
- infof(conn->data, "Send: %s%s\n", prot_level == PROT_PRIVATE?enc:mic,
- cmd_buffer);
- free(cmd_buffer);
- }
- }
- else {
- htonl_bytes = htonl(bytes);
- socket_write(conn, fd, &htonl_bytes, sizeof(htonl_bytes));
- socket_write(conn, fd, buffer, curlx_sitouz(bytes));
- }
- free(buffer);
-}
-
-static ssize_t sec_write(struct connectdata *conn, curl_socket_t fd,
- const char *buffer, size_t length)
-{
- /* FIXME: Check for overflow */
- ssize_t tx = 0, len = conn->buffer_size;
-
- len -= conn->mech->overhead(conn->app_data, conn->data_prot,
- curlx_sztosi(len));
- if(len <= 0)
- len = length;
- while(length) {
- if(len >= 0 || length < (size_t)len) {
- /* FIXME: Check for overflow. */
- len = length;
- }
- do_sec_send(conn, fd, buffer, curlx_sztosi(len));
- length -= len;
- buffer += len;
- tx += len;
- }
- return tx;
-}
-
-/* Matches Curl_send signature */
-static ssize_t sec_send(struct connectdata *conn, int sockindex,
- const void *buffer, size_t len, CURLcode *err)
-{
- curl_socket_t fd = conn->sock[sockindex];
- *err = CURLE_OK;
- return sec_write(conn, fd, buffer, len);
-}
-
-int Curl_sec_read_msg(struct connectdata *conn, char *buffer,
- enum protection_level level)
-{
- /* decoded_len should be size_t or ssize_t but conn->mech->decode returns an
- int */
- int decoded_len;
- char *buf;
- int ret_code;
- size_t decoded_sz = 0;
- CURLcode error;
-
- DEBUGASSERT(level > PROT_NONE && level < PROT_LAST);
-
- error = Curl_base64_decode(buffer + 4, (unsigned char **)&buf, &decoded_sz);
- if(error || decoded_sz == 0)
- return -1;
-
- if(decoded_sz > (size_t)INT_MAX) {
- free(buf);
- return -1;
- }
- decoded_len = curlx_uztosi(decoded_sz);
-
- decoded_len = conn->mech->decode(conn->app_data, buf, decoded_len,
- level, conn);
- if(decoded_len <= 0) {
- free(buf);
- return -1;
- }
-
- if(conn->data->set.verbose) {
- buf[decoded_len] = '\n';
- Curl_debug(conn->data, CURLINFO_HEADER_IN, buf, decoded_len + 1, conn);
- }
-
- buf[decoded_len] = '\0';
- DEBUGASSERT(decoded_len > 3);
- if(buf[3] == '-')
- ret_code = 0;
- else {
- /* Check for error? */
- sscanf(buf, "%d", &ret_code);
- }
-
- if(buf[decoded_len - 1] == '\n')
- buf[decoded_len - 1] = '\0';
- /* FIXME: Is |buffer| length always greater than |decoded_len|? */
- strcpy(buffer, buf);
- free(buf);
- return ret_code;
-}
-
-/* FIXME: The error code returned here is never checked. */
-static int sec_set_protection_level(struct connectdata *conn)
-{
- int code;
- char* pbsz;
- static unsigned int buffer_size = 1 << 20; /* 1048576 */
- enum protection_level level = conn->request_data_prot;
-
- DEBUGASSERT(level > PROT_NONE && level < PROT_LAST);
-
- if(!conn->sec_complete) {
- infof(conn->data, "Trying to change the protection level after the"
- "completion of the data exchange.\n");
- return -1;
- }
-
- /* Bail out if we try to set up the same level */
- if(conn->data_prot == level)
- return 0;
-
- if(level) {
- code = ftp_send_command(conn, "PBSZ %u", buffer_size);
- if(code < 0)
- return -1;
-
- if(code/100 != 2) {
- failf(conn->data, "Failed to set the protection's buffer size.");
- return -1;
- }
- conn->buffer_size = buffer_size;
-
- pbsz = strstr(conn->data->state.buffer, "PBSZ=");
- if(pbsz) {
- /* FIXME: Checks for errors in sscanf? */
- sscanf(pbsz, "PBSZ=%u", &buffer_size);
- if(buffer_size < conn->buffer_size)
- conn->buffer_size = buffer_size;
- }
- }
-
- /* Now try to negiociate the protection level. */
- code = ftp_send_command(conn, "PROT %c", level_to_char(level));
-
- if(code < 0)
- return -1;
-
- if(code/100 != 2) {
- failf(conn->data, "Failed to set the protection level.");
- return -1;
- }
-
- conn->data_prot = level;
- if(level == PROT_PRIVATE)
- conn->command_prot = level;
-
- return 0;
-}
-
-int
-Curl_sec_request_prot(struct connectdata *conn, const char *level)
-{
- enum protection_level l = name_to_level(level);
- if(l == PROT_NONE)
- return -1;
- DEBUGASSERT(l > PROT_NONE && l < PROT_LAST);
- conn->request_data_prot = l;
- return 0;
-}
-
-static CURLcode choose_mech(struct connectdata *conn)
-{
- int ret;
- struct SessionHandle *data = conn->data;
- const struct Curl_sec_client_mech * const *mech;
- void *tmp_allocation;
- const char *mech_name;
-
- for(mech = mechs; (*mech); ++mech) {
- mech_name = (*mech)->name;
- /* We have no mechanism with a NULL name but keep this check */
- DEBUGASSERT(mech_name != NULL);
- if(mech_name == NULL) {
- infof(data, "Skipping mechanism with empty name (%p)\n", (void *)mech);
- continue;
- }
- tmp_allocation = realloc(conn->app_data, (*mech)->size);
- if(tmp_allocation == NULL) {
- failf(data, "Failed realloc of size %u", (*mech)->size);
- mech = NULL;
- return CURLE_OUT_OF_MEMORY;
- }
- conn->app_data = tmp_allocation;
-
- if((*mech)->init) {
- ret = (*mech)->init(conn->app_data);
- if(ret != 0) {
- infof(data, "Failed initialization for %s. Skipping it.\n", mech_name);
- continue;
- }
- }
-
- infof(data, "Trying mechanism %s...\n", mech_name);
- ret = ftp_send_command(conn, "AUTH %s", mech_name);
- if(ret < 0)
- /* FIXME: This error is too generic but it is OK for now. */
- return CURLE_COULDNT_CONNECT;
-
- if(ret/100 != 3) {
- switch(ret) {
- case 504:
- infof(data, "Mechanism %s is not supported by the server (server "
- "returned ftp code: 504).\n", mech_name);
- break;
- case 534:
- infof(data, "Mechanism %s was rejected by the server (server returned "
- "ftp code: 534).\n", mech_name);
- break;
- default:
- if(ret/100 == 5) {
- infof(data, "server does not support the security extensions\n");
- return CURLE_USE_SSL_FAILED;
- }
- break;
- }
- continue;
- }
-
- /* Authenticate */
- ret = (*mech)->auth(conn->app_data, conn);
-
- if(ret == AUTH_CONTINUE)
- continue;
- else if(ret != AUTH_OK) {
- /* Mechanism has dumped the error to stderr, don't error here. */
- return -1;
- }
- DEBUGASSERT(ret == AUTH_OK);
-
- conn->mech = *mech;
- conn->sec_complete = 1;
- conn->recv[FIRSTSOCKET] = sec_recv;
- conn->send[FIRSTSOCKET] = sec_send;
- conn->recv[SECONDARYSOCKET] = sec_recv;
- conn->send[SECONDARYSOCKET] = sec_send;
- conn->command_prot = PROT_SAFE;
- /* Set the requested protection level */
- /* BLOCKING */
- (void)sec_set_protection_level(conn);
- break;
- }
-
- return mech != NULL ? CURLE_OK : CURLE_FAILED_INIT;
-}
-
-CURLcode
-Curl_sec_login(struct connectdata *conn)
-{
- return choose_mech(conn);
-}
-
-
-void
-Curl_sec_end(struct connectdata *conn)
-{
- if(conn->mech != NULL && conn->mech->end)
- conn->mech->end(conn->app_data);
- if(conn->app_data) {
- free(conn->app_data);
- conn->app_data = NULL;
- }
- if(conn->in_buffer.data) {
- free(conn->in_buffer.data);
- conn->in_buffer.data = NULL;
- conn->in_buffer.size = 0;
- conn->in_buffer.index = 0;
- /* FIXME: Is this really needed? */
- conn->in_buffer.eof_flag = 0;
- }
- conn->sec_complete = 0;
- conn->data_prot = PROT_CLEAR;
- conn->mech = NULL;
-}
-
-#endif /* HAVE_GSSAPI */
-
-#endif /* CURL_DISABLE_FTP */
diff --git a/external/libcurl_android/jni/libcurl/lib/select.c b/external/libcurl_android/jni/libcurl/lib/select.c
deleted file mode 100755
index bb9b8b0d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/select.c
+++ /dev/null
@@ -1,574 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#if !defined(HAVE_SELECT) && !defined(HAVE_POLL_FINE)
-#error "We can't compile without select() or poll() support."
-#endif
-
-#if defined(__BEOS__) && !defined(__HAIKU__)
-/* BeOS has FD_SET defined in socket.h */
-#include <socket.h>
-#endif
-
-#ifdef MSDOS
-#include <dos.h> /* delay() */
-#endif
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "connect.h"
-#include "select.h"
-#include "warnless.h"
-
-/* Convenience local macros */
-
-#define elapsed_ms (int)curlx_tvdiff(curlx_tvnow(), initial_tv)
-
-int Curl_ack_eintr = 0;
-#define error_not_EINTR (Curl_ack_eintr || error != EINTR)
-
-/*
- * Internal function used for waiting a specific amount of ms
- * in Curl_socket_ready() and Curl_poll() when no file descriptor
- * is provided to wait on, just being used to delay execution.
- * WinSock select() and poll() timeout mechanisms need a valid
- * socket descriptor in a not null file descriptor set to work.
- * Waiting indefinitely with this function is not allowed, a
- * zero or negative timeout value will return immediately.
- * Timeout resolution, accuracy, as well as maximum supported
- * value is system dependent, neither factor is a citical issue
- * for the intended use of this function in the library.
- *
- * Return values:
- * -1 = system call error, invalid timeout value, or interrupted
- * 0 = specified timeout has elapsed
- */
-int Curl_wait_ms(int timeout_ms)
-{
-#if !defined(MSDOS) && !defined(USE_WINSOCK)
-#ifndef HAVE_POLL_FINE
- struct timeval pending_tv;
-#endif
- struct timeval initial_tv;
- int pending_ms;
- int error;
-#endif
- int r = 0;
-
- if(!timeout_ms)
- return 0;
- if(timeout_ms < 0) {
- SET_SOCKERRNO(EINVAL);
- return -1;
- }
-#if defined(MSDOS)
- delay(timeout_ms);
-#elif defined(USE_WINSOCK)
- Sleep(timeout_ms);
-#else
- pending_ms = timeout_ms;
- initial_tv = curlx_tvnow();
- do {
-#if defined(HAVE_POLL_FINE)
- r = poll(NULL, 0, pending_ms);
-#else
- pending_tv.tv_sec = pending_ms / 1000;
- pending_tv.tv_usec = (pending_ms % 1000) * 1000;
- r = select(0, NULL, NULL, NULL, &pending_tv);
-#endif /* HAVE_POLL_FINE */
- if(r != -1)
- break;
- error = SOCKERRNO;
- if(error && error_not_EINTR)
- break;
- pending_ms = timeout_ms - elapsed_ms;
- if(pending_ms <= 0) {
- r = 0; /* Simulate a "call timed out" case */
- break;
- }
- } while(r == -1);
-#endif /* USE_WINSOCK */
- if(r)
- r = -1;
- return r;
-}
-
-/*
- * Wait for read or write events on a set of file descriptors. It uses poll()
- * when a fine poll() is available, in order to avoid limits with FD_SETSIZE,
- * otherwise select() is used. An error is returned if select() is being used
- * and a file descriptor is too large for FD_SETSIZE.
- *
- * A negative timeout value makes this function wait indefinitely,
- * unles no valid file descriptor is given, when this happens the
- * negative timeout is ignored and the function times out immediately.
- *
- * Return values:
- * -1 = system call error or fd >= FD_SETSIZE
- * 0 = timeout
- * [bitmask] = action as described below
- *
- * CURL_CSELECT_IN - first socket is readable
- * CURL_CSELECT_IN2 - second socket is readable
- * CURL_CSELECT_OUT - write socket is writable
- * CURL_CSELECT_ERR - an error condition occurred
- */
-int Curl_socket_check(curl_socket_t readfd0, /* two sockets to read from */
- curl_socket_t readfd1,
- curl_socket_t writefd, /* socket to write to */
- long timeout_ms) /* milliseconds to wait */
-{
-#ifdef HAVE_POLL_FINE
- struct pollfd pfd[3];
- int num;
-#else
- struct timeval pending_tv;
- struct timeval *ptimeout;
- fd_set fds_read;
- fd_set fds_write;
- fd_set fds_err;
- curl_socket_t maxfd;
-#endif
- struct timeval initial_tv = {0,0};
- int pending_ms = 0;
- int error;
- int r;
- int ret;
-
- if((readfd0 == CURL_SOCKET_BAD) && (readfd1 == CURL_SOCKET_BAD) &&
- (writefd == CURL_SOCKET_BAD)) {
- /* no sockets, just wait */
- r = Curl_wait_ms((int)timeout_ms);
- return r;
- }
-
- /* Avoid initial timestamp, avoid curlx_tvnow() call, when elapsed
- time in this function does not need to be measured. This happens
- when function is called with a zero timeout or a negative timeout
- value indicating a blocking call should be performed. */
-
- if(timeout_ms > 0) {
- pending_ms = (int)timeout_ms;
- initial_tv = curlx_tvnow();
- }
-
-#ifdef HAVE_POLL_FINE
-
- num = 0;
- if(readfd0 != CURL_SOCKET_BAD) {
- pfd[num].fd = readfd0;
- pfd[num].events = POLLRDNORM|POLLIN|POLLRDBAND|POLLPRI;
- pfd[num].revents = 0;
- num++;
- }
- if(readfd1 != CURL_SOCKET_BAD) {
- pfd[num].fd = readfd1;
- pfd[num].events = POLLRDNORM|POLLIN|POLLRDBAND|POLLPRI;
- pfd[num].revents = 0;
- num++;
- }
- if(writefd != CURL_SOCKET_BAD) {
- pfd[num].fd = writefd;
- pfd[num].events = POLLWRNORM|POLLOUT;
- pfd[num].revents = 0;
- num++;
- }
-
- do {
- if(timeout_ms < 0)
- pending_ms = -1;
- else if(!timeout_ms)
- pending_ms = 0;
- r = poll(pfd, num, pending_ms);
- if(r != -1)
- break;
- error = SOCKERRNO;
- if(error && error_not_EINTR)
- break;
- if(timeout_ms > 0) {
- pending_ms = (int)(timeout_ms - elapsed_ms);
- if(pending_ms <= 0) {
- r = 0; /* Simulate a "call timed out" case */
- break;
- }
- }
- } while(r == -1);
-
- if(r < 0)
- return -1;
- if(r == 0)
- return 0;
-
- ret = 0;
- num = 0;
- if(readfd0 != CURL_SOCKET_BAD) {
- if(pfd[num].revents & (POLLRDNORM|POLLIN|POLLERR|POLLHUP))
- ret |= CURL_CSELECT_IN;
- if(pfd[num].revents & (POLLRDBAND|POLLPRI|POLLNVAL))
- ret |= CURL_CSELECT_ERR;
- num++;
- }
- if(readfd1 != CURL_SOCKET_BAD) {
- if(pfd[num].revents & (POLLRDNORM|POLLIN|POLLERR|POLLHUP))
- ret |= CURL_CSELECT_IN2;
- if(pfd[num].revents & (POLLRDBAND|POLLPRI|POLLNVAL))
- ret |= CURL_CSELECT_ERR;
- num++;
- }
- if(writefd != CURL_SOCKET_BAD) {
- if(pfd[num].revents & (POLLWRNORM|POLLOUT))
- ret |= CURL_CSELECT_OUT;
- if(pfd[num].revents & (POLLERR|POLLHUP|POLLNVAL))
- ret |= CURL_CSELECT_ERR;
- }
-
- return ret;
-
-#else /* HAVE_POLL_FINE */
-
- FD_ZERO(&fds_err);
- maxfd = (curl_socket_t)-1;
-
- FD_ZERO(&fds_read);
- if(readfd0 != CURL_SOCKET_BAD) {
- VERIFY_SOCK(readfd0);
- FD_SET(readfd0, &fds_read);
- FD_SET(readfd0, &fds_err);
- maxfd = readfd0;
- }
- if(readfd1 != CURL_SOCKET_BAD) {
- VERIFY_SOCK(readfd1);
- FD_SET(readfd1, &fds_read);
- FD_SET(readfd1, &fds_err);
- if(readfd1 > maxfd)
- maxfd = readfd1;
- }
-
- FD_ZERO(&fds_write);
- if(writefd != CURL_SOCKET_BAD) {
- VERIFY_SOCK(writefd);
- FD_SET(writefd, &fds_write);
- FD_SET(writefd, &fds_err);
- if(writefd > maxfd)
- maxfd = writefd;
- }
-
- ptimeout = (timeout_ms < 0) ? NULL : &pending_tv;
-
- do {
- if(timeout_ms > 0) {
- pending_tv.tv_sec = pending_ms / 1000;
- pending_tv.tv_usec = (pending_ms % 1000) * 1000;
- }
- else if(!timeout_ms) {
- pending_tv.tv_sec = 0;
- pending_tv.tv_usec = 0;
- }
-
- /* WinSock select() must not be called with an fd_set that contains zero
- fd flags, or it will return WSAEINVAL. But, it also can't be called
- with no fd_sets at all! From the documentation:
-
- Any two of the parameters, readfds, writefds, or exceptfds, can be
- given as null. At least one must be non-null, and any non-null
- descriptor set must contain at least one handle to a socket.
-
- We know that we have at least one bit set in at least two fd_sets in
- this case, but we may have no bits set in either fds_read or fd_write,
- so check for that and handle it. Luckily, with WinSock, we can _also_
- ask how many bits are set on an fd_set.
-
- It is unclear why WinSock doesn't just handle this for us instead of
- calling this an error.
-
- Note also that WinSock ignores the first argument, so we don't worry
- about the fact that maxfd is computed incorrectly with WinSock (since
- curl_socket_t is unsigned in such cases and thus -1 is the largest
- value).
- */
- r = select((int)maxfd + 1,
-#ifndef USE_WINSOCK
- &fds_read,
- &fds_write,
-#else
- fds_read.fd_count ? &fds_read : NULL,
- fds_write.fd_count ? &fds_write : NULL,
-#endif
- &fds_err, ptimeout);
- if(r != -1)
- break;
- error = SOCKERRNO;
- if(error && error_not_EINTR)
- break;
- if(timeout_ms > 0) {
- pending_ms = timeout_ms - elapsed_ms;
- if(pending_ms <= 0) {
- r = 0; /* Simulate a "call timed out" case */
- break;
- }
- }
- } while(r == -1);
-
- if(r < 0)
- return -1;
- if(r == 0)
- return 0;
-
- ret = 0;
- if(readfd0 != CURL_SOCKET_BAD) {
- if(FD_ISSET(readfd0, &fds_read))
- ret |= CURL_CSELECT_IN;
- if(FD_ISSET(readfd0, &fds_err))
- ret |= CURL_CSELECT_ERR;
- }
- if(readfd1 != CURL_SOCKET_BAD) {
- if(FD_ISSET(readfd1, &fds_read))
- ret |= CURL_CSELECT_IN2;
- if(FD_ISSET(readfd1, &fds_err))
- ret |= CURL_CSELECT_ERR;
- }
- if(writefd != CURL_SOCKET_BAD) {
- if(FD_ISSET(writefd, &fds_write))
- ret |= CURL_CSELECT_OUT;
- if(FD_ISSET(writefd, &fds_err))
- ret |= CURL_CSELECT_ERR;
- }
-
- return ret;
-
-#endif /* HAVE_POLL_FINE */
-
-}
-
-/*
- * This is a wrapper around poll(). If poll() does not exist, then
- * select() is used instead. An error is returned if select() is
- * being used and a file descriptor is too large for FD_SETSIZE.
- * A negative timeout value makes this function wait indefinitely,
- * unles no valid file descriptor is given, when this happens the
- * negative timeout is ignored and the function times out immediately.
- *
- * Return values:
- * -1 = system call error or fd >= FD_SETSIZE
- * 0 = timeout
- * N = number of structures with non zero revent fields
- */
-int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms)
-{
-#ifndef HAVE_POLL_FINE
- struct timeval pending_tv;
- struct timeval *ptimeout;
- fd_set fds_read;
- fd_set fds_write;
- fd_set fds_err;
- curl_socket_t maxfd;
-#endif
- struct timeval initial_tv = {0,0};
- bool fds_none = TRUE;
- unsigned int i;
- int pending_ms = 0;
- int error;
- int r;
-
- if(ufds) {
- for(i = 0; i < nfds; i++) {
- if(ufds[i].fd != CURL_SOCKET_BAD) {
- fds_none = FALSE;
- break;
- }
- }
- }
- if(fds_none) {
- r = Curl_wait_ms(timeout_ms);
- return r;
- }
-
- /* Avoid initial timestamp, avoid curlx_tvnow() call, when elapsed
- time in this function does not need to be measured. This happens
- when function is called with a zero timeout or a negative timeout
- value indicating a blocking call should be performed. */
-
- if(timeout_ms > 0) {
- pending_ms = timeout_ms;
- initial_tv = curlx_tvnow();
- }
-
-#ifdef HAVE_POLL_FINE
-
- do {
- if(timeout_ms < 0)
- pending_ms = -1;
- else if(!timeout_ms)
- pending_ms = 0;
- r = poll(ufds, nfds, pending_ms);
- if(r != -1)
- break;
- error = SOCKERRNO;
- if(error && error_not_EINTR)
- break;
- if(timeout_ms > 0) {
- pending_ms = timeout_ms - elapsed_ms;
- if(pending_ms <= 0) {
- r = 0; /* Simulate a "call timed out" case */
- break;
- }
- }
- } while(r == -1);
-
- if(r < 0)
- return -1;
- if(r == 0)
- return 0;
-
- for(i = 0; i < nfds; i++) {
- if(ufds[i].fd == CURL_SOCKET_BAD)
- continue;
- if(ufds[i].revents & POLLHUP)
- ufds[i].revents |= POLLIN;
- if(ufds[i].revents & POLLERR)
- ufds[i].revents |= (POLLIN|POLLOUT);
- }
-
-#else /* HAVE_POLL_FINE */
-
- FD_ZERO(&fds_read);
- FD_ZERO(&fds_write);
- FD_ZERO(&fds_err);
- maxfd = (curl_socket_t)-1;
-
- for(i = 0; i < nfds; i++) {
- ufds[i].revents = 0;
- if(ufds[i].fd == CURL_SOCKET_BAD)
- continue;
- VERIFY_SOCK(ufds[i].fd);
- if(ufds[i].events & (POLLIN|POLLOUT|POLLPRI|
- POLLRDNORM|POLLWRNORM|POLLRDBAND)) {
- if(ufds[i].fd > maxfd)
- maxfd = ufds[i].fd;
- if(ufds[i].events & (POLLRDNORM|POLLIN))
- FD_SET(ufds[i].fd, &fds_read);
- if(ufds[i].events & (POLLWRNORM|POLLOUT))
- FD_SET(ufds[i].fd, &fds_write);
- if(ufds[i].events & (POLLRDBAND|POLLPRI))
- FD_SET(ufds[i].fd, &fds_err);
- }
- }
-
-#ifdef USE_WINSOCK
- /* WinSock select() can't handle zero events. See the comment about this in
- Curl_check_socket(). */
- if(fds_read.fd_count == 0 && fds_write.fd_count == 0
- && fds_err.fd_count == 0) {
- r = Curl_wait_ms(timeout_ms);
- return r;
- }
-#endif
-
- ptimeout = (timeout_ms < 0) ? NULL : &pending_tv;
-
- do {
- if(timeout_ms > 0) {
- pending_tv.tv_sec = pending_ms / 1000;
- pending_tv.tv_usec = (pending_ms % 1000) * 1000;
- }
- else if(!timeout_ms) {
- pending_tv.tv_sec = 0;
- pending_tv.tv_usec = 0;
- }
- r = select((int)maxfd + 1,
-#ifndef USE_WINSOCK
- &fds_read, &fds_write, &fds_err,
-#else
- /* WinSock select() can't handle fd_sets with zero bits set, so
- don't give it such arguments. See the comment about this in
- Curl_check_socket().
- */
- fds_read.fd_count ? &fds_read : NULL,
- fds_write.fd_count ? &fds_write : NULL,
- fds_err.fd_count ? &fds_err : NULL,
-#endif
- ptimeout);
- if(r != -1)
- break;
- error = SOCKERRNO;
- if(error && error_not_EINTR)
- break;
- if(timeout_ms > 0) {
- pending_ms = timeout_ms - elapsed_ms;
- if(pending_ms <= 0) {
- r = 0; /* Simulate a "call timed out" case */
- break;
- }
- }
- } while(r == -1);
-
- if(r < 0)
- return -1;
- if(r == 0)
- return 0;
-
- r = 0;
- for(i = 0; i < nfds; i++) {
- ufds[i].revents = 0;
- if(ufds[i].fd == CURL_SOCKET_BAD)
- continue;
- if(FD_ISSET(ufds[i].fd, &fds_read))
- ufds[i].revents |= POLLIN;
- if(FD_ISSET(ufds[i].fd, &fds_write))
- ufds[i].revents |= POLLOUT;
- if(FD_ISSET(ufds[i].fd, &fds_err))
- ufds[i].revents |= POLLPRI;
- if(ufds[i].revents != 0)
- r++;
- }
-
-#endif /* HAVE_POLL_FINE */
-
- return r;
-}
-
-#ifdef TPF
-/*
- * This is a replacement for select() on the TPF platform.
- * It is used whenever libcurl calls select().
- * The call below to tpf_process_signals() is required because
- * TPF's select calls are not signal interruptible.
- *
- * Return values are the same as select's.
- */
-int tpf_select_libcurl(int maxfds, fd_set* reads, fd_set* writes,
- fd_set* excepts, struct timeval* tv)
-{
- int rc;
-
- rc = tpf_select_bsd(maxfds, reads, writes, excepts, tv);
- tpf_process_signals();
- return(rc);
-}
-#endif /* TPF */
diff --git a/external/libcurl_android/jni/libcurl/lib/select.h b/external/libcurl_android/jni/libcurl/lib/select.h
deleted file mode 100755
index c00afe16..00000000
--- a/external/libcurl_android/jni/libcurl/lib/select.h
+++ /dev/null
@@ -1,114 +0,0 @@
-#ifndef HEADER_CURL_SELECT_H
-#define HEADER_CURL_SELECT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_SYS_POLL_H
-#include <sys/poll.h>
-#elif defined(HAVE_POLL_H)
-#include <poll.h>
-#endif
-
-/*
- * Definition of pollfd struct and constants for platforms lacking them.
- */
-
-#if !defined(HAVE_STRUCT_POLLFD) && \
- !defined(HAVE_SYS_POLL_H) && \
- !defined(HAVE_POLL_H)
-
-#define POLLIN 0x01
-#define POLLPRI 0x02
-#define POLLOUT 0x04
-#define POLLERR 0x08
-#define POLLHUP 0x10
-#define POLLNVAL 0x20
-
-struct pollfd
-{
- curl_socket_t fd;
- short events;
- short revents;
-};
-
-#endif
-
-#ifndef POLLRDNORM
-#define POLLRDNORM POLLIN
-#endif
-
-#ifndef POLLWRNORM
-#define POLLWRNORM POLLOUT
-#endif
-
-#ifndef POLLRDBAND
-#define POLLRDBAND POLLPRI
-#endif
-
-/* there are three CSELECT defines that are defined in the public header that
- are exposed to users, but this *IN2 bit is only ever used internally and
- therefore defined here */
-#define CURL_CSELECT_IN2 (CURL_CSELECT_ERR << 1)
-
-int Curl_socket_check(curl_socket_t readfd, curl_socket_t readfd2,
- curl_socket_t writefd,
- long timeout_ms);
-
-/* provide the former API internally */
-#define Curl_socket_ready(x,y,z) \
- Curl_socket_check(x, CURL_SOCKET_BAD, y, z)
-
-int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms);
-
-/* On non-DOS and non-Winsock platforms, when Curl_ack_eintr is set,
- * EINTR condition is honored and function might exit early without
- * awaiting full timeout. Otherwise EINTR will be ignored and full
- * timeout will elapse. */
-extern int Curl_ack_eintr;
-
-int Curl_wait_ms(int timeout_ms);
-
-#ifdef TPF
-int tpf_select_libcurl(int maxfds, fd_set* reads, fd_set* writes,
- fd_set* excepts, struct timeval* tv);
-#endif
-
-/* Winsock and TPF sockets are not in range [0..FD_SETSIZE-1], which
- unfortunately makes it impossible for us to easily check if they're valid
-*/
-#if defined(USE_WINSOCK) || defined(TPF)
-#define VALID_SOCK(x) 1
-#define VERIFY_SOCK(x) Curl_nop_stmt
-#else
-#define VALID_SOCK(s) (((s) >= 0) && ((s) < FD_SETSIZE))
-#define VERIFY_SOCK(x) do { \
- if(!VALID_SOCK(x)) { \
- SET_SOCKERRNO(EINVAL); \
- return -1; \
- } \
-} WHILE_FALSE
-#endif
-
-#endif /* HEADER_CURL_SELECT_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/sendf.c b/external/libcurl_android/jni/libcurl/lib/sendf.c
deleted file mode 100755
index 4a87c79d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/sendf.c
+++ /dev/null
@@ -1,686 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-
-#include "urldata.h"
-#include "sendf.h"
-#include "connect.h"
-#include "vtls/vtls.h"
-#include "ssh.h"
-#include "multiif.h"
-#include "non-ascii.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-#include "strerror.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifdef CURL_DO_LINEEND_CONV
-/*
- * convert_lineends() changes CRLF (\r\n) end-of-line markers to a single LF
- * (\n), with special processing for CRLF sequences that are split between two
- * blocks of data. Remaining, bare CRs are changed to LFs. The possibly new
- * size of the data is returned.
- */
-static size_t convert_lineends(struct SessionHandle *data,
- char *startPtr, size_t size)
-{
- char *inPtr, *outPtr;
-
- /* sanity check */
- if((startPtr == NULL) || (size < 1)) {
- return(size);
- }
-
- if(data->state.prev_block_had_trailing_cr) {
- /* The previous block of incoming data
- had a trailing CR, which was turned into a LF. */
- if(*startPtr == '\n') {
- /* This block of incoming data starts with the
- previous block's LF so get rid of it */
- memmove(startPtr, startPtr+1, size-1);
- size--;
- /* and it wasn't a bare CR but a CRLF conversion instead */
- data->state.crlf_conversions++;
- }
- data->state.prev_block_had_trailing_cr = FALSE; /* reset the flag */
- }
-
- /* find 1st CR, if any */
- inPtr = outPtr = memchr(startPtr, '\r', size);
- if(inPtr) {
- /* at least one CR, now look for CRLF */
- while(inPtr < (startPtr+size-1)) {
- /* note that it's size-1, so we'll never look past the last byte */
- if(memcmp(inPtr, "\r\n", 2) == 0) {
- /* CRLF found, bump past the CR and copy the NL */
- inPtr++;
- *outPtr = *inPtr;
- /* keep track of how many CRLFs we converted */
- data->state.crlf_conversions++;
- }
- else {
- if(*inPtr == '\r') {
- /* lone CR, move LF instead */
- *outPtr = '\n';
- }
- else {
- /* not a CRLF nor a CR, just copy whatever it is */
- *outPtr = *inPtr;
- }
- }
- outPtr++;
- inPtr++;
- } /* end of while loop */
-
- if(inPtr < startPtr+size) {
- /* handle last byte */
- if(*inPtr == '\r') {
- /* deal with a CR at the end of the buffer */
- *outPtr = '\n'; /* copy a NL instead */
- /* note that a CRLF might be split across two blocks */
- data->state.prev_block_had_trailing_cr = TRUE;
- }
- else {
- /* copy last byte */
- *outPtr = *inPtr;
- }
- outPtr++;
- }
- if(outPtr < startPtr+size)
- /* tidy up by null terminating the now shorter data */
- *outPtr = '\0';
-
- return(outPtr - startPtr);
- }
- return(size);
-}
-#endif /* CURL_DO_LINEEND_CONV */
-
-/* Curl_infof() is for info message along the way */
-
-void Curl_infof(struct SessionHandle *data, const char *fmt, ...)
-{
- if(data && data->set.verbose) {
- va_list ap;
- size_t len;
- char print_buffer[2048 + 1];
- va_start(ap, fmt);
- vsnprintf(print_buffer, sizeof(print_buffer), fmt, ap);
- va_end(ap);
- len = strlen(print_buffer);
- Curl_debug(data, CURLINFO_TEXT, print_buffer, len, NULL);
- }
-}
-
-/* Curl_failf() is for messages stating why we failed.
- * The message SHALL NOT include any LF or CR.
- */
-
-void Curl_failf(struct SessionHandle *data, const char *fmt, ...)
-{
- va_list ap;
- size_t len;
- va_start(ap, fmt);
-
- vsnprintf(data->state.buffer, BUFSIZE, fmt, ap);
-
- if(data->set.errorbuffer && !data->state.errorbuf) {
- snprintf(data->set.errorbuffer, CURL_ERROR_SIZE, "%s", data->state.buffer);
- data->state.errorbuf = TRUE; /* wrote error string */
- }
- if(data->set.verbose) {
- len = strlen(data->state.buffer);
- if(len < BUFSIZE - 1) {
- data->state.buffer[len] = '\n';
- data->state.buffer[++len] = '\0';
- }
- Curl_debug(data, CURLINFO_TEXT, data->state.buffer, len, NULL);
- }
-
- va_end(ap);
-}
-
-/* Curl_sendf() sends formated data to the server */
-CURLcode Curl_sendf(curl_socket_t sockfd, struct connectdata *conn,
- const char *fmt, ...)
-{
- struct SessionHandle *data = conn->data;
- ssize_t bytes_written;
- size_t write_len;
- CURLcode res = CURLE_OK;
- char *s;
- char *sptr;
- va_list ap;
- va_start(ap, fmt);
- s = vaprintf(fmt, ap); /* returns an allocated string */
- va_end(ap);
- if(!s)
- return CURLE_OUT_OF_MEMORY; /* failure */
-
- bytes_written=0;
- write_len = strlen(s);
- sptr = s;
-
- for(;;) {
- /* Write the buffer to the socket */
- res = Curl_write(conn, sockfd, sptr, write_len, &bytes_written);
-
- if(CURLE_OK != res)
- break;
-
- if(data->set.verbose)
- Curl_debug(data, CURLINFO_DATA_OUT, sptr, (size_t)bytes_written, conn);
-
- if((size_t)bytes_written != write_len) {
- /* if not all was written at once, we must advance the pointer, decrease
- the size left and try again! */
- write_len -= bytes_written;
- sptr += bytes_written;
- }
- else
- break;
- }
-
- free(s); /* free the output string */
-
- return res;
-}
-
-/*
- * Curl_write() is an internal write function that sends data to the
- * server. Works with plain sockets, SCP, SSL or kerberos.
- *
- * If the write would block (CURLE_AGAIN), we return CURLE_OK and
- * (*written == 0). Otherwise we return regular CURLcode value.
- */
-CURLcode Curl_write(struct connectdata *conn,
- curl_socket_t sockfd,
- const void *mem,
- size_t len,
- ssize_t *written)
-{
- ssize_t bytes_written;
- CURLcode curlcode = CURLE_OK;
- int num = (sockfd == conn->sock[SECONDARYSOCKET]);
-
- bytes_written = conn->send[num](conn, num, mem, len, &curlcode);
-
- *written = bytes_written;
- if(bytes_written >= 0)
- /* we completely ignore the curlcode value when subzero is not returned */
- return CURLE_OK;
-
- /* handle CURLE_AGAIN or a send failure */
- switch(curlcode) {
- case CURLE_AGAIN:
- *written = 0;
- return CURLE_OK;
-
- case CURLE_OK:
- /* general send failure */
- return CURLE_SEND_ERROR;
-
- default:
- /* we got a specific curlcode, forward it */
- return curlcode;
- }
-}
-
-ssize_t Curl_send_plain(struct connectdata *conn, int num,
- const void *mem, size_t len, CURLcode *code)
-{
- curl_socket_t sockfd = conn->sock[num];
- ssize_t bytes_written = swrite(sockfd, mem, len);
-
- *code = CURLE_OK;
- if(-1 == bytes_written) {
- int err = SOCKERRNO;
-
- if(
-#ifdef WSAEWOULDBLOCK
- /* This is how Windows does it */
- (WSAEWOULDBLOCK == err)
-#else
- /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
- due to its inability to send off data without blocking. We therefor
- treat both error codes the same here */
- (EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err)
-#endif
- ) {
- /* this is just a case of EWOULDBLOCK */
- bytes_written=0;
- *code = CURLE_AGAIN;
- }
- else {
- failf(conn->data, "Send failure: %s",
- Curl_strerror(conn, err));
- conn->data->state.os_errno = err;
- *code = CURLE_SEND_ERROR;
- }
- }
- return bytes_written;
-}
-
-/*
- * Curl_write_plain() is an internal write function that sends data to the
- * server using plain sockets only. Otherwise meant to have the exact same
- * proto as Curl_write()
- */
-CURLcode Curl_write_plain(struct connectdata *conn,
- curl_socket_t sockfd,
- const void *mem,
- size_t len,
- ssize_t *written)
-{
- ssize_t bytes_written;
- CURLcode retcode;
- int num = (sockfd == conn->sock[SECONDARYSOCKET]);
-
- bytes_written = Curl_send_plain(conn, num, mem, len, &retcode);
-
- *written = bytes_written;
-
- return retcode;
-}
-
-ssize_t Curl_recv_plain(struct connectdata *conn, int num, char *buf,
- size_t len, CURLcode *code)
-{
- curl_socket_t sockfd = conn->sock[num];
- ssize_t nread = sread(sockfd, buf, len);
-
- *code = CURLE_OK;
- if(-1 == nread) {
- int err = SOCKERRNO;
-
- if(
-#ifdef WSAEWOULDBLOCK
- /* This is how Windows does it */
- (WSAEWOULDBLOCK == err)
-#else
- /* errno may be EWOULDBLOCK or on some systems EAGAIN when it returned
- due to its inability to send off data without blocking. We therefor
- treat both error codes the same here */
- (EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err)
-#endif
- ) {
- /* this is just a case of EWOULDBLOCK */
- *code = CURLE_AGAIN;
- }
- else {
- failf(conn->data, "Recv failure: %s",
- Curl_strerror(conn, err));
- conn->data->state.os_errno = err;
- *code = CURLE_RECV_ERROR;
- }
- }
- return nread;
-}
-
-static CURLcode pausewrite(struct SessionHandle *data,
- int type, /* what type of data */
- const char *ptr,
- size_t len)
-{
- /* signalled to pause sending on this connection, but since we have data
- we want to send we need to dup it to save a copy for when the sending
- is again enabled */
- struct SingleRequest *k = &data->req;
- char *dupl = malloc(len);
- if(!dupl)
- return CURLE_OUT_OF_MEMORY;
-
- memcpy(dupl, ptr, len);
-
- /* store this information in the state struct for later use */
- data->state.tempwrite = dupl;
- data->state.tempwritesize = len;
- data->state.tempwritetype = type;
-
- /* mark the connection as RECV paused */
- k->keepon |= KEEP_RECV_PAUSE;
-
- DEBUGF(infof(data, "Pausing with %zu bytes in buffer for type %02x\n",
- len, type));
-
- return CURLE_OK;
-}
-
-
-/* Curl_client_write() sends data to the write callback(s)
-
- The bit pattern defines to what "streams" to write to. Body and/or header.
- The defines are in sendf.h of course.
-
- If CURL_DO_LINEEND_CONV is enabled, data is converted IN PLACE to the
- local character encoding. This is a problem and should be changed in
- the future to leave the original data alone.
- */
-CURLcode Curl_client_write(struct connectdata *conn,
- int type,
- char *ptr,
- size_t len)
-{
- struct SessionHandle *data = conn->data;
- size_t wrote;
-
- if(0 == len)
- len = strlen(ptr);
-
- /* If reading is actually paused, we're forced to append this chunk of data
- to the already held data, but only if it is the same type as otherwise it
- can't work and it'll return error instead. */
- if(data->req.keepon & KEEP_RECV_PAUSE) {
- size_t newlen;
- char *newptr;
- if(type != data->state.tempwritetype)
- /* major internal confusion */
- return CURLE_RECV_ERROR;
-
- DEBUGASSERT(data->state.tempwrite);
-
- /* figure out the new size of the data to save */
- newlen = len + data->state.tempwritesize;
- /* allocate the new memory area */
- newptr = realloc(data->state.tempwrite, newlen);
- if(!newptr)
- return CURLE_OUT_OF_MEMORY;
- /* copy the new data to the end of the new area */
- memcpy(newptr + data->state.tempwritesize, ptr, len);
- /* update the pointer and the size */
- data->state.tempwrite = newptr;
- data->state.tempwritesize = newlen;
-
- return CURLE_OK;
- }
-
- if(type & CLIENTWRITE_BODY) {
- if((conn->handler->protocol&PROTO_FAMILY_FTP) &&
- conn->proto.ftpc.transfertype == 'A') {
- /* convert from the network encoding */
- CURLcode rc = Curl_convert_from_network(data, ptr, len);
- /* Curl_convert_from_network calls failf if unsuccessful */
- if(rc)
- return rc;
-
-#ifdef CURL_DO_LINEEND_CONV
- /* convert end-of-line markers */
- len = convert_lineends(data, ptr, len);
-#endif /* CURL_DO_LINEEND_CONV */
- }
- /* If the previous block of data ended with CR and this block of data is
- just a NL, then the length might be zero */
- if(len) {
- wrote = data->set.fwrite_func(ptr, 1, len, data->set.out);
- }
- else {
- wrote = len;
- }
-
- if(CURL_WRITEFUNC_PAUSE == wrote) {
- if(conn->handler->flags & PROTOPT_NONETWORK) {
- /* Protocols that work without network cannot be paused. This is
- actually only FILE:// just now, and it can't pause since the
- transfer isn't done using the "normal" procedure. */
- failf(data, "Write callback asked for PAUSE when not supported!");
- return CURLE_WRITE_ERROR;
- }
- else
- return pausewrite(data, type, ptr, len);
- }
- else if(wrote != len) {
- failf(data, "Failed writing body (%zu != %zu)", wrote, len);
- return CURLE_WRITE_ERROR;
- }
- }
-
- if((type & CLIENTWRITE_HEADER) &&
- (data->set.fwrite_header || data->set.writeheader) ) {
- /*
- * Write headers to the same callback or to the especially setup
- * header callback function (added after version 7.7.1).
- */
- curl_write_callback writeit=
- data->set.fwrite_header?data->set.fwrite_header:data->set.fwrite_func;
-
- /* Note: The header is in the host encoding
- regardless of the ftp transfer mode (ASCII/Image) */
-
- wrote = writeit(ptr, 1, len, data->set.writeheader);
- if(CURL_WRITEFUNC_PAUSE == wrote)
- /* here we pass in the HEADER bit only since if this was body as well
- then it was passed already and clearly that didn't trigger the pause,
- so this is saved for later with the HEADER bit only */
- return pausewrite(data, CLIENTWRITE_HEADER, ptr, len);
-
- if(wrote != len) {
- failf (data, "Failed writing header");
- return CURLE_WRITE_ERROR;
- }
- }
-
- return CURLE_OK;
-}
-
-CURLcode Curl_read_plain(curl_socket_t sockfd,
- char *buf,
- size_t bytesfromsocket,
- ssize_t *n)
-{
- ssize_t nread = sread(sockfd, buf, bytesfromsocket);
-
- if(-1 == nread) {
- int err = SOCKERRNO;
-#ifdef USE_WINSOCK
- if(WSAEWOULDBLOCK == err)
-#else
- if((EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err))
-#endif
- return CURLE_AGAIN;
- else
- return CURLE_RECV_ERROR;
- }
-
- /* we only return number of bytes read when we return OK */
- *n = nread;
- return CURLE_OK;
-}
-
-/*
- * Internal read-from-socket function. This is meant to deal with plain
- * sockets, SSL sockets and kerberos sockets.
- *
- * Returns a regular CURLcode value.
- */
-CURLcode Curl_read(struct connectdata *conn, /* connection data */
- curl_socket_t sockfd, /* read from this socket */
- char *buf, /* store read data here */
- size_t sizerequested, /* max amount to read */
- ssize_t *n) /* amount bytes read */
-{
- CURLcode curlcode = CURLE_RECV_ERROR;
- ssize_t nread = 0;
- size_t bytesfromsocket = 0;
- char *buffertofill = NULL;
- bool pipelining = Curl_multi_pipeline_enabled(conn->data->multi);
-
- /* Set 'num' to 0 or 1, depending on which socket that has been sent here.
- If it is the second socket, we set num to 1. Otherwise to 0. This lets
- us use the correct ssl handle. */
- int num = (sockfd == conn->sock[SECONDARYSOCKET]);
-
- *n=0; /* reset amount to zero */
-
- /* If session can pipeline, check connection buffer */
- if(pipelining) {
- size_t bytestocopy = CURLMIN(conn->buf_len - conn->read_pos,
- sizerequested);
-
- /* Copy from our master buffer first if we have some unread data there*/
- if(bytestocopy > 0) {
- memcpy(buf, conn->master_buffer + conn->read_pos, bytestocopy);
- conn->read_pos += bytestocopy;
- conn->bits.stream_was_rewound = FALSE;
-
- *n = (ssize_t)bytestocopy;
- return CURLE_OK;
- }
- /* If we come here, it means that there is no data to read from the buffer,
- * so we read from the socket */
- bytesfromsocket = CURLMIN(sizerequested, BUFSIZE * sizeof (char));
- buffertofill = conn->master_buffer;
- }
- else {
- bytesfromsocket = CURLMIN((long)sizerequested,
- conn->data->set.buffer_size ?
- conn->data->set.buffer_size : BUFSIZE);
- buffertofill = buf;
- }
-
- nread = conn->recv[num](conn, num, buffertofill, bytesfromsocket, &curlcode);
- if(nread < 0)
- return curlcode;
-
- if(pipelining) {
- memcpy(buf, conn->master_buffer, nread);
- conn->buf_len = nread;
- conn->read_pos = nread;
- }
-
- *n += nread;
-
- return CURLE_OK;
-}
-
-/* return 0 on success */
-static int showit(struct SessionHandle *data, curl_infotype type,
- char *ptr, size_t size)
-{
- static const char s_infotype[CURLINFO_END][3] = {
- "* ", "< ", "> ", "{ ", "} ", "{ ", "} " };
-
-#ifdef CURL_DOES_CONVERSIONS
- char buf[BUFSIZE+1];
- size_t conv_size = 0;
-
- switch(type) {
- case CURLINFO_HEADER_OUT:
- /* assume output headers are ASCII */
- /* copy the data into my buffer so the original is unchanged */
- if(size > BUFSIZE) {
- size = BUFSIZE; /* truncate if necessary */
- buf[BUFSIZE] = '\0';
- }
- conv_size = size;
- memcpy(buf, ptr, size);
- /* Special processing is needed for this block if it
- * contains both headers and data (separated by CRLFCRLF).
- * We want to convert just the headers, leaving the data as-is.
- */
- if(size > 4) {
- size_t i;
- for(i = 0; i < size-4; i++) {
- if(memcmp(&buf[i], "\x0d\x0a\x0d\x0a", 4) == 0) {
- /* convert everything through this CRLFCRLF but no further */
- conv_size = i + 4;
- break;
- }
- }
- }
-
- Curl_convert_from_network(data, buf, conv_size);
- /* Curl_convert_from_network calls failf if unsuccessful */
- /* we might as well continue even if it fails... */
- ptr = buf; /* switch pointer to use my buffer instead */
- break;
- default:
- /* leave everything else as-is */
- break;
- }
-#endif /* CURL_DOES_CONVERSIONS */
-
- if(data->set.fdebug)
- return (*data->set.fdebug)(data, type, ptr, size,
- data->set.debugdata);
-
- switch(type) {
- case CURLINFO_TEXT:
- case CURLINFO_HEADER_OUT:
- case CURLINFO_HEADER_IN:
- fwrite(s_infotype[type], 2, 1, data->set.err);
- fwrite(ptr, size, 1, data->set.err);
-#ifdef CURL_DOES_CONVERSIONS
- if(size != conv_size) {
- /* we had untranslated data so we need an explicit newline */
- fwrite("\n", 1, 1, data->set.err);
- }
-#endif
- break;
- default: /* nada */
- break;
- }
- return 0;
-}
-
-int Curl_debug(struct SessionHandle *data, curl_infotype type,
- char *ptr, size_t size,
- struct connectdata *conn)
-{
- int rc;
- if(data->set.printhost && conn && conn->host.dispname) {
- char buffer[160];
- const char *t=NULL;
- const char *w="Data";
- switch (type) {
- case CURLINFO_HEADER_IN:
- w = "Header";
- case CURLINFO_DATA_IN:
- t = "from";
- break;
- case CURLINFO_HEADER_OUT:
- w = "Header";
- case CURLINFO_DATA_OUT:
- t = "to";
- break;
- default:
- break;
- }
-
- if(t) {
- snprintf(buffer, sizeof(buffer), "[%s %s %s]", w, t,
- conn->host.dispname);
- rc = showit(data, CURLINFO_TEXT, buffer, strlen(buffer));
- if(rc)
- return rc;
- }
- }
- rc = showit(data, type, ptr, size);
- return rc;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/sendf.h b/external/libcurl_android/jni/libcurl/lib/sendf.h
deleted file mode 100755
index 39489e40..00000000
--- a/external/libcurl_android/jni/libcurl/lib/sendf.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef HEADER_CURL_SENDF_H
-#define HEADER_CURL_SENDF_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-CURLcode Curl_sendf(curl_socket_t sockfd, struct connectdata *,
- const char *fmt, ...);
-void Curl_infof(struct SessionHandle *, const char *fmt, ...);
-void Curl_failf(struct SessionHandle *, const char *fmt, ...);
-
-#if defined(CURL_DISABLE_VERBOSE_STRINGS)
-
-#if defined(HAVE_VARIADIC_MACROS_C99)
-#define infof(...) Curl_nop_stmt
-#elif defined(HAVE_VARIADIC_MACROS_GCC)
-#define infof(x...) Curl_nop_stmt
-#else
-#define infof (void)
-#endif
-
-#else /* CURL_DISABLE_VERBOSE_STRINGS */
-
-#define infof Curl_infof
-
-#endif /* CURL_DISABLE_VERBOSE_STRINGS */
-
-#define failf Curl_failf
-
-#define CLIENTWRITE_BODY (1<<0)
-#define CLIENTWRITE_HEADER (1<<1)
-#define CLIENTWRITE_BOTH (CLIENTWRITE_BODY|CLIENTWRITE_HEADER)
-
-CURLcode Curl_client_write(struct connectdata *conn, int type, char *ptr,
- size_t len);
-
-/* internal read-function, does plain socket only */
-CURLcode Curl_read_plain(curl_socket_t sockfd,
- char *buf,
- size_t bytesfromsocket,
- ssize_t *n);
-
-ssize_t Curl_recv_plain(struct connectdata *conn, int num, char *buf,
- size_t len, CURLcode *code);
-ssize_t Curl_send_plain(struct connectdata *conn, int num,
- const void *mem, size_t len, CURLcode *code);
-
-/* internal read-function, does plain socket, SSL and krb4 */
-CURLcode Curl_read(struct connectdata *conn, curl_socket_t sockfd,
- char *buf, size_t buffersize,
- ssize_t *n);
-/* internal write-function, does plain socket, SSL, SCP, SFTP and krb4 */
-CURLcode Curl_write(struct connectdata *conn,
- curl_socket_t sockfd,
- const void *mem, size_t len,
- ssize_t *written);
-
-/* internal write-function, does plain sockets ONLY */
-CURLcode Curl_write_plain(struct connectdata *conn,
- curl_socket_t sockfd,
- const void *mem, size_t len,
- ssize_t *written);
-
-/* the function used to output verbose information */
-int Curl_debug(struct SessionHandle *handle, curl_infotype type,
- char *data, size_t size,
- struct connectdata *conn);
-
-
-#endif /* HEADER_CURL_SENDF_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/setup-os400.h b/external/libcurl_android/jni/libcurl/lib/setup-os400.h
deleted file mode 100755
index 0331464e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/setup-os400.h
+++ /dev/null
@@ -1,239 +0,0 @@
-#ifndef HEADER_CURL_SETUP_OS400_H
-#define HEADER_CURL_SETUP_OS400_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-
-/* OS/400 netdb.h does not define NI_MAXHOST. */
-#define NI_MAXHOST 1025
-
-/* OS/400 netdb.h does not define NI_MAXSERV. */
-#define NI_MAXSERV 32
-
-/* No OS/400 header file defines u_int32_t. */
-typedef unsigned long u_int32_t;
-
-
-/* System API wrapper prototypes & definitions to support ASCII parameters. */
-
-#include <sys/socket.h>
-#include <netdb.h>
-#include <qsossl.h>
-#include <gskssl.h>
-#include <qsoasync.h>
-#include <gssapi.h>
-
-extern int Curl_getaddrinfo_a(const char * nodename,
- const char * servname,
- const struct addrinfo * hints,
- struct addrinfo * * res);
-#define getaddrinfo Curl_getaddrinfo_a
-
-
-extern int Curl_getnameinfo_a(const struct sockaddr * sa,
- curl_socklen_t salen,
- char * nodename, curl_socklen_t nodenamelen,
- char * servname, curl_socklen_t servnamelen,
- int flags);
-#define getnameinfo Curl_getnameinfo_a
-
-
-/* SSL wrappers. */
-
-extern int Curl_SSL_Init_Application_a(SSLInitApp * init_app);
-#define SSL_Init_Application Curl_SSL_Init_Application_a
-
-
-extern int Curl_SSL_Init_a(SSLInit * init);
-#define SSL_Init Curl_SSL_Init_a
-
-
-extern char * Curl_SSL_Strerror_a(int sslreturnvalue,
- SSLErrorMsg * serrmsgp);
-#define SSL_Strerror Curl_SSL_Strerror_a
-
-
-/* GSKit wrappers. */
-
-extern int Curl_gsk_environment_open(gsk_handle * my_env_handle);
-#define gsk_environment_open Curl_gsk_environment_open
-
-extern int Curl_gsk_secure_soc_open(gsk_handle my_env_handle,
- gsk_handle * my_session_handle);
-#define gsk_secure_soc_open Curl_gsk_secure_soc_open
-
-extern int Curl_gsk_environment_close(gsk_handle * my_env_handle);
-#define gsk_environment_close Curl_gsk_environment_close
-
-extern int Curl_gsk_secure_soc_close(gsk_handle * my_session_handle);
-#define gsk_secure_soc_close Curl_gsk_secure_soc_close
-
-extern int Curl_gsk_environment_init(gsk_handle my_env_handle);
-#define gsk_environment_init Curl_gsk_environment_init
-
-extern int Curl_gsk_secure_soc_init(gsk_handle my_session_handle);
-#define gsk_secure_soc_init Curl_gsk_secure_soc_init
-
-extern int Curl_gsk_attribute_set_buffer_a(gsk_handle my_gsk_handle,
- GSK_BUF_ID bufID,
- const char * buffer,
- int bufSize);
-#define gsk_attribute_set_buffer Curl_gsk_attribute_set_buffer_a
-
-extern int Curl_gsk_attribute_set_enum(gsk_handle my_gsk_handle,
- GSK_ENUM_ID enumID,
- GSK_ENUM_VALUE enumValue);
-#define gsk_attribute_set_enum Curl_gsk_attribute_set_enum
-
-extern int Curl_gsk_attribute_set_numeric_value(gsk_handle my_gsk_handle,
- GSK_NUM_ID numID,
- int numValue);
-#define gsk_attribute_set_numeric_value Curl_gsk_attribute_set_numeric_value
-
-extern int Curl_gsk_attribute_set_callback(gsk_handle my_gsk_handle,
- GSK_CALLBACK_ID callBackID,
- void * callBackAreaPtr);
-#define gsk_attribute_set_callback Curl_gsk_attribute_set_callback
-
-extern int Curl_gsk_attribute_get_buffer_a(gsk_handle my_gsk_handle,
- GSK_BUF_ID bufID,
- const char * * buffer,
- int * bufSize);
-#define gsk_attribute_get_buffer Curl_gsk_attribute_get_buffer_a
-
-extern int Curl_gsk_attribute_get_enum(gsk_handle my_gsk_handle,
- GSK_ENUM_ID enumID,
- GSK_ENUM_VALUE * enumValue);
-#define gsk_attribute_get_enum Curl_gsk_attribute_get_enum
-
-extern int Curl_gsk_attribute_get_numeric_value(gsk_handle my_gsk_handle,
- GSK_NUM_ID numID,
- int * numValue);
-#define gsk_attribute_get_numeric_value Curl_gsk_attribute_get_numeric_value
-
-extern int Curl_gsk_attribute_get_cert_info(gsk_handle my_gsk_handle,
- GSK_CERT_ID certID,
- const gsk_cert_data_elem * * certDataElem,
- int * certDataElementCount);
-#define gsk_attribute_get_cert_info Curl_gsk_attribute_get_cert_info
-
-extern int Curl_gsk_secure_soc_misc(gsk_handle my_session_handle,
- GSK_MISC_ID miscID);
-#define gsk_secure_soc_misc Curl_gsk_secure_soc_misc
-
-extern int Curl_gsk_secure_soc_read(gsk_handle my_session_handle,
- char * readBuffer,
- int readBufSize, int * amtRead);
-#define gsk_secure_soc_read Curl_gsk_secure_soc_read
-
-extern int Curl_gsk_secure_soc_write(gsk_handle my_session_handle,
- char * writeBuffer,
- int writeBufSize, int * amtWritten);
-#define gsk_secure_soc_write Curl_gsk_secure_soc_write
-
-extern const char * Curl_gsk_strerror_a(int gsk_return_value);
-#define gsk_strerror Curl_gsk_strerror_a
-
-extern int Curl_gsk_secure_soc_startInit(gsk_handle my_session_handle,
- int IOCompletionPort,
- Qso_OverlappedIO_t * communicationsArea);
-#define gsk_secure_soc_startInit Curl_gsk_secure_soc_startInit
-
-
-/* GSSAPI wrappers. */
-
-extern OM_uint32 Curl_gss_import_name_a(OM_uint32 * minor_status,
- gss_buffer_t in_name,
- gss_OID in_name_type,
- gss_name_t * out_name);
-#define gss_import_name Curl_gss_import_name_a
-
-
-extern OM_uint32 Curl_gss_display_status_a(OM_uint32 * minor_status,
- OM_uint32 status_value,
- int status_type, gss_OID mech_type,
- gss_msg_ctx_t * message_context,
- gss_buffer_t status_string);
-#define gss_display_status Curl_gss_display_status_a
-
-
-extern OM_uint32 Curl_gss_init_sec_context_a(OM_uint32 * minor_status,
- gss_cred_id_t cred_handle,
- gss_ctx_id_t * context_handle,
- gss_name_t target_name,
- gss_OID mech_type,
- gss_flags_t req_flags,
- OM_uint32 time_req,
- gss_channel_bindings_t
- input_chan_bindings,
- gss_buffer_t input_token,
- gss_OID * actual_mech_type,
- gss_buffer_t output_token,
- gss_flags_t * ret_flags,
- OM_uint32 * time_rec);
-#define gss_init_sec_context Curl_gss_init_sec_context_a
-
-
-extern OM_uint32 Curl_gss_delete_sec_context_a(OM_uint32 * minor_status,
- gss_ctx_id_t * context_handle,
- gss_buffer_t output_token);
-#define gss_delete_sec_context Curl_gss_delete_sec_context_a
-
-
-/* LDAP wrappers. */
-
-#define BerValue struct berval
-
-#define ldap_url_parse ldap_url_parse_utf8
-#define ldap_init Curl_ldap_init_a
-#define ldap_simple_bind_s Curl_ldap_simple_bind_s_a
-#define ldap_search_s Curl_ldap_search_s_a
-#define ldap_get_values_len Curl_ldap_get_values_len_a
-#define ldap_err2string Curl_ldap_err2string_a
-#define ldap_get_dn Curl_ldap_get_dn_a
-#define ldap_first_attribute Curl_ldap_first_attribute_a
-#define ldap_next_attribute Curl_ldap_next_attribute_a
-
-/* Some socket functions must be wrapped to process textual addresses
- like AF_UNIX. */
-
-extern int Curl_os400_connect(int sd, struct sockaddr * destaddr, int addrlen);
-extern int Curl_os400_bind(int sd, struct sockaddr * localaddr, int addrlen);
-extern int Curl_os400_sendto(int sd, char * buffer, int buflen, int flags,
- struct sockaddr * dstaddr, int addrlen);
-extern int Curl_os400_recvfrom(int sd, char * buffer, int buflen, int flags,
- struct sockaddr * fromaddr, int * addrlen);
-
-#define connect Curl_os400_connect
-#define bind Curl_os400_bind
-#define sendto Curl_os400_sendto
-#define recvfrom Curl_os400_recvfrom
-
-#ifdef HAVE_LIBZ
-#define zlibVersion Curl_os400_zlibVersion
-#define inflateInit_ Curl_os400_inflateInit_
-#define inflateInit2_ Curl_os400_inflateInit2_
-#define inflate Curl_os400_inflate
-#define inflateEnd Curl_os400_inflateEnd
-#endif
-
-#endif /* HEADER_CURL_SETUP_OS400_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/setup-vms.h b/external/libcurl_android/jni/libcurl/lib/setup-vms.h
deleted file mode 100755
index f5eedf75..00000000
--- a/external/libcurl_android/jni/libcurl/lib/setup-vms.h
+++ /dev/null
@@ -1,399 +0,0 @@
-#ifndef HEADER_CURL_SETUP_VMS_H
-#define HEADER_CURL_SETUP_VMS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* */
-/* JEM, 12/30/12, VMS now generates config.h, so only define wrappers for */
-/* getenv(), getpwuid() and provide is_vms_shell() */
-/* Also need upper case symbols for system services, and */
-/* OpenSSL, and some Kerberos image */
-
-#ifdef __DECC
-#pragma message save
-#pragma message disable dollarid
-#endif
-
-/* Hide the stuff we are overriding */
-#define getenv decc_getenv
-#ifdef __DECC
-# if __INITIAL_POINTER_SIZE != 64
-# define getpwuid decc_getpwuid
-# endif
-#endif
-#include <stdlib.h>
- char * decc$getenv(const char * __name);
-#include <pwd.h>
-
-#include <string.h>
-#include <unixlib.h>
-
-#undef getenv
-#undef getpwuid
-#define getenv vms_getenv
-#define getpwuid vms_getpwuid
-
-/* VAX needs these in upper case when compiling exact case */
-#define sys$assign SYS$ASSIGN
-#define sys$dassgn SYS$DASSGN
-#define sys$qiow SYS$QIOW
-
-#ifdef __DECC
-# if __INITIAL_POINTER_SIZE
-# pragma __pointer_size __save
-# endif
-#endif
-
-#if __USE_LONG_GID_T
-# define decc_getpwuid DECC$__LONG_GID_GETPWUID
-#else
-# if __INITIAL_POINTER_SIZE
-# define decc_getpwuid decc$__32_getpwuid
-# else
-# define decc_getpwuid decc$getpwuid
-# endif
-#endif
-
- struct passwd * decc_getpwuid(uid_t uid);
-
-#ifdef __DECC
-# if __INITIAL_POINTER_SIZE == 32
-/* Translate the path, but only if the path is a VMS file specification */
-/* The translation is usually only needed for older versions of VMS */
-static char * vms_translate_path(const char * path) {
-char * unix_path;
-char * test_str;
-
- /* See if the result is in VMS format, if not, we are done */
- /* Assume that this is a PATH, not just some data */
- test_str = strpbrk(path, ":[<^");
- if(test_str == NULL) {
- return (char *)path;
- }
-
- unix_path = decc$translate_vms(path);
-
- if((int)unix_path <= 0) {
- /* We can not translate it, so return the original string */
- return (char *)path;
- }
-}
-# else
- /* VMS translate path is actually not needed on the current 64 bit */
- /* VMS platforms, so instead of figuring out the pointer settings */
- /* Change it to a noop */
-# define vms_translate_path(__path) __path
-# endif
-#endif
-
-#ifdef __DECC
-# if __INITIAL_POINTER_SIZE
-# pragma __pointer_size __restore
-# endif
-#endif
-
-static char * vms_getenv(const char * envvar) {
-
-char * result;
-char * vms_path;
-
- /* first use the DECC getenv() function */
- result = decc$getenv(envvar);
- if(result == NULL) {
- return result;
- }
-
- vms_path = result;
- result = vms_translate_path(vms_path);
-
- /* note that if you backport this to use VAX C RTL, that the VAX C RTL */
- /* may do a malloc(2048) for each call to getenv(), so you will need */
- /* to add a free(vms_path) */
- /* Do not do a free() for DEC C RTL builds, which should be used for */
- /* VMS 5.5-2 and later, even if using GCC */
-
- return result;
-}
-
-
-static struct passwd vms_passwd_cache;
-
-static struct passwd * vms_getpwuid(uid_t uid) {
-
-struct passwd * my_passwd;
-
-/* Hack needed to support 64 bit builds, decc_getpwnam is 32 bit only */
-#ifdef __DECC
-# if __INITIAL_POINTER_SIZE
-__char_ptr32 unix_path;
-# else
-char * unix_path;
-# endif
-#else
-char * unix_path;
-#endif
-
- my_passwd = decc_getpwuid(uid);
- if(my_passwd == NULL) {
- return my_passwd;
- }
-
- unix_path = vms_translate_path(my_passwd->pw_dir);
-
- if((long)unix_path <= 0) {
- /* We can not translate it, so return the original string */
- return my_passwd;
- }
-
- /* If no changes needed just return it */
- if(unix_path == my_passwd->pw_dir) {
- return my_passwd;
- }
-
- /* Need to copy the structure returned */
- /* Since curl is only using pw_dir, no need to fix up *
- /* the pw_shell when running under Bash */
- vms_passwd_cache.pw_name = my_passwd->pw_name;
- vms_passwd_cache.pw_uid = my_passwd->pw_uid;
- vms_passwd_cache.pw_gid = my_passwd->pw_uid;
- vms_passwd_cache.pw_dir = unix_path;
- vms_passwd_cache.pw_shell = my_passwd->pw_shell;
-
- return &vms_passwd_cache;
-}
-
-#ifdef __DECC
-#pragma message restore
-#endif
-
-/* Bug - VMS OpenSSL and Kerberos universal symbols are in uppercase only */
-/* VMS libraries should have universal symbols in exact and uppercase */
-
-#define ASN1_INTEGER_get ASN1_INTEGER_GET
-#define ASN1_STRING_data ASN1_STRING_DATA
-#define ASN1_STRING_length ASN1_STRING_LENGTH
-#define ASN1_STRING_print ASN1_STRING_PRINT
-#define ASN1_STRING_to_UTF8 ASN1_STRING_TO_UTF8
-#define ASN1_STRING_type ASN1_STRING_TYPE
-#define BIO_ctrl BIO_CTRL
-#define BIO_free BIO_FREE
-#define BIO_new BIO_NEW
-#define BIO_s_mem BIO_S_MEM
-#define BN_bn2bin BN_BN2BIN
-#define BN_num_bits BN_NUM_BITS
-#define CRYPTO_cleanup_all_ex_data CRYPTO_CLEANUP_ALL_EX_DATA
-#define CRYPTO_free CRYPTO_FREE
-#define CRYPTO_malloc CRYPTO_MALLOC
-#define DES_ecb_encrypt DES_ECB_ENCRYPT
-#define DES_set_key DES_SET_KEY
-#define DES_set_odd_parity DES_SET_ODD_PARITY
-#define ENGINE_ctrl ENGINE_CTRL
-#define ENGINE_ctrl_cmd ENGINE_CTRL_CMD
-#define ENGINE_finish ENGINE_FINISH
-#define ENGINE_free ENGINE_FREE
-#define ENGINE_get_first ENGINE_GET_FIRST
-#define ENGINE_get_id ENGINE_GET_ID
-#define ENGINE_get_next ENGINE_GET_NEXT
-#define ENGINE_init ENGINE_INIT
-#define ENGINE_load_builtin_engines ENGINE_LOAD_BUILTIN_ENGINES
-#define ENGINE_load_private_key ENGINE_LOAD_PRIVATE_KEY
-#define ENGINE_set_default ENGINE_SET_DEFAULT
-#define ERR_clear_error ERR_CLEAR_ERROR
-#define ERR_error_string ERR_ERROR_STRING
-#define ERR_error_string_n ERR_ERROR_STRING_N
-#define ERR_free_strings ERR_FREE_STRINGS
-#define ERR_get_error ERR_GET_ERROR
-#define ERR_peek_error ERR_PEEK_ERROR
-#define ERR_remove_state ERR_REMOVE_STATE
-#define EVP_PKEY_copy_parameters EVP_PKEY_COPY_PARAMETERS
-#define EVP_PKEY_free EVP_PKEY_FREE
-#define EVP_cleanup EVP_CLEANUP
-#define GENERAL_NAMES_free GENERAL_NAMES_FREE
-#define MD4_Final MD4_FINAL
-#define MD4_Init MD4_INIT
-#define MD4_Update MD4_UPDATE
-#define MD5_Final MD5_FINAL
-#define MD5_Init MD5_INIT
-#define MD5_Update MD5_UPDATE
-#define OPENSSL_add_all_algo_noconf OPENSSL_ADD_ALL_ALGO_NOCONF
-#define PEM_read_X509 PEM_READ_X509
-#define PEM_write_bio_X509 PEM_WRITE_BIO_X509
-#define PKCS12_PBE_add PKCS12_PBE_ADD
-#define PKCS12_free PKCS12_FREE
-#define PKCS12_parse PKCS12_PARSE
-#define RAND_add RAND_ADD
-#define RAND_bytes RAND_BYTES
-#define RAND_egd RAND_EGD
-#define RAND_file_name RAND_FILE_NAME
-#define RAND_load_file RAND_LOAD_FILE
-#define RAND_status RAND_STATUS
-#define SSL_CIPHER_get_name SSL_CIPHER_GET_NAME
-#define SSL_CTX_add_client_CA SSL_CTX_ADD_CLIENT_CA
-#define SSL_CTX_callback_ctrl SSL_CTX_CALLBACK_CTRL
-#define SSL_CTX_check_private_key SSL_CTX_CHECK_PRIVATE_KEY
-#define SSL_CTX_ctrl SSL_CTX_CTRL
-#define SSL_CTX_free SSL_CTX_FREE
-#define SSL_CTX_get_cert_store SSL_CTX_GET_CERT_STORE
-#define SSL_CTX_load_verify_locations SSL_CTX_LOAD_VERIFY_LOCATIONS
-#define SSL_CTX_new SSL_CTX_NEW
-#define SSL_CTX_set_cipher_list SSL_CTX_SET_CIPHER_LIST
-#define SSL_CTX_set_def_passwd_cb_ud SSL_CTX_SET_DEF_PASSWD_CB_UD
-#define SSL_CTX_set_default_passwd_cb SSL_CTX_SET_DEFAULT_PASSWD_CB
-#define SSL_CTX_set_verify SSL_CTX_SET_VERIFY
-#define SSL_CTX_use_PrivateKey SSL_CTX_USE_PRIVATEKEY
-#define SSL_CTX_use_PrivateKey_file SSL_CTX_USE_PRIVATEKEY_FILE
-#define SSL_CTX_use_cert_chain_file SSL_CTX_USE_CERT_CHAIN_FILE
-#define SSL_CTX_use_certificate SSL_CTX_USE_CERTIFICATE
-#define SSL_CTX_use_certificate_file SSL_CTX_USE_CERTIFICATE_FILE
-#define SSL_SESSION_free SSL_SESSION_FREE
-#define SSL_connect SSL_CONNECT
-#define SSL_free SSL_FREE
-#define SSL_get1_session SSL_GET1_SESSION
-#define SSL_get_certificate SSL_GET_CERTIFICATE
-#define SSL_get_current_cipher SSL_GET_CURRENT_CIPHER
-#define SSL_get_error SSL_GET_ERROR
-#define SSL_get_peer_cert_chain SSL_GET_PEER_CERT_CHAIN
-#define SSL_get_peer_certificate SSL_GET_PEER_CERTIFICATE
-#define SSL_get_privatekey SSL_GET_PRIVATEKEY
-#define SSL_get_shutdown SSL_GET_SHUTDOWN
-#define SSL_get_verify_result SSL_GET_VERIFY_RESULT
-#define SSL_library_init SSL_LIBRARY_INIT
-#define SSL_load_error_strings SSL_LOAD_ERROR_STRINGS
-#define SSL_new SSL_NEW
-#define SSL_peek SSL_PEEK
-#define SSL_pending SSL_PENDING
-#define SSL_read SSL_READ
-#define SSL_set_connect_state SSL_SET_CONNECT_STATE
-#define SSL_set_fd SSL_SET_FD
-#define SSL_set_session SSL_SET_SESSION
-#define SSL_shutdown SSL_SHUTDOWN
-#define SSL_write SSL_WRITE
-#define SSLeay SSLEAY
-#define SSLv23_client_method SSLV23_CLIENT_METHOD
-#define SSLv3_client_method SSLV3_CLIENT_METHOD
-#define TLSv1_client_method TLSV1_CLIENT_METHOD
-#define UI_OpenSSL UI_OPENSSL
-#define X509V3_EXT_print X509V3_EXT_PRINT
-#define X509_EXTENSION_get_critical X509_EXTENSION_GET_CRITICAL
-#define X509_EXTENSION_get_object X509_EXTENSION_GET_OBJECT
-#define X509_LOOKUP_file X509_LOOKUP_FILE
-#define X509_NAME_ENTRY_get_data X509_NAME_ENTRY_GET_DATA
-#define X509_NAME_get_entry X509_NAME_GET_ENTRY
-#define X509_NAME_get_index_by_NID X509_NAME_GET_INDEX_BY_NID
-#define X509_NAME_print_ex X509_NAME_PRINT_EX
-#define X509_STORE_CTX_get_current_cert X509_STORE_CTX_GET_CURRENT_CERT
-#define X509_STORE_add_lookup X509_STORE_ADD_LOOKUP
-#define X509_STORE_set_flags X509_STORE_SET_FLAGS
-#define X509_check_issued X509_CHECK_ISSUED
-#define X509_free X509_FREE
-#define X509_get_ext_d2i X509_GET_EXT_D2I
-#define X509_get_issuer_name X509_GET_ISSUER_NAME
-#define X509_get_pubkey X509_GET_PUBKEY
-#define X509_get_serialNumber X509_GET_SERIALNUMBER
-#define X509_get_subject_name X509_GET_SUBJECT_NAME
-#define X509_load_crl_file X509_LOAD_CRL_FILE
-#define X509_verify_cert_error_string X509_VERIFY_CERT_ERROR_STRING
-#define d2i_PKCS12_fp D2I_PKCS12_FP
-#define i2t_ASN1_OBJECT I2T_ASN1_OBJECT
-#define sk_num SK_NUM
-#define sk_pop SK_POP
-#define sk_pop_free SK_POP_FREE
-#define sk_value SK_VALUE
-
-#define USE_UPPERCASE_GSSAPI 1
-#define gss_seal GSS_SEAL
-#define gss_unseal GSS_UNSEAL
-
-#define USE_UPPERCASE_KRBAPI 1
-
-/* AI_NUMERICHOST needed for IP V6 support in Curl */
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#ifndef AI_NUMERICHOST
-#ifdef ENABLE_IPV6
-#undef ENABLE_IPV6
-#endif
-#endif
-#endif
-
-/* VAX symbols are always in uppercase */
-#ifdef __VAX
-#define inflate INFLATE
-#define inflateEnd INFLATEEND
-#define inflateInit2_ INFLATEINIT2_
-#define inflateInit_ INFLATEINIT_
-#define zlibVersion ZLIBVERSION
-#endif
-
-/* Older VAX OpenSSL port defines these as Macros */
-/* Need to include the headers first and then redefine */
-/* that way a newer port will also work if some one has one */
-#ifdef __VAX
-
-# if (OPENSSL_VERSION_NUMBER < 0x00907001L)
-# define des_set_odd_parity DES_SET_ODD_PARITY
-# define des_set_key DES_SET_KEY
-# define des_ecb_encrypt DES_ECB_ENCRYPT
-
-# endif
-# include <openssl/evp.h>
-# ifndef OpenSSL_add_all_algorithms
-# define OpenSSL_add_all_algorithms OPENSSL_ADD_ALL_ALGORITHMS
- void OPENSSL_ADD_ALL_ALGORITHMS(void);
-# endif
-
- /* Curl defines these to lower case and VAX needs them in upper case */
- /* So we need static routines */
-# if (OPENSSL_VERSION_NUMBER < 0x00907001L)
-
-# undef des_set_odd_parity
-# undef DES_set_odd_parity
-# undef des_set_key
-# undef DES_set_key
-# undef des_ecb_encrypt
-# undef DES_ecb_encrypt
-
- static void des_set_odd_parity(des_cblock *key) {
- DES_SET_ODD_PARITY(key);
- }
-
- static int des_set_key(const_des_cblock *key,
- des_key_schedule schedule) {
- return DES_SET_KEY(key, schedule);
- }
-
- static void des_ecb_encrypt(const_des_cblock *input,
- des_cblock *output,
- des_key_schedule ks,int enc) {
- DES_ECB_ENCRYPT(input, output, ks, enc);
- }
-#endif
-/* Need this to stop a macro redefinition error */
-#if OPENSSL_VERSION_NUMBER < 0x00907000L
-# ifdef X509_STORE_set_flags
-# undef X509_STORE_set_flags
-# define X509_STORE_set_flags(x,y) Curl_nop_stmt
-# endif
-#endif
-#endif
-
-#endif /* HEADER_CURL_SETUP_VMS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/share.c b/external/libcurl_android/jni/libcurl/lib/share.c
deleted file mode 100755
index b8b6bee8..00000000
--- a/external/libcurl_android/jni/libcurl/lib/share.c
+++ /dev/null
@@ -1,254 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "share.h"
-#include "vtls/vtls.h"
-#include "curl_memory.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-CURLSH *
-curl_share_init(void)
-{
- struct Curl_share *share = calloc(1, sizeof(struct Curl_share));
- if(share)
- share->specifier |= (1<<CURL_LOCK_DATA_SHARE);
-
- return share;
-}
-
-#undef curl_share_setopt
-CURLSHcode
-curl_share_setopt(CURLSH *sh, CURLSHoption option, ...)
-{
- struct Curl_share *share = (struct Curl_share *)sh;
- va_list param;
- int type;
- curl_lock_function lockfunc;
- curl_unlock_function unlockfunc;
- void *ptr;
- CURLSHcode res = CURLSHE_OK;
-
- if(share->dirty)
- /* don't allow setting options while one or more handles are already
- using this share */
- return CURLSHE_IN_USE;
-
- va_start(param, option);
-
- switch(option) {
- case CURLSHOPT_SHARE:
- /* this is a type this share will share */
- type = va_arg(param, int);
- share->specifier |= (1<<type);
- switch( type ) {
- case CURL_LOCK_DATA_DNS:
- if(!share->hostcache) {
- share->hostcache = Curl_mk_dnscache();
- if(!share->hostcache)
- res = CURLSHE_NOMEM;
- }
- break;
-
- case CURL_LOCK_DATA_COOKIE:
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
- if(!share->cookies) {
- share->cookies = Curl_cookie_init(NULL, NULL, NULL, TRUE );
- if(!share->cookies)
- res = CURLSHE_NOMEM;
- }
-#else /* CURL_DISABLE_HTTP */
- res = CURLSHE_NOT_BUILT_IN;
-#endif
- break;
-
- case CURL_LOCK_DATA_SSL_SESSION:
-#ifdef USE_SSL
- if(!share->sslsession) {
- share->max_ssl_sessions = 8;
- share->sslsession = calloc(share->max_ssl_sessions,
- sizeof(struct curl_ssl_session));
- share->sessionage = 0;
- if(!share->sslsession)
- res = CURLSHE_NOMEM;
- }
-#else
- res = CURLSHE_NOT_BUILT_IN;
-#endif
- break;
-
- case CURL_LOCK_DATA_CONNECT: /* not supported (yet) */
- break;
-
- default:
- res = CURLSHE_BAD_OPTION;
- }
- break;
-
- case CURLSHOPT_UNSHARE:
- /* this is a type this share will no longer share */
- type = va_arg(param, int);
- share->specifier &= ~(1<<type);
- switch( type ) {
- case CURL_LOCK_DATA_DNS:
- if(share->hostcache) {
- Curl_hash_destroy(share->hostcache);
- share->hostcache = NULL;
- }
- break;
-
- case CURL_LOCK_DATA_COOKIE:
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
- if(share->cookies) {
- Curl_cookie_cleanup(share->cookies);
- share->cookies = NULL;
- }
-#else /* CURL_DISABLE_HTTP */
- res = CURLSHE_NOT_BUILT_IN;
-#endif
- break;
-
- case CURL_LOCK_DATA_SSL_SESSION:
-#ifdef USE_SSL
- Curl_safefree(share->sslsession);
-#else
- res = CURLSHE_NOT_BUILT_IN;
-#endif
- break;
-
- case CURL_LOCK_DATA_CONNECT:
- break;
-
- default:
- res = CURLSHE_BAD_OPTION;
- break;
- }
- break;
-
- case CURLSHOPT_LOCKFUNC:
- lockfunc = va_arg(param, curl_lock_function);
- share->lockfunc = lockfunc;
- break;
-
- case CURLSHOPT_UNLOCKFUNC:
- unlockfunc = va_arg(param, curl_unlock_function);
- share->unlockfunc = unlockfunc;
- break;
-
- case CURLSHOPT_USERDATA:
- ptr = va_arg(param, void *);
- share->clientdata = ptr;
- break;
-
- default:
- res = CURLSHE_BAD_OPTION;
- break;
- }
-
- va_end(param);
-
- return res;
-}
-
-CURLSHcode
-curl_share_cleanup(CURLSH *sh)
-{
- struct Curl_share *share = (struct Curl_share *)sh;
-
- if(share == NULL)
- return CURLSHE_INVALID;
-
- if(share->lockfunc)
- share->lockfunc(NULL, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE,
- share->clientdata);
-
- if(share->dirty) {
- if(share->unlockfunc)
- share->unlockfunc(NULL, CURL_LOCK_DATA_SHARE, share->clientdata);
- return CURLSHE_IN_USE;
- }
-
- if(share->hostcache) {
- Curl_hash_destroy(share->hostcache);
- share->hostcache = NULL;
- }
-
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
- if(share->cookies)
- Curl_cookie_cleanup(share->cookies);
-#endif
-
-#ifdef USE_SSL
- if(share->sslsession) {
- size_t i;
- for(i = 0; i < share->max_ssl_sessions; i++)
- Curl_ssl_kill_session(&(share->sslsession[i]));
- free(share->sslsession);
- }
-#endif
-
- if(share->unlockfunc)
- share->unlockfunc(NULL, CURL_LOCK_DATA_SHARE, share->clientdata);
- free(share);
-
- return CURLSHE_OK;
-}
-
-
-CURLSHcode
-Curl_share_lock(struct SessionHandle *data, curl_lock_data type,
- curl_lock_access accesstype)
-{
- struct Curl_share *share = data->share;
-
- if(share == NULL)
- return CURLSHE_INVALID;
-
- if(share->specifier & (1<<type)) {
- if(share->lockfunc) /* only call this if set! */
- share->lockfunc(data, type, accesstype, share->clientdata);
- }
- /* else if we don't share this, pretend successful lock */
-
- return CURLSHE_OK;
-}
-
-CURLSHcode
-Curl_share_unlock(struct SessionHandle *data, curl_lock_data type)
-{
- struct Curl_share *share = data->share;
-
- if(share == NULL)
- return CURLSHE_INVALID;
-
- if(share->specifier & (1<<type)) {
- if(share->unlockfunc) /* only call this if set! */
- share->unlockfunc (data, type, share->clientdata);
- }
-
- return CURLSHE_OK;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/share.h b/external/libcurl_android/jni/libcurl/lib/share.h
deleted file mode 100755
index 9a5128e9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/share.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef HEADER_CURL_SHARE_H
-#define HEADER_CURL_SHARE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-#include <curl/curl.h>
-#include "cookie.h"
-#include "urldata.h"
-
-/* SalfordC says "A structure member may not be volatile". Hence:
- */
-#ifdef __SALFORDC__
-#define CURL_VOLATILE
-#else
-#define CURL_VOLATILE volatile
-#endif
-
-/* this struct is libcurl-private, don't export details */
-struct Curl_share {
- unsigned int specifier;
- CURL_VOLATILE unsigned int dirty;
-
- curl_lock_function lockfunc;
- curl_unlock_function unlockfunc;
- void *clientdata;
-
- struct curl_hash *hostcache;
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
- struct CookieInfo *cookies;
-#endif
-
- struct curl_ssl_session *sslsession;
- size_t max_ssl_sessions;
- long sessionage;
-};
-
-CURLSHcode Curl_share_lock (struct SessionHandle *, curl_lock_data,
- curl_lock_access);
-CURLSHcode Curl_share_unlock (struct SessionHandle *, curl_lock_data);
-
-#endif /* HEADER_CURL_SHARE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/sigpipe.h b/external/libcurl_android/jni/libcurl/lib/sigpipe.h
deleted file mode 100755
index e8d2acd6..00000000
--- a/external/libcurl_android/jni/libcurl/lib/sigpipe.h
+++ /dev/null
@@ -1,78 +0,0 @@
-#ifndef HEADER_CURL_SIGPIPE_H
-#define HEADER_CURL_SIGPIPE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#if defined(HAVE_SIGNAL_H) && defined(HAVE_SIGACTION) && defined(USE_OPENSSL)
-#include <signal.h>
-
-struct sigpipe_ignore {
- struct sigaction old_pipe_act;
- bool no_signal;
-};
-
-#define SIGPIPE_VARIABLE(x) struct sigpipe_ignore x
-
-/*
- * sigpipe_ignore() makes sure we ignore SIGPIPE while running libcurl
- * internals, and then sigpipe_restore() will restore the situation when we
- * return from libcurl again.
- */
-static void sigpipe_ignore(struct SessionHandle *data,
- struct sigpipe_ignore *ig)
-{
- /* get a local copy of no_signal because the SessionHandle might not be
- around when we restore */
- ig->no_signal = data->set.no_signal;
- if(!data->set.no_signal) {
- struct sigaction action;
- /* first, extract the existing situation */
- memset(&ig->old_pipe_act, 0, sizeof(struct sigaction));
- sigaction(SIGPIPE, NULL, &ig->old_pipe_act);
- action = ig->old_pipe_act;
- /* ignore this signal */
- action.sa_handler = SIG_IGN;
- sigaction(SIGPIPE, &action, NULL);
- }
-}
-
-/*
- * sigpipe_restore() puts back the outside world's opinion of signal handler
- * and SIGPIPE handling. It MUST only be called after a corresponding
- * sigpipe_ignore() was used.
- */
-static void sigpipe_restore(struct sigpipe_ignore *ig)
-{
- if(!ig->no_signal)
- /* restore the outside state */
- sigaction(SIGPIPE, &ig->old_pipe_act, NULL);
-}
-
-#else
-/* for systems without sigaction */
-#define sigpipe_ignore(x,y) Curl_nop_stmt
-#define sigpipe_restore(x) Curl_nop_stmt
-#define SIGPIPE_VARIABLE(x)
-#endif
-
-#endif /* HEADER_CURL_SIGPIPE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/slist.c b/external/libcurl_android/jni/libcurl/lib/slist.c
deleted file mode 100755
index 3cac6ca2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/slist.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "curl_memory.h"
-#include "slist.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* returns last node in linked list */
-static struct curl_slist *slist_get_last(struct curl_slist *list)
-{
- struct curl_slist *item;
-
- /* if caller passed us a NULL, return now */
- if(!list)
- return NULL;
-
- /* loop through to find the last item */
- item = list;
- while(item->next) {
- item = item->next;
- }
- return item;
-}
-
-/*
- * Curl_slist_append_nodup() appends a string to the linked list. Rather than
- * copying the string in dynamic storage, it takes its ownership. The string
- * should have been malloc()ated. Curl_slist_append_nodup always returns
- * the address of the first record, so that you can use this function as an
- * initialization function as well as an append function.
- * If an error occurs, NULL is returned and the string argument is NOT
- * released.
- */
-struct curl_slist *Curl_slist_append_nodup(struct curl_slist *list, char *data)
-{
- struct curl_slist *last;
- struct curl_slist *new_item;
-
- DEBUGASSERT(data);
-
- new_item = malloc(sizeof(struct curl_slist));
- if(!new_item)
- return NULL;
-
- new_item->next = NULL;
- new_item->data = data;
-
- /* if this is the first item, then new_item *is* the list */
- if(!list)
- return new_item;
-
- last = slist_get_last(list);
- last->next = new_item;
- return list;
-}
-
-/*
- * curl_slist_append() appends a string to the linked list. It always returns
- * the address of the first record, so that you can use this function as an
- * initialization function as well as an append function. If you find this
- * bothersome, then simply create a separate _init function and call it
- * appropriately from within the program.
- */
-struct curl_slist *curl_slist_append(struct curl_slist *list,
- const char *data)
-{
- char *dupdata = strdup(data);
-
- if(!dupdata)
- return NULL;
-
- list = Curl_slist_append_nodup(list, dupdata);
- if(!list)
- free(dupdata);
-
- return list;
-}
-
-/*
- * Curl_slist_duplicate() duplicates a linked list. It always returns the
- * address of the first record of the cloned list or NULL in case of an
- * error (or if the input list was NULL).
- */
-struct curl_slist *Curl_slist_duplicate(struct curl_slist *inlist)
-{
- struct curl_slist *outlist = NULL;
- struct curl_slist *tmp;
-
- while(inlist) {
- tmp = curl_slist_append(outlist, inlist->data);
-
- if(!tmp) {
- curl_slist_free_all(outlist);
- return NULL;
- }
-
- outlist = tmp;
- inlist = inlist->next;
- }
- return outlist;
-}
-
-/* be nice and clean up resources */
-void curl_slist_free_all(struct curl_slist *list)
-{
- struct curl_slist *next;
- struct curl_slist *item;
-
- if(!list)
- return;
-
- item = list;
- do {
- next = item->next;
- Curl_safefree(item->data);
- free(item);
- item = next;
- } while(next);
-}
-
diff --git a/external/libcurl_android/jni/libcurl/lib/slist.h b/external/libcurl_android/jni/libcurl/lib/slist.h
deleted file mode 100755
index ea7dcc48..00000000
--- a/external/libcurl_android/jni/libcurl/lib/slist.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef HEADER_CURL_SLIST_H
-#define HEADER_CURL_SLIST_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Curl_slist_duplicate() duplicates a linked list. It always returns the
- * address of the first record of the cloned list or NULL in case of an
- * error (or if the input list was NULL).
- */
-struct curl_slist *Curl_slist_duplicate(struct curl_slist *inlist);
-
-/*
- * Curl_slist_append_nodup() takes ownership of the given string and appends
- * it to the list.
- */
-struct curl_slist *Curl_slist_append_nodup(struct curl_slist *list,
- char *data);
-
-#endif /* HEADER_CURL_SLIST_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/smtp.c b/external/libcurl_android/jni/libcurl/lib/smtp.c
deleted file mode 100755
index 9aa8b15b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/smtp.c
+++ /dev/null
@@ -1,2378 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- * RFC1870 SMTP Service Extension for Message Size
- * RFC2195 CRAM-MD5 authentication
- * RFC2831 DIGEST-MD5 authentication
- * RFC3207 SMTP over TLS
- * RFC4422 Simple Authentication and Security Layer (SASL)
- * RFC4616 PLAIN authentication
- * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
- * RFC4954 SMTP Authentication
- * RFC5321 SMTP protocol
- * RFC6749 OAuth 2.0 Authorization Framework
- * Draft SMTP URL Interface <draft-earhart-url-smtp-00.txt>
- * Draft LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_SMTP
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "if2ip.h"
-#include "hostip.h"
-#include "progress.h"
-#include "transfer.h"
-#include "escape.h"
-#include "http.h" /* for HTTP proxy tunnel stuff */
-#include "socks.h"
-#include "smtp.h"
-
-#include "strtoofft.h"
-#include "strequal.h"
-#include "vtls/vtls.h"
-#include "connect.h"
-#include "strerror.h"
-#include "select.h"
-#include "multiif.h"
-#include "url.h"
-#include "rawstr.h"
-#include "curl_gethostname.h"
-#include "curl_sasl.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* Local API functions */
-static CURLcode smtp_regular_transfer(struct connectdata *conn, bool *done);
-static CURLcode smtp_do(struct connectdata *conn, bool *done);
-static CURLcode smtp_done(struct connectdata *conn, CURLcode status,
- bool premature);
-static CURLcode smtp_connect(struct connectdata *conn, bool *done);
-static CURLcode smtp_disconnect(struct connectdata *conn, bool dead);
-static CURLcode smtp_multi_statemach(struct connectdata *conn, bool *done);
-static int smtp_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks);
-static CURLcode smtp_doing(struct connectdata *conn, bool *dophase_done);
-static CURLcode smtp_setup_connection(struct connectdata *conn);
-static CURLcode smtp_parse_url_options(struct connectdata *conn);
-static CURLcode smtp_parse_url_path(struct connectdata *conn);
-static CURLcode smtp_parse_custom_request(struct connectdata *conn);
-static CURLcode smtp_calc_sasl_details(struct connectdata *conn,
- const char **mech,
- char **initresp, size_t *len,
- smtpstate *state1, smtpstate *state2);
-
-/*
- * SMTP protocol handler.
- */
-
-const struct Curl_handler Curl_handler_smtp = {
- "SMTP", /* scheme */
- smtp_setup_connection, /* setup_connection */
- smtp_do, /* do_it */
- smtp_done, /* done */
- ZERO_NULL, /* do_more */
- smtp_connect, /* connect_it */
- smtp_multi_statemach, /* connecting */
- smtp_doing, /* doing */
- smtp_getsock, /* proto_getsock */
- smtp_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- smtp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_SMTP, /* defport */
- CURLPROTO_SMTP, /* protocol */
- PROTOPT_CLOSEACTION | PROTOPT_NOURLQUERY /* flags */
-};
-
-#ifdef USE_SSL
-/*
- * SMTPS protocol handler.
- */
-
-const struct Curl_handler Curl_handler_smtps = {
- "SMTPS", /* scheme */
- smtp_setup_connection, /* setup_connection */
- smtp_do, /* do_it */
- smtp_done, /* done */
- ZERO_NULL, /* do_more */
- smtp_connect, /* connect_it */
- smtp_multi_statemach, /* connecting */
- smtp_doing, /* doing */
- smtp_getsock, /* proto_getsock */
- smtp_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- smtp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_SMTPS, /* defport */
- CURLPROTO_SMTPS, /* protocol */
- PROTOPT_CLOSEACTION | PROTOPT_SSL
- | PROTOPT_NOURLQUERY /* flags */
-};
-#endif
-
-#ifndef CURL_DISABLE_HTTP
-/*
- * HTTP-proxyed SMTP protocol handler.
- */
-
-static const struct Curl_handler Curl_handler_smtp_proxy = {
- "SMTP", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_SMTP, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-#ifdef USE_SSL
-/*
- * HTTP-proxyed SMTPS protocol handler.
- */
-
-static const struct Curl_handler Curl_handler_smtps_proxy = {
- "SMTPS", /* scheme */
- Curl_http_setup_conn, /* setup_connection */
- Curl_http, /* do_it */
- Curl_http_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_SMTPS, /* defport */
- CURLPROTO_HTTP, /* protocol */
- PROTOPT_NONE /* flags */
-};
-#endif
-#endif
-
-#ifdef USE_SSL
-static void smtp_to_smtps(struct connectdata *conn)
-{
- conn->handler = &Curl_handler_smtps;
-}
-#else
-#define smtp_to_smtps(x) Curl_nop_stmt
-#endif
-
-/***********************************************************************
- *
- * smtp_endofresp()
- *
- * Checks for an ending SMTP status code at the start of the given string, but
- * also detects various capabilities from the EHLO response including the
- * supported authentication mechanisms.
- */
-static bool smtp_endofresp(struct connectdata *conn, char *line, size_t len,
- int *resp)
-{
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- bool result = FALSE;
-
- /* Nothing for us */
- if(len < 4 || !ISDIGIT(line[0]) || !ISDIGIT(line[1]) || !ISDIGIT(line[2]))
- return FALSE;
-
- /* Do we have a command response? This should be the response code followed
- by a space and optionally some text as per RFC-5321 and as outlined in
- Section 4. Examples of RFC-4954 but some e-mail servers ignore this and
- only send the response code instead as per Section 4.2. */
- if(line[3] == ' ' || len == 5) {
- result = TRUE;
- *resp = curlx_sltosi(strtol(line, NULL, 10));
-
- /* Make sure real server never sends internal value */
- if(*resp == 1)
- *resp = 0;
- }
- /* Do we have a multiline (continuation) response? */
- else if(line[3] == '-' &&
- (smtpc->state == SMTP_EHLO || smtpc->state == SMTP_COMMAND)) {
- result = TRUE;
- *resp = 1; /* Internal response code */
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_get_message()
- *
- * Gets the authentication message from the response buffer.
- */
-static void smtp_get_message(char *buffer, char** outptr)
-{
- size_t len = 0;
- char* message = NULL;
-
- /* Find the start of the message */
- for(message = buffer + 4; *message == ' ' || *message == '\t'; message++)
- ;
-
- /* Find the end of the message */
- for(len = strlen(message); len--;)
- if(message[len] != '\r' && message[len] != '\n' && message[len] != ' ' &&
- message[len] != '\t')
- break;
-
- /* Terminate the message */
- if(++len) {
- message[len] = '\0';
- }
-
- *outptr = message;
-}
-
-/***********************************************************************
- *
- * state()
- *
- * This is the ONLY way to change SMTP state!
- */
-static void state(struct connectdata *conn, smtpstate newstate)
-{
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- /* for debug purposes */
- static const char * const names[] = {
- "STOP",
- "SERVERGREET",
- "EHLO",
- "HELO",
- "STARTTLS",
- "UPGRADETLS",
- "AUTH_PLAIN",
- "AUTH_LOGIN",
- "AUTH_LOGIN_PASSWD",
- "AUTH_CRAMMD5",
- "AUTH_DIGESTMD5",
- "AUTH_DIGESTMD5_RESP",
- "AUTH_NTLM",
- "AUTH_NTLM_TYPE2MSG",
- "AUTH_GSSAPI",
- "AUTH_GSSAPI_TOKEN",
- "AUTH_GSSAPI_NO_DATA",
- "AUTH_XOAUTH2",
- "AUTH_CANCEL",
- "AUTH_FINAL",
- "COMMAND",
- "MAIL",
- "RCPT",
- "DATA",
- "POSTDATA",
- "QUIT",
- /* LAST */
- };
-
- if(smtpc->state != newstate)
- infof(conn->data, "SMTP %p state change from %s to %s\n",
- (void *)smtpc, names[smtpc->state], names[newstate]);
-#endif
-
- smtpc->state = newstate;
-}
-
-/***********************************************************************
- *
- * smtp_perform_ehlo()
- *
- * Sends the EHLO command to not only initialise communication with the ESMTP
- * server but to also obtain a list of server side supported capabilities.
- */
-static CURLcode smtp_perform_ehlo(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-
- smtpc->authmechs = 0; /* No known authentication mechanisms yet */
- smtpc->authused = 0; /* Clear the authentication mechanism used
- for esmtp connections */
- smtpc->tls_supported = FALSE; /* Clear the TLS capability */
- smtpc->auth_supported = FALSE; /* Clear the AUTH capability */
-
- /* Send the EHLO command */
- result = Curl_pp_sendf(&smtpc->pp, "EHLO %s", smtpc->domain);
-
- if(!result)
- state(conn, SMTP_EHLO);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_helo()
- *
- * Sends the HELO command to initialise communication with the SMTP server.
- */
-static CURLcode smtp_perform_helo(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-
- smtpc->authused = 0; /* No authentication mechanism used in smtp
- connections */
-
- /* Send the HELO command */
- result = Curl_pp_sendf(&smtpc->pp, "HELO %s", smtpc->domain);
-
- if(!result)
- state(conn, SMTP_HELO);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_starttls()
- *
- * Sends the STLS command to start the upgrade to TLS.
- */
-static CURLcode smtp_perform_starttls(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* Send the STARTTLS command */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "STARTTLS");
-
- if(!result)
- state(conn, SMTP_STARTTLS);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_upgrade_tls()
- *
- * Performs the upgrade to TLS.
- */
-static CURLcode smtp_perform_upgrade_tls(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-
- /* Start the SSL connection */
- result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &smtpc->ssldone);
-
- if(!result) {
- if(smtpc->state != SMTP_UPGRADETLS)
- state(conn, SMTP_UPGRADETLS);
-
- if(smtpc->ssldone) {
- smtp_to_smtps(conn);
- result = smtp_perform_ehlo(conn);
- }
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_auth()
- *
- * Sends an AUTH command allowing the client to login with the given SASL
- * authentication mechanism.
- */
-static CURLcode smtp_perform_auth(struct connectdata *conn,
- const char *mech,
- const char *initresp, size_t len,
- smtpstate state1, smtpstate state2)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-
- if(initresp && 8 + strlen(mech) + len <= 512) { /* AUTH <mech> ...<crlf> */
- /* Send the AUTH command with the initial response */
- result = Curl_pp_sendf(&smtpc->pp, "AUTH %s %s", mech, initresp);
-
- if(!result)
- state(conn, state2);
- }
- else {
- /* Send the AUTH command */
- result = Curl_pp_sendf(&smtpc->pp, "AUTH %s", mech);
-
- if(!result)
- state(conn, state1);
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_authentication()
- *
- * Initiates the authentication sequence, with the appropriate SASL
- * authentication mechanism.
- */
-static CURLcode smtp_perform_authentication(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- const char *mech = NULL;
- char *initresp = NULL;
- size_t len = 0;
- smtpstate state1 = SMTP_STOP;
- smtpstate state2 = SMTP_STOP;
-
- /* Check we have a username and password to authenticate with, and the
- server supports authentiation, and end the connect phase if not */
- if(!conn->bits.user_passwd || !smtpc->auth_supported) {
- state(conn, SMTP_STOP);
-
- return result;
- }
-
- /* Calculate the SASL login details */
- result = smtp_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
- &state2);
-
- if(!result) {
- if(mech) {
- /* Perform SASL based authentication */
- result = smtp_perform_auth(conn, mech, initresp, len, state1, state2);
-
- Curl_safefree(initresp);
- }
- else {
- /* Other mechanisms not supported */
- infof(conn->data, "No known authentication mechanisms supported!\n");
- result = CURLE_LOGIN_DENIED;
- }
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_command()
- *
- * Sends a SMTP based command.
- */
-static CURLcode smtp_perform_command(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp = data->req.protop;
-
- /* Send the command */
- if(smtp->rcpt)
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s %s",
- smtp->custom && smtp->custom[0] != '\0' ?
- smtp->custom : "VRFY",
- smtp->rcpt->data);
- else
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s",
- smtp->custom && smtp->custom[0] != '\0' ?
- smtp->custom : "HELP");
-
- if(!result)
- state(conn, SMTP_COMMAND);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_mail()
- *
- * Sends an MAIL command to initiate the upload of a message.
- */
-static CURLcode smtp_perform_mail(struct connectdata *conn)
-{
- char *from = NULL;
- char *auth = NULL;
- char *size = NULL;
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- /* Calculate the FROM parameter */
- if(!data->set.str[STRING_MAIL_FROM])
- /* Null reverse-path, RFC-5321, sect. 3.6.3 */
- from = strdup("<>");
- else if(data->set.str[STRING_MAIL_FROM][0] == '<')
- from = aprintf("%s", data->set.str[STRING_MAIL_FROM]);
- else
- from = aprintf("<%s>", data->set.str[STRING_MAIL_FROM]);
-
- if(!from)
- return CURLE_OUT_OF_MEMORY;
-
- /* Calculate the optional AUTH parameter */
- if(data->set.str[STRING_MAIL_AUTH] && conn->proto.smtpc.authused) {
- if(data->set.str[STRING_MAIL_AUTH][0] != '\0')
- auth = aprintf("%s", data->set.str[STRING_MAIL_AUTH]);
- else
- /* Empty AUTH, RFC-2554, sect. 5 */
- auth = strdup("<>");
-
- if(!auth) {
- Curl_safefree(from);
-
- return CURLE_OUT_OF_MEMORY;
- }
- }
-
- /* Calculate the optional SIZE parameter */
- if(conn->proto.smtpc.size_supported && conn->data->state.infilesize > 0) {
- size = aprintf("%" CURL_FORMAT_CURL_OFF_T, data->state.infilesize);
-
- if(!size) {
- Curl_safefree(from);
- Curl_safefree(auth);
-
- return CURLE_OUT_OF_MEMORY;
- }
- }
-
- /* Send the MAIL command */
- if(!auth && !size)
- result = Curl_pp_sendf(&conn->proto.smtpc.pp,
- "MAIL FROM:%s", from);
- else if(auth && !size)
- result = Curl_pp_sendf(&conn->proto.smtpc.pp,
- "MAIL FROM:%s AUTH=%s", from, auth);
- else if(auth && size)
- result = Curl_pp_sendf(&conn->proto.smtpc.pp,
- "MAIL FROM:%s AUTH=%s SIZE=%s", from, auth, size);
- else
- result = Curl_pp_sendf(&conn->proto.smtpc.pp,
- "MAIL FROM:%s SIZE=%s", from, size);
-
- Curl_safefree(from);
- Curl_safefree(auth);
- Curl_safefree(size);
-
- if(!result)
- state(conn, SMTP_MAIL);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_rcpt_to()
- *
- * Sends a RCPT TO command for a given recipient as part of the message upload
- * process.
- */
-static CURLcode smtp_perform_rcpt_to(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp = data->req.protop;
-
- /* Send the RCPT TO command */
- if(smtp->rcpt->data[0] == '<')
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:%s",
- smtp->rcpt->data);
- else
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "RCPT TO:<%s>",
- smtp->rcpt->data);
- if(!result)
- state(conn, SMTP_RCPT);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform_quit()
- *
- * Performs the quit action prior to sclose() being called.
- */
-static CURLcode smtp_perform_quit(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
- /* Send the QUIT command */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "QUIT");
-
- if(!result)
- state(conn, SMTP_QUIT);
-
- return result;
-}
-
-/* For the initial server greeting */
-static CURLcode smtp_state_servergreet_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode/100 != 2) {
- failf(data, "Got unexpected smtp-server response: %d", smtpcode);
- result = CURLE_FTP_WEIRD_SERVER_REPLY;
- }
- else
- result = smtp_perform_ehlo(conn);
-
- return result;
-}
-
-/* For STARTTLS responses */
-static CURLcode smtp_state_starttls_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 220) {
- if(data->set.use_ssl != CURLUSESSL_TRY) {
- failf(data, "STARTTLS denied. %c", smtpcode);
- result = CURLE_USE_SSL_FAILED;
- }
- else
- result = smtp_perform_authentication(conn);
- }
- else
- result = smtp_perform_upgrade_tls(conn);
-
- return result;
-}
-
-/* For EHLO responses */
-static CURLcode smtp_state_ehlo_resp(struct connectdata *conn, int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- const char *line = data->state.buffer;
- size_t len = strlen(line);
- size_t wordlen;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode/100 != 2 && smtpcode != 1) {
- if(data->set.use_ssl <= CURLUSESSL_TRY || conn->ssl[FIRSTSOCKET].use)
- result = smtp_perform_helo(conn);
- else {
- failf(data, "Remote access denied: %d", smtpcode);
- result = CURLE_REMOTE_ACCESS_DENIED;
- }
- }
- else {
- line += 4;
- len -= 4;
-
- /* Does the server support the STARTTLS capability? */
- if(len >= 8 && !memcmp(line, "STARTTLS", 8))
- smtpc->tls_supported = TRUE;
-
- /* Does the server support the SIZE capability? */
- else if(len >= 4 && !memcmp(line, "SIZE", 4))
- smtpc->size_supported = TRUE;
-
- /* Does the server support authentication? */
- else if(len >= 5 && !memcmp(line, "AUTH ", 5)) {
- smtpc->auth_supported = TRUE;
-
- /* Advance past the AUTH keyword */
- line += 5;
- len -= 5;
-
- /* Loop through the data line */
- for(;;) {
- while(len &&
- (*line == ' ' || *line == '\t' ||
- *line == '\r' || *line == '\n')) {
-
- line++;
- len--;
- }
-
- if(!len)
- break;
-
- /* Extract the word */
- for(wordlen = 0; wordlen < len && line[wordlen] != ' ' &&
- line[wordlen] != '\t' && line[wordlen] != '\r' &&
- line[wordlen] != '\n';)
- wordlen++;
-
- /* Test the word for a matching authentication mechanism */
- if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_LOGIN))
- smtpc->authmechs |= SASL_MECH_LOGIN;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_PLAIN))
- smtpc->authmechs |= SASL_MECH_PLAIN;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_CRAM_MD5))
- smtpc->authmechs |= SASL_MECH_CRAM_MD5;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_DIGEST_MD5))
- smtpc->authmechs |= SASL_MECH_DIGEST_MD5;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_GSSAPI))
- smtpc->authmechs |= SASL_MECH_GSSAPI;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_EXTERNAL))
- smtpc->authmechs |= SASL_MECH_EXTERNAL;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_NTLM))
- smtpc->authmechs |= SASL_MECH_NTLM;
- else if(sasl_mech_equal(line, wordlen, SASL_MECH_STRING_XOAUTH2))
- smtpc->authmechs |= SASL_MECH_XOAUTH2;
-
- line += wordlen;
- len -= wordlen;
- }
- }
-
- if(smtpcode != 1) {
- if(data->set.use_ssl && !conn->ssl[FIRSTSOCKET].use) {
- /* We don't have a SSL/TLS connection yet, but SSL is requested */
- if(smtpc->tls_supported)
- /* Switch to TLS connection now */
- result = smtp_perform_starttls(conn);
- else if(data->set.use_ssl == CURLUSESSL_TRY)
- /* Fallback and carry on with authentication */
- result = smtp_perform_authentication(conn);
- else {
- failf(data, "STARTTLS not supported.");
- result = CURLE_USE_SSL_FAILED;
- }
- }
- else
- result = smtp_perform_authentication(conn);
- }
- }
-
- return result;
-}
-
-/* For HELO responses */
-static CURLcode smtp_state_helo_resp(struct connectdata *conn, int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode/100 != 2) {
- failf(data, "Remote access denied: %d", smtpcode);
- result = CURLE_REMOTE_ACCESS_DENIED;
- }
- else
- /* End of connect phase */
- state(conn, SMTP_STOP);
-
- return result;
-}
-
-/* For AUTH PLAIN (without initial response) responses */
-static CURLcode smtp_state_auth_plain_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *plainauth = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the authorisation message */
- result = Curl_sasl_create_plain_message(conn->data, conn->user,
- conn->passwd, &plainauth, &len);
- if(!result && plainauth) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", plainauth);
-
- if(!result)
- state(conn, SMTP_AUTH_FINAL);
- }
- }
-
- Curl_safefree(plainauth);
-
- return result;
-}
-
-/* For AUTH LOGIN (without initial response) responses */
-static CURLcode smtp_state_auth_login_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *authuser = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the user message */
- result = Curl_sasl_create_login_message(conn->data, conn->user,
- &authuser, &len);
- if(!result && authuser) {
- /* Send the user */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", authuser);
-
- if(!result)
- state(conn, SMTP_AUTH_LOGIN_PASSWD);
- }
- }
-
- Curl_safefree(authuser);
-
- return result;
-}
-
-/* For AUTH LOGIN user entry responses */
-static CURLcode smtp_state_auth_login_password_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *authpasswd = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the password message */
- result = Curl_sasl_create_login_message(conn->data, conn->passwd,
- &authpasswd, &len);
- if(!result && authpasswd) {
- /* Send the password */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", authpasswd);
-
- if(!result)
- state(conn, SMTP_AUTH_FINAL);
- }
- }
-
- Curl_safefree(authpasswd);
-
- return result;
-}
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
-/* For AUTH CRAM-MD5 responses */
-static CURLcode smtp_state_auth_cram_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlg = NULL;
- char *chlg64 = NULL;
- char *rplyb64 = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- return CURLE_LOGIN_DENIED;
- }
-
- /* Get the challenge message */
- smtp_get_message(data->state.buffer, &chlg64);
-
- /* Decode the challenge message */
- result = Curl_sasl_decode_cram_md5_message(chlg64, &chlg, &len);
- if(result) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "*");
-
- if(!result)
- state(conn, SMTP_AUTH_CANCEL);
- }
- else {
- /* Create the response message */
- result = Curl_sasl_create_cram_md5_message(data, chlg, conn->user,
- conn->passwd, &rplyb64, &len);
- if(!result && rplyb64) {
- /* Send the response */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", rplyb64);
-
- if(!result)
- state(conn, SMTP_AUTH_FINAL);
- }
- }
-
- Curl_safefree(chlg);
- Curl_safefree(rplyb64);
-
- return result;
-}
-
-/* For AUTH DIGEST-MD5 challenge responses */
-static CURLcode smtp_state_auth_digest_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlg64 = NULL;
- char *rplyb64 = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- return CURLE_LOGIN_DENIED;
- }
-
- /* Get the challenge message */
- smtp_get_message(data->state.buffer, &chlg64);
-
- /* Create the response message */
- result = Curl_sasl_create_digest_md5_message(data, chlg64,
- conn->user, conn->passwd,
- "smtp", &rplyb64, &len);
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "*");
-
- if(!result)
- state(conn, SMTP_AUTH_CANCEL);
- }
- }
- else {
- /* Send the response */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", rplyb64);
-
- if(!result)
- state(conn, SMTP_AUTH_DIGESTMD5_RESP);
- }
-
- Curl_safefree(rplyb64);
-
- return result;
-}
-
-/* For AUTH DIGEST-MD5 challenge-response responses */
-static CURLcode smtp_state_auth_digest_resp_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Authentication failed: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Send an empty response */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "");
-
- if(!result)
- state(conn, SMTP_AUTH_FINAL);
- }
-
- return result;
-}
-
-#endif
-
-#ifdef USE_NTLM
-/* For AUTH NTLM (without initial response) responses */
-static CURLcode smtp_state_auth_ntlm_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *type1msg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the type-1 message */
- result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
- &conn->ntlm,
- &type1msg, &len);
- if(!result && type1msg) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", type1msg);
-
- if(!result)
- state(conn, SMTP_AUTH_NTLM_TYPE2MSG);
- }
- }
-
- Curl_safefree(type1msg);
-
- return result;
-}
-
-/* For NTLM type-2 responses (sent in reponse to our type-1 message) */
-static CURLcode smtp_state_auth_ntlm_type2msg_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *type2msg = NULL;
- char *type3msg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the type-2 message */
- smtp_get_message(data->state.buffer, &type2msg);
-
- /* Decode the type-2 message */
- result = Curl_sasl_decode_ntlm_type2_message(data, type2msg, &conn->ntlm);
- if(result) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "*");
-
- if(!result)
- state(conn, SMTP_AUTH_CANCEL);
- }
- else {
- /* Create the type-3 message */
- result = Curl_sasl_create_ntlm_type3_message(data, conn->user,
- conn->passwd, &conn->ntlm,
- &type3msg, &len);
- if(!result && type3msg) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", type3msg);
-
- if(!result)
- state(conn, SMTP_AUTH_FINAL);
- }
- }
- }
-
- Curl_safefree(type3msg);
-
- return result;
-}
-#endif
-
-#if defined(USE_WINDOWS_SSPI)
-/* For AUTH GSSAPI (without initial response) responses */
-static CURLcode smtp_state_auth_gssapi_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- char *respmsg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the initial response message */
- result = Curl_sasl_create_gssapi_user_message(data, conn->user,
- conn->passwd, "smtp",
- smtpc->mutual_auth, NULL,
- &conn->krb5,
- &respmsg, &len);
- if(!result && respmsg) {
- /* Send the message */
- result = Curl_pp_sendf(&smtpc->pp, "%s", respmsg);
-
- if(!result)
- state(conn, SMTP_AUTH_GSSAPI_TOKEN);
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-
-/* For AUTH GSSAPI user token responses */
-static CURLcode smtp_state_auth_gssapi_token_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- char *chlgmsg = NULL;
- char *respmsg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the challenge message */
- smtp_get_message(data->state.buffer, &chlgmsg);
-
- if(smtpc->mutual_auth)
- /* Decode the user token challenge and create the optional response
- message */
- result = Curl_sasl_create_gssapi_user_message(data, NULL, NULL, NULL,
- smtpc->mutual_auth,
- chlgmsg, &conn->krb5,
- &respmsg, &len);
- else
- /* Decode the security challenge and create the response message */
- result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
- &conn->krb5,
- &respmsg, &len);
-
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&smtpc->pp, "%s", "*");
-
- if(!result)
- state(conn, SMTP_AUTH_CANCEL);
- }
- }
- else {
- /* Send the response */
- if(respmsg)
- result = Curl_pp_sendf(&smtpc->pp, "%s", respmsg);
- else
- result = Curl_pp_sendf(&smtpc->pp, "%s", "");
-
- if(!result)
- state(conn, (smtpc->mutual_auth ? SMTP_AUTH_GSSAPI_NO_DATA :
- SMTP_AUTH_FINAL));
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-
-/* For AUTH GSSAPI no data responses */
-static CURLcode smtp_state_auth_gssapi_no_data_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- char *chlgmsg = NULL;
- char *respmsg = NULL;
- size_t len = 0;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Get the challenge message */
- smtp_get_message(data->state.buffer, &chlgmsg);
-
- /* Decode the security challenge and create the response message */
- result = Curl_sasl_create_gssapi_security_message(data, chlgmsg,
- &conn->krb5,
- &respmsg, &len);
- if(result) {
- if(result == CURLE_BAD_CONTENT_ENCODING) {
- /* Send the cancellation */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "*");
-
- if(!result)
- state(conn, SMTP_AUTH_CANCEL);
- }
- }
- else {
- /* Send the response */
- if(respmsg) {
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", respmsg);
-
- if(!result)
- state(conn, SMTP_AUTH_FINAL);
- }
- }
- }
-
- Curl_safefree(respmsg);
-
- return result;
-}
-#endif
-
-/* For AUTH XOAUTH2 (without initial response) responses */
-static CURLcode smtp_state_auth_xoauth2_resp(struct connectdata *conn,
- int smtpcode, smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- size_t len = 0;
- char *xoauth = NULL;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 334) {
- failf(data, "Access denied: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else {
- /* Create the authorisation message */
- result = Curl_sasl_create_xoauth2_message(conn->data, conn->user,
- conn->xoauth2_bearer,
- &xoauth, &len);
- if(!result && xoauth) {
- /* Send the message */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", xoauth);
-
- if(!result)
- state(conn, SMTP_AUTH_FINAL);
- }
- }
-
- Curl_safefree(xoauth);
-
- return result;
-}
-
-/* For AUTH cancellation responses */
-static CURLcode smtp_state_auth_cancel_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- const char *mech = NULL;
- char *initresp = NULL;
- size_t len = 0;
- smtpstate state1 = SMTP_STOP;
- smtpstate state2 = SMTP_STOP;
-
- (void)smtpcode;
- (void)instate; /* no use for this yet */
-
- /* Remove the offending mechanism from the supported list */
- smtpc->authmechs ^= smtpc->authused;
-
- /* Calculate alternative SASL login details */
- result = smtp_calc_sasl_details(conn, &mech, &initresp, &len, &state1,
- &state2);
-
- if(!result) {
- /* Do we have any mechanisms left? */
- if(mech) {
- /* Retry SASL based authentication */
- result = smtp_perform_auth(conn, mech, initresp, len, state1, state2);
-
- Curl_safefree(initresp);
- }
- else {
- failf(data, "Authentication cancelled");
-
- result = CURLE_LOGIN_DENIED;
- }
- }
-
- return result;
-}
-
-/* For final responses in the AUTH sequence */
-static CURLcode smtp_state_auth_final_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 235) {
- failf(data, "Authentication failed: %d", smtpcode);
- result = CURLE_LOGIN_DENIED;
- }
- else
- /* End of connect phase */
- state(conn, SMTP_STOP);
-
- return result;
-}
-
-/* For command responses */
-static CURLcode smtp_state_command_resp(struct connectdata *conn, int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp = data->req.protop;
- char *line = data->state.buffer;
- size_t len = strlen(line);
-
- (void)instate; /* no use for this yet */
-
- if((smtp->rcpt && smtpcode/100 != 2 && smtpcode != 553 && smtpcode != 1) ||
- (!smtp->rcpt && smtpcode/100 != 2 && smtpcode != 1)) {
- failf(data, "Command failed: %d", smtpcode);
- result = CURLE_RECV_ERROR;
- }
- else {
- /* Temporarily add the LF character back and send as body to the client */
- if(!data->set.opt_no_body) {
- line[len] = '\n';
- result = Curl_client_write(conn, CLIENTWRITE_BODY, line, len + 1);
- line[len] = '\0';
- }
-
- if(smtpcode != 1) {
- if(smtp->rcpt) {
- smtp->rcpt = smtp->rcpt->next;
-
- if(smtp->rcpt) {
- /* Send the next command */
- result = smtp_perform_command(conn);
- }
- else
- /* End of DO phase */
- state(conn, SMTP_STOP);
- }
- else
- /* End of DO phase */
- state(conn, SMTP_STOP);
- }
- }
-
- return result;
-}
-
-/* For MAIL responses */
-static CURLcode smtp_state_mail_resp(struct connectdata *conn, int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode/100 != 2) {
- failf(data, "MAIL failed: %d", smtpcode);
- result = CURLE_SEND_ERROR;
- }
- else
- /* Start the RCPT TO command */
- result = smtp_perform_rcpt_to(conn);
-
- return result;
-}
-
-/* For RCPT responses */
-static CURLcode smtp_state_rcpt_resp(struct connectdata *conn, int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp = data->req.protop;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode/100 != 2) {
- failf(data, "RCPT failed: %d", smtpcode);
- result = CURLE_SEND_ERROR;
- }
- else {
- smtp->rcpt = smtp->rcpt->next;
-
- if(smtp->rcpt)
- /* Send the next RCPT TO command */
- result = smtp_perform_rcpt_to(conn);
- else {
- /* Send the DATA command */
- result = Curl_pp_sendf(&conn->proto.smtpc.pp, "%s", "DATA");
-
- if(!result)
- state(conn, SMTP_DATA);
- }
- }
-
- return result;
-}
-
-/* For DATA response */
-static CURLcode smtp_state_data_resp(struct connectdata *conn, int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 354) {
- failf(data, "DATA failed: %d", smtpcode);
- result = CURLE_SEND_ERROR;
- }
- else {
- /* Set the progress upload size */
- Curl_pgrsSetUploadSize(data, data->state.infilesize);
-
- /* SMTP upload */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
-
- /* End of DO phase */
- state(conn, SMTP_STOP);
- }
-
- return result;
-}
-
-/* For POSTDATA responses, which are received after the entire DATA
- part has been sent to the server */
-static CURLcode smtp_state_postdata_resp(struct connectdata *conn,
- int smtpcode,
- smtpstate instate)
-{
- CURLcode result = CURLE_OK;
-
- (void)instate; /* no use for this yet */
-
- if(smtpcode != 250)
- result = CURLE_RECV_ERROR;
-
- /* End of DONE phase */
- state(conn, SMTP_STOP);
-
- return result;
-}
-
-static CURLcode smtp_statemach_act(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
- struct SessionHandle *data = conn->data;
- int smtpcode;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- struct pingpong *pp = &smtpc->pp;
- size_t nread = 0;
-
- /* Busy upgrading the connection; right now all I/O is SSL/TLS, not SMTP */
- if(smtpc->state == SMTP_UPGRADETLS)
- return smtp_perform_upgrade_tls(conn);
-
- /* Flush any data that needs to be sent */
- if(pp->sendleft)
- return Curl_pp_flushsend(pp);
-
- do {
- /* Read the response from the server */
- result = Curl_pp_readresp(sock, pp, &smtpcode, &nread);
- if(result)
- return result;
-
- /* Store the latest response for later retrieval if necessary */
- if(smtpc->state != SMTP_QUIT && smtpcode != 1)
- data->info.httpcode = smtpcode;
-
- if(!smtpcode)
- break;
-
- /* We have now received a full SMTP server response */
- switch(smtpc->state) {
- case SMTP_SERVERGREET:
- result = smtp_state_servergreet_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_EHLO:
- result = smtp_state_ehlo_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_HELO:
- result = smtp_state_helo_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_STARTTLS:
- result = smtp_state_starttls_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_PLAIN:
- result = smtp_state_auth_plain_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_LOGIN:
- result = smtp_state_auth_login_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_LOGIN_PASSWD:
- result = smtp_state_auth_login_password_resp(conn, smtpcode,
- smtpc->state);
- break;
-
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- case SMTP_AUTH_CRAMMD5:
- result = smtp_state_auth_cram_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_DIGESTMD5:
- result = smtp_state_auth_digest_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_DIGESTMD5_RESP:
- result = smtp_state_auth_digest_resp_resp(conn, smtpcode, smtpc->state);
- break;
-#endif
-
-#ifdef USE_NTLM
- case SMTP_AUTH_NTLM:
- result = smtp_state_auth_ntlm_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_NTLM_TYPE2MSG:
- result = smtp_state_auth_ntlm_type2msg_resp(conn, smtpcode,
- smtpc->state);
- break;
-#endif
-
-#if defined(USE_WINDOWS_SSPI)
- case SMTP_AUTH_GSSAPI:
- result = smtp_state_auth_gssapi_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_GSSAPI_TOKEN:
- result = smtp_state_auth_gssapi_token_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_GSSAPI_NO_DATA:
- result = smtp_state_auth_gssapi_no_data_resp(conn, smtpcode,
- smtpc->state);
- break;
-#endif
-
- case SMTP_AUTH_XOAUTH2:
- result = smtp_state_auth_xoauth2_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_CANCEL:
- result = smtp_state_auth_cancel_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_AUTH_FINAL:
- result = smtp_state_auth_final_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_COMMAND:
- result = smtp_state_command_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_MAIL:
- result = smtp_state_mail_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_RCPT:
- result = smtp_state_rcpt_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_DATA:
- result = smtp_state_data_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_POSTDATA:
- result = smtp_state_postdata_resp(conn, smtpcode, smtpc->state);
- break;
-
- case SMTP_QUIT:
- /* fallthrough, just stop! */
- default:
- /* internal error */
- state(conn, SMTP_STOP);
- break;
- }
- } while(!result && smtpc->state != SMTP_STOP && Curl_pp_moredata(pp));
-
- return result;
-}
-
-/* Called repeatedly until done from multi.c */
-static CURLcode smtp_multi_statemach(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-
- if((conn->handler->flags & PROTOPT_SSL) && !smtpc->ssldone) {
- result = Curl_ssl_connect_nonblocking(conn, FIRSTSOCKET, &smtpc->ssldone);
- if(result || !smtpc->ssldone)
- return result;
- }
-
- result = Curl_pp_statemach(&smtpc->pp, FALSE);
- *done = (smtpc->state == SMTP_STOP) ? TRUE : FALSE;
-
- return result;
-}
-
-static CURLcode smtp_block_statemach(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-
- while(smtpc->state != SMTP_STOP && !result)
- result = Curl_pp_statemach(&smtpc->pp, TRUE);
-
- return result;
-}
-
-/* Allocate and initialize the SMTP struct for the current SessionHandle if
- required */
-static CURLcode smtp_init(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp;
-
- smtp = data->req.protop = calloc(sizeof(struct SMTP), 1);
- if(!smtp)
- result = CURLE_OUT_OF_MEMORY;
-
- return result;
-}
-
-/* For the SMTP "protocol connect" and "doing" phases only */
-static int smtp_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks)
-{
- return Curl_pp_getsock(&conn->proto.smtpc.pp, socks, numsocks);
-}
-
-/***********************************************************************
- *
- * smtp_connect()
- *
- * This function should do everything that is to be considered a part of
- * the connection phase.
- *
- * The variable pointed to by 'done' will be TRUE if the protocol-layer
- * connect phase is done when this function returns, or FALSE if not.
- */
-static CURLcode smtp_connect(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- struct pingpong *pp = &smtpc->pp;
-
- *done = FALSE; /* default to not done yet */
-
- /* We always support persistent connections in SMTP */
- connkeep(conn, "SMTP default");
-
- /* Set the default response time-out */
- pp->response_time = RESP_TIMEOUT;
- pp->statemach_act = smtp_statemach_act;
- pp->endofresp = smtp_endofresp;
- pp->conn = conn;
-
- /* Set the default preferred authentication mechanism */
- smtpc->prefmech = SASL_AUTH_ANY;
-
- /* Initialise the pingpong layer */
- Curl_pp_init(pp);
-
- /* Parse the URL options */
- result = smtp_parse_url_options(conn);
- if(result)
- return result;
-
- /* Parse the URL path */
- result = smtp_parse_url_path(conn);
- if(result)
- return result;
-
- /* Start off waiting for the server greeting response */
- state(conn, SMTP_SERVERGREET);
-
- result = smtp_multi_statemach(conn, done);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_done()
- *
- * The DONE function. This does what needs to be done after a single DO has
- * performed.
- *
- * Input argument is already checked for validity.
- */
-static CURLcode smtp_done(struct connectdata *conn, CURLcode status,
- bool premature)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp = data->req.protop;
- struct pingpong *pp = &conn->proto.smtpc.pp;
- const char *eob;
- ssize_t len;
- ssize_t bytes_written;
-
- (void)premature;
-
- if(!smtp || !pp->conn)
- /* When the easy handle is removed from the multi interface while libcurl
- is still trying to resolve the host name, the SMTP struct is not yet
- initialized. However, the removal action calls Curl_done() which in
- turn calls this function, so we simply return success. */
- return CURLE_OK;
-
- if(status) {
- connclose(conn, "SMTP done with bad status"); /* marked for closure */
- result = status; /* use the already set error code */
- }
- else if(!data->set.connect_only && data->set.upload && data->set.mail_rcpt) {
- /* Calculate the EOB taking into account any terminating CRLF from the
- previous line of the email or the CRLF of the DATA command when there
- is "no mail data". RFC-5321, sect. 4.1.1.4. */
- eob = SMTP_EOB;
- len = SMTP_EOB_LEN;
- if(smtp->trailing_crlf || !conn->data->state.infilesize) {
- eob += 2;
- len -= 2;
- }
-
- /* Send the end of block data */
- result = Curl_write(conn, conn->writesockfd, eob, len, &bytes_written);
- if(result)
- return result;
-
- if(bytes_written != len) {
- /* The whole chunk was not sent so keep it around and adjust the
- pingpong structure accordingly */
- pp->sendthis = strdup(eob);
- pp->sendsize = len;
- pp->sendleft = len - bytes_written;
- }
- else
- /* Successfully sent so adjust the response timeout relative to now */
- pp->response = Curl_tvnow();
-
- state(conn, SMTP_POSTDATA);
-
- /* Run the state-machine
-
- TODO: when the multi interface is used, this _really_ should be using
- the smtp_multi_statemach function but we have no general support for
- non-blocking DONE operations, not in the multi state machine and with
- Curl_done() invokes on several places in the code!
- */
- result = smtp_block_statemach(conn);
- }
-
- /* Cleanup our per-request based variables */
- Curl_safefree(smtp->custom);
-
- /* Clear the transfer mode for the next request */
- smtp->transfer = FTPTRANSFER_BODY;
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_perform()
- *
- * This is the actual DO function for SMTP. Transfer a mail, send a command
- * or get some data according to the options previously setup.
- */
-static CURLcode smtp_perform(struct connectdata *conn, bool *connected,
- bool *dophase_done)
-{
- /* This is SMTP and no proxy */
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp = data->req.protop;
-
- DEBUGF(infof(conn->data, "DO phase starts\n"));
-
- if(data->set.opt_no_body) {
- /* Requested no body means no transfer */
- smtp->transfer = FTPTRANSFER_INFO;
- }
-
- *dophase_done = FALSE; /* not done yet */
-
- /* Store the first recipient (or NULL if not specified) */
- smtp->rcpt = data->set.mail_rcpt;
-
- /* Start the first command in the DO phase */
- if(data->set.upload && data->set.mail_rcpt)
- /* MAIL transfer */
- result = smtp_perform_mail(conn);
- else
- /* SMTP based command (VRFY, EXPN, NOOP, RSET or HELP) */
- result = smtp_perform_command(conn);
-
- if(result)
- return result;
-
- /* Run the state-machine */
- result = smtp_multi_statemach(conn, dophase_done);
-
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
-
- if(*dophase_done)
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_do()
- *
- * This function is registered as 'curl_do' function. It decodes the path
- * parts etc as a wrapper to the actual DO function (smtp_perform).
- *
- * The input argument is already checked for validity.
- */
-static CURLcode smtp_do(struct connectdata *conn, bool *done)
-{
- CURLcode result = CURLE_OK;
-
- *done = FALSE; /* default to false */
-
- /* Parse the custom request */
- result = smtp_parse_custom_request(conn);
- if(result)
- return result;
-
- result = smtp_regular_transfer(conn, done);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_disconnect()
- *
- * Disconnect from an SMTP server. Cleanup protocol-specific per-connection
- * resources. BLOCKING.
- */
-static CURLcode smtp_disconnect(struct connectdata *conn, bool dead_connection)
-{
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-
- /* We cannot send quit unconditionally. If this connection is stale or
- bad in any way, sending quit and waiting around here will make the
- disconnect wait in vain and cause more problems than we need to. */
-
- /* The SMTP session may or may not have been allocated/setup at this
- point! */
- if(!dead_connection && smtpc->pp.conn && smtpc->pp.conn->bits.protoconnstart)
- if(!smtp_perform_quit(conn))
- (void)smtp_block_statemach(conn); /* ignore errors on QUIT */
-
- /* Disconnect from the server */
- Curl_pp_disconnect(&smtpc->pp);
-
- /* Cleanup the SASL module */
- Curl_sasl_cleanup(conn, smtpc->authused);
-
- /* Cleanup our connection based variables */
- Curl_safefree(smtpc->domain);
-
- return CURLE_OK;
-}
-
-/* Call this when the DO phase has completed */
-static CURLcode smtp_dophase_done(struct connectdata *conn, bool connected)
-{
- struct SMTP *smtp = conn->data->req.protop;
-
- (void)connected;
-
- if(smtp->transfer != FTPTRANSFER_BODY)
- /* no data to transfer */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
-
- return CURLE_OK;
-}
-
-/* Called from multi.c while DOing */
-static CURLcode smtp_doing(struct connectdata *conn, bool *dophase_done)
-{
- CURLcode result = smtp_multi_statemach(conn, dophase_done);
-
- if(result)
- DEBUGF(infof(conn->data, "DO phase failed\n"));
- else if(*dophase_done) {
- result = smtp_dophase_done(conn, FALSE /* not connected */);
-
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_regular_transfer()
- *
- * The input argument is already checked for validity.
- *
- * Performs all commands done before a regular transfer between a local and a
- * remote host.
- */
-static CURLcode smtp_regular_transfer(struct connectdata *conn,
- bool *dophase_done)
-{
- CURLcode result = CURLE_OK;
- bool connected = FALSE;
- struct SessionHandle *data = conn->data;
-
- /* Make sure size is unknown at this point */
- data->req.size = -1;
-
- /* Set the progress data */
- Curl_pgrsSetUploadCounter(data, 0);
- Curl_pgrsSetDownloadCounter(data, 0);
- Curl_pgrsSetUploadSize(data, -1);
- Curl_pgrsSetDownloadSize(data, -1);
-
- /* Carry out the perform */
- result = smtp_perform(conn, &connected, dophase_done);
-
- /* Perform post DO phase operations if necessary */
- if(!result && *dophase_done)
- result = smtp_dophase_done(conn, connected);
-
- return result;
-}
-
-static CURLcode smtp_setup_connection(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- CURLcode result;
-
- if(conn->bits.httpproxy && !data->set.tunnel_thru_httpproxy) {
- /* Unless we have asked to tunnel SMTP operations through the proxy, we
- switch and use HTTP operations only */
-#ifndef CURL_DISABLE_HTTP
- if(conn->handler == &Curl_handler_smtp)
- conn->handler = &Curl_handler_smtp_proxy;
- else {
-#ifdef USE_SSL
- conn->handler = &Curl_handler_smtps_proxy;
-#else
- failf(data, "SMTPS not supported!");
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- }
- /* set it up as a HTTP connection instead */
- return conn->handler->setup_connection(conn);
-
-#else
- failf(data, "SMTP over http proxy requires HTTP support built-in!");
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- }
-
- /* Initialise the SMTP layer */
- result = smtp_init(conn);
- if(result)
- return result;
-
- data->state.path++; /* don't include the initial slash */
-
- return CURLE_OK;
-}
-
-/***********************************************************************
- *
- * smtp_parse_url_options()
- *
- * Parse the URL login options.
- */
-static CURLcode smtp_parse_url_options(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- const char *options = conn->options;
- const char *ptr = options;
- bool reset = TRUE;
-
- while(ptr && *ptr) {
- const char *key = ptr;
-
- while(*ptr && *ptr != '=')
- ptr++;
-
- if(strnequal(key, "AUTH", 4)) {
- size_t len = 0;
- const char *value = ++ptr;
-
- if(reset) {
- reset = FALSE;
- smtpc->prefmech = SASL_AUTH_NONE;
- }
-
- while(*ptr && *ptr != ';') {
- ptr++;
- len++;
- }
-
- if(strnequal(value, "*", len))
- smtpc->prefmech = SASL_AUTH_ANY;
- else if(strnequal(value, SASL_MECH_STRING_LOGIN, len))
- smtpc->prefmech |= SASL_MECH_LOGIN;
- else if(strnequal(value, SASL_MECH_STRING_PLAIN, len))
- smtpc->prefmech |= SASL_MECH_PLAIN;
- else if(strnequal(value, SASL_MECH_STRING_CRAM_MD5, len))
- smtpc->prefmech |= SASL_MECH_CRAM_MD5;
- else if(strnequal(value, SASL_MECH_STRING_DIGEST_MD5, len))
- smtpc->prefmech |= SASL_MECH_DIGEST_MD5;
- else if(strnequal(value, SASL_MECH_STRING_GSSAPI, len))
- smtpc->prefmech |= SASL_MECH_GSSAPI;
- else if(strnequal(value, SASL_MECH_STRING_NTLM, len))
- smtpc->prefmech |= SASL_MECH_NTLM;
- else if(strnequal(value, SASL_MECH_STRING_XOAUTH2, len))
- smtpc->prefmech |= SASL_MECH_XOAUTH2;
-
- if(*ptr == ';')
- ptr++;
- }
- else
- result = CURLE_URL_MALFORMAT;
- }
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_parse_url_path()
- *
- * Parse the URL path into separate path components.
- */
-static CURLcode smtp_parse_url_path(struct connectdata *conn)
-{
- /* The SMTP struct is already initialised in smtp_connect() */
- struct SessionHandle *data = conn->data;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
- const char *path = data->state.path;
- char localhost[HOSTNAME_MAX + 1];
-
- /* Calculate the path if necessary */
- if(!*path) {
- if(!Curl_gethostname(localhost, sizeof(localhost)))
- path = localhost;
- else
- path = "localhost";
- }
-
- /* URL decode the path and use it as the domain in our EHLO */
- return Curl_urldecode(conn->data, path, 0, &smtpc->domain, NULL, TRUE);
-}
-
-/***********************************************************************
- *
- * smtp_parse_custom_request()
- *
- * Parse the custom request.
- */
-static CURLcode smtp_parse_custom_request(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp = data->req.protop;
- const char *custom = data->set.str[STRING_CUSTOMREQUEST];
-
- /* URL decode the custom request */
- if(custom)
- result = Curl_urldecode(data, custom, 0, &smtp->custom, NULL, TRUE);
-
- return result;
-}
-
-/***********************************************************************
- *
- * smtp_calc_sasl_details()
- *
- * Calculate the required login details for SASL authentication.
- */
-static CURLcode smtp_calc_sasl_details(struct connectdata *conn,
- const char **mech,
- char **initresp, size_t *len,
- smtpstate *state1, smtpstate *state2)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct smtp_conn *smtpc = &conn->proto.smtpc;
-
- /* Calculate the supported authentication mechanism, by decreasing order of
- security, as well as the initial response where appropriate */
-#if defined(USE_WINDOWS_SSPI)
- if((smtpc->authmechs & SASL_MECH_GSSAPI) &&
- (smtpc->prefmech & SASL_MECH_GSSAPI)) {
- smtpc->mutual_auth = FALSE; /* TODO: Calculate mutual authentication */
-
- *mech = SASL_MECH_STRING_GSSAPI;
- *state1 = SMTP_AUTH_GSSAPI;
- *state2 = SMTP_AUTH_GSSAPI_TOKEN;
- smtpc->authused = SASL_MECH_GSSAPI;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_gssapi_user_message(data, conn->user,
- conn->passwd, "smtp",
- smtpc->mutual_auth,
- NULL, &conn->krb5,
- initresp, len);
- }
- else
-#endif
-#ifndef CURL_DISABLE_CRYPTO_AUTH
- if((smtpc->authmechs & SASL_MECH_DIGEST_MD5) &&
- (smtpc->prefmech & SASL_MECH_DIGEST_MD5)) {
- *mech = SASL_MECH_STRING_DIGEST_MD5;
- *state1 = SMTP_AUTH_DIGESTMD5;
- smtpc->authused = SASL_MECH_DIGEST_MD5;
- }
- else if((smtpc->authmechs & SASL_MECH_CRAM_MD5) &&
- (smtpc->prefmech & SASL_MECH_CRAM_MD5)) {
- *mech = SASL_MECH_STRING_CRAM_MD5;
- *state1 = SMTP_AUTH_CRAMMD5;
- smtpc->authused = SASL_MECH_CRAM_MD5;
- }
- else
-#endif
-#ifdef USE_NTLM
- if((smtpc->authmechs & SASL_MECH_NTLM) &&
- (smtpc->prefmech & SASL_MECH_NTLM)) {
- *mech = SASL_MECH_STRING_NTLM;
- *state1 = SMTP_AUTH_NTLM;
- *state2 = SMTP_AUTH_NTLM_TYPE2MSG;
- smtpc->authused = SASL_MECH_NTLM;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_ntlm_type1_message(conn->user, conn->passwd,
- &conn->ntlm,
- initresp, len);
- }
- else
-#endif
- if(((smtpc->authmechs & SASL_MECH_XOAUTH2) &&
- (smtpc->prefmech & SASL_MECH_XOAUTH2) &&
- (smtpc->prefmech != SASL_AUTH_ANY)) || conn->xoauth2_bearer) {
- *mech = SASL_MECH_STRING_XOAUTH2;
- *state1 = SMTP_AUTH_XOAUTH2;
- *state2 = SMTP_AUTH_FINAL;
- smtpc->authused = SASL_MECH_XOAUTH2;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_xoauth2_message(data, conn->user,
- conn->xoauth2_bearer,
- initresp, len);
- }
- else if((smtpc->authmechs & SASL_MECH_LOGIN) &&
- (smtpc->prefmech & SASL_MECH_LOGIN)) {
- *mech = SASL_MECH_STRING_LOGIN;
- *state1 = SMTP_AUTH_LOGIN;
- *state2 = SMTP_AUTH_LOGIN_PASSWD;
- smtpc->authused = SASL_MECH_LOGIN;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_login_message(data, conn->user, initresp, len);
- }
- else if((smtpc->authmechs & SASL_MECH_PLAIN) &&
- (smtpc->prefmech & SASL_MECH_PLAIN)) {
- *mech = SASL_MECH_STRING_PLAIN;
- *state1 = SMTP_AUTH_PLAIN;
- *state2 = SMTP_AUTH_FINAL;
- smtpc->authused = SASL_MECH_PLAIN;
-
- if(data->set.sasl_ir)
- result = Curl_sasl_create_plain_message(data, conn->user, conn->passwd,
- initresp, len);
- }
-
- return result;
-}
-
-CURLcode Curl_smtp_escape_eob(struct connectdata *conn, ssize_t nread)
-{
- /* When sending a SMTP payload we must detect CRLF. sequences making sure
- they are sent as CRLF.. instead, as a . on the beginning of a line will
- be deleted by the server when not part of an EOB terminator and a
- genuine CRLF.CRLF which isn't escaped will wrongly be detected as end of
- data by the server
- */
- ssize_t i;
- ssize_t si;
- struct SessionHandle *data = conn->data;
- struct SMTP *smtp = data->req.protop;
-
- /* Do we need to allocate the scatch buffer? */
- if(!data->state.scratch) {
- data->state.scratch = malloc(2 * BUFSIZE);
-
- if(!data->state.scratch) {
- failf (data, "Failed to alloc scratch buffer!");
- return CURLE_OUT_OF_MEMORY;
- }
- }
-
- /* This loop can be improved by some kind of Boyer-Moore style of
- approach but that is saved for later... */
- for(i = 0, si = 0; i < nread; i++) {
- if(SMTP_EOB[smtp->eob] == data->req.upload_fromhere[i]) {
- smtp->eob++;
-
- /* Is the EOB potentially the terminating CRLF? */
- if(2 == smtp->eob || SMTP_EOB_LEN == smtp->eob)
- smtp->trailing_crlf = TRUE;
- else
- smtp->trailing_crlf = FALSE;
- }
- else if(smtp->eob) {
- /* A previous substring matched so output that first */
- memcpy(&data->state.scratch[si], SMTP_EOB, smtp->eob);
- si += smtp->eob;
-
- /* Then compare the first byte */
- if(SMTP_EOB[0] == data->req.upload_fromhere[i])
- smtp->eob = 1;
- else
- smtp->eob = 0;
-
- /* Reset the trailing CRLF flag as there was more data */
- smtp->trailing_crlf = FALSE;
- }
-
- /* Do we have a match for CRLF. as per RFC-5321, sect. 4.5.2 */
- if(SMTP_EOB_FIND_LEN == smtp->eob) {
- /* Copy the replacement data to the target buffer */
- memcpy(&data->state.scratch[si], SMTP_EOB_REPL, SMTP_EOB_REPL_LEN);
- si += SMTP_EOB_REPL_LEN;
- smtp->eob = 0;
- }
- else if(!smtp->eob)
- data->state.scratch[si++] = data->req.upload_fromhere[i];
- }
-
- if(smtp->eob) {
- /* A substring matched before processing ended so output that now */
- memcpy(&data->state.scratch[si], SMTP_EOB, smtp->eob);
- si += smtp->eob;
- smtp->eob = 0;
- }
-
- if(si != nread) {
- /* Only use the new buffer if we replaced something */
- nread = si;
-
- /* Upload from the new (replaced) buffer instead */
- data->req.upload_fromhere = data->state.scratch;
-
- /* Set the new amount too */
- data->req.upload_present = nread;
- }
-
- return CURLE_OK;
-}
-
-#endif /* CURL_DISABLE_SMTP */
diff --git a/external/libcurl_android/jni/libcurl/lib/smtp.h b/external/libcurl_android/jni/libcurl/lib/smtp.h
deleted file mode 100755
index db1b1e67..00000000
--- a/external/libcurl_android/jni/libcurl/lib/smtp.h
+++ /dev/null
@@ -1,106 +0,0 @@
-#ifndef HEADER_CURL_SMTP_H
-#define HEADER_CURL_SMTP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2009 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "pingpong.h"
-
-/****************************************************************************
- * SMTP unique setup
- ***************************************************************************/
-typedef enum {
- SMTP_STOP, /* do nothing state, stops the state machine */
- SMTP_SERVERGREET, /* waiting for the initial greeting immediately after
- a connect */
- SMTP_EHLO,
- SMTP_HELO,
- SMTP_STARTTLS,
- SMTP_UPGRADETLS, /* asynchronously upgrade the connection to SSL/TLS
- (multi mode only) */
- SMTP_AUTH_PLAIN,
- SMTP_AUTH_LOGIN,
- SMTP_AUTH_LOGIN_PASSWD,
- SMTP_AUTH_CRAMMD5,
- SMTP_AUTH_DIGESTMD5,
- SMTP_AUTH_DIGESTMD5_RESP,
- SMTP_AUTH_NTLM,
- SMTP_AUTH_NTLM_TYPE2MSG,
- SMTP_AUTH_GSSAPI,
- SMTP_AUTH_GSSAPI_TOKEN,
- SMTP_AUTH_GSSAPI_NO_DATA,
- SMTP_AUTH_XOAUTH2,
- SMTP_AUTH_CANCEL,
- SMTP_AUTH_FINAL,
- SMTP_COMMAND, /* VRFY, EXPN, NOOP, RSET and HELP */
- SMTP_MAIL, /* MAIL FROM */
- SMTP_RCPT, /* RCPT TO */
- SMTP_DATA,
- SMTP_POSTDATA,
- SMTP_QUIT,
- SMTP_LAST /* never used */
-} smtpstate;
-
-/* This SMTP struct is used in the SessionHandle. All SMTP data that is
- connection-oriented must be in smtp_conn to properly deal with the fact that
- perhaps the SessionHandle is changed between the times the connection is
- used. */
-struct SMTP {
- curl_pp_transfer transfer;
- char *custom; /* Custom Request */
- struct curl_slist *rcpt; /* Recipient list */
- size_t eob; /* Number of bytes of the EOB (End Of Body) that
- have been received so far */
- bool trailing_crlf; /* Specifies if the tailing CRLF is present */
-};
-
-/* smtp_conn is used for struct connection-oriented data in the connectdata
- struct */
-struct smtp_conn {
- struct pingpong pp;
- smtpstate state; /* Always use smtp.c:state() to change state! */
- bool ssldone; /* Is connect() over SSL done? */
- char *domain; /* Client address/name to send in the EHLO */
- unsigned int authmechs; /* Accepted authentication mechanisms */
- unsigned int prefmech; /* Preferred authentication mechanism */
- unsigned int authused; /* Auth mechanism used for the connection */
- bool tls_supported; /* StartTLS capability supported by server */
- bool size_supported; /* If server supports SIZE extension according to
- RFC 1870 */
- bool auth_supported; /* AUTH capability supported by server */
- bool mutual_auth; /* Mutual authentication enabled (GSSAPI only) */
-};
-
-extern const struct Curl_handler Curl_handler_smtp;
-extern const struct Curl_handler Curl_handler_smtps;
-
-/* this is the 5-bytes End-Of-Body marker for SMTP */
-#define SMTP_EOB "\x0d\x0a\x2e\x0d\x0a"
-#define SMTP_EOB_LEN 5
-#define SMTP_EOB_FIND_LEN 3
-
-/* if found in data, replace it with this string instead */
-#define SMTP_EOB_REPL "\x0d\x0a\x2e\x2e"
-#define SMTP_EOB_REPL_LEN 4
-
-CURLcode Curl_smtp_escape_eob(struct connectdata *conn, ssize_t nread);
-
-#endif /* HEADER_CURL_SMTP_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/sockaddr.h b/external/libcurl_android/jni/libcurl/lib/sockaddr.h
deleted file mode 100755
index 6a2151c9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/sockaddr.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef HEADER_CURL_SOCKADDR_H
-#define HEADER_CURL_SOCKADDR_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-struct Curl_sockaddr_storage {
- union {
- struct sockaddr sa;
- struct sockaddr_in sa_in;
-#ifdef ENABLE_IPV6
- struct sockaddr_in6 sa_in6;
-#endif
-#ifdef HAVE_STRUCT_SOCKADDR_STORAGE
- struct sockaddr_storage sa_stor;
-#else
- char cbuf[256]; /* this should be big enough to fit a lot */
-#endif
- } buffer;
-};
-
-#endif /* HEADER_CURL_SOCKADDR_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/socks.c b/external/libcurl_android/jni/libcurl/lib/socks.c
deleted file mode 100755
index 028475c9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/socks.c
+++ /dev/null
@@ -1,755 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if !defined(CURL_DISABLE_PROXY)
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "strequal.h"
-#include "select.h"
-#include "connect.h"
-#include "timeval.h"
-#include "socks.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * Helper read-from-socket functions. Does the same as Curl_read() but it
- * blocks until all bytes amount of buffersize will be read. No more, no less.
- *
- * This is STUPID BLOCKING behaviour which we frown upon, but right now this
- * is what we have...
- */
-int Curl_blockread_all(struct connectdata *conn, /* connection data */
- curl_socket_t sockfd, /* read from this socket */
- char *buf, /* store read data here */
- ssize_t buffersize, /* max amount to read */
- ssize_t *n) /* amount bytes read */
-{
- ssize_t nread;
- ssize_t allread = 0;
- int result;
- long timeleft;
- *n = 0;
- for(;;) {
- timeleft = Curl_timeleft(conn->data, NULL, TRUE);
- if(timeleft < 0) {
- /* we already got the timeout */
- result = CURLE_OPERATION_TIMEDOUT;
- break;
- }
- if(Curl_socket_ready(sockfd, CURL_SOCKET_BAD, timeleft) <= 0) {
- result = ~CURLE_OK;
- break;
- }
- result = Curl_read_plain(sockfd, buf, buffersize, &nread);
- if(CURLE_AGAIN == result)
- continue;
- else if(result)
- break;
-
- if(buffersize == nread) {
- allread += nread;
- *n = allread;
- result = CURLE_OK;
- break;
- }
- if(!nread) {
- result = ~CURLE_OK;
- break;
- }
-
- buffersize -= nread;
- buf += nread;
- allread += nread;
- }
- return result;
-}
-
-/*
-* This function logs in to a SOCKS4 proxy and sends the specifics to the final
-* destination server.
-*
-* Reference :
-* http://socks.permeo.com/protocol/socks4.protocol
-*
-* Note :
-* Set protocol4a=true for "SOCKS 4A (Simple Extension to SOCKS 4 Protocol)"
-* Nonsupport "Identification Protocol (RFC1413)"
-*/
-CURLcode Curl_SOCKS4(const char *proxy_name,
- const char *hostname,
- int remote_port,
- int sockindex,
- struct connectdata *conn,
- bool protocol4a)
-{
-#define SOCKS4REQLEN 262
- unsigned char socksreq[SOCKS4REQLEN]; /* room for SOCKS4 request incl. user
- id */
- int result;
- CURLcode code;
- curl_socket_t sock = conn->sock[sockindex];
- struct SessionHandle *data = conn->data;
-
- if(Curl_timeleft(data, NULL, TRUE) < 0) {
- /* time-out, bail out, go home */
- failf(data, "Connection time-out");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- curlx_nonblock(sock, FALSE);
-
- infof(data, "SOCKS4 communication to %s:%d\n", hostname, remote_port);
-
- /*
- * Compose socks4 request
- *
- * Request format
- *
- * +----+----+----+----+----+----+----+----+----+----+....+----+
- * | VN | CD | DSTPORT | DSTIP | USERID |NULL|
- * +----+----+----+----+----+----+----+----+----+----+....+----+
- * # of bytes: 1 1 2 4 variable 1
- */
-
- socksreq[0] = 4; /* version (SOCKS4) */
- socksreq[1] = 1; /* connect */
- socksreq[2] = (unsigned char)((remote_port >> 8) & 0xff); /* PORT MSB */
- socksreq[3] = (unsigned char)(remote_port & 0xff); /* PORT LSB */
-
- /* DNS resolve only for SOCKS4, not SOCKS4a */
- if(!protocol4a) {
- struct Curl_dns_entry *dns;
- Curl_addrinfo *hp=NULL;
- int rc;
-
- rc = Curl_resolv(conn, hostname, remote_port, &dns);
-
- if(rc == CURLRESOLV_ERROR)
- return CURLE_COULDNT_RESOLVE_PROXY;
-
- if(rc == CURLRESOLV_PENDING)
- /* ignores the return code, but 'dns' remains NULL on failure */
- (void)Curl_resolver_wait_resolv(conn, &dns);
-
- /*
- * We cannot use 'hostent' as a struct that Curl_resolv() returns. It
- * returns a Curl_addrinfo pointer that may not always look the same.
- */
- if(dns)
- hp=dns->addr;
- if(hp) {
- char buf[64];
- unsigned short ip[4];
- Curl_printable_address(hp, buf, sizeof(buf));
-
- if(4 == sscanf( buf, "%hu.%hu.%hu.%hu",
- &ip[0], &ip[1], &ip[2], &ip[3])) {
- /* Set DSTIP */
- socksreq[4] = (unsigned char)ip[0];
- socksreq[5] = (unsigned char)ip[1];
- socksreq[6] = (unsigned char)ip[2];
- socksreq[7] = (unsigned char)ip[3];
- }
- else
- hp = NULL; /* fail! */
-
- infof(data, "SOCKS4 connect to %s (locally resolved)\n", buf);
-
- Curl_resolv_unlock(data, dns); /* not used anymore from now on */
-
- }
- if(!hp) {
- failf(data, "Failed to resolve \"%s\" for SOCKS4 connect.",
- hostname);
- return CURLE_COULDNT_RESOLVE_HOST;
- }
- }
-
- /*
- * This is currently not supporting "Identification Protocol (RFC1413)".
- */
- socksreq[8] = 0; /* ensure empty userid is NUL-terminated */
- if(proxy_name) {
- size_t plen = strlen(proxy_name);
- if(plen >= sizeof(socksreq) - 8) {
- failf(data, "Too long SOCKS proxy name, can't use!\n");
- return CURLE_COULDNT_CONNECT;
- }
- /* copy the proxy name WITH trailing zero */
- memcpy(socksreq + 8, proxy_name, plen+1);
- }
-
- /*
- * Make connection
- */
- {
- ssize_t actualread;
- ssize_t written;
- ssize_t hostnamelen = 0;
- int packetsize = 9 +
- (int)strlen((char*)socksreq + 8); /* size including NUL */
-
- /* If SOCKS4a, set special invalid IP address 0.0.0.x */
- if(protocol4a) {
- socksreq[4] = 0;
- socksreq[5] = 0;
- socksreq[6] = 0;
- socksreq[7] = 1;
- /* If still enough room in buffer, also append hostname */
- hostnamelen = (ssize_t)strlen(hostname) + 1; /* length including NUL */
- if(packetsize + hostnamelen <= SOCKS4REQLEN)
- strcpy((char*)socksreq + packetsize, hostname);
- else
- hostnamelen = 0; /* Flag: hostname did not fit in buffer */
- }
-
- /* Send request */
- code = Curl_write_plain(conn, sock, (char *)socksreq,
- packetsize + hostnamelen,
- &written);
- if((code != CURLE_OK) || (written != packetsize + hostnamelen)) {
- failf(data, "Failed to send SOCKS4 connect request.");
- return CURLE_COULDNT_CONNECT;
- }
- if(protocol4a && hostnamelen == 0) {
- /* SOCKS4a with very long hostname - send that name separately */
- hostnamelen = (ssize_t)strlen(hostname) + 1;
- code = Curl_write_plain(conn, sock, (char *)hostname, hostnamelen,
- &written);
- if((code != CURLE_OK) || (written != hostnamelen)) {
- failf(data, "Failed to send SOCKS4 connect request.");
- return CURLE_COULDNT_CONNECT;
- }
- }
-
- packetsize = 8; /* receive data size */
-
- /* Receive response */
- result = Curl_blockread_all(conn, sock, (char *)socksreq, packetsize,
- &actualread);
- if((result != CURLE_OK) || (actualread != packetsize)) {
- failf(data, "Failed to receive SOCKS4 connect request ack.");
- return CURLE_COULDNT_CONNECT;
- }
-
- /*
- * Response format
- *
- * +----+----+----+----+----+----+----+----+
- * | VN | CD | DSTPORT | DSTIP |
- * +----+----+----+----+----+----+----+----+
- * # of bytes: 1 1 2 4
- *
- * VN is the version of the reply code and should be 0. CD is the result
- * code with one of the following values:
- *
- * 90: request granted
- * 91: request rejected or failed
- * 92: request rejected because SOCKS server cannot connect to
- * identd on the client
- * 93: request rejected because the client program and identd
- * report different user-ids
- */
-
- /* wrong version ? */
- if(socksreq[0] != 0) {
- failf(data,
- "SOCKS4 reply has wrong version, version should be 4.");
- return CURLE_COULDNT_CONNECT;
- }
-
- /* Result */
- switch(socksreq[1]) {
- case 90:
- infof(data, "SOCKS4%s request granted.\n", protocol4a?"a":"");
- break;
- case 91:
- failf(data,
- "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
- ", request rejected or failed.",
- (unsigned char)socksreq[4], (unsigned char)socksreq[5],
- (unsigned char)socksreq[6], (unsigned char)socksreq[7],
- ((socksreq[8] << 8) | socksreq[9]),
- socksreq[1]);
- return CURLE_COULDNT_CONNECT;
- case 92:
- failf(data,
- "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
- ", request rejected because SOCKS server cannot connect to "
- "identd on the client.",
- (unsigned char)socksreq[4], (unsigned char)socksreq[5],
- (unsigned char)socksreq[6], (unsigned char)socksreq[7],
- ((socksreq[8] << 8) | socksreq[9]),
- socksreq[1]);
- return CURLE_COULDNT_CONNECT;
- case 93:
- failf(data,
- "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
- ", request rejected because the client program and identd "
- "report different user-ids.",
- (unsigned char)socksreq[4], (unsigned char)socksreq[5],
- (unsigned char)socksreq[6], (unsigned char)socksreq[7],
- ((socksreq[8] << 8) | socksreq[9]),
- socksreq[1]);
- return CURLE_COULDNT_CONNECT;
- default:
- failf(data,
- "Can't complete SOCKS4 connection to %d.%d.%d.%d:%d. (%d)"
- ", Unknown.",
- (unsigned char)socksreq[4], (unsigned char)socksreq[5],
- (unsigned char)socksreq[6], (unsigned char)socksreq[7],
- ((socksreq[8] << 8) | socksreq[9]),
- socksreq[1]);
- return CURLE_COULDNT_CONNECT;
- }
- }
-
- curlx_nonblock(sock, TRUE);
-
- return CURLE_OK; /* Proxy was successful! */
-}
-
-/*
- * This function logs in to a SOCKS5 proxy and sends the specifics to the final
- * destination server.
- */
-CURLcode Curl_SOCKS5(const char *proxy_name,
- const char *proxy_password,
- const char *hostname,
- int remote_port,
- int sockindex,
- struct connectdata *conn)
-{
- /*
- According to the RFC1928, section "6. Replies". This is what a SOCK5
- replies:
-
- +----+-----+-------+------+----------+----------+
- |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
- +----+-----+-------+------+----------+----------+
- | 1 | 1 | X'00' | 1 | Variable | 2 |
- +----+-----+-------+------+----------+----------+
-
- Where:
-
- o VER protocol version: X'05'
- o REP Reply field:
- o X'00' succeeded
- */
-
- unsigned char socksreq[600]; /* room for large user/pw (255 max each) */
- ssize_t actualread;
- ssize_t written;
- int result;
- CURLcode code;
- curl_socket_t sock = conn->sock[sockindex];
- struct SessionHandle *data = conn->data;
- long timeout;
- bool socks5_resolve_local = (conn->proxytype == CURLPROXY_SOCKS5)?TRUE:FALSE;
- const size_t hostname_len = strlen(hostname);
- ssize_t len = 0;
-
- /* RFC1928 chapter 5 specifies max 255 chars for domain name in packet */
- if(!socks5_resolve_local && hostname_len > 255) {
- infof(conn->data,"SOCKS5: server resolving disabled for hostnames of "
- "length > 255 [actual len=%zu]\n", hostname_len);
- socks5_resolve_local = TRUE;
- }
-
- /* get timeout */
- timeout = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout < 0) {
- /* time-out, bail out, go home */
- failf(data, "Connection time-out");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- curlx_nonblock(sock, TRUE);
-
- /* wait until socket gets connected */
- result = Curl_socket_ready(CURL_SOCKET_BAD, sock, timeout);
-
- if(-1 == result) {
- failf(conn->data, "SOCKS5: no connection here");
- return CURLE_COULDNT_CONNECT;
- }
- else if(0 == result) {
- failf(conn->data, "SOCKS5: connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- if(result & CURL_CSELECT_ERR) {
- failf(conn->data, "SOCKS5: error occurred during connection");
- return CURLE_COULDNT_CONNECT;
- }
-
- socksreq[0] = 5; /* version */
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- socksreq[1] = (char)(proxy_name ? 3 : 2); /* number of methods (below) */
- socksreq[2] = 0; /* no authentication */
- socksreq[3] = 1; /* GSS-API */
- socksreq[4] = 2; /* username/password */
-#else
- socksreq[1] = (char)(proxy_name ? 2 : 1); /* number of methods (below) */
- socksreq[2] = 0; /* no authentication */
- socksreq[3] = 2; /* username/password */
-#endif
-
- curlx_nonblock(sock, FALSE);
-
- code = Curl_write_plain(conn, sock, (char *)socksreq, (2 + (int)socksreq[1]),
- &written);
- if((code != CURLE_OK) || (written != (2 + (int)socksreq[1]))) {
- failf(data, "Unable to send initial SOCKS5 request.");
- return CURLE_COULDNT_CONNECT;
- }
-
- curlx_nonblock(sock, TRUE);
-
- result = Curl_socket_ready(sock, CURL_SOCKET_BAD, timeout);
-
- if(-1 == result) {
- failf(conn->data, "SOCKS5 nothing to read");
- return CURLE_COULDNT_CONNECT;
- }
- else if(0 == result) {
- failf(conn->data, "SOCKS5 read timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- if(result & CURL_CSELECT_ERR) {
- failf(conn->data, "SOCKS5 read error occurred");
- return CURLE_RECV_ERROR;
- }
-
- curlx_nonblock(sock, FALSE);
-
- result=Curl_blockread_all(conn, sock, (char *)socksreq, 2, &actualread);
- if((result != CURLE_OK) || (actualread != 2)) {
- failf(data, "Unable to receive initial SOCKS5 response.");
- return CURLE_COULDNT_CONNECT;
- }
-
- if(socksreq[0] != 5) {
- failf(data, "Received invalid version in initial SOCKS5 response.");
- return CURLE_COULDNT_CONNECT;
- }
- if(socksreq[1] == 0) {
- /* Nothing to do, no authentication needed */
- ;
- }
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- else if(socksreq[1] == 1) {
- code = Curl_SOCKS5_gssapi_negotiate(sockindex, conn);
- if(code != CURLE_OK) {
- failf(data, "Unable to negotiate SOCKS5 GSS-API context.");
- return CURLE_COULDNT_CONNECT;
- }
- }
-#endif
- else if(socksreq[1] == 2) {
- /* Needs user name and password */
- size_t proxy_name_len, proxy_password_len;
- if(proxy_name && proxy_password) {
- proxy_name_len = strlen(proxy_name);
- proxy_password_len = strlen(proxy_password);
- }
- else {
- proxy_name_len = 0;
- proxy_password_len = 0;
- }
-
- /* username/password request looks like
- * +----+------+----------+------+----------+
- * |VER | ULEN | UNAME | PLEN | PASSWD |
- * +----+------+----------+------+----------+
- * | 1 | 1 | 1 to 255 | 1 | 1 to 255 |
- * +----+------+----------+------+----------+
- */
- len = 0;
- socksreq[len++] = 1; /* username/pw subnegotiation version */
- socksreq[len++] = (unsigned char) proxy_name_len;
- if(proxy_name && proxy_name_len)
- memcpy(socksreq + len, proxy_name, proxy_name_len);
- len += proxy_name_len;
- socksreq[len++] = (unsigned char) proxy_password_len;
- if(proxy_password && proxy_password_len)
- memcpy(socksreq + len, proxy_password, proxy_password_len);
- len += proxy_password_len;
-
- code = Curl_write_plain(conn, sock, (char *)socksreq, len, &written);
- if((code != CURLE_OK) || (len != written)) {
- failf(data, "Failed to send SOCKS5 sub-negotiation request.");
- return CURLE_COULDNT_CONNECT;
- }
-
- result=Curl_blockread_all(conn, sock, (char *)socksreq, 2, &actualread);
- if((result != CURLE_OK) || (actualread != 2)) {
- failf(data, "Unable to receive SOCKS5 sub-negotiation response.");
- return CURLE_COULDNT_CONNECT;
- }
-
- /* ignore the first (VER) byte */
- if(socksreq[1] != 0) { /* status */
- failf(data, "User was rejected by the SOCKS5 server (%d %d).",
- socksreq[0], socksreq[1]);
- return CURLE_COULDNT_CONNECT;
- }
-
- /* Everything is good so far, user was authenticated! */
- }
- else {
- /* error */
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- if(socksreq[1] == 255) {
-#else
- if(socksreq[1] == 1) {
- failf(data,
- "SOCKS5 GSSAPI per-message authentication is not supported.");
- return CURLE_COULDNT_CONNECT;
- }
- else if(socksreq[1] == 255) {
-#endif
- if(!proxy_name || !*proxy_name) {
- failf(data,
- "No authentication method was acceptable. (It is quite likely"
- " that the SOCKS5 server wanted a username/password, since none"
- " was supplied to the server on this connection.)");
- }
- else {
- failf(data, "No authentication method was acceptable.");
- }
- return CURLE_COULDNT_CONNECT;
- }
- else {
- failf(data,
- "Undocumented SOCKS5 mode attempted to be used by server.");
- return CURLE_COULDNT_CONNECT;
- }
- }
-
- /* Authentication is complete, now specify destination to the proxy */
- len = 0;
- socksreq[len++] = 5; /* version (SOCKS5) */
- socksreq[len++] = 1; /* connect */
- socksreq[len++] = 0; /* must be zero */
-
- if(!socks5_resolve_local) {
- socksreq[len++] = 3; /* ATYP: domain name = 3 */
- socksreq[len++] = (char) hostname_len; /* address length */
- memcpy(&socksreq[len], hostname, hostname_len); /* address str w/o NULL */
- len += hostname_len;
- }
- else {
- struct Curl_dns_entry *dns;
- Curl_addrinfo *hp = NULL;
- int rc = Curl_resolv(conn, hostname, remote_port, &dns);
-
- if(rc == CURLRESOLV_ERROR)
- return CURLE_COULDNT_RESOLVE_HOST;
-
- if(rc == CURLRESOLV_PENDING) {
- /* this requires that we're in "wait for resolve" state */
- code = Curl_resolver_wait_resolv(conn, &dns);
- if(code != CURLE_OK)
- return code;
- }
-
- /*
- * We cannot use 'hostent' as a struct that Curl_resolv() returns. It
- * returns a Curl_addrinfo pointer that may not always look the same.
- */
- if(dns)
- hp=dns->addr;
- if(hp) {
- struct sockaddr_in *saddr_in;
-#ifdef ENABLE_IPV6
- struct sockaddr_in6 *saddr_in6;
-#endif
- int i;
-
- if(hp->ai_family == AF_INET) {
- socksreq[len++] = 1; /* ATYP: IPv4 = 1 */
-
- saddr_in = (struct sockaddr_in*)hp->ai_addr;
- for(i = 0; i < 4; i++) {
- socksreq[len++] = ((unsigned char*)&saddr_in->sin_addr.s_addr)[i];
- infof(data, "%d\n", socksreq[len-1]);
- }
- }
-#ifdef ENABLE_IPV6
- else if(hp->ai_family == AF_INET6) {
- socksreq[len++] = 4; /* ATYP: IPv6 = 4 */
-
- saddr_in6 = (struct sockaddr_in6*)hp->ai_addr;
- for(i = 0; i < 16; i++) {
- socksreq[len++] = ((unsigned char*)&saddr_in6->sin6_addr.s6_addr)[i];
- }
- }
-#endif
- else
- hp = NULL; /* fail! */
-
- Curl_resolv_unlock(data, dns); /* not used anymore from now on */
- }
- if(!hp) {
- failf(data, "Failed to resolve \"%s\" for SOCKS5 connect.",
- hostname);
- return CURLE_COULDNT_RESOLVE_HOST;
- }
- }
-
- socksreq[len++] = (unsigned char)((remote_port >> 8) & 0xff); /* PORT MSB */
- socksreq[len++] = (unsigned char)(remote_port & 0xff); /* PORT LSB */
-
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- if(conn->socks5_gssapi_enctype) {
- failf(data, "SOCKS5 GSS-API protection not yet implemented.");
- }
- else
-#endif
- code = Curl_write_plain(conn, sock, (char *)socksreq, len, &written);
-
- if((code != CURLE_OK) || (len != written)) {
- failf(data, "Failed to send SOCKS5 connect request.");
- return CURLE_COULDNT_CONNECT;
- }
-
- len = 10; /* minimum packet size is 10 */
-
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- if(conn->socks5_gssapi_enctype) {
- failf(data, "SOCKS5 GSS-API protection not yet implemented.");
- }
- else
-#endif
- result = Curl_blockread_all(conn, sock, (char *)socksreq,
- len, &actualread);
-
- if((result != CURLE_OK) || (len != actualread)) {
- failf(data, "Failed to receive SOCKS5 connect request ack.");
- return CURLE_COULDNT_CONNECT;
- }
-
- if(socksreq[0] != 5) { /* version */
- failf(data,
- "SOCKS5 reply has wrong version, version should be 5.");
- return CURLE_COULDNT_CONNECT;
- }
- if(socksreq[1] != 0) { /* Anything besides 0 is an error */
- if(socksreq[3] == 1) {
- failf(data,
- "Can't complete SOCKS5 connection to %d.%d.%d.%d:%d. (%d)",
- (unsigned char)socksreq[4], (unsigned char)socksreq[5],
- (unsigned char)socksreq[6], (unsigned char)socksreq[7],
- ((socksreq[8] << 8) | socksreq[9]),
- socksreq[1]);
- }
- else if(socksreq[3] == 3) {
- failf(data,
- "Can't complete SOCKS5 connection to %s:%d. (%d)",
- hostname,
- ((socksreq[8] << 8) | socksreq[9]),
- socksreq[1]);
- }
- else if(socksreq[3] == 4) {
- failf(data,
- "Can't complete SOCKS5 connection to %02x%02x:%02x%02x:"
- "%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%d. (%d)",
- (unsigned char)socksreq[4], (unsigned char)socksreq[5],
- (unsigned char)socksreq[6], (unsigned char)socksreq[7],
- (unsigned char)socksreq[8], (unsigned char)socksreq[9],
- (unsigned char)socksreq[10], (unsigned char)socksreq[11],
- (unsigned char)socksreq[12], (unsigned char)socksreq[13],
- (unsigned char)socksreq[14], (unsigned char)socksreq[15],
- (unsigned char)socksreq[16], (unsigned char)socksreq[17],
- (unsigned char)socksreq[18], (unsigned char)socksreq[19],
- ((socksreq[8] << 8) | socksreq[9]),
- socksreq[1]);
- }
- return CURLE_COULDNT_CONNECT;
- }
-
- /* Fix: in general, returned BND.ADDR is variable length parameter by RFC
- 1928, so the reply packet should be read until the end to avoid errors at
- subsequent protocol level.
-
- +----+-----+-------+------+----------+----------+
- |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT |
- +----+-----+-------+------+----------+----------+
- | 1 | 1 | X'00' | 1 | Variable | 2 |
- +----+-----+-------+------+----------+----------+
-
- ATYP:
- o IP v4 address: X'01', BND.ADDR = 4 byte
- o domain name: X'03', BND.ADDR = [ 1 byte length, string ]
- o IP v6 address: X'04', BND.ADDR = 16 byte
- */
-
- /* Calculate real packet size */
- if(socksreq[3] == 3) {
- /* domain name */
- int addrlen = (int) socksreq[4];
- len = 5 + addrlen + 2;
- }
- else if(socksreq[3] == 4) {
- /* IPv6 */
- len = 4 + 16 + 2;
- }
-
- /* At this point we already read first 10 bytes */
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- if(!conn->socks5_gssapi_enctype) {
- /* decrypt_gssapi_blockread already read the whole packet */
-#endif
- if(len > 10) {
- len -= 10;
- result = Curl_blockread_all(conn, sock, (char *)&socksreq[10],
- len, &actualread);
- if((result != CURLE_OK) || (len != actualread)) {
- failf(data, "Failed to receive SOCKS5 connect request ack.");
- return CURLE_COULDNT_CONNECT;
- }
- }
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- }
-#endif
-
- curlx_nonblock(sock, TRUE);
- return CURLE_OK; /* Proxy was successful! */
-}
-
-#endif /* CURL_DISABLE_PROXY */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/socks.h b/external/libcurl_android/jni/libcurl/lib/socks.h
deleted file mode 100755
index 29e3bf03..00000000
--- a/external/libcurl_android/jni/libcurl/lib/socks.h
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef HEADER_CURL_SOCKS_H
-#define HEADER_CURL_SOCKS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef CURL_DISABLE_PROXY
-#define Curl_SOCKS4(a,b,c,d,e,f) CURLE_NOT_BUILT_IN
-#define Curl_SOCKS5(a,b,c,d,e,f) CURLE_NOT_BUILT_IN
-#else
-/*
- * Helper read-from-socket functions. Does the same as Curl_read() but it
- * blocks until all bytes amount of buffersize will be read. No more, no less.
- *
- * This is STUPID BLOCKING behaviour which we frown upon, but right now this
- * is what we have...
- */
-int Curl_blockread_all(struct connectdata *conn,
- curl_socket_t sockfd,
- char *buf,
- ssize_t buffersize,
- ssize_t *n);
-
-/*
- * This function logs in to a SOCKS4(a) proxy and sends the specifics to the
- * final destination server.
- */
-CURLcode Curl_SOCKS4(const char *proxy_name,
- const char *hostname,
- int remote_port,
- int sockindex,
- struct connectdata *conn,
- bool protocol4a);
-
-/*
- * This function logs in to a SOCKS5 proxy and sends the specifics to the
- * final destination server.
- */
-CURLcode Curl_SOCKS5(const char *proxy_name,
- const char *proxy_password,
- const char *hostname,
- int remote_port,
- int sockindex,
- struct connectdata *conn);
-
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
-/*
- * This function handles the SOCKS5 GSS-API negotiation and initialisation
- */
-CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
- struct connectdata *conn);
-#endif
-
-#endif /* CURL_DISABLE_PROXY */
-
-#endif /* HEADER_CURL_SOCKS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/socks_gssapi.c b/external/libcurl_android/jni/libcurl/lib/socks_gssapi.c
deleted file mode 100755
index 0eaa74c2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/socks_gssapi.c
+++ /dev/null
@@ -1,534 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2009, 2011, Markus Moeller, <markus_moeller@compuserve.com>
- * Copyright (C) 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_PROXY
-
-#ifdef HAVE_GSSAPI
-#ifdef HAVE_OLD_GSSMIT
-#define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name
-#define NCOMPAT 1
-#endif
-#ifndef gss_nt_service_name
-#define gss_nt_service_name GSS_C_NT_HOSTBASED_SERVICE
-#endif
-
-#include "curl_gssapi.h"
-#include "urldata.h"
-#include "sendf.h"
-#include "connect.h"
-#include "timeval.h"
-#include "socks.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static gss_ctx_id_t gss_context = GSS_C_NO_CONTEXT;
-
-/*
- * Helper GSS-API error functions.
- */
-static int check_gss_err(struct SessionHandle *data,
- OM_uint32 major_status,
- OM_uint32 minor_status,
- const char* function)
-{
- if(GSS_ERROR(major_status)) {
- OM_uint32 maj_stat,min_stat;
- OM_uint32 msg_ctx = 0;
- gss_buffer_desc status_string;
- char buf[1024];
- size_t len;
-
- len = 0;
- msg_ctx = 0;
- while(!msg_ctx) {
- /* convert major status code (GSS-API error) to text */
- maj_stat = gss_display_status(&min_stat, major_status,
- GSS_C_GSS_CODE,
- GSS_C_NULL_OID,
- &msg_ctx, &status_string);
- if(maj_stat == GSS_S_COMPLETE) {
- if(sizeof(buf) > len + status_string.length + 1) {
- strcpy(buf+len, (char*) status_string.value);
- len += status_string.length;
- }
- gss_release_buffer(&min_stat, &status_string);
- break;
- }
- gss_release_buffer(&min_stat, &status_string);
- }
- if(sizeof(buf) > len + 3) {
- strcpy(buf+len, ".\n");
- len += 2;
- }
- msg_ctx = 0;
- while(!msg_ctx) {
- /* convert minor status code (underlying routine error) to text */
- maj_stat = gss_display_status(&min_stat, minor_status,
- GSS_C_MECH_CODE,
- GSS_C_NULL_OID,
- &msg_ctx, &status_string);
- if(maj_stat == GSS_S_COMPLETE) {
- if(sizeof(buf) > len + status_string.length)
- strcpy(buf+len, (char*) status_string.value);
- gss_release_buffer(&min_stat, &status_string);
- break;
- }
- gss_release_buffer(&min_stat, &status_string);
- }
- failf(data, "GSS-API error: %s failed:\n%s", function, buf);
- return(1);
- }
-
- return(0);
-}
-
-CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
- struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- curl_socket_t sock = conn->sock[sockindex];
- CURLcode code;
- ssize_t actualread;
- ssize_t written;
- int result;
- OM_uint32 gss_major_status, gss_minor_status, gss_status;
- OM_uint32 gss_ret_flags;
- int gss_conf_state, gss_enc;
- gss_buffer_desc service = GSS_C_EMPTY_BUFFER;
- gss_buffer_desc gss_send_token = GSS_C_EMPTY_BUFFER;
- gss_buffer_desc gss_recv_token = GSS_C_EMPTY_BUFFER;
- gss_buffer_desc gss_w_token = GSS_C_EMPTY_BUFFER;
- gss_buffer_desc* gss_token = GSS_C_NO_BUFFER;
- gss_name_t server = GSS_C_NO_NAME;
- gss_name_t gss_client_name = GSS_C_NO_NAME;
- unsigned short us_length;
- char *user=NULL;
- unsigned char socksreq[4]; /* room for GSS-API exchange header only */
- char *serviceptr = data->set.str[STRING_SOCKS5_GSSAPI_SERVICE];
-
- /* GSS-API request looks like
- * +----+------+-----+----------------+
- * |VER | MTYP | LEN | TOKEN |
- * +----+------+----------------------+
- * | 1 | 1 | 2 | up to 2^16 - 1 |
- * +----+------+-----+----------------+
- */
-
- /* prepare service name */
- if(strchr(serviceptr,'/')) {
- service.value = malloc(strlen(serviceptr));
- if(!service.value)
- return CURLE_OUT_OF_MEMORY;
- service.length = strlen(serviceptr);
- memcpy(service.value, serviceptr, service.length);
-
- gss_major_status = gss_import_name(&gss_minor_status, &service,
- (gss_OID) GSS_C_NULL_OID, &server);
- }
- else {
- service.value = malloc(strlen(serviceptr) +strlen(conn->proxy.name)+2);
- if(!service.value)
- return CURLE_OUT_OF_MEMORY;
- service.length = strlen(serviceptr) +strlen(conn->proxy.name)+1;
- snprintf(service.value, service.length+1, "%s@%s",
- serviceptr, conn->proxy.name);
-
- gss_major_status = gss_import_name(&gss_minor_status, &service,
- gss_nt_service_name, &server);
- }
-
- gss_release_buffer(&gss_status, &service); /* clear allocated memory */
-
- if(check_gss_err(data,gss_major_status,
- gss_minor_status,"gss_import_name()")) {
- failf(data, "Failed to create service name.");
- gss_release_name(&gss_status, &server);
- return CURLE_COULDNT_CONNECT;
- }
-
- /* As long as we need to keep sending some context info, and there's no */
- /* errors, keep sending it... */
- for(;;) {
- gss_major_status = Curl_gss_init_sec_context(data,
- &gss_minor_status,
- &gss_context,
- server,
- &Curl_krb5_mech_oid,
- NULL,
- gss_token,
- &gss_send_token,
- &gss_ret_flags);
-
- if(gss_token != GSS_C_NO_BUFFER)
- gss_release_buffer(&gss_status, &gss_recv_token);
- if(check_gss_err(data,gss_major_status,
- gss_minor_status,"gss_init_sec_context")) {
- gss_release_name(&gss_status, &server);
- gss_release_buffer(&gss_status, &gss_recv_token);
- gss_release_buffer(&gss_status, &gss_send_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- failf(data, "Failed to initial GSS-API token.");
- return CURLE_COULDNT_CONNECT;
- }
-
- if(gss_send_token.length != 0) {
- socksreq[0] = 1; /* GSS-API subnegotiation version */
- socksreq[1] = 1; /* authentication message type */
- us_length = htons((short)gss_send_token.length);
- memcpy(socksreq+2,&us_length,sizeof(short));
-
- code = Curl_write_plain(conn, sock, (char *)socksreq, 4, &written);
- if((code != CURLE_OK) || (4 != written)) {
- failf(data, "Failed to send GSS-API authentication request.");
- gss_release_name(&gss_status, &server);
- gss_release_buffer(&gss_status, &gss_recv_token);
- gss_release_buffer(&gss_status, &gss_send_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- code = Curl_write_plain(conn, sock, (char *)gss_send_token.value,
- gss_send_token.length, &written);
-
- if((code != CURLE_OK) || ((ssize_t)gss_send_token.length != written)) {
- failf(data, "Failed to send GSS-API authentication token.");
- gss_release_name(&gss_status, &server);
- gss_release_buffer(&gss_status, &gss_recv_token);
- gss_release_buffer(&gss_status, &gss_send_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- }
-
- gss_release_buffer(&gss_status, &gss_send_token);
- gss_release_buffer(&gss_status, &gss_recv_token);
- if(gss_major_status != GSS_S_CONTINUE_NEEDED) break;
-
- /* analyse response */
-
- /* GSS-API response looks like
- * +----+------+-----+----------------+
- * |VER | MTYP | LEN | TOKEN |
- * +----+------+----------------------+
- * | 1 | 1 | 2 | up to 2^16 - 1 |
- * +----+------+-----+----------------+
- */
-
- result=Curl_blockread_all(conn, sock, (char *)socksreq, 4, &actualread);
- if(result != CURLE_OK || actualread != 4) {
- failf(data, "Failed to receive GSS-API authentication response.");
- gss_release_name(&gss_status, &server);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- /* ignore the first (VER) byte */
- if(socksreq[1] == 255) { /* status / message type */
- failf(data, "User was rejected by the SOCKS5 server (%d %d).",
- socksreq[0], socksreq[1]);
- gss_release_name(&gss_status, &server);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- if(socksreq[1] != 1) { /* status / messgae type */
- failf(data, "Invalid GSS-API authentication response type (%d %d).",
- socksreq[0], socksreq[1]);
- gss_release_name(&gss_status, &server);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- memcpy(&us_length, socksreq+2, sizeof(short));
- us_length = ntohs(us_length);
-
- gss_recv_token.length=us_length;
- gss_recv_token.value=malloc(us_length);
- if(!gss_recv_token.value) {
- failf(data,
- "Could not allocate memory for GSS-API authentication "
- "response token.");
- gss_release_name(&gss_status, &server);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_OUT_OF_MEMORY;
- }
-
- result=Curl_blockread_all(conn, sock, (char *)gss_recv_token.value,
- gss_recv_token.length, &actualread);
-
- if(result != CURLE_OK || actualread != us_length) {
- failf(data, "Failed to receive GSS-API authentication token.");
- gss_release_name(&gss_status, &server);
- gss_release_buffer(&gss_status, &gss_recv_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- gss_token = &gss_recv_token;
- }
-
- gss_release_name(&gss_status, &server);
-
- /* Everything is good so far, user was authenticated! */
- gss_major_status = gss_inquire_context (&gss_minor_status, gss_context,
- &gss_client_name, NULL, NULL, NULL,
- NULL, NULL, NULL);
- if(check_gss_err(data,gss_major_status,
- gss_minor_status,"gss_inquire_context")) {
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- gss_release_name(&gss_status, &gss_client_name);
- failf(data, "Failed to determine user name.");
- return CURLE_COULDNT_CONNECT;
- }
- gss_major_status = gss_display_name(&gss_minor_status, gss_client_name,
- &gss_send_token, NULL);
- if(check_gss_err(data,gss_major_status,
- gss_minor_status,"gss_display_name")) {
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- gss_release_name(&gss_status, &gss_client_name);
- gss_release_buffer(&gss_status, &gss_send_token);
- failf(data, "Failed to determine user name.");
- return CURLE_COULDNT_CONNECT;
- }
- user=malloc(gss_send_token.length+1);
- if(!user) {
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- gss_release_name(&gss_status, &gss_client_name);
- gss_release_buffer(&gss_status, &gss_send_token);
- return CURLE_OUT_OF_MEMORY;
- }
-
- memcpy(user, gss_send_token.value, gss_send_token.length);
- user[gss_send_token.length] = '\0';
- gss_release_name(&gss_status, &gss_client_name);
- gss_release_buffer(&gss_status, &gss_send_token);
- infof(data, "SOCKS5 server authencticated user %s with GSS-API.\n",user);
- free(user);
- user=NULL;
-
- /* Do encryption */
- socksreq[0] = 1; /* GSS-API subnegotiation version */
- socksreq[1] = 2; /* encryption message type */
-
- gss_enc = 0; /* no data protection */
- /* do confidentiality protection if supported */
- if(gss_ret_flags & GSS_C_CONF_FLAG)
- gss_enc = 2;
- /* else do integrity protection */
- else if(gss_ret_flags & GSS_C_INTEG_FLAG)
- gss_enc = 1;
-
- infof(data, "SOCKS5 server supports GSS-API %s data protection.\n",
- (gss_enc==0)?"no":((gss_enc==1)?"integrity":"confidentiality"));
- /* force for the moment to no data protection */
- gss_enc = 0;
- /*
- * Sending the encryption type in clear seems wrong. It should be
- * protected with gss_seal()/gss_wrap(). See RFC1961 extract below
- * The NEC reference implementations on which this is based is
- * therefore at fault
- *
- * +------+------+------+.......................+
- * + ver | mtyp | len | token |
- * +------+------+------+.......................+
- * + 0x01 | 0x02 | 0x02 | up to 2^16 - 1 octets |
- * +------+------+------+.......................+
- *
- * Where:
- *
- * - "ver" is the protocol version number, here 1 to represent the
- * first version of the SOCKS/GSS-API protocol
- *
- * - "mtyp" is the message type, here 2 to represent a protection
- * -level negotiation message
- *
- * - "len" is the length of the "token" field in octets
- *
- * - "token" is the GSS-API encapsulated protection level
- *
- * The token is produced by encapsulating an octet containing the
- * required protection level using gss_seal()/gss_wrap() with conf_req
- * set to FALSE. The token is verified using gss_unseal()/
- * gss_unwrap().
- *
- */
- if(data->set.socks5_gssapi_nec) {
- us_length = htons((short)1);
- memcpy(socksreq+2,&us_length,sizeof(short));
- }
- else {
- gss_send_token.length = 1;
- gss_send_token.value = malloc(1);
- if(!gss_send_token.value) {
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_OUT_OF_MEMORY;
- }
- memcpy(gss_send_token.value, &gss_enc, 1);
-
- gss_major_status = gss_wrap(&gss_minor_status, gss_context, 0,
- GSS_C_QOP_DEFAULT, &gss_send_token,
- &gss_conf_state, &gss_w_token);
-
- if(check_gss_err(data,gss_major_status,gss_minor_status,"gss_wrap")) {
- gss_release_buffer(&gss_status, &gss_send_token);
- gss_release_buffer(&gss_status, &gss_w_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- failf(data, "Failed to wrap GSS-API encryption value into token.");
- return CURLE_COULDNT_CONNECT;
- }
- gss_release_buffer(&gss_status, &gss_send_token);
-
- us_length = htons((short)gss_w_token.length);
- memcpy(socksreq+2,&us_length,sizeof(short));
- }
-
- code = Curl_write_plain(conn, sock, (char *)socksreq, 4, &written);
- if((code != CURLE_OK) || (4 != written)) {
- failf(data, "Failed to send GSS-API encryption request.");
- gss_release_buffer(&gss_status, &gss_w_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- if(data->set.socks5_gssapi_nec) {
- memcpy(socksreq, &gss_enc, 1);
- code = Curl_write_plain(conn, sock, socksreq, 1, &written);
- if((code != CURLE_OK) || ( 1 != written)) {
- failf(data, "Failed to send GSS-API encryption type.");
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
- }
- else {
- code = Curl_write_plain(conn, sock, (char *)gss_w_token.value,
- gss_w_token.length, &written);
- if((code != CURLE_OK) || ((ssize_t)gss_w_token.length != written)) {
- failf(data, "Failed to send GSS-API encryption type.");
- gss_release_buffer(&gss_status, &gss_w_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
- gss_release_buffer(&gss_status, &gss_w_token);
- }
-
- result=Curl_blockread_all(conn, sock, (char *)socksreq, 4, &actualread);
- if(result != CURLE_OK || actualread != 4) {
- failf(data, "Failed to receive GSS-API encryption response.");
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- /* ignore the first (VER) byte */
- if(socksreq[1] == 255) { /* status / message type */
- failf(data, "User was rejected by the SOCKS5 server (%d %d).",
- socksreq[0], socksreq[1]);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- if(socksreq[1] != 2) { /* status / messgae type */
- failf(data, "Invalid GSS-API encryption response type (%d %d).",
- socksreq[0], socksreq[1]);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- memcpy(&us_length, socksreq+2, sizeof(short));
- us_length = ntohs(us_length);
-
- gss_recv_token.length= us_length;
- gss_recv_token.value=malloc(gss_recv_token.length);
- if(!gss_recv_token.value) {
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_OUT_OF_MEMORY;
- }
- result=Curl_blockread_all(conn, sock, (char *)gss_recv_token.value,
- gss_recv_token.length, &actualread);
-
- if(result != CURLE_OK || actualread != us_length) {
- failf(data, "Failed to receive GSS-API encryptrion type.");
- gss_release_buffer(&gss_status, &gss_recv_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- if(!data->set.socks5_gssapi_nec) {
- gss_major_status = gss_unwrap(&gss_minor_status, gss_context,
- &gss_recv_token, &gss_w_token,
- 0, GSS_C_QOP_DEFAULT);
-
- if(check_gss_err(data,gss_major_status,gss_minor_status,"gss_unwrap")) {
- gss_release_buffer(&gss_status, &gss_recv_token);
- gss_release_buffer(&gss_status, &gss_w_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- failf(data, "Failed to unwrap GSS-API encryption value into token.");
- return CURLE_COULDNT_CONNECT;
- }
- gss_release_buffer(&gss_status, &gss_recv_token);
-
- if(gss_w_token.length != 1) {
- failf(data, "Invalid GSS-API encryption response length (%d).",
- gss_w_token.length);
- gss_release_buffer(&gss_status, &gss_w_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- memcpy(socksreq,gss_w_token.value,gss_w_token.length);
- gss_release_buffer(&gss_status, &gss_w_token);
- }
- else {
- if(gss_recv_token.length != 1) {
- failf(data, "Invalid GSS-API encryption response length (%d).",
- gss_recv_token.length);
- gss_release_buffer(&gss_status, &gss_recv_token);
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
- return CURLE_COULDNT_CONNECT;
- }
-
- memcpy(socksreq,gss_recv_token.value,gss_recv_token.length);
- gss_release_buffer(&gss_status, &gss_recv_token);
- }
-
- infof(data, "SOCKS5 access with%s protection granted.\n",
- (socksreq[0]==0)?"out GSS-API data":
- ((socksreq[0]==1)?" GSS-API integrity":" GSS-API confidentiality"));
-
- conn->socks5_gssapi_enctype = socksreq[0];
- if(socksreq[0] == 0)
- gss_delete_sec_context(&gss_status, &gss_context, NULL);
-
- return CURLE_OK;
-}
-#endif
-
-#endif /* CURL_DISABLE_PROXY */
diff --git a/external/libcurl_android/jni/libcurl/lib/socks_sspi.c b/external/libcurl_android/jni/libcurl/lib/socks_sspi.c
deleted file mode 100755
index 82684e0a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/socks_sspi.c
+++ /dev/null
@@ -1,604 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2009, 2011, Markus Moeller, <markus_moeller@compuserve.com>
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_WINDOWS_SSPI) && !defined(CURL_DISABLE_PROXY)
-
-#include "urldata.h"
-#include "sendf.h"
-#include "connect.h"
-#include "strerror.h"
-#include "timeval.h"
-#include "socks.h"
-#include "curl_sspi.h"
-#include "curl_multibyte.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * Helper sspi error functions.
- */
-static int check_sspi_err(struct connectdata *conn,
- SECURITY_STATUS status,
- const char* function)
-{
- if(status != SEC_E_OK &&
- status != SEC_I_COMPLETE_AND_CONTINUE &&
- status != SEC_I_COMPLETE_NEEDED &&
- status != SEC_I_CONTINUE_NEEDED) {
- failf(conn->data, "SSPI error: %s failed: %s", function,
- Curl_sspi_strerror(conn, status));
- return 1;
- }
- return 0;
-}
-
-/* This is the SSPI-using version of this function */
-CURLcode Curl_SOCKS5_gssapi_negotiate(int sockindex,
- struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- curl_socket_t sock = conn->sock[sockindex];
- CURLcode code;
- ssize_t actualread;
- ssize_t written;
- int result;
- /* Needs GSS-API authentication */
- SECURITY_STATUS status;
- unsigned long sspi_ret_flags = 0;
- int gss_enc;
- SecBuffer sspi_send_token, sspi_recv_token, sspi_w_token[3];
- SecBufferDesc input_desc, output_desc, wrap_desc;
- SecPkgContext_Sizes sspi_sizes;
- CredHandle cred_handle;
- CtxtHandle sspi_context;
- PCtxtHandle context_handle = NULL;
- SecPkgCredentials_Names names;
- TimeStamp expiry;
- char *service_name = NULL;
- unsigned short us_length;
- unsigned long qop;
- unsigned char socksreq[4]; /* room for GSS-API exchange header only */
- char *service = data->set.str[STRING_SOCKS5_GSSAPI_SERVICE];
-
- /* GSS-API request looks like
- * +----+------+-----+----------------+
- * |VER | MTYP | LEN | TOKEN |
- * +----+------+----------------------+
- * | 1 | 1 | 2 | up to 2^16 - 1 |
- * +----+------+-----+----------------+
- */
-
- /* prepare service name */
- if(strchr(service, '/')) {
- service_name = malloc(strlen(service));
- if(!service_name)
- return CURLE_OUT_OF_MEMORY;
- memcpy(service_name, service, strlen(service));
- }
- else {
- service_name = malloc(strlen(service) + strlen(conn->proxy.name) + 2);
- if(!service_name)
- return CURLE_OUT_OF_MEMORY;
- snprintf(service_name,strlen(service) +strlen(conn->proxy.name)+2,"%s/%s",
- service,conn->proxy.name);
- }
-
- input_desc.cBuffers = 1;
- input_desc.pBuffers = &sspi_recv_token;
- input_desc.ulVersion = SECBUFFER_VERSION;
-
- sspi_recv_token.BufferType = SECBUFFER_TOKEN;
- sspi_recv_token.cbBuffer = 0;
- sspi_recv_token.pvBuffer = NULL;
-
- output_desc.cBuffers = 1;
- output_desc.pBuffers = &sspi_send_token;
- output_desc.ulVersion = SECBUFFER_VERSION;
-
- sspi_send_token.BufferType = SECBUFFER_TOKEN;
- sspi_send_token.cbBuffer = 0;
- sspi_send_token.pvBuffer = NULL;
-
- wrap_desc.cBuffers = 3;
- wrap_desc.pBuffers = sspi_w_token;
- wrap_desc.ulVersion = SECBUFFER_VERSION;
-
- cred_handle.dwLower = 0;
- cred_handle.dwUpper = 0;
-
- status = s_pSecFn->AcquireCredentialsHandle(NULL,
- (TCHAR *) TEXT("Kerberos"),
- SECPKG_CRED_OUTBOUND,
- NULL,
- NULL,
- NULL,
- NULL,
- &cred_handle,
- &expiry);
-
- if(check_sspi_err(conn, status, "AcquireCredentialsHandle")) {
- failf(data, "Failed to acquire credentials.");
- Curl_safefree(service_name);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- return CURLE_COULDNT_CONNECT;
- }
-
- /* As long as we need to keep sending some context info, and there's no */
- /* errors, keep sending it... */
- for(;;) {
- TCHAR *sname;
-
- sname = Curl_convert_UTF8_to_tchar(service_name);
- if(!sname)
- return CURLE_OUT_OF_MEMORY;
-
- status = s_pSecFn->InitializeSecurityContext(&cred_handle,
- context_handle,
- sname,
- ISC_REQ_MUTUAL_AUTH |
- ISC_REQ_ALLOCATE_MEMORY |
- ISC_REQ_CONFIDENTIALITY |
- ISC_REQ_REPLAY_DETECT,
- 0,
- SECURITY_NATIVE_DREP,
- &input_desc,
- 0,
- &sspi_context,
- &output_desc,
- &sspi_ret_flags,
- &expiry);
-
- Curl_unicodefree(sname);
-
- if(sspi_recv_token.pvBuffer) {
- s_pSecFn->FreeContextBuffer(sspi_recv_token.pvBuffer);
- sspi_recv_token.pvBuffer = NULL;
- sspi_recv_token.cbBuffer = 0;
- }
-
- if(check_sspi_err(conn, status, "InitializeSecurityContext")) {
- Curl_safefree(service_name);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- if(sspi_recv_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_recv_token.pvBuffer);
- failf(data, "Failed to initialise security context.");
- return CURLE_COULDNT_CONNECT;
- }
-
- if(sspi_send_token.cbBuffer != 0) {
- socksreq[0] = 1; /* GSS-API subnegotiation version */
- socksreq[1] = 1; /* authentication message type */
- us_length = htons((short)sspi_send_token.cbBuffer);
- memcpy(socksreq+2, &us_length, sizeof(short));
-
- code = Curl_write_plain(conn, sock, (char *)socksreq, 4, &written);
- if((code != CURLE_OK) || (4 != written)) {
- failf(data, "Failed to send SSPI authentication request.");
- Curl_safefree(service_name);
- if(sspi_send_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
- if(sspi_recv_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_recv_token.pvBuffer);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- code = Curl_write_plain(conn, sock, (char *)sspi_send_token.pvBuffer,
- sspi_send_token.cbBuffer, &written);
- if((code != CURLE_OK) || (sspi_send_token.cbBuffer != (size_t)written)) {
- failf(data, "Failed to send SSPI authentication token.");
- Curl_safefree(service_name);
- if(sspi_send_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
- if(sspi_recv_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_recv_token.pvBuffer);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- }
-
- if(sspi_send_token.pvBuffer) {
- s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
- sspi_send_token.pvBuffer = NULL;
- }
- sspi_send_token.cbBuffer = 0;
-
- if(sspi_recv_token.pvBuffer) {
- s_pSecFn->FreeContextBuffer(sspi_recv_token.pvBuffer);
- sspi_recv_token.pvBuffer = NULL;
- }
- sspi_recv_token.cbBuffer = 0;
-
- if(status != SEC_I_CONTINUE_NEEDED)
- break;
-
- /* analyse response */
-
- /* GSS-API response looks like
- * +----+------+-----+----------------+
- * |VER | MTYP | LEN | TOKEN |
- * +----+------+----------------------+
- * | 1 | 1 | 2 | up to 2^16 - 1 |
- * +----+------+-----+----------------+
- */
-
- result = Curl_blockread_all(conn, sock, (char *)socksreq, 4, &actualread);
- if(result != CURLE_OK || actualread != 4) {
- failf(data, "Failed to receive SSPI authentication response.");
- Curl_safefree(service_name);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- /* ignore the first (VER) byte */
- if(socksreq[1] == 255) { /* status / message type */
- failf(data, "User was rejected by the SOCKS5 server (%u %u).",
- (unsigned int)socksreq[0], (unsigned int)socksreq[1]);
- Curl_safefree(service_name);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- if(socksreq[1] != 1) { /* status / messgae type */
- failf(data, "Invalid SSPI authentication response type (%u %u).",
- (unsigned int)socksreq[0], (unsigned int)socksreq[1]);
- Curl_safefree(service_name);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- memcpy(&us_length, socksreq+2, sizeof(short));
- us_length = ntohs(us_length);
-
- sspi_recv_token.cbBuffer = us_length;
- sspi_recv_token.pvBuffer = malloc(us_length);
-
- if(!sspi_recv_token.pvBuffer) {
- Curl_safefree(service_name);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_OUT_OF_MEMORY;
- }
- result = Curl_blockread_all(conn, sock, (char *)sspi_recv_token.pvBuffer,
- sspi_recv_token.cbBuffer, &actualread);
-
- if(result != CURLE_OK || actualread != us_length) {
- failf(data, "Failed to receive SSPI authentication token.");
- Curl_safefree(service_name);
- if(sspi_recv_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_recv_token.pvBuffer);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- context_handle = &sspi_context;
- }
-
- Curl_safefree(service_name);
-
- /* Everything is good so far, user was authenticated! */
- status = s_pSecFn->QueryCredentialsAttributes(&cred_handle,
- SECPKG_CRED_ATTR_NAMES,
- &names);
- s_pSecFn->FreeCredentialsHandle(&cred_handle);
- if(check_sspi_err(conn, status, "QueryCredentialAttributes")) {
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- s_pSecFn->FreeContextBuffer(names.sUserName);
- failf(data, "Failed to determine user name.");
- return CURLE_COULDNT_CONNECT;
- }
- infof(data, "SOCKS5 server authencticated user %s with GSS-API.\n",
- names.sUserName);
- s_pSecFn->FreeContextBuffer(names.sUserName);
-
- /* Do encryption */
- socksreq[0] = 1; /* GSS-API subnegotiation version */
- socksreq[1] = 2; /* encryption message type */
-
- gss_enc = 0; /* no data protection */
- /* do confidentiality protection if supported */
- if(sspi_ret_flags & ISC_REQ_CONFIDENTIALITY)
- gss_enc = 2;
- /* else do integrity protection */
- else if(sspi_ret_flags & ISC_REQ_INTEGRITY)
- gss_enc = 1;
-
- infof(data, "SOCKS5 server supports GSS-API %s data protection.\n",
- (gss_enc==0)?"no":((gss_enc==1)?"integrity":"confidentiality") );
- /* force to no data protection, avoid encryption/decryption for now */
- gss_enc = 0;
- /*
- * Sending the encryption type in clear seems wrong. It should be
- * protected with gss_seal()/gss_wrap(). See RFC1961 extract below
- * The NEC reference implementations on which this is based is
- * therefore at fault
- *
- * +------+------+------+.......................+
- * + ver | mtyp | len | token |
- * +------+------+------+.......................+
- * + 0x01 | 0x02 | 0x02 | up to 2^16 - 1 octets |
- * +------+------+------+.......................+
- *
- * Where:
- *
- * - "ver" is the protocol version number, here 1 to represent the
- * first version of the SOCKS/GSS-API protocol
- *
- * - "mtyp" is the message type, here 2 to represent a protection
- * -level negotiation message
- *
- * - "len" is the length of the "token" field in octets
- *
- * - "token" is the GSS-API encapsulated protection level
- *
- * The token is produced by encapsulating an octet containing the
- * required protection level using gss_seal()/gss_wrap() with conf_req
- * set to FALSE. The token is verified using gss_unseal()/
- * gss_unwrap().
- *
- */
-
- if(data->set.socks5_gssapi_nec) {
- us_length = htons((short)1);
- memcpy(socksreq+2, &us_length, sizeof(short));
- }
- else {
- status = s_pSecFn->QueryContextAttributes(&sspi_context,
- SECPKG_ATTR_SIZES,
- &sspi_sizes);
- if(check_sspi_err(conn, status, "QueryContextAttributes")) {
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- failf(data, "Failed to query security context attributes.");
- return CURLE_COULDNT_CONNECT;
- }
-
- sspi_w_token[0].cbBuffer = sspi_sizes.cbSecurityTrailer;
- sspi_w_token[0].BufferType = SECBUFFER_TOKEN;
- sspi_w_token[0].pvBuffer = malloc(sspi_sizes.cbSecurityTrailer);
-
- if(!sspi_w_token[0].pvBuffer) {
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_OUT_OF_MEMORY;
- }
-
- sspi_w_token[1].cbBuffer = 1;
- sspi_w_token[1].pvBuffer = malloc(1);
- if(!sspi_w_token[1].pvBuffer) {
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_OUT_OF_MEMORY;
- }
-
- memcpy(sspi_w_token[1].pvBuffer,&gss_enc,1);
- sspi_w_token[2].BufferType = SECBUFFER_PADDING;
- sspi_w_token[2].cbBuffer = sspi_sizes.cbBlockSize;
- sspi_w_token[2].pvBuffer = malloc(sspi_sizes.cbBlockSize);
- if(!sspi_w_token[2].pvBuffer) {
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[1].pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_OUT_OF_MEMORY;
- }
- status = s_pSecFn->EncryptMessage(&sspi_context,
- KERB_WRAP_NO_ENCRYPT,
- &wrap_desc,
- 0);
- if(check_sspi_err(conn, status, "EncryptMessage")) {
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[1].pvBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[2].pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- failf(data, "Failed to query security context attributes.");
- return CURLE_COULDNT_CONNECT;
- }
- sspi_send_token.cbBuffer = sspi_w_token[0].cbBuffer
- + sspi_w_token[1].cbBuffer
- + sspi_w_token[2].cbBuffer;
- sspi_send_token.pvBuffer = malloc(sspi_send_token.cbBuffer);
- if(!sspi_send_token.pvBuffer) {
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[1].pvBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[2].pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_OUT_OF_MEMORY;
- }
-
- memcpy(sspi_send_token.pvBuffer, sspi_w_token[0].pvBuffer,
- sspi_w_token[0].cbBuffer);
- memcpy((PUCHAR) sspi_send_token.pvBuffer +(int)sspi_w_token[0].cbBuffer,
- sspi_w_token[1].pvBuffer, sspi_w_token[1].cbBuffer);
- memcpy((PUCHAR) sspi_send_token.pvBuffer
- +sspi_w_token[0].cbBuffer
- +sspi_w_token[1].cbBuffer,
- sspi_w_token[2].pvBuffer, sspi_w_token[2].cbBuffer);
-
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- sspi_w_token[0].pvBuffer = NULL;
- sspi_w_token[0].cbBuffer = 0;
- s_pSecFn->FreeContextBuffer(sspi_w_token[1].pvBuffer);
- sspi_w_token[1].pvBuffer = NULL;
- sspi_w_token[1].cbBuffer = 0;
- s_pSecFn->FreeContextBuffer(sspi_w_token[2].pvBuffer);
- sspi_w_token[2].pvBuffer = NULL;
- sspi_w_token[2].cbBuffer = 0;
-
- us_length = htons((short)sspi_send_token.cbBuffer);
- memcpy(socksreq+2,&us_length,sizeof(short));
- }
-
- code = Curl_write_plain(conn, sock, (char *)socksreq, 4, &written);
- if((code != CURLE_OK) || (4 != written)) {
- failf(data, "Failed to send SSPI encryption request.");
- if(sspi_send_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- if(data->set.socks5_gssapi_nec) {
- memcpy(socksreq,&gss_enc,1);
- code = Curl_write_plain(conn, sock, (char *)socksreq, 1, &written);
- if((code != CURLE_OK) || (1 != written)) {
- failf(data, "Failed to send SSPI encryption type.");
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
- }
- else {
- code = Curl_write_plain(conn, sock, (char *)sspi_send_token.pvBuffer,
- sspi_send_token.cbBuffer, &written);
- if((code != CURLE_OK) || (sspi_send_token.cbBuffer != (size_t)written)) {
- failf(data, "Failed to send SSPI encryption type.");
- if(sspi_send_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
- if(sspi_send_token.pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_send_token.pvBuffer);
- }
-
- result = Curl_blockread_all(conn, sock, (char *)socksreq, 4, &actualread);
- if(result != CURLE_OK || actualread != 4) {
- failf(data, "Failed to receive SSPI encryption response.");
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- /* ignore the first (VER) byte */
- if(socksreq[1] == 255) { /* status / message type */
- failf(data, "User was rejected by the SOCKS5 server (%u %u).",
- (unsigned int)socksreq[0], (unsigned int)socksreq[1]);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- if(socksreq[1] != 2) { /* status / message type */
- failf(data, "Invalid SSPI encryption response type (%u %u).",
- (unsigned int)socksreq[0], (unsigned int)socksreq[1]);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- memcpy(&us_length, socksreq+2, sizeof(short));
- us_length = ntohs(us_length);
-
- sspi_w_token[0].cbBuffer = us_length;
- sspi_w_token[0].pvBuffer = malloc(us_length);
- if(!sspi_w_token[0].pvBuffer) {
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_OUT_OF_MEMORY;
- }
-
- result = Curl_blockread_all(conn, sock, (char *)sspi_w_token[0].pvBuffer,
- sspi_w_token[0].cbBuffer, &actualread);
-
- if(result != CURLE_OK || actualread != us_length) {
- failf(data, "Failed to receive SSPI encryption type.");
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
-
- if(!data->set.socks5_gssapi_nec) {
- wrap_desc.cBuffers = 2;
- sspi_w_token[0].BufferType = SECBUFFER_STREAM;
- sspi_w_token[1].BufferType = SECBUFFER_DATA;
- sspi_w_token[1].cbBuffer = 0;
- sspi_w_token[1].pvBuffer = NULL;
-
- status = s_pSecFn->DecryptMessage(&sspi_context,
- &wrap_desc,
- 0,
- &qop);
-
- if(check_sspi_err(conn, status, "DecryptMessage")) {
- if(sspi_w_token[0].pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- if(sspi_w_token[1].pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_w_token[1].pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- failf(data, "Failed to query security context attributes.");
- return CURLE_COULDNT_CONNECT;
- }
-
- if(sspi_w_token[1].cbBuffer != 1) {
- failf(data, "Invalid SSPI encryption response length (%lu).",
- (unsigned long)sspi_w_token[1].cbBuffer);
- if(sspi_w_token[0].pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- if(sspi_w_token[1].pvBuffer)
- s_pSecFn->FreeContextBuffer(sspi_w_token[1].pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
-
- memcpy(socksreq,sspi_w_token[1].pvBuffer,sspi_w_token[1].cbBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[1].pvBuffer);
- }
- else {
- if(sspi_w_token[0].cbBuffer != 1) {
- failf(data, "Invalid SSPI encryption response length (%lu).",
- (unsigned long)sspi_w_token[0].cbBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- return CURLE_COULDNT_CONNECT;
- }
- memcpy(socksreq,sspi_w_token[0].pvBuffer,sspi_w_token[0].cbBuffer);
- s_pSecFn->FreeContextBuffer(sspi_w_token[0].pvBuffer);
- }
-
- infof(data, "SOCKS5 access with%s protection granted.\n",
- (socksreq[0]==0)?"out GSS-API data":
- ((socksreq[0]==1)?" GSS-API integrity":" GSS-API confidentiality"));
-
- /* For later use if encryption is required
- conn->socks5_gssapi_enctype = socksreq[0];
- if(socksreq[0] != 0)
- conn->socks5_sspi_context = sspi_context;
- else {
- s_pSecFn->DeleteSecurityContext(&sspi_context);
- conn->socks5_sspi_context = sspi_context;
- }
- */
- return CURLE_OK;
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/speedcheck.c b/external/libcurl_android/jni/libcurl/lib/speedcheck.c
deleted file mode 100755
index ac7447c4..00000000
--- a/external/libcurl_android/jni/libcurl/lib/speedcheck.c
+++ /dev/null
@@ -1,74 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "multiif.h"
-#include "speedcheck.h"
-
-void Curl_speedinit(struct SessionHandle *data)
-{
- memset(&data->state.keeps_speed, 0, sizeof(struct timeval));
-}
-
-CURLcode Curl_speedcheck(struct SessionHandle *data,
- struct timeval now)
-{
- if((data->progress.current_speed >= 0) &&
- data->set.low_speed_time &&
- (Curl_tvlong(data->state.keeps_speed) != 0) &&
- (data->progress.current_speed < data->set.low_speed_limit)) {
- long howlong = Curl_tvdiff(now, data->state.keeps_speed);
- long nextcheck = (data->set.low_speed_time * 1000) - howlong;
-
- /* We are now below the "low speed limit". If we are below it
- for "low speed time" seconds we consider that enough reason
- to abort the download. */
- if(nextcheck <= 0) {
- /* we have been this slow for long enough, now die */
- failf(data,
- "Operation too slow. "
- "Less than %ld bytes/sec transferred the last %ld seconds",
- data->set.low_speed_limit,
- data->set.low_speed_time);
- return CURLE_OPERATION_TIMEDOUT;
- }
- else {
- /* wait complete low_speed_time */
- Curl_expire_latest(data, nextcheck);
- }
- }
- else {
- /* we keep up the required speed all right */
- data->state.keeps_speed = now;
-
- if(data->set.low_speed_limit)
- /* if there is a low speed limit enabled, we set the expire timer to
- make this connection's speed get checked again no later than when
- this time is up */
- Curl_expire_latest(data, data->set.low_speed_time*1000);
- }
- return CURLE_OK;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/speedcheck.h b/external/libcurl_android/jni/libcurl/lib/speedcheck.h
deleted file mode 100755
index 786cd121..00000000
--- a/external/libcurl_android/jni/libcurl/lib/speedcheck.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_SPEEDCHECK_H
-#define HEADER_CURL_SPEEDCHECK_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "timeval.h"
-
-void Curl_speedinit(struct SessionHandle *data);
-CURLcode Curl_speedcheck(struct SessionHandle *data,
- struct timeval now);
-
-#endif /* HEADER_CURL_SPEEDCHECK_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/splay.c b/external/libcurl_android/jni/libcurl/lib/splay.c
deleted file mode 100755
index 5bb7065e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/splay.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1997 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "splay.h"
-
-/*
- * This macro compares two node keys i and j and returns:
- *
- * negative value: when i is smaller than j
- * zero : when i is equal to j
- * positive when : when i is larger than j
- */
-#define compare(i,j) Curl_splaycomparekeys((i),(j))
-
-/*
- * Splay using the key i (which may or may not be in the tree.) The starting
- * root is t.
- */
-struct Curl_tree *Curl_splay(struct timeval i,
- struct Curl_tree *t)
-{
- struct Curl_tree N, *l, *r, *y;
- long comp;
-
- if(t == NULL)
- return t;
- N.smaller = N.larger = NULL;
- l = r = &N;
-
- for(;;) {
- comp = compare(i, t->key);
- if(comp < 0) {
- if(t->smaller == NULL)
- break;
- if(compare(i, t->smaller->key) < 0) {
- y = t->smaller; /* rotate smaller */
- t->smaller = y->larger;
- y->larger = t;
- t = y;
- if(t->smaller == NULL)
- break;
- }
- r->smaller = t; /* link smaller */
- r = t;
- t = t->smaller;
- }
- else if(comp > 0) {
- if(t->larger == NULL)
- break;
- if(compare(i, t->larger->key) > 0) {
- y = t->larger; /* rotate larger */
- t->larger = y->smaller;
- y->smaller = t;
- t = y;
- if(t->larger == NULL)
- break;
- }
- l->larger = t; /* link larger */
- l = t;
- t = t->larger;
- }
- else
- break;
- }
-
- l->larger = t->smaller; /* assemble */
- r->smaller = t->larger;
- t->smaller = N.larger;
- t->larger = N.smaller;
-
- return t;
-}
-
-/* Insert key i into the tree t. Return a pointer to the resulting tree or
- * NULL if something went wrong.
- *
- * @unittest: 1309
- */
-struct Curl_tree *Curl_splayinsert(struct timeval i,
- struct Curl_tree *t,
- struct Curl_tree *node)
-{
- static const struct timeval KEY_NOTUSED = {-1,-1}; /* will *NEVER* appear */
-
- if(node == NULL)
- return t;
-
- if(t != NULL) {
- t = Curl_splay(i,t);
- if(compare(i, t->key)==0) {
- /* There already exists a node in the tree with the very same key. Build
- a linked list of nodes. We make the new 'node' struct the new master
- node and make the previous node the first one in the 'same' list. */
-
- node->same = t;
- node->key = i;
- node->smaller = t->smaller;
- node->larger = t->larger;
-
- t->smaller = node; /* in the sub node for this same key, we use the
- smaller pointer to point back to the master
- node */
-
- t->key = KEY_NOTUSED; /* and we set the key in the sub node to NOTUSED
- to quickly identify this node as a subnode */
-
- return node; /* new root node */
- }
- }
-
- if(t == NULL) {
- node->smaller = node->larger = NULL;
- }
- else if(compare(i, t->key) < 0) {
- node->smaller = t->smaller;
- node->larger = t;
- t->smaller = NULL;
-
- }
- else {
- node->larger = t->larger;
- node->smaller = t;
- t->larger = NULL;
- }
- node->key = i;
-
- node->same = NULL; /* no identical node (yet) */
- return node;
-}
-
-/* Finds and deletes the best-fit node from the tree. Return a pointer to the
- resulting tree. best-fit means the node with the given or lower key */
-struct Curl_tree *Curl_splaygetbest(struct timeval i,
- struct Curl_tree *t,
- struct Curl_tree **removed)
-{
- struct Curl_tree *x;
-
- if(!t) {
- *removed = NULL; /* none removed since there was no root */
- return NULL;
- }
-
- t = Curl_splay(i,t);
- if(compare(i, t->key) < 0) {
- /* too big node, try the smaller chain */
- if(t->smaller)
- t=Curl_splay(t->smaller->key, t);
- else {
- /* fail */
- *removed = NULL;
- return t;
- }
- }
-
- if(compare(i, t->key) >= 0) { /* found it */
- /* FIRST! Check if there is a list with identical keys */
- x = t->same;
- if(x) {
- /* there is, pick one from the list */
-
- /* 'x' is the new root node */
-
- x->key = t->key;
- x->larger = t->larger;
- x->smaller = t->smaller;
-
- *removed = t;
- return x; /* new root */
- }
-
- if(t->smaller == NULL) {
- x = t->larger;
- }
- else {
- x = Curl_splay(i, t->smaller);
- x->larger = t->larger;
- }
- *removed = t;
-
- return x;
- }
- else {
- *removed = NULL; /* no match */
- return t; /* It wasn't there */
- }
-}
-
-
-/* Deletes the very node we point out from the tree if it's there. Stores a
- * pointer to the new resulting tree in 'newroot'.
- *
- * Returns zero on success and non-zero on errors! TODO: document error codes.
- * When returning error, it does not touch the 'newroot' pointer.
- *
- * NOTE: when the last node of the tree is removed, there's no tree left so
- * 'newroot' will be made to point to NULL.
- *
- * @unittest: 1309
- */
-int Curl_splayremovebyaddr(struct Curl_tree *t,
- struct Curl_tree *removenode,
- struct Curl_tree **newroot)
-{
- static const struct timeval KEY_NOTUSED = {-1,-1}; /* will *NEVER* appear */
- struct Curl_tree *x;
-
- if(!t || !removenode)
- return 1;
-
- if(compare(KEY_NOTUSED, removenode->key) == 0) {
- /* Key set to NOTUSED means it is a subnode within a 'same' linked list
- and thus we can unlink it easily. The 'smaller' link of a subnode
- links to the parent node. */
- if(removenode->smaller == NULL)
- return 3;
-
- removenode->smaller->same = removenode->same;
- if(removenode->same)
- removenode->same->smaller = removenode->smaller;
-
- /* Ensures that double-remove gets caught. */
- removenode->smaller = NULL;
-
- /* voila, we're done! */
- *newroot = t; /* return the same root */
- return 0;
- }
-
- t = Curl_splay(removenode->key, t);
-
- /* First make sure that we got the same root node as the one we want
- to remove, as otherwise we might be trying to remove a node that
- isn't actually in the tree.
-
- We cannot just compare the keys here as a double remove in quick
- succession of a node with key != KEY_NOTUSED && same != NULL
- could return the same key but a different node. */
- if(t != removenode)
- return 2;
-
- /* Check if there is a list with identical sizes, as then we're trying to
- remove the root node of a list of nodes with identical keys. */
- x = t->same;
- if(x) {
- /* 'x' is the new root node, we just make it use the root node's
- smaller/larger links */
-
- x->key = t->key;
- x->larger = t->larger;
- x->smaller = t->smaller;
- }
- else {
- /* Remove the root node */
- if(t->smaller == NULL)
- x = t->larger;
- else {
- x = Curl_splay(removenode->key, t->smaller);
- x->larger = t->larger;
- }
- }
-
- *newroot = x; /* store new root pointer */
-
- return 0;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/lib/splay.h b/external/libcurl_android/jni/libcurl/lib/splay.h
deleted file mode 100755
index 5f9ef24c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/splay.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef HEADER_CURL_SPLAY_H
-#define HEADER_CURL_SPLAY_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1997 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-struct Curl_tree {
- struct Curl_tree *smaller; /* smaller node */
- struct Curl_tree *larger; /* larger node */
- struct Curl_tree *same; /* points to a node with identical key */
- struct timeval key; /* this node's "sort" key */
- void *payload; /* data the splay code doesn't care about */
-};
-
-struct Curl_tree *Curl_splay(struct timeval i,
- struct Curl_tree *t);
-
-struct Curl_tree *Curl_splayinsert(struct timeval key,
- struct Curl_tree *t,
- struct Curl_tree *newnode);
-
-#if 0
-struct Curl_tree *Curl_splayremove(struct timeval key,
- struct Curl_tree *t,
- struct Curl_tree **removed);
-#endif
-
-struct Curl_tree *Curl_splaygetbest(struct timeval key,
- struct Curl_tree *t,
- struct Curl_tree **removed);
-
-int Curl_splayremovebyaddr(struct Curl_tree *t,
- struct Curl_tree *removenode,
- struct Curl_tree **newroot);
-
-#define Curl_splaycomparekeys(i,j) ( ((i.tv_sec) < (j.tv_sec)) ? -1 : \
- ( ((i.tv_sec) > (j.tv_sec)) ? 1 : \
- ( ((i.tv_usec) < (j.tv_usec)) ? -1 : \
- ( ((i.tv_usec) > (j.tv_usec)) ? 1 : 0 ))))
-
-#ifdef DEBUGBUILD
-void Curl_splayprint(struct Curl_tree * t, int d, char output);
-#else
-#define Curl_splayprint(x,y,z) Curl_nop_stmt
-#endif
-
-#endif /* HEADER_CURL_SPLAY_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/ssh.c b/external/libcurl_android/jni/libcurl/lib/ssh.c
deleted file mode 100755
index 887e10f2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/ssh.c
+++ /dev/null
@@ -1,3302 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* #define CURL_LIBSSH2_DEBUG */
-
-#include "curl_setup.h"
-
-#ifdef USE_LIBSSH2
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-
-#include <libssh2.h>
-#include <libssh2_sftp.h>
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_UTSNAME_H
-#include <sys/utsname.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#if (defined(NETWARE) && defined(__NOVELL_LIBC__))
-#undef in_addr_t
-#define in_addr_t unsigned long
-#endif
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "hostip.h"
-#include "progress.h"
-#include "transfer.h"
-#include "escape.h"
-#include "http.h" /* for HTTP proxy tunnel stuff */
-#include "ssh.h"
-#include "url.h"
-#include "speedcheck.h"
-#include "getinfo.h"
-
-#include "strequal.h"
-#include "vtls/vtls.h"
-#include "connect.h"
-#include "strerror.h"
-#include "inet_ntop.h"
-#include "parsedate.h" /* for the week day and month names */
-#include "sockaddr.h" /* required for Curl_sockaddr_storage */
-#include "strtoofft.h"
-#include "multiif.h"
-#include "select.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifdef WIN32
-# undef PATH_MAX
-# define PATH_MAX MAX_PATH
-#endif
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024 /* just an extra precaution since there are systems that
- have their definition hidden well */
-#endif
-
-#define sftp_libssh2_last_error(s) curlx_ultosi(libssh2_sftp_last_error(s))
-
-#define sftp_libssh2_realpath(s,p,t,m) \
- libssh2_sftp_symlink_ex((s), (p), curlx_uztoui(strlen(p)), \
- (t), (m), LIBSSH2_SFTP_REALPATH)
-
-/* Local functions: */
-static const char *sftp_libssh2_strerror(int err);
-static LIBSSH2_ALLOC_FUNC(my_libssh2_malloc);
-static LIBSSH2_REALLOC_FUNC(my_libssh2_realloc);
-static LIBSSH2_FREE_FUNC(my_libssh2_free);
-
-static CURLcode get_pathname(const char **cpp, char **path);
-
-static CURLcode ssh_connect(struct connectdata *conn, bool *done);
-static CURLcode ssh_multi_statemach(struct connectdata *conn, bool *done);
-static CURLcode ssh_do(struct connectdata *conn, bool *done);
-
-static CURLcode ssh_getworkingpath(struct connectdata *conn,
- char *homedir, /* when SFTP is used */
- char **path);
-
-static CURLcode scp_done(struct connectdata *conn,
- CURLcode, bool premature);
-static CURLcode scp_doing(struct connectdata *conn,
- bool *dophase_done);
-static CURLcode scp_disconnect(struct connectdata *conn, bool dead_connection);
-
-static CURLcode sftp_done(struct connectdata *conn,
- CURLcode, bool premature);
-static CURLcode sftp_doing(struct connectdata *conn,
- bool *dophase_done);
-static CURLcode sftp_disconnect(struct connectdata *conn, bool dead);
-static
-CURLcode sftp_perform(struct connectdata *conn,
- bool *connected,
- bool *dophase_done);
-
-static int ssh_getsock(struct connectdata *conn,
- curl_socket_t *sock, /* points to numsocks number
- of sockets */
- int numsocks);
-
-static int ssh_perform_getsock(const struct connectdata *conn,
- curl_socket_t *sock, /* points to numsocks
- number of sockets */
- int numsocks);
-
-static CURLcode ssh_setup_connection(struct connectdata *conn);
-
-/*
- * SCP protocol handler.
- */
-
-const struct Curl_handler Curl_handler_scp = {
- "SCP", /* scheme */
- ssh_setup_connection, /* setup_connection */
- ssh_do, /* do_it */
- scp_done, /* done */
- ZERO_NULL, /* do_more */
- ssh_connect, /* connect_it */
- ssh_multi_statemach, /* connecting */
- scp_doing, /* doing */
- ssh_getsock, /* proto_getsock */
- ssh_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ssh_perform_getsock, /* perform_getsock */
- scp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_SSH, /* defport */
- CURLPROTO_SCP, /* protocol */
- PROTOPT_DIRLOCK | PROTOPT_CLOSEACTION
- | PROTOPT_NOURLQUERY /* flags */
-};
-
-
-/*
- * SFTP protocol handler.
- */
-
-const struct Curl_handler Curl_handler_sftp = {
- "SFTP", /* scheme */
- ssh_setup_connection, /* setup_connection */
- ssh_do, /* do_it */
- sftp_done, /* done */
- ZERO_NULL, /* do_more */
- ssh_connect, /* connect_it */
- ssh_multi_statemach, /* connecting */
- sftp_doing, /* doing */
- ssh_getsock, /* proto_getsock */
- ssh_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ssh_perform_getsock, /* perform_getsock */
- sftp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_SSH, /* defport */
- CURLPROTO_SFTP, /* protocol */
- PROTOPT_DIRLOCK | PROTOPT_CLOSEACTION
- | PROTOPT_NOURLQUERY /* flags */
-};
-
-static void
-kbd_callback(const char *name, int name_len, const char *instruction,
- int instruction_len, int num_prompts,
- const LIBSSH2_USERAUTH_KBDINT_PROMPT *prompts,
- LIBSSH2_USERAUTH_KBDINT_RESPONSE *responses,
- void **abstract)
-{
- struct connectdata *conn = (struct connectdata *)*abstract;
-
-#ifdef CURL_LIBSSH2_DEBUG
- fprintf(stderr, "name=%s\n", name);
- fprintf(stderr, "name_len=%d\n", name_len);
- fprintf(stderr, "instruction=%s\n", instruction);
- fprintf(stderr, "instruction_len=%d\n", instruction_len);
- fprintf(stderr, "num_prompts=%d\n", num_prompts);
-#else
- (void)name;
- (void)name_len;
- (void)instruction;
- (void)instruction_len;
-#endif /* CURL_LIBSSH2_DEBUG */
- if(num_prompts == 1) {
- responses[0].text = strdup(conn->passwd);
- responses[0].length = curlx_uztoui(strlen(conn->passwd));
- }
- (void)prompts;
- (void)abstract;
-} /* kbd_callback */
-
-static CURLcode sftp_libssh2_error_to_CURLE(int err)
-{
- switch (err) {
- case LIBSSH2_FX_OK:
- return CURLE_OK;
-
- case LIBSSH2_FX_NO_SUCH_FILE:
- case LIBSSH2_FX_NO_SUCH_PATH:
- return CURLE_REMOTE_FILE_NOT_FOUND;
-
- case LIBSSH2_FX_PERMISSION_DENIED:
- case LIBSSH2_FX_WRITE_PROTECT:
- case LIBSSH2_FX_LOCK_CONFlICT:
- return CURLE_REMOTE_ACCESS_DENIED;
-
- case LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM:
- case LIBSSH2_FX_QUOTA_EXCEEDED:
- return CURLE_REMOTE_DISK_FULL;
-
- case LIBSSH2_FX_FILE_ALREADY_EXISTS:
- return CURLE_REMOTE_FILE_EXISTS;
-
- case LIBSSH2_FX_DIR_NOT_EMPTY:
- return CURLE_QUOTE_ERROR;
-
- default:
- break;
- }
-
- return CURLE_SSH;
-}
-
-static CURLcode libssh2_session_error_to_CURLE(int err)
-{
- switch (err) {
- /* Ordered by order of appearance in libssh2.h */
- case LIBSSH2_ERROR_NONE:
- return CURLE_OK;
-
- case LIBSSH2_ERROR_SOCKET_NONE:
- return CURLE_COULDNT_CONNECT;
-
- case LIBSSH2_ERROR_ALLOC:
- return CURLE_OUT_OF_MEMORY;
-
- case LIBSSH2_ERROR_SOCKET_SEND:
- return CURLE_SEND_ERROR;
-
- case LIBSSH2_ERROR_HOSTKEY_INIT:
- case LIBSSH2_ERROR_HOSTKEY_SIGN:
- case LIBSSH2_ERROR_PUBLICKEY_UNRECOGNIZED:
- case LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED:
- return CURLE_PEER_FAILED_VERIFICATION;
-
- case LIBSSH2_ERROR_PASSWORD_EXPIRED:
- return CURLE_LOGIN_DENIED;
-
- case LIBSSH2_ERROR_SOCKET_TIMEOUT:
- case LIBSSH2_ERROR_TIMEOUT:
- return CURLE_OPERATION_TIMEDOUT;
-
- case LIBSSH2_ERROR_EAGAIN:
- return CURLE_AGAIN;
- }
-
- /* TODO: map some more of the libssh2 errors to the more appropriate CURLcode
- error code, and possibly add a few new SSH-related one. We must however
- not return or even depend on libssh2 errors in the public libcurl API */
-
- return CURLE_SSH;
-}
-
-static LIBSSH2_ALLOC_FUNC(my_libssh2_malloc)
-{
- (void)abstract; /* arg not used */
- return malloc(count);
-}
-
-static LIBSSH2_REALLOC_FUNC(my_libssh2_realloc)
-{
- (void)abstract; /* arg not used */
- return realloc(ptr, count);
-}
-
-static LIBSSH2_FREE_FUNC(my_libssh2_free)
-{
- (void)abstract; /* arg not used */
- if(ptr) /* ssh2 agent sometimes call free with null ptr */
- free(ptr);
-}
-
-/*
- * SSH State machine related code
- */
-/* This is the ONLY way to change SSH state! */
-static void state(struct connectdata *conn, sshstate nowstate)
-{
- struct ssh_conn *sshc = &conn->proto.sshc;
-#if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
- /* for debug purposes */
- static const char * const names[] = {
- "SSH_STOP",
- "SSH_INIT",
- "SSH_S_STARTUP",
- "SSH_HOSTKEY",
- "SSH_AUTHLIST",
- "SSH_AUTH_PKEY_INIT",
- "SSH_AUTH_PKEY",
- "SSH_AUTH_PASS_INIT",
- "SSH_AUTH_PASS",
- "SSH_AUTH_AGENT_INIT",
- "SSH_AUTH_AGENT_LIST",
- "SSH_AUTH_AGENT",
- "SSH_AUTH_HOST_INIT",
- "SSH_AUTH_HOST",
- "SSH_AUTH_KEY_INIT",
- "SSH_AUTH_KEY",
- "SSH_AUTH_DONE",
- "SSH_SFTP_INIT",
- "SSH_SFTP_REALPATH",
- "SSH_SFTP_QUOTE_INIT",
- "SSH_SFTP_POSTQUOTE_INIT",
- "SSH_SFTP_QUOTE",
- "SSH_SFTP_NEXT_QUOTE",
- "SSH_SFTP_QUOTE_STAT",
- "SSH_SFTP_QUOTE_SETSTAT",
- "SSH_SFTP_QUOTE_SYMLINK",
- "SSH_SFTP_QUOTE_MKDIR",
- "SSH_SFTP_QUOTE_RENAME",
- "SSH_SFTP_QUOTE_RMDIR",
- "SSH_SFTP_QUOTE_UNLINK",
- "SSH_SFTP_TRANS_INIT",
- "SSH_SFTP_UPLOAD_INIT",
- "SSH_SFTP_CREATE_DIRS_INIT",
- "SSH_SFTP_CREATE_DIRS",
- "SSH_SFTP_CREATE_DIRS_MKDIR",
- "SSH_SFTP_READDIR_INIT",
- "SSH_SFTP_READDIR",
- "SSH_SFTP_READDIR_LINK",
- "SSH_SFTP_READDIR_BOTTOM",
- "SSH_SFTP_READDIR_DONE",
- "SSH_SFTP_DOWNLOAD_INIT",
- "SSH_SFTP_DOWNLOAD_STAT",
- "SSH_SFTP_CLOSE",
- "SSH_SFTP_SHUTDOWN",
- "SSH_SCP_TRANS_INIT",
- "SSH_SCP_UPLOAD_INIT",
- "SSH_SCP_DOWNLOAD_INIT",
- "SSH_SCP_DONE",
- "SSH_SCP_SEND_EOF",
- "SSH_SCP_WAIT_EOF",
- "SSH_SCP_WAIT_CLOSE",
- "SSH_SCP_CHANNEL_FREE",
- "SSH_SESSION_DISCONNECT",
- "SSH_SESSION_FREE",
- "QUIT"
- };
-
- if(sshc->state != nowstate) {
- infof(conn->data, "SFTP %p state change from %s to %s\n",
- (void *)sshc, names[sshc->state], names[nowstate]);
- }
-#endif
-
- sshc->state = nowstate;
-}
-
-/* figure out the path to work with in this particular request */
-static CURLcode ssh_getworkingpath(struct connectdata *conn,
- char *homedir, /* when SFTP is used */
- char **path) /* returns the allocated
- real path to work with */
-{
- struct SessionHandle *data = conn->data;
- char *real_path = NULL;
- char *working_path;
- int working_path_len;
-
- working_path = curl_easy_unescape(data, data->state.path, 0,
- &working_path_len);
- if(!working_path)
- return CURLE_OUT_OF_MEMORY;
-
- /* Check for /~/ , indicating relative to the user's home directory */
- if(conn->handler->protocol & CURLPROTO_SCP) {
- real_path = malloc(working_path_len+1);
- if(real_path == NULL) {
- free(working_path);
- return CURLE_OUT_OF_MEMORY;
- }
- if((working_path_len > 3) && (!memcmp(working_path, "/~/", 3)))
- /* It is referenced to the home directory, so strip the leading '/~/' */
- memcpy(real_path, working_path+3, 4 + working_path_len-3);
- else
- memcpy(real_path, working_path, 1 + working_path_len);
- }
- else if(conn->handler->protocol & CURLPROTO_SFTP) {
- if((working_path_len > 1) && (working_path[1] == '~')) {
- size_t homelen = strlen(homedir);
- real_path = malloc(homelen + working_path_len + 1);
- if(real_path == NULL) {
- free(working_path);
- return CURLE_OUT_OF_MEMORY;
- }
- /* It is referenced to the home directory, so strip the
- leading '/' */
- memcpy(real_path, homedir, homelen);
- real_path[homelen] = '/';
- real_path[homelen+1] = '\0';
- if(working_path_len > 3) {
- memcpy(real_path+homelen+1, working_path + 3,
- 1 + working_path_len -3);
- }
- }
- else {
- real_path = malloc(working_path_len+1);
- if(real_path == NULL) {
- free(working_path);
- return CURLE_OUT_OF_MEMORY;
- }
- memcpy(real_path, working_path, 1+working_path_len);
- }
- }
-
- free(working_path);
-
- /* store the pointer for the caller to receive */
- *path = real_path;
-
- return CURLE_OK;
-}
-
-#ifdef HAVE_LIBSSH2_KNOWNHOST_API
-static int sshkeycallback(CURL *easy,
- const struct curl_khkey *knownkey, /* known */
- const struct curl_khkey *foundkey, /* found */
- enum curl_khmatch match,
- void *clientp)
-{
- (void)easy;
- (void)knownkey;
- (void)foundkey;
- (void)clientp;
-
- /* we only allow perfect matches, and we reject everything else */
- return (match != CURLKHMATCH_OK)?CURLKHSTAT_REJECT:CURLKHSTAT_FINE;
-}
-#endif
-
-/*
- * Earlier libssh2 versions didn't have the ability to seek to 64bit positions
- * with 32bit size_t.
- */
-#ifdef HAVE_LIBSSH2_SFTP_SEEK64
-#define SFTP_SEEK(x,y) libssh2_sftp_seek64(x, (libssh2_uint64_t)y)
-#else
-#define SFTP_SEEK(x,y) libssh2_sftp_seek(x, (size_t)y)
-#endif
-
-/*
- * Earlier libssh2 versions didn't do SCP properly beyond 32bit sizes on 32bit
- * architectures so we check of the necessary function is present.
- */
-#ifndef HAVE_LIBSSH2_SCP_SEND64
-#define SCP_SEND(a,b,c,d) libssh2_scp_send_ex(a, b, (int)(c), (size_t)d, 0, 0)
-#else
-#define SCP_SEND(a,b,c,d) libssh2_scp_send64(a, b, (int)(c), \
- (libssh2_uint64_t)d, 0, 0)
-#endif
-
-/*
- * libssh2 1.2.8 fixed the problem with 32bit ints used for sockets on win64.
- */
-#ifdef HAVE_LIBSSH2_SESSION_HANDSHAKE
-#define libssh2_session_startup(x,y) libssh2_session_handshake(x,y)
-#endif
-
-static CURLcode ssh_knownhost(struct connectdata *conn)
-{
- CURLcode result = CURLE_OK;
-
-#ifdef HAVE_LIBSSH2_KNOWNHOST_API
- struct SessionHandle *data = conn->data;
-
- if(data->set.str[STRING_SSH_KNOWNHOSTS]) {
- /* we're asked to verify the host against a file */
- struct ssh_conn *sshc = &conn->proto.sshc;
- int rc;
- int keytype;
- size_t keylen;
- const char *remotekey = libssh2_session_hostkey(sshc->ssh_session,
- &keylen, &keytype);
- int keycheck = LIBSSH2_KNOWNHOST_CHECK_FAILURE;
- int keybit = 0;
-
- if(remotekey) {
- /*
- * A subject to figure out is what host name we need to pass in here.
- * What host name does OpenSSH store in its file if an IDN name is
- * used?
- */
- struct libssh2_knownhost *host;
- enum curl_khmatch keymatch;
- curl_sshkeycallback func =
- data->set.ssh_keyfunc?data->set.ssh_keyfunc:sshkeycallback;
- struct curl_khkey knownkey;
- struct curl_khkey *knownkeyp = NULL;
- struct curl_khkey foundkey;
-
- keybit = (keytype == LIBSSH2_HOSTKEY_TYPE_RSA)?
- LIBSSH2_KNOWNHOST_KEY_SSHRSA:LIBSSH2_KNOWNHOST_KEY_SSHDSS;
-
- keycheck = libssh2_knownhost_check(sshc->kh,
- conn->host.name,
- remotekey, keylen,
- LIBSSH2_KNOWNHOST_TYPE_PLAIN|
- LIBSSH2_KNOWNHOST_KEYENC_RAW|
- keybit,
- &host);
-
- infof(data, "SSH host check: %d, key: %s\n", keycheck,
- (keycheck <= LIBSSH2_KNOWNHOST_CHECK_MISMATCH)?
- host->key:"<none>");
-
- /* setup 'knownkey' */
- if(keycheck <= LIBSSH2_KNOWNHOST_CHECK_MISMATCH) {
- knownkey.key = host->key;
- knownkey.len = 0;
- knownkey.keytype = (keytype == LIBSSH2_HOSTKEY_TYPE_RSA)?
- CURLKHTYPE_RSA : CURLKHTYPE_DSS;
- knownkeyp = &knownkey;
- }
-
- /* setup 'foundkey' */
- foundkey.key = remotekey;
- foundkey.len = keylen;
- foundkey.keytype = (keytype == LIBSSH2_HOSTKEY_TYPE_RSA)?
- CURLKHTYPE_RSA : CURLKHTYPE_DSS;
-
- /*
- * if any of the LIBSSH2_KNOWNHOST_CHECK_* defines and the
- * curl_khmatch enum are ever modified, we need to introduce a
- * translation table here!
- */
- keymatch = (enum curl_khmatch)keycheck;
-
- /* Ask the callback how to behave */
- rc = func(data, knownkeyp, /* from the knownhosts file */
- &foundkey, /* from the remote host */
- keymatch, data->set.ssh_keyfunc_userp);
- }
- else
- /* no remotekey means failure! */
- rc = CURLKHSTAT_REJECT;
-
- switch(rc) {
- default: /* unknown return codes will equal reject */
- case CURLKHSTAT_REJECT:
- state(conn, SSH_SESSION_FREE);
- case CURLKHSTAT_DEFER:
- /* DEFER means bail out but keep the SSH_HOSTKEY state */
- result = sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION;
- break;
- case CURLKHSTAT_FINE:
- case CURLKHSTAT_FINE_ADD_TO_FILE:
- /* proceed */
- if(keycheck != LIBSSH2_KNOWNHOST_CHECK_MATCH) {
- /* the found host+key didn't match but has been told to be fine
- anyway so we add it in memory */
- int addrc = libssh2_knownhost_add(sshc->kh,
- conn->host.name, NULL,
- remotekey, keylen,
- LIBSSH2_KNOWNHOST_TYPE_PLAIN|
- LIBSSH2_KNOWNHOST_KEYENC_RAW|
- keybit, NULL);
- if(addrc)
- infof(data, "Warning adding the known host %s failed!\n",
- conn->host.name);
- else if(rc == CURLKHSTAT_FINE_ADD_TO_FILE) {
- /* now we write the entire in-memory list of known hosts to the
- known_hosts file */
- int wrc =
- libssh2_knownhost_writefile(sshc->kh,
- data->set.str[STRING_SSH_KNOWNHOSTS],
- LIBSSH2_KNOWNHOST_FILE_OPENSSH);
- if(wrc) {
- infof(data, "Warning, writing %s failed!\n",
- data->set.str[STRING_SSH_KNOWNHOSTS]);
- }
- }
- }
- break;
- }
- }
-#else /* HAVE_LIBSSH2_KNOWNHOST_API */
- (void)conn;
-#endif
- return result;
-}
-
-static CURLcode ssh_check_fingerprint(struct connectdata *conn)
-{
- struct ssh_conn *sshc = &conn->proto.sshc;
- struct SessionHandle *data = conn->data;
- const char *pubkey_md5 = data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5];
- char md5buffer[33];
- int i;
-
- const char *fingerprint = libssh2_hostkey_hash(sshc->ssh_session,
- LIBSSH2_HOSTKEY_HASH_MD5);
-
- if(fingerprint) {
- /* The fingerprint points to static storage (!), don't free() it. */
- for(i = 0; i < 16; i++)
- snprintf(&md5buffer[i*2], 3, "%02x", (unsigned char) fingerprint[i]);
- infof(data, "SSH MD5 fingerprint: %s\n", md5buffer);
- }
-
- /* Before we authenticate we check the hostkey's MD5 fingerprint
- * against a known fingerprint, if available.
- */
- if(pubkey_md5 && strlen(pubkey_md5) == 32) {
- if(!fingerprint || !strequal(md5buffer, pubkey_md5)) {
- if(fingerprint)
- failf(data,
- "Denied establishing ssh session: mismatch md5 fingerprint. "
- "Remote %s is not equal to %s", md5buffer, pubkey_md5);
- else
- failf(data,
- "Denied establishing ssh session: md5 fingerprint not available");
- state(conn, SSH_SESSION_FREE);
- sshc->actualcode = CURLE_PEER_FAILED_VERIFICATION;
- return sshc->actualcode;
- }
- else {
- infof(data, "MD5 checksum match!\n");
- /* as we already matched, we skip the check for known hosts */
- return CURLE_OK;
- }
- }
- else
- return ssh_knownhost(conn);
-}
-
-/*
- * ssh_statemach_act() runs the SSH state machine as far as it can without
- * blocking and without reaching the end. The data the pointer 'block' points
- * to will be set to TRUE if the libssh2 function returns LIBSSH2_ERROR_EAGAIN
- * meaning it wants to be called again when the socket is ready
- */
-
-static CURLcode ssh_statemach_act(struct connectdata *conn, bool *block)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct SSHPROTO *sftp_scp = data->req.protop;
- struct ssh_conn *sshc = &conn->proto.sshc;
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
- char *new_readdir_line;
- int rc = LIBSSH2_ERROR_NONE;
- int err;
- int seekerr = CURL_SEEKFUNC_OK;
- *block = 0; /* we're not blocking by default */
-
- do {
-
- switch(sshc->state) {
- case SSH_INIT:
- sshc->secondCreateDirs = 0;
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_OK;
-
- /* Set libssh2 to non-blocking, since everything internally is
- non-blocking */
- libssh2_session_set_blocking(sshc->ssh_session, 0);
-
- state(conn, SSH_S_STARTUP);
- /* fall-through */
-
- case SSH_S_STARTUP:
- rc = libssh2_session_startup(sshc->ssh_session, (int)sock);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc) {
- failf(data, "Failure establishing ssh session");
- state(conn, SSH_SESSION_FREE);
- sshc->actualcode = CURLE_FAILED_INIT;
- break;
- }
-
- state(conn, SSH_HOSTKEY);
-
- /* fall-through */
- case SSH_HOSTKEY:
- /*
- * Before we authenticate we should check the hostkey's fingerprint
- * against our known hosts. How that is handled (reading from file,
- * whatever) is up to us.
- */
- result = ssh_check_fingerprint(conn);
- if(result == CURLE_OK)
- state(conn, SSH_AUTHLIST);
- /* ssh_check_fingerprint sets state appropriately on error */
- break;
-
- case SSH_AUTHLIST:
- /*
- * Figure out authentication methods
- * NB: As soon as we have provided a username to an openssh server we
- * must never change it later. Thus, always specify the correct username
- * here, even though the libssh2 docs kind of indicate that it should be
- * possible to get a 'generic' list (not user-specific) of authentication
- * methods, presumably with a blank username. That won't work in my
- * experience.
- * So always specify it here.
- */
- sshc->authlist = libssh2_userauth_list(sshc->ssh_session,
- conn->user,
- curlx_uztoui(strlen(conn->user)));
-
- if(!sshc->authlist) {
- if(libssh2_userauth_authenticated(sshc->ssh_session)) {
- sshc->authed = TRUE;
- infof(data, "SSH user accepted with no authentication\n");
- state(conn, SSH_AUTH_DONE);
- break;
- }
- else if((err = libssh2_session_last_errno(sshc->ssh_session)) ==
- LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- else {
- state(conn, SSH_SESSION_FREE);
- sshc->actualcode = libssh2_session_error_to_CURLE(err);
- break;
- }
- }
- infof(data, "SSH authentication methods available: %s\n",
- sshc->authlist);
-
- state(conn, SSH_AUTH_PKEY_INIT);
- break;
-
- case SSH_AUTH_PKEY_INIT:
- /*
- * Check the supported auth types in the order I feel is most secure
- * with the requested type of authentication
- */
- sshc->authed = FALSE;
-
- if((data->set.ssh_auth_types & CURLSSH_AUTH_PUBLICKEY) &&
- (strstr(sshc->authlist, "publickey") != NULL)) {
- char *home = NULL;
- bool rsa_pub_empty_but_ok = FALSE;
-
- sshc->rsa_pub = sshc->rsa = NULL;
-
- /* To ponder about: should really the lib be messing about with the
- HOME environment variable etc? */
- home = curl_getenv("HOME");
-
- if(data->set.str[STRING_SSH_PUBLIC_KEY] &&
- !*data->set.str[STRING_SSH_PUBLIC_KEY])
- rsa_pub_empty_but_ok = true;
- else if(data->set.str[STRING_SSH_PUBLIC_KEY])
- sshc->rsa_pub = aprintf("%s", data->set.str[STRING_SSH_PUBLIC_KEY]);
- else if(home)
- sshc->rsa_pub = aprintf("%s/.ssh/id_dsa.pub", home);
- else
- /* as a final resort, try current dir! */
- sshc->rsa_pub = strdup("id_dsa.pub");
-
- if(!rsa_pub_empty_but_ok && (sshc->rsa_pub == NULL)) {
- Curl_safefree(home);
- state(conn, SSH_SESSION_FREE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
-
- if(data->set.str[STRING_SSH_PRIVATE_KEY])
- sshc->rsa = aprintf("%s", data->set.str[STRING_SSH_PRIVATE_KEY]);
- else if(home)
- sshc->rsa = aprintf("%s/.ssh/id_dsa", home);
- else
- /* as a final resort, try current dir! */
- sshc->rsa = strdup("id_dsa");
-
- if(sshc->rsa == NULL) {
- Curl_safefree(home);
- Curl_safefree(sshc->rsa_pub);
- state(conn, SSH_SESSION_FREE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
-
- sshc->passphrase = data->set.str[STRING_KEY_PASSWD];
- if(!sshc->passphrase)
- sshc->passphrase = "";
-
- Curl_safefree(home);
-
- infof(data, "Using ssh public key file %s\n", sshc->rsa_pub);
- infof(data, "Using ssh private key file %s\n", sshc->rsa);
-
- state(conn, SSH_AUTH_PKEY);
- }
- else {
- state(conn, SSH_AUTH_PASS_INIT);
- }
- break;
-
- case SSH_AUTH_PKEY:
- /* The function below checks if the files exists, no need to stat() here.
- */
- rc = libssh2_userauth_publickey_fromfile_ex(sshc->ssh_session,
- conn->user,
- curlx_uztoui(
- strlen(conn->user)),
- sshc->rsa_pub,
- sshc->rsa, sshc->passphrase);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
-
- Curl_safefree(sshc->rsa_pub);
- Curl_safefree(sshc->rsa);
-
- if(rc == 0) {
- sshc->authed = TRUE;
- infof(data, "Initialized SSH public key authentication\n");
- state(conn, SSH_AUTH_DONE);
- }
- else {
- char *err_msg;
- (void)libssh2_session_last_error(sshc->ssh_session,
- &err_msg, NULL, 0);
- infof(data, "SSH public key authentication failed: %s\n", err_msg);
- state(conn, SSH_AUTH_PASS_INIT);
- }
- break;
-
- case SSH_AUTH_PASS_INIT:
- if((data->set.ssh_auth_types & CURLSSH_AUTH_PASSWORD) &&
- (strstr(sshc->authlist, "password") != NULL)) {
- state(conn, SSH_AUTH_PASS);
- }
- else {
- state(conn, SSH_AUTH_HOST_INIT);
- }
- break;
-
- case SSH_AUTH_PASS:
- rc = libssh2_userauth_password_ex(sshc->ssh_session, conn->user,
- curlx_uztoui(strlen(conn->user)),
- conn->passwd,
- curlx_uztoui(strlen(conn->passwd)),
- NULL);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc == 0) {
- sshc->authed = TRUE;
- infof(data, "Initialized password authentication\n");
- state(conn, SSH_AUTH_DONE);
- }
- else {
- state(conn, SSH_AUTH_HOST_INIT);
- }
- break;
-
- case SSH_AUTH_HOST_INIT:
- if((data->set.ssh_auth_types & CURLSSH_AUTH_HOST) &&
- (strstr(sshc->authlist, "hostbased") != NULL)) {
- state(conn, SSH_AUTH_HOST);
- }
- else {
- state(conn, SSH_AUTH_AGENT_INIT);
- }
- break;
-
- case SSH_AUTH_HOST:
- state(conn, SSH_AUTH_AGENT_INIT);
- break;
-
- case SSH_AUTH_AGENT_INIT:
-#ifdef HAVE_LIBSSH2_AGENT_API
- if((data->set.ssh_auth_types & CURLSSH_AUTH_AGENT)
- && (strstr(sshc->authlist, "publickey") != NULL)) {
-
- /* Connect to the ssh-agent */
- /* The agent could be shared by a curl thread i believe
- but nothing obvious as keys can be added/removed at any time */
- if(!sshc->ssh_agent) {
- sshc->ssh_agent = libssh2_agent_init(sshc->ssh_session);
- if(!sshc->ssh_agent) {
- infof(data, "Could not create agent object\n");
-
- state(conn, SSH_AUTH_KEY_INIT);
- break;
- }
- }
-
- rc = libssh2_agent_connect(sshc->ssh_agent);
- if(rc == LIBSSH2_ERROR_EAGAIN)
- break;
- if(rc < 0) {
- infof(data, "Failure connecting to agent\n");
- state(conn, SSH_AUTH_KEY_INIT);
- }
- else {
- state(conn, SSH_AUTH_AGENT_LIST);
- }
- }
- else
-#endif /* HAVE_LIBSSH2_AGENT_API */
- state(conn, SSH_AUTH_KEY_INIT);
- break;
-
- case SSH_AUTH_AGENT_LIST:
-#ifdef HAVE_LIBSSH2_AGENT_API
- rc = libssh2_agent_list_identities(sshc->ssh_agent);
-
- if(rc == LIBSSH2_ERROR_EAGAIN)
- break;
- if(rc < 0) {
- infof(data, "Failure requesting identities to agent\n");
- state(conn, SSH_AUTH_KEY_INIT);
- }
- else {
- state(conn, SSH_AUTH_AGENT);
- sshc->sshagent_prev_identity = NULL;
- }
-#endif
- break;
-
- case SSH_AUTH_AGENT:
-#ifdef HAVE_LIBSSH2_AGENT_API
- /* as prev_identity evolves only after an identity user auth finished we
- can safely request it again as long as EAGAIN is returned here or by
- libssh2_agent_userauth */
- rc = libssh2_agent_get_identity(sshc->ssh_agent,
- &sshc->sshagent_identity,
- sshc->sshagent_prev_identity);
- if(rc == LIBSSH2_ERROR_EAGAIN)
- break;
-
- if(rc == 0) {
- rc = libssh2_agent_userauth(sshc->ssh_agent, conn->user,
- sshc->sshagent_identity);
-
- if(rc < 0) {
- if(rc != LIBSSH2_ERROR_EAGAIN) {
- /* tried and failed? go to next identity */
- sshc->sshagent_prev_identity = sshc->sshagent_identity;
- }
- break;
- }
- }
-
- if(rc < 0)
- infof(data, "Failure requesting identities to agent\n");
- else if(rc == 1)
- infof(data, "No identity would match\n");
-
- if(rc == LIBSSH2_ERROR_NONE) {
- sshc->authed = TRUE;
- infof(data, "Agent based authentication successful\n");
- state(conn, SSH_AUTH_DONE);
- }
- else
- state(conn, SSH_AUTH_KEY_INIT);
-#endif
- break;
-
- case SSH_AUTH_KEY_INIT:
- if((data->set.ssh_auth_types & CURLSSH_AUTH_KEYBOARD)
- && (strstr(sshc->authlist, "keyboard-interactive") != NULL)) {
- state(conn, SSH_AUTH_KEY);
- }
- else {
- state(conn, SSH_AUTH_DONE);
- }
- break;
-
- case SSH_AUTH_KEY:
- /* Authentication failed. Continue with keyboard-interactive now. */
- rc = libssh2_userauth_keyboard_interactive_ex(sshc->ssh_session,
- conn->user,
- curlx_uztoui(
- strlen(conn->user)),
- &kbd_callback);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc == 0) {
- sshc->authed = TRUE;
- infof(data, "Initialized keyboard interactive authentication\n");
- }
- state(conn, SSH_AUTH_DONE);
- break;
-
- case SSH_AUTH_DONE:
- if(!sshc->authed) {
- failf(data, "Authentication failure");
- state(conn, SSH_SESSION_FREE);
- sshc->actualcode = CURLE_LOGIN_DENIED;
- break;
- }
-
- /*
- * At this point we have an authenticated ssh session.
- */
- infof(data, "Authentication complete\n");
-
- Curl_pgrsTime(conn->data, TIMER_APPCONNECT); /* SSH is connected */
-
- conn->sockfd = sock;
- conn->writesockfd = CURL_SOCKET_BAD;
-
- if(conn->handler->protocol == CURLPROTO_SFTP) {
- state(conn, SSH_SFTP_INIT);
- break;
- }
- infof(data, "SSH CONNECT phase done\n");
- state(conn, SSH_STOP);
- break;
-
- case SSH_SFTP_INIT:
- /*
- * Start the libssh2 sftp session
- */
- sshc->sftp_session = libssh2_sftp_init(sshc->ssh_session);
- if(!sshc->sftp_session) {
- if(libssh2_session_last_errno(sshc->ssh_session) ==
- LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- else {
- char *err_msg;
-
- (void)libssh2_session_last_error(sshc->ssh_session,
- &err_msg, NULL, 0);
- failf(data, "Failure initializing sftp session: %s", err_msg);
- state(conn, SSH_SESSION_FREE);
- sshc->actualcode = CURLE_FAILED_INIT;
- break;
- }
- }
- state(conn, SSH_SFTP_REALPATH);
- break;
-
- case SSH_SFTP_REALPATH:
- {
- char tempHome[PATH_MAX];
-
- /*
- * Get the "home" directory
- */
- rc = sftp_libssh2_realpath(sshc->sftp_session, ".",
- tempHome, PATH_MAX-1);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc > 0) {
- /* It seems that this string is not always NULL terminated */
- tempHome[rc] = '\0';
- sshc->homedir = strdup(tempHome);
- if(!sshc->homedir) {
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
- conn->data->state.most_recent_ftp_entrypath = sshc->homedir;
- }
- else {
- /* Return the error type */
- err = sftp_libssh2_last_error(sshc->sftp_session);
- result = sftp_libssh2_error_to_CURLE(err);
- sshc->actualcode = result?result:CURLE_SSH;
- DEBUGF(infof(data, "error = %d makes libcurl = %d\n",
- err, (int)result));
- state(conn, SSH_STOP);
- break;
- }
- }
- /* This is the last step in the SFTP connect phase. Do note that while
- we get the homedir here, we get the "workingpath" in the DO action
- since the homedir will remain the same between request but the
- working path will not. */
- DEBUGF(infof(data, "SSH CONNECT phase done\n"));
- state(conn, SSH_STOP);
- break;
-
- case SSH_SFTP_QUOTE_INIT:
-
- result = ssh_getworkingpath(conn, sshc->homedir, &sftp_scp->path);
- if(result) {
- sshc->actualcode = result;
- state(conn, SSH_STOP);
- break;
- }
-
- if(data->set.quote) {
- infof(data, "Sending quote commands\n");
- sshc->quote_item = data->set.quote;
- state(conn, SSH_SFTP_QUOTE);
- }
- else {
- state(conn, SSH_SFTP_TRANS_INIT);
- }
- break;
-
- case SSH_SFTP_POSTQUOTE_INIT:
- if(data->set.postquote) {
- infof(data, "Sending quote commands\n");
- sshc->quote_item = data->set.postquote;
- state(conn, SSH_SFTP_QUOTE);
- }
- else {
- state(conn, SSH_STOP);
- }
- break;
-
- case SSH_SFTP_QUOTE:
- /* Send any quote commands */
- {
- const char *cp;
-
- /*
- * Support some of the "FTP" commands
- */
- char *cmd = sshc->quote_item->data;
- sshc->acceptfail = FALSE;
-
- /* if a command starts with an asterisk, which a legal SFTP command never
- can, the command will be allowed to fail without it causing any
- aborts or cancels etc. It will cause libcurl to act as if the command
- is successful, whatever the server reponds. */
-
- if(cmd[0] == '*') {
- cmd++;
- sshc->acceptfail = TRUE;
- }
-
- if(curl_strequal("pwd", cmd)) {
- /* output debug output if that is requested */
- char *tmp = aprintf("257 \"%s\" is current directory.\n",
- sftp_scp->path);
- if(!tmp) {
- result = CURLE_OUT_OF_MEMORY;
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- break;
- }
- if(data->set.verbose) {
- Curl_debug(data, CURLINFO_HEADER_OUT, (char *)"PWD\n", 4, conn);
- Curl_debug(data, CURLINFO_HEADER_IN, tmp, strlen(tmp), conn);
- }
- /* this sends an FTP-like "header" to the header callback so that the
- current directory can be read very similar to how it is read when
- using ordinary FTP. */
- result = Curl_client_write(conn, CLIENTWRITE_HEADER, tmp, strlen(tmp));
- free(tmp);
- if(result) {
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = result;
- }
- else
- state(conn, SSH_SFTP_NEXT_QUOTE);
- break;
- }
- else if(cmd) {
- /*
- * the arguments following the command must be separated from the
- * command with a space so we can check for it unconditionally
- */
- cp = strchr(cmd, ' ');
- if(cp == NULL) {
- failf(data, "Syntax error in SFTP command. Supply parameter(s)!");
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
-
- /*
- * also, every command takes at least one argument so we get that
- * first argument right now
- */
- result = get_pathname(&cp, &sshc->quote_path1);
- if(result) {
- if(result == CURLE_OUT_OF_MEMORY)
- failf(data, "Out of memory");
- else
- failf(data, "Syntax error: Bad first parameter");
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = result;
- break;
- }
-
- /*
- * SFTP is a binary protocol, so we don't send text commands
- * to the server. Instead, we scan for commands used by
- * OpenSSH's sftp program and call the appropriate libssh2
- * functions.
- */
- if(curl_strnequal(cmd, "chgrp ", 6) ||
- curl_strnequal(cmd, "chmod ", 6) ||
- curl_strnequal(cmd, "chown ", 6) ) {
- /* attribute change */
-
- /* sshc->quote_path1 contains the mode to set */
- /* get the destination */
- result = get_pathname(&cp, &sshc->quote_path2);
- if(result) {
- if(result == CURLE_OUT_OF_MEMORY)
- failf(data, "Out of memory");
- else
- failf(data, "Syntax error in chgrp/chmod/chown: "
- "Bad second parameter");
- Curl_safefree(sshc->quote_path1);
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = result;
- break;
- }
- memset(&sshc->quote_attrs, 0, sizeof(LIBSSH2_SFTP_ATTRIBUTES));
- state(conn, SSH_SFTP_QUOTE_STAT);
- break;
- }
- else if(curl_strnequal(cmd, "ln ", 3) ||
- curl_strnequal(cmd, "symlink ", 8)) {
- /* symbolic linking */
- /* sshc->quote_path1 is the source */
- /* get the destination */
- result = get_pathname(&cp, &sshc->quote_path2);
- if(result) {
- if(result == CURLE_OUT_OF_MEMORY)
- failf(data, "Out of memory");
- else
- failf(data,
- "Syntax error in ln/symlink: Bad second parameter");
- Curl_safefree(sshc->quote_path1);
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = result;
- break;
- }
- state(conn, SSH_SFTP_QUOTE_SYMLINK);
- break;
- }
- else if(curl_strnequal(cmd, "mkdir ", 6)) {
- /* create dir */
- state(conn, SSH_SFTP_QUOTE_MKDIR);
- break;
- }
- else if(curl_strnequal(cmd, "rename ", 7)) {
- /* rename file */
- /* first param is the source path */
- /* second param is the dest. path */
- result = get_pathname(&cp, &sshc->quote_path2);
- if(result) {
- if(result == CURLE_OUT_OF_MEMORY)
- failf(data, "Out of memory");
- else
- failf(data, "Syntax error in rename: Bad second parameter");
- Curl_safefree(sshc->quote_path1);
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = result;
- break;
- }
- state(conn, SSH_SFTP_QUOTE_RENAME);
- break;
- }
- else if(curl_strnequal(cmd, "rmdir ", 6)) {
- /* delete dir */
- state(conn, SSH_SFTP_QUOTE_RMDIR);
- break;
- }
- else if(curl_strnequal(cmd, "rm ", 3)) {
- state(conn, SSH_SFTP_QUOTE_UNLINK);
- break;
- }
-
- failf(data, "Unknown SFTP command");
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- }
- if(!sshc->quote_item) {
- state(conn, SSH_SFTP_TRANS_INIT);
- }
- break;
-
- case SSH_SFTP_NEXT_QUOTE:
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
-
- sshc->quote_item = sshc->quote_item->next;
-
- if(sshc->quote_item) {
- state(conn, SSH_SFTP_QUOTE);
- }
- else {
- if(sshc->nextstate != SSH_NO_STATE) {
- state(conn, sshc->nextstate);
- sshc->nextstate = SSH_NO_STATE;
- }
- else {
- state(conn, SSH_SFTP_TRANS_INIT);
- }
- }
- break;
-
- case SSH_SFTP_QUOTE_STAT:
- {
- char *cmd = sshc->quote_item->data;
- sshc->acceptfail = FALSE;
-
- /* if a command starts with an asterisk, which a legal SFTP command never
- can, the command will be allowed to fail without it causing any
- aborts or cancels etc. It will cause libcurl to act as if the command
- is successful, whatever the server reponds. */
-
- if(cmd[0] == '*') {
- cmd++;
- sshc->acceptfail = TRUE;
- }
-
- if(!curl_strnequal(cmd, "chmod", 5)) {
- /* Since chown and chgrp only set owner OR group but libssh2 wants to
- * set them both at once, we need to obtain the current ownership
- * first. This takes an extra protocol round trip.
- */
- rc = libssh2_sftp_stat_ex(sshc->sftp_session, sshc->quote_path2,
- curlx_uztoui(strlen(sshc->quote_path2)),
- LIBSSH2_SFTP_STAT,
- &sshc->quote_attrs);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc != 0 && !sshc->acceptfail) { /* get those attributes */
- err = sftp_libssh2_last_error(sshc->sftp_session);
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- failf(data, "Attempt to get SFTP stats failed: %s",
- sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- }
-
- /* Now set the new attributes... */
- if(curl_strnequal(cmd, "chgrp", 5)) {
- sshc->quote_attrs.gid = strtoul(sshc->quote_path1, NULL, 10);
- sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_UIDGID;
- if(sshc->quote_attrs.gid == 0 && !ISDIGIT(sshc->quote_path1[0]) &&
- !sshc->acceptfail) {
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- failf(data, "Syntax error: chgrp gid not a number");
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- }
- else if(curl_strnequal(cmd, "chmod", 5)) {
- sshc->quote_attrs.permissions = strtoul(sshc->quote_path1, NULL, 8);
- sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_PERMISSIONS;
- /* permissions are octal */
- if(sshc->quote_attrs.permissions == 0 &&
- !ISDIGIT(sshc->quote_path1[0])) {
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- failf(data, "Syntax error: chmod permissions not a number");
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- }
- else if(curl_strnequal(cmd, "chown", 5)) {
- sshc->quote_attrs.uid = strtoul(sshc->quote_path1, NULL, 10);
- sshc->quote_attrs.flags = LIBSSH2_SFTP_ATTR_UIDGID;
- if(sshc->quote_attrs.uid == 0 && !ISDIGIT(sshc->quote_path1[0]) &&
- !sshc->acceptfail) {
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- failf(data, "Syntax error: chown uid not a number");
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- }
-
- /* Now send the completed structure... */
- state(conn, SSH_SFTP_QUOTE_SETSTAT);
- break;
- }
-
- case SSH_SFTP_QUOTE_SETSTAT:
- rc = libssh2_sftp_stat_ex(sshc->sftp_session, sshc->quote_path2,
- curlx_uztoui(strlen(sshc->quote_path2)),
- LIBSSH2_SFTP_SETSTAT,
- &sshc->quote_attrs);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc != 0 && !sshc->acceptfail) {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- failf(data, "Attempt to set SFTP stats failed: %s",
- sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- state(conn, SSH_SFTP_NEXT_QUOTE);
- break;
-
- case SSH_SFTP_QUOTE_SYMLINK:
- rc = libssh2_sftp_symlink_ex(sshc->sftp_session, sshc->quote_path1,
- curlx_uztoui(strlen(sshc->quote_path1)),
- sshc->quote_path2,
- curlx_uztoui(strlen(sshc->quote_path2)),
- LIBSSH2_SFTP_SYMLINK);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc != 0 && !sshc->acceptfail) {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- failf(data, "symlink command failed: %s",
- sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- state(conn, SSH_SFTP_NEXT_QUOTE);
- break;
-
- case SSH_SFTP_QUOTE_MKDIR:
- rc = libssh2_sftp_mkdir_ex(sshc->sftp_session, sshc->quote_path1,
- curlx_uztoui(strlen(sshc->quote_path1)),
- data->set.new_directory_perms);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc != 0 && !sshc->acceptfail) {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- Curl_safefree(sshc->quote_path1);
- failf(data, "mkdir command failed: %s", sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- state(conn, SSH_SFTP_NEXT_QUOTE);
- break;
-
- case SSH_SFTP_QUOTE_RENAME:
- rc = libssh2_sftp_rename_ex(sshc->sftp_session, sshc->quote_path1,
- curlx_uztoui(strlen(sshc->quote_path1)),
- sshc->quote_path2,
- curlx_uztoui(strlen(sshc->quote_path2)),
- LIBSSH2_SFTP_RENAME_OVERWRITE |
- LIBSSH2_SFTP_RENAME_ATOMIC |
- LIBSSH2_SFTP_RENAME_NATIVE);
-
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc != 0 && !sshc->acceptfail) {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
- failf(data, "rename command failed: %s", sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- state(conn, SSH_SFTP_NEXT_QUOTE);
- break;
-
- case SSH_SFTP_QUOTE_RMDIR:
- rc = libssh2_sftp_rmdir_ex(sshc->sftp_session, sshc->quote_path1,
- curlx_uztoui(strlen(sshc->quote_path1)));
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc != 0 && !sshc->acceptfail) {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- Curl_safefree(sshc->quote_path1);
- failf(data, "rmdir command failed: %s", sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- state(conn, SSH_SFTP_NEXT_QUOTE);
- break;
-
- case SSH_SFTP_QUOTE_UNLINK:
- rc = libssh2_sftp_unlink_ex(sshc->sftp_session, sshc->quote_path1,
- curlx_uztoui(strlen(sshc->quote_path1)));
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc != 0 && !sshc->acceptfail) {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- Curl_safefree(sshc->quote_path1);
- failf(data, "rm command failed: %s", sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- sshc->nextstate = SSH_NO_STATE;
- sshc->actualcode = CURLE_QUOTE_ERROR;
- break;
- }
- state(conn, SSH_SFTP_NEXT_QUOTE);
- break;
-
- case SSH_SFTP_TRANS_INIT:
- if(data->set.upload)
- state(conn, SSH_SFTP_UPLOAD_INIT);
- else {
- if(sftp_scp->path[strlen(sftp_scp->path)-1] == '/')
- state(conn, SSH_SFTP_READDIR_INIT);
- else
- state(conn, SSH_SFTP_DOWNLOAD_INIT);
- }
- break;
-
- case SSH_SFTP_UPLOAD_INIT:
- {
- unsigned long flags;
- /*
- * NOTE!!! libssh2 requires that the destination path is a full path
- * that includes the destination file and name OR ends in a "/"
- * If this is not done the destination file will be named the
- * same name as the last directory in the path.
- */
-
- if(data->state.resume_from != 0) {
- LIBSSH2_SFTP_ATTRIBUTES attrs;
- if(data->state.resume_from < 0) {
- rc = libssh2_sftp_stat_ex(sshc->sftp_session, sftp_scp->path,
- curlx_uztoui(strlen(sftp_scp->path)),
- LIBSSH2_SFTP_STAT, &attrs);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc) {
- data->state.resume_from = 0;
- }
- else {
- curl_off_t size = attrs.filesize;
- if(size < 0) {
- failf(data, "Bad file size (%" CURL_FORMAT_CURL_OFF_T ")", size);
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
- data->state.resume_from = attrs.filesize;
- }
- }
- }
-
- if(data->set.ftp_append)
- /* Try to open for append, but create if nonexisting */
- flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_CREAT|LIBSSH2_FXF_APPEND;
- else if(data->state.resume_from > 0)
- /* If we have restart position then open for append */
- flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_APPEND;
- else
- /* Clear file before writing (normal behaviour) */
- flags = LIBSSH2_FXF_WRITE|LIBSSH2_FXF_CREAT|LIBSSH2_FXF_TRUNC;
-
- sshc->sftp_handle =
- libssh2_sftp_open_ex(sshc->sftp_session, sftp_scp->path,
- curlx_uztoui(strlen(sftp_scp->path)),
- flags, data->set.new_file_perms,
- LIBSSH2_SFTP_OPENFILE);
-
- if(!sshc->sftp_handle) {
- rc = libssh2_session_last_errno(sshc->ssh_session);
-
- if(LIBSSH2_ERROR_EAGAIN == rc)
- break;
- else {
- if(LIBSSH2_ERROR_SFTP_PROTOCOL == rc)
- /* only when there was an SFTP protocol error can we extract
- the sftp error! */
- err = sftp_libssh2_last_error(sshc->sftp_session);
- else
- err = -1; /* not an sftp error at all */
-
- if(sshc->secondCreateDirs) {
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = err>= LIBSSH2_FX_OK?
- sftp_libssh2_error_to_CURLE(err):CURLE_SSH;
- failf(data, "Creating the dir/file failed: %s",
- sftp_libssh2_strerror(err));
- break;
- }
- else if(((err == LIBSSH2_FX_NO_SUCH_FILE) ||
- (err == LIBSSH2_FX_FAILURE) ||
- (err == LIBSSH2_FX_NO_SUCH_PATH)) &&
- (data->set.ftp_create_missing_dirs &&
- (strlen(sftp_scp->path) > 1))) {
- /* try to create the path remotely */
- sshc->secondCreateDirs = 1;
- state(conn, SSH_SFTP_CREATE_DIRS_INIT);
- break;
- }
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = err>= LIBSSH2_FX_OK?
- sftp_libssh2_error_to_CURLE(err):CURLE_SSH;
- if(!sshc->actualcode) {
- /* Sometimes, for some reason libssh2_sftp_last_error() returns
- zero even though libssh2_sftp_open() failed previously! We need
- to work around that! */
- sshc->actualcode = CURLE_SSH;
- err=-1;
- }
- failf(data, "Upload failed: %s (%d/%d)",
- err>= LIBSSH2_FX_OK?sftp_libssh2_strerror(err):"ssh error",
- err, rc);
- break;
- }
- }
-
- /* If we have a restart point then we need to seek to the correct
- position. */
- if(data->state.resume_from > 0) {
- /* Let's read off the proper amount of bytes from the input. */
- if(conn->seek_func) {
- seekerr = conn->seek_func(conn->seek_client, data->state.resume_from,
- SEEK_SET);
- }
-
- if(seekerr != CURL_SEEKFUNC_OK) {
-
- if(seekerr != CURL_SEEKFUNC_CANTSEEK) {
- failf(data, "Could not seek stream");
- return CURLE_FTP_COULDNT_USE_REST;
- }
- /* seekerr == CURL_SEEKFUNC_CANTSEEK (can't seek to offset) */
- else {
- curl_off_t passed=0;
- do {
- size_t readthisamountnow =
- (data->state.resume_from - passed > CURL_OFF_T_C(BUFSIZE)) ?
- BUFSIZE : curlx_sotouz(data->state.resume_from - passed);
-
- size_t actuallyread =
- conn->fread_func(data->state.buffer, 1, readthisamountnow,
- conn->fread_in);
-
- passed += actuallyread;
- if((actuallyread == 0) || (actuallyread > readthisamountnow)) {
- /* this checks for greater-than only to make sure that the
- CURL_READFUNC_ABORT return code still aborts */
- failf(data, "Failed to read data");
- return CURLE_FTP_COULDNT_USE_REST;
- }
- } while(passed < data->state.resume_from);
- }
- }
-
- /* now, decrease the size of the read */
- if(data->state.infilesize > 0) {
- data->state.infilesize -= data->state.resume_from;
- data->req.size = data->state.infilesize;
- Curl_pgrsSetUploadSize(data, data->state.infilesize);
- }
-
- SFTP_SEEK(sshc->sftp_handle, data->state.resume_from);
- }
- if(data->state.infilesize > 0) {
- data->req.size = data->state.infilesize;
- Curl_pgrsSetUploadSize(data, data->state.infilesize);
- }
- /* upload data */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, FIRSTSOCKET, NULL);
-
- /* not set by Curl_setup_transfer to preserve keepon bits */
- conn->sockfd = conn->writesockfd;
-
- if(result) {
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = result;
- }
- else {
- /* store this original bitmask setup to use later on if we can't
- figure out a "real" bitmask */
- sshc->orig_waitfor = data->req.keepon;
-
- /* we want to use the _sending_ function even when the socket turns
- out readable as the underlying libssh2 sftp send function will deal
- with both accordingly */
- conn->cselect_bits = CURL_CSELECT_OUT;
-
- /* since we don't really wait for anything at this point, we want the
- state machine to move on as soon as possible so we set a very short
- timeout here */
- Curl_expire(data, 1);
-
- state(conn, SSH_STOP);
- }
- break;
- }
-
- case SSH_SFTP_CREATE_DIRS_INIT:
- if(strlen(sftp_scp->path) > 1) {
- sshc->slash_pos = sftp_scp->path + 1; /* ignore the leading '/' */
- state(conn, SSH_SFTP_CREATE_DIRS);
- }
- else {
- state(conn, SSH_SFTP_UPLOAD_INIT);
- }
- break;
-
- case SSH_SFTP_CREATE_DIRS:
- if((sshc->slash_pos = strchr(sshc->slash_pos, '/')) != NULL) {
- *sshc->slash_pos = 0;
-
- infof(data, "Creating directory '%s'\n", sftp_scp->path);
- state(conn, SSH_SFTP_CREATE_DIRS_MKDIR);
- break;
- }
- else {
- state(conn, SSH_SFTP_UPLOAD_INIT);
- }
- break;
-
- case SSH_SFTP_CREATE_DIRS_MKDIR:
- /* 'mode' - parameter is preliminary - default to 0644 */
- rc = libssh2_sftp_mkdir_ex(sshc->sftp_session, sftp_scp->path,
- curlx_uztoui(strlen(sftp_scp->path)),
- data->set.new_directory_perms);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- *sshc->slash_pos = '/';
- ++sshc->slash_pos;
- if(rc == -1) {
- /*
- * Abort if failure wasn't that the dir already exists or the
- * permission was denied (creation might succeed further down the
- * path) - retry on unspecific FAILURE also
- */
- err = sftp_libssh2_last_error(sshc->sftp_session);
- if((err != LIBSSH2_FX_FILE_ALREADY_EXISTS) &&
- (err != LIBSSH2_FX_FAILURE) &&
- (err != LIBSSH2_FX_PERMISSION_DENIED)) {
- result = sftp_libssh2_error_to_CURLE(err);
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = result?result:CURLE_SSH;
- break;
- }
- }
- state(conn, SSH_SFTP_CREATE_DIRS);
- break;
-
- case SSH_SFTP_READDIR_INIT:
- Curl_pgrsSetDownloadSize(data, -1);
- if(data->set.opt_no_body) {
- state(conn, SSH_STOP);
- break;
- }
-
- /*
- * This is a directory that we are trying to get, so produce a directory
- * listing
- */
- sshc->sftp_handle = libssh2_sftp_open_ex(sshc->sftp_session,
- sftp_scp->path,
- curlx_uztoui(
- strlen(sftp_scp->path)),
- 0, 0, LIBSSH2_SFTP_OPENDIR);
- if(!sshc->sftp_handle) {
- if(libssh2_session_last_errno(sshc->ssh_session) ==
- LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- else {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- failf(data, "Could not open directory for reading: %s",
- sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- result = sftp_libssh2_error_to_CURLE(err);
- sshc->actualcode = result?result:CURLE_SSH;
- break;
- }
- }
- if((sshc->readdir_filename = malloc(PATH_MAX+1)) == NULL) {
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
- if((sshc->readdir_longentry = malloc(PATH_MAX+1)) == NULL) {
- Curl_safefree(sshc->readdir_filename);
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
- state(conn, SSH_SFTP_READDIR);
- break;
-
- case SSH_SFTP_READDIR:
- sshc->readdir_len = libssh2_sftp_readdir_ex(sshc->sftp_handle,
- sshc->readdir_filename,
- PATH_MAX,
- sshc->readdir_longentry,
- PATH_MAX,
- &sshc->readdir_attrs);
- if(sshc->readdir_len == LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- if(sshc->readdir_len > 0) {
- sshc->readdir_filename[sshc->readdir_len] = '\0';
-
- if(data->set.ftp_list_only) {
- char *tmpLine;
-
- tmpLine = aprintf("%s\n", sshc->readdir_filename);
- if(tmpLine == NULL) {
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
- result = Curl_client_write(conn, CLIENTWRITE_BODY,
- tmpLine, sshc->readdir_len+1);
- Curl_safefree(tmpLine);
-
- if(result) {
- state(conn, SSH_STOP);
- break;
- }
- /* since this counts what we send to the client, we include the
- newline in this counter */
- data->req.bytecount += sshc->readdir_len+1;
-
- /* output debug output if that is requested */
- if(data->set.verbose) {
- Curl_debug(data, CURLINFO_DATA_OUT, sshc->readdir_filename,
- sshc->readdir_len, conn);
- }
- }
- else {
- sshc->readdir_currLen = (int)strlen(sshc->readdir_longentry);
- sshc->readdir_totalLen = 80 + sshc->readdir_currLen;
- sshc->readdir_line = calloc(sshc->readdir_totalLen, 1);
- if(!sshc->readdir_line) {
- Curl_safefree(sshc->readdir_filename);
- Curl_safefree(sshc->readdir_longentry);
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
-
- memcpy(sshc->readdir_line, sshc->readdir_longentry,
- sshc->readdir_currLen);
- if((sshc->readdir_attrs.flags & LIBSSH2_SFTP_ATTR_PERMISSIONS) &&
- ((sshc->readdir_attrs.permissions & LIBSSH2_SFTP_S_IFMT) ==
- LIBSSH2_SFTP_S_IFLNK)) {
- sshc->readdir_linkPath = malloc(PATH_MAX + 1);
- if(sshc->readdir_linkPath == NULL) {
- Curl_safefree(sshc->readdir_filename);
- Curl_safefree(sshc->readdir_longentry);
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
-
- snprintf(sshc->readdir_linkPath, PATH_MAX, "%s%s", sftp_scp->path,
- sshc->readdir_filename);
- state(conn, SSH_SFTP_READDIR_LINK);
- break;
- }
- state(conn, SSH_SFTP_READDIR_BOTTOM);
- break;
- }
- }
- else if(sshc->readdir_len == 0) {
- Curl_safefree(sshc->readdir_filename);
- Curl_safefree(sshc->readdir_longentry);
- state(conn, SSH_SFTP_READDIR_DONE);
- break;
- }
- else if(sshc->readdir_len <= 0) {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- result = sftp_libssh2_error_to_CURLE(err);
- sshc->actualcode = result?result:CURLE_SSH;
- failf(data, "Could not open remote file for reading: %s :: %d",
- sftp_libssh2_strerror(err),
- libssh2_session_last_errno(sshc->ssh_session));
- Curl_safefree(sshc->readdir_filename);
- Curl_safefree(sshc->readdir_longentry);
- state(conn, SSH_SFTP_CLOSE);
- break;
- }
- break;
-
- case SSH_SFTP_READDIR_LINK:
- sshc->readdir_len =
- libssh2_sftp_symlink_ex(sshc->sftp_session,
- sshc->readdir_linkPath,
- curlx_uztoui(strlen(sshc->readdir_linkPath)),
- sshc->readdir_filename,
- PATH_MAX, LIBSSH2_SFTP_READLINK);
- if(sshc->readdir_len == LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- Curl_safefree(sshc->readdir_linkPath);
-
- /* get room for the filename and extra output */
- sshc->readdir_totalLen += 4 + sshc->readdir_len;
- new_readdir_line = realloc(sshc->readdir_line, sshc->readdir_totalLen);
- if(!new_readdir_line) {
- Curl_safefree(sshc->readdir_line);
- Curl_safefree(sshc->readdir_filename);
- Curl_safefree(sshc->readdir_longentry);
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = CURLE_OUT_OF_MEMORY;
- break;
- }
- sshc->readdir_line = new_readdir_line;
-
- sshc->readdir_currLen += snprintf(sshc->readdir_line +
- sshc->readdir_currLen,
- sshc->readdir_totalLen -
- sshc->readdir_currLen,
- " -> %s",
- sshc->readdir_filename);
-
- state(conn, SSH_SFTP_READDIR_BOTTOM);
- break;
-
- case SSH_SFTP_READDIR_BOTTOM:
- sshc->readdir_currLen += snprintf(sshc->readdir_line +
- sshc->readdir_currLen,
- sshc->readdir_totalLen -
- sshc->readdir_currLen, "\n");
- result = Curl_client_write(conn, CLIENTWRITE_BODY,
- sshc->readdir_line,
- sshc->readdir_currLen);
-
- if(result == CURLE_OK) {
-
- /* output debug output if that is requested */
- if(data->set.verbose) {
- Curl_debug(data, CURLINFO_DATA_OUT, sshc->readdir_line,
- sshc->readdir_currLen, conn);
- }
- data->req.bytecount += sshc->readdir_currLen;
- }
- Curl_safefree(sshc->readdir_line);
- if(result) {
- state(conn, SSH_STOP);
- }
- else
- state(conn, SSH_SFTP_READDIR);
- break;
-
- case SSH_SFTP_READDIR_DONE:
- if(libssh2_sftp_closedir(sshc->sftp_handle) ==
- LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- sshc->sftp_handle = NULL;
- Curl_safefree(sshc->readdir_filename);
- Curl_safefree(sshc->readdir_longentry);
-
- /* no data to transfer */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- state(conn, SSH_STOP);
- break;
-
- case SSH_SFTP_DOWNLOAD_INIT:
- /*
- * Work on getting the specified file
- */
- sshc->sftp_handle =
- libssh2_sftp_open_ex(sshc->sftp_session, sftp_scp->path,
- curlx_uztoui(strlen(sftp_scp->path)),
- LIBSSH2_FXF_READ, data->set.new_file_perms,
- LIBSSH2_SFTP_OPENFILE);
- if(!sshc->sftp_handle) {
- if(libssh2_session_last_errno(sshc->ssh_session) ==
- LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- else {
- err = sftp_libssh2_last_error(sshc->sftp_session);
- failf(data, "Could not open remote file for reading: %s",
- sftp_libssh2_strerror(err));
- state(conn, SSH_SFTP_CLOSE);
- result = sftp_libssh2_error_to_CURLE(err);
- sshc->actualcode = result?result:CURLE_SSH;
- break;
- }
- }
- state(conn, SSH_SFTP_DOWNLOAD_STAT);
- break;
-
- case SSH_SFTP_DOWNLOAD_STAT:
- {
- LIBSSH2_SFTP_ATTRIBUTES attrs;
-
- rc = libssh2_sftp_stat_ex(sshc->sftp_session, sftp_scp->path,
- curlx_uztoui(strlen(sftp_scp->path)),
- LIBSSH2_SFTP_STAT, &attrs);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc) {
- /*
- * libssh2_sftp_open() didn't return an error, so maybe the server
- * just doesn't support stat()
- */
- data->req.size = -1;
- data->req.maxdownload = -1;
- Curl_pgrsSetDownloadSize(data, -1);
- }
- else {
- curl_off_t size = attrs.filesize;
-
- if(size < 0) {
- failf(data, "Bad file size (%" CURL_FORMAT_CURL_OFF_T ")", size);
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
- if(conn->data->state.use_range) {
- curl_off_t from, to;
- char *ptr;
- char *ptr2;
-
- from=curlx_strtoofft(conn->data->state.range, &ptr, 0);
- while(*ptr && (ISSPACE(*ptr) || (*ptr=='-')))
- ptr++;
- to=curlx_strtoofft(ptr, &ptr2, 0);
- if((ptr == ptr2) /* no "to" value given */
- || (to >= size)) {
- to = size - 1;
- }
- if(from < 0) {
- /* from is relative to end of file */
- from += size;
- }
- if(from >= size) {
- failf(data, "Offset (%"
- CURL_FORMAT_CURL_OFF_T ") was beyond file size (%"
- CURL_FORMAT_CURL_OFF_T ")", from, attrs.filesize);
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
- if(from > to) {
- from = to;
- size = 0;
- }
- else {
- size = to - from + 1;
- }
-
- SFTP_SEEK(conn->proto.sshc.sftp_handle, from);
- }
- data->req.size = size;
- data->req.maxdownload = size;
- Curl_pgrsSetDownloadSize(data, size);
- }
-
- /* We can resume if we can seek to the resume position */
- if(data->state.resume_from) {
- if(data->state.resume_from < 0) {
- /* We're supposed to download the last abs(from) bytes */
- if((curl_off_t)attrs.filesize < -data->state.resume_from) {
- failf(data, "Offset (%"
- CURL_FORMAT_CURL_OFF_T ") was beyond file size (%"
- CURL_FORMAT_CURL_OFF_T ")",
- data->state.resume_from, attrs.filesize);
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
- /* download from where? */
- data->state.resume_from += attrs.filesize;
- }
- else {
- if((curl_off_t)attrs.filesize < data->state.resume_from) {
- failf(data, "Offset (%" CURL_FORMAT_CURL_OFF_T
- ") was beyond file size (%" CURL_FORMAT_CURL_OFF_T ")",
- data->state.resume_from, attrs.filesize);
- return CURLE_BAD_DOWNLOAD_RESUME;
- }
- }
- /* Does a completed file need to be seeked and started or closed ? */
- /* Now store the number of bytes we are expected to download */
- data->req.size = attrs.filesize - data->state.resume_from;
- data->req.maxdownload = attrs.filesize - data->state.resume_from;
- Curl_pgrsSetDownloadSize(data,
- attrs.filesize - data->state.resume_from);
- SFTP_SEEK(sshc->sftp_handle, data->state.resume_from);
- }
- }
-
- /* Setup the actual download */
- if(data->req.size == 0) {
- /* no data to transfer */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- infof(data, "File already completely downloaded\n");
- state(conn, SSH_STOP);
- break;
- }
- else {
- Curl_setup_transfer(conn, FIRSTSOCKET, data->req.size,
- FALSE, NULL, -1, NULL);
-
- /* not set by Curl_setup_transfer to preserve keepon bits */
- conn->writesockfd = conn->sockfd;
-
- /* we want to use the _receiving_ function even when the socket turns
- out writableable as the underlying libssh2 recv function will deal
- with both accordingly */
- conn->cselect_bits = CURL_CSELECT_IN;
- }
- if(result) {
- /* this should never occur; the close state should be entered
- at the time the error occurs */
- state(conn, SSH_SFTP_CLOSE);
- sshc->actualcode = result;
- }
- else {
- state(conn, SSH_STOP);
- }
- break;
-
- case SSH_SFTP_CLOSE:
- if(sshc->sftp_handle) {
- rc = libssh2_sftp_close(sshc->sftp_handle);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc < 0) {
- infof(data, "Failed to close libssh2 file\n");
- }
- sshc->sftp_handle = NULL;
- }
- if(sftp_scp)
- Curl_safefree(sftp_scp->path);
-
- DEBUGF(infof(data, "SFTP DONE done\n"));
-
- /* Check if nextstate is set and move .nextstate could be POSTQUOTE_INIT
- After nextstate is executed,the control should come back to
- SSH_SFTP_CLOSE to pass the correct result back */
- if(sshc->nextstate != SSH_NO_STATE &&
- sshc->nextstate != SSH_SFTP_CLOSE) {
- state(conn, sshc->nextstate);
- sshc->nextstate = SSH_SFTP_CLOSE;
- }
- else {
- state(conn, SSH_STOP);
- result = sshc->actualcode;
- }
- break;
-
- case SSH_SFTP_SHUTDOWN:
- /* during times we get here due to a broken transfer and then the
- sftp_handle might not have been taken down so make sure that is done
- before we proceed */
-
- if(sshc->sftp_handle) {
- rc = libssh2_sftp_close(sshc->sftp_handle);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc < 0) {
- infof(data, "Failed to close libssh2 file\n");
- }
- sshc->sftp_handle = NULL;
- }
- if(sshc->sftp_session) {
- rc = libssh2_sftp_shutdown(sshc->sftp_session);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc < 0) {
- infof(data, "Failed to stop libssh2 sftp subsystem\n");
- }
- sshc->sftp_session = NULL;
- }
-
- Curl_safefree(sshc->homedir);
- conn->data->state.most_recent_ftp_entrypath = NULL;
-
- state(conn, SSH_SESSION_DISCONNECT);
- break;
-
- case SSH_SCP_TRANS_INIT:
- result = ssh_getworkingpath(conn, sshc->homedir, &sftp_scp->path);
- if(result) {
- sshc->actualcode = result;
- state(conn, SSH_STOP);
- break;
- }
-
- if(data->set.upload) {
- if(data->state.infilesize < 0) {
- failf(data, "SCP requires a known file size for upload");
- sshc->actualcode = CURLE_UPLOAD_FAILED;
- state(conn, SSH_SCP_CHANNEL_FREE);
- break;
- }
- state(conn, SSH_SCP_UPLOAD_INIT);
- }
- else {
- state(conn, SSH_SCP_DOWNLOAD_INIT);
- }
- break;
-
- case SSH_SCP_UPLOAD_INIT:
- /*
- * libssh2 requires that the destination path is a full path that
- * includes the destination file and name OR ends in a "/" . If this is
- * not done the destination file will be named the same name as the last
- * directory in the path.
- */
- sshc->ssh_channel =
- SCP_SEND(sshc->ssh_session, sftp_scp->path, data->set.new_file_perms,
- data->state.infilesize);
- if(!sshc->ssh_channel) {
- if(libssh2_session_last_errno(sshc->ssh_session) ==
- LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- else {
- int ssh_err;
- char *err_msg;
-
- ssh_err = (int)(libssh2_session_last_error(sshc->ssh_session,
- &err_msg, NULL, 0));
- failf(conn->data, "%s", err_msg);
- state(conn, SSH_SCP_CHANNEL_FREE);
- sshc->actualcode = libssh2_session_error_to_CURLE(ssh_err);
- break;
- }
- }
-
- /* upload data */
- Curl_setup_transfer(conn, -1, data->req.size, FALSE, NULL,
- FIRSTSOCKET, NULL);
-
- /* not set by Curl_setup_transfer to preserve keepon bits */
- conn->sockfd = conn->writesockfd;
-
- if(result) {
- state(conn, SSH_SCP_CHANNEL_FREE);
- sshc->actualcode = result;
- }
- else {
- /* store this original bitmask setup to use later on if we can't
- figure out a "real" bitmask */
- sshc->orig_waitfor = data->req.keepon;
-
- /* we want to use the _sending_ function even when the socket turns
- out readable as the underlying libssh2 scp send function will deal
- with both accordingly */
- conn->cselect_bits = CURL_CSELECT_OUT;
-
- state(conn, SSH_STOP);
- }
- break;
-
- case SSH_SCP_DOWNLOAD_INIT:
- {
- /*
- * We must check the remote file; if it is a directory no values will
- * be set in sb
- */
- struct stat sb;
- curl_off_t bytecount;
-
- /* clear the struct scp recv will fill in */
- memset(&sb, 0, sizeof(struct stat));
-
- /* get a fresh new channel from the ssh layer */
- sshc->ssh_channel = libssh2_scp_recv(sshc->ssh_session,
- sftp_scp->path, &sb);
- if(!sshc->ssh_channel) {
- if(libssh2_session_last_errno(sshc->ssh_session) ==
- LIBSSH2_ERROR_EAGAIN) {
- rc = LIBSSH2_ERROR_EAGAIN;
- break;
- }
- else {
- int ssh_err;
- char *err_msg;
-
- ssh_err = (int)(libssh2_session_last_error(sshc->ssh_session,
- &err_msg, NULL, 0));
- failf(conn->data, "%s", err_msg);
- state(conn, SSH_SCP_CHANNEL_FREE);
- sshc->actualcode = libssh2_session_error_to_CURLE(ssh_err);
- break;
- }
- }
-
- /* download data */
- bytecount = (curl_off_t)sb.st_size;
- data->req.maxdownload = (curl_off_t)sb.st_size;
- Curl_setup_transfer(conn, FIRSTSOCKET, bytecount, FALSE, NULL, -1, NULL);
-
- /* not set by Curl_setup_transfer to preserve keepon bits */
- conn->writesockfd = conn->sockfd;
-
- /* we want to use the _receiving_ function even when the socket turns
- out writableable as the underlying libssh2 recv function will deal
- with both accordingly */
- conn->cselect_bits = CURL_CSELECT_IN;
-
- if(result) {
- state(conn, SSH_SCP_CHANNEL_FREE);
- sshc->actualcode = result;
- }
- else
- state(conn, SSH_STOP);
- }
- break;
-
- case SSH_SCP_DONE:
- if(data->set.upload)
- state(conn, SSH_SCP_SEND_EOF);
- else
- state(conn, SSH_SCP_CHANNEL_FREE);
- break;
-
- case SSH_SCP_SEND_EOF:
- if(sshc->ssh_channel) {
- rc = libssh2_channel_send_eof(sshc->ssh_channel);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc) {
- infof(data, "Failed to send libssh2 channel EOF\n");
- }
- }
- state(conn, SSH_SCP_WAIT_EOF);
- break;
-
- case SSH_SCP_WAIT_EOF:
- if(sshc->ssh_channel) {
- rc = libssh2_channel_wait_eof(sshc->ssh_channel);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc) {
- infof(data, "Failed to get channel EOF: %d\n", rc);
- }
- }
- state(conn, SSH_SCP_WAIT_CLOSE);
- break;
-
- case SSH_SCP_WAIT_CLOSE:
- if(sshc->ssh_channel) {
- rc = libssh2_channel_wait_closed(sshc->ssh_channel);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc) {
- infof(data, "Channel failed to close: %d\n", rc);
- }
- }
- state(conn, SSH_SCP_CHANNEL_FREE);
- break;
-
- case SSH_SCP_CHANNEL_FREE:
- if(sshc->ssh_channel) {
- rc = libssh2_channel_free(sshc->ssh_channel);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc < 0) {
- infof(data, "Failed to free libssh2 scp subsystem\n");
- }
- sshc->ssh_channel = NULL;
- }
- DEBUGF(infof(data, "SCP DONE phase complete\n"));
-#if 0 /* PREV */
- state(conn, SSH_SESSION_DISCONNECT);
-#endif
- state(conn, SSH_STOP);
- result = sshc->actualcode;
- break;
-
- case SSH_SESSION_DISCONNECT:
- /* during weird times when we've been prematurely aborted, the channel
- is still alive when we reach this state and we MUST kill the channel
- properly first */
- if(sshc->ssh_channel) {
- rc = libssh2_channel_free(sshc->ssh_channel);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc < 0) {
- infof(data, "Failed to free libssh2 scp subsystem\n");
- }
- sshc->ssh_channel = NULL;
- }
-
- if(sshc->ssh_session) {
- rc = libssh2_session_disconnect(sshc->ssh_session, "Shutdown");
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc < 0) {
- infof(data, "Failed to disconnect libssh2 session\n");
- }
- }
-
- Curl_safefree(sshc->homedir);
- conn->data->state.most_recent_ftp_entrypath = NULL;
-
- state(conn, SSH_SESSION_FREE);
- break;
-
- case SSH_SESSION_FREE:
-#ifdef HAVE_LIBSSH2_KNOWNHOST_API
- if(sshc->kh) {
- libssh2_knownhost_free(sshc->kh);
- sshc->kh = NULL;
- }
-#endif
-
-#ifdef HAVE_LIBSSH2_AGENT_API
- if(sshc->ssh_agent) {
- rc = libssh2_agent_disconnect(sshc->ssh_agent);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc < 0) {
- infof(data, "Failed to disconnect from libssh2 agent\n");
- }
- libssh2_agent_free (sshc->ssh_agent);
- sshc->ssh_agent = NULL;
-
- /* NB: there is no need to free identities, they are part of internal
- agent stuff */
- sshc->sshagent_identity = NULL;
- sshc->sshagent_prev_identity = NULL;
- }
-#endif
-
- if(sshc->ssh_session) {
- rc = libssh2_session_free(sshc->ssh_session);
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- break;
- }
- else if(rc < 0) {
- infof(data, "Failed to free libssh2 session\n");
- }
- sshc->ssh_session = NULL;
- }
-
- /* worst-case scenario cleanup */
-
- DEBUGASSERT(sshc->ssh_session == NULL);
- DEBUGASSERT(sshc->ssh_channel == NULL);
- DEBUGASSERT(sshc->sftp_session == NULL);
- DEBUGASSERT(sshc->sftp_handle == NULL);
-#ifdef HAVE_LIBSSH2_KNOWNHOST_API
- DEBUGASSERT(sshc->kh == NULL);
-#endif
-#ifdef HAVE_LIBSSH2_AGENT_API
- DEBUGASSERT(sshc->ssh_agent == NULL);
-#endif
-
- Curl_safefree(sshc->rsa_pub);
- Curl_safefree(sshc->rsa);
-
- Curl_safefree(sshc->quote_path1);
- Curl_safefree(sshc->quote_path2);
-
- Curl_safefree(sshc->homedir);
-
- Curl_safefree(sshc->readdir_filename);
- Curl_safefree(sshc->readdir_longentry);
- Curl_safefree(sshc->readdir_line);
- Curl_safefree(sshc->readdir_linkPath);
-
- /* the code we are about to return */
- result = sshc->actualcode;
-
- memset(sshc, 0, sizeof(struct ssh_conn));
-
- connclose(conn, "SSH session free");
- sshc->state = SSH_SESSION_FREE; /* current */
- sshc->nextstate = SSH_NO_STATE;
- state(conn, SSH_STOP);
- break;
-
- case SSH_QUIT:
- /* fallthrough, just stop! */
- default:
- /* internal error */
- sshc->nextstate = SSH_NO_STATE;
- state(conn, SSH_STOP);
- break;
- }
-
- } while(!rc && (sshc->state != SSH_STOP));
-
- if(rc == LIBSSH2_ERROR_EAGAIN) {
- /* we would block, we need to wait for the socket to be ready (in the
- right direction too)! */
- *block = TRUE;
- }
-
- return result;
-}
-
-/* called by the multi interface to figure out what socket(s) to wait for and
- for what actions in the DO_DONE, PERFORM and WAITPERFORM states */
-static int ssh_perform_getsock(const struct connectdata *conn,
- curl_socket_t *sock, /* points to numsocks
- number of sockets */
- int numsocks)
-{
-#ifdef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION
- int bitmap = GETSOCK_BLANK;
- (void)numsocks;
-
- sock[0] = conn->sock[FIRSTSOCKET];
-
- if(conn->waitfor & KEEP_RECV)
- bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);
-
- if(conn->waitfor & KEEP_SEND)
- bitmap |= GETSOCK_WRITESOCK(FIRSTSOCKET);
-
- return bitmap;
-#else
- /* if we don't know the direction we can use the generic *_getsock()
- function even for the protocol_connect and doing states */
- return Curl_single_getsock(conn, sock, numsocks);
-#endif
-}
-
-/* Generic function called by the multi interface to figure out what socket(s)
- to wait for and for what actions during the DOING and PROTOCONNECT states*/
-static int ssh_getsock(struct connectdata *conn,
- curl_socket_t *sock, /* points to numsocks number
- of sockets */
- int numsocks)
-{
-#ifndef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION
- (void)conn;
- (void)sock;
- (void)numsocks;
- /* if we don't know any direction we can just play along as we used to and
- not provide any sensible info */
- return GETSOCK_BLANK;
-#else
- /* if we know the direction we can use the generic *_getsock() function even
- for the protocol_connect and doing states */
- return ssh_perform_getsock(conn, sock, numsocks);
-#endif
-}
-
-#ifdef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION
-/*
- * When one of the libssh2 functions has returned LIBSSH2_ERROR_EAGAIN this
- * function is used to figure out in what direction and stores this info so
- * that the multi interface can take advantage of it. Make sure to call this
- * function in all cases so that when it _doesn't_ return EAGAIN we can
- * restore the default wait bits.
- */
-static void ssh_block2waitfor(struct connectdata *conn, bool block)
-{
- struct ssh_conn *sshc = &conn->proto.sshc;
- int dir;
- if(block && (dir = libssh2_session_block_directions(sshc->ssh_session))) {
- /* translate the libssh2 define bits into our own bit defines */
- conn->waitfor = ((dir&LIBSSH2_SESSION_BLOCK_INBOUND)?KEEP_RECV:0) |
- ((dir&LIBSSH2_SESSION_BLOCK_OUTBOUND)?KEEP_SEND:0);
- }
- else
- /* It didn't block or libssh2 didn't reveal in which direction, put back
- the original set */
- conn->waitfor = sshc->orig_waitfor;
-}
-#else
- /* no libssh2 directional support so we simply don't know */
-#define ssh_block2waitfor(x,y) Curl_nop_stmt
-#endif
-
-/* called repeatedly until done from multi.c */
-static CURLcode ssh_multi_statemach(struct connectdata *conn, bool *done)
-{
- struct ssh_conn *sshc = &conn->proto.sshc;
- CURLcode result = CURLE_OK;
- bool block; /* we store the status and use that to provide a ssh_getsock()
- implementation */
-
- result = ssh_statemach_act(conn, &block);
- *done = (sshc->state == SSH_STOP) ? TRUE : FALSE;
- ssh_block2waitfor(conn, block);
-
- return result;
-}
-
-static CURLcode ssh_block_statemach(struct connectdata *conn,
- bool duringconnect)
-{
- struct ssh_conn *sshc = &conn->proto.sshc;
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- while((sshc->state != SSH_STOP) && !result) {
- bool block;
- long left;
-
- result = ssh_statemach_act(conn, &block);
- if(result)
- break;
-
- if(Curl_pgrsUpdate(conn))
- return CURLE_ABORTED_BY_CALLBACK;
- else {
- struct timeval now = Curl_tvnow();
- result = Curl_speedcheck(data, now);
- if(result)
- break;
- }
-
- left = Curl_timeleft(data, NULL, duringconnect);
- if(left < 0) {
- failf(data, "Operation timed out");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
-#ifdef HAVE_LIBSSH2_SESSION_BLOCK_DIRECTION
- if((CURLE_OK == result) && block) {
- int dir = libssh2_session_block_directions(sshc->ssh_session);
- curl_socket_t sock = conn->sock[FIRSTSOCKET];
- curl_socket_t fd_read = CURL_SOCKET_BAD;
- curl_socket_t fd_write = CURL_SOCKET_BAD;
- if(LIBSSH2_SESSION_BLOCK_INBOUND & dir)
- fd_read = sock;
- if(LIBSSH2_SESSION_BLOCK_OUTBOUND & dir)
- fd_write = sock;
- /* wait for the socket to become ready */
- Curl_socket_ready(fd_read, fd_write,
- left>1000?1000:left); /* ignore result */
- }
-#endif
-
- }
-
- return result;
-}
-
-/*
- * SSH setup and connection
- */
-static CURLcode ssh_setup_connection(struct connectdata *conn)
-{
- struct SSHPROTO *ssh;
-
- conn->data->req.protop = ssh = calloc(1, sizeof(struct SSHPROTO));
- if(!ssh)
- return CURLE_OUT_OF_MEMORY;
-
- return CURLE_OK;
-}
-
-static Curl_recv scp_recv, sftp_recv;
-static Curl_send scp_send, sftp_send;
-
-/*
- * Curl_ssh_connect() gets called from Curl_protocol_connect() to allow us to
- * do protocol-specific actions at connect-time.
- */
-static CURLcode ssh_connect(struct connectdata *conn, bool *done)
-{
-#ifdef CURL_LIBSSH2_DEBUG
- curl_socket_t sock;
-#endif
- struct ssh_conn *ssh;
- CURLcode result;
- struct SessionHandle *data = conn->data;
-
- /* initialize per-handle data if not already */
- if(!data->req.protop)
- ssh_setup_connection(conn);
-
- /* We default to persistent connections. We set this already in this connect
- function to make the re-use checks properly be able to check this bit. */
- connkeep(conn, "SSH default");
-
- if(conn->handler->protocol & CURLPROTO_SCP) {
- conn->recv[FIRSTSOCKET] = scp_recv;
- conn->send[FIRSTSOCKET] = scp_send;
- }
- else {
- conn->recv[FIRSTSOCKET] = sftp_recv;
- conn->send[FIRSTSOCKET] = sftp_send;
- }
- ssh = &conn->proto.sshc;
-
-#ifdef CURL_LIBSSH2_DEBUG
- if(conn->user) {
- infof(data, "User: %s\n", conn->user);
- }
- if(conn->passwd) {
- infof(data, "Password: %s\n", conn->passwd);
- }
- sock = conn->sock[FIRSTSOCKET];
-#endif /* CURL_LIBSSH2_DEBUG */
-
- ssh->ssh_session = libssh2_session_init_ex(my_libssh2_malloc,
- my_libssh2_free,
- my_libssh2_realloc, conn);
- if(ssh->ssh_session == NULL) {
- failf(data, "Failure initialising ssh session");
- return CURLE_FAILED_INIT;
- }
-
-#ifdef HAVE_LIBSSH2_KNOWNHOST_API
- if(data->set.str[STRING_SSH_KNOWNHOSTS]) {
- int rc;
- ssh->kh = libssh2_knownhost_init(ssh->ssh_session);
- if(!ssh->kh) {
- /* eeek. TODO: free the ssh_session! */
- return CURLE_FAILED_INIT;
- }
-
- /* read all known hosts from there */
- rc = libssh2_knownhost_readfile(ssh->kh,
- data->set.str[STRING_SSH_KNOWNHOSTS],
- LIBSSH2_KNOWNHOST_FILE_OPENSSH);
- if(rc < 0)
- infof(data, "Failed to read known hosts from %s\n",
- data->set.str[STRING_SSH_KNOWNHOSTS]);
- }
-#endif /* HAVE_LIBSSH2_KNOWNHOST_API */
-
-#ifdef CURL_LIBSSH2_DEBUG
- libssh2_trace(ssh->ssh_session, ~0);
- infof(data, "SSH socket: %d\n", (int)sock);
-#endif /* CURL_LIBSSH2_DEBUG */
-
- state(conn, SSH_INIT);
-
- result = ssh_multi_statemach(conn, done);
-
- return result;
-}
-
-/*
- ***********************************************************************
- *
- * scp_perform()
- *
- * This is the actual DO function for SCP. Get a file according to
- * the options previously setup.
- */
-
-static
-CURLcode scp_perform(struct connectdata *conn,
- bool *connected,
- bool *dophase_done)
-{
- CURLcode result = CURLE_OK;
-
- DEBUGF(infof(conn->data, "DO phase starts\n"));
-
- *dophase_done = FALSE; /* not done yet */
-
- /* start the first command in the DO phase */
- state(conn, SSH_SCP_TRANS_INIT);
-
- /* run the state-machine */
- result = ssh_multi_statemach(conn, dophase_done);
-
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
-
- if(*dophase_done) {
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
-
- return result;
-}
-
-/* called from multi.c while DOing */
-static CURLcode scp_doing(struct connectdata *conn,
- bool *dophase_done)
-{
- CURLcode result;
- result = ssh_multi_statemach(conn, dophase_done);
-
- if(*dophase_done) {
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
- return result;
-}
-
-/*
- * The DO function is generic for both protocols. There was previously two
- * separate ones but this way means less duplicated code.
- */
-
-static CURLcode ssh_do(struct connectdata *conn, bool *done)
-{
- CURLcode res;
- bool connected = 0;
- struct SessionHandle *data = conn->data;
- struct ssh_conn *sshc = &conn->proto.sshc;
-
- *done = FALSE; /* default to false */
-
- data->req.size = -1; /* make sure this is unknown at this point */
-
- sshc->actualcode = CURLE_OK; /* reset error code */
- sshc->secondCreateDirs =0; /* reset the create dir attempt state
- variable */
-
- Curl_pgrsSetUploadCounter(data, 0);
- Curl_pgrsSetDownloadCounter(data, 0);
- Curl_pgrsSetUploadSize(data, -1);
- Curl_pgrsSetDownloadSize(data, -1);
-
- if(conn->handler->protocol & CURLPROTO_SCP)
- res = scp_perform(conn, &connected, done);
- else
- res = sftp_perform(conn, &connected, done);
-
- return res;
-}
-
-/* BLOCKING, but the function is using the state machine so the only reason
- this is still blocking is that the multi interface code has no support for
- disconnecting operations that takes a while */
-static CURLcode scp_disconnect(struct connectdata *conn, bool dead_connection)
-{
- CURLcode result = CURLE_OK;
- struct ssh_conn *ssh = &conn->proto.sshc;
- (void) dead_connection;
-
- Curl_safefree(conn->data->req.protop);
-
- if(ssh->ssh_session) {
- /* only if there's a session still around to use! */
-
- state(conn, SSH_SESSION_DISCONNECT);
-
- result = ssh_block_statemach(conn, FALSE);
- }
-
- return result;
-}
-
-/* generic done function for both SCP and SFTP called from their specific
- done functions */
-static CURLcode ssh_done(struct connectdata *conn, CURLcode status)
-{
- CURLcode result = CURLE_OK;
- struct SSHPROTO *sftp_scp = conn->data->req.protop;
-
- if(status == CURLE_OK) {
- /* run the state-machine
-
- TODO: when the multi interface is used, this _really_ should be using
- the ssh_multi_statemach function but we have no general support for
- non-blocking DONE operations, not in the multi state machine and with
- Curl_done() invokes on several places in the code!
- */
- result = ssh_block_statemach(conn, FALSE);
- }
- else
- result = status;
-
- if(sftp_scp)
- Curl_safefree(sftp_scp->path);
- if(Curl_pgrsDone(conn))
- return CURLE_ABORTED_BY_CALLBACK;
-
- conn->data->req.keepon = 0; /* clear all bits */
- return result;
-}
-
-
-static CURLcode scp_done(struct connectdata *conn, CURLcode status,
- bool premature)
-{
- (void)premature; /* not used */
-
- if(status == CURLE_OK)
- state(conn, SSH_SCP_DONE);
-
- return ssh_done(conn, status);
-
-}
-
-/* return number of received (decrypted) bytes */
-static ssize_t scp_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len, CURLcode *err)
-{
- ssize_t nwrite;
- (void)sockindex; /* we only support SCP on the fixed known primary socket */
-
- /* libssh2_channel_write() returns int! */
- nwrite = (ssize_t)
- libssh2_channel_write(conn->proto.sshc.ssh_channel, mem, len);
-
- ssh_block2waitfor(conn, (nwrite == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE);
-
- if(nwrite == LIBSSH2_ERROR_EAGAIN) {
- *err = CURLE_AGAIN;
- nwrite = 0;
- }
- else if(nwrite < LIBSSH2_ERROR_NONE) {
- *err = libssh2_session_error_to_CURLE((int)nwrite);
- nwrite = -1;
- }
-
- return nwrite;
-}
-
-/*
- * If the read would block (EWOULDBLOCK) we return -1. Otherwise we return
- * a regular CURLcode value.
- */
-static ssize_t scp_recv(struct connectdata *conn, int sockindex,
- char *mem, size_t len, CURLcode *err)
-{
- ssize_t nread;
- (void)sockindex; /* we only support SCP on the fixed known primary socket */
-
- /* libssh2_channel_read() returns int */
- nread = (ssize_t)
- libssh2_channel_read(conn->proto.sshc.ssh_channel, mem, len);
-
- ssh_block2waitfor(conn, (nread == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE);
- if(nread == LIBSSH2_ERROR_EAGAIN) {
- *err = CURLE_AGAIN;
- nread = -1;
- }
-
- return nread;
-}
-
-/*
- * =============== SFTP ===============
- */
-
-/*
- ***********************************************************************
- *
- * sftp_perform()
- *
- * This is the actual DO function for SFTP. Get a file/directory according to
- * the options previously setup.
- */
-
-static
-CURLcode sftp_perform(struct connectdata *conn,
- bool *connected,
- bool *dophase_done)
-{
- CURLcode result = CURLE_OK;
-
- DEBUGF(infof(conn->data, "DO phase starts\n"));
-
- *dophase_done = FALSE; /* not done yet */
-
- /* start the first command in the DO phase */
- state(conn, SSH_SFTP_QUOTE_INIT);
-
- /* run the state-machine */
- result = ssh_multi_statemach(conn, dophase_done);
-
- *connected = conn->bits.tcpconnect[FIRSTSOCKET];
-
- if(*dophase_done) {
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
-
- return result;
-}
-
-/* called from multi.c while DOing */
-static CURLcode sftp_doing(struct connectdata *conn,
- bool *dophase_done)
-{
- CURLcode result;
- result = ssh_multi_statemach(conn, dophase_done);
-
- if(*dophase_done) {
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
- return result;
-}
-
-/* BLOCKING, but the function is using the state machine so the only reason
- this is still blocking is that the multi interface code has no support for
- disconnecting operations that takes a while */
-static CURLcode sftp_disconnect(struct connectdata *conn, bool dead_connection)
-{
- CURLcode result = CURLE_OK;
- (void) dead_connection;
-
- DEBUGF(infof(conn->data, "SSH DISCONNECT starts now\n"));
-
- Curl_safefree(conn->data->req.protop);
-
- if(conn->proto.sshc.ssh_session) {
- /* only if there's a session still around to use! */
- state(conn, SSH_SFTP_SHUTDOWN);
- result = ssh_block_statemach(conn, FALSE);
- }
-
- DEBUGF(infof(conn->data, "SSH DISCONNECT is done\n"));
-
- return result;
-
-}
-
-static CURLcode sftp_done(struct connectdata *conn, CURLcode status,
- bool premature)
-{
- struct ssh_conn *sshc = &conn->proto.sshc;
-
- if(status == CURLE_OK) {
- /* Post quote commands are executed after the SFTP_CLOSE state to avoid
- errors that could happen due to open file handles during POSTQUOTE
- operation */
- if(!status && !premature && conn->data->set.postquote) {
- sshc->nextstate = SSH_SFTP_POSTQUOTE_INIT;
- state(conn, SSH_SFTP_CLOSE);
- }
- else
- state(conn, SSH_SFTP_CLOSE);
- }
- return ssh_done(conn, status);
-}
-
-/* return number of sent bytes */
-static ssize_t sftp_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len, CURLcode *err)
-{
- ssize_t nwrite; /* libssh2_sftp_write() used to return size_t in 0.14
- but is changed to ssize_t in 0.15. These days we don't
- support libssh2 0.15*/
- (void)sockindex;
-
- nwrite = libssh2_sftp_write(conn->proto.sshc.sftp_handle, mem, len);
-
- ssh_block2waitfor(conn, (nwrite == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE);
-
- if(nwrite == LIBSSH2_ERROR_EAGAIN) {
- *err = CURLE_AGAIN;
- nwrite = 0;
- }
- else if(nwrite < LIBSSH2_ERROR_NONE) {
- *err = libssh2_session_error_to_CURLE((int)nwrite);
- nwrite = -1;
- }
-
- return nwrite;
-}
-
-/*
- * Return number of received (decrypted) bytes
- * or <0 on error
- */
-static ssize_t sftp_recv(struct connectdata *conn, int sockindex,
- char *mem, size_t len, CURLcode *err)
-{
- ssize_t nread;
- (void)sockindex;
-
- nread = libssh2_sftp_read(conn->proto.sshc.sftp_handle, mem, len);
-
- ssh_block2waitfor(conn, (nread == LIBSSH2_ERROR_EAGAIN)?TRUE:FALSE);
-
- if(nread == LIBSSH2_ERROR_EAGAIN) {
- *err = CURLE_AGAIN;
- nread = -1;
-
- }
- else if(nread < 0) {
- *err = libssh2_session_error_to_CURLE((int)nread);
- }
- return nread;
-}
-
-/* The get_pathname() function is being borrowed from OpenSSH sftp.c
- version 4.6p1. */
-/*
- * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-static CURLcode
-get_pathname(const char **cpp, char **path)
-{
- const char *cp = *cpp, *end;
- char quot;
- unsigned int i, j;
- static const char WHITESPACE[] = " \t\r\n";
-
- cp += strspn(cp, WHITESPACE);
- if(!*cp) {
- *cpp = cp;
- *path = NULL;
- return CURLE_QUOTE_ERROR;
- }
-
- *path = malloc(strlen(cp) + 1);
- if(*path == NULL)
- return CURLE_OUT_OF_MEMORY;
-
- /* Check for quoted filenames */
- if(*cp == '\"' || *cp == '\'') {
- quot = *cp++;
-
- /* Search for terminating quote, unescape some chars */
- for(i = j = 0; i <= strlen(cp); i++) {
- if(cp[i] == quot) { /* Found quote */
- i++;
- (*path)[j] = '\0';
- break;
- }
- if(cp[i] == '\0') { /* End of string */
- /*error("Unterminated quote");*/
- goto fail;
- }
- if(cp[i] == '\\') { /* Escaped characters */
- i++;
- if(cp[i] != '\'' && cp[i] != '\"' &&
- cp[i] != '\\') {
- /*error("Bad escaped character '\\%c'",
- cp[i]);*/
- goto fail;
- }
- }
- (*path)[j++] = cp[i];
- }
-
- if(j == 0) {
- /*error("Empty quotes");*/
- goto fail;
- }
- *cpp = cp + i + strspn(cp + i, WHITESPACE);
- }
- else {
- /* Read to end of filename */
- end = strpbrk(cp, WHITESPACE);
- if(end == NULL)
- end = strchr(cp, '\0');
- *cpp = end + strspn(end, WHITESPACE);
-
- memcpy(*path, cp, end - cp);
- (*path)[end - cp] = '\0';
- }
- return CURLE_OK;
-
- fail:
- Curl_safefree(*path);
- return CURLE_QUOTE_ERROR;
-}
-
-
-static const char *sftp_libssh2_strerror(int err)
-{
- switch (err) {
- case LIBSSH2_FX_NO_SUCH_FILE:
- return "No such file or directory";
-
- case LIBSSH2_FX_PERMISSION_DENIED:
- return "Permission denied";
-
- case LIBSSH2_FX_FAILURE:
- return "Operation failed";
-
- case LIBSSH2_FX_BAD_MESSAGE:
- return "Bad message from SFTP server";
-
- case LIBSSH2_FX_NO_CONNECTION:
- return "Not connected to SFTP server";
-
- case LIBSSH2_FX_CONNECTION_LOST:
- return "Connection to SFTP server lost";
-
- case LIBSSH2_FX_OP_UNSUPPORTED:
- return "Operation not supported by SFTP server";
-
- case LIBSSH2_FX_INVALID_HANDLE:
- return "Invalid handle";
-
- case LIBSSH2_FX_NO_SUCH_PATH:
- return "No such file or directory";
-
- case LIBSSH2_FX_FILE_ALREADY_EXISTS:
- return "File already exists";
-
- case LIBSSH2_FX_WRITE_PROTECT:
- return "File is write protected";
-
- case LIBSSH2_FX_NO_MEDIA:
- return "No media";
-
- case LIBSSH2_FX_NO_SPACE_ON_FILESYSTEM:
- return "Disk full";
-
- case LIBSSH2_FX_QUOTA_EXCEEDED:
- return "User quota exceeded";
-
- case LIBSSH2_FX_UNKNOWN_PRINCIPLE:
- return "Unknown principle";
-
- case LIBSSH2_FX_LOCK_CONFlICT:
- return "File lock conflict";
-
- case LIBSSH2_FX_DIR_NOT_EMPTY:
- return "Directory not empty";
-
- case LIBSSH2_FX_NOT_A_DIRECTORY:
- return "Not a directory";
-
- case LIBSSH2_FX_INVALID_FILENAME:
- return "Invalid filename";
-
- case LIBSSH2_FX_LINK_LOOP:
- return "Link points to itself";
- }
- return "Unknown error in libssh2";
-}
-
-#endif /* USE_LIBSSH2 */
diff --git a/external/libcurl_android/jni/libcurl/lib/ssh.h b/external/libcurl_android/jni/libcurl/lib/ssh.h
deleted file mode 100755
index ff2e16be..00000000
--- a/external/libcurl_android/jni/libcurl/lib/ssh.h
+++ /dev/null
@@ -1,183 +0,0 @@
-#ifndef HEADER_CURL_SSH_H
-#define HEADER_CURL_SSH_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_LIBSSH2_H
-#include <libssh2.h>
-#include <libssh2_sftp.h>
-#endif /* HAVE_LIBSSH2_H */
-
-/****************************************************************************
- * SSH unique setup
- ***************************************************************************/
-typedef enum {
- SSH_NO_STATE = -1, /* Used for "nextState" so say there is none */
- SSH_STOP = 0, /* do nothing state, stops the state machine */
-
- SSH_INIT, /* First state in SSH-CONNECT */
- SSH_S_STARTUP, /* Session startup */
- SSH_HOSTKEY, /* verify hostkey */
- SSH_AUTHLIST,
- SSH_AUTH_PKEY_INIT,
- SSH_AUTH_PKEY,
- SSH_AUTH_PASS_INIT,
- SSH_AUTH_PASS,
- SSH_AUTH_AGENT_INIT,/* initialize then wait for connection to agent */
- SSH_AUTH_AGENT_LIST,/* ask for list then wait for entire list to come */
- SSH_AUTH_AGENT, /* attempt one key at a time */
- SSH_AUTH_HOST_INIT,
- SSH_AUTH_HOST,
- SSH_AUTH_KEY_INIT,
- SSH_AUTH_KEY,
- SSH_AUTH_DONE,
- SSH_SFTP_INIT,
- SSH_SFTP_REALPATH, /* Last state in SSH-CONNECT */
-
- SSH_SFTP_QUOTE_INIT, /* First state in SFTP-DO */
- SSH_SFTP_POSTQUOTE_INIT, /* (Possibly) First state in SFTP-DONE */
- SSH_SFTP_QUOTE,
- SSH_SFTP_NEXT_QUOTE,
- SSH_SFTP_QUOTE_STAT,
- SSH_SFTP_QUOTE_SETSTAT,
- SSH_SFTP_QUOTE_SYMLINK,
- SSH_SFTP_QUOTE_MKDIR,
- SSH_SFTP_QUOTE_RENAME,
- SSH_SFTP_QUOTE_RMDIR,
- SSH_SFTP_QUOTE_UNLINK,
- SSH_SFTP_TRANS_INIT,
- SSH_SFTP_UPLOAD_INIT,
- SSH_SFTP_CREATE_DIRS_INIT,
- SSH_SFTP_CREATE_DIRS,
- SSH_SFTP_CREATE_DIRS_MKDIR,
- SSH_SFTP_READDIR_INIT,
- SSH_SFTP_READDIR,
- SSH_SFTP_READDIR_LINK,
- SSH_SFTP_READDIR_BOTTOM,
- SSH_SFTP_READDIR_DONE,
- SSH_SFTP_DOWNLOAD_INIT,
- SSH_SFTP_DOWNLOAD_STAT, /* Last state in SFTP-DO */
- SSH_SFTP_CLOSE, /* Last state in SFTP-DONE */
- SSH_SFTP_SHUTDOWN, /* First state in SFTP-DISCONNECT */
- SSH_SCP_TRANS_INIT, /* First state in SCP-DO */
- SSH_SCP_UPLOAD_INIT,
- SSH_SCP_DOWNLOAD_INIT,
- SSH_SCP_DONE,
- SSH_SCP_SEND_EOF,
- SSH_SCP_WAIT_EOF,
- SSH_SCP_WAIT_CLOSE,
- SSH_SCP_CHANNEL_FREE, /* Last state in SCP-DONE */
- SSH_SESSION_DISCONNECT, /* First state in SCP-DISCONNECT */
- SSH_SESSION_FREE, /* Last state in SCP/SFTP-DISCONNECT */
- SSH_QUIT,
- SSH_LAST /* never used */
-} sshstate;
-
-/* this struct is used in the HandleData struct which is part of the
- SessionHandle, which means this is used on a per-easy handle basis.
- Everything that is strictly related to a connection is banned from this
- struct. */
-struct SSHPROTO {
- char *path; /* the path we operate on */
-};
-
-/* ssh_conn is used for struct connection-oriented data in the connectdata
- struct */
-struct ssh_conn {
- const char *authlist; /* List of auth. methods, managed by libssh2 */
-#ifdef USE_LIBSSH2
- const char *passphrase; /* pass-phrase to use */
- char *rsa_pub; /* path name */
- char *rsa; /* path name */
- bool authed; /* the connection has been authenticated fine */
- sshstate state; /* always use ssh.c:state() to change state! */
- sshstate nextstate; /* the state to goto after stopping */
- CURLcode actualcode; /* the actual error code */
- struct curl_slist *quote_item; /* for the quote option */
- char *quote_path1; /* two generic pointers for the QUOTE stuff */
- char *quote_path2;
- LIBSSH2_SFTP_ATTRIBUTES quote_attrs; /* used by the SFTP_QUOTE state */
- bool acceptfail; /* used by the SFTP_QUOTE (continue if
- quote command fails) */
- char *homedir; /* when doing SFTP we figure out home dir in the
- connect phase */
-
- /* Here's a set of struct members used by the SFTP_READDIR state */
- LIBSSH2_SFTP_ATTRIBUTES readdir_attrs;
- char *readdir_filename;
- char *readdir_longentry;
- int readdir_len, readdir_totalLen, readdir_currLen;
- char *readdir_line;
- char *readdir_linkPath;
- /* end of READDIR stuff */
-
- int secondCreateDirs; /* counter use by the code to see if the
- second attempt has been made to change
- to/create a directory */
- char *slash_pos; /* used by the SFTP_CREATE_DIRS state */
- LIBSSH2_SESSION *ssh_session; /* Secure Shell session */
- LIBSSH2_CHANNEL *ssh_channel; /* Secure Shell channel handle */
- LIBSSH2_SFTP *sftp_session; /* SFTP handle */
- LIBSSH2_SFTP_HANDLE *sftp_handle;
- int orig_waitfor; /* default READ/WRITE bits wait for */
-
-#ifdef HAVE_LIBSSH2_AGENT_API
- LIBSSH2_AGENT *ssh_agent; /* proxy to ssh-agent/pageant */
- struct libssh2_agent_publickey *sshagent_identity,
- *sshagent_prev_identity;
-#endif
-
- /* note that HAVE_LIBSSH2_KNOWNHOST_API is a define set in the libssh2.h
- header */
-#ifdef HAVE_LIBSSH2_KNOWNHOST_API
- LIBSSH2_KNOWNHOSTS *kh;
-#endif
-#endif /* USE_LIBSSH2 */
-};
-
-#ifdef USE_LIBSSH2
-
-#if !defined(LIBSSH2_VERSION_NUM) || (LIBSSH2_VERSION_NUM < 0x001000)
-# error "SCP/SFTP protocols require libssh2 0.16 or later"
-#endif
-
-#if defined(LIBSSH2_VERSION_NUM) && (LIBSSH2_VERSION_NUM >= 0x010000)
-# define HAVE_LIBSSH2_SFTP_SEEK64 1
-#else
-# undef HAVE_LIBSSH2_SFTP_SEEK64
-#endif
-
-#if defined(LIBSSH2_VERSION_NUM) && (LIBSSH2_VERSION_NUM >= 0x010206)
-# define HAVE_LIBSSH2_SCP_SEND64 1
-#else
-# undef HAVE_LIBSSH2_SCP_SEND64
-#endif
-
-
-extern const struct Curl_handler Curl_handler_scp;
-extern const struct Curl_handler Curl_handler_sftp;
-
-#endif /* USE_LIBSSH2 */
-
-#endif /* HEADER_CURL_SSH_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/stamp-h1 b/external/libcurl_android/jni/libcurl/lib/stamp-h1
deleted file mode 100755
index 8f5adb6e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/stamp-h1
+++ /dev/null
@@ -1 +0,0 @@
-timestamp for lib/curl_config.h
diff --git a/external/libcurl_android/jni/libcurl/lib/strdup.c b/external/libcurl_android/jni/libcurl/lib/strdup.c
deleted file mode 100755
index 3b776b18..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strdup.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-/*
- * This file is 'mem-include-scan' clean. See test 1132.
- */
-#include "curl_setup.h"
-
-#include "strdup.h"
-
-#ifndef HAVE_STRDUP
-char *curlx_strdup(const char *str)
-{
- size_t len;
- char *newstr;
-
- if(!str)
- return (char *)NULL;
-
- len = strlen(str);
-
- if(len >= ((size_t)-1) / sizeof(char))
- return (char *)NULL;
-
- newstr = malloc((len+1)*sizeof(char));
- if(!newstr)
- return (char *)NULL;
-
- memcpy(newstr,str,(len+1)*sizeof(char));
-
- return newstr;
-
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/strdup.h b/external/libcurl_android/jni/libcurl/lib/strdup.h
deleted file mode 100755
index 49af9117..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strdup.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef HEADER_CURL_STRDUP_H
-#define HEADER_CURL_STRDUP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifndef HAVE_STRDUP
-extern char *curlx_strdup(const char *str);
-#endif
-
-#endif /* HEADER_CURL_STRDUP_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/strequal.c b/external/libcurl_android/jni/libcurl/lib/strequal.c
deleted file mode 100755
index 5f2f508e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strequal.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#include "strequal.h"
-
-/*
- * @unittest: 1301
- */
-int curl_strequal(const char *first, const char *second)
-{
-#if defined(HAVE_STRCASECMP)
- return !(strcasecmp)(first, second);
-#elif defined(HAVE_STRCMPI)
- return !(strcmpi)(first, second);
-#elif defined(HAVE_STRICMP)
- return !(stricmp)(first, second);
-#else
- while(*first && *second) {
- if(toupper(*first) != toupper(*second)) {
- break;
- }
- first++;
- second++;
- }
- return toupper(*first) == toupper(*second);
-#endif
-}
-
-/*
- * @unittest: 1301
- */
-int curl_strnequal(const char *first, const char *second, size_t max)
-{
-#if defined(HAVE_STRNCASECMP)
- return !strncasecmp(first, second, max);
-#elif defined(HAVE_STRNCMPI)
- return !strncmpi(first, second, max);
-#elif defined(HAVE_STRNICMP)
- return !strnicmp(first, second, max);
-#else
- while(*first && *second && max) {
- if(toupper(*first) != toupper(*second)) {
- break;
- }
- max--;
- first++;
- second++;
- }
- if(0 == max)
- return 1; /* they are equal this far */
-
- return toupper(*first) == toupper(*second);
-#endif
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/strequal.h b/external/libcurl_android/jni/libcurl/lib/strequal.h
deleted file mode 100755
index 117a305b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strequal.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef HEADER_CURL_STREQUAL_H
-#define HEADER_CURL_STREQUAL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <curl/curl.h>
-
-#define strequal(a,b) curl_strequal(a,b)
-#define strnequal(a,b,c) curl_strnequal(a,b,c)
-
-#endif /* HEADER_CURL_STREQUAL_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/strerror.c b/external/libcurl_android/jni/libcurl/lib/strerror.c
deleted file mode 100755
index 66033f21..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strerror.c
+++ /dev/null
@@ -1,1127 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2004 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_STRERROR_R
-# if (!defined(HAVE_POSIX_STRERROR_R) && \
- !defined(HAVE_GLIBC_STRERROR_R) && \
- !defined(HAVE_VXWORKS_STRERROR_R)) || \
- (defined(HAVE_POSIX_STRERROR_R) && defined(HAVE_VXWORKS_STRERROR_R)) || \
- (defined(HAVE_GLIBC_STRERROR_R) && defined(HAVE_VXWORKS_STRERROR_R)) || \
- (defined(HAVE_POSIX_STRERROR_R) && defined(HAVE_GLIBC_STRERROR_R))
-# error "strerror_r MUST be either POSIX, glibc or vxworks-style"
-# endif
-#endif
-
-#include <curl/curl.h>
-
-#ifdef USE_LIBIDN
-#include <idna.h>
-#endif
-
-#include "strerror.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-const char *
-curl_easy_strerror(CURLcode error)
-{
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- switch (error) {
- case CURLE_OK:
- return "No error";
-
- case CURLE_UNSUPPORTED_PROTOCOL:
- return "Unsupported protocol";
-
- case CURLE_FAILED_INIT:
- return "Failed initialization";
-
- case CURLE_URL_MALFORMAT:
- return "URL using bad/illegal format or missing URL";
-
- case CURLE_NOT_BUILT_IN:
- return "A requested feature, protocol or option was not found built-in in"
- " this libcurl due to a build-time decision.";
-
- case CURLE_COULDNT_RESOLVE_PROXY:
- return "Couldn't resolve proxy name";
-
- case CURLE_COULDNT_RESOLVE_HOST:
- return "Couldn't resolve host name";
-
- case CURLE_COULDNT_CONNECT:
- return "Couldn't connect to server";
-
- case CURLE_FTP_WEIRD_SERVER_REPLY:
- return "FTP: weird server reply";
-
- case CURLE_REMOTE_ACCESS_DENIED:
- return "Access denied to remote resource";
-
- case CURLE_FTP_ACCEPT_FAILED:
- return "FTP: The server failed to connect to data port";
-
- case CURLE_FTP_ACCEPT_TIMEOUT:
- return "FTP: Accepting server connect has timed out";
-
- case CURLE_FTP_PRET_FAILED:
- return "FTP: The server did not accept the PRET command.";
-
- case CURLE_FTP_WEIRD_PASS_REPLY:
- return "FTP: unknown PASS reply";
-
- case CURLE_FTP_WEIRD_PASV_REPLY:
- return "FTP: unknown PASV reply";
-
- case CURLE_FTP_WEIRD_227_FORMAT:
- return "FTP: unknown 227 response format";
-
- case CURLE_FTP_CANT_GET_HOST:
- return "FTP: can't figure out the host in the PASV response";
-
- case CURLE_HTTP2:
- return "Error in the HTTP2 framing layer";
-
- case CURLE_FTP_COULDNT_SET_TYPE:
- return "FTP: couldn't set file type";
-
- case CURLE_PARTIAL_FILE:
- return "Transferred a partial file";
-
- case CURLE_FTP_COULDNT_RETR_FILE:
- return "FTP: couldn't retrieve (RETR failed) the specified file";
-
- case CURLE_QUOTE_ERROR:
- return "Quote command returned error";
-
- case CURLE_HTTP_RETURNED_ERROR:
- return "HTTP response code said error";
-
- case CURLE_WRITE_ERROR:
- return "Failed writing received data to disk/application";
-
- case CURLE_UPLOAD_FAILED:
- return "Upload failed (at start/before it took off)";
-
- case CURLE_READ_ERROR:
- return "Failed to open/read local data from file/application";
-
- case CURLE_OUT_OF_MEMORY:
- return "Out of memory";
-
- case CURLE_OPERATION_TIMEDOUT:
- return "Timeout was reached";
-
- case CURLE_FTP_PORT_FAILED:
- return "FTP: command PORT failed";
-
- case CURLE_FTP_COULDNT_USE_REST:
- return "FTP: command REST failed";
-
- case CURLE_RANGE_ERROR:
- return "Requested range was not delivered by the server";
-
- case CURLE_HTTP_POST_ERROR:
- return "Internal problem setting up the POST";
-
- case CURLE_SSL_CONNECT_ERROR:
- return "SSL connect error";
-
- case CURLE_BAD_DOWNLOAD_RESUME:
- return "Couldn't resume download";
-
- case CURLE_FILE_COULDNT_READ_FILE:
- return "Couldn't read a file:// file";
-
- case CURLE_LDAP_CANNOT_BIND:
- return "LDAP: cannot bind";
-
- case CURLE_LDAP_SEARCH_FAILED:
- return "LDAP: search failed";
-
- case CURLE_FUNCTION_NOT_FOUND:
- return "A required function in the library was not found";
-
- case CURLE_ABORTED_BY_CALLBACK:
- return "Operation was aborted by an application callback";
-
- case CURLE_BAD_FUNCTION_ARGUMENT:
- return "A libcurl function was given a bad argument";
-
- case CURLE_INTERFACE_FAILED:
- return "Failed binding local connection end";
-
- case CURLE_TOO_MANY_REDIRECTS :
- return "Number of redirects hit maximum amount";
-
- case CURLE_UNKNOWN_OPTION:
- return "An unknown option was passed in to libcurl";
-
- case CURLE_TELNET_OPTION_SYNTAX :
- return "Malformed telnet option";
-
- case CURLE_PEER_FAILED_VERIFICATION:
- return "SSL peer certificate or SSH remote key was not OK";
-
- case CURLE_GOT_NOTHING:
- return "Server returned nothing (no headers, no data)";
-
- case CURLE_SSL_ENGINE_NOTFOUND:
- return "SSL crypto engine not found";
-
- case CURLE_SSL_ENGINE_SETFAILED:
- return "Can not set SSL crypto engine as default";
-
- case CURLE_SSL_ENGINE_INITFAILED:
- return "Failed to initialise SSL crypto engine";
-
- case CURLE_SEND_ERROR:
- return "Failed sending data to the peer";
-
- case CURLE_RECV_ERROR:
- return "Failure when receiving data from the peer";
-
- case CURLE_SSL_CERTPROBLEM:
- return "Problem with the local SSL certificate";
-
- case CURLE_SSL_CIPHER:
- return "Couldn't use specified SSL cipher";
-
- case CURLE_SSL_CACERT:
- return "Peer certificate cannot be authenticated with given CA "
- "certificates";
-
- case CURLE_SSL_CACERT_BADFILE:
- return "Problem with the SSL CA cert (path? access rights?)";
-
- case CURLE_BAD_CONTENT_ENCODING:
- return "Unrecognized or bad HTTP Content or Transfer-Encoding";
-
- case CURLE_LDAP_INVALID_URL:
- return "Invalid LDAP URL";
-
- case CURLE_FILESIZE_EXCEEDED:
- return "Maximum file size exceeded";
-
- case CURLE_USE_SSL_FAILED:
- return "Requested SSL level failed";
-
- case CURLE_SSL_SHUTDOWN_FAILED:
- return "Failed to shut down the SSL connection";
-
- case CURLE_SSL_CRL_BADFILE:
- return "Failed to load CRL file (path? access rights?, format?)";
-
- case CURLE_SSL_ISSUER_ERROR:
- return "Issuer check against peer certificate failed";
-
- case CURLE_SEND_FAIL_REWIND:
- return "Send failed since rewinding of the data stream failed";
-
- case CURLE_LOGIN_DENIED:
- return "Login denied";
-
- case CURLE_TFTP_NOTFOUND:
- return "TFTP: File Not Found";
-
- case CURLE_TFTP_PERM:
- return "TFTP: Access Violation";
-
- case CURLE_REMOTE_DISK_FULL:
- return "Disk full or allocation exceeded";
-
- case CURLE_TFTP_ILLEGAL:
- return "TFTP: Illegal operation";
-
- case CURLE_TFTP_UNKNOWNID:
- return "TFTP: Unknown transfer ID";
-
- case CURLE_REMOTE_FILE_EXISTS:
- return "Remote file already exists";
-
- case CURLE_TFTP_NOSUCHUSER:
- return "TFTP: No such user";
-
- case CURLE_CONV_FAILED:
- return "Conversion failed";
-
- case CURLE_CONV_REQD:
- return "Caller must register CURLOPT_CONV_ callback options";
-
- case CURLE_REMOTE_FILE_NOT_FOUND:
- return "Remote file not found";
-
- case CURLE_SSH:
- return "Error in the SSH layer";
-
- case CURLE_AGAIN:
- return "Socket not ready for send/recv";
-
- case CURLE_RTSP_CSEQ_ERROR:
- return "RTSP CSeq mismatch or invalid CSeq";
-
- case CURLE_RTSP_SESSION_ERROR:
- return "RTSP session error";
-
- case CURLE_FTP_BAD_FILE_LIST:
- return "Unable to parse FTP file list";
-
- case CURLE_CHUNK_FAILED:
- return "Chunk callback failed";
-
- case CURLE_NO_CONNECTION_AVAILABLE:
- return "The max connection limit is reached";
-
- /* error codes not used by current libcurl */
- case CURLE_OBSOLETE20:
- case CURLE_OBSOLETE24:
- case CURLE_OBSOLETE29:
- case CURLE_OBSOLETE32:
- case CURLE_OBSOLETE40:
- case CURLE_OBSOLETE44:
- case CURLE_OBSOLETE46:
- case CURLE_OBSOLETE50:
- case CURLE_OBSOLETE57:
- case CURL_LAST:
- break;
- }
- /*
- * By using a switch, gcc -Wall will complain about enum values
- * which do not appear, helping keep this function up-to-date.
- * By using gcc -Wall -Werror, you can't forget.
- *
- * A table would not have the same benefit. Most compilers will
- * generate code very similar to a table in any case, so there
- * is little performance gain from a table. And something is broken
- * for the user's application, anyways, so does it matter how fast
- * it _doesn't_ work?
- *
- * The line number for the error will be near this comment, which
- * is why it is here, and not at the start of the switch.
- */
- return "Unknown error";
-#else
- if(error == CURLE_OK)
- return "No error";
- else
- return "Error";
-#endif
-}
-
-const char *
-curl_multi_strerror(CURLMcode error)
-{
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- switch (error) {
- case CURLM_CALL_MULTI_PERFORM:
- return "Please call curl_multi_perform() soon";
-
- case CURLM_OK:
- return "No error";
-
- case CURLM_BAD_HANDLE:
- return "Invalid multi handle";
-
- case CURLM_BAD_EASY_HANDLE:
- return "Invalid easy handle";
-
- case CURLM_OUT_OF_MEMORY:
- return "Out of memory";
-
- case CURLM_INTERNAL_ERROR:
- return "Internal error";
-
- case CURLM_BAD_SOCKET:
- return "Invalid socket argument";
-
- case CURLM_UNKNOWN_OPTION:
- return "Unknown option";
-
- case CURLM_ADDED_ALREADY:
- return "The easy handle is already added to a multi handle";
-
- case CURLM_LAST:
- break;
- }
-
- return "Unknown error";
-#else
- if(error == CURLM_OK)
- return "No error";
- else
- return "Error";
-#endif
-}
-
-const char *
-curl_share_strerror(CURLSHcode error)
-{
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- switch (error) {
- case CURLSHE_OK:
- return "No error";
-
- case CURLSHE_BAD_OPTION:
- return "Unknown share option";
-
- case CURLSHE_IN_USE:
- return "Share currently in use";
-
- case CURLSHE_INVALID:
- return "Invalid share handle";
-
- case CURLSHE_NOMEM:
- return "Out of memory";
-
- case CURLSHE_NOT_BUILT_IN:
- return "Feature not enabled in this library";
-
- case CURLSHE_LAST:
- break;
- }
-
- return "CURLSHcode unknown";
-#else
- if(error == CURLSHE_OK)
- return "No error";
- else
- return "Error";
-#endif
-}
-
-#ifdef USE_WINSOCK
-
-/* This function handles most / all (?) Winsock errors cURL is able to produce.
- */
-static const char *
-get_winsock_error (int err, char *buf, size_t len)
-{
- const char *p;
-
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- switch (err) {
- case WSAEINTR:
- p = "Call interrupted";
- break;
- case WSAEBADF:
- p = "Bad file";
- break;
- case WSAEACCES:
- p = "Bad access";
- break;
- case WSAEFAULT:
- p = "Bad argument";
- break;
- case WSAEINVAL:
- p = "Invalid arguments";
- break;
- case WSAEMFILE:
- p = "Out of file descriptors";
- break;
- case WSAEWOULDBLOCK:
- p = "Call would block";
- break;
- case WSAEINPROGRESS:
- case WSAEALREADY:
- p = "Blocking call in progress";
- break;
- case WSAENOTSOCK:
- p = "Descriptor is not a socket";
- break;
- case WSAEDESTADDRREQ:
- p = "Need destination address";
- break;
- case WSAEMSGSIZE:
- p = "Bad message size";
- break;
- case WSAEPROTOTYPE:
- p = "Bad protocol";
- break;
- case WSAENOPROTOOPT:
- p = "Protocol option is unsupported";
- break;
- case WSAEPROTONOSUPPORT:
- p = "Protocol is unsupported";
- break;
- case WSAESOCKTNOSUPPORT:
- p = "Socket is unsupported";
- break;
- case WSAEOPNOTSUPP:
- p = "Operation not supported";
- break;
- case WSAEAFNOSUPPORT:
- p = "Address family not supported";
- break;
- case WSAEPFNOSUPPORT:
- p = "Protocol family not supported";
- break;
- case WSAEADDRINUSE:
- p = "Address already in use";
- break;
- case WSAEADDRNOTAVAIL:
- p = "Address not available";
- break;
- case WSAENETDOWN:
- p = "Network down";
- break;
- case WSAENETUNREACH:
- p = "Network unreachable";
- break;
- case WSAENETRESET:
- p = "Network has been reset";
- break;
- case WSAECONNABORTED:
- p = "Connection was aborted";
- break;
- case WSAECONNRESET:
- p = "Connection was reset";
- break;
- case WSAENOBUFS:
- p = "No buffer space";
- break;
- case WSAEISCONN:
- p = "Socket is already connected";
- break;
- case WSAENOTCONN:
- p = "Socket is not connected";
- break;
- case WSAESHUTDOWN:
- p = "Socket has been shut down";
- break;
- case WSAETOOMANYREFS:
- p = "Too many references";
- break;
- case WSAETIMEDOUT:
- p = "Timed out";
- break;
- case WSAECONNREFUSED:
- p = "Connection refused";
- break;
- case WSAELOOP:
- p = "Loop??";
- break;
- case WSAENAMETOOLONG:
- p = "Name too long";
- break;
- case WSAEHOSTDOWN:
- p = "Host down";
- break;
- case WSAEHOSTUNREACH:
- p = "Host unreachable";
- break;
- case WSAENOTEMPTY:
- p = "Not empty";
- break;
- case WSAEPROCLIM:
- p = "Process limit reached";
- break;
- case WSAEUSERS:
- p = "Too many users";
- break;
- case WSAEDQUOT:
- p = "Bad quota";
- break;
- case WSAESTALE:
- p = "Something is stale";
- break;
- case WSAEREMOTE:
- p = "Remote error";
- break;
-#ifdef WSAEDISCON /* missing in SalfordC! */
- case WSAEDISCON:
- p = "Disconnected";
- break;
-#endif
- /* Extended Winsock errors */
- case WSASYSNOTREADY:
- p = "Winsock library is not ready";
- break;
- case WSANOTINITIALISED:
- p = "Winsock library not initialised";
- break;
- case WSAVERNOTSUPPORTED:
- p = "Winsock version not supported";
- break;
-
- /* getXbyY() errors (already handled in herrmsg):
- * Authoritative Answer: Host not found */
- case WSAHOST_NOT_FOUND:
- p = "Host not found";
- break;
-
- /* Non-Authoritative: Host not found, or SERVERFAIL */
- case WSATRY_AGAIN:
- p = "Host not found, try again";
- break;
-
- /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
- case WSANO_RECOVERY:
- p = "Unrecoverable error in call to nameserver";
- break;
-
- /* Valid name, no data record of requested type */
- case WSANO_DATA:
- p = "No data record of requested type";
- break;
-
- default:
- return NULL;
- }
-#else
- if(err == CURLE_OK)
- return NULL;
- else
- p = "error";
-#endif
- strncpy (buf, p, len);
- buf [len-1] = '\0';
- return buf;
-}
-#endif /* USE_WINSOCK */
-
-/*
- * Our thread-safe and smart strerror() replacement.
- *
- * The 'err' argument passed in to this function MUST be a true errno number
- * as reported on this system. We do no range checking on the number before
- * we pass it to the "number-to-message" conversion function and there might
- * be systems that don't do proper range checking in there themselves.
- *
- * We don't do range checking (on systems other than Windows) since there is
- * no good reliable and portable way to do it.
- */
-const char *Curl_strerror(struct connectdata *conn, int err)
-{
- char *buf, *p;
- size_t max;
- int old_errno = ERRNO;
-
- DEBUGASSERT(conn);
- DEBUGASSERT(err >= 0);
-
- buf = conn->syserr_buf;
- max = sizeof(conn->syserr_buf)-1;
- *buf = '\0';
-
-#ifdef USE_WINSOCK
-
-#ifdef _WIN32_WCE
- {
- wchar_t wbuf[256];
- wbuf[0] = L'\0';
-
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
- LANG_NEUTRAL, wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL);
- wcstombs(buf,wbuf,max);
- }
-#else
- /* 'sys_nerr' is the maximum errno number, it is not widely portable */
- if(err >= 0 && err < sys_nerr)
- strncpy(buf, strerror(err), max);
- else {
- if(!get_winsock_error(err, buf, max) &&
- !FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
- LANG_NEUTRAL, buf, (DWORD)max, NULL))
- snprintf(buf, max, "Unknown error %d (%#x)", err, err);
- }
-#endif
-
-#else /* not USE_WINSOCK coming up */
-
-#if defined(HAVE_STRERROR_R) && defined(HAVE_POSIX_STRERROR_R)
- /*
- * The POSIX-style strerror_r() may set errno to ERANGE if insufficient
- * storage is supplied via 'strerrbuf' and 'buflen' to hold the generated
- * message string, or EINVAL if 'errnum' is not a valid error number.
- */
- if(0 != strerror_r(err, buf, max)) {
- if('\0' == buf[0])
- snprintf(buf, max, "Unknown error %d", err);
- }
-#elif defined(HAVE_STRERROR_R) && defined(HAVE_GLIBC_STRERROR_R)
- /*
- * The glibc-style strerror_r() only *might* use the buffer we pass to
- * the function, but it always returns the error message as a pointer,
- * so we must copy that string unconditionally (if non-NULL).
- */
- {
- char buffer[256];
- char *msg = strerror_r(err, buffer, sizeof(buffer));
- if(msg)
- strncpy(buf, msg, max);
- else
- snprintf(buf, max, "Unknown error %d", err);
- }
-#elif defined(HAVE_STRERROR_R) && defined(HAVE_VXWORKS_STRERROR_R)
- /*
- * The vxworks-style strerror_r() does use the buffer we pass to the function.
- * The buffer size should be at least NAME_MAX (256)
- */
- {
- char buffer[256];
- if(OK == strerror_r(err, buffer))
- strncpy(buf, buffer, max);
- else
- snprintf(buf, max, "Unknown error %d", err);
- }
-#else
- {
- char *msg = strerror(err);
- if(msg)
- strncpy(buf, msg, max);
- else
- snprintf(buf, max, "Unknown error %d", err);
- }
-#endif
-
-#endif /* end of ! USE_WINSOCK */
-
- buf[max] = '\0'; /* make sure the string is zero terminated */
-
- /* strip trailing '\r\n' or '\n'. */
- if((p = strrchr(buf,'\n')) != NULL && (p - buf) >= 2)
- *p = '\0';
- if((p = strrchr(buf,'\r')) != NULL && (p - buf) >= 1)
- *p = '\0';
-
- if(old_errno != ERRNO)
- SET_ERRNO(old_errno);
-
- return buf;
-}
-
-#ifdef USE_LIBIDN
-/*
- * Return error-string for libidn status as returned from idna_to_ascii_lz().
- */
-const char *Curl_idn_strerror (struct connectdata *conn, int err)
-{
-#ifdef HAVE_IDNA_STRERROR
- (void)conn;
- return idna_strerror((Idna_rc) err);
-#else
- const char *str;
- char *buf;
- size_t max;
-
- DEBUGASSERT(conn);
-
- buf = conn->syserr_buf;
- max = sizeof(conn->syserr_buf)-1;
- *buf = '\0';
-
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- switch ((Idna_rc)err) {
- case IDNA_SUCCESS:
- str = "No error";
- break;
- case IDNA_STRINGPREP_ERROR:
- str = "Error in string preparation";
- break;
- case IDNA_PUNYCODE_ERROR:
- str = "Error in Punycode operation";
- break;
- case IDNA_CONTAINS_NON_LDH:
- str = "Illegal ASCII characters";
- break;
- case IDNA_CONTAINS_MINUS:
- str = "Contains minus";
- break;
- case IDNA_INVALID_LENGTH:
- str = "Invalid output length";
- break;
- case IDNA_NO_ACE_PREFIX:
- str = "No ACE prefix (\"xn--\")";
- break;
- case IDNA_ROUNDTRIP_VERIFY_ERROR:
- str = "Round trip verify error";
- break;
- case IDNA_CONTAINS_ACE_PREFIX:
- str = "Already have ACE prefix (\"xn--\")";
- break;
- case IDNA_ICONV_ERROR:
- str = "Locale conversion failed";
- break;
- case IDNA_MALLOC_ERROR:
- str = "Allocation failed";
- break;
- case IDNA_DLOPEN_ERROR:
- str = "dlopen() error";
- break;
- default:
- snprintf(buf, max, "error %d", err);
- str = NULL;
- break;
- }
-#else
- if((Idna_rc)err == IDNA_SUCCESS)
- str = "No error";
- else
- str = "Error";
-#endif
- if(str)
- strncpy(buf, str, max);
- buf[max] = '\0';
- return (buf);
-#endif
-}
-#endif /* USE_LIBIDN */
-
-#ifdef USE_WINDOWS_SSPI
-const char *Curl_sspi_strerror (struct connectdata *conn, int err)
-{
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- char txtbuf[80];
- char msgbuf[sizeof(conn->syserr_buf)];
- char *p, *str, *msg = NULL;
- bool msg_formatted = FALSE;
- int old_errno;
-#endif
- const char *txt;
- char *outbuf;
- size_t outmax;
-
- DEBUGASSERT(conn);
-
- outbuf = conn->syserr_buf;
- outmax = sizeof(conn->syserr_buf)-1;
- *outbuf = '\0';
-
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-
- old_errno = ERRNO;
-
- switch (err) {
- case SEC_E_OK:
- txt = "No error";
- break;
- case SEC_E_ALGORITHM_MISMATCH:
- txt = "SEC_E_ALGORITHM_MISMATCH";
- break;
- case SEC_E_BAD_BINDINGS:
- txt = "SEC_E_BAD_BINDINGS";
- break;
- case SEC_E_BAD_PKGID:
- txt = "SEC_E_BAD_PKGID";
- break;
- case SEC_E_BUFFER_TOO_SMALL:
- txt = "SEC_E_BUFFER_TOO_SMALL";
- break;
- case SEC_E_CANNOT_INSTALL:
- txt = "SEC_E_CANNOT_INSTALL";
- break;
- case SEC_E_CANNOT_PACK:
- txt = "SEC_E_CANNOT_PACK";
- break;
- case SEC_E_CERT_EXPIRED:
- txt = "SEC_E_CERT_EXPIRED";
- break;
- case SEC_E_CERT_UNKNOWN:
- txt = "SEC_E_CERT_UNKNOWN";
- break;
- case SEC_E_CERT_WRONG_USAGE:
- txt = "SEC_E_CERT_WRONG_USAGE";
- break;
- case SEC_E_CONTEXT_EXPIRED:
- txt = "SEC_E_CONTEXT_EXPIRED";
- break;
- case SEC_E_CROSSREALM_DELEGATION_FAILURE:
- txt = "SEC_E_CROSSREALM_DELEGATION_FAILURE";
- break;
- case SEC_E_CRYPTO_SYSTEM_INVALID:
- txt = "SEC_E_CRYPTO_SYSTEM_INVALID";
- break;
- case SEC_E_DECRYPT_FAILURE:
- txt = "SEC_E_DECRYPT_FAILURE";
- break;
- case SEC_E_DELEGATION_POLICY:
- txt = "SEC_E_DELEGATION_POLICY";
- break;
- case SEC_E_DELEGATION_REQUIRED:
- txt = "SEC_E_DELEGATION_REQUIRED";
- break;
- case SEC_E_DOWNGRADE_DETECTED:
- txt = "SEC_E_DOWNGRADE_DETECTED";
- break;
- case SEC_E_ENCRYPT_FAILURE:
- txt = "SEC_E_ENCRYPT_FAILURE";
- break;
- case SEC_E_ILLEGAL_MESSAGE:
- txt = "SEC_E_ILLEGAL_MESSAGE";
- break;
- case SEC_E_INCOMPLETE_CREDENTIALS:
- txt = "SEC_E_INCOMPLETE_CREDENTIALS";
- break;
- case SEC_E_INCOMPLETE_MESSAGE:
- txt = "SEC_E_INCOMPLETE_MESSAGE";
- break;
- case SEC_E_INSUFFICIENT_MEMORY:
- txt = "SEC_E_INSUFFICIENT_MEMORY";
- break;
- case SEC_E_INTERNAL_ERROR:
- txt = "SEC_E_INTERNAL_ERROR";
- break;
- case SEC_E_INVALID_HANDLE:
- txt = "SEC_E_INVALID_HANDLE";
- break;
- case SEC_E_INVALID_PARAMETER:
- txt = "SEC_E_INVALID_PARAMETER";
- break;
- case SEC_E_INVALID_TOKEN:
- txt = "SEC_E_INVALID_TOKEN";
- break;
- case SEC_E_ISSUING_CA_UNTRUSTED:
- txt = "SEC_E_ISSUING_CA_UNTRUSTED";
- break;
- case SEC_E_ISSUING_CA_UNTRUSTED_KDC:
- txt = "SEC_E_ISSUING_CA_UNTRUSTED_KDC";
- break;
- case SEC_E_KDC_CERT_EXPIRED:
- txt = "SEC_E_KDC_CERT_EXPIRED";
- break;
- case SEC_E_KDC_CERT_REVOKED:
- txt = "SEC_E_KDC_CERT_REVOKED";
- break;
- case SEC_E_KDC_INVALID_REQUEST:
- txt = "SEC_E_KDC_INVALID_REQUEST";
- break;
- case SEC_E_KDC_UNABLE_TO_REFER:
- txt = "SEC_E_KDC_UNABLE_TO_REFER";
- break;
- case SEC_E_KDC_UNKNOWN_ETYPE:
- txt = "SEC_E_KDC_UNKNOWN_ETYPE";
- break;
- case SEC_E_LOGON_DENIED:
- txt = "SEC_E_LOGON_DENIED";
- break;
- case SEC_E_MAX_REFERRALS_EXCEEDED:
- txt = "SEC_E_MAX_REFERRALS_EXCEEDED";
- break;
- case SEC_E_MESSAGE_ALTERED:
- txt = "SEC_E_MESSAGE_ALTERED";
- break;
- case SEC_E_MULTIPLE_ACCOUNTS:
- txt = "SEC_E_MULTIPLE_ACCOUNTS";
- break;
- case SEC_E_MUST_BE_KDC:
- txt = "SEC_E_MUST_BE_KDC";
- break;
- case SEC_E_NOT_OWNER:
- txt = "SEC_E_NOT_OWNER";
- break;
- case SEC_E_NO_AUTHENTICATING_AUTHORITY:
- txt = "SEC_E_NO_AUTHENTICATING_AUTHORITY";
- break;
- case SEC_E_NO_CREDENTIALS:
- txt = "SEC_E_NO_CREDENTIALS";
- break;
- case SEC_E_NO_IMPERSONATION:
- txt = "SEC_E_NO_IMPERSONATION";
- break;
- case SEC_E_NO_IP_ADDRESSES:
- txt = "SEC_E_NO_IP_ADDRESSES";
- break;
- case SEC_E_NO_KERB_KEY:
- txt = "SEC_E_NO_KERB_KEY";
- break;
- case SEC_E_NO_PA_DATA:
- txt = "SEC_E_NO_PA_DATA";
- break;
- case SEC_E_NO_S4U_PROT_SUPPORT:
- txt = "SEC_E_NO_S4U_PROT_SUPPORT";
- break;
- case SEC_E_NO_TGT_REPLY:
- txt = "SEC_E_NO_TGT_REPLY";
- break;
- case SEC_E_OUT_OF_SEQUENCE:
- txt = "SEC_E_OUT_OF_SEQUENCE";
- break;
- case SEC_E_PKINIT_CLIENT_FAILURE:
- txt = "SEC_E_PKINIT_CLIENT_FAILURE";
- break;
- case SEC_E_PKINIT_NAME_MISMATCH:
- txt = "SEC_E_PKINIT_NAME_MISMATCH";
- break;
- case SEC_E_POLICY_NLTM_ONLY:
- txt = "SEC_E_POLICY_NLTM_ONLY";
- break;
- case SEC_E_QOP_NOT_SUPPORTED:
- txt = "SEC_E_QOP_NOT_SUPPORTED";
- break;
- case SEC_E_REVOCATION_OFFLINE_C:
- txt = "SEC_E_REVOCATION_OFFLINE_C";
- break;
- case SEC_E_REVOCATION_OFFLINE_KDC:
- txt = "SEC_E_REVOCATION_OFFLINE_KDC";
- break;
- case SEC_E_SECPKG_NOT_FOUND:
- txt = "SEC_E_SECPKG_NOT_FOUND";
- break;
- case SEC_E_SECURITY_QOS_FAILED:
- txt = "SEC_E_SECURITY_QOS_FAILED";
- break;
- case SEC_E_SHUTDOWN_IN_PROGRESS:
- txt = "SEC_E_SHUTDOWN_IN_PROGRESS";
- break;
- case SEC_E_SMARTCARD_CERT_EXPIRED:
- txt = "SEC_E_SMARTCARD_CERT_EXPIRED";
- break;
- case SEC_E_SMARTCARD_CERT_REVOKED:
- txt = "SEC_E_SMARTCARD_CERT_REVOKED";
- break;
- case SEC_E_SMARTCARD_LOGON_REQUIRED:
- txt = "SEC_E_SMARTCARD_LOGON_REQUIRED";
- break;
- case SEC_E_STRONG_CRYPTO_NOT_SUPPORTED:
- txt = "SEC_E_STRONG_CRYPTO_NOT_SUPPORTED";
- break;
- case SEC_E_TARGET_UNKNOWN:
- txt = "SEC_E_TARGET_UNKNOWN";
- break;
- case SEC_E_TIME_SKEW:
- txt = "SEC_E_TIME_SKEW";
- break;
- case SEC_E_TOO_MANY_PRINCIPALS:
- txt = "SEC_E_TOO_MANY_PRINCIPALS";
- break;
- case SEC_E_UNFINISHED_CONTEXT_DELETED:
- txt = "SEC_E_UNFINISHED_CONTEXT_DELETED";
- break;
- case SEC_E_UNKNOWN_CREDENTIALS:
- txt = "SEC_E_UNKNOWN_CREDENTIALS";
- break;
- case SEC_E_UNSUPPORTED_FUNCTION:
- txt = "SEC_E_UNSUPPORTED_FUNCTION";
- break;
- case SEC_E_UNSUPPORTED_PREAUTH:
- txt = "SEC_E_UNSUPPORTED_PREAUTH";
- break;
- case SEC_E_UNTRUSTED_ROOT:
- txt = "SEC_E_UNTRUSTED_ROOT";
- break;
- case SEC_E_WRONG_CREDENTIAL_HANDLE:
- txt = "SEC_E_WRONG_CREDENTIAL_HANDLE";
- break;
- case SEC_E_WRONG_PRINCIPAL:
- txt = "SEC_E_WRONG_PRINCIPAL";
- break;
- case SEC_I_COMPLETE_AND_CONTINUE:
- txt = "SEC_I_COMPLETE_AND_CONTINUE";
- break;
- case SEC_I_COMPLETE_NEEDED:
- txt = "SEC_I_COMPLETE_NEEDED";
- break;
- case SEC_I_CONTEXT_EXPIRED:
- txt = "SEC_I_CONTEXT_EXPIRED";
- break;
- case SEC_I_CONTINUE_NEEDED:
- txt = "SEC_I_CONTINUE_NEEDED";
- break;
- case SEC_I_INCOMPLETE_CREDENTIALS:
- txt = "SEC_I_INCOMPLETE_CREDENTIALS";
- break;
- case SEC_I_LOCAL_LOGON:
- txt = "SEC_I_LOCAL_LOGON";
- break;
- case SEC_I_NO_LSA_CONTEXT:
- txt = "SEC_I_NO_LSA_CONTEXT";
- break;
- case SEC_I_RENEGOTIATE:
- txt = "SEC_I_RENEGOTIATE";
- break;
- case SEC_I_SIGNATURE_NEEDED:
- txt = "SEC_I_SIGNATURE_NEEDED";
- break;
- default:
- txt = "Unknown error";
- }
-
- if(err == SEC_E_OK)
- strncpy(outbuf, txt, outmax);
- else {
- str = txtbuf;
- snprintf(txtbuf, sizeof(txtbuf), "%s (0x%04X%04X)",
- txt, (err >> 16) & 0xffff, err & 0xffff);
- txtbuf[sizeof(txtbuf)-1] = '\0';
-
-#ifdef _WIN32_WCE
- {
- wchar_t wbuf[256];
- wbuf[0] = L'\0';
-
- if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, err, LANG_NEUTRAL,
- wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL)) {
- wcstombs(msgbuf,wbuf,sizeof(msgbuf)-1);
- msg_formatted = TRUE;
- }
- }
-#else
- if(FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, err, LANG_NEUTRAL,
- msgbuf, sizeof(msgbuf)-1, NULL)) {
- msg_formatted = TRUE;
- }
-#endif
- if(msg_formatted) {
- msgbuf[sizeof(msgbuf)-1] = '\0';
- /* strip trailing '\r\n' or '\n' */
- if((p = strrchr(msgbuf,'\n')) != NULL && (p - msgbuf) >= 2)
- *p = '\0';
- if((p = strrchr(msgbuf,'\r')) != NULL && (p - msgbuf) >= 1)
- *p = '\0';
- msg = msgbuf;
- }
- if(msg)
- snprintf(outbuf, outmax, "%s - %s", str, msg);
- else
- strncpy(outbuf, str, outmax);
- }
-
- if(old_errno != ERRNO)
- SET_ERRNO(old_errno);
-
-#else
-
- if(err == SEC_E_OK)
- txt = "No error";
- else
- txt = "Error";
-
- strncpy(outbuf, txt, outmax);
-
-#endif
-
- outbuf[outmax] = '\0';
-
- return outbuf;
-}
-#endif /* USE_WINDOWS_SSPI */
diff --git a/external/libcurl_android/jni/libcurl/lib/strerror.h b/external/libcurl_android/jni/libcurl/lib/strerror.h
deleted file mode 100755
index f1b22210..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strerror.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef HEADER_CURL_STRERROR_H
-#define HEADER_CURL_STRERROR_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "urldata.h"
-
-const char *Curl_strerror (struct connectdata *conn, int err);
-
-#ifdef USE_LIBIDN
-const char *Curl_idn_strerror (struct connectdata *conn, int err);
-#endif
-
-#ifdef USE_WINDOWS_SSPI
-const char *Curl_sspi_strerror (struct connectdata *conn, int err);
-#endif
-
-#endif /* HEADER_CURL_STRERROR_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/strtok.c b/external/libcurl_android/jni/libcurl/lib/strtok.c
deleted file mode 100755
index 0d31351f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strtok.c
+++ /dev/null
@@ -1,66 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef HAVE_STRTOK_R
-#include <stddef.h>
-
-#include "strtok.h"
-
-char *
-Curl_strtok_r(char *ptr, const char *sep, char **end)
-{
- if(!ptr)
- /* we got NULL input so then we get our last position instead */
- ptr = *end;
-
- /* pass all letters that are including in the separator string */
- while(*ptr && strchr(sep, *ptr))
- ++ptr;
-
- if(*ptr) {
- /* so this is where the next piece of string starts */
- char *start = ptr;
-
- /* set the end pointer to the first byte after the start */
- *end = start + 1;
-
- /* scan through the string to find where it ends, it ends on a
- null byte or a character that exists in the separator string */
- while(**end && !strchr(sep, **end))
- ++*end;
-
- if(**end) {
- /* the end is not a null byte */
- **end = '\0'; /* zero terminate it! */
- ++*end; /* advance the last pointer to beyond the null byte */
- }
-
- return start; /* return the position where the string starts */
- }
-
- /* we ended up on a null byte, there are no more strings to find! */
- return NULL;
-}
-
-#endif /* this was only compiled if strtok_r wasn't present */
diff --git a/external/libcurl_android/jni/libcurl/lib/strtok.h b/external/libcurl_android/jni/libcurl/lib/strtok.h
deleted file mode 100755
index 1147d70d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strtok.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef HEADER_CURL_STRTOK_H
-#define HEADER_CURL_STRTOK_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-#include <stddef.h>
-
-#ifndef HAVE_STRTOK_R
-char *Curl_strtok_r(char *s, const char *delim, char **last);
-#define strtok_r Curl_strtok_r
-#else
-#include <string.h>
-#endif
-
-#endif /* HEADER_CURL_STRTOK_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/strtoofft.c b/external/libcurl_android/jni/libcurl/lib/strtoofft.c
deleted file mode 100755
index 03a97e8c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strtoofft.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "strtoofft.h"
-
-/*
- * NOTE:
- *
- * In the ISO C standard (IEEE Std 1003.1), there is a strtoimax() function we
- * could use in case strtoll() doesn't exist... See
- * http://www.opengroup.org/onlinepubs/009695399/functions/strtoimax.html
- */
-
-#ifdef NEED_CURL_STRTOLL
-
-/* Range tests can be used for alphanum decoding if characters are consecutive,
- like in ASCII. Else an array is scanned. Determine this condition now. */
-
-#if('9' - '0') != 9 || ('Z' - 'A') != 25 || ('z' - 'a') != 25
-
-#define NO_RANGE_TEST
-
-static const char valchars[] =
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
-#endif
-
-static int get_char(char c, int base);
-
-/**
- * Emulated version of the strtoll function. This extracts a long long
- * value from the given input string and returns it.
- */
-curl_off_t
-curlx_strtoll(const char *nptr, char **endptr, int base)
-{
- char *end;
- int is_negative = 0;
- int overflow;
- int i;
- curl_off_t value = 0;
- curl_off_t newval;
-
- /* Skip leading whitespace. */
- end = (char *)nptr;
- while(ISSPACE(end[0])) {
- end++;
- }
-
- /* Handle the sign, if any. */
- if(end[0] == '-') {
- is_negative = 1;
- end++;
- }
- else if(end[0] == '+') {
- end++;
- }
- else if(end[0] == '\0') {
- /* We had nothing but perhaps some whitespace -- there was no number. */
- if(endptr) {
- *endptr = end;
- }
- return 0;
- }
-
- /* Handle special beginnings, if present and allowed. */
- if(end[0] == '0' && end[1] == 'x') {
- if(base == 16 || base == 0) {
- end += 2;
- base = 16;
- }
- }
- else if(end[0] == '0') {
- if(base == 8 || base == 0) {
- end++;
- base = 8;
- }
- }
-
- /* Matching strtol, if the base is 0 and it doesn't look like
- * the number is octal or hex, we assume it's base 10.
- */
- if(base == 0) {
- base = 10;
- }
-
- /* Loop handling digits. */
- value = 0;
- overflow = 0;
- for(i = get_char(end[0], base);
- i != -1;
- end++, i = get_char(end[0], base)) {
- newval = base * value + i;
- if(newval < value) {
- /* We've overflowed. */
- overflow = 1;
- break;
- }
- else
- value = newval;
- }
-
- if(!overflow) {
- if(is_negative) {
- /* Fix the sign. */
- value *= -1;
- }
- }
- else {
- if(is_negative)
- value = CURL_OFF_T_MIN;
- else
- value = CURL_OFF_T_MAX;
-
- SET_ERRNO(ERANGE);
- }
-
- if(endptr)
- *endptr = end;
-
- return value;
-}
-
-/**
- * Returns the value of c in the given base, or -1 if c cannot
- * be interpreted properly in that base (i.e., is out of range,
- * is a null, etc.).
- *
- * @param c the character to interpret according to base
- * @param base the base in which to interpret c
- *
- * @return the value of c in base, or -1 if c isn't in range
- */
-static int get_char(char c, int base)
-{
-#ifndef NO_RANGE_TEST
- int value = -1;
- if(c <= '9' && c >= '0') {
- value = c - '0';
- }
- else if(c <= 'Z' && c >= 'A') {
- value = c - 'A' + 10;
- }
- else if(c <= 'z' && c >= 'a') {
- value = c - 'a' + 10;
- }
-#else
- const char * cp;
- int value;
-
- cp = memchr(valchars, c, 10 + 26 + 26);
-
- if(!cp)
- return -1;
-
- value = cp - valchars;
-
- if(value >= 10 + 26)
- value -= 26; /* Lowercase. */
-#endif
-
- if(value >= base) {
- value = -1;
- }
-
- return value;
-}
-#endif /* Only present if we need strtoll, but don't have it. */
diff --git a/external/libcurl_android/jni/libcurl/lib/strtoofft.h b/external/libcurl_android/jni/libcurl/lib/strtoofft.h
deleted file mode 100755
index b812a67a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/strtoofft.h
+++ /dev/null
@@ -1,68 +0,0 @@
-#ifndef HEADER_CURL_STRTOOFFT_H
-#define HEADER_CURL_STRTOOFFT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-/*
- * Determine which string to integral data type conversion function we use
- * to implement string conversion to our curl_off_t integral data type.
- *
- * Notice that curl_off_t might be 64 or 32 bit wide, and that it might use
- * an underlying data type which might be 'long', 'int64_t', 'long long' or
- * '__int64' and more remotely other data types.
- *
- * On systems where the size of curl_off_t is greater than the size of 'long'
- * the conversion function to use is strtoll() if it is available, otherwise,
- * we emulate its functionality with our own clone.
- *
- * On systems where the size of curl_off_t is smaller or equal than the size
- * of 'long' the conversion function to use is strtol().
- */
-
-#if (CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
-# ifdef HAVE_STRTOLL
-# define curlx_strtoofft strtoll
-# else
-# if defined(_MSC_VER) && (_MSC_VER >= 1300) && (_INTEGRAL_MAX_BITS >= 64)
- _CRTIMP __int64 __cdecl _strtoi64(const char *, char **, int);
-# define curlx_strtoofft _strtoi64
-# else
- curl_off_t curlx_strtoll(const char *nptr, char **endptr, int base);
-# define curlx_strtoofft curlx_strtoll
-# define NEED_CURL_STRTOLL 1
-# endif
-# endif
-#else
-# define curlx_strtoofft strtol
-#endif
-
-#if (CURL_SIZEOF_CURL_OFF_T == 4)
-# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFF)
-#else
- /* assume CURL_SIZEOF_CURL_OFF_T == 8 */
-# define CURL_OFF_T_MAX CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
-#endif
-#define CURL_OFF_T_MIN (-CURL_OFF_T_MAX - CURL_OFF_T_C(1))
-
-#endif /* HEADER_CURL_STRTOOFFT_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/telnet.c b/external/libcurl_android/jni/libcurl/lib/telnet.c
deleted file mode 100755
index 1f03a00f..00000000
--- a/external/libcurl_android/jni/libcurl/lib/telnet.c
+++ /dev/null
@@ -1,1680 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_TELNET
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "transfer.h"
-#include "sendf.h"
-#include "telnet.h"
-#include "connect.h"
-#include "progress.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#define TELOPTS
-#define TELCMDS
-
-#include "arpa_telnet.h"
-#include "curl_memory.h"
-#include "select.h"
-#include "strequal.h"
-#include "rawstr.h"
-#include "warnless.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#define SUBBUFSIZE 512
-
-#define CURL_SB_CLEAR(x) x->subpointer = x->subbuffer
-#define CURL_SB_TERM(x) \
- do { \
- x->subend = x->subpointer; \
- CURL_SB_CLEAR(x); \
- } WHILE_FALSE
-#define CURL_SB_ACCUM(x,c) \
- do { \
- if(x->subpointer < (x->subbuffer+sizeof x->subbuffer)) \
- *x->subpointer++ = (c); \
- } WHILE_FALSE
-
-#define CURL_SB_GET(x) ((*x->subpointer++)&0xff)
-#define CURL_SB_PEEK(x) ((*x->subpointer)&0xff)
-#define CURL_SB_EOF(x) (x->subpointer >= x->subend)
-#define CURL_SB_LEN(x) (x->subend - x->subpointer)
-
-#ifdef CURL_DISABLE_VERBOSE_STRINGS
-#define printoption(a,b,c,d) Curl_nop_stmt
-#endif
-
-#ifdef USE_WINSOCK
-typedef FARPROC WSOCK2_FUNC;
-static CURLcode check_wsock2 ( struct SessionHandle *data );
-#endif
-
-static
-CURLcode telrcv(struct connectdata *,
- const unsigned char *inbuf, /* Data received from socket */
- ssize_t count); /* Number of bytes received */
-
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-static void printoption(struct SessionHandle *data,
- const char *direction,
- int cmd, int option);
-#endif
-
-static void negotiate(struct connectdata *);
-static void send_negotiation(struct connectdata *, int cmd, int option);
-static void set_local_option(struct connectdata *, int cmd, int option);
-static void set_remote_option(struct connectdata *, int cmd, int option);
-
-static void printsub(struct SessionHandle *data,
- int direction, unsigned char *pointer,
- size_t length);
-static void suboption(struct connectdata *);
-static void sendsuboption(struct connectdata *conn, int option);
-
-static CURLcode telnet_do(struct connectdata *conn, bool *done);
-static CURLcode telnet_done(struct connectdata *conn,
- CURLcode, bool premature);
-static CURLcode send_telnet_data(struct connectdata *conn,
- char *buffer, ssize_t nread);
-
-/* For negotiation compliant to RFC 1143 */
-#define CURL_NO 0
-#define CURL_YES 1
-#define CURL_WANTYES 2
-#define CURL_WANTNO 3
-
-#define CURL_EMPTY 0
-#define CURL_OPPOSITE 1
-
-/*
- * Telnet receiver states for fsm
- */
-typedef enum
-{
- CURL_TS_DATA = 0,
- CURL_TS_IAC,
- CURL_TS_WILL,
- CURL_TS_WONT,
- CURL_TS_DO,
- CURL_TS_DONT,
- CURL_TS_CR,
- CURL_TS_SB, /* sub-option collection */
- CURL_TS_SE /* looking for sub-option end */
-} TelnetReceive;
-
-struct TELNET {
- int please_negotiate;
- int already_negotiated;
- int us[256];
- int usq[256];
- int us_preferred[256];
- int him[256];
- int himq[256];
- int him_preferred[256];
- int subnegotiation[256];
- char subopt_ttype[32]; /* Set with suboption TTYPE */
- char subopt_xdisploc[128]; /* Set with suboption XDISPLOC */
- unsigned short subopt_wsx; /* Set with suboption NAWS */
- unsigned short subopt_wsy; /* Set with suboption NAWS */
- struct curl_slist *telnet_vars; /* Environment variables */
-
- /* suboptions */
- unsigned char subbuffer[SUBBUFSIZE];
- unsigned char *subpointer, *subend; /* buffer for sub-options */
-
- TelnetReceive telrcv_state;
-};
-
-
-/*
- * TELNET protocol handler.
- */
-
-const struct Curl_handler Curl_handler_telnet = {
- "TELNET", /* scheme */
- ZERO_NULL, /* setup_connection */
- telnet_do, /* do_it */
- telnet_done, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_TELNET, /* defport */
- CURLPROTO_TELNET, /* protocol */
- PROTOPT_NONE | PROTOPT_NOURLQUERY /* flags */
-};
-
-
-#ifdef USE_WINSOCK
-static CURLcode
-check_wsock2 ( struct SessionHandle *data )
-{
- int err;
- WORD wVersionRequested;
- WSADATA wsaData;
-
- DEBUGASSERT(data);
-
- /* telnet requires at least WinSock 2.0 so ask for it. */
- wVersionRequested = MAKEWORD(2, 0);
-
- err = WSAStartup(wVersionRequested, &wsaData);
-
- /* We must've called this once already, so this call */
- /* should always succeed. But, just in case... */
- if(err != 0) {
- failf(data,"WSAStartup failed (%d)",err);
- return CURLE_FAILED_INIT;
- }
-
- /* We have to have a WSACleanup call for every successful */
- /* WSAStartup call. */
- WSACleanup();
-
- /* Check that our version is supported */
- if(LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested) ||
- HIBYTE(wsaData.wVersion) != HIBYTE(wVersionRequested)) {
- /* Our version isn't supported */
- failf(data,"insufficient winsock version to support "
- "telnet");
- return CURLE_FAILED_INIT;
- }
-
- /* Our version is supported */
- return CURLE_OK;
-}
-#endif
-
-static
-CURLcode init_telnet(struct connectdata *conn)
-{
- struct TELNET *tn;
-
- tn = calloc(1, sizeof(struct TELNET));
- if(!tn)
- return CURLE_OUT_OF_MEMORY;
-
- conn->data->req.protop = tn; /* make us known */
-
- tn->telrcv_state = CURL_TS_DATA;
-
- /* Init suboptions */
- CURL_SB_CLEAR(tn);
-
- /* Set the options we want by default */
- tn->us_preferred[CURL_TELOPT_SGA] = CURL_YES;
- tn->him_preferred[CURL_TELOPT_SGA] = CURL_YES;
-
- /* To be compliant with previous releases of libcurl
- we enable this option by default. This behaviour
- can be changed thanks to the "BINARY" option in
- CURLOPT_TELNETOPTIONS
- */
- tn->us_preferred[CURL_TELOPT_BINARY] = CURL_YES;
- tn->him_preferred[CURL_TELOPT_BINARY] = CURL_YES;
-
- /* We must allow the server to echo what we sent
- but it is not necessary to request the server
- to do so (it might forces the server to close
- the connection). Hence, we ignore ECHO in the
- negotiate function
- */
- tn->him_preferred[CURL_TELOPT_ECHO] = CURL_YES;
-
- /* Set the subnegotiation fields to send information
- just after negotiation passed (do/will)
-
- Default values are (0,0) initialized by calloc.
- According to the RFC1013 it is valid:
- A value equal to zero is acceptable for the width (or height),
- and means that no character width (or height) is being sent.
- In this case, the width (or height) that will be assumed by the
- Telnet server is operating system specific (it will probably be
- based upon the terminal type information that may have been sent
- using the TERMINAL TYPE Telnet option). */
- tn->subnegotiation[CURL_TELOPT_NAWS] = CURL_YES;
- return CURLE_OK;
-}
-
-static void negotiate(struct connectdata *conn)
-{
- int i;
- struct TELNET *tn = (struct TELNET *) conn->data->req.protop;
-
- for(i = 0;i < CURL_NTELOPTS;i++) {
- if(i==CURL_TELOPT_ECHO)
- continue;
-
- if(tn->us_preferred[i] == CURL_YES)
- set_local_option(conn, i, CURL_YES);
-
- if(tn->him_preferred[i] == CURL_YES)
- set_remote_option(conn, i, CURL_YES);
- }
-}
-
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-static void printoption(struct SessionHandle *data,
- const char *direction, int cmd, int option)
-{
- const char *fmt;
- const char *opt;
-
- if(data->set.verbose) {
- if(cmd == CURL_IAC) {
- if(CURL_TELCMD_OK(option))
- infof(data, "%s IAC %s\n", direction, CURL_TELCMD(option));
- else
- infof(data, "%s IAC %d\n", direction, option);
- }
- else {
- fmt = (cmd == CURL_WILL) ? "WILL" : (cmd == CURL_WONT) ? "WONT" :
- (cmd == CURL_DO) ? "DO" : (cmd == CURL_DONT) ? "DONT" : 0;
- if(fmt) {
- if(CURL_TELOPT_OK(option))
- opt = CURL_TELOPT(option);
- else if(option == CURL_TELOPT_EXOPL)
- opt = "EXOPL";
- else
- opt = NULL;
-
- if(opt)
- infof(data, "%s %s %s\n", direction, fmt, opt);
- else
- infof(data, "%s %s %d\n", direction, fmt, option);
- }
- else
- infof(data, "%s %d %d\n", direction, cmd, option);
- }
- }
-}
-#endif
-
-static void send_negotiation(struct connectdata *conn, int cmd, int option)
-{
- unsigned char buf[3];
- ssize_t bytes_written;
- int err;
- struct SessionHandle *data = conn->data;
-
- buf[0] = CURL_IAC;
- buf[1] = (unsigned char)cmd;
- buf[2] = (unsigned char)option;
-
- bytes_written = swrite(conn->sock[FIRSTSOCKET], buf, 3);
- if(bytes_written < 0) {
- err = SOCKERRNO;
- failf(data,"Sending data failed (%d)",err);
- }
-
- printoption(conn->data, "SENT", cmd, option);
-}
-
-static
-void set_remote_option(struct connectdata *conn, int option, int newstate)
-{
- struct TELNET *tn = (struct TELNET *)conn->data->req.protop;
- if(newstate == CURL_YES) {
- switch(tn->him[option]) {
- case CURL_NO:
- tn->him[option] = CURL_WANTYES;
- send_negotiation(conn, CURL_DO, option);
- break;
-
- case CURL_YES:
- /* Already enabled */
- break;
-
- case CURL_WANTNO:
- switch(tn->himq[option]) {
- case CURL_EMPTY:
- /* Already negotiating for CURL_YES, queue the request */
- tn->himq[option] = CURL_OPPOSITE;
- break;
- case CURL_OPPOSITE:
- /* Error: already queued an enable request */
- break;
- }
- break;
-
- case CURL_WANTYES:
- switch(tn->himq[option]) {
- case CURL_EMPTY:
- /* Error: already negotiating for enable */
- break;
- case CURL_OPPOSITE:
- tn->himq[option] = CURL_EMPTY;
- break;
- }
- break;
- }
- }
- else { /* NO */
- switch(tn->him[option]) {
- case CURL_NO:
- /* Already disabled */
- break;
-
- case CURL_YES:
- tn->him[option] = CURL_WANTNO;
- send_negotiation(conn, CURL_DONT, option);
- break;
-
- case CURL_WANTNO:
- switch(tn->himq[option]) {
- case CURL_EMPTY:
- /* Already negotiating for NO */
- break;
- case CURL_OPPOSITE:
- tn->himq[option] = CURL_EMPTY;
- break;
- }
- break;
-
- case CURL_WANTYES:
- switch(tn->himq[option]) {
- case CURL_EMPTY:
- tn->himq[option] = CURL_OPPOSITE;
- break;
- case CURL_OPPOSITE:
- break;
- }
- break;
- }
- }
-}
-
-static
-void rec_will(struct connectdata *conn, int option)
-{
- struct TELNET *tn = (struct TELNET *)conn->data->req.protop;
- switch(tn->him[option]) {
- case CURL_NO:
- if(tn->him_preferred[option] == CURL_YES) {
- tn->him[option] = CURL_YES;
- send_negotiation(conn, CURL_DO, option);
- }
- else
- send_negotiation(conn, CURL_DONT, option);
-
- break;
-
- case CURL_YES:
- /* Already enabled */
- break;
-
- case CURL_WANTNO:
- switch(tn->himq[option]) {
- case CURL_EMPTY:
- /* Error: DONT answered by WILL */
- tn->him[option] = CURL_NO;
- break;
- case CURL_OPPOSITE:
- /* Error: DONT answered by WILL */
- tn->him[option] = CURL_YES;
- tn->himq[option] = CURL_EMPTY;
- break;
- }
- break;
-
- case CURL_WANTYES:
- switch(tn->himq[option]) {
- case CURL_EMPTY:
- tn->him[option] = CURL_YES;
- break;
- case CURL_OPPOSITE:
- tn->him[option] = CURL_WANTNO;
- tn->himq[option] = CURL_EMPTY;
- send_negotiation(conn, CURL_DONT, option);
- break;
- }
- break;
- }
-}
-
-static
-void rec_wont(struct connectdata *conn, int option)
-{
- struct TELNET *tn = (struct TELNET *)conn->data->req.protop;
- switch(tn->him[option]) {
- case CURL_NO:
- /* Already disabled */
- break;
-
- case CURL_YES:
- tn->him[option] = CURL_NO;
- send_negotiation(conn, CURL_DONT, option);
- break;
-
- case CURL_WANTNO:
- switch(tn->himq[option]) {
- case CURL_EMPTY:
- tn->him[option] = CURL_NO;
- break;
-
- case CURL_OPPOSITE:
- tn->him[option] = CURL_WANTYES;
- tn->himq[option] = CURL_EMPTY;
- send_negotiation(conn, CURL_DO, option);
- break;
- }
- break;
-
- case CURL_WANTYES:
- switch(tn->himq[option]) {
- case CURL_EMPTY:
- tn->him[option] = CURL_NO;
- break;
- case CURL_OPPOSITE:
- tn->him[option] = CURL_NO;
- tn->himq[option] = CURL_EMPTY;
- break;
- }
- break;
- }
-}
-
-static void
-set_local_option(struct connectdata *conn, int option, int newstate)
-{
- struct TELNET *tn = (struct TELNET *)conn->data->req.protop;
- if(newstate == CURL_YES) {
- switch(tn->us[option]) {
- case CURL_NO:
- tn->us[option] = CURL_WANTYES;
- send_negotiation(conn, CURL_WILL, option);
- break;
-
- case CURL_YES:
- /* Already enabled */
- break;
-
- case CURL_WANTNO:
- switch(tn->usq[option]) {
- case CURL_EMPTY:
- /* Already negotiating for CURL_YES, queue the request */
- tn->usq[option] = CURL_OPPOSITE;
- break;
- case CURL_OPPOSITE:
- /* Error: already queued an enable request */
- break;
- }
- break;
-
- case CURL_WANTYES:
- switch(tn->usq[option]) {
- case CURL_EMPTY:
- /* Error: already negotiating for enable */
- break;
- case CURL_OPPOSITE:
- tn->usq[option] = CURL_EMPTY;
- break;
- }
- break;
- }
- }
- else { /* NO */
- switch(tn->us[option]) {
- case CURL_NO:
- /* Already disabled */
- break;
-
- case CURL_YES:
- tn->us[option] = CURL_WANTNO;
- send_negotiation(conn, CURL_WONT, option);
- break;
-
- case CURL_WANTNO:
- switch(tn->usq[option]) {
- case CURL_EMPTY:
- /* Already negotiating for NO */
- break;
- case CURL_OPPOSITE:
- tn->usq[option] = CURL_EMPTY;
- break;
- }
- break;
-
- case CURL_WANTYES:
- switch(tn->usq[option]) {
- case CURL_EMPTY:
- tn->usq[option] = CURL_OPPOSITE;
- break;
- case CURL_OPPOSITE:
- break;
- }
- break;
- }
- }
-}
-
-static
-void rec_do(struct connectdata *conn, int option)
-{
- struct TELNET *tn = (struct TELNET *)conn->data->req.protop;
- switch(tn->us[option]) {
- case CURL_NO:
- if(tn->us_preferred[option] == CURL_YES) {
- tn->us[option] = CURL_YES;
- send_negotiation(conn, CURL_WILL, option);
- if(tn->subnegotiation[option] == CURL_YES)
- /* transmission of data option */
- sendsuboption(conn, option);
- }
- else if(tn->subnegotiation[option] == CURL_YES) {
- /* send information to achieve this option*/
- tn->us[option] = CURL_YES;
- send_negotiation(conn, CURL_WILL, option);
- sendsuboption(conn, option);
- }
- else
- send_negotiation(conn, CURL_WONT, option);
- break;
-
- case CURL_YES:
- /* Already enabled */
- break;
-
- case CURL_WANTNO:
- switch(tn->usq[option]) {
- case CURL_EMPTY:
- /* Error: DONT answered by WILL */
- tn->us[option] = CURL_NO;
- break;
- case CURL_OPPOSITE:
- /* Error: DONT answered by WILL */
- tn->us[option] = CURL_YES;
- tn->usq[option] = CURL_EMPTY;
- break;
- }
- break;
-
- case CURL_WANTYES:
- switch(tn->usq[option]) {
- case CURL_EMPTY:
- tn->us[option] = CURL_YES;
- if(tn->subnegotiation[option] == CURL_YES) {
- /* transmission of data option */
- sendsuboption(conn, option);
- }
- break;
- case CURL_OPPOSITE:
- tn->us[option] = CURL_WANTNO;
- tn->himq[option] = CURL_EMPTY;
- send_negotiation(conn, CURL_WONT, option);
- break;
- }
- break;
- }
-}
-
-static
-void rec_dont(struct connectdata *conn, int option)
-{
- struct TELNET *tn = (struct TELNET *)conn->data->req.protop;
- switch(tn->us[option]) {
- case CURL_NO:
- /* Already disabled */
- break;
-
- case CURL_YES:
- tn->us[option] = CURL_NO;
- send_negotiation(conn, CURL_WONT, option);
- break;
-
- case CURL_WANTNO:
- switch(tn->usq[option]) {
- case CURL_EMPTY:
- tn->us[option] = CURL_NO;
- break;
-
- case CURL_OPPOSITE:
- tn->us[option] = CURL_WANTYES;
- tn->usq[option] = CURL_EMPTY;
- send_negotiation(conn, CURL_WILL, option);
- break;
- }
- break;
-
- case CURL_WANTYES:
- switch(tn->usq[option]) {
- case CURL_EMPTY:
- tn->us[option] = CURL_NO;
- break;
- case CURL_OPPOSITE:
- tn->us[option] = CURL_NO;
- tn->usq[option] = CURL_EMPTY;
- break;
- }
- break;
- }
-}
-
-
-static void printsub(struct SessionHandle *data,
- int direction, /* '<' or '>' */
- unsigned char *pointer, /* where suboption data is */
- size_t length) /* length of suboption data */
-{
- unsigned int i = 0;
- unsigned short *pval;
-
- if(data->set.verbose) {
- if(direction) {
- infof(data, "%s IAC SB ", (direction == '<')? "RCVD":"SENT");
- if(length >= 3) {
- int j;
-
- i = pointer[length-2];
- j = pointer[length-1];
-
- if(i != CURL_IAC || j != CURL_SE) {
- infof(data, "(terminated by ");
- if(CURL_TELOPT_OK(i))
- infof(data, "%s ", CURL_TELOPT(i));
- else if(CURL_TELCMD_OK(i))
- infof(data, "%s ", CURL_TELCMD(i));
- else
- infof(data, "%u ", i);
- if(CURL_TELOPT_OK(j))
- infof(data, "%s", CURL_TELOPT(j));
- else if(CURL_TELCMD_OK(j))
- infof(data, "%s", CURL_TELCMD(j));
- else
- infof(data, "%d", j);
- infof(data, ", not IAC SE!) ");
- }
- }
- length -= 2;
- }
- if(length < 1) {
- infof(data, "(Empty suboption?)");
- return;
- }
-
- if(CURL_TELOPT_OK(pointer[0])) {
- switch(pointer[0]) {
- case CURL_TELOPT_TTYPE:
- case CURL_TELOPT_XDISPLOC:
- case CURL_TELOPT_NEW_ENVIRON:
- case CURL_TELOPT_NAWS:
- infof(data, "%s", CURL_TELOPT(pointer[0]));
- break;
- default:
- infof(data, "%s (unsupported)", CURL_TELOPT(pointer[0]));
- break;
- }
- }
- else
- infof(data, "%d (unknown)", pointer[i]);
-
- switch(pointer[0]) {
- case CURL_TELOPT_NAWS:
- pval = (unsigned short*)(pointer+1);
- infof(data, "Width: %hu ; Height: %hu",
- ntohs(pval[0]), ntohs(pval[1]));
- break;
- default:
- switch(pointer[1]) {
- case CURL_TELQUAL_IS:
- infof(data, " IS");
- break;
- case CURL_TELQUAL_SEND:
- infof(data, " SEND");
- break;
- case CURL_TELQUAL_INFO:
- infof(data, " INFO/REPLY");
- break;
- case CURL_TELQUAL_NAME:
- infof(data, " NAME");
- break;
- }
-
- switch(pointer[0]) {
- case CURL_TELOPT_TTYPE:
- case CURL_TELOPT_XDISPLOC:
- pointer[length] = 0;
- infof(data, " \"%s\"", &pointer[2]);
- break;
- case CURL_TELOPT_NEW_ENVIRON:
- if(pointer[1] == CURL_TELQUAL_IS) {
- infof(data, " ");
- for(i = 3;i < length;i++) {
- switch(pointer[i]) {
- case CURL_NEW_ENV_VAR:
- infof(data, ", ");
- break;
- case CURL_NEW_ENV_VALUE:
- infof(data, " = ");
- break;
- default:
- infof(data, "%c", pointer[i]);
- break;
- }
- }
- }
- break;
- default:
- for(i = 2; i < length; i++)
- infof(data, " %.2x", pointer[i]);
- break;
- }
- }
- if(direction)
- infof(data, "\n");
- }
-}
-
-static CURLcode check_telnet_options(struct connectdata *conn)
-{
- struct curl_slist *head;
- struct curl_slist *beg;
- char option_keyword[128] = "";
- char option_arg[256] = "";
- struct SessionHandle *data = conn->data;
- struct TELNET *tn = (struct TELNET *)conn->data->req.protop;
- CURLcode result = CURLE_OK;
- int binary_option;
-
- /* Add the user name as an environment variable if it
- was given on the command line */
- if(conn->bits.user_passwd) {
- snprintf(option_arg, sizeof(option_arg), "USER,%s", conn->user);
- beg = curl_slist_append(tn->telnet_vars, option_arg);
- if(!beg) {
- curl_slist_free_all(tn->telnet_vars);
- tn->telnet_vars = NULL;
- return CURLE_OUT_OF_MEMORY;
- }
- tn->telnet_vars = beg;
- tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
- }
-
- for(head = data->set.telnet_options; head; head=head->next) {
- if(sscanf(head->data, "%127[^= ]%*[ =]%255s",
- option_keyword, option_arg) == 2) {
-
- /* Terminal type */
- if(Curl_raw_equal(option_keyword, "TTYPE")) {
- strncpy(tn->subopt_ttype, option_arg, 31);
- tn->subopt_ttype[31] = 0; /* String termination */
- tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES;
- continue;
- }
-
- /* Display variable */
- if(Curl_raw_equal(option_keyword, "XDISPLOC")) {
- strncpy(tn->subopt_xdisploc, option_arg, 127);
- tn->subopt_xdisploc[127] = 0; /* String termination */
- tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES;
- continue;
- }
-
- /* Environment variable */
- if(Curl_raw_equal(option_keyword, "NEW_ENV")) {
- beg = curl_slist_append(tn->telnet_vars, option_arg);
- if(!beg) {
- result = CURLE_OUT_OF_MEMORY;
- break;
- }
- tn->telnet_vars = beg;
- tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES;
- continue;
- }
-
- /* Window Size */
- if(Curl_raw_equal(option_keyword, "WS")) {
- if(sscanf(option_arg, "%hu%*[xX]%hu",
- &tn->subopt_wsx, &tn->subopt_wsy) == 2)
- tn->us_preferred[CURL_TELOPT_NAWS] = CURL_YES;
- else {
- failf(data, "Syntax error in telnet option: %s", head->data);
- result = CURLE_TELNET_OPTION_SYNTAX;
- break;
- }
- continue;
- }
-
- /* To take care or not of the 8th bit in data exchange */
- if(Curl_raw_equal(option_keyword, "BINARY")) {
- binary_option=atoi(option_arg);
- if(binary_option!=1) {
- tn->us_preferred[CURL_TELOPT_BINARY] = CURL_NO;
- tn->him_preferred[CURL_TELOPT_BINARY] = CURL_NO;
- }
- continue;
- }
-
- failf(data, "Unknown telnet option %s", head->data);
- result = CURLE_UNKNOWN_TELNET_OPTION;
- break;
- }
- else {
- failf(data, "Syntax error in telnet option: %s", head->data);
- result = CURLE_TELNET_OPTION_SYNTAX;
- break;
- }
- }
-
- if(result) {
- curl_slist_free_all(tn->telnet_vars);
- tn->telnet_vars = NULL;
- }
-
- return result;
-}
-
-/*
- * suboption()
- *
- * Look at the sub-option buffer, and try to be helpful to the other
- * side.
- */
-
-static void suboption(struct connectdata *conn)
-{
- struct curl_slist *v;
- unsigned char temp[2048];
- ssize_t bytes_written;
- size_t len;
- size_t tmplen;
- int err;
- char varname[128] = "";
- char varval[128] = "";
- struct SessionHandle *data = conn->data;
- struct TELNET *tn = (struct TELNET *)data->req.protop;
-
- printsub(data, '<', (unsigned char *)tn->subbuffer, CURL_SB_LEN(tn)+2);
- switch (CURL_SB_GET(tn)) {
- case CURL_TELOPT_TTYPE:
- len = strlen(tn->subopt_ttype) + 4 + 2;
- snprintf((char *)temp, sizeof(temp),
- "%c%c%c%c%s%c%c", CURL_IAC, CURL_SB, CURL_TELOPT_TTYPE,
- CURL_TELQUAL_IS, tn->subopt_ttype, CURL_IAC, CURL_SE);
- bytes_written = swrite(conn->sock[FIRSTSOCKET], temp, len);
- if(bytes_written < 0) {
- err = SOCKERRNO;
- failf(data,"Sending data failed (%d)",err);
- }
- printsub(data, '>', &temp[2], len-2);
- break;
- case CURL_TELOPT_XDISPLOC:
- len = strlen(tn->subopt_xdisploc) + 4 + 2;
- snprintf((char *)temp, sizeof(temp),
- "%c%c%c%c%s%c%c", CURL_IAC, CURL_SB, CURL_TELOPT_XDISPLOC,
- CURL_TELQUAL_IS, tn->subopt_xdisploc, CURL_IAC, CURL_SE);
- bytes_written = swrite(conn->sock[FIRSTSOCKET], temp, len);
- if(bytes_written < 0) {
- err = SOCKERRNO;
- failf(data,"Sending data failed (%d)",err);
- }
- printsub(data, '>', &temp[2], len-2);
- break;
- case CURL_TELOPT_NEW_ENVIRON:
- snprintf((char *)temp, sizeof(temp),
- "%c%c%c%c", CURL_IAC, CURL_SB, CURL_TELOPT_NEW_ENVIRON,
- CURL_TELQUAL_IS);
- len = 4;
-
- for(v = tn->telnet_vars;v;v = v->next) {
- tmplen = (strlen(v->data) + 1);
- /* Add the variable only if it fits */
- if(len + tmplen < (int)sizeof(temp)-6) {
- if(sscanf(v->data, "%127[^,],%127s", varname, varval)) {
- snprintf((char *)&temp[len], sizeof(temp) - len,
- "%c%s%c%s", CURL_NEW_ENV_VAR, varname,
- CURL_NEW_ENV_VALUE, varval);
- len += tmplen;
- }
- }
- }
- snprintf((char *)&temp[len], sizeof(temp) - len,
- "%c%c", CURL_IAC, CURL_SE);
- len += 2;
- bytes_written = swrite(conn->sock[FIRSTSOCKET], temp, len);
- if(bytes_written < 0) {
- err = SOCKERRNO;
- failf(data,"Sending data failed (%d)",err);
- }
- printsub(data, '>', &temp[2], len-2);
- break;
- }
- return;
-}
-
-
-/*
- * sendsuboption()
- *
- * Send suboption information to the server side.
- */
-
-static void sendsuboption(struct connectdata *conn, int option)
-{
- ssize_t bytes_written;
- int err;
- unsigned short x, y;
- unsigned char*uc1, *uc2;
-
- struct SessionHandle *data = conn->data;
- struct TELNET *tn = (struct TELNET *)data->req.protop;
-
- switch (option) {
- case CURL_TELOPT_NAWS:
- /* We prepare data to be sent */
- CURL_SB_CLEAR(tn);
- CURL_SB_ACCUM(tn, CURL_IAC);
- CURL_SB_ACCUM(tn, CURL_SB);
- CURL_SB_ACCUM(tn, CURL_TELOPT_NAWS);
- /* We must deal either with litte or big endien processors */
- /* Window size must be sent according to the 'network order' */
- x=htons(tn->subopt_wsx);
- y=htons(tn->subopt_wsy);
- uc1 = (unsigned char*)&x;
- uc2 = (unsigned char*)&y;
- CURL_SB_ACCUM(tn, uc1[0]);
- CURL_SB_ACCUM(tn, uc1[1]);
- CURL_SB_ACCUM(tn, uc2[0]);
- CURL_SB_ACCUM(tn, uc2[1]);
-
- CURL_SB_ACCUM(tn, CURL_IAC);
- CURL_SB_ACCUM(tn, CURL_SE);
- CURL_SB_TERM(tn);
- /* data suboption is now ready */
-
- printsub(data, '>', (unsigned char *)tn->subbuffer+2,
- CURL_SB_LEN(tn)-2);
-
- /* we send the header of the suboption... */
- bytes_written = swrite(conn->sock[FIRSTSOCKET], tn->subbuffer, 3);
- if(bytes_written < 0) {
- err = SOCKERRNO;
- failf(data, "Sending data failed (%d)", err);
- }
- /* ... then the window size with the send_telnet_data() function
- to deal with 0xFF cases ... */
- send_telnet_data(conn, (char *)tn->subbuffer+3, 4);
- /* ... and the footer */
- bytes_written = swrite(conn->sock[FIRSTSOCKET], tn->subbuffer+7, 2);
- if(bytes_written < 0) {
- err = SOCKERRNO;
- failf(data, "Sending data failed (%d)", err);
- }
- break;
- }
-}
-
-
-static
-CURLcode telrcv(struct connectdata *conn,
- const unsigned char *inbuf, /* Data received from socket */
- ssize_t count) /* Number of bytes received */
-{
- unsigned char c;
- CURLcode result;
- int in = 0;
- int startwrite=-1;
- struct SessionHandle *data = conn->data;
- struct TELNET *tn = (struct TELNET *)data->req.protop;
-
-#define startskipping() \
- if(startwrite >= 0) { \
- result = Curl_client_write(conn, \
- CLIENTWRITE_BODY, \
- (char *)&inbuf[startwrite], \
- in-startwrite); \
- if(result != CURLE_OK) \
- return result; \
- } \
- startwrite = -1
-
-#define writebyte() \
- if(startwrite < 0) \
- startwrite = in
-
-#define bufferflush() startskipping()
-
- while(count--) {
- c = inbuf[in];
-
- switch (tn->telrcv_state) {
- case CURL_TS_CR:
- tn->telrcv_state = CURL_TS_DATA;
- if(c == '\0') {
- startskipping();
- break; /* Ignore \0 after CR */
- }
- writebyte();
- break;
-
- case CURL_TS_DATA:
- if(c == CURL_IAC) {
- tn->telrcv_state = CURL_TS_IAC;
- startskipping();
- break;
- }
- else if(c == '\r')
- tn->telrcv_state = CURL_TS_CR;
- writebyte();
- break;
-
- case CURL_TS_IAC:
- process_iac:
- DEBUGASSERT(startwrite < 0);
- switch (c) {
- case CURL_WILL:
- tn->telrcv_state = CURL_TS_WILL;
- break;
- case CURL_WONT:
- tn->telrcv_state = CURL_TS_WONT;
- break;
- case CURL_DO:
- tn->telrcv_state = CURL_TS_DO;
- break;
- case CURL_DONT:
- tn->telrcv_state = CURL_TS_DONT;
- break;
- case CURL_SB:
- CURL_SB_CLEAR(tn);
- tn->telrcv_state = CURL_TS_SB;
- break;
- case CURL_IAC:
- tn->telrcv_state = CURL_TS_DATA;
- writebyte();
- break;
- case CURL_DM:
- case CURL_NOP:
- case CURL_GA:
- default:
- tn->telrcv_state = CURL_TS_DATA;
- printoption(data, "RCVD", CURL_IAC, c);
- break;
- }
- break;
-
- case CURL_TS_WILL:
- printoption(data, "RCVD", CURL_WILL, c);
- tn->please_negotiate = 1;
- rec_will(conn, c);
- tn->telrcv_state = CURL_TS_DATA;
- break;
-
- case CURL_TS_WONT:
- printoption(data, "RCVD", CURL_WONT, c);
- tn->please_negotiate = 1;
- rec_wont(conn, c);
- tn->telrcv_state = CURL_TS_DATA;
- break;
-
- case CURL_TS_DO:
- printoption(data, "RCVD", CURL_DO, c);
- tn->please_negotiate = 1;
- rec_do(conn, c);
- tn->telrcv_state = CURL_TS_DATA;
- break;
-
- case CURL_TS_DONT:
- printoption(data, "RCVD", CURL_DONT, c);
- tn->please_negotiate = 1;
- rec_dont(conn, c);
- tn->telrcv_state = CURL_TS_DATA;
- break;
-
- case CURL_TS_SB:
- if(c == CURL_IAC)
- tn->telrcv_state = CURL_TS_SE;
- else
- CURL_SB_ACCUM(tn,c);
- break;
-
- case CURL_TS_SE:
- if(c != CURL_SE) {
- if(c != CURL_IAC) {
- /*
- * This is an error. We only expect to get "IAC IAC" or "IAC SE".
- * Several things may have happened. An IAC was not doubled, the
- * IAC SE was left off, or another option got inserted into the
- * suboption are all possibilities. If we assume that the IAC was
- * not doubled, and really the IAC SE was left off, we could get
- * into an infinate loop here. So, instead, we terminate the
- * suboption, and process the partial suboption if we can.
- */
- CURL_SB_ACCUM(tn, CURL_IAC);
- CURL_SB_ACCUM(tn, c);
- tn->subpointer -= 2;
- CURL_SB_TERM(tn);
-
- printoption(data, "In SUBOPTION processing, RCVD", CURL_IAC, c);
- suboption(conn); /* handle sub-option */
- tn->telrcv_state = CURL_TS_IAC;
- goto process_iac;
- }
- CURL_SB_ACCUM(tn,c);
- tn->telrcv_state = CURL_TS_SB;
- }
- else
- {
- CURL_SB_ACCUM(tn, CURL_IAC);
- CURL_SB_ACCUM(tn, CURL_SE);
- tn->subpointer -= 2;
- CURL_SB_TERM(tn);
- suboption(conn); /* handle sub-option */
- tn->telrcv_state = CURL_TS_DATA;
- }
- break;
- }
- ++in;
- }
- bufferflush();
- return CURLE_OK;
-}
-
-/* Escape and send a telnet data block */
-/* TODO: write large chunks of data instead of one byte at a time */
-static CURLcode send_telnet_data(struct connectdata *conn,
- char *buffer, ssize_t nread)
-{
- unsigned char outbuf[2];
- ssize_t bytes_written, total_written;
- int out_count;
- CURLcode rc = CURLE_OK;
-
- while(rc == CURLE_OK && nread--) {
- outbuf[0] = *buffer++;
- out_count = 1;
- if(outbuf[0] == CURL_IAC)
- outbuf[out_count++] = CURL_IAC;
-
- total_written = 0;
- do {
- /* Make sure socket is writable to avoid EWOULDBLOCK condition */
- struct pollfd pfd[1];
- pfd[0].fd = conn->sock[FIRSTSOCKET];
- pfd[0].events = POLLOUT;
- switch (Curl_poll(pfd, 1, -1)) {
- case -1: /* error, abort writing */
- case 0: /* timeout (will never happen) */
- rc = CURLE_SEND_ERROR;
- break;
- default: /* write! */
- bytes_written = 0;
- rc = Curl_write(conn, conn->sock[FIRSTSOCKET], outbuf+total_written,
- out_count-total_written, &bytes_written);
- total_written += bytes_written;
- break;
- }
- /* handle partial write */
- } while(rc == CURLE_OK && total_written < out_count);
- }
- return rc;
-}
-
-static CURLcode telnet_done(struct connectdata *conn,
- CURLcode status, bool premature)
-{
- struct TELNET *tn = (struct TELNET *)conn->data->req.protop;
- (void)status; /* unused */
- (void)premature; /* not used */
-
- if(!tn)
- return CURLE_OK;
-
- curl_slist_free_all(tn->telnet_vars);
- tn->telnet_vars = NULL;
-
- Curl_safefree(conn->data->req.protop);
-
- return CURLE_OK;
-}
-
-static CURLcode telnet_do(struct connectdata *conn, bool *done)
-{
- CURLcode code;
- struct SessionHandle *data = conn->data;
- curl_socket_t sockfd = conn->sock[FIRSTSOCKET];
-#ifdef USE_WINSOCK
- HMODULE wsock2;
- WSOCK2_FUNC close_event_func;
- WSOCK2_FUNC create_event_func;
- WSOCK2_FUNC event_select_func;
- WSOCK2_FUNC enum_netevents_func;
- WSAEVENT event_handle;
- WSANETWORKEVENTS events;
- HANDLE stdin_handle;
- HANDLE objs[2];
- DWORD obj_count;
- DWORD wait_timeout;
- DWORD waitret;
- DWORD readfile_read;
- int err;
-#else
- int interval_ms;
- struct pollfd pfd[2];
- int poll_cnt;
- curl_off_t total_dl = 0;
- curl_off_t total_ul = 0;
-#endif
- ssize_t nread;
- struct timeval now;
- bool keepon = TRUE;
- char *buf = data->state.buffer;
- struct TELNET *tn;
-
- *done = TRUE; /* unconditionally */
-
- code = init_telnet(conn);
- if(code)
- return code;
-
- tn = (struct TELNET *)data->req.protop;
-
- code = check_telnet_options(conn);
- if(code)
- return code;
-
-#ifdef USE_WINSOCK
- /*
- ** This functionality only works with WinSock >= 2.0. So,
- ** make sure have it.
- */
- code = check_wsock2(data);
- if(code)
- return code;
-
- /* OK, so we have WinSock 2.0. We need to dynamically */
- /* load ws2_32.dll and get the function pointers we need. */
- wsock2 = LoadLibrary(TEXT("WS2_32.DLL"));
- if(wsock2 == NULL) {
- failf(data,"failed to load WS2_32.DLL (%d)", ERRNO);
- return CURLE_FAILED_INIT;
- }
-
- /* Grab a pointer to WSACreateEvent */
- create_event_func = GetProcAddress(wsock2,"WSACreateEvent");
- if(create_event_func == NULL) {
- failf(data,"failed to find WSACreateEvent function (%d)",
- ERRNO);
- FreeLibrary(wsock2);
- return CURLE_FAILED_INIT;
- }
-
- /* And WSACloseEvent */
- close_event_func = GetProcAddress(wsock2,"WSACloseEvent");
- if(close_event_func == NULL) {
- failf(data,"failed to find WSACloseEvent function (%d)",
- ERRNO);
- FreeLibrary(wsock2);
- return CURLE_FAILED_INIT;
- }
-
- /* And WSAEventSelect */
- event_select_func = GetProcAddress(wsock2,"WSAEventSelect");
- if(event_select_func == NULL) {
- failf(data,"failed to find WSAEventSelect function (%d)",
- ERRNO);
- FreeLibrary(wsock2);
- return CURLE_FAILED_INIT;
- }
-
- /* And WSAEnumNetworkEvents */
- enum_netevents_func = GetProcAddress(wsock2,"WSAEnumNetworkEvents");
- if(enum_netevents_func == NULL) {
- failf(data,"failed to find WSAEnumNetworkEvents function (%d)",
- ERRNO);
- FreeLibrary(wsock2);
- return CURLE_FAILED_INIT;
- }
-
- /* We want to wait for both stdin and the socket. Since
- ** the select() function in winsock only works on sockets
- ** we have to use the WaitForMultipleObjects() call.
- */
-
- /* First, create a sockets event object */
- event_handle = (WSAEVENT)create_event_func();
- if(event_handle == WSA_INVALID_EVENT) {
- failf(data,"WSACreateEvent failed (%d)", SOCKERRNO);
- FreeLibrary(wsock2);
- return CURLE_FAILED_INIT;
- }
-
- /* Tell winsock what events we want to listen to */
- if(event_select_func(sockfd, event_handle, FD_READ|FD_CLOSE) ==
- SOCKET_ERROR) {
- close_event_func(event_handle);
- FreeLibrary(wsock2);
- return CURLE_OK;
- }
-
- /* The get the Windows file handle for stdin */
- stdin_handle = GetStdHandle(STD_INPUT_HANDLE);
-
- /* Create the list of objects to wait for */
- objs[0] = event_handle;
- objs[1] = stdin_handle;
-
- /* If stdin_handle is a pipe, use PeekNamedPipe() method to check it,
- else use the old WaitForMultipleObjects() way */
- if(GetFileType(stdin_handle) == FILE_TYPE_PIPE ||
- data->set.is_fread_set) {
- /* Don't wait for stdin_handle, just wait for event_handle */
- obj_count = 1;
- /* Check stdin_handle per 100 milliseconds */
- wait_timeout = 100;
- }
- else {
- obj_count = 2;
- wait_timeout = 1000;
- }
-
- /* Keep on listening and act on events */
- while(keepon) {
- waitret = WaitForMultipleObjects(obj_count, objs, FALSE, wait_timeout);
- switch(waitret) {
- case WAIT_TIMEOUT:
- {
- for(;;) {
- if(obj_count == 1) {
- /* read from user-supplied method */
- code = (int)conn->fread_func(buf, 1, BUFSIZE - 1, conn->fread_in);
- if(code == CURL_READFUNC_ABORT) {
- keepon = FALSE;
- code = CURLE_READ_ERROR;
- break;
- }
-
- if(code == CURL_READFUNC_PAUSE)
- break;
-
- if(code == 0) /* no bytes */
- break;
-
- readfile_read = code; /* fall thru with number of bytes read */
- }
- else {
- /* read from stdin */
- if(!PeekNamedPipe(stdin_handle, NULL, 0, NULL,
- &readfile_read, NULL)) {
- keepon = FALSE;
- code = CURLE_READ_ERROR;
- break;
- }
-
- if(!readfile_read)
- break;
-
- if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),
- &readfile_read, NULL)) {
- keepon = FALSE;
- code = CURLE_READ_ERROR;
- break;
- }
- }
-
- code = send_telnet_data(conn, buf, readfile_read);
- if(code) {
- keepon = FALSE;
- break;
- }
- }
- }
- break;
-
- case WAIT_OBJECT_0 + 1:
- {
- if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),
- &readfile_read, NULL)) {
- keepon = FALSE;
- code = CURLE_READ_ERROR;
- break;
- }
-
- code = send_telnet_data(conn, buf, readfile_read);
- if(code) {
- keepon = FALSE;
- break;
- }
- }
- break;
-
- case WAIT_OBJECT_0:
-
- events.lNetworkEvents = 0;
- if(SOCKET_ERROR == enum_netevents_func(sockfd, event_handle, &events)) {
- if((err = SOCKERRNO) != EINPROGRESS) {
- infof(data,"WSAEnumNetworkEvents failed (%d)", err);
- keepon = FALSE;
- code = CURLE_READ_ERROR;
- }
- break;
- }
- if(events.lNetworkEvents & FD_READ) {
- /* read data from network */
- code = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
- /* read would've blocked. Loop again */
- if(code == CURLE_AGAIN)
- break;
- /* returned not-zero, this an error */
- else if(code) {
- keepon = FALSE;
- break;
- }
- /* returned zero but actually received 0 or less here,
- the server closed the connection and we bail out */
- else if(nread <= 0) {
- keepon = FALSE;
- break;
- }
-
- code = telrcv(conn, (unsigned char *)buf, nread);
- if(code) {
- keepon = FALSE;
- break;
- }
-
- /* Negotiate if the peer has started negotiating,
- otherwise don't. We don't want to speak telnet with
- non-telnet servers, like POP or SMTP. */
- if(tn->please_negotiate && !tn->already_negotiated) {
- negotiate(conn);
- tn->already_negotiated = 1;
- }
- }
- if(events.lNetworkEvents & FD_CLOSE) {
- keepon = FALSE;
- }
- break;
-
- }
-
- if(data->set.timeout) {
- now = Curl_tvnow();
- if(Curl_tvdiff(now, conn->created) >= data->set.timeout) {
- failf(data, "Time-out");
- code = CURLE_OPERATION_TIMEDOUT;
- keepon = FALSE;
- }
- }
- }
-
- /* We called WSACreateEvent, so call WSACloseEvent */
- if(!close_event_func(event_handle)) {
- infof(data,"WSACloseEvent failed (%d)", SOCKERRNO);
- }
-
- /* "Forget" pointers into the library we're about to free */
- create_event_func = NULL;
- close_event_func = NULL;
- event_select_func = NULL;
- enum_netevents_func = NULL;
-
- /* We called LoadLibrary, so call FreeLibrary */
- if(!FreeLibrary(wsock2))
- infof(data,"FreeLibrary(wsock2) failed (%d)", ERRNO);
-#else
- pfd[0].fd = sockfd;
- pfd[0].events = POLLIN;
-
- if(conn->fread_func != (curl_read_callback)fread) {
- poll_cnt = 1;
- interval_ms = 100; /* poll user-supplied read function */
- }
- else {
- /* really using fread, so infile is a FILE* */
- pfd[1].fd = fileno((FILE *)conn->fread_in);
- pfd[1].events = POLLIN;
- poll_cnt = 2;
- interval_ms = 1 * 1000;
- }
-
- while(keepon) {
- switch (Curl_poll(pfd, poll_cnt, interval_ms)) {
- case -1: /* error, stop reading */
- keepon = FALSE;
- continue;
- case 0: /* timeout */
- pfd[0].revents = 0;
- pfd[1].revents = 0;
- /* fall through */
- default: /* read! */
- if(pfd[0].revents & POLLIN) {
- /* read data from network */
- code = Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);
- /* read would've blocked. Loop again */
- if(code == CURLE_AGAIN)
- break;
- /* returned not-zero, this an error */
- else if(code) {
- keepon = FALSE;
- break;
- }
- /* returned zero but actually received 0 or less here,
- the server closed the connection and we bail out */
- else if(nread <= 0) {
- keepon = FALSE;
- break;
- }
-
- total_dl += nread;
- Curl_pgrsSetDownloadCounter(data, total_dl);
- code = telrcv(conn, (unsigned char *)buf, nread);
- if(code) {
- keepon = FALSE;
- break;
- }
-
- /* Negotiate if the peer has started negotiating,
- otherwise don't. We don't want to speak telnet with
- non-telnet servers, like POP or SMTP. */
- if(tn->please_negotiate && !tn->already_negotiated) {
- negotiate(conn);
- tn->already_negotiated = 1;
- }
- }
-
- nread = 0;
- if(poll_cnt == 2) {
- if(pfd[1].revents & POLLIN) { /* read from in file */
- nread = read(pfd[1].fd, buf, BUFSIZE - 1);
- }
- }
- else {
- /* read from user-supplied method */
- nread = (int)conn->fread_func(buf, 1, BUFSIZE - 1, conn->fread_in);
- if(nread == CURL_READFUNC_ABORT) {
- keepon = FALSE;
- break;
- }
- if(nread == CURL_READFUNC_PAUSE)
- break;
- }
-
- if(nread > 0) {
- code = send_telnet_data(conn, buf, nread);
- if(code) {
- keepon = FALSE;
- break;
- }
- total_ul += nread;
- Curl_pgrsSetUploadCounter(data, total_ul);
- }
- else if(nread < 0)
- keepon = FALSE;
-
- break;
- } /* poll switch statement */
-
- if(data->set.timeout) {
- now = Curl_tvnow();
- if(Curl_tvdiff(now, conn->created) >= data->set.timeout) {
- failf(data, "Time-out");
- code = CURLE_OPERATION_TIMEDOUT;
- keepon = FALSE;
- }
- }
-
- if(Curl_pgrsUpdate(conn)) {
- code = CURLE_ABORTED_BY_CALLBACK;
- break;
- }
- }
-#endif
- /* mark this as "no further transfer wanted" */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
-
- return code;
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/telnet.h b/external/libcurl_android/jni/libcurl/lib/telnet.h
deleted file mode 100755
index ddb9e547..00000000
--- a/external/libcurl_android/jni/libcurl/lib/telnet.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef HEADER_CURL_TELNET_H
-#define HEADER_CURL_TELNET_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#ifndef CURL_DISABLE_TELNET
-extern const struct Curl_handler Curl_handler_telnet;
-#endif
-
-#endif /* HEADER_CURL_TELNET_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/tftp.c b/external/libcurl_android/jni/libcurl/lib/tftp.c
deleted file mode 100755
index e499c451..00000000
--- a/external/libcurl_android/jni/libcurl/lib/tftp.c
+++ /dev/null
@@ -1,1375 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifndef CURL_DISABLE_TFTP
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "transfer.h"
-#include "sendf.h"
-#include "tftp.h"
-#include "progress.h"
-#include "connect.h"
-#include "strerror.h"
-#include "sockaddr.h" /* required for Curl_sockaddr_storage */
-#include "multiif.h"
-#include "url.h"
-#include "rawstr.h"
-#include "speedcheck.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-#include "select.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* RFC2348 allows the block size to be negotiated */
-#define TFTP_BLKSIZE_DEFAULT 512
-#define TFTP_BLKSIZE_MIN 8
-#define TFTP_BLKSIZE_MAX 65464
-#define TFTP_OPTION_BLKSIZE "blksize"
-
-/* from RFC2349: */
-#define TFTP_OPTION_TSIZE "tsize"
-#define TFTP_OPTION_INTERVAL "timeout"
-
-typedef enum {
- TFTP_MODE_NETASCII=0,
- TFTP_MODE_OCTET
-} tftp_mode_t;
-
-typedef enum {
- TFTP_STATE_START=0,
- TFTP_STATE_RX,
- TFTP_STATE_TX,
- TFTP_STATE_FIN
-} tftp_state_t;
-
-typedef enum {
- TFTP_EVENT_NONE = -1,
- TFTP_EVENT_INIT = 0,
- TFTP_EVENT_RRQ = 1,
- TFTP_EVENT_WRQ = 2,
- TFTP_EVENT_DATA = 3,
- TFTP_EVENT_ACK = 4,
- TFTP_EVENT_ERROR = 5,
- TFTP_EVENT_OACK = 6,
- TFTP_EVENT_TIMEOUT
-} tftp_event_t;
-
-typedef enum {
- TFTP_ERR_UNDEF=0,
- TFTP_ERR_NOTFOUND,
- TFTP_ERR_PERM,
- TFTP_ERR_DISKFULL,
- TFTP_ERR_ILLEGAL,
- TFTP_ERR_UNKNOWNID,
- TFTP_ERR_EXISTS,
- TFTP_ERR_NOSUCHUSER, /* This will never be triggered by this code */
-
- /* The remaining error codes are internal to curl */
- TFTP_ERR_NONE = -100,
- TFTP_ERR_TIMEOUT,
- TFTP_ERR_NORESPONSE
-} tftp_error_t;
-
-typedef struct tftp_packet {
- unsigned char *data;
-} tftp_packet_t;
-
-typedef struct tftp_state_data {
- tftp_state_t state;
- tftp_mode_t mode;
- tftp_error_t error;
- tftp_event_t event;
- struct connectdata *conn;
- curl_socket_t sockfd;
- int retries;
- int retry_time;
- int retry_max;
- time_t start_time;
- time_t max_time;
- time_t rx_time;
- unsigned short block;
- struct Curl_sockaddr_storage local_addr;
- struct Curl_sockaddr_storage remote_addr;
- curl_socklen_t remote_addrlen;
- int rbytes;
- int sbytes;
- int blksize;
- int requested_blksize;
- tftp_packet_t rpacket;
- tftp_packet_t spacket;
-} tftp_state_data_t;
-
-
-/* Forward declarations */
-static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event) ;
-static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event) ;
-static CURLcode tftp_connect(struct connectdata *conn, bool *done);
-static CURLcode tftp_disconnect(struct connectdata *conn,
- bool dead_connection);
-static CURLcode tftp_do(struct connectdata *conn, bool *done);
-static CURLcode tftp_done(struct connectdata *conn,
- CURLcode, bool premature);
-static CURLcode tftp_setup_connection(struct connectdata * conn);
-static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done);
-static CURLcode tftp_doing(struct connectdata *conn, bool *dophase_done);
-static int tftp_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks);
-static CURLcode tftp_translate_code(tftp_error_t error);
-
-
-/*
- * TFTP protocol handler.
- */
-
-const struct Curl_handler Curl_handler_tftp = {
- "TFTP", /* scheme */
- tftp_setup_connection, /* setup_connection */
- tftp_do, /* do_it */
- tftp_done, /* done */
- ZERO_NULL, /* do_more */
- tftp_connect, /* connect_it */
- tftp_multi_statemach, /* connecting */
- tftp_doing, /* doing */
- tftp_getsock, /* proto_getsock */
- tftp_getsock, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- tftp_disconnect, /* disconnect */
- ZERO_NULL, /* readwrite */
- PORT_TFTP, /* defport */
- CURLPROTO_TFTP, /* protocol */
- PROTOPT_NONE | PROTOPT_NOURLQUERY /* flags */
-};
-
-/**********************************************************
- *
- * tftp_set_timeouts -
- *
- * Set timeouts based on state machine state.
- * Use user provided connect timeouts until DATA or ACK
- * packet is received, then use user-provided transfer timeouts
- *
- *
- **********************************************************/
-static CURLcode tftp_set_timeouts(tftp_state_data_t *state)
-{
- time_t maxtime, timeout;
- long timeout_ms;
- bool start = (state->state == TFTP_STATE_START) ? TRUE : FALSE;
-
- time(&state->start_time);
-
- /* Compute drop-dead time */
- timeout_ms = Curl_timeleft(state->conn->data, NULL, start);
-
- if(timeout_ms < 0) {
- /* time-out, bail out, go home */
- failf(state->conn->data, "Connection time-out");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- if(start) {
-
- maxtime = (time_t)(timeout_ms + 500) / 1000;
- state->max_time = state->start_time+maxtime;
-
- /* Set per-block timeout to total */
- timeout = maxtime ;
-
- /* Average restart after 5 seconds */
- state->retry_max = (int)timeout/5;
-
- if(state->retry_max < 1)
- /* avoid division by zero below */
- state->retry_max = 1;
-
- /* Compute the re-start interval to suit the timeout */
- state->retry_time = (int)timeout/state->retry_max;
- if(state->retry_time<1)
- state->retry_time=1;
-
- }
- else {
- if(timeout_ms > 0)
- maxtime = (time_t)(timeout_ms + 500) / 1000;
- else
- maxtime = 3600;
-
- state->max_time = state->start_time+maxtime;
-
- /* Set per-block timeout to total */
- timeout = maxtime;
-
- /* Average reposting an ACK after 5 seconds */
- state->retry_max = (int)timeout/5;
- }
- /* But bound the total number */
- if(state->retry_max<3)
- state->retry_max=3;
-
- if(state->retry_max>50)
- state->retry_max=50;
-
- /* Compute the re-ACK interval to suit the timeout */
- state->retry_time = (int)(timeout/state->retry_max);
- if(state->retry_time<1)
- state->retry_time=1;
-
- infof(state->conn->data,
- "set timeouts for state %d; Total %ld, retry %d maxtry %d\n",
- (int)state->state, (long)(state->max_time-state->start_time),
- state->retry_time, state->retry_max);
-
- /* init RX time */
- time(&state->rx_time);
-
- return CURLE_OK;
-}
-
-/**********************************************************
- *
- * tftp_set_send_first
- *
- * Event handler for the START state
- *
- **********************************************************/
-
-static void setpacketevent(tftp_packet_t *packet, unsigned short num)
-{
- packet->data[0] = (unsigned char)(num >> 8);
- packet->data[1] = (unsigned char)(num & 0xff);
-}
-
-
-static void setpacketblock(tftp_packet_t *packet, unsigned short num)
-{
- packet->data[2] = (unsigned char)(num >> 8);
- packet->data[3] = (unsigned char)(num & 0xff);
-}
-
-static unsigned short getrpacketevent(const tftp_packet_t *packet)
-{
- return (unsigned short)((packet->data[0] << 8) | packet->data[1]);
-}
-
-static unsigned short getrpacketblock(const tftp_packet_t *packet)
-{
- return (unsigned short)((packet->data[2] << 8) | packet->data[3]);
-}
-
-static size_t Curl_strnlen(const char *string, size_t maxlen)
-{
- const char *end = memchr (string, '\0', maxlen);
- return end ? (size_t) (end - string) : maxlen;
-}
-
-static const char *tftp_option_get(const char *buf, size_t len,
- const char **option, const char **value)
-{
- size_t loc;
-
- loc = Curl_strnlen( buf, len );
- loc++; /* NULL term */
-
- if(loc >= len)
- return NULL;
- *option = buf;
-
- loc += Curl_strnlen( buf+loc, len-loc );
- loc++; /* NULL term */
-
- if(loc > len)
- return NULL;
- *value = &buf[strlen(*option) + 1];
-
- return &buf[loc];
-}
-
-static CURLcode tftp_parse_option_ack(tftp_state_data_t *state,
- const char *ptr, int len)
-{
- const char *tmp = ptr;
- struct SessionHandle *data = state->conn->data;
-
- /* if OACK doesn't contain blksize option, the default (512) must be used */
- state->blksize = TFTP_BLKSIZE_DEFAULT;
-
- while(tmp < ptr + len) {
- const char *option, *value;
-
- tmp = tftp_option_get(tmp, ptr + len - tmp, &option, &value);
- if(tmp == NULL) {
- failf(data, "Malformed ACK packet, rejecting");
- return CURLE_TFTP_ILLEGAL;
- }
-
- infof(data, "got option=(%s) value=(%s)\n", option, value);
-
- if(checkprefix(option, TFTP_OPTION_BLKSIZE)) {
- long blksize;
-
- blksize = strtol( value, NULL, 10 );
-
- if(!blksize) {
- failf(data, "invalid blocksize value in OACK packet");
- return CURLE_TFTP_ILLEGAL;
- }
- else if(blksize > TFTP_BLKSIZE_MAX) {
- failf(data, "%s (%d)", "blksize is larger than max supported",
- TFTP_BLKSIZE_MAX);
- return CURLE_TFTP_ILLEGAL;
- }
- else if(blksize < TFTP_BLKSIZE_MIN) {
- failf(data, "%s (%d)", "blksize is smaller than min supported",
- TFTP_BLKSIZE_MIN);
- return CURLE_TFTP_ILLEGAL;
- }
- else if(blksize > state->requested_blksize) {
- /* could realloc pkt buffers here, but the spec doesn't call out
- * support for the server requesting a bigger blksize than the client
- * requests */
- failf(data, "%s (%ld)",
- "server requested blksize larger than allocated", blksize);
- return CURLE_TFTP_ILLEGAL;
- }
-
- state->blksize = (int)blksize;
- infof(data, "%s (%d) %s (%d)\n", "blksize parsed from OACK",
- state->blksize, "requested", state->requested_blksize);
- }
- else if(checkprefix(option, TFTP_OPTION_TSIZE)) {
- long tsize = 0;
-
- tsize = strtol( value, NULL, 10 );
- infof(data, "%s (%ld)\n", "tsize parsed from OACK", tsize);
-
- /* tsize should be ignored on upload: Who cares about the size of the
- remote file? */
- if(!data->set.upload) {
- if(!tsize) {
- failf(data, "invalid tsize -:%s:- value in OACK packet", value);
- return CURLE_TFTP_ILLEGAL;
- }
- Curl_pgrsSetDownloadSize(data, tsize);
- }
- }
- }
-
- return CURLE_OK;
-}
-
-static size_t tftp_option_add(tftp_state_data_t *state, size_t csize,
- char *buf, const char *option)
-{
- if(( strlen(option) + csize + 1 ) > (size_t)state->blksize)
- return 0;
- strcpy(buf, option);
- return( strlen(option) + 1 );
-}
-
-static CURLcode tftp_connect_for_tx(tftp_state_data_t *state,
- tftp_event_t event)
-{
- CURLcode res;
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- struct SessionHandle *data = state->conn->data;
-
- infof(data, "%s\n", "Connected for transmit");
-#endif
- state->state = TFTP_STATE_TX;
- res = tftp_set_timeouts(state);
- if(res != CURLE_OK)
- return(res);
- return tftp_tx(state, event);
-}
-
-static CURLcode tftp_connect_for_rx(tftp_state_data_t *state,
- tftp_event_t event)
-{
- CURLcode res;
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- struct SessionHandle *data = state->conn->data;
-
- infof(data, "%s\n", "Connected for receive");
-#endif
- state->state = TFTP_STATE_RX;
- res = tftp_set_timeouts(state);
- if(res != CURLE_OK)
- return(res);
- return tftp_rx(state, event);
-}
-
-static CURLcode tftp_send_first(tftp_state_data_t *state, tftp_event_t event)
-{
- size_t sbytes;
- ssize_t senddata;
- const char *mode = "octet";
- char *filename;
- char buf[64];
- struct SessionHandle *data = state->conn->data;
- CURLcode res = CURLE_OK;
-
- /* Set ascii mode if -B flag was used */
- if(data->set.prefer_ascii)
- mode = "netascii";
-
- switch(event) {
-
- case TFTP_EVENT_INIT: /* Send the first packet out */
- case TFTP_EVENT_TIMEOUT: /* Resend the first packet out */
- /* Increment the retry counter, quit if over the limit */
- state->retries++;
- if(state->retries>state->retry_max) {
- state->error = TFTP_ERR_NORESPONSE;
- state->state = TFTP_STATE_FIN;
- return res;
- }
-
- if(data->set.upload) {
- /* If we are uploading, send an WRQ */
- setpacketevent(&state->spacket, TFTP_EVENT_WRQ);
- state->conn->data->req.upload_fromhere =
- (char *)state->spacket.data+4;
- if(data->state.infilesize != -1)
- Curl_pgrsSetUploadSize(data, data->state.infilesize);
- }
- else {
- /* If we are downloading, send an RRQ */
- setpacketevent(&state->spacket, TFTP_EVENT_RRQ);
- }
- /* As RFC3617 describes the separator slash is not actually part of the
- file name so we skip the always-present first letter of the path
- string. */
- filename = curl_easy_unescape(data, &state->conn->data->state.path[1], 0,
- NULL);
- if(!filename)
- return CURLE_OUT_OF_MEMORY;
-
- snprintf((char *)state->spacket.data+2,
- state->blksize,
- "%s%c%s%c", filename, '\0', mode, '\0');
- sbytes = 4 + strlen(filename) + strlen(mode);
-
- /* add tsize option */
- if(data->set.upload && (data->state.infilesize != -1))
- snprintf(buf, sizeof(buf), "%" CURL_FORMAT_CURL_OFF_T,
- data->state.infilesize);
- else
- strcpy(buf, "0"); /* the destination is large enough */
-
- sbytes += tftp_option_add(state, sbytes,
- (char *)state->spacket.data+sbytes,
- TFTP_OPTION_TSIZE);
- sbytes += tftp_option_add(state, sbytes,
- (char *)state->spacket.data+sbytes, buf);
- /* add blksize option */
- snprintf( buf, sizeof(buf), "%d", state->requested_blksize );
- sbytes += tftp_option_add(state, sbytes,
- (char *)state->spacket.data+sbytes,
- TFTP_OPTION_BLKSIZE);
- sbytes += tftp_option_add(state, sbytes,
- (char *)state->spacket.data+sbytes, buf );
-
- /* add timeout option */
- snprintf( buf, sizeof(buf), "%d", state->retry_time);
- sbytes += tftp_option_add(state, sbytes,
- (char *)state->spacket.data+sbytes,
- TFTP_OPTION_INTERVAL);
- sbytes += tftp_option_add(state, sbytes,
- (char *)state->spacket.data+sbytes, buf );
-
- /* the typecase for the 3rd argument is mostly for systems that do
- not have a size_t argument, like older unixes that want an 'int' */
- senddata = sendto(state->sockfd, (void *)state->spacket.data,
- (SEND_TYPE_ARG3)sbytes, 0,
- state->conn->ip_addr->ai_addr,
- state->conn->ip_addr->ai_addrlen);
- if(senddata != (ssize_t)sbytes) {
- failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
- }
- Curl_safefree(filename);
- break;
-
- case TFTP_EVENT_OACK:
- if(data->set.upload) {
- res = tftp_connect_for_tx(state, event);
- }
- else {
- res = tftp_connect_for_rx(state, event);
- }
- break;
-
- case TFTP_EVENT_ACK: /* Connected for transmit */
- res = tftp_connect_for_tx(state, event);
- break;
-
- case TFTP_EVENT_DATA: /* Connected for receive */
- res = tftp_connect_for_rx(state, event);
- break;
-
- case TFTP_EVENT_ERROR:
- state->state = TFTP_STATE_FIN;
- break;
-
- default:
- failf(state->conn->data, "tftp_send_first: internal error");
- break;
- }
- return res;
-}
-
-/* the next blocknum is x + 1 but it needs to wrap at an unsigned 16bit
- boundary */
-#define NEXT_BLOCKNUM(x) (((x)+1)&0xffff)
-
-/**********************************************************
- *
- * tftp_rx
- *
- * Event handler for the RX state
- *
- **********************************************************/
-static CURLcode tftp_rx(tftp_state_data_t *state, tftp_event_t event)
-{
- ssize_t sbytes;
- int rblock;
- struct SessionHandle *data = state->conn->data;
-
- switch(event) {
-
- case TFTP_EVENT_DATA:
- /* Is this the block we expect? */
- rblock = getrpacketblock(&state->rpacket);
- if(NEXT_BLOCKNUM(state->block) == rblock) {
- /* This is the expected block. Reset counters and ACK it. */
- state->retries = 0;
- }
- else if(state->block == rblock) {
- /* This is the last recently received block again. Log it and ACK it
- again. */
- infof(data, "Received last DATA packet block %d again.\n", rblock);
- }
- else {
- /* totally unexpected, just log it */
- infof(data,
- "Received unexpected DATA packet block %d, expecting block %d\n",
- rblock, NEXT_BLOCKNUM(state->block));
- break;
- }
-
- /* ACK this block. */
- state->block = (unsigned short)rblock;
- setpacketevent(&state->spacket, TFTP_EVENT_ACK);
- setpacketblock(&state->spacket, state->block);
- sbytes = sendto(state->sockfd, (void *)state->spacket.data,
- 4, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- if(sbytes < 0) {
- failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
- return CURLE_SEND_ERROR;
- }
-
- /* Check if completed (That is, a less than full packet is received) */
- if(state->rbytes < (ssize_t)state->blksize+4) {
- state->state = TFTP_STATE_FIN;
- }
- else {
- state->state = TFTP_STATE_RX;
- }
- time(&state->rx_time);
- break;
-
- case TFTP_EVENT_OACK:
- /* ACK option acknowledgement so we can move on to data */
- state->block = 0;
- state->retries = 0;
- setpacketevent(&state->spacket, TFTP_EVENT_ACK);
- setpacketblock(&state->spacket, state->block);
- sbytes = sendto(state->sockfd, (void *)state->spacket.data,
- 4, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- if(sbytes < 0) {
- failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
- return CURLE_SEND_ERROR;
- }
-
- /* we're ready to RX data */
- state->state = TFTP_STATE_RX;
- time(&state->rx_time);
- break;
-
- case TFTP_EVENT_TIMEOUT:
- /* Increment the retry count and fail if over the limit */
- state->retries++;
- infof(data,
- "Timeout waiting for block %d ACK. Retries = %d\n",
- NEXT_BLOCKNUM(state->block), state->retries);
- if(state->retries > state->retry_max) {
- state->error = TFTP_ERR_TIMEOUT;
- state->state = TFTP_STATE_FIN;
- }
- else {
- /* Resend the previous ACK */
- sbytes = sendto(state->sockfd, (void *)state->spacket.data,
- 4, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- if(sbytes<0) {
- failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
- return CURLE_SEND_ERROR;
- }
- }
- break;
-
- case TFTP_EVENT_ERROR:
- setpacketevent(&state->spacket, TFTP_EVENT_ERROR);
- setpacketblock(&state->spacket, state->block);
- (void)sendto(state->sockfd, (void *)state->spacket.data,
- 4, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- /* don't bother with the return code, but if the socket is still up we
- * should be a good TFTP client and let the server know we're done */
- state->state = TFTP_STATE_FIN;
- break;
-
- default:
- failf(data, "%s", "tftp_rx: internal error");
- return CURLE_TFTP_ILLEGAL; /* not really the perfect return code for
- this */
- }
- return CURLE_OK;
-}
-
-/**********************************************************
- *
- * tftp_tx
- *
- * Event handler for the TX state
- *
- **********************************************************/
-static CURLcode tftp_tx(tftp_state_data_t *state, tftp_event_t event)
-{
- struct SessionHandle *data = state->conn->data;
- ssize_t sbytes;
- int rblock;
- CURLcode res = CURLE_OK;
- struct SingleRequest *k = &data->req;
-
- switch(event) {
-
- case TFTP_EVENT_ACK:
- case TFTP_EVENT_OACK:
- if(event == TFTP_EVENT_ACK) {
- /* Ack the packet */
- rblock = getrpacketblock(&state->rpacket);
-
- if(rblock != state->block &&
- /* There's a bug in tftpd-hpa that causes it to send us an ack for
- * 65535 when the block number wraps to 0. So when we're expecting
- * 0, also accept 65535. See
- * http://syslinux.zytor.com/archives/2010-September/015253.html
- * */
- !(state->block == 0 && rblock == 65535)) {
- /* This isn't the expected block. Log it and up the retry counter */
- infof(data, "Received ACK for block %d, expecting %d\n",
- rblock, state->block);
- state->retries++;
- /* Bail out if over the maximum */
- if(state->retries>state->retry_max) {
- failf(data, "tftp_tx: giving up waiting for block %d ack",
- state->block);
- res = CURLE_SEND_ERROR;
- }
- else {
- /* Re-send the data packet */
- sbytes = sendto(state->sockfd, (void *)state->spacket.data,
- 4+state->sbytes, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- /* Check all sbytes were sent */
- if(sbytes<0) {
- failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
- res = CURLE_SEND_ERROR;
- }
- }
- return res;
- }
- /* This is the expected packet. Reset the counters and send the next
- block */
- time(&state->rx_time);
- state->block++;
- }
- else
- state->block = 1; /* first data block is 1 when using OACK */
-
- state->retries = 0;
- setpacketevent(&state->spacket, TFTP_EVENT_DATA);
- setpacketblock(&state->spacket, state->block);
- if(state->block > 1 && state->sbytes < (int)state->blksize) {
- state->state = TFTP_STATE_FIN;
- return CURLE_OK;
- }
- res = Curl_fillreadbuffer(state->conn, state->blksize, &state->sbytes);
- if(res)
- return res;
- sbytes = sendto(state->sockfd, (void *)state->spacket.data,
- 4+state->sbytes, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- /* Check all sbytes were sent */
- if(sbytes<0) {
- failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
- return CURLE_SEND_ERROR;
- }
- /* Update the progress meter */
- k->writebytecount += state->sbytes;
- Curl_pgrsSetUploadCounter(data, k->writebytecount);
- break;
-
- case TFTP_EVENT_TIMEOUT:
- /* Increment the retry counter and log the timeout */
- state->retries++;
- infof(data, "Timeout waiting for block %d ACK. "
- " Retries = %d\n", NEXT_BLOCKNUM(state->block), state->retries);
- /* Decide if we've had enough */
- if(state->retries > state->retry_max) {
- state->error = TFTP_ERR_TIMEOUT;
- state->state = TFTP_STATE_FIN;
- }
- else {
- /* Re-send the data packet */
- sbytes = sendto(state->sockfd, (void *)state->spacket.data,
- 4+state->sbytes, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- /* Check all sbytes were sent */
- if(sbytes<0) {
- failf(data, "%s", Curl_strerror(state->conn, SOCKERRNO));
- return CURLE_SEND_ERROR;
- }
- /* since this was a re-send, we remain at the still byte position */
- Curl_pgrsSetUploadCounter(data, k->writebytecount);
- }
- break;
-
- case TFTP_EVENT_ERROR:
- state->state = TFTP_STATE_FIN;
- setpacketevent(&state->spacket, TFTP_EVENT_ERROR);
- setpacketblock(&state->spacket, state->block);
- (void)sendto(state->sockfd, (void *)state->spacket.data, 4, SEND_4TH_ARG,
- (struct sockaddr *)&state->remote_addr,
- state->remote_addrlen);
- /* don't bother with the return code, but if the socket is still up we
- * should be a good TFTP client and let the server know we're done */
- state->state = TFTP_STATE_FIN;
- break;
-
- default:
- failf(data, "tftp_tx: internal error, event: %i", (int)(event));
- break;
- }
-
- return res;
-}
-
-/**********************************************************
- *
- * tftp_translate_code
- *
- * Translate internal error codes to CURL error codes
- *
- **********************************************************/
-static CURLcode tftp_translate_code(tftp_error_t error)
-{
- CURLcode code = CURLE_OK;
-
- if(error != TFTP_ERR_NONE) {
- switch(error) {
- case TFTP_ERR_NOTFOUND:
- code = CURLE_TFTP_NOTFOUND;
- break;
- case TFTP_ERR_PERM:
- code = CURLE_TFTP_PERM;
- break;
- case TFTP_ERR_DISKFULL:
- code = CURLE_REMOTE_DISK_FULL;
- break;
- case TFTP_ERR_UNDEF:
- case TFTP_ERR_ILLEGAL:
- code = CURLE_TFTP_ILLEGAL;
- break;
- case TFTP_ERR_UNKNOWNID:
- code = CURLE_TFTP_UNKNOWNID;
- break;
- case TFTP_ERR_EXISTS:
- code = CURLE_REMOTE_FILE_EXISTS;
- break;
- case TFTP_ERR_NOSUCHUSER:
- code = CURLE_TFTP_NOSUCHUSER;
- break;
- case TFTP_ERR_TIMEOUT:
- code = CURLE_OPERATION_TIMEDOUT;
- break;
- case TFTP_ERR_NORESPONSE:
- code = CURLE_COULDNT_CONNECT;
- break;
- default:
- code= CURLE_ABORTED_BY_CALLBACK;
- break;
- }
- }
- else {
- code = CURLE_OK;
- }
-
- return(code);
-}
-
-/**********************************************************
- *
- * tftp_state_machine
- *
- * The tftp state machine event dispatcher
- *
- **********************************************************/
-static CURLcode tftp_state_machine(tftp_state_data_t *state,
- tftp_event_t event)
-{
- CURLcode res = CURLE_OK;
- struct SessionHandle *data = state->conn->data;
- switch(state->state) {
- case TFTP_STATE_START:
- DEBUGF(infof(data, "TFTP_STATE_START\n"));
- res = tftp_send_first(state, event);
- break;
- case TFTP_STATE_RX:
- DEBUGF(infof(data, "TFTP_STATE_RX\n"));
- res = tftp_rx(state, event);
- break;
- case TFTP_STATE_TX:
- DEBUGF(infof(data, "TFTP_STATE_TX\n"));
- res = tftp_tx(state, event);
- break;
- case TFTP_STATE_FIN:
- infof(data, "%s\n", "TFTP finished");
- break;
- default:
- DEBUGF(infof(data, "STATE: %d\n", state->state));
- failf(data, "%s", "Internal state machine error");
- res = CURLE_TFTP_ILLEGAL;
- break;
- }
- return res;
-}
-
-/**********************************************************
- *
- * tftp_disconnect
- *
- * The disconnect callback
- *
- **********************************************************/
-static CURLcode tftp_disconnect(struct connectdata *conn, bool dead_connection)
-{
- tftp_state_data_t *state = conn->proto.tftpc;
- (void) dead_connection;
-
- /* done, free dynamically allocated pkt buffers */
- if(state) {
- Curl_safefree(state->rpacket.data);
- Curl_safefree(state->spacket.data);
- free(state);
- }
-
- return CURLE_OK;
-}
-
-/**********************************************************
- *
- * tftp_connect
- *
- * The connect callback
- *
- **********************************************************/
-static CURLcode tftp_connect(struct connectdata *conn, bool *done)
-{
- CURLcode code;
- tftp_state_data_t *state;
- int blksize, rc;
-
- blksize = TFTP_BLKSIZE_DEFAULT;
-
- state = conn->proto.tftpc = calloc(1, sizeof(tftp_state_data_t));
- if(!state)
- return CURLE_OUT_OF_MEMORY;
-
- /* alloc pkt buffers based on specified blksize */
- if(conn->data->set.tftp_blksize) {
- blksize = (int)conn->data->set.tftp_blksize;
- if(blksize > TFTP_BLKSIZE_MAX || blksize < TFTP_BLKSIZE_MIN )
- return CURLE_TFTP_ILLEGAL;
- }
-
- if(!state->rpacket.data) {
- state->rpacket.data = calloc(1, blksize + 2 + 2);
-
- if(!state->rpacket.data)
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(!state->spacket.data) {
- state->spacket.data = calloc(1, blksize + 2 + 2);
-
- if(!state->spacket.data)
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* we don't keep TFTP connections up bascially because there's none or very
- * little gain for UDP */
- connclose(conn, "TFTP");
-
- state->conn = conn;
- state->sockfd = state->conn->sock[FIRSTSOCKET];
- state->state = TFTP_STATE_START;
- state->error = TFTP_ERR_NONE;
- state->blksize = TFTP_BLKSIZE_DEFAULT;
- state->requested_blksize = blksize;
-
- ((struct sockaddr *)&state->local_addr)->sa_family =
- (unsigned short)(conn->ip_addr->ai_family);
-
- tftp_set_timeouts(state);
-
- if(!conn->bits.bound) {
- /* If not already bound, bind to any interface, random UDP port. If it is
- * reused or a custom local port was desired, this has already been done!
- *
- * We once used the size of the local_addr struct as the third argument
- * for bind() to better work with IPv6 or whatever size the struct could
- * have, but we learned that at least Tru64, AIX and IRIX *requires* the
- * size of that argument to match the exact size of a 'sockaddr_in' struct
- * when running IPv4-only.
- *
- * Therefore we use the size from the address we connected to, which we
- * assume uses the same IP version and thus hopefully this works for both
- * IPv4 and IPv6...
- */
- rc = bind(state->sockfd, (struct sockaddr *)&state->local_addr,
- conn->ip_addr->ai_addrlen);
- if(rc) {
- failf(conn->data, "bind() failed; %s",
- Curl_strerror(conn, SOCKERRNO));
- return CURLE_COULDNT_CONNECT;
- }
- conn->bits.bound = TRUE;
- }
-
- Curl_pgrsStartNow(conn->data);
-
- *done = TRUE;
- code = CURLE_OK;
- return(code);
-}
-
-/**********************************************************
- *
- * tftp_done
- *
- * The done callback
- *
- **********************************************************/
-static CURLcode tftp_done(struct connectdata *conn, CURLcode status,
- bool premature)
-{
- CURLcode code = CURLE_OK;
- tftp_state_data_t *state = (tftp_state_data_t *)conn->proto.tftpc;
-
- (void)status; /* unused */
- (void)premature; /* not used */
-
- if(Curl_pgrsDone(conn))
- return CURLE_ABORTED_BY_CALLBACK;
-
- /* If we have encountered an error */
- if(state)
- code = tftp_translate_code(state->error);
-
- return code;
-}
-
-/**********************************************************
- *
- * tftp_getsock
- *
- * The getsock callback
- *
- **********************************************************/
-static int tftp_getsock(struct connectdata *conn, curl_socket_t *socks,
- int numsocks)
-{
- if(!numsocks)
- return GETSOCK_BLANK;
-
- socks[0] = conn->sock[FIRSTSOCKET];
-
- return GETSOCK_READSOCK(0);
-}
-
-/**********************************************************
- *
- * tftp_receive_packet
- *
- * Called once select fires and data is ready on the socket
- *
- **********************************************************/
-static CURLcode tftp_receive_packet(struct connectdata *conn)
-{
- struct Curl_sockaddr_storage fromaddr;
- curl_socklen_t fromlen;
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- tftp_state_data_t *state = (tftp_state_data_t *)conn->proto.tftpc;
- struct SingleRequest *k = &data->req;
-
- /* Receive the packet */
- fromlen = sizeof(fromaddr);
- state->rbytes = (int)recvfrom(state->sockfd,
- (void *)state->rpacket.data,
- state->blksize+4,
- 0,
- (struct sockaddr *)&fromaddr,
- &fromlen);
- if(state->remote_addrlen==0) {
- memcpy(&state->remote_addr, &fromaddr, fromlen);
- state->remote_addrlen = fromlen;
- }
-
- /* Sanity check packet length */
- if(state->rbytes < 4) {
- failf(data, "Received too short packet");
- /* Not a timeout, but how best to handle it? */
- state->event = TFTP_EVENT_TIMEOUT;
- }
- else {
- /* The event is given by the TFTP packet time */
- state->event = (tftp_event_t)getrpacketevent(&state->rpacket);
-
- switch(state->event) {
- case TFTP_EVENT_DATA:
- /* Don't pass to the client empty or retransmitted packets */
- if(state->rbytes > 4 &&
- (NEXT_BLOCKNUM(state->block) == getrpacketblock(&state->rpacket))) {
- result = Curl_client_write(conn, CLIENTWRITE_BODY,
- (char *)state->rpacket.data+4,
- state->rbytes-4);
- if(result) {
- tftp_state_machine(state, TFTP_EVENT_ERROR);
- return result;
- }
- k->bytecount += state->rbytes-4;
- Curl_pgrsSetDownloadCounter(data, (curl_off_t) k->bytecount);
- }
- break;
- case TFTP_EVENT_ERROR:
- state->error = (tftp_error_t)getrpacketblock(&state->rpacket);
- infof(data, "%s\n", (const char *)state->rpacket.data+4);
- break;
- case TFTP_EVENT_ACK:
- break;
- case TFTP_EVENT_OACK:
- result = tftp_parse_option_ack(state,
- (const char *)state->rpacket.data+2,
- state->rbytes-2);
- if(result)
- return result;
- break;
- case TFTP_EVENT_RRQ:
- case TFTP_EVENT_WRQ:
- default:
- failf(data, "%s", "Internal error: Unexpected packet");
- break;
- }
-
- /* Update the progress meter */
- if(Curl_pgrsUpdate(conn)) {
- tftp_state_machine(state, TFTP_EVENT_ERROR);
- return CURLE_ABORTED_BY_CALLBACK;
- }
- }
- return result;
-}
-
-/**********************************************************
- *
- * tftp_state_timeout
- *
- * Check if timeouts have been reached
- *
- **********************************************************/
-static long tftp_state_timeout(struct connectdata *conn, tftp_event_t *event)
-{
- time_t current;
- tftp_state_data_t *state = (tftp_state_data_t *)conn->proto.tftpc;
-
- if(event)
- *event = TFTP_EVENT_NONE;
-
- time(&current);
- if(current > state->max_time) {
- DEBUGF(infof(conn->data, "timeout: %ld > %ld\n",
- (long)current, (long)state->max_time));
- state->error = TFTP_ERR_TIMEOUT;
- state->state = TFTP_STATE_FIN;
- return 0;
- }
- else if(current > state->rx_time+state->retry_time) {
- if(event)
- *event = TFTP_EVENT_TIMEOUT;
- time(&state->rx_time); /* update even though we received nothing */
- }
-
- /* there's a typecast below here since 'time_t' may in fact be larger than
- 'long', but we estimate that a 'long' will still be able to hold number
- of seconds even if "only" 32 bit */
- return (long)(state->max_time - current);
-}
-
-/**********************************************************
- *
- * tftp_multi_statemach
- *
- * Handle single RX socket event and return
- *
- **********************************************************/
-static CURLcode tftp_multi_statemach(struct connectdata *conn, bool *done)
-{
- int rc;
- tftp_event_t event;
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
- tftp_state_data_t *state = (tftp_state_data_t *)conn->proto.tftpc;
- long timeout_ms = tftp_state_timeout(conn, &event);
-
- *done = FALSE;
-
- if(timeout_ms <= 0) {
- failf(data, "TFTP response timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- else if(event != TFTP_EVENT_NONE) {
- result = tftp_state_machine(state, event);
- if(result != CURLE_OK)
- return(result);
- *done = (state->state == TFTP_STATE_FIN) ? TRUE : FALSE;
- if(*done)
- /* Tell curl we're done */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- }
- else {
- /* no timeouts to handle, check our socket */
- rc = Curl_socket_ready(state->sockfd, CURL_SOCKET_BAD, 0);
-
- if(rc == -1) {
- /* bail out */
- int error = SOCKERRNO;
- failf(data, "%s", Curl_strerror(conn, error));
- state->event = TFTP_EVENT_ERROR;
- }
- else if(rc != 0) {
- result = tftp_receive_packet(conn);
- if(result != CURLE_OK)
- return(result);
- result = tftp_state_machine(state, state->event);
- if(result != CURLE_OK)
- return(result);
- *done = (state->state == TFTP_STATE_FIN) ? TRUE : FALSE;
- if(*done)
- /* Tell curl we're done */
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, -1, NULL);
- }
- /* if rc == 0, then select() timed out */
- }
-
- return result;
-}
-
-/**********************************************************
- *
- * tftp_doing
- *
- * Called from multi.c while DOing
- *
- **********************************************************/
-static CURLcode tftp_doing(struct connectdata *conn, bool *dophase_done)
-{
- CURLcode result;
- result = tftp_multi_statemach(conn, dophase_done);
-
- if(*dophase_done) {
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
- }
- else if(!result) {
- /* The multi code doesn't have this logic for the DOING state so we
- provide it for TFTP since it may do the entire transfer in this
- state. */
- if(Curl_pgrsUpdate(conn))
- result = CURLE_ABORTED_BY_CALLBACK;
- else
- result = Curl_speedcheck(conn->data, Curl_tvnow());
- }
- return result;
-}
-
-/**********************************************************
- *
- * tftp_peform
- *
- * Entry point for transfer from tftp_do, sarts state mach
- *
- **********************************************************/
-static CURLcode tftp_perform(struct connectdata *conn, bool *dophase_done)
-{
- CURLcode result = CURLE_OK;
- tftp_state_data_t *state = (tftp_state_data_t *)conn->proto.tftpc;
-
- *dophase_done = FALSE;
-
- result = tftp_state_machine(state, TFTP_EVENT_INIT);
-
- if(state->state == TFTP_STATE_FIN || result != CURLE_OK)
- return(result);
-
- tftp_multi_statemach(conn, dophase_done);
-
- if(*dophase_done)
- DEBUGF(infof(conn->data, "DO phase is complete\n"));
-
- return result;
-}
-
-
-/**********************************************************
- *
- * tftp_do
- *
- * The do callback
- *
- * This callback initiates the TFTP transfer
- *
- **********************************************************/
-
-static CURLcode tftp_do(struct connectdata *conn, bool *done)
-{
- tftp_state_data_t *state;
- CURLcode code;
-
- *done = FALSE;
-
- if(!conn->proto.tftpc) {
- code = tftp_connect(conn, done);
- if(code)
- return code;
- }
-
- state = (tftp_state_data_t *)conn->proto.tftpc;
- if(!state)
- return CURLE_BAD_CALLING_ORDER;
-
- code = tftp_perform(conn, done);
-
- /* If tftp_perform() returned an error, use that for return code. If it
- was OK, see if tftp_translate_code() has an error. */
- if(code == CURLE_OK)
- /* If we have encountered an internal tftp error, translate it. */
- code = tftp_translate_code(state->error);
-
- return code;
-}
-
-static CURLcode tftp_setup_connection(struct connectdata * conn)
-{
- struct SessionHandle *data = conn->data;
- char * type;
- char command;
-
- conn->socktype = SOCK_DGRAM; /* UDP datagram based */
-
- /* TFTP URLs support an extension like ";mode=<typecode>" that
- * we'll try to get now! */
- type = strstr(data->state.path, ";mode=");
-
- if(!type)
- type = strstr(conn->host.rawalloc, ";mode=");
-
- if(type) {
- *type = 0; /* it was in the middle of the hostname */
- command = Curl_raw_toupper(type[6]);
-
- switch (command) {
- case 'A': /* ASCII mode */
- case 'N': /* NETASCII mode */
- data->set.prefer_ascii = TRUE;
- break;
-
- case 'O': /* octet mode */
- case 'I': /* binary mode */
- default:
- /* switch off ASCII */
- data->set.prefer_ascii = FALSE;
- break;
- }
- }
-
- return CURLE_OK;
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/tftp.h b/external/libcurl_android/jni/libcurl/lib/tftp.h
deleted file mode 100755
index 117b40f6..00000000
--- a/external/libcurl_android/jni/libcurl/lib/tftp.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef HEADER_CURL_TFTP_H
-#define HEADER_CURL_TFTP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#ifndef CURL_DISABLE_TFTP
-extern const struct Curl_handler Curl_handler_tftp;
-#endif
-
-#endif /* HEADER_CURL_TFTP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/timeval.c b/external/libcurl_android/jni/libcurl/lib/timeval.c
deleted file mode 100755
index 2fd72014..00000000
--- a/external/libcurl_android/jni/libcurl/lib/timeval.c
+++ /dev/null
@@ -1,134 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2008, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "timeval.h"
-
-#if defined(WIN32) && !defined(MSDOS)
-
-struct timeval curlx_tvnow(void)
-{
- /*
- ** GetTickCount() is available on _all_ Windows versions from W95 up
- ** to nowadays. Returns milliseconds elapsed since last system boot,
- ** increases monotonically and wraps once 49.7 days have elapsed.
- */
- struct timeval now;
- DWORD milliseconds = GetTickCount();
- now.tv_sec = milliseconds / 1000;
- now.tv_usec = (milliseconds % 1000) * 1000;
- return now;
-}
-
-#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
-
-struct timeval curlx_tvnow(void)
-{
- /*
- ** clock_gettime() is granted to be increased monotonically when the
- ** monotonic clock is queried. Time starting point is unspecified, it
- ** could be the system start-up time, the Epoch, or something else,
- ** in any case the time starting point does not change once that the
- ** system has started up.
- */
- struct timeval now;
- struct timespec tsnow;
- if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
- now.tv_sec = tsnow.tv_sec;
- now.tv_usec = tsnow.tv_nsec / 1000;
- }
- /*
- ** Even when the configure process has truly detected monotonic clock
- ** availability, it might happen that it is not actually available at
- ** run-time. When this occurs simply fallback to other time source.
- */
-#ifdef HAVE_GETTIMEOFDAY
- else
- (void)gettimeofday(&now, NULL);
-#else
- else {
- now.tv_sec = (long)time(NULL);
- now.tv_usec = 0;
- }
-#endif
- return now;
-}
-
-#elif defined(HAVE_GETTIMEOFDAY)
-
-struct timeval curlx_tvnow(void)
-{
- /*
- ** gettimeofday() is not granted to be increased monotonically, due to
- ** clock drifting and external source time synchronization it can jump
- ** forward or backward in time.
- */
- struct timeval now;
- (void)gettimeofday(&now, NULL);
- return now;
-}
-
-#else
-
-struct timeval curlx_tvnow(void)
-{
- /*
- ** time() returns the value of time in seconds since the Epoch.
- */
- struct timeval now;
- now.tv_sec = (long)time(NULL);
- now.tv_usec = 0;
- return now;
-}
-
-#endif
-
-/*
- * Make sure that the first argument is the more recent time, as otherwise
- * we'll get a weird negative time-diff back...
- *
- * Returns: the time difference in number of milliseconds.
- */
-long curlx_tvdiff(struct timeval newer, struct timeval older)
-{
- return (newer.tv_sec-older.tv_sec)*1000+
- (newer.tv_usec-older.tv_usec)/1000;
-}
-
-/*
- * Same as curlx_tvdiff but with full usec resolution.
- *
- * Returns: the time difference in seconds with subsecond resolution.
- */
-double curlx_tvdiff_secs(struct timeval newer, struct timeval older)
-{
- if(newer.tv_sec != older.tv_sec)
- return (double)(newer.tv_sec-older.tv_sec)+
- (double)(newer.tv_usec-older.tv_usec)/1000000.0;
- else
- return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
-}
-
-/* return the number of seconds in the given input timeval struct */
-long Curl_tvlong(struct timeval t1)
-{
- return t1.tv_sec;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/timeval.h b/external/libcurl_android/jni/libcurl/lib/timeval.h
deleted file mode 100755
index 3f1b9ea7..00000000
--- a/external/libcurl_android/jni/libcurl/lib/timeval.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef HEADER_CURL_TIMEVAL_H
-#define HEADER_CURL_TIMEVAL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2007, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * CAUTION: this header is designed to work when included by the app-side
- * as well as the library. Do not mix with library internals!
- */
-
-#include "curl_setup.h"
-
-struct timeval curlx_tvnow(void);
-
-/*
- * Make sure that the first argument (t1) is the more recent time and t2 is
- * the older time, as otherwise you get a weird negative time-diff back...
- *
- * Returns: the time difference in number of milliseconds.
- */
-long curlx_tvdiff(struct timeval t1, struct timeval t2);
-
-/*
- * Same as curlx_tvdiff but with full usec resolution.
- *
- * Returns: the time difference in seconds with subsecond resolution.
- */
-double curlx_tvdiff_secs(struct timeval t1, struct timeval t2);
-
-long Curl_tvlong(struct timeval t1);
-
-/* These two defines below exist to provide the older API for library
- internals only. */
-#define Curl_tvnow() curlx_tvnow()
-#define Curl_tvdiff(x,y) curlx_tvdiff(x,y)
-#define Curl_tvdiff_secs(x,y) curlx_tvdiff_secs(x,y)
-
-#endif /* HEADER_CURL_TIMEVAL_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/transfer.c b/external/libcurl_android/jni/libcurl/lib/transfer.c
deleted file mode 100755
index dc817a6c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/transfer.c
+++ /dev/null
@@ -1,1993 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "strtoofft.h"
-#include "strequal.h"
-#include "rawstr.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-
-#ifndef HAVE_SOCKET
-#error "We can't compile without socket() support!"
-#endif
-
-#include "urldata.h"
-#include <curl/curl.h>
-#include "netrc.h"
-
-#include "content_encoding.h"
-#include "hostip.h"
-#include "transfer.h"
-#include "sendf.h"
-#include "speedcheck.h"
-#include "progress.h"
-#include "http.h"
-#include "url.h"
-#include "getinfo.h"
-#include "vtls/vtls.h"
-#include "http_digest.h"
-#include "curl_ntlm.h"
-#include "http_negotiate.h"
-#include "share.h"
-#include "curl_memory.h"
-#include "select.h"
-#include "multiif.h"
-#include "connect.h"
-#include "non-ascii.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- * This function will call the read callback to fill our buffer with data
- * to upload.
- */
-CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp)
-{
- struct SessionHandle *data = conn->data;
- size_t buffersize = (size_t)bytes;
- int nread;
-#ifdef CURL_DOES_CONVERSIONS
- bool sending_http_headers = FALSE;
-
- if(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP)) {
- const struct HTTP *http = data->req.protop;
-
- if(http->sending == HTTPSEND_REQUEST)
- /* We're sending the HTTP request headers, not the data.
- Remember that so we don't re-translate them into garbage. */
- sending_http_headers = TRUE;
- }
-#endif
-
- if(data->req.upload_chunky) {
- /* if chunked Transfer-Encoding */
- buffersize -= (8 + 2 + 2); /* 32bit hex + CRLF + CRLF */
- data->req.upload_fromhere += (8 + 2); /* 32bit hex + CRLF */
- }
-
- /* this function returns a size_t, so we typecast to int to prevent warnings
- with picky compilers */
- nread = (int)conn->fread_func(data->req.upload_fromhere, 1,
- buffersize, conn->fread_in);
-
- if(nread == CURL_READFUNC_ABORT) {
- failf(data, "operation aborted by callback");
- *nreadp = 0;
- return CURLE_ABORTED_BY_CALLBACK;
- }
- else if(nread == CURL_READFUNC_PAUSE) {
-
- if(conn->handler->flags & PROTOPT_NONETWORK) {
- /* protocols that work without network cannot be paused. This is
- actually only FILE:// just now, and it can't pause since the transfer
- isn't done using the "normal" procedure. */
- failf(data, "Read callback asked for PAUSE when not supported!");
- return CURLE_READ_ERROR;
- }
- else {
- struct SingleRequest *k = &data->req;
- /* CURL_READFUNC_PAUSE pauses read callbacks that feed socket writes */
- k->keepon |= KEEP_SEND_PAUSE; /* mark socket send as paused */
- if(data->req.upload_chunky) {
- /* Back out the preallocation done above */
- data->req.upload_fromhere -= (8 + 2);
- }
- *nreadp = 0;
- }
- return CURLE_OK; /* nothing was read */
- }
- else if((size_t)nread > buffersize) {
- /* the read function returned a too large value */
- *nreadp = 0;
- failf(data, "read function returned funny value");
- return CURLE_READ_ERROR;
- }
-
- if(!data->req.forbidchunk && data->req.upload_chunky) {
- /* if chunked Transfer-Encoding
- * build chunk:
- *
- * <HEX SIZE> CRLF
- * <DATA> CRLF
- */
- /* On non-ASCII platforms the <DATA> may or may not be
- translated based on set.prefer_ascii while the protocol
- portion must always be translated to the network encoding.
- To further complicate matters, line end conversion might be
- done later on, so we need to prevent CRLFs from becoming
- CRCRLFs if that's the case. To do this we use bare LFs
- here, knowing they'll become CRLFs later on.
- */
-
- char hexbuffer[11];
- const char *endofline_native;
- const char *endofline_network;
- int hexlen;
-
- if(
-#ifdef CURL_DO_LINEEND_CONV
- (data->set.prefer_ascii) ||
-#endif
- (data->set.crlf)) {
- /* \n will become \r\n later on */
- endofline_native = "\n";
- endofline_network = "\x0a";
- }
- else {
- endofline_native = "\r\n";
- endofline_network = "\x0d\x0a";
- }
- hexlen = snprintf(hexbuffer, sizeof(hexbuffer),
- "%x%s", nread, endofline_native);
-
- /* move buffer pointer */
- data->req.upload_fromhere -= hexlen;
- nread += hexlen;
-
- /* copy the prefix to the buffer, leaving out the NUL */
- memcpy(data->req.upload_fromhere, hexbuffer, hexlen);
-
- /* always append ASCII CRLF to the data */
- memcpy(data->req.upload_fromhere + nread,
- endofline_network,
- strlen(endofline_network));
-
-#ifdef CURL_DOES_CONVERSIONS
- CURLcode res;
- int length;
- if(data->set.prefer_ascii) {
- /* translate the protocol and data */
- length = nread;
- }
- else {
- /* just translate the protocol portion */
- length = strlen(hexbuffer);
- }
- res = Curl_convert_to_network(data, data->req.upload_fromhere, length);
- /* Curl_convert_to_network calls failf if unsuccessful */
- if(res)
- return(res);
-#endif /* CURL_DOES_CONVERSIONS */
-
- if((nread - hexlen) == 0)
- /* mark this as done once this chunk is transferred */
- data->req.upload_done = TRUE;
-
- nread+=(int)strlen(endofline_native); /* for the added end of line */
- }
-#ifdef CURL_DOES_CONVERSIONS
- else if((data->set.prefer_ascii) && (!sending_http_headers)) {
- CURLcode res;
- res = Curl_convert_to_network(data, data->req.upload_fromhere, nread);
- /* Curl_convert_to_network calls failf if unsuccessful */
- if(res != CURLE_OK)
- return(res);
- }
-#endif /* CURL_DOES_CONVERSIONS */
-
- *nreadp = nread;
-
- return CURLE_OK;
-}
-
-
-/*
- * Curl_readrewind() rewinds the read stream. This is typically used for HTTP
- * POST/PUT with multi-pass authentication when a sending was denied and a
- * resend is necessary.
- */
-CURLcode Curl_readrewind(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
-
- conn->bits.rewindaftersend = FALSE; /* we rewind now */
-
- /* explicitly switch off sending data on this connection now since we are
- about to restart a new transfer and thus we want to avoid inadvertently
- sending more data on the existing connection until the next transfer
- starts */
- data->req.keepon &= ~KEEP_SEND;
-
- /* We have sent away data. If not using CURLOPT_POSTFIELDS or
- CURLOPT_HTTPPOST, call app to rewind
- */
- if(data->set.postfields ||
- (data->set.httpreq == HTTPREQ_POST_FORM))
- ; /* do nothing */
- else {
- if(data->set.seek_func) {
- int err;
-
- err = (data->set.seek_func)(data->set.seek_client, 0, SEEK_SET);
- if(err) {
- failf(data, "seek callback returned error %d", (int)err);
- return CURLE_SEND_FAIL_REWIND;
- }
- }
- else if(data->set.ioctl_func) {
- curlioerr err;
-
- err = (data->set.ioctl_func)(data, CURLIOCMD_RESTARTREAD,
- data->set.ioctl_client);
- infof(data, "the ioctl callback returned %d\n", (int)err);
-
- if(err) {
- /* FIXME: convert to a human readable error message */
- failf(data, "ioctl callback returned error %d", (int)err);
- return CURLE_SEND_FAIL_REWIND;
- }
- }
- else {
- /* If no CURLOPT_READFUNCTION is used, we know that we operate on a
- given FILE * stream and we can actually attempt to rewind that
- ourselves with fseek() */
- if(data->set.fread_func == (curl_read_callback)fread) {
- if(-1 != fseek(data->set.in, 0, SEEK_SET))
- /* successful rewind */
- return CURLE_OK;
- }
-
- /* no callback set or failure above, makes us fail at once */
- failf(data, "necessary data rewind wasn't possible");
- return CURLE_SEND_FAIL_REWIND;
- }
- }
- return CURLE_OK;
-}
-
-static int data_pending(const struct connectdata *conn)
-{
- /* in the case of libssh2, we can never be really sure that we have emptied
- its internal buffers so we MUST always try until we get EAGAIN back */
- return conn->handler->protocol&(CURLPROTO_SCP|CURLPROTO_SFTP) ||
-#if defined(USE_NGHTTP2)
- Curl_ssl_data_pending(conn, FIRSTSOCKET) ||
- /* For HTTP/2, we may read up everything including responde body
- with header fields in Curl_http_readwrite_headers. If no
- content-length is provided, curl waits for the connection
- close, which we emulate it using conn->proto.httpc.closed =
- TRUE. The thing is if we read everything, then http2_recv won't
- be called and we cannot signal the HTTP/2 stream has closed. As
- a workaround, we return nonzero here to call http2_recv. */
- ((conn->handler->protocol&PROTO_FAMILY_HTTP) && conn->httpversion == 20 &&
- conn->proto.httpc.closed);
-#else
- Curl_ssl_data_pending(conn, FIRSTSOCKET);
-#endif
-}
-
-static void read_rewind(struct connectdata *conn,
- size_t thismuch)
-{
- DEBUGASSERT(conn->read_pos >= thismuch);
-
- conn->read_pos -= thismuch;
- conn->bits.stream_was_rewound = TRUE;
-
-#ifdef DEBUGBUILD
- {
- char buf[512 + 1];
- size_t show;
-
- show = CURLMIN(conn->buf_len - conn->read_pos, sizeof(buf)-1);
- if(conn->master_buffer) {
- memcpy(buf, conn->master_buffer + conn->read_pos, show);
- buf[show] = '\0';
- }
- else {
- buf[0] = '\0';
- }
-
- DEBUGF(infof(conn->data,
- "Buffer after stream rewind (read_pos = %zu): [%s]\n",
- conn->read_pos, buf));
- }
-#endif
-}
-
-/*
- * Check to see if CURLOPT_TIMECONDITION was met by comparing the time of the
- * remote document with the time provided by CURLOPT_TIMEVAL
- */
-bool Curl_meets_timecondition(struct SessionHandle *data, time_t timeofdoc)
-{
- if((timeofdoc == 0) || (data->set.timevalue == 0))
- return TRUE;
-
- switch(data->set.timecondition) {
- case CURL_TIMECOND_IFMODSINCE:
- default:
- if(timeofdoc <= data->set.timevalue) {
- infof(data,
- "The requested document is not new enough\n");
- data->info.timecond = TRUE;
- return FALSE;
- }
- break;
- case CURL_TIMECOND_IFUNMODSINCE:
- if(timeofdoc >= data->set.timevalue) {
- infof(data,
- "The requested document is not old enough\n");
- data->info.timecond = TRUE;
- return FALSE;
- }
- break;
- }
-
- return TRUE;
-}
-
-/*
- * Go ahead and do a read if we have a readable socket or if
- * the stream was rewound (in which case we have data in a
- * buffer)
- */
-static CURLcode readwrite_data(struct SessionHandle *data,
- struct connectdata *conn,
- struct SingleRequest *k,
- int *didwhat, bool *done)
-{
- CURLcode result = CURLE_OK;
- ssize_t nread; /* number of bytes read */
- size_t excess = 0; /* excess bytes read */
- bool is_empty_data = FALSE;
- bool readmore = FALSE; /* used by RTP to signal for more data */
-
- *done = FALSE;
-
- /* This is where we loop until we have read everything there is to
- read or we get a CURLE_AGAIN */
- do {
- size_t buffersize = data->set.buffer_size?
- data->set.buffer_size : BUFSIZE;
- size_t bytestoread = buffersize;
-
- if(k->size != -1 && !k->header) {
- /* make sure we don't read "too much" if we can help it since we
- might be pipelining and then someone else might want to read what
- follows! */
- curl_off_t totalleft = k->size - k->bytecount;
- if(totalleft < (curl_off_t)bytestoread)
- bytestoread = (size_t)totalleft;
- }
-
- if(bytestoread) {
- /* receive data from the network! */
- result = Curl_read(conn, conn->sockfd, k->buf, bytestoread, &nread);
-
- /* read would've blocked */
- if(CURLE_AGAIN == result)
- break; /* get out of loop */
-
- if(result>0)
- return result;
- }
- else {
- /* read nothing but since we wanted nothing we consider this an OK
- situation to proceed from */
- nread = 0;
- }
-
- if((k->bytecount == 0) && (k->writebytecount == 0)) {
- Curl_pgrsTime(data, TIMER_STARTTRANSFER);
- if(k->exp100 > EXP100_SEND_DATA)
- /* set time stamp to compare with when waiting for the 100 */
- k->start100 = Curl_tvnow();
- }
-
- *didwhat |= KEEP_RECV;
- /* indicates data of zero size, i.e. empty file */
- is_empty_data = ((nread == 0) && (k->bodywrites == 0)) ? TRUE : FALSE;
-
- /* NUL terminate, allowing string ops to be used */
- if(0 < nread || is_empty_data) {
- k->buf[nread] = 0;
- }
- else if(0 >= nread) {
- /* if we receive 0 or less here, the server closed the connection
- and we bail out from this! */
- DEBUGF(infof(data, "nread <= 0, server closed connection, bailing\n"));
- k->keepon &= ~KEEP_RECV;
- break;
- }
-
- /* Default buffer to use when we write the buffer, it may be changed
- in the flow below before the actual storing is done. */
- k->str = k->buf;
-
- if(conn->handler->readwrite) {
- result = conn->handler->readwrite(data, conn, &nread, &readmore);
- if(result)
- return result;
- if(readmore)
- break;
- }
-
-#ifndef CURL_DISABLE_HTTP
- /* Since this is a two-state thing, we check if we are parsing
- headers at the moment or not. */
- if(k->header) {
- /* we are in parse-the-header-mode */
- bool stop_reading = FALSE;
- result = Curl_http_readwrite_headers(data, conn, &nread, &stop_reading);
- if(result)
- return result;
-
- if(conn->handler->readwrite &&
- (k->maxdownload <= 0 && nread > 0)) {
- result = conn->handler->readwrite(data, conn, &nread, &readmore);
- if(result)
- return result;
- if(readmore)
- break;
- }
-
- if(stop_reading) {
- /* We've stopped dealing with input, get out of the do-while loop */
-
- if(nread > 0) {
- if(Curl_multi_pipeline_enabled(conn->data->multi)) {
- infof(data,
- "Rewinding stream by : %zd"
- " bytes on url %s (zero-length body)\n",
- nread, data->state.path);
- read_rewind(conn, (size_t)nread);
- }
- else {
- infof(data,
- "Excess found in a non pipelined read:"
- " excess = %zd"
- " url = %s (zero-length body)\n",
- nread, data->state.path);
- }
- }
-
- break;
- }
- }
-#endif /* CURL_DISABLE_HTTP */
-
-
- /* This is not an 'else if' since it may be a rest from the header
- parsing, where the beginning of the buffer is headers and the end
- is non-headers. */
- if(k->str && !k->header && (nread > 0 || is_empty_data)) {
-
-#ifndef CURL_DISABLE_HTTP
- if(0 == k->bodywrites && !is_empty_data) {
- /* These checks are only made the first time we are about to
- write a piece of the body */
- if(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP)) {
- /* HTTP-only checks */
-
- if(data->req.newurl) {
- if(conn->bits.close) {
- /* Abort after the headers if "follow Location" is set
- and we're set to close anyway. */
- k->keepon &= ~KEEP_RECV;
- *done = TRUE;
- return CURLE_OK;
- }
- /* We have a new url to load, but since we want to be able
- to re-use this connection properly, we read the full
- response in "ignore more" */
- k->ignorebody = TRUE;
- infof(data, "Ignoring the response-body\n");
- }
- if(data->state.resume_from && !k->content_range &&
- (data->set.httpreq==HTTPREQ_GET) &&
- !k->ignorebody) {
- /* we wanted to resume a download, although the server doesn't
- * seem to support this and we did this with a GET (if it
- * wasn't a GET we did a POST or PUT resume) */
- failf(data, "HTTP server doesn't seem to support "
- "byte ranges. Cannot resume.");
- return CURLE_RANGE_ERROR;
- }
-
- if(data->set.timecondition && !data->state.range) {
- /* A time condition has been set AND no ranges have been
- requested. This seems to be what chapter 13.3.4 of
- RFC 2616 defines to be the correct action for a
- HTTP/1.1 client */
-
- if(!Curl_meets_timecondition(data, k->timeofdoc)) {
- *done = TRUE;
- /* We're simulating a http 304 from server so we return
- what should have been returned from the server */
- data->info.httpcode = 304;
- infof(data, "Simulate a HTTP 304 response!\n");
- /* we abort the transfer before it is completed == we ruin the
- re-use ability. Close the connection */
- connclose(conn, "Simulated 304 handling");
- return CURLE_OK;
- }
- } /* we have a time condition */
-
- } /* this is HTTP or RTSP */
- } /* this is the first time we write a body part */
-#endif /* CURL_DISABLE_HTTP */
-
- k->bodywrites++;
-
- /* pass data to the debug function before it gets "dechunked" */
- if(data->set.verbose) {
- if(k->badheader) {
- Curl_debug(data, CURLINFO_DATA_IN, data->state.headerbuff,
- (size_t)k->hbuflen, conn);
- if(k->badheader == HEADER_PARTHEADER)
- Curl_debug(data, CURLINFO_DATA_IN,
- k->str, (size_t)nread, conn);
- }
- else
- Curl_debug(data, CURLINFO_DATA_IN,
- k->str, (size_t)nread, conn);
- }
-
-#ifndef CURL_DISABLE_HTTP
- if(k->chunk) {
- /*
- * Here comes a chunked transfer flying and we need to decode this
- * properly. While the name says read, this function both reads
- * and writes away the data. The returned 'nread' holds the number
- * of actual data it wrote to the client.
- */
-
- CHUNKcode res =
- Curl_httpchunk_read(conn, k->str, nread, &nread);
-
- if(CHUNKE_OK < res) {
- if(CHUNKE_WRITE_ERROR == res) {
- failf(data, "Failed writing data");
- return CURLE_WRITE_ERROR;
- }
- failf(data, "%s in chunked-encoding", Curl_chunked_strerror(res));
- return CURLE_RECV_ERROR;
- }
- else if(CHUNKE_STOP == res) {
- size_t dataleft;
- /* we're done reading chunks! */
- k->keepon &= ~KEEP_RECV; /* read no more */
-
- /* There are now possibly N number of bytes at the end of the
- str buffer that weren't written to the client.
-
- We DO care about this data if we are pipelining.
- Push it back to be read on the next pass. */
-
- dataleft = conn->chunk.dataleft;
- if(dataleft != 0) {
- infof(conn->data, "Leftovers after chunking: %zu bytes\n",
- dataleft);
- if(Curl_multi_pipeline_enabled(conn->data->multi)) {
- /* only attempt the rewind if we truly are pipelining */
- infof(conn->data, "Rewinding %zu bytes\n",dataleft);
- read_rewind(conn, dataleft);
- }
- }
- }
- /* If it returned OK, we just keep going */
- }
-#endif /* CURL_DISABLE_HTTP */
-
- /* Account for body content stored in the header buffer */
- if(k->badheader && !k->ignorebody) {
- DEBUGF(infof(data, "Increasing bytecount by %zu from hbuflen\n",
- k->hbuflen));
- k->bytecount += k->hbuflen;
- }
-
- if((-1 != k->maxdownload) &&
- (k->bytecount + nread >= k->maxdownload)) {
-
- excess = (size_t)(k->bytecount + nread - k->maxdownload);
- if(excess > 0 && !k->ignorebody) {
- if(Curl_multi_pipeline_enabled(conn->data->multi)) {
- /* The 'excess' amount below can't be more than BUFSIZE which
- always will fit in a size_t */
- infof(data,
- "Rewinding stream by : %zu"
- " bytes on url %s (size = %" CURL_FORMAT_CURL_OFF_T
- ", maxdownload = %" CURL_FORMAT_CURL_OFF_T
- ", bytecount = %" CURL_FORMAT_CURL_OFF_T ", nread = %zd)\n",
- excess, data->state.path,
- k->size, k->maxdownload, k->bytecount, nread);
- read_rewind(conn, excess);
- }
- else {
- infof(data,
- "Excess found in a non pipelined read:"
- " excess = %zu"
- ", size = %" CURL_FORMAT_CURL_OFF_T
- ", maxdownload = %" CURL_FORMAT_CURL_OFF_T
- ", bytecount = %" CURL_FORMAT_CURL_OFF_T "\n",
- excess, k->size, k->maxdownload, k->bytecount);
- }
- }
-
- nread = (ssize_t) (k->maxdownload - k->bytecount);
- if(nread < 0 ) /* this should be unusual */
- nread = 0;
-
- k->keepon &= ~KEEP_RECV; /* we're done reading */
- }
-
- k->bytecount += nread;
-
- Curl_pgrsSetDownloadCounter(data, k->bytecount);
-
- if(!k->chunk && (nread || k->badheader || is_empty_data)) {
- /* If this is chunky transfer, it was already written */
-
- if(k->badheader && !k->ignorebody) {
- /* we parsed a piece of data wrongly assuming it was a header
- and now we output it as body instead */
-
- /* Don't let excess data pollute body writes */
- if(k->maxdownload == -1 || (curl_off_t)k->hbuflen <= k->maxdownload)
- result = Curl_client_write(conn, CLIENTWRITE_BODY,
- data->state.headerbuff,
- k->hbuflen);
- else
- result = Curl_client_write(conn, CLIENTWRITE_BODY,
- data->state.headerbuff,
- (size_t)k->maxdownload);
-
- if(result)
- return result;
- }
- if(k->badheader < HEADER_ALLBAD) {
- /* This switch handles various content encodings. If there's an
- error here, be sure to check over the almost identical code
- in http_chunks.c.
- Make sure that ALL_CONTENT_ENCODINGS contains all the
- encodings handled here. */
-#ifdef HAVE_LIBZ
- switch (conn->data->set.http_ce_skip ?
- IDENTITY : k->auto_decoding) {
- case IDENTITY:
-#endif
- /* This is the default when the server sends no
- Content-Encoding header. See Curl_readwrite_init; the
- memset() call initializes k->auto_decoding to zero. */
- if(!k->ignorebody) {
-
-#ifndef CURL_DISABLE_POP3
- if(conn->handler->protocol&PROTO_FAMILY_POP3)
- result = Curl_pop3_write(conn, k->str, nread);
- else
-#endif /* CURL_DISABLE_POP3 */
-
- result = Curl_client_write(conn, CLIENTWRITE_BODY, k->str,
- nread);
- }
-#ifdef HAVE_LIBZ
- break;
-
- case DEFLATE:
- /* Assume CLIENTWRITE_BODY; headers are not encoded. */
- if(!k->ignorebody)
- result = Curl_unencode_deflate_write(conn, k, nread);
- break;
-
- case GZIP:
- /* Assume CLIENTWRITE_BODY; headers are not encoded. */
- if(!k->ignorebody)
- result = Curl_unencode_gzip_write(conn, k, nread);
- break;
-
- case COMPRESS:
- default:
- failf (data, "Unrecognized content encoding type. "
- "libcurl understands `identity', `deflate' and `gzip' "
- "content encodings.");
- result = CURLE_BAD_CONTENT_ENCODING;
- break;
- }
-#endif
- }
- k->badheader = HEADER_NORMAL; /* taken care of now */
-
- if(result)
- return result;
- }
-
- } /* if(! header and data to read ) */
-
- if(conn->handler->readwrite &&
- (excess > 0 && !conn->bits.stream_was_rewound)) {
- /* Parse the excess data */
- k->str += nread;
- nread = (ssize_t)excess;
-
- result = conn->handler->readwrite(data, conn, &nread, &readmore);
- if(result)
- return result;
-
- if(readmore)
- k->keepon |= KEEP_RECV; /* we're not done reading */
- break;
- }
-
- if(is_empty_data) {
- /* if we received nothing, the server closed the connection and we
- are done */
- k->keepon &= ~KEEP_RECV;
- }
-
- } while(data_pending(conn));
-
- if(((k->keepon & (KEEP_RECV|KEEP_SEND)) == KEEP_SEND) &&
- conn->bits.close ) {
- /* When we've read the entire thing and the close bit is set, the server
- may now close the connection. If there's now any kind of sending going
- on from our side, we need to stop that immediately. */
- infof(data, "we are done reading and this is set to close, stop send\n");
- k->keepon &= ~KEEP_SEND; /* no writing anymore either */
- }
-
- return CURLE_OK;
-}
-
-/*
- * Send data to upload to the server, when the socket is writable.
- */
-static CURLcode readwrite_upload(struct SessionHandle *data,
- struct connectdata *conn,
- struct SingleRequest *k,
- int *didwhat)
-{
- ssize_t i, si;
- ssize_t bytes_written;
- CURLcode result;
- ssize_t nread; /* number of bytes read */
- bool sending_http_headers = FALSE;
-
- if((k->bytecount == 0) && (k->writebytecount == 0))
- Curl_pgrsTime(data, TIMER_STARTTRANSFER);
-
- *didwhat |= KEEP_SEND;
-
- /*
- * We loop here to do the READ and SEND loop until we run out of
- * data to send or until we get EWOULDBLOCK back
- *
- * FIXME: above comment is misleading. Currently no looping is
- * actually done in do-while loop below.
- */
- do {
-
- /* only read more data if there's no upload data already
- present in the upload buffer */
- if(0 == data->req.upload_present) {
- /* init the "upload from here" pointer */
- data->req.upload_fromhere = k->uploadbuf;
-
- if(!k->upload_done) {
- /* HTTP pollution, this should be written nicer to become more
- protocol agnostic. */
- int fillcount;
- struct HTTP *http = data->req.protop;
-
- if((k->exp100 == EXP100_SENDING_REQUEST) &&
- (http->sending == HTTPSEND_BODY)) {
- /* If this call is to send body data, we must take some action:
- We have sent off the full HTTP 1.1 request, and we shall now
- go into the Expect: 100 state and await such a header */
- k->exp100 = EXP100_AWAITING_CONTINUE; /* wait for the header */
- k->keepon &= ~KEEP_SEND; /* disable writing */
- k->start100 = Curl_tvnow(); /* timeout count starts now */
- *didwhat &= ~KEEP_SEND; /* we didn't write anything actually */
-
- /* set a timeout for the multi interface */
- Curl_expire(data, data->set.expect_100_timeout);
- break;
- }
-
- if(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP)) {
- if(http->sending == HTTPSEND_REQUEST)
- /* We're sending the HTTP request headers, not the data.
- Remember that so we don't change the line endings. */
- sending_http_headers = TRUE;
- else
- sending_http_headers = FALSE;
- }
-
- result = Curl_fillreadbuffer(conn, BUFSIZE, &fillcount);
- if(result)
- return result;
-
- nread = (ssize_t)fillcount;
- }
- else
- nread = 0; /* we're done uploading/reading */
-
- if(!nread && (k->keepon & KEEP_SEND_PAUSE)) {
- /* this is a paused transfer */
- break;
- }
- else if(nread<=0) {
- /* done */
- k->keepon &= ~KEEP_SEND; /* we're done writing */
-
- if(conn->bits.rewindaftersend) {
- result = Curl_readrewind(conn);
- if(result)
- return result;
- }
- break;
- }
-
- /* store number of bytes available for upload */
- data->req.upload_present = nread;
-
-#ifndef CURL_DISABLE_SMTP
- if(conn->handler->protocol & PROTO_FAMILY_SMTP) {
- result = Curl_smtp_escape_eob(conn, nread);
- if(result)
- return result;
- }
- else
-#endif /* CURL_DISABLE_SMTP */
-
- /* convert LF to CRLF if so asked */
- if((!sending_http_headers) && (
-#ifdef CURL_DO_LINEEND_CONV
- /* always convert if we're FTPing in ASCII mode */
- (data->set.prefer_ascii) ||
-#endif
- (data->set.crlf))) {
- if(data->state.scratch == NULL)
- data->state.scratch = malloc(2*BUFSIZE);
- if(data->state.scratch == NULL) {
- failf (data, "Failed to alloc scratch buffer!");
- return CURLE_OUT_OF_MEMORY;
- }
- /*
- * ASCII/EBCDIC Note: This is presumably a text (not binary)
- * transfer so the data should already be in ASCII.
- * That means the hex values for ASCII CR (0x0d) & LF (0x0a)
- * must be used instead of the escape sequences \r & \n.
- */
- for(i = 0, si = 0; i < nread; i++, si++) {
- if(data->req.upload_fromhere[i] == 0x0a) {
- data->state.scratch[si++] = 0x0d;
- data->state.scratch[si] = 0x0a;
- if(!data->set.crlf) {
- /* we're here only because FTP is in ASCII mode...
- bump infilesize for the LF we just added */
- data->state.infilesize++;
- }
- }
- else
- data->state.scratch[si] = data->req.upload_fromhere[i];
- }
- if(si != nread) {
- /* only perform the special operation if we really did replace
- anything */
- nread = si;
-
- /* upload from the new (replaced) buffer instead */
- data->req.upload_fromhere = data->state.scratch;
-
- /* set the new amount too */
- data->req.upload_present = nread;
- }
- }
- } /* if 0 == data->req.upload_present */
- else {
- /* We have a partial buffer left from a previous "round". Use
- that instead of reading more data */
- }
-
- /* write to socket (send away data) */
- result = Curl_write(conn,
- conn->writesockfd, /* socket to send to */
- data->req.upload_fromhere, /* buffer pointer */
- data->req.upload_present, /* buffer size */
- &bytes_written); /* actually sent */
-
- if(result)
- return result;
-
- if(data->set.verbose)
- /* show the data before we change the pointer upload_fromhere */
- Curl_debug(data, CURLINFO_DATA_OUT, data->req.upload_fromhere,
- (size_t)bytes_written, conn);
-
- k->writebytecount += bytes_written;
-
- if(k->writebytecount == data->state.infilesize) {
- /* we have sent all data we were supposed to */
- k->upload_done = TRUE;
- infof(data, "We are completely uploaded and fine\n");
- }
-
- if(data->req.upload_present != bytes_written) {
- /* we only wrote a part of the buffer (if anything), deal with it! */
-
- /* store the amount of bytes left in the buffer to write */
- data->req.upload_present -= bytes_written;
-
- /* advance the pointer where to find the buffer when the next send
- is to happen */
- data->req.upload_fromhere += bytes_written;
- }
- else {
- /* we've uploaded that buffer now */
- data->req.upload_fromhere = k->uploadbuf;
- data->req.upload_present = 0; /* no more bytes left */
-
- if(k->upload_done) {
- /* switch off writing, we're done! */
- k->keepon &= ~KEEP_SEND; /* we're done writing */
- }
- }
-
- Curl_pgrsSetUploadCounter(data, k->writebytecount);
-
- } WHILE_FALSE; /* just to break out from! */
-
- return CURLE_OK;
-}
-
-/*
- * Curl_readwrite() is the low-level function to be called when data is to
- * be read and written to/from the connection.
- */
-CURLcode Curl_readwrite(struct connectdata *conn,
- bool *done)
-{
- struct SessionHandle *data = conn->data;
- struct SingleRequest *k = &data->req;
- CURLcode result;
- int didwhat=0;
-
- curl_socket_t fd_read;
- curl_socket_t fd_write;
- int select_res = conn->cselect_bits;
-
- conn->cselect_bits = 0;
-
- /* only use the proper socket if the *_HOLD bit is not set simultaneously as
- then we are in rate limiting state in that transfer direction */
-
- if((k->keepon & KEEP_RECVBITS) == KEEP_RECV)
- fd_read = conn->sockfd;
- else
- fd_read = CURL_SOCKET_BAD;
-
- if((k->keepon & KEEP_SENDBITS) == KEEP_SEND)
- fd_write = conn->writesockfd;
- else
- fd_write = CURL_SOCKET_BAD;
-
- if(!select_res) /* Call for select()/poll() only, if read/write/error
- status is not known. */
- select_res = Curl_socket_ready(fd_read, fd_write, 0);
-
- if(select_res == CURL_CSELECT_ERR) {
- failf(data, "select/poll returned error");
- return CURLE_SEND_ERROR;
- }
-
- /* We go ahead and do a read if we have a readable socket or if
- the stream was rewound (in which case we have data in a
- buffer) */
- if((k->keepon & KEEP_RECV) &&
- ((select_res & CURL_CSELECT_IN) || conn->bits.stream_was_rewound)) {
-
- result = readwrite_data(data, conn, k, &didwhat, done);
- if(result || *done)
- return result;
- }
-
- /* If we still have writing to do, we check if we have a writable socket. */
- if((k->keepon & KEEP_SEND) && (select_res & CURL_CSELECT_OUT)) {
- /* write */
-
- result = readwrite_upload(data, conn, k, &didwhat);
- if(result)
- return result;
- }
-
- k->now = Curl_tvnow();
- if(didwhat) {
- /* Update read/write counters */
- if(k->bytecountp)
- *k->bytecountp = k->bytecount; /* read count */
- if(k->writebytecountp)
- *k->writebytecountp = k->writebytecount; /* write count */
- }
- else {
- /* no read no write, this is a timeout? */
- if(k->exp100 == EXP100_AWAITING_CONTINUE) {
- /* This should allow some time for the header to arrive, but only a
- very short time as otherwise it'll be too much wasted time too
- often. */
-
- /* Quoting RFC2616, section "8.2.3 Use of the 100 (Continue) Status":
-
- Therefore, when a client sends this header field to an origin server
- (possibly via a proxy) from which it has never seen a 100 (Continue)
- status, the client SHOULD NOT wait for an indefinite period before
- sending the request body.
-
- */
-
- long ms = Curl_tvdiff(k->now, k->start100);
- if(ms >= data->set.expect_100_timeout) {
- /* we've waited long enough, continue anyway */
- k->exp100 = EXP100_SEND_DATA;
- k->keepon |= KEEP_SEND;
- infof(data, "Done waiting for 100-continue\n");
- }
- }
- }
-
- if(Curl_pgrsUpdate(conn))
- result = CURLE_ABORTED_BY_CALLBACK;
- else
- result = Curl_speedcheck(data, k->now);
- if(result)
- return result;
-
- if(k->keepon) {
- if(0 > Curl_timeleft(data, &k->now, FALSE)) {
- if(k->size != -1) {
- failf(data, "Operation timed out after %ld milliseconds with %"
- CURL_FORMAT_CURL_OFF_T " out of %"
- CURL_FORMAT_CURL_OFF_T " bytes received",
- Curl_tvdiff(k->now, data->progress.t_startsingle), k->bytecount,
- k->size);
- }
- else {
- failf(data, "Operation timed out after %ld milliseconds with %"
- CURL_FORMAT_CURL_OFF_T " bytes received",
- Curl_tvdiff(k->now, data->progress.t_startsingle), k->bytecount);
- }
- return CURLE_OPERATION_TIMEDOUT;
- }
- }
- else {
- /*
- * The transfer has been performed. Just make some general checks before
- * returning.
- */
-
- if(!(data->set.opt_no_body) && (k->size != -1) &&
- (k->bytecount != k->size) &&
-#ifdef CURL_DO_LINEEND_CONV
- /* Most FTP servers don't adjust their file SIZE response for CRLFs,
- so we'll check to see if the discrepancy can be explained
- by the number of CRLFs we've changed to LFs.
- */
- (k->bytecount != (k->size + data->state.crlf_conversions)) &&
-#endif /* CURL_DO_LINEEND_CONV */
- !data->req.newurl) {
- failf(data, "transfer closed with %" CURL_FORMAT_CURL_OFF_T
- " bytes remaining to read",
- k->size - k->bytecount);
- return CURLE_PARTIAL_FILE;
- }
- else if(!(data->set.opt_no_body) &&
- k->chunk &&
- (conn->chunk.state != CHUNK_STOP)) {
- /*
- * In chunked mode, return an error if the connection is closed prior to
- * the empty (terminating) chunk is read.
- *
- * The condition above used to check for
- * conn->proto.http->chunk.datasize != 0 which is true after reading
- * *any* chunk, not just the empty chunk.
- *
- */
- failf(data, "transfer closed with outstanding read data remaining");
- return CURLE_PARTIAL_FILE;
- }
- if(Curl_pgrsUpdate(conn))
- return CURLE_ABORTED_BY_CALLBACK;
- }
-
- /* Now update the "done" boolean we return */
- *done = (0 == (k->keepon&(KEEP_RECV|KEEP_SEND|
- KEEP_RECV_PAUSE|KEEP_SEND_PAUSE))) ? TRUE : FALSE;
-
- return CURLE_OK;
-}
-
-/*
- * Curl_single_getsock() gets called by the multi interface code when the app
- * has requested to get the sockets for the current connection. This function
- * will then be called once for every connection that the multi interface
- * keeps track of. This function will only be called for connections that are
- * in the proper state to have this information available.
- */
-int Curl_single_getsock(const struct connectdata *conn,
- curl_socket_t *sock, /* points to numsocks number
- of sockets */
- int numsocks)
-{
- const struct SessionHandle *data = conn->data;
- int bitmap = GETSOCK_BLANK;
- unsigned sockindex = 0;
-
- if(conn->handler->perform_getsock)
- return conn->handler->perform_getsock(conn, sock, numsocks);
-
- if(numsocks < 2)
- /* simple check but we might need two slots */
- return GETSOCK_BLANK;
-
- /* don't include HOLD and PAUSE connections */
- if((data->req.keepon & KEEP_RECVBITS) == KEEP_RECV) {
-
- DEBUGASSERT(conn->sockfd != CURL_SOCKET_BAD);
-
- bitmap |= GETSOCK_READSOCK(sockindex);
- sock[sockindex] = conn->sockfd;
- }
-
- /* don't include HOLD and PAUSE connections */
- if((data->req.keepon & KEEP_SENDBITS) == KEEP_SEND) {
-
- if((conn->sockfd != conn->writesockfd) ||
- !(data->req.keepon & KEEP_RECV)) {
- /* only if they are not the same socket or we didn't have a readable
- one, we increase index */
- if(data->req.keepon & KEEP_RECV)
- sockindex++; /* increase index if we need two entries */
-
- DEBUGASSERT(conn->writesockfd != CURL_SOCKET_BAD);
-
- sock[sockindex] = conn->writesockfd;
- }
-
- bitmap |= GETSOCK_WRITESOCK(sockindex);
- }
-
- return bitmap;
-}
-
-/*
- * Determine optimum sleep time based on configured rate, current rate,
- * and packet size.
- * Returns value in milliseconds.
- *
- * The basic idea is to adjust the desired rate up/down in this method
- * based on whether we are running too slow or too fast. Then, calculate
- * how many milliseconds to wait for the next packet to achieve this new
- * rate.
- */
-long Curl_sleep_time(curl_off_t rate_bps, curl_off_t cur_rate_bps,
- int pkt_size)
-{
- curl_off_t min_sleep = 0;
- curl_off_t rv = 0;
-
- if(rate_bps == 0)
- return 0;
-
- /* If running faster than about .1% of the desired speed, slow
- * us down a bit. Use shift instead of division as the 0.1%
- * cutoff is arbitrary anyway.
- */
- if(cur_rate_bps > (rate_bps + (rate_bps >> 10))) {
- /* running too fast, decrease target rate by 1/64th of rate */
- rate_bps -= rate_bps >> 6;
- min_sleep = 1;
- }
- else if(cur_rate_bps < (rate_bps - (rate_bps >> 10))) {
- /* running too slow, increase target rate by 1/64th of rate */
- rate_bps += rate_bps >> 6;
- }
-
- /* Determine number of milliseconds to wait until we do
- * the next packet at the adjusted rate. We should wait
- * longer when using larger packets, for instance.
- */
- rv = ((curl_off_t)((pkt_size * 8) * 1000) / rate_bps);
-
- /* Catch rounding errors and always slow down at least 1ms if
- * we are running too fast.
- */
- if(rv < min_sleep)
- rv = min_sleep;
-
- /* Bound value to fit in 'long' on 32-bit platform. That's
- * plenty long enough anyway!
- */
- if(rv > 0x7fffffff)
- rv = 0x7fffffff;
-
- return (long)rv;
-}
-
-/*
- * Curl_pretransfer() is called immediately before a transfer starts.
- */
-CURLcode Curl_pretransfer(struct SessionHandle *data)
-{
- CURLcode res;
- if(!data->change.url) {
- /* we can't do anything without URL */
- failf(data, "No URL set!");
- return CURLE_URL_MALFORMAT;
- }
-
- /* Init the SSL session ID cache here. We do it here since we want to do it
- after the *_setopt() calls (that could specify the size of the cache) but
- before any transfer takes place. */
- res = Curl_ssl_initsessions(data, data->set.ssl.max_ssl_sessions);
- if(res)
- return res;
-
- data->set.followlocation=0; /* reset the location-follow counter */
- data->state.this_is_a_follow = FALSE; /* reset this */
- data->state.errorbuf = FALSE; /* no error has occurred */
- data->state.httpversion = 0; /* don't assume any particular server version */
-
- data->state.ssl_connect_retry = FALSE;
-
- data->state.authproblem = FALSE;
- data->state.authhost.want = data->set.httpauth;
- data->state.authproxy.want = data->set.proxyauth;
- Curl_safefree(data->info.wouldredirect);
- data->info.wouldredirect = NULL;
-
- /* If there is a list of cookie files to read, do it now! */
- if(data->change.cookielist)
- Curl_cookie_loadfiles(data);
-
- /* If there is a list of host pairs to deal with */
- if(data->change.resolve)
- res = Curl_loadhostpairs(data);
-
- if(!res) {
- /* Allow data->set.use_port to set which port to use. This needs to be
- * disabled for example when we follow Location: headers to URLs using
- * different ports! */
- data->state.allow_port = TRUE;
-
-#if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL)
- /*************************************************************
- * Tell signal handler to ignore SIGPIPE
- *************************************************************/
- if(!data->set.no_signal)
- data->state.prev_signal = signal(SIGPIPE, SIG_IGN);
-#endif
-
- Curl_initinfo(data); /* reset session-specific information "variables" */
- Curl_pgrsStartNow(data);
-
- if(data->set.timeout)
- Curl_expire(data, data->set.timeout);
-
- if(data->set.connecttimeout)
- Curl_expire(data, data->set.connecttimeout);
-
- /* In case the handle is re-used and an authentication method was picked
- in the session we need to make sure we only use the one(s) we now
- consider to be fine */
- data->state.authhost.picked &= data->state.authhost.want;
- data->state.authproxy.picked &= data->state.authproxy.want;
- }
-
- return res;
-}
-
-/*
- * Curl_posttransfer() is called immediately after a transfer ends
- */
-CURLcode Curl_posttransfer(struct SessionHandle *data)
-{
-#if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL)
- /* restore the signal handler for SIGPIPE before we get back */
- if(!data->set.no_signal)
- signal(SIGPIPE, data->state.prev_signal);
-#else
- (void)data; /* unused parameter */
-#endif
-
- return CURLE_OK;
-}
-
-#ifndef CURL_DISABLE_HTTP
-/*
- * strlen_url() returns the length of the given URL if the spaces within the
- * URL were properly URL encoded.
- */
-static size_t strlen_url(const char *url)
-{
- const char *ptr;
- size_t newlen=0;
- bool left=TRUE; /* left side of the ? */
-
- for(ptr=url; *ptr; ptr++) {
- switch(*ptr) {
- case '?':
- left=FALSE;
- /* fall through */
- default:
- newlen++;
- break;
- case ' ':
- if(left)
- newlen+=3;
- else
- newlen++;
- break;
- }
- }
- return newlen;
-}
-
-/* strcpy_url() copies a url to a output buffer and URL-encodes the spaces in
- * the source URL accordingly.
- */
-static void strcpy_url(char *output, const char *url)
-{
- /* we must add this with whitespace-replacing */
- bool left=TRUE;
- const char *iptr;
- char *optr = output;
- for(iptr = url; /* read from here */
- *iptr; /* until zero byte */
- iptr++) {
- switch(*iptr) {
- case '?':
- left=FALSE;
- /* fall through */
- default:
- *optr++=*iptr;
- break;
- case ' ':
- if(left) {
- *optr++='%'; /* add a '%' */
- *optr++='2'; /* add a '2' */
- *optr++='0'; /* add a '0' */
- }
- else
- *optr++='+'; /* add a '+' here */
- break;
- }
- }
- *optr=0; /* zero terminate output buffer */
-
-}
-
-/*
- * Returns true if the given URL is absolute (as opposed to relative)
- */
-static bool is_absolute_url(const char *url)
-{
- char prot[16]; /* URL protocol string storage */
- char letter; /* used for a silly sscanf */
-
- return (2 == sscanf(url, "%15[^?&/:]://%c", prot, &letter)) ? TRUE : FALSE;
-}
-
-/*
- * Concatenate a relative URL to a base URL making it absolute.
- * URL-encodes any spaces.
- * The returned pointer must be freed by the caller unless NULL
- * (returns NULL on out of memory).
- */
-static char *concat_url(const char *base, const char *relurl)
-{
- /***
- TRY to append this new path to the old URL
- to the right of the host part. Oh crap, this is doomed to cause
- problems in the future...
- */
- char *newest;
- char *protsep;
- char *pathsep;
- size_t newlen;
-
- const char *useurl = relurl;
- size_t urllen;
-
- /* we must make our own copy of the URL to play with, as it may
- point to read-only data */
- char *url_clone=strdup(base);
-
- if(!url_clone)
- return NULL; /* skip out of this NOW */
-
- /* protsep points to the start of the host name */
- protsep=strstr(url_clone, "//");
- if(!protsep)
- protsep=url_clone;
- else
- protsep+=2; /* pass the slashes */
-
- if('/' != relurl[0]) {
- int level=0;
-
- /* First we need to find out if there's a ?-letter in the URL,
- and cut it and the right-side of that off */
- pathsep = strchr(protsep, '?');
- if(pathsep)
- *pathsep=0;
-
- /* we have a relative path to append to the last slash if there's one
- available, or if the new URL is just a query string (starts with a
- '?') we append the new one at the end of the entire currently worked
- out URL */
- if(useurl[0] != '?') {
- pathsep = strrchr(protsep, '/');
- if(pathsep)
- *pathsep=0;
- }
-
- /* Check if there's any slash after the host name, and if so, remember
- that position instead */
- pathsep = strchr(protsep, '/');
- if(pathsep)
- protsep = pathsep+1;
- else
- protsep = NULL;
-
- /* now deal with one "./" or any amount of "../" in the newurl
- and act accordingly */
-
- if((useurl[0] == '.') && (useurl[1] == '/'))
- useurl+=2; /* just skip the "./" */
-
- while((useurl[0] == '.') &&
- (useurl[1] == '.') &&
- (useurl[2] == '/')) {
- level++;
- useurl+=3; /* pass the "../" */
- }
-
- if(protsep) {
- while(level--) {
- /* cut off one more level from the right of the original URL */
- pathsep = strrchr(protsep, '/');
- if(pathsep)
- *pathsep=0;
- else {
- *protsep=0;
- break;
- }
- }
- }
- }
- else {
- /* We got a new absolute path for this server */
-
- if((relurl[0] == '/') && (relurl[1] == '/')) {
- /* the new URL starts with //, just keep the protocol part from the
- original one */
- *protsep=0;
- useurl = &relurl[2]; /* we keep the slashes from the original, so we
- skip the new ones */
- }
- else {
- /* cut off the original URL from the first slash, or deal with URLs
- without slash */
- pathsep = strchr(protsep, '/');
- if(pathsep) {
- /* When people use badly formatted URLs, such as
- "http://www.url.com?dir=/home/daniel" we must not use the first
- slash, if there's a ?-letter before it! */
- char *sep = strchr(protsep, '?');
- if(sep && (sep < pathsep))
- pathsep = sep;
- *pathsep=0;
- }
- else {
- /* There was no slash. Now, since we might be operating on a badly
- formatted URL, such as "http://www.url.com?id=2380" which doesn't
- use a slash separator as it is supposed to, we need to check for a
- ?-letter as well! */
- pathsep = strchr(protsep, '?');
- if(pathsep)
- *pathsep=0;
- }
- }
- }
-
- /* If the new part contains a space, this is a mighty stupid redirect
- but we still make an effort to do "right". To the left of a '?'
- letter we replace each space with %20 while it is replaced with '+'
- on the right side of the '?' letter.
- */
- newlen = strlen_url(useurl);
-
- urllen = strlen(url_clone);
-
- newest = malloc(urllen + 1 + /* possible slash */
- newlen + 1 /* zero byte */);
-
- if(!newest) {
- free(url_clone); /* don't leak this */
- return NULL;
- }
-
- /* copy over the root url part */
- memcpy(newest, url_clone, urllen);
-
- /* check if we need to append a slash */
- if(('/' == useurl[0]) || (protsep && !*protsep) || ('?' == useurl[0]))
- ;
- else
- newest[urllen++]='/';
-
- /* then append the new piece on the right side */
- strcpy_url(&newest[urllen], useurl);
-
- free(url_clone);
-
- return newest;
-}
-#endif /* CURL_DISABLE_HTTP */
-
-/*
- * Curl_follow() handles the URL redirect magic. Pass in the 'newurl' string
- * as given by the remote server and set up the new URL to request.
- */
-CURLcode Curl_follow(struct SessionHandle *data,
- char *newurl, /* this 'newurl' is the Location: string,
- and it must be malloc()ed before passed
- here */
- followtype type) /* see transfer.h */
-{
-#ifdef CURL_DISABLE_HTTP
- (void)data;
- (void)newurl;
- (void)type;
- /* Location: following will not happen when HTTP is disabled */
- return CURLE_TOO_MANY_REDIRECTS;
-#else
-
- /* Location: redirect */
- bool disallowport = FALSE;
-
- if(type == FOLLOW_REDIR) {
- if((data->set.maxredirs != -1) &&
- (data->set.followlocation >= data->set.maxredirs)) {
- failf(data,"Maximum (%ld) redirects followed", data->set.maxredirs);
- return CURLE_TOO_MANY_REDIRECTS;
- }
-
- /* mark the next request as a followed location: */
- data->state.this_is_a_follow = TRUE;
-
- data->set.followlocation++; /* count location-followers */
-
- if(data->set.http_auto_referer) {
- /* We are asked to automatically set the previous URL as the referer
- when we get the next URL. We pick the ->url field, which may or may
- not be 100% correct */
-
- if(data->change.referer_alloc) {
- Curl_safefree(data->change.referer);
- data->change.referer_alloc = FALSE;
- }
-
- data->change.referer = strdup(data->change.url);
- if(!data->change.referer)
- return CURLE_OUT_OF_MEMORY;
- data->change.referer_alloc = TRUE; /* yes, free this later */
- }
- }
-
- if(!is_absolute_url(newurl)) {
- /***
- *DANG* this is an RFC 2068 violation. The URL is supposed
- to be absolute and this doesn't seem to be that!
- */
- char *absolute = concat_url(data->change.url, newurl);
- if(!absolute)
- return CURLE_OUT_OF_MEMORY;
- free(newurl);
- newurl = absolute;
- }
- else {
- /* This is an absolute URL, don't allow the custom port number */
- disallowport = TRUE;
-
- if(strchr(newurl, ' ')) {
- /* This new URL contains at least one space, this is a mighty stupid
- redirect but we still make an effort to do "right". */
- char *newest;
- size_t newlen = strlen_url(newurl);
-
- newest = malloc(newlen+1); /* get memory for this */
- if(!newest)
- return CURLE_OUT_OF_MEMORY;
- strcpy_url(newest, newurl); /* create a space-free URL */
-
- free(newurl); /* that was no good */
- newurl = newest; /* use this instead now */
- }
-
- }
-
- if(type == FOLLOW_FAKE) {
- /* we're only figuring out the new url if we would've followed locations
- but now we're done so we can get out! */
- data->info.wouldredirect = newurl;
- return CURLE_OK;
- }
-
- if(disallowport)
- data->state.allow_port = FALSE;
-
- if(data->change.url_alloc) {
- Curl_safefree(data->change.url);
- data->change.url_alloc = FALSE;
- }
-
- data->change.url = newurl;
- data->change.url_alloc = TRUE;
- newurl = NULL; /* don't free! */
-
- infof(data, "Issue another request to this URL: '%s'\n", data->change.url);
-
- /*
- * We get here when the HTTP code is 300-399 (and 401). We need to perform
- * differently based on exactly what return code there was.
- *
- * News from 7.10.6: we can also get here on a 401 or 407, in case we act on
- * a HTTP (proxy-) authentication scheme other than Basic.
- */
- switch(data->info.httpcode) {
- /* 401 - Act on a WWW-Authenticate, we keep on moving and do the
- Authorization: XXXX header in the HTTP request code snippet */
- /* 407 - Act on a Proxy-Authenticate, we keep on moving and do the
- Proxy-Authorization: XXXX header in the HTTP request code snippet */
- /* 300 - Multiple Choices */
- /* 306 - Not used */
- /* 307 - Temporary Redirect */
- default: /* for all above (and the unknown ones) */
- /* Some codes are explicitly mentioned since I've checked RFC2616 and they
- * seem to be OK to POST to.
- */
- break;
- case 301: /* Moved Permanently */
- /* (quote from RFC7231, section 6.4.2)
- *
- * Note: For historical reasons, a user agent MAY change the request
- * method from POST to GET for the subsequent request. If this
- * behavior is undesired, the 307 (Temporary Redirect) status code
- * can be used instead.
- *
- * ----
- *
- * Many webservers expect this, so these servers often answers to a POST
- * request with an error page. To be sure that libcurl gets the page that
- * most user agents would get, libcurl has to force GET.
- *
- * This behaviour is forbidden by RFC1945 and the obsolete RFC2616, and
- * can be overridden with CURLOPT_POSTREDIR.
- */
- if((data->set.httpreq == HTTPREQ_POST
- || data->set.httpreq == HTTPREQ_POST_FORM)
- && !(data->set.keep_post & CURL_REDIR_POST_301)) {
- infof(data, "Switch from POST to GET\n");
- data->set.httpreq = HTTPREQ_GET;
- }
- break;
- case 302: /* Found */
- /* (quote from RFC7231, section 6.4.3)
- *
- * Note: For historical reasons, a user agent MAY change the request
- * method from POST to GET for the subsequent request. If this
- * behavior is undesired, the 307 (Temporary Redirect) status code
- * can be used instead.
- *
- * ----
- *
- * Many webservers expect this, so these servers often answers to a POST
- * request with an error page. To be sure that libcurl gets the page that
- * most user agents would get, libcurl has to force GET.
- *
- * This behaviour is forbidden by RFC1945 and the obsolete RFC2616, and
- * can be overridden with CURLOPT_POSTREDIR.
- */
- if((data->set.httpreq == HTTPREQ_POST
- || data->set.httpreq == HTTPREQ_POST_FORM)
- && !(data->set.keep_post & CURL_REDIR_POST_302)) {
- infof(data, "Switch from POST to GET\n");
- data->set.httpreq = HTTPREQ_GET;
- }
- break;
-
- case 303: /* See Other */
- /* Disable both types of POSTs, unless the user explicitely
- asks for POST after POST */
- if(data->set.httpreq != HTTPREQ_GET
- && !(data->set.keep_post & CURL_REDIR_POST_303)) {
- data->set.httpreq = HTTPREQ_GET; /* enforce GET request */
- infof(data, "Disables POST, goes with %s\n",
- data->set.opt_no_body?"HEAD":"GET");
- }
- break;
- case 304: /* Not Modified */
- /* 304 means we did a conditional request and it was "Not modified".
- * We shouldn't get any Location: header in this response!
- */
- break;
- case 305: /* Use Proxy */
- /* (quote from RFC2616, section 10.3.6):
- * "The requested resource MUST be accessed through the proxy given
- * by the Location field. The Location field gives the URI of the
- * proxy. The recipient is expected to repeat this single request
- * via the proxy. 305 responses MUST only be generated by origin
- * servers."
- */
- break;
- }
- Curl_pgrsTime(data, TIMER_REDIRECT);
- Curl_pgrsResetTimesSizes(data);
-
- return CURLE_OK;
-#endif /* CURL_DISABLE_HTTP */
-}
-
-CURLcode
-Curl_reconnect_request(struct connectdata **connp)
-{
- CURLcode result = CURLE_OK;
- struct connectdata *conn = *connp;
- struct SessionHandle *data = conn->data;
-
- /* This was a re-use of a connection and we got a write error in the
- * DO-phase. Then we DISCONNECT this connection and have another attempt to
- * CONNECT and then DO again! The retry cannot possibly find another
- * connection to re-use, since we only keep one possible connection for
- * each. */
-
- infof(data, "Re-used connection seems dead, get a new one\n");
-
- connclose(conn, "Reconnect dead connection"); /* enforce close */
- result = Curl_done(&conn, result, FALSE); /* we are so done with this */
-
- /* conn may no longer be a good pointer, clear it to avoid mistakes by
- parent functions */
- *connp = NULL;
-
- /*
- * According to bug report #1330310. We need to check for CURLE_SEND_ERROR
- * here as well. I figure this could happen when the request failed on a FTP
- * connection and thus Curl_done() itself tried to use the connection
- * (again). Slight Lack of feedback in the report, but I don't think this
- * extra check can do much harm.
- */
- if((CURLE_OK == result) || (CURLE_SEND_ERROR == result)) {
- bool async;
- bool protocol_done = TRUE;
-
- /* Now, redo the connect and get a new connection */
- result = Curl_connect(data, connp, &async, &protocol_done);
- if(CURLE_OK == result) {
- /* We have connected or sent away a name resolve query fine */
-
- conn = *connp; /* setup conn to again point to something nice */
- if(async) {
- /* Now, if async is TRUE here, we need to wait for the name
- to resolve */
- result = Curl_resolver_wait_resolv(conn, NULL);
- if(result)
- return result;
-
- /* Resolved, continue with the connection */
- result = Curl_async_resolved(conn, &protocol_done);
- if(result)
- return result;
- }
- }
- }
-
- return result;
-}
-
-/* Returns CURLE_OK *and* sets '*url' if a request retry is wanted.
-
- NOTE: that the *url is malloc()ed. */
-CURLcode Curl_retry_request(struct connectdata *conn,
- char **url)
-{
- struct SessionHandle *data = conn->data;
-
- *url = NULL;
-
- /* if we're talking upload, we can't do the checks below, unless the protocol
- is HTTP as when uploading over HTTP we will still get a response */
- if(data->set.upload &&
- !(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP)))
- return CURLE_OK;
-
- if(/* workaround for broken TLS servers */ data->state.ssl_connect_retry ||
- ((data->req.bytecount +
- data->req.headerbytecount == 0) &&
- conn->bits.reuse &&
- !data->set.opt_no_body &&
- data->set.rtspreq != RTSPREQ_RECEIVE)) {
- /* We got no data, we attempted to re-use a connection and yet we want a
- "body". This might happen if the connection was left alive when we were
- done using it before, but that was closed when we wanted to read from
- it again. Bad luck. Retry the same request on a fresh connect! */
- infof(conn->data, "Connection died, retrying a fresh connect\n");
- *url = strdup(conn->data->change.url);
- if(!*url)
- return CURLE_OUT_OF_MEMORY;
-
- connclose(conn, "retry"); /* close this connection */
- conn->bits.retry = TRUE; /* mark this as a connection we're about
- to retry. Marking it this way should
- prevent i.e HTTP transfers to return
- error just because nothing has been
- transferred! */
-
-
- if(conn->handler->protocol&PROTO_FAMILY_HTTP) {
- struct HTTP *http = data->req.protop;
- if(http->writebytecount)
- return Curl_readrewind(conn);
- }
- }
- return CURLE_OK;
-}
-
-/*
- * Curl_setup_transfer() is called to setup some basic properties for the
- * upcoming transfer.
- */
-void
-Curl_setup_transfer(
- struct connectdata *conn, /* connection data */
- int sockindex, /* socket index to read from or -1 */
- curl_off_t size, /* -1 if unknown at this point */
- bool getheader, /* TRUE if header parsing is wanted */
- curl_off_t *bytecountp, /* return number of bytes read or NULL */
- int writesockindex, /* socket index to write to, it may very well be
- the same we read from. -1 disables */
- curl_off_t *writecountp /* return number of bytes written or NULL */
- )
-{
- struct SessionHandle *data;
- struct SingleRequest *k;
-
- DEBUGASSERT(conn != NULL);
-
- data = conn->data;
- k = &data->req;
-
- DEBUGASSERT((sockindex <= 1) && (sockindex >= -1));
-
- /* now copy all input parameters */
- conn->sockfd = sockindex == -1 ?
- CURL_SOCKET_BAD : conn->sock[sockindex];
- conn->writesockfd = writesockindex == -1 ?
- CURL_SOCKET_BAD:conn->sock[writesockindex];
- k->getheader = getheader;
-
- k->size = size;
- k->bytecountp = bytecountp;
- k->writebytecountp = writecountp;
-
- /* The code sequence below is placed in this function just because all
- necessary input is not always known in do_complete() as this function may
- be called after that */
-
- if(!k->getheader) {
- k->header = FALSE;
- if(size > 0)
- Curl_pgrsSetDownloadSize(data, size);
- }
- /* we want header and/or body, if neither then don't do this! */
- if(k->getheader || !data->set.opt_no_body) {
-
- if(conn->sockfd != CURL_SOCKET_BAD)
- k->keepon |= KEEP_RECV;
-
- if(conn->writesockfd != CURL_SOCKET_BAD) {
- struct HTTP *http = data->req.protop;
- /* HTTP 1.1 magic:
-
- Even if we require a 100-return code before uploading data, we might
- need to write data before that since the REQUEST may not have been
- finished sent off just yet.
-
- Thus, we must check if the request has been sent before we set the
- state info where we wait for the 100-return code
- */
- if((data->state.expect100header) &&
- (conn->handler->protocol&PROTO_FAMILY_HTTP) &&
- (http->sending == HTTPSEND_BODY)) {
- /* wait with write until we either got 100-continue or a timeout */
- k->exp100 = EXP100_AWAITING_CONTINUE;
- k->start100 = Curl_tvnow();
-
- /* Set a timeout for the multi interface. Add the inaccuracy margin so
- that we don't fire slightly too early and get denied to run. */
- Curl_expire(data, data->set.expect_100_timeout);
- }
- else {
- if(data->state.expect100header)
- /* when we've sent off the rest of the headers, we must await a
- 100-continue but first finish sending the request */
- k->exp100 = EXP100_SENDING_REQUEST;
-
- /* enable the write bit when we're not waiting for continue */
- k->keepon |= KEEP_SEND;
- }
- } /* if(conn->writesockfd != CURL_SOCKET_BAD) */
- } /* if(k->getheader || !data->set.opt_no_body) */
-
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/transfer.h b/external/libcurl_android/jni/libcurl/lib/transfer.h
deleted file mode 100755
index ad4a3acd..00000000
--- a/external/libcurl_android/jni/libcurl/lib/transfer.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef HEADER_CURL_TRANSFER_H
-#define HEADER_CURL_TRANSFER_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-CURLcode Curl_pretransfer(struct SessionHandle *data);
-CURLcode Curl_second_connect(struct connectdata *conn);
-CURLcode Curl_posttransfer(struct SessionHandle *data);
-
-typedef enum {
- FOLLOW_NONE, /* not used within the function, just a placeholder to
- allow initing to this */
- FOLLOW_FAKE, /* only records stuff, not actually following */
- FOLLOW_RETRY, /* set if this is a request retry as opposed to a real
- redirect following */
- FOLLOW_REDIR, /* a full true redirect */
- FOLLOW_LAST /* never used */
-} followtype;
-
-CURLcode Curl_follow(struct SessionHandle *data, char *newurl,
- followtype type);
-
-
-CURLcode Curl_readwrite(struct connectdata *conn, bool *done);
-int Curl_single_getsock(const struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-CURLcode Curl_readrewind(struct connectdata *conn);
-CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp);
-CURLcode Curl_reconnect_request(struct connectdata **connp);
-CURLcode Curl_retry_request(struct connectdata *conn, char **url);
-bool Curl_meets_timecondition(struct SessionHandle *data, time_t timeofdoc);
-
-/* This sets up a forthcoming transfer */
-void
-Curl_setup_transfer (struct connectdata *data,
- int sockindex, /* socket index to read from or -1 */
- curl_off_t size, /* -1 if unknown at this point */
- bool getheader, /* TRUE if header parsing is wanted */
- curl_off_t *bytecountp, /* return number of bytes read */
- int writesockindex, /* socket index to write to, it may
- very well be the same we read from.
- -1 disables */
- curl_off_t *writecountp /* return number of bytes written */
-);
-
-long Curl_sleep_time(curl_off_t rate_bps, curl_off_t cur_rate_bps,
- int pkt_size);
-
-#endif /* HEADER_CURL_TRANSFER_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/url.c b/external/libcurl_android/jni/libcurl/lib/url.c
deleted file mode 100755
index 67126ab3..00000000
--- a/external/libcurl_android/jni/libcurl/lib/url.c
+++ /dev/null
@@ -1,6032 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NET_IF_H
-#include <net/if.h>
-#endif
-#ifdef HAVE_SYS_IOCTL_H
-#include <sys/ioctl.h>
-#endif
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#ifdef __VMS
-#include <in.h>
-#include <inet.h>
-#endif
-
-#ifndef HAVE_SOCKET
-#error "We can't compile without socket() support!"
-#endif
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#ifdef USE_LIBIDN
-#include <idna.h>
-#include <tld.h>
-#include <stringprep.h>
-#ifdef HAVE_IDN_FREE_H
-#include <idn-free.h>
-#else
-/* prototype from idn-free.h, not provided by libidn 0.4.5's make install! */
-void idn_free (void *ptr);
-#endif
-#ifndef HAVE_IDN_FREE
-/* if idn_free() was not found in this version of libidn use free() instead */
-#define idn_free(x) (free)(x)
-#endif
-#elif defined(USE_WIN32_IDN)
-/* prototype for curl_win32_idn_to_ascii() */
-int curl_win32_idn_to_ascii(const char *in, char **out);
-#endif /* USE_LIBIDN */
-
-#include "urldata.h"
-#include "netrc.h"
-
-#include "formdata.h"
-#include "vtls/vtls.h"
-#include "hostip.h"
-#include "transfer.h"
-#include "sendf.h"
-#include "progress.h"
-#include "cookie.h"
-#include "strequal.h"
-#include "strerror.h"
-#include "escape.h"
-#include "strtok.h"
-#include "share.h"
-#include "content_encoding.h"
-#include "http_digest.h"
-#include "http_negotiate.h"
-#include "select.h"
-#include "multiif.h"
-#include "easyif.h"
-#include "speedcheck.h"
-#include "rawstr.h"
-#include "warnless.h"
-#include "non-ascii.h"
-#include "inet_pton.h"
-
-/* And now for the protocols */
-#include "ftp.h"
-#include "dict.h"
-#include "telnet.h"
-#include "tftp.h"
-#include "http.h"
-#include "file.h"
-#include "curl_ldap.h"
-#include "ssh.h"
-#include "imap.h"
-#include "url.h"
-#include "connect.h"
-#include "inet_ntop.h"
-#include "curl_ntlm.h"
-#include "curl_ntlm_wb.h"
-#include "socks.h"
-#include "curl_rtmp.h"
-#include "gopher.h"
-#include "http_proxy.h"
-#include "bundles.h"
-#include "conncache.h"
-#include "multihandle.h"
-#include "pipeline.h"
-#include "dotdot.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* Local static prototypes */
-static struct connectdata *
-find_oldest_idle_connection(struct SessionHandle *data);
-static struct connectdata *
-find_oldest_idle_connection_in_bundle(struct SessionHandle *data,
- struct connectbundle *bundle);
-static void conn_free(struct connectdata *conn);
-static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke);
-static CURLcode do_init(struct connectdata *conn);
-static CURLcode parse_url_login(struct SessionHandle *data,
- struct connectdata *conn,
- char **userptr, char **passwdptr,
- char **optionsptr);
-static CURLcode parse_login_details(const char *login, const size_t len,
- char **userptr, char **passwdptr,
- char **optionsptr);
-/*
- * Protocol table.
- */
-
-static const struct Curl_handler * const protocols[] = {
-
-#ifndef CURL_DISABLE_HTTP
- &Curl_handler_http,
-#endif
-
-#if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)
- &Curl_handler_https,
-#endif
-
-#ifndef CURL_DISABLE_FTP
- &Curl_handler_ftp,
-#endif
-
-#if defined(USE_SSL) && !defined(CURL_DISABLE_FTP)
- &Curl_handler_ftps,
-#endif
-
-#ifndef CURL_DISABLE_TELNET
- &Curl_handler_telnet,
-#endif
-
-#ifndef CURL_DISABLE_DICT
- &Curl_handler_dict,
-#endif
-
-#ifndef CURL_DISABLE_LDAP
- &Curl_handler_ldap,
-#if !defined(CURL_DISABLE_LDAPS) && \
- ((defined(USE_OPENLDAP) && defined(USE_SSL)) || \
- (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL)))
- &Curl_handler_ldaps,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_FILE
- &Curl_handler_file,
-#endif
-
-#ifndef CURL_DISABLE_TFTP
- &Curl_handler_tftp,
-#endif
-
-#ifdef USE_LIBSSH2
- &Curl_handler_scp,
- &Curl_handler_sftp,
-#endif
-
-#ifndef CURL_DISABLE_IMAP
- &Curl_handler_imap,
-#ifdef USE_SSL
- &Curl_handler_imaps,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_POP3
- &Curl_handler_pop3,
-#ifdef USE_SSL
- &Curl_handler_pop3s,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_SMTP
- &Curl_handler_smtp,
-#ifdef USE_SSL
- &Curl_handler_smtps,
-#endif
-#endif
-
-#ifndef CURL_DISABLE_RTSP
- &Curl_handler_rtsp,
-#endif
-
-#ifndef CURL_DISABLE_GOPHER
- &Curl_handler_gopher,
-#endif
-
-#ifdef USE_LIBRTMP
- &Curl_handler_rtmp,
- &Curl_handler_rtmpt,
- &Curl_handler_rtmpe,
- &Curl_handler_rtmpte,
- &Curl_handler_rtmps,
- &Curl_handler_rtmpts,
-#endif
-
- (struct Curl_handler *) NULL
-};
-
-/*
- * Dummy handler for undefined protocol schemes.
- */
-
-static const struct Curl_handler Curl_handler_dummy = {
- "<no protocol>", /* scheme */
- ZERO_NULL, /* setup_connection */
- ZERO_NULL, /* do_it */
- ZERO_NULL, /* done */
- ZERO_NULL, /* do_more */
- ZERO_NULL, /* connect_it */
- ZERO_NULL, /* connecting */
- ZERO_NULL, /* doing */
- ZERO_NULL, /* proto_getsock */
- ZERO_NULL, /* doing_getsock */
- ZERO_NULL, /* domore_getsock */
- ZERO_NULL, /* perform_getsock */
- ZERO_NULL, /* disconnect */
- ZERO_NULL, /* readwrite */
- 0, /* defport */
- 0, /* protocol */
- PROTOPT_NONE /* flags */
-};
-
-void Curl_freeset(struct SessionHandle *data)
-{
- /* Free all dynamic strings stored in the data->set substructure. */
- enum dupstring i;
- for(i=(enum dupstring)0; i < STRING_LAST; i++)
- Curl_safefree(data->set.str[i]);
-
- if(data->change.referer_alloc) {
- Curl_safefree(data->change.referer);
- data->change.referer_alloc = FALSE;
- }
- data->change.referer = NULL;
- if(data->change.url_alloc) {
- Curl_safefree(data->change.url);
- data->change.url_alloc = FALSE;
- }
- data->change.url = NULL;
-}
-
-static CURLcode setstropt(char **charp, char *s)
-{
- /* Release the previous storage at `charp' and replace by a dynamic storage
- copy of `s'. Return CURLE_OK or CURLE_OUT_OF_MEMORY. */
-
- Curl_safefree(*charp);
-
- if(s) {
- s = strdup(s);
-
- if(!s)
- return CURLE_OUT_OF_MEMORY;
-
- *charp = s;
- }
-
- return CURLE_OK;
-}
-
-static CURLcode setstropt_userpwd(char *option, char **userp, char **passwdp)
-{
- CURLcode result = CURLE_OK;
- char *user = NULL;
- char *passwd = NULL;
-
- /* Parse the login details if specified. It not then we treat NULL as a hint
- to clear the existing data */
- if(option) {
- result = parse_login_details(option, strlen(option),
- (userp ? &user : NULL),
- (passwdp ? &passwd : NULL),
- NULL);
- }
-
- if(!result) {
- /* Store the username part of option if required */
- if(userp) {
- if(!user && option && option[0] == ':') {
- /* Allocate an empty string instead of returning NULL as user name */
- user = strdup("");
- if(!user)
- result = CURLE_OUT_OF_MEMORY;
- }
-
- Curl_safefree(*userp);
- *userp = user;
- }
-
- /* Store the password part of option if required */
- if(passwdp) {
- Curl_safefree(*passwdp);
- *passwdp = passwd;
- }
- }
-
- return result;
-}
-
-CURLcode Curl_dupset(struct SessionHandle *dst, struct SessionHandle *src)
-{
- CURLcode r = CURLE_OK;
- enum dupstring i;
-
- /* Copy src->set into dst->set first, then deal with the strings
- afterwards */
- dst->set = src->set;
-
- /* clear all string pointers first */
- memset(dst->set.str, 0, STRING_LAST * sizeof(char *));
-
- /* duplicate all strings */
- for(i=(enum dupstring)0; i< STRING_LAST; i++) {
- r = setstropt(&dst->set.str[i], src->set.str[i]);
- if(r != CURLE_OK)
- break;
- }
-
- /* If a failure occurred, freeing has to be performed externally. */
- return r;
-}
-
-/*
- * This is the internal function curl_easy_cleanup() calls. This should
- * cleanup and free all resources associated with this sessionhandle.
- *
- * NOTE: if we ever add something that attempts to write to a socket or
- * similar here, we must ignore SIGPIPE first. It is currently only done
- * when curl_easy_perform() is invoked.
- */
-
-CURLcode Curl_close(struct SessionHandle *data)
-{
- struct Curl_multi *m;
-
- if(!data)
- return CURLE_OK;
-
- Curl_expire(data, 0); /* shut off timers */
-
- m = data->multi;
-
- if(m)
- /* This handle is still part of a multi handle, take care of this first
- and detach this handle from there. */
- curl_multi_remove_handle(data->multi, data);
-
- if(data->multi_easy)
- /* when curl_easy_perform() is used, it creates its own multi handle to
- use and this is the one */
- curl_multi_cleanup(data->multi_easy);
-
- /* Destroy the timeout list that is held in the easy handle. It is
- /normally/ done by curl_multi_remove_handle() but this is "just in
- case" */
- if(data->state.timeoutlist) {
- Curl_llist_destroy(data->state.timeoutlist, NULL);
- data->state.timeoutlist = NULL;
- }
-
- data->magic = 0; /* force a clear AFTER the possibly enforced removal from
- the multi handle, since that function uses the magic
- field! */
-
- if(data->state.rangestringalloc)
- free(data->state.range);
-
- /* Free the pathbuffer */
- Curl_safefree(data->state.pathbuffer);
- data->state.path = NULL;
-
- /* freed here just in case DONE wasn't called */
- Curl_free_request_state(data);
-
- /* Close down all open SSL info and sessions */
- Curl_ssl_close_all(data);
- Curl_safefree(data->state.first_host);
- Curl_safefree(data->state.scratch);
- Curl_ssl_free_certinfo(data);
-
- /* Cleanup possible redirect junk */
- if(data->req.newurl) {
- free(data->req.newurl);
- data->req.newurl = NULL;
- }
-
- if(data->change.referer_alloc) {
- Curl_safefree(data->change.referer);
- data->change.referer_alloc = FALSE;
- }
- data->change.referer = NULL;
-
- if(data->change.url_alloc) {
- Curl_safefree(data->change.url);
- data->change.url_alloc = FALSE;
- }
- data->change.url = NULL;
-
- Curl_safefree(data->state.headerbuff);
-
- Curl_flush_cookies(data, 1);
-
- Curl_digest_cleanup(data);
-
- Curl_safefree(data->info.contenttype);
- Curl_safefree(data->info.wouldredirect);
-
- /* this destroys the channel and we cannot use it anymore after this */
- Curl_resolver_cleanup(data->state.resolver);
-
- Curl_convert_close(data);
-
- /* No longer a dirty share, if it exists */
- if(data->share) {
- Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE);
- data->share->dirty--;
- Curl_share_unlock(data, CURL_LOCK_DATA_SHARE);
- }
-
- Curl_freeset(data);
- free(data);
- return CURLE_OK;
-}
-
-/*
- * Initialize the UserDefined fields within a SessionHandle.
- * This may be safely called on a new or existing SessionHandle.
- */
-CURLcode Curl_init_userdefined(struct UserDefined *set)
-{
- CURLcode res = CURLE_OK;
-
- set->out = stdout; /* default output to stdout */
- set->in = stdin; /* default input from stdin */
- set->err = stderr; /* default stderr to stderr */
-
- /* use fwrite as default function to store output */
- set->fwrite_func = (curl_write_callback)fwrite;
-
- /* use fread as default function to read input */
- set->fread_func = (curl_read_callback)fread;
- set->is_fread_set = 0;
- set->is_fwrite_set = 0;
-
- set->seek_func = ZERO_NULL;
- set->seek_client = ZERO_NULL;
-
- /* conversion callbacks for non-ASCII hosts */
- set->convfromnetwork = ZERO_NULL;
- set->convtonetwork = ZERO_NULL;
- set->convfromutf8 = ZERO_NULL;
-
- set->filesize = -1; /* we don't know the size */
- set->postfieldsize = -1; /* unknown size */
- set->maxredirs = -1; /* allow any amount by default */
-
- set->httpreq = HTTPREQ_GET; /* Default HTTP request */
- set->rtspreq = RTSPREQ_OPTIONS; /* Default RTSP request */
- set->ftp_use_epsv = TRUE; /* FTP defaults to EPSV operations */
- set->ftp_use_eprt = TRUE; /* FTP defaults to EPRT operations */
- set->ftp_use_pret = FALSE; /* mainly useful for drftpd servers */
- set->ftp_filemethod = FTPFILE_MULTICWD;
-
- set->dns_cache_timeout = 60; /* Timeout every 60 seconds by default */
-
- /* Set the default size of the SSL session ID cache */
- set->ssl.max_ssl_sessions = 5;
-
- set->proxyport = CURL_DEFAULT_PROXY_PORT; /* from url.h */
- set->proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */
- set->httpauth = CURLAUTH_BASIC; /* defaults to basic */
- set->proxyauth = CURLAUTH_BASIC; /* defaults to basic */
-
- /* make libcurl quiet by default: */
- set->hide_progress = TRUE; /* CURLOPT_NOPROGRESS changes these */
-
- /*
- * libcurl 7.10 introduced SSL verification *by default*! This needs to be
- * switched off unless wanted.
- */
- set->ssl.verifypeer = TRUE;
- set->ssl.verifyhost = TRUE;
-#ifdef USE_TLS_SRP
- set->ssl.authtype = CURL_TLSAUTH_NONE;
-#endif
- set->ssh_auth_types = CURLSSH_AUTH_DEFAULT; /* defaults to any auth
- type */
- set->ssl.sessionid = TRUE; /* session ID caching enabled by default */
-
- set->new_file_perms = 0644; /* Default permissions */
- set->new_directory_perms = 0755; /* Default permissions */
-
- /* for the *protocols fields we don't use the CURLPROTO_ALL convenience
- define since we internally only use the lower 16 bits for the passed
- in bitmask to not conflict with the private bits */
- set->allowed_protocols = CURLPROTO_ALL;
- set->redir_protocols =
- CURLPROTO_ALL & ~(CURLPROTO_FILE|CURLPROTO_SCP); /* not FILE or SCP */
-
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- /*
- * disallow unprotected protection negotiation NEC reference implementation
- * seem not to follow rfc1961 section 4.3/4.4
- */
- set->socks5_gssapi_nec = FALSE;
- /* set default GSS-API service name */
- res = setstropt(&set->str[STRING_SOCKS5_GSSAPI_SERVICE],
- (char *) CURL_DEFAULT_SOCKS5_GSSAPI_SERVICE);
- if(res != CURLE_OK)
- return res;
-#endif
-
- /* This is our preferred CA cert bundle/path since install time */
-#if defined(CURL_CA_BUNDLE)
- res = setstropt(&set->str[STRING_SSL_CAFILE], (char *) CURL_CA_BUNDLE);
-#elif defined(CURL_CA_PATH)
- res = setstropt(&set->str[STRING_SSL_CAPATH], (char *) CURL_CA_PATH);
-#endif
-
- set->wildcardmatch = FALSE;
- set->chunk_bgn = ZERO_NULL;
- set->chunk_end = ZERO_NULL;
-
- /* tcp keepalives are disabled by default, but provide reasonable values for
- * the interval and idle times.
- */
- set->tcp_keepalive = FALSE;
- set->tcp_keepintvl = 60;
- set->tcp_keepidle = 60;
-
- set->ssl_enable_npn = TRUE;
- set->ssl_enable_alpn = TRUE;
-
- set->expect_100_timeout = 1000L; /* Wait for a second by default. */
- return res;
-}
-
-/**
- * Curl_open()
- *
- * @param curl is a pointer to a sessionhandle pointer that gets set by this
- * function.
- * @return CURLcode
- */
-
-CURLcode Curl_open(struct SessionHandle **curl)
-{
- CURLcode res = CURLE_OK;
- struct SessionHandle *data;
- CURLcode status;
-
- /* Very simple start-up: alloc the struct, init it with zeroes and return */
- data = calloc(1, sizeof(struct SessionHandle));
- if(!data) {
- /* this is a very serious error */
- DEBUGF(fprintf(stderr, "Error: calloc of SessionHandle failed\n"));
- return CURLE_OUT_OF_MEMORY;
- }
-
- data->magic = CURLEASY_MAGIC_NUMBER;
-
- status = Curl_resolver_init(&data->state.resolver);
- if(status) {
- DEBUGF(fprintf(stderr, "Error: resolver_init failed\n"));
- free(data);
- return status;
- }
-
- /* We do some initial setup here, all those fields that can't be just 0 */
-
- data->state.headerbuff = malloc(HEADERSIZE);
- if(!data->state.headerbuff) {
- DEBUGF(fprintf(stderr, "Error: malloc of headerbuff failed\n"));
- res = CURLE_OUT_OF_MEMORY;
- }
- else {
- res = Curl_init_userdefined(&data->set);
-
- data->state.headersize=HEADERSIZE;
-
- Curl_convert_init(data);
-
- /* most recent connection is not yet defined */
- data->state.lastconnect = NULL;
-
- data->progress.flags |= PGRS_HIDE;
- data->state.current_speed = -1; /* init to negative == impossible */
-
- data->wildcard.state = CURLWC_INIT;
- data->wildcard.filelist = NULL;
- data->set.fnmatch = ZERO_NULL;
- data->set.maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */
- }
-
- if(res) {
- Curl_resolver_cleanup(data->state.resolver);
- if(data->state.headerbuff)
- free(data->state.headerbuff);
- Curl_freeset(data);
- free(data);
- data = NULL;
- }
- else
- *curl = data;
-
- return res;
-}
-
-CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
- va_list param)
-{
- char *argptr;
- CURLcode result = CURLE_OK;
- long arg;
-#ifndef CURL_DISABLE_HTTP
- curl_off_t bigsize;
-#endif
-
- switch(option) {
- case CURLOPT_DNS_CACHE_TIMEOUT:
- data->set.dns_cache_timeout = va_arg(param, long);
- break;
- case CURLOPT_DNS_USE_GLOBAL_CACHE:
- /* remember we want this enabled */
- arg = va_arg(param, long);
- data->set.global_dns_cache = (0 != arg)?TRUE:FALSE;
- break;
- case CURLOPT_SSL_CIPHER_LIST:
- /* set a list of cipher we want to use in the SSL connection */
- result = setstropt(&data->set.str[STRING_SSL_CIPHER_LIST],
- va_arg(param, char *));
- break;
-
- case CURLOPT_RANDOM_FILE:
- /*
- * This is the path name to a file that contains random data to seed
- * the random SSL stuff with. The file is only used for reading.
- */
- result = setstropt(&data->set.str[STRING_SSL_RANDOM_FILE],
- va_arg(param, char *));
- break;
- case CURLOPT_EGDSOCKET:
- /*
- * The Entropy Gathering Daemon socket pathname
- */
- result = setstropt(&data->set.str[STRING_SSL_EGDSOCKET],
- va_arg(param, char *));
- break;
- case CURLOPT_MAXCONNECTS:
- /*
- * Set the absolute number of maximum simultaneous alive connection that
- * libcurl is allowed to have.
- */
- data->set.maxconnects = va_arg(param, long);
- break;
- case CURLOPT_FORBID_REUSE:
- /*
- * When this transfer is done, it must not be left to be reused by a
- * subsequent transfer but shall be closed immediately.
- */
- data->set.reuse_forbid = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_FRESH_CONNECT:
- /*
- * This transfer shall not use a previously cached connection but
- * should be made with a fresh new connect!
- */
- data->set.reuse_fresh = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_VERBOSE:
- /*
- * Verbose means infof() calls that give a lot of information about
- * the connection and transfer procedures as well as internal choices.
- */
- data->set.verbose = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_HEADER:
- /*
- * Set to include the header in the general data output stream.
- */
- data->set.include_header = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_NOPROGRESS:
- /*
- * Shut off the internal supported progress meter
- */
- data->set.hide_progress = (0 != va_arg(param, long))?TRUE:FALSE;
- if(data->set.hide_progress)
- data->progress.flags |= PGRS_HIDE;
- else
- data->progress.flags &= ~PGRS_HIDE;
- break;
- case CURLOPT_NOBODY:
- /*
- * Do not include the body part in the output data stream.
- */
- data->set.opt_no_body = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_FAILONERROR:
- /*
- * Don't output the >=300 error code HTML-page, but instead only
- * return error.
- */
- data->set.http_fail_on_error = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_UPLOAD:
- case CURLOPT_PUT:
- /*
- * We want to sent data to the remote host. If this is HTTP, that equals
- * using the PUT request.
- */
- data->set.upload = (0 != va_arg(param, long))?TRUE:FALSE;
- if(data->set.upload) {
- /* If this is HTTP, PUT is what's needed to "upload" */
- data->set.httpreq = HTTPREQ_PUT;
- data->set.opt_no_body = FALSE; /* this is implied */
- }
- else
- /* In HTTP, the opposite of upload is GET (unless NOBODY is true as
- then this can be changed to HEAD later on) */
- data->set.httpreq = HTTPREQ_GET;
- break;
- case CURLOPT_FILETIME:
- /*
- * Try to get the file time of the remote document. The time will
- * later (possibly) become available using curl_easy_getinfo().
- */
- data->set.get_filetime = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_FTP_CREATE_MISSING_DIRS:
- /*
- * An FTP option that modifies an upload to create missing directories on
- * the server.
- */
- switch(va_arg(param, long)) {
- case 0:
- data->set.ftp_create_missing_dirs = 0;
- break;
- case 1:
- data->set.ftp_create_missing_dirs = 1;
- break;
- case 2:
- data->set.ftp_create_missing_dirs = 2;
- break;
- default:
- /* reserve other values for future use */
- result = CURLE_UNKNOWN_OPTION;
- break;
- }
- break;
- case CURLOPT_SERVER_RESPONSE_TIMEOUT:
- /*
- * Option that specifies how quickly an server response must be obtained
- * before it is considered failure. For pingpong protocols.
- */
- data->set.server_response_timeout = va_arg( param , long ) * 1000;
- break;
- case CURLOPT_TFTP_BLKSIZE:
- /*
- * TFTP option that specifies the block size to use for data transmission
- */
- data->set.tftp_blksize = va_arg(param, long);
- break;
- case CURLOPT_DIRLISTONLY:
- /*
- * An option that changes the command to one that asks for a list
- * only, no file info details.
- */
- data->set.ftp_list_only = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_APPEND:
- /*
- * We want to upload and append to an existing file.
- */
- data->set.ftp_append = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_FTP_FILEMETHOD:
- /*
- * How do access files over FTP.
- */
- data->set.ftp_filemethod = (curl_ftpfile)va_arg(param, long);
- break;
- case CURLOPT_NETRC:
- /*
- * Parse the $HOME/.netrc file
- */
- data->set.use_netrc = (enum CURL_NETRC_OPTION)va_arg(param, long);
- break;
- case CURLOPT_NETRC_FILE:
- /*
- * Use this file instead of the $HOME/.netrc file
- */
- result = setstropt(&data->set.str[STRING_NETRC_FILE],
- va_arg(param, char *));
- break;
- case CURLOPT_TRANSFERTEXT:
- /*
- * This option was previously named 'FTPASCII'. Renamed to work with
- * more protocols than merely FTP.
- *
- * Transfer using ASCII (instead of BINARY).
- */
- data->set.prefer_ascii = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_TIMECONDITION:
- /*
- * Set HTTP time condition. This must be one of the defines in the
- * curl/curl.h header file.
- */
- data->set.timecondition = (curl_TimeCond)va_arg(param, long);
- break;
- case CURLOPT_TIMEVALUE:
- /*
- * This is the value to compare with the remote document with the
- * method set with CURLOPT_TIMECONDITION
- */
- data->set.timevalue = (time_t)va_arg(param, long);
- break;
- case CURLOPT_SSLVERSION:
- /*
- * Set explicit SSL version to try to connect with, as some SSL
- * implementations are lame.
- */
- data->set.ssl.version = va_arg(param, long);
- break;
-
-#ifndef CURL_DISABLE_HTTP
- case CURLOPT_AUTOREFERER:
- /*
- * Switch on automatic referer that gets set if curl follows locations.
- */
- data->set.http_auto_referer = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_ACCEPT_ENCODING:
- /*
- * String to use at the value of Accept-Encoding header.
- *
- * If the encoding is set to "" we use an Accept-Encoding header that
- * encompasses all the encodings we support.
- * If the encoding is set to NULL we don't send an Accept-Encoding header
- * and ignore an received Content-Encoding header.
- *
- */
- argptr = va_arg(param, char *);
- result = setstropt(&data->set.str[STRING_ENCODING],
- (argptr && !*argptr)?
- (char *) ALL_CONTENT_ENCODINGS: argptr);
- break;
-
- case CURLOPT_TRANSFER_ENCODING:
- data->set.http_transfer_encoding = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_FOLLOWLOCATION:
- /*
- * Follow Location: header hints on a HTTP-server.
- */
- data->set.http_follow_location = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_UNRESTRICTED_AUTH:
- /*
- * Send authentication (user+password) when following locations, even when
- * hostname changed.
- */
- data->set.http_disable_hostname_check_before_authentication =
- (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_MAXREDIRS:
- /*
- * The maximum amount of hops you allow curl to follow Location:
- * headers. This should mostly be used to detect never-ending loops.
- */
- data->set.maxredirs = va_arg(param, long);
- break;
-
- case CURLOPT_POSTREDIR:
- {
- /*
- * Set the behaviour of POST when redirecting
- * CURL_REDIR_GET_ALL - POST is changed to GET after 301 and 302
- * CURL_REDIR_POST_301 - POST is kept as POST after 301
- * CURL_REDIR_POST_302 - POST is kept as POST after 302
- * CURL_REDIR_POST_303 - POST is kept as POST after 303
- * CURL_REDIR_POST_ALL - POST is kept as POST after 301, 302 and 303
- * other - POST is kept as POST after 301 and 302
- */
- int postRedir = curlx_sltosi(va_arg(param, long));
- data->set.keep_post = postRedir & CURL_REDIR_POST_ALL;
- }
- break;
-
- case CURLOPT_POST:
- /* Does this option serve a purpose anymore? Yes it does, when
- CURLOPT_POSTFIELDS isn't used and the POST data is read off the
- callback! */
- if(va_arg(param, long)) {
- data->set.httpreq = HTTPREQ_POST;
- data->set.opt_no_body = FALSE; /* this is implied */
- }
- else
- data->set.httpreq = HTTPREQ_GET;
- break;
-
- case CURLOPT_COPYPOSTFIELDS:
- /*
- * A string with POST data. Makes curl HTTP POST. Even if it is NULL.
- * If needed, CURLOPT_POSTFIELDSIZE must have been set prior to
- * CURLOPT_COPYPOSTFIELDS and not altered later.
- */
- argptr = va_arg(param, char *);
-
- if(!argptr || data->set.postfieldsize == -1)
- result = setstropt(&data->set.str[STRING_COPYPOSTFIELDS], argptr);
- else {
- /*
- * Check that requested length does not overflow the size_t type.
- */
-
- if((data->set.postfieldsize < 0) ||
- ((sizeof(curl_off_t) != sizeof(size_t)) &&
- (data->set.postfieldsize > (curl_off_t)((size_t)-1))))
- result = CURLE_OUT_OF_MEMORY;
- else {
- char * p;
-
- (void) setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL);
-
- /* Allocate even when size == 0. This satisfies the need of possible
- later address compare to detect the COPYPOSTFIELDS mode, and
- to mark that postfields is used rather than read function or
- form data.
- */
- p = malloc((size_t)(data->set.postfieldsize?
- data->set.postfieldsize:1));
-
- if(!p)
- result = CURLE_OUT_OF_MEMORY;
- else {
- if(data->set.postfieldsize)
- memcpy(p, argptr, (size_t)data->set.postfieldsize);
-
- data->set.str[STRING_COPYPOSTFIELDS] = p;
- }
- }
- }
-
- data->set.postfields = data->set.str[STRING_COPYPOSTFIELDS];
- data->set.httpreq = HTTPREQ_POST;
- break;
-
- case CURLOPT_POSTFIELDS:
- /*
- * Like above, but use static data instead of copying it.
- */
- data->set.postfields = va_arg(param, void *);
- /* Release old copied data. */
- (void) setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL);
- data->set.httpreq = HTTPREQ_POST;
- break;
-
- case CURLOPT_POSTFIELDSIZE:
- /*
- * The size of the POSTFIELD data to prevent libcurl to do strlen() to
- * figure it out. Enables binary posts.
- */
- bigsize = va_arg(param, long);
-
- if(data->set.postfieldsize < bigsize &&
- data->set.postfields == data->set.str[STRING_COPYPOSTFIELDS]) {
- /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */
- (void) setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL);
- data->set.postfields = NULL;
- }
-
- data->set.postfieldsize = bigsize;
- break;
-
- case CURLOPT_POSTFIELDSIZE_LARGE:
- /*
- * The size of the POSTFIELD data to prevent libcurl to do strlen() to
- * figure it out. Enables binary posts.
- */
- bigsize = va_arg(param, curl_off_t);
-
- if(data->set.postfieldsize < bigsize &&
- data->set.postfields == data->set.str[STRING_COPYPOSTFIELDS]) {
- /* Previous CURLOPT_COPYPOSTFIELDS is no longer valid. */
- (void) setstropt(&data->set.str[STRING_COPYPOSTFIELDS], NULL);
- data->set.postfields = NULL;
- }
-
- data->set.postfieldsize = bigsize;
- break;
-
- case CURLOPT_HTTPPOST:
- /*
- * Set to make us do HTTP POST
- */
- data->set.httppost = va_arg(param, struct curl_httppost *);
- data->set.httpreq = HTTPREQ_POST_FORM;
- data->set.opt_no_body = FALSE; /* this is implied */
- break;
-
- case CURLOPT_REFERER:
- /*
- * String to set in the HTTP Referer: field.
- */
- if(data->change.referer_alloc) {
- Curl_safefree(data->change.referer);
- data->change.referer_alloc = FALSE;
- }
- result = setstropt(&data->set.str[STRING_SET_REFERER],
- va_arg(param, char *));
- data->change.referer = data->set.str[STRING_SET_REFERER];
- break;
-
- case CURLOPT_USERAGENT:
- /*
- * String to use in the HTTP User-Agent field
- */
- result = setstropt(&data->set.str[STRING_USERAGENT],
- va_arg(param, char *));
- break;
-
- case CURLOPT_HTTPHEADER:
- /*
- * Set a list with HTTP headers to use (or replace internals with)
- */
- data->set.headers = va_arg(param, struct curl_slist *);
- break;
-
- case CURLOPT_PROXYHEADER:
- /*
- * Set a list with proxy headers to use (or replace internals with)
- *
- * Since CURLOPT_HTTPHEADER was the only way to set HTTP headers for a
- * long time we remain doing it this way until CURLOPT_PROXYHEADER is
- * used. As soon as this option has been used, if set to anything but
- * NULL, custom headers for proxies are only picked from this list.
- *
- * Set this option to NULL to restore the previous behavior.
- */
- data->set.proxyheaders = va_arg(param, struct curl_slist *);
- break;
-
- case CURLOPT_HEADEROPT:
- /*
- * Set header option.
- */
- arg = va_arg(param, long);
- data->set.sep_headers = (arg & CURLHEADER_SEPARATE)? TRUE: FALSE;
- break;
-
- case CURLOPT_HTTP200ALIASES:
- /*
- * Set a list of aliases for HTTP 200 in response header
- */
- data->set.http200aliases = va_arg(param, struct curl_slist *);
- break;
-
-#if !defined(CURL_DISABLE_COOKIES)
- case CURLOPT_COOKIE:
- /*
- * Cookie string to send to the remote server in the request.
- */
- result = setstropt(&data->set.str[STRING_COOKIE],
- va_arg(param, char *));
- break;
-
- case CURLOPT_COOKIEFILE:
- /*
- * Set cookie file to read and parse. Can be used multiple times.
- */
- argptr = (char *)va_arg(param, void *);
- if(argptr) {
- struct curl_slist *cl;
- /* append the cookie file name to the list of file names, and deal with
- them later */
- cl = curl_slist_append(data->change.cookielist, argptr);
- if(!cl) {
- curl_slist_free_all(data->change.cookielist);
- data->change.cookielist = NULL;
- return CURLE_OUT_OF_MEMORY;
- }
- data->change.cookielist = cl; /* store the list for later use */
- }
- break;
-
- case CURLOPT_COOKIEJAR:
- /*
- * Set cookie file name to dump all cookies to when we're done.
- */
- result = setstropt(&data->set.str[STRING_COOKIEJAR],
- va_arg(param, char *));
-
- /*
- * Activate the cookie parser. This may or may not already
- * have been made.
- */
- data->cookies = Curl_cookie_init(data, NULL, data->cookies,
- data->set.cookiesession);
- break;
-
- case CURLOPT_COOKIESESSION:
- /*
- * Set this option to TRUE to start a new "cookie session". It will
- * prevent the forthcoming read-cookies-from-file actions to accept
- * cookies that are marked as being session cookies, as they belong to a
- * previous session.
- *
- * In the original Netscape cookie spec, "session cookies" are cookies
- * with no expire date set. RFC2109 describes the same action if no
- * 'Max-Age' is set and RFC2965 includes the RFC2109 description and adds
- * a 'Discard' action that can enforce the discard even for cookies that
- * have a Max-Age.
- *
- * We run mostly with the original cookie spec, as hardly anyone implements
- * anything else.
- */
- data->set.cookiesession = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_COOKIELIST:
- argptr = va_arg(param, char *);
-
- if(argptr == NULL)
- break;
-
- if(Curl_raw_equal(argptr, "ALL")) {
- /* clear all cookies */
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- Curl_cookie_clearall(data->cookies);
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
- else if(Curl_raw_equal(argptr, "SESS")) {
- /* clear session cookies */
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
- Curl_cookie_clearsess(data->cookies);
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- }
- else if(Curl_raw_equal(argptr, "FLUSH")) {
- /* flush cookies to file, takes care of the locking */
- Curl_flush_cookies(data, 0);
- }
- else {
- if(!data->cookies)
- /* if cookie engine was not running, activate it */
- data->cookies = Curl_cookie_init(data, NULL, NULL, TRUE);
-
- argptr = strdup(argptr);
- if(!argptr) {
- result = CURLE_OUT_OF_MEMORY;
- }
- else {
- Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE);
-
- if(checkprefix("Set-Cookie:", argptr))
- /* HTTP Header format line */
- Curl_cookie_add(data, data->cookies, TRUE, argptr + 11, NULL, NULL);
-
- else
- /* Netscape format line */
- Curl_cookie_add(data, data->cookies, FALSE, argptr, NULL, NULL);
-
- Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE);
- free(argptr);
- }
- }
-
- break;
-#endif /* CURL_DISABLE_COOKIES */
-
- case CURLOPT_HTTPGET:
- /*
- * Set to force us do HTTP GET
- */
- if(va_arg(param, long)) {
- data->set.httpreq = HTTPREQ_GET;
- data->set.upload = FALSE; /* switch off upload */
- data->set.opt_no_body = FALSE; /* this is implied */
- }
- break;
-
- case CURLOPT_HTTP_VERSION:
- /*
- * This sets a requested HTTP version to be used. The value is one of
- * the listed enums in curl/curl.h.
- */
- arg = va_arg(param, long);
-#ifndef USE_NGHTTP2
- if(arg == CURL_HTTP_VERSION_2_0)
- return CURLE_UNSUPPORTED_PROTOCOL;
-#endif
- data->set.httpversion = arg;
- break;
-
- case CURLOPT_HTTPAUTH:
- /*
- * Set HTTP Authentication type BITMASK.
- */
- {
- int bitcheck;
- bool authbits;
- unsigned long auth = va_arg(param, unsigned long);
-
- if(auth == CURLAUTH_NONE) {
- data->set.httpauth = auth;
- break;
- }
-
- /* the DIGEST_IE bit is only used to set a special marker, for all the
- rest we need to handle it as normal DIGEST */
- data->state.authhost.iestyle = (auth & CURLAUTH_DIGEST_IE)?TRUE:FALSE;
-
- if(auth & CURLAUTH_DIGEST_IE) {
- auth |= CURLAUTH_DIGEST; /* set standard digest bit */
- auth &= ~CURLAUTH_DIGEST_IE; /* unset ie digest bit */
- }
-
- /* switch off bits we can't support */
-#ifndef USE_NTLM
- auth &= ~CURLAUTH_NTLM; /* no NTLM support */
- auth &= ~CURLAUTH_NTLM_WB; /* no NTLM_WB support */
-#elif !defined(NTLM_WB_ENABLED)
- auth &= ~CURLAUTH_NTLM_WB; /* no NTLM_WB support */
-#endif
-#ifndef USE_SPNEGO
- auth &= ~CURLAUTH_NEGOTIATE; /* no Negotiate (SPNEGO) auth without
- GSS-API or SSPI */
-#endif
-
- /* check if any auth bit lower than CURLAUTH_ONLY is still set */
- bitcheck = 0;
- authbits = FALSE;
- while(bitcheck < 31) {
- if(auth & (1UL << bitcheck++)) {
- authbits = TRUE;
- break;
- }
- }
- if(!authbits)
- return CURLE_NOT_BUILT_IN; /* no supported types left! */
-
- data->set.httpauth = auth;
- }
- break;
-
- case CURLOPT_EXPECT_100_TIMEOUT_MS:
- /*
- * Time to wait for a response to a HTTP request containing an
- * Expect: 100-continue header before sending the data anyway.
- */
- data->set.expect_100_timeout = va_arg(param, long);
- break;
-
-#endif /* CURL_DISABLE_HTTP */
-
- case CURLOPT_CUSTOMREQUEST:
- /*
- * Set a custom string to use as request
- */
- result = setstropt(&data->set.str[STRING_CUSTOMREQUEST],
- va_arg(param, char *));
-
- /* we don't set
- data->set.httpreq = HTTPREQ_CUSTOM;
- here, we continue as if we were using the already set type
- and this just changes the actual request keyword */
- break;
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_HTTPPROXYTUNNEL:
- /*
- * Tunnel operations through the proxy instead of normal proxy use
- */
- data->set.tunnel_thru_httpproxy = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_PROXYPORT:
- /*
- * Explicitly set HTTP proxy port number.
- */
- data->set.proxyport = va_arg(param, long);
- break;
-
- case CURLOPT_PROXYAUTH:
- /*
- * Set HTTP Authentication type BITMASK.
- */
- {
- int bitcheck;
- bool authbits;
- unsigned long auth = va_arg(param, unsigned long);
-
- if(auth == CURLAUTH_NONE) {
- data->set.proxyauth = auth;
- break;
- }
-
- /* the DIGEST_IE bit is only used to set a special marker, for all the
- rest we need to handle it as normal DIGEST */
- data->state.authproxy.iestyle = (auth & CURLAUTH_DIGEST_IE)?TRUE:FALSE;
-
- if(auth & CURLAUTH_DIGEST_IE) {
- auth |= CURLAUTH_DIGEST; /* set standard digest bit */
- auth &= ~CURLAUTH_DIGEST_IE; /* unset ie digest bit */
- }
- /* switch off bits we can't support */
-#ifndef USE_NTLM
- auth &= ~CURLAUTH_NTLM; /* no NTLM support */
- auth &= ~CURLAUTH_NTLM_WB; /* no NTLM_WB support */
-#elif !defined(NTLM_WB_ENABLED)
- auth &= ~CURLAUTH_NTLM_WB; /* no NTLM_WB support */
-#endif
-#ifndef USE_SPNEGO
- auth &= ~CURLAUTH_NEGOTIATE; /* no Negotiate (SPNEGO) auth without
- GSS-API or SSPI */
-#endif
-
- /* check if any auth bit lower than CURLAUTH_ONLY is still set */
- bitcheck = 0;
- authbits = FALSE;
- while(bitcheck < 31) {
- if(auth & (1UL << bitcheck++)) {
- authbits = TRUE;
- break;
- }
- }
- if(!authbits)
- return CURLE_NOT_BUILT_IN; /* no supported types left! */
-
- data->set.proxyauth = auth;
- }
- break;
-
- case CURLOPT_PROXY:
- /*
- * Set proxy server:port to use as HTTP proxy.
- *
- * If the proxy is set to "" we explicitly say that we don't want to use a
- * proxy (even though there might be environment variables saying so).
- *
- * Setting it to NULL, means no proxy but allows the environment variables
- * to decide for us.
- */
- result = setstropt(&data->set.str[STRING_PROXY],
- va_arg(param, char *));
- break;
-
- case CURLOPT_PROXYTYPE:
- /*
- * Set proxy type. HTTP/HTTP_1_0/SOCKS4/SOCKS4a/SOCKS5/SOCKS5_HOSTNAME
- */
- data->set.proxytype = (curl_proxytype)va_arg(param, long);
- break;
-
- case CURLOPT_PROXY_TRANSFER_MODE:
- /*
- * set transfer mode (;type=<a|i>) when doing FTP via an HTTP proxy
- */
- switch (va_arg(param, long)) {
- case 0:
- data->set.proxy_transfer_mode = FALSE;
- break;
- case 1:
- data->set.proxy_transfer_mode = TRUE;
- break;
- default:
- /* reserve other values for future use */
- result = CURLE_UNKNOWN_OPTION;
- break;
- }
- break;
-#endif /* CURL_DISABLE_PROXY */
-
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- case CURLOPT_SOCKS5_GSSAPI_SERVICE:
- /*
- * Set GSS-API service name
- */
- result = setstropt(&data->set.str[STRING_SOCKS5_GSSAPI_SERVICE],
- va_arg(param, char *));
- break;
-
- case CURLOPT_SOCKS5_GSSAPI_NEC:
- /*
- * set flag for nec socks5 support
- */
- data->set.socks5_gssapi_nec = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-#endif
-
- case CURLOPT_HEADERDATA:
- /*
- * Custom pointer to pass the header write callback function
- */
- data->set.writeheader = (void *)va_arg(param, void *);
- break;
- case CURLOPT_ERRORBUFFER:
- /*
- * Error buffer provided by the caller to get the human readable
- * error string in.
- */
- data->set.errorbuffer = va_arg(param, char *);
- break;
- case CURLOPT_WRITEDATA:
- /*
- * FILE pointer to write to. Or possibly
- * used as argument to the write callback.
- */
- data->set.out = va_arg(param, void *);
- break;
- case CURLOPT_FTPPORT:
- /*
- * Use FTP PORT, this also specifies which IP address to use
- */
- result = setstropt(&data->set.str[STRING_FTPPORT],
- va_arg(param, char *));
- data->set.ftp_use_port = (NULL != data->set.str[STRING_FTPPORT]) ?
- TRUE:FALSE;
- break;
-
- case CURLOPT_FTP_USE_EPRT:
- data->set.ftp_use_eprt = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_FTP_USE_EPSV:
- data->set.ftp_use_epsv = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_FTP_USE_PRET:
- data->set.ftp_use_pret = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_FTP_SSL_CCC:
- data->set.ftp_ccc = (curl_ftpccc)va_arg(param, long);
- break;
-
- case CURLOPT_FTP_SKIP_PASV_IP:
- /*
- * Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the
- * bypass of the IP address in PASV responses.
- */
- data->set.ftp_skip_ip = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_READDATA:
- /*
- * FILE pointer to read the file to be uploaded from. Or possibly
- * used as argument to the read callback.
- */
- data->set.in = va_arg(param, void *);
- break;
- case CURLOPT_INFILESIZE:
- /*
- * If known, this should inform curl about the file size of the
- * to-be-uploaded file.
- */
- data->set.filesize = va_arg(param, long);
- break;
- case CURLOPT_INFILESIZE_LARGE:
- /*
- * If known, this should inform curl about the file size of the
- * to-be-uploaded file.
- */
- data->set.filesize = va_arg(param, curl_off_t);
- break;
- case CURLOPT_LOW_SPEED_LIMIT:
- /*
- * The low speed limit that if transfers are below this for
- * CURLOPT_LOW_SPEED_TIME, the transfer is aborted.
- */
- data->set.low_speed_limit=va_arg(param, long);
- break;
- case CURLOPT_MAX_SEND_SPEED_LARGE:
- /*
- * When transfer uploads are faster then CURLOPT_MAX_SEND_SPEED_LARGE
- * bytes per second the transfer is throttled..
- */
- data->set.max_send_speed=va_arg(param, curl_off_t);
- break;
- case CURLOPT_MAX_RECV_SPEED_LARGE:
- /*
- * When receiving data faster than CURLOPT_MAX_RECV_SPEED_LARGE bytes per
- * second the transfer is throttled..
- */
- data->set.max_recv_speed=va_arg(param, curl_off_t);
- break;
- case CURLOPT_LOW_SPEED_TIME:
- /*
- * The low speed time that if transfers are below the set
- * CURLOPT_LOW_SPEED_LIMIT during this time, the transfer is aborted.
- */
- data->set.low_speed_time=va_arg(param, long);
- break;
- case CURLOPT_URL:
- /*
- * The URL to fetch.
- */
- if(data->change.url_alloc) {
- /* the already set URL is allocated, free it first! */
- Curl_safefree(data->change.url);
- data->change.url_alloc = FALSE;
- }
- result = setstropt(&data->set.str[STRING_SET_URL],
- va_arg(param, char *));
- data->change.url = data->set.str[STRING_SET_URL];
- break;
- case CURLOPT_PORT:
- /*
- * The port number to use when getting the URL
- */
- data->set.use_port = va_arg(param, long);
- break;
- case CURLOPT_TIMEOUT:
- /*
- * The maximum time you allow curl to use for a single transfer
- * operation.
- */
- data->set.timeout = va_arg(param, long) * 1000L;
- break;
-
- case CURLOPT_TIMEOUT_MS:
- data->set.timeout = va_arg(param, long);
- break;
-
- case CURLOPT_CONNECTTIMEOUT:
- /*
- * The maximum time you allow curl to use to connect.
- */
- data->set.connecttimeout = va_arg(param, long) * 1000L;
- break;
-
- case CURLOPT_CONNECTTIMEOUT_MS:
- data->set.connecttimeout = va_arg(param, long);
- break;
-
- case CURLOPT_ACCEPTTIMEOUT_MS:
- /*
- * The maximum time you allow curl to wait for server connect
- */
- data->set.accepttimeout = va_arg(param, long);
- break;
-
- case CURLOPT_USERPWD:
- /*
- * user:password to use in the operation
- */
- result = setstropt_userpwd(va_arg(param, char *),
- &data->set.str[STRING_USERNAME],
- &data->set.str[STRING_PASSWORD]);
- break;
-
- case CURLOPT_USERNAME:
- /*
- * authentication user name to use in the operation
- */
- result = setstropt(&data->set.str[STRING_USERNAME],
- va_arg(param, char *));
- break;
-
- case CURLOPT_PASSWORD:
- /*
- * authentication password to use in the operation
- */
- result = setstropt(&data->set.str[STRING_PASSWORD],
- va_arg(param, char *));
- break;
-
- case CURLOPT_LOGIN_OPTIONS:
- /*
- * authentication options to use in the operation
- */
- result = setstropt(&data->set.str[STRING_OPTIONS],
- va_arg(param, char *));
- break;
-
- case CURLOPT_XOAUTH2_BEARER:
- /*
- * XOAUTH2 bearer token to use in the operation
- */
- result = setstropt(&data->set.str[STRING_BEARER],
- va_arg(param, char *));
- break;
-
- case CURLOPT_POSTQUOTE:
- /*
- * List of RAW FTP commands to use after a transfer
- */
- data->set.postquote = va_arg(param, struct curl_slist *);
- break;
- case CURLOPT_PREQUOTE:
- /*
- * List of RAW FTP commands to use prior to RETR (Wesley Laxton)
- */
- data->set.prequote = va_arg(param, struct curl_slist *);
- break;
- case CURLOPT_QUOTE:
- /*
- * List of RAW FTP commands to use before a transfer
- */
- data->set.quote = va_arg(param, struct curl_slist *);
- break;
- case CURLOPT_RESOLVE:
- /*
- * List of NAME:[address] names to populate the DNS cache with
- * Prefix the NAME with dash (-) to _remove_ the name from the cache.
- *
- * Names added with this API will remain in the cache until explicitly
- * removed or the handle is cleaned up.
- *
- * This API can remove any name from the DNS cache, but only entries
- * that aren't actually in use right now will be pruned immediately.
- */
- data->set.resolve = va_arg(param, struct curl_slist *);
- data->change.resolve = data->set.resolve;
- break;
- case CURLOPT_PROGRESSFUNCTION:
- /*
- * Progress callback function
- */
- data->set.fprogress = va_arg(param, curl_progress_callback);
- if(data->set.fprogress)
- data->progress.callback = TRUE; /* no longer internal */
- else
- data->progress.callback = FALSE; /* NULL enforces internal */
- break;
-
- case CURLOPT_XFERINFOFUNCTION:
- /*
- * Transfer info callback function
- */
- data->set.fxferinfo = va_arg(param, curl_xferinfo_callback);
- if(data->set.fxferinfo)
- data->progress.callback = TRUE; /* no longer internal */
- else
- data->progress.callback = FALSE; /* NULL enforces internal */
-
- break;
-
- case CURLOPT_PROGRESSDATA:
- /*
- * Custom client data to pass to the progress callback
- */
- data->set.progress_client = va_arg(param, void *);
- break;
-
-#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXYUSERPWD:
- /*
- * user:password needed to use the proxy
- */
- result = setstropt_userpwd(va_arg(param, char *),
- &data->set.str[STRING_PROXYUSERNAME],
- &data->set.str[STRING_PROXYPASSWORD]);
- break;
- case CURLOPT_PROXYUSERNAME:
- /*
- * authentication user name to use in the operation
- */
- result = setstropt(&data->set.str[STRING_PROXYUSERNAME],
- va_arg(param, char *));
- break;
- case CURLOPT_PROXYPASSWORD:
- /*
- * authentication password to use in the operation
- */
- result = setstropt(&data->set.str[STRING_PROXYPASSWORD],
- va_arg(param, char *));
- break;
- case CURLOPT_NOPROXY:
- /*
- * proxy exception list
- */
- result = setstropt(&data->set.str[STRING_NOPROXY],
- va_arg(param, char *));
- break;
-#endif
-
- case CURLOPT_RANGE:
- /*
- * What range of the file you want to transfer
- */
- result = setstropt(&data->set.str[STRING_SET_RANGE],
- va_arg(param, char *));
- break;
- case CURLOPT_RESUME_FROM:
- /*
- * Resume transfer at the give file position
- */
- data->set.set_resume_from = va_arg(param, long);
- break;
- case CURLOPT_RESUME_FROM_LARGE:
- /*
- * Resume transfer at the give file position
- */
- data->set.set_resume_from = va_arg(param, curl_off_t);
- break;
- case CURLOPT_DEBUGFUNCTION:
- /*
- * stderr write callback.
- */
- data->set.fdebug = va_arg(param, curl_debug_callback);
- /*
- * if the callback provided is NULL, it'll use the default callback
- */
- break;
- case CURLOPT_DEBUGDATA:
- /*
- * Set to a void * that should receive all error writes. This
- * defaults to CURLOPT_STDERR for normal operations.
- */
- data->set.debugdata = va_arg(param, void *);
- break;
- case CURLOPT_STDERR:
- /*
- * Set to a FILE * that should receive all error writes. This
- * defaults to stderr for normal operations.
- */
- data->set.err = va_arg(param, FILE *);
- if(!data->set.err)
- data->set.err = stderr;
- break;
- case CURLOPT_HEADERFUNCTION:
- /*
- * Set header write callback
- */
- data->set.fwrite_header = va_arg(param, curl_write_callback);
- break;
- case CURLOPT_WRITEFUNCTION:
- /*
- * Set data write callback
- */
- data->set.fwrite_func = va_arg(param, curl_write_callback);
- if(!data->set.fwrite_func) {
- data->set.is_fwrite_set = 0;
- /* When set to NULL, reset to our internal default function */
- data->set.fwrite_func = (curl_write_callback)fwrite;
- }
- else
- data->set.is_fwrite_set = 1;
- break;
- case CURLOPT_READFUNCTION:
- /*
- * Read data callback
- */
- data->set.fread_func = va_arg(param, curl_read_callback);
- if(!data->set.fread_func) {
- data->set.is_fread_set = 0;
- /* When set to NULL, reset to our internal default function */
- data->set.fread_func = (curl_read_callback)fread;
- }
- else
- data->set.is_fread_set = 1;
- break;
- case CURLOPT_SEEKFUNCTION:
- /*
- * Seek callback. Might be NULL.
- */
- data->set.seek_func = va_arg(param, curl_seek_callback);
- break;
- case CURLOPT_SEEKDATA:
- /*
- * Seek control callback. Might be NULL.
- */
- data->set.seek_client = va_arg(param, void *);
- break;
- case CURLOPT_CONV_FROM_NETWORK_FUNCTION:
- /*
- * "Convert from network encoding" callback
- */
- data->set.convfromnetwork = va_arg(param, curl_conv_callback);
- break;
- case CURLOPT_CONV_TO_NETWORK_FUNCTION:
- /*
- * "Convert to network encoding" callback
- */
- data->set.convtonetwork = va_arg(param, curl_conv_callback);
- break;
- case CURLOPT_CONV_FROM_UTF8_FUNCTION:
- /*
- * "Convert from UTF-8 encoding" callback
- */
- data->set.convfromutf8 = va_arg(param, curl_conv_callback);
- break;
- case CURLOPT_IOCTLFUNCTION:
- /*
- * I/O control callback. Might be NULL.
- */
- data->set.ioctl_func = va_arg(param, curl_ioctl_callback);
- break;
- case CURLOPT_IOCTLDATA:
- /*
- * I/O control data pointer. Might be NULL.
- */
- data->set.ioctl_client = va_arg(param, void *);
- break;
- case CURLOPT_SSLCERT:
- /*
- * String that holds file name of the SSL certificate to use
- */
- result = setstropt(&data->set.str[STRING_CERT],
- va_arg(param, char *));
- break;
- case CURLOPT_SSLCERTTYPE:
- /*
- * String that holds file type of the SSL certificate to use
- */
- result = setstropt(&data->set.str[STRING_CERT_TYPE],
- va_arg(param, char *));
- break;
- case CURLOPT_SSLKEY:
- /*
- * String that holds file name of the SSL key to use
- */
- result = setstropt(&data->set.str[STRING_KEY],
- va_arg(param, char *));
- break;
- case CURLOPT_SSLKEYTYPE:
- /*
- * String that holds file type of the SSL key to use
- */
- result = setstropt(&data->set.str[STRING_KEY_TYPE],
- va_arg(param, char *));
- break;
- case CURLOPT_KEYPASSWD:
- /*
- * String that holds the SSL or SSH private key password.
- */
- result = setstropt(&data->set.str[STRING_KEY_PASSWD],
- va_arg(param, char *));
- break;
- case CURLOPT_SSLENGINE:
- /*
- * String that holds the SSL crypto engine.
- */
- argptr = va_arg(param, char *);
- if(argptr && argptr[0])
- result = Curl_ssl_set_engine(data, argptr);
- break;
-
- case CURLOPT_SSLENGINE_DEFAULT:
- /*
- * flag to set engine as default.
- */
- result = Curl_ssl_set_engine_default(data);
- break;
- case CURLOPT_CRLF:
- /*
- * Kludgy option to enable CRLF conversions. Subject for removal.
- */
- data->set.crlf = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_INTERFACE:
- /*
- * Set what interface or address/hostname to bind the socket to when
- * performing an operation and thus what from-IP your connection will use.
- */
- result = setstropt(&data->set.str[STRING_DEVICE],
- va_arg(param, char *));
- break;
- case CURLOPT_LOCALPORT:
- /*
- * Set what local port to bind the socket to when performing an operation.
- */
- data->set.localport = curlx_sltous(va_arg(param, long));
- break;
- case CURLOPT_LOCALPORTRANGE:
- /*
- * Set number of local ports to try, starting with CURLOPT_LOCALPORT.
- */
- data->set.localportrange = curlx_sltosi(va_arg(param, long));
- break;
- case CURLOPT_KRBLEVEL:
- /*
- * A string that defines the kerberos security level.
- */
- result = setstropt(&data->set.str[STRING_KRB_LEVEL],
- va_arg(param, char *));
- data->set.krb = (NULL != data->set.str[STRING_KRB_LEVEL])?TRUE:FALSE;
- break;
- case CURLOPT_GSSAPI_DELEGATION:
- /*
- * GSS-API credential delegation
- */
- data->set.gssapi_delegation = va_arg(param, long);
- break;
- case CURLOPT_SSL_VERIFYPEER:
- /*
- * Enable peer SSL verifying.
- */
- data->set.ssl.verifypeer = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_SSL_VERIFYHOST:
- /*
- * Enable verification of the host name in the peer certificate
- */
- arg = va_arg(param, long);
-
- /* Obviously people are not reading documentation and too many thought
- this argument took a boolean when it wasn't and misused it. We thus ban
- 1 as a sensible input and we warn about its use. Then we only have the
- 2 action internally stored as TRUE. */
-
- if(1 == arg) {
- failf(data, "CURLOPT_SSL_VERIFYHOST no longer supports 1 as value!");
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
-
- data->set.ssl.verifyhost = (0 != arg)?TRUE:FALSE;
- break;
-#ifdef USE_SSLEAY
- /* since these two options are only possible to use on an OpenSSL-
- powered libcurl we #ifdef them on this condition so that libcurls
- built against other SSL libs will return a proper error when trying
- to set this option! */
- case CURLOPT_SSL_CTX_FUNCTION:
- /*
- * Set a SSL_CTX callback
- */
- data->set.ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback);
- break;
- case CURLOPT_SSL_CTX_DATA:
- /*
- * Set a SSL_CTX callback parameter pointer
- */
- data->set.ssl.fsslctxp = va_arg(param, void *);
- break;
-#endif
-#if defined(USE_SSLEAY) || defined(USE_QSOSSL) || defined(USE_GSKIT) || \
- defined(USE_NSS)
- case CURLOPT_CERTINFO:
- data->set.ssl.certinfo = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-#endif
- case CURLOPT_CAINFO:
- /*
- * Set CA info for SSL connection. Specify file name of the CA certificate
- */
- result = setstropt(&data->set.str[STRING_SSL_CAFILE],
- va_arg(param, char *));
- break;
- case CURLOPT_CAPATH:
- /*
- * Set CA path info for SSL connection. Specify directory name of the CA
- * certificates which have been prepared using openssl c_rehash utility.
- */
- /* This does not work on windows. */
- result = setstropt(&data->set.str[STRING_SSL_CAPATH],
- va_arg(param, char *));
- break;
- case CURLOPT_CRLFILE:
- /*
- * Set CRL file info for SSL connection. Specify file name of the CRL
- * to check certificates revocation
- */
- result = setstropt(&data->set.str[STRING_SSL_CRLFILE],
- va_arg(param, char *));
- break;
- case CURLOPT_ISSUERCERT:
- /*
- * Set Issuer certificate file
- * to check certificates issuer
- */
- result = setstropt(&data->set.str[STRING_SSL_ISSUERCERT],
- va_arg(param, char *));
- break;
- case CURLOPT_TELNETOPTIONS:
- /*
- * Set a linked list of telnet options
- */
- data->set.telnet_options = va_arg(param, struct curl_slist *);
- break;
-
- case CURLOPT_BUFFERSIZE:
- /*
- * The application kindly asks for a differently sized receive buffer.
- * If it seems reasonable, we'll use it.
- */
- data->set.buffer_size = va_arg(param, long);
-
- if((data->set.buffer_size> (BUFSIZE -1 )) ||
- (data->set.buffer_size < 1))
- data->set.buffer_size = 0; /* huge internal default */
-
- break;
-
- case CURLOPT_NOSIGNAL:
- /*
- * The application asks not to set any signal() or alarm() handlers,
- * even when using a timeout.
- */
- data->set.no_signal = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_SHARE:
- {
- struct Curl_share *set;
- set = va_arg(param, struct Curl_share *);
-
- /* disconnect from old share, if any */
- if(data->share) {
- Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE);
-
- if(data->dns.hostcachetype == HCACHE_SHARED) {
- data->dns.hostcache = NULL;
- data->dns.hostcachetype = HCACHE_NONE;
- }
-
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
- if(data->share->cookies == data->cookies)
- data->cookies = NULL;
-#endif
-
- if(data->share->sslsession == data->state.session)
- data->state.session = NULL;
-
- data->share->dirty--;
-
- Curl_share_unlock(data, CURL_LOCK_DATA_SHARE);
- data->share = NULL;
- }
-
- /* use new share if it set */
- data->share = set;
- if(data->share) {
-
- Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE);
-
- data->share->dirty++;
-
- if(data->share->hostcache) {
- /* use shared host cache */
- data->dns.hostcache = data->share->hostcache;
- data->dns.hostcachetype = HCACHE_SHARED;
- }
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
- if(data->share->cookies) {
- /* use shared cookie list, first free own one if any */
- if(data->cookies)
- Curl_cookie_cleanup(data->cookies);
- /* enable cookies since we now use a share that uses cookies! */
- data->cookies = data->share->cookies;
- }
-#endif /* CURL_DISABLE_HTTP */
- if(data->share->sslsession) {
- data->set.ssl.max_ssl_sessions = data->share->max_ssl_sessions;
- data->state.session = data->share->sslsession;
- }
- Curl_share_unlock(data, CURL_LOCK_DATA_SHARE);
-
- }
- /* check for host cache not needed,
- * it will be done by curl_easy_perform */
- }
- break;
-
- case CURLOPT_PRIVATE:
- /*
- * Set private data pointer.
- */
- data->set.private_data = va_arg(param, void *);
- break;
-
- case CURLOPT_MAXFILESIZE:
- /*
- * Set the maximum size of a file to download.
- */
- data->set.max_filesize = va_arg(param, long);
- break;
-
-#ifdef USE_SSL
- case CURLOPT_USE_SSL:
- /*
- * Make transfers attempt to use SSL/TLS.
- */
- data->set.use_ssl = (curl_usessl)va_arg(param, long);
- break;
-
- case CURLOPT_SSL_OPTIONS:
- arg = va_arg(param, long);
- data->set.ssl_enable_beast = arg&CURLSSLOPT_ALLOW_BEAST?TRUE:FALSE;
- break;
-
-#endif
- case CURLOPT_FTPSSLAUTH:
- /*
- * Set a specific auth for FTP-SSL transfers.
- */
- data->set.ftpsslauth = (curl_ftpauth)va_arg(param, long);
- break;
-
- case CURLOPT_IPRESOLVE:
- data->set.ipver = va_arg(param, long);
- break;
-
- case CURLOPT_MAXFILESIZE_LARGE:
- /*
- * Set the maximum size of a file to download.
- */
- data->set.max_filesize = va_arg(param, curl_off_t);
- break;
-
- case CURLOPT_TCP_NODELAY:
- /*
- * Enable or disable TCP_NODELAY, which will disable/enable the Nagle
- * algorithm
- */
- data->set.tcp_nodelay = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_FTP_ACCOUNT:
- result = setstropt(&data->set.str[STRING_FTP_ACCOUNT],
- va_arg(param, char *));
- break;
-
- case CURLOPT_IGNORE_CONTENT_LENGTH:
- data->set.ignorecl = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_CONNECT_ONLY:
- /*
- * No data transfer, set up connection and let application use the socket
- */
- data->set.connect_only = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_FTP_ALTERNATIVE_TO_USER:
- result = setstropt(&data->set.str[STRING_FTP_ALTERNATIVE_TO_USER],
- va_arg(param, char *));
- break;
-
- case CURLOPT_SOCKOPTFUNCTION:
- /*
- * socket callback function: called after socket() but before connect()
- */
- data->set.fsockopt = va_arg(param, curl_sockopt_callback);
- break;
-
- case CURLOPT_SOCKOPTDATA:
- /*
- * socket callback data pointer. Might be NULL.
- */
- data->set.sockopt_client = va_arg(param, void *);
- break;
-
- case CURLOPT_OPENSOCKETFUNCTION:
- /*
- * open/create socket callback function: called instead of socket(),
- * before connect()
- */
- data->set.fopensocket = va_arg(param, curl_opensocket_callback);
- break;
-
- case CURLOPT_OPENSOCKETDATA:
- /*
- * socket callback data pointer. Might be NULL.
- */
- data->set.opensocket_client = va_arg(param, void *);
- break;
-
- case CURLOPT_CLOSESOCKETFUNCTION:
- /*
- * close socket callback function: called instead of close()
- * when shutting down a connection
- */
- data->set.fclosesocket = va_arg(param, curl_closesocket_callback);
- break;
-
- case CURLOPT_CLOSESOCKETDATA:
- /*
- * socket callback data pointer. Might be NULL.
- */
- data->set.closesocket_client = va_arg(param, void *);
- break;
-
- case CURLOPT_SSL_SESSIONID_CACHE:
- data->set.ssl.sessionid = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
-#ifdef USE_LIBSSH2
- /* we only include SSH options if explicitly built to support SSH */
- case CURLOPT_SSH_AUTH_TYPES:
- data->set.ssh_auth_types = va_arg(param, long);
- break;
-
- case CURLOPT_SSH_PUBLIC_KEYFILE:
- /*
- * Use this file instead of the $HOME/.ssh/id_dsa.pub file
- */
- result = setstropt(&data->set.str[STRING_SSH_PUBLIC_KEY],
- va_arg(param, char *));
- break;
-
- case CURLOPT_SSH_PRIVATE_KEYFILE:
- /*
- * Use this file instead of the $HOME/.ssh/id_dsa file
- */
- result = setstropt(&data->set.str[STRING_SSH_PRIVATE_KEY],
- va_arg(param, char *));
- break;
- case CURLOPT_SSH_HOST_PUBLIC_KEY_MD5:
- /*
- * Option to allow for the MD5 of the host public key to be checked
- * for validation purposes.
- */
- result = setstropt(&data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5],
- va_arg(param, char *));
- break;
-#ifdef HAVE_LIBSSH2_KNOWNHOST_API
- case CURLOPT_SSH_KNOWNHOSTS:
- /*
- * Store the file name to read known hosts from.
- */
- result = setstropt(&data->set.str[STRING_SSH_KNOWNHOSTS],
- va_arg(param, char *));
- break;
-
- case CURLOPT_SSH_KEYFUNCTION:
- /* setting to NULL is fine since the ssh.c functions themselves will
- then rever to use the internal default */
- data->set.ssh_keyfunc = va_arg(param, curl_sshkeycallback);
- break;
-
- case CURLOPT_SSH_KEYDATA:
- /*
- * Custom client data to pass to the SSH keyfunc callback
- */
- data->set.ssh_keyfunc_userp = va_arg(param, void *);
- break;
-#endif /* HAVE_LIBSSH2_KNOWNHOST_API */
-
-#endif /* USE_LIBSSH2 */
-
- case CURLOPT_HTTP_TRANSFER_DECODING:
- /*
- * disable libcurl transfer encoding is used
- */
- data->set.http_te_skip = (0 == va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_HTTP_CONTENT_DECODING:
- /*
- * raw data passed to the application when content encoding is used
- */
- data->set.http_ce_skip = (0 == va_arg(param, long))?TRUE:FALSE;
- break;
-
- case CURLOPT_NEW_FILE_PERMS:
- /*
- * Uses these permissions instead of 0644
- */
- data->set.new_file_perms = va_arg(param, long);
- break;
-
- case CURLOPT_NEW_DIRECTORY_PERMS:
- /*
- * Uses these permissions instead of 0755
- */
- data->set.new_directory_perms = va_arg(param, long);
- break;
-
- case CURLOPT_ADDRESS_SCOPE:
- /*
- * We always get longs when passed plain numericals, but for this value we
- * know that an unsigned int will always hold the value so we blindly
- * typecast to this type
- */
- data->set.scope = curlx_sltoui(va_arg(param, long));
- break;
-
- case CURLOPT_PROTOCOLS:
- /* set the bitmask for the protocols that are allowed to be used for the
- transfer, which thus helps the app which takes URLs from users or other
- external inputs and want to restrict what protocol(s) to deal
- with. Defaults to CURLPROTO_ALL. */
- data->set.allowed_protocols = va_arg(param, long);
- break;
-
- case CURLOPT_REDIR_PROTOCOLS:
- /* set the bitmask for the protocols that libcurl is allowed to follow to,
- as a subset of the CURLOPT_PROTOCOLS ones. That means the protocol needs
- to be set in both bitmasks to be allowed to get redirected to. Defaults
- to all protocols except FILE and SCP. */
- data->set.redir_protocols = va_arg(param, long);
- break;
-
- case CURLOPT_MAIL_FROM:
- /* Set the SMTP mail originator */
- result = setstropt(&data->set.str[STRING_MAIL_FROM],
- va_arg(param, char *));
- break;
-
- case CURLOPT_MAIL_AUTH:
- /* Set the SMTP auth originator */
- result = setstropt(&data->set.str[STRING_MAIL_AUTH],
- va_arg(param, char *));
- break;
-
- case CURLOPT_MAIL_RCPT:
- /* Set the list of mail recipients */
- data->set.mail_rcpt = va_arg(param, struct curl_slist *);
- break;
-
- case CURLOPT_SASL_IR:
- /* Enable/disable SASL initial response */
- data->set.sasl_ir = (0 != va_arg(param, long)) ? TRUE : FALSE;
- break;
-
- case CURLOPT_RTSP_REQUEST:
- {
- /*
- * Set the RTSP request method (OPTIONS, SETUP, PLAY, etc...)
- * Would this be better if the RTSPREQ_* were just moved into here?
- */
- long curl_rtspreq = va_arg(param, long);
- Curl_RtspReq rtspreq = RTSPREQ_NONE;
- switch(curl_rtspreq) {
- case CURL_RTSPREQ_OPTIONS:
- rtspreq = RTSPREQ_OPTIONS;
- break;
-
- case CURL_RTSPREQ_DESCRIBE:
- rtspreq = RTSPREQ_DESCRIBE;
- break;
-
- case CURL_RTSPREQ_ANNOUNCE:
- rtspreq = RTSPREQ_ANNOUNCE;
- break;
-
- case CURL_RTSPREQ_SETUP:
- rtspreq = RTSPREQ_SETUP;
- break;
-
- case CURL_RTSPREQ_PLAY:
- rtspreq = RTSPREQ_PLAY;
- break;
-
- case CURL_RTSPREQ_PAUSE:
- rtspreq = RTSPREQ_PAUSE;
- break;
-
- case CURL_RTSPREQ_TEARDOWN:
- rtspreq = RTSPREQ_TEARDOWN;
- break;
-
- case CURL_RTSPREQ_GET_PARAMETER:
- rtspreq = RTSPREQ_GET_PARAMETER;
- break;
-
- case CURL_RTSPREQ_SET_PARAMETER:
- rtspreq = RTSPREQ_SET_PARAMETER;
- break;
-
- case CURL_RTSPREQ_RECORD:
- rtspreq = RTSPREQ_RECORD;
- break;
-
- case CURL_RTSPREQ_RECEIVE:
- rtspreq = RTSPREQ_RECEIVE;
- break;
- default:
- rtspreq = RTSPREQ_NONE;
- }
-
- data->set.rtspreq = rtspreq;
- break;
- }
-
-
- case CURLOPT_RTSP_SESSION_ID:
- /*
- * Set the RTSP Session ID manually. Useful if the application is
- * resuming a previously established RTSP session
- */
- result = setstropt(&data->set.str[STRING_RTSP_SESSION_ID],
- va_arg(param, char *));
- break;
-
- case CURLOPT_RTSP_STREAM_URI:
- /*
- * Set the Stream URI for the RTSP request. Unless the request is
- * for generic server options, the application will need to set this.
- */
- result = setstropt(&data->set.str[STRING_RTSP_STREAM_URI],
- va_arg(param, char *));
- break;
-
- case CURLOPT_RTSP_TRANSPORT:
- /*
- * The content of the Transport: header for the RTSP request
- */
- result = setstropt(&data->set.str[STRING_RTSP_TRANSPORT],
- va_arg(param, char *));
- break;
-
- case CURLOPT_RTSP_CLIENT_CSEQ:
- /*
- * Set the CSEQ number to issue for the next RTSP request. Useful if the
- * application is resuming a previously broken connection. The CSEQ
- * will increment from this new number henceforth.
- */
- data->state.rtsp_next_client_CSeq = va_arg(param, long);
- break;
-
- case CURLOPT_RTSP_SERVER_CSEQ:
- /* Same as the above, but for server-initiated requests */
- data->state.rtsp_next_client_CSeq = va_arg(param, long);
- break;
-
- case CURLOPT_INTERLEAVEDATA:
- data->set.rtp_out = va_arg(param, void *);
- break;
- case CURLOPT_INTERLEAVEFUNCTION:
- /* Set the user defined RTP write function */
- data->set.fwrite_rtp = va_arg(param, curl_write_callback);
- break;
-
- case CURLOPT_WILDCARDMATCH:
- data->set.wildcardmatch = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_CHUNK_BGN_FUNCTION:
- data->set.chunk_bgn = va_arg(param, curl_chunk_bgn_callback);
- break;
- case CURLOPT_CHUNK_END_FUNCTION:
- data->set.chunk_end = va_arg(param, curl_chunk_end_callback);
- break;
- case CURLOPT_FNMATCH_FUNCTION:
- data->set.fnmatch = va_arg(param, curl_fnmatch_callback);
- break;
- case CURLOPT_CHUNK_DATA:
- data->wildcard.customptr = va_arg(param, void *);
- break;
- case CURLOPT_FNMATCH_DATA:
- data->set.fnmatch_data = va_arg(param, void *);
- break;
-#ifdef USE_TLS_SRP
- case CURLOPT_TLSAUTH_USERNAME:
- result = setstropt(&data->set.str[STRING_TLSAUTH_USERNAME],
- va_arg(param, char *));
- if(data->set.str[STRING_TLSAUTH_USERNAME] && !data->set.ssl.authtype)
- data->set.ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */
- break;
- case CURLOPT_TLSAUTH_PASSWORD:
- result = setstropt(&data->set.str[STRING_TLSAUTH_PASSWORD],
- va_arg(param, char *));
- if(data->set.str[STRING_TLSAUTH_USERNAME] && !data->set.ssl.authtype)
- data->set.ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */
- break;
- case CURLOPT_TLSAUTH_TYPE:
- if(strnequal((char *)va_arg(param, char *), "SRP", strlen("SRP")))
- data->set.ssl.authtype = CURL_TLSAUTH_SRP;
- else
- data->set.ssl.authtype = CURL_TLSAUTH_NONE;
- break;
-#endif
- case CURLOPT_DNS_SERVERS:
- result = Curl_set_dns_servers(data, va_arg(param, char *));
- break;
- case CURLOPT_DNS_INTERFACE:
- result = Curl_set_dns_interface(data, va_arg(param, char *));
- break;
- case CURLOPT_DNS_LOCAL_IP4:
- result = Curl_set_dns_local_ip4(data, va_arg(param, char *));
- break;
- case CURLOPT_DNS_LOCAL_IP6:
- result = Curl_set_dns_local_ip6(data, va_arg(param, char *));
- break;
-
- case CURLOPT_TCP_KEEPALIVE:
- data->set.tcp_keepalive = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_TCP_KEEPIDLE:
- data->set.tcp_keepidle = va_arg(param, long);
- break;
- case CURLOPT_TCP_KEEPINTVL:
- data->set.tcp_keepintvl = va_arg(param, long);
- break;
- case CURLOPT_SSL_ENABLE_NPN:
- data->set.ssl_enable_npn = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
- case CURLOPT_SSL_ENABLE_ALPN:
- data->set.ssl_enable_alpn = (0 != va_arg(param, long))?TRUE:FALSE;
- break;
-
- default:
- /* unknown tag and its companion, just ignore: */
- result = CURLE_UNKNOWN_OPTION;
- break;
- }
-
- return result;
-}
-
-static void conn_free(struct connectdata *conn)
-{
- if(!conn)
- return;
-
- /* possible left-overs from the async name resolvers */
- Curl_resolver_cancel(conn);
-
- /* close the SSL stuff before we close any sockets since they will/may
- write to the sockets */
- Curl_ssl_close(conn, FIRSTSOCKET);
- Curl_ssl_close(conn, SECONDARYSOCKET);
-
- /* close possibly still open sockets */
- if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET])
- Curl_closesocket(conn, conn->sock[SECONDARYSOCKET]);
- if(CURL_SOCKET_BAD != conn->sock[FIRSTSOCKET])
- Curl_closesocket(conn, conn->sock[FIRSTSOCKET]);
- if(CURL_SOCKET_BAD != conn->tempsock[0])
- Curl_closesocket(conn, conn->tempsock[0]);
- if(CURL_SOCKET_BAD != conn->tempsock[1])
- Curl_closesocket(conn, conn->tempsock[1]);
-
-#if defined(USE_NTLM) && defined(NTLM_WB_ENABLED)
- Curl_ntlm_wb_cleanup(conn);
-#endif
-
- Curl_safefree(conn->user);
- Curl_safefree(conn->passwd);
- Curl_safefree(conn->xoauth2_bearer);
- Curl_safefree(conn->options);
- Curl_safefree(conn->proxyuser);
- Curl_safefree(conn->proxypasswd);
- Curl_safefree(conn->allocptr.proxyuserpwd);
- Curl_safefree(conn->allocptr.uagent);
- Curl_safefree(conn->allocptr.userpwd);
- Curl_safefree(conn->allocptr.accept_encoding);
- Curl_safefree(conn->allocptr.te);
- Curl_safefree(conn->allocptr.rangeline);
- Curl_safefree(conn->allocptr.ref);
- Curl_safefree(conn->allocptr.host);
- Curl_safefree(conn->allocptr.cookiehost);
- Curl_safefree(conn->allocptr.rtsp_transport);
- Curl_safefree(conn->trailer);
- Curl_safefree(conn->host.rawalloc); /* host name buffer */
- Curl_safefree(conn->proxy.rawalloc); /* proxy name buffer */
- Curl_safefree(conn->master_buffer);
-
- Curl_llist_destroy(conn->send_pipe, NULL);
- Curl_llist_destroy(conn->recv_pipe, NULL);
-
- conn->send_pipe = NULL;
- conn->recv_pipe = NULL;
-
- Curl_safefree(conn->localdev);
- Curl_free_ssl_config(&conn->ssl_config);
-
- free(conn); /* free all the connection oriented data */
-}
-
-/*
- * Disconnects the given connection. Note the connection may not be the
- * primary connection, like when freeing room in the connection cache or
- * killing of a dead old connection.
- *
- * This function MUST NOT reset state in the SessionHandle struct if that
- * isn't strictly bound to the life-time of *this* particular connection.
- *
- */
-
-CURLcode Curl_disconnect(struct connectdata *conn, bool dead_connection)
-{
- struct SessionHandle *data;
- if(!conn)
- return CURLE_OK; /* this is closed and fine already */
- data = conn->data;
-
- if(!data) {
- DEBUGF(fprintf(stderr, "DISCONNECT without easy handle, ignoring\n"));
- return CURLE_OK;
- }
-
- if(conn->dns_entry != NULL) {
- Curl_resolv_unlock(data, conn->dns_entry);
- conn->dns_entry = NULL;
- }
-
- Curl_hostcache_prune(data); /* kill old DNS cache entries */
-
- /* Cleanup NTLM connection-related data */
- Curl_http_ntlm_cleanup(conn);
-
- if(conn->handler->disconnect)
- /* This is set if protocol-specific cleanups should be made */
- conn->handler->disconnect(conn, dead_connection);
-
- /* unlink ourselves! */
- infof(data, "Closing connection %ld\n", conn->connection_id);
- Curl_conncache_remove_conn(data->state.conn_cache, conn);
-
-#if defined(USE_LIBIDN)
- if(conn->host.encalloc)
- idn_free(conn->host.encalloc); /* encoded host name buffer, must be freed
- with idn_free() since this was allocated
- by libidn */
- if(conn->proxy.encalloc)
- idn_free(conn->proxy.encalloc); /* encoded proxy name buffer, must be
- freed with idn_free() since this was
- allocated by libidn */
-#elif defined(USE_WIN32_IDN)
- free(conn->host.encalloc); /* encoded host name buffer, must be freed with
- idn_free() since this was allocated by
- curl_win32_idn_to_ascii */
- if(conn->proxy.encalloc)
- free(conn->proxy.encalloc); /* encoded proxy name buffer, must be freed
- with idn_free() since this was allocated by
- curl_win32_idn_to_ascii */
-#endif
-
- Curl_ssl_close(conn, FIRSTSOCKET);
-
- /* Indicate to all handles on the pipe that we're dead */
- if(Curl_multi_pipeline_enabled(data->multi)) {
- signalPipeClose(conn->send_pipe, TRUE);
- signalPipeClose(conn->recv_pipe, TRUE);
- }
-
- conn_free(conn);
-
- return CURLE_OK;
-}
-
-/*
- * This function should return TRUE if the socket is to be assumed to
- * be dead. Most commonly this happens when the server has closed the
- * connection due to inactivity.
- */
-static bool SocketIsDead(curl_socket_t sock)
-{
- int sval;
- bool ret_val = TRUE;
-
- sval = Curl_socket_ready(sock, CURL_SOCKET_BAD, 0);
- if(sval == 0)
- /* timeout */
- ret_val = FALSE;
-
- return ret_val;
-}
-
-static bool IsPipeliningPossible(const struct SessionHandle *handle,
- const struct connectdata *conn)
-{
- if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
- Curl_multi_pipeline_enabled(handle->multi) &&
- (handle->set.httpreq == HTTPREQ_GET ||
- handle->set.httpreq == HTTPREQ_HEAD) &&
- handle->set.httpversion != CURL_HTTP_VERSION_1_0)
- return TRUE;
-
- return FALSE;
-}
-
-bool Curl_isPipeliningEnabled(const struct SessionHandle *handle)
-{
- return Curl_multi_pipeline_enabled(handle->multi);
-}
-
-CURLcode Curl_addHandleToPipeline(struct SessionHandle *data,
- struct curl_llist *pipeline)
-{
- if(!Curl_llist_insert_next(pipeline, pipeline->tail, data))
- return CURLE_OUT_OF_MEMORY;
- return CURLE_OK;
-}
-
-int Curl_removeHandleFromPipeline(struct SessionHandle *handle,
- struct curl_llist *pipeline)
-{
- struct curl_llist_element *curr;
-
- curr = pipeline->head;
- while(curr) {
- if(curr->ptr == handle) {
- Curl_llist_remove(pipeline, curr, NULL);
- return 1; /* we removed a handle */
- }
- curr = curr->next;
- }
-
- return 0;
-}
-
-#if 0 /* this code is saved here as it is useful for debugging purposes */
-static void Curl_printPipeline(struct curl_llist *pipeline)
-{
- struct curl_llist_element *curr;
-
- curr = pipeline->head;
- while(curr) {
- struct SessionHandle *data = (struct SessionHandle *) curr->ptr;
- infof(data, "Handle in pipeline: %s\n", data->state.path);
- curr = curr->next;
- }
-}
-#endif
-
-static struct SessionHandle* gethandleathead(struct curl_llist *pipeline)
-{
- struct curl_llist_element *curr = pipeline->head;
- if(curr) {
- return (struct SessionHandle *) curr->ptr;
- }
-
- return NULL;
-}
-
-/* remove the specified connection from all (possible) pipelines and related
- queues */
-void Curl_getoff_all_pipelines(struct SessionHandle *data,
- struct connectdata *conn)
-{
- bool recv_head = (conn->readchannel_inuse &&
- (gethandleathead(conn->recv_pipe) == data)) ? TRUE : FALSE;
-
- bool send_head = (conn->writechannel_inuse &&
- (gethandleathead(conn->send_pipe) == data)) ? TRUE : FALSE;
-
- if(Curl_removeHandleFromPipeline(data, conn->recv_pipe) && recv_head)
- conn->readchannel_inuse = FALSE;
- if(Curl_removeHandleFromPipeline(data, conn->send_pipe) && send_head)
- conn->writechannel_inuse = FALSE;
-}
-
-static void signalPipeClose(struct curl_llist *pipeline, bool pipe_broke)
-{
- struct curl_llist_element *curr;
-
- if(!pipeline)
- return;
-
- curr = pipeline->head;
- while(curr) {
- struct curl_llist_element *next = curr->next;
- struct SessionHandle *data = (struct SessionHandle *) curr->ptr;
-
-#ifdef DEBUGBUILD /* debug-only code */
- if(data->magic != CURLEASY_MAGIC_NUMBER) {
- /* MAJOR BADNESS */
- infof(data, "signalPipeClose() found BAAD easy handle\n");
- }
-#endif
-
- if(pipe_broke)
- data->state.pipe_broke = TRUE;
- Curl_multi_handlePipeBreak(data);
- Curl_llist_remove(pipeline, curr, NULL);
- curr = next;
- }
-}
-
-/*
- * This function finds the connection in the connection
- * cache that has been unused for the longest time.
- *
- * Returns the pointer to the oldest idle connection, or NULL if none was
- * found.
- */
-static struct connectdata *
-find_oldest_idle_connection(struct SessionHandle *data)
-{
- struct conncache *bc = data->state.conn_cache;
- struct curl_hash_iterator iter;
- struct curl_llist_element *curr;
- struct curl_hash_element *he;
- long highscore=-1;
- long score;
- struct timeval now;
- struct connectdata *conn_candidate = NULL;
- struct connectbundle *bundle;
-
- now = Curl_tvnow();
-
- Curl_hash_start_iterate(bc->hash, &iter);
-
- he = Curl_hash_next_element(&iter);
- while(he) {
- struct connectdata *conn;
-
- bundle = he->ptr;
-
- curr = bundle->conn_list->head;
- while(curr) {
- conn = curr->ptr;
-
- if(!conn->inuse) {
- /* Set higher score for the age passed since the connection was used */
- score = Curl_tvdiff(now, conn->now);
-
- if(score > highscore) {
- highscore = score;
- conn_candidate = conn;
- }
- }
- curr = curr->next;
- }
-
- he = Curl_hash_next_element(&iter);
- }
-
- return conn_candidate;
-}
-
-/*
- * This function finds the connection in the connection
- * bundle that has been unused for the longest time.
- *
- * Returns the pointer to the oldest idle connection, or NULL if none was
- * found.
- */
-static struct connectdata *
-find_oldest_idle_connection_in_bundle(struct SessionHandle *data,
- struct connectbundle *bundle)
-{
- struct curl_llist_element *curr;
- long highscore=-1;
- long score;
- struct timeval now;
- struct connectdata *conn_candidate = NULL;
- struct connectdata *conn;
-
- (void)data;
-
- now = Curl_tvnow();
-
- curr = bundle->conn_list->head;
- while(curr) {
- conn = curr->ptr;
-
- if(!conn->inuse) {
- /* Set higher score for the age passed since the connection was used */
- score = Curl_tvdiff(now, conn->now);
-
- if(score > highscore) {
- highscore = score;
- conn_candidate = conn;
- }
- }
- curr = curr->next;
- }
-
- return conn_candidate;
-}
-
-/*
- * This function checks if given connection is dead and disconnects if so.
- * (That also removes it from the connection cache.)
- *
- * Returns TRUE if the connection actually was dead and disconnected.
- */
-static bool disconnect_if_dead(struct connectdata *conn,
- struct SessionHandle *data)
-{
- size_t pipeLen = conn->send_pipe->size + conn->recv_pipe->size;
- if(!pipeLen && !conn->inuse) {
- /* The check for a dead socket makes sense only if there are no
- handles in pipeline and the connection isn't already marked in
- use */
- bool dead;
- if(conn->handler->protocol & CURLPROTO_RTSP)
- /* RTSP is a special case due to RTP interleaving */
- dead = Curl_rtsp_connisdead(conn);
- else
- dead = SocketIsDead(conn->sock[FIRSTSOCKET]);
-
- if(dead) {
- conn->data = data;
- infof(data, "Connection %ld seems to be dead!\n", conn->connection_id);
-
- /* disconnect resources */
- Curl_disconnect(conn, /* dead_connection */TRUE);
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/*
- * Wrapper to use disconnect_if_dead() function in Curl_conncache_foreach()
- *
- * Returns always 0.
- */
-static int call_disconnect_if_dead(struct connectdata *conn,
- void *param)
-{
- struct SessionHandle* data = (struct SessionHandle*)param;
- disconnect_if_dead(conn, data);
- return 0; /* continue iteration */
-}
-
-/*
- * This function scans the connection cache for half-open/dead connections,
- * closes and removes them.
- * The cleanup is done at most once per second.
- */
-static void prune_dead_connections(struct SessionHandle *data)
-{
- struct timeval now = Curl_tvnow();
- long elapsed = Curl_tvdiff(now, data->state.conn_cache->last_cleanup);
-
- if(elapsed >= 1000L) {
- Curl_conncache_foreach(data->state.conn_cache, data,
- call_disconnect_if_dead);
- data->state.conn_cache->last_cleanup = now;
- }
-}
-
-/*
- * Given one filled in connection struct (named needle), this function should
- * detect if there already is one that has all the significant details
- * exactly the same and thus should be used instead.
- *
- * If there is a match, this function returns TRUE - and has marked the
- * connection as 'in-use'. It must later be called with ConnectionDone() to
- * return back to 'idle' (unused) state.
- *
- * The force_reuse flag is set if the connection must be used, even if
- * the pipelining strategy wants to open a new connection instead of reusing.
- */
-static bool
-ConnectionExists(struct SessionHandle *data,
- struct connectdata *needle,
- struct connectdata **usethis,
- bool *force_reuse)
-{
- struct connectdata *check;
- struct connectdata *chosen = 0;
- bool canPipeline = IsPipeliningPossible(data, needle);
- bool wantNTLMhttp = ((data->state.authhost.want & CURLAUTH_NTLM) ||
- (data->state.authhost.want & CURLAUTH_NTLM_WB)) &&
- (needle->handler->protocol & PROTO_FAMILY_HTTP) ? TRUE : FALSE;
- struct connectbundle *bundle;
-
- *force_reuse = FALSE;
-
- /* We can't pipe if the site is blacklisted */
- if(canPipeline && Curl_pipeline_site_blacklisted(data, needle)) {
- canPipeline = FALSE;
- }
-
- /* Look up the bundle with all the connections to this
- particular host */
- bundle = Curl_conncache_find_bundle(data->state.conn_cache,
- needle->host.name);
- if(bundle) {
- size_t max_pipe_len = Curl_multi_max_pipeline_length(data->multi);
- size_t best_pipe_len = max_pipe_len;
- struct curl_llist_element *curr;
-
- infof(data, "Found bundle for host %s: %p\n",
- needle->host.name, (void *)bundle);
-
- /* We can't pipe if we don't know anything about the server */
- if(canPipeline && !bundle->server_supports_pipelining) {
- infof(data, "Server doesn't support pipelining\n");
- canPipeline = FALSE;
- }
-
- curr = bundle->conn_list->head;
- while(curr) {
- bool match = FALSE;
- bool credentialsMatch = FALSE;
- size_t pipeLen;
-
- /*
- * Note that if we use a HTTP proxy, we check connections to that
- * proxy and not to the actual remote server.
- */
- check = curr->ptr;
- curr = curr->next;
-
- if(disconnect_if_dead(check, data))
- continue;
-
- pipeLen = check->send_pipe->size + check->recv_pipe->size;
-
- if(canPipeline) {
- /* Make sure the pipe has only GET requests */
- struct SessionHandle* sh = gethandleathead(check->send_pipe);
- struct SessionHandle* rh = gethandleathead(check->recv_pipe);
- if(sh) {
- if(!IsPipeliningPossible(sh, check))
- continue;
- }
- else if(rh) {
- if(!IsPipeliningPossible(rh, check))
- continue;
- }
- }
- else {
- if(pipeLen > 0) {
- /* can only happen within multi handles, and means that another easy
- handle is using this connection */
- continue;
- }
-
- if(Curl_resolver_asynch()) {
- /* ip_addr_str[0] is NUL only if the resolving of the name hasn't
- completed yet and until then we don't re-use this connection */
- if(!check->ip_addr_str[0]) {
- infof(data,
- "Connection #%ld is still name resolving, can't reuse\n",
- check->connection_id);
- continue;
- }
- }
-
- if((check->sock[FIRSTSOCKET] == CURL_SOCKET_BAD) ||
- check->bits.close) {
- /* Don't pick a connection that hasn't connected yet or that is going
- to get closed. */
- infof(data, "Connection #%ld isn't open enough, can't reuse\n",
- check->connection_id);
-#ifdef DEBUGBUILD
- if(check->recv_pipe->size > 0) {
- infof(data,
- "BAD! Unconnected #%ld has a non-empty recv pipeline!\n",
- check->connection_id);
- }
-#endif
- continue;
- }
- }
-
- if((needle->handler->flags&PROTOPT_SSL) !=
- (check->handler->flags&PROTOPT_SSL))
- /* don't do mixed SSL and non-SSL connections */
- if(!(needle->handler->protocol & check->handler->protocol))
- /* except protocols that have been upgraded via TLS */
- continue;
-
- if(needle->handler->flags&PROTOPT_SSL) {
- if((data->set.ssl.verifypeer != check->verifypeer) ||
- (data->set.ssl.verifyhost != check->verifyhost))
- continue;
- }
-
- if(needle->bits.proxy != check->bits.proxy)
- /* don't do mixed proxy and non-proxy connections */
- continue;
-
- if(!canPipeline && check->inuse)
- /* this request can't be pipelined but the checked connection is
- already in use so we skip it */
- continue;
-
- if(needle->localdev || needle->localport) {
- /* If we are bound to a specific local end (IP+port), we must not
- re-use a random other one, although if we didn't ask for a
- particular one we can reuse one that was bound.
-
- This comparison is a bit rough and too strict. Since the input
- parameters can be specified in numerous ways and still end up the
- same it would take a lot of processing to make it really accurate.
- Instead, this matching will assume that re-uses of bound connections
- will most likely also re-use the exact same binding parameters and
- missing out a few edge cases shouldn't hurt anyone very much.
- */
- if((check->localport != needle->localport) ||
- (check->localportrange != needle->localportrange) ||
- !check->localdev ||
- !needle->localdev ||
- strcmp(check->localdev, needle->localdev))
- continue;
- }
-
- if((!(needle->handler->flags & PROTOPT_CREDSPERREQUEST)) ||
- wantNTLMhttp) {
- /* This protocol requires credentials per connection or is HTTP+NTLM,
- so verify that we're using the same name and password as well */
- if(!strequal(needle->user, check->user) ||
- !strequal(needle->passwd, check->passwd)) {
- /* one of them was different */
- continue;
- }
- credentialsMatch = TRUE;
- }
-
- if(!needle->bits.httpproxy || needle->handler->flags&PROTOPT_SSL ||
- (needle->bits.httpproxy && check->bits.httpproxy &&
- needle->bits.tunnel_proxy && check->bits.tunnel_proxy &&
- Curl_raw_equal(needle->proxy.name, check->proxy.name) &&
- (needle->port == check->port))) {
- /* The requested connection does not use a HTTP proxy or it uses SSL or
- it is a non-SSL protocol tunneled over the same http proxy name and
- port number or it is a non-SSL protocol which is allowed to be
- upgraded via TLS */
-
- if((Curl_raw_equal(needle->handler->scheme, check->handler->scheme) ||
- needle->handler->protocol & check->handler->protocol) &&
- Curl_raw_equal(needle->host.name, check->host.name) &&
- needle->remote_port == check->remote_port) {
- if(needle->handler->flags & PROTOPT_SSL) {
- /* This is a SSL connection so verify that we're using the same
- SSL options as well */
- if(!Curl_ssl_config_matches(&needle->ssl_config,
- &check->ssl_config)) {
- DEBUGF(infof(data,
- "Connection #%ld has different SSL parameters, "
- "can't reuse\n",
- check->connection_id));
- continue;
- }
- else if(check->ssl[FIRSTSOCKET].state != ssl_connection_complete) {
- DEBUGF(infof(data,
- "Connection #%ld has not started SSL connect, "
- "can't reuse\n",
- check->connection_id));
- continue;
- }
- }
- match = TRUE;
- }
- }
- else { /* The requested needle connection is using a proxy,
- is the checked one using the same host, port and type? */
- if(check->bits.proxy &&
- (needle->proxytype == check->proxytype) &&
- (needle->bits.tunnel_proxy == check->bits.tunnel_proxy) &&
- Curl_raw_equal(needle->proxy.name, check->proxy.name) &&
- needle->port == check->port) {
- /* This is the same proxy connection, use it! */
- match = TRUE;
- }
- }
-
- if(match) {
- /* If we are looking for an HTTP+NTLM connection, check if this is
- already authenticating with the right credentials. If not, keep
- looking so that we can reuse NTLM connections if
- possible. (Especially we must not reuse the same connection if
- partway through a handshake!) */
- if(wantNTLMhttp) {
- if(credentialsMatch && check->ntlm.state != NTLMSTATE_NONE) {
- chosen = check;
-
- /* We must use this connection, no other */
- *force_reuse = TRUE;
- break;
- }
- else if(credentialsMatch)
- /* this is a backup choice */
- chosen = check;
- continue;
- }
-
- if(canPipeline) {
- /* We can pipeline if we want to. Let's continue looking for
- the optimal connection to use, i.e the shortest pipe that is not
- blacklisted. */
-
- if(pipeLen == 0) {
- /* We have the optimal connection. Let's stop looking. */
- chosen = check;
- break;
- }
-
- /* We can't use the connection if the pipe is full */
- if(pipeLen >= max_pipe_len)
- continue;
-
- /* We can't use the connection if the pipe is penalized */
- if(Curl_pipeline_penalized(data, check))
- continue;
-
- if(pipeLen < best_pipe_len) {
- /* This connection has a shorter pipe so far. We'll pick this
- and continue searching */
- chosen = check;
- best_pipe_len = pipeLen;
- continue;
- }
- }
- else {
- /* We have found a connection. Let's stop searching. */
- chosen = check;
- break;
- }
- }
- }
- }
-
- if(chosen) {
- *usethis = chosen;
- return TRUE; /* yes, we found one to use! */
- }
-
- return FALSE; /* no matching connecting exists */
-}
-
-/* Mark the connection as 'idle', or close it if the cache is full.
- Returns TRUE if the connection is kept, or FALSE if it was closed. */
-static bool
-ConnectionDone(struct SessionHandle *data, struct connectdata *conn)
-{
- /* data->multi->maxconnects can be negative, deal with it. */
- size_t maxconnects =
- (data->multi->maxconnects < 0) ? data->multi->num_easy * 4:
- data->multi->maxconnects;
- struct connectdata *conn_candidate = NULL;
-
- /* Mark the current connection as 'unused' */
- conn->inuse = FALSE;
-
- if(maxconnects > 0 &&
- data->state.conn_cache->num_connections > maxconnects) {
- infof(data, "Connection cache is full, closing the oldest one.\n");
-
- conn_candidate = find_oldest_idle_connection(data);
-
- if(conn_candidate) {
- /* Set the connection's owner correctly */
- conn_candidate->data = data;
-
- /* the winner gets the honour of being disconnected */
- (void)Curl_disconnect(conn_candidate, /* dead_connection */ FALSE);
- }
- }
-
- return (conn_candidate == conn) ? FALSE : TRUE;
-}
-
-/*
- * The given input connection struct pointer is to be stored in the connection
- * cache. If the cache is already full, least interesting existing connection
- * (if any) gets closed.
- *
- * The given connection should be unique. That must've been checked prior to
- * this call.
- */
-static CURLcode ConnectionStore(struct SessionHandle *data,
- struct connectdata *conn)
-{
- return Curl_conncache_add_conn(data->state.conn_cache, conn);
-}
-
-/* after a TCP connection to the proxy has been verified, this function does
- the next magic step.
-
- Note: this function's sub-functions call failf()
-
-*/
-CURLcode Curl_connected_proxy(struct connectdata *conn,
- int sockindex)
-{
- if(!conn->bits.proxy || sockindex)
- /* this magic only works for the primary socket as the secondary is used
- for FTP only and it has FTP specific magic in ftp.c */
- return CURLE_OK;
-
- switch(conn->proxytype) {
-#ifndef CURL_DISABLE_PROXY
- case CURLPROXY_SOCKS5:
- case CURLPROXY_SOCKS5_HOSTNAME:
- return Curl_SOCKS5(conn->proxyuser, conn->proxypasswd,
- conn->host.name, conn->remote_port,
- FIRSTSOCKET, conn);
-
- case CURLPROXY_SOCKS4:
- return Curl_SOCKS4(conn->proxyuser, conn->host.name,
- conn->remote_port, FIRSTSOCKET, conn, FALSE);
-
- case CURLPROXY_SOCKS4A:
- return Curl_SOCKS4(conn->proxyuser, conn->host.name,
- conn->remote_port, FIRSTSOCKET, conn, TRUE);
-
-#endif /* CURL_DISABLE_PROXY */
- case CURLPROXY_HTTP:
- case CURLPROXY_HTTP_1_0:
- /* do nothing here. handled later. */
- break;
- default:
- break;
- } /* switch proxytype */
-
- return CURLE_OK;
-}
-
-/*
- * verboseconnect() displays verbose information after a connect
- */
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-void Curl_verboseconnect(struct connectdata *conn)
-{
- if(conn->data->set.verbose)
- infof(conn->data, "Connected to %s (%s) port %ld (#%ld)\n",
- conn->bits.proxy ? conn->proxy.dispname : conn->host.dispname,
- conn->ip_addr_str, conn->port, conn->connection_id);
-}
-#endif
-
-int Curl_protocol_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- if(conn->handler->proto_getsock)
- return conn->handler->proto_getsock(conn, socks, numsocks);
- return GETSOCK_BLANK;
-}
-
-int Curl_doing_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks)
-{
- if(conn && conn->handler->doing_getsock)
- return conn->handler->doing_getsock(conn, socks, numsocks);
- return GETSOCK_BLANK;
-}
-
-/*
- * We are doing protocol-specific connecting and this is being called over and
- * over from the multi interface until the connection phase is done on
- * protocol layer.
- */
-
-CURLcode Curl_protocol_connecting(struct connectdata *conn,
- bool *done)
-{
- CURLcode result=CURLE_OK;
-
- if(conn && conn->handler->connecting) {
- *done = FALSE;
- result = conn->handler->connecting(conn, done);
- }
- else
- *done = TRUE;
-
- return result;
-}
-
-/*
- * We are DOING this is being called over and over from the multi interface
- * until the DOING phase is done on protocol layer.
- */
-
-CURLcode Curl_protocol_doing(struct connectdata *conn, bool *done)
-{
- CURLcode result=CURLE_OK;
-
- if(conn && conn->handler->doing) {
- *done = FALSE;
- result = conn->handler->doing(conn, done);
- }
- else
- *done = TRUE;
-
- return result;
-}
-
-/*
- * We have discovered that the TCP connection has been successful, we can now
- * proceed with some action.
- *
- */
-CURLcode Curl_protocol_connect(struct connectdata *conn,
- bool *protocol_done)
-{
- CURLcode result=CURLE_OK;
-
- *protocol_done = FALSE;
-
- if(conn->bits.tcpconnect[FIRSTSOCKET] && conn->bits.protoconnstart) {
- /* We already are connected, get back. This may happen when the connect
- worked fine in the first call, like when we connect to a local server
- or proxy. Note that we don't know if the protocol is actually done.
-
- Unless this protocol doesn't have any protocol-connect callback, as
- then we know we're done. */
- if(!conn->handler->connecting)
- *protocol_done = TRUE;
-
- return CURLE_OK;
- }
-
- if(!conn->bits.protoconnstart) {
-
- result = Curl_proxy_connect(conn);
- if(result)
- return result;
-
- if(conn->bits.tunnel_proxy && conn->bits.httpproxy &&
- (conn->tunnel_state[FIRSTSOCKET] != TUNNEL_COMPLETE))
- /* when using an HTTP tunnel proxy, await complete tunnel establishment
- before proceeding further. Return CURLE_OK so we'll be called again */
- return CURLE_OK;
-
- if(conn->handler->connect_it) {
- /* is there a protocol-specific connect() procedure? */
-
- /* Call the protocol-specific connect function */
- result = conn->handler->connect_it(conn, protocol_done);
- }
- else
- *protocol_done = TRUE;
-
- /* it has started, possibly even completed but that knowledge isn't stored
- in this bit! */
- if(!result)
- conn->bits.protoconnstart = TRUE;
- }
-
- return result; /* pass back status */
-}
-
-/*
- * Helpers for IDNA convertions.
- */
-static bool is_ASCII_name(const char *hostname)
-{
- const unsigned char *ch = (const unsigned char*)hostname;
-
- while(*ch) {
- if(*ch++ & 0x80)
- return FALSE;
- }
- return TRUE;
-}
-
-#ifdef USE_LIBIDN
-/*
- * Check if characters in hostname is allowed in Top Level Domain.
- */
-static bool tld_check_name(struct SessionHandle *data,
- const char *ace_hostname)
-{
- size_t err_pos;
- char *uc_name = NULL;
- int rc;
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
- const char *tld_errmsg = "<no msg>";
-#else
- (void)data;
-#endif
-
- /* Convert (and downcase) ACE-name back into locale's character set */
- rc = idna_to_unicode_lzlz(ace_hostname, &uc_name, 0);
- if(rc != IDNA_SUCCESS)
- return FALSE;
-
- rc = tld_check_lz(uc_name, &err_pos, NULL);
-#ifndef CURL_DISABLE_VERBOSE_STRINGS
-#ifdef HAVE_TLD_STRERROR
- if(rc != TLD_SUCCESS)
- tld_errmsg = tld_strerror((Tld_rc)rc);
-#endif
- if(rc == TLD_INVALID)
- infof(data, "WARNING: %s; pos %u = `%c'/0x%02X\n",
- tld_errmsg, err_pos, uc_name[err_pos],
- uc_name[err_pos] & 255);
- else if(rc != TLD_SUCCESS)
- infof(data, "WARNING: TLD check for %s failed; %s\n",
- uc_name, tld_errmsg);
-#endif /* CURL_DISABLE_VERBOSE_STRINGS */
- if(uc_name)
- idn_free(uc_name);
- if(rc != TLD_SUCCESS)
- return FALSE;
-
- return TRUE;
-}
-#endif
-
-/*
- * Perform any necessary IDN conversion of hostname
- */
-static void fix_hostname(struct SessionHandle *data,
- struct connectdata *conn, struct hostname *host)
-{
- size_t len;
-
-#ifndef USE_LIBIDN
- (void)data;
- (void)conn;
-#elif defined(CURL_DISABLE_VERBOSE_STRINGS)
- (void)conn;
-#endif
-
- /* set the name we use to display the host name */
- host->dispname = host->name;
-
- len = strlen(host->name);
- if(host->name[len-1] == '.')
- /* strip off a single trailing dot if present, primarily for SNI but
- there's no use for it */
- host->name[len-1]=0;
-
- if(!is_ASCII_name(host->name)) {
-#ifdef USE_LIBIDN
- /*************************************************************
- * Check name for non-ASCII and convert hostname to ACE form.
- *************************************************************/
- if(stringprep_check_version(LIBIDN_REQUIRED_VERSION)) {
- char *ace_hostname = NULL;
- int rc = idna_to_ascii_lz(host->name, &ace_hostname, 0);
- infof (data, "Input domain encoded as `%s'\n",
- stringprep_locale_charset ());
- if(rc != IDNA_SUCCESS)
- infof(data, "Failed to convert %s to ACE; %s\n",
- host->name, Curl_idn_strerror(conn,rc));
- else {
- /* tld_check_name() displays a warning if the host name contains
- "illegal" characters for this TLD */
- (void)tld_check_name(data, ace_hostname);
-
- host->encalloc = ace_hostname;
- /* change the name pointer to point to the encoded hostname */
- host->name = host->encalloc;
- }
- }
-#elif defined(USE_WIN32_IDN)
- /*************************************************************
- * Check name for non-ASCII and convert hostname to ACE form.
- *************************************************************/
- char *ace_hostname = NULL;
- int rc = curl_win32_idn_to_ascii(host->name, &ace_hostname);
- if(rc == 0)
- infof(data, "Failed to convert %s to ACE;\n",
- host->name);
- else {
- host->encalloc = ace_hostname;
- /* change the name pointer to point to the encoded hostname */
- host->name = host->encalloc;
- }
-#else
- infof(data, "IDN support not present, can't parse Unicode domains\n");
-#endif
- }
-}
-
-static void llist_dtor(void *user, void *element)
-{
- (void)user;
- (void)element;
- /* Do nothing */
-}
-
-/*
- * Allocate and initialize a new connectdata object.
- */
-static struct connectdata *allocate_conn(struct SessionHandle *data)
-{
- struct connectdata *conn = calloc(1, sizeof(struct connectdata));
- if(!conn)
- return NULL;
-
- conn->handler = &Curl_handler_dummy; /* Be sure we have a handler defined
- already from start to avoid NULL
- situations and checks */
-
- /* and we setup a few fields in case we end up actually using this struct */
-
- conn->sock[FIRSTSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */
- conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */
- conn->tempsock[0] = CURL_SOCKET_BAD; /* no file descriptor */
- conn->tempsock[1] = CURL_SOCKET_BAD; /* no file descriptor */
- conn->connection_id = -1; /* no ID */
- conn->port = -1; /* unknown at this point */
- conn->remote_port = -1; /* unknown */
-
- /* Default protocol-independent behavior doesn't support persistent
- connections, so we set this to force-close. Protocols that support
- this need to set this to FALSE in their "curl_do" functions. */
- connclose(conn, "Default to force-close");
-
- /* Store creation time to help future close decision making */
- conn->created = Curl_tvnow();
-
- conn->data = data; /* Setup the association between this connection
- and the SessionHandle */
-
- conn->proxytype = data->set.proxytype; /* type */
-
-#ifdef CURL_DISABLE_PROXY
-
- conn->bits.proxy = FALSE;
- conn->bits.httpproxy = FALSE;
- conn->bits.proxy_user_passwd = FALSE;
- conn->bits.tunnel_proxy = FALSE;
-
-#else /* CURL_DISABLE_PROXY */
-
- /* note that these two proxy bits are now just on what looks to be
- requested, they may be altered down the road */
- conn->bits.proxy = (data->set.str[STRING_PROXY] &&
- *data->set.str[STRING_PROXY])?TRUE:FALSE;
- conn->bits.httpproxy = (conn->bits.proxy &&
- (conn->proxytype == CURLPROXY_HTTP ||
- conn->proxytype == CURLPROXY_HTTP_1_0))?TRUE:FALSE;
- conn->bits.proxy_user_passwd =
- (NULL != data->set.str[STRING_PROXYUSERNAME])?TRUE:FALSE;
- conn->bits.tunnel_proxy = data->set.tunnel_thru_httpproxy;
-
-#endif /* CURL_DISABLE_PROXY */
-
- conn->bits.user_passwd = (NULL != data->set.str[STRING_USERNAME])?TRUE:FALSE;
- conn->bits.ftp_use_epsv = data->set.ftp_use_epsv;
- conn->bits.ftp_use_eprt = data->set.ftp_use_eprt;
-
- conn->verifypeer = data->set.ssl.verifypeer;
- conn->verifyhost = data->set.ssl.verifyhost;
-
- conn->ip_version = data->set.ipver;
-
-#if defined(USE_NTLM) && defined(NTLM_WB_ENABLED)
- conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;
- conn->ntlm_auth_hlpr_pid = 0;
- conn->challenge_header = NULL;
- conn->response_header = NULL;
-#endif
-
- if(Curl_multi_pipeline_enabled(data->multi) &&
- !conn->master_buffer) {
- /* Allocate master_buffer to be used for pipelining */
- conn->master_buffer = calloc(BUFSIZE, sizeof (char));
- if(!conn->master_buffer)
- goto error;
- }
-
- /* Initialize the pipeline lists */
- conn->send_pipe = Curl_llist_alloc((curl_llist_dtor) llist_dtor);
- conn->recv_pipe = Curl_llist_alloc((curl_llist_dtor) llist_dtor);
- if(!conn->send_pipe || !conn->recv_pipe)
- goto error;
-
-#ifdef HAVE_GSSAPI
- conn->data_prot = PROT_CLEAR;
-#endif
-
- /* Store the local bind parameters that will be used for this connection */
- if(data->set.str[STRING_DEVICE]) {
- conn->localdev = strdup(data->set.str[STRING_DEVICE]);
- if(!conn->localdev)
- goto error;
- }
- conn->localportrange = data->set.localportrange;
- conn->localport = data->set.localport;
-
- /* the close socket stuff needs to be copied to the connection struct as
- it may live on without (this specific) SessionHandle */
- conn->fclosesocket = data->set.fclosesocket;
- conn->closesocket_client = data->set.closesocket_client;
-
- return conn;
- error:
-
- Curl_llist_destroy(conn->send_pipe, NULL);
- Curl_llist_destroy(conn->recv_pipe, NULL);
-
- conn->send_pipe = NULL;
- conn->recv_pipe = NULL;
-
- Curl_safefree(conn->master_buffer);
- Curl_safefree(conn->localdev);
- Curl_safefree(conn);
- return NULL;
-}
-
-static CURLcode findprotocol(struct SessionHandle *data,
- struct connectdata *conn,
- const char *protostr)
-{
- const struct Curl_handler * const *pp;
- const struct Curl_handler *p;
-
- /* Scan protocol handler table and match against 'protostr' to set a few
- variables based on the URL. Now that the handler may be changed later
- when the protocol specific setup function is called. */
- for(pp = protocols; (p = *pp) != NULL; pp++) {
- if(Curl_raw_equal(p->scheme, protostr)) {
- /* Protocol found in table. Check if allowed */
- if(!(data->set.allowed_protocols & p->protocol))
- /* nope, get out */
- break;
-
- /* it is allowed for "normal" request, now do an extra check if this is
- the result of a redirect */
- if(data->state.this_is_a_follow &&
- !(data->set.redir_protocols & p->protocol))
- /* nope, get out */
- break;
-
- /* Perform setup complement if some. */
- conn->handler = conn->given = p;
-
- /* 'port' and 'remote_port' are set in setup_connection_internals() */
- return CURLE_OK;
- }
- }
-
-
- /* The protocol was not found in the table, but we don't have to assign it
- to anything since it is already assigned to a dummy-struct in the
- create_conn() function when the connectdata struct is allocated. */
- failf(data, "Protocol \"%s\" not supported or disabled in " LIBCURL_NAME,
- protostr);
-
- return CURLE_UNSUPPORTED_PROTOCOL;
-}
-
-/*
- * Parse URL and fill in the relevant members of the connection struct.
- */
-static CURLcode parseurlandfillconn(struct SessionHandle *data,
- struct connectdata *conn,
- bool *prot_missing,
- char **userp, char **passwdp,
- char **optionsp)
-{
- char *at;
- char *fragment;
- char *path = data->state.path;
- char *query;
- int rc;
- char protobuf[16] = "";
- const char *protop = "";
- CURLcode result;
- bool rebuild_url = FALSE;
-
- *prot_missing = FALSE;
-
- /*************************************************************
- * Parse the URL.
- *
- * We need to parse the url even when using the proxy, because we will need
- * the hostname and port in case we are trying to SSL connect through the
- * proxy -- and we don't know if we will need to use SSL until we parse the
- * url ...
- ************************************************************/
- if((2 == sscanf(data->change.url, "%15[^:]:%[^\n]",
- protobuf, path)) &&
- Curl_raw_equal(protobuf, "file")) {
- if(path[0] == '/' && path[1] == '/') {
- /* Allow omitted hostname (e.g. file:/<path>). This is not strictly
- * speaking a valid file: URL by RFC 1738, but treating file:/<path> as
- * file://localhost/<path> is similar to how other schemes treat missing
- * hostnames. See RFC 1808. */
-
- /* This cannot be done with strcpy() in a portable manner, since the
- memory areas overlap! */
- memmove(path, path + 2, strlen(path + 2)+1);
- }
- /*
- * we deal with file://<host>/<path> differently since it supports no
- * hostname other than "localhost" and "127.0.0.1", which is unique among
- * the URL protocols specified in RFC 1738
- */
- if(path[0] != '/') {
- /* the URL included a host name, we ignore host names in file:// URLs
- as the standards don't define what to do with them */
- char *ptr=strchr(path, '/');
- if(ptr) {
- /* there was a slash present
-
- RFC1738 (section 3.1, page 5) says:
-
- The rest of the locator consists of data specific to the scheme,
- and is known as the "url-path". It supplies the details of how the
- specified resource can be accessed. Note that the "/" between the
- host (or port) and the url-path is NOT part of the url-path.
-
- As most agents use file://localhost/foo to get '/foo' although the
- slash preceding foo is a separator and not a slash for the path,
- a URL as file://localhost//foo must be valid as well, to refer to
- the same file with an absolute path.
- */
-
- if(ptr[1] && ('/' == ptr[1]))
- /* if there was two slashes, we skip the first one as that is then
- used truly as a separator */
- ptr++;
-
- /* This cannot be made with strcpy, as the memory chunks overlap! */
- memmove(path, ptr, strlen(ptr)+1);
- }
- }
-
- protop = "file"; /* protocol string */
- }
- else {
- /* clear path */
- path[0]=0;
-
- if(2 > sscanf(data->change.url,
- "%15[^\n:]://%[^\n/?]%[^\n]",
- protobuf,
- conn->host.name, path)) {
-
- /*
- * The URL was badly formatted, let's try the browser-style _without_
- * protocol specified like 'http://'.
- */
- rc = sscanf(data->change.url, "%[^\n/?]%[^\n]", conn->host.name, path);
- if(1 > rc) {
- /*
- * We couldn't even get this format.
- * djgpp 2.04 has a sscanf() bug where 'conn->host.name' is
- * assigned, but the return value is EOF!
- */
-#if defined(__DJGPP__) && (DJGPP_MINOR == 4)
- if(!(rc == -1 && *conn->host.name))
-#endif
- {
- failf(data, "<url> malformed");
- return CURLE_URL_MALFORMAT;
- }
- }
-
- /*
- * Since there was no protocol part specified, we guess what protocol it
- * is based on the first letters of the server name.
- */
-
- /* Note: if you add a new protocol, please update the list in
- * lib/version.c too! */
-
- if(checkprefix("FTP.", conn->host.name))
- protop = "ftp";
- else if(checkprefix("DICT.", conn->host.name))
- protop = "DICT";
- else if(checkprefix("LDAP.", conn->host.name))
- protop = "LDAP";
- else if(checkprefix("IMAP.", conn->host.name))
- protop = "IMAP";
- else if(checkprefix("SMTP.", conn->host.name))
- protop = "smtp";
- else if(checkprefix("POP3.", conn->host.name))
- protop = "pop3";
- else {
- protop = "http";
- }
-
- *prot_missing = TRUE; /* not given in URL */
- }
- else
- protop = protobuf;
- }
-
- /* We search for '?' in the host name (but only on the right side of a
- * @-letter to allow ?-letters in username and password) to handle things
- * like http://example.com?param= (notice the missing '/').
- */
- at = strchr(conn->host.name, '@');
- if(at)
- query = strchr(at+1, '?');
- else
- query = strchr(conn->host.name, '?');
-
- if(query) {
- /* We must insert a slash before the '?'-letter in the URL. If the URL had
- a slash after the '?', that is where the path currently begins and the
- '?string' is still part of the host name.
-
- We must move the trailing part from the host name and put it first in
- the path. And have it all prefixed with a slash.
- */
-
- size_t hostlen = strlen(query);
- size_t pathlen = strlen(path);
-
- /* move the existing path plus the zero byte forward, to make room for
- the host-name part */
- memmove(path+hostlen+1, path, pathlen+1);
-
- /* now copy the trailing host part in front of the existing path */
- memcpy(path+1, query, hostlen);
-
- path[0]='/'; /* prepend the missing slash */
- rebuild_url = TRUE;
-
- *query=0; /* now cut off the hostname at the ? */
- }
- else if(!path[0]) {
- /* if there's no path set, use a single slash */
- strcpy(path, "/");
- rebuild_url = TRUE;
- }
-
- /* If the URL is malformatted (missing a '/' after hostname before path) we
- * insert a slash here. The only letter except '/' we accept to start a path
- * is '?'.
- */
- if(path[0] == '?') {
- /* We need this function to deal with overlapping memory areas. We know
- that the memory area 'path' points to is 'urllen' bytes big and that
- is bigger than the path. Use +1 to move the zero byte too. */
- memmove(&path[1], path, strlen(path)+1);
- path[0] = '/';
- rebuild_url = TRUE;
- }
- else {
- /* sanitise paths and remove ../ and ./ sequences according to RFC3986 */
- char *newp = Curl_dedotdotify(path);
- if(!newp)
- return CURLE_OUT_OF_MEMORY;
-
- if(strcmp(newp, path)) {
- rebuild_url = TRUE;
- free(data->state.pathbuffer);
- data->state.pathbuffer = newp;
- data->state.path = newp;
- path = newp;
- }
- else
- free(newp);
- }
-
- /*
- * "rebuild_url" means that one or more URL components have been modified so
- * we need to generate an updated full version. We need the corrected URL
- * when communicating over HTTP proxy and we don't know at this point if
- * we're using a proxy or not.
- */
- if(rebuild_url) {
- char *reurl;
-
- size_t plen = strlen(path); /* new path, should be 1 byte longer than
- the original */
- size_t urllen = strlen(data->change.url); /* original URL length */
-
- size_t prefixlen = strlen(conn->host.name);
-
- if(!*prot_missing)
- prefixlen += strlen(protop) + strlen("://");
-
- reurl = malloc(urllen + 2); /* 2 for zerobyte + slash */
- if(!reurl)
- return CURLE_OUT_OF_MEMORY;
-
- /* copy the prefix */
- memcpy(reurl, data->change.url, prefixlen);
-
- /* append the trailing piece + zerobyte */
- memcpy(&reurl[prefixlen], path, plen + 1);
-
- /* possible free the old one */
- if(data->change.url_alloc) {
- Curl_safefree(data->change.url);
- data->change.url_alloc = FALSE;
- }
-
- infof(data, "Rebuilt URL to: %s\n", reurl);
-
- data->change.url = reurl;
- data->change.url_alloc = TRUE; /* free this later */
- }
-
- /*
- * Parse the login details from the URL and strip them out of
- * the host name
- */
- result = parse_url_login(data, conn, userp, passwdp, optionsp);
- if(result != CURLE_OK)
- return result;
-
- if(conn->host.name[0] == '[') {
- /* This looks like an IPv6 address literal. See if there is an address
- scope if there is no location header */
- char *percent = strchr(conn->host.name, '%');
- if(percent) {
- unsigned int identifier_offset = 3;
- char *endp;
- unsigned long scope;
- if(strncmp("%25", percent, 3) != 0) {
- infof(data,
- "Please URL encode %% as %%25, see RFC 6874.\n");
- identifier_offset = 1;
- }
- scope = strtoul(percent + identifier_offset, &endp, 10);
- if(*endp == ']') {
- /* The address scope was well formed. Knock it out of the
- hostname. */
- memmove(percent, endp, strlen(endp)+1);
- conn->scope = (unsigned int)scope;
- }
- else {
- /* Zone identifier is not numeric */
-#if defined(HAVE_NET_IF_H) && defined(IFNAMSIZ) && defined(HAVE_IF_NAMETOINDEX)
- char ifname[IFNAMSIZ + 2];
- char *square_bracket;
- unsigned int scopeidx = 0;
- strncpy(ifname, percent + identifier_offset, IFNAMSIZ + 2);
- /* Ensure nullbyte termination */
- ifname[IFNAMSIZ + 1] = '\0';
- square_bracket = strchr(ifname, ']');
- if(square_bracket) {
- /* Remove ']' */
- *square_bracket = '\0';
- scopeidx = if_nametoindex(ifname);
- if(scopeidx == 0) {
- infof(data, "Invalid network interface: %s; %s\n", ifname,
- strerror(errno));
- }
- }
- if(scopeidx > 0) {
- /* Remove zone identifier from hostname */
- memmove(percent,
- percent + identifier_offset + strlen(ifname),
- identifier_offset + strlen(ifname));
- conn->scope = scopeidx;
- }
- else
-#endif /* HAVE_NET_IF_H && IFNAMSIZ */
- infof(data, "Invalid IPv6 address format\n");
- }
- }
- }
-
- if(data->set.scope)
- /* Override any scope that was set above. */
- conn->scope = data->set.scope;
-
- /* Remove the fragment part of the path. Per RFC 2396, this is always the
- last part of the URI. We are looking for the first '#' so that we deal
- gracefully with non conformant URI such as http://example.com#foo#bar. */
- fragment = strchr(path, '#');
- if(fragment) {
- *fragment = 0;
-
- /* we know the path part ended with a fragment, so we know the full URL
- string does too and we need to cut it off from there so it isn't used
- over proxy */
- fragment = strchr(data->change.url, '#');
- if(fragment)
- *fragment = 0;
- }
-
- /*
- * So if the URL was A://B/C#D,
- * protop is A
- * conn->host.name is B
- * data->state.path is /C
- */
-
- return findprotocol(data, conn, protop);
-}
-
-/*
- * If we're doing a resumed transfer, we need to setup our stuff
- * properly.
- */
-static CURLcode setup_range(struct SessionHandle *data)
-{
- struct UrlState *s = &data->state;
- s->resume_from = data->set.set_resume_from;
- if(s->resume_from || data->set.str[STRING_SET_RANGE]) {
- if(s->rangestringalloc)
- free(s->range);
-
- if(s->resume_from)
- s->range = aprintf("%" CURL_FORMAT_CURL_OFF_TU "-", s->resume_from);
- else
- s->range = strdup(data->set.str[STRING_SET_RANGE]);
-
- s->rangestringalloc = (s->range)?TRUE:FALSE;
-
- if(!s->range)
- return CURLE_OUT_OF_MEMORY;
-
- /* tell ourselves to fetch this range */
- s->use_range = TRUE; /* enable range download */
- }
- else
- s->use_range = FALSE; /* disable range download */
-
- return CURLE_OK;
-}
-
-
-/*
- * setup_connection_internals() -
- *
- * Setup connection internals specific to the requested protocol in the
- * SessionHandle. This is inited and setup before the connection is made but
- * is about the particular protocol that is to be used.
- *
- * This MUST get called after proxy magic has been figured out.
- */
-static CURLcode setup_connection_internals(struct connectdata *conn)
-{
- const struct Curl_handler * p;
- CURLcode result;
- struct SessionHandle *data = conn->data;
-
- /* in some case in the multi state-machine, we go back to the CONNECT state
- and then a second (or third or...) call to this function will be made
- without doing a DISCONNECT or DONE in between (since the connection is
- yet in place) and therefore this function needs to first make sure
- there's no lingering previous data allocated. */
- Curl_free_request_state(data);
-
- memset(&data->req, 0, sizeof(struct SingleRequest));
- data->req.maxdownload = -1;
-
- conn->socktype = SOCK_STREAM; /* most of them are TCP streams */
-
- /* Perform setup complement if some. */
- p = conn->handler;
-
- if(p->setup_connection) {
- result = (*p->setup_connection)(conn);
-
- if(result != CURLE_OK)
- return result;
-
- p = conn->handler; /* May have changed. */
- }
-
- if(conn->port < 0)
- /* we check for -1 here since if proxy was detected already, this
- was very likely already set to the proxy port */
- conn->port = p->defport;
-
- /* only if remote_port was not already parsed off the URL we use the
- default port number */
- if(conn->remote_port < 0)
- conn->remote_port = (unsigned short)conn->given->defport;
-
- return CURLE_OK;
-}
-
-/*
- * Curl_free_request_state() should free temp data that was allocated in the
- * SessionHandle for this single request.
- */
-
-void Curl_free_request_state(struct SessionHandle *data)
-{
- Curl_safefree(data->req.protop);
- Curl_safefree(data->req.newurl);
-}
-
-
-#ifndef CURL_DISABLE_PROXY
-/****************************************************************
-* Checks if the host is in the noproxy list. returns true if it matches
-* and therefore the proxy should NOT be used.
-****************************************************************/
-static bool check_noproxy(const char* name, const char* no_proxy)
-{
- /* no_proxy=domain1.dom,host.domain2.dom
- * (a comma-separated list of hosts which should
- * not be proxied, or an asterisk to override
- * all proxy variables)
- */
- size_t tok_start;
- size_t tok_end;
- const char* separator = ", ";
- size_t no_proxy_len;
- size_t namelen;
- char *endptr;
-
- if(no_proxy && no_proxy[0]) {
- if(Curl_raw_equal("*", no_proxy)) {
- return TRUE;
- }
-
- /* NO_PROXY was specified and it wasn't just an asterisk */
-
- no_proxy_len = strlen(no_proxy);
- endptr = strchr(name, ':');
- if(endptr)
- namelen = endptr - name;
- else
- namelen = strlen(name);
-
- for(tok_start = 0; tok_start < no_proxy_len; tok_start = tok_end + 1) {
- while(tok_start < no_proxy_len &&
- strchr(separator, no_proxy[tok_start]) != NULL) {
- /* Look for the beginning of the token. */
- ++tok_start;
- }
-
- if(tok_start == no_proxy_len)
- break; /* It was all trailing separator chars, no more tokens. */
-
- for(tok_end = tok_start; tok_end < no_proxy_len &&
- strchr(separator, no_proxy[tok_end]) == NULL; ++tok_end)
- /* Look for the end of the token. */
- ;
-
- /* To match previous behaviour, where it was necessary to specify
- * ".local.com" to prevent matching "notlocal.com", we will leave
- * the '.' off.
- */
- if(no_proxy[tok_start] == '.')
- ++tok_start;
-
- if((tok_end - tok_start) <= namelen) {
- /* Match the last part of the name to the domain we are checking. */
- const char *checkn = name + namelen - (tok_end - tok_start);
- if(Curl_raw_nequal(no_proxy + tok_start, checkn,
- tok_end - tok_start)) {
- if((tok_end - tok_start) == namelen || *(checkn - 1) == '.') {
- /* We either have an exact match, or the previous character is a .
- * so it is within the same domain, so no proxy for this host.
- */
- return TRUE;
- }
- }
- } /* if((tok_end - tok_start) <= namelen) */
- } /* for(tok_start = 0; tok_start < no_proxy_len;
- tok_start = tok_end + 1) */
- } /* NO_PROXY was specified and it wasn't just an asterisk */
-
- return FALSE;
-}
-
-/****************************************************************
-* Detect what (if any) proxy to use. Remember that this selects a host
-* name and is not limited to HTTP proxies only.
-* The returned pointer must be freed by the caller (unless NULL)
-****************************************************************/
-static char *detect_proxy(struct connectdata *conn)
-{
- char *proxy = NULL;
-
-#ifndef CURL_DISABLE_HTTP
- /* If proxy was not specified, we check for default proxy environment
- * variables, to enable i.e Lynx compliance:
- *
- * http_proxy=http://some.server.dom:port/
- * https_proxy=http://some.server.dom:port/
- * ftp_proxy=http://some.server.dom:port/
- * no_proxy=domain1.dom,host.domain2.dom
- * (a comma-separated list of hosts which should
- * not be proxied, or an asterisk to override
- * all proxy variables)
- * all_proxy=http://some.server.dom:port/
- * (seems to exist for the CERN www lib. Probably
- * the first to check for.)
- *
- * For compatibility, the all-uppercase versions of these variables are
- * checked if the lowercase versions don't exist.
- */
- char *no_proxy=NULL;
- char proxy_env[128];
-
- no_proxy=curl_getenv("no_proxy");
- if(!no_proxy)
- no_proxy=curl_getenv("NO_PROXY");
-
- if(!check_noproxy(conn->host.name, no_proxy)) {
- /* It was not listed as without proxy */
- const char *protop = conn->handler->scheme;
- char *envp = proxy_env;
- char *prox;
-
- /* Now, build <protocol>_proxy and check for such a one to use */
- while(*protop)
- *envp++ = (char)tolower((int)*protop++);
-
- /* append _proxy */
- strcpy(envp, "_proxy");
-
- /* read the protocol proxy: */
- prox=curl_getenv(proxy_env);
-
- /*
- * We don't try the uppercase version of HTTP_PROXY because of
- * security reasons:
- *
- * When curl is used in a webserver application
- * environment (cgi or php), this environment variable can
- * be controlled by the web server user by setting the
- * http header 'Proxy:' to some value.
- *
- * This can cause 'internal' http/ftp requests to be
- * arbitrarily redirected by any external attacker.
- */
- if(!prox && !Curl_raw_equal("http_proxy", proxy_env)) {
- /* There was no lowercase variable, try the uppercase version: */
- Curl_strntoupper(proxy_env, proxy_env, sizeof(proxy_env));
- prox=curl_getenv(proxy_env);
- }
-
- if(prox && *prox) { /* don't count "" strings */
- proxy = prox; /* use this */
- }
- else {
- proxy = curl_getenv("all_proxy"); /* default proxy to use */
- if(!proxy)
- proxy=curl_getenv("ALL_PROXY");
- }
- } /* if(!check_noproxy(conn->host.name, no_proxy)) - it wasn't specified
- non-proxy */
- if(no_proxy)
- free(no_proxy);
-
-#else /* !CURL_DISABLE_HTTP */
-
- (void)conn;
-#endif /* CURL_DISABLE_HTTP */
-
- return proxy;
-}
-
-/*
- * If this is supposed to use a proxy, we need to figure out the proxy
- * host name, so that we can re-use an existing connection
- * that may exist registered to the same proxy host.
- * proxy will be freed before this function returns.
- */
-static CURLcode parse_proxy(struct SessionHandle *data,
- struct connectdata *conn, char *proxy)
-{
- char *prox_portno;
- char *endofprot;
-
- /* We use 'proxyptr' to point to the proxy name from now on... */
- char *proxyptr;
- char *portptr;
- char *atsign;
-
- /* We do the proxy host string parsing here. We want the host name and the
- * port name. Accept a protocol:// prefix
- */
-
- /* Parse the protocol part if present */
- endofprot = strstr(proxy, "://");
- if(endofprot) {
- proxyptr = endofprot+3;
- if(checkprefix("socks5h", proxy))
- conn->proxytype = CURLPROXY_SOCKS5_HOSTNAME;
- else if(checkprefix("socks5", proxy))
- conn->proxytype = CURLPROXY_SOCKS5;
- else if(checkprefix("socks4a", proxy))
- conn->proxytype = CURLPROXY_SOCKS4A;
- else if(checkprefix("socks4", proxy) || checkprefix("socks", proxy))
- conn->proxytype = CURLPROXY_SOCKS4;
- /* Any other xxx:// : change to http proxy */
- }
- else
- proxyptr = proxy; /* No xxx:// head: It's a HTTP proxy */
-
- /* Is there a username and password given in this proxy url? */
- atsign = strchr(proxyptr, '@');
- if(atsign) {
- CURLcode res = CURLE_OK;
- char *proxyuser = NULL;
- char *proxypasswd = NULL;
-
- res = parse_login_details(proxyptr, atsign - proxyptr,
- &proxyuser, &proxypasswd, NULL);
- if(!res) {
- /* found user and password, rip them out. note that we are
- unescaping them, as there is otherwise no way to have a
- username or password with reserved characters like ':' in
- them. */
- Curl_safefree(conn->proxyuser);
- if(proxyuser && strlen(proxyuser) < MAX_CURL_USER_LENGTH)
- conn->proxyuser = curl_easy_unescape(data, proxyuser, 0, NULL);
- else
- conn->proxyuser = strdup("");
-
- if(!conn->proxyuser)
- res = CURLE_OUT_OF_MEMORY;
- else {
- Curl_safefree(conn->proxypasswd);
- if(proxypasswd && strlen(proxypasswd) < MAX_CURL_PASSWORD_LENGTH)
- conn->proxypasswd = curl_easy_unescape(data, proxypasswd, 0, NULL);
- else
- conn->proxypasswd = strdup("");
-
- if(!conn->proxypasswd)
- res = CURLE_OUT_OF_MEMORY;
- }
-
- if(!res) {
- conn->bits.proxy_user_passwd = TRUE; /* enable it */
- atsign++; /* the right side of the @-letter */
-
- if(atsign)
- proxyptr = atsign; /* now use this instead */
- else
- res = CURLE_OUT_OF_MEMORY;
- }
- }
-
- Curl_safefree(proxyuser);
- Curl_safefree(proxypasswd);
-
- if(res)
- return res;
- }
-
- /* start scanning for port number at this point */
- portptr = proxyptr;
-
- /* detect and extract RFC6874-style IPv6-addresses */
- if(*proxyptr == '[') {
- char *ptr = ++proxyptr; /* advance beyond the initial bracket */
- while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':') || (*ptr == '.')))
- ptr++;
- if(*ptr == '%') {
- /* There might be a zone identifier */
- if(strncmp("%25", ptr, 3))
- infof(data, "Please URL encode %% as %%25, see RFC 6874.\n");
- ptr++;
- /* Allow unresered characters as defined in RFC 3986 */
- while(*ptr && (ISALPHA(*ptr) || ISXDIGIT(*ptr) || (*ptr == '-') ||
- (*ptr == '.') || (*ptr == '_') || (*ptr == '~')))
- ptr++;
- }
- if(*ptr == ']')
- /* yeps, it ended nicely with a bracket as well */
- *ptr++ = 0;
- else
- infof(data, "Invalid IPv6 address format\n");
- portptr = ptr;
- /* Note that if this didn't end with a bracket, we still advanced the
- * proxyptr first, but I can't see anything wrong with that as no host
- * name nor a numeric can legally start with a bracket.
- */
- }
-
- /* Get port number off proxy.server.com:1080 */
- prox_portno = strchr(portptr, ':');
- if(prox_portno) {
- *prox_portno = 0x0; /* cut off number from host name */
- prox_portno ++;
- /* now set the local port number */
- conn->port = strtol(prox_portno, NULL, 10);
- }
- else {
- if(proxyptr[0]=='/')
- /* If the first character in the proxy string is a slash, fail
- immediately. The following code will otherwise clear the string which
- will lead to code running as if no proxy was set! */
- return CURLE_COULDNT_RESOLVE_PROXY;
-
- /* without a port number after the host name, some people seem to use
- a slash so we strip everything from the first slash */
- atsign = strchr(proxyptr, '/');
- if(atsign)
- *atsign = 0x0; /* cut off path part from host name */
-
- if(data->set.proxyport)
- /* None given in the proxy string, then get the default one if it is
- given */
- conn->port = data->set.proxyport;
- }
-
- /* now, clone the cleaned proxy host name */
- conn->proxy.rawalloc = strdup(proxyptr);
- conn->proxy.name = conn->proxy.rawalloc;
-
- if(!conn->proxy.rawalloc)
- return CURLE_OUT_OF_MEMORY;
-
- return CURLE_OK;
-}
-
-/*
- * Extract the user and password from the authentication string
- */
-static CURLcode parse_proxy_auth(struct SessionHandle *data,
- struct connectdata *conn)
-{
- char proxyuser[MAX_CURL_USER_LENGTH]="";
- char proxypasswd[MAX_CURL_PASSWORD_LENGTH]="";
-
- if(data->set.str[STRING_PROXYUSERNAME] != NULL) {
- strncpy(proxyuser, data->set.str[STRING_PROXYUSERNAME],
- MAX_CURL_USER_LENGTH);
- proxyuser[MAX_CURL_USER_LENGTH-1] = '\0'; /*To be on safe side*/
- }
- if(data->set.str[STRING_PROXYPASSWORD] != NULL) {
- strncpy(proxypasswd, data->set.str[STRING_PROXYPASSWORD],
- MAX_CURL_PASSWORD_LENGTH);
- proxypasswd[MAX_CURL_PASSWORD_LENGTH-1] = '\0'; /*To be on safe side*/
- }
-
- conn->proxyuser = curl_easy_unescape(data, proxyuser, 0, NULL);
- if(!conn->proxyuser)
- return CURLE_OUT_OF_MEMORY;
-
- conn->proxypasswd = curl_easy_unescape(data, proxypasswd, 0, NULL);
- if(!conn->proxypasswd)
- return CURLE_OUT_OF_MEMORY;
-
- return CURLE_OK;
-}
-#endif /* CURL_DISABLE_PROXY */
-
-/*
- * parse_url_login()
- *
- * Parse the login details (user name, password and options) from the URL and
- * strip them out of the host name
- *
- * Inputs: data->set.use_netrc (CURLOPT_NETRC)
- * conn->host.name
- *
- * Outputs: (almost :- all currently undefined)
- * conn->bits.user_passwd - non-zero if non-default passwords exist
- * user - non-zero length if defined
- * passwd - non-zero length if defined
- * options - non-zero length if defined
- * conn->host.name - remove user name and password
- */
-static CURLcode parse_url_login(struct SessionHandle *data,
- struct connectdata *conn,
- char **user, char **passwd, char **options)
-{
- CURLcode result = CURLE_OK;
- char *userp = NULL;
- char *passwdp = NULL;
- char *optionsp = NULL;
-
- /* At this point, we're hoping all the other special cases have
- * been taken care of, so conn->host.name is at most
- * [user[:password][;options]]@]hostname
- *
- * We need somewhere to put the embedded details, so do that first.
- */
-
- char *ptr = strchr(conn->host.name, '@');
- char *login = conn->host.name;
-
- DEBUGASSERT(!**user);
- DEBUGASSERT(!**passwd);
- DEBUGASSERT(!**options);
-
- if(!ptr)
- goto out;
-
- /* We will now try to extract the
- * possible login information in a string like:
- * ftp://user:password@ftp.my.site:8021/README */
- conn->host.name = ++ptr;
-
- /* So the hostname is sane. Only bother interpreting the
- * results if we could care. It could still be wasted
- * work because it might be overtaken by the programmatically
- * set user/passwd, but doing that first adds more cases here :-(
- */
-
- if(data->set.use_netrc == CURL_NETRC_REQUIRED)
- goto out;
-
- /* We could use the login information in the URL so extract it */
- result = parse_login_details(login, ptr - login - 1,
- &userp, &passwdp, &optionsp);
- if(result != CURLE_OK)
- goto out;
-
- if(userp) {
- char *newname;
-
- /* We have a user in the URL */
- conn->bits.userpwd_in_url = TRUE;
- conn->bits.user_passwd = TRUE; /* enable user+password */
-
- /* Decode the user */
- newname = curl_easy_unescape(data, userp, 0, NULL);
- if(!newname) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
-
- free(*user);
- *user = newname;
- }
-
- if(passwdp) {
- /* We have a password in the URL so decode it */
- char *newpasswd = curl_easy_unescape(data, passwdp, 0, NULL);
- if(!newpasswd) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
-
- free(*passwd);
- *passwd = newpasswd;
- }
-
- if(optionsp) {
- /* We have an options list in the URL so decode it */
- char *newoptions = curl_easy_unescape(data, optionsp, 0, NULL);
- if(!newoptions) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
-
- free(*options);
- *options = newoptions;
- }
-
-
- out:
-
- Curl_safefree(userp);
- Curl_safefree(passwdp);
- Curl_safefree(optionsp);
-
- return result;
-}
-
-/*
- * parse_login_details()
- *
- * This is used to parse a login string for user name, password and options in
- * the following formats:
- *
- * user
- * user:password
- * user:password;options
- * user;options
- * user;options:password
- * :password
- * :password;options
- * ;options
- * ;options:password
- *
- * Parameters:
- *
- * login [in] - The login string.
- * len [in] - The length of the login string.
- * userp [in/out] - The address where a pointer to newly allocated memory
- * holding the user will be stored upon completion.
- * passdwp [in/out] - The address where a pointer to newly allocated memory
- * holding the password will be stored upon completion.
- * optionsp [in/out] - The address where a pointer to newly allocated memory
- * holding the options will be stored upon completion.
- *
- * Returns CURLE_OK on success.
- */
-static CURLcode parse_login_details(const char *login, const size_t len,
- char **userp, char **passwdp,
- char **optionsp)
-{
- CURLcode result = CURLE_OK;
- char *ubuf = NULL;
- char *pbuf = NULL;
- char *obuf = NULL;
- const char *psep = NULL;
- const char *osep = NULL;
- size_t ulen;
- size_t plen;
- size_t olen;
-
- /* Attempt to find the password separator */
- if(passwdp) {
- psep = strchr(login, ':');
-
- /* Within the constraint of the login string */
- if(psep >= login + len)
- psep = NULL;
- }
-
- /* Attempt to find the options separator */
- if(optionsp) {
- osep = strchr(login, ';');
-
- /* Within the constraint of the login string */
- if(osep >= login + len)
- osep = NULL;
- }
-
- /* Calculate the portion lengths */
- ulen = (psep ?
- (size_t)(osep && psep > osep ? osep - login : psep - login) :
- (osep ? (size_t)(osep - login) : len));
- plen = (psep ?
- (osep && osep > psep ? (size_t)(osep - psep) :
- (size_t)(login + len - psep)) - 1 : 0);
- olen = (osep ?
- (psep && psep > osep ? (size_t)(psep - osep) :
- (size_t)(login + len - osep)) - 1 : 0);
-
- /* Allocate the user portion buffer */
- if(userp && ulen) {
- ubuf = malloc(ulen + 1);
- if(!ubuf)
- result = CURLE_OUT_OF_MEMORY;
- }
-
- /* Allocate the password portion buffer */
- if(!result && passwdp && plen) {
- pbuf = malloc(plen + 1);
- if(!pbuf) {
- Curl_safefree(ubuf);
- result = CURLE_OUT_OF_MEMORY;
- }
- }
-
- /* Allocate the options portion buffer */
- if(!result && optionsp && olen) {
- obuf = malloc(olen + 1);
- if(!obuf) {
- Curl_safefree(pbuf);
- Curl_safefree(ubuf);
- result = CURLE_OUT_OF_MEMORY;
- }
- }
-
- if(!result) {
- /* Store the user portion if necessary */
- if(ubuf) {
- memcpy(ubuf, login, ulen);
- ubuf[ulen] = '\0';
- Curl_safefree(*userp);
- *userp = ubuf;
- }
-
- /* Store the password portion if necessary */
- if(pbuf) {
- memcpy(pbuf, psep + 1, plen);
- pbuf[plen] = '\0';
- Curl_safefree(*passwdp);
- *passwdp = pbuf;
- }
-
- /* Store the options portion if necessary */
- if(obuf) {
- memcpy(obuf, osep + 1, olen);
- obuf[olen] = '\0';
- Curl_safefree(*optionsp);
- *optionsp = obuf;
- }
- }
-
- return result;
-}
-
-/*************************************************************
- * Figure out the remote port number and fix it in the URL
- *
- * No matter if we use a proxy or not, we have to figure out the remote
- * port number of various reasons.
- *
- * To be able to detect port number flawlessly, we must not confuse them
- * IPv6-specified addresses in the [0::1] style. (RFC2732)
- *
- * The conn->host.name is currently [user:passwd@]host[:port] where host
- * could be a hostname, IPv4 address or IPv6 address.
- *
- * The port number embedded in the URL is replaced, if necessary.
- *************************************************************/
-static CURLcode parse_remote_port(struct SessionHandle *data,
- struct connectdata *conn)
-{
- char *portptr;
- char endbracket;
-
- /* Note that at this point, the IPv6 address cannot contain any scope
- suffix as that has already been removed in the parseurlandfillconn()
- function */
- if((1 == sscanf(conn->host.name, "[%*45[0123456789abcdefABCDEF:.]%c",
- &endbracket)) &&
- (']' == endbracket)) {
- /* this is a RFC2732-style specified IP-address */
- conn->bits.ipv6_ip = TRUE;
-
- conn->host.name++; /* skip over the starting bracket */
- portptr = strchr(conn->host.name, ']');
- if(portptr) {
- *portptr++ = '\0'; /* zero terminate, killing the bracket */
- if(':' != *portptr)
- portptr = NULL; /* no port number available */
- }
- }
- else {
-#ifdef ENABLE_IPV6
- struct in6_addr in6;
- if(Curl_inet_pton(AF_INET6, conn->host.name, &in6) > 0) {
- /* This is a numerical IPv6 address, meaning this is a wrongly formatted
- URL */
- failf(data, "IPv6 numerical address used in URL without brackets");
- return CURLE_URL_MALFORMAT;
- }
-#endif
-
- portptr = strrchr(conn->host.name, ':');
- }
-
- if(data->set.use_port && data->state.allow_port) {
- /* if set, we use this and ignore the port possibly given in the URL */
- conn->remote_port = (unsigned short)data->set.use_port;
- if(portptr)
- *portptr = '\0'; /* cut off the name there anyway - if there was a port
- number - since the port number is to be ignored! */
- if(conn->bits.httpproxy) {
- /* we need to create new URL with the new port number */
- char *url;
- char type[12]="";
-
- if(conn->bits.type_set)
- snprintf(type, sizeof(type), ";type=%c",
- data->set.prefer_ascii?'A':
- (data->set.ftp_list_only?'D':'I'));
-
- /*
- * This synthesized URL isn't always right--suffixes like ;type=A are
- * stripped off. It would be better to work directly from the original
- * URL and simply replace the port part of it.
- */
- url = aprintf("%s://%s%s%s:%hu%s%s%s", conn->given->scheme,
- conn->bits.ipv6_ip?"[":"", conn->host.name,
- conn->bits.ipv6_ip?"]":"", conn->remote_port,
- data->state.slash_removed?"/":"", data->state.path,
- type);
- if(!url)
- return CURLE_OUT_OF_MEMORY;
-
- if(data->change.url_alloc) {
- Curl_safefree(data->change.url);
- data->change.url_alloc = FALSE;
- }
-
- data->change.url = url;
- data->change.url_alloc = TRUE;
- }
- }
- else if(portptr) {
- /* no CURLOPT_PORT given, extract the one from the URL */
-
- char *rest;
- long port;
-
- port=strtol(portptr+1, &rest, 10); /* Port number must be decimal */
-
- if((port < 0) || (port > 0xffff)) {
- /* Single unix standard says port numbers are 16 bits long */
- failf(data, "Port number out of range");
- return CURLE_URL_MALFORMAT;
- }
-
- else if(rest != &portptr[1]) {
- *portptr = '\0'; /* cut off the name there */
- conn->remote_port = curlx_ultous(port);
- }
- else
- /* Browser behavior adaptation. If there's a colon with no digits after,
- just cut off the name there which makes us ignore the colon and just
- use the default port. Firefox and Chrome both do that. */
- *portptr = '\0';
- }
- return CURLE_OK;
-}
-
-/*
- * Override the login details from the URL with that in the CURLOPT_USERPWD
- * option or a .netrc file, if applicable.
- */
-static CURLcode override_login(struct SessionHandle *data,
- struct connectdata *conn,
- char **userp, char **passwdp, char **optionsp)
-{
- if(data->set.str[STRING_USERNAME]) {
- free(*userp);
- *userp = strdup(data->set.str[STRING_USERNAME]);
- if(!*userp)
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(data->set.str[STRING_PASSWORD]) {
- free(*passwdp);
- *passwdp = strdup(data->set.str[STRING_PASSWORD]);
- if(!*passwdp)
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(data->set.str[STRING_OPTIONS]) {
- free(*optionsp);
- *optionsp = strdup(data->set.str[STRING_OPTIONS]);
- if(!*optionsp)
- return CURLE_OUT_OF_MEMORY;
- }
-
- conn->bits.netrc = FALSE;
- if(data->set.use_netrc != CURL_NETRC_IGNORED) {
- int ret = Curl_parsenetrc(conn->host.name,
- userp, passwdp,
- data->set.str[STRING_NETRC_FILE]);
- if(ret > 0) {
- infof(data, "Couldn't find host %s in the "
- DOT_CHAR "netrc file; using defaults\n",
- conn->host.name);
- }
- else if(ret < 0 ) {
- return CURLE_OUT_OF_MEMORY;
- }
- else {
- /* set bits.netrc TRUE to remember that we got the name from a .netrc
- file, so that it is safe to use even if we followed a Location: to a
- different host or similar. */
- conn->bits.netrc = TRUE;
-
- conn->bits.user_passwd = TRUE; /* enable user+password */
- }
- }
-
- return CURLE_OK;
-}
-
-/*
- * Set the login details so they're available in the connection
- */
-static CURLcode set_login(struct connectdata *conn,
- const char *user, const char *passwd,
- const char *options)
-{
- CURLcode result = CURLE_OK;
-
- /* If our protocol needs a password and we have none, use the defaults */
- if((conn->handler->flags & PROTOPT_NEEDSPWD) && !conn->bits.user_passwd) {
- /* Store the default user */
- conn->user = strdup(CURL_DEFAULT_USER);
-
- /* Store the default password */
- if(conn->user)
- conn->passwd = strdup(CURL_DEFAULT_PASSWORD);
- else
- conn->passwd = NULL;
-
- /* This is the default password, so DON'T set conn->bits.user_passwd */
- }
- else {
- /* Store the user, zero-length if not set */
- conn->user = strdup(user);
-
- /* Store the password (only if user is present), zero-length if not set */
- if(conn->user)
- conn->passwd = strdup(passwd);
- else
- conn->passwd = NULL;
- }
-
- if(!conn->user || !conn->passwd)
- result = CURLE_OUT_OF_MEMORY;
-
- /* Store the options, null if not set */
- if(!result && options[0]) {
- conn->options = strdup(options);
-
- if(!conn->options)
- result = CURLE_OUT_OF_MEMORY;
- }
-
- return result;
-}
-
-/*************************************************************
- * Resolve the address of the server or proxy
- *************************************************************/
-static CURLcode resolve_server(struct SessionHandle *data,
- struct connectdata *conn,
- bool *async)
-{
- CURLcode result=CURLE_OK;
- long timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- /*************************************************************
- * Resolve the name of the server or proxy
- *************************************************************/
- if(conn->bits.reuse)
- /* We're reusing the connection - no need to resolve anything, and
- fix_hostname() was called already in create_conn() for the re-use
- case. */
- *async = FALSE;
-
- else {
- /* this is a fresh connect */
- int rc;
- struct Curl_dns_entry *hostaddr;
-
- /* set a pointer to the hostname we display */
- fix_hostname(data, conn, &conn->host);
-
- if(!conn->proxy.name || !*conn->proxy.name) {
- /* If not connecting via a proxy, extract the port from the URL, if it is
- * there, thus overriding any defaults that might have been set above. */
- conn->port = conn->remote_port; /* it is the same port */
-
- /* Resolve target host right on */
- rc = Curl_resolv_timeout(conn, conn->host.name, (int)conn->port,
- &hostaddr, timeout_ms);
- if(rc == CURLRESOLV_PENDING)
- *async = TRUE;
-
- else if(rc == CURLRESOLV_TIMEDOUT)
- result = CURLE_OPERATION_TIMEDOUT;
-
- else if(!hostaddr) {
- failf(data, "Couldn't resolve host '%s'", conn->host.dispname);
- result = CURLE_COULDNT_RESOLVE_HOST;
- /* don't return yet, we need to clean up the timeout first */
- }
- }
- else {
- /* This is a proxy that hasn't been resolved yet. */
-
- /* IDN-fix the proxy name */
- fix_hostname(data, conn, &conn->proxy);
-
- /* resolve proxy */
- rc = Curl_resolv_timeout(conn, conn->proxy.name, (int)conn->port,
- &hostaddr, timeout_ms);
-
- if(rc == CURLRESOLV_PENDING)
- *async = TRUE;
-
- else if(rc == CURLRESOLV_TIMEDOUT)
- result = CURLE_OPERATION_TIMEDOUT;
-
- else if(!hostaddr) {
- failf(data, "Couldn't resolve proxy '%s'", conn->proxy.dispname);
- result = CURLE_COULDNT_RESOLVE_PROXY;
- /* don't return yet, we need to clean up the timeout first */
- }
- }
- DEBUGASSERT(conn->dns_entry == NULL);
- conn->dns_entry = hostaddr;
- }
-
- return result;
-}
-
-/*
- * Cleanup the connection just allocated before we can move along and use the
- * previously existing one. All relevant data is copied over and old_conn is
- * ready for freeing once this function returns.
- */
-static void reuse_conn(struct connectdata *old_conn,
- struct connectdata *conn)
-{
- if(old_conn->proxy.rawalloc)
- free(old_conn->proxy.rawalloc);
-
- /* free the SSL config struct from this connection struct as this was
- allocated in vain and is targeted for destruction */
- Curl_free_ssl_config(&old_conn->ssl_config);
-
- conn->data = old_conn->data;
-
- /* get the user+password information from the old_conn struct since it may
- * be new for this request even when we re-use an existing connection */
- conn->bits.user_passwd = old_conn->bits.user_passwd;
- if(conn->bits.user_passwd) {
- /* use the new user name and password though */
- Curl_safefree(conn->user);
- Curl_safefree(conn->passwd);
- conn->user = old_conn->user;
- conn->passwd = old_conn->passwd;
- old_conn->user = NULL;
- old_conn->passwd = NULL;
- }
-
- conn->bits.proxy_user_passwd = old_conn->bits.proxy_user_passwd;
- if(conn->bits.proxy_user_passwd) {
- /* use the new proxy user name and proxy password though */
- Curl_safefree(conn->proxyuser);
- Curl_safefree(conn->proxypasswd);
- conn->proxyuser = old_conn->proxyuser;
- conn->proxypasswd = old_conn->proxypasswd;
- old_conn->proxyuser = NULL;
- old_conn->proxypasswd = NULL;
- }
-
- /* host can change, when doing keepalive with a proxy or if the case is
- different this time etc */
- Curl_safefree(conn->host.rawalloc);
- conn->host=old_conn->host;
-
- /* persist connection info in session handle */
- Curl_persistconninfo(conn);
-
- /* re-use init */
- conn->bits.reuse = TRUE; /* yes, we're re-using here */
-
- Curl_safefree(old_conn->user);
- Curl_safefree(old_conn->passwd);
- Curl_safefree(old_conn->proxyuser);
- Curl_safefree(old_conn->proxypasswd);
- Curl_safefree(old_conn->localdev);
-
- Curl_llist_destroy(old_conn->send_pipe, NULL);
- Curl_llist_destroy(old_conn->recv_pipe, NULL);
-
- old_conn->send_pipe = NULL;
- old_conn->recv_pipe = NULL;
-
- Curl_safefree(old_conn->master_buffer);
-}
-
-/**
- * create_conn() sets up a new connectdata struct, or re-uses an already
- * existing one, and resolves host name.
- *
- * if this function returns CURLE_OK and *async is set to TRUE, the resolve
- * response will be coming asynchronously. If *async is FALSE, the name is
- * already resolved.
- *
- * @param data The sessionhandle pointer
- * @param in_connect is set to the next connection data pointer
- * @param async is set TRUE when an async DNS resolution is pending
- * @see Curl_setup_conn()
- *
- * *NOTE* this function assigns the conn->data pointer!
- */
-
-static CURLcode create_conn(struct SessionHandle *data,
- struct connectdata **in_connect,
- bool *async)
-{
- CURLcode result = CURLE_OK;
- struct connectdata *conn;
- struct connectdata *conn_temp = NULL;
- size_t urllen;
- char *user = NULL;
- char *passwd = NULL;
- char *options = NULL;
- bool reuse;
- char *proxy = NULL;
- bool prot_missing = FALSE;
- bool no_connections_available = FALSE;
- bool force_reuse = FALSE;
- size_t max_host_connections = Curl_multi_max_host_connections(data->multi);
- size_t max_total_connections = Curl_multi_max_total_connections(data->multi);
-
- *async = FALSE;
-
- /*************************************************************
- * Check input data
- *************************************************************/
-
- if(!data->change.url) {
- result = CURLE_URL_MALFORMAT;
- goto out;
- }
-
- /* First, split up the current URL in parts so that we can use the
- parts for checking against the already present connections. In order
- to not have to modify everything at once, we allocate a temporary
- connection data struct and fill in for comparison purposes. */
- conn = allocate_conn(data);
-
- if(!conn) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
-
- /* We must set the return variable as soon as possible, so that our
- parent can cleanup any possible allocs we may have done before
- any failure */
- *in_connect = conn;
-
- /* This initing continues below, see the comment "Continue connectdata
- * initialization here" */
-
- /***********************************************************
- * We need to allocate memory to store the path in. We get the size of the
- * full URL to be sure, and we need to make it at least 256 bytes since
- * other parts of the code will rely on this fact
- ***********************************************************/
-#define LEAST_PATH_ALLOC 256
- urllen=strlen(data->change.url);
- if(urllen < LEAST_PATH_ALLOC)
- urllen=LEAST_PATH_ALLOC;
-
- /*
- * We malloc() the buffers below urllen+2 to make room for 2 possibilities:
- * 1 - an extra terminating zero
- * 2 - an extra slash (in case a syntax like "www.host.com?moo" is used)
- */
-
- Curl_safefree(data->state.pathbuffer);
- data->state.path = NULL;
-
- data->state.pathbuffer = malloc(urllen+2);
- if(NULL == data->state.pathbuffer) {
- result = CURLE_OUT_OF_MEMORY; /* really bad error */
- goto out;
- }
- data->state.path = data->state.pathbuffer;
-
- conn->host.rawalloc = malloc(urllen+2);
- if(NULL == conn->host.rawalloc) {
- Curl_safefree(data->state.pathbuffer);
- data->state.path = NULL;
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
-
- conn->host.name = conn->host.rawalloc;
- conn->host.name[0] = 0;
-
- user = strdup("");
- passwd = strdup("");
- options = strdup("");
- if(!user || !passwd || !options) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
-
- result = parseurlandfillconn(data, conn, &prot_missing, &user, &passwd,
- &options);
- if(result != CURLE_OK)
- goto out;
-
- /*************************************************************
- * No protocol part in URL was used, add it!
- *************************************************************/
- if(prot_missing) {
- /* We're guessing prefixes here and if we're told to use a proxy or if
- we're gonna follow a Location: later or... then we need the protocol
- part added so that we have a valid URL. */
- char *reurl;
-
- reurl = aprintf("%s://%s", conn->handler->scheme, data->change.url);
-
- if(!reurl) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
-
- if(data->change.url_alloc) {
- Curl_safefree(data->change.url);
- data->change.url_alloc = FALSE;
- }
-
- data->change.url = reurl;
- data->change.url_alloc = TRUE; /* free this later */
- }
-
- /*************************************************************
- * If the protocol can't handle url query strings, then cut
- * off the unhandable part
- *************************************************************/
- if((conn->given->flags&PROTOPT_NOURLQUERY)) {
- char *path_q_sep = strchr(conn->data->state.path, '?');
- if(path_q_sep) {
- /* according to rfc3986, allow the query (?foo=bar)
- also on protocols that can't handle it.
-
- cut the string-part after '?'
- */
-
- /* terminate the string */
- path_q_sep[0] = 0;
- }
- }
-
- if(data->set.str[STRING_BEARER]) {
- conn->xoauth2_bearer = strdup(data->set.str[STRING_BEARER]);
- if(!conn->xoauth2_bearer) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
- }
-
-#ifndef CURL_DISABLE_PROXY
- /*************************************************************
- * Extract the user and password from the authentication string
- *************************************************************/
- if(conn->bits.proxy_user_passwd) {
- result = parse_proxy_auth(data, conn);
- if(result != CURLE_OK)
- goto out;
- }
-
- /*************************************************************
- * Detect what (if any) proxy to use
- *************************************************************/
- if(data->set.str[STRING_PROXY]) {
- proxy = strdup(data->set.str[STRING_PROXY]);
- /* if global proxy is set, this is it */
- if(NULL == proxy) {
- failf(data, "memory shortage");
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
- }
-
- if(data->set.str[STRING_NOPROXY] &&
- check_noproxy(conn->host.name, data->set.str[STRING_NOPROXY])) {
- if(proxy) {
- free(proxy); /* proxy is in exception list */
- proxy = NULL;
- }
- }
- else if(!proxy)
- proxy = detect_proxy(conn);
-
- if(proxy && (!*proxy || (conn->handler->flags & PROTOPT_NONETWORK))) {
- free(proxy); /* Don't bother with an empty proxy string or if the
- protocol doesn't work with network */
- proxy = NULL;
- }
-
- /***********************************************************************
- * If this is supposed to use a proxy, we need to figure out the proxy host
- * name, proxy type and port number, so that we can re-use an existing
- * connection that may exist registered to the same proxy host.
- ***********************************************************************/
- if(proxy) {
- result = parse_proxy(data, conn, proxy);
-
- Curl_safefree(proxy); /* parse_proxy copies the proxy string */
-
- if(result)
- goto out;
-
- if((conn->proxytype == CURLPROXY_HTTP) ||
- (conn->proxytype == CURLPROXY_HTTP_1_0)) {
-#ifdef CURL_DISABLE_HTTP
- /* asking for a HTTP proxy is a bit funny when HTTP is disabled... */
- result = CURLE_UNSUPPORTED_PROTOCOL;
- goto out;
-#else
- /* force this connection's protocol to become HTTP if not already
- compatible - if it isn't tunneling through */
- if(!(conn->handler->protocol & PROTO_FAMILY_HTTP) &&
- !conn->bits.tunnel_proxy)
- conn->handler = &Curl_handler_http;
-
- conn->bits.httpproxy = TRUE;
-#endif
- }
- else
- conn->bits.httpproxy = FALSE; /* not a HTTP proxy */
- conn->bits.proxy = TRUE;
- }
- else {
- /* we aren't using the proxy after all... */
- conn->bits.proxy = FALSE;
- conn->bits.httpproxy = FALSE;
- conn->bits.proxy_user_passwd = FALSE;
- conn->bits.tunnel_proxy = FALSE;
- }
-
-#endif /* CURL_DISABLE_PROXY */
-
- /*************************************************************
- * If the protocol is using SSL and HTTP proxy is used, we set
- * the tunnel_proxy bit.
- *************************************************************/
- if((conn->given->flags&PROTOPT_SSL) && conn->bits.httpproxy)
- conn->bits.tunnel_proxy = TRUE;
-
- /*************************************************************
- * Figure out the remote port number and fix it in the URL
- *************************************************************/
- result = parse_remote_port(data, conn);
- if(result != CURLE_OK)
- goto out;
-
- /* Check for overridden login details and set them accordingly so they
- they are known when protocol->setup_connection is called! */
- result = override_login(data, conn, &user, &passwd, &options);
- if(result != CURLE_OK)
- goto out;
- result = set_login(conn, user, passwd, options);
- if(result != CURLE_OK)
- goto out;
-
- /*************************************************************
- * Setup internals depending on protocol. Needs to be done after
- * we figured out what/if proxy to use.
- *************************************************************/
- result = setup_connection_internals(conn);
- if(result != CURLE_OK)
- goto out;
-
- conn->recv[FIRSTSOCKET] = Curl_recv_plain;
- conn->send[FIRSTSOCKET] = Curl_send_plain;
- conn->recv[SECONDARYSOCKET] = Curl_recv_plain;
- conn->send[SECONDARYSOCKET] = Curl_send_plain;
-
- /***********************************************************************
- * file: is a special case in that it doesn't need a network connection
- ***********************************************************************/
-#ifndef CURL_DISABLE_FILE
- if(conn->handler->flags & PROTOPT_NONETWORK) {
- bool done;
- /* this is supposed to be the connect function so we better at least check
- that the file is present here! */
- DEBUGASSERT(conn->handler->connect_it);
- result = conn->handler->connect_it(conn, &done);
-
- /* Setup a "faked" transfer that'll do nothing */
- if(CURLE_OK == result) {
- conn->data = data;
- conn->bits.tcpconnect[FIRSTSOCKET] = TRUE; /* we are "connected */
-
- ConnectionStore(data, conn);
-
- /*
- * Setup whatever necessary for a resumed transfer
- */
- result = setup_range(data);
- if(result) {
- DEBUGASSERT(conn->handler->done);
- /* we ignore the return code for the protocol-specific DONE */
- (void)conn->handler->done(conn, result, FALSE);
- goto out;
- }
-
- Curl_setup_transfer(conn, -1, -1, FALSE, NULL, /* no download */
- -1, NULL); /* no upload */
- }
-
- /* since we skip do_init() */
- do_init(conn);
-
- goto out;
- }
-#endif
-
- /* Get a cloned copy of the SSL config situation stored in the
- connection struct. But to get this going nicely, we must first make
- sure that the strings in the master copy are pointing to the correct
- strings in the session handle strings array!
-
- Keep in mind that the pointers in the master copy are pointing to strings
- that will be freed as part of the SessionHandle struct, but all cloned
- copies will be separately allocated.
- */
- data->set.ssl.CApath = data->set.str[STRING_SSL_CAPATH];
- data->set.ssl.CAfile = data->set.str[STRING_SSL_CAFILE];
- data->set.ssl.CRLfile = data->set.str[STRING_SSL_CRLFILE];
- data->set.ssl.issuercert = data->set.str[STRING_SSL_ISSUERCERT];
- data->set.ssl.random_file = data->set.str[STRING_SSL_RANDOM_FILE];
- data->set.ssl.egdsocket = data->set.str[STRING_SSL_EGDSOCKET];
- data->set.ssl.cipher_list = data->set.str[STRING_SSL_CIPHER_LIST];
-#ifdef USE_TLS_SRP
- data->set.ssl.username = data->set.str[STRING_TLSAUTH_USERNAME];
- data->set.ssl.password = data->set.str[STRING_TLSAUTH_PASSWORD];
-#endif
-
- if(!Curl_clone_ssl_config(&data->set.ssl, &conn->ssl_config)) {
- result = CURLE_OUT_OF_MEMORY;
- goto out;
- }
-
- prune_dead_connections(data);
-
- /*************************************************************
- * Check the current list of connections to see if we can
- * re-use an already existing one or if we have to create a
- * new one.
- *************************************************************/
-
- /* reuse_fresh is TRUE if we are told to use a new connection by force, but
- we only acknowledge this option if this is not a re-used connection
- already (which happens due to follow-location or during a HTTP
- authentication phase). */
- if(data->set.reuse_fresh && !data->state.this_is_a_follow)
- reuse = FALSE;
- else
- reuse = ConnectionExists(data, conn, &conn_temp, &force_reuse);
-
- /* If we found a reusable connection, we may still want to
- open a new connection if we are pipelining. */
- if(reuse && !force_reuse && IsPipeliningPossible(data, conn_temp)) {
- size_t pipelen = conn_temp->send_pipe->size + conn_temp->recv_pipe->size;
- if(pipelen > 0) {
- infof(data, "Found connection %ld, with requests in the pipe (%zu)\n",
- conn_temp->connection_id, pipelen);
-
- if(conn_temp->bundle->num_connections < max_host_connections &&
- data->state.conn_cache->num_connections < max_total_connections) {
- /* We want a new connection anyway */
- reuse = FALSE;
-
- infof(data, "We can reuse, but we want a new connection anyway\n");
- }
- }
- }
-
- if(reuse) {
- /*
- * We already have a connection for this, we got the former connection
- * in the conn_temp variable and thus we need to cleanup the one we
- * just allocated before we can move along and use the previously
- * existing one.
- */
- conn_temp->inuse = TRUE; /* mark this as being in use so that no other
- handle in a multi stack may nick it */
- reuse_conn(conn, conn_temp);
- free(conn); /* we don't need this anymore */
- conn = conn_temp;
- *in_connect = conn;
-
- /* set a pointer to the hostname we display */
- fix_hostname(data, conn, &conn->host);
-
- infof(data, "Re-using existing connection! (#%ld) with host %s\n",
- conn->connection_id,
- conn->proxy.name?conn->proxy.dispname:conn->host.dispname);
- }
- else {
- /* We have decided that we want a new connection. However, we may not
- be able to do that if we have reached the limit of how many
- connections we are allowed to open. */
- struct connectbundle *bundle;
-
- bundle = Curl_conncache_find_bundle(data->state.conn_cache,
- conn->host.name);
- if(max_host_connections > 0 && bundle &&
- (bundle->num_connections >= max_host_connections)) {
- struct connectdata *conn_candidate;
-
- /* The bundle is full. Let's see if we can kill a connection. */
- conn_candidate = find_oldest_idle_connection_in_bundle(data, bundle);
-
- if(conn_candidate) {
- /* Set the connection's owner correctly, then kill it */
- conn_candidate->data = data;
- (void)Curl_disconnect(conn_candidate, /* dead_connection */ FALSE);
- }
- else
- no_connections_available = TRUE;
- }
-
- if(max_total_connections > 0 &&
- (data->state.conn_cache->num_connections >= max_total_connections)) {
- struct connectdata *conn_candidate;
-
- /* The cache is full. Let's see if we can kill a connection. */
- conn_candidate = find_oldest_idle_connection(data);
-
- if(conn_candidate) {
- /* Set the connection's owner correctly, then kill it */
- conn_candidate->data = data;
- (void)Curl_disconnect(conn_candidate, /* dead_connection */ FALSE);
- }
- else
- no_connections_available = TRUE;
- }
-
-
- if(no_connections_available) {
- infof(data, "No connections available.\n");
-
- conn_free(conn);
- *in_connect = NULL;
-
- result = CURLE_NO_CONNECTION_AVAILABLE;
- goto out;
- }
- else {
- /*
- * This is a brand new connection, so let's store it in the connection
- * cache of ours!
- */
- ConnectionStore(data, conn);
- }
-
- /* If NTLM is requested in a part of this connection, make sure we don't
- assume the state is fine as this is a fresh connection and NTLM is
- connection based. */
- if((data->state.authhost.picked & (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) &&
- data->state.authhost.done) {
- infof(data, "NTLM picked AND auth done set, clear picked!\n");
- data->state.authhost.picked = CURLAUTH_NONE;
- }
- if((data->state.authproxy.picked & (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) &&
- data->state.authproxy.done) {
- infof(data, "NTLM-proxy picked AND auth done set, clear picked!\n");
- data->state.authproxy.picked = CURLAUTH_NONE;
- }
-
- }
-
- /* Mark the connection as used */
- conn->inuse = TRUE;
-
- /* Setup and init stuff before DO starts, in preparing for the transfer. */
- do_init(conn);
-
- /*
- * Setup whatever necessary for a resumed transfer
- */
- result = setup_range(data);
- if(result)
- goto out;
-
- /* Continue connectdata initialization here. */
-
- /*
- * Inherit the proper values from the urldata struct AFTER we have arranged
- * the persistent connection stuff
- */
- conn->fread_func = data->set.fread_func;
- conn->fread_in = data->set.in;
- conn->seek_func = data->set.seek_func;
- conn->seek_client = data->set.seek_client;
-
- /*************************************************************
- * Resolve the address of the server or proxy
- *************************************************************/
- result = resolve_server(data, conn, async);
-
- out:
-
- Curl_safefree(options);
- Curl_safefree(passwd);
- Curl_safefree(user);
- Curl_safefree(proxy);
- return result;
-}
-
-/* Curl_setup_conn() is called after the name resolve initiated in
- * create_conn() is all done.
- *
- * Curl_setup_conn() also handles reused connections
- *
- * conn->data MUST already have been setup fine (in create_conn)
- */
-
-CURLcode Curl_setup_conn(struct connectdata *conn,
- bool *protocol_done)
-{
- CURLcode result = CURLE_OK;
- struct SessionHandle *data = conn->data;
-
- Curl_pgrsTime(data, TIMER_NAMELOOKUP);
-
- if(conn->handler->flags & PROTOPT_NONETWORK) {
- /* nothing to setup when not using a network */
- *protocol_done = TRUE;
- return result;
- }
- *protocol_done = FALSE; /* default to not done */
-
- /* set proxy_connect_closed to false unconditionally already here since it
- is used strictly to provide extra information to a parent function in the
- case of proxy CONNECT failures and we must make sure we don't have it
- lingering set from a previous invoke */
- conn->bits.proxy_connect_closed = FALSE;
-
- /*
- * Set user-agent. Used for HTTP, but since we can attempt to tunnel
- * basically anything through a http proxy we can't limit this based on
- * protocol.
- */
- if(data->set.str[STRING_USERAGENT]) {
- Curl_safefree(conn->allocptr.uagent);
- conn->allocptr.uagent =
- aprintf("User-Agent: %s\r\n", data->set.str[STRING_USERAGENT]);
- if(!conn->allocptr.uagent)
- return CURLE_OUT_OF_MEMORY;
- }
-
- data->req.headerbytecount = 0;
-
-#ifdef CURL_DO_LINEEND_CONV
- data->state.crlf_conversions = 0; /* reset CRLF conversion counter */
-#endif /* CURL_DO_LINEEND_CONV */
-
- /* set start time here for timeout purposes in the connect procedure, it
- is later set again for the progress meter purpose */
- conn->now = Curl_tvnow();
-
- if(CURL_SOCKET_BAD == conn->sock[FIRSTSOCKET]) {
- conn->bits.tcpconnect[FIRSTSOCKET] = FALSE;
- result = Curl_connecthost(conn, conn->dns_entry);
- if(result)
- return result;
- }
- else {
- Curl_pgrsTime(data, TIMER_CONNECT); /* we're connected already */
- Curl_pgrsTime(data, TIMER_APPCONNECT); /* we're connected already */
- conn->bits.tcpconnect[FIRSTSOCKET] = TRUE;
- *protocol_done = TRUE;
- Curl_updateconninfo(conn, conn->sock[FIRSTSOCKET]);
- Curl_verboseconnect(conn);
- }
-
- conn->now = Curl_tvnow(); /* time this *after* the connect is done, we
- set this here perhaps a second time */
-
-#ifdef __EMX__
- /*
- * This check is quite a hack. We're calling _fsetmode to fix the problem
- * with fwrite converting newline characters (you get mangled text files,
- * and corrupted binary files when you download to stdout and redirect it to
- * a file).
- */
-
- if((data->set.out)->_handle == NULL) {
- _fsetmode(stdout, "b");
- }
-#endif
-
- return result;
-}
-
-CURLcode Curl_connect(struct SessionHandle *data,
- struct connectdata **in_connect,
- bool *asyncp,
- bool *protocol_done)
-{
- CURLcode code;
-
- *asyncp = FALSE; /* assume synchronous resolves by default */
-
- /* call the stuff that needs to be called */
- code = create_conn(data, in_connect, asyncp);
-
- if(CURLE_OK == code) {
- /* no error */
- if((*in_connect)->send_pipe->size || (*in_connect)->recv_pipe->size)
- /* pipelining */
- *protocol_done = TRUE;
- else if(!*asyncp) {
- /* DNS resolution is done: that's either because this is a reused
- connection, in which case DNS was unnecessary, or because DNS
- really did finish already (synch resolver/fast async resolve) */
- code = Curl_setup_conn(*in_connect, protocol_done);
- }
- }
-
- if(code == CURLE_NO_CONNECTION_AVAILABLE) {
- *in_connect = NULL;
- return code;
- }
-
- if(code && *in_connect) {
- /* We're not allowed to return failure with memory left allocated
- in the connectdata struct, free those here */
- Curl_disconnect(*in_connect, FALSE); /* close the connection */
- *in_connect = NULL; /* return a NULL */
- }
-
- return code;
-}
-
-CURLcode Curl_done(struct connectdata **connp,
- CURLcode status, /* an error if this is called after an
- error was detected */
- bool premature)
-{
- CURLcode result;
- struct connectdata *conn;
- struct SessionHandle *data;
-
- DEBUGASSERT(*connp);
-
- conn = *connp;
- data = conn->data;
-
- if(conn->bits.done)
- /* Stop if Curl_done() has already been called */
- return CURLE_OK;
-
- Curl_getoff_all_pipelines(data, conn);
-
- if((conn->send_pipe->size + conn->recv_pipe->size != 0 &&
- !data->set.reuse_forbid &&
- !conn->bits.close))
- /* Stop if pipeline is not empty and we do not have to close
- connection. */
- return CURLE_OK;
-
- conn->bits.done = TRUE; /* called just now! */
-
- /* Cleanup possible redirect junk */
- if(data->req.newurl) {
- free(data->req.newurl);
- data->req.newurl = NULL;
- }
- if(data->req.location) {
- free(data->req.location);
- data->req.location = NULL;
- }
-
- Curl_resolver_cancel(conn);
-
- if(conn->dns_entry) {
- Curl_resolv_unlock(data, conn->dns_entry); /* done with this */
- conn->dns_entry = NULL;
- }
-
- switch(status) {
- case CURLE_ABORTED_BY_CALLBACK:
- case CURLE_READ_ERROR:
- case CURLE_WRITE_ERROR:
- /* When we're aborted due to a callback return code it basically have to
- be counted as premature as there is trouble ahead if we don't. We have
- many callbacks and protocols work differently, we could potentially do
- this more fine-grained in the future. */
- premature = TRUE;
- default:
- break;
- }
-
- /* this calls the protocol-specific function pointer previously set */
- if(conn->handler->done)
- result = conn->handler->done(conn, status, premature);
- else
- result = status;
-
- if(!result && Curl_pgrsDone(conn))
- result = CURLE_ABORTED_BY_CALLBACK;
-
- /* if the transfer was completed in a paused state there can be buffered
- data left to write and then kill */
- if(data->state.tempwrite) {
- free(data->state.tempwrite);
- data->state.tempwrite = NULL;
- }
-
- /* if data->set.reuse_forbid is TRUE, it means the libcurl client has
- forced us to close this connection. This is ignored for requests taking
- place in a NTLM authentication handshake
-
- if conn->bits.close is TRUE, it means that the connection should be
- closed in spite of all our efforts to be nice, due to protocol
- restrictions in our or the server's end
-
- if premature is TRUE, it means this connection was said to be DONE before
- the entire request operation is complete and thus we can't know in what
- state it is for re-using, so we're forced to close it. In a perfect world
- we can add code that keep track of if we really must close it here or not,
- but currently we have no such detail knowledge.
- */
-
- if((data->set.reuse_forbid && !(conn->ntlm.state == NTLMSTATE_TYPE2 ||
- conn->proxyntlm.state == NTLMSTATE_TYPE2))
- || conn->bits.close || premature) {
- CURLcode res2 = Curl_disconnect(conn, premature); /* close connection */
-
- /* If we had an error already, make sure we return that one. But
- if we got a new error, return that. */
- if(!result && res2)
- result = res2;
- }
- else {
- /* the connection is no longer in use */
- if(ConnectionDone(data, conn)) {
- /* remember the most recently used connection */
- data->state.lastconnect = conn;
-
- infof(data, "Connection #%ld to host %s left intact\n",
- conn->connection_id,
- conn->bits.httpproxy?conn->proxy.dispname:conn->host.dispname);
- }
- else
- data->state.lastconnect = NULL;
- }
-
- *connp = NULL; /* to make the caller of this function better detect that
- this was either closed or handed over to the connection
- cache here, and therefore cannot be used from this point on
- */
- Curl_free_request_state(data);
-
- return result;
-}
-
-/*
- * do_init() inits the readwrite session. This is inited each time (in the DO
- * function before the protocol-specific DO functions are invoked) for a
- * transfer, sometimes multiple times on the same SessionHandle. Make sure
- * nothing in here depends on stuff that are setup dynamically for the
- * transfer.
- */
-
-static CURLcode do_init(struct connectdata *conn)
-{
- struct SessionHandle *data = conn->data;
- struct SingleRequest *k = &data->req;
-
- conn->bits.done = FALSE; /* Curl_done() is not called yet */
- conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to use */
- data->state.expect100header = FALSE;
-
- if(data->set.opt_no_body)
- /* in HTTP lingo, no body means using the HEAD request... */
- data->set.httpreq = HTTPREQ_HEAD;
- else if(HTTPREQ_HEAD == data->set.httpreq)
- /* ... but if unset there really is no perfect method that is the
- "opposite" of HEAD but in reality most people probably think GET
- then. The important thing is that we can't let it remain HEAD if the
- opt_no_body is set FALSE since then we'll behave wrong when getting
- HTTP. */
- data->set.httpreq = HTTPREQ_GET;
-
- k->start = Curl_tvnow(); /* start time */
- k->now = k->start; /* current time is now */
- k->header = TRUE; /* assume header */
-
- k->bytecount = 0;
-
- k->buf = data->state.buffer;
- k->uploadbuf = data->state.uploadbuffer;
- k->hbufp = data->state.headerbuff;
- k->ignorebody=FALSE;
-
- Curl_speedinit(data);
-
- Curl_pgrsSetUploadCounter(data, 0);
- Curl_pgrsSetDownloadCounter(data, 0);
-
- return CURLE_OK;
-}
-
-/*
- * do_complete is called when the DO actions are complete.
- *
- * We init chunking and trailer bits to their default values here immediately
- * before receiving any header data for the current request in the pipeline.
- */
-static void do_complete(struct connectdata *conn)
-{
- conn->data->req.chunk=FALSE;
- conn->data->req.maxfd = (conn->sockfd>conn->writesockfd?
- conn->sockfd:conn->writesockfd)+1;
- Curl_pgrsTime(conn->data, TIMER_PRETRANSFER);
-}
-
-CURLcode Curl_do(struct connectdata **connp, bool *done)
-{
- CURLcode result=CURLE_OK;
- struct connectdata *conn = *connp;
- struct SessionHandle *data = conn->data;
-
- if(conn->handler->do_it) {
- /* generic protocol-specific function pointer set in curl_connect() */
- result = conn->handler->do_it(conn, done);
-
- /* This was formerly done in transfer.c, but we better do it here */
- if((CURLE_SEND_ERROR == result) && conn->bits.reuse) {
- /*
- * If the connection is using an easy handle, call reconnect
- * to re-establish the connection. Otherwise, let the multi logic
- * figure out how to re-establish the connection.
- */
- if(!data->multi) {
- result = Curl_reconnect_request(connp);
-
- if(result == CURLE_OK) {
- /* ... finally back to actually retry the DO phase */
- conn = *connp; /* re-assign conn since Curl_reconnect_request
- creates a new connection */
- result = conn->handler->do_it(conn, done);
- }
- }
- else
- return result;
- }
-
- if((result == CURLE_OK) && *done)
- /* do_complete must be called after the protocol-specific DO function */
- do_complete(conn);
- }
- return result;
-}
-
-/*
- * Curl_do_more() is called during the DO_MORE multi state. It is basically a
- * second stage DO state which (wrongly) was introduced to support FTP's
- * second connection.
- *
- * TODO: A future libcurl should be able to work away this state.
- *
- * 'complete' can return 0 for incomplete, 1 for done and -1 for go back to
- * DOING state there's more work to do!
- */
-
-CURLcode Curl_do_more(struct connectdata *conn, int *complete)
-{
- CURLcode result=CURLE_OK;
-
- *complete = 0;
-
- if(conn->handler->do_more)
- result = conn->handler->do_more(conn, complete);
-
- if(!result && (*complete == 1))
- /* do_complete must be called after the protocol-specific DO function */
- do_complete(conn);
-
- return result;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/url.h b/external/libcurl_android/jni/libcurl/lib/url.h
deleted file mode 100755
index cd46a92c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/url.h
+++ /dev/null
@@ -1,82 +0,0 @@
-#ifndef HEADER_CURL_URL_H
-#define HEADER_CURL_URL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-/*
- * Prototypes for library-wide functions provided by url.c
- */
-
-CURLcode Curl_open(struct SessionHandle **curl);
-CURLcode Curl_init_userdefined(struct UserDefined *set);
-CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
- va_list arg);
-CURLcode Curl_dupset(struct SessionHandle * dst, struct SessionHandle * src);
-void Curl_freeset(struct SessionHandle * data);
-CURLcode Curl_close(struct SessionHandle *data); /* opposite of curl_open() */
-CURLcode Curl_connect(struct SessionHandle *, struct connectdata **,
- bool *async, bool *protocol_connect);
-CURLcode Curl_do(struct connectdata **, bool *done);
-CURLcode Curl_do_more(struct connectdata *, int *completed);
-CURLcode Curl_done(struct connectdata **, CURLcode, bool premature);
-CURLcode Curl_disconnect(struct connectdata *, bool dead_connection);
-CURLcode Curl_protocol_connect(struct connectdata *conn, bool *done);
-CURLcode Curl_protocol_connecting(struct connectdata *conn, bool *done);
-CURLcode Curl_protocol_doing(struct connectdata *conn, bool *done);
-CURLcode Curl_setup_conn(struct connectdata *conn,
- bool *protocol_done);
-void Curl_free_request_state(struct SessionHandle *data);
-
-int Curl_protocol_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-int Curl_doing_getsock(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-
-bool Curl_isPipeliningEnabled(const struct SessionHandle *handle);
-CURLcode Curl_addHandleToPipeline(struct SessionHandle *handle,
- struct curl_llist *pipeline);
-int Curl_removeHandleFromPipeline(struct SessionHandle *handle,
- struct curl_llist *pipeline);
-/* remove the specified connection from all (possible) pipelines and related
- queues */
-void Curl_getoff_all_pipelines(struct SessionHandle *data,
- struct connectdata *conn);
-
-void Curl_close_connections(struct SessionHandle *data);
-
-#define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */
-#define CURL_DEFAULT_SOCKS5_GSSAPI_SERVICE "rcmd" /* default socks5 gssapi
- service */
-
-CURLcode Curl_connected_proxy(struct connectdata *conn, int sockindex);
-
-#ifdef CURL_DISABLE_VERBOSE_STRINGS
-#define Curl_verboseconnect(x) Curl_nop_stmt
-#else
-void Curl_verboseconnect(struct connectdata *conn);
-#endif
-
-
-#endif /* HEADER_CURL_URL_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/urldata.h b/external/libcurl_android/jni/libcurl/lib/urldata.h
deleted file mode 100755
index 8594c2f7..00000000
--- a/external/libcurl_android/jni/libcurl/lib/urldata.h
+++ /dev/null
@@ -1,1705 +0,0 @@
-#ifndef HEADER_CURL_URLDATA_H
-#define HEADER_CURL_URLDATA_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* This file is for lib internal stuff */
-
-#include "curl_setup.h"
-
-#define PORT_FTP 21
-#define PORT_FTPS 990
-#define PORT_TELNET 23
-#define PORT_HTTP 80
-#define PORT_HTTPS 443
-#define PORT_DICT 2628
-#define PORT_LDAP 389
-#define PORT_LDAPS 636
-#define PORT_TFTP 69
-#define PORT_SSH 22
-#define PORT_IMAP 143
-#define PORT_IMAPS 993
-#define PORT_POP3 110
-#define PORT_POP3S 995
-#define PORT_SMTP 25
-#define PORT_SMTPS 465 /* sometimes called SSMTP */
-#define PORT_RTSP 554
-#define PORT_RTMP 1935
-#define PORT_RTMPT PORT_HTTP
-#define PORT_RTMPS PORT_HTTPS
-#define PORT_GOPHER 70
-
-#define DICT_MATCH "/MATCH:"
-#define DICT_MATCH2 "/M:"
-#define DICT_MATCH3 "/FIND:"
-#define DICT_DEFINE "/DEFINE:"
-#define DICT_DEFINE2 "/D:"
-#define DICT_DEFINE3 "/LOOKUP:"
-
-#define CURL_DEFAULT_USER "anonymous"
-#define CURL_DEFAULT_PASSWORD "ftp@example.com"
-
-/* Convenience defines for checking protocols or their SSL based version. Each
- protocol handler should only ever have a single CURLPROTO_ in its protocol
- field. */
-#define PROTO_FAMILY_HTTP (CURLPROTO_HTTP|CURLPROTO_HTTPS)
-#define PROTO_FAMILY_FTP (CURLPROTO_FTP|CURLPROTO_FTPS)
-#define PROTO_FAMILY_POP3 (CURLPROTO_POP3|CURLPROTO_POP3S)
-#define PROTO_FAMILY_SMTP (CURLPROTO_SMTP|CURLPROTO_SMTPS)
-
-#define DEFAULT_CONNCACHE_SIZE 5
-
-/* length of longest IPv6 address string including the trailing null */
-#define MAX_IPADR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")
-
-/* Default FTP/IMAP etc response timeout in milliseconds.
- Symbian OS panics when given a timeout much greater than 1/2 hour.
-*/
-#define RESP_TIMEOUT (1800*1000)
-
-#include "cookie.h"
-#include "formdata.h"
-
-#ifdef USE_SSLEAY
-#ifdef USE_OPENSSL
-#include <openssl/rsa.h>
-#include <openssl/crypto.h>
-#include <openssl/x509.h>
-#include <openssl/pem.h>
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#ifdef HAVE_OPENSSL_ENGINE_H
-#include <openssl/engine.h>
-#endif
-#ifdef HAVE_OPENSSL_PKCS12_H
-#include <openssl/pkcs12.h>
-#endif
-#else /* SSLeay-style includes */
-#include <rsa.h>
-#include <crypto.h>
-#include <x509.h>
-#include <pem.h>
-#include <ssl.h>
-#include <err.h>
-#ifdef HAVE_OPENSSL_ENGINE_H
-#include <engine.h>
-#endif
-#ifdef HAVE_OPENSSL_PKCS12_H
-#include <pkcs12.h>
-#endif
-#endif /* USE_OPENSSL */
-#ifdef USE_GNUTLS
-#error Configuration error; cannot use GnuTLS *and* OpenSSL.
-#endif
-#endif /* USE_SSLEAY */
-
-#ifdef USE_GNUTLS
-#include <gnutls/gnutls.h>
-#endif
-
-#ifdef USE_POLARSSL
-#include <polarssl/ssl.h>
-#include <polarssl/version.h>
-#if POLARSSL_VERSION_NUMBER<0x01010000
-#include <polarssl/havege.h>
-#else
-#include <polarssl/entropy.h>
-#include <polarssl/ctr_drbg.h>
-#endif /* POLARSSL_VERSION_NUMBER<0x01010000 */
-#endif /* USE_POLARSSL */
-
-#ifdef USE_CYASSL
-#undef OCSP_REQUEST /* avoid cyassl/openssl/ssl.h clash with wincrypt.h */
-#undef OCSP_RESPONSE /* avoid cyassl/openssl/ssl.h clash with wincrypt.h */
-#include <cyassl/openssl/ssl.h>
-#endif
-
-#ifdef USE_NSS
-#include <nspr.h>
-#include <pk11pub.h>
-#endif
-
-#ifdef USE_QSOSSL
-#include <qsossl.h>
-#endif
-
-#ifdef USE_GSKIT
-#include <gskssl.h>
-#endif
-
-#ifdef USE_AXTLS
-#include <axTLS/ssl.h>
-#undef malloc
-#undef calloc
-#undef realloc
-#endif /* USE_AXTLS */
-
-#ifdef USE_SCHANNEL
-#include "curl_sspi.h"
-#include <schnlsp.h>
-#include <schannel.h>
-#endif
-
-#ifdef USE_DARWINSSL
-#include <Security/Security.h>
-/* For some reason, when building for iOS, the omnibus header above does
- * not include SecureTransport.h as of iOS SDK 5.1. */
-#include <Security/SecureTransport.h>
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#include "timeval.h"
-
-#ifdef HAVE_ZLIB_H
-#include <zlib.h> /* for content-encoding */
-#ifdef __SYMBIAN32__
-/* zlib pollutes the namespace with this definition */
-#undef WIN32
-#endif
-#endif
-
-#include <curl/curl.h>
-
-#include "http_chunks.h" /* for the structs and enum stuff */
-#include "hostip.h"
-#include "hash.h"
-#include "splay.h"
-
-#include "imap.h"
-#include "pop3.h"
-#include "smtp.h"
-#include "ftp.h"
-#include "file.h"
-#include "ssh.h"
-#include "http.h"
-#include "rtsp.h"
-#include "wildcard.h"
-#include "multihandle.h"
-
-#ifdef HAVE_GSSAPI
-# ifdef HAVE_GSSGNU
-# include <gss.h>
-# elif defined HAVE_GSSMIT
-# include <gssapi/gssapi.h>
-# include <gssapi/gssapi_generic.h>
-# else
-# include <gssapi.h>
-# endif
-#endif
-
-#ifdef HAVE_LIBSSH2_H
-#include <libssh2.h>
-#include <libssh2_sftp.h>
-#endif /* HAVE_LIBSSH2_H */
-
-/* Download buffer size, keep it fairly big for speed reasons */
-#undef BUFSIZE
-#define BUFSIZE CURL_MAX_WRITE_SIZE
-
-/* Initial size of the buffer to store headers in, it'll be enlarged in case
- of need. */
-#define HEADERSIZE 256
-
-#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
-
-/* Some convenience macros to get the larger/smaller value out of two given.
- We prefix with CURL to prevent name collisions. */
-#define CURLMAX(x,y) ((x)>(y)?(x):(y))
-#define CURLMIN(x,y) ((x)<(y)?(x):(y))
-
-
-#ifdef HAVE_GSSAPI
-/* Types needed for krb5-ftp connections */
-struct krb5buffer {
- void *data;
- size_t size;
- size_t index;
- int eof_flag;
-};
-
-enum protection_level {
- PROT_NONE, /* first in list */
- PROT_CLEAR,
- PROT_SAFE,
- PROT_CONFIDENTIAL,
- PROT_PRIVATE,
- PROT_CMD,
- PROT_LAST /* last in list */
-};
-#endif
-
-#ifdef USE_SCHANNEL
-/* Structs to store Schannel handles */
-struct curl_schannel_cred {
- CredHandle cred_handle;
- TimeStamp time_stamp;
- int refcount;
- bool cached;
-};
-
-struct curl_schannel_ctxt {
- CtxtHandle ctxt_handle;
- TimeStamp time_stamp;
-};
-#endif
-
-/* enum for the nonblocking SSL connection state machine */
-typedef enum {
- ssl_connect_1,
- ssl_connect_2,
- ssl_connect_2_reading,
- ssl_connect_2_writing,
- ssl_connect_3,
- ssl_connect_done
-} ssl_connect_state;
-
-typedef enum {
- ssl_connection_none,
- ssl_connection_negotiating,
- ssl_connection_complete
-} ssl_connection_state;
-
-/* struct for data related to each SSL connection */
-struct ssl_connect_data {
- /* Use ssl encrypted communications TRUE/FALSE, not necessarily using it atm
- but at least asked to or meaning to use it. See 'state' for the exact
- current state of the connection. */
- bool use;
- ssl_connection_state state;
-#ifdef USE_SSLEAY
- /* these ones requires specific SSL-types */
- SSL_CTX* ctx;
- SSL* handle;
- X509* server_cert;
- ssl_connect_state connecting_state;
-#endif /* USE_SSLEAY */
-#ifdef USE_GNUTLS
- gnutls_session_t session;
- gnutls_certificate_credentials_t cred;
-#ifdef USE_TLS_SRP
- gnutls_srp_client_credentials_t srp_client_cred;
-#endif
- ssl_connect_state connecting_state;
-#endif /* USE_GNUTLS */
-#ifdef USE_POLARSSL
- ctr_drbg_context ctr_drbg;
- entropy_context entropy;
- ssl_context ssl;
- ssl_session ssn;
- int server_fd;
- x509_crt cacert;
- x509_crt clicert;
- x509_crl crl;
- rsa_context rsa;
- ssl_connect_state connecting_state;
-#endif /* USE_POLARSSL */
-#ifdef USE_CYASSL
- SSL_CTX* ctx;
- SSL* handle;
- ssl_connect_state connecting_state;
-#endif /* USE_CYASSL */
-#ifdef USE_NSS
- PRFileDesc *handle;
- char *client_nickname;
- struct SessionHandle *data;
- struct curl_llist *obj_list;
- PK11GenericObject *obj_clicert;
- ssl_connect_state connecting_state;
-#endif /* USE_NSS */
-#ifdef USE_QSOSSL
- SSLHandle *handle;
-#endif /* USE_QSOSSL */
-#ifdef USE_GSKIT
- gsk_handle handle;
- int iocport;
- ssl_connect_state connecting_state;
-#endif
-#ifdef USE_AXTLS
- SSL_CTX* ssl_ctx;
- SSL* ssl;
- ssl_connect_state connecting_state;
-#endif /* USE_AXTLS */
-#ifdef USE_SCHANNEL
- struct curl_schannel_cred *cred;
- struct curl_schannel_ctxt *ctxt;
- SecPkgContext_StreamSizes stream_sizes;
- ssl_connect_state connecting_state;
- size_t encdata_length, decdata_length;
- size_t encdata_offset, decdata_offset;
- unsigned char *encdata_buffer, *decdata_buffer;
- unsigned long req_flags, ret_flags;
-#endif /* USE_SCHANNEL */
-#ifdef USE_DARWINSSL
- SSLContextRef ssl_ctx;
- curl_socket_t ssl_sockfd;
- ssl_connect_state connecting_state;
- bool ssl_direction; /* true if writing, false if reading */
- size_t ssl_write_buffered_length;
-#endif /* USE_DARWINSSL */
-};
-
-struct ssl_config_data {
- long version; /* what version the client wants to use */
- long certverifyresult; /* result from the certificate verification */
-
- bool verifypeer; /* set TRUE if this is desired */
- bool verifyhost; /* set TRUE if CN/SAN must match hostname */
- char *CApath; /* certificate dir (doesn't work on windows) */
- char *CAfile; /* certificate to verify peer against */
- const char *CRLfile; /* CRL to check certificate revocation */
- const char *issuercert;/* optional issuer certificate filename */
- char *random_file; /* path to file containing "random" data */
- char *egdsocket; /* path to file containing the EGD daemon socket */
- char *cipher_list; /* list of ciphers to use */
- size_t max_ssl_sessions; /* SSL session id cache size */
- curl_ssl_ctx_callback fsslctx; /* function to initialize ssl ctx */
- void *fsslctxp; /* parameter for call back */
- bool sessionid; /* cache session IDs or not */
- bool certinfo; /* gather lots of certificate info */
-
-#ifdef USE_TLS_SRP
- char *username; /* TLS username (for, e.g., SRP) */
- char *password; /* TLS password (for, e.g., SRP) */
- enum CURL_TLSAUTH authtype; /* TLS authentication type (default SRP) */
-#endif
-};
-
-/* information stored about one single SSL session */
-struct curl_ssl_session {
- char *name; /* host name for which this ID was used */
- void *sessionid; /* as returned from the SSL layer */
- size_t idsize; /* if known, otherwise 0 */
- long age; /* just a number, the higher the more recent */
- int remote_port; /* remote port to connect to */
- struct ssl_config_data ssl_config; /* setup for this session */
-};
-
-/* Struct used for Digest challenge-response authentication */
-struct digestdata {
- char *nonce;
- char *cnonce;
- char *realm;
- int algo;
- bool stale; /* set true for re-negotiation */
- char *opaque;
- char *qop;
- char *algorithm;
- int nc; /* nounce count */
-};
-
-typedef enum {
- NTLMSTATE_NONE,
- NTLMSTATE_TYPE1,
- NTLMSTATE_TYPE2,
- NTLMSTATE_TYPE3,
- NTLMSTATE_LAST
-} curlntlm;
-
-#ifdef USE_WINDOWS_SSPI
-#include "curl_sspi.h"
-#endif
-
-#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV)
-#include <iconv.h>
-#endif
-
-/* Struct used for GSSAPI (Kerberos V5) authentication */
-#if defined(USE_WINDOWS_SSPI)
-struct kerberos5data {
- CredHandle *credentials;
- CtxtHandle *context;
- TCHAR *spn;
- SEC_WINNT_AUTH_IDENTITY identity;
- SEC_WINNT_AUTH_IDENTITY *p_identity;
- size_t token_max;
- BYTE *output_token;
-};
-#endif
-
-/* Struct used for NTLM challenge-response authentication */
-struct ntlmdata {
- curlntlm state;
-#ifdef USE_WINDOWS_SSPI
- CredHandle handle;
- CtxtHandle c_handle;
- SEC_WINNT_AUTH_IDENTITY identity;
- SEC_WINNT_AUTH_IDENTITY *p_identity;
- size_t max_token_length;
- BYTE *output_token;
- int has_handles;
- void *type_2;
- unsigned long n_type_2;
-#else
- unsigned int flags;
- unsigned char nonce[8];
- void* target_info; /* TargetInfo received in the ntlm type-2 message */
- unsigned int target_info_len;
-#endif
-};
-
-#ifdef USE_SPNEGO
-struct negotiatedata {
- /* When doing Negotiate (SPNEGO) auth, we first need to send a token
- and then validate the received one. */
- enum { GSS_AUTHNONE, GSS_AUTHRECV, GSS_AUTHSENT } state;
-#ifdef HAVE_GSSAPI
- OM_uint32 status;
- gss_ctx_id_t context;
- gss_name_t server_name;
- gss_buffer_desc output_token;
-#else
-#ifdef USE_WINDOWS_SSPI
- DWORD status;
- CtxtHandle *context;
- CredHandle *credentials;
- SEC_WINNT_AUTH_IDENTITY identity;
- SEC_WINNT_AUTH_IDENTITY *p_identity;
- TCHAR *server_name;
- size_t max_token_length;
- BYTE *output_token;
- size_t output_token_length;
-#endif
-#endif
-};
-#endif
-
-
-/*
- * Boolean values that concerns this connection.
- */
-struct ConnectBits {
- /* always modify bits.close with the connclose() and connkeep() macros! */
- bool close; /* if set, we close the connection after this request */
- bool reuse; /* if set, this is a re-used connection */
- bool proxy; /* if set, this transfer is done through a proxy - any type */
- bool httpproxy; /* if set, this transfer is done through a http proxy */
- bool user_passwd; /* do we use user+password for this connection? */
- bool proxy_user_passwd; /* user+password for the proxy? */
- bool ipv6_ip; /* we communicate with a remote site specified with pure IPv6
- IP address */
- bool ipv6; /* we communicate with a site using an IPv6 address */
-
- bool do_more; /* this is set TRUE if the ->curl_do_more() function is
- supposed to be called, after ->curl_do() */
- bool tcpconnect[2]; /* the TCP layer (or similar) is connected, this is set
- the first time on the first connect function call */
- bool protoconnstart;/* the protocol layer has STARTED its operation after
- the TCP layer connect */
-
- bool retry; /* this connection is about to get closed and then
- re-attempted at another connection. */
- bool tunnel_proxy; /* if CONNECT is used to "tunnel" through the proxy.
- This is implicit when SSL-protocols are used through
- proxies, but can also be enabled explicitly by
- apps */
- bool authneg; /* TRUE when the auth phase has started, which means
- that we are creating a request with an auth header,
- but it is not the final request in the auth
- negotiation. */
- bool rewindaftersend;/* TRUE when the sending couldn't be stopped even
- though it will be discarded. When the whole send
- operation is done, we must call the data rewind
- callback. */
- bool ftp_use_epsv; /* As set with CURLOPT_FTP_USE_EPSV, but if we find out
- EPSV doesn't work we disable it for the forthcoming
- requests */
-
- bool ftp_use_eprt; /* As set with CURLOPT_FTP_USE_EPRT, but if we find out
- EPRT doesn't work we disable it for the forthcoming
- requests */
- bool netrc; /* name+password provided by netrc */
- bool userpwd_in_url; /* name+password found in url */
-
- bool done; /* set to FALSE when Curl_do() is called and set to TRUE
- when Curl_done() is called, to prevent Curl_done() to
- get invoked twice when the multi interface is
- used. */
- bool stream_was_rewound; /* Indicates that the stream was rewound after a
- request read past the end of its response byte
- boundary */
- bool proxy_connect_closed; /* set true if a proxy disconnected the
- connection in a CONNECT request with auth, so
- that libcurl should reconnect and continue. */
- bool bound; /* set true if bind() has already been done on this socket/
- connection */
- bool type_set; /* type= was used in the URL */
-};
-
-struct hostname {
- char *rawalloc; /* allocated "raw" version of the name */
- char *encalloc; /* allocated IDN-encoded version of the name */
- char *name; /* name to use internally, might be encoded, might be raw */
- const char *dispname; /* name to display, as 'name' might be encoded */
-};
-
-/*
- * Flags on the keepon member of the Curl_transfer_keeper
- */
-
-#define KEEP_NONE 0
-#define KEEP_RECV (1<<0) /* there is or may be data to read */
-#define KEEP_SEND (1<<1) /* there is or may be data to write */
-#define KEEP_RECV_HOLD (1<<2) /* when set, no reading should be done but there
- might still be data to read */
-#define KEEP_SEND_HOLD (1<<3) /* when set, no writing should be done but there
- might still be data to write */
-#define KEEP_RECV_PAUSE (1<<4) /* reading is paused */
-#define KEEP_SEND_PAUSE (1<<5) /* writing is paused */
-
-#define KEEP_RECVBITS (KEEP_RECV | KEEP_RECV_HOLD | KEEP_RECV_PAUSE)
-#define KEEP_SENDBITS (KEEP_SEND | KEEP_SEND_HOLD | KEEP_SEND_PAUSE)
-
-
-#ifdef HAVE_LIBZ
-typedef enum {
- ZLIB_UNINIT, /* uninitialized */
- ZLIB_INIT, /* initialized */
- ZLIB_GZIP_HEADER, /* reading gzip header */
- ZLIB_GZIP_INFLATING, /* inflating gzip stream */
- ZLIB_INIT_GZIP /* initialized in transparent gzip mode */
-} zlibInitState;
-#endif
-
-#ifdef CURLRES_ASYNCH
-struct Curl_async {
- char *hostname;
- int port;
- struct Curl_dns_entry *dns;
- bool done; /* set TRUE when the lookup is complete */
- int status; /* if done is TRUE, this is the status from the callback */
- void *os_specific; /* 'struct thread_data' for Windows */
-};
-#endif
-
-#define FIRSTSOCKET 0
-#define SECONDARYSOCKET 1
-
-/* These function pointer types are here only to allow easier typecasting
- within the source when we need to cast between data pointers (such as NULL)
- and function pointers. */
-typedef CURLcode (*Curl_do_more_func)(struct connectdata *, int *);
-typedef CURLcode (*Curl_done_func)(struct connectdata *, CURLcode, bool);
-
-enum expect100 {
- EXP100_SEND_DATA, /* enough waiting, just send the body now */
- EXP100_AWAITING_CONTINUE, /* waiting for the 100 Continue header */
- EXP100_SENDING_REQUEST, /* still sending the request but will wait for
- the 100 header once done with the request */
- EXP100_FAILED /* used on 417 Expectation Failed */
-};
-
-enum upgrade101 {
- UPGR101_INIT, /* default state */
- UPGR101_REQUESTED, /* upgrade requested */
- UPGR101_RECEIVED, /* response received */
- UPGR101_WORKING /* talking upgraded protocol */
-};
-
-enum negotiatenpn {
- NPN_INIT, /* default state */
- NPN_HTTP1_1, /* HTTP/1.1 negotiated */
- NPN_HTTP2 /* HTTP2 (draft-xx) negotiated */
-};
-
-/*
- * Request specific data in the easy handle (SessionHandle). Previously,
- * these members were on the connectdata struct but since a conn struct may
- * now be shared between different SessionHandles, we store connection-specific
- * data here. This struct only keeps stuff that's interesting for *this*
- * request, as it will be cleared between multiple ones
- */
-struct SingleRequest {
- curl_off_t size; /* -1 if unknown at this point */
- curl_off_t *bytecountp; /* return number of bytes read or NULL */
-
- curl_off_t maxdownload; /* in bytes, the maximum amount of data to fetch,
- -1 means unlimited */
- curl_off_t *writebytecountp; /* return number of bytes written or NULL */
-
- curl_off_t bytecount; /* total number of bytes read */
- curl_off_t writebytecount; /* number of bytes written */
-
- long headerbytecount; /* only count received headers */
- long deductheadercount; /* this amount of bytes doesn't count when we check
- if anything has been transferred at the end of a
- connection. We use this counter to make only a
- 100 reply (without a following second response
- code) result in a CURLE_GOT_NOTHING error code */
-
- struct timeval start; /* transfer started at this time */
- struct timeval now; /* current time */
- bool header; /* incoming data has HTTP header */
- enum {
- HEADER_NORMAL, /* no bad header at all */
- HEADER_PARTHEADER, /* part of the chunk is a bad header, the rest
- is normal data */
- HEADER_ALLBAD /* all was believed to be header */
- } badheader; /* the header was deemed bad and will be
- written as body */
- int headerline; /* counts header lines to better track the
- first one */
- char *hbufp; /* points at *end* of header line */
- size_t hbuflen;
- char *str; /* within buf */
- char *str_start; /* within buf */
- char *end_ptr; /* within buf */
- char *p; /* within headerbuff */
- bool content_range; /* set TRUE if Content-Range: was found */
- curl_off_t offset; /* possible resume offset read from the
- Content-Range: header */
- int httpcode; /* error code from the 'HTTP/1.? XXX' or
- 'RTSP/1.? XXX' line */
- struct timeval start100; /* time stamp to wait for the 100 code from */
- enum expect100 exp100; /* expect 100 continue state */
- enum upgrade101 upgr101; /* 101 upgrade state */
-
- int auto_decoding; /* What content encoding. sec 3.5, RFC2616. */
-
-#define IDENTITY 0 /* No encoding */
-#define DEFLATE 1 /* zlib deflate [RFC 1950 & 1951] */
-#define GZIP 2 /* gzip algorithm [RFC 1952] */
-#define COMPRESS 3 /* Not handled, added for completeness */
-
-#ifdef HAVE_LIBZ
- zlibInitState zlib_init; /* possible zlib init state;
- undefined if Content-Encoding header. */
- z_stream z; /* State structure for zlib. */
-#endif
-
- time_t timeofdoc;
- long bodywrites;
-
- char *buf;
- char *uploadbuf;
- curl_socket_t maxfd;
-
- int keepon;
-
- bool upload_done; /* set to TRUE when doing chunked transfer-encoding upload
- and we're uploading the last chunk */
-
- bool ignorebody; /* we read a response-body but we ignore it! */
- bool ignorecl; /* This HTTP response has no body so we ignore the Content-
- Length: header */
-
- char *location; /* This points to an allocated version of the Location:
- header data */
- char *newurl; /* Set to the new URL to use when a redirect or a retry is
- wanted */
-
- /* 'upload_present' is used to keep a byte counter of how much data there is
- still left in the buffer, aimed for upload. */
- ssize_t upload_present;
-
- /* 'upload_fromhere' is used as a read-pointer when we uploaded parts of a
- buffer, so the next read should read from where this pointer points to,
- and the 'upload_present' contains the number of bytes available at this
- position */
- char *upload_fromhere;
-
- bool chunk; /* if set, this is a chunked transfer-encoding */
- bool upload_chunky; /* set TRUE if we are doing chunked transfer-encoding
- on upload */
- bool getheader; /* TRUE if header parsing is wanted */
-
- bool forbidchunk; /* used only to explicitly forbid chunk-upload for
- specific upload buffers. See readmoredata() in
- http.c for details. */
-
- void *protop; /* Allocated protocol-specific data. Each protocol
- handler makes sure this points to data it needs. */
-};
-
-/*
- * Specific protocol handler.
- */
-
-struct Curl_handler {
- const char * scheme; /* URL scheme name. */
-
- /* Complement to setup_connection_internals(). */
- CURLcode (*setup_connection)(struct connectdata *);
-
- /* These two functions MUST be set to be protocol dependent */
- CURLcode (*do_it)(struct connectdata *, bool *done);
- Curl_done_func done;
-
- /* If the curl_do() function is better made in two halves, this
- * curl_do_more() function will be called afterwards, if set. For example
- * for doing the FTP stuff after the PASV/PORT command.
- */
- Curl_do_more_func do_more;
-
- /* This function *MAY* be set to a protocol-dependent function that is run
- * after the connect() and everything is done, as a step in the connection.
- * The 'done' pointer points to a bool that should be set to TRUE if the
- * function completes before return. If it doesn't complete, the caller
- * should call the curl_connecting() function until it is.
- */
- CURLcode (*connect_it)(struct connectdata *, bool *done);
-
- /* See above. Currently only used for FTP. */
- CURLcode (*connecting)(struct connectdata *, bool *done);
- CURLcode (*doing)(struct connectdata *, bool *done);
-
- /* Called from the multi interface during the PROTOCONNECT phase, and it
- should then return a proper fd set */
- int (*proto_getsock)(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-
- /* Called from the multi interface during the DOING phase, and it should
- then return a proper fd set */
- int (*doing_getsock)(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-
- /* Called from the multi interface during the DO_MORE phase, and it should
- then return a proper fd set */
- int (*domore_getsock)(struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-
- /* Called from the multi interface during the DO_DONE, PERFORM and
- WAITPERFORM phases, and it should then return a proper fd set. Not setting
- this will make libcurl use the generic default one. */
- int (*perform_getsock)(const struct connectdata *conn,
- curl_socket_t *socks,
- int numsocks);
-
- /* This function *MAY* be set to a protocol-dependent function that is run
- * by the curl_disconnect(), as a step in the disconnection. If the handler
- * is called because the connection has been considered dead, dead_connection
- * is set to TRUE.
- */
- CURLcode (*disconnect)(struct connectdata *, bool dead_connection);
-
- /* If used, this function gets called from transfer.c:readwrite_data() to
- allow the protocol to do extra reads/writes */
- CURLcode (*readwrite)(struct SessionHandle *data, struct connectdata *conn,
- ssize_t *nread, bool *readmore);
-
- long defport; /* Default port. */
- unsigned int protocol; /* See CURLPROTO_* - this needs to be the single
- specific protocol bit */
- unsigned int flags; /* Extra particular characteristics, see PROTOPT_* */
-};
-
-#define PROTOPT_NONE 0 /* nothing extra */
-#define PROTOPT_SSL (1<<0) /* uses SSL */
-#define PROTOPT_DUAL (1<<1) /* this protocol uses two connections */
-#define PROTOPT_CLOSEACTION (1<<2) /* need action before socket close */
-/* some protocols will have to call the underlying functions without regard to
- what exact state the socket signals. IE even if the socket says "readable",
- the send function might need to be called while uploading, or vice versa.
-*/
-#define PROTOPT_DIRLOCK (1<<3)
-#define PROTOPT_NONETWORK (1<<4) /* protocol doesn't use the network! */
-#define PROTOPT_NEEDSPWD (1<<5) /* needs a password, and if none is set it
- gets a default */
-#define PROTOPT_NOURLQUERY (1<<6) /* protocol can't handle
- url query strings (?foo=bar) ! */
-#define PROTOPT_CREDSPERREQUEST (1<<7) /* requires login credentials per
- request instead of per connection */
-
-
-/* return the count of bytes sent, or -1 on error */
-typedef ssize_t (Curl_send)(struct connectdata *conn, /* connection data */
- int sockindex, /* socketindex */
- const void *buf, /* data to write */
- size_t len, /* max amount to write */
- CURLcode *err); /* error to return */
-
-/* return the count of bytes read, or -1 on error */
-typedef ssize_t (Curl_recv)(struct connectdata *conn, /* connection data */
- int sockindex, /* socketindex */
- char *buf, /* store data here */
- size_t len, /* max amount to read */
- CURLcode *err); /* error to return */
-
-/*
- * The connectdata struct contains all fields and variables that should be
- * unique for an entire connection.
- */
-struct connectdata {
- /* 'data' is the CURRENT SessionHandle using this connection -- take great
- caution that this might very well vary between different times this
- connection is used! */
- struct SessionHandle *data;
-
- /* chunk is for HTTP chunked encoding, but is in the general connectdata
- struct only because we can do just about any protocol through a HTTP proxy
- and a HTTP proxy may in fact respond using chunked encoding */
- struct Curl_chunker chunk;
-
- curl_closesocket_callback fclosesocket; /* function closing the socket(s) */
- void *closesocket_client;
-
- bool inuse; /* This is a marker for the connection cache logic. If this is
- TRUE this handle is being used by an easy handle and cannot
- be used by any other easy handle without careful
- consideration (== only for pipelining). */
-
- /**** Fields set when inited and not modified again */
- long connection_id; /* Contains a unique number to make it easier to
- track the connections in the log output */
-
- /* 'dns_entry' is the particular host we use. This points to an entry in the
- DNS cache and it will not get pruned while locked. It gets unlocked in
- Curl_done(). This entry will be NULL if the connection is re-used as then
- there is no name resolve done. */
- struct Curl_dns_entry *dns_entry;
-
- /* 'ip_addr' is the particular IP we connected to. It points to a struct
- within the DNS cache, so this pointer is only valid as long as the DNS
- cache entry remains locked. It gets unlocked in Curl_done() */
- Curl_addrinfo *ip_addr;
- Curl_addrinfo *tempaddr[2]; /* for happy eyeballs */
-
- /* 'ip_addr_str' is the ip_addr data as a human readable string.
- It remains available as long as the connection does, which is longer than
- the ip_addr itself. */
- char ip_addr_str[MAX_IPADR_LEN];
-
- unsigned int scope; /* address scope for IPv6 */
-
- int socktype; /* SOCK_STREAM or SOCK_DGRAM */
-
- struct hostname host;
- struct hostname proxy;
-
- long port; /* which port to use locally */
- int remote_port; /* what remote port to connect to, not the proxy port! */
-
- /* 'primary_ip' and 'primary_port' get filled with peer's numerical
- ip address and port number whenever an outgoing connection is
- *attempted* from the primary socket to a remote address. When more
- than one address is tried for a connection these will hold data
- for the last attempt. When the connection is actually established
- these are updated with data which comes directly from the socket. */
-
- char primary_ip[MAX_IPADR_LEN];
- long primary_port;
-
- /* 'local_ip' and 'local_port' get filled with local's numerical
- ip address and port number whenever an outgoing connection is
- **established** from the primary socket to a remote address. */
-
- char local_ip[MAX_IPADR_LEN];
- long local_port;
-
- char *user; /* user name string, allocated */
- char *passwd; /* password string, allocated */
- char *options; /* options string, allocated */
-
- char *xoauth2_bearer; /* bearer token for xoauth2, allocated */
-
- char *proxyuser; /* proxy user name string, allocated */
- char *proxypasswd; /* proxy password string, allocated */
- curl_proxytype proxytype; /* what kind of proxy that is in use */
-
- int httpversion; /* the HTTP version*10 reported by the server */
- int rtspversion; /* the RTSP version*10 reported by the server */
-
- struct timeval now; /* "current" time */
- struct timeval created; /* creation time */
- curl_socket_t sock[2]; /* two sockets, the second is used for the data
- transfer when doing FTP */
- curl_socket_t tempsock[2]; /* temporary sockets for happy eyeballs */
- bool sock_accepted[2]; /* TRUE if the socket on this index was created with
- accept() */
- Curl_recv *recv[2];
- Curl_send *send[2];
-
- struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */
- struct ssl_config_data ssl_config;
-
- struct ConnectBits bits; /* various state-flags for this connection */
-
- /* connecttime: when connect() is called on the current IP address. Used to
- be able to track when to move on to try next IP - but only when the multi
- interface is used. */
- struct timeval connecttime;
- /* The two fields below get set in Curl_connecthost */
- int num_addr; /* number of addresses to try to connect to */
- long timeoutms_per_addr; /* how long time in milliseconds to spend on
- trying to connect to each IP address */
-
- const struct Curl_handler *handler; /* Connection's protocol handler */
- const struct Curl_handler *given; /* The protocol first given */
-
- long ip_version; /* copied from the SessionHandle at creation time */
-
- /**** curl_get() phase fields */
-
- curl_socket_t sockfd; /* socket to read from or CURL_SOCKET_BAD */
- curl_socket_t writesockfd; /* socket to write to, it may very
- well be the same we read from.
- CURL_SOCKET_BAD disables */
-
- /** Dynamicly allocated strings, MUST be freed before this **/
- /** struct is killed. **/
- struct dynamically_allocated_data {
- char *proxyuserpwd;
- char *uagent;
- char *accept_encoding;
- char *userpwd;
- char *rangeline;
- char *ref;
- char *host;
- char *cookiehost;
- char *rtsp_transport;
- char *te; /* TE: request header */
- } allocptr;
-
- int sec_complete; /* if kerberos is enabled for this connection */
-#ifdef HAVE_GSSAPI
- enum protection_level command_prot;
- enum protection_level data_prot;
- enum protection_level request_data_prot;
- size_t buffer_size;
- struct krb5buffer in_buffer;
- void *app_data;
- const struct Curl_sec_client_mech *mech;
- struct sockaddr_in local_addr;
-#endif
-
-#if defined(USE_WINDOWS_SSPI) /* Consider moving some of the above GSS-API */
- struct kerberos5data krb5; /* variables into the structure definition, */
-#endif /* however, some of them are ftp specific. */
-
- /* the two following *_inuse fields are only flags, not counters in any way.
- If TRUE it means the channel is in use, and if FALSE it means the channel
- is up for grabs by one. */
-
- bool readchannel_inuse; /* whether the read channel is in use by an easy
- handle */
- bool writechannel_inuse; /* whether the write channel is in use by an easy
- handle */
- struct curl_llist *send_pipe; /* List of handles waiting to
- send on this pipeline */
- struct curl_llist *recv_pipe; /* List of handles waiting to read
- their responses on this pipeline */
- char* master_buffer; /* The master buffer allocated on-demand;
- used for pipelining. */
- size_t read_pos; /* Current read position in the master buffer */
- size_t buf_len; /* Length of the buffer?? */
-
-
- curl_seek_callback seek_func; /* function that seeks the input */
- void *seek_client; /* pointer to pass to the seek() above */
-
- /*************** Request - specific items ************/
-
- /* previously this was in the urldata struct */
- curl_read_callback fread_func; /* function that reads the input */
- void *fread_in; /* pointer to pass to the fread() above */
-
- struct ntlmdata ntlm; /* NTLM differs from other authentication schemes
- because it authenticates connections, not
- single requests! */
- struct ntlmdata proxyntlm; /* NTLM data for proxy */
-
-#if defined(USE_NTLM) && defined(NTLM_WB_ENABLED)
- /* used for communication with Samba's winbind daemon helper ntlm_auth */
- curl_socket_t ntlm_auth_hlpr_socket;
- pid_t ntlm_auth_hlpr_pid;
- char* challenge_header;
- char* response_header;
-#endif
-
- char syserr_buf [256]; /* buffer for Curl_strerror() */
-
-#ifdef CURLRES_ASYNCH
- /* data used for the asynch name resolve callback */
- struct Curl_async async;
-#endif
-
- /* These three are used for chunked-encoding trailer support */
- char *trailer; /* allocated buffer to store trailer in */
- int trlMax; /* allocated buffer size */
- int trlPos; /* index of where to store data */
-
- union {
- struct ftp_conn ftpc;
- struct http_conn httpc;
- struct ssh_conn sshc;
- struct tftp_state_data *tftpc;
- struct imap_conn imapc;
- struct pop3_conn pop3c;
- struct smtp_conn smtpc;
- struct rtsp_conn rtspc;
- void *generic; /* RTMP and LDAP use this */
- } proto;
-
- int cselect_bits; /* bitmask of socket events */
- int waitfor; /* current READ/WRITE bits to wait for */
-
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- int socks5_gssapi_enctype;
-#endif
-
- bool verifypeer;
- bool verifyhost;
-
- /* When this connection is created, store the conditions for the local end
- bind. This is stored before the actual bind and before any connection is
- made and will serve the purpose of being used for comparison reasons so
- that subsequent bound-requested connections aren't accidentally re-using
- wrong connections. */
- char *localdev;
- unsigned short localport;
- int localportrange;
-
- /* tunnel as in tunnel through a HTTP proxy with CONNECT */
- enum {
- TUNNEL_INIT, /* init/default/no tunnel state */
- TUNNEL_CONNECT, /* CONNECT has been sent off */
- TUNNEL_COMPLETE /* CONNECT response received completely */
- } tunnel_state[2]; /* two separate ones to allow FTP */
- struct connectbundle *bundle; /* The bundle we are member of */
-
- enum negotiatenpn negnpn;
-};
-
-/* The end of connectdata. */
-
-/*
- * Struct to keep statistical and informational data.
- */
-struct PureInfo {
- int httpcode; /* Recent HTTP, FTP, or RTSP response code */
- int httpproxycode; /* response code from proxy when received separate */
- int httpversion; /* the http version number X.Y = X*10+Y */
- long filetime; /* If requested, this is might get set. Set to -1 if the time
- was unretrievable. We cannot have this of type time_t,
- since time_t is unsigned on several platforms such as
- OpenVMS. */
- bool timecond; /* set to TRUE if the time condition didn't match, which
- thus made the document NOT get fetched */
- long header_size; /* size of read header(s) in bytes */
- long request_size; /* the amount of bytes sent in the request(s) */
- unsigned long proxyauthavail; /* what proxy auth types were announced */
- unsigned long httpauthavail; /* what host auth types were announced */
- long numconnects; /* how many new connection did libcurl created */
- char *contenttype; /* the content type of the object */
- char *wouldredirect; /* URL this would've been redirected to if asked to */
-
- /* PureInfo members 'conn_primary_ip', 'conn_primary_port', 'conn_local_ip'
- and, 'conn_local_port' are copied over from the connectdata struct in
- order to allow curl_easy_getinfo() to return this information even when
- the session handle is no longer associated with a connection, and also
- allow curl_easy_reset() to clear this information from the session handle
- without disturbing information which is still alive, and that might be
- reused, in the connection cache. */
-
- char conn_primary_ip[MAX_IPADR_LEN];
- long conn_primary_port;
-
- char conn_local_ip[MAX_IPADR_LEN];
- long conn_local_port;
-
- struct curl_certinfo certs; /* info about the certs, only populated in
- OpenSSL builds. Asked for with
- CURLOPT_CERTINFO / CURLINFO_CERTINFO */
-};
-
-
-struct Progress {
- long lastshow; /* time() of the last displayed progress meter or NULL to
- force redraw at next call */
- curl_off_t size_dl; /* total expected size */
- curl_off_t size_ul; /* total expected size */
- curl_off_t downloaded; /* transferred so far */
- curl_off_t uploaded; /* transferred so far */
-
- curl_off_t current_speed; /* uses the currently fastest transfer */
-
- bool callback; /* set when progress callback is used */
- int width; /* screen width at download start */
- int flags; /* see progress.h */
-
- double timespent;
-
- curl_off_t dlspeed;
- curl_off_t ulspeed;
-
- double t_nslookup;
- double t_connect;
- double t_appconnect;
- double t_pretransfer;
- double t_starttransfer;
- double t_redirect;
-
- struct timeval start;
- struct timeval t_startsingle;
- struct timeval t_startop;
- struct timeval t_acceptdata;
-#define CURR_TIME (5+1) /* 6 entries for 5 seconds */
-
- curl_off_t speeder[ CURR_TIME ];
- struct timeval speeder_time[ CURR_TIME ];
- int speeder_c;
-};
-
-typedef enum {
- HTTPREQ_NONE, /* first in list */
- HTTPREQ_GET,
- HTTPREQ_POST,
- HTTPREQ_POST_FORM, /* we make a difference internally */
- HTTPREQ_PUT,
- HTTPREQ_HEAD,
- HTTPREQ_CUSTOM,
- HTTPREQ_LAST /* last in list */
-} Curl_HttpReq;
-
-typedef enum {
- RTSPREQ_NONE, /* first in list */
- RTSPREQ_OPTIONS,
- RTSPREQ_DESCRIBE,
- RTSPREQ_ANNOUNCE,
- RTSPREQ_SETUP,
- RTSPREQ_PLAY,
- RTSPREQ_PAUSE,
- RTSPREQ_TEARDOWN,
- RTSPREQ_GET_PARAMETER,
- RTSPREQ_SET_PARAMETER,
- RTSPREQ_RECORD,
- RTSPREQ_RECEIVE,
- RTSPREQ_LAST /* last in list */
-} Curl_RtspReq;
-
-/*
- * Values that are generated, temporary or calculated internally for a
- * "session handle" must be defined within the 'struct UrlState'. This struct
- * will be used within the SessionHandle struct. When the 'SessionHandle'
- * struct is cloned, this data MUST NOT be copied.
- *
- * Remember that any "state" information goes globally for the curl handle.
- * Session-data MUST be put in the connectdata struct and here. */
-#define MAX_CURL_USER_LENGTH 256
-#define MAX_CURL_PASSWORD_LENGTH 256
-
-struct auth {
- unsigned long want; /* Bitmask set to the authentication methods wanted by
- app (with CURLOPT_HTTPAUTH or CURLOPT_PROXYAUTH). */
- unsigned long picked;
- unsigned long avail; /* Bitmask for what the server reports to support for
- this resource */
- bool done; /* TRUE when the auth phase is done and ready to do the *actual*
- request */
- bool multi; /* TRUE if this is not yet authenticated but within the auth
- multipass negotiation */
- bool iestyle; /* TRUE if digest should be done IE-style or FALSE if it should
- be RFC compliant */
-};
-
-struct UrlState {
-
- /* Points to the connection cache */
- struct conncache *conn_cache;
-
- /* when curl_easy_perform() is called, the multi handle is "owned" by
- the easy handle so curl_easy_cleanup() on such an easy handle will
- also close the multi handle! */
- bool multi_owned_by_easy;
-
- /* buffers to store authentication data in, as parsed from input options */
- struct timeval keeps_speed; /* for the progress meter really */
-
- struct connectdata *lastconnect; /* The last connection, NULL if undefined */
-
- char *headerbuff; /* allocated buffer to store headers in */
- size_t headersize; /* size of the allocation */
-
- char buffer[BUFSIZE+1]; /* download buffer */
- char uploadbuffer[BUFSIZE+1]; /* upload buffer */
- curl_off_t current_speed; /* the ProgressShow() funcion sets this,
- bytes / second */
- bool this_is_a_follow; /* this is a followed Location: request */
-
- char *first_host; /* if set, this should be the host name that we will
- sent authorization to, no else. Used to make Location:
- following not keep sending user+password... This is
- strdup() data.
- */
- struct curl_ssl_session *session; /* array of 'max_ssl_sessions' size */
- long sessionage; /* number of the most recent session */
- char *tempwrite; /* allocated buffer to keep data in when a write
- callback returns to make the connection paused */
- size_t tempwritesize; /* size of the 'tempwrite' allocated buffer */
- int tempwritetype; /* type of the 'tempwrite' buffer as a bitmask that is
- used with Curl_client_write() */
- char *scratch; /* huge buffer[BUFSIZE*2] when doing upload CRLF replacing */
- bool errorbuf; /* Set to TRUE if the error buffer is already filled in.
- This must be set to FALSE every time _easy_perform() is
- called. */
- int os_errno; /* filled in with errno whenever an error occurs */
-#ifdef HAVE_SIGNAL
- /* storage for the previous bag^H^H^HSIGPIPE signal handler :-) */
- void (*prev_signal)(int sig);
-#endif
- bool allow_port; /* Is set.use_port allowed to take effect or not. This
- is always set TRUE when curl_easy_perform() is called. */
- struct digestdata digest; /* state data for host Digest auth */
- struct digestdata proxydigest; /* state data for proxy Digest auth */
-
-#ifdef USE_SPNEGO
- struct negotiatedata negotiate; /* state data for host Negotiate auth */
- struct negotiatedata proxyneg; /* state data for proxy Negotiate auth */
-#endif
-
- struct auth authhost; /* auth details for host */
- struct auth authproxy; /* auth details for proxy */
-
- bool authproblem; /* TRUE if there's some problem authenticating */
-
- void *resolver; /* resolver state, if it is used in the URL state -
- ares_channel f.e. */
-
-#if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
- ENGINE *engine;
-#endif /* USE_SSLEAY */
- struct timeval expiretime; /* set this with Curl_expire() only */
- struct Curl_tree timenode; /* for the splay stuff */
- struct curl_llist *timeoutlist; /* list of pending timeouts */
-
- /* a place to store the most recently set FTP entrypath */
- char *most_recent_ftp_entrypath;
-
- /* set after initial USER failure, to prevent an authentication loop */
- bool ftp_trying_alternative;
-
- int httpversion; /* the lowest HTTP version*10 reported by any server
- involved in this request */
- bool expect100header; /* TRUE if we added Expect: 100-continue */
-
- bool pipe_broke; /* TRUE if the connection we were pipelined on broke
- and we need to restart from the beginning */
-
-#if !defined(WIN32) && !defined(MSDOS) && !defined(__EMX__) && \
- !defined(__SYMBIAN32__)
-/* do FTP line-end conversions on most platforms */
-#define CURL_DO_LINEEND_CONV
- /* for FTP downloads: track CRLF sequences that span blocks */
- bool prev_block_had_trailing_cr;
- /* for FTP downloads: how many CRLFs did we converted to LFs? */
- curl_off_t crlf_conversions;
-#endif
- char *pathbuffer;/* allocated buffer to store the URL's path part in */
- char *path; /* path to use, points to somewhere within the pathbuffer
- area */
- bool slash_removed; /* set TRUE if the 'path' points to a path where the
- initial URL slash separator has been taken off */
- bool use_range;
- bool rangestringalloc; /* the range string is malloc()'ed */
-
- char *range; /* range, if used. See README for detailed specification on
- this syntax. */
- curl_off_t resume_from; /* continue [ftp] transfer from here */
-
- /* This RTSP state information survives requests and connections */
- long rtsp_next_client_CSeq; /* the session's next client CSeq */
- long rtsp_next_server_CSeq; /* the session's next server CSeq */
- long rtsp_CSeq_recv; /* most recent CSeq received */
-
- /* if true, force SSL connection retry (workaround for certain servers) */
- bool ssl_connect_retry;
- curl_off_t infilesize; /* size of file to upload, -1 means unknown.
- Copied from set.filesize at start of operation */
-};
-
-
-/*
- * This 'DynamicStatic' struct defines dynamic states that actually change
- * values in the 'UserDefined' area, which MUST be taken into consideration
- * if the UserDefined struct is cloned or similar. You can probably just
- * copy these, but each one indicate a special action on other data.
- */
-
-struct DynamicStatic {
- char *url; /* work URL, copied from UserDefined */
- bool url_alloc; /* URL string is malloc()'ed */
- char *referer; /* referer string */
- bool referer_alloc; /* referer sting is malloc()ed */
- struct curl_slist *cookielist; /* list of cookie files set by
- curl_easy_setopt(COOKIEFILE) calls */
- struct curl_slist *resolve; /* set to point to the set.resolve list when
- this should be dealt with in pretransfer */
-};
-
-/*
- * This 'UserDefined' struct must only contain data that is set once to go
- * for many (perhaps) independent connections. Values that are generated or
- * calculated internally for the "session handle" MUST be defined within the
- * 'struct UrlState' instead. The only exceptions MUST note the changes in
- * the 'DynamicStatic' struct.
- * Character pointer fields point to dynamic storage, unless otherwise stated.
- */
-
-struct Curl_multi; /* declared and used only in multi.c */
-
-enum dupstring {
- STRING_CERT, /* client certificate file name */
- STRING_CERT_TYPE, /* format for certificate (default: PEM)*/
- STRING_COOKIE, /* HTTP cookie string to send */
- STRING_COOKIEJAR, /* dump all cookies to this file */
- STRING_CUSTOMREQUEST, /* HTTP/FTP/RTSP request/method to use */
- STRING_DEVICE, /* local network interface/address to use */
- STRING_ENCODING, /* Accept-Encoding string */
- STRING_FTP_ACCOUNT, /* ftp account data */
- STRING_FTP_ALTERNATIVE_TO_USER, /* command to send if USER/PASS fails */
- STRING_FTPPORT, /* port to send with the FTP PORT command */
- STRING_KEY, /* private key file name */
- STRING_KEY_PASSWD, /* plain text private key password */
- STRING_KEY_TYPE, /* format for private key (default: PEM) */
- STRING_KRB_LEVEL, /* krb security level */
- STRING_NETRC_FILE, /* if not NULL, use this instead of trying to find
- $HOME/.netrc */
- STRING_COPYPOSTFIELDS, /* if POST, set the fields' values here */
- STRING_PROXY, /* proxy to use */
- STRING_SET_RANGE, /* range, if used */
- STRING_SET_REFERER, /* custom string for the HTTP referer field */
- STRING_SET_URL, /* what original URL to work on */
- STRING_SSL_CAPATH, /* CA directory name (doesn't work on windows) */
- STRING_SSL_CAFILE, /* certificate file to verify peer against */
- STRING_SSL_CIPHER_LIST, /* list of ciphers to use */
- STRING_SSL_EGDSOCKET, /* path to file containing the EGD daemon socket */
- STRING_SSL_RANDOM_FILE, /* path to file containing "random" data */
- STRING_USERAGENT, /* User-Agent string */
- STRING_SSL_CRLFILE, /* crl file to check certificate */
- STRING_SSL_ISSUERCERT, /* issuer cert file to check certificate */
- STRING_USERNAME, /* <username>, if used */
- STRING_PASSWORD, /* <password>, if used */
- STRING_OPTIONS, /* <options>, if used */
- STRING_PROXYUSERNAME, /* Proxy <username>, if used */
- STRING_PROXYPASSWORD, /* Proxy <password>, if used */
- STRING_NOPROXY, /* List of hosts which should not use the proxy, if
- used */
- STRING_RTSP_SESSION_ID, /* Session ID to use */
- STRING_RTSP_STREAM_URI, /* Stream URI for this request */
- STRING_RTSP_TRANSPORT, /* Transport for this session */
-#ifdef USE_LIBSSH2
- STRING_SSH_PRIVATE_KEY, /* path to the private key file for auth */
- STRING_SSH_PUBLIC_KEY, /* path to the public key file for auth */
- STRING_SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ascii hex */
- STRING_SSH_KNOWNHOSTS, /* file name of knownhosts file */
-#endif
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- STRING_SOCKS5_GSSAPI_SERVICE, /* GSSAPI service name */
-#endif
- STRING_MAIL_FROM,
- STRING_MAIL_AUTH,
-
-#ifdef USE_TLS_SRP
- STRING_TLSAUTH_USERNAME, /* TLS auth <username> */
- STRING_TLSAUTH_PASSWORD, /* TLS auth <password> */
-#endif
-
- STRING_BEARER, /* <bearer>, if used */
-
- /* -- end of strings -- */
- STRING_LAST /* not used, just an end-of-list marker */
-};
-
-struct UserDefined {
- FILE *err; /* the stderr user data goes here */
- void *debugdata; /* the data that will be passed to fdebug */
- char *errorbuffer; /* (Static) store failure messages in here */
- long proxyport; /* If non-zero, use this port number by default. If the
- proxy string features a ":[port]" that one will override
- this. */
- void *out; /* the fetched file goes here */
- void *in; /* the uploaded file is read from here */
- void *writeheader; /* write the header to this if non-NULL */
- void *rtp_out; /* write RTP to this if non-NULL */
- long use_port; /* which port to use (when not using default) */
- unsigned long httpauth; /* kind of HTTP authentication to use (bitmask) */
- unsigned long proxyauth; /* kind of proxy authentication to use (bitmask) */
- long followlocation; /* as in HTTP Location: */
- long maxredirs; /* maximum no. of http(s) redirects to follow, set to -1
- for infinity */
-
- int keep_post; /* keep POSTs as POSTs after a 30x request; each
- bit represents a request, from 301 to 303 */
- bool free_referer; /* set TRUE if 'referer' points to a string we
- allocated */
- void *postfields; /* if POST, set the fields' values here */
- curl_seek_callback seek_func; /* function that seeks the input */
- curl_off_t postfieldsize; /* if POST, this might have a size to use instead
- of strlen(), and then the data *may* be binary
- (contain zero bytes) */
- unsigned short localport; /* local port number to bind to */
- int localportrange; /* number of additional port numbers to test in case the
- 'localport' one can't be bind()ed */
- curl_write_callback fwrite_func; /* function that stores the output */
- curl_write_callback fwrite_header; /* function that stores headers */
- curl_write_callback fwrite_rtp; /* function that stores interleaved RTP */
- curl_read_callback fread_func; /* function that reads the input */
- int is_fread_set; /* boolean, has read callback been set to non-NULL? */
- int is_fwrite_set; /* boolean, has write callback been set to non-NULL? */
- curl_progress_callback fprogress; /* OLD and deprecated progress callback */
- curl_xferinfo_callback fxferinfo; /* progress callback */
- curl_debug_callback fdebug; /* function that write informational data */
- curl_ioctl_callback ioctl_func; /* function for I/O control */
- curl_sockopt_callback fsockopt; /* function for setting socket options */
- void *sockopt_client; /* pointer to pass to the socket options callback */
- curl_opensocket_callback fopensocket; /* function for checking/translating
- the address and opening the
- socket */
- void* opensocket_client;
- curl_closesocket_callback fclosesocket; /* function for closing the
- socket */
- void* closesocket_client;
-
- void *seek_client; /* pointer to pass to the seek callback */
- /* the 3 curl_conv_callback functions below are used on non-ASCII hosts */
- /* function to convert from the network encoding: */
- curl_conv_callback convfromnetwork;
- /* function to convert to the network encoding: */
- curl_conv_callback convtonetwork;
- /* function to convert from UTF-8 encoding: */
- curl_conv_callback convfromutf8;
-
- void *progress_client; /* pointer to pass to the progress callback */
- void *ioctl_client; /* pointer to pass to the ioctl callback */
- long timeout; /* in milliseconds, 0 means no timeout */
- long connecttimeout; /* in milliseconds, 0 means no timeout */
- long accepttimeout; /* in milliseconds, 0 means no timeout */
- long server_response_timeout; /* in milliseconds, 0 means no timeout */
- long tftp_blksize ; /* in bytes, 0 means use default */
- curl_off_t filesize; /* size of file to upload, -1 means unknown */
- long low_speed_limit; /* bytes/second */
- long low_speed_time; /* number of seconds */
- curl_off_t max_send_speed; /* high speed limit in bytes/second for upload */
- curl_off_t max_recv_speed; /* high speed limit in bytes/second for
- download */
- curl_off_t set_resume_from; /* continue [ftp] transfer from here */
- struct curl_slist *headers; /* linked list of extra headers */
- struct curl_slist *proxyheaders; /* linked list of extra CONNECT headers */
- struct curl_httppost *httppost; /* linked list of POST data */
- bool sep_headers; /* handle host and proxy headers separately */
- bool cookiesession; /* new cookie session? */
- bool crlf; /* convert crlf on ftp upload(?) */
- struct curl_slist *quote; /* after connection is established */
- struct curl_slist *postquote; /* after the transfer */
- struct curl_slist *prequote; /* before the transfer, after type */
- struct curl_slist *source_quote; /* 3rd party quote */
- struct curl_slist *source_prequote; /* in 3rd party transfer mode - before
- the transfer on source host */
- struct curl_slist *source_postquote; /* in 3rd party transfer mode - after
- the transfer on source host */
- struct curl_slist *telnet_options; /* linked list of telnet options */
- struct curl_slist *resolve; /* list of names to add/remove from
- DNS cache */
- curl_TimeCond timecondition; /* kind of time/date comparison */
- time_t timevalue; /* what time to compare with */
- Curl_HttpReq httpreq; /* what kind of HTTP request (if any) is this */
- long httpversion; /* when non-zero, a specific HTTP version requested to
- be used in the library's request(s) */
- struct ssl_config_data ssl; /* user defined SSL stuff */
- curl_proxytype proxytype; /* what kind of proxy that is in use */
- long dns_cache_timeout; /* DNS cache timeout */
- long buffer_size; /* size of receive buffer to use */
- void *private_data; /* application-private data */
-
- struct curl_slist *http200aliases; /* linked list of aliases for http200 */
-
- long ipver; /* the CURL_IPRESOLVE_* defines in the public header file
- 0 - whatever, 1 - v2, 2 - v6 */
-
- curl_off_t max_filesize; /* Maximum file size to download */
-
- curl_ftpfile ftp_filemethod; /* how to get to a file when FTP is used */
-
- int ftp_create_missing_dirs; /* 1 - create directories that don't exist
- 2 - the same but also allow MKD to fail once
- */
-
- curl_sshkeycallback ssh_keyfunc; /* key matching callback */
- void *ssh_keyfunc_userp; /* custom pointer to callback */
-
-/* Here follows boolean settings that define how to behave during
- this session. They are STATIC, set by libcurl users or at least initially
- and they don't change during operations. */
-
- bool printhost; /* printing host name in debug info */
- bool get_filetime; /* get the time and get of the remote file */
- bool tunnel_thru_httpproxy; /* use CONNECT through a HTTP proxy */
- bool prefer_ascii; /* ASCII rather than binary */
- bool ftp_append; /* append, not overwrite, on upload */
- bool ftp_list_only; /* switch FTP command for listing directories */
- bool ftp_use_port; /* use the FTP PORT command */
- bool hide_progress; /* don't use the progress meter */
- bool http_fail_on_error; /* fail on HTTP error codes >= 300 */
- bool http_follow_location; /* follow HTTP redirects */
- bool http_transfer_encoding; /* request compressed HTTP transfer-encoding */
- bool http_disable_hostname_check_before_authentication;
- bool include_header; /* include received protocol headers in data output */
- bool http_set_referer; /* is a custom referer used */
- bool http_auto_referer; /* set "correct" referer when following location: */
- bool opt_no_body; /* as set with CURLOPT_NOBODY */
- bool set_port; /* custom port number used */
- bool upload; /* upload request */
- enum CURL_NETRC_OPTION
- use_netrc; /* defined in include/curl.h */
- bool verbose; /* output verbosity */
- bool krb; /* kerberos connection requested */
- bool reuse_forbid; /* forbidden to be reused, close after use */
- bool reuse_fresh; /* do not re-use an existing connection */
- bool ftp_use_epsv; /* if EPSV is to be attempted or not */
- bool ftp_use_eprt; /* if EPRT is to be attempted or not */
- bool ftp_use_pret; /* if PRET is to be used before PASV or not */
-
- curl_usessl use_ssl; /* if AUTH TLS is to be attempted etc, for FTP or
- IMAP or POP3 or others! */
- curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */
- curl_ftpccc ftp_ccc; /* FTP CCC options */
- bool no_signal; /* do not use any signal/alarm handler */
- bool global_dns_cache; /* subject for future removal */
- bool tcp_nodelay; /* whether to enable TCP_NODELAY or not */
- bool ignorecl; /* ignore content length */
- bool ftp_skip_ip; /* skip the IP address the FTP server passes on to
- us */
- bool connect_only; /* make connection, let application use the socket */
- bool ssl_enable_beast; /* especially allow this flaw for interoperability's
- sake*/
- long ssh_auth_types; /* allowed SSH auth types */
- bool http_te_skip; /* pass the raw body data to the user, even when
- transfer-encoded (chunked, compressed) */
- bool http_ce_skip; /* pass the raw body data to the user, even when
- content-encoded (chunked, compressed) */
- long new_file_perms; /* Permissions to use when creating remote files */
- long new_directory_perms; /* Permissions to use when creating remote dirs */
- bool proxy_transfer_mode; /* set transfer mode (;type=<a|i>) when doing FTP
- via an HTTP proxy */
- char *str[STRING_LAST]; /* array of strings, pointing to allocated memory */
- unsigned int scope; /* address scope for IPv6 */
- long allowed_protocols;
- long redir_protocols;
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- long socks5_gssapi_nec; /* flag to support nec socks5 server */
-#endif
- struct curl_slist *mail_rcpt; /* linked list of mail recipients */
- bool sasl_ir; /* Enable/disable SASL initial response */
- /* Common RTSP header options */
- Curl_RtspReq rtspreq; /* RTSP request type */
- long rtspversion; /* like httpversion, for RTSP */
- bool wildcardmatch; /* enable wildcard matching */
- curl_chunk_bgn_callback chunk_bgn; /* called before part of transfer
- starts */
- curl_chunk_end_callback chunk_end; /* called after part transferring
- stopped */
- curl_fnmatch_callback fnmatch; /* callback to decide which file corresponds
- to pattern (e.g. if WILDCARDMATCH is on) */
- void *fnmatch_data;
-
- long gssapi_delegation; /* GSS-API credential delegation, see the
- documentation of CURLOPT_GSSAPI_DELEGATION */
-
- bool tcp_keepalive; /* use TCP keepalives */
- long tcp_keepidle; /* seconds in idle before sending keepalive probe */
- long tcp_keepintvl; /* seconds between TCP keepalive probes */
-
- size_t maxconnects; /* Max idle connections in the connection cache */
-
- bool ssl_enable_npn; /* TLS NPN extension? */
- bool ssl_enable_alpn; /* TLS ALPN extension? */
-
- long expect_100_timeout; /* in milliseconds */
-};
-
-struct Names {
- struct curl_hash *hostcache;
- enum {
- HCACHE_NONE, /* not pointing to anything */
- HCACHE_GLOBAL, /* points to the (shrug) global one */
- HCACHE_MULTI, /* points to a shared one in the multi handle */
- HCACHE_SHARED /* points to a shared one in a shared object */
- } hostcachetype;
-};
-
-/*
- * The 'connectdata' struct MUST have all the connection oriented stuff as we
- * may have several simultaneous connections and connection structs in memory.
- *
- * The 'struct UserDefined' must only contain data that is set once to go for
- * many (perhaps) independent connections. Values that are generated or
- * calculated internally for the "session handle" must be defined within the
- * 'struct UrlState' instead.
- */
-
-struct SessionHandle {
- /* first, two fields for the linked list of these */
- struct SessionHandle *next;
- struct SessionHandle *prev;
-
- struct connectdata *easy_conn; /* the "unit's" connection */
-
- CURLMstate mstate; /* the handle's state */
- CURLcode result; /* previous result */
-
- struct Curl_message msg; /* A single posted message. */
-
- /* Array with the plain socket numbers this handle takes care of, in no
- particular order. Note that all sockets are added to the sockhash, where
- the state etc are also kept. This array is mostly used to detect when a
- socket is to be removed from the hash. See singlesocket(). */
- curl_socket_t sockets[MAX_SOCKSPEREASYHANDLE];
- int numsocks;
-
- struct Names dns;
- struct Curl_multi *multi; /* if non-NULL, points to the multi handle
- struct to which this "belongs" when used by
- the multi interface */
- struct Curl_multi *multi_easy; /* if non-NULL, points to the multi handle
- struct to which this "belongs" when used
- by the easy interface */
- struct Curl_share *share; /* Share, handles global variable mutexing */
- struct SingleRequest req; /* Request-specific data */
- struct UserDefined set; /* values set by the libcurl user */
- struct DynamicStatic change; /* possibly modified userdefined data */
- struct CookieInfo *cookies; /* the cookies, read from files and servers.
- NOTE that the 'cookie' field in the
- UserDefined struct defines if the "engine"
- is to be used or not. */
- struct Progress progress; /* for all the progress meter data */
- struct UrlState state; /* struct for fields used for state info and
- other dynamic purposes */
- struct WildcardData wildcard; /* wildcard download state info */
- struct PureInfo info; /* stats, reports and info data */
- struct curl_tlssessioninfo tsi; /* Information about the TLS session, only
- valid after a client has asked for it */
-#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV)
- iconv_t outbound_cd; /* for translating to the network encoding */
- iconv_t inbound_cd; /* for translating from the network encoding */
- iconv_t utf8_cd; /* for translating to UTF8 */
-#endif /* CURL_DOES_CONVERSIONS && HAVE_ICONV */
- unsigned int magic; /* set to a CURLEASY_MAGIC_NUMBER */
-};
-
-#define LIBCURL_NAME "libcurl"
-
-#endif /* HEADER_CURL_URLDATA_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/version.c b/external/libcurl_android/jni/libcurl/lib/version.c
deleted file mode 100755
index 788f3e9d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/version.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "vtls/vtls.h"
-#include "http2.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
-#ifdef USE_ARES
-# if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
- (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__))
-# define CARES_STATICLIB
-# endif
-# include <ares.h>
-#endif
-
-#ifdef USE_LIBIDN
-#include <stringprep.h>
-#endif
-
-#if defined(HAVE_ICONV) && defined(CURL_DOES_CONVERSIONS)
-#include <iconv.h>
-#endif
-
-#ifdef USE_LIBRTMP
-#include <librtmp/rtmp.h>
-#endif
-
-#ifdef USE_LIBSSH2
-#include <libssh2.h>
-#endif
-
-#ifdef HAVE_LIBSSH2_VERSION
-/* get it run-time if possible */
-#define CURL_LIBSSH2_VERSION libssh2_version(0)
-#else
-/* use build-time if run-time not possible */
-#define CURL_LIBSSH2_VERSION LIBSSH2_VERSION
-#endif
-
-char *curl_version(void)
-{
- static char version[200];
- char *ptr = version;
- size_t len;
- size_t left = sizeof(version);
-
- strcpy(ptr, LIBCURL_NAME "/" LIBCURL_VERSION);
- len = strlen(ptr);
- left -= len;
- ptr += len;
-
- if(left > 1) {
- len = Curl_ssl_version(ptr + 1, left - 1);
-
- if(len > 0) {
- *ptr = ' ';
- left -= ++len;
- ptr += len;
- }
- }
-
-#ifdef HAVE_LIBZ
- len = snprintf(ptr, left, " zlib/%s", zlibVersion());
- left -= len;
- ptr += len;
-#endif
-#ifdef USE_ARES
- /* this function is only present in c-ares, not in the original ares */
- len = snprintf(ptr, left, " c-ares/%s", ares_version(NULL));
- left -= len;
- ptr += len;
-#endif
-#ifdef USE_LIBIDN
- if(stringprep_check_version(LIBIDN_REQUIRED_VERSION)) {
- len = snprintf(ptr, left, " libidn/%s", stringprep_check_version(NULL));
- left -= len;
- ptr += len;
- }
-#endif
-#ifdef USE_WIN32_IDN
- len = snprintf(ptr, left, " WinIDN");
- left -= len;
- ptr += len;
-#endif
-#if defined(HAVE_ICONV) && defined(CURL_DOES_CONVERSIONS)
-#ifdef _LIBICONV_VERSION
- len = snprintf(ptr, left, " iconv/%d.%d",
- _LIBICONV_VERSION >> 8, _LIBICONV_VERSION & 255);
-#else
- /* version unknown */
- len = snprintf(ptr, left, " iconv");
-#endif /* _LIBICONV_VERSION */
- left -= len;
- ptr += len;
-#endif
-#ifdef USE_LIBSSH2
- len = snprintf(ptr, left, " libssh2/%s", CURL_LIBSSH2_VERSION);
- left -= len;
- ptr += len;
-#endif
-#ifdef USE_NGHTTP2
- len = Curl_http2_ver(ptr, left);
- left -= len;
- ptr += len;
-#endif
-#ifdef USE_LIBRTMP
- {
- char suff[2];
- if(RTMP_LIB_VERSION & 0xff) {
- suff[0] = (RTMP_LIB_VERSION & 0xff) + 'a' - 1;
- suff[1] = '\0';
- }
- else
- suff[0] = '\0';
-
- snprintf(ptr, left, " librtmp/%d.%d%s",
- RTMP_LIB_VERSION >> 16, (RTMP_LIB_VERSION >> 8) & 0xff,
- suff);
-/*
- If another lib version is added below this one, this code would
- also have to do:
-
- len = what snprintf() returned
-
- left -= len;
- ptr += len;
-*/
- }
-#endif
-
- return version;
-}
-
-/* data for curl_version_info
-
- Keep the list sorted alphabetically. It is also written so that each
- protocol line has its own #if line to make things easier on the eye.
- */
-
-static const char * const protocols[] = {
-#ifndef CURL_DISABLE_DICT
- "dict",
-#endif
-#ifndef CURL_DISABLE_FILE
- "file",
-#endif
-#ifndef CURL_DISABLE_FTP
- "ftp",
-#endif
-#if defined(USE_SSL) && !defined(CURL_DISABLE_FTP)
- "ftps",
-#endif
-#ifndef CURL_DISABLE_GOPHER
- "gopher",
-#endif
-#ifndef CURL_DISABLE_HTTP
- "http",
-#endif
-#if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP)
- "https",
-#endif
-#ifndef CURL_DISABLE_IMAP
- "imap",
-#endif
-#if defined(USE_SSL) && !defined(CURL_DISABLE_IMAP)
- "imaps",
-#endif
-#ifndef CURL_DISABLE_LDAP
- "ldap",
-#if !defined(CURL_DISABLE_LDAPS) && \
- ((defined(USE_OPENLDAP) && defined(USE_SSL)) || \
- (!defined(USE_OPENLDAP) && defined(HAVE_LDAP_SSL)))
- "ldaps",
-#endif
-#endif
-#ifndef CURL_DISABLE_POP3
- "pop3",
-#endif
-#if defined(USE_SSL) && !defined(CURL_DISABLE_POP3)
- "pop3s",
-#endif
-#ifdef USE_LIBRTMP
- "rtmp",
-#endif
-#ifndef CURL_DISABLE_RTSP
- "rtsp",
-#endif
-#ifdef USE_LIBSSH2
- "scp",
-#endif
-#ifdef USE_LIBSSH2
- "sftp",
-#endif
-#ifndef CURL_DISABLE_SMTP
- "smtp",
-#endif
-#if defined(USE_SSL) && !defined(CURL_DISABLE_SMTP)
- "smtps",
-#endif
-#ifndef CURL_DISABLE_TELNET
- "telnet",
-#endif
-#ifndef CURL_DISABLE_TFTP
- "tftp",
-#endif
-
- NULL
-};
-
-static curl_version_info_data version_info = {
- CURLVERSION_NOW,
- LIBCURL_VERSION,
- LIBCURL_VERSION_NUM,
- OS, /* as found by configure or set by hand at build-time */
- 0 /* features is 0 by default */
-#ifdef ENABLE_IPV6
- | CURL_VERSION_IPV6
-#endif
-#ifdef USE_SSL
- | CURL_VERSION_SSL
-#endif
-#ifdef USE_NTLM
- | CURL_VERSION_NTLM
-#endif
-#if defined(USE_NTLM) && defined(NTLM_WB_ENABLED)
- | CURL_VERSION_NTLM_WB
-#endif
-#ifdef USE_SPNEGO
- | CURL_VERSION_SPNEGO
-#endif
-#ifdef HAVE_GSSAPI
- | CURL_VERSION_GSSAPI
-#endif
-#ifdef USE_WINDOWS_SSPI
- | CURL_VERSION_SSPI
-#endif
-#ifdef HAVE_LIBZ
- | CURL_VERSION_LIBZ
-#endif
-#ifdef DEBUGBUILD
- | CURL_VERSION_DEBUG
-#endif
-#ifdef CURLDEBUG
- | CURL_VERSION_CURLDEBUG
-#endif
-#ifdef CURLRES_ASYNCH
- | CURL_VERSION_ASYNCHDNS
-#endif
-#if (CURL_SIZEOF_CURL_OFF_T > 4) && \
- ( (SIZEOF_OFF_T > 4) || defined(USE_WIN32_LARGE_FILES) )
- | CURL_VERSION_LARGEFILE
-#endif
-#if defined(CURL_DOES_CONVERSIONS)
- | CURL_VERSION_CONV
-#endif
-#if defined(USE_TLS_SRP)
- | CURL_VERSION_TLSAUTH_SRP
-#endif
-#if defined(USE_NGHTTP2)
- | CURL_VERSION_HTTP2
-#endif
- ,
- NULL, /* ssl_version */
- 0, /* ssl_version_num, this is kept at zero */
- NULL, /* zlib_version */
- protocols,
- NULL, /* c-ares version */
- 0, /* c-ares version numerical */
- NULL, /* libidn version */
- 0, /* iconv version */
- NULL, /* ssh lib version */
-};
-
-curl_version_info_data *curl_version_info(CURLversion stamp)
-{
-#ifdef USE_LIBSSH2
- static char ssh_buffer[80];
-#endif
-
-#ifdef USE_SSL
- static char ssl_buffer[80];
- Curl_ssl_version(ssl_buffer, sizeof(ssl_buffer));
- version_info.ssl_version = ssl_buffer;
-#endif
-
-#ifdef HAVE_LIBZ
- version_info.libz_version = zlibVersion();
- /* libz left NULL if non-existing */
-#endif
-#ifdef USE_ARES
- {
- int aresnum;
- version_info.ares = ares_version(&aresnum);
- version_info.ares_num = aresnum;
- }
-#endif
-#ifdef USE_LIBIDN
- /* This returns a version string if we use the given version or later,
- otherwise it returns NULL */
- version_info.libidn = stringprep_check_version(LIBIDN_REQUIRED_VERSION);
- if(version_info.libidn)
- version_info.features |= CURL_VERSION_IDN;
-#elif defined(USE_WIN32_IDN)
- version_info.features |= CURL_VERSION_IDN;
-#endif
-
-#if defined(HAVE_ICONV) && defined(CURL_DOES_CONVERSIONS)
-#ifdef _LIBICONV_VERSION
- version_info.iconv_ver_num = _LIBICONV_VERSION;
-#else
- /* version unknown */
- version_info.iconv_ver_num = -1;
-#endif /* _LIBICONV_VERSION */
-#endif
-
-#ifdef USE_LIBSSH2
- snprintf(ssh_buffer, sizeof(ssh_buffer), "libssh2/%s", LIBSSH2_VERSION);
- version_info.libssh_version = ssh_buffer;
-#endif
-
- (void)stamp; /* avoid compiler warnings, we don't use this */
-
- return &version_info;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-axtls.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-axtls.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-axtls.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-curl_darwinssl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-curl_darwinssl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-curl_darwinssl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-curl_schannel.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-curl_schannel.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-curl_schannel.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-cyassl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-cyassl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-cyassl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-gskit.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-gskit.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-gskit.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-gtls.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-gtls.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-gtls.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-nss.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-nss.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-nss.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-openssl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-openssl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-openssl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-polarssl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-polarssl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-polarssl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-polarssl_threadlock.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-polarssl_threadlock.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-polarssl_threadlock.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-qssl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-qssl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-qssl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-vtls.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-vtls.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurl_la-vtls.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-axtls.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-axtls.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-axtls.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-curl_darwinssl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-curl_darwinssl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-curl_darwinssl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-curl_schannel.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-curl_schannel.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-curl_schannel.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-cyassl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-cyassl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-cyassl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-gskit.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-gskit.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-gskit.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-gtls.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-gtls.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-gtls.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-nss.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-nss.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-nss.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-openssl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-openssl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-openssl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-polarssl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-polarssl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-polarssl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-polarssl_threadlock.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-polarssl_threadlock.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-polarssl_threadlock.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-qssl.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-qssl.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-qssl.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-vtls.Plo b/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-vtls.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/.deps/libcurlu_la-vtls.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/axtls.c b/external/libcurl_android/jni/libcurl/lib/vtls/axtls.c
deleted file mode 100755
index 1b577b15..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/axtls.c
+++ /dev/null
@@ -1,684 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010, DirecTV, Contact: Eric Hu, <ehu@directv.com>.
- * Copyright (C) 2010 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Source file for all axTLS-specific code for the TLS/SSL layer. No code
- * but vtls.c should ever call or use these functions.
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_AXTLS
-#include <axTLS/ssl.h>
-#include "axtls.h"
-
-#include "sendf.h"
-#include "inet_pton.h"
-#include "vtls.h"
-#include "parsedate.h"
-#include "connect.h" /* for the connect timeout */
-#include "select.h"
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-#include "curl_memory.h"
-#include <unistd.h>
-/* The last #include file should be: */
-#include "memdebug.h"
-#include "hostcheck.h"
-
-
-/* Global axTLS init, called from Curl_ssl_init() */
-int Curl_axtls_init(void)
-{
-/* axTLS has no global init. Everything is done through SSL and SSL_CTX
- * structs stored in connectdata structure. Perhaps can move to axtls.h.
- */
- return 1;
-}
-
-int Curl_axtls_cleanup(void)
-{
- /* axTLS has no global cleanup. Perhaps can move this to axtls.h. */
- return 1;
-}
-
-static CURLcode map_error_to_curl(int axtls_err)
-{
- switch (axtls_err) {
- case SSL_ERROR_NOT_SUPPORTED:
- case SSL_ERROR_INVALID_VERSION:
- case -70: /* protocol version alert from server */
- return CURLE_UNSUPPORTED_PROTOCOL;
- break;
- case SSL_ERROR_NO_CIPHER:
- return CURLE_SSL_CIPHER;
- break;
- case SSL_ERROR_BAD_CERTIFICATE: /* this may be bad server cert too */
- case SSL_ERROR_NO_CERT_DEFINED:
- case -42: /* bad certificate alert from server */
- case -43: /* unsupported cert alert from server */
- case -44: /* cert revoked alert from server */
- case -45: /* cert expired alert from server */
- case -46: /* cert unknown alert from server */
- return CURLE_SSL_CERTPROBLEM;
- break;
- case SSL_X509_ERROR(X509_NOT_OK):
- case SSL_X509_ERROR(X509_VFY_ERROR_NO_TRUSTED_CERT):
- case SSL_X509_ERROR(X509_VFY_ERROR_BAD_SIGNATURE):
- case SSL_X509_ERROR(X509_VFY_ERROR_NOT_YET_VALID):
- case SSL_X509_ERROR(X509_VFY_ERROR_EXPIRED):
- case SSL_X509_ERROR(X509_VFY_ERROR_SELF_SIGNED):
- case SSL_X509_ERROR(X509_VFY_ERROR_INVALID_CHAIN):
- case SSL_X509_ERROR(X509_VFY_ERROR_UNSUPPORTED_DIGEST):
- case SSL_X509_ERROR(X509_INVALID_PRIV_KEY):
- return CURLE_PEER_FAILED_VERIFICATION;
- break;
- case -48: /* unknown ca alert from server */
- return CURLE_SSL_CACERT;
- break;
- case -49: /* access denied alert from server */
- return CURLE_REMOTE_ACCESS_DENIED;
- break;
- case SSL_ERROR_CONN_LOST:
- case SSL_ERROR_SOCK_SETUP_FAILURE:
- case SSL_ERROR_INVALID_HANDSHAKE:
- case SSL_ERROR_INVALID_PROT_MSG:
- case SSL_ERROR_INVALID_HMAC:
- case SSL_ERROR_INVALID_SESSION:
- case SSL_ERROR_INVALID_KEY: /* it's too bad this doesn't map better */
- case SSL_ERROR_FINISHED_INVALID:
- case SSL_ERROR_NO_CLIENT_RENOG:
- default:
- return CURLE_SSL_CONNECT_ERROR;
- break;
- }
-}
-
-static Curl_recv axtls_recv;
-static Curl_send axtls_send;
-
-static void free_ssl_structs(struct ssl_connect_data *connssl)
-{
- if(connssl->ssl) {
- ssl_free (connssl->ssl);
- connssl->ssl = NULL;
- }
- if(connssl->ssl_ctx) {
- ssl_ctx_free(connssl->ssl_ctx);
- connssl->ssl_ctx = NULL;
- }
-}
-
-/*
- * For both blocking and non-blocking connects, this function sets up the
- * ssl context and state. This function is called after the TCP connect
- * has completed.
- */
-static CURLcode connect_prep(struct connectdata *conn, int sockindex)
-{
- struct SessionHandle *data = conn->data;
- SSL_CTX *ssl_ctx;
- SSL *ssl = NULL;
- int cert_types[] = {SSL_OBJ_X509_CERT, SSL_OBJ_PKCS12, 0};
- int key_types[] = {SSL_OBJ_RSA_KEY, SSL_OBJ_PKCS8, SSL_OBJ_PKCS12, 0};
- int i, ssl_fcn_return;
- const uint8_t *ssl_sessionid;
- size_t ssl_idsize;
-
- /* Assuming users will not compile in custom key/cert to axTLS.
- * Also, even for blocking connects, use axTLS non-blocking feature.
- */
- uint32_t client_option = SSL_NO_DEFAULT_KEY |
- SSL_SERVER_VERIFY_LATER |
- SSL_CONNECT_IN_PARTS;
-
- if(conn->ssl[sockindex].state == ssl_connection_complete)
- /* to make us tolerant against being called more than once for the
- same connection */
- return CURLE_OK;
-
- /* axTLS only supports TLSv1 */
- /* check to see if we've been told to use an explicit SSL/TLS version */
- switch(data->set.ssl.version) {
- case CURL_SSLVERSION_DEFAULT:
- case CURL_SSLVERSION_TLSv1:
- break;
- default:
- failf(data, "axTLS only supports TLS 1.0 and 1.1, "
- "and it cannot be specified which one to use");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
-#ifdef AXTLSDEBUG
- client_option |= SSL_DISPLAY_STATES | SSL_DISPLAY_RSA | SSL_DISPLAY_CERTS;
-#endif /* AXTLSDEBUG */
-
- /* Allocate an SSL_CTX struct */
- ssl_ctx = ssl_ctx_new(client_option, SSL_DEFAULT_CLNT_SESS);
- if(ssl_ctx == NULL) {
- failf(data, "unable to create client SSL context");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- conn->ssl[sockindex].ssl_ctx = ssl_ctx;
- conn->ssl[sockindex].ssl = NULL;
-
- /* Load the trusted CA cert bundle file */
- if(data->set.ssl.CAfile) {
- if(ssl_obj_load(ssl_ctx, SSL_OBJ_X509_CACERT, data->set.ssl.CAfile, NULL)
- != SSL_OK) {
- infof(data, "error reading ca cert file %s \n",
- data->set.ssl.CAfile);
- if(data->set.ssl.verifypeer) {
- return CURLE_SSL_CACERT_BADFILE;
- }
- }
- else
- infof(data, "found certificates in %s\n", data->set.ssl.CAfile);
- }
-
- /* gtls.c tasks we're skipping for now:
- * 1) certificate revocation list checking
- * 2) dns name assignment to host
- * 3) set protocol priority. axTLS is TLSv1 only, so can probably ignore
- * 4) set certificate priority. axTLS ignores type and sends certs in
- * order added. can probably ignore this.
- */
-
- /* Load client certificate */
- if(data->set.str[STRING_CERT]) {
- i=0;
- /* Instead of trying to analyze cert type here, let axTLS try them all. */
- while(cert_types[i] != 0) {
- ssl_fcn_return = ssl_obj_load(ssl_ctx, cert_types[i],
- data->set.str[STRING_CERT], NULL);
- if(ssl_fcn_return == SSL_OK) {
- infof(data, "successfully read cert file %s \n",
- data->set.str[STRING_CERT]);
- break;
- }
- i++;
- }
- /* Tried all cert types, none worked. */
- if(cert_types[i] == 0) {
- failf(data, "%s is not x509 or pkcs12 format",
- data->set.str[STRING_CERT]);
- return CURLE_SSL_CERTPROBLEM;
- }
- }
-
- /* Load client key.
- If a pkcs12 file successfully loaded a cert, then there's nothing to do
- because the key has already been loaded. */
- if(data->set.str[STRING_KEY] && cert_types[i] != SSL_OBJ_PKCS12) {
- i=0;
- /* Instead of trying to analyze key type here, let axTLS try them all. */
- while(key_types[i] != 0) {
- ssl_fcn_return = ssl_obj_load(ssl_ctx, key_types[i],
- data->set.str[STRING_KEY], NULL);
- if(ssl_fcn_return == SSL_OK) {
- infof(data, "successfully read key file %s \n",
- data->set.str[STRING_KEY]);
- break;
- }
- i++;
- }
- /* Tried all key types, none worked. */
- if(key_types[i] == 0) {
- failf(data, "Failure: %s is not a supported key file",
- data->set.str[STRING_KEY]);
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-
- /* gtls.c does more here that is being left out for now
- * 1) set session credentials. can probably ignore since axtls puts this
- * info in the ssl_ctx struct
- * 2) setting up callbacks. these seem gnutls specific
- */
-
- /* In axTLS, handshaking happens inside ssl_client_new. */
- if(!Curl_ssl_getsessionid(conn, (void **) &ssl_sessionid, &ssl_idsize)) {
- /* we got a session id, use it! */
- infof (data, "SSL re-using session ID\n");
- ssl = ssl_client_new(ssl_ctx, conn->sock[sockindex],
- ssl_sessionid, (uint8_t)ssl_idsize);
- }
- else
- ssl = ssl_client_new(ssl_ctx, conn->sock[sockindex], NULL, 0);
-
- conn->ssl[sockindex].ssl = ssl;
- return CURLE_OK;
-}
-
-/*
- * For both blocking and non-blocking connects, this function finalizes the
- * SSL connection.
- */
-static CURLcode connect_finish(struct connectdata *conn, int sockindex)
-{
- struct SessionHandle *data = conn->data;
- SSL *ssl = conn->ssl[sockindex].ssl;
- const uint8_t *ssl_sessionid;
- size_t ssl_idsize;
- const char *peer_CN;
- uint32_t dns_altname_index;
- const char *dns_altname;
- int8_t found_subject_alt_names = 0;
- int8_t found_subject_alt_name_matching_conn = 0;
-
- /* Here, gtls.c gets the peer certificates and fails out depending on
- * settings in "data." axTLS api doesn't have get cert chain fcn, so omit?
- */
-
- /* Verify server's certificate */
- if(data->set.ssl.verifypeer) {
- if(ssl_verify_cert(ssl) != SSL_OK) {
- Curl_axtls_close(conn, sockindex);
- failf(data, "server cert verify failed");
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- }
- else
- infof(data, "\t server certificate verification SKIPPED\n");
-
- /* Here, gtls.c does issuer verification. axTLS has no straightforward
- * equivalent, so omitting for now.*/
-
- /* Here, gtls.c does the following
- * 1) x509 hostname checking per RFC2818. axTLS doesn't support this, but
- * it seems useful. This is now implemented, by Oscar Koeroo
- * 2) checks cert validity based on time. axTLS does this in ssl_verify_cert
- * 3) displays a bunch of cert information. axTLS doesn't support most of
- * this, but a couple fields are available.
- */
-
- /* There is no (DNS) Altnames count in the version 1.4.8 API. There is a
- risk of an inifite loop */
- for(dns_altname_index = 0; ; dns_altname_index++) {
- dns_altname = ssl_get_cert_subject_alt_dnsname(ssl, dns_altname_index);
- if(dns_altname == NULL) {
- break;
- }
- found_subject_alt_names = 1;
-
- infof(data, "\tComparing subject alt name DNS with hostname: %s <-> %s\n",
- dns_altname, conn->host.name);
- if(Curl_cert_hostcheck(dns_altname, conn->host.name)) {
- found_subject_alt_name_matching_conn = 1;
- break;
- }
- }
-
- /* RFC2818 checks */
- if(found_subject_alt_names && !found_subject_alt_name_matching_conn) {
- if(data->set.ssl.verifyhost) {
- /* Break connection ! */
- Curl_axtls_close(conn, sockindex);
- failf(data, "\tsubjectAltName(s) do not match %s\n",
- conn->host.dispname);
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- else
- infof(data, "\tsubjectAltName(s) do not match %s\n",
- conn->host.dispname);
- }
- else if(found_subject_alt_names == 0) {
- /* Per RFC2818, when no Subject Alt Names were available, examine the peer
- CN as a legacy fallback */
- peer_CN = ssl_get_cert_dn(ssl, SSL_X509_CERT_COMMON_NAME);
- if(peer_CN == NULL) {
- if(data->set.ssl.verifyhost) {
- Curl_axtls_close(conn, sockindex);
- failf(data, "unable to obtain common name from peer certificate");
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- else
- infof(data, "unable to obtain common name from peer certificate");
- }
- else {
- if(!Curl_cert_hostcheck((const char *)peer_CN, conn->host.name)) {
- if(data->set.ssl.verifyhost) {
- /* Break connection ! */
- Curl_axtls_close(conn, sockindex);
- failf(data, "\tcommon name \"%s\" does not match \"%s\"\n",
- peer_CN, conn->host.dispname);
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- else
- infof(data, "\tcommon name \"%s\" does not match \"%s\"\n",
- peer_CN, conn->host.dispname);
- }
- }
- }
-
- /* General housekeeping */
- conn->ssl[sockindex].state = ssl_connection_complete;
- conn->recv[sockindex] = axtls_recv;
- conn->send[sockindex] = axtls_send;
-
- /* Put our freshly minted SSL session in cache */
- ssl_idsize = ssl_get_session_id_size(ssl);
- ssl_sessionid = ssl_get_session_id(ssl);
- if(Curl_ssl_addsessionid(conn, (void *) ssl_sessionid, ssl_idsize)
- != CURLE_OK)
- infof (data, "failed to add session to cache\n");
-
- return CURLE_OK;
-}
-
-/*
- * Use axTLS's non-blocking connection feature to open an SSL connection.
- * This is called after a TCP connection is already established.
- */
-CURLcode Curl_axtls_connect_nonblocking(
- struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- CURLcode conn_step;
- int ssl_fcn_return;
- int i;
-
- *done = FALSE;
- /* connectdata is calloc'd and connecting_state is only changed in this
- function, so this is safe, as the state is effectively initialized. */
- if(conn->ssl[sockindex].connecting_state == ssl_connect_1) {
- conn_step = connect_prep(conn, sockindex);
- if(conn_step != CURLE_OK) {
- Curl_axtls_close(conn, sockindex);
- return conn_step;
- }
- conn->ssl[sockindex].connecting_state = ssl_connect_2;
- }
-
- if(conn->ssl[sockindex].connecting_state == ssl_connect_2) {
- /* Check to make sure handshake was ok. */
- if(ssl_handshake_status(conn->ssl[sockindex].ssl) != SSL_OK) {
- /* Loop to perform more work in between sleeps. This is work around the
- fact that axtls does not expose any knowledge about when work needs
- to be performed. This can save ~25% of time on SSL handshakes. */
- for(i=0; i<5; i++) {
- ssl_fcn_return = ssl_read(conn->ssl[sockindex].ssl, NULL);
- if(ssl_fcn_return < 0) {
- Curl_axtls_close(conn, sockindex);
- ssl_display_error(ssl_fcn_return); /* goes to stdout. */
- return map_error_to_curl(ssl_fcn_return);
- }
- return CURLE_OK;
- }
- }
- infof (conn->data, "handshake completed successfully\n");
- conn->ssl[sockindex].connecting_state = ssl_connect_3;
- }
-
- if(conn->ssl[sockindex].connecting_state == ssl_connect_3) {
- conn_step = connect_finish(conn, sockindex);
- if(conn_step != CURLE_OK) {
- Curl_axtls_close(conn, sockindex);
- return conn_step;
- }
-
- /* Reset connect state */
- conn->ssl[sockindex].connecting_state = ssl_connect_1;
-
- *done = TRUE;
- return CURLE_OK;
- }
-
- /* Unrecognized state. Things are very bad. */
- conn->ssl[sockindex].state = ssl_connection_none;
- conn->ssl[sockindex].connecting_state = ssl_connect_1;
- /* Return value perhaps not strictly correct, but distinguishes the issue.*/
- return CURLE_BAD_FUNCTION_ARGUMENT;
-}
-
-
-/*
- * This function is called after the TCP connect has completed. Setup the TLS
- * layer and do all necessary magic for a blocking connect.
- */
-CURLcode
-Curl_axtls_connect(struct connectdata *conn,
- int sockindex)
-
-{
- CURLcode conn_step = connect_prep(conn, sockindex);
- int ssl_fcn_return;
- SSL *ssl = conn->ssl[sockindex].ssl;
-
- if(conn_step != CURLE_OK) {
- Curl_axtls_close(conn, sockindex);
- return conn_step;
- }
-
- /* Check to make sure handshake was ok. */
- while(ssl_handshake_status(ssl) != SSL_OK) {
- ssl_fcn_return = ssl_read(ssl, NULL);
- if(ssl_fcn_return < 0) {
- Curl_axtls_close(conn, sockindex);
- ssl_display_error(ssl_fcn_return); /* goes to stdout. */
- return map_error_to_curl(ssl_fcn_return);
- }
- usleep(10000);
- /* TODO: check for timeout as this could hang indefinitely otherwise */
- }
- infof (conn->data, "handshake completed successfully\n");
-
- conn_step = connect_finish(conn, sockindex);
- if(conn_step != CURLE_OK) {
- Curl_axtls_close(conn, sockindex);
- return conn_step;
- }
-
- return CURLE_OK;
-}
-
-/* return number of sent (non-SSL) bytes */
-static ssize_t axtls_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *err)
-{
- /* ssl_write() returns 'int' while write() and send() returns 'size_t' */
- int rc = ssl_write(conn->ssl[sockindex].ssl, mem, (int)len);
-
- infof(conn->data, " axtls_send\n");
-
- if(rc < 0 ) {
- *err = map_error_to_curl(rc);
- rc = -1; /* generic error code for send failure */
- }
-
- *err = CURLE_OK;
- return rc;
-}
-
-void Curl_axtls_close_all(struct SessionHandle *data)
-{
- (void)data;
- infof(data, " Curl_axtls_close_all\n");
-}
-
-void Curl_axtls_close(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- infof(conn->data, " Curl_axtls_close\n");
-
- /* line from openssl.c: (void)SSL_shutdown(connssl->ssl);
- axTLS compat layer does nothing for SSL_shutdown */
-
- /* The following line is from openssl.c. There seems to be no axTLS
- equivalent. ssl_free and ssl_ctx_free close things.
- SSL_set_connect_state(connssl->handle); */
-
- free_ssl_structs(connssl);
-}
-
-/*
- * This function is called to shut down the SSL layer but keep the
- * socket open (CCC - Clear Command Channel)
- */
-int Curl_axtls_shutdown(struct connectdata *conn, int sockindex)
-{
- /* Outline taken from openssl.c since functions are in axTLS compat layer.
- axTLS's error set is much smaller, so a lot of error-handling was removed.
- */
- int retval = 0;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct SessionHandle *data = conn->data;
- uint8_t *buf;
- ssize_t nread;
-
- infof(conn->data, " Curl_axtls_shutdown\n");
-
- /* This has only been tested on the proftpd server, and the mod_tls code
- sends a close notify alert without waiting for a close notify alert in
- response. Thus we wait for a close notify alert from the server, but
- we do not send one. Let's hope other servers do the same... */
-
- /* axTLS compat layer does nothing for SSL_shutdown, so we do nothing too
- if(data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE)
- (void)SSL_shutdown(connssl->ssl);
- */
-
- if(connssl->ssl) {
- int what = Curl_socket_ready(conn->sock[sockindex],
- CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
- if(what > 0) {
- /* Something to read, let's do it and hope that it is the close
- notify alert from the server. buf is managed internally by
- axTLS and will be released upon calling ssl_free via
- free_ssl_structs. */
- nread = (ssize_t)ssl_read(connssl->ssl, &buf);
-
- if(nread < SSL_OK) {
- failf(data, "close notify alert not received during shutdown");
- retval = -1;
- }
- }
- else if(0 == what) {
- /* timeout */
- failf(data, "SSL shutdown timeout");
- }
- else {
- /* anything that gets here is fatally bad */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- retval = -1;
- }
-
- free_ssl_structs(connssl);
- }
- return retval;
-}
-
-static ssize_t axtls_recv(struct connectdata *conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- CURLcode *err)
-{
- struct ssl_connect_data *connssl = &conn->ssl[num];
- ssize_t ret = 0;
- uint8_t *read_buf;
-
- infof(conn->data, " axtls_recv\n");
-
- *err = CURLE_OK;
- if(connssl) {
- ret = ssl_read(connssl->ssl, &read_buf);
- if(ret > SSL_OK) {
- /* ssl_read returns SSL_OK if there is more data to read, so if it is
- larger, then all data has been read already. */
- memcpy(buf, read_buf,
- (size_t)ret > buffersize ? buffersize : (size_t)ret);
- }
- else if(ret == SSL_OK) {
- /* more data to be read, signal caller to call again */
- *err = CURLE_AGAIN;
- ret = -1;
- }
- else if(ret == -3) {
- /* With patched axTLS, SSL_CLOSE_NOTIFY=-3. Hard-coding until axTLS
- team approves proposed fix. */
- Curl_axtls_close(conn, num);
- }
- else {
- failf(conn->data, "axTLS recv error (%d)", ret);
- *err = map_error_to_curl((int) ret);
- ret = -1;
- }
- }
-
- return ret;
-}
-
-/*
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-int Curl_axtls_check_cxn(struct connectdata *conn)
-{
- /* openssl.c line: rc = SSL_peek(conn->ssl[FIRSTSOCKET].ssl, (void*)&buf, 1);
- axTLS compat layer always returns the last argument, so connection is
- always alive? */
-
- infof(conn->data, " Curl_axtls_check_cxn\n");
- return 1; /* connection still in place */
-}
-
-void Curl_axtls_session_free(void *ptr)
-{
- (void)ptr;
- /* free the ID */
- /* both openssl.c and gtls.c do something here, but axTLS's OpenSSL
- compatibility layer does nothing, so we do nothing too. */
-}
-
-size_t Curl_axtls_version(char *buffer, size_t size)
-{
- return snprintf(buffer, size, "axTLS/%s", ssl_version());
-}
-
-int Curl_axtls_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length)
-{
- static bool ssl_seeded = FALSE;
- (void)data;
- if(!ssl_seeded) {
- ssl_seeded = TRUE;
- /* Initialize the seed if not already done. This call is not exactly thread
- * safe (and neither is the ssl_seeded check), but the worst effect of a
- * race condition is that some global resources will leak. */
- RNG_initialize();
- }
- get_random(length, entropy);
- return 0;
-}
-
-#endif /* USE_AXTLS */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/axtls.h b/external/libcurl_android/jni/libcurl/lib/vtls/axtls.h
deleted file mode 100755
index 0459cf22..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/axtls.h
+++ /dev/null
@@ -1,72 +0,0 @@
-#ifndef HEADER_CURL_AXTLS_H
-#define HEADER_CURL_AXTLS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010, DirecTV
- * contact: Eric Hu <ehu@directv.com>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#ifdef USE_AXTLS
-#include "curl/curl.h"
-#include "urldata.h"
-
-int Curl_axtls_init(void);
-int Curl_axtls_cleanup(void);
-CURLcode Curl_axtls_connect(struct connectdata *conn, int sockindex);
-CURLcode Curl_axtls_connect_nonblocking(
- struct connectdata *conn,
- int sockindex,
- bool *done);
-
-/* tell axTLS to close down all open information regarding connections (and
- thus session ID caching etc) */
-void Curl_axtls_close_all(struct SessionHandle *data);
-
- /* close a SSL connection */
-void Curl_axtls_close(struct connectdata *conn, int sockindex);
-
-void Curl_axtls_session_free(void *ptr);
-size_t Curl_axtls_version(char *buffer, size_t size);
-int Curl_axtls_shutdown(struct connectdata *conn, int sockindex);
-int Curl_axtls_check_cxn(struct connectdata *conn);
-int Curl_axtls_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length);
-
-/* API setup for axTLS */
-#define curlssl_init Curl_axtls_init
-#define curlssl_cleanup Curl_axtls_cleanup
-#define curlssl_connect Curl_axtls_connect
-#define curlssl_connect_nonblocking Curl_axtls_connect_nonblocking
-#define curlssl_session_free(x) Curl_axtls_session_free(x)
-#define curlssl_close_all Curl_axtls_close_all
-#define curlssl_close Curl_axtls_close
-#define curlssl_shutdown(x,y) Curl_axtls_shutdown(x,y)
-#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_NOT_BUILT_IN)
-#define curlssl_set_engine_default(x) (x=x, CURLE_NOT_BUILT_IN)
-#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_version Curl_axtls_version
-#define curlssl_check_cxn(x) Curl_axtls_check_cxn(x)
-#define curlssl_data_pending(x,y) (x=x, y=y, 0)
-#define curlssl_random(x,y,z) Curl_axtls_random(x,y,z)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_AXTLS
-#endif /* USE_AXTLS */
-#endif /* HEADER_CURL_AXTLS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/curl_darwinssl.c b/external/libcurl_android/jni/libcurl/lib/vtls/curl_darwinssl.c
deleted file mode 100755
index f229c6fe..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/curl_darwinssl.c
+++ /dev/null
@@ -1,2485 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>.
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Source file for all iOS and Mac OS X SecureTransport-specific code for the
- * TLS/SSL layer. No code but vtls.c should ever call or use these functions.
- */
-
-#include "curl_setup.h"
-
-#include "urldata.h" /* for the SessionHandle definition */
-#include "curl_base64.h"
-#include "strtok.h"
-
-#ifdef USE_DARWINSSL
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include <Security/Security.h>
-#include <Security/SecureTransport.h>
-#include <CoreFoundation/CoreFoundation.h>
-#include <CommonCrypto/CommonDigest.h>
-
-/* The Security framework has changed greatly between iOS and different OS X
- versions, and we will try to support as many of them as we can (back to
- Leopard and iOS 5) by using macros and weak-linking.
-
- IMPORTANT: If TLS 1.1 and 1.2 support are important for you on OS X, then
- you must build this project against the 10.8 SDK or later. */
-#if (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))
-
-#if MAC_OS_X_VERSION_MAX_ALLOWED < 1050
-#error "The darwinssl back-end requires Leopard or later."
-#endif /* MAC_OS_X_VERSION_MAX_ALLOWED < 1050 */
-
-#define CURL_BUILD_IOS 0
-#define CURL_BUILD_IOS_7 0
-#define CURL_BUILD_MAC 1
-/* This is the maximum API level we are allowed to use when building: */
-#define CURL_BUILD_MAC_10_5 MAC_OS_X_VERSION_MAX_ALLOWED >= 1050
-#define CURL_BUILD_MAC_10_6 MAC_OS_X_VERSION_MAX_ALLOWED >= 1060
-#define CURL_BUILD_MAC_10_7 MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
-#define CURL_BUILD_MAC_10_8 MAC_OS_X_VERSION_MAX_ALLOWED >= 1080
-#define CURL_BUILD_MAC_10_9 MAC_OS_X_VERSION_MAX_ALLOWED >= 1090
-/* These macros mean "the following code is present to allow runtime backward
- compatibility with at least this cat or earlier":
- (You set this at build-time by setting the MACOSX_DEPLOYMENT_TARGET
- environmental variable.) */
-#define CURL_SUPPORT_MAC_10_5 MAC_OS_X_VERSION_MIN_REQUIRED <= 1050
-#define CURL_SUPPORT_MAC_10_6 MAC_OS_X_VERSION_MIN_REQUIRED <= 1060
-#define CURL_SUPPORT_MAC_10_7 MAC_OS_X_VERSION_MIN_REQUIRED <= 1070
-#define CURL_SUPPORT_MAC_10_8 MAC_OS_X_VERSION_MIN_REQUIRED <= 1080
-#define CURL_SUPPORT_MAC_10_9 MAC_OS_X_VERSION_MIN_REQUIRED <= 1090
-
-#elif TARGET_OS_EMBEDDED || TARGET_OS_IPHONE
-#define CURL_BUILD_IOS 1
-#define CURL_BUILD_IOS_7 __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
-#define CURL_BUILD_MAC 0
-#define CURL_BUILD_MAC_10_5 0
-#define CURL_BUILD_MAC_10_6 0
-#define CURL_BUILD_MAC_10_7 0
-#define CURL_BUILD_MAC_10_8 0
-#define CURL_SUPPORT_MAC_10_5 0
-#define CURL_SUPPORT_MAC_10_6 0
-#define CURL_SUPPORT_MAC_10_7 0
-#define CURL_SUPPORT_MAC_10_8 0
-
-#else
-#error "The darwinssl back-end requires iOS or OS X."
-#endif /* (TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE)) */
-
-#if CURL_BUILD_MAC
-#include <sys/sysctl.h>
-#endif /* CURL_BUILD_MAC */
-
-#include "urldata.h"
-#include "sendf.h"
-#include "inet_pton.h"
-#include "connect.h"
-#include "select.h"
-#include "vtls.h"
-#include "curl_darwinssl.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* From MacTypes.h (which we can't include because it isn't present in iOS: */
-#define ioErr -36
-#define paramErr -50
-
-/* The following two functions were ripped from Apple sample code,
- * with some modifications: */
-static OSStatus SocketRead(SSLConnectionRef connection,
- void *data, /* owned by
- * caller, data
- * RETURNED */
- size_t *dataLength) /* IN/OUT */
-{
- size_t bytesToGo = *dataLength;
- size_t initLen = bytesToGo;
- UInt8 *currData = (UInt8 *)data;
- /*int sock = *(int *)connection;*/
- struct ssl_connect_data *connssl = (struct ssl_connect_data *)connection;
- int sock = connssl->ssl_sockfd;
- OSStatus rtn = noErr;
- size_t bytesRead;
- ssize_t rrtn;
- int theErr;
-
- *dataLength = 0;
-
- for(;;) {
- bytesRead = 0;
- rrtn = read(sock, currData, bytesToGo);
- if(rrtn <= 0) {
- /* this is guesswork... */
- theErr = errno;
- if(rrtn == 0) { /* EOF = server hung up */
- /* the framework will turn this into errSSLClosedNoNotify */
- rtn = errSSLClosedGraceful;
- }
- else /* do the switch */
- switch(theErr) {
- case ENOENT:
- /* connection closed */
- rtn = errSSLClosedGraceful;
- break;
- case ECONNRESET:
- rtn = errSSLClosedAbort;
- break;
- case EAGAIN:
- rtn = errSSLWouldBlock;
- connssl->ssl_direction = false;
- break;
- default:
- rtn = ioErr;
- break;
- }
- break;
- }
- else {
- bytesRead = rrtn;
- }
- bytesToGo -= bytesRead;
- currData += bytesRead;
-
- if(bytesToGo == 0) {
- /* filled buffer with incoming data, done */
- break;
- }
- }
- *dataLength = initLen - bytesToGo;
-
- return rtn;
-}
-
-static OSStatus SocketWrite(SSLConnectionRef connection,
- const void *data,
- size_t *dataLength) /* IN/OUT */
-{
- size_t bytesSent = 0;
- /*int sock = *(int *)connection;*/
- struct ssl_connect_data *connssl = (struct ssl_connect_data *)connection;
- int sock = connssl->ssl_sockfd;
- ssize_t length;
- size_t dataLen = *dataLength;
- const UInt8 *dataPtr = (UInt8 *)data;
- OSStatus ortn;
- int theErr;
-
- *dataLength = 0;
-
- do {
- length = write(sock,
- (char*)dataPtr + bytesSent,
- dataLen - bytesSent);
- } while((length > 0) &&
- ( (bytesSent += length) < dataLen) );
-
- if(length <= 0) {
- theErr = errno;
- if(theErr == EAGAIN) {
- ortn = errSSLWouldBlock;
- connssl->ssl_direction = true;
- }
- else {
- ortn = ioErr;
- }
- }
- else {
- ortn = noErr;
- }
- *dataLength = bytesSent;
- return ortn;
-}
-
-CF_INLINE const char *SSLCipherNameForNumber(SSLCipherSuite cipher) {
- switch (cipher) {
- /* SSL version 3.0 */
- case SSL_RSA_WITH_NULL_MD5:
- return "SSL_RSA_WITH_NULL_MD5";
- break;
- case SSL_RSA_WITH_NULL_SHA:
- return "SSL_RSA_WITH_NULL_SHA";
- break;
- case SSL_RSA_EXPORT_WITH_RC4_40_MD5:
- return "SSL_RSA_EXPORT_WITH_RC4_40_MD5";
- break;
- case SSL_RSA_WITH_RC4_128_MD5:
- return "SSL_RSA_WITH_RC4_128_MD5";
- break;
- case SSL_RSA_WITH_RC4_128_SHA:
- return "SSL_RSA_WITH_RC4_128_SHA";
- break;
- case SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5:
- return "SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5";
- break;
- case SSL_RSA_WITH_IDEA_CBC_SHA:
- return "SSL_RSA_WITH_IDEA_CBC_SHA";
- break;
- case SSL_RSA_EXPORT_WITH_DES40_CBC_SHA:
- return "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA";
- break;
- case SSL_RSA_WITH_DES_CBC_SHA:
- return "SSL_RSA_WITH_DES_CBC_SHA";
- break;
- case SSL_RSA_WITH_3DES_EDE_CBC_SHA:
- return "SSL_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA:
- return "SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA";
- break;
- case SSL_DH_DSS_WITH_DES_CBC_SHA:
- return "SSL_DH_DSS_WITH_DES_CBC_SHA";
- break;
- case SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA:
- return "SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA";
- break;
- case SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA:
- return "SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA";
- break;
- case SSL_DH_RSA_WITH_DES_CBC_SHA:
- return "SSL_DH_RSA_WITH_DES_CBC_SHA";
- break;
- case SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA:
- return "SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA:
- return "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA";
- break;
- case SSL_DHE_DSS_WITH_DES_CBC_SHA:
- return "SSL_DHE_DSS_WITH_DES_CBC_SHA";
- break;
- case SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA:
- return "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA";
- break;
- case SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA:
- return "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA";
- break;
- case SSL_DHE_RSA_WITH_DES_CBC_SHA:
- return "SSL_DHE_RSA_WITH_DES_CBC_SHA";
- break;
- case SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
- return "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case SSL_DH_anon_EXPORT_WITH_RC4_40_MD5:
- return "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5";
- break;
- case SSL_DH_anon_WITH_RC4_128_MD5:
- return "SSL_DH_anon_WITH_RC4_128_MD5";
- break;
- case SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA:
- return "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA";
- break;
- case SSL_DH_anon_WITH_DES_CBC_SHA:
- return "SSL_DH_anon_WITH_DES_CBC_SHA";
- break;
- case SSL_DH_anon_WITH_3DES_EDE_CBC_SHA:
- return "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA";
- break;
- case SSL_FORTEZZA_DMS_WITH_NULL_SHA:
- return "SSL_FORTEZZA_DMS_WITH_NULL_SHA";
- break;
- case SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA:
- return "SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA";
- break;
- /* TLS 1.0 with AES (RFC 3268)
- (Apparently these are used in SSLv3 implementations as well.) */
- case TLS_RSA_WITH_AES_128_CBC_SHA:
- return "TLS_RSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DH_DSS_WITH_AES_128_CBC_SHA:
- return "TLS_DH_DSS_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DH_RSA_WITH_AES_128_CBC_SHA:
- return "TLS_DH_RSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DHE_DSS_WITH_AES_128_CBC_SHA:
- return "TLS_DHE_DSS_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
- return "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DH_anon_WITH_AES_128_CBC_SHA:
- return "TLS_DH_anon_WITH_AES_128_CBC_SHA";
- break;
- case TLS_RSA_WITH_AES_256_CBC_SHA:
- return "TLS_RSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DH_DSS_WITH_AES_256_CBC_SHA:
- return "TLS_DH_DSS_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DH_RSA_WITH_AES_256_CBC_SHA:
- return "TLS_DH_RSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DHE_DSS_WITH_AES_256_CBC_SHA:
- return "TLS_DHE_DSS_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
- return "TLS_DHE_RSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DH_anon_WITH_AES_256_CBC_SHA:
- return "TLS_DH_anon_WITH_AES_256_CBC_SHA";
- break;
- /* SSL version 2.0 */
- case SSL_RSA_WITH_RC2_CBC_MD5:
- return "SSL_RSA_WITH_RC2_CBC_MD5";
- break;
- case SSL_RSA_WITH_IDEA_CBC_MD5:
- return "SSL_RSA_WITH_IDEA_CBC_MD5";
- break;
- case SSL_RSA_WITH_DES_CBC_MD5:
- return "SSL_RSA_WITH_DES_CBC_MD5";
- break;
- case SSL_RSA_WITH_3DES_EDE_CBC_MD5:
- return "SSL_RSA_WITH_3DES_EDE_CBC_MD5";
- break;
- }
- return "SSL_NULL_WITH_NULL_NULL";
-}
-
-CF_INLINE const char *TLSCipherNameForNumber(SSLCipherSuite cipher) {
- switch(cipher) {
- /* TLS 1.0 with AES (RFC 3268) */
- case TLS_RSA_WITH_AES_128_CBC_SHA:
- return "TLS_RSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DH_DSS_WITH_AES_128_CBC_SHA:
- return "TLS_DH_DSS_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DH_RSA_WITH_AES_128_CBC_SHA:
- return "TLS_DH_RSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DHE_DSS_WITH_AES_128_CBC_SHA:
- return "TLS_DHE_DSS_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DHE_RSA_WITH_AES_128_CBC_SHA:
- return "TLS_DHE_RSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DH_anon_WITH_AES_128_CBC_SHA:
- return "TLS_DH_anon_WITH_AES_128_CBC_SHA";
- break;
- case TLS_RSA_WITH_AES_256_CBC_SHA:
- return "TLS_RSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DH_DSS_WITH_AES_256_CBC_SHA:
- return "TLS_DH_DSS_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DH_RSA_WITH_AES_256_CBC_SHA:
- return "TLS_DH_RSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DHE_DSS_WITH_AES_256_CBC_SHA:
- return "TLS_DHE_DSS_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DHE_RSA_WITH_AES_256_CBC_SHA:
- return "TLS_DHE_RSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DH_anon_WITH_AES_256_CBC_SHA:
- return "TLS_DH_anon_WITH_AES_256_CBC_SHA";
- break;
-#if CURL_BUILD_MAC_10_6 || CURL_BUILD_IOS
- /* TLS 1.0 with ECDSA (RFC 4492) */
- case TLS_ECDH_ECDSA_WITH_NULL_SHA:
- return "TLS_ECDH_ECDSA_WITH_NULL_SHA";
- break;
- case TLS_ECDH_ECDSA_WITH_RC4_128_SHA:
- return "TLS_ECDH_ECDSA_WITH_RC4_128_SHA";
- break;
- case TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA:
- return "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA:
- return "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA:
- return "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_ECDHE_ECDSA_WITH_NULL_SHA:
- return "TLS_ECDHE_ECDSA_WITH_NULL_SHA";
- break;
- case TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:
- return "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA";
- break;
- case TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA:
- return "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:
- return "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:
- return "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_ECDH_RSA_WITH_NULL_SHA:
- return "TLS_ECDH_RSA_WITH_NULL_SHA";
- break;
- case TLS_ECDH_RSA_WITH_RC4_128_SHA:
- return "TLS_ECDH_RSA_WITH_RC4_128_SHA";
- break;
- case TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA:
- return "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA:
- return "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA:
- return "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_ECDHE_RSA_WITH_NULL_SHA:
- return "TLS_ECDHE_RSA_WITH_NULL_SHA";
- break;
- case TLS_ECDHE_RSA_WITH_RC4_128_SHA:
- return "TLS_ECDHE_RSA_WITH_RC4_128_SHA";
- break;
- case TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:
- return "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:
- return "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA";
- break;
- case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:
- return "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA";
- break;
- case TLS_ECDH_anon_WITH_NULL_SHA:
- return "TLS_ECDH_anon_WITH_NULL_SHA";
- break;
- case TLS_ECDH_anon_WITH_RC4_128_SHA:
- return "TLS_ECDH_anon_WITH_RC4_128_SHA";
- break;
- case TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA:
- return "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_ECDH_anon_WITH_AES_128_CBC_SHA:
- return "TLS_ECDH_anon_WITH_AES_128_CBC_SHA";
- break;
- case TLS_ECDH_anon_WITH_AES_256_CBC_SHA:
- return "TLS_ECDH_anon_WITH_AES_256_CBC_SHA";
- break;
-#endif /* CURL_BUILD_MAC_10_6 || CURL_BUILD_IOS */
-#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS
- /* TLS 1.2 (RFC 5246) */
- case TLS_RSA_WITH_NULL_MD5:
- return "TLS_RSA_WITH_NULL_MD5";
- break;
- case TLS_RSA_WITH_NULL_SHA:
- return "TLS_RSA_WITH_NULL_SHA";
- break;
- case TLS_RSA_WITH_RC4_128_MD5:
- return "TLS_RSA_WITH_RC4_128_MD5";
- break;
- case TLS_RSA_WITH_RC4_128_SHA:
- return "TLS_RSA_WITH_RC4_128_SHA";
- break;
- case TLS_RSA_WITH_3DES_EDE_CBC_SHA:
- return "TLS_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_RSA_WITH_NULL_SHA256:
- return "TLS_RSA_WITH_NULL_SHA256";
- break;
- case TLS_RSA_WITH_AES_128_CBC_SHA256:
- return "TLS_RSA_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_RSA_WITH_AES_256_CBC_SHA256:
- return "TLS_RSA_WITH_AES_256_CBC_SHA256";
- break;
- case TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA:
- return "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA:
- return "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA:
- return "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA:
- return "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_DH_DSS_WITH_AES_128_CBC_SHA256:
- return "TLS_DH_DSS_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_DH_RSA_WITH_AES_128_CBC_SHA256:
- return "TLS_DH_RSA_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_DHE_DSS_WITH_AES_128_CBC_SHA256:
- return "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_DHE_RSA_WITH_AES_128_CBC_SHA256:
- return "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_DH_DSS_WITH_AES_256_CBC_SHA256:
- return "TLS_DH_DSS_WITH_AES_256_CBC_SHA256";
- break;
- case TLS_DH_RSA_WITH_AES_256_CBC_SHA256:
- return "TLS_DH_RSA_WITH_AES_256_CBC_SHA256";
- break;
- case TLS_DHE_DSS_WITH_AES_256_CBC_SHA256:
- return "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256";
- break;
- case TLS_DHE_RSA_WITH_AES_256_CBC_SHA256:
- return "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256";
- break;
- case TLS_DH_anon_WITH_RC4_128_MD5:
- return "TLS_DH_anon_WITH_RC4_128_MD5";
- break;
- case TLS_DH_anon_WITH_3DES_EDE_CBC_SHA:
- return "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_DH_anon_WITH_AES_128_CBC_SHA256:
- return "TLS_DH_anon_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_DH_anon_WITH_AES_256_CBC_SHA256:
- return "TLS_DH_anon_WITH_AES_256_CBC_SHA256";
- break;
- /* TLS 1.2 with AES GCM (RFC 5288) */
- case TLS_RSA_WITH_AES_128_GCM_SHA256:
- return "TLS_RSA_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_RSA_WITH_AES_256_GCM_SHA384:
- return "TLS_RSA_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_DHE_RSA_WITH_AES_128_GCM_SHA256:
- return "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_DHE_RSA_WITH_AES_256_GCM_SHA384:
- return "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_DH_RSA_WITH_AES_128_GCM_SHA256:
- return "TLS_DH_RSA_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_DH_RSA_WITH_AES_256_GCM_SHA384:
- return "TLS_DH_RSA_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_DHE_DSS_WITH_AES_128_GCM_SHA256:
- return "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_DHE_DSS_WITH_AES_256_GCM_SHA384:
- return "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_DH_DSS_WITH_AES_128_GCM_SHA256:
- return "TLS_DH_DSS_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_DH_DSS_WITH_AES_256_GCM_SHA384:
- return "TLS_DH_DSS_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_DH_anon_WITH_AES_128_GCM_SHA256:
- return "TLS_DH_anon_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_DH_anon_WITH_AES_256_GCM_SHA384:
- return "TLS_DH_anon_WITH_AES_256_GCM_SHA384";
- break;
- /* TLS 1.2 with elliptic curve ciphers (RFC 5289) */
- case TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256:
- return "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384:
- return "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384";
- break;
- case TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256:
- return "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384:
- return "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384";
- break;
- case TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:
- return "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384:
- return "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384";
- break;
- case TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256:
- return "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384:
- return "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384";
- break;
- case TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256:
- return "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384:
- return "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256:
- return "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384:
- return "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:
- return "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:
- return "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256:
- return "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384:
- return "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_EMPTY_RENEGOTIATION_INFO_SCSV:
- return "TLS_EMPTY_RENEGOTIATION_INFO_SCSV";
- break;
-#else
- case SSL_RSA_WITH_NULL_MD5:
- return "TLS_RSA_WITH_NULL_MD5";
- break;
- case SSL_RSA_WITH_NULL_SHA:
- return "TLS_RSA_WITH_NULL_SHA";
- break;
- case SSL_RSA_WITH_RC4_128_MD5:
- return "TLS_RSA_WITH_RC4_128_MD5";
- break;
- case SSL_RSA_WITH_RC4_128_SHA:
- return "TLS_RSA_WITH_RC4_128_SHA";
- break;
- case SSL_RSA_WITH_3DES_EDE_CBC_SHA:
- return "TLS_RSA_WITH_3DES_EDE_CBC_SHA";
- break;
- case SSL_DH_anon_WITH_RC4_128_MD5:
- return "TLS_DH_anon_WITH_RC4_128_MD5";
- break;
- case SSL_DH_anon_WITH_3DES_EDE_CBC_SHA:
- return "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA";
- break;
-#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */
-#if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7
- /* TLS PSK (RFC 4279): */
- case TLS_PSK_WITH_RC4_128_SHA:
- return "TLS_PSK_WITH_RC4_128_SHA";
- break;
- case TLS_PSK_WITH_3DES_EDE_CBC_SHA:
- return "TLS_PSK_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_PSK_WITH_AES_128_CBC_SHA:
- return "TLS_PSK_WITH_AES_128_CBC_SHA";
- break;
- case TLS_PSK_WITH_AES_256_CBC_SHA:
- return "TLS_PSK_WITH_AES_256_CBC_SHA";
- break;
- case TLS_DHE_PSK_WITH_RC4_128_SHA:
- return "TLS_DHE_PSK_WITH_RC4_128_SHA";
- break;
- case TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA:
- return "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_DHE_PSK_WITH_AES_128_CBC_SHA:
- return "TLS_DHE_PSK_WITH_AES_128_CBC_SHA";
- break;
- case TLS_DHE_PSK_WITH_AES_256_CBC_SHA:
- return "TLS_DHE_PSK_WITH_AES_256_CBC_SHA";
- break;
- case TLS_RSA_PSK_WITH_RC4_128_SHA:
- return "TLS_RSA_PSK_WITH_RC4_128_SHA";
- break;
- case TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA:
- return "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA";
- break;
- case TLS_RSA_PSK_WITH_AES_128_CBC_SHA:
- return "TLS_RSA_PSK_WITH_AES_128_CBC_SHA";
- break;
- case TLS_RSA_PSK_WITH_AES_256_CBC_SHA:
- return "TLS_RSA_PSK_WITH_AES_256_CBC_SHA";
- break;
- /* More TLS PSK (RFC 4785): */
- case TLS_PSK_WITH_NULL_SHA:
- return "TLS_PSK_WITH_NULL_SHA";
- break;
- case TLS_DHE_PSK_WITH_NULL_SHA:
- return "TLS_DHE_PSK_WITH_NULL_SHA";
- break;
- case TLS_RSA_PSK_WITH_NULL_SHA:
- return "TLS_RSA_PSK_WITH_NULL_SHA";
- break;
- /* Even more TLS PSK (RFC 5487): */
- case TLS_PSK_WITH_AES_128_GCM_SHA256:
- return "TLS_PSK_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_PSK_WITH_AES_256_GCM_SHA384:
- return "TLS_PSK_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_DHE_PSK_WITH_AES_128_GCM_SHA256:
- return "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_DHE_PSK_WITH_AES_256_GCM_SHA384:
- return "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_RSA_PSK_WITH_AES_128_GCM_SHA256:
- return "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256";
- break;
- case TLS_RSA_PSK_WITH_AES_256_GCM_SHA384:
- return "TLS_PSK_WITH_AES_256_GCM_SHA384";
- break;
- case TLS_PSK_WITH_AES_128_CBC_SHA256:
- return "TLS_PSK_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_PSK_WITH_AES_256_CBC_SHA384:
- return "TLS_PSK_WITH_AES_256_CBC_SHA384";
- break;
- case TLS_PSK_WITH_NULL_SHA256:
- return "TLS_PSK_WITH_NULL_SHA256";
- break;
- case TLS_PSK_WITH_NULL_SHA384:
- return "TLS_PSK_WITH_NULL_SHA384";
- break;
- case TLS_DHE_PSK_WITH_AES_128_CBC_SHA256:
- return "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_DHE_PSK_WITH_AES_256_CBC_SHA384:
- return "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384";
- break;
- case TLS_DHE_PSK_WITH_NULL_SHA256:
- return "TLS_DHE_PSK_WITH_NULL_SHA256";
- break;
- case TLS_DHE_PSK_WITH_NULL_SHA384:
- return "TLS_RSA_PSK_WITH_NULL_SHA384";
- break;
- case TLS_RSA_PSK_WITH_AES_128_CBC_SHA256:
- return "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256";
- break;
- case TLS_RSA_PSK_WITH_AES_256_CBC_SHA384:
- return "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384";
- break;
- case TLS_RSA_PSK_WITH_NULL_SHA256:
- return "TLS_RSA_PSK_WITH_NULL_SHA256";
- break;
- case TLS_RSA_PSK_WITH_NULL_SHA384:
- return "TLS_RSA_PSK_WITH_NULL_SHA384";
- break;
-#endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */
- }
- return "TLS_NULL_WITH_NULL_NULL";
-}
-
-#if CURL_BUILD_MAC
-CF_INLINE void GetDarwinVersionNumber(int *major, int *minor)
-{
- int mib[2];
- char *os_version;
- size_t os_version_len;
- char *os_version_major, *os_version_minor/*, *os_version_point*/;
- char *tok_buf;
-
- /* Get the Darwin kernel version from the kernel using sysctl(): */
- mib[0] = CTL_KERN;
- mib[1] = KERN_OSRELEASE;
- if(sysctl(mib, 2, NULL, &os_version_len, NULL, 0) == -1)
- return;
- os_version = malloc(os_version_len*sizeof(char));
- if(!os_version)
- return;
- if(sysctl(mib, 2, os_version, &os_version_len, NULL, 0) == -1) {
- free(os_version);
- return;
- }
-
- /* Parse the version: */
- os_version_major = strtok_r(os_version, ".", &tok_buf);
- os_version_minor = strtok_r(NULL, ".", &tok_buf);
- /*os_version_point = strtok_r(NULL, ".", &tok_buf);*/
- *major = atoi(os_version_major);
- *minor = atoi(os_version_minor);
- free(os_version);
-}
-#endif /* CURL_BUILD_MAC */
-
-/* Apple provides a myriad of ways of getting information about a certificate
- into a string. Some aren't available under iOS or newer cats. So here's
- a unified function for getting a string describing the certificate that
- ought to work in all cats starting with Leopard. */
-CF_INLINE CFStringRef CopyCertSubject(SecCertificateRef cert)
-{
- CFStringRef server_cert_summary = CFSTR("(null)");
-
-#if CURL_BUILD_IOS
- /* iOS: There's only one way to do this. */
- server_cert_summary = SecCertificateCopySubjectSummary(cert);
-#else
-#if CURL_BUILD_MAC_10_7
- /* Lion & later: Get the long description if we can. */
- if(SecCertificateCopyLongDescription != NULL)
- server_cert_summary =
- SecCertificateCopyLongDescription(NULL, cert, NULL);
- else
-#endif /* CURL_BUILD_MAC_10_7 */
-#if CURL_BUILD_MAC_10_6
- /* Snow Leopard: Get the certificate summary. */
- if(SecCertificateCopySubjectSummary != NULL)
- server_cert_summary = SecCertificateCopySubjectSummary(cert);
- else
-#endif /* CURL_BUILD_MAC_10_6 */
- /* Leopard is as far back as we go... */
- (void)SecCertificateCopyCommonName(cert, &server_cert_summary);
-#endif /* CURL_BUILD_IOS */
- return server_cert_summary;
-}
-
-#if CURL_SUPPORT_MAC_10_6
-/* The SecKeychainSearch API was deprecated in Lion, and using it will raise
- deprecation warnings, so let's not compile this unless it's necessary: */
-static OSStatus CopyIdentityWithLabelOldSchool(char *label,
- SecIdentityRef *out_c_a_k)
-{
- OSStatus status = errSecItemNotFound;
- SecKeychainAttributeList attr_list;
- SecKeychainAttribute attr;
- SecKeychainSearchRef search = NULL;
- SecCertificateRef cert = NULL;
-
- /* Set up the attribute list: */
- attr_list.count = 1L;
- attr_list.attr = &attr;
-
- /* Set up our lone search criterion: */
- attr.tag = kSecLabelItemAttr;
- attr.data = label;
- attr.length = (UInt32)strlen(label);
-
- /* Start searching: */
- status = SecKeychainSearchCreateFromAttributes(NULL,
- kSecCertificateItemClass,
- &attr_list,
- &search);
- if(status == noErr) {
- status = SecKeychainSearchCopyNext(search,
- (SecKeychainItemRef *)&cert);
- if(status == noErr && cert) {
- /* If we found a certificate, does it have a private key? */
- status = SecIdentityCreateWithCertificate(NULL, cert, out_c_a_k);
- CFRelease(cert);
- }
- }
-
- if(search)
- CFRelease(search);
- return status;
-}
-#endif /* CURL_SUPPORT_MAC_10_6 */
-
-static OSStatus CopyIdentityWithLabel(char *label,
- SecIdentityRef *out_cert_and_key)
-{
- OSStatus status = errSecItemNotFound;
-
-#if CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS
- /* SecItemCopyMatching() was introduced in iOS and Snow Leopard.
- kSecClassIdentity was introduced in Lion. If both exist, let's use them
- to find the certificate. */
- if(SecItemCopyMatching != NULL && kSecClassIdentity != NULL) {
- CFTypeRef keys[4];
- CFTypeRef values[4];
- CFDictionaryRef query_dict;
- CFStringRef label_cf = CFStringCreateWithCString(NULL, label,
- kCFStringEncodingUTF8);
-
- /* Set up our search criteria and expected results: */
- values[0] = kSecClassIdentity; /* we want a certificate and a key */
- keys[0] = kSecClass;
- values[1] = kCFBooleanTrue; /* we want a reference */
- keys[1] = kSecReturnRef;
- values[2] = kSecMatchLimitOne; /* one is enough, thanks */
- keys[2] = kSecMatchLimit;
- /* identity searches need a SecPolicyRef in order to work */
- values[3] = SecPolicyCreateSSL(false, label_cf);
- keys[3] = kSecMatchPolicy;
- query_dict = CFDictionaryCreate(NULL, (const void **)keys,
- (const void **)values, 4L,
- &kCFCopyStringDictionaryKeyCallBacks,
- &kCFTypeDictionaryValueCallBacks);
- CFRelease(values[3]);
- CFRelease(label_cf);
-
- /* Do we have a match? */
- status = SecItemCopyMatching(query_dict, (CFTypeRef *)out_cert_and_key);
- CFRelease(query_dict);
- }
- else {
-#if CURL_SUPPORT_MAC_10_6
- /* On Leopard and Snow Leopard, fall back to SecKeychainSearch. */
- status = CopyIdentityWithLabelOldSchool(label, out_cert_and_key);
-#endif /* CURL_SUPPORT_MAC_10_7 */
- }
-#elif CURL_SUPPORT_MAC_10_6
- /* For developers building on older cats, we have no choice but to fall back
- to SecKeychainSearch. */
- status = CopyIdentityWithLabelOldSchool(label, out_cert_and_key);
-#endif /* CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS */
- return status;
-}
-
-static OSStatus CopyIdentityFromPKCS12File(const char *cPath,
- const char *cPassword,
- SecIdentityRef *out_cert_and_key)
-{
- OSStatus status = errSecItemNotFound;
- CFURLRef pkcs_url = CFURLCreateFromFileSystemRepresentation(NULL,
- (const UInt8 *)cPath, strlen(cPath), false);
- CFStringRef password = cPassword ? CFStringCreateWithCString(NULL,
- cPassword, kCFStringEncodingUTF8) : NULL;
- CFDataRef pkcs_data = NULL;
-
- /* We can import P12 files on iOS or OS X 10.7 or later: */
- /* These constants are documented as having first appeared in 10.6 but they
- raise linker errors when used on that cat for some reason. */
-#if CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS
- if(CFURLCreateDataAndPropertiesFromResource(NULL, pkcs_url, &pkcs_data,
- NULL, NULL, &status)) {
- const void *cKeys[] = {kSecImportExportPassphrase};
- const void *cValues[] = {password};
- CFDictionaryRef options = CFDictionaryCreate(NULL, cKeys, cValues,
- password ? 1L : 0L, NULL, NULL);
- CFArrayRef items = NULL;
-
- /* Here we go: */
- status = SecPKCS12Import(pkcs_data, options, &items);
- if(status == noErr && items && CFArrayGetCount(items)) {
- CFDictionaryRef identity_and_trust = CFArrayGetValueAtIndex(items, 0L);
- const void *temp_identity = CFDictionaryGetValue(identity_and_trust,
- kSecImportItemIdentity);
-
- /* Retain the identity; we don't care about any other data... */
- CFRetain(temp_identity);
- *out_cert_and_key = (SecIdentityRef)temp_identity;
- }
-
- if(items)
- CFRelease(items);
- CFRelease(options);
- CFRelease(pkcs_data);
- }
-#endif /* CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS */
- if(password)
- CFRelease(password);
- CFRelease(pkcs_url);
- return status;
-}
-
-/* This code was borrowed from nss.c, with some modifications:
- * Determine whether the nickname passed in is a filename that needs to
- * be loaded as a PEM or a regular NSS nickname.
- *
- * returns 1 for a file
- * returns 0 for not a file
- */
-CF_INLINE bool is_file(const char *filename)
-{
- struct_stat st;
-
- if(filename == NULL)
- return false;
-
- if(stat(filename, &st) == 0)
- return S_ISREG(st.st_mode);
- return false;
-}
-
-static CURLcode darwinssl_connect_step1(struct connectdata *conn,
- int sockindex)
-{
- struct SessionHandle *data = conn->data;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif /* ENABLE_IPV6 */
- size_t all_ciphers_count = 0UL, allowed_ciphers_count = 0UL, i;
- SSLCipherSuite *all_ciphers = NULL, *allowed_ciphers = NULL;
- char *ssl_sessionid;
- size_t ssl_sessionid_len;
- OSStatus err = noErr;
-#if CURL_BUILD_MAC
- int darwinver_maj = 0, darwinver_min = 0;
-
- GetDarwinVersionNumber(&darwinver_maj, &darwinver_min);
-#endif /* CURL_BUILD_MAC */
-
-#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS
- if(SSLCreateContext != NULL) { /* use the newer API if avaialble */
- if(connssl->ssl_ctx)
- CFRelease(connssl->ssl_ctx);
- connssl->ssl_ctx = SSLCreateContext(NULL, kSSLClientSide, kSSLStreamType);
- if(!connssl->ssl_ctx) {
- failf(data, "SSL: couldn't create a context!");
- return CURLE_OUT_OF_MEMORY;
- }
- }
- else {
- /* The old ST API does not exist under iOS, so don't compile it: */
-#if CURL_SUPPORT_MAC_10_8
- if(connssl->ssl_ctx)
- (void)SSLDisposeContext(connssl->ssl_ctx);
- err = SSLNewContext(false, &(connssl->ssl_ctx));
- if(err != noErr) {
- failf(data, "SSL: couldn't create a context: OSStatus %d", err);
- return CURLE_OUT_OF_MEMORY;
- }
-#endif /* CURL_SUPPORT_MAC_10_8 */
- }
-#else
- if(connssl->ssl_ctx)
- (void)SSLDisposeContext(connssl->ssl_ctx);
- err = SSLNewContext(false, &(connssl->ssl_ctx));
- if(err != noErr) {
- failf(data, "SSL: couldn't create a context: OSStatus %d", err);
- return CURLE_OUT_OF_MEMORY;
- }
-#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */
- connssl->ssl_write_buffered_length = 0UL; /* reset buffered write length */
-
- /* check to see if we've been told to use an explicit SSL/TLS version */
-#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS
- if(SSLSetProtocolVersionMax != NULL) {
- switch(data->set.ssl.version) {
- case CURL_SSLVERSION_DEFAULT: default:
- (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kSSLProtocol3);
- (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol12);
- break;
- case CURL_SSLVERSION_TLSv1:
- (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol1);
- (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol12);
- break;
- case CURL_SSLVERSION_TLSv1_0:
- (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol1);
- (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol1);
- break;
- case CURL_SSLVERSION_TLSv1_1:
- (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol11);
- (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol11);
- break;
- case CURL_SSLVERSION_TLSv1_2:
- (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kTLSProtocol12);
- (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kTLSProtocol12);
- break;
- case CURL_SSLVERSION_SSLv3:
- (void)SSLSetProtocolVersionMin(connssl->ssl_ctx, kSSLProtocol3);
- (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kSSLProtocol3);
- break;
- case CURL_SSLVERSION_SSLv2:
- err = SSLSetProtocolVersionMin(connssl->ssl_ctx, kSSLProtocol2);
- if(err != noErr) {
- failf(data, "Your version of the OS does not support SSLv2");
- return CURLE_SSL_CONNECT_ERROR;
- }
- (void)SSLSetProtocolVersionMax(connssl->ssl_ctx, kSSLProtocol2);
- }
- }
- else {
-#if CURL_SUPPORT_MAC_10_8
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kSSLProtocolAll,
- false);
- switch (data->set.ssl.version) {
- case CURL_SSLVERSION_DEFAULT: default:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kSSLProtocol3,
- true);
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol1,
- true);
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol11,
- true);
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol12,
- true);
- break;
- case CURL_SSLVERSION_TLSv1:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol1,
- true);
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol11,
- true);
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol12,
- true);
- break;
- case CURL_SSLVERSION_TLSv1_0:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol1,
- true);
- break;
- case CURL_SSLVERSION_TLSv1_1:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol11,
- true);
- break;
- case CURL_SSLVERSION_TLSv1_2:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol12,
- true);
- break;
- case CURL_SSLVERSION_SSLv3:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kSSLProtocol3,
- true);
- break;
- case CURL_SSLVERSION_SSLv2:
- err = SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kSSLProtocol2,
- true);
- if(err != noErr) {
- failf(data, "Your version of the OS does not support SSLv2");
- return CURLE_SSL_CONNECT_ERROR;
- }
- break;
- }
-#endif /* CURL_SUPPORT_MAC_10_8 */
- }
-#else
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx, kSSLProtocolAll, false);
- switch(data->set.ssl.version) {
- default:
- case CURL_SSLVERSION_DEFAULT:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kSSLProtocol3,
- true);
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol1,
- true);
- break;
- case CURL_SSLVERSION_TLSv1:
- case CURL_SSLVERSION_TLSv1_0:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kTLSProtocol1,
- true);
- break;
- case CURL_SSLVERSION_TLSv1_1:
- failf(data, "Your version of the OS does not support TLSv1.1");
- return CURLE_SSL_CONNECT_ERROR;
- case CURL_SSLVERSION_TLSv1_2:
- failf(data, "Your version of the OS does not support TLSv1.2");
- return CURLE_SSL_CONNECT_ERROR;
- case CURL_SSLVERSION_SSLv2:
- err = SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kSSLProtocol2,
- true);
- if(err != noErr) {
- failf(data, "Your version of the OS does not support SSLv2");
- return CURLE_SSL_CONNECT_ERROR;
- }
- break;
- case CURL_SSLVERSION_SSLv3:
- (void)SSLSetProtocolVersionEnabled(connssl->ssl_ctx,
- kSSLProtocol3,
- true);
- break;
- }
-#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */
-
- if(data->set.str[STRING_KEY]) {
- infof(data, "WARNING: SSL: CURLOPT_SSLKEY is ignored by Secure "
- "Transport. The private key must be in the Keychain.\n");
- }
-
- if(data->set.str[STRING_CERT]) {
- SecIdentityRef cert_and_key = NULL;
- bool is_cert_file = is_file(data->set.str[STRING_CERT]);
-
- /* User wants to authenticate with a client cert. Look for it:
- If we detect that this is a file on disk, then let's load it.
- Otherwise, assume that the user wants to use an identity loaded
- from the Keychain. */
- if(is_cert_file) {
- if(!data->set.str[STRING_CERT_TYPE])
- infof(data, "WARNING: SSL: Certificate type not set, assuming "
- "PKCS#12 format.\n");
- else if(strncmp(data->set.str[STRING_CERT_TYPE], "P12",
- strlen(data->set.str[STRING_CERT_TYPE])) != 0)
- infof(data, "WARNING: SSL: The Security framework only supports "
- "loading identities that are in PKCS#12 format.\n");
-
- err = CopyIdentityFromPKCS12File(data->set.str[STRING_CERT],
- data->set.str[STRING_KEY_PASSWD], &cert_and_key);
- }
- else
- err = CopyIdentityWithLabel(data->set.str[STRING_CERT], &cert_and_key);
-
- if(err == noErr) {
- SecCertificateRef cert = NULL;
- CFTypeRef certs_c[1];
- CFArrayRef certs;
-
- /* If we found one, print it out: */
- err = SecIdentityCopyCertificate(cert_and_key, &cert);
- if(err == noErr) {
- CFStringRef cert_summary = CopyCertSubject(cert);
- char cert_summary_c[128];
-
- if(cert_summary) {
- memset(cert_summary_c, 0, 128);
- if(CFStringGetCString(cert_summary,
- cert_summary_c,
- 128,
- kCFStringEncodingUTF8)) {
- infof(data, "Client certificate: %s\n", cert_summary_c);
- }
- CFRelease(cert_summary);
- CFRelease(cert);
- }
- }
- certs_c[0] = cert_and_key;
- certs = CFArrayCreate(NULL, (const void **)certs_c, 1L,
- &kCFTypeArrayCallBacks);
- err = SSLSetCertificate(connssl->ssl_ctx, certs);
- if(certs)
- CFRelease(certs);
- if(err != noErr) {
- failf(data, "SSL: SSLSetCertificate() failed: OSStatus %d", err);
- return CURLE_SSL_CERTPROBLEM;
- }
- CFRelease(cert_and_key);
- }
- else {
- switch(err) {
- case errSecAuthFailed: case -25264: /* errSecPkcs12VerifyFailure */
- failf(data, "SSL: Incorrect password for the certificate \"%s\" "
- "and its private key.", data->set.str[STRING_CERT]);
- break;
- case -26275: /* errSecDecode */ case -25257: /* errSecUnknownFormat */
- failf(data, "SSL: Couldn't make sense of the data in the "
- "certificate \"%s\" and its private key.",
- data->set.str[STRING_CERT]);
- break;
- case -25260: /* errSecPassphraseRequired */
- failf(data, "SSL The certificate \"%s\" requires a password.",
- data->set.str[STRING_CERT]);
- break;
- case errSecItemNotFound:
- failf(data, "SSL: Can't find the certificate \"%s\" and its private "
- "key in the Keychain.", data->set.str[STRING_CERT]);
- break;
- default:
- failf(data, "SSL: Can't load the certificate \"%s\" and its private "
- "key: OSStatus %d", data->set.str[STRING_CERT], err);
- break;
- }
- return CURLE_SSL_CERTPROBLEM;
- }
- }
-
- /* SSL always tries to verify the peer, this only says whether it should
- * fail to connect if the verification fails, or if it should continue
- * anyway. In the latter case the result of the verification is checked with
- * SSL_get_verify_result() below. */
-#if CURL_BUILD_MAC_10_6 || CURL_BUILD_IOS
- /* Snow Leopard introduced the SSLSetSessionOption() function, but due to
- a library bug with the way the kSSLSessionOptionBreakOnServerAuth flag
- works, it doesn't work as expected under Snow Leopard or Lion.
- So we need to call SSLSetEnableCertVerify() on those older cats in order
- to disable certificate validation if the user turned that off.
- (SecureTransport will always validate the certificate chain by
- default.) */
- /* (Note: Darwin 12.x.x is Mountain Lion.) */
-#if CURL_BUILD_MAC
- if(SSLSetSessionOption != NULL && darwinver_maj >= 12) {
-#else
- if(SSLSetSessionOption != NULL) {
-#endif /* CURL_BUILD_MAC */
- bool break_on_auth = !data->set.ssl.verifypeer ||
- data->set.str[STRING_SSL_CAFILE];
- err = SSLSetSessionOption(connssl->ssl_ctx,
- kSSLSessionOptionBreakOnServerAuth,
- break_on_auth);
- if(err != noErr) {
- failf(data, "SSL: SSLSetSessionOption() failed: OSStatus %d", err);
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
- else {
-#if CURL_SUPPORT_MAC_10_8
- err = SSLSetEnableCertVerify(connssl->ssl_ctx,
- data->set.ssl.verifypeer?true:false);
- if(err != noErr) {
- failf(data, "SSL: SSLSetEnableCertVerify() failed: OSStatus %d", err);
- return CURLE_SSL_CONNECT_ERROR;
- }
-#endif /* CURL_SUPPORT_MAC_10_8 */
- }
-#else
- err = SSLSetEnableCertVerify(connssl->ssl_ctx,
- data->set.ssl.verifypeer?true:false);
- if(err != noErr) {
- failf(data, "SSL: SSLSetEnableCertVerify() failed: OSStatus %d", err);
- return CURLE_SSL_CONNECT_ERROR;
- }
-#endif /* CURL_BUILD_MAC_10_6 || CURL_BUILD_IOS */
-
- if(data->set.str[STRING_SSL_CAFILE]) {
- bool is_cert_file = is_file(data->set.str[STRING_SSL_CAFILE]);
-
- if(!is_cert_file) {
- failf(data, "SSL: can't load CA certificate file %s",
- data->set.str[STRING_SSL_CAFILE]);
- return CURLE_SSL_CACERT_BADFILE;
- }
- if(!data->set.ssl.verifypeer) {
- failf(data, "SSL: CA certificate set, but certificate verification "
- "is disabled");
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-
- /* Configure hostname check. SNI is used if available.
- * Both hostname check and SNI require SSLSetPeerDomainName().
- * Also: the verifyhost setting influences SNI usage */
- if(data->set.ssl.verifyhost) {
- err = SSLSetPeerDomainName(connssl->ssl_ctx, conn->host.name,
- strlen(conn->host.name));
-
- if(err != noErr) {
- infof(data, "WARNING: SSL: SSLSetPeerDomainName() failed: OSStatus %d\n",
- err);
- }
-
- if((Curl_inet_pton(AF_INET, conn->host.name, &addr))
- #ifdef ENABLE_IPV6
- || (Curl_inet_pton(AF_INET6, conn->host.name, &addr))
- #endif
- ) {
- infof(data, "WARNING: using IP address, SNI is being disabled by "
- "the OS.\n");
- }
- }
-
- /* Disable cipher suites that ST supports but are not safe. These ciphers
- are unlikely to be used in any case since ST gives other ciphers a much
- higher priority, but it's probably better that we not connect at all than
- to give the user a false sense of security if the server only supports
- insecure ciphers. (Note: We don't care about SSLv2-only ciphers.) */
- (void)SSLGetNumberSupportedCiphers(connssl->ssl_ctx, &all_ciphers_count);
- all_ciphers = malloc(all_ciphers_count*sizeof(SSLCipherSuite));
- allowed_ciphers = malloc(all_ciphers_count*sizeof(SSLCipherSuite));
- if(all_ciphers && allowed_ciphers &&
- SSLGetSupportedCiphers(connssl->ssl_ctx, all_ciphers,
- &all_ciphers_count) == noErr) {
- for(i = 0UL ; i < all_ciphers_count ; i++) {
-#if CURL_BUILD_MAC
- /* There's a known bug in early versions of Mountain Lion where ST's ECC
- ciphers (cipher suite 0xC001 through 0xC032) simply do not work.
- Work around the problem here by disabling those ciphers if we are
- running in an affected version of OS X. */
- if(darwinver_maj == 12 && darwinver_min <= 3 &&
- all_ciphers[i] >= 0xC001 && all_ciphers[i] <= 0xC032) {
- continue;
- }
-#endif /* CURL_BUILD_MAC */
- switch(all_ciphers[i]) {
- /* Disable NULL ciphersuites: */
- case SSL_NULL_WITH_NULL_NULL:
- case SSL_RSA_WITH_NULL_MD5:
- case SSL_RSA_WITH_NULL_SHA:
- case 0x003B: /* TLS_RSA_WITH_NULL_SHA256 */
- case SSL_FORTEZZA_DMS_WITH_NULL_SHA:
- case 0xC001: /* TLS_ECDH_ECDSA_WITH_NULL_SHA */
- case 0xC006: /* TLS_ECDHE_ECDSA_WITH_NULL_SHA */
- case 0xC00B: /* TLS_ECDH_RSA_WITH_NULL_SHA */
- case 0xC010: /* TLS_ECDHE_RSA_WITH_NULL_SHA */
- case 0x002C: /* TLS_PSK_WITH_NULL_SHA */
- case 0x002D: /* TLS_DHE_PSK_WITH_NULL_SHA */
- case 0x002E: /* TLS_RSA_PSK_WITH_NULL_SHA */
- case 0x00B0: /* TLS_PSK_WITH_NULL_SHA256 */
- case 0x00B1: /* TLS_PSK_WITH_NULL_SHA384 */
- case 0x00B4: /* TLS_DHE_PSK_WITH_NULL_SHA256 */
- case 0x00B5: /* TLS_DHE_PSK_WITH_NULL_SHA384 */
- case 0x00B8: /* TLS_RSA_PSK_WITH_NULL_SHA256 */
- case 0x00B9: /* TLS_RSA_PSK_WITH_NULL_SHA384 */
- /* Disable anonymous ciphersuites: */
- case SSL_DH_anon_EXPORT_WITH_RC4_40_MD5:
- case SSL_DH_anon_WITH_RC4_128_MD5:
- case SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA:
- case SSL_DH_anon_WITH_DES_CBC_SHA:
- case SSL_DH_anon_WITH_3DES_EDE_CBC_SHA:
- case TLS_DH_anon_WITH_AES_128_CBC_SHA:
- case TLS_DH_anon_WITH_AES_256_CBC_SHA:
- case 0xC015: /* TLS_ECDH_anon_WITH_NULL_SHA */
- case 0xC016: /* TLS_ECDH_anon_WITH_RC4_128_SHA */
- case 0xC017: /* TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA */
- case 0xC018: /* TLS_ECDH_anon_WITH_AES_128_CBC_SHA */
- case 0xC019: /* TLS_ECDH_anon_WITH_AES_256_CBC_SHA */
- case 0x006C: /* TLS_DH_anon_WITH_AES_128_CBC_SHA256 */
- case 0x006D: /* TLS_DH_anon_WITH_AES_256_CBC_SHA256 */
- case 0x00A6: /* TLS_DH_anon_WITH_AES_128_GCM_SHA256 */
- case 0x00A7: /* TLS_DH_anon_WITH_AES_256_GCM_SHA384 */
- /* Disable weak key ciphersuites: */
- case SSL_RSA_EXPORT_WITH_RC4_40_MD5:
- case SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5:
- case SSL_RSA_EXPORT_WITH_DES40_CBC_SHA:
- case SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA:
- case SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA:
- case SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA:
- case SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA:
- case SSL_RSA_WITH_DES_CBC_SHA:
- case SSL_DH_DSS_WITH_DES_CBC_SHA:
- case SSL_DH_RSA_WITH_DES_CBC_SHA:
- case SSL_DHE_DSS_WITH_DES_CBC_SHA:
- case SSL_DHE_RSA_WITH_DES_CBC_SHA:
- /* Disable IDEA: */
- case SSL_RSA_WITH_IDEA_CBC_SHA:
- case SSL_RSA_WITH_IDEA_CBC_MD5:
- break;
- default: /* enable everything else */
- allowed_ciphers[allowed_ciphers_count++] = all_ciphers[i];
- break;
- }
- }
- err = SSLSetEnabledCiphers(connssl->ssl_ctx, allowed_ciphers,
- allowed_ciphers_count);
- if(err != noErr) {
- failf(data, "SSL: SSLSetEnabledCiphers() failed: OSStatus %d", err);
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
- else {
- Curl_safefree(all_ciphers);
- Curl_safefree(allowed_ciphers);
- failf(data, "SSL: Failed to allocate memory for allowed ciphers");
- return CURLE_OUT_OF_MEMORY;
- }
- Curl_safefree(all_ciphers);
- Curl_safefree(allowed_ciphers);
-
-#if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7
- /* We want to enable 1/n-1 when using a CBC cipher unless the user
- specifically doesn't want us doing that: */
- if(SSLSetSessionOption != NULL)
- SSLSetSessionOption(connssl->ssl_ctx, kSSLSessionOptionSendOneByteRecord,
- !data->set.ssl_enable_beast);
-#endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */
-
- /* Check if there's a cached ID we can/should use here! */
- if(!Curl_ssl_getsessionid(conn, (void **)&ssl_sessionid,
- &ssl_sessionid_len)) {
- /* we got a session id, use it! */
- err = SSLSetPeerID(connssl->ssl_ctx, ssl_sessionid, ssl_sessionid_len);
- if(err != noErr) {
- failf(data, "SSL: SSLSetPeerID() failed: OSStatus %d", err);
- return CURLE_SSL_CONNECT_ERROR;
- }
- /* Informational message */
- infof(data, "SSL re-using session ID\n");
- }
- /* If there isn't one, then let's make one up! This has to be done prior
- to starting the handshake. */
- else {
- CURLcode retcode;
-
- ssl_sessionid = malloc(256*sizeof(char));
- ssl_sessionid_len = snprintf(ssl_sessionid, 256, "curl:%s:%hu",
- conn->host.name, conn->remote_port);
- err = SSLSetPeerID(connssl->ssl_ctx, ssl_sessionid, ssl_sessionid_len);
- if(err != noErr) {
- failf(data, "SSL: SSLSetPeerID() failed: OSStatus %d", err);
- return CURLE_SSL_CONNECT_ERROR;
- }
- retcode = Curl_ssl_addsessionid(conn, ssl_sessionid, ssl_sessionid_len);
- if(retcode!= CURLE_OK) {
- failf(data, "failed to store ssl session");
- return retcode;
- }
- }
-
- err = SSLSetIOFuncs(connssl->ssl_ctx, SocketRead, SocketWrite);
- if(err != noErr) {
- failf(data, "SSL: SSLSetIOFuncs() failed: OSStatus %d", err);
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* pass the raw socket into the SSL layers */
- /* We need to store the FD in a constant memory address, because
- * SSLSetConnection() will not copy that address. I've found that
- * conn->sock[sockindex] may change on its own. */
- connssl->ssl_sockfd = sockfd;
- err = SSLSetConnection(connssl->ssl_ctx, connssl);
- if(err != noErr) {
- failf(data, "SSL: SSLSetConnection() failed: %d", err);
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- connssl->connecting_state = ssl_connect_2;
- return CURLE_OK;
-}
-
-static long pem_to_der(const char *in, unsigned char **out, size_t *outlen)
-{
- char *sep_start, *sep_end, *cert_start, *cert_end;
- size_t i, j, err;
- size_t len;
- unsigned char *b64;
-
- /* Jump through the separators at the beginning of the certificate. */
- sep_start = strstr(in, "-----");
- if(sep_start == NULL)
- return 0;
- cert_start = strstr(sep_start + 1, "-----");
- if(cert_start == NULL)
- return -1;
-
- cert_start += 5;
-
- /* Find separator after the end of the certificate. */
- cert_end = strstr(cert_start, "-----");
- if(cert_end == NULL)
- return -1;
-
- sep_end = strstr(cert_end + 1, "-----");
- if(sep_end == NULL)
- return -1;
- sep_end += 5;
-
- len = cert_end - cert_start;
- b64 = malloc(len + 1);
- if(!b64)
- return -1;
-
- /* Create base64 string without linefeeds. */
- for(i = 0, j = 0; i < len; i++) {
- if(cert_start[i] != '\r' && cert_start[i] != '\n')
- b64[j++] = cert_start[i];
- }
- b64[j] = '\0';
-
- err = Curl_base64_decode((const char *)b64, out, outlen);
- free(b64);
- if(err) {
- free(*out);
- return -1;
- }
-
- return sep_end - in;
-}
-
-static int read_cert(const char *file, unsigned char **out, size_t *outlen)
-{
- int fd;
- ssize_t n, len = 0, cap = 512;
- unsigned char buf[cap], *data;
-
- fd = open(file, 0);
- if(fd < 0)
- return -1;
-
- data = malloc(cap);
- if(!data) {
- close(fd);
- return -1;
- }
-
- for(;;) {
- n = read(fd, buf, sizeof(buf));
- if(n < 0) {
- close(fd);
- free(data);
- return -1;
- }
- else if(n == 0) {
- close(fd);
- break;
- }
-
- if(len + n >= cap) {
- cap *= 2;
- data = realloc(data, cap);
- if(!data) {
- close(fd);
- return -1;
- }
- }
-
- memcpy(data + len, buf, n);
- len += n;
- }
- data[len] = '\0';
-
- *out = data;
- *outlen = len;
-
- return 0;
-}
-
-static int sslerr_to_curlerr(struct SessionHandle *data, int err)
-{
- switch(err) {
- case errSSLXCertChainInvalid:
- failf(data, "SSL certificate problem: Invalid certificate chain");
- return CURLE_SSL_CACERT;
- case errSSLUnknownRootCert:
- failf(data, "SSL certificate problem: Untrusted root certificate");
- return CURLE_SSL_CACERT;
- case errSSLNoRootCert:
- failf(data, "SSL certificate problem: No root certificate");
- return CURLE_SSL_CACERT;
- case errSSLCertExpired:
- failf(data, "SSL certificate problem: Certificate chain had an "
- "expired certificate");
- return CURLE_SSL_CACERT;
- case errSSLBadCert:
- failf(data, "SSL certificate problem: Couldn't understand the server "
- "certificate format");
- return CURLE_SSL_CONNECT_ERROR;
- case errSSLHostNameMismatch:
- failf(data, "SSL certificate peer hostname mismatch");
- return CURLE_PEER_FAILED_VERIFICATION;
- default:
- failf(data, "SSL unexpected certificate error %d", err);
- return CURLE_SSL_CACERT;
- }
-}
-
-static int append_cert_to_array(struct SessionHandle *data,
- unsigned char *buf, size_t buflen,
- CFMutableArrayRef array)
-{
- CFDataRef certdata = CFDataCreate(kCFAllocatorDefault, buf, buflen);
- if(!certdata) {
- failf(data, "SSL: failed to allocate array for CA certificate");
- return CURLE_OUT_OF_MEMORY;
- }
-
- SecCertificateRef cacert =
- SecCertificateCreateWithData(kCFAllocatorDefault, certdata);
- CFRelease(certdata);
- if(!cacert) {
- failf(data, "SSL: failed to create SecCertificate from CA certificate");
- return CURLE_SSL_CACERT;
- }
-
- /* Check if cacert is valid. */
- CFStringRef subject = CopyCertSubject(cacert);
- if(subject) {
- char subject_cbuf[128];
- memset(subject_cbuf, 0, 128);
- if(!CFStringGetCString(subject,
- subject_cbuf,
- 128,
- kCFStringEncodingUTF8)) {
- CFRelease(cacert);
- failf(data, "SSL: invalid CA certificate subject");
- return CURLE_SSL_CACERT;
- }
- CFRelease(subject);
- }
- else {
- CFRelease(cacert);
- failf(data, "SSL: invalid CA certificate");
- return CURLE_SSL_CACERT;
- }
-
- CFArrayAppendValue(array, cacert);
- CFRelease(cacert);
-
- return CURLE_OK;
-}
-
-static int verify_cert(const char *cafile, struct SessionHandle *data,
- SSLContextRef ctx)
-{
- int n = 0, rc;
- long res;
- unsigned char *certbuf, *der;
- size_t buflen, derlen, offset = 0;
-
- if(read_cert(cafile, &certbuf, &buflen) < 0) {
- failf(data, "SSL: failed to read or invalid CA certificate");
- return CURLE_SSL_CACERT;
- }
-
- /*
- * Certbuf now contains the contents of the certificate file, which can be
- * - a single DER certificate,
- * - a single PEM certificate or
- * - a bunch of PEM certificates (certificate bundle).
- *
- * Go through certbuf, and convert any PEM certificate in it into DER
- * format.
- */
- CFMutableArrayRef array = CFArrayCreateMutable(kCFAllocatorDefault, 0,
- &kCFTypeArrayCallBacks);
- if(array == NULL) {
- free(certbuf);
- failf(data, "SSL: out of memory creating CA certificate array");
- return CURLE_OUT_OF_MEMORY;
- }
-
- while(offset < buflen) {
- n++;
-
- /*
- * Check if the certificate is in PEM format, and convert it to DER. If
- * this fails, we assume the certificate is in DER format.
- */
- res = pem_to_der((const char *)certbuf + offset, &der, &derlen);
- if(res < 0) {
- free(certbuf);
- CFRelease(array);
- failf(data, "SSL: invalid CA certificate #%d (offset %d) in bundle",
- n, offset);
- return CURLE_SSL_CACERT;
- }
- offset += res;
-
- if(res == 0 && offset == 0) {
- /* This is not a PEM file, probably a certificate in DER format. */
- rc = append_cert_to_array(data, certbuf, buflen, array);
- free(certbuf);
- if(rc != CURLE_OK) {
- CFRelease(array);
- return rc;
- }
- break;
- }
- else if(res == 0) {
- /* No more certificates in the bundle. */
- free(certbuf);
- break;
- }
-
- rc = append_cert_to_array(data, der, derlen, array);
- free(der);
- if(rc != CURLE_OK) {
- free(certbuf);
- CFRelease(array);
- return rc;
- }
- }
-
- SecTrustRef trust;
- OSStatus ret = SSLCopyPeerTrust(ctx, &trust);
- if(trust == NULL) {
- failf(data, "SSL: error getting certificate chain");
- CFRelease(array);
- return CURLE_OUT_OF_MEMORY;
- }
- else if(ret != noErr) {
- CFRelease(array);
- return sslerr_to_curlerr(data, ret);
- }
-
- ret = SecTrustSetAnchorCertificates(trust, array);
- if(ret != noErr) {
- CFRelease(trust);
- return sslerr_to_curlerr(data, ret);
- }
- ret = SecTrustSetAnchorCertificatesOnly(trust, true);
- if(ret != noErr) {
- CFRelease(trust);
- return sslerr_to_curlerr(data, ret);
- }
-
- SecTrustResultType trust_eval = 0;
- ret = SecTrustEvaluate(trust, &trust_eval);
- CFRelease(array);
- CFRelease(trust);
- if(ret != noErr) {
- return sslerr_to_curlerr(data, ret);
- }
-
- switch (trust_eval) {
- case kSecTrustResultUnspecified:
- case kSecTrustResultProceed:
- return CURLE_OK;
-
- case kSecTrustResultRecoverableTrustFailure:
- case kSecTrustResultDeny:
- default:
- failf(data, "SSL: certificate verification failed (result: %d)",
- trust_eval);
- return CURLE_PEER_FAILED_VERIFICATION;
- }
-}
-
-static CURLcode
-darwinssl_connect_step2(struct connectdata *conn, int sockindex)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- OSStatus err;
- SSLCipherSuite cipher;
- SSLProtocol protocol = 0;
-
- DEBUGASSERT(ssl_connect_2 == connssl->connecting_state
- || ssl_connect_2_reading == connssl->connecting_state
- || ssl_connect_2_writing == connssl->connecting_state);
-
- /* Here goes nothing: */
- err = SSLHandshake(connssl->ssl_ctx);
-
- if(err != noErr) {
- switch (err) {
- case errSSLWouldBlock: /* they're not done with us yet */
- connssl->connecting_state = connssl->ssl_direction ?
- ssl_connect_2_writing : ssl_connect_2_reading;
- return CURLE_OK;
-
- /* The below is errSSLServerAuthCompleted; it's not defined in
- Leopard's headers */
- case -9841:
- if(data->set.str[STRING_SSL_CAFILE]) {
- int res = verify_cert(data->set.str[STRING_SSL_CAFILE], data,
- connssl->ssl_ctx);
- if(res != CURLE_OK)
- return res;
- }
- /* the documentation says we need to call SSLHandshake() again */
- return darwinssl_connect_step2(conn, sockindex);
-
- /* These are all certificate problems with the server: */
- case errSSLXCertChainInvalid:
- failf(data, "SSL certificate problem: Invalid certificate chain");
- return CURLE_SSL_CACERT;
- case errSSLUnknownRootCert:
- failf(data, "SSL certificate problem: Untrusted root certificate");
- return CURLE_SSL_CACERT;
- case errSSLNoRootCert:
- failf(data, "SSL certificate problem: No root certificate");
- return CURLE_SSL_CACERT;
- case errSSLCertExpired:
- failf(data, "SSL certificate problem: Certificate chain had an "
- "expired certificate");
- return CURLE_SSL_CACERT;
- case errSSLBadCert:
- failf(data, "SSL certificate problem: Couldn't understand the server "
- "certificate format");
- return CURLE_SSL_CONNECT_ERROR;
-
- /* These are all certificate problems with the client: */
- case errSecAuthFailed:
- failf(data, "SSL authentication failed");
- return CURLE_SSL_CONNECT_ERROR;
- case errSSLPeerHandshakeFail:
- failf(data, "SSL peer handshake failed, the server most likely "
- "requires a client certificate to connect");
- return CURLE_SSL_CONNECT_ERROR;
- case errSSLPeerUnknownCA:
- failf(data, "SSL server rejected the client certificate due to "
- "the certificate being signed by an unknown certificate "
- "authority");
- return CURLE_SSL_CONNECT_ERROR;
-
- /* This error is raised if the server's cert didn't match the server's
- host name: */
- case errSSLHostNameMismatch:
- failf(data, "SSL certificate peer verification failed, the "
- "certificate did not match \"%s\"\n", conn->host.dispname);
- return CURLE_PEER_FAILED_VERIFICATION;
-
- /* Generic handshake errors: */
- case errSSLConnectionRefused:
- failf(data, "Server dropped the connection during the SSL handshake");
- return CURLE_SSL_CONNECT_ERROR;
- case errSSLClosedAbort:
- failf(data, "Server aborted the SSL handshake");
- return CURLE_SSL_CONNECT_ERROR;
- case errSSLNegotiation:
- failf(data, "Could not negotiate an SSL cipher suite with the server");
- return CURLE_SSL_CONNECT_ERROR;
- /* Sometimes paramErr happens with buggy ciphers: */
- case paramErr: case errSSLInternal:
- failf(data, "Internal SSL engine error encountered during the "
- "SSL handshake");
- return CURLE_SSL_CONNECT_ERROR;
- case errSSLFatalAlert:
- failf(data, "Fatal SSL engine error encountered during the SSL "
- "handshake");
- return CURLE_SSL_CONNECT_ERROR;
- default:
- failf(data, "Unknown SSL protocol error in connection to %s:%d",
- conn->host.name, err);
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
- else {
- /* we have been connected fine, we're not waiting for anything else. */
- connssl->connecting_state = ssl_connect_3;
-
- /* Informational message */
- (void)SSLGetNegotiatedCipher(connssl->ssl_ctx, &cipher);
- (void)SSLGetNegotiatedProtocolVersion(connssl->ssl_ctx, &protocol);
- switch (protocol) {
- case kSSLProtocol2:
- infof(data, "SSL 2.0 connection using %s\n",
- SSLCipherNameForNumber(cipher));
- break;
- case kSSLProtocol3:
- infof(data, "SSL 3.0 connection using %s\n",
- SSLCipherNameForNumber(cipher));
- break;
- case kTLSProtocol1:
- infof(data, "TLS 1.0 connection using %s\n",
- TLSCipherNameForNumber(cipher));
- break;
-#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS
- case kTLSProtocol11:
- infof(data, "TLS 1.1 connection using %s\n",
- TLSCipherNameForNumber(cipher));
- break;
- case kTLSProtocol12:
- infof(data, "TLS 1.2 connection using %s\n",
- TLSCipherNameForNumber(cipher));
- break;
-#endif
- default:
- infof(data, "Unknown protocol connection\n");
- break;
- }
-
- return CURLE_OK;
- }
-}
-
-static CURLcode
-darwinssl_connect_step3(struct connectdata *conn,
- int sockindex)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- CFStringRef server_cert_summary;
- char server_cert_summary_c[128];
- CFArrayRef server_certs = NULL;
- SecCertificateRef server_cert;
- OSStatus err;
- CFIndex i, count;
- SecTrustRef trust = NULL;
-
- /* There is no step 3!
- * Well, okay, if verbose mode is on, let's print the details of the
- * server certificates. */
-#if CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS
-#if CURL_BUILD_IOS
-#pragma unused(server_certs)
- err = SSLCopyPeerTrust(connssl->ssl_ctx, &trust);
- /* For some reason, SSLCopyPeerTrust() can return noErr and yet return
- a null trust, so be on guard for that: */
- if(err == noErr && trust) {
- count = SecTrustGetCertificateCount(trust);
- for(i = 0L ; i < count ; i++) {
- server_cert = SecTrustGetCertificateAtIndex(trust, i);
- server_cert_summary = CopyCertSubject(server_cert);
- memset(server_cert_summary_c, 0, 128);
- if(CFStringGetCString(server_cert_summary,
- server_cert_summary_c,
- 128,
- kCFStringEncodingUTF8)) {
- infof(data, "Server certificate: %s\n", server_cert_summary_c);
- }
- CFRelease(server_cert_summary);
- }
- CFRelease(trust);
- }
-#else
- /* SSLCopyPeerCertificates() is deprecated as of Mountain Lion.
- The function SecTrustGetCertificateAtIndex() is officially present
- in Lion, but it is unfortunately also present in Snow Leopard as
- private API and doesn't work as expected. So we have to look for
- a different symbol to make sure this code is only executed under
- Lion or later. */
- if(SecTrustEvaluateAsync != NULL) {
-#pragma unused(server_certs)
- err = SSLCopyPeerTrust(connssl->ssl_ctx, &trust);
- /* For some reason, SSLCopyPeerTrust() can return noErr and yet return
- a null trust, so be on guard for that: */
- if(err == noErr && trust) {
- count = SecTrustGetCertificateCount(trust);
- for(i = 0L ; i < count ; i++) {
- server_cert = SecTrustGetCertificateAtIndex(trust, i);
- server_cert_summary = CopyCertSubject(server_cert);
- memset(server_cert_summary_c, 0, 128);
- if(CFStringGetCString(server_cert_summary,
- server_cert_summary_c,
- 128,
- kCFStringEncodingUTF8)) {
- infof(data, "Server certificate: %s\n", server_cert_summary_c);
- }
- CFRelease(server_cert_summary);
- }
- CFRelease(trust);
- }
- }
- else {
-#if CURL_SUPPORT_MAC_10_8
- err = SSLCopyPeerCertificates(connssl->ssl_ctx, &server_certs);
- /* Just in case SSLCopyPeerCertificates() returns null too... */
- if(err == noErr && server_certs) {
- count = CFArrayGetCount(server_certs);
- for(i = 0L ; i < count ; i++) {
- server_cert = (SecCertificateRef)CFArrayGetValueAtIndex(server_certs,
- i);
-
- server_cert_summary = CopyCertSubject(server_cert);
- memset(server_cert_summary_c, 0, 128);
- if(CFStringGetCString(server_cert_summary,
- server_cert_summary_c,
- 128,
- kCFStringEncodingUTF8)) {
- infof(data, "Server certificate: %s\n", server_cert_summary_c);
- }
- CFRelease(server_cert_summary);
- }
- CFRelease(server_certs);
- }
-#endif /* CURL_SUPPORT_MAC_10_8 */
- }
-#endif /* CURL_BUILD_IOS */
-#else
-#pragma unused(trust)
- err = SSLCopyPeerCertificates(connssl->ssl_ctx, &server_certs);
- if(err == noErr) {
- count = CFArrayGetCount(server_certs);
- for(i = 0L ; i < count ; i++) {
- server_cert = (SecCertificateRef)CFArrayGetValueAtIndex(server_certs, i);
- server_cert_summary = CopyCertSubject(server_cert);
- memset(server_cert_summary_c, 0, 128);
- if(CFStringGetCString(server_cert_summary,
- server_cert_summary_c,
- 128,
- kCFStringEncodingUTF8)) {
- infof(data, "Server certificate: %s\n", server_cert_summary_c);
- }
- CFRelease(server_cert_summary);
- }
- CFRelease(server_certs);
- }
-#endif /* CURL_BUILD_MAC_10_7 || CURL_BUILD_IOS */
-
- connssl->connecting_state = ssl_connect_done;
- return CURLE_OK;
-}
-
-static Curl_recv darwinssl_recv;
-static Curl_send darwinssl_send;
-
-static CURLcode
-darwinssl_connect_common(struct connectdata *conn,
- int sockindex,
- bool nonblocking,
- bool *done)
-{
- CURLcode retcode;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
- long timeout_ms;
- int what;
-
- /* check if the connection has already been established */
- if(ssl_connection_complete == connssl->state) {
- *done = TRUE;
- return CURLE_OK;
- }
-
- if(ssl_connect_1==connssl->connecting_state) {
- /* Find out how much more time we're allowed */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- retcode = darwinssl_connect_step1(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- while(ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state) {
-
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- /* if ssl is expecting something, check if it's available. */
- if(connssl->connecting_state == ssl_connect_2_reading
- || connssl->connecting_state == ssl_connect_2_writing) {
-
- curl_socket_t writefd = ssl_connect_2_writing ==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
- curl_socket_t readfd = ssl_connect_2_reading ==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
-
- what = Curl_socket_ready(readfd, writefd, nonblocking?0:timeout_ms);
- if(what < 0) {
- /* fatal error */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- return CURLE_SSL_CONNECT_ERROR;
- }
- else if(0 == what) {
- if(nonblocking) {
- *done = FALSE;
- return CURLE_OK;
- }
- else {
- /* timeout */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- }
- /* socket is readable or writable */
- }
-
- /* Run transaction, and return to the caller if it failed or if this
- * connection is done nonblocking and this loop would execute again. This
- * permits the owner of a multi handle to abort a connection attempt
- * before step2 has completed while ensuring that a client using select()
- * or epoll() will always have a valid fdset to wait on.
- */
- retcode = darwinssl_connect_step2(conn, sockindex);
- if(retcode || (nonblocking &&
- (ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state)))
- return retcode;
-
- } /* repeat step2 until all transactions are done. */
-
-
- if(ssl_connect_3==connssl->connecting_state) {
- retcode = darwinssl_connect_step3(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- if(ssl_connect_done==connssl->connecting_state) {
- connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = darwinssl_recv;
- conn->send[sockindex] = darwinssl_send;
- *done = TRUE;
- }
- else
- *done = FALSE;
-
- /* Reset our connect state machine */
- connssl->connecting_state = ssl_connect_1;
-
- return CURLE_OK;
-}
-
-CURLcode
-Curl_darwinssl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- return darwinssl_connect_common(conn, sockindex, TRUE, done);
-}
-
-CURLcode
-Curl_darwinssl_connect(struct connectdata *conn,
- int sockindex)
-{
- CURLcode retcode;
- bool done = FALSE;
-
- retcode = darwinssl_connect_common(conn, sockindex, FALSE, &done);
-
- if(retcode)
- return retcode;
-
- DEBUGASSERT(done);
-
- return CURLE_OK;
-}
-
-void Curl_darwinssl_close(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- if(connssl->ssl_ctx) {
- (void)SSLClose(connssl->ssl_ctx);
-#if CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS
- if(SSLCreateContext != NULL)
- CFRelease(connssl->ssl_ctx);
-#if CURL_SUPPORT_MAC_10_8
- else
- (void)SSLDisposeContext(connssl->ssl_ctx);
-#endif /* CURL_SUPPORT_MAC_10_8 */
-#else
- (void)SSLDisposeContext(connssl->ssl_ctx);
-#endif /* CURL_BUILD_MAC_10_8 || CURL_BUILD_IOS */
- connssl->ssl_ctx = NULL;
- }
- connssl->ssl_sockfd = 0;
-}
-
-void Curl_darwinssl_close_all(struct SessionHandle *data)
-{
- /* SecureTransport doesn't separate sessions from contexts, so... */
- (void)data;
-}
-
-int Curl_darwinssl_shutdown(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct SessionHandle *data = conn->data;
- ssize_t nread;
- int what;
- int rc;
- char buf[120];
-
- if(!connssl->ssl_ctx)
- return 0;
-
- if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
- return 0;
-
- Curl_darwinssl_close(conn, sockindex);
-
- rc = 0;
-
- what = Curl_socket_ready(conn->sock[sockindex],
- CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
-
- for(;;) {
- if(what < 0) {
- /* anything that gets here is fatally bad */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- rc = -1;
- break;
- }
-
- if(!what) { /* timeout */
- failf(data, "SSL shutdown timeout");
- break;
- }
-
- /* Something to read, let's do it and hope that it is the close
- notify alert from the server. No way to SSL_Read now, so use read(). */
-
- nread = read(conn->sock[sockindex], buf, sizeof(buf));
-
- if(nread < 0) {
- failf(data, "read: %s", strerror(errno));
- rc = -1;
- }
-
- if(nread <= 0)
- break;
-
- what = Curl_socket_ready(conn->sock[sockindex], CURL_SOCKET_BAD, 0);
- }
-
- return rc;
-}
-
-void Curl_darwinssl_session_free(void *ptr)
-{
- /* ST, as of iOS 5 and Mountain Lion, has no public method of deleting a
- cached session ID inside the Security framework. There is a private
- function that does this, but I don't want to have to explain to you why I
- got your application rejected from the App Store due to the use of a
- private API, so the best we can do is free up our own char array that we
- created way back in darwinssl_connect_step1... */
- Curl_safefree(ptr);
-}
-
-size_t Curl_darwinssl_version(char *buffer, size_t size)
-{
- return snprintf(buffer, size, "SecureTransport");
-}
-
-/*
- * This function uses SSLGetSessionState to determine connection status.
- *
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-int Curl_darwinssl_check_cxn(struct connectdata *conn)
-{
- struct ssl_connect_data *connssl = &conn->ssl[FIRSTSOCKET];
- OSStatus err;
- SSLSessionState state;
-
- if(connssl->ssl_ctx) {
- err = SSLGetSessionState(connssl->ssl_ctx, &state);
- if(err == noErr)
- return state == kSSLConnected || state == kSSLHandshake;
- return -1;
- }
- return 0;
-}
-
-bool Curl_darwinssl_data_pending(const struct connectdata *conn,
- int connindex)
-{
- const struct ssl_connect_data *connssl = &conn->ssl[connindex];
- OSStatus err;
- size_t buffer;
-
- if(connssl->ssl_ctx) { /* SSL is in use */
- err = SSLGetBufferedReadSize(connssl->ssl_ctx, &buffer);
- if(err == noErr)
- return buffer > 0UL;
- return false;
- }
- else
- return false;
-}
-
-int Curl_darwinssl_random(unsigned char *entropy,
- size_t length)
-{
- /* arc4random_buf() isn't available on cats older than Lion, so let's
- do this manually for the benefit of the older cats. */
- size_t i;
- u_int32_t random_number = 0;
-
- for(i = 0 ; i < length ; i++) {
- if(i % sizeof(u_int32_t) == 0)
- random_number = arc4random();
- entropy[i] = random_number & 0xFF;
- random_number >>= 8;
- }
- i = random_number = 0;
- return 0;
-}
-
-void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum, /* output */
- size_t md5len)
-{
- (void)md5len;
- (void)CC_MD5(tmp, (CC_LONG)tmplen, md5sum);
-}
-
-static ssize_t darwinssl_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *curlcode)
-{
- /*struct SessionHandle *data = conn->data;*/
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- size_t processed = 0UL;
- OSStatus err;
-
- /* The SSLWrite() function works a little differently than expected. The
- fourth argument (processed) is currently documented in Apple's
- documentation as: "On return, the length, in bytes, of the data actually
- written."
-
- Now, one could interpret that as "written to the socket," but actually,
- it returns the amount of data that was written to a buffer internal to
- the SSLContextRef instead. So it's possible for SSLWrite() to return
- errSSLWouldBlock and a number of bytes "written" because those bytes were
- encrypted and written to a buffer, not to the socket.
-
- So if this happens, then we need to keep calling SSLWrite() over and
- over again with no new data until it quits returning errSSLWouldBlock. */
-
- /* Do we have buffered data to write from the last time we were called? */
- if(connssl->ssl_write_buffered_length) {
- /* Write the buffered data: */
- err = SSLWrite(connssl->ssl_ctx, NULL, 0UL, &processed);
- switch (err) {
- case noErr:
- /* processed is always going to be 0 because we didn't write to
- the buffer, so return how much was written to the socket */
- processed = connssl->ssl_write_buffered_length;
- connssl->ssl_write_buffered_length = 0UL;
- break;
- case errSSLWouldBlock: /* argh, try again */
- *curlcode = CURLE_AGAIN;
- return -1L;
- default:
- failf(conn->data, "SSLWrite() returned error %d", err);
- *curlcode = CURLE_SEND_ERROR;
- return -1L;
- }
- }
- else {
- /* We've got new data to write: */
- err = SSLWrite(connssl->ssl_ctx, mem, len, &processed);
- if(err != noErr) {
- switch (err) {
- case errSSLWouldBlock:
- /* Data was buffered but not sent, we have to tell the caller
- to try sending again, and remember how much was buffered */
- connssl->ssl_write_buffered_length = len;
- *curlcode = CURLE_AGAIN;
- return -1L;
- default:
- failf(conn->data, "SSLWrite() returned error %d", err);
- *curlcode = CURLE_SEND_ERROR;
- return -1L;
- }
- }
- }
- return (ssize_t)processed;
-}
-
-static ssize_t darwinssl_recv(struct connectdata *conn,
- int num,
- char *buf,
- size_t buffersize,
- CURLcode *curlcode)
-{
- /*struct SessionHandle *data = conn->data;*/
- struct ssl_connect_data *connssl = &conn->ssl[num];
- size_t processed = 0UL;
- OSStatus err = SSLRead(connssl->ssl_ctx, buf, buffersize, &processed);
-
- if(err != noErr) {
- switch (err) {
- case errSSLWouldBlock: /* return how much we read (if anything) */
- if(processed)
- return (ssize_t)processed;
- *curlcode = CURLE_AGAIN;
- return -1L;
- break;
-
- /* errSSLClosedGraceful - server gracefully shut down the SSL session
- errSSLClosedNoNotify - server hung up on us instead of sending a
- closure alert notice, read() is returning 0
- Either way, inform the caller that the server disconnected. */
- case errSSLClosedGraceful:
- case errSSLClosedNoNotify:
- *curlcode = CURLE_OK;
- return -1L;
- break;
-
- default:
- failf(conn->data, "SSLRead() return error %d", err);
- *curlcode = CURLE_RECV_ERROR;
- return -1L;
- break;
- }
- }
- return (ssize_t)processed;
-}
-
-#endif /* USE_DARWINSSL */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/curl_darwinssl.h b/external/libcurl_android/jni/libcurl/lib/vtls/curl_darwinssl.h
deleted file mode 100755
index f5c03d83..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/curl_darwinssl.h
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef HEADER_CURL_DARWINSSL_H
-#define HEADER_CURL_DARWINSSL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012 - 2014, Nick Zitzmann, <nickzman@gmail.com>.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifdef USE_DARWINSSL
-
-CURLcode Curl_darwinssl_connect(struct connectdata *conn, int sockindex);
-
-CURLcode Curl_darwinssl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done);
-
-/* this function doesn't actually do anything */
-void Curl_darwinssl_close_all(struct SessionHandle *data);
-
-/* close a SSL connection */
-void Curl_darwinssl_close(struct connectdata *conn, int sockindex);
-
-void Curl_darwinssl_session_free(void *ptr);
-size_t Curl_darwinssl_version(char *buffer, size_t size);
-int Curl_darwinssl_shutdown(struct connectdata *conn, int sockindex);
-int Curl_darwinssl_check_cxn(struct connectdata *conn);
-bool Curl_darwinssl_data_pending(const struct connectdata *conn,
- int connindex);
-
-int Curl_darwinssl_random(unsigned char *entropy,
- size_t length);
-void Curl_darwinssl_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum, /* output */
- size_t md5len);
-
-/* this backend provides these functions: */
-#define have_curlssl_md5sum 1
-
-/* API setup for SecureTransport */
-#define curlssl_init() (1)
-#define curlssl_cleanup() Curl_nop_stmt
-#define curlssl_connect Curl_darwinssl_connect
-#define curlssl_connect_nonblocking Curl_darwinssl_connect_nonblocking
-#define curlssl_session_free(x) Curl_darwinssl_session_free(x)
-#define curlssl_close_all Curl_darwinssl_close_all
-#define curlssl_close Curl_darwinssl_close
-#define curlssl_shutdown(x,y) 0
-#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_NOT_BUILT_IN)
-#define curlssl_set_engine_default(x) (x=x, CURLE_NOT_BUILT_IN)
-#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_version Curl_darwinssl_version
-#define curlssl_check_cxn Curl_darwinssl_check_cxn
-#define curlssl_data_pending(x,y) Curl_darwinssl_data_pending(x, y)
-#define curlssl_random(x,y,z) Curl_darwinssl_random(y,z)
-#define curlssl_md5sum(a,b,c,d) Curl_darwinssl_md5sum(a,b,c,d)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_DARWINSSL
-
-#endif /* USE_DARWINSSL */
-#endif /* HEADER_CURL_DARWINSSL_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/curl_schannel.c b/external/libcurl_android/jni/libcurl/lib/vtls/curl_schannel.c
deleted file mode 100755
index e4e595ea..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/curl_schannel.c
+++ /dev/null
@@ -1,1346 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012 - 2014, Marc Hoersken, <info@marc-hoersken.de>
- * Copyright (C) 2012, Mark Salisbury, <mark.salisbury@hp.com>
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Source file for all SChannel-specific code for the TLS/SSL layer. No code
- * but vtls.c should ever call or use these functions.
- *
- */
-
-/*
- * Based upon the PolarSSL implementation in polarssl.c and polarssl.h:
- * Copyright (C) 2010, 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- *
- * Based upon the CyaSSL implementation in cyassl.c and cyassl.h:
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * Thanks for code and inspiration!
- */
-
-/*
- * TODO list for TLS/SSL implementation:
- * - implement client certificate authentication
- * - implement custom server certificate validation
- * - implement cipher/algorithm option
- *
- * Related articles on MSDN:
- * - Getting a Certificate for Schannel
- * http://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx
- * - Specifying Schannel Ciphers and Cipher Strengths
- * http://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_SCHANNEL
-
-#ifndef USE_WINDOWS_SSPI
-# error "Can't compile SCHANNEL support without SSPI."
-#endif
-
-#include "curl_sspi.h"
-#include "curl_schannel.h"
-#include "vtls.h"
-#include "sendf.h"
-#include "connect.h" /* for the connect timeout */
-#include "strerror.h"
-#include "select.h" /* for the socket readyness */
-#include "inet_pton.h" /* for IP addr SNI check */
-#include "curl_multibyte.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* Uncomment to force verbose output
- * #define infof(x, y, ...) printf(y, __VA_ARGS__)
- * #define failf(x, y, ...) printf(y, __VA_ARGS__)
- */
-
-static Curl_recv schannel_recv;
-static Curl_send schannel_send;
-
-#ifdef _WIN32_WCE
-static CURLcode verify_certificate(struct connectdata *conn, int sockindex);
-#endif
-
-static void InitSecBuffer(SecBuffer *buffer, unsigned long BufType,
- void *BufDataPtr, unsigned long BufByteSize)
-{
- buffer->cbBuffer = BufByteSize;
- buffer->BufferType = BufType;
- buffer->pvBuffer = BufDataPtr;
-}
-
-static void InitSecBufferDesc(SecBufferDesc *desc, SecBuffer *BufArr,
- unsigned long NumArrElem)
-{
- desc->ulVersion = SECBUFFER_VERSION;
- desc->pBuffers = BufArr;
- desc->cBuffers = NumArrElem;
-}
-
-static CURLcode
-schannel_connect_step1(struct connectdata *conn, int sockindex)
-{
- ssize_t written = -1;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- SecBuffer outbuf;
- SecBufferDesc outbuf_desc;
- SCHANNEL_CRED schannel_cred;
- SECURITY_STATUS sspi_status = SEC_E_OK;
- struct curl_schannel_cred *old_cred = NULL;
- struct in_addr addr;
-#ifdef ENABLE_IPV6
- struct in6_addr addr6;
-#endif
- TCHAR *host_name;
- CURLcode code;
-
- infof(data, "schannel: SSL/TLS connection with %s port %hu (step 1/3)\n",
- conn->host.name, conn->remote_port);
-
- /* check for an existing re-usable credential handle */
- if(!Curl_ssl_getsessionid(conn, (void**)&old_cred, NULL)) {
- connssl->cred = old_cred;
- infof(data, "schannel: re-using existing credential handle\n");
- }
- else {
- /* setup Schannel API options */
- memset(&schannel_cred, 0, sizeof(schannel_cred));
- schannel_cred.dwVersion = SCHANNEL_CRED_VERSION;
-
- if(data->set.ssl.verifypeer) {
-#ifdef _WIN32_WCE
- /* certificate validation on CE doesn't seem to work right; we'll
- do it following a more manual process. */
- schannel_cred.dwFlags = SCH_CRED_MANUAL_CRED_VALIDATION |
- SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
- SCH_CRED_IGNORE_REVOCATION_OFFLINE;
-#else
- schannel_cred.dwFlags = SCH_CRED_AUTO_CRED_VALIDATION |
- SCH_CRED_REVOCATION_CHECK_CHAIN;
-#endif
- infof(data, "schannel: checking server certificate revocation\n");
- }
- else {
- schannel_cred.dwFlags = SCH_CRED_MANUAL_CRED_VALIDATION |
- SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
- SCH_CRED_IGNORE_REVOCATION_OFFLINE;
- infof(data, "schannel: disable server certificate revocation checks\n");
- }
-
- if(!data->set.ssl.verifyhost) {
- schannel_cred.dwFlags |= SCH_CRED_NO_SERVERNAME_CHECK;
- infof(data, "schannel: verifyhost setting prevents Schannel from "
- "comparing the supplied target name with the subject "
- "names in server certificates. Also disables SNI.\n");
- }
-
- switch(data->set.ssl.version) {
- case CURL_SSLVERSION_TLSv1:
- schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_0_CLIENT |
- SP_PROT_TLS1_1_CLIENT |
- SP_PROT_TLS1_2_CLIENT;
- break;
- case CURL_SSLVERSION_TLSv1_0:
- schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_0_CLIENT;
- break;
- case CURL_SSLVERSION_TLSv1_1:
- schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_1_CLIENT;
- break;
- case CURL_SSLVERSION_TLSv1_2:
- schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_2_CLIENT;
- break;
- case CURL_SSLVERSION_SSLv3:
- schannel_cred.grbitEnabledProtocols = SP_PROT_SSL3_CLIENT;
- break;
- case CURL_SSLVERSION_SSLv2:
- schannel_cred.grbitEnabledProtocols = SP_PROT_SSL2_CLIENT;
- break;
- default:
- schannel_cred.grbitEnabledProtocols = SP_PROT_TLS1_0_CLIENT |
- SP_PROT_TLS1_1_CLIENT |
- SP_PROT_TLS1_2_CLIENT |
- SP_PROT_SSL3_CLIENT;
- break;
- }
-
- /* allocate memory for the re-usable credential handle */
- connssl->cred = (struct curl_schannel_cred *)
- malloc(sizeof(struct curl_schannel_cred));
- if(!connssl->cred) {
- failf(data, "schannel: unable to allocate memory");
- return CURLE_OUT_OF_MEMORY;
- }
- memset(connssl->cred, 0, sizeof(struct curl_schannel_cred));
-
- /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa374716.aspx */
- sspi_status = s_pSecFn->AcquireCredentialsHandle(NULL, (TCHAR *)UNISP_NAME,
- SECPKG_CRED_OUTBOUND, NULL, &schannel_cred, NULL, NULL,
- &connssl->cred->cred_handle, &connssl->cred->time_stamp);
-
- if(sspi_status != SEC_E_OK) {
- if(sspi_status == SEC_E_WRONG_PRINCIPAL)
- failf(data, "schannel: SNI or certificate check failed: %s",
- Curl_sspi_strerror(conn, sspi_status));
- else
- failf(data, "schannel: AcquireCredentialsHandle failed: %s",
- Curl_sspi_strerror(conn, sspi_status));
- Curl_safefree(connssl->cred);
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-
- /* Warn if SNI is disabled due to use of an IP address */
- if(Curl_inet_pton(AF_INET, conn->host.name, &addr)
-#ifdef ENABLE_IPV6
- || Curl_inet_pton(AF_INET6, conn->host.name, &addr6)
-#endif
- ) {
- infof(data, "schannel: using IP address, SNI is not supported by OS.\n");
- }
-
- /* setup output buffer */
- InitSecBuffer(&outbuf, SECBUFFER_EMPTY, NULL, 0);
- InitSecBufferDesc(&outbuf_desc, &outbuf, 1);
-
- /* setup request flags */
- connssl->req_flags = ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT |
- ISC_REQ_CONFIDENTIALITY | ISC_REQ_ALLOCATE_MEMORY |
- ISC_REQ_STREAM;
-
- /* allocate memory for the security context handle */
- connssl->ctxt = (struct curl_schannel_ctxt *)
- malloc(sizeof(struct curl_schannel_ctxt));
- if(!connssl->ctxt) {
- failf(data, "schannel: unable to allocate memory");
- return CURLE_OUT_OF_MEMORY;
- }
- memset(connssl->ctxt, 0, sizeof(struct curl_schannel_ctxt));
-
- host_name = Curl_convert_UTF8_to_tchar(conn->host.name);
- if(!host_name)
- return CURLE_OUT_OF_MEMORY;
-
- /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa375924.aspx */
-
- sspi_status = s_pSecFn->InitializeSecurityContext(
- &connssl->cred->cred_handle, NULL, host_name,
- connssl->req_flags, 0, 0, NULL, 0, &connssl->ctxt->ctxt_handle,
- &outbuf_desc, &connssl->ret_flags, &connssl->ctxt->time_stamp);
-
- Curl_unicodefree(host_name);
-
- if(sspi_status != SEC_I_CONTINUE_NEEDED) {
- if(sspi_status == SEC_E_WRONG_PRINCIPAL)
- failf(data, "schannel: SNI or certificate check failed: %s",
- Curl_sspi_strerror(conn, sspi_status));
- else
- failf(data, "schannel: initial InitializeSecurityContext failed: %s",
- Curl_sspi_strerror(conn, sspi_status));
- Curl_safefree(connssl->ctxt);
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- infof(data, "schannel: sending initial handshake data: "
- "sending %lu bytes...\n", outbuf.cbBuffer);
-
- /* send initial handshake data which is now stored in output buffer */
- code = Curl_write_plain(conn, conn->sock[sockindex], outbuf.pvBuffer,
- outbuf.cbBuffer, &written);
- s_pSecFn->FreeContextBuffer(outbuf.pvBuffer);
- if((code != CURLE_OK) || (outbuf.cbBuffer != (size_t)written)) {
- failf(data, "schannel: failed to send initial handshake data: "
- "sent %zd of %lu bytes", written, outbuf.cbBuffer);
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- infof(data, "schannel: sent initial handshake data: "
- "sent %zd bytes\n", written);
-
- /* continue to second handshake step */
- connssl->connecting_state = ssl_connect_2;
-
- return CURLE_OK;
-}
-
-static CURLcode
-schannel_connect_step2(struct connectdata *conn, int sockindex)
-{
- int i;
- ssize_t nread = -1, written = -1;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- SecBuffer outbuf[2];
- SecBufferDesc outbuf_desc;
- SecBuffer inbuf[2];
- SecBufferDesc inbuf_desc;
- SECURITY_STATUS sspi_status = SEC_E_OK;
- TCHAR *host_name;
- CURLcode code;
- bool doread;
-
- doread = (connssl->connecting_state != ssl_connect_2_writing) ? TRUE : FALSE;
-
- infof(data, "schannel: SSL/TLS connection with %s port %hu (step 2/3)\n",
- conn->host.name, conn->remote_port);
-
- if(!connssl->cred || !connssl->ctxt)
- return CURLE_SSL_CONNECT_ERROR;
-
- /* buffer to store previously received and encrypted data */
- if(connssl->encdata_buffer == NULL) {
- connssl->encdata_offset = 0;
- connssl->encdata_length = CURL_SCHANNEL_BUFFER_INIT_SIZE;
- connssl->encdata_buffer = malloc(connssl->encdata_length);
- if(connssl->encdata_buffer == NULL) {
- failf(data, "schannel: unable to allocate memory");
- return CURLE_OUT_OF_MEMORY;
- }
- }
-
- /* if we need a bigger buffer to read a full message, increase buffer now */
- if(connssl->encdata_length - connssl->encdata_offset <
- CURL_SCHANNEL_BUFFER_FREE_SIZE) {
- /* increase internal encrypted data buffer */
- connssl->encdata_length *= CURL_SCHANNEL_BUFFER_STEP_FACTOR;
- connssl->encdata_buffer = realloc(connssl->encdata_buffer,
- connssl->encdata_length);
-
- if(connssl->encdata_buffer == NULL) {
- failf(data, "schannel: unable to re-allocate memory");
- return CURLE_OUT_OF_MEMORY;
- }
- }
-
- for(;;) {
- if(doread) {
- /* read encrypted handshake data from socket */
- code = Curl_read_plain(conn->sock[sockindex],
- (char *) (connssl->encdata_buffer + connssl->encdata_offset),
- connssl->encdata_length - connssl->encdata_offset,
- &nread);
- if(code == CURLE_AGAIN) {
- if(connssl->connecting_state != ssl_connect_2_writing)
- connssl->connecting_state = ssl_connect_2_reading;
- infof(data, "schannel: failed to receive handshake, "
- "need more data\n");
- return CURLE_OK;
- }
- else if((code != CURLE_OK) || (nread == 0)) {
- failf(data, "schannel: failed to receive handshake, "
- "SSL/TLS connection failed");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* increase encrypted data buffer offset */
- connssl->encdata_offset += nread;
- }
-
- infof(data, "schannel: encrypted data buffer: offset %zu length %zu\n",
- connssl->encdata_offset, connssl->encdata_length);
-
- /* setup input buffers */
- InitSecBuffer(&inbuf[0], SECBUFFER_TOKEN, malloc(connssl->encdata_offset),
- curlx_uztoul(connssl->encdata_offset));
- InitSecBuffer(&inbuf[1], SECBUFFER_EMPTY, NULL, 0);
- InitSecBufferDesc(&inbuf_desc, inbuf, 2);
-
- /* setup output buffers */
- InitSecBuffer(&outbuf[0], SECBUFFER_TOKEN, NULL, 0);
- InitSecBuffer(&outbuf[1], SECBUFFER_ALERT, NULL, 0);
- InitSecBufferDesc(&outbuf_desc, outbuf, 2);
-
- if(inbuf[0].pvBuffer == NULL) {
- failf(data, "schannel: unable to allocate memory");
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* copy received handshake data into input buffer */
- memcpy(inbuf[0].pvBuffer, connssl->encdata_buffer,
- connssl->encdata_offset);
-
- host_name = Curl_convert_UTF8_to_tchar(conn->host.name);
- if(!host_name)
- return CURLE_OUT_OF_MEMORY;
-
- /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa375924.aspx */
-
- sspi_status = s_pSecFn->InitializeSecurityContext(
- &connssl->cred->cred_handle, &connssl->ctxt->ctxt_handle,
- host_name, connssl->req_flags, 0, 0, &inbuf_desc, 0, NULL,
- &outbuf_desc, &connssl->ret_flags, &connssl->ctxt->time_stamp);
-
- Curl_unicodefree(host_name);
-
- /* free buffer for received handshake data */
- Curl_safefree(inbuf[0].pvBuffer);
-
- /* check if the handshake was incomplete */
- if(sspi_status == SEC_E_INCOMPLETE_MESSAGE) {
- connssl->connecting_state = ssl_connect_2_reading;
- infof(data, "schannel: received incomplete message, need more data\n");
- return CURLE_OK;
- }
-
- /* check if the handshake needs to be continued */
- if(sspi_status == SEC_I_CONTINUE_NEEDED || sspi_status == SEC_E_OK) {
- for(i = 0; i < 2; i++) {
- /* search for handshake tokens that need to be send */
- if(outbuf[i].BufferType == SECBUFFER_TOKEN && outbuf[i].cbBuffer > 0) {
- infof(data, "schannel: sending next handshake data: "
- "sending %lu bytes...\n", outbuf[i].cbBuffer);
-
- /* send handshake token to server */
- code = Curl_write_plain(conn, conn->sock[sockindex],
- outbuf[i].pvBuffer, outbuf[i].cbBuffer,
- &written);
- if((code != CURLE_OK) || (outbuf[i].cbBuffer != (size_t)written)) {
- failf(data, "schannel: failed to send next handshake data: "
- "sent %zd of %lu bytes", written, outbuf[i].cbBuffer);
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-
- /* free obsolete buffer */
- if(outbuf[i].pvBuffer != NULL) {
- s_pSecFn->FreeContextBuffer(outbuf[i].pvBuffer);
- }
- }
- }
- else {
- if(sspi_status == SEC_E_WRONG_PRINCIPAL)
- failf(data, "schannel: SNI or certificate check failed: %s",
- Curl_sspi_strerror(conn, sspi_status));
- else
- failf(data, "schannel: next InitializeSecurityContext failed: %s",
- Curl_sspi_strerror(conn, sspi_status));
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* check if there was additional remaining encrypted data */
- if(inbuf[1].BufferType == SECBUFFER_EXTRA && inbuf[1].cbBuffer > 0) {
- infof(data, "schannel: encrypted data length: %lu\n", inbuf[1].cbBuffer);
- /*
- There are two cases where we could be getting extra data here:
- 1) If we're renegotiating a connection and the handshake is already
- complete (from the server perspective), it can encrypted app data
- (not handshake data) in an extra buffer at this point.
- 2) (sspi_status == SEC_I_CONTINUE_NEEDED) We are negotiating a
- connection and this extra data is part of the handshake.
- We should process the data immediately; waiting for the socket to
- be ready may fail since the server is done sending handshake data.
- */
- /* check if the remaining data is less than the total amount
- and therefore begins after the already processed data */
- if(connssl->encdata_offset > inbuf[1].cbBuffer) {
- memmove(connssl->encdata_buffer,
- (connssl->encdata_buffer + connssl->encdata_offset) -
- inbuf[1].cbBuffer, inbuf[1].cbBuffer);
- connssl->encdata_offset = inbuf[1].cbBuffer;
- if(sspi_status == SEC_I_CONTINUE_NEEDED) {
- doread = FALSE;
- continue;
- }
- }
- }
- else {
- connssl->encdata_offset = 0;
- }
- break;
- }
-
- /* check if the handshake needs to be continued */
- if(sspi_status == SEC_I_CONTINUE_NEEDED) {
- connssl->connecting_state = ssl_connect_2_reading;
- return CURLE_OK;
- }
-
- /* check if the handshake is complete */
- if(sspi_status == SEC_E_OK) {
- connssl->connecting_state = ssl_connect_3;
- infof(data, "schannel: SSL/TLS handshake complete\n");
- }
-
-#ifdef _WIN32_WCE
- /* Windows CE doesn't do any server certificate validation.
- We have to do it manually. */
- if(data->set.ssl.verifypeer)
- return verify_certificate(conn, sockindex);
-#endif
-
- return CURLE_OK;
-}
-
-static CURLcode
-schannel_connect_step3(struct connectdata *conn, int sockindex)
-{
- CURLcode retcode = CURLE_OK;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct curl_schannel_cred *old_cred = NULL;
- int incache;
-
- DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
-
- infof(data, "schannel: SSL/TLS connection with %s port %hu (step 3/3)\n",
- conn->host.name, conn->remote_port);
-
- if(!connssl->cred)
- return CURLE_SSL_CONNECT_ERROR;
-
- /* check if the required context attributes are met */
- if(connssl->ret_flags != connssl->req_flags) {
- if(!(connssl->ret_flags & ISC_RET_SEQUENCE_DETECT))
- failf(data, "schannel: failed to setup sequence detection");
- if(!(connssl->ret_flags & ISC_RET_REPLAY_DETECT))
- failf(data, "schannel: failed to setup replay detection");
- if(!(connssl->ret_flags & ISC_RET_CONFIDENTIALITY))
- failf(data, "schannel: failed to setup confidentiality");
- if(!(connssl->ret_flags & ISC_RET_ALLOCATED_MEMORY))
- failf(data, "schannel: failed to setup memory allocation");
- if(!(connssl->ret_flags & ISC_RET_STREAM))
- failf(data, "schannel: failed to setup stream orientation");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* increment the reference counter of the credential/session handle */
- if(connssl->cred && connssl->ctxt) {
- connssl->cred->refcount++;
- infof(data, "schannel: incremented credential handle refcount = %d\n",
- connssl->cred->refcount);
- }
-
- /* save the current session data for possible re-use */
- incache = !(Curl_ssl_getsessionid(conn, (void**)&old_cred, NULL));
- if(incache) {
- if(old_cred != connssl->cred) {
- infof(data, "schannel: old credential handle is stale, removing\n");
- Curl_ssl_delsessionid(conn, (void*)old_cred);
- incache = FALSE;
- }
- }
- if(!incache) {
- retcode = Curl_ssl_addsessionid(conn, (void*)connssl->cred,
- sizeof(struct curl_schannel_cred));
- if(retcode) {
- failf(data, "schannel: failed to store credential handle");
- return retcode;
- }
- else {
- connssl->cred->cached = TRUE;
- infof(data, "schannel: stored credential handle in session cache\n");
- }
- }
-
- connssl->connecting_state = ssl_connect_done;
-
- return CURLE_OK;
-}
-
-static CURLcode
-schannel_connect_common(struct connectdata *conn, int sockindex,
- bool nonblocking, bool *done)
-{
- CURLcode retcode;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
- long timeout_ms;
- int what;
-
- /* check if the connection has already been established */
- if(ssl_connection_complete == connssl->state) {
- *done = TRUE;
- return CURLE_OK;
- }
-
- if(ssl_connect_1 == connssl->connecting_state) {
- /* check out how much more time we're allowed */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL/TLS connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- retcode = schannel_connect_step1(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- while(ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state) {
-
- /* check out how much more time we're allowed */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL/TLS connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- /* if ssl is expecting something, check if it's available. */
- if(connssl->connecting_state == ssl_connect_2_reading
- || connssl->connecting_state == ssl_connect_2_writing) {
-
- curl_socket_t writefd = ssl_connect_2_writing ==
- connssl->connecting_state ? sockfd : CURL_SOCKET_BAD;
- curl_socket_t readfd = ssl_connect_2_reading ==
- connssl->connecting_state ? sockfd : CURL_SOCKET_BAD;
-
- what = Curl_socket_ready(readfd, writefd, nonblocking ? 0 : timeout_ms);
- if(what < 0) {
- /* fatal error */
- failf(data, "select/poll on SSL/TLS socket, errno: %d", SOCKERRNO);
- return CURLE_SSL_CONNECT_ERROR;
- }
- else if(0 == what) {
- if(nonblocking) {
- *done = FALSE;
- return CURLE_OK;
- }
- else {
- /* timeout */
- failf(data, "SSL/TLS connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- }
- /* socket is readable or writable */
- }
-
- /* Run transaction, and return to the caller if it failed or if
- * this connection is part of a multi handle and this loop would
- * execute again. This permits the owner of a multi handle to
- * abort a connection attempt before step2 has completed while
- * ensuring that a client using select() or epoll() will always
- * have a valid fdset to wait on.
- */
- retcode = schannel_connect_step2(conn, sockindex);
- if(retcode || (nonblocking &&
- (ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state)))
- return retcode;
-
- } /* repeat step2 until all transactions are done. */
-
- if(ssl_connect_3 == connssl->connecting_state) {
- retcode = schannel_connect_step3(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- if(ssl_connect_done == connssl->connecting_state) {
- connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = schannel_recv;
- conn->send[sockindex] = schannel_send;
- *done = TRUE;
- }
- else
- *done = FALSE;
-
- /* reset our connection state machine */
- connssl->connecting_state = ssl_connect_1;
-
- return CURLE_OK;
-}
-
-static ssize_t
-schannel_send(struct connectdata *conn, int sockindex,
- const void *buf, size_t len, CURLcode *err)
-{
- ssize_t written = -1;
- size_t data_len = 0;
- unsigned char *data = NULL;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- SecBuffer outbuf[4];
- SecBufferDesc outbuf_desc;
- SECURITY_STATUS sspi_status = SEC_E_OK;
- CURLcode code;
-
- /* check if the maximum stream sizes were queried */
- if(connssl->stream_sizes.cbMaximumMessage == 0) {
- sspi_status = s_pSecFn->QueryContextAttributes(
- &connssl->ctxt->ctxt_handle,
- SECPKG_ATTR_STREAM_SIZES,
- &connssl->stream_sizes);
- if(sspi_status != SEC_E_OK) {
- *err = CURLE_SEND_ERROR;
- return -1;
- }
- }
-
- /* check if the buffer is longer than the maximum message length */
- if(len > connssl->stream_sizes.cbMaximumMessage) {
- *err = CURLE_SEND_ERROR;
- return -1;
- }
-
- /* calculate the complete message length and allocate a buffer for it */
- data_len = connssl->stream_sizes.cbHeader + len +
- connssl->stream_sizes.cbTrailer;
- data = (unsigned char*) malloc(data_len);
- if(data == NULL) {
- *err = CURLE_OUT_OF_MEMORY;
- return -1;
- }
-
- /* setup output buffers (header, data, trailer, empty) */
- InitSecBuffer(&outbuf[0], SECBUFFER_STREAM_HEADER,
- data, connssl->stream_sizes.cbHeader);
- InitSecBuffer(&outbuf[1], SECBUFFER_DATA,
- data + connssl->stream_sizes.cbHeader, curlx_uztoul(len));
- InitSecBuffer(&outbuf[2], SECBUFFER_STREAM_TRAILER,
- data + connssl->stream_sizes.cbHeader + len,
- connssl->stream_sizes.cbTrailer);
- InitSecBuffer(&outbuf[3], SECBUFFER_EMPTY, NULL, 0);
- InitSecBufferDesc(&outbuf_desc, outbuf, 4);
-
- /* copy data into output buffer */
- memcpy(outbuf[1].pvBuffer, buf, len);
-
- /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa375390.aspx */
- sspi_status = s_pSecFn->EncryptMessage(&connssl->ctxt->ctxt_handle, 0,
- &outbuf_desc, 0);
-
- /* check if the message was encrypted */
- if(sspi_status == SEC_E_OK) {
- written = 0;
-
- /* send the encrypted message including header, data and trailer */
- len = outbuf[0].cbBuffer + outbuf[1].cbBuffer + outbuf[2].cbBuffer;
-
- /*
- It's important to send the full message which includes the header,
- encrypted payload, and trailer. Until the client receives all the
- data a coherent message has not been delivered and the client
- can't read any of it.
-
- If we wanted to buffer the unwritten encrypted bytes, we would
- tell the client that all data it has requested to be sent has been
- sent. The unwritten encrypted bytes would be the first bytes to
- send on the next invocation.
- Here's the catch with this - if we tell the client that all the
- bytes have been sent, will the client call this method again to
- send the buffered data? Looking at who calls this function, it
- seems the answer is NO.
- */
-
- /* send entire message or fail */
- while(len > (size_t)written) {
- ssize_t this_write;
- long timeleft;
- int what;
-
- this_write = 0;
-
- timeleft = Curl_timeleft(conn->data, NULL, FALSE);
- if(timeleft < 0) {
- /* we already got the timeout */
- failf(conn->data, "schannel: timed out sending data "
- "(bytes sent: %zd)", written);
- *err = CURLE_OPERATION_TIMEDOUT;
- written = -1;
- break;
- }
-
- what = Curl_socket_ready(CURL_SOCKET_BAD, conn->sock[sockindex],
- timeleft);
- if(what < 0) {
- /* fatal error */
- failf(conn->data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- *err = CURLE_SEND_ERROR;
- written = -1;
- break;
- }
- else if(0 == what) {
- failf(conn->data, "schannel: timed out sending data "
- "(bytes sent: %zd)", written);
- *err = CURLE_OPERATION_TIMEDOUT;
- written = -1;
- break;
- }
- /* socket is writable */
-
- code = Curl_write_plain(conn, conn->sock[sockindex], data + written,
- len - written, &this_write);
- if(code == CURLE_AGAIN)
- continue;
- else if(code != CURLE_OK) {
- *err = code;
- written = -1;
- break;
- }
-
- written += this_write;
- }
- }
- else if(sspi_status == SEC_E_INSUFFICIENT_MEMORY) {
- *err = CURLE_OUT_OF_MEMORY;
- }
- else{
- *err = CURLE_SEND_ERROR;
- }
-
- Curl_safefree(data);
-
- if(len == (size_t)written)
- /* Encrypted message including header, data and trailer entirely sent.
- The return value is the number of unencrypted bytes that were sent. */
- written = outbuf[1].cbBuffer;
-
- return written;
-}
-
-static ssize_t
-schannel_recv(struct connectdata *conn, int sockindex,
- char *buf, size_t len, CURLcode *err)
-{
- size_t size = 0;
- ssize_t nread = 0, ret = -1;
- CURLcode retcode;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- bool done = FALSE;
- SecBuffer inbuf[4];
- SecBufferDesc inbuf_desc;
- SECURITY_STATUS sspi_status = SEC_E_OK;
-
- infof(data, "schannel: client wants to read %zu bytes\n", len);
- *err = CURLE_OK;
-
- /* buffer to store previously received and decrypted data */
- if(connssl->decdata_buffer == NULL) {
- connssl->decdata_offset = 0;
- connssl->decdata_length = CURL_SCHANNEL_BUFFER_INIT_SIZE;
- connssl->decdata_buffer = malloc(connssl->decdata_length);
- if(connssl->decdata_buffer == NULL) {
- failf(data, "schannel: unable to allocate memory");
- *err = CURLE_OUT_OF_MEMORY;
- return -1;
- }
- }
-
- /* increase buffer in order to fit the requested amount of data */
- while(connssl->encdata_length - connssl->encdata_offset <
- CURL_SCHANNEL_BUFFER_FREE_SIZE || connssl->encdata_length < len) {
- /* increase internal encrypted data buffer */
- connssl->encdata_length *= CURL_SCHANNEL_BUFFER_STEP_FACTOR;
- connssl->encdata_buffer = realloc(connssl->encdata_buffer,
- connssl->encdata_length);
-
- if(connssl->encdata_buffer == NULL) {
- failf(data, "schannel: unable to re-allocate memory");
- *err = CURLE_OUT_OF_MEMORY;
- return -1;
- }
- }
-
- /* read encrypted data from socket */
- infof(data, "schannel: encrypted data buffer: offset %zu length %zu\n",
- connssl->encdata_offset, connssl->encdata_length);
- size = connssl->encdata_length - connssl->encdata_offset;
- if(size > 0) {
- *err = Curl_read_plain(conn->sock[sockindex],
- (char *) (connssl->encdata_buffer + connssl->encdata_offset),
- size, &nread);
- /* check for received data */
- if(*err != CURLE_OK)
- ret = -1;
- else {
- if(nread > 0)
- /* increase encrypted data buffer offset */
- connssl->encdata_offset += nread;
- ret = nread;
- }
- infof(data, "schannel: encrypted data got %zd\n", ret);
- }
-
- infof(data, "schannel: encrypted data buffer: offset %zu length %zu\n",
- connssl->encdata_offset, connssl->encdata_length);
-
- /* check if we still have some data in our buffers */
- while(connssl->encdata_offset > 0 && sspi_status == SEC_E_OK &&
- connssl->decdata_offset < len) {
- /* prepare data buffer for DecryptMessage call */
- InitSecBuffer(&inbuf[0], SECBUFFER_DATA, connssl->encdata_buffer,
- curlx_uztoul(connssl->encdata_offset));
-
- /* we need 3 more empty input buffers for possible output */
- InitSecBuffer(&inbuf[1], SECBUFFER_EMPTY, NULL, 0);
- InitSecBuffer(&inbuf[2], SECBUFFER_EMPTY, NULL, 0);
- InitSecBuffer(&inbuf[3], SECBUFFER_EMPTY, NULL, 0);
-
- InitSecBufferDesc(&inbuf_desc, inbuf, 4);
-
- /* http://msdn.microsoft.com/en-us/library/windows/desktop/aa375348.aspx */
- sspi_status = s_pSecFn->DecryptMessage(&connssl->ctxt->ctxt_handle,
- &inbuf_desc, 0, NULL);
-
- /* check if we need more data */
- if(sspi_status == SEC_E_INCOMPLETE_MESSAGE) {
- infof(data, "schannel: failed to decrypt data, need more data\n");
- *err = CURLE_AGAIN;
- return -1;
- }
-
- /* check if everything went fine (server may want to renegotiate
- context) */
- if(sspi_status == SEC_E_OK || sspi_status == SEC_I_RENEGOTIATE ||
- sspi_status == SEC_I_CONTEXT_EXPIRED) {
- /* check for successfully decrypted data */
- if(inbuf[1].BufferType == SECBUFFER_DATA) {
- infof(data, "schannel: decrypted data length: %lu\n",
- inbuf[1].cbBuffer);
-
- /* increase buffer in order to fit the received amount of data */
- size = inbuf[1].cbBuffer > CURL_SCHANNEL_BUFFER_FREE_SIZE ?
- inbuf[1].cbBuffer : CURL_SCHANNEL_BUFFER_FREE_SIZE;
- while(connssl->decdata_length - connssl->decdata_offset < size ||
- connssl->decdata_length < len) {
- /* increase internal decrypted data buffer */
- connssl->decdata_length *= CURL_SCHANNEL_BUFFER_STEP_FACTOR;
- connssl->decdata_buffer = realloc(connssl->decdata_buffer,
- connssl->decdata_length);
-
- if(connssl->decdata_buffer == NULL) {
- failf(data, "schannel: unable to re-allocate memory");
- *err = CURLE_OUT_OF_MEMORY;
- return -1;
- }
- }
-
- /* copy decrypted data to internal buffer */
- size = inbuf[1].cbBuffer;
- if(size > 0) {
- memcpy(connssl->decdata_buffer + connssl->decdata_offset,
- inbuf[1].pvBuffer, size);
- connssl->decdata_offset += size;
- }
-
- infof(data, "schannel: decrypted data added: %zu\n", size);
- infof(data, "schannel: decrypted data cached: offset %zu length %zu\n",
- connssl->decdata_offset, connssl->decdata_length);
- }
-
- /* check for remaining encrypted data */
- if(inbuf[3].BufferType == SECBUFFER_EXTRA && inbuf[3].cbBuffer > 0) {
- infof(data, "schannel: encrypted data length: %lu\n",
- inbuf[3].cbBuffer);
-
- /* check if the remaining data is less than the total amount
- * and therefore begins after the already processed data
- */
- if(connssl->encdata_offset > inbuf[3].cbBuffer) {
- /* move remaining encrypted data forward to the beginning of
- buffer */
- memmove(connssl->encdata_buffer,
- (connssl->encdata_buffer + connssl->encdata_offset) -
- inbuf[3].cbBuffer, inbuf[3].cbBuffer);
- connssl->encdata_offset = inbuf[3].cbBuffer;
- }
-
- infof(data, "schannel: encrypted data cached: offset %zu length %zu\n",
- connssl->encdata_offset, connssl->encdata_length);
- }
- else{
- /* reset encrypted buffer offset, because there is no data remaining */
- connssl->encdata_offset = 0;
- }
- }
-
- /* check if server wants to renegotiate the connection context */
- if(sspi_status == SEC_I_RENEGOTIATE) {
- infof(data, "schannel: remote party requests SSL/TLS renegotiation\n");
-
- /* begin renegotiation */
- infof(data, "schannel: renegotiating SSL/TLS connection\n");
- connssl->state = ssl_connection_negotiating;
- connssl->connecting_state = ssl_connect_2_writing;
- retcode = schannel_connect_common(conn, sockindex, FALSE, &done);
- if(retcode)
- *err = retcode;
- else {
- infof(data, "schannel: SSL/TLS connection renegotiated\n");
- /* now retry receiving data */
- return schannel_recv(conn, sockindex, buf, len, err);
- }
- }
- }
-
- infof(data, "schannel: decrypted data buffer: offset %zu length %zu\n",
- connssl->decdata_offset, connssl->decdata_length);
-
- /* copy requested decrypted data to supplied buffer */
- size = len < connssl->decdata_offset ? len : connssl->decdata_offset;
- if(size > 0) {
- memcpy(buf, connssl->decdata_buffer, size);
- ret = size;
-
- /* move remaining decrypted data forward to the beginning of buffer */
- memmove(connssl->decdata_buffer, connssl->decdata_buffer + size,
- connssl->decdata_offset - size);
- connssl->decdata_offset -= size;
-
- infof(data, "schannel: decrypted data returned %zd\n", size);
- infof(data, "schannel: decrypted data buffer: offset %zu length %zu\n",
- connssl->decdata_offset, connssl->decdata_length);
- }
-
- /* check if the server closed the connection */
- if(ret <= 0 && ( /* special check for Windows 2000 Professional */
- sspi_status == SEC_I_CONTEXT_EXPIRED || (sspi_status == SEC_E_OK &&
- connssl->encdata_offset > 0 && connssl->encdata_buffer[0] == 0x15))) {
- infof(data, "schannel: server closed the connection\n");
- *err = CURLE_OK;
- return 0;
- }
-
- /* check if something went wrong and we need to return an error */
- if(ret < 0 && sspi_status != SEC_E_OK) {
- infof(data, "schannel: failed to read data from server: %s\n",
- Curl_sspi_strerror(conn, sspi_status));
- *err = CURLE_RECV_ERROR;
- return -1;
- }
-
- return ret;
-}
-
-CURLcode
-Curl_schannel_connect_nonblocking(struct connectdata *conn, int sockindex,
- bool *done)
-{
- return schannel_connect_common(conn, sockindex, TRUE, done);
-}
-
-CURLcode
-Curl_schannel_connect(struct connectdata *conn, int sockindex)
-{
- CURLcode retcode;
- bool done = FALSE;
-
- retcode = schannel_connect_common(conn, sockindex, FALSE, &done);
- if(retcode)
- return retcode;
-
- DEBUGASSERT(done);
-
- return CURLE_OK;
-}
-
-bool Curl_schannel_data_pending(const struct connectdata *conn, int sockindex)
-{
- const struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- if(connssl->use) /* SSL/TLS is in use */
- return (connssl->encdata_offset > 0 ||
- connssl->decdata_offset > 0 ) ? TRUE : FALSE;
- else
- return FALSE;
-}
-
-void Curl_schannel_close(struct connectdata *conn, int sockindex)
-{
- if(conn->ssl[sockindex].use)
- /* if the SSL/TLS channel hasn't been shut down yet, do that now. */
- Curl_ssl_shutdown(conn, sockindex);
-}
-
-int Curl_schannel_shutdown(struct connectdata *conn, int sockindex)
-{
- /* See http://msdn.microsoft.com/en-us/library/windows/desktop/aa380138.aspx
- * Shutting Down an Schannel Connection
- */
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- infof(data, "schannel: shutting down SSL/TLS connection with %s port %hu\n",
- conn->host.name, conn->remote_port);
-
- if(connssl->cred && connssl->ctxt) {
- SecBufferDesc BuffDesc;
- SecBuffer Buffer;
- SECURITY_STATUS sspi_status;
- SecBuffer outbuf;
- SecBufferDesc outbuf_desc;
- CURLcode code;
- TCHAR *host_name;
- DWORD dwshut = SCHANNEL_SHUTDOWN;
-
- InitSecBuffer(&Buffer, SECBUFFER_TOKEN, &dwshut, sizeof(dwshut));
- InitSecBufferDesc(&BuffDesc, &Buffer, 1);
-
- sspi_status = s_pSecFn->ApplyControlToken(&connssl->ctxt->ctxt_handle,
- &BuffDesc);
-
- if(sspi_status != SEC_E_OK)
- failf(data, "schannel: ApplyControlToken failure: %s",
- Curl_sspi_strerror(conn, sspi_status));
-
- host_name = Curl_convert_UTF8_to_tchar(conn->host.name);
- if(!host_name)
- return CURLE_OUT_OF_MEMORY;
-
- /* setup output buffer */
- InitSecBuffer(&outbuf, SECBUFFER_EMPTY, NULL, 0);
- InitSecBufferDesc(&outbuf_desc, &outbuf, 1);
-
- sspi_status = s_pSecFn->InitializeSecurityContext(
- &connssl->cred->cred_handle,
- &connssl->ctxt->ctxt_handle,
- host_name,
- connssl->req_flags,
- 0,
- 0,
- NULL,
- 0,
- &connssl->ctxt->ctxt_handle,
- &outbuf_desc,
- &connssl->ret_flags,
- &connssl->ctxt->time_stamp);
-
- Curl_unicodefree(host_name);
-
- if((sspi_status == SEC_E_OK) || (sspi_status == SEC_I_CONTEXT_EXPIRED)) {
- /* send close message which is in output buffer */
- ssize_t written;
- code = Curl_write_plain(conn, conn->sock[sockindex], outbuf.pvBuffer,
- outbuf.cbBuffer, &written);
-
- s_pSecFn->FreeContextBuffer(outbuf.pvBuffer);
- if((code != CURLE_OK) || (outbuf.cbBuffer != (size_t)written)) {
- infof(data, "schannel: failed to send close msg: %s"
- " (bytes written: %zd)\n", curl_easy_strerror(code), written);
- }
- }
-
- /* free SSPI Schannel API security context handle */
- if(connssl->ctxt) {
- infof(data, "schannel: clear security context handle\n");
- s_pSecFn->DeleteSecurityContext(&connssl->ctxt->ctxt_handle);
- Curl_safefree(connssl->ctxt);
- }
-
- /* free SSPI Schannel API credential handle */
- if(connssl->cred) {
- /* decrement the reference counter of the credential/session handle */
- if(connssl->cred->refcount > 0) {
- connssl->cred->refcount--;
- infof(data, "schannel: decremented credential handle refcount = %d\n",
- connssl->cred->refcount);
- }
-
- /* if the handle was not cached and the refcount is zero */
- if(!connssl->cred->cached && connssl->cred->refcount == 0) {
- infof(data, "schannel: clear credential handle\n");
- s_pSecFn->FreeCredentialsHandle(&connssl->cred->cred_handle);
- Curl_safefree(connssl->cred);
- }
- }
- }
-
- /* free internal buffer for received encrypted data */
- if(connssl->encdata_buffer != NULL) {
- Curl_safefree(connssl->encdata_buffer);
- connssl->encdata_length = 0;
- connssl->encdata_offset = 0;
- }
-
- /* free internal buffer for received decrypted data */
- if(connssl->decdata_buffer != NULL) {
- Curl_safefree(connssl->decdata_buffer);
- connssl->decdata_length = 0;
- connssl->decdata_offset = 0;
- }
-
- return CURLE_OK;
-}
-
-void Curl_schannel_session_free(void *ptr)
-{
- struct curl_schannel_cred *cred = ptr;
-
- if(cred && cred->cached && cred->refcount == 0) {
- s_pSecFn->FreeCredentialsHandle(&cred->cred_handle);
- Curl_safefree(cred);
- }
-}
-
-int Curl_schannel_init(void)
-{
- return (Curl_sspi_global_init() == CURLE_OK ? 1 : 0);
-}
-
-void Curl_schannel_cleanup(void)
-{
- Curl_sspi_global_cleanup();
-}
-
-size_t Curl_schannel_version(char *buffer, size_t size)
-{
- size = snprintf(buffer, size, "WinSSL");
-
- return size;
-}
-
-int Curl_schannel_random(unsigned char *entropy, size_t length)
-{
- HCRYPTPROV hCryptProv = 0;
-
- if(!CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL,
- CRYPT_VERIFYCONTEXT | CRYPT_SILENT))
- return 1;
-
- if(!CryptGenRandom(hCryptProv, (DWORD)length, entropy)) {
- CryptReleaseContext(hCryptProv, 0UL);
- return 1;
- }
-
- CryptReleaseContext(hCryptProv, 0UL);
- return 0;
-}
-
-#ifdef _WIN32_WCE
-static CURLcode verify_certificate(struct connectdata *conn, int sockindex)
-{
- SECURITY_STATUS status;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- CURLcode result = CURLE_OK;
- CERT_CONTEXT *pCertContextServer = NULL;
- const CERT_CHAIN_CONTEXT *pChainContext = NULL;
-
- status = s_pSecFn->QueryContextAttributes(&connssl->ctxt->ctxt_handle,
- SECPKG_ATTR_REMOTE_CERT_CONTEXT,
- &pCertContextServer);
-
- if((status != SEC_E_OK) || (pCertContextServer == NULL)) {
- failf(data, "schannel: Failed to read remote certificate context: %s",
- Curl_sspi_strerror(conn, status));
- result = CURLE_PEER_FAILED_VERIFICATION;
- }
-
- if(result == CURLE_OK) {
- CERT_CHAIN_PARA ChainPara;
- memset(&ChainPara, 0, sizeof(ChainPara));
- ChainPara.cbSize = sizeof(ChainPara);
-
- if(!CertGetCertificateChain(NULL,
- pCertContextServer,
- NULL,
- pCertContextServer->hCertStore,
- &ChainPara,
- 0,
- NULL,
- &pChainContext)) {
- failf(data, "schannel: CertGetCertificateChain failed: %s",
- Curl_sspi_strerror(conn, GetLastError()));
- pChainContext = NULL;
- result = CURLE_PEER_FAILED_VERIFICATION;
- }
-
- if(result == CURLE_OK) {
- CERT_SIMPLE_CHAIN *pSimpleChain = pChainContext->rgpChain[0];
- DWORD dwTrustErrorMask = ~(DWORD)(CERT_TRUST_IS_NOT_TIME_NESTED|
- CERT_TRUST_REVOCATION_STATUS_UNKNOWN);
- dwTrustErrorMask &= pSimpleChain->TrustStatus.dwErrorStatus;
- if(dwTrustErrorMask) {
- if(dwTrustErrorMask & CERT_TRUST_IS_PARTIAL_CHAIN)
- failf(data, "schannel: CertGetCertificateChain trust error"
- " CERT_TRUST_IS_PARTIAL_CHAIN");
- if(dwTrustErrorMask & CERT_TRUST_IS_UNTRUSTED_ROOT)
- failf(data, "schannel: CertGetCertificateChain trust error"
- " CERT_TRUST_IS_UNTRUSTED_ROOT");
- if(dwTrustErrorMask & CERT_TRUST_IS_NOT_TIME_VALID)
- failf(data, "schannel: CertGetCertificateChain trust error"
- " CERT_TRUST_IS_NOT_TIME_VALID");
- failf(data, "schannel: CertGetCertificateChain error mask: 0x%08x",
- dwTrustErrorMask);
- result = CURLE_PEER_FAILED_VERIFICATION;
- }
- }
- }
-
- if(result == CURLE_OK) {
- if(data->set.ssl.verifyhost) {
- TCHAR cert_hostname_buff[128];
- xcharp_u hostname;
- xcharp_u cert_hostname;
- DWORD len;
-
- cert_hostname.const_tchar_ptr = cert_hostname_buff;
- hostname.tchar_ptr = Curl_convert_UTF8_to_tchar(conn->host.name);
-
- len = CertGetNameString(pCertContextServer,
- CERT_NAME_DNS_TYPE,
- 0,
- NULL,
- cert_hostname.tchar_ptr,
- 128);
- if(len > 0 && *cert_hostname.tchar_ptr == '*') {
- /* this is a wildcard cert. try matching the last len - 1 chars */
- int hostname_len = strlen(conn->host.name);
- cert_hostname.tchar_ptr++;
- if(_tcsicmp(cert_hostname.const_tchar_ptr,
- hostname.const_tchar_ptr + hostname_len - len + 2) != 0)
- result = CURLE_PEER_FAILED_VERIFICATION;
- }
- else if(len == 0 || _tcsicmp(hostname.const_tchar_ptr,
- cert_hostname.const_tchar_ptr) != 0) {
- result = CURLE_PEER_FAILED_VERIFICATION;
- }
- if(result == CURLE_PEER_FAILED_VERIFICATION) {
- char *_cert_hostname;
- _cert_hostname = Curl_convert_tchar_to_UTF8(cert_hostname.tchar_ptr);
- failf(data, "schannel: CertGetNameString() certificate hostname "
- "(%s) did not match connection (%s)",
- _cert_hostname, conn->host.name);
- Curl_unicodefree(_cert_hostname);
- }
- Curl_unicodefree(hostname.tchar_ptr);
- }
- }
-
- if(pChainContext)
- CertFreeCertificateChain(pChainContext);
-
- if(pCertContextServer)
- CertFreeCertificateContext(pCertContextServer);
-
- return result;
-}
-#endif /* _WIN32_WCE */
-
-#endif /* USE_SCHANNEL */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/curl_schannel.h b/external/libcurl_android/jni/libcurl/lib/vtls/curl_schannel.h
deleted file mode 100755
index 700516b3..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/curl_schannel.h
+++ /dev/null
@@ -1,137 +0,0 @@
-#ifndef HEADER_CURL_SCHANNEL_H
-#define HEADER_CURL_SCHANNEL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2012, Marc Hoersken, <info@marc-hoersken.de>, et al.
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifdef USE_SCHANNEL
-
-#include "urldata.h"
-
-#ifndef UNISP_NAME_A
-#define UNISP_NAME_A "Microsoft Unified Security Protocol Provider"
-#endif
-
-#ifndef UNISP_NAME_W
-#define UNISP_NAME_W L"Microsoft Unified Security Protocol Provider"
-#endif
-
-#ifndef UNISP_NAME
-#ifdef UNICODE
-#define UNISP_NAME UNISP_NAME_W
-#else
-#define UNISP_NAME UNISP_NAME_A
-#endif
-#endif
-
-#ifndef SP_PROT_SSL2_CLIENT
-#define SP_PROT_SSL2_CLIENT 0x00000008
-#endif
-
-#ifndef SP_PROT_SSL3_CLIENT
-#define SP_PROT_SSL3_CLIENT 0x00000008
-#endif
-
-#ifndef SP_PROT_TLS1_CLIENT
-#define SP_PROT_TLS1_CLIENT 0x00000080
-#endif
-
-#ifndef SP_PROT_TLS1_0_CLIENT
-#define SP_PROT_TLS1_0_CLIENT SP_PROT_TLS1_CLIENT
-#endif
-
-#ifndef SP_PROT_TLS1_1_CLIENT
-#define SP_PROT_TLS1_1_CLIENT 0x00000200
-#endif
-
-#ifndef SP_PROT_TLS1_2_CLIENT
-#define SP_PROT_TLS1_2_CLIENT 0x00000800
-#endif
-
-#ifndef SECBUFFER_ALERT
-#define SECBUFFER_ALERT 17
-#endif
-
-#ifndef ISC_RET_REPLAY_DETECT
-#define ISC_RET_REPLAY_DETECT 0x00000004
-#endif
-
-#ifndef ISC_RET_SEQUENCE_DETECT
-#define ISC_RET_SEQUENCE_DETECT 0x00000008
-#endif
-
-#ifndef ISC_RET_CONFIDENTIALITY
-#define ISC_RET_CONFIDENTIALITY 0x00000010
-#endif
-
-#ifndef ISC_RET_ALLOCATED_MEMORY
-#define ISC_RET_ALLOCATED_MEMORY 0x00000100
-#endif
-
-#ifndef ISC_RET_STREAM
-#define ISC_RET_STREAM 0x00008000
-#endif
-
-
-#define CURL_SCHANNEL_BUFFER_INIT_SIZE 4096
-#define CURL_SCHANNEL_BUFFER_FREE_SIZE 1024
-#define CURL_SCHANNEL_BUFFER_STEP_FACTOR 2
-
-
-CURLcode Curl_schannel_connect(struct connectdata *conn, int sockindex);
-
-CURLcode Curl_schannel_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done);
-
-bool Curl_schannel_data_pending(const struct connectdata *conn, int sockindex);
-void Curl_schannel_close(struct connectdata *conn, int sockindex);
-int Curl_schannel_shutdown(struct connectdata *conn, int sockindex);
-void Curl_schannel_session_free(void *ptr);
-
-int Curl_schannel_init(void);
-void Curl_schannel_cleanup(void);
-size_t Curl_schannel_version(char *buffer, size_t size);
-
-int Curl_schannel_random(unsigned char *entropy, size_t length);
-
-/* API setup for Schannel */
-#define curlssl_init Curl_schannel_init
-#define curlssl_cleanup Curl_schannel_cleanup
-#define curlssl_connect Curl_schannel_connect
-#define curlssl_connect_nonblocking Curl_schannel_connect_nonblocking
-#define curlssl_session_free Curl_schannel_session_free
-#define curlssl_close_all(x) (x=x, CURLE_NOT_BUILT_IN)
-#define curlssl_close Curl_schannel_close
-#define curlssl_shutdown Curl_schannel_shutdown
-#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_NOT_BUILT_IN)
-#define curlssl_set_engine_default(x) (x=x, CURLE_NOT_BUILT_IN)
-#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_version Curl_schannel_version
-#define curlssl_check_cxn(x) (x=x, -1)
-#define curlssl_data_pending Curl_schannel_data_pending
-#define CURL_SSL_BACKEND CURLSSLBACKEND_SCHANNEL
-#define curlssl_random(x,y,z) ((void)x, Curl_schannel_random(y,z))
-
-#endif /* USE_SCHANNEL */
-#endif /* HEADER_CURL_SCHANNEL_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/cyassl.c b/external/libcurl_android/jni/libcurl/lib/vtls/cyassl.c
deleted file mode 100755
index 9b5c7c61..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/cyassl.c
+++ /dev/null
@@ -1,655 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Source file for all CyaSSL-specific code for the TLS/SSL layer. No code
- * but vtls.c should ever call or use these functions.
- *
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_CYASSL
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "inet_pton.h"
-#include "cyassl.h"
-#include "vtls.h"
-#include "parsedate.h"
-#include "connect.h" /* for the connect timeout */
-#include "select.h"
-#include "rawstr.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-#include "curl_memory.h"
-
-#include <cyassl/ssl.h>
-#ifdef HAVE_CYASSL_ERROR_SSL_H
-#include <cyassl/error-ssl.h>
-#else
-#include <cyassl/error.h>
-#endif
-#include <cyassl/ctaocrypt/random.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-static Curl_recv cyassl_recv;
-static Curl_send cyassl_send;
-
-
-static int do_file_type(const char *type)
-{
- if(!type || !type[0])
- return SSL_FILETYPE_PEM;
- if(Curl_raw_equal(type, "PEM"))
- return SSL_FILETYPE_PEM;
- if(Curl_raw_equal(type, "DER"))
- return SSL_FILETYPE_ASN1;
- return -1;
-}
-
-/*
- * This function loads all the client/CA certificates and CRLs. Setup the TLS
- * layer and do all necessary magic.
- */
-static CURLcode
-cyassl_connect_step1(struct connectdata *conn,
- int sockindex)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data* conssl = &conn->ssl[sockindex];
- SSL_METHOD* req_method = NULL;
- void* ssl_sessionid = NULL;
- curl_socket_t sockfd = conn->sock[sockindex];
-
- if(conssl->state == ssl_connection_complete)
- return CURLE_OK;
-
- /* CyaSSL doesn't support SSLv2 */
- if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
- failf(data, "CyaSSL does not support SSLv2");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* check to see if we've been told to use an explicit SSL/TLS version */
- switch(data->set.ssl.version) {
- case CURL_SSLVERSION_DEFAULT:
- /* we try to figure out version */
- req_method = SSLv23_client_method();
- break;
- case CURL_SSLVERSION_TLSv1:
- infof(data, "CyaSSL cannot be configured to use TLS 1.0-1.2, "
- "TLS 1.0 is used exclusively\n");
- req_method = TLSv1_client_method();
- break;
- case CURL_SSLVERSION_TLSv1_0:
- req_method = TLSv1_client_method();
- break;
- case CURL_SSLVERSION_TLSv1_1:
- req_method = TLSv1_1_client_method();
- break;
- case CURL_SSLVERSION_TLSv1_2:
- req_method = TLSv1_2_client_method();
- break;
- case CURL_SSLVERSION_SSLv3:
- req_method = SSLv3_client_method();
- break;
- default:
- req_method = TLSv1_client_method();
- }
-
- if(!req_method) {
- failf(data, "SSL: couldn't create a method!");
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(conssl->ctx)
- SSL_CTX_free(conssl->ctx);
- conssl->ctx = SSL_CTX_new(req_method);
-
- if(!conssl->ctx) {
- failf(data, "SSL: couldn't create a context!");
- return CURLE_OUT_OF_MEMORY;
- }
-
-#ifndef NO_FILESYSTEM
- /* load trusted cacert */
- if(data->set.str[STRING_SSL_CAFILE]) {
- if(!SSL_CTX_load_verify_locations(conssl->ctx,
- data->set.str[STRING_SSL_CAFILE],
- data->set.str[STRING_SSL_CAPATH])) {
- if(data->set.ssl.verifypeer) {
- /* Fail if we insist on successfully verifying the server. */
- failf(data,"error setting certificate verify locations:\n"
- " CAfile: %s\n CApath: %s",
- data->set.str[STRING_SSL_CAFILE]?
- data->set.str[STRING_SSL_CAFILE]: "none",
- data->set.str[STRING_SSL_CAPATH]?
- data->set.str[STRING_SSL_CAPATH] : "none");
- return CURLE_SSL_CACERT_BADFILE;
- }
- else {
- /* Just continue with a warning if no strict certificate
- verification is required. */
- infof(data, "error setting certificate verify locations,"
- " continuing anyway:\n");
- }
- }
- else {
- /* Everything is fine. */
- infof(data, "successfully set certificate verify locations:\n");
- }
- infof(data,
- " CAfile: %s\n"
- " CApath: %s\n",
- data->set.str[STRING_SSL_CAFILE] ? data->set.str[STRING_SSL_CAFILE]:
- "none",
- data->set.str[STRING_SSL_CAPATH] ? data->set.str[STRING_SSL_CAPATH]:
- "none");
- }
-
- /* Load the client certificate, and private key */
- if(data->set.str[STRING_CERT] && data->set.str[STRING_KEY]) {
- int file_type = do_file_type(data->set.str[STRING_CERT_TYPE]);
-
- if(SSL_CTX_use_certificate_file(conssl->ctx, data->set.str[STRING_CERT],
- file_type) != 1) {
- failf(data, "unable to use client certificate (no key or wrong pass"
- " phrase?)");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- file_type = do_file_type(data->set.str[STRING_KEY_TYPE]);
- if(SSL_CTX_use_PrivateKey_file(conssl->ctx, data->set.str[STRING_KEY],
- file_type) != 1) {
- failf(data, "unable to set private key");
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-#else
- if(CyaSSL_no_filesystem_verify(conssl->ctx)!= SSL_SUCCESS) {
- return CURLE_SSL_CONNECT_ERROR;
- }
-#endif /* NO_FILESYSTEM */
-
- /* SSL always tries to verify the peer, this only says whether it should
- * fail to connect if the verification fails, or if it should continue
- * anyway. In the latter case the result of the verification is checked with
- * SSL_get_verify_result() below. */
- SSL_CTX_set_verify(conssl->ctx,
- data->set.ssl.verifypeer?SSL_VERIFY_PEER:SSL_VERIFY_NONE,
- NULL);
-
- /* Let's make an SSL structure */
- if(conssl->handle)
- SSL_free(conssl->handle);
- conssl->handle = SSL_new(conssl->ctx);
- if(!conssl->handle) {
- failf(data, "SSL: couldn't create a context (handle)!");
- return CURLE_OUT_OF_MEMORY;
- }
-
- /* Check if there's a cached ID we can/should use here! */
- if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL)) {
- /* we got a session id, use it! */
- if(!SSL_set_session(conssl->handle, ssl_sessionid)) {
- failf(data, "SSL: SSL_set_session failed: %s",
- ERR_error_string(SSL_get_error(conssl->handle, 0),NULL));
- return CURLE_SSL_CONNECT_ERROR;
- }
- /* Informational message */
- infof (data, "SSL re-using session ID\n");
- }
-
- /* pass the raw socket into the SSL layer */
- if(!SSL_set_fd(conssl->handle, (int)sockfd)) {
- failf(data, "SSL: SSL_set_fd failed");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- conssl->connecting_state = ssl_connect_2;
- return CURLE_OK;
-}
-
-
-static CURLcode
-cyassl_connect_step2(struct connectdata *conn,
- int sockindex)
-{
- int ret = -1;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data* conssl = &conn->ssl[sockindex];
-
- infof(data, "CyaSSL: Connecting to %s:%d\n",
- conn->host.name, conn->remote_port);
-
- conn->recv[sockindex] = cyassl_recv;
- conn->send[sockindex] = cyassl_send;
-
- /* Enable RFC2818 checks */
- if(data->set.ssl.verifyhost) {
- ret = CyaSSL_check_domain_name(conssl->handle, conn->host.name);
- if(ret == SSL_FAILURE)
- return CURLE_OUT_OF_MEMORY;
- }
-
- ret = SSL_connect(conssl->handle);
- if(ret != 1) {
- char error_buffer[80];
- int detail = SSL_get_error(conssl->handle, ret);
-
- if(SSL_ERROR_WANT_READ == detail) {
- conssl->connecting_state = ssl_connect_2_reading;
- return CURLE_OK;
- }
- else if(SSL_ERROR_WANT_WRITE == detail) {
- conssl->connecting_state = ssl_connect_2_writing;
- return CURLE_OK;
- }
- /* There is no easy way to override only the CN matching.
- * This will enable the override of both mismatching SubjectAltNames
- * as also mismatching CN fields */
- else if(DOMAIN_NAME_MISMATCH == detail) {
-#if 1
- failf(data, "\tsubject alt name(s) or common name do not match \"%s\"\n",
- conn->host.dispname);
- return CURLE_PEER_FAILED_VERIFICATION;
-#else
- /* When the CyaSSL_check_domain_name() is used and you desire to continue
- * on a DOMAIN_NAME_MISMATCH, i.e. 'data->set.ssl.verifyhost == 0',
- * CyaSSL version 2.4.0 will fail with an INCOMPLETE_DATA error. The only
- * way to do this is currently to switch the CyaSSL_check_domain_name()
- * in and out based on the 'data->set.ssl.verifyhost' value. */
- if(data->set.ssl.verifyhost) {
- failf(data,
- "\tsubject alt name(s) or common name do not match \"%s\"\n",
- conn->host.dispname);
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- else {
- infof(data,
- "\tsubject alt name(s) and/or common name do not match \"%s\"\n",
- conn->host.dispname);
- return CURLE_OK;
- }
-#endif
- }
-#if LIBCYASSL_VERSION_HEX >= 0x02007000 /* 2.7.0 */
- else if(ASN_NO_SIGNER_E == detail) {
- if(data->set.ssl.verifypeer) {
- failf(data, "\tCA signer not available for verification\n");
- return CURLE_SSL_CACERT_BADFILE;
- }
- else {
- /* Just continue with a warning if no strict certificate
- verification is required. */
- infof(data, "CA signer not available for verification, "
- "continuing anyway\n");
- }
- }
-#endif
- else {
- failf(data, "SSL_connect failed with error %d: %s", detail,
- ERR_error_string(detail, error_buffer));
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-
- conssl->connecting_state = ssl_connect_3;
- infof(data, "SSL connected\n");
-
- return CURLE_OK;
-}
-
-
-static CURLcode
-cyassl_connect_step3(struct connectdata *conn,
- int sockindex)
-{
- CURLcode retcode = CURLE_OK;
- void *old_ssl_sessionid=NULL;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- int incache;
- SSL_SESSION *our_ssl_sessionid;
-
- DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
-
- our_ssl_sessionid = SSL_get_session(connssl->handle);
-
- incache = !(Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL));
- if(incache) {
- if(old_ssl_sessionid != our_ssl_sessionid) {
- infof(data, "old SSL session ID is stale, removing\n");
- Curl_ssl_delsessionid(conn, old_ssl_sessionid);
- incache = FALSE;
- }
- }
- if(!incache) {
- retcode = Curl_ssl_addsessionid(conn, our_ssl_sessionid,
- 0 /* unknown size */);
- if(retcode) {
- failf(data, "failed to store ssl session");
- return retcode;
- }
- }
-
- connssl->connecting_state = ssl_connect_done;
-
- return retcode;
-}
-
-
-static ssize_t cyassl_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *curlcode)
-{
- char error_buffer[80];
- int memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len;
- int rc = SSL_write(conn->ssl[sockindex].handle, mem, memlen);
-
- if(rc < 0) {
- int err = SSL_get_error(conn->ssl[sockindex].handle, rc);
-
- switch(err) {
- case SSL_ERROR_WANT_READ:
- case SSL_ERROR_WANT_WRITE:
- /* there's data pending, re-invoke SSL_write() */
- *curlcode = CURLE_AGAIN;
- return -1;
- default:
- failf(conn->data, "SSL write: %s, errno %d",
- ERR_error_string(err, error_buffer),
- SOCKERRNO);
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
- }
- return rc;
-}
-
-void Curl_cyassl_close_all(struct SessionHandle *data)
-{
- (void)data;
-}
-
-void Curl_cyassl_close(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *conssl = &conn->ssl[sockindex];
-
- if(conssl->handle) {
- (void)SSL_shutdown(conssl->handle);
- SSL_free (conssl->handle);
- conssl->handle = NULL;
- }
- if(conssl->ctx) {
- SSL_CTX_free (conssl->ctx);
- conssl->ctx = NULL;
- }
-}
-
-static ssize_t cyassl_recv(struct connectdata *conn,
- int num,
- char *buf,
- size_t buffersize,
- CURLcode *curlcode)
-{
- char error_buffer[80];
- int buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
- int nread = SSL_read(conn->ssl[num].handle, buf, buffsize);
-
- if(nread < 0) {
- int err = SSL_get_error(conn->ssl[num].handle, nread);
-
- switch(err) {
- case SSL_ERROR_ZERO_RETURN: /* no more data */
- break;
- case SSL_ERROR_WANT_READ:
- case SSL_ERROR_WANT_WRITE:
- /* there's data pending, re-invoke SSL_read() */
- *curlcode = CURLE_AGAIN;
- return -1;
- default:
- failf(conn->data, "SSL read: %s, errno %d",
- ERR_error_string(err, error_buffer),
- SOCKERRNO);
- *curlcode = CURLE_RECV_ERROR;
- return -1;
- }
- }
- return nread;
-}
-
-
-void Curl_cyassl_session_free(void *ptr)
-{
- (void)ptr;
- /* CyaSSL reuses sessions on own, no free */
-}
-
-
-size_t Curl_cyassl_version(char *buffer, size_t size)
-{
-#ifdef CYASSL_VERSION
- return snprintf(buffer, size, "CyaSSL/%s", CYASSL_VERSION);
-#else
- return snprintf(buffer, size, "CyaSSL/%s", "<1.8.8");
-#endif
-}
-
-
-int Curl_cyassl_init(void)
-{
- if(CyaSSL_Init() == 0)
- return 1;
-
- return -1;
-}
-
-
-bool Curl_cyassl_data_pending(const struct connectdata* conn, int connindex)
-{
- if(conn->ssl[connindex].handle) /* SSL is in use */
- return (0 != SSL_pending(conn->ssl[connindex].handle)) ? TRUE : FALSE;
- else
- return FALSE;
-}
-
-
-/*
- * This function is called to shut down the SSL layer but keep the
- * socket open (CCC - Clear Command Channel)
- */
-int Curl_cyassl_shutdown(struct connectdata *conn, int sockindex)
-{
- int retval = 0;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- if(connssl->handle) {
- SSL_free (connssl->handle);
- connssl->handle = NULL;
- }
- return retval;
-}
-
-
-static CURLcode
-cyassl_connect_common(struct connectdata *conn,
- int sockindex,
- bool nonblocking,
- bool *done)
-{
- CURLcode retcode;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
- long timeout_ms;
- int what;
-
- /* check if the connection has already been established */
- if(ssl_connection_complete == connssl->state) {
- *done = TRUE;
- return CURLE_OK;
- }
-
- if(ssl_connect_1==connssl->connecting_state) {
- /* Find out how much more time we're allowed */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- retcode = cyassl_connect_step1(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- while(ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state) {
-
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- /* if ssl is expecting something, check if it's available. */
- if(connssl->connecting_state == ssl_connect_2_reading
- || connssl->connecting_state == ssl_connect_2_writing) {
-
- curl_socket_t writefd = ssl_connect_2_writing==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
- curl_socket_t readfd = ssl_connect_2_reading==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
-
- what = Curl_socket_ready(readfd, writefd, nonblocking?0:timeout_ms);
- if(what < 0) {
- /* fatal error */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- return CURLE_SSL_CONNECT_ERROR;
- }
- else if(0 == what) {
- if(nonblocking) {
- *done = FALSE;
- return CURLE_OK;
- }
- else {
- /* timeout */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- }
- /* socket is readable or writable */
- }
-
- /* Run transaction, and return to the caller if it failed or if
- * this connection is part of a multi handle and this loop would
- * execute again. This permits the owner of a multi handle to
- * abort a connection attempt before step2 has completed while
- * ensuring that a client using select() or epoll() will always
- * have a valid fdset to wait on.
- */
- retcode = cyassl_connect_step2(conn, sockindex);
- if(retcode || (nonblocking &&
- (ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state)))
- return retcode;
-
- } /* repeat step2 until all transactions are done. */
-
- if(ssl_connect_3==connssl->connecting_state) {
- retcode = cyassl_connect_step3(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- if(ssl_connect_done==connssl->connecting_state) {
- connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = cyassl_recv;
- conn->send[sockindex] = cyassl_send;
- *done = TRUE;
- }
- else
- *done = FALSE;
-
- /* Reset our connect state machine */
- connssl->connecting_state = ssl_connect_1;
-
- return CURLE_OK;
-}
-
-
-CURLcode
-Curl_cyassl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- return cyassl_connect_common(conn, sockindex, TRUE, done);
-}
-
-
-CURLcode
-Curl_cyassl_connect(struct connectdata *conn,
- int sockindex)
-{
- CURLcode retcode;
- bool done = FALSE;
-
- retcode = cyassl_connect_common(conn, sockindex, FALSE, &done);
- if(retcode)
- return retcode;
-
- DEBUGASSERT(done);
-
- return CURLE_OK;
-}
-
-int Curl_cyassl_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length)
-{
- RNG rng;
- (void)data;
- if(InitRng(&rng))
- return 1;
- if(RNG_GenerateBlock(&rng, entropy, length))
- return 1;
- return 0;
-}
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/cyassl.h b/external/libcurl_android/jni/libcurl/lib/vtls/cyassl.h
deleted file mode 100755
index b10b607d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/cyassl.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef HEADER_CURL_CYASSL_H
-#define HEADER_CURL_CYASSL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifdef USE_CYASSL
-
-CURLcode Curl_cyassl_connect(struct connectdata *conn, int sockindex);
-bool Curl_cyassl_data_pending(const struct connectdata* conn,int connindex);
-int Curl_cyassl_shutdown(struct connectdata* conn, int sockindex);
-
-/* tell CyaSSL to close down all open information regarding connections (and
- thus session ID caching etc) */
-void Curl_cyassl_close_all(struct SessionHandle *data);
-
- /* close a SSL connection */
-void Curl_cyassl_close(struct connectdata *conn, int sockindex);
-
-void Curl_cyassl_session_free(void *ptr);
-size_t Curl_cyassl_version(char *buffer, size_t size);
-int Curl_cyassl_shutdown(struct connectdata *conn, int sockindex);
-int Curl_cyassl_init(void);
-CURLcode Curl_cyassl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done);
-int Curl_cyassl_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length);
-
-/* API setup for CyaSSL */
-#define curlssl_init Curl_cyassl_init
-#define curlssl_cleanup() Curl_nop_stmt
-#define curlssl_connect Curl_cyassl_connect
-#define curlssl_connect_nonblocking Curl_cyassl_connect_nonblocking
-#define curlssl_session_free(x) Curl_cyassl_session_free(x)
-#define curlssl_close_all Curl_cyassl_close_all
-#define curlssl_close Curl_cyassl_close
-#define curlssl_shutdown(x,y) Curl_cyassl_shutdown(x,y)
-#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_NOT_BUILT_IN)
-#define curlssl_set_engine_default(x) (x=x, CURLE_NOT_BUILT_IN)
-#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_version Curl_cyassl_version
-#define curlssl_check_cxn(x) (x=x, -1)
-#define curlssl_data_pending(x,y) Curl_cyassl_data_pending(x,y)
-#define curlssl_random(x,y,z) Curl_cyassl_random(x,y,z)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_CYASSL
-
-#endif /* USE_CYASSL */
-#endif /* HEADER_CURL_CYASSL_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/gskit.c b/external/libcurl_android/jni/libcurl/lib/vtls/gskit.c
deleted file mode 100755
index 0f8b08f2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/gskit.c
+++ /dev/null
@@ -1,1053 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_GSKIT
-
-#include <gskssl.h>
-#include <qsoasync.h>
-
-/* Some symbols are undefined/unsupported on OS400 versions < V7R1. */
-#ifndef GSK_SSL_EXTN_SERVERNAME_REQUEST
-#define GSK_SSL_EXTN_SERVERNAME_REQUEST 230
-#endif
-
-#ifndef GSK_TLSV10_CIPHER_SPECS
-#define GSK_TLSV10_CIPHER_SPECS 236
-#endif
-
-#ifndef GSK_TLSV11_CIPHER_SPECS
-#define GSK_TLSV11_CIPHER_SPECS 237
-#endif
-
-#ifndef GSK_TLSV12_CIPHER_SPECS
-#define GSK_TLSV12_CIPHER_SPECS 238
-#endif
-
-#ifndef GSK_PROTOCOL_TLSV11
-#define GSK_PROTOCOL_TLSV11 437
-#endif
-
-#ifndef GSK_PROTOCOL_TLSV12
-#define GSK_PROTOCOL_TLSV12 438
-#endif
-
-#ifndef GSK_FALSE
-#define GSK_FALSE 0
-#endif
-
-#ifndef GSK_TRUE
-#define GSK_TRUE 1
-#endif
-
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "gskit.h"
-#include "vtls.h"
-#include "connect.h" /* for the connect timeout */
-#include "select.h"
-#include "strequal.h"
-#include "x509asn1.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-
-/* SSL version flags. */
-#define CURL_GSKPROTO_SSLV2 0
-#define CURL_GSKPROTO_SSLV2_MASK (1 << CURL_GSKPROTO_SSLV2)
-#define CURL_GSKPROTO_SSLV3 1
-#define CURL_GSKPROTO_SSLV3_MASK (1 << CURL_GSKPROTO_SSLV3)
-#define CURL_GSKPROTO_TLSV10 2
-#define CURL_GSKPROTO_TLSV10_MASK (1 << CURL_GSKPROTO_TLSV10)
-#define CURL_GSKPROTO_TLSV11 3
-#define CURL_GSKPROTO_TLSV11_MASK (1 << CURL_GSKPROTO_TLSV11)
-#define CURL_GSKPROTO_TLSV12 4
-#define CURL_GSKPROTO_TLSV12_MASK (1 << CURL_GSKPROTO_TLSV12)
-#define CURL_GSKPROTO_LAST 5
-
-
-/* Supported ciphers. */
-typedef struct {
- const char *name; /* Cipher name. */
- const char *gsktoken; /* Corresponding token for GSKit String. */
- unsigned int versions; /* SSL version flags. */
-} gskit_cipher;
-
-static const gskit_cipher ciphertable[] = {
- { "null-md5", "01",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "null-sha", "02",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "exp-rc4-md5", "03",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK },
- { "rc4-md5", "04",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "rc4-sha", "05",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "exp-rc2-cbc-md5", "06",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK },
- { "exp-des-cbc-sha", "09",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK },
- { "des-cbc3-sha", "0A",
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK },
- { "aes128-sha", "2F",
- CURL_GSKPROTO_TLSV10_MASK | CURL_GSKPROTO_TLSV11_MASK |
- CURL_GSKPROTO_TLSV12_MASK },
- { "aes256-sha", "35",
- CURL_GSKPROTO_TLSV10_MASK | CURL_GSKPROTO_TLSV11_MASK |
- CURL_GSKPROTO_TLSV12_MASK },
- { "null-sha256", "3B", CURL_GSKPROTO_TLSV12_MASK },
- { "aes128-sha256", "3D", CURL_GSKPROTO_TLSV12_MASK },
- { "aes256-sha256", "3D", CURL_GSKPROTO_TLSV12_MASK },
- { "rc4-md5", "1", CURL_GSKPROTO_SSLV2_MASK },
- { "exp-rc4-md5", "2", CURL_GSKPROTO_SSLV2_MASK },
- { "rc2-md5", "3", CURL_GSKPROTO_SSLV2_MASK },
- { "exp-rc2-md5", "4", CURL_GSKPROTO_SSLV2_MASK },
- { "des-cbc-md5", "6", CURL_GSKPROTO_SSLV2_MASK },
- { "des-cbc3-md5", "7", CURL_GSKPROTO_SSLV2_MASK },
- { (const char *) NULL, (const char *) NULL, 0 }
-};
-
-
-static bool is_separator(char c)
-{
- /* Return whether character is a cipher list separator. */
- switch (c) {
- case ' ':
- case '\t':
- case ':':
- case ',':
- case ';':
- return true;
- }
- return false;
-}
-
-
-static CURLcode gskit_status(struct SessionHandle *data, int rc,
- const char *procname, CURLcode defcode)
-{
- CURLcode cc;
-
- /* Process GSKit status and map it to a CURLcode. */
- switch (rc) {
- case GSK_OK:
- case GSK_OS400_ASYNCHRONOUS_SOC_INIT:
- return CURLE_OK;
- case GSK_KEYRING_OPEN_ERROR:
- case GSK_OS400_ERROR_NO_ACCESS:
- return CURLE_SSL_CACERT_BADFILE;
- case GSK_INSUFFICIENT_STORAGE:
- return CURLE_OUT_OF_MEMORY;
- case GSK_ERROR_BAD_V2_CIPHER:
- case GSK_ERROR_BAD_V3_CIPHER:
- case GSK_ERROR_NO_CIPHERS:
- return CURLE_SSL_CIPHER;
- case GSK_OS400_ERROR_NOT_TRUSTED_ROOT:
- case GSK_ERROR_CERT_VALIDATION:
- return CURLE_PEER_FAILED_VERIFICATION;
- case GSK_OS400_ERROR_TIMED_OUT:
- return CURLE_OPERATION_TIMEDOUT;
- case GSK_WOULD_BLOCK:
- return CURLE_AGAIN;
- case GSK_OS400_ERROR_NOT_REGISTERED:
- break;
- case GSK_ERROR_IO:
- switch (errno) {
- case ENOMEM:
- return CURLE_OUT_OF_MEMORY;
- default:
- failf(data, "%s I/O error: %s", procname, strerror(errno));
- break;
- }
- break;
- default:
- failf(data, "%s: %s", procname, gsk_strerror(rc));
- break;
- }
- return defcode;
-}
-
-
-static CURLcode set_enum(struct SessionHandle *data, gsk_handle h,
- GSK_ENUM_ID id, GSK_ENUM_VALUE value, bool unsupported_ok)
-{
- int rc = gsk_attribute_set_enum(h, id, value);
-
- switch (rc) {
- case GSK_OK:
- return CURLE_OK;
- case GSK_ERROR_IO:
- failf(data, "gsk_attribute_set_enum() I/O error: %s", strerror(errno));
- break;
- case GSK_ATTRIBUTE_INVALID_ID:
- if(unsupported_ok)
- return CURLE_UNSUPPORTED_PROTOCOL;
- default:
- failf(data, "gsk_attribute_set_enum(): %s", gsk_strerror(rc));
- break;
- }
- return CURLE_SSL_CONNECT_ERROR;
-}
-
-
-static CURLcode set_buffer(struct SessionHandle *data, gsk_handle h,
- GSK_BUF_ID id, const char *buffer, bool unsupported_ok)
-{
- int rc = gsk_attribute_set_buffer(h, id, buffer, 0);
-
- switch (rc) {
- case GSK_OK:
- return CURLE_OK;
- case GSK_ERROR_IO:
- failf(data, "gsk_attribute_set_buffer() I/O error: %s", strerror(errno));
- break;
- case GSK_ATTRIBUTE_INVALID_ID:
- if(unsupported_ok)
- return CURLE_UNSUPPORTED_PROTOCOL;
- default:
- failf(data, "gsk_attribute_set_buffer(): %s", gsk_strerror(rc));
- break;
- }
- return CURLE_SSL_CONNECT_ERROR;
-}
-
-
-static CURLcode set_numeric(struct SessionHandle *data,
- gsk_handle h, GSK_NUM_ID id, int value)
-{
- int rc = gsk_attribute_set_numeric_value(h, id, value);
-
- switch (rc) {
- case GSK_OK:
- return CURLE_OK;
- case GSK_ERROR_IO:
- failf(data, "gsk_attribute_set_numeric_value() I/O error: %s",
- strerror(errno));
- break;
- default:
- failf(data, "gsk_attribute_set_numeric_value(): %s", gsk_strerror(rc));
- break;
- }
- return CURLE_SSL_CONNECT_ERROR;
-}
-
-
-static CURLcode set_callback(struct SessionHandle *data,
- gsk_handle h, GSK_CALLBACK_ID id, void *info)
-{
- int rc = gsk_attribute_set_callback(h, id, info);
-
- switch (rc) {
- case GSK_OK:
- return CURLE_OK;
- case GSK_ERROR_IO:
- failf(data, "gsk_attribute_set_callback() I/O error: %s", strerror(errno));
- break;
- default:
- failf(data, "gsk_attribute_set_callback(): %s", gsk_strerror(rc));
- break;
- }
- return CURLE_SSL_CONNECT_ERROR;
-}
-
-
-static CURLcode set_ciphers(struct SessionHandle *data,
- gsk_handle h, unsigned int *protoflags)
-{
- const char *cipherlist = data->set.str[STRING_SSL_CIPHER_LIST];
- const char *clp;
- const gskit_cipher *ctp;
- int i;
- int l;
- bool unsupported;
- CURLcode cc;
- struct {
- char *buf;
- char *ptr;
- } ciphers[CURL_GSKPROTO_LAST];
-
- /* Compile cipher list into GSKit-compatible cipher lists. */
-
- if(!cipherlist)
- return CURLE_OK;
- while(is_separator(*cipherlist)) /* Skip initial separators. */
- cipherlist++;
- if(!*cipherlist)
- return CURLE_OK;
-
- /* We allocate GSKit buffers of the same size as the input string: since
- GSKit tokens are always shorter than their cipher names, allocated buffers
- will always be large enough to accomodate the result. */
- l = strlen(cipherlist) + 1;
- memset((char *) ciphers, 0, sizeof ciphers);
- for(i = 0; i < CURL_GSKPROTO_LAST; i++) {
- ciphers[i].buf = malloc(l);
- if(!ciphers[i].buf) {
- while(i--)
- free(ciphers[i].buf);
- return CURLE_OUT_OF_MEMORY;
- }
- ciphers[i].ptr = ciphers[i].buf;
- *ciphers[i].ptr = '\0';
- }
-
- /* Process each cipher in input string. */
- unsupported = FALSE;
- cc = CURLE_OK;
- for(;;) {
- for(clp = cipherlist; *cipherlist && !is_separator(*cipherlist);)
- cipherlist++;
- l = cipherlist - clp;
- if(!l)
- break;
- /* Search the cipher in our table. */
- for(ctp = ciphertable; ctp->name; ctp++)
- if(strnequal(ctp->name, clp, l) && !ctp->name[l])
- break;
- if(!ctp->name) {
- failf(data, "Unknown cipher %.*s", l, clp);
- cc = CURLE_SSL_CIPHER;
- }
- else {
- unsupported |= !(ctp->versions & (CURL_GSKPROTO_SSLV2_MASK |
- CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK));
- for(i = 0; i < CURL_GSKPROTO_LAST; i++) {
- if(ctp->versions & (1 << i)) {
- strcpy(ciphers[i].ptr, ctp->gsktoken);
- ciphers[i].ptr += strlen(ctp->gsktoken);
- }
- }
- }
-
- /* Advance to next cipher name or end of string. */
- while(is_separator(*cipherlist))
- cipherlist++;
- }
-
- /* Disable protocols with empty cipher lists. */
- for(i = 0; i < CURL_GSKPROTO_LAST; i++) {
- if(!(*protoflags & (1 << i)) || !ciphers[i].buf[0]) {
- *protoflags &= ~(1 << i);
- ciphers[i].buf[0] = '\0';
- }
- }
-
- /* Try to set-up TLSv1.1 and TLSv2.1 ciphers. */
- if(*protoflags & CURL_GSKPROTO_TLSV11_MASK) {
- cc = set_buffer(data, h, GSK_TLSV11_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_TLSV11].buf, TRUE);
- if(cc == CURLE_UNSUPPORTED_PROTOCOL) {
- cc = CURLE_OK;
- if(unsupported) {
- failf(data, "TLSv1.1-only ciphers are not yet supported");
- cc = CURLE_SSL_CIPHER;
- }
- }
- }
- if(cc == CURLE_OK && (*protoflags & CURL_GSKPROTO_TLSV12_MASK)) {
- cc = set_buffer(data, h, GSK_TLSV12_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_TLSV12].buf, TRUE);
- if(cc == CURLE_UNSUPPORTED_PROTOCOL) {
- cc = CURLE_OK;
- if(unsupported) {
- failf(data, "TLSv1.2-only ciphers are not yet supported");
- cc = CURLE_SSL_CIPHER;
- }
- }
- }
-
- /* Try to set-up TLSv1.0 ciphers. If not successful, concatenate them to
- the SSLv3 ciphers. OS/400 prior to version 7.1 will understand it. */
- if(cc == CURLE_OK && (*protoflags & CURL_GSKPROTO_TLSV10_MASK)) {
- cc = set_buffer(data, h, GSK_TLSV10_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_TLSV10].buf, TRUE);
- if(cc == CURLE_UNSUPPORTED_PROTOCOL) {
- cc = CURLE_OK;
- strcpy(ciphers[CURL_GSKPROTO_SSLV3].ptr,
- ciphers[CURL_GSKPROTO_TLSV10].ptr);
- }
- }
-
- /* Set-up other ciphers. */
- if(cc == CURLE_OK && (*protoflags & CURL_GSKPROTO_SSLV3_MASK))
- cc = set_buffer(data, h, GSK_V3_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_SSLV3].buf, FALSE);
- if(cc == CURLE_OK && (*protoflags & CURL_GSKPROTO_SSLV2_MASK))
- cc = set_buffer(data, h, GSK_V2_CIPHER_SPECS,
- ciphers[CURL_GSKPROTO_SSLV2].buf, FALSE);
-
- /* Clean-up. */
- for(i = 0; i < CURL_GSKPROTO_LAST; i++)
- free(ciphers[i].buf);
-
- return cc;
-}
-
-
-int Curl_gskit_init(void)
-{
- /* No initialisation needed. */
-
- return 1;
-}
-
-
-void Curl_gskit_cleanup(void)
-{
- /* Nothing to do. */
-}
-
-
-static CURLcode init_environment(struct SessionHandle *data,
- gsk_handle *envir, const char *appid,
- const char *file, const char *label,
- const char *password)
-{
- int rc;
- CURLcode c;
- gsk_handle h;
-
- /* Creates the GSKit environment. */
-
- rc = gsk_environment_open(&h);
- switch (rc) {
- case GSK_OK:
- break;
- case GSK_INSUFFICIENT_STORAGE:
- return CURLE_OUT_OF_MEMORY;
- default:
- failf(data, "gsk_environment_open(): %s", gsk_strerror(rc));
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- c = set_enum(data, h, GSK_SESSION_TYPE, GSK_CLIENT_SESSION, FALSE);
- if(c == CURLE_OK && appid)
- c = set_buffer(data, h, GSK_OS400_APPLICATION_ID, appid, FALSE);
- if(c == CURLE_OK && file)
- c = set_buffer(data, h, GSK_KEYRING_FILE, file, FALSE);
- if(c == CURLE_OK && label)
- c = set_buffer(data, h, GSK_KEYRING_LABEL, label, FALSE);
- if(c == CURLE_OK && password)
- c = set_buffer(data, h, GSK_KEYRING_PW, password, FALSE);
-
- if(c == CURLE_OK) {
- /* Locate CAs, Client certificate and key according to our settings.
- Note: this call may be blocking for some tenths of seconds. */
- c = gskit_status(data, gsk_environment_init(h),
- "gsk_environment_init()", CURLE_SSL_CERTPROBLEM);
- if(c == CURLE_OK) {
- *envir = h;
- return c;
- }
- }
- /* Error: rollback. */
- gsk_environment_close(&h);
- return c;
-}
-
-
-static void cancel_async_handshake(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- Qso_OverlappedIO_t cstat;
-
- if(QsoCancelOperation(conn->sock[sockindex], 0) > 0)
- QsoWaitForIOCompletion(connssl->iocport, &cstat, (struct timeval *) NULL);
-}
-
-
-static void close_async_handshake(struct ssl_connect_data *connssl)
-{
- QsoDestroyIOCompletionPort(connssl->iocport);
- connssl->iocport = -1;
-}
-
-
-static void close_one(struct ssl_connect_data *conn,
- struct SessionHandle *data)
-{
- if(conn->handle) {
- gskit_status(data, gsk_secure_soc_close(&conn->handle),
- "gsk_secure_soc_close()", 0);
- conn->handle = (gsk_handle) NULL;
- }
- if(conn->iocport >= 0)
- close_async_handshake(conn);
-}
-
-
-static ssize_t gskit_send(struct connectdata *conn, int sockindex,
- const void *mem, size_t len, CURLcode *curlcode)
-{
- struct SessionHandle *data = conn->data;
- CURLcode cc;
- int written;
-
- cc = gskit_status(data,
- gsk_secure_soc_write(conn->ssl[sockindex].handle,
- (char *) mem, (int) len, &written),
- "gsk_secure_soc_write()", CURLE_SEND_ERROR);
- if(cc != CURLE_OK) {
- *curlcode = cc;
- written = -1;
- }
- return (ssize_t) written; /* number of bytes */
-}
-
-
-static ssize_t gskit_recv(struct connectdata *conn, int num, char *buf,
- size_t buffersize, CURLcode *curlcode)
-{
- struct SessionHandle *data = conn->data;
- int buffsize;
- int nread;
- CURLcode cc;
-
- buffsize = buffersize > (size_t) INT_MAX? INT_MAX: (int) buffersize;
- cc = gskit_status(data, gsk_secure_soc_read(conn->ssl[num].handle,
- buf, buffsize, &nread),
- "gsk_secure_soc_read()", CURLE_RECV_ERROR);
- if(cc != CURLE_OK) {
- *curlcode = cc;
- nread = -1;
- }
- return (ssize_t) nread;
-}
-
-
-static CURLcode gskit_connect_step1(struct connectdata *conn, int sockindex)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- gsk_handle envir;
- CURLcode cc;
- int rc;
- char *keyringfile;
- char *keyringpwd;
- char *keyringlabel;
- char *sni;
- unsigned int protoflags;
- long timeout;
- Qso_OverlappedIO_t commarea;
-
- /* Create SSL environment, start (preferably asynchronous) handshake. */
-
- connssl->handle = (gsk_handle) NULL;
- connssl->iocport = -1;
-
- /* GSKit supports two ways of specifying an SSL context: either by
- * application identifier (that should have been defined at the system
- * level) or by keyring file, password and certificate label.
- * Local certificate name (CURLOPT_SSLCERT) is used to hold either the
- * application identifier of the certificate label.
- * Key password (CURLOPT_KEYPASSWD) holds the keyring password.
- * It is not possible to have different keyrings for the CAs and the
- * local certificate. We thus use the CA file (CURLOPT_CAINFO) to identify
- * the keyring file.
- * If no key password is given and the keyring is the system keyring,
- * application identifier mode is tried first, as recommended in IBM doc.
- */
-
- keyringfile = data->set.str[STRING_SSL_CAFILE];
- keyringpwd = data->set.str[STRING_KEY_PASSWD];
- keyringlabel = data->set.str[STRING_CERT];
- envir = (gsk_handle) NULL;
-
- if(keyringlabel && *keyringlabel && !keyringpwd &&
- !strcmp(keyringfile, CURL_CA_BUNDLE)) {
- /* Try application identifier mode. */
- init_environment(data, &envir, keyringlabel, (const char *) NULL,
- (const char *) NULL, (const char *) NULL);
- }
-
- if(!envir) {
- /* Use keyring mode. */
- cc = init_environment(data, &envir, (const char *) NULL,
- keyringfile, keyringlabel, keyringpwd);
- if(cc != CURLE_OK)
- return cc;
- }
-
- /* Create secure session. */
- cc = gskit_status(data, gsk_secure_soc_open(envir, &connssl->handle),
- "gsk_secure_soc_open()", CURLE_SSL_CONNECT_ERROR);
- gsk_environment_close(&envir);
- if(cc != CURLE_OK)
- return cc;
-
- /* Determine which SSL/TLS version should be enabled. */
- protoflags = CURL_GSKPROTO_SSLV3_MASK | CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK;
- sni = conn->host.name;
- switch (data->set.ssl.version) {
- case CURL_SSLVERSION_SSLv2:
- protoflags = CURL_GSKPROTO_SSLV2_MASK;
- sni = (char *) NULL;
- break;
- case CURL_SSLVERSION_SSLv3:
- protoflags = CURL_GSKPROTO_SSLV2_MASK;
- sni = (char *) NULL;
- break;
- case CURL_SSLVERSION_TLSv1:
- protoflags = CURL_GSKPROTO_TLSV10_MASK |
- CURL_GSKPROTO_TLSV11_MASK | CURL_GSKPROTO_TLSV12_MASK;
- break;
- case CURL_SSLVERSION_TLSv1_0:
- protoflags = CURL_GSKPROTO_TLSV10_MASK;
- break;
- case CURL_SSLVERSION_TLSv1_1:
- protoflags = CURL_GSKPROTO_TLSV11_MASK;
- break;
- case CURL_SSLVERSION_TLSv1_2:
- protoflags = CURL_GSKPROTO_TLSV12_MASK;
- break;
- }
-
- /* Process SNI. Ignore if not supported (on OS400 < V7R1). */
- if(sni) {
- cc = set_buffer(data, connssl->handle,
- GSK_SSL_EXTN_SERVERNAME_REQUEST, sni, TRUE);
- if(cc == CURLE_UNSUPPORTED_PROTOCOL)
- cc = CURLE_OK;
- }
-
- /* Set session parameters. */
- if(cc == CURLE_OK) {
- /* Compute the handshake timeout. Since GSKit granularity is 1 second,
- we round up the required value. */
- timeout = Curl_timeleft(data, NULL, TRUE);
- if(timeout < 0)
- cc = CURLE_OPERATION_TIMEDOUT;
- else
- cc = set_numeric(data, connssl->handle, GSK_HANDSHAKE_TIMEOUT,
- (timeout + 999) / 1000);
- }
- if(cc == CURLE_OK)
- cc = set_numeric(data, connssl->handle, GSK_FD, conn->sock[sockindex]);
- if(cc == CURLE_OK)
- cc = set_ciphers(data, connssl->handle, &protoflags);
- if(!protoflags) {
- failf(data, "No SSL protocol/cipher combination enabled");
- cc = CURLE_SSL_CIPHER;
- }
- if(cc == CURLE_OK)
- cc = set_enum(data, connssl->handle, GSK_PROTOCOL_SSLV2,
- (protoflags & CURL_GSKPROTO_SSLV2_MASK)?
- GSK_PROTOCOL_SSLV2_ON: GSK_PROTOCOL_SSLV2_OFF, FALSE);
- if(cc == CURLE_OK)
- cc = set_enum(data, connssl->handle, GSK_PROTOCOL_SSLV3,
- (protoflags & CURL_GSKPROTO_SSLV3_MASK)?
- GSK_PROTOCOL_SSLV3_ON: GSK_PROTOCOL_SSLV3_OFF, FALSE);
- if(cc == CURLE_OK)
- cc = set_enum(data, connssl->handle, GSK_PROTOCOL_TLSV1,
- (protoflags & CURL_GSKPROTO_TLSV10_MASK)?
- GSK_PROTOCOL_TLSV1_ON: GSK_PROTOCOL_TLSV1_OFF, FALSE);
- if(cc == CURLE_OK) {
- cc = set_enum(data, connssl->handle, GSK_PROTOCOL_TLSV11,
- (protoflags & CURL_GSKPROTO_TLSV11_MASK)?
- GSK_TRUE: GSK_FALSE, TRUE);
- if(cc == CURLE_UNSUPPORTED_PROTOCOL) {
- cc = CURLE_OK;
- if(protoflags == CURL_GSKPROTO_TLSV11_MASK) {
- failf(data, "TLS 1.1 not yet supported");
- cc = CURLE_SSL_CIPHER;
- }
- }
- }
- if(cc == CURLE_OK) {
- cc = set_enum(data, connssl->handle, GSK_PROTOCOL_TLSV12,
- (protoflags & CURL_GSKPROTO_TLSV12_MASK)?
- GSK_TRUE: GSK_FALSE, TRUE);
- if(cc == CURLE_UNSUPPORTED_PROTOCOL) {
- cc = CURLE_OK;
- if(protoflags == CURL_GSKPROTO_TLSV12_MASK) {
- failf(data, "TLS 1.2 not yet supported");
- cc = CURLE_SSL_CIPHER;
- }
- }
- }
- if(cc == CURLE_OK)
- cc = set_enum(data, connssl->handle, GSK_SERVER_AUTH_TYPE,
- data->set.ssl.verifypeer? GSK_SERVER_AUTH_FULL:
- GSK_SERVER_AUTH_PASSTHRU, FALSE);
-
- if(cc == CURLE_OK) {
- /* Start handshake. Try asynchronous first. */
- memset(&commarea, 0, sizeof commarea);
- connssl->iocport = QsoCreateIOCompletionPort();
- if(connssl->iocport != -1) {
- cc = gskit_status(data, gsk_secure_soc_startInit(connssl->handle,
- connssl->iocport, &commarea),
- "gsk_secure_soc_startInit()", CURLE_SSL_CONNECT_ERROR);
- if(cc == CURLE_OK) {
- connssl->connecting_state = ssl_connect_2;
- return CURLE_OK;
- }
- else
- close_async_handshake(connssl);
- }
- else if(errno != ENOBUFS)
- cc = gskit_status(data, GSK_ERROR_IO, "QsoCreateIOCompletionPort()", 0);
- else {
- /* No more completion port available. Use synchronous IO. */
- cc = gskit_status(data, gsk_secure_soc_init(connssl->handle),
- "gsk_secure_soc_init()", CURLE_SSL_CONNECT_ERROR);
- if(cc == CURLE_OK) {
- connssl->connecting_state = ssl_connect_3;
- return CURLE_OK;
- }
- }
- }
-
- /* Error: rollback. */
- close_one(connssl, data);
- return cc;
-}
-
-
-static CURLcode gskit_connect_step2(struct connectdata *conn, int sockindex,
- bool nonblocking)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- Qso_OverlappedIO_t cstat;
- long timeout_ms;
- struct timeval stmv;
- CURLcode cc;
-
- /* Poll or wait for end of SSL asynchronous handshake. */
-
- for(;;) {
- timeout_ms = nonblocking? 0: Curl_timeleft(data, NULL, TRUE);
- if(timeout_ms < 0)
- timeout_ms = 0;
- stmv.tv_sec = timeout_ms / 1000;
- stmv.tv_usec = (timeout_ms - stmv.tv_sec * 1000) * 1000;
- switch (QsoWaitForIOCompletion(connssl->iocport, &cstat, &stmv)) {
- case 1: /* Operation complete. */
- break;
- case -1: /* An error occurred: handshake still in progress. */
- if(errno == EINTR) {
- if(nonblocking)
- return CURLE_OK;
- continue; /* Retry. */
- }
- if(errno != ETIME) {
- failf(data, "QsoWaitForIOCompletion() I/O error: %s", strerror(errno));
- cancel_async_handshake(conn, sockindex);
- close_async_handshake(connssl);
- return CURLE_SSL_CONNECT_ERROR;
- }
- /* FALL INTO... */
- case 0: /* Handshake in progress, timeout occurred. */
- if(nonblocking)
- return CURLE_OK;
- cancel_async_handshake(conn, sockindex);
- close_async_handshake(connssl);
- return CURLE_OPERATION_TIMEDOUT;
- }
- break;
- }
- cc = gskit_status(data, cstat.returnValue, "SSL handshake",
- CURLE_SSL_CONNECT_ERROR);
- if(cc == CURLE_OK)
- connssl->connecting_state = ssl_connect_3;
- close_async_handshake(connssl);
- return cc;
-}
-
-
-static CURLcode gskit_connect_step3(struct connectdata *conn, int sockindex)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- const gsk_cert_data_elem *cdev;
- int cdec;
- const gsk_cert_data_elem *p;
- const char *cert = (const char *) NULL;
- const char *certend;
- int i;
- CURLcode cc;
-
- /* SSL handshake done: gather certificate info and verify host. */
-
- if(gskit_status(data, gsk_attribute_get_cert_info(connssl->handle,
- GSK_PARTNER_CERT_INFO,
- &cdev, &cdec),
- "gsk_attribute_get_cert_info()", CURLE_SSL_CONNECT_ERROR) ==
- CURLE_OK) {
- infof(data, "Server certificate:\n");
- p = cdev;
- for(i = 0; i++ < cdec; p++)
- switch (p->cert_data_id) {
- case CERT_BODY_DER:
- cert = p->cert_data_p;
- certend = cert + cdev->cert_data_l;
- break;
- case CERT_DN_PRINTABLE:
- infof(data, "\t subject: %.*s\n", p->cert_data_l, p->cert_data_p);
- break;
- case CERT_ISSUER_DN_PRINTABLE:
- infof(data, "\t issuer: %.*s\n", p->cert_data_l, p->cert_data_p);
- break;
- case CERT_VALID_FROM:
- infof(data, "\t start date: %.*s\n", p->cert_data_l, p->cert_data_p);
- break;
- case CERT_VALID_TO:
- infof(data, "\t expire date: %.*s\n", p->cert_data_l, p->cert_data_p);
- break;
- }
- }
-
- /* Verify host. */
- cc = Curl_verifyhost(conn, cert, certend);
- if(cc != CURLE_OK)
- return cc;
-
- /* The only place GSKit can get the whole CA chain is a validation
- callback where no user data pointer is available. Therefore it's not
- possible to copy this chain into our structures for CAINFO.
- However the server certificate may be available, thus we can return
- info about it. */
- if(data->set.ssl.certinfo) {
- if(Curl_ssl_init_certinfo(data, 1))
- return CURLE_OUT_OF_MEMORY;
- if(cert) {
- cc = Curl_extract_certinfo(conn, 0, cert, certend);
- if(cc != CURLE_OK)
- return cc;
- }
- }
-
- connssl->connecting_state = ssl_connect_done;
- return CURLE_OK;
-}
-
-
-static CURLcode gskit_connect_common(struct connectdata *conn, int sockindex,
- bool nonblocking, bool *done)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- long timeout_ms;
- Qso_OverlappedIO_t cstat;
- CURLcode cc = CURLE_OK;
-
- *done = connssl->state == ssl_connection_complete;
- if(*done)
- return CURLE_OK;
-
- /* Step 1: create session, start handshake. */
- if(connssl->connecting_state == ssl_connect_1) {
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- cc = CURLE_OPERATION_TIMEDOUT;
- }
- else
- cc = gskit_connect_step1(conn, sockindex);
- }
-
- /* Step 2: check if handshake is over. */
- if(cc == CURLE_OK && connssl->connecting_state == ssl_connect_2) {
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- cc = CURLE_OPERATION_TIMEDOUT;
- }
- else
- cc = gskit_connect_step2(conn, sockindex, nonblocking);
- }
-
- /* Step 3: gather certificate info, verify host. */
- if(cc == CURLE_OK && connssl->connecting_state == ssl_connect_3)
- cc = gskit_connect_step3(conn, sockindex);
-
- if(cc != CURLE_OK)
- close_one(connssl, data);
- else if(connssl->connecting_state == ssl_connect_done) {
- connssl->state = ssl_connection_complete;
- connssl->connecting_state = ssl_connect_1;
- conn->recv[sockindex] = gskit_recv;
- conn->send[sockindex] = gskit_send;
- *done = TRUE;
- }
-
- return cc;
-}
-
-
-CURLcode Curl_gskit_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- CURLcode cc;
-
- cc = gskit_connect_common(conn, sockindex, TRUE, done);
- if(*done || cc != CURLE_OK)
- conn->ssl[sockindex].connecting_state = ssl_connect_1;
- return cc;
-}
-
-
-CURLcode Curl_gskit_connect(struct connectdata *conn, int sockindex)
-{
- CURLcode retcode;
- bool done;
-
- conn->ssl[sockindex].connecting_state = ssl_connect_1;
- retcode = gskit_connect_common(conn, sockindex, FALSE, &done);
- if(retcode)
- return retcode;
-
- DEBUGASSERT(done);
-
- return CURLE_OK;
-}
-
-
-void Curl_gskit_close(struct connectdata *conn, int sockindex)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- if(connssl->use)
- close_one(connssl, data);
-}
-
-
-int Curl_gskit_close_all(struct SessionHandle *data)
-{
- /* Unimplemented. */
- (void) data;
- return 0;
-}
-
-
-int Curl_gskit_shutdown(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct SessionHandle *data = conn->data;
- ssize_t nread;
- int what;
- int rc;
- char buf[120];
-
- if(!connssl->handle)
- return 0;
-
- if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
- return 0;
-
- close_one(connssl, data);
- rc = 0;
- what = Curl_socket_ready(conn->sock[sockindex],
- CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
-
- for(;;) {
- if(what < 0) {
- /* anything that gets here is fatally bad */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- rc = -1;
- break;
- }
-
- if(!what) { /* timeout */
- failf(data, "SSL shutdown timeout");
- break;
- }
-
- /* Something to read, let's do it and hope that it is the close
- notify alert from the server. No way to gsk_secure_soc_read() now, so
- use read(). */
-
- nread = read(conn->sock[sockindex], buf, sizeof(buf));
-
- if(nread < 0) {
- failf(data, "read: %s", strerror(errno));
- rc = -1;
- }
-
- if(nread <= 0)
- break;
-
- what = Curl_socket_ready(conn->sock[sockindex], CURL_SOCKET_BAD, 0);
- }
-
- return rc;
-}
-
-
-size_t Curl_gskit_version(char *buffer, size_t size)
-{
- strncpy(buffer, "GSKit", size);
- return strlen(buffer);
-}
-
-
-int Curl_gskit_check_cxn(struct connectdata *cxn)
-{
- int err;
- int errlen;
-
- /* The only thing that can be tested here is at the socket level. */
-
- if(!cxn->ssl[FIRSTSOCKET].handle)
- return 0; /* connection has been closed */
-
- err = 0;
- errlen = sizeof err;
-
- if(getsockopt(cxn->sock[FIRSTSOCKET], SOL_SOCKET, SO_ERROR,
- (unsigned char *) &err, &errlen) ||
- errlen != sizeof err || err)
- return 0; /* connection has been closed */
-
- return -1; /* connection status unknown */
-}
-
-#endif /* USE_GSKIT */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/gskit.h b/external/libcurl_android/jni/libcurl/lib/vtls/gskit.h
deleted file mode 100755
index a4caa6f2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/gskit.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef HEADER_CURL_GSKIT_H
-#define HEADER_CURL_GSKIT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-/*
- * This header should only be needed to get included by vtls.c and gskit.c
- */
-
-#include "urldata.h"
-
-#ifdef USE_GSKIT
-int Curl_gskit_init(void);
-void Curl_gskit_cleanup(void);
-CURLcode Curl_gskit_connect(struct connectdata * conn, int sockindex);
-CURLcode Curl_gskit_connect_nonblocking(struct connectdata * conn,
- int sockindex, bool * done);
-void Curl_gskit_close(struct connectdata *conn, int sockindex);
-int Curl_gskit_close_all(struct SessionHandle * data);
-int Curl_gskit_shutdown(struct connectdata * conn, int sockindex);
-
-size_t Curl_gskit_version(char * buffer, size_t size);
-int Curl_gskit_check_cxn(struct connectdata * cxn);
-
-/* API setup for GSKit */
-#define curlssl_init Curl_gskit_init
-#define curlssl_cleanup Curl_gskit_cleanup
-#define curlssl_connect Curl_gskit_connect
-#define curlssl_connect_nonblocking Curl_gskit_connect_nonblocking
-
-/* No session handling for GSKit */
-#define curlssl_session_free(x) Curl_nop_stmt
-#define curlssl_close_all Curl_gskit_close_all
-#define curlssl_close Curl_gskit_close
-#define curlssl_shutdown(x,y) Curl_gskit_shutdown(x,y)
-#define curlssl_set_engine(x,y) CURLE_NOT_BUILT_IN
-#define curlssl_set_engine_default(x) CURLE_NOT_BUILT_IN
-#define curlssl_engines_list(x) NULL
-#define curlssl_version Curl_gskit_version
-#define curlssl_check_cxn(x) Curl_gskit_check_cxn(x)
-#define curlssl_data_pending(x,y) 0
-#define CURL_SSL_BACKEND CURLSSLBACKEND_GSKIT
-#endif /* USE_GSKIT */
-
-#endif /* HEADER_CURL_GSKIT_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/gtls.c b/external/libcurl_android/jni/libcurl/lib/vtls/gtls.c
deleted file mode 100755
index d64f95dc..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/gtls.c
+++ /dev/null
@@ -1,1323 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Source file for all GnuTLS-specific code for the TLS/SSL layer. No code
- * but vtls.c should ever call or use these functions.
- *
- * Note: don't use the GnuTLS' *_t variable type names in this source code,
- * since they were not present in 1.0.X.
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_GNUTLS
-
-#include <gnutls/gnutls.h>
-#include <gnutls/x509.h>
-
-#ifdef USE_GNUTLS_NETTLE
-#include <gnutls/crypto.h>
-#include <nettle/md5.h>
-#else
-#include <gcrypt.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "inet_pton.h"
-#include "gtls.h"
-#include "vtls.h"
-#include "parsedate.h"
-#include "connect.h" /* for the connect timeout */
-#include "select.h"
-#include "rawstr.h"
-#include "warnless.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/*
- Some hackish cast macros based on:
- http://library.gnome.org/devel/glib/unstable/glib-Type-Conversion-Macros.html
-*/
-#ifndef GNUTLS_POINTER_TO_INT_CAST
-#define GNUTLS_POINTER_TO_INT_CAST(p) ((int) (long) (p))
-#endif
-#ifndef GNUTLS_INT_TO_POINTER_CAST
-#define GNUTLS_INT_TO_POINTER_CAST(i) ((void*) (long) (i))
-#endif
-
-/* Enable GnuTLS debugging by defining GTLSDEBUG */
-/*#define GTLSDEBUG */
-
-#ifdef GTLSDEBUG
-static void tls_log_func(int level, const char *str)
-{
- fprintf(stderr, "|<%d>| %s", level, str);
-}
-#endif
-static bool gtls_inited = FALSE;
-
-#if defined(GNUTLS_VERSION_NUMBER)
-# if (GNUTLS_VERSION_NUMBER >= 0x020c00)
-# undef gnutls_transport_set_lowat
-# define gnutls_transport_set_lowat(A,B) Curl_nop_stmt
-# define USE_GNUTLS_PRIORITY_SET_DIRECT 1
-# endif
-# if (GNUTLS_VERSION_NUMBER >= 0x020c03)
-# define GNUTLS_MAPS_WINSOCK_ERRORS 1
-# endif
-
-# ifdef USE_NGHTTP2
-# undef HAS_ALPN
-# if (GNUTLS_VERSION_NUMBER >= 0x030200)
-# define HAS_ALPN
-# endif
-# endif
-#endif
-
-/*
- * Custom push and pull callback functions used by GNU TLS to read and write
- * to the socket. These functions are simple wrappers to send() and recv()
- * (although here using the sread/swrite macros as defined by
- * curl_setup_once.h).
- * We use custom functions rather than the GNU TLS defaults because it allows
- * us to get specific about the fourth "flags" argument, and to use arbitrary
- * private data with gnutls_transport_set_ptr if we wish.
- *
- * When these custom push and pull callbacks fail, GNU TLS checks its own
- * session-specific error variable, and when not set also its own global
- * errno variable, in order to take appropriate action. GNU TLS does not
- * require that the transport is actually a socket. This implies that for
- * Windows builds these callbacks should ideally set the session-specific
- * error variable using function gnutls_transport_set_errno or as a last
- * resort global errno variable using gnutls_transport_set_global_errno,
- * with a transport agnostic error value. This implies that some winsock
- * error translation must take place in these callbacks.
- *
- * Paragraph above applies to GNU TLS versions older than 2.12.3, since
- * this version GNU TLS does its own internal winsock error translation
- * using system_errno() function.
- */
-
-#if defined(USE_WINSOCK) && !defined(GNUTLS_MAPS_WINSOCK_ERRORS)
-# define gtls_EINTR 4
-# define gtls_EIO 5
-# define gtls_EAGAIN 11
-static int gtls_mapped_sockerrno(void)
-{
- switch(SOCKERRNO) {
- case WSAEWOULDBLOCK:
- return gtls_EAGAIN;
- case WSAEINTR:
- return gtls_EINTR;
- default:
- break;
- }
- return gtls_EIO;
-}
-#endif
-
-static ssize_t Curl_gtls_push(void *s, const void *buf, size_t len)
-{
- ssize_t ret = swrite(GNUTLS_POINTER_TO_INT_CAST(s), buf, len);
-#if defined(USE_WINSOCK) && !defined(GNUTLS_MAPS_WINSOCK_ERRORS)
- if(ret < 0)
- gnutls_transport_set_global_errno(gtls_mapped_sockerrno());
-#endif
- return ret;
-}
-
-static ssize_t Curl_gtls_pull(void *s, void *buf, size_t len)
-{
- ssize_t ret = sread(GNUTLS_POINTER_TO_INT_CAST(s), buf, len);
-#if defined(USE_WINSOCK) && !defined(GNUTLS_MAPS_WINSOCK_ERRORS)
- if(ret < 0)
- gnutls_transport_set_global_errno(gtls_mapped_sockerrno());
-#endif
- return ret;
-}
-
-/* Curl_gtls_init()
- *
- * Global GnuTLS init, called from Curl_ssl_init(). This calls functions that
- * are not thread-safe and thus this function itself is not thread-safe and
- * must only be called from within curl_global_init() to keep the thread
- * situation under control!
- */
-int Curl_gtls_init(void)
-{
- int ret = 1;
- if(!gtls_inited) {
- ret = gnutls_global_init()?0:1;
-#ifdef GTLSDEBUG
- gnutls_global_set_log_function(tls_log_func);
- gnutls_global_set_log_level(2);
-#endif
- gtls_inited = TRUE;
- }
- return ret;
-}
-
-int Curl_gtls_cleanup(void)
-{
- if(gtls_inited) {
- gnutls_global_deinit();
- gtls_inited = FALSE;
- }
- return 1;
-}
-
-static void showtime(struct SessionHandle *data,
- const char *text,
- time_t stamp)
-{
- struct tm buffer;
- const struct tm *tm = &buffer;
- CURLcode result = Curl_gmtime(stamp, &buffer);
- if(result)
- return;
-
- snprintf(data->state.buffer,
- BUFSIZE,
- "\t %s: %s, %02d %s %4d %02d:%02d:%02d GMT\n",
- text,
- Curl_wkday[tm->tm_wday?tm->tm_wday-1:6],
- tm->tm_mday,
- Curl_month[tm->tm_mon],
- tm->tm_year + 1900,
- tm->tm_hour,
- tm->tm_min,
- tm->tm_sec);
- infof(data, "%s\n", data->state.buffer);
-}
-
-static gnutls_datum_t load_file (const char *file)
-{
- FILE *f;
- gnutls_datum_t loaded_file = { NULL, 0 };
- long filelen;
- void *ptr;
-
- if(!(f = fopen(file, "r")))
- return loaded_file;
- if(fseek(f, 0, SEEK_END) != 0
- || (filelen = ftell(f)) < 0
- || fseek(f, 0, SEEK_SET) != 0
- || !(ptr = malloc((size_t)filelen)))
- goto out;
- if(fread(ptr, 1, (size_t)filelen, f) < (size_t)filelen) {
- free(ptr);
- goto out;
- }
-
- loaded_file.data = ptr;
- loaded_file.size = (unsigned int)filelen;
-out:
- fclose(f);
- return loaded_file;
-}
-
-static void unload_file(gnutls_datum_t data) {
- free(data.data);
-}
-
-
-/* this function does a SSL/TLS (re-)handshake */
-static CURLcode handshake(struct connectdata *conn,
- int sockindex,
- bool duringconnect,
- bool nonblocking)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- gnutls_session_t session = conn->ssl[sockindex].session;
- curl_socket_t sockfd = conn->sock[sockindex];
- long timeout_ms;
- int rc;
- int what;
-
- for(;;) {
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, duringconnect);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- /* if ssl is expecting something, check if it's available. */
- if(connssl->connecting_state == ssl_connect_2_reading
- || connssl->connecting_state == ssl_connect_2_writing) {
-
- curl_socket_t writefd = ssl_connect_2_writing==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
- curl_socket_t readfd = ssl_connect_2_reading==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
-
- what = Curl_socket_ready(readfd, writefd,
- nonblocking?0:
- timeout_ms?timeout_ms:1000);
- if(what < 0) {
- /* fatal error */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- return CURLE_SSL_CONNECT_ERROR;
- }
- else if(0 == what) {
- if(nonblocking)
- return CURLE_OK;
- else if(timeout_ms) {
- /* timeout */
- failf(data, "SSL connection timeout at %ld", timeout_ms);
- return CURLE_OPERATION_TIMEDOUT;
- }
- }
- /* socket is readable or writable */
- }
-
- rc = gnutls_handshake(session);
-
- if((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)) {
- connssl->connecting_state =
- gnutls_record_get_direction(session)?
- ssl_connect_2_writing:ssl_connect_2_reading;
- continue;
- if(nonblocking)
- return CURLE_OK;
- }
- else if((rc < 0) && !gnutls_error_is_fatal(rc)) {
- const char *strerr = NULL;
-
- if(rc == GNUTLS_E_WARNING_ALERT_RECEIVED) {
- int alert = gnutls_alert_get(session);
- strerr = gnutls_alert_get_name(alert);
- }
-
- if(strerr == NULL)
- strerr = gnutls_strerror(rc);
-
- failf(data, "gnutls_handshake() warning: %s", strerr);
- }
- else if(rc < 0) {
- const char *strerr = NULL;
-
- if(rc == GNUTLS_E_FATAL_ALERT_RECEIVED) {
- int alert = gnutls_alert_get(session);
- strerr = gnutls_alert_get_name(alert);
- }
-
- if(strerr == NULL)
- strerr = gnutls_strerror(rc);
-
- failf(data, "gnutls_handshake() failed: %s", strerr);
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* Reset our connect state machine */
- connssl->connecting_state = ssl_connect_1;
- return CURLE_OK;
- }
-}
-
-static gnutls_x509_crt_fmt_t do_file_type(const char *type)
-{
- if(!type || !type[0])
- return GNUTLS_X509_FMT_PEM;
- if(Curl_raw_equal(type, "PEM"))
- return GNUTLS_X509_FMT_PEM;
- if(Curl_raw_equal(type, "DER"))
- return GNUTLS_X509_FMT_DER;
- return -1;
-}
-
-static CURLcode
-gtls_connect_step1(struct connectdata *conn,
- int sockindex)
-{
- struct SessionHandle *data = conn->data;
- gnutls_session_t session;
- int rc;
- void *ssl_sessionid;
- size_t ssl_idsize;
- bool sni = TRUE; /* default is SNI enabled */
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif
-#ifndef USE_GNUTLS_PRIORITY_SET_DIRECT
- static const int cipher_priority[] = {
- /* These two ciphers were added to GnuTLS as late as ver. 3.0.1,
- but this code path is only ever used for ver. < 2.12.0.
- GNUTLS_CIPHER_AES_128_GCM,
- GNUTLS_CIPHER_AES_256_GCM,
- */
- GNUTLS_CIPHER_AES_128_CBC,
- GNUTLS_CIPHER_AES_256_CBC,
- GNUTLS_CIPHER_CAMELLIA_128_CBC,
- GNUTLS_CIPHER_CAMELLIA_256_CBC,
- GNUTLS_CIPHER_3DES_CBC,
- };
- static const int cert_type_priority[] = { GNUTLS_CRT_X509, 0 };
- static int protocol_priority[] = { 0, 0, 0, 0 };
-#else
-#define GNUTLS_CIPHERS "NORMAL:-ARCFOUR-128:-CTYPE-ALL:+CTYPE-X509"
-/* If GnuTLS was compiled without support for SRP it will error out if SRP is
- requested in the priority string, so treat it specially
- */
-#define GNUTLS_SRP "+SRP"
- const char* prioritylist;
- const char *err = NULL;
-#endif
-#ifdef HAS_ALPN
- int protocols_size = 2;
- gnutls_datum_t protocols[2];
-#endif
-
- if(conn->ssl[sockindex].state == ssl_connection_complete)
- /* to make us tolerant against being called more than once for the
- same connection */
- return CURLE_OK;
-
- if(!gtls_inited)
- Curl_gtls_init();
-
- /* GnuTLS only supports SSLv3 and TLSv1 */
- if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
- failf(data, "GnuTLS does not support SSLv2");
- return CURLE_SSL_CONNECT_ERROR;
- }
- else if(data->set.ssl.version == CURL_SSLVERSION_SSLv3)
- sni = FALSE; /* SSLv3 has no SNI */
-
- /* allocate a cred struct */
- rc = gnutls_certificate_allocate_credentials(&conn->ssl[sockindex].cred);
- if(rc != GNUTLS_E_SUCCESS) {
- failf(data, "gnutls_cert_all_cred() failed: %s", gnutls_strerror(rc));
- return CURLE_SSL_CONNECT_ERROR;
- }
-
-#ifdef USE_TLS_SRP
- if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
- infof(data, "Using TLS-SRP username: %s\n", data->set.ssl.username);
-
- rc = gnutls_srp_allocate_client_credentials(
- &conn->ssl[sockindex].srp_client_cred);
- if(rc != GNUTLS_E_SUCCESS) {
- failf(data, "gnutls_srp_allocate_client_cred() failed: %s",
- gnutls_strerror(rc));
- return CURLE_OUT_OF_MEMORY;
- }
-
- rc = gnutls_srp_set_client_credentials(conn->ssl[sockindex].
- srp_client_cred,
- data->set.ssl.username,
- data->set.ssl.password);
- if(rc != GNUTLS_E_SUCCESS) {
- failf(data, "gnutls_srp_set_client_cred() failed: %s",
- gnutls_strerror(rc));
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- }
-#endif
-
- if(data->set.ssl.CAfile) {
- /* set the trusted CA cert bundle file */
- gnutls_certificate_set_verify_flags(conn->ssl[sockindex].cred,
- GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT);
-
- rc = gnutls_certificate_set_x509_trust_file(conn->ssl[sockindex].cred,
- data->set.ssl.CAfile,
- GNUTLS_X509_FMT_PEM);
- if(rc < 0) {
- infof(data, "error reading ca cert file %s (%s)\n",
- data->set.ssl.CAfile, gnutls_strerror(rc));
- if(data->set.ssl.verifypeer)
- return CURLE_SSL_CACERT_BADFILE;
- }
- else
- infof(data, "found %d certificates in %s\n",
- rc, data->set.ssl.CAfile);
- }
-
- if(data->set.ssl.CRLfile) {
- /* set the CRL list file */
- rc = gnutls_certificate_set_x509_crl_file(conn->ssl[sockindex].cred,
- data->set.ssl.CRLfile,
- GNUTLS_X509_FMT_PEM);
- if(rc < 0) {
- failf(data, "error reading crl file %s (%s)",
- data->set.ssl.CRLfile, gnutls_strerror(rc));
- return CURLE_SSL_CRL_BADFILE;
- }
- else
- infof(data, "found %d CRL in %s\n",
- rc, data->set.ssl.CRLfile);
- }
-
- /* Initialize TLS session as a client */
- rc = gnutls_init(&conn->ssl[sockindex].session, GNUTLS_CLIENT);
- if(rc != GNUTLS_E_SUCCESS) {
- failf(data, "gnutls_init() failed: %d", rc);
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* convenient assign */
- session = conn->ssl[sockindex].session;
-
- if((0 == Curl_inet_pton(AF_INET, conn->host.name, &addr)) &&
-#ifdef ENABLE_IPV6
- (0 == Curl_inet_pton(AF_INET6, conn->host.name, &addr)) &&
-#endif
- sni &&
- (gnutls_server_name_set(session, GNUTLS_NAME_DNS, conn->host.name,
- strlen(conn->host.name)) < 0))
- infof(data, "WARNING: failed to configure server name indication (SNI) "
- "TLS extension\n");
-
- /* Use default priorities */
- rc = gnutls_set_default_priority(session);
- if(rc != GNUTLS_E_SUCCESS)
- return CURLE_SSL_CONNECT_ERROR;
-
-#ifndef USE_GNUTLS_PRIORITY_SET_DIRECT
- rc = gnutls_cipher_set_priority(session, cipher_priority);
- if(rc != GNUTLS_E_SUCCESS)
- return CURLE_SSL_CONNECT_ERROR;
-
- /* Sets the priority on the certificate types supported by gnutls. Priority
- is higher for types specified before others. After specifying the types
- you want, you must append a 0. */
- rc = gnutls_certificate_type_set_priority(session, cert_type_priority);
- if(rc != GNUTLS_E_SUCCESS)
- return CURLE_SSL_CONNECT_ERROR;
-
- if(data->set.ssl.cipher_list != NULL) {
- failf(data, "can't pass a custom cipher list to older GnuTLS"
- " versions");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- switch (data->set.ssl.version) {
- case CURL_SSLVERSION_SSLv3:
- protocol_priority[0] = GNUTLS_SSL3;
- break;
- case CURL_SSLVERSION_DEFAULT:
- case CURL_SSLVERSION_TLSv1:
- protocol_priority[0] = GNUTLS_TLS1_0;
- protocol_priority[1] = GNUTLS_TLS1_1;
- protocol_priority[2] = GNUTLS_TLS1_2;
- break;
- case CURL_SSLVERSION_TLSv1_0:
- protocol_priority[0] = GNUTLS_TLS1_0;
- break;
- case CURL_SSLVERSION_TLSv1_1:
- protocol_priority[0] = GNUTLS_TLS1_1;
- break;
- case CURL_SSLVERSION_TLSv1_2:
- protocol_priority[0] = GNUTLS_TLS1_2;
- break;
- case CURL_SSLVERSION_SSLv2:
- default:
- failf(data, "GnuTLS does not support SSLv2");
- return CURLE_SSL_CONNECT_ERROR;
- break;
- }
- rc = gnutls_protocol_set_priority(session, protocol_priority);
- if(rc != GNUTLS_E_SUCCESS) {
- failf(data, "Did you pass a valid GnuTLS cipher list?");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
-#else
- /* Ensure +SRP comes at the *end* of all relevant strings so that it can be
- * removed if a run-time error indicates that SRP is not supported by this
- * GnuTLS version */
- switch (data->set.ssl.version) {
- case CURL_SSLVERSION_SSLv3:
- prioritylist = GNUTLS_CIPHERS ":-VERS-TLS-ALL:+VERS-SSL3.0";
- sni = false;
- break;
- case CURL_SSLVERSION_DEFAULT:
- case CURL_SSLVERSION_TLSv1:
- prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:" GNUTLS_SRP;
- break;
- case CURL_SSLVERSION_TLSv1_0:
- prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
- "+VERS-TLS1.0:" GNUTLS_SRP;
- break;
- case CURL_SSLVERSION_TLSv1_1:
- prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
- "+VERS-TLS1.1:" GNUTLS_SRP;
- break;
- case CURL_SSLVERSION_TLSv1_2:
- prioritylist = GNUTLS_CIPHERS ":-VERS-SSL3.0:-VERS-TLS-ALL:"
- "+VERS-TLS1.2:" GNUTLS_SRP;
- break;
- case CURL_SSLVERSION_SSLv2:
- default:
- failf(data, "GnuTLS does not support SSLv2");
- return CURLE_SSL_CONNECT_ERROR;
- break;
- }
- rc = gnutls_priority_set_direct(session, prioritylist, &err);
- if((rc == GNUTLS_E_INVALID_REQUEST) && err) {
- if(!strcmp(err, GNUTLS_SRP)) {
- /* This GnuTLS was probably compiled without support for SRP.
- * Note that fact and try again without it. */
- int validprioritylen = curlx_uztosi(err - prioritylist);
- char *prioritycopy = strdup(prioritylist);
- if(!prioritycopy)
- return CURLE_OUT_OF_MEMORY;
-
- infof(data, "This GnuTLS does not support SRP\n");
- if(validprioritylen)
- /* Remove the :+SRP */
- prioritycopy[validprioritylen - 1] = 0;
- rc = gnutls_priority_set_direct(session, prioritycopy, &err);
- free(prioritycopy);
- }
- }
- if(rc != GNUTLS_E_SUCCESS) {
- failf(data, "Error %d setting GnuTLS cipher list starting with %s",
- rc, err);
- return CURLE_SSL_CONNECT_ERROR;
- }
-#endif
-
-#ifdef HAS_ALPN
- if(data->set.httpversion == CURL_HTTP_VERSION_2_0) {
- if(data->set.ssl_enable_alpn) {
- protocols[0].data = NGHTTP2_PROTO_VERSION_ID;
- protocols[0].size = NGHTTP2_PROTO_VERSION_ID_LEN;
- protocols[1].data = ALPN_HTTP_1_1;
- protocols[1].size = ALPN_HTTP_1_1_LENGTH;
- gnutls_alpn_set_protocols(session, protocols, protocols_size, 0);
- infof(data, "ALPN, offering %s, %s\n", NGHTTP2_PROTO_VERSION_ID,
- ALPN_HTTP_1_1);
- }
- else {
- infof(data, "SSL, can't negotiate HTTP/2.0 without ALPN\n");
- }
- }
-#endif
-
- if(data->set.str[STRING_CERT]) {
- if(gnutls_certificate_set_x509_key_file(
- conn->ssl[sockindex].cred,
- data->set.str[STRING_CERT],
- data->set.str[STRING_KEY] ?
- data->set.str[STRING_KEY] : data->set.str[STRING_CERT],
- do_file_type(data->set.str[STRING_CERT_TYPE]) ) !=
- GNUTLS_E_SUCCESS) {
- failf(data, "error reading X.509 key or certificate file");
- return CURLE_SSL_CONNECT_ERROR;
- }
- }
-
-#ifdef USE_TLS_SRP
- /* put the credentials to the current session */
- if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
- rc = gnutls_credentials_set(session, GNUTLS_CRD_SRP,
- conn->ssl[sockindex].srp_client_cred);
- if(rc != GNUTLS_E_SUCCESS)
- failf(data, "gnutls_credentials_set() failed: %s", gnutls_strerror(rc));
- }
- else
-#endif
- rc = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE,
- conn->ssl[sockindex].cred);
-
- /* set the connection handle (file descriptor for the socket) */
- gnutls_transport_set_ptr(session,
- GNUTLS_INT_TO_POINTER_CAST(conn->sock[sockindex]));
-
- /* register callback functions to send and receive data. */
- gnutls_transport_set_push_function(session, Curl_gtls_push);
- gnutls_transport_set_pull_function(session, Curl_gtls_pull);
-
- /* lowat must be set to zero when using custom push and pull functions. */
- gnutls_transport_set_lowat(session, 0);
-
- /* This might be a reconnect, so we check for a session ID in the cache
- to speed up things */
-
- if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, &ssl_idsize)) {
- /* we got a session id, use it! */
- gnutls_session_set_data(session, ssl_sessionid, ssl_idsize);
-
- /* Informational message */
- infof (data, "SSL re-using session ID\n");
- }
-
- return CURLE_OK;
-}
-
-static Curl_recv gtls_recv;
-static Curl_send gtls_send;
-
-static CURLcode
-gtls_connect_step3(struct connectdata *conn,
- int sockindex)
-{
- unsigned int cert_list_size;
- const gnutls_datum_t *chainp;
- unsigned int verify_status;
- gnutls_x509_crt_t x509_cert,x509_issuer;
- gnutls_datum_t issuerp;
- char certbuf[256] = ""; /* big enough? */
- size_t size;
- unsigned int algo;
- unsigned int bits;
- time_t certclock;
- const char *ptr;
- struct SessionHandle *data = conn->data;
- gnutls_session_t session = conn->ssl[sockindex].session;
- int rc;
- int incache;
- void *ssl_sessionid;
-#ifdef HAS_ALPN
- gnutls_datum_t proto;
-#endif
- CURLcode result = CURLE_OK;
-
- /* This function will return the peer's raw certificate (chain) as sent by
- the peer. These certificates are in raw format (DER encoded for
- X.509). In case of a X.509 then a certificate list may be present. The
- first certificate in the list is the peer's certificate, following the
- issuer's certificate, then the issuer's issuer etc. */
-
- chainp = gnutls_certificate_get_peers(session, &cert_list_size);
- if(!chainp) {
- if(data->set.ssl.verifypeer ||
- data->set.ssl.verifyhost ||
- data->set.ssl.issuercert) {
-#ifdef USE_TLS_SRP
- if(data->set.ssl.authtype == CURL_TLSAUTH_SRP
- && data->set.ssl.username != NULL
- && !data->set.ssl.verifypeer
- && gnutls_cipher_get(session)) {
- /* no peer cert, but auth is ok if we have SRP user and cipher and no
- peer verify */
- }
- else {
-#endif
- failf(data, "failed to get server cert");
- return CURLE_PEER_FAILED_VERIFICATION;
-#ifdef USE_TLS_SRP
- }
-#endif
- }
- infof(data, "\t common name: WARNING couldn't obtain\n");
- }
-
- if(data->set.ssl.verifypeer) {
- /* This function will try to verify the peer's certificate and return its
- status (trusted, invalid etc.). The value of status should be one or
- more of the gnutls_certificate_status_t enumerated elements bitwise
- or'd. To avoid denial of service attacks some default upper limits
- regarding the certificate key size and chain size are set. To override
- them use gnutls_certificate_set_verify_limits(). */
-
- rc = gnutls_certificate_verify_peers2(session, &verify_status);
- if(rc < 0) {
- failf(data, "server cert verify failed: %d", rc);
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* verify_status is a bitmask of gnutls_certificate_status bits */
- if(verify_status & GNUTLS_CERT_INVALID) {
- if(data->set.ssl.verifypeer) {
- failf(data, "server certificate verification failed. CAfile: %s "
- "CRLfile: %s", data->set.ssl.CAfile?data->set.ssl.CAfile:"none",
- data->set.ssl.CRLfile?data->set.ssl.CRLfile:"none");
- return CURLE_SSL_CACERT;
- }
- else
- infof(data, "\t server certificate verification FAILED\n");
- }
- else
- infof(data, "\t server certificate verification OK\n");
- }
- else
- infof(data, "\t server certificate verification SKIPPED\n");
-
- /* initialize an X.509 certificate structure. */
- gnutls_x509_crt_init(&x509_cert);
-
- if(chainp)
- /* convert the given DER or PEM encoded Certificate to the native
- gnutls_x509_crt_t format */
- gnutls_x509_crt_import(x509_cert, chainp, GNUTLS_X509_FMT_DER);
-
- if(data->set.ssl.issuercert) {
- gnutls_x509_crt_init(&x509_issuer);
- issuerp = load_file(data->set.ssl.issuercert);
- gnutls_x509_crt_import(x509_issuer, &issuerp, GNUTLS_X509_FMT_PEM);
- rc = gnutls_x509_crt_check_issuer(x509_cert,x509_issuer);
- unload_file(issuerp);
- if(rc <= 0) {
- failf(data, "server certificate issuer check failed (IssuerCert: %s)",
- data->set.ssl.issuercert?data->set.ssl.issuercert:"none");
- return CURLE_SSL_ISSUER_ERROR;
- }
- infof(data,"\t server certificate issuer check OK (Issuer Cert: %s)\n",
- data->set.ssl.issuercert?data->set.ssl.issuercert:"none");
- }
-
- size=sizeof(certbuf);
- rc = gnutls_x509_crt_get_dn_by_oid(x509_cert, GNUTLS_OID_X520_COMMON_NAME,
- 0, /* the first and only one */
- FALSE,
- certbuf,
- &size);
- if(rc) {
- infof(data, "error fetching CN from cert:%s\n",
- gnutls_strerror(rc));
- }
-
- /* This function will check if the given certificate's subject matches the
- given hostname. This is a basic implementation of the matching described
- in RFC2818 (HTTPS), which takes into account wildcards, and the subject
- alternative name PKIX extension. Returns non zero on success, and zero on
- failure. */
- rc = gnutls_x509_crt_check_hostname(x509_cert, conn->host.name);
-#if GNUTLS_VERSION_NUMBER < 0x030306
- /* Before 3.3.6, gnutls_x509_crt_check_hostname() didn't check IP
- addresses. */
- if(!rc) {
-#ifdef ENABLE_IPV6
- #define use_addr in6_addr
-#else
- #define use_addr in_addr
-#endif
- unsigned char addrbuf[sizeof(struct use_addr)];
- unsigned char certaddr[sizeof(struct use_addr)];
- size_t addrlen = 0, certaddrlen;
- int i;
- int ret = 0;
-
- if(Curl_inet_pton(AF_INET, conn->host.name, addrbuf) > 0)
- addrlen = 4;
-#ifdef ENABLE_IPV6
- else if(Curl_inet_pton(AF_INET6, conn->host.name, addrbuf) > 0)
- addrlen = 16;
-#endif
-
- if(addrlen) {
- for(i=0; ; i++) {
- certaddrlen = sizeof(certaddr);
- ret = gnutls_x509_crt_get_subject_alt_name(x509_cert, i, certaddr,
- &certaddrlen, NULL);
- /* If this happens, it wasn't an IP address. */
- if(ret == GNUTLS_E_SHORT_MEMORY_BUFFER)
- continue;
- if(ret < 0)
- break;
- if(ret != GNUTLS_SAN_IPADDRESS)
- continue;
- if(certaddrlen == addrlen && !memcmp(addrbuf, certaddr, addrlen)) {
- rc = 1;
- break;
- }
- }
- }
- }
-#endif
- if(!rc) {
- if(data->set.ssl.verifyhost) {
- failf(data, "SSL: certificate subject name (%s) does not match "
- "target host name '%s'", certbuf, conn->host.dispname);
- gnutls_x509_crt_deinit(x509_cert);
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- else
- infof(data, "\t common name: %s (does not match '%s')\n",
- certbuf, conn->host.dispname);
- }
- else
- infof(data, "\t common name: %s (matched)\n", certbuf);
-
- /* Check for time-based validity */
- certclock = gnutls_x509_crt_get_expiration_time(x509_cert);
-
- if(certclock == (time_t)-1) {
- if(data->set.ssl.verifypeer) {
- failf(data, "server cert expiration date verify failed");
- return CURLE_SSL_CONNECT_ERROR;
- }
- else
- infof(data, "\t server certificate expiration date verify FAILED\n");
- }
- else {
- if(certclock < time(NULL)) {
- if(data->set.ssl.verifypeer) {
- failf(data, "server certificate expiration date has passed.");
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- else
- infof(data, "\t server certificate expiration date FAILED\n");
- }
- else
- infof(data, "\t server certificate expiration date OK\n");
- }
-
- certclock = gnutls_x509_crt_get_activation_time(x509_cert);
-
- if(certclock == (time_t)-1) {
- if(data->set.ssl.verifypeer) {
- failf(data, "server cert activation date verify failed");
- return CURLE_SSL_CONNECT_ERROR;
- }
- else
- infof(data, "\t server certificate activation date verify FAILED\n");
- }
- else {
- if(certclock > time(NULL)) {
- if(data->set.ssl.verifypeer) {
- failf(data, "server certificate not activated yet.");
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- else
- infof(data, "\t server certificate activation date FAILED\n");
- }
- else
- infof(data, "\t server certificate activation date OK\n");
- }
-
- /* Show:
-
- - ciphers used
- - subject
- - start date
- - expire date
- - common name
- - issuer
-
- */
-
- /* public key algorithm's parameters */
- algo = gnutls_x509_crt_get_pk_algorithm(x509_cert, &bits);
- infof(data, "\t certificate public key: %s\n",
- gnutls_pk_algorithm_get_name(algo));
-
- /* version of the X.509 certificate. */
- infof(data, "\t certificate version: #%d\n",
- gnutls_x509_crt_get_version(x509_cert));
-
-
- size = sizeof(certbuf);
- gnutls_x509_crt_get_dn(x509_cert, certbuf, &size);
- infof(data, "\t subject: %s\n", certbuf);
-
- certclock = gnutls_x509_crt_get_activation_time(x509_cert);
- showtime(data, "start date", certclock);
-
- certclock = gnutls_x509_crt_get_expiration_time(x509_cert);
- showtime(data, "expire date", certclock);
-
- size = sizeof(certbuf);
- gnutls_x509_crt_get_issuer_dn(x509_cert, certbuf, &size);
- infof(data, "\t issuer: %s\n", certbuf);
-
- gnutls_x509_crt_deinit(x509_cert);
-
- /* compression algorithm (if any) */
- ptr = gnutls_compression_get_name(gnutls_compression_get(session));
- /* the *_get_name() says "NULL" if GNUTLS_COMP_NULL is returned */
- infof(data, "\t compression: %s\n", ptr);
-
- /* the name of the cipher used. ie 3DES. */
- ptr = gnutls_cipher_get_name(gnutls_cipher_get(session));
- infof(data, "\t cipher: %s\n", ptr);
-
- /* the MAC algorithms name. ie SHA1 */
- ptr = gnutls_mac_get_name(gnutls_mac_get(session));
- infof(data, "\t MAC: %s\n", ptr);
-
-#ifdef HAS_ALPN
- if(data->set.ssl_enable_alpn) {
- rc = gnutls_alpn_get_selected_protocol(session, &proto);
- if(rc == 0) {
- infof(data, "ALPN, server accepted to use %.*s\n", proto.size,
- proto.data);
-
- if(proto.size == NGHTTP2_PROTO_VERSION_ID_LEN &&
- memcmp(NGHTTP2_PROTO_VERSION_ID, proto.data,
- NGHTTP2_PROTO_VERSION_ID_LEN) == 0) {
- conn->negnpn = NPN_HTTP2;
- }
- else if(proto.size == ALPN_HTTP_1_1_LENGTH && memcmp(ALPN_HTTP_1_1,
- proto.data, ALPN_HTTP_1_1_LENGTH) == 0) {
- conn->negnpn = NPN_HTTP1_1;
- }
- }
- else {
- infof(data, "ALPN, server did not agree to a protocol\n");
- }
- }
-#endif
-
- conn->ssl[sockindex].state = ssl_connection_complete;
- conn->recv[sockindex] = gtls_recv;
- conn->send[sockindex] = gtls_send;
-
- {
- /* we always unconditionally get the session id here, as even if we
- already got it from the cache and asked to use it in the connection, it
- might've been rejected and then a new one is in use now and we need to
- detect that. */
- void *connect_sessionid;
- size_t connect_idsize = 0;
-
- /* get the session ID data size */
- gnutls_session_get_data(session, NULL, &connect_idsize);
- connect_sessionid = malloc(connect_idsize); /* get a buffer for it */
-
- if(connect_sessionid) {
- /* extract session ID to the allocated buffer */
- gnutls_session_get_data(session, connect_sessionid, &connect_idsize);
-
- incache = !(Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL));
- if(incache) {
- /* there was one before in the cache, so instead of risking that the
- previous one was rejected, we just kill that and store the new */
- Curl_ssl_delsessionid(conn, ssl_sessionid);
- }
-
- /* store this session id */
- result = Curl_ssl_addsessionid(conn, connect_sessionid, connect_idsize);
- if(result) {
- free(connect_sessionid);
- result = CURLE_OUT_OF_MEMORY;
- }
- }
- else
- result = CURLE_OUT_OF_MEMORY;
- }
-
- return result;
-}
-
-
-/*
- * This function is called after the TCP connect has completed. Setup the TLS
- * layer and do all necessary magic.
- */
-/* We use connssl->connecting_state to keep track of the connection status;
- there are three states: 'ssl_connect_1' (not started yet or complete),
- 'ssl_connect_2_reading' (waiting for data from server), and
- 'ssl_connect_2_writing' (waiting to be able to write).
- */
-static CURLcode
-gtls_connect_common(struct connectdata *conn,
- int sockindex,
- bool nonblocking,
- bool *done)
-{
- int rc;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- /* Initiate the connection, if not already done */
- if(ssl_connect_1==connssl->connecting_state) {
- rc = gtls_connect_step1 (conn, sockindex);
- if(rc)
- return rc;
- }
-
- rc = handshake(conn, sockindex, TRUE, nonblocking);
- if(rc)
- /* handshake() sets its own error message with failf() */
- return rc;
-
- /* Finish connecting once the handshake is done */
- if(ssl_connect_1==connssl->connecting_state) {
- rc = gtls_connect_step3(conn, sockindex);
- if(rc)
- return rc;
- }
-
- *done = ssl_connect_1==connssl->connecting_state;
-
- return CURLE_OK;
-}
-
-CURLcode
-Curl_gtls_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- return gtls_connect_common(conn, sockindex, TRUE, done);
-}
-
-CURLcode
-Curl_gtls_connect(struct connectdata *conn,
- int sockindex)
-
-{
- CURLcode retcode;
- bool done = FALSE;
-
- retcode = gtls_connect_common(conn, sockindex, FALSE, &done);
- if(retcode)
- return retcode;
-
- DEBUGASSERT(done);
-
- return CURLE_OK;
-}
-
-static ssize_t gtls_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *curlcode)
-{
- ssize_t rc = gnutls_record_send(conn->ssl[sockindex].session, mem, len);
-
- if(rc < 0 ) {
- *curlcode = (rc == GNUTLS_E_AGAIN)
- ? CURLE_AGAIN
- : CURLE_SEND_ERROR;
-
- rc = -1;
- }
-
- return rc;
-}
-
-void Curl_gtls_close_all(struct SessionHandle *data)
-{
- /* FIX: make the OpenSSL code more generic and use parts of it here */
- (void)data;
-}
-
-static void close_one(struct connectdata *conn,
- int idx)
-{
- if(conn->ssl[idx].session) {
- gnutls_bye(conn->ssl[idx].session, GNUTLS_SHUT_RDWR);
- gnutls_deinit(conn->ssl[idx].session);
- conn->ssl[idx].session = NULL;
- }
- if(conn->ssl[idx].cred) {
- gnutls_certificate_free_credentials(conn->ssl[idx].cred);
- conn->ssl[idx].cred = NULL;
- }
-#ifdef USE_TLS_SRP
- if(conn->ssl[idx].srp_client_cred) {
- gnutls_srp_free_client_credentials(conn->ssl[idx].srp_client_cred);
- conn->ssl[idx].srp_client_cred = NULL;
- }
-#endif
-}
-
-void Curl_gtls_close(struct connectdata *conn, int sockindex)
-{
- close_one(conn, sockindex);
-}
-
-/*
- * This function is called to shut down the SSL layer but keep the
- * socket open (CCC - Clear Command Channel)
- */
-int Curl_gtls_shutdown(struct connectdata *conn, int sockindex)
-{
- ssize_t result;
- int retval = 0;
- struct SessionHandle *data = conn->data;
- int done = 0;
- char buf[120];
-
- /* This has only been tested on the proftpd server, and the mod_tls code
- sends a close notify alert without waiting for a close notify alert in
- response. Thus we wait for a close notify alert from the server, but
- we do not send one. Let's hope other servers do the same... */
-
- if(data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE)
- gnutls_bye(conn->ssl[sockindex].session, GNUTLS_SHUT_WR);
-
- if(conn->ssl[sockindex].session) {
- while(!done) {
- int what = Curl_socket_ready(conn->sock[sockindex],
- CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
- if(what > 0) {
- /* Something to read, let's do it and hope that it is the close
- notify alert from the server */
- result = gnutls_record_recv(conn->ssl[sockindex].session,
- buf, sizeof(buf));
- switch(result) {
- case 0:
- /* This is the expected response. There was no data but only
- the close notify alert */
- done = 1;
- break;
- case GNUTLS_E_AGAIN:
- case GNUTLS_E_INTERRUPTED:
- infof(data, "GNUTLS_E_AGAIN || GNUTLS_E_INTERRUPTED\n");
- break;
- default:
- retval = -1;
- done = 1;
- break;
- }
- }
- else if(0 == what) {
- /* timeout */
- failf(data, "SSL shutdown timeout");
- done = 1;
- break;
- }
- else {
- /* anything that gets here is fatally bad */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- retval = -1;
- done = 1;
- }
- }
- gnutls_deinit(conn->ssl[sockindex].session);
- }
- gnutls_certificate_free_credentials(conn->ssl[sockindex].cred);
-
-#ifdef USE_TLS_SRP
- if(data->set.ssl.authtype == CURL_TLSAUTH_SRP
- && data->set.ssl.username != NULL)
- gnutls_srp_free_client_credentials(conn->ssl[sockindex].srp_client_cred);
-#endif
-
- conn->ssl[sockindex].cred = NULL;
- conn->ssl[sockindex].session = NULL;
-
- return retval;
-}
-
-static ssize_t gtls_recv(struct connectdata *conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- CURLcode *curlcode)
-{
- ssize_t ret;
-
- ret = gnutls_record_recv(conn->ssl[num].session, buf, buffersize);
- if((ret == GNUTLS_E_AGAIN) || (ret == GNUTLS_E_INTERRUPTED)) {
- *curlcode = CURLE_AGAIN;
- return -1;
- }
-
- if(ret == GNUTLS_E_REHANDSHAKE) {
- /* BLOCKING call, this is bad but a work-around for now. Fixing this "the
- proper way" takes a whole lot of work. */
- CURLcode rc = handshake(conn, num, FALSE, FALSE);
- if(rc)
- /* handshake() writes error message on its own */
- *curlcode = rc;
- else
- *curlcode = CURLE_AGAIN; /* then return as if this was a wouldblock */
- return -1;
- }
-
- if(ret < 0) {
- failf(conn->data, "GnuTLS recv error (%d): %s",
- (int)ret, gnutls_strerror((int)ret));
- *curlcode = CURLE_RECV_ERROR;
- return -1;
- }
-
- return ret;
-}
-
-void Curl_gtls_session_free(void *ptr)
-{
- free(ptr);
-}
-
-size_t Curl_gtls_version(char *buffer, size_t size)
-{
- return snprintf(buffer, size, "GnuTLS/%s", gnutls_check_version(NULL));
-}
-
-#ifndef USE_GNUTLS_NETTLE
-static int Curl_gtls_seed(struct SessionHandle *data)
-{
- /* we have the "SSL is seeded" boolean static to prevent multiple
- time-consuming seedings in vain */
- static bool ssl_seeded = FALSE;
-
- /* Quickly add a bit of entropy */
- gcry_fast_random_poll();
-
- if(!ssl_seeded || data->set.str[STRING_SSL_RANDOM_FILE] ||
- data->set.str[STRING_SSL_EGDSOCKET]) {
-
- /* TODO: to a good job seeding the RNG
- This may involve the gcry_control function and these options:
- GCRYCTL_SET_RANDOM_SEED_FILE
- GCRYCTL_SET_RNDEGD_SOCKET
- */
- ssl_seeded = TRUE;
- }
- return 0;
-}
-#endif
-
-/* data might be NULL! */
-int Curl_gtls_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length)
-{
-#if defined(USE_GNUTLS_NETTLE)
- (void)data;
- gnutls_rnd(GNUTLS_RND_RANDOM, entropy, length);
-#elif defined(USE_GNUTLS)
- if(data)
- Curl_gtls_seed(data); /* Initiate the seed if not already done */
- gcry_randomize(entropy, length, GCRY_STRONG_RANDOM);
-#endif
- return 0;
-}
-
-void Curl_gtls_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum, /* output */
- size_t md5len)
-{
-#if defined(USE_GNUTLS_NETTLE)
- struct md5_ctx MD5pw;
- md5_init(&MD5pw);
- md5_update(&MD5pw, (unsigned int)tmplen, tmp);
- md5_digest(&MD5pw, (unsigned int)md5len, md5sum);
-#elif defined(USE_GNUTLS)
- gcry_md_hd_t MD5pw;
- gcry_md_open(&MD5pw, GCRY_MD_MD5, 0);
- gcry_md_write(MD5pw, tmp, tmplen);
- memcpy(md5sum, gcry_md_read (MD5pw, 0), md5len);
- gcry_md_close(MD5pw);
-#endif
-}
-
-#endif /* USE_GNUTLS */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/gtls.h b/external/libcurl_android/jni/libcurl/lib/vtls/gtls.h
deleted file mode 100755
index cd6152ca..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/gtls.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef HEADER_CURL_GTLS_H
-#define HEADER_CURL_GTLS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_GNUTLS
-
-#include "urldata.h"
-
-int Curl_gtls_init(void);
-int Curl_gtls_cleanup(void);
-CURLcode Curl_gtls_connect(struct connectdata *conn, int sockindex);
-CURLcode Curl_gtls_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done);
-
-/* tell GnuTLS to close down all open information regarding connections (and
- thus session ID caching etc) */
-void Curl_gtls_close_all(struct SessionHandle *data);
-
- /* close a SSL connection */
-void Curl_gtls_close(struct connectdata *conn, int sockindex);
-
-void Curl_gtls_session_free(void *ptr);
-size_t Curl_gtls_version(char *buffer, size_t size);
-int Curl_gtls_shutdown(struct connectdata *conn, int sockindex);
-int Curl_gtls_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length);
-void Curl_gtls_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum, /* output */
- size_t md5len);
-
-/* this backend provides these functions: */
-#define have_curlssl_md5sum 1
-
-/* API setup for GnuTLS */
-#define curlssl_init Curl_gtls_init
-#define curlssl_cleanup Curl_gtls_cleanup
-#define curlssl_connect Curl_gtls_connect
-#define curlssl_connect_nonblocking Curl_gtls_connect_nonblocking
-#define curlssl_session_free(x) Curl_gtls_session_free(x)
-#define curlssl_close_all Curl_gtls_close_all
-#define curlssl_close Curl_gtls_close
-#define curlssl_shutdown(x,y) Curl_gtls_shutdown(x,y)
-#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_NOT_BUILT_IN)
-#define curlssl_set_engine_default(x) (x=x, CURLE_NOT_BUILT_IN)
-#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_version Curl_gtls_version
-#define curlssl_check_cxn(x) (x=x, -1)
-#define curlssl_data_pending(x,y) (x=x, y=y, 0)
-#define curlssl_random(x,y,z) Curl_gtls_random(x,y,z)
-#define curlssl_md5sum(a,b,c,d) Curl_gtls_md5sum(a,b,c,d)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_GNUTLS
-
-#endif /* USE_GNUTLS */
-#endif /* HEADER_CURL_GTLS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/nss.c b/external/libcurl_android/jni/libcurl/lib/vtls/nss.c
deleted file mode 100755
index 83b3e323..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/nss.c
+++ /dev/null
@@ -1,1943 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Source file for all NSS-specific code for the TLS/SSL layer. No code
- * but vtls.c should ever call or use these functions.
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_NSS
-
-#include "urldata.h"
-#include "sendf.h"
-#include "formdata.h" /* for the boundary function */
-#include "url.h" /* for the ssl config check function */
-#include "connect.h"
-#include "strequal.h"
-#include "select.h"
-#include "vtls.h"
-#include "llist.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
-#include "nssg.h"
-#include <nspr.h>
-#include <nss.h>
-#include <ssl.h>
-#include <sslerr.h>
-#include <secerr.h>
-#include <secmod.h>
-#include <sslproto.h>
-#include <prtypes.h>
-#include <pk11pub.h>
-#include <prio.h>
-#include <secitem.h>
-#include <secport.h>
-#include <certdb.h>
-#include <base64.h>
-#include <cert.h>
-#include <prerror.h>
-
-#include "curl_memory.h"
-#include "rawstr.h"
-#include "warnless.h"
-#include "x509asn1.h"
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#define SSL_DIR "/etc/pki/nssdb"
-
-/* enough to fit the string "PEM Token #[0|1]" */
-#define SLOTSIZE 13
-
-PRFileDesc *PR_ImportTCPSocket(PRInt32 osfd);
-
-PRLock * nss_initlock = NULL;
-PRLock * nss_crllock = NULL;
-struct curl_llist *nss_crl_list = NULL;
-NSSInitContext * nss_context = NULL;
-
-volatile int initialized = 0;
-
-typedef struct {
- const char *name;
- int num;
-} cipher_s;
-
-#define PK11_SETATTRS(_attr, _idx, _type, _val, _len) do { \
- CK_ATTRIBUTE *ptr = (_attr) + ((_idx)++); \
- ptr->type = (_type); \
- ptr->pValue = (_val); \
- ptr->ulValueLen = (_len); \
-} WHILE_FALSE
-
-#define CERT_NewTempCertificate __CERT_NewTempCertificate
-
-#define NUM_OF_CIPHERS sizeof(cipherlist)/sizeof(cipherlist[0])
-static const cipher_s cipherlist[] = {
- /* SSL2 cipher suites */
- {"rc4", SSL_EN_RC4_128_WITH_MD5},
- {"rc4-md5", SSL_EN_RC4_128_WITH_MD5},
- {"rc4export", SSL_EN_RC4_128_EXPORT40_WITH_MD5},
- {"rc2", SSL_EN_RC2_128_CBC_WITH_MD5},
- {"rc2export", SSL_EN_RC2_128_CBC_EXPORT40_WITH_MD5},
- {"des", SSL_EN_DES_64_CBC_WITH_MD5},
- {"desede3", SSL_EN_DES_192_EDE3_CBC_WITH_MD5},
- /* SSL3/TLS cipher suites */
- {"rsa_rc4_128_md5", SSL_RSA_WITH_RC4_128_MD5},
- {"rsa_rc4_128_sha", SSL_RSA_WITH_RC4_128_SHA},
- {"rsa_3des_sha", SSL_RSA_WITH_3DES_EDE_CBC_SHA},
- {"rsa_des_sha", SSL_RSA_WITH_DES_CBC_SHA},
- {"rsa_rc4_40_md5", SSL_RSA_EXPORT_WITH_RC4_40_MD5},
- {"rsa_rc2_40_md5", SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5},
- {"rsa_null_md5", SSL_RSA_WITH_NULL_MD5},
- {"rsa_null_sha", SSL_RSA_WITH_NULL_SHA},
- {"fips_3des_sha", SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA},
- {"fips_des_sha", SSL_RSA_FIPS_WITH_DES_CBC_SHA},
- {"fortezza", SSL_FORTEZZA_DMS_WITH_FORTEZZA_CBC_SHA},
- {"fortezza_rc4_128_sha", SSL_FORTEZZA_DMS_WITH_RC4_128_SHA},
- {"fortezza_null", SSL_FORTEZZA_DMS_WITH_NULL_SHA},
- /* TLS 1.0: Exportable 56-bit Cipher Suites. */
- {"rsa_des_56_sha", TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA},
- {"rsa_rc4_56_sha", TLS_RSA_EXPORT1024_WITH_RC4_56_SHA},
- /* AES ciphers. */
- {"dhe_dss_aes_128_cbc_sha", TLS_DHE_DSS_WITH_AES_128_CBC_SHA},
- {"dhe_dss_aes_256_cbc_sha", TLS_DHE_DSS_WITH_AES_256_CBC_SHA},
- {"dhe_rsa_aes_128_cbc_sha", TLS_DHE_RSA_WITH_AES_128_CBC_SHA},
- {"dhe_rsa_aes_256_cbc_sha", TLS_DHE_RSA_WITH_AES_256_CBC_SHA},
- {"rsa_aes_128_sha", TLS_RSA_WITH_AES_128_CBC_SHA},
- {"rsa_aes_256_sha", TLS_RSA_WITH_AES_256_CBC_SHA},
- /* ECC ciphers. */
- {"ecdh_ecdsa_null_sha", TLS_ECDH_ECDSA_WITH_NULL_SHA},
- {"ecdh_ecdsa_rc4_128_sha", TLS_ECDH_ECDSA_WITH_RC4_128_SHA},
- {"ecdh_ecdsa_3des_sha", TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA},
- {"ecdh_ecdsa_aes_128_sha", TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA},
- {"ecdh_ecdsa_aes_256_sha", TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA},
- {"ecdhe_ecdsa_null_sha", TLS_ECDHE_ECDSA_WITH_NULL_SHA},
- {"ecdhe_ecdsa_rc4_128_sha", TLS_ECDHE_ECDSA_WITH_RC4_128_SHA},
- {"ecdhe_ecdsa_3des_sha", TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA},
- {"ecdhe_ecdsa_aes_128_sha", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA},
- {"ecdhe_ecdsa_aes_256_sha", TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA},
- {"ecdh_rsa_null_sha", TLS_ECDH_RSA_WITH_NULL_SHA},
- {"ecdh_rsa_128_sha", TLS_ECDH_RSA_WITH_RC4_128_SHA},
- {"ecdh_rsa_3des_sha", TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA},
- {"ecdh_rsa_aes_128_sha", TLS_ECDH_RSA_WITH_AES_128_CBC_SHA},
- {"ecdh_rsa_aes_256_sha", TLS_ECDH_RSA_WITH_AES_256_CBC_SHA},
- {"echde_rsa_null", TLS_ECDHE_RSA_WITH_NULL_SHA},
- {"ecdhe_rsa_rc4_128_sha", TLS_ECDHE_RSA_WITH_RC4_128_SHA},
- {"ecdhe_rsa_3des_sha", TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA},
- {"ecdhe_rsa_aes_128_sha", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA},
- {"ecdhe_rsa_aes_256_sha", TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA},
- {"ecdh_anon_null_sha", TLS_ECDH_anon_WITH_NULL_SHA},
- {"ecdh_anon_rc4_128sha", TLS_ECDH_anon_WITH_RC4_128_SHA},
- {"ecdh_anon_3des_sha", TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA},
- {"ecdh_anon_aes_128_sha", TLS_ECDH_anon_WITH_AES_128_CBC_SHA},
- {"ecdh_anon_aes_256_sha", TLS_ECDH_anon_WITH_AES_256_CBC_SHA},
-#ifdef TLS_RSA_WITH_NULL_SHA256
- /* new HMAC-SHA256 cipher suites specified in RFC */
- {"rsa_null_sha_256", TLS_RSA_WITH_NULL_SHA256},
- {"rsa_aes_128_cbc_sha_256", TLS_RSA_WITH_AES_128_CBC_SHA256},
- {"rsa_aes_256_cbc_sha_256", TLS_RSA_WITH_AES_256_CBC_SHA256},
- {"dhe_rsa_aes_128_cbc_sha_256", TLS_DHE_RSA_WITH_AES_128_CBC_SHA256},
- {"dhe_rsa_aes_256_cbc_sha_256", TLS_DHE_RSA_WITH_AES_256_CBC_SHA256},
- {"ecdhe_ecdsa_aes_128_cbc_sha_256", TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256},
- {"ecdhe_rsa_aes_128_cbc_sha_256", TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256},
-#endif
-#ifdef TLS_RSA_WITH_AES_128_GCM_SHA256
- /* AES GCM cipher suites in RFC 5288 and RFC 5289 */
- {"rsa_aes_128_gcm_sha_256", TLS_RSA_WITH_AES_128_GCM_SHA256},
- {"dhe_rsa_aes_128_gcm_sha_256", TLS_DHE_RSA_WITH_AES_128_GCM_SHA256},
- {"dhe_dss_aes_128_gcm_sha_256", TLS_DHE_DSS_WITH_AES_128_GCM_SHA256},
- {"ecdhe_ecdsa_aes_128_gcm_sha_256", TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256},
- {"ecdh_ecdsa_aes_128_gcm_sha_256", TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256},
- {"ecdhe_rsa_aes_128_gcm_sha_256", TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256},
- {"ecdh_rsa_aes_128_gcm_sha_256", TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256},
-#endif
-};
-
-static const char* pem_library = "libnsspem.so";
-SECMODModule* mod = NULL;
-
-/* NSPR I/O layer we use to detect blocking direction during SSL handshake */
-static PRDescIdentity nspr_io_identity = PR_INVALID_IO_LAYER;
-static PRIOMethods nspr_io_methods;
-
-static const char* nss_error_to_name(PRErrorCode code)
-{
- const char *name = PR_ErrorToName(code);
- if(name)
- return name;
-
- return "unknown error";
-}
-
-static void nss_print_error_message(struct SessionHandle *data, PRUint32 err)
-{
- failf(data, "%s", PR_ErrorToString(err, PR_LANGUAGE_I_DEFAULT));
-}
-
-static SECStatus set_ciphers(struct SessionHandle *data, PRFileDesc * model,
- char *cipher_list)
-{
- unsigned int i;
- PRBool cipher_state[NUM_OF_CIPHERS];
- PRBool found;
- char *cipher;
-
- /* First disable all ciphers. This uses a different max value in case
- * NSS adds more ciphers later we don't want them available by
- * accident
- */
- for(i=0; i<SSL_NumImplementedCiphers; i++) {
- SSL_CipherPrefSet(model, SSL_ImplementedCiphers[i], PR_FALSE);
- }
-
- /* Set every entry in our list to false */
- for(i=0; i<NUM_OF_CIPHERS; i++) {
- cipher_state[i] = PR_FALSE;
- }
-
- cipher = cipher_list;
-
- while(cipher_list && (cipher_list[0])) {
- while((*cipher) && (ISSPACE(*cipher)))
- ++cipher;
-
- if((cipher_list = strchr(cipher, ','))) {
- *cipher_list++ = '\0';
- }
-
- found = PR_FALSE;
-
- for(i=0; i<NUM_OF_CIPHERS; i++) {
- if(Curl_raw_equal(cipher, cipherlist[i].name)) {
- cipher_state[i] = PR_TRUE;
- found = PR_TRUE;
- break;
- }
- }
-
- if(found == PR_FALSE) {
- failf(data, "Unknown cipher in list: %s", cipher);
- return SECFailure;
- }
-
- if(cipher_list) {
- cipher = cipher_list;
- }
- }
-
- /* Finally actually enable the selected ciphers */
- for(i=0; i<NUM_OF_CIPHERS; i++) {
- if(!cipher_state[i])
- continue;
-
- if(SSL_CipherPrefSet(model, cipherlist[i].num, PR_TRUE) != SECSuccess) {
- failf(data, "cipher-suite not supported by NSS: %s", cipherlist[i].name);
- return SECFailure;
- }
- }
-
- return SECSuccess;
-}
-
-/*
- * Get the number of ciphers that are enabled. We use this to determine
- * if we need to call NSS_SetDomesticPolicy() to enable the default ciphers.
- */
-static int num_enabled_ciphers(void)
-{
- PRInt32 policy = 0;
- int count = 0;
- unsigned int i;
-
- for(i=0; i<NUM_OF_CIPHERS; i++) {
- SSL_CipherPolicyGet(cipherlist[i].num, &policy);
- if(policy)
- count++;
- }
- return count;
-}
-
-/*
- * Determine whether the nickname passed in is a filename that needs to
- * be loaded as a PEM or a regular NSS nickname.
- *
- * returns 1 for a file
- * returns 0 for not a file (NSS nickname)
- */
-static int is_file(const char *filename)
-{
- struct_stat st;
-
- if(filename == NULL)
- return 0;
-
- if(stat(filename, &st) == 0)
- if(S_ISREG(st.st_mode))
- return 1;
-
- return 0;
-}
-
-/* Check if the given string is filename or nickname of a certificate. If the
- * given string is recognized as filename, return NULL. If the given string is
- * recognized as nickname, return a duplicated string. The returned string
- * should be later deallocated using free(). If the OOM failure occurs, we
- * return NULL, too.
- */
-static char* dup_nickname(struct SessionHandle *data, enum dupstring cert_kind)
-{
- const char *str = data->set.str[cert_kind];
- const char *n;
-
- if(!is_file(str))
- /* no such file exists, use the string as nickname */
- return strdup(str);
-
- /* search the last slash; we require at least one slash in a file name */
- n = strrchr(str, '/');
- if(!n) {
- infof(data, "warning: certificate file name \"%s\" handled as nickname; "
- "please use \"./%s\" to force file name\n", str, str);
- return strdup(str);
- }
-
- /* we'll use the PEM reader to read the certificate from file */
- return NULL;
-}
-
-/* Call PK11_CreateGenericObject() with the given obj_class and filename. If
- * the call succeeds, append the object handle to the list of objects so that
- * the object can be destroyed in Curl_nss_close(). */
-static CURLcode nss_create_object(struct ssl_connect_data *ssl,
- CK_OBJECT_CLASS obj_class,
- const char *filename, bool cacert)
-{
- PK11SlotInfo *slot;
- PK11GenericObject *obj;
- CK_BBOOL cktrue = CK_TRUE;
- CK_BBOOL ckfalse = CK_FALSE;
- CK_ATTRIBUTE attrs[/* max count of attributes */ 4];
- int attr_cnt = 0;
- CURLcode err = (cacert)
- ? CURLE_SSL_CACERT_BADFILE
- : CURLE_SSL_CERTPROBLEM;
-
- const int slot_id = (cacert) ? 0 : 1;
- char *slot_name = aprintf("PEM Token #%d", slot_id);
- if(!slot_name)
- return CURLE_OUT_OF_MEMORY;
-
- slot = PK11_FindSlotByName(slot_name);
- free(slot_name);
- if(!slot)
- return err;
-
- PK11_SETATTRS(attrs, attr_cnt, CKA_CLASS, &obj_class, sizeof(obj_class));
- PK11_SETATTRS(attrs, attr_cnt, CKA_TOKEN, &cktrue, sizeof(CK_BBOOL));
- PK11_SETATTRS(attrs, attr_cnt, CKA_LABEL, (unsigned char *)filename,
- strlen(filename) + 1);
-
- if(CKO_CERTIFICATE == obj_class) {
- CK_BBOOL *pval = (cacert) ? (&cktrue) : (&ckfalse);
- PK11_SETATTRS(attrs, attr_cnt, CKA_TRUST, pval, sizeof(*pval));
- }
-
- obj = PK11_CreateGenericObject(slot, attrs, attr_cnt, PR_FALSE);
- PK11_FreeSlot(slot);
- if(!obj)
- return err;
-
- if(!Curl_llist_insert_next(ssl->obj_list, ssl->obj_list->tail, obj)) {
- PK11_DestroyGenericObject(obj);
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(!cacert && CKO_CERTIFICATE == obj_class)
- /* store reference to a client certificate */
- ssl->obj_clicert = obj;
-
- return CURLE_OK;
-}
-
-/* Destroy the NSS object whose handle is given by ptr. This function is
- * a callback of Curl_llist_alloc() used by Curl_llist_destroy() to destroy
- * NSS objects in Curl_nss_close() */
-static void nss_destroy_object(void *user, void *ptr)
-{
- PK11GenericObject *obj = (PK11GenericObject *)ptr;
- (void) user;
- PK11_DestroyGenericObject(obj);
-}
-
-/* same as nss_destroy_object() but for CRL items */
-static void nss_destroy_crl_item(void *user, void *ptr)
-{
- SECItem *crl_der = (SECItem *)ptr;
- (void) user;
- SECITEM_FreeItem(crl_der, PR_TRUE);
-}
-
-static CURLcode nss_load_cert(struct ssl_connect_data *ssl,
- const char *filename, PRBool cacert)
-{
- CURLcode err = (cacert)
- ? CURLE_SSL_CACERT_BADFILE
- : CURLE_SSL_CERTPROBLEM;
-
- /* libnsspem.so leaks memory if the requested file does not exist. For more
- * details, go to <https://bugzilla.redhat.com/734760>. */
- if(is_file(filename))
- err = nss_create_object(ssl, CKO_CERTIFICATE, filename, cacert);
-
- if(CURLE_OK == err && !cacert) {
- /* we have successfully loaded a client certificate */
- CERTCertificate *cert;
- char *nickname = NULL;
- char *n = strrchr(filename, '/');
- if(n)
- n++;
-
- /* The following undocumented magic helps to avoid a SIGSEGV on call
- * of PK11_ReadRawAttribute() from SelectClientCert() when using an
- * immature version of libnsspem.so. For more details, go to
- * <https://bugzilla.redhat.com/733685>. */
- nickname = aprintf("PEM Token #1:%s", n);
- if(nickname) {
- cert = PK11_FindCertFromNickname(nickname, NULL);
- if(cert)
- CERT_DestroyCertificate(cert);
-
- free(nickname);
- }
- }
-
- return err;
-}
-
-/* add given CRL to cache if it is not already there */
-static CURLcode nss_cache_crl(SECItem *crl_der)
-{
- CERTCertDBHandle *db = CERT_GetDefaultCertDB();
- CERTSignedCrl *crl = SEC_FindCrlByDERCert(db, crl_der, 0);
- if(crl) {
- /* CRL already cached */
- SEC_DestroyCrl(crl);
- SECITEM_FreeItem(crl_der, PR_TRUE);
- return CURLE_SSL_CRL_BADFILE;
- }
-
- /* acquire lock before call of CERT_CacheCRL() and accessing nss_crl_list */
- PR_Lock(nss_crllock);
-
- /* store the CRL item so that we can free it in Curl_nss_cleanup() */
- if(!Curl_llist_insert_next(nss_crl_list, nss_crl_list->tail, crl_der)) {
- SECITEM_FreeItem(crl_der, PR_TRUE);
- PR_Unlock(nss_crllock);
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(SECSuccess != CERT_CacheCRL(db, crl_der)) {
- /* unable to cache CRL */
- PR_Unlock(nss_crllock);
- return CURLE_SSL_CRL_BADFILE;
- }
-
- /* we need to clear session cache, so that the CRL could take effect */
- SSL_ClearSessionCache();
- PR_Unlock(nss_crllock);
- return CURLE_OK;
-}
-
-static CURLcode nss_load_crl(const char* crlfilename)
-{
- PRFileDesc *infile;
- PRFileInfo info;
- SECItem filedata = { 0, NULL, 0 };
- SECItem *crl_der = NULL;
- char *body;
-
- infile = PR_Open(crlfilename, PR_RDONLY, 0);
- if(!infile)
- return CURLE_SSL_CRL_BADFILE;
-
- if(PR_SUCCESS != PR_GetOpenFileInfo(infile, &info))
- goto fail;
-
- if(!SECITEM_AllocItem(NULL, &filedata, info.size + /* zero ended */ 1))
- goto fail;
-
- if(info.size != PR_Read(infile, filedata.data, info.size))
- goto fail;
-
- crl_der = SECITEM_AllocItem(NULL, NULL, 0U);
- if(!crl_der)
- goto fail;
-
- /* place a trailing zero right after the visible data */
- body = (char*)filedata.data;
- body[--filedata.len] = '\0';
-
- body = strstr(body, "-----BEGIN");
- if(body) {
- /* assume ASCII */
- char *trailer;
- char *begin = PORT_Strchr(body, '\n');
- if(!begin)
- begin = PORT_Strchr(body, '\r');
- if(!begin)
- goto fail;
-
- trailer = strstr(++begin, "-----END");
- if(!trailer)
- goto fail;
-
- /* retrieve DER from ASCII */
- *trailer = '\0';
- if(ATOB_ConvertAsciiToItem(crl_der, begin))
- goto fail;
-
- SECITEM_FreeItem(&filedata, PR_FALSE);
- }
- else
- /* assume DER */
- *crl_der = filedata;
-
- PR_Close(infile);
- return nss_cache_crl(crl_der);
-
-fail:
- PR_Close(infile);
- SECITEM_FreeItem(crl_der, PR_TRUE);
- SECITEM_FreeItem(&filedata, PR_FALSE);
- return CURLE_SSL_CRL_BADFILE;
-}
-
-static CURLcode nss_load_key(struct connectdata *conn, int sockindex,
- char *key_file)
-{
- PK11SlotInfo *slot;
- SECStatus status;
- CURLcode rv;
- struct ssl_connect_data *ssl = conn->ssl;
- (void)sockindex; /* unused */
-
- rv = nss_create_object(ssl, CKO_PRIVATE_KEY, key_file, FALSE);
- if(CURLE_OK != rv) {
- PR_SetError(SEC_ERROR_BAD_KEY, 0);
- return rv;
- }
-
- slot = PK11_FindSlotByName("PEM Token #1");
- if(!slot)
- return CURLE_SSL_CERTPROBLEM;
-
- /* This will force the token to be seen as re-inserted */
- SECMOD_WaitForAnyTokenEvent(mod, 0, 0);
- PK11_IsPresent(slot);
-
- status = PK11_Authenticate(slot, PR_TRUE,
- conn->data->set.str[STRING_KEY_PASSWD]);
- PK11_FreeSlot(slot);
- return (SECSuccess == status)
- ? CURLE_OK
- : CURLE_SSL_CERTPROBLEM;
-}
-
-static int display_error(struct connectdata *conn, PRInt32 err,
- const char *filename)
-{
- switch(err) {
- case SEC_ERROR_BAD_PASSWORD:
- failf(conn->data, "Unable to load client key: Incorrect password");
- return 1;
- case SEC_ERROR_UNKNOWN_CERT:
- failf(conn->data, "Unable to load certificate %s", filename);
- return 1;
- default:
- break;
- }
- return 0; /* The caller will print a generic error */
-}
-
-static CURLcode cert_stuff(struct connectdata *conn, int sockindex,
- char *cert_file, char *key_file)
-{
- struct SessionHandle *data = conn->data;
- CURLcode rv;
-
- if(cert_file) {
- rv = nss_load_cert(&conn->ssl[sockindex], cert_file, PR_FALSE);
- if(CURLE_OK != rv) {
- const PRErrorCode err = PR_GetError();
- if(!display_error(conn, err, cert_file)) {
- const char *err_name = nss_error_to_name(err);
- failf(data, "unable to load client cert: %d (%s)", err, err_name);
- }
-
- return rv;
- }
- }
-
- if(key_file || (is_file(cert_file))) {
- if(key_file)
- rv = nss_load_key(conn, sockindex, key_file);
- else
- /* In case the cert file also has the key */
- rv = nss_load_key(conn, sockindex, cert_file);
- if(CURLE_OK != rv) {
- const PRErrorCode err = PR_GetError();
- if(!display_error(conn, err, key_file)) {
- const char *err_name = nss_error_to_name(err);
- failf(data, "unable to load client key: %d (%s)", err, err_name);
- }
-
- return rv;
- }
- }
-
- return CURLE_OK;
-}
-
-static char * nss_get_password(PK11SlotInfo * slot, PRBool retry, void *arg)
-{
- (void)slot; /* unused */
- if(retry || NULL == arg)
- return NULL;
- else
- return (char *)PORT_Strdup((char *)arg);
-}
-
-/* bypass the default SSL_AuthCertificate() hook in case we do not want to
- * verify peer */
-static SECStatus nss_auth_cert_hook(void *arg, PRFileDesc *fd, PRBool checksig,
- PRBool isServer)
-{
- struct connectdata *conn = (struct connectdata *)arg;
- if(!conn->data->set.ssl.verifypeer) {
- infof(conn->data, "skipping SSL peer certificate verification\n");
- return SECSuccess;
- }
-
- return SSL_AuthCertificate(CERT_GetDefaultCertDB(), fd, checksig, isServer);
-}
-
-/**
- * Inform the application that the handshake is complete.
- */
-static void HandshakeCallback(PRFileDesc *sock, void *arg)
-{
-#ifdef USE_NGHTTP2
- struct connectdata *conn = (struct connectdata*) arg;
- unsigned int buflenmax = 50;
- unsigned char buf[50];
- unsigned int buflen;
- SSLNextProtoState state;
-
- if(!conn->data->set.ssl_enable_npn && !conn->data->set.ssl_enable_alpn) {
- return;
- }
-
- if(SSL_GetNextProto(sock, &state, buf, &buflen, buflenmax) == SECSuccess) {
-
- switch(state) {
- case SSL_NEXT_PROTO_NO_SUPPORT:
- case SSL_NEXT_PROTO_NO_OVERLAP:
- infof(conn->data, "TLS, neither ALPN nor NPN succeeded\n");
- return;
-#ifdef SSL_ENABLE_ALPN
- case SSL_NEXT_PROTO_SELECTED:
- infof(conn->data, "ALPN, server accepted to use %.*s\n", buflen, buf);
- break;
-#endif
- case SSL_NEXT_PROTO_NEGOTIATED:
- infof(conn->data, "NPN, server accepted to use %.*s\n", buflen, buf);
- break;
- }
-
- if(buflen == NGHTTP2_PROTO_VERSION_ID_LEN &&
- memcmp(NGHTTP2_PROTO_VERSION_ID, buf, NGHTTP2_PROTO_VERSION_ID_LEN)
- == 0) {
- conn->negnpn = NPN_HTTP2;
- }
- else if(buflen == ALPN_HTTP_1_1_LENGTH && memcmp(ALPN_HTTP_1_1, buf,
- ALPN_HTTP_1_1_LENGTH)) {
- conn->negnpn = NPN_HTTP1_1;
- }
- }
-#else
- (void)sock;
- (void)arg;
-#endif
-}
-
-static void display_cert_info(struct SessionHandle *data,
- CERTCertificate *cert)
-{
- char *subject, *issuer, *common_name;
- PRExplodedTime printableTime;
- char timeString[256];
- PRTime notBefore, notAfter;
-
- subject = CERT_NameToAscii(&cert->subject);
- issuer = CERT_NameToAscii(&cert->issuer);
- common_name = CERT_GetCommonName(&cert->subject);
- infof(data, "\tsubject: %s\n", subject);
-
- CERT_GetCertTimes(cert, &notBefore, &notAfter);
- PR_ExplodeTime(notBefore, PR_GMTParameters, &printableTime);
- PR_FormatTime(timeString, 256, "%b %d %H:%M:%S %Y GMT", &printableTime);
- infof(data, "\tstart date: %s\n", timeString);
- PR_ExplodeTime(notAfter, PR_GMTParameters, &printableTime);
- PR_FormatTime(timeString, 256, "%b %d %H:%M:%S %Y GMT", &printableTime);
- infof(data, "\texpire date: %s\n", timeString);
- infof(data, "\tcommon name: %s\n", common_name);
- infof(data, "\tissuer: %s\n", issuer);
-
- PR_Free(subject);
- PR_Free(issuer);
- PR_Free(common_name);
-}
-
-static void display_conn_info(struct connectdata *conn, PRFileDesc *sock)
-{
- SSLChannelInfo channel;
- SSLCipherSuiteInfo suite;
- CERTCertificate *cert;
- CERTCertificate *cert2;
- CERTCertificate *cert3;
- PRTime now;
- int i;
-
- if(SSL_GetChannelInfo(sock, &channel, sizeof channel) ==
- SECSuccess && channel.length == sizeof channel &&
- channel.cipherSuite) {
- if(SSL_GetCipherSuiteInfo(channel.cipherSuite,
- &suite, sizeof suite) == SECSuccess) {
- infof(conn->data, "SSL connection using %s\n", suite.cipherSuiteName);
- }
- }
-
- cert = SSL_PeerCertificate(sock);
-
- if(cert) {
- infof(conn->data, "Server certificate:\n");
-
- if(!conn->data->set.ssl.certinfo) {
- display_cert_info(conn->data, cert);
- CERT_DestroyCertificate(cert);
- }
- else {
- /* Count certificates in chain. */
- now = PR_Now();
- i = 1;
- if(!cert->isRoot) {
- cert2 = CERT_FindCertIssuer(cert, now, certUsageSSLCA);
- while(cert2) {
- i++;
- if(cert2->isRoot) {
- CERT_DestroyCertificate(cert2);
- break;
- }
- cert3 = CERT_FindCertIssuer(cert2, now, certUsageSSLCA);
- CERT_DestroyCertificate(cert2);
- cert2 = cert3;
- }
- }
- Curl_ssl_init_certinfo(conn->data, i);
- for(i = 0; cert; cert = cert2) {
- Curl_extract_certinfo(conn, i++, (char *)cert->derCert.data,
- (char *)cert->derCert.data + cert->derCert.len);
- if(cert->isRoot) {
- CERT_DestroyCertificate(cert);
- break;
- }
- cert2 = CERT_FindCertIssuer(cert, now, certUsageSSLCA);
- CERT_DestroyCertificate(cert);
- }
- }
- }
-
- return;
-}
-
-static SECStatus BadCertHandler(void *arg, PRFileDesc *sock)
-{
- struct connectdata *conn = (struct connectdata *)arg;
- struct SessionHandle *data = conn->data;
- PRErrorCode err = PR_GetError();
- CERTCertificate *cert;
-
- /* remember the cert verification result */
- data->set.ssl.certverifyresult = err;
-
- if(err == SSL_ERROR_BAD_CERT_DOMAIN && !data->set.ssl.verifyhost)
- /* we are asked not to verify the host name */
- return SECSuccess;
-
- /* print only info about the cert, the error is printed off the callback */
- cert = SSL_PeerCertificate(sock);
- if(cert) {
- infof(data, "Server certificate:\n");
- display_cert_info(data, cert);
- CERT_DestroyCertificate(cert);
- }
-
- return SECFailure;
-}
-
-/**
- *
- * Check that the Peer certificate's issuer certificate matches the one found
- * by issuer_nickname. This is not exactly the way OpenSSL and GNU TLS do the
- * issuer check, so we provide comments that mimic the OpenSSL
- * X509_check_issued function (in x509v3/v3_purp.c)
- */
-static SECStatus check_issuer_cert(PRFileDesc *sock,
- char *issuer_nickname)
-{
- CERTCertificate *cert,*cert_issuer,*issuer;
- SECStatus res=SECSuccess;
- void *proto_win = NULL;
-
- /*
- PRArenaPool *tmpArena = NULL;
- CERTAuthKeyID *authorityKeyID = NULL;
- SECITEM *caname = NULL;
- */
-
- cert = SSL_PeerCertificate(sock);
- cert_issuer = CERT_FindCertIssuer(cert,PR_Now(),certUsageObjectSigner);
-
- proto_win = SSL_RevealPinArg(sock);
- issuer = PK11_FindCertFromNickname(issuer_nickname, proto_win);
-
- if((!cert_issuer) || (!issuer))
- res = SECFailure;
- else if(SECITEM_CompareItem(&cert_issuer->derCert,
- &issuer->derCert)!=SECEqual)
- res = SECFailure;
-
- CERT_DestroyCertificate(cert);
- CERT_DestroyCertificate(issuer);
- CERT_DestroyCertificate(cert_issuer);
- return res;
-}
-
-/**
- *
- * Callback to pick the SSL client certificate.
- */
-static SECStatus SelectClientCert(void *arg, PRFileDesc *sock,
- struct CERTDistNamesStr *caNames,
- struct CERTCertificateStr **pRetCert,
- struct SECKEYPrivateKeyStr **pRetKey)
-{
- struct ssl_connect_data *connssl = (struct ssl_connect_data *)arg;
- struct SessionHandle *data = connssl->data;
- const char *nickname = connssl->client_nickname;
-
- if(connssl->obj_clicert) {
- /* use the cert/key provided by PEM reader */
- static const char pem_slotname[] = "PEM Token #1";
- SECItem cert_der = { 0, NULL, 0 };
- void *proto_win = SSL_RevealPinArg(sock);
- struct CERTCertificateStr *cert;
- struct SECKEYPrivateKeyStr *key;
-
- PK11SlotInfo *slot = PK11_FindSlotByName(pem_slotname);
- if(NULL == slot) {
- failf(data, "NSS: PK11 slot not found: %s", pem_slotname);
- return SECFailure;
- }
-
- if(PK11_ReadRawAttribute(PK11_TypeGeneric, connssl->obj_clicert, CKA_VALUE,
- &cert_der) != SECSuccess) {
- failf(data, "NSS: CKA_VALUE not found in PK11 generic object");
- PK11_FreeSlot(slot);
- return SECFailure;
- }
-
- cert = PK11_FindCertFromDERCertItem(slot, &cert_der, proto_win);
- SECITEM_FreeItem(&cert_der, PR_FALSE);
- if(NULL == cert) {
- failf(data, "NSS: client certificate from file not found");
- PK11_FreeSlot(slot);
- return SECFailure;
- }
-
- key = PK11_FindPrivateKeyFromCert(slot, cert, NULL);
- PK11_FreeSlot(slot);
- if(NULL == key) {
- failf(data, "NSS: private key from file not found");
- CERT_DestroyCertificate(cert);
- return SECFailure;
- }
-
- infof(data, "NSS: client certificate from file\n");
- display_cert_info(data, cert);
-
- *pRetCert = cert;
- *pRetKey = key;
- return SECSuccess;
- }
-
- /* use the default NSS hook */
- if(SECSuccess != NSS_GetClientAuthData((void *)nickname, sock, caNames,
- pRetCert, pRetKey)
- || NULL == *pRetCert) {
-
- if(NULL == nickname)
- failf(data, "NSS: client certificate not found (nickname not "
- "specified)");
- else
- failf(data, "NSS: client certificate not found: %s", nickname);
-
- return SECFailure;
- }
-
- /* get certificate nickname if any */
- nickname = (*pRetCert)->nickname;
- if(NULL == nickname)
- nickname = "[unknown]";
-
- if(NULL == *pRetKey) {
- failf(data, "NSS: private key not found for certificate: %s", nickname);
- return SECFailure;
- }
-
- infof(data, "NSS: using client certificate: %s\n", nickname);
- display_cert_info(data, *pRetCert);
- return SECSuccess;
-}
-
-/* This function is supposed to decide, which error codes should be used
- * to conclude server is TLS intolerant.
- *
- * taken from xulrunner - nsNSSIOLayer.cpp
- */
-static PRBool
-isTLSIntoleranceError(PRInt32 err)
-{
- switch (err) {
- case SSL_ERROR_BAD_MAC_ALERT:
- case SSL_ERROR_BAD_MAC_READ:
- case SSL_ERROR_HANDSHAKE_FAILURE_ALERT:
- case SSL_ERROR_HANDSHAKE_UNEXPECTED_ALERT:
- case SSL_ERROR_CLIENT_KEY_EXCHANGE_FAILURE:
- case SSL_ERROR_ILLEGAL_PARAMETER_ALERT:
- case SSL_ERROR_NO_CYPHER_OVERLAP:
- case SSL_ERROR_BAD_SERVER:
- case SSL_ERROR_BAD_BLOCK_PADDING:
- case SSL_ERROR_UNSUPPORTED_VERSION:
- case SSL_ERROR_PROTOCOL_VERSION_ALERT:
- case SSL_ERROR_RX_MALFORMED_FINISHED:
- case SSL_ERROR_BAD_HANDSHAKE_HASH_VALUE:
- case SSL_ERROR_DECODE_ERROR_ALERT:
- case SSL_ERROR_RX_UNKNOWN_ALERT:
- return PR_TRUE;
- default:
- return PR_FALSE;
- }
-}
-
-/* update blocking direction in case of PR_WOULD_BLOCK_ERROR */
-static void nss_update_connecting_state(ssl_connect_state state, void *secret)
-{
- struct ssl_connect_data *connssl = (struct ssl_connect_data *)secret;
- if(PR_GetError() != PR_WOULD_BLOCK_ERROR)
- /* an unrelated error is passing by */
- return;
-
- switch(connssl->connecting_state) {
- case ssl_connect_2:
- case ssl_connect_2_reading:
- case ssl_connect_2_writing:
- break;
- default:
- /* we are not called from an SSL handshake */
- return;
- }
-
- /* update the state accordingly */
- connssl->connecting_state = state;
-}
-
-/* recv() wrapper we use to detect blocking direction during SSL handshake */
-static PRInt32 nspr_io_recv(PRFileDesc *fd, void *buf, PRInt32 amount,
- PRIntn flags, PRIntervalTime timeout)
-{
- const PRRecvFN recv_fn = fd->lower->methods->recv;
- const PRInt32 rv = recv_fn(fd->lower, buf, amount, flags, timeout);
- if(rv < 0)
- /* check for PR_WOULD_BLOCK_ERROR and update blocking direction */
- nss_update_connecting_state(ssl_connect_2_reading, fd->secret);
- return rv;
-}
-
-/* send() wrapper we use to detect blocking direction during SSL handshake */
-static PRInt32 nspr_io_send(PRFileDesc *fd, const void *buf, PRInt32 amount,
- PRIntn flags, PRIntervalTime timeout)
-{
- const PRSendFN send_fn = fd->lower->methods->send;
- const PRInt32 rv = send_fn(fd->lower, buf, amount, flags, timeout);
- if(rv < 0)
- /* check for PR_WOULD_BLOCK_ERROR and update blocking direction */
- nss_update_connecting_state(ssl_connect_2_writing, fd->secret);
- return rv;
-}
-
-/* close() wrapper to avoid assertion failure due to fd->secret != NULL */
-static PRStatus nspr_io_close(PRFileDesc *fd)
-{
- const PRCloseFN close_fn = PR_GetDefaultIOMethods()->close;
- fd->secret = NULL;
- return close_fn(fd);
-}
-
-static CURLcode nss_init_core(struct SessionHandle *data, const char *cert_dir)
-{
- NSSInitParameters initparams;
-
- if(nss_context != NULL)
- return CURLE_OK;
-
- memset((void *) &initparams, '\0', sizeof(initparams));
- initparams.length = sizeof(initparams);
-
- if(cert_dir) {
- char *certpath = aprintf("sql:%s", cert_dir);
- if(!certpath)
- return CURLE_OUT_OF_MEMORY;
-
- infof(data, "Initializing NSS with certpath: %s\n", certpath);
- nss_context = NSS_InitContext(certpath, "", "", "", &initparams,
- NSS_INIT_READONLY | NSS_INIT_PK11RELOAD);
- free(certpath);
-
- if(nss_context != NULL)
- return CURLE_OK;
-
- infof(data, "Unable to initialize NSS database\n");
- }
-
- infof(data, "Initializing NSS with certpath: none\n");
- nss_context = NSS_InitContext("", "", "", "", &initparams, NSS_INIT_READONLY
- | NSS_INIT_NOCERTDB | NSS_INIT_NOMODDB | NSS_INIT_FORCEOPEN
- | NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE | NSS_INIT_PK11RELOAD);
- if(nss_context != NULL)
- return CURLE_OK;
-
- infof(data, "Unable to initialize NSS\n");
- return CURLE_SSL_CACERT_BADFILE;
-}
-
-static CURLcode nss_init(struct SessionHandle *data)
-{
- char *cert_dir;
- struct_stat st;
- CURLcode rv;
-
- if(initialized)
- return CURLE_OK;
-
- /* list of all CRL items we need to destroy in Curl_nss_cleanup() */
- nss_crl_list = Curl_llist_alloc(nss_destroy_crl_item);
- if(!nss_crl_list)
- return CURLE_OUT_OF_MEMORY;
-
- /* First we check if $SSL_DIR points to a valid dir */
- cert_dir = getenv("SSL_DIR");
- if(cert_dir) {
- if((stat(cert_dir, &st) != 0) ||
- (!S_ISDIR(st.st_mode))) {
- cert_dir = NULL;
- }
- }
-
- /* Now we check if the default location is a valid dir */
- if(!cert_dir) {
- if((stat(SSL_DIR, &st) == 0) &&
- (S_ISDIR(st.st_mode))) {
- cert_dir = (char *)SSL_DIR;
- }
- }
-
- if(nspr_io_identity == PR_INVALID_IO_LAYER) {
- /* allocate an identity for our own NSPR I/O layer */
- nspr_io_identity = PR_GetUniqueIdentity("libcurl");
- if(nspr_io_identity == PR_INVALID_IO_LAYER)
- return CURLE_OUT_OF_MEMORY;
-
- /* the default methods just call down to the lower I/O layer */
- memcpy(&nspr_io_methods, PR_GetDefaultIOMethods(), sizeof nspr_io_methods);
-
- /* override certain methods in the table by our wrappers */
- nspr_io_methods.recv = nspr_io_recv;
- nspr_io_methods.send = nspr_io_send;
- nspr_io_methods.close = nspr_io_close;
- }
-
- rv = nss_init_core(data, cert_dir);
- if(rv)
- return rv;
-
- if(num_enabled_ciphers() == 0)
- NSS_SetDomesticPolicy();
-
- initialized = 1;
- return CURLE_OK;
-}
-
-/**
- * Global SSL init
- *
- * @retval 0 error initializing SSL
- * @retval 1 SSL initialized successfully
- */
-int Curl_nss_init(void)
-{
- /* curl_global_init() is not thread-safe so this test is ok */
- if(nss_initlock == NULL) {
- PR_Init(PR_USER_THREAD, PR_PRIORITY_NORMAL, 256);
- nss_initlock = PR_NewLock();
- nss_crllock = PR_NewLock();
- }
-
- /* We will actually initialize NSS later */
-
- return 1;
-}
-
-CURLcode Curl_nss_force_init(struct SessionHandle *data)
-{
- CURLcode rv;
- if(!nss_initlock) {
- failf(data,
- "unable to initialize NSS, curl_global_init() should have been "
- "called with CURL_GLOBAL_SSL or CURL_GLOBAL_ALL");
- return CURLE_FAILED_INIT;
- }
-
- PR_Lock(nss_initlock);
- rv = nss_init(data);
- PR_Unlock(nss_initlock);
- return rv;
-}
-
-/* Global cleanup */
-void Curl_nss_cleanup(void)
-{
- /* This function isn't required to be threadsafe and this is only done
- * as a safety feature.
- */
- PR_Lock(nss_initlock);
- if(initialized) {
- /* Free references to client certificates held in the SSL session cache.
- * Omitting this hampers destruction of the security module owning
- * the certificates. */
- SSL_ClearSessionCache();
-
- if(mod && SECSuccess == SECMOD_UnloadUserModule(mod)) {
- SECMOD_DestroyModule(mod);
- mod = NULL;
- }
- NSS_ShutdownContext(nss_context);
- nss_context = NULL;
- }
-
- /* destroy all CRL items */
- Curl_llist_destroy(nss_crl_list, NULL);
- nss_crl_list = NULL;
-
- PR_Unlock(nss_initlock);
-
- PR_DestroyLock(nss_initlock);
- PR_DestroyLock(nss_crllock);
- nss_initlock = NULL;
-
- initialized = 0;
-}
-
-/*
- * This function uses SSL_peek to determine connection status.
- *
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-int
-Curl_nss_check_cxn(struct connectdata *conn)
-{
- int rc;
- char buf;
-
- rc =
- PR_Recv(conn->ssl[FIRSTSOCKET].handle, (void *)&buf, 1, PR_MSG_PEEK,
- PR_SecondsToInterval(1));
- if(rc > 0)
- return 1; /* connection still in place */
-
- if(rc == 0)
- return 0; /* connection has been closed */
-
- return -1; /* connection status unknown */
-}
-
-/*
- * This function is called when an SSL connection is closed.
- */
-void Curl_nss_close(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- if(connssl->handle) {
- /* NSS closes the socket we previously handed to it, so we must mark it
- as closed to avoid double close */
- fake_sclose(conn->sock[sockindex]);
- conn->sock[sockindex] = CURL_SOCKET_BAD;
-
- if((connssl->client_nickname != NULL) || (connssl->obj_clicert != NULL))
- /* A server might require different authentication based on the
- * particular path being requested by the client. To support this
- * scenario, we must ensure that a connection will never reuse the
- * authentication data from a previous connection. */
- SSL_InvalidateSession(connssl->handle);
-
- if(connssl->client_nickname != NULL) {
- free(connssl->client_nickname);
- connssl->client_nickname = NULL;
- }
- /* destroy all NSS objects in order to avoid failure of NSS shutdown */
- Curl_llist_destroy(connssl->obj_list, NULL);
- connssl->obj_list = NULL;
- connssl->obj_clicert = NULL;
-
- PR_Close(connssl->handle);
- connssl->handle = NULL;
- }
-}
-
-/*
- * This function is called when the 'data' struct is going away. Close
- * down everything and free all resources!
- */
-int Curl_nss_close_all(struct SessionHandle *data)
-{
- (void)data;
- return 0;
-}
-
-/* return true if NSS can provide error code (and possibly msg) for the
- error */
-static bool is_nss_error(CURLcode err)
-{
- switch(err) {
- case CURLE_PEER_FAILED_VERIFICATION:
- case CURLE_SSL_CACERT:
- case CURLE_SSL_CERTPROBLEM:
- case CURLE_SSL_CONNECT_ERROR:
- case CURLE_SSL_ISSUER_ERROR:
- return true;
-
- default:
- return false;
- }
-}
-
-/* return true if the given error code is related to a client certificate */
-static bool is_cc_error(PRInt32 err)
-{
- switch(err) {
- case SSL_ERROR_BAD_CERT_ALERT:
- case SSL_ERROR_EXPIRED_CERT_ALERT:
- case SSL_ERROR_REVOKED_CERT_ALERT:
- return true;
-
- default:
- return false;
- }
-}
-
-static Curl_recv nss_recv;
-static Curl_send nss_send;
-
-static CURLcode nss_load_ca_certificates(struct connectdata *conn,
- int sockindex)
-{
- struct SessionHandle *data = conn->data;
- const char *cafile = data->set.ssl.CAfile;
- const char *capath = data->set.ssl.CApath;
-
- if(cafile) {
- CURLcode rv = nss_load_cert(&conn->ssl[sockindex], cafile, PR_TRUE);
- if(CURLE_OK != rv)
- return rv;
- }
-
- if(capath) {
- struct_stat st;
- if(stat(capath, &st) == -1)
- return CURLE_SSL_CACERT_BADFILE;
-
- if(S_ISDIR(st.st_mode)) {
- PRDirEntry *entry;
- PRDir *dir = PR_OpenDir(capath);
- if(!dir)
- return CURLE_SSL_CACERT_BADFILE;
-
- while((entry = PR_ReadDir(dir, PR_SKIP_BOTH | PR_SKIP_HIDDEN))) {
- char *fullpath = aprintf("%s/%s", capath, entry->name);
- if(!fullpath) {
- PR_CloseDir(dir);
- return CURLE_OUT_OF_MEMORY;
- }
-
- if(CURLE_OK != nss_load_cert(&conn->ssl[sockindex], fullpath, PR_TRUE))
- /* This is purposefully tolerant of errors so non-PEM files can
- * be in the same directory */
- infof(data, "failed to load '%s' from CURLOPT_CAPATH\n", fullpath);
-
- free(fullpath);
- }
-
- PR_CloseDir(dir);
- }
- else
- infof(data, "warning: CURLOPT_CAPATH not a directory (%s)\n", capath);
- }
-
- infof(data, " CAfile: %s\n CApath: %s\n",
- cafile ? cafile : "none",
- capath ? capath : "none");
-
- return CURLE_OK;
-}
-
-static CURLcode nss_init_sslver(SSLVersionRange *sslver,
- struct SessionHandle *data)
-{
- switch (data->set.ssl.version) {
- default:
- case CURL_SSLVERSION_DEFAULT:
- sslver->min = SSL_LIBRARY_VERSION_3_0;
- if(data->state.ssl_connect_retry) {
- infof(data, "TLS disabled due to previous handshake failure\n");
- sslver->max = SSL_LIBRARY_VERSION_3_0;
- return CURLE_OK;
- }
- /* intentional fall-through to default to highest TLS version if possible */
-
- case CURL_SSLVERSION_TLSv1:
-#ifdef SSL_LIBRARY_VERSION_TLS_1_2
- sslver->max = SSL_LIBRARY_VERSION_TLS_1_2;
-#elif defined SSL_LIBRARY_VERSION_TLS_1_1
- sslver->max = SSL_LIBRARY_VERSION_TLS_1_1;
-#else
- sslver->max = SSL_LIBRARY_VERSION_TLS_1_0;
-#endif
- return CURLE_OK;
-
- case CURL_SSLVERSION_SSLv2:
- sslver->min = SSL_LIBRARY_VERSION_2;
- sslver->max = SSL_LIBRARY_VERSION_2;
- return CURLE_OK;
-
- case CURL_SSLVERSION_SSLv3:
- sslver->min = SSL_LIBRARY_VERSION_3_0;
- sslver->max = SSL_LIBRARY_VERSION_3_0;
- return CURLE_OK;
-
- case CURL_SSLVERSION_TLSv1_0:
- sslver->min = SSL_LIBRARY_VERSION_TLS_1_0;
- sslver->max = SSL_LIBRARY_VERSION_TLS_1_0;
- return CURLE_OK;
-
- case CURL_SSLVERSION_TLSv1_1:
-#ifdef SSL_LIBRARY_VERSION_TLS_1_1
- sslver->min = SSL_LIBRARY_VERSION_TLS_1_1;
- sslver->max = SSL_LIBRARY_VERSION_TLS_1_1;
- return CURLE_OK;
-#endif
- break;
-
- case CURL_SSLVERSION_TLSv1_2:
-#ifdef SSL_LIBRARY_VERSION_TLS_1_2
- sslver->min = SSL_LIBRARY_VERSION_TLS_1_2;
- sslver->max = SSL_LIBRARY_VERSION_TLS_1_2;
- return CURLE_OK;
-#endif
- break;
- }
-
- failf(data, "TLS minor version cannot be set");
- return CURLE_SSL_CONNECT_ERROR;
-}
-
-static CURLcode nss_fail_connect(struct ssl_connect_data *connssl,
- struct SessionHandle *data,
- CURLcode curlerr)
-{
- SSLVersionRange sslver;
- PRErrorCode err = 0;
-
- /* reset the flag to avoid an infinite loop */
- data->state.ssl_connect_retry = FALSE;
-
- if(is_nss_error(curlerr)) {
- /* read NSPR error code */
- err = PR_GetError();
- if(is_cc_error(err))
- curlerr = CURLE_SSL_CERTPROBLEM;
-
- /* print the error number and error string */
- infof(data, "NSS error %d (%s)\n", err, nss_error_to_name(err));
-
- /* print a human-readable message describing the error if available */
- nss_print_error_message(data, err);
- }
-
- /* cleanup on connection failure */
- Curl_llist_destroy(connssl->obj_list, NULL);
- connssl->obj_list = NULL;
-
- if(connssl->handle
- && (SSL_VersionRangeGet(connssl->handle, &sslver) == SECSuccess)
- && (sslver.min == SSL_LIBRARY_VERSION_3_0)
- && (sslver.max != SSL_LIBRARY_VERSION_3_0)
- && isTLSIntoleranceError(err)) {
- /* schedule reconnect through Curl_retry_request() */
- data->state.ssl_connect_retry = TRUE;
- infof(data, "Error in TLS handshake, trying SSLv3...\n");
- return CURLE_OK;
- }
-
- return curlerr;
-}
-
-/* Switch the SSL socket into non-blocking mode. */
-static CURLcode nss_set_nonblock(struct ssl_connect_data *connssl,
- struct SessionHandle *data)
-{
- static PRSocketOptionData sock_opt;
- sock_opt.option = PR_SockOpt_Nonblocking;
- sock_opt.value.non_blocking = PR_TRUE;
-
- if(PR_SetSocketOption(connssl->handle, &sock_opt) != PR_SUCCESS)
- return nss_fail_connect(connssl, data, CURLE_SSL_CONNECT_ERROR);
-
- return CURLE_OK;
-}
-
-static CURLcode nss_setup_connect(struct connectdata *conn, int sockindex)
-{
- PRFileDesc *model = NULL;
- PRFileDesc *nspr_io = NULL;
- PRFileDesc *nspr_io_stub = NULL;
- PRBool ssl_no_cache;
- PRBool ssl_cbc_random_iv;
- struct SessionHandle *data = conn->data;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- CURLcode curlerr;
-
- SSLVersionRange sslver = {
- SSL_LIBRARY_VERSION_TLS_1_0, /* min */
- SSL_LIBRARY_VERSION_TLS_1_0 /* max */
- };
-
-#ifdef USE_NGHTTP2
-#if defined(SSL_ENABLE_NPN) || defined(SSL_ENABLE_ALPN)
- unsigned int alpn_protos_len = NGHTTP2_PROTO_VERSION_ID_LEN +
- ALPN_HTTP_1_1_LENGTH + 2;
- unsigned char alpn_protos[NGHTTP2_PROTO_VERSION_ID_LEN + ALPN_HTTP_1_1_LENGTH
- + 2];
- int cur = 0;
-#endif
-#endif
-
-
- if(connssl->state == ssl_connection_complete)
- return CURLE_OK;
-
- connssl->data = data;
-
- /* list of all NSS objects we need to destroy in Curl_nss_close() */
- connssl->obj_list = Curl_llist_alloc(nss_destroy_object);
- if(!connssl->obj_list)
- return CURLE_OUT_OF_MEMORY;
-
- /* FIXME. NSS doesn't support multiple databases open at the same time. */
- PR_Lock(nss_initlock);
- curlerr = nss_init(conn->data);
- if(CURLE_OK != curlerr) {
- PR_Unlock(nss_initlock);
- goto error;
- }
-
- curlerr = CURLE_SSL_CONNECT_ERROR;
-
- if(!mod) {
- char *configstring = aprintf("library=%s name=PEM", pem_library);
- if(!configstring) {
- PR_Unlock(nss_initlock);
- goto error;
- }
- mod = SECMOD_LoadUserModule(configstring, NULL, PR_FALSE);
- free(configstring);
-
- if(!mod || !mod->loaded) {
- if(mod) {
- SECMOD_DestroyModule(mod);
- mod = NULL;
- }
- infof(data, "WARNING: failed to load NSS PEM library %s. Using "
- "OpenSSL PEM certificates will not work.\n", pem_library);
- }
- }
-
- PK11_SetPasswordFunc(nss_get_password);
- PR_Unlock(nss_initlock);
-
- model = PR_NewTCPSocket();
- if(!model)
- goto error;
- model = SSL_ImportFD(NULL, model);
-
- if(SSL_OptionSet(model, SSL_SECURITY, PR_TRUE) != SECSuccess)
- goto error;
- if(SSL_OptionSet(model, SSL_HANDSHAKE_AS_SERVER, PR_FALSE) != SECSuccess)
- goto error;
- if(SSL_OptionSet(model, SSL_HANDSHAKE_AS_CLIENT, PR_TRUE) != SECSuccess)
- goto error;
-
- /* do not use SSL cache if disabled or we are not going to verify peer */
- ssl_no_cache = (conn->ssl_config.sessionid && data->set.ssl.verifypeer) ?
- PR_FALSE : PR_TRUE;
- if(SSL_OptionSet(model, SSL_NO_CACHE, ssl_no_cache) != SECSuccess)
- goto error;
-
- /* enable/disable the requested SSL version(s) */
- if(nss_init_sslver(&sslver, data) != CURLE_OK)
- goto error;
- if(SSL_VersionRangeSet(model, &sslver) != SECSuccess)
- goto error;
-
- ssl_cbc_random_iv = !data->set.ssl_enable_beast;
-#ifdef SSL_CBC_RANDOM_IV
- /* unless the user explicitly asks to allow the protocol vulnerability, we
- use the work-around */
- if(SSL_OptionSet(model, SSL_CBC_RANDOM_IV, ssl_cbc_random_iv) != SECSuccess)
- infof(data, "warning: failed to set SSL_CBC_RANDOM_IV = %d\n",
- ssl_cbc_random_iv);
-#else
- if(ssl_cbc_random_iv)
- infof(data, "warning: support for SSL_CBC_RANDOM_IV not compiled in\n");
-#endif
-
- /* reset the flag to avoid an infinite loop */
- data->state.ssl_connect_retry = FALSE;
-
- if(data->set.ssl.cipher_list) {
- if(set_ciphers(data, model, data->set.ssl.cipher_list) != SECSuccess) {
- curlerr = CURLE_SSL_CIPHER;
- goto error;
- }
- }
-
- if(!data->set.ssl.verifypeer && data->set.ssl.verifyhost)
- infof(data, "warning: ignoring value of ssl.verifyhost\n");
-
- /* bypass the default SSL_AuthCertificate() hook in case we do not want to
- * verify peer */
- if(SSL_AuthCertificateHook(model, nss_auth_cert_hook, conn) != SECSuccess)
- goto error;
-
- data->set.ssl.certverifyresult=0; /* not checked yet */
- if(SSL_BadCertHook(model, BadCertHandler, conn) != SECSuccess)
- goto error;
-
- if(SSL_HandshakeCallback(model, HandshakeCallback, conn) != SECSuccess)
- goto error;
-
- if(data->set.ssl.verifypeer) {
- const CURLcode rv = nss_load_ca_certificates(conn, sockindex);
- if(CURLE_OK != rv) {
- curlerr = rv;
- goto error;
- }
- }
-
- if(data->set.ssl.CRLfile) {
- const CURLcode rv = nss_load_crl(data->set.ssl.CRLfile);
- if(CURLE_OK != rv) {
- curlerr = rv;
- goto error;
- }
- infof(data, " CRLfile: %s\n", data->set.ssl.CRLfile);
- }
-
- if(data->set.str[STRING_CERT]) {
- char *nickname = dup_nickname(data, STRING_CERT);
- if(nickname) {
- /* we are not going to use libnsspem.so to read the client cert */
- connssl->obj_clicert = NULL;
- }
- else {
- CURLcode rv = cert_stuff(conn, sockindex, data->set.str[STRING_CERT],
- data->set.str[STRING_KEY]);
- if(CURLE_OK != rv) {
- /* failf() is already done in cert_stuff() */
- curlerr = rv;
- goto error;
- }
- }
-
- /* store the nickname for SelectClientCert() called during handshake */
- connssl->client_nickname = nickname;
- }
- else
- connssl->client_nickname = NULL;
-
- if(SSL_GetClientAuthDataHook(model, SelectClientCert,
- (void *)connssl) != SECSuccess) {
- curlerr = CURLE_SSL_CERTPROBLEM;
- goto error;
- }
-
- /* wrap OS file descriptor by NSPR's file descriptor abstraction */
- nspr_io = PR_ImportTCPSocket(sockfd);
- if(!nspr_io)
- goto error;
-
- /* create our own NSPR I/O layer */
- nspr_io_stub = PR_CreateIOLayerStub(nspr_io_identity, &nspr_io_methods);
- if(!nspr_io_stub) {
- PR_Close(nspr_io);
- goto error;
- }
-
- /* make the per-connection data accessible from NSPR I/O callbacks */
- nspr_io_stub->secret = (void *)connssl;
-
- /* push our new layer to the NSPR I/O stack */
- if(PR_PushIOLayer(nspr_io, PR_TOP_IO_LAYER, nspr_io_stub) != PR_SUCCESS) {
- PR_Close(nspr_io);
- PR_Close(nspr_io_stub);
- goto error;
- }
-
- /* import our model socket onto the current I/O stack */
- connssl->handle = SSL_ImportFD(model, nspr_io);
- if(!connssl->handle) {
- PR_Close(nspr_io);
- goto error;
- }
-
- PR_Close(model); /* We don't need this any more */
- model = NULL;
-
- /* This is the password associated with the cert that we're using */
- if(data->set.str[STRING_KEY_PASSWD]) {
- SSL_SetPKCS11PinArg(connssl->handle, data->set.str[STRING_KEY_PASSWD]);
- }
-
-#ifdef USE_NGHTTP2
- if(data->set.httpversion == CURL_HTTP_VERSION_2_0) {
-#ifdef SSL_ENABLE_NPN
- if(data->set.ssl_enable_npn) {
- if(SSL_OptionSet(connssl->handle, SSL_ENABLE_NPN, PR_TRUE) != SECSuccess)
- goto error;
- }
-#endif
-
-#ifdef SSL_ENABLE_ALPN
- if(data->set.ssl_enable_alpn) {
- if(SSL_OptionSet(connssl->handle, SSL_ENABLE_ALPN, PR_TRUE)
- != SECSuccess)
- goto error;
- }
-#endif
-
-#if defined(SSL_ENABLE_NPN) || defined(SSL_ENABLE_ALPN)
- if(data->set.ssl_enable_npn || data->set.ssl_enable_alpn) {
- alpn_protos[cur] = NGHTTP2_PROTO_VERSION_ID_LEN;
- cur++;
- memcpy(&alpn_protos[cur], NGHTTP2_PROTO_VERSION_ID,
- NGHTTP2_PROTO_VERSION_ID_LEN);
- cur += NGHTTP2_PROTO_VERSION_ID_LEN;
- alpn_protos[cur] = ALPN_HTTP_1_1_LENGTH;
- cur++;
- memcpy(&alpn_protos[cur], ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH);
-
- if(SSL_SetNextProtoNego(connssl->handle, alpn_protos, alpn_protos_len)
- != SECSuccess)
- goto error;
- }
- else {
- infof(data, "SSL, can't negotiate HTTP/2.0 with neither NPN nor ALPN\n");
- }
-#endif
- }
-#endif
-
-
- /* Force handshake on next I/O */
- SSL_ResetHandshake(connssl->handle, /* asServer */ PR_FALSE);
-
- SSL_SetURL(connssl->handle, conn->host.name);
-
- return CURLE_OK;
-
-error:
- if(model)
- PR_Close(model);
-
- return nss_fail_connect(connssl, data, curlerr);
-}
-
-static CURLcode nss_do_connect(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct SessionHandle *data = conn->data;
- CURLcode curlerr = CURLE_SSL_CONNECT_ERROR;
- PRUint32 timeout;
-
- /* check timeout situation */
- const long time_left = Curl_timeleft(data, NULL, TRUE);
- if(time_left < 0L) {
- failf(data, "timed out before SSL handshake");
- curlerr = CURLE_OPERATION_TIMEDOUT;
- goto error;
- }
-
- /* Force the handshake now */
- timeout = PR_MillisecondsToInterval((PRUint32) time_left);
- if(SSL_ForceHandshakeWithTimeout(connssl->handle, timeout) != SECSuccess) {
- if(PR_GetError() == PR_WOULD_BLOCK_ERROR)
- /* blocking direction is updated by nss_update_connecting_state() */
- return CURLE_AGAIN;
- else if(conn->data->set.ssl.certverifyresult == SSL_ERROR_BAD_CERT_DOMAIN)
- curlerr = CURLE_PEER_FAILED_VERIFICATION;
- else if(conn->data->set.ssl.certverifyresult!=0)
- curlerr = CURLE_SSL_CACERT;
- goto error;
- }
-
- connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = nss_recv;
- conn->send[sockindex] = nss_send;
-
- display_conn_info(conn, connssl->handle);
-
- if(data->set.str[STRING_SSL_ISSUERCERT]) {
- SECStatus ret = SECFailure;
- char *nickname = dup_nickname(data, STRING_SSL_ISSUERCERT);
- if(nickname) {
- /* we support only nicknames in case of STRING_SSL_ISSUERCERT for now */
- ret = check_issuer_cert(connssl->handle, nickname);
- free(nickname);
- }
-
- if(SECFailure == ret) {
- infof(data,"SSL certificate issuer check failed\n");
- curlerr = CURLE_SSL_ISSUER_ERROR;
- goto error;
- }
- else {
- infof(data, "SSL certificate issuer check ok\n");
- }
- }
-
- return CURLE_OK;
-
-error:
- return nss_fail_connect(connssl, data, curlerr);
-}
-
-static CURLcode nss_connect_common(struct connectdata *conn, int sockindex,
- bool *done)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct SessionHandle *data = conn->data;
- const bool blocking = (done == NULL);
- CURLcode rv;
-
- if(connssl->connecting_state == ssl_connect_1) {
- rv = nss_setup_connect(conn, sockindex);
- if(rv)
- /* we do not expect CURLE_AGAIN from nss_setup_connect() */
- return rv;
-
- if(!blocking) {
- /* in non-blocking mode, set NSS non-blocking mode before handshake */
- rv = nss_set_nonblock(connssl, data);
- if(rv)
- return rv;
- }
-
- connssl->connecting_state = ssl_connect_2;
- }
-
- rv = nss_do_connect(conn, sockindex);
- switch(rv) {
- case CURLE_OK:
- break;
- case CURLE_AGAIN:
- if(!blocking)
- /* CURLE_AGAIN in non-blocking mode is not an error */
- return CURLE_OK;
- /* fall through */
- default:
- return rv;
- }
-
- if(blocking) {
- /* in blocking mode, set NSS non-blocking mode _after_ SSL handshake */
- rv = nss_set_nonblock(connssl, data);
- if(rv)
- return rv;
- }
- else
- /* signal completed SSL handshake */
- *done = TRUE;
-
- connssl->connecting_state = ssl_connect_done;
- return CURLE_OK;
-}
-
-CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex)
-{
- return nss_connect_common(conn, sockindex, /* blocking */ NULL);
-}
-
-CURLcode Curl_nss_connect_nonblocking(struct connectdata *conn,
- int sockindex, bool *done)
-{
- return nss_connect_common(conn, sockindex, done);
-}
-
-static ssize_t nss_send(struct connectdata *conn, /* connection data */
- int sockindex, /* socketindex */
- const void *mem, /* send this data */
- size_t len, /* amount to write */
- CURLcode *curlcode)
-{
- ssize_t rc = PR_Send(conn->ssl[sockindex].handle, mem, (int)len, 0,
- PR_INTERVAL_NO_WAIT);
- if(rc < 0) {
- PRInt32 err = PR_GetError();
- if(err == PR_WOULD_BLOCK_ERROR)
- *curlcode = CURLE_AGAIN;
- else {
- /* print the error number and error string */
- const char *err_name = nss_error_to_name(err);
- infof(conn->data, "SSL write: error %d (%s)\n", err, err_name);
-
- /* print a human-readable message describing the error if available */
- nss_print_error_message(conn->data, err);
-
- *curlcode = (is_cc_error(err))
- ? CURLE_SSL_CERTPROBLEM
- : CURLE_SEND_ERROR;
- }
- return -1;
- }
- return rc; /* number of bytes */
-}
-
-static ssize_t nss_recv(struct connectdata * conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- CURLcode *curlcode)
-{
- ssize_t nread = PR_Recv(conn->ssl[num].handle, buf, (int)buffersize, 0,
- PR_INTERVAL_NO_WAIT);
- if(nread < 0) {
- /* failed SSL read */
- PRInt32 err = PR_GetError();
-
- if(err == PR_WOULD_BLOCK_ERROR)
- *curlcode = CURLE_AGAIN;
- else {
- /* print the error number and error string */
- const char *err_name = nss_error_to_name(err);
- infof(conn->data, "SSL read: errno %d (%s)\n", err, err_name);
-
- /* print a human-readable message describing the error if available */
- nss_print_error_message(conn->data, err);
-
- *curlcode = (is_cc_error(err))
- ? CURLE_SSL_CERTPROBLEM
- : CURLE_RECV_ERROR;
- }
- return -1;
- }
- return nread;
-}
-
-size_t Curl_nss_version(char *buffer, size_t size)
-{
- return snprintf(buffer, size, "NSS/%s", NSS_VERSION);
-}
-
-int Curl_nss_seed(struct SessionHandle *data)
-{
- /* make sure that NSS is initialized */
- return !!Curl_nss_force_init(data);
-}
-
-/* data might be NULL */
-int Curl_nss_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length)
-{
- if(data)
- Curl_nss_seed(data); /* Initiate the seed if not already done */
- if(SECSuccess != PK11_GenerateRandom(entropy, curlx_uztosi(length))) {
- /* no way to signal a failure from here, we have to abort */
- failf(data, "PK11_GenerateRandom() failed, calling abort()...");
- abort();
- }
- return 0;
-}
-
-void Curl_nss_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum, /* output */
- size_t md5len)
-{
- PK11Context *MD5pw = PK11_CreateDigestContext(SEC_OID_MD5);
- unsigned int MD5out;
- PK11_DigestOp(MD5pw, tmp, curlx_uztoui(tmplen));
- PK11_DigestFinal(MD5pw, md5sum, &MD5out, curlx_uztoui(md5len));
- PK11_DestroyContext(MD5pw, PR_TRUE);
-}
-
-#endif /* USE_NSS */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/nssg.h b/external/libcurl_android/jni/libcurl/lib/vtls/nssg.h
deleted file mode 100755
index 311f873d..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/nssg.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef HEADER_CURL_NSSG_H
-#define HEADER_CURL_NSSG_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifdef USE_NSS
-/*
- * This header should only be needed to get included by vtls.c and nss.c
- */
-
-#include "urldata.h"
-
-CURLcode Curl_nss_connect(struct connectdata *conn, int sockindex);
-CURLcode Curl_nss_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done);
-/* close a SSL connection */
-void Curl_nss_close(struct connectdata *conn, int sockindex);
-
-/* tell NSS to close down all open information regarding connections (and
- thus session ID caching etc) */
-int Curl_nss_close_all(struct SessionHandle *data);
-
-int Curl_nss_init(void);
-void Curl_nss_cleanup(void);
-
-size_t Curl_nss_version(char *buffer, size_t size);
-int Curl_nss_check_cxn(struct connectdata *cxn);
-int Curl_nss_seed(struct SessionHandle *data);
-
-/* initialize NSS library if not already */
-CURLcode Curl_nss_force_init(struct SessionHandle *data);
-
-int Curl_nss_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length);
-
-void Curl_nss_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum, /* output */
- size_t md5len);
-
-/* this backend provides these functions: */
-#define have_curlssl_md5sum 1
-
-/* API setup for NSS */
-#define curlssl_init Curl_nss_init
-#define curlssl_cleanup Curl_nss_cleanup
-#define curlssl_connect Curl_nss_connect
-#define curlssl_connect_nonblocking Curl_nss_connect_nonblocking
-
-/* NSS has its own session ID cache */
-#define curlssl_session_free(x) Curl_nop_stmt
-#define curlssl_close_all Curl_nss_close_all
-#define curlssl_close Curl_nss_close
-/* NSS has no shutdown function provided and thus always fail */
-#define curlssl_shutdown(x,y) (x=x, y=y, 1)
-#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_NOT_BUILT_IN)
-#define curlssl_set_engine_default(x) (x=x, CURLE_NOT_BUILT_IN)
-#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_version Curl_nss_version
-#define curlssl_check_cxn(x) Curl_nss_check_cxn(x)
-#define curlssl_data_pending(x,y) (x=x, y=y, 0)
-#define curlssl_random(x,y,z) Curl_nss_random(x,y,z)
-#define curlssl_md5sum(a,b,c,d) Curl_nss_md5sum(a,b,c,d)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_NSS
-
-#endif /* USE_NSS */
-#endif /* HEADER_CURL_NSSG_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/openssl.c b/external/libcurl_android/jni/libcurl/lib/vtls/openssl.c
deleted file mode 100755
index da928544..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/openssl.c
+++ /dev/null
@@ -1,2918 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Source file for all OpenSSL-specific code for the TLS/SSL layer. No code
- * but vtls.c should ever call or use these functions.
- */
-
-/*
- * The original SSLeay-using code for curl was written by Linas Vepstas and
- * Sampo Kellomaki 1998.
- */
-
-#include "curl_setup.h"
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include "urldata.h"
-#include "sendf.h"
-#include "formdata.h" /* for the boundary function */
-#include "url.h" /* for the ssl config check function */
-#include "inet_pton.h"
-#include "openssl.h"
-#include "connect.h"
-#include "slist.h"
-#include "strequal.h"
-#include "select.h"
-#include "vtls.h"
-#include "rawstr.h"
-#include "hostcheck.h"
-
-#define _MPRINTF_REPLACE /* use the internal *printf() functions */
-#include <curl/mprintf.h>
-
-#ifdef USE_SSLEAY
-
-#ifdef USE_OPENSSL
-#include <openssl/rand.h>
-#include <openssl/x509v3.h>
-#include <openssl/dsa.h>
-#include <openssl/dh.h>
-#include <openssl/err.h>
-#include <openssl/md5.h>
-#include <openssl/conf.h>
-#else
-#include <rand.h>
-#include <x509v3.h>
-#include <md5.h>
-#endif
-
-#include "warnless.h"
-#include "curl_memory.h"
-#include "non-ascii.h" /* for Curl_convert_from_utf8 prototype */
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-#ifndef OPENSSL_VERSION_NUMBER
-#error "OPENSSL_VERSION_NUMBER not defined"
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x0090581fL
-#define HAVE_SSL_GET1_SESSION 1
-#else
-#undef HAVE_SSL_GET1_SESSION
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x00904100L
-#define HAVE_USERDATA_IN_PWD_CALLBACK 1
-#else
-#undef HAVE_USERDATA_IN_PWD_CALLBACK
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x00907001L
-/* ENGINE_load_private_key() takes four arguments */
-#define HAVE_ENGINE_LOAD_FOUR_ARGS
-#include <openssl/ui.h>
-#else
-/* ENGINE_load_private_key() takes three arguments */
-#undef HAVE_ENGINE_LOAD_FOUR_ARGS
-#endif
-
-#if (OPENSSL_VERSION_NUMBER >= 0x00903001L) && defined(HAVE_OPENSSL_PKCS12_H)
-/* OpenSSL has PKCS 12 support */
-#define HAVE_PKCS12_SUPPORT
-#else
-/* OpenSSL/SSLEay does not have PKCS12 support */
-#undef HAVE_PKCS12_SUPPORT
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x00906001L
-#define HAVE_ERR_ERROR_STRING_N 1
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x00909000L
-#define SSL_METHOD_QUAL const
-#else
-#define SSL_METHOD_QUAL
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x00907000L
-/* 0.9.6 didn't have X509_STORE_set_flags() */
-#define HAVE_X509_STORE_SET_FLAGS 1
-#else
-#define X509_STORE_set_flags(x,y) Curl_nop_stmt
-#endif
-
-#if OPENSSL_VERSION_NUMBER >= 0x10000000L
-#define HAVE_ERR_REMOVE_THREAD_STATE 1
-#endif
-
-#ifndef HAVE_SSLV2_CLIENT_METHOD
-#undef OPENSSL_NO_SSL2 /* undef first to avoid compiler warnings */
-#define OPENSSL_NO_SSL2
-#endif
-
-/*
- * Number of bytes to read from the random number seed file. This must be
- * a finite value (because some entropy "files" like /dev/urandom have
- * an infinite length), but must be large enough to provide enough
- * entopy to properly seed OpenSSL's PRNG.
- */
-#define RAND_LOAD_LENGTH 1024
-
-#ifndef HAVE_USERDATA_IN_PWD_CALLBACK
-static char global_passwd[64];
-#endif
-
-static int passwd_callback(char *buf, int num, int encrypting
-#ifdef HAVE_USERDATA_IN_PWD_CALLBACK
- /* This was introduced in 0.9.4, we can set this
- using SSL_CTX_set_default_passwd_cb_userdata()
- */
- , void *global_passwd
-#endif
- )
-{
- DEBUGASSERT(0 == encrypting);
-
- if(!encrypting) {
- int klen = curlx_uztosi(strlen((char *)global_passwd));
- if(num > klen) {
- memcpy(buf, global_passwd, klen+1);
- return klen;
- }
- }
- return 0;
-}
-
-/*
- * rand_enough() is a function that returns TRUE if we have seeded the random
- * engine properly. We use some preprocessor magic to provide a seed_enough()
- * macro to use, just to prevent a compiler warning on this function if we
- * pass in an argument that is never used.
- */
-
-#ifdef HAVE_RAND_STATUS
-#define seed_enough(x) rand_enough()
-static bool rand_enough(void)
-{
- return (0 != RAND_status()) ? TRUE : FALSE;
-}
-#else
-#define seed_enough(x) rand_enough(x)
-static bool rand_enough(int nread)
-{
- /* this is a very silly decision to make */
- return (nread > 500) ? TRUE : FALSE;
-}
-#endif
-
-static int ossl_seed(struct SessionHandle *data)
-{
- char *buf = data->state.buffer; /* point to the big buffer */
- int nread=0;
-
- /* Q: should we add support for a random file name as a libcurl option?
- A: Yes, it is here */
-
-#ifndef RANDOM_FILE
- /* if RANDOM_FILE isn't defined, we only perform this if an option tells
- us to! */
- if(data->set.ssl.random_file)
-#define RANDOM_FILE "" /* doesn't matter won't be used */
-#endif
- {
- /* let the option override the define */
- nread += RAND_load_file((data->set.str[STRING_SSL_RANDOM_FILE]?
- data->set.str[STRING_SSL_RANDOM_FILE]:
- RANDOM_FILE),
- RAND_LOAD_LENGTH);
- if(seed_enough(nread))
- return nread;
- }
-
-#if defined(HAVE_RAND_EGD)
- /* only available in OpenSSL 0.9.5 and later */
- /* EGD_SOCKET is set at configure time or not at all */
-#ifndef EGD_SOCKET
- /* If we don't have the define set, we only do this if the egd-option
- is set */
- if(data->set.str[STRING_SSL_EGDSOCKET])
-#define EGD_SOCKET "" /* doesn't matter won't be used */
-#endif
- {
- /* If there's an option and a define, the option overrides the
- define */
- int ret = RAND_egd(data->set.str[STRING_SSL_EGDSOCKET]?
- data->set.str[STRING_SSL_EGDSOCKET]:EGD_SOCKET);
- if(-1 != ret) {
- nread += ret;
- if(seed_enough(nread))
- return nread;
- }
- }
-#endif
-
- /* If we get here, it means we need to seed the PRNG using a "silly"
- approach! */
- do {
- unsigned char randb[64];
- int len = sizeof(randb);
- RAND_bytes(randb, len);
- RAND_add(randb, len, (len >> 1));
- } while(!RAND_status());
-
- /* generates a default path for the random seed file */
- buf[0]=0; /* blank it first */
- RAND_file_name(buf, BUFSIZE);
- if(buf[0]) {
- /* we got a file name to try */
- nread += RAND_load_file(buf, RAND_LOAD_LENGTH);
- if(seed_enough(nread))
- return nread;
- }
-
- infof(data, "libcurl is now using a weak random seed!\n");
- return nread;
-}
-
-static int Curl_ossl_seed(struct SessionHandle *data)
-{
- /* we have the "SSL is seeded" boolean static to prevent multiple
- time-consuming seedings in vain */
- static bool ssl_seeded = FALSE;
-
- if(!ssl_seeded || data->set.str[STRING_SSL_RANDOM_FILE] ||
- data->set.str[STRING_SSL_EGDSOCKET]) {
- ossl_seed(data);
- ssl_seeded = TRUE;
- }
- return 0;
-}
-
-
-#ifndef SSL_FILETYPE_ENGINE
-#define SSL_FILETYPE_ENGINE 42
-#endif
-#ifndef SSL_FILETYPE_PKCS12
-#define SSL_FILETYPE_PKCS12 43
-#endif
-static int do_file_type(const char *type)
-{
- if(!type || !type[0])
- return SSL_FILETYPE_PEM;
- if(Curl_raw_equal(type, "PEM"))
- return SSL_FILETYPE_PEM;
- if(Curl_raw_equal(type, "DER"))
- return SSL_FILETYPE_ASN1;
- if(Curl_raw_equal(type, "ENG"))
- return SSL_FILETYPE_ENGINE;
- if(Curl_raw_equal(type, "P12"))
- return SSL_FILETYPE_PKCS12;
- return -1;
-}
-
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(HAVE_ENGINE_LOAD_FOUR_ARGS)
-/*
- * Supply default password to the engine user interface conversation.
- * The password is passed by OpenSSL engine from ENGINE_load_private_key()
- * last argument to the ui and can be obtained by UI_get0_user_data(ui) here.
- */
-static int ssl_ui_reader(UI *ui, UI_STRING *uis)
-{
- const char *password;
- switch(UI_get_string_type(uis)) {
- case UIT_PROMPT:
- case UIT_VERIFY:
- password = (const char*)UI_get0_user_data(ui);
- if(NULL != password &&
- UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD) {
- UI_set_result(ui, uis, password);
- return 1;
- }
- default:
- break;
- }
- return (UI_method_get_reader(UI_OpenSSL()))(ui, uis);
-}
-
-/*
- * Suppress interactive request for a default password if available.
- */
-static int ssl_ui_writer(UI *ui, UI_STRING *uis)
-{
- switch(UI_get_string_type(uis)) {
- case UIT_PROMPT:
- case UIT_VERIFY:
- if(NULL != UI_get0_user_data(ui) &&
- UI_get_input_flags(uis) & UI_INPUT_FLAG_DEFAULT_PWD) {
- return 1;
- }
- default:
- break;
- }
- return (UI_method_get_writer(UI_OpenSSL()))(ui, uis);
-}
-#endif
-
-static
-int cert_stuff(struct connectdata *conn,
- SSL_CTX* ctx,
- char *cert_file,
- const char *cert_type,
- char *key_file,
- const char *key_type)
-{
- struct SessionHandle *data = conn->data;
-
- int file_type = do_file_type(cert_type);
-
- if(cert_file != NULL || file_type == SSL_FILETYPE_ENGINE) {
- SSL *ssl;
- X509 *x509;
- int cert_done = 0;
-
- if(data->set.str[STRING_KEY_PASSWD]) {
-#ifndef HAVE_USERDATA_IN_PWD_CALLBACK
- /*
- * If password has been given, we store that in the global
- * area (*shudder*) for a while:
- */
- size_t len = strlen(data->set.str[STRING_KEY_PASSWD]);
- if(len < sizeof(global_passwd))
- memcpy(global_passwd, data->set.str[STRING_KEY_PASSWD], len+1);
- else
- global_passwd[0] = '\0';
-#else
- /*
- * We set the password in the callback userdata
- */
- SSL_CTX_set_default_passwd_cb_userdata(ctx,
- data->set.str[STRING_KEY_PASSWD]);
-#endif
- /* Set passwd callback: */
- SSL_CTX_set_default_passwd_cb(ctx, passwd_callback);
- }
-
-
-#define SSL_CLIENT_CERT_ERR \
- "unable to use client certificate (no key found or wrong pass phrase?)"
-
- switch(file_type) {
- case SSL_FILETYPE_PEM:
- /* SSL_CTX_use_certificate_chain_file() only works on PEM files */
- if(SSL_CTX_use_certificate_chain_file(ctx,
- cert_file) != 1) {
- failf(data, SSL_CLIENT_CERT_ERR);
- return 0;
- }
- break;
-
- case SSL_FILETYPE_ASN1:
- /* SSL_CTX_use_certificate_file() works with either PEM or ASN1, but
- we use the case above for PEM so this can only be performed with
- ASN1 files. */
- if(SSL_CTX_use_certificate_file(ctx,
- cert_file,
- file_type) != 1) {
- failf(data, SSL_CLIENT_CERT_ERR);
- return 0;
- }
- break;
- case SSL_FILETYPE_ENGINE:
-#if defined(HAVE_OPENSSL_ENGINE_H) && defined(ENGINE_CTRL_GET_CMD_FROM_NAME)
- {
- if(data->state.engine) {
- const char *cmd_name = "LOAD_CERT_CTRL";
- struct {
- const char *cert_id;
- X509 *cert;
- } params;
-
- params.cert_id = cert_file;
- params.cert = NULL;
-
- /* Does the engine supports LOAD_CERT_CTRL ? */
- if(!ENGINE_ctrl(data->state.engine, ENGINE_CTRL_GET_CMD_FROM_NAME,
- 0, (void *)cmd_name, NULL)) {
- failf(data, "ssl engine does not support loading certificates");
- return 0;
- }
-
- /* Load the certificate from the engine */
- if(!ENGINE_ctrl_cmd(data->state.engine, cmd_name,
- 0, &params, NULL, 1)) {
- failf(data, "ssl engine cannot load client cert with id"
- " '%s' [%s]", cert_file,
- ERR_error_string(ERR_get_error(), NULL));
- return 0;
- }
-
- if(!params.cert) {
- failf(data, "ssl engine didn't initialized the certificate "
- "properly.");
- return 0;
- }
-
- if(SSL_CTX_use_certificate(ctx, params.cert) != 1) {
- failf(data, "unable to set client certificate");
- X509_free(params.cert);
- return 0;
- }
- X509_free(params.cert); /* we don't need the handle any more... */
- }
- else {
- failf(data, "crypto engine not set, can't load certificate");
- return 0;
- }
- }
- break;
-#else
- failf(data, "file type ENG for certificate not implemented");
- return 0;
-#endif
-
- case SSL_FILETYPE_PKCS12:
- {
-#ifdef HAVE_PKCS12_SUPPORT
- FILE *f;
- PKCS12 *p12;
- EVP_PKEY *pri;
- STACK_OF(X509) *ca = NULL;
- int i;
-
- f = fopen(cert_file,"rb");
- if(!f) {
- failf(data, "could not open PKCS12 file '%s'", cert_file);
- return 0;
- }
- p12 = d2i_PKCS12_fp(f, NULL);
- fclose(f);
-
- if(!p12) {
- failf(data, "error reading PKCS12 file '%s'", cert_file );
- return 0;
- }
-
- PKCS12_PBE_add();
-
- if(!PKCS12_parse(p12, data->set.str[STRING_KEY_PASSWD], &pri, &x509,
- &ca)) {
- failf(data,
- "could not parse PKCS12 file, check password, OpenSSL error %s",
- ERR_error_string(ERR_get_error(), NULL) );
- PKCS12_free(p12);
- return 0;
- }
-
- PKCS12_free(p12);
-
- if(SSL_CTX_use_certificate(ctx, x509) != 1) {
- failf(data, SSL_CLIENT_CERT_ERR);
- goto fail;
- }
-
- if(SSL_CTX_use_PrivateKey(ctx, pri) != 1) {
- failf(data, "unable to use private key from PKCS12 file '%s'",
- cert_file);
- goto fail;
- }
-
- if(!SSL_CTX_check_private_key (ctx)) {
- failf(data, "private key from PKCS12 file '%s' "
- "does not match certificate in same file", cert_file);
- goto fail;
- }
- /* Set Certificate Verification chain */
- if(ca && sk_X509_num(ca)) {
- for(i = 0; i < sk_X509_num(ca); i++) {
- /*
- * Note that sk_X509_pop() is used below to make sure the cert is
- * removed from the stack properly before getting passed to
- * SSL_CTX_add_extra_chain_cert(). Previously we used
- * sk_X509_value() instead, but then we'd clean it in the subsequent
- * sk_X509_pop_free() call.
- */
- X509 *x = sk_X509_pop(ca);
- if(!SSL_CTX_add_extra_chain_cert(ctx, x)) {
- failf(data, "cannot add certificate to certificate chain");
- goto fail;
- }
- /* SSL_CTX_add_client_CA() seems to work with either sk_* function,
- * presumably because it duplicates what we pass to it.
- */
- if(!SSL_CTX_add_client_CA(ctx, x)) {
- failf(data, "cannot add certificate to client CA list");
- goto fail;
- }
- }
- }
-
- cert_done = 1;
- fail:
- EVP_PKEY_free(pri);
- X509_free(x509);
- sk_X509_pop_free(ca, X509_free);
-
- if(!cert_done)
- return 0; /* failure! */
- break;
-#else
- failf(data, "file type P12 for certificate not supported");
- return 0;
-#endif
- }
- default:
- failf(data, "not supported file type '%s' for certificate", cert_type);
- return 0;
- }
-
- file_type = do_file_type(key_type);
-
- switch(file_type) {
- case SSL_FILETYPE_PEM:
- if(cert_done)
- break;
- if(key_file == NULL)
- /* cert & key can only be in PEM case in the same file */
- key_file=cert_file;
- case SSL_FILETYPE_ASN1:
- if(SSL_CTX_use_PrivateKey_file(ctx, key_file, file_type) != 1) {
- failf(data, "unable to set private key file: '%s' type %s",
- key_file, key_type?key_type:"PEM");
- return 0;
- }
- break;
- case SSL_FILETYPE_ENGINE:
-#ifdef HAVE_OPENSSL_ENGINE_H
- { /* XXXX still needs some work */
- EVP_PKEY *priv_key = NULL;
- if(data->state.engine) {
-#ifdef HAVE_ENGINE_LOAD_FOUR_ARGS
- UI_METHOD *ui_method =
- UI_create_method((char *)"cURL user interface");
- if(NULL == ui_method) {
- failf(data, "unable do create OpenSSL user-interface method");
- return 0;
- }
- UI_method_set_opener(ui_method, UI_method_get_opener(UI_OpenSSL()));
- UI_method_set_closer(ui_method, UI_method_get_closer(UI_OpenSSL()));
- UI_method_set_reader(ui_method, ssl_ui_reader);
- UI_method_set_writer(ui_method, ssl_ui_writer);
-#endif
- /* the typecast below was added to please mingw32 */
- priv_key = (EVP_PKEY *)
- ENGINE_load_private_key(data->state.engine,key_file,
-#ifdef HAVE_ENGINE_LOAD_FOUR_ARGS
- ui_method,
-#endif
- data->set.str[STRING_KEY_PASSWD]);
-#ifdef HAVE_ENGINE_LOAD_FOUR_ARGS
- UI_destroy_method(ui_method);
-#endif
- if(!priv_key) {
- failf(data, "failed to load private key from crypto engine");
- return 0;
- }
- if(SSL_CTX_use_PrivateKey(ctx, priv_key) != 1) {
- failf(data, "unable to set private key");
- EVP_PKEY_free(priv_key);
- return 0;
- }
- EVP_PKEY_free(priv_key); /* we don't need the handle any more... */
- }
- else {
- failf(data, "crypto engine not set, can't load private key");
- return 0;
- }
- }
- break;
-#else
- failf(data, "file type ENG for private key not supported");
- return 0;
-#endif
- case SSL_FILETYPE_PKCS12:
- if(!cert_done) {
- failf(data, "file type P12 for private key not supported");
- return 0;
- }
- break;
- default:
- failf(data, "not supported file type for private key");
- return 0;
- }
-
- ssl=SSL_new(ctx);
- if(NULL == ssl) {
- failf(data,"unable to create an SSL structure");
- return 0;
- }
-
- x509=SSL_get_certificate(ssl);
-
- /* This version was provided by Evan Jordan and is supposed to not
- leak memory as the previous version: */
- if(x509 != NULL) {
- EVP_PKEY *pktmp = X509_get_pubkey(x509);
- EVP_PKEY_copy_parameters(pktmp,SSL_get_privatekey(ssl));
- EVP_PKEY_free(pktmp);
- }
-
- SSL_free(ssl);
-
- /* If we are using DSA, we can copy the parameters from
- * the private key */
-
-
- /* Now we know that a key and cert have been set against
- * the SSL context */
- if(!SSL_CTX_check_private_key(ctx)) {
- failf(data, "Private key does not match the certificate public key");
- return 0;
- }
-#ifndef HAVE_USERDATA_IN_PWD_CALLBACK
- /* erase it now */
- memset(global_passwd, 0, sizeof(global_passwd));
-#endif
- }
- return 1;
-}
-
-/* returns non-zero on failure */
-static int x509_name_oneline(X509_NAME *a, char *buf, size_t size)
-{
-#if 0
- return X509_NAME_oneline(a, buf, size);
-#else
- BIO *bio_out = BIO_new(BIO_s_mem());
- BUF_MEM *biomem;
- int rc;
-
- if(!bio_out)
- return 1; /* alloc failed! */
-
- rc = X509_NAME_print_ex(bio_out, a, 0, XN_FLAG_SEP_SPLUS_SPC);
- BIO_get_mem_ptr(bio_out, &biomem);
-
- if((size_t)biomem->length < size)
- size = biomem->length;
- else
- size--; /* don't overwrite the buffer end */
-
- memcpy(buf, biomem->data, size);
- buf[size]=0;
-
- BIO_free(bio_out);
-
- return !rc;
-#endif
-}
-
-static
-int cert_verify_callback(int ok, X509_STORE_CTX *ctx)
-{
- X509 *err_cert;
- char buf[256];
-
- err_cert=X509_STORE_CTX_get_current_cert(ctx);
- (void)x509_name_oneline(X509_get_subject_name(err_cert), buf, sizeof(buf));
- return ok;
-}
-
-/* Return error string for last OpenSSL error
- */
-static char *SSL_strerror(unsigned long error, char *buf, size_t size)
-{
-#ifdef HAVE_ERR_ERROR_STRING_N
- /* OpenSSL 0.9.6 and later has a function named
- ERRO_error_string_n() that takes the size of the buffer as a
- third argument */
- ERR_error_string_n(error, buf, size);
-#else
- (void) size;
- ERR_error_string(error, buf);
-#endif
- return buf;
-}
-
-#endif /* USE_SSLEAY */
-
-#ifdef USE_SSLEAY
-/**
- * Global SSL init
- *
- * @retval 0 error initializing SSL
- * @retval 1 SSL initialized successfully
- */
-int Curl_ossl_init(void)
-{
-#ifdef HAVE_ENGINE_LOAD_BUILTIN_ENGINES
- ENGINE_load_builtin_engines();
-#endif
-
- /* Lets get nice error messages */
- SSL_load_error_strings();
-
- /* Init the global ciphers and digests */
- if(!SSLeay_add_ssl_algorithms())
- return 0;
-
- OpenSSL_add_all_algorithms();
-
-
- /* OPENSSL_config(NULL); is "strongly recommended" to use but unfortunately
- that function makes an exit() call on wrongly formatted config files
- which makes it hard to use in some situations. OPENSSL_config() itself
- calls CONF_modules_load_file() and we use that instead and we ignore
- its return code! */
-
- (void)CONF_modules_load_file(NULL, NULL,
- CONF_MFLAGS_DEFAULT_SECTION|
- CONF_MFLAGS_IGNORE_MISSING_FILE);
-
- return 1;
-}
-
-#endif /* USE_SSLEAY */
-
-#ifdef USE_SSLEAY
-
-/* Global cleanup */
-void Curl_ossl_cleanup(void)
-{
- /* Free ciphers and digests lists */
- EVP_cleanup();
-
-#ifdef HAVE_ENGINE_CLEANUP
- /* Free engine list */
- ENGINE_cleanup();
-#endif
-
-#ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
- /* Free OpenSSL ex_data table */
- CRYPTO_cleanup_all_ex_data();
-#endif
-
- /* Free OpenSSL error strings */
- ERR_free_strings();
-
- /* Free thread local error state, destroying hash upon zero refcount */
-#ifdef HAVE_ERR_REMOVE_THREAD_STATE
- ERR_remove_thread_state(NULL);
-#else
- ERR_remove_state(0);
-#endif
-}
-
-/*
- * This function uses SSL_peek to determine connection status.
- *
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-int Curl_ossl_check_cxn(struct connectdata *conn)
-{
- int rc;
- char buf;
-
- rc = SSL_peek(conn->ssl[FIRSTSOCKET].handle, (void*)&buf, 1);
- if(rc > 0)
- return 1; /* connection still in place */
-
- if(rc == 0)
- return 0; /* connection has been closed */
-
- return -1; /* connection status unknown */
-}
-
-/* Selects an OpenSSL crypto engine
- */
-CURLcode Curl_ossl_set_engine(struct SessionHandle *data, const char *engine)
-{
-#if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
- ENGINE *e;
-
-#if OPENSSL_VERSION_NUMBER >= 0x00909000L
- e = ENGINE_by_id(engine);
-#else
- /* avoid memory leak */
- for(e = ENGINE_get_first(); e; e = ENGINE_get_next(e)) {
- const char *e_id = ENGINE_get_id(e);
- if(!strcmp(engine, e_id))
- break;
- }
-#endif
-
- if(!e) {
- failf(data, "SSL Engine '%s' not found", engine);
- return CURLE_SSL_ENGINE_NOTFOUND;
- }
-
- if(data->state.engine) {
- ENGINE_finish(data->state.engine);
- ENGINE_free(data->state.engine);
- data->state.engine = NULL;
- }
- if(!ENGINE_init(e)) {
- char buf[256];
-
- ENGINE_free(e);
- failf(data, "Failed to initialise SSL Engine '%s':\n%s",
- engine, SSL_strerror(ERR_get_error(), buf, sizeof(buf)));
- return CURLE_SSL_ENGINE_INITFAILED;
- }
- data->state.engine = e;
- return CURLE_OK;
-#else
- (void)engine;
- failf(data, "SSL Engine not supported");
- return CURLE_SSL_ENGINE_NOTFOUND;
-#endif
-}
-
-/* Sets engine as default for all SSL operations
- */
-CURLcode Curl_ossl_set_engine_default(struct SessionHandle *data)
-{
-#ifdef HAVE_OPENSSL_ENGINE_H
- if(data->state.engine) {
- if(ENGINE_set_default(data->state.engine, ENGINE_METHOD_ALL) > 0) {
- infof(data,"set default crypto engine '%s'\n",
- ENGINE_get_id(data->state.engine));
- }
- else {
- failf(data, "set default crypto engine '%s' failed",
- ENGINE_get_id(data->state.engine));
- return CURLE_SSL_ENGINE_SETFAILED;
- }
- }
-#else
- (void) data;
-#endif
- return CURLE_OK;
-}
-
-/* Return list of OpenSSL crypto engine names.
- */
-struct curl_slist *Curl_ossl_engines_list(struct SessionHandle *data)
-{
- struct curl_slist *list = NULL;
-#if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H)
- struct curl_slist *beg;
- ENGINE *e;
-
- for(e = ENGINE_get_first(); e; e = ENGINE_get_next(e)) {
- beg = curl_slist_append(list, ENGINE_get_id(e));
- if(!beg) {
- curl_slist_free_all(list);
- return NULL;
- }
- list = beg;
- }
-#endif
- (void) data;
- return list;
-}
-
-
-/*
- * This function is called when an SSL connection is closed.
- */
-void Curl_ossl_close(struct connectdata *conn, int sockindex)
-{
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- if(connssl->handle) {
- (void)SSL_shutdown(connssl->handle);
- SSL_set_connect_state(connssl->handle);
-
- SSL_free (connssl->handle);
- connssl->handle = NULL;
- }
- if(connssl->ctx) {
- SSL_CTX_free (connssl->ctx);
- connssl->ctx = NULL;
- }
-}
-
-/*
- * This function is called to shut down the SSL layer but keep the
- * socket open (CCC - Clear Command Channel)
- */
-int Curl_ossl_shutdown(struct connectdata *conn, int sockindex)
-{
- int retval = 0;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct SessionHandle *data = conn->data;
- char buf[120]; /* We will use this for the OpenSSL error buffer, so it has
- to be at least 120 bytes long. */
- unsigned long sslerror;
- ssize_t nread;
- int buffsize;
- int err;
- int done = 0;
-
- /* This has only been tested on the proftpd server, and the mod_tls code
- sends a close notify alert without waiting for a close notify alert in
- response. Thus we wait for a close notify alert from the server, but
- we do not send one. Let's hope other servers do the same... */
-
- if(data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE)
- (void)SSL_shutdown(connssl->handle);
-
- if(connssl->handle) {
- buffsize = (int)sizeof(buf);
- while(!done) {
- int what = Curl_socket_ready(conn->sock[sockindex],
- CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
- if(what > 0) {
- ERR_clear_error();
-
- /* Something to read, let's do it and hope that it is the close
- notify alert from the server */
- nread = (ssize_t)SSL_read(conn->ssl[sockindex].handle, buf,
- buffsize);
- err = SSL_get_error(conn->ssl[sockindex].handle, (int)nread);
-
- switch(err) {
- case SSL_ERROR_NONE: /* this is not an error */
- case SSL_ERROR_ZERO_RETURN: /* no more data */
- /* This is the expected response. There was no data but only
- the close notify alert */
- done = 1;
- break;
- case SSL_ERROR_WANT_READ:
- /* there's data pending, re-invoke SSL_read() */
- infof(data, "SSL_ERROR_WANT_READ\n");
- break;
- case SSL_ERROR_WANT_WRITE:
- /* SSL wants a write. Really odd. Let's bail out. */
- infof(data, "SSL_ERROR_WANT_WRITE\n");
- done = 1;
- break;
- default:
- /* openssl/ssl.h says "look at error stack/return value/errno" */
- sslerror = ERR_get_error();
- failf(conn->data, "SSL read: %s, errno %d",
- ERR_error_string(sslerror, buf),
- SOCKERRNO);
- done = 1;
- break;
- }
- }
- else if(0 == what) {
- /* timeout */
- failf(data, "SSL shutdown timeout");
- done = 1;
- }
- else {
- /* anything that gets here is fatally bad */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- retval = -1;
- done = 1;
- }
- } /* while()-loop for the select() */
-
- if(data->set.verbose) {
-#ifdef HAVE_SSL_GET_SHUTDOWN
- switch(SSL_get_shutdown(connssl->handle)) {
- case SSL_SENT_SHUTDOWN:
- infof(data, "SSL_get_shutdown() returned SSL_SENT_SHUTDOWN\n");
- break;
- case SSL_RECEIVED_SHUTDOWN:
- infof(data, "SSL_get_shutdown() returned SSL_RECEIVED_SHUTDOWN\n");
- break;
- case SSL_SENT_SHUTDOWN|SSL_RECEIVED_SHUTDOWN:
- infof(data, "SSL_get_shutdown() returned SSL_SENT_SHUTDOWN|"
- "SSL_RECEIVED__SHUTDOWN\n");
- break;
- }
-#endif
- }
-
- SSL_free (connssl->handle);
- connssl->handle = NULL;
- }
- return retval;
-}
-
-void Curl_ossl_session_free(void *ptr)
-{
- /* free the ID */
- SSL_SESSION_free(ptr);
-}
-
-/*
- * This function is called when the 'data' struct is going away. Close
- * down everything and free all resources!
- */
-int Curl_ossl_close_all(struct SessionHandle *data)
-{
-#ifdef HAVE_OPENSSL_ENGINE_H
- if(data->state.engine) {
- ENGINE_finish(data->state.engine);
- ENGINE_free(data->state.engine);
- data->state.engine = NULL;
- }
-#else
- (void)data;
-#endif
- return 0;
-}
-
-static int asn1_output(const ASN1_UTCTIME *tm,
- char *buf,
- size_t sizeofbuf)
-{
- const char *asn1_string;
- int gmt=FALSE;
- int i;
- int year=0,month=0,day=0,hour=0,minute=0,second=0;
-
- i=tm->length;
- asn1_string=(const char *)tm->data;
-
- if(i < 10)
- return 1;
- if(asn1_string[i-1] == 'Z')
- gmt=TRUE;
- for(i=0; i<10; i++)
- if((asn1_string[i] > '9') || (asn1_string[i] < '0'))
- return 2;
-
- year= (asn1_string[0]-'0')*10+(asn1_string[1]-'0');
- if(year < 50)
- year+=100;
-
- month= (asn1_string[2]-'0')*10+(asn1_string[3]-'0');
- if((month > 12) || (month < 1))
- return 3;
-
- day= (asn1_string[4]-'0')*10+(asn1_string[5]-'0');
- hour= (asn1_string[6]-'0')*10+(asn1_string[7]-'0');
- minute= (asn1_string[8]-'0')*10+(asn1_string[9]-'0');
-
- if((asn1_string[10] >= '0') && (asn1_string[10] <= '9') &&
- (asn1_string[11] >= '0') && (asn1_string[11] <= '9'))
- second= (asn1_string[10]-'0')*10+(asn1_string[11]-'0');
-
- snprintf(buf, sizeofbuf,
- "%04d-%02d-%02d %02d:%02d:%02d %s",
- year+1900, month, day, hour, minute, second, (gmt?"GMT":""));
-
- return 0;
-}
-
-/* ====================================================== */
-
-
-/* Quote from RFC2818 section 3.1 "Server Identity"
-
- If a subjectAltName extension of type dNSName is present, that MUST
- be used as the identity. Otherwise, the (most specific) Common Name
- field in the Subject field of the certificate MUST be used. Although
- the use of the Common Name is existing practice, it is deprecated and
- Certification Authorities are encouraged to use the dNSName instead.
-
- Matching is performed using the matching rules specified by
- [RFC2459]. If more than one identity of a given type is present in
- the certificate (e.g., more than one dNSName name, a match in any one
- of the set is considered acceptable.) Names may contain the wildcard
- character * which is considered to match any single domain name
- component or component fragment. E.g., *.a.com matches foo.a.com but
- not bar.foo.a.com. f*.com matches foo.com but not bar.com.
-
- In some cases, the URI is specified as an IP address rather than a
- hostname. In this case, the iPAddress subjectAltName must be present
- in the certificate and must exactly match the IP in the URI.
-
-*/
-static CURLcode verifyhost(struct connectdata *conn,
- X509 *server_cert)
-{
- int matched = -1; /* -1 is no alternative match yet, 1 means match and 0
- means mismatch */
- int target = GEN_DNS; /* target type, GEN_DNS or GEN_IPADD */
- size_t addrlen = 0;
- struct SessionHandle *data = conn->data;
- STACK_OF(GENERAL_NAME) *altnames;
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif
- CURLcode res = CURLE_OK;
-
-#ifdef ENABLE_IPV6
- if(conn->bits.ipv6_ip &&
- Curl_inet_pton(AF_INET6, conn->host.name, &addr)) {
- target = GEN_IPADD;
- addrlen = sizeof(struct in6_addr);
- }
- else
-#endif
- if(Curl_inet_pton(AF_INET, conn->host.name, &addr)) {
- target = GEN_IPADD;
- addrlen = sizeof(struct in_addr);
- }
-
- /* get a "list" of alternative names */
- altnames = X509_get_ext_d2i(server_cert, NID_subject_alt_name, NULL, NULL);
-
- if(altnames) {
- int numalts;
- int i;
-
- /* get amount of alternatives, RFC2459 claims there MUST be at least
- one, but we don't depend on it... */
- numalts = sk_GENERAL_NAME_num(altnames);
-
- /* loop through all alternatives while none has matched */
- for(i=0; (i<numalts) && (matched != 1); i++) {
- /* get a handle to alternative name number i */
- const GENERAL_NAME *check = sk_GENERAL_NAME_value(altnames, i);
-
- /* only check alternatives of the same type the target is */
- if(check->type == target) {
- /* get data and length */
- const char *altptr = (char *)ASN1_STRING_data(check->d.ia5);
- size_t altlen = (size_t) ASN1_STRING_length(check->d.ia5);
-
- switch(target) {
- case GEN_DNS: /* name/pattern comparison */
- /* The OpenSSL man page explicitly says: "In general it cannot be
- assumed that the data returned by ASN1_STRING_data() is null
- terminated or does not contain embedded nulls." But also that
- "The actual format of the data will depend on the actual string
- type itself: for example for and IA5String the data will be ASCII"
-
- Gisle researched the OpenSSL sources:
- "I checked the 0.9.6 and 0.9.8 sources before my patch and
- it always 0-terminates an IA5String."
- */
- if((altlen == strlen(altptr)) &&
- /* if this isn't true, there was an embedded zero in the name
- string and we cannot match it. */
- Curl_cert_hostcheck(altptr, conn->host.name))
- matched = 1;
- else
- matched = 0;
- break;
-
- case GEN_IPADD: /* IP address comparison */
- /* compare alternative IP address if the data chunk is the same size
- our server IP address is */
- if((altlen == addrlen) && !memcmp(altptr, &addr, altlen))
- matched = 1;
- else
- matched = 0;
- break;
- }
- }
- }
- GENERAL_NAMES_free(altnames);
- }
-
- if(matched == 1)
- /* an alternative name matched the server hostname */
- infof(data, "\t subjectAltName: %s matched\n", conn->host.dispname);
- else if(matched == 0) {
- /* an alternative name field existed, but didn't match and then
- we MUST fail */
- infof(data, "\t subjectAltName does not match %s\n", conn->host.dispname);
- failf(data, "SSL: no alternative certificate subject name matches "
- "target host name '%s'", conn->host.dispname);
- res = CURLE_PEER_FAILED_VERIFICATION;
- }
- else {
- /* we have to look to the last occurrence of a commonName in the
- distinguished one to get the most significant one. */
- int j,i=-1 ;
-
-/* The following is done because of a bug in 0.9.6b */
-
- unsigned char *nulstr = (unsigned char *)"";
- unsigned char *peer_CN = nulstr;
-
- X509_NAME *name = X509_get_subject_name(server_cert) ;
- if(name)
- while((j = X509_NAME_get_index_by_NID(name, NID_commonName, i))>=0)
- i=j;
-
- /* we have the name entry and we will now convert this to a string
- that we can use for comparison. Doing this we support BMPstring,
- UTF8 etc. */
-
- if(i>=0) {
- ASN1_STRING *tmp = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name,i));
-
- /* In OpenSSL 0.9.7d and earlier, ASN1_STRING_to_UTF8 fails if the input
- is already UTF-8 encoded. We check for this case and copy the raw
- string manually to avoid the problem. This code can be made
- conditional in the future when OpenSSL has been fixed. Work-around
- brought by Alexis S. L. Carvalho. */
- if(tmp) {
- if(ASN1_STRING_type(tmp) == V_ASN1_UTF8STRING) {
- j = ASN1_STRING_length(tmp);
- if(j >= 0) {
- peer_CN = OPENSSL_malloc(j+1);
- if(peer_CN) {
- memcpy(peer_CN, ASN1_STRING_data(tmp), j);
- peer_CN[j] = '\0';
- }
- }
- }
- else /* not a UTF8 name */
- j = ASN1_STRING_to_UTF8(&peer_CN, tmp);
-
- if(peer_CN && (curlx_uztosi(strlen((char *)peer_CN)) != j)) {
- /* there was a terminating zero before the end of string, this
- cannot match and we return failure! */
- failf(data, "SSL: illegal cert name field");
- res = CURLE_PEER_FAILED_VERIFICATION;
- }
- }
- }
-
- if(peer_CN == nulstr)
- peer_CN = NULL;
- else {
- /* convert peer_CN from UTF8 */
- CURLcode rc = Curl_convert_from_utf8(data, peer_CN, strlen(peer_CN));
- /* Curl_convert_from_utf8 calls failf if unsuccessful */
- if(rc) {
- OPENSSL_free(peer_CN);
- return rc;
- }
- }
-
- if(res)
- /* error already detected, pass through */
- ;
- else if(!peer_CN) {
- failf(data,
- "SSL: unable to obtain common name from peer certificate");
- res = CURLE_PEER_FAILED_VERIFICATION;
- }
- else if(!Curl_cert_hostcheck((const char *)peer_CN, conn->host.name)) {
- failf(data, "SSL: certificate subject name '%s' does not match "
- "target host name '%s'", peer_CN, conn->host.dispname);
- res = CURLE_PEER_FAILED_VERIFICATION;
- }
- else {
- infof(data, "\t common name: %s (matched)\n", peer_CN);
- }
- if(peer_CN)
- OPENSSL_free(peer_CN);
- }
- return res;
-}
-#endif /* USE_SSLEAY */
-
-/* The SSL_CTRL_SET_MSG_CALLBACK doesn't exist in ancient OpenSSL versions
- and thus this cannot be done there. */
-#ifdef SSL_CTRL_SET_MSG_CALLBACK
-
-static const char *ssl_msg_type(int ssl_ver, int msg)
-{
- if(ssl_ver == SSL2_VERSION_MAJOR) {
- switch (msg) {
- case SSL2_MT_ERROR:
- return "Error";
- case SSL2_MT_CLIENT_HELLO:
- return "Client hello";
- case SSL2_MT_CLIENT_MASTER_KEY:
- return "Client key";
- case SSL2_MT_CLIENT_FINISHED:
- return "Client finished";
- case SSL2_MT_SERVER_HELLO:
- return "Server hello";
- case SSL2_MT_SERVER_VERIFY:
- return "Server verify";
- case SSL2_MT_SERVER_FINISHED:
- return "Server finished";
- case SSL2_MT_REQUEST_CERTIFICATE:
- return "Request CERT";
- case SSL2_MT_CLIENT_CERTIFICATE:
- return "Client CERT";
- }
- }
- else if(ssl_ver == SSL3_VERSION_MAJOR) {
- switch (msg) {
- case SSL3_MT_HELLO_REQUEST:
- return "Hello request";
- case SSL3_MT_CLIENT_HELLO:
- return "Client hello";
- case SSL3_MT_SERVER_HELLO:
- return "Server hello";
- case SSL3_MT_CERTIFICATE:
- return "CERT";
- case SSL3_MT_SERVER_KEY_EXCHANGE:
- return "Server key exchange";
- case SSL3_MT_CLIENT_KEY_EXCHANGE:
- return "Client key exchange";
- case SSL3_MT_CERTIFICATE_REQUEST:
- return "Request CERT";
- case SSL3_MT_SERVER_DONE:
- return "Server finished";
- case SSL3_MT_CERTIFICATE_VERIFY:
- return "CERT verify";
- case SSL3_MT_FINISHED:
- return "Finished";
- }
- }
- return "Unknown";
-}
-
-static const char *tls_rt_type(int type)
-{
- return (
- type == SSL3_RT_CHANGE_CIPHER_SPEC ? "TLS change cipher, " :
- type == SSL3_RT_ALERT ? "TLS alert, " :
- type == SSL3_RT_HANDSHAKE ? "TLS handshake, " :
- type == SSL3_RT_APPLICATION_DATA ? "TLS app data, " :
- "TLS Unknown, ");
-}
-
-
-/*
- * Our callback from the SSL/TLS layers.
- */
-static void ssl_tls_trace(int direction, int ssl_ver, int content_type,
- const void *buf, size_t len, const SSL *ssl,
- struct connectdata *conn)
-{
- struct SessionHandle *data;
- const char *msg_name, *tls_rt_name;
- char ssl_buf[1024];
- int ver, msg_type, txt_len;
-
- if(!conn || !conn->data || !conn->data->set.fdebug ||
- (direction != 0 && direction != 1))
- return;
-
- data = conn->data;
- ssl_ver >>= 8;
- ver = (ssl_ver == SSL2_VERSION_MAJOR ? '2' :
- ssl_ver == SSL3_VERSION_MAJOR ? '3' : '?');
-
- /* SSLv2 doesn't seem to have TLS record-type headers, so OpenSSL
- * always pass-up content-type as 0. But the interesting message-type
- * is at 'buf[0]'.
- */
- if(ssl_ver == SSL3_VERSION_MAJOR && content_type != 0)
- tls_rt_name = tls_rt_type(content_type);
- else
- tls_rt_name = "";
-
- msg_type = *(char*)buf;
- msg_name = ssl_msg_type(ssl_ver, msg_type);
-
- txt_len = snprintf(ssl_buf, sizeof(ssl_buf), "SSLv%c, %s%s (%d):\n",
- ver, tls_rt_name, msg_name, msg_type);
- Curl_debug(data, CURLINFO_TEXT, ssl_buf, (size_t)txt_len, NULL);
-
- Curl_debug(data, (direction == 1) ? CURLINFO_SSL_DATA_OUT :
- CURLINFO_SSL_DATA_IN, (char *)buf, len, NULL);
- (void) ssl;
-}
-#endif
-
-#ifdef USE_SSLEAY
-/* ====================================================== */
-
-#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
-# define use_sni(x) sni = (x)
-#else
-# define use_sni(x) Curl_nop_stmt
-#endif
-
-#ifdef USE_NGHTTP2
-
-#undef HAS_ALPN
-#if defined(HAVE_SSL_CTX_SET_ALPN_PROTOS) && \
- defined(HAVE_SSL_CTX_SET_ALPN_SELECT_CB)
-# define HAS_ALPN 1
-#endif
-
-#if !defined(HAVE_SSL_CTX_SET_NEXT_PROTO_SELECT_CB) || \
- defined(OPENSSL_NO_NEXTPROTONEG)
-# if !defined(HAS_ALPN)
-# error http2 builds require OpenSSL with NPN or ALPN support
-# endif
-#endif
-
-
-/*
- * in is a list of lenght prefixed strings. this function has to select
- * the protocol we want to use from the list and write its string into out.
- */
-static int
-select_next_proto_cb(SSL *ssl,
- unsigned char **out, unsigned char *outlen,
- const unsigned char *in, unsigned int inlen,
- void *arg)
-{
- struct connectdata *conn = (struct connectdata*) arg;
- int retval = nghttp2_select_next_protocol(out, outlen, in, inlen);
- (void)ssl;
-
- if(retval == 1) {
- infof(conn->data, "NPN, negotiated HTTP2 (%s)\n",
- NGHTTP2_PROTO_VERSION_ID);
- conn->negnpn = NPN_HTTP2;
- }
- else if(retval == 0) {
- infof(conn->data, "NPN, negotiated HTTP1.1\n");
- conn->negnpn = NPN_HTTP1_1;
- }
- else {
- infof(conn->data, "NPN, no overlap, use HTTP1.1\n",
- NGHTTP2_PROTO_VERSION_ID);
- *out = (unsigned char*)"http/1.1";
- *outlen = sizeof("http/1.1") - 1;
- conn->negnpn = NPN_HTTP1_1;
- }
-
- return SSL_TLSEXT_ERR_OK;
-}
-#endif
-
-static const char *
-get_ssl_version_txt(SSL_SESSION *session)
-{
- if(NULL == session)
- return "";
-
- switch(session->ssl_version) {
-#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- case TLS1_2_VERSION:
- return "TLSv1.2";
- case TLS1_1_VERSION:
- return "TLSv1.1";
-#endif
- case TLS1_VERSION:
- return "TLSv1.0";
- case SSL3_VERSION:
- return "SSLv3";
- case SSL2_VERSION:
- return "SSLv2";
- }
- return "unknown";
-}
-
-
-static CURLcode
-ossl_connect_step1(struct connectdata *conn,
- int sockindex)
-{
- CURLcode retcode = CURLE_OK;
- char *ciphers;
- struct SessionHandle *data = conn->data;
- SSL_METHOD_QUAL SSL_METHOD *req_method=NULL;
- void *ssl_sessionid=NULL;
- X509_LOOKUP *lookup=NULL;
- curl_socket_t sockfd = conn->sock[sockindex];
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- long ctx_options;
-#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
- bool sni;
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif
-#endif
-#ifdef HAS_ALPN
- unsigned char protocols[128];
-#endif
-
- DEBUGASSERT(ssl_connect_1 == connssl->connecting_state);
-
- /* Make funny stuff to get random input */
- Curl_ossl_seed(data);
-
- data->set.ssl.certverifyresult = !X509_V_OK;
-
- /* check to see if we've been told to use an explicit SSL/TLS version */
-
- switch(data->set.ssl.version) {
- default:
- case CURL_SSLVERSION_DEFAULT:
- case CURL_SSLVERSION_TLSv1:
- case CURL_SSLVERSION_TLSv1_0:
- case CURL_SSLVERSION_TLSv1_1:
- case CURL_SSLVERSION_TLSv1_2:
- /* it will be handled later with the context options */
- req_method = SSLv23_client_method();
- use_sni(TRUE);
- break;
- case CURL_SSLVERSION_SSLv2:
-#ifdef OPENSSL_NO_SSL2
- failf(data, "OpenSSL was built without SSLv2 support");
- return CURLE_NOT_BUILT_IN;
-#else
-#ifdef USE_TLS_SRP
- if(data->set.ssl.authtype == CURL_TLSAUTH_SRP)
- return CURLE_SSL_CONNECT_ERROR;
-#endif
- req_method = SSLv2_client_method();
- use_sni(FALSE);
- break;
-#endif
- case CURL_SSLVERSION_SSLv3:
-#ifdef USE_TLS_SRP
- if(data->set.ssl.authtype == CURL_TLSAUTH_SRP)
- return CURLE_SSL_CONNECT_ERROR;
-#endif
- req_method = SSLv3_client_method();
- use_sni(FALSE);
- break;
- }
-
- if(connssl->ctx)
- SSL_CTX_free(connssl->ctx);
- connssl->ctx = SSL_CTX_new(req_method);
-
- if(!connssl->ctx) {
- failf(data, "SSL: couldn't create a context: %s",
- ERR_error_string(ERR_peek_error(), NULL));
- return CURLE_OUT_OF_MEMORY;
- }
-
-#ifdef SSL_MODE_RELEASE_BUFFERS
- SSL_CTX_set_mode(connssl->ctx, SSL_MODE_RELEASE_BUFFERS);
-#endif
-
-#ifdef SSL_CTRL_SET_MSG_CALLBACK
- if(data->set.fdebug && data->set.verbose) {
- /* the SSL trace callback is only used for verbose logging so we only
- inform about failures of setting it */
- if(!SSL_CTX_callback_ctrl(connssl->ctx, SSL_CTRL_SET_MSG_CALLBACK,
- (void (*)(void))ssl_tls_trace)) {
- infof(data, "SSL: couldn't set callback!\n");
- }
- else if(!SSL_CTX_ctrl(connssl->ctx, SSL_CTRL_SET_MSG_CALLBACK_ARG, 0,
- conn)) {
- infof(data, "SSL: couldn't set callback argument!\n");
- }
- }
-#endif
-
- /* OpenSSL contains code to work-around lots of bugs and flaws in various
- SSL-implementations. SSL_CTX_set_options() is used to enabled those
- work-arounds. The man page for this option states that SSL_OP_ALL enables
- all the work-arounds and that "It is usually safe to use SSL_OP_ALL to
- enable the bug workaround options if compatibility with somewhat broken
- implementations is desired."
-
- The "-no_ticket" option was introduced in Openssl0.9.8j. It's a flag to
- disable "rfc4507bis session ticket support". rfc4507bis was later turned
- into the proper RFC5077 it seems: http://tools.ietf.org/html/rfc5077
-
- The enabled extension concerns the session management. I wonder how often
- libcurl stops a connection and then resumes a TLS session. also, sending
- the session data is some overhead. .I suggest that you just use your
- proposed patch (which explicitly disables TICKET).
-
- If someone writes an application with libcurl and openssl who wants to
- enable the feature, one can do this in the SSL callback.
-
- SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG option enabling allowed proper
- interoperability with web server Netscape Enterprise Server 2.0.1 which
- was released back in 1996.
-
- Due to CVE-2010-4180, option SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG has
- become ineffective as of OpenSSL 0.9.8q and 1.0.0c. In order to mitigate
- CVE-2010-4180 when using previous OpenSSL versions we no longer enable
- this option regardless of OpenSSL version and SSL_OP_ALL definition.
-
- OpenSSL added a work-around for a SSL 3.0/TLS 1.0 CBC vulnerability
- (http://www.openssl.org/~bodo/tls-cbc.txt). In 0.9.6e they added a bit to
- SSL_OP_ALL that _disables_ that work-around despite the fact that
- SSL_OP_ALL is documented to do "rather harmless" workarounds. In order to
- keep the secure work-around, the SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS bit
- must not be set.
- */
-
- ctx_options = SSL_OP_ALL;
-
-#ifdef SSL_OP_NO_TICKET
- ctx_options |= SSL_OP_NO_TICKET;
-#endif
-
-#ifdef SSL_OP_NO_COMPRESSION
- ctx_options |= SSL_OP_NO_COMPRESSION;
-#endif
-
-#ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
- /* mitigate CVE-2010-4180 */
- ctx_options &= ~SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG;
-#endif
-
-#ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS
- /* unless the user explicitly ask to allow the protocol vulnerability we
- use the work-around */
- if(!conn->data->set.ssl_enable_beast)
- ctx_options &= ~SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS;
-#endif
-
- switch(data->set.ssl.version) {
- case CURL_SSLVERSION_DEFAULT:
- ctx_options |= SSL_OP_NO_SSLv2;
-#ifdef USE_TLS_SRP
- if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
- infof(data, "Set version TLSv1.x for SRP authorisation\n");
- ctx_options |= SSL_OP_NO_SSLv3;
- }
-#endif
- break;
-
- case CURL_SSLVERSION_SSLv3:
- ctx_options |= SSL_OP_NO_SSLv2;
- ctx_options |= SSL_OP_NO_TLSv1;
-#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- ctx_options |= SSL_OP_NO_TLSv1_1;
- ctx_options |= SSL_OP_NO_TLSv1_2;
-#endif
- break;
-
- case CURL_SSLVERSION_TLSv1:
- ctx_options |= SSL_OP_NO_SSLv2;
- ctx_options |= SSL_OP_NO_SSLv3;
- break;
-
- case CURL_SSLVERSION_TLSv1_0:
- ctx_options |= SSL_OP_NO_SSLv2;
- ctx_options |= SSL_OP_NO_SSLv3;
-#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- ctx_options |= SSL_OP_NO_TLSv1_1;
- ctx_options |= SSL_OP_NO_TLSv1_2;
-#endif
- break;
-
-#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- case CURL_SSLVERSION_TLSv1_1:
- ctx_options |= SSL_OP_NO_SSLv2;
- ctx_options |= SSL_OP_NO_SSLv3;
- ctx_options |= SSL_OP_NO_TLSv1;
- ctx_options |= SSL_OP_NO_TLSv1_2;
- break;
-
- case CURL_SSLVERSION_TLSv1_2:
- ctx_options |= SSL_OP_NO_SSLv2;
- ctx_options |= SSL_OP_NO_SSLv3;
- ctx_options |= SSL_OP_NO_TLSv1;
- ctx_options |= SSL_OP_NO_TLSv1_1;
- break;
-#endif
-
-#ifndef OPENSSL_NO_SSL2
- case CURL_SSLVERSION_SSLv2:
- ctx_options |= SSL_OP_NO_SSLv3;
- ctx_options |= SSL_OP_NO_TLSv1;
-#if OPENSSL_VERSION_NUMBER >= 0x1000100FL
- ctx_options |= SSL_OP_NO_TLSv1_1;
- ctx_options |= SSL_OP_NO_TLSv1_2;
-#endif
- break;
-#endif
-
- default:
- failf(data, "Unsupported SSL protocol version");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- SSL_CTX_set_options(connssl->ctx, ctx_options);
-
-#ifdef USE_NGHTTP2
- if(data->set.httpversion == CURL_HTTP_VERSION_2_0) {
- if(data->set.ssl_enable_npn) {
- SSL_CTX_set_next_proto_select_cb(connssl->ctx, select_next_proto_cb,
- conn);
- }
-
-#ifdef HAS_ALPN
- if(data->set.ssl_enable_alpn) {
- protocols[0] = NGHTTP2_PROTO_VERSION_ID_LEN;
- memcpy(&protocols[1], NGHTTP2_PROTO_VERSION_ID,
- NGHTTP2_PROTO_VERSION_ID_LEN);
-
- protocols[NGHTTP2_PROTO_VERSION_ID_LEN+1] = ALPN_HTTP_1_1_LENGTH;
- memcpy(&protocols[NGHTTP2_PROTO_VERSION_ID_LEN+2], ALPN_HTTP_1_1,
- ALPN_HTTP_1_1_LENGTH);
-
- /* expects length prefixed preference ordered list of protocols in wire
- * format
- */
- SSL_CTX_set_alpn_protos(connssl->ctx, protocols,
- NGHTTP2_PROTO_VERSION_ID_LEN + ALPN_HTTP_1_1_LENGTH + 2);
-
- infof(data, "ALPN, offering %s, %s\n", NGHTTP2_PROTO_VERSION_ID,
- ALPN_HTTP_1_1);
- }
-#endif
- }
-#endif
-
- if(data->set.str[STRING_CERT] || data->set.str[STRING_CERT_TYPE]) {
- if(!cert_stuff(conn,
- connssl->ctx,
- data->set.str[STRING_CERT],
- data->set.str[STRING_CERT_TYPE],
- data->set.str[STRING_KEY],
- data->set.str[STRING_KEY_TYPE])) {
- /* failf() is already done in cert_stuff() */
- return CURLE_SSL_CERTPROBLEM;
- }
- }
-
- ciphers = data->set.str[STRING_SSL_CIPHER_LIST];
- if(!ciphers)
- ciphers = (char *)DEFAULT_CIPHER_SELECTION;
- if(!SSL_CTX_set_cipher_list(connssl->ctx, ciphers)) {
- failf(data, "failed setting cipher list: %s", ciphers);
- return CURLE_SSL_CIPHER;
- }
-
-#ifdef USE_TLS_SRP
- if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
- infof(data, "Using TLS-SRP username: %s\n", data->set.ssl.username);
-
- if(!SSL_CTX_set_srp_username(connssl->ctx, data->set.ssl.username)) {
- failf(data, "Unable to set SRP user name");
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- if(!SSL_CTX_set_srp_password(connssl->ctx,data->set.ssl.password)) {
- failf(data, "failed setting SRP password");
- return CURLE_BAD_FUNCTION_ARGUMENT;
- }
- if(!data->set.str[STRING_SSL_CIPHER_LIST]) {
- infof(data, "Setting cipher list SRP\n");
-
- if(!SSL_CTX_set_cipher_list(connssl->ctx, "SRP")) {
- failf(data, "failed setting SRP cipher list");
- return CURLE_SSL_CIPHER;
- }
- }
- }
-#endif
- if(data->set.str[STRING_SSL_CAFILE] || data->set.str[STRING_SSL_CAPATH]) {
- /* tell SSL where to find CA certificates that are used to verify
- the servers certificate. */
- if(!SSL_CTX_load_verify_locations(connssl->ctx,
- data->set.str[STRING_SSL_CAFILE],
- data->set.str[STRING_SSL_CAPATH])) {
- if(data->set.ssl.verifypeer) {
- /* Fail if we insist on successfully verifying the server. */
- failf(data,"error setting certificate verify locations:\n"
- " CAfile: %s\n CApath: %s",
- data->set.str[STRING_SSL_CAFILE]?
- data->set.str[STRING_SSL_CAFILE]: "none",
- data->set.str[STRING_SSL_CAPATH]?
- data->set.str[STRING_SSL_CAPATH] : "none");
- return CURLE_SSL_CACERT_BADFILE;
- }
- else {
- /* Just continue with a warning if no strict certificate verification
- is required. */
- infof(data, "error setting certificate verify locations,"
- " continuing anyway:\n");
- }
- }
- else {
- /* Everything is fine. */
- infof(data, "successfully set certificate verify locations:\n");
- }
- infof(data,
- " CAfile: %s\n"
- " CApath: %s\n",
- data->set.str[STRING_SSL_CAFILE] ? data->set.str[STRING_SSL_CAFILE]:
- "none",
- data->set.str[STRING_SSL_CAPATH] ? data->set.str[STRING_SSL_CAPATH]:
- "none");
- }
-
- if(data->set.str[STRING_SSL_CRLFILE]) {
- /* tell SSL where to find CRL file that is used to check certificate
- * revocation */
- lookup=X509_STORE_add_lookup(SSL_CTX_get_cert_store(connssl->ctx),
- X509_LOOKUP_file());
- if(!lookup ||
- (!X509_load_crl_file(lookup,data->set.str[STRING_SSL_CRLFILE],
- X509_FILETYPE_PEM)) ) {
- failf(data,"error loading CRL file: %s",
- data->set.str[STRING_SSL_CRLFILE]);
- return CURLE_SSL_CRL_BADFILE;
- }
- else {
- /* Everything is fine. */
- infof(data, "successfully load CRL file:\n");
- X509_STORE_set_flags(SSL_CTX_get_cert_store(connssl->ctx),
- X509_V_FLAG_CRL_CHECK|X509_V_FLAG_CRL_CHECK_ALL);
- }
- infof(data,
- " CRLfile: %s\n", data->set.str[STRING_SSL_CRLFILE] ?
- data->set.str[STRING_SSL_CRLFILE]: "none");
- }
-
- /* SSL always tries to verify the peer, this only says whether it should
- * fail to connect if the verification fails, or if it should continue
- * anyway. In the latter case the result of the verification is checked with
- * SSL_get_verify_result() below. */
- SSL_CTX_set_verify(connssl->ctx,
- data->set.ssl.verifypeer?SSL_VERIFY_PEER:SSL_VERIFY_NONE,
- cert_verify_callback);
-
- /* give application a chance to interfere with SSL set up. */
- if(data->set.ssl.fsslctx) {
- retcode = (*data->set.ssl.fsslctx)(data, connssl->ctx,
- data->set.ssl.fsslctxp);
- if(retcode) {
- failf(data,"error signaled by ssl ctx callback");
- return retcode;
- }
- }
-
- /* Lets make an SSL structure */
- if(connssl->handle)
- SSL_free(connssl->handle);
- connssl->handle = SSL_new(connssl->ctx);
- if(!connssl->handle) {
- failf(data, "SSL: couldn't create a context (handle)!");
- return CURLE_OUT_OF_MEMORY;
- }
- SSL_set_connect_state(connssl->handle);
-
- connssl->server_cert = 0x0;
-
-#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
- if((0 == Curl_inet_pton(AF_INET, conn->host.name, &addr)) &&
-#ifdef ENABLE_IPV6
- (0 == Curl_inet_pton(AF_INET6, conn->host.name, &addr)) &&
-#endif
- sni &&
- !SSL_set_tlsext_host_name(connssl->handle, conn->host.name))
- infof(data, "WARNING: failed to configure server name indication (SNI) "
- "TLS extension\n");
-#endif
-
- /* Check if there's a cached ID we can/should use here! */
- if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL)) {
- /* we got a session id, use it! */
- if(!SSL_set_session(connssl->handle, ssl_sessionid)) {
- failf(data, "SSL: SSL_set_session failed: %s",
- ERR_error_string(ERR_get_error(),NULL));
- return CURLE_SSL_CONNECT_ERROR;
- }
- /* Informational message */
- infof (data, "SSL re-using session ID\n");
- }
-
- /* pass the raw socket into the SSL layers */
- if(!SSL_set_fd(connssl->handle, (int)sockfd)) {
- failf(data, "SSL: SSL_set_fd failed: %s",
- ERR_error_string(ERR_get_error(),NULL));
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- connssl->connecting_state = ssl_connect_2;
- return CURLE_OK;
-}
-
-static CURLcode
-ossl_connect_step2(struct connectdata *conn, int sockindex)
-{
- struct SessionHandle *data = conn->data;
- int err;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- DEBUGASSERT(ssl_connect_2 == connssl->connecting_state
- || ssl_connect_2_reading == connssl->connecting_state
- || ssl_connect_2_writing == connssl->connecting_state);
-
- ERR_clear_error();
-
- err = SSL_connect(connssl->handle);
-
- /* 1 is fine
- 0 is "not successful but was shut down controlled"
- <0 is "handshake was not successful, because a fatal error occurred" */
- if(1 != err) {
- int detail = SSL_get_error(connssl->handle, err);
-
- if(SSL_ERROR_WANT_READ == detail) {
- connssl->connecting_state = ssl_connect_2_reading;
- return CURLE_OK;
- }
- else if(SSL_ERROR_WANT_WRITE == detail) {
- connssl->connecting_state = ssl_connect_2_writing;
- return CURLE_OK;
- }
- else {
- /* untreated error */
- unsigned long errdetail;
- char error_buffer[256]; /* OpenSSL documents that this must be at least
- 256 bytes long. */
- CURLcode rc;
- const char *cert_problem = NULL;
- long lerr;
-
- connssl->connecting_state = ssl_connect_2; /* the connection failed,
- we're not waiting for
- anything else. */
-
- errdetail = ERR_get_error(); /* Gets the earliest error code from the
- thread's error queue and removes the
- entry. */
-
- switch(errdetail) {
- case 0x1407E086:
- /* 1407E086:
- SSL routines:
- SSL2_SET_CERTIFICATE:
- certificate verify failed */
- /* fall-through */
- case 0x14090086:
- /* 14090086:
- SSL routines:
- SSL3_GET_SERVER_CERTIFICATE:
- certificate verify failed */
- rc = CURLE_SSL_CACERT;
-
- lerr = SSL_get_verify_result(connssl->handle);
- if(lerr != X509_V_OK) {
- snprintf(error_buffer, sizeof(error_buffer),
- "SSL certificate problem: %s",
- X509_verify_cert_error_string(lerr));
- }
- else
- cert_problem = "SSL certificate problem, verify that the CA cert is"
- " OK.";
-
- break;
- default:
- rc = CURLE_SSL_CONNECT_ERROR;
- SSL_strerror(errdetail, error_buffer, sizeof(error_buffer));
- break;
- }
-
- /* detail is already set to the SSL error above */
-
- /* If we e.g. use SSLv2 request-method and the server doesn't like us
- * (RST connection etc.), OpenSSL gives no explanation whatsoever and
- * the SO_ERROR is also lost.
- */
- if(CURLE_SSL_CONNECT_ERROR == rc && errdetail == 0) {
- failf(data, "Unknown SSL protocol error in connection to %s:%ld ",
- conn->host.name, conn->remote_port);
- return rc;
- }
- /* Could be a CERT problem */
-
- failf(data, "%s%s", cert_problem ? cert_problem : "", error_buffer);
- return rc;
- }
- }
- else {
- /* we have been connected fine, we're not waiting for anything else. */
- connssl->connecting_state = ssl_connect_3;
-
- /* Informational message */
- infof (data, "SSL connection using %s / %s\n",
- get_ssl_version_txt(SSL_get_session(connssl->handle)),
- SSL_get_cipher(connssl->handle));
-
-#ifdef HAS_ALPN
- /* Sets data and len to negotiated protocol, len is 0 if no protocol was
- * negotiated
- */
- if(data->set.ssl_enable_alpn) {
- const unsigned char* neg_protocol;
- unsigned int len;
- SSL_get0_alpn_selected(connssl->handle, &neg_protocol, &len);
- if(len != 0) {
- infof(data, "ALPN, server accepted to use %.*s\n", len, neg_protocol);
-
- if(len == NGHTTP2_PROTO_VERSION_ID_LEN &&
- memcmp(NGHTTP2_PROTO_VERSION_ID, neg_protocol, len) == 0) {
- conn->negnpn = NPN_HTTP2;
- }
- else if(len == ALPN_HTTP_1_1_LENGTH && memcmp(ALPN_HTTP_1_1,
- neg_protocol, ALPN_HTTP_1_1_LENGTH) == 0) {
- conn->negnpn = NPN_HTTP1_1;
- }
- }
- else {
- infof(data, "ALPN, server did not agree to a protocol\n");
- }
- }
-#endif
-
- return CURLE_OK;
- }
-}
-
-static int asn1_object_dump(ASN1_OBJECT *a, char *buf, size_t len)
-{
- int i, ilen;
-
- if((ilen = (int)len) < 0)
- return 1; /* buffer too big */
-
- i = i2t_ASN1_OBJECT(buf, ilen, a);
-
- if(i >= ilen)
- return 1; /* buffer too small */
-
- return 0;
-}
-
-static void pubkey_show(struct SessionHandle *data,
- int num,
- const char *type,
- const char *name,
- unsigned char *raw,
- int len)
-{
- size_t left;
- int i;
- char namebuf[32];
- char *buffer;
-
- left = len*3 + 1;
- buffer = malloc(left);
- if(buffer) {
- char *ptr=buffer;
- snprintf(namebuf, sizeof(namebuf), "%s(%s)", type, name);
- for(i=0; i< len; i++) {
- snprintf(ptr, left, "%02x:", raw[i]);
- ptr += 3;
- left -= 3;
- }
- infof(data, " %s: %s\n", namebuf, buffer);
- Curl_ssl_push_certinfo(data, num, namebuf, buffer);
- free(buffer);
- }
-}
-
-#define print_pubkey_BN(_type, _name, _num) \
-do { \
- if(pubkey->pkey._type->_name != NULL) { \
- int len = BN_num_bytes(pubkey->pkey._type->_name); \
- if(len < CERTBUFFERSIZE) { \
- BN_bn2bin(pubkey->pkey._type->_name, (unsigned char*)bufp); \
- bufp[len] = 0; \
- pubkey_show(data, _num, #_type, #_name, (unsigned char*)bufp, len); \
- } \
- } \
-} WHILE_FALSE
-
-static int X509V3_ext(struct SessionHandle *data,
- int certnum,
- STACK_OF(X509_EXTENSION) *exts)
-{
- int i;
- size_t j;
-
- if(sk_X509_EXTENSION_num(exts) <= 0)
- /* no extensions, bail out */
- return 1;
-
- for(i=0; i<sk_X509_EXTENSION_num(exts); i++) {
- ASN1_OBJECT *obj;
- X509_EXTENSION *ext = sk_X509_EXTENSION_value(exts, i);
- BUF_MEM *biomem;
- char buf[512];
- char *ptr=buf;
- char namebuf[128];
- BIO *bio_out = BIO_new(BIO_s_mem());
-
- if(!bio_out)
- return 1;
-
- obj = X509_EXTENSION_get_object(ext);
-
- asn1_object_dump(obj, namebuf, sizeof(namebuf));
-
- infof(data, "%s: %s\n", namebuf,
- X509_EXTENSION_get_critical(ext)?"(critical)":"");
-
- if(!X509V3_EXT_print(bio_out, ext, 0, 0))
- M_ASN1_OCTET_STRING_print(bio_out, ext->value);
-
- BIO_get_mem_ptr(bio_out, &biomem);
-
- /* biomem->length bytes at biomem->data, this little loop here is only
- done for the infof() call, we send the "raw" data to the certinfo
- function */
- for(j=0; j<(size_t)biomem->length; j++) {
- const char *sep="";
- if(biomem->data[j] == '\n') {
- sep=", ";
- j++; /* skip the newline */
- };
- while((j<(size_t)biomem->length) && (biomem->data[j] == ' '))
- j++;
- if(j<(size_t)biomem->length)
- ptr+=snprintf(ptr, sizeof(buf)-(ptr-buf), "%s%c", sep,
- biomem->data[j]);
- }
- infof(data, " %s\n", buf);
-
- Curl_ssl_push_certinfo(data, certnum, namebuf, buf);
-
- BIO_free(bio_out);
-
- }
- return 0; /* all is fine */
-}
-
-
-static void X509_signature(struct SessionHandle *data,
- int numcert,
- ASN1_STRING *sig)
-{
- char buf[1024];
- char *ptr = buf;
- int i;
- for(i=0; i<sig->length; i++)
- ptr+=snprintf(ptr, sizeof(buf)-(ptr-buf), "%02x:", sig->data[i]);
-
- infof(data, " Signature: %s\n", buf);
- Curl_ssl_push_certinfo(data, numcert, "Signature", buf);
-}
-
-static void dumpcert(struct SessionHandle *data, X509 *x, int numcert)
-{
- BIO *bio_out = BIO_new(BIO_s_mem());
- BUF_MEM *biomem;
-
- /* this outputs the cert in this 64 column wide style with newlines and
- -----BEGIN CERTIFICATE----- texts and more */
- PEM_write_bio_X509(bio_out, x);
-
- BIO_get_mem_ptr(bio_out, &biomem);
-
- Curl_ssl_push_certinfo_len(data, numcert,
- "Cert", biomem->data, biomem->length);
-
- BIO_free(bio_out);
-
-}
-
-/*
- * This size was previously 512 which has been reported "too small" without
- * any specifics, so it was enlarged to allow more data to get shown uncut.
- * The "perfect" size is yet to figure out.
- */
-#define CERTBUFFERSIZE 8192
-
-static CURLcode get_cert_chain(struct connectdata *conn,
- struct ssl_connect_data *connssl)
-
-{
- STACK_OF(X509) *sk;
- int i;
- char *bufp;
- struct SessionHandle *data = conn->data;
- int numcerts;
-
- bufp = malloc(CERTBUFFERSIZE);
- if(!bufp)
- return CURLE_OUT_OF_MEMORY;
-
- sk = SSL_get_peer_cert_chain(connssl->handle);
- if(!sk) {
- free(bufp);
- return CURLE_OUT_OF_MEMORY;
- }
-
- numcerts = sk_X509_num(sk);
- if(Curl_ssl_init_certinfo(data, numcerts)) {
- free(bufp);
- return CURLE_OUT_OF_MEMORY;
- }
-
- infof(data, "--- Certificate chain\n");
- for(i=0; i<numcerts; i++) {
- long value;
- ASN1_INTEGER *num;
- ASN1_TIME *certdate;
-
- /* get the certs in "importance order" */
-#if 0
- X509 *x = sk_X509_value(sk, numcerts - i - 1);
-#else
- X509 *x = sk_X509_value(sk, i);
-#endif
-
- X509_CINF *cinf;
- EVP_PKEY *pubkey=NULL;
- int j;
- char *ptr;
-
- (void)x509_name_oneline(X509_get_subject_name(x), bufp, CERTBUFFERSIZE);
- infof(data, "%2d Subject: %s\n", i, bufp);
- Curl_ssl_push_certinfo(data, i, "Subject", bufp);
-
- (void)x509_name_oneline(X509_get_issuer_name(x), bufp, CERTBUFFERSIZE);
- infof(data, " Issuer: %s\n", bufp);
- Curl_ssl_push_certinfo(data, i, "Issuer", bufp);
-
- value = X509_get_version(x);
- infof(data, " Version: %lu (0x%lx)\n", value+1, value);
- snprintf(bufp, CERTBUFFERSIZE, "%lx", value);
- Curl_ssl_push_certinfo(data, i, "Version", bufp); /* hex */
-
- num=X509_get_serialNumber(x);
- if(num->length <= 4) {
- value = ASN1_INTEGER_get(num);
- infof(data," Serial Number: %ld (0x%lx)\n", value, value);
- snprintf(bufp, CERTBUFFERSIZE, "%lx", value);
- }
- else {
- int left = CERTBUFFERSIZE;
-
- ptr = bufp;
- *ptr++ = 0;
- if(num->type == V_ASN1_NEG_INTEGER)
- *ptr++='-';
-
- for(j=0; (j<num->length) && (left>=4); j++) {
- /* TODO: length restrictions */
- snprintf(ptr, 3, "%02x%c",num->data[j],
- ((j+1 == num->length)?'\n':':'));
- ptr += 3;
- left-=4;
- }
- if(num->length)
- infof(data," Serial Number: %s\n", bufp);
- else
- bufp[0]=0;
- }
- if(bufp[0])
- Curl_ssl_push_certinfo(data, i, "Serial Number", bufp); /* hex */
-
- cinf = x->cert_info;
-
- j = asn1_object_dump(cinf->signature->algorithm, bufp, CERTBUFFERSIZE);
- if(!j) {
- infof(data, " Signature Algorithm: %s\n", bufp);
- Curl_ssl_push_certinfo(data, i, "Signature Algorithm", bufp);
- }
-
- certdate = X509_get_notBefore(x);
- asn1_output(certdate, bufp, CERTBUFFERSIZE);
- infof(data, " Start date: %s\n", bufp);
- Curl_ssl_push_certinfo(data, i, "Start date", bufp);
-
- certdate = X509_get_notAfter(x);
- asn1_output(certdate, bufp, CERTBUFFERSIZE);
- infof(data, " Expire date: %s\n", bufp);
- Curl_ssl_push_certinfo(data, i, "Expire date", bufp);
-
- j = asn1_object_dump(cinf->key->algor->algorithm, bufp, CERTBUFFERSIZE);
- if(!j) {
- infof(data, " Public Key Algorithm: %s\n", bufp);
- Curl_ssl_push_certinfo(data, i, "Public Key Algorithm", bufp);
- }
-
- pubkey = X509_get_pubkey(x);
- if(!pubkey)
- infof(data, " Unable to load public key\n");
- else {
- switch(pubkey->type) {
- case EVP_PKEY_RSA:
- infof(data, " RSA Public Key (%d bits)\n",
- BN_num_bits(pubkey->pkey.rsa->n));
- snprintf(bufp, CERTBUFFERSIZE, "%d", BN_num_bits(pubkey->pkey.rsa->n));
- Curl_ssl_push_certinfo(data, i, "RSA Public Key", bufp);
-
- print_pubkey_BN(rsa, n, i);
- print_pubkey_BN(rsa, e, i);
- print_pubkey_BN(rsa, d, i);
- print_pubkey_BN(rsa, p, i);
- print_pubkey_BN(rsa, q, i);
- print_pubkey_BN(rsa, dmp1, i);
- print_pubkey_BN(rsa, dmq1, i);
- print_pubkey_BN(rsa, iqmp, i);
- break;
- case EVP_PKEY_DSA:
- print_pubkey_BN(dsa, p, i);
- print_pubkey_BN(dsa, q, i);
- print_pubkey_BN(dsa, g, i);
- print_pubkey_BN(dsa, priv_key, i);
- print_pubkey_BN(dsa, pub_key, i);
- break;
- case EVP_PKEY_DH:
- print_pubkey_BN(dh, p, i);
- print_pubkey_BN(dh, g, i);
- print_pubkey_BN(dh, priv_key, i);
- print_pubkey_BN(dh, pub_key, i);
- break;
-#if 0
- case EVP_PKEY_EC: /* symbol not present in OpenSSL 0.9.6 */
- /* left TODO */
- break;
-#endif
- }
- EVP_PKEY_free(pubkey);
- }
-
- X509V3_ext(data, i, cinf->extensions);
-
- X509_signature(data, i, x->signature);
-
- dumpcert(data, x, i);
- }
-
- free(bufp);
-
- return CURLE_OK;
-}
-
-/*
- * Get the server cert, verify it and show it etc, only call failf() if the
- * 'strict' argument is TRUE as otherwise all this is for informational
- * purposes only!
- *
- * We check certificates to authenticate the server; otherwise we risk
- * man-in-the-middle attack.
- */
-static CURLcode servercert(struct connectdata *conn,
- struct ssl_connect_data *connssl,
- bool strict)
-{
- CURLcode retcode = CURLE_OK;
- int rc;
- long lerr;
- ASN1_TIME *certdate;
- struct SessionHandle *data = conn->data;
- X509 *issuer;
- FILE *fp;
- char *buffer = data->state.buffer;
-
- if(data->set.ssl.certinfo)
- /* we've been asked to gather certificate info! */
- (void)get_cert_chain(conn, connssl);
-
- connssl->server_cert = SSL_get_peer_certificate(connssl->handle);
- if(!connssl->server_cert) {
- if(strict)
- failf(data, "SSL: couldn't get peer certificate!");
- return CURLE_PEER_FAILED_VERIFICATION;
- }
- infof (data, "Server certificate:\n");
-
- rc = x509_name_oneline(X509_get_subject_name(connssl->server_cert),
- buffer, BUFSIZE);
- infof(data, "\t subject: %s\n", rc?"[NONE]":buffer);
-
- certdate = X509_get_notBefore(connssl->server_cert);
- asn1_output(certdate, buffer, BUFSIZE);
- infof(data, "\t start date: %s\n", buffer);
-
- certdate = X509_get_notAfter(connssl->server_cert);
- asn1_output(certdate, buffer, BUFSIZE);
- infof(data, "\t expire date: %s\n", buffer);
-
- if(data->set.ssl.verifyhost) {
- retcode = verifyhost(conn, connssl->server_cert);
- if(retcode) {
- X509_free(connssl->server_cert);
- connssl->server_cert = NULL;
- return retcode;
- }
- }
-
- rc = x509_name_oneline(X509_get_issuer_name(connssl->server_cert),
- buffer, BUFSIZE);
- if(rc) {
- if(strict)
- failf(data, "SSL: couldn't get X509-issuer name!");
- retcode = CURLE_SSL_CONNECT_ERROR;
- }
- else {
- infof(data, "\t issuer: %s\n", buffer);
-
- /* We could do all sorts of certificate verification stuff here before
- deallocating the certificate. */
-
- /* e.g. match issuer name with provided issuer certificate */
- if(data->set.str[STRING_SSL_ISSUERCERT]) {
- fp=fopen(data->set.str[STRING_SSL_ISSUERCERT],"r");
- if(!fp) {
- if(strict)
- failf(data, "SSL: Unable to open issuer cert (%s)",
- data->set.str[STRING_SSL_ISSUERCERT]);
- X509_free(connssl->server_cert);
- connssl->server_cert = NULL;
- return CURLE_SSL_ISSUER_ERROR;
- }
- issuer = PEM_read_X509(fp,NULL,ZERO_NULL,NULL);
- if(!issuer) {
- if(strict)
- failf(data, "SSL: Unable to read issuer cert (%s)",
- data->set.str[STRING_SSL_ISSUERCERT]);
- X509_free(connssl->server_cert);
- X509_free(issuer);
- fclose(fp);
- return CURLE_SSL_ISSUER_ERROR;
- }
- fclose(fp);
- if(X509_check_issued(issuer,connssl->server_cert) != X509_V_OK) {
- if(strict)
- failf(data, "SSL: Certificate issuer check failed (%s)",
- data->set.str[STRING_SSL_ISSUERCERT]);
- X509_free(connssl->server_cert);
- X509_free(issuer);
- connssl->server_cert = NULL;
- return CURLE_SSL_ISSUER_ERROR;
- }
- infof(data, "\t SSL certificate issuer check ok (%s)\n",
- data->set.str[STRING_SSL_ISSUERCERT]);
- X509_free(issuer);
- }
-
- lerr = data->set.ssl.certverifyresult=
- SSL_get_verify_result(connssl->handle);
- if(data->set.ssl.certverifyresult != X509_V_OK) {
- if(data->set.ssl.verifypeer) {
- /* We probably never reach this, because SSL_connect() will fail
- and we return earlier if verifypeer is set? */
- if(strict)
- failf(data, "SSL certificate verify result: %s (%ld)",
- X509_verify_cert_error_string(lerr), lerr);
- retcode = CURLE_PEER_FAILED_VERIFICATION;
- }
- else
- infof(data, "\t SSL certificate verify result: %s (%ld),"
- " continuing anyway.\n",
- X509_verify_cert_error_string(lerr), lerr);
- }
- else
- infof(data, "\t SSL certificate verify ok.\n");
- }
-
- X509_free(connssl->server_cert);
- connssl->server_cert = NULL;
- connssl->connecting_state = ssl_connect_done;
-
- return retcode;
-}
-
-
-static CURLcode
-ossl_connect_step3(struct connectdata *conn,
- int sockindex)
-{
- CURLcode retcode = CURLE_OK;
- void *old_ssl_sessionid=NULL;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- int incache;
- SSL_SESSION *our_ssl_sessionid;
-
- DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
-
-#ifdef HAVE_SSL_GET1_SESSION
- our_ssl_sessionid = SSL_get1_session(connssl->handle);
-
- /* SSL_get1_session() will increment the reference
- count and the session will stay in memory until explicitly freed with
- SSL_SESSION_free(3), regardless of its state.
- This function was introduced in openssl 0.9.5a. */
-#else
- our_ssl_sessionid = SSL_get_session(connssl->handle);
-
- /* if SSL_get1_session() is unavailable, use SSL_get_session().
- This is an inferior option because the session can be flushed
- at any time by openssl. It is included only so curl compiles
- under versions of openssl < 0.9.5a.
-
- WARNING: How curl behaves if it's session is flushed is
- untested.
- */
-#endif
-
- incache = !(Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL));
- if(incache) {
- if(old_ssl_sessionid != our_ssl_sessionid) {
- infof(data, "old SSL session ID is stale, removing\n");
- Curl_ssl_delsessionid(conn, old_ssl_sessionid);
- incache = FALSE;
- }
- }
- if(!incache) {
- retcode = Curl_ssl_addsessionid(conn, our_ssl_sessionid,
- 0 /* unknown size */);
- if(retcode) {
- failf(data, "failed to store ssl session");
- return retcode;
- }
- }
-#ifdef HAVE_SSL_GET1_SESSION
- else {
- /* Session was incache, so refcount already incremented earlier.
- * Avoid further increments with each SSL_get1_session() call.
- * This does not free the session as refcount remains > 0
- */
- SSL_SESSION_free(our_ssl_sessionid);
- }
-#endif
-
- /*
- * We check certificates to authenticate the server; otherwise we risk
- * man-in-the-middle attack; NEVERTHELESS, if we're told explicitly not to
- * verify the peer ignore faults and failures from the server cert
- * operations.
- */
-
- if(!data->set.ssl.verifypeer && !data->set.ssl.verifyhost)
- (void)servercert(conn, connssl, FALSE);
- else
- retcode = servercert(conn, connssl, TRUE);
-
- if(CURLE_OK == retcode)
- connssl->connecting_state = ssl_connect_done;
- return retcode;
-}
-
-static Curl_recv ossl_recv;
-static Curl_send ossl_send;
-
-static CURLcode
-ossl_connect_common(struct connectdata *conn,
- int sockindex,
- bool nonblocking,
- bool *done)
-{
- CURLcode retcode;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
- long timeout_ms;
- int what;
-
- /* check if the connection has already been established */
- if(ssl_connection_complete == connssl->state) {
- *done = TRUE;
- return CURLE_OK;
- }
-
- if(ssl_connect_1==connssl->connecting_state) {
- /* Find out how much more time we're allowed */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- retcode = ossl_connect_step1(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- while(ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state) {
-
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- /* if ssl is expecting something, check if it's available. */
- if(connssl->connecting_state == ssl_connect_2_reading
- || connssl->connecting_state == ssl_connect_2_writing) {
-
- curl_socket_t writefd = ssl_connect_2_writing==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
- curl_socket_t readfd = ssl_connect_2_reading==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
-
- what = Curl_socket_ready(readfd, writefd, nonblocking?0:timeout_ms);
- if(what < 0) {
- /* fatal error */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- return CURLE_SSL_CONNECT_ERROR;
- }
- else if(0 == what) {
- if(nonblocking) {
- *done = FALSE;
- return CURLE_OK;
- }
- else {
- /* timeout */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- }
- /* socket is readable or writable */
- }
-
- /* Run transaction, and return to the caller if it failed or if this
- * connection is done nonblocking and this loop would execute again. This
- * permits the owner of a multi handle to abort a connection attempt
- * before step2 has completed while ensuring that a client using select()
- * or epoll() will always have a valid fdset to wait on.
- */
- retcode = ossl_connect_step2(conn, sockindex);
- if(retcode || (nonblocking &&
- (ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state)))
- return retcode;
-
- } /* repeat step2 until all transactions are done. */
-
-
- if(ssl_connect_3==connssl->connecting_state) {
- retcode = ossl_connect_step3(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- if(ssl_connect_done==connssl->connecting_state) {
- connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = ossl_recv;
- conn->send[sockindex] = ossl_send;
- *done = TRUE;
- }
- else
- *done = FALSE;
-
- /* Reset our connect state machine */
- connssl->connecting_state = ssl_connect_1;
-
- return CURLE_OK;
-}
-
-CURLcode
-Curl_ossl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- return ossl_connect_common(conn, sockindex, TRUE, done);
-}
-
-CURLcode
-Curl_ossl_connect(struct connectdata *conn,
- int sockindex)
-{
- CURLcode retcode;
- bool done = FALSE;
-
- retcode = ossl_connect_common(conn, sockindex, FALSE, &done);
- if(retcode)
- return retcode;
-
- DEBUGASSERT(done);
-
- return CURLE_OK;
-}
-
-bool Curl_ossl_data_pending(const struct connectdata *conn,
- int connindex)
-{
- if(conn->ssl[connindex].handle)
- /* SSL is in use */
- return (0 != SSL_pending(conn->ssl[connindex].handle)) ? TRUE : FALSE;
- else
- return FALSE;
-}
-
-static ssize_t ossl_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *curlcode)
-{
- /* SSL_write() is said to return 'int' while write() and send() returns
- 'size_t' */
- int err;
- char error_buffer[120]; /* OpenSSL documents that this must be at least 120
- bytes long. */
- unsigned long sslerror;
- int memlen;
- int rc;
-
- ERR_clear_error();
-
- memlen = (len > (size_t)INT_MAX) ? INT_MAX : (int)len;
- rc = SSL_write(conn->ssl[sockindex].handle, mem, memlen);
-
- if(rc <= 0) {
- err = SSL_get_error(conn->ssl[sockindex].handle, rc);
-
- switch(err) {
- case SSL_ERROR_WANT_READ:
- case SSL_ERROR_WANT_WRITE:
- /* The operation did not complete; the same TLS/SSL I/O function
- should be called again later. This is basically an EWOULDBLOCK
- equivalent. */
- *curlcode = CURLE_AGAIN;
- return -1;
- case SSL_ERROR_SYSCALL:
- failf(conn->data, "SSL_write() returned SYSCALL, errno = %d",
- SOCKERRNO);
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- case SSL_ERROR_SSL:
- /* A failure in the SSL library occurred, usually a protocol error.
- The OpenSSL error queue contains more information on the error. */
- sslerror = ERR_get_error();
- failf(conn->data, "SSL_write() error: %s",
- ERR_error_string(sslerror, error_buffer));
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
- /* a true error */
- failf(conn->data, "SSL_write() return error %d", err);
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
- *curlcode = CURLE_OK;
- return (ssize_t)rc; /* number of bytes */
-}
-
-static ssize_t ossl_recv(struct connectdata *conn, /* connection data */
- int num, /* socketindex */
- char *buf, /* store read data here */
- size_t buffersize, /* max amount to read */
- CURLcode *curlcode)
-{
- char error_buffer[120]; /* OpenSSL documents that this must be at
- least 120 bytes long. */
- unsigned long sslerror;
- ssize_t nread;
- int buffsize;
-
- ERR_clear_error();
-
- buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
- nread = (ssize_t)SSL_read(conn->ssl[num].handle, buf, buffsize);
- if(nread <= 0) {
- /* failed SSL_read */
- int err = SSL_get_error(conn->ssl[num].handle, (int)nread);
-
- switch(err) {
- case SSL_ERROR_NONE: /* this is not an error */
- case SSL_ERROR_ZERO_RETURN: /* no more data */
- break;
- case SSL_ERROR_WANT_READ:
- case SSL_ERROR_WANT_WRITE:
- /* there's data pending, re-invoke SSL_read() */
- *curlcode = CURLE_AGAIN;
- return -1;
- default:
- /* openssl/ssl.h for SSL_ERROR_SYSCALL says "look at error stack/return
- value/errno" */
- /* http://www.openssl.org/docs/crypto/ERR_get_error.html */
- sslerror = ERR_get_error();
- if((nread < 0) || sslerror) {
- /* If the return code was negative or there actually is an error in the
- queue */
- failf(conn->data, "SSL read: %s, errno %d",
- ERR_error_string(sslerror, error_buffer),
- SOCKERRNO);
- *curlcode = CURLE_RECV_ERROR;
- return -1;
- }
- }
- }
- return nread;
-}
-
-size_t Curl_ossl_version(char *buffer, size_t size)
-{
-#ifdef YASSL_VERSION
- /* yassl provides an OpenSSL API compatibility layer so it looks identical
- to OpenSSL in all other aspects */
- return snprintf(buffer, size, "yassl/%s", YASSL_VERSION);
-#else /* YASSL_VERSION */
-
-#if(SSLEAY_VERSION_NUMBER >= 0x905000)
- {
- char sub[3];
- unsigned long ssleay_value;
- sub[2]='\0';
- sub[1]='\0';
- ssleay_value=SSLeay();
- if(ssleay_value < 0x906000) {
- ssleay_value=SSLEAY_VERSION_NUMBER;
- sub[0]='\0';
- }
- else {
- if(ssleay_value&0xff0) {
- int minor_ver = (ssleay_value >> 4) & 0xff;
- if(minor_ver > 26) {
- /* handle extended version introduced for 0.9.8za */
- sub[1] = (char) ((minor_ver - 1) % 26 + 'a' + 1);
- sub[0] = 'z';
- }
- else {
- sub[0]=(char)(((ssleay_value>>4)&0xff) + 'a' -1);
- }
- }
- else
- sub[0]='\0';
- }
-
- return snprintf(buffer, size, "%s/%lx.%lx.%lx%s",
-#ifdef OPENSSL_IS_BORINGSSL
- "BoringSSL"
-#else
-#ifdef LIBRESSL_VERSION_NUMBER
- "LibreSSL"
-#else
- "OpenSSL"
-#endif
-#endif
- , (ssleay_value>>28)&0xf,
- (ssleay_value>>20)&0xff,
- (ssleay_value>>12)&0xff,
- sub);
- }
-
-#else /* SSLEAY_VERSION_NUMBER is less than 0.9.5 */
-
-#if(SSLEAY_VERSION_NUMBER >= 0x900000)
- return snprintf(buffer, size, "OpenSSL/%lx.%lx.%lx",
- (SSLEAY_VERSION_NUMBER>>28)&0xff,
- (SSLEAY_VERSION_NUMBER>>20)&0xff,
- (SSLEAY_VERSION_NUMBER>>12)&0xf);
-
-#else /* (SSLEAY_VERSION_NUMBER >= 0x900000) */
- {
- char sub[2];
- sub[1]='\0';
- if(SSLEAY_VERSION_NUMBER&0x0f) {
- sub[0]=(SSLEAY_VERSION_NUMBER&0x0f) + 'a' -1;
- }
- else
- sub[0]='\0';
-
- return snprintf(buffer, size, "SSL/%x.%x.%x%s",
- (SSLEAY_VERSION_NUMBER>>12)&0xff,
- (SSLEAY_VERSION_NUMBER>>8)&0xf,
- (SSLEAY_VERSION_NUMBER>>4)&0xf, sub);
- }
-#endif /* (SSLEAY_VERSION_NUMBER >= 0x900000) */
-#endif /* SSLEAY_VERSION_NUMBER is less than 0.9.5 */
-
-#endif /* YASSL_VERSION */
-}
-
-/* can be called with data == NULL */
-int Curl_ossl_random(struct SessionHandle *data, unsigned char *entropy,
- size_t length)
-{
- if(data)
- Curl_ossl_seed(data); /* Initiate the seed if not already done */
- RAND_bytes(entropy, curlx_uztosi(length));
- return 0; /* 0 as in no problem */
-}
-
-void Curl_ossl_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum /* output */,
- size_t unused)
-{
- MD5_CTX MD5pw;
- (void)unused;
- MD5_Init(&MD5pw);
- MD5_Update(&MD5pw, tmp, tmplen);
- MD5_Final(md5sum, &MD5pw);
-}
-#endif /* USE_SSLEAY */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/openssl.h b/external/libcurl_android/jni/libcurl/lib/vtls/openssl.h
deleted file mode 100755
index 1a55ffc2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/openssl.h
+++ /dev/null
@@ -1,101 +0,0 @@
-#ifndef HEADER_CURL_SSLUSE_H
-#define HEADER_CURL_SSLUSE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_SSLEAY
-/*
- * This header should only be needed to get included by vtls.c and openssl.c
- */
-
-#include "urldata.h"
-
-CURLcode Curl_ossl_connect(struct connectdata *conn, int sockindex);
-CURLcode Curl_ossl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done);
-
-/* close a SSL connection */
-void Curl_ossl_close(struct connectdata *conn, int sockindex);
-
-/* tell OpenSSL to close down all open information regarding connections (and
- thus session ID caching etc) */
-int Curl_ossl_close_all(struct SessionHandle *data);
-
-/* Sets an OpenSSL engine */
-CURLcode Curl_ossl_set_engine(struct SessionHandle *data, const char *engine);
-
-/* function provided for the generic SSL-layer, called when a session id
- should be freed */
-void Curl_ossl_session_free(void *ptr);
-
-/* Sets engine as default for all SSL operations */
-CURLcode Curl_ossl_set_engine_default(struct SessionHandle *data);
-
-/* Build list of OpenSSL engines */
-struct curl_slist *Curl_ossl_engines_list(struct SessionHandle *data);
-
-int Curl_ossl_init(void);
-void Curl_ossl_cleanup(void);
-
-size_t Curl_ossl_version(char *buffer, size_t size);
-int Curl_ossl_check_cxn(struct connectdata *cxn);
-int Curl_ossl_shutdown(struct connectdata *conn, int sockindex);
-bool Curl_ossl_data_pending(const struct connectdata *conn,
- int connindex);
-
-/* return 0 if a find random is filled in */
-int Curl_ossl_random(struct SessionHandle *data, unsigned char *entropy,
- size_t length);
-void Curl_ossl_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum /* output */,
- size_t unused);
-
-/* this backend provides these functions: */
-#define have_curlssl_md5sum 1
-
-/* API setup for OpenSSL */
-#define curlssl_init Curl_ossl_init
-#define curlssl_cleanup Curl_ossl_cleanup
-#define curlssl_connect Curl_ossl_connect
-#define curlssl_connect_nonblocking Curl_ossl_connect_nonblocking
-#define curlssl_session_free(x) Curl_ossl_session_free(x)
-#define curlssl_close_all Curl_ossl_close_all
-#define curlssl_close Curl_ossl_close
-#define curlssl_shutdown(x,y) Curl_ossl_shutdown(x,y)
-#define curlssl_set_engine(x,y) Curl_ossl_set_engine(x,y)
-#define curlssl_set_engine_default(x) Curl_ossl_set_engine_default(x)
-#define curlssl_engines_list(x) Curl_ossl_engines_list(x)
-#define curlssl_version Curl_ossl_version
-#define curlssl_check_cxn Curl_ossl_check_cxn
-#define curlssl_data_pending(x,y) Curl_ossl_data_pending(x,y)
-#define curlssl_random(x,y,z) Curl_ossl_random(x,y,z)
-#define curlssl_md5sum(a,b,c,d) Curl_ossl_md5sum(a,b,c,d)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_OPENSSL
-
-#define DEFAULT_CIPHER_SELECTION "ALL!EXPORT!EXPORT40!EXPORT56!aNULL!LOW!RC4"
-
-#endif /* USE_SSLEAY */
-#endif /* HEADER_CURL_SSLUSE_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/polarssl.c b/external/libcurl_android/jni/libcurl/lib/vtls/polarssl.c
deleted file mode 100755
index 5332b92c..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/polarssl.c
+++ /dev/null
@@ -1,746 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- * Copyright (C) 2012 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/*
- * Source file for all PolarSSL-specific code for the TLS/SSL layer. No code
- * but vtls.c should ever call or use these functions.
- *
- */
-
-#include "curl_setup.h"
-
-#ifdef USE_POLARSSL
-
-#include <polarssl/net.h>
-#include <polarssl/ssl.h>
-#include <polarssl/certs.h>
-#include <polarssl/x509.h>
-#include <polarssl/version.h>
-
-#if POLARSSL_VERSION_NUMBER < 0x01030000
-#error too old PolarSSL
-#endif
-
-#include <polarssl/error.h>
-#include <polarssl/entropy.h>
-#include <polarssl/ctr_drbg.h>
-
-#include "urldata.h"
-#include "sendf.h"
-#include "inet_pton.h"
-#include "polarssl.h"
-#include "vtls.h"
-#include "parsedate.h"
-#include "connect.h" /* for the connect timeout */
-#include "select.h"
-#include "rawstr.h"
-#include "polarssl_threadlock.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* apply threading? */
-#if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
-#define THREADING_SUPPORT
-#endif
-
-#if defined(THREADING_SUPPORT)
-static entropy_context entropy;
-
-static int entropy_init_initialized = 0;
-
-/* start of entropy_init_mutex() */
-static void entropy_init_mutex(entropy_context *ctx)
-{
- /* lock 0 = entropy_init_mutex() */
- polarsslthreadlock_lock_function(0);
- if(entropy_init_initialized == 0) {
- entropy_init(ctx);
- entropy_init_initialized = 1;
- }
- polarsslthreadlock_unlock_function(0);
-}
-/* end of entropy_init_mutex() */
-
-/* start of entropy_func_mutex() */
-static int entropy_func_mutex(void *data, unsigned char *output, size_t len)
-{
- int ret;
- /* lock 1 = entropy_func_mutex() */
- polarsslthreadlock_lock_function(1);
- ret = entropy_func(data, output, len);
- polarsslthreadlock_unlock_function(1);
-
- return ret;
-}
-/* end of entropy_func_mutex() */
-
-#endif /* THREADING_SUPPORT */
-
-/* Define this to enable lots of debugging for PolarSSL */
-#undef POLARSSL_DEBUG
-
-#ifdef POLARSSL_DEBUG
-static void polarssl_debug(void *context, int level, const char *line)
-{
- struct SessionHandle *data = NULL;
-
- if(!context)
- return;
-
- data = (struct SessionHandle *)context;
-
- infof(data, "%s", line);
- (void) level;
-}
-#else
-#endif
-
-/* ALPN for http2? */
-#ifdef USE_NGHTTP2
-# undef HAS_ALPN
-# ifdef POLARSSL_SSL_ALPN
-# define HAS_ALPN
-# endif
-#endif
-
-static Curl_recv polarssl_recv;
-static Curl_send polarssl_send;
-
-
-static CURLcode
-polarssl_connect_step1(struct connectdata *conn,
- int sockindex)
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data* connssl = &conn->ssl[sockindex];
-
- bool sni = TRUE; /* default is SNI enabled */
- int ret = -1;
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif
- void *old_session = NULL;
- size_t old_session_size = 0;
- char errorbuf[128];
- errorbuf[0]=0;
-
- /* PolarSSL only supports SSLv3 and TLSv1 */
- if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) {
- failf(data, "PolarSSL does not support SSLv2");
- return CURLE_SSL_CONNECT_ERROR;
- }
- else if(data->set.ssl.version == CURL_SSLVERSION_SSLv3)
- sni = FALSE; /* SSLv3 has no SNI */
-
-#ifdef THREADING_SUPPORT
- entropy_init_mutex(&entropy);
-
- if((ret = ctr_drbg_init(&connssl->ctr_drbg, entropy_func_mutex, &entropy,
- connssl->ssn.id, connssl->ssn.length)) != 0) {
-#ifdef POLARSSL_ERROR_C
- error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
- failf(data, "Failed - PolarSSL: ctr_drbg_init returned (-0x%04X) %s\n",
- -ret, errorbuf);
- }
-#else
- entropy_init(&connssl->entropy);
-
- if((ret = ctr_drbg_init(&connssl->ctr_drbg, entropy_func, &connssl->entropy,
- connssl->ssn.id, connssl->ssn.length)) != 0) {
-#ifdef POLARSSL_ERROR_C
- error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
- failf(data, "Failed - PolarSSL: ctr_drbg_init returned (-0x%04X) %s\n",
- -ret, errorbuf);
- }
-#endif /* THREADING_SUPPORT */
-
- /* Load the trusted CA */
- memset(&connssl->cacert, 0, sizeof(x509_crt));
-
- if(data->set.str[STRING_SSL_CAFILE]) {
- ret = x509_crt_parse_file(&connssl->cacert,
- data->set.str[STRING_SSL_CAFILE]);
-
- if(ret<0) {
-#ifdef POLARSSL_ERROR_C
- error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
- failf(data, "Error reading ca cert file %s - PolarSSL: (-0x%04X) %s",
- data->set.str[STRING_SSL_CAFILE], -ret, errorbuf);
-
- if(data->set.ssl.verifypeer)
- return CURLE_SSL_CACERT_BADFILE;
- }
- }
-
- if(data->set.str[STRING_SSL_CAPATH]) {
- ret = x509_crt_parse_path(&connssl->cacert,
- data->set.str[STRING_SSL_CAPATH]);
-
- if(ret<0) {
-#ifdef POLARSSL_ERROR_C
- error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
- failf(data, "Error reading ca cert path %s - PolarSSL: (-0x%04X) %s",
- data->set.str[STRING_SSL_CAPATH], -ret, errorbuf);
-
- if(data->set.ssl.verifypeer)
- return CURLE_SSL_CACERT_BADFILE;
- }
- }
-
- /* Load the client certificate */
- memset(&connssl->clicert, 0, sizeof(x509_crt));
-
- if(data->set.str[STRING_CERT]) {
- ret = x509_crt_parse_file(&connssl->clicert,
- data->set.str[STRING_CERT]);
-
- if(ret) {
-#ifdef POLARSSL_ERROR_C
- error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
- failf(data, "Error reading client cert file %s - PolarSSL: (-0x%04X) %s",
- data->set.str[STRING_CERT], -ret, errorbuf);
-
- return CURLE_SSL_CERTPROBLEM;
- }
- }
-
- /* Load the client private key */
- if(data->set.str[STRING_KEY]) {
- pk_context pk;
- pk_init(&pk);
- ret = pk_parse_keyfile(&pk, data->set.str[STRING_KEY],
- data->set.str[STRING_KEY_PASSWD]);
- if(ret == 0 && !pk_can_do(&pk, POLARSSL_PK_RSA))
- ret = POLARSSL_ERR_PK_TYPE_MISMATCH;
- if(ret == 0)
- rsa_copy(&connssl->rsa, pk_rsa(pk));
- else
- rsa_free(&connssl->rsa);
- pk_free(&pk);
-
- if(ret) {
-#ifdef POLARSSL_ERROR_C
- error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
- failf(data, "Error reading private key %s - PolarSSL: (-0x%04X) %s",
- data->set.str[STRING_KEY], -ret, errorbuf);
-
- return CURLE_SSL_CERTPROBLEM;
- }
- }
-
- /* Load the CRL */
- memset(&connssl->crl, 0, sizeof(x509_crl));
-
- if(data->set.str[STRING_SSL_CRLFILE]) {
- ret = x509_crl_parse_file(&connssl->crl,
- data->set.str[STRING_SSL_CRLFILE]);
-
- if(ret) {
-#ifdef POLARSSL_ERROR_C
- error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
- failf(data, "Error reading CRL file %s - PolarSSL: (-0x%04X) %s",
- data->set.str[STRING_SSL_CRLFILE], -ret, errorbuf);
-
- return CURLE_SSL_CRL_BADFILE;
- }
- }
-
- infof(data, "PolarSSL: Connecting to %s:%d\n",
- conn->host.name, conn->remote_port);
-
- if(ssl_init(&connssl->ssl)) {
- failf(data, "PolarSSL: ssl_init failed");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- switch(data->set.ssl.version) {
- case CURL_SSLVERSION_SSLv3:
- ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
- SSL_MINOR_VERSION_0);
- infof(data, "PolarSSL: Forced min. SSL Version to be SSLv3\n");
- break;
- case CURL_SSLVERSION_TLSv1_0:
- ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
- SSL_MINOR_VERSION_1);
- infof(data, "PolarSSL: Forced min. SSL Version to be TLS 1.0\n");
- break;
- case CURL_SSLVERSION_TLSv1_1:
- ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
- SSL_MINOR_VERSION_2);
- infof(data, "PolarSSL: Forced min. SSL Version to be TLS 1.1\n");
- break;
- case CURL_SSLVERSION_TLSv1_2:
- ssl_set_min_version(&connssl->ssl, SSL_MAJOR_VERSION_3,
- SSL_MINOR_VERSION_3);
- infof(data, "PolarSSL: Forced min. SSL Version to be TLS 1.2\n");
- break;
- }
-
- ssl_set_endpoint(&connssl->ssl, SSL_IS_CLIENT);
- ssl_set_authmode(&connssl->ssl, SSL_VERIFY_OPTIONAL);
-
- ssl_set_rng(&connssl->ssl, ctr_drbg_random,
- &connssl->ctr_drbg);
- ssl_set_bio(&connssl->ssl,
- net_recv, &conn->sock[sockindex],
- net_send, &conn->sock[sockindex]);
-
- ssl_set_ciphersuites(&connssl->ssl, ssl_list_ciphersuites());
- if(!Curl_ssl_getsessionid(conn, &old_session, &old_session_size)) {
- memcpy(&connssl->ssn, old_session, old_session_size);
- infof(data, "PolarSSL re-using session\n");
- }
-
- ssl_set_session(&connssl->ssl,
- &connssl->ssn);
-
- ssl_set_ca_chain(&connssl->ssl,
- &connssl->cacert,
- &connssl->crl,
- conn->host.name);
-
- ssl_set_own_cert_rsa(&connssl->ssl,
- &connssl->clicert, &connssl->rsa);
-
- if(!Curl_inet_pton(AF_INET, conn->host.name, &addr) &&
-#ifdef ENABLE_IPV6
- !Curl_inet_pton(AF_INET6, conn->host.name, &addr) &&
-#endif
- sni && ssl_set_hostname(&connssl->ssl, conn->host.name)) {
- infof(data, "WARNING: failed to configure "
- "server name indication (SNI) TLS extension\n");
- }
-
-#ifdef HAS_ALPN
- if(data->set.httpversion == CURL_HTTP_VERSION_2_0) {
- if(data->set.ssl_enable_alpn) {
- static const char* protocols[] = {
- NGHTTP2_PROTO_VERSION_ID, ALPN_HTTP_1_1, NULL
- };
- ssl_set_alpn_protocols(&connssl->ssl, protocols);
- infof(data, "ALPN, offering %s, %s\n", protocols[0],
- protocols[1]);
- }
- }
-#endif
-
-#ifdef POLARSSL_DEBUG
- ssl_set_dbg(&connssl->ssl, polarssl_debug, data);
-#endif
-
- connssl->connecting_state = ssl_connect_2;
-
- return CURLE_OK;
-}
-
-static CURLcode
-polarssl_connect_step2(struct connectdata *conn,
- int sockindex)
-{
- int ret;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data* connssl = &conn->ssl[sockindex];
- char buffer[1024];
-
-#ifdef HAS_ALPN
- const char* next_protocol;
-#endif
-
- char errorbuf[128];
- errorbuf[0] = 0;
-
- conn->recv[sockindex] = polarssl_recv;
- conn->send[sockindex] = polarssl_send;
-
- for(;;) {
- if(!(ret = ssl_handshake(&connssl->ssl)))
- break;
- else if(ret != POLARSSL_ERR_NET_WANT_READ &&
- ret != POLARSSL_ERR_NET_WANT_WRITE) {
-#ifdef POLARSSL_ERROR_C
- error_strerror(ret, errorbuf, sizeof(errorbuf));
-#endif /* POLARSSL_ERROR_C */
- failf(data, "ssl_handshake returned - PolarSSL: (-0x%04X) %s",
- -ret, errorbuf);
-
- return CURLE_SSL_CONNECT_ERROR;
- }
- else {
- if(ret == POLARSSL_ERR_NET_WANT_READ) {
- connssl->connecting_state = ssl_connect_2_reading;
- return CURLE_OK;
- }
- if(ret == POLARSSL_ERR_NET_WANT_WRITE) {
- connssl->connecting_state = ssl_connect_2_writing;
- return CURLE_OK;
- }
- failf(data, "SSL_connect failed with error %d.", ret);
- return CURLE_SSL_CONNECT_ERROR;
-
- }
- }
-
- infof(data, "PolarSSL: Handshake complete, cipher is %s\n",
- ssl_get_ciphersuite(&conn->ssl[sockindex].ssl)
- );
-
- ret = ssl_get_verify_result(&conn->ssl[sockindex].ssl);
-
- if(ret && data->set.ssl.verifypeer) {
- if(ret & BADCERT_EXPIRED)
- failf(data, "Cert verify failed: BADCERT_EXPIRED");
-
- if(ret & BADCERT_REVOKED) {
- failf(data, "Cert verify failed: BADCERT_REVOKED");
- return CURLE_SSL_CACERT;
- }
-
- if(ret & BADCERT_CN_MISMATCH)
- failf(data, "Cert verify failed: BADCERT_CN_MISMATCH");
-
- if(ret & BADCERT_NOT_TRUSTED)
- failf(data, "Cert verify failed: BADCERT_NOT_TRUSTED");
-
- return CURLE_PEER_FAILED_VERIFICATION;
- }
-
- if(ssl_get_peer_cert(&(connssl->ssl))) {
- /* If the session was resumed, there will be no peer certs */
- memset(buffer, 0, sizeof(buffer));
-
- if(x509_crt_info(buffer, sizeof(buffer), (char *)"* ",
- ssl_get_peer_cert(&(connssl->ssl))) != -1)
- infof(data, "Dumping cert info:\n%s\n", buffer);
- }
-
-#ifdef HAS_ALPN
- if(data->set.ssl_enable_alpn) {
- next_protocol = ssl_get_alpn_protocol(&connssl->ssl);
-
- if(next_protocol != NULL) {
- infof(data, "ALPN, server accepted to use %s\n", next_protocol);
-
- if(strncmp(next_protocol, NGHTTP2_PROTO_VERSION_ID,
- NGHTTP2_PROTO_VERSION_ID_LEN)) {
- conn->negnpn = NPN_HTTP2;
- }
- else if(strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH)) {
- conn->negnpn = NPN_HTTP1_1;
- }
- }
- else {
- infof(data, "ALPN, server did not agree to a protocol\n");
- }
- }
-#endif
-
- connssl->connecting_state = ssl_connect_3;
- infof(data, "SSL connected\n");
-
- return CURLE_OK;
-}
-
-static CURLcode
-polarssl_connect_step3(struct connectdata *conn,
- int sockindex)
-{
- CURLcode retcode = CURLE_OK;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- struct SessionHandle *data = conn->data;
- void *old_ssl_sessionid = NULL;
- ssl_session *our_ssl_sessionid = &conn->ssl[sockindex].ssn ;
- int incache;
-
- DEBUGASSERT(ssl_connect_3 == connssl->connecting_state);
-
- /* Save the current session data for possible re-use */
- incache = !(Curl_ssl_getsessionid(conn, &old_ssl_sessionid, NULL));
- if(incache) {
- if(old_ssl_sessionid != our_ssl_sessionid) {
- infof(data, "old SSL session ID is stale, removing\n");
- Curl_ssl_delsessionid(conn, old_ssl_sessionid);
- incache = FALSE;
- }
- }
- if(!incache) {
- void *new_session = malloc(sizeof(ssl_session));
-
- if(new_session) {
- memcpy(new_session, our_ssl_sessionid,
- sizeof(ssl_session));
-
- retcode = Curl_ssl_addsessionid(conn, new_session,
- sizeof(ssl_session));
- }
- else {
- retcode = CURLE_OUT_OF_MEMORY;
- }
-
- if(retcode) {
- failf(data, "failed to store ssl session");
- return retcode;
- }
- }
-
- connssl->connecting_state = ssl_connect_done;
-
- return CURLE_OK;
-}
-
-static ssize_t polarssl_send(struct connectdata *conn,
- int sockindex,
- const void *mem,
- size_t len,
- CURLcode *curlcode)
-{
- int ret = -1;
-
- ret = ssl_write(&conn->ssl[sockindex].ssl,
- (unsigned char *)mem, len);
-
- if(ret < 0) {
- *curlcode = (ret == POLARSSL_ERR_NET_WANT_WRITE) ?
- CURLE_AGAIN : CURLE_SEND_ERROR;
- ret = -1;
- }
-
- return ret;
-}
-
-void Curl_polarssl_close_all(struct SessionHandle *data)
-{
- (void)data;
-}
-
-void Curl_polarssl_close(struct connectdata *conn, int sockindex)
-{
- rsa_free(&conn->ssl[sockindex].rsa);
- x509_crt_free(&conn->ssl[sockindex].clicert);
- x509_crt_free(&conn->ssl[sockindex].cacert);
- x509_crl_free(&conn->ssl[sockindex].crl);
- ssl_free(&conn->ssl[sockindex].ssl);
-}
-
-static ssize_t polarssl_recv(struct connectdata *conn,
- int num,
- char *buf,
- size_t buffersize,
- CURLcode *curlcode)
-{
- int ret = -1;
- ssize_t len = -1;
-
- memset(buf, 0, buffersize);
- ret = ssl_read(&conn->ssl[num].ssl, (unsigned char *)buf, buffersize);
-
- if(ret <= 0) {
- if(ret == POLARSSL_ERR_SSL_PEER_CLOSE_NOTIFY)
- return 0;
-
- *curlcode = (ret == POLARSSL_ERR_NET_WANT_READ) ?
- CURLE_AGAIN : CURLE_RECV_ERROR;
- return -1;
- }
-
- len = ret;
-
- return len;
-}
-
-void Curl_polarssl_session_free(void *ptr)
-{
- free(ptr);
-}
-
-size_t Curl_polarssl_version(char *buffer, size_t size)
-{
- unsigned int version = version_get_number();
- return snprintf(buffer, size, "PolarSSL/%d.%d.%d", version>>24,
- (version>>16)&0xff, (version>>8)&0xff);
-}
-
-static CURLcode
-polarssl_connect_common(struct connectdata *conn,
- int sockindex,
- bool nonblocking,
- bool *done)
-{
- CURLcode retcode;
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
- curl_socket_t sockfd = conn->sock[sockindex];
- long timeout_ms;
- int what;
-
- /* check if the connection has already been established */
- if(ssl_connection_complete == connssl->state) {
- *done = TRUE;
- return CURLE_OK;
- }
-
- if(ssl_connect_1==connssl->connecting_state) {
- /* Find out how much more time we're allowed */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- retcode = polarssl_connect_step1(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- while(ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state) {
-
- /* check allowed time left */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* no need to continue if time already is up */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- /* if ssl is expecting something, check if it's available. */
- if(connssl->connecting_state == ssl_connect_2_reading
- || connssl->connecting_state == ssl_connect_2_writing) {
-
- curl_socket_t writefd = ssl_connect_2_writing==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
- curl_socket_t readfd = ssl_connect_2_reading==
- connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
-
- what = Curl_socket_ready(readfd, writefd, nonblocking?0:timeout_ms);
- if(what < 0) {
- /* fatal error */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- return CURLE_SSL_CONNECT_ERROR;
- }
- else if(0 == what) {
- if(nonblocking) {
- *done = FALSE;
- return CURLE_OK;
- }
- else {
- /* timeout */
- failf(data, "SSL connection timeout");
- return CURLE_OPERATION_TIMEDOUT;
- }
- }
- /* socket is readable or writable */
- }
-
- /* Run transaction, and return to the caller if it failed or if
- * this connection is part of a multi handle and this loop would
- * execute again. This permits the owner of a multi handle to
- * abort a connection attempt before step2 has completed while
- * ensuring that a client using select() or epoll() will always
- * have a valid fdset to wait on.
- */
- retcode = polarssl_connect_step2(conn, sockindex);
- if(retcode || (nonblocking &&
- (ssl_connect_2 == connssl->connecting_state ||
- ssl_connect_2_reading == connssl->connecting_state ||
- ssl_connect_2_writing == connssl->connecting_state)))
- return retcode;
-
- } /* repeat step2 until all transactions are done. */
-
- if(ssl_connect_3==connssl->connecting_state) {
- retcode = polarssl_connect_step3(conn, sockindex);
- if(retcode)
- return retcode;
- }
-
- if(ssl_connect_done==connssl->connecting_state) {
- connssl->state = ssl_connection_complete;
- conn->recv[sockindex] = polarssl_recv;
- conn->send[sockindex] = polarssl_send;
- *done = TRUE;
- }
- else
- *done = FALSE;
-
- /* Reset our connect state machine */
- connssl->connecting_state = ssl_connect_1;
-
- return CURLE_OK;
-}
-
-CURLcode
-Curl_polarssl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done)
-{
- return polarssl_connect_common(conn, sockindex, TRUE, done);
-}
-
-
-CURLcode
-Curl_polarssl_connect(struct connectdata *conn,
- int sockindex)
-{
- CURLcode retcode;
- bool done = FALSE;
-
- retcode = polarssl_connect_common(conn, sockindex, FALSE, &done);
- if(retcode)
- return retcode;
-
- DEBUGASSERT(done);
-
- return CURLE_OK;
-}
-
-/*
- * return 0 error initializing SSL
- * return 1 SSL initialized successfully
- */
-int polarssl_init(void)
-{
- return polarsslthreadlock_thread_setup();
-}
-
-void polarssl_cleanup(void)
-{
- (void)polarsslthreadlock_thread_cleanup();
-}
-
-#endif /* USE_POLARSSL */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/polarssl.h b/external/libcurl_android/jni/libcurl/lib/vtls/polarssl.h
deleted file mode 100755
index 9ab7e47e..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/polarssl.h
+++ /dev/null
@@ -1,73 +0,0 @@
-#ifndef HEADER_CURL_POLARSSL_H
-#define HEADER_CURL_POLARSSL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifdef USE_POLARSSL
-
-/* Called on first use PolarSSL, setup threading if supported */
-int polarssl_init(void);
-void polarssl_cleanup(void);
-
-
-CURLcode Curl_polarssl_connect(struct connectdata *conn, int sockindex);
-
-CURLcode Curl_polarssl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done);
-
-/* tell PolarSSL to close down all open information regarding connections (and
- thus session ID caching etc) */
-void Curl_polarssl_close_all(struct SessionHandle *data);
-
- /* close a SSL connection */
-void Curl_polarssl_close(struct connectdata *conn, int sockindex);
-
-void Curl_polarssl_session_free(void *ptr);
-size_t Curl_polarssl_version(char *buffer, size_t size);
-int Curl_polarssl_shutdown(struct connectdata *conn, int sockindex);
-
-/* API setup for PolarSSL */
-#define curlssl_init() polarssl_init()
-#define curlssl_cleanup() polarssl_cleanup()
-#define curlssl_connect Curl_polarssl_connect
-#define curlssl_connect_nonblocking Curl_polarssl_connect_nonblocking
-#define curlssl_session_free(x) Curl_polarssl_session_free(x)
-#define curlssl_close_all Curl_polarssl_close_all
-#define curlssl_close Curl_polarssl_close
-#define curlssl_shutdown(x,y) 0
-#define curlssl_set_engine(x,y) (x=x, y=y, CURLE_NOT_BUILT_IN)
-#define curlssl_set_engine_default(x) (x=x, CURLE_NOT_BUILT_IN)
-#define curlssl_engines_list(x) (x=x, (struct curl_slist *)NULL)
-#define curlssl_version Curl_polarssl_version
-#define curlssl_check_cxn(x) (x=x, -1)
-#define curlssl_data_pending(x,y) (x=x, y=y, 0)
-#define CURL_SSL_BACKEND CURLSSLBACKEND_POLARSSL
-
-/* This might cause libcurl to use a weeker random!
- TODO: implement proper use of Polarssl's CTR-DRBG or HMAC-DRBG and use that
-*/
-#define curlssl_random(x,y,z) (x=x, y=y, z=z, CURLE_NOT_BUILT_IN)
-
-#endif /* USE_POLARSSL */
-#endif /* HEADER_CURL_POLARSSL_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/polarssl_threadlock.c b/external/libcurl_android/jni/libcurl/lib/vtls/polarssl_threadlock.c
deleted file mode 100755
index ad187153..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/polarssl_threadlock.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010, 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- * Copyright (C) 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#if defined(USE_POLARSSL) && \
- (defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32))
-
-#if defined(USE_THREADS_POSIX)
-# ifdef HAVE_PTHREAD_H
-# include <pthread.h>
-# endif
-#elif defined(USE_THREADS_WIN32)
-# ifdef HAVE_PROCESS_H
-# include <process.h>
-# endif
-#endif
-
-#include "polarssl_threadlock.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* number of thread locks */
-#define NUMT 2
-
-/* This array will store all of the mutexes available to PolarSSL. */
-static POLARSSL_MUTEX_T *mutex_buf = NULL;
-
-int polarsslthreadlock_thread_setup(void)
-{
- int i;
- int ret;
-
- mutex_buf = malloc(NUMT * sizeof(POLARSSL_MUTEX_T));
- if(!mutex_buf)
- return 0; /* error, no number of threads defined */
-
-#ifdef HAVE_PTHREAD_H
- for(i = 0; i < NUMT; i++) {
- ret = pthread_mutex_init(&mutex_buf[i], NULL);
- if(ret)
- return 0; /* pthread_mutex_init failed */
- }
-#elif defined(HAVE_PROCESS_H)
- for(i = 0; i < NUMT; i++) {
- mutex_buf[i] = CreateMutex(0, FALSE, 0);
- if(mutex_buf[i] == 0)
- return 0; /* CreateMutex failed */
- }
-#endif /* HAVE_PTHREAD_H */
-
- return 1; /* OK */
-}
-
-int polarsslthreadlock_thread_cleanup(void)
-{
- int i;
- int ret;
-
- if(!mutex_buf)
- return 0; /* error, no threads locks defined */
-
-#ifdef HAVE_PTHREAD_H
- for(i = 0; i < NUMT; i++) {
- ret = pthread_mutex_destroy(&mutex_buf[i]);
- if(ret)
- return 0; /* pthread_mutex_destroy failed */
- }
-#elif defined(HAVE_PROCESS_H)
- for(i = 0; i < NUMT; i++) {
- ret = CloseHandle(mutex_buf[i]);
- if(!ret)
- return 0; /* CloseHandle failed */
- }
-#endif /* HAVE_PTHREAD_H */
- free(mutex_buf);
- mutex_buf = NULL;
-
- return 1; /* OK */
-}
-
-int polarsslthreadlock_lock_function(int n)
-{
- int ret;
-#ifdef HAVE_PTHREAD_H
- if(n < NUMT) {
- ret = pthread_mutex_lock(&mutex_buf[n]);
- if(ret) {
- DEBUGF(fprintf(stderr,
- "Error: polarsslthreadlock_lock_function failed\n"));
- return 0; /* pthread_mutex_lock failed */
- }
- }
-#elif defined(HAVE_PROCESS_H)
- if(n < NUMT) {
- ret = (WaitForSingleObject(mutex_buf[n], INFINITE)==WAIT_FAILED?1:0);
- if(ret) {
- DEBUGF(fprintf(stderr,
- "Error: polarsslthreadlock_lock_function failed\n"));
- return 0; /* pthread_mutex_lock failed */
- }
- }
-#endif /* HAVE_PTHREAD_H */
- return 1; /* OK */
-}
-
-int polarsslthreadlock_unlock_function(int n)
-{
- int ret;
-#ifdef HAVE_PTHREAD_H
- if(n < NUMT) {
- ret = pthread_mutex_unlock(&mutex_buf[n]);
- if(ret) {
- DEBUGF(fprintf(stderr,
- "Error: polarsslthreadlock_unlock_function failed\n"));
- return 0; /* pthread_mutex_unlock failed */
- }
- }
-#elif defined(HAVE_PROCESS_H)
- if(n < NUMT) {
- ret = ReleaseMutex(mutex_buf[n]);
- if(!ret) {
- DEBUGF(fprintf(stderr,
- "Error: polarsslthreadlock_unlock_function failed\n"));
- return 0; /* pthread_mutex_lock failed */
- }
- }
-#endif /* HAVE_PTHREAD_H */
- return 1; /* OK */
-}
-
-#endif /* USE_POLARSSL */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/polarssl_threadlock.h b/external/libcurl_android/jni/libcurl/lib/vtls/polarssl_threadlock.h
deleted file mode 100755
index b67b3f9a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/polarssl_threadlock.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef HEADER_CURL_POLARSSL_THREADLOCK_H
-#define HEADER_CURL_POLARSSL_THREADLOCK_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010, Hoi-Ho Chan, <hoiho.chan@gmail.com>
- * Copyright (C) 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifdef USE_POLARSSL
-
-#if defined(USE_THREADS_POSIX)
-# define POLARSSL_MUTEX_T pthread_mutex_t
-#elif defined(USE_THREADS_WIN32)
-# define POLARSSL_MUTEX_T HANDLE
-#endif
-
-#if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)
-
-int polarsslthreadlock_thread_setup(void);
-int polarsslthreadlock_thread_cleanup(void);
-int polarsslthreadlock_lock_function(int n);
-int polarsslthreadlock_unlock_function(int n);
-
-#else
-
-#define polarsslthreadlock_thread_setup() 1
-#define polarsslthreadlock_thread_cleanup() 1
-#define polarsslthreadlock_lock_function(x) 1
-#define polarsslthreadlock_unlock_function(x) 1
-
-#endif /* USE_THREADS_POSIX || USE_THREADS_WIN32 */
-
-#endif /* USE_POLARSSL */
-
-#endif /* HEADER_CURL_POLARSSL_THREADLOCK_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/qssl.c b/external/libcurl_android/jni/libcurl/lib/vtls/qssl.c
deleted file mode 100755
index 4c320538..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/qssl.c
+++ /dev/null
@@ -1,527 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#ifdef USE_QSOSSL
-
-#include <qsossl.h>
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "sendf.h"
-#include "qssl.h"
-#include "vtls.h"
-#include "connect.h" /* for the connect timeout */
-#include "select.h"
-#include "x509asn1.h"
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-
-int Curl_qsossl_init(void)
-
-{
- /* Nothing to do here. We must have connection data to initialize ssl, so
- * defer.
- */
-
- return 1;
-}
-
-
-void Curl_qsossl_cleanup(void)
-
-{
- /* Nothing to do. */
-}
-
-
-static CURLcode Curl_qsossl_init_session(struct SessionHandle * data)
-
-{
- int rc;
- char * certname;
- SSLInit initstr;
- SSLInitApp initappstr;
-
- /* Initialize the job for SSL according to the current parameters.
- * QsoSSL offers two ways to do it: SSL_Init_Application() that uses an
- * application identifier to select certificates in the main certificate
- * store, and SSL_Init() that uses named keyring files and a password.
- * It is not possible to have different keyrings for the CAs and the
- * local certificate. We thus use the certificate name to identify the
- * keyring if given, else the CA file name.
- * If the key file name is given, it is taken as the password for the
- * keyring in certificate file.
- * We first try to SSL_Init_Application(), then SSL_Init() if it failed.
- */
-
- certname = data->set.str[STRING_CERT];
-
- if(!certname) {
- certname = data->set.str[STRING_SSL_CAFILE];
-
- if(!certname)
- return CURLE_OK; /* Use previous setup. */
- }
-
- memset((char *) &initappstr, 0, sizeof initappstr);
- initappstr.applicationID = certname;
- initappstr.applicationIDLen = strlen(certname);
- initappstr.protocol = SSL_VERSION_CURRENT; /* TLSV1 compat. SSLV[23]. */
- initappstr.sessionType = SSL_REGISTERED_AS_CLIENT;
- rc = SSL_Init_Application(&initappstr);
-
- if(rc == SSL_ERROR_NOT_REGISTERED) {
- initstr.keyringFileName = certname;
- initstr.keyringPassword = data->set.str[STRING_KEY];
- initstr.cipherSuiteList = NULL; /* Use default. */
- initstr.cipherSuiteListLen = 0;
- rc = SSL_Init(&initstr);
- }
-
- switch (rc) {
-
- case 0: /* No error. */
- break;
-
- case SSL_ERROR_IO:
- failf(data, "SSL_Init() I/O error: %s", strerror(errno));
- return CURLE_SSL_CONNECT_ERROR;
-
- case SSL_ERROR_BAD_CIPHER_SUITE:
- return CURLE_SSL_CIPHER;
-
- case SSL_ERROR_KEYPASSWORD_EXPIRED:
- case SSL_ERROR_NOT_REGISTERED:
- return CURLE_SSL_CONNECT_ERROR;
-
- case SSL_ERROR_NO_KEYRING:
- return CURLE_SSL_CACERT;
-
- case SSL_ERROR_CERT_EXPIRED:
- return CURLE_SSL_CERTPROBLEM;
-
- default:
- failf(data, "SSL_Init(): %s", SSL_Strerror(rc, NULL));
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- return CURLE_OK;
-}
-
-
-static CURLcode Curl_qsossl_create(struct connectdata * conn, int sockindex)
-
-{
- SSLHandle * h;
- struct ssl_connect_data * connssl = &conn->ssl[sockindex];
-
- h = SSL_Create(conn->sock[sockindex], SSL_ENCRYPT);
-
- if(!h) {
- failf(conn->data, "SSL_Create() I/O error: %s", strerror(errno));
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- connssl->handle = h;
- return CURLE_OK;
-}
-
-
-static int Curl_qsossl_trap_cert(SSLHandle * h)
-
-{
- return 1; /* Accept certificate. */
-}
-
-
-static CURLcode Curl_qsossl_handshake(struct connectdata * conn, int sockindex)
-
-{
- int rc;
- struct SessionHandle * data = conn->data;
- struct ssl_connect_data * connssl = &conn->ssl[sockindex];
- SSLHandle * h = connssl->handle;
- long timeout_ms;
-
- h->exitPgm = data->set.ssl.verifypeer? NULL: Curl_qsossl_trap_cert;
-
- /* figure out how long time we should wait at maximum */
- timeout_ms = Curl_timeleft(data, NULL, TRUE);
-
- if(timeout_ms < 0) {
- /* time-out, bail out, go home */
- failf(data, "Connection time-out");
- return CURLE_OPERATION_TIMEDOUT;
- }
-
- /* SSL_Handshake() timeout resolution is second, so round up. */
- h->timeout = (timeout_ms + 1000 - 1) / 1000;
-
- /* Set-up protocol. */
-
- switch (data->set.ssl.version) {
-
- default:
- case CURL_SSLVERSION_DEFAULT:
- h->protocol = SSL_VERSION_CURRENT; /* TLSV1 compat. SSLV[23]. */
- break;
-
- case CURL_SSLVERSION_TLSv1:
- h->protocol = TLS_VERSION_1;
- break;
-
- case CURL_SSLVERSION_SSLv2:
- h->protocol = SSL_VERSION_2;
- break;
-
- case CURL_SSLVERSION_SSLv3:
- h->protocol = SSL_VERSION_3;
- break;
-
- case CURL_SSLVERSION_TLSv1_0:
- case CURL_SSLVERSION_TLSv1_1:
- case CURL_SSLVERSION_TLSv1_2:
- failf(data, "TLS minor version cannot be set");
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- h->peerCert = NULL;
- h->peerCertLen = 0;
- rc = SSL_Handshake(h, SSL_HANDSHAKE_AS_CLIENT);
-
- switch (rc) {
-
- case 0: /* No error. */
- break;
-
- case SSL_ERROR_BAD_CERTIFICATE:
- case SSL_ERROR_BAD_CERT_SIG:
- case SSL_ERROR_NOT_TRUSTED_ROOT:
- return CURLE_PEER_FAILED_VERIFICATION;
-
- case SSL_ERROR_BAD_CIPHER_SUITE:
- case SSL_ERROR_NO_CIPHERS:
- return CURLE_SSL_CIPHER;
-
- case SSL_ERROR_CERTIFICATE_REJECTED:
- case SSL_ERROR_CERT_EXPIRED:
- case SSL_ERROR_NO_CERTIFICATE:
- return CURLE_SSL_CERTPROBLEM;
-
- case SSL_ERROR_IO:
- failf(data, "SSL_Handshake() I/O error: %s", strerror(errno));
- return CURLE_SSL_CONNECT_ERROR;
-
- default:
- failf(data, "SSL_Handshake(): %s", SSL_Strerror(rc, NULL));
- return CURLE_SSL_CONNECT_ERROR;
- }
-
- /* Verify host. */
- rc = Curl_verifyhost(conn, h->peerCert, h->peerCert + h->peerCertLen);
- if(rc != CURLE_OK)
- return rc;
-
- /* Gather certificate info. */
- if(data->set.ssl.certinfo) {
- if(Curl_ssl_init_certinfo(data, 1))
- return CURLE_OUT_OF_MEMORY;
- if(h->peerCert) {
- rc = Curl_extract_certinfo(conn, 0, h->peerCert,
- h->peerCert + h->peerCertLen);
- if(rc != CURLE_OK)
- return rc;
- }
- }
-
- return CURLE_OK;
-}
-
-
-static Curl_recv qsossl_recv;
-static Curl_send qsossl_send;
-
-CURLcode Curl_qsossl_connect(struct connectdata * conn, int sockindex)
-
-{
- struct SessionHandle * data = conn->data;
- struct ssl_connect_data * connssl = &conn->ssl[sockindex];
- int rc;
-
- rc = Curl_qsossl_init_session(data);
-
- if(rc == CURLE_OK) {
- rc = Curl_qsossl_create(conn, sockindex);
-
- if(rc == CURLE_OK) {
- rc = Curl_qsossl_handshake(conn, sockindex);
- if(rc != CURLE_OK)
- SSL_Destroy(connssl->handle);
- }
- }
-
- if(rc == CURLE_OK) {
- conn->recv[sockindex] = qsossl_recv;
- conn->send[sockindex] = qsossl_send;
- connssl->state = ssl_connection_complete;
- }
- else {
- connssl->handle = NULL;
- connssl->use = FALSE;
- connssl->state = ssl_connection_none;
- }
-
- return rc;
-}
-
-
-static int Curl_qsossl_close_one(struct ssl_connect_data * conn,
- struct SessionHandle * data)
-
-{
- int rc;
-
- if(!conn->handle)
- return 0;
-
- rc = SSL_Destroy(conn->handle);
-
- if(rc) {
- if(rc == SSL_ERROR_IO) {
- failf(data, "SSL_Destroy() I/O error: %s", strerror(errno));
- return -1;
- }
-
- /* An SSL error. */
- failf(data, "SSL_Destroy() returned error %s", SSL_Strerror(rc, NULL));
- return -1;
- }
-
- conn->handle = NULL;
- return 0;
-}
-
-
-void Curl_qsossl_close(struct connectdata *conn, int sockindex)
-
-{
- struct SessionHandle *data = conn->data;
- struct ssl_connect_data *connssl = &conn->ssl[sockindex];
-
- if(connssl->use)
- (void) Curl_qsossl_close_one(connssl, data);
-}
-
-
-int Curl_qsossl_close_all(struct SessionHandle * data)
-
-{
- /* Unimplemented. */
- (void) data;
- return 0;
-}
-
-
-int Curl_qsossl_shutdown(struct connectdata * conn, int sockindex)
-
-{
- struct ssl_connect_data * connssl = &conn->ssl[sockindex];
- struct SessionHandle *data = conn->data;
- ssize_t nread;
- int what;
- int rc;
- char buf[120];
-
- if(!connssl->handle)
- return 0;
-
- if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
- return 0;
-
- if(Curl_qsossl_close_one(connssl, data))
- return -1;
-
- rc = 0;
-
- what = Curl_socket_ready(conn->sock[sockindex],
- CURL_SOCKET_BAD, SSL_SHUTDOWN_TIMEOUT);
-
- for(;;) {
- if(what < 0) {
- /* anything that gets here is fatally bad */
- failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
- rc = -1;
- break;
- }
-
- if(!what) { /* timeout */
- failf(data, "SSL shutdown timeout");
- break;
- }
-
- /* Something to read, let's do it and hope that it is the close
- notify alert from the server. No way to SSL_Read now, so use read(). */
-
- nread = read(conn->sock[sockindex], buf, sizeof(buf));
-
- if(nread < 0) {
- failf(data, "read: %s", strerror(errno));
- rc = -1;
- }
-
- if(nread <= 0)
- break;
-
- what = Curl_socket_ready(conn->sock[sockindex], CURL_SOCKET_BAD, 0);
- }
-
- return rc;
-}
-
-
-static ssize_t qsossl_send(struct connectdata * conn, int sockindex,
- const void * mem, size_t len, CURLcode * curlcode)
-
-{
- /* SSL_Write() is said to return 'int' while write() and send() returns
- 'size_t' */
- int rc;
-
- rc = SSL_Write(conn->ssl[sockindex].handle, (void *) mem, (int) len);
-
- if(rc < 0) {
- switch(rc) {
-
- case SSL_ERROR_BAD_STATE:
- /* The operation did not complete; the same SSL I/O function
- should be called again later. This is basically an EWOULDBLOCK
- equivalent. */
- *curlcode = CURLE_AGAIN;
- return -1;
-
- case SSL_ERROR_IO:
- switch (errno) {
- case EWOULDBLOCK:
- case EINTR:
- *curlcode = CURLE_AGAIN;
- return -1;
- }
-
- failf(conn->data, "SSL_Write() I/O error: %s", strerror(errno));
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
-
- /* An SSL error. */
- failf(conn->data, "SSL_Write() returned error %s",
- SSL_Strerror(rc, NULL));
- *curlcode = CURLE_SEND_ERROR;
- return -1;
- }
-
- return (ssize_t) rc; /* number of bytes */
-}
-
-
-static ssize_t qsossl_recv(struct connectdata * conn, int num, char * buf,
- size_t buffersize, CURLcode * curlcode)
-
-{
- char error_buffer[120]; /* OpenSSL documents that this must be at
- least 120 bytes long. */
- unsigned long sslerror;
- int buffsize;
- int nread;
-
- buffsize = (buffersize > (size_t)INT_MAX) ? INT_MAX : (int)buffersize;
- nread = SSL_Read(conn->ssl[num].handle, buf, buffsize);
-
- if(nread < 0) {
- /* failed SSL_read */
-
- switch (nread) {
-
- case SSL_ERROR_BAD_STATE:
- /* there's data pending, re-invoke SSL_Read(). */
- *curlcode = CURLE_AGAIN;
- return -1;
-
- case SSL_ERROR_IO:
- switch (errno) {
- case EWOULDBLOCK:
- *curlcode = CURLE_AGAIN;
- return -1;
- }
-
- failf(conn->data, "SSL_Read() I/O error: %s", strerror(errno));
- *curlcode = CURLE_RECV_ERROR;
- return -1;
-
- default:
- failf(conn->data, "SSL read error: %s", SSL_Strerror(nread, NULL));
- *curlcode = CURLE_RECV_ERROR;
- return -1;
- }
- }
- return (ssize_t) nread;
-}
-
-
-size_t Curl_qsossl_version(char * buffer, size_t size)
-
-{
- strncpy(buffer, "IBM OS/400 SSL", size);
- return strlen(buffer);
-}
-
-
-int Curl_qsossl_check_cxn(struct connectdata * cxn)
-
-{
- int err;
- int errlen;
-
- /* The only thing that can be tested here is at the socket level. */
-
- if(!cxn->ssl[FIRSTSOCKET].handle)
- return 0; /* connection has been closed */
-
- err = 0;
- errlen = sizeof err;
-
- if(getsockopt(cxn->sock[FIRSTSOCKET], SOL_SOCKET, SO_ERROR,
- (unsigned char *) &err, &errlen) ||
- errlen != sizeof err || err)
- return 0; /* connection has been closed */
-
- return -1; /* connection status unknown */
-}
-
-#endif /* USE_QSOSSL */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/qssl.h b/external/libcurl_android/jni/libcurl/lib/vtls/qssl.h
deleted file mode 100755
index 9764eecb..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/qssl.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef HEADER_CURL_QSSL_H
-#define HEADER_CURL_QSSL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-/*
- * This header should only be needed to get included by vtls.c and qssl.c
- */
-
-#include "urldata.h"
-
-#ifdef USE_QSOSSL
-int Curl_qsossl_init(void);
-void Curl_qsossl_cleanup(void);
-CURLcode Curl_qsossl_connect(struct connectdata * conn, int sockindex);
-void Curl_qsossl_close(struct connectdata *conn, int sockindex);
-int Curl_qsossl_close_all(struct SessionHandle * data);
-int Curl_qsossl_shutdown(struct connectdata * conn, int sockindex);
-
-size_t Curl_qsossl_version(char * buffer, size_t size);
-int Curl_qsossl_check_cxn(struct connectdata * cxn);
-
-/* API setup for QsoSSL */
-#define curlssl_init Curl_qsossl_init
-#define curlssl_cleanup Curl_qsossl_cleanup
-#define curlssl_connect Curl_qsossl_connect
-
-/* No session handling for QsoSSL */
-#define curlssl_session_free(x) Curl_nop_stmt
-#define curlssl_close_all Curl_qsossl_close_all
-#define curlssl_close Curl_qsossl_close
-#define curlssl_shutdown(x,y) Curl_qsossl_shutdown(x,y)
-#define curlssl_set_engine(x,y) CURLE_NOT_BUILT_IN
-#define curlssl_set_engine_default(x) CURLE_NOT_BUILT_IN
-#define curlssl_engines_list(x) NULL
-#define curlssl_version Curl_qsossl_version
-#define curlssl_check_cxn(x) Curl_qsossl_check_cxn(x)
-#define curlssl_data_pending(x,y) 0
-#define CURL_SSL_BACKEND CURLSSLBACKEND_QSOSSL
-#endif /* USE_QSOSSL */
-
-#endif /* HEADER_CURL_QSSL_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/vtls.c b/external/libcurl_android/jni/libcurl/lib/vtls/vtls.c
deleted file mode 100755
index 88511b8b..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/vtls.c
+++ /dev/null
@@ -1,705 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* This file is for implementing all "generic" SSL functions that all libcurl
- internals should use. It is then responsible for calling the proper
- "backend" function.
-
- SSL-functions in libcurl should call functions in this source file, and not
- to any specific SSL-layer.
-
- Curl_ssl_ - prefix for generic ones
- Curl_ossl_ - prefix for OpenSSL ones
- Curl_gtls_ - prefix for GnuTLS ones
- Curl_nss_ - prefix for NSS ones
- Curl_qssl_ - prefix for QsoSSL ones
- Curl_gskit_ - prefix for GSKit ones
- Curl_polarssl_ - prefix for PolarSSL ones
- Curl_cyassl_ - prefix for CyaSSL ones
- Curl_schannel_ - prefix for Schannel SSPI ones
- Curl_darwinssl_ - prefix for SecureTransport (Darwin) ones
-
- Note that this source code uses curlssl_* functions, and they are all
- defines/macros #defined by the lib-specific header files.
-
- "SSL/TLS Strong Encryption: An Introduction"
- http://httpd.apache.org/docs-2.0/ssl/ssl_intro.html
-*/
-
-#include "curl_setup.h"
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#include "urldata.h"
-
-#include "vtls.h" /* generic SSL protos etc */
-#include "openssl.h" /* OpenSSL versions */
-#include "gtls.h" /* GnuTLS versions */
-#include "nssg.h" /* NSS versions */
-#include "qssl.h" /* QSOSSL versions */
-#include "gskit.h" /* Global Secure ToolKit versions */
-#include "polarssl.h" /* PolarSSL versions */
-#include "axtls.h" /* axTLS versions */
-#include "cyassl.h" /* CyaSSL versions */
-#include "curl_schannel.h" /* Schannel SSPI version */
-#include "curl_darwinssl.h" /* SecureTransport (Darwin) version */
-#include "slist.h"
-#include "sendf.h"
-#include "rawstr.h"
-#include "url.h"
-#include "curl_memory.h"
-#include "progress.h"
-#include "share.h"
-#include "timeval.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-/* The last #include file should be: */
-#include "memdebug.h"
-
-/* convenience macro to check if this handle is using a shared SSL session */
-#define SSLSESSION_SHARED(data) (data->share && \
- (data->share->specifier & \
- (1<<CURL_LOCK_DATA_SSL_SESSION)))
-
-static bool safe_strequal(char* str1, char* str2)
-{
- if(str1 && str2)
- /* both pointers point to something then compare them */
- return (0 != Curl_raw_equal(str1, str2)) ? TRUE : FALSE;
- else
- /* if both pointers are NULL then treat them as equal */
- return (!str1 && !str2) ? TRUE : FALSE;
-}
-
-bool
-Curl_ssl_config_matches(struct ssl_config_data* data,
- struct ssl_config_data* needle)
-{
- if((data->version == needle->version) &&
- (data->verifypeer == needle->verifypeer) &&
- (data->verifyhost == needle->verifyhost) &&
- safe_strequal(data->CApath, needle->CApath) &&
- safe_strequal(data->CAfile, needle->CAfile) &&
- safe_strequal(data->random_file, needle->random_file) &&
- safe_strequal(data->egdsocket, needle->egdsocket) &&
- safe_strequal(data->cipher_list, needle->cipher_list))
- return TRUE;
-
- return FALSE;
-}
-
-bool
-Curl_clone_ssl_config(struct ssl_config_data *source,
- struct ssl_config_data *dest)
-{
- dest->sessionid = source->sessionid;
- dest->verifyhost = source->verifyhost;
- dest->verifypeer = source->verifypeer;
- dest->version = source->version;
-
- if(source->CAfile) {
- dest->CAfile = strdup(source->CAfile);
- if(!dest->CAfile)
- return FALSE;
- }
- else
- dest->CAfile = NULL;
-
- if(source->CApath) {
- dest->CApath = strdup(source->CApath);
- if(!dest->CApath)
- return FALSE;
- }
- else
- dest->CApath = NULL;
-
- if(source->cipher_list) {
- dest->cipher_list = strdup(source->cipher_list);
- if(!dest->cipher_list)
- return FALSE;
- }
- else
- dest->cipher_list = NULL;
-
- if(source->egdsocket) {
- dest->egdsocket = strdup(source->egdsocket);
- if(!dest->egdsocket)
- return FALSE;
- }
- else
- dest->egdsocket = NULL;
-
- if(source->random_file) {
- dest->random_file = strdup(source->random_file);
- if(!dest->random_file)
- return FALSE;
- }
- else
- dest->random_file = NULL;
-
- return TRUE;
-}
-
-void Curl_free_ssl_config(struct ssl_config_data* sslc)
-{
- Curl_safefree(sslc->CAfile);
- Curl_safefree(sslc->CApath);
- Curl_safefree(sslc->cipher_list);
- Curl_safefree(sslc->egdsocket);
- Curl_safefree(sslc->random_file);
-}
-
-
-/*
- * Curl_rand() returns a random unsigned integer, 32bit.
- *
- * This non-SSL function is put here only because this file is the only one
- * with knowledge of what the underlying SSL libraries provide in terms of
- * randomizers.
- *
- * NOTE: 'data' may be passed in as NULL when coming from external API without
- * easy handle!
- *
- */
-
-unsigned int Curl_rand(struct SessionHandle *data)
-{
- unsigned int r;
- static unsigned int randseed;
- static bool seeded = FALSE;
-
-#ifdef CURLDEBUG
- char *force_entropy = getenv("CURL_ENTROPY");
- if(force_entropy) {
- if(!seeded) {
- size_t elen = strlen(force_entropy);
- size_t clen = sizeof(randseed);
- size_t min = elen < clen ? elen : clen;
- memcpy((char *)&randseed, force_entropy, min);
- seeded = TRUE;
- }
- else
- randseed++;
- return randseed;
- }
-#endif
-
- /* data may be NULL! */
- if(!Curl_ssl_random(data, (unsigned char *)&r, sizeof(r)))
- return r;
-
- /* If Curl_ssl_random() returns non-zero it couldn't offer randomness and we
- instead perform a "best effort" */
-
-#ifdef RANDOM_FILE
- if(!seeded) {
- /* if there's a random file to read a seed from, use it */
- int fd = open(RANDOM_FILE, O_RDONLY);
- if(fd > -1) {
- /* read random data into the randseed variable */
- ssize_t nread = read(fd, &randseed, sizeof(randseed));
- if(nread == sizeof(randseed))
- seeded = TRUE;
- close(fd);
- }
- }
-#endif
-
- if(!seeded) {
- struct timeval now = curlx_tvnow();
- infof(data, "WARNING: Using weak random seed\n");
- randseed += (unsigned int)now.tv_usec + (unsigned int)now.tv_sec;
- randseed = randseed * 1103515245 + 12345;
- randseed = randseed * 1103515245 + 12345;
- randseed = randseed * 1103515245 + 12345;
- seeded = TRUE;
- }
-
- /* Return an unsigned 32-bit pseudo-random number. */
- r = randseed = randseed * 1103515245 + 12345;
- return (r << 16) | ((r >> 16) & 0xFFFF);
-}
-
-int Curl_ssl_backend(void)
-{
- return (int)CURL_SSL_BACKEND;
-}
-
-#ifdef USE_SSL
-
-/* "global" init done? */
-static bool init_ssl=FALSE;
-
-/**
- * Global SSL init
- *
- * @retval 0 error initializing SSL
- * @retval 1 SSL initialized successfully
- */
-int Curl_ssl_init(void)
-{
- /* make sure this is only done once */
- if(init_ssl)
- return 1;
- init_ssl = TRUE; /* never again */
-
- return curlssl_init();
-}
-
-
-/* Global cleanup */
-void Curl_ssl_cleanup(void)
-{
- if(init_ssl) {
- /* only cleanup if we did a previous init */
- curlssl_cleanup();
- init_ssl = FALSE;
- }
-}
-
-CURLcode
-Curl_ssl_connect(struct connectdata *conn, int sockindex)
-{
- CURLcode res;
- /* mark this is being ssl-enabled from here on. */
- conn->ssl[sockindex].use = TRUE;
- conn->ssl[sockindex].state = ssl_connection_negotiating;
-
- res = curlssl_connect(conn, sockindex);
-
- if(!res)
- Curl_pgrsTime(conn->data, TIMER_APPCONNECT); /* SSL is connected */
-
- return res;
-}
-
-CURLcode
-Curl_ssl_connect_nonblocking(struct connectdata *conn, int sockindex,
- bool *done)
-{
- CURLcode res;
- /* mark this is being ssl requested from here on. */
- conn->ssl[sockindex].use = TRUE;
-#ifdef curlssl_connect_nonblocking
- res = curlssl_connect_nonblocking(conn, sockindex, done);
-#else
- *done = TRUE; /* fallback to BLOCKING */
- res = curlssl_connect(conn, sockindex);
-#endif /* non-blocking connect support */
- if(!res && *done)
- Curl_pgrsTime(conn->data, TIMER_APPCONNECT); /* SSL is connected */
- return res;
-}
-
-/*
- * Check if there's a session ID for the given connection in the cache, and if
- * there's one suitable, it is provided. Returns TRUE when no entry matched.
- */
-int Curl_ssl_getsessionid(struct connectdata *conn,
- void **ssl_sessionid,
- size_t *idsize) /* set 0 if unknown */
-{
- struct curl_ssl_session *check;
- struct SessionHandle *data = conn->data;
- size_t i;
- long *general_age;
- bool no_match = TRUE;
-
- *ssl_sessionid = NULL;
-
- if(!conn->ssl_config.sessionid)
- /* session ID re-use is disabled */
- return TRUE;
-
- /* Lock if shared */
- if(SSLSESSION_SHARED(data)) {
- Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SINGLE);
- general_age = &data->share->sessionage;
- }
- else
- general_age = &data->state.sessionage;
-
- for(i = 0; i < data->set.ssl.max_ssl_sessions; i++) {
- check = &data->state.session[i];
- if(!check->sessionid)
- /* not session ID means blank entry */
- continue;
- if(Curl_raw_equal(conn->host.name, check->name) &&
- (conn->remote_port == check->remote_port) &&
- Curl_ssl_config_matches(&conn->ssl_config, &check->ssl_config)) {
- /* yes, we have a session ID! */
- (*general_age)++; /* increase general age */
- check->age = *general_age; /* set this as used in this age */
- *ssl_sessionid = check->sessionid;
- if(idsize)
- *idsize = check->idsize;
- no_match = FALSE;
- break;
- }
- }
-
- /* Unlock */
- if(SSLSESSION_SHARED(data))
- Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
-
- return no_match;
-}
-
-/*
- * Kill a single session ID entry in the cache.
- */
-void Curl_ssl_kill_session(struct curl_ssl_session *session)
-{
- if(session->sessionid) {
- /* defensive check */
-
- /* free the ID the SSL-layer specific way */
- curlssl_session_free(session->sessionid);
-
- session->sessionid = NULL;
- session->age = 0; /* fresh */
-
- Curl_free_ssl_config(&session->ssl_config);
-
- Curl_safefree(session->name);
- }
-}
-
-/*
- * Delete the given session ID from the cache.
- */
-void Curl_ssl_delsessionid(struct connectdata *conn, void *ssl_sessionid)
-{
- size_t i;
- struct SessionHandle *data=conn->data;
-
- if(SSLSESSION_SHARED(data))
- Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SINGLE);
-
- for(i = 0; i < data->set.ssl.max_ssl_sessions; i++) {
- struct curl_ssl_session *check = &data->state.session[i];
-
- if(check->sessionid == ssl_sessionid) {
- Curl_ssl_kill_session(check);
- break;
- }
- }
-
- if(SSLSESSION_SHARED(data))
- Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
-}
-
-/*
- * Store session id in the session cache. The ID passed on to this function
- * must already have been extracted and allocated the proper way for the SSL
- * layer. Curl_XXXX_session_free() will be called to free/kill the session ID
- * later on.
- */
-CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
- void *ssl_sessionid,
- size_t idsize)
-{
- size_t i;
- struct SessionHandle *data=conn->data; /* the mother of all structs */
- struct curl_ssl_session *store = &data->state.session[0];
- long oldest_age=data->state.session[0].age; /* zero if unused */
- char *clone_host;
- long *general_age;
-
- /* Even though session ID re-use might be disabled, that only disables USING
- IT. We still store it here in case the re-using is again enabled for an
- upcoming transfer */
-
- clone_host = strdup(conn->host.name);
- if(!clone_host)
- return CURLE_OUT_OF_MEMORY; /* bail out */
-
- /* Now we should add the session ID and the host name to the cache, (remove
- the oldest if necessary) */
-
- /* If using shared SSL session, lock! */
- if(SSLSESSION_SHARED(data)) {
- Curl_share_lock(data, CURL_LOCK_DATA_SSL_SESSION, CURL_LOCK_ACCESS_SINGLE);
- general_age = &data->share->sessionage;
- }
- else {
- general_age = &data->state.sessionage;
- }
-
- /* find an empty slot for us, or find the oldest */
- for(i = 1; (i < data->set.ssl.max_ssl_sessions) &&
- data->state.session[i].sessionid; i++) {
- if(data->state.session[i].age < oldest_age) {
- oldest_age = data->state.session[i].age;
- store = &data->state.session[i];
- }
- }
- if(i == data->set.ssl.max_ssl_sessions)
- /* cache is full, we must "kill" the oldest entry! */
- Curl_ssl_kill_session(store);
- else
- store = &data->state.session[i]; /* use this slot */
-
- /* now init the session struct wisely */
- store->sessionid = ssl_sessionid;
- store->idsize = idsize;
- store->age = *general_age; /* set current age */
- if(store->name)
- /* free it if there's one already present */
- free(store->name);
- store->name = clone_host; /* clone host name */
- store->remote_port = conn->remote_port; /* port number */
-
-
- /* Unlock */
- if(SSLSESSION_SHARED(data))
- Curl_share_unlock(data, CURL_LOCK_DATA_SSL_SESSION);
-
- if(!Curl_clone_ssl_config(&conn->ssl_config, &store->ssl_config)) {
- store->sessionid = NULL; /* let caller free sessionid */
- free(clone_host);
- return CURLE_OUT_OF_MEMORY;
- }
-
- return CURLE_OK;
-}
-
-
-void Curl_ssl_close_all(struct SessionHandle *data)
-{
- size_t i;
- /* kill the session ID cache if not shared */
- if(data->state.session && !SSLSESSION_SHARED(data)) {
- for(i = 0; i < data->set.ssl.max_ssl_sessions; i++)
- /* the single-killer function handles empty table slots */
- Curl_ssl_kill_session(&data->state.session[i]);
-
- /* free the cache data */
- Curl_safefree(data->state.session);
- }
-
- curlssl_close_all(data);
-}
-
-void Curl_ssl_close(struct connectdata *conn, int sockindex)
-{
- DEBUGASSERT((sockindex <= 1) && (sockindex >= -1));
- curlssl_close(conn, sockindex);
-}
-
-CURLcode Curl_ssl_shutdown(struct connectdata *conn, int sockindex)
-{
- if(curlssl_shutdown(conn, sockindex))
- return CURLE_SSL_SHUTDOWN_FAILED;
-
- conn->ssl[sockindex].use = FALSE; /* get back to ordinary socket usage */
- conn->ssl[sockindex].state = ssl_connection_none;
-
- conn->recv[sockindex] = Curl_recv_plain;
- conn->send[sockindex] = Curl_send_plain;
-
- return CURLE_OK;
-}
-
-/* Selects an SSL crypto engine
- */
-CURLcode Curl_ssl_set_engine(struct SessionHandle *data, const char *engine)
-{
- return curlssl_set_engine(data, engine);
-}
-
-/* Selects the default SSL crypto engine
- */
-CURLcode Curl_ssl_set_engine_default(struct SessionHandle *data)
-{
- return curlssl_set_engine_default(data);
-}
-
-/* Return list of OpenSSL crypto engine names. */
-struct curl_slist *Curl_ssl_engines_list(struct SessionHandle *data)
-{
- return curlssl_engines_list(data);
-}
-
-/*
- * This sets up a session ID cache to the specified size. Make sure this code
- * is agnostic to what underlying SSL technology we use.
- */
-CURLcode Curl_ssl_initsessions(struct SessionHandle *data, size_t amount)
-{
- struct curl_ssl_session *session;
-
- if(data->state.session)
- /* this is just a precaution to prevent multiple inits */
- return CURLE_OK;
-
- session = calloc(amount, sizeof(struct curl_ssl_session));
- if(!session)
- return CURLE_OUT_OF_MEMORY;
-
- /* store the info in the SSL section */
- data->set.ssl.max_ssl_sessions = amount;
- data->state.session = session;
- data->state.sessionage = 1; /* this is brand new */
- return CURLE_OK;
-}
-
-size_t Curl_ssl_version(char *buffer, size_t size)
-{
- return curlssl_version(buffer, size);
-}
-
-/*
- * This function tries to determine connection status.
- *
- * Return codes:
- * 1 means the connection is still in place
- * 0 means the connection has been closed
- * -1 means the connection status is unknown
- */
-int Curl_ssl_check_cxn(struct connectdata *conn)
-{
- return curlssl_check_cxn(conn);
-}
-
-bool Curl_ssl_data_pending(const struct connectdata *conn,
- int connindex)
-{
- return curlssl_data_pending(conn, connindex);
-}
-
-void Curl_ssl_free_certinfo(struct SessionHandle *data)
-{
- int i;
- struct curl_certinfo *ci = &data->info.certs;
- if(ci->num_of_certs) {
- /* free all individual lists used */
- for(i=0; i<ci->num_of_certs; i++) {
- curl_slist_free_all(ci->certinfo[i]);
- ci->certinfo[i] = NULL;
- }
- free(ci->certinfo); /* free the actual array too */
- ci->certinfo = NULL;
- ci->num_of_certs = 0;
- }
-}
-
-int Curl_ssl_init_certinfo(struct SessionHandle * data,
- int num)
-{
- struct curl_certinfo * ci = &data->info.certs;
- struct curl_slist * * table;
-
- /* Initialize the certificate information structures. Return 0 if OK, else 1.
- */
- Curl_ssl_free_certinfo(data);
- ci->num_of_certs = num;
- table = calloc((size_t) num, sizeof(struct curl_slist *));
- if(!table)
- return 1;
-
- ci->certinfo = table;
- return 0;
-}
-
-/*
- * 'value' is NOT a zero terminated string
- */
-CURLcode Curl_ssl_push_certinfo_len(struct SessionHandle *data,
- int certnum,
- const char *label,
- const char *value,
- size_t valuelen)
-{
- struct curl_certinfo * ci = &data->info.certs;
- char * output;
- struct curl_slist * nl;
- CURLcode res = CURLE_OK;
- size_t labellen = strlen(label);
- size_t outlen = labellen + 1 + valuelen + 1; /* label:value\0 */
-
- output = malloc(outlen);
- if(!output)
- return CURLE_OUT_OF_MEMORY;
-
- /* sprintf the label and colon */
- snprintf(output, outlen, "%s:", label);
-
- /* memcpy the value (it might not be zero terminated) */
- memcpy(&output[labellen+1], value, valuelen);
-
- /* zero terminate the output */
- output[labellen + 1 + valuelen] = 0;
-
- nl = Curl_slist_append_nodup(ci->certinfo[certnum], output);
- if(!nl) {
- free(output);
- curl_slist_free_all(ci->certinfo[certnum]);
- res = CURLE_OUT_OF_MEMORY;
- }
-
- ci->certinfo[certnum] = nl;
- return res;
-}
-
-/*
- * This is a convenience function for push_certinfo_len that takes a zero
- * terminated value.
- */
-CURLcode Curl_ssl_push_certinfo(struct SessionHandle *data,
- int certnum,
- const char *label,
- const char *value)
-{
- size_t valuelen = strlen(value);
-
- return Curl_ssl_push_certinfo_len(data, certnum, label, value, valuelen);
-}
-
-int Curl_ssl_random(struct SessionHandle *data,
- unsigned char *entropy,
- size_t length)
-{
- return curlssl_random(data, entropy, length);
-}
-
-#ifdef have_curlssl_md5sum
-void Curl_ssl_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum, /* output */
- size_t md5len)
-{
- curlssl_md5sum(tmp, tmplen, md5sum, md5len);
-}
-#endif
-
-#endif /* USE_SSL */
diff --git a/external/libcurl_android/jni/libcurl/lib/vtls/vtls.h b/external/libcurl_android/jni/libcurl/lib/vtls/vtls.h
deleted file mode 100755
index e21fdef9..00000000
--- a/external/libcurl_android/jni/libcurl/lib/vtls/vtls.h
+++ /dev/null
@@ -1,132 +0,0 @@
-#ifndef HEADER_CURL_VTLS_H
-#define HEADER_CURL_VTLS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "curl_setup.h"
-
-#ifndef MD5_DIGEST_LENGTH
-#define MD5_DIGEST_LENGTH 16 /* fixed size */
-#endif
-
-/* see http://tools.ietf.org/html/draft-ietf-tls-applayerprotoneg-04 */
-#define ALPN_HTTP_1_1_LENGTH 8
-#define ALPN_HTTP_1_1 "http/1.1"
-
-bool Curl_ssl_config_matches(struct ssl_config_data* data,
- struct ssl_config_data* needle);
-bool Curl_clone_ssl_config(struct ssl_config_data* source,
- struct ssl_config_data* dest);
-void Curl_free_ssl_config(struct ssl_config_data* sslc);
-
-unsigned int Curl_rand(struct SessionHandle *);
-
-int Curl_ssl_backend(void);
-
-#ifdef USE_SSL
-int Curl_ssl_init(void);
-void Curl_ssl_cleanup(void);
-CURLcode Curl_ssl_connect(struct connectdata *conn, int sockindex);
-CURLcode Curl_ssl_connect_nonblocking(struct connectdata *conn,
- int sockindex,
- bool *done);
-/* tell the SSL stuff to close down all open information regarding
- connections (and thus session ID caching etc) */
-void Curl_ssl_close_all(struct SessionHandle *data);
-void Curl_ssl_close(struct connectdata *conn, int sockindex);
-CURLcode Curl_ssl_shutdown(struct connectdata *conn, int sockindex);
-CURLcode Curl_ssl_set_engine(struct SessionHandle *data, const char *engine);
-/* Sets engine as default for all SSL operations */
-CURLcode Curl_ssl_set_engine_default(struct SessionHandle *data);
-struct curl_slist *Curl_ssl_engines_list(struct SessionHandle *data);
-
-/* init the SSL session ID cache */
-CURLcode Curl_ssl_initsessions(struct SessionHandle *, size_t);
-size_t Curl_ssl_version(char *buffer, size_t size);
-bool Curl_ssl_data_pending(const struct connectdata *conn,
- int connindex);
-int Curl_ssl_check_cxn(struct connectdata *conn);
-
-/* Certificate information list handling. */
-
-void Curl_ssl_free_certinfo(struct SessionHandle *data);
-int Curl_ssl_init_certinfo(struct SessionHandle * data, int num);
-CURLcode Curl_ssl_push_certinfo_len(struct SessionHandle * data, int certnum,
- const char * label, const char * value,
- size_t valuelen);
-CURLcode Curl_ssl_push_certinfo(struct SessionHandle * data, int certnum,
- const char * label, const char * value);
-
-/* Functions to be used by SSL library adaptation functions */
-
-/* extract a session ID */
-int Curl_ssl_getsessionid(struct connectdata *conn,
- void **ssl_sessionid,
- size_t *idsize) /* set 0 if unknown */;
-/* add a new session ID */
-CURLcode Curl_ssl_addsessionid(struct connectdata *conn,
- void *ssl_sessionid,
- size_t idsize);
-/* Kill a single session ID entry in the cache */
-void Curl_ssl_kill_session(struct curl_ssl_session *session);
-/* delete a session from the cache */
-void Curl_ssl_delsessionid(struct connectdata *conn, void *ssl_sessionid);
-
-/* get N random bytes into the buffer, return 0 if a find random is filled
- in */
-int Curl_ssl_random(struct SessionHandle *data, unsigned char *buffer,
- size_t length);
-void Curl_ssl_md5sum(unsigned char *tmp, /* input */
- size_t tmplen,
- unsigned char *md5sum, /* output */
- size_t md5len);
-
-#define SSL_SHUTDOWN_TIMEOUT 10000 /* ms */
-
-#ifdef have_curlssl_md5sum
-#define HAVE_CURL_SSL_MD5SUM
-#endif
-
-#else
-/* When SSL support is not present, just define away these function calls */
-#define Curl_ssl_init() 1
-#define Curl_ssl_cleanup() Curl_nop_stmt
-#define Curl_ssl_connect(x,y) CURLE_NOT_BUILT_IN
-#define Curl_ssl_close_all(x) Curl_nop_stmt
-#define Curl_ssl_close(x,y) Curl_nop_stmt
-#define Curl_ssl_shutdown(x,y) CURLE_NOT_BUILT_IN
-#define Curl_ssl_set_engine(x,y) CURLE_NOT_BUILT_IN
-#define Curl_ssl_set_engine_default(x) CURLE_NOT_BUILT_IN
-#define Curl_ssl_engines_list(x) NULL
-#define Curl_ssl_send(a,b,c,d,e) -1
-#define Curl_ssl_recv(a,b,c,d,e) -1
-#define Curl_ssl_initsessions(x,y) CURLE_OK
-#define Curl_ssl_version(x,y) 0
-#define Curl_ssl_data_pending(x,y) 0
-#define Curl_ssl_check_cxn(x) 0
-#define Curl_ssl_free_certinfo(x) Curl_nop_stmt
-#define Curl_ssl_connect_nonblocking(x,y,z) CURLE_NOT_BUILT_IN
-#define Curl_ssl_kill_session(x) Curl_nop_stmt
-#define Curl_ssl_random(x,y,z) CURLE_NOT_BUILT_IN
-#define CURL_SSL_BACKEND CURLSSLBACKEND_NONE
-#endif
-
-#endif /* HEADER_CURL_VTLS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/warnless.c b/external/libcurl_android/jni/libcurl/lib/warnless.c
deleted file mode 100755
index 8c130d34..00000000
--- a/external/libcurl_android/jni/libcurl/lib/warnless.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(__INTEL_COMPILER) && defined(__unix__)
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#endif /* __INTEL_COMPILER && __unix__ */
-
-#define BUILDING_WARNLESS_C 1
-
-#include "warnless.h"
-
-#define CURL_MASK_SCHAR 0x7F
-#define CURL_MASK_UCHAR 0xFF
-
-#if (SIZEOF_SHORT == 2)
-# define CURL_MASK_SSHORT 0x7FFF
-# define CURL_MASK_USHORT 0xFFFF
-#elif (SIZEOF_SHORT == 4)
-# define CURL_MASK_SSHORT 0x7FFFFFFF
-# define CURL_MASK_USHORT 0xFFFFFFFF
-#elif (SIZEOF_SHORT == 8)
-# define CURL_MASK_SSHORT 0x7FFFFFFFFFFFFFFF
-# define CURL_MASK_USHORT 0xFFFFFFFFFFFFFFFF
-#else
-# error "SIZEOF_SHORT not defined"
-#endif
-
-#if (SIZEOF_INT == 2)
-# define CURL_MASK_SINT 0x7FFF
-# define CURL_MASK_UINT 0xFFFF
-#elif (SIZEOF_INT == 4)
-# define CURL_MASK_SINT 0x7FFFFFFF
-# define CURL_MASK_UINT 0xFFFFFFFF
-#elif (SIZEOF_INT == 8)
-# define CURL_MASK_SINT 0x7FFFFFFFFFFFFFFF
-# define CURL_MASK_UINT 0xFFFFFFFFFFFFFFFF
-#elif (SIZEOF_INT == 16)
-# define CURL_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-# define CURL_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-#else
-# error "SIZEOF_INT not defined"
-#endif
-
-#if (CURL_SIZEOF_LONG == 2)
-# define CURL_MASK_SLONG 0x7FFFL
-# define CURL_MASK_ULONG 0xFFFFUL
-#elif (CURL_SIZEOF_LONG == 4)
-# define CURL_MASK_SLONG 0x7FFFFFFFL
-# define CURL_MASK_ULONG 0xFFFFFFFFUL
-#elif (CURL_SIZEOF_LONG == 8)
-# define CURL_MASK_SLONG 0x7FFFFFFFFFFFFFFFL
-# define CURL_MASK_ULONG 0xFFFFFFFFFFFFFFFFUL
-#elif (CURL_SIZEOF_LONG == 16)
-# define CURL_MASK_SLONG 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL
-# define CURL_MASK_ULONG 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUL
-#else
-# error "CURL_SIZEOF_LONG not defined"
-#endif
-
-#if (CURL_SIZEOF_CURL_OFF_T == 2)
-# define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFF)
-# define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFF)
-#elif (CURL_SIZEOF_CURL_OFF_T == 4)
-# define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFF)
-# define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFF)
-#elif (CURL_SIZEOF_CURL_OFF_T == 8)
-# define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFFFFFFFFFF)
-# define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFFFFFFFFFF)
-#elif (CURL_SIZEOF_CURL_OFF_T == 16)
-# define CURL_MASK_SCOFFT CURL_OFF_T_C(0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
-# define CURL_MASK_UCOFFT CURL_OFF_TU_C(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF)
-#else
-# error "CURL_SIZEOF_CURL_OFF_T not defined"
-#endif
-
-#if (SIZEOF_SIZE_T == SIZEOF_SHORT)
-# define CURL_MASK_SSIZE_T CURL_MASK_SSHORT
-# define CURL_MASK_USIZE_T CURL_MASK_USHORT
-#elif (SIZEOF_SIZE_T == SIZEOF_INT)
-# define CURL_MASK_SSIZE_T CURL_MASK_SINT
-# define CURL_MASK_USIZE_T CURL_MASK_UINT
-#elif (SIZEOF_SIZE_T == CURL_SIZEOF_LONG)
-# define CURL_MASK_SSIZE_T CURL_MASK_SLONG
-# define CURL_MASK_USIZE_T CURL_MASK_ULONG
-#elif (SIZEOF_SIZE_T == CURL_SIZEOF_CURL_OFF_T)
-# define CURL_MASK_SSIZE_T CURL_MASK_SCOFFT
-# define CURL_MASK_USIZE_T CURL_MASK_UCOFFT
-#else
-# error "SIZEOF_SIZE_T not defined"
-#endif
-
-/*
-** unsigned long to unsigned short
-*/
-
-unsigned short curlx_ultous(unsigned long ulnum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_USHORT);
- return (unsigned short)(ulnum & (unsigned long) CURL_MASK_USHORT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned long to unsigned char
-*/
-
-unsigned char curlx_ultouc(unsigned long ulnum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_UCHAR);
- return (unsigned char)(ulnum & (unsigned long) CURL_MASK_UCHAR);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned long to signed int
-*/
-
-int curlx_ultosi(unsigned long ulnum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(ulnum <= (unsigned long) CURL_MASK_SINT);
- return (int)(ulnum & (unsigned long) CURL_MASK_SINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned size_t to signed curl_off_t
-*/
-
-curl_off_t curlx_uztoso(size_t uznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(uznum <= (size_t) CURL_MASK_SCOFFT);
- return (curl_off_t)(uznum & (size_t) CURL_MASK_SCOFFT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned size_t to signed int
-*/
-
-int curlx_uztosi(size_t uznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(uznum <= (size_t) CURL_MASK_SINT);
- return (int)(uznum & (size_t) CURL_MASK_SINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned size_t to unsigned long
-*/
-
-unsigned long curlx_uztoul(size_t uznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
-#if (CURL_SIZEOF_LONG < SIZEOF_SIZE_T)
- DEBUGASSERT(uznum <= (size_t) CURL_MASK_ULONG);
-#endif
- return (unsigned long)(uznum & (size_t) CURL_MASK_ULONG);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned size_t to unsigned int
-*/
-
-unsigned int curlx_uztoui(size_t uznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
-#if (SIZEOF_INT < SIZEOF_SIZE_T)
- DEBUGASSERT(uznum <= (size_t) CURL_MASK_UINT);
-#endif
- return (unsigned int)(uznum & (size_t) CURL_MASK_UINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed long to signed int
-*/
-
-int curlx_sltosi(long slnum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(slnum >= 0);
-#if (SIZEOF_INT < CURL_SIZEOF_LONG)
- DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_SINT);
-#endif
- return (int)(slnum & (long) CURL_MASK_SINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed long to unsigned int
-*/
-
-unsigned int curlx_sltoui(long slnum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(slnum >= 0);
-#if (SIZEOF_INT < CURL_SIZEOF_LONG)
- DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_UINT);
-#endif
- return (unsigned int)(slnum & (long) CURL_MASK_UINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed long to unsigned short
-*/
-
-unsigned short curlx_sltous(long slnum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(slnum >= 0);
- DEBUGASSERT((unsigned long) slnum <= (unsigned long) CURL_MASK_USHORT);
- return (unsigned short)(slnum & (long) CURL_MASK_USHORT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned size_t to signed ssize_t
-*/
-
-ssize_t curlx_uztosz(size_t uznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(uznum <= (size_t) CURL_MASK_SSIZE_T);
- return (ssize_t)(uznum & (size_t) CURL_MASK_SSIZE_T);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed curl_off_t to unsigned size_t
-*/
-
-size_t curlx_sotouz(curl_off_t sonum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(sonum >= 0);
- return (size_t)(sonum & (curl_off_t) CURL_MASK_USIZE_T);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed ssize_t to signed int
-*/
-
-int curlx_sztosi(ssize_t sznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(sznum >= 0);
-#if (SIZEOF_INT < SIZEOF_SIZE_T)
- DEBUGASSERT((size_t) sznum <= (size_t) CURL_MASK_SINT);
-#endif
- return (int)(sznum & (ssize_t) CURL_MASK_SINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed int to unsigned size_t
-*/
-
-size_t curlx_sitouz(int sinum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(sinum >= 0);
- return (size_t) sinum;
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-#ifdef USE_WINSOCK
-
-/*
-** curl_socket_t to signed int
-*/
-
-int curlx_sktosi(curl_socket_t s)
-{
- return (int)((ssize_t) s);
-}
-
-/*
-** signed int to curl_socket_t
-*/
-
-curl_socket_t curlx_sitosk(int i)
-{
- return (curl_socket_t)((ssize_t) i);
-}
-
-#endif /* USE_WINSOCK */
-
-#if defined(WIN32) || defined(_WIN32)
-
-ssize_t curlx_read(int fd, void *buf, size_t count)
-{
- return (ssize_t)read(fd, buf, curlx_uztoui(count));
-}
-
-ssize_t curlx_write(int fd, const void *buf, size_t count)
-{
- return (ssize_t)write(fd, buf, curlx_uztoui(count));
-}
-
-#endif /* WIN32 || _WIN32 */
-
-#if defined(__INTEL_COMPILER) && defined(__unix__)
-
-int curlx_FD_ISSET(int fd, fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:1469) /* clobber ignored */
- return FD_ISSET(fd, fdset);
- #pragma warning(pop)
-}
-
-void curlx_FD_SET(int fd, fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:1469) /* clobber ignored */
- FD_SET(fd, fdset);
- #pragma warning(pop)
-}
-
-void curlx_FD_ZERO(fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:593) /* variable was set but never used */
- FD_ZERO(fdset);
- #pragma warning(pop)
-}
-
-unsigned short curlx_htons(unsigned short usnum)
-{
-#if (__INTEL_COMPILER == 910) && defined(__i386__)
- return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
-#else
- #pragma warning(push)
- #pragma warning(disable:810) /* conversion may lose significant bits */
- return htons(usnum);
- #pragma warning(pop)
-#endif
-}
-
-unsigned short curlx_ntohs(unsigned short usnum)
-{
-#if (__INTEL_COMPILER == 910) && defined(__i386__)
- return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
-#else
- #pragma warning(push)
- #pragma warning(disable:810) /* conversion may lose significant bits */
- return ntohs(usnum);
- #pragma warning(pop)
-#endif
-}
-
-#endif /* __INTEL_COMPILER && __unix__ */
diff --git a/external/libcurl_android/jni/libcurl/lib/warnless.h b/external/libcurl_android/jni/libcurl/lib/warnless.h
deleted file mode 100755
index ad77d3c2..00000000
--- a/external/libcurl_android/jni/libcurl/lib/warnless.h
+++ /dev/null
@@ -1,107 +0,0 @@
-#ifndef HEADER_CURL_WARNLESS_H
-#define HEADER_CURL_WARNLESS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#ifdef USE_WINSOCK
-#include <curl/curl.h> /* for curl_socket_t */
-#endif
-
-unsigned short curlx_ultous(unsigned long ulnum);
-
-unsigned char curlx_ultouc(unsigned long ulnum);
-
-int curlx_ultosi(unsigned long ulnum);
-
-int curlx_uztosi(size_t uznum);
-
-curl_off_t curlx_uztoso(size_t uznum);
-
-unsigned long curlx_uztoul(size_t uznum);
-
-unsigned int curlx_uztoui(size_t uznum);
-
-int curlx_sltosi(long slnum);
-
-unsigned int curlx_sltoui(long slnum);
-
-unsigned short curlx_sltous(long slnum);
-
-ssize_t curlx_uztosz(size_t uznum);
-
-size_t curlx_sotouz(curl_off_t sonum);
-
-int curlx_sztosi(ssize_t sznum);
-
-size_t curlx_sitouz(int sinum);
-
-#ifdef USE_WINSOCK
-
-int curlx_sktosi(curl_socket_t s);
-
-curl_socket_t curlx_sitosk(int i);
-
-#endif /* USE_WINSOCK */
-
-#if defined(WIN32) || defined(_WIN32)
-
-ssize_t curlx_read(int fd, void *buf, size_t count);
-
-ssize_t curlx_write(int fd, const void *buf, size_t count);
-
-#ifndef BUILDING_WARNLESS_C
-# undef read
-# define read(fd, buf, count) curlx_read(fd, buf, count)
-# undef write
-# define write(fd, buf, count) curlx_write(fd, buf, count)
-#endif
-
-#endif /* WIN32 || _WIN32 */
-
-#if defined(__INTEL_COMPILER) && defined(__unix__)
-
-int curlx_FD_ISSET(int fd, fd_set *fdset);
-
-void curlx_FD_SET(int fd, fd_set *fdset);
-
-void curlx_FD_ZERO(fd_set *fdset);
-
-unsigned short curlx_htons(unsigned short usnum);
-
-unsigned short curlx_ntohs(unsigned short usnum);
-
-#ifndef BUILDING_WARNLESS_C
-# undef FD_ISSET
-# define FD_ISSET(a,b) curlx_FD_ISSET((a),(b))
-# undef FD_SET
-# define FD_SET(a,b) curlx_FD_SET((a),(b))
-# undef FD_ZERO
-# define FD_ZERO(a) curlx_FD_ZERO((a))
-# undef htons
-# define htons(a) curlx_htons((a))
-# undef ntohs
-# define ntohs(a) curlx_ntohs((a))
-#endif
-
-#endif /* __INTEL_COMPILER && __unix__ */
-
-#endif /* HEADER_CURL_WARNLESS_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/wildcard.c b/external/libcurl_android/jni/libcurl/lib/wildcard.c
deleted file mode 100755
index 7130d5e4..00000000
--- a/external/libcurl_android/jni/libcurl/lib/wildcard.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#include "wildcard.h"
-#include "llist.h"
-#include "fileinfo.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-CURLcode Curl_wildcard_init(struct WildcardData *wc)
-{
- DEBUGASSERT(wc->filelist == NULL);
- /* now allocate only wc->filelist, everything else
- will be allocated if it is needed. */
- wc->filelist = Curl_llist_alloc(Curl_fileinfo_dtor);
- if(!wc->filelist) {;
- return CURLE_OUT_OF_MEMORY;
- }
- return CURLE_OK;
-}
-
-void Curl_wildcard_dtor(struct WildcardData *wc)
-{
- if(!wc)
- return;
-
- if(wc->tmp_dtor) {
- wc->tmp_dtor(wc->tmp);
- wc->tmp_dtor = ZERO_NULL;
- wc->tmp = NULL;
- }
- DEBUGASSERT(wc->tmp == NULL);
-
- if(wc->filelist) {
- Curl_llist_destroy(wc->filelist, NULL);
- wc->filelist = NULL;
- }
-
- if(wc->path) {
- free(wc->path);
- wc->path = NULL;
- }
-
- if(wc->pattern) {
- free(wc->pattern);
- wc->pattern = NULL;
- }
-
- wc->customptr = NULL;
- wc->state = CURLWC_INIT;
-}
diff --git a/external/libcurl_android/jni/libcurl/lib/wildcard.h b/external/libcurl_android/jni/libcurl/lib/wildcard.h
deleted file mode 100755
index 16c80ecb..00000000
--- a/external/libcurl_android/jni/libcurl/lib/wildcard.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef HEADER_CURL_WILDCARD_H
-#define HEADER_CURL_WILDCARD_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 2010 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <curl/curl.h>
-
-/* list of wildcard process states */
-typedef enum {
- CURLWC_INIT = 0,
- CURLWC_MATCHING, /* library is trying to get list of addresses for
- downloading */
- CURLWC_DOWNLOADING,
- CURLWC_CLEAN, /* deallocate resources and reset settings */
- CURLWC_SKIP, /* skip over concrete file */
- CURLWC_ERROR, /* error cases */
- CURLWC_DONE /* if is wildcard->state == CURLWC_DONE wildcard loop
- will end */
-} curl_wildcard_states;
-
-typedef void (*curl_wildcard_tmp_dtor)(void *ptr);
-
-/* struct keeping information about wildcard download process */
-struct WildcardData {
- curl_wildcard_states state;
- char *path; /* path to the directory, where we trying wildcard-match */
- char *pattern; /* wildcard pattern */
- struct curl_llist *filelist; /* llist with struct Curl_fileinfo */
- void *tmp; /* pointer to protocol specific temporary data */
- curl_wildcard_tmp_dtor tmp_dtor;
- void *customptr; /* for CURLOPT_CHUNK_DATA pointer */
-};
-
-CURLcode Curl_wildcard_init(struct WildcardData *wc);
-void Curl_wildcard_dtor(struct WildcardData *wc);
-
-struct SessionHandle;
-
-#endif /* HEADER_CURL_WILDCARD_H */
diff --git a/external/libcurl_android/jni/libcurl/lib/x509asn1.c b/external/libcurl_android/jni/libcurl/lib/x509asn1.c
deleted file mode 100755
index 1f87155a..00000000
--- a/external/libcurl_android/jni/libcurl/lib/x509asn1.c
+++ /dev/null
@@ -1,1183 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_QSOSSL) || defined(USE_GSKIT) || defined(USE_NSS)
-
-#include <curl/curl.h>
-#include "urldata.h"
-#include "strequal.h"
-#include "hostcheck.h"
-#include "vtls/vtls.h"
-#include "sendf.h"
-#include "inet_pton.h"
-#include "curl_base64.h"
-#include "x509asn1.h"
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "curl_memory.h"
-/* The last #include file should be: */
-#include "memdebug.h"
-
-
-/* ASN.1 OIDs. */
-static const char cnOID[] = "2.5.4.3"; /* Common name. */
-static const char sanOID[] = "2.5.29.17"; /* Subject alternative name. */
-
-static const curl_OID OIDtable[] = {
- { "1.2.840.10040.4.1", "dsa" },
- { "1.2.840.10040.4.3", "dsa-with-sha1" },
- { "1.2.840.10045.2.1", "ecPublicKey" },
- { "1.2.840.10045.3.0.1", "c2pnb163v1" },
- { "1.2.840.10045.4.1", "ecdsa-with-SHA1" },
- { "1.2.840.10046.2.1", "dhpublicnumber" },
- { "1.2.840.113549.1.1.1", "rsaEncryption" },
- { "1.2.840.113549.1.1.2", "md2WithRSAEncryption" },
- { "1.2.840.113549.1.1.4", "md5WithRSAEncryption" },
- { "1.2.840.113549.1.1.5", "sha1WithRSAEncryption" },
- { "1.2.840.113549.1.1.10", "RSASSA-PSS" },
- { "1.2.840.113549.1.1.14", "sha224WithRSAEncryption" },
- { "1.2.840.113549.1.1.11", "sha256WithRSAEncryption" },
- { "1.2.840.113549.1.1.12", "sha384WithRSAEncryption" },
- { "1.2.840.113549.1.1.13", "sha512WithRSAEncryption" },
- { "1.2.840.113549.2.2", "md2" },
- { "1.2.840.113549.2.5", "md5" },
- { "1.3.14.3.2.26", "sha1" },
- { cnOID, "CN" },
- { "2.5.4.4", "SN" },
- { "2.5.4.5", "serialNumber" },
- { "2.5.4.6", "C" },
- { "2.5.4.7", "L" },
- { "2.5.4.8", "ST" },
- { "2.5.4.9", "streetAddress" },
- { "2.5.4.10", "O" },
- { "2.5.4.11", "OU" },
- { "2.5.4.12", "title" },
- { "2.5.4.13", "description" },
- { "2.5.4.17", "postalCode" },
- { "2.5.4.41", "name" },
- { "2.5.4.42", "givenName" },
- { "2.5.4.43", "initials" },
- { "2.5.4.44", "generationQualifier" },
- { "2.5.4.45", "X500UniqueIdentifier" },
- { "2.5.4.46", "dnQualifier" },
- { "2.5.4.65", "pseudonym" },
- { "1.2.840.113549.1.9.1", "emailAddress" },
- { "2.5.4.72", "role" },
- { sanOID, "subjectAltName" },
- { "2.5.29.18", "issuerAltName" },
- { "2.5.29.19", "basicConstraints" },
- { "2.16.840.1.101.3.4.2.4", "sha224" },
- { "2.16.840.1.101.3.4.2.1", "sha256" },
- { "2.16.840.1.101.3.4.2.2", "sha384" },
- { "2.16.840.1.101.3.4.2.3", "sha512" },
- { (const char *) NULL, (const char *) NULL }
-};
-
-/*
- * Lightweight ASN.1 parser.
- * In particular, it does not check for syntactic/lexical errors.
- * It is intended to support certificate information gathering for SSL backends
- * that offer a mean to get certificates as a whole, but do not supply
- * entry points to get particular certificate sub-fields.
- * Please note there is no pretention here to rewrite a full SSL library.
- */
-
-
-const char * Curl_getASN1Element(curl_asn1Element * elem,
- const char * beg, const char * end)
-{
- unsigned char b;
- unsigned long len;
- curl_asn1Element lelem;
-
- /* Get a single ASN.1 element into `elem', parse ASN.1 string at `beg'
- ending at `end'.
- Returns a pointer in source string after the parsed element, or NULL
- if an error occurs. */
-
- if(beg >= end || !*beg)
- return (const char *) NULL;
-
- /* Process header byte. */
- b = (unsigned char) *beg++;
- elem->constructed = (b & 0x20) != 0;
- elem->class = (b >> 6) & 3;
- b &= 0x1F;
- if(b == 0x1F)
- return (const char *) NULL; /* Long tag values not supported here. */
- elem->tag = b;
-
- /* Process length. */
- if(beg >= end)
- return (const char *) NULL;
- b = (unsigned char) *beg++;
- if(!(b & 0x80))
- len = b;
- else if(!(b &= 0x7F)) {
- /* Unspecified length. Since we have all the data, we can determine the
- effective length by skipping element until an end element is found. */
- if(!elem->constructed)
- return (const char *) NULL;
- elem->beg = beg;
- while(beg < end && *beg) {
- beg = Curl_getASN1Element(&lelem, beg, end);
- if(!beg)
- return (const char *) NULL;
- }
- if(beg >= end)
- return (const char *) NULL;
- elem->end = beg;
- return beg + 1;
- }
- else if(beg + b > end)
- return (const char *) NULL; /* Does not fit in source. */
- else {
- /* Get long length. */
- len = 0;
- do {
- if(len & 0xFF000000L)
- return (const char *) NULL; /* Lengths > 32 bits are not supported. */
- len = (len << 8) | (unsigned char) *beg++;
- } while(--b);
- }
- if((unsigned long) (end - beg) < len)
- return (const char *) NULL; /* Element data does not fit in source. */
- elem->beg = beg;
- elem->end = beg + len;
- return elem->end;
-}
-
-static const curl_OID * searchOID(const char * oid)
-{
- const curl_OID * op;
-
- /* Search the null terminated OID or OID identifier in local table.
- Return the table entry pointer or NULL if not found. */
-
- for(op = OIDtable; op->numoid; op++)
- if(!strcmp(op->numoid, oid) || curl_strequal(op->textoid, oid))
- return op;
-
- return (const curl_OID *) NULL;
-}
-
-static const char * bool2str(const char * beg, const char * end)
-{
- /* Convert an ASN.1 Boolean value into its string representation.
- Return the dynamically allocated string, or NULL if source is not an
- ASN.1 Boolean value. */
-
- if(end - beg != 1)
- return (const char *) NULL;
- return strdup(*beg? "TRUE": "FALSE");
-}
-
-static const char * octet2str(const char * beg, const char * end)
-{
- size_t n = end - beg;
- char * buf;
-
- /* Convert an ASN.1 octet string to a printable string.
- Return the dynamically allocated string, or NULL if an error occurs. */
-
- buf = malloc(3 * n + 1);
- if(buf)
- for(n = 0; beg < end; n += 3)
- snprintf(buf + n, 4, "%02x:", *(const unsigned char *) beg++);
- return buf;
-}
-
-static const char * bit2str(const char * beg, const char * end)
-
-{
- /* Convert an ASN.1 bit string to a printable string.
- Return the dynamically allocated string, or NULL if an error occurs. */
-
- if(++beg > end)
- return (const char *) NULL;
- return octet2str(beg, end);
-}
-
-static const char * int2str(const char * beg, const char * end)
-{
- long val = 0;
- size_t n = end - beg;
-
- /* Convert an ASN.1 integer value into its string representation.
- Return the dynamically allocated string, or NULL if source is not an
- ASN.1 integer value. */
-
- if(!n)
- return (const char *) NULL;
-
- if(n > 4)
- return octet2str(beg, end);
-
- /* Represent integers <= 32-bit as a single value. */
- if(*beg & 0x80)
- val = ~val;
-
- do
- val = (val << 8) | *(const unsigned char *) beg++;
- while(beg < end);
- return curl_maprintf("%s%lx", (val < 0 || val >= 10)? "0x": "", val);
-}
-
-static ssize_t
-utf8asn1str(char * * to, int type, const char * from, const char * end)
-{
- size_t inlength = end - from;
- int size = 1;
- size_t outlength;
- int charsize;
- unsigned int wc;
- char * buf;
-
- /* Perform a lazy conversion from an ASN.1 typed string to UTF8. Allocate the
- destination buffer dynamically. The allocation size will normally be too
- large: this is to avoid buffer overflows.
- Terminate the string with a nul byte and return the converted
- string length. */
-
- *to = (char *) NULL;
- switch (type) {
- case CURL_ASN1_BMP_STRING:
- size = 2;
- break;
- case CURL_ASN1_UNIVERSAL_STRING:
- size = 4;
- break;
- case CURL_ASN1_NUMERIC_STRING:
- case CURL_ASN1_PRINTABLE_STRING:
- case CURL_ASN1_TELETEX_STRING:
- case CURL_ASN1_IA5_STRING:
- case CURL_ASN1_VISIBLE_STRING:
- case CURL_ASN1_UTF8_STRING:
- break;
- default:
- return -1; /* Conversion not supported. */
- }
-
- if(inlength % size)
- return -1; /* Length inconsistent with character size. */
- buf = malloc(4 * (inlength / size) + 1);
- if(!buf)
- return -1; /* Not enough memory. */
-
- if(type == CURL_ASN1_UTF8_STRING) {
- /* Just copy. */
- outlength = inlength;
- if(outlength)
- memcpy(buf, from, outlength);
- }
- else {
- for(outlength = 0; from < end;) {
- wc = 0;
- switch (size) {
- case 4:
- wc = (wc << 8) | *(const unsigned char *) from++;
- wc = (wc << 8) | *(const unsigned char *) from++;
- case 2:
- wc = (wc << 8) | *(const unsigned char *) from++;
- default: /* case 1: */
- wc = (wc << 8) | *(const unsigned char *) from++;
- }
- charsize = 1;
- if(wc >= 0x00000080) {
- if(wc >= 0x00000800) {
- if(wc >= 0x00010000) {
- if(wc >= 0x00200000) {
- free(buf);
- return -1; /* Invalid char. size for target encoding. */
- }
- buf[outlength + 3] = (char) (0x80 | (wc & 0x3F));
- wc = (wc >> 6) | 0x00010000;
- charsize++;
- }
- buf[outlength + 2] = (char) (0x80 | (wc & 0x3F));
- wc = (wc >> 6) | 0x00000800;
- charsize++;
- }
- buf[outlength + 1] = (char) (0x80 | (wc & 0x3F));
- wc = (wc >> 6) | 0x000000C0;
- charsize++;
- }
- buf[outlength] = (char) wc;
- outlength += charsize;
- }
- }
- buf[outlength] = '\0';
- *to = buf;
- return outlength;
-}
-
-static const char * string2str(int type, const char * beg, const char * end)
-{
- char * buf;
-
- /* Convert an ASN.1 String into its UTF-8 string representation.
- Return the dynamically allocated string, or NULL if an error occurs. */
-
- if(utf8asn1str(&buf, type, beg, end) < 0)
- return (const char *) NULL;
- return buf;
-}
-
-static int encodeUint(char * buf, int n, unsigned int x)
-{
- int i = 0;
- unsigned int y = x / 10;
-
- /* Decimal ASCII encode unsigned integer `x' in the `n'-byte buffer at `buf'.
- Return the total number of encoded digits, even if larger than `n'. */
-
- if(y) {
- i += encodeUint(buf, n, y);
- x -= y * 10;
- }
- if(i < n)
- buf[i] = (char) ('0' + x);
- i++;
- if(i < n)
- buf[i] = '\0'; /* Store a terminator if possible. */
- return i;
-}
-
-static int encodeOID(char * buf, int n, const char * beg, const char * end)
-{
- int i = 0;
- unsigned int x;
- unsigned int y;
-
- /* Convert an ASN.1 OID into its dotted string representation.
- Store the result in th `n'-byte buffer at `buf'.
- Return the converted string length, or -1 if an error occurs. */
-
- /* Process the first two numbers. */
- y = *(const unsigned char *) beg++;
- x = y / 40;
- y -= x * 40;
- i += encodeUint(buf + i, n - i, x);
- if(i < n)
- buf[i] = '.';
- i++;
- i += encodeUint(buf + i, n - i, y);
-
- /* Process the trailing numbers. */
- while(beg < end) {
- if(i < n)
- buf[i] = '.';
- i++;
- x = 0;
- do {
- if(x & 0xFF000000)
- return -1;
- y = *(const unsigned char *) beg++;
- x = (x << 7) | (y & 0x7F);
- } while(y & 0x80);
- i += encodeUint(buf + i, n - i, x);
- }
- if(i < n)
- buf[i] = '\0';
- return i;
-}
-
-static const char * OID2str(const char * beg, const char * end, bool symbolic)
-{
- char * buf = (char *) NULL;
- const curl_OID * op;
- int n;
-
- /* Convert an ASN.1 OID into its dotted or symbolic string representation.
- Return the dynamically allocated string, or NULL if an error occurs. */
-
- if(beg < end) {
- n = encodeOID((char *) NULL, -1, beg, end);
- if(n >= 0) {
- buf = malloc(n + 1);
- if(buf) {
- encodeOID(buf, n, beg, end);
- buf[n] = '\0';
-
- if(symbolic) {
- op = searchOID(buf);
- if(op) {
- free(buf);
- buf = strdup(op->textoid);
- }
- }
- }
- }
- }
- return buf;
-}
-
-static const char * GTime2str(const char * beg, const char * end)
-{
- const char * tzp;
- const char * fracp;
- char sec1, sec2;
- size_t fracl;
- size_t tzl;
- const char * sep = "";
-
- /* Convert an ASN.1 Generalized time to a printable string.
- Return the dynamically allocated string, or NULL if an error occurs. */
-
- for(fracp = beg; fracp < end && *fracp >= '0' && *fracp <= '9'; fracp++)
- ;
-
- /* Get seconds digits. */
- sec1 = '0';
- switch (fracp - beg - 12) {
- case 0:
- sec2 = '0';
- break;
- case 2:
- sec1 = fracp[-2];
- case 1:
- sec2 = fracp[-1];
- break;
- default:
- return (const char *) NULL;
- }
-
- /* Scan for timezone, measure fractional seconds. */
- tzp = fracp;
- fracl = 0;
- if(fracp < end && (*fracp == '.' || *fracp == ',')) {
- fracp++;
- do
- tzp++;
- while(tzp < end && *tzp >= '0' && *tzp <= '9');
- /* Strip leading zeroes in fractional seconds. */
- for(fracl = tzp - fracp - 1; fracl && fracp[fracl - 1] == '0'; fracl--)
- ;
- }
-
- /* Process timezone. */
- if(tzp >= end)
- ; /* Nothing to do. */
- else if(*tzp == 'Z') {
- tzp = " GMT";
- end = tzp + 4;
- }
- else {
- sep = " ";
- tzp++;
- }
-
- tzl = end - tzp;
- return curl_maprintf("%.4s-%.2s-%.2s %.2s:%.2s:%c%c%s%.*s%s%.*s",
- beg, beg + 4, beg + 6,
- beg + 8, beg + 10, sec1, sec2,
- fracl? ".": "", fracl, fracp,
- sep, tzl, tzp);
-}
-
-static const char * UTime2str(const char * beg, const char * end)
-{
- const char * tzp;
- size_t tzl;
- const char * sec;
-
- /* Convert an ASN.1 UTC time to a printable string.
- Return the dynamically allocated string, or NULL if an error occurs. */
-
- for(tzp = beg; tzp < end && *tzp >= '0' && *tzp <= '9'; tzp++)
- ;
- /* Get the seconds. */
- sec = beg + 10;
- switch (tzp - sec) {
- case 0:
- sec = "00";
- case 2:
- break;
- default:
- return (const char *) NULL;
- }
-
- /* Process timezone. */
- if(tzp >= end)
- return (const char *) NULL;
- if(*tzp == 'Z') {
- tzp = "GMT";
- end = tzp + 3;
- }
- else
- tzp++;
-
- tzl = end - tzp;
- return curl_maprintf("%u%.2s-%.2s-%.2s %.2s:%.2s:%.2s %.*s",
- 20 - (*beg >= '5'), beg, beg + 2, beg + 4,
- beg + 6, beg + 8, sec,
- tzl, tzp);
-}
-
-const char * Curl_ASN1tostr(curl_asn1Element * elem, int type)
-{
- static const char zero = '\0';
-
- /* Convert an ASN.1 element to a printable string.
- Return the dynamically allocated string, or NULL if an error occurs. */
-
- if(elem->constructed)
- return (const char *) NULL; /* No conversion of structured elements. */
-
- if(!type)
- type = elem->tag; /* Type not forced: use element tag as type. */
-
- switch (type) {
- case CURL_ASN1_BOOLEAN:
- return bool2str(elem->beg, elem->end);
- case CURL_ASN1_INTEGER:
- case CURL_ASN1_ENUMERATED:
- return int2str(elem->beg, elem->end);
- case CURL_ASN1_BIT_STRING:
- return bit2str(elem->beg, elem->end);
- case CURL_ASN1_OCTET_STRING:
- return octet2str(elem->beg, elem->end);
- case CURL_ASN1_NULL:
- return strdup(&zero);
- case CURL_ASN1_OBJECT_IDENTIFIER:
- return OID2str(elem->beg, elem->end, TRUE);
- case CURL_ASN1_UTC_TIME:
- return UTime2str(elem->beg, elem->end);
- case CURL_ASN1_GENERALIZED_TIME:
- return GTime2str(elem->beg, elem->end);
- case CURL_ASN1_UTF8_STRING:
- case CURL_ASN1_NUMERIC_STRING:
- case CURL_ASN1_PRINTABLE_STRING:
- case CURL_ASN1_TELETEX_STRING:
- case CURL_ASN1_IA5_STRING:
- case CURL_ASN1_VISIBLE_STRING:
- case CURL_ASN1_UNIVERSAL_STRING:
- case CURL_ASN1_BMP_STRING:
- return string2str(type, elem->beg, elem->end);
- }
-
- return (const char *) NULL; /* Unsupported. */
-}
-
-static ssize_t encodeDN(char * buf, size_t n, curl_asn1Element * dn)
-{
- curl_asn1Element rdn;
- curl_asn1Element atv;
- curl_asn1Element oid;
- curl_asn1Element value;
- size_t l = 0;
- const char * p1;
- const char * p2;
- const char * p3;
- const char * str;
-
- /* ASCII encode distinguished name at `dn' into the `n'-byte buffer at `buf'.
- Return the total string length, even if larger than `n'. */
-
- for(p1 = dn->beg; p1 < dn->end;) {
- p1 = Curl_getASN1Element(&rdn, p1, dn->end);
- for(p2 = rdn.beg; p2 < rdn.end;) {
- p2 = Curl_getASN1Element(&atv, p2, rdn.end);
- p3 = Curl_getASN1Element(&oid, atv.beg, atv.end);
- Curl_getASN1Element(&value, p3, atv.end);
- str = Curl_ASN1tostr(&oid, 0);
- if(!str)
- return -1;
-
- /* Encode delimiter.
- If attribute has a short uppercase name, delimiter is ", ". */
- if(l) {
- for(p3 = str; isupper(*p3); p3++)
- ;
- for(p3 = (*p3 || p3 - str > 2)? "/": ", "; *p3; p3++) {
- if(l < n)
- buf[l] = *p3;
- l++;
- }
- }
-
- /* Encode attribute name. */
- for(p3 = str; *p3; p3++) {
- if(l < n)
- buf[l] = *p3;
- l++;
- }
- free((char *) str);
-
- /* Generate equal sign. */
- if(l < n)
- buf[l] = '=';
- l++;
-
- /* Generate value. */
- str = Curl_ASN1tostr(&value, 0);
- if(!str)
- return -1;
- for(p3 = str; *p3; p3++) {
- if(l < n)
- buf[l] = *p3;
- l++;
- }
- free((char *) str);
- }
- }
-
- return l;
-}
-
-const char * Curl_DNtostr(curl_asn1Element * dn)
-{
- char * buf = (char *) NULL;
- ssize_t n = encodeDN(buf, 0, dn);
-
- /* Convert an ASN.1 distinguished name into a printable string.
- Return the dynamically allocated string, or NULL if an error occurs. */
-
- if(n >= 0) {
- buf = malloc(n + 1);
- if(buf) {
- encodeDN(buf, n + 1, dn);
- buf[n] = '\0';
- }
- }
- return (const char *) buf;
-}
-
-/*
- * X509 parser.
- */
-
-void Curl_parseX509(curl_X509certificate * cert,
- const char * beg, const char * end)
-{
- curl_asn1Element elem;
- curl_asn1Element tbsCertificate;
- const char * ccp;
- static const char defaultVersion = 0; /* v1. */
-
- /* ASN.1 parse an X509 certificate into structure subfields.
- Syntax is assumed to have already been checked by the SSL backend.
- See RFC 5280. */
-
- cert->certificate.beg = beg;
- cert->certificate.end = end;
-
- /* Get the sequence content. */
- Curl_getASN1Element(&elem, beg, end);
- beg = elem.beg;
- end = elem.end;
-
- /* Get tbsCertificate. */
- beg = Curl_getASN1Element(&tbsCertificate, beg, end);
- /* Skip the signatureAlgorithm. */
- beg = Curl_getASN1Element(&cert->signatureAlgorithm, beg, end);
- /* Get the signatureValue. */
- Curl_getASN1Element(&cert->signature, beg, end);
-
- /* Parse TBSCertificate. */
- beg = tbsCertificate.beg;
- end = tbsCertificate.end;
- /* Get optional version, get serialNumber. */
- cert->version.beg = &defaultVersion;
- cert->version.end = &defaultVersion + sizeof defaultVersion;;
- beg = Curl_getASN1Element(&elem, beg, end);
- if(elem.tag == 0) {
- Curl_getASN1Element(&cert->version, elem.beg, elem.end);
- beg = Curl_getASN1Element(&elem, beg, end);
- }
- cert->serialNumber = elem;
- /* Get signature algorithm. */
- beg = Curl_getASN1Element(&cert->signatureAlgorithm, beg, end);
- /* Get issuer. */
- beg = Curl_getASN1Element(&cert->issuer, beg, end);
- /* Get notBefore and notAfter. */
- beg = Curl_getASN1Element(&elem, beg, end);
- ccp = Curl_getASN1Element(&cert->notBefore, elem.beg, elem.end);
- Curl_getASN1Element(&cert->notAfter, ccp, elem.end);
- /* Get subject. */
- beg = Curl_getASN1Element(&cert->subject, beg, end);
- /* Get subjectPublicKeyAlgorithm and subjectPublicKey. */
- beg = Curl_getASN1Element(&elem, beg, end);
- ccp = Curl_getASN1Element(&cert->subjectPublicKeyAlgorithm,
- elem.beg, elem.end);
- Curl_getASN1Element(&cert->subjectPublicKey, ccp, elem.end);
- /* Get optional issuerUiqueID, subjectUniqueID and extensions. */
- cert->issuerUniqueID.tag = cert->subjectUniqueID.tag = 0;
- cert->extensions.tag = elem.tag = 0;
- cert->issuerUniqueID.beg = cert->issuerUniqueID.end = "";
- cert->subjectUniqueID.beg = cert->subjectUniqueID.end = "";
- cert->extensions.beg = cert->extensions.end = "";
- if(beg < end)
- beg = Curl_getASN1Element(&elem, beg, end);
- if(elem.tag == 1) {
- cert->issuerUniqueID = elem;
- if(beg < end)
- beg = Curl_getASN1Element(&elem, beg, end);
- }
- if(elem.tag == 2) {
- cert->subjectUniqueID = elem;
- if(beg < end)
- beg = Curl_getASN1Element(&elem, beg, end);
- }
- if(elem.tag == 3)
- Curl_getASN1Element(&cert->extensions, elem.beg, elem.end);
-}
-
-static size_t copySubstring(char * to, const char * from)
-{
- size_t i;
-
- /* Copy at most 64-characters, terminate with a newline and returns the
- effective number of stored characters. */
-
- for(i = 0; i < 64; i++) {
- to[i] = *from;
- if(!*from++)
- break;
- }
-
- to[i++] = '\n';
- return i;
-}
-
-static const char * dumpAlgo(curl_asn1Element * param,
- const char * beg, const char * end)
-{
- curl_asn1Element oid;
-
- /* Get algorithm parameters and return algorithm name. */
-
- beg = Curl_getASN1Element(&oid, beg, end);
- param->tag = 0;
- param->beg = param->end = end;
- if(beg < end)
- Curl_getASN1Element(param, beg, end);
- return OID2str(oid.beg, oid.end, TRUE);
-}
-
-static void do_pubkey_field(struct SessionHandle * data, int certnum,
- const char * label, curl_asn1Element * elem)
-{
- const char * output;
-
- /* Generate a certificate information record for the public key. */
-
- output = Curl_ASN1tostr(elem, 0);
- if(output) {
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, label, output);
- if(!certnum)
- infof(data, " %s: %s\n", label, output);
- free((char *) output);
- }
-}
-
-static void do_pubkey(struct SessionHandle * data, int certnum,
- const char * algo, curl_asn1Element * param,
- curl_asn1Element * pubkey)
-{
- curl_asn1Element elem;
- curl_asn1Element pk;
- const char * p;
- const char * q;
- unsigned long len;
- unsigned int i;
-
- /* Generate all information records for the public key. */
-
- /* Get the public key (single element). */
- Curl_getASN1Element(&pk, pubkey->beg + 1, pubkey->end);
-
- if(curl_strequal(algo, "rsaEncryption")) {
- p = Curl_getASN1Element(&elem, pk.beg, pk.end);
- /* Compute key length. */
- for(q = elem.beg; !*q && q < elem.end; q++)
- ;
- len = (elem.end - q) * 8;
- if(len)
- for(i = *(unsigned char *) q; !(i & 0x80); i <<= 1)
- len--;
- if(len > 32)
- elem.beg = q; /* Strip leading zero bytes. */
- if(!certnum)
- infof(data, " RSA Public Key (%lu bits)\n", len);
- if(data->set.ssl.certinfo) {
- q = curl_maprintf("%lu", len);
- if(q) {
- Curl_ssl_push_certinfo(data, certnum, "RSA Public Key", q);
- free((char *) q);
- }
- }
- /* Generate coefficients. */
- do_pubkey_field(data, certnum, "rsa(n)", &elem);
- Curl_getASN1Element(&elem, p, pk.end);
- do_pubkey_field(data, certnum, "rsa(e)", &elem);
- }
- else if(curl_strequal(algo, "dsa")) {
- p = Curl_getASN1Element(&elem, param->beg, param->end);
- do_pubkey_field(data, certnum, "dsa(p)", &elem);
- p = Curl_getASN1Element(&elem, p, param->end);
- do_pubkey_field(data, certnum, "dsa(q)", &elem);
- Curl_getASN1Element(&elem, p, param->end);
- do_pubkey_field(data, certnum, "dsa(g)", &elem);
- do_pubkey_field(data, certnum, "dsa(pub_key)", &pk);
- }
- else if(curl_strequal(algo, "dhpublicnumber")) {
- p = Curl_getASN1Element(&elem, param->beg, param->end);
- do_pubkey_field(data, certnum, "dh(p)", &elem);
- Curl_getASN1Element(&elem, param->beg, param->end);
- do_pubkey_field(data, certnum, "dh(g)", &elem);
- do_pubkey_field(data, certnum, "dh(pub_key)", &pk);
- }
-#if 0 /* Patent-encumbered. */
- else if(curl_strequal(algo, "ecPublicKey")) {
- /* Left TODO. */
- }
-#endif
-}
-
-CURLcode Curl_extract_certinfo(struct connectdata * conn,
- int certnum,
- const char * beg,
- const char * end)
-{
- curl_X509certificate cert;
- struct SessionHandle * data = conn->data;
- curl_asn1Element param;
- const char * ccp;
- char * cp1;
- size_t cl1;
- char * cp2;
- CURLcode cc;
- unsigned long version;
- size_t i;
- size_t j;
-
- if(!data->set.ssl.certinfo)
- if(certnum)
- return CURLE_OK;
-
- /* Prepare the certificate information for curl_easy_getinfo(). */
-
- /* Extract the certificate ASN.1 elements. */
- Curl_parseX509(&cert, beg, end);
-
- /* Subject. */
- ccp = Curl_DNtostr(&cert.subject);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Subject", ccp);
- if(!certnum)
- infof(data, "%2d Subject: %s\n", certnum, ccp);
- free((char *) ccp);
-
- /* Issuer. */
- ccp = Curl_DNtostr(&cert.issuer);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Issuer", ccp);
- if(!certnum)
- infof(data, " Issuer: %s\n", ccp);
- free((char *) ccp);
-
- /* Version (always fits in less than 32 bits). */
- version = 0;
- for(ccp = cert.version.beg; ccp < cert.version.end; ccp++)
- version = (version << 8) | *(const unsigned char *) ccp;
- if(data->set.ssl.certinfo) {
- ccp = curl_maprintf("%lx", version);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- Curl_ssl_push_certinfo(data, certnum, "Version", ccp);
- free((char *) ccp);
- }
- if(!certnum)
- infof(data, " Version: %lu (0x%lx)\n", version + 1, version);
-
- /* Serial number. */
- ccp = Curl_ASN1tostr(&cert.serialNumber, 0);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Serial Number", ccp);
- if(!certnum)
- infof(data, " Serial Number: %s\n", ccp);
- free((char *) ccp);
-
- /* Signature algorithm .*/
- ccp = dumpAlgo(&param, cert.signatureAlgorithm.beg,
- cert.signatureAlgorithm.end);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Signature Algorithm", ccp);
- if(!certnum)
- infof(data, " Signature Algorithm: %s\n", ccp);
- free((char *) ccp);
-
- /* Start Date. */
- ccp = Curl_ASN1tostr(&cert.notBefore, 0);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Start Date", ccp);
- if(!certnum)
- infof(data, " Start Date: %s\n", ccp);
- free((char *) ccp);
-
- /* Expire Date. */
- ccp = Curl_ASN1tostr(&cert.notAfter, 0);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Expire Date", ccp);
- if(!certnum)
- infof(data, " Expire Date: %s\n", ccp);
- free((char *) ccp);
-
- /* Public Key Algorithm. */
- ccp = dumpAlgo(&param, cert.subjectPublicKeyAlgorithm.beg,
- cert.subjectPublicKeyAlgorithm.end);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Public Key Algorithm", ccp);
- if(!certnum)
- infof(data, " Public Key Algorithm: %s\n", ccp);
- do_pubkey(data, certnum, ccp, &param, &cert.subjectPublicKey);
- free((char *) ccp);
-
-/* TODO: extensions. */
-
- /* Signature. */
- ccp = Curl_ASN1tostr(&cert.signature, 0);
- if(!ccp)
- return CURLE_OUT_OF_MEMORY;
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Signature", ccp);
- if(!certnum)
- infof(data, " Signature: %s\n", ccp);
- free((char *) ccp);
-
- /* Generate PEM certificate. */
- cc = Curl_base64_encode(data, cert.certificate.beg,
- cert.certificate.end - cert.certificate.beg,
- &cp1, &cl1);
- if(cc != CURLE_OK)
- return cc;
- /* Compute the number of characters in final certificate string. Format is:
- -----BEGIN CERTIFICATE-----\n
- <max 64 base64 characters>\n
- .
- .
- .
- -----END CERTIFICATE-----\n
- */
- i = 28 + cl1 + (cl1 + 64 - 1) / 64 + 26;
- cp2 = malloc(i + 1);
- if(!cp2) {
- free(cp1);
- return CURLE_OUT_OF_MEMORY;
- }
- /* Build the certificate string. */
- i = copySubstring(cp2, "-----BEGIN CERTIFICATE-----");
- for(j = 0; j < cl1; j += 64)
- i += copySubstring(cp2 + i, cp1 + j);
- i += copySubstring(cp2 + i, "-----END CERTIFICATE-----");
- cp2[i] = '\0';
- free(cp1);
- if(data->set.ssl.certinfo)
- Curl_ssl_push_certinfo(data, certnum, "Cert", cp2);
- if(!certnum)
- infof(data, "%s\n", cp2);
- free(cp2);
- return CURLE_OK;
-}
-
-#endif /* USE_QSOSSL or USE_GSKIT or USE_NSS */
-
-#if defined(USE_QSOSSL) || defined(USE_GSKIT)
-
-static const char * checkOID(const char * beg, const char * end,
- const char * oid)
-{
- curl_asn1Element e;
- const char * ccp;
- const char * p;
- bool matched;
-
- /* Check if first ASN.1 element at `beg' is the given OID.
- Return a pointer in the source after the OID if found, else NULL. */
-
- ccp = Curl_getASN1Element(&e, beg, end);
- if(!ccp || e.tag != CURL_ASN1_OBJECT_IDENTIFIER)
- return (const char *) NULL;
-
- p = OID2str(e.beg, e.end, FALSE);
- if(!p)
- return (const char *) NULL;
-
- matched = !strcmp(p, oid);
- free((char *) p);
- return matched? ccp: (const char *) NULL;
-}
-
-CURLcode Curl_verifyhost(struct connectdata * conn,
- const char * beg, const char * end)
-{
- struct SessionHandle * data = conn->data;
- curl_X509certificate cert;
- curl_asn1Element dn;
- curl_asn1Element elem;
- curl_asn1Element ext;
- curl_asn1Element name;
- int i;
- const char * p;
- const char * q;
- char * dnsname;
- int matched = -1;
- size_t addrlen = (size_t) -1;
- ssize_t len;
-#ifdef ENABLE_IPV6
- struct in6_addr addr;
-#else
- struct in_addr addr;
-#endif
-
- /* Verify that connection server matches info in X509 certificate at
- `beg'..`end'. */
-
- if(!data->set.ssl.verifyhost)
- return CURLE_OK;
-
- if(!beg)
- return CURLE_PEER_FAILED_VERIFICATION;
- Curl_parseX509(&cert, beg, end);
-
- /* Get the server IP address. */
-#ifdef ENABLE_IPV6
- if(conn->bits.ipv6_ip && Curl_inet_pton(AF_INET6, conn->host.name, &addr))
- addrlen = sizeof(struct in6_addr);
- else
-#endif
- if(Curl_inet_pton(AF_INET, conn->host.name, &addr))
- addrlen = sizeof(struct in_addr);
-
- /* Process extensions. */
- for(p = cert.extensions.beg; p < cert.extensions.end && matched != 1;) {
- p = Curl_getASN1Element(&ext, p, cert.extensions.end);
- /* Check if extension is a subjectAlternativeName. */
- ext.beg = checkOID(ext.beg, ext.end, sanOID);
- if(ext.beg) {
- ext.beg = Curl_getASN1Element(&elem, ext.beg, ext.end);
- /* Skip critical if present. */
- if(elem.tag == CURL_ASN1_BOOLEAN)
- ext.beg = Curl_getASN1Element(&elem, ext.beg, ext.end);
- /* Parse the octet string contents: is a single sequence. */
- Curl_getASN1Element(&elem, elem.beg, elem.end);
- /* Check all GeneralNames. */
- for(q = elem.beg; matched != 1 && q < elem.end;) {
- q = Curl_getASN1Element(&name, q, elem.end);
- switch (name.tag) {
- case 2: /* DNS name. */
- i = 0;
- len = utf8asn1str(&dnsname, CURL_ASN1_IA5_STRING,
- name.beg, name.end);
- if(len > 0)
- if(strlen(dnsname) == (size_t) len)
- i = Curl_cert_hostcheck((const char *) dnsname, conn->host.name);
- if(dnsname)
- free(dnsname);
- if(!i)
- return CURLE_PEER_FAILED_VERIFICATION;
- matched = i;
- break;
-
- case 7: /* IP address. */
- matched = (size_t) (name.end - q) == addrlen &&
- !memcmp(&addr, q, addrlen);
- break;
- }
- }
- }
- }
-
- switch (matched) {
- case 1:
- /* an alternative name matched the server hostname */
- infof(data, "\t subjectAltName: %s matched\n", conn->host.dispname);
- return CURLE_OK;
- case 0:
- /* an alternative name field existed, but didn't match and then
- we MUST fail */
- infof(data, "\t subjectAltName does not match %s\n", conn->host.dispname);
- return CURLE_PEER_FAILED_VERIFICATION;
- }
-
- /* Process subject. */
- name.beg = name.end = "";
- q = cert.subject.beg;
- /* we have to look to the last occurrence of a commonName in the
- distinguished one to get the most significant one. */
- while(q < cert.subject.end) {
- q = Curl_getASN1Element(&dn, q, cert.subject.end);
- for(p = dn.beg; p < dn.end;) {
- p = Curl_getASN1Element(&elem, p, dn.end);
- /* We have a DN's AttributeTypeAndValue: check it in case it's a CN. */
- elem.beg = checkOID(elem.beg, elem.end, cnOID);
- if(elem.beg)
- name = elem; /* Latch CN. */
- }
- }
-
- /* Check the CN if found. */
- if(!Curl_getASN1Element(&elem, name.beg, name.end))
- failf(data, "SSL: unable to obtain common name from peer certificate");
- else {
- len = utf8asn1str(&dnsname, elem.tag, elem.beg, elem.end);
- if(len < 0) {
- free(dnsname);
- return CURLE_OUT_OF_MEMORY;
- }
- if(strlen(dnsname) != (size_t) len) /* Nul byte in string ? */
- failf(data, "SSL: illegal cert name field");
- else if(Curl_cert_hostcheck((const char *) dnsname, conn->host.name)) {
- infof(data, "\t common name: %s (matched)\n", dnsname);
- free(dnsname);
- return CURLE_OK;
- }
- else
- failf(data, "SSL: certificate subject name '%s' does not match "
- "target host name '%s'", dnsname, conn->host.dispname);
- free(dnsname);
- }
-
- return CURLE_PEER_FAILED_VERIFICATION;
-}
-
-#endif /* USE_QSOSSL or USE_GSKIT */
diff --git a/external/libcurl_android/jni/libcurl/lib/x509asn1.h b/external/libcurl_android/jni/libcurl/lib/x509asn1.h
deleted file mode 100755
index 1741d6dc..00000000
--- a/external/libcurl_android/jni/libcurl/lib/x509asn1.h
+++ /dev/null
@@ -1,129 +0,0 @@
-#ifndef HEADER_CURL_X509ASN1_H
-#define HEADER_CURL_X509ASN1_H
-
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include "curl_setup.h"
-
-#if defined(USE_QSOSSL) || defined(USE_GSKIT) || defined(USE_NSS)
-
-#include "urldata.h"
-
-/*
- * Constants.
- */
-
-/* ASN.1 classes. */
-#define CURL_ASN1_UNIVERSAL 0
-#define CURL_ASN1_APPLICATION 1
-#define CURL_ASN1_CONTEXT_SPECIFIC 2
-#define CURL_ASN1_PRIVATE 3
-
-/* ASN.1 types. */
-#define CURL_ASN1_BOOLEAN 1
-#define CURL_ASN1_INTEGER 2
-#define CURL_ASN1_BIT_STRING 3
-#define CURL_ASN1_OCTET_STRING 4
-#define CURL_ASN1_NULL 5
-#define CURL_ASN1_OBJECT_IDENTIFIER 6
-#define CURL_ASN1_OBJECT_DESCRIPTOR 7
-#define CURL_ASN1_INSTANCE_OF 8
-#define CURL_ASN1_REAL 9
-#define CURL_ASN1_ENUMERATED 10
-#define CURL_ASN1_EMBEDDED 11
-#define CURL_ASN1_UTF8_STRING 12
-#define CURL_ASN1_RELATIVE_OID 13
-#define CURL_ASN1_SEQUENCE 16
-#define CURL_ASN1_SET 17
-#define CURL_ASN1_NUMERIC_STRING 18
-#define CURL_ASN1_PRINTABLE_STRING 19
-#define CURL_ASN1_TELETEX_STRING 20
-#define CURL_ASN1_VIDEOTEX_STRING 21
-#define CURL_ASN1_IA5_STRING 22
-#define CURL_ASN1_UTC_TIME 23
-#define CURL_ASN1_GENERALIZED_TIME 24
-#define CURL_ASN1_GRAPHIC_STRING 25
-#define CURL_ASN1_VISIBLE_STRING 26
-#define CURL_ASN1_GENERAL_STRING 27
-#define CURL_ASN1_UNIVERSAL_STRING 28
-#define CURL_ASN1_CHARACTER_STRING 29
-#define CURL_ASN1_BMP_STRING 30
-
-
-/*
- * Types.
- */
-
-/* ASN.1 parsed element. */
-typedef struct {
- const char * beg; /* Pointer to element data. */
- const char * end; /* Pointer to 1st byte after element data. */
- unsigned char class; /* ASN.1 element class. */
- unsigned char tag; /* ASN.1 element tag. */
- bool constructed; /* Element is constructed. */
-} curl_asn1Element;
-
-
-/* ASN.1 OID table entry. */
-typedef struct {
- const char * numoid; /* Dotted-numeric OID. */
- const char * textoid; /* OID name. */
-} curl_OID;
-
-
-/* X509 certificate: RFC 5280. */
-typedef struct {
- curl_asn1Element certificate;
- curl_asn1Element version;
- curl_asn1Element serialNumber;
- curl_asn1Element signatureAlgorithm;
- curl_asn1Element signature;
- curl_asn1Element issuer;
- curl_asn1Element notBefore;
- curl_asn1Element notAfter;
- curl_asn1Element subject;
- curl_asn1Element subjectPublicKeyAlgorithm;
- curl_asn1Element subjectPublicKey;
- curl_asn1Element issuerUniqueID;
- curl_asn1Element subjectUniqueID;
- curl_asn1Element extensions;
-} curl_X509certificate;
-
-
-/*
- * Prototypes.
- */
-
-const char * Curl_getASN1Element(curl_asn1Element * elem,
- const char * beg, const char * end);
-const char * Curl_ASN1tostr(curl_asn1Element * elem, int type);
-const char * Curl_DNtostr(curl_asn1Element * dn);
-void Curl_parseX509(curl_X509certificate * cert,
- const char * beg, const char * end);
-CURLcode Curl_extract_certinfo(struct connectdata * conn, int certnum,
- const char * beg, const char * end);
-CURLcode Curl_verifyhost(struct connectdata * conn,
- const char * beg, const char * end);
-
-#endif /* USE_QSOSSL or USE_GSKIT or USE_NSS */
-#endif /* HEADER_CURL_X509ASN1_H */
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_binmode.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_binmode.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_binmode.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_bname.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_bname.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_bname.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_dbg.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_dbg.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_dbg.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_hdr.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_hdr.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_hdr.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_prg.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_prg.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_prg.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_rea.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_rea.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_rea.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_see.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_see.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_see.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_wrt.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_wrt.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cb_wrt.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cfgable.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cfgable.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_cfgable.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_convert.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_convert.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_convert.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_dirhie.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_dirhie.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_dirhie.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_doswin.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_doswin.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_doswin.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_easysrc.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_easysrc.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_easysrc.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_formparse.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_formparse.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_formparse.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_getparam.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_getparam.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_getparam.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_getpass.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_getpass.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_getpass.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_help.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_help.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_help.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_helpers.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_helpers.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_helpers.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_homedir.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_homedir.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_homedir.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_hugehelp.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_hugehelp.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_hugehelp.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_libinfo.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_libinfo.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_libinfo.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_main.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_main.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_main.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_metalink.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_metalink.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_metalink.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_mfiles.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_mfiles.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_mfiles.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_msgs.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_msgs.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_msgs.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_operate.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_operate.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_operate.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_operhlp.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_operhlp.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_operhlp.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_panykey.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_panykey.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_panykey.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_paramhlp.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_paramhlp.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_paramhlp.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_parsecfg.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_parsecfg.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_parsecfg.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_setopt.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_setopt.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_setopt.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_sleep.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_sleep.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_sleep.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_urlglob.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_urlglob.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_urlglob.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_util.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_util.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_util.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_vms.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_vms.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_vms.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_writeenv.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_writeenv.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_writeenv.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_writeout.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_writeout.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_writeout.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_xattr.Po b/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_xattr.Po
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/curl-tool_xattr.Po
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_binmode.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_binmode.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_binmode.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_bname.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_bname.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_bname.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_dbg.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_dbg.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_dbg.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_hdr.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_hdr.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_hdr.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_prg.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_prg.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_prg.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_rea.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_rea.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_rea.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_see.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_see.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_see.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_wrt.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_wrt.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cb_wrt.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cfgable.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cfgable.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_cfgable.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_convert.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_convert.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_convert.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_dirhie.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_dirhie.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_dirhie.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_doswin.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_doswin.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_doswin.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_easysrc.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_easysrc.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_easysrc.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_formparse.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_formparse.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_formparse.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_getparam.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_getparam.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_getparam.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_getpass.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_getpass.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_getpass.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_help.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_help.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_help.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_helpers.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_helpers.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_helpers.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_homedir.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_homedir.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_homedir.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_hugehelp.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_hugehelp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_hugehelp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_libinfo.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_libinfo.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_libinfo.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_main.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_main.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_main.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_metalink.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_metalink.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_metalink.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_mfiles.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_mfiles.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_mfiles.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_msgs.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_msgs.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_msgs.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_operate.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_operate.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_operate.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_operhlp.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_operhlp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_operhlp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_panykey.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_panykey.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_panykey.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_paramhlp.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_paramhlp.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_paramhlp.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_parsecfg.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_parsecfg.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_parsecfg.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_setopt.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_setopt.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_setopt.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_sleep.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_sleep.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_sleep.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_urlglob.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_urlglob.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_urlglob.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_util.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_util.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_util.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_vms.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_vms.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_vms.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_writeenv.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_writeenv.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_writeenv.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_writeout.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_writeout.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_writeout.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_xattr.Plo b/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_xattr.Plo
deleted file mode 100755
index 9ce06a81..00000000
--- a/external/libcurl_android/jni/libcurl/src/.deps/libcurltool_la-tool_xattr.Plo
+++ /dev/null
@@ -1 +0,0 @@
-# dummy
diff --git a/external/libcurl_android/jni/libcurl/src/Makefile.inc b/external/libcurl_android/jni/libcurl/src/Makefile.inc
deleted file mode 100755
index 64d55ecf..00000000
--- a/external/libcurl_android/jni/libcurl/src/Makefile.inc
+++ /dev/null
@@ -1,113 +0,0 @@
-# ./src/Makefile.inc
-# Using the backslash as line continuation character might be problematic
-# with some make flavours, as Watcom's wmake showed us already. If we
-# ever want to change this in a portable manner then we should consider
-# this idea (posted to the libcurl list by Adam Kellas):
-# CSRC1 = file1.c file2.c file3.c
-# CSRC2 = file4.c file5.c file6.c
-# CSOURCES = $(CSRC1) $(CSRC2)
-
-# libcurl has sources that provide functions named curlx_* that aren't part of
-# the official API, but we re-use the code here to avoid duplication.
-CURLX_CFILES = \
- ../lib/strtoofft.c \
- ../lib/strdup.c \
- ../lib/rawstr.c \
- ../lib/nonblock.c \
- ../lib/warnless.c
-
-CURLX_HFILES = \
- ../lib/curl_setup.h \
- ../lib/strtoofft.h \
- ../lib/strdup.h \
- ../lib/rawstr.h \
- ../lib/nonblock.h \
- ../lib/warnless.h
-
-CURL_CFILES = \
- tool_binmode.c \
- tool_bname.c \
- tool_cb_dbg.c \
- tool_cb_hdr.c \
- tool_cb_prg.c \
- tool_cb_rea.c \
- tool_cb_see.c \
- tool_cb_wrt.c \
- tool_cfgable.c \
- tool_convert.c \
- tool_dirhie.c \
- tool_doswin.c \
- tool_easysrc.c \
- tool_formparse.c \
- tool_getparam.c \
- tool_getpass.c \
- tool_help.c \
- tool_helpers.c \
- tool_homedir.c \
- tool_hugehelp.c \
- tool_libinfo.c \
- tool_main.c \
- tool_metalink.c \
- tool_mfiles.c \
- tool_msgs.c \
- tool_operate.c \
- tool_operhlp.c \
- tool_panykey.c \
- tool_paramhlp.c \
- tool_parsecfg.c \
- tool_setopt.c \
- tool_sleep.c \
- tool_urlglob.c \
- tool_util.c \
- tool_vms.c \
- tool_writeenv.c \
- tool_writeout.c \
- tool_xattr.c
-
-CURL_HFILES = \
- tool_binmode.h \
- tool_bname.h \
- tool_cb_dbg.h \
- tool_cb_hdr.h \
- tool_cb_prg.h \
- tool_cb_rea.h \
- tool_cb_see.h \
- tool_cb_wrt.h \
- tool_cfgable.h \
- tool_convert.h \
- tool_dirhie.h \
- tool_doswin.h \
- tool_easysrc.h \
- tool_formparse.h \
- tool_getparam.h \
- tool_getpass.h \
- tool_help.h \
- tool_helpers.h \
- tool_homedir.h \
- tool_hugehelp.h \
- tool_libinfo.h \
- tool_main.h \
- tool_metalink.h \
- tool_mfiles.h \
- tool_msgs.h \
- tool_operate.h \
- tool_operhlp.h \
- tool_panykey.h \
- tool_paramhlp.h \
- tool_parsecfg.h \
- tool_sdecls.h \
- tool_setopt.h \
- tool_setup.h \
- tool_sleep.h \
- tool_urlglob.h \
- tool_util.h \
- tool_version.h \
- tool_vms.h \
- tool_writeenv.h \
- tool_writeout.h \
- tool_xattr.h
-
-CURL_RCFILES = curl.rc
-
-curl_SOURCES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
-
diff --git a/external/libcurl_android/jni/libcurl/src/curl.rc b/external/libcurl_android/jni/libcurl/src/curl.rc
deleted file mode 100755
index 3db59bd3..00000000
--- a/external/libcurl_android/jni/libcurl/src/curl.rc
+++ /dev/null
@@ -1,63 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2009, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include <winver.h>
-#include "tool_version.h"
-
-LANGUAGE 0x09,0x01
-
-#define RC_VERSION CURL_VERSION_MAJOR, CURL_VERSION_MINOR, CURL_VERSION_PATCH, 0
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION RC_VERSION
- PRODUCTVERSION RC_VERSION
- FILEFLAGSMASK 0x3fL
-#if defined(DEBUGBUILD) || defined(_DEBUG)
- FILEFLAGS 1
-#else
- FILEFLAGS 0
-#endif
- FILEOS VOS__WINDOWS32
- FILETYPE VFT_APP
- FILESUBTYPE 0x0L
-
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904b0"
- BEGIN
- VALUE "CompanyName", "cURL, http://curl.haxx.se/\0"
- VALUE "FileDescription", "The cURL executable\0"
- VALUE "FileVersion", CURL_VERSION "\0"
- VALUE "InternalName", "curl\0"
- VALUE "OriginalFilename", "curl.exe\0"
- VALUE "ProductName", "The cURL executable\0"
- VALUE "ProductVersion", CURL_VERSION "\0"
- VALUE "LegalCopyright", "© " CURL_COPYRIGHT "\0"
- VALUE "License", "http://curl.haxx.se/docs/copyright.html\0"
- END
- END
-
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1200
- END
-END
diff --git a/external/libcurl_android/jni/libcurl/src/tool_binmode.c b/external/libcurl_android/jni/libcurl/src/tool_binmode.c
deleted file mode 100755
index 92033ac0..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_binmode.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef HAVE_SETMODE
-
-#ifdef HAVE_IO_H
-# include <io.h>
-#endif
-
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
-#include "tool_binmode.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-void set_binmode(FILE *stream)
-{
-#ifdef O_BINARY
-# ifdef __HIGHC__
- _setmode(stream, O_BINARY);
-# else
- setmode(fileno(stream), O_BINARY);
-# endif
-#else
- (void)stream;
-#endif
-}
-
-#endif /* HAVE_SETMODE */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_binmode.h b/external/libcurl_android/jni/libcurl/src/tool_binmode.h
deleted file mode 100755
index b5cb08d5..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_binmode.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef HEADER_CURL_TOOL_BINMODE_H
-#define HEADER_CURL_TOOL_BINMODE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef HAVE_SETMODE
-
-void set_binmode(FILE *stream);
-
-#else
-
-#define set_binmode(x) Curl_nop_stmt
-
-#endif /* HAVE_SETMODE */
-
-#endif /* HEADER_CURL_TOOL_BINMODE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_bname.c b/external/libcurl_android/jni/libcurl/src/tool_bname.c
deleted file mode 100755
index 27783054..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_bname.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "tool_bname.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifndef HAVE_BASENAME
-
-char *tool_basename(char *path)
-{
- char *s1;
- char *s2;
-
- s1 = strrchr(path, '/');
- s2 = strrchr(path, '\\');
-
- if(s1 && s2) {
- path = (s1 > s2) ? s1 + 1 : s2 + 1;
- }
- else if(s1)
- path = s1 + 1;
- else if(s2)
- path = s2 + 1;
-
- return path;
-}
-
-#endif /* HAVE_BASENAME */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_bname.h b/external/libcurl_android/jni/libcurl/src/tool_bname.h
deleted file mode 100755
index 69cf92c1..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_bname.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef HEADER_CURL_TOOL_BNAME_H
-#define HEADER_CURL_TOOL_BNAME_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifndef HAVE_BASENAME
-
-char *tool_basename(char *path);
-
-#define basename(x) tool_basename((x))
-
-#endif /* HAVE_BASENAME */
-
-#endif /* HEADER_CURL_TOOL_BNAME_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_dbg.c b/external/libcurl_android/jni/libcurl/src/tool_cb_dbg.c
deleted file mode 100755
index 010dae3b..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_dbg.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_msgs.h"
-#include "tool_cb_dbg.h"
-#include "tool_util.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-static void dump(const char *timebuf, const char *text,
- FILE *stream, const unsigned char *ptr, size_t size,
- trace tracetype, curl_infotype infotype);
-
-/*
-** callback for CURLOPT_DEBUGFUNCTION
-*/
-
-int tool_debug_cb(CURL *handle, curl_infotype type,
- unsigned char *data, size_t size,
- void *userdata)
-{
- struct OperationConfig *operation = userdata;
- struct GlobalConfig *config = operation->global;
- FILE *output = config->errors;
- const char *text;
- struct timeval tv;
- struct tm *now;
- char timebuf[20];
- time_t secs;
- static time_t epoch_offset;
- static int known_offset;
-
- (void)handle; /* not used */
-
- if(config->tracetime) {
- tv = tvnow();
- if(!known_offset) {
- epoch_offset = time(NULL) - tv.tv_sec;
- known_offset = 1;
- }
- secs = epoch_offset + tv.tv_sec;
- now = localtime(&secs); /* not thread safe but we don't care */
- snprintf(timebuf, sizeof(timebuf), "%02d:%02d:%02d.%06ld ",
- now->tm_hour, now->tm_min, now->tm_sec, (long)tv.tv_usec);
- }
- else
- timebuf[0] = 0;
-
- if(!config->trace_stream) {
- /* open for append */
- if(curlx_strequal("-", config->trace_dump))
- config->trace_stream = stdout;
- else if(curlx_strequal("%", config->trace_dump))
- /* Ok, this is somewhat hackish but we do it undocumented for now */
- config->trace_stream = config->errors; /* aka stderr */
- else {
- config->trace_stream = fopen(config->trace_dump, "w");
- config->trace_fopened = TRUE;
- }
- }
-
- if(config->trace_stream)
- output = config->trace_stream;
-
- if(!output) {
- warnf(operation, "Failed to create/open output");
- return 0;
- }
-
- if(config->tracetype == TRACE_PLAIN) {
- /*
- * This is the trace look that is similar to what libcurl makes on its
- * own.
- */
- static const char * const s_infotype[] = {
- "*", "<", ">", "{", "}", "{", "}"
- };
- size_t i;
- size_t st = 0;
- static bool newl = FALSE;
- static bool traced_data = FALSE;
-
- switch(type) {
- case CURLINFO_HEADER_OUT:
- if(size > 0) {
- for(i = 0; i < size - 1; i++) {
- if(data[i] == '\n') { /* LF */
- if(!newl) {
- fprintf(output, "%s%s ", timebuf, s_infotype[type]);
- }
- (void)fwrite(data + st, i - st + 1, 1, output);
- st = i + 1;
- newl = FALSE;
- }
- }
- if(!newl)
- fprintf(output, "%s%s ", timebuf, s_infotype[type]);
- (void)fwrite(data + st, i - st + 1, 1, output);
- }
- newl = (size && (data[size - 1] != '\n')) ? TRUE : FALSE;
- traced_data = FALSE;
- break;
- case CURLINFO_TEXT:
- case CURLINFO_HEADER_IN:
- if(!newl)
- fprintf(output, "%s%s ", timebuf, s_infotype[type]);
- (void)fwrite(data, size, 1, output);
- newl = (size && (data[size - 1] != '\n')) ? TRUE : FALSE;
- traced_data = FALSE;
- break;
- case CURLINFO_DATA_OUT:
- case CURLINFO_DATA_IN:
- case CURLINFO_SSL_DATA_IN:
- case CURLINFO_SSL_DATA_OUT:
- if(!traced_data) {
- /* if the data is output to a tty and we're sending this debug trace
- to stderr or stdout, we don't display the alert about the data not
- being shown as the data _is_ shown then just not via this
- function */
- if(!config->isatty || ((output != stderr) && (output != stdout))) {
- if(!newl)
- fprintf(output, "%s%s ", timebuf, s_infotype[type]);
- fprintf(output, "[data not shown]\n");
- newl = FALSE;
- traced_data = TRUE;
- }
- }
- break;
- default: /* nada */
- newl = FALSE;
- traced_data = FALSE;
- break;
- }
-
- return 0;
- }
-
-#ifdef CURL_DOES_CONVERSIONS
- /* Special processing is needed for CURLINFO_HEADER_OUT blocks
- * if they contain both headers and data (separated by CRLFCRLF).
- * We dump the header text and then switch type to CURLINFO_DATA_OUT.
- */
- if((type == CURLINFO_HEADER_OUT) && (size > 4)) {
- size_t i;
- for(i = 0; i < size - 4; i++) {
- if(memcmp(&data[i], "\r\n\r\n", 4) == 0) {
- /* dump everything through the CRLFCRLF as a sent header */
- text = "=> Send header";
- dump(timebuf, text, output, data, i + 4, config->tracetype, type);
- data += i + 3;
- size -= i + 4;
- type = CURLINFO_DATA_OUT;
- data += 1;
- break;
- }
- }
- }
-#endif /* CURL_DOES_CONVERSIONS */
-
- switch (type) {
- case CURLINFO_TEXT:
- fprintf(output, "%s== Info: %s", timebuf, data);
- default: /* in case a new one is introduced to shock us */
- return 0;
-
- case CURLINFO_HEADER_OUT:
- text = "=> Send header";
- break;
- case CURLINFO_DATA_OUT:
- text = "=> Send data";
- break;
- case CURLINFO_HEADER_IN:
- text = "<= Recv header";
- break;
- case CURLINFO_DATA_IN:
- text = "<= Recv data";
- break;
- case CURLINFO_SSL_DATA_IN:
- text = "<= Recv SSL data";
- break;
- case CURLINFO_SSL_DATA_OUT:
- text = "=> Send SSL data";
- break;
- }
-
- dump(timebuf, text, output, data, size, config->tracetype, type);
- return 0;
-}
-
-static void dump(const char *timebuf, const char *text,
- FILE *stream, const unsigned char *ptr, size_t size,
- trace tracetype, curl_infotype infotype)
-{
- size_t i;
- size_t c;
-
- unsigned int width = 0x10;
-
- if(tracetype == TRACE_ASCII)
- /* without the hex output, we can fit more on screen */
- width = 0x40;
-
- fprintf(stream, "%s%s, %zd bytes (0x%zx)\n", timebuf, text, size, size);
-
- for(i = 0; i < size; i += width) {
-
- fprintf(stream, "%04zx: ", i);
-
- if(tracetype == TRACE_BIN) {
- /* hex not disabled, show it */
- for(c = 0; c < width; c++)
- if(i+c < size)
- fprintf(stream, "%02x ", ptr[i+c]);
- else
- fputs(" ", stream);
- }
-
- for(c = 0; (c < width) && (i+c < size); c++) {
- /* check for 0D0A; if found, skip past and start a new line of output */
- if((tracetype == TRACE_ASCII) &&
- (i+c+1 < size) && (ptr[i+c] == 0x0D) && (ptr[i+c+1] == 0x0A)) {
- i += (c+2-width);
- break;
- }
-#ifdef CURL_DOES_CONVERSIONS
- /* repeat the 0D0A check above but use the host encoding for CRLF */
- if((tracetype == TRACE_ASCII) &&
- (i+c+1 < size) && (ptr[i+c] == '\r') && (ptr[i+c+1] == '\n')) {
- i += (c+2-width);
- break;
- }
- /* convert to host encoding and print this character */
- fprintf(stream, "%c", convert_char(infotype, ptr[i+c]));
-#else
- (void)infotype;
- fprintf(stream, "%c", ((ptr[i+c] >= 0x20) && (ptr[i+c] < 0x80)) ?
- ptr[i+c] : UNPRINTABLE_CHAR);
-#endif /* CURL_DOES_CONVERSIONS */
- /* check again for 0D0A, to avoid an extra \n if it's at width */
- if((tracetype == TRACE_ASCII) &&
- (i+c+2 < size) && (ptr[i+c+1] == 0x0D) && (ptr[i+c+2] == 0x0A)) {
- i += (c+3-width);
- break;
- }
- }
- fputc('\n', stream); /* newline */
- }
- fflush(stream);
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_dbg.h b/external/libcurl_android/jni/libcurl/src/tool_cb_dbg.h
deleted file mode 100755
index d0ed7b0d..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_dbg.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef HEADER_CURL_TOOL_CB_DBG_H
-#define HEADER_CURL_TOOL_CB_DBG_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-/*
-** callback for CURLOPT_DEBUGFUNCTION
-*/
-
-int tool_debug_cb(CURL *handle, curl_infotype type,
- unsigned char *data, size_t size,
- void *userdata);
-
-#endif /* HEADER_CURL_TOOL_CB_DBG_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_hdr.c b/external/libcurl_android/jni/libcurl/src/tool_cb_hdr.c
deleted file mode 100755
index ef340f79..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_hdr.c
+++ /dev/null
@@ -1,225 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_msgs.h"
-#include "tool_cb_hdr.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-static char *parse_filename(const char *ptr, size_t len);
-
-/*
-** callback for CURLOPT_HEADERFUNCTION
-*/
-
-size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata)
-{
- struct HdrCbData *hdrcbdata = userdata;
- struct OutStruct *outs = hdrcbdata->outs;
- struct OutStruct *heads = hdrcbdata->heads;
- const char *str = ptr;
- const size_t cb = size * nmemb;
- const char *end = (char*)ptr + cb;
-
- /*
- * Once that libcurl has called back tool_header_cb() the returned value
- * is checked against the amount that was intended to be written, if
- * it does not match then it fails with CURLE_WRITE_ERROR. So at this
- * point returning a value different from sz*nmemb indicates failure.
- */
- size_t failure = (size * nmemb) ? 0 : 1;
-
- if(!heads->config)
- return failure;
-
-#ifdef DEBUGBUILD
- if(size * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
- warnf(heads->config, "Header data exceeds single call write limit!\n");
- return failure;
- }
-#endif
-
- /*
- * Write header data when curl option --dump-header (-D) is given.
- */
-
- if(heads->config->headerfile && heads->stream) {
- size_t rc = fwrite(ptr, size, nmemb, heads->stream);
- if(rc != cb)
- return rc;
- }
-
- /*
- * This callback sets the filename where output shall be written when
- * curl options --remote-name (-O) and --remote-header-name (-J) have
- * been simultaneously given and additionally server returns an HTTP
- * Content-Disposition header specifying a filename property.
- */
-
- if(hdrcbdata->honor_cd_filename &&
- (cb > 20) && checkprefix("Content-disposition:", str)) {
- const char *p = str + 20;
-
- /* look for the 'filename=' parameter
- (encoded filenames (*=) are not supported) */
- for(;;) {
- char *filename;
- size_t len;
-
- while(*p && (p < end) && !ISALPHA(*p))
- p++;
- if(p > end - 9)
- break;
-
- if(memcmp(p, "filename=", 9)) {
- /* no match, find next parameter */
- while((p < end) && (*p != ';'))
- p++;
- continue;
- }
- p += 9;
-
- /* this expression below typecasts 'cb' only to avoid
- warning: signed and unsigned type in conditional expression
- */
- len = (ssize_t)cb - (p - str);
- filename = parse_filename(p, len);
- if(filename) {
- outs->filename = filename;
- outs->alloc_filename = TRUE;
- outs->is_cd_filename = TRUE;
- outs->s_isreg = TRUE;
- outs->fopened = FALSE;
- outs->stream = NULL;
- hdrcbdata->honor_cd_filename = FALSE;
- break;
- }
- else
- return failure;
- }
- }
-
- return cb;
-}
-
-/*
- * Copies a file name part and returns an ALLOCATED data buffer.
- */
-static char *parse_filename(const char *ptr, size_t len)
-{
- char *copy;
- char *p;
- char *q;
- char stop = '\0';
-
- /* simple implementation of strndup() */
- copy = malloc(len+1);
- if(!copy)
- return NULL;
- memcpy(copy, ptr, len);
- copy[len] = '\0';
-
- p = copy;
- if(*p == '\'' || *p == '"') {
- /* store the starting quote */
- stop = *p;
- p++;
- }
- else
- stop = ';';
-
- /* if the filename contains a path, only use filename portion */
- q = strrchr(copy, '/');
- if(q) {
- p = q + 1;
- if(!*p) {
- Curl_safefree(copy);
- return NULL;
- }
- }
-
- /* If the filename contains a backslash, only use filename portion. The idea
- is that even systems that don't handle backslashes as path separators
- probably want the path removed for convenience. */
- q = strrchr(p, '\\');
- if(q) {
- p = q + 1;
- if(!*p) {
- Curl_safefree(copy);
- return NULL;
- }
- }
-
- /* scan for the end letter and stop there */
- q = p;
- while(*q) {
- if(q[1] && (q[0] == '\\'))
- q++;
- else if(q[0] == stop)
- break;
- q++;
- }
- *q = '\0';
-
- /* make sure the file name doesn't end in \r or \n */
- q = strchr(p, '\r');
- if(q)
- *q = '\0';
-
- q = strchr(p, '\n');
- if(q)
- *q = '\0';
-
- if(copy != p)
- memmove(copy, p, strlen(p) + 1);
-
- /* in case we built debug enabled, we allow an evironment variable
- * named CURL_TESTDIR to prefix the given file name to put it into a
- * specific directory
- */
-#ifdef DEBUGBUILD
- {
- char *tdir = curlx_getenv("CURL_TESTDIR");
- if(tdir) {
- char buffer[512]; /* suitably large */
- snprintf(buffer, sizeof(buffer), "%s/%s", tdir, copy);
- Curl_safefree(copy);
- copy = strdup(buffer); /* clone the buffer, we don't use the libcurl
- aprintf() or similar since we want to use the
- same memory code as the "real" parse_filename
- function */
- curl_free(tdir);
- }
- }
-#endif
-
- return copy;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_hdr.h b/external/libcurl_android/jni/libcurl/src/tool_cb_hdr.h
deleted file mode 100755
index bd504313..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_hdr.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef HEADER_CURL_TOOL_CB_HDR_H
-#define HEADER_CURL_TOOL_CB_HDR_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-/*
- * curl operates using a single HdrCbData struct variable, a
- * pointer to this is passed as userdata pointer to tool_header_cb.
- *
- * 'outs' member is a pointer to the OutStruct variable used to keep
- * track of information relative to curl's output writing.
- *
- * 'heads' member is a pointer to the OutStruct variable used to keep
- * track of information relative to header response writing.
- *
- * 'honor_cd_filename' member is TRUE when tool_header_cb is allowed
- * to honor Content-Disposition filename property and accordingly
- * set 'outs' filename, otherwise FALSE;
- */
-
-struct HdrCbData {
- struct OutStruct *outs;
- struct OutStruct *heads;
- bool honor_cd_filename;
-};
-
-/*
-** callback for CURLOPT_HEADERFUNCTION
-*/
-
-size_t tool_header_cb(void *ptr, size_t size, size_t nmemb, void *userdata);
-
-#endif /* HEADER_CURL_TOOL_CB_HDR_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_prg.c b/external/libcurl_android/jni/libcurl/src/tool_cb_prg.c
deleted file mode 100755
index 9e3c5fb4..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_prg.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_cb_prg.h"
-#include "tool_util.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/*
-** callback for CURLOPT_XFERINFOFUNCTION
-*/
-
-#define MAX_BARLENGTH 256
-
-int tool_progress_cb(void *clientp,
- curl_off_t dltotal, curl_off_t dlnow,
- curl_off_t ultotal, curl_off_t ulnow)
-{
- /* The original progress-bar source code was written for curl by Lars Aas,
- and this new edition inherits some of his concepts. */
-
- char line[MAX_BARLENGTH+1];
- char format[40];
- double frac;
- double percent;
- int barwidth;
- int num;
- struct timeval now = tvnow();
- struct ProgressData *bar = (struct ProgressData *)clientp;
- curl_off_t total;
- curl_off_t point;
-
- /* expected transfer size */
- total = dltotal + ultotal + bar->initial_size;
-
- /* we've come this far */
- point = dlnow + ulnow + bar->initial_size;
-
- if(bar->calls && (tvdiff(now, bar->prevtime) < 100L) && point < total)
- /* after first call, limit progress-bar updating to 10 Hz */
- /* update when we're at 100% even if last update is less than 200ms ago */
- return 0;
-
- if(point > total)
- /* we have got more than the expected total! */
- total = point;
-
- /* simply count invokes */
- bar->calls++;
-
- if(total < 1) {
- curl_off_t prevblock = bar->prev / 1024;
- curl_off_t thisblock = point / 1024;
- while(thisblock > prevblock) {
- fprintf(bar->out, "#");
- prevblock++;
- }
- }
- else if(point != bar->prev) {
- frac = (double)point / (double)total;
- percent = frac * 100.0f;
- barwidth = bar->width - 7;
- num = (int) (((double)barwidth) * frac);
- if(num > MAX_BARLENGTH)
- num = MAX_BARLENGTH;
- memset(line, '#', num);
- line[num] = '\0';
- snprintf(format, sizeof(format), "\r%%-%ds %%5.1f%%%%", barwidth);
- fprintf(bar->out, format, line, percent);
- }
- fflush(bar->out);
- bar->prev = point;
- bar->prevtime = now;
-
- return 0;
-}
-
-void progressbarinit(struct ProgressData *bar,
- struct OperationConfig *config)
-{
-#ifdef __EMX__
- /* 20000318 mgs */
- int scr_size[2];
-#endif
- char *colp;
-
- memset(bar, 0, sizeof(struct ProgressData));
-
- /* pass this through to progress function so
- * it can display progress towards total file
- * not just the part that's left. (21-may-03, dbyron) */
- if(config->use_resume)
- bar->initial_size = config->resume_from;
-
-/* TODO: get terminal width through ansi escapes or something similar.
- try to update width when xterm is resized... - 19990617 larsa */
-#ifndef __EMX__
- /* 20000318 mgs
- * OS/2 users most likely won't have this env var set, and besides that
- * we're using our own way to determine screen width */
- colp = curlx_getenv("COLUMNS");
- if(colp) {
- char *endptr;
- long num = strtol(colp, &endptr, 10);
- if((endptr != colp) && (endptr == colp + strlen(colp)) && (num > 0))
- bar->width = (int)num;
- else
- bar->width = 79;
- curl_free(colp);
- }
- else
- bar->width = 79;
-#else
- /* 20000318 mgs
- * We use this emx library call to get the screen width, and subtract
- * one from what we got in order to avoid a problem with the cursor
- * advancing to the next line if we print a string that is as long as
- * the screen is wide. */
-
- _scrsize(scr_size);
- bar->width = scr_size[0] - 1;
-#endif
-
- bar->out = config->global->errors;
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_prg.h b/external/libcurl_android/jni/libcurl/src/tool_cb_prg.h
deleted file mode 100755
index c635be80..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_prg.h
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef HEADER_CURL_TOOL_CB_PRG_H
-#define HEADER_CURL_TOOL_CB_PRG_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define CURL_PROGRESS_STATS 0 /* default progress display */
-#define CURL_PROGRESS_BAR 1
-
-struct ProgressData {
- int calls;
- curl_off_t prev;
- struct timeval prevtime;
- int width;
- FILE *out; /* where to write everything to */
- curl_off_t initial_size;
-};
-
-void progressbarinit(struct ProgressData *bar,
- struct OperationConfig *config);
-
-/*
-** callback for CURLOPT_PROGRESSFUNCTION
-*/
-
-int tool_progress_cb(void *clientp,
- curl_off_t dltotal, curl_off_t dlnow,
- curl_off_t ultotal, curl_off_t ulnow);
-
-#endif /* HEADER_CURL_TOOL_CB_PRG_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_rea.c b/external/libcurl_android/jni/libcurl/src/tool_cb_rea.c
deleted file mode 100755
index 4565a15d..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_rea.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_cb_rea.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/*
-** callback for CURLOPT_READFUNCTION
-*/
-
-size_t tool_read_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
-{
- ssize_t rc;
- struct InStruct *in = userdata;
-
- rc = read(in->fd, buffer, sz*nmemb);
- if(rc < 0) {
- if(errno == EAGAIN) {
- errno = 0;
- in->config->readbusy = TRUE;
- return CURL_READFUNC_PAUSE;
- }
- /* since size_t is unsigned we can't return negative values fine */
- rc = 0;
- }
- in->config->readbusy = FALSE;
- return (size_t)rc;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_rea.h b/external/libcurl_android/jni/libcurl/src/tool_cb_rea.h
deleted file mode 100755
index 4294166a..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_rea.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_TOOL_CB_REA_H
-#define HEADER_CURL_TOOL_CB_REA_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-/*
-** callback for CURLOPT_READFUNCTION
-*/
-
-size_t tool_read_cb(void *buffer, size_t sz, size_t nmemb, void *userdata);
-
-#endif /* HEADER_CURL_TOOL_CB_REA_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_see.c b/external/libcurl_android/jni/libcurl/src/tool_cb_see.c
deleted file mode 100755
index 2f49e1d9..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_see.c
+++ /dev/null
@@ -1,131 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_cb_see.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/* OUR_MAX_SEEK_L has 'long' data type, OUR_MAX_SEEK_O has 'curl_off_t,
- both represent the same value. Maximum offset used here when we lseek
- using a 'long' data type offset */
-
-#define OUR_MAX_SEEK_L 2147483647L - 1L
-#define OUR_MAX_SEEK_O CURL_OFF_T_C(0x7FFFFFFF) - CURL_OFF_T_C(0x1)
-
-/*
-** callback for CURLOPT_SEEKFUNCTION
-**
-** Notice that this is not supposed to return the resulting offset. This
-** shall only return CURL_SEEKFUNC_* return codes.
-*/
-
-int tool_seek_cb(void *userdata, curl_off_t offset, int whence)
-{
- struct InStruct *in = userdata;
-
-#if(CURL_SIZEOF_CURL_OFF_T > SIZEOF_OFF_T) && !defined(USE_WIN32_LARGE_FILES)
-
- /* The offset check following here is only interesting if curl_off_t is
- larger than off_t and we are not using the WIN32 large file support
- macros that provide the support to do 64bit seeks correctly */
-
- if(offset > OUR_MAX_SEEK_O) {
- /* Some precaution code to work around problems with different data sizes
- to allow seeking >32bit even if off_t is 32bit. Should be very rare and
- is really valid on weirdo-systems. */
- curl_off_t left = offset;
-
- if(whence != SEEK_SET)
- /* this code path doesn't support other types */
- return CURL_SEEKFUNC_FAIL;
-
- if(LSEEK_ERROR == lseek(in->fd, 0, SEEK_SET))
- /* couldn't rewind to beginning */
- return CURL_SEEKFUNC_FAIL;
-
- while(left) {
- long step = (left > OUR_MAX_SEEK_O) ? OUR_MAX_SEEK_L : (long)left;
- if(LSEEK_ERROR == lseek(in->fd, step, SEEK_CUR))
- /* couldn't seek forwards the desired amount */
- return CURL_SEEKFUNC_FAIL;
- left -= step;
- }
- return CURL_SEEKFUNC_OK;
- }
-#endif
-
- if(LSEEK_ERROR == lseek(in->fd, offset, whence))
- /* couldn't rewind, the reason is in errno but errno is just not portable
- enough and we don't actually care that much why we failed. We'll let
- libcurl know that it may try other means if it wants to. */
- return CURL_SEEKFUNC_CANTSEEK;
-
- return CURL_SEEKFUNC_OK;
-}
-
-#if defined(WIN32) && !defined(__MINGW64__)
-
-#ifdef __BORLANDC__
-/* 64-bit lseek-like function unavailable */
-# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence)
-#endif
-
-#ifdef __POCC__
-# if(__POCC__ < 450)
-/* 64-bit lseek-like function unavailable */
-# define _lseeki64(hnd,ofs,whence) _lseek(hnd,ofs,whence)
-# else
-# define _lseeki64(hnd,ofs,whence) _lseek64(hnd,ofs,whence)
-# endif
-#endif
-
-#ifdef _WIN32_WCE
-/* 64-bit lseek-like function unavailable */
-# undef _lseeki64
-# define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence)
-# undef _get_osfhandle
-# define _get_osfhandle(fd) (fd)
-#endif
-
-/*
- * Truncate a file handle at a 64-bit position 'where'.
- */
-
-int tool_ftruncate64(int fd, curl_off_t where)
-{
- if(_lseeki64(fd, where, SEEK_SET) < 0)
- return -1;
-
- if(!SetEndOfFile((HANDLE)_get_osfhandle(fd)))
- return -1;
-
- return 0;
-}
-
-#endif /* WIN32 && ! __MINGW64__ */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_see.h b/external/libcurl_android/jni/libcurl/src/tool_cb_see.h
deleted file mode 100755
index ceb22d65..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_see.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef HEADER_CURL_TOOL_CB_SEE_H
-#define HEADER_CURL_TOOL_CB_SEE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#if defined(WIN32) && !defined(__MINGW64__)
-
-int tool_ftruncate64(int fd, curl_off_t where);
-
-#undef ftruncate
-#define ftruncate(fd,where) tool_ftruncate64(fd,where)
-
-#ifndef HAVE_FTRUNCATE
-# define HAVE_FTRUNCATE 1
-#endif
-
-#endif /* WIN32 && ! __MINGW64__ */
-
-/*
-** callback for CURLOPT_SEEKFUNCTION
-*/
-
-int tool_seek_cb(void *userdata, curl_off_t offset, int whence);
-
-#endif /* HEADER_CURL_TOOL_CB_SEE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_wrt.c b/external/libcurl_android/jni/libcurl/src/tool_cb_wrt.c
deleted file mode 100755
index dfbf95cc..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_wrt.c
+++ /dev/null
@@ -1,152 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_msgs.h"
-#include "tool_cb_wrt.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/*
-** callback for CURLOPT_WRITEFUNCTION
-*/
-
-size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata)
-{
- size_t rc;
- struct OutStruct *outs = userdata;
- struct OperationConfig *config = outs->config;
-
- /*
- * Once that libcurl has called back tool_write_cb() the returned value
- * is checked against the amount that was intended to be written, if
- * it does not match then it fails with CURLE_WRITE_ERROR. So at this
- * point returning a value different from sz*nmemb indicates failure.
- */
- const size_t failure = (sz * nmemb) ? 0 : 1;
-
- if(!config)
- return failure;
-
-#ifdef DEBUGBUILD
- if(config->include_headers) {
- if(sz * nmemb > (size_t)CURL_MAX_HTTP_HEADER) {
- warnf(config, "Header data size exceeds single call write limit!\n");
- return failure;
- }
- }
- else {
- if(sz * nmemb > (size_t)CURL_MAX_WRITE_SIZE) {
- warnf(config, "Data size exceeds single call write limit!\n");
- return failure;
- }
- }
-
- {
- /* Some internal congruency checks on received OutStruct */
- bool check_fails = FALSE;
- if(outs->filename) {
- /* regular file */
- if(!*outs->filename)
- check_fails = TRUE;
- if(!outs->s_isreg)
- check_fails = TRUE;
- if(outs->fopened && !outs->stream)
- check_fails = TRUE;
- if(!outs->fopened && outs->stream)
- check_fails = TRUE;
- if(!outs->fopened && outs->bytes)
- check_fails = TRUE;
- }
- else {
- /* standard stream */
- if(!outs->stream || outs->s_isreg || outs->fopened)
- check_fails = TRUE;
- if(outs->alloc_filename || outs->is_cd_filename || outs->init)
- check_fails = TRUE;
- }
- if(check_fails) {
- warnf(config, "Invalid output struct data for write callback\n");
- return failure;
- }
- }
-#endif
-
- if(!outs->stream) {
- FILE *file;
-
- if(!outs->filename || !*outs->filename) {
- warnf(config, "Remote filename has no length!\n");
- return failure;
- }
-
- if(outs->is_cd_filename) {
- /* don't overwrite existing files */
- file = fopen(outs->filename, "rb");
- if(file) {
- fclose(file);
- warnf(config, "Refusing to overwrite %s: %s\n", outs->filename,
- strerror(EEXIST));
- return failure;
- }
- }
-
- /* open file for writing */
- file = fopen(outs->filename, "wb");
- if(!file) {
- warnf(config, "Failed to create the file %s: %s\n", outs->filename,
- strerror(errno));
- return failure;
- }
- outs->s_isreg = TRUE;
- outs->fopened = TRUE;
- outs->stream = file;
- outs->bytes = 0;
- outs->init = 0;
- }
-
- rc = fwrite(buffer, sz, nmemb, outs->stream);
-
- if((sz * nmemb) == rc)
- /* we added this amount of data to the output */
- outs->bytes += (sz * nmemb);
-
- if(config->readbusy) {
- config->readbusy = FALSE;
- curl_easy_pause(config->easy, CURLPAUSE_CONT);
- }
-
- if(config->nobuffer) {
- /* output buffering disabled */
- int res = fflush(outs->stream);
- if(res)
- return failure;
- }
-
- return rc;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cb_wrt.h b/external/libcurl_android/jni/libcurl/src/tool_cb_wrt.h
deleted file mode 100755
index 380d8dd6..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cb_wrt.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_TOOL_CB_WRT_H
-#define HEADER_CURL_TOOL_CB_WRT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-/*
-** callback for CURLOPT_WRITEFUNCTION
-*/
-
-size_t tool_write_cb(void *buffer, size_t sz, size_t nmemb, void *userdata);
-
-#endif /* HEADER_CURL_TOOL_CB_WRT_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cfgable.c b/external/libcurl_android/jni/libcurl/src/tool_cfgable.c
deleted file mode 100755
index 2fdae073..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cfgable.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "tool_cfgable.h"
-#include "tool_main.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-void config_init(struct OperationConfig* config)
-{
- memset(config, 0, sizeof(struct OperationConfig));
-
- config->postfieldsize = -1;
- config->use_httpget = FALSE;
- config->create_dirs = FALSE;
- config->maxredirs = DEFAULT_MAXREDIRS;
- config->proto = CURLPROTO_ALL; /* FIXME: better to read from library */
- config->proto_present = FALSE;
- config->proto_redir =
- CURLPROTO_ALL & ~(CURLPROTO_FILE|CURLPROTO_SCP); /* not FILE or SCP */
- config->proto_redir_present = FALSE;
-}
-
-static void free_config_fields(struct OperationConfig *config)
-{
- struct getout *urlnode;
-
- Curl_safefree(config->random_file);
- Curl_safefree(config->egd_file);
- Curl_safefree(config->useragent);
- Curl_safefree(config->cookie);
- Curl_safefree(config->cookiejar);
- Curl_safefree(config->cookiefile);
-
- Curl_safefree(config->postfields);
- Curl_safefree(config->referer);
-
- Curl_safefree(config->headerfile);
- Curl_safefree(config->ftpport);
- Curl_safefree(config->iface);
-
- Curl_safefree(config->range);
-
- Curl_safefree(config->userpwd);
- Curl_safefree(config->tls_username);
- Curl_safefree(config->tls_password);
- Curl_safefree(config->tls_authtype);
- Curl_safefree(config->proxyuserpwd);
- Curl_safefree(config->proxy);
-
- Curl_safefree(config->dns_ipv6_addr);
- Curl_safefree(config->dns_ipv4_addr);
- Curl_safefree(config->dns_interface);
- Curl_safefree(config->dns_servers);
-
- Curl_safefree(config->noproxy);
-
- Curl_safefree(config->mail_from);
- curl_slist_free_all(config->mail_rcpt);
- Curl_safefree(config->mail_auth);
-
- Curl_safefree(config->netrc_file);
-
- urlnode = config->url_list;
- while(urlnode) {
- struct getout *next = urlnode->next;
- Curl_safefree(urlnode->url);
- Curl_safefree(urlnode->outfile);
- Curl_safefree(urlnode->infile);
- Curl_safefree(urlnode);
- urlnode = next;
- }
- config->url_list = NULL;
- config->url_last = NULL;
- config->url_get = NULL;
- config->url_out = NULL;
-
- Curl_safefree(config->cipher_list);
- Curl_safefree(config->cert);
- Curl_safefree(config->cert_type);
- Curl_safefree(config->cacert);
- Curl_safefree(config->capath);
- Curl_safefree(config->crlfile);
- Curl_safefree(config->key);
- Curl_safefree(config->key_type);
- Curl_safefree(config->key_passwd);
- Curl_safefree(config->pubkey);
- Curl_safefree(config->hostpubmd5);
- Curl_safefree(config->engine);
-
- Curl_safefree(config->customrequest);
- Curl_safefree(config->krblevel);
-
- Curl_safefree(config->xoauth2_bearer);
-
- Curl_safefree(config->writeout);
-
- curl_slist_free_all(config->quote);
- curl_slist_free_all(config->postquote);
- curl_slist_free_all(config->prequote);
-
- curl_slist_free_all(config->headers);
- curl_slist_free_all(config->proxyheaders);
-
- if(config->httppost) {
- curl_formfree(config->httppost);
- config->httppost = NULL;
- }
- config->last_post = NULL;
-
- curl_slist_free_all(config->telnet_options);
- curl_slist_free_all(config->resolve);
-
- Curl_safefree(config->socksproxy);
- Curl_safefree(config->socks5_gssapi_service);
-
- Curl_safefree(config->ftp_account);
- Curl_safefree(config->ftp_alternative_to_user);
-}
-
-void config_free(struct OperationConfig *config)
-{
- struct OperationConfig *last = config;
-
- /* Free each of the structures in reverse order */
- while(last) {
- struct OperationConfig *prev = last->prev;
-
- free_config_fields(last);
- free(last);
-
- last = prev;
- }
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_cfgable.h b/external/libcurl_android/jni/libcurl/src/tool_cfgable.h
deleted file mode 100755
index 4ef26902..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_cfgable.h
+++ /dev/null
@@ -1,238 +0,0 @@
-#ifndef HEADER_CURL_TOOL_CFGABLE_H
-#define HEADER_CURL_TOOL_CFGABLE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "tool_sdecls.h"
-
-#include "tool_metalink.h"
-
-struct GlobalConfig;
-
-struct OperationConfig {
- CURL *easy; /* A copy of the handle from GlobalConfig */
- bool remote_time;
- char *random_file;
- char *egd_file;
- char *useragent;
- char *cookie; /* single line with specified cookies */
- char *cookiejar; /* write to this file */
- char *cookiefile; /* read from this file */
- bool cookiesession; /* new session? */
- bool encoding; /* Accept-Encoding please */
- bool tr_encoding; /* Transfer-Encoding please */
- unsigned long authtype; /* auth bitmask */
- bool use_resume;
- bool resume_from_current;
- bool disable_epsv;
- bool disable_eprt;
- bool ftp_pret;
- long proto;
- bool proto_present;
- long proto_redir;
- bool proto_redir_present;
- curl_off_t resume_from;
- char *postfields;
- curl_off_t postfieldsize;
- char *referer;
- double timeout;
- double connecttimeout;
- long maxredirs;
- curl_off_t max_filesize;
- char *headerfile;
- char *ftpport;
- char *iface;
- int localport;
- int localportrange;
- unsigned short porttouse;
- char *range;
- long low_speed_limit;
- long low_speed_time;
- char *dns_servers; /* dot notation: 1.1.1.1;2.2.2.2 */
- char *dns_interface; /* interface name */
- char *dns_ipv4_addr; /* dot notation */
- char *dns_ipv6_addr; /* dot notation */
- char *userpwd;
- char *login_options;
- char *tls_username;
- char *tls_password;
- char *tls_authtype;
- char *proxyuserpwd;
- char *proxy;
- int proxyver; /* set to CURLPROXY_HTTP* define */
- char *noproxy;
- char *mail_from;
- struct curl_slist *mail_rcpt;
- char *mail_auth;
- bool sasl_ir; /* Enable/disable SASL initial response */
- bool proxytunnel;
- bool ftp_append; /* APPE on ftp */
- bool use_ascii; /* select ascii or text transfer */
- bool autoreferer; /* automatically set referer */
- bool failonerror; /* fail on (HTTP) errors */
- bool include_headers; /* send headers to data output */
- bool no_body; /* don't get the body */
- bool dirlistonly; /* only get the FTP dir list */
- bool followlocation; /* follow http redirects */
- bool unrestricted_auth; /* Continue to send authentication (user+password)
- when following ocations, even when hostname
- changed */
- bool netrc_opt;
- bool netrc;
- char *netrc_file;
- struct getout *url_list; /* point to the first node */
- struct getout *url_last; /* point to the last/current node */
- struct getout *url_get; /* point to the node to fill in URL */
- struct getout *url_out; /* point to the node to fill in outfile */
- char *cipher_list;
- char *cert;
- char *cert_type;
- char *cacert;
- char *capath;
- char *crlfile;
- char *key;
- char *key_type;
- char *key_passwd;
- char *pubkey;
- char *hostpubmd5;
- char *engine;
- bool crlf;
- char *customrequest;
- char *krblevel;
- long httpversion;
- bool nobuffer;
- bool readbusy; /* set when reading input returns EAGAIN */
- bool globoff;
- bool use_httpget;
- bool insecure_ok; /* set TRUE to allow insecure SSL connects */
- bool create_dirs;
- bool ftp_create_dirs;
- bool ftp_skip_ip;
- bool proxynegotiate;
- bool proxyntlm;
- bool proxydigest;
- bool proxybasic;
- bool proxyanyauth;
- char *writeout; /* %-styled format string to output */
- bool writeenv; /* write results to environment, if available */
- struct curl_slist *quote;
- struct curl_slist *postquote;
- struct curl_slist *prequote;
- long ssl_version;
- long ip_version;
- curl_TimeCond timecond;
- time_t condtime;
- struct curl_slist *headers;
- struct curl_slist *proxyheaders;
- struct curl_httppost *httppost;
- struct curl_httppost *last_post;
- struct curl_slist *telnet_options;
- struct curl_slist *resolve;
- HttpReq httpreq;
-
- /* for bandwidth limiting features: */
- curl_off_t sendpersecond; /* send to peer */
- curl_off_t recvpersecond; /* receive from peer */
-
- bool ftp_ssl;
- bool ftp_ssl_reqd;
- bool ftp_ssl_control;
- bool ftp_ssl_ccc;
- int ftp_ssl_ccc_mode;
-
- char *socksproxy; /* set to server string */
- int socksver; /* set to CURLPROXY_SOCKS* define */
- char *socks5_gssapi_service; /* set service name for gssapi principal
- * default rcmd */
- int socks5_gssapi_nec ; /* The NEC reference server does not protect
- * the encryption type exchange */
-
- bool tcp_nodelay;
- long req_retry; /* number of retries */
- long retry_delay; /* delay between retries (in seconds) */
- long retry_maxtime; /* maximum time to keep retrying */
-
- char *ftp_account; /* for ACCT */
- char *ftp_alternative_to_user; /* send command if USER/PASS fails */
- int ftp_filemethod;
- long tftp_blksize; /* TFTP BLKSIZE option */
- bool ignorecl; /* --ignore-content-length */
- bool disable_sessionid;
-
- bool raw;
- bool post301;
- bool post302;
- bool post303;
- bool nokeepalive; /* for keepalive needs */
- long alivetime;
- bool content_disposition; /* use Content-disposition filename */
-
- int default_node_flags; /* default flags to search for each 'node', which
- is basically each given URL to transfer */
-
- bool xattr; /* store metadata in extended attributes */
- long gssapi_delegation;
- bool ssl_allow_beast; /* allow this SSL vulnerability */
-
- bool use_metalink; /* process given URLs as metalink XML file */
- metalinkfile *metalinkfile_list; /* point to the first node */
- metalinkfile *metalinkfile_last; /* point to the last/current node */
-#ifdef CURLDEBUG
- bool test_event_based;
-#endif
- char *xoauth2_bearer; /* XOAUTH2 bearer token */
- bool nonpn; /* enable/disable TLS NPN extension */
- bool noalpn; /* enable/disable TLS ALPN extension */
-
- struct GlobalConfig *global;
- struct OperationConfig *prev;
- struct OperationConfig *next; /* Always last in the struct */
-};
-
-struct GlobalConfig {
- CURL *easy; /* Once we have one, we keep it here */
- int showerror; /* -1 == unset, default => show errors
- 0 => -s is used to NOT show errors
- 1 => -S has been used to show errors */
- bool mute; /* don't show messages, --silent given */
- bool noprogress; /* don't show progress bar --silent given */
- bool isatty; /* Updated internally if output is a tty */
- FILE *errors; /* Error stream, defaults to stderr */
- bool errors_fopened; /* Whether error stream isn't stderr */
- char *trace_dump; /* file to dump the network trace to */
- FILE *trace_stream;
- bool trace_fopened;
- trace tracetype;
- bool tracetime; /* include timestamp? */
- int progressmode; /* CURL_PROGRESS_BAR / CURL_PROGRESS_STATS */
- char *libcurl; /* Output libcurl code to this file name */
-
- struct OperationConfig *first;
- struct OperationConfig *current;
- struct OperationConfig *last; /* Always last in the struct */
-};
-
-void config_init(struct OperationConfig *config);
-void config_free(struct OperationConfig *config);
-
-#endif /* HEADER_CURL_TOOL_CFGABLE_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_convert.c b/external/libcurl_android/jni/libcurl/src/tool_convert.c
deleted file mode 100755
index ecce036a..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_convert.c
+++ /dev/null
@@ -1,150 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef CURL_DOES_CONVERSIONS
-
-#ifdef HAVE_ICONV
-# include <iconv.h>
-#endif
-
-#include "tool_convert.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef HAVE_ICONV
-
-/* curl tool iconv conversion descriptors */
-static iconv_t inbound_cd = (iconv_t)-1;
-static iconv_t outbound_cd = (iconv_t)-1;
-
-/* set default codesets for iconv */
-#ifndef CURL_ICONV_CODESET_OF_NETWORK
-# define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
-#endif
-
-/*
- * convert_to_network() is a curl tool function to convert
- * from the host encoding to ASCII on non-ASCII platforms.
- */
-CURLcode convert_to_network(char *buffer, size_t length)
-{
- /* translate from the host encoding to the network encoding */
- char *input_ptr, *output_ptr;
- size_t res, in_bytes, out_bytes;
-
- /* open an iconv conversion descriptor if necessary */
- if(outbound_cd == (iconv_t)-1) {
- outbound_cd = iconv_open(CURL_ICONV_CODESET_OF_NETWORK,
- CURL_ICONV_CODESET_OF_HOST);
- if(outbound_cd == (iconv_t)-1) {
- return CURLE_CONV_FAILED;
- }
- }
- /* call iconv */
- input_ptr = output_ptr = buffer;
- in_bytes = out_bytes = length;
- res = iconv(outbound_cd, &input_ptr, &in_bytes,
- &output_ptr, &out_bytes);
- if((res == (size_t)-1) || (in_bytes != 0)) {
- return CURLE_CONV_FAILED;
- }
-
- return CURLE_OK;
-}
-
-/*
- * convert_from_network() is a curl tool function
- * for performing ASCII conversions on non-ASCII platforms.
- */
-CURLcode convert_from_network(char *buffer, size_t length)
-{
- /* translate from the network encoding to the host encoding */
- char *input_ptr, *output_ptr;
- size_t res, in_bytes, out_bytes;
-
- /* open an iconv conversion descriptor if necessary */
- if(inbound_cd == (iconv_t)-1) {
- inbound_cd = iconv_open(CURL_ICONV_CODESET_OF_HOST,
- CURL_ICONV_CODESET_OF_NETWORK);
- if(inbound_cd == (iconv_t)-1) {
- return CURLE_CONV_FAILED;
- }
- }
- /* call iconv */
- input_ptr = output_ptr = buffer;
- in_bytes = out_bytes = length;
- res = iconv(inbound_cd, &input_ptr, &in_bytes,
- &output_ptr, &out_bytes);
- if((res == (size_t)-1) || (in_bytes != 0)) {
- return CURLE_CONV_FAILED;
- }
-
- return CURLE_OK;
-}
-
-void convert_cleanup(void)
-{
- /* close iconv conversion descriptors */
- if(inbound_cd != (iconv_t)-1)
- (void)iconv_close(inbound_cd);
- if(outbound_cd != (iconv_t)-1)
- (void)iconv_close(outbound_cd);
-}
-
-#endif /* HAVE_ICONV */
-
-char convert_char(curl_infotype infotype, char this_char)
-{
-/* determine how this specific character should be displayed */
- switch(infotype) {
- case CURLINFO_DATA_IN:
- case CURLINFO_DATA_OUT:
- case CURLINFO_SSL_DATA_IN:
- case CURLINFO_SSL_DATA_OUT:
- /* data, treat as ASCII */
- if((this_char >= 0x20) && (this_char < 0x7f)) {
- /* printable ASCII hex value: convert to host encoding */
- (void)convert_from_network(&this_char, 1);
- }
- else {
- /* non-printable ASCII, use a replacement character */
- return UNPRINTABLE_CHAR;
- }
- /* fall through to default */
- default:
- /* treat as host encoding */
- if(ISPRINT(this_char)
- && (this_char != '\t')
- && (this_char != '\r')
- && (this_char != '\n')) {
- /* printable characters excluding tabs and line end characters */
- return this_char;
- }
- break;
- }
- /* non-printable, use a replacement character */
- return UNPRINTABLE_CHAR;
-}
-
-#endif /* CURL_DOES_CONVERSIONS */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_convert.h b/external/libcurl_android/jni/libcurl/src/tool_convert.h
deleted file mode 100755
index 32d473f9..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_convert.h
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef HEADER_CURL_TOOL_CONVERT_H
-#define HEADER_CURL_TOOL_CONVERT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef CURL_DOES_CONVERSIONS
-
-#ifdef HAVE_ICONV
-
-CURLcode convert_to_network(char *buffer, size_t length);
-CURLcode convert_from_network(char *buffer, size_t length);
-void convert_cleanup(void);
-
-#endif /* HAVE_ICONV */
-
-char convert_char(curl_infotype infotype, char this_char);
-
-#endif /* CURL_DOES_CONVERSIONS */
-
-#if !defined(CURL_DOES_CONVERSIONS) || !defined(HAVE_ICONV)
-#define convert_cleanup() Curl_nop_stmt
-#endif
-
-#endif /* HEADER_CURL_TOOL_CONVERT_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_dirhie.c b/external/libcurl_android/jni/libcurl/src/tool_dirhie.c
deleted file mode 100755
index 5965f7a7..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_dirhie.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include <sys/stat.h>
-
-#ifdef WIN32
-# include <direct.h>
-#endif
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_dirhie.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef NETWARE
-# ifndef __NOVELL_LIBC__
-# define mkdir mkdir_510
-# endif
-#endif
-
-#ifdef WIN32
-# define mkdir(x,y) (mkdir)((x))
-# ifndef __POCC__
-# define F_OK 0
-# endif
-#endif
-
-static void show_dir_errno(FILE *errors, const char *name)
-{
- switch(ERRNO) {
-#ifdef EACCES
- case EACCES:
- fprintf(errors, "You don't have permission to create %s.\n", name);
- break;
-#endif
-#ifdef ENAMETOOLONG
- case ENAMETOOLONG:
- fprintf(errors, "The directory name %s is too long.\n", name);
- break;
-#endif
-#ifdef EROFS
- case EROFS:
- fprintf(errors, "%s resides on a read-only file system.\n", name);
- break;
-#endif
-#ifdef ENOSPC
- case ENOSPC:
- fprintf(errors, "No space left on the file system that will "
- "contain the directory %s.\n", name);
- break;
-#endif
-#ifdef EDQUOT
- case EDQUOT:
- fprintf(errors, "Cannot create directory %s because you "
- "exceeded your quota.\n", name);
- break;
-#endif
- default :
- fprintf(errors, "Error creating directory %s.\n", name);
- break;
- }
-}
-
-/*
- * Create the needed directory hierarchy recursively in order to save
- * multi-GETs in file output, ie:
- * curl "http://my.site/dir[1-5]/file[1-5].txt" -o "dir#1/file#2.txt"
- * should create all the dir* automagically
- */
-
-CURLcode create_dir_hierarchy(const char *outfile, FILE *errors)
-{
- char *tempdir;
- char *tempdir2;
- char *outdup;
- char *dirbuildup;
- CURLcode result = CURLE_OK;
- size_t outlen;
-
- outlen = strlen(outfile);
- outdup = strdup(outfile);
- if(!outdup)
- return CURLE_OUT_OF_MEMORY;
-
- dirbuildup = malloc(outlen + 1);
- if(!dirbuildup) {
- Curl_safefree(outdup);
- return CURLE_OUT_OF_MEMORY;
- }
- dirbuildup[0] = '\0';
-
- tempdir = strtok(outdup, DIR_CHAR);
-
- while(tempdir != NULL) {
- tempdir2 = strtok(NULL, DIR_CHAR);
- /* since strtok returns a token for the last word even
- if not ending with DIR_CHAR, we need to prune it */
- if(tempdir2 != NULL) {
- size_t dlen = strlen(dirbuildup);
- if(dlen)
- snprintf(&dirbuildup[dlen], outlen - dlen, "%s%s", DIR_CHAR, tempdir);
- else {
- if(0 != strncmp(outdup, DIR_CHAR, 1))
- strcpy(dirbuildup, tempdir);
- else
- snprintf(dirbuildup, outlen, "%s%s", DIR_CHAR, tempdir);
- }
- if(access(dirbuildup, F_OK) == -1) {
- if(-1 == mkdir(dirbuildup,(mode_t)0000750)) {
- show_dir_errno(errors, dirbuildup);
- result = CURLE_WRITE_ERROR;
- break; /* get out of loop */
- }
- }
- }
- tempdir = tempdir2;
- }
-
- Curl_safefree(dirbuildup);
- Curl_safefree(outdup);
-
- return result;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_dirhie.h b/external/libcurl_android/jni/libcurl/src/tool_dirhie.h
deleted file mode 100755
index 5f19575d..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_dirhie.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef HEADER_CURL_TOOL_DIRHIE_H
-#define HEADER_CURL_TOOL_DIRHIE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-CURLcode create_dir_hierarchy(const char *outfile, FILE *errors);
-
-#endif /* HEADER_CURL_TOOL_DIRHIE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_doswin.c b/external/libcurl_android/jni/libcurl/src/tool_doswin.c
deleted file mode 100755
index dd6e8bb8..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_doswin.c
+++ /dev/null
@@ -1,299 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#if defined(MSDOS) || defined(WIN32)
-
-#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
-# include <libgen.h>
-#endif
-
-#ifdef WIN32
-# include "tool_cfgable.h"
-# include "tool_libinfo.h"
-#endif
-
-#include "tool_bname.h"
-#include "tool_doswin.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/*
- * Macros ALWAYS_TRUE and ALWAYS_FALSE are used to avoid compiler warnings.
- */
-
-#define ALWAYS_TRUE (1)
-#define ALWAYS_FALSE (0)
-
-#if defined(_MSC_VER) && !defined(__POCC__)
-# undef ALWAYS_TRUE
-# undef ALWAYS_FALSE
-# if (_MSC_VER < 1500)
-# define ALWAYS_TRUE (0, 1)
-# define ALWAYS_FALSE (1, 0)
-# else
-# define ALWAYS_TRUE \
-__pragma(warning(push)) \
-__pragma(warning(disable:4127)) \
-(1) \
-__pragma(warning(pop))
-# define ALWAYS_FALSE \
-__pragma(warning(push)) \
-__pragma(warning(disable:4127)) \
-(0) \
-__pragma(warning(pop))
-# endif
-#endif
-
-#ifdef WIN32
-# undef PATH_MAX
-# define PATH_MAX MAX_PATH
-#endif
-
-#ifndef S_ISCHR
-# ifdef S_IFCHR
-# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
-# else
-# define S_ISCHR(m) (0) /* cannot tell if file is a device */
-# endif
-#endif
-
-#ifdef WIN32
-# define _use_lfn(f) ALWAYS_TRUE /* long file names always available */
-#elif !defined(__DJGPP__) || (__DJGPP__ < 2) /* DJGPP 2.0 has _use_lfn() */
-# define _use_lfn(f) ALWAYS_FALSE /* long file names never available */
-#elif defined(__DJGPP__)
-# include <fcntl.h> /* _use_lfn(f) prototype */
-#endif
-
-static const char *msdosify (const char *file_name);
-static char *rename_if_dos_device_name (char *file_name);
-
-/*
- * sanitize_dos_name: returns a newly allocated string holding a
- * valid file name which will be a transformation of given argument
- * in case this wasn't already a valid file name.
- *
- * This function takes ownership of given argument, free'ing it before
- * returning. Caller is responsible of free'ing returned string. Upon
- * out of memory condition function returns NULL.
- */
-
-char *sanitize_dos_name(char *file_name)
-{
- char new_name[PATH_MAX];
-
- if(!file_name)
- return NULL;
-
- if(strlen(file_name) >= PATH_MAX)
- file_name[PATH_MAX-1] = '\0'; /* truncate it */
-
- strcpy(new_name, msdosify(file_name));
-
- Curl_safefree(file_name);
-
- return strdup(rename_if_dos_device_name(new_name));
-}
-
-/* The following functions are taken with modification from the DJGPP
- * port of tar 1.12. They use algorithms originally from DJTAR. */
-
-static const char *msdosify (const char *file_name)
-{
- static char dos_name[PATH_MAX];
- static const char illegal_chars_dos[] = ".+, ;=[]" /* illegal in DOS */
- "|<>\\\":?*"; /* illegal in DOS & W95 */
- static const char *illegal_chars_w95 = &illegal_chars_dos[8];
- int idx, dot_idx;
- const char *s = file_name;
- char *d = dos_name;
- const char *const dlimit = dos_name + sizeof(dos_name) - 1;
- const char *illegal_aliens = illegal_chars_dos;
- size_t len = sizeof(illegal_chars_dos) - 1;
-
- /* Support for Windows 9X VFAT systems, when available. */
- if(_use_lfn(file_name)) {
- illegal_aliens = illegal_chars_w95;
- len -= (illegal_chars_w95 - illegal_chars_dos);
- }
-
- /* Get past the drive letter, if any. */
- if(s[0] >= 'A' && s[0] <= 'z' && s[1] == ':') {
- *d++ = *s++;
- *d++ = *s++;
- }
-
- for(idx = 0, dot_idx = -1; *s && d < dlimit; s++, d++) {
- if(memchr(illegal_aliens, *s, len)) {
- /* Dots are special: DOS doesn't allow them as the leading character,
- and a file name cannot have more than a single dot. We leave the
- first non-leading dot alone, unless it comes too close to the
- beginning of the name: we want sh.lex.c to become sh_lex.c, not
- sh.lex-c. */
- if(*s == '.') {
- if(idx == 0 && (s[1] == '/' || (s[1] == '.' && s[2] == '/'))) {
- /* Copy "./" and "../" verbatim. */
- *d++ = *s++;
- if(*s == '.')
- *d++ = *s++;
- *d = *s;
- }
- else if(idx == 0)
- *d = '_';
- else if(dot_idx >= 0) {
- if(dot_idx < 5) { /* 5 is a heuristic ad-hoc'ery */
- d[dot_idx - idx] = '_'; /* replace previous dot */
- *d = '.';
- }
- else
- *d = '-';
- }
- else
- *d = '.';
-
- if(*s == '.')
- dot_idx = idx;
- }
- else if(*s == '+' && s[1] == '+') {
- if(idx - 2 == dot_idx) { /* .c++, .h++ etc. */
- *d++ = 'x';
- *d = 'x';
- }
- else {
- /* libg++ etc. */
- memcpy (d, "plus", 4);
- d += 3;
- }
- s++;
- idx++;
- }
- else
- *d = '_';
- }
- else
- *d = *s;
- if(*s == '/') {
- idx = 0;
- dot_idx = -1;
- }
- else
- idx++;
- }
-
- *d = '\0';
- return dos_name;
-}
-
-static char *rename_if_dos_device_name (char *file_name)
-{
- /* We could have a file whose name is a device on MS-DOS. Trying to
- * retrieve such a file would fail at best and wedge us at worst. We need
- * to rename such files. */
- char *base;
- struct_stat st_buf;
- char fname[PATH_MAX];
-
- strncpy(fname, file_name, PATH_MAX-1);
- fname[PATH_MAX-1] = '\0';
- base = basename(fname);
- if(((stat(base, &st_buf)) == 0) && (S_ISCHR(st_buf.st_mode))) {
- size_t blen = strlen(base);
-
- if(strlen(fname) >= PATH_MAX-1) {
- /* Make room for the '_' */
- blen--;
- base[blen] = '\0';
- }
- /* Prepend a '_'. */
- memmove(base + 1, base, blen + 1);
- base[0] = '_';
- strcpy(file_name, fname);
- }
- return file_name;
-}
-
-#if defined(MSDOS) && (defined(__DJGPP__) || defined(__GO32__))
-
-/*
- * Disable program default argument globbing. We do it on our own.
- */
-char **__crt0_glob_function(char *arg)
-{
- (void)arg;
- return (char**)0;
-}
-
-#endif /* MSDOS && (__DJGPP__ || __GO32__) */
-
-#ifdef WIN32
-
-/*
- * Function to find CACert bundle on a Win32 platform using SearchPath.
- * (SearchPath is already declared via inclusions done in setup header file)
- * (Use the ASCII version instead of the unicode one!)
- * The order of the directories it searches is:
- * 1. application's directory
- * 2. current working directory
- * 3. Windows System directory (e.g. C:\windows\system32)
- * 4. Windows Directory (e.g. C:\windows)
- * 5. all directories along %PATH%
- *
- * For WinXP and later search order actually depends on registry value:
- * HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\SafeProcessSearchMode
- */
-
-CURLcode FindWin32CACert(struct OperationConfig *config,
- const char *bundle_file)
-{
- CURLcode result = CURLE_OK;
-
- /* search and set cert file only if libcurl supports SSL */
- if(curlinfo->features & CURL_VERSION_SSL) {
-
- DWORD res_len;
- DWORD buf_tchar_size = PATH_MAX + 1;
- DWORD buf_bytes_size = sizeof(TCHAR) * buf_tchar_size;
- char *ptr = NULL;
-
- char *buf = malloc(buf_bytes_size);
- if(!buf)
- return CURLE_OUT_OF_MEMORY;
- buf[0] = '\0';
-
- res_len = SearchPathA(NULL, bundle_file, NULL, buf_tchar_size, buf, &ptr);
- if(res_len > 0) {
- Curl_safefree(config->cacert);
- config->cacert = strdup(buf);
- if(!config->cacert)
- result = CURLE_OUT_OF_MEMORY;
- }
-
- Curl_safefree(buf);
- }
-
- return result;
-}
-
-#endif /* WIN32 */
-
-#endif /* MSDOS || WIN32 */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_doswin.h b/external/libcurl_android/jni/libcurl/src/tool_doswin.h
deleted file mode 100755
index cd216dbc..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_doswin.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef HEADER_CURL_TOOL_DOSWIN_H
-#define HEADER_CURL_TOOL_DOSWIN_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#if defined(MSDOS) || defined(WIN32)
-
-char *sanitize_dos_name(char *file_name);
-
-#if defined(MSDOS) && (defined(__DJGPP__) || defined(__GO32__))
-
-char **__crt0_glob_function(char *arg);
-
-#endif /* MSDOS && (__DJGPP__ || __GO32__) */
-
-#ifdef WIN32
-
-CURLcode FindWin32CACert(struct OperationConfig *config,
- const char *bundle_file);
-
-#endif /* WIN32 */
-
-#endif /* MSDOS || WIN32 */
-
-#endif /* HEADER_CURL_TOOL_DOSWIN_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_easysrc.c b/external/libcurl_android/jni/libcurl/src/tool_easysrc.c
deleted file mode 100755
index 3db27bb5..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_easysrc.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifndef CURL_DISABLE_LIBCURL_OPTION
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_easysrc.h"
-#include "tool_msgs.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/* global variable definitions, for easy-interface source code generation */
-
-struct curl_slist *easysrc_decl = NULL; /* Variable declarations */
-struct curl_slist *easysrc_data = NULL; /* Build slists, forms etc. */
-struct curl_slist *easysrc_code = NULL; /* Setopt calls */
-struct curl_slist *easysrc_toohard = NULL; /* Unconvertible setopt */
-struct curl_slist *easysrc_clean = NULL; /* Clean up allocated data */
-int easysrc_form_count = 0;
-int easysrc_slist_count = 0;
-
-static const char *const srchead[]={
- "/********* Sample code generated by the curl command line tool **********",
- " * All curl_easy_setopt() options are documented at:",
- " * http://curl.haxx.se/libcurl/c/curl_easy_setopt.html",
- " ************************************************************************/",
- "#include <curl/curl.h>",
- "",
- "int main(int argc, char *argv[])",
- "{",
- " CURLcode ret;",
- " CURL *hnd;",
- NULL
-};
-/* easysrc_decl declarations come here */
-/* easysrc_data initialisations come here */
-/* easysrc_code statements come here */
-static const char *const srchard[]={
- "/* Here is a list of options the curl code used that cannot get generated",
- " as source easily. You may select to either not use them or implement",
- " them yourself.",
- "",
- NULL
-};
-static const char *const srcend[]={
- "",
- " return (int)ret;",
- "}",
- "/**** End of sample code ****/",
- NULL
-};
-
-/* Clean up all source code if we run out of memory */
-static void easysrc_free(void)
-{
- curl_slist_free_all(easysrc_decl);
- easysrc_decl = NULL;
- curl_slist_free_all(easysrc_data);
- easysrc_data = NULL;
- curl_slist_free_all(easysrc_code);
- easysrc_code = NULL;
- curl_slist_free_all(easysrc_toohard);
- easysrc_toohard = NULL;
- curl_slist_free_all(easysrc_clean);
- easysrc_clean = NULL;
-}
-
-/* Add a source line to the main code or remarks */
-CURLcode easysrc_add(struct curl_slist **plist, const char *line)
-{
- CURLcode ret = CURLE_OK;
- struct curl_slist *list =
- curl_slist_append(*plist, line);
- if(!list) {
- easysrc_free();
- ret = CURLE_OUT_OF_MEMORY;
- }
- else
- *plist = list;
- return ret;
-}
-
-CURLcode easysrc_addf(struct curl_slist **plist, const char *fmt, ...)
-{
- CURLcode ret;
- char *bufp;
- va_list ap;
- va_start(ap, fmt);
- bufp = curlx_mvaprintf(fmt, ap);
- va_end(ap);
- if(! bufp) {
- ret = CURLE_OUT_OF_MEMORY;
- }
- else {
- ret = easysrc_add(plist, bufp);
- curl_free(bufp);
- }
- return ret;
-}
-
-#define CHKRET(v) do {CURLcode ret = (v); if(ret) return ret;} WHILE_FALSE
-
-CURLcode easysrc_init(void)
-{
- CHKRET(easysrc_add(&easysrc_code,
- "hnd = curl_easy_init();"));
- return CURLE_OK;
-}
-
-CURLcode easysrc_perform(void)
-{
- /* Note any setopt calls which we could not convert */
- if(easysrc_toohard) {
- int i;
- struct curl_slist *ptr;
- const char *c;
- CHKRET(easysrc_add(&easysrc_code, ""));
- /* Preamble comment */
- for(i=0; ((c = srchard[i]) != NULL); i++)
- CHKRET(easysrc_add(&easysrc_code, c));
- /* Each unconverted option */
- for(ptr=easysrc_toohard; ptr; ptr = ptr->next)
- CHKRET(easysrc_add(&easysrc_code, ptr->data));
- CHKRET(easysrc_add(&easysrc_code, ""));
- CHKRET(easysrc_add(&easysrc_code, "*/"));
-
- curl_slist_free_all(easysrc_toohard);
- easysrc_toohard = NULL;
- }
-
- CHKRET(easysrc_add(&easysrc_code, ""));
- CHKRET(easysrc_add(&easysrc_code, "ret = curl_easy_perform(hnd);"));
- CHKRET(easysrc_add(&easysrc_code, ""));
-
- return CURLE_OK;
-}
-
-CURLcode easysrc_cleanup(void)
-{
- CHKRET(easysrc_add(&easysrc_code, "curl_easy_cleanup(hnd);"));
- CHKRET(easysrc_add(&easysrc_code, "hnd = NULL;"));
-
- return CURLE_OK;
-}
-
-void dumpeasysrc(struct GlobalConfig *config)
-{
- struct curl_slist *ptr;
- char *o = config->libcurl;
-
- if(o) {
- FILE *out;
- bool fopened = FALSE;
- if(strcmp(o, "-")) {
- out = fopen(o, "w");
- fopened = TRUE;
- }
- else
- out = stdout;
- if(!out)
- warnf(config->current, "Failed to open %s to write libcurl code!\n", o);
- else {
- int i;
- const char *c;
-
- for(i=0; ((c = srchead[i]) != NULL); i++)
- fprintf(out, "%s\n", c);
-
- /* Declare variables used for complex setopt values */
- for(ptr=easysrc_decl; ptr; ptr = ptr->next)
- fprintf(out, " %s\n", ptr->data);
-
- /* Set up complex values for setopt calls */
- if(easysrc_data) {
- fprintf(out, "\n");
-
- for(ptr=easysrc_data; ptr; ptr = ptr->next)
- fprintf(out, " %s\n", ptr->data);
- }
-
- fprintf(out, "\n");
- for(ptr=easysrc_code; ptr; ptr = ptr->next) {
- if(ptr->data[0]) {
- fprintf(out, " %s\n", ptr->data);
- }
- else {
- fprintf(out, "\n");
- }
- }
-
- for(ptr=easysrc_clean; ptr; ptr = ptr->next)
- fprintf(out, " %s\n", ptr->data);
-
- for(i=0; ((c = srcend[i]) != NULL); i++)
- fprintf(out, "%s\n", c);
-
- if(fopened)
- fclose(out);
- }
- }
-
- easysrc_free();
-}
-
-#endif /* CURL_DISABLE_LIBCURL_OPTION */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_easysrc.h b/external/libcurl_android/jni/libcurl/src/tool_easysrc.h
deleted file mode 100755
index 07a4b787..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_easysrc.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef HEADER_CURL_TOOL_EASYSRC_H
-#define HEADER_CURL_TOOL_EASYSRC_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-#ifndef CURL_DISABLE_LIBCURL_OPTION
-
-/* global variable declarations, for easy-interface source code generation */
-
-extern struct curl_slist *easysrc_decl; /* Variable declarations */
-extern struct curl_slist *easysrc_data; /* Build slists, forms etc. */
-extern struct curl_slist *easysrc_code; /* Setopt calls etc. */
-extern struct curl_slist *easysrc_toohard; /* Unconvertible setopt */
-extern struct curl_slist *easysrc_clean; /* Clean up (reverse order) */
-
-extern int easysrc_form_count; /* Number of curl_httppost variables */
-extern int easysrc_slist_count; /* Number of curl_slist variables */
-
-extern CURLcode easysrc_init(void);
-extern CURLcode easysrc_add(struct curl_slist **plist, const char *bupf);
-extern CURLcode easysrc_addf(struct curl_slist **plist, const char *fmt, ...);
-extern CURLcode easysrc_perform(void);
-extern CURLcode easysrc_cleanup(void);
-
-void dumpeasysrc(struct GlobalConfig *config);
-
-#endif /* CURL_DISABLE_LIBCURL_OPTION */
-
-#endif /* HEADER_CURL_TOOL_EASYSRC_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_formparse.c b/external/libcurl_android/jni/libcurl/src/tool_formparse.c
deleted file mode 100755
index 1dcd897e..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_formparse.c
+++ /dev/null
@@ -1,361 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_mfiles.h"
-#include "tool_msgs.h"
-#include "tool_formparse.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-
-/*
- * helper function to get a word from form param
- * after call get_parm_word, str either point to string end
- * or point to any of end chars.
- */
-static char *get_param_word(char **str, char **end_pos)
-{
- char *ptr = *str;
- char *word_begin = NULL;
- char *ptr2;
- char *escape = NULL;
- const char *end_chars = ";,";
-
- /* the first non-space char is here */
- word_begin = ptr;
- if(*ptr == '"') {
- ++ptr;
- while(*ptr) {
- if(*ptr == '\\') {
- if(ptr[1] == '\\' || ptr[1] == '"') {
- /* remember the first escape position */
- if(!escape)
- escape = ptr;
- /* skip escape of back-slash or double-quote */
- ptr += 2;
- continue;
- }
- }
- if(*ptr == '"') {
- *end_pos = ptr;
- if(escape) {
- /* has escape, we restore the unescaped string here */
- ptr = ptr2 = escape;
- do {
- if(*ptr == '\\' && (ptr[1] == '\\' || ptr[1] == '"'))
- ++ptr;
- *ptr2++ = *ptr++;
- }
- while(ptr < *end_pos);
- *end_pos = ptr2;
- }
- while(*ptr && NULL==strchr(end_chars, *ptr))
- ++ptr;
- *str = ptr;
- return word_begin+1;
- }
- ++ptr;
- }
- /* end quote is missing, treat it as non-quoted. */
- ptr = word_begin;
- }
-
- while(*ptr && NULL==strchr(end_chars, *ptr))
- ++ptr;
- *str = *end_pos = ptr;
- return word_begin;
-}
-
-/***************************************************************************
- *
- * formparse()
- *
- * Reads a 'name=value' parameter and builds the appropriate linked list.
- *
- * Specify files to upload with 'name=@filename', or 'name=@"filename"'
- * in case the filename contain ',' or ';'. Supports specified
- * given Content-Type of the files. Such as ';type=<content-type>'.
- *
- * If literal_value is set, any initial '@' or '<' in the value string
- * loses its special meaning, as does any embedded ';type='.
- *
- * You may specify more than one file for a single name (field). Specify
- * multiple files by writing it like:
- *
- * 'name=@filename,filename2,filename3'
- *
- * or use double-quotes quote the filename:
- *
- * 'name=@"filename","filename2","filename3"'
- *
- * If you want content-types specified for each too, write them like:
- *
- * 'name=@filename;type=image/gif,filename2,filename3'
- *
- * If you want custom headers added for a single part, write them in a separate
- * file and do like this:
- *
- * 'name=foo;headers=@headerfile' or why not
- * 'name=@filemame;headers=@headerfile'
- *
- * To upload a file, but to fake the file name that will be included in the
- * formpost, do like this:
- *
- * 'name=@filename;filename=/dev/null' or quote the faked filename like:
- * 'name=@filename;filename="play, play, and play.txt"'
- *
- * If filename/path contains ',' or ';', it must be quoted by double-quotes,
- * else curl will fail to figure out the correct filename. if the filename
- * tobe quoted contains '"' or '\', '"' and '\' must be escaped by backslash.
- *
- * This function uses curl_formadd to fulfill it's job. Is heavily based on
- * the old curl_formparse code.
- *
- ***************************************************************************/
-
-int formparse(struct OperationConfig *config,
- const char *input,
- struct curl_httppost **httppost,
- struct curl_httppost **last_post,
- bool literal_value)
-{
- /* nextarg MUST be a string in the format 'name=contents' and we'll
- build a linked list with the info */
- char name[256];
- char *contents = NULL;
- char type_major[128] = "";
- char type_minor[128] = "";
- char *contp;
- const char *type = NULL;
- char *sep;
-
- if((1 == sscanf(input, "%255[^=]=", name)) &&
- ((contp = strchr(input, '=')) != NULL)) {
- /* the input was using the correct format */
-
- /* Allocate the contents */
- contents = strdup(contp+1);
- if(!contents) {
- fprintf(config->global->errors, "out of memory\n");
- return 1;
- }
- contp = contents;
-
- if('@' == contp[0] && !literal_value) {
-
- /* we use the @-letter to indicate file name(s) */
-
- struct multi_files *multi_start = NULL;
- struct multi_files *multi_current = NULL;
-
- char *ptr = contp;
- char *end = ptr + strlen(ptr);
-
- do {
- /* since this was a file, it may have a content-type specifier
- at the end too, or a filename. Or both. */
- char *filename = NULL;
- char *word_end;
- bool semicolon;
-
- type = NULL;
-
- ++ptr;
- contp = get_param_word(&ptr, &word_end);
- semicolon = (';' == *ptr) ? TRUE : FALSE;
- *word_end = '\0'; /* terminate the contp */
-
- /* have other content, continue parse */
- while(semicolon) {
- /* have type or filename field */
- ++ptr;
- while(*ptr && (ISSPACE(*ptr)))
- ++ptr;
-
- if(checkprefix("type=", ptr)) {
- /* set type pointer */
- type = &ptr[5];
-
- /* verify that this is a fine type specifier */
- if(2 != sscanf(type, "%127[^/]/%127[^;,\n]",
- type_major, type_minor)) {
- warnf(config, "Illegally formatted content-type field!\n");
- Curl_safefree(contents);
- FreeMultiInfo(&multi_start, &multi_current);
- return 2; /* illegal content-type syntax! */
- }
-
- /* now point beyond the content-type specifier */
- sep = (char *)type + strlen(type_major)+strlen(type_minor)+1;
-
- /* there's a semicolon following - we check if it is a filename
- specified and if not we simply assume that it is text that
- the user wants included in the type and include that too up
- to the next sep. */
- ptr = sep;
- if(*sep==';') {
- if(!checkprefix(";filename=", sep)) {
- ptr = sep + 1;
- (void)get_param_word(&ptr, &sep);
- semicolon = (';' == *ptr) ? TRUE : FALSE;
- }
- }
- else
- semicolon = FALSE;
-
- if(*sep)
- *sep = '\0'; /* zero terminate type string */
- }
- else if(checkprefix("filename=", ptr)) {
- ptr += 9;
- filename = get_param_word(&ptr, &word_end);
- semicolon = (';' == *ptr) ? TRUE : FALSE;
- *word_end = '\0';
- }
- else {
- /* unknown prefix, skip to next block */
- char *unknown = NULL;
- unknown = get_param_word(&ptr, &word_end);
- semicolon = (';' == *ptr) ? TRUE : FALSE;
- if(*unknown) {
- *word_end = '\0';
- warnf(config, "skip unknown form field: %s\n", unknown);
- }
- }
- }
- /* now ptr point to comma or string end */
-
-
- /* if type == NULL curl_formadd takes care of the problem */
-
- if(*contp && !AddMultiFiles(contp, type, filename, &multi_start,
- &multi_current)) {
- warnf(config, "Error building form post!\n");
- Curl_safefree(contents);
- FreeMultiInfo(&multi_start, &multi_current);
- return 3;
- }
-
- /* *ptr could be '\0', so we just check with the string end */
- } while(ptr < end); /* loop if there's another file name */
-
- /* now we add the multiple files section */
- if(multi_start) {
- struct curl_forms *forms = NULL;
- struct multi_files *start = multi_start;
- unsigned int i, count = 0;
- while(start) {
- start = start->next;
- ++count;
- }
- forms = malloc((count+1)*sizeof(struct curl_forms));
- if(!forms) {
- fprintf(config->global->errors, "Error building form post!\n");
- Curl_safefree(contents);
- FreeMultiInfo(&multi_start, &multi_current);
- return 4;
- }
- for(i = 0, start = multi_start; i < count; ++i, start = start->next) {
- forms[i].option = start->form.option;
- forms[i].value = start->form.value;
- }
- forms[count].option = CURLFORM_END;
- FreeMultiInfo(&multi_start, &multi_current);
- if(curl_formadd(httppost, last_post,
- CURLFORM_COPYNAME, name,
- CURLFORM_ARRAY, forms, CURLFORM_END) != 0) {
- warnf(config, "curl_formadd failed!\n");
- Curl_safefree(forms);
- Curl_safefree(contents);
- return 5;
- }
- Curl_safefree(forms);
- }
- }
- else {
- struct curl_forms info[4];
- int i = 0;
- char *ct = literal_value ? NULL : strstr(contp, ";type=");
-
- info[i].option = CURLFORM_COPYNAME;
- info[i].value = name;
- i++;
-
- if(ct) {
- info[i].option = CURLFORM_CONTENTTYPE;
- info[i].value = &ct[6];
- i++;
- ct[0] = '\0'; /* zero terminate here */
- }
-
- if(contp[0]=='<' && !literal_value) {
- info[i].option = CURLFORM_FILECONTENT;
- info[i].value = contp+1;
- i++;
- info[i].option = CURLFORM_END;
-
- if(curl_formadd(httppost, last_post,
- CURLFORM_ARRAY, info, CURLFORM_END ) != 0) {
- warnf(config, "curl_formadd failed, possibly the file %s is bad!\n",
- contp+1);
- Curl_safefree(contents);
- return 6;
- }
- }
- else {
-#ifdef CURL_DOES_CONVERSIONS
- if(convert_to_network(contp, strlen(contp))) {
- warnf(config, "curl_formadd failed!\n");
- Curl_safefree(contents);
- return 7;
- }
-#endif
- info[i].option = CURLFORM_COPYCONTENTS;
- info[i].value = contp;
- i++;
- info[i].option = CURLFORM_END;
- if(curl_formadd(httppost, last_post,
- CURLFORM_ARRAY, info, CURLFORM_END) != 0) {
- warnf(config, "curl_formadd failed!\n");
- Curl_safefree(contents);
- return 8;
- }
- }
- }
-
- }
- else {
- warnf(config, "Illegally formatted input field!\n");
- return 1;
- }
- Curl_safefree(contents);
- return 0;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_formparse.h b/external/libcurl_android/jni/libcurl/src/tool_formparse.h
deleted file mode 100755
index f7736264..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_formparse.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef HEADER_CURL_TOOL_FORMPARSE_H
-#define HEADER_CURL_TOOL_FORMPARSE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-int formparse(struct OperationConfig *config,
- const char *input,
- struct curl_httppost **httppost,
- struct curl_httppost **last_post,
- bool literal_value);
-
-#endif /* HEADER_CURL_TOOL_FORMPARSE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_getparam.c b/external/libcurl_android/jni/libcurl/src/tool_getparam.c
deleted file mode 100755
index 180878ba..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_getparam.c
+++ /dev/null
@@ -1,1889 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_binmode.h"
-#include "tool_cfgable.h"
-#include "tool_cb_prg.h"
-#include "tool_formparse.h"
-#include "tool_getparam.h"
-#include "tool_helpers.h"
-#include "tool_libinfo.h"
-#include "tool_metalink.h"
-#include "tool_msgs.h"
-#include "tool_paramhlp.h"
-#include "tool_parsecfg.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef MSDOS
-# define USE_WATT32
-#endif
-
-#define GetStr(str,val) do { \
- if(*(str)) { \
- free(*(str)); \
- *(str) = NULL; \
- } \
- if((val)) { \
- *(str) = strdup((val)); \
- if(!(*(str))) \
- return PARAM_NO_MEM; \
- } \
-} WHILE_FALSE
-
-struct LongShort {
- const char *letter; /* short name option */
- const char *lname; /* long name option */
- bool extraparam; /* whether it takes an additional argument */
-};
-
-static const struct LongShort aliases[]= {
- /* all these ones, starting with "*" or "$" as a short-option have *no*
- short option to mention. */
- {"*", "url", TRUE},
- {"*4", "dns-ipv4-addr", TRUE},
- {"*6", "dns-ipv6-addr", TRUE},
- {"*a", "random-file", TRUE},
- {"*b", "egd-file", TRUE},
- {"*B", "oauth2-bearer", TRUE},
- {"*c", "connect-timeout", TRUE},
- {"*d", "ciphers", TRUE},
- {"*D", "dns-interface", TRUE},
- {"*e", "disable-epsv", FALSE},
- {"*E", "epsv", FALSE},
- /* 'epsv' made like this to make --no-epsv and --epsv to work
- although --disable-epsv is the documented option */
-#ifdef USE_ENVIRONMENT
- {"*f", "environment", FALSE},
-#endif
- {"*F", "dns-servers", TRUE},
- {"*g", "trace", TRUE},
- {"*G", "npn", FALSE},
- {"*h", "trace-ascii", TRUE},
- {"*H", "alpn", FALSE},
- {"*i", "limit-rate", TRUE},
- {"*j", "compressed", FALSE},
- {"*J", "tr-encoding", FALSE},
- {"*k", "digest", FALSE},
- {"*l", "negotiate", FALSE},
- {"*m", "ntlm", FALSE},
- {"*M", "ntlm-wb", FALSE},
- {"*n", "basic", FALSE},
- {"*o", "anyauth", FALSE},
-#ifdef USE_WATT32
- {"*p", "wdebug", FALSE},
-#endif
- {"*q", "ftp-create-dirs", FALSE},
- {"*r", "create-dirs", FALSE},
- {"*s", "max-redirs", TRUE},
- {"*t", "proxy-ntlm", FALSE},
- {"*u", "crlf", FALSE},
- {"*v", "stderr", TRUE},
- {"*w", "interface", TRUE},
- {"*x", "krb" , TRUE},
- {"*x", "krb4" , TRUE},
- /* 'krb4' is the previous name */
- {"*y", "max-filesize", TRUE},
- {"*z", "disable-eprt", FALSE},
- {"*Z", "eprt", FALSE},
- /* 'eprt' made like this to make --no-eprt and --eprt to work
- although --disable-eprt is the documented option */
- {"$a", "ftp-ssl", FALSE},
- /* 'ftp-ssl' deprecated name since 7.20.0 */
- {"$a", "ssl", FALSE},
- /* 'ssl' new option name in 7.20.0, previously this was ftp-ssl */
- {"$b", "ftp-pasv", FALSE},
- {"$c", "socks5", TRUE},
- {"$c", "socks", TRUE},
- /* 'socks' is how the option once was documented but we prefer
- the --socks5 version for explicit version */
- {"$d", "tcp-nodelay", FALSE},
- {"$e", "proxy-digest", FALSE},
- {"$f", "proxy-basic", FALSE},
- {"$g", "retry", TRUE},
- {"$h", "retry-delay", TRUE},
- {"$i", "retry-max-time", TRUE},
- {"$k", "proxy-negotiate", FALSE},
- {"$m", "ftp-account", TRUE},
- {"$n", "proxy-anyauth", FALSE},
- {"$o", "trace-time", FALSE},
- {"$p", "ignore-content-length", FALSE},
- {"$q", "ftp-skip-pasv-ip", FALSE},
- {"$r", "ftp-method", TRUE},
- {"$s", "local-port", TRUE},
- {"$t", "socks4", TRUE},
- {"$T", "socks4a", TRUE},
- {"$u", "ftp-alternative-to-user", TRUE},
- {"$v", "ftp-ssl-reqd", FALSE},
- /* 'ftp-ssl-reqd' deprecated name since 7.20.0 */
- {"$v", "ssl-reqd", FALSE},
- /* 'ssl-reqd' new in 7.20.0, previously this was ftp-ssl-reqd */
- {"$w", "sessionid", FALSE},
- /* ¡sessionid' listed as --no-sessionid in the help */
- {"$x", "ftp-ssl-control", FALSE},
- {"$y", "ftp-ssl-ccc", FALSE},
- {"$j", "ftp-ssl-ccc-mode", TRUE},
- {"$z", "libcurl", TRUE},
- {"$#", "raw", FALSE},
- {"$0", "post301", FALSE},
- {"$1", "keepalive", FALSE},
- /* 'keepalive' listed as --no-keepalive in the help */
- {"$2", "socks5-hostname", TRUE},
- {"$3", "keepalive-time", TRUE},
- {"$4", "post302", FALSE},
- {"$5", "noproxy", TRUE},
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- {"$6", "socks5-gssapi-service", TRUE},
- {"$7", "socks5-gssapi-nec", FALSE},
-#endif
- {"$8", "proxy1.0", TRUE},
- {"$9", "tftp-blksize", TRUE},
- {"$A", "mail-from", TRUE},
- {"$B", "mail-rcpt", TRUE},
- {"$C", "ftp-pret", FALSE},
- {"$D", "proto", TRUE},
- {"$E", "proto-redir", TRUE},
- {"$F", "resolve", TRUE},
- {"$G", "delegation", TRUE},
- {"$H", "mail-auth", TRUE},
- {"$I", "post303", FALSE},
- {"$J", "metalink", FALSE},
- {"$K", "sasl-ir", FALSE},
- {"$L", "test-event", FALSE},
- {"0", "http1.0", FALSE},
- {"01", "http1.1", FALSE},
- {"02", "http2", FALSE},
- {"1", "tlsv1", FALSE},
- {"10", "tlsv1.0", FALSE},
- {"11", "tlsv1.1", FALSE},
- {"12", "tlsv1.2", FALSE},
- {"2", "sslv2", FALSE},
- {"3", "sslv3", FALSE},
- {"4", "ipv4", FALSE},
- {"6", "ipv6", FALSE},
- {"a", "append", FALSE},
- {"A", "user-agent", TRUE},
- {"b", "cookie", TRUE},
- {"B", "use-ascii", FALSE},
- {"c", "cookie-jar", TRUE},
- {"C", "continue-at", TRUE},
- {"d", "data", TRUE},
- {"da", "data-ascii", TRUE},
- {"db", "data-binary", TRUE},
- {"de", "data-urlencode", TRUE},
- {"D", "dump-header", TRUE},
- {"e", "referer", TRUE},
- {"E", "cert", TRUE},
- {"Ea", "cacert", TRUE},
- {"Eb", "cert-type", TRUE},
- {"Ec", "key", TRUE},
- {"Ed", "key-type", TRUE},
- {"Ee", "pass", TRUE},
- {"Ef", "engine", TRUE},
- {"Eg", "capath ", TRUE},
- {"Eh", "pubkey", TRUE},
- {"Ei", "hostpubmd5", TRUE},
- {"Ej", "crlfile", TRUE},
- {"Ek", "tlsuser", TRUE},
- {"El", "tlspassword", TRUE},
- {"Em", "tlsauthtype", TRUE},
- {"En", "ssl-allow-beast", FALSE},
- {"Eo", "login-options", TRUE},
- {"f", "fail", FALSE},
- {"F", "form", TRUE},
- {"Fs", "form-string", TRUE},
- {"g", "globoff", FALSE},
- {"G", "get", FALSE},
- {"h", "help", FALSE},
- {"H", "header", TRUE},
- {"Hp", "proxy-header", TRUE},
- {"i", "include", FALSE},
- {"I", "head", FALSE},
- {"j", "junk-session-cookies", FALSE},
- {"J", "remote-header-name", FALSE},
- {"k", "insecure", FALSE},
- {"K", "config", TRUE},
- {"l", "list-only", FALSE},
- {"L", "location", FALSE},
- {"Lt", "location-trusted", FALSE},
- {"m", "max-time", TRUE},
- {"M", "manual", FALSE},
- {"n", "netrc", FALSE},
- {"no", "netrc-optional", FALSE},
- {"ne", "netrc-file", TRUE},
- {"N", "buffer", FALSE},
- /* 'buffer' listed as --no-buffer in the help */
- {"o", "output", TRUE},
- {"O", "remote-name", FALSE},
- {"Oa", "remote-name-all", FALSE},
- {"p", "proxytunnel", FALSE},
- {"P", "ftpport", TRUE},
- /* 'ftpport' old version */
- {"P", "ftp-port", TRUE},
- {"q", "disable", FALSE},
- {"Q", "quote", TRUE},
- {"r", "range", TRUE},
- {"R", "remote-time", FALSE},
- {"s", "silent", FALSE},
- {"S", "show-error", FALSE},
- {"t", "telnet-options", TRUE},
- /* 'telnet-options' documented as telnet-option */
- {"T", "upload-file", TRUE},
- {"u", "user", TRUE},
- {"U", "proxy-user", TRUE},
- {"v", "verbose", FALSE},
- {"V", "version", FALSE},
- {"w", "write-out", TRUE},
- {"x", "proxy", TRUE},
- {"X", "request", TRUE},
- {"X", "http-request", TRUE},
- /* 'http-request' OBSOLETE VERSION */
- {"Y", "speed-limit", TRUE},
- {"y", "speed-time", TRUE},
- {"z", "time-cond", TRUE},
- {"#", "progress-bar", FALSE},
- {":", "next", FALSE},
- {"~", "xattr", FALSE},
-};
-
-/* Split the argument of -E to 'certname' and 'passphrase' separated by colon.
- * We allow ':' and '\' to be escaped by '\' so that we can use certificate
- * nicknames containing ':'. See <https://sourceforge.net/p/curl/bugs/1196/>
- * for details. */
-#ifndef UNITTESTS
-static
-#endif
-void parse_cert_parameter(const char *cert_parameter,
- char **certname,
- char **passphrase)
-{
- size_t param_length = strlen(cert_parameter);
- size_t span;
- const char *param_place = NULL;
- char *certname_place = NULL;
- *certname = NULL;
- *passphrase = NULL;
-
- /* most trivial assumption: cert_parameter is empty */
- if(param_length == 0)
- return;
-
- /* next less trivial: cert_parameter contains no colon nor backslash; this
- * means no passphrase was given and no characters escaped */
- if(!strpbrk(cert_parameter, ":\\")) {
- *certname = strdup(cert_parameter);
- return;
- }
- /* deal with escaped chars; find unescaped colon if it exists */
- certname_place = malloc(param_length + 1);
- if(!certname_place)
- return;
-
- *certname = certname_place;
- param_place = cert_parameter;
- while(*param_place) {
- span = strcspn(param_place, ":\\");
- strncpy(certname_place, param_place, span);
- param_place += span;
- certname_place += span;
- /* we just ate all the non-special chars. now we're on either a special
- * char or the end of the string. */
- switch(*param_place) {
- case '\0':
- break;
- case '\\':
- param_place++;
- switch(*param_place) {
- case '\0':
- *certname_place++ = '\\';
- break;
- case '\\':
- *certname_place++ = '\\';
- param_place++;
- break;
- case ':':
- *certname_place++ = ':';
- param_place++;
- break;
- default:
- *certname_place++ = '\\';
- *certname_place++ = *param_place;
- param_place++;
- break;
- }
- break;
- case ':':
- /* Since we live in a world of weirdness and confusion, the win32
- dudes can use : when using drive letters and thus c:\file:password
- needs to work. In order not to break compatibility, we still use : as
- separator, but we try to detect when it is used for a file name! On
- windows. */
-#ifdef WIN32
- if(param_place &&
- (param_place == &cert_parameter[1]) &&
- (cert_parameter[2] == '\\' || cert_parameter[2] == '/') &&
- (ISALPHA(cert_parameter[0])) ) {
- /* colon in the second column, followed by a backslash, and the
- first character is an alphabetic letter:
-
- this is a drive letter colon */
- *certname_place++ = ':';
- param_place++;
- break;
- }
-#endif
- /* escaped colons and Windows drive letter colons were handled
- * above; if we're still here, this is a separating colon */
- param_place++;
- if(strlen(param_place) > 0) {
- *passphrase = strdup(param_place);
- }
- goto done;
- }
- }
-done:
- *certname_place = '\0';
-}
-
-ParameterError getparameter(char *flag, /* f or -long-flag */
- char *nextarg, /* NULL if unset */
- bool *usedarg, /* set to TRUE if the arg
- has been used */
- struct GlobalConfig *global,
- struct OperationConfig *config)
-{
- char letter;
- char subletter = '\0'; /* subletters can only occur on long options */
- int rc;
- const char *parse = NULL;
- unsigned int j;
- time_t now;
- int hit = -1;
- bool longopt = FALSE;
- bool singleopt = FALSE; /* when true means '-o foo' used '-ofoo' */
- ParameterError err;
- bool toggle = TRUE; /* how to switch boolean options, on or off. Controlled
- by using --OPTION or --no-OPTION */
-
-
- if(('-' != flag[0]) ||
- (('-' == flag[0]) && ('-' == flag[1]))) {
- /* this should be a long name */
- char *word = ('-' == flag[0]) ? flag+2 : flag;
- size_t fnam = strlen(word);
- int numhits = 0;
-
- if(!strncmp(word, "no-", 3)) {
- /* disable this option but ignore the "no-" part when looking for it */
- word += 3;
- toggle = FALSE;
- }
-
- for(j = 0; j < sizeof(aliases)/sizeof(aliases[0]); j++) {
- if(curlx_strnequal(aliases[j].lname, word, fnam)) {
- longopt = TRUE;
- numhits++;
- if(curlx_raw_equal(aliases[j].lname, word)) {
- parse = aliases[j].letter;
- hit = j;
- numhits = 1; /* a single unique hit */
- break;
- }
- parse = aliases[j].letter;
- hit = j;
- }
- }
- if(numhits > 1) {
- /* this is at least the second match! */
- return PARAM_OPTION_AMBIGUOUS;
- }
- if(hit < 0) {
- return PARAM_OPTION_UNKNOWN;
- }
- }
- else {
- flag++; /* prefixed with one dash, pass it */
- hit = -1;
- parse = flag;
- }
-
- do {
- /* we can loop here if we have multiple single-letters */
-
- if(!longopt) {
- if(NULL != parse) {
- letter = (char)*parse;
- }
- else {
- letter = '\0';
- }
- subletter='\0';
- }
- else {
- letter = parse[0];
- subletter = parse[1];
- }
- *usedarg = FALSE; /* default is that we don't use the arg */
-
- if(hit < 0) {
- for(j = 0; j < sizeof(aliases)/sizeof(aliases[0]); j++) {
- if(letter == aliases[j].letter[0]) {
- hit = j;
- break;
- }
- }
- if(hit < 0) {
- return PARAM_OPTION_UNKNOWN;
- }
- }
-
- if(aliases[hit].extraparam) {
- /* this option requires an extra parameter */
- if(!longopt && parse[1]) {
- nextarg = (char *)&parse[1]; /* this is the actual extra parameter */
- singleopt = TRUE; /* don't loop anymore after this */
- }
- else if(!nextarg)
- return PARAM_REQUIRES_PARAMETER;
- else
- *usedarg = TRUE; /* mark it as used */
- }
-
- switch(letter) {
- case '*': /* options without a short option */
- switch(subletter) {
- case '4': /* --dns-ipv4-addr */
- /* addr in dot notation */
- GetStr(&config->dns_ipv4_addr, nextarg);
- break;
- case '6': /* --dns-ipv6-addr */
- /* addr in dot notation */
- GetStr(&config->dns_ipv6_addr, nextarg);
- break;
- case 'a': /* random-file */
- GetStr(&config->random_file, nextarg);
- break;
- case 'b': /* egd-file */
- GetStr(&config->egd_file, nextarg);
- break;
- case 'B': /* XOAUTH2 Bearer */
- GetStr(&config->xoauth2_bearer, nextarg);
- break;
- case 'c': /* connect-timeout */
- err = str2udouble(&config->connecttimeout, nextarg);
- if(err)
- return err;
- break;
- case 'd': /* ciphers */
- GetStr(&config->cipher_list, nextarg);
- break;
- case 'D': /* --dns-interface */
- /* interface name */
- GetStr(&config->dns_interface, nextarg);
- break;
- case 'e': /* --disable-epsv */
- config->disable_epsv = toggle;
- break;
- case 'E': /* --epsv */
- config->disable_epsv = (!toggle)?TRUE:FALSE;
- break;
-#ifdef USE_ENVIRONMENT
- case 'f':
- config->writeenv = toggle;
- break;
-#endif
- case 'F': /* --dns-servers */
- /* IP addrs of DNS servers */
- GetStr(&config->dns_servers, nextarg);
- break;
- case 'g': /* --trace */
- GetStr(&global->trace_dump, nextarg);
- if(global->tracetype && (global->tracetype != TRACE_BIN))
- warnf(config, "--trace overrides an earlier trace/verbose option\n");
- global->tracetype = TRACE_BIN;
- break;
- case 'G': /* --npn */
- config->nonpn = (!toggle)?TRUE:FALSE;
- break;
- case 'h': /* --trace-ascii */
- GetStr(&global->trace_dump, nextarg);
- if(global->tracetype && (global->tracetype != TRACE_ASCII))
- warnf(config,
- "--trace-ascii overrides an earlier trace/verbose option\n");
- global->tracetype = TRACE_ASCII;
- break;
- case 'H': /* --alpn */
- config->noalpn = (!toggle)?TRUE:FALSE;
- break;
- case 'i': /* --limit-rate */
- {
- /* We support G, M, K too */
- char *unit;
- curl_off_t value = curlx_strtoofft(nextarg, &unit, 0);
-
- if(!*unit)
- unit = (char *)"b";
- else if(strlen(unit) > 1)
- unit = (char *)"w"; /* unsupported */
-
- switch(*unit) {
- case 'G':
- case 'g':
- value *= 1024*1024*1024;
- break;
- case 'M':
- case 'm':
- value *= 1024*1024;
- break;
- case 'K':
- case 'k':
- value *= 1024;
- break;
- case 'b':
- case 'B':
- /* for plain bytes, leave as-is */
- break;
- default:
- warnf(config, "unsupported rate unit. Use G, M, K or B!\n");
- return PARAM_BAD_USE;
- }
- config->recvpersecond = value;
- config->sendpersecond = value;
- }
- break;
-
- case 'j': /* --compressed */
- if(toggle && !(curlinfo->features & CURL_VERSION_LIBZ))
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- config->encoding = toggle;
- break;
-
- case 'J': /* --tr-encoding */
- config->tr_encoding = toggle;
- break;
-
- case 'k': /* --digest */
- if(toggle)
- config->authtype |= CURLAUTH_DIGEST;
- else
- config->authtype &= ~CURLAUTH_DIGEST;
- break;
-
- case 'l': /* --negotiate */
- if(toggle) {
- if(curlinfo->features & CURL_VERSION_SPNEGO)
- config->authtype |= CURLAUTH_NEGOTIATE;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- }
- else
- config->authtype &= ~CURLAUTH_NEGOTIATE;
- break;
-
- case 'm': /* --ntlm */
- if(toggle) {
- if(curlinfo->features & CURL_VERSION_NTLM)
- config->authtype |= CURLAUTH_NTLM;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- }
- else
- config->authtype &= ~CURLAUTH_NTLM;
- break;
-
- case 'M': /* --ntlm-wb */
- if(toggle) {
- if(curlinfo->features & CURL_VERSION_NTLM_WB)
- config->authtype |= CURLAUTH_NTLM_WB;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- }
- else
- config->authtype &= ~CURLAUTH_NTLM_WB;
- break;
-
- case 'n': /* --basic for completeness */
- if(toggle)
- config->authtype |= CURLAUTH_BASIC;
- else
- config->authtype &= ~CURLAUTH_BASIC;
- break;
-
- case 'o': /* --anyauth, let libcurl pick it */
- if(toggle)
- config->authtype = CURLAUTH_ANY;
- /* --no-anyauth simply doesn't touch it */
- break;
-
-#ifdef USE_WATT32
- case 'p': /* --wdebug */
- dbug_init();
- break;
-#endif
- case 'q': /* --ftp-create-dirs */
- config->ftp_create_dirs = toggle;
- break;
-
- case 'r': /* --create-dirs */
- config->create_dirs = toggle;
- break;
-
- case 's': /* --max-redirs */
- /* specified max no of redirects (http(s)), this accepts -1 as a
- special condition */
- err = str2num(&config->maxredirs, nextarg);
- if(err)
- return err;
- if(config->maxredirs < -1)
- return PARAM_BAD_NUMERIC;
- break;
-
- case 't': /* --proxy-ntlm */
- if(curlinfo->features & CURL_VERSION_NTLM)
- config->proxyntlm = toggle;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- break;
-
- case 'u': /* --crlf */
- /* LF -> CRLF conversion? */
- config->crlf = toggle;
- break;
-
- case 'v': /* --stderr */
- if(strcmp(nextarg, "-")) {
- FILE *newfile = fopen(nextarg, "wt");
- if(!newfile)
- warnf(config, "Failed to open %s!\n", nextarg);
- else {
- if(global->errors_fopened)
- fclose(global->errors);
- global->errors = newfile;
- global->errors_fopened = TRUE;
- }
- }
- else
- global->errors = stdout;
- break;
- case 'w': /* --interface */
- /* interface */
- GetStr(&config->iface, nextarg);
- break;
- case 'x': /* --krb */
- /* kerberos level string */
- if(curlinfo->features & CURL_VERSION_KERBEROS4)
- GetStr(&config->krblevel, nextarg);
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- break;
- case 'y': /* --max-filesize */
- err = str2offset(&config->max_filesize, nextarg);
- if(err)
- return err;
- break;
- case 'z': /* --disable-eprt */
- config->disable_eprt = toggle;
- break;
- case 'Z': /* --eprt */
- config->disable_eprt = (!toggle)?TRUE:FALSE;
- break;
-
- default: /* the URL! */
- {
- struct getout *url;
- if(config->url_get || ((config->url_get = config->url_list) != NULL)) {
- /* there's a node here, if it already is filled-in continue to find
- an "empty" node */
- while(config->url_get && (config->url_get->flags & GETOUT_URL))
- config->url_get = config->url_get->next;
- }
-
- /* now there might or might not be an available node to fill in! */
-
- if(config->url_get)
- /* existing node */
- url = config->url_get;
- else
- /* there was no free node, create one! */
- url = new_getout(config);
-
- if(!url)
- return PARAM_NO_MEM;
- else {
- /* fill in the URL */
- GetStr(&url->url, nextarg);
- url->flags |= GETOUT_URL;
- }
- }
- }
- break;
- case '$': /* more options without a short option */
- switch(subletter) {
- case 'a': /* --ftp-ssl */
- if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- config->ftp_ssl = toggle;
- break;
- case 'b': /* --ftp-pasv */
- Curl_safefree(config->ftpport);
- break;
- case 'c': /* --socks5 specifies a socks5 proxy to use, and resolves
- the name locally and passes on the resolved address */
- GetStr(&config->socksproxy, nextarg);
- config->socksver = CURLPROXY_SOCKS5;
- break;
- case 't': /* --socks4 specifies a socks4 proxy to use */
- GetStr(&config->socksproxy, nextarg);
- config->socksver = CURLPROXY_SOCKS4;
- break;
- case 'T': /* --socks4a specifies a socks4a proxy to use */
- GetStr(&config->socksproxy, nextarg);
- config->socksver = CURLPROXY_SOCKS4A;
- break;
- case '2': /* --socks5-hostname specifies a socks5 proxy and enables name
- resolving with the proxy */
- GetStr(&config->socksproxy, nextarg);
- config->socksver = CURLPROXY_SOCKS5_HOSTNAME;
- break;
- case 'd': /* --tcp-nodelay option */
- config->tcp_nodelay = toggle;
- break;
- case 'e': /* --proxy-digest */
- config->proxydigest = toggle;
- break;
- case 'f': /* --proxy-basic */
- config->proxybasic = toggle;
- break;
- case 'g': /* --retry */
- err = str2unum(&config->req_retry, nextarg);
- if(err)
- return err;
- break;
- case 'h': /* --retry-delay */
- err = str2unum(&config->retry_delay, nextarg);
- if(err)
- return err;
- break;
- case 'i': /* --retry-max-time */
- err = str2unum(&config->retry_maxtime, nextarg);
- if(err)
- return err;
- break;
-
- case 'k': /* --proxy-negotiate */
- if(curlinfo->features & CURL_VERSION_SPNEGO)
- config->proxynegotiate = toggle;
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- break;
-
- case 'm': /* --ftp-account */
- GetStr(&config->ftp_account, nextarg);
- break;
- case 'n': /* --proxy-anyauth */
- config->proxyanyauth = toggle;
- break;
- case 'o': /* --trace-time */
- global->tracetime = toggle;
- break;
- case 'p': /* --ignore-content-length */
- config->ignorecl = toggle;
- break;
- case 'q': /* --ftp-skip-pasv-ip */
- config->ftp_skip_ip = toggle;
- break;
- case 'r': /* --ftp-method (undocumented at this point) */
- config->ftp_filemethod = ftpfilemethod(config, nextarg);
- break;
- case 's': /* --local-port */
- rc = sscanf(nextarg, "%d - %d",
- &config->localport,
- &config->localportrange);
- if(!rc)
- return PARAM_BAD_USE;
- else if(rc == 1)
- config->localportrange = 1; /* default number of ports to try */
- else {
- config->localportrange -= config->localport;
- if(config->localportrange < 1) {
- warnf(config, "bad range input\n");
- return PARAM_BAD_USE;
- }
- }
- break;
- case 'u': /* --ftp-alternative-to-user */
- GetStr(&config->ftp_alternative_to_user, nextarg);
- break;
- case 'v': /* --ftp-ssl-reqd */
- if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- config->ftp_ssl_reqd = toggle;
- break;
- case 'w': /* --no-sessionid */
- config->disable_sessionid = (!toggle)?TRUE:FALSE;
- break;
- case 'x': /* --ftp-ssl-control */
- if(toggle && !(curlinfo->features & CURL_VERSION_SSL))
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- config->ftp_ssl_control = toggle;
- break;
- case 'y': /* --ftp-ssl-ccc */
- config->ftp_ssl_ccc = toggle;
- if(!config->ftp_ssl_ccc_mode)
- config->ftp_ssl_ccc_mode = CURLFTPSSL_CCC_PASSIVE;
- break;
- case 'j': /* --ftp-ssl-ccc-mode */
- config->ftp_ssl_ccc = TRUE;
- config->ftp_ssl_ccc_mode = ftpcccmethod(config, nextarg);
- break;
- case 'z': /* --libcurl */
-#ifdef CURL_DISABLE_LIBCURL_OPTION
- warnf(config,
- "--libcurl option was disabled at build-time!\n");
- return PARAM_OPTION_UNKNOWN;
-#else
- GetStr(&global->libcurl, nextarg);
- break;
-#endif
- case '#': /* --raw */
- config->raw = toggle;
- break;
- case '0': /* --post301 */
- config->post301 = toggle;
- break;
- case '1': /* --no-keepalive */
- config->nokeepalive = (!toggle)?TRUE:FALSE;
- break;
- case '3': /* --keepalive-time */
- err = str2unum(&config->alivetime, nextarg);
- if(err)
- return err;
- break;
- case '4': /* --post302 */
- config->post302 = toggle;
- break;
- case 'I': /* --post303 */
- config->post303 = toggle;
- break;
- case '5': /* --noproxy */
- /* This specifies the noproxy list */
- GetStr(&config->noproxy, nextarg);
- break;
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- case '6': /* --socks5-gssapi-service */
- GetStr(&config->socks5_gssapi_service, nextarg);
- break;
- case '7': /* --socks5-gssapi-nec*/
- config->socks5_gssapi_nec = toggle;
- break;
-#endif
- case '8': /* --proxy1.0 */
- /* http 1.0 proxy */
- GetStr(&config->proxy, nextarg);
- config->proxyver = CURLPROXY_HTTP_1_0;
- break;
- case '9': /* --tftp-blksize */
- err = str2unum(&config->tftp_blksize, nextarg);
- if(err)
- return err;
- break;
- case 'A': /* --mail-from */
- GetStr(&config->mail_from, nextarg);
- break;
- case 'B': /* --mail-rcpt */
- /* append receiver to a list */
- err = add2list(&config->mail_rcpt, nextarg);
- if(err)
- return err;
- break;
- case 'C': /* --ftp-pret */
- config->ftp_pret = toggle;
- break;
- case 'D': /* --proto */
- config->proto_present = TRUE;
- if(proto2num(config, &config->proto, nextarg))
- return PARAM_BAD_USE;
- break;
- case 'E': /* --proto-redir */
- config->proto_redir_present = TRUE;
- if(proto2num(config, &config->proto_redir, nextarg))
- return PARAM_BAD_USE;
- break;
- case 'F': /* --resolve */
- err = add2list(&config->resolve, nextarg);
- if(err)
- return err;
- break;
- case 'G': /* --delegation LEVEL */
- config->gssapi_delegation = delegation(config, nextarg);
- break;
- case 'H': /* --mail-auth */
- GetStr(&config->mail_auth, nextarg);
- break;
- case 'J': /* --metalink */
- {
-#ifdef USE_METALINK
- int mlmaj, mlmin, mlpatch;
- metalink_get_version(&mlmaj, &mlmin, &mlpatch);
- if((mlmaj*10000)+(mlmin*100)+mlpatch < CURL_REQ_LIBMETALINK_VERS) {
- warnf(config,
- "--metalink option cannot be used because the version of "
- "the linked libmetalink library is too old. "
- "Required: %d.%d.%d, found %d.%d.%d\n",
- CURL_REQ_LIBMETALINK_MAJOR,
- CURL_REQ_LIBMETALINK_MINOR,
- CURL_REQ_LIBMETALINK_PATCH,
- mlmaj, mlmin, mlpatch);
- return PARAM_BAD_USE;
- }
- else
- config->use_metalink = toggle;
-#else
- warnf(config, "--metalink option is ignored because the binary is "
- "built without the Metalink support.\n");
-#endif
- break;
- }
- case 'K': /* --sasl-ir */
- config->sasl_ir = toggle;
- break;
- case 'L': /* --test-event */
-#ifdef CURLDEBUG
- config->test_event_based = toggle;
-#else
- warnf(config, "--test-event is ignored unless a debug build!\n");
-#endif
- break;
- }
- break;
- case '#': /* --progress-bar */
- if(toggle)
- global->progressmode = CURL_PROGRESS_BAR;
- else
- global->progressmode = CURL_PROGRESS_STATS;
- break;
- case ':': /* --next */
- return PARAM_NEXT_OPERATION;
- case '~': /* --xattr */
- config->xattr = toggle;
- break;
- case '0': /* --http* options */
- switch(subletter) {
- case '\0':
- /* HTTP version 1.0 */
- config->httpversion = CURL_HTTP_VERSION_1_0;
- break;
- case '1':
- /* HTTP version 1.1 */
- config->httpversion = CURL_HTTP_VERSION_1_1;
- break;
- case '2':
- /* HTTP version 2.0 */
- config->httpversion = CURL_HTTP_VERSION_2_0;
- break;
- }
- break;
- case '1': /* --tlsv1* options */
- switch(subletter) {
- case '\0':
- /* TLS version 1.x */
- config->ssl_version = CURL_SSLVERSION_TLSv1;
- break;
- case '0':
- /* TLS version 1.0 */
- config->ssl_version = CURL_SSLVERSION_TLSv1_0;
- break;
- case '1':
- /* TLS version 1.1 */
- config->ssl_version = CURL_SSLVERSION_TLSv1_1;
- break;
- case '2':
- /* TLS version 1.2 */
- config->ssl_version = CURL_SSLVERSION_TLSv1_2;
- break;
- }
- break;
- case '2':
- /* SSL version 2 */
- config->ssl_version = CURL_SSLVERSION_SSLv2;
- break;
- case '3':
- /* SSL version 3 */
- config->ssl_version = CURL_SSLVERSION_SSLv3;
- break;
- case '4':
- /* IPv4 */
- config->ip_version = 4;
- break;
- case '6':
- /* IPv6 */
- config->ip_version = 6;
- break;
- case 'a':
- /* This makes the FTP sessions use APPE instead of STOR */
- config->ftp_append = toggle;
- break;
- case 'A':
- /* This specifies the User-Agent name */
- GetStr(&config->useragent, nextarg);
- break;
- case 'b': /* cookie string coming up: */
- if(nextarg[0] == '@') {
- nextarg++;
- }
- else if(strchr(nextarg, '=')) {
- /* A cookie string must have a =-letter */
- GetStr(&config->cookie, nextarg);
- break;
- }
- /* We have a cookie file to read from! */
- GetStr(&config->cookiefile, nextarg);
- break;
- case 'B':
- /* use ASCII/text when transferring */
- config->use_ascii = toggle;
- break;
- case 'c':
- /* get the file name to dump all cookies in */
- GetStr(&config->cookiejar, nextarg);
- break;
- case 'C':
- /* This makes us continue an ftp transfer at given position */
- if(!curlx_strequal(nextarg, "-")) {
- err = str2offset(&config->resume_from, nextarg);
- if(err)
- return err;
- config->resume_from_current = FALSE;
- }
- else {
- config->resume_from_current = TRUE;
- config->resume_from = 0;
- }
- config->use_resume=TRUE;
- break;
- case 'd':
- /* postfield data */
- {
- char *postdata = NULL;
- FILE *file;
- size_t size = 0;
-
- if(subletter == 'e') { /* --data-urlencode*/
- /* [name]=[content], we encode the content part only
- * [name]@[file name]
- *
- * Case 2: we first load the file using that name and then encode
- * the content.
- */
- const char *p = strchr(nextarg, '=');
- size_t nlen;
- char is_file;
- if(!p)
- /* there was no '=' letter, check for a '@' instead */
- p = strchr(nextarg, '@');
- if(p) {
- nlen = p - nextarg; /* length of the name part */
- is_file = *p++; /* pass the separator */
- }
- else {
- /* neither @ nor =, so no name and it isn't a file */
- nlen = is_file = 0;
- p = nextarg;
- }
- if('@' == is_file) {
- /* a '@' letter, it means that a file name or - (stdin) follows */
-
- if(curlx_strequal("-", p)) {
- file = stdin;
- set_binmode(stdin);
- }
- else {
- file = fopen(p, "rb");
- if(!file)
- warnf(config,
- "Couldn't read data from file \"%s\", this makes "
- "an empty POST.\n", nextarg);
- }
-
- err = file2memory(&postdata, &size, file);
-
- if(file && (file != stdin))
- fclose(file);
- if(err)
- return err;
- }
- else {
- GetStr(&postdata, p);
- if(postdata)
- size = strlen(postdata);
- }
-
- if(!postdata) {
- /* no data from the file, point to a zero byte string to make this
- get sent as a POST anyway */
- postdata = strdup("");
- if(!postdata)
- return PARAM_NO_MEM;
- size = 0;
- }
- else {
- char *enc = curl_easy_escape(config->easy, postdata, (int)size);
- Curl_safefree(postdata); /* no matter if it worked or not */
- if(enc) {
- /* now make a string with the name from above and append the
- encoded string */
- size_t outlen = nlen + strlen(enc) + 2;
- char *n = malloc(outlen);
- if(!n) {
- curl_free(enc);
- return PARAM_NO_MEM;
- }
- if(nlen > 0) { /* only append '=' if we have a name */
- snprintf(n, outlen, "%.*s=%s", nlen, nextarg, enc);
- size = outlen-1;
- }
- else {
- strcpy(n, enc);
- size = outlen-2; /* since no '=' was inserted */
- }
- curl_free(enc);
- postdata = n;
- }
- else
- return PARAM_NO_MEM;
- }
- }
- else if('@' == *nextarg) {
- /* the data begins with a '@' letter, it means that a file name
- or - (stdin) follows */
- nextarg++; /* pass the @ */
-
- if(curlx_strequal("-", nextarg)) {
- file = stdin;
- if(subletter == 'b') /* forced data-binary */
- set_binmode(stdin);
- }
- else {
- file = fopen(nextarg, "rb");
- if(!file)
- warnf(config, "Couldn't read data from file \"%s\", this makes "
- "an empty POST.\n", nextarg);
- }
-
- if(subletter == 'b')
- /* forced binary */
- err = file2memory(&postdata, &size, file);
- else {
- err = file2string(&postdata, file);
- if(postdata)
- size = strlen(postdata);
- }
-
- if(file && (file != stdin))
- fclose(file);
- if(err)
- return err;
-
- if(!postdata) {
- /* no data from the file, point to a zero byte string to make this
- get sent as a POST anyway */
- postdata = strdup("");
- if(!postdata)
- return PARAM_NO_MEM;
- }
- }
- else {
- GetStr(&postdata, nextarg);
- if(postdata)
- size = strlen(postdata);
- }
-
-#ifdef CURL_DOES_CONVERSIONS
- if(subletter != 'b') {
- /* NOT forced binary, convert to ASCII */
- if(convert_to_network(postdata, strlen(postdata))) {
- Curl_safefree(postdata);
- return PARAM_NO_MEM;
- }
- }
-#endif
-
- if(config->postfields) {
- /* we already have a string, we append this one with a separating
- &-letter */
- char *oldpost = config->postfields;
- curl_off_t oldlen = config->postfieldsize;
- curl_off_t newlen = oldlen + curlx_uztoso(size) + 2;
- config->postfields = malloc((size_t)newlen);
- if(!config->postfields) {
- Curl_safefree(oldpost);
- Curl_safefree(postdata);
- return PARAM_NO_MEM;
- }
- memcpy(config->postfields, oldpost, (size_t)oldlen);
- /* use byte value 0x26 for '&' to accommodate non-ASCII platforms */
- config->postfields[oldlen] = '\x26';
- memcpy(&config->postfields[oldlen+1], postdata, size);
- config->postfields[oldlen+1+size] = '\0';
- Curl_safefree(oldpost);
- Curl_safefree(postdata);
- config->postfieldsize += size+1;
- }
- else {
- config->postfields = postdata;
- config->postfieldsize = curlx_uztoso(size);
- }
- }
- /*
- We can't set the request type here, as this data might be used in
- a simple GET if -G is used. Already or soon.
-
- if(SetHTTPrequest(HTTPREQ_SIMPLEPOST, &config->httpreq)) {
- Curl_safefree(postdata);
- return PARAM_BAD_USE;
- }
- */
- break;
- case 'D':
- /* dump-header to given file name */
- GetStr(&config->headerfile, nextarg);
- break;
- case 'e':
- {
- char *ptr = strstr(nextarg, ";auto");
- if(ptr) {
- /* Automatic referer requested, this may be combined with a
- set initial one */
- config->autoreferer = TRUE;
- *ptr = 0; /* zero terminate here */
- }
- else
- config->autoreferer = FALSE;
- GetStr(&config->referer, nextarg);
- }
- break;
- case 'E':
- switch(subletter) {
- case 'a': /* CA info PEM file */
- /* CA info PEM file */
- GetStr(&config->cacert, nextarg);
- break;
- case 'b': /* cert file type */
- GetStr(&config->cert_type, nextarg);
- break;
- case 'c': /* private key file */
- GetStr(&config->key, nextarg);
- break;
- case 'd': /* private key file type */
- GetStr(&config->key_type, nextarg);
- break;
- case 'e': /* private key passphrase */
- GetStr(&config->key_passwd, nextarg);
- cleanarg(nextarg);
- break;
- case 'f': /* crypto engine */
- GetStr(&config->engine, nextarg);
- if(config->engine && curlx_raw_equal(config->engine,"list"))
- return PARAM_ENGINES_REQUESTED;
- break;
- case 'g': /* CA info PEM file */
- /* CA cert directory */
- GetStr(&config->capath, nextarg);
- break;
- case 'h': /* --pubkey public key file */
- GetStr(&config->pubkey, nextarg);
- break;
- case 'i': /* --hostpubmd5 md5 of the host public key */
- GetStr(&config->hostpubmd5, nextarg);
- if(!config->hostpubmd5 || strlen(config->hostpubmd5) != 32)
- return PARAM_BAD_USE;
- break;
- case 'j': /* CRL info PEM file */
- /* CRL file */
- GetStr(&config->crlfile, nextarg);
- break;
- case 'k': /* TLS username */
- if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)
- GetStr(&config->tls_username, nextarg);
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- break;
- case 'l': /* TLS password */
- if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP)
- GetStr(&config->tls_password, nextarg);
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- break;
- case 'm': /* TLS authentication type */
- if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
- GetStr(&config->tls_authtype, nextarg);
- if(!strequal(config->tls_authtype, "SRP"))
- return PARAM_LIBCURL_DOESNT_SUPPORT; /* only support TLS-SRP */
- }
- else
- return PARAM_LIBCURL_DOESNT_SUPPORT;
- break;
- case 'n': /* no empty SSL fragments, --ssl-allow-beast */
- if(curlinfo->features & CURL_VERSION_SSL)
- config->ssl_allow_beast = toggle;
- break;
-
- case 'o': /* --login-options */
- GetStr(&config->login_options, nextarg);
- break;
-
- default: /* certificate file */
- {
- char *certname, *passphrase;
- parse_cert_parameter(nextarg, &certname, &passphrase);
- Curl_safefree(config->cert);
- config->cert = certname;
- if(passphrase) {
- Curl_safefree(config->key_passwd);
- config->key_passwd = passphrase;
- }
- cleanarg(nextarg);
- }
- }
- break;
- case 'f':
- /* fail hard on errors */
- config->failonerror = toggle;
- break;
- case 'F':
- /* "form data" simulation, this is a little advanced so lets do our best
- to sort this out slowly and carefully */
- if(formparse(config,
- nextarg,
- &config->httppost,
- &config->last_post,
- (subletter=='s')?TRUE:FALSE)) /* 's' means literal string */
- return PARAM_BAD_USE;
- if(SetHTTPrequest(config, HTTPREQ_POST, &config->httpreq))
- return PARAM_BAD_USE;
- break;
-
- case 'g': /* g disables URLglobbing */
- config->globoff = toggle;
- break;
-
- case 'G': /* HTTP GET */
- config->use_httpget = TRUE;
- break;
-
- case 'h': /* h for help */
- if(toggle) {
- return PARAM_HELP_REQUESTED;
- }
- /* we now actually support --no-help too! */
- break;
- case 'H':
- /* A custom header to append to a list */
- if(subletter == 'p') /* --proxy-header */
- err = add2list(&config->proxyheaders, nextarg);
- else
- err = add2list(&config->headers, nextarg);
- if(err)
- return err;
- break;
- case 'i':
- config->include_headers = toggle; /* include the headers as well in the
- general output stream */
- break;
- case 'j':
- config->cookiesession = toggle;
- break;
- case 'I':
- /*
- * no_body will imply include_headers later on
- */
- config->no_body = toggle;
- if(SetHTTPrequest(config,
- (config->no_body)?HTTPREQ_HEAD:HTTPREQ_GET,
- &config->httpreq))
- return PARAM_BAD_USE;
- break;
- case 'J': /* --remote-header-name */
- if(config->include_headers) {
- warnf(config,
- "--include and --remote-header-name cannot be combined.\n");
- return PARAM_BAD_USE;
- }
- config->content_disposition = toggle;
- break;
- case 'k': /* allow insecure SSL connects */
- config->insecure_ok = toggle;
- break;
- case 'K': /* parse config file */
- if(parseconfig(nextarg, global))
- warnf(config, "error trying read config from the '%s' file\n",
- nextarg);
- break;
- case 'l':
- config->dirlistonly = toggle; /* only list the names of the FTP dir */
- break;
- case 'L':
- config->followlocation = toggle; /* Follow Location: HTTP headers */
- switch (subletter) {
- case 't':
- /* Continue to send authentication (user+password) when following
- * locations, even when hostname changed */
- config->unrestricted_auth = toggle;
- break;
- }
- break;
- case 'm':
- /* specified max time */
- err = str2udouble(&config->timeout, nextarg);
- if(err)
- return err;
- break;
- case 'M': /* M for manual, huge help */
- if(toggle) { /* --no-manual shows no manual... */
-#ifdef USE_MANUAL
- return PARAM_MANUAL_REQUESTED;
-#else
- warnf(config,
- "built-in manual was disabled at build-time!\n");
- return PARAM_OPTION_UNKNOWN;
-#endif
- }
- break;
- case 'n':
- switch(subletter) {
- case 'o': /* CA info PEM file */
- /* use .netrc or URL */
- config->netrc_opt = toggle;
- break;
- case 'e': /* netrc-file */
- GetStr(&config->netrc_file, nextarg);
- break;
- default:
- /* pick info from .netrc, if this is used for http, curl will
- automatically enfore user+password with the request */
- config->netrc = toggle;
- break;
- }
- break;
- case 'N':
- /* disable the output I/O buffering. note that the option is called
- --buffer but is mostly used in the negative form: --no-buffer */
- if(longopt)
- config->nobuffer = (!toggle)?TRUE:FALSE;
- else
- config->nobuffer = toggle;
- break;
- case 'O': /* --remote-name */
- if(subletter == 'a') { /* --remote-name-all */
- config->default_node_flags = toggle?GETOUT_USEREMOTE:0;
- break;
- }
- /* fall-through! */
- case 'o': /* --output */
- /* output file */
- {
- struct getout *url;
- if(config->url_out || ((config->url_out = config->url_list) != NULL)) {
- /* there's a node here, if it already is filled-in continue to find
- an "empty" node */
- while(config->url_out && (config->url_out->flags & GETOUT_OUTFILE))
- config->url_out = config->url_out->next;
- }
-
- /* now there might or might not be an available node to fill in! */
-
- if(config->url_out)
- /* existing node */
- url = config->url_out;
- else
- /* there was no free node, create one! */
- url = new_getout(config);
-
- if(!url)
- return PARAM_NO_MEM;
- else {
- /* fill in the outfile */
- if('o' == letter) {
- GetStr(&url->outfile, nextarg);
- url->flags &= ~GETOUT_USEREMOTE; /* switch off */
- }
- else {
- url->outfile = NULL; /* leave it */
- if(toggle)
- url->flags |= GETOUT_USEREMOTE; /* switch on */
- else
- url->flags &= ~GETOUT_USEREMOTE; /* switch off */
- }
- url->flags |= GETOUT_OUTFILE;
- }
- }
- break;
- case 'P':
- /* This makes the FTP sessions use PORT instead of PASV */
- /* use <eth0> or <192.168.10.10> style addresses. Anything except
- this will make us try to get the "default" address.
- NOTE: this is a changed behaviour since the released 4.1!
- */
- GetStr(&config->ftpport, nextarg);
- break;
- case 'p':
- /* proxy tunnel for non-http protocols */
- config->proxytunnel = toggle;
- break;
-
- case 'q': /* if used first, already taken care of, we do it like
- this so we don't cause an error! */
- break;
- case 'Q':
- /* QUOTE command to send to FTP server */
- switch(nextarg[0]) {
- case '-':
- /* prefixed with a dash makes it a POST TRANSFER one */
- nextarg++;
- err = add2list(&config->postquote, nextarg);
- break;
- case '+':
- /* prefixed with a plus makes it a just-before-transfer one */
- nextarg++;
- err = add2list(&config->prequote, nextarg);
- break;
- default:
- err = add2list(&config->quote, nextarg);
- break;
- }
- if(err)
- return err;
- break;
- case 'r':
- /* Specifying a range WITHOUT A DASH will create an illegal HTTP range
- (and won't actually be range by definition). The man page previously
- claimed that to be a good way, why this code is added to work-around
- it. */
- if(ISDIGIT(*nextarg) && !strchr(nextarg, '-')) {
- char buffer[32];
- curl_off_t off;
- warnf(config,
- "A specified range MUST include at least one dash (-). "
- "Appending one for you!\n");
- off = curlx_strtoofft(nextarg, NULL, 10);
- snprintf(buffer, sizeof(buffer), "%" CURL_FORMAT_CURL_OFF_T "-", off);
- Curl_safefree(config->range);
- config->range = strdup(buffer);
- if(!config->range)
- return PARAM_NO_MEM;
- }
- {
- /* byte range requested */
- char *tmp_range;
- tmp_range = nextarg;
- while(*tmp_range != '\0') {
- if(!ISDIGIT(*tmp_range) && *tmp_range != '-' && *tmp_range != ',') {
- warnf(config,"Invalid character is found in given range. "
- "A specified range MUST have only digits in "
- "\'start\'-\'stop\'. The server's response to this "
- "request is uncertain.\n");
- break;
- }
- tmp_range++;
- }
- /* byte range requested */
- GetStr(&config->range, nextarg);
- }
- break;
- case 'R':
- /* use remote file's time */
- config->remote_time = toggle;
- break;
- case 's':
- /* don't show progress meter, don't show errors : */
- if(toggle)
- global->mute = global->noprogress = TRUE;
- else
- global->mute = global->noprogress = FALSE;
- if(global->showerror < 0)
- /* if still on the default value, set showerror to the reverse of
- toggle. This is to allow -S and -s to be used in an independent
- order but still have the same effect. */
- global->showerror = (!toggle)?TRUE:FALSE; /* toggle off */
- break;
- case 'S':
- /* show errors */
- global->showerror = toggle?1:0; /* toggle on if used with -s */
- break;
- case 't':
- /* Telnet options */
- err = add2list(&config->telnet_options, nextarg);
- if(err)
- return err;
- break;
- case 'T':
- /* we are uploading */
- {
- struct getout *url;
- if(config->url_out || ((config->url_out = config->url_list) != NULL)) {
- /* there's a node here, if it already is filled-in continue to find
- an "empty" node */
- while(config->url_out && (config->url_out->flags & GETOUT_UPLOAD))
- config->url_out = config->url_out->next;
- }
-
- /* now there might or might not be an available node to fill in! */
-
- if(config->url_out)
- /* existing node */
- url = config->url_out;
- else
- /* there was no free node, create one! */
- url = new_getout(config);
-
- if(!url)
- return PARAM_NO_MEM;
- else {
- url->flags |= GETOUT_UPLOAD; /* mark -T used */
- if(!*nextarg)
- url->flags |= GETOUT_NOUPLOAD;
- else {
- /* "-" equals stdin, but keep the string around for now */
- GetStr(&url->infile, nextarg);
- }
- }
- }
- break;
- case 'u':
- /* user:password */
- GetStr(&config->userpwd, nextarg);
- cleanarg(nextarg);
- break;
- case 'U':
- /* Proxy user:password */
- GetStr(&config->proxyuserpwd, nextarg);
- cleanarg(nextarg);
- break;
- case 'v':
- if(toggle) {
- /* the '%' thing here will cause the trace get sent to stderr */
- Curl_safefree(global->trace_dump);
- global->trace_dump = strdup("%");
- if(!global->trace_dump)
- return PARAM_NO_MEM;
- if(global->tracetype && (global->tracetype != TRACE_PLAIN))
- warnf(config,
- "-v, --verbose overrides an earlier trace/verbose option\n");
- global->tracetype = TRACE_PLAIN;
- }
- else
- /* verbose is disabled here */
- global->tracetype = TRACE_NONE;
- break;
- case 'V':
- if(toggle) /* --no-version yields no output! */
- return PARAM_VERSION_INFO_REQUESTED;
- break;
-
- case 'w':
- /* get the output string */
- if('@' == *nextarg) {
- /* the data begins with a '@' letter, it means that a file name
- or - (stdin) follows */
- FILE *file;
- const char *fname;
- nextarg++; /* pass the @ */
- if(curlx_strequal("-", nextarg)) {
- fname = "<stdin>";
- file = stdin;
- }
- else {
- fname = nextarg;
- file = fopen(nextarg, "r");
- }
- err = file2string(&config->writeout, file);
- if(file && (file != stdin))
- fclose(file);
- if(err)
- return err;
- if(!config->writeout)
- warnf(config, "Failed to read %s", fname);
- }
- else
- GetStr(&config->writeout, nextarg);
- break;
- case 'x':
- /* proxy */
- GetStr(&config->proxy, nextarg);
- config->proxyver = CURLPROXY_HTTP;
- break;
- case 'X':
- /* set custom request */
- GetStr(&config->customrequest, nextarg);
- break;
- case 'y':
- /* low speed time */
- err = str2unum(&config->low_speed_time, nextarg);
- if(err)
- return err;
- if(!config->low_speed_limit)
- config->low_speed_limit = 1;
- break;
- case 'Y':
- /* low speed limit */
- err = str2unum(&config->low_speed_limit, nextarg);
- if(err)
- return err;
- if(!config->low_speed_time)
- config->low_speed_time = 30;
- break;
- case 'z': /* time condition coming up */
- switch(*nextarg) {
- case '+':
- nextarg++;
- default:
- /* If-Modified-Since: (section 14.28 in RFC2068) */
- config->timecond = CURL_TIMECOND_IFMODSINCE;
- break;
- case '-':
- /* If-Unmodified-Since: (section 14.24 in RFC2068) */
- config->timecond = CURL_TIMECOND_IFUNMODSINCE;
- nextarg++;
- break;
- case '=':
- /* Last-Modified: (section 14.29 in RFC2068) */
- config->timecond = CURL_TIMECOND_LASTMOD;
- nextarg++;
- break;
- }
- now = time(NULL);
- config->condtime=curl_getdate(nextarg, &now);
- if(-1 == (int)config->condtime) {
- /* now let's see if it is a file name to get the time from instead! */
- struct_stat statbuf;
- if(-1 == stat(nextarg, &statbuf)) {
- /* failed, remove time condition */
- config->timecond = CURL_TIMECOND_NONE;
- warnf(config,
- "Illegal date format for -z, --timecond (and not "
- "a file name). Disabling time condition. "
- "See curl_getdate(3) for valid date syntax.\n");
- }
- else {
- /* pull the time out from the file */
- config->condtime = statbuf.st_mtime;
- }
- }
- break;
- default: /* unknown flag */
- return PARAM_OPTION_UNKNOWN;
- }
- hit = -1;
-
- } while(!longopt && !singleopt && *++parse && !*usedarg);
-
- return PARAM_OK;
-}
-
-ParameterError parse_args(struct GlobalConfig *config, int argc,
- argv_item_t argv[])
-{
- int i;
- bool stillflags;
- char *orig_opt = NULL;
- ParameterError result = PARAM_OK;
- struct OperationConfig *operation = config->first;
-
- for(i = 1, stillflags = TRUE; i < argc && !result; i++) {
- orig_opt = argv[i];
-
- if(stillflags && ('-' == argv[i][0])) {
- char *nextarg;
- bool passarg;
- char *flag = argv[i];
-
- if(curlx_strequal("--", argv[i]))
- /* This indicates the end of the flags and thus enables the
- following (URL) argument to start with -. */
- stillflags = FALSE;
- else {
- nextarg = (i < (argc - 1)) ? argv[i + 1] : NULL;
-
- result = getparameter(flag, nextarg, &passarg, config, operation);
- if(result == PARAM_NEXT_OPERATION) {
- /* Reset result as PARAM_NEXT_OPERATION is only used here and not
- returned from this function */
- result = PARAM_OK;
-
- if(operation->url_list && operation->url_list->url) {
- /* Allocate the next config */
- operation->next = malloc(sizeof(struct OperationConfig));
- if(operation->next) {
- /* Initialise the newly created config */
- config_init(operation->next);
-
- /* Copy the easy handle */
- operation->next->easy = config->easy;
-
- /* Set the global config pointer */
- operation->next->global = config;
-
- /* Update the last operation pointer */
- config->last = operation->next;
-
- /* Move onto the new config */
- operation->next->prev = operation;
- operation = operation->next;
- }
- else
- result = PARAM_NO_MEM;
- }
- }
- else if(!result && passarg)
- i++; /* we're supposed to skip this */
- }
- }
- else {
- bool used;
-
- /* Just add the URL please */
- result = getparameter((char *)"--url", argv[i], &used, config,
- operation);
- }
- }
-
- if(result && result != PARAM_HELP_REQUESTED &&
- result != PARAM_MANUAL_REQUESTED &&
- result != PARAM_VERSION_INFO_REQUESTED &&
- result != PARAM_ENGINES_REQUESTED) {
- const char *reason = param2text(result);
-
- if(orig_opt && !curlx_strequal(":", orig_opt))
- helpf(config->errors, "option %s: %s\n", orig_opt, reason);
- else
- helpf(config->errors, "%s\n", reason);
- }
-
- return result;
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_getparam.h b/external/libcurl_android/jni/libcurl/src/tool_getparam.h
deleted file mode 100755
index ef4366b7..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_getparam.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef HEADER_CURL_TOOL_GETPARAM_H
-#define HEADER_CURL_TOOL_GETPARAM_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-typedef enum {
- PARAM_OK = 0,
- PARAM_OPTION_AMBIGUOUS,
- PARAM_OPTION_UNKNOWN,
- PARAM_REQUIRES_PARAMETER,
- PARAM_BAD_USE,
- PARAM_HELP_REQUESTED,
- PARAM_MANUAL_REQUESTED,
- PARAM_VERSION_INFO_REQUESTED,
- PARAM_ENGINES_REQUESTED,
- PARAM_GOT_EXTRA_PARAMETER,
- PARAM_BAD_NUMERIC,
- PARAM_NEGATIVE_NUMERIC,
- PARAM_LIBCURL_DOESNT_SUPPORT,
- PARAM_NO_MEM,
- PARAM_NEXT_OPERATION,
- PARAM_LAST
-} ParameterError;
-
-struct GlobalConfig;
-struct OperationConfig;
-
-ParameterError getparameter(char *flag, char *nextarg, bool *usedarg,
- struct GlobalConfig *global,
- struct OperationConfig *operation);
-
-#ifdef UNITTESTS
-void parse_cert_parameter(const char *cert_parameter,
- char **certname,
- char **passphrase);
-#endif
-
-ParameterError parse_args(struct GlobalConfig *config, int argc,
- argv_item_t argv[]);
-
-#endif /* HEADER_CURL_TOOL_GETPARAM_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_getpass.c b/external/libcurl_android/jni/libcurl/src/tool_getpass.c
deleted file mode 100755
index 4c8dcb9f..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_getpass.c
+++ /dev/null
@@ -1,256 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifndef HAVE_GETPASS_R
-/* this file is only for systems without getpass_r() */
-
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
-#ifdef HAVE_TERMIOS_H
-# include <termios.h>
-#elif defined(HAVE_TERMIO_H)
-# include <termio.h>
-#endif
-
-#ifdef __VMS
-# include descrip
-# include starlet
-# include iodef
-#endif
-
-#ifdef WIN32
-# include <conio.h>
-#endif
-
-#ifdef NETWARE
-# ifdef __NOVELL_LIBC__
-# include <screen.h>
-# else
-# include <nwconio.h>
-# endif
-#endif
-
-#define _MPRINTF_REPLACE
-#include <curl/mprintf.h>
-
-#include "tool_getpass.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef __VMS
-/* VMS implementation */
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- long sts;
- short chan;
-
- /* MSK, 23-JAN-2004, iosbdef.h wasn't in VAX V7.2 or CC 6.4 */
- /* distribution so I created this. May revert back later to */
- /* struct _iosb iosb; */
- struct _iosb
- {
- short int iosb$w_status; /* status */
- short int iosb$w_bcnt; /* byte count */
- int unused; /* unused */
- } iosb;
-
- $DESCRIPTOR(ttdesc, "TT");
-
- buffer[0] = '\0';
- sts = sys$assign(&ttdesc, &chan, 0, 0);
- if(sts & 1) {
- sts = sys$qiow(0, chan,
- IO$_READPROMPT | IO$M_NOECHO,
- &iosb, 0, 0, buffer, buflen, 0, 0,
- prompt, strlen(prompt));
-
- if((sts & 1) && (iosb.iosb$w_status & 1))
- buffer[iosb.iosb$w_bcnt] = '\0';
-
- sts = sys$dassgn(chan);
- }
- return buffer; /* we always return success */
-}
-#define DONE
-#endif /* __VMS */
-
-#ifdef __SYMBIAN32__
-# define getch() getchar()
-#endif
-
-#if defined(WIN32) || defined(__SYMBIAN32__)
-
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- size_t i;
- fputs(prompt, stderr);
-
- for(i = 0; i < buflen; i++) {
- buffer[i] = (char)getch();
- if(buffer[i] == '\r' || buffer[i] == '\n') {
- buffer[i] = '\0';
- break;
- }
- else
- if(buffer[i] == '\b')
- /* remove this letter and if this is not the first key, remove the
- previous one as well */
- i = i - (i >= 1 ? 2 : 1);
- }
-#ifndef __SYMBIAN32__
- /* since echo is disabled, print a newline */
- fputs("\n", stderr);
-#endif
- /* if user didn't hit ENTER, terminate buffer */
- if(i == buflen)
- buffer[buflen-1] = '\0';
-
- return buffer; /* we always return success */
-}
-#define DONE
-#endif /* WIN32 || __SYMBIAN32__ */
-
-#ifdef NETWARE
-/* NetWare implementation */
-#ifdef __NOVELL_LIBC__
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- return getpassword(prompt, buffer, buflen);
-}
-#else
-char *getpass_r(const char *prompt, char *buffer, size_t buflen)
-{
- size_t i = 0;
-
- printf("%s", prompt);
- do {
- buffer[i++] = getch();
- if(buffer[i-1] == '\b') {
- /* remove this letter and if this is not the first key,
- remove the previous one as well */
- if(i > 1) {
- printf("\b \b");
- i = i - 2;
- }
- else {
- RingTheBell();
- i = i - 1;
- }
- }
- else if(buffer[i-1] != 13)
- putchar('*');
-
- } while((buffer[i-1] != 13) && (i < buflen));
- buffer[i-1] = '\0';
- printf("\r\n");
- return buffer;
-}
-#endif /* __NOVELL_LIBC__ */
-#define DONE
-#endif /* NETWARE */
-
-#ifndef DONE /* not previously provided */
-
-#ifdef HAVE_TERMIOS_H
-# define struct_term struct termios
-#elif defined(HAVE_TERMIO_H)
-# define struct_term struct termio
-#else
-# undef struct_term
-#endif
-
-static bool ttyecho(bool enable, int fd)
-{
-#ifdef struct_term
- static struct_term withecho;
- static struct_term noecho;
-#endif
- if(!enable) {
- /* disable echo by extracting the current 'withecho' mode and remove the
- ECHO bit and set back the struct */
-#ifdef HAVE_TERMIOS_H
- tcgetattr(fd, &withecho);
- noecho = withecho;
- noecho.c_lflag &= ~ECHO;
- tcsetattr(fd, TCSANOW, &noecho);
-#elif defined(HAVE_TERMIO_H)
- ioctl(fd, TCGETA, &withecho);
- noecho = withecho;
- noecho.c_lflag &= ~ECHO;
- ioctl(fd, TCSETA, &noecho);
-#else
- /* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H, we can't disable echo! */
- (void)fd;
- return FALSE; /* not disabled */
-#endif
- return TRUE; /* disabled */
- }
- else {
- /* re-enable echo, assumes we disabled it before (and set the structs we
- now use to reset the terminal status) */
-#ifdef HAVE_TERMIOS_H
- tcsetattr(fd, TCSAFLUSH, &withecho);
-#elif defined(HAVE_TERMIO_H)
- ioctl(fd, TCSETA, &withecho);
-#else
- return FALSE; /* not enabled */
-#endif
- return TRUE; /* enabled */
- }
-}
-
-char *getpass_r(const char *prompt, /* prompt to display */
- char *password, /* buffer to store password in */
- size_t buflen) /* size of buffer to store password in */
-{
- ssize_t nread;
- bool disabled;
- int fd = open("/dev/tty", O_RDONLY);
- if(-1 == fd)
- fd = 1; /* use stdin if the tty couldn't be used */
-
- disabled = ttyecho(FALSE, fd); /* disable terminal echo */
-
- fputs(prompt, stderr);
- nread = read(fd, password, buflen);
- if(nread > 0)
- password[--nread] = '\0'; /* zero terminate where enter is stored */
- else
- password[0] = '\0'; /* got nothing */
-
- if(disabled) {
- /* if echo actually was disabled, add a newline */
- fputs("\n", stderr);
- (void)ttyecho(TRUE, fd); /* enable echo */
- }
-
- if(1 != fd)
- close(fd);
-
- return password; /* return pointer to buffer */
-}
-
-#endif /* DONE */
-#endif /* HAVE_GETPASS_R */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_getpass.h b/external/libcurl_android/jni/libcurl/src/tool_getpass.h
deleted file mode 100755
index d4fc7e23..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_getpass.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef HEADER_CURL_TOOL_GETPASS_H
-#define HEADER_CURL_TOOL_GETPASS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifndef HAVE_GETPASS_R
-/* If there's a system-provided function named like this, we trust it is
- also found in one of the standard headers. */
-
-/*
- * Returning NULL will abort the continued operation!
- */
-char* getpass_r(const char *prompt, char* buffer, size_t buflen);
-#endif
-
-#endif /* HEADER_CURL_TOOL_GETPASS_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_help.c b/external/libcurl_android/jni/libcurl/src/tool_help.c
deleted file mode 100755
index c255be0b..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_help.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "tool_panykey.h"
-#include "tool_help.h"
-#include "tool_libinfo.h"
-#include "tool_version.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef MSDOS
-# define USE_WATT32
-#endif
-
-/*
- * A few of these source lines are >80 columns wide, but that's only because
- * breaking the strings narrower makes this chunk look even worse!
- *
- * Starting with 7.18.0, this list of command line options is sorted based
- * on the long option name. It is not done automatically, although a command
- * line like the following can help out:
- *
- * curl --help | cut -c5- | grep "^-" | sort
- */
-
-static const char *const helptext[] = {
- "Usage: curl [options...] <url>",
- "Options: (H) means HTTP/HTTPS only, (F) means FTP only",
- " --anyauth Pick \"any\" authentication method (H)",
- " -a, --append Append to target file when uploading (F/SFTP)",
- " --basic Use HTTP Basic Authentication (H)",
- " --cacert FILE CA certificate to verify peer against (SSL)",
- " --capath DIR CA directory to verify peer against (SSL)",
- " -E, --cert CERT[:PASSWD] Client certificate file and password (SSL)",
- " --cert-type TYPE Certificate file type (DER/PEM/ENG) (SSL)",
- " --ciphers LIST SSL ciphers to use (SSL)",
- " --compressed Request compressed response (using deflate or gzip)",
- " -K, --config FILE Read config from FILE",
- " --connect-timeout SECONDS Maximum time allowed for connection",
- " -C, --continue-at OFFSET Resumed transfer OFFSET",
- " -b, --cookie STRING/FILE Read cookies from STRING/FILE (H)",
- " -c, --cookie-jar FILE Write cookies to FILE after operation (H)",
- " --create-dirs Create necessary local directory hierarchy",
- " --crlf Convert LF to CRLF in upload",
- " --crlfile FILE Get a CRL list in PEM format from the given file",
- " -d, --data DATA HTTP POST data (H)",
- " --data-ascii DATA HTTP POST ASCII data (H)",
- " --data-binary DATA HTTP POST binary data (H)",
- " --data-urlencode DATA HTTP POST data url encoded (H)",
- " --delegation STRING GSS-API delegation permission",
- " --digest Use HTTP Digest Authentication (H)",
- " --disable-eprt Inhibit using EPRT or LPRT (F)",
- " --disable-epsv Inhibit using EPSV (F)",
- " --dns-servers DNS server addrs to use: 1.1.1.1;2.2.2.2",
- " --dns-interface Interface to use for DNS requests",
- " --dns-ipv4-addr IPv4 address to use for DNS requests, dot notation",
- " --dns-ipv6-addr IPv6 address to use for DNS requests, dot notation",
- " -D, --dump-header FILE Write the headers to FILE",
- " --egd-file FILE EGD socket path for random data (SSL)",
- " --engine ENGINE Crypto engine (use \"--engine list\" for list) (SSL)",
-#ifdef USE_ENVIRONMENT
- " --environment Write results to environment variables (RISC OS)",
-#endif
- " -f, --fail Fail silently (no output at all) on HTTP errors (H)",
- " -F, --form CONTENT Specify HTTP multipart POST data (H)",
- " --form-string STRING Specify HTTP multipart POST data (H)",
- " --ftp-account DATA Account data string (F)",
- " --ftp-alternative-to-user COMMAND "
- "String to replace \"USER [name]\" (F)",
- " --ftp-create-dirs Create the remote dirs if not present (F)",
- " --ftp-method [MULTICWD/NOCWD/SINGLECWD] Control CWD usage (F)",
- " --ftp-pasv Use PASV/EPSV instead of PORT (F)",
- " -P, --ftp-port ADR Use PORT with given address instead of PASV (F)",
- " --ftp-skip-pasv-ip Skip the IP address for PASV (F)\n"
- " --ftp-pret Send PRET before PASV (for drftpd) (F)",
- " --ftp-ssl-ccc Send CCC after authenticating (F)",
- " --ftp-ssl-ccc-mode ACTIVE/PASSIVE Set CCC mode (F)",
- " --ftp-ssl-control Require SSL/TLS for FTP login, "
- "clear for transfer (F)",
- " -G, --get Send the -d data with a HTTP GET (H)",
- " -g, --globoff Disable URL sequences and ranges using {} and []",
- " -H, --header LINE Pass custom header LINE to server (H)",
- " -I, --head Show document info only",
- " -h, --help This help text",
- " --hostpubmd5 MD5 "
- "Hex-encoded MD5 string of the host public key. (SSH)",
- " -0, --http1.0 Use HTTP 1.0 (H)",
- " --http1.1 Use HTTP 1.1 (H)",
- " --http2 Use HTTP 2 (H)",
- " --ignore-content-length Ignore the HTTP Content-Length header",
- " -i, --include Include protocol headers in the output (H/F)",
- " -k, --insecure Allow connections to SSL sites without certs (H)",
- " --interface INTERFACE Use network INTERFACE (or address)",
- " -4, --ipv4 Resolve name to IPv4 address",
- " -6, --ipv6 Resolve name to IPv6 address",
- " -j, --junk-session-cookies Ignore session cookies read from file (H)",
- " --keepalive-time SECONDS Wait SECONDS between keepalive probes",
- " --key KEY Private key file name (SSL/SSH)",
- " --key-type TYPE Private key file type (DER/PEM/ENG) (SSL)",
- " --krb LEVEL Enable Kerberos with security LEVEL (F)",
-#ifndef CURL_DISABLE_LIBCURL_OPTION
- " --libcurl FILE Dump libcurl equivalent code of this command line",
-#endif
- " --limit-rate RATE Limit transfer speed to RATE",
- " -l, --list-only List only mode (F/POP3)",
- " --local-port RANGE Force use of RANGE for local port numbers",
- " -L, --location Follow redirects (H)",
- " --location-trusted "
- "Like '--location', and send auth to other hosts (H)",
- " --login-options OPTIONS Server login options (IMAP, POP3, SMTP)",
- " -M, --manual Display the full manual",
- " --mail-from FROM Mail from this address (SMTP)",
- " --mail-rcpt TO Mail to this/these addresses (SMTP)",
- " --mail-auth AUTH Originator address of the original email (SMTP)",
- " --max-filesize BYTES Maximum file size to download (H/F)",
- " --max-redirs NUM Maximum number of redirects allowed (H)",
- " -m, --max-time SECONDS Maximum time allowed for the transfer",
- " --metalink Process given URLs as metalink XML file",
- " --negotiate Use HTTP Negotiate (SPNEGO) authentication (H)",
- " -n, --netrc Must read .netrc for user name and password",
- " --netrc-optional Use either .netrc or URL; overrides -n",
- " --netrc-file FILE Specify FILE for netrc",
- " -: --next "
- "Allows the following URL to use a separate set of options",
- " --no-alpn Disable the ALPN TLS extension (H)",
- " -N, --no-buffer Disable buffering of the output stream",
- " --no-keepalive Disable keepalive use on the connection",
- " --no-npn Disable the NPN TLS extension (H)",
- " --no-sessionid Disable SSL session-ID reusing (SSL)",
- " --noproxy List of hosts which do not use proxy",
- " --ntlm Use HTTP NTLM authentication (H)",
- " --oauth2-bearer TOKEN OAuth 2 Bearer Token (IMAP, POP3, SMTP)",
- " -o, --output FILE Write to FILE instead of stdout",
- " --pass PASS Pass phrase for the private key (SSL/SSH)",
- " --post301 "
- "Do not switch to GET after following a 301 redirect (H)",
- " --post302 "
- "Do not switch to GET after following a 302 redirect (H)",
- " --post303 "
- "Do not switch to GET after following a 303 redirect (H)",
- " -#, --progress-bar Display transfer progress as a progress bar",
- " --proto PROTOCOLS Enable/disable PROTOCOLS",
- " --proto-redir PROTOCOLS Enable/disable PROTOCOLS on redirect",
- " -x, --proxy [PROTOCOL://]HOST[:PORT] Use proxy on given port",
- " --proxy-anyauth Pick \"any\" proxy authentication method (H)",
- " --proxy-basic Use Basic authentication on the proxy (H)",
- " --proxy-digest Use Digest authentication on the proxy (H)",
- " --proxy-negotiate "
- "Use HTTP Negotiate (SPNEGO) authentication on the proxy (H)",
- " --proxy-ntlm Use NTLM authentication on the proxy (H)",
- " -U, --proxy-user USER[:PASSWORD] Proxy user and password",
- " --proxy1.0 HOST[:PORT] Use HTTP/1.0 proxy on given port",
- " -p, --proxytunnel Operate through a HTTP proxy tunnel (using CONNECT)",
- " --pubkey KEY Public key file name (SSH)",
- " -Q, --quote CMD Send command(s) to server before transfer (F/SFTP)",
- " --random-file FILE File for reading random data from (SSL)",
- " -r, --range RANGE Retrieve only the bytes within RANGE",
- " --raw Do HTTP \"raw\"; no transfer decoding (H)",
- " -e, --referer Referer URL (H)",
- " -J, --remote-header-name Use the header-provided filename (H)",
- " -O, --remote-name Write output to a file named as the remote file",
- " --remote-name-all Use the remote file name for all URLs",
- " -R, --remote-time Set the remote file's time on the local output",
- " -X, --request COMMAND Specify request command to use",
- " --resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS",
- " --retry NUM "
- "Retry request NUM times if transient problems occur",
- " --retry-delay SECONDS Wait SECONDS between retries",
- " --retry-max-time SECONDS Retry only within this period",
- " --sasl-ir Enable initial response in SASL authentication",
- " -S, --show-error "
- "Show error. With -s, make curl show errors when they occur",
- " -s, --silent Silent mode (don't output anything)",
- " --socks4 HOST[:PORT] SOCKS4 proxy on given host + port",
- " --socks4a HOST[:PORT] SOCKS4a proxy on given host + port",
- " --socks5 HOST[:PORT] SOCKS5 proxy on given host + port",
- " --socks5-hostname HOST[:PORT] "
- "SOCKS5 proxy, pass host name to proxy",
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- " --socks5-gssapi-service NAME SOCKS5 proxy service name for GSS-API",
- " --socks5-gssapi-nec Compatibility with NEC SOCKS5 server",
-#endif
- " -Y, --speed-limit RATE "
- "Stop transfers below RATE for 'speed-time' secs",
- " -y, --speed-time SECONDS "
- "Trigger 'speed-limit' abort after SECONDS (default: 30)",
- " --ssl Try SSL/TLS (FTP, IMAP, POP3, SMTP)",
- " --ssl-reqd Require SSL/TLS (FTP, IMAP, POP3, SMTP)",
- " -2, --sslv2 Use SSLv2 (SSL)",
- " -3, --sslv3 Use SSLv3 (SSL)",
- " --ssl-allow-beast Allow security flaw to improve interop (SSL)",
- " --stderr FILE Where to redirect stderr (use \"-\" for stdout)",
- " --tcp-nodelay Use the TCP_NODELAY option",
- " -t, --telnet-option OPT=VAL Set telnet option",
- " --tftp-blksize VALUE Set TFTP BLKSIZE option (must be >512)",
- " -z, --time-cond TIME Transfer based on a time condition",
- " -1, --tlsv1 Use => TLSv1 (SSL)",
- " --tlsv1.0 Use TLSv1.0 (SSL)",
- " --tlsv1.1 Use TLSv1.1 (SSL)",
- " --tlsv1.2 Use TLSv1.2 (SSL)",
- " --trace FILE Write a debug trace to FILE",
- " --trace-ascii FILE Like --trace, but without hex output",
- " --trace-time Add time stamps to trace/verbose output",
- " --tr-encoding Request compressed transfer encoding (H)",
- " -T, --upload-file FILE Transfer FILE to destination",
- " --url URL URL to work with",
- " -B, --use-ascii Use ASCII/text transfer",
- " -u, --user USER[:PASSWORD] Server user and password",
- " --tlsuser USER TLS username",
- " --tlspassword STRING TLS password",
- " --tlsauthtype STRING TLS authentication type (default: SRP)",
- " -A, --user-agent STRING Send User-Agent STRING to server (H)",
- " -v, --verbose Make the operation more talkative",
- " -V, --version Show version number and quit",
-#ifdef USE_WATT32
- " --wdebug Turn on Watt-32 debugging",
-#endif
- " -w, --write-out FORMAT Use output FORMAT after completion",
- " --xattr Store metadata in extended file attributes",
- " -q Disable .curlrc (must be first parameter)",
- NULL
-};
-
-#ifdef NETWARE
-# define PRINT_LINES_PAUSE 23
-#endif
-
-#ifdef __SYMBIAN32__
-# define PRINT_LINES_PAUSE 16
-#endif
-
-struct feat {
- const char *name;
- int bitmask;
-};
-
-static const struct feat feats[] = {
- {"AsynchDNS", CURL_VERSION_ASYNCHDNS},
- {"Debug", CURL_VERSION_DEBUG},
- {"TrackMemory", CURL_VERSION_CURLDEBUG},
- {"IDN", CURL_VERSION_IDN},
- {"IPv6", CURL_VERSION_IPV6},
- {"Largefile", CURL_VERSION_LARGEFILE},
- {"SSPI", CURL_VERSION_SSPI},
- {"GSS-API", CURL_VERSION_GSSAPI},
- {"SPNEGO", CURL_VERSION_SPNEGO},
- {"NTLM", CURL_VERSION_NTLM},
- {"NTLM_WB", CURL_VERSION_NTLM_WB},
- {"SSL", CURL_VERSION_SSL},
- {"krb4", CURL_VERSION_KERBEROS4},
- {"libz", CURL_VERSION_LIBZ},
- {"CharConv", CURL_VERSION_CONV},
- {"TLS-SRP", CURL_VERSION_TLSAUTH_SRP},
- {"HTTP2", CURL_VERSION_HTTP2}
-};
-
-void tool_help(void)
-{
- int i;
- for(i = 0; helptext[i]; i++) {
- puts(helptext[i]);
-#ifdef PRINT_LINES_PAUSE
- if(i && ((i % PRINT_LINES_PAUSE) == 0))
- tool_pressanykey();
-#endif
- }
-}
-
-void tool_version_info(void)
-{
- const char *const *proto;
-
- printf(CURL_ID "%s\n", curl_version());
- if(curlinfo->protocols) {
- printf("Protocols: ");
- for(proto = curlinfo->protocols; *proto; ++proto) {
- printf("%s ", *proto);
- }
- puts(""); /* newline */
- }
- if(curlinfo->features) {
- unsigned int i;
- printf("Features: ");
- for(i = 0; i < sizeof(feats)/sizeof(feats[0]); i++) {
- if(curlinfo->features & feats[i].bitmask)
- printf("%s ", feats[i].name);
- }
-#ifdef USE_METALINK
- printf("Metalink ");
-#endif
- puts(""); /* newline */
- }
-}
-
-void tool_list_engines(CURL *curl)
-{
- struct curl_slist *engines = NULL;
-
- /* Get the list of engines */
- curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines);
-
- puts("Build-time engines:");
- if(engines) {
- for(; engines; engines = engines->next)
- printf(" %s\n", engines->data);
- }
- else {
- puts(" <none>");
- }
-
- /* Cleanup the list of engines */
- curl_slist_free_all(engines);
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_help.h b/external/libcurl_android/jni/libcurl/src/tool_help.h
deleted file mode 100755
index 9ef50069..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_help.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef HEADER_CURL_TOOL_HELP_H
-#define HEADER_CURL_TOOL_HELP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-void tool_help(void);
-void tool_list_engines(CURL *curl);
-void tool_version_info(void);
-
-#endif /* HEADER_CURL_TOOL_HELP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_helpers.c b/external/libcurl_android/jni/libcurl/src/tool_helpers.c
deleted file mode 100755
index dbf32f8b..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_helpers.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_msgs.h"
-#include "tool_getparam.h"
-#include "tool_helpers.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/*
-** Helper functions that are used from more tha one source file.
-*/
-
-const char *param2text(int res)
-{
- ParameterError error = (ParameterError)res;
- switch(error) {
- case PARAM_GOT_EXTRA_PARAMETER:
- return "had unsupported trailing garbage";
- case PARAM_OPTION_UNKNOWN:
- return "is unknown";
- case PARAM_OPTION_AMBIGUOUS:
- return "is ambiguous";
- case PARAM_REQUIRES_PARAMETER:
- return "requires parameter";
- case PARAM_BAD_USE:
- return "is badly used here";
- case PARAM_BAD_NUMERIC:
- return "expected a proper numerical parameter";
- case PARAM_NEGATIVE_NUMERIC:
- return "expected a positive numerical parameter";
- case PARAM_LIBCURL_DOESNT_SUPPORT:
- return "the installed libcurl version doesn't support this";
- case PARAM_NO_MEM:
- return "out of memory";
- default:
- return "unknown error";
- }
-}
-
-int SetHTTPrequest(struct OperationConfig *config, HttpReq req, HttpReq *store)
-{
- if((*store == HTTPREQ_UNSPEC) ||
- (*store == req)) {
- *store = req;
- return 0;
- }
- warnf(config, "You can only select one HTTP request!\n");
- return 1;
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_helpers.h b/external/libcurl_android/jni/libcurl/src/tool_helpers.h
deleted file mode 100755
index 73bcfc77..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_helpers.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef HEADER_CURL_TOOL_HELPERS_H
-#define HEADER_CURL_TOOL_HELPERS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-const char *param2text(int res);
-
-int SetHTTPrequest(struct OperationConfig *config, HttpReq req,
- HttpReq *store);
-
-#endif /* HEADER_CURL_TOOL_HELPERS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_homedir.c b/external/libcurl_android/jni/libcurl/src/tool_homedir.c
deleted file mode 100755
index 11bb4ef3..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_homedir.c
+++ /dev/null
@@ -1,95 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef HAVE_PWD_H
-# include <pwd.h>
-#endif
-
-#include "tool_homedir.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-static char *GetEnv(const char *variable, char do_expand)
-{
- char *env = NULL;
-#ifdef WIN32
- char buf1[1024], buf2[1024];
- DWORD rc;
-
- /* Don't use getenv(); it doesn't find variable added after program was
- * started. Don't accept truncated results (i.e. rc >= sizeof(buf1)). */
-
- rc = GetEnvironmentVariable(variable, buf1, sizeof(buf1));
- if(rc > 0 && rc < sizeof(buf1)) {
- env = buf1;
- variable = buf1;
- }
- if(do_expand && strchr(variable,'%')) {
- /* buf2 == variable if not expanded */
- rc = ExpandEnvironmentStrings (variable, buf2, sizeof(buf2));
- if(rc > 0 && rc < sizeof(buf2) &&
- !strchr(buf2,'%')) /* no vars still unexpanded */
- env = buf2;
- }
-#else
- (void)do_expand;
- /* no length control */
- env = getenv(variable);
-#endif
- return (env && env[0]) ? strdup(env) : NULL;
-}
-
-/* return the home directory of the current user as an allocated string */
-char *homedir(void)
-{
- char *home;
-
- home = GetEnv("CURL_HOME", FALSE);
- if(home)
- return home;
-
- home = GetEnv("HOME", FALSE);
- if(home)
- return home;
-
-#if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID)
- {
- struct passwd *pw = getpwuid(geteuid());
-
- if(pw) {
- home = pw->pw_dir;
- if(home && home[0])
- home = strdup(home);
- else
- home = NULL;
- }
- }
-#endif /* PWD-stuff */
-#ifdef WIN32
- home = GetEnv("APPDATA", TRUE);
- if(!home)
- home = GetEnv("%USERPROFILE%\\Application Data", TRUE); /* Normally only
- on Win-2K/XP */
-#endif /* WIN32 */
- return home;
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_homedir.h b/external/libcurl_android/jni/libcurl/src/tool_homedir.h
deleted file mode 100755
index d5886155..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_homedir.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef HEADER_CURL_TOOL_HOMEDIR_H
-#define HEADER_CURL_TOOL_HOMEDIR_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-char *homedir(void);
-
-#endif /* HEADER_CURL_TOOL_HOMEDIR_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_hugehelp.c b/external/libcurl_android/jni/libcurl/src/tool_hugehelp.c
deleted file mode 100755
index eb6149d4..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_hugehelp.c
+++ /dev/null
@@ -1,8299 +0,0 @@
-#include "tool_setup.h"
-#ifndef HAVE_LIBZ
-/*
- * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: Wed Sep 10 00:40:56 2014
- */
-#ifdef USE_MANUAL
-#include "tool_hugehelp.h"
-void hugehelp(void)
-{
- fputs(
-" _ _ ____ _\n"
-" Project ___| | | | _ \\| |\n"
-" / __| | | | |_) | |\n"
-" | (__| |_| | _ <| |___\n"
-" \\___|\\___/|_| \\_\\_____|\n"
-"\n"
-"NAME\n"
-" curl - transfer a URL\n"
-"\n"
-"SYNOPSIS\n"
-" curl [options] [URL...]\n"
-"\n"
-"DESCRIPTION\n"
-" curl is a tool to transfer data from or to a server, using one of the\n"
-" supported protocols (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP,\n"
-, stdout);
- fputs(
-" IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS,\n"
-" TELNET and TFTP). The command is designed to work without user inter-\n"
-" action.\n"
-"\n"
-" curl offers a busload of useful tricks like proxy support, user authen-\n"
-" tication, FTP upload, HTTP post, SSL connections, cookies, file trans-\n"
-" fer resume, Metalink, and more. As you will see below, the number of\n"
-" features will make your head spin!\n"
-"\n"
-, stdout);
- fputs(
-" curl is powered by libcurl for all transfer-related features. See\n"
-" libcurl(3) for details.\n"
-"\n"
-"URL\n"
-" The URL syntax is protocol-dependent. You'll find a detailed descrip-\n"
-" tion in RFC 3986.\n"
-"\n"
-" You can specify multiple URLs or parts of URLs by writing part sets\n"
-" within braces as in:\n"
-"\n"
-" http://site.{one,two,three}.com\n"
-"\n"
-" or you can get sequences of alphanumeric series by using [] as in:\n"
-"\n"
-" ftp://ftp.numericals.com/file[1-100].txt\n"
-, stdout);
- fputs(
-" ftp://ftp.numericals.com/file[001-100].txt (with leading zeros)\n"
-" ftp://ftp.letters.com/file[a-z].txt\n"
-"\n"
-" Nested sequences are not supported, but you can use several ones next\n"
-" to each other:\n"
-"\n"
-" http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html\n"
-"\n"
-" You can specify any amount of URLs on the command line. They will be\n"
-" fetched in a sequential manner in the specified order.\n"
-"\n"
-, stdout);
- fputs(
-" You can specify a step counter for the ranges to get every Nth number\n"
-" or letter:\n"
-"\n"
-" http://www.numericals.com/file[1-100:10].txt\n"
-" http://www.letters.com/file[a-z:2].txt\n"
-"\n"
-" If you specify URL without protocol:// prefix, curl will attempt to\n"
-" guess what protocol you might want. It will then default to HTTP but\n"
-" try other protocols based on often-used host name prefixes. For exam-\n"
-, stdout);
- fputs(
-" ple, for host names starting with \"ftp.\" curl will assume you want to\n"
-" speak FTP.\n"
-"\n"
-" curl will do its best to use what you pass to it as a URL. It is not\n"
-" trying to validate it as a syntactically correct URL by any means but\n"
-" is instead very liberal with what it accepts.\n"
-"\n"
-" curl will attempt to re-use connections for multiple file transfers, so\n"
-" that getting many files from the same server will not do multiple con-\n"
-, stdout);
- fputs(
-" nects / handshakes. This improves speed. Of course this is only done on\n"
-" files specified on a single command line and cannot be used between\n"
-" separate curl invokes.\n"
-"\n"
-"PROGRESS METER\n"
-" curl normally displays a progress meter during operations, indicating\n"
-" the amount of transferred data, transfer speeds and estimated time\n"
-" left, etc.\n"
-"\n"
-" curl displays this data to the terminal by default, so if you invoke\n"
-, stdout);
- fputs(
-" curl to do an operation and it is about to write data to the terminal,\n"
-" it disables the progress meter as otherwise it would mess up the output\n"
-" mixing progress meter and response data.\n"
-"\n"
-" If you want a progress meter for HTTP POST or PUT requests, you need to\n"
-" redirect the response output to a file, using shell redirect (>), -o\n"
-" [file] or similar.\n"
-"\n"
-" It is not the same case for FTP upload as that operation does not spit\n"
-, stdout);
- fputs(
-" out any response data to the terminal.\n"
-"\n"
-" If you prefer a progress \"bar\" instead of the regular meter, -# is your\n"
-" friend.\n"
-"OPTIONS\n"
-" Options start with one or two dashes. Many of the options require an\n"
-" additional value next to them.\n"
-"\n"
-" The short \"single-dash\" form of the options, -d for example, may be\n"
-" used with or without a space between it and its value, although a space\n"
-, stdout);
- fputs(
-" is a recommended separator. The long \"double-dash\" form, --data for\n"
-" example, requires a space between it and its value.\n"
-"\n"
-" Short version options that don't need any additional values can be used\n"
-" immediately next to each other, like for example you can specify all\n"
-" the options -O, -L and -v at once as -OLv.\n"
-"\n"
-" In general, all boolean options are enabled with --option and yet again\n"
-, stdout);
- fputs(
-" disabled with --no-option. That is, you use the exact same option name\n"
-" but prefix it with \"no-\". However, in this list we mostly only list and\n"
-" show the --option version of them. (This concept with --no options was\n"
-" added in 7.19.0. Previously most options were toggled on/off on\n"
-" repeated use of the same command line option.)\n"
-"\n"
-" -#, --progress-bar\n"
-" Make curl display progress as a simple progress bar instead of\n"
-, stdout);
- fputs(
-" the standard, more informational, meter.\n"
-"\n"
-" -:, --next\n"
-" Tells curl to use a separate operation for the following URL and\n"
-" associated options. This allows you to send several URL\n"
-" requests, each with their own specific options, for example,\n"
-" such as different user names or custom requests for each. (Added\n"
-" in 7.36.0)\n"
-"\n"
-" -0, --http1.0\n"
-, stdout);
- fputs(
-" (HTTP) Tells curl to use HTTP version 1.0 instead of using its\n"
-" internally preferred: HTTP 1.1.\n"
-"\n"
-" --http1.1\n"
-" (HTTP) Tells curl to use HTTP version 1.1. This is the internal\n"
-" default version. (Added in 7.33.0)\n"
-"\n"
-" --http2\n"
-" (HTTP) Tells curl to issue its requests using HTTP 2. This\n"
-" requires that the underlying libcurl was built to support it.\n"
-" (Added in 7.33.0)\n"
-"\n"
-" --no-npn\n"
-, stdout);
- fputs(
-" Disable the NPN TLS extension. NPN is enabled by default if\n"
-" libcurl was built with an SSL library that supports NPN. NPN is\n"
-" used by a libcurl that supports HTTP 2 to negotiate HTTP 2 sup-\n"
-" port with the server during https sessions.\n"
-"\n"
-" (Added in 7.36.0)\n"
-"\n"
-" --no-alpn\n"
-" Disable the ALPN TLS extension. ALPN is enabled by default if\n"
-, stdout);
- fputs(
-" libcurl was built with an SSL library that supports ALPN. ALPN\n"
-" is used by a libcurl that supports HTTP 2 to negotiate HTTP 2\n"
-" support with the server during https sessions.\n"
-"\n"
-" (Added in 7.36.0)\n"
-"\n"
-" -1, --tlsv1\n"
-" (SSL) Forces curl to use TLS version 1.x when negotiating with a\n"
-" remote TLS server. You can use options --tlsv1.0, --tlsv1.1,\n"
-, stdout);
- fputs(
-" and --tlsv1.2 to control the TLS version more precisely (if the\n"
-" SSL backend in use supports such a level of control).\n"
-"\n"
-" -2, --sslv2\n"
-" (SSL) Forces curl to use SSL version 2 when negotiating with a\n"
-" remote SSL server.\n"
-"\n"
-" -3, --sslv3\n"
-" (SSL) Forces curl to use SSL version 3 when negotiating with a\n"
-" remote SSL server.\n"
-"\n"
-" -4, --ipv4\n"
-, stdout);
- fputs(
-" If curl is capable of resolving an address to multiple IP ver-\n"
-" sions (which it is if it is IPv6-capable), this option tells\n"
-" curl to resolve names to IPv4 addresses only.\n"
-"\n"
-" -6, --ipv6\n"
-" If curl is capable of resolving an address to multiple IP ver-\n"
-" sions (which it is if it is IPv6-capable), this option tells\n"
-" curl to resolve names to IPv6 addresses only.\n"
-"\n"
-" -a, --append\n"
-, stdout);
- fputs(
-" (FTP/SFTP) When used in an upload, this will tell curl to append\n"
-" to the target file instead of overwriting it. If the file\n"
-" doesn't exist, it will be created. Note that this flag is\n"
-" ignored by some SSH servers (including OpenSSH).\n"
-"\n"
-" -A, --user-agent <agent string>\n"
-" (HTTP) Specify the User-Agent string to send to the HTTP server.\n"
-" Some badly done CGIs fail if this field isn't set to\n"
-, stdout);
- fputs(
-" \"Mozilla/4.0\". To encode blanks in the string, surround the\n"
-" string with single quote marks. This can also be set with the\n"
-" -H, --header option of course.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --anyauth\n"
-" (HTTP) Tells curl to figure out authentication method by itself,\n"
-" and use the most secure one the remote site claims to support.\n"
-, stdout);
- fputs(
-" This is done by first doing a request and checking the response-\n"
-" headers, thus possibly inducing an extra network round-trip.\n"
-" This is used instead of setting a specific authentication\n"
-" method, which you can do with --basic, --digest, --ntlm, and\n"
-" --negotiate.\n"
-"\n"
-" Note that using --anyauth is not recommended if you do uploads\n"
-, stdout);
- fputs(
-" from stdin, since it may require data to be sent twice and then\n"
-" the client must be able to rewind. If the need should arise when\n"
-" uploading from stdin, the upload operation will fail.\n"
-"\n"
-" -b, --cookie <name=data>\n"
-" (HTTP) Pass the data to the HTTP server as a cookie. It is sup-\n"
-" posedly the data previously received from the server in a \"Set-\n"
-" Cookie:\" line. The data should be in the format \"NAME1=VALUE1;\n"
-, stdout);
- fputs(
-" NAME2=VALUE2\".\n"
-"\n"
-" If no '=' symbol is used in the line, it is treated as a file-\n"
-" name to use to read previously stored cookie lines from, which\n"
-" should be used in this session if they match. Using this method\n"
-" also activates the \"cookie parser\" which will make curl record\n"
-" incoming cookies too, which may be handy if you're using this in\n"
-, stdout);
- fputs(
-" combination with the -L, --location option. The file format of\n"
-" the file to read cookies from should be plain HTTP headers or\n"
-" the Netscape/Mozilla cookie file format.\n"
-"\n"
-" NOTE that the file specified with -b, --cookie is only used as\n"
-" input. No cookies will be stored in the file. To store cookies,\n"
-" use the -c, --cookie-jar option or you could even save the HTTP\n"
-, stdout);
- fputs(
-" headers to a file using -D, --dump-header!\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -B, --use-ascii\n"
-" (FTP/LDAP) Enable ASCII transfer. For FTP, this can also be\n"
-" enforced by using an URL that ends with \";type=A\". This option\n"
-" causes data sent to stdout to be in text mode for win32 systems.\n"
-"\n"
-" --basic\n"
-" (HTTP) Tells curl to use HTTP Basic authentication. This is the\n"
-, stdout);
- fputs(
-" default and this option is usually pointless, unless you use it\n"
-" to override a previously set option that sets a different\n"
-" authentication method (such as --ntlm, --digest, or --negoti-\n"
-" ate).\n"
-"\n"
-" -c, --cookie-jar <file name>\n"
-" (HTTP) Specify to which file you want curl to write all cookies\n"
-" after a completed operation. Curl writes all cookies previously\n"
-, stdout);
- fputs(
-" read from a specified file as well as all cookies received from\n"
-" remote server(s). If no cookies are known, no file will be writ-\n"
-" ten. The file will be written using the Netscape cookie file\n"
-" format. If you set the file name to a single dash, \"-\", the\n"
-" cookies will be written to stdout.\n"
-"\n"
-" This command line option will activate the cookie engine that\n"
-, stdout);
- fputs(
-" makes curl record and use cookies. Another way to activate it is\n"
-" to use the -b, --cookie option.\n"
-"\n"
-" If the cookie jar can't be created or written to, the whole curl\n"
-" operation won't fail or even report an error clearly. Using -v\n"
-" will get a warning displayed, but that is the only visible feed-\n"
-" back you get about this possibly lethal situation.\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, the last specified file\n"
-" name will be used.\n"
-"\n"
-" -C, --continue-at <offset>\n"
-" Continue/Resume a previous file transfer at the given offset.\n"
-" The given offset is the exact number of bytes that will be\n"
-" skipped, counting from the beginning of the source file before\n"
-" it is transferred to the destination. If used with uploads, the\n"
-, stdout);
- fputs(
-" FTP server command SIZE will not be used by curl.\n"
-"\n"
-" Use \"-C -\" to tell curl to automatically find out where/how to\n"
-" resume the transfer. It then uses the given output/input files\n"
-" to figure that out.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --ciphers <list of ciphers>\n"
-" (SSL) Specifies which ciphers to use in the connection. The list\n"
-, stdout);
- fputs(
-" of ciphers must specify valid ciphers. Read up on SSL cipher\n"
-" list details on this URL:\n"
-" http://www.openssl.org/docs/apps/ciphers.html\n"
-"\n"
-" NSS ciphers are done differently than OpenSSL and GnuTLS. The\n"
-" full list of NSS ciphers is in the NSSCipherSuite entry at this\n"
-" URL: http://git.fedora-\n"
-, stdout);
- fputs(
-" hosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --compressed\n"
-" (HTTP) Request a compressed response using one of the algorithms\n"
-" curl supports, and save the uncompressed document. If this\n"
-" option is used and the server sends an unsupported encoding,\n"
-" curl will report an error.\n"
-"\n"
-" --connect-timeout <seconds>\n"
-, stdout);
- fputs(
-" Maximum time in seconds that you allow the connection to the\n"
-" server to take. This only limits the connection phase, once\n"
-" curl has connected this option is of no more use. Since 7.32.0,\n"
-" this option accepts decimal values, but the actual timeout will\n"
-" decrease in accuracy as the specified timeout increases in deci-\n"
-" mal precision. See also the -m, --max-time option.\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --create-dirs\n"
-" When used in conjunction with the -o option, curl will create\n"
-" the necessary local directory hierarchy as needed. This option\n"
-" creates the dirs mentioned with the -o option, nothing else. If\n"
-" the -o file name uses no dir or if the dirs it mentions already\n"
-" exist, no dir will be created.\n"
-"\n"
-, stdout);
- fputs(
-" To create remote directories when using FTP or SFTP, try --ftp-\n"
-" create-dirs.\n"
-"\n"
-" --crlf (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390).\n"
-"\n"
-" --crlfile <file>\n"
-" (HTTPS/FTPS) Provide a file using PEM format with a Certificate\n"
-" Revocation List that may specify peer certificates that are to\n"
-" be considered revoked.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-, stdout);
- fputs(
-" (Added in 7.19.7)\n"
-" -d, --data <data>\n"
-" (HTTP) Sends the specified data in a POST request to the HTTP\n"
-" server, in the same way that a browser does when a user has\n"
-" filled in an HTML form and presses the submit button. This will\n"
-" cause curl to pass the data to the server using the content-type\n"
-" application/x-www-form-urlencoded. Compare to -F, --form.\n"
-"\n"
-, stdout);
- fputs(
-" -d, --data is the same as --data-ascii. To post data purely\n"
-" binary, you should instead use the --data-binary option. To URL-\n"
-" encode the value of a form field you may use --data-urlencode.\n"
-"\n"
-" If any of these options is used more than once on the same com-\n"
-" mand line, the data pieces specified will be merged together\n"
-" with a separating &-symbol. Thus, using '-d name=daniel -d\n"
-, stdout);
- fputs(
-" skill=lousy' would generate a post chunk that looks like\n"
-" 'name=daniel&skill=lousy'.\n"
-"\n"
-" If you start the data with the letter @, the rest should be a\n"
-" file name to read the data from, or - if you want curl to read\n"
-" the data from stdin. Multiple files can also be specified. Post-\n"
-" ing data from a file named 'foobar' would thus be done with\n"
-, stdout);
- fputs(
-" --data @foobar. When --data is told to read from a file like\n"
-" that, carriage returns and newlines will be stripped out.\n"
-"\n"
-" -D, --dump-header <file>\n"
-" Write the protocol headers to the specified file.\n"
-"\n"
-" This option is handy to use when you want to store the headers\n"
-" that an HTTP site sends to you. Cookies from the headers could\n"
-" then be read in a second curl invocation by using the -b,\n"
-, stdout);
- fputs(
-" --cookie option! The -c, --cookie-jar option is however a better\n"
-" way to store cookies.\n"
-"\n"
-" When used in FTP, the FTP server response lines are considered\n"
-" being \"headers\" and thus are saved there.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --data-ascii <data>\n"
-" See -d, --data.\n"
-"\n"
-" --data-binary <data>\n"
-" (HTTP) This posts data exactly as specified with no extra pro-\n"
-, stdout);
- fputs(
-" cessing whatsoever.\n"
-"\n"
-" If you start the data with the letter @, the rest should be a\n"
-" filename. Data is posted in a similar manner as --data-ascii\n"
-" does, except that newlines and carriage returns are preserved\n"
-" and conversions are never done.\n"
-"\n"
-" If this option is used several times, the ones following the\n"
-" first will append data as described in -d, --data.\n"
-"\n"
-" --data-urlencode <data>\n"
-, stdout);
- fputs(
-" (HTTP) This posts data, similar to the other --data options with\n"
-" the exception that this performs URL-encoding. (Added in 7.18.0)\n"
-" To be CGI-compliant, the <data> part should begin with a name\n"
-" followed by a separator and a content specification. The <data>\n"
-" part can be passed to curl using one of the following syntaxes:\n"
-"\n"
-" content\n"
-" This will make curl URL-encode the content and pass that\n"
-, stdout);
- fputs(
-" on. Just be careful so that the content doesn't contain\n"
-" any = or @ symbols, as that will then make the syntax\n"
-" match one of the other cases below!\n"
-"\n"
-" =content\n"
-" This will make curl URL-encode the content and pass that\n"
-" on. The preceding = symbol is not included in the data.\n"
-"\n"
-" name=content\n"
-, stdout);
- fputs(
-" This will make curl URL-encode the content part and pass\n"
-" that on. Note that the name part is expected to be URL-\n"
-" encoded already.\n"
-"\n"
-" @filename\n"
-" This will make curl load data from the given file\n"
-" (including any newlines), URL-encode that data and pass\n"
-" it on in the POST.\n"
-"\n"
-" name@filename\n"
-, stdout);
- fputs(
-" This will make curl load data from the given file\n"
-" (including any newlines), URL-encode that data and pass\n"
-" it on in the POST. The name part gets an equal sign\n"
-" appended, resulting in name=urlencoded-file-content. Note\n"
-" that the name is expected to be URL-encoded already.\n"
-"\n"
-" --delegation LEVEL\n"
-" Set LEVEL to tell the server what it is allowed to delegate when\n"
-, stdout);
- fputs(
-" it comes to user credentials. Used with GSS/kerberos.\n"
-"\n"
-" none Don't allow any delegation.\n"
-"\n"
-" policy Delegates if and only if the OK-AS-DELEGATE flag is set\n"
-" in the Kerberos service ticket, which is a matter of\n"
-" realm policy.\n"
-"\n"
-" always Unconditionally allow the server to delegate.\n"
-"\n"
-" --digest\n"
-" (HTTP) Enables HTTP Digest authentication. This is an authenti-\n"
-, stdout);
- fputs(
-" cation scheme that prevents the password from being sent over\n"
-" the wire in clear text. Use this in combination with the normal\n"
-" -u, --user option to set user name and password. See also\n"
-" --ntlm, --negotiate and --anyauth for related options.\n"
-"\n"
-" If this option is used several times, only the first one is\n"
-" used.\n"
-"\n"
-" --disable-eprt\n"
-, stdout);
- fputs(
-" (FTP) Tell curl to disable the use of the EPRT and LPRT commands\n"
-" when doing active FTP transfers. Curl will normally always first\n"
-" attempt to use EPRT, then LPRT before using PORT, but with this\n"
-" option, it will use PORT right away. EPRT and LPRT are exten-\n"
-" sions to the original FTP protocol, and may not work on all\n"
-" servers, but they enable more functionality in a better way than\n"
-, stdout);
- fputs(
-" the traditional PORT command.\n"
-"\n"
-" --eprt can be used to explicitly enable EPRT again and --no-eprt\n"
-" is an alias for --disable-eprt.\n"
-"\n"
-" Disabling EPRT only changes the active behavior. If you want to\n"
-" switch to passive mode you need to not use -P, --ftp-port or\n"
-" force it with --ftp-pasv.\n"
-"\n"
-" --disable-epsv\n"
-" (FTP) Tell curl to disable the use of the EPSV command when\n"
-, stdout);
- fputs(
-" doing passive FTP transfers. Curl will normally always first\n"
-" attempt to use EPSV before PASV, but with this option, it will\n"
-" not try using EPSV.\n"
-"\n"
-" --epsv can be used to explicitly enable EPSV again and --no-epsv\n"
-" is an alias for --disable-epsv.\n"
-"\n"
-" Disabling EPSV only changes the passive behavior. If you want to\n"
-" switch to active mode you need to use -P, --ftp-port.\n"
-"\n"
-, stdout);
- fputs(
-" --dns-interface <interface>\n"
-" Tell curl to send outgoing DNS requests through <interface>.\n"
-" This option is a counterpart to --interface (which does not\n"
-" affect DNS). The supplied string must be an interface name (not\n"
-" an address).\n"
-"\n"
-" This option requires that libcurl was built with a resolver\n"
-" backend that supports this operation. The c-ares backend is the\n"
-, stdout);
- fputs(
-" only such one. (Added in 7.33.0)\n"
-"\n"
-" --dns-ipv4-addr <ip-address>\n"
-" Tell curl to bind to <ip-address> when making IPv4 DNS requests,\n"
-" so that the DNS requests originate from this address. The argu-\n"
-" ment should be a single IPv4 address.\n"
-"\n"
-" This option requires that libcurl was built with a resolver\n"
-" backend that supports this operation. The c-ares backend is the\n"
-, stdout);
- fputs(
-" only such one. (Added in 7.33.0)\n"
-"\n"
-" --dns-ipv6-addr <ip-address>\n"
-" Tell curl to bind to <ip-address> when making IPv6 DNS requests,\n"
-" so that the DNS requests originate from this address. The argu-\n"
-" ment should be a single IPv6 address.\n"
-"\n"
-" This option requires that libcurl was built with a resolver\n"
-" backend that supports this operation. The c-ares backend is the\n"
-, stdout);
- fputs(
-" only such one. (Added in 7.33.0)\n"
-"\n"
-" --dns-servers <ip-address,ip-address>\n"
-" Set the list of DNS servers to be used instead of the system\n"
-" default. The list of IP addresses should be separated with com-\n"
-" mas. Port numbers may also optionally be given as :<port-number>\n"
-" after each IP address.\n"
-"\n"
-" This option requires that libcurl was built with a resolver\n"
-, stdout);
- fputs(
-" backend that supports this operation. The c-ares backend is the\n"
-" only such one. (Added in 7.33.0)\n"
-"\n"
-" -e, --referer <URL>\n"
-" (HTTP) Sends the \"Referrer Page\" information to the HTTP server.\n"
-" This can also be set with the -H, --header flag of course. When\n"
-" used with -L, --location you can append \";auto\" to the --referer\n"
-" URL to make curl automatically set the previous URL when it fol-\n"
-, stdout);
- fputs(
-" lows a Location: header. The \";auto\" string can be used alone,\n"
-" even if you don't set an initial --referer.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -E, --cert <certificate[:password]>\n"
-" (SSL) Tells curl to use the specified client certificate file\n"
-" when getting a file with HTTPS, FTPS or another SSL-based proto-\n"
-" col. The certificate must be in PKCS#12 format if using Secure\n"
-, stdout);
- fputs(
-" Transport, or PEM format if using any other engine. If the\n"
-" optional password isn't specified, it will be queried for on the\n"
-" terminal. Note that this option assumes a \"certificate\" file\n"
-" that is the private key and the private certificate concate-\n"
-" nated! See --cert and --key to specify them independently.\n"
-"\n"
-" If curl is built against the NSS SSL library then this option\n"
-, stdout);
- fputs(
-" can tell curl the nickname of the certificate to use within the\n"
-" NSS database defined by the environment variable SSL_DIR (or by\n"
-" default /etc/pki/nssdb). If the NSS PEM PKCS#11 module (lib-\n"
-" nsspem.so) is available then PEM files may be loaded. If you\n"
-" want to use a file from the current directory, please precede it\n"
-" with \"./\" prefix, in order to avoid confusion with a nickname.\n"
-, stdout);
- fputs(
-" If the nickname contains \":\", it needs to be preceded by \"\\\" so\n"
-" that it is not recognized as password delimiter. If the nick-\n"
-" name contains \"\\\", it needs to be escaped as \"\\\\\" so that it is\n"
-" not recognized as an escape character.\n"
-"\n"
-" (iOS and Mac OS X only) If curl is built against Secure Trans-\n"
-" port, then the certificate string can either be the name of a\n"
-, stdout);
- fputs(
-" certificate/private key in the system or user keychain, or the\n"
-" path to a PKCS#12-encoded certificate and private key. If you\n"
-" want to use a file from the current directory, please precede it\n"
-" with \"./\" prefix, in order to avoid confusion with a nickname.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --engine <name>\n"
-" Select the OpenSSL crypto engine to use for cipher operations.\n"
-, stdout);
- fputs(
-" Use --engine list to print a list of build-time supported\n"
-" engines. Note that not all (or none) of the engines may be\n"
-" available at run-time.\n"
-"\n"
-" --environment\n"
-" (RISC OS ONLY) Sets a range of environment variables, using the\n"
-" names the -w option supports, to allow easier extraction of use-\n"
-" ful information after having run curl.\n"
-"\n"
-" --egd-file <file>\n"
-, stdout);
- fputs(
-" (SSL) Specify the path name to the Entropy Gathering Daemon\n"
-" socket. The socket is used to seed the random engine for SSL\n"
-" connections. See also the --random-file option.\n"
-"\n"
-" --cert-type <type>\n"
-" (SSL) Tells curl what certificate type the provided certificate\n"
-" is in. PEM, DER and ENG are recognized types. If not specified,\n"
-" PEM is assumed.\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --cacert <CA certificate>\n"
-" (SSL) Tells curl to use the specified certificate file to verify\n"
-" the peer. The file may contain multiple CA certificates. The\n"
-" certificate(s) must be in PEM format. Normally curl is built to\n"
-" use a default file for this, so this option is typically used to\n"
-" alter that default file.\n"
-"\n"
-, stdout);
- fputs(
-" curl recognizes the environment variable named 'CURL_CA_BUNDLE'\n"
-" if it is set, and uses the given path as a path to a CA cert\n"
-" bundle. This option overrides that variable.\n"
-"\n"
-" The windows version of curl will automatically look for a CA\n"
-" certs file named 'curl-ca-bundle.crt', either in the same direc-\n"
-" tory as curl.exe, or in the Current Working Directory, or in any\n"
-" folder along your PATH.\n"
-"\n"
-, stdout);
- fputs(
-" If curl is built against the NSS SSL library, the NSS PEM\n"
-" PKCS#11 module (libnsspem.so) needs to be available for this\n"
-" option to work properly.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --capath <CA certificate directory>\n"
-" (SSL) Tells curl to use the specified certificate directory to\n"
-" verify the peer. Multiple paths can be provided by separating\n"
-, stdout);
- fputs(
-" them with \":\" (e.g. \"path1:path2:path3\"). The certificates must\n"
-" be in PEM format, and if curl is built against OpenSSL, the\n"
-" directory must have been processed using the c_rehash utility\n"
-" supplied with OpenSSL. Using --capath can allow OpenSSL-powered\n"
-" curl to make SSL-connections much more efficiently than using\n"
-" --cacert if the --cacert file contains many CA certificates.\n"
-"\n"
-, stdout);
- fputs(
-" If this option is set, the default capath value will be ignored,\n"
-" and if it is used several times, the last one will be used.\n"
-"\n"
-" -f, --fail\n"
-" (HTTP) Fail silently (no output at all) on server errors. This\n"
-" is mostly done to better enable scripts etc to better deal with\n"
-" failed attempts. In normal cases when an HTTP server fails to\n"
-" deliver a document, it returns an HTML document stating so\n"
-, stdout);
- fputs(
-" (which often also describes why and more). This flag will pre-\n"
-" vent curl from outputting that and return error 22.\n"
-"\n"
-" This method is not fail-safe and there are occasions where non-\n"
-" successful response codes will slip through, especially when\n"
-" authentication is involved (response codes 401 and 407).\n"
-"\n"
-" -F, --form <name=content>\n"
-" (HTTP) This lets curl emulate a filled-in form in which a user\n"
-, stdout);
- fputs(
-" has pressed the submit button. This causes curl to POST data\n"
-" using the Content-Type multipart/form-data according to RFC\n"
-" 2388. This enables uploading of binary files etc. To force the\n"
-" 'content' part to be a file, prefix the file name with an @\n"
-" sign. To just get the content part from a file, prefix the file\n"
-" name with the symbol <. The difference between @ and < is then\n"
-, stdout);
- fputs(
-" that @ makes a file get attached in the post as a file upload,\n"
-" while the < makes a text field and just get the contents for\n"
-" that text field from a file.\n"
-"\n"
-" Example, to send your password file to the server, where 'pass-\n"
-" word' is the name of the form-field to which /etc/passwd will be\n"
-" the input:\n"
-"\n"
-" curl -F password=@/etc/passwd www.mypasswords.com\n"
-"\n"
-, stdout);
- fputs(
-" To read content from stdin instead of a file, use - as the file-\n"
-" name. This goes for both @ and < constructs.\n"
-"\n"
-" You can also tell curl what Content-Type to use by using\n"
-" 'type=', in a manner similar to:\n"
-"\n"
-" curl -F \"web=@index.html;type=text/html\" url.com\n"
-"\n"
-" or\n"
-"\n"
-" curl -F \"name=daniel;type=text/foo\" url.com\n"
-"\n"
-" You can also explicitly change the name field of a file upload\n"
-, stdout);
- fputs(
-" part by setting filename=, like this:\n"
-"\n"
-" curl -F \"file=@localfile;filename=nameinpost\" url.com\n"
-"\n"
-" If filename/path contains ',' or ';', it must be quoted by dou-\n"
-" ble-quotes like:\n"
-"\n"
-" curl -F \"file=@\\\"localfile\\\";filename=\\\"nameinpost\\\"\" url.com\n"
-"\n"
-" or\n"
-"\n"
-" curl -F 'file=@\"localfile\";filename=\"nameinpost\"' url.com\n"
-"\n"
-" Note that if a filename/path is quoted by double-quotes, any\n"
-, stdout);
- fputs(
-" double-quote or backslash within the filename must be escaped by\n"
-" backslash.\n"
-"\n"
-" See further examples and details in the MANUAL.\n"
-"\n"
-" This option can be used multiple times.\n"
-"\n"
-" --ftp-account [data]\n"
-" (FTP) When an FTP server asks for \"account data\" after user name\n"
-" and password has been provided, this data is sent off using the\n"
-" ACCT command. (Added in 7.13.0)\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --ftp-alternative-to-user <command>\n"
-" (FTP) If authenticating with the USER and PASS commands fails,\n"
-" send this command. When connecting to Tumbleweed's Secure\n"
-" Transport server over FTPS using a client certificate, using\n"
-" \"SITE AUTH\" will tell the server to retrieve the username from\n"
-" the certificate. (Added in 7.15.5)\n"
-"\n"
-, stdout);
- fputs(
-" --ftp-create-dirs\n"
-" (FTP/SFTP) When an FTP or SFTP URL/operation uses a path that\n"
-" doesn't currently exist on the server, the standard behavior of\n"
-" curl is to fail. Using this option, curl will instead attempt to\n"
-" create missing directories.\n"
-"\n"
-" --ftp-method [method]\n"
-" (FTP) Control what method curl should use to reach a file on an\n"
-" FTP(S) server. The method argument should be one of the follow-\n"
-, stdout);
- fputs(
-" ing alternatives:\n"
-"\n"
-" multicwd\n"
-" curl does a single CWD operation for each path part in\n"
-" the given URL. For deep hierarchies this means very many\n"
-" commands. This is how RFC 1738 says it should be done.\n"
-" This is the default but the slowest behavior.\n"
-"\n"
-" nocwd curl does no CWD at all. curl will do SIZE, RETR, STOR\n"
-, stdout);
- fputs(
-" etc and give a full path to the server for all these com-\n"
-" mands. This is the fastest behavior.\n"
-"\n"
-" singlecwd\n"
-" curl does one CWD with the full target directory and then\n"
-" operates on the file \"normally\" (like in the multicwd\n"
-" case). This is somewhat more standards compliant than\n"
-" 'nocwd' but without the full penalty of 'multicwd'.\n"
-" (Added in 7.15.1)\n"
-"\n"
-, stdout);
- fputs(
-" --ftp-pasv\n"
-" (FTP) Use passive mode for the data connection. Passive is the\n"
-" internal default behavior, but using this option can be used to\n"
-" override a previous -P/-ftp-port option. (Added in 7.11.0)\n"
-"\n"
-" If this option is used several times, only the first one is\n"
-" used. Undoing an enforced passive really isn't doable but you\n"
-" must then instead enforce the correct -P, --ftp-port again.\n"
-"\n"
-, stdout);
- fputs(
-" Passive mode means that curl will try the EPSV command first and\n"
-" then PASV, unless --disable-epsv is used.\n"
-"\n"
-" --ftp-skip-pasv-ip\n"
-" (FTP) Tell curl to not use the IP address the server suggests in\n"
-" its response to curl's PASV command when curl connects the data\n"
-" connection. Instead curl will re-use the same IP address it\n"
-" already uses for the control connection. (Added in 7.14.2)\n"
-"\n"
-, stdout);
- fputs(
-" This option has no effect if PORT, EPRT or EPSV is used instead\n"
-" of PASV.\n"
-"\n"
-" --ftp-pret\n"
-" (FTP) Tell curl to send a PRET command before PASV (and EPSV).\n"
-" Certain FTP servers, mainly drftpd, require this non-standard\n"
-" command for directory listings as well as up and downloads in\n"
-" PASV mode. (Added in 7.20.x)\n"
-"\n"
-" --ftp-ssl-ccc\n"
-, stdout);
- fputs(
-" (FTP) Use CCC (Clear Command Channel) Shuts down the SSL/TLS\n"
-" layer after authenticating. The rest of the control channel com-\n"
-" munication will be unencrypted. This allows NAT routers to fol-\n"
-" low the FTP transaction. The default mode is passive. See --ftp-\n"
-" ssl-ccc-mode for other modes. (Added in 7.16.1)\n"
-"\n"
-" --ftp-ssl-ccc-mode [active/passive]\n"
-, stdout);
- fputs(
-" (FTP) Use CCC (Clear Command Channel) Sets the CCC mode. The\n"
-" passive mode will not initiate the shutdown, but instead wait\n"
-" for the server to do it, and will not reply to the shutdown from\n"
-" the server. The active mode initiates the shutdown and waits for\n"
-" a reply from the server. (Added in 7.16.2)\n"
-"\n"
-" --ftp-ssl-control\n"
-" (FTP) Require SSL/TLS for the FTP login, clear for transfer.\n"
-, stdout);
- fputs(
-" Allows secure authentication, but non-encrypted data transfers\n"
-" for efficiency. Fails the transfer if the server doesn't sup-\n"
-" port SSL/TLS. (Added in 7.16.0) that can still be used but will\n"
-" be removed in a future version.\n"
-"\n"
-" --form-string <name=string>\n"
-" (HTTP) Similar to --form except that the value string for the\n"
-" named parameter is used literally. Leading '@' and '<' charac-\n"
-, stdout);
- fputs(
-" ters, and the ';type=' string in the value have no special mean-\n"
-" ing. Use this in preference to --form if there's any possibility\n"
-" that the string value may accidentally trigger the '@' or '<'\n"
-" features of --form.\n"
-"\n"
-" -g, --globoff\n"
-" This option switches off the \"URL globbing parser\". When you set\n"
-" this option, you can specify URLs that contain the letters {}[]\n"
-, stdout);
- fputs(
-" without having them being interpreted by curl itself. Note that\n"
-" these letters are not normal legal URL contents but they should\n"
-" be encoded according to the URI standard.\n"
-"\n"
-" -G, --get\n"
-" When used, this option will make all data specified with -d,\n"
-" --data, --data-binary or --data-urlencode to be used in an HTTP\n"
-" GET request instead of the POST request that otherwise would be\n"
-, stdout);
- fputs(
-" used. The data will be appended to the URL with a '?' separator.\n"
-" If used in combination with -I, the POST data will instead be\n"
-" appended to the URL with a HEAD request.\n"
-"\n"
-" If this option is used several times, only the first one is\n"
-" used. This is because undoing a GET doesn't make sense, but you\n"
-" should then instead enforce the alternative method you prefer.\n"
-"\n"
-" -H, --header <header>\n"
-, stdout);
- fputs(
-" (HTTP) Extra header to include in the request when sending HTTP\n"
-" to a server. You may specify any number of extra headers. Note\n"
-" that if you should add a custom header that has the same name as\n"
-" one of the internal ones curl would use, your externally set\n"
-" header will be used instead of the internal one. This allows you\n"
-" to make even trickier stuff than curl would normally do. You\n"
-, stdout);
- fputs(
-" should not replace internally set headers without knowing per-\n"
-" fectly well what you're doing. Remove an internal header by giv-\n"
-" ing a replacement without content on the right side of the\n"
-" colon, as in: -H \"Host:\". If you send the custom header with no-\n"
-" value then its header must be terminated with a semicolon, such\n"
-" as -H \"X-Custom-Header;\" to send \"X-Custom-Header:\".\n"
-"\n"
-, stdout);
- fputs(
-" curl will make sure that each header you add/replace is sent\n"
-" with the proper end-of-line marker, you should thus not add that\n"
-" as a part of the header content: do not add newlines or carriage\n"
-" returns, they will only mess things up for you.\n"
-"\n"
-" See also the -A, --user-agent and -e, --referer options.\n"
-"\n"
-" Starting in 7.37.0, you need --proxy-header to send custom head-\n"
-" ers intended for a proxy.\n"
-"\n"
-, stdout);
- fputs(
-" Example:\n"
-"\n"
-" # curl -H \"X-First-Name: Joe\" http://192.168.0.1/\n"
-"\n"
-" This option can be used multiple times to add/replace/remove\n"
-" multiple headers.\n"
-"\n"
-" --hostpubmd5 <md5>\n"
-" (SCP/SFTP) Pass a string containing 32 hexadecimal digits. The\n"
-" string should be the 128 bit MD5 checksum of the remote host's\n"
-" public key, curl will refuse the connection with the host unless\n"
-, stdout);
- fputs(
-" the md5sums match. (Added in 7.17.1)\n"
-"\n"
-" --ignore-content-length\n"
-" (HTTP) Ignore the Content-Length header. This is particularly\n"
-" useful for servers running Apache 1.x, which will report incor-\n"
-" rect Content-Length for files larger than 2 gigabytes.\n"
-"\n"
-" -i, --include\n"
-" (HTTP) Include the HTTP-header in the output. The HTTP-header\n"
-" includes things like server-name, date of the document, HTTP-\n"
-, stdout);
- fputs(
-" version and more...\n"
-"\n"
-" -I, --head\n"
-" (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature\n"
-" the command HEAD which this uses to get nothing but the header\n"
-" of a document. When used on an FTP or FILE file, curl displays\n"
-" the file size and last modification time only.\n"
-"\n"
-" --interface <name>\n"
-" Perform an operation using a specified interface. You can enter\n"
-, stdout);
- fputs(
-" interface name, IP address or host name. An example could look\n"
-" like:\n"
-"\n"
-" curl --interface eth0:1 http://www.netscape.com/\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -j, --junk-session-cookies\n"
-" (HTTP) When curl is told to read cookies from a given file, this\n"
-" option will make it discard all \"session cookies\". This will\n"
-, stdout);
- fputs(
-" basically have the same effect as if a new session is started.\n"
-" Typical browsers always discard session cookies when they're\n"
-" closed down.\n"
-"\n"
-" -J, --remote-header-name\n"
-" (HTTP) This option tells the -O, --remote-name option to use the\n"
-" server-specified Content-Disposition filename instead of\n"
-" extracting a filename from the URL.\n"
-"\n"
-, stdout);
- fputs(
-" There's no attempt to decode %-sequences (yet) in the provided\n"
-" file name, so this option may provide you with rather unexpected\n"
-" file names.\n"
-"\n"
-" -k, --insecure\n"
-" (SSL) This option explicitly allows curl to perform \"insecure\"\n"
-" SSL connections and transfers. All SSL connections are attempted\n"
-" to be made secure by using the CA certificate bundle installed\n"
-, stdout);
- fputs(
-" by default. This makes all connections considered \"insecure\"\n"
-" fail unless -k, --insecure is used.\n"
-"\n"
-" See this online resource for further details:\n"
-" http://curl.haxx.se/docs/sslcerts.html\n"
-"\n"
-" -K, --config <config file>\n"
-" Specify which config file to read curl arguments from. The con-\n"
-" fig file is a text file in which command line arguments can be\n"
-, stdout);
- fputs(
-" written which then will be used as if they were written on the\n"
-" actual command line.\n"
-"\n"
-" Options and their parameters must be specified on the same con-\n"
-" fig file line, separated by whitespace, colon, or the equals\n"
-" sign. Long option names can optionally be given in the config\n"
-" file without the initial double dashes and if so, the colon or\n"
-, stdout);
- fputs(
-" equals characters can be used as separators. If the option is\n"
-" specified with one or two dashes, there can be no colon or\n"
-" equals character between the option and its parameter.\n"
-"\n"
-" If the parameter is to contain whitespace, the parameter must be\n"
-" enclosed within quotes. Within double quotes, the following\n"
-" escape sequences are available: \\\\, \\\", \\t, \\n, \\r and \\v. A\n"
-, stdout);
- fputs(
-" backslash preceding any other letter is ignored. If the first\n"
-" column of a config line is a '#' character, the rest of the line\n"
-" will be treated as a comment. Only write one option per physical\n"
-" line in the config file.\n"
-"\n"
-" Specify the filename to -K, --config as '-' to make curl read\n"
-" the file from stdin.\n"
-"\n"
-" Note that to be able to specify a URL in the config file, you\n"
-, stdout);
- fputs(
-" need to specify it using the --url option, and not by simply\n"
-" writing the URL on its own line. So, it could look similar to\n"
-" this:\n"
-"\n"
-" url = \"http://curl.haxx.se/docs/\"\n"
-"\n"
-" When curl is invoked, it always (unless -q is used) checks for a\n"
-" default config file and uses it if found. The default config\n"
-" file is checked for in the following places in this order:\n"
-"\n"
-, stdout);
- fputs(
-" 1) curl tries to find the \"home dir\": It first checks for the\n"
-" CURL_HOME and then the HOME environment variables. Failing that,\n"
-" it uses getpwuid() on UNIX-like systems (which returns the home\n"
-" dir given the current user in your system). On Windows, it then\n"
-" checks for the APPDATA variable, or as a last resort the '%USER-\n"
-" PROFILE%\\Application Data'.\n"
-"\n"
-, stdout);
- fputs(
-" 2) On windows, if there is no _curlrc file in the home dir, it\n"
-" checks for one in the same dir the curl executable is placed. On\n"
-" UNIX-like systems, it will simply try to load .curlrc from the\n"
-" determined home dir.\n"
-"\n"
-" # --- Example file ---\n"
-" # this is a comment\n"
-" url = \"curl.haxx.se\"\n"
-" output = \"curlhere.html\"\n"
-" user-agent = \"superagent/1.0\"\n"
-"\n"
-, stdout);
- fputs(
-" # and fetch another URL too\n"
-" url = \"curl.haxx.se/docs/manpage.html\"\n"
-" -O\n"
-" referer = \"http://nowhereatall.com/\"\n"
-" # --- End of example file ---\n"
-"\n"
-" This option can be used multiple times to load multiple config\n"
-" files.\n"
-"\n"
-" --keepalive-time <seconds>\n"
-" This option sets the time a connection needs to remain idle\n"
-, stdout);
- fputs(
-" before sending keepalive probes and the time between individual\n"
-" keepalive probes. It is currently effective on operating systems\n"
-" offering the TCP_KEEPIDLE and TCP_KEEPINTVL socket options\n"
-" (meaning Linux, recent AIX, HP-UX and more). This option has no\n"
-" effect if --no-keepalive is used. (Added in 7.18.0)\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-, stdout);
- fputs(
-" If unspecified, the option defaults to 60 seconds.\n"
-"\n"
-" --key <key>\n"
-" (SSL/SSH) Private key file name. Allows you to provide your pri-\n"
-" vate key in this separate file.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --key-type <type>\n"
-" (SSL) Private key file type. Specify which type your --key pro-\n"
-" vided private key is. DER, PEM, and ENG are supported. If not\n"
-, stdout);
- fputs(
-" specified, PEM is assumed.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --krb <level>\n"
-" (FTP) Enable Kerberos authentication and use. The level must be\n"
-" entered and should be one of 'clear', 'safe', 'confidential', or\n"
-" 'private'. Should you use a level that is not one of these,\n"
-" 'private' will instead be used.\n"
-"\n"
-, stdout);
- fputs(
-" This option requires a library built with kerberos4 support.\n"
-" This is not very common. Use -V, --version to see if your curl\n"
-" supports it.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -l, --list-only\n"
-" (FTP) When listing an FTP directory, this switch forces a name-\n"
-" only view. This is especially useful if the user wants to\n"
-, stdout);
- fputs(
-" machine-parse the contents of an FTP directory since the normal\n"
-" directory view doesn't use a standard look or format. When used\n"
-" like this, the option causes a NLST command to be sent to the\n"
-" server instead of LIST.\n"
-"\n"
-" Note: Some FTP servers list only files in their response to\n"
-" NLST; they do not include sub-directories and symbolic links.\n"
-"\n"
-, stdout);
- fputs(
-" (POP3) When retrieving a specific email from POP3, this switch\n"
-" forces a LIST command to be performed instead of RETR. This is\n"
-" particularly useful if the user wants to see if a specific mes-\n"
-" sage id exists on the server and what size it is.\n"
-"\n"
-" Note: When combined with -X, --request <command>, this option\n"
-" can be used to send an UIDL command instead, so the user may use\n"
-, stdout);
- fputs(
-" the email's unique identifier rather than it's message id to\n"
-" make the request. (Added in 7.21.5)\n"
-"\n"
-" -L, --location\n"
-" (HTTP/HTTPS) If the server reports that the requested page has\n"
-" moved to a different location (indicated with a Location: header\n"
-" and a 3XX response code), this option will make curl redo the\n"
-" request on the new place. If used together with -i, --include or\n"
-, stdout);
- fputs(
-" -I, --head, headers from all requested pages will be shown. When\n"
-" authentication is used, curl only sends its credentials to the\n"
-" initial host. If a redirect takes curl to a different host, it\n"
-" won't be able to intercept the user+password. See also --loca-\n"
-" tion-trusted on how to change this. You can limit the amount of\n"
-" redirects to follow by using the --max-redirs option.\n"
-"\n"
-, stdout);
- fputs(
-" When curl follows a redirect and the request is not a plain GET\n"
-" (for example POST or PUT), it will do the following request with\n"
-" a GET if the HTTP response was 301, 302, or 303. If the response\n"
-" code was any other 3xx code, curl will re-send the following\n"
-" request using the same unmodified method.\n"
-"\n"
-" You can tell curl to not change the non-GET request method to\n"
-, stdout);
- fputs(
-" GET after a 30x response by using the dedicated options for\n"
-" that: --post301, --post302 and -post303.\n"
-"\n"
-" --libcurl <file>\n"
-" Append this option to any ordinary curl command line, and you\n"
-" will get a libcurl-using C source code written to the file that\n"
-" does the equivalent of what your command-line operation does!\n"
-"\n"
-" If this option is used several times, the last given file name\n"
-, stdout);
- fputs(
-" will be used. (Added in 7.16.1)\n"
-"\n"
-" --limit-rate <speed>\n"
-" Specify the maximum transfer rate you want curl to use - for\n"
-" both downloads and uploads. This feature is useful if you have a\n"
-" limited pipe and you'd like your transfer not to use your entire\n"
-" bandwidth. To make it slower than it otherwise would be.\n"
-"\n"
-" The given speed is measured in bytes/second, unless a suffix is\n"
-, stdout);
- fputs(
-" appended. Appending 'k' or 'K' will count the number as kilo-\n"
-" bytes, 'm' or M' makes it megabytes, while 'g' or 'G' makes it\n"
-" gigabytes. Examples: 200K, 3m and 1G.\n"
-"\n"
-" The given rate is the average speed counted during the entire\n"
-" transfer. It means that curl might use higher transfer speeds in\n"
-" short bursts, but over time it uses no more than the given rate.\n"
-, stdout);
- fputs(
-" If you also use the -Y, --speed-limit option, that option will\n"
-" take precedence and might cripple the rate-limiting slightly, to\n"
-" help keeping the speed-limit logic working.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --local-port <num>[-num]\n"
-" Set a preferred number or range of local port numbers to use for\n"
-" the connection(s). Note that port numbers by nature are a\n"
-, stdout);
- fputs(
-" scarce resource that will be busy at times so setting this range\n"
-" to something too narrow might cause unnecessary connection setup\n"
-" failures. (Added in 7.15.2)\n"
-"\n"
-" --location-trusted\n"
-" (HTTP/HTTPS) Like -L, --location, but will allow sending the\n"
-" name + password to all hosts that the site may redirect to. This\n"
-" may or may not introduce a security breach if the site redirects\n"
-, stdout);
- fputs(
-" you to a site to which you'll send your authentication info\n"
-" (which is plaintext in the case of HTTP Basic authentication).\n"
-"\n"
-" -m, --max-time <seconds>\n"
-" Maximum time in seconds that you allow the whole operation to\n"
-" take. This is useful for preventing your batch jobs from hang-\n"
-" ing for hours due to slow networks or links going down. Since\n"
-, stdout);
- fputs(
-" 7.32.0, this option accepts decimal values, but the actual time-\n"
-" out will decrease in accuracy as the specified timeout increases\n"
-" in decimal precision. See also the --connect-timeout option.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --login-options <options>\n"
-" Specify the login options to use during server authentication.\n"
-"\n"
-, stdout);
- fputs(
-" You can use the login options to specify protocol specific\n"
-" options that may be used during authentication. At present only\n"
-" IMAP, POP3 and SMTP support login options. For more information\n"
-" about the login options please see RFC 2384, RFC 5092 and IETF\n"
-" draft draft-earhart-url-smtp-00.txt (Added in 7.34.0).\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --mail-auth <address>\n"
-, stdout);
- fputs(
-" (SMTP) Specify a single address. This will be used to specify\n"
-" the authentication address (identity) of a submitted message\n"
-" that is being relayed to another server.\n"
-"\n"
-" (Added in 7.25.0)\n"
-"\n"
-" --mail-from <address>\n"
-" (SMTP) Specify a single address that the given mail should get\n"
-" sent from.\n"
-"\n"
-" (Added in 7.20.0)\n"
-"\n"
-" --max-filesize <bytes>\n"
-, stdout);
- fputs(
-" Specify the maximum size (in bytes) of a file to download. If\n"
-" the file requested is larger than this value, the transfer will\n"
-" not start and curl will return with exit code 63.\n"
-"\n"
-" NOTE: The file size is not always known prior to download, and\n"
-" for such files this option has no effect even if the file trans-\n"
-" fer ends up being larger than this given limit. This concerns\n"
-, stdout);
- fputs(
-" both FTP and HTTP transfers.\n"
-"\n"
-" --mail-rcpt <address>\n"
-" (SMTP) Specify a single address, user name or mailing list name.\n"
-" When performing a mail transfer, the recipient should specify a\n"
-" valid email address to send the mail to. (Added in 7.20.0)\n"
-"\n"
-" When performing an address verification (VRFY command), the\n"
-" recipient should be specified as the user name or user name and\n"
-, stdout);
- fputs(
-" domain (as per Section 3.5 of RFC5321). (Added in 7.34.0)\n"
-"\n"
-" When performing a mailing list expand (EXPN command), the recip-\n"
-" ient should be specified using the mailing list name, such as\n"
-" \"Friends\" or \"London-Office\". (Added in 7.34.0)\n"
-"\n"
-" --max-redirs <num>\n"
-" Set maximum number of redirection-followings allowed. If -L,\n"
-" --location is used, this option can be used to prevent curl from\n"
-, stdout);
- fputs(
-" following redirections \"in absurdum\". By default, the limit is\n"
-" set to 50 redirections. Set this option to -1 to make it limit-\n"
-" less.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --metalink\n"
-" This option can tell curl to parse and process a given URI as\n"
-" Metalink file (both version 3 and 4 (RFC 5854) are supported)\n"
-, stdout);
- fputs(
-" and make use of the mirrors listed within for failover if there\n"
-" are errors (such as the file or server not being available). It\n"
-" will also verify the hash of the file after the download com-\n"
-" pletes. The Metalink file itself is downloaded and processed in\n"
-" memory and not stored in the local file system.\n"
-"\n"
-" Example to use a remote Metalink file:\n"
-"\n"
-, stdout);
- fputs(
-" curl --metalink http://www.example.com/example.metalink\n"
-"\n"
-" To use a Metalink file in the local file system, use FILE proto-\n"
-" col (file://):\n"
-"\n"
-" curl --metalink file://example.metalink\n"
-"\n"
-" Please note that if FILE protocol is disabled, there is no way\n"
-" to use a local Metalink file at the time of this writing. Also\n"
-" note that if --metalink and --include are used together,\n"
-, stdout);
- fputs(
-" --include will be ignored. This is because including headers in\n"
-" the response will break Metalink parser and if the headers are\n"
-" included in the file described in Metalink file, hash check will\n"
-" fail.\n"
-"\n"
-" (Added in 7.27.0, if built against the libmetalink library.)\n"
-"\n"
-" -n, --netrc\n"
-" Makes curl scan the .netrc (_netrc on Windows) file in the\n"
-, stdout);
- fputs(
-" user's home directory for login name and password. This is typi-\n"
-" cally used for FTP on UNIX. If used with HTTP, curl will enable\n"
-" user authentication. See netrc(4) or ftp(1) for details on the\n"
-" file format. Curl will not complain if that file doesn't have\n"
-" the right permissions (it should not be either world- or group-\n"
-" readable). The environment variable \"HOME\" is used to find the\n"
-, stdout);
- fputs(
-" home directory.\n"
-"\n"
-" A quick and very simple example of how to setup a .netrc to\n"
-" allow curl to FTP to the machine host.domain.com with user name\n"
-" 'myself' and password 'secret' should look similar to:\n"
-"\n"
-" machine host.domain.com login myself password secret\n"
-"\n"
-" -N, --no-buffer\n"
-" Disables the buffering of the output stream. In normal work sit-\n"
-, stdout);
- fputs(
-" uations, curl will use a standard buffered output stream that\n"
-" will have the effect that it will output the data in chunks, not\n"
-" necessarily exactly when the data arrives. Using this option\n"
-" will disable that buffering.\n"
-"\n"
-" Note that this is the negated option name documented. You can\n"
-" thus use --buffer to enforce the buffering.\n"
-"\n"
-" --netrc-file\n"
-, stdout);
- fputs(
-" This option is similar to --netrc, except that you provide the\n"
-" path (absolute or relative) to the netrc file that Curl should\n"
-" use. You can only specify one netrc file per invocation. If\n"
-" several --netrc-file options are provided, only the last one\n"
-" will be used. (Added in 7.21.5)\n"
-"\n"
-" This option overrides any use of --netrc as they are mutually\n"
-, stdout);
- fputs(
-" exclusive. It will also abide by --netrc-optional if specified.\n"
-"\n"
-" --netrc-optional\n"
-" Very similar to --netrc, but this option makes the .netrc usage\n"
-" optional and not mandatory as the --netrc option does.\n"
-"\n"
-" --negotiate\n"
-" (HTTP) Enables Negotiate (SPNEGO) authentication.\n"
-"\n"
-" If you want to enable Negotiate (SPNEGO) for proxy authentica-\n"
-" tion, then use --proxy-negotiate.\n"
-"\n"
-, stdout);
- fputs(
-" This option requires a library built with GSS-API or SSPI sup-\n"
-" port. Use -V, --version to see if your curl supports GSS-\n"
-" API/SSPI and SPNEGO.\n"
-"\n"
-" When using this option, you must also provide a fake -u, --user\n"
-" option to activate the authentication code properly. Sending a\n"
-" '-u :' is enough as the user name and password from the -u\n"
-" option aren't actually used.\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, only the first one is\n"
-" used.\n"
-"\n"
-" --no-keepalive\n"
-" Disables the use of keepalive messages on the TCP connection, as\n"
-" by default curl enables them.\n"
-"\n"
-" Note that this is the negated option name documented. You can\n"
-" thus use --keepalive to enforce keepalive.\n"
-"\n"
-" --no-sessionid\n"
-" (SSL) Disable curl's use of SSL session-ID caching. By default\n"
-, stdout);
- fputs(
-" all transfers are done using the cache. Note that while nothing\n"
-" should ever get hurt by attempting to reuse SSL session-IDs,\n"
-" there seem to be broken SSL implementations in the wild that may\n"
-" require you to disable this in order for you to succeed. (Added\n"
-" in 7.16.0)\n"
-"\n"
-" Note that this is the negated option name documented. You can\n"
-" thus use --sessionid to enforce session-ID caching.\n"
-"\n"
-, stdout);
- fputs(
-" --noproxy <no-proxy-list>\n"
-" Comma-separated list of hosts which do not use a proxy, if one\n"
-" is specified. The only wildcard is a single * character, which\n"
-" matches all hosts, and effectively disables the proxy. Each name\n"
-" in this list is matched as either a domain which contains the\n"
-" hostname, or the hostname itself. For example, local.com would\n"
-, stdout);
- fputs(
-" match local.com, local.com:80, and www.local.com, but not\n"
-" www.notlocal.com. (Added in 7.19.4).\n"
-"\n"
-" --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication\n"
-" method was designed by Microsoft and is used by IIS web servers.\n"
-" It is a proprietary protocol, reverse-engineered by clever peo-\n"
-" ple and implemented in curl based on their efforts. This kind of\n"
-, stdout);
- fputs(
-" behavior should not be endorsed, you should encourage everyone\n"
-" who uses NTLM to switch to a public and documented authentica-\n"
-" tion method instead, such as Digest.\n"
-"\n"
-" If you want to enable NTLM for your proxy authentication, then\n"
-" use --proxy-ntlm.\n"
-"\n"
-" This option requires a library built with SSL support. Use -V,\n"
-" --version to see if your curl supports NTLM.\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, only the first one is\n"
-" used.\n"
-"\n"
-" -o, --output <file>\n"
-" Write output to <file> instead of stdout. If you are using {} or\n"
-" [] to fetch multiple documents, you can use '#' followed by a\n"
-" number in the <file> specifier. That variable will be replaced\n"
-" with the current string for the URL being fetched. Like in:\n"
-"\n"
-, stdout);
- fputs(
-" curl http://{one,two}.site.com -o \"file_#1.txt\"\n"
-"\n"
-" or use several variables like:\n"
-"\n"
-" curl http://{site,host}.host[1-5].com -o \"#1_#2\"\n"
-"\n"
-" You may use this option as many times as the number of URLs you\n"
-" have.\n"
-"\n"
-" See also the --create-dirs option to create the local directo-\n"
-" ries dynamically. Specifying the output as '-' (a single dash)\n"
-" will force the output to be done to stdout.\n"
-"\n"
-, stdout);
- fputs(
-" -O, --remote-name\n"
-" Write output to a local file named like the remote file we get.\n"
-" (Only the file part of the remote file is used, the path is cut\n"
-" off.)\n"
-"\n"
-" The remote file name to use for saving is extracted from the\n"
-" given URL, nothing else.\n"
-"\n"
-" Consequentially, the file will be saved in the current working\n"
-" directory. If you want the file saved in a different directory,\n"
-, stdout);
- fputs(
-" make sure you change current working directory before you invoke\n"
-" curl with the -O, --remote-name flag!\n"
-"\n"
-" There is no URL decoding done on the file name. If it has %20 or\n"
-" other URL encoded parts of the name, they will end up as-is as\n"
-" file name.\n"
-"\n"
-" You may use this option as many times as the number of URLs you\n"
-" have.\n"
-"\n"
-" --oauth2-bearer\n"
-, stdout);
- fputs(
-" (IMAP, POP3, SMTP) Specify the Bearer Token for OAUTH 2.0 server\n"
-" authentication. The Bearer Token is used in conjunction with the\n"
-" user name which can be specified as part of the --url or -u,\n"
-" --user options.\n"
-"\n"
-" The Bearer Token and user name are formatted according to RFC\n"
-" 6750.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --proxy-header <header>\n"
-, stdout);
- fputs(
-" (HTTP) Extra header to include in the request when sending HTTP\n"
-" to a proxy. You may specify any number of extra headers. This is\n"
-" the equivalent option to -H, --header but is for proxy communi-\n"
-" cation only like in CONNECT requests when you want a separate\n"
-" header sent to the proxy to what is sent to the actual remote\n"
-" host.\n"
-"\n"
-" curl will make sure that each header you add/replace is sent\n"
-, stdout);
- fputs(
-" with the proper end-of-line marker, you should thus not add that\n"
-" as a part of the header content: do not add newlines or carriage\n"
-" returns, they will only mess things up for you.\n"
-"\n"
-" Headers specified with this option will not be included in\n"
-" requests that curl knows will not be sent to a proxy.\n"
-"\n"
-" This option can be used multiple times to add/replace/remove\n"
-" multiple headers.\n"
-, stdout);
- fputs(
-" (Added in 7.37.0)\n"
-" -p, --proxytunnel\n"
-" When an HTTP proxy is used (-x, --proxy), this option will cause\n"
-" non-HTTP protocols to attempt to tunnel through the proxy\n"
-" instead of merely using it to do HTTP-like operations. The tun-\n"
-" nel approach is made with the HTTP proxy CONNECT request and\n"
-" requires that the proxy allows direct connect to the remote port\n"
-, stdout);
- fputs(
-" number curl wants to tunnel through to.\n"
-"\n"
-" -P, --ftp-port <address>\n"
-" (FTP) Reverses the default initiator/listener roles when con-\n"
-" necting with FTP. This switch makes curl use active mode. In\n"
-" practice, curl then tells the server to connect back to the\n"
-" client's specified address and port, while passive mode asks the\n"
-" server to setup an IP address and port for it to connect to.\n"
-, stdout);
- fputs(
-" <address> should be one of:\n"
-"\n"
-" interface\n"
-" i.e \"eth0\" to specify which interface's IP address you\n"
-" want to use (Unix only)\n"
-"\n"
-" IP address\n"
-" i.e \"192.168.10.1\" to specify the exact IP address\n"
-"\n"
-" host name\n"
-" i.e \"my.host.domain\" to specify the machine\n"
-"\n"
-" - make curl pick the same IP address that is already used\n"
-, stdout);
- fputs(
-" for the control connection\n"
-"\n"
-" If this option is used several times, the last one will be used. Dis-\n"
-" able the use of PORT with --ftp-pasv. Disable the attempt to use the\n"
-" EPRT command instead of PORT by using --disable-eprt. EPRT is really\n"
-" PORT++.\n"
-"\n"
-" Starting in 7.19.5, you can append \":[start]-[end]\" to the right of the\n"
-" address, to tell curl what TCP port range to use. That means you spec-\n"
-, stdout);
- fputs(
-" ify a port range, from a lower to a higher number. A single number\n"
-" works as well, but do note that it increases the risk of failure since\n"
-" the port may not be available.\n"
-"\n"
-" --pass <phrase>\n"
-" (SSL/SSH) Passphrase for the private key\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --post301\n"
-" (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert\n"
-, stdout);
- fputs(
-" POST requests into GET requests when following a 301 redirect-\n"
-" ion. The non-RFC behaviour is ubiquitous in web browsers, so\n"
-" curl does the conversion by default to maintain consistency.\n"
-" However, a server may require a POST to remain a POST after such\n"
-" a redirection. This option is meaningful only when using -L,\n"
-" --location (Added in 7.17.1)\n"
-"\n"
-" --post302\n"
-, stdout);
- fputs(
-" (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert\n"
-" POST requests into GET requests when following a 302 redirect-\n"
-" ion. The non-RFC behaviour is ubiquitous in web browsers, so\n"
-" curl does the conversion by default to maintain consistency.\n"
-" However, a server may require a POST to remain a POST after such\n"
-" a redirection. This option is meaningful only when using -L,\n"
-, stdout);
- fputs(
-" --location (Added in 7.19.1)\n"
-"\n"
-" --post303\n"
-" (HTTP) Tells curl to respect RFC 2616/10.3.2 and not convert\n"
-" POST requests into GET requests when following a 303 redirect-\n"
-" ion. The non-RFC behaviour is ubiquitous in web browsers, so\n"
-" curl does the conversion by default to maintain consistency.\n"
-" However, a server may require a POST to remain a POST after such\n"
-, stdout);
- fputs(
-" a redirection. This option is meaningful only when using -L,\n"
-" --location (Added in 7.26.0)\n"
-"\n"
-" --proto <protocols>\n"
-" Tells curl to use the listed protocols for its initial\n"
-" retrieval. Protocols are evaluated left to right, are comma sep-\n"
-" arated, and are each a protocol name or 'all', optionally pre-\n"
-" fixed by zero or more modifiers. Available modifiers are:\n"
-"\n"
-, stdout);
- fputs(
-" + Permit this protocol in addition to protocols already permit-\n"
-" ted (this is the default if no modifier is used).\n"
-"\n"
-" - Deny this protocol, removing it from the list of protocols\n"
-" already permitted.\n"
-"\n"
-" = Permit only this protocol (ignoring the list already permit-\n"
-" ted), though subject to later modification by subsequent\n"
-" entries in the comma separated list.\n"
-"\n"
-, stdout);
- fputs(
-" For example:\n"
-"\n"
-" --proto -ftps uses the default protocols, but disables ftps\n"
-"\n"
-" --proto -all,https,+http\n"
-" only enables http and https\n"
-"\n"
-" --proto =http,https\n"
-" also only enables http and https\n"
-"\n"
-" Unknown protocols produce a warning. This allows scripts to\n"
-" safely rely on being able to disable potentially dangerous pro-\n"
-, stdout);
- fputs(
-" tocols, without relying upon support for that protocol being\n"
-" built into curl to avoid an error.\n"
-"\n"
-" This option can be used multiple times, in which case the effect\n"
-" is the same as concatenating the protocols into one instance of\n"
-" the option.\n"
-"\n"
-" (Added in 7.20.2)\n"
-"\n"
-" --proto-redir <protocols>\n"
-" Tells curl to use the listed protocols after a redirect. See\n"
-, stdout);
- fputs(
-" --proto for how protocols are represented.\n"
-"\n"
-" (Added in 7.20.2)\n"
-"\n"
-" --proxy-anyauth\n"
-" Tells curl to pick a suitable authentication method when commu-\n"
-" nicating with the given proxy. This might cause an extra\n"
-" request/response round-trip. (Added in 7.13.2)\n"
-"\n"
-" --proxy-basic\n"
-" Tells curl to use HTTP Basic authentication when communicating\n"
-, stdout);
- fputs(
-" with the given proxy. Use --basic for enabling HTTP Basic with a\n"
-" remote host. Basic is the default authentication method curl\n"
-" uses with proxies.\n"
-"\n"
-" --proxy-digest\n"
-" Tells curl to use HTTP Digest authentication when communicating\n"
-" with the given proxy. Use --digest for enabling HTTP Digest with\n"
-" a remote host.\n"
-"\n"
-" --proxy-negotiate\n"
-, stdout);
- fputs(
-" Tells curl to use HTTP Negotiate (SPNEGO) authentication when\n"
-" communicating with the given proxy. Use --negotiate for enabling\n"
-" HTTP Negotiate (SPNEGO) with a remote host. (Added in 7.17.1)\n"
-"\n"
-" --proxy-ntlm\n"
-" Tells curl to use HTTP NTLM authentication when communicating\n"
-" with the given proxy. Use --ntlm for enabling NTLM with a remote\n"
-" host.\n"
-"\n"
-" --proxy1.0 <proxyhost[:port]>\n"
-, stdout);
- fputs(
-" Use the specified HTTP 1.0 proxy. If the port number is not\n"
-" specified, it is assumed at port 1080.\n"
-"\n"
-" The only difference between this and the HTTP proxy option (-x,\n"
-" --proxy), is that attempts to use CONNECT through the proxy will\n"
-" specify an HTTP 1.0 protocol instead of the default HTTP 1.1.\n"
-"\n"
-" --pubkey <key>\n"
-" (SSH) Public key file name. Allows you to provide your public\n"
-, stdout);
- fputs(
-" key in this separate file.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -q If used as the first parameter on the command line, the curlrc\n"
-" config file will not be read and used. See the -K, --config for\n"
-" details on the default config file search path.\n"
-"\n"
-" -Q, --quote <command>\n"
-" (FTP/SFTP) Send an arbitrary command to the remote FTP or SFTP\n"
-, stdout);
- fputs(
-" server. Quote commands are sent BEFORE the transfer takes place\n"
-" (just after the initial PWD command in an FTP transfer, to be\n"
-" exact). To make commands take place after a successful transfer,\n"
-" prefix them with a dash '-'. To make commands be sent after\n"
-" curl has changed the working directory, just before the transfer\n"
-" command(s), prefix the command with a '+' (this is only sup-\n"
-, stdout);
- fputs(
-" ported for FTP). You may specify any number of commands. If the\n"
-" server returns failure for one of the commands, the entire oper-\n"
-" ation will be aborted. You must send syntactically correct FTP\n"
-" commands as RFC 959 defines to FTP servers, or one of the com-\n"
-" mands listed below to SFTP servers. This option can be used\n"
-" multiple times. When speaking to an FTP server, prefix the com-\n"
-, stdout);
- fputs(
-" mand with an asterisk (*) to make curl continue even if the com-\n"
-" mand fails as by default curl will stop at first failure.\n"
-"\n"
-" SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP\n"
-" quote commands itself before sending them to the server. File\n"
-" names may be quoted shell-style to embed spaces or special char-\n"
-" acters. Following is the list of all supported SFTP quote com-\n"
-" mands:\n"
-"\n"
-, stdout);
- fputs(
-" chgrp group file\n"
-" The chgrp command sets the group ID of the file named by\n"
-" the file operand to the group ID specified by the group\n"
-" operand. The group operand is a decimal integer group ID.\n"
-"\n"
-" chmod mode file\n"
-" The chmod command modifies the file mode bits of the\n"
-" specified file. The mode operand is an octal integer mode\n"
-" number.\n"
-"\n"
-, stdout);
- fputs(
-" chown user file\n"
-" The chown command sets the owner of the file named by the\n"
-" file operand to the user ID specified by the user oper-\n"
-" and. The user operand is a decimal integer user ID.\n"
-"\n"
-" ln source_file target_file\n"
-" The ln and symlink commands create a symbolic link at the\n"
-" target_file location pointing to the source_file loca-\n"
-" tion.\n"
-"\n"
-, stdout);
- fputs(
-" mkdir directory_name\n"
-" The mkdir command creates the directory named by the\n"
-" directory_name operand.\n"
-"\n"
-" pwd The pwd command returns the absolute pathname of the cur-\n"
-" rent working directory.\n"
-"\n"
-" rename source target\n"
-" The rename command renames the file or directory named by\n"
-" the source operand to the destination path named by the\n"
-, stdout);
- fputs(
-" target operand.\n"
-"\n"
-" rm file\n"
-" The rm command removes the file specified by the file op-\n"
-" erand.\n"
-"\n"
-" rmdir directory\n"
-" The rmdir command removes the directory entry specified\n"
-" by the directory operand, provided it is empty.\n"
-"\n"
-" symlink source_file target_file\n"
-" See ln.\n"
-"\n"
-" -r, --range <range>\n"
-, stdout);
- fputs(
-" (HTTP/FTP/SFTP/FILE) Retrieve a byte range (i.e a partial docu-\n"
-" ment) from a HTTP/1.1, FTP or SFTP server or a local FILE.\n"
-" Ranges can be specified in a number of ways.\n"
-"\n"
-" 0-499 specifies the first 500 bytes\n"
-"\n"
-" 500-999 specifies the second 500 bytes\n"
-"\n"
-" -500 specifies the last 500 bytes\n"
-"\n"
-" 9500- specifies the bytes from offset 9500 and forward\n"
-"\n"
-, stdout);
- fputs(
-" 0-0,-1 specifies the first and last byte only(*)(H)\n"
-"\n"
-" 500-700,600-799\n"
-" specifies 300 bytes from offset 500(H)\n"
-"\n"
-" 100-199,500-599\n"
-" specifies two separate 100-byte ranges(*)(H)\n"
-"\n"
-" (*) = NOTE that this will cause the server to reply with a multipart\n"
-" response!\n"
-"\n"
-" Only digit characters (0-9) are valid in the 'start' and 'stop' fields\n"
-, stdout);
- fputs(
-" of the 'start-stop' range syntax. If a non-digit character is given in\n"
-" the range, the server's response will be unspecified, depending on the\n"
-" server's configuration.\n"
-"\n"
-" You should also be aware that many HTTP/1.1 servers do not have this\n"
-" feature enabled, so that when you attempt to get a range, you'll\n"
-" instead get the whole document.\n"
-"\n"
-" FTP and SFTP range downloads only support the simple 'start-stop' syn-\n"
-, stdout);
- fputs(
-" tax (optionally with one of the numbers omitted). FTP use depends on\n"
-" the extended FTP command SIZE.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -R, --remote-time\n"
-" When used, this will make curl attempt to figure out the time-\n"
-" stamp of the remote file, and if that is available make the\n"
-" local file get that same timestamp.\n"
-"\n"
-" --random-file <file>\n"
-, stdout);
- fputs(
-" (SSL) Specify the path name to file containing what will be con-\n"
-" sidered as random data. The data is used to seed the random\n"
-" engine for SSL connections. See also the --egd-file option.\n"
-"\n"
-" --raw (HTTP) When used, it disables all internal HTTP decoding of con-\n"
-" tent or transfer encodings and instead makes them passed on\n"
-" unaltered, raw. (Added in 7.16.2)\n"
-"\n"
-" --remote-name-all\n"
-, stdout);
- fputs(
-" This option changes the default action for all given URLs to be\n"
-" dealt with as if -O, --remote-name were used for each one. So if\n"
-" you want to disable that for a specific URL after --remote-name-\n"
-" all has been used, you must use \"-o -\" or --no-remote-name.\n"
-" (Added in 7.19.0)\n"
-"\n"
-" --resolve <host:port:address>\n"
-" Provide a custom address for a specific host and port pair.\n"
-, stdout);
- fputs(
-" Using this, you can make the curl requests(s) use a specified\n"
-" address and prevent the otherwise normally resolved address to\n"
-" be used. Consider it a sort of /etc/hosts alternative provided\n"
-" on the command line. The port number should be the number used\n"
-" for the specific protocol the host will be used for. It means\n"
-" you need several entries if you want to provide address for the\n"
-, stdout);
- fputs(
-" same host but different ports.\n"
-"\n"
-" This option can be used many times to add many host names to\n"
-" resolve.\n"
-"\n"
-" (Added in 7.21.3)\n"
-"\n"
-" --retry <num>\n"
-" If a transient error is returned when curl tries to perform a\n"
-" transfer, it will retry this number of times before giving up.\n"
-" Setting the number to 0 makes curl do no retries (which is the\n"
-, stdout);
- fputs(
-" default). Transient error means either: a timeout, an FTP 4xx\n"
-" response code or an HTTP 5xx response code.\n"
-"\n"
-" When curl is about to retry a transfer, it will first wait one\n"
-" second and then for all forthcoming retries it will double the\n"
-" waiting time until it reaches 10 minutes which then will be the\n"
-" delay between the rest of the retries. By using --retry-delay\n"
-, stdout);
- fputs(
-" you disable this exponential backoff algorithm. See also\n"
-" --retry-max-time to limit the total time allowed for retries.\n"
-" (Added in 7.12.3)\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --retry-delay <seconds>\n"
-" Make curl sleep this amount of time before each retry when a\n"
-" transfer has failed with a transient error (it changes the\n"
-, stdout);
- fputs(
-" default backoff time algorithm between retries). This option is\n"
-" only interesting if --retry is also used. Setting this delay to\n"
-" zero will make curl use the default backoff time. (Added in\n"
-" 7.12.3)\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --retry-max-time <seconds>\n"
-" The retry timer is reset before the first transfer attempt.\n"
-, stdout);
- fputs(
-" Retries will be done as usual (see --retry) as long as the timer\n"
-" hasn't reached this given limit. Notice that if the timer hasn't\n"
-" reached the limit, the request will be made and while perform-\n"
-" ing, it may take longer than this given time period. To limit a\n"
-" single request's maximum time, use -m, --max-time. Set this\n"
-" option to zero to not timeout retries. (Added in 7.12.3)\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -s, --silent\n"
-" Silent or quiet mode. Don't show progress meter or error mes-\n"
-" sages. Makes Curl mute. It will still output the data you ask\n"
-" for, potentially even to the terminal/stdout unless you redirect\n"
-" it.\n"
-"\n"
-" --sasl-ir\n"
-" Enable initial response in SASL authentication. (Added in\n"
-" 7.31.0)\n"
-"\n"
-" -S, --show-error\n"
-, stdout);
- fputs(
-" When used with -s it makes curl show an error message if it\n"
-" fails.\n"
-"\n"
-" --ssl (FTP, POP3, IMAP, SMTP) Try to use SSL/TLS for the connection.\n"
-" Reverts to a non-secure connection if the server doesn't support\n"
-" SSL/TLS. See also --ftp-ssl-control and --ssl-reqd for differ-\n"
-" ent levels of encryption required. (Added in 7.20.0)\n"
-"\n"
-" This option was formerly known as --ftp-ssl (Added in 7.11.0).\n"
-, stdout);
- fputs(
-" That option name can still be used but will be removed in a\n"
-" future version.\n"
-"\n"
-" --ssl-reqd\n"
-" (FTP, POP3, IMAP, SMTP) Require SSL/TLS for the connection.\n"
-" Terminates the connection if the server doesn't support SSL/TLS.\n"
-" (Added in 7.20.0)\n"
-"\n"
-" This option was formerly known as --ftp-ssl-reqd (added in\n"
-" 7.15.5). That option name can still be used but will be removed\n"
-, stdout);
- fputs(
-" in a future version.\n"
-"\n"
-" --ssl-allow-beast\n"
-" (SSL) This option tells curl to not work around a security flaw\n"
-" in the SSL3 and TLS1.0 protocols known as BEAST. If this option\n"
-" isn't used, the SSL layer may use workarounds known to cause\n"
-" interoperability problems with some older SSL implementations.\n"
-" WARNING: this option loosens the SSL security, and by using this\n"
-, stdout);
- fputs(
-" flag you ask for exactly that. (Added in 7.25.0)\n"
-"\n"
-" --socks4 <host[:port]>\n"
-" Use the specified SOCKS4 proxy. If the port number is not speci-\n"
-" fied, it is assumed at port 1080. (Added in 7.15.2)\n"
-"\n"
-" This option overrides any previous use of -x, --proxy, as they\n"
-" are mutually exclusive.\n"
-"\n"
-" Since 7.21.7, this option is superfluous since you can specify a\n"
-, stdout);
- fputs(
-" socks4 proxy with -x, --proxy using a socks4:// protocol prefix.\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --socks4a <host[:port]>\n"
-" Use the specified SOCKS4a proxy. If the port number is not spec-\n"
-" ified, it is assumed at port 1080. (Added in 7.18.0)\n"
-"\n"
-" This option overrides any previous use of -x, --proxy, as they\n"
-" are mutually exclusive.\n"
-"\n"
-, stdout);
- fputs(
-" Since 7.21.7, this option is superfluous since you can specify a\n"
-" socks4a proxy with -x, --proxy using a socks4a:// protocol pre-\n"
-" fix.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --socks5-hostname <host[:port]>\n"
-" Use the specified SOCKS5 proxy (and let the proxy resolve the\n"
-" host name). If the port number is not specified, it is assumed\n"
-, stdout);
- fputs(
-" at port 1080. (Added in 7.18.0)\n"
-"\n"
-" This option overrides any previous use of -x, --proxy, as they\n"
-" are mutually exclusive.\n"
-"\n"
-" Since 7.21.7, this option is superfluous since you can specify a\n"
-" socks5 hostname proxy with -x, --proxy using a socks5h:// proto-\n"
-" col prefix.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-, stdout);
- fputs(
-" (This option was previously wrongly documented and used as\n"
-" --socks without the number appended.)\n"
-"\n"
-" --socks5 <host[:port]>\n"
-" Use the specified SOCKS5 proxy - but resolve the host name\n"
-" locally. If the port number is not specified, it is assumed at\n"
-" port 1080.\n"
-"\n"
-" This option overrides any previous use of -x, --proxy, as they\n"
-" are mutually exclusive.\n"
-"\n"
-, stdout);
- fputs(
-" Since 7.21.7, this option is superfluous since you can specify a\n"
-" socks5 proxy with -x, --proxy using a socks5:// protocol prefix.\n"
-" If this option is used several times, the last one will be used.\n"
-" (This option was previously wrongly documented and used as\n"
-" --socks without the number appended.)\n"
-"\n"
-" This option (as well as --socks4) does not work with IPV6, FTPS\n"
-" or LDAP.\n"
-"\n"
-, stdout);
- fputs(
-" --socks5-gssapi-service <servicename>\n"
-" The default service name for a socks server is rcmd/server-fqdn.\n"
-" This option allows you to change it.\n"
-"\n"
-" Examples: --socks5 proxy-name --socks5-gssapi-service sockd\n"
-" would use sockd/proxy-name --socks5 proxy-name --socks5-gssapi-\n"
-" service sockd/real-name would use sockd/real-name for cases\n"
-" where the proxy-name does not match the principal name. (Added\n"
-, stdout);
- fputs(
-" in 7.19.4).\n"
-"\n"
-" --socks5-gssapi-nec\n"
-" As part of the GSS-API negotiation a protection mode is negoti-\n"
-" ated. RFC 1961 says in section 4.3/4.4 it should be protected,\n"
-" but the NEC reference implementation does not. The option\n"
-" --socks5-gssapi-nec allows the unprotected exchange of the pro-\n"
-" tection mode negotiation. (Added in 7.19.4).\n"
-"\n"
-" --stderr <file>\n"
-, stdout);
- fputs(
-" Redirect all writes to stderr to the specified file instead. If\n"
-" the file name is a plain '-', it is instead written to stdout.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -t, --telnet-option <OPT=val>\n"
-" Pass options to the telnet protocol. Supported options are:\n"
-"\n"
-" TTYPE=<term> Sets the terminal type.\n"
-"\n"
-" XDISPLOC=<X display> Sets the X display location.\n"
-"\n"
-, stdout);
- fputs(
-" NEW_ENV=<var,val> Sets an environment variable.\n"
-"\n"
-" -T, --upload-file <file>\n"
-" This transfers the specified local file to the remote URL. If\n"
-" there is no file part in the specified URL, Curl will append the\n"
-" local file name. NOTE that you must use a trailing / on the last\n"
-" directory to really prove to Curl that there is no file name or\n"
-" curl will think that your last directory name is the remote file\n"
-, stdout);
- fputs(
-" name to use. That will most likely cause the upload operation to\n"
-" fail. If this is used on an HTTP(S) server, the PUT command will\n"
-" be used.\n"
-"\n"
-" Use the file name \"-\" (a single dash) to use stdin instead of a\n"
-" given file. Alternately, the file name \".\" (a single period)\n"
-" may be specified instead of \"-\" to use stdin in non-blocking\n"
-" mode to allow reading server output while stdin is being\n"
-, stdout);
- fputs(
-" uploaded.\n"
-"\n"
-" You can specify one -T for each URL on the command line. Each -T\n"
-" + URL pair specifies what to upload and to where. curl also sup-\n"
-" ports \"globbing\" of the -T argument, meaning that you can upload\n"
-" multiple files to a single URL by using the same URL globbing\n"
-" style supported in the URL, like this:\n"
-"\n"
-" curl -T \"{file1,file2}\" http://www.uploadtothissite.com\n"
-"\n"
-" or even\n"
-"\n"
-, stdout);
- fputs(
-" curl -T \"img[1-1000].png\" ftp://ftp.picturemania.com/upload/\n"
-"\n"
-" --tcp-nodelay\n"
-" Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man\n"
-" page for details about this option. (Added in 7.11.2)\n"
-"\n"
-" --tftp-blksize <value>\n"
-" (TFTP) Set TFTP BLKSIZE option (must be >512). This is the block\n"
-" size that curl will try to use when transferring data to or from\n"
-" a TFTP server. By default 512 bytes will be used.\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" (Added in 7.20.0)\n"
-"\n"
-" --tlsauthtype <authtype>\n"
-" Set TLS authentication type. Currently, the only supported\n"
-" option is \"SRP\", for TLS-SRP (RFC 5054). If --tlsuser and\n"
-" --tlspassword are specified but --tlsauthtype is not, then this\n"
-" option defaults to \"SRP\". (Added in 7.21.4)\n"
-"\n"
-" --tlspassword <password>\n"
-, stdout);
- fputs(
-" Set password for use with the TLS authentication method speci-\n"
-" fied with --tlsauthtype. Requires that --tlsuser also be set.\n"
-" (Added in 7.21.4)\n"
-"\n"
-" --tlsuser <user>\n"
-" Set username for use with the TLS authentication method speci-\n"
-" fied with --tlsauthtype. Requires that --tlspassword also be\n"
-" set. (Added in 7.21.4)\n"
-"\n"
-" --tlsv1.0\n"
-, stdout);
- fputs(
-" (SSL) Forces curl to use TLS version 1.0 when negotiating with a\n"
-" remote TLS server. (Added in 7.34.0)\n"
-"\n"
-" --tlsv1.1\n"
-" (SSL) Forces curl to use TLS version 1.1 when negotiating with a\n"
-" remote TLS server. (Added in 7.34.0)\n"
-"\n"
-" --tlsv1.2\n"
-" (SSL) Forces curl to use TLS version 1.2 when negotiating with a\n"
-" remote TLS server. (Added in 7.34.0)\n"
-"\n"
-" --tr-encoding\n"
-, stdout);
- fputs(
-" (HTTP) Request a compressed Transfer-Encoding response using one\n"
-" of the algorithms curl supports, and uncompress the data while\n"
-" receiving it.\n"
-"\n"
-" (Added in 7.21.6)\n"
-"\n"
-" --trace <file>\n"
-" Enables a full trace dump of all incoming and outgoing data,\n"
-" including descriptive information, to the given output file. Use\n"
-" \"-\" as filename to have the output sent to stdout.\n"
-"\n"
-, stdout);
- fputs(
-" This option overrides previous uses of -v, --verbose or --trace-\n"
-" ascii.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --trace-ascii <file>\n"
-" Enables a full trace dump of all incoming and outgoing data,\n"
-" including descriptive information, to the given output file. Use\n"
-" \"-\" as filename to have the output sent to stdout.\n"
-"\n"
-, stdout);
- fputs(
-" This is very similar to --trace, but leaves out the hex part and\n"
-" only shows the ASCII part of the dump. It makes smaller output\n"
-" that might be easier to read for untrained humans.\n"
-"\n"
-" This option overrides previous uses of -v, --verbose or --trace.\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --trace-time\n"
-" Prepends a time stamp to each trace or verbose line that curl\n"
-, stdout);
- fputs(
-" displays. (Added in 7.14.0)\n"
-"\n"
-" -u, --user <user:password>\n"
-" Specify the user name and password to use for server authentica-\n"
-" tion. Overrides -n, --netrc and --netrc-optional.\n"
-"\n"
-" If you simply specify the user name, curl will prompt for a\n"
-" password.\n"
-"\n"
-" The user name and passwords are split up on the first colon,\n"
-" which makes it impossible to use a colon in the user name with\n"
-, stdout);
- fputs(
-" this option. The password can, still.\n"
-"\n"
-" When using Kerberos V5 with a Windows based server you should\n"
-" include the Windows domain name in the user name, in order for\n"
-" the server to succesfully obtain a Kerberos Ticket. If you don't\n"
-" then the initial authentication handshake may fail.\n"
-"\n"
-" When using NTLM, the user name can be specified simply as the\n"
-, stdout);
- fputs(
-" user name, without the domain, if there is a single domain and\n"
-" forest in your setup for example.\n"
-"\n"
-" To specify the domain name use either Down-Level Logon Name or\n"
-" UPN (User Principal Name) formats. For example, EXAMPLE\\user and\n"
-" user@example.com respectively.\n"
-"\n"
-" If you use a Windows SSPI-enabled curl binary and perform Ker-\n"
-" beros V5, Negotiate or NTLM authentication then you can tell\n"
-, stdout);
- fputs(
-" curl to select the user name and password from your environment\n"
-" by specifying a single colon with this option: \"-u :\".\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -U, --proxy-user <user:password>\n"
-" Specify the user name and password to use for proxy authentica-\n"
-" tion.\n"
-"\n"
-" If you use a Windows SSPI-enabled curl binary and do either\n"
-, stdout);
- fputs(
-" Negotiate or NTLM authentication then you can tell curl to\n"
-" select the user name and password from your environment by spec-\n"
-" ifying a single colon with this option: \"-U :\".\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --url <URL>\n"
-" Specify a URL to fetch. This option is mostly handy when you\n"
-" want to specify URL(s) in a config file.\n"
-"\n"
-, stdout);
- fputs(
-" This option may be used any number of times. To control where\n"
-" this URL is written, use the -o, --output or the -O, --remote-\n"
-" name options.\n"
-" -v, --verbose\n"
-" Makes the fetching more verbose/talkative. Mostly useful for\n"
-" debugging. A line starting with '>' means \"header data\" sent by\n"
-" curl, '<' means \"header data\" received by curl that is hidden in\n"
-, stdout);
- fputs(
-" normal cases, and a line starting with '*' means additional info\n"
-" provided by curl.\n"
-"\n"
-" Note that if you only want HTTP headers in the output, -i,\n"
-" --include might be the option you're looking for.\n"
-"\n"
-" If you think this option still doesn't give you enough details,\n"
-" consider using --trace or --trace-ascii instead.\n"
-"\n"
-" This option overrides previous uses of --trace-ascii or --trace.\n"
-"\n"
-, stdout);
- fputs(
-" Use -s, --silent to make curl quiet.\n"
-"\n"
-" -w, --write-out <format>\n"
-" Defines what to display on stdout after a completed and success-\n"
-" ful operation. The format is a string that may contain plain\n"
-" text mixed with any number of variables. The string can be spec-\n"
-" ified as \"string\", to get read from a particular file you spec-\n"
-" ify it \"@filename\" and to tell curl to read the format from\n"
-, stdout);
- fputs(
-" stdin you write \"@-\".\n"
-"\n"
-" The variables present in the output format will be substituted\n"
-" by the value or text that curl thinks fit, as described below.\n"
-" All variables are specified as %{variable_name} and to output a\n"
-" normal % you just write them as %%. You can output a newline by\n"
-" using \\n, a carriage return with \\r and a tab space with \\t.\n"
-"\n"
-, stdout);
- fputs(
-" NOTE: The %-symbol is a special symbol in the win32-environment,\n"
-" where all occurrences of % must be doubled when using this\n"
-" option.\n"
-"\n"
-" The variables available are:\n"
-"\n"
-" content_type The Content-Type of the requested document, if\n"
-" there was any.\n"
-"\n"
-" filename_effective\n"
-" The ultimate filename that curl writes out to.\n"
-, stdout);
- fputs(
-" This is only meaningful if curl is told to write\n"
-" to a file with the --remote-name or --output\n"
-" option. It's most useful in combination with the\n"
-" --remote-header-name option. (Added in 7.25.1)\n"
-"\n"
-" ftp_entry_path The initial path curl ended up in when logging on\n"
-" to the remote FTP server. (Added in 7.15.4)\n"
-"\n"
-, stdout);
- fputs(
-" http_code The numerical response code that was found in the\n"
-" last retrieved HTTP(S) or FTP(s) transfer. In\n"
-" 7.18.2 the alias response_code was added to show\n"
-" the same info.\n"
-"\n"
-" http_connect The numerical code that was found in the last\n"
-" response (from a proxy) to a curl CONNECT\n"
-" request. (Added in 7.12.4)\n"
-"\n"
-, stdout);
- fputs(
-" local_ip The IP address of the local end of the most\n"
-" recently done connection - can be either IPv4 or\n"
-" IPv6 (Added in 7.29.0)\n"
-"\n"
-" local_port The local port number of the most recently done\n"
-" connection (Added in 7.29.0)\n"
-"\n"
-" num_connects Number of new connects made in the recent trans-\n"
-" fer. (Added in 7.12.3)\n"
-"\n"
-, stdout);
- fputs(
-" num_redirects Number of redirects that were followed in the\n"
-" request. (Added in 7.12.3)\n"
-"\n"
-" redirect_url When an HTTP request was made without -L to fol-\n"
-" low redirects, this variable will show the actual\n"
-" URL a redirect would take you to. (Added in\n"
-" 7.18.2)\n"
-"\n"
-" remote_ip The remote IP address of the most recently done\n"
-, stdout);
- fputs(
-" connection - can be either IPv4 or IPv6 (Added in\n"
-" 7.29.0)\n"
-"\n"
-" remote_port The remote port number of the most recently done\n"
-" connection (Added in 7.29.0)\n"
-"\n"
-" size_download The total amount of bytes that were downloaded.\n"
-"\n"
-" size_header The total amount of bytes of the downloaded head-\n"
-" ers.\n"
-"\n"
-, stdout);
- fputs(
-" size_request The total amount of bytes that were sent in the\n"
-" HTTP request.\n"
-"\n"
-" size_upload The total amount of bytes that were uploaded.\n"
-"\n"
-" speed_download The average download speed that curl measured for\n"
-" the complete download. Bytes per second.\n"
-"\n"
-" speed_upload The average upload speed that curl measured for\n"
-" the complete upload. Bytes per second.\n"
-"\n"
-, stdout);
- fputs(
-" ssl_verify_result\n"
-" The result of the SSL peer certificate verifica-\n"
-" tion that was requested. 0 means the verification\n"
-" was successful. (Added in 7.19.0)\n"
-"\n"
-" time_appconnect\n"
-" The time, in seconds, it took from the start\n"
-" until the SSL/SSH/etc connect/handshake to the\n"
-, stdout);
- fputs(
-" remote host was completed. (Added in 7.19.0)\n"
-"\n"
-" time_connect The time, in seconds, it took from the start\n"
-" until the TCP connect to the remote host (or\n"
-" proxy) was completed.\n"
-"\n"
-" time_namelookup\n"
-" The time, in seconds, it took from the start\n"
-" until the name resolving was completed.\n"
-"\n"
-" time_pretransfer\n"
-, stdout);
- fputs(
-" The time, in seconds, it took from the start\n"
-" until the file transfer was just about to begin.\n"
-" This includes all pre-transfer commands and nego-\n"
-" tiations that are specific to the particular pro-\n"
-" tocol(s) involved.\n"
-"\n"
-" time_redirect The time, in seconds, it took for all redirection\n"
-, stdout);
- fputs(
-" steps include name lookup, connect, pretransfer\n"
-" and transfer before the final transaction was\n"
-" started. time_redirect shows the complete execu-\n"
-" tion time for multiple redirections. (Added in\n"
-" 7.12.3)\n"
-"\n"
-" time_starttransfer\n"
-" The time, in seconds, it took from the start\n"
-, stdout);
- fputs(
-" until the first byte was just about to be trans-\n"
-" ferred. This includes time_pretransfer and also\n"
-" the time the server needed to calculate the\n"
-" result.\n"
-"\n"
-" time_total The total time, in seconds, that the full opera-\n"
-" tion lasted. The time will be displayed with mil-\n"
-" lisecond resolution.\n"
-"\n"
-, stdout);
- fputs(
-" url_effective The URL that was fetched last. This is most mean-\n"
-" ingful if you've told curl to follow location:\n"
-" headers.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -x, --proxy <[protocol://][user:password@]proxyhost[:port]>\n"
-" Use the specified proxy.\n"
-"\n"
-" The proxy string can be specified with a protocol:// prefix to\n"
-, stdout);
- fputs(
-" specify alternative proxy protocols. Use socks4://, socks4a://,\n"
-" socks5:// or socks5h:// to request the specific SOCKS version to\n"
-" be used. No protocol specified, http:// and all others will be\n"
-" treated as HTTP proxies. (The protocol support was added in curl\n"
-" 7.21.7)\n"
-"\n"
-" If the port number is not specified in the proxy string, it is\n"
-" assumed to be 1080.\n"
-"\n"
-, stdout);
- fputs(
-" This option overrides existing environment variables that set\n"
-" the proxy to use. If there's an environment variable setting a\n"
-" proxy, you can set proxy to \"\" to override it.\n"
-"\n"
-" All operations that are performed over an HTTP proxy will trans-\n"
-" parently be converted to HTTP. It means that certain protocol\n"
-" specific operations might not be available. This is not the case\n"
-, stdout);
- fputs(
-" if you can tunnel through the proxy, as one with the -p, --prox-\n"
-" ytunnel option.\n"
-"\n"
-" User and password that might be provided in the proxy string are\n"
-" URL decoded by curl. This allows you to pass in special charac-\n"
-" ters such as @ by using %40 or pass in a colon with %3a.\n"
-"\n"
-" The proxy host can be specified the exact same way as the proxy\n"
-" environment variables, including the protocol prefix (http://)\n"
-, stdout);
- fputs(
-" and the embedded user + password.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -X, --request <command>\n"
-" (HTTP) Specifies a custom request method to use when communicat-\n"
-" ing with the HTTP server. The specified request will be used\n"
-" instead of the method otherwise used (which defaults to GET).\n"
-" Read the HTTP 1.1 specification for details and explanations.\n"
-, stdout);
- fputs(
-" Common additional HTTP requests include PUT and DELETE, but\n"
-" related technologies like WebDAV offers PROPFIND, COPY, MOVE and\n"
-" more.\n"
-"\n"
-" Normally you don't need this option. All sorts of GET, HEAD,\n"
-" POST and PUT requests are rather invoked by using dedicated com-\n"
-" mand line options.\n"
-"\n"
-" This option only changes the actual word used in the HTTP\n"
-, stdout);
- fputs(
-" request, it does not alter the way curl behaves. So for example\n"
-" if you want to make a proper HEAD request, using -X HEAD will\n"
-" not suffice. You need to use the -I, --head option.\n"
-"\n"
-" (FTP) Specifies a custom FTP command to use instead of LIST when\n"
-" doing file lists with FTP.\n"
-"\n"
-" (POP3) Specifies a custom POP3 command to use instead of LIST or\n"
-" RETR. (Added in 7.26.0)\n"
-"\n"
-, stdout);
- fputs(
-" (IMAP) Specifies a custom IMAP command to use instead of LIST.\n"
-" (Added in 7.30.0)\n"
-"\n"
-" (SMTP) Specifies a custom SMTP command to use instead of HELP or\n"
-" VRFY. (Added in 7.34.0)\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" --xattr\n"
-" When saving output to a file, this option tells curl to store\n"
-" certain file metadata in extended file attributes. Currently,\n"
-, stdout);
- fputs(
-" the URL is stored in the xdg.origin.url attribute and, for HTTP,\n"
-" the content type is stored in the mime_type attribute. If the\n"
-" file system does not support extended attributes, a warning is\n"
-" issued.\n"
-"\n"
-" -y, --speed-time <time>\n"
-" If a download is slower than speed-limit bytes per second during\n"
-" a speed-time period, the download gets aborted. If speed-time is\n"
-, stdout);
- fputs(
-" used, the default speed-limit will be 1 unless set with -Y.\n"
-"\n"
-" This option controls transfers and thus will not affect slow\n"
-" connects etc. If this is a concern for you, try the --connect-\n"
-" timeout option.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -Y, --speed-limit <speed>\n"
-" If a download is slower than this given speed (in bytes per sec-\n"
-, stdout);
- fputs(
-" ond) for speed-time seconds it gets aborted. speed-time is set\n"
-" with -y and is 30 if not set.\n"
-"\n"
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -z, --time-cond <date expression>|<file>\n"
-" (HTTP/FTP) Request a file that has been modified later than the\n"
-" given time and date, or one that has been modified before that\n"
-" time. The <date expression> can be all sorts of date strings or\n"
-, stdout);
- fputs(
-" if it doesn't match any internal ones, it is taken as a filename\n"
-" and tries to get the modification date (mtime) from <file>\n"
-" instead. See the curl_getdate(3) man pages for date expression\n"
-" details.\n"
-"\n"
-" Start the date expression with a dash (-) to make it request for\n"
-" a document that is older than the given date/time, default is a\n"
-" document that is newer than the specified date/time.\n"
-"\n"
-, stdout);
- fputs(
-" If this option is used several times, the last one will be used.\n"
-"\n"
-" -h, --help\n"
-" Usage help.\n"
-"\n"
-" -M, --manual\n"
-" Manual. Display the huge help text.\n"
-"\n"
-" -V, --version\n"
-" Displays information about curl and the libcurl version it uses.\n"
-" The first line includes the full version of curl, libcurl and\n"
-" other 3rd party libraries linked with the executable.\n"
-"\n"
-, stdout);
- fputs(
-" The second line (starts with \"Protocols:\") shows all protocols\n"
-" that libcurl reports to support.\n"
-"\n"
-" The third line (starts with \"Features:\") shows specific features\n"
-" libcurl reports to offer. Available features include:\n"
-"\n"
-" IPv6 You can use IPv6 with this.\n"
-"\n"
-" krb4 Krb4 for FTP is supported.\n"
-"\n"
-" SSL HTTPS and FTPS are supported.\n"
-"\n"
-, stdout);
- fputs(
-" libz Automatic decompression of compressed files over HTTP is\n"
-" supported.\n"
-"\n"
-" NTLM NTLM authentication is supported.\n"
-"\n"
-" Debug This curl uses a libcurl built with Debug. This enables\n"
-" more error-tracking and memory debugging etc. For curl-\n"
-" developers only!\n"
-"\n"
-" AsynchDNS\n"
-" This curl uses asynchronous name resolves.\n"
-, stdout);
- fputs(
-" SPNEGO SPNEGO authentication is supported.\n"
-"\n"
-" Largefile\n"
-" This curl supports transfers of large files, files larger\n"
-" than 2GB.\n"
-"\n"
-" IDN This curl supports IDN - international domain names.\n"
-"\n"
-" GSS-API\n"
-" GSS-API is supported.\n"
-"\n"
-" SSPI SSPI is supported.\n"
-"\n"
-" TLS-SRP\n"
-" SRP (Secure Remote Password) authentication is supported\n"
-, stdout);
- fputs(
-" for TLS.\n"
-" Metalink\n"
-" This curl supports Metalink (both version 3 and 4 (RFC\n"
-" 5854)), which describes mirrors and hashes. curl will\n"
-" use mirrors for failover if there are errors (such as the\n"
-" file or server not being available).\n"
-"\n"
-"FILES\n"
-" ~/.curlrc\n"
-" Default config file, see -K, --config for details.\n"
-"\n"
-"ENVIRONMENT\n"
-, stdout);
- fputs(
-" The environment variables can be specified in lower case or upper case.\n"
-" The lower case version has precedence. http_proxy is an exception as it\n"
-" is only available in lower case.\n"
-"\n"
-" Using an environment variable to set the proxy has the same effect as\n"
-" using the --proxy option.\n"
-"\n"
-" http_proxy [protocol://]<host>[:port]\n"
-" Sets the proxy server to use for HTTP.\n"
-" HTTPS_PROXY [protocol://]<host>[:port]\n"
-, stdout);
- fputs(
-" Sets the proxy server to use for HTTPS.\n"
-"\n"
-" [url-protocol]_PROXY [protocol://]<host>[:port]\n"
-" Sets the proxy server to use for [url-protocol], where the pro-\n"
-" tocol is a protocol that curl supports and as specified in a\n"
-" URL. FTP, FTPS, POP3, IMAP, SMTP, LDAP etc.\n"
-"\n"
-" ALL_PROXY [protocol://]<host>[:port]\n"
-" Sets the proxy server to use if no protocol-specific proxy is\n"
-" set.\n"
-"\n"
-, stdout);
- fputs(
-" NO_PROXY <comma-separated list of hosts>\n"
-" list of host names that shouldn't go through any proxy. If set\n"
-" to a asterisk '*' only, it matches all hosts.\n"
-"\n"
-"PROXY PROTOCOL PREFIXES\n"
-" Since curl version 7.21.7, the proxy string may be specified with a\n"
-" protocol:// prefix to specify alternative proxy protocols.\n"
-"\n"
-" If no protocol is specified in the proxy string or if the string\n"
-, stdout);
- fputs(
-" doesn't match a supported one, the proxy will be treated as an HTTP\n"
-" proxy.\n"
-"\n"
-" The supported proxy protocol prefixes are as follows:\n"
-"\n"
-" socks4://\n"
-" Makes it the equivalent of --socks4\n"
-"\n"
-" socks4a://\n"
-" Makes it the equivalent of --socks4a\n"
-"\n"
-" socks5://\n"
-" Makes it the equivalent of --socks5\n"
-"\n"
-" socks5h://\n"
-" Makes it the equivalent of --socks5-hostname\n"
-"\n"
-"EXIT CODES\n"
-, stdout);
- fputs(
-" There are a bunch of different error codes and their corresponding\n"
-" error messages that may appear during bad conditions. At the time of\n"
-" this writing, the exit codes are:\n"
-"\n"
-" 1 Unsupported protocol. This build of curl has no support for this\n"
-" protocol.\n"
-"\n"
-" 2 Failed to initialize.\n"
-"\n"
-" 3 URL malformed. The syntax was not correct.\n"
-"\n"
-" 4 A feature or option that was needed to perform the desired\n"
-, stdout);
- fputs(
-" request was not enabled or was explicitly disabled at build-\n"
-" time. To make curl able to do this, you probably need another\n"
-" build of libcurl!\n"
-"\n"
-" 5 Couldn't resolve proxy. The given proxy host could not be\n"
-" resolved.\n"
-"\n"
-" 6 Couldn't resolve host. The given remote host was not resolved.\n"
-"\n"
-" 7 Failed to connect to host.\n"
-"\n"
-" 8 FTP weird server reply. The server sent data curl couldn't\n"
-, stdout);
- fputs(
-" parse.\n"
-"\n"
-" 9 FTP access denied. The server denied login or denied access to\n"
-" the particular resource or directory you wanted to reach. Most\n"
-" often you tried to change to a directory that doesn't exist on\n"
-" the server.\n"
-"\n"
-" 11 FTP weird PASS reply. Curl couldn't parse the reply sent to the\n"
-" PASS request.\n"
-"\n"
-" 13 FTP weird PASV reply, Curl couldn't parse the reply sent to the\n"
-, stdout);
- fputs(
-" PASV request.\n"
-"\n"
-" 14 FTP weird 227 format. Curl couldn't parse the 227-line the\n"
-" server sent.\n"
-"\n"
-" 15 FTP can't get host. Couldn't resolve the host IP we got in the\n"
-" 227-line.\n"
-"\n"
-" 17 FTP couldn't set binary. Couldn't change transfer method to\n"
-" binary.\n"
-"\n"
-" 18 Partial file. Only a part of the file was transferred.\n"
-"\n"
-" 19 FTP couldn't download/access the given file, the RETR (or simi-\n"
-, stdout);
- fputs(
-" lar) command failed.\n"
-"\n"
-" 21 FTP quote error. A quote command returned error from the server.\n"
-" 22 HTTP page not retrieved. The requested url was not found or\n"
-" returned another error with the HTTP error code being 400 or\n"
-" above. This return code only appears if -f, --fail is used.\n"
-"\n"
-" 23 Write error. Curl couldn't write data to a local filesystem or\n"
-" similar.\n"
-"\n"
-, stdout);
- fputs(
-" 25 FTP couldn't STOR file. The server denied the STOR operation,\n"
-" used for FTP uploading.\n"
-"\n"
-" 26 Read error. Various reading problems.\n"
-"\n"
-" 27 Out of memory. A memory allocation request failed.\n"
-"\n"
-" 28 Operation timeout. The specified time-out period was reached\n"
-" according to the conditions.\n"
-"\n"
-" 30 FTP PORT failed. The PORT command failed. Not all FTP servers\n"
-, stdout);
- fputs(
-" support the PORT command, try doing a transfer using PASV\n"
-" instead!\n"
-"\n"
-" 31 FTP couldn't use REST. The REST command failed. This command is\n"
-" used for resumed FTP transfers.\n"
-"\n"
-" 33 HTTP range error. The range \"command\" didn't work.\n"
-"\n"
-" 34 HTTP post error. Internal post-request generation error.\n"
-"\n"
-" 35 SSL connect error. The SSL handshaking failed.\n"
-"\n"
-, stdout);
- fputs(
-" 36 FTP bad download resume. Couldn't continue an earlier aborted\n"
-" download.\n"
-"\n"
-" 37 FILE couldn't read file. Failed to open the file. Permissions?\n"
-"\n"
-" 38 LDAP cannot bind. LDAP bind operation failed.\n"
-"\n"
-" 39 LDAP search failed.\n"
-"\n"
-" 41 Function not found. A required LDAP function was not found.\n"
-"\n"
-" 42 Aborted by callback. An application told curl to abort the oper-\n"
-" ation.\n"
-"\n"
-, stdout);
- fputs(
-" 43 Internal error. A function was called with a bad parameter.\n"
-"\n"
-" 45 Interface error. A specified outgoing interface could not be\n"
-" used.\n"
-"\n"
-" 47 Too many redirects. When following redirects, curl hit the maxi-\n"
-" mum amount.\n"
-"\n"
-" 48 Unknown option specified to libcurl. This indicates that you\n"
-" passed a weird option to curl that was passed on to libcurl and\n"
-" rejected. Read up in the manual!\n"
-"\n"
-, stdout);
- fputs(
-" 49 Malformed telnet option.\n"
-"\n"
-" 51 The peer's SSL certificate or SSH MD5 fingerprint was not OK.\n"
-"\n"
-" 52 The server didn't reply anything, which here is considered an\n"
-" error.\n"
-"\n"
-" 53 SSL crypto engine not found.\n"
-"\n"
-" 54 Cannot set SSL crypto engine as default.\n"
-"\n"
-" 55 Failed sending network data.\n"
-"\n"
-" 56 Failure in receiving network data.\n"
-"\n"
-" 58 Problem with the local certificate.\n"
-"\n"
-, stdout);
- fputs(
-" 59 Couldn't use specified SSL cipher.\n"
-"\n"
-" 60 Peer certificate cannot be authenticated with known CA certifi-\n"
-" cates.\n"
-"\n"
-" 61 Unrecognized transfer encoding.\n"
-"\n"
-" 62 Invalid LDAP URL.\n"
-"\n"
-" 63 Maximum file size exceeded.\n"
-"\n"
-" 64 Requested FTP SSL level failed.\n"
-"\n"
-" 65 Sending the data requires a rewind that failed.\n"
-"\n"
-" 66 Failed to initialise SSL Engine.\n"
-"\n"
-, stdout);
- fputs(
-" 67 The user name, password, or similar was not accepted and curl\n"
-" failed to log in.\n"
-"\n"
-" 68 File not found on TFTP server.\n"
-"\n"
-" 69 Permission problem on TFTP server.\n"
-"\n"
-" 70 Out of disk space on TFTP server.\n"
-"\n"
-" 71 Illegal TFTP operation.\n"
-"\n"
-" 72 Unknown TFTP transfer ID.\n"
-"\n"
-" 73 File already exists (TFTP).\n"
-"\n"
-" 74 No such user (TFTP).\n"
-"\n"
-" 75 Character conversion failed.\n"
-"\n"
-, stdout);
- fputs(
-" 76 Character conversion functions required.\n"
-"\n"
-" 77 Problem with reading the SSL CA cert (path? access rights?).\n"
-"\n"
-" 78 The resource referenced in the URL does not exist.\n"
-"\n"
-" 79 An unspecified error occurred during the SSH session.\n"
-"\n"
-" 80 Failed to shut down the SSL connection.\n"
-"\n"
-" 82 Could not load CRL file, missing or wrong format (added in\n"
-" 7.19.0).\n"
-"\n"
-" 83 Issuer check failed (added in 7.19.0).\n"
-"\n"
-, stdout);
- fputs(
-" 84 The FTP PRET command failed\n"
-"\n"
-" 85 RTSP: mismatch of CSeq numbers\n"
-"\n"
-" 86 RTSP: mismatch of Session Identifiers\n"
-"\n"
-" 87 unable to parse FTP file list\n"
-"\n"
-" 88 FTP chunk callback reported error\n"
-"\n"
-" 89 No connection available, the session will be queued\n"
-"\n"
-" XX More error codes will appear here in future releases. The exist-\n"
-" ing ones are meant to never change.\n"
-"\n"
-"AUTHORS / CONTRIBUTORS\n"
-, stdout);
- fputs(
-" Daniel Stenberg is the main author, but the whole list of contributors\n"
-" is found in the separate THANKS file.\n"
-"\n"
-"WWW\n"
-" http://curl.haxx.se\n"
-"\n"
-"FTP\n"
-" ftp://ftp.sunet.se/pub/www/utilities/curl/\n"
-"\n"
-"SEE ALSO\n"
-" ftp(1), wget(1)\n"
-"\n"
-"LATEST VERSION\n"
-"\n"
-" You always find news about what's going on as well as the latest versions\n"
-" from the curl web pages, located at:\n"
-"\n"
-" http://curl.haxx.se\n"
-"\n"
-"SIMPLE USAGE\n"
-"\n"
-" Get the main page from Netscape's web-server:\n"
-"\n"
-, stdout);
- fputs(
-" curl http://www.netscape.com/\n"
-"\n"
-" Get the README file the user's home directory at funet's ftp-server:\n"
-"\n"
-" curl ftp://ftp.funet.fi/README\n"
-"\n"
-" Get a web page from a server using port 8000:\n"
-"\n"
-" curl http://www.weirdserver.com:8000/\n"
-"\n"
-" Get a directory listing of an FTP site:\n"
-"\n"
-" curl ftp://cool.haxx.se/\n"
-"\n"
-" Get the definition of curl from a dictionary:\n"
-"\n"
-" curl dict://dict.org/m:curl\n"
-"\n"
-" Fetch two documents at once:\n"
-"\n"
-, stdout);
- fputs(
-" curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/\n"
-"\n"
-" Get a file off an FTPS server:\n"
-"\n"
-" curl ftps://files.are.secure.com/secrets.txt\n"
-"\n"
-" or use the more appropriate FTPS way to get the same file:\n"
-"\n"
-" curl --ftp-ssl ftp://files.are.secure.com/secrets.txt\n"
-"\n"
-" Get a file from an SSH server using SFTP:\n"
-"\n"
-" curl -u username sftp://shell.example.com/etc/issue\n"
-"\n"
-" Get a file from an SSH server using SCP using a private key to authenticate:\n"
-"\n"
-, stdout);
- fputs(
-" curl -u username: --key ~/.ssh/id_dsa --pubkey ~/.ssh/id_dsa.pub \\\n"
-" scp://shell.example.com/~/personal.txt\n"
-"\n"
-" Get the main page from an IPv6 web server:\n"
-"\n"
-" curl \"http://[2001:1890:1112:1::20]/\"\n"
-"\n"
-"DOWNLOAD TO A FILE\n"
-"\n"
-" Get a web page and store in a local file with a specific name:\n"
-"\n"
-" curl -o thatpage.html http://www.netscape.com/\n"
-"\n"
-" Get a web page and store in a local file, make the local file get the name\n"
-, stdout);
- fputs(
-" of the remote document (if no file name part is specified in the URL, this\n"
-" will fail):\n"
-"\n"
-" curl -O http://www.netscape.com/index.html\n"
-"\n"
-" Fetch two files and store them with their remote names:\n"
-"\n"
-" curl -O www.haxx.se/index.html -O curl.haxx.se/download.html\n"
-"\n"
-"USING PASSWORDS\n"
-"\n"
-" FTP\n"
-"\n"
-" To ftp files using name+passwd, include them in the URL like:\n"
-"\n"
-" curl ftp://name:passwd@machine.domain:port/full/path/to/file\n"
-"\n"
-" or specify them with the -u flag like\n"
-"\n"
-, stdout);
- fputs(
-" curl -u name:passwd ftp://machine.domain:port/full/path/to/file\n"
-"\n"
-" FTPS\n"
-"\n"
-" It is just like for FTP, but you may also want to specify and use\n"
-" SSL-specific options for certificates etc.\n"
-"\n"
-" Note that using FTPS:// as prefix is the \"implicit\" way as described in the\n"
-" standards while the recommended \"explicit\" way is done by using FTP:// and\n"
-" the --ftp-ssl option.\n"
-"\n"
-" SFTP / SCP\n"
-"\n"
-" This is similar to FTP, but you can specify a private key to use instead of\n"
-, stdout);
- fputs(
-" a password. Note that the private key may itself be protected by a password\n"
-" that is unrelated to the login password of the remote system. If you\n"
-" provide a private key file you must also provide a public key file.\n"
-"\n"
-" HTTP\n"
-"\n"
-" Curl also supports user and password in HTTP URLs, thus you can pick a file\n"
-" like:\n"
-"\n"
-" curl http://name:passwd@machine.domain/full/path/to/file\n"
-"\n"
-" or specify user and password separately like in\n"
-"\n"
-, stdout);
- fputs(
-" curl -u name:passwd http://machine.domain/full/path/to/file\n"
-"\n"
-" HTTP offers many different methods of authentication and curl supports\n"
-" several: Basic, Digest, NTLM and Negotiate (SPNEGO). Without telling which\n"
-" method to use, curl defaults to Basic. You can also ask curl to pick the\n"
-" most secure ones out of the ones that the server accepts for the given URL,\n"
-" by using --anyauth.\n"
-"\n"
-" NOTE! According to the URL specification, HTTP URLs can not contain a user\n"
-, stdout);
- fputs(
-" and password, so that style will not work when using curl via a proxy, even\n"
-" though curl allows it at other times. When using a proxy, you _must_ use\n"
-" the -u style for user and password.\n"
-"\n"
-" HTTPS\n"
-"\n"
-" Probably most commonly used with private certificates, as explained below.\n"
-"\n"
-"PROXY\n"
-"\n"
-" curl supports both HTTP and SOCKS proxy servers, with optional authentication.\n"
-" It does not have special support for FTP proxy servers since there are no\n"
-, stdout);
- fputs(
-" standards for those, but it can still be made to work with many of them. You\n"
-" can also use both HTTP and SOCKS proxies to transfer files to and from FTP\n"
-" servers.\n"
-"\n"
-" Get an ftp file using an HTTP proxy named my-proxy that uses port 888:\n"
-"\n"
-" curl -x my-proxy:888 ftp://ftp.leachsite.com/README\n"
-"\n"
-" Get a file from an HTTP server that requires user and password, using the\n"
-" same proxy as above:\n"
-"\n"
-" curl -u user:passwd -x my-proxy:888 http://www.get.this/\n"
-"\n"
-, stdout);
- fputs(
-" Some proxies require special authentication. Specify by using -U as above:\n"
-"\n"
-" curl -U user:passwd -x my-proxy:888 http://www.get.this/\n"
-"\n"
-" A comma-separated list of hosts and domains which do not use the proxy can\n"
-" be specified as:\n"
-"\n"
-" curl --noproxy localhost,get.this -x my-proxy:888 http://www.get.this/\n"
-"\n"
-" If the proxy is specified with --proxy1.0 instead of --proxy or -x, then\n"
-" curl will use HTTP/1.0 instead of HTTP/1.1 for any CONNECT attempts.\n"
-"\n"
-, stdout);
- fputs(
-" curl also supports SOCKS4 and SOCKS5 proxies with --socks4 and --socks5.\n"
-"\n"
-" See also the environment variables Curl supports that offer further proxy\n"
-" control.\n"
-"\n"
-" Most FTP proxy servers are set up to appear as a normal FTP server from the\n"
-" client's perspective, with special commands to select the remote FTP server.\n"
-" curl supports the -u, -Q and --ftp-account options that can be used to\n"
-" set up transfers through many FTP proxies. For example, a file can be\n"
-, stdout);
- fputs(
-" uploaded to a remote FTP server using a Blue Coat FTP proxy with the\n"
-" options:\n"
-"\n"
-" curl -u \"Remote-FTP-Username@remote.ftp.server Proxy-Username:Remote-Pass\" \\\n"
-" --ftp-account Proxy-Password --upload-file local-file \\\n"
-" ftp://my-ftp.proxy.server:21/remote/upload/path/\n"
-"\n"
-" See the manual for your FTP proxy to determine the form it expects to set up\n"
-" transfers, and curl's -v option to see exactly what curl is sending.\n"
-"\n"
-"RANGES\n"
-"\n"
-" HTTP 1.1 introduced byte-ranges. Using this, a client can request\n"
-, stdout);
- fputs(
-" to get only one or more subparts of a specified document. Curl supports\n"
-" this with the -r flag.\n"
-"\n"
-" Get the first 100 bytes of a document:\n"
-"\n"
-" curl -r 0-99 http://www.get.this/\n"
-"\n"
-" Get the last 500 bytes of a document:\n"
-"\n"
-" curl -r -500 http://www.get.this/\n"
-"\n"
-" Curl also supports simple ranges for FTP files as well. Then you can only\n"
-" specify start and stop position.\n"
-"\n"
-" Get the first 100 bytes of a document using FTP:\n"
-"\n"
-" curl -r 0-99 ftp://www.get.this/README\n"
-"\n"
-"UPLOADING\n"
-"\n"
-, stdout);
- fputs(
-" FTP / FTPS / SFTP / SCP\n"
-"\n"
-" Upload all data on stdin to a specified server:\n"
-"\n"
-" curl -T - ftp://ftp.upload.com/myfile\n"
-"\n"
-" Upload data from a specified file, login with user and password:\n"
-"\n"
-" curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile\n"
-"\n"
-" Upload a local file to the remote site, and use the local file name at the remote\n"
-" site too:\n"
-"\n"
-" curl -T uploadfile -u user:passwd ftp://ftp.upload.com/\n"
-"\n"
-" Upload a local file to get appended to the remote file:\n"
-"\n"
-, stdout);
- fputs(
-" curl -T localfile -a ftp://ftp.upload.com/remotefile\n"
-"\n"
-" Curl also supports ftp upload through a proxy, but only if the proxy is\n"
-" configured to allow that kind of tunneling. If it does, you can run curl in\n"
-" a fashion similar to:\n"
-"\n"
-" curl --proxytunnel -x proxy:port -T localfile ftp.upload.com\n"
-"\n"
-" HTTP\n"
-"\n"
-" Upload all data on stdin to a specified HTTP site:\n"
-"\n"
-" curl -T - http://www.upload.com/myfile\n"
-"\n"
-" Note that the HTTP server must have been configured to accept PUT before\n"
-, stdout);
- fputs(
-" this can be done successfully.\n"
-"\n"
-" For other ways to do HTTP data upload, see the POST section below.\n"
-"\n"
-"VERBOSE / DEBUG\n"
-"\n"
-" If curl fails where it isn't supposed to, if the servers don't let you in,\n"
-" if you can't understand the responses: use the -v flag to get verbose\n"
-" fetching. Curl will output lots of info and what it sends and receives in\n"
-" order to let the user see all client-server interaction (but it won't show\n"
-" you the actual data).\n"
-"\n"
-" curl -v ftp://ftp.upload.com/\n"
-"\n"
-, stdout);
- fputs(
-" To get even more details and information on what curl does, try using the\n"
-" --trace or --trace-ascii options with a given file name to log to, like\n"
-" this:\n"
-"\n"
-" curl --trace trace.txt www.haxx.se\n"
-"\n"
-"\n"
-"DETAILED INFORMATION\n"
-"\n"
-" Different protocols provide different ways of getting detailed information\n"
-" about specific files/documents. To get curl to show detailed information\n"
-" about a single file, you should use -I/--head option. It displays all\n"
-, stdout);
- fputs(
-" available info on a single file for HTTP and FTP. The HTTP information is a\n"
-" lot more extensive.\n"
-"\n"
-" For HTTP, you can get the header information (the same as -I would show)\n"
-" shown before the data by using -i/--include. Curl understands the\n"
-" -D/--dump-header option when getting files from both FTP and HTTP, and it\n"
-" will then store the headers in the specified file.\n"
-"\n"
-" Store the HTTP headers in a separate file (headers.txt in the example):\n"
-"\n"
-, stdout);
- fputs(
-" curl --dump-header headers.txt curl.haxx.se\n"
-"\n"
-" Note that headers stored in a separate file can be very useful at a later\n"
-" time if you want curl to use cookies sent by the server. More about that in\n"
-" the cookies section.\n"
-"\n"
-"POST (HTTP)\n"
-"\n"
-" It's easy to post data using curl. This is done using the -d <data>\n"
-" option. The post data must be urlencoded.\n"
-"\n"
-" Post a simple \"name\" and \"phone\" guestbook.\n"
-"\n"
-" curl -d \"name=Rafael%20Sagula&phone=3320780\" \\\n"
-, stdout);
- fputs(
-" http://www.where.com/guest.cgi\n"
-"\n"
-" How to post a form with curl, lesson #1:\n"
-"\n"
-" Dig out all the <input> tags in the form that you want to fill in. (There's\n"
-" a perl program called formfind.pl on the curl site that helps with this).\n"
-"\n"
-" If there's a \"normal\" post, you use -d to post. -d takes a full \"post\n"
-" string\", which is in the format\n"
-"\n"
-" <variable1>=<data1>&<variable2>=<data2>&...\n"
-"\n"
-" The 'variable' names are the names set with \"name=\" in the <input> tags, and\n"
-, stdout);
- fputs(
-" the data is the contents you want to fill in for the inputs. The data *must*\n"
-" be properly URL encoded. That means you replace space with + and that you\n"
-" replace weird letters with %XX where XX is the hexadecimal representation of\n"
-" the letter's ASCII code.\n"
-"\n"
-" Example:\n"
-"\n"
-" (page located at http://www.formpost.com/getthis/\n"
-"\n"
-" <form action=\"post.cgi\" method=\"post\">\n"
-" <input name=user size=10>\n"
-" <input name=pass type=password size=10>\n"
-, stdout);
- fputs(
-" <input name=id type=hidden value=\"blablabla\">\n"
-" <input name=ding value=\"submit\">\n"
-" </form>\n"
-"\n"
-" We want to enter user 'foobar' with password '12345'.\n"
-"\n"
-" To post to this, you enter a curl command line like:\n"
-"\n"
-" curl -d \"user=foobar&pass=12345&id=blablabla&ding=submit\" (continues)\n"
-" http://www.formpost.com/getthis/post.cgi\n"
-"\n"
-"\n"
-" While -d uses the application/x-www-form-urlencoded mime-type, generally\n"
-, stdout);
- fputs(
-" understood by CGI's and similar, curl also supports the more capable\n"
-" multipart/form-data type. This latter type supports things like file upload.\n"
-"\n"
-" -F accepts parameters like -F \"name=contents\". If you want the contents to\n"
-" be read from a file, use <@filename> as contents. When specifying a file,\n"
-" you can also specify the file content type by appending ';type=<mime type>'\n"
-" to the file name. You can also post the contents of several files in one\n"
-, stdout);
- fputs(
-" field. For example, the field name 'coolfiles' is used to send three files,\n"
-" with different content types using the following syntax:\n"
-"\n"
-" curl -F \"coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html\" \\\n"
-" http://www.post.com/postit.cgi\n"
-"\n"
-" If the content-type is not specified, curl will try to guess from the file\n"
-" extension (it only knows a few), or use the previously specified type (from\n"
-" an earlier file if several files are specified in a list) or else it will\n"
-, stdout);
- fputs(
-" use the default type 'application/octet-stream'.\n"
-"\n"
-" Emulate a fill-in form with -F. Let's say you fill in three fields in a\n"
-" form. One field is a file name which to post, one field is your name and one\n"
-" field is a file description. We want to post the file we have written named\n"
-" \"cooltext.txt\". To let curl do the posting of this data instead of your\n"
-" favourite browser, you have to read the HTML source of the form page and\n"
-, stdout);
- fputs(
-" find the names of the input fields. In our example, the input field names\n"
-" are 'file', 'yourname' and 'filedescription'.\n"
-"\n"
-" curl -F \"file=@cooltext.txt\" -F \"yourname=Daniel\" \\\n"
-" -F \"filedescription=Cool text file with cool text inside\" \\\n"
-" http://www.post.com/postit.cgi\n"
-"\n"
-" To send two files in one post you can do it in two ways:\n"
-"\n"
-" 1. Send multiple files in a single \"field\" with a single field name:\n"
-"\n"
-" curl -F \"pictures=@dog.gif,cat.gif\"\n"
-"\n"
-, stdout);
- fputs(
-" 2. Send two fields with two field names:\n"
-"\n"
-" curl -F \"docpicture=@dog.gif\" -F \"catpicture=@cat.gif\"\n"
-"\n"
-" To send a field value literally without interpreting a leading '@'\n"
-" or '<', or an embedded ';type=', use --form-string instead of\n"
-" -F. This is recommended when the value is obtained from a user or\n"
-" some other unpredictable source. Under these circumstances, using\n"
-" -F instead of --form-string would allow a user to trick curl into\n"
-" uploading a file.\n"
-"\n"
-"REFERRER\n"
-"\n"
-, stdout);
- fputs(
-" An HTTP request has the option to include information about which address\n"
-" referred it to the actual page. Curl allows you to specify the\n"
-" referrer to be used on the command line. It is especially useful to\n"
-" fool or trick stupid servers or CGI scripts that rely on that information\n"
-" being available or contain certain data.\n"
-"\n"
-" curl -e www.coolsite.com http://www.showme.com/\n"
-"\n"
-" NOTE: The Referer: [sic] field is defined in the HTTP spec to be a full URL.\n"
-"\n"
-"USER AGENT\n"
-"\n"
-, stdout);
- fputs(
-" An HTTP request has the option to include information about the browser\n"
-" that generated the request. Curl allows it to be specified on the command\n"
-" line. It is especially useful to fool or trick stupid servers or CGI\n"
-" scripts that only accept certain browsers.\n"
-"\n"
-" Example:\n"
-"\n"
-" curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/\n"
-"\n"
-" Other common strings:\n"
-" 'Mozilla/3.0 (Win95; I)' Netscape Version 3 for Windows 95\n"
-, stdout);
- fputs(
-" 'Mozilla/3.04 (Win95; U)' Netscape Version 3 for Windows 95\n"
-" 'Mozilla/2.02 (OS/2; U)' Netscape Version 2 for OS/2\n"
-" 'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)' NS for AIX\n"
-" 'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)' NS for Linux\n"
-"\n"
-" Note that Internet Explorer tries hard to be compatible in every way:\n"
-" 'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)' MSIE for W95\n"
-"\n"
-" Mozilla is not the only possible User-Agent name:\n"
-, stdout);
- fputs(
-" 'Konqueror/1.0' KDE File Manager desktop client\n"
-" 'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser\n"
-"\n"
-"COOKIES\n"
-"\n"
-" Cookies are generally used by web servers to keep state information at the\n"
-" client's side. The server sets cookies by sending a response line in the\n"
-" headers that looks like 'Set-Cookie: <data>' where the data part then\n"
-" typically contains a set of NAME=VALUE pairs (separated by semicolons ';'\n"
-, stdout);
- fputs(
-" like \"NAME1=VALUE1; NAME2=VALUE2;\"). The server can also specify for what\n"
-" path the \"cookie\" should be used for (by specifying \"path=value\"), when the\n"
-" cookie should expire (\"expire=DATE\"), for what domain to use it\n"
-" (\"domain=NAME\") and if it should be used on secure connections only\n"
-" (\"secure\").\n"
-"\n"
-" If you've received a page from a server that contains a header like:\n"
-" Set-Cookie: sessionid=boo123; path=\"/foo\";\n"
-"\n"
-, stdout);
- fputs(
-" it means the server wants that first pair passed on when we get anything in\n"
-" a path beginning with \"/foo\".\n"
-"\n"
-" Example, get a page that wants my name passed in a cookie:\n"
-"\n"
-" curl -b \"name=Daniel\" www.sillypage.com\n"
-"\n"
-" Curl also has the ability to use previously received cookies in following\n"
-" sessions. If you get cookies from a server and store them in a file in a\n"
-" manner similar to:\n"
-"\n"
-" curl --dump-header headers www.example.com\n"
-"\n"
-, stdout);
- fputs(
-" ... you can then in a second connect to that (or another) site, use the\n"
-" cookies from the 'headers' file like:\n"
-"\n"
-" curl -b headers www.example.com\n"
-"\n"
-" While saving headers to a file is a working way to store cookies, it is\n"
-" however error-prone and not the preferred way to do this. Instead, make curl\n"
-" save the incoming cookies using the well-known netscape cookie format like\n"
-" this:\n"
-"\n"
-" curl -c cookies.txt www.example.com\n"
-"\n"
-, stdout);
- fputs(
-" Note that by specifying -b you enable the \"cookie awareness\" and with -L\n"
-" you can make curl follow a location: (which often is used in combination\n"
-" with cookies). So that if a site sends cookies and a location, you can\n"
-" use a non-existing file to trigger the cookie awareness like:\n"
-"\n"
-" curl -L -b empty.txt www.example.com\n"
-"\n"
-" The file to read cookies from must be formatted using plain HTTP headers OR\n"
-" as netscape's cookie file. Curl will determine what kind it is based on the\n"
-, stdout);
- fputs(
-" file contents. In the above command, curl will parse the header and store\n"
-" the cookies received from www.example.com. curl will send to the server the\n"
-" stored cookies which match the request as it follows the location. The\n"
-" file \"empty.txt\" may be a nonexistent file.\n"
-"\n"
-" Alas, to both read and write cookies from a netscape cookie file, you can\n"
-" set both -b and -c to use the same file:\n"
-"\n"
-" curl -b cookies.txt -c cookies.txt www.example.com\n"
-"\n"
-"PROGRESS METER\n"
-"\n"
-, stdout);
- fputs(
-" The progress meter exists to show a user that something actually is\n"
-" happening. The different fields in the output have the following meaning:\n"
-"\n"
-" % Total % Received % Xferd Average Speed Time Curr.\n"
-" Dload Upload Total Current Left Speed\n"
-" 0 151M 0 38608 0 0 9406 0 4:41:43 0:00:04 4:41:39 9287\n"
-"\n"
-" From left-to-right:\n"
-" % - percentage completed of the whole transfer\n"
-, stdout);
- fputs(
-" Total - total size of the whole expected transfer\n"
-" % - percentage completed of the download\n"
-" Received - currently downloaded amount of bytes\n"
-" % - percentage completed of the upload\n"
-" Xferd - currently uploaded amount of bytes\n"
-" Average Speed\n"
-" Dload - the average transfer speed of the download\n"
-" Average Speed\n"
-" Upload - the average transfer speed of the upload\n"
-" Time Total - expected time to complete the operation\n"
-, stdout);
- fputs(
-" Time Current - time passed since the invoke\n"
-" Time Left - expected time left to completion\n"
-" Curr.Speed - the average transfer speed the last 5 seconds (the first\n"
-" 5 seconds of a transfer is based on less time of course.)\n"
-"\n"
-" The -# option will display a totally different progress bar that doesn't\n"
-" need much explanation!\n"
-"\n"
-"SPEED LIMIT\n"
-"\n"
-" Curl allows the user to set the transfer speed conditions that must be met\n"
-, stdout);
- fputs(
-" to let the transfer keep going. By using the switch -y and -Y you\n"
-" can make curl abort transfers if the transfer speed is below the specified\n"
-" lowest limit for a specified time.\n"
-"\n"
-" To have curl abort the download if the speed is slower than 3000 bytes per\n"
-" second for 1 minute, run:\n"
-"\n"
-" curl -Y 3000 -y 60 www.far-away-site.com\n"
-"\n"
-" This can very well be used in combination with the overall time limit, so\n"
-" that the above operation must be completed in whole within 30 minutes:\n"
-"\n"
-, stdout);
- fputs(
-" curl -m 1800 -Y 3000 -y 60 www.far-away-site.com\n"
-"\n"
-" Forcing curl not to transfer data faster than a given rate is also possible,\n"
-" which might be useful if you're using a limited bandwidth connection and you\n"
-" don't want your transfer to use all of it (sometimes referred to as\n"
-" \"bandwidth throttle\").\n"
-"\n"
-" Make curl transfer data no faster than 10 kilobytes per second:\n"
-"\n"
-" curl --limit-rate 10K www.far-away-site.com\n"
-"\n"
-" or\n"
-"\n"
-" curl --limit-rate 10240 www.far-away-site.com\n"
-"\n"
-, stdout);
- fputs(
-" Or prevent curl from uploading data faster than 1 megabyte per second:\n"
-"\n"
-" curl -T upload --limit-rate 1M ftp://uploadshereplease.com\n"
-"\n"
-" When using the --limit-rate option, the transfer rate is regulated on a\n"
-" per-second basis, which will cause the total transfer speed to become lower\n"
-" than the given number. Sometimes of course substantially lower, if your\n"
-" transfer stalls during periods.\n"
-"\n"
-"CONFIG FILE\n"
-"\n"
-" Curl automatically tries to read the .curlrc file (or _curlrc file on win32\n"
-, stdout);
- fputs(
-" systems) from the user's home dir on startup.\n"
-"\n"
-" The config file could be made up with normal command line switches, but you\n"
-" can also specify the long options without the dashes to make it more\n"
-" readable. You can separate the options and the parameter with spaces, or\n"
-" with = or :. Comments can be used within the file. If the first letter on a\n"
-" line is a '#'-symbol the rest of the line is treated as a comment.\n"
-"\n"
-" If you want the parameter to contain spaces, you must enclose the entire\n"
-, stdout);
- fputs(
-" parameter within double quotes (\"). Within those quotes, you specify a\n"
-" quote as \\\".\n"
-"\n"
-" NOTE: You must specify options and their arguments on the same line.\n"
-"\n"
-" Example, set default time out and proxy in a config file:\n"
-"\n"
-" # We want a 30 minute timeout:\n"
-" -m 1800\n"
-" # ... and we use a proxy for all accesses:\n"
-" proxy = proxy.our.domain.com:8080\n"
-"\n"
-" White spaces ARE significant at the end of lines, but all white spaces\n"
-, stdout);
- fputs(
-" leading up to the first characters of each line are ignored.\n"
-"\n"
-" Prevent curl from reading the default file by using -q as the first command\n"
-" line parameter, like:\n"
-"\n"
-" curl -q www.thatsite.com\n"
-"\n"
-" Force curl to get and display a local help page in case it is invoked\n"
-" without URL by making a config file similar to:\n"
-"\n"
-" # default url to get\n"
-" url = \"http://help.with.curl.com/curlhelp.html\"\n"
-"\n"
-" You can specify another config file to be read by using the -K/--config\n"
-, stdout);
- fputs(
-" flag. If you set config file name to \"-\" it'll read the config from stdin,\n"
-" which can be handy if you want to hide options from being visible in process\n"
-" tables etc:\n"
-"\n"
-" echo \"user = user:passwd\" | curl -K - http://that.secret.site.com\n"
-"\n"
-"EXTRA HEADERS\n"
-"\n"
-" When using curl in your own very special programs, you may end up needing\n"
-" to pass on your own custom headers when getting a web page. You can do\n"
-" this by using the -H flag.\n"
-"\n"
-, stdout);
- fputs(
-" Example, send the header \"X-you-and-me: yes\" to the server when getting a\n"
-" page:\n"
-"\n"
-" curl -H \"X-you-and-me: yes\" www.love.com\n"
-"\n"
-" This can also be useful in case you want curl to send a different text in a\n"
-" header than it normally does. The -H header you specify then replaces the\n"
-" header curl would normally send. If you replace an internal header with an\n"
-" empty one, you prevent that header from being sent. To prevent the Host:\n"
-" header from being used:\n"
-"\n"
-, stdout);
- fputs(
-" curl -H \"Host:\" www.server.com\n"
-"\n"
-"FTP and PATH NAMES\n"
-"\n"
-" Do note that when getting files with the ftp:// URL, the given path is\n"
-" relative the directory you enter. To get the file 'README' from your home\n"
-" directory at your ftp site, do:\n"
-"\n"
-" curl ftp://user:passwd@my.site.com/README\n"
-"\n"
-" But if you want the README file from the root directory of that very same\n"
-" site, you need to specify the absolute file name:\n"
-"\n"
-" curl ftp://user:passwd@my.site.com//README\n"
-"\n"
-, stdout);
- fputs(
-" (I.e with an extra slash in front of the file name.)\n"
-"\n"
-"SFTP and SCP and PATH NAMES\n"
-"\n"
-" With sftp: and scp: URLs, the path name given is the absolute name on the\n"
-" server. To access a file relative to the remote user's home directory,\n"
-" prefix the file with /~/ , such as:\n"
-"\n"
-" curl -u $USER sftp://home.example.com/~/.bashrc\n"
-"\n"
-"FTP and firewalls\n"
-"\n"
-" The FTP protocol requires one of the involved parties to open a second\n"
-, stdout);
- fputs(
-" connection as soon as data is about to get transferred. There are two ways to\n"
-" do this.\n"
-"\n"
-" The default way for curl is to issue the PASV command which causes the\n"
-" server to open another port and await another connection performed by the\n"
-" client. This is good if the client is behind a firewall that doesn't allow\n"
-" incoming connections.\n"
-"\n"
-" curl ftp.download.com\n"
-"\n"
-" If the server, for example, is behind a firewall that doesn't allow connections\n"
-, stdout);
- fputs(
-" on ports other than 21 (or if it just doesn't support the PASV command), the\n"
-" other way to do it is to use the PORT command and instruct the server to\n"
-" connect to the client on the given IP number and port (as parameters to the\n"
-" PORT command).\n"
-"\n"
-" The -P flag to curl supports a few different options. Your machine may have\n"
-" several IP-addresses and/or network interfaces and curl allows you to select\n"
-" which of them to use. Default address can also be used:\n"
-"\n"
-, stdout);
- fputs(
-" curl -P - ftp.download.com\n"
-"\n"
-" Download with PORT but use the IP address of our 'le0' interface (this does\n"
-" not work on windows):\n"
-"\n"
-" curl -P le0 ftp.download.com\n"
-"\n"
-" Download with PORT but use 192.168.0.10 as our IP address to use:\n"
-"\n"
-" curl -P 192.168.0.10 ftp.download.com\n"
-"\n"
-"NETWORK INTERFACE\n"
-"\n"
-" Get a web page from a server using a specified port for the interface:\n"
-"\n"
-" curl --interface eth0:1 http://www.netscape.com/\n"
-"\n"
-" or\n"
-"\n"
-, stdout);
- fputs(
-" curl --interface 192.168.1.10 http://www.netscape.com/\n"
-"\n"
-"HTTPS\n"
-"\n"
-" Secure HTTP requires SSL libraries to be installed and used when curl is\n"
-" built. If that is done, curl is capable of retrieving and posting documents\n"
-" using the HTTPS protocol.\n"
-"\n"
-" Example:\n"
-"\n"
-" curl https://www.secure-site.com\n"
-"\n"
-" Curl is also capable of using your personal certificates to get/post files\n"
-" from sites that require valid certificates. The only drawback is that the\n"
-, stdout);
- fputs(
-" certificate needs to be in PEM-format. PEM is a standard and open format to\n"
-" store certificates with, but it is not used by the most commonly used\n"
-" browsers (Netscape and MSIE both use the so called PKCS#12 format). If you\n"
-" want curl to use the certificates you use with your (favourite) browser, you\n"
-" may need to download/compile a converter that can convert your browser's\n"
-" formatted certificates to PEM formatted ones. This kind of converter is\n"
-, stdout);
- fputs(
-" included in recent versions of OpenSSL, and for older versions Dr Stephen\n"
-" N. Henson has written a patch for SSLeay that adds this functionality. You\n"
-" can get his patch (that requires an SSLeay installation) from his site at:\n"
-" http://www.drh-consultancy.demon.co.uk/\n"
-"\n"
-" Example on how to automatically retrieve a document using a certificate with\n"
-" a personal password:\n"
-"\n"
-" curl -E /path/to/cert.pem:password https://secure.site.com/\n"
-"\n"
-, stdout);
- fputs(
-" If you neglect to specify the password on the command line, you will be\n"
-" prompted for the correct password before any data can be received.\n"
-"\n"
-" Many older SSL-servers have problems with SSLv3 or TLS, which newer versions\n"
-" of OpenSSL etc use, therefore it is sometimes useful to specify what\n"
-" SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL\n"
-" version to use (for SSLv3, SSLv2 or TLSv1 respectively):\n"
-"\n"
-" curl -2 https://secure.site.com/\n"
-"\n"
-, stdout);
- fputs(
-" Otherwise, curl will first attempt to use v3 and then v2.\n"
-"\n"
-" To use OpenSSL to convert your favourite browser's certificate into a PEM\n"
-" formatted one that curl can use, do something like this:\n"
-"\n"
-" In Netscape, you start with hitting the 'Security' menu button.\n"
-"\n"
-" Select 'certificates->yours' and then pick a certificate in the list\n"
-"\n"
-" Press the 'Export' button\n"
-"\n"
-" enter your PIN code for the certs\n"
-"\n"
-" select a proper place to save it\n"
-"\n"
-, stdout);
- fputs(
-" Run the 'openssl' application to convert the certificate. If you cd to the\n"
-" openssl installation, you can do it like:\n"
-"\n"
-" # ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile]\n"
-"\n"
-" In Firefox, select Options, then Advanced, then the Encryption tab,\n"
-" View Certificates. This opens the Certificate Manager, where you can\n"
-" Export. Be sure to select PEM for the Save as type.\n"
-"\n"
-" In Internet Explorer, select Internet Options, then the Content tab, then\n"
-, stdout);
- fputs(
-" Certificates. Then you can Export, and depending on the format you may\n"
-" need to convert to PEM.\n"
-"\n"
-" In Chrome, select Settings, then Show Advanced Settings. Under HTTPS/SSL\n"
-" select Manage Certificates.\n"
-"\n"
-"RESUMING FILE TRANSFERS\n"
-"\n"
-" To continue a file transfer where it was previously aborted, curl supports\n"
-" resume on HTTP(S) downloads as well as FTP uploads and downloads.\n"
-"\n"
-" Continue downloading a document:\n"
-"\n"
-" curl -C - -o file ftp://ftp.server.com/path/file\n"
-"\n"
-, stdout);
- fputs(
-" Continue uploading a document(*1):\n"
-"\n"
-" curl -C - -T file ftp://ftp.server.com/path/file\n"
-"\n"
-" Continue downloading a document from a web server(*2):\n"
-"\n"
-" curl -C - -o file http://www.server.com/\n"
-"\n"
-" (*1) = This requires that the FTP server supports the non-standard command\n"
-" SIZE. If it doesn't, curl will say so.\n"
-"\n"
-" (*2) = This requires that the web server supports at least HTTP/1.1. If it\n"
-" doesn't, curl will say so.\n"
-"\n"
-"TIME CONDITIONS\n"
-"\n"
-, stdout);
- fputs(
-" HTTP allows a client to specify a time condition for the document it\n"
-" requests. It is If-Modified-Since or If-Unmodified-Since. Curl allows you to\n"
-" specify them with the -z/--time-cond flag.\n"
-"\n"
-" For example, you can easily make a download that only gets performed if the\n"
-" remote file is newer than a local copy. It would be made like:\n"
-"\n"
-" curl -z local.html http://remote.server.com/remote.html\n"
-"\n"
-" Or you can download a file only if the local file is newer than the remote\n"
-, stdout);
- fputs(
-" one. Do this by prepending the date string with a '-', as in:\n"
-"\n"
-" curl -z -local.html http://remote.server.com/remote.html\n"
-"\n"
-" You can specify a \"free text\" date as condition. Tell curl to only download\n"
-" the file if it was updated since January 12, 2012:\n"
-"\n"
-" curl -z \"Jan 12 2012\" http://remote.server.com/remote.html\n"
-"\n"
-" Curl will then accept a wide range of date formats. You always make the date\n"
-" check the other way around by prepending it with a dash '-'.\n"
-"\n"
-"DICT\n"
-"\n"
-" For fun try\n"
-"\n"
-, stdout);
- fputs(
-" curl dict://dict.org/m:curl\n"
-" curl dict://dict.org/d:heisenbug:jargon\n"
-" curl dict://dict.org/d:daniel:web1913\n"
-"\n"
-" Aliases for 'm' are 'match' and 'find', and aliases for 'd' are 'define'\n"
-" and 'lookup'. For example,\n"
-"\n"
-" curl dict://dict.org/find:curl\n"
-"\n"
-" Commands that break the URL description of the RFC (but not the DICT\n"
-" protocol) are\n"
-"\n"
-" curl dict://dict.org/show:db\n"
-" curl dict://dict.org/show:strat\n"
-"\n"
-, stdout);
- fputs(
-" Authentication is still missing (but this is not required by the RFC)\n"
-"\n"
-"LDAP\n"
-"\n"
-" If you have installed the OpenLDAP library, curl can take advantage of it\n"
-" and offer ldap:// support.\n"
-"\n"
-" LDAP is a complex thing and writing an LDAP query is not an easy task. I do\n"
-" advise you to dig up the syntax description for that elsewhere. Two places\n"
-" that might suit you are:\n"
-"\n"
-" Netscape's \"Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10:\n"
-" Working with LDAP URLs\":\n"
-, stdout);
- fputs(
-" http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm\n"
-"\n"
-" RFC 2255, \"The LDAP URL Format\" http://curl.haxx.se/rfc/rfc2255.txt\n"
-"\n"
-" To show you an example, this is how I can get all people from my local LDAP\n"
-" server that has a certain sub-domain in their email address:\n"
-"\n"
-" curl -B \"ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se\"\n"
-"\n"
-" If I want the same info in HTML format, I can get it by not using the -B\n"
-" (enforce ASCII) flag.\n"
-"\n"
-"ENVIRONMENT VARIABLES\n"
-"\n"
-, stdout);
- fputs(
-" Curl reads and understands the following environment variables:\n"
-"\n"
-" http_proxy, HTTPS_PROXY, FTP_PROXY\n"
-"\n"
-" They should be set for protocol-specific proxies. General proxy should be\n"
-" set with\n"
-"\n"
-" ALL_PROXY\n"
-"\n"
-" A comma-separated list of host names that shouldn't go through any proxy is\n"
-" set in (only an asterisk, '*' matches all hosts)\n"
-"\n"
-" NO_PROXY\n"
-"\n"
-" If the host name matches one of these strings, or the host is within the\n"
-, stdout);
- fputs(
-" domain of one of these strings, transactions with that node will not be\n"
-" proxied.\n"
-"\n"
-"\n"
-" The usage of the -x/--proxy flag overrides the environment variables.\n"
-"\n"
-"NETRC\n"
-"\n"
-" Unix introduced the .netrc concept a long time ago. It is a way for a user\n"
-" to specify name and password for commonly visited FTP sites in a file so\n"
-" that you don't have to type them in each time you visit those sites. You\n"
-" realize this is a big security risk if someone else gets hold of your\n"
-, stdout);
- fputs(
-" passwords, so therefore most unix programs won't read this file unless it is\n"
-" only readable by yourself (curl doesn't care though).\n"
-"\n"
-" Curl supports .netrc files if told to (using the -n/--netrc and\n"
-" --netrc-optional options). This is not restricted to just FTP,\n"
-" so curl can use it for all protocols where authentication is used.\n"
-"\n"
-" A very simple .netrc file could look something like:\n"
-"\n"
-" machine curl.haxx.se login iamdaniel password mysecret\n"
-"\n"
-"CUSTOM OUTPUT\n"
-"\n"
-, stdout);
- fputs(
-" To better allow script programmers to get to know about the progress of\n"
-" curl, the -w/--write-out option was introduced. Using this, you can specify\n"
-" what information from the previous transfer you want to extract.\n"
-"\n"
-" To display the amount of bytes downloaded together with some text and an\n"
-" ending newline:\n"
-"\n"
-" curl -w 'We downloaded %{size_download} bytes\\n' www.download.com\n"
-"\n"
-"KERBEROS FTP TRANSFER\n"
-"\n"
-" Curl supports kerberos4 and kerberos5/GSSAPI for FTP transfers. You need\n"
-, stdout);
- fputs(
-" the kerberos package installed and used at curl build time for it to be\n"
-" available.\n"
-"\n"
-" First, get the krb-ticket the normal way, like with the kinit/kauth tool.\n"
-" Then use curl in way similar to:\n"
-"\n"
-" curl --krb private ftp://krb4site.com -u username:fakepwd\n"
-"\n"
-" There's no use for a password on the -u switch, but a blank one will make\n"
-" curl ask for one and you already entered the real password to kinit/kauth.\n"
-"\n"
-"TELNET\n"
-"\n"
-, stdout);
- fputs(
-" The curl telnet support is basic and very easy to use. Curl passes all data\n"
-" passed to it on stdin to the remote server. Connect to a remote telnet\n"
-" server using a command line similar to:\n"
-"\n"
-" curl telnet://remote.server.com\n"
-"\n"
-" And enter the data to pass to the server on stdin. The result will be sent\n"
-" to stdout or to the file you specify with -o.\n"
-"\n"
-" You might want the -N/--no-buffer option to switch off the buffered output\n"
-" for slow connections or similar.\n"
-"\n"
-, stdout);
- fputs(
-" Pass options to the telnet protocol negotiation, by using the -t option. To\n"
-" tell the server we use a vt100 terminal, try something like:\n"
-"\n"
-" curl -tTTYPE=vt100 telnet://remote.server.com\n"
-"\n"
-" Other interesting options for it -t include:\n"
-"\n"
-" - XDISPLOC=<X display> Sets the X display location.\n"
-"\n"
-" - NEW_ENV=<var,val> Sets an environment variable.\n"
-"\n"
-" NOTE: The telnet protocol does not specify any way to login with a specified\n"
-, stdout);
- fputs(
-" user and password so curl can't do that automatically. To do that, you need\n"
-" to track when the login prompt is received and send the username and\n"
-" password accordingly.\n"
-"\n"
-"PERSISTENT CONNECTIONS\n"
-"\n"
-" Specifying multiple files on a single command line will make curl transfer\n"
-" all of them, one after the other in the specified order.\n"
-"\n"
-" libcurl will attempt to use persistent connections for the transfers so that\n"
-" the second transfer to the same host can use the same connection that was\n"
-, stdout);
- fputs(
-" already initiated and was left open in the previous transfer. This greatly\n"
-" decreases connection time for all but the first transfer and it makes a far\n"
-" better use of the network.\n"
-"\n"
-" Note that curl cannot use persistent connections for transfers that are used\n"
-" in subsequence curl invokes. Try to stuff as many URLs as possible on the\n"
-" same command line if they are using the same host, as that'll make the\n"
-" transfers faster. If you use an HTTP proxy for file transfers, practically\n"
-, stdout);
- fputs(
-" all transfers will be persistent.\n"
-"\n"
-"MULTIPLE TRANSFERS WITH A SINGLE COMMAND LINE\n"
-"\n"
-" As is mentioned above, you can download multiple files with one command line\n"
-" by simply adding more URLs. If you want those to get saved to a local file\n"
-" instead of just printed to stdout, you need to add one save option for each\n"
-" URL you specify. Note that this also goes for the -O option (but not\n"
-" --remote-name-all).\n"
-"\n"
-" For example: get two files and use -O for the first and a custom file\n"
-, stdout);
- fputs(
-" name for the second:\n"
-"\n"
-" curl -O http://url.com/file.txt ftp://ftp.com/moo.exe -o moo.jpg\n"
-"\n"
-" You can also upload multiple files in a similar fashion:\n"
-"\n"
-" curl -T local1 ftp://ftp.com/moo.exe -T local2 ftp://ftp.com/moo2.txt\n"
-"\n"
-"IPv6\n"
-"\n"
-" curl will connect to a server with IPv6 when a host lookup returns an IPv6\n"
-" address and fall back to IPv4 if the connection fails. The --ipv4 and --ipv6\n"
-" options can specify which address to use when both are available. IPv6\n"
-, stdout);
- fputs(
-" addresses can also be specified directly in URLs using the syntax:\n"
-"\n"
-" http://[2001:1890:1112:1::20]/overview.html\n"
-"\n"
-" When this style is used, the -g option must be given to stop curl from\n"
-" interpreting the square brackets as special globbing characters. Link local\n"
-" and site local addresses including a scope identifier, such as fe80::1234%1,\n"
-" may also be used, but the scope portion must be numeric or match an existing\n"
-, stdout);
- fputs(
-" network interface on Linux and the percent character must be URL escaped. The\n"
-" previous example in an SFTP URL might look like:\n"
-"\n"
-" sftp://[fe80::1234%251]/\n"
-"\n"
-" IPv6 addresses provided other than in URLs (e.g. to the --proxy, --interface\n"
-" or --ftp-port options) should not be URL encoded.\n"
-"\n"
-"METALINK\n"
-"\n"
-" Curl supports Metalink (both version 3 and 4 (RFC 5854) are supported), a way\n"
-" to list multiple URIs and hashes for a file. Curl will make use of the mirrors\n"
-, stdout);
- fputs(
-" listed within for failover if there are errors (such as the file or server not\n"
-" being available). It will also verify the hash of the file after the download\n"
-" completes. The Metalink file itself is downloaded and processed in memory and\n"
-" not stored in the local file system.\n"
-"\n"
-" Example to use a remote Metalink file:\n"
-"\n"
-" curl --metalink http://www.example.com/example.metalink\n"
-"\n"
-" To use a Metalink file in the local file system, use FILE protocol (file://):\n"
-"\n"
-, stdout);
- fputs(
-" curl --metalink file://example.metalink\n"
-"\n"
-" Please note that if FILE protocol is disabled, there is no way to use a local\n"
-" Metalink file at the time of this writing. Also note that if --metalink and\n"
-" --include are used together, --include will be ignored. This is because including\n"
-" headers in the response will break Metalink parser and if the headers are included\n"
-" in the file described in Metalink file, hash check will fail.\n"
-"\n"
-"MAILING LISTS\n"
-"\n"
-, stdout);
- fputs(
-" For your convenience, we have several open mailing lists to discuss curl,\n"
-" its development and things relevant to this. Get all info at\n"
-" http://curl.haxx.se/mail/. Some of the lists available are:\n"
-"\n"
-" curl-users\n"
-"\n"
-" Users of the command line tool. How to use it, what doesn't work, new\n"
-" features, related tools, questions, news, installations, compilations,\n"
-" running, porting etc.\n"
-"\n"
-" curl-library\n"
-"\n"
-" Developers using or developing libcurl. Bugs, extensions, improvements.\n"
-"\n"
-, stdout);
- fputs(
-" curl-announce\n"
-"\n"
-" Low-traffic. Only receives announcements of new public versions. At worst,\n"
-" that makes something like one or two mails per month, but usually only one\n"
-" mail every second month.\n"
-"\n"
-" curl-and-php\n"
-"\n"
-" Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP\n"
-" with a curl angle.\n"
-"\n"
-" curl-and-python\n"
-"\n"
-" Python hackers using curl with or without the python binding pycurl.\n"
-"\n"
-" Please direct curl questions, feature requests and trouble reports to one of\n"
-, stdout);
- fputs(
-" these mailing lists instead of mailing any individual.\n"
-, stdout) ;
-}
-#else /* !USE_MANUAL */
-/* built-in manual is disabled, blank function */
-#include "tool_hugehelp.h"
-void hugehelp(void) {}
-#endif /* USE_MANUAL */
-#else
-/*
- * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
- * Generation time: Wed Sep 10 00:40:56 2014
- */
-#ifdef USE_MANUAL
-#include "tool_hugehelp.h"
-#include <zlib.h>
-#include "memdebug.h" /* keep this as LAST include */
-static const unsigned char hugehelpgz[] = {
- /* This mumbo-jumbo is the huge help text compressed with gzip.
- Thanks to this operation, the size of this data shrunk from 158943
- to 48006 bytes. You can disable the use of compressed help
- texts by NOT passing -c to the mkhelp.pl tool. */
- 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd,
- 0x6b, 0x7b, 0xe3, 0x46, 0x92, 0x2e, 0xf8, 0x5d, 0xbf, 0x02, 0xcd, 0xde,
- 0x1e, 0x49, 0xd3, 0x24, 0x75, 0xa9, 0x8b, 0x5d, 0xea, 0x2a, 0x8f, 0x65,
- 0x49, 0x65, 0x6b, 0xac, 0x2a, 0xe9, 0x88, 0x2a, 0xdb, 0x7d, 0x6c, 0x3f,
- 0xf5, 0x80, 0x24, 0x24, 0xa1, 0x45, 0x02, 0x6c, 0x00, 0xd4, 0xa5, 0x67,
- 0xe6, 0xfc, 0xf6, 0xcd, 0x78, 0x23, 0x22, 0x33, 0x81, 0x4c, 0x4a, 0x65,
- 0x1f, 0xbb, 0x77, 0xf6, 0xec, 0x7a, 0xa6, 0x55, 0x12, 0x09, 0xe4, 0x35,
- 0x32, 0x32, 0xae, 0x6f, 0x24, 0xc9, 0x53, 0xff, 0x7d, 0xc4, 0xff, 0x3e,
- 0x9a, 0xff, 0xcc, 0xbf, 0x6b, 0x49, 0x72, 0x56, 0x95, 0x7f, 0xcb, 0x26,
- 0x4d, 0xfc, 0xd9, 0x8f, 0x1f, 0xff, 0x33, 0xe1, 0xff, 0x33, 0xef, 0xfc,
- 0x64, 0xfe, 0x5d, 0x7b, 0xb4, 0xed, 0xad, 0xc4, 0xbd, 0xf0, 0x9f, 0x1f,
- 0x37, 0x93, 0xa7, 0x5e, 0xf8, 0xcf, 0x64, 0x03, 0x2f, 0x7c, 0x94, 0x1e,
- 0x5e, 0xd3, 0xef, 0x1f, 0x3f, 0x3e, 0xde, 0xc9, 0x4f, 0x34, 0x2a, 0xfa,
- 0xb1, 0x45, 0xef, 0xfd, 0xf4, 0x91, 0x7e, 0x35, 0x9f, 0xac, 0xad, 0xbd,
- 0xdf, 0x7f, 0x77, 0xa4, 0xaf, 0x4e, 0x96, 0xd5, 0x2c, 0x19, 0x24, 0x4d,
- 0x95, 0x16, 0xf5, 0x65, 0x56, 0x25, 0x69, 0xf2, 0xe1, 0xfc, 0x64, 0x6d,
- 0x6d, 0xf4, 0xd7, 0xf7, 0xa7, 0x67, 0xa3, 0xe3, 0x51, 0xeb, 0xb1, 0x1f,
- 0xcb, 0x45, 0x93, 0x97, 0x45, 0xfd, 0x73, 0xf2, 0xa3, 0x79, 0x68, 0x38,
- 0x1c, 0xfe, 0xbc, 0xb6, 0x76, 0x78, 0x34, 0x3a, 0x38, 0x3f, 0x3e, 0xbb,
- 0x38, 0x3e, 0x7d, 0xdf, 0x7a, 0x36, 0xc9, 0xeb, 0xc4, 0x34, 0xd6, 0x94,
- 0xe5, 0xcc, 0xfc, 0x70, 0xed, 0x4f, 0xd3, 0x26, 0x4d, 0x2e, 0xab, 0x72,
- 0x9e, 0x94, 0x15, 0x7d, 0x91, 0x26, 0x75, 0x56, 0xdd, 0x66, 0x55, 0x3f,
- 0x59, 0xd6, 0x79, 0x71, 0x95, 0x94, 0x45, 0x96, 0x94, 0x97, 0x49, 0x73,
- 0x9d, 0x69, 0x73, 0xf5, 0x72, 0xb1, 0x28, 0xab, 0x26, 0x9b, 0x26, 0x8b,
- 0xaa, 0x6c, 0xca, 0x49, 0x39, 0xab, 0x93, 0x8d, 0xc3, 0xe3, 0x83, 0x8b,
- 0x7e, 0xf2, 0xf6, 0xf8, 0xe4, 0xc8, 0xfc, 0xbc, 0x38, 0xc3, 0x8f, 0x51,
- 0x3f, 0xf9, 0xfa, 0xf4, 0xec, 0x9b, 0xa3, 0xf3, 0x7e, 0xf2, 0xcd, 0x05,
- 0x7d, 0x46, 0x3f, 0xcd, 0x87, 0xc9, 0xf1, 0xbb, 0xfd, 0xb3, 0xbe, 0x36,
- 0x47, 0x7f, 0xd0, 0x87, 0x27, 0x87, 0xe6, 0x43, 0xfe, 0x87, 0xfe, 0x3c,
- 0x3b, 0x3d, 0x7b, 0xd6, 0xc7, 0x4f, 0xf3, 0xd7, 0xf9, 0xc5, 0xbb, 0x33,
- 0xfa, 0x39, 0x32, 0x3f, 0x47, 0x07, 0xf4, 0x03, 0x7d, 0x8c, 0xde, 0xe9,
- 0xcf, 0x91, 0x6d, 0xee, 0xe2, 0xe8, 0xe4, 0xfd, 0xd1, 0x45, 0x92, 0x16,
- 0xd3, 0xe4, 0xc2, 0x3c, 0xb4, 0x39, 0x34, 0x1f, 0x5d, 0x67, 0xc9, 0xa4,
- 0x9c, 0xcf, 0xe9, 0x33, 0xb3, 0x0a, 0xd3, 0xac, 0xce, 0xaf, 0x0a, 0x33,
- 0x7c, 0x33, 0xdb, 0xbb, 0xb2, 0xba, 0x49, 0xee, 0xf2, 0xe6, 0xba, 0x5c,
- 0x36, 0x66, 0xc2, 0x66, 0x3d, 0x92, 0xbc, 0x68, 0xb2, 0x6a, 0xa0, 0xcd,
- 0xa5, 0x13, 0x5a, 0xe1, 0xe1, 0x5a, 0x6b, 0x2d, 0xcb, 0x4b, 0xb3, 0x72,
- 0xb5, 0x59, 0xaa, 0xf1, 0xb2, 0x9e, 0x95, 0xe9, 0x94, 0x16, 0xc8, 0xbc,
- 0x7c, 0xb9, 0x34, 0x4b, 0x5b, 0xe5, 0x93, 0x9b, 0x3a, 0x99, 0xe5, 0x37,
- 0x19, 0x2d, 0xcf, 0xfd, 0x83, 0x2e, 0x57, 0x9f, 0x9b, 0x4f, 0x97, 0x66,
- 0x25, 0x0b, 0xdb, 0x7c, 0x93, 0x4f, 0x52, 0xea, 0x00, 0xeb, 0x95, 0x2c,
- 0x17, 0xd4, 0x1a, 0xaf, 0x53, 0xb2, 0x28, 0x6b, 0xf3, 0xd2, 0x68, 0x74,
- 0x62, 0xc6, 0x5e, 0x14, 0x19, 0xc6, 0x51, 0xf7, 0xcd, 0x1f, 0xe5, 0x4d,
- 0x9e, 0x99, 0x5f, 0x2e, 0xf3, 0x59, 0x96, 0xf0, 0x3e, 0xda, 0xe6, 0x68,
- 0x43, 0x93, 0x2a, 0xab, 0x97, 0xf3, 0xcc, 0x2c, 0xe1, 0xbb, 0xac, 0x49,
- 0x67, 0x79, 0x71, 0x63, 0x7e, 0xa5, 0xa9, 0xcf, 0xcb, 0x2a, 0x1b, 0x26,
- 0xfb, 0x75, 0xf2, 0x50, 0x2e, 0xcd, 0x9c, 0x67, 0x33, 0xb3, 0xd3, 0x59,
- 0x32, 0xce, 0x66, 0xe5, 0x5d, 0x9f, 0xf6, 0x37, 0x29, 0x96, 0xf3, 0xb1,
- 0x69, 0xa0, 0xbc, 0x74, 0xcd, 0xa5, 0xcd, 0xd2, 0x34, 0xc7, 0x4f, 0xcf,
- 0x53, 0x33, 0x27, 0xf3, 0x6e, 0x95, 0x5c, 0x67, 0x66, 0xce, 0xf5, 0x22,
- 0x2f, 0xfe, 0xd0, 0x5e, 0x17, 0xb3, 0xb8, 0x8b, 0xf2, 0x2e, 0xab, 0xcc,
- 0xda, 0x8e, 0x1f, 0x12, 0xb3, 0x08, 0x63, 0x26, 0xbd, 0x4b, 0x43, 0x5a,
- 0x49, 0x6a, 0x9a, 0xb0, 0x64, 0x37, 0xa8, 0xb2, 0x59, 0x4a, 0x24, 0x64,
- 0xfb, 0x30, 0xfb, 0x34, 0xca, 0x2c, 0x8d, 0xc9, 0xab, 0x1b, 0xcf, 0x36,
- 0xf1, 0xf2, 0xd4, 0xcc, 0x24, 0x9f, 0xd5, 0x66, 0x1b, 0xe8, 0x30, 0xe8,
- 0x4e, 0x9b, 0x21, 0xd3, 0xe1, 0x30, 0x14, 0xf9, 0x50, 0x34, 0xe9, 0x3d,
- 0xba, 0x17, 0x8a, 0x1c, 0x4c, 0xb3, 0x45, 0x56, 0x4c, 0xb3, 0xa2, 0x19,
- 0x26, 0x7f, 0x2d, 0x97, 0xeb, 0xa6, 0xef, 0xcb, 0xdc, 0xac, 0x41, 0x2a,
- 0x4d, 0x99, 0x9e, 0x0d, 0x19, 0x4c, 0xaa, 0x7c, 0xe1, 0x6d, 0x45, 0x59,
- 0x98, 0xcd, 0x4f, 0xce, 0xdf, 0x1e, 0x24, 0xcf, 0x5e, 0x7d, 0xfe, 0xd2,
- 0xed, 0xb9, 0x69, 0x20, 0x99, 0xa4, 0x85, 0x99, 0x71, 0x36, 0xc9, 0x2f,
- 0x1f, 0x92, 0xf9, 0x72, 0xd6, 0xe4, 0x0b, 0xb3, 0xfa, 0xa6, 0xf3, 0x9a,
- 0x8e, 0xcd, 0x22, 0xad, 0x9a, 0x9a, 0x88, 0x00, 0x1f, 0x60, 0xee, 0x77,
- 0x55, 0xde, 0xd0, 0xf1, 0xc1, 0x77, 0x66, 0x84, 0x59, 0x53, 0x6b, 0x73,
- 0x44, 0x6e, 0xa6, 0x9f, 0x71, 0x95, 0x4e, 0xcc, 0xd2, 0xa6, 0xb5, 0xe9,
- 0x74, 0xcf, 0xf6, 0x95, 0x5c, 0x37, 0xcd, 0x62, 0x6f, 0x6b, 0xab, 0xce,
- 0x9b, 0x6c, 0xf8, 0x1f, 0xe6, 0xf0, 0xf5, 0x9b, 0xbb, 0xb2, 0xdf, 0x5c,
- 0x57, 0x59, 0xf6, 0x5f, 0x43, 0x43, 0xc4, 0xf6, 0x41, 0xd3, 0xed, 0x83,
- 0x8c, 0xeb, 0x2a, 0x6b, 0x4c, 0x07, 0x7f, 0x5f, 0x66, 0x05, 0x35, 0x68,
- 0x86, 0x91, 0xce, 0x16, 0xd7, 0xa9, 0xd9, 0xcd, 0xcc, 0x10, 0x23, 0x1d,
- 0x67, 0x43, 0x2f, 0x34, 0x28, 0x3e, 0xd0, 0x3f, 0xfe, 0x1c, 0xf4, 0x79,
- 0x89, 0x2e, 0xcd, 0xcf, 0xa1, 0xbc, 0x94, 0x9a, 0xb5, 0x36, 0x9d, 0x6d,
- 0x11, 0x8d, 0xfd, 0xb8, 0x33, 0xd8, 0xd9, 0xde, 0xfe, 0x79, 0xd8, 0xdc,
- 0x37, 0x9f, 0xf8, 0xc2, 0xf6, 0xb6, 0x7b, 0x85, 0x9e, 0xde, 0xa0, 0x19,
- 0x27, 0x33, 0x43, 0x34, 0xd4, 0xff, 0x3f, 0xb2, 0xaa, 0xac, 0x37, 0x23,
- 0x4d, 0xcd, 0xb2, 0xc6, 0x9c, 0x3c, 0xaf, 0x9d, 0x74, 0xf0, 0x0f, 0xee,
- 0x56, 0x1f, 0x7e, 0x9f, 0xd5, 0xa0, 0x19, 0x37, 0xd9, 0x24, 0xad, 0x0c,
- 0xdd, 0x96, 0x8d, 0x63, 0x4a, 0x7d, 0x73, 0x28, 0x1b, 0xbb, 0x34, 0xe6,
- 0xcc, 0x99, 0xa7, 0x0d, 0x3b, 0x4b, 0x67, 0xc4, 0xc9, 0xea, 0xa4, 0xc8,
- 0xdc, 0x34, 0xcc, 0xf9, 0xcf, 0xd2, 0xc9, 0x75, 0x52, 0x1a, 0xe2, 0xaf,
- 0xc2, 0x2d, 0x48, 0x8b, 0x87, 0x61, 0x59, 0x5d, 0x6d, 0xa5, 0xd5, 0xe4,
- 0x3a, 0xbf, 0x35, 0xeb, 0xf0, 0xea, 0xd5, 0xcb, 0x81, 0xf9, 0xf1, 0xea,
- 0xe7, 0xad, 0xdb, 0x72, 0x66, 0x96, 0xe5, 0xf9, 0xcf, 0x5b, 0xb4, 0xbb,
- 0xff, 0x91, 0xf6, 0xc7, 0xfd, 0xc9, 0x7f, 0x0d, 0xaf, 0x9b, 0xf9, 0x6c,
- 0x25, 0xcd, 0x98, 0xc6, 0x92, 0x74, 0x5e, 0x2e, 0x8b, 0xc6, 0xd2, 0x89,
- 0x21, 0xb7, 0xc6, 0xe3, 0x4c, 0xe6, 0xa4, 0x66, 0xcc, 0xac, 0x88, 0x7c,
- 0xe8, 0xc0, 0x99, 0xb3, 0xe9, 0x4e, 0x62, 0x33, 0xb9, 0x36, 0x53, 0x37,
- 0x74, 0x93, 0xca, 0xf4, 0x9b, 0x3c, 0xa5, 0x33, 0x69, 0x58, 0x43, 0x45,
- 0x1f, 0x53, 0x53, 0xdc, 0x59, 0x6e, 0x9e, 0x2b, 0xab, 0x69, 0x56, 0xb5,
- 0x29, 0x18, 0xc3, 0x71, 0xe3, 0x49, 0xcc, 0x52, 0x2e, 0x4c, 0xe7, 0x4b,
- 0x62, 0x77, 0x38, 0x64, 0xd4, 0x82, 0x39, 0x9e, 0x57, 0x66, 0x95, 0xcc,
- 0xca, 0x10, 0x51, 0xd1, 0xc2, 0x3d, 0x24, 0xef, 0xcd, 0xe6, 0x31, 0x6b,
- 0xf0, 0x68, 0x8f, 0x37, 0x2b, 0x5c, 0xb4, 0xbb, 0xbb, 0xbb, 0xd5, 0x44,
- 0xb4, 0xb7, 0xd3, 0xa1, 0x23, 0xef, 0xa5, 0xd8, 0xee, 0xef, 0xed, 0xb6,
- 0xf7, 0xff, 0xf8, 0x12, 0x1b, 0xab, 0x73, 0xa0, 0xb3, 0xaf, 0xbc, 0x5b,
- 0x0f, 0xbe, 0x69, 0xcd, 0xfc, 0x9e, 0x5d, 0xe6, 0xf7, 0x7d, 0xbd, 0xf8,
- 0x78, 0x2d, 0x53, 0xd3, 0xfc, 0x7c, 0xd1, 0xd0, 0xae, 0x6b, 0x73, 0x57,
- 0xcb, 0xac, 0x36, 0x24, 0x74, 0x77, 0x9d, 0x9a, 0x8f, 0xb5, 0x81, 0x04,
- 0x5d, 0xcc, 0xf3, 0xab, 0xeb, 0x26, 0xb9, 0x4b, 0x89, 0x7f, 0x1c, 0x37,
- 0xdc, 0x04, 0x31, 0x6e, 0xc3, 0x35, 0x2e, 0x53, 0x73, 0xfc, 0x69, 0x85,
- 0xc0, 0xa5, 0x0d, 0xb1, 0x59, 0x72, 0x32, 0x6b, 0x05, 0x52, 0xf2, 0xee,
- 0xc5, 0x71, 0x5a, 0xd3, 0x6e, 0x14, 0x66, 0xd3, 0x1b, 0xc3, 0xf6, 0x97,
- 0xf4, 0xd7, 0xb5, 0x61, 0xec, 0x49, 0x91, 0xce, 0x33, 0x19, 0x28, 0x78,
- 0xdf, 0x5b, 0x62, 0x91, 0xd9, 0x7d, 0x3a, 0xb7, 0xfc, 0xc8, 0x30, 0x98,
- 0xbe, 0xb0, 0x4e, 0xfb, 0x46, 0x6d, 0x76, 0xcd, 0x50, 0x1c, 0x1d, 0x23,
- 0x9c, 0xa9, 0x1e, 0x9d, 0x9b, 0x1e, 0xcf, 0x13, 0x63, 0x4c, 0x6b, 0xe2,
- 0xfd, 0xcc, 0xe1, 0xcd, 0xe0, 0xbd, 0xc9, 0x9a, 0x45, 0x4b, 0x6f, 0xe8,
- 0x96, 0xe9, 0xdc, 0x65, 0x78, 0x6d, 0x5a, 0x26, 0xb9, 0xe1, 0x60, 0x63,
- 0x73, 0xbe, 0x68, 0x66, 0x74, 0x6a, 0xb0, 0x2a, 0xd4, 0xce, 0xc2, 0xb4,
- 0x49, 0x1f, 0xe6, 0x0d, 0xf1, 0x0d, 0x88, 0x23, 0x66, 0xbc, 0x66, 0x51,
- 0x20, 0x51, 0x98, 0xb3, 0xe7, 0xcd, 0x1f, 0x1c, 0xcf, 0x3c, 0x9b, 0xdc,
- 0x9a, 0x8b, 0xc7, 0x48, 0x16, 0x99, 0x7d, 0x0b, 0x2c, 0x7a, 0x42, 0xd7,
- 0xdd, 0x6c, 0xf6, 0x60, 0xc8, 0xae, 0xaa, 0x48, 0x74, 0xa3, 0x1d, 0x1c,
- 0xf3, 0xe1, 0x98, 0x67, 0xe6, 0x66, 0xf0, 0x97, 0x33, 0x27, 0x26, 0x65,
- 0x88, 0xd4, 0x5c, 0x35, 0x20, 0x43, 0x73, 0x25, 0xe0, 0x18, 0x63, 0xe2,
- 0x18, 0x1d, 0xb5, 0x3d, 0x99, 0x64, 0x8b, 0xa6, 0x8e, 0xcd, 0x49, 0x37,
- 0xdc, 0x0c, 0xa7, 0xca, 0x68, 0xe5, 0xfd, 0x7b, 0x14, 0xeb, 0x6a, 0xf9,
- 0x38, 0xae, 0x52, 0xbd, 0x9a, 0xcc, 0xd5, 0x5a, 0xdb, 0x55, 0x6b, 0x40,
- 0x1b, 0xe6, 0x2c, 0x60, 0xcd, 0xe7, 0x34, 0x50, 0x7a, 0xb8, 0x66, 0x89,
- 0x09, 0x67, 0x8e, 0x36, 0x92, 0x45, 0x26, 0xee, 0x97, 0xb8, 0x91, 0x59,
- 0x4f, 0xdb, 0xb8, 0xe9, 0xd5, 0xee, 0x29, 0x75, 0x5f, 0x1b, 0x61, 0xd3,
- 0x70, 0xe7, 0x69, 0x7d, 0x6d, 0xee, 0x53, 0xb3, 0xf5, 0x17, 0xd7, 0x34,
- 0xd3, 0xb9, 0xa1, 0x99, 0x5b, 0xda, 0xdf, 0x45, 0x96, 0x4d, 0x87, 0xc9,
- 0xe9, 0x25, 0x1d, 0xcd, 0xca, 0x0c, 0xba, 0xc1, 0xd7, 0xc4, 0x2d, 0xcc,
- 0xba, 0x4d, 0x21, 0x8d, 0x15, 0x96, 0x2b, 0x60, 0x28, 0xde, 0xb1, 0x27,
- 0x4a, 0x33, 0x8b, 0x9d, 0x10, 0xa3, 0x9f, 0xb5, 0x59, 0x0b, 0x44, 0x00,
- 0xc3, 0x02, 0x68, 0x78, 0xe3, 0x2c, 0x01, 0x25, 0x8e, 0xb3, 0xe6, 0x2e,
- 0xcb, 0x6c, 0x73, 0x75, 0x66, 0xd8, 0x19, 0x6d, 0x1a, 0x5f, 0xe6, 0xc5,
- 0x6d, 0x49, 0x03, 0x5c, 0x5b, 0x3b, 0x3b, 0x3f, 0xfd, 0xfa, 0xfc, 0x68,
- 0x34, 0x4a, 0xde, 0x1d, 0x5d, 0x1c, 0x9d, 0xb7, 0x56, 0xba, 0x28, 0xab,
- 0x39, 0x76, 0x74, 0x9a, 0xd7, 0x8b, 0x59, 0xfa, 0x40, 0x5b, 0x6d, 0x66,
- 0x72, 0x55, 0xd1, 0xc9, 0x9a, 0x67, 0xc4, 0x5a, 0xa6, 0xcb, 0x0a, 0x64,
- 0x51, 0x2e, 0xcc, 0xf6, 0x89, 0x10, 0x63, 0x1a, 0x9f, 0x42, 0xf2, 0x29,
- 0xae, 0xdc, 0x4a, 0x9b, 0xdb, 0x5c, 0x38, 0x24, 0xb1, 0x48, 0xbb, 0x1f,
- 0x24, 0x4d, 0x40, 0x4a, 0xed, 0xbb, 0xcf, 0x78, 0x99, 0x6a, 0xcc, 0xc9,
- 0xd0, 0x6c, 0x3e, 0x87, 0x2c, 0x61, 0xfe, 0x75, 0x02, 0x44, 0x76, 0x69,
- 0xa4, 0x27, 0xc3, 0x35, 0x3b, 0xa4, 0x61, 0xc7, 0x89, 0x75, 0x85, 0xf0,
- 0x4b, 0xd2, 0xb0, 0xe9, 0xdc, 0x8c, 0x75, 0x9e, 0x17, 0x86, 0xc0, 0x0c,
- 0x41, 0xca, 0x29, 0x27, 0x4a, 0x30, 0x63, 0xbd, 0x64, 0x9e, 0x20, 0x2b,
- 0xd2, 0x96, 0xaa, 0xcd, 0xcb, 0x66, 0xb3, 0x0d, 0x67, 0xb5, 0xd3, 0xc3,
- 0xa0, 0x0c, 0x69, 0x9a, 0xe6, 0xd3, 0x31, 0xb1, 0x26, 0x12, 0x33, 0x8d,
- 0x34, 0x90, 0x45, 0x7b, 0xb3, 0x72, 0xab, 0x79, 0xc3, 0x8c, 0x2d, 0x1d,
- 0xd3, 0x8e, 0xd2, 0x03, 0x9d, 0x55, 0x34, 0x87, 0x08, 0xbc, 0xe5, 0x2e,
- 0xaf, 0x71, 0xa8, 0xee, 0xca, 0xe5, 0xcc, 0x88, 0x74, 0xf4, 0xc0, 0x72,
- 0x81, 0x17, 0x4c, 0x57, 0x0b, 0x77, 0x7a, 0xe6, 0xf9, 0x3d, 0xad, 0x7a,
- 0xb7, 0x15, 0x33, 0x34, 0xf3, 0xe7, 0xc2, 0x6c, 0x02, 0x0f, 0x67, 0xd8,
- 0xe5, 0xad, 0xe0, 0x1a, 0xc1, 0x1e, 0xd2, 0x69, 0x01, 0xbb, 0x3b, 0x3b,
- 0x1d, 0x5d, 0x10, 0xfb, 0x3f, 0xfb, 0x70, 0x61, 0x1a, 0x32, 0xd7, 0x50,
- 0xdd, 0x98, 0xed, 0xa4, 0x17, 0x8b, 0x0c, 0x12, 0xb5, 0x36, 0x67, 0x76,
- 0x2d, 0xc7, 0x11, 0xc7, 0xad, 0xa2, 0x5d, 0xf2, 0x18, 0x59, 0xcd, 0x20,
- 0xe2, 0x55, 0x25, 0xa3, 0xbe, 0xce, 0x88, 0x47, 0xdb, 0x97, 0x92, 0x8d,
- 0x2f, 0x36, 0xcd, 0x76, 0x0f, 0x6c, 0x73, 0x3f, 0xd2, 0xd3, 0x3f, 0x53,
- 0xcf, 0x75, 0x3e, 0xcf, 0x67, 0xa9, 0x77, 0xb7, 0x09, 0x27, 0x22, 0xba,
- 0xb6, 0xe7, 0x71, 0x62, 0xd8, 0x2e, 0x06, 0xed, 0xa4, 0x6a, 0x5a, 0x41,
- 0x9c, 0x66, 0xb7, 0x51, 0xd3, 0x32, 0xe3, 0xf7, 0x8c, 0x28, 0x6b, 0x17,
- 0x8e, 0x76, 0x8c, 0x8e, 0x79, 0x6b, 0x99, 0xba, 0xbb, 0x16, 0x2c, 0x1b,
- 0x71, 0x72, 0x28, 0x6b, 0x76, 0xe1, 0x7a, 0xe3, 0xb4, 0xea, 0x59, 0x0e,
- 0xc6, 0x1a, 0x94, 0x69, 0xf4, 0x6a, 0x69, 0x06, 0xcf, 0xab, 0xda, 0x4f,
- 0x06, 0x7f, 0xa4, 0x91, 0x93, 0x48, 0x6d, 0x4f, 0xb4, 0x91, 0xd5, 0x8a,
- 0xe9, 0x70, 0xed, 0x14, 0x0a, 0x9c, 0xd5, 0xf6, 0x4e, 0x59, 0xcf, 0x4b,
- 0x98, 0xfd, 0xb3, 0x08, 0x99, 0xb0, 0x6a, 0x66, 0xee, 0xed, 0x3b, 0x43,
- 0x83, 0xa9, 0x59, 0x42, 0xc3, 0x4c, 0xde, 0xd1, 0xd0, 0xa5, 0x33, 0x51,
- 0x0e, 0xb1, 0x4f, 0x66, 0x59, 0xcd, 0xac, 0xac, 0x52, 0x33, 0x9d, 0xe6,
- 0xf4, 0x9d, 0x21, 0x76, 0xc3, 0xa8, 0x97, 0x19, 0xa4, 0x22, 0x99, 0xe3,
- 0xdc, 0xcd, 0x8d, 0x04, 0xec, 0xfa, 0xda, 0x48, 0x55, 0x49, 0x8f, 0x19,
- 0xca, 0x80, 0xba, 0xe9, 0xd1, 0xc2, 0xce, 0x3b, 0x9d, 0x98, 0xb9, 0x4c,
- 0xe5, 0xb2, 0xa2, 0x4b, 0x8c, 0xef, 0xae, 0x79, 0xfa, 0xe0, 0xcb, 0x30,
- 0x60, 0x39, 0x18, 0x79, 0x59, 0xd9, 0x7b, 0xdb, 0xdc, 0x0c, 0x0b, 0x23,
- 0x07, 0x2b, 0x2b, 0x02, 0x4f, 0xc7, 0xf9, 0xa9, 0x79, 0x68, 0x7d, 0x23,
- 0xcc, 0xd2, 0x93, 0x57, 0xd7, 0xfa, 0xa8, 0x77, 0x3f, 0xa4, 0x66, 0x6e,
- 0xc4, 0xe3, 0x48, 0xd2, 0x9f, 0x2a, 0xfb, 0x2a, 0xab, 0x21, 0x46, 0x3e,
- 0x2b, 0x89, 0xeb, 0xf4, 0xa6, 0xe5, 0x72, 0x6c, 0x47, 0x8e, 0xa1, 0x13,
- 0x61, 0x0d, 0xb0, 0xab, 0xf4, 0xa7, 0x36, 0x67, 0x87, 0x2d, 0xcb, 0x55,
- 0x3f, 0x39, 0x34, 0xb7, 0x50, 0x23, 0x2c, 0x92, 0xb9, 0x01, 0x6a, 0x22,
- 0x2b, 0x5d, 0x77, 0x50, 0x9b, 0xe1, 0xd8, 0xeb, 0x0d, 0x1f, 0x0e, 0x88,
- 0x80, 0x9d, 0x95, 0xaf, 0x21, 0x95, 0x09, 0x3f, 0xb6, 0x33, 0x33, 0x33,
- 0x9a, 0xe6, 0x86, 0xa5, 0x19, 0xbe, 0xaa, 0x3b, 0xe3, 0x04, 0xd5, 0x3e,
- 0x2b, 0x97, 0xb4, 0xd6, 0x32, 0x66, 0xe6, 0x4e, 0x2d, 0xf1, 0x8e, 0xb4,
- 0x2d, 0x9f, 0xb3, 0xea, 0x98, 0x06, 0xa7, 0x66, 0xa7, 0x4e, 0x30, 0x8f,
- 0xc1, 0x6d, 0x42, 0xa7, 0xc1, 0x88, 0xd1, 0x74, 0x34, 0x06, 0xa7, 0x27,
- 0xb7, 0x1e, 0x55, 0x93, 0x52, 0x51, 0xd0, 0x75, 0xdb, 0x87, 0xde, 0x36,
- 0x2e, 0x4b, 0x23, 0xbe, 0xbb, 0xa9, 0x91, 0xd4, 0x9d, 0x15, 0xc4, 0xac,
- 0x64, 0x47, 0x07, 0x03, 0xfe, 0x0a, 0x2d, 0x3f, 0x18, 0xd1, 0x31, 0xbd,
- 0x4a, 0x73, 0x4b, 0x6f, 0xc2, 0xd8, 0xec, 0xb3, 0x45, 0x29, 0x8f, 0xd3,
- 0x4e, 0xd1, 0x45, 0x2e, 0x3c, 0x64, 0x89, 0xfb, 0x2e, 0xa3, 0x79, 0x19,
- 0x26, 0x80, 0x93, 0x2c, 0xcd, 0x42, 0xfa, 0xd1, 0xe6, 0xc6, 0x90, 0xf7,
- 0x48, 0x74, 0x02, 0x27, 0x84, 0x20, 0x64, 0x9a, 0xec, 0x0d, 0x93, 0x6f,
- 0x8c, 0xf6, 0x09, 0xdb, 0x05, 0x04, 0xe2, 0x9c, 0xf4, 0x70, 0x23, 0xd1,
- 0xdc, 0x65, 0x46, 0xf7, 0xad, 0x1b, 0xb3, 0x9a, 0xb8, 0x44, 0xf1, 0x99,
- 0x19, 0xa7, 0xbd, 0xf6, 0xae, 0xcb, 0x3b, 0x74, 0x6b, 0x27, 0x61, 0x77,
- 0xf2, 0x92, 0x4f, 0x44, 0xb2, 0x81, 0x4b, 0x7a, 0x42, 0x8b, 0xb5, 0x68,
- 0xdc, 0x2c, 0xec, 0x7a, 0x18, 0xb6, 0x59, 0x7b, 0x87, 0x8b, 0x6e, 0x2c,
- 0x33, 0x82, 0xe4, 0xb3, 0xe1, 0xce, 0xab, 0xe1, 0xf6, 0x90, 0x4c, 0x55,
- 0xd9, 0x6d, 0x5e, 0x2e, 0x6b, 0xd3, 0x3b, 0x86, 0x92, 0x78, 0x6f, 0x1a,
- 0x75, 0x99, 0xae, 0x91, 0xab, 0xab, 0x19, 0x5f, 0xe0, 0x5b, 0xe5, 0xe5,
- 0xa5, 0x77, 0xc7, 0x57, 0x46, 0x91, 0xc5, 0xed, 0x46, 0x8b, 0x23, 0x87,
- 0x8e, 0x79, 0x9c, 0x7f, 0xb9, 0xcb, 0x72, 0x6e, 0xda, 0x1d, 0x1c, 0xfc,
- 0xd1, 0x6c, 0xf4, 0x40, 0xb9, 0xd1, 0xc0, 0x30, 0xa3, 0x8e, 0x6d, 0xea,
- 0x1d, 0x69, 0xf3, 0xfe, 0x95, 0xe8, 0x58, 0x17, 0x0b, 0x6c, 0x39, 0x48,
- 0xcb, 0x7e, 0x68, 0x5a, 0x48, 0x2c, 0x3b, 0xf3, 0x6c, 0x04, 0x1e, 0x91,
- 0x19, 0xe6, 0x54, 0x4c, 0xd3, 0xca, 0xa8, 0x60, 0x64, 0x6a, 0x30, 0x0f,
- 0xd3, 0x69, 0x4b, 0x99, 0xdc, 0xfb, 0xcc, 0xf3, 0x1c, 0x89, 0x0d, 0xf6,
- 0x68, 0x80, 0xbe, 0x3a, 0xa6, 0x5c, 0xc7, 0x5c, 0x05, 0x35, 0x8f, 0x4c,
- 0x44, 0xd1, 0xd4, 0x49, 0x26, 0x8e, 0x79, 0xab, 0xc6, 0x72, 0x59, 0xce,
- 0x66, 0xe5, 0x1d, 0x5d, 0x22, 0x24, 0x4c, 0x7a, 0xdb, 0xaa, 0xdb, 0x51,
- 0xd7, 0xe5, 0x24, 0x67, 0x5b, 0x83, 0x2c, 0x3a, 0xb4, 0x2c, 0x98, 0xc3,
- 0xe8, 0xd5, 0x5a, 0x6e, 0x77, 0x12, 0x5b, 0x6b, 0xc3, 0x49, 0x12, 0xab,
- 0x30, 0xc2, 0xba, 0xd0, 0x69, 0xce, 0x5d, 0x7a, 0x7c, 0x24, 0x85, 0x15,
- 0x9b, 0x91, 0xe4, 0x66, 0x7d, 0xca, 0x3b, 0xd5, 0xf8, 0x8c, 0xe2, 0x6d,
- 0x59, 0xa3, 0x77, 0x54, 0xfb, 0x9d, 0xe6, 0xea, 0xa5, 0x69, 0xc3, 0xac,
- 0xf7, 0x34, 0x27, 0x93, 0x92, 0x51, 0xea, 0xd8, 0x4a, 0xc4, 0xb2, 0xbe,
- 0x79, 0x6d, 0xb2, 0xac, 0x1b, 0x23, 0x68, 0x6a, 0xaf, 0xdc, 0x94, 0xe9,
- 0xd7, 0x90, 0xe4, 0x3e, 0xd1, 0x59, 0xa7, 0x39, 0x43, 0x74, 0x9f, 0x0d,
- 0x9f, 0xbd, 0x1c, 0x6e, 0x7b, 0x84, 0xb0, 0x4d, 0xeb, 0x4c, 0x8a, 0xd6,
- 0xce, 0x70, 0xbb, 0xf3, 0xf8, 0x06, 0xdd, 0xe9, 0x9b, 0xba, 0xe4, 0xad,
- 0x35, 0xc7, 0x6d, 0xaf, 0xe7, 0xc0, 0xbc, 0xe9, 0xdf, 0x64, 0x7c, 0x67,
- 0xe7, 0xce, 0xa2, 0x61, 0x7b, 0x37, 0x3b, 0x5c, 0x40, 0x1c, 0xe4, 0xfb,
- 0xd0, 0xdc, 0xe7, 0x7b, 0xdc, 0xd2, 0xce, 0x70, 0xc7, 0xdb, 0x7a, 0x19,
- 0xce, 0x4e, 0x7c, 0x38, 0x21, 0x01, 0x74, 0x06, 0xb3, 0xa3, 0x42, 0x33,
- 0x4b, 0x4a, 0xb6, 0xdf, 0x4e, 0x73, 0xaa, 0xaa, 0xc9, 0x8b, 0xba, 0x64,
- 0xb2, 0x48, 0xcf, 0x5a, 0x8b, 0x84, 0x11, 0xed, 0x7e, 0xc2, 0xf2, 0x80,
- 0x4c, 0x72, 0xa3, 0x65, 0x51, 0xbf, 0x66, 0x43, 0xdc, 0xd6, 0xf0, 0xaa,
- 0x60, 0xa8, 0xbb, 0x3c, 0xc0, 0x08, 0xe9, 0xe0, 0x62, 0xc1, 0xc5, 0x40,
- 0x23, 0x5f, 0x9a, 0x7b, 0xab, 0x9a, 0x41, 0x6b, 0x52, 0x5b, 0x99, 0x61,
- 0x24, 0x86, 0xbf, 0xe5, 0xb3, 0x46, 0x08, 0x92, 0xcd, 0x1a, 0xd4, 0xd7,
- 0xb0, 0x3b, 0xba, 0x47, 0x66, 0x63, 0xb8, 0x61, 0xb1, 0x28, 0x3a, 0x2f,
- 0x1c, 0x32, 0x17, 0x16, 0x51, 0xfb, 0xfd, 0xd9, 0x7b, 0x33, 0xb3, 0x93,
- 0x11, 0xdd, 0x7c, 0x46, 0x35, 0xe5, 0x15, 0xc2, 0xa7, 0x66, 0x59, 0x95,
- 0xb7, 0x3b, 0x51, 0xd8, 0x48, 0xc1, 0x9d, 0xe6, 0xc2, 0x11, 0xe3, 0x28,
- 0x98, 0x5b, 0x82, 0x6c, 0x96, 0xe6, 0xdb, 0x2a, 0x35, 0x5a, 0x1b, 0xe6,
- 0x2a, 0xb3, 0xa8, 0xa9, 0xf9, 0x21, 0xf7, 0x1c, 0xac, 0x0e, 0xa4, 0x03,
- 0x28, 0x83, 0xb6, 0xe5, 0xf6, 0xbb, 0xbc, 0xb2, 0xb4, 0x2a, 0x45, 0x76,
- 0x55, 0x36, 0x74, 0xa4, 0xf5, 0x33, 0xf3, 0xcc, 0xa0, 0xd3, 0x1c, 0x56,
- 0x0d, 0x03, 0x02, 0x67, 0x62, 0xfd, 0x4c, 0x54, 0x11, 0xda, 0x6b, 0xa3,
- 0x69, 0x19, 0xae, 0x06, 0x6e, 0xb0, 0xf6, 0xd8, 0xc2, 0xbe, 0x0c, 0x16,
- 0x36, 0x9d, 0xad, 0x5c, 0x59, 0xea, 0x6a, 0xff, 0xc4, 0x4c, 0x8f, 0xd6,
- 0xd5, 0x5b, 0x56, 0x7c, 0xe6, 0x2d, 0x2b, 0x2c, 0x84, 0xba, 0xb0, 0xab,
- 0x57, 0x16, 0x4b, 0xfb, 0xc9, 0x6b, 0x4b, 0x9d, 0x70, 0x57, 0xdd, 0x63,
- 0x59, 0x8b, 0xb6, 0xf7, 0x29, 0x6b, 0xeb, 0x2d, 0x2e, 0x7f, 0x9a, 0xec,
- 0x06, 0x2c, 0x6b, 0xf1, 0xfb, 0x2c, 0xee, 0x0e, 0x31, 0xaa, 0x66, 0x56,
- 0xdf, 0x06, 0x7c, 0xc1, 0x4c, 0x7a, 0x93, 0x2c, 0x24, 0x64, 0xf1, 0xf3,
- 0xf9, 0x02, 0x2d, 0xb3, 0x63, 0x0b, 0xf7, 0xc9, 0x1d, 0x59, 0x68, 0x74,
- 0x02, 0xd6, 0x48, 0x92, 0x06, 0xe7, 0x70, 0x5e, 0x36, 0xfc, 0x32, 0x0f,
- 0x7d, 0xe8, 0xcc, 0x75, 0xd4, 0xaa, 0xbb, 0x9b, 0x65, 0x38, 0xc3, 0xed,
- 0xbe, 0xfb, 0x7d, 0xa7, 0xcb, 0xc2, 0xe9, 0x0e, 0xb6, 0xdf, 0x62, 0x0d,
- 0x8d, 0x9c, 0xd0, 0x54, 0x25, 0x0c, 0x46, 0xad, 0x21, 0xe2, 0x56, 0x34,
- 0x9c, 0x71, 0x62, 0x74, 0x38, 0xc3, 0x23, 0x37, 0xf2, 0x96, 0x5b, 0x45,
- 0x65, 0x49, 0xb3, 0xc1, 0xe3, 0x74, 0x72, 0x43, 0x37, 0x51, 0x2e, 0x06,
- 0x4c, 0xdd, 0x26, 0xbe, 0x2d, 0x8c, 0x6e, 0x7b, 0x9b, 0x91, 0x13, 0x42,
- 0x3b, 0xda, 0xf4, 0x58, 0xeb, 0x2e, 0x2d, 0x62, 0x5d, 0xcf, 0x6e, 0x77,
- 0x3f, 0x75, 0x11, 0xa9, 0x43, 0x1d, 0xe1, 0x6e, 0xb8, 0x84, 0x72, 0xc1,
- 0xad, 0x58, 0x44, 0x7a, 0x59, 0x16, 0xd1, 0x8d, 0xe1, 0x99, 0x8e, 0xe1,
- 0x59, 0x74, 0x0c, 0x3a, 0x88, 0x95, 0xa3, 0x78, 0xf6, 0xcb, 0x36, 0x32,
- 0x3a, 0x86, 0xe7, 0x34, 0x86, 0x7c, 0x71, 0xfb, 0xbc, 0xf3, 0x8e, 0xd1,
- 0xd7, 0xd4, 0x55, 0x31, 0x49, 0x17, 0x38, 0xb5, 0x66, 0x21, 0x0d, 0x57,
- 0x2e, 0x67, 0xb7, 0xd4, 0x91, 0xa1, 0x01, 0x23, 0xc0, 0x41, 0xe2, 0x69,
- 0x3c, 0x23, 0x4e, 0x72, 0x6c, 0x4e, 0xc2, 0xad, 0xe7, 0x17, 0xd2, 0xc3,
- 0xc0, 0x84, 0xb2, 0x71, 0x77, 0x9d, 0x93, 0x30, 0x90, 0x8b, 0x55, 0xcc,
- 0xec, 0x2c, 0x5b, 0x00, 0x8e, 0xcf, 0x6e, 0x5f, 0x0e, 0xa4, 0xa3, 0xcd,
- 0x3e, 0xcb, 0xa4, 0x22, 0x64, 0x36, 0x74, 0xab, 0x74, 0x9a, 0xd3, 0x15,
- 0xe1, 0xf1, 0x64, 0x22, 0x07, 0x98, 0x0f, 0x4c, 0x3b, 0xcf, 0x75, 0x60,
- 0x19, 0x1b, 0x83, 0xbc, 0xc9, 0xbe, 0x94, 0xc9, 0xbe, 0xfc, 0x3f, 0x66,
- 0xb2, 0x2f, 0x57, 0x4f, 0x36, 0xa5, 0xc9, 0xa6, 0x0b, 0x72, 0xef, 0x74,
- 0xc9, 0xcb, 0x68, 0xfb, 0x5b, 0xe4, 0x19, 0xdc, 0x4c, 0xbe, 0x27, 0x02,
- 0x02, 0xd7, 0x23, 0x8b, 0x79, 0x61, 0x3d, 0x6b, 0x18, 0x13, 0x5b, 0x73,
- 0xc9, 0xe2, 0xa0, 0x43, 0x88, 0x36, 0x47, 0xdc, 0x10, 0x57, 0xa5, 0xd1,
- 0xb9, 0xc9, 0x1a, 0x2e, 0x1e, 0x37, 0x4f, 0x06, 0x36, 0xff, 0x33, 0xcb,
- 0x64, 0x5d, 0x3d, 0x39, 0x19, 0x8b, 0x59, 0x42, 0xa7, 0x47, 0xbb, 0xe2,
- 0x48, 0x99, 0xd5, 0xa4, 0x0b, 0x66, 0xf7, 0x39, 0x39, 0xf6, 0x72, 0xb1,
- 0x2a, 0x1b, 0xdd, 0x2f, 0x99, 0x54, 0x10, 0xf1, 0x87, 0xe4, 0xe2, 0x20,
- 0x8a, 0x16, 0xb3, 0x23, 0x06, 0x9b, 0x5c, 0xce, 0xd2, 0xab, 0xc8, 0x7d,
- 0x99, 0x5f, 0x15, 0xa5, 0x38, 0xda, 0xea, 0x72, 0x4e, 0xa7, 0xe0, 0x1b,
- 0x39, 0x05, 0xb5, 0xe1, 0x2c, 0xc5, 0x64, 0xb6, 0x84, 0xb7, 0xe5, 0xd4,
- 0x4c, 0xcc, 0x7c, 0xe5, 0xb3, 0x88, 0x7d, 0x5a, 0x40, 0x12, 0x33, 0x07,
- 0xe9, 0x15, 0x49, 0x9c, 0xaf, 0xf9, 0x9f, 0xba, 0x21, 0xfe, 0xfd, 0x45,
- 0x5c, 0x06, 0x1a, 0x89, 0x5e, 0x49, 0x73, 0xfb, 0x40, 0xaf, 0xee, 0x7b,
- 0xef, 0xd0, 0x4a, 0x41, 0x72, 0x16, 0x2b, 0x09, 0xee, 0x0d, 0x3d, 0x91,
- 0x1d, 0xee, 0x46, 0x43, 0x35, 0xfc, 0x6d, 0x4a, 0x9a, 0x10, 0xac, 0x99,
- 0xc9, 0xc1, 0xd7, 0xc7, 0x34, 0xcb, 0x34, 0x9f, 0xb1, 0xa9, 0x4d, 0x66,
- 0x9d, 0x67, 0x33, 0xd2, 0xa2, 0xb0, 0x64, 0xf0, 0x9f, 0x25, 0xbe, 0xe9,
- 0x5e, 0xfe, 0xeb, 0xbd, 0x2b, 0xff, 0x61, 0x16, 0x31, 0xdd, 0x7a, 0x3e,
- 0xdc, 0xee, 0x91, 0x58, 0x6f, 0xb6, 0x2c, 0x2b, 0x26, 0xe5, 0x94, 0x3a,
- 0x99, 0xa5, 0xc5, 0x4d, 0xcd, 0x8a, 0x18, 0x6b, 0x27, 0x34, 0xd6, 0xbe,
- 0x61, 0xa2, 0x55, 0x55, 0x2e, 0x69, 0xb4, 0x01, 0xef, 0x95, 0xe9, 0x80,
- 0xd9, 0x88, 0x09, 0xf5, 0xef, 0x4b, 0xda, 0x90, 0x79, 0x5a, 0xdd, 0xa8,
- 0xa9, 0x96, 0xae, 0x89, 0x74, 0x56, 0x97, 0xd8, 0x39, 0x8c, 0xcb, 0xaa,
- 0x00, 0x9d, 0xe6, 0x06, 0xdf, 0x40, 0xf4, 0x36, 0xc4, 0x42, 0x5e, 0x55,
- 0x3e, 0x08, 0xa5, 0x1a, 0x76, 0x83, 0x9b, 0x11, 0x94, 0xe3, 0x4e, 0x8c,
- 0xde, 0xda, 0xaa, 0x8c, 0x90, 0x71, 0xb3, 0x66, 0x3f, 0xed, 0x2c, 0xad,
- 0x1b, 0x18, 0x7f, 0x94, 0x80, 0xe8, 0x41, 0x5f, 0xbc, 0x4e, 0x8b, 0x07,
- 0xf2, 0x33, 0x7f, 0x8a, 0x78, 0x7d, 0x99, 0x5f, 0x2d, 0xab, 0x8c, 0xad,
- 0x5e, 0x70, 0x4d, 0xab, 0x47, 0x9a, 0xf4, 0xb5, 0xeb, 0x12, 0xf4, 0x65,
- 0xe4, 0xdc, 0x6c, 0x76, 0x19, 0xbb, 0xf7, 0x54, 0x61, 0x87, 0x4e, 0x5b,
- 0x67, 0x13, 0x34, 0x55, 0x64, 0x62, 0xeb, 0x02, 0x77, 0x26, 0x47, 0x66,
- 0x32, 0x99, 0xa5, 0xf9, 0xbc, 0x6e, 0x89, 0xb4, 0x5d, 0xca, 0x50, 0x89,
- 0x1e, 0x44, 0x31, 0x26, 0x33, 0x7b, 0x55, 0x93, 0xf9, 0x04, 0x7c, 0x4a,
- 0xa5, 0x6c, 0x36, 0x62, 0x5f, 0x67, 0x93, 0x1b, 0x90, 0x9d, 0x67, 0x5a,
- 0xec, 0xf2, 0x2a, 0x5e, 0x75, 0x2c, 0xd8, 0x92, 0xbc, 0xd2, 0x46, 0x1c,
- 0x19, 0x1b, 0x9a, 0xcb, 0x8b, 0xe9, 0x72, 0x82, 0xc3, 0x4a, 0xd6, 0x12,
- 0x23, 0xa2, 0x55, 0x29, 0x89, 0x3c, 0x0d, 0xe2, 0x00, 0x12, 0xd0, 0xc5,
- 0xc0, 0x10, 0xc1, 0x22, 0x3a, 0x3a, 0x70, 0x3b, 0x96, 0x53, 0x5b, 0x4c,
- 0xa0, 0x16, 0xf7, 0x00, 0x2c, 0xef, 0xaa, 0xfd, 0xb5, 0x57, 0xb3, 0xd3,
- 0x1c, 0xaf, 0x6d, 0x3f, 0x61, 0x4e, 0xaa, 0xce, 0xca, 0x69, 0x29, 0xa4,
- 0x34, 0x30, 0xfa, 0x7a, 0x9d, 0x4f, 0xd8, 0x50, 0x95, 0x5f, 0x65, 0xc4,
- 0x2f, 0x48, 0xf8, 0x6c, 0x66, 0x73, 0xf6, 0xe5, 0x77, 0x09, 0x6d, 0x60,
- 0xa5, 0xb6, 0x80, 0xac, 0x7c, 0x86, 0xc2, 0x2a, 0x8a, 0xa5, 0x0f, 0x35,
- 0x9b, 0xfa, 0x46, 0xb4, 0x9c, 0xed, 0x99, 0x66, 0x28, 0xcc, 0x32, 0xbb,
- 0x6c, 0x07, 0x7e, 0x8f, 0xba, 0x31, 0xbc, 0xa5, 0x4f, 0x47, 0x64, 0x02,
- 0x63, 0x34, 0x19, 0xfa, 0xd4, 0xca, 0xa8, 0xe6, 0xd2, 0x31, 0x09, 0x86,
- 0xe4, 0x81, 0xba, 0xcb, 0x27, 0xec, 0x7c, 0x80, 0x03, 0x2d, 0x62, 0x36,
- 0x98, 0xcc, 0x72, 0x7a, 0x70, 0x6e, 0x54, 0x5d, 0x7a, 0x8b, 0x25, 0x69,
- 0xba, 0x16, 0x8c, 0x56, 0x3f, 0xb5, 0x1c, 0x15, 0x26, 0xb4, 0xfa, 0x1a,
- 0x66, 0xef, 0xb4, 0xca, 0xe1, 0xa1, 0x0a, 0x9a, 0xe3, 0x31, 0xd3, 0x24,
- 0xfd, 0x71, 0x42, 0xd5, 0x62, 0x23, 0xb0, 0xb3, 0x1f, 0xe0, 0xec, 0x10,
- 0xd7, 0xf1, 0x0e, 0xce, 0x98, 0xce, 0x2b, 0x07, 0x58, 0x24, 0xaf, 0xe9,
- 0x3a, 0x7a, 0x43, 0xb3, 0x59, 0xc1, 0x12, 0xcf, 0xe0, 0x17, 0xbb, 0x6e,
- 0x1b, 0x88, 0x3d, 0xd6, 0xc7, 0x66, 0x14, 0x6e, 0x0d, 0x4e, 0x44, 0xa2,
- 0x9e, 0xa8, 0xa6, 0x62, 0x28, 0x8a, 0xd8, 0xa1, 0x6d, 0x6b, 0xe1, 0xac,
- 0x45, 0x66, 0x6b, 0xb2, 0xfc, 0xd6, 0xcc, 0xdc, 0xf9, 0x9b, 0xb8, 0x71,
- 0x38, 0x82, 0x7b, 0xa3, 0xac, 0xe9, 0x36, 0x77, 0x80, 0x0e, 0xf7, 0x7a,
- 0x9e, 0x3f, 0x99, 0x5b, 0x95, 0xb5, 0x1b, 0x67, 0xea, 0x2d, 0x66, 0xeb,
- 0x8c, 0x61, 0xa2, 0x14, 0x7e, 0xb4, 0xf3, 0xe6, 0xbb, 0xfd, 0x93, 0x0f,
- 0x47, 0x3b, 0x7f, 0xe9, 0x92, 0x8f, 0xf9, 0x6e, 0x97, 0xbf, 0xdb, 0xed,
- 0xc5, 0x78, 0x96, 0xa1, 0xa0, 0x24, 0x59, 0x7f, 0xb3, 0x9e, 0xd4, 0x0f,
- 0xf3, 0x71, 0x39, 0xb3, 0x7c, 0x4b, 0x3a, 0xa1, 0x51, 0xf4, 0x45, 0x3e,
- 0x68, 0xf8, 0x9a, 0xe3, 0x85, 0xa1, 0x1b, 0xb2, 0x3b, 0x76, 0x38, 0x45,
- 0x45, 0x20, 0x04, 0x05, 0xa4, 0x53, 0x7f, 0x31, 0xea, 0x06, 0x37, 0x9e,
- 0x6c, 0x10, 0xb5, 0x5c, 0x33, 0x41, 0xf6, 0x13, 0x3e, 0x49, 0x5d, 0x76,
- 0xce, 0x33, 0xb6, 0xee, 0x2e, 0x35, 0x0a, 0x8a, 0x72, 0x92, 0xb0, 0xfc,
- 0xfd, 0x60, 0xc8, 0xb7, 0x21, 0x8b, 0xca, 0x87, 0x9a, 0x99, 0x4a, 0x5e,
- 0xcb, 0xf9, 0xec, 0x32, 0x3c, 0x62, 0xfa, 0xe4, 0xc3, 0xbc, 0x35, 0xb3,
- 0xe0, 0xad, 0xef, 0xc9, 0x58, 0x16, 0xa9, 0xe1, 0xe8, 0x55, 0x4f, 0xce,
- 0xb3, 0x8b, 0x96, 0x11, 0x9b, 0x01, 0x1d, 0xb0, 0x2a, 0xb4, 0xd5, 0x98,
- 0x53, 0x47, 0x3d, 0x4a, 0x44, 0x0f, 0x85, 0x66, 0x29, 0x47, 0xa0, 0x03,
- 0x65, 0x46, 0x4d, 0x6e, 0xc2, 0x07, 0x39, 0x92, 0xeb, 0x55, 0x26, 0xe7,
- 0x97, 0x3d, 0x82, 0x5d, 0xd2, 0x37, 0x8d, 0x8d, 0xf3, 0x42, 0x69, 0x5b,
- 0x54, 0xb3, 0xc1, 0x09, 0x51, 0xf4, 0xac, 0x14, 0x96, 0xee, 0x8c, 0xae,
- 0xe2, 0xf3, 0xb4, 0x34, 0x10, 0xb5, 0xe7, 0x69, 0x88, 0x51, 0x99, 0xf0,
- 0x56, 0xe8, 0x40, 0xf9, 0x6c, 0x59, 0x72, 0x5a, 0x18, 0xe6, 0x5e, 0x30,
- 0xe5, 0x0b, 0xd7, 0x4d, 0xca, 0x2a, 0xd2, 0xdc, 0xfb, 0xac, 0xa9, 0x8d,
- 0x74, 0x98, 0x6d, 0xc9, 0xa5, 0xad, 0x1b, 0x89, 0x5e, 0x78, 0x20, 0x21,
- 0xf7, 0x3a, 0xbd, 0x38, 0x72, 0xf6, 0x12, 0x3c, 0xe9, 0xbc, 0x9d, 0x6c,
- 0x87, 0xf5, 0x0f, 0xad, 0xfa, 0x49, 0x85, 0x4b, 0xa7, 0xa1, 0x85, 0x6a,
- 0xb1, 0x6c, 0xc8, 0xcc, 0x51, 0xda, 0xc9, 0xe8, 0x1d, 0x2a, 0xc4, 0xa5,
- 0x67, 0xc3, 0xf4, 0x34, 0x24, 0x71, 0x02, 0x1f, 0xdb, 0xa0, 0xab, 0xd0,
- 0x66, 0xc1, 0xcb, 0x3c, 0x71, 0x63, 0x18, 0xfc, 0x2d, 0x75, 0x97, 0xbd,
- 0xc4, 0xe8, 0x60, 0xa5, 0xcc, 0x3d, 0x5e, 0x24, 0x75, 0x7a, 0xcb, 0xaf,
- 0x60, 0xbd, 0xe2, 0x77, 0x96, 0x73, 0x8f, 0x29, 0xc3, 0x3e, 0xa4, 0xe6,
- 0xa7, 0xcb, 0xf9, 0x42, 0x84, 0x89, 0x3f, 0xfc, 0x7e, 0xb2, 0xc3, 0x57,
- 0x22, 0x1c, 0x0e, 0xd2, 0x7a, 0x92, 0xe7, 0x31, 0x01, 0x9b, 0x02, 0xf4,
- 0x8c, 0x12, 0x77, 0x54, 0xb0, 0x31, 0x69, 0x7f, 0x74, 0x70, 0x7c, 0xec,
- 0x3c, 0xb3, 0x1a, 0xca, 0x80, 0xf8, 0xbc, 0xa6, 0x23, 0x2f, 0x75, 0x9a,
- 0xcb, 0xc8, 0x40, 0x3c, 0x61, 0x19, 0x96, 0x67, 0x6a, 0x1e, 0x25, 0x2b,
- 0x2e, 0x36, 0xdc, 0xdc, 0x47, 0xb5, 0x18, 0xf7, 0xff, 0xd2, 0x3c, 0x2c,
- 0xb2, 0x37, 0xfb, 0x3d, 0x6b, 0xb8, 0xe5, 0x79, 0x76, 0x4f, 0x40, 0xba,
- 0x24, 0x75, 0x81, 0x99, 0x1d, 0xae, 0x1e, 0xda, 0xbe, 0xa9, 0xb8, 0x60,
- 0x85, 0xef, 0x91, 0x3b, 0x65, 0x4e, 0xf2, 0xe1, 0x25, 0x9c, 0x50, 0xc5,
- 0xb3, 0x5d, 0xc3, 0xb8, 0xcc, 0x5d, 0x3e, 0xaf, 0x7d, 0x01, 0x0a, 0xd7,
- 0xef, 0xa3, 0xd6, 0xc0, 0xc0, 0x3c, 0xf9, 0x15, 0xbd, 0xd2, 0xb9, 0xf5,
- 0x5b, 0x76, 0xca, 0x15, 0xd6, 0xc9, 0x14, 0x92, 0x68, 0x67, 0xef, 0x96,
- 0x6c, 0x44, 0x35, 0xc2, 0x4f, 0x33, 0x33, 0xcc, 0xaa, 0x9f, 0x2c, 0x0b,
- 0xfa, 0xd7, 0x3a, 0x49, 0x92, 0xbc, 0x89, 0x28, 0x2b, 0xa4, 0x8c, 0x54,
- 0x39, 0xc9, 0xbe, 0x69, 0xe2, 0xf3, 0x4d, 0x96, 0x52, 0xd5, 0x93, 0xc2,
- 0xa2, 0x00, 0x05, 0xa4, 0x51, 0x34, 0x9c, 0xda, 0x9d, 0xbb, 0xbc, 0x2e,
- 0x2a, 0x0b, 0x6e, 0xa8, 0xb9, 0xda, 0xca, 0x22, 0x9e, 0x7c, 0x42, 0xbb,
- 0xae, 0x82, 0x48, 0x97, 0xb1, 0x1b, 0x86, 0xe9, 0x6b, 0x20, 0xdd, 0xe3,
- 0xf2, 0x1a, 0xc4, 0x4e, 0xdc, 0x7f, 0xc5, 0x5d, 0xeb, 0xf4, 0x8f, 0x52,
- 0x38, 0x24, 0xde, 0xb0, 0x0e, 0x6b, 0xdd, 0x0d, 0xf6, 0xb3, 0x93, 0xc7,
- 0x4a, 0x4e, 0x6c, 0x77, 0x1c, 0x97, 0xf0, 0x82, 0x13, 0xb3, 0x34, 0x8a,
- 0x2e, 0xdd, 0x45, 0x56, 0x20, 0x18, 0x26, 0x07, 0xb0, 0x66, 0x52, 0x0b,
- 0xb5, 0xdf, 0x84, 0xbf, 0x94, 0x81, 0x01, 0x82, 0x44, 0x40, 0xb0, 0xc3,
- 0xd4, 0xe3, 0x4b, 0x18, 0x9b, 0x59, 0xa5, 0xbb, 0x0c, 0x11, 0x39, 0xad,
- 0xc6, 0x5a, 0x17, 0x7a, 0xdc, 0x9e, 0xc1, 0x37, 0xfc, 0x46, 0xbd, 0x09,
- 0xd9, 0xa7, 0x70, 0xac, 0x8a, 0xbc, 0x6e, 0x37, 0x45, 0x79, 0x67, 0x44,
- 0x9a, 0xa2, 0xe4, 0x5e, 0xf4, 0x14, 0xd3, 0xb0, 0xbb, 0x8b, 0xde, 0x64,
- 0x85, 0xdc, 0xff, 0xc2, 0xc8, 0x35, 0xa8, 0x0c, 0x4f, 0x37, 0x50, 0x90,
- 0x55, 0x8c, 0x56, 0xde, 0xec, 0xf3, 0xe4, 0xae, 0xe4, 0xc7, 0x1c, 0xda,
- 0x06, 0x61, 0x65, 0x1e, 0x4f, 0xd6, 0x8b, 0xdb, 0x8b, 0x3d, 0x81, 0x4b,
- 0xda, 0x90, 0x45, 0x6f, 0xd0, 0xeb, 0xc7, 0x94, 0xa3, 0x2e, 0xff, 0xd5,
- 0x31, 0xd9, 0x43, 0x1b, 0xdc, 0x05, 0x7c, 0xf4, 0xd5, 0xed, 0xc5, 0x7e,
- 0x2f, 0xa5, 0x6a, 0x8e, 0xf8, 0x91, 0xbb, 0x59, 0xc2, 0xea, 0x30, 0x91,
- 0xac, 0xb8, 0xca, 0xa1, 0x90, 0xa4, 0x5d, 0x12, 0xa7, 0x0b, 0x5a, 0xce,
- 0x31, 0xdf, 0xcf, 0x56, 0xa3, 0x91, 0xa1, 0x0d, 0x93, 0xfd, 0x82, 0xe3,
- 0xb9, 0xee, 0x52, 0x50, 0x9e, 0x6d, 0x1f, 0xe2, 0x4c, 0x78, 0x00, 0xed,
- 0x75, 0xe0, 0x5f, 0x49, 0x72, 0xe7, 0x46, 0x39, 0xb6, 0x1d, 0x25, 0x1d,
- 0x02, 0xc3, 0x27, 0xd7, 0x21, 0x00, 0x8b, 0x35, 0x00, 0x5e, 0x72, 0xbb,
- 0x28, 0xcc, 0xbd, 0xef, 0xae, 0xcb, 0x19, 0x7b, 0xed, 0x3a, 0xcd, 0x79,
- 0x72, 0x2d, 0x1c, 0xce, 0x50, 0xa7, 0xc9, 0x57, 0x44, 0x97, 0x4e, 0x95,
- 0xc1, 0x60, 0x6b, 0x98, 0xab, 0xe1, 0x0f, 0xe4, 0x54, 0x9a, 0x65, 0x69,
- 0x35, 0x7b, 0x30, 0xc4, 0xc1, 0x22, 0x4f, 0x32, 0xb8, 0xed, 0x34, 0x87,
- 0xe5, 0x24, 0x9b, 0x47, 0x6a, 0xe6, 0x5e, 0x15, 0xf4, 0x90, 0x78, 0x09,
- 0x35, 0xc0, 0xb2, 0x61, 0xbf, 0x2d, 0x3b, 0x97, 0xe9, 0xca, 0xbd, 0xcd,
- 0x49, 0xc3, 0x32, 0xf4, 0x60, 0xe4, 0xf4, 0x2e, 0x25, 0x92, 0x3d, 0x13,
- 0x44, 0x83, 0x26, 0x39, 0x28, 0xe6, 0x3a, 0xf7, 0xd4, 0x32, 0x73, 0x16,
- 0xaf, 0xcd, 0x3d, 0x65, 0x74, 0xc5, 0x65, 0xba, 0x7a, 0xb9, 0x3e, 0xe9,
- 0x82, 0xe3, 0x1b, 0xce, 0x8f, 0x89, 0x8a, 0xd0, 0x32, 0xe8, 0x75, 0xc5,
- 0x0d, 0x78, 0xc0, 0x9b, 0x67, 0x98, 0x5f, 0xb1, 0x34, 0xd7, 0x60, 0x93,
- 0xbc, 0x2e, 0x2f, 0x2f, 0x0d, 0xb5, 0x7f, 0x11, 0x08, 0xda, 0xfc, 0xc8,
- 0xd6, 0x39, 0xe2, 0xad, 0x5b, 0x4c, 0x37, 0x69, 0x87, 0x94, 0x25, 0x22,
- 0xbf, 0x5c, 0xe5, 0xb4, 0x1d, 0xdc, 0x5c, 0xa8, 0x61, 0xb6, 0xbf, 0xd7,
- 0xc5, 0x65, 0x5f, 0xb8, 0xc6, 0x66, 0x43, 0xdf, 0x1c, 0x3f, 0x10, 0x8b,
- 0x12, 0x46, 0xde, 0x8d, 0x14, 0x55, 0xd9, 0xf7, 0x26, 0x5f, 0x2c, 0x68,
- 0xb3, 0x38, 0xc4, 0x13, 0xdb, 0x6c, 0x75, 0x88, 0x71, 0x66, 0x0e, 0x05,
- 0x76, 0x55, 0x1d, 0xca, 0xe5, 0xd2, 0x5c, 0xc4, 0x3c, 0xe8, 0x71, 0x66,
- 0x4e, 0x7a, 0xb7, 0x39, 0x15, 0xe0, 0x5d, 0x48, 0x96, 0x28, 0x3c, 0x53,
- 0x0a, 0xbf, 0x2a, 0x84, 0x83, 0xd2, 0x36, 0xb9, 0x28, 0x0f, 0x51, 0x20,
- 0xfb, 0x91, 0xc3, 0xff, 0xd6, 0x69, 0x49, 0x7a, 0x9e, 0x47, 0xc7, 0xff,
- 0xf3, 0xc8, 0x05, 0xd0, 0xd9, 0x08, 0xb5, 0x07, 0x50, 0x7b, 0x40, 0x0f,
- 0x1f, 0xe8, 0x12, 0xec, 0x0d, 0x0e, 0xcc, 0x7e, 0xf5, 0x30, 0x94, 0x96,
- 0x35, 0x6f, 0xd9, 0x94, 0xe4, 0x77, 0xe6, 0x58, 0x43, 0xc4, 0x7d, 0x13,
- 0xc9, 0x19, 0x7d, 0xb1, 0xca, 0xb6, 0xe0, 0xec, 0x2f, 0x03, 0xce, 0x8b,
- 0x2d, 0x44, 0x88, 0x8f, 0x15, 0x64, 0x8e, 0x1b, 0x0e, 0xf9, 0x84, 0x54,
- 0xe1, 0xb6, 0x4f, 0x82, 0x98, 0xb6, 0x20, 0x4b, 0x4a, 0x0c, 0x5e, 0xc8,
- 0x0b, 0xc4, 0xae, 0xc2, 0x11, 0x47, 0x11, 0x66, 0xf6, 0x1b, 0x5a, 0x7b,
- 0x26, 0xf9, 0xe2, 0x9a, 0xc4, 0xc6, 0xd7, 0x08, 0x6c, 0x20, 0x03, 0x13,
- 0x7f, 0xf0, 0x45, 0xd4, 0xfa, 0x3e, 0x92, 0x83, 0x51, 0xcb, 0x45, 0xaa,
- 0x6f, 0x0b, 0xff, 0xca, 0x35, 0x28, 0x59, 0x43, 0x25, 0x25, 0x98, 0xc6,
- 0x34, 0xdd, 0x65, 0x39, 0xb6, 0x23, 0x56, 0xdd, 0x35, 0xf4, 0x04, 0xa1,
- 0x9f, 0xfa, 0xd5, 0x30, 0x39, 0xc7, 0x1d, 0xb9, 0x5c, 0x70, 0x6c, 0x22,
- 0xd9, 0xea, 0xe5, 0xbb, 0xc0, 0xe9, 0x55, 0x37, 0x2d, 0xf1, 0x08, 0x11,
- 0xff, 0x7e, 0x7f, 0x45, 0x4b, 0x9f, 0xc8, 0xbd, 0xef, 0x8c, 0xcc, 0xb8,
- 0xd7, 0x95, 0xa5, 0x5d, 0x64, 0xb1, 0xe1, 0x8d, 0x45, 0x5d, 0xcf, 0x10,
- 0xcb, 0x3d, 0x2d, 0x27, 0xf5, 0x56, 0xba, 0x58, 0xd4, 0x5b, 0x3a, 0xc0,
- 0x56, 0xd4, 0xb6, 0x6a, 0x1d, 0xa3, 0x91, 0x9d, 0x1b, 0x5d, 0xba, 0xb0,
- 0x49, 0x59, 0x51, 0x69, 0x06, 0xcf, 0x5b, 0x21, 0xa6, 0xd5, 0x13, 0xf1,
- 0x00, 0x7d, 0x5d, 0x2c, 0x2f, 0x4e, 0x46, 0x7c, 0xe1, 0x76, 0x6f, 0xce,
- 0x25, 0x1d, 0x51, 0xdd, 0x1d, 0xbf, 0x71, 0x28, 0x72, 0x7c, 0x01, 0x8f,
- 0x46, 0x07, 0xf8, 0x70, 0xb4, 0x24, 0x11, 0xc6, 0x74, 0x53, 0x3d, 0x30,
- 0xdb, 0x08, 0x6e, 0x1a, 0x9a, 0x6d, 0xf2, 0xc9, 0xff, 0xc9, 0x42, 0x5c,
- 0xe5, 0xcd, 0xf0, 0x32, 0x9b, 0x96, 0x55, 0x1a, 0x58, 0xca, 0x4a, 0x0a,
- 0xaa, 0xc7, 0xea, 0x4c, 0xcc, 0x53, 0x5b, 0x46, 0x3a, 0xfe, 0x68, 0xd6,
- 0x6b, 0x48, 0xbf, 0x43, 0xb5, 0xe3, 0x45, 0xd3, 0x8f, 0x69, 0xbd, 0xfe,
- 0x78, 0x88, 0x30, 0x3d, 0x73, 0x1c, 0xea, 0xdf, 0x93, 0xae, 0x8d, 0x90,
- 0x06, 0x17, 0xc0, 0x34, 0x2e, 0x14, 0x9e, 0xab, 0x4d, 0x30, 0x71, 0x4f,
- 0xba, 0xb0, 0xbd, 0x6e, 0xf6, 0x92, 0x91, 0xc2, 0xae, 0x4a, 0x73, 0x9d,
- 0x5e, 0xcf, 0xa3, 0x7e, 0x08, 0xf5, 0xb1, 0xf5, 0xb1, 0x9b, 0x50, 0xd3,
- 0xf8, 0x3a, 0x59, 0x16, 0x5e, 0xeb, 0x86, 0x12, 0x26, 0x86, 0x51, 0x50,
- 0x54, 0x38, 0x1b, 0x3f, 0x22, 0xdb, 0xa3, 0x72, 0xb6, 0x33, 0x16, 0xaa,
- 0xf1, 0x4b, 0x59, 0x5e, 0x0d, 0xd5, 0x86, 0xbc, 0x12, 0x85, 0xcb, 0xa5,
- 0x82, 0xd9, 0x9a, 0x0c, 0xd4, 0xb1, 0xd1, 0x61, 0x89, 0x3a, 0xd7, 0x78,
- 0x7b, 0xa9, 0x70, 0x5c, 0x07, 0xb4, 0xbc, 0xc4, 0xea, 0x5e, 0xd7, 0x46,
- 0xa2, 0x31, 0x9d, 0x7c, 0x11, 0x04, 0xfd, 0xdc, 0xe7, 0xf3, 0xe5, 0x1c,
- 0xdb, 0x40, 0x94, 0x27, 0x8f, 0x31, 0x9b, 0xa2, 0x0b, 0x1a, 0x11, 0x31,
- 0x32, 0x73, 0xc7, 0x03, 0xac, 0x2f, 0xa4, 0x7b, 0xc9, 0xf0, 0x7c, 0xf8,
- 0x5b, 0x23, 0x4e, 0x0d, 0xad, 0x94, 0x26, 0x81, 0x56, 0x73, 0x0a, 0x91,
- 0x68, 0xf3, 0x93, 0x64, 0x71, 0x9d, 0xd6, 0x59, 0x1f, 0x81, 0x67, 0xb1,
- 0xa9, 0x9a, 0x6f, 0xf5, 0xe9, 0x2c, 0xd0, 0x8c, 0x4a, 0xc8, 0xc3, 0xf0,
- 0xa3, 0x9a, 0xa5, 0xa5, 0x94, 0x21, 0x98, 0x20, 0x3f, 0x1b, 0x3e, 0xdb,
- 0x1d, 0x6e, 0xf7, 0x03, 0x9b, 0x83, 0x53, 0x15, 0x35, 0x50, 0xdc, 0xf0,
- 0x95, 0x49, 0x3e, 0xb7, 0xd1, 0x77, 0x2a, 0xcb, 0x64, 0x24, 0xdb, 0x2d,
- 0x85, 0x3e, 0x71, 0x57, 0xe4, 0xb3, 0x30, 0x9c, 0x84, 0x04, 0x33, 0x66,
- 0x91, 0xa6, 0xb5, 0x65, 0x95, 0x4e, 0x1e, 0x38, 0xa8, 0xd4, 0xb7, 0x49,
- 0x68, 0x03, 0x66, 0x5c, 0x78, 0x1a, 0x07, 0x9c, 0x3a, 0x1d, 0x04, 0xe2,
- 0xe7, 0x4c, 0x7c, 0xc1, 0x60, 0xb2, 0xa3, 0x2c, 0x63, 0x2d, 0x19, 0x02,
- 0xe4, 0x9c, 0x64, 0x90, 0x79, 0x7a, 0x8f, 0x0d, 0x7d, 0x54, 0x84, 0xfc,
- 0x8d, 0x8e, 0x1a, 0x44, 0x4e, 0xa3, 0xcb, 0x55, 0x5d, 0x6a, 0x86, 0x23,
- 0xcd, 0x1a, 0xbd, 0x41, 0x14, 0x7f, 0x33, 0x47, 0xa2, 0x63, 0x66, 0xd2,
- 0x48, 0xb8, 0xbe, 0x47, 0xae, 0xdc, 0x66, 0xc4, 0x0e, 0x64, 0xb6, 0xd6,
- 0x9c, 0x26, 0x0a, 0x60, 0x20, 0xc3, 0x14, 0xc5, 0x9f, 0x11, 0x33, 0x29,
- 0xcd, 0xdf, 0xd7, 0xb9, 0x19, 0x79, 0x35, 0xb9, 0xc6, 0xba, 0x92, 0xc1,
- 0x17, 0x3e, 0xb1, 0xc7, 0x54, 0x7e, 0xf4, 0x51, 0x8b, 0xed, 0x34, 0xa7,
- 0xab, 0x88, 0xb4, 0xd6, 0xb2, 0x50, 0x19, 0xa4, 0x33, 0x3a, 0x92, 0xe7,
- 0x89, 0x2d, 0x64, 0x33, 0xa2, 0x9e, 0xe3, 0x98, 0xd1, 0x6b, 0x50, 0x7a,
- 0x2a, 0x0d, 0xae, 0x7e, 0x43, 0x71, 0xa6, 0x69, 0x92, 0xa6, 0xd9, 0x60,
- 0xc8, 0x1d, 0x91, 0xd9, 0x9b, 0xfb, 0x42, 0x20, 0x19, 0xa9, 0x82, 0x5d,
- 0xf5, 0x50, 0x3c, 0x7d, 0xf2, 0xbe, 0xae, 0xbd, 0x3a, 0xfb, 0x02, 0xf5,
- 0xa6, 0xd4, 0xf9, 0xa8, 0x22, 0xa8, 0x0b, 0xc3, 0x97, 0xb5, 0xd5, 0xd7,
- 0x48, 0x78, 0x32, 0x83, 0xe1, 0x14, 0x48, 0xba, 0x26, 0x06, 0x83, 0xcb,
- 0x26, 0x30, 0x2b, 0x7b, 0x5b, 0xda, 0xde, 0xe9, 0xd9, 0x25, 0xec, 0x38,
- 0x9b, 0x24, 0xc0, 0x1a, 0x4a, 0x69, 0x92, 0x93, 0xb7, 0x74, 0x80, 0x0f,
- 0xce, 0xcd, 0xbf, 0xb9, 0x7a, 0x4a, 0xc9, 0x1a, 0x8a, 0x7c, 0x46, 0x32,
- 0x93, 0xbc, 0xfb, 0x6e, 0x94, 0x6c, 0x9c, 0x8e, 0xb6, 0x9e, 0xbd, 0xda,
- 0xde, 0xec, 0xb6, 0x45, 0x4b, 0x05, 0xf5, 0x3d, 0xaa, 0xb9, 0x8f, 0xb6,
- 0x28, 0x0d, 0x74, 0x93, 0x52, 0x75, 0x6f, 0xc9, 0x30, 0xd1, 0x32, 0x6b,
- 0x9d, 0x1d, 0xbd, 0x53, 0xfb, 0x23, 0xbb, 0xf7, 0x8d, 0x4c, 0x6d, 0xc6,
- 0x43, 0xde, 0x93, 0x90, 0x70, 0xce, 0xb3, 0x5b, 0xb5, 0x62, 0x26, 0x27,
- 0x10, 0x15, 0xc0, 0xb3, 0xc8, 0x50, 0xaa, 0x82, 0xc7, 0x22, 0x23, 0x71,
- 0xd2, 0xb5, 0x20, 0x6c, 0x8d, 0x2e, 0xf0, 0x40, 0xe0, 0x1b, 0x83, 0x25,
- 0xd5, 0x66, 0x4c, 0x15, 0x2e, 0x0d, 0x0a, 0xec, 0x9f, 0xfe, 0x7e, 0x27,
- 0x2c, 0x12, 0xfc, 0xb2, 0xf3, 0x6a, 0xf8, 0x99, 0xcd, 0x82, 0x1b, 0x4c,
- 0xfb, 0x1a, 0x93, 0xfc, 0xfa, 0x11, 0x97, 0xc3, 0x28, 0x63, 0x66, 0xed,
- 0x33, 0x1c, 0xbc, 0x04, 0x6f, 0x00, 0x62, 0xf3, 0xd5, 0x51, 0xe6, 0xbc,
- 0xd7, 0x11, 0x43, 0xa3, 0x66, 0xf8, 0x5a, 0xdf, 0x28, 0x47, 0x94, 0x42,
- 0xcf, 0x95, 0x45, 0x4b, 0xc6, 0x55, 0x79, 0x47, 0xa1, 0x88, 0x08, 0x92,
- 0x07, 0xf5, 0xa5, 0x1c, 0x9b, 0x78, 0x1d, 0x58, 0x55, 0xcd, 0x9e, 0xce,
- 0xac, 0xa7, 0xfd, 0x9b, 0x8b, 0x77, 0x27, 0x1c, 0x21, 0x4e, 0xd7, 0xde,
- 0x42, 0x7c, 0xf8, 0x18, 0xf3, 0x72, 0x6c, 0xee, 0x03, 0xe2, 0xb8, 0x8d,
- 0x35, 0x8d, 0xc5, 0x18, 0x2d, 0xec, 0x78, 0x56, 0x98, 0x5f, 0xc4, 0xdc,
- 0x2c, 0x72, 0xf1, 0x38, 0xfb, 0x05, 0xe9, 0x6b, 0xe6, 0x34, 0x0e, 0xc8,
- 0x50, 0xd8, 0xb5, 0xf9, 0x2c, 0x16, 0x33, 0xb1, 0x63, 0x6d, 0xdd, 0x0f,
- 0x8c, 0x40, 0x38, 0xa0, 0xd1, 0x0d, 0x4c, 0xf3, 0xec, 0x29, 0x26, 0x16,
- 0x73, 0x60, 0xae, 0x78, 0xa6, 0x93, 0x64, 0xf0, 0x96, 0xb6, 0x82, 0x1e,
- 0x09, 0xb6, 0xcf, 0xdb, 0x25, 0x51, 0xce, 0xb0, 0x6c, 0x69, 0xad, 0x01,
- 0xe5, 0x6c, 0x34, 0x15, 0x3f, 0xf4, 0x02, 0x71, 0xbe, 0x1c, 0x67, 0xbe,
- 0x30, 0xba, 0x40, 0x60, 0x3d, 0x22, 0x73, 0x7d, 0xf5, 0xc0, 0x91, 0xcf,
- 0x62, 0x4d, 0x57, 0xb7, 0xa2, 0xb5, 0x24, 0x70, 0xb3, 0xfc, 0xa4, 0x33,
- 0xdf, 0x97, 0x24, 0x03, 0x0e, 0x02, 0x6b, 0x2a, 0xfc, 0xde, 0xf4, 0x1a,
- 0x07, 0xf5, 0x53, 0x22, 0x28, 0xef, 0x04, 0x3b, 0xd3, 0x91, 0xd7, 0x96,
- 0x3e, 0xa0, 0x71, 0x69, 0xd8, 0x2e, 0x42, 0x8c, 0xf4, 0x5d, 0x2a, 0x41,
- 0xed, 0x02, 0xc8, 0xf5, 0x0c, 0xe0, 0x0e, 0x86, 0x18, 0x8c, 0x08, 0x72,
- 0xc9, 0x65, 0x64, 0x32, 0x32, 0x02, 0x53, 0x78, 0xdb, 0xa9, 0xc9, 0xa6,
- 0x2f, 0x14, 0x27, 0x0b, 0x93, 0xd3, 0x65, 0xd0, 0xb2, 0xe9, 0xf3, 0xf9,
- 0x99, 0x67, 0xd5, 0x15, 0xb4, 0xcc, 0xab, 0xac, 0x09, 0x95, 0x05, 0xe1,
- 0x17, 0x12, 0x16, 0x0c, 0xe5, 0xf6, 0x5f, 0x06, 0xec, 0x80, 0xc2, 0x85,
- 0xb1, 0xa4, 0xf8, 0x5c, 0xa6, 0x8e, 0x64, 0x9d, 0x32, 0x13, 0xc4, 0x99,
- 0x57, 0x98, 0x85, 0xa0, 0x7d, 0x0c, 0x95, 0xe5, 0xd9, 0xec, 0xcd, 0xcc,
- 0x28, 0xee, 0x0f, 0xeb, 0x89, 0xa4, 0xd6, 0x48, 0x00, 0x7c, 0x23, 0x8a,
- 0x3d, 0x36, 0x73, 0x72, 0xbd, 0x2c, 0x6e, 0x54, 0xf1, 0x9e, 0x95, 0x25,
- 0x85, 0x17, 0x50, 0x30, 0x7e, 0xa7, 0xb9, 0x75, 0xaf, 0xb7, 0x7f, 0xf1,
- 0xdb, 0x8e, 0xad, 0x32, 0x76, 0x1f, 0x59, 0x1d, 0x96, 0xc8, 0xed, 0xcd,
- 0xc5, 0x39, 0x91, 0xc9, 0x97, 0x7d, 0x75, 0x75, 0x37, 0x2d, 0xa7, 0x56,
- 0x10, 0x10, 0xc5, 0x66, 0x3e, 0xdc, 0x5c, 0xd6, 0x7f, 0x66, 0x5b, 0x65,
- 0x47, 0x99, 0x61, 0xe7, 0x03, 0x75, 0xf2, 0xb6, 0x4c, 0xa7, 0xf4, 0x70,
- 0xe4, 0x3a, 0x74, 0xf0, 0x00, 0x70, 0xa6, 0x0e, 0x93, 0x77, 0x7e, 0xd2,
- 0x5c, 0x3b, 0x1a, 0xc2, 0xee, 0xe2, 0x30, 0x39, 0x33, 0xeb, 0x35, 0x08,
- 0x9c, 0x2f, 0x57, 0xba, 0xed, 0x68, 0x90, 0xd6, 0xd5, 0x8d, 0x78, 0x9a,
- 0xac, 0x5f, 0x96, 0xe5, 0x38, 0xad, 0xd6, 0x65, 0x03, 0xe0, 0xb8, 0x1f,
- 0x8b, 0xf2, 0x45, 0x4b, 0x12, 0x38, 0xbd, 0xd1, 0xd6, 0x97, 0xfc, 0xd6,
- 0x90, 0x25, 0x15, 0xef, 0x78, 0x96, 0xb3, 0xa9, 0x5d, 0x84, 0x6e, 0x87,
- 0x91, 0x4d, 0xa3, 0x4d, 0x35, 0xe2, 0x4b, 0x5a, 0x55, 0x79, 0x7a, 0x45,
- 0x8b, 0xdd, 0x2c, 0xab, 0x82, 0x33, 0xcc, 0x8a, 0xec, 0x8e, 0x9d, 0x8d,
- 0xce, 0x57, 0x54, 0xc1, 0xba, 0xd2, 0xd6, 0xec, 0x03, 0x37, 0x4d, 0xfc,
- 0x62, 0xfc, 0x1e, 0x36, 0x6a, 0x49, 0xf1, 0xe2, 0x94, 0x53, 0xcf, 0xf1,
- 0xd3, 0x66, 0xee, 0x70, 0x43, 0xc5, 0xed, 0xa0, 0x9e, 0x9a, 0xc1, 0x6e,
- 0x42, 0x9b, 0xb7, 0x69, 0x96, 0xc1, 0xcb, 0xff, 0x14, 0x0f, 0x16, 0xb5,
- 0x2b, 0xdd, 0x44, 0x26, 0xce, 0x8c, 0x9b, 0x8c, 0x32, 0x39, 0x0c, 0xd0,
- 0xb8, 0x66, 0x4a, 0x6a, 0x66, 0x28, 0x0e, 0x65, 0x2f, 0xe3, 0xd1, 0x0e,
- 0x97, 0x1d, 0x5b, 0x21, 0xd1, 0x14, 0x4c, 0x9d, 0xbc, 0xf2, 0xb9, 0x64,
- 0x24, 0x42, 0xd3, 0xb0, 0x58, 0x14, 0x85, 0xbd, 0xcd, 0xad, 0xef, 0x47,
- 0x2c, 0xa7, 0xc1, 0x2e, 0xb7, 0xec, 0xa8, 0x7f, 0x80, 0x35, 0x62, 0x95,
- 0xbf, 0x8d, 0xd6, 0x82, 0x33, 0x40, 0xe8, 0x02, 0xc3, 0xe1, 0xe9, 0x32,
- 0x0e, 0xb6, 0xe4, 0xb6, 0xbc, 0x7a, 0xc1, 0x02, 0x77, 0x64, 0x5e, 0x71,
- 0x65, 0x65, 0xbe, 0xd5, 0xca, 0xaa, 0x99, 0x4c, 0x18, 0x69, 0xe5, 0xcb,
- 0x13, 0x81, 0xac, 0x41, 0xd3, 0xeb, 0xc9, 0xaa, 0xf5, 0xc4, 0xe3, 0xb3,
- 0xe4, 0xb7, 0x48, 0xd3, 0xc4, 0x21, 0xad, 0x7e, 0xd7, 0x88, 0x20, 0x77,
- 0x3b, 0xc5, 0x05, 0x0c, 0x52, 0x3f, 0xdc, 0xf5, 0x16, 0xbc, 0x29, 0x17,
- 0xd0, 0x63, 0xb2, 0xc9, 0x85, 0x18, 0x74, 0x1b, 0xf1, 0xc0, 0xc1, 0x6e,
- 0x39, 0x83, 0x24, 0xdf, 0xf1, 0xd8, 0x52, 0xc0, 0x80, 0x44, 0xde, 0x98,
- 0x13, 0x10, 0xc8, 0xad, 0xe4, 0x9c, 0xa7, 0x20, 0x2c, 0x43, 0x96, 0x75,
- 0x99, 0xb5, 0xa2, 0x3a, 0xbd, 0xa8, 0x03, 0xa4, 0x6c, 0x48, 0x36, 0xdc,
- 0x27, 0x31, 0x4e, 0xe7, 0xaf, 0x8e, 0x71, 0x4d, 0xe2, 0x40, 0xe6, 0xe6,
- 0x38, 0x14, 0xe6, 0xb1, 0x80, 0x4d, 0x44, 0xb2, 0xed, 0x39, 0xe1, 0x30,
- 0xd1, 0x5c, 0xfb, 0xe0, 0xbe, 0x8f, 0xc4, 0xf9, 0x51, 0x76, 0xc8, 0x3d,
- 0x72, 0x85, 0xe4, 0xb2, 0xb0, 0x2c, 0x84, 0xb3, 0x70, 0xbb, 0x4c, 0x86,
- 0xe3, 0x82, 0x41, 0x5b, 0xd3, 0x48, 0x98, 0xd5, 0x04, 0x92, 0x7a, 0x6d,
- 0x53, 0xaf, 0x0a, 0x90, 0x38, 0x31, 0xc6, 0x5f, 0x49, 0x33, 0x7c, 0x8e,
- 0x4b, 0x0e, 0xa0, 0xb0, 0x09, 0x34, 0x11, 0x0d, 0x9f, 0xa3, 0xb0, 0xd8,
- 0xbb, 0x82, 0x18, 0x49, 0x5e, 0xe8, 0xb4, 0x16, 0xf8, 0x8c, 0x31, 0xaf,
- 0xd2, 0x23, 0xa4, 0x63, 0x45, 0x8c, 0x5f, 0x42, 0x3d, 0x7d, 0xbb, 0xea,
- 0xc2, 0x12, 0xd9, 0x0f, 0x23, 0xdc, 0x5d, 0x65, 0x91, 0xc8, 0xa5, 0xc0,
- 0x16, 0x73, 0x5a, 0x79, 0x44, 0x9d, 0x5e, 0xa7, 0xea, 0x69, 0xc8, 0x2a,
- 0x92, 0x84, 0x6a, 0x08, 0x4e, 0x6a, 0x6a, 0x69, 0x67, 0x84, 0xec, 0x7c,
- 0x4e, 0xd1, 0xe8, 0x81, 0x4e, 0x66, 0x08, 0xe6, 0xe0, 0xeb, 0x63, 0x18,
- 0xa3, 0x66, 0xb9, 0x61, 0xa9, 0x4c, 0x52, 0x3c, 0x17, 0x06, 0xf7, 0xb0,
- 0x94, 0x75, 0x45, 0xbc, 0x4e, 0xc2, 0xa5, 0xdb, 0x19, 0x6b, 0xd6, 0x85,
- 0x46, 0x4b, 0x6d, 0xf3, 0x1c, 0x6c, 0xc2, 0x22, 0x36, 0x39, 0x55, 0x21,
- 0xd6, 0xc6, 0x90, 0xa5, 0xce, 0xfe, 0x1a, 0x5d, 0x3b, 0xf4, 0x2e, 0xf9,
- 0x83, 0x24, 0x26, 0xb3, 0x55, 0x1e, 0x1c, 0x36, 0xb0, 0x7e, 0xb9, 0x5d,
- 0x66, 0xb0, 0x94, 0xac, 0xde, 0x5b, 0x0b, 0x3c, 0x72, 0xe8, 0x3e, 0x8e,
- 0x61, 0x74, 0x61, 0x03, 0x67, 0xe7, 0x36, 0x71, 0xcc, 0xae, 0x65, 0xe6,
- 0xcb, 0xe0, 0x2c, 0xf7, 0x93, 0xd4, 0x1e, 0xf3, 0xba, 0x59, 0x63, 0xae,
- 0x39, 0x6d, 0xff, 0x4e, 0x66, 0x63, 0xa8, 0x62, 0x86, 0xa8, 0x49, 0xd9,
- 0x84, 0xf9, 0x43, 0x7c, 0x25, 0xda, 0x9a, 0x86, 0xcd, 0xd2, 0xdf, 0x69,
- 0x10, 0xf5, 0x62, 0x0f, 0xc9, 0x43, 0xf2, 0x86, 0x64, 0x9b, 0x2f, 0x25,
- 0x0c, 0x89, 0xec, 0x78, 0xa2, 0xff, 0xb1, 0x83, 0x84, 0xaf, 0x25, 0x0e,
- 0xca, 0x61, 0x8d, 0x07, 0xcb, 0x10, 0x6f, 0x0e, 0x01, 0x41, 0xfe, 0xea,
- 0x31, 0xf9, 0x4d, 0x60, 0xcf, 0x01, 0x60, 0x4e, 0x10, 0x81, 0xf1, 0xe6,
- 0xe9, 0xd5, 0xfb, 0xa5, 0xcb, 0xf7, 0xf8, 0xea, 0x5d, 0x5c, 0x73, 0x2e,
- 0x41, 0x86, 0x70, 0xb7, 0x37, 0x5e, 0xf8, 0x15, 0xf9, 0x4f, 0x38, 0x00,
- 0xd8, 0xc5, 0xb3, 0xb4, 0x8f, 0xa6, 0xe7, 0x05, 0x7b, 0xf3, 0x5b, 0xed,
- 0x3a, 0x88, 0x11, 0x52, 0x3e, 0x0d, 0x3e, 0xde, 0x1c, 0xf3, 0x42, 0x4e,
- 0x34, 0x2a, 0x9b, 0xcc, 0x6d, 0x36, 0xa3, 0x61, 0x50, 0x0b, 0x94, 0x25,
- 0x73, 0xbf, 0x10, 0xe3, 0x1f, 0x4e, 0x5f, 0x44, 0xd5, 0x69, 0x69, 0x3c,
- 0x53, 0xb5, 0xbe, 0x04, 0xf3, 0xfb, 0x52, 0x39, 0xfb, 0x53, 0x93, 0x6b,
- 0x05, 0x6b, 0x21, 0x4e, 0xb0, 0x25, 0xa7, 0x82, 0x5e, 0xc4, 0xf9, 0x13,
- 0x71, 0x26, 0x2a, 0x27, 0x73, 0x41, 0xd7, 0xa0, 0x47, 0xcb, 0xf3, 0x37,
- 0xfb, 0xed, 0x35, 0xa3, 0xac, 0x60, 0x30, 0x51, 0xd9, 0xe8, 0x78, 0x73,
- 0x39, 0x5d, 0xe8, 0xba, 0x7d, 0xa4, 0xda, 0x47, 0xb7, 0xef, 0xff, 0xb0,
- 0x29, 0x72, 0xb4, 0x02, 0x2b, 0x30, 0x0c, 0x9c, 0x74, 0x45, 0x71, 0x2a,
- 0x1c, 0xac, 0xfb, 0x77, 0x32, 0xd0, 0x26, 0x84, 0xdd, 0xb5, 0x82, 0x09,
- 0xe0, 0x82, 0x22, 0x9f, 0x27, 0xb9, 0xf3, 0x66, 0x50, 0x0b, 0x4d, 0xe3,
- 0xa0, 0x72, 0xa7, 0xed, 0x0f, 0x10, 0x78, 0x28, 0x54, 0x3b, 0x04, 0x1d,
- 0x3e, 0x42, 0xac, 0x96, 0x38, 0xe3, 0x74, 0xb9, 0x92, 0x02, 0xcd, 0x4d,
- 0x95, 0xcd, 0xb2, 0x2b, 0x16, 0x71, 0x4f, 0x8e, 0xbe, 0x3b, 0x3a, 0x09,
- 0x04, 0xae, 0x86, 0x3f, 0xb7, 0xde, 0x4b, 0xcf, 0xae, 0xa1, 0xe8, 0x26,
- 0x79, 0xcd, 0x06, 0x79, 0xee, 0x53, 0x5a, 0x8c, 0x06, 0xbe, 0xe6, 0xc4,
- 0x20, 0x25, 0x7d, 0x02, 0x56, 0x9a, 0x89, 0x91, 0x43, 0x19, 0x23, 0xa8,
- 0x86, 0x2d, 0x4f, 0x64, 0xaf, 0xaf, 0x47, 0xa3, 0xad, 0x9b, 0xac, 0x1a,
- 0x13, 0x06, 0x53, 0x48, 0x50, 0x88, 0xc7, 0x4f, 0x0e, 0x11, 0x41, 0xc0,
- 0x9e, 0x00, 0xda, 0x65, 0x37, 0x93, 0xe0, 0x8d, 0x45, 0x39, 0xcb, 0x27,
- 0x0f, 0xc9, 0xa1, 0x8c, 0x8c, 0x93, 0x41, 0xb0, 0xeb, 0x70, 0x00, 0x88,
- 0xbd, 0xf4, 0xf4, 0xdb, 0xc1, 0xfe, 0x68, 0x70, 0x78, 0x74, 0x72, 0xf4,
- 0xf5, 0xfe, 0xc5, 0x11, 0x27, 0x34, 0x20, 0x0c, 0x73, 0x05, 0xd7, 0x11,
- 0x8a, 0xf8, 0x56, 0xc6, 0x89, 0x55, 0xa1, 0x20, 0xe2, 0x26, 0x9f, 0xdc,
- 0x64, 0x8d, 0x06, 0x7b, 0x2a, 0xa2, 0x1d, 0x71, 0xeb, 0x86, 0x5d, 0xe3,
- 0xf1, 0xe6, 0xcc, 0xd6, 0xcc, 0xe6, 0x32, 0xd4, 0x60, 0x06, 0xe9, 0xec,
- 0x8e, 0xd0, 0x40, 0x3e, 0x14, 0xa4, 0x9e, 0x48, 0x6a, 0x3e, 0x49, 0xad,
- 0x98, 0xbd, 0xb7, 0x25, 0xde, 0xfa, 0xb7, 0x76, 0x19, 0xd1, 0x4f, 0x2b,
- 0x82, 0x96, 0x38, 0x44, 0x4e, 0xb2, 0xeb, 0x0e, 0xf1, 0xe4, 0xca, 0x00,
- 0x31, 0x52, 0xa3, 0xe5, 0xab, 0x40, 0x22, 0x66, 0x2a, 0xaa, 0x27, 0xd7,
- 0xd9, 0x5c, 0x0e, 0x17, 0xc5, 0x19, 0x98, 0x47, 0x05, 0x29, 0xc4, 0x1c,
- 0xb0, 0x3b, 0x8a, 0x5f, 0xe1, 0xa3, 0xcc, 0xea, 0x06, 0x47, 0xc0, 0x21,
- 0x24, 0x2c, 0x16, 0xd9, 0x79, 0x97, 0x23, 0x41, 0x9b, 0x43, 0x41, 0x10,
- 0x15, 0x07, 0x2a, 0xd1, 0xd8, 0xd2, 0x78, 0x34, 0x29, 0x83, 0xbd, 0x74,
- 0x15, 0xb4, 0xa5, 0xa6, 0x93, 0xd8, 0x5c, 0x9f, 0x52, 0x22, 0xce, 0x18,
- 0x4f, 0x8f, 0x4f, 0xb3, 0xbd, 0x19, 0x68, 0xa4, 0x8c, 0xf5, 0xc6, 0x11,
- 0xb5, 0x61, 0x28, 0x3b, 0x22, 0xcb, 0xbc, 0x90, 0x76, 0x46, 0x2b, 0xb0,
- 0x41, 0xeb, 0x64, 0x91, 0x56, 0xf4, 0x38, 0x4d, 0xe8, 0x8e, 0x69, 0x08,
- 0x4d, 0x57, 0x4d, 0x16, 0x8d, 0xae, 0x23, 0x0a, 0x83, 0x50, 0x39, 0x90,
- 0xa9, 0x12, 0x25, 0x2a, 0x9a, 0x9b, 0xda, 0xde, 0x75, 0xe4, 0x7b, 0x0e,
- 0xb2, 0x45, 0xd5, 0x44, 0x42, 0x24, 0x39, 0xc7, 0xc2, 0x5a, 0x56, 0xa6,
- 0x5e, 0x76, 0xa8, 0x97, 0xc4, 0x7f, 0x74, 0x76, 0xce, 0x30, 0x85, 0x27,
- 0xf4, 0x8b, 0x84, 0x41, 0x74, 0x7b, 0x86, 0x36, 0x2f, 0x49, 0x10, 0x70,
- 0xb8, 0x42, 0x09, 0xb5, 0x50, 0x45, 0x1a, 0xb4, 0xc6, 0x61, 0x13, 0x02,
- 0xc5, 0x23, 0x24, 0x8d, 0xf9, 0x04, 0x71, 0x78, 0x16, 0x13, 0x89, 0x46,
- 0x42, 0x43, 0xe8, 0xb3, 0x68, 0x84, 0x41, 0x70, 0xe8, 0x87, 0x9a, 0xe7,
- 0x4f, 0xe9, 0xcb, 0xf1, 0xb2, 0xb1, 0xf9, 0x2d, 0x2b, 0x5c, 0x9d, 0x7d,
- 0x4e, 0x05, 0xe3, 0x6b, 0x86, 0x9a, 0xa5, 0x37, 0x93, 0x0a, 0x08, 0x5a,
- 0xa9, 0x19, 0xca, 0xb0, 0x33, 0x55, 0x80, 0x47, 0x50, 0x72, 0x6c, 0x3c,
- 0xbf, 0x4c, 0x25, 0x7e, 0xd3, 0x00, 0xe0, 0x78, 0x68, 0xc2, 0x6a, 0x29,
- 0x61, 0xef, 0x2c, 0x03, 0x8b, 0x90, 0x98, 0xc3, 0xf8, 0x8d, 0x8c, 0x7a,
- 0x14, 0xd8, 0x91, 0x25, 0x1b, 0xca, 0xfa, 0xf8, 0x1e, 0x24, 0xff, 0x96,
- 0x6d, 0x97, 0x97, 0xe2, 0xc5, 0x4a, 0x67, 0x79, 0xf3, 0xc0, 0x9a, 0x1e,
- 0x5b, 0x0c, 0xd8, 0x46, 0x70, 0x9d, 0xc6, 0x52, 0x15, 0xcc, 0xc2, 0x5b,
- 0xfc, 0x0e, 0xcc, 0x52, 0xb6, 0x2d, 0x34, 0x15, 0x83, 0x36, 0x7c, 0x70,
- 0x0f, 0x80, 0x78, 0xdc, 0x93, 0x29, 0x3a, 0x27, 0xb5, 0x58, 0x86, 0xc2,
- 0x2b, 0x43, 0x58, 0x19, 0x42, 0xe5, 0x45, 0x19, 0xa3, 0x2a, 0x61, 0x10,
- 0x46, 0x01, 0x61, 0x08, 0x80, 0x36, 0x09, 0x06, 0xbd, 0x73, 0x3e, 0x32,
- 0xd8, 0x00, 0x3a, 0x00, 0x8d, 0x4f, 0xae, 0x05, 0xdb, 0x8d, 0xbd, 0x9d,
- 0x44, 0x4b, 0xe3, 0xec, 0x3a, 0xbd, 0xcd, 0x09, 0x30, 0xc5, 0x47, 0xff,
- 0x09, 0x9c, 0x25, 0xb5, 0x21, 0x00, 0xc3, 0x6f, 0xc5, 0x18, 0x4f, 0x2f,
- 0x22, 0x82, 0xd6, 0x43, 0xfd, 0xe1, 0xcd, 0x40, 0x64, 0xea, 0xe0, 0x0c,
- 0x61, 0xa1, 0xe4, 0x91, 0xe2, 0xcc, 0xf5, 0x20, 0x16, 0x1c, 0x41, 0xbf,
- 0x16, 0xb9, 0x43, 0x1e, 0x4d, 0xeb, 0xdb, 0xf8, 0x09, 0xab, 0x6f, 0xa3,
- 0x27, 0x8c, 0x8f, 0x98, 0x97, 0x93, 0x3f, 0xf5, 0xb3, 0xdb, 0x5b, 0xc7,
- 0x6c, 0xf4, 0x9d, 0x0d, 0x32, 0x8a, 0xdc, 0x9c, 0x7c, 0xb8, 0x74, 0x62,
- 0xb1, 0xd3, 0x25, 0x94, 0x6d, 0xcf, 0x97, 0x1e, 0xb0, 0x47, 0x4f, 0x18,
- 0xc6, 0xc4, 0x67, 0xcc, 0xf4, 0x2f, 0x07, 0xeb, 0x6c, 0x7f, 0xf4, 0x9d,
- 0x77, 0xa4, 0x3c, 0x45, 0xdd, 0xe6, 0x03, 0x06, 0x57, 0x72, 0x03, 0x17,
- 0x1f, 0x1f, 0x49, 0x6a, 0x2b, 0x4a, 0x6a, 0xf5, 0xed, 0xa7, 0x90, 0x9a,
- 0x19, 0x48, 0x40, 0x6a, 0xc1, 0xf2, 0x3e, 0x46, 0x6a, 0xfe, 0x1e, 0x05,
- 0xa4, 0x86, 0xf6, 0x03, 0x4a, 0xd3, 0x85, 0xfd, 0xc5, 0xa4, 0x26, 0x24,
- 0x1a, 0x50, 0x1a, 0xbc, 0x17, 0x67, 0x7d, 0x8f, 0xc4, 0x5a, 0x74, 0x53,
- 0xd4, 0x03, 0xc0, 0x41, 0x5c, 0x12, 0x72, 0xcf, 0x6b, 0xfb, 0xeb, 0x17,
- 0x11, 0x90, 0x11, 0xcb, 0xa0, 0x91, 0xbb, 0x58, 0x2e, 0x9b, 0x2b, 0x90,
- 0x42, 0x72, 0xf8, 0x7e, 0xe4, 0xc1, 0x3a, 0x98, 0x59, 0x54, 0x80, 0x1f,
- 0xf2, 0x5b, 0x1b, 0x3e, 0x65, 0x92, 0x25, 0xb9, 0x44, 0xb0, 0x15, 0x59,
- 0x8e, 0x25, 0xcf, 0x92, 0x37, 0x32, 0xc9, 0xa1, 0x55, 0x04, 0xaa, 0x20,
- 0x4c, 0xf9, 0x92, 0x50, 0xb0, 0xcc, 0x40, 0x36, 0x59, 0x24, 0xa6, 0x30,
- 0x91, 0x19, 0x19, 0xd0, 0x24, 0x43, 0xd1, 0xe6, 0x4a, 0x15, 0x89, 0x6b,
- 0x93, 0x2f, 0xda, 0x8d, 0x48, 0x73, 0x36, 0xcd, 0x77, 0xf3, 0x09, 0x63,
- 0xb2, 0x85, 0xa8, 0x50, 0x1f, 0x87, 0x8f, 0x44, 0xe0, 0x03, 0x11, 0x68,
- 0xd2, 0x6e, 0x15, 0x89, 0xf4, 0x44, 0x26, 0x68, 0x0b, 0x5e, 0x40, 0x08,
- 0xdd, 0x46, 0x5a, 0x03, 0x90, 0x77, 0x90, 0x52, 0x47, 0x36, 0xd5, 0xbd,
- 0x8e, 0x99, 0x9f, 0x40, 0x4e, 0x08, 0x3a, 0x27, 0x5b, 0xd7, 0xa3, 0x90,
- 0x17, 0xd8, 0xf9, 0xc5, 0xed, 0xf3, 0x01, 0x4d, 0xd5, 0xec, 0xd5, 0x62,
- 0x20, 0x73, 0x7e, 0x74, 0xeb, 0xc7, 0x39, 0xa7, 0xad, 0xfa, 0xcf, 0xf3,
- 0xa5, 0x6b, 0xf4, 0x25, 0x5a, 0x69, 0x24, 0x5e, 0x13, 0x45, 0x58, 0xe0,
- 0x97, 0x2e, 0xc5, 0x7a, 0x36, 0x0b, 0xff, 0x39, 0xbd, 0xc0, 0x8c, 0xfc,
- 0x22, 0x96, 0x73, 0x3a, 0x59, 0xdc, 0x85, 0xe8, 0x39, 0x69, 0x75, 0xb5,
- 0x0c, 0x1c, 0x65, 0x30, 0x00, 0x39, 0x5b, 0xa5, 0x86, 0x53, 0xfb, 0x09,
- 0xe0, 0xff, 0xef, 0xde, 0xc4, 0x4f, 0xd9, 0xc5, 0x97, 0xbf, 0xfd, 0x2e,
- 0xbe, 0xfc, 0x6f, 0xb2, 0x8b, 0x2f, 0xff, 0x3f, 0xb2, 0x8b, 0x9a, 0x8b,
- 0xee, 0xed, 0x49, 0x7f, 0xf5, 0x76, 0x92, 0x3a, 0x2c, 0xe1, 0xdb, 0x08,
- 0xee, 0xa0, 0x30, 0x67, 0xda, 0x07, 0x6d, 0x85, 0x55, 0x6e, 0xc9, 0xe2,
- 0x6b, 0x41, 0xea, 0x71, 0xf6, 0x4e, 0x3c, 0xb9, 0x46, 0xd2, 0x1f, 0x34,
- 0xf2, 0xf2, 0xf8, 0xcc, 0x43, 0x15, 0x70, 0xbb, 0xa3, 0xe0, 0x52, 0xa2,
- 0x22, 0x47, 0xbd, 0xd7, 0x35, 0xb9, 0x34, 0x0d, 0x1f, 0xe7, 0x30, 0xec,
- 0x1a, 0x12, 0x28, 0xdc, 0x9e, 0xbc, 0x5d, 0x90, 0x0b, 0xc6, 0x1a, 0x21,
- 0x6c, 0x36, 0x68, 0xef, 0x35, 0x2d, 0xf7, 0x80, 0x1f, 0xff, 0x22, 0x9a,
- 0x85, 0x02, 0xf8, 0x28, 0x37, 0xa4, 0x38, 0x39, 0x08, 0x35, 0xb4, 0xa1,
- 0x83, 0x62, 0xf8, 0x30, 0xce, 0xee, 0xfc, 0x04, 0x39, 0xfc, 0x2a, 0x7a,
- 0xf8, 0xdf, 0x22, 0x87, 0x8c, 0x2e, 0x6b, 0xe0, 0x41, 0x91, 0x4b, 0xf4,
- 0xc3, 0xf9, 0xc9, 0x93, 0xd1, 0x2d, 0xbd, 0x73, 0x46, 0x8f, 0xaa, 0x92,
- 0xb3, 0xf4, 0x2a, 0xeb, 0xf9, 0x48, 0x62, 0x9f, 0x80, 0x31, 0x10, 0x64,
- 0xe9, 0x93, 0x32, 0xea, 0xa2, 0xc1, 0xfc, 0xa4, 0x7c, 0x98, 0x22, 0x5c,
- 0x4a, 0x3e, 0xbb, 0xfe, 0x62, 0xc0, 0x44, 0x2c, 0xaa, 0xb6, 0xb3, 0x29,
- 0x35, 0x6d, 0x5b, 0x1c, 0x23, 0xbd, 0xbf, 0x50, 0xdc, 0x79, 0x4f, 0x07,
- 0x68, 0xa7, 0x1c, 0x46, 0xef, 0x02, 0x6c, 0xc3, 0xda, 0x53, 0xdb, 0xd1,
- 0xea, 0x9a, 0x56, 0x63, 0x33, 0x09, 0x00, 0x72, 0x7c, 0xcd, 0xf0, 0x83,
- 0x97, 0xe5, 0xac, 0x4b, 0x9a, 0x00, 0x30, 0x4b, 0x93, 0x13, 0x19, 0xd4,
- 0x9e, 0x38, 0x67, 0x79, 0x23, 0x75, 0x48, 0x22, 0x35, 0x88, 0x88, 0xa8,
- 0x51, 0xa9, 0x33, 0x42, 0x17, 0xef, 0x06, 0x91, 0x10, 0xfd, 0xda, 0x1c,
- 0x70, 0xb2, 0x03, 0xd1, 0x80, 0x20, 0x66, 0xe4, 0x00, 0x9c, 0xb6, 0xd3,
- 0xfa, 0x1d, 0xbd, 0x95, 0x47, 0xf0, 0xee, 0x52, 0x68, 0xda, 0x6b, 0x2f,
- 0x9c, 0xeb, 0xc7, 0x3d, 0x35, 0x1f, 0xfc, 0x1c, 0x8f, 0x6c, 0x0f, 0x70,
- 0xba, 0x34, 0x8a, 0xc6, 0xf9, 0x1f, 0x25, 0xd5, 0xdc, 0x6b, 0x35, 0x66,
- 0xed, 0xc4, 0x72, 0x2b, 0xe6, 0x6f, 0xaa, 0x89, 0x56, 0x86, 0x00, 0xa4,
- 0x7e, 0x01, 0xc5, 0xb4, 0x25, 0xf0, 0xda, 0xb0, 0x5f, 0xc0, 0xf4, 0x3e,
- 0x60, 0xa0, 0x67, 0xe8, 0xa9, 0x81, 0xfd, 0x46, 0x82, 0x52, 0xc8, 0xfc,
- 0xea, 0x75, 0xac, 0x32, 0x9c, 0x39, 0x32, 0x67, 0xdf, 0x1e, 0x8c, 0xfe,
- 0xb8, 0xb3, 0xab, 0xd1, 0x70, 0xb9, 0x42, 0xac, 0x8d, 0x80, 0xa8, 0xd0,
- 0x25, 0x6f, 0x52, 0x4f, 0xb8, 0xa2, 0x00, 0x01, 0xb1, 0xba, 0x20, 0x3a,
- 0xfb, 0x1a, 0xdb, 0x66, 0x79, 0x6c, 0x92, 0x00, 0xe5, 0xe2, 0x95, 0xb3,
- 0xa8, 0x0e, 0x4f, 0xc1, 0xa8, 0x6a, 0x46, 0x62, 0xcc, 0x0d, 0xbb, 0x68,
- 0x2d, 0xa8, 0x12, 0x73, 0x2b, 0x56, 0x08, 0x4c, 0x30, 0x5d, 0x73, 0xcc,
- 0x4f, 0x90, 0x74, 0x26, 0x08, 0xa9, 0x2d, 0x0b, 0xbf, 0x23, 0x0b, 0x41,
- 0xa8, 0x66, 0x09, 0xb9, 0xe7, 0xad, 0x47, 0x2f, 0x6a, 0x78, 0xe6, 0xbb,
- 0x4f, 0x6e, 0x24, 0xf2, 0x17, 0x73, 0x02, 0x56, 0x72, 0x93, 0x3d, 0x88,
- 0x1f, 0x3d, 0xb3, 0x1f, 0xfa, 0x8b, 0x4b, 0x50, 0x8d, 0x14, 0xfe, 0x18,
- 0x98, 0xcc, 0x0d, 0x9b, 0xff, 0x03, 0x7b, 0xbb, 0x99, 0xc2, 0x58, 0x15,
- 0xa2, 0xe6, 0x48, 0x11, 0x70, 0x28, 0x27, 0x73, 0x82, 0x8a, 0xd0, 0x1a,
- 0x02, 0xb3, 0x87, 0x18, 0xb5, 0x2b, 0xb4, 0x0e, 0x33, 0x60, 0x68, 0x56,
- 0x75, 0xa3, 0xc1, 0xfc, 0x2d, 0xa0, 0x2e, 0xf1, 0x3e, 0x35, 0x8f, 0xe5,
- 0xae, 0xd2, 0xf7, 0x4e, 0xa6, 0x21, 0x6b, 0x5b, 0x3e, 0xb9, 0x81, 0x48,
- 0x2f, 0x17, 0x9d, 0x3f, 0x3d, 0x8d, 0xf5, 0xe0, 0x4a, 0x02, 0xe1, 0x2e,
- 0xd0, 0x00, 0xc8, 0x00, 0x4f, 0x54, 0x49, 0x97, 0x61, 0x5e, 0x70, 0x2e,
- 0x0d, 0xdc, 0xa3, 0xc5, 0x6d, 0x5e, 0x95, 0x05, 0x44, 0x94, 0xdb, 0xb4,
- 0xca, 0xa1, 0x1c, 0x9a, 0xd1, 0x7e, 0x3c, 0x3c, 0x3e, 0x4f, 0x36, 0x28,
- 0x8b, 0x73, 0xfc, 0xb0, 0x22, 0x57, 0x35, 0xd9, 0xca, 0x9a, 0xc9, 0xd6,
- 0xe2, 0x26, 0xdf, 0x2a, 0xea, 0x7a, 0x3a, 0xde, 0x1c, 0x5a, 0xa2, 0xe2,
- 0x2e, 0x89, 0x18, 0x99, 0x96, 0x77, 0x48, 0x71, 0x5b, 0x9a, 0x86, 0x37,
- 0xcc, 0x1a, 0x04, 0xbb, 0x50, 0x9b, 0x85, 0x9e, 0x0f, 0xeb, 0x72, 0x13,
- 0xda, 0xe6, 0x6d, 0x9a, 0xcf, 0xd4, 0x40, 0x56, 0x30, 0x41, 0x23, 0xb4,
- 0x48, 0xe0, 0x63, 0xd9, 0x5d, 0x81, 0x30, 0x3d, 0x71, 0xfc, 0x07, 0x31,
- 0x1d, 0x45, 0xe3, 0xa0, 0x22, 0x39, 0x9b, 0x5c, 0x63, 0x55, 0xcc, 0x6a,
- 0x02, 0x55, 0xd1, 0xc6, 0x18, 0xf7, 0x09, 0x57, 0x9d, 0x56, 0x85, 0x7d,
- 0x67, 0x59, 0x98, 0x49, 0xcb, 0x29, 0xc7, 0xc3, 0xad, 0x9e, 0xc5, 0x91,
- 0xcf, 0x0b, 0xc6, 0xd3, 0x87, 0x5a, 0x7a, 0x5b, 0xe6, 0x70, 0xc8, 0x5f,
- 0x2e, 0x6b, 0x6b, 0x1c, 0x85, 0xbb, 0x57, 0xb6, 0x6b, 0x18, 0x35, 0x45,
- 0x7a, 0xdb, 0x29, 0x8e, 0xcc, 0x3a, 0xe9, 0xed, 0xf5, 0x70, 0xb6, 0x0a,
- 0x40, 0x59, 0xb3, 0x84, 0x23, 0xa3, 0xc2, 0x66, 0xf5, 0x7e, 0xea, 0x25,
- 0x81, 0x7d, 0xb4, 0x71, 0xae, 0x01, 0x85, 0xee, 0xb8, 0x2a, 0xf2, 0x7f,
- 0x30, 0xaa, 0x82, 0x3d, 0xc2, 0xd3, 0x0c, 0xb1, 0xf7, 0x48, 0xc7, 0xb6,
- 0x3b, 0x44, 0x23, 0x88, 0x22, 0x2e, 0x78, 0x43, 0xfa, 0x29, 0x1c, 0x52,
- 0x86, 0xc4, 0x50, 0xb4, 0xdf, 0xfb, 0x09, 0x43, 0xf2, 0x06, 0x11, 0x31,
- 0x57, 0xb4, 0x87, 0x44, 0xd9, 0x0a, 0x92, 0x59, 0x7a, 0x6d, 0xa4, 0xac,
- 0x49, 0x13, 0xb9, 0x39, 0x36, 0xf2, 0xd3, 0x11, 0x0e, 0xe2, 0xbb, 0x74,
- 0x92, 0x98, 0x5f, 0x7f, 0x80, 0x74, 0xb1, 0xb9, 0xfa, 0x8c, 0x09, 0x63,
- 0x14, 0x5e, 0x18, 0x83, 0xfe, 0xeb, 0xbb, 0x33, 0xd7, 0x61, 0xbb, 0xde,
- 0x5d, 0x98, 0xe5, 0x60, 0x91, 0xe3, 0xcc, 0xb9, 0x79, 0x28, 0x66, 0x32,
- 0x08, 0x48, 0xb1, 0x2f, 0x6f, 0x29, 0xab, 0x21, 0x7e, 0xa1, 0x35, 0x17,
- 0x20, 0x7f, 0x12, 0x2b, 0x86, 0xb9, 0xdb, 0x7c, 0x63, 0x26, 0x4a, 0xa8,
- 0x23, 0x48, 0x88, 0x0e, 0x8f, 0xe6, 0x22, 0x85, 0x31, 0x95, 0x73, 0x65,
- 0x85, 0xf1, 0x5b, 0x3f, 0x92, 0x3f, 0x50, 0x0e, 0x9f, 0xb5, 0xfd, 0xa9,
- 0xe1, 0xe4, 0xbf, 0x1d, 0xf1, 0xa7, 0x1e, 0xe9, 0xff, 0x7e, 0x01, 0x4c,
- 0x92, 0xc7, 0xfb, 0x3a, 0x96, 0x24, 0x3e, 0xca, 0x66, 0x00, 0x0d, 0xc7,
- 0x5e, 0x6b, 0x56, 0xd6, 0xa4, 0x7a, 0x58, 0x90, 0x1d, 0x4c, 0xf2, 0x7f,
- 0x79, 0x85, 0xe8, 0xda, 0xe2, 0xdc, 0x2b, 0x0f, 0x8e, 0x7e, 0x18, 0xc9,
- 0x2d, 0xb4, 0x1d, 0xb2, 0x3a, 0x42, 0xdb, 0x65, 0xf6, 0x82, 0x3c, 0x2a,
- 0xa9, 0xaf, 0xa2, 0x10, 0x59, 0x4e, 0x39, 0x49, 0xc3, 0x55, 0x20, 0x09,
- 0xe2, 0x72, 0xa9, 0xa1, 0x7a, 0xd8, 0x86, 0xe2, 0x81, 0xc1, 0x14, 0x25,
- 0x71, 0xc0, 0x72, 0xc9, 0xf5, 0xb6, 0xa9, 0x9c, 0x5e, 0xde, 0x10, 0x14,
- 0x90, 0xae, 0xf2, 0x60, 0xd9, 0xa5, 0x69, 0xa6, 0x5a, 0x16, 0xe8, 0xbd,
- 0xbd, 0x52, 0x96, 0xbf, 0x77, 0xcf, 0xd9, 0xf9, 0xf1, 0xe8, 0x80, 0x0e,
- 0xd8, 0xe9, 0xfb, 0x93, 0xbf, 0x92, 0xbc, 0x0d, 0x08, 0x00, 0x94, 0xfc,
- 0xa0, 0xae, 0x63, 0x17, 0x43, 0xad, 0x08, 0xed, 0x11, 0x4a, 0x16, 0xbc,
- 0x36, 0x92, 0x75, 0xef, 0x74, 0x8b, 0x5d, 0x1a, 0x15, 0x91, 0x0b, 0x9c,
- 0x68, 0x86, 0xe0, 0x72, 0x52, 0x77, 0x28, 0xe2, 0x6b, 0xa2, 0x18, 0x58,
- 0xcb, 0x10, 0xb1, 0x89, 0x02, 0x40, 0x7c, 0x41, 0x9f, 0xb5, 0x24, 0xb2,
- 0x1a, 0x9a, 0xee, 0xcd, 0x44, 0x3b, 0x89, 0xa0, 0x66, 0xa2, 0x57, 0xec,
- 0xcc, 0x5d, 0x91, 0x7f, 0xe0, 0x65, 0x3b, 0x3e, 0x88, 0x29, 0x92, 0x82,
- 0xcf, 0x34, 0x38, 0x96, 0xa9, 0xe5, 0x88, 0x00, 0x14, 0x17, 0xe6, 0x9e,
- 0xf9, 0x3a, 0x25, 0x5e, 0xc0, 0xf6, 0xbf, 0x34, 0x9b, 0x07, 0x17, 0x74,
- 0x5d, 0x92, 0xef, 0x51, 0xe5, 0x38, 0xfe, 0xcb, 0xf3, 0x2a, 0xc1, 0x8a,
- 0xc8, 0x81, 0x7c, 0xb4, 0xa0, 0x53, 0x73, 0x02, 0x85, 0x80, 0x88, 0xe4,
- 0xcc, 0x50, 0xc2, 0x58, 0x1b, 0x2d, 0x45, 0xd1, 0xcd, 0xfd, 0x19, 0xf0,
- 0xfb, 0x3c, 0xb5, 0x6e, 0xea, 0x0f, 0x4b, 0x2d, 0x08, 0x73, 0x4f, 0x5e,
- 0xd3, 0xcf, 0xf8, 0xb4, 0x3d, 0x8c, 0x0a, 0xf8, 0x92, 0x5b, 0xb2, 0x03,
- 0xbd, 0x2b, 0xe1, 0xa7, 0x94, 0x94, 0x31, 0x6d, 0xb1, 0xb8, 0xd0, 0x1a,
- 0x4c, 0x41, 0xbf, 0xe6, 0x52, 0xee, 0x27, 0x87, 0x47, 0xe7, 0x60, 0x4a,
- 0x47, 0xef, 0xbf, 0x86, 0x0f, 0xc7, 0x63, 0xf4, 0xd4, 0x66, 0xcd, 0x77,
- 0x0d, 0xe3, 0xe9, 0xab, 0xec, 0xd8, 0x69, 0x8e, 0x2e, 0x77, 0xba, 0xf2,
- 0x21, 0x03, 0x4e, 0x7f, 0xd7, 0x8c, 0xa6, 0x94, 0x15, 0x88, 0x83, 0x7d,
- 0x7f, 0x76, 0x4f, 0xae, 0x56, 0x5c, 0x6b, 0xe8, 0xa8, 0x0b, 0xf4, 0x94,
- 0x19, 0x91, 0xa1, 0xab, 0x98, 0x6b, 0x95, 0xd2, 0x50, 0xda, 0xb8, 0x0b,
- 0x74, 0x8e, 0xe5, 0x8a, 0x75, 0x20, 0x8b, 0xed, 0x81, 0xb1, 0x31, 0x69,
- 0xf5, 0xcd, 0xb3, 0x51, 0x6f, 0xb6, 0x14, 0x06, 0x2b, 0xf5, 0x93, 0x9c,
- 0x2d, 0x7e, 0x89, 0xf6, 0x5d, 0x19, 0xda, 0xd6, 0xf9, 0x8a, 0x50, 0x59,
- 0x4e, 0x51, 0x77, 0xb0, 0xe2, 0x7d, 0xbe, 0xd5, 0x5b, 0x4b, 0x6f, 0xf6,
- 0x54, 0x74, 0x52, 0xa1, 0xf0, 0xc0, 0x73, 0x4e, 0xe7, 0x93, 0x63, 0x3d,
- 0xbc, 0x36, 0x83, 0x4d, 0xb5, 0x08, 0x0b, 0xa0, 0x95, 0x7a, 0xb5, 0x0c,
- 0xca, 0x51, 0xe0, 0xc9, 0xfa, 0x81, 0x51, 0x79, 0x3f, 0x1e, 0xec, 0x7f,
- 0xfc, 0xea, 0xc3, 0xfb, 0xc3, 0x93, 0xa3, 0xf5, 0x2e, 0x45, 0x5e, 0x3a,
- 0xe4, 0xc9, 0x1a, 0xd1, 0x00, 0x02, 0xdb, 0xe0, 0xe7, 0x68, 0xe3, 0xa8,
- 0x03, 0x66, 0x0a, 0xbf, 0x01, 0x50, 0x47, 0x16, 0xbc, 0x6b, 0x16, 0x59,
- 0x16, 0x53, 0x40, 0xfd, 0x78, 0x93, 0x57, 0x1c, 0x15, 0x31, 0xb7, 0xe8,
- 0x00, 0x23, 0x16, 0x1a, 0xa2, 0x3f, 0x73, 0x58, 0x8d, 0x0a, 0xee, 0x41,
- 0xc6, 0x7b, 0x25, 0x68, 0x5a, 0xaa, 0x3d, 0x32, 0x06, 0xb4, 0x18, 0x5a,
- 0x62, 0xc6, 0x13, 0xd9, 0xee, 0xda, 0x25, 0x9f, 0x4d, 0x93, 0x75, 0x6a,
- 0xc9, 0x50, 0xf2, 0x40, 0x06, 0x39, 0xa9, 0x9a, 0xf5, 0xbe, 0x4a, 0x2d,
- 0xb9, 0x97, 0x71, 0x81, 0x0b, 0x3e, 0x80, 0xff, 0xa0, 0x8c, 0xba, 0x94,
- 0xe9, 0x7a, 0x98, 0xdd, 0x67, 0x50, 0x17, 0xe5, 0xad, 0x03, 0x91, 0x0c,
- 0xbe, 0x2f, 0x2b, 0xd8, 0x47, 0x0f, 0x9d, 0x84, 0xc0, 0x0f, 0x19, 0x0d,
- 0x32, 0x8c, 0x5d, 0x24, 0x29, 0x20, 0x45, 0x59, 0x05, 0x54, 0x81, 0x3b,
- 0xdb, 0xbf, 0xf8, 0x26, 0xea, 0x79, 0x77, 0xf5, 0x06, 0x85, 0x14, 0xad,
- 0xdc, 0x66, 0x35, 0x05, 0x5f, 0x3d, 0xea, 0x5b, 0x9d, 0xc9, 0x90, 0x75,
- 0x97, 0x61, 0x84, 0xda, 0x84, 0xa7, 0x3d, 0x58, 0x31, 0x95, 0xb3, 0x21,
- 0xec, 0xcd, 0xc8, 0x6b, 0xbc, 0x3a, 0x37, 0x57, 0x0b, 0xff, 0x19, 0x0e,
- 0xb8, 0x20, 0x00, 0xee, 0xdf, 0x97, 0x11, 0x81, 0x04, 0x3b, 0x8c, 0xc8,
- 0xc9, 0x64, 0x9f, 0x60, 0xcb, 0x78, 0x92, 0x29, 0xb9, 0x0c, 0xca, 0xe0,
- 0x94, 0x32, 0x9f, 0x62, 0x7e, 0x0f, 0xc6, 0x64, 0xf3, 0x37, 0x68, 0x58,
- 0xb6, 0xfc, 0x84, 0x77, 0x19, 0x8c, 0x1f, 0x12, 0x2f, 0xb1, 0x26, 0xe4,
- 0x70, 0x73, 0x11, 0x12, 0xf7, 0x7a, 0xc9, 0x46, 0x36, 0xbc, 0x32, 0xac,
- 0xae, 0x47, 0x4d, 0xed, 0xec, 0xd1, 0xcf, 0x5d, 0xfc, 0x7c, 0xd6, 0x13,
- 0xbf, 0x55, 0x2b, 0x1b, 0x8f, 0xf8, 0x57, 0x98, 0x86, 0xd7, 0xe2, 0x66,
- 0xec, 0xdf, 0xcf, 0x2f, 0x1f, 0x21, 0x21, 0x91, 0xef, 0xa2, 0x98, 0x32,
- 0x6e, 0x1d, 0x98, 0x59, 0x92, 0xf4, 0x40, 0x48, 0xa0, 0x54, 0xbd, 0xc3,
- 0x4c, 0x70, 0xc2, 0x49, 0xdc, 0x5e, 0xd6, 0xd8, 0xc7, 0x2a, 0xbb, 0x4e,
- 0xeb, 0xeb, 0x64, 0xd9, 0xe4, 0x14, 0x06, 0x10, 0x41, 0xba, 0x9e, 0xd9,
- 0xb0, 0x75, 0xe9, 0x58, 0x71, 0xe2, 0xec, 0xce, 0xb2, 0xa5, 0x11, 0x69,
- 0xd3, 0xf2, 0xc8, 0x40, 0x8a, 0x20, 0xc6, 0x18, 0x21, 0xa8, 0x95, 0x63,
- 0xf1, 0xe8, 0x49, 0xbf, 0x24, 0xd5, 0x9c, 0xac, 0xa9, 0x88, 0x4d, 0xc8,
- 0x2e, 0xcd, 0x9a, 0xe5, 0x1e, 0xd4, 0x00, 0x86, 0x1c, 0x66, 0x46, 0xf0,
- 0x1d, 0x27, 0x51, 0x56, 0xf6, 0x6f, 0x70, 0x10, 0xab, 0xd2, 0xa1, 0x66,
- 0x55, 0xf7, 0xb2, 0x79, 0x9a, 0xde, 0xc1, 0x5a, 0x19, 0xe0, 0x83, 0x79,
- 0xbb, 0xcc, 0x96, 0x53, 0xcb, 0x94, 0xd8, 0x05, 0x84, 0x36, 0x06, 0x0d,
- 0x6a, 0x51, 0x81, 0x7f, 0xed, 0xc9, 0xb9, 0x84, 0x8f, 0xd7, 0x1c, 0xe9,
- 0x15, 0xd1, 0x55, 0x6f, 0x81, 0x18, 0x5b, 0x53, 0xfc, 0x23, 0xad, 0xd3,
- 0x06, 0x95, 0xe3, 0xe0, 0xf2, 0x42, 0x29, 0xa2, 0xd7, 0x36, 0xc9, 0x40,
- 0x25, 0xd1, 0x5b, 0x48, 0x98, 0xaf, 0xa3, 0xa8, 0xfc, 0x84, 0xf6, 0xc7,
- 0xc5, 0x41, 0x90, 0x68, 0x04, 0x9d, 0x17, 0x61, 0x20, 0xe2, 0x36, 0x47,
- 0x91, 0x48, 0xc3, 0x97, 0xb3, 0x66, 0xe2, 0x7d, 0x39, 0xcd, 0xd2, 0x59,
- 0x12, 0x0b, 0x40, 0xbf, 0xe4, 0xe2, 0x92, 0x1a, 0x07, 0x00, 0xa1, 0xa8,
- 0xd0, 0xe0, 0x01, 0x89, 0x20, 0xe6, 0x6c, 0xca, 0xa2, 0x05, 0x16, 0x79,
- 0x09, 0xb4, 0x8b, 0xe0, 0xf8, 0x92, 0x22, 0xcf, 0xe9, 0x2c, 0x8a, 0x3c,
- 0x00, 0xfd, 0xdc, 0x66, 0x0e, 0x20, 0x32, 0x12, 0x29, 0x97, 0xf6, 0x01,
- 0xa4, 0x45, 0x70, 0x4e, 0x5c, 0x60, 0x3d, 0x50, 0xe8, 0x66, 0x54, 0xa3,
- 0x13, 0x44, 0x43, 0x0d, 0xe4, 0xa7, 0x71, 0x3d, 0xd8, 0x42, 0xa1, 0x9b,
- 0x72, 0x25, 0xc2, 0x42, 0x8e, 0x1d, 0x32, 0x0a, 0xe1, 0x20, 0x60, 0x2e,
- 0x9a, 0x40, 0xc6, 0x05, 0x64, 0xb1, 0xfc, 0x0d, 0x9f, 0xae, 0xb4, 0x91,
- 0x6a, 0x53, 0x34, 0x50, 0x01, 0x1e, 0xda, 0xdd, 0x8d, 0x7b, 0x39, 0x04,
- 0x5e, 0x4c, 0x6c, 0x1a, 0xb4, 0x14, 0x83, 0x3a, 0xbd, 0xcc, 0xd4, 0xc2,
- 0x47, 0xb5, 0x8b, 0x08, 0x58, 0x76, 0x62, 0x96, 0x8f, 0x03, 0xff, 0xf1,
- 0x19, 0x29, 0x4d, 0x83, 0xb0, 0x9e, 0x06, 0x9d, 0x72, 0xd2, 0x25, 0x5c,
- 0x8e, 0x4e, 0x42, 0xca, 0xb5, 0xc6, 0x5f, 0x27, 0xf5, 0x2c, 0x5f, 0xa8,
- 0x53, 0xdf, 0xdc, 0xa6, 0xe0, 0xa8, 0xb8, 0x9f, 0x23, 0xc1, 0x21, 0x1d,
- 0x18, 0x34, 0x48, 0xc3, 0xb7, 0xe4, 0x5d, 0x99, 0x26, 0x1b, 0xb6, 0x79,
- 0x6e, 0xfd, 0xf9, 0xf6, 0x0e, 0xc6, 0xfb, 0x7c, 0xfb, 0x33, 0x3f, 0x49,
- 0xda, 0x66, 0x93, 0x0a, 0xa0, 0xa8, 0x04, 0x9e, 0x3e, 0x96, 0x06, 0x31,
- 0x23, 0xbd, 0x0c, 0xab, 0x9a, 0x19, 0x69, 0x11, 0xa6, 0x00, 0x49, 0xb1,
- 0x1d, 0xe4, 0x05, 0x27, 0x74, 0x9a, 0x7f, 0x65, 0x27, 0x53, 0x0e, 0xb3,
- 0xeb, 0x62, 0x7a, 0xa4, 0x0c, 0x5b, 0xc6, 0xa0, 0x15, 0x1c, 0xef, 0xce,
- 0xd9, 0xb7, 0xed, 0xf4, 0x5b, 0x81, 0xcc, 0xd3, 0x5b, 0x06, 0x19, 0xc4,
- 0x64, 0x37, 0x0c, 0x24, 0x47, 0xe5, 0x98, 0x40, 0x3d, 0xa2, 0x44, 0xdb,
- 0x0b, 0xd2, 0x22, 0x44, 0x9a, 0x4d, 0xab, 0x66, 0x0b, 0x39, 0xb5, 0x1c,
- 0x51, 0x9c, 0x4e, 0x08, 0x4d, 0xcb, 0x96, 0x02, 0x3c, 0x7f, 0x7b, 0xd0,
- 0x69, 0x6e, 0xf7, 0xd9, 0xe7, 0x9f, 0xdb, 0xbc, 0xfe, 0x4c, 0x82, 0x24,
- 0x1d, 0x74, 0xab, 0x11, 0xa1, 0x24, 0xdf, 0x88, 0xed, 0x80, 0x54, 0xc4,
- 0x8d, 0x32, 0x31, 0x38, 0x6e, 0x28, 0xe4, 0xfa, 0xeb, 0xb2, 0xa6, 0xeb,
- 0x1c, 0x32, 0xcc, 0x56, 0x2b, 0xad, 0x2f, 0x26, 0x75, 0x82, 0x3c, 0x38,
- 0x4b, 0xd6, 0x00, 0xc5, 0x6e, 0x67, 0x0e, 0xc1, 0x97, 0x41, 0x14, 0xda,
- 0x55, 0xc1, 0x29, 0xbc, 0x7f, 0xa3, 0x3b, 0xe4, 0x2a, 0x6b, 0xc2, 0x38,
- 0x77, 0x81, 0x7c, 0x0b, 0xba, 0x58, 0x0d, 0x35, 0xa5, 0xb5, 0x12, 0x38,
- 0x4a, 0xff, 0x35, 0x5f, 0x8f, 0x0a, 0x29, 0xe3, 0x15, 0x99, 0xfa, 0x12,
- 0x44, 0xf4, 0xda, 0xda, 0xbc, 0x8b, 0xa8, 0x41, 0xfc, 0x4b, 0x85, 0x2f,
- 0x13, 0x93, 0x0f, 0x70, 0xb5, 0x9a, 0x26, 0xd5, 0x1a, 0xa1, 0xb8, 0xee,
- 0x29, 0x65, 0xd5, 0x42, 0xad, 0x2a, 0x02, 0x7a, 0xe0, 0xea, 0xc8, 0x25,
- 0x32, 0xf1, 0xb5, 0x6d, 0x11, 0x18, 0x89, 0x9c, 0x32, 0x4c, 0x63, 0xc1,
- 0x2a, 0xa0, 0x07, 0x0b, 0x0b, 0xd2, 0x20, 0xf6, 0xd4, 0xaf, 0x9e, 0xd5,
- 0x8a, 0x99, 0x76, 0xef, 0x7b, 0xeb, 0x14, 0x9c, 0xfc, 0x23, 0x5b, 0x27,
- 0x4c, 0x43, 0x70, 0x20, 0x55, 0xba, 0x68, 0x56, 0xd1, 0xb4, 0x5c, 0x10,
- 0x6e, 0x5f, 0x0e, 0xfe, 0x3a, 0x3d, 0xd3, 0x3d, 0xf9, 0xf4, 0xce, 0xba,
- 0xe6, 0x65, 0xfb, 0x76, 0x73, 0x50, 0x26, 0x0f, 0xc7, 0xa2, 0x07, 0xb2,
- 0x1d, 0x9b, 0x7a, 0xb2, 0x19, 0xc7, 0x11, 0x55, 0x0e, 0x08, 0x4f, 0x7b,
- 0x51, 0x7d, 0x66, 0xf0, 0xd6, 0x0e, 0xf4, 0xcd, 0x97, 0xad, 0xd6, 0xee,
- 0xee, 0x86, 0xf3, 0x07, 0xfd, 0xae, 0x6e, 0x95, 0xec, 0x75, 0x49, 0x45,
- 0x02, 0xa7, 0xca, 0x14, 0xe5, 0xb2, 0x6b, 0x7d, 0xdf, 0xb6, 0x2b, 0x90,
- 0x67, 0xae, 0x76, 0xc5, 0x19, 0x59, 0x05, 0x9a, 0x2b, 0xc7, 0xf9, 0x8a,
- 0xc2, 0x89, 0x48, 0xf6, 0x1d, 0x97, 0x86, 0xde, 0x94, 0x94, 0x28, 0x31,
- 0xb1, 0xa9, 0x96, 0x93, 0x26, 0xbc, 0xf7, 0xb5, 0xec, 0x05, 0x2e, 0x02,
- 0xf6, 0x3f, 0x68, 0xd1, 0x54, 0xd0, 0x59, 0xfb, 0xb4, 0x6b, 0x48, 0x1b,
- 0x44, 0xc4, 0x98, 0x48, 0xb2, 0x0e, 0x9c, 0xce, 0xf5, 0x3e, 0x87, 0x53,
- 0x4a, 0xbe, 0x9c, 0xcb, 0xe4, 0x5a, 0xb9, 0x94, 0xbd, 0xbb, 0x6c, 0xfc,
- 0xe6, 0x4b, 0x72, 0xb8, 0xdc, 0x03, 0x5f, 0x88, 0xf1, 0x3e, 0x89, 0x8e,
- 0xb6, 0xe8, 0xcf, 0x5e, 0x42, 0x2a, 0x4c, 0x64, 0x25, 0x0d, 0xfd, 0xad,
- 0x6a, 0xd1, 0x4b, 0xc1, 0xf6, 0x5a, 0xbb, 0x2c, 0xcb, 0x95, 0x8d, 0xb9,
- 0x1a, 0xb9, 0x58, 0x0d, 0x2f, 0x80, 0x8e, 0xe3, 0xd9, 0x1c, 0x61, 0x31,
- 0x31, 0xd9, 0x3d, 0x92, 0xa3, 0x15, 0x4b, 0xce, 0x1a, 0x3f, 0x58, 0x70,
- 0x70, 0x4d, 0xd4, 0x78, 0x23, 0xf5, 0xdb, 0x48, 0xde, 0x5a, 0xbd, 0x20,
- 0xf4, 0xf4, 0x9b, 0x2f, 0x81, 0x8f, 0x42, 0xbf, 0xfe, 0xc5, 0xbe, 0x4d,
- 0x3f, 0x0c, 0x5d, 0x9a, 0xb3, 0xbd, 0x72, 0x22, 0x46, 0x98, 0xd3, 0xc7,
- 0xb7, 0x58, 0x42, 0x55, 0x59, 0x70, 0xbd, 0xbf, 0x4e, 0xfa, 0xdd, 0xfa,
- 0x5f, 0xd6, 0x21, 0x45, 0xa8, 0x41, 0x01, 0x18, 0xf7, 0x5c, 0xb2, 0x7b,
- 0x5a, 0x06, 0xb1, 0x2c, 0x14, 0xfa, 0x87, 0x27, 0xb8, 0xaa, 0xf9, 0x53,
- 0x63, 0xfe, 0xa9, 0x67, 0x47, 0xfd, 0x53, 0xcf, 0x8d, 0xfb, 0xa7, 0x9e,
- 0x1b, 0xf9, 0x4f, 0xbd, 0x5f, 0xb1, 0xa3, 0xeb, 0xdc, 0xbc, 0x6b, 0xdd,
- 0x6b, 0xdc, 0x6b, 0xbb, 0xb7, 0xbe, 0xaa, 0x69, 0xdf, 0xfa, 0x8a, 0x2c,
- 0x85, 0xa4, 0xb3, 0x4c, 0xe6, 0x00, 0xb9, 0x95, 0x90, 0xb2, 0x81, 0x3c,
- 0xf1, 0x7e, 0x44, 0x1f, 0xf6, 0x1f, 0xa0, 0x45, 0xa5, 0x68, 0x89, 0x7a,
- 0x46, 0xca, 0x84, 0xf3, 0xca, 0xd9, 0x0e, 0xec, 0x52, 0xab, 0x33, 0x25,
- 0x70, 0xb1, 0xd9, 0xd7, 0x83, 0x33, 0x4a, 0xd6, 0xc1, 0xcb, 0x65, 0x05,
- 0xa5, 0x5f, 0xaa, 0x88, 0x71, 0x1a, 0xa9, 0x42, 0xa4, 0x49, 0x5f, 0xef,
- 0xf6, 0xdf, 0x7f, 0xd8, 0x3f, 0x79, 0x34, 0x8c, 0xc4, 0x8f, 0x11, 0xb5,
- 0x86, 0x28, 0x88, 0xe4, 0xbe, 0xc6, 0x4a, 0x71, 0x95, 0x74, 0x87, 0x53,
- 0x25, 0xd6, 0x1f, 0xe9, 0x4a, 0xff, 0x39, 0x1a, 0x81, 0xfb, 0xbd, 0x48,
- 0xb1, 0x6f, 0x7d, 0xc4, 0xf3, 0x1b, 0xe6, 0x3f, 0x3d, 0x7d, 0x9f, 0x5e,
- 0xef, 0x89, 0x29, 0xd7, 0x56, 0x36, 0x8b, 0x68, 0x0b, 0x96, 0xeb, 0x93,
- 0xe4, 0xa2, 0xfa, 0x1a, 0x14, 0xd2, 0xbe, 0x57, 0xa9, 0x15, 0x7a, 0x09,
- 0x2a, 0x68, 0x5f, 0xae, 0x36, 0x4b, 0xef, 0x1f, 0x1c, 0xb8, 0xb8, 0xec,
- 0x76, 0x86, 0x67, 0x2b, 0x2e, 0xe5, 0xb7, 0x57, 0xf5, 0xb1, 0x70, 0x33,
- 0xd4, 0x22, 0xa3, 0xd8, 0xd5, 0x41, 0x53, 0x72, 0x5e, 0xc4, 0x6b, 0x19,
- 0xcd, 0x17, 0xf1, 0x48, 0x66, 0x32, 0x99, 0xf8, 0x82, 0xa6, 0x56, 0xa0,
- 0x40, 0xad, 0x8d, 0x91, 0x18, 0x5d, 0xcf, 0xf6, 0x09, 0x36, 0x4e, 0x92,
- 0x04, 0x58, 0x5b, 0x08, 0x62, 0xd8, 0x32, 0x85, 0x12, 0x76, 0xd3, 0xd7,
- 0x64, 0x76, 0xd5, 0x33, 0x55, 0x28, 0xbb, 0x58, 0xce, 0x0d, 0xf5, 0x1a,
- 0x89, 0x63, 0xba, 0x5e, 0x27, 0x4f, 0xc4, 0x19, 0x38, 0x9c, 0xaf, 0x12,
- 0x3f, 0x11, 0xfe, 0xa0, 0x80, 0xcd, 0x91, 0x90, 0x8a, 0x7e, 0xf4, 0x6e,
- 0xe8, 0x8d, 0x8e, 0x2f, 0x8e, 0x92, 0xfd, 0x0f, 0x17, 0xdf, 0xf4, 0xbc,
- 0x02, 0x2c, 0xed, 0x0c, 0x1b, 0xa3, 0x2c, 0x54, 0x79, 0xa6, 0x08, 0xd9,
- 0xb4, 0x76, 0x2c, 0xac, 0x45, 0xb0, 0x72, 0x3b, 0x1e, 0xf1, 0xce, 0x46,
- 0xbf, 0x18, 0xbe, 0xd8, 0xec, 0x6c, 0xcc, 0x6a, 0x88, 0x2b, 0xaf, 0x6c,
- 0x8c, 0xac, 0x16, 0x5d, 0x02, 0x1e, 0xca, 0x12, 0xc5, 0xe0, 0x6c, 0x39,
- 0x84, 0x55, 0x88, 0xcc, 0x6a, 0x59, 0x0c, 0x73, 0x34, 0x6d, 0xc2, 0x2a,
- 0xdb, 0xd8, 0x28, 0x00, 0xfb, 0x1e, 0x01, 0x68, 0x45, 0x4b, 0x94, 0xf1,
- 0x0b, 0x26, 0xda, 0xe8, 0xe8, 0x48, 0x12, 0x93, 0x5a, 0x75, 0x09, 0x53,
- 0x92, 0xaa, 0x15, 0xf8, 0x30, 0xf5, 0x21, 0xe8, 0x96, 0x0a, 0x10, 0x2e,
- 0xd1, 0x23, 0x0a, 0x0b, 0x95, 0xcc, 0x73, 0xce, 0xb2, 0xf7, 0x20, 0xa6,
- 0xba, 0x94, 0x2c, 0x4a, 0xd9, 0x8f, 0xfc, 0x6f, 0x9c, 0x07, 0x1c, 0x48,
- 0xa5, 0x2b, 0x48, 0x0b, 0xf2, 0x02, 0xc3, 0xe9, 0x71, 0x74, 0x9d, 0x03,
- 0xf2, 0x47, 0xe1, 0x2a, 0x76, 0x69, 0x60, 0x81, 0x43, 0x40, 0xd0, 0x8d,
- 0xd1, 0x66, 0x62, 0x0b, 0x72, 0x91, 0x74, 0x2c, 0xed, 0x51, 0x7c, 0x65,
- 0x27, 0x9e, 0x32, 0xc8, 0x6b, 0x8e, 0x41, 0x8d, 0x78, 0x27, 0x31, 0xbc,
- 0x68, 0xc1, 0xfd, 0x26, 0x77, 0xd3, 0x78, 0xc6, 0x18, 0x97, 0xc5, 0x2c,
- 0xb9, 0x06, 0x2c, 0x47, 0x6e, 0x1e, 0x7c, 0x7f, 0xd8, 0x29, 0x3e, 0xc9,
- 0xe5, 0x1f, 0xd9, 0x9d, 0xcb, 0x31, 0xde, 0xab, 0xb2, 0x93, 0xbd, 0xe4,
- 0x4a, 0x14, 0x4f, 0x27, 0x80, 0xf4, 0x69, 0x96, 0x2d, 0x2c, 0xde, 0x19,
- 0xd0, 0xff, 0x59, 0x11, 0xa6, 0x22, 0xe8, 0x28, 0x77, 0x3e, 0x0f, 0xaf,
- 0x1c, 0xeb, 0x3b, 0x62, 0x2e, 0xe0, 0x92, 0xc7, 0x08, 0xd3, 0xd4, 0xa8,
- 0x59, 0xc9, 0xce, 0x67, 0xcf, 0x3e, 0x4f, 0x6a, 0xca, 0x4d, 0xc8, 0x3b,
- 0x48, 0x31, 0x8c, 0x15, 0xb0, 0x3a, 0x47, 0x54, 0xe4, 0x66, 0x35, 0xf6,
- 0x28, 0x2a, 0x5e, 0x4d, 0xc9, 0x87, 0xb8, 0xb9, 0x24, 0x7a, 0x3f, 0x4c,
- 0x19, 0x34, 0x8b, 0xa8, 0x32, 0x23, 0x56, 0x0c, 0xf0, 0x0e, 0xb4, 0x5a,
- 0x6c, 0x85, 0x19, 0xb6, 0xab, 0xcc, 0x13, 0xca, 0x6b, 0x3f, 0x39, 0x3f,
- 0xba, 0x38, 0xef, 0x27, 0xa3, 0x8b, 0xd3, 0xf3, 0x15, 0x89, 0xbd, 0xcd,
- 0x04, 0x4c, 0x8f, 0xd6, 0x8c, 0xc8, 0x86, 0xf0, 0x33, 0xd5, 0x90, 0xef,
- 0x71, 0x0c, 0xda, 0x85, 0x94, 0x99, 0x08, 0xd4, 0xf0, 0xf9, 0x60, 0x55,
- 0x3a, 0x77, 0x6b, 0xb5, 0x40, 0x36, 0x86, 0x97, 0x3f, 0x3a, 0x31, 0xde,
- 0xf6, 0x4f, 0xa0, 0x10, 0xa2, 0x45, 0x9a, 0xae, 0x65, 0xd9, 0x18, 0xad,
- 0x94, 0x8c, 0x72, 0x06, 0x49, 0x31, 0x65, 0xac, 0xa0, 0x10, 0xa6, 0x2c,
- 0xb4, 0xe6, 0x40, 0xb5, 0x7b, 0x9a, 0x71, 0xd2, 0x4b, 0xc8, 0xf0, 0x7d,
- 0x93, 0x79, 0x78, 0x5d, 0x4f, 0xd0, 0x6f, 0x5a, 0x93, 0x01, 0xc7, 0xab,
- 0x5a, 0x43, 0x25, 0xa2, 0x58, 0xa4, 0x87, 0x81, 0x51, 0x19, 0x4f, 0x9d,
- 0x58, 0x5c, 0x83, 0x58, 0xca, 0x93, 0xc5, 0x33, 0xa2, 0x5d, 0x5e, 0xb7,
- 0x89, 0x2b, 0xa5, 0x50, 0x07, 0xef, 0x8b, 0x11, 0x70, 0x66, 0x0d, 0x90,
- 0xa2, 0xd6, 0x75, 0x54, 0xeb, 0x96, 0xd4, 0x3a, 0x5c, 0x79, 0xa7, 0xcb,
- 0x95, 0x29, 0xef, 0x27, 0xca, 0x59, 0xc8, 0x09, 0xdf, 0xca, 0x36, 0xd2,
- 0x7a, 0xaf, 0x10, 0x04, 0x7c, 0x78, 0xda, 0x33, 0x79, 0x6a, 0x45, 0xdc,
- 0xb2, 0x16, 0x07, 0x75, 0x51, 0x4c, 0xba, 0xe7, 0x9c, 0x89, 0xb3, 0xec,
- 0xb2, 0xd3, 0x4e, 0x26, 0x4d, 0x57, 0x40, 0x55, 0x8c, 0x7d, 0x57, 0xa6,
- 0x25, 0x19, 0x9c, 0x6d, 0xb9, 0x7c, 0x27, 0x05, 0xe9, 0x6a, 0xcd, 0x7c,
- 0xe7, 0x57, 0x0b, 0x1e, 0x52, 0xcf, 0x42, 0xec, 0x17, 0x15, 0x02, 0x0f,
- 0x8a, 0x6c, 0x45, 0xfd, 0x4c, 0x42, 0xf4, 0x2e, 0x38, 0xa1, 0x89, 0x53,
- 0xa6, 0xb5, 0xc0, 0x82, 0xae, 0x24, 0xa5, 0xc2, 0x52, 0x5e, 0x2e, 0x2e,
- 0xa8, 0x69, 0x09, 0x03, 0x27, 0x2d, 0x42, 0x18, 0x57, 0x02, 0x81, 0x15,
- 0x21, 0x34, 0x7a, 0xa5, 0x48, 0x63, 0x62, 0x0c, 0xa9, 0x50, 0xa7, 0xbd,
- 0x9d, 0x88, 0xc3, 0x46, 0xfa, 0xe0, 0x28, 0x9d, 0xf9, 0xdb, 0xc8, 0x1c,
- 0x0e, 0x52, 0xb8, 0x63, 0x0c, 0x4d, 0xf5, 0x10, 0xe6, 0x6a, 0xf1, 0x6c,
- 0xc3, 0x62, 0x47, 0x1c, 0x25, 0x86, 0x4c, 0x2a, 0xa9, 0x8a, 0xd0, 0x4e,
- 0x51, 0xd2, 0x95, 0xec, 0xde, 0x67, 0x84, 0x88, 0x0d, 0x7a, 0x1b, 0xe4,
- 0x8b, 0xa7, 0x93, 0x36, 0xc9, 0x10, 0xa9, 0x4e, 0x17, 0x17, 0xa4, 0xdd,
- 0x42, 0x71, 0x5d, 0x5e, 0x5d, 0x21, 0x45, 0x20, 0x0f, 0x93, 0xb1, 0x6b,
- 0x67, 0x7c, 0x14, 0x44, 0x0e, 0x23, 0x66, 0xd1, 0x98, 0x5b, 0x99, 0x68,
- 0xdc, 0x99, 0xd0, 0x72, 0xed, 0x60, 0xd1, 0x56, 0xc6, 0x0a, 0xc0, 0x98,
- 0x2c, 0x85, 0xa7, 0x26, 0x5e, 0x6a, 0x5a, 0x95, 0x0d, 0xa0, 0x97, 0x5b,
- 0x87, 0xa0, 0x37, 0xe2, 0x20, 0xc4, 0x47, 0x72, 0xd5, 0x59, 0x8c, 0xd1,
- 0x53, 0xa5, 0x25, 0x2b, 0xfd, 0xbe, 0x5a, 0x14, 0xfc, 0x7c, 0xb8, 0xbb,
- 0xf9, 0x98, 0x6a, 0x41, 0x72, 0xbb, 0xe1, 0xfc, 0x19, 0x67, 0x2e, 0x19,
- 0xfd, 0x8a, 0xd3, 0x47, 0x39, 0xfd, 0xb0, 0xe2, 0x9d, 0x55, 0x12, 0x57,
- 0x92, 0x0a, 0x01, 0xa5, 0x69, 0x89, 0xba, 0xfb, 0x66, 0x8e, 0x59, 0xf3,
- 0x64, 0x0a, 0xa0, 0x9a, 0x90, 0xd2, 0xe4, 0xcc, 0x5c, 0x2e, 0x76, 0x95,
- 0xbd, 0xbc, 0xbb, 0x64, 0x03, 0xb1, 0x0b, 0x66, 0x1c, 0x9b, 0xdd, 0x8b,
- 0x90, 0x50, 0x27, 0xd3, 0xdc, 0xd7, 0x64, 0xcc, 0xc1, 0x9b, 0x9b, 0x4f,
- 0xc8, 0x29, 0x50, 0x99, 0x31, 0x10, 0x8c, 0xba, 0xd6, 0xb7, 0x12, 0x09,
- 0x9b, 0x6c, 0xcf, 0xca, 0x45, 0xd7, 0xa2, 0xf7, 0xb3, 0x78, 0x21, 0x3d,
- 0x9f, 0x14, 0xc5, 0x0d, 0x99, 0xb3, 0x59, 0xfb, 0xb5, 0x21, 0x96, 0x0b,
- 0xd6, 0xe5, 0xca, 0xbb, 0x02, 0x68, 0xe9, 0x21, 0x35, 0x61, 0xf0, 0x74,
- 0x76, 0x3a, 0x51, 0xf6, 0xbb, 0xdb, 0xc3, 0xfb, 0x2e, 0x3b, 0xad, 0xeb,
- 0xd9, 0x60, 0x32, 0x99, 0xac, 0xe4, 0xa8, 0x07, 0x07, 0x07, 0xc9, 0xc6,
- 0x01, 0x72, 0xbe, 0x0f, 0x64, 0x94, 0x07, 0xd7, 0x64, 0xa6, 0x99, 0x51,
- 0x8d, 0x8d, 0xeb, 0x25, 0x59, 0xf5, 0x68, 0x28, 0xc2, 0x70, 0x46, 0xa3,
- 0x93, 0xad, 0x8b, 0x93, 0x51, 0x37, 0xe4, 0x3c, 0x7d, 0x20, 0x5d, 0x8f,
- 0x4b, 0x69, 0xb4, 0xf4, 0x16, 0x96, 0xdb, 0x00, 0xb7, 0xa4, 0x41, 0xab,
- 0x4a, 0x57, 0xdc, 0x4b, 0x34, 0xb9, 0x62, 0x59, 0xa8, 0x7d, 0xdd, 0x2a,
- 0x56, 0x45, 0x56, 0x20, 0x7e, 0x8b, 0x58, 0x1a, 0xa8, 0x4c, 0x2a, 0x75,
- 0xbf, 0xdf, 0xbf, 0xa0, 0x22, 0x6d, 0x8d, 0xa4, 0x84, 0xac, 0x08, 0x88,
- 0xb7, 0x60, 0x5d, 0xc8, 0xe4, 0x4c, 0x3d, 0x18, 0x73, 0xbd, 0x02, 0xc0,
- 0x8a, 0xf2, 0x5a, 0xf9, 0xe2, 0x50, 0x22, 0x82, 0x23, 0x30, 0xaa, 0xb2,
- 0xa2, 0x03, 0x7b, 0x07, 0x71, 0x58, 0x35, 0xfd, 0x59, 0x77, 0x36, 0x64,
- 0xe7, 0x65, 0x78, 0xbf, 0xb5, 0x5e, 0xff, 0x91, 0x73, 0x1a, 0xb7, 0xa4,
- 0xd7, 0x9f, 0x7f, 0xd5, 0x36, 0x21, 0x6a, 0x4b, 0x6c, 0xf1, 0xe6, 0x31,
- 0xa5, 0x8c, 0x8b, 0x48, 0xa0, 0xa1, 0xdc, 0x8b, 0xe8, 0xdb, 0x26, 0xb1,
- 0x36, 0x12, 0xca, 0x2f, 0x18, 0x74, 0xb5, 0xd9, 0xf4, 0x29, 0x4a, 0x8a,
- 0x8c, 0x81, 0x5a, 0xcc, 0xdc, 0xe5, 0x2e, 0x0d, 0xd8, 0x86, 0x72, 0x0a,
- 0x0f, 0x0f, 0xa1, 0x34, 0xcc, 0x85, 0x3d, 0xb6, 0x16, 0xb7, 0xbf, 0xca,
- 0x16, 0xb3, 0x07, 0x2b, 0xa6, 0x49, 0xdb, 0xab, 0xf4, 0x37, 0x5f, 0xd8,
- 0xf7, 0xd3, 0x3d, 0x75, 0x80, 0x75, 0xbb, 0x15, 0x74, 0x94, 0xe6, 0x5c,
- 0x05, 0xbd, 0xcb, 0xd4, 0xa4, 0xe7, 0x4e, 0x99, 0xb4, 0x70, 0x87, 0x76,
- 0xa3, 0x3b, 0xc4, 0x54, 0x1a, 0xdd, 0x8f, 0x73, 0x39, 0xf7, 0x72, 0x16,
- 0xec, 0x3a, 0x10, 0x7d, 0x19, 0x62, 0xbb, 0x42, 0xa8, 0x27, 0xc3, 0x28,
- 0x48, 0xd8, 0x81, 0x16, 0x10, 0xe8, 0xda, 0x25, 0xa4, 0xd8, 0xbc, 0x94,
- 0x49, 0xec, 0xf8, 0x96, 0x78, 0xfd, 0x89, 0xab, 0x58, 0xd2, 0x17, 0xc4,
- 0x53, 0xcd, 0x46, 0x8e, 0xec, 0x87, 0xfa, 0x89, 0x27, 0x54, 0xcb, 0xe3,
- 0x2d, 0x7b, 0x10, 0xbd, 0x12, 0x06, 0xea, 0x19, 0x56, 0xf5, 0x5d, 0x35,
- 0xd3, 0x95, 0xf5, 0xb2, 0x65, 0x8e, 0xe1, 0xaa, 0x6d, 0x6f, 0xca, 0x95,
- 0x6d, 0xa4, 0x0a, 0xc3, 0xc3, 0x9c, 0xf9, 0x43, 0x64, 0xc2, 0x20, 0x6f,
- 0x79, 0xcc, 0x20, 0xc6, 0xb7, 0x0a, 0xa2, 0x76, 0xb9, 0x6c, 0x68, 0xd2,
- 0x5a, 0x8a, 0xdd, 0xdf, 0x03, 0x32, 0xcf, 0x4b, 0x50, 0x2e, 0xbb, 0xc8,
- 0x1e, 0x2f, 0x44, 0xea, 0x70, 0xc1, 0xc4, 0xaf, 0x26, 0x40, 0x6b, 0x36,
- 0x7d, 0x8f, 0x3d, 0xd4, 0x1a, 0xe7, 0xab, 0xa1, 0x20, 0x31, 0xb7, 0x0c,
- 0x10, 0x29, 0x2a, 0xf3, 0x0b, 0xe0, 0x43, 0xf4, 0x76, 0x9a, 0x51, 0xdc,
- 0x34, 0x89, 0x49, 0xc3, 0xe4, 0x24, 0x63, 0x8f, 0xd4, 0xfa, 0x97, 0xeb,
- 0xa0, 0xbe, 0xf5, 0xd7, 0xeb, 0x12, 0xc6, 0x1c, 0xd6, 0xda, 0xa9, 0x04,
- 0x3a, 0x9e, 0x86, 0xb0, 0xce, 0x26, 0xe7, 0x75, 0x1d, 0x84, 0x58, 0xe8,
- 0x78, 0x64, 0x88, 0x49, 0x28, 0x24, 0xd9, 0xc0, 0x08, 0x7a, 0x24, 0x11,
- 0x45, 0xf4, 0xd7, 0x36, 0x1e, 0xc7, 0x82, 0xb3, 0x6e, 0xc8, 0x53, 0xe4,
- 0x66, 0xce, 0xdb, 0x5b, 0x65, 0xeb, 0x35, 0x32, 0x3e, 0xb8, 0x9a, 0x4a,
- 0x2c, 0x90, 0xc1, 0xae, 0x8d, 0x8c, 0x87, 0x07, 0x82, 0x1c, 0xb6, 0xc9,
- 0x24, 0xa7, 0x0c, 0x07, 0x88, 0x85, 0xe6, 0x4b, 0x23, 0xd2, 0x30, 0x79,
- 0x63, 0xce, 0x08, 0x61, 0x36, 0x93, 0xee, 0x92, 0x5e, 0x96, 0xd2, 0x6e,
- 0x02, 0x8e, 0xbd, 0x0b, 0x95, 0x3b, 0xb8, 0x22, 0x89, 0xf0, 0x6a, 0x56,
- 0x8e, 0xcb, 0xcb, 0xcb, 0x47, 0xe4, 0x05, 0x4e, 0xf4, 0x46, 0x1b, 0x4c,
- 0xa4, 0x3d, 0x4a, 0x74, 0xa2, 0xf7, 0xc6, 0x9c, 0x8f, 0x8f, 0x82, 0x7a,
- 0x82, 0xea, 0x29, 0xf5, 0x86, 0x62, 0xf8, 0xee, 0x6a, 0x02, 0xd1, 0x64,
- 0x2c, 0x4d, 0xe1, 0x30, 0xad, 0xa9, 0x98, 0x29, 0x91, 0x77, 0x0e, 0x17,
- 0xd0, 0x1c, 0xc2, 0xff, 0xf8, 0xaf, 0x1f, 0x7f, 0x8e, 0x84, 0x3e, 0x93,
- 0x66, 0xa3, 0x21, 0xa7, 0x08, 0x75, 0x61, 0x30, 0x15, 0xe8, 0x10, 0x24,
- 0x87, 0xb8, 0x8a, 0x24, 0x52, 0x14, 0xd5, 0x4b, 0x73, 0x09, 0x19, 0x5c,
- 0xed, 0x3a, 0x04, 0x6a, 0x5f, 0xd9, 0x68, 0x1c, 0x00, 0x01, 0xc9, 0x00,
- 0x49, 0xcb, 0x79, 0xd3, 0x2c, 0x48, 0x85, 0xe8, 0xed, 0xe1, 0x81, 0xb2,
- 0x60, 0x43, 0xd6, 0xbf, 0x2a, 0x7c, 0xf6, 0xc3, 0xf9, 0xb1, 0xd5, 0xe8,
- 0xbc, 0x9d, 0xf8, 0x1a, 0x3b, 0x11, 0x2c, 0x9b, 0x43, 0xb7, 0xec, 0x77,
- 0x41, 0x52, 0x1c, 0xd2, 0x17, 0xa9, 0xd5, 0x5c, 0x48, 0xad, 0x53, 0x6d,
- 0x6f, 0xda, 0x8f, 0xc2, 0xb0, 0xf6, 0xbb, 0x50, 0xc5, 0x55, 0x88, 0xff,
- 0xd7, 0xca, 0xe1, 0x94, 0xc0, 0x85, 0x00, 0x9a, 0xfa, 0x6b, 0x23, 0xbd,
- 0x59, 0x10, 0xeb, 0x4e, 0xaa, 0x67, 0x0b, 0xe0, 0x9a, 0x2b, 0xab, 0x10,
- 0xfd, 0xdf, 0xa1, 0x18, 0xa8, 0xd8, 0x86, 0xa2, 0x5a, 0xd1, 0x85, 0x03,
- 0x88, 0x64, 0xd6, 0xa5, 0x50, 0x51, 0x6e, 0x05, 0x4f, 0x34, 0x98, 0x7d,
- 0xfd, 0xdf, 0xd6, 0x1d, 0x30, 0x5f, 0x24, 0x99, 0x43, 0xc7, 0x1f, 0x20,
- 0xe4, 0x0c, 0x8e, 0xfb, 0x6e, 0x94, 0xec, 0x09, 0xe7, 0x3b, 0xd7, 0xd6,
- 0x8a, 0x1d, 0x47, 0xa0, 0xa9, 0x57, 0x0d, 0xe3, 0x9b, 0xa3, 0xfd, 0x43,
- 0x9d, 0xeb, 0x3f, 0x05, 0xde, 0xc6, 0x9a, 0x47, 0xc6, 0x19, 0x03, 0x70,
- 0x2f, 0x0b, 0x2d, 0xbe, 0x4b, 0x7b, 0xa2, 0x77, 0x07, 0xa8, 0xc3, 0x88,
- 0xda, 0x54, 0xc2, 0x81, 0x48, 0x36, 0xa2, 0x3a, 0x8a, 0xdd, 0x69, 0xa5,
- 0xf2, 0xe8, 0x19, 0xe6, 0xd4, 0xc6, 0x47, 0xa7, 0x97, 0x59, 0x9c, 0x47,
- 0xbf, 0x7e, 0xa2, 0xe6, 0x6b, 0xfe, 0x77, 0x55, 0x79, 0xb8, 0x23, 0xc0,
- 0x89, 0xca, 0xb3, 0x66, 0x31, 0x05, 0xfe, 0x4e, 0x19, 0xaf, 0xd2, 0x0c,
- 0x94, 0x2e, 0xd2, 0x13, 0x68, 0x5e, 0x11, 0xe2, 0x43, 0x9c, 0xa8, 0x4a,
- 0x0e, 0x7f, 0x15, 0xb8, 0x6c, 0xe5, 0x28, 0xc4, 0x62, 0xa5, 0x0a, 0x13,
- 0x05, 0xcb, 0x33, 0x80, 0xa9, 0x80, 0xba, 0x4a, 0x70, 0x7f, 0x34, 0x57,
- 0xe7, 0xd2, 0x07, 0xf8, 0x36, 0x5a, 0x19, 0xd9, 0xcc, 0x8d, 0x72, 0x6d,
- 0xe4, 0x14, 0x1d, 0x2f, 0x3d, 0x76, 0x9d, 0x7a, 0x88, 0xe2, 0x05, 0xc3,
- 0x8a, 0x07, 0x29, 0xb7, 0xd6, 0xea, 0x69, 0x8d, 0x1a, 0x80, 0xf0, 0x64,
- 0x45, 0x9a, 0x8d, 0x7d, 0x4b, 0xda, 0x18, 0xf6, 0xa4, 0x03, 0x64, 0xa7,
- 0xe2, 0xdc, 0xe4, 0x08, 0xfb, 0x94, 0xde, 0x7d, 0x67, 0x46, 0xf7, 0xc0,
- 0xf9, 0xdd, 0xb4, 0x05, 0xf1, 0x70, 0xd7, 0x35, 0xa7, 0x15, 0x19, 0xa4,
- 0xe6, 0x26, 0x99, 0xdc, 0x50, 0xd4, 0x7f, 0xdd, 0x2c, 0xc1, 0xdf, 0xd3,
- 0x42, 0x15, 0x56, 0x1e, 0xa6, 0x03, 0x53, 0x99, 0x96, 0x43, 0xf8, 0x5e,
- 0x57, 0xd4, 0x6e, 0x45, 0x9e, 0x04, 0xc9, 0x76, 0x84, 0x70, 0xa1, 0xe3,
- 0x91, 0x3c, 0x59, 0xc5, 0x21, 0x56, 0xce, 0x4d, 0xb5, 0xf1, 0x70, 0x79,
- 0x84, 0xa5, 0xeb, 0x49, 0x2b, 0xa5, 0x10, 0x1f, 0xd2, 0xba, 0xee, 0xa4,
- 0xd8, 0xc9, 0x3a, 0x2a, 0xfb, 0xe0, 0xaa, 0x3d, 0x87, 0xac, 0x62, 0xe1,
- 0x34, 0x68, 0xca, 0xb2, 0x3c, 0x86, 0xdd, 0x5f, 0xe5, 0xb7, 0x51, 0x28,
- 0xeb, 0xd4, 0x0e, 0x8c, 0xc3, 0xae, 0xec, 0x05, 0xa2, 0x8e, 0xfd, 0xa4,
- 0x14, 0x45, 0x8a, 0xb1, 0x90, 0x08, 0x1d, 0x58, 0x56, 0x36, 0xcc, 0x10,
- 0xa5, 0x3b, 0x2c, 0xa5, 0xab, 0x7e, 0xcf, 0x10, 0x7e, 0xd2, 0xfb, 0xa6,
- 0xac, 0x9b, 0xbd, 0x9e, 0x57, 0x6c, 0x4f, 0x24, 0x8b, 0x36, 0xe5, 0x08,
- 0x9c, 0x6e, 0x10, 0x96, 0xc5, 0x12, 0x10, 0x1f, 0x40, 0x73, 0xb5, 0xc8,
- 0xd3, 0xea, 0x83, 0x94, 0x14, 0x4d, 0x9b, 0xf0, 0x4e, 0x24, 0x3f, 0xcf,
- 0x65, 0x0c, 0x94, 0xd2, 0xdd, 0xe5, 0x52, 0x35, 0x86, 0xf4, 0xc3, 0xe0,
- 0x00, 0x9d, 0x0f, 0xbe, 0x41, 0x73, 0x7f, 0xe9, 0x59, 0xa5, 0xbb, 0xfb,
- 0xd5, 0x5e, 0x2f, 0x1e, 0x04, 0xee, 0xae, 0x97, 0xda, 0xd6, 0xc6, 0x82,
- 0x15, 0x5d, 0x06, 0xc8, 0xa0, 0xbe, 0xe6, 0x88, 0x6c, 0xe9, 0x86, 0x4b,
- 0x94, 0x77, 0x11, 0x4d, 0x53, 0x92, 0x1c, 0x86, 0x05, 0x62, 0xf5, 0xa6,
- 0x83, 0xf2, 0x72, 0x80, 0x92, 0x80, 0x54, 0xab, 0x9d, 0x1c, 0x2c, 0xde,
- 0xa9, 0x03, 0xda, 0x32, 0x51, 0x12, 0x1d, 0xbf, 0xc8, 0x5d, 0x2d, 0x91,
- 0xe2, 0x95, 0x55, 0x5b, 0x65, 0x40, 0xb2, 0x91, 0x7b, 0xa4, 0xea, 0xe8,
- 0xeb, 0x16, 0xc9, 0x97, 0x52, 0x89, 0x04, 0xc8, 0x37, 0xa8, 0x26, 0x86,
- 0xe0, 0xbc, 0x3e, 0xdf, 0xe7, 0x98, 0x35, 0xd8, 0xf0, 0x9c, 0x2d, 0x48,
- 0x30, 0x01, 0x18, 0xbd, 0xff, 0x92, 0xcb, 0xc3, 0x46, 0x1d, 0xbe, 0x2e,
- 0x1d, 0x64, 0x5f, 0xe1, 0xd5, 0x06, 0xa6, 0x23, 0x81, 0x07, 0x6d, 0xa7,
- 0xd4, 0xaf, 0x02, 0x41, 0x1b, 0x11, 0x3a, 0xb2, 0x88, 0x9f, 0x9f, 0x0d,
- 0x9f, 0x7d, 0x36, 0xdc, 0xee, 0x3b, 0x24, 0x9d, 0xc1, 0xc0, 0x2c, 0xdd,
- 0xfd, 0xc3, 0xc0, 0xf1, 0x4c, 0x6c, 0xa5, 0x47, 0x5f, 0x41, 0x7d, 0x01,
- 0x2a, 0x7a, 0x42, 0xeb, 0x31, 0x95, 0xfc, 0x5f, 0xb2, 0x80, 0x9a, 0x26,
- 0x56, 0x05, 0xf6, 0x04, 0x3e, 0x97, 0x3f, 0x8a, 0x2f, 0x1f, 0xb4, 0xf4,
- 0x96, 0xae, 0xa3, 0xc1, 0x7b, 0xc3, 0xe8, 0xf6, 0x92, 0x7f, 0x2f, 0xb3,
- 0x9e, 0xd6, 0xa9, 0xda, 0x79, 0xb5, 0x6b, 0x14, 0x8e, 0xcf, 0x87, 0xdb,
- 0xc3, 0x9d, 0xad, 0x4f, 0x75, 0x65, 0x3b, 0x5f, 0x36, 0xdf, 0x7a, 0x92,
- 0x5e, 0xe7, 0xe8, 0x68, 0x8b, 0x75, 0x91, 0x98, 0x0f, 0x88, 0xde, 0x52,
- 0x26, 0xee, 0x69, 0x25, 0x54, 0x14, 0x6b, 0xb1, 0x1c, 0xcf, 0xa7, 0x2f,
- 0x92, 0xd7, 0xe6, 0x47, 0x18, 0xa4, 0x7d, 0x60, 0x5d, 0x86, 0xa8, 0x03,
- 0x4e, 0x87, 0x48, 0x12, 0x0b, 0x59, 0xdc, 0xa4, 0x5f, 0x9f, 0xed, 0x9a,
- 0xa6, 0xef, 0x53, 0x2d, 0x39, 0x34, 0xcd, 0xaf, 0xf2, 0x26, 0x9a, 0xe8,
- 0x21, 0xaf, 0x3a, 0x07, 0x17, 0xed, 0xfc, 0xce, 0xee, 0xe7, 0xc9, 0x38,
- 0x6f, 0x92, 0x77, 0x87, 0x2f, 0xb8, 0xe4, 0x7d, 0xbd, 0x9c, 0x2b, 0x7d,
- 0x6a, 0x85, 0x18, 0x14, 0xef, 0x5a, 0xef, 0x5e, 0x14, 0x66, 0xe0, 0xb3,
- 0x7c, 0x42, 0x49, 0x83, 0xfd, 0x56, 0xf9, 0xa8, 0x4b, 0x35, 0x68, 0x7a,
- 0xd5, 0x98, 0xec, 0x49, 0xa2, 0x96, 0xc4, 0xa0, 0x1a, 0x51, 0xd5, 0xcd,
- 0x1a, 0x98, 0xee, 0x6b, 0x2d, 0x95, 0xdd, 0x52, 0x0f, 0x3f, 0x6b, 0x9b,
- 0x3d, 0x38, 0x26, 0x58, 0x11, 0x36, 0x07, 0x46, 0xfa, 0xbb, 0x0a, 0xa2,
- 0x64, 0xe5, 0xde, 0x3e, 0xc6, 0xa3, 0x9c, 0x91, 0x20, 0x8f, 0x9f, 0xe0,
- 0x71, 0x8b, 0x62, 0xe0, 0xb9, 0x30, 0xe8, 0x7c, 0xe6, 0x93, 0xe5, 0x8c,
- 0x4a, 0x57, 0x86, 0x02, 0x0c, 0x22, 0x3e, 0x89, 0x2a, 0x15, 0x31, 0xa4,
- 0x5a, 0x72, 0x85, 0xc3, 0xfd, 0x05, 0x45, 0xc5, 0x25, 0x3b, 0xc3, 0xfb,
- 0xbe, 0x5f, 0x9e, 0x5b, 0x8a, 0x69, 0x51, 0x11, 0xee, 0xe0, 0xb2, 0x80,
- 0x69, 0xbb, 0x33, 0x20, 0x6a, 0x9a, 0xc3, 0x11, 0x67, 0xe4, 0xda, 0xa9,
- 0xf8, 0x4e, 0xdb, 0x35, 0x97, 0xc3, 0x55, 0x8a, 0x7a, 0x8c, 0x1e, 0xf5,
- 0xe4, 0x7d, 0x60, 0x3d, 0x41, 0x04, 0x59, 0x31, 0x71, 0x91, 0x4f, 0x14,
- 0xc9, 0x42, 0x8f, 0xa1, 0xc8, 0x2b, 0x12, 0x49, 0xab, 0x59, 0x44, 0xde,
- 0x13, 0x61, 0x0d, 0x71, 0x6a, 0x07, 0x06, 0x21, 0xb0, 0x15, 0x8e, 0x2d,
- 0x92, 0x45, 0x18, 0x90, 0x1c, 0xd1, 0x27, 0x59, 0xd4, 0x0a, 0x0e, 0x2e,
- 0x8a, 0x18, 0x8d, 0x86, 0xc9, 0x02, 0x48, 0x62, 0xd1, 0x20, 0xe0, 0xe1,
- 0xd0, 0x9b, 0xd5, 0xb1, 0x8a, 0x63, 0xb1, 0x29, 0x51, 0x9d, 0x9f, 0xad,
- 0xb7, 0xc7, 0x27, 0x47, 0x9b, 0xc9, 0xdb, 0x0c, 0x08, 0x5e, 0x9d, 0x99,
- 0x11, 0x03, 0xfc, 0x03, 0x7f, 0xa2, 0x3b, 0x24, 0x6a, 0x64, 0x2c, 0x87,
- 0xca, 0x9a, 0x50, 0x21, 0x06, 0xf3, 0xb6, 0x41, 0xe0, 0xe5, 0x3c, 0x9f,
- 0x12, 0xe1, 0x88, 0x5a, 0xcc, 0x49, 0x9d, 0x95, 0xd1, 0x15, 0x42, 0x94,
- 0x96, 0xab, 0xda, 0xf6, 0xbd, 0x14, 0x74, 0x24, 0x80, 0x52, 0x0d, 0x5e,
- 0x31, 0x3b, 0x4b, 0x23, 0x97, 0x78, 0x3b, 0xf5, 0x65, 0x72, 0xb9, 0xd3,
- 0xd8, 0x59, 0xe0, 0x2a, 0xe4, 0xf9, 0x3f, 0x38, 0x3e, 0x19, 0x51, 0x21,
- 0xf3, 0x72, 0x6a, 0x01, 0xbb, 0xb9, 0xb8, 0x1a, 0xcd, 0xd7, 0x67, 0x28,
- 0x1e, 0x28, 0x59, 0x2c, 0x85, 0xf5, 0x8c, 0xf1, 0xc9, 0xe1, 0xb6, 0xf1,
- 0x23, 0x0d, 0x58, 0x00, 0x77, 0x4a, 0x98, 0x6d, 0x66, 0x68, 0x63, 0xf7,
- 0xb2, 0xa2, 0x89, 0xd0, 0x85, 0x0f, 0x0a, 0xd6, 0xf7, 0xfd, 0x01, 0x66,
- 0xb6, 0x38, 0xea, 0x1c, 0x36, 0xb8, 0x5f, 0x68, 0x4c, 0x91, 0x54, 0x73,
- 0xe0, 0x2c, 0xa5, 0xa0, 0x36, 0x63, 0x24, 0xee, 0x4b, 0xb8, 0xb9, 0x37,
- 0x33, 0x23, 0xcb, 0x6f, 0xef, 0xed, 0xf8, 0xa5, 0x17, 0x0b, 0x29, 0x2b,
- 0x4c, 0xf1, 0x58, 0x5b, 0xbf, 0x5f, 0xe4, 0xcd, 0xdf, 0x88, 0x34, 0xff,
- 0xb6, 0x2c, 0x6e, 0x0c, 0x6d, 0xd5, 0x44, 0xc1, 0x83, 0x78, 0xf9, 0x67,
- 0x39, 0x7d, 0xdf, 0x5b, 0xdf, 0x4b, 0xb7, 0x4e, 0x48, 0xab, 0xc2, 0x7d,
- 0x2a, 0x3e, 0x7b, 0xa6, 0x8b, 0xd5, 0xd9, 0x44, 0x4e, 0xac, 0xc9, 0xc9,
- 0xe3, 0x6b, 0x26, 0x4c, 0xb5, 0x84, 0x49, 0xf3, 0xeb, 0xc9, 0x70, 0x6c,
- 0xb5, 0x63, 0x57, 0xc1, 0x3c, 0x66, 0x33, 0xa3, 0x0a, 0xe2, 0x2c, 0x14,
- 0x5f, 0xdb, 0xfa, 0x83, 0xd0, 0x07, 0xc4, 0xab, 0x42, 0xf2, 0x21, 0x91,
- 0xb3, 0x11, 0x41, 0x12, 0x6d, 0x99, 0x42, 0xa2, 0xe8, 0x9e, 0xa7, 0xf5,
- 0xe8, 0xdc, 0x96, 0x9c, 0xbf, 0xa7, 0x85, 0x9c, 0x6a, 0x85, 0x2d, 0xd4,
- 0x11, 0x26, 0xdd, 0xc1, 0x09, 0xf0, 0x09, 0xa4, 0x96, 0xf5, 0xe0, 0x5c,
- 0x4e, 0x66, 0x25, 0xed, 0x0e, 0x59, 0x62, 0xbd, 0x95, 0xff, 0x77, 0x16,
- 0x44, 0xe8, 0x32, 0x92, 0x93, 0x3e, 0x88, 0x44, 0x78, 0xf9, 0xd1, 0xed,
- 0x9a, 0x82, 0x85, 0xfc, 0x26, 0x48, 0x38, 0xa7, 0x5e, 0x1b, 0x1c, 0xb8,
- 0x6b, 0xb3, 0xb4, 0xe4, 0xc2, 0x8a, 0x02, 0x7b, 0x0e, 0xbc, 0x12, 0xbf,
- 0x96, 0x5b, 0x1f, 0x9a, 0x63, 0x5b, 0xd6, 0x39, 0x2b, 0xc5, 0x2e, 0xfc,
- 0xce, 0x53, 0xc2, 0xc3, 0x08, 0x1b, 0xcd, 0x4c, 0xb6, 0x60, 0x2f, 0x1c,
- 0xe4, 0xa9, 0x96, 0x64, 0x0a, 0xd9, 0x88, 0x64, 0xfe, 0xc1, 0xec, 0x86,
- 0x60, 0x07, 0x0f, 0x54, 0xd5, 0x5c, 0xf5, 0x64, 0xe9, 0xf8, 0x93, 0xa1,
- 0x43, 0xa3, 0x71, 0x16, 0x54, 0xda, 0x68, 0xe3, 0x21, 0x6b, 0x36, 0x6d,
- 0x4c, 0xb6, 0x04, 0xb5, 0xc5, 0xea, 0xf6, 0xf0, 0x49, 0xed, 0xe4, 0x61,
- 0x92, 0x02, 0x2a, 0x2f, 0x31, 0x6a, 0x22, 0x5d, 0xd7, 0x15, 0x72, 0x95,
- 0xc9, 0x4b, 0x22, 0x88, 0xd4, 0xab, 0x9a, 0xf3, 0x2f, 0xa5, 0x1b, 0xbe,
- 0x94, 0xea, 0x58, 0xa8, 0x97, 0xe6, 0x9c, 0xf9, 0x26, 0x05, 0x2f, 0xfe,
- 0x55, 0x74, 0x3e, 0x5b, 0x91, 0x4b, 0x78, 0x55, 0x4f, 0x5b, 0xeb, 0x75,
- 0x05, 0xcf, 0xd1, 0x89, 0x9f, 0xe0, 0xcc, 0x66, 0x51, 0x07, 0xaa, 0xb9,
- 0x6f, 0x8e, 0x46, 0xf0, 0x08, 0xe5, 0x78, 0xf0, 0x3a, 0x06, 0xd3, 0xd1,
- 0xfc, 0xbe, 0xb9, 0x21, 0x2f, 0xb5, 0x9e, 0xb7, 0xaa, 0xc6, 0x74, 0x52,
- 0xeb, 0x38, 0x5b, 0x12, 0x3b, 0x9e, 0x52, 0xd6, 0x44, 0xf7, 0x98, 0x3d,
- 0x38, 0x78, 0x30, 0xce, 0x3e, 0x41, 0xdc, 0x3b, 0x9f, 0x58, 0x7f, 0x4c,
- 0x7e, 0x85, 0xb8, 0xd5, 0x93, 0x45, 0xa5, 0x6d, 0x75, 0x44, 0xb7, 0x16,
- 0x39, 0x74, 0x44, 0x7b, 0x02, 0xbe, 0x35, 0x60, 0x32, 0x96, 0x16, 0x6a,
- 0x99, 0x33, 0x76, 0x17, 0x2a, 0x31, 0x8b, 0x81, 0x1f, 0x69, 0xf1, 0x1c,
- 0xfa, 0x99, 0xd8, 0x9a, 0xb8, 0x2b, 0x4a, 0xdd, 0x22, 0xcf, 0xf3, 0x3a,
- 0xbd, 0xbf, 0x1f, 0xd6, 0x19, 0x97, 0x6c, 0xad, 0xeb, 0x19, 0x72, 0x4a,
- 0xdb, 0x35, 0x6e, 0x07, 0xdf, 0x4a, 0x81, 0xeb, 0xcb, 0xfc, 0x8a, 0x42,
- 0x13, 0xf1, 0x6f, 0x2c, 0x83, 0x5e, 0x73, 0xe7, 0xa5, 0x4e, 0xb0, 0x7b,
- 0xd0, 0xb1, 0x4b, 0xe0, 0x57, 0x49, 0x7c, 0x16, 0x73, 0x4d, 0x01, 0xc5,
- 0x9b, 0x84, 0xa9, 0x39, 0xf4, 0xb6, 0xa4, 0x60, 0xe4, 0x5e, 0x9a, 0x01,
- 0x76, 0xca, 0xf6, 0xc1, 0xd7, 0x3e, 0x96, 0xc3, 0xb5, 0xcb, 0xb2, 0x7e,
- 0x57, 0x05, 0x94, 0xd2, 0xe8, 0x2a, 0x1c, 0x64, 0x45, 0xdb, 0x94, 0xc1,
- 0xcc, 0x92, 0x35, 0x30, 0x4a, 0x1a, 0xd0, 0xe7, 0x55, 0x29, 0xef, 0xaa,
- 0x80, 0x5c, 0xff, 0xd3, 0x1f, 0x41, 0xb0, 0x6f, 0xa7, 0x0b, 0x2d, 0xf7,
- 0xc8, 0xda, 0x78, 0x5e, 0x39, 0xff, 0x41, 0x6d, 0xd5, 0x6b, 0xc7, 0x96,
- 0xfc, 0xa2, 0x68, 0x2b, 0x16, 0x04, 0xf3, 0xe7, 0xb2, 0x68, 0x0e, 0x86,
- 0x6e, 0x8c, 0x35, 0x37, 0x32, 0xa5, 0x11, 0x5d, 0x21, 0x91, 0xb0, 0x6a,
- 0xae, 0x80, 0x22, 0x02, 0x85, 0x5f, 0xc7, 0xf3, 0x56, 0x4e, 0x28, 0x3f,
- 0xd7, 0xda, 0x05, 0x19, 0xa3, 0x61, 0x02, 0xa9, 0x22, 0x04, 0xaa, 0x73,
- 0xc5, 0x9e, 0xcd, 0x58, 0x62, 0x4c, 0xc4, 0x8f, 0xf6, 0x51, 0x04, 0x30,
- 0x0e, 0x7c, 0x36, 0x52, 0x65, 0x7d, 0x2d, 0x81, 0xc8, 0x66, 0x9d, 0x6b,
- 0x29, 0x50, 0xcf, 0x63, 0x8d, 0x80, 0xfe, 0xf2, 0x90, 0x13, 0x87, 0x02,
- 0x53, 0x4b, 0xb0, 0xbd, 0xb7, 0x5f, 0xd6, 0xec, 0x5a, 0x0f, 0x59, 0x38,
- 0xc8, 0x9c, 0x6c, 0xd0, 0x9d, 0x6c, 0xdb, 0x2c, 0x0d, 0xd3, 0x98, 0x91,
- 0xc9, 0xef, 0x4a, 0x19, 0x17, 0xa7, 0x87, 0x92, 0x9b, 0x4d, 0x3b, 0x01,
- 0xab, 0x7e, 0x62, 0x74, 0x76, 0x70, 0x36, 0x1d, 0xc7, 0x1b, 0x03, 0x66,
- 0xda, 0xd4, 0x6e, 0xcb, 0xe3, 0x59, 0x94, 0x99, 0xe7, 0x53, 0xe2, 0xb0,
- 0x4d, 0x75, 0x40, 0xf8, 0x7b, 0xda, 0x7e, 0x4e, 0x48, 0x27, 0x2c, 0xe8,
- 0xc7, 0x77, 0xae, 0x04, 0x94, 0x73, 0x2c, 0x3a, 0x81, 0xd4, 0xf1, 0xdf,
- 0xba, 0x13, 0x89, 0x06, 0xa9, 0x4b, 0x94, 0x90, 0x56, 0x7a, 0xe9, 0x36,
- 0xc7, 0x30, 0x3c, 0x89, 0xbb, 0x9a, 0xc0, 0x75, 0x5d, 0xda, 0xf4, 0x5e,
- 0x92, 0xfc, 0xf4, 0x53, 0x3f, 0x21, 0x08, 0xa0, 0x9f, 0x8c, 0x82, 0xf0,
- 0x93, 0x21, 0xb9, 0x9f, 0xb8, 0x34, 0xcd, 0x4f, 0xb7, 0x86, 0x6b, 0xaf,
- 0x0a, 0x58, 0xf7, 0xaa, 0x90, 0xa0, 0x62, 0x20, 0xb8, 0x95, 0x14, 0x60,
- 0x22, 0x8b, 0x32, 0xa7, 0x88, 0xfa, 0x40, 0x44, 0x31, 0xdc, 0x64, 0xb3,
- 0x33, 0xcb, 0x79, 0xc1, 0xe2, 0xba, 0xb0, 0x1a, 0x70, 0x01, 0xb0, 0x8a,
- 0xf5, 0x3f, 0xae, 0xbb, 0xbd, 0xf1, 0x6a, 0x3a, 0x89, 0x52, 0x43, 0x0f,
- 0x06, 0x06, 0x22, 0x66, 0x05, 0x0d, 0x17, 0x5b, 0x65, 0x0b, 0x0f, 0x1d,
- 0x6e, 0x68, 0x01, 0xa7, 0x64, 0x8d, 0xb9, 0x43, 0x1d, 0x36, 0x50, 0x0e,
- 0x6f, 0x30, 0x19, 0x92, 0x16, 0xd7, 0x0f, 0x10, 0xc2, 0x02, 0x01, 0xb8,
- 0xc8, 0xda, 0xa7, 0x25, 0x9e, 0xd3, 0xa4, 0x2c, 0xd3, 0xe5, 0x9b, 0x59,
- 0xbc, 0x91, 0x16, 0xdb, 0x35, 0xc3, 0x59, 0x1f, 0xac, 0xb7, 0x71, 0x00,
- 0x57, 0x14, 0xe0, 0x73, 0x90, 0x3e, 0x5c, 0x80, 0x2f, 0x9a, 0xd6, 0xc0,
- 0x0e, 0x3e, 0x4e, 0x7c, 0x1b, 0x33, 0x83, 0xb6, 0x66, 0x6b, 0x78, 0x15,
- 0x54, 0xb1, 0x94, 0xfe, 0x55, 0xd7, 0x09, 0xcd, 0xb8, 0x30, 0x0e, 0x31,
- 0x84, 0xbf, 0xce, 0x25, 0x6f, 0xfc, 0x0c, 0xc0, 0x01, 0x79, 0x74, 0xac,
- 0xdb, 0x0d, 0xe5, 0xf1, 0x4a, 0x4e, 0x74, 0xc9, 0x8d, 0x1a, 0xf1, 0x10,
- 0xe1, 0xd2, 0xfa, 0x26, 0x8d, 0xa3, 0x64, 0x8b, 0x24, 0xb9, 0xf3, 0xc1,
- 0x62, 0x93, 0x51, 0xd9, 0xe7, 0xe2, 0x15, 0x56, 0xf7, 0x48, 0x5c, 0xc5,
- 0xad, 0xa6, 0x8c, 0xb8, 0xfc, 0x02, 0x45, 0x84, 0xc6, 0xf3, 0x26, 0xe9,
- 0xad, 0xbc, 0x06, 0x7b, 0xd1, 0xfa, 0x6e, 0x2a, 0xff, 0x53, 0x42, 0xe7,
- 0x8d, 0xa0, 0xdc, 0x89, 0x84, 0xbc, 0xa1, 0xd7, 0xf9, 0xdf, 0xf5, 0x0a,
- 0xdf, 0x14, 0x0b, 0x0c, 0xdb, 0xbd, 0x56, 0xa0, 0xa3, 0xf9, 0x37, 0xa4,
- 0xc5, 0xa4, 0xc8, 0xe1, 0x01, 0x30, 0xef, 0x2d, 0x8b, 0xa9, 0xea, 0xf3,
- 0x16, 0x4e, 0x6d, 0x35, 0xe3, 0xa5, 0xdc, 0x4c, 0xea, 0x51, 0x4c, 0x6d,
- 0x9a, 0x4e, 0x62, 0x8b, 0x38, 0xc1, 0xac, 0x25, 0xa9, 0x1f, 0x24, 0x2d,
- 0x12, 0x42, 0x53, 0xb0, 0x30, 0x3b, 0x9b, 0x36, 0xe9, 0x1c, 0x35, 0x84,
- 0x11, 0x43, 0x9e, 0x8b, 0x25, 0xb9, 0x77, 0x5d, 0x32, 0x72, 0x44, 0x6f,
- 0x2f, 0x39, 0x6e, 0xc4, 0x3d, 0xe4, 0xcd, 0x32, 0xbc, 0x22, 0x81, 0xcb,
- 0xf1, 0xcd, 0xe9, 0xbb, 0x23, 0x1b, 0xcc, 0xca, 0x5a, 0x3e, 0x7d, 0x12,
- 0xc5, 0x0e, 0x1a, 0x22, 0x26, 0x41, 0xd3, 0x81, 0xfb, 0x61, 0xc9, 0x12,
- 0x5e, 0x22, 0xa3, 0xcb, 0x2f, 0xee, 0x96, 0xf9, 0x74, 0x03, 0x19, 0xdb,
- 0x1f, 0xde, 0x1f, 0xff, 0x30, 0x80, 0x15, 0x83, 0x91, 0xb5, 0x6a, 0x4d,
- 0x5a, 0xd6, 0x94, 0x67, 0x36, 0x56, 0xcd, 0x23, 0xb9, 0xff, 0x72, 0xab,
- 0xf9, 0xd0, 0x57, 0xc8, 0xbf, 0xc8, 0x0b, 0x76, 0x88, 0x70, 0x83, 0x9b,
- 0x74, 0xfe, 0x0d, 0x0f, 0x05, 0x6e, 0x07, 0x67, 0x53, 0x47, 0x02, 0x73,
- 0xdb, 0x2b, 0x91, 0xec, 0x9f, 0x9d, 0x1d, 0xee, 0x5f, 0xec, 0xdb, 0xb9,
- 0x01, 0x27, 0x03, 0x4c, 0x05, 0xba, 0x29, 0xc9, 0x6d, 0x52, 0xc1, 0x73,
- 0xfd, 0x4f, 0x94, 0xb3, 0xd1, 0xbd, 0xeb, 0xcf, 0xce, 0x4f, 0xc9, 0xc6,
- 0xf0, 0xa7, 0x9f, 0xf6, 0x5d, 0x35, 0x5a, 0x54, 0x9b, 0x0b, 0x6b, 0x82,
- 0xee, 0x6e, 0xd2, 0xf8, 0xee, 0xec, 0xf8, 0xc4, 0xc9, 0xcf, 0xd9, 0xd1,
- 0xc9, 0x47, 0xda, 0xd0, 0x6a, 0x62, 0x05, 0x27, 0x5d, 0x0d, 0x2c, 0x00,
- 0x2a, 0x31, 0xac, 0x9e, 0x48, 0xe9, 0x98, 0x98, 0xc2, 0x86, 0xe8, 0x62,
- 0xcd, 0x8c, 0xbc, 0x6f, 0x84, 0xd6, 0x06, 0xdc, 0x83, 0x02, 0xa3, 0x88,
- 0xbe, 0xa6, 0xb4, 0x52, 0x5d, 0x70, 0xac, 0xee, 0xf6, 0x38, 0x78, 0x48,
- 0x66, 0x00, 0x1c, 0xcc, 0x59, 0x72, 0x8d, 0xa1, 0xa1, 0x8c, 0xd6, 0x55,
- 0x19, 0x0a, 0xce, 0x0e, 0x7b, 0x23, 0x0c, 0x9d, 0x2b, 0x3d, 0x0e, 0x43,
- 0xbb, 0xf1, 0x60, 0x30, 0x50, 0xab, 0x32, 0x4f, 0xdc, 0x7c, 0x10, 0x3c,
- 0xd4, 0x68, 0x25, 0x15, 0xe5, 0xf3, 0x71, 0x36, 0xe1, 0xf3, 0x87, 0xae,
- 0x2c, 0x2f, 0xf8, 0x01, 0xf2, 0x14, 0x6a, 0x32, 0x22, 0xff, 0x30, 0x34,
- 0x37, 0xaa, 0x35, 0xde, 0x3c, 0x5a, 0x2f, 0xc9, 0x5e, 0x43, 0x7f, 0x6d,
- 0xed, 0x0c, 0xb7, 0x7b, 0xe1, 0xe8, 0x11, 0xcc, 0x0a, 0xa3, 0x98, 0x02,
- 0x86, 0x32, 0x06, 0x6c, 0xf9, 0xf4, 0x00, 0x99, 0x81, 0x19, 0x89, 0x74,
- 0x61, 0x3a, 0x88, 0x8e, 0x65, 0x70, 0x1a, 0x18, 0x2f, 0xd9, 0x2b, 0xe0,
- 0x38, 0x62, 0x51, 0x22, 0x6d, 0x36, 0x25, 0x6d, 0x08, 0x86, 0x98, 0x5e,
- 0x7c, 0x81, 0x8b, 0x29, 0x3b, 0x36, 0x3b, 0xeb, 0xfc, 0x28, 0x4a, 0xf5,
- 0xea, 0x8c, 0x32, 0x4b, 0x03, 0xf6, 0xe3, 0x95, 0xdc, 0xae, 0x65, 0x79,
- 0xbf, 0xc9, 0x8c, 0x14, 0x38, 0x43, 0xfa, 0x14, 0xd9, 0xd1, 0x5e, 0x73,
- 0xe1, 0xd0, 0x10, 0xff, 0xdb, 0x8f, 0x25, 0xc9, 0x24, 0x7a, 0x16, 0x6f,
- 0xa4, 0xbe, 0x16, 0x97, 0x08, 0x46, 0x0c, 0x6e, 0xb4, 0x2a, 0xa3, 0xa0,
- 0x4e, 0x73, 0x46, 0xa6, 0x41, 0x96, 0xb6, 0x04, 0x8a, 0x5a, 0xe7, 0xb0,
- 0x1d, 0x05, 0x69, 0xdf, 0x63, 0x91, 0x73, 0x6d, 0x17, 0x2a, 0x1d, 0x9a,
- 0x33, 0x9a, 0x1b, 0xd5, 0x7c, 0x19, 0xc8, 0x0b, 0xdd, 0xd7, 0x87, 0xc4,
- 0x62, 0xf3, 0xda, 0xcf, 0x09, 0x82, 0x49, 0x87, 0x9e, 0x28, 0xad, 0xc5,
- 0x0f, 0xc5, 0xf9, 0x70, 0xa8, 0x02, 0x23, 0xe6, 0xa5, 0x60, 0x93, 0xe1,
- 0x12, 0xbf, 0x38, 0x38, 0xfb, 0xf8, 0xed, 0xd1, 0xd1, 0xd9, 0xf1, 0xe1,
- 0xc9, 0x91, 0x54, 0xd6, 0xb1, 0x1f, 0xbd, 0xbf, 0xf8, 0xee, 0xc4, 0xe1,
- 0x93, 0x89, 0x6b, 0xa8, 0xab, 0xee, 0x53, 0xc8, 0x11, 0x35, 0x77, 0x92,
- 0x17, 0xcb, 0x7b, 0x2a, 0x97, 0x35, 0x21, 0x5a, 0xde, 0x3f, 0xfe, 0xa1,
- 0x9f, 0x7c, 0x73, 0x36, 0xf8, 0xf0, 0x43, 0x80, 0x02, 0xe1, 0x05, 0xf9,
- 0x1a, 0x26, 0xd4, 0x15, 0x2c, 0x6d, 0xcc, 0x2f, 0x6a, 0x4a, 0xb8, 0xb9,
- 0xab, 0xfe, 0x1b, 0x29, 0xb3, 0xf8, 0x5b, 0x9b, 0x02, 0xc3, 0x30, 0x8d,
- 0xc2, 0x03, 0xb0, 0xf5, 0xa4, 0x78, 0xb9, 0x7b, 0x41, 0x9e, 0x2f, 0xb7,
- 0xa5, 0x2c, 0x6d, 0x87, 0x00, 0x1f, 0x92, 0xd7, 0xe6, 0x47, 0x0c, 0x98,
- 0x67, 0x6b, 0x34, 0xfa, 0x86, 0xaa, 0xd9, 0x3b, 0x14, 0x48, 0x6b, 0x6b,
- 0x19, 0x6a, 0x80, 0x1f, 0x99, 0x69, 0xc8, 0x4a, 0xe2, 0xac, 0x36, 0x15,
- 0x61, 0x07, 0x86, 0x4e, 0x5a, 0x1f, 0x47, 0x32, 0xb7, 0xda, 0x4f, 0x16,
- 0x97, 0x2c, 0x7f, 0xc3, 0x34, 0x45, 0xd3, 0xe9, 0x93, 0x00, 0x72, 0xe1,
- 0x1c, 0xe9, 0xd9, 0x61, 0xc7, 0x26, 0x80, 0x56, 0x30, 0x41, 0x5e, 0xb6,
- 0x48, 0x39, 0x57, 0x06, 0x15, 0x6a, 0xe1, 0x66, 0x9a, 0xd3, 0x70, 0x78,
- 0x74, 0xde, 0x67, 0x50, 0x39, 0x1f, 0x50, 0xce, 0x41, 0x28, 0x8a, 0xb6,
- 0x10, 0x96, 0xb2, 0xf0, 0x36, 0xf5, 0x9f, 0x87, 0x25, 0x77, 0x53, 0x8d,
- 0x93, 0xd7, 0x33, 0xf3, 0xe2, 0x6c, 0x45, 0x06, 0x27, 0x17, 0xfa, 0x72,
- 0x05, 0xcb, 0x3a, 0xb0, 0x21, 0x22, 0x0c, 0xb2, 0x69, 0x04, 0xed, 0xac,
- 0xd4, 0xf8, 0x1a, 0x58, 0x9b, 0xe8, 0x85, 0x20, 0xdb, 0x6d, 0x1d, 0x41,
- 0xa6, 0xeb, 0xfd, 0x64, 0x9d, 0xb0, 0x51, 0xe8, 0x5f, 0x30, 0x54, 0xa9,
- 0xf2, 0xb6, 0xde, 0x0f, 0xb5, 0xda, 0x75, 0x59, 0xf6, 0x75, 0xaa, 0xb7,
- 0x25, 0xf1, 0x14, 0x70, 0xb1, 0x23, 0x59, 0x80, 0x80, 0x2c, 0x31, 0x16,
- 0x0e, 0x53, 0x61, 0x07, 0xb9, 0x8b, 0x31, 0xa9, 0x03, 0x6c, 0x70, 0xdb,
- 0x5c, 0x3b, 0xd5, 0x30, 0x58, 0xb0, 0x08, 0x87, 0xb6, 0xf8, 0xf5, 0xa9,
- 0xc3, 0x44, 0x6e, 0xe1, 0xd6, 0x6b, 0x4d, 0xba, 0xe7, 0x96, 0x08, 0xe2,
- 0x25, 0x56, 0x38, 0xf4, 0xbe, 0xe1, 0x14, 0x39, 0xba, 0xe7, 0x29, 0xb2,
- 0x1b, 0x80, 0x9d, 0xdf, 0x91, 0x7a, 0xa5, 0x0e, 0x2c, 0x86, 0x63, 0x94,
- 0xd8, 0x9b, 0x0a, 0x02, 0x4e, 0x04, 0xdb, 0x09, 0x00, 0xf8, 0x79, 0xf3,
- 0x3b, 0x92, 0xce, 0x0c, 0x80, 0xf1, 0x79, 0xdd, 0x0c, 0xc8, 0x1f, 0xb4,
- 0x3a, 0x8d, 0x5a, 0x32, 0x03, 0xd4, 0x23, 0xe5, 0x01, 0xb6, 0x32, 0x6b,
- 0xe0, 0xaa, 0x38, 0x08, 0xa1, 0xaa, 0xb5, 0xb6, 0xec, 0x20, 0x86, 0xc8,
- 0x6f, 0xce, 0x5b, 0x76, 0xd7, 0x72, 0x9b, 0x7a, 0x00, 0x37, 0xd6, 0x4f,
- 0x9a, 0x5f, 0xda, 0x32, 0x49, 0x15, 0x10, 0x64, 0x23, 0xc8, 0x43, 0xf3,
- 0x74, 0x72, 0x6d, 0xe4, 0xb2, 0x01, 0x22, 0x31, 0x7d, 0x04, 0x14, 0x84,
- 0x7d, 0x76, 0x07, 0x4a, 0xf9, 0x72, 0x12, 0xde, 0x15, 0x2f, 0x13, 0xe7,
- 0xa5, 0x41, 0xd0, 0x10, 0x6d, 0x3c, 0x19, 0x83, 0x12, 0xda, 0x44, 0x58,
- 0x28, 0x80, 0x65, 0x65, 0xc1, 0x0d, 0xad, 0xbf, 0x2e, 0xe2, 0x91, 0x12,
- 0xe4, 0x42, 0x8f, 0xb9, 0x0b, 0x9c, 0x4d, 0x9a, 0xbc, 0x3f, 0x19, 0xb9,
- 0x24, 0x10, 0xd6, 0x8b, 0xa5, 0x20, 0x9e, 0x20, 0x7f, 0x46, 0x3d, 0x0a,
- 0x7e, 0xf8, 0xd3, 0xc9, 0x71, 0xa4, 0xe2, 0x26, 0xe9, 0xda, 0x7b, 0xe6,
- 0x2c, 0x41, 0xde, 0x46, 0x00, 0xb8, 0xfa, 0x32, 0x15, 0x13, 0x96, 0xf6,
- 0x80, 0xdd, 0xc4, 0x2c, 0x68, 0xe7, 0x95, 0x9f, 0x09, 0xd4, 0x6d, 0xce,
- 0x8c, 0xf2, 0x2f, 0x6c, 0xa2, 0x94, 0x00, 0x13, 0x8d, 0x5b, 0xab, 0x97,
- 0xe3, 0x81, 0x97, 0x9a, 0xcb, 0x0c, 0x01, 0xd0, 0x31, 0xf9, 0x84, 0x14,
- 0xe7, 0x9b, 0x30, 0xda, 0x63, 0xe3, 0xec, 0xf4, 0xec, 0x99, 0x90, 0x93,
- 0xe4, 0x51, 0xb7, 0x9c, 0x87, 0x93, 0x84, 0xa4, 0x1f, 0x41, 0x6a, 0xa2,
- 0x67, 0x6d, 0xf4, 0x27, 0x53, 0x57, 0xac, 0x48, 0x17, 0xa3, 0xb4, 0xd3,
- 0x52, 0x74, 0x16, 0x53, 0x5c, 0x00, 0xed, 0x88, 0x31, 0xca, 0xea, 0xb4,
- 0x61, 0x84, 0x11, 0x34, 0x0c, 0x75, 0xde, 0x2b, 0x19, 0x4a, 0x74, 0x7a,
- 0x8b, 0x08, 0xf5, 0xd8, 0x7a, 0xc3, 0xa6, 0xb0, 0x99, 0x20, 0x2b, 0x83,
- 0xaa, 0x67, 0xe7, 0x53, 0xce, 0xac, 0xae, 0xdb, 0xa9, 0xd5, 0x9c, 0x27,
- 0x80, 0x22, 0x17, 0xe4, 0xa3, 0x05, 0x08, 0xd9, 0xaa, 0x9d, 0xd4, 0xe4,
- 0x78, 0x0a, 0xe5, 0x24, 0xbb, 0x07, 0x07, 0x72, 0xfe, 0xc0, 0x0e, 0x29,
- 0x8e, 0x19, 0xb4, 0xc9, 0xfb, 0x7d, 0x9f, 0x29, 0x44, 0xe0, 0xdb, 0xbd,
- 0xe2, 0x5b, 0x9c, 0x8a, 0x64, 0x74, 0x59, 0x23, 0xa1, 0xd9, 0x95, 0x93,
- 0x95, 0x12, 0x17, 0x8f, 0xcc, 0x9b, 0xfc, 0x3b, 0xe6, 0x97, 0x98, 0x0f,
- 0x1c, 0xdb, 0x45, 0x3e, 0xa6, 0x65, 0x91, 0xff, 0x9d, 0xe2, 0xb9, 0x98,
- 0xd5, 0x5f, 0x52, 0x58, 0x9d, 0xba, 0x80, 0x10, 0x84, 0x90, 0x37, 0xeb,
- 0x35, 0x62, 0x8b, 0x64, 0x51, 0x22, 0x47, 0xf9, 0x26, 0xf3, 0xe3, 0x20,
- 0xdb, 0x02, 0xd9, 0xee, 0x4e, 0x2b, 0x59, 0xbe, 0x55, 0xe3, 0x22, 0xea,
- 0xea, 0x47, 0x15, 0x84, 0x4d, 0xb5, 0x76, 0xca, 0xa2, 0x73, 0x3c, 0x45,
- 0xed, 0x42, 0xcd, 0xa5, 0x2f, 0x0e, 0xb2, 0xbf, 0xca, 0x80, 0x49, 0xd5,
- 0x1d, 0x17, 0xf2, 0x03, 0x10, 0x74, 0xa9, 0x48, 0x48, 0x4d, 0x62, 0xcb,
- 0x6b, 0x6c, 0x90, 0x74, 0x3d, 0xf1, 0xc3, 0xd4, 0xba, 0x45, 0x2e, 0x22,
- 0x38, 0x12, 0x69, 0xf2, 0xec, 0x87, 0x1f, 0x92, 0x16, 0x34, 0xd7, 0x66,
- 0x6b, 0xe3, 0x3c, 0x6f, 0xad, 0xd8, 0x46, 0xcc, 0x85, 0x1b, 0xe5, 0x09,
- 0x4a, 0x00, 0x42, 0x5c, 0xe4, 0x74, 0x85, 0x56, 0x3c, 0xb4, 0x51, 0xc0,
- 0x4d, 0x79, 0x95, 0x61, 0x1b, 0x98, 0x6c, 0xfc, 0xb0, 0x8f, 0xf0, 0x32,
- 0x76, 0xf1, 0x13, 0x7d, 0x1b, 0xb8, 0xc8, 0x6e, 0x66, 0x44, 0xa3, 0xe8,
- 0x62, 0xd1, 0x5a, 0xd5, 0xf6, 0x3a, 0x31, 0x42, 0xc0, 0x5d, 0x31, 0x8c,
- 0x55, 0x25, 0xe9, 0x88, 0x18, 0x36, 0x00, 0x58, 0x22, 0x7e, 0xb8, 0x3c,
- 0x0b, 0x0a, 0xaa, 0x90, 0xbd, 0xcd, 0xab, 0x06, 0x2b, 0xb1, 0xc6, 0x41,
- 0xc0, 0x00, 0x1b, 0xf7, 0x29, 0x34, 0x00, 0x13, 0xa4, 0x84, 0x1a, 0xe6,
- 0x40, 0x49, 0x03, 0xff, 0x98, 0x7a, 0xff, 0xfc, 0xbd, 0xc2, 0xe3, 0x31,
- 0xa3, 0xc3, 0x1d, 0x4a, 0x87, 0x30, 0x2a, 0xa7, 0xd8, 0x23, 0x11, 0x26,
- 0x20, 0x99, 0x1a, 0x4c, 0xfc, 0x7f, 0x76, 0xe5, 0x40, 0x6d, 0xc8, 0x1b,
- 0x93, 0x5e, 0x90, 0x5d, 0x41, 0x2e, 0xfd, 0xa6, 0x5a, 0x62, 0x85, 0x48,
- 0x0f, 0xa1, 0x1c, 0xaf, 0xd2, 0xe1, 0xf2, 0x90, 0x48, 0xa9, 0xe1, 0x10,
- 0x00, 0xbe, 0xe7, 0x38, 0xe3, 0x39, 0x20, 0x48, 0x42, 0x87, 0xaf, 0xce,
- 0x8c, 0x41, 0x15, 0x60, 0x53, 0x6b, 0x3b, 0x14, 0x07, 0x83, 0x79, 0x7a,
- 0x3f, 0xc0, 0x63, 0x75, 0x00, 0xc1, 0xdc, 0x0a, 0xa3, 0x67, 0xf0, 0xbb,
- 0x72, 0x26, 0x65, 0x58, 0xec, 0x9a, 0xa9, 0xba, 0x68, 0x23, 0xd9, 0x25,
- 0xfe, 0x90, 0x48, 0xc8, 0x9c, 0xba, 0xaf, 0x8f, 0x2e, 0xba, 0x47, 0x0b,
- 0xf9, 0x3c, 0xa2, 0x7b, 0x23, 0x84, 0x9c, 0x8a, 0x7b, 0x7c, 0xb8, 0xd8,
- 0x74, 0xf6, 0x95, 0x69, 0xd9, 0x31, 0x02, 0xda, 0xb0, 0xe6, 0x10, 0x86,
- 0x90, 0x83, 0xb6, 0x85, 0xc3, 0x02, 0x67, 0xd0, 0x9e, 0x09, 0x2a, 0x1a,
- 0xf4, 0x6c, 0x7b, 0xa7, 0x6f, 0x7e, 0xec, 0xc2, 0x8c, 0xf5, 0x6c, 0xfb,
- 0x99, 0xf5, 0xb7, 0xe8, 0x53, 0x81, 0x75, 0x7e, 0xca, 0x2f, 0x3a, 0x0b,
- 0xff, 0xb3, 0xfb, 0x7b, 0x7c, 0xdc, 0xef, 0x66, 0xa2, 0xd6, 0x52, 0x65,
- 0xe8, 0x11, 0x57, 0x84, 0x0e, 0xdc, 0xad, 0x38, 0xec, 0x51, 0xcb, 0x82,
- 0xe3, 0x68, 0xc8, 0x96, 0x80, 0xb8, 0xf0, 0xe1, 0x6a, 0x8c, 0xa6, 0xa6,
- 0x95, 0xfb, 0x49, 0x6b, 0xeb, 0xa3, 0x34, 0x19, 0x72, 0xa1, 0xf9, 0x6b,
- 0x3f, 0x12, 0x65, 0x1e, 0x30, 0x46, 0x7a, 0x46, 0xf2, 0x18, 0xcd, 0x2a,
- 0xdc, 0xbb, 0x35, 0xb2, 0x00, 0x57, 0x32, 0x11, 0xc3, 0x2c, 0x85, 0x15,
- 0xa9, 0x4a, 0xbd, 0x0a, 0xfd, 0x6c, 0x8f, 0x22, 0x2b, 0xcd, 0xa9, 0xc0,
- 0x0a, 0xeb, 0xaf, 0xbb, 0x1c, 0xb5, 0xc9, 0x7f, 0x3c, 0xf3, 0x55, 0x0b,
- 0x2d, 0xe5, 0x14, 0x85, 0x30, 0xdf, 0xe7, 0xc2, 0x42, 0x9d, 0x50, 0x7f,
- 0x3a, 0x83, 0xb4, 0x0b, 0x94, 0x02, 0x42, 0x82, 0xb4, 0x24, 0x11, 0x3b,
- 0xbf, 0x25, 0x2b, 0x55, 0x91, 0x52, 0x01, 0xb4, 0x43, 0x40, 0x8a, 0xd3,
- 0x0a, 0x52, 0x03, 0x9e, 0xe3, 0x41, 0x22, 0x5e, 0x67, 0xde, 0x66, 0x71,
- 0x94, 0x4a, 0x4e, 0x02, 0x7b, 0x6c, 0x57, 0xe0, 0x9c, 0x30, 0x98, 0xb3,
- 0x91, 0xed, 0x6f, 0xd3, 0x19, 0x03, 0xf3, 0xd8, 0xe8, 0xea, 0x4a, 0xc7,
- 0xc4, 0x51, 0xb9, 0x2e, 0xa8, 0x89, 0xde, 0xfb, 0xc3, 0x93, 0x19, 0x0d,
- 0x4f, 0x09, 0xdd, 0x2e, 0x34, 0x27, 0x06, 0x29, 0xd4, 0x12, 0xc7, 0x1f,
- 0x4d, 0xd2, 0x04, 0xbb, 0x18, 0x40, 0xef, 0x7e, 0x6d, 0x44, 0x8e, 0x6c,
- 0xba, 0xca, 0x0b, 0x8e, 0x28, 0xc8, 0xf4, 0x3e, 0x9f, 0x2f, 0xe7, 0x2e,
- 0xc1, 0x0e, 0xef, 0xd9, 0x6a, 0x96, 0x0e, 0xe0, 0x95, 0x2b, 0xa1, 0xc6,
- 0x68, 0x04, 0xc8, 0x6c, 0x2e, 0xdb, 0x17, 0xaa, 0x21, 0xe0, 0xc3, 0x14,
- 0xa0, 0x42, 0xa2, 0xe2, 0x64, 0x01, 0x44, 0x4e, 0xa2, 0x2e, 0x10, 0x13,
- 0x94, 0x06, 0x72, 0x30, 0x95, 0xf9, 0x30, 0xd7, 0x46, 0xbe, 0xc8, 0x74,
- 0xdb, 0xd7, 0xa7, 0x2c, 0x1e, 0x63, 0x13, 0xec, 0x50, 0x51, 0x49, 0x94,
- 0x23, 0x6a, 0xf0, 0x05, 0x5d, 0x07, 0x41, 0x20, 0xc8, 0xd8, 0x34, 0x71,
- 0x97, 0x4f, 0x9b, 0x6b, 0x00, 0x2e, 0x6a, 0x4c, 0x13, 0x50, 0x40, 0xac,
- 0xb0, 0x11, 0x49, 0xba, 0x89, 0x22, 0x63, 0xcb, 0x16, 0x61, 0x51, 0x13,
- 0xc6, 0x36, 0xa1, 0xb0, 0x6f, 0xec, 0x03, 0x22, 0x26, 0xb7, 0xd8, 0xf8,
- 0x62, 0xd3, 0xf8, 0x8d, 0xcc, 0xb7, 0xbc, 0x24, 0x24, 0xc5, 0x40, 0x7a,
- 0xd4, 0x3c, 0x99, 0xa1, 0x9e, 0x09, 0x24, 0xe5, 0xdd, 0x30, 0x98, 0xd9,
- 0xb7, 0xa2, 0x8f, 0x32, 0xe0, 0x14, 0x8e, 0x3f, 0x67, 0x69, 0x90, 0x7d,
- 0x3e, 0xb9, 0xc9, 0x67, 0x81, 0x4d, 0x02, 0xbd, 0x9b, 0x6b, 0x6b, 0x7d,
- 0xce, 0x29, 0x6e, 0xef, 0xd6, 0x25, 0x06, 0x84, 0x30, 0xd1, 0x32, 0x89,
- 0xe7, 0xec, 0x0b, 0x36, 0xe2, 0xfa, 0x15, 0x77, 0xf3, 0xb5, 0x7b, 0xa8,
- 0xd3, 0x9c, 0x0b, 0x01, 0x55, 0x23, 0x75, 0xbd, 0x97, 0xec, 0x6e, 0x6f,
- 0x7f, 0x6b, 0x58, 0xec, 0x1c, 0x9b, 0xb2, 0xf3, 0x75, 0x74, 0x85, 0x78,
- 0x81, 0x40, 0x43, 0x02, 0x4b, 0x92, 0xde, 0xc2, 0x94, 0x2c, 0x8b, 0xc6,
- 0x05, 0x44, 0x0d, 0x03, 0x98, 0x2e, 0x3d, 0xeb, 0x5f, 0x74, 0xe3, 0x6c,
- 0xd2, 0x29, 0x19, 0x1a, 0xbb, 0x18, 0x0b, 0x73, 0xa4, 0x1f, 0xd0, 0xce,
- 0x5f, 0x9b, 0xdf, 0x32, 0x8f, 0x28, 0xd0, 0x4f, 0x24, 0xe7, 0xdc, 0xc8,
- 0x1d, 0x84, 0x5e, 0xb7, 0xac, 0xa8, 0x54, 0x22, 0x02, 0x2c, 0x01, 0xfd,
- 0x04, 0xe3, 0x67, 0xde, 0xb0, 0xdb, 0xa6, 0x28, 0x19, 0x4b, 0x04, 0x64,
- 0xd1, 0xb4, 0xa6, 0x13, 0xb1, 0xc7, 0x11, 0x05, 0xe3, 0x86, 0xd7, 0x18,
- 0xe4, 0xc1, 0x5f, 0x89, 0x3f, 0x62, 0x00, 0x7c, 0x08, 0xad, 0x4f, 0x91,
- 0x21, 0xda, 0xfc, 0x9c, 0xb4, 0xee, 0x64, 0x89, 0x2e, 0xa5, 0x84, 0x09,
- 0x69, 0x9d, 0xb0, 0x56, 0x62, 0x8e, 0x84, 0xd5, 0xbb, 0x10, 0x40, 0x4b,
- 0x1a, 0x08, 0xb7, 0x0c, 0xc3, 0xea, 0x8c, 0x1e, 0x98, 0x91, 0x46, 0x5d,
- 0x06, 0x89, 0x30, 0xb3, 0x05, 0x2c, 0xb6, 0xf6, 0x32, 0xf2, 0x06, 0x45,
- 0x19, 0xbe, 0x13, 0xa0, 0x85, 0x53, 0xa2, 0xc8, 0xef, 0x68, 0x64, 0x02,
- 0xae, 0x1d, 0xc3, 0x68, 0xbc, 0x36, 0x04, 0xfc, 0xc5, 0x8f, 0x54, 0x3c,
- 0xf0, 0xe7, 0x48, 0x99, 0xc4, 0x54, 0x32, 0xa5, 0xe8, 0x28, 0x69, 0x3e,
- 0x52, 0xe5, 0xaa, 0x78, 0xa0, 0x1d, 0x4e, 0xe7, 0xd5, 0x62, 0x85, 0xae,
- 0xf8, 0x49, 0x3c, 0xd6, 0x56, 0x8d, 0xe5, 0x1b, 0x35, 0x81, 0xc6, 0xb4,
- 0x80, 0xf2, 0x18, 0xff, 0x4b, 0x1b, 0xa2, 0x7b, 0xb1, 0x60, 0xf6, 0x84,
- 0x80, 0xad, 0x2e, 0xd5, 0x4c, 0x52, 0xba, 0x45, 0x6c, 0x10, 0x13, 0x9a,
- 0xd0, 0xf9, 0x8e, 0x97, 0xf5, 0x03, 0x61, 0x02, 0xb1, 0x73, 0xa0, 0x2e,
- 0x2d, 0x30, 0x22, 0x16, 0x10, 0xc3, 0x0f, 0xe3, 0xbe, 0x08, 0xb6, 0x86,
- 0x83, 0x7c, 0x9b, 0xd2, 0xdc, 0xf2, 0x69, 0x55, 0x19, 0x51, 0x4d, 0xb6,
- 0x5a, 0x92, 0xd4, 0xcc, 0xd8, 0x49, 0xf5, 0x81, 0x39, 0xc8, 0x5a, 0xfd,
- 0x4d, 0xdb, 0xcb, 0x45, 0x24, 0x50, 0x8b, 0xb2, 0x56, 0x03, 0xa8, 0xb0,
- 0x56, 0x4a, 0xb8, 0xaa, 0x1f, 0x2a, 0x6e, 0x3e, 0xa6, 0x01, 0x9d, 0x10,
- 0x97, 0x6d, 0x2b, 0x4c, 0x92, 0x14, 0xc7, 0xc2, 0x90, 0xa0, 0x82, 0xab,
- 0x4f, 0x61, 0x45, 0x16, 0x72, 0xf2, 0x67, 0x87, 0x7e, 0xc7, 0x45, 0x53,
- 0x20, 0x56, 0x7b, 0xaa, 0x54, 0x4d, 0x81, 0x0a, 0xa4, 0x29, 0x3a, 0x91,
- 0xbc, 0x8c, 0x62, 0x59, 0xd3, 0x33, 0x25, 0x2b, 0x95, 0x6c, 0x4d, 0x68,
- 0xaa, 0x72, 0xba, 0x9c, 0xc0, 0xc2, 0x42, 0x21, 0x69, 0x54, 0xe9, 0x7c,
- 0xcc, 0x60, 0x5c, 0x9a, 0x1a, 0x4e, 0x4d, 0x5b, 0x79, 0xb8, 0xd3, 0x1c,
- 0x6c, 0x85, 0x52, 0xa9, 0x08, 0x0f, 0xe2, 0x0f, 0x36, 0xfd, 0xd2, 0x3d,
- 0x43, 0x3e, 0x3f, 0x8b, 0xdb, 0xda, 0x85, 0x4a, 0x2e, 0x2e, 0x57, 0x80,
- 0x4f, 0xb3, 0x77, 0x91, 0xd4, 0x81, 0xfb, 0xc6, 0xc6, 0x54, 0xa4, 0x5c,
- 0xb0, 0x1b, 0x92, 0xea, 0x57, 0x14, 0x07, 0xdb, 0x69, 0xcf, 0x87, 0x54,
- 0x9e, 0xf7, 0x45, 0x40, 0x7f, 0xd4, 0x41, 0xf4, 0x4e, 0xef, 0x6a, 0xf0,
- 0xac, 0x42, 0x2d, 0xfd, 0xbc, 0xaa, 0xcc, 0x8d, 0x14, 0x2a, 0xc2, 0x4c,
- 0xa9, 0x24, 0x21, 0xc7, 0xc9, 0x28, 0x91, 0xc8, 0x03, 0xc3, 0x73, 0x86,
- 0x1e, 0x5a, 0x96, 0xdc, 0xcd, 0x24, 0xb5, 0x13, 0x0e, 0x10, 0x8d, 0x54,
- 0xeb, 0x22, 0x8c, 0x29, 0x47, 0x22, 0xf9, 0x5b, 0x39, 0x16, 0x05, 0x8f,
- 0xe4, 0xd2, 0x58, 0x02, 0xd9, 0x25, 0x42, 0xb1, 0x0d, 0x8f, 0x35, 0xfc,
- 0x9d, 0x43, 0x36, 0x68, 0x40, 0x45, 0xd6, 0x10, 0xb7, 0x41, 0xa0, 0x36,
- 0x2c, 0x3d, 0x89, 0x94, 0xa5, 0x46, 0xe4, 0x2d, 0xf1, 0x00, 0xb2, 0xb4,
- 0x75, 0x9a, 0xfb, 0x6c, 0xf8, 0x6c, 0x97, 0xd2, 0x7b, 0x7c, 0x66, 0x94,
- 0x4e, 0x48, 0xdb, 0xaa, 0x13, 0x4d, 0x3f, 0x41, 0x56, 0x98, 0x70, 0x73,
- 0xa9, 0x01, 0xbf, 0x14, 0x1e, 0x35, 0x08, 0xfd, 0xa0, 0xa2, 0x72, 0x64,
- 0x84, 0x17, 0x57, 0x63, 0x01, 0x4d, 0x7b, 0xcb, 0x2a, 0x9d, 0x3c, 0x28,
- 0x16, 0xad, 0x0b, 0xc1, 0xa2, 0x26, 0x4a, 0xa0, 0x47, 0xf0, 0xd3, 0x01,
- 0xc4, 0x7a, 0x61, 0x07, 0x41, 0x5c, 0x3b, 0xaf, 0x19, 0xca, 0xa6, 0x53,
- 0xf6, 0x46, 0x8e, 0xef, 0x40, 0x5b, 0x5b, 0xa1, 0x77, 0xfd, 0xa6, 0x2c,
- 0xf7, 0x2a, 0x2f, 0x06, 0x2a, 0xd0, 0xbf, 0x96, 0x5f, 0x1e, 0x13, 0x00,
- 0xf1, 0x86, 0x55, 0x01, 0x84, 0xaf, 0xca, 0xed, 0xac, 0xd6, 0xa7, 0x16,
- 0xdd, 0x3e, 0xa2, 0xc1, 0x58, 0xc4, 0x1e, 0x69, 0xd5, 0x69, 0x16, 0x5e,
- 0xf4, 0x0e, 0x0a, 0x4a, 0x4e, 0xca, 0x99, 0x35, 0x87, 0x45, 0x43, 0xd0,
- 0x85, 0xaa, 0xb9, 0x5e, 0x14, 0xaf, 0x87, 0x0c, 0xaa, 0x33, 0x9a, 0x64,
- 0xbf, 0x01, 0x2c, 0xb8, 0x64, 0x27, 0x06, 0x26, 0xe9, 0xe3, 0x77, 0xfb,
- 0x67, 0x46, 0x30, 0x22, 0xf3, 0x20, 0x6e, 0xd5, 0xd1, 0x3b, 0x82, 0xc4,
- 0x61, 0x53, 0x79, 0x7b, 0xf2, 0x8c, 0x62, 0x07, 0x01, 0xc0, 0x2b, 0xda,
- 0xd4, 0x95, 0xdb, 0xc6, 0x1a, 0x3c, 0xd8, 0x5e, 0x38, 0xa9, 0x42, 0x46,
- 0xb6, 0x3e, 0x82, 0xad, 0xdb, 0x7d, 0xf6, 0xf9, 0xf3, 0x3e, 0x7e, 0x7b,
- 0xb1, 0xfd, 0x6a, 0x57, 0x3c, 0x9a, 0xc7, 0x47, 0x17, 0x6f, 0xbb, 0x1a,
- 0x47, 0x65, 0x94, 0x35, 0xfe, 0x39, 0xc8, 0xd2, 0xea, 0x3a, 0xad, 0x1a,
- 0x0a, 0x46, 0x1a, 0xd4, 0xf3, 0x66, 0x31, 0xd8, 0xde, 0x1e, 0x36, 0x86,
- 0xa1, 0xb4, 0xea, 0xd0, 0x3e, 0x1f, 0x6e, 0x6f, 0xfe, 0x9e, 0x04, 0x44,
- 0x16, 0xba, 0x01, 0x2d, 0x71, 0xf2, 0x7a, 0x45, 0x5d, 0xe3, 0x0d, 0x5a,
- 0xc1, 0x4d, 0x2f, 0x30, 0x2c, 0x55, 0x68, 0x39, 0xbf, 0x8a, 0x74, 0x5e,
- 0xb7, 0x63, 0x57, 0x1d, 0x01, 0x44, 0x2e, 0xec, 0xae, 0x73, 0x49, 0xf2,
- 0x3a, 0x36, 0xd8, 0x3c, 0xd8, 0x3c, 0x6c, 0x72, 0x69, 0xb2, 0x54, 0x21,
- 0xdf, 0x21, 0x41, 0x8a, 0x79, 0x30, 0x9a, 0xa0, 0x5c, 0x0b, 0xca, 0x41,
- 0x95, 0x11, 0xb2, 0x0f, 0x5f, 0x42, 0x12, 0xa8, 0xa0, 0x05, 0x76, 0xbb,
- 0xb3, 0xf2, 0xcd, 0x87, 0x2f, 0xda, 0xb5, 0x9f, 0xb1, 0x26, 0xe0, 0x7b,
- 0xbf, 0x60, 0x4d, 0xda, 0x4b, 0xe2, 0x6e, 0x3e, 0x16, 0x29, 0x61, 0xb7,
- 0x16, 0x7f, 0x58, 0x88, 0x67, 0x50, 0x2b, 0x86, 0xf6, 0xe3, 0xc3, 0xdc,
- 0xee, 0x0e, 0xf3, 0x1e, 0x15, 0xb6, 0x60, 0x23, 0x7e, 0x0d, 0xf1, 0xfd,
- 0x53, 0x34, 0x3f, 0x3c, 0xbe, 0xa1, 0x1a, 0xcc, 0xa6, 0x07, 0x02, 0x8d,
- 0xbb, 0x51, 0x15, 0x3b, 0xf8, 0x2f, 0x63, 0xc2, 0x16, 0x1e, 0x75, 0xd6,
- 0xbe, 0xbc, 0x9d, 0x4e, 0x06, 0xba, 0x04, 0x9f, 0xee, 0xb7, 0x81, 0x5c,
- 0x22, 0x42, 0x30, 0xea, 0x6c, 0x51, 0xe6, 0x07, 0x8e, 0x8b, 0x9f, 0xe6,
- 0x87, 0x82, 0x0b, 0x30, 0x49, 0x66, 0xf7, 0x08, 0xad, 0x33, 0x4a, 0xfd,
- 0xcb, 0x67, 0xa1, 0x09, 0xfc, 0xf4, 0xe2, 0x68, 0x0f, 0x7a, 0x88, 0x4b,
- 0x68, 0x52, 0x33, 0x15, 0xc7, 0xc1, 0x51, 0x3e, 0x35, 0x41, 0x8f, 0x10,
- 0x30, 0xa9, 0x3f, 0x3b, 0xae, 0xb9, 0x14, 0xc1, 0xa3, 0x41, 0x3d, 0x68,
- 0x76, 0x7f, 0x34, 0x2b, 0xb1, 0xc1, 0xb4, 0xc4, 0xb0, 0x35, 0x2e, 0x34,
- 0xb1, 0x22, 0x8e, 0x97, 0x9c, 0xd5, 0x8b, 0x44, 0x59, 0x26, 0xcf, 0x60,
- 0xa1, 0x98, 0x38, 0x58, 0x05, 0xb6, 0x2e, 0x2f, 0x2a, 0xfc, 0x9a, 0x55,
- 0x41, 0xc8, 0x03, 0xd4, 0x6e, 0xf2, 0xd8, 0xd0, 0x62, 0x41, 0xca, 0x70,
- 0x09, 0x09, 0x5d, 0xe2, 0xad, 0x26, 0x8b, 0xe6, 0x29, 0xe2, 0x1d, 0xd9,
- 0xe8, 0xca, 0x36, 0xe9, 0xf6, 0x1d, 0xca, 0x31, 0x4b, 0x62, 0x1c, 0xff,
- 0x06, 0xef, 0x50, 0xac, 0x3a, 0x28, 0x5b, 0x11, 0xc5, 0x9d, 0xc2, 0xfe,
- 0x1a, 0x50, 0xbb, 0x8e, 0x4e, 0x83, 0x5d, 0x27, 0xf9, 0x22, 0xf7, 0x30,
- 0x50, 0x6d, 0x70, 0x67, 0x98, 0xf9, 0x4d, 0x5e, 0x11, 0x34, 0x61, 0x0f,
- 0x53, 0xe9, 0xd2, 0xc7, 0xb9, 0xed, 0x72, 0xf8, 0xc8, 0xd1, 0xf0, 0x07,
- 0xe6, 0x8f, 0xab, 0x48, 0x6c, 0x8b, 0x5c, 0x54, 0xc8, 0x9a, 0x9e, 0x37,
- 0xbe, 0x3b, 0x7f, 0xfb, 0x57, 0x9b, 0xb3, 0xb7, 0xd9, 0x8f, 0x1b, 0xd3,
- 0x75, 0x06, 0x7e, 0xe1, 0x75, 0x2b, 0x41, 0x88, 0x48, 0xd1, 0x5a, 0x3b,
- 0xf7, 0x47, 0x48, 0x6c, 0xd3, 0x12, 0x91, 0x3c, 0x1b, 0x54, 0xf3, 0x94,
- 0x0a, 0x30, 0x8b, 0xd8, 0xff, 0x6c, 0xf8, 0x02, 0x8e, 0xa8, 0xb7, 0x07,
- 0x2f, 0x9e, 0xed, 0xee, 0x6c, 0x0e, 0xc3, 0xdb, 0xe0, 0xc9, 0x69, 0xb6,
- 0xb7, 0x2c, 0xbb, 0x5f, 0x10, 0xc1, 0x6c, 0x1c, 0xfd, 0x70, 0xf6, 0xde,
- 0x9b, 0xa0, 0xdd, 0x93, 0x40, 0xac, 0xf3, 0x67, 0xc8, 0x5e, 0x47, 0x3b,
- 0x47, 0x67, 0xec, 0x0c, 0xa8, 0x82, 0xd3, 0xee, 0x43, 0xc4, 0x87, 0xde,
- 0xdb, 0x2a, 0xa7, 0x43, 0xd0, 0xa3, 0xf5, 0xe8, 0x9d, 0x18, 0xf9, 0xd5,
- 0x28, 0x26, 0xa7, 0x04, 0xfa, 0x94, 0xf5, 0xba, 0x35, 0xd7, 0x9f, 0x87,
- 0xfc, 0x4d, 0x0c, 0xd8, 0x50, 0x27, 0x23, 0x8a, 0xa4, 0xf2, 0x34, 0x07,
- 0x6a, 0x61, 0x35, 0x01, 0x52, 0x80, 0xac, 0xf1, 0xb6, 0x16, 0x4d, 0xc6,
- 0x86, 0x65, 0x18, 0x95, 0x27, 0x00, 0x81, 0xb1, 0x6e, 0x1b, 0xb9, 0x4f,
- 0xfb, 0x8f, 0x40, 0x6a, 0xaa, 0xc4, 0xec, 0x4a, 0xc7, 0x84, 0xb5, 0xc6,
- 0xac, 0x89, 0xdb, 0x0e, 0xa8, 0xa6, 0x1c, 0x1c, 0x23, 0x52, 0xd4, 0xcb,
- 0x6a, 0xba, 0x9c, 0x9b, 0xf9, 0x7f, 0x65, 0x13, 0x79, 0x24, 0xf7, 0x80,
- 0x35, 0xf6, 0x48, 0xb2, 0x40, 0xc6, 0x8e, 0xdf, 0x17, 0xdb, 0xad, 0xf6,
- 0x86, 0x58, 0x05, 0x7f, 0x98, 0x14, 0xa6, 0xbd, 0x63, 0xa3, 0xb2, 0x49,
- 0xfb, 0x87, 0x75, 0xb0, 0x6b, 0x73, 0xa3, 0x5b, 0xfb, 0xf7, 0x94, 0x2a,
- 0xb2, 0x26, 0x25, 0xc9, 0xff, 0x89, 0xec, 0xf7, 0xc6, 0x87, 0xab, 0x64,
- 0x2f, 0x3d, 0x97, 0x8c, 0x45, 0x9d, 0x2b, 0xba, 0xff, 0x85, 0x41, 0x12,
- 0x3c, 0x50, 0x48, 0x5b, 0xef, 0xa4, 0x17, 0xcd, 0xc9, 0xd9, 0x00, 0x8b,
- 0xb4, 0x29, 0xc0, 0x2c, 0xff, 0x3d, 0x4f, 0x36, 0x20, 0x96, 0x7d, 0xfe,
- 0xe2, 0xf9, 0x26, 0x54, 0x7e, 0x1b, 0xa1, 0xb3, 0x19, 0x71, 0xbe, 0x61,
- 0xd5, 0x96, 0xb5, 0x4d, 0x36, 0x9e, 0xe7, 0x28, 0xbb, 0x04, 0x3a, 0x77,
- 0x69, 0x0c, 0xc8, 0xa4, 0x36, 0x27, 0x00, 0x16, 0x25, 0x89, 0x44, 0x08,
- 0xec, 0x59, 0x08, 0x07, 0xe2, 0xaa, 0x4d, 0xc9, 0x86, 0x1c, 0x0e, 0x77,
- 0x63, 0xd8, 0x34, 0x6f, 0x8e, 0x3d, 0xc7, 0xf5, 0x60, 0xd3, 0x18, 0x36,
- 0xc9, 0x06, 0x16, 0xb3, 0x07, 0x43, 0xd7, 0xf0, 0xea, 0xa1, 0xa1, 0xf2,
- 0x57, 0xe9, 0x5d, 0x44, 0xec, 0x0a, 0x10, 0x8b, 0xbf, 0xdc, 0x75, 0x49,
- 0x0c, 0xb2, 0xd0, 0xc8, 0xaf, 0x9c, 0x89, 0x41, 0xb7, 0xa7, 0x5d, 0x48,
- 0x0e, 0xc9, 0x05, 0x2c, 0x14, 0xed, 0xbf, 0xb6, 0x20, 0xf1, 0x3c, 0xae,
- 0xfe, 0x58, 0x60, 0x6d, 0x9b, 0x67, 0x73, 0x85, 0x08, 0xe6, 0x5b, 0xbd,
- 0xac, 0x5c, 0x19, 0x17, 0xb6, 0xe7, 0xf0, 0x15, 0x8d, 0xe0, 0xc0, 0x55,
- 0x78, 0x0b, 0xae, 0x0a, 0xb0, 0x80, 0x03, 0xb4, 0x06, 0xb6, 0xa2, 0x6c,
- 0x83, 0x25, 0x36, 0x3f, 0x6b, 0x57, 0xdc, 0x50, 0x88, 0x15, 0xd5, 0xdf,
- 0x2d, 0x51, 0x86, 0xc5, 0x4c, 0xb8, 0xd3, 0xce, 0x32, 0xac, 0x18, 0x3c,
- 0xd7, 0x33, 0x41, 0xba, 0x35, 0x54, 0x9b, 0x41, 0x98, 0x06, 0x92, 0x6c,
- 0x60, 0xbc, 0x5b, 0x5b, 0x9b, 0x4f, 0x8e, 0x59, 0x1e, 0x7c, 0x6a, 0x8c,
- 0x67, 0xac, 0x6e, 0xd0, 0xe2, 0x66, 0x0e, 0x95, 0xc7, 0x0d, 0x82, 0x3a,
- 0xcd, 0x91, 0x18, 0x4b, 0xf4, 0xc3, 0xf1, 0x82, 0x36, 0xe0, 0xda, 0x48,
- 0x42, 0xa1, 0x5d, 0x8a, 0xa7, 0xcc, 0xb3, 0x6b, 0x4f, 0x5c, 0x04, 0x57,
- 0xce, 0x01, 0x17, 0x9e, 0xa0, 0x59, 0x10, 0x64, 0xbe, 0x9e, 0x05, 0x35,
- 0xb9, 0x8a, 0x4e, 0x5d, 0x0a, 0x6f, 0x7e, 0xac, 0x09, 0x39, 0xa7, 0x32,
- 0x1f, 0x0b, 0xc6, 0xbc, 0x50, 0xe7, 0x73, 0xc8, 0x8a, 0xf5, 0xe9, 0x4e,
- 0x91, 0xb6, 0x10, 0xe1, 0x89, 0x1f, 0xa4, 0xc3, 0xa3, 0x0e, 0xe9, 0x90,
- 0x36, 0x05, 0x6d, 0x42, 0x2b, 0x69, 0x71, 0x9b, 0x46, 0xcb, 0xbf, 0x71,
- 0xf3, 0x66, 0xac, 0x36, 0xcd, 0x04, 0x73, 0x99, 0xf8, 0xc8, 0xea, 0x8c,
- 0x03, 0x16, 0x58, 0xea, 0xc6, 0x9a, 0x69, 0x05, 0x32, 0x7c, 0xda, 0x5a,
- 0xce, 0x3e, 0x1f, 0x52, 0xc4, 0xb0, 0xc7, 0x84, 0x60, 0x20, 0xe2, 0x3f,
- 0x2a, 0xf6, 0x03, 0xf5, 0xc4, 0x0c, 0xab, 0x5d, 0x40, 0x9c, 0xb3, 0x86,
- 0xc6, 0x76, 0xa1, 0x25, 0x28, 0x6d, 0xe8, 0xdd, 0xa0, 0x05, 0x59, 0x99,
- 0x8a, 0xac, 0xa9, 0x26, 0x81, 0x61, 0x09, 0xe9, 0xa2, 0xec, 0xec, 0xa9,
- 0xd9, 0x19, 0x49, 0x8b, 0x34, 0xc4, 0xc3, 0xa6, 0xfb, 0x8f, 0xf2, 0x4b,
- 0x69, 0xb3, 0x0c, 0x36, 0xfd, 0x43, 0x11, 0x09, 0x26, 0x5f, 0xaf, 0x6d,
- 0xf4, 0xbb, 0x04, 0x49, 0x11, 0x93, 0x64, 0x9d, 0x59, 0x25, 0xa0, 0xc4,
- 0x79, 0xcb, 0x2d, 0x90, 0xf9, 0xc3, 0x22, 0x08, 0x2b, 0x9d, 0xd8, 0x48,
- 0x2f, 0xce, 0x1c, 0x01, 0xc0, 0x01, 0x67, 0x55, 0xb8, 0xc0, 0x05, 0x28,
- 0x07, 0x24, 0x05, 0xfb, 0xf8, 0x20, 0x5c, 0x88, 0x2b, 0x32, 0xba, 0xc0,
- 0x88, 0x40, 0x86, 0x1b, 0xcc, 0x71, 0xc3, 0xdc, 0x0a, 0xc4, 0xcd, 0x9b,
- 0xc5, 0xc6, 0xce, 0x26, 0xba, 0xd3, 0x9a, 0x24, 0x2b, 0xb2, 0x2c, 0xf9,
- 0xaa, 0xd1, 0xe0, 0x2e, 0x2a, 0x43, 0xaa, 0x9e, 0x63, 0x78, 0x70, 0x09,
- 0x8b, 0x9c, 0xe4, 0x3a, 0x90, 0x51, 0x2a, 0xd9, 0xa1, 0x1a, 0x29, 0x46,
- 0xfe, 0xaf, 0x08, 0x71, 0x32, 0xb6, 0xd2, 0x82, 0xb2, 0x08, 0x6a, 0xae,
- 0x0e, 0xb7, 0x91, 0x5b, 0x39, 0x99, 0xaf, 0x07, 0x2d, 0x99, 0x6a, 0x56,
- 0x6f, 0x36, 0x1d, 0x20, 0x8d, 0xf2, 0xaa, 0x2a, 0x43, 0x0c, 0x4c, 0xca,
- 0xc0, 0x92, 0x1b, 0x84, 0x3d, 0x58, 0xd1, 0x32, 0xb5, 0x3d, 0x4a, 0x78,
- 0xe9, 0xd9, 0x1b, 0xde, 0xcb, 0xa9, 0xe9, 0xfa, 0x15, 0x5a, 0x5b, 0x1a,
- 0x90, 0xe9, 0x7e, 0xf2, 0xf7, 0x65, 0x6e, 0xc8, 0x9a, 0xf6, 0x16, 0xe1,
- 0x8c, 0xc8, 0x9f, 0xc8, 0x6c, 0x10, 0x80, 0xe1, 0x1e, 0x14, 0xe7, 0xc0,
- 0xb9, 0x58, 0x64, 0xcf, 0x86, 0x4e, 0xaf, 0x54, 0x16, 0x29, 0xc7, 0x0b,
- 0x63, 0xb3, 0x0a, 0x04, 0x80, 0xbf, 0x2d, 0x45, 0xdc, 0x44, 0x24, 0x1f,
- 0xc7, 0x76, 0xb0, 0xe4, 0x4c, 0xac, 0x9d, 0xa9, 0x60, 0x55, 0x51, 0x96,
- 0xf5, 0xf9, 0x03, 0x5d, 0x64, 0xeb, 0xed, 0xea, 0x2c, 0xeb, 0x35, 0x19,
- 0x04, 0x9b, 0x75, 0x5d, 0x5f, 0x84, 0xeb, 0x3d, 0x52, 0xe0, 0x69, 0x55,
- 0xd7, 0x4c, 0xda, 0xdc, 0x85, 0x6b, 0x9d, 0x1b, 0x77, 0x47, 0xf0, 0x7d,
- 0x9f, 0x23, 0xca, 0xc7, 0x4b, 0x0a, 0x38, 0xe9, 0x34, 0x7d, 0xc8, 0xdc,
- 0x9a, 0xa5, 0x02, 0x7e, 0x42, 0x8a, 0xc7, 0x21, 0x20, 0x90, 0x33, 0x39,
- 0x6a, 0xca, 0xff, 0x9b, 0x0f, 0xa9, 0x04, 0xa3, 0x20, 0x2f, 0xa2, 0xee,
- 0x6b, 0x1d, 0x0a, 0x75, 0x4b, 0xae, 0x05, 0xdf, 0x6f, 0x03, 0x6b, 0x77,
- 0xa2, 0x13, 0xb9, 0x1b, 0x8a, 0x41, 0xf1, 0x9b, 0x8f, 0x39, 0xc7, 0xf1,
- 0x3a, 0x3c, 0xb6, 0xf0, 0x90, 0xb3, 0xe6, 0xcb, 0x37, 0x8f, 0x98, 0x56,
- 0xa5, 0x09, 0x0b, 0x69, 0x4f, 0x90, 0x82, 0xd7, 0xcb, 0xe2, 0xc6, 0x0c,
- 0x21, 0x0c, 0x7b, 0x56, 0x27, 0x47, 0x4e, 0x67, 0xdb, 0x10, 0x08, 0xc0,
- 0xcc, 0x1c, 0x5c, 0x03, 0xb7, 0x40, 0x60, 0x54, 0xb7, 0x10, 0x4b, 0x82,
- 0x12, 0x21, 0xb1, 0xd1, 0xc9, 0x75, 0xc7, 0xa3, 0xb2, 0x0b, 0xf8, 0x58,
- 0x7e, 0xa1, 0x57, 0x3f, 0xa1, 0xc8, 0xae, 0x10, 0x0e, 0x21, 0xf2, 0x28,
- 0x67, 0x39, 0x2a, 0xcc, 0x0a, 0x14, 0x05, 0x35, 0x74, 0x06, 0x47, 0x76,
- 0x59, 0x73, 0x4d, 0x33, 0xd9, 0x56, 0xa2, 0x52, 0x1f, 0x1d, 0x30, 0x32,
- 0x12, 0xe1, 0xc3, 0x83, 0x48, 0x75, 0xbd, 0x8b, 0x2e, 0x0a, 0x62, 0xed,
- 0xe3, 0xc3, 0xe2, 0xb5, 0x7e, 0x0b, 0x21, 0x96, 0x91, 0x06, 0x39, 0x34,
- 0xbf, 0x89, 0x60, 0x26, 0x9b, 0x23, 0xb1, 0x61, 0x74, 0x8c, 0x72, 0xb6,
- 0xe4, 0xb2, 0x4e, 0x64, 0x14, 0xa3, 0x34, 0x8d, 0x4d, 0x3d, 0x4d, 0x7c,
- 0xfe, 0xd8, 0x70, 0xc1, 0x35, 0xd2, 0xf8, 0x22, 0x88, 0x81, 0x76, 0x22,
- 0xe8, 0xdb, 0xb7, 0xf9, 0x72, 0x8c, 0xae, 0x6a, 0xef, 0xa4, 0x04, 0x78,
- 0xcd, 0x2d, 0x10, 0x81, 0x7a, 0x5b, 0x2a, 0x9b, 0x0d, 0x2c, 0x48, 0xaa,
- 0x4c, 0xf8, 0xeb, 0x61, 0x6d, 0xaa, 0x24, 0x1a, 0xb8, 0x9a, 0x49, 0x7e,
- 0xd9, 0x00, 0x28, 0x1c, 0xd4, 0xd9, 0xa3, 0x41, 0x12, 0x8f, 0xc4, 0x04,
- 0x46, 0xd7, 0xda, 0x15, 0xc9, 0x46, 0x38, 0x8a, 0x88, 0xfd, 0x32, 0x34,
- 0x91, 0xd6, 0x1f, 0x30, 0xaa, 0xf9, 0x92, 0x1c, 0x0d, 0x81, 0xad, 0xd9,
- 0xec, 0xca, 0x6c, 0xc9, 0xe8, 0xdb, 0xe4, 0xb4, 0x76, 0x22, 0x7a, 0x3a,
- 0xa6, 0xcd, 0x19, 0x3f, 0xd8, 0x79, 0x6a, 0xea, 0x3a, 0x12, 0xcd, 0x55,
- 0x9f, 0x0e, 0xc9, 0x43, 0x1f, 0xeb, 0xf4, 0xf3, 0x9d, 0xf0, 0xd6, 0x80,
- 0x2c, 0xd8, 0x11, 0xe2, 0x63, 0x6d, 0xdc, 0x08, 0x3b, 0x51, 0x26, 0xbb,
- 0x8c, 0xd8, 0x4c, 0xed, 0x60, 0x54, 0x5c, 0x27, 0x9b, 0x40, 0xaa, 0xc5,
- 0xb6, 0xd9, 0x95, 0xc1, 0xaf, 0x6b, 0xc6, 0x49, 0xd9, 0x4e, 0x70, 0x32,
- 0x47, 0xa7, 0x04, 0xbc, 0x75, 0x1c, 0x24, 0xe5, 0x48, 0xea, 0x61, 0xbe,
- 0xd7, 0xc7, 0x92, 0x8d, 0xd1, 0xd9, 0xfb, 0xa3, 0xaf, 0x4f, 0x37, 0x9f,
- 0x72, 0x2d, 0x90, 0x6a, 0x0e, 0x97, 0x1d, 0x82, 0x51, 0x70, 0xac, 0x70,
- 0xc0, 0x23, 0x2d, 0xb1, 0xdb, 0xaa, 0xbc, 0x7f, 0xf0, 0xda, 0x8c, 0x05,
- 0xdd, 0xf5, 0x39, 0xcd, 0x93, 0xcf, 0x2b, 0x03, 0xc6, 0xd9, 0xe1, 0xff,
- 0xd2, 0x80, 0x7f, 0x96, 0xc0, 0x70, 0xe9, 0x7c, 0x3d, 0x1a, 0x0d, 0xf6,
- 0xcf, 0x8e, 0x71, 0x13, 0x8f, 0x46, 0xe6, 0x97, 0x55, 0x88, 0xd4, 0xe0,
- 0x65, 0x14, 0x4a, 0xf3, 0x5d, 0x3f, 0xf1, 0xc2, 0xfb, 0xe5, 0x4e, 0xcc,
- 0x58, 0x60, 0xb6, 0x21, 0xfe, 0x2e, 0xa8, 0x9f, 0x3a, 0xe8, 0x5e, 0xb7,
- 0x67, 0xc7, 0x5b, 0xe8, 0x0b, 0x7e, 0x0d, 0xac, 0x43, 0x3c, 0xa6, 0x6f,
- 0x19, 0xd6, 0x57, 0xa2, 0x55, 0x45, 0xc6, 0x06, 0xe8, 0x53, 0xd9, 0x47,
- 0x6a, 0xc4, 0x4f, 0x72, 0x00, 0x2f, 0x31, 0xb6, 0x48, 0x15, 0x56, 0x2f,
- 0x62, 0x8b, 0xf1, 0xcd, 0x15, 0x74, 0xbd, 0x63, 0xc2, 0x87, 0x85, 0xd6,
- 0xd6, 0x22, 0x37, 0xe2, 0x15, 0xfb, 0x8b, 0xbb, 0xc6, 0xbd, 0xf5, 0xc1,
- 0x32, 0xd9, 0x43, 0x89, 0xcb, 0xac, 0xa0, 0xe2, 0xb5, 0x2d, 0xab, 0x99,
- 0xb0, 0x60, 0x28, 0x0c, 0xf6, 0x42, 0x75, 0x69, 0x97, 0x66, 0x84, 0xcb,
- 0xf8, 0xe8, 0xcc, 0x09, 0x25, 0xe9, 0x8a, 0xbd, 0x81, 0x1c, 0x9c, 0x3d,
- 0xfd, 0xa7, 0x00, 0xce, 0xfa, 0x47, 0xc2, 0xcb, 0x1a, 0x7b, 0xec, 0x9a,
- 0x17, 0x26, 0xe3, 0x32, 0xcc, 0xc4, 0xad, 0x61, 0x23, 0xc0, 0x2f, 0x0e,
- 0xce, 0xbc, 0x30, 0x80, 0x7e, 0x68, 0xf5, 0x70, 0xe0, 0x2f, 0x92, 0xf5,
- 0x5a, 0xd8, 0xd6, 0xe7, 0xc3, 0xc7, 0x2a, 0x06, 0x36, 0x9a, 0x50, 0xb1,
- 0xea, 0xf6, 0xf3, 0x2f, 0x3f, 0x89, 0x45, 0x5d, 0x7d, 0xf5, 0xb9, 0x19,
- 0x78, 0xb7, 0x9f, 0xfd, 0xb0, 0xb3, 0x34, 0x82, 0xd3, 0x94, 0x4f, 0xa3,
- 0x99, 0x5a, 0xb2, 0x40, 0x5a, 0x64, 0x44, 0x96, 0x88, 0xf0, 0x75, 0x14,
- 0x0b, 0xeb, 0xf8, 0xd0, 0x0c, 0x86, 0xe4, 0x30, 0x52, 0x40, 0xbf, 0x7a,
- 0xb0, 0xf9, 0xe7, 0xa1, 0x00, 0xe9, 0xe2, 0x88, 0xf8, 0x3e, 0x41, 0x45,
- 0x6c, 0xaf, 0x5c, 0x3a, 0x21, 0xe9, 0x79, 0x88, 0xd7, 0x12, 0x21, 0x25,
- 0x38, 0x6c, 0x71, 0x00, 0x57, 0x22, 0x0e, 0x04, 0x1d, 0x5e, 0x2f, 0xb9,
- 0x1e, 0xa6, 0xa0, 0xfc, 0xd8, 0x4a, 0x74, 0x55, 0x06, 0x47, 0x28, 0x0d,
- 0xd8, 0x1b, 0x71, 0x50, 0xdc, 0x8e, 0x55, 0x72, 0x73, 0xe6, 0xe7, 0x92,
- 0x82, 0x30, 0xae, 0xca, 0x1b, 0x73, 0x5a, 0xe9, 0x3d, 0xc8, 0xcd, 0xb4,
- 0xf6, 0x2c, 0xc3, 0xa9, 0x6e, 0x69, 0x6e, 0x94, 0xa9, 0x75, 0x8c, 0x46,
- 0x22, 0x50, 0x09, 0xd5, 0x5f, 0x92, 0xf5, 0x9c, 0x2c, 0xc4, 0x70, 0xeb,
- 0xc8, 0xa7, 0x57, 0x80, 0x4e, 0x58, 0xd0, 0xa9, 0xae, 0xb4, 0x77, 0x4d,
- 0x86, 0x1e, 0x6e, 0xc1, 0xc9, 0xff, 0xe7, 0xd1, 0x90, 0x25, 0x0b, 0x9f,
- 0x86, 0x22, 0x7b, 0xde, 0x22, 0x26, 0x66, 0xfa, 0xaf, 0x0d, 0x55, 0x31,
- 0x37, 0x27, 0xd3, 0x5c, 0xd7, 0x36, 0x8c, 0x92, 0x13, 0x03, 0x07, 0x47,
- 0x03, 0x33, 0x35, 0xb4, 0x11, 0x8a, 0x4a, 0xe1, 0x20, 0x8e, 0xa9, 0xab,
- 0x90, 0x23, 0x30, 0xa0, 0x7d, 0x66, 0xc6, 0xa1, 0x98, 0x81, 0x14, 0x13,
- 0x7b, 0x6b, 0xb3, 0x66, 0x05, 0x26, 0x41, 0xfb, 0x03, 0x24, 0xb2, 0xdc,
- 0xab, 0xb3, 0xf6, 0xaf, 0x3e, 0xd0, 0x07, 0xfa, 0x0a, 0x54, 0x0a, 0xc6,
- 0x8d, 0xb7, 0x71, 0x32, 0x1c, 0xee, 0x6a, 0xf3, 0x69, 0xa9, 0x66, 0x8b,
- 0xcf, 0x33, 0x18, 0xa3, 0x34, 0x39, 0xa2, 0xa0, 0x97, 0x88, 0x9e, 0xc3,
- 0x15, 0xb5, 0x72, 0x9b, 0xc1, 0x93, 0x0b, 0xc6, 0x25, 0x3b, 0x25, 0x44,
- 0x71, 0x4c, 0xd5, 0xe1, 0x60, 0xa1, 0x90, 0xb8, 0x9e, 0x6a, 0x4c, 0xe7,
- 0xab, 0x1b, 0xb6, 0xe8, 0x0b, 0x70, 0x80, 0x7e, 0x60, 0xf1, 0xe2, 0xdf,
- 0xba, 0x38, 0xef, 0x7e, 0xc2, 0x26, 0x24, 0xa8, 0x44, 0x1c, 0x4c, 0x19,
- 0x9b, 0x6c, 0xe2, 0x3d, 0xe6, 0xbf, 0xb2, 0xf7, 0xf9, 0x76, 0x5f, 0x38,
- 0x3e, 0x59, 0xed, 0xfc, 0x67, 0x10, 0x84, 0x14, 0xaa, 0x11, 0x80, 0xe4,
- 0x2b, 0x1b, 0xfb, 0x64, 0xb7, 0xd0, 0xc3, 0xab, 0xe1, 0xf3, 0xcd, 0x16,
- 0xbd, 0x34, 0xb3, 0x79, 0x57, 0x2e, 0x49, 0xde, 0x5f, 0x9c, 0xbc, 0x4b,
- 0x02, 0x9b, 0x00, 0x2b, 0xcc, 0xb1, 0xef, 0x02, 0x63, 0x27, 0x62, 0xb1,
- 0x29, 0x98, 0xdc, 0x08, 0x8f, 0xf9, 0x55, 0xc1, 0x80, 0x47, 0xef, 0xf2,
- 0x49, 0x55, 0xd6, 0xe5, 0x25, 0xbb, 0x33, 0x55, 0xb9, 0x36, 0x5f, 0x1c,
- 0x1f, 0x8f, 0x92, 0xbb, 0x6c, 0xac, 0x99, 0x56, 0x41, 0x68, 0x61, 0xc3,
- 0xe4, 0x43, 0xd7, 0x67, 0x95, 0x67, 0x0d, 0x49, 0x1a, 0x6a, 0xd4, 0xa3,
- 0xcc, 0x66, 0x7a, 0x27, 0x1b, 0x64, 0x85, 0xd1, 0x37, 0x33, 0xa8, 0x6e,
- 0x84, 0xdf, 0x3f, 0x03, 0x57, 0x32, 0x02, 0x77, 0x19, 0xb1, 0xec, 0xf2,
- 0x00, 0x94, 0xa5, 0x08, 0xd8, 0x3b, 0xdd, 0x15, 0xe3, 0xb4, 0xb6, 0xa0,
- 0x4e, 0x39, 0x8a, 0x6f, 0x90, 0xac, 0x21, 0xe6, 0x98, 0x9b, 0x1c, 0xe9,
- 0xf3, 0x41, 0x5a, 0xb9, 0xd4, 0x75, 0xec, 0xd8, 0x23, 0x8a, 0x69, 0x59,
- 0xc1, 0x49, 0xe2, 0x81, 0x14, 0x03, 0xdf, 0x7f, 0x89, 0xf0, 0x4f, 0x70,
- 0xcd, 0x87, 0x88, 0xc4, 0x7e, 0x5d, 0x0a, 0x66, 0x06, 0xaf, 0x34, 0x31,
- 0x26, 0x4e, 0x0d, 0x44, 0x62, 0x86, 0xe0, 0xbe, 0x72, 0x3d, 0x21, 0xe5,
- 0x24, 0x4f, 0x48, 0x78, 0xba, 0x1f, 0x2e, 0x3b, 0x49, 0x8c, 0xed, 0x87,
- 0xf9, 0xd5, 0x0a, 0xe8, 0x79, 0x1b, 0xef, 0xec, 0x89, 0x98, 0x34, 0x1a,
- 0x61, 0x97, 0x2a, 0x59, 0x06, 0x05, 0x4e, 0x62, 0x30, 0x1b, 0x2d, 0xc9,
- 0xd2, 0x50, 0xdb, 0xf0, 0x71, 0xa5, 0xe3, 0x71, 0xb1, 0x12, 0x97, 0x9e,
- 0x64, 0x8f, 0x6a, 0x52, 0x68, 0x60, 0x1d, 0x7d, 0x24, 0x45, 0xd4, 0xc9,
- 0x8f, 0x34, 0x9f, 0xe1, 0x3f, 0xa3, 0x60, 0x9b, 0x3b, 0x6c, 0x25, 0x19,
- 0x3b, 0xc4, 0x28, 0x10, 0xcd, 0x06, 0xf8, 0x9e, 0xf1, 0x8a, 0xc4, 0x6c,
- 0x50, 0xca, 0x43, 0x7e, 0x02, 0x5e, 0xdd, 0x4c, 0xcb, 0x65, 0x63, 0x41,
- 0xc3, 0xe9, 0x06, 0xe7, 0xcb, 0xfb, 0x3f, 0xfe, 0x2b, 0xcc, 0x47, 0xfa,
- 0xf1, 0x67, 0x98, 0xae, 0x80, 0x4b, 0x61, 0x21, 0x1a, 0x94, 0x6c, 0x6a,
- 0x57, 0x50, 0x83, 0x76, 0x88, 0xf0, 0x97, 0xc4, 0x29, 0x47, 0x12, 0x1f,
- 0x65, 0x47, 0x74, 0x85, 0x53, 0x8d, 0xb9, 0xd6, 0x0a, 0x85, 0x32, 0x3a,
- 0x65, 0xfc, 0xa8, 0xf2, 0x93, 0x7a, 0x56, 0x34, 0x55, 0x3e, 0x05, 0xa1,
- 0x79, 0xba, 0x0a, 0xe0, 0x5b, 0x81, 0x5c, 0x04, 0x22, 0x59, 0xf1, 0x58,
- 0x08, 0x41, 0x83, 0xfd, 0x3e, 0x98, 0x01, 0x5d, 0x2c, 0x88, 0xc6, 0xcc,
- 0x8b, 0x10, 0xa7, 0x94, 0xf7, 0x56, 0xfc, 0x1b, 0xff, 0x61, 0x36, 0xa3,
- 0xdf, 0xdc, 0x95, 0xff, 0x35, 0xa4, 0x88, 0x46, 0x70, 0xde, 0x41, 0xc9,
- 0xb5, 0xab, 0x3f, 0xfe, 0x71, 0x87, 0x42, 0x88, 0x7a, 0x61, 0x4d, 0x6a,
- 0x2c, 0x82, 0xee, 0xb3, 0x85, 0xb7, 0x59, 0x01, 0x8b, 0xda, 0xee, 0x8e,
- 0x7a, 0xe9, 0xd3, 0x25, 0xf0, 0x5f, 0x43, 0xfa, 0xf9, 0xe3, 0xce, 0xe0,
- 0xc5, 0xcf, 0xb6, 0xd7, 0x3f, 0xee, 0x7c, 0xfc, 0xe3, 0x6e, 0x2f, 0x16,
- 0x22, 0x26, 0x79, 0x81, 0xed, 0x80, 0xbe, 0x1a, 0x45, 0x41, 0x25, 0x82,
- 0x56, 0x84, 0x7f, 0xe7, 0xbc, 0x45, 0xc5, 0x93, 0x48, 0xda, 0x07, 0x59,
- 0xa1, 0xe2, 0x10, 0x84, 0x52, 0xf5, 0x9d, 0xa3, 0xef, 0x5c, 0x79, 0x5c,
- 0xcf, 0x1b, 0x2a, 0xd5, 0x62, 0x9d, 0x2b, 0x47, 0xcc, 0x99, 0x81, 0xe5,
- 0x94, 0x92, 0x54, 0xa7, 0x0f, 0xe6, 0xa2, 0x63, 0x04, 0x53, 0x0b, 0x14,
- 0xa0, 0xa2, 0xa3, 0x90, 0xad, 0xe0, 0x5e, 0x6d, 0xb8, 0x28, 0x28, 0xe0,
- 0xb5, 0x6d, 0xc6, 0x2c, 0x13, 0xce, 0x24, 0xe4, 0x68, 0x7e, 0x2c, 0x32,
- 0x29, 0x1d, 0x5e, 0x26, 0x76, 0x77, 0x80, 0xba, 0x30, 0xa2, 0xd1, 0xe3,
- 0xe3, 0xb5, 0x95, 0xfa, 0xde, 0x29, 0x2e, 0x07, 0x24, 0x59, 0xc5, 0x99,
- 0x7a, 0xd0, 0x18, 0x03, 0x2f, 0x23, 0xf9, 0xb5, 0x7b, 0xef, 0x6c, 0x9c,
- 0x3a, 0x3d, 0x67, 0x96, 0xb5, 0xc0, 0xe3, 0xfd, 0x97, 0x3d, 0x6f, 0x78,
- 0x96, 0x68, 0x95, 0x71, 0x43, 0x21, 0x4d, 0x88, 0xf0, 0x31, 0xdc, 0x8c,
- 0x66, 0x51, 0x28, 0xd2, 0x37, 0x9b, 0xce, 0x2d, 0x9c, 0x98, 0x04, 0x74,
- 0x27, 0x35, 0x17, 0xab, 0x21, 0xa5, 0x90, 0x61, 0x4c, 0xc9, 0xee, 0x2f,
- 0xd0, 0xa5, 0x41, 0x9e, 0x82, 0x54, 0xa0, 0xed, 0x5b, 0xe8, 0xe4, 0x6c,
- 0x56, 0x87, 0xb4, 0x71, 0x40, 0xae, 0x1e, 0xc2, 0x88, 0x6b, 0x90, 0x36,
- 0xde, 0x77, 0xb3, 0xb4, 0x69, 0x89, 0xe9, 0xad, 0x73, 0xe1, 0xd8, 0x23,
- 0xaa, 0x51, 0xf2, 0xab, 0x32, 0xbf, 0x87, 0x9d, 0xdb, 0xc3, 0x46, 0x1e,
- 0xa5, 0xb6, 0x4c, 0x94, 0x4b, 0x2d, 0x74, 0x29, 0xf0, 0xb1, 0x64, 0x56,
- 0xd4, 0x0f, 0x00, 0x87, 0xe2, 0xa4, 0x2f, 0x1d, 0x82, 0x8c, 0xc0, 0x73,
- 0xa4, 0x08, 0xb0, 0x0b, 0x3d, 0xcb, 0x48, 0x5f, 0xf1, 0xc2, 0x04, 0xc2,
- 0x6d, 0x42, 0x2c, 0xda, 0xcb, 0x59, 0x7a, 0xf5, 0x87, 0x28, 0xfc, 0xab,
- 0xf8, 0x07, 0x89, 0x13, 0x01, 0xf6, 0x15, 0xfd, 0x02, 0x3f, 0xc1, 0x73,
- 0x6d, 0x31, 0x32, 0x88, 0x99, 0x76, 0xce, 0x25, 0x3e, 0xfe, 0xb4, 0xbb,
- 0x1d, 0xb2, 0x62, 0x07, 0x0a, 0xa4, 0x25, 0x7e, 0x88, 0x9c, 0x6a, 0xa5,
- 0x27, 0x96, 0x27, 0x5d, 0x2d, 0x81, 0x0c, 0x39, 0x43, 0xe4, 0xd2, 0x1f,
- 0x10, 0x31, 0x05, 0x3a, 0xae, 0xeb, 0x38, 0x1a, 0x7c, 0xfa, 0x6b, 0x59,
- 0xcb, 0x53, 0x9c, 0xc5, 0xdc, 0x5e, 0x74, 0xe3, 0xef, 0x0e, 0xc6, 0x99,
- 0xb9, 0x79, 0xba, 0x73, 0xdc, 0xe0, 0xd0, 0x52, 0x4e, 0x3c, 0x6f, 0xc7,
- 0x50, 0x51, 0x5f, 0x5f, 0xe1, 0x9d, 0xe4, 0x02, 0x3a, 0x1d, 0xd1, 0xf5,
- 0x29, 0x55, 0x0a, 0x4f, 0x76, 0x87, 0xdb, 0x22, 0xf8, 0x3d, 0x9a, 0xfe,
- 0xca, 0xc8, 0x1a, 0xad, 0x36, 0xf4, 0x76, 0x46, 0xa5, 0x9e, 0xe2, 0x6f,
- 0xcb, 0xa2, 0x0d, 0x77, 0x1f, 0x73, 0x73, 0x61, 0xbf, 0x45, 0xc2, 0xe7,
- 0x78, 0x95, 0x56, 0x80, 0x92, 0x1e, 0x71, 0x31, 0xa7, 0x00, 0x06, 0x0f,
- 0x16, 0xac, 0xc1, 0x32, 0x94, 0x32, 0xd0, 0xe0, 0xaa, 0xc2, 0x0c, 0x38,
- 0xd7, 0x32, 0x5a, 0x19, 0xae, 0x62, 0x84, 0x68, 0xc4, 0x53, 0x95, 0x89,
- 0x97, 0xac, 0xe9, 0x16, 0x7c, 0x3a, 0x7f, 0x7b, 0xd0, 0x69, 0xee, 0xe5,
- 0x67, 0x2f, 0xb6, 0x7f, 0xcf, 0x78, 0x94, 0x56, 0xa1, 0x88, 0xc7, 0x0b,
- 0xf1, 0xfc, 0x9a, 0x3a, 0x3c, 0x2b, 0x0b, 0xf1, 0x88, 0xe6, 0xf6, 0x29,
- 0x75, 0x78, 0x6c, 0x19, 0x9e, 0x38, 0xfa, 0x40, 0x37, 0x4b, 0xd1, 0x45,
- 0xfb, 0xf8, 0x35, 0x86, 0x50, 0x00, 0xb1, 0xf6, 0x6c, 0xa3, 0x88, 0xf8,
- 0x5a, 0x16, 0x11, 0x1f, 0xab, 0x98, 0xc0, 0x21, 0xe9, 0xd9, 0xca, 0xcc,
- 0x07, 0xa7, 0xef, 0xdf, 0x1f, 0x1d, 0xd8, 0xac, 0xd3, 0x9a, 0xa7, 0x69,
- 0xf9, 0x5d, 0x6a, 0x11, 0x7e, 0xe2, 0x85, 0x78, 0x10, 0xc7, 0x2a, 0x4e,
- 0x06, 0xee, 0xdf, 0xfc, 0x71, 0x27, 0x11, 0xba, 0xfa, 0x25, 0x13, 0x9f,
- 0x84, 0xee, 0xcb, 0xdd, 0x10, 0x51, 0x41, 0xe3, 0xf5, 0x57, 0xc4, 0xa9,
- 0xc5, 0xc9, 0xef, 0x60, 0xa1, 0x61, 0x0d, 0x16, 0x08, 0x8e, 0x5e, 0x05,
- 0x16, 0xe9, 0xfb, 0xff, 0x4b, 0xf5, 0x57, 0xbe, 0x91, 0xe8, 0x85, 0x0e,
- 0xc6, 0x6c, 0xa4, 0x54, 0x1a, 0x57, 0x27, 0x1a, 0x67, 0x5e, 0x5c, 0x43,
- 0x18, 0x41, 0x61, 0xc9, 0xc1, 0x25, 0xe4, 0x51, 0x60, 0x6d, 0xed, 0xfc,
- 0xde, 0xe3, 0xcc, 0xee, 0xef, 0xaa, 0x9a, 0x2a, 0x21, 0xea, 0x1a, 0xba,
- 0x5d, 0x81, 0xbb, 0xf6, 0x2b, 0x4a, 0x9f, 0xac, 0x0e, 0xa1, 0xa0, 0xc2,
- 0x31, 0x56, 0x40, 0x1b, 0x2c, 0xfa, 0xca, 0x11, 0x1a, 0xca, 0xbd, 0x9a,
- 0xc5, 0x2c, 0xe8, 0x66, 0x74, 0x08, 0xb1, 0x65, 0x2a, 0x56, 0xd6, 0xb3,
- 0x31, 0xb8, 0xb7, 0xef, 0xc6, 0x30, 0x19, 0x10, 0x93, 0x12, 0xc4, 0xc6,
- 0x14, 0x03, 0x34, 0x65, 0x75, 0x7a, 0x2d, 0xee, 0x22, 0x98, 0xeb, 0x7c,
- 0x26, 0x30, 0x12, 0x22, 0xe6, 0x0a, 0x76, 0x71, 0x77, 0x84, 0x02, 0x63,
- 0x8f, 0xd5, 0x95, 0xe6, 0xe6, 0x06, 0x9f, 0x69, 0xce, 0x7f, 0xde, 0x48,
- 0x3d, 0x53, 0xd4, 0xa7, 0xc0, 0x81, 0xb6, 0xb9, 0x40, 0xb5, 0x20, 0x5a,
- 0x9b, 0x4e, 0x06, 0x81, 0x57, 0x76, 0x86, 0xdc, 0xd4, 0xaa, 0xa4, 0x03,
- 0x04, 0xc9, 0x0e, 0x18, 0xe5, 0xee, 0x78, 0x78, 0xcb, 0xd0, 0xe1, 0x0e,
- 0x91, 0xa0, 0x56, 0xab, 0xdc, 0xda, 0xf0, 0x77, 0x71, 0xd1, 0x30, 0xba,
- 0x80, 0xa4, 0x7e, 0x89, 0x79, 0x5b, 0x39, 0x85, 0x88, 0x87, 0xa4, 0xb6,
- 0xc6, 0x35, 0x32, 0x16, 0x70, 0x14, 0x5e, 0x45, 0x96, 0x4a, 0x57, 0xaa,
- 0x29, 0x3d, 0x46, 0xdf, 0xae, 0xe5, 0xbd, 0x32, 0x00, 0x9a, 0x21, 0xaf,
- 0xce, 0xd9, 0xb2, 0x52, 0xdb, 0x04, 0x79, 0x36, 0xaa, 0x4b, 0xe9, 0xd6,
- 0xb2, 0xda, 0x42, 0xd0, 0x5f, 0x41, 0x39, 0xd2, 0x25, 0xe9, 0x4a, 0x5c,
- 0xef, 0xba, 0x8c, 0xac, 0x21, 0x23, 0xef, 0x63, 0xc9, 0x4c, 0xd3, 0xc2,
- 0xc2, 0xc5, 0xac, 0x31, 0x77, 0xd0, 0x13, 0x02, 0x5a, 0xc5, 0x98, 0x79,
- 0x5a, 0xf5, 0xf6, 0xb8, 0x7b, 0xd8, 0x16, 0x40, 0xf2, 0x9f, 0xb8, 0x3a,
- 0x1e, 0x0d, 0xfb, 0xc8, 0x51, 0x6d, 0x80, 0x87, 0xea, 0x0a, 0xd8, 0xea,
- 0x52, 0x12, 0x94, 0x71, 0x1c, 0x16, 0x63, 0x32, 0xa3, 0x88, 0xde, 0x75,
- 0x9f, 0x17, 0x68, 0x10, 0x34, 0xe2, 0x22, 0xcc, 0x42, 0x69, 0x9e, 0x70,
- 0xab, 0x58, 0x7d, 0x5a, 0xdf, 0xd4, 0xab, 0x61, 0x86, 0x5a, 0x21, 0x1d,
- 0x66, 0x74, 0x5e, 0x75, 0x0e, 0x6d, 0x95, 0x51, 0x5f, 0x1b, 0x7f, 0x94,
- 0xb4, 0x57, 0xed, 0xe6, 0xec, 0x16, 0x05, 0x60, 0x61, 0x81, 0x56, 0x6a,
- 0x8b, 0x74, 0x04, 0xda, 0x2a, 0x7f, 0x3d, 0xcc, 0x92, 0x1e, 0x95, 0xef,
- 0xe8, 0xf9, 0xc9, 0x47, 0x92, 0xaf, 0xa7, 0xaf, 0x12, 0x16, 0x8d, 0x19,
- 0xaa, 0x0b, 0x03, 0x0f, 0x25, 0x42, 0xbd, 0x1e, 0xc4, 0x3a, 0x44, 0x5b,
- 0xb6, 0xf1, 0xa1, 0xc8, 0xef, 0xc1, 0x7f, 0x43, 0xd4, 0x3f, 0x3b, 0xef,
- 0x47, 0x46, 0xa5, 0x05, 0xa1, 0x76, 0xb6, 0x87, 0x3b, 0xad, 0xd1, 0xe1,
- 0x52, 0xa7, 0x50, 0x08, 0xbf, 0x9d, 0xc8, 0x5d, 0x18, 0xb3, 0xfa, 0xfa,
- 0x1d, 0xcc, 0x1f, 0x86, 0x5e, 0x78, 0x4a, 0xd0, 0x85, 0x84, 0xb0, 0x74,
- 0x5b, 0x1e, 0x78, 0xda, 0x88, 0x90, 0xda, 0x82, 0xa2, 0x79, 0x62, 0x25,
- 0xd8, 0x35, 0xcd, 0xc6, 0xab, 0xbc, 0x3e, 0x8d, 0x0f, 0x68, 0x75, 0x39,
- 0x76, 0xdb, 0xff, 0xff, 0x86, 0x60, 0xa7, 0x9e, 0xfe, 0xc3, 0xdc, 0xa5,
- 0x5b, 0xc0, 0x18, 0xc3, 0x07, 0x03, 0x07, 0xac, 0xe4, 0xca, 0xed, 0x02,
- 0x69, 0xc3, 0xec, 0x20, 0xad, 0x6f, 0x87, 0xd6, 0xcf, 0x04, 0xff, 0xa5,
- 0xab, 0x78, 0xd1, 0xa9, 0xd0, 0x81, 0x7a, 0xef, 0x1d, 0xc4, 0x23, 0xdb,
- 0xa6, 0xc5, 0x58, 0x19, 0x0c, 0xc4, 0x44, 0x3f, 0xc8, 0x16, 0x70, 0xf2,
- 0xe2, 0x35, 0x30, 0x50, 0xb3, 0x42, 0x5e, 0xa8, 0x00, 0xbd, 0xf6, 0xe7,
- 0x3f, 0x3b, 0x1e, 0xd5, 0x2e, 0x69, 0xb6, 0xf3, 0x6a, 0xf8, 0xc2, 0x19,
- 0xaa, 0x18, 0x24, 0x20, 0xe9, 0xed, 0xfd, 0x88, 0xb4, 0x98, 0x9f, 0x07,
- 0x3f, 0x9a, 0x3f, 0x7f, 0xee, 0x59, 0x46, 0x89, 0x38, 0xb1, 0x76, 0xf9,
- 0x3d, 0x9b, 0xb4, 0x41, 0xcf, 0xd8, 0x70, 0x6a, 0xc8, 0x5c, 0xe4, 0x49,
- 0xc4, 0x41, 0xe4, 0xc4, 0x6a, 0x9e, 0xa9, 0x18, 0xb1, 0x38, 0xbf, 0x1e,
- 0xae, 0x76, 0xa2, 0x14, 0xbb, 0x96, 0x9a, 0xe0, 0xc5, 0x49, 0xd3, 0x78,
- 0xb1, 0xaf, 0x3e, 0x58, 0xb2, 0x36, 0xdc, 0x31, 0xdb, 0x49, 0x35, 0x0d,
- 0x9f, 0x39, 0xf4, 0x30, 0xd9, 0x57, 0x63, 0x08, 0x7f, 0xb0, 0x66, 0x41,
- 0x74, 0x28, 0x0d, 0x54, 0x6a, 0xc5, 0x73, 0xb8, 0x02, 0xcb, 0x41, 0x99,
- 0x8d, 0x24, 0xb2, 0x19, 0x97, 0x32, 0xc5, 0xfa, 0x86, 0x66, 0x28, 0x99,
- 0xce, 0x09, 0x83, 0xb2, 0xad, 0x79, 0x42, 0x30, 0x46, 0xa6, 0xe9, 0xc1,
- 0x04, 0x16, 0xae, 0x41, 0xd3, 0x2d, 0x79, 0x9f, 0x0a, 0x9a, 0xbd, 0x5e,
- 0x5c, 0x57, 0xa6, 0xe1, 0x47, 0x40, 0x30, 0xcd, 0x53, 0xfc, 0x8c, 0xa5,
- 0x5a, 0x0f, 0xe5, 0xf1, 0xf7, 0x54, 0x47, 0x18, 0x5d, 0x65, 0x45, 0x25,
- 0xd0, 0x0b, 0xe6, 0xf4, 0x0e, 0x8a, 0xa3, 0x02, 0x00, 0x5e, 0xc3, 0x89,
- 0x86, 0x2f, 0x77, 0x5e, 0x6e, 0x19, 0x46, 0xf2, 0x6c, 0xb8, 0x6b, 0xc3,
- 0x37, 0xcc, 0x11, 0x33, 0x63, 0xe8, 0x5e, 0x9e, 0x7e, 0xa9, 0x59, 0x94,
- 0xbd, 0x2b, 0x13, 0x0f, 0x50, 0x46, 0xae, 0x33, 0x97, 0xa6, 0x60, 0x36,
- 0xdd, 0x0c, 0xc9, 0xe5, 0x4f, 0x04, 0x79, 0x21, 0xce, 0x45, 0x42, 0x22,
- 0x0d, 0x8d, 0x45, 0x7d, 0x03, 0x4b, 0x29, 0x3d, 0x3d, 0xce, 0xcd, 0xed,
- 0xdf, 0x94, 0x4b, 0xf8, 0x1f, 0xc9, 0xe1, 0xa1, 0x75, 0x7b, 0x08, 0x30,
- 0x2c, 0x26, 0xcd, 0x5b, 0xfc, 0x15, 0x9e, 0x01, 0x8c, 0xda, 0xe3, 0x07,
- 0x0f, 0x5d, 0x9c, 0x66, 0x4f, 0x2c, 0x0d, 0xc5, 0x07, 0xb8, 0x98, 0x09,
- 0x5d, 0xc9, 0x93, 0x87, 0xee, 0x3d, 0xf2, 0x8d, 0xa1, 0xcc, 0x5b, 0x12,
- 0xd9, 0xb5, 0xf8, 0xa9, 0x24, 0x9b, 0xb3, 0x8b, 0x34, 0xe5, 0xc5, 0x40,
- 0xcd, 0x0f, 0x38, 0xc1, 0xe4, 0x03, 0x8e, 0x96, 0x8f, 0xd5, 0x8b, 0xf4,
- 0xb3, 0x2c, 0xda, 0x00, 0xb2, 0x0c, 0x03, 0x42, 0xd8, 0xb3, 0xc0, 0x21,
- 0x64, 0x05, 0xea, 0x4e, 0x0a, 0x12, 0x43, 0x19, 0x7c, 0x34, 0xb7, 0xe4,
- 0xb1, 0xb2, 0x73, 0x82, 0xb4, 0xf3, 0xdf, 0x8f, 0x2c, 0x76, 0xff, 0x7f,
- 0xb2, 0xf8, 0x67, 0x92, 0xc5, 0xab, 0x18, 0x59, 0x3c, 0xfb, 0xef, 0x47,
- 0x16, 0xcf, 0xfe, 0x7f, 0xb2, 0xf8, 0x27, 0x92, 0xc5, 0xee, 0xcb, 0x76,
- 0x7a, 0x1c, 0xd4, 0x49, 0x73, 0xc9, 0xa9, 0x56, 0x19, 0xc0, 0x8b, 0x33,
- 0x61, 0x74, 0x21, 0x9d, 0x24, 0xcd, 0x4c, 0x60, 0x0d, 0x9d, 0x4a, 0x8a,
- 0x5a, 0x4d, 0x04, 0xb4, 0xa7, 0x40, 0x7a, 0xa1, 0x45, 0x82, 0x00, 0x39,
- 0xd3, 0xd9, 0x30, 0x39, 0xb3, 0x6f, 0x91, 0x91, 0x8f, 0x3e, 0x5b, 0x72,
- 0x94, 0x45, 0x76, 0x09, 0x81, 0x0a, 0x72, 0x4a, 0x1f, 0x5f, 0x42, 0x8e,
- 0x22, 0xab, 0xd1, 0x20, 0xc8, 0x8e, 0xa2, 0x57, 0xd4, 0xf9, 0x8f, 0x76,
- 0x48, 0x03, 0x4d, 0x5d, 0x3a, 0x8b, 0x26, 0x51, 0xae, 0x1b, 0x69, 0x8a,
- 0xa0, 0x81, 0x5d, 0xf1, 0x9f, 0x45, 0x95, 0x85, 0x85, 0x88, 0xee, 0xd9,
- 0x31, 0xfe, 0x8f, 0xac, 0x2a, 0x13, 0x4d, 0xeb, 0x17, 0x2c, 0x36, 0x54,
- 0xec, 0x52, 0x31, 0xc1, 0x7d, 0x48, 0xbd, 0x06, 0x5a, 0xc6, 0x9f, 0x51,
- 0xc8, 0x90, 0xf1, 0xf7, 0x08, 0xe6, 0xc3, 0x26, 0xd7, 0x20, 0x4d, 0x3d,
- 0x57, 0xab, 0x9b, 0x5b, 0x38, 0x95, 0x88, 0x11, 0xbe, 0x1f, 0x9c, 0x03,
- 0x12, 0x5a, 0xc8, 0x70, 0xe0, 0x07, 0x1e, 0x5b, 0x45, 0xf3, 0x92, 0x01,
- 0x88, 0x78, 0x38, 0xb6, 0x4e, 0xc7, 0x30, 0x22, 0xa7, 0x1f, 0x66, 0xc5,
- 0x83, 0x06, 0x79, 0xb8, 0xd0, 0x00, 0x68, 0xce, 0xb7, 0xa2, 0xfd, 0xdb,
- 0x62, 0x6f, 0x1a, 0xeb, 0x62, 0x87, 0x18, 0x0e, 0xa9, 0x3d, 0xe6, 0x26,
- 0x12, 0x2d, 0xf7, 0xc6, 0x2e, 0x83, 0x04, 0xc3, 0xf9, 0x6b, 0xb1, 0x81,
- 0x74, 0x1c, 0xf5, 0x8b, 0xa1, 0x3f, 0x6d, 0xf1, 0xd1, 0x65, 0xe0, 0xbc,
- 0x5a, 0xb6, 0x6f, 0xd4, 0xcb, 0xf1, 0xdf, 0x88, 0x4b, 0x81, 0x30, 0x67,
- 0x29, 0xb2, 0xd6, 0x5a, 0x25, 0x28, 0xa9, 0x1c, 0xcb, 0x72, 0x2c, 0x5e,
- 0x9c, 0xb0, 0x39, 0xf3, 0x21, 0x3c, 0x76, 0xb6, 0xa2, 0x8d, 0xd0, 0x99,
- 0x17, 0xf0, 0x13, 0x4c, 0xca, 0x8b, 0x5b, 0x09, 0xf6, 0x5d, 0xcf, 0x13,
- 0xa9, 0x0b, 0xb5, 0x44, 0x28, 0xf8, 0x9b, 0x65, 0x57, 0x53, 0xa4, 0x58,
- 0x8d, 0xcf, 0xa1, 0xc7, 0x57, 0xb6, 0x65, 0xa8, 0xb5, 0x4f, 0x5e, 0xd4,
- 0xba, 0xff, 0x67, 0xfa, 0x27, 0xae, 0x30, 0xb5, 0xc0, 0x8f, 0x35, 0x98,
- 0x8f, 0x1e, 0xc7, 0xd1, 0xc0, 0xeb, 0xab, 0x3a, 0x78, 0x43, 0xdf, 0x72,
- 0x0f, 0x8f, 0xb7, 0x0d, 0x37, 0xe9, 0x2f, 0xe8, 0xe0, 0x43, 0xa1, 0x89,
- 0xf3, 0x4a, 0xe6, 0x0b, 0x0b, 0xc3, 0x63, 0x54, 0xe3, 0xaa, 0xe0, 0x48,
- 0x3c, 0x36, 0xe9, 0x89, 0x71, 0x27, 0xa1, 0x0c, 0x28, 0x42, 0x6b, 0x09,
- 0x13, 0x3b, 0x08, 0xed, 0x9b, 0x18, 0x1f, 0xec, 0x55, 0xb4, 0xb7, 0x9c,
- 0xee, 0x28, 0xb0, 0x9a, 0x1a, 0xb9, 0xb6, 0x28, 0x1b, 0x75, 0xd8, 0x25,
- 0x53, 0xd2, 0x3c, 0x2a, 0xba, 0x1c, 0x22, 0x80, 0xec, 0xba, 0x11, 0x5a,
- 0xda, 0x8b, 0x9a, 0xa5, 0x06, 0x97, 0x0b, 0xc2, 0x4d, 0x12, 0xa8, 0x0f,
- 0x66, 0x68, 0x02, 0x01, 0xa5, 0x94, 0xcb, 0x3d, 0x77, 0x23, 0x5c, 0x10,
- 0x7e, 0x81, 0x2b, 0xcf, 0x22, 0x84, 0xde, 0x96, 0x39, 0xe0, 0x6f, 0x91,
- 0xbf, 0x39, 0xfc, 0xd4, 0x2a, 0xce, 0x6d, 0x33, 0x66, 0xdf, 0xab, 0x0a,
- 0x97, 0xd6, 0x7e, 0x1a, 0x45, 0x18, 0x5e, 0x66, 0x75, 0x6e, 0xa3, 0x2b,
- 0x51, 0xfe, 0xbf, 0x21, 0xe2, 0x22, 0xb5, 0x65, 0x87, 0xdc, 0x36, 0x60,
- 0x94, 0x5c, 0x04, 0x85, 0x52, 0x3a, 0x26, 0x59, 0x04, 0x1b, 0xd4, 0xa1,
- 0x49, 0x3f, 0x05, 0x27, 0xb1, 0x1b, 0xdc, 0x27, 0x9c, 0x70, 0xfd, 0xf4,
- 0xad, 0x12, 0xb9, 0x54, 0xe4, 0x4e, 0xf1, 0x38, 0xa3, 0xc0, 0x52, 0xea,
- 0xe5, 0x88, 0xac, 0xab, 0x15, 0x94, 0xcc, 0x40, 0x42, 0x77, 0xfe, 0xdb,
- 0x15, 0x22, 0x2b, 0x18, 0xe9, 0x25, 0xc2, 0xa1, 0x9e, 0x98, 0xca, 0xfd,
- 0xc3, 0x20, 0x2d, 0x1e, 0xc8, 0xc7, 0x16, 0x9d, 0x80, 0x4d, 0x3a, 0x46,
- 0xfa, 0x92, 0x21, 0x9a, 0x9c, 0xeb, 0xc6, 0x74, 0xc2, 0x9a, 0x35, 0xd2,
- 0x4b, 0x31, 0x96, 0xe7, 0xcb, 0xc0, 0xf8, 0x87, 0x47, 0xe9, 0x22, 0x67,
- 0x14, 0xf8, 0xc6, 0xc1, 0x06, 0xaa, 0xf7, 0x47, 0x8e, 0x09, 0x63, 0x7e,
- 0x09, 0xe8, 0x17, 0x68, 0x8b, 0xfc, 0x3e, 0x71, 0x4b, 0xfb, 0x96, 0x4d,
- 0x57, 0xac, 0xa8, 0xea, 0xd2, 0xc0, 0xf0, 0xba, 0x45, 0x07, 0xf4, 0xeb,
- 0x59, 0x6c, 0xca, 0xa8, 0xbf, 0xfa, 0xe8, 0x84, 0xa9, 0xf3, 0x95, 0x10,
- 0x55, 0x89, 0x3f, 0x53, 0x9d, 0xd9, 0x2a, 0xbf, 0x09, 0x4f, 0x52, 0xe6,
- 0xf8, 0x81, 0xd3, 0x61, 0xd0, 0x26, 0x60, 0x60, 0x89, 0xcd, 0xd0, 0xb2,
- 0x78, 0x7d, 0x31, 0x04, 0x72, 0x30, 0x61, 0x18, 0x7f, 0x19, 0xb4, 0x97,
- 0x9f, 0x93, 0xe3, 0xe0, 0xe4, 0xba, 0xee, 0x20, 0x65, 0x57, 0x62, 0x98,
- 0xf8, 0xe0, 0xdb, 0xe8, 0x88, 0x06, 0x96, 0xb7, 0xd3, 0x16, 0x78, 0x8d,
- 0xa6, 0x88, 0x0a, 0x7b, 0x84, 0xac, 0xfd, 0x55, 0xe2, 0x10, 0xb2, 0xee,
- 0x08, 0xc4, 0x12, 0xfc, 0xeb, 0x16, 0x89, 0xfb, 0x8f, 0xac, 0x92, 0xf4,
- 0x15, 0x85, 0xc2, 0xf5, 0x97, 0x29, 0x98, 0xd1, 0xaa, 0x74, 0x8c, 0xe8,
- 0x59, 0x45, 0x57, 0x4f, 0x66, 0x66, 0x60, 0x8a, 0x41, 0x62, 0xb3, 0x37,
- 0xe1, 0x47, 0xa7, 0x68, 0x07, 0xd4, 0x9a, 0x65, 0x57, 0x08, 0x5f, 0x31,
- 0x10, 0x41, 0xca, 0x6e, 0x11, 0xc6, 0xa3, 0x5a, 0xb3, 0x8d, 0xbc, 0xfb,
- 0xf4, 0xe9, 0x53, 0xac, 0xdf, 0x6f, 0xb9, 0xa7, 0x88, 0x32, 0x6d, 0xed,
- 0x28, 0xba, 0x68, 0x4d, 0xe5, 0x51, 0x1f, 0xa7, 0x4c, 0x63, 0x67, 0xb8,
- 0x0d, 0xde, 0x7b, 0xff, 0x80, 0x48, 0xab, 0x3d, 0xba, 0xc9, 0x7e, 0xee,
- 0xb2, 0xe0, 0x0f, 0x56, 0x8c, 0xf7, 0xca, 0x07, 0xb3, 0x8b, 0x89, 0xde,
- 0xd7, 0x91, 0x69, 0x29, 0x47, 0x07, 0xa3, 0x28, 0xd8, 0x38, 0xab, 0xeb,
- 0x91, 0xe4, 0x8d, 0x57, 0x8e, 0x84, 0xf2, 0xc0, 0xf1, 0xf2, 0xce, 0xf6,
- 0xe7, 0xdb, 0xd1, 0x00, 0x00, 0x08, 0x14, 0x1a, 0xef, 0x32, 0xc9, 0xbc,
- 0x8a, 0x93, 0xb9, 0xab, 0x36, 0xe4, 0xf9, 0x8f, 0xd4, 0xf7, 0x47, 0x6e,
- 0xb4, 0xd8, 0x3d, 0x00, 0xa7, 0x5a, 0x2e, 0xc6, 0x66, 0x31, 0xd0, 0x5a,
- 0x88, 0x32, 0x75, 0x3e, 0x59, 0xbf, 0x8f, 0x75, 0x2e, 0x45, 0x92, 0xaa,
- 0x9d, 0xa3, 0x9d, 0xfb, 0xa7, 0x75, 0xf1, 0x44, 0x79, 0x6b, 0xd3, 0xf5,
- 0x25, 0x3c, 0x79, 0x70, 0xa7, 0xb5, 0x29, 0xcb, 0xf1, 0x23, 0xb5, 0x74,
- 0xc8, 0x84, 0xc8, 0xf1, 0xaa, 0x8f, 0x96, 0xd1, 0xb1, 0xd9, 0x36, 0x1c,
- 0xa6, 0x29, 0x31, 0xae, 0x41, 0xb9, 0xa5, 0x7f, 0x7e, 0x19, 0x9d, 0xbf,
- 0xdb, 0xc4, 0x18, 0x4e, 0x83, 0xb1, 0xf8, 0x14, 0x14, 0xf2, 0xe9, 0x4a,
- 0x7b, 0x96, 0x9e, 0x88, 0x6d, 0xf1, 0x99, 0xb5, 0xe8, 0x5a, 0x90, 0x5b,
- 0xee, 0x97, 0x10, 0xf4, 0xdd, 0xc3, 0xa8, 0xb6, 0x2b, 0x21, 0x22, 0x02,
- 0x97, 0x8e, 0x70, 0x25, 0xbf, 0xa6, 0x64, 0x04, 0xdf, 0x53, 0xb3, 0xb1,
- 0x65, 0x10, 0xb1, 0x42, 0x85, 0x75, 0x96, 0x56, 0x46, 0xc6, 0xa2, 0xd0,
- 0x34, 0x6f, 0x72, 0xff, 0x83, 0xda, 0x45, 0x59, 0x51, 0x57, 0xff, 0x20,
- 0xe2, 0x07, 0xdc, 0x1a, 0xb1, 0x33, 0x70, 0x04, 0x98, 0x6a, 0xb2, 0xc1,
- 0x57, 0xe3, 0xbc, 0xa9, 0x52, 0xa9, 0xcd, 0x22, 0xf5, 0x22, 0x3c, 0x37,
- 0x25, 0xb2, 0xd1, 0xab, 0x84, 0x5e, 0x8b, 0xba, 0xc6, 0x86, 0xc9, 0xff,
- 0x40, 0xa7, 0xf2, 0x36, 0x0b, 0x32, 0xf0, 0x8d, 0x7f, 0x75, 0xf4, 0xf6,
- 0xf4, 0xfc, 0xa8, 0x8d, 0x8a, 0xc5, 0xc0, 0xf4, 0x8c, 0xca, 0xdf, 0x1d,
- 0xdd, 0xdf, 0x28, 0x5d, 0xab, 0x85, 0xe8, 0xa1, 0x10, 0xf7, 0x67, 0xdf,
- 0x1f, 0x7a, 0x1e, 0x0a, 0xad, 0x64, 0xe2, 0x01, 0x2e, 0x95, 0x91, 0xc2,
- 0x3c, 0xe4, 0x67, 0xda, 0x74, 0xa0, 0xc8, 0x76, 0x7c, 0x0c, 0x45, 0x8b,
- 0x48, 0x09, 0x95, 0xd8, 0x90, 0x2a, 0x52, 0xd7, 0x64, 0xb2, 0xb0, 0x8d,
- 0x06, 0x5e, 0xca, 0x8c, 0x70, 0x8e, 0x91, 0x75, 0xa4, 0xb2, 0x4f, 0xca,
- 0xa1, 0x90, 0x14, 0x1f, 0x39, 0x4c, 0xc2, 0x8e, 0x34, 0x46, 0x00, 0xbd,
- 0xc4, 0x0c, 0x3c, 0x14, 0x5d, 0xc6, 0xd1, 0x70, 0xcc, 0x3a, 0x82, 0x50,
- 0xb8, 0x7e, 0xf2, 0x37, 0x2e, 0x3a, 0x74, 0xc9, 0xa8, 0xbd, 0x6e, 0x21,
- 0x23, 0x57, 0x95, 0xe9, 0x73, 0xa3, 0x26, 0x95, 0xd3, 0x1b, 0xaa, 0xfd,
- 0x26, 0x51, 0xde, 0xbc, 0xfe, 0xe7, 0x75, 0xa7, 0x9d, 0x73, 0xc9, 0x81,
- 0x78, 0x1e, 0x9f, 0x03, 0x23, 0xd8, 0x7c, 0x2a, 0xa0, 0x47, 0x67, 0x3c,
- 0xd4, 0x7a, 0xb1, 0x71, 0x1f, 0xaa, 0x56, 0x83, 0x54, 0x5f, 0x87, 0xd6,
- 0x37, 0x14, 0xbe, 0xa4, 0xad, 0xf0, 0x59, 0x63, 0xc8, 0x64, 0xf8, 0xf4,
- 0x03, 0x53, 0x8a, 0x0b, 0x40, 0x40, 0xf1, 0x54, 0x29, 0x3f, 0xf5, 0x57,
- 0xcd, 0xf8, 0x03, 0x74, 0x56, 0xfd, 0x50, 0x34, 0xf0, 0x2b, 0x33, 0xb8,
- 0xc2, 0xa4, 0xac, 0xe0, 0x8a, 0x4f, 0x42, 0x32, 0xb6, 0xfb, 0x05, 0xf0,
- 0x69, 0xb2, 0xdc, 0xbd, 0x7a, 0xf1, 0x8a, 0x0e, 0x1e, 0x42, 0x56, 0x24,
- 0x2f, 0x5f, 0x52, 0x19, 0x90, 0x23, 0xd2, 0x1e, 0xf3, 0x20, 0x08, 0x76,
- 0xa4, 0xb6, 0x44, 0x39, 0x18, 0x67, 0x33, 0xae, 0x7b, 0x30, 0xf2, 0x1a,
- 0x19, 0x3e, 0x1a, 0x1b, 0xb2, 0x2a, 0xec, 0x83, 0x19, 0x9d, 0x94, 0xd7,
- 0x31, 0xfb, 0x90, 0xde, 0x48, 0x74, 0x99, 0x9c, 0x06, 0x6e, 0xbc, 0xaf,
- 0xbb, 0xff, 0xc8, 0xe8, 0x84, 0x14, 0x28, 0x84, 0xd0, 0x10, 0x26, 0x39,
- 0xa0, 0x36, 0xfe, 0x75, 0xb3, 0x5d, 0xd8, 0x96, 0x9c, 0x99, 0x79, 0xb1,
- 0xcc, 0x5a, 0xc8, 0x6f, 0xab, 0x9a, 0xbb, 0x04, 0xc3, 0x32, 0x8b, 0xd7,
- 0xcd, 0xd4, 0xe3, 0x12, 0x93, 0x4d, 0xb9, 0x48, 0x52, 0xad, 0x56, 0x2a,
- 0x7b, 0x1f, 0x06, 0x37, 0xa3, 0x34, 0x0f, 0xd2, 0x42, 0xc6, 0x8c, 0x91,
- 0xaf, 0xd7, 0x97, 0x11, 0x39, 0x0a, 0x84, 0x77, 0x08, 0x35, 0x0a, 0xfe,
- 0x05, 0x5c, 0xdc, 0x66, 0xae, 0xe6, 0xc2, 0x8c, 0xb0, 0xa6, 0xbf, 0xb7,
- 0x59, 0x92, 0x20, 0xfc, 0xc8, 0x39, 0xd2, 0x28, 0x36, 0x1c, 0x65, 0x61,
- 0x76, 0x96, 0x99, 0x19, 0x0a, 0x09, 0x53, 0xd6, 0xb9, 0x24, 0xb7, 0x60,
- 0x75, 0xa2, 0x6d, 0x2a, 0xf6, 0x65, 0xc4, 0xad, 0x41, 0xdd, 0x3c, 0xb0,
- 0x52, 0x9f, 0xcd, 0x09, 0x0c, 0x05, 0xa5, 0xa2, 0x11, 0xe7, 0x24, 0x25,
- 0x9c, 0x90, 0x1a, 0x35, 0x08, 0x0b, 0x97, 0x33, 0x19, 0xbc, 0xb5, 0xf6,
- 0x65, 0xd1, 0x01, 0xd4, 0x96, 0x45, 0x99, 0x52, 0x16, 0xb7, 0x89, 0x17,
- 0x87, 0xa7, 0xb4, 0x92, 0xe2, 0x42, 0xe0, 0x9d, 0xeb, 0xab, 0x6a, 0xc1,
- 0xa0, 0x19, 0x49, 0x24, 0x0b, 0xdf, 0x8f, 0x6b, 0xe4, 0x47, 0x95, 0x53,
- 0xd8, 0xd2, 0x8c, 0xfc, 0xee, 0xf1, 0x61, 0x0b, 0x70, 0x89, 0xa3, 0xae,
- 0xc7, 0x0f, 0xf1, 0xe6, 0x1c, 0xdc, 0x13, 0xc5, 0xe2, 0xb8, 0xbb, 0xc4,
- 0x36, 0xe5, 0x24, 0xb8, 0xb1, 0x66, 0x5c, 0xe0, 0xbb, 0x78, 0x73, 0xd2,
- 0x0a, 0x87, 0xf3, 0x70, 0x1b, 0xda, 0x30, 0x48, 0x45, 0x21, 0x6a, 0x89,
- 0x18, 0x08, 0x68, 0x50, 0xbb, 0x09, 0x63, 0xe9, 0xae, 0xe7, 0xe5, 0x94,
- 0xe3, 0x3c, 0x9e, 0x5c, 0x8b, 0x79, 0x39, 0xf5, 0xd8, 0xa6, 0x98, 0x2b,
- 0x6b, 0x1f, 0x0c, 0x12, 0xed, 0x8c, 0x73, 0x1b, 0xee, 0x1b, 0x6f, 0xce,
- 0x4d, 0x15, 0x62, 0x0d, 0x9a, 0xc7, 0x9b, 0xfe, 0x14, 0x8a, 0xa4, 0x9c,
- 0x34, 0xde, 0x0c, 0xe8, 0x81, 0x78, 0x73, 0xe2, 0x79, 0x0e, 0x67, 0x46,
- 0x76, 0x2b, 0x84, 0xa1, 0x3e, 0x3e, 0x33, 0x7e, 0x30, 0xd8, 0x64, 0xf3,
- 0x21, 0x33, 0xf1, 0x60, 0x87, 0x57, 0xcf, 0x2c, 0xb6, 0xc3, 0x18, 0x41,
- 0x77, 0x83, 0x35, 0x46, 0xa1, 0x4a, 0xa2, 0x8c, 0xdc, 0xe1, 0x90, 0xf1,
- 0xea, 0x48, 0x04, 0xee, 0x23, 0x1b, 0x2c, 0xbd, 0x04, 0xab, 0x30, 0x2b,
- 0xa4, 0x1e, 0xc6, 0x47, 0x46, 0x79, 0x20, 0xdc, 0xc9, 0xe6, 0xe3, 0xe3,
- 0x0b, 0x32, 0x2b, 0xb4, 0x46, 0x17, 0xf0, 0x84, 0x2c, 0xb3, 0x90, 0x04,
- 0x8a, 0xb4, 0x5d, 0xbd, 0x4b, 0x50, 0xa2, 0x56, 0x90, 0xbd, 0xeb, 0xcf,
- 0x15, 0x43, 0x5a, 0x94, 0x39, 0x23, 0x4c, 0xdb, 0x18, 0x50, 0x7f, 0x88,
- 0x49, 0xac, 0x68, 0x8e, 0x97, 0xe4, 0x15, 0x4c, 0x71, 0x7e, 0x43, 0x86,
- 0x2a, 0x2b, 0x1a, 0x7c, 0x5c, 0x1d, 0x22, 0x03, 0x3a, 0xe6, 0xc7, 0x1d,
- 0x1d, 0xf3, 0xac, 0x6c, 0xec, 0x97, 0x0d, 0xb6, 0x7f, 0x7a, 0xb7, 0xdb,
- 0x5d, 0xda, 0x33, 0xd9, 0x1d, 0xdf, 0xe2, 0x6e, 0xaa, 0x9d, 0xd3, 0xaf,
- 0xda, 0xb1, 0x5f, 0x02, 0xda, 0x82, 0x74, 0x90, 0xe8, 0xca, 0x8d, 0x5d,
- 0xaa, 0x60, 0xbd, 0x62, 0x29, 0xe2, 0x29, 0x02, 0x41, 0xe7, 0x15, 0x17,
- 0x6d, 0x57, 0x10, 0x7b, 0x6c, 0xc7, 0xea, 0xc5, 0x91, 0xa7, 0xdd, 0x10,
- 0x99, 0xbf, 0xfb, 0x58, 0x75, 0xe1, 0x02, 0xad, 0x66, 0x78, 0xd2, 0x6b,
- 0xe7, 0x40, 0x4c, 0x33, 0xaa, 0x0f, 0x28, 0xa4, 0x40, 0x59, 0x24, 0xdc,
- 0x90, 0xf2, 0xbd, 0xc7, 0x08, 0x69, 0xe5, 0x1a, 0x57, 0xf3, 0x27, 0x0e,
- 0xb9, 0x79, 0xc0, 0xcd, 0x8a, 0x82, 0x48, 0xbd, 0x59, 0x05, 0x27, 0x53,
- 0x8e, 0xf1, 0x8a, 0x95, 0x5f, 0x35, 0x82, 0x16, 0x15, 0x3e, 0x36, 0x12,
- 0x7a, 0x30, 0x36, 0x18, 0xaf, 0xac, 0x20, 0x39, 0x35, 0x1e, 0x3c, 0x4e,
- 0x19, 0x6f, 0x4e, 0x86, 0xeb, 0xde, 0x93, 0xe5, 0xe9, 0x5b, 0xf0, 0x14,
- 0x51, 0xe4, 0x49, 0x7f, 0x0e, 0x69, 0x43, 0x0f, 0xf8, 0x2f, 0x62, 0x10,
- 0xa4, 0xae, 0xcd, 0xbc, 0x43, 0x38, 0xa8, 0x90, 0x65, 0x82, 0xc0, 0xa2,
- 0xd7, 0xf8, 0x27, 0x1a, 0x4e, 0xbf, 0xa5, 0x1a, 0xd6, 0x16, 0x41, 0xd5,
- 0x21, 0xe6, 0x12, 0x5e, 0x44, 0x62, 0x27, 0x04, 0x3f, 0x2c, 0xa1, 0x49,
- 0x1b, 0x14, 0xc5, 0xc6, 0xe1, 0xd3, 0x24, 0x23, 0x50, 0x0a, 0x5f, 0x70,
- 0xa9, 0x9b, 0xb5, 0xd9, 0x94, 0x6a, 0x63, 0x50, 0xd5, 0xb7, 0x8c, 0xaa,
- 0xde, 0x57, 0x6d, 0x4c, 0xe4, 0x25, 0x0d, 0x4e, 0xa4, 0x4f, 0x52, 0x49,
- 0x33, 0x4e, 0x80, 0x92, 0xd7, 0xf5, 0x00, 0x9f, 0x53, 0xbf, 0x75, 0x98,
- 0x24, 0x01, 0x6f, 0xaf, 0x93, 0xe4, 0x09, 0x43, 0x38, 0x58, 0xc0, 0xed,
- 0xc1, 0xf3, 0x57, 0xaf, 0x5a, 0x57, 0x9a, 0xaf, 0x37, 0xbf, 0xd8, 0xde,
- 0x66, 0x64, 0xe5, 0xee, 0x6b, 0xe6, 0x8b, 0xc1, 0x2b, 0xbc, 0xd8, 0x7e,
- 0x8d, 0x51, 0xfd, 0x57, 0xbf, 0x37, 0xa0, 0x6f, 0x22, 0xdd, 0x41, 0xbb,
- 0x5f, 0xf9, 0xd6, 0x2b, 0xea, 0x2e, 0xf2, 0x16, 0x1e, 0xe6, 0x75, 0x2c,
- 0x2f, 0x2f, 0x09, 0x56, 0x94, 0x9e, 0xe4, 0x02, 0xdf, 0x65, 0x75, 0x97,
- 0x56, 0xd3, 0x70, 0xba, 0xdb, 0xfd, 0xc1, 0xce, 0xaa, 0xe9, 0xc2, 0x22,
- 0x40, 0x23, 0xc1, 0x76, 0x92, 0x02, 0x65, 0x84, 0xe7, 0x8d, 0x6f, 0x36,
- 0x63, 0xb3, 0xff, 0x6c, 0x7b, 0xbb, 0xff, 0x92, 0xfe, 0x7d, 0xf5, 0x6a,
- 0xa5, 0xbb, 0xca, 0xf5, 0xf1, 0x4c, 0xa7, 0xd6, 0x1a, 0xad, 0x69, 0x27,
- 0xd2, 0xfa, 0x8e, 0x69, 0x75, 0xe7, 0xd5, 0xab, 0x3e, 0xf5, 0xf2, 0xe2,
- 0x93, 0x5a, 0x6f, 0xee, 0x4a, 0x67, 0x67, 0xa1, 0xd7, 0x1d, 0x39, 0xd6,
- 0x9d, 0x19, 0x90, 0x36, 0x40, 0x0e, 0x51, 0x42, 0x9b, 0x4e, 0x3c, 0x1c,
- 0x29, 0x17, 0xf2, 0xed, 0x57, 0x11, 0x44, 0xd8, 0xc0, 0x02, 0xd8, 0x00,
- 0x50, 0x30, 0x59, 0x61, 0x49, 0x5d, 0xc0, 0x85, 0x9a, 0xf6, 0x5d, 0x4a,
- 0xd6, 0x29, 0xdb, 0xd1, 0xae, 0xf2, 0xc6, 0x21, 0x07, 0xd4, 0xc9, 0x86,
- 0x21, 0x17, 0x46, 0x2c, 0x65, 0x48, 0x64, 0xf1, 0x74, 0xae, 0x23, 0x34,
- 0x90, 0x41, 0xcd, 0xd6, 0x49, 0x99, 0xa0, 0xbc, 0xd6, 0x3c, 0x9b, 0x4d,
- 0xad, 0x0b, 0x50, 0x13, 0x7c, 0xf8, 0xc9, 0x01, 0x3f, 0xc3, 0x07, 0x0d,
- 0x5a, 0xe0, 0xbd, 0x54, 0xc7, 0xa3, 0xc0, 0x8c, 0x4e, 0xaf, 0x89, 0xc5,
- 0xa4, 0x76, 0x39, 0x00, 0x5c, 0x88, 0x06, 0x81, 0x80, 0x6e, 0x9a, 0xeb,
- 0xb5, 0x57, 0x8d, 0x4d, 0xad, 0x4b, 0x7e, 0xbd, 0xea, 0x69, 0xa6, 0x45,
- 0x8e, 0x3a, 0x30, 0x7a, 0xf6, 0x7d, 0x36, 0xe1, 0x2c, 0xab, 0x0e, 0x12,
- 0x10, 0x12, 0xbc, 0x34, 0x9f, 0x9c, 0xd3, 0x3b, 0x49, 0xab, 0xbd, 0x4b,
- 0xab, 0x4c, 0x91, 0x30, 0x8c, 0xb2, 0xad, 0x1c, 0xc0, 0x56, 0x2f, 0x95,
- 0xf4, 0x0a, 0xc1, 0x2b, 0x73, 0xe9, 0x33, 0x5a, 0x8b, 0x8a, 0xfd, 0x9e,
- 0x5a, 0xba, 0x32, 0x95, 0x04, 0x1e, 0x8e, 0x80, 0x6c, 0x45, 0xe2, 0xd3,
- 0x7d, 0x43, 0xcc, 0x43, 0x63, 0x1f, 0xb9, 0x4a, 0xc8, 0x5a, 0x27, 0xfc,
- 0xfe, 0x2a, 0xe3, 0xf0, 0x76, 0x2e, 0xbb, 0xa1, 0x39, 0xc7, 0x6e, 0x16,
- 0x60, 0x47, 0x80, 0xe9, 0xa1, 0xdf, 0x78, 0xf1, 0x5d, 0xc9, 0x2c, 0xb5,
- 0x33, 0xc0, 0xbc, 0xca, 0x35, 0x4c, 0x80, 0x97, 0xd7, 0xda, 0x31, 0xb3,
- 0x57, 0x96, 0x09, 0x9a, 0x4d, 0x4b, 0x36, 0xbc, 0x08, 0x08, 0xd0, 0x96,
- 0xa7, 0x77, 0x6b, 0x75, 0x9b, 0x92, 0xdd, 0xf9, 0x9b, 0x43, 0x1e, 0x00,
- 0x3c, 0x4d, 0xbc, 0x13, 0xc0, 0x33, 0xf4, 0xb7, 0x34, 0xbb, 0x6f, 0x50,
- 0x90, 0x0a, 0x4f, 0xea, 0xbd, 0x34, 0x3a, 0xfe, 0x9f, 0x47, 0xc3, 0xdf,
- 0x22, 0x4e, 0xb7, 0x63, 0x69, 0x3c, 0xf7, 0x72, 0x12, 0xe9, 0xb5, 0x28,
- 0x84, 0x38, 0x67, 0x99, 0x7a, 0x67, 0xcb, 0xe9, 0xdf, 0x5e, 0xb4, 0x2e,
- 0x68, 0x06, 0x09, 0xb5, 0x16, 0xa5, 0x34, 0x28, 0xad, 0xda, 0xa4, 0xf3,
- 0x45, 0x24, 0x95, 0xb5, 0xaf, 0x00, 0x9f, 0x0a, 0x55, 0x4a, 0x36, 0x0e,
- 0x1b, 0x17, 0x22, 0x81, 0xd0, 0xa1, 0x2c, 0xe2, 0xe5, 0xd8, 0xf2, 0xb6,
- 0x53, 0x5d, 0x56, 0x12, 0x98, 0xb0, 0x00, 0xd4, 0x97, 0x6f, 0x32, 0xa6,
- 0x9b, 0xd8, 0xe8, 0xa4, 0x78, 0x3c, 0x9a, 0x04, 0xcf, 0x98, 0x37, 0x7e,
- 0xe6, 0xa0, 0x15, 0x87, 0x78, 0x7e, 0xb3, 0x4c, 0xe1, 0x39, 0xe0, 0x67,
- 0xf1, 0x2b, 0x10, 0x45, 0xb2, 0x0f, 0x6a, 0x73, 0xe1, 0x57, 0x9c, 0xde,
- 0xc7, 0x5d, 0x03, 0x49, 0x8f, 0x15, 0x08, 0x46, 0xe5, 0xab, 0x1d, 0xde,
- 0x2a, 0x20, 0xa7, 0xb4, 0xb4, 0x21, 0x3f, 0x1e, 0xd4, 0xef, 0x26, 0x98,
- 0x09, 0x18, 0x17, 0x08, 0x8b, 0xc0, 0x45, 0x6f, 0xd7, 0x61, 0xb9, 0x93,
- 0xec, 0x6a, 0xea, 0x03, 0xb8, 0xb5, 0x57, 0xe1, 0xce, 0x86, 0xa8, 0xd9,
- 0x02, 0xc8, 0x70, 0x30, 0xd8, 0xc8, 0x89, 0x74, 0x26, 0x56, 0x0b, 0x42,
- 0x22, 0x83, 0xf1, 0xdd, 0xe6, 0xa0, 0xc2, 0x86, 0x16, 0xcc, 0xb4, 0x41,
- 0xe2, 0x9b, 0x57, 0xfa, 0x0b, 0xa9, 0xa6, 0x48, 0x85, 0x82, 0x48, 0xaf,
- 0x67, 0x53, 0x52, 0x2e, 0xc4, 0x34, 0x49, 0xa1, 0xc0, 0x28, 0x7a, 0x18,
- 0xe0, 0x36, 0x98, 0x7e, 0x51, 0xab, 0xbc, 0x6f, 0x56, 0xe2, 0x2e, 0x28,
- 0xb1, 0xd7, 0xf2, 0xae, 0x7a, 0xe9, 0xb4, 0x14, 0xd4, 0xf1, 0x58, 0x66,
- 0x13, 0x1b, 0x30, 0xdb, 0xc1, 0x23, 0x29, 0x67, 0x6e, 0xd2, 0xa2, 0xd2,
- 0xac, 0x6d, 0x16, 0x73, 0x1d, 0xb5, 0xd4, 0x4e, 0xb3, 0x54, 0xe1, 0x20,
- 0xcc, 0xa6, 0x1a, 0x72, 0x0d, 0x53, 0x7a, 0xef, 0xb2, 0x2a, 0x73, 0x00,
- 0xa9, 0x88, 0x9c, 0x32, 0xa7, 0x6f, 0x98, 0x8c, 0x4a, 0xf3, 0x7c, 0xa4,
- 0x04, 0x92, 0x66, 0x33, 0xb4, 0x00, 0x13, 0x31, 0x1c, 0x57, 0xa4, 0x98,
- 0x92, 0x77, 0xd9, 0x00, 0xdc, 0x9e, 0x6f, 0x04, 0x63, 0x89, 0x0c, 0xb5,
- 0xe3, 0xcc, 0xee, 0xaa, 0xc5, 0x16, 0x63, 0x86, 0xd3, 0x1b, 0x18, 0x3a,
- 0x1b, 0xf4, 0x24, 0xb3, 0x94, 0xe0, 0x9f, 0xbc, 0xe6, 0x1e, 0x4b, 0xd3,
- 0xda, 0x79, 0xd5, 0x8e, 0x70, 0xa3, 0x2a, 0x5c, 0x33, 0xc3, 0xcf, 0x5f,
- 0x93, 0x33, 0x0c, 0xbe, 0xb0, 0xbd, 0x15, 0x19, 0x3d, 0x67, 0xea, 0x61,
- 0x49, 0xc9, 0x94, 0x6c, 0xf8, 0xe7, 0xdc, 0xcb, 0xf1, 0xb8, 0x64, 0x71,
- 0xd0, 0x4e, 0x14, 0x19, 0x15, 0x36, 0x4b, 0x65, 0x91, 0xe6, 0xd5, 0x30,
- 0xf0, 0xb0, 0x29, 0x7e, 0x9a, 0x8b, 0xcd, 0xb7, 0x15, 0x88, 0xc1, 0x90,
- 0x34, 0x2e, 0x72, 0xa3, 0xde, 0x74, 0xb5, 0xe8, 0x57, 0xc9, 0xed, 0x76,
- 0x24, 0x0c, 0x6d, 0x26, 0xc8, 0xf1, 0xb0, 0x36, 0xd8, 0x3a, 0x84, 0x8c,
- 0xed, 0x39, 0x7b, 0x48, 0x64, 0xd2, 0x53, 0xaf, 0xf8, 0x41, 0x80, 0xc8,
- 0x22, 0x3e, 0x14, 0xca, 0x72, 0xa7, 0xd3, 0x4f, 0xc7, 0xca, 0xcc, 0xaf,
- 0xe4, 0xe4, 0xc3, 0xad, 0xac, 0x99, 0x6c, 0x31, 0xd0, 0x51, 0x02, 0x0a,
- 0x2f, 0x52, 0x4e, 0x38, 0x52, 0xed, 0x20, 0x28, 0xba, 0xde, 0x31, 0x8d,
- 0x93, 0x83, 0x87, 0xf9, 0x87, 0xef, 0x3b, 0x74, 0xf9, 0x39, 0x5e, 0x62,
- 0x75, 0xc4, 0x40, 0xab, 0x91, 0xf4, 0x76, 0xb9, 0xad, 0xdf, 0x4d, 0xb1,
- 0x84, 0xda, 0x85, 0x62, 0xe8, 0x05, 0x86, 0x4f, 0xe4, 0xa4, 0x84, 0x58,
- 0x01, 0xaf, 0x22, 0xf3, 0xae, 0x1d, 0x1b, 0xf9, 0xd5, 0x86, 0x71, 0xb1,
- 0x90, 0x76, 0xb2, 0x6c, 0x32, 0x8e, 0x20, 0x12, 0x69, 0x2e, 0x83, 0xe0,
- 0x28, 0x2e, 0xcd, 0xd5, 0x07, 0x66, 0xca, 0xa7, 0xc7, 0xf9, 0xb8, 0x44,
- 0x73, 0x4e, 0x55, 0x4c, 0xf8, 0x23, 0x6e, 0x59, 0xcc, 0xa3, 0xe1, 0xc6,
- 0xc9, 0xd6, 0x3e, 0x1e, 0xca, 0xb2, 0x33, 0x7c, 0xd6, 0x3e, 0x03, 0xa4,
- 0x12, 0xc6, 0xea, 0x1f, 0x1c, 0x73, 0x85, 0x1c, 0x70, 0x43, 0x2e, 0xda,
- 0x80, 0x60, 0x25, 0xe2, 0xf7, 0x6c, 0x64, 0xc8, 0x24, 0x70, 0x85, 0x83,
- 0x1a, 0xb0, 0x66, 0xb4, 0x4e, 0x5c, 0x29, 0x22, 0x08, 0xc4, 0x70, 0xde,
- 0x23, 0x85, 0x77, 0xe5, 0xae, 0x71, 0x1d, 0x3b, 0x8d, 0x88, 0x67, 0x2d,
- 0x96, 0x63, 0xe2, 0x64, 0x88, 0x7d, 0x59, 0x2e, 0x86, 0x61, 0x75, 0x86,
- 0xc6, 0x15, 0x7c, 0x94, 0xf7, 0x4d, 0xf7, 0xdb, 0x7e, 0x42, 0x1c, 0x84,
- 0x36, 0x89, 0x2c, 0xad, 0xbd, 0xe2, 0x6a, 0xe1, 0xbe, 0x09, 0x27, 0x25,
- 0xff, 0x95, 0x9d, 0x2f, 0x4f, 0x97, 0x33, 0x59, 0x18, 0xe5, 0x6a, 0xcf,
- 0x2c, 0x88, 0xd4, 0xde, 0xea, 0x73, 0x5e, 0x1a, 0xc4, 0xa0, 0xe7, 0xf7,
- 0xf7, 0xe1, 0x4e, 0xb8, 0xea, 0xda, 0xc4, 0xa7, 0xd4, 0x51, 0xfc, 0xe2,
- 0xfe, 0xbe, 0xfd, 0xe5, 0x63, 0x45, 0x93, 0x61, 0x93, 0xe3, 0xfa, 0x50,
- 0xa5, 0xac, 0x56, 0x1a, 0x59, 0x47, 0x56, 0x94, 0xee, 0x52, 0x04, 0x53,
- 0x86, 0xbe, 0x20, 0x68, 0x7f, 0xe2, 0x2d, 0x77, 0x77, 0x04, 0x01, 0x33,
- 0x5d, 0x9b, 0x13, 0xc9, 0x15, 0x24, 0x84, 0xe2, 0xa5, 0x41, 0xb3, 0x6e,
- 0x4b, 0xcd, 0x79, 0xea, 0x06, 0x29, 0xa4, 0xb9, 0x2c, 0x7b, 0x8e, 0x6a,
- 0xc4, 0x4d, 0x3e, 0xa3, 0xd7, 0x50, 0x30, 0xcf, 0xb4, 0xb0, 0x63, 0x96,
- 0x3f, 0x2f, 0x96, 0x4d, 0xa6, 0x20, 0x68, 0xe8, 0x53, 0xcf, 0x63, 0x6c,
- 0xd9, 0x67, 0x30, 0xf2, 0xab, 0x5f, 0x1f, 0x95, 0x11, 0x3d, 0x94, 0x10,
- 0x8c, 0x4b, 0x20, 0xf9, 0x34, 0x9e, 0x99, 0x49, 0x76, 0x80, 0x57, 0x63,
- 0x87, 0xd9, 0x5e, 0x42, 0x12, 0xcf, 0x9a, 0xdd, 0x9b, 0xd5, 0xe6, 0xc0,
- 0xbf, 0x04, 0x79, 0x8c, 0x46, 0xd3, 0x23, 0xce, 0x75, 0x55, 0x56, 0x66,
- 0x53, 0xe7, 0x43, 0x0f, 0xe9, 0x25, 0x08, 0x1a, 0xe0, 0xae, 0x6c, 0x21,
- 0x3d, 0xb3, 0x0d, 0xae, 0x76, 0x76, 0x53, 0x36, 0x22, 0xa4, 0xda, 0xe2,
- 0x1f, 0x72, 0x17, 0xe8, 0xb8, 0x1f, 0xbb, 0x8a, 0x76, 0xfd, 0x63, 0xf8,
- 0xdb, 0x67, 0x00, 0x79, 0x6b, 0xf4, 0x48, 0xf9, 0x3f, 0x97, 0x98, 0x57,
- 0xcf, 0xb2, 0x6c, 0xa1, 0x2b, 0x26, 0x55, 0xc1, 0xe5, 0x34, 0xea, 0x61,
- 0x84, 0x14, 0xc0, 0x54, 0x88, 0x63, 0xbf, 0xea, 0x80, 0xe3, 0xf6, 0x26,
- 0xbf, 0x93, 0x66, 0x85, 0x47, 0xb9, 0x08, 0x20, 0xc8, 0xad, 0x30, 0xb3,
- 0xfa, 0x44, 0xba, 0x2d, 0xc3, 0x58, 0xec, 0xb6, 0x59, 0xa2, 0x91, 0xc5,
- 0xde, 0xec, 0xc6, 0xc5, 0xaf, 0x45, 0xa2, 0x5f, 0x21, 0x0e, 0xc2, 0x4e,
- 0x78, 0x05, 0xb9, 0x47, 0xb8, 0x1f, 0xf2, 0x0e, 0xb9, 0xee, 0x2a, 0x22,
- 0x07, 0xbc, 0xa2, 0x9b, 0xbc, 0x82, 0x21, 0xab, 0x45, 0x18, 0x78, 0x0b,
- 0x2c, 0xc0, 0x65, 0xe0, 0xfa, 0x92, 0x99, 0x3f, 0x78, 0x1f, 0x4a, 0x2e,
- 0x28, 0x4e, 0xf8, 0xcf, 0x21, 0x88, 0x27, 0x4b, 0x42, 0x5e, 0xc8, 0xb1,
- 0xe3, 0xeb, 0x47, 0x98, 0x3d, 0x8a, 0xc3, 0x28, 0x4b, 0xf6, 0x51, 0xbb,
- 0xec, 0x96, 0xab, 0x02, 0x15, 0x98, 0xc1, 0x84, 0xb3, 0xe8, 0xa8, 0x00,
- 0xfe, 0x92, 0xd2, 0x34, 0x08, 0x9c, 0x61, 0x83, 0xd0, 0xc5, 0x64, 0x68,
- 0x9b, 0xf4, 0xf1, 0xac, 0xa4, 0xb0, 0xdd, 0xda, 0x2a, 0x5e, 0x55, 0x80,
- 0xa6, 0x02, 0x98, 0x7b, 0xe6, 0x36, 0x53, 0xbf, 0xc4, 0x95, 0x54, 0xb8,
- 0x7a, 0x5f, 0x52, 0x66, 0xb3, 0xad, 0x5f, 0x61, 0xdb, 0x91, 0x37, 0x43,
- 0x30, 0x7b, 0xb4, 0xe3, 0x95, 0xc6, 0xe9, 0xb7, 0x41, 0x38, 0x64, 0xd8,
- 0x48, 0x59, 0x87, 0x27, 0xf7, 0x5a, 0x50, 0xa8, 0xe9, 0x8a, 0x8b, 0x14,
- 0xac, 0x04, 0x53, 0x26, 0xbf, 0x25, 0x82, 0x1e, 0x68, 0x3a, 0x91, 0x72,
- 0x5c, 0xd8, 0x00, 0xd3, 0x46, 0x5e, 0x4e, 0x11, 0x2e, 0x21, 0x35, 0x79,
- 0x82, 0x52, 0xb1, 0x82, 0xfe, 0x24, 0x83, 0x59, 0x47, 0xea, 0x3c, 0x97,
- 0x23, 0x42, 0x13, 0x7d, 0x81, 0x86, 0x6b, 0xd5, 0xfa, 0x1c, 0x26, 0xb6,
- 0x62, 0x4f, 0x1c, 0xcb, 0xd6, 0xb0, 0x30, 0xd0, 0xae, 0x54, 0x84, 0xd7,
- 0x4a, 0x92, 0x96, 0xd5, 0xfe, 0x13, 0x99, 0x54, 0x8d, 0xea, 0xc6, 0xf9,
- 0x2c, 0x8c, 0xbf, 0x1f, 0xe5, 0x33, 0xd1, 0xc5, 0xfe, 0xbe, 0xcc, 0xa9,
- 0x0c, 0x13, 0x52, 0xd9, 0x0f, 0x4b, 0xda, 0xfc, 0x5a, 0xc2, 0x78, 0xaf,
- 0x20, 0x85, 0x71, 0x04, 0x11, 0x34, 0x01, 0xe1, 0x2b, 0xa6, 0xfb, 0x40,
- 0x85, 0x25, 0xfc, 0xdb, 0x61, 0x62, 0xeb, 0x52, 0x00, 0x8e, 0x7c, 0x6e,
- 0x6e, 0xa9, 0xa1, 0x45, 0xd5, 0x36, 0x3c, 0x21, 0x02, 0x38, 0x0f, 0xa4,
- 0x8f, 0xfa, 0x26, 0x94, 0x40, 0xfb, 0xad, 0x60, 0x72, 0x38, 0xed, 0xc5,
- 0x0d, 0xd1, 0x50, 0x7e, 0x82, 0xd1, 0xfc, 0xb6, 0x18, 0x7c, 0x4b, 0x0b,
- 0x77, 0x53, 0x4b, 0x1a, 0xa7, 0xdc, 0x25, 0x9b, 0x56, 0x98, 0x5e, 0x9d,
- 0xd6, 0xb3, 0x41, 0xde, 0x25, 0x7c, 0x46, 0x96, 0x74, 0x01, 0x3a, 0x5e,
- 0xb9, 0x11, 0x4a, 0x45, 0x1a, 0xed, 0x13, 0x34, 0x6c, 0x80, 0x37, 0xf9,
- 0x08, 0xbb, 0x79, 0xb6, 0xd3, 0x52, 0x85, 0x46, 0xd8, 0x0a, 0xb3, 0xb2,
- 0x03, 0xac, 0x62, 0x1c, 0xf3, 0x59, 0xf9, 0xf9, 0x80, 0xab, 0x80, 0x3b,
- 0x31, 0x0b, 0x5b, 0x02, 0x71, 0xc8, 0xed, 0x41, 0x0d, 0x90, 0x46, 0xb2,
- 0x85, 0x04, 0xc5, 0xc0, 0x11, 0xbf, 0xd0, 0x9a, 0x73, 0x3d, 0xe3, 0x60,
- 0x29, 0xa9, 0xab, 0xd9, 0xd7, 0x2a, 0x9b, 0x0c, 0x82, 0x74, 0x51, 0x3d,
- 0x68, 0x90, 0x1e, 0xa5, 0xd6, 0x5e, 0x9c, 0x8c, 0xfc, 0x24, 0x70, 0x31,
- 0x1f, 0x84, 0x9c, 0x87, 0x92, 0xd0, 0x58, 0x7e, 0x86, 0x25, 0x12, 0xd5,
- 0x7d, 0xfd, 0x37, 0x6c, 0x7d, 0x5f, 0xb6, 0xab, 0x6a, 0x0d, 0x0d, 0x31,
- 0x9b, 0x75, 0x29, 0x92, 0x3b, 0x1e, 0x26, 0x9e, 0x91, 0x82, 0x53, 0xbf,
- 0xcd, 0xe0, 0x07, 0x9a, 0x8b, 0x4e, 0x2c, 0x02, 0xd3, 0x31, 0x3c, 0xed,
- 0xef, 0xac, 0x3b, 0xb3, 0x0a, 0x30, 0x08, 0xac, 0x20, 0x4d, 0x42, 0x08,
- 0x9b, 0x33, 0xb8, 0xb4, 0xb3, 0x62, 0x52, 0x3d, 0xb4, 0x40, 0xc1, 0xa7,
- 0x9f, 0x50, 0x7e, 0xce, 0xbf, 0xee, 0x08, 0x2a, 0x94, 0x58, 0x12, 0xa1,
- 0x63, 0x4b, 0x4d, 0x42, 0xf3, 0x89, 0x1d, 0xa0, 0x36, 0x06, 0x62, 0x31,
- 0xe7, 0x7a, 0x07, 0x45, 0x3f, 0xbb, 0xcd, 0xf9, 0x25, 0xc5, 0x19, 0x44,
- 0x0d, 0x81, 0x32, 0x7c, 0x34, 0xac, 0x6e, 0x32, 0x5e, 0x36, 0x1e, 0x32,
- 0x21, 0xb9, 0x99, 0xd8, 0xab, 0xd1, 0xdd, 0xe4, 0x25, 0xcc, 0xa2, 0x92,
- 0x47, 0xd7, 0xd9, 0x6d, 0x2c, 0x4f, 0x24, 0x58, 0x4e, 0xc1, 0xaf, 0xfc,
- 0xdd, 0x37, 0x3b, 0xc9, 0x69, 0x73, 0x76, 0xf3, 0x35, 0xf3, 0xa2, 0x55,
- 0x98, 0x3b, 0x98, 0x0e, 0x9f, 0xc3, 0xc6, 0xa5, 0xf4, 0x7d, 0xd2, 0xb6,
- 0xdb, 0x8d, 0xfe, 0xe4, 0x3a, 0x99, 0x2b, 0x76, 0xc3, 0x6d, 0x87, 0xec,
- 0x07, 0xa2, 0x9d, 0x1c, 0xc9, 0x80, 0x40, 0x92, 0x8d, 0x74, 0x1a, 0x47,
- 0xc4, 0x41, 0xd5, 0xed, 0x17, 0x5c, 0x65, 0x25, 0x6d, 0x5a, 0x08, 0xc8,
- 0xb4, 0x29, 0xbc, 0x27, 0x8f, 0x6c, 0x49, 0x08, 0xe1, 0x9b, 0x3e, 0xb1,
- 0x25, 0x10, 0x61, 0x09, 0x98, 0x2c, 0x88, 0x5d, 0x67, 0x83, 0xa2, 0x3f,
- 0xc1, 0xa6, 0x15, 0xf2, 0x4f, 0xf7, 0x08, 0x6a, 0x86, 0xa4, 0x48, 0x26,
- 0xf0, 0x2b, 0x69, 0x13, 0x36, 0xdc, 0x5d, 0x38, 0x16, 0x5a, 0x7f, 0xd3,
- 0x28, 0x17, 0x50, 0x33, 0xab, 0xed, 0x87, 0xcf, 0xd6, 0x8e, 0x7e, 0xbf,
- 0x3a, 0xda, 0x1f, 0x5d, 0x0c, 0xbb, 0x57, 0x4e, 0x90, 0xdc, 0x42, 0xdb,
- 0xe7, 0x10, 0x04, 0xc9, 0xaa, 0x48, 0x45, 0x5a, 0x2b, 0x8b, 0xe2, 0x86,
- 0xc1, 0xf1, 0xd8, 0x6a, 0xbb, 0x1b, 0x64, 0xab, 0x8c, 0xc1, 0xe9, 0x40,
- 0x44, 0x84, 0xc3, 0x73, 0x9c, 0xcf, 0x30, 0x05, 0x33, 0x30, 0xc3, 0x7b,
- 0xe7, 0xb5, 0x84, 0xf4, 0x51, 0xbd, 0xf5, 0xa4, 0x9c, 0x91, 0x59, 0x24,
- 0x02, 0xac, 0x1d, 0x14, 0xaf, 0xdc, 0x3f, 0x7f, 0x7f, 0xfc, 0xfe, 0xeb,
- 0xbd, 0xd6, 0x9d, 0x39, 0x2b, 0xcb, 0x3a, 0x13, 0x1f, 0x3d, 0xa3, 0x90,
- 0xf3, 0x72, 0xb1, 0xfd, 0xd8, 0x42, 0x40, 0x44, 0x2e, 0x71, 0x82, 0xda,
- 0xd3, 0x5b, 0x89, 0x4d, 0x73, 0x52, 0xe8, 0x84, 0x24, 0x9e, 0xe1, 0xe3,
- 0x55, 0x67, 0xeb, 0x72, 0x72, 0x53, 0x3f, 0x67, 0x63, 0xd7, 0x23, 0x91,
- 0xdf, 0xed, 0xba, 0xd5, 0xa3, 0xd3, 0x83, 0x6f, 0x47, 0xcf, 0x9f, 0x0c,
- 0xf9, 0xe6, 0x37, 0xc2, 0xa4, 0xc9, 0x27, 0x82, 0xbe, 0x1f, 0x29, 0x33,
- 0x1f, 0x39, 0x56, 0xae, 0x9c, 0x06, 0xd9, 0x42, 0xc8, 0xcc, 0x95, 0x97,
- 0x4b, 0x0b, 0xe7, 0xee, 0x41, 0x27, 0xf5, 0xf9, 0xb0, 0x11, 0xb4, 0x55,
- 0xa4, 0x66, 0x9e, 0xd6, 0xda, 0xf0, 0xaa, 0x6b, 0x04, 0xd1, 0x71, 0x04,
- 0x0a, 0xc1, 0xc6, 0x92, 0xcf, 0xfa, 0x5d, 0x71, 0xc7, 0x70, 0x0a, 0x23,
- 0xff, 0xcd, 0x96, 0xd4, 0x37, 0xd0, 0x23, 0xac, 0x09, 0x6f, 0x55, 0xc9,
- 0x51, 0x59, 0x79, 0x8d, 0x26, 0xa7, 0x2b, 0xd4, 0x0d, 0x56, 0x36, 0x3b,
- 0x95, 0xa7, 0xf6, 0xb6, 0xb6, 0x9c, 0x45, 0x8b, 0x63, 0x0b, 0x87, 0xbf,
- 0x9f, 0x56, 0xc0, 0x7d, 0xa6, 0xbf, 0x8a, 0x28, 0xd2, 0x4f, 0xa3, 0x8a,
- 0x40, 0x4a, 0xfe, 0x85, 0x54, 0xf1, 0xf9, 0x2a, 0x66, 0x1b, 0x29, 0xb3,
- 0xf2, 0x24, 0x5d, 0x48, 0xcd, 0x95, 0xff, 0x46, 0x54, 0x91, 0x26, 0x9f,
- 0x46, 0x17, 0x69, 0x97, 0x30, 0x22, 0x19, 0xca, 0xbf, 0x27, 0xc2, 0x21,
- 0x46, 0xf1, 0x62, 0x60, 0xb1, 0xda, 0x7f, 0x05, 0xc5, 0xbc, 0x90, 0x99,
- 0x6e, 0xc0, 0x08, 0x2c, 0x0e, 0x4e, 0xc5, 0x11, 0x54, 0x5b, 0xfc, 0x0a,
- 0xc0, 0x78, 0x96, 0x48, 0x36, 0xf5, 0x32, 0x58, 0xcd, 0x83, 0x22, 0xd4,
- 0x15, 0x84, 0x33, 0xff, 0x72, 0x5a, 0xfb, 0x3f, 0x82, 0x03, 0xbd, 0x70,
- 0x48, 0xfb, 0x9f, 0x42, 0x72, 0x2f, 0xae, 0x2d, 0xc9, 0xc5, 0x4a, 0x50,
- 0x2a, 0x6f, 0xfa, 0xad, 0x49, 0xae, 0x23, 0x7b, 0x04, 0x72, 0x95, 0xae,
- 0x3a, 0x80, 0x0e, 0x2a, 0xa3, 0x61, 0xd3, 0x2f, 0x1e, 0x96, 0x3b, 0x3b,
- 0x41, 0x34, 0xe1, 0x24, 0xb0, 0xe8, 0x61, 0x6a, 0x36, 0xb3, 0xd7, 0x73,
- 0x35, 0x30, 0x36, 0x92, 0x19, 0x41, 0x70, 0x67, 0xbe, 0x78, 0x92, 0xd8,
- 0x83, 0x6c, 0x29, 0xa1, 0x77, 0x25, 0xee, 0x01, 0x97, 0x1b, 0x50, 0x1a,
- 0xb7, 0x8e, 0x8a, 0x48, 0x4c, 0x21, 0x9c, 0xc1, 0xb3, 0xa7, 0xef, 0x5a,
- 0x9f, 0xce, 0x2d, 0x1b, 0x4d, 0x02, 0xd8, 0xc8, 0xc7, 0x12, 0xac, 0xfe,
- 0x4f, 0xe1, 0xa1, 0x2f, 0x3e, 0x8d, 0x9c, 0xff, 0x19, 0x37, 0xeb, 0x7f,
- 0x23, 0xe2, 0x8d, 0x6d, 0xf3, 0x86, 0x20, 0x65, 0xb1, 0x72, 0xc8, 0x17,
- 0xcb, 0x26, 0xe3, 0x9e, 0x58, 0x21, 0x1e, 0xab, 0x78, 0x7c, 0xf6, 0xdd,
- 0x4b, 0x04, 0xbf, 0x8d, 0x42, 0xa0, 0xf7, 0x93, 0xc3, 0xfd, 0xb3, 0xc8,
- 0xcd, 0x70, 0x65, 0x54, 0xfe, 0x45, 0x3e, 0x20, 0xb5, 0x8a, 0x4c, 0x70,
- 0xaf, 0xe5, 0x17, 0x22, 0xf1, 0x98, 0x91, 0x51, 0x0d, 0xa4, 0xfa, 0x3c,
- 0x23, 0x49, 0xb3, 0xc7, 0x18, 0xb3, 0x14, 0xfd, 0x8c, 0x0c, 0x90, 0x93,
- 0xf9, 0x74, 0x8b, 0xff, 0x1c, 0x5c, 0xfe, 0x7d, 0x1a, 0xaa, 0x7a, 0x3e,
- 0x4a, 0x73, 0x2b, 0x33, 0x4e, 0xa0, 0xaf, 0xf3, 0x66, 0x55, 0x41, 0xe0,
- 0x7a, 0xcf, 0x3f, 0xe6, 0x89, 0xa4, 0x7a, 0x42, 0xf7, 0x5d, 0x35, 0x31,
- 0x0c, 0x2f, 0xc0, 0xe2, 0x87, 0xef, 0x12, 0x10, 0xf8, 0xf4, 0xed, 0x96,
- 0xd7, 0x90, 0x6d, 0xfd, 0xb1, 0xc6, 0x23, 0x09, 0x3c, 0xae, 0xaf, 0x2d,
- 0x02, 0x7c, 0x93, 0x17, 0xb9, 0x23, 0x56, 0x6b, 0x82, 0x2f, 0x2f, 0x81,
- 0xf7, 0x5a, 0x67, 0x75, 0x50, 0x13, 0x23, 0x93, 0x74, 0x26, 0x6f, 0x0c,
- 0x76, 0xd7, 0xb9, 0x80, 0x8a, 0x80, 0x93, 0x15, 0x93, 0x7c, 0x91, 0xce,
- 0x24, 0xcd, 0xf0, 0xd1, 0x4a, 0x3e, 0xdd, 0x42, 0x28, 0xed, 0x09, 0x19,
- 0x65, 0xbb, 0x5b, 0x5c, 0x8c, 0xc8, 0xdf, 0xc3, 0xaf, 0xd5, 0x02, 0x67,
- 0x9a, 0xcb, 0x8b, 0xdd, 0xc3, 0x01, 0x15, 0x3d, 0x1d, 0xb1, 0xfb, 0xc4,
- 0xf2, 0xf0, 0x40, 0x98, 0x94, 0x44, 0x46, 0x12, 0xca, 0x1e, 0xda, 0x79,
- 0xf5, 0x72, 0x27, 0xa9, 0xd3, 0x07, 0x60, 0x75, 0xd4, 0xf2, 0xf2, 0xf3,
- 0xe1, 0xb3, 0xad, 0xe7, 0xc3, 0xe7, 0x89, 0xab, 0x73, 0x8a, 0x84, 0x1f,
- 0x69, 0xde, 0xb0, 0xce, 0x00, 0xa3, 0xa1, 0x11, 0x2e, 0xfe, 0xfe, 0xe8,
- 0x80, 0xa4, 0x11, 0xcd, 0x39, 0xed, 0x28, 0x78, 0x09, 0xaf, 0x1b, 0x2d,
- 0x9c, 0xd6, 0xe9, 0x89, 0x29, 0xa5, 0x91, 0xe5, 0x50, 0xd2, 0x44, 0xf0,
- 0x7e, 0x61, 0x07, 0x42, 0xbc, 0x92, 0xa9, 0x54, 0xd6, 0x25, 0x0a, 0x48,
- 0xe1, 0x2f, 0x89, 0xb7, 0x60, 0xc3, 0xc7, 0x6b, 0xd3, 0xd4, 0x8d, 0xd1,
- 0x52, 0xab, 0x78, 0x94, 0xd0, 0xb9, 0x18, 0x23, 0x39, 0xe0, 0x82, 0xaa,
- 0x2f, 0xb3, 0xfb, 0x56, 0xde, 0x11, 0x6b, 0x66, 0x3b, 0xa7, 0x42, 0x23,
- 0x60, 0x22, 0x75, 0x17, 0x5b, 0xd9, 0x0c, 0x52, 0x6e, 0x06, 0x75, 0x6a,
- 0xd7, 0x07, 0xeb, 0x7a, 0x4d, 0x69, 0xfc, 0x0c, 0x75, 0xd6, 0xb0, 0xc5,
- 0xb4, 0x5b, 0xa1, 0xe0, 0x37, 0x97, 0x5b, 0x1b, 0xba, 0x0d, 0x9a, 0x6c,
- 0x56, 0x64, 0x8d, 0x14, 0x3f, 0x4c, 0x5e, 0x9f, 0x9e, 0x5d, 0xbc, 0xb9,
- 0x4d, 0x67, 0x41, 0x8c, 0x07, 0x61, 0xfa, 0x69, 0xa9, 0x48, 0x6b, 0xcd,
- 0xa5, 0x37, 0xbd, 0xdc, 0xa8, 0x91, 0x4d, 0x12, 0xf2, 0x8a, 0x4a, 0x06,
- 0xb9, 0x40, 0x17, 0x17, 0x7f, 0x3d, 0x3b, 0x7a, 0xf3, 0x9a, 0x6c, 0xc1,
- 0x5f, 0x90, 0x3d, 0xbe, 0x6e, 0x99, 0x86, 0xa9, 0x28, 0x71, 0x78, 0x33,
- 0xfe, 0x70, 0x78, 0x3c, 0x3a, 0x3b, 0x39, 0x3d, 0x78, 0xf3, 0xfa, 0x07,
- 0xf2, 0x60, 0x9a, 0xd5, 0x7b, 0xf0, 0xde, 0xb5, 0x9f, 0xd9, 0x7c, 0x87,
- 0xb0, 0x14, 0xdb, 0xd1, 0xf7, 0x1f, 0x8f, 0xde, 0x7f, 0xf7, 0xe6, 0xf5,
- 0x6d, 0x5a, 0xf5, 0x69, 0x7e, 0xfc, 0x36, 0x01, 0x41, 0x44, 0x6a, 0xf4,
- 0x7a, 0x6b, 0x74, 0x41, 0x6b, 0xb4, 0x5c, 0x50, 0xe8, 0xe0, 0x23, 0x61,
- 0x65, 0xe0, 0xb2, 0xae, 0xf6, 0x59, 0x9b, 0x3a, 0xbc, 0x10, 0x36, 0x4d,
- 0xf0, 0xd2, 0xa2, 0x0c, 0x1f, 0xce, 0x4f, 0x20, 0xb5, 0x47, 0x8b, 0x95,
- 0x71, 0x7d, 0x00, 0x57, 0x1e, 0x42, 0x6c, 0x43, 0xae, 0x61, 0x94, 0x62,
- 0x38, 0xb0, 0xc9, 0x6d, 0x02, 0x60, 0xf9, 0x68, 0x0c, 0x1d, 0xf3, 0x2e,
- 0x04, 0xd3, 0xda, 0x72, 0xa6, 0x88, 0x1e, 0xe2, 0x4a, 0x5c, 0x66, 0x0a,
- 0x39, 0x32, 0xe8, 0xb7, 0x34, 0xe7, 0x77, 0x16, 0x9a, 0xbc, 0xbc, 0x98,
- 0x79, 0xb8, 0xde, 0x05, 0x16, 0xaa, 0xe4, 0x6a, 0x74, 0x18, 0x8f, 0x22,
- 0x10, 0xb7, 0x67, 0x21, 0xa0, 0x52, 0xf1, 0x0a, 0x0a, 0xb3, 0x19, 0xa0,
- 0xb5, 0x6f, 0xec, 0xb8, 0x2a, 0xa6, 0xdf, 0x76, 0xf2, 0x83, 0xe6, 0xa6,
- 0x79, 0x81, 0x85, 0x91, 0xf4, 0xb8, 0x36, 0xdc, 0x26, 0x87, 0x33, 0x92,
- 0x48, 0x49, 0xa9, 0x7b, 0x66, 0xac, 0x2e, 0x6c, 0x98, 0x37, 0xd6, 0x81,
- 0x35, 0x87, 0xbe, 0x4c, 0x54, 0x08, 0xb7, 0x67, 0x4e, 0x0f, 0x5b, 0x69,
- 0x41, 0xaa, 0x37, 0x46, 0x9b, 0x36, 0xdb, 0x91, 0x5a, 0x3c, 0xfb, 0xe0,
- 0xf0, 0x4b, 0x23, 0xb9, 0xf1, 0xc1, 0x21, 0xec, 0x0a, 0xca, 0x6e, 0xa1,
- 0x7a, 0x83, 0x1e, 0x15, 0x3a, 0x11, 0x4f, 0x17, 0xca, 0x9c, 0xa8, 0xa5,
- 0xdf, 0x70, 0x06, 0xaa, 0x72, 0xed, 0x52, 0xe9, 0xd3, 0x68, 0xa9, 0x0e,
- 0x4e, 0xf5, 0x4a, 0xf6, 0x25, 0x0e, 0x29, 0x6b, 0xd5, 0xe2, 0xe0, 0x3e,
- 0x86, 0xbd, 0xa4, 0x55, 0x4d, 0x85, 0x3d, 0x6f, 0x9b, 0x41, 0x52, 0xdf,
- 0x03, 0x5f, 0x11, 0x9e, 0x14, 0x6f, 0x03, 0xfe, 0x4c, 0xf7, 0x34, 0xd4,
- 0xce, 0xd0, 0xe0, 0x56, 0x18, 0x1b, 0xca, 0x8b, 0x54, 0xf4, 0x00, 0xa7,
- 0x06, 0x0a, 0x37, 0xd7, 0x9c, 0xa6, 0xec, 0x74, 0x84, 0x2f, 0xd8, 0x14,
- 0x02, 0x76, 0x35, 0x89, 0x47, 0x51, 0xda, 0x84, 0x30, 0x1f, 0x83, 0x10,
- 0xe2, 0x4d, 0x8c, 0x2c, 0xea, 0x5f, 0x3b, 0x02, 0x32, 0xb1, 0xc2, 0xc1,
- 0x85, 0x8b, 0xda, 0xa3, 0xa0, 0xbb, 0x48, 0x7e, 0xbd, 0x14, 0x7b, 0x1b,
- 0x5c, 0x04, 0xe8, 0x64, 0xf4, 0x02, 0x85, 0xac, 0x79, 0xa1, 0xec, 0x88,
- 0x10, 0xa5, 0xb9, 0x33, 0x25, 0x49, 0xce, 0x0d, 0x84, 0x8a, 0xa1, 0x84,
- 0xcf, 0x92, 0x3b, 0x64, 0x45, 0x5e, 0x73, 0x9d, 0xf4, 0xae, 0x66, 0xe5,
- 0x78, 0x6c, 0x26, 0xd5, 0xd3, 0x3b, 0xce, 0x8c, 0x30, 0xad, 0xae, 0x20,
- 0xf4, 0xf6, 0x15, 0xbf, 0xce, 0x1d, 0x56, 0x94, 0x54, 0x42, 0x5f, 0xab,
- 0x72, 0x73, 0x69, 0x77, 0xc5, 0xb5, 0x23, 0xbb, 0x8a, 0x62, 0x47, 0x0f,
- 0x5e, 0x21, 0x46, 0x8e, 0xc4, 0xc2, 0xe7, 0x89, 0xf6, 0x1f, 0x84, 0xf1,
- 0x52, 0x2e, 0xa9, 0x4b, 0xfb, 0x14, 0xe6, 0x03, 0x96, 0x23, 0x65, 0x6e,
- 0xf2, 0x48, 0x9e, 0x27, 0x4d, 0xd8, 0x4c, 0xa0, 0xf7, 0x1f, 0x34, 0x8a,
- 0x9d, 0x3e, 0xfd, 0xdc, 0xfd, 0xaf, 0x9e, 0x56, 0x33, 0xa2, 0xfa, 0x71,
- 0x3c, 0xf8, 0x86, 0x0a, 0xc8, 0xd4, 0x5a, 0x42, 0x29, 0x52, 0x31, 0x89,
- 0xdc, 0x86, 0x2b, 0x5b, 0xcf, 0xe7, 0x57, 0x3f, 0xee, 0x0c, 0x76, 0xb6,
- 0xb7, 0xb7, 0x7f, 0x1e, 0x2e, 0x68, 0xe9, 0x2e, 0xd1, 0xbc, 0xf9, 0x39,
- 0x5c, 0xe4, 0x13, 0x32, 0xe4, 0x9b, 0xcd, 0xcc, 0x53, 0x6a, 0x7a, 0x8b,
- 0xfb, 0xdb, 0xf2, 0x6e, 0xfe, 0x66, 0xb2, 0x18, 0x14, 0x65, 0x2c, 0x44,
- 0xe6, 0x62, 0x59, 0xa1, 0x2c, 0x83, 0xd6, 0x02, 0xfd, 0xf8, 0xfe, 0xf4,
- 0xf0, 0xe8, 0x64, 0xff, 0xaf, 0x1a, 0x63, 0x6b, 0x81, 0x13, 0x68, 0x24,
- 0x1f, 0xb3, 0xb4, 0x7e, 0xf8, 0x58, 0x67, 0x8d, 0xf9, 0x72, 0xe3, 0xd9,
- 0x26, 0x05, 0xa1, 0x05, 0xd5, 0xa0, 0xaf, 0xb2, 0x56, 0x55, 0x7b, 0x89,
- 0x57, 0x72, 0xb7, 0x77, 0x47, 0x46, 0xd9, 0x69, 0x07, 0xbe, 0x36, 0xe4,
- 0x0f, 0x19, 0xcf, 0x6e, 0xea, 0xfc, 0x1f, 0xe6, 0xde, 0x21, 0xa4, 0xbf,
- 0x30, 0x9e, 0xf9, 0x02, 0x08, 0x0a, 0xe4, 0xd6, 0xa6, 0xdf, 0x92, 0xaf,
- 0x4e, 0xbe, 0xa5, 0x30, 0x72, 0xab, 0xd3, 0xcc, 0x39, 0x65, 0x3f, 0xf9,
- 0xe2, 0xc5, 0xce, 0xee, 0xa6, 0x2d, 0x6f, 0xc1, 0xc9, 0x28, 0x74, 0x38,
- 0x03, 0xb7, 0xfa, 0x3f, 0x32, 0xaf, 0xce, 0x00, 0x73, 0x65, 0xe7, 0x61,
- 0x44, 0x68, 0x8b, 0x5e, 0x73, 0xc0, 0xa0, 0x83, 0x27, 0xb8, 0x01, 0xe8,
- 0x1f, 0x25, 0x8a, 0x04, 0xd0, 0x39, 0x17, 0x2e, 0x1b, 0x7c, 0x48, 0x81,
- 0x4a, 0xaa, 0xd9, 0x98, 0xe1, 0x48, 0x7e, 0x49, 0x5c, 0x36, 0xf9, 0xad,
- 0x65, 0x9d, 0x27, 0x3d, 0x55, 0x66, 0xb5, 0x67, 0x35, 0x39, 0x89, 0x49,
- 0xfe, 0x48, 0x5e, 0xeb, 0x6f, 0x5f, 0x84, 0x91, 0x75, 0x09, 0xdc, 0x6c,
- 0x5d, 0x58, 0x24, 0x88, 0x2d, 0xf0, 0x9e, 0x53, 0x48, 0x23, 0x71, 0x5a,
- 0x3e, 0x69, 0x52, 0xb1, 0x5b, 0xcf, 0xd1, 0x8a, 0x0a, 0xbf, 0xc4, 0xda,
- 0x7a, 0xa3, 0xf3, 0xb3, 0x5e, 0x5f, 0x1c, 0x78, 0xa6, 0x8f, 0x81, 0xf9,
- 0xdb, 0x8c, 0x18, 0xe8, 0x9d, 0x2f, 0xb6, 0x5f, 0x3c, 0x17, 0xfb, 0x1e,
- 0x06, 0x8a, 0xd4, 0xd3, 0xb0, 0x02, 0x00, 0xbe, 0xb3, 0xd5, 0x7b, 0x81,
- 0x7d, 0xe1, 0xf2, 0xec, 0x0c, 0xe5, 0xb5, 0x27, 0xc9, 0x16, 0x93, 0xbe,
- 0x42, 0xdc, 0xaf, 0x8c, 0x8a, 0x90, 0x3d, 0x03, 0x4f, 0xc1, 0x20, 0xc3,
- 0x62, 0xdf, 0xcf, 0x3b, 0x0b, 0x69, 0xc7, 0xf0, 0x5a, 0x7f, 0x8b, 0x2d,
- 0xa4, 0x5f, 0x68, 0x58, 0x8a, 0xa4, 0x59, 0x9c, 0x1f, 0x5a, 0xe4, 0x38,
- 0x1e, 0xd8, 0x4a, 0x6f, 0x8a, 0x62, 0x8e, 0x7b, 0x73, 0x1c, 0xaa, 0x83,
- 0x54, 0x70, 0x6d, 0xdc, 0xe2, 0xb9, 0xec, 0x16, 0x4a, 0x3f, 0x1e, 0x3e,
- 0x1e, 0x14, 0xda, 0x9d, 0x1e, 0x5a, 0x78, 0x4d, 0x3f, 0xa3, 0xd3, 0xa2,
- 0x2f, 0x9c, 0xd2, 0xf9, 0xfb, 0x4e, 0x4b, 0xb2, 0x29, 0xda, 0xab, 0x6e,
- 0x27, 0x17, 0xa8, 0xce, 0xcd, 0xd3, 0x7b, 0x77, 0xbb, 0x33, 0xdc, 0x8e,
- 0x3a, 0x39, 0xdf, 0x52, 0x41, 0xb5, 0x36, 0x98, 0x19, 0x4d, 0x47, 0xd1,
- 0x60, 0xc9, 0x4f, 0x09, 0x06, 0x61, 0x75, 0x30, 0x05, 0xaa, 0x5a, 0x01,
- 0x3b, 0x46, 0x2f, 0x5b, 0xa4, 0x83, 0x56, 0xc5, 0x90, 0xe7, 0xc1, 0xc9,
- 0x34, 0x83, 0xda, 0xf9, 0x75, 0x83, 0xda, 0xf9, 0x5d, 0x07, 0xb5, 0xfb,
- 0xeb, 0x06, 0xb5, 0xfb, 0x7b, 0x0d, 0xaa, 0x1a, 0x68, 0x5e, 0x46, 0x1c,
- 0xb1, 0xf8, 0x5c, 0xab, 0x87, 0x90, 0xc4, 0x43, 0xf8, 0x7e, 0xc4, 0x4e,
- 0x2f, 0x84, 0xa3, 0x0f, 0x8e, 0xe4, 0x5d, 0x17, 0x41, 0xc3, 0x32, 0x43,
- 0x18, 0x39, 0x6b, 0xeb, 0x58, 0xd9, 0x98, 0xc3, 0xba, 0x5d, 0x02, 0x93,
- 0xdd, 0xb5, 0xcb, 0x42, 0xbb, 0x71, 0x71, 0x43, 0x10, 0xea, 0x82, 0x79,
- 0x4e, 0xb2, 0x5c, 0xc0, 0x54, 0x9f, 0x8a, 0xd0, 0x7e, 0xd9, 0x9e, 0x30,
- 0x41, 0xe7, 0x44, 0x75, 0x32, 0x2d, 0x38, 0x4b, 0xbe, 0x7d, 0x5c, 0x63,
- 0xf4, 0xe4, 0x74, 0xc9, 0xc9, 0x49, 0x28, 0x56, 0x9d, 0x17, 0x12, 0xe3,
- 0xcb, 0x96, 0x45, 0x73, 0x37, 0x5f, 0x95, 0xf8, 0x93, 0xc6, 0xd9, 0x0f,
- 0x0c, 0x3b, 0x54, 0xa1, 0x07, 0x77, 0x5e, 0xc6, 0x60, 0x9b, 0x14, 0xd7,
- 0x9f, 0x17, 0x5c, 0x66, 0x8b, 0x6b, 0xdd, 0x97, 0x1e, 0x44, 0x99, 0xc8,
- 0xb0, 0x2c, 0x83, 0x7f, 0x08, 0x5c, 0xe9, 0x24, 0x32, 0x53, 0x5c, 0x0a,
- 0x05, 0x73, 0x89, 0xc6, 0x22, 0xe9, 0x73, 0xb6, 0x5e, 0xa1, 0xd6, 0xf4,
- 0x59, 0x61, 0x07, 0x88, 0xfb, 0x5e, 0x7c, 0xeb, 0x34, 0xe2, 0x67, 0x06,
- 0xb7, 0x7d, 0xae, 0x5a, 0x3a, 0x2e, 0x6b, 0x44, 0x5b, 0xcb, 0xa2, 0x05,
- 0x36, 0xa3, 0x7a, 0x92, 0xe7, 0xbf, 0xa7, 0x93, 0x8c, 0x7b, 0x45, 0x37,
- 0x8f, 0x6f, 0x18, 0x85, 0xc4, 0x62, 0xcb, 0x64, 0xcf, 0x5a, 0x9b, 0x66,
- 0xf7, 0x8c, 0xb6, 0xcc, 0xee, 0xd8, 0xff, 0x7b, 0x36, 0xcc, 0xfc, 0x3f,
- 0xd5, 0xe6, 0xa5, 0xa4, 0xc3, 0x7c, 0x96, 0xc2, 0x96, 0x24, 0x4b, 0xc3,
- 0xd8, 0xb6, 0xb3, 0x2c, 0xa5, 0xdc, 0x74, 0x35, 0x61, 0x5f, 0x67, 0xf7,
- 0xac, 0xfc, 0x87, 0x97, 0x3d, 0xe7, 0x31, 0x5e, 0xab, 0xd9, 0x6c, 0x7f,
- 0x74, 0x70, 0x7c, 0xdc, 0x32, 0x22, 0xd2, 0xb2, 0x21, 0x88, 0x4f, 0x52,
- 0xb2, 0x6a, 0xca, 0x71, 0x71, 0xea, 0x55, 0x60, 0x73, 0xa0, 0xf4, 0x4e,
- 0xc0, 0x64, 0x52, 0x85, 0xe1, 0xb4, 0xce, 0x35, 0x9f, 0x36, 0xe5, 0x60,
- 0xad, 0x65, 0x41, 0xd6, 0x01, 0x4a, 0x6c, 0xb8, 0x5e, 0x1a, 0x59, 0xb7,
- 0xfe, 0xad, 0x09, 0x72, 0xf8, 0x7b, 0x93, 0x5e, 0x24, 0xf7, 0xf1, 0xac,
- 0xd2, 0xfc, 0xcc, 0x54, 0xa2, 0xf6, 0x25, 0x7f, 0x91, 0x40, 0x74, 0x48,
- 0x09, 0x64, 0x0a, 0x34, 0x83, 0xd4, 0xf1, 0xa2, 0x44, 0x99, 0x95, 0x90,
- 0x03, 0xcb, 0x08, 0xcc, 0x50, 0x75, 0xb7, 0x2e, 0x76, 0x9b, 0x4b, 0x2f,
- 0xfb, 0x5a, 0xe0, 0x0f, 0x22, 0xc4, 0xde, 0x4a, 0x11, 0xc9, 0xcb, 0x52,
- 0xf4, 0x4a, 0xfb, 0x51, 0xee, 0x94, 0x5e, 0xf4, 0x7e, 0x21, 0x4f, 0xd6,
- 0x9d, 0x1f, 0xaf, 0xd6, 0x3c, 0x4c, 0x4e, 0xed, 0xc6, 0x0c, 0x8a, 0x3e,
- 0xd0, 0x22, 0x9b, 0x6a, 0x22, 0xb1, 0x79, 0xf8, 0x7d, 0xa0, 0x99, 0xae,
- 0x31, 0x5e, 0x20, 0x45, 0x4b, 0xc8, 0xec, 0xfb, 0xe0, 0x80, 0xfe, 0x3c,
- 0x68, 0x15, 0xae, 0x35, 0xe9, 0x94, 0x87, 0x85, 0x51, 0x0a, 0x16, 0x92,
- 0xed, 0x16, 0x68, 0x47, 0x3c, 0x89, 0x28, 0xba, 0x61, 0x7c, 0xbe, 0x82,
- 0xe7, 0xb6, 0x98, 0xe5, 0x0d, 0x2a, 0x58, 0xda, 0xec, 0x29, 0x09, 0xb9,
- 0x9e, 0x94, 0x33, 0x73, 0xac, 0x03, 0x03, 0x3f, 0xe5, 0x5a, 0xe8, 0x21,
- 0x20, 0x6b, 0xeb, 0x7c, 0x51, 0x1a, 0xd5, 0x53, 0x00, 0x90, 0xd9, 0xf0,
- 0x85, 0x37, 0x55, 0xc9, 0xf5, 0xaa, 0x39, 0x86, 0x70, 0xa0, 0x2d, 0xed,
- 0x0d, 0x79, 0x5a, 0xba, 0x19, 0x46, 0x35, 0xef, 0x73, 0xf0, 0x59, 0x3c,
- 0x6f, 0x85, 0xef, 0xd2, 0x6f, 0x0d, 0x21, 0x65, 0x55, 0x59, 0x27, 0xdf,
- 0xbd, 0xd0, 0x2c, 0xf5, 0xef, 0xf3, 0x62, 0x4a, 0xc7, 0x98, 0x0b, 0x84,
- 0x5b, 0x2b, 0xc8, 0x83, 0x4b, 0xc6, 0x8e, 0xb2, 0x36, 0x75, 0xad, 0xea,
- 0xeb, 0x52, 0x63, 0x9e, 0xcd, 0x64, 0x9d, 0x99, 0x00, 0x0e, 0xd9, 0x0c,
- 0x92, 0x90, 0x79, 0x02, 0x0b, 0x5c, 0x3b, 0x81, 0x9e, 0xf1, 0xe7, 0x88,
- 0x01, 0x3f, 0x24, 0xe5, 0xb8, 0x61, 0x0c, 0x7e, 0x3b, 0xea, 0x8b, 0x7c,
- 0x72, 0x93, 0xb9, 0x1a, 0xd1, 0xd3, 0x32, 0x8c, 0x1c, 0x87, 0x3e, 0x41,
- 0x6d, 0x6a, 0x40, 0x6e, 0x47, 0xe0, 0xbd, 0x26, 0x64, 0x9b, 0x6b, 0x8a,
- 0x01, 0x27, 0xbb, 0x12, 0x0c, 0x6c, 0x6b, 0x2b, 0x72, 0x92, 0x71, 0x1b,
- 0x13, 0x9a, 0xa7, 0xa8, 0x53, 0x6e, 0x67, 0x02, 0xf0, 0x08, 0x21, 0xca,
- 0xb4, 0x7e, 0xac, 0x3c, 0x67, 0xbf, 0xe5, 0x1f, 0xe4, 0x05, 0xeb, 0x4b,
- 0xd0, 0x63, 0x25, 0xa6, 0x79, 0x5b, 0x58, 0x98, 0x97, 0x33, 0xc2, 0x79,
- 0x29, 0xd6, 0xbf, 0x86, 0x3d, 0x16, 0x66, 0x4a, 0xae, 0xc4, 0x75, 0xe9,
- 0xf0, 0xcd, 0x43, 0x8a, 0x2e, 0x3b, 0x87, 0xc5, 0xdf, 0x2a, 0x22, 0x40,
- 0xce, 0xa0, 0x4a, 0x0e, 0xcb, 0xbb, 0x62, 0x70, 0x42, 0xa1, 0xaf, 0xc9,
- 0x49, 0x79, 0x65, 0x96, 0xea, 0x7d, 0xd4, 0x62, 0xfa, 0xe1, 0xec, 0x7d,
- 0xb2, 0xf1, 0x81, 0xe6, 0x74, 0x66, 0x9d, 0x52, 0xf4, 0xe4, 0xa6, 0xd4,
- 0xfc, 0x34, 0xfc, 0xc7, 0x43, 0x5b, 0xef, 0x27, 0x47, 0x3f, 0xec, 0xbf,
- 0x3b, 0x3b, 0x39, 0xfa, 0x69, 0x85, 0xd6, 0x48, 0x1f, 0x7f, 0xa9, 0x43,
- 0xa7, 0xd2, 0xd2, 0x52, 0xc4, 0xc2, 0xdc, 0x8a, 0xb3, 0x87, 0xd5, 0x5c,
- 0x80, 0x0f, 0x8e, 0x12, 0xdf, 0x68, 0x74, 0x76, 0x3c, 0x90, 0x3c, 0x7f,
- 0x29, 0x77, 0xcf, 0xd0, 0x69, 0x38, 0xbf, 0x92, 0xf6, 0xf6, 0x6d, 0x18,
- 0xec, 0xab, 0x67, 0xa1, 0xef, 0xa1, 0xd1, 0x9a, 0xb1, 0xc7, 0x40, 0x62,
- 0x45, 0x51, 0x45, 0xe7, 0x08, 0xbe, 0xa5, 0x48, 0xcb, 0x68, 0x9d, 0x4a,
- 0xd4, 0x66, 0x9f, 0xa1, 0xe8, 0xd9, 0x6a, 0xde, 0x09, 0x60, 0x0b, 0x6c,
- 0xa0, 0xe7, 0x02, 0x58, 0x0b, 0xd0, 0x5e, 0x6a, 0x57, 0x88, 0xda, 0xd2,
- 0x06, 0x73, 0x0b, 0x57, 0xd5, 0x91, 0xd9, 0xc1, 0x9e, 0x91, 0x11, 0x96,
- 0xc9, 0x5e, 0xef, 0x77, 0x14, 0xa2, 0x3e, 0x58, 0xff, 0xfd, 0x6f, 0x7f,
- 0x81, 0x48, 0x38, 0xc6, 0x13, 0x17, 0xc8, 0xa3, 0xe4, 0x40, 0xb7, 0xa8,
- 0x12, 0xc4, 0xe3, 0x14, 0x31, 0x2d, 0x85, 0xe6, 0xbb, 0x7e, 0x9a, 0x5f,
- 0x45, 0x04, 0x6e, 0xdf, 0x03, 0x85, 0xf7, 0x57, 0x51, 0x81, 0xee, 0x7b,
- 0x18, 0x9e, 0xf7, 0xa9, 0x74, 0xf0, 0xe1, 0xf7, 0xa5, 0x03, 0x14, 0x0f,
- 0x7e, 0xfd, 0xe1, 0xfc, 0x64, 0xd5, 0x96, 0xa7, 0x30, 0xee, 0x12, 0xa2,
- 0x01, 0x95, 0xb7, 0x0f, 0xca, 0xa2, 0xc0, 0x1d, 0x42, 0x57, 0x38, 0xf1,
- 0x62, 0x5b, 0x14, 0x25, 0xac, 0xc7, 0xa7, 0xf9, 0xbd, 0xca, 0xbc, 0x4c,
- 0xa3, 0x94, 0x74, 0x8d, 0x2b, 0xc1, 0x43, 0x81, 0x7d, 0x22, 0x7e, 0x46,
- 0xdd, 0x07, 0x98, 0x6d, 0x1b, 0xad, 0x53, 0x70, 0x24, 0x2f, 0x4a, 0x5b,
- 0xb2, 0x0e, 0xa6, 0xf3, 0xd8, 0x9d, 0x4b, 0x13, 0x22, 0x70, 0x0a, 0x76,
- 0x90, 0xf6, 0x6d, 0x36, 0xd9, 0xa0, 0xa4, 0x43, 0x21, 0x22, 0xb8, 0xa4,
- 0x3e, 0x20, 0x6b, 0xdf, 0xa5, 0xd2, 0xc7, 0x5c, 0x44, 0xb6, 0xb8, 0xb2,
- 0xae, 0xa9, 0x2f, 0x96, 0x46, 0x92, 0x01, 0x2d, 0xe8, 0x1e, 0x2d, 0x28,
- 0xee, 0x25, 0x54, 0x39, 0x51, 0xc1, 0x70, 0xab, 0x49, 0x67, 0x37, 0xc8,
- 0xf5, 0x1e, 0x26, 0xef, 0x78, 0x71, 0xcd, 0x00, 0x09, 0xc4, 0x35, 0x06,
- 0xab, 0x3b, 0x5e, 0x5e, 0x5d, 0xa1, 0x8a, 0xc3, 0x3e, 0x0b, 0x94, 0xb5,
- 0xd6, 0xa5, 0x03, 0x2d, 0xad, 0x7f, 0xb1, 0x2e, 0x99, 0xb5, 0x3d, 0x29,
- 0x64, 0x4b, 0xfa, 0x4d, 0x8f, 0xf5, 0x8b, 0x10, 0xfd, 0x8b, 0x68, 0xbf,
- 0x9f, 0xac, 0xbf, 0x8e, 0xbf, 0xc4, 0xaa, 0x35, 0x03, 0x6d, 0x4d, 0xac,
- 0x6f, 0xce, 0x2c, 0xe4, 0x75, 0x6e, 0x24, 0xd4, 0x22, 0x8c, 0xae, 0xe7,
- 0x64, 0x78, 0x8e, 0x95, 0x60, 0x2d, 0x3e, 0x8d, 0x0e, 0xf2, 0x5f, 0xb5,
- 0x3f, 0x2d, 0xcd, 0x02, 0x68, 0xbc, 0xcb, 0x32, 0xc0, 0xaa, 0x15, 0x58,
- 0x2c, 0xe9, 0x3f, 0x74, 0xcd, 0xc2, 0x13, 0x2a, 0xa0, 0x20, 0xca, 0x4d,
- 0xa4, 0x56, 0x0f, 0x91, 0x1f, 0xe7, 0x06, 0x4b, 0xa1, 0x59, 0x15, 0x6c,
- 0x78, 0xbb, 0xcd, 0x8e, 0xe5, 0x21, 0x98, 0xb5, 0x4a, 0x47, 0x56, 0x99,
- 0x71, 0x35, 0x19, 0x00, 0x28, 0x53, 0x51, 0xf2, 0x59, 0x09, 0x10, 0xb7,
- 0xcb, 0x48, 0x7d, 0x09, 0x91, 0x6c, 0xd4, 0x19, 0xe9, 0xce, 0x0d, 0xe7,
- 0x15, 0x68, 0x4e, 0x04, 0x29, 0x8d, 0x78, 0x30, 0x2b, 0xb8, 0xa8, 0x8a,
- 0x18, 0xf9, 0xfb, 0x21, 0x24, 0x33, 0xe3, 0x04, 0x68, 0xe9, 0x42, 0xab,
- 0x52, 0xb4, 0x55, 0x62, 0x0d, 0x1f, 0xf8, 0xb5, 0x5a, 0x55, 0xab, 0x31,
- 0x5f, 0xab, 0x8a, 0x78, 0x1a, 0xfd, 0xec, 0xb2, 0x36, 0xd6, 0x2a, 0x52,
- 0xca, 0x3c, 0x46, 0x73, 0x47, 0x0f, 0x22, 0x00, 0x82, 0x4e, 0x98, 0xd1,
- 0xdb, 0x21, 0x60, 0x74, 0xb9, 0xce, 0xa1, 0xe0, 0xd3, 0xaa, 0x33, 0x4c,
- 0xdd, 0xf1, 0x58, 0x34, 0x64, 0x7a, 0x29, 0xb8, 0x31, 0x99, 0x83, 0x66,
- 0x19, 0x8a, 0x92, 0x13, 0xdc, 0x21, 0x43, 0x1d, 0x07, 0x56, 0x4f, 0x73,
- 0x6a, 0xac, 0x4b, 0x96, 0x85, 0x6c, 0xee, 0x57, 0x04, 0xb4, 0xa6, 0x92,
- 0xe4, 0x76, 0x22, 0x19, 0x30, 0x17, 0x81, 0x6c, 0x49, 0x38, 0xae, 0x22,
- 0x08, 0x10, 0xb9, 0x27, 0xcd, 0xf6, 0x3e, 0xb3, 0x60, 0xb3, 0x3e, 0x07,
- 0x52, 0x9f, 0xbf, 0xd4, 0xe9, 0x95, 0xc6, 0x3d, 0xf1, 0x32, 0x1a, 0xa3,
- 0x4d, 0x72, 0x66, 0x8f, 0x9f, 0xed, 0xc1, 0x8e, 0x40, 0xe0, 0x34, 0xac,
- 0x2a, 0x33, 0x4a, 0x1a, 0xe0, 0xd4, 0x26, 0x4b, 0x52, 0xf1, 0xe1, 0x6e,
- 0x0d, 0xab, 0x3d, 0xba, 0x3b, 0x05, 0x5a, 0x49, 0xd2, 0xfb, 0x52, 0x6d,
- 0x0b, 0x3d, 0x31, 0x48, 0x01, 0xab, 0xd1, 0x96, 0x95, 0x54, 0x5d, 0xbc,
- 0x71, 0xcb, 0x11, 0x71, 0xb9, 0xb0, 0xaf, 0x14, 0xd8, 0x0c, 0xb4, 0x6b,
- 0xa6, 0xd5, 0x41, 0x2f, 0xaa, 0x61, 0xd9, 0x79, 0x27, 0x52, 0xe6, 0xa3,
- 0x7d, 0xb4, 0xb4, 0x8b, 0x3b, 0xcd, 0x6f, 0x42, 0x41, 0xa0, 0x26, 0x6f,
- 0x96, 0xa1, 0x17, 0xc3, 0xa2, 0xa7, 0xc2, 0x45, 0x05, 0x1e, 0x4c, 0x4b,
- 0xee, 0xfc, 0x48, 0x38, 0x4b, 0x64, 0x3b, 0x69, 0x10, 0x21, 0xc9, 0xf6,
- 0x98, 0xb1, 0x42, 0x12, 0x77, 0x15, 0xff, 0x7d, 0xd3, 0xa3, 0x1b, 0x5d,
- 0xdb, 0x8b, 0x61, 0xde, 0xfe, 0xd3, 0x7f, 0xe8, 0x97, 0xc0, 0x80, 0xfc,
- 0x2f, 0xf5, 0xb9, 0xaa, 0xd3, 0x38, 0x8d, 0xf3, 0xb3, 0xe4, 0x4f, 0x58,
- 0x15, 0x60, 0x58, 0xf3, 0xd2, 0x00, 0xa2, 0x86, 0x1a, 0xfc, 0xd3, 0xd0,
- 0xba, 0x8a, 0xa5, 0x91, 0x54, 0xcb, 0x84, 0x87, 0xdc, 0x96, 0x8f, 0xf1,
- 0x4f, 0x05, 0xd5, 0x2f, 0xd3, 0xfa, 0xe1, 0x82, 0xf9, 0xc0, 0xe4, 0xf5,
- 0x53, 0x25, 0x4c, 0xb3, 0x49, 0xc7, 0x8c, 0xc1, 0x2b, 0x9f, 0x87, 0x16,
- 0x21, 0x8a, 0xc3, 0xd8, 0xc3, 0x6e, 0xfc, 0x69, 0xc0, 0x00, 0x9f, 0x42,
- 0xe1, 0x82, 0xd7, 0xab, 0x9f, 0xf1, 0xc6, 0xdc, 0xe5, 0xc5, 0xb3, 0xdd,
- 0x81, 0x27, 0xa6, 0xf4, 0xa3, 0xa1, 0x6c, 0x6c, 0xdb, 0x2c, 0x27, 0x13,
- 0xb8, 0xa2, 0xc8, 0x0e, 0x0d, 0x6b, 0xed, 0x9f, 0x12, 0x81, 0x89, 0x41,
- 0xa6, 0xf1, 0x12, 0x52, 0xd9, 0x9d, 0x53, 0x4b, 0x57, 0xba, 0x7f, 0x9e,
- 0x20, 0x1e, 0x07, 0xe1, 0x14, 0x8b, 0xf5, 0x91, 0x02, 0xec, 0x1f, 0xe1,
- 0x6f, 0xe2, 0x57, 0x0f, 0xf8, 0xa3, 0xc1, 0x05, 0x7d, 0xa4, 0x61, 0x5d,
- 0x92, 0xc6, 0x4b, 0xda, 0xaf, 0x06, 0x7c, 0xf6, 0x93, 0x10, 0x4d, 0x27,
- 0x89, 0x85, 0xc9, 0x50, 0xec, 0xa8, 0x39, 0xd2, 0xc1, 0x38, 0xf5, 0x34,
- 0x7d, 0xe4, 0xb2, 0x3f, 0xf9, 0x6d, 0xf6, 0x78, 0x6b, 0x40, 0x2a, 0x25,
- 0x27, 0xfa, 0x9c, 0xc4, 0x4f, 0x67, 0xe8, 0xf3, 0xfd, 0xa1, 0x1c, 0x09,
- 0xc6, 0xa0, 0x13, 0xc3, 0xa7, 0x9a, 0xf3, 0x60, 0xcd, 0xbd, 0x32, 0x74,
- 0xe6, 0x8a, 0x63, 0xcc, 0x68, 0xf2, 0xa7, 0xcd, 0x40, 0xb9, 0xdc, 0xee,
- 0x13, 0x73, 0x2d, 0xd9, 0x2e, 0x8a, 0x80, 0x08, 0xaf, 0xda, 0x4d, 0x1b,
- 0x9a, 0x08, 0x7c, 0x3f, 0x6a, 0xde, 0x4b, 0xa2, 0x7b, 0x9b, 0x1c, 0x53,
- 0xea, 0x34, 0x62, 0x63, 0x44, 0x5a, 0xc9, 0x01, 0xcb, 0x3b, 0x56, 0xb0,
- 0x50, 0xdb, 0xd3, 0xe3, 0xcd, 0xd9, 0x51, 0xf0, 0x35, 0x3d, 0xf0, 0x24,
- 0xac, 0x61, 0x37, 0xef, 0x6a, 0x27, 0x08, 0xc3, 0xbd, 0x6c, 0x16, 0x1f,
- 0x81, 0xbe, 0xf9, 0x11, 0x60, 0x5c, 0x17, 0x9e, 0xe9, 0x00, 0x1f, 0x60,
- 0xbd, 0x18, 0x2f, 0xcd, 0x28, 0xda, 0xb9, 0x94, 0x0b, 0x99, 0x95, 0x90,
- 0xa1, 0x42, 0x6c, 0xa9, 0x70, 0xe5, 0x3a, 0x15, 0x04, 0xd4, 0x95, 0xd2,
- 0x49, 0xb0, 0x7a, 0x1e, 0x0c, 0x8c, 0xc2, 0x16, 0x3e, 0x02, 0xa5, 0xc4,
- 0x52, 0x88, 0xb9, 0x38, 0xb2, 0x8a, 0x80, 0xdc, 0x3b, 0x30, 0x26, 0x0c,
- 0x6b, 0x87, 0x4c, 0xd3, 0x65, 0xa1, 0xe1, 0x12, 0x8f, 0x0f, 0x0c, 0x42,
- 0xbe, 0x96, 0xf6, 0xd3, 0x32, 0x22, 0x14, 0x4f, 0x84, 0x8c, 0x6d, 0x33,
- 0x50, 0x12, 0xb5, 0xd5, 0xdb, 0x3e, 0x0c, 0x6b, 0x95, 0x27, 0x41, 0x56,
- 0xe4, 0xe7, 0xc3, 0x5d, 0xc6, 0xb6, 0x9d, 0xe5, 0xa9, 0xc3, 0x08, 0xe4,
- 0x19, 0xe0, 0x98, 0x60, 0xbe, 0x40, 0x22, 0xbb, 0x2e, 0xef, 0x9e, 0x3c,
- 0x5c, 0x1c, 0x26, 0x42, 0x32, 0xdd, 0x70, 0xc5, 0xca, 0x70, 0x65, 0x71,
- 0xad, 0x35, 0x69, 0x97, 0x86, 0x97, 0x44, 0x2e, 0xe8, 0xee, 0xa2, 0xc4,
- 0x42, 0xca, 0x92, 0x15, 0x08, 0x31, 0xc9, 0x86, 0x56, 0x3f, 0x66, 0xf5,
- 0x74, 0xd3, 0x1e, 0x04, 0x56, 0xf8, 0xb4, 0x30, 0xc9, 0x53, 0xcd, 0x81,
- 0xbb, 0x04, 0xf9, 0xfb, 0xe1, 0x86, 0x23, 0x52, 0xee, 0x63, 0xbe, 0xf0,
- 0x59, 0x42, 0xab, 0x64, 0xb9, 0xf5, 0x7b, 0x09, 0xbc, 0x29, 0x05, 0xdc,
- 0x09, 0x13, 0xa3, 0x53, 0xf4, 0xd4, 0x38, 0x26, 0x88, 0x0d, 0x60, 0xa4,
- 0x07, 0x2f, 0xeb, 0x76, 0xa0, 0xf2, 0x86, 0xd8, 0x81, 0x8e, 0xcf, 0x6e,
- 0x9f, 0x27, 0xa1, 0xdd, 0xa7, 0xf3, 0x9f, 0x79, 0xea, 0x65, 0xfb, 0x70,
- 0xbd, 0x8a, 0xa4, 0xe8, 0xf0, 0x94, 0xb8, 0x2a, 0x9b, 0x4e, 0x49, 0x06,
- 0xef, 0xa7, 0x4f, 0x78, 0x93, 0x68, 0x8f, 0xf3, 0xf1, 0x31, 0x78, 0x93,
- 0x78, 0x72, 0x24, 0xa6, 0x27, 0x25, 0x19, 0x2a, 0x8d, 0xf9, 0xde, 0x76,
- 0x6c, 0xee, 0xda, 0xc4, 0x7e, 0x01, 0x38, 0x89, 0x5c, 0xf1, 0x6e, 0x26,
- 0x50, 0x79, 0x70, 0x08, 0x06, 0x8f, 0x8f, 0xe4, 0x32, 0x38, 0xd1, 0x31,
- 0x80, 0x06, 0x1a, 0x83, 0x42, 0x0d, 0xd4, 0x76, 0x0c, 0xd8, 0x56, 0xef,
- 0x63, 0x21, 0xdc, 0x0c, 0x75, 0x21, 0x04, 0xbd, 0xe6, 0x53, 0x4e, 0xf4,
- 0x2a, 0x42, 0x0b, 0xc7, 0xa1, 0x9d, 0x7d, 0x64, 0x32, 0x86, 0xbd, 0x53,
- 0x61, 0x90, 0x2c, 0xc0, 0x46, 0x2a, 0xab, 0xa1, 0x36, 0xcb, 0x01, 0x34,
- 0x7a, 0x1a, 0xd2, 0x13, 0x6b, 0x41, 0x51, 0x75, 0x76, 0x3a, 0x92, 0x49,
- 0xa2, 0x57, 0xb6, 0x40, 0x3a, 0x10, 0x2a, 0x01, 0x58, 0xc5, 0x84, 0xd2,
- 0x52, 0x1e, 0x6f, 0x0e, 0xe0, 0x74, 0xb6, 0x41, 0x1b, 0x67, 0x0f, 0x18,
- 0x0f, 0x16, 0x6c, 0xcd, 0x6d, 0x98, 0x78, 0x79, 0xf4, 0x9f, 0xc2, 0xa8,
- 0x22, 0x4b, 0x42, 0x0c, 0xda, 0x1e, 0xbe, 0x0b, 0x3f, 0x4e, 0xd6, 0x9c,
- 0x41, 0x3d, 0x82, 0xff, 0xfb, 0x84, 0x1a, 0x3d, 0x6d, 0x65, 0xd5, 0x39,
- 0x4f, 0x4f, 0xcd, 0x21, 0x4a, 0xe2, 0x32, 0x07, 0x3d, 0x6d, 0xfe, 0x1c,
- 0xfe, 0xc9, 0x87, 0x8d, 0x22, 0xb9, 0x3e, 0x2a, 0xe8, 0x29, 0x8f, 0x84,
- 0x31, 0x99, 0x1c, 0x7e, 0x11, 0xc7, 0x5f, 0xf1, 0xc5, 0x45, 0xa4, 0xae,
- 0x4f, 0x47, 0xe2, 0xa6, 0xd0, 0x9a, 0x98, 0x15, 0x92, 0xc7, 0x5a, 0x53,
- 0xd7, 0xa3, 0x6d, 0x0a, 0x8a, 0xfb, 0x13, 0xe4, 0x4a, 0xf5, 0x27, 0xa2,
- 0x3d, 0xea, 0x49, 0x90, 0x95, 0xe4, 0x2e, 0x1f, 0x99, 0x81, 0xa7, 0xc6,
- 0x3c, 0xde, 0xa3, 0x7f, 0xce, 0xe2, 0x5d, 0x4b, 0x3c, 0x67, 0xf2, 0x69,
- 0x4b, 0xb7, 0x32, 0x04, 0xd5, 0x48, 0xf2, 0xd9, 0xd4, 0xed, 0x03, 0xb5,
- 0x95, 0x92, 0xb5, 0xcf, 0x43, 0xa4, 0xe5, 0x67, 0x3c, 0x29, 0xd3, 0x08,
- 0x8b, 0xf5, 0xb2, 0x62, 0x78, 0xc9, 0xa7, 0xef, 0x68, 0xd5, 0xa8, 0x6d,
- 0x7b, 0x14, 0x67, 0x47, 0xa3, 0x5b, 0x10, 0x6e, 0x20, 0x80, 0x8c, 0x56,
- 0x8c, 0xca, 0x4e, 0x11, 0x8b, 0xab, 0xc3, 0xd2, 0x48, 0xd6, 0xdf, 0x68,
- 0x54, 0xdc, 0xda, 0xa7, 0x8c, 0xa9, 0x9e, 0x7d, 0x34, 0x43, 0x30, 0xea,
- 0xb0, 0xd9, 0xf6, 0xda, 0xc8, 0xe1, 0x4f, 0x4b, 0xeb, 0xfc, 0x9c, 0xd2,
- 0x1c, 0x81, 0x05, 0x98, 0x31, 0x57, 0xc9, 0x24, 0x33, 0xaa, 0x37, 0x4a,
- 0xd9, 0xb2, 0x79, 0x0e, 0xbf, 0x3f, 0x41, 0x82, 0x1c, 0xfc, 0xad, 0x32,
- 0x9c, 0x55, 0x47, 0x86, 0x04, 0x99, 0x07, 0x23, 0x17, 0xf5, 0xa0, 0x6d,
- 0x45, 0x72, 0x5a, 0x92, 0xae, 0xdd, 0xb4, 0xf6, 0xea, 0x38, 0x0d, 0x1f,
- 0x01, 0xda, 0xb4, 0xfd, 0x1b, 0x45, 0x25, 0x5d, 0x2c, 0xe4, 0x88, 0x3f,
- 0x3d, 0x77, 0x06, 0x39, 0xe2, 0xa4, 0x9e, 0x12, 0x85, 0x8a, 0x60, 0x44,
- 0x68, 0xca, 0xf2, 0x26, 0x61, 0x1b, 0x84, 0x44, 0xfa, 0x36, 0x69, 0xf5,
- 0x44, 0x73, 0x0c, 0x54, 0xc7, 0x8f, 0x13, 0xc2, 0xc7, 0x68, 0xf4, 0x0d,
- 0xc1, 0x58, 0x5a, 0x7e, 0xb3, 0xe5, 0x1c, 0x76, 0x2c, 0x4b, 0x3f, 0x75,
- 0x09, 0xda, 0xda, 0x81, 0x58, 0x07, 0x6b, 0xf2, 0xf9, 0xd4, 0x65, 0x68,
- 0x8b, 0x95, 0xbf, 0xd3, 0x44, 0x2f, 0x0e, 0xce, 0xec, 0x04, 0x13, 0x5b,
- 0x15, 0xc3, 0x1f, 0xfb, 0xc6, 0x53, 0x74, 0x2e, 0x12, 0x69, 0x7b, 0x8e,
- 0xd1, 0x19, 0x91, 0x3a, 0x44, 0x26, 0xc7, 0xe5, 0xe2, 0xff, 0x81, 0x8d,
- 0x45, 0x26, 0x24, 0x09, 0xf2, 0x9c, 0x61, 0x0b, 0x03, 0xee, 0xd3, 0x43,
- 0xa6, 0x6a, 0x46, 0xf1, 0xf2, 0x5e, 0x31, 0xb5, 0x59, 0x20, 0xb7, 0xc8,
- 0x02, 0x17, 0x19, 0xb6, 0xad, 0x8e, 0xfd, 0x8b, 0xc6, 0xcc, 0x09, 0x33,
- 0x0a, 0xa2, 0x46, 0x43, 0x86, 0xed, 0xc6, 0x62, 0x3e, 0x9a, 0x1b, 0xdc,
- 0xe8, 0x7f, 0x9f, 0xa4, 0x85, 0xb3, 0x41, 0x98, 0x51, 0x8f, 0x09, 0x1d,
- 0xc0, 0xb6, 0xea, 0xea, 0xc4, 0x19, 0x39, 0x9e, 0xa2, 0xf1, 0x9e, 0x64,
- 0x13, 0xa9, 0xa4, 0x40, 0xa1, 0x4a, 0x62, 0xe5, 0x21, 0xad, 0x8a, 0x9a,
- 0xe9, 0xd9, 0xfd, 0x22, 0xb9, 0x6a, 0x81, 0x6a, 0x3a, 0x29, 0x67, 0xec,
- 0x50, 0xb9, 0x05, 0xee, 0x6c, 0x7c, 0x2f, 0x9c, 0xe4, 0x15, 0x27, 0x10,
- 0xc2, 0x5c, 0xc4, 0x3a, 0x0b, 0x7c, 0xa5, 0x3e, 0xff, 0x24, 0x9b, 0x32,
- 0x2c, 0x6e, 0x61, 0x97, 0x87, 0x89, 0x84, 0xc9, 0xb4, 0x6f, 0xcf, 0x06,
- 0x97, 0x70, 0xfb, 0x34, 0x52, 0x60, 0xa3, 0xa5, 0x85, 0xbd, 0xeb, 0x80,
- 0xe2, 0x21, 0xb9, 0x8b, 0xbe, 0x14, 0x40, 0xe6, 0xbb, 0xb4, 0x7e, 0x6a,
- 0x74, 0x29, 0x17, 0x53, 0x6b, 0x2f, 0x82, 0x0b, 0x79, 0xb2, 0x97, 0x4c,
- 0x92, 0xdd, 0x67, 0x61, 0xd5, 0x8a, 0x18, 0x8b, 0x97, 0x20, 0x1f, 0xc4,
- 0x58, 0xdb, 0x8c, 0x09, 0x6f, 0xbd, 0x7c, 0x90, 0xb7, 0x27, 0xa5, 0xd8,
- 0x98, 0x60, 0x8f, 0xb1, 0x62, 0xe4, 0x9f, 0x7e, 0x7c, 0x7e, 0x1f, 0x16,
- 0xc7, 0x31, 0x31, 0xa8, 0xac, 0x10, 0x1e, 0x9e, 0x71, 0xf6, 0xa9, 0x4a,
- 0x15, 0xf0, 0xb6, 0xda, 0xc7, 0xa8, 0xcb, 0x20, 0x64, 0xe7, 0x23, 0x20,
- 0xa1, 0x11, 0xc9, 0x40, 0x76, 0xc0, 0xab, 0x73, 0xc6, 0x10, 0xc3, 0x8a,
- 0x91, 0x6e, 0x34, 0x53, 0x3a, 0x3e, 0x4d, 0xf6, 0x29, 0x37, 0x0d, 0xdd,
- 0xff, 0xf1, 0x33, 0x23, 0xb2, 0x62, 0x4b, 0x7e, 0x0b, 0xd7, 0x59, 0xf3,
- 0xd4, 0x24, 0xde, 0x10, 0x4e, 0x87, 0x4f, 0x21, 0x23, 0x32, 0x61, 0x64,
- 0x52, 0x28, 0x0a, 0xf3, 0xb1, 0x18, 0x8e, 0xec, 0xf9, 0x50, 0x57, 0xc3,
- 0x3c, 0x7f, 0x52, 0x55, 0xcb, 0x05, 0x84, 0x16, 0xdc, 0x79, 0x19, 0xb5,
- 0xb8, 0x22, 0xd9, 0x44, 0x8d, 0x98, 0x3c, 0x21, 0x78, 0x77, 0xad, 0xc9,
- 0x89, 0x5c, 0x92, 0x19, 0x97, 0x02, 0x71, 0x39, 0x1e, 0xd0, 0x2e, 0x48,
- 0x78, 0x79, 0x62, 0x04, 0x62, 0x97, 0x54, 0xdf, 0xdb, 0x3a, 0x70, 0x46,
- 0xc8, 0x32, 0xa9, 0x5e, 0x07, 0x56, 0x81, 0x6d, 0x6e, 0xe5, 0xde, 0xe3,
- 0xcd, 0x89, 0xa3, 0xee, 0xf7, 0x28, 0x64, 0xe0, 0xa1, 0x17, 0xbc, 0xfe,
- 0x51, 0xd3, 0x4e, 0xf7, 0xb6, 0xb6, 0x7e, 0xfe, 0xb1, 0x15, 0x06, 0xf1,
- 0xe5, 0xcf, 0x9f, 0x52, 0xc4, 0xb7, 0x9d, 0x4a, 0xc9, 0x68, 0x3d, 0x31,
- 0x53, 0x37, 0xf7, 0x17, 0xba, 0x85, 0x72, 0x17, 0x9b, 0x9f, 0x26, 0xde,
- 0x60, 0xbc, 0x92, 0x97, 0xe5, 0x8a, 0xc2, 0xb8, 0x2d, 0x64, 0x70, 0x6e,
- 0xdf, 0x02, 0x7c, 0x71, 0x51, 0x63, 0x0b, 0x77, 0xd4, 0xf7, 0x10, 0x6e,
- 0xfa, 0x51, 0x7c, 0x07, 0xea, 0x92, 0xc2, 0xff, 0x1c, 0x2a, 0x09, 0x1c,
- 0x45, 0xac, 0x38, 0xb5, 0xb0, 0xc0, 0x81, 0xbb, 0x61, 0x83, 0xd0, 0x63,
- 0xc8, 0xe6, 0x02, 0xf2, 0x9a, 0xbc, 0x2f, 0x1d, 0x18, 0x84, 0x07, 0xa8,
- 0x21, 0x59, 0x5c, 0xec, 0xde, 0x20, 0x44, 0x48, 0x52, 0x9f, 0x6d, 0x06,
- 0x4f, 0x80, 0x78, 0x4b, 0x35, 0xbe, 0xe0, 0xb1, 0xb1, 0x55, 0x88, 0x19,
- 0x44, 0x53, 0x56, 0x55, 0x9a, 0x17, 0x68, 0x39, 0x67, 0x9e, 0xcc, 0x8b,
- 0x58, 0x68, 0x25, 0xa3, 0x62, 0xc4, 0x00, 0x37, 0x25, 0x31, 0xfc, 0x11,
- 0x28, 0x10, 0x35, 0x27, 0xf9, 0x5b, 0x29, 0x79, 0xd7, 0x41, 0x10, 0x34,
- 0x63, 0x85, 0x30, 0x87, 0x5c, 0x0d, 0x0d, 0x12, 0xf8, 0x63, 0xb3, 0xfb,
- 0x9c, 0x91, 0x73, 0xfd, 0x28, 0x12, 0xcf, 0x4d, 0x22, 0x26, 0xa5, 0x3a,
- 0x8b, 0x04, 0xcb, 0x59, 0x24, 0x14, 0xcd, 0x5a, 0x3d, 0x96, 0x78, 0xb4,
- 0xf5, 0x95, 0x09, 0xca, 0xd4, 0x10, 0xba, 0x4b, 0xd7, 0x22, 0x32, 0xa9,
- 0xc3, 0xcd, 0xaf, 0x39, 0x3f, 0xfb, 0x1e, 0x19, 0x5c, 0x3d, 0x24, 0x69,
- 0xea, 0x98, 0x63, 0x91, 0xf6, 0xe4, 0x79, 0xb3, 0x8e, 0x57, 0x4f, 0xc8,
- 0x91, 0xf8, 0x2d, 0x4a, 0x7c, 0x45, 0x8c, 0x69, 0xe1, 0x17, 0x96, 0x96,
- 0x24, 0xb1, 0xc8, 0x65, 0x62, 0x64, 0x21, 0x36, 0x6d, 0x80, 0xb6, 0x0c,
- 0x97, 0x23, 0xd4, 0x49, 0xe1, 0xf3, 0xd4, 0x00, 0x07, 0x27, 0x8b, 0x7a,
- 0x45, 0x7a, 0xa6, 0xf9, 0x9a, 0xbc, 0xb8, 0x4a, 0x1c, 0xf1, 0x5a, 0xd9,
- 0x13, 0x7f, 0x88, 0xec, 0xe3, 0x97, 0x2a, 0xc7, 0xd6, 0x17, 0xe5, 0x98,
- 0x20, 0x60, 0x5c, 0x49, 0x54, 0x48, 0x43, 0x30, 0xbb, 0x4b, 0xbb, 0x4c,
- 0xcd, 0xd2, 0xc8, 0x3a, 0xb3, 0xb0, 0xba, 0x35, 0xbc, 0x95, 0xcc, 0x90,
- 0x24, 0x7f, 0x67, 0xb0, 0x50, 0x1e, 0xd4, 0x9d, 0xec, 0x83, 0x34, 0xb2,
- 0xc2, 0x6b, 0xf6, 0x41, 0x62, 0xef, 0xbc, 0xd0, 0xab, 0x56, 0xc0, 0xb5,
- 0xab, 0x1e, 0x16, 0xd2, 0x2a, 0xed, 0xc1, 0x5a, 0x68, 0x92, 0xe3, 0x92,
- 0x1d, 0x5e, 0x64, 0x05, 0xcf, 0xba, 0x8d, 0xf2, 0x41, 0xdd, 0xe1, 0xca,
- 0xf3, 0x4a, 0x80, 0xa6, 0x93, 0x10, 0x43, 0xa1, 0x82, 0xc2, 0x8a, 0xa2,
- 0x17, 0x5f, 0xba, 0x64, 0xd1, 0x3f, 0x3d, 0xdf, 0x26, 0xe6, 0xa2, 0x8d,
- 0xa4, 0x7e, 0xc4, 0xd3, 0x9f, 0x9e, 0xa5, 0x8f, 0x30, 0x4c, 0xa8, 0x50,
- 0x01, 0xbb, 0xe4, 0xda, 0x37, 0xe9, 0x44, 0x6a, 0xb8, 0xdc, 0xa5, 0x1a,
- 0xb0, 0x29, 0x94, 0x1b, 0x20, 0x81, 0xc6, 0x0e, 0x53, 0xdf, 0x8f, 0xed,
- 0x6f, 0x7c, 0x66, 0x22, 0x9c, 0x77, 0x43, 0x18, 0x55, 0x37, 0x8d, 0x59,
- 0xab, 0xa2, 0xa3, 0x3c, 0x2a, 0xbc, 0x49, 0xb4, 0x29, 0x7f, 0x5e, 0x1d,
- 0x89, 0xfc, 0xdb, 0x5d, 0x5d, 0x3f, 0x70, 0x11, 0x11, 0xe6, 0xca, 0x2b,
- 0x4b, 0x62, 0x73, 0x8e, 0xce, 0xc8, 0x26, 0x17, 0xa7, 0x5a, 0x4f, 0x43,
- 0xdf, 0x94, 0x5c, 0x31, 0x3f, 0x1d, 0x93, 0xda, 0x5a, 0x16, 0x64, 0x95,
- 0x88, 0x40, 0x2e, 0xb7, 0x5c, 0x85, 0x38, 0xb3, 0x36, 0x8d, 0xe8, 0xa2,
- 0x75, 0xff, 0x75, 0x41, 0x9d, 0x23, 0xb5, 0x25, 0x3a, 0x95, 0xdb, 0x65,
- 0x28, 0xae, 0x88, 0x06, 0x96, 0x46, 0xca, 0x08, 0xb8, 0x9c, 0x41, 0xc8,
- 0x74, 0x5f, 0x1f, 0x5d, 0x6c, 0x86, 0x18, 0xb4, 0xe9, 0xd4, 0x1f, 0x18,
- 0x52, 0xb5, 0xf4, 0x88, 0xa7, 0xb6, 0x64, 0x8b, 0x4d, 0x9d, 0x2d, 0x08,
- 0x0d, 0xc4, 0xc8, 0x56, 0x45, 0x1c, 0x4b, 0xf2, 0xc0, 0x2c, 0x03, 0x65,
- 0xe5, 0xbb, 0x58, 0x24, 0xdf, 0xc6, 0x57, 0x7b, 0x31, 0xd3, 0x94, 0xa1,
- 0xcf, 0x02, 0xeb, 0xe1, 0xd1, 0xc9, 0xd1, 0xc5, 0x51, 0x1f, 0x00, 0x27,
- 0x81, 0x21, 0x77, 0x86, 0xdb, 0xab, 0xc9, 0x26, 0xd7, 0x85, 0xa1, 0xf9,
- 0x2b, 0xda, 0x0e, 0xe4, 0x3d, 0x7f, 0x9f, 0x8d, 0x0f, 0xf7, 0xbf, 0xa3,
- 0x8a, 0x68, 0x74, 0x66, 0xce, 0xce, 0x4f, 0xcf, 0xde, 0x1e, 0xbf, 0x3f,
- 0xec, 0x27, 0x07, 0xa7, 0x67, 0x7f, 0xed, 0x27, 0xef, 0x4e, 0xbf, 0x3b,
- 0x8a, 0x84, 0xd8, 0x52, 0xa8, 0x58, 0x24, 0xf0, 0x49, 0xaa, 0x8e, 0xd8,
- 0x40, 0x6a, 0xae, 0xb5, 0xd1, 0x8a, 0x30, 0x27, 0x96, 0x8c, 0xea, 0x22,
- 0xe2, 0x7c, 0x32, 0x4b, 0x69, 0x06, 0xfc, 0xcd, 0xd1, 0xfe, 0x61, 0x57,
- 0x1c, 0x38, 0x3b, 0x1d, 0x5d, 0x60, 0x5e, 0x34, 0x41, 0x3b, 0x6f, 0x62,
- 0xdf, 0x86, 0x59, 0x92, 0x9d, 0x9b, 0x94, 0xcc, 0x9b, 0xcc, 0xc3, 0xd0,
- 0x34, 0x47, 0x00, 0x56, 0xb2, 0xe9, 0xca, 0x6a, 0xca, 0x08, 0x81, 0xb0,
- 0x91, 0x72, 0x8f, 0xdd, 0x84, 0xe4, 0xe5, 0xf6, 0x01, 0xeb, 0x13, 0xf1,
- 0x2c, 0x00, 0x60, 0xd4, 0xc2, 0x36, 0xe5, 0x85, 0xb7, 0xe5, 0x6b, 0x51,
- 0xe7, 0x09, 0x2b, 0x3f, 0x16, 0x80, 0x07, 0xa2, 0x12, 0x87, 0x3f, 0xa4,
- 0x12, 0xc0, 0x36, 0xce, 0x28, 0xf1, 0xa6, 0x46, 0xc1, 0x1d, 0x2f, 0xea,
- 0x3a, 0xce, 0xde, 0x35, 0x82, 0x11, 0x21, 0x4e, 0x10, 0xd4, 0xc8, 0x06,
- 0x49, 0xeb, 0xe7, 0x3a, 0xd4, 0xe2, 0x09, 0x3f, 0xf0, 0xc2, 0x26, 0x31,
- 0xe0, 0x06, 0x08, 0x14, 0xcb, 0x4b, 0x43, 0x9b, 0x19, 0x47, 0x8b, 0xf0,
- 0x56, 0x95, 0x2e, 0x0c, 0xf1, 0x98, 0x8e, 0xf8, 0x35, 0x4e, 0x48, 0xfc,
- 0x0a, 0xd8, 0x78, 0xbb, 0xe2, 0x74, 0xfb, 0x45, 0xc0, 0xa4, 0x45, 0xef,
- 0xb0, 0x9d, 0x1c, 0x9b, 0x7d, 0xa5, 0xa3, 0xde, 0x8d, 0x22, 0x44, 0xe6,
- 0x13, 0x97, 0x79, 0xcd, 0x69, 0xab, 0x71, 0xd4, 0x4d, 0x5b, 0x61, 0xc7,
- 0x04, 0x1c, 0x1c, 0xed, 0x99, 0xbe, 0x78, 0xaa, 0xeb, 0xc0, 0x0c, 0x76,
- 0x7e, 0x74, 0x71, 0xde, 0xf1, 0xea, 0xbf, 0x8c, 0xd8, 0xf2, 0x36, 0x08,
- 0xa8, 0x78, 0x33, 0xf1, 0xba, 0x75, 0xfd, 0xd2, 0x57, 0x4f, 0xf4, 0xfb,
- 0x58, 0x4a, 0xee, 0xb3, 0x18, 0xc8, 0xf0, 0x06, 0x43, 0x22, 0x47, 0x66,
- 0x49, 0x5f, 0x3c, 0xd2, 0xdb, 0x37, 0x47, 0x27, 0x67, 0xe1, 0x2c, 0xbf,
- 0x3b, 0x7f, 0xfb, 0xd7, 0xe1, 0x23, 0xc9, 0x96, 0xbf, 0x7d, 0x4c, 0xef,
- 0x7d, 0xda, 0x34, 0x51, 0x74, 0x71, 0x73, 0x59, 0x72, 0xa5, 0x17, 0x0d,
- 0x71, 0x02, 0xb8, 0x03, 0x17, 0x55, 0x6b, 0x56, 0x22, 0x0f, 0x9b, 0xa9,
- 0x07, 0x62, 0x83, 0x4a, 0x58, 0x5c, 0x39, 0xda, 0xb0, 0x56, 0x2e, 0x52,
- 0x56, 0xb8, 0x82, 0x74, 0x12, 0x61, 0x42, 0x43, 0xc9, 0xc7, 0x54, 0xab,
- 0xa4, 0x95, 0xd4, 0x1e, 0x11, 0x5e, 0x25, 0x2c, 0x17, 0xbd, 0x59, 0xe9,
- 0xe5, 0x7e, 0x7a, 0x35, 0x2c, 0xab, 0x9c, 0xec, 0x73, 0x52, 0x41, 0x8e,
- 0x5b, 0x4b, 0x50, 0x29, 0x95, 0x0e, 0x2d, 0x31, 0x80, 0x58, 0x73, 0x12,
- 0x31, 0x94, 0x68, 0x86, 0x7a, 0xbb, 0xdd, 0x39, 0x54, 0x7b, 0x04, 0x13,
- 0xd9, 0x36, 0x87, 0x56, 0x0b, 0x88, 0x04, 0x00, 0x51, 0xc5, 0x55, 0xb3,
- 0xd1, 0xf3, 0xc4, 0x71, 0x14, 0xd5, 0x38, 0xec, 0x94, 0xdd, 0x5c, 0x29,
- 0xa6, 0xeb, 0x2e, 0xad, 0x0a, 0x2e, 0x82, 0x1e, 0x60, 0x29, 0xd7, 0xcb,
- 0xd6, 0x86, 0x3d, 0x20, 0x88, 0x92, 0xdc, 0x24, 0x52, 0x36, 0x82, 0x7e,
- 0x46, 0x0a, 0x05, 0xa5, 0xce, 0xd5, 0x43, 0x13, 0x22, 0x77, 0xb2, 0xd4,
- 0x3d, 0xe0, 0x97, 0xb9, 0xc4, 0xc1, 0xb8, 0xe3, 0x20, 0x49, 0xa6, 0xcb,
- 0x2a, 0x4c, 0xe3, 0x4d, 0x13, 0xaf, 0x43, 0x06, 0x6b, 0xe9, 0xb7, 0x3c,
- 0x6e, 0x14, 0x88, 0x08, 0xa0, 0x09, 0x36, 0x9d, 0x99, 0xee, 0xbd, 0x17,
- 0x82, 0x39, 0x39, 0x64, 0x68, 0x0b, 0x39, 0xe7, 0x0d, 0x49, 0x09, 0x75,
- 0x47, 0x81, 0xfa, 0x49, 0x9d, 0xe0, 0x6c, 0xf4, 0xbf, 0x3e, 0x5e, 0xae,
- 0x89, 0x63, 0xb9, 0x7d, 0x48, 0x24, 0x96, 0xbd, 0x96, 0xb5, 0xd6, 0x05,
- 0xa1, 0x9d, 0x48, 0x52, 0x18, 0x35, 0x12, 0xac, 0xc9, 0x5a, 0xd4, 0xd7,
- 0x49, 0x25, 0x6a, 0x9a, 0x89, 0x07, 0x73, 0x8d, 0xf8, 0x38, 0xf3, 0xa5,
- 0xa1, 0x64, 0x16, 0x10, 0x0c, 0x93, 0xef, 0x33, 0x46, 0x05, 0xca, 0xe2,
- 0xc9, 0x7b, 0x83, 0x88, 0x4d, 0x88, 0x4c, 0x5f, 0x2b, 0x58, 0xf3, 0x6f,
- 0x77, 0x8a, 0xff, 0xea, 0x88, 0x82, 0x17, 0xf1, 0x35, 0xfe, 0xf8, 0x45,
- 0x64, 0xe1, 0x95, 0xc3, 0x60, 0x2f, 0xdc, 0x86, 0x21, 0xff, 0x16, 0x7d,
- 0x0c, 0x82, 0x5c, 0xd0, 0xe9, 0xa6, 0x58, 0x35, 0xbd, 0xed, 0x16, 0x33,
- 0x17, 0xdd, 0xa7, 0x6d, 0xaa, 0x68, 0x91, 0x44, 0x44, 0x29, 0xe5, 0x3d,
- 0xe6, 0x4c, 0x8d, 0x9c, 0x8a, 0xc1, 0xd2, 0x6d, 0x8a, 0xb3, 0x93, 0xfd,
- 0x9e, 0x78, 0x64, 0xff, 0x00, 0x1e, 0x19, 0xd5, 0x94, 0xc4, 0x01, 0x78,
- 0x3d, 0x25, 0x2b, 0xa0, 0x11, 0xfa, 0xc8, 0xef, 0x6f, 0x9a, 0xfe, 0xe2,
- 0x3f, 0xe3, 0x25, 0x1d, 0xb5, 0xd6, 0xb1, 0x9f, 0xdd, 0xce, 0xce, 0x03,
- 0xd2, 0xb0, 0x6c, 0xb9, 0xbc, 0x79, 0x39, 0x15, 0x3c, 0xae, 0xb4, 0xd1,
- 0x95, 0x8e, 0x70, 0x0d, 0x5e, 0x77, 0x2d, 0x5d, 0x44, 0xe7, 0xd0, 0x3c,
- 0xde, 0x27, 0x2d, 0xa8, 0x2c, 0x56, 0x36, 0x29, 0xa6, 0x6e, 0xfa, 0x36,
- 0x42, 0x78, 0x6c, 0x27, 0x0c, 0xa6, 0xa3, 0xea, 0x11, 0x99, 0x52, 0x58,
- 0xc2, 0x33, 0x97, 0x11, 0x1e, 0x62, 0xb5, 0xaf, 0x8e, 0x84, 0x00, 0x99,
- 0x7d, 0x10, 0xe9, 0x88, 0xc4, 0x45, 0x46, 0x27, 0xa4, 0x78, 0x66, 0x5b,
- 0xcb, 0xd1, 0x0c, 0xb2, 0x56, 0x4c, 0x39, 0x0a, 0xd0, 0x00, 0x56, 0x7c,
- 0x6a, 0xa3, 0x19, 0x63, 0x1a, 0x91, 0x16, 0x27, 0x43, 0xf1, 0x55, 0x48,
- 0x67, 0x3c, 0x2f, 0xcd, 0xb8, 0xc1, 0x90, 0x92, 0x8d, 0x39, 0x4d, 0x65,
- 0x53, 0x0d, 0xd2, 0xd1, 0xad, 0xb0, 0x10, 0x78, 0x5c, 0x35, 0xca, 0x22,
- 0xe5, 0x98, 0x96, 0xa9, 0x11, 0x41, 0xc9, 0x01, 0x2e, 0x0e, 0xd7, 0x88,
- 0xeb, 0x2c, 0x49, 0x90, 0x27, 0xd1, 0xb4, 0xab, 0x61, 0x68, 0x92, 0x0b,
- 0xd9, 0xc1, 0x15, 0x50, 0xc0, 0x7f, 0x5f, 0xcd, 0x71, 0x04, 0x96, 0x95,
- 0x6c, 0x0c, 0x36, 0xad, 0xe0, 0x87, 0x2a, 0x5c, 0x4c, 0x1b, 0xa1, 0xfb,
- 0x3a, 0x75, 0x41, 0xa7, 0x36, 0x39, 0x82, 0x31, 0xec, 0xe5, 0x34, 0x6a,
- 0x86, 0x38, 0xf5, 0xb6, 0xc5, 0x46, 0x64, 0x65, 0x97, 0xc4, 0x8e, 0x02,
- 0xb9, 0xac, 0xd3, 0x56, 0x91, 0xdd, 0xf9, 0x6d, 0x39, 0xa5, 0xcb, 0xb6,
- 0xf7, 0x3b, 0x9e, 0xa9, 0x6b, 0x96, 0x4a, 0x67, 0x8b, 0xc0, 0x1e, 0x41,
- 0xce, 0x7e, 0xfa, 0xc2, 0x7b, 0xf8, 0x1d, 0x57, 0xcb, 0x29, 0xc2, 0x88,
- 0xa0, 0x77, 0xf8, 0x70, 0x98, 0x1c, 0x4a, 0x64, 0x3f, 0x72, 0xd3, 0x97,
- 0xd2, 0x02, 0xc2, 0xbd, 0xbd, 0x66, 0xbe, 0x93, 0x4c, 0x9a, 0xc8, 0x96,
- 0xca, 0xfb, 0xb5, 0x9f, 0x87, 0x2f, 0x5e, 0x09, 0x06, 0xcb, 0x12, 0x15,
- 0x7d, 0x96, 0x8f, 0xf1, 0xb7, 0x5a, 0x2b, 0x73, 0x04, 0xa8, 0xd6, 0xc3,
- 0x88, 0xbd, 0x81, 0xfd, 0x1c, 0xd0, 0x54, 0x9c, 0x87, 0x42, 0x4d, 0xfa,
- 0xfa, 0x3e, 0xa9, 0x4e, 0x9c, 0x27, 0x63, 0x9b, 0x8e, 0xa5, 0xd4, 0x43,
- 0x4f, 0x7a, 0x56, 0x4d, 0xe1, 0xc6, 0x7b, 0xa0, 0x47, 0xab, 0xb4, 0x62,
- 0xd5, 0xaf, 0xb8, 0x51, 0x73, 0x2f, 0x1b, 0x31, 0xb2, 0xc9, 0xb2, 0x69,
- 0x63, 0x05, 0xfa, 0x0e, 0x51, 0xb9, 0xc3, 0x79, 0x58, 0x1b, 0x70, 0xdc,
- 0x88, 0x80, 0xde, 0x3b, 0x53, 0x53, 0xef, 0x5e, 0x6f, 0x53, 0x9c, 0x59,
- 0xec, 0x97, 0x94, 0x8f, 0x63, 0x79, 0xf9, 0x3a, 0xe6, 0x2a, 0x63, 0xd4,
- 0x30, 0xa4, 0xe9, 0x42, 0x8c, 0x89, 0x76, 0x6f, 0x68, 0xa7, 0x9a, 0xc6,
- 0xfa, 0x7e, 0xcb, 0x05, 0x99, 0xbd, 0xae, 0xad, 0x51, 0x4d, 0x6a, 0x35,
- 0x77, 0xbb, 0x8f, 0xf4, 0x0c, 0xd5, 0xd7, 0x68, 0xa6, 0x36, 0xf2, 0x5b,
- 0x5f, 0xd5, 0xf5, 0x0f, 0xc2, 0xc0, 0x11, 0x59, 0xe5, 0xf0, 0xd8, 0x48,
- 0xfe, 0xc6, 0x47, 0x36, 0x73, 0x2e, 0x98, 0xc5, 0x4d, 0x35, 0x7e, 0x6e,
- 0xfe, 0xf9, 0x96, 0xfe, 0x21, 0x46, 0x41, 0x2a, 0x12, 0x83, 0x20, 0x33,
- 0x8e, 0x52, 0xc8, 0x13, 0xa8, 0xc8, 0x0f, 0xeb, 0x95, 0x23, 0x50, 0xd1,
- 0x5b, 0xfc, 0x52, 0x65, 0x8f, 0xbc, 0x63, 0xe6, 0xf6, 0x0f, 0xb2, 0x7a,
- 0x2e, 0x8d, 0x92, 0x60, 0x28, 0x71, 0xc2, 0x16, 0xb5, 0xb9, 0xe5, 0x26,
- 0xa8, 0x84, 0x6b, 0x51, 0x52, 0x18, 0x57, 0x0d, 0x06, 0x50, 0x98, 0x16,
- 0xf2, 0x15, 0xee, 0xcb, 0xd5, 0xfd, 0x21, 0x9f, 0x31, 0x89, 0xa6, 0x35,
- 0x3e, 0x3a, 0xb7, 0x43, 0xca, 0x17, 0x13, 0x09, 0x0b, 0x9b, 0x81, 0xa4,
- 0x9f, 0xd4, 0xee, 0xcd, 0x78, 0x99, 0x6b, 0xcd, 0x5a, 0x3c, 0x3a, 0xd4,
- 0x04, 0x3c, 0xce, 0xbe, 0x5c, 0x31, 0x4e, 0x4e, 0x5f, 0x43, 0x51, 0x22,
- 0xa4, 0x0a, 0xdd, 0x58, 0x24, 0x94, 0x79, 0x36, 0x27, 0xbc, 0x45, 0x9b,
- 0xa6, 0xc6, 0x22, 0x18, 0xa5, 0x14, 0x53, 0x77, 0x2b, 0xdc, 0x49, 0x53,
- 0x4a, 0x5b, 0x26, 0xe5, 0x9a, 0x43, 0xde, 0xff, 0x10, 0xd8, 0x96, 0xeb,
- 0x87, 0x62, 0x72, 0x7d, 0xf8, 0x7e, 0xb4, 0xb6, 0xda, 0x51, 0xef, 0x4d,
- 0x0e, 0x4f, 0x57, 0x65, 0x41, 0x39, 0x4e, 0x5e, 0xf4, 0x42, 0xc8, 0x02,
- 0x46, 0x67, 0xef, 0x8f, 0xbe, 0x3e, 0xd5, 0x7f, 0x7e, 0xc9, 0xb2, 0x9e,
- 0xa4, 0xd5, 0x55, 0x16, 0x41, 0x90, 0x0c, 0x46, 0xa4, 0x98, 0x36, 0x9e,
- 0x38, 0x6b, 0x48, 0x63, 0x46, 0xaf, 0x33, 0x55, 0xf4, 0x85, 0x38, 0xf0,
- 0xd1, 0x0a, 0x87, 0x2f, 0xf8, 0xff, 0xee, 0xd7, 0x5f, 0x85, 0xbc, 0xfe,
- 0xf0, 0xfd, 0x8a, 0xee, 0xe8, 0x9b, 0x81, 0x5e, 0xed, 0x62, 0xd5, 0xf2,
- 0x32, 0xc7, 0xc3, 0x53, 0x23, 0xb0, 0xc1, 0xf1, 0x01, 0x28, 0xa6, 0xf0,
- 0x13, 0xc7, 0xc8, 0x3c, 0x21, 0xff, 0x3c, 0xfa, 0xa0, 0x00, 0x94, 0xc5,
- 0xbb, 0x62, 0xe4, 0xb2, 0x11, 0x17, 0x95, 0x3a, 0xe7, 0x98, 0x9a, 0x33,
- 0x31, 0xb2, 0x6e, 0x3e, 0xb6, 0x47, 0xf1, 0xe6, 0x88, 0x01, 0x44, 0xca,
- 0x0e, 0xbd, 0x33, 0xe2, 0x01, 0xf1, 0xe5, 0x4f, 0xde, 0x3e, 0x7d, 0x21,
- 0xd9, 0x18, 0x1b, 0x4e, 0x6f, 0xef, 0x86, 0x67, 0x62, 0x0e, 0x7c, 0xce,
- 0x68, 0x6b, 0xf1, 0xe6, 0x5e, 0x7c, 0xfe, 0xe2, 0xf9, 0xe6, 0x66, 0xdf,
- 0xc2, 0x49, 0x68, 0x0e, 0x13, 0xe5, 0xd2, 0xe6, 0x74, 0x86, 0x58, 0xc5,
- 0x31, 0xa2, 0xe1, 0x35, 0x74, 0x66, 0x0b, 0x81, 0x11, 0x6f, 0x8e, 0x58,
- 0xa0, 0xbe, 0x47, 0xd3, 0x23, 0x14, 0x04, 0xb0, 0x16, 0x8b, 0x45, 0x40,
- 0xac, 0x2b, 0xe3, 0x07, 0x36, 0xd4, 0x32, 0xbf, 0xd2, 0x23, 0xce, 0x85,
- 0xc0, 0x2d, 0x08, 0x08, 0xfb, 0x43, 0xe0, 0x39, 0x50, 0x26, 0x4d, 0xd8,
- 0xc7, 0x6f, 0x8f, 0x4f, 0x8e, 0xec, 0xf1, 0xfb, 0x5f, 0x5b, 0x43, 0x1a,
- 0x63, 0x35, 0x09, 0x73, 0xf9, 0x20, 0xd9, 0x78, 0xe9, 0xbd, 0xfd, 0x04,
- 0xb5, 0x08, 0xbf, 0xed, 0xb3, 0x7e, 0x85, 0x8f, 0x9d, 0x69, 0xd6, 0x34,
- 0x7c, 0xf4, 0xfe, 0xbb, 0xe3, 0xf3, 0xd3, 0xf7, 0xef, 0x8e, 0xde, 0xdb,
- 0x48, 0x7c, 0xba, 0x86, 0x62, 0x9e, 0xab, 0x3a, 0x74, 0x0a, 0xe4, 0x94,
- 0xcb, 0x41, 0x22, 0x12, 0x39, 0x69, 0x68, 0x16, 0x66, 0xbf, 0xe4, 0xaf,
- 0xa1, 0xdf, 0x9c, 0xf7, 0x90, 0x6e, 0x1d, 0x49, 0xe2, 0x0b, 0x8a, 0xa0,
- 0x9d, 0x52, 0xa6, 0xd3, 0x90, 0xd3, 0x12, 0xd8, 0x01, 0x91, 0xb3, 0xf3,
- 0xec, 0x7e, 0x92, 0x09, 0xf8, 0x79, 0xed, 0x15, 0x5b, 0xd3, 0xbc, 0x1c,
- 0x97, 0xbd, 0xd4, 0x1a, 0x84, 0xa3, 0x76, 0x2e, 0x46, 0xcd, 0xe5, 0xdb,
- 0x62, 0x7e, 0x38, 0x20, 0x0d, 0x34, 0x9e, 0xc7, 0xe6, 0x5a, 0xfc, 0x19,
- 0xf0, 0x6f, 0xb0, 0xd3, 0xde, 0x03, 0xab, 0x77, 0x10, 0x9c, 0xea, 0xc8,
- 0xee, 0x2a, 0xa4, 0xde, 0x0c, 0x5a, 0x2e, 0x6e, 0x54, 0x59, 0xf8, 0x42,
- 0xfc, 0xd9, 0x21, 0xe8, 0x5c, 0xed, 0x3b, 0x8d, 0x2c, 0x94, 0x87, 0xa6,
- 0xf6, 0xc3, 0xd9, 0xb6, 0xe6, 0xc5, 0xbe, 0x8e, 0x3e, 0x9e, 0x9d, 0x9f,
- 0xfe, 0xf0, 0xd7, 0xdf, 0xb8, 0x8b, 0x91, 0x9b, 0xc6, 0x8f, 0x74, 0x51,
- 0x68, 0xe3, 0x3f, 0xff, 0xe6, 0xbd, 0xb5, 0x9b, 0xef, 0x7b, 0x20, 0xee,
- 0x51, 0x84, 0x70, 0x38, 0x87, 0xb8, 0x18, 0x44, 0xe2, 0xbc, 0x45, 0x5e,
- 0x70, 0xab, 0x65, 0x11, 0x70, 0x6d, 0xd7, 0x6d, 0xe2, 0x4c, 0x43, 0xdf,
- 0xdb, 0x30, 0x41, 0x41, 0x36, 0x92, 0x31, 0xc2, 0xb2, 0x6c, 0x7d, 0x54,
- 0x01, 0xc0, 0xa5, 0x69, 0xd7, 0x63, 0xff, 0xe4, 0xe4, 0x37, 0x5d, 0x04,
- 0xe8, 0xe3, 0x6e, 0x2e, 0x03, 0x2b, 0xc6, 0xa9, 0x2f, 0x39, 0x90, 0x4e,
- 0x5a, 0xaa, 0xfb, 0xfb, 0x53, 0x19, 0x0d, 0xbb, 0xa2, 0x06, 0x75, 0x66,
- 0x04, 0x5e, 0x78, 0x02, 0xc8, 0x94, 0x4c, 0xb7, 0x1b, 0x6a, 0x98, 0x7f,
- 0x11, 0x08, 0x4c, 0x14, 0x8c, 0x4d, 0xb2, 0xb4, 0xad, 0xd0, 0x21, 0xae,
- 0x5b, 0x86, 0xa9, 0x41, 0x5e, 0x74, 0x69, 0xfd, 0xa8, 0x5c, 0x2d, 0x43,
- 0xcb, 0x20, 0x45, 0x7c, 0xdf, 0x64, 0xc6, 0xa4, 0x48, 0x9a, 0x2a, 0xaf,
- 0x6f, 0x90, 0x50, 0x4e, 0x87, 0x52, 0xca, 0x84, 0x36, 0xa8, 0x99, 0x8c,
- 0x82, 0xf7, 0x34, 0x14, 0x33, 0x76, 0x1e, 0xb1, 0xf9, 0x79, 0x71, 0x7a,
- 0x70, 0x7a, 0x62, 0x7e, 0x39, 0x7a, 0x7b, 0xfc, 0x83, 0x63, 0x68, 0x5c,
- 0x3d, 0xa3, 0xa5, 0x35, 0xb8, 0x52, 0x1a, 0x1d, 0x87, 0x6a, 0x0c, 0xd0,
- 0x58, 0xca, 0xf1, 0xae, 0x39, 0x4f, 0xba, 0x0d, 0xe9, 0x10, 0xbf, 0xa2,
- 0x07, 0x84, 0xf0, 0x58, 0x04, 0x87, 0x1f, 0xf9, 0xd2, 0xda, 0x25, 0x26,
- 0xc1, 0x16, 0x86, 0x72, 0x2b, 0x00, 0x40, 0x06, 0x57, 0x56, 0xb6, 0x0c,
- 0x5f, 0xe3, 0x9b, 0x00, 0x3b, 0x5a, 0xbf, 0x07, 0xce, 0x6b, 0xf4, 0x3f,
- 0x7f, 0x92, 0xaa, 0x0a, 0xda, 0x18, 0x0c, 0xd4, 0xdb, 0x21, 0x1e, 0xe6,
- 0xbb, 0x5d, 0x3a, 0x21, 0x2f, 0xf0, 0x07, 0xda, 0x16, 0xdb, 0x73, 0x92,
- 0x05, 0x90, 0x6c, 0x5c, 0xe4, 0x73, 0xc1, 0xc9, 0xec, 0x04, 0x7d, 0x1b,
- 0xb0, 0x12, 0x45, 0x4e, 0x90, 0xa2, 0xd0, 0x84, 0x59, 0x79, 0x9b, 0x72,
- 0xf5, 0xd2, 0x4b, 0x5b, 0x63, 0xa3, 0xd3, 0x46, 0xfa, 0xab, 0x1a, 0x49,
- 0xdb, 0xad, 0xbc, 0xf8, 0x35, 0x8d, 0xbc, 0xe8, 0xb4, 0x71, 0xfd, 0xab,
- 0x1a, 0xb1, 0x55, 0xa0, 0xcc, 0xb5, 0xf8, 0xc3, 0xf1, 0x45, 0x72, 0x70,
- 0x7a, 0xe8, 0x68, 0xf4, 0x42, 0x32, 0x74, 0x2b, 0xc6, 0x4a, 0x19, 0x2f,
- 0x0b, 0x92, 0x25, 0xe8, 0x40, 0x71, 0x29, 0x4c, 0x57, 0x59, 0x9d, 0x3c,
- 0xfb, 0x6a, 0x35, 0xcd, 0x72, 0xfa, 0xbb, 0xe2, 0xac, 0x38, 0x1f, 0xdb,
- 0x51, 0x8b, 0xb0, 0xa3, 0xa0, 0xa8, 0x9c, 0x44, 0x22, 0x6d, 0x42, 0x82,
- 0x4f, 0x2b, 0xb1, 0x20, 0x27, 0xe3, 0x94, 0x1c, 0x7c, 0x05, 0x3b, 0x46,
- 0x8d, 0x6c, 0xb2, 0xdf, 0xb4, 0x22, 0xf1, 0x4a, 0x9b, 0x65, 0x0b, 0x93,
- 0x03, 0xe5, 0xa2, 0x22, 0x3e, 0x86, 0xd5, 0xdc, 0xbc, 0xd1, 0xa1, 0xf8,
- 0xe9, 0xbd, 0x3b, 0xc2, 0x09, 0x8b, 0x16, 0xc5, 0x48, 0x19, 0x00, 0x48,
- 0x5e, 0xa4, 0x93, 0xc0, 0xbb, 0x82, 0x03, 0x49, 0xb7, 0x62, 0x61, 0x75,
- 0x56, 0xa9, 0x50, 0x1a, 0xb0, 0x28, 0xdb, 0x84, 0xed, 0x67, 0x97, 0xff,
- 0x79, 0xcb, 0x05, 0xb3, 0xcd, 0xf9, 0x93, 0xbc, 0xd0, 0xfc, 0x1f, 0xde,
- 0x1d, 0xfd, 0xcc, 0x85, 0x44, 0xcc, 0xd3, 0x19, 0x07, 0xaa, 0x48, 0x32,
- 0xff, 0x43, 0xd1, 0xa4, 0xf7, 0x88, 0x2d, 0x22, 0x91, 0x08, 0x6b, 0x38,
- 0xf1, 0xd8, 0xe0, 0x73, 0x61, 0xce, 0xaa, 0xc1, 0xc2, 0xca, 0xb7, 0x70,
- 0xb9, 0x00, 0x5c, 0x97, 0xc6, 0x8f, 0x4e, 0x54, 0x24, 0x23, 0x5e, 0x40,
- 0xb3, 0x2e, 0x54, 0x8f, 0x34, 0xee, 0xc8, 0xd4, 0xb7, 0xc9, 0xd0, 0xad,
- 0x30, 0x38, 0xd4, 0x01, 0x7d, 0x4a, 0x9e, 0xec, 0x7c, 0x92, 0x23, 0xed,
- 0x87, 0x0b, 0xb2, 0xa3, 0xcc, 0x1b, 0x16, 0x6d, 0x10, 0xb7, 0x20, 0xfa,
- 0x28, 0x0d, 0x2a, 0x7a, 0x4c, 0x4b, 0x2c, 0x23, 0xc7, 0xfb, 0xa0, 0x16,
- 0xa3, 0xf9, 0xe6, 0x81, 0x47, 0x4c, 0x07, 0xbe, 0x8c, 0x20, 0xec, 0xd8,
- 0x8d, 0x11, 0xed, 0xd1, 0x29, 0x6a, 0x2f, 0xd4, 0x93, 0x2e, 0x9c, 0xdc,
- 0x95, 0x1d, 0x13, 0x26, 0xce, 0xa6, 0x0d, 0x31, 0x90, 0xca, 0x3d, 0xc3,
- 0xf5, 0xc7, 0x26, 0xc8, 0x08, 0x63, 0xb1, 0x33, 0x58, 0x8d, 0xba, 0x13,
- 0xda, 0xfc, 0xb2, 0xd3, 0x8f, 0x76, 0x43, 0x4d, 0xf1, 0xbe, 0x71, 0x17,
- 0xdd, 0x44, 0x02, 0x6a, 0x3e, 0x6c, 0xed, 0xb3, 0x2e, 0x89, 0x68, 0x50,
- 0x3f, 0x01, 0x34, 0x96, 0x7e, 0x7a, 0xcf, 0xe7, 0xf2, 0xa4, 0xd1, 0xdd,
- 0xef, 0x32, 0x32, 0x90, 0xc8, 0x95, 0x5a, 0x65, 0x8b, 0x99, 0x9d, 0x9d,
- 0x86, 0xa4, 0x32, 0xd6, 0x0a, 0xdc, 0x63, 0x92, 0x6b, 0x3a, 0x91, 0xf1,
- 0x86, 0x41, 0x4e, 0xbe, 0xc0, 0xf8, 0xca, 0x75, 0x92, 0xa4, 0x48, 0x00,
- 0x21, 0x32, 0x29, 0x72, 0x4b, 0x92, 0x52, 0x59, 0x15, 0x1f, 0x51, 0x0e,
- 0x33, 0x70, 0xd9, 0xf4, 0x6f, 0x79, 0x23, 0x88, 0xcd, 0xeb, 0x44, 0x96,
- 0xd3, 0x2a, 0x2c, 0x2b, 0x46, 0x11, 0x71, 0xf5, 0x11, 0xd4, 0xdd, 0x2d,
- 0x29, 0xbe, 0x28, 0xe0, 0x6d, 0xa6, 0xf5, 0x2e, 0xcc, 0x4b, 0x2d, 0x2f,
- 0x1b, 0x0b, 0xa2, 0x44, 0xe6, 0xdf, 0xa9, 0x57, 0x0f, 0x08, 0x97, 0xb2,
- 0x6b, 0x14, 0xe7, 0x40, 0x6f, 0x1e, 0x44, 0xb9, 0x85, 0x09, 0xd7, 0x0e,
- 0x3f, 0xce, 0xad, 0xc3, 0xce, 0x4e, 0x67, 0xb1, 0xcf, 0xf6, 0x47, 0x23,
- 0x5d, 0x6a, 0xd4, 0x88, 0xd0, 0xf5, 0xe4, 0x15, 0x94, 0xf4, 0x0b, 0x82,
- 0x70, 0x53, 0x18, 0xcd, 0x88, 0xba, 0x23, 0x8d, 0x74, 0xf2, 0xb6, 0x76,
- 0x9e, 0xb9, 0x35, 0xb7, 0x9d, 0x7d, 0xc7, 0xad, 0xf5, 0x3f, 0xb1, 0xb3,
- 0x68, 0x5f, 0xdf, 0x45, 0xfa, 0x7a, 0xde, 0x99, 0xd7, 0xee, 0xee, 0x67,
- 0x82, 0x95, 0x31, 0x94, 0xe2, 0xd9, 0xae, 0x33, 0xe9, 0x8d, 0x99, 0x85,
- 0x79, 0x70, 0x00, 0x93, 0x5c, 0xa4, 0x2f, 0xa1, 0x0a, 0x1a, 0x8c, 0xd7,
- 0xd5, 0x0b, 0x37, 0x2d, 0xa3, 0x34, 0x51, 0x7b, 0x64, 0xa2, 0xe7, 0x63,
- 0x12, 0x9c, 0x1e, 0x5b, 0x37, 0xed, 0x98, 0x46, 0x66, 0xc4, 0xb0, 0x15,
- 0x99, 0x70, 0x3a, 0x0c, 0xaf, 0x9f, 0xcf, 0x6c, 0x3f, 0x76, 0xe4, 0xa4,
- 0xd4, 0x30, 0x5c, 0xd7, 0xd0, 0xe7, 0x08, 0x42, 0x23, 0x5e, 0x90, 0xbf,
- 0x84, 0x01, 0x45, 0xc2, 0x49, 0xf9, 0x6d, 0xd7, 0x0b, 0x1f, 0xbf, 0x33,
- 0xa2, 0x62, 0xa9, 0x46, 0x32, 0x4c, 0x4e, 0xa1, 0x84, 0xb5, 0x50, 0x4b,
- 0xa1, 0xca, 0xd2, 0x71, 0xb7, 0x38, 0xf3, 0xfe, 0x69, 0xdf, 0x79, 0xe5,
- 0xad, 0x89, 0x0e, 0x4b, 0xfd, 0x68, 0x5b, 0x7a, 0x7c, 0x2c, 0x0b, 0x51,
- 0x1f, 0x79, 0x86, 0xa0, 0x05, 0x4a, 0xe9, 0x01, 0xf0, 0x6a, 0x97, 0xc5,
- 0x9a, 0x33, 0xb5, 0x69, 0x03, 0x04, 0x2e, 0xc1, 0x49, 0xbc, 0x3b, 0xc8,
- 0x51, 0xf2, 0xdf, 0x97, 0xc4, 0x90, 0x70, 0xeb, 0x12, 0x74, 0x13, 0xff,
- 0xa9, 0xef, 0x31, 0x06, 0x08, 0x15, 0x2d, 0xc2, 0xad, 0xec, 0x92, 0x5e,
- 0xe4, 0x64, 0xd8, 0xf5, 0x77, 0x19, 0x88, 0x28, 0x10, 0xc0, 0x6c, 0x4d,
- 0x40, 0x00, 0x86, 0x92, 0xd8, 0x66, 0xe1, 0x30, 0x40, 0x50, 0xee, 0x22,
- 0xe1, 0x44, 0xfa, 0xd0, 0x2f, 0x64, 0x3b, 0x57, 0xae, 0x6f, 0xcb, 0x8d,
- 0xbb, 0x00, 0x30, 0x74, 0xe9, 0xa4, 0x0b, 0xb1, 0x10, 0x3c, 0xdf, 0xde,
- 0x0e, 0x9b, 0x4b, 0xc7, 0xe5, 0xad, 0x46, 0x51, 0x0a, 0xb6, 0x09, 0x5e,
- 0x61, 0xa5, 0x19, 0xd2, 0x45, 0x4d, 0x42, 0xea, 0xe0, 0x92, 0x6c, 0x02,
- 0xb4, 0x62, 0xea, 0xa3, 0xf0, 0xd6, 0x8d, 0x4f, 0xe5, 0xf7, 0xc0, 0x5a,
- 0x91, 0x35, 0x6b, 0x9f, 0x45, 0x86, 0x61, 0xd1, 0x12, 0x02, 0xa9, 0xa6,
- 0xa5, 0xc3, 0x96, 0x26, 0x5e, 0xfb, 0x60, 0x64, 0x82, 0x9b, 0xeb, 0x75,
- 0xf3, 0x22, 0x42, 0x11, 0xc9, 0xe8, 0xe2, 0xf4, 0x3c, 0x11, 0x22, 0x0b,
- 0xd9, 0x2e, 0xd2, 0x05, 0xe9, 0x09, 0x1b, 0x49, 0xda, 0x8f, 0x38, 0xc6,
- 0xad, 0xe1, 0x99, 0x73, 0x18, 0x09, 0xaf, 0xcb, 0xf5, 0xfa, 0xd2, 0x05,
- 0xb1, 0xc9, 0xdc, 0xbe, 0x4b, 0x2b, 0x20, 0x32, 0x69, 0x35, 0x13, 0x2d,
- 0x8d, 0xec, 0xbd, 0xc4, 0x07, 0xed, 0x74, 0x09, 0x62, 0x67, 0x2b, 0x2b,
- 0xd1, 0x91, 0xd8, 0x5b, 0x29, 0x70, 0x53, 0x6c, 0x62, 0xd6, 0x59, 0xd5,
- 0xa5, 0x45, 0x3e, 0x44, 0xa7, 0xae, 0x5e, 0x0d, 0xfb, 0xb5, 0x87, 0x9d,
- 0x70, 0x3e, 0x7c, 0x0e, 0xc4, 0x26, 0x09, 0x12, 0x10, 0x1a, 0xc2, 0x9d,
- 0x10, 0x16, 0xfd, 0x9c, 0x18, 0xc9, 0x88, 0xa3, 0x29, 0x4b, 0x0d, 0xc2,
- 0x50, 0x69, 0xd1, 0x49, 0x59, 0xdb, 0x6e, 0x9d, 0xcf, 0x4e, 0xcf, 0x2f,
- 0x12, 0x1d, 0x1c, 0x5f, 0x9c, 0xf8, 0xa8, 0x73, 0x84, 0x08, 0xda, 0x0b,
- 0x1a, 0x9c, 0x03, 0xdd, 0x08, 0xb4, 0x52, 0x91, 0x08, 0x1b, 0x6d, 0x42,
- 0xdb, 0x20, 0xc0, 0xcf, 0xea, 0x41, 0xa3, 0x9c, 0x00, 0xcf, 0x6b, 0x79,
- 0x8e, 0xc4, 0x6b, 0x11, 0x83, 0x8e, 0x3b, 0x20, 0x9d, 0x4c, 0xf3, 0x6c,
- 0x27, 0x42, 0x1d, 0xa4, 0x40, 0x9f, 0x1f, 0x51, 0xf5, 0xec, 0x8b, 0x6b,
- 0xfe, 0x2d, 0x18, 0x39, 0x5b, 0x0f, 0xe5, 0xc3, 0x68, 0xd8, 0x04, 0xa8,
- 0x83, 0x32, 0x50, 0x28, 0x2c, 0x9a, 0xda, 0xb7, 0xc6, 0x61, 0x6f, 0xcd,
- 0x9e, 0x79, 0xd9, 0xc6, 0xe0, 0x9c, 0x42, 0x2b, 0x38, 0xe4, 0xf8, 0xa0,
- 0x27, 0x9d, 0xf4, 0xcc, 0x9d, 0xcb, 0x87, 0xa2, 0xac, 0x6e, 0xbc, 0x16,
- 0x9e, 0x7b, 0xdc, 0x82, 0xb8, 0xbb, 0x34, 0x70, 0xac, 0xfe, 0x5e, 0xfa,
- 0xd0, 0x06, 0x96, 0x5e, 0x65, 0x85, 0x12, 0x06, 0x3f, 0xe7, 0xda, 0x79,
- 0x61, 0xbd, 0x24, 0x2a, 0x1f, 0x79, 0x43, 0xa1, 0x8f, 0x35, 0xc9, 0x13,
- 0x41, 0x65, 0x1d, 0xb2, 0x7b, 0xf6, 0xd2, 0xae, 0x22, 0x29, 0x13, 0x36,
- 0x6e, 0x81, 0xa7, 0xef, 0x5d, 0x46, 0x14, 0xf8, 0x91, 0x17, 0xcb, 0x4c,
- 0x2c, 0x66, 0x69, 0x35, 0xcb, 0x91, 0x1e, 0x34, 0x8e, 0x59, 0x77, 0x6d,
- 0xc2, 0xb2, 0xeb, 0x47, 0x6e, 0xa2, 0xe3, 0x93, 0x23, 0xb7, 0x5b, 0x8c,
- 0xaa, 0x85, 0x93, 0xec, 0x84, 0x3c, 0x73, 0x70, 0x0b, 0x7b, 0x5d, 0x0c,
- 0x93, 0x33, 0xaa, 0x1e, 0x06, 0xa7, 0x4d, 0xfd, 0x6f, 0xae, 0x35, 0x3e,
- 0x2c, 0x30, 0xc6, 0x98, 0xfb, 0x13, 0xd2, 0x69, 0x5e, 0x98, 0xcd, 0xc5,
- 0x27, 0xf4, 0xab, 0x57, 0xf8, 0x29, 0x98, 0xf2, 0x2b, 0xf7, 0x72, 0x6d,
- 0x26, 0x62, 0xf4, 0xb4, 0xee, 0x23, 0xcf, 0x85, 0xb6, 0x8c, 0x12, 0xc7,
- 0x05, 0xe8, 0xcb, 0x86, 0xf9, 0x33, 0x9d, 0xe9, 0x8a, 0x0b, 0x34, 0x4c,
- 0xb9, 0x85, 0x4b, 0x7d, 0x46, 0xe5, 0x58, 0x7e, 0xce, 0x35, 0xc5, 0x97,
- 0xc2, 0x3e, 0xaf, 0x13, 0x02, 0xba, 0xcd, 0xb9, 0x19, 0xa7, 0x93, 0x1b,
- 0xd3, 0x56, 0x41, 0x1c, 0x77, 0xa6, 0xe6, 0xf2, 0x56, 0x6a, 0x0e, 0x16,
- 0x56, 0xf0, 0xed, 0x42, 0x6c, 0xd5, 0x4e, 0x29, 0xb4, 0xe7, 0x4c, 0x8d,
- 0x96, 0x74, 0xec, 0x3d, 0xd6, 0x1a, 0x1d, 0x75, 0xec, 0x12, 0x5b, 0x68,
- 0xbb, 0xc9, 0x34, 0x64, 0xae, 0x79, 0x5f, 0xba, 0x7b, 0xfe, 0xc2, 0x35,
- 0x75, 0x49, 0x08, 0x57, 0xb6, 0x2d, 0xc7, 0x83, 0x1c, 0x9c, 0x7e, 0x6e,
- 0x1f, 0x13, 0x45, 0x81, 0xef, 0xb2, 0x71, 0x04, 0xa6, 0xd7, 0x5f, 0x13,
- 0x26, 0x86, 0x8b, 0x92, 0x34, 0x9f, 0xe2, 0xc1, 0x01, 0x5a, 0x0c, 0x39,
- 0x2a, 0x8e, 0x6d, 0x10, 0x5c, 0xad, 0xc0, 0x42, 0x5d, 0xb0, 0xb6, 0x29,
- 0x0a, 0xfa, 0x3c, 0xbd, 0x0f, 0xae, 0xfa, 0xf9, 0x72, 0x2e, 0x79, 0xfc,
- 0x5e, 0x4f, 0x9f, 0x8b, 0x36, 0x7b, 0x53, 0x18, 0x92, 0xb4, 0x70, 0x7f,
- 0x2e, 0x6a, 0xbd, 0x54, 0x65, 0xc9, 0x7a, 0xd6, 0x0c, 0xf1, 0x20, 0x74,
- 0xd6, 0x66, 0x76, 0x84, 0xd8, 0x99, 0x14, 0x55, 0x8e, 0x0b, 0x59, 0x04,
- 0x45, 0x55, 0x2c, 0x4b, 0x0f, 0x86, 0x91, 0x16, 0x5c, 0x9e, 0xe3, 0xaf,
- 0xd4, 0xa5, 0x17, 0xfa, 0xa6, 0xab, 0xec, 0x6f, 0xa8, 0x89, 0x38, 0xe4,
- 0x4b, 0x87, 0x81, 0x90, 0x78, 0x96, 0xe4, 0x9a, 0x77, 0x2c, 0xef, 0xf9,
- 0x2b, 0x31, 0x55, 0x88, 0x2a, 0xac, 0x75, 0xfa, 0xba, 0x96, 0xe6, 0x17,
- 0x3b, 0x2e, 0x64, 0x3f, 0xcb, 0xaa, 0xf5, 0x9a, 0xb9, 0x83, 0x97, 0x3c,
- 0x6f, 0x18, 0xdc, 0x68, 0xf4, 0x4d, 0xf2, 0xee, 0xf0, 0x05, 0xa5, 0x6f,
- 0x5e, 0x65, 0x15, 0xd5, 0xc0, 0x74, 0xba, 0xd8, 0xe9, 0xb7, 0x5e, 0x63,
- 0xbb, 0xce, 0x88, 0x24, 0x57, 0x6d, 0x2e, 0xa7, 0x17, 0xa8, 0xcc, 0xc5,
- 0x03, 0x61, 0xc0, 0x5d, 0xf5, 0xc5, 0x7d, 0xc2, 0x66, 0x10, 0x5a, 0x48,
- 0x85, 0x47, 0x64, 0xd1, 0xa5, 0x1b, 0xff, 0xdf, 0x66, 0x62, 0x2f, 0x9e,
- 0x39, 0x26, 0x56, 0x3d, 0x2c, 0x08, 0xa3, 0xbd, 0xb8, 0x22, 0x89, 0x3a,
- 0x72, 0xa2, 0x5e, 0x30, 0xe3, 0x3c, 0xe0, 0x73, 0x4f, 0xe2, 0x6c, 0xf8,
- 0x1a, 0xa0, 0xe8, 0xe0, 0xed, 0xf0, 0xde, 0x7b, 0xe1, 0xab, 0x93, 0x46,
- 0x20, 0xc7, 0xbd, 0x68, 0xd6, 0x0f, 0xf5, 0x5f, 0x49, 0x56, 0xf1, 0x9e,
- 0x7d, 0x69, 0x9f, 0x25, 0xe3, 0x41, 0x5e, 0x78, 0x75, 0x2c, 0x56, 0xbc,
- 0x21, 0x42, 0x30, 0x8b, 0x06, 0x2e, 0x9c, 0x80, 0x25, 0x1f, 0x6f, 0xed,
- 0xbd, 0x57, 0x5e, 0xb5, 0xb5, 0x65, 0x14, 0x59, 0x73, 0xb5, 0xc3, 0x69,
- 0x52, 0xf9, 0xe2, 0xda, 0x3f, 0x9c, 0x2f, 0xf9, 0xa6, 0x3e, 0x23, 0x2c,
- 0x84, 0xd6, 0x7e, 0x2a, 0x13, 0xcc, 0x7c, 0x17, 0x9c, 0x9e, 0x75, 0xa6,
- 0xfd, 0x83, 0x7d, 0x7d, 0x23, 0x28, 0x6b, 0x4d, 0xd4, 0xee, 0x75, 0xb2,
- 0x23, 0x67, 0xc6, 0x4c, 0xb9, 0xbc, 0x2a, 0xf2, 0x7f, 0x10, 0xa1, 0xe9,
- 0x0d, 0xad, 0x35, 0x48, 0xbc, 0xc7, 0x77, 0x85, 0x61, 0xdc, 0xa6, 0xb3,
- 0x5c, 0x98, 0x22, 0xd9, 0xd1, 0xdd, 0x03, 0xcf, 0x84, 0x6a, 0xef, 0x73,
- 0x3a, 0xa2, 0xd0, 0x02, 0x50, 0x8d, 0x8a, 0x3c, 0x38, 0x59, 0x0b, 0x5a,
- 0xe3, 0xe5, 0x73, 0x91, 0xbd, 0x54, 0x48, 0xa6, 0x7b, 0x89, 0x16, 0x62,
- 0x06, 0xe4, 0xec, 0x2e, 0x9b, 0x7e, 0x29, 0x57, 0x9f, 0x6c, 0xa5, 0xad,
- 0x43, 0x52, 0x69, 0x09, 0x1d, 0xfa, 0xf5, 0x2e, 0x2f, 0x24, 0x23, 0x27,
- 0x78, 0xfd, 0xe5, 0x0a, 0x13, 0x54, 0xcd, 0xf7, 0xe6, 0x11, 0x68, 0xc9,
- 0x7b, 0xfe, 0x33, 0x7b, 0x12, 0x3c, 0xd8, 0x71, 0x4d, 0x31, 0x41, 0x20,
- 0x99, 0xd6, 0x7e, 0xd0, 0x83, 0x04, 0xb5, 0x7f, 0xe1, 0x4a, 0x1c, 0x47,
- 0xd2, 0xdf, 0x2e, 0x6d, 0xf7, 0xb3, 0xf2, 0x2a, 0xc9, 0xbd, 0x63, 0xfc,
- 0x92, 0x49, 0xea, 0x2d, 0x6a, 0xfa, 0xe9, 0x39, 0x20, 0x6e, 0xe2, 0x97,
- 0xde, 0x72, 0x4f, 0xbf, 0x12, 0xda, 0xd0, 0xfb, 0x52, 0xc5, 0xd4, 0x95,
- 0x6f, 0x7c, 0xb6, 0xed, 0x0b, 0xad, 0x53, 0xb2, 0xd4, 0x33, 0xa8, 0xe1,
- 0xca, 0x17, 0x98, 0x32, 0x8e, 0xcd, 0x35, 0x72, 0x65, 0x88, 0x1a, 0xcf,
- 0x38, 0x34, 0x4f, 0xf7, 0xd8, 0x6e, 0x8b, 0xe9, 0x5e, 0xf8, 0x22, 0x54,
- 0x72, 0x7c, 0xe8, 0x3d, 0xf8, 0xcc, 0x4d, 0x30, 0x9d, 0x91, 0x34, 0xf0,
- 0xc0, 0x86, 0x88, 0x5a, 0xaa, 0x9f, 0x79, 0x8f, 0x3e, 0x97, 0xc4, 0x0a,
- 0xce, 0x65, 0xc2, 0xfa, 0x07, 0xcf, 0x30, 0x39, 0x1c, 0x20, 0x0f, 0xaa,
- 0x01, 0x06, 0x40, 0xa1, 0xfe, 0x82, 0xee, 0xde, 0x7f, 0xf6, 0xf2, 0x91,
- 0x67, 0xe5, 0xd2, 0xac, 0xed, 0x55, 0xef, 0xbd, 0xf7, 0x59, 0x78, 0xcc,
- 0x55, 0x2d, 0x50, 0xa8, 0x12, 0x39, 0x69, 0xc9, 0x06, 0x41, 0xdc, 0xfd,
- 0x9b, 0x5a, 0x7e, 0x2a, 0xca, 0x07, 0xab, 0xff, 0xcd, 0x1f, 0xef, 0xe7,
- 0x3e, 0xde, 0x09, 0x9b, 0x7d, 0x6c, 0x05, 0x5e, 0xbf, 0x2e, 0x9f, 0x8b,
- 0x70, 0xc6, 0xea, 0x78, 0x2d, 0xf0, 0x9e, 0x1b, 0x39, 0x62, 0x59, 0x38,
- 0xce, 0xc1, 0x8a, 0xa0, 0xc0, 0x44, 0x6a, 0xb4, 0xb1, 0x8c, 0xee, 0x1b,
- 0xb3, 0xa9, 0xa0, 0x0e, 0xcf, 0x78, 0xb6, 0xdd, 0x39, 0x06, 0xf5, 0xf5,
- 0x92, 0x35, 0x6f, 0x3b, 0x23, 0x07, 0x4f, 0xe4, 0xbd, 0xb6, 0xeb, 0xb8,
- 0x97, 0x5c, 0xfb, 0x0c, 0x3a, 0x73, 0x40, 0x09, 0x6c, 0xac, 0x9e, 0x27,
- 0x20, 0x45, 0xc4, 0xb7, 0x57, 0x5c, 0xf8, 0x5b, 0xc1, 0x47, 0x37, 0xd2,
- 0x78, 0x2a, 0xbe, 0xa0, 0x87, 0x78, 0xdd, 0x88, 0x68, 0x43, 0x21, 0xda,
- 0x66, 0x97, 0xae, 0xb3, 0xc9, 0x8d, 0x1e, 0x19, 0xdb, 0x46, 0xe4, 0xad,
- 0xe7, 0x76, 0x69, 0x89, 0xfa, 0xce, 0xce, 0x8f, 0xba, 0x8a, 0x80, 0x7b,
- 0x94, 0xa9, 0xe6, 0xfc, 0x62, 0x74, 0xb6, 0x47, 0xe3, 0x65, 0x1f, 0x8c,
- 0x39, 0x10, 0x07, 0xa3, 0xec, 0xef, 0x92, 0x77, 0x5a, 0xbb, 0xa7, 0x5f,
- 0xae, 0x78, 0x7a, 0x24, 0x91, 0x45, 0xc7, 0x53, 0xe2, 0xbe, 0x66, 0x1f,
- 0xfc, 0x97, 0x3e, 0x93, 0x0c, 0x7e, 0xb5, 0xee, 0xb2, 0xf1, 0x88, 0x46,
- 0x66, 0x93, 0x3c, 0xdc, 0xc3, 0x9f, 0x3b, 0x9b, 0xcd, 0xf5, 0xb2, 0xb8,
- 0xb1, 0xf2, 0xa2, 0x04, 0x6a, 0xe9, 0x06, 0xbb, 0x17, 0x5e, 0xe9, 0xd1,
- 0xf0, 0x50, 0xa4, 0xac, 0xfb, 0xbb, 0x2f, 0x96, 0x0a, 0x8d, 0xa2, 0x64,
- 0xff, 0x91, 0xe1, 0xaf, 0x4b, 0x6f, 0x0d, 0x7e, 0xf8, 0x81, 0x59, 0x74,
- 0xa9, 0x91, 0x09, 0xe2, 0x19, 0xb0, 0xc5, 0x67, 0x0d, 0x4b, 0xe3, 0x32,
- 0x0a, 0x74, 0x3a, 0x60, 0x4f, 0xaf, 0xb2, 0x59, 0x46, 0x38, 0xd2, 0xac,
- 0x66, 0x80, 0x2e, 0x63, 0x59, 0x6a, 0x14, 0xb4, 0x0a, 0xa7, 0x08, 0x25,
- 0x83, 0xc2, 0x1c, 0x57, 0x50, 0xa4, 0xa3, 0x98, 0x9b, 0xcc, 0x86, 0xed,
- 0x7f, 0xb8, 0xf8, 0xe6, 0xf4, 0x7c, 0x94, 0x6c, 0x11, 0xe0, 0xdf, 0xc5,
- 0xf9, 0xf1, 0x57, 0x1f, 0x8c, 0xf6, 0x6e, 0xbd, 0x2a, 0x87, 0xa9, 0xd1,
- 0xea, 0x67, 0x14, 0x17, 0x9a, 0x15, 0x66, 0x1f, 0xae, 0xb4, 0xc2, 0x21,
- 0x22, 0x65, 0xe8, 0xaa, 0x2b, 0x2b, 0x2e, 0xae, 0x83, 0x34, 0xa2, 0xeb,
- 0x52, 0x16, 0x93, 0xe3, 0xbb, 0x0a, 0x0e, 0xfe, 0x2f, 0x9d, 0x6a, 0x9a,
- 0x77, 0xf0, 0x0a, 0xd5, 0x39, 0x9a, 0x5c, 0x7c, 0xb3, 0xff, 0xfe, 0xdb,
- 0x91, 0x22, 0x9e, 0x7f, 0xff, 0xfd, 0xf7, 0xbe, 0xd3, 0x7e, 0x6f, 0x6b,
- 0x0b, 0x12, 0xe2, 0x75, 0x7a, 0x7f, 0x3f, 0xac, 0xb3, 0xb5, 0xb5, 0xb7,
- 0xce, 0xd5, 0xe6, 0xca, 0x53, 0xd6, 0x4b, 0x23, 0x18, 0x98, 0xaf, 0xb7,
- 0x16, 0xcb, 0x31, 0x95, 0xc3, 0xdc, 0x5a, 0x36, 0xf9, 0xcc, 0xdc, 0x27,
- 0x59, 0x8d, 0xb7, 0xb7, 0xd6, 0xd6, 0x46, 0x47, 0x47, 0xc9, 0xfe, 0xc9,
- 0xe8, 0xd4, 0x7b, 0x77, 0x63, 0x67, 0xd3, 0x08, 0x4e, 0x57, 0x59, 0xb3,
- 0x41, 0xd8, 0x99, 0x27, 0xfb, 0x17, 0xa4, 0xb1, 0x7e, 0x77, 0x74, 0x3e,
- 0x3a, 0x3e, 0x7d, 0x4f, 0xbb, 0x43, 0x71, 0x75, 0xe9, 0xec, 0x8e, 0xc2,
- 0x2a, 0x2f, 0x73, 0x00, 0x99, 0xdc, 0x69, 0xad, 0x49, 0x42, 0x64, 0x36,
- 0x92, 0x1d, 0x0b, 0xe2, 0x1c, 0x05, 0xa1, 0x35, 0xee, 0x39, 0x7a, 0xb4,
- 0x21, 0xbd, 0x51, 0x78, 0x1a, 0xad, 0x80, 0x35, 0x5b, 0x71, 0x00, 0x4b,
- 0x36, 0xe6, 0x68, 0xdd, 0x3e, 0xa7, 0xff, 0xc3, 0x4d, 0xe1, 0x85, 0xf7,
- 0x45, 0x27, 0x3e, 0x3a, 0xa6, 0x6a, 0x13, 0xc9, 0x87, 0xd1, 0xfe, 0xd7,
- 0x47, 0xf4, 0xe8, 0xd7, 0x59, 0xe3, 0xb6, 0x83, 0x6b, 0x62, 0x52, 0x27,
- 0xef, 0xb3, 0xa6, 0x9e, 0xa4, 0x0b, 0xca, 0x72, 0x36, 0xdd, 0x0c, 0xf8,
- 0x1a, 0xf1, 0xda, 0x66, 0x51, 0xde, 0x15, 0x0e, 0x2d, 0xe4, 0x79, 0x54,
- 0xf5, 0xf4, 0xdb, 0x3d, 0x3f, 0xda, 0x3f, 0x7c, 0x77, 0xa4, 0x21, 0xdf,
- 0x7c, 0xed, 0x9a, 0x46, 0xaf, 0x4b, 0x2a, 0xe4, 0x6e, 0x0d, 0xd9, 0x74,
- 0xb5, 0xd3, 0xe2, 0x9b, 0x6f, 0xa8, 0xac, 0x66, 0xbc, 0x3b, 0xb7, 0x51,
- 0x78, 0x76, 0x78, 0x99, 0x6f, 0x71, 0xeb, 0xda, 0x5f, 0x6a, 0x97, 0x44,
- 0x81, 0x9e, 0x45, 0xdc, 0x65, 0x9b, 0x04, 0x6c, 0x19, 0x9f, 0x6f, 0x6f,
- 0x6f, 0x3f, 0x32, 0x0f, 0x68, 0x03, 0x72, 0x69, 0x9a, 0xa9, 0xec, 0xd1,
- 0xe3, 0x5b, 0xae, 0x7d, 0x37, 0xe2, 0x99, 0xa4, 0x94, 0x53, 0xe5, 0xab,
- 0x82, 0x6d, 0x28, 0x79, 0x93, 0xc5, 0x87, 0x3c, 0x29, 0x4b, 0xbb, 0x03,
- 0xad, 0xc5, 0x99, 0x12, 0x34, 0x77, 0xde, 0x68, 0x38, 0x23, 0xde, 0xe0,
- 0x81, 0x1b, 0x05, 0x06, 0x31, 0x65, 0xd5, 0x43, 0xb7, 0x49, 0xfa, 0xc6,
- 0xb4, 0x49, 0xff, 0x0c, 0xcb, 0xea, 0x6a, 0x6b, 0xbe, 0x07, 0x89, 0xc4,
- 0x3c, 0xf4, 0x96, 0x90, 0x26, 0x12, 0x23, 0xd9, 0xda, 0x28, 0xe7, 0x9a,
- 0x16, 0x96, 0xd2, 0x31, 0x3e, 0x61, 0x5c, 0xbf, 0x60, 0x15, 0x38, 0xa0,
- 0xe9, 0x52, 0x67, 0xae, 0xe5, 0xef, 0x22, 0x9d, 0xd4, 0xb4, 0x61, 0x64,
- 0x31, 0x1c, 0x1a, 0x06, 0x62, 0x7a, 0xa1, 0x98, 0x33, 0x90, 0x88, 0xf9,
- 0xb5, 0x32, 0x24, 0x33, 0x6c, 0xee, 0xc1, 0x36, 0xa5, 0x12, 0x23, 0xe3,
- 0xee, 0x91, 0x17, 0x7b, 0x41, 0xb9, 0x80, 0x15, 0x6a, 0x4d, 0xa0, 0x07,
- 0xca, 0x2f, 0x94, 0x28, 0x78, 0x1b, 0xc0, 0x43, 0x0d, 0x77, 0xfb, 0x1c,
- 0x0c, 0x40, 0x3f, 0xb5, 0xa5, 0x96, 0x4f, 0xe8, 0xdc, 0x9b, 0x14, 0xaf,
- 0x7e, 0x21, 0xb7, 0xac, 0x47, 0x3b, 0x23, 0x33, 0x8a, 0xa0, 0xaf, 0xa5,
- 0x2b, 0x26, 0x59, 0x73, 0x77, 0xf5, 0xb5, 0x39, 0xbf, 0x43, 0xaf, 0x5c,
- 0x0b, 0x61, 0x75, 0x6d, 0x21, 0x39, 0xe9, 0x93, 0x7b, 0x3a, 0x38, 0x93,
- 0xdf, 0x28, 0x21, 0x32, 0xbf, 0xa5, 0x25, 0xb8, 0xc9, 0x30, 0x7b, 0x5f,
- 0x31, 0x78, 0x64, 0x30, 0x7b, 0x66, 0x15, 0xe8, 0x8d, 0xff, 0xb5, 0x35,
- 0xac, 0xeb, 0xeb, 0xad, 0x7c, 0xfa, 0x71, 0x5a, 0xa7, 0x14, 0xd3, 0xb4,
- 0x1c, 0x07, 0x1f, 0x0f, 0xcd, 0x87, 0xc9, 0x4f, 0x2d, 0xae, 0x5f, 0x4f,
- 0xe2, 0x33, 0xf9, 0x5f, 0x5b, 0x14, 0x3f, 0x8a, 0xe2, 0x53, 0xde, 0xc2,
- 0x45, 0x78, 0x87, 0x99, 0x15, 0x07, 0x10, 0x9b, 0xc3, 0x18, 0xa7, 0x8c,
- 0x9e, 0xd0, 0xda, 0x8f, 0xbb, 0xdb, 0xdb, 0x3b, 0x7b, 0x3b, 0x9f, 0xbf,
- 0xda, 0xde, 0xdb, 0xd9, 0xd9, 0xd9, 0xdd, 0xdb, 0xd9, 0xdb, 0xdb, 0xdd,
- 0xfe, 0x79, 0xab, 0xb7, 0xb6, 0x76, 0x78, 0xfa, 0xfd, 0xfb, 0x93, 0xd3,
- 0xfd, 0xc3, 0xe4, 0xe2, 0x34, 0xd9, 0x87, 0xcd, 0x29, 0x72, 0xc8, 0x81,
- 0x52, 0x4f, 0x29, 0x68, 0x9c, 0xfe, 0xee, 0x55, 0x52, 0x17, 0x03, 0x89,
- 0x0d, 0xbc, 0xc1, 0xb2, 0x74, 0x57, 0xac, 0x84, 0x4e, 0x41, 0x2d, 0x0d,
- 0xaf, 0x9b, 0xf9, 0xd3, 0xec, 0xec, 0x53, 0x7a, 0xee, 0xb3, 0x23, 0xd8,
- 0xa9, 0x8d, 0x18, 0x8e, 0x92, 0xad, 0x24, 0x79, 0x88, 0x33, 0x45, 0x5c,
- 0xa8, 0x36, 0x25, 0x61, 0x83, 0xe3, 0x86, 0x5c, 0x01, 0x70, 0x2e, 0x2c,
- 0x5f, 0x87, 0x58, 0x19, 0x28, 0xf4, 0x2c, 0x3e, 0x7a, 0x5c, 0xf0, 0x24,
- 0x10, 0x6d, 0x06, 0x13, 0x3c, 0x5d, 0x39, 0x25, 0x73, 0x11, 0x65, 0xf7,
- 0x98, 0x75, 0x9b, 0x71, 0x70, 0xa4, 0xac, 0x9b, 0x1d, 0x50, 0xd8, 0x55,
- 0x11, 0xce, 0x2b, 0x1d, 0x32, 0x62, 0x8b, 0x22, 0xdd, 0x51, 0x3f, 0xca,
- 0x4f, 0x5c, 0x17, 0xf4, 0x8d, 0x7f, 0x09, 0x6d, 0x59, 0xdb, 0x22, 0x0f,
- 0xe0, 0xc3, 0xe8, 0xf8, 0xfd, 0xd7, 0xf0, 0x1e, 0x7e, 0x7f, 0x7a, 0x7e,
- 0x38, 0x32, 0xcd, 0xd2, 0xed, 0xbc, 0x06, 0xf3, 0x12, 0x1d, 0x63, 0x19,
- 0x15, 0x1f, 0x0a, 0xea, 0xfa, 0xcf, 0x50, 0xd8, 0xa6, 0x7d, 0x9b, 0x36,
- 0x8e, 0x61, 0x7a, 0xc2, 0x36, 0xe5, 0x82, 0xc7, 0x59, 0x1e, 0x08, 0x81,
- 0x5f, 0xff, 0x72, 0x9e, 0x52, 0xad, 0x90, 0x6c, 0xc8, 0x51, 0xbb, 0x08,
- 0xf3, 0xda, 0xa2, 0xbc, 0x84, 0x2d, 0x12, 0xfa, 0xb7, 0x9a, 0x12, 0xcc,
- 0x03, 0xad, 0x94, 0x95, 0x8d, 0x2d, 0x6a, 0xad, 0x08, 0x9d, 0xba, 0xcb,
- 0x59, 0x7a, 0x85, 0x0e, 0xc3, 0x03, 0xe9, 0x75, 0x26, 0xdd, 0x7f, 0x6a,
- 0x97, 0xc4, 0xf3, 0xd0, 0xde, 0x31, 0x08, 0x00, 0xf0, 0x50, 0x48, 0x70,
- 0x17, 0xaf, 0x07, 0x4b, 0x4c, 0xe4, 0x22, 0x46, 0x44, 0x09, 0x15, 0x94,
- 0xed, 0x56, 0x83, 0x41, 0x85, 0x4f, 0xc6, 0xd5, 0x30, 0xf2, 0xff, 0xc0,
- 0xc3, 0xe7, 0x60, 0xc5, 0x88, 0x5a, 0xf2, 0xec, 0x0f, 0xb5, 0x0b, 0x89,
- 0x43, 0xcd, 0x0f, 0xa8, 0xdb, 0xbc, 0xe4, 0x34, 0x18, 0x20, 0xcb, 0xd4,
- 0x1a, 0x6b, 0x25, 0x22, 0x5c, 0x8f, 0xaa, 0x7a, 0x51, 0xa4, 0x44, 0x4f,
- 0xc1, 0x22, 0x5c, 0xf1, 0x00, 0xe7, 0xde, 0xac, 0x1b, 0x33, 0x94, 0x94,
- 0xea, 0xc3, 0x71, 0xc5, 0x78, 0xc1, 0x0e, 0x36, 0xa2, 0x3c, 0x67, 0x78,
- 0xf6, 0x34, 0xde, 0x82, 0x5b, 0xc9, 0x6b, 0x46, 0x60, 0xb6, 0x89, 0xf0,
- 0xc4, 0x79, 0x19, 0xd7, 0x66, 0x4d, 0xdc, 0xd9, 0x8e, 0xc9, 0x3b, 0xb3,
- 0x19, 0x31, 0x68, 0x23, 0x81, 0x1a, 0xee, 0xc9, 0x94, 0x23, 0xe9, 0x88,
- 0x5e, 0x25, 0xc7, 0xd6, 0xb2, 0xf9, 0x95, 0xe7, 0x03, 0x3e, 0xdb, 0x4e,
- 0x41, 0x5e, 0x43, 0x16, 0x92, 0x85, 0xa1, 0xf0, 0x96, 0x87, 0x83, 0xba,
- 0xdc, 0xab, 0xb4, 0x17, 0x79, 0x53, 0x67, 0xb3, 0x4b, 0x01, 0x0d, 0x69,
- 0x60, 0x14, 0xa4, 0xa9, 0xb8, 0x06, 0xd6, 0x34, 0x6d, 0x84, 0x7c, 0x72,
- 0x85, 0x85, 0x32, 0x28, 0x85, 0x67, 0x5c, 0x81, 0x95, 0x0a, 0x0a, 0x49,
- 0x9b, 0x51, 0xb0, 0xdb, 0x6d, 0xa8, 0x45, 0x50, 0xd6, 0x12, 0x5b, 0xbf,
- 0xa5, 0x33, 0x05, 0x5b, 0xd3, 0x02, 0x35, 0x05, 0x40, 0x1d, 0xde, 0x83,
- 0xcb, 0xb1, 0x59, 0x6d, 0xfb, 0x1c, 0xad, 0x1d, 0x02, 0xcf, 0xa8, 0x39,
- 0x78, 0x00, 0xf1, 0xbc, 0x8d, 0xb9, 0x5c, 0x06, 0xd0, 0x28, 0xb9, 0x00,
- 0xcc, 0x98, 0x83, 0x86, 0x34, 0xa7, 0x65, 0x6d, 0x57, 0x74, 0x91, 0x1b,
- 0x1d, 0x87, 0x2f, 0xb8, 0x35, 0x44, 0x24, 0x86, 0xc7, 0x50, 0x38, 0xd2,
- 0xea, 0x73, 0xf8, 0xf4, 0x11, 0x0c, 0x87, 0xa4, 0x4a, 0xc0, 0xec, 0x81,
- 0x4f, 0x49, 0x5e, 0x3c, 0x7e, 0x18, 0x65, 0x10, 0x9f, 0xd4, 0x31, 0xe6,
- 0x2a, 0x80, 0x12, 0x30, 0x75, 0xbb, 0x60, 0x30, 0x76, 0xaf, 0x23, 0xdf,
- 0xa0, 0x13, 0x36, 0x4f, 0xa3, 0x6b, 0xc5, 0xae, 0xe2, 0x20, 0x70, 0x82,
- 0xd8, 0x5e, 0xf2, 0x55, 0x5a, 0xe7, 0x93, 0x7e, 0x72, 0x98, 0x5f, 0x01,
- 0xe1, 0x80, 0x53, 0x4e, 0xcc, 0x1b, 0xae, 0xbe, 0xd6, 0x06, 0x67, 0x4c,
- 0x6c, 0x0e, 0x93, 0xef, 0xb5, 0x24, 0x9e, 0xb9, 0x8e, 0x81, 0x0e, 0x49,
- 0x26, 0x5a, 0x6a, 0xad, 0x85, 0x36, 0x22, 0xb6, 0x75, 0xbf, 0x18, 0x38,
- 0x3a, 0x71, 0xb5, 0x33, 0xb0, 0xab, 0x69, 0x7d, 0x63, 0xbd, 0x13, 0xd8,
- 0x2b, 0x39, 0xa2, 0x40, 0x23, 0x63, 0x01, 0x89, 0xd5, 0xbd, 0x72, 0x69,
- 0x5d, 0xfe, 0xf8, 0xdb, 0x92, 0xbb, 0x16, 0xb2, 0x84, 0x4d, 0xac, 0x96,
- 0x58, 0x31, 0x75, 0xe8, 0xd3, 0xb5, 0x44, 0xcd, 0xd9, 0xa3, 0x3b, 0x18,
- 0x98, 0x05, 0xa3, 0xa5, 0x11, 0xc6, 0x72, 0x7a, 0x71, 0xf4, 0x87, 0x64,
- 0xbf, 0xeb, 0xd0, 0x24, 0x8e, 0xdd, 0xc2, 0x16, 0xe9, 0x3b, 0x02, 0xc3,
- 0xd8, 0x39, 0x3c, 0xac, 0x90, 0x6a, 0x87, 0xb4, 0xfd, 0x6b, 0x92, 0x1e,
- 0xe9, 0x2c, 0x77, 0x75, 0x29, 0xb1, 0xae, 0xcd, 0x83, 0xc2, 0x68, 0xd3,
- 0x6b, 0x30, 0xf3, 0x7a, 0x95, 0x34, 0x38, 0x02, 0x35, 0x4f, 0x19, 0x6d,
- 0x82, 0x40, 0x84, 0xcc, 0xa6, 0x14, 0x7c, 0x26, 0x11, 0x16, 0xcb, 0x06,
- 0x7e, 0x46, 0xe9, 0xc9, 0x1b, 0xc8, 0xcf, 0xf0, 0xd8, 0x4b, 0x2d, 0x2c,
- 0xaf, 0x56, 0x64, 0xea, 0xe3, 0x39, 0x7d, 0xa4, 0xa3, 0xf6, 0x51, 0x19,
- 0xae, 0x5c, 0x0d, 0x3c, 0x16, 0x29, 0x33, 0xde, 0x26, 0x59, 0x3d, 0x76,
- 0xcc, 0xe5, 0xcf, 0x34, 0x38, 0x0c, 0x1b, 0x31, 0x01, 0x5a, 0x0a, 0xd7,
- 0xa8, 0x12, 0xfb, 0xaf, 0x9e, 0x6e, 0x9f, 0x61, 0x03, 0xff, 0x08, 0xa8,
- 0x2b, 0xa8, 0xfb, 0x2a, 0xd5, 0x5a, 0x38, 0x10, 0xd7, 0xb4, 0xda, 0x0e,
- 0x9d, 0x46, 0x4e, 0x05, 0x56, 0x95, 0x46, 0xc1, 0x60, 0x63, 0x7e, 0xe8,
- 0x72, 0xcd, 0xc5, 0x17, 0x13, 0xad, 0x2f, 0xda, 0x21, 0xe8, 0xe1, 0x1a,
- 0xdd, 0x44, 0xd6, 0x86, 0x85, 0xda, 0xba, 0xb6, 0x0e, 0x8a, 0x17, 0x37,
- 0xf8, 0xd6, 0x02, 0x4f, 0x49, 0xb3, 0x54, 0x8c, 0x6d, 0x92, 0x79, 0x59,
- 0x13, 0x45, 0xb9, 0xe6, 0xdd, 0x08, 0x4c, 0x3f, 0x65, 0x2d, 0xf5, 0x75,
- 0x73, 0x46, 0x25, 0xe2, 0x5a, 0x4e, 0xe3, 0x8c, 0x01, 0xd6, 0x0d, 0x95,
- 0xf0, 0x2e, 0x02, 0xb3, 0x8f, 0x4e, 0x20, 0x53, 0xe6, 0x1c, 0xc4, 0xbd,
- 0xe6, 0xa8, 0x9b, 0xd8, 0xf6, 0xaa, 0x79, 0x4a, 0x16, 0xad, 0xb5, 0x61,
- 0xb2, 0x48, 0x41, 0x32, 0x75, 0x21, 0x55, 0x81, 0x60, 0x11, 0x90, 0x51,
- 0xd3, 0xee, 0x40, 0xe2, 0x2b, 0xac, 0xfc, 0xa1, 0x9b, 0xde, 0x42, 0xd7,
- 0x22, 0x9e, 0x32, 0x4d, 0xe6, 0x0f, 0x92, 0x2e, 0x20, 0x77, 0x26, 0x65,
- 0x82, 0x43, 0xd5, 0xfc, 0xfc, 0xf3, 0x40, 0x46, 0xba, 0xb7, 0x4f, 0xef,
- 0x99, 0xaf, 0x3d, 0x95, 0x76, 0x46, 0xce, 0x7f, 0x52, 0x21, 0x21, 0x9f,
- 0x59, 0xbd, 0x36, 0xa2, 0x31, 0x78, 0x48, 0x41, 0xdc, 0xa3, 0xb5, 0x95,
- 0x07, 0x54, 0xd6, 0x77, 0x39, 0x0d, 0x6b, 0xac, 0x33, 0xf1, 0x40, 0xd3,
- 0x9a, 0x83, 0x48, 0x56, 0x28, 0x11, 0xca, 0x26, 0xbb, 0xa3, 0xf5, 0xa4,
- 0x49, 0x23, 0xd1, 0x0e, 0x49, 0x00, 0x25, 0xe1, 0x78, 0x54, 0x4a, 0xc3,
- 0xb4, 0xc8, 0x32, 0x18, 0x4b, 0x1d, 0x1d, 0x3a, 0xb2, 0x35, 0xf0, 0x1c,
- 0x8f, 0xf8, 0xb0, 0x7a, 0x38, 0x1f, 0x7e, 0xcd, 0x70, 0xf6, 0x93, 0x47,
- 0xc3, 0xe6, 0xa5, 0xc2, 0x21, 0x71, 0xfc, 0x5a, 0x1c, 0x5e, 0xd3, 0x12,
- 0x54, 0xad, 0x1a, 0x28, 0xaf, 0xd1, 0x84, 0x1c, 0x5e, 0xe3, 0x76, 0x79,
- 0xa3, 0x50, 0xdb, 0x2c, 0x4a, 0x7e, 0x1a, 0xc2, 0x3e, 0xb5, 0xdf, 0xd7,
- 0xa1, 0x7c, 0xea, 0x70, 0x19, 0x4f, 0x2e, 0xb1, 0x79, 0x31, 0x1d, 0xf8,
- 0x42, 0x49, 0x45, 0xd9, 0x19, 0x6e, 0xfb, 0xa8, 0x28, 0x36, 0x41, 0xa5,
- 0x02, 0xf0, 0x62, 0x03, 0x00, 0x1a, 0x57, 0xd8, 0x97, 0x66, 0x82, 0xc4,
- 0xfb, 0xce, 0x6b, 0xf2, 0xd9, 0x0e, 0x83, 0xd1, 0x9a, 0x93, 0x24, 0x15,
- 0x3a, 0x08, 0x65, 0x23, 0x9b, 0x2f, 0x10, 0xc8, 0xaf, 0x1c, 0xd0, 0x17,
- 0x02, 0x70, 0x8e, 0x9e, 0xbb, 0x23, 0xf5, 0xc2, 0x6e, 0xb7, 0x8c, 0x91,
- 0xe3, 0xbc, 0xa5, 0x52, 0x31, 0x87, 0x5a, 0x43, 0x28, 0xcb, 0x32, 0x6e,
- 0xa9, 0x59, 0x99, 0x70, 0x74, 0xd0, 0xce, 0xe1, 0x23, 0x7a, 0xc6, 0x65,
- 0x9b, 0x5c, 0x2e, 0x2b, 0x30, 0x5e, 0x81, 0x1e, 0x13, 0xd4, 0x0a, 0x6a,
- 0x95, 0x62, 0x26, 0x23, 0x9c, 0x06, 0xe9, 0xa4, 0x19, 0x6a, 0x0f, 0xd3,
- 0xb9, 0x66, 0x93, 0x27, 0xf2, 0xeb, 0xa5, 0xc8, 0x94, 0xf3, 0x87, 0x58,
- 0x43, 0x9a, 0x69, 0x77, 0x96, 0x9b, 0x01, 0xad, 0x03, 0xbc, 0x41, 0x0b,
- 0xab, 0x0a, 0x2f, 0xb4, 0xa8, 0x6c, 0x8a, 0x43, 0xdc, 0xae, 0x5c, 0x1a,
- 0xd6, 0xac, 0xe9, 0x32, 0x5d, 0xbe, 0x06, 0xfa, 0xc9, 0xe0, 0x7f, 0xc8,
- 0xca, 0x90, 0xd8, 0x4a, 0xf1, 0x3c, 0x00, 0xaa, 0x5f, 0x78, 0x38, 0x7e,
- 0x92, 0x76, 0x05, 0x86, 0x4f, 0xc1, 0x7a, 0x3a, 0x0f, 0x9b, 0xd2, 0xa8,
- 0x59, 0x1b, 0xe0, 0x7f, 0x6f, 0x7d, 0xc4, 0xc6, 0x56, 0x31, 0x59, 0x61,
- 0x15, 0xdc, 0xdc, 0x9a, 0x45, 0xbe, 0xe7, 0x08, 0xae, 0x60, 0xc0, 0xf6,
- 0x22, 0xfb, 0x8a, 0x2a, 0x83, 0x1d, 0x94, 0xa9, 0xbf, 0xac, 0xaa, 0xe3,
- 0xac, 0xe9, 0x48, 0x99, 0xf8, 0x95, 0x4f, 0xf4, 0x38, 0x73, 0x70, 0x60,
- 0x5e, 0x18, 0x7c, 0x10, 0xc3, 0xc3, 0x97, 0xdc, 0xc3, 0x10, 0xb6, 0x54,
- 0xee, 0xe1, 0x0c, 0xe5, 0x50, 0xf5, 0x81, 0x3d, 0x79, 0x89, 0xd2, 0x0d,
- 0x7b, 0x62, 0x76, 0x68, 0xaf, 0x0a, 0x3f, 0xaf, 0xe9, 0x88, 0x54, 0x4b,
- 0x13, 0x53, 0x18, 0xb0, 0x91, 0x9d, 0x0e, 0x19, 0xff, 0xca, 0xef, 0x8a,
- 0x52, 0xf5, 0x40, 0x4d, 0x0c, 0x39, 0x0e, 0x5a, 0x0c, 0x0e, 0xbb, 0x3b,
- 0x5b, 0x3c, 0x98, 0x2d, 0x6e, 0x80, 0xe5, 0x3a, 0x21, 0x49, 0xe7, 0x98,
- 0x57, 0x90, 0x12, 0xff, 0xe6, 0xa2, 0xd0, 0x6d, 0x0a, 0xa8, 0x98, 0x73,
- 0x31, 0x71, 0xae, 0xe7, 0x46, 0x57, 0x93, 0xb9, 0x6b, 0x01, 0x7a, 0x22,
- 0x69, 0x65, 0x84, 0x17, 0x6e, 0x37, 0xa8, 0x6f, 0x45, 0x3e, 0x43, 0x4a,
- 0x83, 0x5b, 0x2f, 0x9e, 0x80, 0xb2, 0xf3, 0x80, 0xaa, 0x67, 0x2e, 0xf4,
- 0x3b, 0x9b, 0xd3, 0x04, 0x64, 0x8f, 0x42, 0xdc, 0xb0, 0xe7, 0xfb, 0xef,
- 0xbf, 0x3e, 0x82, 0x24, 0x00, 0xde, 0x4e, 0x07, 0x34, 0x27, 0x6a, 0x9f,
- 0x2e, 0x27, 0xd0, 0x1e, 0xcc, 0x8a, 0x21, 0x1e, 0x09, 0xf8, 0xa3, 0x5a,
- 0x0f, 0x0c, 0x25, 0xce, 0x40, 0xbc, 0xd8, 0x6e, 0x89, 0x32, 0x5a, 0x4b,
- 0xd4, 0x4c, 0x06, 0x09, 0x82, 0x14, 0x29, 0x4a, 0x42, 0x28, 0x91, 0x6a,
- 0x3d, 0x5e, 0xa4, 0x02, 0x64, 0x91, 0xfa, 0x40, 0x07, 0x62, 0x7f, 0x18,
- 0xb6, 0xcf, 0xe2, 0x9a, 0xa6, 0x1c, 0x58, 0x5d, 0xb7, 0x82, 0xae, 0x3b,
- 0xf4, 0x2d, 0x3f, 0x9c, 0xde, 0xbf, 0xb3, 0xbd, 0xed, 0x2a, 0x4c, 0xa4,
- 0xb6, 0xc1, 0x80, 0x5b, 0x56, 0xc9, 0xf6, 0xe0, 0xd5, 0xab, 0x55, 0x8c,
- 0xd0, 0x36, 0x0a, 0xd4, 0x84, 0x17, 0x9f, 0xdc, 0xe6, 0x80, 0x1e, 0x5d,
- 0xd5, 0x66, 0x44, 0xa3, 0x41, 0x2d, 0x6a, 0x89, 0xf0, 0xaa, 0xad, 0xd4,
- 0x22, 0x96, 0x0f, 0xb6, 0xc0, 0xc3, 0x23, 0x52, 0x58, 0xb5, 0x86, 0x96,
- 0x72, 0xcd, 0x21, 0xc4, 0x22, 0x69, 0x5f, 0x8d, 0x24, 0x0b, 0x0a, 0xf2,
- 0xca, 0xad, 0x5f, 0xed, 0x93, 0x16, 0xc6, 0x53, 0x6c, 0x57, 0x2c, 0xd1,
- 0x65, 0x38, 0x1b, 0x15, 0x09, 0x3e, 0x9c, 0x91, 0x5d, 0xec, 0xf8, 0xfd,
- 0xd7, 0x6c, 0x26, 0x30, 0x3a, 0x2f, 0x0c, 0xa4, 0x5b, 0x1d, 0x0d, 0xf8,
- 0x03, 0x17, 0x8a, 0xa0, 0x00, 0x3f, 0x38, 0xd4, 0xb9, 0xda, 0x63, 0x5e,
- 0x30, 0x2b, 0xf0, 0x2a, 0x73, 0x47, 0x0d, 0x74, 0x83, 0x8b, 0x64, 0xe0,
- 0x09, 0x27, 0x52, 0x27, 0x82, 0x24, 0x93, 0xf9, 0x83, 0x6a, 0x46, 0xd2,
- 0x03, 0x5a, 0x57, 0x73, 0xbb, 0x6d, 0x96, 0x6d, 0x61, 0xac, 0xce, 0x82,
- 0x82, 0x02, 0xd9, 0x24, 0xd2, 0x25, 0x77, 0x83, 0xf3, 0xdd, 0x91, 0x44,
- 0x3e, 0x6d, 0x28, 0x2d, 0x13, 0x60, 0xbb, 0xb2, 0x18, 0x49, 0x56, 0x7d,
- 0xb5, 0x89, 0x74, 0xcd, 0x73, 0x5c, 0x78, 0xd8, 0xe7, 0xea, 0xb4, 0xdb,
- 0xa8, 0x42, 0x58, 0x96, 0xff, 0xfb, 0xe3, 0x7c, 0x64, 0x84, 0x74, 0x50,
- 0xe9, 0xa6, 0x2a, 0xa6, 0xce, 0x06, 0x20, 0x23, 0x8e, 0x5a, 0xb7, 0x2f,
- 0xf8, 0x7d, 0xee, 0x3a, 0x8d, 0x77, 0xc7, 0xef, 0xeb, 0xd2, 0x44, 0x0e,
- 0x00, 0x89, 0xb4, 0x52, 0x47, 0xc4, 0x26, 0x03, 0xaa, 0x2e, 0x43, 0x52,
- 0x38, 0x38, 0x47, 0xde, 0x16, 0x4b, 0xd6, 0x12, 0xc9, 0x39, 0x46, 0x95,
- 0x11, 0xa2, 0x21, 0xc0, 0x4e, 0xe3, 0xf2, 0xba, 0xc9, 0xa5, 0xce, 0x16,
- 0x30, 0x56, 0x51, 0x39, 0xf7, 0xd8, 0x22, 0xe1, 0x38, 0xb8, 0xdb, 0x6a,
- 0x59, 0x08, 0xef, 0x23, 0x7d, 0xcb, 0x0c, 0x3e, 0xad, 0xaf, 0x11, 0xca,
- 0x65, 0x4d, 0x34, 0xa1, 0x78, 0x85, 0xee, 0x05, 0xbb, 0xd5, 0xc8, 0x53,
- 0x2c, 0x4c, 0x41, 0xb8, 0x6e, 0x2d, 0x45, 0x7b, 0x05, 0x3c, 0x8b, 0xc6,
- 0xa7, 0x9e, 0x02, 0x96, 0xa9, 0x23, 0x0e, 0x1c, 0x1c, 0x04, 0x8f, 0xb9,
- 0x44, 0xc9, 0xaf, 0x6d, 0x11, 0xf2, 0xe5, 0x73, 0x18, 0x60, 0xa0, 0x2d,
- 0x01, 0x92, 0xa8, 0xb3, 0x84, 0x50, 0xa2, 0x81, 0x08, 0xc9, 0x10, 0x45,
- 0xca, 0x72, 0x45, 0x1a, 0x80, 0x19, 0xcc, 0x15, 0x2a, 0x91, 0x72, 0xef,
- 0x74, 0xdf, 0xb3, 0x4a, 0x0a, 0x9f, 0x22, 0x27, 0x1a, 0xa1, 0x4f, 0xcc,
- 0x90, 0x07, 0xc8, 0x49, 0xe1, 0x1c, 0xb7, 0x3b, 0xba, 0x20, 0xd5, 0x1e,
- 0xd7, 0x91, 0xea, 0x88, 0xdf, 0x1d, 0x9d, 0x7f, 0x75, 0x3a, 0x3a, 0x32,
- 0xdc, 0xe2, 0xf0, 0xe8, 0xab, 0x0f, 0xc4, 0x49, 0x68, 0xc7, 0xd8, 0x4c,
- 0x0a, 0x40, 0x4f, 0x4e, 0xd9, 0x05, 0x50, 0x11, 0x12, 0x0e, 0x88, 0x74,
- 0x58, 0x36, 0xe9, 0xdb, 0xf4, 0x47, 0x11, 0xbb, 0x18, 0x1b, 0x73, 0x96,
- 0xb1, 0x5d, 0x2d, 0x47, 0xb0, 0xb6, 0x43, 0xef, 0xa5, 0x98, 0xa8, 0x82,
- 0x20, 0xc7, 0x1b, 0x05, 0x8f, 0xd1, 0xf2, 0x71, 0xf5, 0x9e, 0x43, 0x67,
- 0xbc, 0x65, 0x2b, 0xaa, 0x1c, 0x08, 0x57, 0xe6, 0x59, 0xcb, 0x39, 0xcb,
- 0xd5, 0x04, 0xd9, 0x56, 0x60, 0xf6, 0x66, 0x25, 0xdf, 0x64, 0x04, 0x55,
- 0x83, 0x73, 0x8d, 0xbb, 0x35, 0x6f, 0x70, 0xad, 0xb2, 0x90, 0x2f, 0xc5,
- 0x95, 0x6b, 0x26, 0x38, 0xc3, 0x72, 0x38, 0x43, 0x77, 0x96, 0x79, 0x35,
- 0xc7, 0xeb, 0x8c, 0x21, 0x9e, 0xf8, 0x26, 0x15, 0xc7, 0x23, 0xc7, 0x44,
- 0x4a, 0x25, 0x84, 0x0d, 0x51, 0x4c, 0xef, 0x30, 0x4f, 0x29, 0xcd, 0xc7,
- 0x35, 0x88, 0xb5, 0x40, 0x17, 0x56, 0xde, 0x0b, 0x5d, 0x10, 0xd2, 0xb9,
- 0x5d, 0xcd, 0x0e, 0x2e, 0x78, 0xa6, 0x64, 0x7b, 0xe0, 0xcb, 0xd9, 0x47,
- 0x52, 0xf5, 0xd1, 0x77, 0xc8, 0xe1, 0x6f, 0x85, 0x06, 0x3e, 0x4f, 0x14,
- 0x79, 0xed, 0xa9, 0x75, 0xab, 0x8b, 0x16, 0xab, 0x84, 0x29, 0xce, 0x10,
- 0x97, 0x74, 0xc1, 0x0c, 0x4f, 0xc2, 0x95, 0x68, 0x4b, 0x61, 0xbe, 0x66,
- 0xe2, 0x0b, 0xcf, 0x20, 0xb7, 0xce, 0xf5, 0x8a, 0x9b, 0xfb, 0xc6, 0x37,
- 0xf2, 0xaf, 0xad, 0xad, 0x1d, 0x1e, 0x5d, 0xec, 0x1f, 0x9f, 0x1c, 0x1d,
- 0x26, 0xc7, 0xef, 0xdf, 0x9e, 0x9e, 0xbf, 0xdb, 0xbf, 0x10, 0xb7, 0xf7,
- 0xa1, 0xb5, 0x92, 0xd9, 0xdc, 0x5b, 0x6b, 0x84, 0x74, 0x16, 0x34, 0x90,
- 0xb0, 0xd9, 0xc5, 0x2b, 0x41, 0xcc, 0xe6, 0x65, 0xc8, 0x5a, 0x6b, 0xb0,
- 0x96, 0x88, 0xbb, 0xdc, 0xa1, 0xe1, 0xd0, 0x5d, 0xbd, 0x65, 0x9d, 0x9c,
- 0x43, 0x5d, 0x4e, 0x0b, 0xae, 0x48, 0xf5, 0xd3, 0x1e, 0x6d, 0xca, 0x16,
- 0x89, 0xe7, 0x7b, 0x8a, 0xb6, 0x93, 0x93, 0xa4, 0x41, 0x93, 0x83, 0xe3,
- 0xad, 0x36, 0x58, 0x28, 0x8c, 0x1f, 0x0a, 0x8e, 0x94, 0x02, 0x36, 0xc2,
- 0x07, 0x27, 0x30, 0x14, 0x48, 0x36, 0x3f, 0xbf, 0x4d, 0x9b, 0x76, 0xaf,
- 0x70, 0x37, 0x1c, 0x64, 0xc1, 0xd8, 0x34, 0xde, 0xfe, 0x0a, 0x44, 0x95,
- 0xa1, 0x66, 0xa6, 0x03, 0xe0, 0x1e, 0xd6, 0x54, 0xa8, 0x5c, 0xcf, 0x3a,
- 0xb0, 0x18, 0x2d, 0x13, 0x55, 0x4f, 0x92, 0x94, 0xfb, 0xf2, 0x9b, 0xda,
- 0xb0, 0x8e, 0x51, 0x23, 0xc5, 0x0c, 0x8e, 0xa5, 0x10, 0x1c, 0xad, 0x05,
- 0x41, 0x2d, 0xd3, 0xbf, 0x85, 0x83, 0x42, 0x93, 0x30, 0x3b, 0xa7, 0x85,
- 0xe7, 0x5b, 0xb6, 0x36, 0xb7, 0x9c, 0x36, 0x77, 0x6e, 0x15, 0xdb, 0x62,
- 0x70, 0x68, 0x1e, 0x9a, 0x2e, 0xe7, 0x0b, 0xa9, 0x24, 0xaa, 0x52, 0x2e,
- 0xec, 0x6b, 0xba, 0x85, 0x2c, 0x48, 0x41, 0x20, 0x80, 0x31, 0xe6, 0xad,
- 0xac, 0x01, 0xcf, 0x03, 0xf4, 0xdd, 0xa8, 0xdb, 0x8a, 0xf4, 0x56, 0xe7,
- 0x69, 0xea, 0x96, 0x11, 0x6f, 0x4b, 0x13, 0x58, 0x90, 0x91, 0x7d, 0xb6,
- 0x5b, 0x77, 0x3c, 0x75, 0x91, 0x20, 0x58, 0xff, 0x0d, 0x2d, 0x75, 0x40,
- 0x24, 0x2b, 0x0d, 0x8a, 0x9a, 0x14, 0x3a, 0xca, 0x5a, 0x93, 0xf2, 0x5f,
- 0x6c, 0xc7, 0x4e, 0xf8, 0x9c, 0x5e, 0xbb, 0x76, 0x10, 0x98, 0xdd, 0x11,
- 0x08, 0x17, 0x37, 0xfc, 0xc4, 0x56, 0x9b, 0x27, 0xc4, 0x76, 0x46, 0xb8,
- 0x5b, 0x93, 0x04, 0x5f, 0x1f, 0x08, 0x57, 0xc9, 0x77, 0x89, 0xb2, 0xa5,
- 0xe5, 0x0d, 0xe9, 0xd7, 0xc8, 0x80, 0x1b, 0x3f, 0xf8, 0xb9, 0x4a, 0x1c,
- 0xe3, 0x23, 0xc5, 0x42, 0xc0, 0xf4, 0x8a, 0x35, 0x85, 0xe7, 0xd4, 0x97,
- 0x34, 0xd0, 0x0b, 0xdc, 0x9f, 0x91, 0xab, 0xc1, 0xe4, 0x49, 0xd1, 0xcd,
- 0xd2, 0x1a, 0x4a, 0x0e, 0x32, 0x16, 0xf8, 0xce, 0xb0, 0xa6, 0x51, 0x87,
- 0xcd, 0x8e, 0xcb, 0xc7, 0x43, 0xc4, 0x60, 0xc4, 0xbf, 0x94, 0x40, 0x07,
- 0xf4, 0x50, 0x70, 0x74, 0xb2, 0x6d, 0x05, 0x77, 0x1d, 0x29, 0xb1, 0xd5,
- 0x0c, 0x21, 0xa6, 0x12, 0x73, 0x77, 0x56, 0xd6, 0x7c, 0xde, 0x20, 0x75,
- 0xf7, 0xb8, 0x84, 0x36, 0x91, 0x41, 0x6f, 0x71, 0x6d, 0xfa, 0xe8, 0x25,
- 0x57, 0xa4, 0xb7, 0x8c, 0xcd, 0xd0, 0x03, 0x06, 0x3a, 0xe5, 0xc7, 0xdf,
- 0x9c, 0xa7, 0x97, 0x69, 0x36, 0xfb, 0xd3, 0xee, 0xf6, 0x28, 0xbd, 0x5a,
- 0xce, 0xd2, 0x7f, 0xc1, 0x8b, 0x6f, 0x9e, 0x3d, 0xdb, 0xdd, 0xfe, 0xec,
- 0xf3, 0xed, 0x5e, 0xc7, 0x7d, 0xed, 0x45, 0xbe, 0x20, 0x94, 0x81, 0x6e,
- 0x32, 0xf0, 0x5d, 0xf4, 0x33, 0x9c, 0x5c, 0xe5, 0x50, 0xb4, 0x48, 0x78,
- 0x91, 0x35, 0x48, 0x59, 0xc3, 0x03, 0x9b, 0x64, 0x18, 0x32, 0xc2, 0xd3,
- 0x34, 0x74, 0xfd, 0xc7, 0x9d, 0x3d, 0x66, 0x65, 0x57, 0x30, 0x88, 0xa7,
- 0x4c, 0xb1, 0xc9, 0xeb, 0xbc, 0x30, 0x37, 0xd0, 0x17, 0x49, 0x93, 0x5e,
- 0x59, 0x5a, 0x45, 0x0b, 0xd8, 0x0d, 0x1f, 0xd7, 0xf8, 0x92, 0x88, 0x3c,
- 0x2f, 0xb8, 0xac, 0x02, 0x95, 0x0c, 0x80, 0xe0, 0xb3, 0xc8, 0x2a, 0x20,
- 0x8a, 0x5d, 0x55, 0xe9, 0x5c, 0x23, 0xfa, 0xe9, 0x7d, 0x0a, 0x0f, 0x1a,
- 0x2e, 0x66, 0x08, 0x36, 0xd7, 0x18, 0x1f, 0x96, 0x42, 0x99, 0xe0, 0x66,
- 0x8b, 0xda, 0x81, 0x72, 0xf1, 0x75, 0xe3, 0x17, 0x23, 0x30, 0x8b, 0x05,
- 0x3b, 0x47, 0x0f, 0xb3, 0x62, 0x96, 0x01, 0x6e, 0x36, 0xd5, 0x99, 0x0e,
- 0xf1, 0x3b, 0xb2, 0xe4, 0x53, 0x46, 0x60, 0xeb, 0x2d, 0x38, 0xff, 0xd4,
- 0x16, 0x4b, 0x67, 0x83, 0x58, 0xde, 0x9a, 0x57, 0xea, 0x22, 0xdb, 0x92,
- 0xd7, 0x6a, 0xb9, 0xd9, 0xf9, 0xe2, 0x0d, 0x08, 0x62, 0xe7, 0x8b, 0x7f,
- 0xb1, 0x9f, 0xed, 0xca, 0x67, 0xbb, 0x5f, 0xfc, 0xcb, 0x70, 0x88, 0xf1,
- 0x11, 0x85, 0xac, 0xeb, 0xd7, 0xeb, 0x82, 0x49, 0x91, 0xca, 0x11, 0xe6,
- 0xbf, 0x2c, 0x6c, 0x29, 0xef, 0x75, 0x4f, 0x7b, 0xf6, 0x57, 0xb9, 0x2f,
- 0xde, 0x3f, 0xcb, 0xb7, 0xf2, 0xda, 0xc7, 0xa3, 0xad, 0x63, 0x8b, 0x6e,
- 0x7d, 0x13, 0x68, 0x47, 0x82, 0xdc, 0xf0, 0xf2, 0xbf, 0x12, 0xa5, 0xfe,
- 0xeb, 0x5a, 0x22, 0x4e, 0x3a, 0xda, 0x8e, 0x07, 0x38, 0x21, 0x94, 0x6c,
- 0xcd, 0xa3, 0xa9, 0xd6, 0x3e, 0xa0, 0x96, 0x29, 0x4c, 0x9e, 0xee, 0x40,
- 0xaf, 0x5e, 0xf8, 0x9f, 0x25, 0xfb, 0x9f, 0x37, 0x7c, 0x2d, 0xb1, 0xcf,
- 0x70, 0x3a, 0x81, 0x91, 0x31, 0x1a, 0xae, 0xbe, 0x41, 0x58, 0xfc, 0x3f,
- 0xfc, 0x20, 0x02, 0x95, 0xf9, 0x45, 0x46, 0x7e, 0x6d, 0x78, 0xd1, 0xd4,
- 0xb0, 0xb7, 0x39, 0x6a, 0x15, 0x4b, 0x91, 0x77, 0xb9, 0xf2, 0x2f, 0x65,
- 0xa6, 0xdc, 0x88, 0xd9, 0xda, 0xfd, 0xd1, 0xc1, 0xf1, 0x31, 0xe2, 0xf9,
- 0xb0, 0xa8, 0x47, 0xcc, 0xc6, 0x40, 0x9b, 0x1b, 0x08, 0x47, 0x70, 0xe1,
- 0x5f, 0x3e, 0xe9, 0xd3, 0xde, 0x61, 0xdb, 0x41, 0xfd, 0xa6, 0x31, 0x55,
- 0x8a, 0x65, 0x2b, 0x41, 0xb3, 0x2c, 0xe5, 0xbc, 0xe9, 0xf1, 0x83, 0x57,
- 0x79, 0x4f, 0x1c, 0x4b, 0xfc, 0x49, 0xcf, 0x81, 0x8c, 0xf0, 0x7e, 0x60,
- 0xd3, 0xde, 0xb0, 0xe8, 0x94, 0xff, 0x23, 0x7b, 0xb3, 0xb3, 0x1d, 0x7f,
- 0x02, 0x45, 0x09, 0x08, 0x0b, 0xf8, 0x8d, 0x73, 0xd2, 0x3d, 0xf6, 0x7c,
- 0x3e, 0xe5, 0xa7, 0xaf, 0xf3, 0xe9, 0xd4, 0xdc, 0x09, 0xa8, 0x55, 0xff,
- 0xa6, 0x37, 0xa6, 0x1b, 0x96, 0xfe, 0x7f, 0xc5, 0x38, 0xe0, 0x45, 0x92,
- 0x67, 0xeb, 0xe5, 0x78, 0x9e, 0xb7, 0x06, 0xbc, 0x45, 0x13, 0xfc, 0x82,
- 0x26, 0xfc, 0x7d, 0x66, 0xa9, 0x23, 0x23, 0xd1, 0x8e, 0x65, 0xbf, 0xf5,
- 0xcb, 0xb2, 0x1c, 0xa7, 0xd5, 0xba, 0xb8, 0x58, 0x74, 0x9c, 0xeb, 0x3b,
- 0xbb, 0xcf, 0x9e, 0xbf, 0x58, 0x1f, 0x8a, 0x9c, 0x06, 0x16, 0xd1, 0xf8,
- 0xb9, 0xfc, 0xdc, 0x44, 0xca, 0x07, 0x54, 0x43, 0x52, 0x91, 0x3c, 0x1c,
- 0x73, 0x78, 0x12, 0x17, 0xa3, 0xee, 0xde, 0x70, 0x6f, 0xff, 0x42, 0xfd,
- 0xbc, 0x41, 0x17, 0xff, 0x92, 0x4f, 0xdf, 0xd8, 0x19, 0xfe, 0x0b, 0xcd,
- 0xe5, 0x8d, 0x4c, 0xc2, 0xec, 0xab, 0x26, 0x6b, 0xd5, 0x7e, 0x9d, 0x84,
- 0xa7, 0x36, 0x57, 0x37, 0x71, 0x0d, 0x93, 0x86, 0xb7, 0x7d, 0x30, 0x65,
- 0x8f, 0x04, 0xa4, 0x55, 0x97, 0xa9, 0xb4, 0x75, 0x3f, 0x30, 0xad, 0x0c,
- 0xa8, 0x95, 0x81, 0x63, 0xd8, 0x80, 0x70, 0x1e, 0xd0, 0x46, 0xf4, 0x25,
- 0x5d, 0x6d, 0x06, 0xcb, 0x87, 0x88, 0x02, 0x65, 0x09, 0x5f, 0xf6, 0xc1,
- 0xd7, 0xc7, 0xeb, 0x12, 0x24, 0xc2, 0xaa, 0x5b, 0x3f, 0x66, 0x33, 0xb6,
- 0xb1, 0x5c, 0x93, 0x74, 0x41, 0xa7, 0x7f, 0x4d, 0x6b, 0x7a, 0xa5, 0x14,
- 0xf3, 0x40, 0xfd, 0x72, 0x6e, 0xa9, 0xe9, 0x4c, 0x6e, 0x9d, 0x19, 0x59,
- 0xa1, 0x2b, 0x06, 0x97, 0xf6, 0x9a, 0x01, 0xd8, 0x2a, 0x07, 0x3f, 0xc0,
- 0x0f, 0xb3, 0xb0, 0x69, 0x69, 0x83, 0xb7, 0xd6, 0x11, 0x69, 0xd3, 0xa0,
- 0xe4, 0x51, 0xf3, 0x15, 0xf3, 0x13, 0x65, 0x11, 0xbd, 0xa1, 0xb8, 0xcd,
- 0x85, 0x12, 0x7c, 0xee, 0x81, 0xf4, 0xe8, 0x71, 0x26, 0xc9, 0x6c, 0x6c,
- 0xca, 0x60, 0xc1, 0x90, 0xf8, 0xe7, 0xeb, 0x2f, 0x15, 0x9f, 0xf5, 0x8b,
- 0x04, 0xa5, 0xf9, 0xf8, 0x2d, 0xf1, 0x05, 0x8a, 0x51, 0x88, 0xed, 0xa8,
- 0x78, 0x49, 0xd4, 0x03, 0xeb, 0x96, 0xf2, 0x22, 0x47, 0x44, 0x30, 0xf0,
- 0x51, 0xb4, 0xc7, 0x0f, 0x62, 0x00, 0xa0, 0x16, 0xd6, 0xff, 0x82, 0x43,
- 0xf0, 0x9a, 0xb6, 0x01, 0x5f, 0x7f, 0xb1, 0xbe, 0x66, 0x6b, 0xa4, 0x5b,
- 0xc9, 0xbd, 0xe3, 0xd4, 0x65, 0x02, 0xf5, 0xe7, 0x53, 0x5e, 0x5a, 0x30,
- 0x52, 0x96, 0xc6, 0x08, 0xc6, 0x00, 0xf5, 0x6b, 0x8d, 0x34, 0x35, 0xa3,
- 0xa4, 0xd0, 0x96, 0xd1, 0x98, 0x1b, 0xcf, 0x08, 0x23, 0x82, 0xa4, 0xc7,
- 0x75, 0x0a, 0x0b, 0xc4, 0x7b, 0xeb, 0x16, 0xdb, 0x14, 0x76, 0x4c, 0x30,
- 0xbc, 0x2a, 0x53, 0x58, 0xbd, 0x35, 0x49, 0x5f, 0x76, 0xd2, 0xbc, 0x3f,
- 0xb1, 0xda, 0x13, 0x1e, 0x5c, 0x32, 0x18, 0x63, 0x7e, 0x04, 0x47, 0xe4,
- 0x2d, 0x65, 0x5a, 0x4a, 0xa7, 0x6f, 0x68, 0xb9, 0x77, 0x86, 0x57, 0xf9,
- 0x25, 0x2f, 0x86, 0x61, 0x91, 0x57, 0xd9, 0x96, 0xf9, 0xb3, 0x6f, 0x3e,
- 0xdf, 0x25, 0xa9, 0x8c, 0x7e, 0x79, 0x86, 0xd8, 0x21, 0xff, 0xee, 0xf7,
- 0xce, 0x86, 0x3d, 0x17, 0xf4, 0x4b, 0x6e, 0xef, 0x7c, 0xf1, 0xb4, 0xc8,
- 0x28, 0x07, 0x0a, 0x62, 0xde, 0xaa, 0x46, 0xd4, 0xf7, 0xbc, 0x28, 0xc0,
- 0xad, 0x2e, 0x21, 0x9f, 0xd4, 0x2e, 0xf4, 0x56, 0x82, 0x1b, 0x44, 0x50,
- 0x27, 0xb9, 0x3b, 0x17, 0x93, 0x09, 0xe5, 0x4a, 0xe0, 0x66, 0xcd, 0xee,
- 0x36, 0xfb, 0x7e, 0x48, 0xa3, 0x61, 0xef, 0xb7, 0x94, 0x7d, 0x4c, 0x88,
- 0x06, 0x2e, 0x6f, 0x8d, 0xba, 0x47, 0x05, 0xf5, 0x35, 0x24, 0x64, 0x6a,
- 0x3e, 0x26, 0xb6, 0x39, 0xef, 0xee, 0xa0, 0x57, 0xcd, 0x50, 0xa5, 0x4d,
- 0xf2, 0x6a, 0x6d, 0x52, 0x37, 0xd9, 0xac, 0x86, 0xae, 0x2e, 0x80, 0x76,
- 0xda, 0xab, 0xa2, 0xe0, 0xa2, 0xa3, 0x75, 0xff, 0xec, 0x97, 0x93, 0x26,
- 0x33, 0xba, 0x2e, 0x01, 0x10, 0xcd, 0x99, 0xcf, 0x1d, 0xcd, 0xb9, 0xaa,
- 0x1b, 0x48, 0x78, 0x36, 0xe0, 0xdb, 0x53, 0x44, 0xa2, 0xc1, 0xdb, 0x61,
- 0x72, 0x82, 0xd0, 0xdc, 0x3a, 0x65, 0x1c, 0x0b, 0xbd, 0x61, 0x95, 0x1a,
- 0x0c, 0xe9, 0xd4, 0x8a, 0xc5, 0x45, 0xef, 0x11, 0x74, 0x80, 0x92, 0x54,
- 0xae, 0x00, 0xc7, 0x4c, 0x5c, 0x2c, 0x5f, 0x88, 0x3c, 0xd2, 0x87, 0x7d,
- 0xda, 0x3e, 0x07, 0x3b, 0x3c, 0xdb, 0xe2, 0x90, 0x24, 0x63, 0x09, 0xd6,
- 0x6b, 0x84, 0x03, 0x8c, 0x44, 0x00, 0xf5, 0xd8, 0xba, 0x3d, 0x04, 0x1c,
- 0xfe, 0x97, 0xb1, 0xd1, 0x85, 0x72, 0xd8, 0x09, 0x4c, 0x03, 0x7e, 0x5a,
- 0xd3, 0x1a, 0xa8, 0x0c, 0x78, 0xb8, 0x86, 0x8c, 0x7a, 0xd0, 0x1b, 0x67,
- 0x99, 0x55, 0xae, 0x79, 0xaf, 0x4a, 0x1b, 0xd7, 0x0b, 0x5b, 0x8c, 0x60,
- 0xf0, 0x5b, 0x17, 0x1a, 0x0d, 0x92, 0xc6, 0x95, 0xde, 0x9a, 0x5f, 0x48,
- 0x38, 0x1b, 0x57, 0x66, 0xd7, 0xb3, 0x8a, 0xaf, 0x06, 0xf4, 0x8a, 0x12,
- 0x5f, 0xe9, 0x54, 0xd4, 0x94, 0x77, 0x27, 0x89, 0xe2, 0x81, 0x5c, 0x3a,
- 0x51, 0x51, 0xa3, 0x08, 0x31, 0x45, 0xb1, 0x8c, 0xb0, 0x3c, 0x24, 0x4f,
- 0xf1, 0x2d, 0xc7, 0x6b, 0x4b, 0x19, 0xc5, 0x09, 0x2d, 0x4e, 0xeb, 0xc8,
- 0x7a, 0x4f, 0xf0, 0xab, 0x6b, 0x8c, 0x5d, 0xb4, 0x4e, 0x4b, 0xb0, 0xde,
- 0x4f, 0xd6, 0x69, 0xa8, 0xf4, 0xc5, 0x3a, 0xd6, 0x13, 0x1f, 0x7b, 0xcb,
- 0xb7, 0x3e, 0x8c, 0x9c, 0x42, 0x7a, 0xe6, 0xcd, 0x97, 0xad, 0x55, 0xc2,
- 0xe7, 0xda, 0xd4, 0x1b, 0x8e, 0xe6, 0x0f, 0x64, 0x6e, 0x7d, 0xd7, 0x6b,
- 0xff, 0xcd, 0x81, 0x69, 0x05, 0xe0, 0xc3, 0x5e, 0x48, 0xe6, 0xc4, 0x7e,
- 0x96, 0x23, 0xb3, 0x30, 0x68, 0xe8, 0xe9, 0x53, 0x7c, 0xa1, 0xac, 0xc8,
- 0x86, 0x2b, 0x32, 0x77, 0x63, 0x12, 0x50, 0xce, 0x6b, 0x76, 0x33, 0x67,
- 0xbd, 0xef, 0xae, 0x84, 0x95, 0x01, 0x3c, 0x67, 0x67, 0x88, 0x4c, 0x33,
- 0x57, 0x5c, 0xd2, 0x36, 0x60, 0x95, 0xf7, 0x1e, 0x16, 0xb4, 0x67, 0x23,
- 0x48, 0x55, 0xa5, 0xd7, 0x55, 0x8e, 0xf1, 0xae, 0x45, 0x3e, 0x01, 0xc4,
- 0xee, 0x9b, 0x2f, 0xa7, 0xe5, 0x15, 0x71, 0xae, 0xbe, 0x39, 0x68, 0xf4,
- 0x6f, 0x8f, 0x1e, 0xde, 0x95, 0x4e, 0x79, 0xc0, 0x38, 0x2b, 0x2c, 0xc5,
- 0xeb, 0xdf, 0x2b, 0xc2, 0x29, 0x4d, 0xc3, 0xd3, 0x72, 0x22, 0x6d, 0xdb,
- 0xa6, 0x79, 0x3f, 0x4c, 0xfb, 0xf6, 0x0b, 0xbf, 0x2f, 0x5d, 0x9c, 0x54,
- 0x5a, 0x86, 0x6c, 0x64, 0x38, 0x45, 0xc3, 0x57, 0xb9, 0x2d, 0x56, 0x0f,
- 0x03, 0x17, 0x15, 0x89, 0xe4, 0x7b, 0x6b, 0x26, 0xe9, 0x4f, 0xeb, 0x5f,
- 0xae, 0x73, 0x30, 0xf6, 0xfa, 0xeb, 0x75, 0x70, 0x30, 0xe2, 0x4b, 0x5a,
- 0x8f, 0x49, 0x2e, 0xa7, 0x75, 0xbe, 0x15, 0x07, 0x2c, 0x3b, 0x08, 0x2a,
- 0x5a, 0x2b, 0x5a, 0x8e, 0x18, 0x86, 0xaa, 0x91, 0x7e, 0xa0, 0x1f, 0xcc,
- 0x04, 0x28, 0xd5, 0x8c, 0x51, 0x11, 0xcc, 0xe3, 0xb8, 0xe1, 0xe0, 0x15,
- 0xb9, 0x74, 0x21, 0x96, 0x01, 0x55, 0xa2, 0xa6, 0x98, 0x02, 0x36, 0x73,
- 0x2e, 0x8b, 0x05, 0xe5, 0x10, 0x4f, 0x1a, 0xae, 0xad, 0x86, 0xb3, 0x34,
- 0x4c, 0x3e, 0x14, 0x8c, 0x01, 0x9e, 0x91, 0xb2, 0x9c, 0x57, 0x93, 0xe5,
- 0x9c, 0x4c, 0x15, 0x13, 0x32, 0x90, 0xe1, 0xe2, 0x61, 0xf1, 0xa0, 0xe5,
- 0x32, 0xf7, 0x07, 0xcc, 0xc6, 0x11, 0x36, 0x62, 0x4b, 0xbf, 0x08, 0x0f,
- 0xa1, 0xa0, 0x28, 0x31, 0x52, 0x43, 0x2a, 0xb0, 0xe8, 0x12, 0xc2, 0x80,
- 0xc8, 0x5b, 0x77, 0xf4, 0xf6, 0xe8, 0xfc, 0xfc, 0xe8, 0x9c, 0xd6, 0x7b,
- 0xbf, 0x68, 0x55, 0x32, 0xb2, 0x00, 0x93, 0xce, 0xfd, 0xa7, 0x21, 0xaa,
- 0x21, 0xa4, 0x36, 0xb3, 0xc2, 0x74, 0x3a, 0x25, 0x08, 0x63, 0x68, 0x10,
- 0x8c, 0xa7, 0xc2, 0x15, 0x63, 0x7d, 0xf3, 0x22, 0x42, 0x94, 0xad, 0x29,
- 0xdf, 0x2f, 0x20, 0xe6, 0xc9, 0x16, 0xae, 0x85, 0x4a, 0x2a, 0xe4, 0x2d,
- 0x35, 0x73, 0xf9, 0x3a, 0x6b, 0x89, 0xa9, 0x43, 0x89, 0x2a, 0xcd, 0xc4,
- 0xc1, 0x3d, 0xb3, 0xf6, 0x09, 0x4c, 0xf9, 0x92, 0xce, 0x28, 0xe9, 0x4e,
- 0x58, 0x8c, 0xba, 0x59, 0x2e, 0xf2, 0xa9, 0xb5, 0xf6, 0x9a, 0xcf, 0x8d,
- 0xf8, 0x97, 0xf0, 0x29, 0xaf, 0x35, 0xfe, 0x04, 0x9e, 0x46, 0x35, 0x46,
- 0xf8, 0xd6, 0xb6, 0x0e, 0xce, 0x69, 0x82, 0xb4, 0x24, 0x0e, 0xe4, 0xd2,
- 0x6a, 0x27, 0xed, 0x1c, 0x5c, 0xa1, 0xfd, 0x0c, 0x56, 0x46, 0xe2, 0x16,
- 0x1a, 0x12, 0xe3, 0x73, 0x06, 0xb2, 0x65, 0xcd, 0x5d, 0x6c, 0x36, 0x85,
- 0x95, 0xed, 0x31, 0x5a, 0x04, 0x52, 0xef, 0xaa, 0xbd, 0xe4, 0xc7, 0x3a,
- 0x9f, 0xfc, 0xec, 0x2e, 0x0f, 0xe4, 0x59, 0xb8, 0xf0, 0x69, 0xb6, 0xd0,
- 0x9b, 0xc9, 0xcb, 0x42, 0x89, 0x32, 0xcc, 0x29, 0xaf, 0x1f, 0x46, 0x47,
- 0xe7, 0xc9, 0xfe, 0xd7, 0x84, 0x96, 0xfa, 0xbf, 0xb9, 0xc1, 0xf4, 0x9c,
- 0xdc, 0x0e, 0x6b, 0x12, 0xf3, 0x29, 0x18, 0x10, 0x99, 0x9a, 0xc2, 0x19,
- 0xbf, 0xa8, 0xb5, 0xb3, 0xb9, 0x96, 0x80, 0xf5, 0x92, 0xf5, 0x5b, 0x7b,
- 0xb8, 0x96, 0x3c, 0xb9, 0x8b, 0x9f, 0xb2, 0x87, 0x74, 0xc8, 0xfc, 0x5d,
- 0x64, 0xf4, 0x18, 0x76, 0x49, 0xe8, 0xde, 0xc8, 0xe8, 0xeb, 0x40, 0xed,
- 0xe4, 0x5d, 0xda, 0x4f, 0xd6, 0xdf, 0x95, 0xff, 0x30, 0xc2, 0x40, 0xba,
- 0xf5, 0x6c, 0xb8, 0x9d, 0x6c, 0x7c, 0x9f, 0x17, 0xaf, 0x5e, 0xfc, 0x25,
- 0x39, 0xde, 0x5c, 0x6f, 0x05, 0x9e, 0x73, 0x4d, 0xb0, 0x71, 0x5a, 0xdc,
- 0xd8, 0x2d, 0x3b, 0xc5, 0xc9, 0xe6, 0x40, 0x37, 0x2d, 0xa8, 0xc0, 0xa5,
- 0x4b, 0x57, 0xb6, 0x88, 0x04, 0x39, 0x89, 0x61, 0x4f, 0xbe, 0xb3, 0xe8,
- 0xc0, 0xa4, 0xe5, 0x9b, 0xa7, 0xa6, 0xb4, 0x74, 0xaf, 0x5e, 0x04, 0x4d,
- 0x3c, 0xb7, 0x6d, 0x7c, 0xe0, 0x36, 0x7e, 0x61, 0x13, 0xbb, 0xc3, 0xed,
- 0xdd, 0x64, 0xe3, 0x74, 0xb4, 0xb5, 0x6b, 0x5b, 0x08, 0x9b, 0xd8, 0x45,
- 0x13, 0xf4, 0x50, 0xfb, 0xe5, 0xe7, 0xd4, 0xff, 0x8f, 0x59, 0xf1, 0x73,
- 0xb2, 0xf1, 0xc3, 0xce, 0x8e, 0x69, 0xe0, 0x2f, 0xc9, 0xfe, 0xf1, 0x0f,
- 0xc9, 0xf3, 0xa1, 0x69, 0xec, 0x7d, 0x7a, 0x2b, 0xcd, 0x09, 0xe8, 0xe7,
- 0x08, 0x8d, 0x98, 0xef, 0x83, 0x36, 0x5e, 0x74, 0xda, 0x38, 0x31, 0x7a,
- 0xe1, 0xbd, 0xb9, 0x56, 0xb6, 0x87, 0xcf, 0x76, 0x93, 0xfc, 0xc5, 0xe7,
- 0x2f, 0xb5, 0x21, 0x69, 0x03, 0xdf, 0xb7, 0xad, 0x95, 0x0c, 0x2b, 0x61,
- 0x44, 0x9d, 0xa3, 0x7b, 0xc3, 0xd0, 0xc0, 0x22, 0x80, 0x9c, 0x7f, 0x9d,
- 0x56, 0x5a, 0x4f, 0x93, 0xc0, 0xd4, 0xcd, 0x4e, 0x09, 0xdc, 0x6e, 0x06,
- 0xb3, 0xa5, 0xb9, 0x38, 0xf7, 0x82, 0xe1, 0x90, 0x6e, 0xaa, 0x8f, 0xfe,
- 0x25, 0x79, 0x37, 0x3a, 0x3e, 0x32, 0x33, 0xda, 0x36, 0x43, 0x73, 0x6b,
- 0xc8, 0x03, 0xc2, 0x57, 0x58, 0xdc, 0x57, 0x40, 0x6f, 0x94, 0x36, 0xfc,
- 0xca, 0x8f, 0x20, 0x3a, 0x73, 0x71, 0xd7, 0xe8, 0x97, 0xc2, 0x44, 0x06,
- 0xfb, 0x57, 0xa4, 0x42, 0xf0, 0x55, 0x8b, 0xae, 0xbf, 0x2d, 0x0b, 0x73,
- 0x4c, 0xaa, 0xb2, 0xa2, 0x68, 0xa6, 0xf5, 0x96, 0xb4, 0xf0, 0xed, 0xe1,
- 0x11, 0xa7, 0x1e, 0xbf, 0x4b, 0x0b, 0xc3, 0x23, 0x09, 0x42, 0xa8, 0xbe,
- 0x21, 0x9f, 0x3c, 0xbb, 0x73, 0xf8, 0xfd, 0x93, 0x87, 0xe2, 0xde, 0xec,
- 0xe3, 0x67, 0xc3, 0x1d, 0x02, 0x70, 0x20, 0xad, 0xf7, 0xed, 0x3b, 0xf3,
- 0xf7, 0xce, 0xf3, 0xf5, 0x84, 0xbe, 0x6a, 0x6b, 0xf0, 0x7a, 0x5e, 0xd7,
- 0x0e, 0x4e, 0x4f, 0xbf, 0x3d, 0xe6, 0xa0, 0x8c, 0x03, 0x31, 0xab, 0x92,
- 0x70, 0x65, 0xb5, 0x62, 0xe6, 0xae, 0x46, 0x7b, 0x73, 0x59, 0x2e, 0x70,
- 0xc6, 0xdd, 0x64, 0xd9, 0x82, 0x22, 0x04, 0x9a, 0x0e, 0x47, 0x68, 0x84,
- 0x47, 0xdb, 0x78, 0x23, 0x12, 0x7f, 0x5a, 0xf0, 0x47, 0x35, 0x41, 0xca,
- 0xaa, 0x09, 0x77, 0xfc, 0x60, 0xe1, 0x0d, 0x52, 0xeb, 0x32, 0xd3, 0x3a,
- 0x0a, 0xd2, 0x94, 0x9a, 0xa0, 0xb9, 0x08, 0x81, 0x79, 0x51, 0x74, 0xdf,
- 0xf5, 0x91, 0x91, 0xee, 0x79, 0xd0, 0x7b, 0x62, 0xb5, 0x5d, 0xf7, 0x40,
- 0x78, 0x21, 0xd1, 0x2e, 0xa4, 0x48, 0x07, 0x4c, 0xc7, 0x0f, 0x46, 0x96,
- 0xc0, 0x9c, 0x84, 0x37, 0xd7, 0xb0, 0x65, 0x23, 0x64, 0xee, 0xfd, 0xfe,
- 0xbb, 0xa3, 0x37, 0xdf, 0xed, 0x9f, 0x7c, 0x38, 0x32, 0xaf, 0xe4, 0x80,
- 0xbb, 0xb6, 0x61, 0x75, 0x18, 0xe3, 0x3c, 0x47, 0xd5, 0xc9, 0xda, 0x88,
- 0x07, 0xeb, 0x6b, 0x1c, 0xf2, 0x9d, 0xf4, 0xe8, 0xad, 0x1d, 0x7e, 0xcd,
- 0xd0, 0x05, 0xfd, 0xb5, 0xcb, 0x7f, 0xed, 0xfe, 0xa5, 0xb7, 0xd9, 0x9a,
- 0x74, 0xa0, 0x25, 0x13, 0xbd, 0xdc, 0x71, 0xa5, 0x16, 0x0a, 0xd9, 0xe1,
- 0x3c, 0x03, 0x5e, 0x95, 0x9e, 0xfa, 0x68, 0xf4, 0x6e, 0xa3, 0x67, 0x37,
- 0xc6, 0x0f, 0xbe, 0x0e, 0xde, 0xa3, 0x97, 0xde, 0x40, 0xc0, 0xe8, 0x6d,
- 0xf6, 0xad, 0xc8, 0x01, 0xf7, 0x35, 0xb5, 0xa1, 0x4d, 0x64, 0xf7, 0x0b,
- 0x8a, 0x52, 0xdc, 0xe8, 0xf1, 0x2f, 0x6f, 0x0e, 0xf7, 0x2f, 0x8e, 0xe8,
- 0x05, 0xed, 0x5e, 0xa1, 0xdc, 0x35, 0x1b, 0x80, 0xc6, 0xb3, 0xd1, 0xe3,
- 0x0f, 0xdf, 0xd0, 0x84, 0x7a, 0x9b, 0xec, 0xcb, 0x80, 0xa3, 0xbb, 0x33,
- 0xae, 0xb2, 0xd0, 0x60, 0x6a, 0x97, 0xce, 0x5b, 0x6b, 0x14, 0xc9, 0x46,
- 0x8f, 0xbf, 0xeb, 0x59, 0x0b, 0xae, 0xd4, 0x75, 0x16, 0x77, 0xe5, 0x14,
- 0xb9, 0x02, 0x41, 0x0a, 0x23, 0x87, 0x89, 0xb9, 0xfd, 0x11, 0x67, 0x05,
- 0x5b, 0x9c, 0x3c, 0x54, 0x62, 0xbb, 0xf1, 0x92, 0x2f, 0x4c, 0x36, 0xa6,
- 0xb2, 0xdc, 0xd9, 0x7d, 0xf6, 0x17, 0xac, 0xe7, 0x9b, 0xde, 0x96, 0xb9,
- 0x1b, 0x7a, 0x7f, 0xa1, 0xae, 0x73, 0x57, 0xdf, 0xd5, 0xee, 0x07, 0xe9,
- 0x53, 0x42, 0x51, 0x1c, 0xc2, 0x42, 0xbb, 0xee, 0xa1, 0xa0, 0x60, 0x41,
- 0xef, 0x38, 0xa3, 0x49, 0x71, 0x43, 0xd4, 0xa1, 0x8f, 0xfd, 0x1a, 0x67,
- 0x57, 0x79, 0x81, 0x1a, 0x5d, 0x6c, 0xd4, 0x45, 0x77, 0xfe, 0xfd, 0xd1,
- 0xe7, 0x77, 0x79, 0x8e, 0x82, 0xb3, 0x42, 0x7d, 0xce, 0x1f, 0x34, 0xe9,
- 0x09, 0x7d, 0x49, 0x41, 0x53, 0xcc, 0xa5, 0x2b, 0x1d, 0x8c, 0xc5, 0xb6,
- 0xa3, 0xca, 0x08, 0x64, 0x02, 0xc3, 0x5a, 0x1e, 0x20, 0x28, 0x71, 0x04,
- 0x80, 0x17, 0xf8, 0xa0, 0x77, 0x76, 0x3a, 0xa6, 0x6c, 0x5e, 0x9b, 0xe1,
- 0xe1, 0x69, 0xe5, 0x76, 0xe9, 0xf5, 0xf8, 0xe5, 0x1e, 0x82, 0x0d, 0x5d,
- 0x94, 0xbc, 0x96, 0xb5, 0xb5, 0x21, 0xc1, 0xdb, 0x28, 0xcf, 0xb6, 0xf7,
- 0xa9, 0x93, 0x3b, 0x85, 0x69, 0xb0, 0x4a, 0xcf, 0xfa, 0xb1, 0x61, 0x35,
- 0x45, 0x56, 0x3d, 0x1a, 0xf4, 0x10, 0x71, 0x46, 0x61, 0x8a, 0x5e, 0x32,
- 0x1e, 0xbd, 0x33, 0x1c, 0x0e, 0x5d, 0x8d, 0x5c, 0xda, 0x16, 0xf1, 0x41,
- 0xa1, 0xb6, 0x89, 0x87, 0xb3, 0x89, 0x35, 0xde, 0x80, 0x30, 0x0f, 0x81,
- 0x7a, 0x53, 0x82, 0x61, 0xc4, 0x4e, 0x60, 0x8f, 0x86, 0x67, 0xe3, 0x58,
- 0x97, 0x6e, 0xd7, 0x35, 0xb9, 0xfd, 0x26, 0xb6, 0x09, 0x8f, 0x8c, 0x8d,
- 0x6d, 0x8f, 0x52, 0x19, 0xcf, 0xf2, 0xa9, 0xd2, 0xae, 0x05, 0x51, 0x30,
- 0x05, 0x75, 0x83, 0x4e, 0x38, 0xb5, 0x93, 0x17, 0x4d, 0x86, 0xe2, 0x0a,
- 0x40, 0x1b, 0x51, 0x0f, 0xd9, 0xe6, 0x5c, 0x0a, 0x63, 0x51, 0x91, 0xa6,
- 0x47, 0x6b, 0xac, 0x37, 0xc8, 0xc2, 0x8a, 0xcd, 0xd2, 0x8e, 0xc0, 0xae,
- 0x92, 0xce, 0x0c, 0xd9, 0xbf, 0xef, 0xa0, 0x59, 0xd7, 0x50, 0xac, 0x2f,
- 0x13, 0xed, 0xd9, 0x0c, 0x15, 0x6e, 0x2f, 0x99, 0xbc, 0x33, 0x57, 0x51,
- 0x04, 0xd8, 0x80, 0x81, 0x2f, 0x34, 0x69, 0x4e, 0xb9, 0x87, 0x40, 0x1f,
- 0x3c, 0xe6, 0x2f, 0x9f, 0x68, 0x8b, 0xd6, 0x59, 0xde, 0x59, 0x1b, 0x77,
- 0x2b, 0xb7, 0x59, 0x97, 0x59, 0x51, 0xb6, 0x2e, 0x33, 0xc4, 0x80, 0xe3,
- 0x7b, 0x49, 0x7a, 0x47, 0xb5, 0x9a, 0x33, 0x8a, 0x99, 0x44, 0xa4, 0x03,
- 0xac, 0x32, 0x27, 0x9e, 0x9d, 0xd1, 0x81, 0xcf, 0x4a, 0x39, 0xf8, 0xd4,
- 0x15, 0x84, 0xd7, 0xaa, 0xaf, 0x0c, 0x2b, 0xaa, 0x06, 0xbd, 0x1c, 0xb5,
- 0x69, 0x09, 0x06, 0x52, 0x24, 0x75, 0x55, 0xcf, 0x69, 0xe4, 0x9b, 0xa8,
- 0xde, 0xc9, 0xe2, 0x3c, 0x62, 0x05, 0xc9, 0xce, 0xc1, 0x71, 0x15, 0xba,
- 0x5a, 0x80, 0x62, 0xb7, 0x9d, 0x58, 0xff, 0xb4, 0x98, 0x9f, 0x28, 0xe4,
- 0xb6, 0x18, 0xd8, 0xb2, 0xdb, 0x36, 0x1e, 0xab, 0xca, 0xaf, 0xae, 0xa4,
- 0x60, 0x68, 0x77, 0x6a, 0x71, 0x22, 0x3b, 0xa1, 0x55, 0xa1, 0xc8, 0xe4,
- 0x87, 0x55, 0xab, 0x79, 0xa1, 0x36, 0x1f, 0xb5, 0xba, 0xb4, 0x88, 0x59,
- 0x7d, 0x92, 0xbc, 0x6f, 0x0d, 0xaa, 0x0a, 0x23, 0x15, 0x9c, 0x92, 0x26,
- 0xda, 0x3e, 0xe4, 0xd3, 0xf3, 0x35, 0x40, 0x71, 0x17, 0x2e, 0xf3, 0x5d,
- 0x37, 0x1d, 0x28, 0x66, 0x2e, 0x02, 0xc5, 0x45, 0x87, 0xde, 0xd9, 0xf0,
- 0x27, 0xae, 0xe9, 0x35, 0x4e, 0x9d, 0xca, 0xb5, 0x96, 0xb4, 0xac, 0xbd,
- 0x54, 0x76, 0xe2, 0xb8, 0x10, 0x3e, 0x54, 0xde, 0x66, 0x0e, 0x4a, 0xcf,
- 0x19, 0x1c, 0x1d, 0xfc, 0xa9, 0x9c, 0x7e, 0xcb, 0x4c, 0x3a, 0x0e, 0x5e,
- 0xcb, 0xaf, 0x30, 0xc9, 0xce, 0xaa, 0xf8, 0xf5, 0x2d, 0xc4, 0x54, 0x52,
- 0xfa, 0x2c, 0x9e, 0xc7, 0x26, 0x7e, 0x6b, 0x6d, 0x91, 0x69, 0x84, 0xa1,
- 0x30, 0x3c, 0xd5, 0x84, 0x0b, 0x33, 0x28, 0xa2, 0xb8, 0x8d, 0x9b, 0x73,
- 0xfe, 0x5f, 0x9d, 0x65, 0xcf, 0x6e, 0x52, 0x0f, 0x69, 0x70, 0x63, 0x21,
- 0x02, 0xd0, 0x00, 0x09, 0x74, 0xd6, 0x85, 0xbf, 0x3f, 0x4b, 0x29, 0x88,
- 0xa5, 0xe4, 0xe8, 0x00, 0x6c, 0x19, 0x88, 0x1a, 0xc6, 0xb4, 0x0e, 0x4f,
- 0x0d, 0x8e, 0x9f, 0x8d, 0xd6, 0x60, 0x5a, 0x03, 0x10, 0x2a, 0x35, 0x63,
- 0xa8, 0x04, 0x11, 0xd6, 0x13, 0xbf, 0xe8, 0xeb, 0xea, 0x24, 0xf1, 0x71,
- 0xeb, 0x8c, 0x3e, 0x75, 0x64, 0xcf, 0xce, 0x4f, 0xbf, 0x3e, 0x3f, 0x1a,
- 0x8d, 0x92, 0x77, 0x47, 0x17, 0xac, 0xf6, 0x4b, 0x25, 0xed, 0x2b, 0xd2,
- 0xdc, 0x13, 0xb8, 0x1d, 0x14, 0xf4, 0x46, 0xa3, 0x4f, 0xd4, 0xa6, 0x80,
- 0x94, 0xa4, 0x92, 0x5c, 0x6a, 0x10, 0xe5, 0xa0, 0xcf, 0xcf, 0x24, 0xa0,
- 0xee, 0x1a, 0x86, 0x7f, 0x84, 0x37, 0xc1, 0x37, 0x69, 0xed, 0xe8, 0xce,
- 0xa2, 0x0a, 0x19, 0x99, 0x03, 0x9e, 0xae, 0x95, 0x73, 0x39, 0x6b, 0x3a,
- 0xdd, 0xde, 0xe6, 0x5f, 0x4c, 0xef, 0x4f, 0xc9, 0x45, 0xd9, 0x10, 0x40,
- 0x27, 0xfd, 0x7a, 0xae, 0xf4, 0xf1, 0xa7, 0xe4, 0x07, 0xd3, 0xe6, 0xd4,
- 0xac, 0x3a, 0x19, 0x93, 0xcd, 0x85, 0x3b, 0x42, 0xc9, 0x42, 0x57, 0x87,
- 0x05, 0x20, 0xe3, 0x7e, 0xa5, 0xe6, 0x65, 0x55, 0x0d, 0xe3, 0x65, 0x4c,
- 0x5a, 0x75, 0x48, 0x18, 0x27, 0x46, 0xc2, 0xeb, 0x6c, 0xcf, 0x52, 0x8b,
- 0x34, 0x49, 0x4e, 0xb2, 0xcb, 0x06, 0x02, 0x09, 0x75, 0x67, 0x9a, 0xdb,
- 0x26, 0xc0, 0xdc, 0x1d, 0xaa, 0xaf, 0x64, 0x7e, 0x7d, 0xf6, 0xf9, 0xcb,
- 0xed, 0xcf, 0xf9, 0x57, 0xfd, 0xf9, 0xea, 0xf9, 0xb6, 0x00, 0x4f, 0x9b,
- 0xbf, 0x9e, 0xef, 0x3d, 0xdf, 0xd9, 0x23, 0x3c, 0xbc, 0xed, 0xbd, 0x6d,
- 0xf3, 0xff, 0xcf, 0xe5, 0x13, 0x02, 0xfd, 0x7b, 0xb5, 0xfb, 0xf9, 0x67,
- 0x08, 0x8c, 0x21, 0xfa, 0x98, 0x99, 0x4e, 0x06, 0x4d, 0x39, 0x00, 0x2c,
- 0x0f, 0x84, 0xa0, 0x3f, 0xb5, 0x8d, 0x92, 0xe4, 0x69, 0x9f, 0x90, 0x5f,
- 0xf5, 0x8a, 0xd5, 0x9b, 0x59, 0x06, 0x3c, 0xfe, 0x4b, 0x0f, 0x6a, 0x44,
- 0x03, 0xb8, 0x39, 0xdb, 0x58, 0xa6, 0x21, 0x6f, 0x37, 0xf8, 0x1b, 0x38,
- 0x57, 0xad, 0x77, 0x38, 0x0e, 0xdc, 0x83, 0xd4, 0xfa, 0xa5, 0x5d, 0x6b,
- 0xfe, 0xf3, 0x1a, 0x80, 0xb2, 0x64, 0xab, 0xe4, 0xbd, 0x89, 0x96, 0x73,
- 0xb5, 0x4f, 0x91, 0x44, 0x38, 0xe7, 0x94, 0x81, 0x4b, 0x8e, 0x26, 0xfe,
- 0xa5, 0xfd, 0xb1, 0x11, 0x8b, 0xde, 0x12, 0x6a, 0x48, 0xc2, 0xde, 0x6c,
- 0xaa, 0x40, 0xa4, 0xaf, 0x16, 0xf1, 0xac, 0xb9, 0xed, 0x77, 0x2b, 0x45,
- 0x5c, 0x4d, 0x1e, 0xb2, 0x29, 0x56, 0x5c, 0x1d, 0x33, 0x32, 0xe5, 0xa0,
- 0x39, 0x21, 0xa3, 0x5f, 0xd0, 0x9c, 0x9b, 0x11, 0x28, 0xd8, 0xee, 0xdc,
- 0xc0, 0xdb, 0x9c, 0x9c, 0x63, 0xdc, 0x74, 0x35, 0x2c, 0x10, 0xa3, 0xde,
- 0x78, 0xfc, 0xaa, 0x25, 0xd9, 0x01, 0xbf, 0x21, 0xe2, 0xa7, 0x4d, 0x5b,
- 0x93, 0xc2, 0xdc, 0xf6, 0x79, 0xa5, 0xec, 0xa0, 0x2b, 0xa2, 0x46, 0xaf,
- 0x3f, 0xe9, 0x03, 0xe7, 0xc9, 0x1e, 0xba, 0x47, 0xa7, 0xe6, 0x42, 0xdf,
- 0x6d, 0x6d, 0xd0, 0x0d, 0x1b, 0x4a, 0x1e, 0x3b, 0x92, 0xee, 0x39, 0x44,
- 0x97, 0xdb, 0xe6, 0xfc, 0x8b, 0x08, 0x95, 0x61, 0x31, 0x3e, 0xe0, 0xe9,
- 0x2c, 0x09, 0x0e, 0x7d, 0x53, 0x59, 0xd8, 0xe0, 0x8f, 0x36, 0x82, 0x0b,
- 0xf7, 0x9a, 0x94, 0x0f, 0x4c, 0x99, 0xf2, 0x67, 0x7e, 0xaa, 0xab, 0xe5,
- 0x76, 0xe3, 0xb4, 0x6a, 0xc1, 0x8e, 0xaf, 0x09, 0xa0, 0xfd, 0x9c, 0x30,
- 0xbd, 0xbc, 0x1a, 0xf0, 0x7f, 0x58, 0x5b, 0x1b, 0x9d, 0x1d, 0x1d, 0x1d,
- 0x26, 0x27, 0xc7, 0xef, 0x8e, 0x2f, 0x3c, 0x81, 0xdc, 0x5e, 0x24, 0x6a,
- 0x74, 0xd5, 0x12, 0x3d, 0x9d, 0xe5, 0x70, 0x30, 0xb7, 0x52, 0x3a, 0x41,
- 0xae, 0xf2, 0x79, 0x26, 0x49, 0x0e, 0xb3, 0xee, 0x7b, 0x50, 0xbd, 0x01,
- 0xa6, 0x33, 0x4c, 0xbe, 0xf2, 0x62, 0x24, 0x93, 0xda, 0x08, 0x37, 0x13,
- 0x5b, 0x33, 0x75, 0xf0, 0x57, 0x09, 0xd9, 0x68, 0x4b, 0x4e, 0x82, 0xd6,
- 0x69, 0x33, 0x6e, 0x24, 0xcc, 0xb5, 0x33, 0x2a, 0x5a, 0xdb, 0x8c, 0x23,
- 0x9f, 0x3d, 0x0b, 0x1d, 0x22, 0xf8, 0xee, 0x32, 0x24, 0xe9, 0xcf, 0x73,
- 0x4e, 0x85, 0xf4, 0xc3, 0x8b, 0x6d, 0x19, 0xc9, 0x8b, 0x92, 0xf9, 0xb8,
- 0xdf, 0xa3, 0x5f, 0x1f, 0x58, 0x63, 0x6b, 0xb5, 0x2f, 0xbf, 0xf0, 0xec,
- 0xb3, 0x6d, 0x9b, 0x4d, 0xb0, 0x00, 0xcf, 0x11, 0x51, 0x9f, 0x3a, 0xdb,
- 0x49, 0x8c, 0x3c, 0xb2, 0x24, 0xa9, 0xbe, 0x5a, 0x16, 0xc1, 0x75, 0xf7,
- 0x57, 0x7e, 0xd7, 0xcc, 0xff, 0xe5, 0x36, 0xae, 0xb7, 0xcb, 0xb4, 0x1a,
- 0x18, 0xc9, 0xeb, 0x61, 0xa0, 0xd6, 0x55, 0xa6, 0x08, 0x09, 0x3d, 0x66,
- 0xd3, 0x4f, 0xe6, 0x2a, 0x56, 0x76, 0xa4, 0x45, 0x97, 0x12, 0x52, 0xc2,
- 0x45, 0x39, 0x93, 0x03, 0x40, 0x53, 0xa7, 0x44, 0x5c, 0x35, 0x76, 0x3a,
- 0x59, 0xc7, 0x21, 0xb9, 0xea, 0x2e, 0x3a, 0x1e, 0x45, 0x09, 0x02, 0x60,
- 0xab, 0xd4, 0x6a, 0x4e, 0xd3, 0x94, 0xb9, 0x84, 0xa2, 0xf5, 0x3c, 0xd9,
- 0xf9, 0x9c, 0xe6, 0xf1, 0x69, 0xf3, 0x79, 0x5b, 0x56, 0x13, 0x9b, 0xf2,
- 0x0b, 0x75, 0xc1, 0xcb, 0xff, 0xe4, 0xac, 0x05, 0x94, 0xb7, 0xe1, 0xd5,
- 0xd5, 0xf8, 0x58, 0xc4, 0xef, 0x91, 0x7e, 0x22, 0xae, 0x75, 0x58, 0xa6,
- 0xe0, 0xeb, 0x66, 0x09, 0x89, 0xee, 0x1a, 0x59, 0x17, 0xb2, 0xb5, 0x72,
- 0xfc, 0xde, 0x7a, 0x65, 0xf3, 0x43, 0x79, 0x19, 0xc8, 0x3a, 0x62, 0x68,
- 0xed, 0x2e, 0x9f, 0x42, 0xaa, 0x76, 0x98, 0x5e, 0x66, 0xbf, 0x98, 0xf8,
- 0x38, 0x6c, 0x1a, 0xee, 0x4b, 0xf8, 0x3d, 0xed, 0xc8, 0x44, 0x80, 0xa1,
- 0x65, 0x2d, 0x61, 0x5c, 0xd8, 0x80, 0xfc, 0x40, 0xe9, 0xc7, 0xce, 0x45,
- 0x40, 0xaa, 0x14, 0xb1, 0xe6, 0x9e, 0xeb, 0x85, 0x42, 0xf9, 0x9b, 0x66,
- 0xa6, 0x76, 0x85, 0x77, 0x96, 0xb0, 0xdb, 0x73, 0x26, 0x80, 0x11, 0x6f,
- 0xda, 0x3b, 0xdb, 0x46, 0x7e, 0x9d, 0x95, 0xdd, 0xfa, 0xd6, 0xa1, 0x52,
- 0x8a, 0x69, 0x0d, 0xb0, 0x3a, 0x3b, 0xdb, 0xdf, 0xae, 0x5e, 0x75, 0xa0,
- 0x82, 0x3f, 0xfa, 0xf2, 0xee, 0xf3, 0x47, 0x36, 0xed, 0xb4, 0x82, 0x5e,
- 0x9e, 0x69, 0x38, 0x24, 0x04, 0x41, 0xe7, 0x84, 0x09, 0xb6, 0xcd, 0x10,
- 0x7e, 0x76, 0x95, 0xd2, 0xf0, 0x1f, 0x1b, 0xbd, 0xa6, 0x6c, 0x74, 0x86,
- 0xf2, 0x4e, 0x02, 0xb4, 0xf9, 0xcb, 0x9a, 0x2c, 0x64, 0x0b, 0x40, 0xa2,
- 0x39, 0x35, 0xd6, 0x66, 0x7b, 0x33, 0xee, 0x84, 0xf7, 0x36, 0x73, 0xce,
- 0x7e, 0x9b, 0x49, 0x28, 0xf5, 0x54, 0xd9, 0xd5, 0x92, 0x81, 0x1d, 0x4a,
- 0x56, 0xfb, 0x09, 0x00, 0x58, 0xce, 0xab, 0xe1, 0xcd, 0x14, 0x49, 0xc4,
- 0xf4, 0x04, 0xc6, 0x3b, 0x49, 0x55, 0x64, 0x65, 0x91, 0xa3, 0x7b, 0x31,
- 0x90, 0x7d, 0x76, 0x42, 0x0e, 0x31, 0x70, 0x83, 0xb5, 0xa4, 0x5b, 0xfa,
- 0x96, 0x11, 0xee, 0x86, 0x48, 0xc4, 0x65, 0x42, 0xb1, 0xcc, 0x9e, 0xb2,
- 0xbe, 0xc8, 0x31, 0xd6, 0xb0, 0x87, 0x00, 0x0d, 0xf4, 0x85, 0x6a, 0xd1,
- 0x92, 0xed, 0x8a, 0x38, 0x7e, 0xad, 0x48, 0x83, 0x8c, 0x4b, 0x4e, 0x76,
- 0xff, 0x83, 0xd3, 0xf7, 0x6f, 0x8f, 0xbf, 0xb6, 0x08, 0x3c, 0xcc, 0xc4,
- 0xb5, 0x26, 0x27, 0xda, 0xb4, 0x25, 0x8a, 0xad, 0xd3, 0x5b, 0x6a, 0xd7,
- 0x49, 0x20, 0xae, 0x61, 0x4f, 0x1f, 0xfd, 0x0f, 0xc0, 0x40, 0x8a, 0x67,
- 0x64, 0x2b, 0x67, 0x44, 0x8b, 0x7a, 0xd3, 0x59, 0x1e, 0x3a, 0xf0, 0x60,
- 0x9c, 0xb0, 0x91, 0x56, 0xcd, 0x72, 0x61, 0xe3, 0x09, 0xbd, 0xda, 0x77,
- 0x82, 0x58, 0xac, 0x99, 0xe2, 0xcb, 0x05, 0xb3, 0x26, 0xc9, 0xf7, 0x6c,
- 0x19, 0x76, 0xf9, 0x0e, 0x20, 0xcb, 0x82, 0x40, 0x80, 0xc8, 0x05, 0x10,
- 0x84, 0xe8, 0xcc, 0x08, 0xe2, 0xd0, 0x0f, 0x9d, 0x57, 0x57, 0xce, 0x14,
- 0xd5, 0x03, 0xfd, 0xaa, 0xc5, 0x73, 0xd6, 0xcc, 0x68, 0xde, 0x28, 0x36,
- 0x6b, 0xe3, 0x72, 0x6c, 0x20, 0xb0, 0x73, 0x15, 0xd9, 0x72, 0x41, 0x2e,
- 0x54, 0x49, 0xb3, 0x4c, 0x53, 0x78, 0x2d, 0xe1, 0xf6, 0xc4, 0x27, 0x6f,
- 0xc8, 0x43, 0xb3, 0x47, 0xc0, 0xdd, 0x73, 0x06, 0xf1, 0xf2, 0xb3, 0x43,
- 0x85, 0x4b, 0x3a, 0x74, 0xed, 0xe3, 0x4b, 0x2f, 0xe1, 0x8c, 0x43, 0x06,
- 0x95, 0xe8, 0xd8, 0x5c, 0x4c, 0xb6, 0x96, 0xf5, 0x3f, 0xae, 0x0f, 0xea,
- 0x87, 0xf9, 0xb8, 0x9c, 0x69, 0x0e, 0x86, 0xc5, 0x77, 0xd0, 0x87, 0xb4,
- 0x1c, 0x55, 0xca, 0x35, 0xdc, 0xd1, 0xb5, 0x67, 0xa1, 0x74, 0x61, 0x53,
- 0x6e, 0xfc, 0x5c, 0xcf, 0x05, 0x9e, 0x22, 0x9d, 0x85, 0x45, 0x1d, 0xc9,
- 0x8a, 0xc9, 0xac, 0x14, 0xaa, 0xa6, 0xfc, 0x6f, 0xac, 0x54, 0x7b, 0xea,
- 0xe4, 0xfc, 0x2b, 0x97, 0x64, 0xec, 0x40, 0xad, 0x06, 0x23, 0xee, 0xf4,
- 0x04, 0xf0, 0x02, 0x13, 0xa4, 0xb7, 0xf9, 0x0b, 0x09, 0xd0, 0x57, 0xb8,
- 0x16, 0xd3, 0x10, 0x17, 0x77, 0x30, 0x43, 0xfd, 0x89, 0x6d, 0x8b, 0xec,
- 0x02, 0xfc, 0xab, 0x76, 0xae, 0x8f, 0x76, 0x96, 0xde, 0xd0, 0x53, 0x5a,
- 0x5d, 0x09, 0x32, 0x9a, 0x38, 0xd5, 0xa0, 0x24, 0xda, 0x92, 0x1b, 0xd6,
- 0x46, 0x49, 0x42, 0x89, 0x0d, 0xa0, 0x81, 0xf8, 0xb4, 0xe4, 0x94, 0x3f,
- 0x49, 0x88, 0x62, 0xeb, 0xa4, 0x25, 0x44, 0x8f, 0xe3, 0xfc, 0xd1, 0x86,
- 0xa5, 0xa4, 0xee, 0x2e, 0xd3, 0x52, 0x00, 0xce, 0x54, 0x2b, 0x97, 0x99,
- 0xf7, 0x1a, 0xd9, 0xf3, 0xa0, 0x09, 0x67, 0x62, 0x43, 0xe1, 0xae, 0x20,
- 0x4b, 0x10, 0x28, 0x20, 0xf2, 0x80, 0xb2, 0xda, 0x35, 0xc1, 0xdf, 0xbf,
- 0x91, 0x02, 0x40, 0xe6, 0x3c, 0x0b, 0x90, 0x89, 0x40, 0xb6, 0x7d, 0xbe,
- 0x2d, 0x96, 0xb8, 0x46, 0x22, 0x57, 0xeb, 0x64, 0xff, 0xfc, 0xc8, 0x48,
- 0xb6, 0x57, 0x05, 0x20, 0x24, 0x8a, 0x46, 0x73, 0xde, 0xb2, 0x42, 0x6a,
- 0x0e, 0x15, 0x7a, 0x3e, 0xa8, 0xc3, 0x3b, 0xef, 0x4d, 0x22, 0x26, 0x89,
- 0x11, 0xe0, 0xf4, 0x6a, 0x47, 0x72, 0x13, 0xc5, 0x5f, 0x05, 0xd7, 0x21,
- 0x14, 0x03, 0x26, 0x29, 0xf2, 0x96, 0x98, 0xae, 0x4a, 0xc5, 0x5e, 0x3d,
- 0x0b, 0xd8, 0xba, 0x0f, 0xba, 0xaa, 0x6b, 0x8d, 0x53, 0xed, 0xb2, 0x12,
- 0xfe, 0xae, 0x58, 0x88, 0xd2, 0x57, 0xcb, 0x03, 0xea, 0xc8, 0xa9, 0x1f,
- 0xb7, 0x1e, 0xfd, 0x1d, 0xf7, 0x0c, 0xc9, 0x22, 0x5d, 0xb9, 0x20, 0xb3,
- 0xc1, 0xf6, 0x6c, 0xc8, 0x9e, 0x7a, 0xc2, 0x2f, 0x67, 0xe8, 0xa1, 0x74,
- 0x36, 0x6c, 0xd4, 0x24, 0xfc, 0xa4, 0xb5, 0x64, 0x43, 0x89, 0x3a, 0x30,
- 0x95, 0xb3, 0x4a, 0x54, 0x41, 0x91, 0xc3, 0x63, 0x02, 0xff, 0xb9, 0x61,
- 0x01, 0xc0, 0xe7, 0x4f, 0x51, 0x33, 0xef, 0x1f, 0xed, 0x6c, 0xdd, 0x18,
- 0xec, 0x97, 0xf4, 0xd1, 0x1b, 0x0b, 0x90, 0x86, 0x12, 0xe0, 0xd4, 0x11,
- 0x58, 0x2a, 0xdc, 0xa7, 0xf4, 0x0b, 0x3e, 0x46, 0x00, 0x9c, 0x22, 0x4c,
- 0xb6, 0xf0, 0x8c, 0xa4, 0xc8, 0x88, 0x3f, 0x10, 0xf6, 0xf1, 0x81, 0x43,
- 0x8f, 0x7d, 0xd1, 0x78, 0xf0, 0xed, 0x96, 0x96, 0x0d, 0x25, 0x53, 0x0e,
- 0xe5, 0xf7, 0xea, 0x81, 0xaf, 0xb3, 0x56, 0x9d, 0x51, 0x9b, 0x34, 0xd4,
- 0x1b, 0xf4, 0xcc, 0x5a, 0xac, 0xcf, 0x66, 0x8e, 0xe1, 0xeb, 0x63, 0xb4,
- 0xab, 0xc8, 0xaf, 0x73, 0x02, 0x93, 0xf0, 0x2e, 0x2a, 0x60, 0xf0, 0xd0,
- 0xca, 0x76, 0xa0, 0x0a, 0x50, 0x94, 0x0c, 0x64, 0xf1, 0xa8, 0x90, 0x31,
- 0x82, 0x78, 0x81, 0xdb, 0xbc, 0x56, 0x3f, 0xa4, 0xa1, 0xed, 0x09, 0x87,
- 0x47, 0x34, 0x8c, 0x17, 0x90, 0x35, 0x13, 0x6f, 0x29, 0xb3, 0xc9, 0x75,
- 0xc9, 0xe1, 0xb5, 0x66, 0xd1, 0xbc, 0x44, 0xcc, 0x5e, 0xf2, 0x9f, 0x42,
- 0x03, 0xdf, 0xba, 0xfc, 0x3d, 0x22, 0x84, 0x21, 0x63, 0xff, 0x0d, 0x1d,
- 0x41, 0x1c, 0xfd, 0x70, 0x71, 0xbe, 0x9f, 0x7c, 0x73, 0xb4, 0x7f, 0x78,
- 0x74, 0x3e, 0xea, 0x5c, 0xfa, 0x12, 0x09, 0xc2, 0x12, 0x1a, 0xd9, 0x83,
- 0x21, 0x1a, 0x2b, 0x2e, 0x80, 0x84, 0xf0, 0x2b, 0xd7, 0x33, 0xc4, 0x43,
- 0x07, 0xc9, 0x9c, 0x0f, 0x52, 0x88, 0xd8, 0x71, 0x00, 0xa0, 0xd8, 0x1a,
- 0xcc, 0xc6, 0xb6, 0x31, 0x31, 0x1c, 0x8a, 0xe2, 0x19, 0xd4, 0x7a, 0xee,
- 0x27, 0xcf, 0x38, 0x88, 0x39, 0x77, 0x99, 0x4c, 0x4b, 0xcd, 0x0b, 0x6c,
- 0xef, 0xdc, 0x37, 0x2e, 0x1d, 0xdb, 0x63, 0x5b, 0x72, 0xc9, 0x88, 0x01,
- 0xb1, 0xf7, 0xc3, 0xc0, 0xf4, 0x3b, 0x30, 0x8b, 0x3f, 0x20, 0x5c, 0xc0,
- 0x87, 0xac, 0xee, 0x75, 0xac, 0x81, 0xed, 0xee, 0xc1, 0xa3, 0xaf, 0xc2,
- 0x93, 0xf4, 0x4d, 0xb4, 0x25, 0x3a, 0x5d, 0x54, 0x18, 0x37, 0xd0, 0x20,
- 0x70, 0xa9, 0x7a, 0x42, 0xb2, 0x9c, 0xa0, 0x20, 0xd3, 0x45, 0x62, 0x95,
- 0x9c, 0x9a, 0x29, 0xa1, 0x61, 0x18, 0x88, 0x4c, 0x01, 0xb2, 0x8e, 0x39,
- 0x7b, 0x7c, 0xa9, 0xc3, 0x2e, 0xa2, 0x90, 0xb5, 0x66, 0x58, 0xf2, 0x90,
- 0x7f, 0x3f, 0xc0, 0x17, 0x22, 0xe1, 0xf8, 0x75, 0xcb, 0x55, 0x2a, 0x76,
- 0x51, 0x29, 0x87, 0x26, 0xcd, 0xd1, 0x18, 0x2c, 0xcd, 0x6b, 0x14, 0x3f,
- 0x75, 0xa9, 0x95, 0x18, 0xe4, 0x5d, 0x0e, 0x08, 0x23, 0xa5, 0x1e, 0xa6,
- 0x4e, 0x2e, 0xeb, 0x48, 0xef, 0xa8, 0xbc, 0xea, 0xa5, 0x05, 0xf9, 0xc4,
- 0x8c, 0xb2, 0x51, 0x08, 0x24, 0xb7, 0xcf, 0x65, 0xc9, 0x37, 0x65, 0x8d,
- 0xbb, 0x20, 0x7c, 0x9c, 0x2e, 0xf9, 0xd8, 0xf2, 0xe3, 0x0d, 0x71, 0x75,
- 0x59, 0x60, 0x4e, 0xe0, 0xd8, 0x82, 0x7d, 0x9d, 0xed, 0x5f, 0x7c, 0x03,
- 0x47, 0x2b, 0x48, 0xf8, 0x10, 0x80, 0x26, 0xea, 0x5e, 0x0b, 0xb3, 0xb3,
- 0xac, 0x02, 0xc7, 0xf2, 0xaf, 0xe2, 0x09, 0xaa, 0x3c, 0x09, 0x47, 0x5e,
- 0xce, 0x31, 0x49, 0x33, 0x2e, 0xa3, 0x09, 0x1e, 0xdd, 0x2a, 0x66, 0x86,
- 0x28, 0x78, 0x9b, 0x7a, 0x67, 0x43, 0x2f, 0xd7, 0x39, 0x4f, 0x7d, 0x9d,
- 0xe7, 0x04, 0xa2, 0x27, 0x61, 0x8e, 0x34, 0x1e, 0x1f, 0xed, 0x15, 0x5f,
- 0x50, 0x22, 0x32, 0xfb, 0xa2, 0xa6, 0x65, 0x1c, 0xae, 0xcf, 0x3b, 0xd2,
- 0x5f, 0xce, 0x1f, 0x86, 0x21, 0x3e, 0x4e, 0xf2, 0xd5, 0xb2, 0x69, 0xb3,
- 0x95, 0x0e, 0xe6, 0xac, 0x95, 0x2c, 0xab, 0xb2, 0x6c, 0xbc, 0x31, 0x40,
- 0xfa, 0x49, 0x1b, 0x39, 0xd1, 0x8c, 0xcb, 0xc8, 0x63, 0xa1, 0xa6, 0x0a,
- 0x91, 0xbb, 0x7d, 0xc1, 0x30, 0x1d, 0xd7, 0xe5, 0x6c, 0xd9, 0x78, 0x81,
- 0xd8, 0xbf, 0x6c, 0xcc, 0xde, 0xa0, 0x37, 0x8e, 0x87, 0x8a, 0x51, 0x49,
- 0x55, 0x90, 0x8d, 0x10, 0x6e, 0x34, 0x7d, 0x23, 0x5e, 0xc2, 0xef, 0x58,
- 0x95, 0x45, 0xbb, 0xde, 0x16, 0x62, 0xbe, 0x37, 0xd7, 0xd6, 0x46, 0xba,
- 0xd9, 0x04, 0x11, 0x1a, 0x6e, 0xfa, 0xf7, 0x90, 0x26, 0x69, 0x0c, 0xec,
- 0x37, 0x98, 0x98, 0x5f, 0x14, 0xa3, 0x2d, 0xe3, 0x3d, 0x05, 0x0b, 0xe7,
- 0x3d, 0xce, 0xeb, 0xf6, 0xa4, 0xf0, 0x95, 0xf5, 0x5c, 0x68, 0xaa, 0xd9,
- 0x45, 0xa9, 0xd8, 0xe7, 0xe2, 0xb9, 0x73, 0x04, 0xd1, 0x4a, 0x56, 0x8f,
- 0xa2, 0xfa, 0xd2, 0x25, 0xa0, 0xc5, 0x59, 0x6d, 0x64, 0x2e, 0x0d, 0x72,
- 0xeb, 0x7f, 0x6d, 0x25, 0xfd, 0x44, 0xea, 0x66, 0x47, 0x30, 0x88, 0xfe,
- 0x2f, 0xc4, 0x60, 0x09, 0xa4, 0x2a, 0xb5, 0xd9, 0xc1, 0x21, 0x1d, 0x1a,
- 0x15, 0xea, 0xba, 0x9a, 0x38, 0xea, 0x37, 0xd2, 0x41, 0x76, 0x47, 0xfa,
- 0x8b, 0xea, 0x08, 0x82, 0xe6, 0xc1, 0xf5, 0x51, 0x2d, 0x3e, 0x12, 0xd0,
- 0x30, 0x2e, 0xad, 0x55, 0x8f, 0x4a, 0x15, 0x72, 0xe1, 0x3e, 0x16, 0xeb,
- 0x51, 0xb6, 0x46, 0x3d, 0xa8, 0x9c, 0xf0, 0x6e, 0xf5, 0xf6, 0x3a, 0xa9,
- 0x4b, 0xfe, 0x57, 0xf3, 0x8f, 0x24, 0xc6, 0x4b, 0xc8, 0xdf, 0x2b, 0x87,
- 0x26, 0x75, 0x44, 0x91, 0xe5, 0x24, 0xc1, 0xa7, 0x1c, 0x58, 0xa7, 0x9e,
- 0x49, 0x1d, 0xa4, 0x4a, 0x01, 0xe4, 0xb8, 0x04, 0x1a, 0xa3, 0x00, 0x83,
- 0x50, 0x50, 0x19, 0x21, 0xc6, 0x72, 0xfe, 0x36, 0x15, 0xba, 0x53, 0x4d,
- 0x46, 0xaf, 0x54, 0xcd, 0xe8, 0xb0, 0x3b, 0xe5, 0x86, 0x2f, 0x77, 0x3f,
- 0x72, 0xe4, 0xe1, 0xa4, 0xbb, 0x4b, 0x09, 0xc6, 0xcc, 0x89, 0x04, 0x3a,
- 0x25, 0x29, 0x96, 0xc9, 0x71, 0x1c, 0x7e, 0x6c, 0x8a, 0x0b, 0xde, 0xbc,
- 0xa2, 0x84, 0x0f, 0x31, 0x49, 0x09, 0xd4, 0x08, 0xec, 0x5f, 0xd7, 0xb9,
- 0x84, 0x98, 0xf2, 0xaa, 0xb7, 0xcb, 0x10, 0xc2, 0xc2, 0x47, 0xd1, 0x05,
- 0xce, 0xc1, 0x6a, 0x63, 0x20, 0x86, 0xe1, 0x81, 0x19, 0x5a, 0x30, 0x50,
- 0xb9, 0x44, 0x8e, 0xfd, 0xf4, 0x72, 0x0e, 0xc8, 0xb0, 0x61, 0xcf, 0x9f,
- 0xd8, 0xbb, 0xdf, 0x25, 0xc5, 0xb3, 0x16, 0x09, 0xe7, 0x92, 0x08, 0x92,
- 0x1b, 0x5d, 0x28, 0xbb, 0x3b, 0x50, 0x4c, 0x39, 0x7c, 0x03, 0xf0, 0x9a,
- 0xda, 0x42, 0xab, 0xe8, 0x95, 0xb7, 0xf8, 0x9b, 0x7d, 0x59, 0x25, 0x9b,
- 0x7c, 0x2f, 0xde, 0x66, 0x96, 0x0b, 0x3d, 0xbf, 0x53, 0xab, 0xda, 0x16,
- 0x27, 0x74, 0xd7, 0x4d, 0xb5, 0x9c, 0xb4, 0x10, 0xf4, 0x40, 0x11, 0x2d,
- 0x2f, 0xbd, 0x5d, 0xe3, 0xd2, 0xd7, 0xed, 0x8f, 0xcf, 0x44, 0xbd, 0x67,
- 0xed, 0x83, 0x46, 0xb6, 0x91, 0xb6, 0xf2, 0x5d, 0x6c, 0x7d, 0x44, 0xbf,
- 0xdf, 0x4d, 0x4b, 0x65, 0x83, 0x33, 0x9b, 0x5c, 0xdf, 0xa9, 0xa6, 0x4d,
- 0x89, 0x0a, 0xde, 0xdd, 0x2b, 0x82, 0x18, 0x04, 0x8f, 0x2a, 0x11, 0x6c,
- 0x44, 0x88, 0x35, 0x64, 0xb2, 0x5c, 0xb3, 0xf8, 0x85, 0x66, 0x48, 0x03,
- 0x89, 0x5a, 0x65, 0x47, 0xf0, 0x96, 0x59, 0x48, 0xad, 0xa8, 0x62, 0xab,
- 0x09, 0xd5, 0x0e, 0x03, 0xb1, 0x13, 0xb2, 0x0a, 0x04, 0x25, 0x2b, 0x1f,
- 0x0a, 0x96, 0x9b, 0xac, 0xdf, 0xd0, 0x56, 0xb8, 0x97, 0x1e, 0xba, 0xe2,
- 0x44, 0x78, 0x37, 0x9e, 0x31, 0x52, 0x49, 0x40, 0x47, 0x87, 0x6a, 0x53,
- 0x05, 0xcb, 0xc1, 0xda, 0x90, 0x66, 0xa3, 0x9b, 0x64, 0xd6, 0x55, 0xbb,
- 0x30, 0x43, 0xa0, 0x19, 0xaf, 0xcf, 0xb2, 0xed, 0x75, 0xaf, 0x1c, 0xd2,
- 0x06, 0xc7, 0xff, 0x97, 0xd0, 0x7e, 0x2c, 0x96, 0x20, 0x5b, 0x2f, 0x28,
- 0xce, 0x6d, 0x33, 0x32, 0x14, 0xd3, 0xc4, 0x2f, 0x1d, 0xcc, 0xce, 0xab,
- 0xdd, 0xe1, 0xce, 0xcb, 0xcf, 0x87, 0xdb, 0xc3, 0x9d, 0x6d, 0xe2, 0x2f,
- 0x34, 0x14, 0x6f, 0x70, 0xbc, 0x2e, 0x91, 0xae, 0x5a, 0xef, 0x85, 0x7d,
- 0xbe, 0x3f, 0xba, 0xf8, 0xfe, 0xf4, 0xfc, 0xdb, 0xe4, 0xf8, 0xfd, 0xc5,
- 0xd1, 0xf9, 0xdb, 0xfd, 0x83, 0x4f, 0x05, 0x49, 0xf7, 0xcd, 0xd6, 0x5e,
- 0x39, 0xe0, 0xcc, 0x2d, 0x4c, 0x68, 0x1b, 0x74, 0x6b, 0x96, 0x35, 0xd7,
- 0xdb, 0x7b, 0x3b, 0x8f, 0x22, 0x29, 0x47, 0xcc, 0x83, 0xee, 0x7d, 0x9d,
- 0xd4, 0x0e, 0x4d, 0x6a, 0x75, 0x2b, 0x16, 0x39, 0x71, 0xc4, 0x61, 0x56,
- 0x36, 0x44, 0x17, 0x6c, 0x1e, 0xd5, 0x66, 0xf2, 0x71, 0x95, 0xaa, 0x61,
- 0x6a, 0xcc, 0x70, 0xae, 0x9c, 0x69, 0x2b, 0x18, 0x30, 0x12, 0x8e, 0x2e,
- 0x3c, 0x77, 0x8d, 0x4b, 0xef, 0x36, 0x62, 0x4e, 0x61, 0x74, 0xd6, 0x29,
- 0x44, 0x3c, 0xe5, 0xca, 0x92, 0xc6, 0x46, 0xd4, 0x22, 0x05, 0x21, 0x19,
- 0x0f, 0x70, 0x6a, 0x53, 0x46, 0x2c, 0x20, 0xc1, 0x5a, 0xe2, 0xc9, 0xe9,
- 0x18, 0x6b, 0xbb, 0x7a, 0xb2, 0x1f, 0x49, 0xdb, 0x81, 0x46, 0xad, 0x35,
- 0xc4, 0x19, 0x13, 0x6b, 0x99, 0x46, 0x0f, 0x64, 0x20, 0x38, 0x0d, 0xde,
- 0x68, 0xb8, 0x2b, 0x08, 0x54, 0x0a, 0xd0, 0xdd, 0x06, 0xf6, 0xe5, 0x3b,
- 0x0a, 0x69, 0x14, 0x2c, 0xff, 0x69, 0x25, 0x01, 0x6a, 0xbd, 0x6e, 0x61,
- 0x08, 0x26, 0x5c, 0x01, 0xc8, 0x7f, 0x9d, 0x45, 0x6d, 0x04, 0x6a, 0x4e,
- 0xab, 0xf4, 0x0e, 0x65, 0x2c, 0x72, 0x87, 0x08, 0xba, 0xd6, 0xae, 0x62,
- 0x44, 0x82, 0x93, 0x5b, 0xf3, 0xe4, 0xec, 0xe8, 0xdd, 0x40, 0xeb, 0xaf,
- 0x9a, 0xdf, 0xd9, 0x18, 0xa5, 0xf0, 0x8f, 0x9c, 0xe6, 0xb3, 0xc8, 0x0a,
- 0x0d, 0xab, 0x01, 0x4f, 0x94, 0x38, 0x20, 0x7f, 0x02, 0x74, 0x68, 0x2c,
- 0x40, 0xa4, 0x44, 0x8f, 0x6a, 0xf8, 0x25, 0xa7, 0x19, 0x76, 0x51, 0x33,
- 0x69, 0x3f, 0x25, 0x76, 0x39, 0xd9, 0xb0, 0xf1, 0xba, 0xd4, 0x1f, 0x82,
- 0x52, 0x11, 0x33, 0x60, 0xc3, 0x04, 0x4a, 0x4d, 0xc2, 0x3e, 0xfb, 0xf6,
- 0x60, 0xf4, 0xc7, 0x9d, 0x5d, 0x19, 0xce, 0xe6, 0xd0, 0x01, 0xed, 0x06,
- 0xf9, 0xf9, 0x60, 0xd7, 0xfe, 0x18, 0x35, 0xdb, 0x1a, 0x07, 0x1c, 0x9b,
- 0xb1, 0x61, 0x73, 0x84, 0x36, 0x5b, 0x49, 0x42, 0x08, 0x02, 0x7b, 0xb0,
- 0x22, 0xa6, 0xad, 0x8f, 0x4a, 0x2e, 0x11, 0x94, 0xd1, 0x91, 0x42, 0x36,
- 0x8d, 0x8d, 0xfa, 0x4b, 0x0b, 0xfd, 0x88, 0x5b, 0x96, 0xd6, 0x90, 0x4e,
- 0xee, 0x22, 0x5b, 0xba, 0x7b, 0x4e, 0xeb, 0xed, 0xbe, 0x25, 0x18, 0x57,
- 0xb9, 0xd9, 0x15, 0xaf, 0xc7, 0x75, 0x83, 0x03, 0x20, 0x81, 0xec, 0x53,
- 0x2d, 0x95, 0x55, 0xb8, 0xd2, 0x13, 0xf4, 0xf4, 0xa9, 0xd9, 0x28, 0x73,
- 0xb2, 0x18, 0xc2, 0x81, 0x98, 0x42, 0x39, 0x23, 0xd5, 0xc5, 0x3e, 0x72,
- 0x58, 0x51, 0x89, 0x8f, 0x05, 0x87, 0x94, 0xbe, 0x1f, 0x26, 0xdf, 0x64,
- 0x05, 0xe5, 0xd0, 0x53, 0xf0, 0x9d, 0xa6, 0x61, 0x21, 0x44, 0x90, 0x6a,
- 0xf5, 0xa1, 0x76, 0xd9, 0x49, 0x96, 0x0a, 0x64, 0xa6, 0xe1, 0x75, 0x35,
- 0x6b, 0xb8, 0x5a, 0xb7, 0x27, 0xa5, 0x40, 0x3d, 0xc1, 0xf7, 0xb4, 0xb8,
- 0x17, 0xf4, 0x00, 0x37, 0xb0, 0xd1, 0xc6, 0xbd, 0x04, 0x8c, 0x3e, 0x9a,
- 0x93, 0x63, 0x0e, 0x5f, 0x93, 0x58, 0x95, 0xaf, 0x81, 0x02, 0x4d, 0xd6,
- 0x42, 0xd6, 0xb8, 0x1c, 0x53, 0x99, 0x56, 0xd7, 0x64, 0xfa, 0xa8, 0xcd,
- 0x75, 0x93, 0x16, 0x93, 0x87, 0xe1, 0xd4, 0xc8, 0xb2, 0x64, 0x3c, 0x1b,
- 0x2e, 0x6f, 0xb6, 0xbc, 0x63, 0x4a, 0x2c, 0xff, 0x9a, 0xe1, 0x02, 0xda,
- 0x86, 0x6f, 0xad, 0x0b, 0x1b, 0x22, 0x7b, 0xa5, 0xad, 0x33, 0x41, 0x24,
- 0xa1, 0x89, 0xff, 0x7c, 0x3c, 0x57, 0x62, 0x60, 0x1d, 0x25, 0x16, 0x80,
- 0x98, 0x5a, 0x18, 0x2e, 0xb2, 0xf9, 0x9e, 0x4d, 0x4c, 0x56, 0xfe, 0x20,
- 0x95, 0x0c, 0xac, 0x62, 0xe1, 0x19, 0x69, 0x8b, 0xec, 0x6a, 0x26, 0x02,
- 0x85, 0xaf, 0xba, 0x38, 0x40, 0xe9, 0x30, 0x1b, 0x84, 0x15, 0x1e, 0xa9,
- 0x2a, 0x03, 0x89, 0xdd, 0xd0, 0x61, 0x23, 0xd1, 0xb5, 0xfc, 0x30, 0x0a,
- 0xb3, 0xbb, 0x46, 0x04, 0x44, 0x04, 0x58, 0xc8, 0x24, 0x0c, 0x8b, 0x89,
- 0x47, 0x83, 0x92, 0xc4, 0xfd, 0x44, 0x38, 0xad, 0xa0, 0x10, 0xa0, 0x8f,
- 0x4b, 0x80, 0x34, 0x9c, 0x9f, 0x5a, 0x7b, 0x95, 0xcf, 0x8a, 0xf9, 0xfa,
- 0xf6, 0x19, 0x59, 0xbc, 0x2f, 0x4e, 0x46, 0xea, 0x15, 0x29, 0xb2, 0x3b,
- 0x8f, 0xb4, 0x18, 0x31, 0x5f, 0xe8, 0x8f, 0x0c, 0x40, 0x8c, 0x78, 0x0c,
- 0xe0, 0x03, 0x8c, 0x84, 0xb9, 0x82, 0x73, 0x93, 0xb9, 0x3c, 0x08, 0x5d,
- 0x04, 0x89, 0x28, 0xa6, 0xa1, 0x68, 0x89, 0x28, 0x16, 0x86, 0x2c, 0xe8,
- 0x0b, 0x41, 0xeb, 0x19, 0x61, 0xe9, 0x59, 0x3f, 0x19, 0xec, 0x02, 0x4a,
- 0x67, 0xa7, 0xbd, 0x88, 0x69, 0xc3, 0x28, 0x7e, 0xd4, 0x86, 0x69, 0x49,
- 0x5b, 0x11, 0x76, 0xb0, 0x21, 0x24, 0x7d, 0x6b, 0xde, 0xa7, 0x7f, 0x76,
- 0x65, 0x42, 0xb7, 0x3b, 0x08, 0xde, 0x66, 0x58, 0xc9, 0xd9, 0x43, 0x28,
- 0x32, 0xec, 0x3e, 0xba, 0xab, 0x48, 0x93, 0xb8, 0xcb, 0x2d, 0xbe, 0x33,
- 0x63, 0xfd, 0xc3, 0x14, 0x2a, 0x88, 0x9d, 0x3a, 0x00, 0xb3, 0x84, 0x62,
- 0xe4, 0x2e, 0x92, 0xdb, 0x5d, 0xf5, 0x35, 0xd3, 0x37, 0xba, 0x6e, 0x6c,
- 0xac, 0x77, 0x4c, 0x24, 0xc8, 0x60, 0xa4, 0x80, 0x37, 0x8f, 0x6a, 0x29,
- 0x01, 0xca, 0xd0, 0xac, 0xe1, 0x22, 0x2d, 0x2e, 0x53, 0x16, 0x62, 0x56,
- 0xe0, 0xec, 0xf7, 0xb4, 0xe0, 0xcd, 0x30, 0x72, 0xb0, 0x0b, 0x73, 0x42,
- 0x10, 0xb8, 0x17, 0x1c, 0x79, 0x5c, 0xd8, 0x9c, 0x09, 0x31, 0xe5, 0x03,
- 0x41, 0x0f, 0xdb, 0x7f, 0x9d, 0xb3, 0x61, 0x02, 0x61, 0xa7, 0xb8, 0xce,
- 0xcd, 0xc9, 0x5f, 0x4f, 0xcc, 0x61, 0x5a, 0x12, 0xc7, 0x6f, 0x6c, 0xbd,
- 0xaa, 0x11, 0x23, 0x6f, 0xae, 0xfb, 0x6c, 0x6e, 0xf0, 0x05, 0x4d, 0xa5,
- 0x5e, 0x77, 0x73, 0x17, 0x04, 0xf2, 0xf6, 0x44, 0xc4, 0xcf, 0xa1, 0x15,
- 0x9a, 0xce, 0x2a, 0xad, 0x43, 0xbd, 0x7e, 0x74, 0x4f, 0x32, 0xce, 0xba,
- 0xf4, 0xc4, 0x5f, 0x73, 0x7a, 0x3f, 0xd6, 0xe8, 0xec, 0xf8, 0x3d, 0x97,
- 0x56, 0xb6, 0x67, 0x21, 0x23, 0x64, 0xc4, 0x35, 0xae, 0x0a, 0x8e, 0xf1,
- 0xa4, 0x02, 0x21, 0x91, 0xb0, 0xe1, 0x88, 0x68, 0x86, 0x68, 0x3c, 0x97,
- 0xbe, 0xce, 0x97, 0xdc, 0xfb, 0x3a, 0xdd, 0x73, 0x75, 0x3d, 0x5b, 0xef,
- 0x94, 0x0b, 0xb5, 0x7b, 0xd2, 0xb9, 0x50, 0xac, 0x45, 0x6a, 0x32, 0xf5,
- 0x0b, 0xa0, 0x4b, 0x2b, 0x2d, 0x3e, 0xd7, 0xef, 0x24, 0x3d, 0xfa, 0xa6,
- 0xf0, 0x3f, 0x26, 0xc3, 0x2d, 0xd3, 0x61, 0xbd, 0xa5, 0x2f, 0x2e, 0x6e,
- 0x26, 0xb5, 0xb9, 0xe1, 0x28, 0xc3, 0xf7, 0x47, 0x0b, 0x13, 0x4f, 0x23,
- 0x9e, 0xfe, 0x9c, 0x0c, 0x26, 0x33, 0xcc, 0x2f, 0x41, 0x6d, 0xe2, 0x1f,
- 0xcd, 0xce, 0xd3, 0x13, 0x3f, 0xdb, 0x3d, 0x7c, 0x9b, 0xd3, 0x79, 0xbb,
- 0xef, 0xeb, 0xd4, 0x4f, 0x59, 0x61, 0x60, 0xf8, 0xd9, 0x64, 0x7f, 0x7a,
- 0x4b, 0xf9, 0x77, 0x53, 0xf9, 0x93, 0xe6, 0x73, 0x54, 0xa0, 0xa4, 0x23,
- 0x66, 0x9a, 0x8e, 0xb9, 0x8a, 0xf3, 0x77, 0xb9, 0x51, 0x3a, 0x0e, 0x3a,
- 0xf2, 0x05, 0xa5, 0x02, 0xd2, 0x00, 0xf1, 0x96, 0xf7, 0xa5, 0xe6, 0x75,
- 0xf4, 0x25, 0x7d, 0xc1, 0x45, 0xfe, 0x11, 0x77, 0xa6, 0xad, 0x1b, 0x26,
- 0x5f, 0x91, 0x8f, 0xb3, 0xca, 0x3c, 0x70, 0x56, 0xb9, 0xf8, 0xb8, 0xf4,
- 0x19, 0x6d, 0x46, 0xca, 0x50, 0x14, 0x43, 0x3b, 0x93, 0x20, 0x1d, 0xc6,
- 0xce, 0xc9, 0x7e, 0xd3, 0x9e, 0x1c, 0xc6, 0xa5, 0xd9, 0xed, 0x66, 0x2a,
- 0x9a, 0x3a, 0x91, 0x04, 0x53, 0xf1, 0x60, 0x23, 0x79, 0x84, 0x7c, 0x61,
- 0x4e, 0x33, 0xcd, 0xf1, 0x2f, 0x7d, 0x60, 0x15, 0xb5, 0x1c, 0xa3, 0x29,
- 0x95, 0x08, 0x2c, 0x49, 0xe0, 0x0e, 0x77, 0xa3, 0x3e, 0xb8, 0x36, 0xac,
- 0x39, 0xb3, 0x43, 0x1d, 0xb1, 0x49, 0x4f, 0x87, 0x38, 0xa2, 0x3b, 0x4a,
- 0x37, 0xc1, 0x7e, 0xa9, 0x89, 0x92, 0x90, 0x42, 0xb7, 0x98, 0x77, 0x59,
- 0xda, 0xe5, 0xd5, 0x6d, 0x4f, 0x81, 0xf2, 0x1b, 0x47, 0x1f, 0xde, 0x51,
- 0x45, 0x0e, 0x54, 0xfa, 0xbd, 0x38, 0xdf, 0x7f, 0x3f, 0x7a, 0xcb, 0xa6,
- 0xf1, 0x8b, 0xd2, 0xd5, 0x10, 0x16, 0x7b, 0x90, 0xf5, 0x1f, 0x5b, 0xc4,
- 0xb8, 0x3b, 0x2e, 0x13, 0xa1, 0xa1, 0xf5, 0x52, 0x5d, 0xb8, 0xdf, 0x85,
- 0xc3, 0xe7, 0xea, 0xc4, 0xb4, 0x1a, 0x34, 0xb4, 0x8d, 0xd1, 0xa6, 0x15,
- 0x84, 0x6a, 0xbf, 0x0e, 0x96, 0xab, 0xf0, 0xad, 0xc0, 0xcd, 0xf2, 0x10,
- 0x2d, 0xcb, 0x81, 0x0e, 0x46, 0x3f, 0xe5, 0xbb, 0x77, 0x25, 0x56, 0xe8,
- 0x81, 0x51, 0x15, 0x07, 0x52, 0x60, 0xc5, 0xab, 0xfa, 0x65, 0xcd, 0xa9,
- 0x7c, 0xf7, 0x0a, 0xaa, 0x9f, 0x6d, 0xdc, 0x4f, 0x01, 0xd5, 0xa6, 0x37,
- 0xfe, 0x75, 0x67, 0x33, 0xde, 0xfc, 0xc5, 0x2f, 0x6d, 0x3e, 0x3e, 0x76,
- 0xd5, 0xcd, 0x5c, 0x76, 0xd1, 0xc6, 0xbf, 0xee, 0x6e, 0x3e, 0x3a, 0x23,
- 0x3f, 0x41, 0xd2, 0xf5, 0x69, 0xde, 0xa0, 0xc1, 0x26, 0x6f, 0xb4, 0x5e,
- 0xbc, 0xc8, 0x4c, 0x36, 0x42, 0xc7, 0x83, 0x03, 0x6e, 0x61, 0x77, 0x50,
- 0x04, 0xb7, 0x95, 0xd4, 0x9d, 0xe3, 0x4d, 0x12, 0x4d, 0x8e, 0xff, 0xe7,
- 0x91, 0x8f, 0xf2, 0x58, 0xac, 0x37, 0xfe, 0x15, 0x45, 0x40, 0x01, 0x75,
- 0x39, 0x44, 0xdf, 0xbb, 0x8f, 0xf4, 0xed, 0x66, 0xe7, 0x99, 0x25, 0xc8,
- 0x8b, 0x4d, 0x61, 0x70, 0x0a, 0x56, 0x2d, 0xfd, 0xac, 0xb9, 0xca, 0xd4,
- 0xab, 0xfb, 0xbb, 0x38, 0x7e, 0x77, 0x44, 0xa0, 0xd6, 0x87, 0xc7, 0x84,
- 0x43, 0x37, 0x12, 0x24, 0x48, 0xb5, 0x40, 0x58, 0xc0, 0x5c, 0xbf, 0x4c,
- 0x0a, 0xbb, 0x77, 0x6d, 0xb4, 0x99, 0xe5, 0x1c, 0x76, 0x27, 0xa8, 0x6b,
- 0x09, 0x87, 0xae, 0x35, 0xe9, 0xf2, 0xf8, 0x72, 0xf0, 0xae, 0x9c, 0x42,
- 0x4b, 0x1e, 0x8c, 0x10, 0x2a, 0x68, 0xde, 0x32, 0x1f, 0x7e, 0x28, 0xe6,
- 0xad, 0x8f, 0x87, 0x91, 0xa4, 0xdd, 0xb5, 0x55, 0xb5, 0x64, 0xfe, 0xb1,
- 0x35, 0x18, 0xa0, 0x34, 0x3c, 0x87, 0x75, 0x89, 0x73, 0xa7, 0x05, 0xd5,
- 0xa1, 0xac, 0xc5, 0x2c, 0x50, 0x3e, 0x7b, 0xe0, 0x40, 0x84, 0xd4, 0x85,
- 0x8f, 0xb9, 0x44, 0xce, 0x2b, 0x4a, 0x26, 0x73, 0x26, 0x3e, 0x36, 0xe2,
- 0xad, 0xf9, 0xd8, 0xa2, 0x50, 0xa4, 0xb2, 0x3b, 0x17, 0xff, 0x24, 0x65,
- 0x6e, 0xcb, 0xc5, 0x03, 0x66, 0x79, 0xd7, 0x0a, 0xad, 0x88, 0xfa, 0x57,
- 0xff, 0xc1, 0xef, 0xb4, 0xaa, 0x27, 0x09, 0x04, 0xb4, 0x47, 0x81, 0xf2,
- 0x89, 0x14, 0x1b, 0x3a, 0xad, 0xbc, 0xeb, 0x4a, 0x86, 0xad, 0x15, 0xc5,
- 0x3c, 0xdc, 0x51, 0x0f, 0x26, 0xb5, 0x3d, 0x4e, 0x1f, 0xa3, 0xb5, 0xa4,
- 0x2c, 0xd8, 0xc3, 0xd2, 0x3a, 0xc7, 0x0c, 0xdb, 0x59, 0xb4, 0x0b, 0xc9,
- 0x66, 0x89, 0xe6, 0x7b, 0x73, 0x3a, 0xff, 0xfa, 0x60, 0x1d, 0x65, 0x13,
- 0xf2, 0x22, 0x32, 0x99, 0xc1, 0x2f, 0x9f, 0x4d, 0xe0, 0x7a, 0x4d, 0x7a,
- 0x97, 0x84, 0x89, 0x41, 0x7e, 0xac, 0x1e, 0x0f, 0x80, 0x21, 0x63, 0x98,
- 0xb8, 0xcc, 0x05, 0x41, 0x7c, 0x4d, 0x15, 0x49, 0x56, 0xaa, 0x6d, 0x64,
- 0xac, 0x35, 0x92, 0xb3, 0x55, 0x92, 0x18, 0xe9, 0x72, 0x31, 0x45, 0x50,
- 0x06, 0x87, 0xa3, 0xfe, 0x3b, 0x61, 0x56, 0x57, 0x0f, 0xc9, 0xce, 0x6e,
- 0x3f, 0xd9, 0xdd, 0xde, 0xd9, 0x8d, 0xcc, 0xa1, 0xf7, 0xef, 0x14, 0x14,
- 0xb5, 0x8b, 0xaf, 0x7b, 0x9f, 0x3a, 0x0b, 0x97, 0xda, 0x80, 0x9b, 0x44,
- 0x92, 0x80, 0x0d, 0xf3, 0x21, 0xff, 0x2c, 0x70, 0x92, 0x51, 0x5d, 0x16,
- 0xc8, 0x76, 0xb8, 0xb6, 0xd8, 0x48, 0xa8, 0x65, 0x0d, 0x6d, 0xc5, 0x2b,
- 0x7a, 0x62, 0x4d, 0x0a, 0x7c, 0x22, 0xf2, 0xc5, 0x5a, 0x4a, 0xd3, 0x0a,
- 0x35, 0x1b, 0xdb, 0x7b, 0x94, 0x37, 0xba, 0x2d, 0x14, 0x5a, 0x43, 0x7b,
- 0x63, 0xe8, 0xfd, 0xf0, 0xf8, 0xe0, 0x42, 0xa1, 0x0f, 0x2f, 0x49, 0x78,
- 0xaa, 0x1e, 0x3e, 0xad, 0x00, 0xde, 0xa3, 0xcf, 0x4c, 0xf7, 0xae, 0x33,
- 0x23, 0x46, 0x17, 0xe3, 0xe5, 0xd5, 0xde, 0xdf, 0xd2, 0xea, 0xaa, 0x2c,
- 0x9e, 0x7a, 0x7e, 0x8a, 0xdc, 0xb2, 0x3d, 0xc3, 0xa1, 0x76, 0x5e, 0xed,
- 0x3c, 0xe3, 0xc4, 0x85, 0x9c, 0xaa, 0x65, 0x82, 0x41, 0xac, 0xcf, 0xd7,
- 0x19, 0x6b, 0x03, 0x19, 0x13, 0x16, 0x60, 0xa3, 0x98, 0xae, 0xf3, 0x75,
- 0x9f, 0xfa, 0xcf, 0x4e, 0xe5, 0x59, 0xce, 0x42, 0x5f, 0x5f, 0xe3, 0xd2,
- 0x25, 0xeb, 0x94, 0xb1, 0xb9, 0x5c, 0xac, 0xb7, 0x11, 0xdc, 0x9f, 0x98,
- 0x2b, 0x75, 0x61, 0xeb, 0xfd, 0x1d, 0x58, 0x5c, 0x7a, 0x24, 0x13, 0x55,
- 0x59, 0x7a, 0xe3, 0xca, 0xcd, 0x3a, 0x20, 0x0e, 0x75, 0x79, 0x9c, 0xbf,
- 0x3d, 0x60, 0x30, 0x53, 0x4d, 0x9d, 0xc2, 0x52, 0x27, 0xd6, 0x34, 0xb5,
- 0x49, 0xa3, 0x7c, 0xa2, 0x7f, 0xca, 0x6d, 0xd8, 0x9b, 0x8e, 0x3f, 0xe1,
- 0x21, 0x73, 0xee, 0x18, 0x37, 0x6e, 0xbf, 0x5d, 0x19, 0x87, 0x14, 0x35,
- 0x94, 0xf7, 0xd0, 0xba, 0xb2, 0x1b, 0x5c, 0xfb, 0x93, 0x3d, 0x0e, 0x34,
- 0x34, 0xad, 0xd8, 0xab, 0xd6, 0x1d, 0x33, 0x6e, 0x2a, 0xac, 0x79, 0xb8,
- 0x7f, 0xe6, 0x29, 0xba, 0x50, 0x24, 0x9d, 0x51, 0x8f, 0x9e, 0x23, 0x45,
- 0x07, 0xa5, 0xab, 0xd9, 0xf6, 0xf7, 0xd0, 0x77, 0x2a, 0x4a, 0x03, 0x3e,
- 0x49, 0xb2, 0x11, 0x02, 0xe4, 0x4b, 0xb9, 0x4f, 0x60, 0x7f, 0x42, 0xb1,
- 0x81, 0xd9, 0x34, 0x85, 0x23, 0x54, 0x6e, 0x21, 0xc8, 0x5c, 0x68, 0x2b,
- 0x97, 0x68, 0x28, 0xb3, 0x37, 0xf7, 0x89, 0x24, 0x71, 0x48, 0xb6, 0x8a,
- 0x94, 0x03, 0xc1, 0x63, 0x94, 0xa0, 0xfc, 0xa0, 0x13, 0x60, 0xfe, 0x6c,
- 0x06, 0x9f, 0xd6, 0x37, 0x86, 0x95, 0xb2, 0x03, 0xdf, 0xf4, 0x9e, 0x8b,
- 0x0b, 0x9c, 0x8c, 0x3e, 0x39, 0x07, 0xd2, 0x90, 0xf9, 0x09, 0x90, 0x48,
- 0xad, 0x0d, 0xe3, 0x2b, 0x88, 0x34, 0xce, 0x59, 0x9d, 0x31, 0x80, 0x61,
- 0x72, 0x71, 0x57, 0xb2, 0x8a, 0x51, 0x6b, 0x78, 0x2d, 0x87, 0xa2, 0xd6,
- 0xcb, 0x9c, 0xa5, 0x48, 0xb3, 0x79, 0xe0, 0x07, 0x5e, 0xe5, 0xce, 0x9e,
- 0xb5, 0x7c, 0x1d, 0x5a, 0xbf, 0xe7, 0xe8, 0xf0, 0xdb, 0x84, 0x52, 0xeb,
- 0xa9, 0x8f, 0x03, 0x82, 0xdb, 0xa7, 0x10, 0x86, 0x39, 0xb4, 0xbf, 0xaf,
- 0x97, 0x74, 0xde, 0x0f, 0xae, 0xd3, 0x05, 0x29, 0x40, 0x3b, 0xdb, 0x64,
- 0x2e, 0xf9, 0x5e, 0x93, 0xf4, 0xe8, 0xa0, 0x6a, 0x61, 0xf0, 0xba, 0xe7,
- 0x59, 0x52, 0xa6, 0x54, 0xd7, 0x9b, 0x34, 0xa0, 0xb6, 0x91, 0xd6, 0x5c,
- 0x9f, 0xf5, 0x16, 0x83, 0xec, 0xd7, 0x86, 0x34, 0xaa, 0x7a, 0x7a, 0xb3,
- 0x35, 0x31, 0x3f, 0x9e, 0x6d, 0x6f, 0x01, 0x53, 0xb3, 0x81, 0x4d, 0x93,
- 0x68, 0x72, 0x77, 0xf7, 0xc5, 0x8b, 0x7e, 0xd2, 0x23, 0x2b, 0xa3, 0x76,
- 0x40, 0x47, 0xc2, 0x9c, 0xac, 0x5e, 0xac, 0x84, 0xe9, 0x56, 0x75, 0x39,
- 0xa1, 0xff, 0xd1, 0x6b, 0x5a, 0x88, 0xf0, 0x42, 0xb2, 0x6e, 0xb0, 0x0e,
- 0x85, 0x0f, 0x93, 0xc3, 0x64, 0x45, 0xdf, 0x1d, 0x5b, 0x3b, 0x12, 0x39,
- 0x8d, 0x16, 0x59, 0xb9, 0x50, 0xef, 0xf0, 0x5c, 0xca, 0x77, 0xa0, 0x7b,
- 0xcf, 0xa5, 0x06, 0x7f, 0x3e, 0x87, 0xc3, 0x09, 0x1e, 0x42, 0xbd, 0x1c,
- 0x0f, 0x24, 0x31, 0x98, 0xb5, 0xca, 0xdc, 0x9c, 0x5c, 0xf3, 0xe7, 0x4c,
- 0xcd, 0xf5, 0x01, 0x47, 0xfe, 0x2a, 0xe9, 0x09, 0x6d, 0xd1, 0x3f, 0x43,
- 0x38, 0x77, 0xb3, 0x09, 0x4d, 0xa3, 0x7c, 0x23, 0x7f, 0xfc, 0xdb, 0xbf,
- 0x99, 0x66, 0xff, 0x8d, 0x5a, 0x79, 0xf3, 0xaf, 0x75, 0x73, 0xed, 0x3d,
- 0xd3, 0x13, 0x82, 0x3f, 0x76, 0xae, 0x6d, 0x84, 0xab, 0x01, 0x71, 0x16,
- 0xf9, 0x6b, 0xef, 0x4e, 0x84, 0x23, 0xf7, 0xbd, 0xf9, 0xe5, 0xc8, 0x2c,
- 0x64, 0x23, 0xa9, 0x8d, 0x16, 0xf9, 0x8a, 0xdc, 0xce, 0x19, 0x65, 0xa4,
- 0x9b, 0x8b, 0x04, 0x80, 0x82, 0x9b, 0x2a, 0x62, 0x1c, 0xbd, 0xff, 0xee,
- 0xf8, 0xfc, 0xf4, 0xfd, 0xbb, 0xa3, 0xf7, 0x17, 0xc9, 0x77, 0xfb, 0xe7,
- 0xc7, 0xfb, 0x5f, 0x9d, 0x48, 0xe2, 0x3b, 0x4d, 0x81, 0x82, 0x7c, 0x58,
- 0xf6, 0xee, 0x00, 0xc2, 0x7a, 0x89, 0x48, 0xd1, 0xd2, 0x1e, 0x9d, 0x4a,
- 0xb4, 0x1f, 0x05, 0x61, 0x1c, 0x9a, 0xc8, 0x47, 0x54, 0x29, 0xea, 0x93,
- 0xf0, 0xf9, 0x51, 0x0b, 0x16, 0x91, 0xf2, 0xf4, 0xe0, 0xa5, 0x52, 0x53,
- 0xfc, 0x11, 0x51, 0xa9, 0xf2, 0x27, 0x57, 0xc2, 0xce, 0xd6, 0xbe, 0xf8,
- 0x9a, 0xb3, 0xf1, 0xb5, 0x10, 0x88, 0xbe, 0x2a, 0x99, 0x61, 0xb0, 0xbb,
- 0xd9, 0x31, 0xec, 0x9f, 0x9c, 0xb8, 0xae, 0x1e, 0xaf, 0x11, 0x23, 0x48,
- 0x4c, 0x9c, 0xbc, 0x85, 0x46, 0xc9, 0x31, 0x78, 0x55, 0x3a, 0xb8, 0xf4,
- 0xe2, 0xc1, 0x47, 0x46, 0xa7, 0xce, 0xcc, 0x76, 0x6c, 0x30, 0x84, 0x06,
- 0x79, 0x89, 0xcd, 0x01, 0xca, 0xeb, 0x9b, 0x7e, 0xb2, 0xfe, 0xaf, 0xeb,
- 0x9c, 0x54, 0x97, 0x01, 0x37, 0x98, 0x2b, 0xd0, 0x6c, 0xba, 0x41, 0xbd,
- 0x3f, 0x75, 0x63, 0x12, 0xc7, 0xa7, 0x1d, 0x80, 0x7d, 0xd1, 0xb9, 0xad,
- 0x6b, 0x95, 0x67, 0x10, 0x2f, 0xea, 0x1e, 0x97, 0x32, 0x0d, 0x16, 0x19,
- 0x40, 0x68, 0x94, 0x1c, 0x5b, 0xd1, 0x77, 0xa1, 0xb5, 0xa5, 0x13, 0x0f,
- 0x1e, 0x1a, 0x73, 0x2d, 0xc8, 0xd4, 0x61, 0x4b, 0x67, 0xa9, 0x35, 0xd0,
- 0x2c, 0x35, 0xd9, 0xf4, 0xc4, 0x9d, 0xb8, 0xac, 0x85, 0x83, 0x82, 0xaa,
- 0xee, 0xb7, 0xb4, 0x12, 0x0d, 0x7c, 0x8c, 0x94, 0x0f, 0x50, 0xe5, 0x53,
- 0x81, 0x1b, 0x8c, 0x52, 0xc5, 0x10, 0xae, 0xa9, 0xf3, 0x03, 0xa0, 0xb3,
- 0x17, 0x54, 0x4b, 0xd0, 0x55, 0xba, 0x40, 0xec, 0xb0, 0xe1, 0x22, 0x15,
- 0x25, 0xe4, 0x15, 0x22, 0x84, 0x20, 0x1e, 0x17, 0x32, 0x7a, 0x7a, 0x55,
- 0xaa, 0xfc, 0x9d, 0x5a, 0xa7, 0xb9, 0xad, 0x07, 0xe6, 0xc9, 0xf4, 0x16,
- 0x43, 0xcc, 0x9a, 0x2c, 0xe1, 0x5e, 0x57, 0x07, 0x01, 0x85, 0x97, 0xd1,
- 0x96, 0x6b, 0xd1, 0xde, 0xda, 0xcb, 0xd2, 0x76, 0xd9, 0x0b, 0xc4, 0x4b,
- 0x38, 0x48, 0x5f, 0x41, 0xbd, 0x00, 0xa4, 0xa6, 0x59, 0xdd, 0x08, 0x74,
- 0xc4, 0xb0, 0xe8, 0x41, 0x34, 0x29, 0x31, 0xab, 0x68, 0x52, 0x6d, 0xd7,
- 0xe6, 0xf4, 0xcc, 0x28, 0x81, 0x4c, 0x39, 0x51, 0x9a, 0x8c, 0xf3, 0x2b,
- 0x46, 0x07, 0xa0, 0x54, 0x74, 0xa2, 0x12, 0x80, 0xbd, 0x19, 0xc5, 0x9e,
- 0xb6, 0x0a, 0x50, 0x6e, 0x90, 0xdd, 0xaf, 0xcb, 0x99, 0x8f, 0x37, 0xa6,
- 0x33, 0xa9, 0xa5, 0xd2, 0x99, 0x9a, 0x3e, 0xe1, 0xfa, 0x58, 0xd2, 0x3a,
- 0x6a, 0x34, 0x9a, 0x00, 0x95, 0x4b, 0x6c, 0x1e, 0xd9, 0xd4, 0x81, 0x9a,
- 0x58, 0x20, 0x13, 0x48, 0xb3, 0xaa, 0xb1, 0x0e, 0x1a, 0xb7, 0x4c, 0xdc,
- 0x02, 0x76, 0x34, 0x2a, 0x5c, 0xb8, 0x61, 0x91, 0xc6, 0xa9, 0x95, 0x09,
- 0x63, 0xb5, 0x12, 0xd1, 0xb3, 0x47, 0xb9, 0x5d, 0xae, 0x47, 0x36, 0x4b,
- 0x50, 0xb4, 0x0c, 0x4d, 0xd0, 0xa0, 0xcd, 0x4a, 0x6d, 0x78, 0x8c, 0xa7,
- 0x30, 0x24, 0xc2, 0x8f, 0xb1, 0x02, 0x29, 0x7f, 0x0d, 0x6c, 0xa5, 0x31,
- 0xf1, 0x3b, 0x6f, 0xba, 0xb8, 0x03, 0x96, 0x02, 0x88, 0x5a, 0x27, 0x52,
- 0x1b, 0x11, 0x1e, 0x7a, 0x2a, 0xe0, 0x08, 0x68, 0xa8, 0x96, 0xed, 0x31,
- 0xd1, 0x7c, 0x9b, 0xd9, 0xcc, 0x83, 0x1a, 0x67, 0x73, 0x44, 0x1a, 0xc8,
- 0x1e, 0xe4, 0x1c, 0xe2, 0x34, 0x54, 0x89, 0xfc, 0x61, 0x58, 0x62, 0x6f,
- 0x22, 0x12, 0x53, 0x4e, 0xd2, 0x59, 0xc7, 0xa4, 0xe9, 0x31, 0x34, 0xf5,
- 0x8e, 0xfb, 0x17, 0x93, 0x54, 0xbb, 0xc8, 0xd3, 0x39, 0xcb, 0x8e, 0x8e,
- 0xfa, 0xe6, 0x0f, 0x1c, 0x75, 0xb8, 0xb6, 0x76, 0xf0, 0x61, 0x74, 0x71,
- 0xfa, 0x2e, 0x39, 0xfd, 0x70, 0x71, 0xf6, 0xe1, 0x42, 0x6e, 0xae, 0x31,
- 0xc7, 0x6c, 0x73, 0xe4, 0x02, 0x0b, 0x01, 0xba, 0x99, 0x73, 0xf1, 0xef,
- 0x23, 0xc4, 0xa4, 0x04, 0xc0, 0xa0, 0x87, 0x2d, 0x64, 0x73, 0xb2, 0x80,
- 0xba, 0xc5, 0xc8, 0xc5, 0x58, 0xf2, 0x3b, 0xb3, 0xe4, 0xc8, 0xa7, 0x85,
- 0x21, 0x4f, 0x53, 0xbc, 0xa0, 0xf6, 0xe8, 0x59, 0x6b, 0x57, 0x92, 0xe9,
- 0x54, 0xc4, 0x84, 0x73, 0xbe, 0x8d, 0xe5, 0xe4, 0xe2, 0xa8, 0xd4, 0xb6,
- 0xe3, 0x4c, 0x3f, 0x7e, 0x48, 0x27, 0x82, 0x99, 0x26, 0x8d, 0x1a, 0xa0,
- 0x35, 0xaa, 0x16, 0xa1, 0x46, 0xed, 0xc4, 0x42, 0x3f, 0xbf, 0xb1, 0x29,
- 0xcd, 0x0c, 0xaf, 0x6d, 0x44, 0x3c, 0x45, 0x11, 0x21, 0x12, 0x90, 0x03,
- 0x28, 0x28, 0xe4, 0x8e, 0x35, 0x06, 0xa3, 0x07, 0x92, 0xcb, 0x22, 0xb8,
- 0x65, 0xef, 0x92, 0xf5, 0xef, 0x33, 0xbf, 0xc1, 0x3f, 0xfd, 0x07, 0xa5,
- 0x6d, 0x7e, 0xd4, 0x4f, 0xfe, 0x8b, 0xbb, 0xfc, 0xa9, 0x58, 0x47, 0x00,
- 0x5d, 0xdb, 0x53, 0xfe, 0xed, 0xd1, 0xf9, 0x57, 0x47, 0xe7, 0xa7, 0x23,
- 0xf0, 0x03, 0x35, 0x77, 0x85, 0xb4, 0x7e, 0x93, 0x55, 0xe3, 0xac, 0x2a,
- 0xa5, 0xca, 0x95, 0xfe, 0xf5, 0x62, 0xeb, 0xeb, 0xd1, 0x68, 0xff, 0xec,
- 0xd8, 0xd6, 0x91, 0xb1, 0x09, 0x64, 0xac, 0x22, 0x15, 0x9c, 0xe2, 0x48,
- 0xf3, 0xd7, 0x57, 0x0c, 0x5d, 0x4c, 0x6e, 0x38, 0xb0, 0x38, 0xf0, 0x49,
- 0xab, 0x5d, 0x9d, 0x9c, 0xd1, 0x92, 0x57, 0x48, 0x0d, 0x2b, 0x26, 0x94,
- 0x8f, 0x3b, 0xcf, 0x00, 0xf1, 0xe4, 0x0b, 0xe8, 0xdb, 0x08, 0xbc, 0x9b,
- 0x6a, 0x3c, 0x30, 0xd4, 0x7e, 0xa3, 0xe5, 0x86, 0x39, 0x0f, 0xc2, 0xb0,
- 0x4a, 0x0e, 0x90, 0x76, 0xb6, 0x86, 0x1b, 0x2a, 0x3b, 0xbe, 0x75, 0x43,
- 0xe7, 0x83, 0x6a, 0x9c, 0xcc, 0x86, 0xcc, 0xdd, 0xf9, 0x40, 0x69, 0xd4,
- 0x2b, 0xb1, 0xd8, 0xc7, 0x70, 0x2a, 0x4c, 0x6f, 0xb6, 0x30, 0x21, 0xdb,
- 0xbb, 0xcc, 0x27, 0xcf, 0x2d, 0x60, 0x97, 0x5f, 0x91, 0xfa, 0xd2, 0x08,
- 0xe0, 0x8b, 0xbb, 0xa9, 0x5c, 0x22, 0xc0, 0xab, 0x2e, 0xd8, 0x3d, 0xc1,
- 0x3c, 0xbc, 0xeb, 0xa0, 0xa2, 0xe2, 0x89, 0x48, 0xd8, 0x90, 0x70, 0xf4,
- 0x64, 0x3c, 0x4b, 0x8b, 0x1b, 0xdc, 0x66, 0xb8, 0x9f, 0x48, 0xe5, 0x54,
- 0x18, 0x2a, 0x2a, 0x6a, 0x09, 0x7f, 0xa4, 0x20, 0x43, 0x40, 0x08, 0x9c,
- 0x11, 0x73, 0x7b, 0x60, 0x5b, 0xbe, 0x45, 0xdb, 0xf2, 0x3c, 0x6f, 0x38,
- 0x4e, 0x6e, 0x11, 0xc8, 0x74, 0x74, 0x74, 0x62, 0x2e, 0x26, 0x9b, 0x64,
- 0x02, 0x15, 0x3d, 0x9b, 0x91, 0x29, 0x58, 0x23, 0x82, 0x38, 0xaf, 0x32,
- 0x07, 0x23, 0x63, 0xee, 0xa1, 0x50, 0xea, 0xf0, 0x1f, 0x81, 0x5c, 0x90,
- 0x3e, 0x5a, 0xdb, 0x82, 0x23, 0xc2, 0xb9, 0x99, 0x89, 0x01, 0x27, 0xd4,
- 0xd5, 0x1f, 0xf1, 0xab, 0xd3, 0x48, 0xb8, 0xdd, 0x81, 0x8b, 0x07, 0xb2,
- 0xe5, 0xba, 0x78, 0x10, 0x4e, 0x2c, 0xb5, 0x1e, 0xc6, 0x56, 0x76, 0xcb,
- 0xca, 0x6d, 0xe2, 0xd7, 0x63, 0x46, 0x00, 0x86, 0x37, 0x9b, 0x8a, 0xbf,
- 0xc3, 0x22, 0x03, 0x69, 0xc8, 0x72, 0x3b, 0x4c, 0x58, 0x07, 0xce, 0xd1,
- 0x00, 0x64, 0xbc, 0x9d, 0x35, 0xea, 0x34, 0x44, 0x88, 0xab, 0xdc, 0xc0,
- 0xcd, 0x14, 0x2c, 0xa7, 0x6a, 0x81, 0xd6, 0xfa, 0xd1, 0xb9, 0x0c, 0x5e,
- 0x01, 0xdb, 0x20, 0xe7, 0x6b, 0x40, 0x8b, 0xb1, 0xf2, 0xed, 0xe0, 0x3d,
- 0x5d, 0x17, 0xe5, 0x60, 0xbc, 0x84, 0x5e, 0xe6, 0x95, 0xd1, 0xe2, 0x1c,
- 0x4e, 0xaa, 0x3a, 0x0f, 0x5c, 0x35, 0x7c, 0x4f, 0xfe, 0x28, 0x64, 0xc7,
- 0xb3, 0x8b, 0x0a, 0xe9, 0x92, 0x6d, 0xcc, 0x1d, 0x8b, 0xb4, 0xc2, 0x39,
- 0x08, 0x88, 0xc5, 0xd6, 0xc2, 0x6b, 0x3c, 0x42, 0xd9, 0x64, 0x1b, 0x2d,
- 0x58, 0x48, 0x11, 0x56, 0x78, 0x56, 0xda, 0x11, 0xd7, 0x8d, 0x85, 0xbe,
- 0xbf, 0x80, 0x98, 0x90, 0x09, 0x20, 0xbc, 0x86, 0x52, 0x6b, 0xe2, 0xc6,
- 0x6d, 0x43, 0x85, 0x9f, 0x18, 0x24, 0x22, 0x9d, 0x71, 0xc5, 0x8e, 0x95,
- 0x57, 0x09, 0x1f, 0xa6, 0xe6, 0xe2, 0xe2, 0xaf, 0x67, 0x47, 0x6f, 0xf4,
- 0xcd, 0xc7, 0xf6, 0x8c, 0xb1, 0xd3, 0x10, 0x33, 0x93, 0x09, 0x56, 0xa9,
- 0x57, 0xd2, 0xd9, 0x10, 0xd9, 0xa0, 0x51, 0x5f, 0x3e, 0x77, 0x33, 0x48,
- 0x7e, 0x38, 0x3c, 0x1e, 0x9d, 0x9d, 0x9c, 0x1e, 0xbc, 0x79, 0xfd, 0x83,
- 0xb2, 0xe4, 0x2f, 0xc8, 0x45, 0xc0, 0x72, 0x9a, 0xfd, 0xcc, 0x61, 0x3b,
- 0xc8, 0x7b, 0xef, 0x8f, 0xbe, 0xff, 0x68, 0xb4, 0x83, 0x37, 0x84, 0xf0,
- 0xde, 0xbf, 0x4d, 0x67, 0xf2, 0x12, 0xa9, 0x58, 0x11, 0xd9, 0x6e, 0xd8,
- 0x06, 0xe3, 0xeb, 0x2e, 0xac, 0xad, 0x1e, 0xea, 0xf2, 0x14, 0x1e, 0x34,
- 0x8c, 0xce, 0x2b, 0x14, 0x95, 0xb6, 0xd2, 0x6a, 0x23, 0xb5, 0x7e, 0xdd,
- 0xf5, 0xbf, 0xde, 0x70, 0x4c, 0x25, 0x85, 0x10, 0xf8, 0x9e, 0x79, 0xc4,
- 0xad, 0xca, 0x37, 0x2e, 0x9e, 0x57, 0x90, 0x94, 0x2b, 0x0a, 0x60, 0xb1,
- 0x50, 0x94, 0x52, 0x70, 0x19, 0x3e, 0x6f, 0xc1, 0xab, 0x14, 0x10, 0x26,
- 0x0a, 0xa1, 0xd5, 0x68, 0x7a, 0xe5, 0x63, 0x22, 0xc2, 0xd8, 0xb1, 0xa4,
- 0x5a, 0xca, 0x16, 0xb5, 0x79, 0xce, 0x8e, 0xce, 0x47, 0xc7, 0xa3, 0x0b,
- 0x52, 0xa3, 0xa4, 0xae, 0xa2, 0xd8, 0xa0, 0xb5, 0xe8, 0x25, 0x30, 0x1b,
- 0xda, 0xd0, 0xa3, 0x7e, 0xdd, 0x90, 0xd6, 0x89, 0xb6, 0x6c, 0xae, 0x9d,
- 0xc4, 0x49, 0x37, 0x00, 0x67, 0x86, 0x92, 0x20, 0xca, 0x00, 0xba, 0xe9,
- 0xa5, 0x1e, 0xe0, 0x52, 0x48, 0xa3, 0x53, 0x3e, 0x03, 0xa5, 0x6f, 0xb0,
- 0x3b, 0xb3, 0x7c, 0xec, 0xac, 0xe6, 0x1d, 0x17, 0x32, 0x45, 0x27, 0x08,
- 0x58, 0x87, 0x7f, 0x84, 0xd4, 0x1e, 0xee, 0x32, 0xa3, 0xa5, 0xd4, 0xae,
- 0x5c, 0x6b, 0x92, 0xd5, 0xe8, 0xe7, 0xaf, 0x5a, 0x45, 0x15, 0xca, 0x89,
- 0xca, 0x69, 0xf6, 0x53, 0x2f, 0x08, 0x55, 0xf0, 0x9f, 0x00, 0x5d, 0x2b,
- 0x2c, 0x9b, 0x98, 0x72, 0xce, 0x99, 0x68, 0x64, 0x68, 0x31, 0x52, 0x0b,
- 0x32, 0xeb, 0x11, 0x27, 0x24, 0x33, 0x0b, 0x44, 0x10, 0x11, 0x1d, 0xaf,
- 0x28, 0x85, 0x0d, 0x20, 0x5b, 0x53, 0x92, 0xb7, 0x60, 0x81, 0xf3, 0x3b,
- 0xd3, 0xeb, 0x94, 0x56, 0x70, 0xbc, 0xf4, 0x0b, 0xb5, 0xd9, 0xd1, 0x73,
- 0x7d, 0x12, 0x2c, 0x3c, 0x22, 0x24, 0xd3, 0x0a, 0x28, 0x96, 0x8d, 0x80,
- 0xc6, 0xab, 0xe2, 0x23, 0xe1, 0x8e, 0xc3, 0x36, 0x9e, 0x8f, 0xd2, 0xa5,
- 0x16, 0x13, 0x7d, 0x6c, 0x45, 0xbd, 0xca, 0x8e, 0x44, 0xbe, 0x55, 0xa6,
- 0x71, 0x4b, 0x6c, 0x66, 0xa8, 0xc9, 0xe1, 0x50, 0x4c, 0xec, 0x65, 0x4c,
- 0x49, 0x47, 0xe4, 0x5f, 0xac, 0x04, 0x2b, 0xc9, 0xb0, 0x3f, 0xb2, 0x2c,
- 0xa3, 0x1c, 0x24, 0xea, 0x24, 0x93, 0xd7, 0x4d, 0x71, 0xf4, 0x5c, 0x18,
- 0x37, 0x2f, 0xb7, 0x47, 0x56, 0x6c, 0x5e, 0x7f, 0x90, 0x0e, 0x6d, 0x82,
- 0xbc, 0x6e, 0x56, 0x9f, 0xf3, 0xad, 0x52, 0xa4, 0xf7, 0xa8, 0x5d, 0xd7,
- 0x4b, 0x13, 0xad, 0x25, 0xf9, 0xd6, 0xba, 0xa7, 0xc1, 0xf0, 0x5a, 0x35,
- 0x71, 0x69, 0x76, 0x2d, 0xd7, 0xa0, 0x91, 0x2f, 0x17, 0x28, 0xa6, 0x34,
- 0x11, 0x34, 0x79, 0x04, 0xed, 0xda, 0x06, 0xf5, 0x12, 0x71, 0x8b, 0x65,
- 0x56, 0xf5, 0xdd, 0x87, 0x93, 0x8b, 0xe3, 0x33, 0xdf, 0xfd, 0x98, 0x7c,
- 0x7f, 0x7c, 0xf1, 0x8d, 0x91, 0xda, 0x47, 0xc7, 0xef, 0xbf, 0x3e, 0x21,
- 0x1f, 0xcf, 0xbb, 0x77, 0xfb, 0xef, 0x09, 0x5d, 0xe0, 0x3d, 0x22, 0x1b,
- 0xf7, 0xa1, 0x38, 0x10, 0x3b, 0x32, 0x4b, 0x4c, 0xb4, 0x43, 0x79, 0xe7,
- 0xfd, 0xd0, 0xd5, 0xd0, 0x39, 0x7e, 0x5c, 0xf3, 0xb8, 0x68, 0x2f, 0xd2,
- 0x1a, 0x2a, 0x58, 0x43, 0x33, 0x78, 0x20, 0xc3, 0x0e, 0x8e, 0x2d, 0x29,
- 0x5b, 0xb4, 0xd0, 0x5d, 0x18, 0x79, 0xe4, 0x38, 0xb2, 0x84, 0x0e, 0x37,
- 0x3a, 0xdf, 0xdd, 0xce, 0x7d, 0x81, 0x1d, 0xb5, 0x20, 0xb4, 0xd0, 0x63,
- 0x8c, 0xcc, 0x54, 0x88, 0x5e, 0xc3, 0xf7, 0x65, 0x3b, 0xe7, 0xc0, 0xf4,
- 0x88, 0x21, 0x21, 0x8e, 0xa0, 0x74, 0x16, 0x41, 0xd2, 0x38, 0x49, 0x69,
- 0x3e, 0x3f, 0xf1, 0x2f, 0xd4, 0x76, 0x3d, 0x7a, 0x0d, 0x0f, 0xbc, 0x2a,
- 0x33, 0x77, 0x72, 0x07, 0xa7, 0xda, 0x8c, 0x9a, 0x7f, 0xa1, 0x86, 0xf1,
- 0xe5, 0x32, 0x20, 0xbe, 0x36, 0x30, 0x5b, 0xb2, 0x69, 0x2b, 0x0e, 0x89,
- 0xf9, 0x6c, 0x8f, 0xc5, 0x4a, 0x0b, 0xb3, 0xac, 0xc5, 0xf3, 0x4c, 0x73,
- 0xda, 0xb2, 0x84, 0xa2, 0x20, 0x1e, 0x5b, 0xd2, 0x9a, 0x64, 0xce, 0xe0,
- 0x96, 0xfa, 0x58, 0x2b, 0x2b, 0x9b, 0xef, 0xbb, 0x53, 0x35, 0xed, 0x69,
- 0x5a, 0x1b, 0x92, 0x59, 0x09, 0x7e, 0xc7, 0x79, 0x4e, 0x51, 0x64, 0xad,
- 0x2c, 0x87, 0xd9, 0x7d, 0x46, 0x4e, 0x4e, 0xfa, 0xf5, 0x6f, 0x8b, 0x2b,
- 0x3f, 0xe3, 0x8d, 0xcb, 0x3e, 0x2f, 0x62, 0x3b, 0x2b, 0x98, 0xce, 0x2c,
- 0x16, 0x49, 0xa9, 0xb9, 0xd6, 0x08, 0xa4, 0x7e, 0xdc, 0xce, 0xaa, 0x0e,
- 0xe5, 0xfb, 0xdd, 0xf0, 0xfb, 0x5d, 0x36, 0x3b, 0x1e, 0x9f, 0xdd, 0xbe,
- 0xb4, 0x58, 0xa8, 0x9c, 0xc7, 0xed, 0x8b, 0x6f, 0x2a, 0x14, 0x10, 0x85,
- 0xd1, 0xa3, 0x7c, 0xe7, 0xa4, 0xcc, 0x13, 0xd9, 0xf6, 0x4f, 0x11, 0x64,
- 0xcb, 0x0a, 0xf9, 0xa9, 0x78, 0x04, 0x66, 0x62, 0x0e, 0xfb, 0x45, 0x90,
- 0x1d, 0xf8, 0x14, 0x5d, 0x57, 0xa6, 0x41, 0xf3, 0xfd, 0x73, 0x1b, 0x8b,
- 0xef, 0x78, 0x1a, 0xca, 0xb5, 0x49, 0x36, 0xd4, 0x20, 0x5f, 0xdc, 0x6a,
- 0x0d, 0x5e, 0xf3, 0xeb, 0x4b, 0x5b, 0xaa, 0xa7, 0x6e, 0xf9, 0xa8, 0x5a,
- 0xb8, 0xc3, 0xca, 0xfc, 0x31, 0x38, 0x84, 0x45, 0x12, 0x67, 0x70, 0x4a,
- 0x46, 0x67, 0x5c, 0x59, 0x3b, 0x20, 0xdb, 0x2b, 0x22, 0x0a, 0x03, 0xf3,
- 0x0c, 0x99, 0xb1, 0xe0, 0x47, 0x1e, 0x73, 0xf1, 0x31, 0xff, 0x65, 0xd7,
- 0x7f, 0xdc, 0xdd, 0xde, 0xde, 0xd9, 0xdb, 0xf9, 0xfc, 0xd5, 0xf6, 0xde,
- 0xce, 0xce, 0xce, 0xee, 0xde, 0xce, 0xde, 0xde, 0xee, 0xf6, 0xcf, 0x5b,
- 0x64, 0x3f, 0xba, 0xcd, 0xb3, 0x3b, 0x75, 0x4c, 0x71, 0x2e, 0x1e, 0xc8,
- 0x9a, 0x6b, 0xa9, 0x8b, 0x06, 0x2f, 0x7a, 0xae, 0x4a, 0x3e, 0x16, 0x55,
- 0x82, 0x43, 0xe6, 0x19, 0x4c, 0x6e, 0xe1, 0x32, 0x4d, 0x71, 0x06, 0x3d,
- 0xc0, 0x6b, 0x8c, 0xea, 0xef, 0x4b, 0x9a, 0xe9, 0x98, 0xc4, 0x01, 0xc8,
- 0x34, 0xb5, 0xcd, 0xeb, 0xbb, 0x9a, 0x95, 0xe3, 0x31, 0x32, 0x17, 0x6c,
- 0x6a, 0xeb, 0x30, 0x21, 0x54, 0xd5, 0x1b, 0x26, 0x09, 0xf1, 0x1c, 0x20,
- 0xa8, 0x90, 0x0f, 0xba, 0x5b, 0x1d, 0x16, 0xbc, 0x24, 0x90, 0x7a, 0x52,
- 0x52, 0x85, 0x81, 0x29, 0x31, 0x25, 0xb3, 0x48, 0x95, 0x4d, 0x79, 0x49,
- 0x2e, 0xb3, 0xcf, 0xb7, 0xf7, 0xf6, 0xa8, 0x08, 0xc8, 0x9f, 0x76, 0xfa,
- 0x12, 0x0f, 0xea, 0x07, 0xb9, 0xf7, 0xed, 0xf5, 0xc4, 0x6d, 0x90, 0xfa,
- 0xe1, 0xcf, 0xb3, 0x58, 0xce, 0xb3, 0xca, 0x28, 0x22, 0x54, 0xda, 0x15,
- 0x01, 0x91, 0x30, 0x7a, 0x33, 0xda, 0x1a, 0x00, 0x59, 0x3a, 0xc1, 0xf8,
- 0x74, 0x23, 0x30, 0x6a, 0xac, 0x4d, 0x42, 0x67, 0xb8, 0x20, 0x37, 0x45,
- 0xdb, 0x36, 0x0a, 0xe1, 0xc0, 0x8e, 0xcf, 0xa9, 0x2c, 0x9c, 0xc4, 0xc3,
- 0xf7, 0xad, 0x70, 0x06, 0x1c, 0xae, 0x82, 0x0b, 0x8e, 0xd2, 0xe3, 0x2c,
- 0xc3, 0xc3, 0x62, 0xe2, 0x09, 0xb7, 0x92, 0xbf, 0xf3, 0xa3, 0x37, 0xd9,
- 0xdd, 0x17, 0x3b, 0x3f, 0x73, 0xb8, 0x22, 0x1d, 0x08, 0xb7, 0x6a, 0x52,
- 0x18, 0x6e, 0xea, 0x67, 0x68, 0x28, 0x21, 0x6d, 0x64, 0xc3, 0xab, 0xa1,
- 0x4a, 0x15, 0x62, 0x6d, 0xec, 0xfb, 0x41, 0xe3, 0x8c, 0x58, 0xce, 0x65,
- 0x84, 0xa1, 0xa7, 0xa9, 0x41, 0x49, 0x0d, 0xc2, 0x6c, 0xcc, 0x6c, 0x55,
- 0xf8, 0x31, 0x37, 0xcc, 0xd1, 0xc5, 0xbe, 0xb9, 0x3c, 0xbe, 0x0d, 0x15,
- 0xfd, 0x77, 0x99, 0xd1, 0xca, 0x69, 0xb3, 0x37, 0x70, 0x1e, 0x6e, 0x2d,
- 0x4e, 0x30, 0xad, 0xdd, 0xf3, 0x64, 0x83, 0x7c, 0x16, 0x2f, 0x3e, 0x7f,
- 0xf1, 0x7c, 0x93, 0x8b, 0x32, 0xf0, 0x6b, 0x19, 0xe5, 0x87, 0xc0, 0x2a,
- 0x29, 0xe0, 0x34, 0x64, 0x4e, 0xb6, 0x2c, 0xe9, 0xc3, 0xf9, 0x31, 0x1f,
- 0xe9, 0x6b, 0xc6, 0x10, 0x60, 0xa5, 0xb7, 0x8b, 0x2b, 0x87, 0xfb, 0xd6,
- 0x13, 0x32, 0xe6, 0x39, 0x61, 0x1e, 0x22, 0xf7, 0x9a, 0x2e, 0x46, 0x9b,
- 0xfb, 0x8f, 0x1b, 0xd6, 0x1c, 0xd0, 0x12, 0xa5, 0x0a, 0xa5, 0x02, 0x14,
- 0x06, 0x03, 0x90, 0x44, 0xc2, 0x68, 0x15, 0x3a, 0xb3, 0x1a, 0x18, 0xe9,
- 0x41, 0xcc, 0x8f, 0x98, 0xfb, 0x77, 0x70, 0xb9, 0x37, 0xd9, 0xe3, 0x0f,
- 0xa1, 0x90, 0xc8, 0xd0, 0x3c, 0xa8, 0xa1, 0xa3, 0x34, 0xe2, 0x56, 0x36,
- 0x9a, 0x93, 0x36, 0x3d, 0x4c, 0x27, 0x85, 0x73, 0x11, 0x56, 0x64, 0x97,
- 0x90, 0xdd, 0xd9, 0x0d, 0x2c, 0x8b, 0x79, 0xcb, 0xe4, 0x23, 0xb9, 0xf4,
- 0xc8, 0x69, 0x47, 0xc8, 0xf1, 0xdc, 0x5c, 0x47, 0xd5, 0x83, 0x48, 0xd8,
- 0x50, 0x13, 0x6c, 0x65, 0xb5, 0x4e, 0x40, 0x00, 0xa3, 0x46, 0xf8, 0x91,
- 0xf4, 0x16, 0x34, 0x45, 0x95, 0xe6, 0xd6, 0x00, 0x5a, 0x6c, 0x7f, 0x30,
- 0xd7, 0xaf, 0xbc, 0x78, 0x19, 0x3f, 0xbd, 0x4c, 0x7f, 0xd7, 0xe7, 0xbc,
- 0x50, 0xca, 0xb4, 0x3b, 0xb1, 0x15, 0x43, 0x63, 0x6c, 0x4d, 0x84, 0x4f,
- 0x59, 0xed, 0x67, 0x03, 0x23, 0xd9, 0xda, 0xda, 0x5c, 0x31, 0x1a, 0xf9,
- 0x3a, 0xd6, 0xfb, 0x19, 0x30, 0x49, 0xbc, 0x8c, 0x4e, 0xb3, 0xe7, 0xed,
- 0xc6, 0x69, 0x69, 0xf3, 0x9a, 0x76, 0x72, 0x2a, 0x71, 0xb1, 0x6c, 0x46,
- 0x55, 0xf5, 0x8a, 0x07, 0xaf, 0xcc, 0xab, 0x3d, 0x09, 0x09, 0xc5, 0x51,
- 0x8c, 0x28, 0xae, 0xf9, 0xcc, 0xee, 0xcd, 0x61, 0xb2, 0x4f, 0xd4, 0xd0,
- 0xea, 0xd8, 0x1b, 0xb2, 0xda, 0x73, 0x15, 0x01, 0x5d, 0x85, 0x58, 0x6b,
- 0xce, 0xeb, 0x7b, 0x5f, 0xaa, 0x98, 0xa7, 0x90, 0x00, 0xd6, 0xd8, 0x3b,
- 0xce, 0x18, 0xfe, 0xc4, 0x72, 0x4e, 0x0f, 0xd9, 0x38, 0x2f, 0x5a, 0x25,
- 0x43, 0xa5, 0x11, 0x38, 0xba, 0xed, 0x24, 0x00, 0x9a, 0x58, 0x29, 0x18,
- 0xaf, 0x5f, 0x46, 0x10, 0x08, 0x04, 0x12, 0xd4, 0xce, 0x82, 0xb5, 0x25,
- 0x62, 0xf6, 0xb6, 0x8e, 0x99, 0xbc, 0x5a, 0xeb, 0xd1, 0x67, 0x8a, 0xe7,
- 0x20, 0x06, 0x8e, 0xb7, 0x35, 0x87, 0x84, 0x18, 0xc6, 0xfe, 0xf1, 0x09,
- 0x45, 0xc5, 0x9d, 0x18, 0x15, 0x6f, 0xa4, 0xa2, 0x12, 0xa2, 0x44, 0x11,
- 0xaf, 0x57, 0xe4, 0x24, 0xae, 0xf7, 0x6d, 0xe9, 0x11, 0x4d, 0x96, 0x82,
- 0xde, 0x42, 0xce, 0x3d, 0x56, 0xfd, 0x05, 0x23, 0xd0, 0xec, 0x96, 0x91,
- 0x97, 0x6a, 0x36, 0xda, 0x02, 0x8a, 0x97, 0x40, 0xea, 0xe1, 0x48, 0x85,
- 0x4a, 0xcd, 0x6c, 0x1a, 0x95, 0x8f, 0xaa, 0x6c, 0x96, 0xdd, 0x8a, 0x75,
- 0x95, 0x81, 0x4d, 0xbf, 0x16, 0x1f, 0x26, 0x97, 0x3e, 0x6d, 0x9c, 0x2b,
- 0xb6, 0xe5, 0x26, 0xa5, 0x3e, 0xb7, 0x18, 0x13, 0xc6, 0x41, 0x7d, 0x50,
- 0xf7, 0x0e, 0x8d, 0x5f, 0x5d, 0xc6, 0xf4, 0xde, 0x80, 0x74, 0x5c, 0x09,
- 0x6d, 0xfd, 0x50, 0x0b, 0x9a, 0x43, 0x37, 0x56, 0x9c, 0x6d, 0x85, 0x5a,
- 0x3c, 0x8f, 0x8d, 0xef, 0x7d, 0xc5, 0x4b, 0x66, 0x8f, 0x01, 0x5d, 0x3c,
- 0x7d, 0x32, 0xd4, 0x72, 0x81, 0x76, 0xa3, 0x90, 0x51, 0x65, 0x8c, 0x3e,
- 0x27, 0x8e, 0x82, 0x36, 0xca, 0x99, 0xf9, 0x13, 0xe1, 0x54, 0x1c, 0x60,
- 0x69, 0x9e, 0x25, 0xbc, 0x57, 0x2f, 0xa2, 0xd5, 0xfc, 0xc9, 0xc9, 0x10,
- 0xf2, 0x17, 0x9a, 0xaa, 0x96, 0x80, 0x15, 0xee, 0xf3, 0x65, 0x48, 0x4e,
- 0xc7, 0x66, 0x32, 0xb4, 0xa3, 0x17, 0x9f, 0x3f, 0x8f, 0xff, 0x50, 0x5d,
- 0xd2, 0x2a, 0x86, 0x94, 0x95, 0xae, 0x2e, 0xef, 0xc2, 0x98, 0x6b, 0x1d,
- 0x7e, 0xb5, 0x24, 0x67, 0x98, 0xad, 0xe4, 0x43, 0xa3, 0x98, 0xd3, 0x55,
- 0x94, 0x71, 0x59, 0x51, 0xdb, 0x38, 0x69, 0x74, 0x4b, 0xb3, 0xbb, 0xdc,
- 0xfa, 0x49, 0x79, 0x47, 0x35, 0x51, 0x2f, 0x2f, 0xf3, 0x09, 0x15, 0xba,
- 0x71, 0xf0, 0xc1, 0xc4, 0xe2, 0xf9, 0xc1, 0xb9, 0x96, 0x61, 0x32, 0x73,
- 0x4b, 0x16, 0xcb, 0xf1, 0xcc, 0xdc, 0xd5, 0x1a, 0xcd, 0x6e, 0x0e, 0x15,
- 0x56, 0xc9, 0x28, 0x5b, 0x68, 0x8e, 0x7d, 0xf9, 0xd0, 0x37, 0x3b, 0x11,
- 0xd4, 0x52, 0xbc, 0x9d, 0x24, 0xf0, 0x39, 0x8a, 0xc3, 0x52, 0x98, 0xf1,
- 0xbc, 0x2c, 0x34, 0x19, 0x66, 0x59, 0x33, 0x98, 0xa4, 0x56, 0x7a, 0x5f,
- 0x63, 0xcf, 0x44, 0x3e, 0x13, 0xf4, 0x76, 0xd1, 0xcc, 0xf1, 0x86, 0x3f,
- 0x99, 0xe9, 0x60, 0x71, 0xbd, 0xd0, 0x9d, 0x56, 0x79, 0x88, 0x85, 0x25,
- 0x49, 0xbf, 0xc0, 0xc9, 0x3b, 0xfb, 0xe6, 0x6c, 0x98, 0x1c, 0x51, 0x4b,
- 0x3c, 0x26, 0x91, 0x73, 0x61, 0xa2, 0x31, 0xdf, 0x99, 0xc9, 0x5e, 0xd1,
- 0xfd, 0x75, 0x5a, 0xd1, 0x5f, 0x68, 0x4d, 0xbe, 0x64, 0xab, 0x2c, 0xbe,
- 0x6d, 0xf7, 0x6a, 0x1a, 0xd2, 0x20, 0xeb, 0x33, 0xfc, 0x6e, 0x8e, 0x8a,
- 0x91, 0xbe, 0xec, 0x36, 0xb9, 0x1e, 0xca, 0xaa, 0x05, 0xbd, 0xc3, 0x6f,
- 0x26, 0x46, 0x28, 0x83, 0x68, 0xb5, 0x78, 0xc0, 0xfe, 0x79, 0xbc, 0x91,
- 0xc5, 0x4f, 0x6e, 0xc0, 0x23, 0x2d, 0x21, 0x3f, 0x1b, 0xbe, 0xc7, 0xe7,
- 0xaa, 0x62, 0xd0, 0x99, 0x2a, 0x93, 0x60, 0xc7, 0x52, 0xbc, 0xa4, 0x6c,
- 0xd0, 0xa8, 0xb3, 0xce, 0x71, 0xf5, 0xd4, 0x37, 0xfd, 0x82, 0xb4, 0x6e,
- 0x1a, 0x8b, 0x11, 0x5a, 0xcc, 0x16, 0x0c, 0xd7, 0xfe, 0x6f, 0x9c, 0x7c,
- 0x7e, 0x85, 0xdf, 0x6c, 0x02, 0x00,
-};
-#define BUF_SIZE 0x10000
-static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
-{
- (void) opaque;
- /* not a typo, keep it calloc() */
- return (voidpf) calloc(items, size);
-}
-static void zfree_func(voidpf opaque, voidpf ptr)
-{
- (void) opaque;
- free(ptr);
-}
-/* Decompress and send to stdout a gzip-compressed buffer */
-void hugehelp(void)
-{
- unsigned char* buf;
- int status,headerlen;
- z_stream z;
-
- /* Make sure no gzip options are set */
- if (hugehelpgz[3] & 0xfe)
- return;
-
- headerlen = 10;
- memset(&z, 0, sizeof(z_stream));
- z.zalloc = (alloc_func)zalloc_func;
- z.zfree = (free_func)zfree_func;
- z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
- z.next_in = (unsigned char *)hugehelpgz + headerlen;
-
- if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
- return;
-
- buf = malloc(BUF_SIZE);
- if (buf) {
- while(1) {
- z.avail_out = BUF_SIZE;
- z.next_out = buf;
- status = inflate(&z, Z_SYNC_FLUSH);
- if (status == Z_OK || status == Z_STREAM_END) {
- fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
- if (status == Z_STREAM_END)
- break;
- }
- else
- break; /* Error */
- }
- free(buf);
- }
- inflateEnd(&z);
-}
-#else /* !USE_MANUAL */
-/* built-in manual is disabled, blank function */
-#include "tool_hugehelp.h"
-void hugehelp(void) {}
-#endif /* USE_MANUAL */
-#endif /* HAVE_LIBZ */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_hugehelp.h b/external/libcurl_android/jni/libcurl/src/tool_hugehelp.h
deleted file mode 100755
index 442579e5..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_hugehelp.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef HEADER_CURL_TOOL_HUGEHELP_H
-#define HEADER_CURL_TOOL_HUGEHELP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-void hugehelp(void);
-
-#endif /* HEADER_CURL_TOOL_HUGEHELP_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_libinfo.c b/external/libcurl_android/jni/libcurl/src/tool_libinfo.c
deleted file mode 100755
index 81b6680c..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_libinfo.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_libinfo.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/* global variable definitions, for libcurl run-time info */
-
-curl_version_info_data *curlinfo = NULL;
-long built_in_protos = 0;
-
-/*
- * libcurl_info_init: retrieves run-time information about libcurl,
- * setting a global pointer 'curlinfo' to libcurl's run-time info
- * struct, and a global bit pattern 'built_in_protos' composed of
- * CURLPROTO_* bits indicating which protocols are actually built
- * into library being used.
- */
-
-CURLcode get_libcurl_info(void)
-{
- static struct proto_name_pattern {
- const char *proto_name;
- long proto_pattern;
- } const possibly_built_in[] = {
- { "dict", CURLPROTO_DICT },
- { "file", CURLPROTO_FILE },
- { "ftp", CURLPROTO_FTP },
- { "ftps", CURLPROTO_FTPS },
- { "gopher", CURLPROTO_GOPHER },
- { "http", CURLPROTO_HTTP },
- { "https", CURLPROTO_HTTPS },
- { "imap", CURLPROTO_IMAP },
- { "imaps", CURLPROTO_IMAPS },
- { "ldap", CURLPROTO_LDAP },
- { "ldaps", CURLPROTO_LDAPS },
- { "pop3", CURLPROTO_POP3 },
- { "pop3s", CURLPROTO_POP3S },
- { "rtmp", CURLPROTO_RTMP },
- { "rtsp", CURLPROTO_RTSP },
- { "scp", CURLPROTO_SCP },
- { "sftp", CURLPROTO_SFTP },
- { "smtp", CURLPROTO_SMTP },
- { "smtps", CURLPROTO_SMTPS },
- { "telnet", CURLPROTO_TELNET },
- { "tftp", CURLPROTO_TFTP },
- { NULL, 0 }
- };
-
- struct proto_name_pattern const *p;
- const char *const *proto;
-
- /* Pointer to libcurl's run-time version information */
- curlinfo = curl_version_info(CURLVERSION_NOW);
- if(!curlinfo)
- return CURLE_FAILED_INIT;
-
- /* Build CURLPROTO_* bit pattern with libcurl's built-in protocols */
- built_in_protos = 0;
- if(curlinfo->protocols) {
- for(proto = curlinfo->protocols; *proto; proto++) {
- for(p = possibly_built_in; p->proto_name; p++) {
- if(curlx_raw_equal(*proto, p->proto_name)) {
- built_in_protos |= p->proto_pattern;
- break;
- }
- }
- }
- }
-
- return CURLE_OK;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_libinfo.h b/external/libcurl_android/jni/libcurl/src/tool_libinfo.h
deleted file mode 100755
index 5c149d91..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_libinfo.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef HEADER_CURL_TOOL_LIBINFO_H
-#define HEADER_CURL_TOOL_LIBINFO_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-/* global variable declarations, for libcurl run-time info */
-
-extern curl_version_info_data *curlinfo;
-extern long built_in_protos;
-
-CURLcode get_libcurl_info(void);
-
-#endif /* HEADER_CURL_TOOL_LIBINFO_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_main.c b/external/libcurl_android/jni/libcurl/src/tool_main.c
deleted file mode 100755
index 8c8acc6d..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_main.c
+++ /dev/null
@@ -1,275 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include <sys/stat.h>
-
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#ifdef USE_NSS
-#include <nspr.h>
-#include <plarenas.h>
-#endif
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_convert.h"
-#include "tool_msgs.h"
-#include "tool_operate.h"
-#include "tool_panykey.h"
-#include "tool_vms.h"
-#include "tool_main.h"
-#include "tool_libinfo.h"
-
-/*
- * This is low-level hard-hacking memory leak tracking and similar. Using
- * the library level code from this client-side is ugly, but we do this
- * anyway for convenience.
- */
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef __VMS
-/*
- * vms_show is a global variable, used in main() as parameter for
- * function vms_special_exit() to allow proper curl tool exiting.
- * Its value may be set in other tool_*.c source files thanks to
- * forward declaration present in tool_vms.h
- */
-int vms_show = 0;
-#endif
-
-/* if we build a static library for unit tests, there is no main() function */
-#ifndef UNITTESTS
-
-/*
- * Ensure that file descriptors 0, 1 and 2 (stdin, stdout, stderr) are
- * open before starting to run. Otherwise, the first three network
- * sockets opened by curl could be used for input sources, downloaded data
- * or error logs as they will effectively be stdin, stdout and/or stderr.
- */
-static void main_checkfds(void)
-{
-#ifdef HAVE_PIPE
- int fd[2] = { STDIN_FILENO, STDIN_FILENO };
- while(fd[0] == STDIN_FILENO ||
- fd[0] == STDOUT_FILENO ||
- fd[0] == STDERR_FILENO ||
- fd[1] == STDIN_FILENO ||
- fd[1] == STDOUT_FILENO ||
- fd[1] == STDERR_FILENO)
- if(pipe(fd) < 0)
- return; /* Out of handles. This isn't really a big problem now, but
- will be when we try to create a socket later. */
- close(fd[0]);
- close(fd[1]);
-#endif
-}
-
-#ifdef CURLDEBUG
-static void memory_tracking_init(void)
-{
- char *env;
- /* if CURL_MEMDEBUG is set, this starts memory tracking message logging */
- env = curlx_getenv("CURL_MEMDEBUG");
- if(env) {
- /* use the value as file name */
- char fname[CURL_MT_LOGFNAME_BUFSIZE];
- if(strlen(env) >= CURL_MT_LOGFNAME_BUFSIZE)
- env[CURL_MT_LOGFNAME_BUFSIZE-1] = '\0';
- strcpy(fname, env);
- curl_free(env);
- curl_memdebug(fname);
- /* this weird stuff here is to make curl_free() get called
- before curl_memdebug() as otherwise memory tracking will
- log a free() without an alloc! */
- }
- /* if CURL_MEMLIMIT is set, this enables fail-on-alloc-number-N feature */
- env = curlx_getenv("CURL_MEMLIMIT");
- if(env) {
- char *endptr;
- long num = strtol(env, &endptr, 10);
- if((endptr != env) && (endptr == env + strlen(env)) && (num > 0))
- curl_memlimit(num);
- curl_free(env);
- }
-}
-#else
-# define memory_tracking_init() Curl_nop_stmt
-#endif
-
-/*
- * This is the main global constructor for the app. Call this before
- * _any_ libcurl usage. If this fails, *NO* libcurl functions may be
- * used, or havoc may be the result.
- */
-static CURLcode main_init(struct GlobalConfig *config)
-{
- CURLcode result = CURLE_OK;
-
-#if defined(__DJGPP__) || defined(__GO32__)
- /* stop stat() wasting time */
- _djstat_flags |= _STAT_INODE | _STAT_EXEC_MAGIC | _STAT_DIRSIZE;
-#endif
-
- /* Initialise the global config */
- config->showerror = -1; /* Will show errors */
- config->errors = stderr; /* Default errors to stderr */
-
- /* Allocate the initial operate config */
- config->first = config->last = malloc(sizeof(struct OperationConfig));
- if(config->first) {
- /* Perform the libcurl initialization */
- result = curl_global_init(CURL_GLOBAL_DEFAULT);
- if(!result) {
- /* Get information about libcurl */
- result = get_libcurl_info();
-
- if(!result) {
- /* Get a curl handle to use for all forthcoming curl transfers */
- config->easy = curl_easy_init();
- if(config->easy) {
- /* Initialise the config */
- config_init(config->first);
- config->first->easy = config->easy;
- config->first->global = config;
- }
- else {
- helpf(stderr, "error initializing curl easy handle\n");
- result = CURLE_FAILED_INIT;
- free(config->first);
- }
- }
- else {
- helpf(stderr, "error retrieving curl library information\n");
- free(config->first);
- }
- }
- else {
- helpf(stderr, "error initializing curl library\n");
- free(config->first);
- }
- }
- else {
- helpf(stderr, "error initializing curl\n");
- result = CURLE_FAILED_INIT;
- }
-
- return result;
-}
-
-static void free_config_fields(struct GlobalConfig *config)
-{
- Curl_safefree(config->trace_dump);
-
- if(config->errors_fopened && config->errors)
- fclose(config->errors);
- config->errors = NULL;
-
- if(config->trace_fopened && config->trace_stream)
- fclose(config->trace_stream);
- config->trace_stream = NULL;
-
- Curl_safefree(config->libcurl);
-}
-
-/*
- * This is the main global destructor for the app. Call this after
- * _all_ libcurl usage is done.
- */
-static void main_free(struct GlobalConfig *config)
-{
- /* Cleanup the easy handle */
- curl_easy_cleanup(config->easy);
- config->easy = NULL;
-
- /* Main cleanup */
- curl_global_cleanup();
- convert_cleanup();
- metalink_cleanup();
-#ifdef USE_NSS
- if(PR_Initialized()) {
- /* prevent valgrind from reporting still reachable mem from NSRP arenas */
- PL_ArenaFinish();
- /* prevent valgrind from reporting possibly lost memory (fd cache, ...) */
- PR_Cleanup();
- }
-#endif
- free_config_fields(config);
-
- /* Free the config structures */
- config_free(config->last);
- config->first = NULL;
- config->last = NULL;
-}
-
-/*
-** curl tool main function.
-*/
-int main(int argc, char *argv[])
-{
- CURLcode result = CURLE_OK;
- struct GlobalConfig global;
- memset(&global, 0, sizeof(global));
-
- main_checkfds();
-
-#if defined(HAVE_SIGNAL) && defined(SIGPIPE)
- (void)signal(SIGPIPE, SIG_IGN);
-#endif
-
- /* Initialize memory tracking */
- memory_tracking_init();
-
- /* Initialize the curl library - do not call any libcurl functions before
- this point */
- result = main_init(&global);
- if(!result) {
- /* Start our curl operation */
- result = operate(&global, argc, argv);
-
-#ifdef __SYMBIAN32__
- if(global.showerror)
- tool_pressanykey();
-#endif
-
- /* Perform the main cleanup */
- main_free(&global);
- }
-
-#ifdef __NOVELL_LIBC__
- if(getenv("_IN_NETWARE_BASH_") == NULL)
- tool_pressanykey();
-#endif
-
-#ifdef __VMS
- vms_special_exit(res, vms_show);
-#else
- return (int)result;
-#endif
-}
-
-#endif /* ndef UNITTESTS */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_main.h b/external/libcurl_android/jni/libcurl/src/tool_main.h
deleted file mode 100755
index 9a7972fd..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_main.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef HEADER_CURL_TOOL_MAIN_H
-#define HEADER_CURL_TOOL_MAIN_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define DEFAULT_MAXREDIRS 50L
-
-#define RETRY_SLEEP_DEFAULT 1000L /* ms */
-#define RETRY_SLEEP_MAX 600000L /* ms == 10 minutes */
-
-#ifndef STDIN_FILENO
-# define STDIN_FILENO fileno(stdin)
-#endif
-
-#ifndef STDOUT_FILENO
-# define STDOUT_FILENO fileno(stdout)
-#endif
-
-#ifndef STDERR_FILENO
-# define STDERR_FILENO fileno(stderr)
-#endif
-
-#endif /* HEADER_CURL_TOOL_MAIN_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_metalink.c b/external/libcurl_android/jni/libcurl/src/tool_metalink.c
deleted file mode 100755
index 3573b058..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_metalink.c
+++ /dev/null
@@ -1,963 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef USE_METALINK
-
-#include <sys/stat.h>
-
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
-#ifdef USE_SSLEAY
-# ifdef USE_OPENSSL
-# include <openssl/md5.h>
-# include <openssl/sha.h>
-# else
-# include <md5.h>
-# include <sha.h>
-# endif
-#elif defined(USE_GNUTLS_NETTLE)
-# include <nettle/md5.h>
-# include <nettle/sha.h>
-# define MD5_CTX struct md5_ctx
-# define SHA_CTX struct sha1_ctx
-# define SHA256_CTX struct sha256_ctx
-#elif defined(USE_GNUTLS)
-# include <gcrypt.h>
-# define MD5_CTX gcry_md_hd_t
-# define SHA_CTX gcry_md_hd_t
-# define SHA256_CTX gcry_md_hd_t
-#elif defined(USE_NSS)
-# include <nss.h>
-# include <pk11pub.h>
-# define MD5_CTX void *
-# define SHA_CTX void *
-# define SHA256_CTX void *
- static NSSInitContext *nss_context;
-#elif defined(USE_POLARSSL)
-# include <polarssl/md5.h>
-# include <polarssl/sha1.h>
-# include <polarssl/sha256.h>
-# define MD5_CTX md5_context
-# define SHA_CTX sha1_context
-# define SHA256_CTX sha256_context
-#elif (defined(__MAC_OS_X_VERSION_MAX_ALLOWED) && \
- (__MAC_OS_X_VERSION_MAX_ALLOWED >= 1040)) || \
- (defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && \
- (__IPHONE_OS_VERSION_MAX_ALLOWED >= 20000))
-/* For Apple operating systems: CommonCrypto has the functions we need.
- The library's headers are even backward-compatible with OpenSSL's
- headers as long as we define COMMON_DIGEST_FOR_OPENSSL first.
-
- These functions are available on Tiger and later, as well as iOS 2.0
- and later. If you're building for an older cat, well, sorry. */
-# define COMMON_DIGEST_FOR_OPENSSL
-# include <CommonCrypto/CommonDigest.h>
-#elif defined(_WIN32)
-/* For Windows: If no other crypto library is provided, we fallback
- to the hash functions provided within the Microsoft Windows CryptoAPI */
-# include <wincrypt.h>
-/* Custom structure in order to store the required provider and hash handle */
-struct win32_crypto_hash {
- HCRYPTPROV hCryptProv;
- HCRYPTHASH hHash;
-};
-/* Custom Microsoft AES Cryptographic Provider defines required for MinGW */
-# ifndef ALG_SID_SHA_256
-# define ALG_SID_SHA_256 12
-# endif
-# ifndef CALG_SHA_256
-# define CALG_SHA_256 (ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA_256)
-# endif
-# define MD5_CTX struct win32_crypto_hash
-# define SHA_CTX struct win32_crypto_hash
-# define SHA256_CTX struct win32_crypto_hash
-#else
-# error "Can't compile METALINK support without a crypto library."
-#endif
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_getparam.h"
-#include "tool_paramhlp.h"
-#include "tool_cfgable.h"
-#include "tool_metalink.h"
-#include "tool_msgs.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/* Copied from tool_getparam.c */
-#define GetStr(str,val) do { \
- if(*(str)) { \
- free(*(str)); \
- *(str) = NULL; \
- } \
- if((val)) \
- *(str) = strdup((val)); \
- if(!(val)) \
- return PARAM_NO_MEM; \
-} WHILE_FALSE
-
-#ifdef USE_GNUTLS_NETTLE
-
-static int MD5_Init(MD5_CTX *ctx)
-{
- md5_init(ctx);
- return 1;
-}
-
-static void MD5_Update(MD5_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- md5_update(ctx, inputLen, input);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
-{
- md5_digest(ctx, 16, digest);
-}
-
-static int SHA1_Init(SHA_CTX *ctx)
-{
- sha1_init(ctx);
- return 1;
-}
-
-static void SHA1_Update(SHA_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- sha1_update(ctx, inputLen, input);
-}
-
-static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx)
-{
- sha1_digest(ctx, 20, digest);
-}
-
-static int SHA256_Init(SHA256_CTX *ctx)
-{
- sha256_init(ctx);
- return 1;
-}
-
-static void SHA256_Update(SHA256_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- sha256_update(ctx, inputLen, input);
-}
-
-static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
-{
- sha256_digest(ctx, 32, digest);
-}
-
-#elif defined(USE_GNUTLS)
-
-static int MD5_Init(MD5_CTX *ctx)
-{
- gcry_md_open(ctx, GCRY_MD_MD5, 0);
- return 1;
-}
-
-static void MD5_Update(MD5_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- gcry_md_write(*ctx, input, inputLen);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
-{
- memcpy(digest, gcry_md_read(*ctx, 0), 16);
- gcry_md_close(*ctx);
-}
-
-static int SHA1_Init(SHA_CTX *ctx)
-{
- gcry_md_open(ctx, GCRY_MD_SHA1, 0);
- return 1;
-}
-
-static void SHA1_Update(SHA_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- gcry_md_write(*ctx, input, inputLen);
-}
-
-static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx)
-{
- memcpy(digest, gcry_md_read(*ctx, 0), 20);
- gcry_md_close(*ctx);
-}
-
-static int SHA256_Init(SHA256_CTX *ctx)
-{
- gcry_md_open(ctx, GCRY_MD_SHA256, 0);
- return 1;
-}
-
-static void SHA256_Update(SHA256_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- gcry_md_write(*ctx, input, inputLen);
-}
-
-static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
-{
- memcpy(digest, gcry_md_read(*ctx, 0), 32);
- gcry_md_close(*ctx);
-}
-
-#elif defined(USE_NSS)
-
-static int nss_hash_init(void **pctx, SECOidTag hash_alg)
-{
- PK11Context *ctx;
-
- /* we have to initialize NSS if not initialized alraedy */
- if(!NSS_IsInitialized() && !nss_context) {
- static NSSInitParameters params;
- params.length = sizeof params;
- nss_context = NSS_InitContext("", "", "", "", &params, NSS_INIT_READONLY
- | NSS_INIT_NOCERTDB | NSS_INIT_NOMODDB | NSS_INIT_FORCEOPEN
- | NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE | NSS_INIT_PK11RELOAD);
- }
-
- ctx = PK11_CreateDigestContext(hash_alg);
- if(!ctx)
- return /* failure */ 0;
-
- if(PK11_DigestBegin(ctx) != SECSuccess) {
- PK11_DestroyContext(ctx, PR_TRUE);
- return /* failure */ 0;
- }
-
- *pctx = ctx;
- return /* success */ 1;
-}
-
-static void nss_hash_final(void **pctx, unsigned char *out, unsigned int len)
-{
- PK11Context *ctx = *pctx;
- unsigned int outlen;
- PK11_DigestFinal(ctx, out, &outlen, len);
- PK11_DestroyContext(ctx, PR_TRUE);
-}
-
-static int MD5_Init(MD5_CTX *pctx)
-{
- return nss_hash_init(pctx, SEC_OID_MD5);
-}
-
-static void MD5_Update(MD5_CTX *pctx,
- const unsigned char *input,
- unsigned int input_len)
-{
- PK11_DigestOp(*pctx, input, input_len);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX *pctx)
-{
- nss_hash_final(pctx, digest, 16);
-}
-
-static int SHA1_Init(SHA_CTX *pctx)
-{
- return nss_hash_init(pctx, SEC_OID_SHA1);
-}
-
-static void SHA1_Update(SHA_CTX *pctx,
- const unsigned char *input,
- unsigned int input_len)
-{
- PK11_DigestOp(*pctx, input, input_len);
-}
-
-static void SHA1_Final(unsigned char digest[20], SHA_CTX *pctx)
-{
- nss_hash_final(pctx, digest, 20);
-}
-
-static int SHA256_Init(SHA256_CTX *pctx)
-{
- return nss_hash_init(pctx, SEC_OID_SHA256);
-}
-
-static void SHA256_Update(SHA256_CTX *pctx,
- const unsigned char *input,
- unsigned int input_len)
-{
- PK11_DigestOp(*pctx, input, input_len);
-}
-
-static void SHA256_Final(unsigned char digest[32], SHA256_CTX *pctx)
-{
- nss_hash_final(pctx, digest, 32);
-}
-
-#elif defined(USE_POLARSSL)
-
-static int MD5_Init(MD5_CTX *ctx)
-{
- md5_starts(ctx);
- return 1;
-}
-
-static void MD5_Update(MD5_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- md5_update(ctx, input, inputLen);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
-{
- md5_finish(ctx, digest);
-}
-
-static int SHA1_Init(SHA_CTX *ctx)
-{
- sha1_starts(ctx);
- return 1;
-}
-
-static void SHA1_Update(SHA_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- sha1_update(ctx, input, inputLen);
-}
-
-static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx)
-{
- sha1_finish(ctx, digest);
-}
-
-static int SHA256_Init(SHA256_CTX *ctx)
-{
- sha256_starts(ctx, 0); /* 0 = sha256 */
- return 1;
-}
-
-static void SHA256_Update(SHA256_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- sha256_update(ctx, input, inputLen);
-}
-
-static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
-{
- sha256_finish(ctx, digest);
-}
-
-#elif defined(_WIN32) && !defined(USE_SSLEAY)
-
-static void win32_crypto_final(struct win32_crypto_hash *ctx,
- unsigned char *digest,
- unsigned int digestLen)
-{
- unsigned long length;
- CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
- if(length == digestLen)
- CryptGetHashParam(ctx->hHash, HP_HASHVAL, digest, &length, 0);
- if(ctx->hHash)
- CryptDestroyHash(ctx->hHash);
- if(ctx->hCryptProv)
- CryptReleaseContext(ctx->hCryptProv, 0);
-}
-
-static int MD5_Init(MD5_CTX *ctx)
-{
- if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL,
- PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
- CryptCreateHash(ctx->hCryptProv, CALG_MD5, 0, 0, &ctx->hHash);
- }
- return 1;
-}
-
-static void MD5_Update(MD5_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
-}
-
-static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
-{
- win32_crypto_final(ctx, digest, 16);
-}
-
-static int SHA1_Init(SHA_CTX *ctx)
-{
- if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL,
- PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
- CryptCreateHash(ctx->hCryptProv, CALG_SHA1, 0, 0, &ctx->hHash);
- }
- return 1;
-}
-
-static void SHA1_Update(SHA_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
-}
-
-static void SHA1_Final(unsigned char digest[20], SHA_CTX *ctx)
-{
- win32_crypto_final(ctx, digest, 20);
-}
-
-static int SHA256_Init(SHA256_CTX *ctx)
-{
- if(CryptAcquireContext(&ctx->hCryptProv, NULL, NULL,
- PROV_RSA_AES, CRYPT_VERIFYCONTEXT)) {
- CryptCreateHash(ctx->hCryptProv, CALG_SHA_256, 0, 0, &ctx->hHash);
- }
- return 1;
-}
-
-static void SHA256_Update(SHA256_CTX *ctx,
- const unsigned char *input,
- unsigned int inputLen)
-{
- CryptHashData(ctx->hHash, (unsigned char *)input, inputLen, 0);
-}
-
-static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
-{
- win32_crypto_final(ctx, digest, 32);
-}
-
-#endif /* CRYPTO LIBS */
-
-const digest_params MD5_DIGEST_PARAMS[] = {
- {
- (Curl_digest_init_func) MD5_Init,
- (Curl_digest_update_func) MD5_Update,
- (Curl_digest_final_func) MD5_Final,
- sizeof(MD5_CTX),
- 16
- }
-};
-
-const digest_params SHA1_DIGEST_PARAMS[] = {
- {
- (Curl_digest_init_func) SHA1_Init,
- (Curl_digest_update_func) SHA1_Update,
- (Curl_digest_final_func) SHA1_Final,
- sizeof(SHA_CTX),
- 20
- }
-};
-
-const digest_params SHA256_DIGEST_PARAMS[] = {
- {
- (Curl_digest_init_func) SHA256_Init,
- (Curl_digest_update_func) SHA256_Update,
- (Curl_digest_final_func) SHA256_Final,
- sizeof(SHA256_CTX),
- 32
- }
-};
-
-static const metalink_digest_def SHA256_DIGEST_DEF[] = {
- {"sha-256", SHA256_DIGEST_PARAMS}
-};
-
-static const metalink_digest_def SHA1_DIGEST_DEF[] = {
- {"sha-1", SHA1_DIGEST_PARAMS}
-};
-
-static const metalink_digest_def MD5_DIGEST_DEF[] = {
- {"md5", MD5_DIGEST_PARAMS}
-};
-
-/*
- * The alias of supported hash functions in the order by preference
- * (basically stronger hash comes first). We included "sha-256" and
- * "sha256". The former is the name defined in the IANA registry named
- * "Hash Function Textual Names". The latter is widely (and
- * historically) used in Metalink version 3.
- */
-static const metalink_digest_alias digest_aliases[] = {
- {"sha-256", SHA256_DIGEST_DEF},
- {"sha256", SHA256_DIGEST_DEF},
- {"sha-1", SHA1_DIGEST_DEF},
- {"sha1", SHA1_DIGEST_DEF},
- {"md5", MD5_DIGEST_DEF},
- {NULL, NULL}
-};
-
-digest_context *Curl_digest_init(const digest_params *dparams)
-{
- digest_context *ctxt;
-
- /* Create digest context */
- ctxt = malloc(sizeof *ctxt);
-
- if(!ctxt)
- return ctxt;
-
- ctxt->digest_hashctx = malloc(dparams->digest_ctxtsize);
-
- if(!ctxt->digest_hashctx) {
- free(ctxt);
- return NULL;
- }
-
- ctxt->digest_hash = dparams;
-
- if(dparams->digest_init(ctxt->digest_hashctx) != 1) {
- free(ctxt);
- return NULL;
- }
-
- return ctxt;
-}
-
-int Curl_digest_update(digest_context *context,
- const unsigned char *data,
- unsigned int len)
-{
- (*context->digest_hash->digest_update)(context->digest_hashctx, data, len);
-
- return 0;
-}
-
-int Curl_digest_final(digest_context *context, unsigned char *result)
-{
- (*context->digest_hash->digest_final)(result, context->digest_hashctx);
-
- free(context->digest_hashctx);
- free(context);
-
- return 0;
-}
-
-static unsigned char hex_to_uint(const char *s)
-{
- int v[2];
- int i;
- for(i = 0; i < 2; ++i) {
- v[i] = Curl_raw_toupper(s[i]);
- if('0' <= v[i] && v[i] <= '9') {
- v[i] -= '0';
- }
- else if('A' <= v[i] && v[i] <= 'Z') {
- v[i] -= 'A'-10;
- }
- }
- return (unsigned char)((v[0] << 4) | v[1]);
-}
-
-/*
- * Check checksum of file denoted by filename. The expected hash value
- * is given in hex_hash which is hex-encoded string.
- *
- * This function returns 1 if it succeeds or one of the following
- * integers:
- *
- * 0:
- * Checksum didn't match.
- * -1:
- * Could not open file; or could not read data from file.
- * -2:
- * Hash algorithm not available.
- */
-static int check_hash(const char *filename,
- const metalink_digest_def *digest_def,
- const unsigned char *digest, FILE *error)
-{
- unsigned char *result;
- digest_context *dctx;
- int check_ok, flags, fd;
-
- flags = O_RDONLY;
-#ifdef O_BINARY
- /* O_BINARY is required in order to avoid binary EOF in text mode */
- flags |= O_BINARY;
-#endif
-
- fd = open(filename, flags);
- if(fd == -1) {
- fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename,
- digest_def->hash_name, strerror(errno));
- return -1;
- }
-
- dctx = Curl_digest_init(digest_def->dparams);
- if(!dctx) {
- fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename,
- digest_def->hash_name, "failed to initialize hash algorithm");
- close(fd);
- return -2;
- }
-
- result = malloc(digest_def->dparams->digest_resultlen);
- while(1) {
- unsigned char buf[4096];
- ssize_t len = read(fd, buf, sizeof(buf));
- if(len == 0) {
- break;
- }
- else if(len == -1) {
- fprintf(error, "Metalink: validating (%s) [%s] FAILED (%s)\n", filename,
- digest_def->hash_name, strerror(errno));
- Curl_digest_final(dctx, result);
- close(fd);
- return -1;
- }
- Curl_digest_update(dctx, buf, (unsigned int)len);
- }
- Curl_digest_final(dctx, result);
- check_ok = memcmp(result, digest,
- digest_def->dparams->digest_resultlen) == 0;
- /* sha*sum style verdict output */
- if(check_ok)
- fprintf(error, "Metalink: validating (%s) [%s] OK\n", filename,
- digest_def->hash_name);
- else
- fprintf(error, "Metalink: validating (%s) [%s] FAILED (digest mismatch)\n",
- filename, digest_def->hash_name);
-
- free(result);
- close(fd);
- return check_ok;
-}
-
-int metalink_check_hash(struct GlobalConfig *config,
- metalinkfile *mlfile,
- const char *filename)
-{
- int rv;
- fprintf(config->errors, "Metalink: validating (%s)...\n", filename);
- if(mlfile->checksum == NULL) {
- fprintf(config->errors,
- "Metalink: validating (%s) FAILED (digest missing)\n", filename);
- return -2;
- }
- rv = check_hash(filename, mlfile->checksum->digest_def,
- mlfile->checksum->digest, config->errors);
- return rv;
-}
-
-static metalink_checksum *new_metalink_checksum_from_hex_digest
-(const metalink_digest_def *digest_def, const char *hex_digest)
-{
- metalink_checksum *chksum;
- unsigned char *digest;
- size_t i;
- size_t len = strlen(hex_digest);
- digest = malloc(len/2);
- for(i = 0; i < len; i += 2) {
- digest[i/2] = hex_to_uint(hex_digest+i);
- }
- chksum = malloc(sizeof(metalink_checksum));
- chksum->digest_def = digest_def;
- chksum->digest = digest;
- return chksum;
-}
-
-static metalink_resource *new_metalink_resource(const char *url)
-{
- metalink_resource *res;
- res = malloc(sizeof(metalink_resource));
- res->next = NULL;
- res->url = strdup(url);
- return res;
-}
-
-/* Returns nonzero if hex_digest is properly formatted; that is each
- letter is in [0-9A-Za-z] and the length of the string equals to the
- result length of digest * 2. */
-static int check_hex_digest(const char *hex_digest,
- const metalink_digest_def *digest_def)
-{
- size_t i;
- for(i = 0; hex_digest[i]; ++i) {
- char c = hex_digest[i];
- if(!(('0' <= c && c <= '9') || ('a' <= c && c <= 'z') ||
- ('A' <= c && c <= 'Z'))) {
- return 0;
- }
- }
- return digest_def->dparams->digest_resultlen * 2 == i;
-}
-
-static metalinkfile *new_metalinkfile(metalink_file_t *fileinfo)
-{
- metalinkfile *f;
- f = (metalinkfile*)malloc(sizeof(metalinkfile));
- f->next = NULL;
- f->filename = strdup(fileinfo->name);
- f->checksum = NULL;
- f->resource = NULL;
- if(fileinfo->checksums) {
- const metalink_digest_alias *digest_alias;
- for(digest_alias = digest_aliases; digest_alias->alias_name;
- ++digest_alias) {
- metalink_checksum_t **p;
- for(p = fileinfo->checksums; *p; ++p) {
- if(Curl_raw_equal(digest_alias->alias_name, (*p)->type) &&
- check_hex_digest((*p)->hash, digest_alias->digest_def)) {
- f->checksum =
- new_metalink_checksum_from_hex_digest(digest_alias->digest_def,
- (*p)->hash);
- break;
- }
- }
- if(f->checksum) {
- break;
- }
- }
- }
- if(fileinfo->resources) {
- metalink_resource_t **p;
- metalink_resource root, *tail;
- root.next = NULL;
- tail = &root;
- for(p = fileinfo->resources; *p; ++p) {
- metalink_resource *res;
- /* Filter by type if it is non-NULL. In Metalink v3, type
- includes the type of the resource. In curl, we are only
- interested in HTTP, HTTPS and FTP. In addition to them,
- Metalink v3 file may contain bittorrent type URL, which
- points to the BitTorrent metainfo file. We ignore it here.
- In Metalink v4, type was deprecated and all
- fileinfo->resources point to the target file. BitTorrent
- metainfo file URL may be appeared in fileinfo->metaurls.
- */
- if((*p)->type == NULL ||
- Curl_raw_equal((*p)->type, "http") ||
- Curl_raw_equal((*p)->type, "https") ||
- Curl_raw_equal((*p)->type, "ftp") ||
- Curl_raw_equal((*p)->type, "ftps")) {
- res = new_metalink_resource((*p)->url);
- tail->next = res;
- tail = res;
- }
- }
- f->resource = root.next;
- }
- return f;
-}
-
-int parse_metalink(struct OperationConfig *config, struct OutStruct *outs,
- const char *metalink_url)
-{
- metalink_error_t r;
- metalink_t* metalink;
- metalink_file_t **files;
- bool warnings = FALSE;
-
- /* metlaink_parse_final deletes outs->metalink_parser */
- r = metalink_parse_final(outs->metalink_parser, NULL, 0, &metalink);
- outs->metalink_parser = NULL;
- if(r != 0) {
- return -1;
- }
- if(metalink->files == NULL) {
- fprintf(config->global->errors, "Metalink: parsing (%s) WARNING "
- "(missing or invalid file name)\n",
- metalink_url);
- metalink_delete(metalink);
- return -1;
- }
- for(files = metalink->files; *files; ++files) {
- struct getout *url;
- /* Skip an entry which has no resource. */
- if(!(*files)->resources) {
- fprintf(config->global->errors, "Metalink: parsing (%s) WARNING "
- "(missing or invalid resource)\n",
- metalink_url, (*files)->name);
- continue;
- }
- if(config->url_get ||
- ((config->url_get = config->url_list) != NULL)) {
- /* there's a node here, if it already is filled-in continue to
- find an "empty" node */
- while(config->url_get && (config->url_get->flags & GETOUT_URL))
- config->url_get = config->url_get->next;
- }
-
- /* now there might or might not be an available node to fill in! */
-
- if(config->url_get)
- /* existing node */
- url = config->url_get;
- else
- /* there was no free node, create one! */
- url = new_getout(config);
-
- if(url) {
- metalinkfile *mlfile;
- mlfile = new_metalinkfile(*files);
- if(!mlfile->checksum) {
- warnings = TRUE;
- fprintf(config->global->errors,
- "Metalink: parsing (%s) WARNING (digest missing)\n",
- metalink_url);
- }
- /* Set name as url */
- GetStr(&url->url, mlfile->filename);
-
- /* set flag metalink here */
- url->flags |= GETOUT_URL | GETOUT_METALINK;
-
- if(config->metalinkfile_list) {
- config->metalinkfile_last->next = mlfile;
- config->metalinkfile_last = mlfile;
- }
- else {
- config->metalinkfile_list = config->metalinkfile_last = mlfile;
- }
- }
- }
- metalink_delete(metalink);
- return (warnings) ? -2 : 0;
-}
-
-size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
- void *userdata)
-{
- struct OutStruct *outs = userdata;
- struct OperationConfig *config = outs->config;
- int rv;
-
- /*
- * Once that libcurl has called back tool_write_cb() the returned value
- * is checked against the amount that was intended to be written, if
- * it does not match then it fails with CURLE_WRITE_ERROR. So at this
- * point returning a value different from sz*nmemb indicates failure.
- */
- const size_t failure = (sz * nmemb) ? 0 : 1;
-
- if(!config)
- return failure;
-
- rv = metalink_parse_update(outs->metalink_parser, buffer, sz *nmemb);
- if(rv == 0)
- return sz * nmemb;
- else {
- fprintf(config->global->errors, "Metalink: parsing FAILED\n");
- return failure;
- }
-}
-
-/*
- * Returns nonzero if content_type includes mediatype.
- */
-static int check_content_type(const char *content_type, const char *media_type)
-{
- const char *ptr = content_type;
- size_t media_type_len = strlen(media_type);
- for(; *ptr && (*ptr == ' ' || *ptr == '\t'); ++ptr);
- if(!*ptr) {
- return 0;
- }
- return Curl_raw_nequal(ptr, media_type, media_type_len) &&
- (*(ptr+media_type_len) == '\0' || *(ptr+media_type_len) == ' ' ||
- *(ptr+media_type_len) == '\t' || *(ptr+media_type_len) == ';');
-}
-
-int check_metalink_content_type(const char *content_type)
-{
- return check_content_type(content_type, "application/metalink+xml");
-}
-
-int count_next_metalink_resource(metalinkfile *mlfile)
-{
- int count = 0;
- metalink_resource *res;
- for(res = mlfile->resource; res; res = res->next, ++count);
- return count;
-}
-
-static void delete_metalink_checksum(metalink_checksum *chksum)
-{
- if(chksum == NULL) {
- return;
- }
- Curl_safefree(chksum->digest);
- Curl_safefree(chksum);
-}
-
-static void delete_metalink_resource(metalink_resource *res)
-{
- if(res == NULL) {
- return;
- }
- Curl_safefree(res->url);
- Curl_safefree(res);
-}
-
-static void delete_metalinkfile(metalinkfile *mlfile)
-{
- metalink_resource *res;
- if(mlfile == NULL) {
- return;
- }
- Curl_safefree(mlfile->filename);
- delete_metalink_checksum(mlfile->checksum);
- for(res = mlfile->resource; res;) {
- metalink_resource *next;
- next = res->next;
- delete_metalink_resource(res);
- res = next;
- }
- Curl_safefree(mlfile);
-}
-
-void clean_metalink(struct OperationConfig *config)
-{
- while(config->metalinkfile_list) {
- metalinkfile *mlfile = config->metalinkfile_list;
- config->metalinkfile_list = config->metalinkfile_list->next;
- delete_metalinkfile(mlfile);
- }
- config->metalinkfile_last = 0;
-}
-
-void metalink_cleanup(void)
-{
-#ifdef USE_NSS
- if(nss_context) {
- NSS_ShutdownContext(nss_context);
- nss_context = NULL;
- }
-#endif
-}
-
-#endif /* USE_METALINK */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_metalink.h b/external/libcurl_android/jni/libcurl/src/tool_metalink.h
deleted file mode 100755
index 36859068..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_metalink.h
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef HEADER_CURL_TOOL_METALINK_H
-#define HEADER_CURL_TOOL_METALINK_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-struct GlobalConfig;
-struct OperationConfig;
-
-/* returns 1 for success, 0 otherwise (we use OpenSSL *_Init fncs directly) */
-typedef int (* Curl_digest_init_func)(void *context);
-
-typedef void (* Curl_digest_update_func)(void *context,
- const unsigned char *data,
- unsigned int len);
-typedef void (* Curl_digest_final_func)(unsigned char *result, void *context);
-
-typedef struct {
- Curl_digest_init_func digest_init; /* Initialize context procedure */
- Curl_digest_update_func digest_update; /* Update context with data */
- Curl_digest_final_func digest_final; /* Get final result procedure */
- unsigned int digest_ctxtsize; /* Context structure size */
- unsigned int digest_resultlen; /* Result length (bytes) */
-} digest_params;
-
-typedef struct {
- const digest_params *digest_hash; /* Hash function definition */
- void *digest_hashctx; /* Hash function context */
-} digest_context;
-
-digest_context * Curl_digest_init(const digest_params *dparams);
-int Curl_digest_update(digest_context *context,
- const unsigned char *data,
- unsigned int len);
-int Curl_digest_final(digest_context *context, unsigned char *result);
-
-typedef struct {
- const char *hash_name;
- const digest_params *dparams;
-} metalink_digest_def;
-
-typedef struct {
- const char *alias_name;
- const metalink_digest_def *digest_def;
-} metalink_digest_alias;
-
-typedef struct metalink_checksum {
- const metalink_digest_def *digest_def;
- /* raw digest value, not ascii hex digest */
- unsigned char *digest;
-} metalink_checksum;
-
-typedef struct metalink_resource {
- struct metalink_resource *next;
- char *url;
-} metalink_resource;
-
-typedef struct metalinkfile {
- struct metalinkfile *next;
- char *filename;
- metalink_checksum *checksum;
- metalink_resource *resource;
-} metalinkfile;
-
-#ifdef USE_METALINK
-
-/*
- * curl requires libmetalink 0.1.0 or newer
- */
-#define CURL_REQ_LIBMETALINK_MAJOR 0
-#define CURL_REQ_LIBMETALINK_MINOR 1
-#define CURL_REQ_LIBMETALINK_PATCH 0
-
-#define CURL_REQ_LIBMETALINK_VERS ((CURL_REQ_LIBMETALINK_MAJOR * 10000) + \
- (CURL_REQ_LIBMETALINK_MINOR * 100) + \
- CURL_REQ_LIBMETALINK_PATCH)
-
-extern const digest_params MD5_DIGEST_PARAMS[1];
-extern const digest_params SHA1_DIGEST_PARAMS[1];
-extern const digest_params SHA256_DIGEST_PARAMS[1];
-
-#include <metalink/metalink.h>
-
-/*
- * Counts the resource in the metalinkfile.
- */
-int count_next_metalink_resource(metalinkfile *mlfile);
-void clean_metalink(struct OperationConfig *config);
-
-/*
- * Performs final parse operation and extracts information from
- * Metalink and creates metalinkfile structs.
- *
- * This function returns 0 if it succeeds without warnings, or one of
- * the following negative error codes:
- *
- * -1: Parsing failed; or no file is found
- * -2: Parsing succeeded with some warnings.
- */
-int parse_metalink(struct OperationConfig *config, struct OutStruct *outs,
- const char *metalink_url);
-
-/*
- * Callback function for CURLOPT_WRITEFUNCTION
- */
-size_t metalink_write_cb(void *buffer, size_t sz, size_t nmemb,
- void *userdata);
-
-/*
- * Returns nonzero if content_type includes "application/metalink+xml"
- * media-type. The check is done in case-insensitive manner.
- */
-int check_metalink_content_type(const char *content_type);
-
-/*
- * Check checksum of file denoted by filename.
- *
- * This function returns 1 if the checksum matches or one of the
- * following integers:
- *
- * 0:
- * Checksum didn't match.
- * -1:
- * Could not open file; or could not read data from file.
- * -2:
- * No checksum in Metalink supported, hash algorithm not available, or
- * Metalink does not contain checksum.
- */
-int metalink_check_hash(struct GlobalConfig *config,
- metalinkfile *mlfile,
- const char *filename);
-
-/*
- * Release resources allocated at global scope.
- */
-void metalink_cleanup(void);
-
-#else /* USE_METALINK */
-
-#define count_next_metalink_resource(x) 0
-#define clean_metalink(x) (void)x
-
-/* metalink_cleanup() takes no arguments */
-#define metalink_cleanup() Curl_nop_stmt
-
-#endif /* USE_METALINK */
-
-#endif /* HEADER_CURL_TOOL_METALINK_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_mfiles.c b/external/libcurl_android/jni/libcurl/src/tool_mfiles.c
deleted file mode 100755
index 3eda45f9..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_mfiles.c
+++ /dev/null
@@ -1,127 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "tool_mfiles.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-static void AppendNode(struct multi_files **first,
- struct multi_files **last,
- struct multi_files *new)
-{
- DEBUGASSERT(((*first) && (*last)) || ((!*first) && (!*last)));
-
- if(*last)
- (*last)->next = new;
- else
- *first = new;
- *last = new;
-}
-
-/*
- * AddMultiFiles: Add a new list node possibly followed with a type_name.
- *
- * multi_first argument is the address of a pointer to the first element
- * of the multi_files linked list. A NULL pointer indicates empty list.
- *
- * multi_last argument is the address of a pointer to the last element
- * of the multi_files linked list. A NULL pointer indicates empty list.
- *
- * Pointers stored in multi_first and multi_last are modified while
- * function is executed. An out of memory condition free's the whole
- * list and returns with pointers stored in multi_first and multi_last
- * set to NULL and a NULL function result.
- *
- * Function returns same pointer as stored at multi_last.
- */
-
-struct multi_files *AddMultiFiles(const char *file_name,
- const char *type_name,
- const char *show_filename,
- struct multi_files **multi_first,
- struct multi_files **multi_last)
-{
- struct multi_files *multi;
- struct multi_files *multi_type;
- struct multi_files *multi_name;
-
- multi = calloc(1, sizeof(struct multi_files));
- if(multi) {
- multi->form.option = CURLFORM_FILE;
- multi->form.value = file_name;
- AppendNode(multi_first, multi_last, multi);
- }
- else {
- FreeMultiInfo(multi_first, multi_last);
- return NULL;
- }
-
- if(type_name) {
- multi_type = calloc(1, sizeof(struct multi_files));
- if(multi_type) {
- multi_type->form.option = CURLFORM_CONTENTTYPE;
- multi_type->form.value = type_name;
- AppendNode(multi_first, multi_last, multi_type);
- }
- else {
- FreeMultiInfo(multi_first, multi_last);
- return NULL;
- }
- }
-
- if(show_filename) {
- multi_name = calloc(1, sizeof(struct multi_files));
- if(multi_name) {
- multi_name->form.option = CURLFORM_FILENAME;
- multi_name->form.value = show_filename;
- AppendNode(multi_first, multi_last, multi_name);
- }
- else {
- FreeMultiInfo(multi_first, multi_last);
- return NULL;
- }
- }
-
- return *multi_last;
-}
-
-/*
- * FreeMultiInfo: Free the items of the list.
- */
-
-void FreeMultiInfo(struct multi_files **multi_first,
- struct multi_files **multi_last)
-{
- struct multi_files *next;
- struct multi_files *item = *multi_first;
-
- while(item) {
- next = item->next;
- Curl_safefree(item);
- item = next;
- }
- *multi_first = NULL;
- if(multi_last)
- *multi_last = NULL;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_mfiles.h b/external/libcurl_android/jni/libcurl/src/tool_mfiles.h
deleted file mode 100755
index 1ea6f4a4..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_mfiles.h
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef HEADER_CURL_TOOL_MFILES_H
-#define HEADER_CURL_TOOL_MFILES_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-/*
- * Structure for storing the information needed to build
- * a multiple files section.
- */
-
-struct multi_files {
- struct curl_forms form;
- struct multi_files *next;
-};
-
-struct multi_files *AddMultiFiles(const char *file_name,
- const char *type_name,
- const char *show_filename,
- struct multi_files **multi_first,
- struct multi_files **multi_last);
-
-void FreeMultiInfo(struct multi_files **multi_first,
- struct multi_files **multi_last);
-
-#endif /* HEADER_CURL_TOOL_MFILES_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_msgs.c b/external/libcurl_android/jni/libcurl/src/tool_msgs.c
deleted file mode 100755
index 3311b55f..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_msgs.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_msgs.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#define WARN_PREFIX "Warning: "
-#define WARN_TEXTWIDTH (79 - (int)strlen(WARN_PREFIX))
-
-/*
- * Emit warning formatted message on configured 'errors' stream unless
- * mute (--silent) was selected.
- */
-
-void warnf(struct OperationConfig *config, const char *fmt, ...)
-{
- if(!config->global->mute) {
- va_list ap;
- int len;
- char *ptr;
- char print_buffer[256];
-
- va_start(ap, fmt);
- len = vsnprintf(print_buffer, sizeof(print_buffer), fmt, ap);
- va_end(ap);
-
- ptr = print_buffer;
- while(len > 0) {
- fputs(WARN_PREFIX, config->global->errors);
-
- if(len > (int)WARN_TEXTWIDTH) {
- int cut = WARN_TEXTWIDTH-1;
-
- while(!ISSPACE(ptr[cut]) && cut) {
- cut--;
- }
- if(0 == cut)
- /* not a single cutting position was found, just cut it at the
- max text width then! */
- cut = WARN_TEXTWIDTH-1;
-
- (void)fwrite(ptr, cut + 1, 1, config->global->errors);
- fputs("\n", config->global->errors);
- ptr += cut+1; /* skip the space too */
- len -= cut;
- }
- else {
- fputs(ptr, config->global->errors);
- len = 0;
- }
- }
- }
-}
-
-/*
- * Emit help formatted message on given stream.
- */
-
-void helpf(FILE *errors, const char *fmt, ...)
-{
- va_list ap;
- if(fmt) {
- va_start(ap, fmt);
- fputs("curl: ", errors); /* prefix it */
- vfprintf(errors, fmt, ap);
- va_end(ap);
- }
- fprintf(errors, "curl: try 'curl --help' "
-#ifdef USE_MANUAL
- "or 'curl --manual' "
-#endif
- "for more information\n");
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_msgs.h b/external/libcurl_android/jni/libcurl/src/tool_msgs.h
deleted file mode 100755
index 15754690..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_msgs.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef HEADER_CURL_TOOL_MSGS_H
-#define HEADER_CURL_TOOL_MSGS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-void warnf(struct OperationConfig *config, const char *fmt, ...);
-
-void helpf(FILE *errors, const char *fmt, ...);
-
-#endif /* HEADER_CURL_TOOL_MSGS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_operate.c b/external/libcurl_android/jni/libcurl/src/tool_operate.c
deleted file mode 100755
index fd2fd6dd..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_operate.c
+++ /dev/null
@@ -1,1858 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
-#ifdef HAVE_UTIME_H
-# include <utime.h>
-#elif defined(HAVE_SYS_UTIME_H)
-# include <sys/utime.h>
-#endif
-
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-
-#ifdef HAVE_NETINET_TCP_H
-# include <netinet/tcp.h>
-#endif
-
-#ifdef __VMS
-# include <fabdef.h>
-#endif
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_binmode.h"
-#include "tool_cfgable.h"
-#include "tool_cb_dbg.h"
-#include "tool_cb_hdr.h"
-#include "tool_cb_prg.h"
-#include "tool_cb_rea.h"
-#include "tool_cb_see.h"
-#include "tool_cb_wrt.h"
-#include "tool_dirhie.h"
-#include "tool_doswin.h"
-#include "tool_easysrc.h"
-#include "tool_getparam.h"
-#include "tool_helpers.h"
-#include "tool_homedir.h"
-#include "tool_libinfo.h"
-#include "tool_main.h"
-#include "tool_metalink.h"
-#include "tool_msgs.h"
-#include "tool_operate.h"
-#include "tool_operhlp.h"
-#include "tool_paramhlp.h"
-#include "tool_parsecfg.h"
-#include "tool_setopt.h"
-#include "tool_sleep.h"
-#include "tool_urlglob.h"
-#include "tool_util.h"
-#include "tool_writeenv.h"
-#include "tool_writeout.h"
-#include "tool_xattr.h"
-#include "tool_vms.h"
-#include "tool_help.h"
-#include "tool_hugehelp.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef CURLDEBUG
-/* libcurl's debug builds provide an extra function */
-CURLcode curl_easy_perform_ev(CURL *easy);
-#endif
-
-#define CURLseparator "--_curl_--"
-
-#ifndef O_BINARY
-/* since O_BINARY as used in bitmasks, setting it to zero makes it usable in
- source code but yet it doesn't ruin anything */
-# define O_BINARY 0
-#endif
-
-#define CURL_CA_CERT_ERRORMSG1 \
- "More details here: http://curl.haxx.se/docs/sslcerts.html\n\n" \
- "curl performs SSL certificate verification by default, " \
- "using a \"bundle\"\n" \
- " of Certificate Authority (CA) public keys (CA certs). If the default\n" \
- " bundle file isn't adequate, you can specify an alternate file\n" \
- " using the --cacert option.\n"
-
-#define CURL_CA_CERT_ERRORMSG2 \
- "If this HTTPS server uses a certificate signed by a CA represented in\n" \
- " the bundle, the certificate verification probably failed due to a\n" \
- " problem with the certificate (it might be expired, or the name might\n" \
- " not match the domain name in the URL).\n" \
- "If you'd like to turn off curl's verification of the certificate, use\n" \
- " the -k (or --insecure) option.\n"
-
-static bool is_fatal_error(CURLcode code)
-{
- switch(code) {
- /* TODO: Should CURLE_SSL_CACERT be included as critical error ? */
- case CURLE_FAILED_INIT:
- case CURLE_OUT_OF_MEMORY:
- case CURLE_UNKNOWN_OPTION:
- case CURLE_FUNCTION_NOT_FOUND:
- case CURLE_BAD_FUNCTION_ARGUMENT:
- /* critical error */
- return TRUE;
- default:
- break;
- }
-
- /* no error or not critical */
- return FALSE;
-}
-
-#ifdef __VMS
-/*
- * get_vms_file_size does what it takes to get the real size of the file
- *
- * For fixed files, find out the size of the EOF block and adjust.
- *
- * For all others, have to read the entire file in, discarding the contents.
- * Most posted text files will be small, and binary files like zlib archives
- * and CD/DVD images should be either a STREAM_LF format or a fixed format.
- *
- */
-static curl_off_t vms_realfilesize(const char * name,
- const struct_stat * stat_buf)
-{
- char buffer[8192];
- curl_off_t count;
- int ret_stat;
- FILE * file;
-
- file = fopen(name, "r");
- if(file == NULL) {
- return 0;
- }
- count = 0;
- ret_stat = 1;
- while(ret_stat > 0) {
- ret_stat = fread(buffer, 1, sizeof(buffer), file);
- if(ret_stat != 0)
- count += ret_stat;
- }
- fclose(file);
-
- return count;
-}
-
-/*
- *
- * VmsSpecialSize checks to see if the stat st_size can be trusted and
- * if not to call a routine to get the correct size.
- *
- */
-static curl_off_t VmsSpecialSize(const char * name,
- const struct_stat * stat_buf)
-{
- switch(stat_buf->st_fab_rfm) {
- case FAB$C_VAR:
- case FAB$C_VFC:
- return vms_realfilesize(name, stat_buf);
- break;
- default:
- return stat_buf->st_size;
- }
-}
-#endif /* __VMS */
-
-static CURLcode operate_do(struct GlobalConfig *global,
- struct OperationConfig *config)
-{
- char errorbuffer[CURL_ERROR_SIZE];
- struct ProgressData progressbar;
- struct getout *urlnode;
-
- struct HdrCbData hdrcbdata;
- struct OutStruct heads;
-
- metalinkfile *mlfile_last = NULL;
-
- CURL *curl = config->easy;
- char *httpgetfields = NULL;
-
- CURLcode res = CURLE_OK;
- unsigned long li;
-
- /* Save the values of noprogress and isatty to restore them later on */
- bool orig_noprogress = global->noprogress;
- bool orig_isatty = global->isatty;
-
- errorbuffer[0] = '\0';
-
- /* default headers output stream is stdout */
- memset(&hdrcbdata, 0, sizeof(struct HdrCbData));
- memset(&heads, 0, sizeof(struct OutStruct));
- heads.stream = stdout;
- heads.config = config;
-
- /*
- ** Beyond this point no return'ing from this function allowed.
- ** Jump to label 'quit_curl' in order to abandon this function
- ** from outside of nested loops further down below.
- */
-
- /* Check we have a url */
- if(!config->url_list || !config->url_list->url) {
- helpf(global->errors, "no URL specified!\n");
- res = CURLE_FAILED_INIT;
- goto quit_curl;
- }
-
- /* On WIN32 we can't set the path to curl-ca-bundle.crt
- * at compile time. So we look here for the file in two ways:
- * 1: look at the environment variable CURL_CA_BUNDLE for a path
- * 2: if #1 isn't found, use the windows API function SearchPath()
- * to find it along the app's path (includes app's dir and CWD)
- *
- * We support the environment variable thing for non-Windows platforms
- * too. Just for the sake of it.
- */
- if(!config->cacert &&
- !config->capath &&
- !config->insecure_ok) {
- char *env;
- env = curlx_getenv("CURL_CA_BUNDLE");
- if(env) {
- config->cacert = strdup(env);
- if(!config->cacert) {
- curl_free(env);
- helpf(global->errors, "out of memory\n");
- res = CURLE_OUT_OF_MEMORY;
- goto quit_curl;
- }
- }
- else {
- env = curlx_getenv("SSL_CERT_DIR");
- if(env) {
- config->capath = strdup(env);
- if(!config->capath) {
- curl_free(env);
- helpf(global->errors, "out of memory\n");
- res = CURLE_OUT_OF_MEMORY;
- goto quit_curl;
- }
- }
- else {
- env = curlx_getenv("SSL_CERT_FILE");
- if(env) {
- config->cacert = strdup(env);
- if(!config->cacert) {
- curl_free(env);
- helpf(global->errors, "out of memory\n");
- res = CURLE_OUT_OF_MEMORY;
- goto quit_curl;
- }
- }
- }
- }
-
- if(env)
- curl_free(env);
-#ifdef WIN32
- else {
- res = FindWin32CACert(config, "curl-ca-bundle.crt");
- if(res)
- goto quit_curl;
- }
-#endif
- }
-
- if(config->postfields) {
- if(config->use_httpget) {
- /* Use the postfields data for a http get */
- httpgetfields = strdup(config->postfields);
- Curl_safefree(config->postfields);
- if(!httpgetfields) {
- helpf(global->errors, "out of memory\n");
- res = CURLE_OUT_OF_MEMORY;
- goto quit_curl;
- }
- if(SetHTTPrequest(config,
- (config->no_body?HTTPREQ_HEAD:HTTPREQ_GET),
- &config->httpreq)) {
- res = CURLE_FAILED_INIT;
- goto quit_curl;
- }
- }
- else {
- if(SetHTTPrequest(config, HTTPREQ_SIMPLEPOST, &config->httpreq)) {
- res = CURLE_FAILED_INIT;
- goto quit_curl;
- }
- }
- }
-
- /* Single header file for all URLs */
- if(config->headerfile) {
- /* open file for output: */
- if(!curlx_strequal(config->headerfile, "-")) {
- FILE *newfile = fopen(config->headerfile, "wb");
- if(!newfile) {
- warnf(config, "Failed to open %s\n", config->headerfile);
- res = CURLE_WRITE_ERROR;
- goto quit_curl;
- }
- else {
- heads.filename = config->headerfile;
- heads.s_isreg = TRUE;
- heads.fopened = TRUE;
- heads.stream = newfile;
- }
- }
- else {
- /* always use binary mode for protocol header output */
- set_binmode(heads.stream);
- }
- }
-
- /*
- ** Nested loops start here.
- */
-
- /* loop through the list of given URLs */
-
- for(urlnode = config->url_list; urlnode; urlnode = urlnode->next) {
-
- unsigned long up; /* upload file counter within a single upload glob */
- char *infiles; /* might be a glob pattern */
- char *outfiles;
- unsigned long infilenum;
- URLGlob *inglob;
-
- int metalink = 0; /* nonzero for metalink download. */
- metalinkfile *mlfile;
- metalink_resource *mlres;
-
- outfiles = NULL;
- infilenum = 1;
- inglob = NULL;
-
- if(urlnode->flags & GETOUT_METALINK) {
- metalink = 1;
- if(mlfile_last == NULL) {
- mlfile_last = config->metalinkfile_list;
- }
- mlfile = mlfile_last;
- mlfile_last = mlfile_last->next;
- mlres = mlfile->resource;
- }
- else {
- mlfile = NULL;
- mlres = NULL;
- }
-
- /* urlnode->url is the full URL (it might be NULL) */
-
- if(!urlnode->url) {
- /* This node has no URL. Free node data without destroying the
- node itself nor modifying next pointer and continue to next */
- Curl_safefree(urlnode->outfile);
- Curl_safefree(urlnode->infile);
- urlnode->flags = 0;
- continue; /* next URL please */
- }
-
- /* save outfile pattern before expansion */
- if(urlnode->outfile) {
- outfiles = strdup(urlnode->outfile);
- if(!outfiles) {
- helpf(global->errors, "out of memory\n");
- res = CURLE_OUT_OF_MEMORY;
- break;
- }
- }
-
- infiles = urlnode->infile;
-
- if(!config->globoff && infiles) {
- /* Unless explicitly shut off */
- res = (CURLcode) glob_url(&inglob, infiles, &infilenum,
- global->showerror?global->errors:NULL);
- if(res) {
- Curl_safefree(outfiles);
- break;
- }
- }
-
- /* Here's the loop for uploading multiple files within the same
- single globbed string. If no upload, we enter the loop once anyway. */
- for(up = 0 ; up < infilenum; up++) {
-
- char *uploadfile; /* a single file, never a glob */
- int separator;
- URLGlob *urls;
- unsigned long urlnum;
-
- uploadfile = NULL;
- urls = NULL;
- urlnum = 0;
-
- if(!up && !infiles)
- Curl_nop_stmt;
- else {
- if(inglob) {
- res = (CURLcode) glob_next_url(&uploadfile, inglob);
- if(res == CURLE_OUT_OF_MEMORY)
- helpf(global->errors, "out of memory\n");
- }
- else if(!up) {
- uploadfile = strdup(infiles);
- if(!uploadfile) {
- helpf(global->errors, "out of memory\n");
- res = CURLE_OUT_OF_MEMORY;
- }
- }
- else
- uploadfile = NULL;
- if(!uploadfile)
- break;
- }
-
- if(metalink) {
- /* For Metalink download, we don't use glob. Instead we use
- the number of resources as urlnum. */
- urlnum = count_next_metalink_resource(mlfile);
- }
- else
- if(!config->globoff) {
- /* Unless explicitly shut off, we expand '{...}' and '[...]'
- expressions and return total number of URLs in pattern set */
- res = (CURLcode) glob_url(&urls, urlnode->url, &urlnum,
- global->showerror?global->errors:NULL);
- if(res) {
- Curl_safefree(uploadfile);
- break;
- }
- }
- else
- urlnum = 1; /* without globbing, this is a single URL */
-
- /* if multiple files extracted to stdout, insert separators! */
- separator= ((!outfiles || curlx_strequal(outfiles, "-")) && urlnum > 1);
-
- /* Here's looping around each globbed URL */
- for(li = 0 ; li < urlnum; li++) {
-
- int infd;
- bool infdopen;
- char *outfile;
- struct OutStruct outs;
- struct InStruct input;
- struct timeval retrystart;
- curl_off_t uploadfilesize;
- long retry_numretries;
- long retry_sleep_default;
- long retry_sleep;
- char *this_url = NULL;
- int metalink_next_res = 0;
-
- outfile = NULL;
- infdopen = FALSE;
- infd = STDIN_FILENO;
- uploadfilesize = -1; /* -1 means unknown */
-
- /* default output stream is stdout */
- memset(&outs, 0, sizeof(struct OutStruct));
- outs.stream = stdout;
- outs.config = config;
-
- if(metalink) {
- /* For Metalink download, use name in Metalink file as
- filename. */
- outfile = strdup(mlfile->filename);
- if(!outfile) {
- res = CURLE_OUT_OF_MEMORY;
- goto show_error;
- }
- this_url = strdup(mlres->url);
- if(!this_url) {
- res = CURLE_OUT_OF_MEMORY;
- goto show_error;
- }
- }
- else {
- if(urls) {
- res = (CURLcode) glob_next_url(&this_url, urls);
- if(res)
- goto show_error;
- }
- else if(!li) {
- this_url = strdup(urlnode->url);
- if(!this_url) {
- res = CURLE_OUT_OF_MEMORY;
- goto show_error;
- }
- }
- else
- this_url = NULL;
- if(!this_url)
- break;
-
- if(outfiles) {
- outfile = strdup(outfiles);
- if(!outfile) {
- res = CURLE_OUT_OF_MEMORY;
- goto show_error;
- }
- }
- }
-
- if(((urlnode->flags&GETOUT_USEREMOTE) ||
- (outfile && !curlx_strequal("-", outfile))) &&
- (metalink || !config->use_metalink)) {
-
- /*
- * We have specified a file name to store the result in, or we have
- * decided we want to use the remote file name.
- */
-
- if(!outfile) {
- /* extract the file name from the URL */
- res = get_url_file_name(&outfile, this_url);
- if(res)
- goto show_error;
- if((!outfile || !*outfile) && !config->content_disposition) {
- helpf(global->errors, "Remote file name has no length!\n");
- res = CURLE_WRITE_ERROR;
- goto quit_urls;
- }
-#if defined(MSDOS) || defined(WIN32)
- /* For DOS and WIN32, we do some major replacing of
- bad characters in the file name before using it */
- outfile = sanitize_dos_name(outfile);
- if(!outfile) {
- res = CURLE_OUT_OF_MEMORY;
- goto show_error;
- }
-#endif /* MSDOS || WIN32 */
- }
- else if(urls) {
- /* fill '#1' ... '#9' terms from URL pattern */
- char *storefile = outfile;
- res = (CURLcode) glob_match_url(&outfile, storefile, urls);
- Curl_safefree(storefile);
- if(res) {
- /* bad globbing */
- warnf(config, "bad output glob!\n");
- goto quit_urls;
- }
- }
-
- /* Create the directory hierarchy, if not pre-existent to a multiple
- file output call */
-
- if(config->create_dirs || metalink) {
- res = create_dir_hierarchy(outfile, global->errors);
- /* create_dir_hierarchy shows error upon CURLE_WRITE_ERROR */
- if(res == CURLE_WRITE_ERROR)
- goto quit_urls;
- if(res) {
- goto show_error;
- }
- }
-
- if((urlnode->flags & GETOUT_USEREMOTE)
- && config->content_disposition) {
- /* Our header callback MIGHT set the filename */
- DEBUGASSERT(!outs.filename);
- }
-
- if(config->resume_from_current) {
- /* We're told to continue from where we are now. Get the size
- of the file as it is now and open it for append instead */
- struct_stat fileinfo;
- /* VMS -- Danger, the filesize is only valid for stream files */
- if(0 == stat(outfile, &fileinfo))
- /* set offset to current file size: */
- config->resume_from = fileinfo.st_size;
- else
- /* let offset be 0 */
- config->resume_from = 0;
- }
-
- if(config->resume_from) {
-#ifdef __VMS
- /* open file for output, forcing VMS output format into stream
- mode which is needed for stat() call above to always work. */
- FILE *file = fopen(outfile, config->resume_from?"ab":"wb",
- "ctx=stm", "rfm=stmlf", "rat=cr", "mrs=0");
-#else
- /* open file for output: */
- FILE *file = fopen(outfile, config->resume_from?"ab":"wb");
-#endif
- if(!file) {
- helpf(global->errors, "Can't open '%s'!\n", outfile);
- res = CURLE_WRITE_ERROR;
- goto quit_urls;
- }
- outs.fopened = TRUE;
- outs.stream = file;
- outs.init = config->resume_from;
- }
- else {
- outs.stream = NULL; /* open when needed */
- }
- outs.filename = outfile;
- outs.s_isreg = TRUE;
- }
-
- if(uploadfile && !stdin_upload(uploadfile)) {
- /*
- * We have specified a file to upload and it isn't "-".
- */
- struct_stat fileinfo;
-
- this_url = add_file_name_to_url(curl, this_url, uploadfile);
- if(!this_url) {
- res = CURLE_OUT_OF_MEMORY;
- goto show_error;
- }
- /* VMS Note:
- *
- * Reading binary from files can be a problem... Only FIXED, VAR
- * etc WITHOUT implied CC will work Others need a \n appended to a
- * line
- *
- * - Stat gives a size but this is UNRELIABLE in VMS As a f.e. a
- * fixed file with implied CC needs to have a byte added for every
- * record processed, this can by derived from Filesize & recordsize
- * for VARiable record files the records need to be counted! for
- * every record add 1 for linefeed and subtract 2 for the record
- * header for VARIABLE header files only the bare record data needs
- * to be considered with one appended if implied CC
- */
-#ifdef __VMS
- /* Calculate the real upload site for VMS */
- infd = -1;
- if(stat(uploadfile, &fileinfo) == 0) {
- fileinfo.st_size = VmsSpecialSize(uploadfile, &fileinfo);
- switch (fileinfo.st_fab_rfm) {
- case FAB$C_VAR:
- case FAB$C_VFC:
- case FAB$C_STMCR:
- infd = open(uploadfile, O_RDONLY | O_BINARY);
- break;
- default:
- infd = open(uploadfile, O_RDONLY | O_BINARY,
- "rfm=stmlf", "ctx=stm");
- }
- }
- if(infd == -1)
-#else
- infd = open(uploadfile, O_RDONLY | O_BINARY);
- if((infd == -1) || fstat(infd, &fileinfo))
-#endif
- {
- helpf(global->errors, "Can't open '%s'!\n", uploadfile);
- if(infd != -1) {
- close(infd);
- infd = STDIN_FILENO;
- }
- res = CURLE_READ_ERROR;
- goto quit_urls;
- }
- infdopen = TRUE;
-
- /* we ignore file size for char/block devices, sockets, etc. */
- if(S_ISREG(fileinfo.st_mode))
- uploadfilesize = fileinfo.st_size;
-
- }
- else if(uploadfile && stdin_upload(uploadfile)) {
- /* count to see if there are more than one auth bit set
- in the authtype field */
- int authbits = 0;
- int bitcheck = 0;
- while(bitcheck < 32) {
- if(config->authtype & (1UL << bitcheck++)) {
- authbits++;
- if(authbits > 1) {
- /* more than one, we're done! */
- break;
- }
- }
- }
-
- /*
- * If the user has also selected --anyauth or --proxy-anyauth
- * we should warn him/her.
- */
- if(config->proxyanyauth || (authbits>1)) {
- warnf(config,
- "Using --anyauth or --proxy-anyauth with upload from stdin"
- " involves a big risk of it not working. Use a temporary"
- " file or a fixed auth type instead!\n");
- }
-
- DEBUGASSERT(infdopen == FALSE);
- DEBUGASSERT(infd == STDIN_FILENO);
-
- set_binmode(stdin);
- if(curlx_strequal(uploadfile, ".")) {
- if(curlx_nonblock((curl_socket_t)infd, TRUE) < 0)
- warnf(config,
- "fcntl failed on fd=%d: %s\n", infd, strerror(errno));
- }
- }
-
- if(uploadfile && config->resume_from_current)
- config->resume_from = -1; /* -1 will then force get-it-yourself */
-
- if(output_expected(this_url, uploadfile) && outs.stream &&
- isatty(fileno(outs.stream)))
- /* we send the output to a tty, therefore we switch off the progress
- meter */
- global->noprogress = global->isatty = TRUE;
- else {
- /* progress meter is per download, so restore config
- values */
- global->noprogress = orig_noprogress;
- global->isatty = orig_isatty;
- }
-
- if(urlnum > 1 && !global->mute) {
- fprintf(global->errors, "\n[%lu/%lu]: %s --> %s\n",
- li+1, urlnum, this_url, outfile ? outfile : "<stdout>");
- if(separator)
- printf("%s%s\n", CURLseparator, this_url);
- }
- if(httpgetfields) {
- char *urlbuffer;
- /* Find out whether the url contains a file name */
- const char *pc = strstr(this_url, "://");
- char sep = '?';
- if(pc)
- pc += 3;
- else
- pc = this_url;
-
- pc = strrchr(pc, '/'); /* check for a slash */
-
- if(pc) {
- /* there is a slash present in the URL */
-
- if(strchr(pc, '?'))
- /* Ouch, there's already a question mark in the URL string, we
- then append the data with an ampersand separator instead! */
- sep='&';
- }
- /*
- * Then append ? followed by the get fields to the url.
- */
- if(pc)
- urlbuffer = aprintf("%s%c%s", this_url, sep, httpgetfields);
- else
- /* Append / before the ? to create a well-formed url
- if the url contains a hostname only
- */
- urlbuffer = aprintf("%s/?%s", this_url, httpgetfields);
-
- if(!urlbuffer) {
- res = CURLE_OUT_OF_MEMORY;
- goto show_error;
- }
-
- Curl_safefree(this_url); /* free previous URL */
- this_url = urlbuffer; /* use our new URL instead! */
- }
-
- if(!global->errors)
- global->errors = stderr;
-
- if((!outfile || !strcmp(outfile, "-")) && !config->use_ascii) {
- /* We get the output to stdout and we have not got the ASCII/text
- flag, then set stdout to be binary */
- set_binmode(stdout);
- }
-
- if(config->tcp_nodelay)
- my_setopt(curl, CURLOPT_TCP_NODELAY, 1L);
-
- /* where to store */
- my_setopt(curl, CURLOPT_WRITEDATA, &outs);
- if(metalink || !config->use_metalink)
- /* what call to write */
- my_setopt(curl, CURLOPT_WRITEFUNCTION, tool_write_cb);
-#ifdef USE_METALINK
- else
- /* Set Metalink specific write callback function to parse
- XML data progressively. */
- my_setopt(curl, CURLOPT_WRITEFUNCTION, metalink_write_cb);
-#endif /* USE_METALINK */
-
- /* for uploads */
- input.fd = infd;
- input.config = config;
- /* Note that if CURLOPT_READFUNCTION is fread (the default), then
- * lib/telnet.c will Curl_poll() on the input file descriptor
- * rather then calling the READFUNCTION at regular intervals.
- * The circumstances in which it is preferable to enable this
- * behaviour, by omitting to set the READFUNCTION & READDATA options,
- * have not been determined.
- */
- my_setopt(curl, CURLOPT_READDATA, &input);
- /* what call to read */
- my_setopt(curl, CURLOPT_READFUNCTION, tool_read_cb);
-
- /* in 7.18.0, the CURLOPT_SEEKFUNCTION/DATA pair is taking over what
- CURLOPT_IOCTLFUNCTION/DATA pair previously provided for seeking */
- my_setopt(curl, CURLOPT_SEEKDATA, &input);
- my_setopt(curl, CURLOPT_SEEKFUNCTION, tool_seek_cb);
-
- if(config->recvpersecond)
- /* tell libcurl to use a smaller sized buffer as it allows us to
- make better sleeps! 7.9.9 stuff! */
- my_setopt(curl, CURLOPT_BUFFERSIZE, (long)config->recvpersecond);
-
- /* size of uploaded file: */
- if(uploadfilesize != -1)
- my_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadfilesize);
- my_setopt_str(curl, CURLOPT_URL, this_url); /* what to fetch */
- my_setopt(curl, CURLOPT_NOPROGRESS, global->noprogress?1L:0L);
- if(config->no_body) {
- my_setopt(curl, CURLOPT_NOBODY, 1L);
- my_setopt(curl, CURLOPT_HEADER, 1L);
- }
- /* If --metalink is used, we ignore --include (headers in
- output) option because mixing headers to the body will
- confuse XML parser and/or hash check will fail. */
- else if(!config->use_metalink)
- my_setopt(curl, CURLOPT_HEADER, config->include_headers?1L:0L);
-
- if(config->xoauth2_bearer)
- my_setopt_str(curl, CURLOPT_XOAUTH2_BEARER, config->xoauth2_bearer);
-
-#if !defined(CURL_DISABLE_PROXY)
- {
- /* TODO: Make this a run-time check instead of compile-time one. */
-
- my_setopt_str(curl, CURLOPT_PROXY, config->proxy);
- my_setopt_str(curl, CURLOPT_PROXYUSERPWD, config->proxyuserpwd);
-
- /* new in libcurl 7.3 */
- my_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, config->proxytunnel?1L:0L);
-
- /* new in libcurl 7.5 */
- if(config->proxy)
- my_setopt_enum(curl, CURLOPT_PROXYTYPE, (long)config->proxyver);
-
- /* new in libcurl 7.10 */
- if(config->socksproxy) {
- my_setopt_str(curl, CURLOPT_PROXY, config->socksproxy);
- my_setopt_enum(curl, CURLOPT_PROXYTYPE, (long)config->socksver);
- }
-
- /* new in libcurl 7.10.6 */
- if(config->proxyanyauth)
- my_setopt_bitmask(curl, CURLOPT_PROXYAUTH,
- (long)CURLAUTH_ANY);
- else if(config->proxynegotiate)
- my_setopt_bitmask(curl, CURLOPT_PROXYAUTH,
- (long)CURLAUTH_GSSNEGOTIATE);
- else if(config->proxyntlm)
- my_setopt_bitmask(curl, CURLOPT_PROXYAUTH,
- (long)CURLAUTH_NTLM);
- else if(config->proxydigest)
- my_setopt_bitmask(curl, CURLOPT_PROXYAUTH,
- (long)CURLAUTH_DIGEST);
- else if(config->proxybasic)
- my_setopt_bitmask(curl, CURLOPT_PROXYAUTH,
- (long)CURLAUTH_BASIC);
-
- /* new in libcurl 7.19.4 */
- my_setopt(curl, CURLOPT_NOPROXY, config->noproxy);
- }
-#endif
-
- my_setopt(curl, CURLOPT_FAILONERROR, config->failonerror?1L:0L);
- my_setopt(curl, CURLOPT_UPLOAD, uploadfile?1L:0L);
- my_setopt(curl, CURLOPT_DIRLISTONLY, config->dirlistonly?1L:0L);
- my_setopt(curl, CURLOPT_APPEND, config->ftp_append?1L:0L);
-
- if(config->netrc_opt)
- my_setopt_enum(curl, CURLOPT_NETRC, (long)CURL_NETRC_OPTIONAL);
- else if(config->netrc || config->netrc_file)
- my_setopt_enum(curl, CURLOPT_NETRC, (long)CURL_NETRC_REQUIRED);
- else
- my_setopt_enum(curl, CURLOPT_NETRC, (long)CURL_NETRC_IGNORED);
-
- if(config->netrc_file)
- my_setopt(curl, CURLOPT_NETRC_FILE, config->netrc_file);
-
- my_setopt(curl, CURLOPT_TRANSFERTEXT, config->use_ascii?1L:0L);
- if(config->login_options)
- my_setopt_str(curl, CURLOPT_LOGIN_OPTIONS, config->login_options);
- my_setopt_str(curl, CURLOPT_USERPWD, config->userpwd);
- my_setopt_str(curl, CURLOPT_RANGE, config->range);
- my_setopt(curl, CURLOPT_ERRORBUFFER, errorbuffer);
- my_setopt(curl, CURLOPT_TIMEOUT_MS, (long)(config->timeout * 1000));
-
- if(built_in_protos & CURLPROTO_HTTP) {
-
- long postRedir = 0;
-
- my_setopt(curl, CURLOPT_FOLLOWLOCATION,
- config->followlocation?1L:0L);
- my_setopt(curl, CURLOPT_UNRESTRICTED_AUTH,
- config->unrestricted_auth?1L:0L);
-
- switch(config->httpreq) {
- case HTTPREQ_SIMPLEPOST:
- my_setopt_str(curl, CURLOPT_POSTFIELDS,
- config->postfields);
- my_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE,
- config->postfieldsize);
- break;
- case HTTPREQ_POST:
- my_setopt_httppost(curl, CURLOPT_HTTPPOST, config->httppost);
- break;
- default:
- break;
- }
-
- my_setopt_str(curl, CURLOPT_REFERER, config->referer);
- my_setopt(curl, CURLOPT_AUTOREFERER, config->autoreferer?1L:0L);
- my_setopt_str(curl, CURLOPT_USERAGENT, config->useragent);
- my_setopt_slist(curl, CURLOPT_HTTPHEADER, config->headers);
-
- /* new in libcurl 7.36.0 */
- if(config->proxyheaders) {
- my_setopt_slist(curl, CURLOPT_PROXYHEADER, config->proxyheaders);
- my_setopt(curl, CURLOPT_HEADEROPT, CURLHEADER_SEPARATE);
- }
-
- /* new in libcurl 7.5 */
- my_setopt(curl, CURLOPT_MAXREDIRS, config->maxredirs);
-
- /* new in libcurl 7.9.1 */
- if(config->httpversion)
- my_setopt_enum(curl, CURLOPT_HTTP_VERSION, config->httpversion);
-
- /* new in libcurl 7.10.6 (default is Basic) */
- if(config->authtype)
- my_setopt_bitmask(curl, CURLOPT_HTTPAUTH, (long)config->authtype);
-
- /* curl 7.19.1 (the 301 version existed in 7.18.2),
- 303 was added in 7.26.0 */
- if(config->post301)
- postRedir |= CURL_REDIR_POST_301;
- if(config->post302)
- postRedir |= CURL_REDIR_POST_302;
- if(config->post303)
- postRedir |= CURL_REDIR_POST_303;
- my_setopt(curl, CURLOPT_POSTREDIR, postRedir);
-
- /* new in libcurl 7.21.6 */
- if(config->encoding)
- my_setopt_str(curl, CURLOPT_ACCEPT_ENCODING, "");
-
- /* new in libcurl 7.21.6 */
- if(config->tr_encoding)
- my_setopt(curl, CURLOPT_TRANSFER_ENCODING, 1L);
-
- } /* (built_in_protos & CURLPROTO_HTTP) */
-
- my_setopt_str(curl, CURLOPT_FTPPORT, config->ftpport);
- my_setopt(curl, CURLOPT_LOW_SPEED_LIMIT,
- config->low_speed_limit);
- my_setopt(curl, CURLOPT_LOW_SPEED_TIME, config->low_speed_time);
- my_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE,
- config->sendpersecond);
- my_setopt(curl, CURLOPT_MAX_RECV_SPEED_LARGE,
- config->recvpersecond);
-
- if(config->use_resume)
- my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, config->resume_from);
- else
- my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, CURL_OFF_T_C(0));
-
- my_setopt_str(curl, CURLOPT_SSLCERT, config->cert);
- my_setopt_str(curl, CURLOPT_SSLCERTTYPE, config->cert_type);
- my_setopt_str(curl, CURLOPT_SSLKEY, config->key);
- my_setopt_str(curl, CURLOPT_SSLKEYTYPE, config->key_type);
- my_setopt_str(curl, CURLOPT_KEYPASSWD, config->key_passwd);
-
- if(built_in_protos & (CURLPROTO_SCP|CURLPROTO_SFTP)) {
-
- /* SSH and SSL private key uses same command-line option */
- /* new in libcurl 7.16.1 */
- my_setopt_str(curl, CURLOPT_SSH_PRIVATE_KEYFILE, config->key);
- /* new in libcurl 7.16.1 */
- my_setopt_str(curl, CURLOPT_SSH_PUBLIC_KEYFILE, config->pubkey);
-
- /* new in libcurl 7.17.1: SSH host key md5 checking allows us
- to fail if we are not talking to who we think we should */
- my_setopt_str(curl, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
- config->hostpubmd5);
- }
-
- if(config->cacert)
- my_setopt_str(curl, CURLOPT_CAINFO, config->cacert);
- if(config->capath)
- my_setopt_str(curl, CURLOPT_CAPATH, config->capath);
- if(config->crlfile)
- my_setopt_str(curl, CURLOPT_CRLFILE, config->crlfile);
-
- if(curlinfo->features & CURL_VERSION_SSL) {
- if(config->insecure_ok) {
- my_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
- my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
- }
- else {
- my_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
- /* libcurl default is strict verifyhost -> 2L */
- /* my_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L); */
- }
- }
-
- if(built_in_protos & (CURLPROTO_SCP|CURLPROTO_SFTP)) {
- if(!config->insecure_ok) {
- char *home;
- char *file;
- res = CURLE_OUT_OF_MEMORY;
- home = homedir();
- if(home) {
- file = aprintf("%s/%sssh/known_hosts", home, DOT_CHAR);
- if(file) {
- /* new in curl 7.19.6 */
- res = res_setopt_str(curl, CURLOPT_SSH_KNOWNHOSTS, file);
- curl_free(file);
- if(res == CURLE_UNKNOWN_OPTION)
- /* libssh2 version older than 1.1.1 */
- res = CURLE_OK;
- }
- Curl_safefree(home);
- }
- if(res)
- goto show_error;
- }
- }
-
- if(config->no_body || config->remote_time) {
- /* no body or use remote time */
- my_setopt(curl, CURLOPT_FILETIME, 1L);
- }
-
- my_setopt(curl, CURLOPT_CRLF, config->crlf?1L:0L);
- my_setopt_slist(curl, CURLOPT_QUOTE, config->quote);
- my_setopt_slist(curl, CURLOPT_POSTQUOTE, config->postquote);
- my_setopt_slist(curl, CURLOPT_PREQUOTE, config->prequote);
-
-#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES)
- if(config->cookie)
- my_setopt_str(curl, CURLOPT_COOKIE, config->cookie);
-
- if(config->cookiefile)
- my_setopt_str(curl, CURLOPT_COOKIEFILE, config->cookiefile);
-
- /* new in libcurl 7.9 */
- if(config->cookiejar)
- my_setopt_str(curl, CURLOPT_COOKIEJAR, config->cookiejar);
-
- /* new in libcurl 7.9.7 */
- my_setopt(curl, CURLOPT_COOKIESESSION, config->cookiesession?1L:0L);
-#else
- if(config->cookie || config->cookiefile || config->cookiejar) {
- warnf(config, "cookie option(s) used even though cookie support "
- "is disabled!\n");
- return CURLE_NOT_BUILT_IN;
- }
-#endif
-
- my_setopt_enum(curl, CURLOPT_SSLVERSION, config->ssl_version);
- my_setopt_enum(curl, CURLOPT_TIMECONDITION, (long)config->timecond);
- my_setopt(curl, CURLOPT_TIMEVALUE, (long)config->condtime);
- my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest);
- my_setopt(curl, CURLOPT_STDERR, global->errors);
-
- /* three new ones in libcurl 7.3: */
- my_setopt_str(curl, CURLOPT_INTERFACE, config->iface);
- my_setopt_str(curl, CURLOPT_KRBLEVEL, config->krblevel);
-
- progressbarinit(&progressbar, config);
- if((global->progressmode == CURL_PROGRESS_BAR) &&
- !global->noprogress && !global->mute) {
- /* we want the alternative style, then we have to implement it
- ourselves! */
- my_setopt(curl, CURLOPT_XFERINFOFUNCTION, tool_progress_cb);
- my_setopt(curl, CURLOPT_XFERINFODATA, &progressbar);
- }
-
- /* new in libcurl 7.24.0: */
- if(config->dns_servers)
- my_setopt_str(curl, CURLOPT_DNS_SERVERS, config->dns_servers);
-
- /* new in libcurl 7.33.0: */
- if(config->dns_interface)
- my_setopt_str(curl, CURLOPT_DNS_INTERFACE, config->dns_interface);
- if(config->dns_ipv4_addr)
- my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP4, config->dns_ipv4_addr);
- if(config->dns_ipv6_addr)
- my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP6, config->dns_ipv6_addr);
-
- /* new in libcurl 7.6.2: */
- my_setopt_slist(curl, CURLOPT_TELNETOPTIONS, config->telnet_options);
-
- /* new in libcurl 7.7: */
- my_setopt_str(curl, CURLOPT_RANDOM_FILE, config->random_file);
- my_setopt_str(curl, CURLOPT_EGDSOCKET, config->egd_file);
- my_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS,
- (long)(config->connecttimeout * 1000));
-
- if(config->cipher_list)
- my_setopt_str(curl, CURLOPT_SSL_CIPHER_LIST, config->cipher_list);
-
- /* new in libcurl 7.9.2: */
- if(config->disable_epsv)
- /* disable it */
- my_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L);
-
- /* new in libcurl 7.10.5 */
- if(config->disable_eprt)
- /* disable it */
- my_setopt(curl, CURLOPT_FTP_USE_EPRT, 0L);
-
- if(global->tracetype != TRACE_NONE) {
- my_setopt(curl, CURLOPT_DEBUGFUNCTION, tool_debug_cb);
- my_setopt(curl, CURLOPT_DEBUGDATA, config);
- my_setopt(curl, CURLOPT_VERBOSE, 1L);
- }
-
- /* new in curl 7.9.3 */
- if(config->engine) {
- res = res_setopt_str(curl, CURLOPT_SSLENGINE, config->engine);
- if(res)
- goto show_error;
- my_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1L);
- }
-
- /* new in curl 7.10.7, extended in 7.19.4 but this only sets 0 or 1 */
- my_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS,
- config->ftp_create_dirs?1L:0L);
-
- /* new in curl 7.10.8 */
- if(config->max_filesize)
- my_setopt(curl, CURLOPT_MAXFILESIZE_LARGE,
- config->max_filesize);
-
- if(4 == config->ip_version)
- my_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
- else if(6 == config->ip_version)
- my_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
- else
- my_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_WHATEVER);
-
- /* new in curl 7.15.5 */
- if(config->ftp_ssl_reqd)
- my_setopt_enum(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
-
- /* new in curl 7.11.0 */
- else if(config->ftp_ssl)
- my_setopt_enum(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_TRY);
-
- /* new in curl 7.16.0 */
- else if(config->ftp_ssl_control)
- my_setopt_enum(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_CONTROL);
-
- /* new in curl 7.16.1 */
- if(config->ftp_ssl_ccc)
- my_setopt_enum(curl, CURLOPT_FTP_SSL_CCC,
- (long)config->ftp_ssl_ccc_mode);
-
-#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
- {
- /* TODO: Make this a run-time check instead of compile-time one. */
-
- /* new in curl 7.19.4 */
- if(config->socks5_gssapi_service)
- my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_SERVICE,
- config->socks5_gssapi_service);
-
- /* new in curl 7.19.4 */
- if(config->socks5_gssapi_nec)
- my_setopt_str(curl, CURLOPT_SOCKS5_GSSAPI_NEC,
- config->socks5_gssapi_nec);
- }
-#endif
- /* curl 7.13.0 */
- my_setopt_str(curl, CURLOPT_FTP_ACCOUNT, config->ftp_account);
-
- my_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, config->ignorecl?1L:0L);
-
- /* curl 7.14.2 */
- my_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, config->ftp_skip_ip?1L:0L);
-
- /* curl 7.15.1 */
- my_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long)config->ftp_filemethod);
-
- /* curl 7.15.2 */
- if(config->localport) {
- my_setopt(curl, CURLOPT_LOCALPORT, (long)config->localport);
- my_setopt_str(curl, CURLOPT_LOCALPORTRANGE,
- (long)config->localportrange);
- }
-
- /* curl 7.15.5 */
- my_setopt_str(curl, CURLOPT_FTP_ALTERNATIVE_TO_USER,
- config->ftp_alternative_to_user);
-
- /* curl 7.16.0 */
- if(config->disable_sessionid)
- /* disable it */
- my_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, 0L);
-
- /* curl 7.16.2 */
- if(config->raw) {
- my_setopt(curl, CURLOPT_HTTP_CONTENT_DECODING, 0L);
- my_setopt(curl, CURLOPT_HTTP_TRANSFER_DECODING, 0L);
- }
-
- /* curl 7.17.1 */
- if(!config->nokeepalive) {
- my_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
- if(config->alivetime != 0) {
-#if !defined(TCP_KEEPIDLE) || !defined(TCP_KEEPINTVL)
- warnf(config, "Keep-alive functionality somewhat crippled due to "
- "missing support in your operating system!\n");
-#endif
- my_setopt(curl, CURLOPT_TCP_KEEPIDLE, config->alivetime);
- my_setopt(curl, CURLOPT_TCP_KEEPINTVL, config->alivetime);
- }
- }
- else
- my_setopt(curl, CURLOPT_TCP_KEEPALIVE, 0L);
-
- /* curl 7.20.0 */
- if(config->tftp_blksize)
- my_setopt(curl, CURLOPT_TFTP_BLKSIZE, config->tftp_blksize);
-
- if(config->mail_from)
- my_setopt_str(curl, CURLOPT_MAIL_FROM, config->mail_from);
-
- if(config->mail_rcpt)
- my_setopt_slist(curl, CURLOPT_MAIL_RCPT, config->mail_rcpt);
-
- /* curl 7.20.x */
- if(config->ftp_pret)
- my_setopt(curl, CURLOPT_FTP_USE_PRET, 1L);
-
- if(config->proto_present)
- my_setopt_flags(curl, CURLOPT_PROTOCOLS, config->proto);
- if(config->proto_redir_present)
- my_setopt_flags(curl, CURLOPT_REDIR_PROTOCOLS, config->proto_redir);
-
- if(config->content_disposition
- && (urlnode->flags & GETOUT_USEREMOTE)
- && (checkprefix("http://", this_url) ||
- checkprefix("https://", this_url)))
- hdrcbdata.honor_cd_filename = TRUE;
- else
- hdrcbdata.honor_cd_filename = FALSE;
-
- hdrcbdata.outs = &outs;
- hdrcbdata.heads = &heads;
-
- my_setopt(curl, CURLOPT_HEADERFUNCTION, tool_header_cb);
- my_setopt(curl, CURLOPT_HEADERDATA, &hdrcbdata);
-
- if(config->resolve)
- /* new in 7.21.3 */
- my_setopt_slist(curl, CURLOPT_RESOLVE, config->resolve);
-
- /* new in 7.21.4 */
- if(curlinfo->features & CURL_VERSION_TLSAUTH_SRP) {
- if(config->tls_username)
- my_setopt_str(curl, CURLOPT_TLSAUTH_USERNAME,
- config->tls_username);
- if(config->tls_password)
- my_setopt_str(curl, CURLOPT_TLSAUTH_PASSWORD,
- config->tls_password);
- if(config->tls_authtype)
- my_setopt_str(curl, CURLOPT_TLSAUTH_TYPE,
- config->tls_authtype);
- }
-
- /* new in 7.22.0 */
- if(config->gssapi_delegation)
- my_setopt_str(curl, CURLOPT_GSSAPI_DELEGATION,
- config->gssapi_delegation);
-
- /* new in 7.25.0 */
- if(config->ssl_allow_beast)
- my_setopt(curl, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_ALLOW_BEAST);
-
- if(config->mail_auth)
- my_setopt_str(curl, CURLOPT_MAIL_AUTH, config->mail_auth);
-
- /* new in 7.31.0 */
- if(config->sasl_ir)
- my_setopt(curl, CURLOPT_SASL_IR, 1L);
-
- if(config->nonpn) {
- my_setopt(curl, CURLOPT_SSL_ENABLE_NPN, 0L);
- }
-
- if(config->noalpn) {
- my_setopt(curl, CURLOPT_SSL_ENABLE_ALPN, 0L);
- }
-
- /* initialize retry vars for loop below */
- retry_sleep_default = (config->retry_delay) ?
- config->retry_delay*1000L : RETRY_SLEEP_DEFAULT; /* ms */
-
- retry_numretries = config->req_retry;
- retry_sleep = retry_sleep_default; /* ms */
- retrystart = tvnow();
-
-#ifndef CURL_DISABLE_LIBCURL_OPTION
- res = easysrc_perform();
- if(res) {
- goto show_error;
- }
-#endif
-
- for(;;) {
-#ifdef USE_METALINK
- if(!metalink && config->use_metalink) {
- /* If outs.metalink_parser is non-NULL, delete it first. */
- if(outs.metalink_parser)
- metalink_parser_context_delete(outs.metalink_parser);
- outs.metalink_parser = metalink_parser_context_new();
- if(outs.metalink_parser == NULL) {
- res = CURLE_OUT_OF_MEMORY;
- goto show_error;
- }
- fprintf(config->global->errors,
- "Metalink: parsing (%s) metalink/XML...\n", this_url);
- }
- else if(metalink)
- fprintf(config->global->errors,
- "Metalink: fetching (%s) from (%s)...\n",
- mlfile->filename, this_url);
-#endif /* USE_METALINK */
-
-#ifdef CURLDEBUG
- if(config->test_event_based)
- res = curl_easy_perform_ev(curl);
- else
-#endif
- res = curl_easy_perform(curl);
-
- if(outs.is_cd_filename && outs.stream && !global->mute &&
- outs.filename)
- printf("curl: Saved to filename '%s'\n", outs.filename);
-
- /* if retry-max-time is non-zero, make sure we haven't exceeded the
- time */
- if(retry_numretries &&
- (!config->retry_maxtime ||
- (tvdiff(tvnow(), retrystart) <
- config->retry_maxtime*1000L)) ) {
- enum {
- RETRY_NO,
- RETRY_TIMEOUT,
- RETRY_HTTP,
- RETRY_FTP,
- RETRY_LAST /* not used */
- } retry = RETRY_NO;
- long response;
- if((CURLE_OPERATION_TIMEDOUT == res) ||
- (CURLE_COULDNT_RESOLVE_HOST == res) ||
- (CURLE_COULDNT_RESOLVE_PROXY == res) ||
- (CURLE_FTP_ACCEPT_TIMEOUT == res))
- /* retry timeout always */
- retry = RETRY_TIMEOUT;
- else if((CURLE_OK == res) ||
- (config->failonerror &&
- (CURLE_HTTP_RETURNED_ERROR == res))) {
- /* If it returned OK. _or_ failonerror was enabled and it
- returned due to such an error, check for HTTP transient
- errors to retry on. */
- char *effective_url = NULL;
- curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url);
- if(effective_url &&
- checkprefix("http", effective_url)) {
- /* This was HTTP(S) */
- curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
-
- switch(response) {
- case 500: /* Internal Server Error */
- case 502: /* Bad Gateway */
- case 503: /* Service Unavailable */
- case 504: /* Gateway Timeout */
- retry = RETRY_HTTP;
- /*
- * At this point, we have already written data to the output
- * file (or terminal). If we write to a file, we must rewind
- * or close/re-open the file so that the next attempt starts
- * over from the beginning.
- *
- * TODO: similar action for the upload case. We might need
- * to start over reading from a previous point if we have
- * uploaded something when this was returned.
- */
- break;
- }
- }
- } /* if CURLE_OK */
- else if(res) {
- curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
-
- if(response/100 == 4)
- /*
- * This is typically when the FTP server only allows a certain
- * amount of users and we are not one of them. All 4xx codes
- * are transient.
- */
- retry = RETRY_FTP;
- }
-
- if(retry) {
- static const char * const m[]={
- NULL, "timeout", "HTTP error", "FTP error"
- };
- warnf(config, "Transient problem: %s "
- "Will retry in %ld seconds. "
- "%ld retries left.\n",
- m[retry], retry_sleep/1000L, retry_numretries);
-
- tool_go_sleep(retry_sleep);
- retry_numretries--;
- if(!config->retry_delay) {
- retry_sleep *= 2;
- if(retry_sleep > RETRY_SLEEP_MAX)
- retry_sleep = RETRY_SLEEP_MAX;
- }
- if(outs.bytes && outs.filename) {
- /* We have written data to a output file, we truncate file
- */
- if(!global->mute)
- fprintf(global->errors, "Throwing away %"
- CURL_FORMAT_CURL_OFF_T " bytes\n",
- outs.bytes);
- fflush(outs.stream);
- /* truncate file at the position where we started appending */
-#ifdef HAVE_FTRUNCATE
- if(ftruncate( fileno(outs.stream), outs.init)) {
- /* when truncate fails, we can't just append as then we'll
- create something strange, bail out */
- if(!global->mute)
- fprintf(global->errors,
- "failed to truncate, exiting\n");
- res = CURLE_WRITE_ERROR;
- goto quit_urls;
- }
- /* now seek to the end of the file, the position where we
- just truncated the file in a large file-safe way */
- fseek(outs.stream, 0, SEEK_END);
-#else
- /* ftruncate is not available, so just reposition the file
- to the location we would have truncated it. This won't
- work properly with large files on 32-bit systems, but
- most of those will have ftruncate. */
- fseek(outs.stream, (long)outs.init, SEEK_SET);
-#endif
- outs.bytes = 0; /* clear for next round */
- }
- continue; /* curl_easy_perform loop */
- }
- } /* if retry_numretries */
- else if(metalink) {
- /* Metalink: Decide to try the next resource or
- not. Basically, we want to try the next resource if
- download was not successful. */
- long response;
- if(CURLE_OK == res) {
- /* TODO We want to try next resource when download was
- not successful. How to know that? */
- char *effective_url = NULL;
- curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url);
- if(effective_url &&
- curlx_strnequal(effective_url, "http", 4)) {
- /* This was HTTP(S) */
- curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
- if(response != 200 && response != 206) {
- metalink_next_res = 1;
- fprintf(global->errors,
- "Metalink: fetching (%s) from (%s) FAILED "
- "(HTTP status code %d)\n",
- mlfile->filename, this_url, response);
- }
- }
- }
- else {
- metalink_next_res = 1;
- fprintf(global->errors,
- "Metalink: fetching (%s) from (%s) FAILED (%s)\n",
- mlfile->filename, this_url,
- (errorbuffer[0]) ?
- errorbuffer : curl_easy_strerror((CURLcode)res));
- }
- }
- if(metalink && !metalink_next_res)
- fprintf(global->errors, "Metalink: fetching (%s) from (%s) OK\n",
- mlfile->filename, this_url);
-
- /* In all ordinary cases, just break out of loop here */
- break; /* curl_easy_perform loop */
-
- }
-
- if((global->progressmode == CURL_PROGRESS_BAR) &&
- progressbar.calls)
- /* if the custom progress bar has been displayed, we output a
- newline here */
- fputs("\n", progressbar.out);
-
- if(config->writeout)
- ourWriteOut(curl, &outs, config->writeout);
-
- if(config->writeenv)
- ourWriteEnv(curl);
-
- /*
- ** Code within this loop may jump directly here to label 'show_error'
- ** in order to display an error message for CURLcode stored in 'res'
- ** variable and exit loop once that necessary writing and cleanup
- ** in label 'quit_urls' has been done.
- */
-
- show_error:
-
-#ifdef __VMS
- if(is_vms_shell()) {
- /* VMS DCL shell behavior */
- if(!global->showerror)
- vms_show = VMSSTS_HIDE;
- }
- else
-#endif
- if(res && global->showerror) {
- fprintf(global->errors, "curl: (%d) %s\n", res, (errorbuffer[0]) ?
- errorbuffer : curl_easy_strerror((CURLcode)res));
- if(res == CURLE_SSL_CACERT)
- fprintf(global->errors, "%s%s",
- CURL_CA_CERT_ERRORMSG1, CURL_CA_CERT_ERRORMSG2);
- }
-
- /* Fall through comment to 'quit_urls' label */
-
- /*
- ** Upon error condition and always that a message has already been
- ** displayed, code within this loop may jump directly here to label
- ** 'quit_urls' otherwise it should jump to 'show_error' label above.
- **
- ** When 'res' variable is _not_ CURLE_OK loop will exit once that
- ** all code following 'quit_urls' has been executed. Otherwise it
- ** will loop to the beginning from where it may exit if there are
- ** no more urls left.
- */
-
- quit_urls:
-
- /* Set file extended attributes */
- if(!res && config->xattr && outs.fopened && outs.stream) {
- int rc = fwrite_xattr(curl, fileno(outs.stream));
- if(rc)
- warnf(config, "Error setting extended attributes: %s\n",
- strerror(errno));
- }
-
- /* Close the file */
- if(outs.fopened && outs.stream) {
- int rc = fclose(outs.stream);
- if(!res && rc) {
- /* something went wrong in the writing process */
- res = CURLE_WRITE_ERROR;
- fprintf(global->errors, "(%d) Failed writing body\n", res);
- }
- }
- else if(!outs.s_isreg && outs.stream) {
- /* Dump standard stream buffered data */
- int rc = fflush(outs.stream);
- if(!res && rc) {
- /* something went wrong in the writing process */
- res = CURLE_WRITE_ERROR;
- fprintf(global->errors, "(%d) Failed writing body\n", res);
- }
- }
-
-#ifdef __AMIGA__
- if(!res && outs.s_isreg && outs.filename) {
- /* Set the url (up to 80 chars) as comment for the file */
- if(strlen(url) > 78)
- url[79] = '\0';
- SetComment(outs.filename, url);
- }
-#endif
-
-#ifdef HAVE_UTIME
- /* File time can only be set _after_ the file has been closed */
- if(!res && config->remote_time && outs.s_isreg && outs.filename) {
- /* Ask libcurl if we got a remote file time */
- long filetime = -1;
- curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
- if(filetime >= 0) {
- struct utimbuf times;
- times.actime = (time_t)filetime;
- times.modtime = (time_t)filetime;
- utime(outs.filename, &times); /* set the time we got */
- }
- }
-#endif
-
-#ifdef USE_METALINK
- if(!metalink && config->use_metalink && res == CURLE_OK) {
- int rv = parse_metalink(config, &outs, this_url);
- if(rv == 0)
- fprintf(config->global->errors, "Metalink: parsing (%s) OK\n",
- this_url);
- else if(rv == -1)
- fprintf(config->global->errors, "Metalink: parsing (%s) FAILED\n",
- this_url);
- }
- else if(metalink && res == CURLE_OK && !metalink_next_res) {
- int rv = metalink_check_hash(global, mlfile, outs.filename);
- if(rv == 0) {
- metalink_next_res = 1;
- }
- }
-#endif /* USE_METALINK */
-
- /* No more business with this output struct */
- if(outs.alloc_filename)
- Curl_safefree(outs.filename);
-#ifdef USE_METALINK
- if(outs.metalink_parser)
- metalink_parser_context_delete(outs.metalink_parser);
-#endif /* USE_METALINK */
- memset(&outs, 0, sizeof(struct OutStruct));
- hdrcbdata.outs = NULL;
-
- /* Free loop-local allocated memory and close loop-local opened fd */
-
- Curl_safefree(outfile);
- Curl_safefree(this_url);
-
- if(infdopen)
- close(infd);
-
- if(metalink) {
- /* Should exit if error is fatal. */
- if(is_fatal_error(res)) {
- break;
- }
- if(!metalink_next_res)
- break;
- mlres = mlres->next;
- if(mlres == NULL)
- /* TODO If metalink_next_res is 1 and mlres is NULL,
- * set res to error code
- */
- break;
- }
- else
- if(urlnum > 1) {
- /* when url globbing, exit loop upon critical error */
- if(is_fatal_error(res))
- break;
- }
- else if(res)
- /* when not url globbing, exit loop upon any error */
- break;
-
- } /* loop to the next URL */
-
- /* Free loop-local allocated memory */
-
- Curl_safefree(uploadfile);
-
- if(urls) {
- /* Free list of remaining URLs */
- glob_cleanup(urls);
- urls = NULL;
- }
-
- if(infilenum > 1) {
- /* when file globbing, exit loop upon critical error */
- if(is_fatal_error(res))
- break;
- }
- else if(res)
- /* when not file globbing, exit loop upon any error */
- break;
-
- } /* loop to the next globbed upload file */
-
- /* Free loop-local allocated memory */
-
- Curl_safefree(outfiles);
-
- if(inglob) {
- /* Free list of globbed upload files */
- glob_cleanup(inglob);
- inglob = NULL;
- }
-
- /* Free this URL node data without destroying the
- the node itself nor modifying next pointer. */
- Curl_safefree(urlnode->url);
- Curl_safefree(urlnode->outfile);
- Curl_safefree(urlnode->infile);
- urlnode->flags = 0;
-
- /*
- ** Bail out upon critical errors
- */
- if(is_fatal_error(res))
- goto quit_curl;
-
- } /* for-loop through all URLs */
-
- /*
- ** Nested loops end here.
- */
-
- quit_curl:
-
- /* Reset the global config variables */
- global->noprogress = orig_noprogress;
- global->isatty = orig_isatty;
-
- /* Free function-local referenced allocated memory */
- Curl_safefree(httpgetfields);
-
- /* Free list of given URLs */
- clean_getout(config);
-
- hdrcbdata.heads = NULL;
-
- /* Close function-local opened file descriptors */
- if(heads.fopened && heads.stream)
- fclose(heads.stream);
-
- if(heads.alloc_filename)
- Curl_safefree(heads.filename);
-
- /* Release metalink related resources here */
- clean_metalink(config);
-
- return res;
-}
-
-CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[])
-{
- CURLcode result = CURLE_OK;
-
- /* Setup proper locale from environment */
-#ifdef HAVE_SETLOCALE
- setlocale(LC_ALL, "");
-#endif
-
- /* Parse .curlrc if necessary */
- if((argc == 1) || (!curlx_strequal(argv[1], "-q"))) {
- parseconfig(NULL, config); /* ignore possible failure */
-
- /* If we had no arguments then make sure a url was specified in .curlrc */
- if((argc < 2) && (!config->first->url_list)) {
- helpf(config->errors, NULL);
- result = CURLE_FAILED_INIT;
- }
- }
-
- if(!result) {
- /* Parse the command line arguments */
- ParameterError res = parse_args(config, argc, argv);
- if(res) {
- result = CURLE_OK;
-
- /* Check if we were asked for the help */
- if(res == PARAM_HELP_REQUESTED)
- tool_help();
- /* Check if we were asked for the manual */
- else if(res == PARAM_MANUAL_REQUESTED)
- hugehelp();
- /* Check if we were asked for the version information */
- else if(res == PARAM_VERSION_INFO_REQUESTED)
- tool_version_info();
- /* Check if we were asked to list the SSL engines */
- else if(res == PARAM_ENGINES_REQUESTED)
- tool_list_engines(config->easy);
- else
- result = CURLE_FAILED_INIT;
- }
- else {
-#ifndef CURL_DISABLE_LIBCURL_OPTION
- /* Initialise the libcurl source output */
- result = easysrc_init();
-#endif
-
- /* Perform the main operations */
- if(!result) {
- size_t count = 0;
- struct OperationConfig *operation = config->first;
-
- /* Get the required aguments for each operation */
- while(!result && operation) {
- result = get_args(operation, count++);
-
- operation = operation->next;
- }
-
- /* Set the current operation pointer */
- config->current = config->first;
-
- /* Perform each operation */
- while(!result && config->current) {
- result = operate_do(config, config->current);
-
- config->current = config->current->next;
- }
-
-#ifndef CURL_DISABLE_LIBCURL_OPTION
- /* Cleanup the libcurl source output */
- easysrc_cleanup();
-
- /* Dump the libcurl code if previously enabled */
- dumpeasysrc(config);
-#endif
- }
- else
- helpf(config->errors, "out of memory\n");
- }
- }
-
- return result;
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_operate.h b/external/libcurl_android/jni/libcurl/src/tool_operate.h
deleted file mode 100755
index 1d5c1a96..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_operate.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef HEADER_CURL_TOOL_OPERATE_H
-#define HEADER_CURL_TOOL_OPERATE_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-CURLcode operate(struct GlobalConfig *config, int argc, argv_item_t argv[]);
-
-#endif /* HEADER_CURL_TOOL_OPERATE_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_operhlp.c b/external/libcurl_android/jni/libcurl/src/tool_operhlp.c
deleted file mode 100755
index 15eefabe..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_operhlp.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_convert.h"
-#include "tool_operhlp.h"
-#include "tool_metalink.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-void clean_getout(struct OperationConfig *config)
-{
- struct getout *next;
- struct getout *node = config->url_list;
-
- while(node) {
- next = node->next;
- Curl_safefree(node->url);
- Curl_safefree(node->outfile);
- Curl_safefree(node->infile);
- Curl_safefree(node);
- node = next;
- }
- config->url_list = NULL;
-}
-
-bool output_expected(const char *url, const char *uploadfile)
-{
- if(!uploadfile)
- return TRUE; /* download */
- if(checkprefix("http://", url) || checkprefix("https://", url))
- return TRUE; /* HTTP(S) upload */
-
- return FALSE; /* non-HTTP upload, probably no output should be expected */
-}
-
-bool stdin_upload(const char *uploadfile)
-{
- return (curlx_strequal(uploadfile, "-") ||
- curlx_strequal(uploadfile, ".")) ? TRUE : FALSE;
-}
-
-/*
- * Adds the file name to the URL if it doesn't already have one.
- * url will be freed before return if the returned pointer is different
- */
-char *add_file_name_to_url(CURL *curl, char *url, const char *filename)
-{
- /* If no file name part is given in the URL, we add this file name */
- char *ptr = strstr(url, "://");
- if(ptr)
- ptr += 3;
- else
- ptr = url;
- ptr = strrchr(ptr, '/');
- if(!ptr || !strlen(++ptr)) {
- /* The URL has no file name part, add the local file name. In order
- to be able to do so, we have to create a new URL in another
- buffer.*/
-
- /* We only want the part of the local path that is on the right
- side of the rightmost slash and backslash. */
- const char *filep = strrchr(filename, '/');
- char *file2 = strrchr(filep?filep:filename, '\\');
- char *encfile;
-
- if(file2)
- filep = file2 + 1;
- else if(filep)
- filep++;
- else
- filep = filename;
-
- /* URL encode the file name */
- encfile = curl_easy_escape(curl, filep, 0 /* use strlen */);
- if(encfile) {
- char *urlbuffer;
- if(ptr)
- /* there is a trailing slash on the URL */
- urlbuffer = aprintf("%s%s", url, encfile);
- else
- /* there is no trailing slash on the URL */
- urlbuffer = aprintf("%s/%s", url, encfile);
-
- curl_free(encfile);
- Curl_safefree(url);
-
- if(!urlbuffer)
- return NULL;
-
- url = urlbuffer; /* use our new URL instead! */
- }
- else
- Curl_safefree(url);
- }
- return url;
-}
-
-/* Extracts the name portion of the URL.
- * Returns a pointer to a heap-allocated string or NULL if
- * no name part, at location indicated by first argument.
- */
-CURLcode get_url_file_name(char **filename, const char *url)
-{
- const char *pc;
-
- *filename = NULL;
-
- /* Find and get the remote file name */
- pc = strstr(url, "://");
- if(pc)
- pc += 3;
- else
- pc = url;
- pc = strrchr(pc, '/');
-
- if(pc) {
- /* duplicate the string beyond the slash */
- pc++;
- if(*pc) {
- *filename = strdup(pc);
- if(!*filename)
- return CURLE_OUT_OF_MEMORY;
- }
- }
-
- /* in case we built debug enabled, we allow an environment variable
- * named CURL_TESTDIR to prefix the given file name to put it into a
- * specific directory
- */
-#ifdef DEBUGBUILD
- {
- char *tdir = curlx_getenv("CURL_TESTDIR");
- if(tdir) {
- char buffer[512]; /* suitably large */
- snprintf(buffer, sizeof(buffer), "%s/%s", tdir, *filename);
- Curl_safefree(*filename);
- *filename = strdup(buffer); /* clone the buffer */
- curl_free(tdir);
- }
- }
-#endif
-
- return CURLE_OK;
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_operhlp.h b/external/libcurl_android/jni/libcurl/src/tool_operhlp.h
deleted file mode 100755
index 8fcaad69..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_operhlp.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef HEADER_CURL_TOOL_OPERHLP_H
-#define HEADER_CURL_TOOL_OPERHLP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-struct OperationConfig;
-
-void clean_getout(struct OperationConfig *config);
-
-bool output_expected(const char *url, const char *uploadfile);
-
-bool stdin_upload(const char *uploadfile);
-
-char *add_file_name_to_url(CURL *curl, char *url, const char *filename);
-
-CURLcode get_url_file_name(char **filename, const char *url);
-
-#endif /* HEADER_CURL_TOOL_OPERHLP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_panykey.c b/external/libcurl_android/jni/libcurl/src/tool_panykey.c
deleted file mode 100755
index d8718e32..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_panykey.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#if defined(__SYMBIAN32__) || defined(NETWARE)
-
-#ifdef NETWARE
-# ifdef __NOVELL_LIBC__
-# include <screen.h>
-# else
-# include <nwconio.h>
-# endif
-#endif
-
-#include "tool_panykey.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-void tool_pressanykey(void)
-{
-#if defined(__SYMBIAN32__)
- getchar();
-#elif defined(NETWARE)
- pressanykey();
-#endif
-}
-
-#endif /* __SYMBIAN32__ || NETWARE */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_panykey.h b/external/libcurl_android/jni/libcurl/src/tool_panykey.h
deleted file mode 100755
index 50b15d2d..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_panykey.h
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef HEADER_CURL_TOOL_PANYKEY_H
-#define HEADER_CURL_TOOL_PANYKEY_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#if defined(__SYMBIAN32__) || defined(NETWARE)
-
-void tool_pressanykey(void);
-
-#else
-
-#define tool_pressanykey() Curl_nop_stmt
-
-#endif
-
-#endif /* HEADER_CURL_TOOL_PANYKEY_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_paramhlp.c b/external/libcurl_android/jni/libcurl/src/tool_paramhlp.c
deleted file mode 100755
index 18da0265..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_paramhlp.c
+++ /dev/null
@@ -1,513 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "rawstr.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_getparam.h"
-#include "tool_getpass.h"
-#include "tool_homedir.h"
-#include "tool_msgs.h"
-#include "tool_paramhlp.h"
-#include "tool_version.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-struct getout *new_getout(struct OperationConfig *config)
-{
- struct getout *node = calloc(1, sizeof(struct getout));
- struct getout *last = config->url_last;
- if(node) {
- /* append this new node last in the list */
- if(last)
- last->next = node;
- else
- config->url_list = node; /* first node */
-
- /* move the last pointer */
- config->url_last = node;
-
- node->flags = config->default_node_flags;
- }
- return node;
-}
-
-ParameterError file2string(char **bufp, FILE *file)
-{
- char buffer[256];
- char *ptr;
- char *string = NULL;
- size_t stringlen = 0;
- size_t buflen;
-
- if(file) {
- while(fgets(buffer, sizeof(buffer), file)) {
- if((ptr = strchr(buffer, '\r')) != NULL)
- *ptr = '\0';
- if((ptr = strchr(buffer, '\n')) != NULL)
- *ptr = '\0';
- buflen = strlen(buffer);
- if((ptr = realloc(string, stringlen+buflen+1)) == NULL) {
- Curl_safefree(string);
- return PARAM_NO_MEM;
- }
- string = ptr;
- strcpy(string+stringlen, buffer);
- stringlen += buflen;
- }
- }
- *bufp = string;
- return PARAM_OK;
-}
-
-ParameterError file2memory(char **bufp, size_t *size, FILE *file)
-{
- char *newbuf;
- char *buffer = NULL;
- size_t alloc = 512;
- size_t nused = 0;
- size_t nread;
-
- if(file) {
- do {
- if(!buffer || (alloc == nused)) {
- /* size_t overflow detection for huge files */
- if(alloc+1 > ((size_t)-1)/2) {
- Curl_safefree(buffer);
- return PARAM_NO_MEM;
- }
- alloc *= 2;
- /* allocate an extra char, reserved space, for null termination */
- if((newbuf = realloc(buffer, alloc+1)) == NULL) {
- Curl_safefree(buffer);
- return PARAM_NO_MEM;
- }
- buffer = newbuf;
- }
- nread = fread(buffer+nused, 1, alloc-nused, file);
- nused += nread;
- } while(nread);
- /* null terminate the buffer in case it's used as a string later */
- buffer[nused] = '\0';
- /* free trailing slack space, if possible */
- if(alloc != nused) {
- if((newbuf = realloc(buffer, nused+1)) == NULL) {
- Curl_safefree(buffer);
- return PARAM_NO_MEM;
- }
- buffer = newbuf;
- }
- /* discard buffer if nothing was read */
- if(!nused) {
- Curl_safefree(buffer); /* no string */
- }
- }
- *size = nused;
- *bufp = buffer;
- return PARAM_OK;
-}
-
-void cleanarg(char *str)
-{
-#ifdef HAVE_WRITABLE_ARGV
- /* now that GetStr has copied the contents of nextarg, wipe the next
- * argument out so that the username:password isn't displayed in the
- * system process list */
- if(str) {
- size_t len = strlen(str);
- memset(str, ' ', len);
- }
-#else
- (void)str;
-#endif
-}
-
-/*
- * Parse the string and write the long in the given address. Return PARAM_OK
- * on success, otherwise a parameter specific error enum.
- *
- * Since this function gets called with the 'nextarg' pointer from within the
- * getparameter a lot, we must check it for NULL before accessing the str
- * data.
- */
-
-ParameterError str2num(long *val, const char *str)
-{
- if(str) {
- char *endptr;
- long num = strtol(str, &endptr, 10);
- if((endptr != str) && (endptr == str + strlen(str))) {
- *val = num;
- return PARAM_OK; /* Ok */
- }
- }
- return PARAM_BAD_NUMERIC; /* badness */
-}
-
-/*
- * Parse the string and write the long in the given address. Return PARAM_OK
- * on success, otherwise a parameter error enum. ONLY ACCEPTS POSITIVE NUMBERS!
- *
- * Since this function gets called with the 'nextarg' pointer from within the
- * getparameter a lot, we must check it for NULL before accessing the str
- * data.
- */
-
-ParameterError str2unum(long *val, const char *str)
-{
- ParameterError result = str2num(val, str);
- if(result != PARAM_OK)
- return result;
- if(*val < 0)
- return PARAM_NEGATIVE_NUMERIC;
-
- return PARAM_OK;
-}
-
-/*
- * Parse the string and write the double in the given address. Return PARAM_OK
- * on success, otherwise a parameter specific error enum.
- *
- * Since this function gets called with the 'nextarg' pointer from within the
- * getparameter a lot, we must check it for NULL before accessing the str
- * data.
- */
-
-ParameterError str2double(double *val, const char *str)
-{
- if(str) {
- char *endptr;
- double num = strtod(str, &endptr);
- if((endptr != str) && (endptr == str + strlen(str))) {
- *val = num;
- return PARAM_OK; /* Ok */
- }
- }
- return PARAM_BAD_NUMERIC; /* badness */
-}
-
-/*
- * Parse the string and write the double in the given address. Return PARAM_OK
- * on success, otherwise a parameter error enum. ONLY ACCEPTS POSITIVE NUMBERS!
- *
- * Since this function gets called with the 'nextarg' pointer from within the
- * getparameter a lot, we must check it for NULL before accessing the str
- * data.
- */
-
-ParameterError str2udouble(double *val, const char *str)
-{
- ParameterError result = str2double(val, str);
- if(result != PARAM_OK)
- return result;
- if(*val < 0)
- return PARAM_NEGATIVE_NUMERIC;
-
- return PARAM_OK;
-}
-
-/*
- * Parse the string and modify the long in the given address. Return
- * non-zero on failure, zero on success.
- *
- * The string is a list of protocols
- *
- * Since this function gets called with the 'nextarg' pointer from within the
- * getparameter a lot, we must check it for NULL before accessing the str
- * data.
- */
-
-long proto2num(struct OperationConfig *config, long *val, const char *str)
-{
- char *buffer;
- const char *sep = ",";
- char *token;
-
- static struct sprotos {
- const char *name;
- long bit;
- } const protos[] = {
- { "all", CURLPROTO_ALL },
- { "http", CURLPROTO_HTTP },
- { "https", CURLPROTO_HTTPS },
- { "ftp", CURLPROTO_FTP },
- { "ftps", CURLPROTO_FTPS },
- { "scp", CURLPROTO_SCP },
- { "sftp", CURLPROTO_SFTP },
- { "telnet", CURLPROTO_TELNET },
- { "ldap", CURLPROTO_LDAP },
- { "ldaps", CURLPROTO_LDAPS },
- { "dict", CURLPROTO_DICT },
- { "file", CURLPROTO_FILE },
- { "tftp", CURLPROTO_TFTP },
- { "imap", CURLPROTO_IMAP },
- { "imaps", CURLPROTO_IMAPS },
- { "pop3", CURLPROTO_POP3 },
- { "pop3s", CURLPROTO_POP3S },
- { "smtp", CURLPROTO_SMTP },
- { "smtps", CURLPROTO_SMTPS },
- { "rtsp", CURLPROTO_RTSP },
- { "gopher", CURLPROTO_GOPHER },
- { NULL, 0 }
- };
-
- if(!str)
- return 1;
-
- buffer = strdup(str); /* because strtok corrupts it */
- if(!buffer)
- return 1;
-
- for(token = strtok(buffer, sep);
- token;
- token = strtok(NULL, sep)) {
- enum e_action { allow, deny, set } action = allow;
-
- struct sprotos const *pp;
-
- /* Process token modifiers */
- while(!ISALNUM(*token)) { /* may be NULL if token is all modifiers */
- switch (*token++) {
- case '=':
- action = set;
- break;
- case '-':
- action = deny;
- break;
- case '+':
- action = allow;
- break;
- default: /* Includes case of terminating NULL */
- Curl_safefree(buffer);
- return 1;
- }
- }
-
- for(pp=protos; pp->name; pp++) {
- if(curlx_raw_equal(token, pp->name)) {
- switch (action) {
- case deny:
- *val &= ~(pp->bit);
- break;
- case allow:
- *val |= pp->bit;
- break;
- case set:
- *val = pp->bit;
- break;
- }
- break;
- }
- }
-
- if(!(pp->name)) { /* unknown protocol */
- /* If they have specified only this protocol, we say treat it as
- if no protocols are allowed */
- if(action == set)
- *val = 0;
- warnf(config, "unrecognized protocol '%s'\n", token);
- }
- }
- Curl_safefree(buffer);
- return 0;
-}
-
-/**
- * Parses the given string looking for an offset (which may be a
- * larger-than-integer value). The offset CANNOT be negative!
- *
- * @param val the offset to populate
- * @param str the buffer containing the offset
- * @return PARAM_OK if successful, a parameter specific error enum if failure.
- */
-ParameterError str2offset(curl_off_t *val, const char *str)
-{
- char *endptr;
- if(str[0] == '-')
- /* offsets aren't negative, this indicates weird input */
- return PARAM_NEGATIVE_NUMERIC;
-
-#if(CURL_SIZEOF_CURL_OFF_T > CURL_SIZEOF_LONG)
- *val = curlx_strtoofft(str, &endptr, 0);
- if((*val == CURL_OFF_T_MAX || *val == CURL_OFF_T_MIN) && (ERRNO == ERANGE))
- return PARAM_BAD_NUMERIC;
-#else
- *val = strtol(str, &endptr, 0);
- if((*val == LONG_MIN || *val == LONG_MAX) && ERRNO == ERANGE)
- return PARAM_BAD_NUMERIC;
-#endif
- if((endptr != str) && (endptr == str + strlen(str)))
- return PARAM_OK;
-
- return PARAM_BAD_NUMERIC;
-}
-
-static CURLcode checkpasswd(const char *kind, /* for what purpose */
- const size_t i, /* operation index */
- const bool last, /* TRUE if last operation */
- char **userpwd) /* pointer to allocated string */
-{
- char *psep;
- char *osep;
-
- if(!*userpwd)
- return CURLE_OK;
-
- /* Attempt to find the password separator */
- psep = strchr(*userpwd, ':');
-
- /* Attempt to find the options separator */
- osep = strchr(*userpwd, ';');
-
- if(!psep && **userpwd != ';') {
- /* no password present, prompt for one */
- char passwd[256] = "";
- char prompt[256];
- size_t passwdlen;
- size_t userlen = strlen(*userpwd);
- char *passptr;
-
- if(osep)
- *osep = '\0';
-
- /* build a nice-looking prompt */
- if(!i && last)
- curlx_msnprintf(prompt, sizeof(prompt),
- "Enter %s password for user '%s':",
- kind, *userpwd);
- else
- curlx_msnprintf(prompt, sizeof(prompt),
- "Enter %s password for user '%s' on URL #%"
- CURL_FORMAT_CURL_OFF_TU ":",
- kind, *userpwd, i + 1);
-
- /* get password */
- getpass_r(prompt, passwd, sizeof(passwd));
- passwdlen = strlen(passwd);
-
- if(osep)
- *osep = ';';
-
- /* extend the allocated memory area to fit the password too */
- passptr = realloc(*userpwd,
- passwdlen + 1 + /* an extra for the colon */
- userlen + 1); /* an extra for the zero */
- if(!passptr)
- return CURLE_OUT_OF_MEMORY;
-
- /* append the password separated with a colon */
- passptr[userlen] = ':';
- memcpy(&passptr[userlen+1], passwd, passwdlen+1);
- *userpwd = passptr;
- }
-
- return CURLE_OK;
-}
-
-ParameterError add2list(struct curl_slist **list, const char *ptr)
-{
- struct curl_slist *newlist = curl_slist_append(*list, ptr);
- if(newlist)
- *list = newlist;
- else
- return PARAM_NO_MEM;
-
- return PARAM_OK;
-}
-
-int ftpfilemethod(struct OperationConfig *config, const char *str)
-{
- if(curlx_raw_equal("singlecwd", str))
- return CURLFTPMETHOD_SINGLECWD;
- if(curlx_raw_equal("nocwd", str))
- return CURLFTPMETHOD_NOCWD;
- if(curlx_raw_equal("multicwd", str))
- return CURLFTPMETHOD_MULTICWD;
- warnf(config, "unrecognized ftp file method '%s', using default\n", str);
- return CURLFTPMETHOD_MULTICWD;
-}
-
-int ftpcccmethod(struct OperationConfig *config, const char *str)
-{
- if(curlx_raw_equal("passive", str))
- return CURLFTPSSL_CCC_PASSIVE;
- if(curlx_raw_equal("active", str))
- return CURLFTPSSL_CCC_ACTIVE;
- warnf(config, "unrecognized ftp CCC method '%s', using default\n", str);
- return CURLFTPSSL_CCC_PASSIVE;
-}
-
-long delegation(struct OperationConfig *config, char *str)
-{
- if(curlx_raw_equal("none", str))
- return CURLGSSAPI_DELEGATION_NONE;
- if(curlx_raw_equal("policy", str))
- return CURLGSSAPI_DELEGATION_POLICY_FLAG;
- if(curlx_raw_equal("always", str))
- return CURLGSSAPI_DELEGATION_FLAG;
- warnf(config, "unrecognized delegation method '%s', using none\n", str);
- return CURLGSSAPI_DELEGATION_NONE;
-}
-
-/*
- * my_useragent: returns allocated string with default user agent
- */
-static char *my_useragent(void)
-{
- return strdup(CURL_NAME "/" CURL_VERSION);
-}
-
-CURLcode get_args(struct OperationConfig *config, const size_t i)
-{
- CURLcode result = CURLE_OK;
- bool last = (config->next ? FALSE : TRUE);
-
- /* Check we have a password for the given host user */
- if(config->userpwd && !config->xoauth2_bearer) {
- result = checkpasswd("host", i, last, &config->userpwd);
- if(result)
- return result;
- }
-
- /* Check we have a password for the given proxy user */
- if(config->proxyuserpwd) {
- result = checkpasswd("proxy", i, last, &config->proxyuserpwd);
- if(result)
- return result;
- }
-
- /* Check we have a user agent */
- if(!config->useragent) {
- config->useragent = my_useragent();
- if(!config->useragent) {
- helpf(config->global->errors, "out of memory\n");
- result = CURLE_OUT_OF_MEMORY;
- }
- }
-
- return result;
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_paramhlp.h b/external/libcurl_android/jni/libcurl/src/tool_paramhlp.h
deleted file mode 100755
index 69d7fd42..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_paramhlp.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef HEADER_CURL_TOOL_PARAMHLP_H
-#define HEADER_CURL_TOOL_PARAMHLP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-struct getout *new_getout(struct OperationConfig *config);
-
-ParameterError file2string(char **bufp, FILE *file);
-
-ParameterError file2memory(char **bufp, size_t *size, FILE *file);
-
-void cleanarg(char *str);
-
-ParameterError str2num(long *val, const char *str);
-ParameterError str2unum(long *val, const char *str);
-ParameterError str2double(double *val, const char *str);
-ParameterError str2udouble(double *val, const char *str);
-
-long proto2num(struct OperationConfig *config, long *val, const char *str);
-
-ParameterError str2offset(curl_off_t *val, const char *str);
-
-CURLcode get_args(struct OperationConfig *config, const size_t i);
-
-ParameterError add2list(struct curl_slist **list, const char *ptr);
-
-int ftpfilemethod(struct OperationConfig *config, const char *str);
-
-int ftpcccmethod(struct OperationConfig *config, const char *str);
-
-long delegation(struct OperationConfig *config, char *str);
-
-#endif /* HEADER_CURL_TOOL_PARAMHLP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_parsecfg.c b/external/libcurl_android/jni/libcurl/src/tool_parsecfg.c
deleted file mode 100755
index 7a161c3b..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_parsecfg.c
+++ /dev/null
@@ -1,362 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_getparam.h"
-#include "tool_helpers.h"
-#include "tool_homedir.h"
-#include "tool_msgs.h"
-#include "tool_parsecfg.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#define CURLRC DOT_CHAR "curlrc"
-
-/* only acknowledge colon or equals as separators if the option was not
- specified with an initial dash! */
-#define ISSEP(x,dash) (!dash && (((x) == '=') || ((x) == ':')))
-
-static const char *unslashquote(const char *line, char *param);
-static char *my_get_line(FILE *fp);
-
-/* return 0 on everything-is-fine, and non-zero otherwise */
-int parseconfig(const char *filename, struct GlobalConfig *global)
-{
- int res;
- FILE *file;
- char filebuffer[512];
- bool usedarg;
- char *home;
- int rc = 0;
- struct OperationConfig *operation = global->first;
-
- if(!filename || !*filename) {
- /* NULL or no file name attempts to load .curlrc from the homedir! */
-
-#ifndef __AMIGA__
- filename = CURLRC; /* sensible default */
- home = homedir(); /* portable homedir finder */
- if(home) {
- if(strlen(home) < (sizeof(filebuffer) - strlen(CURLRC))) {
- snprintf(filebuffer, sizeof(filebuffer),
- "%s%s%s", home, DIR_CHAR, CURLRC);
-
-#ifdef WIN32
- /* Check if the file exists - if not, try CURLRC in the same
- * directory as our executable
- */
- file = fopen(filebuffer, "r");
- if(file != NULL) {
- fclose(file);
- filename = filebuffer;
- }
- else {
- /* Get the filename of our executable. GetModuleFileName is
- * already declared via inclusions done in setup header file.
- * We assume that we are using the ASCII version here.
- */
- int n = GetModuleFileName(0, filebuffer, sizeof(filebuffer));
- if(n > 0 && n < (int)sizeof(filebuffer)) {
- /* We got a valid filename - get the directory part */
- char *lastdirchar = strrchr(filebuffer, '\\');
- if(lastdirchar) {
- size_t remaining;
- *lastdirchar = 0;
- /* If we have enough space, build the RC filename */
- remaining = sizeof(filebuffer) - strlen(filebuffer);
- if(strlen(CURLRC) < remaining - 1) {
- snprintf(lastdirchar, remaining,
- "%s%s", DIR_CHAR, CURLRC);
- /* Don't bother checking if it exists - we do
- * that later
- */
- filename = filebuffer;
- }
- }
- }
- }
-#else /* WIN32 */
- filename = filebuffer;
-#endif /* WIN32 */
- }
- Curl_safefree(home); /* we've used it, now free it */
- }
-
-# else /* __AMIGA__ */
- /* On AmigaOS all the config files are into env:
- */
- filename = "ENV:" CURLRC;
-
-#endif
- }
-
- if(strcmp(filename,"-"))
- file = fopen(filename, "r");
- else
- file = stdin;
-
- if(file) {
- char *line;
- char *aline;
- char *option;
- char *param;
- int lineno = 0;
- bool alloced_param;
- bool dashed_option;
-
- while(NULL != (aline = my_get_line(file))) {
- lineno++;
- line = aline;
- alloced_param=FALSE;
-
- /* line with # in the first non-blank column is a comment! */
- while(*line && ISSPACE(*line))
- line++;
-
- switch(*line) {
- case '#':
- case '/':
- case '\r':
- case '\n':
- case '*':
- case '\0':
- Curl_safefree(aline);
- continue;
- }
-
- /* the option keywords starts here */
- option = line;
-
- /* the option starts with a dash? */
- dashed_option = option[0]=='-'?TRUE:FALSE;
-
- while(*line && !ISSPACE(*line) && !ISSEP(*line, dashed_option))
- line++;
- /* ... and has ended here */
-
- if(*line)
- *line++ = '\0'; /* zero terminate, we have a local copy of the data */
-
-#ifdef DEBUG_CONFIG
- fprintf(stderr, "GOT: %s\n", option);
-#endif
-
- /* pass spaces and separator(s) */
- while(*line && (ISSPACE(*line) || ISSEP(*line, dashed_option)))
- line++;
-
- /* the parameter starts here (unless quoted) */
- if(*line == '\"') {
- /* quoted parameter, do the quote dance */
- line++;
- param = malloc(strlen(line) + 1); /* parameter */
- if(!param) {
- /* out of memory */
- Curl_safefree(aline);
- rc = 1;
- break;
- }
- alloced_param = TRUE;
- (void)unslashquote(line, param);
- }
- else {
- param = line; /* parameter starts here */
- while(*line && !ISSPACE(*line))
- line++;
- *line = '\0'; /* zero terminate */
-
- /* to detect mistakes better, see if there's data following */
- line++;
- /* pass all spaces */
- while(*line && ISSPACE(*line))
- line++;
-
- switch(*line) {
- case '\0':
- case '\r':
- case '\n':
- case '#': /* comment */
- break;
- default:
- warnf(operation, "%s:%d: warning: '%s' uses unquoted white space in"
- " the line that may cause side-effects!\n",
- filename, lineno, option);
- }
- }
-
- if(param && !*param) {
- /* do this so getparameter can check for required parameters.
- Otherwise it always thinks there's a parameter. */
- if(alloced_param)
- Curl_safefree(param);
- param = NULL;
- }
-
-#ifdef DEBUG_CONFIG
- fprintf(stderr, "PARAM: \"%s\"\n",(param ? param : "(null)"));
-#endif
- res = getparameter(option, param, &usedarg, global, operation);
-
- if(param && *param && !usedarg)
- /* we passed in a parameter that wasn't used! */
- res = PARAM_GOT_EXTRA_PARAMETER;
-
- if(res == PARAM_NEXT_OPERATION) {
- if(operation->url_list && operation->url_list->url) {
- /* Allocate the next config */
- operation->next = malloc(sizeof(struct OperationConfig));
- if(operation->next) {
- /* Initialise the newly created config */
- config_init(operation->next);
-
- /* Copy the easy handle */
- operation->next->easy = global->easy;
-
- /* Set the global config pointer */
- operation->next->global = global;
-
- /* Update the last operation pointer */
- global->last = operation->next;
-
- /* Move onto the new config */
- operation->next->prev = operation;
- operation = operation->next;
- }
- else
- res = PARAM_NO_MEM;
- }
- }
-
- if(res != PARAM_OK && res != PARAM_NEXT_OPERATION) {
- /* the help request isn't really an error */
- if(!strcmp(filename, "-")) {
- filename = (char *)"<stdin>";
- }
- if(res != PARAM_HELP_REQUESTED &&
- res != PARAM_MANUAL_REQUESTED &&
- res != PARAM_VERSION_INFO_REQUESTED &&
- res != PARAM_ENGINES_REQUESTED) {
- const char *reason = param2text(res);
- warnf(operation, "%s:%d: warning: '%s' %s\n",
- filename, lineno, option, reason);
- }
- }
-
- if(alloced_param)
- Curl_safefree(param);
-
- Curl_safefree(aline);
- }
- if(file != stdin)
- fclose(file);
- }
- else
- rc = 1; /* couldn't open the file */
-
- return rc;
-}
-
-/*
- * Copies the string from line to the buffer at param, unquoting
- * backslash-quoted characters and NUL-terminating the output string.
- * Stops at the first non-backslash-quoted double quote character or the
- * end of the input string. param must be at least as long as the input
- * string. Returns the pointer after the last handled input character.
- */
-static const char *unslashquote(const char *line, char *param)
-{
- while(*line && (*line != '\"')) {
- if(*line == '\\') {
- char out;
- line++;
-
- /* default is to output the letter after the backslash */
- switch(out = *line) {
- case '\0':
- continue; /* this'll break out of the loop */
- case 't':
- out = '\t';
- break;
- case 'n':
- out = '\n';
- break;
- case 'r':
- out = '\r';
- break;
- case 'v':
- out = '\v';
- break;
- }
- *param++ = out;
- line++;
- }
- else
- *param++ = *line++;
- }
- *param = '\0'; /* always zero terminate */
- return line;
-}
-
-/*
- * Reads a line from the given file, ensuring is NUL terminated.
- * The pointer must be freed by the caller.
- * NULL is returned on an out of memory condition.
- */
-static char *my_get_line(FILE *fp)
-{
- char buf[4096];
- char *nl = NULL;
- char *line = NULL;
-
- do {
- if(NULL == fgets(buf, sizeof(buf), fp))
- break;
- if(!line) {
- line = strdup(buf);
- if(!line)
- return NULL;
- }
- else {
- char *ptr;
- size_t linelen = strlen(line);
- ptr = realloc(line, linelen + strlen(buf) + 1);
- if(!ptr) {
- Curl_safefree(line);
- return NULL;
- }
- line = ptr;
- strcpy(&line[linelen], buf);
- }
- nl = strchr(line, '\n');
- } while(!nl);
-
- if(nl)
- *nl = '\0';
-
- return line;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_parsecfg.h b/external/libcurl_android/jni/libcurl/src/tool_parsecfg.h
deleted file mode 100755
index c3b19d54..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_parsecfg.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef HEADER_CURL_TOOL_PARSECFG_H
-#define HEADER_CURL_TOOL_PARSECFG_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-int parseconfig(const char *filename, struct GlobalConfig *config);
-
-#endif /* HEADER_CURL_TOOL_PARSECFG_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_sdecls.h b/external/libcurl_android/jni/libcurl/src/tool_sdecls.h
deleted file mode 100755
index e74020f7..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_sdecls.h
+++ /dev/null
@@ -1,153 +0,0 @@
-#ifndef HEADER_CURL_TOOL_SDECLS_H
-#define HEADER_CURL_TOOL_SDECLS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-#ifdef USE_METALINK
-# include <metalink/metalink.h>
-#endif /* USE_METALINK */
-
-/*
- * OutStruct variables keep track of information relative to curl's
- * output writing, which may take place to a standard stream or a file.
- *
- * 'filename' member is either a pointer to a file name string or NULL
- * when dealing with a standard stream.
- *
- * 'alloc_filename' member is TRUE when string pointed by 'filename' has been
- * dynamically allocated and 'belongs' to this OutStruct, otherwise FALSE.
- *
- * 'is_cd_filename' member is TRUE when string pointed by 'filename' has been
- * set using a server-specified Content-Disposition filename, otherwise FALSE.
- *
- * 's_isreg' member is TRUE when output goes to a regular file, this also
- * implies that output is 'seekable' and 'appendable' and also that member
- * 'filename' points to file name's string. For any standard stream member
- * 's_isreg' will be FALSE.
- *
- * 'fopened' member is TRUE when output goes to a regular file and it
- * has been fopen'ed, requiring it to be closed later on. In any other
- * case this is FALSE.
- *
- * 'stream' member is a pointer to a stream controlling object as returned
- * from a 'fopen' call or a standard stream.
- *
- * 'config' member is a pointer to associated 'OperationConfig' struct.
- *
- * 'bytes' member represents amount written so far.
- *
- * 'init' member holds original file size or offset at which truncation is
- * taking place. Always zero unless appending to a non-empty regular file.
- *
- * 'metalink_parser' member is a pointer to Metalink XML parser
- * context.
- */
-
-struct OutStruct {
- char *filename;
- bool alloc_filename;
- bool is_cd_filename;
- bool s_isreg;
- bool fopened;
- FILE *stream;
- struct OperationConfig *config;
- curl_off_t bytes;
- curl_off_t init;
-#ifdef USE_METALINK
- metalink_parser_context_t *metalink_parser;
-#endif /* USE_METALINK */
-};
-
-
-/*
- * InStruct variables keep track of information relative to curl's
- * input reading, which may take place from stdin or from some file.
- *
- * 'fd' member is either 'stdin' file descriptor number STDIN_FILENO
- * or a file descriptor as returned from an 'open' call for some file.
- *
- * 'config' member is a pointer to associated 'OperationConfig' struct.
- */
-
-struct InStruct {
- int fd;
- struct OperationConfig *config;
-};
-
-
-/*
- * A linked list of these 'getout' nodes contain URL's to fetch,
- * as well as information relative to where URL contents should
- * be stored or which file should be uploaded.
- */
-
-struct getout {
- struct getout *next; /* next one */
- char *url; /* the URL we deal with */
- char *outfile; /* where to store the output */
- char *infile; /* file to upload, if GETOUT_UPLOAD is set */
- int flags; /* options - composed of GETOUT_* bits */
-};
-
-#define GETOUT_OUTFILE (1<<0) /* set when outfile is deemed done */
-#define GETOUT_URL (1<<1) /* set when URL is deemed done */
-#define GETOUT_USEREMOTE (1<<2) /* use remote file name locally */
-#define GETOUT_UPLOAD (1<<3) /* if set, -T has been used */
-#define GETOUT_NOUPLOAD (1<<4) /* if set, -T "" has been used */
-#define GETOUT_METALINK (1<<5) /* set when Metalink download */
-
-/*
- * 'trace' enumeration represents curl's output look'n feel possibilities.
- */
-
-typedef enum {
- TRACE_NONE, /* no trace/verbose output at all */
- TRACE_BIN, /* tcpdump inspired look */
- TRACE_ASCII, /* like *BIN but without the hex output */
- TRACE_PLAIN /* -v/--verbose type */
-} trace;
-
-
-/*
- * 'HttpReq' enumeration represents HTTP request types.
- */
-
-typedef enum {
- HTTPREQ_UNSPEC, /* first in list */
- HTTPREQ_GET,
- HTTPREQ_HEAD,
- HTTPREQ_POST,
- HTTPREQ_SIMPLEPOST,
- HTTPREQ_CUSTOM,
- HTTPREQ_LAST /* last in list */
-} HttpReq;
-
-
-/*
- * Complete struct declarations which have OperationConfig struct members,
- * just in case this header is directly included in some source file.
- */
-
-#include "tool_cfgable.h"
-
-#endif /* HEADER_CURL_TOOL_SDECLS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_setopt.c b/external/libcurl_android/jni/libcurl/src/tool_setopt.c
deleted file mode 100755
index 62d94a65..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_setopt.c
+++ /dev/null
@@ -1,565 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifndef CURL_DISABLE_LIBCURL_OPTION
-
-#define ENABLE_CURLX_PRINTF
-/* use our own printf() functions */
-#include "curlx.h"
-
-#include "tool_cfgable.h"
-#include "tool_easysrc.h"
-#include "tool_setopt.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-/* Lookup tables for converting setopt values back to symbols */
-/* For enums, values may be in any order. */
-/* For bit masks, put combinations first, then single bits, */
-/* and finally any "NONE" value. */
-
-#define NV(e) {#e, e}
-#define NV1(e, v) {#e, (v)}
-#define NVEND {NULL, 0} /* sentinel to mark end of list */
-
-const NameValue setopt_nv_CURLPROXY[] = {
- NV(CURLPROXY_HTTP),
- NV(CURLPROXY_HTTP_1_0),
- NV(CURLPROXY_SOCKS4),
- NV(CURLPROXY_SOCKS5),
- NV(CURLPROXY_SOCKS4A),
- NV(CURLPROXY_SOCKS5_HOSTNAME),
- NVEND,
-};
-
-const NameValueUnsigned setopt_nv_CURLAUTH[] = {
- NV(CURLAUTH_ANY), /* combination */
- NV(CURLAUTH_ANYSAFE), /* combination */
- NV(CURLAUTH_BASIC),
- NV(CURLAUTH_DIGEST),
- NV(CURLAUTH_GSSNEGOTIATE),
- NV(CURLAUTH_NTLM),
- NV(CURLAUTH_DIGEST_IE),
- NV(CURLAUTH_NTLM_WB),
- NV(CURLAUTH_ONLY),
- NV(CURLAUTH_NONE),
- NVEND,
-};
-
-const NameValue setopt_nv_CURL_HTTP_VERSION[] = {
- NV(CURL_HTTP_VERSION_NONE),
- NV(CURL_HTTP_VERSION_1_0),
- NV(CURL_HTTP_VERSION_1_1),
- NVEND,
-};
-
-const NameValue setopt_nv_CURL_SSLVERSION[] = {
- NV(CURL_SSLVERSION_DEFAULT),
- NV(CURL_SSLVERSION_TLSv1),
- NV(CURL_SSLVERSION_SSLv2),
- NV(CURL_SSLVERSION_SSLv3),
- NV(CURL_SSLVERSION_TLSv1_0),
- NV(CURL_SSLVERSION_TLSv1_1),
- NV(CURL_SSLVERSION_TLSv1_2),
- NVEND,
-};
-
-const NameValue setopt_nv_CURL_TIMECOND[] = {
- NV(CURL_TIMECOND_IFMODSINCE),
- NV(CURL_TIMECOND_IFUNMODSINCE),
- NV(CURL_TIMECOND_LASTMOD),
- NV(CURL_TIMECOND_NONE),
- NVEND,
-};
-
-const NameValue setopt_nv_CURLFTPSSL_CCC[] = {
- NV(CURLFTPSSL_CCC_NONE),
- NV(CURLFTPSSL_CCC_PASSIVE),
- NV(CURLFTPSSL_CCC_ACTIVE),
- NVEND,
-};
-
-const NameValue setopt_nv_CURLUSESSL[] = {
- NV(CURLUSESSL_NONE),
- NV(CURLUSESSL_TRY),
- NV(CURLUSESSL_CONTROL),
- NV(CURLUSESSL_ALL),
- NVEND,
-};
-
-const NameValue setopt_nv_CURL_NETRC[] = {
- NV(CURL_NETRC_IGNORED),
- NV(CURL_NETRC_OPTIONAL),
- NV(CURL_NETRC_REQUIRED),
- NVEND,
-};
-
-/* These mappings essentially triplicated - see
- * tool_libinfo.c and tool_paramhlp.c */
-const NameValue setopt_nv_CURLPROTO[] = {
- NV(CURLPROTO_ALL), /* combination */
- NV(CURLPROTO_DICT),
- NV(CURLPROTO_FILE),
- NV(CURLPROTO_FTP),
- NV(CURLPROTO_FTPS),
- NV(CURLPROTO_GOPHER),
- NV(CURLPROTO_HTTP),
- NV(CURLPROTO_HTTPS),
- NV(CURLPROTO_IMAP),
- NV(CURLPROTO_IMAPS),
- NV(CURLPROTO_LDAP),
- NV(CURLPROTO_LDAPS),
- NV(CURLPROTO_POP3),
- NV(CURLPROTO_POP3S),
- NV(CURLPROTO_RTSP),
- NV(CURLPROTO_SCP),
- NV(CURLPROTO_SFTP),
- NV(CURLPROTO_SMTP),
- NV(CURLPROTO_SMTPS),
- NV(CURLPROTO_TELNET),
- NV(CURLPROTO_TFTP),
- NVEND,
-};
-
-/* These options have non-zero default values. */
-static const NameValue setopt_nv_CURLNONZERODEFAULTS[] = {
- NV1(CURLOPT_SSL_VERIFYPEER, 1),
- NV1(CURLOPT_SSL_VERIFYHOST, 1),
- NV1(CURLOPT_SSL_ENABLE_NPN, 1),
- NV1(CURLOPT_SSL_ENABLE_ALPN, 1),
- NVEND
-};
-
-/* Format and add code; jump to nomem on malloc error */
-#define ADD(args) do { \
- ret = easysrc_add args; \
- if(ret) \
- goto nomem; \
-} WHILE_FALSE
-#define ADDF(args) do { \
- ret = easysrc_addf args; \
- if(ret) \
- goto nomem; \
-} WHILE_FALSE
-
-#define DECL0(s) ADD((&easysrc_decl, s))
-#define DECL1(f,a) ADDF((&easysrc_decl, f,a))
-
-#define DATA0(s) ADD((&easysrc_data, s))
-#define DATA1(f,a) ADDF((&easysrc_data, f,a))
-#define DATA2(f,a,b) ADDF((&easysrc_data, f,a,b))
-#define DATA3(f,a,b,c) ADDF((&easysrc_data, f,a,b,c))
-
-#define CODE0(s) ADD((&easysrc_code, s))
-#define CODE1(f,a) ADDF((&easysrc_code, f,a))
-#define CODE2(f,a,b) ADDF((&easysrc_code, f,a,b))
-#define CODE3(f,a,b,c) ADDF((&easysrc_code, f,a,b,c))
-
-#define CLEAN0(s) ADD((&easysrc_clean, s))
-#define CLEAN1(f,a) ADDF((&easysrc_clean, f,a))
-
-#define REM0(s) ADD((&easysrc_toohard, s))
-#define REM1(f,a) ADDF((&easysrc_toohard, f,a))
-#define REM2(f,a,b) ADDF((&easysrc_toohard, f,a,b))
-
-/* Escape string to C string syntax. Return NULL if out of memory.
- * Is this correct for those wacky EBCDIC guys? */
-static char *c_escape(const char *str)
-{
- size_t len = 0;
- const char *s;
- unsigned char c;
- char *escaped, *e;
- /* Allocate space based on worst-case */
- len = strlen(str);
- escaped = malloc(4 * len + 1);
- if(!escaped)
- return NULL;
-
- e = escaped;
- for(s=str; (c=*s) != '\0'; s++) {
- if(c=='\n') {
- strcpy(e, "\\n");
- e += 2;
- }
- else if(c=='\r') {
- strcpy(e, "\\r");
- e += 2;
- }
- else if(c=='\t') {
- strcpy(e, "\\t");
- e += 2;
- }
- else if(c=='\\') {
- strcpy(e, "\\\\");
- e += 2;
- }
- else if(c=='"') {
- strcpy(e, "\\\"");
- e += 2;
- }
- else if(! isprint(c)) {
- snprintf(e, 4, "\\%03o", c);
- e += 4;
- }
- else
- *e++ = c;
- }
- *e = '\0';
- return escaped;
-}
-
-/* setopt wrapper for enum types */
-CURLcode tool_setopt_enum(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- const NameValue *nvlist, long lval)
-{
- CURLcode ret = CURLE_OK;
- bool skip = FALSE;
-
- ret = curl_easy_setopt(curl, tag, lval);
- if(!lval)
- skip = TRUE;
-
- if(config->libcurl && !skip && !ret) {
- /* we only use this for real if --libcurl was used */
- const NameValue *nv = NULL;
- for(nv=nvlist; nv->name; nv++) {
- if(nv->value == lval) break; /* found it */
- }
- if(! nv->name) {
- /* If no definition was found, output an explicit value.
- * This could happen if new values are defined and used
- * but the NameValue list is not updated. */
- CODE2("curl_easy_setopt(hnd, %s, %ldL);", name, lval);
- }
- else {
- CODE2("curl_easy_setopt(hnd, %s, (long)%s);", name, nv->name);
- }
- }
-
- nomem:
- return ret;
-}
-
-/* setopt wrapper for flags */
-CURLcode tool_setopt_flags(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- const NameValue *nvlist, long lval)
-{
- CURLcode ret = CURLE_OK;
- bool skip = FALSE;
-
- ret = curl_easy_setopt(curl, tag, lval);
- if(!lval)
- skip = TRUE;
-
- if(config->libcurl && !skip && !ret) {
- /* we only use this for real if --libcurl was used */
- char preamble[80]; /* should accommodate any symbol name */
- long rest = lval; /* bits not handled yet */
- const NameValue *nv = NULL;
- snprintf(preamble, sizeof(preamble),
- "curl_easy_setopt(hnd, %s, ", name);
- for(nv=nvlist; nv->name; nv++) {
- if((nv->value & ~ rest) == 0) {
- /* all value flags contained in rest */
- rest &= ~ nv->value; /* remove bits handled here */
- CODE3("%s(long)%s%s",
- preamble, nv->name, rest ? " |" : ");");
- if(!rest)
- break; /* handled them all */
- /* replace with all spaces for continuation line */
- snprintf(preamble, sizeof(preamble), "%*s", strlen(preamble), "");
- }
- }
- /* If any bits have no definition, output an explicit value.
- * This could happen if new bits are defined and used
- * but the NameValue list is not updated. */
- if(rest)
- CODE2("%s%ldL);", preamble, rest);
- }
-
- nomem:
- return ret;
-}
-
-/* setopt wrapper for bitmasks */
-CURLcode tool_setopt_bitmask(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- const NameValueUnsigned *nvlist,
- long lval)
-{
- CURLcode ret = CURLE_OK;
- bool skip = FALSE;
-
- ret = curl_easy_setopt(curl, tag, lval);
- if(!lval)
- skip = TRUE;
-
- if(config->libcurl && !skip && !ret) {
- /* we only use this for real if --libcurl was used */
- char preamble[80];
- unsigned long rest = (unsigned long)lval;
- const NameValueUnsigned *nv = NULL;
- snprintf(preamble, sizeof(preamble),
- "curl_easy_setopt(hnd, %s, ", name);
- for(nv=nvlist; nv->name; nv++) {
- if((nv->value & ~ rest) == 0) {
- /* all value flags contained in rest */
- rest &= ~ nv->value; /* remove bits handled here */
- CODE3("%s(long)%s%s",
- preamble, nv->name, rest ? " |" : ");");
- if(!rest)
- break; /* handled them all */
- /* replace with all spaces for continuation line */
- snprintf(preamble, sizeof(preamble), "%*s", strlen(preamble), "");
- }
- }
- /* If any bits have no definition, output an explicit value.
- * This could happen if new bits are defined and used
- * but the NameValue list is not updated. */
- if(rest)
- CODE2("%s%luUL);", preamble, rest);
- }
-
- nomem:
- return ret;
-}
-
-/* setopt wrapper for CURLOPT_HTTPPOST */
-CURLcode tool_setopt_httppost(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- struct curl_httppost *post)
-{
- CURLcode ret = CURLE_OK;
- char *escaped = NULL;
- bool skip = FALSE;
-
- ret = curl_easy_setopt(curl, tag, post);
- if(!post)
- skip = TRUE;
-
- if(config->libcurl && !skip && !ret) {
- struct curl_httppost *pp, *p;
- int i;
- /* May use several httppost lists, if multiple POST actions */
- i = ++ easysrc_form_count;
- DECL1("struct curl_httppost *post%d;", i);
- DATA1("post%d = NULL;", i);
- CLEAN1("curl_formfree(post%d);", i);
- CLEAN1("post%d = NULL;", i);
- if(i == 1)
- DECL0("struct curl_httppost *postend;");
- DATA0("postend = NULL;");
- for(p=post; p; p=p->next) {
- DATA1("curl_formadd(&post%d, &postend,", i);
- DATA1(" CURLFORM_COPYNAME, \"%s\",", p->name);
- for(pp=p; pp; pp=pp->more) {
- /* May be several files uploaded for one name;
- * these are linked through the 'more' pointer */
- Curl_safefree(escaped);
- escaped = c_escape(pp->contents);
- if(!escaped) {
- ret = CURLE_OUT_OF_MEMORY;
- goto nomem;
- }
- if(pp->flags & HTTPPOST_FILENAME) {
- /* file upload as for -F @filename */
- DATA1(" CURLFORM_FILE, \"%s\",", escaped);
- }
- else if(pp->flags & HTTPPOST_READFILE) {
- /* content from file as for -F <filename */
- DATA1(" CURLFORM_FILECONTENT, \"%s\",", escaped);
- }
- else
- DATA1(" CURLFORM_COPYCONTENTS, \"%s\",", escaped);
- if(pp->showfilename) {
- Curl_safefree(escaped);
- escaped = c_escape(pp->showfilename);
- if(!escaped) {
- ret = CURLE_OUT_OF_MEMORY;
- goto nomem;
- }
- DATA1(" CURLFORM_FILENAME, \"%s\",", escaped);
- }
- if(pp->contenttype) {
- Curl_safefree(escaped);
- escaped = c_escape(pp->contenttype);
- if(!escaped) {
- ret = CURLE_OUT_OF_MEMORY;
- goto nomem;
- }
- DATA1(" CURLFORM_CONTENTTYPE, \"%s\",", escaped);
- }
- }
- DATA0(" CURLFORM_END);");
- }
- CODE2("curl_easy_setopt(hnd, %s, post%d);", name, i);
- }
-
- nomem:
- Curl_safefree(escaped);
- return ret;
-}
-
-/* setopt wrapper for curl_slist options */
-CURLcode tool_setopt_slist(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- struct curl_slist *list)
-{
- CURLcode ret = CURLE_OK;
- char *escaped = NULL;
- bool skip = FALSE;
-
- ret = curl_easy_setopt(curl, tag, list);
- if(!list)
- skip = TRUE;
-
- if(config->libcurl && !skip && !ret) {
- struct curl_slist *s;
- int i;
- /* May need several slist variables, so invent name */
- i = ++ easysrc_slist_count;
- DECL1("struct curl_slist *slist%d;", i);
- DATA1("slist%d = NULL;", i);
- CLEAN1("curl_slist_free_all(slist%d);", i);
- CLEAN1("slist%d = NULL;", i);
- for(s=list; s; s=s->next) {
- Curl_safefree(escaped);
- escaped = c_escape(s->data);
- if(!escaped) {
- ret = CURLE_OUT_OF_MEMORY;
- goto nomem;
- }
- DATA3("slist%d = curl_slist_append(slist%d, \"%s\");", i, i, escaped);
- }
- CODE2("curl_easy_setopt(hnd, %s, slist%d);", name, i);
- }
-
- nomem:
- Curl_safefree(escaped);
- return ret;
-}
-
-/* generic setopt wrapper for all other options.
- * Some type information is encoded in the tag value. */
-CURLcode tool_setopt(CURL *curl, bool str, struct GlobalConfig *config,
- const char *name, CURLoption tag, ...)
-{
- va_list arg;
- char buf[256];
- const char *value = NULL;
- bool remark = FALSE;
- bool skip = FALSE;
- bool escape = FALSE;
- char *escaped = NULL;
- CURLcode ret = CURLE_OK;
-
- va_start(arg, tag);
-
- if(tag < CURLOPTTYPE_OBJECTPOINT) {
- /* Value is expected to be a long */
- long lval = va_arg(arg, long);
- long defval = 0L;
- const NameValue *nv = NULL;
- for(nv=setopt_nv_CURLNONZERODEFAULTS; nv->name; nv++) {
- if(!strcmp(name, nv->name)) {
- defval = nv->value;
- break; /* found it */
- }
- }
-
- snprintf(buf, sizeof(buf), "%ldL", lval);
- value = buf;
- ret = curl_easy_setopt(curl, tag, lval);
- if(lval == defval)
- skip = TRUE;
- }
- else if(tag < CURLOPTTYPE_OFF_T) {
- /* Value is some sort of object pointer */
- void *pval = va_arg(arg, void *);
-
- /* function pointers are never printable */
- if(tag >= CURLOPTTYPE_FUNCTIONPOINT) {
- if(pval) {
- value = "functionpointer";
- remark = TRUE;
- }
- else
- skip = TRUE;
- }
-
- else if(pval && str) {
- value = (char *)pval;
- escape = TRUE;
- }
- else if(pval) {
- value = "objectpointer";
- remark = TRUE;
- }
- else
- skip = TRUE;
-
- ret = curl_easy_setopt(curl, tag, pval);
-
- }
- else {
- /* Value is expected to be curl_off_t */
- curl_off_t oval = va_arg(arg, curl_off_t);
- snprintf(buf, sizeof(buf),
- "(curl_off_t)%" CURL_FORMAT_CURL_OFF_T, oval);
- value = buf;
- ret = curl_easy_setopt(curl, tag, oval);
-
- if(!oval)
- skip = TRUE;
- }
-
- va_end(arg);
-
- if(config->libcurl && !skip && !ret) {
- /* we only use this for real if --libcurl was used */
-
- if(remark)
- REM2("%s set to a %s", name, value);
- else {
- if(escape) {
- escaped = c_escape(value);
- if(!escaped) {
- ret = CURLE_OUT_OF_MEMORY;
- goto nomem;
- }
- CODE2("curl_easy_setopt(hnd, %s, \"%s\");", name, escaped);
- }
- else
- CODE2("curl_easy_setopt(hnd, %s, %s);", name, value);
- }
- }
-
- nomem:
- Curl_safefree(escaped);
- return ret;
-}
-
-#endif /* CURL_DISABLE_LIBCURL_OPTION */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_setopt.h b/external/libcurl_android/jni/libcurl/src/tool_setopt.h
deleted file mode 100755
index cd144bc0..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_setopt.h
+++ /dev/null
@@ -1,148 +0,0 @@
-#ifndef HEADER_CURL_TOOL_SETOPT_H
-#define HEADER_CURL_TOOL_SETOPT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-/*
- * Macros used in operate()
- */
-
-#define SETOPT_CHECK(v) do { \
- res = (v); \
- if(res) \
- goto show_error; \
-} WHILE_FALSE
-
-#ifndef CURL_DISABLE_LIBCURL_OPTION
-
-/* Associate symbolic names with option values */
-typedef struct {
- const char *name;
- long value;
-} NameValue;
-
-typedef struct {
- const char *name;
- unsigned long value;
-} NameValueUnsigned;
-
-extern const NameValue setopt_nv_CURLPROXY[];
-extern const NameValue setopt_nv_CURL_HTTP_VERSION[];
-extern const NameValue setopt_nv_CURL_SSLVERSION[];
-extern const NameValue setopt_nv_CURL_TIMECOND[];
-extern const NameValue setopt_nv_CURLFTPSSL_CCC[];
-extern const NameValue setopt_nv_CURLUSESSL[];
-extern const NameValue setopt_nv_CURL_NETRC[];
-extern const NameValue setopt_nv_CURLPROTO[];
-extern const NameValueUnsigned setopt_nv_CURLAUTH[];
-
-/* Map options to NameValue sets */
-#define setopt_nv_CURLOPT_HTTP_VERSION setopt_nv_CURL_HTTP_VERSION
-#define setopt_nv_CURLOPT_HTTPAUTH setopt_nv_CURLAUTH
-#define setopt_nv_CURLOPT_SSLVERSION setopt_nv_CURL_SSLVERSION
-#define setopt_nv_CURLOPT_TIMECONDITION setopt_nv_CURL_TIMECOND
-#define setopt_nv_CURLOPT_FTP_SSL_CCC setopt_nv_CURLFTPSSL_CCC
-#define setopt_nv_CURLOPT_USE_SSL setopt_nv_CURLUSESSL
-#define setopt_nv_CURLOPT_NETRC setopt_nv_CURL_NETRC
-#define setopt_nv_CURLOPT_PROTOCOLS setopt_nv_CURLPROTO
-#define setopt_nv_CURLOPT_REDIR_PROTOCOLS setopt_nv_CURLPROTO
-#define setopt_nv_CURLOPT_PROXYTYPE setopt_nv_CURLPROXY
-#define setopt_nv_CURLOPT_PROXYAUTH setopt_nv_CURLAUTH
-
-/* Intercept setopt calls for --libcurl */
-
-CURLcode tool_setopt_enum(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- const NameValue *nv, long lval);
-CURLcode tool_setopt_flags(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- const NameValue *nv, long lval);
-CURLcode tool_setopt_bitmask(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- const NameValueUnsigned *nv, long lval);
-CURLcode tool_setopt_httppost(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- struct curl_httppost *httppost);
-CURLcode tool_setopt_slist(CURL *curl, struct GlobalConfig *config,
- const char *name, CURLoption tag,
- struct curl_slist *list);
-CURLcode tool_setopt(CURL *curl, bool str, struct GlobalConfig *config,
- const char *name, CURLoption tag, ...);
-
-#define my_setopt(x,y,z) \
- SETOPT_CHECK(tool_setopt(x, FALSE, global, #y, y, z))
-
-#define my_setopt_str(x,y,z) \
- SETOPT_CHECK(tool_setopt(x, TRUE, global, #y, y, z))
-
-#define my_setopt_enum(x,y,z) \
- SETOPT_CHECK(tool_setopt_enum(x, global, #y, y, setopt_nv_ ## y, z))
-
-#define my_setopt_flags(x,y,z) \
- SETOPT_CHECK(tool_setopt_flags(x, global, #y, y, setopt_nv_ ## y, z))
-
-#define my_setopt_bitmask(x,y,z) \
- SETOPT_CHECK(tool_setopt_bitmask(x, global, #y, y, setopt_nv_ ## y, z))
-
-#define my_setopt_httppost(x,y,z) \
- SETOPT_CHECK(tool_setopt_httppost(x, global, #y, y, z))
-
-#define my_setopt_slist(x,y,z) \
- SETOPT_CHECK(tool_setopt_slist(x, global, #y, y, z))
-
-#define res_setopt(x,y,z) tool_setopt(x, FALSE, global, #y, y, z)
-
-#define res_setopt_str(x,y,z) tool_setopt(x, TRUE, global, #y, y, z)
-
-#else /* CURL_DISABLE_LIBCURL_OPTION */
-
-/* No --libcurl, so pass options directly to library */
-
-#define my_setopt(x,y,z) \
- SETOPT_CHECK(curl_easy_setopt(x, y, z))
-
-#define my_setopt_str(x,y,z) \
- SETOPT_CHECK(curl_easy_setopt(x, y, z))
-
-#define my_setopt_enum(x,y,z) \
- SETOPT_CHECK(curl_easy_setopt(x, y, z))
-
-#define my_setopt_flags(x,y,z) \
- SETOPT_CHECK(curl_easy_setopt(x, y, z))
-
-#define my_setopt_bitmask(x,y,z) \
- SETOPT_CHECK(curl_easy_setopt(x, y, z))
-
-#define my_setopt_httppost(x,y,z) \
- SETOPT_CHECK(curl_easy_setopt(x, y, z))
-
-#define my_setopt_slist(x,y,z) \
- SETOPT_CHECK(curl_easy_setopt(x, y, z))
-
-#define res_setopt(x,y,z) curl_easy_setopt(x,y,z)
-
-#define res_setopt_str(x,y,z) curl_easy_setopt(x,y,z)
-
-#endif /* CURL_DISABLE_LIBCURL_OPTION */
-
-#endif /* HEADER_CURL_TOOL_SETOPT_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_setup.h b/external/libcurl_android/jni/libcurl/src/tool_setup.h
deleted file mode 100755
index c94686f9..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_setup.h
+++ /dev/null
@@ -1,75 +0,0 @@
-#ifndef HEADER_CURL_TOOL_SETUP_H
-#define HEADER_CURL_TOOL_SETUP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#define CURL_NO_OLDIES
-
-/*
- * curl_setup.h may define preprocessor macros such as _FILE_OFFSET_BITS and
- * _LARGE_FILES in order to support files larger than 2 GB. On platforms
- * where this happens it is mandatory that these macros are defined before
- * any system header file is included, otherwise file handling function
- * prototypes will be misdeclared and curl tool may not build properly;
- * therefore we must include curl_setup.h before curl.h when building curl.
- */
-
-#include "curl_setup.h" /* from the lib directory */
-
-/*
- * curl tool certainly uses libcurl's external interface.
- */
-
-#include <curl/curl.h> /* external interface */
-
-/*
- * Platform specific stuff.
- */
-
-#if defined(macintosh) && defined(__MRC__)
-# define main(x,y) curl_main(x,y)
-#endif
-
-#ifdef TPF
-# undef select
- /* change which select is used for the curl command line tool */
-# define select(a,b,c,d,e) tpf_select_bsd(a,b,c,d,e)
- /* and turn off the progress meter */
-# define CONF_DEFAULT (0|CONF_NOPROGRESS)
-#endif
-
-#ifndef OS
-# define OS "unknown"
-#endif
-
-#ifndef UNPRINTABLE_CHAR
- /* define what to use for unprintable characters */
-# define UNPRINTABLE_CHAR '.'
-#endif
-
-#ifndef HAVE_STRDUP
-# include "strdup.h"
-# define strdup(ptr) curlx_strdup(ptr)
-#endif
-
-#endif /* HEADER_CURL_TOOL_SETUP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_sleep.c b/external/libcurl_android/jni/libcurl/src/tool_sleep.c
deleted file mode 100755
index 49cdc71b..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_sleep.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef HAVE_SYS_SELECT_H
-# include <sys/select.h>
-#endif
-
-#ifdef HAVE_SYS_POLL_H
-# include <sys/poll.h>
-#elif defined(HAVE_POLL_H)
-# include <poll.h>
-#endif
-
-#ifdef MSDOS
-# include <dos.h>
-#endif
-
-#include "tool_sleep.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-void tool_go_sleep(long ms)
-{
-#if defined(MSDOS)
- delay(ms);
-#elif defined(WIN32)
- Sleep(ms);
-#elif defined(HAVE_POLL_FINE)
- poll((void *)0, 0, (int)ms);
-#else
- struct timeval timeout;
- timeout.tv_sec = ms / 1000L;
- ms = ms % 1000L;
- timeout.tv_usec = ms * 1000L;
- select(0, NULL, NULL, NULL, &timeout);
-#endif
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_sleep.h b/external/libcurl_android/jni/libcurl/src/tool_sleep.h
deleted file mode 100755
index 115a4e40..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_sleep.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef HEADER_CURL_TOOL_SLEEP_H
-#define HEADER_CURL_TOOL_SLEEP_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-void tool_go_sleep(long ms);
-
-#endif /* HEADER_CURL_TOOL_SLEEP_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_urlglob.c b/external/libcurl_android/jni/libcurl/src/tool_urlglob.c
deleted file mode 100755
index 36e83c33..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_urlglob.c
+++ /dev/null
@@ -1,674 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */
-#include <curl/mprintf.h>
-
-#include "tool_urlglob.h"
-#include "tool_vms.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-typedef enum {
- GLOB_OK,
- GLOB_NO_MEM = CURLE_OUT_OF_MEMORY,
- GLOB_ERROR = CURLE_URL_MALFORMAT
-} GlobCode;
-
-#define GLOBERROR(string, column, code) \
- glob->error = string, glob->pos = column, code
-
-void glob_cleanup(URLGlob* glob);
-
-static GlobCode glob_fixed(URLGlob *glob, char *fixed, size_t len)
-{
- URLPattern *pat = &glob->pattern[glob->size];
- pat->type = UPTSet;
- pat->content.Set.size = 1;
- pat->content.Set.ptr_s = 0;
- pat->globindex = -1;
-
- pat->content.Set.elements = malloc(sizeof(char*));
-
- if(!pat->content.Set.elements)
- return GLOBERROR("out of memory", 0, GLOB_NO_MEM);
-
- pat->content.Set.elements[0] = malloc(len+1);
- if(!pat->content.Set.elements[0])
- return GLOBERROR("out of memory", 0, GLOB_NO_MEM);
-
- memcpy(pat->content.Set.elements[0], fixed, len);
- pat->content.Set.elements[0][len] = 0;
-
- return GLOB_OK;
-}
-
-/* multiply
- *
- * Multiplies and checks for overflow.
- */
-static int multiply(unsigned long *amount, long with)
-{
- unsigned long sum = *amount * with;
- if(sum/with != *amount)
- return 1; /* didn't fit, bail out */
- *amount = sum;
- return 0;
-}
-
-static GlobCode glob_set(URLGlob *glob, char **patternp,
- size_t *posp, unsigned long *amount,
- int globindex)
-{
- /* processes a set expression with the point behind the opening '{'
- ','-separated elements are collected until the next closing '}'
- */
- URLPattern *pat;
- bool done = FALSE;
- char *buf = glob->glob_buffer;
- char *pattern = *patternp;
- char *opattern = pattern;
- size_t opos = *posp-1;
-
- pat = &glob->pattern[glob->size];
- /* patterns 0,1,2,... correspond to size=1,3,5,... */
- pat->type = UPTSet;
- pat->content.Set.size = 0;
- pat->content.Set.ptr_s = 0;
- pat->content.Set.elements = NULL;
- pat->globindex = globindex;
-
- while(!done) {
- switch (*pattern) {
- case '\0': /* URL ended while set was still open */
- return GLOBERROR("unmatched brace", opos, GLOB_ERROR);
-
- case '{':
- case '[': /* no nested expressions at this time */
- return GLOBERROR("nested brace", *posp, GLOB_ERROR);
-
- case '}': /* set element completed */
- if(opattern == pattern)
- return GLOBERROR("empty string within braces", *posp, GLOB_ERROR);
-
- /* add 1 to size since it'll be incremented below */
- if(multiply(amount, pat->content.Set.size+1))
- return GLOBERROR("range overflow", 0, GLOB_ERROR);
-
- /* fall-through */
- case ',':
-
- *buf = '\0';
- if(pat->content.Set.elements) {
- char **new_arr = realloc(pat->content.Set.elements,
- (pat->content.Set.size + 1) * sizeof(char*));
- if(!new_arr)
- return GLOBERROR("out of memory", 0, GLOB_NO_MEM);
-
- pat->content.Set.elements = new_arr;
- }
- else
- pat->content.Set.elements = malloc(sizeof(char*));
-
- if(!pat->content.Set.elements)
- return GLOBERROR("out of memory", 0, GLOB_NO_MEM);
-
- pat->content.Set.elements[pat->content.Set.size] =
- strdup(glob->glob_buffer);
- if(!pat->content.Set.elements[pat->content.Set.size])
- return GLOBERROR("out of memory", 0, GLOB_NO_MEM);
- ++pat->content.Set.size;
-
- if(*pattern == '}') {
- pattern++; /* pass the closing brace */
- done = TRUE;
- continue;
- }
-
- buf = glob->glob_buffer;
- ++pattern;
- ++(*posp);
- break;
-
- case ']': /* illegal closing bracket */
- return GLOBERROR("unexpected close bracket", *posp, GLOB_ERROR);
-
- case '\\': /* escaped character, skip '\' */
- if(pattern[1]) {
- ++pattern;
- ++(*posp);
- }
- /* intentional fallthrough */
- default:
- *buf++ = *pattern++; /* copy character to set element */
- ++(*posp);
- }
- }
-
- *patternp = pattern; /* return with the new position */
- return GLOB_OK;
-}
-
-static GlobCode glob_range(URLGlob *glob, char **patternp,
- size_t *posp, unsigned long *amount,
- int globindex)
-{
- /* processes a range expression with the point behind the opening '['
- - char range: e.g. "a-z]", "B-Q]"
- - num range: e.g. "0-9]", "17-2000]"
- - num range with leading zeros: e.g. "001-999]"
- expression is checked for well-formedness and collected until the next ']'
- */
- URLPattern *pat;
- int rc;
- char *pattern = *patternp;
- char *c;
-
- pat = &glob->pattern[glob->size];
- pat->globindex = globindex;
-
- if(ISALPHA(*pattern)) {
- /* character range detected */
- char min_c;
- char max_c;
- int step=1;
-
- pat->type = UPTCharRange;
-
- rc = sscanf(pattern, "%c-%c", &min_c, &max_c);
-
- if((rc == 2) && (pattern[3] == ':')) {
- char *endp;
- unsigned long lstep;
- errno = 0;
- lstep = strtoul(&pattern[3], &endp, 10);
- if(errno || (*endp != ']'))
- step = -1;
- else {
- pattern = endp+1;
- step = (int)lstep;
- if(step > (max_c - min_c))
- step = -1;
- }
- }
- else
- pattern += 4;
-
- *posp += (pattern - *patternp);
-
- if((rc != 2) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a')) ||
- (step < 0) )
- /* the pattern is not well-formed */
- return GLOBERROR("bad range", *posp, GLOB_ERROR);
-
- /* if there was a ":[num]" thing, use that as step or else use 1 */
- pat->content.CharRange.step = step;
- pat->content.CharRange.ptr_c = pat->content.CharRange.min_c = min_c;
- pat->content.CharRange.max_c = max_c;
-
- if(multiply(amount, (pat->content.CharRange.max_c -
- pat->content.CharRange.min_c + 1)))
- return GLOBERROR("range overflow", *posp, GLOB_ERROR);
- }
- else if(ISDIGIT(*pattern)) {
- /* numeric range detected */
- unsigned long min_n;
- unsigned long max_n = 0;
- unsigned long step_n = 0;
- char *endp;
-
- pat->type = UPTNumRange;
- pat->content.NumRange.padlength = 0;
-
- if(*pattern == '0') {
- /* leading zero specified, count them! */
- c = pattern;
- while(ISDIGIT(*c)) {
- c++;
- ++pat->content.NumRange.padlength; /* padding length is set for all
- instances of this pattern */
- }
- }
-
- errno = 0;
- min_n = strtoul(pattern, &endp, 10);
- if(errno || (endp == pattern))
- endp=NULL;
- else {
- if(*endp != '-')
- endp = NULL;
- else {
- pattern = endp+1;
- errno = 0;
- max_n = strtoul(pattern, &endp, 10);
- if(errno || (*endp == ':')) {
- pattern = endp+1;
- errno = 0;
- step_n = strtoul(pattern, &endp, 10);
- if(errno)
- /* over/underflow situation */
- endp = NULL;
- }
- else
- step_n = 1;
- if(endp && (*endp == ']')) {
- pattern= endp+1;
- }
- else
- endp = NULL;
- }
- }
-
- *posp += (pattern - *patternp);
-
- if(!endp || (min_n > max_n) || (step_n > (max_n - min_n)))
- /* the pattern is not well-formed */
- return GLOBERROR("bad range", *posp, GLOB_ERROR);
-
- /* typecasting to ints are fine here since we make sure above that we
- are within 31 bits */
- pat->content.NumRange.ptr_n = pat->content.NumRange.min_n = min_n;
- pat->content.NumRange.max_n = max_n;
- pat->content.NumRange.step = step_n;
-
- if(multiply(amount, (pat->content.NumRange.max_n -
- pat->content.NumRange.min_n + 1)))
- return GLOBERROR("range overflow", *posp, GLOB_ERROR);
- }
- else
- return GLOBERROR("bad range specification", *posp, GLOB_ERROR);
-
- *patternp = pattern;
- return GLOB_OK;
-}
-
-static bool peek_ipv6(const char *str, size_t *skip)
-{
- /*
- * Scan for a potential IPv6 literal.
- * - Valid globs contain a hyphen and <= 1 colon.
- * - IPv6 literals contain no hyphens and >= 2 colons.
- */
- size_t i = 0;
- size_t colons = 0;
- if(str[i++] != '[') {
- return FALSE;
- }
- for(;;) {
- const char c = str[i++];
- if(ISALNUM(c) || c == '.' || c == '%') {
- /* ok */
- }
- else if(c == ':') {
- colons++;
- }
- else if(c == ']') {
- *skip = i;
- return colons >= 2 ? TRUE : FALSE;
- }
- else {
- return FALSE;
- }
- }
-}
-
-static GlobCode glob_parse(URLGlob *glob, char *pattern,
- size_t pos, unsigned long *amount)
-{
- /* processes a literal string component of a URL
- special characters '{' and '[' branch to set/range processing functions
- */
- GlobCode res = GLOB_OK;
- int globindex = 0; /* count "actual" globs */
-
- *amount = 1;
-
- while(*pattern && !res) {
- char *buf = glob->glob_buffer;
- size_t sublen = 0;
- while(*pattern && *pattern != '{') {
- if(*pattern == '[') {
- /* Skip over potential IPv6 literals. */
- size_t skip;
- if(peek_ipv6(pattern, &skip)) {
- memcpy(buf, pattern, skip);
- buf += skip;
- pattern += skip;
- sublen += skip;
- continue;
- }
- break;
- }
- if(*pattern == '}' || *pattern == ']')
- return GLOBERROR("unmatched close brace/bracket", pos, GLOB_ERROR);
-
- /* only allow \ to escape known "special letters" */
- if(*pattern == '\\' &&
- (*(pattern+1) == '{' || *(pattern+1) == '[' ||
- *(pattern+1) == '}' || *(pattern+1) == ']') ) {
-
- /* escape character, skip '\' */
- ++pattern;
- ++pos;
- }
- *buf++ = *pattern++; /* copy character to literal */
- ++pos;
- sublen++;
- }
- if(sublen) {
- /* we got a literal string, add it as a single-item list */
- *buf = '\0';
- res = glob_fixed(glob, glob->glob_buffer, sublen);
- }
- else {
- switch (*pattern) {
- case '\0': /* done */
- break;
-
- case '{':
- /* process set pattern */
- pattern++;
- pos++;
- res = glob_set(glob, &pattern, &pos, amount, globindex++);
- break;
-
- case '[':
- /* process range pattern */
- pattern++;
- pos++;
- res = glob_range(glob, &pattern, &pos, amount, globindex++);
- break;
- }
- }
-
- if(++glob->size > GLOB_PATTERN_NUM)
- return GLOBERROR("too many globs", pos, GLOB_ERROR);
- }
- return res;
-}
-
-int glob_url(URLGlob** glob, char* url, unsigned long *urlnum, FILE *error)
-{
- /*
- * We can deal with any-size, just make a buffer with the same length
- * as the specified URL!
- */
- URLGlob *glob_expand;
- unsigned long amount = 0;
- char *glob_buffer;
- GlobCode res;
-
- *glob = NULL;
-
- glob_buffer = malloc(strlen(url) + 1);
- if(!glob_buffer)
- return CURLE_OUT_OF_MEMORY;
-
- glob_expand = calloc(1, sizeof(URLGlob));
- if(!glob_expand) {
- Curl_safefree(glob_buffer);
- return CURLE_OUT_OF_MEMORY;
- }
- glob_expand->urllen = strlen(url);
- glob_expand->glob_buffer = glob_buffer;
-
- res = glob_parse(glob_expand, url, 1, &amount);
- if(!res)
- *urlnum = amount;
- else {
- if(error && glob_expand->error) {
- char text[128];
- const char *t;
- if(glob_expand->pos) {
- snprintf(text, sizeof(text), "%s in column %zu", glob_expand->error,
- glob_expand->pos);
- t = text;
- }
- else
- t = glob_expand->error;
-
- /* send error description to the error-stream */
- fprintf(error, "curl: (%d) [globbing] %s\n", res, t);
- }
- /* it failed, we cleanup */
- glob_cleanup(glob_expand);
- *urlnum = 1;
- return res;
- }
-
- *glob = glob_expand;
- return CURLE_OK;
-}
-
-void glob_cleanup(URLGlob* glob)
-{
- size_t i;
- int elem;
-
- /* the < condition is required since i underflows! */
- for(i = glob->size - 1; i < glob->size; --i) {
- if((glob->pattern[i].type == UPTSet) &&
- (glob->pattern[i].content.Set.elements)) {
- for(elem = glob->pattern[i].content.Set.size - 1;
- elem >= 0;
- --elem) {
- Curl_safefree(glob->pattern[i].content.Set.elements[elem]);
- }
- Curl_safefree(glob->pattern[i].content.Set.elements);
- }
- }
- Curl_safefree(glob->glob_buffer);
- Curl_safefree(glob);
-}
-
-int glob_next_url(char **globbed, URLGlob *glob)
-{
- URLPattern *pat;
- size_t i;
- size_t j;
- size_t len;
- size_t buflen = glob->urllen + 1;
- char *buf = glob->glob_buffer;
-
- *globbed = NULL;
-
- if(!glob->beenhere)
- glob->beenhere = 1;
- else {
- bool carry = TRUE;
-
- /* implement a counter over the index ranges of all patterns,
- starting with the rightmost pattern */
- /* the < condition is required since i underflows! */
- for(i = glob->size - 1; carry && (i < glob->size); --i) {
- carry = FALSE;
- pat = &glob->pattern[i];
- switch (pat->type) {
- case UPTSet:
- if((pat->content.Set.elements) &&
- (++pat->content.Set.ptr_s == pat->content.Set.size)) {
- pat->content.Set.ptr_s = 0;
- carry = TRUE;
- }
- break;
- case UPTCharRange:
- pat->content.CharRange.ptr_c = (char)(pat->content.CharRange.step +
- (int)((unsigned char)pat->content.CharRange.ptr_c));
- if(pat->content.CharRange.ptr_c > pat->content.CharRange.max_c) {
- pat->content.CharRange.ptr_c = pat->content.CharRange.min_c;
- carry = TRUE;
- }
- break;
- case UPTNumRange:
- pat->content.NumRange.ptr_n += pat->content.NumRange.step;
- if(pat->content.NumRange.ptr_n > pat->content.NumRange.max_n) {
- pat->content.NumRange.ptr_n = pat->content.NumRange.min_n;
- carry = TRUE;
- }
- break;
- default:
- printf("internal error: invalid pattern type (%d)\n", (int)pat->type);
- return CURLE_FAILED_INIT;
- }
- }
- if(carry) { /* first pattern ptr has run into overflow, done! */
- /* TODO: verify if this should actally return CURLE_OK. */
- return CURLE_OK; /* CURLE_OK to match previous behavior */
- }
- }
-
- for(j = 0; j < glob->size; ++j) {
- pat = &glob->pattern[j];
- switch(pat->type) {
- case UPTSet:
- if(pat->content.Set.elements) {
- len = strlen(pat->content.Set.elements[pat->content.Set.ptr_s]);
- snprintf(buf, buflen, "%s",
- pat->content.Set.elements[pat->content.Set.ptr_s]);
- buf += len;
- buflen -= len;
- }
- break;
- case UPTCharRange:
- *buf++ = pat->content.CharRange.ptr_c;
- break;
- case UPTNumRange:
- len = snprintf(buf, buflen, "%0*ld",
- pat->content.NumRange.padlength,
- pat->content.NumRange.ptr_n);
- buf += len;
- buflen -= len;
- break;
- default:
- printf("internal error: invalid pattern type (%d)\n", (int)pat->type);
- return CURLE_FAILED_INIT;
- }
- }
- *buf = '\0';
-
- *globbed = strdup(glob->glob_buffer);
- if(!*globbed)
- return CURLE_OUT_OF_MEMORY;
-
- return CURLE_OK;
-}
-
-int glob_match_url(char **result, char *filename, URLGlob *glob)
-{
- char *target;
- size_t allocsize;
- char numbuf[18];
- char *appendthis = NULL;
- size_t appendlen = 0;
- size_t stringlen = 0;
-
- *result = NULL;
-
- /* We cannot use the glob_buffer for storage here since the filename may
- * be longer than the URL we use. We allocate a good start size, then
- * we need to realloc in case of need.
- */
- allocsize = strlen(filename) + 1; /* make it at least one byte to store the
- trailing zero */
- target = malloc(allocsize);
- if(!target)
- return CURLE_OUT_OF_MEMORY;
-
- while(*filename) {
- if(*filename == '#' && ISDIGIT(filename[1])) {
- unsigned long i;
- char *ptr = filename;
- unsigned long num = strtoul(&filename[1], &filename, 10);
- URLPattern *pat =NULL;
-
- if(num < glob->size) {
- num--; /* make it zero based */
- /* find the correct glob entry */
- for(i=0; i<glob->size; i++) {
- if(glob->pattern[i].globindex == (int)num) {
- pat = &glob->pattern[i];
- break;
- }
- }
- }
-
- if(pat) {
- switch (pat->type) {
- case UPTSet:
- if(pat->content.Set.elements) {
- appendthis = pat->content.Set.elements[pat->content.Set.ptr_s];
- appendlen =
- strlen(pat->content.Set.elements[pat->content.Set.ptr_s]);
- }
- break;
- case UPTCharRange:
- numbuf[0] = pat->content.CharRange.ptr_c;
- numbuf[1] = 0;
- appendthis = numbuf;
- appendlen = 1;
- break;
- case UPTNumRange:
- snprintf(numbuf, sizeof(numbuf), "%0*d",
- pat->content.NumRange.padlength,
- pat->content.NumRange.ptr_n);
- appendthis = numbuf;
- appendlen = strlen(numbuf);
- break;
- default:
- fprintf(stderr, "internal error: invalid pattern type (%d)\n",
- (int)pat->type);
- Curl_safefree(target);
- return CURLE_FAILED_INIT;
- }
- }
- else {
- /* #[num] out of range, use the #[num] in the output */
- filename = ptr;
- appendthis = filename++;
- appendlen = 1;
- }
- }
- else {
- appendthis = filename++;
- appendlen = 1;
- }
- if(appendlen + stringlen >= allocsize) {
- char *newstr;
- /* we append a single byte to allow for the trailing byte to be appended
- at the end of this function outside the while() loop */
- allocsize = (appendlen + stringlen) * 2;
- newstr = realloc(target, allocsize + 1);
- if(!newstr) {
- Curl_safefree(target);
- return CURLE_OUT_OF_MEMORY;
- }
- target = newstr;
- }
- memcpy(&target[stringlen], appendthis, appendlen);
- stringlen += appendlen;
- }
- target[stringlen]= '\0';
- *result = target;
- return CURLE_OK;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_urlglob.h b/external/libcurl_android/jni/libcurl/src/tool_urlglob.h
deleted file mode 100755
index 9fa6f83b..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_urlglob.h
+++ /dev/null
@@ -1,77 +0,0 @@
-#ifndef HEADER_CURL_TOOL_URLGLOB_H
-#define HEADER_CURL_TOOL_URLGLOB_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-typedef enum {
- UPTSet = 1,
- UPTCharRange,
- UPTNumRange
-} URLPatternType;
-
-typedef struct {
- URLPatternType type;
- int globindex; /* the number of this particular glob or -1 if not used
- within {} or [] */
- union {
- struct {
- char **elements;
- int size;
- int ptr_s;
- } Set;
- struct {
- char min_c;
- char max_c;
- char ptr_c;
- int step;
- } CharRange;
- struct {
- unsigned long min_n;
- unsigned long max_n;
- int padlength;
- unsigned long ptr_n;
- unsigned long step;
- } NumRange ;
- } content;
-} URLPattern;
-
-/* the total number of globs supported */
-#define GLOB_PATTERN_NUM 100
-
-typedef struct {
- URLPattern pattern[GLOB_PATTERN_NUM];
- size_t size;
- size_t urllen;
- char *glob_buffer;
- char beenhere;
- const char *error; /* error message */
- size_t pos; /* column position of error or 0 */
-} URLGlob;
-
-int glob_url(URLGlob**, char*, unsigned long *, FILE *);
-int glob_next_url(char **, URLGlob *);
-int glob_match_url(char **, char*, URLGlob *);
-void glob_cleanup(URLGlob* glob);
-
-#endif /* HEADER_CURL_TOOL_URLGLOB_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_util.c b/external/libcurl_android/jni/libcurl/src/tool_util.c
deleted file mode 100755
index 00d205eb..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_util.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#include "tool_util.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#if defined(WIN32) && !defined(MSDOS)
-
-struct timeval tool_tvnow(void)
-{
- /*
- ** GetTickCount() is available on _all_ Windows versions from W95 up
- ** to nowadays. Returns milliseconds elapsed since last system boot,
- ** increases monotonically and wraps once 49.7 days have elapsed.
- */
- struct timeval now;
- DWORD milliseconds = GetTickCount();
- now.tv_sec = milliseconds / 1000;
- now.tv_usec = (milliseconds % 1000) * 1000;
- return now;
-}
-
-#elif defined(HAVE_CLOCK_GETTIME_MONOTONIC)
-
-struct timeval tool_tvnow(void)
-{
- /*
- ** clock_gettime() is granted to be increased monotonically when the
- ** monotonic clock is queried. Time starting point is unspecified, it
- ** could be the system start-up time, the Epoch, or something else,
- ** in any case the time starting point does not change once that the
- ** system has started up.
- */
- struct timeval now;
- struct timespec tsnow;
- if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
- now.tv_sec = tsnow.tv_sec;
- now.tv_usec = tsnow.tv_nsec / 1000;
- }
- /*
- ** Even when the configure process has truly detected monotonic clock
- ** availability, it might happen that it is not actually available at
- ** run-time. When this occurs simply fallback to other time source.
- */
-#ifdef HAVE_GETTIMEOFDAY
- else
- (void)gettimeofday(&now, NULL);
-#else
- else {
- now.tv_sec = (long)time(NULL);
- now.tv_usec = 0;
- }
-#endif
- return now;
-}
-
-#elif defined(HAVE_GETTIMEOFDAY)
-
-struct timeval tool_tvnow(void)
-{
- /*
- ** gettimeofday() is not granted to be increased monotonically, due to
- ** clock drifting and external source time synchronization it can jump
- ** forward or backward in time.
- */
- struct timeval now;
- (void)gettimeofday(&now, NULL);
- return now;
-}
-
-#else
-
-struct timeval tool_tvnow(void)
-{
- /*
- ** time() returns the value of time in seconds since the Epoch.
- */
- struct timeval now;
- now.tv_sec = (long)time(NULL);
- now.tv_usec = 0;
- return now;
-}
-
-#endif
-
-/*
- * Make sure that the first argument is the more recent time, as otherwise
- * we'll get a weird negative time-diff back...
- *
- * Returns: the time difference in number of milliseconds.
- */
-long tool_tvdiff(struct timeval newer, struct timeval older)
-{
- return (newer.tv_sec-older.tv_sec)*1000+
- (newer.tv_usec-older.tv_usec)/1000;
-}
-
-/*
- * Same as tool_tvdiff but with full usec resolution.
- *
- * Returns: the time difference in seconds with subsecond resolution.
- */
-double tool_tvdiff_secs(struct timeval newer, struct timeval older)
-{
- if(newer.tv_sec != older.tv_sec)
- return (double)(newer.tv_sec-older.tv_sec)+
- (double)(newer.tv_usec-older.tv_usec)/1000000.0;
- else
- return (double)(newer.tv_usec-older.tv_usec)/1000000.0;
-}
-
-/* return the number of seconds in the given input timeval struct */
-long tool_tvlong(struct timeval t1)
-{
- return t1.tv_sec;
-}
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_util.h b/external/libcurl_android/jni/libcurl/src/tool_util.h
deleted file mode 100755
index d8bb0366..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_util.h
+++ /dev/null
@@ -1,56 +0,0 @@
-#ifndef HEADER_CURL_TOOL_UTIL_H
-#define HEADER_CURL_TOOL_UTIL_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-struct timeval tool_tvnow(void);
-
-/*
- * Make sure that the first argument (t1) is the more recent time and t2 is
- * the older time, as otherwise you get a weird negative time-diff back...
- *
- * Returns: the time difference in number of milliseconds.
- */
-long tool_tvdiff(struct timeval t1, struct timeval t2);
-
-/*
- * Same as tool_tvdiff but with full usec resolution.
- *
- * Returns: the time difference in seconds with subsecond resolution.
- */
-double tool_tvdiff_secs(struct timeval t1, struct timeval t2);
-
-long tool_tvlong(struct timeval t1);
-
-#undef tvnow
-#undef tvdiff
-#undef tvdiff_secs
-#undef tvlong
-
-#define tvnow() tool_tvnow()
-#define tvdiff(a,b) tool_tvdiff((a), (b))
-#define tvdiff_secs(a,b) tool_tvdiff_secs((a), (b))
-#define tvlong(a) tool_tvlong((a))
-
-#endif /* HEADER_CURL_TOOL_UTIL_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_version.h b/external/libcurl_android/jni/libcurl/src/tool_version.h
deleted file mode 100755
index 0c09149e..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_version.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef HEADER_CURL_TOOL_VERSION_H
-#define HEADER_CURL_TOOL_VERSION_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include <curl/curlver.h>
-
-#define CURL_NAME "curl"
-#define CURL_COPYRIGHT LIBCURL_COPYRIGHT
-#define CURL_VERSION "7.38.0"
-#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
-#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
-#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
-#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "
-
-#endif /* HEADER_CURL_TOOL_VERSION_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_vms.c b/external/libcurl_android/jni/libcurl/src/tool_vms.c
deleted file mode 100755
index 4a6a6f58..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_vms.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef __VMS
-
-#if defined(__DECC) && !defined(__VAX) && \
- defined(__CRTL_VER) && (__CRTL_VER >= 70301000)
-#include <unixlib.h>
-#endif
-
-#define ENABLE_CURLX_PRINTF
-#include "curlx.h"
-
-#include "curlmsg_vms.h"
-#include "tool_vms.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-void decc$__posix_exit(int __status);
-void decc$exit(int __status);
-
-static int vms_shell = -1;
-
-/* VMS has a DCL shell and and also has Unix shells ported to it.
- * When curl is running under a Unix shell, we want it to be as much
- * like Unix as possible.
- */
-int is_vms_shell(void)
-{
- char *shell;
-
- /* Have we checked the shell yet? */
- if(vms_shell >= 0)
- return vms_shell;
-
- shell = getenv("SHELL");
-
- /* No shell, means DCL */
- if(shell == NULL) {
- vms_shell = 1;
- return 1;
- }
-
- /* Have to make sure some one did not set shell to DCL */
- if(strcmp(shell, "DCL") == 0) {
- vms_shell = 1;
- return 1;
- }
-
- vms_shell = 0;
- return 0;
-}
-
-/*
- * VMS has two exit() routines. When running under a Unix style shell, then
- * Unix style and the __posix_exit() routine is used.
- *
- * When running under the DCL shell, then the VMS encoded codes and decc$exit()
- * is used.
- *
- * We can not use exit() or return a code from main() because the actual
- * routine called depends on both the compiler version, compile options, and
- * feature macro settings, and one of the exit routines is hidden at compile
- * time.
- *
- * Since we want Curl to work properly under the VMS DCL shell and Unix
- * shells under VMS, this routine should compile correctly regardless of
- * the settings.
- */
-
-void vms_special_exit(int code, int vms_show)
-{
- int vms_code;
-
- /* The Posix exit mode is only available after VMS 7.0 */
-#if __CRTL_VER >= 70000000
- if(is_vms_shell() == 0) {
- decc$__posix_exit(code);
- }
-#endif
-
- if(code > CURL_LAST) { /* If CURL_LAST exceeded then */
- vms_code = CURL_LAST; /* curlmsg.h is out of sync. */
- }
- else {
- vms_code = vms_cond[code] | vms_show;
- }
- decc$exit(vms_code);
-}
-
-#if defined(__DECC) && !defined(__VAX) && \
- defined(__CRTL_VER) && (__CRTL_VER >= 70301000)
-
-/*
- * 2004-09-19 SMS.
- *
- * decc_init()
- *
- * On non-VAX systems, use LIB$INITIALIZE to set a collection of C
- * RTL features without using the DECC$* logical name method, nor
- * requiring the user to define the corresponding logical names.
- */
-
-/* Structure to hold a DECC$* feature name and its desired value. */
-typedef struct {
- char *name;
- int value;
-} decc_feat_t;
-
-/* Array of DECC$* feature names and their desired values. */
-static decc_feat_t decc_feat_array[] = {
- /* Preserve command-line case with SET PROCESS/PARSE_STYLE=EXTENDED */
- { "DECC$ARGV_PARSE_STYLE", 1 },
- /* Preserve case for file names on ODS5 disks. */
- { "DECC$EFS_CASE_PRESERVE", 1 },
- /* Enable multiple dots (and most characters) in ODS5 file names,
- while preserving VMS-ness of ";version". */
- { "DECC$EFS_CHARSET", 1 },
- /* List terminator. */
- { (char *)NULL, 0 }
-};
-
-/* Flag to sense if decc_init() was called. */
-static int decc_init_done = -1;
-
-/* LIB$INITIALIZE initialization function. */
-static void decc_init(void)
-{
- int feat_index;
- int feat_value;
- int feat_value_max;
- int feat_value_min;
- int i;
- int sts;
-
- /* Set the global flag to indicate that LIB$INITIALIZE worked. */
- decc_init_done = 1;
-
- /* Loop through all items in the decc_feat_array[]. */
- for(i = 0; decc_feat_array[i].name != NULL; i++) {
-
- /* Get the feature index. */
- feat_index = decc$feature_get_index( decc_feat_array[i].name);
-
- if(feat_index >= 0) {
- /* Valid item. Collect its properties. */
- feat_value = decc$feature_get_value( feat_index, 1);
- feat_value_min = decc$feature_get_value( feat_index, 2);
- feat_value_max = decc$feature_get_value( feat_index, 3);
-
- if((decc_feat_array[i].value >= feat_value_min) &&
- (decc_feat_array[i].value <= feat_value_max)) {
- /* Valid value. Set it if necessary. */
- if(feat_value != decc_feat_array[i].value) {
- sts = decc$feature_set_value( feat_index, 1,
- decc_feat_array[i].value);
- }
- }
- else {
- /* Invalid DECC feature value. */
- printf(" INVALID DECC FEATURE VALUE, %d: %d <= %s <= %d.\n",
- feat_value,
- feat_value_min, decc_feat_array[i].name, feat_value_max);
- }
- }
- else {
- /* Invalid DECC feature name. */
- printf(" UNKNOWN DECC FEATURE: %s.\n", decc_feat_array[i].name);
- }
-
- }
-}
-
-/* Get "decc_init()" into a valid, loaded LIB$INITIALIZE PSECT. */
-
-#pragma nostandard
-
-/* Establish the LIB$INITIALIZE PSECTs, with proper alignment and
- other attributes. Note that "nopic" is significant only on VAX. */
-#pragma extern_model save
-#pragma extern_model strict_refdef "LIB$INITIALIZ" 2, nopic, nowrt
-const int spare[8] = {0};
-#pragma extern_model strict_refdef "LIB$INITIALIZE" 2, nopic, nowrt
-void (*const x_decc_init)() = decc_init;
-#pragma extern_model restore
-
-/* Fake reference to ensure loading the LIB$INITIALIZE PSECT. */
-#pragma extern_model save
-int LIB$INITIALIZE(void);
-#pragma extern_model strict_refdef
-int dmy_lib$initialize = (int) LIB$INITIALIZE;
-#pragma extern_model restore
-
-#pragma standard
-
-#endif /* __DECC && !__VAX && __CRTL_VER && __CRTL_VER >= 70301000 */
-
-#endif /* __VMS */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_vms.h b/external/libcurl_android/jni/libcurl/src/tool_vms.h
deleted file mode 100755
index 1afd75ec..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_vms.h
+++ /dev/null
@@ -1,47 +0,0 @@
-#ifndef HEADER_CURL_TOOL_VMS_H
-#define HEADER_CURL_TOOL_VMS_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef __VMS
-
-/*
- * Forward-declaration of global variable vms_show defined
- * in tool_main.c, used in main() as parameter for function
- * vms_special_exit() to allow proper curl tool exiting.
- */
-extern int vms_show;
-
-int is_vms_shell(void);
-void vms_special_exit(int code, int vms_show);
-
-#undef exit
-#define exit(__code) vms_special_exit((__code), (0))
-
-#define VMS_STS(c,f,e,s) (((c&0xF)<<28)|((f&0xFFF)<<16)|((e&0x1FFF)<3)|(s&7))
-#define VMSSTS_HIDE VMS_STS(1,0,0,0)
-
-#endif /* __VMS */
-
-#endif /* HEADER_CURL_TOOL_VMS_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_writeenv.c b/external/libcurl_android/jni/libcurl/src/tool_writeenv.c
deleted file mode 100755
index a9462d00..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_writeenv.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef USE_ENVIRONMENT
-
-#ifdef __riscos__
-# include <kernel.h>
-#endif
-
-#define _MPRINTF_REPLACE /* use our functions only */
-#include <curl/mprintf.h>
-
-#include "tool_writeenv.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-static const struct
-{
- const char * name;
- CURLINFO id;
- enum {
- writeenv_NONE,
- writeenv_DOUBLE,
- writeenv_LONG,
- writeenv_STRING
- } type;
-} variables[14] =
-{
- {"curl_url_effective", CURLINFO_EFFECTIVE_URL, writeenv_STRING},
- {"curl_http_code", CURLINFO_RESPONSE_CODE, writeenv_LONG},
- {"curl_time_total", CURLINFO_TOTAL_TIME, writeenv_DOUBLE},
- {"curl_time_namelookup", CURLINFO_NAMELOOKUP_TIME, writeenv_DOUBLE},
- {"curl_time_connect", CURLINFO_CONNECT_TIME, writeenv_DOUBLE},
- {"curl_time_pretransfer", CURLINFO_PRETRANSFER_TIME, writeenv_DOUBLE},
- {"curl_time_starttransfer", CURLINFO_STARTTRANSFER_TIME, writeenv_DOUBLE},
- {"curl_size_header", CURLINFO_HEADER_SIZE, writeenv_LONG},
- {"curl_size_request", CURLINFO_REQUEST_SIZE, writeenv_LONG},
- {"curl_size_download", CURLINFO_SIZE_DOWNLOAD, writeenv_DOUBLE},
- {"curl_size_upload", CURLINFO_SIZE_UPLOAD, writeenv_DOUBLE},
- {"curl_speed_download", CURLINFO_SPEED_DOWNLOAD, writeenv_DOUBLE},
- {"curl_speed_upload", CURLINFO_SPEED_UPLOAD, writeenv_DOUBLE},
- {NULL, 0, writeenv_NONE}
- };
-
-static void internalSetEnv(const char * name, char * value)
-{
- /* Add your OS-specific code here. */
-#ifdef __riscos__
- _kernel_setenv(name, value);
-#elif defined (CURLDEBUG)
- curl_memlog("ENV %s = %s\n", name, value);
-#endif
- return;
-}
-
-void ourWriteEnv(CURL *curl)
-{
- unsigned int i;
- char *string, numtext[10];
- long longinfo;
- double doubleinfo;
-
- for(i=0; variables[i].name; i++) {
- switch (variables[i].type) {
- case writeenv_STRING:
- if(curl_easy_getinfo(curl, variables[i].id, &string) == CURLE_OK)
- internalSetEnv(variables[i].name, string);
- else
- internalSetEnv(variables[i].name, NULL);
- break;
-
- case writeenv_LONG:
- if(curl_easy_getinfo(curl, variables[i].id, &longinfo) == CURLE_OK) {
- curl_msprintf(numtext, "%5ld", longinfo);
- internalSetEnv(variables[i].name, numtext);
- }
- else
- internalSetEnv(variables[i].name, NULL);
- break;
- case writeenv_DOUBLE:
- if(curl_easy_getinfo(curl, variables[i].id, &doubleinfo) == CURLE_OK) {
- curl_msprintf(numtext, "%6.2f", doubleinfo);
- internalSetEnv(variables[i].name, numtext);
- }
- else
- internalSetEnv(variables[i].name, NULL);
- break;
- default:
- break;
- }
- }
-
- return;
-}
-
-#endif
diff --git a/external/libcurl_android/jni/libcurl/src/tool_writeenv.h b/external/libcurl_android/jni/libcurl/src/tool_writeenv.h
deleted file mode 100755
index c0a952fe..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_writeenv.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef HEADER_CURL_TOOL_WRITEENV_H
-#define HEADER_CURL_TOOL_WRITEENV_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef USE_ENVIRONMENT
-
-void ourWriteEnv(CURL *curl);
-
-#else
-# define ourWriteEnv(x) Curl_nop_stmt
-#endif
-
-#endif /* HEADER_CURL_TOOL_WRITEENV_H */
-
diff --git a/external/libcurl_android/jni/libcurl/src/tool_writeout.c b/external/libcurl_android/jni/libcurl/src/tool_writeout.c
deleted file mode 100755
index f29d1ac3..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_writeout.c
+++ /dev/null
@@ -1,327 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */
-#include <curl/mprintf.h>
-
-#include "tool_cfgable.h"
-#include "tool_writeout.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-typedef enum {
- VAR_NONE, /* must be the first */
- VAR_TOTAL_TIME,
- VAR_NAMELOOKUP_TIME,
- VAR_CONNECT_TIME,
- VAR_APPCONNECT_TIME,
- VAR_PRETRANSFER_TIME,
- VAR_STARTTRANSFER_TIME,
- VAR_SIZE_DOWNLOAD,
- VAR_SIZE_UPLOAD,
- VAR_SPEED_DOWNLOAD,
- VAR_SPEED_UPLOAD,
- VAR_HTTP_CODE,
- VAR_HTTP_CODE_PROXY,
- VAR_HEADER_SIZE,
- VAR_REQUEST_SIZE,
- VAR_EFFECTIVE_URL,
- VAR_CONTENT_TYPE,
- VAR_NUM_CONNECTS,
- VAR_REDIRECT_TIME,
- VAR_REDIRECT_COUNT,
- VAR_FTP_ENTRY_PATH,
- VAR_REDIRECT_URL,
- VAR_SSL_VERIFY_RESULT,
- VAR_EFFECTIVE_FILENAME,
- VAR_PRIMARY_IP,
- VAR_PRIMARY_PORT,
- VAR_LOCAL_IP,
- VAR_LOCAL_PORT,
- VAR_NUM_OF_VARS /* must be the last */
-} replaceid;
-
-struct variable {
- const char *name;
- replaceid id;
-};
-
-
-static const struct variable replacements[]={
- {"url_effective", VAR_EFFECTIVE_URL},
- {"http_code", VAR_HTTP_CODE},
- {"response_code", VAR_HTTP_CODE},
- {"http_connect", VAR_HTTP_CODE_PROXY},
- {"time_total", VAR_TOTAL_TIME},
- {"time_namelookup", VAR_NAMELOOKUP_TIME},
- {"time_connect", VAR_CONNECT_TIME},
- {"time_appconnect", VAR_APPCONNECT_TIME},
- {"time_pretransfer", VAR_PRETRANSFER_TIME},
- {"time_starttransfer", VAR_STARTTRANSFER_TIME},
- {"size_header", VAR_HEADER_SIZE},
- {"size_request", VAR_REQUEST_SIZE},
- {"size_download", VAR_SIZE_DOWNLOAD},
- {"size_upload", VAR_SIZE_UPLOAD},
- {"speed_download", VAR_SPEED_DOWNLOAD},
- {"speed_upload", VAR_SPEED_UPLOAD},
- {"content_type", VAR_CONTENT_TYPE},
- {"num_connects", VAR_NUM_CONNECTS},
- {"time_redirect", VAR_REDIRECT_TIME},
- {"num_redirects", VAR_REDIRECT_COUNT},
- {"ftp_entry_path", VAR_FTP_ENTRY_PATH},
- {"redirect_url", VAR_REDIRECT_URL},
- {"ssl_verify_result", VAR_SSL_VERIFY_RESULT},
- {"filename_effective", VAR_EFFECTIVE_FILENAME},
- {"remote_ip", VAR_PRIMARY_IP},
- {"remote_port", VAR_PRIMARY_PORT},
- {"local_ip", VAR_LOCAL_IP},
- {"local_port", VAR_LOCAL_PORT},
- {NULL, VAR_NONE}
-};
-
-void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo)
-{
- FILE *stream = stdout;
- const char *ptr = writeinfo;
- char *stringp = NULL;
- long longinfo;
- double doubleinfo;
-
- while(ptr && *ptr) {
- if('%' == *ptr) {
- if('%' == ptr[1]) {
- /* an escaped %-letter */
- fputc('%', stream);
- ptr += 2;
- }
- else {
- /* this is meant as a variable to output */
- char *end;
- char keepit;
- int i;
- if(('{' == ptr[1]) && ((end = strchr(ptr, '}')) != NULL)) {
- bool match = FALSE;
- ptr += 2; /* pass the % and the { */
- keepit = *end;
- *end = 0; /* zero terminate */
- for(i = 0; replacements[i].name; i++) {
- if(curl_strequal(ptr, replacements[i].name)) {
- match = TRUE;
- switch(replacements[i].id) {
- case VAR_EFFECTIVE_URL:
- if((CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &stringp))
- && stringp)
- fputs(stringp, stream);
- break;
- case VAR_HTTP_CODE:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &longinfo))
- fprintf(stream, "%03ld", longinfo);
- break;
- case VAR_HTTP_CODE_PROXY:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE,
- &longinfo))
- fprintf(stream, "%03ld", longinfo);
- break;
- case VAR_HEADER_SIZE:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &longinfo))
- fprintf(stream, "%ld", longinfo);
- break;
- case VAR_REQUEST_SIZE:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &longinfo))
- fprintf(stream, "%ld", longinfo);
- break;
- case VAR_NUM_CONNECTS:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &longinfo))
- fprintf(stream, "%ld", longinfo);
- break;
- case VAR_REDIRECT_COUNT:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &longinfo))
- fprintf(stream, "%ld", longinfo);
- break;
- case VAR_REDIRECT_TIME:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME,
- &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_TOTAL_TIME:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_NAMELOOKUP_TIME:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME,
- &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_CONNECT_TIME:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_APPCONNECT_TIME:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME,
- &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_PRETRANSFER_TIME:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME,
- &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_STARTTRANSFER_TIME:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME,
- &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_SIZE_UPLOAD:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &doubleinfo))
- fprintf(stream, "%.0f", doubleinfo);
- break;
- case VAR_SIZE_DOWNLOAD:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD,
- &doubleinfo))
- fprintf(stream, "%.0f", doubleinfo);
- break;
- case VAR_SPEED_DOWNLOAD:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD,
- &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_SPEED_UPLOAD:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &doubleinfo))
- fprintf(stream, "%.3f", doubleinfo);
- break;
- case VAR_CONTENT_TYPE:
- if((CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &stringp))
- && stringp)
- fputs(stringp, stream);
- break;
- case VAR_FTP_ENTRY_PATH:
- if((CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &stringp))
- && stringp)
- fputs(stringp, stream);
- break;
- case VAR_REDIRECT_URL:
- if((CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &stringp))
- && stringp)
- fputs(stringp, stream);
- break;
- case VAR_SSL_VERIFY_RESULT:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT,
- &longinfo))
- fprintf(stream, "%ld", longinfo);
- break;
- case VAR_EFFECTIVE_FILENAME:
- if(outs->filename)
- fprintf(stream, "%s", outs->filename);
- break;
- case VAR_PRIMARY_IP:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP,
- &stringp))
- fprintf(stream, "%s", stringp);
- break;
- case VAR_PRIMARY_PORT:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_PRIMARY_PORT,
- &longinfo))
- fprintf(stream, "%ld", longinfo);
- break;
- case VAR_LOCAL_IP:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_LOCAL_IP,
- &stringp))
- fprintf(stream, "%s", stringp);
- break;
- case VAR_LOCAL_PORT:
- if(CURLE_OK ==
- curl_easy_getinfo(curl, CURLINFO_LOCAL_PORT,
- &longinfo))
- fprintf(stream, "%ld", longinfo);
- break;
- default:
- break;
- }
- break;
- }
- }
- if(!match) {
- fprintf(stderr, "curl: unknown --write-out variable: '%s'\n", ptr);
- }
- ptr = end + 1; /* pass the end */
- *end = keepit;
- }
- else {
- /* illegal syntax, then just output the characters that are used */
- fputc('%', stream);
- fputc(ptr[1], stream);
- ptr += 2;
- }
- }
- }
- else if('\\' == *ptr) {
- switch(ptr[1]) {
- case 'r':
- fputc('\r', stream);
- break;
- case 'n':
- fputc('\n', stream);
- break;
- case 't':
- fputc('\t', stream);
- break;
- default:
- /* unknown, just output this */
- fputc(*ptr, stream);
- fputc(ptr[1], stream);
- break;
- }
- ptr += 2;
- }
- else {
- fputc(*ptr, stream);
- ptr++;
- }
- }
-
-}
diff --git a/external/libcurl_android/jni/libcurl/src/tool_writeout.h b/external/libcurl_android/jni/libcurl/src/tool_writeout.h
deleted file mode 100755
index 4dd3a75a..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_writeout.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef HEADER_CURL_TOOL_WRITEOUT_H
-#define HEADER_CURL_TOOL_WRITEOUT_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-void ourWriteOut(CURL *curl, struct OutStruct *outs, const char *writeinfo);
-
-#endif /* HEADER_CURL_TOOL_WRITEOUT_H */
diff --git a/external/libcurl_android/jni/libcurl/src/tool_xattr.c b/external/libcurl_android/jni/libcurl/src/tool_xattr.c
deleted file mode 100755
index b2666d97..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_xattr.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-#ifdef HAVE_FSETXATTR
-# include <sys/xattr.h> /* header from libc, not from libattr */
-# define USE_XATTR
-#elif defined(__FreeBSD_version) && (__FreeBSD_version > 500000)
-# include <sys/types.h>
-# include <sys/extattr.h>
-# define USE_XATTR
-#endif
-
-#include "tool_xattr.h"
-
-#include "memdebug.h" /* keep this as LAST include */
-
-#ifdef USE_XATTR
-
-/* mapping table of curl metadata to extended attribute names */
-static const struct xattr_mapping {
- const char *attr; /* name of the xattr */
- CURLINFO info;
-} mappings[] = {
- /* mappings proposed by
- * http://freedesktop.org/wiki/CommonExtendedAttributes
- */
- { "user.xdg.origin.url", CURLINFO_EFFECTIVE_URL },
- { "user.mime_type", CURLINFO_CONTENT_TYPE },
- { NULL, CURLINFO_NONE } /* last element, abort loop here */
-};
-
-/* store metadata from the curl request alongside the downloaded
- * file using extended attributes
- */
-int fwrite_xattr(CURL *curl, int fd)
-{
- int i = 0;
- int err = 0;
- /* loop through all xattr-curlinfo pairs and abort on a set error */
- while(err == 0 && mappings[i].attr != NULL) {
- char *value = NULL;
- CURLcode rc = curl_easy_getinfo(curl, mappings[i].info, &value);
- if(rc == CURLE_OK && value) {
-#ifdef HAVE_FSETXATTR_6
- err = fsetxattr(fd, mappings[i].attr, value, strlen(value), 0, 0);
-#elif defined(HAVE_FSETXATTR_5)
- err = fsetxattr(fd, mappings[i].attr, value, strlen(value), 0);
-#elif defined(__FreeBSD_version)
- err = extattr_set_fd(fd, EXTATTR_NAMESPACE_USER, mappings[i].attr, value,
- strlen(value));
- /* FreeBSD's extattr_set_fd returns the length of the extended attribute
- */
- err = err < 0 ? err : 0;
-#endif
- }
- i++;
- }
- return err;
-}
-#else
-int fwrite_xattr(CURL *curl, int fd)
-{
- (void)curl;
- (void)fd;
- return 0;
-}
-#endif
diff --git a/external/libcurl_android/jni/libcurl/src/tool_xattr.h b/external/libcurl_android/jni/libcurl/src/tool_xattr.h
deleted file mode 100755
index 3f8f585e..00000000
--- a/external/libcurl_android/jni/libcurl/src/tool_xattr.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef HEADER_CURL_TOOL_XATTR_H
-#define HEADER_CURL_TOOL_XATTR_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-#include "tool_setup.h"
-
-int fwrite_xattr(CURL *curl, int fd);
-
-#endif /* HEADER_CURL_TOOL_XATTR_H */
diff --git a/external/libcurl_android/jni/libcurl/src/version.h b/external/libcurl_android/jni/libcurl/src/version.h
deleted file mode 100755
index 9260aa5d..00000000
--- a/external/libcurl_android/jni/libcurl/src/version.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef HEADER_CURL_VERSION_H
-#define HEADER_CURL_VERSION_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#include <curl/curlver.h>
-
-#define CURL_NAME "curl"
-#define CURL_COPYRIGHT LIBCURL_COPYRIGHT
-#define CURL_VERSION "7.22.0"
-#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
-#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
-#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
-#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "
-
-#endif /* HEADER_CURL_VERSION_H */
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/libcurl-library.a b/external/libcurl_android/obj/local/armeabi-v7a/libcurl-library.a
deleted file mode 100644
index f1dd10d2..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/libcurl-library.a
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/libcurl.a b/external/libcurl_android/obj/local/armeabi-v7a/libcurl.a
deleted file mode 100644
index 7a9f69d5..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/libcurl.a
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.o
deleted file mode 100644
index c3dfee3f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.o.d
deleted file mode 100644
index b9477016..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/amigaos.o: \
- jni/libcurl/lib/amigaos.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.o
deleted file mode 100644
index aa92118b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.o.d
deleted file mode 100644
index 4a58d080..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/asyn-ares.o: \
- jni/libcurl/lib/asyn-ares.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.o
deleted file mode 100644
index 0c678be6..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.o.d
deleted file mode 100644
index 496a0bda..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.o.d
+++ /dev/null
@@ -1,122 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/asyn-thread.o: \
- jni/libcurl/lib/asyn-thread.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/strerror.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/multiif.h jni/libcurl/lib/inet_pton.h \
- jni/libcurl/lib/inet_ntop.h jni/libcurl/lib/curl_threads.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/lib/inet_ntop.h:
-
-jni/libcurl/lib/curl_threads.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/base64.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/base64.o
deleted file mode 100644
index 12dfd560..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/base64.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/base64.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/base64.o.d
deleted file mode 100644
index efae2d37..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/base64.o.d
+++ /dev/null
@@ -1,103 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/base64.o: \
- jni/libcurl/lib/base64.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/lib/formdata.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/http_chunks.h jni/libcurl/lib/hostip.h \
- jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/warnless.h \
- jni/libcurl/lib/curl_base64.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/non-ascii.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/curl_base64.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/bundles.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/bundles.o
deleted file mode 100644
index 538ff956..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/bundles.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/bundles.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/bundles.o.d
deleted file mode 100644
index 41afd379..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/bundles.o.d
+++ /dev/null
@@ -1,108 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/bundles.o: \
- jni/libcurl/lib/bundles.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/bundles.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/rawstr.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/bundles.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/conncache.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/conncache.o
deleted file mode 100644
index 35500a07..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/conncache.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/conncache.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/conncache.o.d
deleted file mode 100644
index 2a3c816f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/conncache.o.d
+++ /dev/null
@@ -1,110 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/conncache.o: \
- jni/libcurl/lib/conncache.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/bundles.h jni/libcurl/lib/conncache.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/bundles.h:
-
-jni/libcurl/lib/conncache.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/connect.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/connect.o
deleted file mode 100644
index 28999efe..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/connect.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/connect.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/connect.o.d
deleted file mode 100644
index 5646e67c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/connect.o.d
+++ /dev/null
@@ -1,135 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/connect.o: \
- jni/libcurl/lib/connect.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/lib/formdata.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/http_chunks.h jni/libcurl/lib/hostip.h \
- jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/if2ip.h jni/libcurl/lib/strerror.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/select.h jni/libcurl/lib/url.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/inet_ntop.h jni/libcurl/lib/inet_pton.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/warnless.h \
- jni/libcurl/lib/conncache.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/if2ip.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/inet_ntop.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/conncache.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.o
deleted file mode 100644
index c25f8ac4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.o.d
deleted file mode 100644
index 3cf5064f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.o.d
+++ /dev/null
@@ -1,98 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/content_encoding.o: \
- jni/libcurl/lib/content_encoding.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/content_encoding.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/content_encoding.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/cookie.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/cookie.o
deleted file mode 100644
index dc8d224b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/cookie.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/cookie.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/cookie.o.d
deleted file mode 100644
index e449232a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/cookie.o.d
+++ /dev/null
@@ -1,118 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/cookie.o: \
- jni/libcurl/lib/cookie.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/lib/formdata.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/http_chunks.h jni/libcurl/lib/hostip.h \
- jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtok.h jni/libcurl/lib/sendf.h jni/libcurl/lib/slist.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/share.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curl_memrchr.h jni/libcurl/lib/inet_pton.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtok.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/slist.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curl_memrchr.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.o
deleted file mode 100644
index ccf0716d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.o.d
deleted file mode 100644
index 64fd6d28..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.o.d
+++ /dev/null
@@ -1,50 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_addrinfo.o: \
- jni/libcurl/lib/curl_addrinfo.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_addrinfo.h \
- jni/libcurl/lib/inet_pton.h jni/libcurl/lib/warnless.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.o
deleted file mode 100644
index 7c826601..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.o.d
deleted file mode 100644
index 3437556a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.o.d
+++ /dev/null
@@ -1,45 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_fnmatch.o: \
- jni/libcurl/lib/curl_fnmatch.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/curl_fnmatch.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/curl_fnmatch.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.o
deleted file mode 100644
index bc5884e0..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.o.d
deleted file mode 100644
index f7b3bdf1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.o.d
+++ /dev/null
@@ -1,17 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_gethostname.o: \
- jni/libcurl/lib/curl_gethostname.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/curl_gethostname.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/curl_gethostname.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.o
deleted file mode 100644
index fd2fe46b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.o.d
deleted file mode 100644
index 15e2db45..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_gssapi.o: \
- jni/libcurl/lib/curl_gssapi.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.o
deleted file mode 100644
index c9760108..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.o.d
deleted file mode 100644
index 83517189..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.o.d
+++ /dev/null
@@ -1,45 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_memrchr.o: \
- jni/libcurl/lib/curl_memrchr.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/curl_memrchr.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/curl_memrchr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.o
deleted file mode 100644
index f6238021..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.o.d
deleted file mode 100644
index cb5e4879..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_multibyte.o: \
- jni/libcurl/lib/curl_multibyte.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.o
deleted file mode 100644
index 302bf36e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.o.d
deleted file mode 100644
index b1e3d333..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm.o: \
- jni/libcurl/lib/curl_ntlm.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.o
deleted file mode 100644
index c22fe648..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.o.d
deleted file mode 100644
index bab6c17e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_core.o: \
- jni/libcurl/lib/curl_ntlm_core.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.o
deleted file mode 100644
index 00e5ed59..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.o.d
deleted file mode 100644
index c90877c3..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_msgs.o: \
- jni/libcurl/lib/curl_ntlm_msgs.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.o
deleted file mode 100644
index 15ae90f5..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.o.d
deleted file mode 100644
index 1d203c93..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_ntlm_wb.o: \
- jni/libcurl/lib/curl_ntlm_wb.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.o
deleted file mode 100644
index f57a3a4a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.o.d
deleted file mode 100644
index 88a286f7..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_rtmp.o: \
- jni/libcurl/lib/curl_rtmp.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.o
deleted file mode 100644
index 9f1f5943..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.o.d
deleted file mode 100644
index 0d73a1bc..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.o.d
+++ /dev/null
@@ -1,120 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl.o: \
- jni/libcurl/lib/curl_sasl.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/curl_base64.h \
- jni/libcurl/lib/curl_md5.h jni/libcurl/lib/curl_hmac.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_ntlm_msgs.h jni/libcurl/lib/curl_sasl.h \
- jni/libcurl/lib/warnless.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/strtok.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/curl_base64.h:
-
-jni/libcurl/lib/curl_md5.h:
-
-jni/libcurl/lib/curl_hmac.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_ntlm_msgs.h:
-
-jni/libcurl/lib/curl_sasl.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/strtok.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.o
deleted file mode 100644
index 885f57d9..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.o.d
deleted file mode 100644
index fd9d8d67..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_sasl_sspi.o: \
- jni/libcurl/lib/curl_sasl_sspi.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.o
deleted file mode 100644
index 283ec94d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.o.d
deleted file mode 100644
index bf3cc919..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_sspi.o: \
- jni/libcurl/lib/curl_sspi.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.o
deleted file mode 100644
index 865197f8..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.o.d
deleted file mode 100644
index 578cca1c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.o.d
+++ /dev/null
@@ -1,45 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/curl_threads.o: \
- jni/libcurl/lib/curl_threads.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/curl_threads.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/curl_threads.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dict.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dict.o
deleted file mode 100644
index e7b48b57..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dict.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dict.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dict.o.d
deleted file mode 100644
index 2cfd5b5f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dict.o.d
+++ /dev/null
@@ -1,110 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/dict.o: \
- jni/libcurl/lib/dict.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/dict.h \
- jni/libcurl/lib/rawstr.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/dict.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.o
deleted file mode 100644
index 3f64eb73..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.o.d
deleted file mode 100644
index 6dcb7ade..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.o.d
+++ /dev/null
@@ -1,42 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/dotdot.o: \
- jni/libcurl/lib/dotdot.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/dotdot.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/dotdot.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/easy.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/easy.o
deleted file mode 100644
index 976606ac..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/easy.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/easy.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/easy.o.d
deleted file mode 100644
index f8453f2e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/easy.o.d
+++ /dev/null
@@ -1,152 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/easy.o: \
- jni/libcurl/lib/easy.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/strequal.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/url.h jni/libcurl/lib/getinfo.h jni/libcurl/lib/share.h \
- jni/libcurl/lib/strdup.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/easyif.h \
- jni/libcurl/lib/select.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/curl_ntlm.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/lib/slist.h jni/libcurl/lib/amigaos.h \
- jni/libcurl/lib/non-ascii.h jni/libcurl/lib/warnless.h \
- jni/libcurl/lib/conncache.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/sigpipe.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/getinfo.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/strdup.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/easyif.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/curl_ntlm.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/slist.h:
-
-jni/libcurl/lib/amigaos.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/conncache.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/sigpipe.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/escape.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/escape.o
deleted file mode 100644
index f00bc597..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/escape.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/escape.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/escape.o.d
deleted file mode 100644
index a3b77999..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/escape.o.d
+++ /dev/null
@@ -1,103 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/escape.o: \
- jni/libcurl/lib/escape.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/lib/formdata.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/http_chunks.h jni/libcurl/lib/hostip.h \
- jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/warnless.h \
- jni/libcurl/lib/non-ascii.h jni/libcurl/lib/escape.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/escape.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/file.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/file.o
deleted file mode 100644
index f779e806..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/file.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/file.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/file.o.d
deleted file mode 100644
index 1cd5d15b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/file.o.d
+++ /dev/null
@@ -1,120 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/file.o: \
- jni/libcurl/lib/file.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/escape.h \
- jni/libcurl/lib/speedcheck.h jni/libcurl/lib/getinfo.h \
- jni/libcurl/lib/transfer.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/parsedate.h \
- jni/libcurl/lib/warnless.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/escape.h:
-
-jni/libcurl/lib/speedcheck.h:
-
-jni/libcurl/lib/getinfo.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/parsedate.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.o
deleted file mode 100644
index 70034d25..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.o.d
deleted file mode 100644
index ee62cb03..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.o.d
+++ /dev/null
@@ -1,48 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/fileinfo.o: \
- jni/libcurl/lib/fileinfo.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/strdup.h jni/libcurl/lib/fileinfo.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/strdup.h:
-
-jni/libcurl/lib/fileinfo.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/formdata.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/formdata.o
deleted file mode 100644
index cca813c0..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/formdata.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/formdata.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/formdata.o.d
deleted file mode 100644
index 7e17d06f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/formdata.o.d
+++ /dev/null
@@ -1,105 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/formdata.o: \
- jni/libcurl/lib/formdata.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/sendf.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftp.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftp.o
deleted file mode 100644
index dd78c7f4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftp.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftp.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftp.o.d
deleted file mode 100644
index 395beaa1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftp.o.d
+++ /dev/null
@@ -1,165 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/ftp.o: jni/libcurl/lib/ftp.c \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/if2ip.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/transfer.h jni/libcurl/lib/escape.h \
- jni/libcurl/lib/socks.h jni/libcurl/lib/fileinfo.h \
- jni/libcurl/lib/ftplistparser.h jni/libcurl/lib/curl_sec.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/lib/strerror.h \
- jni/libcurl/lib/inet_ntop.h jni/libcurl/lib/inet_pton.h \
- jni/libcurl/lib/select.h jni/libcurl/lib/parsedate.h \
- jni/libcurl/lib/multiif.h jni/libcurl/lib/url.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/speedcheck.h jni/libcurl/lib/warnless.h \
- jni/libcurl/lib/http_proxy.h jni/libcurl/lib/non-ascii.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/if2ip.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/escape.h:
-
-jni/libcurl/lib/socks.h:
-
-jni/libcurl/lib/fileinfo.h:
-
-jni/libcurl/lib/ftplistparser.h:
-
-jni/libcurl/lib/curl_sec.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/inet_ntop.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/parsedate.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/speedcheck.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/http_proxy.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.o
deleted file mode 100644
index 5d96d1f0..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.o.d
deleted file mode 100644
index a82cb3b1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.o.d
+++ /dev/null
@@ -1,108 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/ftplistparser.o: \
- jni/libcurl/lib/ftplistparser.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/fileinfo.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/ftplistparser.h jni/libcurl/lib/curl_fnmatch.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/fileinfo.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/ftplistparser.h:
-
-jni/libcurl/lib/curl_fnmatch.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getenv.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getenv.o
deleted file mode 100644
index e5b42eb7..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getenv.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getenv.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getenv.o.d
deleted file mode 100644
index a415d8e0..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getenv.o.d
+++ /dev/null
@@ -1,40 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/getenv.o: \
- jni/libcurl/lib/getenv.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.o
deleted file mode 100644
index c47882a1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.o.d
deleted file mode 100644
index d2d8a342..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.o.d
+++ /dev/null
@@ -1,110 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/getinfo.o: \
- jni/libcurl/lib/getinfo.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/getinfo.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/getinfo.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/gopher.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/gopher.o
deleted file mode 100644
index cfd18d80..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/gopher.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/gopher.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/gopher.o.d
deleted file mode 100644
index 54fffe5e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/gopher.o.d
+++ /dev/null
@@ -1,117 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/gopher.o: \
- jni/libcurl/lib/gopher.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/gopher.h \
- jni/libcurl/lib/rawstr.h jni/libcurl/lib/select.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/warnless.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/gopher.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hash.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hash.o
deleted file mode 100644
index 69f87302..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hash.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hash.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hash.o.d
deleted file mode 100644
index 3f515656..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hash.o.d
+++ /dev/null
@@ -1,47 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/hash.o: \
- jni/libcurl/lib/hash.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hmac.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hmac.o
deleted file mode 100644
index e63627da..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hmac.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hmac.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hmac.o.d
deleted file mode 100644
index c74a766b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hmac.o.d
+++ /dev/null
@@ -1,45 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/hmac.o: \
- jni/libcurl/lib/hmac.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/curl_hmac.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/curl_hmac.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.o
deleted file mode 100644
index 778add92..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.o.d
deleted file mode 100644
index 1020b3fb..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.o.d
+++ /dev/null
@@ -1,105 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/hostasyn.o: \
- jni/libcurl/lib/hostasyn.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/strerror.h jni/libcurl/lib/url.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.o
deleted file mode 100644
index 259b6d9a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.o.d
deleted file mode 100644
index 6640a1d1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/hostcheck.o: \
- jni/libcurl/lib/hostcheck.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip.o
deleted file mode 100644
index 4421c7b2..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip.o.d
deleted file mode 100644
index 3c178713..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip.o.d
+++ /dev/null
@@ -1,110 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/hostip.o: \
- jni/libcurl/lib/hostip.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/strerror.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/inet_ntop.h jni/libcurl/lib/warnless.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/inet_ntop.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.o
deleted file mode 100644
index ccbdb895..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.o.d
deleted file mode 100644
index a4640326..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.o.d
+++ /dev/null
@@ -1,107 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/hostip4.o: \
- jni/libcurl/lib/hostip4.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/strerror.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/inet_pton.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.o
deleted file mode 100644
index e2d6eb2d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.o.d
deleted file mode 100644
index 4b184d39..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.o.d
+++ /dev/null
@@ -1,115 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/hostip6.o: \
- jni/libcurl/lib/hostip6.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/strerror.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/inet_pton.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.o
deleted file mode 100644
index 21d4dd40..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.o.d
deleted file mode 100644
index bf470e01..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.o.d
+++ /dev/null
@@ -1,105 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/hostsyn.o: \
- jni/libcurl/lib/hostsyn.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/strerror.h jni/libcurl/lib/url.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http.o
deleted file mode 100644
index 82205f90..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http.o.d
deleted file mode 100644
index cf8f0041..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http.o.d
+++ /dev/null
@@ -1,165 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/http.o: \
- jni/libcurl/lib/http.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/curl_base64.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/http_digest.h jni/libcurl/lib/curl_ntlm.h \
- jni/libcurl/lib/curl_ntlm_wb.h jni/libcurl/lib/http_negotiate.h \
- jni/libcurl/lib/url.h jni/libcurl/lib/share.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/parsedate.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/multiif.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/content_encoding.h jni/libcurl/lib/http_proxy.h \
- jni/libcurl/lib/warnless.h jni/libcurl/lib/non-ascii.h \
- jni/libcurl/lib/bundles.h jni/libcurl/lib/pipeline.h \
- jni/libcurl/lib/http2.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/curl_base64.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/http_digest.h:
-
-jni/libcurl/lib/curl_ntlm.h:
-
-jni/libcurl/lib/curl_ntlm_wb.h:
-
-jni/libcurl/lib/http_negotiate.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/parsedate.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/content_encoding.h:
-
-jni/libcurl/lib/http_proxy.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/bundles.h:
-
-jni/libcurl/lib/pipeline.h:
-
-jni/libcurl/lib/http2.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http2.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http2.o
deleted file mode 100644
index 2df61c60..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http2.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http2.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http2.o.d
deleted file mode 100644
index 0ee574cf..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http2.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/http2.o: \
- jni/libcurl/lib/http2.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.o
deleted file mode 100644
index 7a2e12f7..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.o.d
deleted file mode 100644
index 46bb2e7e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.o.d
+++ /dev/null
@@ -1,108 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/http_chunks.o: \
- jni/libcurl/lib/http_chunks.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/content_encoding.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/non-ascii.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/warnless.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/content_encoding.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.o
deleted file mode 100644
index 1cfdcb53..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.o.d
deleted file mode 100644
index c3281aad..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.o.d
+++ /dev/null
@@ -1,120 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/http_digest.o: \
- jni/libcurl/lib/http_digest.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curl_base64.h jni/libcurl/lib/curl_md5.h \
- jni/libcurl/lib/curl_hmac.h jni/libcurl/lib/http_digest.h \
- jni/libcurl/lib/strtok.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/non-ascii.h jni/libcurl/lib/warnless.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curl_base64.h:
-
-jni/libcurl/lib/curl_md5.h:
-
-jni/libcurl/lib/curl_hmac.h:
-
-jni/libcurl/lib/http_digest.h:
-
-jni/libcurl/lib/strtok.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.o
deleted file mode 100644
index 515a2e3a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.o.d
deleted file mode 100644
index 1cd5fd02..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate.o: \
- jni/libcurl/lib/http_negotiate.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.o
deleted file mode 100644
index a81aa2c6..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.o.d
deleted file mode 100644
index ecdcef77..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/http_negotiate_sspi.o: \
- jni/libcurl/lib/http_negotiate_sspi.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.o
deleted file mode 100644
index 41e8ab33..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.o.d
deleted file mode 100644
index 92194f9b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.o.d
+++ /dev/null
@@ -1,130 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/http_proxy.o: \
- jni/libcurl/lib/http_proxy.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/http_proxy.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/url.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/rawstr.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/non-ascii.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curlx.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/warnless.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/http_proxy.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.o
deleted file mode 100644
index 7defb9c1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.o.d
deleted file mode 100644
index 5b9600e4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/idn_win32.o: \
- jni/libcurl/lib/idn_win32.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.o
deleted file mode 100644
index f9bd71c4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.o.d
deleted file mode 100644
index 2d4581a1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.o.d
+++ /dev/null
@@ -1,50 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/if2ip.o: \
- jni/libcurl/lib/if2ip.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/inet_ntop.h jni/libcurl/lib/strequal.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/if2ip.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/inet_ntop.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/if2ip.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/imap.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/imap.o
deleted file mode 100644
index cd501ade..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/imap.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/imap.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/imap.o.d
deleted file mode 100644
index 129cda91..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/imap.o.d
+++ /dev/null
@@ -1,145 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/imap.o: \
- jni/libcurl/lib/imap.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/if2ip.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/transfer.h jni/libcurl/lib/escape.h \
- jni/libcurl/lib/socks.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/lib/strerror.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/multiif.h jni/libcurl/lib/url.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curl_sasl.h jni/libcurl/lib/warnless.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/if2ip.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/escape.h:
-
-jni/libcurl/lib/socks.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curl_sasl.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.o
deleted file mode 100644
index 133ec692..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.o.d
deleted file mode 100644
index 9bebc94f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/inet_ntop.o: \
- jni/libcurl/lib/inet_ntop.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.o
deleted file mode 100644
index 757e228e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.o.d
deleted file mode 100644
index e9fb8c30..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/inet_pton.o: \
- jni/libcurl/lib/inet_pton.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/krb5.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/krb5.o
deleted file mode 100644
index a29f2e23..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/krb5.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/krb5.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/krb5.o.d
deleted file mode 100644
index 696e9469..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/krb5.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/krb5.o: \
- jni/libcurl/lib/krb5.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ldap.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ldap.o
deleted file mode 100644
index 03b6652f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ldap.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ldap.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ldap.o.d
deleted file mode 100644
index eeff2c09..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ldap.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/ldap.o: \
- jni/libcurl/lib/ldap.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/llist.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/llist.o
deleted file mode 100644
index 0f8444bf..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/llist.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/llist.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/llist.o.d
deleted file mode 100644
index a96eaa71..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/llist.o.d
+++ /dev/null
@@ -1,42 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/llist.o: \
- jni/libcurl/lib/llist.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/llist.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md4.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md4.o
deleted file mode 100644
index f0d55703..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md4.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md4.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md4.o.d
deleted file mode 100644
index e98b0a09..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md4.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/md4.o: jni/libcurl/lib/md4.c \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md5.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md5.o
deleted file mode 100644
index 9db97d09..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md5.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md5.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md5.o.d
deleted file mode 100644
index f8b81dbc..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/md5.o.d
+++ /dev/null
@@ -1,47 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/md5.o: jni/libcurl/lib/md5.c \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/curl_md5.h jni/libcurl/lib/curl_hmac.h \
- jni/libcurl/lib/warnless.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/curl_md5.h:
-
-jni/libcurl/lib/curl_hmac.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.o
deleted file mode 100644
index 224d6897..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.o.d
deleted file mode 100644
index a5d4fdfd..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/memdebug.o: \
- jni/libcurl/lib/memdebug.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.o
deleted file mode 100644
index 1e57bb1e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.o.d
deleted file mode 100644
index 3bbe005d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.o.d
+++ /dev/null
@@ -1,42 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/mprintf.o: \
- jni/libcurl/lib/mprintf.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/multi.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/multi.o
deleted file mode 100644
index 9a0cc75f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/multi.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/multi.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/multi.o.d
deleted file mode 100644
index 2766e76d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/multi.o.d
+++ /dev/null
@@ -1,138 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/multi.o: \
- jni/libcurl/lib/multi.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/url.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/easyif.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/warnless.h jni/libcurl/lib/speedcheck.h \
- jni/libcurl/lib/conncache.h jni/libcurl/lib/bundles.h \
- jni/libcurl/lib/pipeline.h jni/libcurl/lib/sigpipe.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/easyif.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/speedcheck.h:
-
-jni/libcurl/lib/conncache.h:
-
-jni/libcurl/lib/bundles.h:
-
-jni/libcurl/lib/pipeline.h:
-
-jni/libcurl/lib/sigpipe.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/netrc.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/netrc.o
deleted file mode 100644
index a192a6d4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/netrc.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/netrc.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/netrc.o.d
deleted file mode 100644
index e9180502..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/netrc.o.d
+++ /dev/null
@@ -1,52 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/netrc.o: \
- jni/libcurl/lib/netrc.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/netrc.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtok.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/netrc.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtok.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.o
deleted file mode 100644
index 46323913..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.o.d
deleted file mode 100644
index 889a1c69..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/non-ascii.o: \
- jni/libcurl/lib/non-ascii.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.o
deleted file mode 100644
index 304c9c6e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.o.d
deleted file mode 100644
index 44804f5f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.o.d
+++ /dev/null
@@ -1,37 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/nonblock.o: \
- jni/libcurl/lib/nonblock.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/openldap.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/openldap.o
deleted file mode 100644
index efb88544..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/openldap.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/openldap.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/openldap.o.d
deleted file mode 100644
index 0a2c39bf..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/openldap.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/openldap.o: \
- jni/libcurl/lib/openldap.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.o
deleted file mode 100644
index 2b85aba5..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.o.d
deleted file mode 100644
index 5de1256c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.o.d
+++ /dev/null
@@ -1,42 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/parsedate.o: \
- jni/libcurl/lib/parsedate.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/warnless.h jni/libcurl/lib/parsedate.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/parsedate.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.o
deleted file mode 100644
index ccb68fca..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.o.d
deleted file mode 100644
index 04ccdea1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.o.d
+++ /dev/null
@@ -1,115 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/pingpong.o: \
- jni/libcurl/lib/pingpong.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/select.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/speedcheck.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/non-ascii.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/speedcheck.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.o
deleted file mode 100644
index ec32ecd4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.o.d
deleted file mode 100644
index 0f0639d4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.o.d
+++ /dev/null
@@ -1,110 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/pipeline.o: \
- jni/libcurl/lib/pipeline.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/pipeline.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/rawstr.h jni/libcurl/lib/bundles.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/pipeline.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/bundles.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pop3.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pop3.o
deleted file mode 100644
index ba78513b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pop3.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pop3.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pop3.o.d
deleted file mode 100644
index 293067cd..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/pop3.o.d
+++ /dev/null
@@ -1,150 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/pop3.o: \
- jni/libcurl/lib/pop3.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/if2ip.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/transfer.h jni/libcurl/lib/escape.h \
- jni/libcurl/lib/socks.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/lib/strerror.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/multiif.h jni/libcurl/lib/url.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curl_sasl.h jni/libcurl/lib/curl_md5.h \
- jni/libcurl/lib/curl_hmac.h jni/libcurl/lib/warnless.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/if2ip.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/escape.h:
-
-jni/libcurl/lib/socks.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curl_sasl.h:
-
-jni/libcurl/lib/curl_md5.h:
-
-jni/libcurl/lib/curl_hmac.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/progress.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/progress.o
deleted file mode 100644
index 107ddf9b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/progress.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/progress.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/progress.o.d
deleted file mode 100644
index 5079ab0b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/progress.o.d
+++ /dev/null
@@ -1,95 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/progress.o: \
- jni/libcurl/lib/progress.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/progress.h jni/libcurl/include/curl/mprintf.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/include/curl/mprintf.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.o
deleted file mode 100644
index 8cf743b8..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.o.d
deleted file mode 100644
index df97388c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.o.d
+++ /dev/null
@@ -1,37 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/rawstr.o: \
- jni/libcurl/lib/rawstr.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/rawstr.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.o
deleted file mode 100644
index 7df50e1c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.o.d
deleted file mode 100644
index 7511d1f4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.o.d
+++ /dev/null
@@ -1,120 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/rtsp.o: \
- jni/libcurl/lib/rtsp.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/multiif.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/security.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/security.o
deleted file mode 100644
index f3d6176e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/security.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/security.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/security.o.d
deleted file mode 100644
index 13648a33..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/security.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/security.o: \
- jni/libcurl/lib/security.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/select.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/select.o
deleted file mode 100644
index c6e82174..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/select.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/select.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/select.o.d
deleted file mode 100644
index 4d876827..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/select.o.d
+++ /dev/null
@@ -1,100 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/select.o: \
- jni/libcurl/lib/select.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/lib/select.h jni/libcurl/lib/warnless.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/warnless.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/sendf.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/sendf.o
deleted file mode 100644
index 4e83a6ea..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/sendf.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/sendf.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/sendf.o.d
deleted file mode 100644
index d4de13f7..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/sendf.o.d
+++ /dev/null
@@ -1,118 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/sendf.o: \
- jni/libcurl/lib/sendf.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/non-ascii.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/strerror.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/share.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/share.o
deleted file mode 100644
index 887bb0fa..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/share.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/share.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/share.o.d
deleted file mode 100644
index cde44020..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/share.o.d
+++ /dev/null
@@ -1,100 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/share.o: \
- jni/libcurl/lib/share.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/share.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/slist.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/slist.o
deleted file mode 100644
index 62cf31e7..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/slist.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/slist.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/slist.o.d
deleted file mode 100644
index e4fcb22c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/slist.o.d
+++ /dev/null
@@ -1,42 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/slist.o: \
- jni/libcurl/lib/slist.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/slist.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/slist.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/smtp.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/smtp.o
deleted file mode 100644
index 348b506c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/smtp.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/smtp.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/smtp.o.d
deleted file mode 100644
index a9e8161c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/smtp.o.d
+++ /dev/null
@@ -1,147 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/smtp.o: \
- jni/libcurl/lib/smtp.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/if2ip.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/transfer.h jni/libcurl/lib/escape.h \
- jni/libcurl/lib/socks.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/lib/strerror.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/multiif.h jni/libcurl/lib/url.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curl_gethostname.h jni/libcurl/lib/curl_sasl.h \
- jni/libcurl/lib/warnless.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/if2ip.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/escape.h:
-
-jni/libcurl/lib/socks.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curl_gethostname.h:
-
-jni/libcurl/lib/curl_sasl.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks.o
deleted file mode 100644
index ad6d886e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks.o.d
deleted file mode 100644
index 7700b7a0..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks.o.d
+++ /dev/null
@@ -1,108 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/socks.o: \
- jni/libcurl/lib/socks.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/lib/socks.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/socks.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.o
deleted file mode 100644
index b694b111..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.o.d
deleted file mode 100644
index 01c5bc59..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/socks_gssapi.o: \
- jni/libcurl/lib/socks_gssapi.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.o
deleted file mode 100644
index 5c673226..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.o.d
deleted file mode 100644
index e7bc68f9..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/socks_sspi.o: \
- jni/libcurl/lib/socks_sspi.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.o
deleted file mode 100644
index 426e853b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.o.d
deleted file mode 100644
index 72736acb..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.o.d
+++ /dev/null
@@ -1,95 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/speedcheck.o: \
- jni/libcurl/lib/speedcheck.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/multiif.h jni/libcurl/lib/speedcheck.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/speedcheck.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/splay.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/splay.o
deleted file mode 100644
index 122f9065..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/splay.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/splay.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/splay.o.d
deleted file mode 100644
index f8f280b1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/splay.o.d
+++ /dev/null
@@ -1,17 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/splay.o: \
- jni/libcurl/lib/splay.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/splay.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/splay.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ssh.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ssh.o
deleted file mode 100644
index 553e51ae..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ssh.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ssh.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ssh.o.d
deleted file mode 100644
index 6233a4fc..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/ssh.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/ssh.o: jni/libcurl/lib/ssh.c \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strdup.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strdup.o
deleted file mode 100644
index 53b6ab7a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strdup.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strdup.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strdup.o.d
deleted file mode 100644
index 2a6264e2..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strdup.o.d
+++ /dev/null
@@ -1,17 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/strdup.o: \
- jni/libcurl/lib/strdup.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/strdup.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/strdup.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strequal.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strequal.o
deleted file mode 100644
index 5b601322..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strequal.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strequal.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strequal.o.d
deleted file mode 100644
index 6a930cfc..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strequal.o.d
+++ /dev/null
@@ -1,37 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/strequal.o: \
- jni/libcurl/lib/strequal.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/strequal.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strerror.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strerror.o
deleted file mode 100644
index 74e76dfd..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strerror.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strerror.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strerror.o.d
deleted file mode 100644
index 24b8fc39..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strerror.o.d
+++ /dev/null
@@ -1,98 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/strerror.o: \
- jni/libcurl/lib/strerror.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/strerror.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/lib/formdata.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/http_chunks.h jni/libcurl/lib/hostip.h \
- jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtok.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtok.o
deleted file mode 100644
index 1f8b1c8e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtok.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtok.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtok.o.d
deleted file mode 100644
index 8ca87f10..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtok.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/strtok.o: \
- jni/libcurl/lib/strtok.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.o
deleted file mode 100644
index e1eb42d6..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.o.d
deleted file mode 100644
index 6ede14d0..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.o.d
+++ /dev/null
@@ -1,17 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/strtoofft.o: \
- jni/libcurl/lib/strtoofft.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/strtoofft.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/strtoofft.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/telnet.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/telnet.o
deleted file mode 100644
index a0d79420..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/telnet.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/telnet.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/telnet.o.d
deleted file mode 100644
index d9052028..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/telnet.o.d
+++ /dev/null
@@ -1,125 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/telnet.o: \
- jni/libcurl/lib/telnet.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/telnet.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/lib/progress.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/arpa_telnet.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/warnless.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/telnet.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/arpa_telnet.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/tftp.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/tftp.o
deleted file mode 100644
index 42ab361e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/tftp.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/tftp.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/tftp.o.d
deleted file mode 100644
index ee69bfce..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/tftp.o.d
+++ /dev/null
@@ -1,128 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/tftp.o: \
- jni/libcurl/lib/tftp.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/tftp.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/connect.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/sockaddr.h \
- jni/libcurl/lib/strerror.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/url.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/speedcheck.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/tftp.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/speedcheck.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/timeval.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/timeval.o
deleted file mode 100644
index 1ce1098a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/timeval.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/timeval.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/timeval.o.d
deleted file mode 100644
index f51f5cad..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/timeval.o.d
+++ /dev/null
@@ -1,17 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/timeval.o: \
- jni/libcurl/lib/timeval.c jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/transfer.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/transfer.o
deleted file mode 100644
index 09c887a2..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/transfer.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/transfer.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/transfer.o.d
deleted file mode 100644
index fb082fae..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/transfer.o.d
+++ /dev/null
@@ -1,153 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/transfer.o: \
- jni/libcurl/lib/transfer.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/strequal.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/lib/formdata.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/http_chunks.h jni/libcurl/lib/hostip.h \
- jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/netrc.h \
- jni/libcurl/lib/content_encoding.h jni/libcurl/lib/transfer.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/speedcheck.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/getinfo.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/http_digest.h \
- jni/libcurl/lib/curl_ntlm.h jni/libcurl/lib/http_negotiate.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/select.h jni/libcurl/lib/multiif.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/lib/non-ascii.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/netrc.h:
-
-jni/libcurl/lib/content_encoding.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/speedcheck.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/getinfo.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/http_digest.h:
-
-jni/libcurl/lib/curl_ntlm.h:
-
-jni/libcurl/lib/http_negotiate.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/url.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/url.o
deleted file mode 100644
index 9837b156..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/url.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/url.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/url.o.d
deleted file mode 100644
index abc858ea..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/url.o.d
+++ /dev/null
@@ -1,198 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/url.o: jni/libcurl/lib/url.c \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/cookie.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/netrc.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/transfer.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/progress.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strerror.h jni/libcurl/lib/escape.h \
- jni/libcurl/lib/strtok.h jni/libcurl/lib/share.h \
- jni/libcurl/lib/content_encoding.h jni/libcurl/lib/http_digest.h \
- jni/libcurl/lib/http_negotiate.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/multiif.h jni/libcurl/lib/easyif.h \
- jni/libcurl/lib/speedcheck.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/warnless.h jni/libcurl/lib/non-ascii.h \
- jni/libcurl/lib/inet_pton.h jni/libcurl/lib/dict.h \
- jni/libcurl/lib/telnet.h jni/libcurl/lib/tftp.h \
- jni/libcurl/lib/curl_ldap.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/lib/inet_ntop.h \
- jni/libcurl/lib/curl_ntlm.h jni/libcurl/lib/curl_ntlm_wb.h \
- jni/libcurl/lib/socks.h jni/libcurl/lib/curl_rtmp.h \
- jni/libcurl/lib/gopher.h jni/libcurl/lib/http_proxy.h \
- jni/libcurl/lib/bundles.h jni/libcurl/lib/conncache.h \
- jni/libcurl/lib/pipeline.h jni/libcurl/lib/dotdot.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/curl_memory.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/netrc.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/transfer.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strerror.h:
-
-jni/libcurl/lib/escape.h:
-
-jni/libcurl/lib/strtok.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/content_encoding.h:
-
-jni/libcurl/lib/http_digest.h:
-
-jni/libcurl/lib/http_negotiate.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/multiif.h:
-
-jni/libcurl/lib/easyif.h:
-
-jni/libcurl/lib/speedcheck.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/lib/non-ascii.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/lib/dict.h:
-
-jni/libcurl/lib/telnet.h:
-
-jni/libcurl/lib/tftp.h:
-
-jni/libcurl/lib/curl_ldap.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/inet_ntop.h:
-
-jni/libcurl/lib/curl_ntlm.h:
-
-jni/libcurl/lib/curl_ntlm_wb.h:
-
-jni/libcurl/lib/socks.h:
-
-jni/libcurl/lib/curl_rtmp.h:
-
-jni/libcurl/lib/gopher.h:
-
-jni/libcurl/lib/http_proxy.h:
-
-jni/libcurl/lib/bundles.h:
-
-jni/libcurl/lib/conncache.h:
-
-jni/libcurl/lib/pipeline.h:
-
-jni/libcurl/lib/dotdot.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/version.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/version.o
deleted file mode 100644
index a1a26155..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/version.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/version.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/version.o.d
deleted file mode 100644
index 3e54ed45..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/version.o.d
+++ /dev/null
@@ -1,98 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/version.o: \
- jni/libcurl/lib/version.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/cookie.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/http2.h \
- jni/libcurl/include/curl/mprintf.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/http2.h:
-
-jni/libcurl/include/curl/mprintf.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.o
deleted file mode 100644
index 45ded89b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.o.d
deleted file mode 100644
index b2ff4de8..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/axtls.o: \
- jni/libcurl/lib/vtls/axtls.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.o
deleted file mode 100644
index 9a5d516d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.o.d
deleted file mode 100644
index 006a8e87..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.o.d
+++ /dev/null
@@ -1,95 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_darwinssl.o: \
- jni/libcurl/lib/vtls/curl_darwinssl.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/cookie.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/curl_base64.h \
- jni/libcurl/lib/strtok.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/curl_base64.h:
-
-jni/libcurl/lib/strtok.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.o
deleted file mode 100644
index ffe46875..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.o.d
deleted file mode 100644
index 1a73af65..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/curl_schannel.o: \
- jni/libcurl/lib/vtls/curl_schannel.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.o
deleted file mode 100644
index 8dbcbba8..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.o.d
deleted file mode 100644
index 1a147e0e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/cyassl.o: \
- jni/libcurl/lib/vtls/cyassl.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.o
deleted file mode 100644
index 2ff4f650..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.o.d
deleted file mode 100644
index 1958ca89..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gskit.o: \
- jni/libcurl/lib/vtls/gskit.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.o
deleted file mode 100644
index 24c3ad39..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.o.d
deleted file mode 100644
index 8979bda4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/gtls.o: \
- jni/libcurl/lib/vtls/gtls.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.o
deleted file mode 100644
index c4360cf8..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.o.d
deleted file mode 100644
index 166a71c2..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/nss.o: \
- jni/libcurl/lib/vtls/nss.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.o
deleted file mode 100644
index 3993c89f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.o.d
deleted file mode 100644
index cfaa1953..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.o.d
+++ /dev/null
@@ -1,127 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/openssl.o: \
- jni/libcurl/lib/vtls/openssl.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/cookie.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/sendf.h \
- jni/libcurl/lib/formdata.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/inet_pton.h jni/libcurl/lib/vtls/openssl.h \
- jni/libcurl/lib/connect.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/sockaddr.h jni/libcurl/lib/slist.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/select.h \
- jni/libcurl/lib/vtls/vtls.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/hostcheck.h jni/libcurl/include/curl/mprintf.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/inet_pton.h:
-
-jni/libcurl/lib/vtls/openssl.h:
-
-jni/libcurl/lib/connect.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/sockaddr.h:
-
-jni/libcurl/lib/slist.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/select.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/hostcheck.h:
-
-jni/libcurl/include/curl/mprintf.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.o
deleted file mode 100644
index 2cbb7dc4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.o.d
deleted file mode 100644
index f613e771..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl.o: \
- jni/libcurl/lib/vtls/polarssl.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.o
deleted file mode 100644
index ae4b888d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.o.d
deleted file mode 100644
index ad8de079..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/polarssl_threadlock.o: \
- jni/libcurl/lib/vtls/polarssl_threadlock.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.o
deleted file mode 100644
index 8d56a332..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.o.d
deleted file mode 100644
index ce68be20..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/qssl.o: \
- jni/libcurl/lib/vtls/qssl.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.o
deleted file mode 100644
index c090991f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.o.d
deleted file mode 100644
index d42a19a9..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.o.d
+++ /dev/null
@@ -1,145 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/vtls/vtls.o: \
- jni/libcurl/lib/vtls/vtls.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/urldata.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/cookie.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/formdata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/http_chunks.h \
- jni/libcurl/lib/hostip.h jni/libcurl/lib/hash.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/curl_addrinfo.h jni/libcurl/lib/asyn.h \
- jni/libcurl/lib/splay.h jni/libcurl/lib/imap.h \
- jni/libcurl/lib/pingpong.h jni/libcurl/lib/pop3.h jni/libcurl/lib/smtp.h \
- jni/libcurl/lib/ftp.h jni/libcurl/lib/file.h jni/libcurl/lib/ssh.h \
- jni/libcurl/lib/http.h jni/libcurl/lib/rtsp.h jni/libcurl/lib/wildcard.h \
- jni/libcurl/lib/multihandle.h jni/libcurl/lib/vtls/vtls.h \
- jni/libcurl/lib/vtls/openssl.h jni/libcurl/lib/vtls/gtls.h \
- jni/libcurl/lib/vtls/nssg.h jni/libcurl/lib/vtls/qssl.h \
- jni/libcurl/lib/vtls/gskit.h jni/libcurl/lib/vtls/polarssl.h \
- jni/libcurl/lib/vtls/axtls.h jni/libcurl/lib/vtls/cyassl.h \
- jni/libcurl/lib/vtls/curl_schannel.h \
- jni/libcurl/lib/vtls/curl_darwinssl.h jni/libcurl/lib/slist.h \
- jni/libcurl/lib/sendf.h jni/libcurl/lib/rawstr.h jni/libcurl/lib/url.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/progress.h \
- jni/libcurl/lib/share.h jni/libcurl/lib/urldata.h \
- jni/libcurl/lib/timeval.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/cookie.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/formdata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/http_chunks.h:
-
-jni/libcurl/lib/hostip.h:
-
-jni/libcurl/lib/hash.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/curl_addrinfo.h:
-
-jni/libcurl/lib/asyn.h:
-
-jni/libcurl/lib/splay.h:
-
-jni/libcurl/lib/imap.h:
-
-jni/libcurl/lib/pingpong.h:
-
-jni/libcurl/lib/pop3.h:
-
-jni/libcurl/lib/smtp.h:
-
-jni/libcurl/lib/ftp.h:
-
-jni/libcurl/lib/file.h:
-
-jni/libcurl/lib/ssh.h:
-
-jni/libcurl/lib/http.h:
-
-jni/libcurl/lib/rtsp.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/lib/multihandle.h:
-
-jni/libcurl/lib/vtls/vtls.h:
-
-jni/libcurl/lib/vtls/openssl.h:
-
-jni/libcurl/lib/vtls/gtls.h:
-
-jni/libcurl/lib/vtls/nssg.h:
-
-jni/libcurl/lib/vtls/qssl.h:
-
-jni/libcurl/lib/vtls/gskit.h:
-
-jni/libcurl/lib/vtls/polarssl.h:
-
-jni/libcurl/lib/vtls/axtls.h:
-
-jni/libcurl/lib/vtls/cyassl.h:
-
-jni/libcurl/lib/vtls/curl_schannel.h:
-
-jni/libcurl/lib/vtls/curl_darwinssl.h:
-
-jni/libcurl/lib/slist.h:
-
-jni/libcurl/lib/sendf.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/url.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/progress.h:
-
-jni/libcurl/lib/share.h:
-
-jni/libcurl/lib/urldata.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/warnless.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/warnless.o
deleted file mode 100644
index 35123b69..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/warnless.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/warnless.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/warnless.o.d
deleted file mode 100644
index 0cde7135..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/warnless.o.d
+++ /dev/null
@@ -1,17 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/warnless.o: \
- jni/libcurl/lib/warnless.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/warnless.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/warnless.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.o
deleted file mode 100644
index a2c8d749..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.o.d
deleted file mode 100644
index 671bf755..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.o.d
+++ /dev/null
@@ -1,49 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/wildcard.o: \
- jni/libcurl/lib/wildcard.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/lib/wildcard.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/curlver.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/llist.h \
- jni/libcurl/lib/fileinfo.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/curl_memory.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/lib/wildcard.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/llist.h:
-
-jni/libcurl/lib/fileinfo.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/curl_memory.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.o
deleted file mode 100644
index d46d579f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.o.d
deleted file mode 100644
index 8eccf106..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.o.d
+++ /dev/null
@@ -1,14 +0,0 @@
-obj/local/armeabi-v7a/objs/curl-library/lib/x509asn1.o: \
- jni/libcurl/lib/x509asn1.c jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/curl_config.h jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_binmode.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_binmode.o
deleted file mode 100644
index ce28474b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_binmode.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_binmode.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_binmode.o.d
deleted file mode 100644
index 9417acb4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_binmode.o.d
+++ /dev/null
@@ -1,38 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_binmode.o: \
- jni/libcurl/src/tool_binmode.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_bname.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_bname.o
deleted file mode 100644
index 5270fc83..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_bname.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_bname.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_bname.o.d
deleted file mode 100644
index 246ca558..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_bname.o.d
+++ /dev/null
@@ -1,43 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_bname.o: \
- jni/libcurl/src/tool_bname.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_bname.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_bname.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.o
deleted file mode 100644
index e6c0d178..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.o.d
deleted file mode 100644
index dfefc139..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.o.d
+++ /dev/null
@@ -1,75 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_cb_dbg.o: \
- jni/libcurl/src/tool_cb_dbg.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_msgs.h jni/libcurl/src/tool_cb_dbg.h \
- jni/libcurl/src/tool_util.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_cb_dbg.h:
-
-jni/libcurl/src/tool_util.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.o
deleted file mode 100644
index e4f17078..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.o.d
deleted file mode 100644
index 543ddce9..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.o.d
+++ /dev/null
@@ -1,75 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_cb_hdr.o: \
- jni/libcurl/src/tool_cb_hdr.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curlx.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/warnless.h \
- jni/libcurl/src/tool_cfgable.h jni/libcurl/src/tool_sdecls.h \
- jni/libcurl/src/tool_metalink.h jni/libcurl/src/tool_msgs.h \
- jni/libcurl/src/tool_cb_hdr.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_cb_hdr.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.o
deleted file mode 100644
index cd4b2f99..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.o.d
deleted file mode 100644
index 42c4b984..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.o.d
+++ /dev/null
@@ -1,73 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_cb_prg.o: \
- jni/libcurl/src/tool_cb_prg.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_cb_prg.h jni/libcurl/src/tool_util.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_cb_prg.h:
-
-jni/libcurl/src/tool_util.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.o
deleted file mode 100644
index 516bd2ee..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.o.d
deleted file mode 100644
index f6aebb53..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.o.d
+++ /dev/null
@@ -1,70 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_cb_rea.o: \
- jni/libcurl/src/tool_cb_rea.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_cb_rea.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_cb_rea.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.o
deleted file mode 100644
index a6a4135f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.o.d
deleted file mode 100644
index f8f14c55..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.o.d
+++ /dev/null
@@ -1,70 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_cb_see.o: \
- jni/libcurl/src/tool_cb_see.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_cb_see.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_cb_see.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.o
deleted file mode 100644
index deefe141..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.o.d
deleted file mode 100644
index 6dc3c580..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.o.d
+++ /dev/null
@@ -1,73 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_cb_wrt.o: \
- jni/libcurl/src/tool_cb_wrt.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_msgs.h jni/libcurl/src/tool_cb_wrt.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_cb_wrt.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.o
deleted file mode 100644
index a1f8fbdd..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.o.d
deleted file mode 100644
index 6a1b75df..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.o.d
+++ /dev/null
@@ -1,50 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_cfgable.o: \
- jni/libcurl/src/tool_cfgable.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_main.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_main.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_convert.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_convert.o
deleted file mode 100644
index c6effef0..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_convert.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_convert.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_convert.o.d
deleted file mode 100644
index 8a7fa611..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_convert.o.d
+++ /dev/null
@@ -1,38 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_convert.o: \
- jni/libcurl/src/tool_convert.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.o
deleted file mode 100644
index fd4f3643..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.o.d
deleted file mode 100644
index 5ca1f8ed..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.o.d
+++ /dev/null
@@ -1,63 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_dirhie.o: \
- jni/libcurl/src/tool_dirhie.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_dirhie.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_dirhie.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_doswin.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_doswin.o
deleted file mode 100644
index df0bf727..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_doswin.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_doswin.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_doswin.o.d
deleted file mode 100644
index ac445f77..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_doswin.o.d
+++ /dev/null
@@ -1,38 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_doswin.o: \
- jni/libcurl/src/tool_doswin.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.o
deleted file mode 100644
index f977b6f3..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.o.d
deleted file mode 100644
index be3029fc..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.o.d
+++ /dev/null
@@ -1,73 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_easysrc.o: \
- jni/libcurl/src/tool_easysrc.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_easysrc.h jni/libcurl/src/tool_msgs.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_easysrc.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_formparse.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_formparse.o
deleted file mode 100644
index 70e39c0f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_formparse.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_formparse.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_formparse.o.d
deleted file mode 100644
index 99a03060..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_formparse.o.d
+++ /dev/null
@@ -1,78 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_formparse.o: \
- jni/libcurl/src/tool_formparse.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curlx.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/warnless.h \
- jni/libcurl/src/tool_cfgable.h jni/libcurl/src/tool_sdecls.h \
- jni/libcurl/src/tool_metalink.h jni/libcurl/src/tool_mfiles.h \
- jni/libcurl/src/tool_msgs.h jni/libcurl/src/tool_formparse.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_mfiles.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_formparse.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getparam.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getparam.o
deleted file mode 100644
index 75f1de68..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getparam.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getparam.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getparam.o.d
deleted file mode 100644
index 663f1319..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getparam.o.d
+++ /dev/null
@@ -1,93 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_getparam.o: \
- jni/libcurl/src/tool_getparam.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curlx.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/warnless.h \
- jni/libcurl/src/tool_binmode.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_cb_prg.h jni/libcurl/src/tool_formparse.h \
- jni/libcurl/src/tool_getparam.h jni/libcurl/src/tool_helpers.h \
- jni/libcurl/src/tool_libinfo.h jni/libcurl/src/tool_msgs.h \
- jni/libcurl/src/tool_paramhlp.h jni/libcurl/src/tool_parsecfg.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_binmode.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_cb_prg.h:
-
-jni/libcurl/src/tool_formparse.h:
-
-jni/libcurl/src/tool_getparam.h:
-
-jni/libcurl/src/tool_helpers.h:
-
-jni/libcurl/src/tool_libinfo.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_paramhlp.h:
-
-jni/libcurl/src/tool_parsecfg.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getpass.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getpass.o
deleted file mode 100644
index 1ad5226b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getpass.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getpass.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getpass.o.d
deleted file mode 100644
index 58622bdb..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_getpass.o.d
+++ /dev/null
@@ -1,46 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_getpass.o: \
- jni/libcurl/src/tool_getpass.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/src/tool_getpass.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/src/tool_getpass.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_help.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_help.o
deleted file mode 100644
index 6d4db746..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_help.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_help.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_help.o.d
deleted file mode 100644
index 103eec6d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_help.o.d
+++ /dev/null
@@ -1,53 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_help.o: \
- jni/libcurl/src/tool_help.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_panykey.h \
- jni/libcurl/src/tool_help.h jni/libcurl/src/tool_libinfo.h \
- jni/libcurl/src/tool_version.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_panykey.h:
-
-jni/libcurl/src/tool_help.h:
-
-jni/libcurl/src/tool_libinfo.h:
-
-jni/libcurl/src/tool_version.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_helpers.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_helpers.o
deleted file mode 100644
index 5fead907..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_helpers.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_helpers.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_helpers.o.d
deleted file mode 100644
index 116ab068..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_helpers.o.d
+++ /dev/null
@@ -1,78 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_helpers.o: \
- jni/libcurl/src/tool_helpers.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curlx.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/warnless.h \
- jni/libcurl/src/tool_cfgable.h jni/libcurl/src/tool_sdecls.h \
- jni/libcurl/src/tool_metalink.h jni/libcurl/src/tool_msgs.h \
- jni/libcurl/src/tool_getparam.h jni/libcurl/src/tool_helpers.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_getparam.h:
-
-jni/libcurl/src/tool_helpers.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_homedir.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_homedir.o
deleted file mode 100644
index 5ac18181..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_homedir.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_homedir.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_homedir.o.d
deleted file mode 100644
index 749db8e2..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_homedir.o.d
+++ /dev/null
@@ -1,43 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_homedir.o: \
- jni/libcurl/src/tool_homedir.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_homedir.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_homedir.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.o
deleted file mode 100644
index eb8437d5..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.o.d
deleted file mode 100644
index aba0c79a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.o.d
+++ /dev/null
@@ -1,43 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_hugehelp.o: \
- jni/libcurl/src/tool_hugehelp.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_hugehelp.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_hugehelp.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.o
deleted file mode 100644
index 2547d86c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.o.d
deleted file mode 100644
index df868d79..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.o.d
+++ /dev/null
@@ -1,65 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_libinfo.o: \
- jni/libcurl/src/tool_libinfo.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curlx.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/warnless.h \
- jni/libcurl/src/tool_libinfo.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_libinfo.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_main.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_main.o
deleted file mode 100644
index 0f5c7971..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_main.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_main.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_main.o.d
deleted file mode 100644
index 35a7fe56..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_main.o.d
+++ /dev/null
@@ -1,85 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_main.o: \
- jni/libcurl/src/tool_main.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_convert.h jni/libcurl/src/tool_msgs.h \
- jni/libcurl/src/tool_operate.h jni/libcurl/src/tool_panykey.h \
- jni/libcurl/src/tool_vms.h jni/libcurl/src/tool_main.h \
- jni/libcurl/src/tool_libinfo.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_convert.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_operate.h:
-
-jni/libcurl/src/tool_panykey.h:
-
-jni/libcurl/src/tool_vms.h:
-
-jni/libcurl/src/tool_main.h:
-
-jni/libcurl/src/tool_libinfo.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_metalink.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_metalink.o
deleted file mode 100644
index fc41446e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_metalink.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_metalink.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_metalink.o.d
deleted file mode 100644
index 2c9cccd1..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_metalink.o.d
+++ /dev/null
@@ -1,38 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_metalink.o: \
- jni/libcurl/src/tool_metalink.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.o
deleted file mode 100644
index 250a5dcf..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.o.d
deleted file mode 100644
index e2911537..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.o.d
+++ /dev/null
@@ -1,43 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_mfiles.o: \
- jni/libcurl/src/tool_mfiles.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_mfiles.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_mfiles.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_msgs.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_msgs.o
deleted file mode 100644
index 36651f94..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_msgs.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_msgs.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_msgs.o.d
deleted file mode 100644
index 53a4fc4c..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_msgs.o.d
+++ /dev/null
@@ -1,70 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_msgs.o: \
- jni/libcurl/src/tool_msgs.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_msgs.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operate.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operate.o
deleted file mode 100644
index 43f0cdb8..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operate.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operate.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operate.o.d
deleted file mode 100644
index 92476d76..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operate.o.d
+++ /dev/null
@@ -1,145 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_operate.o: \
- jni/libcurl/src/tool_operate.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curlx.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/warnless.h \
- jni/libcurl/src/tool_binmode.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_cb_dbg.h jni/libcurl/src/tool_cb_hdr.h \
- jni/libcurl/src/tool_cb_prg.h jni/libcurl/src/tool_cb_rea.h \
- jni/libcurl/src/tool_cb_see.h jni/libcurl/src/tool_cb_wrt.h \
- jni/libcurl/src/tool_dirhie.h jni/libcurl/src/tool_doswin.h \
- jni/libcurl/src/tool_easysrc.h jni/libcurl/src/tool_getparam.h \
- jni/libcurl/src/tool_helpers.h jni/libcurl/src/tool_homedir.h \
- jni/libcurl/src/tool_libinfo.h jni/libcurl/src/tool_main.h \
- jni/libcurl/src/tool_msgs.h jni/libcurl/src/tool_operate.h \
- jni/libcurl/src/tool_operhlp.h jni/libcurl/src/tool_paramhlp.h \
- jni/libcurl/src/tool_parsecfg.h jni/libcurl/src/tool_setopt.h \
- jni/libcurl/src/tool_sleep.h jni/libcurl/src/tool_urlglob.h \
- jni/libcurl/src/tool_util.h jni/libcurl/src/tool_writeenv.h \
- jni/libcurl/src/tool_writeout.h jni/libcurl/src/tool_xattr.h \
- jni/libcurl/src/tool_vms.h jni/libcurl/src/tool_help.h \
- jni/libcurl/src/tool_hugehelp.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_binmode.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_cb_dbg.h:
-
-jni/libcurl/src/tool_cb_hdr.h:
-
-jni/libcurl/src/tool_cb_prg.h:
-
-jni/libcurl/src/tool_cb_rea.h:
-
-jni/libcurl/src/tool_cb_see.h:
-
-jni/libcurl/src/tool_cb_wrt.h:
-
-jni/libcurl/src/tool_dirhie.h:
-
-jni/libcurl/src/tool_doswin.h:
-
-jni/libcurl/src/tool_easysrc.h:
-
-jni/libcurl/src/tool_getparam.h:
-
-jni/libcurl/src/tool_helpers.h:
-
-jni/libcurl/src/tool_homedir.h:
-
-jni/libcurl/src/tool_libinfo.h:
-
-jni/libcurl/src/tool_main.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_operate.h:
-
-jni/libcurl/src/tool_operhlp.h:
-
-jni/libcurl/src/tool_paramhlp.h:
-
-jni/libcurl/src/tool_parsecfg.h:
-
-jni/libcurl/src/tool_setopt.h:
-
-jni/libcurl/src/tool_sleep.h:
-
-jni/libcurl/src/tool_urlglob.h:
-
-jni/libcurl/src/tool_util.h:
-
-jni/libcurl/src/tool_writeenv.h:
-
-jni/libcurl/src/tool_writeout.h:
-
-jni/libcurl/src/tool_xattr.h:
-
-jni/libcurl/src/tool_vms.h:
-
-jni/libcurl/src/tool_help.h:
-
-jni/libcurl/src/tool_hugehelp.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.o
deleted file mode 100644
index dd2606f4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.o.d
deleted file mode 100644
index ccb63b60..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.o.d
+++ /dev/null
@@ -1,75 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_operhlp.o: \
- jni/libcurl/src/tool_operhlp.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curlx.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/warnless.h \
- jni/libcurl/src/tool_cfgable.h jni/libcurl/src/tool_sdecls.h \
- jni/libcurl/src/tool_metalink.h jni/libcurl/src/tool_convert.h \
- jni/libcurl/src/tool_operhlp.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_convert.h:
-
-jni/libcurl/src/tool_operhlp.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_panykey.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_panykey.o
deleted file mode 100644
index eb440c26..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_panykey.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_panykey.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_panykey.o.d
deleted file mode 100644
index 85d1bbc4..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_panykey.o.d
+++ /dev/null
@@ -1,38 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_panykey.o: \
- jni/libcurl/src/tool_panykey.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.o
deleted file mode 100644
index 7d129d1a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.o.d
deleted file mode 100644
index f78a5397..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.o.d
+++ /dev/null
@@ -1,88 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_paramhlp.o: \
- jni/libcurl/src/tool_paramhlp.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/rawstr.h \
- jni/libcurl/lib/curlx.h jni/libcurl/include/curl/mprintf.h \
- jni/libcurl/lib/strequal.h jni/libcurl/lib/strtoofft.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/timeval.h \
- jni/libcurl/lib/nonblock.h jni/libcurl/lib/warnless.h \
- jni/libcurl/src/tool_cfgable.h jni/libcurl/src/tool_sdecls.h \
- jni/libcurl/src/tool_metalink.h jni/libcurl/src/tool_getparam.h \
- jni/libcurl/src/tool_getpass.h jni/libcurl/src/tool_homedir.h \
- jni/libcurl/src/tool_msgs.h jni/libcurl/src/tool_paramhlp.h \
- jni/libcurl/src/tool_version.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/rawstr.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_getparam.h:
-
-jni/libcurl/src/tool_getpass.h:
-
-jni/libcurl/src/tool_homedir.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_paramhlp.h:
-
-jni/libcurl/src/tool_version.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.o
deleted file mode 100644
index 66233f96..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.o.d
deleted file mode 100644
index 4b014fe9..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.o.d
+++ /dev/null
@@ -1,80 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_parsecfg.o: \
- jni/libcurl/src/tool_parsecfg.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_getparam.h jni/libcurl/src/tool_helpers.h \
- jni/libcurl/src/tool_homedir.h jni/libcurl/src/tool_msgs.h \
- jni/libcurl/src/tool_parsecfg.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_getparam.h:
-
-jni/libcurl/src/tool_helpers.h:
-
-jni/libcurl/src/tool_homedir.h:
-
-jni/libcurl/src/tool_msgs.h:
-
-jni/libcurl/src/tool_parsecfg.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_setopt.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_setopt.o
deleted file mode 100644
index 353c8184..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_setopt.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_setopt.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_setopt.o.d
deleted file mode 100644
index 1fc95179..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_setopt.o.d
+++ /dev/null
@@ -1,73 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_setopt.o: \
- jni/libcurl/src/tool_setopt.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/lib/curlx.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/lib/strequal.h \
- jni/libcurl/lib/strtoofft.h jni/libcurl/lib/curl_setup.h \
- jni/libcurl/lib/timeval.h jni/libcurl/lib/nonblock.h \
- jni/libcurl/lib/warnless.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_easysrc.h jni/libcurl/src/tool_setopt.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/lib/curlx.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/lib/strequal.h:
-
-jni/libcurl/lib/strtoofft.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/timeval.h:
-
-jni/libcurl/lib/nonblock.h:
-
-jni/libcurl/lib/warnless.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_easysrc.h:
-
-jni/libcurl/src/tool_setopt.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_sleep.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_sleep.o
deleted file mode 100644
index 877b3022..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_sleep.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_sleep.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_sleep.o.d
deleted file mode 100644
index 070c232a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_sleep.o.d
+++ /dev/null
@@ -1,43 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_sleep.o: \
- jni/libcurl/src/tool_sleep.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_sleep.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_sleep.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.o
deleted file mode 100644
index 3582b9a7..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.o.d
deleted file mode 100644
index a4c89bb9..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.o.d
+++ /dev/null
@@ -1,48 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_urlglob.o: \
- jni/libcurl/src/tool_urlglob.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/src/tool_urlglob.h \
- jni/libcurl/src/tool_vms.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/src/tool_urlglob.h:
-
-jni/libcurl/src/tool_vms.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_util.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_util.o
deleted file mode 100644
index 1e02010f..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_util.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_util.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_util.o.d
deleted file mode 100644
index e04e2594..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_util.o.d
+++ /dev/null
@@ -1,43 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_util.o: \
- jni/libcurl/src/tool_util.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_util.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_util.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_vms.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_vms.o
deleted file mode 100644
index 8a5cb6ea..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_vms.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_vms.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_vms.o.d
deleted file mode 100644
index b7340898..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_vms.o.d
+++ /dev/null
@@ -1,38 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_vms.o: \
- jni/libcurl/src/tool_vms.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.o
deleted file mode 100644
index 60e86985..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.o.d
deleted file mode 100644
index 39b52ddb..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.o.d
+++ /dev/null
@@ -1,38 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_writeenv.o: \
- jni/libcurl/src/tool_writeenv.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeout.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeout.o
deleted file mode 100644
index db7e5b4a..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeout.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeout.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeout.o.d
deleted file mode 100644
index 6069948b..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_writeout.o.d
+++ /dev/null
@@ -1,53 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_writeout.o: \
- jni/libcurl/src/tool_writeout.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h \
- jni/libcurl/include/curl/mprintf.h jni/libcurl/src/tool_cfgable.h \
- jni/libcurl/src/tool_sdecls.h jni/libcurl/src/tool_metalink.h \
- jni/libcurl/src/tool_writeout.h jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/include/curl/mprintf.h:
-
-jni/libcurl/src/tool_cfgable.h:
-
-jni/libcurl/src/tool_sdecls.h:
-
-jni/libcurl/src/tool_metalink.h:
-
-jni/libcurl/src/tool_writeout.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_xattr.o b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_xattr.o
deleted file mode 100644
index 7dc6ce2d..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_xattr.o
+++ /dev/null
Binary files differ
diff --git a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_xattr.o.d b/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_xattr.o.d
deleted file mode 100644
index 9200b91e..00000000
--- a/external/libcurl_android/obj/local/armeabi-v7a/objs/curl/src/tool_xattr.o.d
+++ /dev/null
@@ -1,43 +0,0 @@
-obj/local/armeabi-v7a/objs/curl/src/tool_xattr.o: \
- jni/libcurl/src/tool_xattr.c jni/libcurl/src/tool_setup.h \
- jni/libcurl/lib/curl_setup.h jni/libcurl/lib/curl_config.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/lib/curl_setup_once.h \
- jni/libcurl/include/curl/curl.h jni/libcurl/include/curl/curlver.h \
- jni/libcurl/include/curl/curlbuild.h \
- jni/libcurl/include/curl/curlrules.h jni/libcurl/include/curl/easy.h \
- jni/libcurl/include/curl/multi.h jni/libcurl/include/curl/curl.h \
- jni/libcurl/include/curl/typecheck-gcc.h jni/libcurl/src/tool_xattr.h \
- jni/libcurl/lib/memdebug.h
-
-jni/libcurl/src/tool_setup.h:
-
-jni/libcurl/lib/curl_setup.h:
-
-jni/libcurl/lib/curl_config.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/lib/curl_setup_once.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/curlver.h:
-
-jni/libcurl/include/curl/curlbuild.h:
-
-jni/libcurl/include/curl/curlrules.h:
-
-jni/libcurl/include/curl/easy.h:
-
-jni/libcurl/include/curl/multi.h:
-
-jni/libcurl/include/curl/curl.h:
-
-jni/libcurl/include/curl/typecheck-gcc.h:
-
-jni/libcurl/src/tool_xattr.h:
-
-jni/libcurl/lib/memdebug.h:
diff --git a/external/libevent/AddEventLibrary.cmake b/external/libevent/AddEventLibrary.cmake
new file mode 100644
index 00000000..673c5220
--- /dev/null
+++ b/external/libevent/AddEventLibrary.cmake
@@ -0,0 +1,110 @@
+include(CMakeParseArguments)
+
+#set(LIBEVENT_SHARED_LIBRARIES "")
+set(LIBEVENT_STATIC_LIBRARIES "")
+
+macro(set_event_lib_properties LIB_NAME)
+ set_target_properties("${LIB_NAME}_static" PROPERTIES ${ARGN})
+ set_target_properties("${LIB_NAME}_shared" PROPERTIES ${ARGN})
+endmacro()
+
+macro(set_event_shared_lib_flags LIB_NAME)
+ set_target_properties("${LIB_NAME}_shared" PROPERTIES
+ COMPILE_FLAGS ${ARGN})
+ set_target_properties("${LIB_NAME}_shared" PROPERTIES
+ LINK_FLAGS ${ARGN})
+endmacro()
+
+macro(generate_pkgconfig LIB_NAME)
+ set(prefix ${CMAKE_INSTALL_PREFIX})
+ set(exec_prefix ${CMAKE_INSTALL_PREFIX})
+ set(libdir ${CMAKE_INSTALL_PREFIX}/lib)
+ set(includedir ${CMAKE_INSTALL_PREFIX}/include)
+
+ set(VERSION ${EVENT_ABI_LIBVERSION})
+
+ set(LIBS "")
+ foreach (LIB ${LIB_PLATFORM})
+ set(LIBS "${LIBS} -L${LIB}")
+ endforeach()
+
+ set(OPENSSL_LIBS "")
+ foreach(LIB ${OPENSSL_LIBRARIES})
+ set(OPENSSL_LIBS "${OPENSSL_LIBS} -L${LIB}")
+ endforeach()
+
+ configure_file("lib${LIB_NAME}.pc.in" "lib${LIB_NAME}.pc" @ONLY)
+ install(
+ FILES "${CMAKE_CURRENT_BINARY_DIR}/lib${LIB_NAME}.pc"
+ DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig"
+ )
+endmacro()
+
+
+# Global variables that it uses:
+# - EVENT_ABI_LIBVERSION
+# - CMAKE_THREAD_LIBS_INIT LIB_PLATFORM
+# - OPENSSL_LIBRARIES
+# - HDR_PUBLIC
+# - EVENT_INSTALL_INCLUDE_DIR
+# - EVENT_SHARED_FLAGS
+#
+# Exported variables:
+# - LIBEVENT_SHARED_LIBRARIES
+# - LIBEVENT_STATIC_LIBRARIES
+macro(add_event_library LIB_NAME)
+ cmake_parse_arguments(LIB
+ "" # Options
+ "VERSION" # One val
+ "SOURCES;LIBRARIES" # Multi val
+ ${ARGN}
+ )
+
+ add_library("${LIB_NAME}_static" STATIC ${LIB_SOURCES})
+ add_library("${LIB_NAME}_shared" SHARED ${LIB_SOURCES})
+
+ target_link_libraries("${LIB_NAME}_shared"
+ ${CMAKE_THREAD_LIBS_INIT}
+ ${LIB_PLATFORM}
+ ${LIB_LIBRARIES})
+
+ if (EVENT_SHARED_FLAGS)
+ set_event_shared_lib_flags("${LIB_NAME}" "${EVENT_SHARED_FLAGS}")
+ endif()
+
+ set_event_lib_properties("${LIB_NAME}"
+ OUTPUT_NAME "${LIB_NAME}"
+ CLEAN_DIRECT_OUTPUT 1
+ )
+
+ set_target_properties(
+ "${LIB_NAME}_shared" PROPERTIES
+ PUBLIC_HEADER "${HDR_PUBLIC}")
+ set_target_properties(
+ "${LIB_NAME}_static" PROPERTIES
+ PUBLIC_HEADER "${HDR_PUBLIC}")
+
+ set_target_properties(
+ "${LIB_NAME}_shared" PROPERTIES
+ SOVERSION ${EVENT_ABI_LIBVERSION}
+ )
+
+ export(TARGETS "${LIB_NAME}_static" #"${LIB_NAME}_shared"
+ FILE "${PROJECT_BINARY_DIR}/LibeventTargets.cmake"
+ APPEND
+ )
+
+ install(TARGETS "${LIB_NAME}_static" #"${LIB_NAME}_shared"
+ EXPORT LibeventTargets
+ LIBRARY DESTINATION "lib" COMPONENT lib
+ ARCHIVE DESTINATION "lib" COMPONENT lib
+ PUBLIC_HEADER DESTINATION "include/event2"
+ COMPONENT dev
+ )
+
+ #list(APPEND LIBEVENT_SHARED_LIBRARIES "${LIB_NAME}_shared")
+ list(APPEND LIBEVENT_STATIC_LIBRARIES "${LIB_NAME}_static")
+
+ generate_pkgconfig("${LIB_NAME}")
+endmacro()
+
diff --git a/external/libevent_files/Android.mk b/external/libevent_files/Android.mk
deleted file mode 100644
index 87b06f06..00000000
--- a/external/libevent_files/Android.mk
+++ /dev/null
@@ -1,47 +0,0 @@
-####################################
-# Build libevent as separate library
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_MODULE:= event
-LOCAL_MODULE_TAGS:= optional
-
-LOCAL_SRC_FILES := \
- arc4random.c \
- buffer.c \
- bufferevent.c \
- bufferevent_filter.c \
- bufferevent_openssl.c \
- bufferevent_pair.c \
- bufferevent_ratelim.c \
- bufferevent_sock.c \
- epoll.c \
- epoll_sub.c \
- evdns.c \
- event.c \
- event_tagging.c \
- evmap.c \
- evrpc.c \
- evthread.c \
- evthread_pthread.c \
- evutil.c \
- evutil_rand.c \
- http.c \
- listener.c \
- log.c \
- poll.c \
- select.c \
- signal.c \
- strlcpy.c
-
-LOCAL_C_INCLUDES := \
- $(LOCAL_PATH) \
- $(LOCAL_PATH)/android \
- $(LOCAL_PATH)/include \
- $(DISTILLERY_ROOT_DIR)/usr/include
-
-LOCAL_CFLAGS := -DHAVE_CONFIG_H -DANDROID -fvisibility=hidden
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/external/libevent_files/AndroidManifest.xml b/external/libevent_files/AndroidManifest.xml
deleted file mode 100644
index e69de29b..00000000
--- a/external/libevent_files/AndroidManifest.xml
+++ /dev/null
diff --git a/external/libevent_files/Application.mk b/external/libevent_files/Application.mk
deleted file mode 100644
index 866e083c..00000000
--- a/external/libevent_files/Application.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-APP_BUILD_SCRIPT := Android.mk
-APP_ABI := armeabi-v7a
-APP_PLATFORM := android-23
-APP_STL := gnustl_shared
-APP_CPPFLAGS += -fexceptions -frtti -std=c++11 -Wno-deprecated-declarations
diff --git a/external/libevent_files/android/event2/config.h b/external/libevent_files/android/event2/config.h
deleted file mode 100644
index e601874c..00000000
--- a/external/libevent_files/android/event2/config.h
+++ /dev/null
@@ -1,440 +0,0 @@
-/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.in by autoheader. */
-
-/* Define if libevent should build without support for a debug mode */
-/* #undef DISABLE_DEBUG_MODE */
-
-/* Define if libevent should not allow replacing the mm functions */
-/* #undef DISABLE_MM_REPLACEMENT */
-
-/* Define if libevent should not be compiled with thread support */
-/* #undef DISABLE_THREAD_SUPPORT */
-
-/* Define to 1 if you have the `arc4random' function. */
-#define HAVE_ARC4RANDOM 1
-
-/* Define to 1 if you have the `arc4random_buf' function. */
-#define HAVE_ARC4RANDOM_BUF 1
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the `clock_gettime' function. */
-#define HAVE_CLOCK_GETTIME 1
-
-/* Define to 1 if you have the declaration of `CTL_KERN', and to 0 if you
- don't. */
-/* #undef HAVE_DECL_CTL_KERN */
-
-/* Define to 1 if you have the declaration of `KERN_ARND', and to 0 if you
- don't. */
-/* #undef HAVE_DECL_KERN_ARND */
-
-/* Define to 1 if you have the declaration of `KERN_RANDOM', and to 0 if you
- don't. */
-/* #undef HAVE_DECL_KERN_RANDOM */
-
-/* Define to 1 if you have the declaration of `RANDOM_UUID', and to 0 if you
- don't. */
-/* #undef HAVE_DECL_RANDOM_UUID */
-
-/* Define if /dev/poll is available */
-/* #undef HAVE_DEVPOLL */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Define if your system supports the epoll system calls */
-#define HAVE_EPOLL 1
-
-/* Define to 1 if you have the `epoll_ctl' function. */
-#define HAVE_EPOLL_CTL 1
-
-/* Define to 1 if you have the `eventfd' function. */
-#define HAVE_EVENTFD 1
-
-/* Define if your system supports event ports */
-/* #undef HAVE_EVENT_PORTS */
-
-/* Define to 1 if you have the `fcntl' function. */
-#define HAVE_FCNTL 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if the system has the type `fd_mask'. */
-/* #undef HAVE_FD_MASK */
-
-/* Do we have getaddrinfo()? */
-#define HAVE_GETADDRINFO 1
-
-/* Define to 1 if you have the `getegid' function. */
-#define HAVE_GETEGID 1
-
-/* Define to 1 if you have the `geteuid' function. */
-#define HAVE_GETEUID 1
-
-/* Define this if you have any gethostbyname_r() */
-/* #undef HAVE_GETHOSTBYNAME_R */
-
-/* Define this if gethostbyname_r takes 3 arguments */
-/* #undef HAVE_GETHOSTBYNAME_R_3_ARG */
-
-/* Define this if gethostbyname_r takes 5 arguments */
-/* #undef HAVE_GETHOSTBYNAME_R_5_ARG */
-
-/* Define this if gethostbyname_r takes 6 arguments */
-/* #undef HAVE_GETHOSTBYNAME_R_6_ARG */
-
-/* Define to 1 if you have the `getnameinfo' function. */
-#define HAVE_GETNAMEINFO 1
-
-/* Define to 1 if you have the `getprotobynumber' function. */
-#define HAVE_GETPROTOBYNUMBER 1
-
-/* Define to 1 if you have the `getservbyname' function. */
-/* #undef HAVE_GETSERVBYNAME */
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have the `inet_aton' function. */
-#define HAVE_INET_ATON 1
-
-/* Define to 1 if you have the `inet_ntop' function. */
-#define HAVE_INET_NTOP 1
-
-/* Define to 1 if you have the `inet_pton' function. */
-#define HAVE_INET_PTON 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `issetugid' function. */
-#define HAVE_ISSETUGID 1
-
-/* Define to 1 if you have the `kqueue' function. */
-/* #undef HAVE_KQUEUE */
-
-/* Define if the system has zlib */
-/* #undef HAVE_LIBZ */
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mmap' function. */
-#define HAVE_MMAP 1
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in6.h> header file. */
-#define HAVE_NETINET_IN6_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define if the system has openssl */
-/* #undef HAVE_OPENSSL */
-
-/* Define to 1 if you have the <openssl/bio.h> header file. */
-/* #undef HAVE_OPENSSL_BIO_H */
-
-/* Define to 1 if you have the `pipe' function. */
-#define HAVE_PIPE 1
-
-/* Define to 1 if you have the `poll' function. */
-#define HAVE_POLL 1
-
-/* Define to 1 if you have the <poll.h> header file. */
-#define HAVE_POLL_H 1
-
-/* Define to 1 if you have the `port_create' function. */
-/* #undef HAVE_PORT_CREATE */
-
-/* Define to 1 if you have the <port.h> header file. */
-/* #undef HAVE_PORT_H */
-
-/* Define if you have POSIX threads libraries and header files. */
-/* #undef HAVE_PTHREAD */
-
-/* Define if we have pthreads on this system */
-#define HAVE_PTHREADS 1
-
-/* Define to 1 if you have the `putenv' function. */
-#define HAVE_PUTENV 1
-
-/* Define to 1 if the system has the type `sa_family_t'. */
-#define HAVE_SA_FAMILY_T 1
-
-/* Define to 1 if you have the `select' function. */
-#define HAVE_SELECT 1
-
-/* Define to 1 if you have the `sendfile' function. */
-#define HAVE_SENDFILE 1
-
-/* Define to 1 if you have the `setenv' function. */
-#define HAVE_SETENV 1
-
-/* Define if F_SETFD is defined in <fcntl.h> */
-#define HAVE_SETFD 1
-
-/* Define to 1 if you have the `sigaction' function. */
-#define HAVE_SIGACTION 1
-
-/* Define to 1 if you have the `signal' function. */
-/* #undef HAVE_SIGNAL */
-
-/* Define to 1 if you have the `splice' function. */
-/* #undef HAVE_SPLICE */
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#define HAVE_STDARG_H 1
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#define HAVE_STDDEF_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strlcpy' function. */
-#define HAVE_STRLCPY 1
-
-/* Define to 1 if you have the `strsep' function. */
-#define HAVE_STRSEP 1
-
-/* Define to 1 if you have the `strtok_r' function. */
-#define HAVE_STRTOK_R 1
-
-/* Define to 1 if you have the `strtoll' function. */
-#define HAVE_STRTOLL 1
-
-/* Define to 1 if the system has the type `struct addrinfo'. */
-#define HAVE_STRUCT_ADDRINFO 1
-
-/* Define to 1 if the system has the type `struct in6_addr'. */
-#define HAVE_STRUCT_IN6_ADDR 1
-
-/* Define to 1 if `s6_addr16' is a member of `struct in6_addr'. */
-#define HAVE_STRUCT_IN6_ADDR_S6_ADDR16 1
-
-/* Define to 1 if `s6_addr32' is a member of `struct in6_addr'. */
-#define HAVE_STRUCT_IN6_ADDR_S6_ADDR32 1
-
-/* Define to 1 if the system has the type `struct sockaddr_in6'. */
-#define HAVE_STRUCT_SOCKADDR_IN6 1
-
-/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */
-/* #undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN */
-
-/* Define to 1 if `sin_len' is a member of `struct sockaddr_in'. */
-/* #undef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
-
-/* Define to 1 if the system has the type `struct sockaddr_storage'. */
-#define HAVE_STRUCT_SOCKADDR_STORAGE 1
-
-/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */
-#define HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1
-
-/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */
-/* #undef HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY */
-
-/* Define to 1 if you have the `sysctl' function. */
-/* #undef HAVE_SYSCTL */
-
-/* Define to 1 if you have the <sys/devpoll.h> header file. */
-/* #undef HAVE_SYS_DEVPOLL_H */
-
-/* Define to 1 if you have the <sys/epoll.h> header file. */
-#define HAVE_SYS_EPOLL_H 1
-
-/* Define to 1 if you have the <sys/eventfd.h> header file. */
-#define HAVE_SYS_EVENTFD_H 1
-
-/* Define to 1 if you have the <sys/event.h> header file. */
-/* #undef HAVE_SYS_EVENT_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#define HAVE_SYS_MMAN_H 1
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/queue.h> header file. */
-#define HAVE_SYS_QUEUE_H 1
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the <sys/sendfile.h> header file. */
-#define HAVE_SYS_SENDFILE_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/sysctl.h> header file. */
-/* #undef HAVE_SYS_SYSCTL_H */
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define HAVE_SYS_UIO_H 1
-
-/* Define to 1 if you have the <sys/wait.h> header file. */
-#define HAVE_SYS_WAIT_H 1
-
-/* Define if TAILQ_FOREACH is defined in <sys/queue.h> */
-#define HAVE_TAILQFOREACH 1
-
-/* Define if timeradd is defined in <sys/time.h> */
-#define HAVE_TIMERADD 1
-
-/* Define if timerclear is defined in <sys/time.h> */
-#define HAVE_TIMERCLEAR 1
-
-/* Define if timercmp is defined in <sys/time.h> */
-#define HAVE_TIMERCMP 1
-
-/* Define if timerisset is defined in <sys/time.h> */
-#define HAVE_TIMERISSET 1
-
-/* Define to 1 if the system has the type `uint16_t'. */
-#define HAVE_UINT16_T 1
-
-/* Define to 1 if the system has the type `uint32_t'. */
-#define HAVE_UINT32_T 1
-
-/* Define to 1 if the system has the type `uint64_t'. */
-#define HAVE_UINT64_T 1
-
-/* Define to 1 if the system has the type `uint8_t'. */
-#define HAVE_UINT8_T 1
-
-/* Define to 1 if the system has the type `uintptr_t'. */
-#define HAVE_UINTPTR_T 1
-
-/* Define to 1 if you have the `umask' function. */
-#define HAVE_UMASK 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `unsetenv' function. */
-#define HAVE_UNSETENV 1
-
-/* Define to 1 if you have the `vasprintf' function. */
-#define HAVE_VASPRINTF 1
-
-/* Define if kqueue works correctly with pipes */
-/* #undef HAVE_WORKING_KQUEUE */
-
-/* Define to 1 if you have the <zlib.h> header file. */
-/* #undef HAVE_ZLIB_H */
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define LT_OBJDIR ".libs/"
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-/* #undef NO_MINUS_C_MINUS_O */
-
-/* Numeric representation of the version */
-#define NUMERIC_VERSION 0x02001400
-
-/* Name of package */
-#define PACKAGE "libevent"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* Define to necessary symbol if this constant uses a non-standard name on
- your system. */
-/* #undef PTHREAD_CREATE_JOINABLE */
-
-/* The size of `int', as computed by sizeof. */
-#define SIZEOF_INT 4
-
-/* The size of `long', as computed by sizeof. */
-#define SIZEOF_LONG 4
-
-/* The size of `long long', as computed by sizeof. */
-#define SIZEOF_LONG_LONG 8
-
-/* The size of `pthread_t', as computed by sizeof. */
-#define SIZEOF_PTHREAD_T 4
-
-/* The size of `short', as computed by sizeof. */
-#define SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#define SIZEOF_SIZE_T 4
-
-/* The size of `void *', as computed by sizeof. */
-#define SIZEOF_VOID_P 4
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define TIME_WITH_SYS_TIME 1
-
-/* Version number of package */
-#define VERSION "2.0.20-stable"
-
-/* Define to appropriate substitue if compiler doesnt have __func__ */
-/* #undef __func__ */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef const */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-/* #undef inline */
-#endif
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef pid_t */
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-/* #undef size_t */
-
-/* Define to unsigned int if you dont have it */
-/* #undef socklen_t */
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef ssize_t */
diff --git a/external/libevent_files/android/event2/event-config.h b/external/libevent_files/android/event2/event-config.h
deleted file mode 100644
index 14cd020e..00000000
--- a/external/libevent_files/android/event2/event-config.h
+++ /dev/null
@@ -1,464 +0,0 @@
-/* event2/event-config.h
- *
- * This file was generated by autoconf when libevent was built, and post-
- * processed by Libevent so that its macros would have a uniform prefix.
- *
- * DO NOT EDIT THIS FILE.
- *
- * Do not rely on macros in this file existing in later versions.
- */
-
-/* unfortunately, Android doesn't define a TAILQ_END, so add this here.
- * hopefully bionic is fixed or someone reads this message before
- * regenerating this file:
- */
-#ifndef TAILQ_END
-#define TAILQ_END(head) (NULL)
-#endif
-/* end android compat */
-
-#ifndef _EVENT2_EVENT_CONFIG_H_
-#define _EVENT2_EVENT_CONFIG_H_
-
-/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.in by autoheader. */
-
-/* Define if libevent should build without support for a debug mode */
-/* #undef _EVENT_DISABLE_DEBUG_MODE */
-
-/* Define if libevent should not allow replacing the mm functions */
-/* #undef _EVENT_DISABLE_MM_REPLACEMENT */
-
-/* Define if libevent should not be compiled with thread support */
-/* #undef _EVENT_DISABLE_THREAD_SUPPORT */
-
-/* Define to 1 if you have the `arc4random' function. */
-#define _EVENT_HAVE_ARC4RANDOM 1
-
-/* Define to 1 if you have the `arc4random_buf' function. */
-#define _EVENT_HAVE_ARC4RANDOM_BUF 1
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define _EVENT_HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the `clock_gettime' function. */
-#define _EVENT_HAVE_CLOCK_GETTIME 1
-
-/* Define to 1 if you have the declaration of `CTL_KERN', and to 0 if you
- don't. */
-/* #undef _EVENT_HAVE_DECL_CTL_KERN */
-
-/* Define to 1 if you have the declaration of `KERN_ARND', and to 0 if you
- don't. */
-/* #undef _EVENT_HAVE_DECL_KERN_ARND */
-
-/* Define to 1 if you have the declaration of `KERN_RANDOM', and to 0 if you
- don't. */
-/* #undef _EVENT_HAVE_DECL_KERN_RANDOM */
-
-/* Define to 1 if you have the declaration of `RANDOM_UUID', and to 0 if you
- don't. */
-/* #undef _EVENT_HAVE_DECL_RANDOM_UUID */
-
-/* Define if /dev/poll is available */
-/* #undef _EVENT_HAVE_DEVPOLL */
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define _EVENT_HAVE_DLFCN_H 1
-
-/* Define if your system supports the epoll system calls */
-#define _EVENT_HAVE_EPOLL 1
-
-/* Define to 1 if you have the `epoll_ctl' function. */
-#define _EVENT_HAVE_EPOLL_CTL 1
-
-/* Define to 1 if you have the `eventfd' function. */
-#define _EVENT_HAVE_EVENTFD 1
-
-/* Define if your system supports event ports */
-/* #undef _EVENT_HAVE_EVENT_PORTS */
-
-/* Define to 1 if you have the `fcntl' function. */
-#define _EVENT_HAVE_FCNTL 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define _EVENT_HAVE_FCNTL_H 1
-
-/* Define to 1 if the system has the type `fd_mask'. */
-/* #undef _EVENT_HAVE_FD_MASK */
-
-/* Do we have getaddrinfo()? */
-#define _EVENT_HAVE_GETADDRINFO 1
-
-/* Define to 1 if you have the `getegid' function. */
-#define _EVENT_HAVE_GETEGID 1
-
-/* Define to 1 if you have the `geteuid' function. */
-#define _EVENT_HAVE_GETEUID 1
-
-/* Define this if you have any gethostbyname_r() */
-/* #undef _EVENT_HAVE_GETHOSTBYNAME_R */
-
-/* Define this if gethostbyname_r takes 3 arguments */
-/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_3_ARG */
-
-/* Define this if gethostbyname_r takes 5 arguments */
-/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_5_ARG */
-
-/* Define this if gethostbyname_r takes 6 arguments */
-/* #undef _EVENT_HAVE_GETHOSTBYNAME_R_6_ARG */
-
-/* Define to 1 if you have the `getnameinfo' function. */
-#define _EVENT_HAVE_GETNAMEINFO 1
-
-/* Define to 1 if you have the `getprotobynumber' function. */
-#define _EVENT_HAVE_GETPROTOBYNUMBER 1
-
-/* Define to 1 if you have the `getservbyname' function. */
-/* #undef _EVENT_HAVE_GETSERVBYNAME */
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define _EVENT_HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have the `inet_aton' function. */
-#define _EVENT_HAVE_INET_ATON 1
-
-/* Define to 1 if you have the `inet_ntop' function. */
-#define _EVENT_HAVE_INET_NTOP 1
-
-/* Define to 1 if you have the `inet_pton' function. */
-#define _EVENT_HAVE_INET_PTON 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define _EVENT_HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `issetugid' function. */
-#define _EVENT_HAVE_ISSETUGID 1
-
-/* Define to 1 if you have the `kqueue' function. */
-/* #undef _EVENT_HAVE_KQUEUE */
-
-/* Define if the system has zlib */
-/* #undef _EVENT_HAVE_LIBZ */
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define _EVENT_HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mmap' function. */
-#define _EVENT_HAVE_MMAP 1
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define _EVENT_HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in6.h> header file. */
-#define _EVENT_HAVE_NETINET_IN6_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define _EVENT_HAVE_NETINET_IN_H 1
-
-/* Define if the system has openssl */
-/* #undef _EVENT_HAVE_OPENSSL */
-
-/* Define to 1 if you have the <openssl/bio.h> header file. */
-/* #undef _EVENT_HAVE_OPENSSL_BIO_H */
-
-/* Define to 1 if you have the `pipe' function. */
-#define _EVENT_HAVE_PIPE 1
-
-/* Define to 1 if you have the `poll' function. */
-#define _EVENT_HAVE_POLL 1
-
-/* Define to 1 if you have the <poll.h> header file. */
-#define _EVENT_HAVE_POLL_H 1
-
-/* Define to 1 if you have the `port_create' function. */
-/* #undef _EVENT_HAVE_PORT_CREATE */
-
-/* Define to 1 if you have the <port.h> header file. */
-/* #undef _EVENT_HAVE_PORT_H */
-
-/* Define if you have POSIX threads libraries and header files. */
-/* #undef _EVENT_HAVE_PTHREAD */
-
-/* Define if we have pthreads on this system */
-#define _EVENT_HAVE_PTHREADS 1
-
-/* Define to 1 if you have the `putenv' function. */
-#define _EVENT_HAVE_PUTENV 1
-
-/* Define to 1 if the system has the type `sa_family_t'. */
-#define _EVENT_HAVE_SA_FAMILY_T 1
-
-/* Define to 1 if you have the `select' function. */
-#define _EVENT_HAVE_SELECT 1
-
-/* Define to 1 if you have the `sendfile' function. */
-#define _EVENT_HAVE_SENDFILE 1
-
-/* Define to 1 if you have the `setenv' function. */
-#define _EVENT_HAVE_SETENV 1
-
-/* Define if F_SETFD is defined in <fcntl.h> */
-#define _EVENT_HAVE_SETFD 1
-
-/* Define to 1 if you have the `sigaction' function. */
-#define _EVENT_HAVE_SIGACTION 1
-
-/* Define to 1 if you have the `signal' function. */
-/* #undef _EVENT_HAVE_SIGNAL */
-
-/* Define to 1 if you have the `splice' function. */
-/* #undef _EVENT_HAVE_SPLICE */
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#define _EVENT_HAVE_STDARG_H 1
-
-/* Define to 1 if you have the <stddef.h> header file. */
-#define _EVENT_HAVE_STDDEF_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define _EVENT_HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define _EVENT_HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define _EVENT_HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define _EVENT_HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strlcpy' function. */
-#define _EVENT_HAVE_STRLCPY 1
-
-/* Define to 1 if you have the `strsep' function. */
-#define _EVENT_HAVE_STRSEP 1
-
-/* Define to 1 if you have the `strtok_r' function. */
-#define _EVENT_HAVE_STRTOK_R 1
-
-/* Define to 1 if you have the `strtoll' function. */
-#define _EVENT_HAVE_STRTOLL 1
-
-/* Define to 1 if the system has the type `struct addrinfo'. */
-#define _EVENT_HAVE_STRUCT_ADDRINFO 1
-
-/* Define to 1 if the system has the type `struct in6_addr'. */
-#define _EVENT_HAVE_STRUCT_IN6_ADDR 1
-
-/* Define to 1 if `s6_addr16' is a member of `struct in6_addr'. */
-#define _EVENT_HAVE_STRUCT_IN6_ADDR_S6_ADDR16 1
-
-/* Define to 1 if `s6_addr32' is a member of `struct in6_addr'. */
-#define _EVENT_HAVE_STRUCT_IN6_ADDR_S6_ADDR32 1
-
-/* Define to 1 if the system has the type `struct sockaddr_in6'. */
-#define _EVENT_HAVE_STRUCT_SOCKADDR_IN6 1
-
-/* Define to 1 if `sin6_len' is a member of `struct sockaddr_in6'. */
-/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN */
-
-/* Define to 1 if `sin_len' is a member of `struct sockaddr_in'. */
-/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_IN_SIN_LEN */
-
-/* Define to 1 if the system has the type `struct sockaddr_storage'. */
-#define _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE 1
-
-/* Define to 1 if `ss_family' is a member of `struct sockaddr_storage'. */
-#define _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY 1
-
-/* Define to 1 if `__ss_family' is a member of `struct sockaddr_storage'. */
-/* #undef _EVENT_HAVE_STRUCT_SOCKADDR_STORAGE___SS_FAMILY */
-
-/* Define to 1 if you have the `sysctl' function. */
-/* #undef _EVENT_HAVE_SYSCTL */
-
-/* Define to 1 if you have the <sys/devpoll.h> header file. */
-/* #undef _EVENT_HAVE_SYS_DEVPOLL_H */
-
-/* Define to 1 if you have the <sys/epoll.h> header file. */
-#define _EVENT_HAVE_SYS_EPOLL_H 1
-
-/* Define to 1 if you have the <sys/eventfd.h> header file. */
-#define _EVENT_HAVE_SYS_EVENTFD_H 1
-
-/* Define to 1 if you have the <sys/event.h> header file. */
-/* #undef _EVENT_HAVE_SYS_EVENT_H */
-
-/* Define to 1 if you have the <sys/ioctl.h> header file. */
-#define _EVENT_HAVE_SYS_IOCTL_H 1
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#define _EVENT_HAVE_SYS_MMAN_H 1
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#define _EVENT_HAVE_SYS_PARAM_H 1
-
-/* Define to 1 if you have the <sys/queue.h> header file. */
-#define _EVENT_HAVE_SYS_QUEUE_H 1
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#define _EVENT_HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the <sys/sendfile.h> header file. */
-#define _EVENT_HAVE_SYS_SENDFILE_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define _EVENT_HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define _EVENT_HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/sysctl.h> header file. */
-/* #undef _EVENT_HAVE_SYS_SYSCTL_H */
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define _EVENT_HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define _EVENT_HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the <sys/uio.h> header file. */
-#define _EVENT_HAVE_SYS_UIO_H 1
-
-/* Define to 1 if you have the <sys/wait.h> header file. */
-#define _EVENT_HAVE_SYS_WAIT_H 1
-
-/* Define if TAILQ_FOREACH is defined in <sys/queue.h> */
-/*#undef _EVENT_HAVE_TAILQFOREACH*/
-
-/* Define if timeradd is defined in <sys/time.h> */
-#define _EVENT_HAVE_TIMERADD 1
-
-/* Define if timerclear is defined in <sys/time.h> */
-#define _EVENT_HAVE_TIMERCLEAR 1
-
-/* Define if timercmp is defined in <sys/time.h> */
-#define _EVENT_HAVE_TIMERCMP 1
-
-/* Define if timerisset is defined in <sys/time.h> */
-#define _EVENT_HAVE_TIMERISSET 1
-
-/* Define to 1 if the system has the type `uint16_t'. */
-#define _EVENT_HAVE_UINT16_T 1
-
-/* Define to 1 if the system has the type `uint32_t'. */
-#define _EVENT_HAVE_UINT32_T 1
-
-/* Define to 1 if the system has the type `uint64_t'. */
-#define _EVENT_HAVE_UINT64_T 1
-
-/* Define to 1 if the system has the type `uint8_t'. */
-#define _EVENT_HAVE_UINT8_T 1
-
-/* Define to 1 if the system has the type `uintptr_t'. */
-#define _EVENT_HAVE_UINTPTR_T 1
-
-/* Define to 1 if you have the `umask' function. */
-#define _EVENT_HAVE_UMASK 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define _EVENT_HAVE_UNISTD_H 1
-
-/* Define to 1 if you have the `unsetenv' function. */
-#define _EVENT_HAVE_UNSETENV 1
-
-/* Define to 1 if you have the `vasprintf' function. */
-#define _EVENT_HAVE_VASPRINTF 1
-
-/* Define if kqueue works correctly with pipes */
-/* #undef _EVENT_HAVE_WORKING_KQUEUE */
-
-/* Define to 1 if you have the <zlib.h> header file. */
-/* #undef _EVENT_HAVE_ZLIB_H */
-
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
- */
-#define _EVENT_LT_OBJDIR ".libs/"
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-/* #undef _EVENT_NO_MINUS_C_MINUS_O */
-
-/* Numeric representation of the version */
-#define _EVENT_NUMERIC_VERSION 0x02001400
-
-/* Name of package */
-#define _EVENT_PACKAGE "libevent"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define _EVENT_PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define _EVENT_PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define _EVENT_PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define _EVENT_PACKAGE_TARNAME ""
-
-/* Define to the home page for this package. */
-#define _EVENT_PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define _EVENT_PACKAGE_VERSION ""
-
-/* Define to necessary symbol if this constant uses a non-standard name on
- your system. */
-/* #undef _EVENT_PTHREAD_CREATE_JOINABLE */
-
-/* The size of `int', as computed by sizeof. */
-#define _EVENT_SIZEOF_INT 4
-
-/* The size of `long', as computed by sizeof. */
-#define _EVENT_SIZEOF_LONG 4
-
-/* The size of `long long', as computed by sizeof. */
-#define _EVENT_SIZEOF_LONG_LONG 8
-
-/* The size of `pthread_t', as computed by sizeof. */
-#define _EVENT_SIZEOF_PTHREAD_T 4
-
-/* The size of `short', as computed by sizeof. */
-#define _EVENT_SIZEOF_SHORT 2
-
-/* The size of `size_t', as computed by sizeof. */
-#define _EVENT_SIZEOF_SIZE_T 4
-
-/* The size of `void *', as computed by sizeof. */
-#define _EVENT_SIZEOF_VOID_P 4
-
-/* Define to 1 if you have the ANSI C header files. */
-#define _EVENT_STDC_HEADERS 1
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#define _EVENT_TIME_WITH_SYS_TIME 1
-
-/* Version number of package */
-#define _EVENT_VERSION "2.0.20-stable"
-
-/* Define to appropriate substitue if compiler doesnt have __func__ */
-/* #undef _EVENT___func__ */
-
-/* Define to empty if `const' does not conform to ANSI C. */
-/* #undef _EVENT_const */
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef _EVENT___cplusplus
-/* #undef _EVENT_inline */
-#endif
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef _EVENT_pid_t */
-
-/* Define to `unsigned int' if <sys/types.h> does not define. */
-/* #undef _EVENT_size_t */
-
-/* Define to unsigned int if you dont have it */
-/* #undef _EVENT_socklen_t */
-
-/* Define to `int' if <sys/types.h> does not define. */
-/* #undef _EVENT_ssize_t */
-
-#endif /* event2/event-config.h */
diff --git a/external/libevent_files/arc4random.c b/external/libevent_files/arc4random.c
deleted file mode 100644
index ee13a34f..00000000
--- a/external/libevent_files/arc4random.c
+++ /dev/null
@@ -1,555 +0,0 @@
-/* Portable arc4random.c based on arc4random.c from OpenBSD.
- * Portable version by Chris Davis, adapted for Libevent by Nick Mathewson
- * Copyright (c) 2010 Chris Davis, Niels Provos, and Nick Mathewson
- * Copyright (c) 2010-2012 Niels Provos and Nick Mathewson
- *
- * Note that in Libevent, this file isn't compiled directly. Instead,
- * it's included from evutil_rand.c
- */
-
-/*
- * Copyright (c) 1996, David Mazieres <dm@uun.org>
- * Copyright (c) 2008, Damien Miller <djm@openbsd.org>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * Arc4 random number generator for OpenBSD.
- *
- * This code is derived from section 17.1 of Applied Cryptography,
- * second edition, which describes a stream cipher allegedly
- * compatible with RSA Labs "RC4" cipher (the actual description of
- * which is a trade secret). The same algorithm is used as a stream
- * cipher called "arcfour" in Tatu Ylonen's ssh package.
- *
- * Here the stream cipher has been modified always to include the time
- * when initializing the state. That makes it impossible to
- * regenerate the same random sequence twice, so this can't be used
- * for encryption, but will generate good random numbers.
- *
- * RC4 is a registered trademark of RSA Laboratories.
- */
-
-#ifndef ARC4RANDOM_EXPORT
-#define ARC4RANDOM_EXPORT
-#endif
-
-#ifndef ARC4RANDOM_UINT32
-#define ARC4RANDOM_UINT32 uint32_t
-#endif
-
-#ifndef ARC4RANDOM_NO_INCLUDES
-#ifdef WIN32
-#include <wincrypt.h>
-#include <process.h>
-#else
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#ifdef _EVENT_HAVE_SYS_SYSCTL_H
-#include <sys/sysctl.h>
-#endif
-#endif
-#include <limits.h>
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-/* Add platform entropy 32 bytes (256 bits) at a time. */
-#define ADD_ENTROPY 32
-
-/* Re-seed from the platform RNG after generating this many bytes. */
-#define BYTES_BEFORE_RESEED 1600000
-
-struct arc4_stream {
- unsigned char i;
- unsigned char j;
- unsigned char s[256];
-};
-
-#ifdef WIN32
-#define getpid _getpid
-#define pid_t int
-#endif
-
-static int rs_initialized;
-static struct arc4_stream rs;
-static pid_t arc4_stir_pid;
-static int arc4_count;
-static int arc4_seeded_ok;
-
-static inline unsigned char arc4_getbyte(void);
-
-static inline void
-arc4_init(void)
-{
- int n;
-
- for (n = 0; n < 256; n++)
- rs.s[n] = n;
- rs.i = 0;
- rs.j = 0;
-}
-
-static inline void
-arc4_addrandom(const unsigned char *dat, int datlen)
-{
- int n;
- unsigned char si;
-
- rs.i--;
- for (n = 0; n < 256; n++) {
- rs.i = (rs.i + 1);
- si = rs.s[rs.i];
- rs.j = (rs.j + si + dat[n % datlen]);
- rs.s[rs.i] = rs.s[rs.j];
- rs.s[rs.j] = si;
- }
- rs.j = rs.i;
-}
-
-#ifndef WIN32
-static ssize_t
-read_all(int fd, unsigned char *buf, size_t count)
-{
- size_t numread = 0;
- ssize_t result;
-
- while (numread < count) {
- result = read(fd, buf+numread, count-numread);
- if (result<0)
- return -1;
- else if (result == 0)
- break;
- numread += result;
- }
-
- return (ssize_t)numread;
-}
-#endif
-
-#ifdef WIN32
-#define TRY_SEED_WIN32
-static int
-arc4_seed_win32(void)
-{
- /* This is adapted from Tor's crypto_seed_rng() */
- static int provider_set = 0;
- static HCRYPTPROV provider;
- unsigned char buf[ADD_ENTROPY];
-
- if (!provider_set) {
- if (!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
- CRYPT_VERIFYCONTEXT)) {
- if (GetLastError() != (DWORD)NTE_BAD_KEYSET)
- return -1;
- }
- provider_set = 1;
- }
- if (!CryptGenRandom(provider, sizeof(buf), buf))
- return -1;
- arc4_addrandom(buf, sizeof(buf));
- evutil_memclear_(buf, sizeof(buf));
- arc4_seeded_ok = 1;
- return 0;
-}
-#endif
-
-#if defined(_EVENT_HAVE_SYS_SYSCTL_H) && defined(_EVENT_HAVE_SYSCTL)
-#if _EVENT_HAVE_DECL_CTL_KERN && _EVENT_HAVE_DECL_KERN_RANDOM && _EVENT_HAVE_DECL_RANDOM_UUID
-#define TRY_SEED_SYSCTL_LINUX
-static int
-arc4_seed_sysctl_linux(void)
-{
- /* Based on code by William Ahern, this function tries to use the
- * RANDOM_UUID sysctl to get entropy from the kernel. This can work
- * even if /dev/urandom is inaccessible for some reason (e.g., we're
- * running in a chroot). */
- int mib[] = { CTL_KERN, KERN_RANDOM, RANDOM_UUID };
- unsigned char buf[ADD_ENTROPY];
- size_t len, n;
- unsigned i;
- int any_set;
-
- memset(buf, 0, sizeof(buf));
-
- for (len = 0; len < sizeof(buf); len += n) {
- n = sizeof(buf) - len;
-
- if (0 != sysctl(mib, 3, &buf[len], &n, NULL, 0))
- return -1;
- }
- /* make sure that the buffer actually got set. */
- for (i=0,any_set=0; i<sizeof(buf); ++i) {
- any_set |= buf[i];
- }
- if (!any_set)
- return -1;
-
- arc4_addrandom(buf, sizeof(buf));
- evutil_memclear_(buf, sizeof(buf));
- arc4_seeded_ok = 1;
- return 0;
-}
-#endif
-
-#if _EVENT_HAVE_DECL_CTL_KERN && _EVENT_HAVE_DECL_KERN_ARND
-#define TRY_SEED_SYSCTL_BSD
-static int
-arc4_seed_sysctl_bsd(void)
-{
- /* Based on code from William Ahern and from OpenBSD, this function
- * tries to use the KERN_ARND syscall to get entropy from the kernel.
- * This can work even if /dev/urandom is inaccessible for some reason
- * (e.g., we're running in a chroot). */
- int mib[] = { CTL_KERN, KERN_ARND };
- unsigned char buf[ADD_ENTROPY];
- size_t len, n;
- int i, any_set;
-
- memset(buf, 0, sizeof(buf));
-
- len = sizeof(buf);
- if (sysctl(mib, 2, buf, &len, NULL, 0) == -1) {
- for (len = 0; len < sizeof(buf); len += sizeof(unsigned)) {
- n = sizeof(unsigned);
- if (n + len > sizeof(buf))
- n = len - sizeof(buf);
- if (sysctl(mib, 2, &buf[len], &n, NULL, 0) == -1)
- return -1;
- }
- }
- /* make sure that the buffer actually got set. */
- for (i=any_set=0; i<sizeof(buf); ++i) {
- any_set |= buf[i];
- }
- if (!any_set)
- return -1;
-
- arc4_addrandom(buf, sizeof(buf));
- evutil_memclear_(buf, sizeof(buf));
- arc4_seeded_ok = 1;
- return 0;
-}
-#endif
-#endif /* defined(_EVENT_HAVE_SYS_SYSCTL_H) */
-
-#ifdef __linux__
-#define TRY_SEED_PROC_SYS_KERNEL_RANDOM_UUID
-static int
-arc4_seed_proc_sys_kernel_random_uuid(void)
-{
- /* Occasionally, somebody will make /proc/sys accessible in a chroot,
- * but not /dev/urandom. Let's try /proc/sys/kernel/random/uuid.
- * Its format is stupid, so we need to decode it from hex.
- */
- int fd;
- char buf[128];
- unsigned char entropy[64];
- int bytes, n, i, nybbles;
- for (bytes = 0; bytes<ADD_ENTROPY; ) {
- fd = evutil_open_closeonexec("/proc/sys/kernel/random/uuid", O_RDONLY, 0);
- if (fd < 0)
- return -1;
- n = read(fd, buf, sizeof(buf));
- close(fd);
- if (n<=0)
- return -1;
- memset(entropy, 0, sizeof(entropy));
- for (i=nybbles=0; i<n; ++i) {
- if (EVUTIL_ISXDIGIT(buf[i])) {
- int nyb = evutil_hex_char_to_int(buf[i]);
- if (nybbles & 1) {
- entropy[nybbles/2] |= nyb;
- } else {
- entropy[nybbles/2] |= nyb<<4;
- }
- ++nybbles;
- }
- }
- if (nybbles < 2)
- return -1;
- arc4_addrandom(entropy, nybbles/2);
- bytes += nybbles/2;
- }
- evutil_memclear_(entropy, sizeof(entropy));
- evutil_memclear_(buf, sizeof(buf));
- arc4_seeded_ok = 1;
- return 0;
-}
-#endif
-
-#ifndef WIN32
-#define TRY_SEED_URANDOM
-static char *arc4random_urandom_filename = NULL;
-
-static int arc4_seed_urandom_helper_(const char *fname)
-{
- unsigned char buf[ADD_ENTROPY];
- int fd;
- size_t n;
-
- fd = evutil_open_closeonexec(fname, O_RDONLY, 0);
- if (fd<0)
- return -1;
- n = read_all(fd, buf, sizeof(buf));
- close(fd);
- if (n != sizeof(buf))
- return -1;
- arc4_addrandom(buf, sizeof(buf));
- evutil_memclear_(buf, sizeof(buf));
- arc4_seeded_ok = 1;
- return 0;
-}
-
-static int
-arc4_seed_urandom(void)
-{
- /* This is adapted from Tor's crypto_seed_rng() */
- static const char *filenames[] = {
- "/dev/srandom", "/dev/urandom", "/dev/random", NULL
- };
- int i;
- if (arc4random_urandom_filename)
- return arc4_seed_urandom_helper_(arc4random_urandom_filename);
-
- for (i = 0; filenames[i]; ++i) {
- if (arc4_seed_urandom_helper_(filenames[i]) == 0) {
- return 0;
- }
- }
-
- return -1;
-}
-#endif
-
-static int
-arc4_seed(void)
-{
- int ok = 0;
- /* We try every method that might work, and don't give up even if one
- * does seem to work. There's no real harm in over-seeding, and if
- * one of these sources turns out to be broken, that would be bad. */
-#ifdef TRY_SEED_WIN32
- if (0 == arc4_seed_win32())
- ok = 1;
-#endif
-#ifdef TRY_SEED_URANDOM
- if (0 == arc4_seed_urandom())
- ok = 1;
-#endif
-#ifdef TRY_SEED_PROC_SYS_KERNEL_RANDOM_UUID
- if (arc4random_urandom_filename == NULL &&
- 0 == arc4_seed_proc_sys_kernel_random_uuid())
- ok = 1;
-#endif
-#ifdef TRY_SEED_SYSCTL_LINUX
- /* Apparently Linux is deprecating sysctl, and spewing warning
- * messages when you try to use it. */
- if (!ok && 0 == arc4_seed_sysctl_linux())
- ok = 1;
-#endif
-#ifdef TRY_SEED_SYSCTL_BSD
- if (0 == arc4_seed_sysctl_bsd())
- ok = 1;
-#endif
- return ok ? 0 : -1;
-}
-
-static int
-arc4_stir(void)
-{
- int i;
-
- if (!rs_initialized) {
- arc4_init();
- rs_initialized = 1;
- }
-
- arc4_seed();
- if (!arc4_seeded_ok)
- return -1;
-
- /*
- * Discard early keystream, as per recommendations in
- * "Weaknesses in the Key Scheduling Algorithm of RC4" by
- * Scott Fluhrer, Itsik Mantin, and Adi Shamir.
- * http://www.wisdom.weizmann.ac.il/~itsik/RC4/Papers/Rc4_ksa.ps
- *
- * Ilya Mironov's "(Not So) Random Shuffles of RC4" suggests that
- * we drop at least 2*256 bytes, with 12*256 as a conservative
- * value.
- *
- * RFC4345 says to drop 6*256.
- *
- * At least some versions of this code drop 4*256, in a mistaken
- * belief that "words" in the Fluhrer/Mantin/Shamir paper refers
- * to processor words.
- *
- * We add another sect to the cargo cult, and choose 12*256.
- */
- for (i = 0; i < 12*256; i++)
- (void)arc4_getbyte();
-
- arc4_count = BYTES_BEFORE_RESEED;
-
- return 0;
-}
-
-
-static void
-arc4_stir_if_needed(void)
-{
- pid_t pid = getpid();
-
- if (arc4_count <= 0 || !rs_initialized || arc4_stir_pid != pid)
- {
- arc4_stir_pid = pid;
- arc4_stir();
- }
-}
-
-static inline unsigned char
-arc4_getbyte(void)
-{
- unsigned char si, sj;
-
- rs.i = (rs.i + 1);
- si = rs.s[rs.i];
- rs.j = (rs.j + si);
- sj = rs.s[rs.j];
- rs.s[rs.i] = sj;
- rs.s[rs.j] = si;
- return (rs.s[(si + sj) & 0xff]);
-}
-
-static inline unsigned int
-arc4_getword(void)
-{
- unsigned int val;
-
- val = arc4_getbyte() << 24;
- val |= arc4_getbyte() << 16;
- val |= arc4_getbyte() << 8;
- val |= arc4_getbyte();
-
- return val;
-}
-
-#ifndef ARC4RANDOM_NOSTIR
-ARC4RANDOM_EXPORT int
-arc4random_stir(void)
-{
- int val;
- //_ARC4_LOCK();
- val = arc4_stir();
- //_ARC4_UNLOCK();
- return val;
-}
-#endif
-
-#ifndef ARC4RANDOM_NOADDRANDOM
-ARC4RANDOM_EXPORT void
-arc4random_addrandom(const unsigned char *dat, int datlen)
-{
- int j;
- //_ARC4_LOCK();
- if (!rs_initialized)
- arc4_stir();
- for (j = 0; j < datlen; j += 256) {
- /* arc4_addrandom() ignores all but the first 256 bytes of
- * its input. We want to make sure to look at ALL the
- * data in 'dat', just in case the user is doing something
- * crazy like passing us all the files in /var/log. */
- arc4_addrandom(dat + j, datlen - j);
- }
- //_ARC4_UNLOCK();
-}
-#endif
-
-#ifndef ARC4RANDOM_NORANDOM
-ARC4RANDOM_EXPORT ARC4RANDOM_UINT32
-arc4random(void)
-{
- ARC4RANDOM_UINT32 val;
- //_ARC4_LOCK();
- arc4_count -= 4;
- arc4_stir_if_needed();
- val = arc4_getword();
- //_ARC4_UNLOCK();
- return val;
-}
-#endif
-
-ARC4RANDOM_EXPORT void
-arc4random_buf(void *_buf, size_t n)
-{
- unsigned char *buf = _buf;
- //_ARC4_LOCK();
- arc4_stir_if_needed();
- while (n--) {
- if (--arc4_count <= 0)
- arc4_stir();
- buf[n] = arc4_getbyte();
- }
- //_ARC4_UNLOCK();
-}
-
-#ifndef ARC4RANDOM_NOUNIFORM
-/*
- * Calculate a uniformly distributed random number less than upper_bound
- * avoiding "modulo bias".
- *
- * Uniformity is achieved by generating new random numbers until the one
- * returned is outside the range [0, 2**32 % upper_bound). This
- * guarantees the selected random number will be inside
- * [2**32 % upper_bound, 2**32) which maps back to [0, upper_bound)
- * after reduction modulo upper_bound.
- */
-ARC4RANDOM_EXPORT unsigned int
-arc4random_uniform(unsigned int upper_bound)
-{
- ARC4RANDOM_UINT32 r, min;
-
- if (upper_bound < 2)
- return 0;
-
-#if (UINT_MAX > 0xffffffffUL)
- min = 0x100000000UL % upper_bound;
-#else
- /* Calculate (2**32 % upper_bound) avoiding 64-bit math */
- if (upper_bound > 0x80000000)
- min = 1 + ~upper_bound; /* 2**32 - upper_bound */
- else {
- /* (2**32 - (x * 2)) % x == 2**32 % x when x <= 2**31 */
- min = ((0xffffffff - (upper_bound * 2)) + 1) % upper_bound;
- }
-#endif
-
- /*
- * This could theoretically loop forever but each retry has
- * p > 0.5 (worst case, usually far better) of selecting a
- * number inside the range we need, so it should rarely need
- * to re-roll.
- */
- for (;;) {
- r = arc4random();
- if (r >= min)
- break;
- }
-
- return r % upper_bound;
-}
-#endif
diff --git a/external/libevent_files/evutil.c b/external/libevent_files/evutil.c
deleted file mode 100644
index 05e662aa..00000000
--- a/external/libevent_files/evutil.c
+++ /dev/null
@@ -1,2190 +0,0 @@
-/*
- * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "event2/event-config.h"
-
-#define _GNU_SOURCE
-
-#ifdef WIN32
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#undef WIN32_LEAN_AND_MEAN
-#include <io.h>
-#include <tchar.h>
-#endif
-
-#include <sys/types.h>
-#ifdef _EVENT_HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef _EVENT_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef _EVENT_HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef _EVENT_HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <errno.h>
-#include <limits.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef _EVENT_HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef _EVENT_HAVE_NETINET_IN6_H
-#include <netinet/in6.h>
-#endif
-#ifdef _EVENT_HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#ifndef _EVENT_HAVE_GETTIMEOFDAY
-#include <sys/timeb.h>
-#include <time.h>
-#endif
-#include <sys/stat.h>
-
-#include "event2/util.h"
-#include "util-internal.h"
-#include "log-internal.h"
-#include "mm-internal.h"
-
-#include "strlcpy-internal.h"
-#include "ipv6-internal.h"
-
-#ifdef WIN32
-#define open _open
-#define read _read
-#define close _close
-#define fstat _fstati64
-#define stat _stati64
-#define mode_t int
-#endif
-
-int
-evutil_open_closeonexec(const char *pathname, int flags, unsigned mode)
-{
- int fd;
-
-#ifdef O_CLOEXEC
- flags |= O_CLOEXEC;
-#endif
-
- if (flags & O_CREAT)
- fd = open(pathname, flags, (mode_t)mode);
- else
- fd = open(pathname, flags);
- if (fd < 0)
- return -1;
-
-#if !defined(O_CLOEXEC) && defined(FD_CLOEXEC)
- if (fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
- return -1;
-#endif
-
- return fd;
-}
-
-/**
- Read the contents of 'filename' into a newly allocated NUL-terminated
- string. Set *content_out to hold this string, and *len_out to hold its
- length (not including the appended NUL). If 'is_binary', open the file in
- binary mode.
-
- Returns 0 on success, -1 if the open fails, and -2 for all other failures.
-
- Used internally only; may go away in a future version.
- */
-int
-evutil_read_file(const char *filename, char **content_out, size_t *len_out,
- int is_binary)
-{
- int fd, r;
- struct stat st;
- char *mem;
- size_t read_so_far=0;
- int mode = O_RDONLY;
-
- EVUTIL_ASSERT(content_out);
- EVUTIL_ASSERT(len_out);
- *content_out = NULL;
- *len_out = 0;
-
-#ifdef O_BINARY
- if (is_binary)
- mode |= O_BINARY;
-#endif
-
- fd = evutil_open_closeonexec(filename, mode, 0);
- if (fd < 0)
- return -1;
- if (fstat(fd, &st) || st.st_size < 0 ||
- st.st_size > EV_SSIZE_MAX-1 ) {
- close(fd);
- return -2;
- }
- mem = mm_malloc((size_t)st.st_size + 1);
- if (!mem) {
- close(fd);
- return -2;
- }
- read_so_far = 0;
-#ifdef WIN32
-#define N_TO_READ(x) ((x) > INT_MAX) ? INT_MAX : ((int)(x))
-#else
-#define N_TO_READ(x) (x)
-#endif
- while ((r = read(fd, mem+read_so_far, N_TO_READ(st.st_size - read_so_far))) > 0) {
- read_so_far += r;
- if (read_so_far >= (size_t)st.st_size)
- break;
- EVUTIL_ASSERT(read_so_far < (size_t)st.st_size);
- }
- close(fd);
- if (r < 0) {
- mm_free(mem);
- return -2;
- }
- mem[read_so_far] = 0;
-
- *len_out = read_so_far;
- *content_out = mem;
- return 0;
-}
-
-int
-evutil_socketpair(int family, int type, int protocol, evutil_socket_t fd[2])
-{
-#ifndef WIN32
- return socketpair(family, type, protocol, fd);
-#else
- return evutil_ersatz_socketpair(family, type, protocol, fd);
-#endif
-}
-
-int
-evutil_ersatz_socketpair(int family, int type, int protocol,
- evutil_socket_t fd[2])
-{
- /* This code is originally from Tor. Used with permission. */
-
- /* This socketpair does not work when localhost is down. So
- * it's really not the same thing at all. But it's close enough
- * for now, and really, when localhost is down sometimes, we
- * have other problems too.
- */
-#ifdef WIN32
-#define ERR(e) WSA##e
-#else
-#define ERR(e) e
-#endif
- evutil_socket_t listener = -1;
- evutil_socket_t connector = -1;
- evutil_socket_t acceptor = -1;
- struct sockaddr_in listen_addr;
- struct sockaddr_in connect_addr;
- ev_socklen_t size;
- int saved_errno = -1;
-
- if (protocol
- || (family != AF_INET
-#ifdef AF_UNIX
- && family != AF_UNIX
-#endif
- )) {
- EVUTIL_SET_SOCKET_ERROR(ERR(EAFNOSUPPORT));
- return -1;
- }
- if (!fd) {
- EVUTIL_SET_SOCKET_ERROR(ERR(EINVAL));
- return -1;
- }
-
- listener = socket(AF_INET, type, 0);
- if (listener < 0)
- return -1;
- memset(&listen_addr, 0, sizeof(listen_addr));
- listen_addr.sin_family = AF_INET;
- listen_addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
- listen_addr.sin_port = 0; /* kernel chooses port. */
- if (bind(listener, (struct sockaddr *) &listen_addr, sizeof (listen_addr))
- == -1)
- goto tidy_up_and_fail;
- if (listen(listener, 1) == -1)
- goto tidy_up_and_fail;
-
- connector = socket(AF_INET, type, 0);
- if (connector < 0)
- goto tidy_up_and_fail;
- /* We want to find out the port number to connect to. */
- size = sizeof(connect_addr);
- if (getsockname(listener, (struct sockaddr *) &connect_addr, &size) == -1)
- goto tidy_up_and_fail;
- if (size != sizeof (connect_addr))
- goto abort_tidy_up_and_fail;
- if (connect(connector, (struct sockaddr *) &connect_addr,
- sizeof(connect_addr)) == -1)
- goto tidy_up_and_fail;
-
- size = sizeof(listen_addr);
- acceptor = accept(listener, (struct sockaddr *) &listen_addr, &size);
- if (acceptor < 0)
- goto tidy_up_and_fail;
- if (size != sizeof(listen_addr))
- goto abort_tidy_up_and_fail;
- /* Now check we are talking to ourself by matching port and host on the
- two sockets. */
- if (getsockname(connector, (struct sockaddr *) &connect_addr, &size) == -1)
- goto tidy_up_and_fail;
- if (size != sizeof (connect_addr)
- || listen_addr.sin_family != connect_addr.sin_family
- || listen_addr.sin_addr.s_addr != connect_addr.sin_addr.s_addr
- || listen_addr.sin_port != connect_addr.sin_port)
- goto abort_tidy_up_and_fail;
- evutil_closesocket(listener);
- fd[0] = connector;
- fd[1] = acceptor;
-
- return 0;
-
- abort_tidy_up_and_fail:
- saved_errno = ERR(ECONNABORTED);
- tidy_up_and_fail:
- if (saved_errno < 0)
- saved_errno = EVUTIL_SOCKET_ERROR();
- if (listener != -1)
- evutil_closesocket(listener);
- if (connector != -1)
- evutil_closesocket(connector);
- if (acceptor != -1)
- evutil_closesocket(acceptor);
-
- EVUTIL_SET_SOCKET_ERROR(saved_errno);
- return -1;
-#undef ERR
-}
-
-int
-evutil_make_socket_nonblocking(evutil_socket_t fd)
-{
-#ifdef WIN32
- {
- u_long nonblocking = 1;
- if (ioctlsocket(fd, FIONBIO, &nonblocking) == SOCKET_ERROR) {
- event_sock_warn(fd, "fcntl(%d, F_GETFL)", (int)fd);
- return -1;
- }
- }
-#else
- {
- int flags;
- if ((flags = fcntl(fd, F_GETFL, NULL)) < 0) {
- event_warn("fcntl(%d, F_GETFL)", fd);
- return -1;
- }
- if (fcntl(fd, F_SETFL, flags | O_NONBLOCK) == -1) {
- event_warn("fcntl(%d, F_SETFL)", fd);
- return -1;
- }
- }
-#endif
- return 0;
-}
-
-int
-evutil_make_listen_socket_reuseable(evutil_socket_t sock)
-{
-#ifndef WIN32
- int one = 1;
- /* REUSEADDR on Unix means, "don't hang on to this address after the
- * listener is closed." On Windows, though, it means "don't keep other
- * processes from binding to this address while we're using it. */
- return setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*) &one,
- (ev_socklen_t)sizeof(one));
-#else
- return 0;
-#endif
-}
-
-int
-evutil_make_socket_closeonexec(evutil_socket_t fd)
-{
-#if !defined(WIN32) && defined(_EVENT_HAVE_SETFD)
- int flags;
- if ((flags = fcntl(fd, F_GETFD, NULL)) < 0) {
- event_warn("fcntl(%d, F_GETFD)", fd);
- return -1;
- }
- if (fcntl(fd, F_SETFD, flags | FD_CLOEXEC) == -1) {
- event_warn("fcntl(%d, F_SETFD)", fd);
- return -1;
- }
-#endif
- return 0;
-}
-
-int
-evutil_closesocket(evutil_socket_t sock)
-{
-#ifndef WIN32
- return close(sock);
-#else
- return closesocket(sock);
-#endif
-}
-
-ev_int64_t
-evutil_strtoll(const char *s, char **endptr, int base)
-{
-#ifdef _EVENT_HAVE_STRTOLL
- return (ev_int64_t)strtoll(s, endptr, base);
-#elif _EVENT_SIZEOF_LONG == 8
- return (ev_int64_t)strtol(s, endptr, base);
-#elif defined(WIN32) && defined(_MSC_VER) && _MSC_VER < 1300
- /* XXXX on old versions of MS APIs, we only support base
- * 10. */
- ev_int64_t r;
- if (base != 10)
- return 0;
- r = (ev_int64_t) _atoi64(s);
- while (isspace(*s))
- ++s;
- if (*s == '-')
- ++s;
- while (isdigit(*s))
- ++s;
- if (endptr)
- *endptr = (char*) s;
- return r;
-#elif defined(WIN32)
- return (ev_int64_t) _strtoi64(s, endptr, base);
-#elif defined(_EVENT_SIZEOF_LONG_LONG) && _EVENT_SIZEOF_LONG_LONG == 8
- long long r;
- int n;
- if (base != 10 && base != 16)
- return 0;
- if (base == 10) {
- n = sscanf(s, "%lld", &r);
- } else {
- unsigned long long ru=0;
- n = sscanf(s, "%llx", &ru);
- if (ru > EV_INT64_MAX)
- return 0;
- r = (long long) ru;
- }
- if (n != 1)
- return 0;
- while (EVUTIL_ISSPACE(*s))
- ++s;
- if (*s == '-')
- ++s;
- if (base == 10) {
- while (EVUTIL_ISDIGIT(*s))
- ++s;
- } else {
- while (EVUTIL_ISXDIGIT(*s))
- ++s;
- }
- if (endptr)
- *endptr = (char*) s;
- return r;
-#else
-#error "I don't know how to parse 64-bit integers."
-#endif
-}
-
-#ifndef _EVENT_HAVE_GETTIMEOFDAY
-/* No gettimeofday; this muse be windows. */
-int
-evutil_gettimeofday(struct timeval *tv, struct timezone *tz)
-{
- struct _timeb tb;
-
- if (tv == NULL)
- return -1;
-
- /* XXXX
- * _ftime is not the greatest interface here; GetSystemTimeAsFileTime
- * would give us better resolution, whereas something cobbled together
- * with GetTickCount could maybe give us monotonic behavior.
- *
- * Either way, I think this value might be skewed to ignore the
- * timezone, and just return local time. That's not so good.
- */
- _ftime(&tb);
- tv->tv_sec = (long) tb.time;
- tv->tv_usec = ((int) tb.millitm) * 1000;
- return 0;
-}
-#endif
-
-#ifdef WIN32
-int
-evutil_socket_geterror(evutil_socket_t sock)
-{
- int optval, optvallen=sizeof(optval);
- int err = WSAGetLastError();
- if (err == WSAEWOULDBLOCK && sock >= 0) {
- if (getsockopt(sock, SOL_SOCKET, SO_ERROR, (void*)&optval,
- &optvallen))
- return err;
- if (optval)
- return optval;
- }
- return err;
-}
-#endif
-
-/* XXX we should use an enum here. */
-/* 2 for connection refused, 1 for connected, 0 for not yet, -1 for error. */
-int
-evutil_socket_connect(evutil_socket_t *fd_ptr, struct sockaddr *sa, int socklen)
-{
- int made_fd = 0;
-
- if (*fd_ptr < 0) {
- if ((*fd_ptr = socket(sa->sa_family, SOCK_STREAM, 0)) < 0)
- goto err;
- made_fd = 1;
- if (evutil_make_socket_nonblocking(*fd_ptr) < 0) {
- goto err;
- }
- }
-
- if (connect(*fd_ptr, sa, socklen) < 0) {
- int e = evutil_socket_geterror(*fd_ptr);
- if (EVUTIL_ERR_CONNECT_RETRIABLE(e))
- return 0;
- if (EVUTIL_ERR_CONNECT_REFUSED(e))
- return 2;
- goto err;
- } else {
- return 1;
- }
-
-err:
- if (made_fd) {
- evutil_closesocket(*fd_ptr);
- *fd_ptr = -1;
- }
- return -1;
-}
-
-/* Check whether a socket on which we called connect() is done
- connecting. Return 1 for connected, 0 for not yet, -1 for error. In the
- error case, set the current socket errno to the error that happened during
- the connect operation. */
-int
-evutil_socket_finished_connecting(evutil_socket_t fd)
-{
- int e;
- ev_socklen_t elen = sizeof(e);
-
- if (getsockopt(fd, SOL_SOCKET, SO_ERROR, (void*)&e, &elen) < 0)
- return -1;
-
- if (e) {
- if (EVUTIL_ERR_CONNECT_RETRIABLE(e))
- return 0;
- EVUTIL_SET_SOCKET_ERROR(e);
- return -1;
- }
-
- return 1;
-}
-
-#if (EVUTIL_AI_PASSIVE|EVUTIL_AI_CANONNAME|EVUTIL_AI_NUMERICHOST| \
- EVUTIL_AI_NUMERICSERV|EVUTIL_AI_V4MAPPED|EVUTIL_AI_ALL| \
- EVUTIL_AI_ADDRCONFIG) != \
- (EVUTIL_AI_PASSIVE^EVUTIL_AI_CANONNAME^EVUTIL_AI_NUMERICHOST^ \
- EVUTIL_AI_NUMERICSERV^EVUTIL_AI_V4MAPPED^EVUTIL_AI_ALL^ \
- EVUTIL_AI_ADDRCONFIG)
-#error "Some of our EVUTIL_AI_* flags seem to overlap with system AI_* flags"
-#endif
-
-/* We sometimes need to know whether we have an ipv4 address and whether we
- have an ipv6 address. If 'have_checked_interfaces', then we've already done
- the test. If 'had_ipv4_address', then it turns out we had an ipv4 address.
- If 'had_ipv6_address', then it turns out we had an ipv6 address. These are
- set by evutil_check_interfaces. */
-static int have_checked_interfaces, had_ipv4_address, had_ipv6_address;
-
-/* Macro: True iff the IPv4 address 'addr', in host order, is in 127.0.0.0/8
- */
-#define EVUTIL_V4ADDR_IS_LOCALHOST(addr) (((addr)>>24) == 127)
-
-/* Macro: True iff the IPv4 address 'addr', in host order, is a class D
- * (multiclass) address.
- */
-#define EVUTIL_V4ADDR_IS_CLASSD(addr) ((((addr)>>24) & 0xf0) == 0xe0)
-
-/* Test whether we have an ipv4 interface and an ipv6 interface. Return 0 if
- * the test seemed successful. */
-static int
-evutil_check_interfaces(int force_recheck)
-{
- const char ZEROES[] = "\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00";
- evutil_socket_t fd = -1;
- struct sockaddr_in sin, sin_out;
- struct sockaddr_in6 sin6, sin6_out;
- ev_socklen_t sin_out_len = sizeof(sin_out);
- ev_socklen_t sin6_out_len = sizeof(sin6_out);
- int r;
- char buf[128];
- if (have_checked_interfaces && !force_recheck)
- return 0;
-
- /* To check whether we have an interface open for a given protocol, we
- * try to make a UDP 'connection' to a remote host on the internet.
- * We don't actually use it, so the address doesn't matter, but we
- * want to pick one that keep us from using a host- or link-local
- * interface. */
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_port = htons(53);
- r = evutil_inet_pton(AF_INET, "18.244.0.188", &sin.sin_addr);
- EVUTIL_ASSERT(r);
-
- memset(&sin6, 0, sizeof(sin6));
- sin6.sin6_family = AF_INET6;
- sin6.sin6_port = htons(53);
- r = evutil_inet_pton(AF_INET6, "2001:4860:b002::68", &sin6.sin6_addr);
- EVUTIL_ASSERT(r);
-
- memset(&sin_out, 0, sizeof(sin_out));
- memset(&sin6_out, 0, sizeof(sin6_out));
-
- /* XXX some errnos mean 'no address'; some mean 'not enough sockets'. */
- if ((fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) >= 0 &&
- connect(fd, (struct sockaddr*)&sin, sizeof(sin)) == 0 &&
- getsockname(fd, (struct sockaddr*)&sin_out, &sin_out_len) == 0) {
- /* We might have an IPv4 interface. */
- ev_uint32_t addr = ntohl(sin_out.sin_addr.s_addr);
- if (addr == 0 ||
- EVUTIL_V4ADDR_IS_LOCALHOST(addr) ||
- EVUTIL_V4ADDR_IS_CLASSD(addr)) {
- evutil_inet_ntop(AF_INET, &sin_out.sin_addr,
- buf, sizeof(buf));
- /* This is a reserved, ipv4compat, ipv4map, loopback,
- * link-local or unspecified address. The host should
- * never have given it to us; it could never connect
- * to sin. */
- event_warnx("Got a strange local ipv4 address %s",buf);
- } else {
- event_debug(("Detected an IPv4 interface"));
- had_ipv4_address = 1;
- }
- }
- if (fd >= 0)
- evutil_closesocket(fd);
-
- if ((fd = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP)) >= 0 &&
- connect(fd, (struct sockaddr*)&sin6, sizeof(sin6)) == 0 &&
- getsockname(fd, (struct sockaddr*)&sin6_out, &sin6_out_len) == 0) {
- /* We might have an IPv6 interface. */
- const unsigned char *addr =
- (unsigned char*)sin6_out.sin6_addr.s6_addr;
- if (!memcmp(addr, ZEROES, 8) ||
- (addr[0] == 0xfe && (addr[1] & 0xc0) == 0x80)) {
- /* This is a reserved, ipv4compat, ipv4map, loopback,
- * link-local or unspecified address. The host should
- * never have given it to us; it could never connect
- * to sin6. */
- evutil_inet_ntop(AF_INET6, &sin6_out.sin6_addr,
- buf, sizeof(buf));
- event_warnx("Got a strange local ipv6 address %s",buf);
- } else {
- event_debug(("Detected an IPv4 interface"));
- had_ipv6_address = 1;
- }
- }
-
- if (fd >= 0)
- evutil_closesocket(fd);
-
- return 0;
-}
-
-/* Internal addrinfo flag. This one is set when we allocate the addrinfo from
- * inside libevent. Otherwise, the built-in getaddrinfo() function allocated
- * it, and we should trust what they said.
- **/
-#define EVUTIL_AI_LIBEVENT_ALLOCATED 0x80000000
-
-/* Helper: construct a new addrinfo containing the socket address in
- * 'sa', which must be a sockaddr_in or a sockaddr_in6. Take the
- * socktype and protocol info from hints. If they weren't set, then
- * allocate both a TCP and a UDP addrinfo.
- */
-struct evutil_addrinfo *
-evutil_new_addrinfo(struct sockaddr *sa, ev_socklen_t socklen,
- const struct evutil_addrinfo *hints)
-{
- struct evutil_addrinfo *res;
- EVUTIL_ASSERT(hints);
-
- if (hints->ai_socktype == 0 && hints->ai_protocol == 0) {
- /* Indecisive user! Give them a UDP and a TCP. */
- struct evutil_addrinfo *r1, *r2;
- struct evutil_addrinfo tmp;
- memcpy(&tmp, hints, sizeof(tmp));
- tmp.ai_socktype = SOCK_STREAM; tmp.ai_protocol = IPPROTO_TCP;
- r1 = evutil_new_addrinfo(sa, socklen, &tmp);
- if (!r1)
- return NULL;
- tmp.ai_socktype = SOCK_DGRAM; tmp.ai_protocol = IPPROTO_UDP;
- r2 = evutil_new_addrinfo(sa, socklen, &tmp);
- if (!r2) {
- evutil_freeaddrinfo(r1);
- return NULL;
- }
- r1->ai_next = r2;
- return r1;
- }
-
- /* We're going to allocate extra space to hold the sockaddr. */
- res = mm_calloc(1,sizeof(struct evutil_addrinfo)+socklen);
- if (!res)
- return NULL;
- res->ai_addr = (struct sockaddr*)
- (((char*)res) + sizeof(struct evutil_addrinfo));
- memcpy(res->ai_addr, sa, socklen);
- res->ai_addrlen = socklen;
- res->ai_family = sa->sa_family; /* Same or not? XXX */
- res->ai_flags = EVUTIL_AI_LIBEVENT_ALLOCATED;
- res->ai_socktype = hints->ai_socktype;
- res->ai_protocol = hints->ai_protocol;
-
- return res;
-}
-
-/* Append the addrinfo 'append' to the end of 'first', and return the start of
- * the list. Either element can be NULL, in which case we return the element
- * that is not NULL. */
-struct evutil_addrinfo *
-evutil_addrinfo_append(struct evutil_addrinfo *first,
- struct evutil_addrinfo *append)
-{
- struct evutil_addrinfo *ai = first;
- if (!ai)
- return append;
- while (ai->ai_next)
- ai = ai->ai_next;
- ai->ai_next = append;
-
- return first;
-}
-
-static int
-parse_numeric_servname(const char *servname)
-{
- int n;
- char *endptr=NULL;
- n = (int) strtol(servname, &endptr, 10);
- if (n>=0 && n <= 65535 && servname[0] && endptr && !endptr[0])
- return n;
- else
- return -1;
-}
-
-/** Parse a service name in 'servname', which can be a decimal port.
- * Return the port number, or -1 on error.
- */
-static int
-evutil_parse_servname(const char *servname, const char *protocol,
- const struct evutil_addrinfo *hints)
-{
- int n = parse_numeric_servname(servname);
- if (n>=0)
- return n;
-#if defined(_EVENT_HAVE_GETSERVBYNAME) || defined(WIN32)
- if (!(hints->ai_flags & EVUTIL_AI_NUMERICSERV)) {
- struct servent *ent = getservbyname(servname, protocol);
- if (ent) {
- return ntohs(ent->s_port);
- }
- }
-#endif
- return -1;
-}
-
-/* Return a string corresponding to a protocol number that we can pass to
- * getservyname. */
-static const char *
-evutil_unparse_protoname(int proto)
-{
- switch (proto) {
- case 0:
- return NULL;
- case IPPROTO_TCP:
- return "tcp";
- case IPPROTO_UDP:
- return "udp";
-#ifdef IPPROTO_SCTP
- case IPPROTO_SCTP:
- return "sctp";
-#endif
- default:
-#ifdef _EVENT_HAVE_GETPROTOBYNUMBER
- {
- struct protoent *ent = getprotobynumber(proto);
- if (ent)
- return ent->p_name;
- }
-#endif
- return NULL;
- }
-}
-
-static void
-evutil_getaddrinfo_infer_protocols(struct evutil_addrinfo *hints)
-{
- /* If we can guess the protocol from the socktype, do so. */
- if (!hints->ai_protocol && hints->ai_socktype) {
- if (hints->ai_socktype == SOCK_DGRAM)
- hints->ai_protocol = IPPROTO_UDP;
- else if (hints->ai_socktype == SOCK_STREAM)
- hints->ai_protocol = IPPROTO_TCP;
- }
-
- /* Set the socktype if it isn't set. */
- if (!hints->ai_socktype && hints->ai_protocol) {
- if (hints->ai_protocol == IPPROTO_UDP)
- hints->ai_socktype = SOCK_DGRAM;
- else if (hints->ai_protocol == IPPROTO_TCP)
- hints->ai_socktype = SOCK_STREAM;
-#ifdef IPPROTO_SCTP
- else if (hints->ai_protocol == IPPROTO_SCTP)
- hints->ai_socktype = SOCK_STREAM;
-#endif
- }
-}
-
-#if AF_UNSPEC != PF_UNSPEC
-#error "I cannot build on a system where AF_UNSPEC != PF_UNSPEC"
-#endif
-
-/** Implements the part of looking up hosts by name that's common to both
- * the blocking and nonblocking resolver:
- * - Adjust 'hints' to have a reasonable socktype and protocol.
- * - Look up the port based on 'servname', and store it in *portnum,
- * - Handle the nodename==NULL case
- * - Handle some invalid arguments cases.
- * - Handle the cases where nodename is an IPv4 or IPv6 address.
- *
- * If we need the resolver to look up the hostname, we return
- * EVUTIL_EAI_NEED_RESOLVE. Otherwise, we can completely implement
- * getaddrinfo: we return 0 or an appropriate EVUTIL_EAI_* error, and
- * set *res as getaddrinfo would.
- */
-int
-evutil_getaddrinfo_common(const char *nodename, const char *servname,
- struct evutil_addrinfo *hints, struct evutil_addrinfo **res, int *portnum)
-{
- int port = 0;
- const char *pname;
-
- if (nodename == NULL && servname == NULL)
- return EVUTIL_EAI_NONAME;
-
- /* We only understand 3 families */
- if (hints->ai_family != PF_UNSPEC && hints->ai_family != PF_INET &&
- hints->ai_family != PF_INET6)
- return EVUTIL_EAI_FAMILY;
-
- evutil_getaddrinfo_infer_protocols(hints);
-
- /* Look up the port number and protocol, if possible. */
- pname = evutil_unparse_protoname(hints->ai_protocol);
- if (servname) {
- /* XXXX We could look at the protocol we got back from
- * getservbyname, but it doesn't seem too useful. */
- port = evutil_parse_servname(servname, pname, hints);
- if (port < 0) {
- return EVUTIL_EAI_NONAME;
- }
- }
-
- /* If we have no node name, then we're supposed to bind to 'any' and
- * connect to localhost. */
- if (nodename == NULL) {
- struct evutil_addrinfo *res4=NULL, *res6=NULL;
- if (hints->ai_family != PF_INET) { /* INET6 or UNSPEC. */
- struct sockaddr_in6 sin6;
- memset(&sin6, 0, sizeof(sin6));
- sin6.sin6_family = AF_INET6;
- sin6.sin6_port = htons(port);
- if (hints->ai_flags & EVUTIL_AI_PASSIVE) {
- /* Bind to :: */
- } else {
- /* connect to ::1 */
- sin6.sin6_addr.s6_addr[15] = 1;
- }
- res6 = evutil_new_addrinfo((struct sockaddr*)&sin6,
- sizeof(sin6), hints);
- if (!res6)
- return EVUTIL_EAI_MEMORY;
- }
-
- if (hints->ai_family != PF_INET6) { /* INET or UNSPEC */
- struct sockaddr_in sin;
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_port = htons(port);
- if (hints->ai_flags & EVUTIL_AI_PASSIVE) {
- /* Bind to 0.0.0.0 */
- } else {
- /* connect to 127.0.0.1 */
- sin.sin_addr.s_addr = htonl(0x7f000001);
- }
- res4 = evutil_new_addrinfo((struct sockaddr*)&sin,
- sizeof(sin), hints);
- if (!res4) {
- if (res6)
- evutil_freeaddrinfo(res6);
- return EVUTIL_EAI_MEMORY;
- }
- }
- *res = evutil_addrinfo_append(res4, res6);
- return 0;
- }
-
- /* If we can, we should try to parse the hostname without resolving
- * it. */
- /* Try ipv6. */
- if (hints->ai_family == PF_INET6 || hints->ai_family == PF_UNSPEC) {
- struct sockaddr_in6 sin6;
- memset(&sin6, 0, sizeof(sin6));
- if (1==evutil_inet_pton(AF_INET6, nodename, &sin6.sin6_addr)) {
- /* Got an ipv6 address. */
- sin6.sin6_family = AF_INET6;
- sin6.sin6_port = htons(port);
- *res = evutil_new_addrinfo((struct sockaddr*)&sin6,
- sizeof(sin6), hints);
- if (!*res)
- return EVUTIL_EAI_MEMORY;
- return 0;
- }
- }
-
- /* Try ipv4. */
- if (hints->ai_family == PF_INET || hints->ai_family == PF_UNSPEC) {
- struct sockaddr_in sin;
- memset(&sin, 0, sizeof(sin));
- if (1==evutil_inet_pton(AF_INET, nodename, &sin.sin_addr)) {
- /* Got an ipv6 address. */
- sin.sin_family = AF_INET;
- sin.sin_port = htons(port);
- *res = evutil_new_addrinfo((struct sockaddr*)&sin,
- sizeof(sin), hints);
- if (!*res)
- return EVUTIL_EAI_MEMORY;
- return 0;
- }
- }
-
-
- /* If we have reached this point, we definitely need to do a DNS
- * lookup. */
- if ((hints->ai_flags & EVUTIL_AI_NUMERICHOST)) {
- /* If we're not allowed to do one, then say so. */
- return EVUTIL_EAI_NONAME;
- }
- *portnum = port;
- return EVUTIL_EAI_NEED_RESOLVE;
-}
-
-#ifdef _EVENT_HAVE_GETADDRINFO
-#define USE_NATIVE_GETADDRINFO
-#endif
-
-#ifdef USE_NATIVE_GETADDRINFO
-/* A mask of all the flags that we declare, so we can clear them before calling
- * the native getaddrinfo */
-static const unsigned int ALL_NONNATIVE_AI_FLAGS =
-#ifndef AI_PASSIVE
- EVUTIL_AI_PASSIVE |
-#endif
-#ifndef AI_CANONNAME
- EVUTIL_AI_CANONNAME |
-#endif
-#ifndef AI_NUMERICHOST
- EVUTIL_AI_NUMERICHOST |
-#endif
-#ifndef AI_NUMERICSERV
- EVUTIL_AI_NUMERICSERV |
-#endif
-#ifndef AI_ADDRCONFIG
- EVUTIL_AI_ADDRCONFIG |
-#endif
-#ifndef AI_ALL
- EVUTIL_AI_ALL |
-#endif
-#ifndef AI_V4MAPPED
- EVUTIL_AI_V4MAPPED |
-#endif
- EVUTIL_AI_LIBEVENT_ALLOCATED;
-
-static const unsigned int ALL_NATIVE_AI_FLAGS =
-#ifdef AI_PASSIVE
- AI_PASSIVE |
-#endif
-#ifdef AI_CANONNAME
- AI_CANONNAME |
-#endif
-#ifdef AI_NUMERICHOST
- AI_NUMERICHOST |
-#endif
-#ifdef AI_NUMERICSERV
- AI_NUMERICSERV |
-#endif
-#ifdef AI_ADDRCONFIG
- AI_ADDRCONFIG |
-#endif
-#ifdef AI_ALL
- AI_ALL |
-#endif
-#ifdef AI_V4MAPPED
- AI_V4MAPPED |
-#endif
- 0;
-#endif
-
-#ifndef USE_NATIVE_GETADDRINFO
-/* Helper for systems with no getaddrinfo(): make one or more addrinfos out of
- * a struct hostent.
- */
-static struct evutil_addrinfo *
-addrinfo_from_hostent(const struct hostent *ent,
- int port, const struct evutil_addrinfo *hints)
-{
- int i;
- struct sockaddr_in sin;
- struct sockaddr_in6 sin6;
- struct sockaddr *sa;
- int socklen;
- struct evutil_addrinfo *res=NULL, *ai;
- void *addrp;
-
- if (ent->h_addrtype == PF_INET) {
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_port = htons(port);
- sa = (struct sockaddr *)&sin;
- socklen = sizeof(struct sockaddr_in);
- addrp = &sin.sin_addr;
- if (ent->h_length != sizeof(sin.sin_addr)) {
- event_warnx("Weird h_length from gethostbyname");
- return NULL;
- }
- } else if (ent->h_addrtype == PF_INET6) {
- memset(&sin6, 0, sizeof(sin6));
- sin6.sin6_family = AF_INET6;
- sin6.sin6_port = htons(port);
- sa = (struct sockaddr *)&sin6;
- socklen = sizeof(struct sockaddr_in);
- addrp = &sin6.sin6_addr;
- if (ent->h_length != sizeof(sin6.sin6_addr)) {
- event_warnx("Weird h_length from gethostbyname");
- return NULL;
- }
- } else
- return NULL;
-
- for (i = 0; ent->h_addr_list[i]; ++i) {
- memcpy(addrp, ent->h_addr_list[i], ent->h_length);
- ai = evutil_new_addrinfo(sa, socklen, hints);
- if (!ai) {
- evutil_freeaddrinfo(res);
- return NULL;
- }
- res = evutil_addrinfo_append(res, ai);
- }
-
- if (res && ((hints->ai_flags & EVUTIL_AI_CANONNAME) && ent->h_name)) {
- res->ai_canonname = mm_strdup(ent->h_name);
- if (res->ai_canonname == NULL) {
- evutil_freeaddrinfo(res);
- return NULL;
- }
- }
-
- return res;
-}
-#endif
-
-/* If the EVUTIL_AI_ADDRCONFIG flag is set on hints->ai_flags, and
- * hints->ai_family is PF_UNSPEC, then revise the value of hints->ai_family so
- * that we'll only get addresses we could maybe connect to.
- */
-void
-evutil_adjust_hints_for_addrconfig(struct evutil_addrinfo *hints)
-{
- if (!(hints->ai_flags & EVUTIL_AI_ADDRCONFIG))
- return;
- if (hints->ai_family != PF_UNSPEC)
- return;
- if (!have_checked_interfaces)
- evutil_check_interfaces(0);
- if (had_ipv4_address && !had_ipv6_address) {
- hints->ai_family = PF_INET;
- } else if (!had_ipv4_address && had_ipv6_address) {
- hints->ai_family = PF_INET6;
- }
-}
-
-#ifdef USE_NATIVE_GETADDRINFO
-static int need_numeric_port_hack_=0;
-static int need_socktype_protocol_hack_=0;
-static int tested_for_getaddrinfo_hacks=0;
-
-/* Some older BSDs (like OpenBSD up to 4.6) used to believe that
- giving a numeric port without giving an ai_socktype was verboten.
- We test for this so we can apply an appropriate workaround. If it
- turns out that the bug is present, then:
-
- - If nodename==NULL and servname is numeric, we build an answer
- ourselves using evutil_getaddrinfo_common().
-
- - If nodename!=NULL and servname is numeric, then we set
- servname=NULL when calling getaddrinfo, and post-process the
- result to set the ports on it.
-
- We test for this bug at runtime, since otherwise we can't have the
- same binary run on multiple BSD versions.
-
- - Some versions of Solaris believe that it's nice to leave to protocol
- field set to 0. We test for this so we can apply an appropriate
- workaround.
-*/
-static void
-test_for_getaddrinfo_hacks(void)
-{
- int r, r2;
- struct evutil_addrinfo *ai=NULL, *ai2=NULL;
- struct evutil_addrinfo hints;
-
- memset(&hints,0,sizeof(hints));
- hints.ai_family = PF_UNSPEC;
- hints.ai_flags =
-#ifdef AI_NUMERICHOST
- AI_NUMERICHOST |
-#endif
-#ifdef AI_NUMERICSERV
- AI_NUMERICSERV |
-#endif
- 0;
- r = getaddrinfo("1.2.3.4", "80", &hints, &ai);
- hints.ai_socktype = SOCK_STREAM;
- r2 = getaddrinfo("1.2.3.4", "80", &hints, &ai2);
- if (r2 == 0 && r != 0) {
- need_numeric_port_hack_=1;
- }
- if (ai2 && ai2->ai_protocol == 0) {
- need_socktype_protocol_hack_=1;
- }
-
- if (ai)
- freeaddrinfo(ai);
- if (ai2)
- freeaddrinfo(ai2);
- tested_for_getaddrinfo_hacks=1;
-}
-
-static inline int
-need_numeric_port_hack(void)
-{
- if (!tested_for_getaddrinfo_hacks)
- test_for_getaddrinfo_hacks();
- return need_numeric_port_hack_;
-}
-
-static inline int
-need_socktype_protocol_hack(void)
-{
- if (!tested_for_getaddrinfo_hacks)
- test_for_getaddrinfo_hacks();
- return need_socktype_protocol_hack_;
-}
-
-static void
-apply_numeric_port_hack(int port, struct evutil_addrinfo **ai)
-{
- /* Now we run through the list and set the ports on all of the
- * results where ports would make sense. */
- for ( ; *ai; ai = &(*ai)->ai_next) {
- struct sockaddr *sa = (*ai)->ai_addr;
- if (sa && sa->sa_family == AF_INET) {
- struct sockaddr_in *sin = (struct sockaddr_in*)sa;
- sin->sin_port = htons(port);
- } else if (sa && sa->sa_family == AF_INET6) {
- struct sockaddr_in6 *sin6 = (struct sockaddr_in6*)sa;
- sin6->sin6_port = htons(port);
- } else {
- /* A numeric port makes no sense here; remove this one
- * from the list. */
- struct evutil_addrinfo *victim = *ai;
- *ai = victim->ai_next;
- victim->ai_next = NULL;
- freeaddrinfo(victim);
- }
- }
-}
-
-static int
-apply_socktype_protocol_hack(struct evutil_addrinfo *ai)
-{
- struct evutil_addrinfo *ai_new;
- for (; ai; ai = ai->ai_next) {
- evutil_getaddrinfo_infer_protocols(ai);
- if (ai->ai_socktype || ai->ai_protocol)
- continue;
- ai_new = mm_malloc(sizeof(*ai_new));
- if (!ai_new)
- return -1;
- memcpy(ai_new, ai, sizeof(*ai_new));
- ai->ai_socktype = SOCK_STREAM;
- ai->ai_protocol = IPPROTO_TCP;
- ai_new->ai_socktype = SOCK_DGRAM;
- ai_new->ai_protocol = IPPROTO_UDP;
-
- ai_new->ai_next = ai->ai_next;
- ai->ai_next = ai_new;
- }
- return 0;
-}
-#endif
-
-int
-evutil_getaddrinfo(const char *nodename, const char *servname,
- const struct evutil_addrinfo *hints_in, struct evutil_addrinfo **res)
-{
-#ifdef USE_NATIVE_GETADDRINFO
- struct evutil_addrinfo hints;
- int portnum=-1, need_np_hack, err;
-
- if (hints_in) {
- memcpy(&hints, hints_in, sizeof(hints));
- } else {
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = PF_UNSPEC;
- }
-
-#ifndef AI_ADDRCONFIG
- /* Not every system has AI_ADDRCONFIG, so fake it. */
- if (hints.ai_family == PF_UNSPEC &&
- (hints.ai_flags & EVUTIL_AI_ADDRCONFIG)) {
- evutil_adjust_hints_for_addrconfig(&hints);
- }
-#endif
-
-#ifndef AI_NUMERICSERV
- /* Not every system has AI_NUMERICSERV, so fake it. */
- if (hints.ai_flags & EVUTIL_AI_NUMERICSERV) {
- if (servname && parse_numeric_servname(servname)<0)
- return EVUTIL_EAI_NONAME;
- }
-#endif
-
- /* Enough operating systems handle enough common non-resolve
- * cases here weirdly enough that we are better off just
- * overriding them. For example:
- *
- * - Windows doesn't like to infer the protocol from the
- * socket type, or fill in socket or protocol types much at
- * all. It also seems to do its own broken implicit
- * always-on version of AI_ADDRCONFIG that keeps it from
- * ever resolving even a literal IPv6 address when
- * ai_addrtype is PF_UNSPEC.
- */
-#ifdef WIN32
- {
- int tmp_port;
- err = evutil_getaddrinfo_common(nodename,servname,&hints,
- res, &tmp_port);
- if (err == 0 ||
- err == EVUTIL_EAI_MEMORY ||
- err == EVUTIL_EAI_NONAME)
- return err;
- /* If we make it here, the system getaddrinfo can
- * have a crack at it. */
- }
-#endif
-
- /* See documentation for need_numeric_port_hack above.*/
- need_np_hack = need_numeric_port_hack() && servname && !hints.ai_socktype
- && ((portnum=parse_numeric_servname(servname)) >= 0);
- if (need_np_hack) {
- if (!nodename)
- return evutil_getaddrinfo_common(
- NULL,servname,&hints, res, &portnum);
- servname = NULL;
- }
-
- if (need_socktype_protocol_hack()) {
- evutil_getaddrinfo_infer_protocols(&hints);
- }
-
- /* Make sure that we didn't actually steal any AI_FLAGS values that
- * the system is using. (This is a constant expression, and should ge
- * optimized out.)
- *
- * XXXX Turn this into a compile-time failure rather than a run-time
- * failure.
- */
- EVUTIL_ASSERT((ALL_NONNATIVE_AI_FLAGS & ALL_NATIVE_AI_FLAGS) == 0);
-
- /* Clear any flags that only libevent understands. */
- hints.ai_flags &= ~ALL_NONNATIVE_AI_FLAGS;
-
- err = getaddrinfo(nodename, servname, &hints, res);
- if (need_np_hack)
- apply_numeric_port_hack(portnum, res);
-
- if (need_socktype_protocol_hack()) {
- if (apply_socktype_protocol_hack(*res) < 0) {
- evutil_freeaddrinfo(*res);
- *res = NULL;
- return EVUTIL_EAI_MEMORY;
- }
- }
- return err;
-#else
- int port=0, err;
- struct hostent *ent = NULL;
- struct evutil_addrinfo hints;
-
- if (hints_in) {
- memcpy(&hints, hints_in, sizeof(hints));
- } else {
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = PF_UNSPEC;
- }
-
- evutil_adjust_hints_for_addrconfig(&hints);
-
- err = evutil_getaddrinfo_common(nodename, servname, &hints, res, &port);
- if (err != EVUTIL_EAI_NEED_RESOLVE) {
- /* We either succeeded or failed. No need to continue */
- return err;
- }
-
- err = 0;
- /* Use any of the various gethostbyname_r variants as available. */
- {
-#ifdef _EVENT_HAVE_GETHOSTBYNAME_R_6_ARG
- /* This one is what glibc provides. */
- char buf[2048];
- struct hostent hostent;
- int r;
- r = gethostbyname_r(nodename, &hostent, buf, sizeof(buf), &ent,
- &err);
-#elif defined(_EVENT_HAVE_GETHOSTBYNAME_R_5_ARG)
- char buf[2048];
- struct hostent hostent;
- ent = gethostbyname_r(nodename, &hostent, buf, sizeof(buf),
- &err);
-#elif defined(_EVENT_HAVE_GETHOSTBYNAME_R_3_ARG)
- struct hostent_data data;
- struct hostent hostent;
- memset(&data, 0, sizeof(data));
- err = gethostbyname_r(nodename, &hostent, &data);
- ent = err ? NULL : &hostent;
-#else
- /* fall back to gethostbyname. */
- /* XXXX This needs a lock everywhere but Windows. */
- ent = gethostbyname(nodename);
-#ifdef WIN32
- err = WSAGetLastError();
-#else
- err = h_errno;
-#endif
-#endif
-
- /* Now we have either ent or err set. */
- if (!ent) {
- /* XXX is this right for windows ? */
- switch (err) {
- case TRY_AGAIN:
- return EVUTIL_EAI_AGAIN;
- case NO_RECOVERY:
- default:
- return EVUTIL_EAI_FAIL;
- case HOST_NOT_FOUND:
- return EVUTIL_EAI_NONAME;
- case NO_ADDRESS:
-#if NO_DATA != NO_ADDRESS
- case NO_DATA:
-#endif
- return EVUTIL_EAI_NODATA;
- }
- }
-
- if (ent->h_addrtype != hints.ai_family &&
- hints.ai_family != PF_UNSPEC) {
- /* This wasn't the type we were hoping for. Too bad
- * we never had a chance to ask gethostbyname for what
- * we wanted. */
- return EVUTIL_EAI_NONAME;
- }
-
- /* Make sure we got _some_ answers. */
- if (ent->h_length == 0)
- return EVUTIL_EAI_NODATA;
-
- /* If we got an address type we don't know how to make a
- sockaddr for, give up. */
- if (ent->h_addrtype != PF_INET && ent->h_addrtype != PF_INET6)
- return EVUTIL_EAI_FAMILY;
-
- *res = addrinfo_from_hostent(ent, port, &hints);
- if (! *res)
- return EVUTIL_EAI_MEMORY;
- }
-
- return 0;
-#endif
-}
-
-void
-evutil_freeaddrinfo(struct evutil_addrinfo *ai)
-{
-#ifdef _EVENT_HAVE_GETADDRINFO
- if (!(ai->ai_flags & EVUTIL_AI_LIBEVENT_ALLOCATED)) {
- freeaddrinfo(ai);
- return;
- }
-#endif
- while (ai) {
- struct evutil_addrinfo *next = ai->ai_next;
- if (ai->ai_canonname)
- mm_free(ai->ai_canonname);
- mm_free(ai);
- ai = next;
- }
-}
-
-static evdns_getaddrinfo_fn evdns_getaddrinfo_impl = NULL;
-
-void
-evutil_set_evdns_getaddrinfo_fn(evdns_getaddrinfo_fn fn)
-{
- if (!evdns_getaddrinfo_impl)
- evdns_getaddrinfo_impl = fn;
-}
-
-/* Internal helper function: act like evdns_getaddrinfo if dns_base is set;
- * otherwise do a blocking resolve and pass the result to the callback in the
- * way that evdns_getaddrinfo would.
- */
-int
-evutil_getaddrinfo_async(struct evdns_base *dns_base,
- const char *nodename, const char *servname,
- const struct evutil_addrinfo *hints_in,
- void (*cb)(int, struct evutil_addrinfo *, void *), void *arg)
-{
- if (dns_base && evdns_getaddrinfo_impl) {
- evdns_getaddrinfo_impl(
- dns_base, nodename, servname, hints_in, cb, arg);
- } else {
- struct evutil_addrinfo *ai=NULL;
- int err;
- err = evutil_getaddrinfo(nodename, servname, hints_in, &ai);
- cb(err, ai, arg);
- }
- return 0;
-}
-
-const char *
-evutil_gai_strerror(int err)
-{
- /* As a sneaky side-benefit, this case statement will get most
- * compilers to tell us if any of the error codes we defined
- * conflict with the platform's native error codes. */
- switch (err) {
- case EVUTIL_EAI_CANCEL:
- return "Request canceled";
- case 0:
- return "No error";
-
- case EVUTIL_EAI_ADDRFAMILY:
- return "address family for nodename not supported";
- case EVUTIL_EAI_AGAIN:
- return "temporary failure in name resolution";
- case EVUTIL_EAI_BADFLAGS:
- return "invalid value for ai_flags";
- case EVUTIL_EAI_FAIL:
- return "non-recoverable failure in name resolution";
- case EVUTIL_EAI_FAMILY:
- return "ai_family not supported";
- case EVUTIL_EAI_MEMORY:
- return "memory allocation failure";
- case EVUTIL_EAI_NODATA:
- return "no address associated with nodename";
- case EVUTIL_EAI_NONAME:
- return "nodename nor servname provided, or not known";
- case EVUTIL_EAI_SERVICE:
- return "servname not supported for ai_socktype";
- case EVUTIL_EAI_SOCKTYPE:
- return "ai_socktype not supported";
- case EVUTIL_EAI_SYSTEM:
- return "system error";
- default:
-#if defined(USE_NATIVE_GETADDRINFO) && defined(WIN32)
- return gai_strerrorA(err);
-#elif defined(USE_NATIVE_GETADDRINFO)
- return gai_strerror(err);
-#else
- return "Unknown error code";
-#endif
- }
-}
-
-#ifdef WIN32
-#define E(code, s) { code, (s " [" #code " ]") }
-static struct { int code; const char *msg; } windows_socket_errors[] = {
- E(WSAEINTR, "Interrupted function call"),
- E(WSAEACCES, "Permission denied"),
- E(WSAEFAULT, "Bad address"),
- E(WSAEINVAL, "Invalid argument"),
- E(WSAEMFILE, "Too many open files"),
- E(WSAEWOULDBLOCK, "Resource temporarily unavailable"),
- E(WSAEINPROGRESS, "Operation now in progress"),
- E(WSAEALREADY, "Operation already in progress"),
- E(WSAENOTSOCK, "Socket operation on nonsocket"),
- E(WSAEDESTADDRREQ, "Destination address required"),
- E(WSAEMSGSIZE, "Message too long"),
- E(WSAEPROTOTYPE, "Protocol wrong for socket"),
- E(WSAENOPROTOOPT, "Bad protocol option"),
- E(WSAEPROTONOSUPPORT, "Protocol not supported"),
- E(WSAESOCKTNOSUPPORT, "Socket type not supported"),
- /* What's the difference between NOTSUPP and NOSUPPORT? :) */
- E(WSAEOPNOTSUPP, "Operation not supported"),
- E(WSAEPFNOSUPPORT, "Protocol family not supported"),
- E(WSAEAFNOSUPPORT, "Address family not supported by protocol family"),
- E(WSAEADDRINUSE, "Address already in use"),
- E(WSAEADDRNOTAVAIL, "Cannot assign requested address"),
- E(WSAENETDOWN, "Network is down"),
- E(WSAENETUNREACH, "Network is unreachable"),
- E(WSAENETRESET, "Network dropped connection on reset"),
- E(WSAECONNABORTED, "Software caused connection abort"),
- E(WSAECONNRESET, "Connection reset by peer"),
- E(WSAENOBUFS, "No buffer space available"),
- E(WSAEISCONN, "Socket is already connected"),
- E(WSAENOTCONN, "Socket is not connected"),
- E(WSAESHUTDOWN, "Cannot send after socket shutdown"),
- E(WSAETIMEDOUT, "Connection timed out"),
- E(WSAECONNREFUSED, "Connection refused"),
- E(WSAEHOSTDOWN, "Host is down"),
- E(WSAEHOSTUNREACH, "No route to host"),
- E(WSAEPROCLIM, "Too many processes"),
-
- /* Yes, some of these start with WSA, not WSAE. No, I don't know why. */
- E(WSASYSNOTREADY, "Network subsystem is unavailable"),
- E(WSAVERNOTSUPPORTED, "Winsock.dll out of range"),
- E(WSANOTINITIALISED, "Successful WSAStartup not yet performed"),
- E(WSAEDISCON, "Graceful shutdown now in progress"),
-#ifdef WSATYPE_NOT_FOUND
- E(WSATYPE_NOT_FOUND, "Class type not found"),
-#endif
- E(WSAHOST_NOT_FOUND, "Host not found"),
- E(WSATRY_AGAIN, "Nonauthoritative host not found"),
- E(WSANO_RECOVERY, "This is a nonrecoverable error"),
- E(WSANO_DATA, "Valid name, no data record of requested type)"),
-
- /* There are some more error codes whose numeric values are marked
- * <b>OS dependent</b>. They start with WSA_, apparently for the same
- * reason that practitioners of some craft traditions deliberately
- * introduce imperfections into their baskets and rugs "to allow the
- * evil spirits to escape." If we catch them, then our binaries
- * might not report consistent results across versions of Windows.
- * Thus, I'm going to let them all fall through.
- */
- { -1, NULL },
-};
-#undef E
-/** Equivalent to strerror, but for windows socket errors. */
-const char *
-evutil_socket_error_to_string(int errcode)
-{
- /* XXXX Is there really no built-in function to do this? */
- int i;
- for (i=0; windows_socket_errors[i].code >= 0; ++i) {
- if (errcode == windows_socket_errors[i].code)
- return windows_socket_errors[i].msg;
- }
- return strerror(errcode);
-}
-#endif
-
-int
-evutil_snprintf(char *buf, size_t buflen, const char *format, ...)
-{
- int r;
- va_list ap;
- va_start(ap, format);
- r = evutil_vsnprintf(buf, buflen, format, ap);
- va_end(ap);
- return r;
-}
-
-int
-evutil_vsnprintf(char *buf, size_t buflen, const char *format, va_list ap)
-{
- int r;
- if (!buflen)
- return 0;
-#if defined(_MSC_VER) || defined(WIN32)
- r = _vsnprintf(buf, buflen, format, ap);
- if (r < 0)
- r = _vscprintf(format, ap);
-#elif defined(sgi)
- /* Make sure we always use the correct vsnprintf on IRIX */
- extern int _xpg5_vsnprintf(char * __restrict,
- __SGI_LIBC_NAMESPACE_QUALIFIER size_t,
- const char * __restrict, /* va_list */ char *);
-
- r = _xpg5_vsnprintf(buf, buflen, format, ap);
-#else
- r = vsnprintf(buf, buflen, format, ap);
-#endif
- buf[buflen-1] = '\0';
- return r;
-}
-
-#define USE_INTERNAL_NTOP
-#define USE_INTERNAL_PTON
-
-const char *
-evutil_inet_ntop(int af, const void *src, char *dst, size_t len)
-{
-#if defined(_EVENT_HAVE_INET_NTOP) && !defined(USE_INTERNAL_NTOP)
- return inet_ntop(af, src, dst, len);
-#else
- if (af == AF_INET) {
- const struct in_addr *in = src;
- const ev_uint32_t a = ntohl(in->s_addr);
- int r;
- r = evutil_snprintf(dst, len, "%d.%d.%d.%d",
- (int)(ev_uint8_t)((a>>24)&0xff),
- (int)(ev_uint8_t)((a>>16)&0xff),
- (int)(ev_uint8_t)((a>>8 )&0xff),
- (int)(ev_uint8_t)((a )&0xff));
- if (r<0||(size_t)r>=len)
- return NULL;
- else
- return dst;
-#ifdef AF_INET6
- } else if (af == AF_INET6) {
- const struct in6_addr *addr = src;
- char buf[64], *cp;
- int longestGapLen = 0, longestGapPos = -1, i,
- curGapPos = -1, curGapLen = 0;
- ev_uint16_t words[8];
- for (i = 0; i < 8; ++i) {
- words[i] =
- (((ev_uint16_t)addr->s6_addr[2*i])<<8) + addr->s6_addr[2*i+1];
- }
- if (words[0] == 0 && words[1] == 0 && words[2] == 0 && words[3] == 0 &&
- words[4] == 0 && ((words[5] == 0 && words[6] && words[7]) ||
- (words[5] == 0xffff))) {
- /* This is an IPv4 address. */
- if (words[5] == 0) {
- evutil_snprintf(buf, sizeof(buf), "::%d.%d.%d.%d",
- addr->s6_addr[12], addr->s6_addr[13],
- addr->s6_addr[14], addr->s6_addr[15]);
- } else {
- evutil_snprintf(buf, sizeof(buf), "::%x:%d.%d.%d.%d", words[5],
- addr->s6_addr[12], addr->s6_addr[13],
- addr->s6_addr[14], addr->s6_addr[15]);
- }
- if (strlen(buf) > len)
- return NULL;
- strlcpy(dst, buf, len);
- return dst;
- }
- i = 0;
- while (i < 8) {
- if (words[i] == 0) {
- curGapPos = i++;
- curGapLen = 1;
- while (i<8 && words[i] == 0) {
- ++i; ++curGapLen;
- }
- if (curGapLen > longestGapLen) {
- longestGapPos = curGapPos;
- longestGapLen = curGapLen;
- }
- } else {
- ++i;
- }
- }
- if (longestGapLen<=1)
- longestGapPos = -1;
-
- cp = buf;
- for (i = 0; i < 8; ++i) {
- if (words[i] == 0 && longestGapPos == i) {
- if (i == 0)
- *cp++ = ':';
- *cp++ = ':';
- while (i < 8 && words[i] == 0)
- ++i;
- --i; /* to compensate for loop increment. */
- } else {
- evutil_snprintf(cp,
- sizeof(buf)-(cp-buf), "%x", (unsigned)words[i]);
- cp += strlen(cp);
- if (i != 7)
- *cp++ = ':';
- }
- }
- *cp = '\0';
- if (strlen(buf) > len)
- return NULL;
- strlcpy(dst, buf, len);
- return dst;
-#endif
- } else {
- return NULL;
- }
-#endif
-}
-
-int
-evutil_inet_pton(int af, const char *src, void *dst)
-{
-#if defined(_EVENT_HAVE_INET_PTON) && !defined(USE_INTERNAL_PTON)
- return inet_pton(af, src, dst);
-#else
- if (af == AF_INET) {
- int a,b,c,d;
- char more;
- struct in_addr *addr = dst;
- if (sscanf(src, "%d.%d.%d.%d%c", &a,&b,&c,&d,&more) != 4)
- return 0;
- if (a < 0 || a > 255) return 0;
- if (b < 0 || b > 255) return 0;
- if (c < 0 || c > 255) return 0;
- if (d < 0 || d > 255) return 0;
- addr->s_addr = htonl((a<<24) | (b<<16) | (c<<8) | d);
- return 1;
-#ifdef AF_INET6
- } else if (af == AF_INET6) {
- struct in6_addr *out = dst;
- ev_uint16_t words[8];
- int gapPos = -1, i, setWords=0;
- const char *dot = strchr(src, '.');
- const char *eow; /* end of words. */
- if (dot == src)
- return 0;
- else if (!dot)
- eow = src+strlen(src);
- else {
- int byte1,byte2,byte3,byte4;
- char more;
- for (eow = dot-1; eow >= src && EVUTIL_ISDIGIT(*eow); --eow)
- ;
- ++eow;
-
- /* We use "scanf" because some platform inet_aton()s are too lax
- * about IPv4 addresses of the form "1.2.3" */
- if (sscanf(eow, "%d.%d.%d.%d%c",
- &byte1,&byte2,&byte3,&byte4,&more) != 4)
- return 0;
-
- if (byte1 > 255 || byte1 < 0 ||
- byte2 > 255 || byte2 < 0 ||
- byte3 > 255 || byte3 < 0 ||
- byte4 > 255 || byte4 < 0)
- return 0;
-
- words[6] = (byte1<<8) | byte2;
- words[7] = (byte3<<8) | byte4;
- setWords += 2;
- }
-
- i = 0;
- while (src < eow) {
- if (i > 7)
- return 0;
- if (EVUTIL_ISXDIGIT(*src)) {
- char *next;
- long r = strtol(src, &next, 16);
- if (next > 4+src)
- return 0;
- if (next == src)
- return 0;
- if (r<0 || r>65536)
- return 0;
-
- words[i++] = (ev_uint16_t)r;
- setWords++;
- src = next;
- if (*src != ':' && src != eow)
- return 0;
- ++src;
- } else if (*src == ':' && i > 0 && gapPos==-1) {
- gapPos = i;
- ++src;
- } else if (*src == ':' && i == 0 && src[1] == ':' && gapPos==-1) {
- gapPos = i;
- src += 2;
- } else {
- return 0;
- }
- }
-
- if (setWords > 8 ||
- (setWords == 8 && gapPos != -1) ||
- (setWords < 8 && gapPos == -1))
- return 0;
-
- if (gapPos >= 0) {
- int nToMove = setWords - (dot ? 2 : 0) - gapPos;
- int gapLen = 8 - setWords;
- /* assert(nToMove >= 0); */
- if (nToMove < 0)
- return -1; /* should be impossible */
- memmove(&words[gapPos+gapLen], &words[gapPos],
- sizeof(ev_uint16_t)*nToMove);
- memset(&words[gapPos], 0, sizeof(ev_uint16_t)*gapLen);
- }
- for (i = 0; i < 8; ++i) {
- out->s6_addr[2*i ] = words[i] >> 8;
- out->s6_addr[2*i+1] = words[i] & 0xff;
- }
-
- return 1;
-#endif
- } else {
- return -1;
- }
-#endif
-}
-
-int
-evutil_parse_sockaddr_port(const char *ip_as_string, struct sockaddr *out, int *outlen)
-{
- int port;
- char buf[128];
- const char *cp, *addr_part, *port_part;
- int is_ipv6;
- /* recognized formats are:
- * [ipv6]:port
- * ipv6
- * [ipv6]
- * ipv4:port
- * ipv4
- */
-
- cp = strchr(ip_as_string, ':');
- if (*ip_as_string == '[') {
- int len;
- if (!(cp = strchr(ip_as_string, ']'))) {
- return -1;
- }
- len = (int) ( cp-(ip_as_string + 1) );
- if (len > (int)sizeof(buf)-1) {
- return -1;
- }
- memcpy(buf, ip_as_string+1, len);
- buf[len] = '\0';
- addr_part = buf;
- if (cp[1] == ':')
- port_part = cp+2;
- else
- port_part = NULL;
- is_ipv6 = 1;
- } else if (cp && strchr(cp+1, ':')) {
- is_ipv6 = 1;
- addr_part = ip_as_string;
- port_part = NULL;
- } else if (cp) {
- is_ipv6 = 0;
- if (cp - ip_as_string > (int)sizeof(buf)-1) {
- return -1;
- }
- memcpy(buf, ip_as_string, cp-ip_as_string);
- buf[cp-ip_as_string] = '\0';
- addr_part = buf;
- port_part = cp+1;
- } else {
- addr_part = ip_as_string;
- port_part = NULL;
- is_ipv6 = 0;
- }
-
- if (port_part == NULL) {
- port = 0;
- } else {
- port = atoi(port_part);
- if (port <= 0 || port > 65535) {
- return -1;
- }
- }
-
- if (!addr_part)
- return -1; /* Should be impossible. */
-#ifdef AF_INET6
- if (is_ipv6)
- {
- struct sockaddr_in6 sin6;
- memset(&sin6, 0, sizeof(sin6));
-#ifdef _EVENT_HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN
- sin6.sin6_len = sizeof(sin6);
-#endif
- sin6.sin6_family = AF_INET6;
- sin6.sin6_port = htons(port);
- if (1 != evutil_inet_pton(AF_INET6, addr_part, &sin6.sin6_addr))
- return -1;
- if ((int)sizeof(sin6) > *outlen)
- return -1;
- memset(out, 0, *outlen);
- memcpy(out, &sin6, sizeof(sin6));
- *outlen = sizeof(sin6);
- return 0;
- }
- else
-#endif
- {
- struct sockaddr_in sin;
- memset(&sin, 0, sizeof(sin));
-#ifdef _EVENT_HAVE_STRUCT_SOCKADDR_IN_SIN_LEN
- sin.sin_len = sizeof(sin);
-#endif
- sin.sin_family = AF_INET;
- sin.sin_port = htons(port);
- if (1 != evutil_inet_pton(AF_INET, addr_part, &sin.sin_addr))
- return -1;
- if ((int)sizeof(sin) > *outlen)
- return -1;
- memset(out, 0, *outlen);
- memcpy(out, &sin, sizeof(sin));
- *outlen = sizeof(sin);
- return 0;
- }
-}
-
-const char *
-evutil_format_sockaddr_port(const struct sockaddr *sa, char *out, size_t outlen)
-{
- char b[128];
- const char *res=NULL;
- int port;
- if (sa->sa_family == AF_INET) {
- const struct sockaddr_in *sin = (const struct sockaddr_in*)sa;
- res = evutil_inet_ntop(AF_INET, &sin->sin_addr,b,sizeof(b));
- port = ntohs(sin->sin_port);
- if (res) {
- evutil_snprintf(out, outlen, "%s:%d", b, port);
- return out;
- }
- } else if (sa->sa_family == AF_INET6) {
- const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6*)sa;
- res = evutil_inet_ntop(AF_INET6, &sin6->sin6_addr,b,sizeof(b));
- port = ntohs(sin6->sin6_port);
- if (res) {
- evutil_snprintf(out, outlen, "[%s]:%d", b, port);
- return out;
- }
- }
-
- evutil_snprintf(out, outlen, "<addr with socktype %d>",
- (int)sa->sa_family);
- return out;
-}
-
-int
-evutil_sockaddr_cmp(const struct sockaddr *sa1, const struct sockaddr *sa2,
- int include_port)
-{
- int r;
- if (0 != (r = (sa1->sa_family - sa2->sa_family)))
- return r;
-
- if (sa1->sa_family == AF_INET) {
- const struct sockaddr_in *sin1, *sin2;
- sin1 = (const struct sockaddr_in *)sa1;
- sin2 = (const struct sockaddr_in *)sa2;
- if (sin1->sin_addr.s_addr < sin2->sin_addr.s_addr)
- return -1;
- else if (sin1->sin_addr.s_addr > sin2->sin_addr.s_addr)
- return 1;
- else if (include_port &&
- (r = ((int)sin1->sin_port - (int)sin2->sin_port)))
- return r;
- else
- return 0;
- }
-#ifdef AF_INET6
- else if (sa1->sa_family == AF_INET6) {
- const struct sockaddr_in6 *sin1, *sin2;
- sin1 = (const struct sockaddr_in6 *)sa1;
- sin2 = (const struct sockaddr_in6 *)sa2;
- if ((r = memcmp(sin1->sin6_addr.s6_addr, sin2->sin6_addr.s6_addr, 16)))
- return r;
- else if (include_port &&
- (r = ((int)sin1->sin6_port - (int)sin2->sin6_port)))
- return r;
- else
- return 0;
- }
-#endif
- return 1;
-}
-
-/* Tables to implement ctypes-replacement EVUTIL_IS*() functions. Each table
- * has 256 bits to look up whether a character is in some set or not. This
- * fails on non-ASCII platforms, but so does every other place where we
- * take a char and write it onto the network.
- **/
-static const ev_uint32_t EVUTIL_ISALPHA_TABLE[8] =
- { 0, 0, 0x7fffffe, 0x7fffffe, 0, 0, 0, 0 };
-static const ev_uint32_t EVUTIL_ISALNUM_TABLE[8] =
- { 0, 0x3ff0000, 0x7fffffe, 0x7fffffe, 0, 0, 0, 0 };
-static const ev_uint32_t EVUTIL_ISSPACE_TABLE[8] = { 0x3e00, 0x1, 0, 0, 0, 0, 0, 0 };
-static const ev_uint32_t EVUTIL_ISXDIGIT_TABLE[8] =
- { 0, 0x3ff0000, 0x7e, 0x7e, 0, 0, 0, 0 };
-static const ev_uint32_t EVUTIL_ISDIGIT_TABLE[8] = { 0, 0x3ff0000, 0, 0, 0, 0, 0, 0 };
-static const ev_uint32_t EVUTIL_ISPRINT_TABLE[8] =
- { 0, 0xffffffff, 0xffffffff, 0x7fffffff, 0, 0, 0, 0x0 };
-static const ev_uint32_t EVUTIL_ISUPPER_TABLE[8] = { 0, 0, 0x7fffffe, 0, 0, 0, 0, 0 };
-static const ev_uint32_t EVUTIL_ISLOWER_TABLE[8] = { 0, 0, 0, 0x7fffffe, 0, 0, 0, 0 };
-/* Upper-casing and lowercasing tables to map characters to upper/lowercase
- * equivalents. */
-static const unsigned char EVUTIL_TOUPPER_TABLE[256] = {
- 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
- 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
- 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
- 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
- 64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
- 80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,
- 96,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,
- 80,81,82,83,84,85,86,87,88,89,90,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
- 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
- 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
- 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
- 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
-};
-static const unsigned char EVUTIL_TOLOWER_TABLE[256] = {
- 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
- 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,
- 32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,
- 48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,
- 64,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,120,121,122,91,92,93,94,95,
- 96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,
- 112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
- 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
- 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
- 160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
- 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
- 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
- 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
- 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
- 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
-};
-
-#define IMPL_CTYPE_FN(name) \
- int EVUTIL_##name(char c) { \
- ev_uint8_t u = c; \
- return !!(EVUTIL_##name##_TABLE[(u >> 5) & 7] & (1 << (u & 31))); \
- }
-IMPL_CTYPE_FN(ISALPHA)
-IMPL_CTYPE_FN(ISALNUM)
-IMPL_CTYPE_FN(ISSPACE)
-IMPL_CTYPE_FN(ISDIGIT)
-IMPL_CTYPE_FN(ISXDIGIT)
-IMPL_CTYPE_FN(ISPRINT)
-IMPL_CTYPE_FN(ISLOWER)
-IMPL_CTYPE_FN(ISUPPER)
-
-char EVUTIL_TOLOWER(char c)
-{
- return ((char)EVUTIL_TOLOWER_TABLE[(ev_uint8_t)c]);
-}
-char EVUTIL_TOUPPER(char c)
-{
- return ((char)EVUTIL_TOUPPER_TABLE[(ev_uint8_t)c]);
-}
-int
-evutil_ascii_strcasecmp(const char *s1, const char *s2)
-{
- char c1, c2;
- while (1) {
- c1 = EVUTIL_TOLOWER(*s1++);
- c2 = EVUTIL_TOLOWER(*s2++);
- if (c1 < c2)
- return -1;
- else if (c1 > c2)
- return 1;
- else if (c1 == 0)
- return 0;
- }
-}
-int evutil_ascii_strncasecmp(const char *s1, const char *s2, size_t n)
-{
- char c1, c2;
- while (n--) {
- c1 = EVUTIL_TOLOWER(*s1++);
- c2 = EVUTIL_TOLOWER(*s2++);
- if (c1 < c2)
- return -1;
- else if (c1 > c2)
- return 1;
- else if (c1 == 0)
- return 0;
- }
- return 0;
-}
-
-static int
-evutil_issetugid(void)
-{
-//#ifdef _EVENT_HAVE_ISSETUGID
-// return issetugid();
-//#else
-
-//#ifdef _EVENT_HAVE_GETEUID
-// if (getuid() != geteuid())
-// return 1;
-//#endif
-//#ifdef _EVENT_HAVE_GETEGID
-// if (getgid() != getegid())
-// return 1;
-//#endif
- return 0;
-//#endif
-}
-
-const char *
-evutil_getenv(const char *varname)
-{
- if (evutil_issetugid())
- return NULL;
-
- return getenv(varname);
-}
-
-long
-_evutil_weakrand(void)
-{
-#ifdef WIN32
- return rand();
-#else
- return random();
-#endif
-}
-
-/**
- * Volatile pointer to memset: we use this to keep the compiler from
- * eliminating our call to memset.
- */
-void * (*volatile evutil_memset_volatile_)(void *, int, size_t) = memset;
-
-void
-evutil_memclear_(void *mem, size_t len)
-{
- evutil_memset_volatile_(mem, 0, len);
-}
-
-int
-evutil_sockaddr_is_loopback(const struct sockaddr *addr)
-{
- static const char LOOPBACK_S6[16] =
- "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1";
- if (addr->sa_family == AF_INET) {
- struct sockaddr_in *sin = (struct sockaddr_in *)addr;
- return (ntohl(sin->sin_addr.s_addr) & 0xff000000) == 0x7f000000;
- } else if (addr->sa_family == AF_INET6) {
- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)addr;
- return !memcmp(sin6->sin6_addr.s6_addr, LOOPBACK_S6, 16);
- }
- return 0;
-}
-
-#define MAX_SECONDS_IN_MSEC_LONG \
- (((LONG_MAX) - 999) / 1000)
-
-long
-evutil_tv_to_msec(const struct timeval *tv)
-{
- if (tv->tv_usec > 1000000 || tv->tv_sec > MAX_SECONDS_IN_MSEC_LONG)
- return -1;
-
- return (tv->tv_sec * 1000) + ((tv->tv_usec + 999) / 1000);
-}
-
-int
-evutil_hex_char_to_int(char c)
-{
- switch(c)
- {
- case '0': return 0;
- case '1': return 1;
- case '2': return 2;
- case '3': return 3;
- case '4': return 4;
- case '5': return 5;
- case '6': return 6;
- case '7': return 7;
- case '8': return 8;
- case '9': return 9;
- case 'A': case 'a': return 10;
- case 'B': case 'b': return 11;
- case 'C': case 'c': return 12;
- case 'D': case 'd': return 13;
- case 'E': case 'e': return 14;
- case 'F': case 'f': return 15;
- }
- return -1;
-}
-
-#ifdef WIN32
-HANDLE
-evutil_load_windows_system_library(const TCHAR *library_name)
-{
- TCHAR path[MAX_PATH];
- unsigned n;
- n = GetSystemDirectory(path, MAX_PATH);
- if (n == 0 || n + _tcslen(library_name) + 2 >= MAX_PATH)
- return 0;
- _tcscat(path, TEXT("\\"));
- _tcscat(path, library_name);
- return LoadLibrary(path);
-}
-#endif
-
diff --git a/external/libevent_files/evutil_rand.c b/external/libevent_files/evutil_rand.c
deleted file mode 100644
index ed557d27..00000000
--- a/external/libevent_files/evutil_rand.c
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/* This file has our secure PRNG code. On platforms that have arc4random(),
- * we just use that. Otherwise, we include arc4random.c as a bunch of static
- * functions, and wrap it lightly. We don't expose the arc4random*() APIs
- * because A) they aren't in our namespace, and B) it's not nice to name your
- * APIs after their implementations. We keep them in a separate file
- * so that other people can rip it out and use it for whatever.
- */
-
-#include "event2/event-config.h"
-
-#include <limits.h>
-
-#include "util-internal.h"
-#include "evthread-internal.h"
-
-#ifdef _EVENT_HAVE_ARC4RANDOM
-#include <stdlib.h>
-#include <string.h>
-int
-evutil_secure_rng_set_urandom_device_file(char *fname)
-{
- (void) fname;
- return -1;
-}
-int
-evutil_secure_rng_init(void)
-{
- /* call arc4random() now to force it to self-initialize */
- (void) arc4random();
- return 0;
-}
-int
-evutil_secure_rng_global_setup_locks_(const int enable_locks)
-{
- return 0;
-}
-
-static void
-ev_arc4random_buf(void *buf, size_t n)
-{
-#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
- return arc4random_buf(buf, n);
-#else
- unsigned char *b = buf;
-
-#if defined(_EVENT_HAVE_ARC4RANDOM_BUF)
- /* OSX 10.7 introducd arc4random_buf, so if you build your program
- * there, you'll get surprised when older versions of OSX fail to run.
- * To solve this, we can check whether the function pointer is set,
- * and fall back otherwise. (OSX does this using some linker
- * trickery.)
- */
- {
- void (*tptr)(void *,size_t) =
- (void (*)(void*,size_t))arc4random_buf;
- if (tptr != NULL) {
- return arc4random_buf(buf, n);
- }
- }
-#endif
- /* Make sure that we start out with b at a 4-byte alignment; plenty
- * of CPUs care about this for 32-bit access. */
- if (n >= 4 && ((ev_uintptr_t)b) & 3) {
- ev_uint32_t u = arc4random();
- int n_bytes = 4 - (((ev_uintptr_t)b) & 3);
- memcpy(b, &u, n_bytes);
- b += n_bytes;
- n -= n_bytes;
- }
- while (n >= 4) {
- *(ev_uint32_t*)b = arc4random();
- b += 4;
- n -= 4;
- }
- if (n) {
- ev_uint32_t u = arc4random();
- memcpy(b, &u, n);
- }
-#endif
-}
-
-#else /* !_EVENT_HAVE_ARC4RANDOM { */
-
-#ifdef _EVENT_ssize_t
-#define ssize_t _EVENT_SSIZE_t
-#endif
-#define ARC4RANDOM_EXPORT static
-#define _ARC4_LOCK() EVLOCK_LOCK(arc4rand_lock, 0)
-#define _ARC4_UNLOCK() EVLOCK_UNLOCK(arc4rand_lock, 0)
-#ifndef _EVENT_DISABLE_THREAD_SUPPORT
-static void *arc4rand_lock;
-#endif
-
-#define ARC4RANDOM_UINT32 ev_uint32_t
-#define ARC4RANDOM_NOSTIR
-#define ARC4RANDOM_NORANDOM
-#define ARC4RANDOM_NOUNIFORM
-
-#include "./arc4random.c"
-
-#ifndef _EVENT_DISABLE_THREAD_SUPPORT
-int
-evutil_secure_rng_global_setup_locks_(const int enable_locks)
-{
- EVTHREAD_SETUP_GLOBAL_LOCK(arc4rand_lock, 0);
- return 0;
-}
-#endif
-
-int
-evutil_secure_rng_set_urandom_device_file(char *fname)
-{
-#ifdef TRY_SEED_URANDOM
- //_ARC4_LOCK();
- arc4random_urandom_filename = fname;
- //_ARC4_UNLOCK();
-#endif
- return 0;
-}
-
-int
-evutil_secure_rng_init(void)
-{
- int val;
-
- //_ARC4_LOCK();
- if (!arc4_seeded_ok)
- arc4_stir();
- val = arc4_seeded_ok ? 0 : -1;
- //_ARC4_UNLOCK();
- return val;
-}
-
-static void
-ev_arc4random_buf(void *buf, size_t n)
-{
- arc4random_buf(buf, n);
-}
-
-#endif /* } !_EVENT_HAVE_ARC4RANDOM */
-
-void
-evutil_secure_rng_get_bytes(void *buf, size_t n)
-{
- ev_arc4random_buf(buf, n);
-}
-
-void
-evutil_secure_rng_add_bytes(const char *buf, size_t n)
-{
-#if !defined(__BIONIC__) /* bionic and OpenBSD removed this; it's a no-op in their current implementation. */
- arc4random_addrandom((unsigned char*)buf,
- n>(size_t)INT_MAX ? INT_MAX : (int)n);
-#endif
-}
-
diff --git a/external/libxml2/CMakeLists.txt b/external/libxml2/CMakeLists.txt
new file mode 100644
index 00000000..a3983375
--- /dev/null
+++ b/external/libxml2/CMakeLists.txt
@@ -0,0 +1,50 @@
+cmake_minimum_required(VERSION 2.8.10)
+project( xml2 )
+
+if(MINGW OR UNIX)
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-attributes")
+endif()
+
+
+set(XML2_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+include_directories( "${XML2_SOURCE_DIR}" "${XML2_SOURCE_DIR}/include" "${CMAKE_INSTALL_PREFIX}/include")
+LINK_DIRECTORIES("${CMAKE_INSTALL_PREFIX}/lib")
+
+#for windows only must fix later
+include_directories("${XML2_SOURCE_DIR}/win32/VC10")
+
+file( GLOB XML2_HEADERS ${XML2_SOURCE_DIR}/*.h )
+file( GLOB XML2_SOURCES ${XML2_SOURCE_DIR}/*.c )
+
+file( GLOB API_HEADERS ${XML2_SOURCE_DIR}/include/libxml/*.h )
+
+#source_group( libxml FILES ${GLEW_HEADERS} )
+#source_group( src FILES ${GLEW_SOURCES} )
+#include_directories(${ANDROID_NDK}/platforms/android-14/arch-arm/usr/include/asm)
+#MESSAGE(${ANDROID_NDK}/platforms/android-14/arch-arm/usr/include)
+
+
+if(XML2_BUILD_SHARED)
+ set(XML2_LIBTYPE SHARED)
+else()
+ set(XML2_LIBTYPE STATIC)
+ add_definitions( "-DLIBXML_STATIC" )
+endif()
+
+add_library( xml2 ${XML2_LIBTYPE} ${XML2_SOURCES} ${XML2_HEADERS} )
+target_link_libraries(xml2 iconv ws2_32)
+
+set_target_properties(xml2 PROPERTIES PUBLIC_HEADER "${API_HEADERS}")
+
+set(BINDIR bin)
+set(BINCOMPONENT runtime)
+set(LIBDIR lib)
+set(LIBCOMPONENT dev)
+set(INCLUDEDIR include/libxml)
+set(INCLUDECOMPONENT dev)
+
+install(TARGETS xml2
+ RUNTIME DESTINATION ${BINDIR} COMPONENT ${BINCOMPONENT}
+ LIBRARY DESTINATION ${LIBDIR} COMPONENT ${LIBCOMPONENT}
+ ARCHIVE DESTINATION ${LIBDIR} COMPONENT ${LIBCOMPONENT}
+ PUBLIC_HEADER DESTINATION ${INCLUDEDIR} COMPONENT ${INCLUDECOMPONENT}) \ No newline at end of file
diff --git a/external/libxml2_android/jni/config.h b/external/libxml2/config.h
index bc910aee..bc910aee 100644
--- a/external/libxml2_android/jni/config.h
+++ b/external/libxml2/config.h
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlversion.h b/external/libxml2/xmlversion.h
index abf8d708..abf8d708 100644
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlversion.h
+++ b/external/libxml2/xmlversion.h
diff --git a/external/libxml2_android/jni/Android.mk b/external/libxml2_android/jni/Android.mk
deleted file mode 100644
index 5053e7d6..00000000
--- a/external/libxml2_android/jni/Android.mk
+++ /dev/null
@@ -1 +0,0 @@
-include $(call all-subdir-makefiles)
diff --git a/external/libxml2_android/jni/Application.mk b/external/libxml2_android/jni/Application.mk
deleted file mode 100644
index 7bb1628b..00000000
--- a/external/libxml2_android/jni/Application.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-APP_ABI := armeabi-v7a
-
-APP_STL := gnustl_shared
-APP_CPPFLAGS += -fexceptions -frtti -std=c++11 -Wno-deprecated-declarations
-NDK_TOOLCHAIN_VERSION := 4.9
-APP_PLATFORM := android-21 \ No newline at end of file
diff --git a/external/libxml2_android/jni/libxml2/Android.mk b/external/libxml2_android/jni/libxml2/Android.mk
deleted file mode 100755
index bb8846af..00000000
--- a/external/libxml2_android/jni/libxml2/Android.mk
+++ /dev/null
@@ -1,65 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-# common_SRC_FILES := $(notdir $(wildcard $(LOCAL_PATH)/*.c))
-
-# Ignore test files
-common_SRC_FILES := \
- buf.c \
- c14n.c \
- catalog.c \
- chvalid.c \
- debugXML.c \
- dict.c \
- DOCBparser.c \
- encoding.c \
- entities.c \
- error.c \
- globals.c \
- hash.c \
- HTMLparser.c \
- HTMLtree.c \
- legacy.c \
- list.c \
- nanoftp.c \
- nanohttp.c \
- parser.c \
- parserInternals.c \
- pattern.c \
- relaxng.c \
- SAX.c \
- SAX2.c \
- schematron.c \
- threads.c \
- tree.c \
- uri.c \
- valid.c \
- xinclude.c \
- xlink.c \
- xmlIO.c \
- xmlmemory.c \
- xmlmodule.c \
- xmlreader.c \
- xmlregexp.c \
- xmlsave.c \
- xmlschemas.c \
- xmlschemastypes.c \
- xmlstring.c \
- xmlunicode.c \
- xmlwriter.c \
- xpath.c \
- xpointer.c
-
-
-common_C_INCLUDES += $(LOCAL_PATH)/include
-
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(common_SRC_FILES)
-LOCAL_C_INCLUDES += $(common_C_INCLUDES)
-LOCAL_SHARED_LIBRARIES += $(common_SHARED_LIBRARIES)
-LOCAL_CFLAGS += -fvisibility=hidden -I$(LOCAL_C_INCLUDES)
-
-LOCAL_MODULE:= xml2
-
-include $(BUILD_STATIC_LIBRARY)
diff --git a/external/libxml2_android/jni/libxml2/DOCBparser.c b/external/libxml2_android/jni/libxml2/DOCBparser.c
deleted file mode 100644
index f12511b9..00000000
--- a/external/libxml2_android/jni/libxml2/DOCBparser.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * DOCBparser.c : an attempt to parse SGML Docbook documents
- *
- * This is deprecated !!!
- * Code removed with release 2.6.0 it was broken.
- * The doc are expect to be migrated to XML DocBook
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_DOCB_ENABLED
-
-#include <libxml/xmlerror.h>
-#include <libxml/DOCBparser.h>
-
-/**
- * docbEncodeEntities:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- * @quoteChar: the quote character to escape (' or ") or zero.
- *
- * Take a block of UTF-8 chars in and try to convert it to an ASCII
- * plus SGML entities block of chars out.
- *
- * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * as the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-int
-docbEncodeEntities(unsigned char *out ATTRIBUTE_UNUSED,
- int *outlen ATTRIBUTE_UNUSED,
- const unsigned char *in ATTRIBUTE_UNUSED,
- int *inlen ATTRIBUTE_UNUSED,
- int quoteChar ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbEncodeEntities() deprecated function reached\n");
- deprecated = 1;
- }
- return(-1);
-}
-
-/**
- * docbParseDocument:
- * @ctxt: an SGML parser context
- *
- * parse an SGML document (and build a tree if using the standard SAX
- * interface).
- *
- * Returns 0, -1 in case of error. the parser context is augmented
- * as a result of the parsing.
- */
-
-int
-docbParseDocument(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbParseDocument() deprecated function reached\n");
- deprecated = 1;
- }
- return (xmlParseDocument(ctxt));
-}
-
-/**
- * docbFreeParserCtxt:
- * @ctxt: an SGML parser context
- *
- * Free all the memory used by a parser context. However the parsed
- * document in ctxt->myDoc is not freed.
- */
-
-void
-docbFreeParserCtxt(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbFreeParserCtxt() deprecated function reached\n");
- deprecated = 1;
- }
- xmlFreeParserCtxt(ctxt);
-}
-
-/**
- * docbParseChunk:
- * @ctxt: an XML parser context
- * @chunk: an char array
- * @size: the size in byte of the chunk
- * @terminate: last chunk indicator
- *
- * Parse a Chunk of memory
- *
- * Returns zero if no error, the xmlParserErrors otherwise.
- */
-int
-docbParseChunk(docbParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- const char *chunk ATTRIBUTE_UNUSED,
- int size ATTRIBUTE_UNUSED,
- int terminate ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbParseChunk() deprecated function reached\n");
- deprecated = 1;
- }
-
- return (xmlParseChunk(ctxt, chunk, size, terminate));
-}
-
-/**
- * docbCreatePushParserCtxt:
- * @sax: a SAX handler
- * @user_data: The user data returned on SAX callbacks
- * @chunk: a pointer to an array of chars
- * @size: number of chars in the array
- * @filename: an optional file name or URI
- * @enc: an optional encoding
- *
- * Create a parser context for using the DocBook SGML parser in push mode
- * To allow content encoding detection, @size should be >= 4
- * The value of @filename is used for fetching external entities
- * and error/warning reports.
- *
- * Returns the new parser context or NULL
- */
-docbParserCtxtPtr
-docbCreatePushParserCtxt(docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
- void *user_data ATTRIBUTE_UNUSED,
- const char *chunk ATTRIBUTE_UNUSED,
- int size ATTRIBUTE_UNUSED,
- const char *filename ATTRIBUTE_UNUSED,
- xmlCharEncoding enc ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbParseChunk() deprecated function reached\n");
- deprecated = 1;
- }
-
- return(xmlCreatePushParserCtxt(sax, user_data, chunk, size, filename));
-}
-
-/**
- * docbSAXParseDoc:
- * @cur: a pointer to an array of xmlChar
- * @encoding: a free form C string describing the SGML document encoding, or NULL
- * @sax: the SAX handler block
- * @userData: if using SAX, this pointer will be provided on callbacks.
- *
- * parse an SGML in-memory document and build a tree.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * Returns the resulting document tree
- */
-
-docbDocPtr
-docbSAXParseDoc(xmlChar * cur ATTRIBUTE_UNUSED,
- const char *encoding ATTRIBUTE_UNUSED,
- docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
- void *userData ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbParseChunk() deprecated function reached\n");
- deprecated = 1;
- }
-
- return (xmlSAXParseMemoryWithData(sax, (const char *)cur,
- xmlStrlen((const xmlChar *) cur), 0, userData));
-}
-
-/**
- * docbParseDoc:
- * @cur: a pointer to an array of xmlChar
- * @encoding: a free form C string describing the SGML document encoding, or NULL
- *
- * parse an SGML in-memory document and build a tree.
- *
- * Returns the resulting document tree
- */
-
-docbDocPtr
-docbParseDoc(xmlChar * cur ATTRIBUTE_UNUSED,
- const char *encoding ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbParseChunk() deprecated function reached\n");
- deprecated = 1;
- }
-
- return (xmlParseDoc(cur));
-}
-
-
-/**
- * docbCreateFileParserCtxt:
- * @filename: the filename
- * @encoding: the SGML document encoding, or NULL
- *
- * Create a parser context for a file content.
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time.
- *
- * Returns the new parser context or NULL
- */
-docbParserCtxtPtr
-docbCreateFileParserCtxt(const char *filename ATTRIBUTE_UNUSED,
- const char *encoding ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbCreateFileParserCtxt() deprecated function reached\n");
- deprecated = 1;
- }
-
- return (xmlCreateFileParserCtxt(filename));
-}
-
-/**
- * docbSAXParseFile:
- * @filename: the filename
- * @encoding: a free form C string describing the SGML document encoding, or NULL
- * @sax: the SAX handler block
- * @userData: if using SAX, this pointer will be provided on callbacks.
- *
- * parse an SGML file and build a tree. Automatic support for ZLIB/Compress
- * compressed document is provided by default if found at compile-time.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * Returns the resulting document tree
- */
-
-docbDocPtr
-docbSAXParseFile(const char *filename ATTRIBUTE_UNUSED,
- const char *encoding ATTRIBUTE_UNUSED,
- docbSAXHandlerPtr sax ATTRIBUTE_UNUSED,
- void *userData ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbSAXParseFile() deprecated function reached\n");
- deprecated = 1;
- }
-
- return (xmlSAXParseFileWithData(sax, filename, 0, userData));
-}
-
-/**
- * docbParseFile:
- * @filename: the filename
- * @encoding: a free form C string describing document encoding, or NULL
- *
- * parse a Docbook SGML file and build a tree. Automatic support for
- * ZLIB/Compress compressed document is provided by default if found
- * at compile-time.
- *
- * Returns the resulting document tree
- */
-
-docbDocPtr
-docbParseFile(const char *filename ATTRIBUTE_UNUSED,
- const char *encoding ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "docbParseFile() deprecated function reached\n");
- deprecated = 1;
- }
-
- return (xmlParseFile(filename));
-}
-#define bottom_DOCBparser
-#include "elfgcchack.h"
-#endif /* LIBXML_DOCB_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/HTMLparser.c b/external/libxml2_android/jni/libxml2/HTMLparser.c
deleted file mode 100644
index d1395fa5..00000000
--- a/external/libxml2_android/jni/libxml2/HTMLparser.c
+++ /dev/null
@@ -1,7165 +0,0 @@
-/*
- * HTMLparser.c : an HTML 4.0 non-verifying parser
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_HTML_ENABLED
-
-#include <string.h>
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/entities.h>
-#include <libxml/encoding.h>
-#include <libxml/valid.h>
-#include <libxml/xmlIO.h>
-#include <libxml/globals.h>
-#include <libxml/uri.h>
-
-#include "buf.h"
-#include "enc.h"
-
-#define HTML_MAX_NAMELEN 1000
-#define HTML_PARSER_BIG_BUFFER_SIZE 1000
-#define HTML_PARSER_BUFFER_SIZE 100
-
-/* #define DEBUG */
-/* #define DEBUG_PUSH */
-
-static int htmlOmittedDefaultValue = 1;
-
-xmlChar * htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len,
- xmlChar end, xmlChar end2, xmlChar end3);
-static void htmlParseComment(htmlParserCtxtPtr ctxt);
-
-/************************************************************************
- * *
- * Some factorized error routines *
- * *
- ************************************************************************/
-
-/**
- * htmlErrMemory:
- * @ctxt: an HTML parser context
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-htmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL) {
- ctxt->errNo = XML_ERR_NO_MEMORY;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- }
- if (extra)
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
- else
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
- NULL, NULL, 0, 0, "Memory allocation failed\n");
-}
-
-/**
- * htmlParseErr:
- * @ctxt: an HTML parser context
- * @error: the error number
- * @msg: the error message
- * @str1: string infor
- * @str2: string infor
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-htmlParseErr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar *str1, const xmlChar *str2)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_HTML, error,
- XML_ERR_ERROR, NULL, 0,
- (const char *) str1, (const char *) str2,
- NULL, 0, 0,
- msg, str1, str2);
- if (ctxt != NULL)
- ctxt->wellFormed = 0;
-}
-
-/**
- * htmlParseErrInt:
- * @ctxt: an HTML parser context
- * @error: the error number
- * @msg: the error message
- * @val: integer info
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-htmlParseErrInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, int val)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_HTML, error,
- XML_ERR_ERROR, NULL, 0, NULL, NULL,
- NULL, val, 0, msg, val);
- if (ctxt != NULL)
- ctxt->wellFormed = 0;
-}
-
-/************************************************************************
- * *
- * Parser stacks related functions and macros *
- * *
- ************************************************************************/
-
-/**
- * htmlnamePush:
- * @ctxt: an HTML parser context
- * @value: the element name
- *
- * Pushes a new element name on top of the name stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-htmlnamePush(htmlParserCtxtPtr ctxt, const xmlChar * value)
-{
- if ((ctxt->html < 3) && (xmlStrEqual(value, BAD_CAST "head")))
- ctxt->html = 3;
- if ((ctxt->html < 10) && (xmlStrEqual(value, BAD_CAST "body")))
- ctxt->html = 10;
- if (ctxt->nameNr >= ctxt->nameMax) {
- ctxt->nameMax *= 2;
- ctxt->nameTab = (const xmlChar * *)
- xmlRealloc((xmlChar * *)ctxt->nameTab,
- ctxt->nameMax *
- sizeof(ctxt->nameTab[0]));
- if (ctxt->nameTab == NULL) {
- htmlErrMemory(ctxt, NULL);
- return (0);
- }
- }
- ctxt->nameTab[ctxt->nameNr] = value;
- ctxt->name = value;
- return (ctxt->nameNr++);
-}
-/**
- * htmlnamePop:
- * @ctxt: an HTML parser context
- *
- * Pops the top element name from the name stack
- *
- * Returns the name just removed
- */
-static const xmlChar *
-htmlnamePop(htmlParserCtxtPtr ctxt)
-{
- const xmlChar *ret;
-
- if (ctxt->nameNr <= 0)
- return (NULL);
- ctxt->nameNr--;
- if (ctxt->nameNr < 0)
- return (NULL);
- if (ctxt->nameNr > 0)
- ctxt->name = ctxt->nameTab[ctxt->nameNr - 1];
- else
- ctxt->name = NULL;
- ret = ctxt->nameTab[ctxt->nameNr];
- ctxt->nameTab[ctxt->nameNr] = NULL;
- return (ret);
-}
-
-/**
- * htmlNodeInfoPush:
- * @ctxt: an HTML parser context
- * @value: the node info
- *
- * Pushes a new element name on top of the node info stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-htmlNodeInfoPush(htmlParserCtxtPtr ctxt, htmlParserNodeInfo *value)
-{
- if (ctxt->nodeInfoNr >= ctxt->nodeInfoMax) {
- if (ctxt->nodeInfoMax == 0)
- ctxt->nodeInfoMax = 5;
- ctxt->nodeInfoMax *= 2;
- ctxt->nodeInfoTab = (htmlParserNodeInfo *)
- xmlRealloc((htmlParserNodeInfo *)ctxt->nodeInfoTab,
- ctxt->nodeInfoMax *
- sizeof(ctxt->nodeInfoTab[0]));
- if (ctxt->nodeInfoTab == NULL) {
- htmlErrMemory(ctxt, NULL);
- return (0);
- }
- }
- ctxt->nodeInfoTab[ctxt->nodeInfoNr] = *value;
- ctxt->nodeInfo = &ctxt->nodeInfoTab[ctxt->nodeInfoNr];
- return (ctxt->nodeInfoNr++);
-}
-
-/**
- * htmlNodeInfoPop:
- * @ctxt: an HTML parser context
- *
- * Pops the top element name from the node info stack
- *
- * Returns 0 in case of error, the pointer to NodeInfo otherwise
- */
-static htmlParserNodeInfo *
-htmlNodeInfoPop(htmlParserCtxtPtr ctxt)
-{
- if (ctxt->nodeInfoNr <= 0)
- return (NULL);
- ctxt->nodeInfoNr--;
- if (ctxt->nodeInfoNr < 0)
- return (NULL);
- if (ctxt->nodeInfoNr > 0)
- ctxt->nodeInfo = &ctxt->nodeInfoTab[ctxt->nodeInfoNr - 1];
- else
- ctxt->nodeInfo = NULL;
- return &ctxt->nodeInfoTab[ctxt->nodeInfoNr];
-}
-
-/*
- * Macros for accessing the content. Those should be used only by the parser,
- * and not exported.
- *
- * Dirty macros, i.e. one need to make assumption on the context to use them
- *
- * CUR_PTR return the current pointer to the xmlChar to be parsed.
- * CUR returns the current xmlChar value, i.e. a 8 bit value if compiled
- * in ISO-Latin or UTF-8, and the current 16 bit value if compiled
- * in UNICODE mode. This should be used internally by the parser
- * only to compare to ASCII values otherwise it would break when
- * running with UTF-8 encoding.
- * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
- * to compare on ASCII based substring.
- * UPP(n) returns the n'th next xmlChar converted to uppercase. Same as CUR
- * it should be used only to compare on ASCII based substring.
- * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
- * strings without newlines within the parser.
- *
- * Clean macros, not dependent of an ASCII context, expect UTF-8 encoding
- *
- * CURRENT Returns the current char value, with the full decoding of
- * UTF-8 if we are using this mode. It returns an int.
- * NEXT Skip to the next character, this does the proper decoding
- * in UTF-8 mode. It also pop-up unfinished entities on the fly.
- * NEXTL(l) Skip the current unicode character of l xmlChars long.
- * COPY(to) copy one char to *to, increment CUR_PTR and to accordingly
- */
-
-#define UPPER (toupper(*ctxt->input->cur))
-
-#define SKIP(val) ctxt->nbChars += (val),ctxt->input->cur += (val),ctxt->input->col+=(val)
-
-#define NXT(val) ctxt->input->cur[(val)]
-
-#define UPP(val) (toupper(ctxt->input->cur[(val)]))
-
-#define CUR_PTR ctxt->input->cur
-#define BASE_PTR ctxt->input->base
-
-#define SHRINK if ((ctxt->input->cur - ctxt->input->base > 2 * INPUT_CHUNK) && \
- (ctxt->input->end - ctxt->input->cur < 2 * INPUT_CHUNK)) \
- xmlParserInputShrink(ctxt->input)
-
-#define GROW if ((ctxt->progressive == 0) && \
- (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK)) \
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK)
-
-#define CURRENT ((int) (*ctxt->input->cur))
-
-#define SKIP_BLANKS htmlSkipBlankChars(ctxt)
-
-/* Inported from XML */
-
-/* #define CUR (ctxt->token ? ctxt->token : (int) (*ctxt->input->cur)) */
-#define CUR ((int) (*ctxt->input->cur))
-#define NEXT xmlNextChar(ctxt)
-
-#define RAW (ctxt->token ? -1 : (*ctxt->input->cur))
-
-
-#define NEXTL(l) do { \
- if (*(ctxt->input->cur) == '\n') { \
- ctxt->input->line++; ctxt->input->col = 1; \
- } else ctxt->input->col++; \
- ctxt->token = 0; ctxt->input->cur += l; ctxt->nbChars++; \
- } while (0)
-
-/************
- \
- if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \
- if (*ctxt->input->cur == '&') xmlParserHandleReference(ctxt);
- ************/
-
-#define CUR_CHAR(l) htmlCurrentChar(ctxt, &l)
-#define CUR_SCHAR(s, l) xmlStringCurrentChar(ctxt, s, &l)
-
-#define COPY_BUF(l,b,i,v) \
- if (l == 1) b[i++] = (xmlChar) v; \
- else i += xmlCopyChar(l,&b[i],v)
-
-/**
- * htmlFindEncoding:
- * @the HTML parser context
- *
- * Ty to find and encoding in the current data available in the input
- * buffer this is needed to try to switch to the proper encoding when
- * one face a character error.
- * That's an heuristic, since it's operating outside of parsing it could
- * try to use a meta which had been commented out, that's the reason it
- * should only be used in case of error, not as a default.
- *
- * Returns an encoding string or NULL if not found, the string need to
- * be freed
- */
-static xmlChar *
-htmlFindEncoding(xmlParserCtxtPtr ctxt) {
- const xmlChar *start, *cur, *end;
-
- if ((ctxt == NULL) || (ctxt->input == NULL) ||
- (ctxt->input->encoding != NULL) || (ctxt->input->buf == NULL) ||
- (ctxt->input->buf->encoder != NULL))
- return(NULL);
- if ((ctxt->input->cur == NULL) || (ctxt->input->end == NULL))
- return(NULL);
-
- start = ctxt->input->cur;
- end = ctxt->input->end;
- /* we also expect the input buffer to be zero terminated */
- if (*end != 0)
- return(NULL);
-
- cur = xmlStrcasestr(start, BAD_CAST "HTTP-EQUIV");
- if (cur == NULL)
- return(NULL);
- cur = xmlStrcasestr(cur, BAD_CAST "CONTENT");
- if (cur == NULL)
- return(NULL);
- cur = xmlStrcasestr(cur, BAD_CAST "CHARSET=");
- if (cur == NULL)
- return(NULL);
- cur += 8;
- start = cur;
- while (((*cur >= 'A') && (*cur <= 'Z')) ||
- ((*cur >= 'a') && (*cur <= 'z')) ||
- ((*cur >= '0') && (*cur <= '9')) ||
- (*cur == '-') || (*cur == '_') || (*cur == ':') || (*cur == '/'))
- cur++;
- if (cur == start)
- return(NULL);
- return(xmlStrndup(start, cur - start));
-}
-
-/**
- * htmlCurrentChar:
- * @ctxt: the HTML parser context
- * @len: pointer to the length of the char read
- *
- * The current char value, if using UTF-8 this may actually span multiple
- * bytes in the input buffer. Implement the end of line normalization:
- * 2.11 End-of-Line Handling
- * If the encoding is unspecified, in the case we find an ISO-Latin-1
- * char, then the encoding converter is plugged in automatically.
- *
- * Returns the current char value and its length
- */
-
-static int
-htmlCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
- if (ctxt->instate == XML_PARSER_EOF)
- return(0);
-
- if (ctxt->token != 0) {
- *len = 0;
- return(ctxt->token);
- }
- if (ctxt->charset == XML_CHAR_ENCODING_UTF8) {
- /*
- * We are supposed to handle UTF8, check it's valid
- * From rfc2044: encoding of the Unicode values on UTF-8:
- *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary)
- * 0000 0000-0000 007F 0xxxxxxx
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
- *
- * Check for the 0x110000 limit too
- */
- const unsigned char *cur = ctxt->input->cur;
- unsigned char c;
- unsigned int val;
-
- c = *cur;
- if (c & 0x80) {
- if (cur[1] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if ((cur[1] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xe0) == 0xe0) {
-
- if (cur[2] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if ((cur[2] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xf0) == 0xf0) {
- if (cur[3] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if (((c & 0xf8) != 0xf0) ||
- ((cur[3] & 0xc0) != 0x80))
- goto encoding_error;
- /* 4-byte code */
- *len = 4;
- val = (cur[0] & 0x7) << 18;
- val |= (cur[1] & 0x3f) << 12;
- val |= (cur[2] & 0x3f) << 6;
- val |= cur[3] & 0x3f;
- } else {
- /* 3-byte code */
- *len = 3;
- val = (cur[0] & 0xf) << 12;
- val |= (cur[1] & 0x3f) << 6;
- val |= cur[2] & 0x3f;
- }
- } else {
- /* 2-byte code */
- *len = 2;
- val = (cur[0] & 0x1f) << 6;
- val |= cur[1] & 0x3f;
- }
- if (!IS_CHAR(val)) {
- htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x%X out of allowed range\n", val);
- }
- return(val);
- } else {
- if ((*ctxt->input->cur == 0) &&
- (ctxt->input->cur < ctxt->input->end)) {
- htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x%X out of allowed range\n", 0);
- *len = 1;
- return(' ');
- }
- /* 1-byte code */
- *len = 1;
- return((int) *ctxt->input->cur);
- }
- }
- /*
- * Assume it's a fixed length encoding (1) with
- * a compatible encoding for the ASCII set, since
- * XML constructs only use < 128 chars
- */
- *len = 1;
- if ((int) *ctxt->input->cur < 0x80)
- return((int) *ctxt->input->cur);
-
- /*
- * Humm this is bad, do an automatic flow conversion
- */
- {
- xmlChar * guess;
- xmlCharEncodingHandlerPtr handler;
-
- guess = htmlFindEncoding(ctxt);
- if (guess == NULL) {
- xmlSwitchEncoding(ctxt, XML_CHAR_ENCODING_8859_1);
- } else {
- if (ctxt->input->encoding != NULL)
- xmlFree((xmlChar *) ctxt->input->encoding);
- ctxt->input->encoding = guess;
- handler = xmlFindCharEncodingHandler((const char *) guess);
- if (handler != NULL) {
- xmlSwitchToEncoding(ctxt, handler);
- } else {
- htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
- "Unsupported encoding %s", guess, NULL);
- }
- }
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- }
-
- return(xmlCurrentChar(ctxt, len));
-
-encoding_error:
- /*
- * If we detect an UTF8 error that probably mean that the
- * input encoding didn't get properly advertized in the
- * declaration header. Report the error and switch the encoding
- * to ISO-Latin-1 (if you don't like this policy, just declare the
- * encoding !)
- */
- {
- char buffer[150];
-
- if (ctxt->input->end - ctxt->input->cur >= 4) {
- snprintf(buffer, 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- ctxt->input->cur[0], ctxt->input->cur[1],
- ctxt->input->cur[2], ctxt->input->cur[3]);
- } else {
- snprintf(buffer, 149, "Bytes: 0x%02X\n", ctxt->input->cur[0]);
- }
- htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
- "Input is not proper UTF-8, indicate encoding !\n",
- BAD_CAST buffer, NULL);
- }
-
- ctxt->charset = XML_CHAR_ENCODING_8859_1;
- *len = 1;
- return((int) *ctxt->input->cur);
-}
-
-/**
- * htmlSkipBlankChars:
- * @ctxt: the HTML parser context
- *
- * skip all blanks character found at that point in the input streams.
- *
- * Returns the number of space chars skipped
- */
-
-static int
-htmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
- int res = 0;
-
- while (IS_BLANK_CH(*(ctxt->input->cur))) {
- if ((*ctxt->input->cur == 0) &&
- (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) {
- xmlPopInput(ctxt);
- } else {
- if (*(ctxt->input->cur) == '\n') {
- ctxt->input->line++; ctxt->input->col = 1;
- } else ctxt->input->col++;
- ctxt->input->cur++;
- ctxt->nbChars++;
- if (*ctxt->input->cur == 0)
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- }
- res++;
- }
- return(res);
-}
-
-
-
-/************************************************************************
- * *
- * The list of HTML elements and their properties *
- * *
- ************************************************************************/
-
-/*
- * Start Tag: 1 means the start tag can be ommited
- * End Tag: 1 means the end tag can be ommited
- * 2 means it's forbidden (empty elements)
- * 3 means the tag is stylistic and should be closed easily
- * Depr: this element is deprecated
- * DTD: 1 means that this element is valid only in the Loose DTD
- * 2 means that this element is valid only in the Frameset DTD
- *
- * Name,Start Tag,End Tag,Save End,Empty,Deprecated,DTD,inline,Description
- , subElements , impliedsubelt , Attributes, userdata
- */
-
-/* Definitions and a couple of vars for HTML Elements */
-
-#define FONTSTYLE "tt", "i", "b", "u", "s", "strike", "big", "small"
-#define NB_FONTSTYLE 8
-#define PHRASE "em", "strong", "dfn", "code", "samp", "kbd", "var", "cite", "abbr", "acronym"
-#define NB_PHRASE 10
-#define SPECIAL "a", "img", "applet", "embed", "object", "font", "basefont", "br", "script", "map", "q", "sub", "sup", "span", "bdo", "iframe"
-#define NB_SPECIAL 16
-#define INLINE FONTSTYLE, PHRASE, SPECIAL, FORMCTRL
-#define NB_INLINE NB_PCDATA + NB_FONTSTYLE + NB_PHRASE + NB_SPECIAL + NB_FORMCTRL
-#define BLOCK HEADING, LIST, "pre", "p", "dl", "div", "center", "noscript", "noframes", "blockquote", "form", "isindex", "hr", "table", "fieldset", "address"
-#define NB_BLOCK NB_HEADING + NB_LIST + 14
-#define FORMCTRL "input", "select", "textarea", "label", "button"
-#define NB_FORMCTRL 5
-#define PCDATA
-#define NB_PCDATA 0
-#define HEADING "h1", "h2", "h3", "h4", "h5", "h6"
-#define NB_HEADING 6
-#define LIST "ul", "ol", "dir", "menu"
-#define NB_LIST 4
-#define MODIFIER
-#define NB_MODIFIER 0
-#define FLOW BLOCK,INLINE
-#define NB_FLOW NB_BLOCK + NB_INLINE
-#define EMPTY NULL
-
-
-static const char* const html_flow[] = { FLOW, NULL } ;
-static const char* const html_inline[] = { INLINE, NULL } ;
-
-/* placeholders: elts with content but no subelements */
-static const char* const html_pcdata[] = { NULL } ;
-#define html_cdata html_pcdata
-
-
-/* ... and for HTML Attributes */
-
-#define COREATTRS "id", "class", "style", "title"
-#define NB_COREATTRS 4
-#define I18N "lang", "dir"
-#define NB_I18N 2
-#define EVENTS "onclick", "ondblclick", "onmousedown", "onmouseup", "onmouseover", "onmouseout", "onkeypress", "onkeydown", "onkeyup"
-#define NB_EVENTS 9
-#define ATTRS COREATTRS,I18N,EVENTS
-#define NB_ATTRS NB_NB_COREATTRS + NB_I18N + NB_EVENTS
-#define CELLHALIGN "align", "char", "charoff"
-#define NB_CELLHALIGN 3
-#define CELLVALIGN "valign"
-#define NB_CELLVALIGN 1
-
-static const char* const html_attrs[] = { ATTRS, NULL } ;
-static const char* const core_i18n_attrs[] = { COREATTRS, I18N, NULL } ;
-static const char* const core_attrs[] = { COREATTRS, NULL } ;
-static const char* const i18n_attrs[] = { I18N, NULL } ;
-
-
-/* Other declarations that should go inline ... */
-static const char* const a_attrs[] = { ATTRS, "charset", "type", "name",
- "href", "hreflang", "rel", "rev", "accesskey", "shape", "coords",
- "tabindex", "onfocus", "onblur", NULL } ;
-static const char* const target_attr[] = { "target", NULL } ;
-static const char* const rows_cols_attr[] = { "rows", "cols", NULL } ;
-static const char* const alt_attr[] = { "alt", NULL } ;
-static const char* const src_alt_attrs[] = { "src", "alt", NULL } ;
-static const char* const href_attrs[] = { "href", NULL } ;
-static const char* const clear_attrs[] = { "clear", NULL } ;
-static const char* const inline_p[] = { INLINE, "p", NULL } ;
-
-static const char* const flow_param[] = { FLOW, "param", NULL } ;
-static const char* const applet_attrs[] = { COREATTRS , "codebase",
- "archive", "alt", "name", "height", "width", "align",
- "hspace", "vspace", NULL } ;
-static const char* const area_attrs[] = { "shape", "coords", "href", "nohref",
- "tabindex", "accesskey", "onfocus", "onblur", NULL } ;
-static const char* const basefont_attrs[] =
- { "id", "size", "color", "face", NULL } ;
-static const char* const quote_attrs[] = { ATTRS, "cite", NULL } ;
-static const char* const body_contents[] = { FLOW, "ins", "del", NULL } ;
-static const char* const body_attrs[] = { ATTRS, "onload", "onunload", NULL } ;
-static const char* const body_depr[] = { "background", "bgcolor", "text",
- "link", "vlink", "alink", NULL } ;
-static const char* const button_attrs[] = { ATTRS, "name", "value", "type",
- "disabled", "tabindex", "accesskey", "onfocus", "onblur", NULL } ;
-
-
-static const char* const col_attrs[] = { ATTRS, "span", "width", CELLHALIGN, CELLVALIGN, NULL } ;
-static const char* const col_elt[] = { "col", NULL } ;
-static const char* const edit_attrs[] = { ATTRS, "datetime", "cite", NULL } ;
-static const char* const compact_attrs[] = { ATTRS, "compact", NULL } ;
-static const char* const dl_contents[] = { "dt", "dd", NULL } ;
-static const char* const compact_attr[] = { "compact", NULL } ;
-static const char* const label_attr[] = { "label", NULL } ;
-static const char* const fieldset_contents[] = { FLOW, "legend" } ;
-static const char* const font_attrs[] = { COREATTRS, I18N, "size", "color", "face" , NULL } ;
-static const char* const form_contents[] = { HEADING, LIST, INLINE, "pre", "p", "div", "center", "noscript", "noframes", "blockquote", "isindex", "hr", "table", "fieldset", "address", NULL } ;
-static const char* const form_attrs[] = { ATTRS, "method", "enctype", "accept", "name", "onsubmit", "onreset", "accept-charset", NULL } ;
-static const char* const frame_attrs[] = { COREATTRS, "longdesc", "name", "src", "frameborder", "marginwidth", "marginheight", "noresize", "scrolling" , NULL } ;
-static const char* const frameset_attrs[] = { COREATTRS, "rows", "cols", "onload", "onunload", NULL } ;
-static const char* const frameset_contents[] = { "frameset", "frame", "noframes", NULL } ;
-static const char* const head_attrs[] = { I18N, "profile", NULL } ;
-static const char* const head_contents[] = { "title", "isindex", "base", "script", "style", "meta", "link", "object", NULL } ;
-static const char* const hr_depr[] = { "align", "noshade", "size", "width", NULL } ;
-static const char* const version_attr[] = { "version", NULL } ;
-static const char* const html_content[] = { "head", "body", "frameset", NULL } ;
-static const char* const iframe_attrs[] = { COREATTRS, "longdesc", "name", "src", "frameborder", "marginwidth", "marginheight", "scrolling", "align", "height", "width", NULL } ;
-static const char* const img_attrs[] = { ATTRS, "longdesc", "name", "height", "width", "usemap", "ismap", NULL } ;
-static const char* const embed_attrs[] = { COREATTRS, "align", "alt", "border", "code", "codebase", "frameborder", "height", "hidden", "hspace", "name", "palette", "pluginspace", "pluginurl", "src", "type", "units", "vspace", "width", NULL } ;
-static const char* const input_attrs[] = { ATTRS, "type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "ismap", "tabindex", "accesskey", "onfocus", "onblur", "onselect", "onchange", "accept", NULL } ;
-static const char* const prompt_attrs[] = { COREATTRS, I18N, "prompt", NULL } ;
-static const char* const label_attrs[] = { ATTRS, "for", "accesskey", "onfocus", "onblur", NULL } ;
-static const char* const legend_attrs[] = { ATTRS, "accesskey", NULL } ;
-static const char* const align_attr[] = { "align", NULL } ;
-static const char* const link_attrs[] = { ATTRS, "charset", "href", "hreflang", "type", "rel", "rev", "media", NULL } ;
-static const char* const map_contents[] = { BLOCK, "area", NULL } ;
-static const char* const name_attr[] = { "name", NULL } ;
-static const char* const action_attr[] = { "action", NULL } ;
-static const char* const blockli_elt[] = { BLOCK, "li", NULL } ;
-static const char* const meta_attrs[] = { I18N, "http-equiv", "name", "scheme", "charset", NULL } ;
-static const char* const content_attr[] = { "content", NULL } ;
-static const char* const type_attr[] = { "type", NULL } ;
-static const char* const noframes_content[] = { "body", FLOW MODIFIER, NULL } ;
-static const char* const object_contents[] = { FLOW, "param", NULL } ;
-static const char* const object_attrs[] = { ATTRS, "declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex", NULL } ;
-static const char* const object_depr[] = { "align", "border", "hspace", "vspace", NULL } ;
-static const char* const ol_attrs[] = { "type", "compact", "start", NULL} ;
-static const char* const option_elt[] = { "option", NULL } ;
-static const char* const optgroup_attrs[] = { ATTRS, "disabled", NULL } ;
-static const char* const option_attrs[] = { ATTRS, "disabled", "label", "selected", "value", NULL } ;
-static const char* const param_attrs[] = { "id", "value", "valuetype", "type", NULL } ;
-static const char* const width_attr[] = { "width", NULL } ;
-static const char* const pre_content[] = { PHRASE, "tt", "i", "b", "u", "s", "strike", "a", "br", "script", "map", "q", "span", "bdo", "iframe", NULL } ;
-static const char* const script_attrs[] = { "charset", "src", "defer", "event", "for", NULL } ;
-static const char* const language_attr[] = { "language", NULL } ;
-static const char* const select_content[] = { "optgroup", "option", NULL } ;
-static const char* const select_attrs[] = { ATTRS, "name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange", NULL } ;
-static const char* const style_attrs[] = { I18N, "media", "title", NULL } ;
-static const char* const table_attrs[] = { ATTRS, "summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding", "datapagesize", NULL } ;
-static const char* const table_depr[] = { "align", "bgcolor", NULL } ;
-static const char* const table_contents[] = { "caption", "col", "colgroup", "thead", "tfoot", "tbody", "tr", NULL} ;
-static const char* const tr_elt[] = { "tr", NULL } ;
-static const char* const talign_attrs[] = { ATTRS, CELLHALIGN, CELLVALIGN, NULL} ;
-static const char* const th_td_depr[] = { "nowrap", "bgcolor", "width", "height", NULL } ;
-static const char* const th_td_attr[] = { ATTRS, "abbr", "axis", "headers", "scope", "rowspan", "colspan", CELLHALIGN, CELLVALIGN, NULL } ;
-static const char* const textarea_attrs[] = { ATTRS, "name", "disabled", "readonly", "tabindex", "accesskey", "onfocus", "onblur", "onselect", "onchange", NULL } ;
-static const char* const tr_contents[] = { "th", "td", NULL } ;
-static const char* const bgcolor_attr[] = { "bgcolor", NULL } ;
-static const char* const li_elt[] = { "li", NULL } ;
-static const char* const ul_depr[] = { "type", "compact", NULL} ;
-static const char* const dir_attr[] = { "dir", NULL} ;
-
-#define DECL (const char**)
-
-static const htmlElemDesc
-html40ElementTable[] = {
-{ "a", 0, 0, 0, 0, 0, 0, 1, "anchor ",
- DECL html_inline , NULL , DECL a_attrs , DECL target_attr, NULL
-},
-{ "abbr", 0, 0, 0, 0, 0, 0, 1, "abbreviated form",
- DECL html_inline , NULL , DECL html_attrs, NULL, NULL
-},
-{ "acronym", 0, 0, 0, 0, 0, 0, 1, "",
- DECL html_inline , NULL , DECL html_attrs, NULL, NULL
-},
-{ "address", 0, 0, 0, 0, 0, 0, 0, "information on author ",
- DECL inline_p , NULL , DECL html_attrs, NULL, NULL
-},
-{ "applet", 0, 0, 0, 0, 1, 1, 2, "java applet ",
- DECL flow_param , NULL , NULL , DECL applet_attrs, NULL
-},
-{ "area", 0, 2, 2, 1, 0, 0, 0, "client-side image map area ",
- EMPTY , NULL , DECL area_attrs , DECL target_attr, DECL alt_attr
-},
-{ "b", 0, 3, 0, 0, 0, 0, 1, "bold text style",
- DECL html_inline , NULL , DECL html_attrs, NULL, NULL
-},
-{ "base", 0, 2, 2, 1, 0, 0, 0, "document base uri ",
- EMPTY , NULL , NULL , DECL target_attr, DECL href_attrs
-},
-{ "basefont", 0, 2, 2, 1, 1, 1, 1, "base font size " ,
- EMPTY , NULL , NULL, DECL basefont_attrs, NULL
-},
-{ "bdo", 0, 0, 0, 0, 0, 0, 1, "i18n bidi over-ride ",
- DECL html_inline , NULL , DECL core_i18n_attrs, NULL, DECL dir_attr
-},
-{ "big", 0, 3, 0, 0, 0, 0, 1, "large text style",
- DECL html_inline , NULL , DECL html_attrs, NULL, NULL
-},
-{ "blockquote", 0, 0, 0, 0, 0, 0, 0, "long quotation ",
- DECL html_flow , NULL , DECL quote_attrs , NULL, NULL
-},
-{ "body", 1, 1, 0, 0, 0, 0, 0, "document body ",
- DECL body_contents , "div" , DECL body_attrs, DECL body_depr, NULL
-},
-{ "br", 0, 2, 2, 1, 0, 0, 1, "forced line break ",
- EMPTY , NULL , DECL core_attrs, DECL clear_attrs , NULL
-},
-{ "button", 0, 0, 0, 0, 0, 0, 2, "push button ",
- DECL html_flow MODIFIER , NULL , DECL button_attrs, NULL, NULL
-},
-{ "caption", 0, 0, 0, 0, 0, 0, 0, "table caption ",
- DECL html_inline , NULL , DECL html_attrs, NULL, NULL
-},
-{ "center", 0, 3, 0, 0, 1, 1, 0, "shorthand for div align=center ",
- DECL html_flow , NULL , NULL, DECL html_attrs, NULL
-},
-{ "cite", 0, 0, 0, 0, 0, 0, 1, "citation",
- DECL html_inline , NULL , DECL html_attrs, NULL, NULL
-},
-{ "code", 0, 0, 0, 0, 0, 0, 1, "computer code fragment",
- DECL html_inline , NULL , DECL html_attrs, NULL, NULL
-},
-{ "col", 0, 2, 2, 1, 0, 0, 0, "table column ",
- EMPTY , NULL , DECL col_attrs , NULL, NULL
-},
-{ "colgroup", 0, 1, 0, 0, 0, 0, 0, "table column group ",
- DECL col_elt , "col" , DECL col_attrs , NULL, NULL
-},
-{ "dd", 0, 1, 0, 0, 0, 0, 0, "definition description ",
- DECL html_flow , NULL , DECL html_attrs, NULL, NULL
-},
-{ "del", 0, 0, 0, 0, 0, 0, 2, "deleted text ",
- DECL html_flow , NULL , DECL edit_attrs , NULL, NULL
-},
-{ "dfn", 0, 0, 0, 0, 0, 0, 1, "instance definition",
- DECL html_inline , NULL , DECL html_attrs, NULL, NULL
-},
-{ "dir", 0, 0, 0, 0, 1, 1, 0, "directory list",
- DECL blockli_elt, "li" , NULL, DECL compact_attrs, NULL
-},
-{ "div", 0, 0, 0, 0, 0, 0, 0, "generic language/style container",
- DECL html_flow, NULL, DECL html_attrs, DECL align_attr, NULL
-},
-{ "dl", 0, 0, 0, 0, 0, 0, 0, "definition list ",
- DECL dl_contents , "dd" , DECL html_attrs, DECL compact_attr, NULL
-},
-{ "dt", 0, 1, 0, 0, 0, 0, 0, "definition term ",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "em", 0, 3, 0, 0, 0, 0, 1, "emphasis",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "embed", 0, 1, 0, 0, 1, 1, 1, "generic embedded object ",
- EMPTY, NULL, DECL embed_attrs, NULL, NULL
-},
-{ "fieldset", 0, 0, 0, 0, 0, 0, 0, "form control group ",
- DECL fieldset_contents , NULL, DECL html_attrs, NULL, NULL
-},
-{ "font", 0, 3, 0, 0, 1, 1, 1, "local change to font ",
- DECL html_inline, NULL, NULL, DECL font_attrs, NULL
-},
-{ "form", 0, 0, 0, 0, 0, 0, 0, "interactive form ",
- DECL form_contents, "fieldset", DECL form_attrs , DECL target_attr, DECL action_attr
-},
-{ "frame", 0, 2, 2, 1, 0, 2, 0, "subwindow " ,
- EMPTY, NULL, NULL, DECL frame_attrs, NULL
-},
-{ "frameset", 0, 0, 0, 0, 0, 2, 0, "window subdivision" ,
- DECL frameset_contents, "noframes" , NULL , DECL frameset_attrs, NULL
-},
-{ "h1", 0, 0, 0, 0, 0, 0, 0, "heading ",
- DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
-},
-{ "h2", 0, 0, 0, 0, 0, 0, 0, "heading ",
- DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
-},
-{ "h3", 0, 0, 0, 0, 0, 0, 0, "heading ",
- DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
-},
-{ "h4", 0, 0, 0, 0, 0, 0, 0, "heading ",
- DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
-},
-{ "h5", 0, 0, 0, 0, 0, 0, 0, "heading ",
- DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
-},
-{ "h6", 0, 0, 0, 0, 0, 0, 0, "heading ",
- DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
-},
-{ "head", 1, 1, 0, 0, 0, 0, 0, "document head ",
- DECL head_contents, NULL, DECL head_attrs, NULL, NULL
-},
-{ "hr", 0, 2, 2, 1, 0, 0, 0, "horizontal rule " ,
- EMPTY, NULL, DECL html_attrs, DECL hr_depr, NULL
-},
-{ "html", 1, 1, 0, 0, 0, 0, 0, "document root element ",
- DECL html_content , NULL , DECL i18n_attrs, DECL version_attr, NULL
-},
-{ "i", 0, 3, 0, 0, 0, 0, 1, "italic text style",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "iframe", 0, 0, 0, 0, 0, 1, 2, "inline subwindow ",
- DECL html_flow, NULL, NULL, DECL iframe_attrs, NULL
-},
-{ "img", 0, 2, 2, 1, 0, 0, 1, "embedded image ",
- EMPTY, NULL, DECL img_attrs, DECL align_attr, DECL src_alt_attrs
-},
-{ "input", 0, 2, 2, 1, 0, 0, 1, "form control ",
- EMPTY, NULL, DECL input_attrs , DECL align_attr, NULL
-},
-{ "ins", 0, 0, 0, 0, 0, 0, 2, "inserted text",
- DECL html_flow, NULL, DECL edit_attrs, NULL, NULL
-},
-{ "isindex", 0, 2, 2, 1, 1, 1, 0, "single line prompt ",
- EMPTY, NULL, NULL, DECL prompt_attrs, NULL
-},
-{ "kbd", 0, 0, 0, 0, 0, 0, 1, "text to be entered by the user",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "label", 0, 0, 0, 0, 0, 0, 1, "form field label text ",
- DECL html_inline MODIFIER, NULL, DECL label_attrs , NULL, NULL
-},
-{ "legend", 0, 0, 0, 0, 0, 0, 0, "fieldset legend ",
- DECL html_inline, NULL, DECL legend_attrs , DECL align_attr, NULL
-},
-{ "li", 0, 1, 1, 0, 0, 0, 0, "list item ",
- DECL html_flow, NULL, DECL html_attrs, NULL, NULL
-},
-{ "link", 0, 2, 2, 1, 0, 0, 0, "a media-independent link ",
- EMPTY, NULL, DECL link_attrs, DECL target_attr, NULL
-},
-{ "map", 0, 0, 0, 0, 0, 0, 2, "client-side image map ",
- DECL map_contents , NULL, DECL html_attrs , NULL, DECL name_attr
-},
-{ "menu", 0, 0, 0, 0, 1, 1, 0, "menu list ",
- DECL blockli_elt , NULL, NULL, DECL compact_attrs, NULL
-},
-{ "meta", 0, 2, 2, 1, 0, 0, 0, "generic metainformation ",
- EMPTY, NULL, DECL meta_attrs , NULL , DECL content_attr
-},
-{ "noframes", 0, 0, 0, 0, 0, 2, 0, "alternate content container for non frame-based rendering ",
- DECL noframes_content, "body" , DECL html_attrs, NULL, NULL
-},
-{ "noscript", 0, 0, 0, 0, 0, 0, 0, "alternate content container for non script-based rendering ",
- DECL html_flow, "div", DECL html_attrs, NULL, NULL
-},
-{ "object", 0, 0, 0, 0, 0, 0, 2, "generic embedded object ",
- DECL object_contents , "div" , DECL object_attrs, DECL object_depr, NULL
-},
-{ "ol", 0, 0, 0, 0, 0, 0, 0, "ordered list ",
- DECL li_elt , "li" , DECL html_attrs, DECL ol_attrs, NULL
-},
-{ "optgroup", 0, 0, 0, 0, 0, 0, 0, "option group ",
- DECL option_elt , "option", DECL optgroup_attrs, NULL, DECL label_attr
-},
-{ "option", 0, 1, 0, 0, 0, 0, 0, "selectable choice " ,
- DECL html_pcdata, NULL, DECL option_attrs, NULL, NULL
-},
-{ "p", 0, 1, 0, 0, 0, 0, 0, "paragraph ",
- DECL html_inline, NULL, DECL html_attrs, DECL align_attr, NULL
-},
-{ "param", 0, 2, 2, 1, 0, 0, 0, "named property value ",
- EMPTY, NULL, DECL param_attrs, NULL, DECL name_attr
-},
-{ "pre", 0, 0, 0, 0, 0, 0, 0, "preformatted text ",
- DECL pre_content, NULL, DECL html_attrs, DECL width_attr, NULL
-},
-{ "q", 0, 0, 0, 0, 0, 0, 1, "short inline quotation ",
- DECL html_inline, NULL, DECL quote_attrs, NULL, NULL
-},
-{ "s", 0, 3, 0, 0, 1, 1, 1, "strike-through text style",
- DECL html_inline, NULL, NULL, DECL html_attrs, NULL
-},
-{ "samp", 0, 0, 0, 0, 0, 0, 1, "sample program output, scripts, etc.",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "script", 0, 0, 0, 0, 0, 0, 2, "script statements ",
- DECL html_cdata, NULL, DECL script_attrs, DECL language_attr, DECL type_attr
-},
-{ "select", 0, 0, 0, 0, 0, 0, 1, "option selector ",
- DECL select_content, NULL, DECL select_attrs, NULL, NULL
-},
-{ "small", 0, 3, 0, 0, 0, 0, 1, "small text style",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "span", 0, 0, 0, 0, 0, 0, 1, "generic language/style container ",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "strike", 0, 3, 0, 0, 1, 1, 1, "strike-through text",
- DECL html_inline, NULL, NULL, DECL html_attrs, NULL
-},
-{ "strong", 0, 3, 0, 0, 0, 0, 1, "strong emphasis",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "style", 0, 0, 0, 0, 0, 0, 0, "style info ",
- DECL html_cdata, NULL, DECL style_attrs, NULL, DECL type_attr
-},
-{ "sub", 0, 3, 0, 0, 0, 0, 1, "subscript",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "sup", 0, 3, 0, 0, 0, 0, 1, "superscript ",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "table", 0, 0, 0, 0, 0, 0, 0, "",
- DECL table_contents , "tr" , DECL table_attrs , DECL table_depr, NULL
-},
-{ "tbody", 1, 0, 0, 0, 0, 0, 0, "table body ",
- DECL tr_elt , "tr" , DECL talign_attrs, NULL, NULL
-},
-{ "td", 0, 0, 0, 0, 0, 0, 0, "table data cell",
- DECL html_flow, NULL, DECL th_td_attr, DECL th_td_depr, NULL
-},
-{ "textarea", 0, 0, 0, 0, 0, 0, 1, "multi-line text field ",
- DECL html_pcdata, NULL, DECL textarea_attrs, NULL, DECL rows_cols_attr
-},
-{ "tfoot", 0, 1, 0, 0, 0, 0, 0, "table footer ",
- DECL tr_elt , "tr" , DECL talign_attrs, NULL, NULL
-},
-{ "th", 0, 1, 0, 0, 0, 0, 0, "table header cell",
- DECL html_flow, NULL, DECL th_td_attr, DECL th_td_depr, NULL
-},
-{ "thead", 0, 1, 0, 0, 0, 0, 0, "table header ",
- DECL tr_elt , "tr" , DECL talign_attrs, NULL, NULL
-},
-{ "title", 0, 0, 0, 0, 0, 0, 0, "document title ",
- DECL html_pcdata, NULL, DECL i18n_attrs, NULL, NULL
-},
-{ "tr", 0, 0, 0, 0, 0, 0, 0, "table row ",
- DECL tr_contents , "td" , DECL talign_attrs, DECL bgcolor_attr, NULL
-},
-{ "tt", 0, 3, 0, 0, 0, 0, 1, "teletype or monospaced text style",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-},
-{ "u", 0, 3, 0, 0, 1, 1, 1, "underlined text style",
- DECL html_inline, NULL, NULL, DECL html_attrs, NULL
-},
-{ "ul", 0, 0, 0, 0, 0, 0, 0, "unordered list ",
- DECL li_elt , "li" , DECL html_attrs, DECL ul_depr, NULL
-},
-{ "var", 0, 0, 0, 0, 0, 0, 1, "instance of a variable or program argument",
- DECL html_inline, NULL, DECL html_attrs, NULL, NULL
-}
-};
-
-/*
- * start tags that imply the end of current element
- */
-static const char * const htmlStartClose[] = {
-"form", "form", "p", "hr", "h1", "h2", "h3", "h4", "h5", "h6",
- "dl", "ul", "ol", "menu", "dir", "address", "pre",
- "listing", "xmp", "head", NULL,
-"head", "p", NULL,
-"title", "p", NULL,
-"body", "head", "style", "link", "title", "p", NULL,
-"frameset", "head", "style", "link", "title", "p", NULL,
-"li", "p", "h1", "h2", "h3", "h4", "h5", "h6", "dl", "address",
- "pre", "listing", "xmp", "head", "li", NULL,
-"hr", "p", "head", NULL,
-"h1", "p", "head", NULL,
-"h2", "p", "head", NULL,
-"h3", "p", "head", NULL,
-"h4", "p", "head", NULL,
-"h5", "p", "head", NULL,
-"h6", "p", "head", NULL,
-"dir", "p", "head", NULL,
-"address", "p", "head", "ul", NULL,
-"pre", "p", "head", "ul", NULL,
-"listing", "p", "head", NULL,
-"xmp", "p", "head", NULL,
-"blockquote", "p", "head", NULL,
-"dl", "p", "dt", "menu", "dir", "address", "pre", "listing",
- "xmp", "head", NULL,
-"dt", "p", "menu", "dir", "address", "pre", "listing", "xmp",
- "head", "dd", NULL,
-"dd", "p", "menu", "dir", "address", "pre", "listing", "xmp",
- "head", "dt", NULL,
-"ul", "p", "head", "ol", "menu", "dir", "address", "pre",
- "listing", "xmp", NULL,
-"ol", "p", "head", "ul", NULL,
-"menu", "p", "head", "ul", NULL,
-"p", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6", FONTSTYLE, NULL,
-"div", "p", "head", NULL,
-"noscript", "p", NULL,
-"center", "font", "b", "i", "p", "head", NULL,
-"a", "a", "head", NULL,
-"caption", "p", NULL,
-"colgroup", "caption", "colgroup", "col", "p", NULL,
-"col", "caption", "col", "p", NULL,
-"table", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6", "pre",
- "listing", "xmp", "a", NULL,
-"th", "th", "td", "p", "span", "font", "a", "b", "i", "u", NULL,
-"td", "th", "td", "p", "span", "font", "a", "b", "i", "u", NULL,
-"tr", "th", "td", "tr", "caption", "col", "colgroup", "p", NULL,
-"thead", "caption", "col", "colgroup", NULL,
-"tfoot", "th", "td", "tr", "caption", "col", "colgroup", "thead",
- "tbody", "p", NULL,
-"tbody", "th", "td", "tr", "caption", "col", "colgroup", "thead",
- "tfoot", "tbody", "p", NULL,
-"optgroup", "option", NULL,
-"option", "option", NULL,
-"fieldset", "legend", "p", "head", "h1", "h2", "h3", "h4", "h5", "h6",
- "pre", "listing", "xmp", "a", NULL,
-/* most tags in in FONTSTYLE, PHRASE and SPECIAL should close <head> */
-"tt", "head", NULL,
-"i", "head", NULL,
-"b", "head", NULL,
-"u", "head", NULL,
-"s", "head", NULL,
-"strike", "head", NULL,
-"big", "head", NULL,
-"small", "head", NULL,
-
-"em", "head", NULL,
-"strong", "head", NULL,
-"dfn", "head", NULL,
-"code", "head", NULL,
-"samp", "head", NULL,
-"kbd", "head", NULL,
-"var", "head", NULL,
-"cite", "head", NULL,
-"abbr", "head", NULL,
-"acronym", "head", NULL,
-
-/* "a" */
-"img", "head", NULL,
-/* "applet" */
-/* "embed" */
-/* "object" */
-"font", "head", NULL,
-/* "basefont" */
-"br", "head", NULL,
-/* "script" */
-"map", "head", NULL,
-"q", "head", NULL,
-"sub", "head", NULL,
-"sup", "head", NULL,
-"span", "head", NULL,
-"bdo", "head", NULL,
-"iframe", "head", NULL,
-NULL
-};
-
-/*
- * The list of HTML elements which are supposed not to have
- * CDATA content and where a p element will be implied
- *
- * TODO: extend that list by reading the HTML SGML DTD on
- * implied paragraph
- */
-static const char *const htmlNoContentElements[] = {
- "html",
- "head",
- NULL
-};
-
-/*
- * The list of HTML attributes which are of content %Script;
- * NOTE: when adding ones, check htmlIsScriptAttribute() since
- * it assumes the name starts with 'on'
- */
-static const char *const htmlScriptAttributes[] = {
- "onclick",
- "ondblclick",
- "onmousedown",
- "onmouseup",
- "onmouseover",
- "onmousemove",
- "onmouseout",
- "onkeypress",
- "onkeydown",
- "onkeyup",
- "onload",
- "onunload",
- "onfocus",
- "onblur",
- "onsubmit",
- "onreset",
- "onchange",
- "onselect"
-};
-
-/*
- * This table is used by the htmlparser to know what to do with
- * broken html pages. By assigning different priorities to different
- * elements the parser can decide how to handle extra endtags.
- * Endtags are only allowed to close elements with lower or equal
- * priority.
- */
-
-typedef struct {
- const char *name;
- int priority;
-} elementPriority;
-
-static const elementPriority htmlEndPriority[] = {
- {"div", 150},
- {"td", 160},
- {"th", 160},
- {"tr", 170},
- {"thead", 180},
- {"tbody", 180},
- {"tfoot", 180},
- {"table", 190},
- {"head", 200},
- {"body", 200},
- {"html", 220},
- {NULL, 100} /* Default priority */
-};
-
-static const char** htmlStartCloseIndex[100];
-static int htmlStartCloseIndexinitialized = 0;
-
-/************************************************************************
- * *
- * functions to handle HTML specific data *
- * *
- ************************************************************************/
-
-/**
- * htmlInitAutoClose:
- *
- * Initialize the htmlStartCloseIndex for fast lookup of closing tags names.
- * This is not reentrant. Call xmlInitParser() once before processing in
- * case of use in multithreaded programs.
- */
-void
-htmlInitAutoClose(void) {
- int indx, i = 0;
-
- if (htmlStartCloseIndexinitialized) return;
-
- for (indx = 0;indx < 100;indx ++) htmlStartCloseIndex[indx] = NULL;
- indx = 0;
- while ((htmlStartClose[i] != NULL) && (indx < 100 - 1)) {
- htmlStartCloseIndex[indx++] = (const char**) &htmlStartClose[i];
- while (htmlStartClose[i] != NULL) i++;
- i++;
- }
- htmlStartCloseIndexinitialized = 1;
-}
-
-/**
- * htmlTagLookup:
- * @tag: The tag name in lowercase
- *
- * Lookup the HTML tag in the ElementTable
- *
- * Returns the related htmlElemDescPtr or NULL if not found.
- */
-const htmlElemDesc *
-htmlTagLookup(const xmlChar *tag) {
- unsigned int i;
-
- for (i = 0; i < (sizeof(html40ElementTable) /
- sizeof(html40ElementTable[0]));i++) {
- if (!xmlStrcasecmp(tag, BAD_CAST html40ElementTable[i].name))
- return((htmlElemDescPtr) &html40ElementTable[i]);
- }
- return(NULL);
-}
-
-/**
- * htmlGetEndPriority:
- * @name: The name of the element to look up the priority for.
- *
- * Return value: The "endtag" priority.
- **/
-static int
-htmlGetEndPriority (const xmlChar *name) {
- int i = 0;
-
- while ((htmlEndPriority[i].name != NULL) &&
- (!xmlStrEqual((const xmlChar *)htmlEndPriority[i].name, name)))
- i++;
-
- return(htmlEndPriority[i].priority);
-}
-
-
-/**
- * htmlCheckAutoClose:
- * @newtag: The new tag name
- * @oldtag: The old tag name
- *
- * Checks whether the new tag is one of the registered valid tags for
- * closing old.
- * Initialize the htmlStartCloseIndex for fast lookup of closing tags names.
- *
- * Returns 0 if no, 1 if yes.
- */
-static int
-htmlCheckAutoClose(const xmlChar * newtag, const xmlChar * oldtag)
-{
- int i, indx;
- const char **closed = NULL;
-
- if (htmlStartCloseIndexinitialized == 0)
- htmlInitAutoClose();
-
- /* inefficient, but not a big deal */
- for (indx = 0; indx < 100; indx++) {
- closed = htmlStartCloseIndex[indx];
- if (closed == NULL)
- return (0);
- if (xmlStrEqual(BAD_CAST * closed, newtag))
- break;
- }
-
- i = closed - htmlStartClose;
- i++;
- while (htmlStartClose[i] != NULL) {
- if (xmlStrEqual(BAD_CAST htmlStartClose[i], oldtag)) {
- return (1);
- }
- i++;
- }
- return (0);
-}
-
-/**
- * htmlAutoCloseOnClose:
- * @ctxt: an HTML parser context
- * @newtag: The new tag name
- * @force: force the tag closure
- *
- * The HTML DTD allows an ending tag to implicitly close other tags.
- */
-static void
-htmlAutoCloseOnClose(htmlParserCtxtPtr ctxt, const xmlChar * newtag)
-{
- const htmlElemDesc *info;
- int i, priority;
-
- priority = htmlGetEndPriority(newtag);
-
- for (i = (ctxt->nameNr - 1); i >= 0; i--) {
-
- if (xmlStrEqual(newtag, ctxt->nameTab[i]))
- break;
- /*
- * A missplaced endtag can only close elements with lower
- * or equal priority, so if we find an element with higher
- * priority before we find an element with
- * matching name, we just ignore this endtag
- */
- if (htmlGetEndPriority(ctxt->nameTab[i]) > priority)
- return;
- }
- if (i < 0)
- return;
-
- while (!xmlStrEqual(newtag, ctxt->name)) {
- info = htmlTagLookup(ctxt->name);
- if ((info != NULL) && (info->endTag == 3)) {
- htmlParseErr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
- "Opening and ending tag mismatch: %s and %s\n",
- newtag, ctxt->name);
- }
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, ctxt->name);
- htmlnamePop(ctxt);
- }
-}
-
-/**
- * htmlAutoCloseOnEnd:
- * @ctxt: an HTML parser context
- *
- * Close all remaining tags at the end of the stream
- */
-static void
-htmlAutoCloseOnEnd(htmlParserCtxtPtr ctxt)
-{
- int i;
-
- if (ctxt->nameNr == 0)
- return;
- for (i = (ctxt->nameNr - 1); i >= 0; i--) {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, ctxt->name);
- htmlnamePop(ctxt);
- }
-}
-
-/**
- * htmlAutoClose:
- * @ctxt: an HTML parser context
- * @newtag: The new tag name or NULL
- *
- * The HTML DTD allows a tag to implicitly close other tags.
- * The list is kept in htmlStartClose array. This function is
- * called when a new tag has been detected and generates the
- * appropriates closes if possible/needed.
- * If newtag is NULL this mean we are at the end of the resource
- * and we should check
- */
-static void
-htmlAutoClose(htmlParserCtxtPtr ctxt, const xmlChar * newtag)
-{
- while ((newtag != NULL) && (ctxt->name != NULL) &&
- (htmlCheckAutoClose(newtag, ctxt->name))) {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, ctxt->name);
- htmlnamePop(ctxt);
- }
- if (newtag == NULL) {
- htmlAutoCloseOnEnd(ctxt);
- return;
- }
- while ((newtag == NULL) && (ctxt->name != NULL) &&
- ((xmlStrEqual(ctxt->name, BAD_CAST "head")) ||
- (xmlStrEqual(ctxt->name, BAD_CAST "body")) ||
- (xmlStrEqual(ctxt->name, BAD_CAST "html")))) {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, ctxt->name);
- htmlnamePop(ctxt);
- }
-}
-
-/**
- * htmlAutoCloseTag:
- * @doc: the HTML document
- * @name: The tag name
- * @elem: the HTML element
- *
- * The HTML DTD allows a tag to implicitly close other tags.
- * The list is kept in htmlStartClose array. This function checks
- * if the element or one of it's children would autoclose the
- * given tag.
- *
- * Returns 1 if autoclose, 0 otherwise
- */
-int
-htmlAutoCloseTag(htmlDocPtr doc, const xmlChar *name, htmlNodePtr elem) {
- htmlNodePtr child;
-
- if (elem == NULL) return(1);
- if (xmlStrEqual(name, elem->name)) return(0);
- if (htmlCheckAutoClose(elem->name, name)) return(1);
- child = elem->children;
- while (child != NULL) {
- if (htmlAutoCloseTag(doc, name, child)) return(1);
- child = child->next;
- }
- return(0);
-}
-
-/**
- * htmlIsAutoClosed:
- * @doc: the HTML document
- * @elem: the HTML element
- *
- * The HTML DTD allows a tag to implicitly close other tags.
- * The list is kept in htmlStartClose array. This function checks
- * if a tag is autoclosed by one of it's child
- *
- * Returns 1 if autoclosed, 0 otherwise
- */
-int
-htmlIsAutoClosed(htmlDocPtr doc, htmlNodePtr elem) {
- htmlNodePtr child;
-
- if (elem == NULL) return(1);
- child = elem->children;
- while (child != NULL) {
- if (htmlAutoCloseTag(doc, elem->name, child)) return(1);
- child = child->next;
- }
- return(0);
-}
-
-/**
- * htmlCheckImplied:
- * @ctxt: an HTML parser context
- * @newtag: The new tag name
- *
- * The HTML DTD allows a tag to exists only implicitly
- * called when a new tag has been detected and generates the
- * appropriates implicit tags if missing
- */
-static void
-htmlCheckImplied(htmlParserCtxtPtr ctxt, const xmlChar *newtag) {
- int i;
-
- if (ctxt->options & HTML_PARSE_NOIMPLIED)
- return;
- if (!htmlOmittedDefaultValue)
- return;
- if (xmlStrEqual(newtag, BAD_CAST"html"))
- return;
- if (ctxt->nameNr <= 0) {
- htmlnamePush(ctxt, BAD_CAST"html");
- if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
- ctxt->sax->startElement(ctxt->userData, BAD_CAST"html", NULL);
- }
- if ((xmlStrEqual(newtag, BAD_CAST"body")) || (xmlStrEqual(newtag, BAD_CAST"head")))
- return;
- if ((ctxt->nameNr <= 1) &&
- ((xmlStrEqual(newtag, BAD_CAST"script")) ||
- (xmlStrEqual(newtag, BAD_CAST"style")) ||
- (xmlStrEqual(newtag, BAD_CAST"meta")) ||
- (xmlStrEqual(newtag, BAD_CAST"link")) ||
- (xmlStrEqual(newtag, BAD_CAST"title")) ||
- (xmlStrEqual(newtag, BAD_CAST"base")))) {
- if (ctxt->html >= 3) {
- /* we already saw or generated an <head> before */
- return;
- }
- /*
- * dropped OBJECT ... i you put it first BODY will be
- * assumed !
- */
- htmlnamePush(ctxt, BAD_CAST"head");
- if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
- ctxt->sax->startElement(ctxt->userData, BAD_CAST"head", NULL);
- } else if ((!xmlStrEqual(newtag, BAD_CAST"noframes")) &&
- (!xmlStrEqual(newtag, BAD_CAST"frame")) &&
- (!xmlStrEqual(newtag, BAD_CAST"frameset"))) {
- if (ctxt->html >= 10) {
- /* we already saw or generated a <body> before */
- return;
- }
- for (i = 0;i < ctxt->nameNr;i++) {
- if (xmlStrEqual(ctxt->nameTab[i], BAD_CAST"body")) {
- return;
- }
- if (xmlStrEqual(ctxt->nameTab[i], BAD_CAST"head")) {
- return;
- }
- }
-
- htmlnamePush(ctxt, BAD_CAST"body");
- if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
- ctxt->sax->startElement(ctxt->userData, BAD_CAST"body", NULL);
- }
-}
-
-/**
- * htmlCheckParagraph
- * @ctxt: an HTML parser context
- *
- * Check whether a p element need to be implied before inserting
- * characters in the current element.
- *
- * Returns 1 if a paragraph has been inserted, 0 if not and -1
- * in case of error.
- */
-
-static int
-htmlCheckParagraph(htmlParserCtxtPtr ctxt) {
- const xmlChar *tag;
- int i;
-
- if (ctxt == NULL)
- return(-1);
- tag = ctxt->name;
- if (tag == NULL) {
- htmlAutoClose(ctxt, BAD_CAST"p");
- htmlCheckImplied(ctxt, BAD_CAST"p");
- htmlnamePush(ctxt, BAD_CAST"p");
- if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
- ctxt->sax->startElement(ctxt->userData, BAD_CAST"p", NULL);
- return(1);
- }
- if (!htmlOmittedDefaultValue)
- return(0);
- for (i = 0; htmlNoContentElements[i] != NULL; i++) {
- if (xmlStrEqual(tag, BAD_CAST htmlNoContentElements[i])) {
- htmlAutoClose(ctxt, BAD_CAST"p");
- htmlCheckImplied(ctxt, BAD_CAST"p");
- htmlnamePush(ctxt, BAD_CAST"p");
- if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL))
- ctxt->sax->startElement(ctxt->userData, BAD_CAST"p", NULL);
- return(1);
- }
- }
- return(0);
-}
-
-/**
- * htmlIsScriptAttribute:
- * @name: an attribute name
- *
- * Check if an attribute is of content type Script
- *
- * Returns 1 is the attribute is a script 0 otherwise
- */
-int
-htmlIsScriptAttribute(const xmlChar *name) {
- unsigned int i;
-
- if (name == NULL)
- return(0);
- /*
- * all script attributes start with 'on'
- */
- if ((name[0] != 'o') || (name[1] != 'n'))
- return(0);
- for (i = 0;
- i < sizeof(htmlScriptAttributes)/sizeof(htmlScriptAttributes[0]);
- i++) {
- if (xmlStrEqual(name, (const xmlChar *) htmlScriptAttributes[i]))
- return(1);
- }
- return(0);
-}
-
-/************************************************************************
- * *
- * The list of HTML predefined entities *
- * *
- ************************************************************************/
-
-
-static const htmlEntityDesc html40EntitiesTable[] = {
-/*
- * the 4 absolute ones, plus apostrophe.
- */
-{ 34, "quot", "quotation mark = APL quote, U+0022 ISOnum" },
-{ 38, "amp", "ampersand, U+0026 ISOnum" },
-{ 39, "apos", "single quote" },
-{ 60, "lt", "less-than sign, U+003C ISOnum" },
-{ 62, "gt", "greater-than sign, U+003E ISOnum" },
-
-/*
- * A bunch still in the 128-255 range
- * Replacing them depend really on the charset used.
- */
-{ 160, "nbsp", "no-break space = non-breaking space, U+00A0 ISOnum" },
-{ 161, "iexcl","inverted exclamation mark, U+00A1 ISOnum" },
-{ 162, "cent", "cent sign, U+00A2 ISOnum" },
-{ 163, "pound","pound sign, U+00A3 ISOnum" },
-{ 164, "curren","currency sign, U+00A4 ISOnum" },
-{ 165, "yen", "yen sign = yuan sign, U+00A5 ISOnum" },
-{ 166, "brvbar","broken bar = broken vertical bar, U+00A6 ISOnum" },
-{ 167, "sect", "section sign, U+00A7 ISOnum" },
-{ 168, "uml", "diaeresis = spacing diaeresis, U+00A8 ISOdia" },
-{ 169, "copy", "copyright sign, U+00A9 ISOnum" },
-{ 170, "ordf", "feminine ordinal indicator, U+00AA ISOnum" },
-{ 171, "laquo","left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum" },
-{ 172, "not", "not sign, U+00AC ISOnum" },
-{ 173, "shy", "soft hyphen = discretionary hyphen, U+00AD ISOnum" },
-{ 174, "reg", "registered sign = registered trade mark sign, U+00AE ISOnum" },
-{ 175, "macr", "macron = spacing macron = overline = APL overbar, U+00AF ISOdia" },
-{ 176, "deg", "degree sign, U+00B0 ISOnum" },
-{ 177, "plusmn","plus-minus sign = plus-or-minus sign, U+00B1 ISOnum" },
-{ 178, "sup2", "superscript two = superscript digit two = squared, U+00B2 ISOnum" },
-{ 179, "sup3", "superscript three = superscript digit three = cubed, U+00B3 ISOnum" },
-{ 180, "acute","acute accent = spacing acute, U+00B4 ISOdia" },
-{ 181, "micro","micro sign, U+00B5 ISOnum" },
-{ 182, "para", "pilcrow sign = paragraph sign, U+00B6 ISOnum" },
-{ 183, "middot","middle dot = Georgian comma Greek middle dot, U+00B7 ISOnum" },
-{ 184, "cedil","cedilla = spacing cedilla, U+00B8 ISOdia" },
-{ 185, "sup1", "superscript one = superscript digit one, U+00B9 ISOnum" },
-{ 186, "ordm", "masculine ordinal indicator, U+00BA ISOnum" },
-{ 187, "raquo","right-pointing double angle quotation mark right pointing guillemet, U+00BB ISOnum" },
-{ 188, "frac14","vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum" },
-{ 189, "frac12","vulgar fraction one half = fraction one half, U+00BD ISOnum" },
-{ 190, "frac34","vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum" },
-{ 191, "iquest","inverted question mark = turned question mark, U+00BF ISOnum" },
-{ 192, "Agrave","latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1" },
-{ 193, "Aacute","latin capital letter A with acute, U+00C1 ISOlat1" },
-{ 194, "Acirc","latin capital letter A with circumflex, U+00C2 ISOlat1" },
-{ 195, "Atilde","latin capital letter A with tilde, U+00C3 ISOlat1" },
-{ 196, "Auml", "latin capital letter A with diaeresis, U+00C4 ISOlat1" },
-{ 197, "Aring","latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1" },
-{ 198, "AElig","latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1" },
-{ 199, "Ccedil","latin capital letter C with cedilla, U+00C7 ISOlat1" },
-{ 200, "Egrave","latin capital letter E with grave, U+00C8 ISOlat1" },
-{ 201, "Eacute","latin capital letter E with acute, U+00C9 ISOlat1" },
-{ 202, "Ecirc","latin capital letter E with circumflex, U+00CA ISOlat1" },
-{ 203, "Euml", "latin capital letter E with diaeresis, U+00CB ISOlat1" },
-{ 204, "Igrave","latin capital letter I with grave, U+00CC ISOlat1" },
-{ 205, "Iacute","latin capital letter I with acute, U+00CD ISOlat1" },
-{ 206, "Icirc","latin capital letter I with circumflex, U+00CE ISOlat1" },
-{ 207, "Iuml", "latin capital letter I with diaeresis, U+00CF ISOlat1" },
-{ 208, "ETH", "latin capital letter ETH, U+00D0 ISOlat1" },
-{ 209, "Ntilde","latin capital letter N with tilde, U+00D1 ISOlat1" },
-{ 210, "Ograve","latin capital letter O with grave, U+00D2 ISOlat1" },
-{ 211, "Oacute","latin capital letter O with acute, U+00D3 ISOlat1" },
-{ 212, "Ocirc","latin capital letter O with circumflex, U+00D4 ISOlat1" },
-{ 213, "Otilde","latin capital letter O with tilde, U+00D5 ISOlat1" },
-{ 214, "Ouml", "latin capital letter O with diaeresis, U+00D6 ISOlat1" },
-{ 215, "times","multiplication sign, U+00D7 ISOnum" },
-{ 216, "Oslash","latin capital letter O with stroke latin capital letter O slash, U+00D8 ISOlat1" },
-{ 217, "Ugrave","latin capital letter U with grave, U+00D9 ISOlat1" },
-{ 218, "Uacute","latin capital letter U with acute, U+00DA ISOlat1" },
-{ 219, "Ucirc","latin capital letter U with circumflex, U+00DB ISOlat1" },
-{ 220, "Uuml", "latin capital letter U with diaeresis, U+00DC ISOlat1" },
-{ 221, "Yacute","latin capital letter Y with acute, U+00DD ISOlat1" },
-{ 222, "THORN","latin capital letter THORN, U+00DE ISOlat1" },
-{ 223, "szlig","latin small letter sharp s = ess-zed, U+00DF ISOlat1" },
-{ 224, "agrave","latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1" },
-{ 225, "aacute","latin small letter a with acute, U+00E1 ISOlat1" },
-{ 226, "acirc","latin small letter a with circumflex, U+00E2 ISOlat1" },
-{ 227, "atilde","latin small letter a with tilde, U+00E3 ISOlat1" },
-{ 228, "auml", "latin small letter a with diaeresis, U+00E4 ISOlat1" },
-{ 229, "aring","latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1" },
-{ 230, "aelig","latin small letter ae = latin small ligature ae, U+00E6 ISOlat1" },
-{ 231, "ccedil","latin small letter c with cedilla, U+00E7 ISOlat1" },
-{ 232, "egrave","latin small letter e with grave, U+00E8 ISOlat1" },
-{ 233, "eacute","latin small letter e with acute, U+00E9 ISOlat1" },
-{ 234, "ecirc","latin small letter e with circumflex, U+00EA ISOlat1" },
-{ 235, "euml", "latin small letter e with diaeresis, U+00EB ISOlat1" },
-{ 236, "igrave","latin small letter i with grave, U+00EC ISOlat1" },
-{ 237, "iacute","latin small letter i with acute, U+00ED ISOlat1" },
-{ 238, "icirc","latin small letter i with circumflex, U+00EE ISOlat1" },
-{ 239, "iuml", "latin small letter i with diaeresis, U+00EF ISOlat1" },
-{ 240, "eth", "latin small letter eth, U+00F0 ISOlat1" },
-{ 241, "ntilde","latin small letter n with tilde, U+00F1 ISOlat1" },
-{ 242, "ograve","latin small letter o with grave, U+00F2 ISOlat1" },
-{ 243, "oacute","latin small letter o with acute, U+00F3 ISOlat1" },
-{ 244, "ocirc","latin small letter o with circumflex, U+00F4 ISOlat1" },
-{ 245, "otilde","latin small letter o with tilde, U+00F5 ISOlat1" },
-{ 246, "ouml", "latin small letter o with diaeresis, U+00F6 ISOlat1" },
-{ 247, "divide","division sign, U+00F7 ISOnum" },
-{ 248, "oslash","latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1" },
-{ 249, "ugrave","latin small letter u with grave, U+00F9 ISOlat1" },
-{ 250, "uacute","latin small letter u with acute, U+00FA ISOlat1" },
-{ 251, "ucirc","latin small letter u with circumflex, U+00FB ISOlat1" },
-{ 252, "uuml", "latin small letter u with diaeresis, U+00FC ISOlat1" },
-{ 253, "yacute","latin small letter y with acute, U+00FD ISOlat1" },
-{ 254, "thorn","latin small letter thorn with, U+00FE ISOlat1" },
-{ 255, "yuml", "latin small letter y with diaeresis, U+00FF ISOlat1" },
-
-{ 338, "OElig","latin capital ligature OE, U+0152 ISOlat2" },
-{ 339, "oelig","latin small ligature oe, U+0153 ISOlat2" },
-{ 352, "Scaron","latin capital letter S with caron, U+0160 ISOlat2" },
-{ 353, "scaron","latin small letter s with caron, U+0161 ISOlat2" },
-{ 376, "Yuml", "latin capital letter Y with diaeresis, U+0178 ISOlat2" },
-
-/*
- * Anything below should really be kept as entities references
- */
-{ 402, "fnof", "latin small f with hook = function = florin, U+0192 ISOtech" },
-
-{ 710, "circ", "modifier letter circumflex accent, U+02C6 ISOpub" },
-{ 732, "tilde","small tilde, U+02DC ISOdia" },
-
-{ 913, "Alpha","greek capital letter alpha, U+0391" },
-{ 914, "Beta", "greek capital letter beta, U+0392" },
-{ 915, "Gamma","greek capital letter gamma, U+0393 ISOgrk3" },
-{ 916, "Delta","greek capital letter delta, U+0394 ISOgrk3" },
-{ 917, "Epsilon","greek capital letter epsilon, U+0395" },
-{ 918, "Zeta", "greek capital letter zeta, U+0396" },
-{ 919, "Eta", "greek capital letter eta, U+0397" },
-{ 920, "Theta","greek capital letter theta, U+0398 ISOgrk3" },
-{ 921, "Iota", "greek capital letter iota, U+0399" },
-{ 922, "Kappa","greek capital letter kappa, U+039A" },
-{ 923, "Lambda", "greek capital letter lambda, U+039B ISOgrk3" },
-{ 924, "Mu", "greek capital letter mu, U+039C" },
-{ 925, "Nu", "greek capital letter nu, U+039D" },
-{ 926, "Xi", "greek capital letter xi, U+039E ISOgrk3" },
-{ 927, "Omicron","greek capital letter omicron, U+039F" },
-{ 928, "Pi", "greek capital letter pi, U+03A0 ISOgrk3" },
-{ 929, "Rho", "greek capital letter rho, U+03A1" },
-{ 931, "Sigma","greek capital letter sigma, U+03A3 ISOgrk3" },
-{ 932, "Tau", "greek capital letter tau, U+03A4" },
-{ 933, "Upsilon","greek capital letter upsilon, U+03A5 ISOgrk3" },
-{ 934, "Phi", "greek capital letter phi, U+03A6 ISOgrk3" },
-{ 935, "Chi", "greek capital letter chi, U+03A7" },
-{ 936, "Psi", "greek capital letter psi, U+03A8 ISOgrk3" },
-{ 937, "Omega","greek capital letter omega, U+03A9 ISOgrk3" },
-
-{ 945, "alpha","greek small letter alpha, U+03B1 ISOgrk3" },
-{ 946, "beta", "greek small letter beta, U+03B2 ISOgrk3" },
-{ 947, "gamma","greek small letter gamma, U+03B3 ISOgrk3" },
-{ 948, "delta","greek small letter delta, U+03B4 ISOgrk3" },
-{ 949, "epsilon","greek small letter epsilon, U+03B5 ISOgrk3" },
-{ 950, "zeta", "greek small letter zeta, U+03B6 ISOgrk3" },
-{ 951, "eta", "greek small letter eta, U+03B7 ISOgrk3" },
-{ 952, "theta","greek small letter theta, U+03B8 ISOgrk3" },
-{ 953, "iota", "greek small letter iota, U+03B9 ISOgrk3" },
-{ 954, "kappa","greek small letter kappa, U+03BA ISOgrk3" },
-{ 955, "lambda","greek small letter lambda, U+03BB ISOgrk3" },
-{ 956, "mu", "greek small letter mu, U+03BC ISOgrk3" },
-{ 957, "nu", "greek small letter nu, U+03BD ISOgrk3" },
-{ 958, "xi", "greek small letter xi, U+03BE ISOgrk3" },
-{ 959, "omicron","greek small letter omicron, U+03BF NEW" },
-{ 960, "pi", "greek small letter pi, U+03C0 ISOgrk3" },
-{ 961, "rho", "greek small letter rho, U+03C1 ISOgrk3" },
-{ 962, "sigmaf","greek small letter final sigma, U+03C2 ISOgrk3" },
-{ 963, "sigma","greek small letter sigma, U+03C3 ISOgrk3" },
-{ 964, "tau", "greek small letter tau, U+03C4 ISOgrk3" },
-{ 965, "upsilon","greek small letter upsilon, U+03C5 ISOgrk3" },
-{ 966, "phi", "greek small letter phi, U+03C6 ISOgrk3" },
-{ 967, "chi", "greek small letter chi, U+03C7 ISOgrk3" },
-{ 968, "psi", "greek small letter psi, U+03C8 ISOgrk3" },
-{ 969, "omega","greek small letter omega, U+03C9 ISOgrk3" },
-{ 977, "thetasym","greek small letter theta symbol, U+03D1 NEW" },
-{ 978, "upsih","greek upsilon with hook symbol, U+03D2 NEW" },
-{ 982, "piv", "greek pi symbol, U+03D6 ISOgrk3" },
-
-{ 8194, "ensp", "en space, U+2002 ISOpub" },
-{ 8195, "emsp", "em space, U+2003 ISOpub" },
-{ 8201, "thinsp","thin space, U+2009 ISOpub" },
-{ 8204, "zwnj", "zero width non-joiner, U+200C NEW RFC 2070" },
-{ 8205, "zwj", "zero width joiner, U+200D NEW RFC 2070" },
-{ 8206, "lrm", "left-to-right mark, U+200E NEW RFC 2070" },
-{ 8207, "rlm", "right-to-left mark, U+200F NEW RFC 2070" },
-{ 8211, "ndash","en dash, U+2013 ISOpub" },
-{ 8212, "mdash","em dash, U+2014 ISOpub" },
-{ 8216, "lsquo","left single quotation mark, U+2018 ISOnum" },
-{ 8217, "rsquo","right single quotation mark, U+2019 ISOnum" },
-{ 8218, "sbquo","single low-9 quotation mark, U+201A NEW" },
-{ 8220, "ldquo","left double quotation mark, U+201C ISOnum" },
-{ 8221, "rdquo","right double quotation mark, U+201D ISOnum" },
-{ 8222, "bdquo","double low-9 quotation mark, U+201E NEW" },
-{ 8224, "dagger","dagger, U+2020 ISOpub" },
-{ 8225, "Dagger","double dagger, U+2021 ISOpub" },
-
-{ 8226, "bull", "bullet = black small circle, U+2022 ISOpub" },
-{ 8230, "hellip","horizontal ellipsis = three dot leader, U+2026 ISOpub" },
-
-{ 8240, "permil","per mille sign, U+2030 ISOtech" },
-
-{ 8242, "prime","prime = minutes = feet, U+2032 ISOtech" },
-{ 8243, "Prime","double prime = seconds = inches, U+2033 ISOtech" },
-
-{ 8249, "lsaquo","single left-pointing angle quotation mark, U+2039 ISO proposed" },
-{ 8250, "rsaquo","single right-pointing angle quotation mark, U+203A ISO proposed" },
-
-{ 8254, "oline","overline = spacing overscore, U+203E NEW" },
-{ 8260, "frasl","fraction slash, U+2044 NEW" },
-
-{ 8364, "euro", "euro sign, U+20AC NEW" },
-
-{ 8465, "image","blackletter capital I = imaginary part, U+2111 ISOamso" },
-{ 8472, "weierp","script capital P = power set = Weierstrass p, U+2118 ISOamso" },
-{ 8476, "real", "blackletter capital R = real part symbol, U+211C ISOamso" },
-{ 8482, "trade","trade mark sign, U+2122 ISOnum" },
-{ 8501, "alefsym","alef symbol = first transfinite cardinal, U+2135 NEW" },
-{ 8592, "larr", "leftwards arrow, U+2190 ISOnum" },
-{ 8593, "uarr", "upwards arrow, U+2191 ISOnum" },
-{ 8594, "rarr", "rightwards arrow, U+2192 ISOnum" },
-{ 8595, "darr", "downwards arrow, U+2193 ISOnum" },
-{ 8596, "harr", "left right arrow, U+2194 ISOamsa" },
-{ 8629, "crarr","downwards arrow with corner leftwards = carriage return, U+21B5 NEW" },
-{ 8656, "lArr", "leftwards double arrow, U+21D0 ISOtech" },
-{ 8657, "uArr", "upwards double arrow, U+21D1 ISOamsa" },
-{ 8658, "rArr", "rightwards double arrow, U+21D2 ISOtech" },
-{ 8659, "dArr", "downwards double arrow, U+21D3 ISOamsa" },
-{ 8660, "hArr", "left right double arrow, U+21D4 ISOamsa" },
-
-{ 8704, "forall","for all, U+2200 ISOtech" },
-{ 8706, "part", "partial differential, U+2202 ISOtech" },
-{ 8707, "exist","there exists, U+2203 ISOtech" },
-{ 8709, "empty","empty set = null set = diameter, U+2205 ISOamso" },
-{ 8711, "nabla","nabla = backward difference, U+2207 ISOtech" },
-{ 8712, "isin", "element of, U+2208 ISOtech" },
-{ 8713, "notin","not an element of, U+2209 ISOtech" },
-{ 8715, "ni", "contains as member, U+220B ISOtech" },
-{ 8719, "prod", "n-ary product = product sign, U+220F ISOamsb" },
-{ 8721, "sum", "n-ary summation, U+2211 ISOamsb" },
-{ 8722, "minus","minus sign, U+2212 ISOtech" },
-{ 8727, "lowast","asterisk operator, U+2217 ISOtech" },
-{ 8730, "radic","square root = radical sign, U+221A ISOtech" },
-{ 8733, "prop", "proportional to, U+221D ISOtech" },
-{ 8734, "infin","infinity, U+221E ISOtech" },
-{ 8736, "ang", "angle, U+2220 ISOamso" },
-{ 8743, "and", "logical and = wedge, U+2227 ISOtech" },
-{ 8744, "or", "logical or = vee, U+2228 ISOtech" },
-{ 8745, "cap", "intersection = cap, U+2229 ISOtech" },
-{ 8746, "cup", "union = cup, U+222A ISOtech" },
-{ 8747, "int", "integral, U+222B ISOtech" },
-{ 8756, "there4","therefore, U+2234 ISOtech" },
-{ 8764, "sim", "tilde operator = varies with = similar to, U+223C ISOtech" },
-{ 8773, "cong", "approximately equal to, U+2245 ISOtech" },
-{ 8776, "asymp","almost equal to = asymptotic to, U+2248 ISOamsr" },
-{ 8800, "ne", "not equal to, U+2260 ISOtech" },
-{ 8801, "equiv","identical to, U+2261 ISOtech" },
-{ 8804, "le", "less-than or equal to, U+2264 ISOtech" },
-{ 8805, "ge", "greater-than or equal to, U+2265 ISOtech" },
-{ 8834, "sub", "subset of, U+2282 ISOtech" },
-{ 8835, "sup", "superset of, U+2283 ISOtech" },
-{ 8836, "nsub", "not a subset of, U+2284 ISOamsn" },
-{ 8838, "sube", "subset of or equal to, U+2286 ISOtech" },
-{ 8839, "supe", "superset of or equal to, U+2287 ISOtech" },
-{ 8853, "oplus","circled plus = direct sum, U+2295 ISOamsb" },
-{ 8855, "otimes","circled times = vector product, U+2297 ISOamsb" },
-{ 8869, "perp", "up tack = orthogonal to = perpendicular, U+22A5 ISOtech" },
-{ 8901, "sdot", "dot operator, U+22C5 ISOamsb" },
-{ 8968, "lceil","left ceiling = apl upstile, U+2308 ISOamsc" },
-{ 8969, "rceil","right ceiling, U+2309 ISOamsc" },
-{ 8970, "lfloor","left floor = apl downstile, U+230A ISOamsc" },
-{ 8971, "rfloor","right floor, U+230B ISOamsc" },
-{ 9001, "lang", "left-pointing angle bracket = bra, U+2329 ISOtech" },
-{ 9002, "rang", "right-pointing angle bracket = ket, U+232A ISOtech" },
-{ 9674, "loz", "lozenge, U+25CA ISOpub" },
-
-{ 9824, "spades","black spade suit, U+2660 ISOpub" },
-{ 9827, "clubs","black club suit = shamrock, U+2663 ISOpub" },
-{ 9829, "hearts","black heart suit = valentine, U+2665 ISOpub" },
-{ 9830, "diams","black diamond suit, U+2666 ISOpub" },
-
-};
-
-/************************************************************************
- * *
- * Commodity functions to handle entities *
- * *
- ************************************************************************/
-
-/*
- * Macro used to grow the current buffer.
- */
-#define growBuffer(buffer) { \
- xmlChar *tmp; \
- buffer##_size *= 2; \
- tmp = (xmlChar *) xmlRealloc(buffer, buffer##_size * sizeof(xmlChar)); \
- if (tmp == NULL) { \
- htmlErrMemory(ctxt, "growing buffer\n"); \
- xmlFree(buffer); \
- return(NULL); \
- } \
- buffer = tmp; \
-}
-
-/**
- * htmlEntityLookup:
- * @name: the entity name
- *
- * Lookup the given entity in EntitiesTable
- *
- * TODO: the linear scan is really ugly, an hash table is really needed.
- *
- * Returns the associated htmlEntityDescPtr if found, NULL otherwise.
- */
-const htmlEntityDesc *
-htmlEntityLookup(const xmlChar *name) {
- unsigned int i;
-
- for (i = 0;i < (sizeof(html40EntitiesTable)/
- sizeof(html40EntitiesTable[0]));i++) {
- if (xmlStrEqual(name, BAD_CAST html40EntitiesTable[i].name)) {
- return((htmlEntityDescPtr) &html40EntitiesTable[i]);
- }
- }
- return(NULL);
-}
-
-/**
- * htmlEntityValueLookup:
- * @value: the entity's unicode value
- *
- * Lookup the given entity in EntitiesTable
- *
- * TODO: the linear scan is really ugly, an hash table is really needed.
- *
- * Returns the associated htmlEntityDescPtr if found, NULL otherwise.
- */
-const htmlEntityDesc *
-htmlEntityValueLookup(unsigned int value) {
- unsigned int i;
-
- for (i = 0;i < (sizeof(html40EntitiesTable)/
- sizeof(html40EntitiesTable[0]));i++) {
- if (html40EntitiesTable[i].value >= value) {
- if (html40EntitiesTable[i].value > value)
- break;
- return((htmlEntityDescPtr) &html40EntitiesTable[i]);
- }
- }
- return(NULL);
-}
-
-/**
- * UTF8ToHtml:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and try to convert it to an ASCII
- * plus HTML entities block of chars out.
- *
- * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * as the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-int
-UTF8ToHtml(unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- const unsigned char* processed = in;
- const unsigned char* outend;
- const unsigned char* outstart = out;
- const unsigned char* instart = in;
- const unsigned char* inend;
- unsigned int c, d;
- int trailing;
-
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1);
- if (in == NULL) {
- /*
- * initialization nothing to do
- */
- *outlen = 0;
- *inlen = 0;
- return(0);
- }
- inend = in + (*inlen);
- outend = out + (*outlen);
- while (in < inend) {
- d = *in++;
- if (d < 0x80) { c= d; trailing= 0; }
- else if (d < 0xC0) {
- /* trailing byte in leading position */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
- else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
- else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
- else {
- /* no chance for this in Ascii */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
-
- if (inend - in < trailing) {
- break;
- }
-
- for ( ; trailing; trailing--) {
- if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80))
- break;
- c <<= 6;
- c |= d & 0x3F;
- }
-
- /* assertion: c is a single UTF-4 value */
- if (c < 0x80) {
- if (out + 1 >= outend)
- break;
- *out++ = c;
- } else {
- int len;
- const htmlEntityDesc * ent;
- const char *cp;
- char nbuf[16];
-
- /*
- * Try to lookup a predefined HTML entity for it
- */
-
- ent = htmlEntityValueLookup(c);
- if (ent == NULL) {
- snprintf(nbuf, sizeof(nbuf), "#%u", c);
- cp = nbuf;
- }
- else
- cp = ent->name;
- len = strlen(cp);
- if (out + 2 + len >= outend)
- break;
- *out++ = '&';
- memcpy(out, cp, len);
- out += len;
- *out++ = ';';
- }
- processed = in;
- }
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(0);
-}
-
-/**
- * htmlEncodeEntities:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- * @quoteChar: the quote character to escape (' or ") or zero.
- *
- * Take a block of UTF-8 chars in and try to convert it to an ASCII
- * plus HTML entities block of chars out.
- *
- * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * as the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-int
-htmlEncodeEntities(unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen, int quoteChar) {
- const unsigned char* processed = in;
- const unsigned char* outend;
- const unsigned char* outstart = out;
- const unsigned char* instart = in;
- const unsigned char* inend;
- unsigned int c, d;
- int trailing;
-
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || (in == NULL))
- return(-1);
- outend = out + (*outlen);
- inend = in + (*inlen);
- while (in < inend) {
- d = *in++;
- if (d < 0x80) { c= d; trailing= 0; }
- else if (d < 0xC0) {
- /* trailing byte in leading position */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
- else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
- else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
- else {
- /* no chance for this in Ascii */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
-
- if (inend - in < trailing)
- break;
-
- while (trailing--) {
- if (((d= *in++) & 0xC0) != 0x80) {
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- c <<= 6;
- c |= d & 0x3F;
- }
-
- /* assertion: c is a single UTF-4 value */
- if ((c < 0x80) && (c != (unsigned int) quoteChar) &&
- (c != '&') && (c != '<') && (c != '>')) {
- if (out >= outend)
- break;
- *out++ = c;
- } else {
- const htmlEntityDesc * ent;
- const char *cp;
- char nbuf[16];
- int len;
-
- /*
- * Try to lookup a predefined HTML entity for it
- */
- ent = htmlEntityValueLookup(c);
- if (ent == NULL) {
- snprintf(nbuf, sizeof(nbuf), "#%u", c);
- cp = nbuf;
- }
- else
- cp = ent->name;
- len = strlen(cp);
- if (out + 2 + len > outend)
- break;
- *out++ = '&';
- memcpy(out, cp, len);
- out += len;
- *out++ = ';';
- }
- processed = in;
- }
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(0);
-}
-
-/************************************************************************
- * *
- * Commodity functions to handle streams *
- * *
- ************************************************************************/
-
-/**
- * htmlNewInputStream:
- * @ctxt: an HTML parser context
- *
- * Create a new input stream structure
- * Returns the new input stream or NULL
- */
-static htmlParserInputPtr
-htmlNewInputStream(htmlParserCtxtPtr ctxt) {
- htmlParserInputPtr input;
-
- input = (xmlParserInputPtr) xmlMalloc(sizeof(htmlParserInput));
- if (input == NULL) {
- htmlErrMemory(ctxt, "couldn't allocate a new input stream\n");
- return(NULL);
- }
- memset(input, 0, sizeof(htmlParserInput));
- input->filename = NULL;
- input->directory = NULL;
- input->base = NULL;
- input->cur = NULL;
- input->buf = NULL;
- input->line = 1;
- input->col = 1;
- input->buf = NULL;
- input->free = NULL;
- input->version = NULL;
- input->consumed = 0;
- input->length = 0;
- return(input);
-}
-
-
-/************************************************************************
- * *
- * Commodity functions, cleanup needed ? *
- * *
- ************************************************************************/
-/*
- * all tags allowing pc data from the html 4.01 loose dtd
- * NOTE: it might be more apropriate to integrate this information
- * into the html40ElementTable array but I don't want to risk any
- * binary incomptibility
- */
-static const char *allowPCData[] = {
- "a", "abbr", "acronym", "address", "applet", "b", "bdo", "big",
- "blockquote", "body", "button", "caption", "center", "cite", "code",
- "dd", "del", "dfn", "div", "dt", "em", "font", "form", "h1", "h2",
- "h3", "h4", "h5", "h6", "i", "iframe", "ins", "kbd", "label", "legend",
- "li", "noframes", "noscript", "object", "p", "pre", "q", "s", "samp",
- "small", "span", "strike", "strong", "td", "th", "tt", "u", "var"
-};
-
-/**
- * areBlanks:
- * @ctxt: an HTML parser context
- * @str: a xmlChar *
- * @len: the size of @str
- *
- * Is this a sequence of blank chars that one can ignore ?
- *
- * Returns 1 if ignorable 0 otherwise.
- */
-
-static int areBlanks(htmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
- unsigned int i;
- int j;
- xmlNodePtr lastChild;
- xmlDtdPtr dtd;
-
- for (j = 0;j < len;j++)
- if (!(IS_BLANK_CH(str[j]))) return(0);
-
- if (CUR == 0) return(1);
- if (CUR != '<') return(0);
- if (ctxt->name == NULL)
- return(1);
- if (xmlStrEqual(ctxt->name, BAD_CAST"html"))
- return(1);
- if (xmlStrEqual(ctxt->name, BAD_CAST"head"))
- return(1);
-
- /* Only strip CDATA children of the body tag for strict HTML DTDs */
- if (xmlStrEqual(ctxt->name, BAD_CAST "body") && ctxt->myDoc != NULL) {
- dtd = xmlGetIntSubset(ctxt->myDoc);
- if (dtd != NULL && dtd->ExternalID != NULL) {
- if (!xmlStrcasecmp(dtd->ExternalID, BAD_CAST "-//W3C//DTD HTML 4.01//EN") ||
- !xmlStrcasecmp(dtd->ExternalID, BAD_CAST "-//W3C//DTD HTML 4//EN"))
- return(1);
- }
- }
-
- if (ctxt->node == NULL) return(0);
- lastChild = xmlGetLastChild(ctxt->node);
- while ((lastChild) && (lastChild->type == XML_COMMENT_NODE))
- lastChild = lastChild->prev;
- if (lastChild == NULL) {
- if ((ctxt->node->type != XML_ELEMENT_NODE) &&
- (ctxt->node->content != NULL)) return(0);
- /* keep ws in constructs like ...<b> </b>...
- for all tags "b" allowing PCDATA */
- for ( i = 0; i < sizeof(allowPCData)/sizeof(allowPCData[0]); i++ ) {
- if ( xmlStrEqual(ctxt->name, BAD_CAST allowPCData[i]) ) {
- return(0);
- }
- }
- } else if (xmlNodeIsText(lastChild)) {
- return(0);
- } else {
- /* keep ws in constructs like <p><b>xy</b> <i>z</i><p>
- for all tags "p" allowing PCDATA */
- for ( i = 0; i < sizeof(allowPCData)/sizeof(allowPCData[0]); i++ ) {
- if ( xmlStrEqual(lastChild->name, BAD_CAST allowPCData[i]) ) {
- return(0);
- }
- }
- }
- return(1);
-}
-
-/**
- * htmlNewDocNoDtD:
- * @URI: URI for the dtd, or NULL
- * @ExternalID: the external ID of the DTD, or NULL
- *
- * Creates a new HTML document without a DTD node if @URI and @ExternalID
- * are NULL
- *
- * Returns a new document, do not initialize the DTD if not provided
- */
-htmlDocPtr
-htmlNewDocNoDtD(const xmlChar *URI, const xmlChar *ExternalID) {
- xmlDocPtr cur;
-
- /*
- * Allocate a new document and fill the fields.
- */
- cur = (xmlDocPtr) xmlMalloc(sizeof(xmlDoc));
- if (cur == NULL) {
- htmlErrMemory(NULL, "HTML document creation failed\n");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlDoc));
-
- cur->type = XML_HTML_DOCUMENT_NODE;
- cur->version = NULL;
- cur->intSubset = NULL;
- cur->doc = cur;
- cur->name = NULL;
- cur->children = NULL;
- cur->extSubset = NULL;
- cur->oldNs = NULL;
- cur->encoding = NULL;
- cur->standalone = 1;
- cur->compression = 0;
- cur->ids = NULL;
- cur->refs = NULL;
- cur->_private = NULL;
- cur->charset = XML_CHAR_ENCODING_UTF8;
- cur->properties = XML_DOC_HTML | XML_DOC_USERBUILT;
- if ((ExternalID != NULL) ||
- (URI != NULL))
- xmlCreateIntSubset(cur, BAD_CAST "html", ExternalID, URI);
- return(cur);
-}
-
-/**
- * htmlNewDoc:
- * @URI: URI for the dtd, or NULL
- * @ExternalID: the external ID of the DTD, or NULL
- *
- * Creates a new HTML document
- *
- * Returns a new document
- */
-htmlDocPtr
-htmlNewDoc(const xmlChar *URI, const xmlChar *ExternalID) {
- if ((URI == NULL) && (ExternalID == NULL))
- return(htmlNewDocNoDtD(
- BAD_CAST "http://www.w3.org/TR/REC-html40/loose.dtd",
- BAD_CAST "-//W3C//DTD HTML 4.0 Transitional//EN"));
-
- return(htmlNewDocNoDtD(URI, ExternalID));
-}
-
-
-/************************************************************************
- * *
- * The parser itself *
- * Relates to http://www.w3.org/TR/html40 *
- * *
- ************************************************************************/
-
-/************************************************************************
- * *
- * The parser itself *
- * *
- ************************************************************************/
-
-static const xmlChar * htmlParseNameComplex(xmlParserCtxtPtr ctxt);
-
-/**
- * htmlParseHTMLName:
- * @ctxt: an HTML parser context
- *
- * parse an HTML tag or attribute name, note that we convert it to lowercase
- * since HTML names are not case-sensitive.
- *
- * Returns the Tag Name parsed or NULL
- */
-
-static const xmlChar *
-htmlParseHTMLName(htmlParserCtxtPtr ctxt) {
- int i = 0;
- xmlChar loc[HTML_PARSER_BUFFER_SIZE];
-
- if (!IS_ASCII_LETTER(CUR) && (CUR != '_') &&
- (CUR != ':') && (CUR != '.')) return(NULL);
-
- while ((i < HTML_PARSER_BUFFER_SIZE) &&
- ((IS_ASCII_LETTER(CUR)) || (IS_ASCII_DIGIT(CUR)) ||
- (CUR == ':') || (CUR == '-') || (CUR == '_') ||
- (CUR == '.'))) {
- if ((CUR >= 'A') && (CUR <= 'Z')) loc[i] = CUR + 0x20;
- else loc[i] = CUR;
- i++;
-
- NEXT;
- }
-
- return(xmlDictLookup(ctxt->dict, loc, i));
-}
-
-
-/**
- * htmlParseHTMLName_nonInvasive:
- * @ctxt: an HTML parser context
- *
- * parse an HTML tag or attribute name, note that we convert it to lowercase
- * since HTML names are not case-sensitive, this doesn't consume the data
- * from the stream, it's a look-ahead
- *
- * Returns the Tag Name parsed or NULL
- */
-
-static const xmlChar *
-htmlParseHTMLName_nonInvasive(htmlParserCtxtPtr ctxt) {
- int i = 0;
- xmlChar loc[HTML_PARSER_BUFFER_SIZE];
-
- if (!IS_ASCII_LETTER(NXT(1)) && (NXT(1) != '_') &&
- (NXT(1) != ':')) return(NULL);
-
- while ((i < HTML_PARSER_BUFFER_SIZE) &&
- ((IS_ASCII_LETTER(NXT(1+i))) || (IS_ASCII_DIGIT(NXT(1+i))) ||
- (NXT(1+i) == ':') || (NXT(1+i) == '-') || (NXT(1+i) == '_'))) {
- if ((NXT(1+i) >= 'A') && (NXT(1+i) <= 'Z')) loc[i] = NXT(1+i) + 0x20;
- else loc[i] = NXT(1+i);
- i++;
- }
-
- return(xmlDictLookup(ctxt->dict, loc, i));
-}
-
-
-/**
- * htmlParseName:
- * @ctxt: an HTML parser context
- *
- * parse an HTML name, this routine is case sensitive.
- *
- * Returns the Name parsed or NULL
- */
-
-static const xmlChar *
-htmlParseName(htmlParserCtxtPtr ctxt) {
- const xmlChar *in;
- const xmlChar *ret;
- int count = 0;
-
- GROW;
-
- /*
- * Accelerator for simple ASCII names
- */
- in = ctxt->input->cur;
- if (((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- (*in == '_') || (*in == ':')) {
- in++;
- while (((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- ((*in >= 0x30) && (*in <= 0x39)) ||
- (*in == '_') || (*in == '-') ||
- (*in == ':') || (*in == '.'))
- in++;
-
- if (in == ctxt->input->end)
- return(NULL);
-
- if ((*in > 0) && (*in < 0x80)) {
- count = in - ctxt->input->cur;
- ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count);
- ctxt->input->cur = in;
- ctxt->nbChars += count;
- ctxt->input->col += count;
- return(ret);
- }
- }
- return(htmlParseNameComplex(ctxt));
-}
-
-static const xmlChar *
-htmlParseNameComplex(xmlParserCtxtPtr ctxt) {
- int len = 0, l;
- int c;
- int count = 0;
- const xmlChar *base = ctxt->input->base;
-
- /*
- * Handler for more complex cases
- */
- GROW;
- c = CUR_CHAR(l);
- if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
- (!IS_LETTER(c) && (c != '_') &&
- (c != ':'))) {
- return(NULL);
- }
-
- while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
- ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
- (c == '.') || (c == '-') ||
- (c == '_') || (c == ':') ||
- (IS_COMBINING(c)) ||
- (IS_EXTENDER(c)))) {
- if (count++ > 100) {
- count = 0;
- GROW;
- }
- len += l;
- NEXTL(l);
- c = CUR_CHAR(l);
- if (ctxt->input->base != base) {
- /*
- * We changed encoding from an unknown encoding
- * Input buffer changed location, so we better start again
- */
- return(htmlParseNameComplex(ctxt));
- }
- }
-
- if (ctxt->input->base > ctxt->input->cur - len)
- return(NULL);
-
- return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
-}
-
-
-/**
- * htmlParseHTMLAttribute:
- * @ctxt: an HTML parser context
- * @stop: a char stop value
- *
- * parse an HTML attribute value till the stop (quote), if
- * stop is 0 then it stops at the first space
- *
- * Returns the attribute parsed or NULL
- */
-
-static xmlChar *
-htmlParseHTMLAttribute(htmlParserCtxtPtr ctxt, const xmlChar stop) {
- xmlChar *buffer = NULL;
- int buffer_size = 0;
- xmlChar *out = NULL;
- const xmlChar *name = NULL;
- const xmlChar *cur = NULL;
- const htmlEntityDesc * ent;
-
- /*
- * allocate a translation buffer.
- */
- buffer_size = HTML_PARSER_BUFFER_SIZE;
- buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar));
- if (buffer == NULL) {
- htmlErrMemory(ctxt, "buffer allocation failed\n");
- return(NULL);
- }
- out = buffer;
-
- /*
- * Ok loop until we reach one of the ending chars
- */
- while ((CUR != 0) && (CUR != stop)) {
- if ((stop == 0) && (CUR == '>')) break;
- if ((stop == 0) && (IS_BLANK_CH(CUR))) break;
- if (CUR == '&') {
- if (NXT(1) == '#') {
- unsigned int c;
- int bits;
-
- c = htmlParseCharRef(ctxt);
- if (c < 0x80)
- { *out++ = c; bits= -6; }
- else if (c < 0x800)
- { *out++ =((c >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (c < 0x10000)
- { *out++ =((c >> 12) & 0x0F) | 0xE0; bits= 6; }
- else
- { *out++ =((c >> 18) & 0x07) | 0xF0; bits= 12; }
-
- for ( ; bits >= 0; bits-= 6) {
- *out++ = ((c >> bits) & 0x3F) | 0x80;
- }
-
- if (out - buffer > buffer_size - 100) {
- int indx = out - buffer;
-
- growBuffer(buffer);
- out = &buffer[indx];
- }
- } else {
- ent = htmlParseEntityRef(ctxt, &name);
- if (name == NULL) {
- *out++ = '&';
- if (out - buffer > buffer_size - 100) {
- int indx = out - buffer;
-
- growBuffer(buffer);
- out = &buffer[indx];
- }
- } else if (ent == NULL) {
- *out++ = '&';
- cur = name;
- while (*cur != 0) {
- if (out - buffer > buffer_size - 100) {
- int indx = out - buffer;
-
- growBuffer(buffer);
- out = &buffer[indx];
- }
- *out++ = *cur++;
- }
- } else {
- unsigned int c;
- int bits;
-
- if (out - buffer > buffer_size - 100) {
- int indx = out - buffer;
-
- growBuffer(buffer);
- out = &buffer[indx];
- }
- c = ent->value;
- if (c < 0x80)
- { *out++ = c; bits= -6; }
- else if (c < 0x800)
- { *out++ =((c >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (c < 0x10000)
- { *out++ =((c >> 12) & 0x0F) | 0xE0; bits= 6; }
- else
- { *out++ =((c >> 18) & 0x07) | 0xF0; bits= 12; }
-
- for ( ; bits >= 0; bits-= 6) {
- *out++ = ((c >> bits) & 0x3F) | 0x80;
- }
- }
- }
- } else {
- unsigned int c;
- int bits, l;
-
- if (out - buffer > buffer_size - 100) {
- int indx = out - buffer;
-
- growBuffer(buffer);
- out = &buffer[indx];
- }
- c = CUR_CHAR(l);
- if (c < 0x80)
- { *out++ = c; bits= -6; }
- else if (c < 0x800)
- { *out++ =((c >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (c < 0x10000)
- { *out++ =((c >> 12) & 0x0F) | 0xE0; bits= 6; }
- else
- { *out++ =((c >> 18) & 0x07) | 0xF0; bits= 12; }
-
- for ( ; bits >= 0; bits-= 6) {
- *out++ = ((c >> bits) & 0x3F) | 0x80;
- }
- NEXT;
- }
- }
- *out = 0;
- return(buffer);
-}
-
-/**
- * htmlParseEntityRef:
- * @ctxt: an HTML parser context
- * @str: location to store the entity name
- *
- * parse an HTML ENTITY references
- *
- * [68] EntityRef ::= '&' Name ';'
- *
- * Returns the associated htmlEntityDescPtr if found, or NULL otherwise,
- * if non-NULL *str will have to be freed by the caller.
- */
-const htmlEntityDesc *
-htmlParseEntityRef(htmlParserCtxtPtr ctxt, const xmlChar **str) {
- const xmlChar *name;
- const htmlEntityDesc * ent = NULL;
-
- if (str != NULL) *str = NULL;
- if ((ctxt == NULL) || (ctxt->input == NULL)) return(NULL);
-
- if (CUR == '&') {
- NEXT;
- name = htmlParseName(ctxt);
- if (name == NULL) {
- htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
- "htmlParseEntityRef: no name\n", NULL, NULL);
- } else {
- GROW;
- if (CUR == ';') {
- if (str != NULL)
- *str = name;
-
- /*
- * Lookup the entity in the table.
- */
- ent = htmlEntityLookup(name);
- if (ent != NULL) /* OK that's ugly !!! */
- NEXT;
- } else {
- htmlParseErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING,
- "htmlParseEntityRef: expecting ';'\n",
- NULL, NULL);
- if (str != NULL)
- *str = name;
- }
- }
- }
- return(ent);
-}
-
-/**
- * htmlParseAttValue:
- * @ctxt: an HTML parser context
- *
- * parse a value for an attribute
- * Note: the parser won't do substitution of entities here, this
- * will be handled later in xmlStringGetNodeList, unless it was
- * asked for ctxt->replaceEntities != 0
- *
- * Returns the AttValue parsed or NULL.
- */
-
-static xmlChar *
-htmlParseAttValue(htmlParserCtxtPtr ctxt) {
- xmlChar *ret = NULL;
-
- if (CUR == '"') {
- NEXT;
- ret = htmlParseHTMLAttribute(ctxt, '"');
- if (CUR != '"') {
- htmlParseErr(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue: \" expected\n", NULL, NULL);
- } else
- NEXT;
- } else if (CUR == '\'') {
- NEXT;
- ret = htmlParseHTMLAttribute(ctxt, '\'');
- if (CUR != '\'') {
- htmlParseErr(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue: ' expected\n", NULL, NULL);
- } else
- NEXT;
- } else {
- /*
- * That's an HTMLism, the attribute value may not be quoted
- */
- ret = htmlParseHTMLAttribute(ctxt, 0);
- if (ret == NULL) {
- htmlParseErr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE,
- "AttValue: no value found\n", NULL, NULL);
- }
- }
- return(ret);
-}
-
-/**
- * htmlParseSystemLiteral:
- * @ctxt: an HTML parser context
- *
- * parse an HTML Literal
- *
- * [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")
- *
- * Returns the SystemLiteral parsed or NULL
- */
-
-static xmlChar *
-htmlParseSystemLiteral(htmlParserCtxtPtr ctxt) {
- size_t len = 0, startPosition = 0;
- xmlChar *ret = NULL;
-
- if (CUR == '"') {
- NEXT;
-
- if (CUR_PTR < BASE_PTR)
- return(ret);
- startPosition = CUR_PTR - BASE_PTR;
-
- while ((IS_CHAR_CH(CUR)) && (CUR != '"')) {
- NEXT;
- len++;
- }
- if (!IS_CHAR_CH(CUR)) {
- htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED,
- "Unfinished SystemLiteral\n", NULL, NULL);
- } else {
- ret = xmlStrndup((BASE_PTR+startPosition), len);
- NEXT;
- }
- } else if (CUR == '\'') {
- NEXT;
-
- if (CUR_PTR < BASE_PTR)
- return(ret);
- startPosition = CUR_PTR - BASE_PTR;
-
- while ((IS_CHAR_CH(CUR)) && (CUR != '\'')) {
- NEXT;
- len++;
- }
- if (!IS_CHAR_CH(CUR)) {
- htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED,
- "Unfinished SystemLiteral\n", NULL, NULL);
- } else {
- ret = xmlStrndup((BASE_PTR+startPosition), len);
- NEXT;
- }
- } else {
- htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_STARTED,
- " or ' expected\n", NULL, NULL);
- }
-
- return(ret);
-}
-
-/**
- * htmlParsePubidLiteral:
- * @ctxt: an HTML parser context
- *
- * parse an HTML public literal
- *
- * [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
- *
- * Returns the PubidLiteral parsed or NULL.
- */
-
-static xmlChar *
-htmlParsePubidLiteral(htmlParserCtxtPtr ctxt) {
- size_t len = 0, startPosition = 0;
- xmlChar *ret = NULL;
- /*
- * Name ::= (Letter | '_') (NameChar)*
- */
- if (CUR == '"') {
- NEXT;
-
- if (CUR_PTR < BASE_PTR)
- return(ret);
- startPosition = CUR_PTR - BASE_PTR;
-
- while (IS_PUBIDCHAR_CH(CUR)) {
- len++;
- NEXT;
- }
-
- if (CUR != '"') {
- htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED,
- "Unfinished PubidLiteral\n", NULL, NULL);
- } else {
- ret = xmlStrndup((BASE_PTR + startPosition), len);
- NEXT;
- }
- } else if (CUR == '\'') {
- NEXT;
-
- if (CUR_PTR < BASE_PTR)
- return(ret);
- startPosition = CUR_PTR - BASE_PTR;
-
- while ((IS_PUBIDCHAR_CH(CUR)) && (CUR != '\'')){
- len++;
- NEXT;
- }
-
- if (CUR != '\'') {
- htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED,
- "Unfinished PubidLiteral\n", NULL, NULL);
- } else {
- ret = xmlStrndup((BASE_PTR + startPosition), len);
- NEXT;
- }
- } else {
- htmlParseErr(ctxt, XML_ERR_LITERAL_NOT_STARTED,
- "PubidLiteral \" or ' expected\n", NULL, NULL);
- }
-
- return(ret);
-}
-
-/**
- * htmlParseScript:
- * @ctxt: an HTML parser context
- *
- * parse the content of an HTML SCRIPT or STYLE element
- * http://www.w3.org/TR/html4/sgml/dtd.html#Script
- * http://www.w3.org/TR/html4/sgml/dtd.html#StyleSheet
- * http://www.w3.org/TR/html4/types.html#type-script
- * http://www.w3.org/TR/html4/types.html#h-6.15
- * http://www.w3.org/TR/html4/appendix/notes.html#h-B.3.2.1
- *
- * Script data ( %Script; in the DTD) can be the content of the SCRIPT
- * element and the value of intrinsic event attributes. User agents must
- * not evaluate script data as HTML markup but instead must pass it on as
- * data to a script engine.
- * NOTES:
- * - The content is passed like CDATA
- * - the attributes for style and scripting "onXXX" are also described
- * as CDATA but SGML allows entities references in attributes so their
- * processing is identical as other attributes
- */
-static void
-htmlParseScript(htmlParserCtxtPtr ctxt) {
- xmlChar buf[HTML_PARSER_BIG_BUFFER_SIZE + 5];
- int nbchar = 0;
- int cur,l;
-
- SHRINK;
- cur = CUR_CHAR(l);
- while (IS_CHAR_CH(cur)) {
- if ((cur == '<') && (NXT(1) == '/')) {
- /*
- * One should break here, the specification is clear:
- * Authors should therefore escape "</" within the content.
- * Escape mechanisms are specific to each scripting or
- * style sheet language.
- *
- * In recovery mode, only break if end tag match the
- * current tag, effectively ignoring all tags inside the
- * script/style block and treating the entire block as
- * CDATA.
- */
- if (ctxt->recovery) {
- if (xmlStrncasecmp(ctxt->name, ctxt->input->cur+2,
- xmlStrlen(ctxt->name)) == 0)
- {
- break; /* while */
- } else {
- htmlParseErr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
- "Element %s embeds close tag\n",
- ctxt->name, NULL);
- }
- } else {
- if (((NXT(2) >= 'A') && (NXT(2) <= 'Z')) ||
- ((NXT(2) >= 'a') && (NXT(2) <= 'z')))
- {
- break; /* while */
- }
- }
- }
- COPY_BUF(l,buf,nbchar,cur);
- if (nbchar >= HTML_PARSER_BIG_BUFFER_SIZE) {
- if (ctxt->sax->cdataBlock!= NULL) {
- /*
- * Insert as CDATA, which is the same as HTML_PRESERVE_NODE
- */
- ctxt->sax->cdataBlock(ctxt->userData, buf, nbchar);
- } else if (ctxt->sax->characters != NULL) {
- ctxt->sax->characters(ctxt->userData, buf, nbchar);
- }
- nbchar = 0;
- }
- GROW;
- NEXTL(l);
- cur = CUR_CHAR(l);
- }
-
- if ((!(IS_CHAR_CH(cur))) && (!((cur == 0) && (ctxt->progressive)))) {
- htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
- "Invalid char in CDATA 0x%X\n", cur);
- if (ctxt->input->cur < ctxt->input->end) {
- NEXT;
- }
- }
-
- if ((nbchar != 0) && (ctxt->sax != NULL) && (!ctxt->disableSAX)) {
- if (ctxt->sax->cdataBlock!= NULL) {
- /*
- * Insert as CDATA, which is the same as HTML_PRESERVE_NODE
- */
- ctxt->sax->cdataBlock(ctxt->userData, buf, nbchar);
- } else if (ctxt->sax->characters != NULL) {
- ctxt->sax->characters(ctxt->userData, buf, nbchar);
- }
- }
-}
-
-
-/**
- * htmlParseCharDataInternal:
- * @ctxt: an HTML parser context
- * @readahead: optional read ahead character in ascii range
- *
- * parse a CharData section.
- * if we are within a CDATA section ']]>' marks an end of section.
- *
- * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
- */
-
-static void
-htmlParseCharDataInternal(htmlParserCtxtPtr ctxt, int readahead) {
- xmlChar buf[HTML_PARSER_BIG_BUFFER_SIZE + 6];
- int nbchar = 0;
- int cur, l;
- int chunk = 0;
-
- if (readahead)
- buf[nbchar++] = readahead;
-
- SHRINK;
- cur = CUR_CHAR(l);
- while (((cur != '<') || (ctxt->token == '<')) &&
- ((cur != '&') || (ctxt->token == '&')) &&
- (cur != 0)) {
- if (!(IS_CHAR(cur))) {
- htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
- "Invalid char in CDATA 0x%X\n", cur);
- } else {
- COPY_BUF(l,buf,nbchar,cur);
- }
- if (nbchar >= HTML_PARSER_BIG_BUFFER_SIZE) {
- /*
- * Ok the segment is to be consumed as chars.
- */
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
- if (areBlanks(ctxt, buf, nbchar)) {
- if (ctxt->keepBlanks) {
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData, buf, nbchar);
- } else {
- if (ctxt->sax->ignorableWhitespace != NULL)
- ctxt->sax->ignorableWhitespace(ctxt->userData,
- buf, nbchar);
- }
- } else {
- htmlCheckParagraph(ctxt);
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData, buf, nbchar);
- }
- }
- nbchar = 0;
- }
- NEXTL(l);
- chunk++;
- if (chunk > HTML_PARSER_BUFFER_SIZE) {
- chunk = 0;
- SHRINK;
- GROW;
- }
- cur = CUR_CHAR(l);
- if (cur == 0) {
- SHRINK;
- GROW;
- cur = CUR_CHAR(l);
- }
- }
- if (nbchar != 0) {
- buf[nbchar] = 0;
-
- /*
- * Ok the segment is to be consumed as chars.
- */
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
- if (areBlanks(ctxt, buf, nbchar)) {
- if (ctxt->keepBlanks) {
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData, buf, nbchar);
- } else {
- if (ctxt->sax->ignorableWhitespace != NULL)
- ctxt->sax->ignorableWhitespace(ctxt->userData,
- buf, nbchar);
- }
- } else {
- htmlCheckParagraph(ctxt);
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData, buf, nbchar);
- }
- }
- } else {
- /*
- * Loop detection
- */
- if (cur == 0)
- ctxt->instate = XML_PARSER_EOF;
- }
-}
-
-/**
- * htmlParseCharData:
- * @ctxt: an HTML parser context
- *
- * parse a CharData section.
- * if we are within a CDATA section ']]>' marks an end of section.
- *
- * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
- */
-
-static void
-htmlParseCharData(htmlParserCtxtPtr ctxt) {
- htmlParseCharDataInternal(ctxt, 0);
-}
-
-/**
- * htmlParseExternalID:
- * @ctxt: an HTML parser context
- * @publicID: a xmlChar** receiving PubidLiteral
- *
- * Parse an External ID or a Public ID
- *
- * [75] ExternalID ::= 'SYSTEM' S SystemLiteral
- * | 'PUBLIC' S PubidLiteral S SystemLiteral
- *
- * [83] PublicID ::= 'PUBLIC' S PubidLiteral
- *
- * Returns the function returns SystemLiteral and in the second
- * case publicID receives PubidLiteral, is strict is off
- * it is possible to return NULL and have publicID set.
- */
-
-static xmlChar *
-htmlParseExternalID(htmlParserCtxtPtr ctxt, xmlChar **publicID) {
- xmlChar *URI = NULL;
-
- if ((UPPER == 'S') && (UPP(1) == 'Y') &&
- (UPP(2) == 'S') && (UPP(3) == 'T') &&
- (UPP(4) == 'E') && (UPP(5) == 'M')) {
- SKIP(6);
- if (!IS_BLANK_CH(CUR)) {
- htmlParseErr(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after 'SYSTEM'\n", NULL, NULL);
- }
- SKIP_BLANKS;
- URI = htmlParseSystemLiteral(ctxt);
- if (URI == NULL) {
- htmlParseErr(ctxt, XML_ERR_URI_REQUIRED,
- "htmlParseExternalID: SYSTEM, no URI\n", NULL, NULL);
- }
- } else if ((UPPER == 'P') && (UPP(1) == 'U') &&
- (UPP(2) == 'B') && (UPP(3) == 'L') &&
- (UPP(4) == 'I') && (UPP(5) == 'C')) {
- SKIP(6);
- if (!IS_BLANK_CH(CUR)) {
- htmlParseErr(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after 'PUBLIC'\n", NULL, NULL);
- }
- SKIP_BLANKS;
- *publicID = htmlParsePubidLiteral(ctxt);
- if (*publicID == NULL) {
- htmlParseErr(ctxt, XML_ERR_PUBID_REQUIRED,
- "htmlParseExternalID: PUBLIC, no Public Identifier\n",
- NULL, NULL);
- }
- SKIP_BLANKS;
- if ((CUR == '"') || (CUR == '\'')) {
- URI = htmlParseSystemLiteral(ctxt);
- }
- }
- return(URI);
-}
-
-/**
- * xmlParsePI:
- * @ctxt: an XML parser context
- *
- * parse an XML Processing Instruction.
- *
- * [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
- */
-static void
-htmlParsePI(htmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- int len = 0;
- int size = HTML_PARSER_BUFFER_SIZE;
- int cur, l;
- const xmlChar *target;
- xmlParserInputState state;
- int count = 0;
-
- if ((RAW == '<') && (NXT(1) == '?')) {
- state = ctxt->instate;
- ctxt->instate = XML_PARSER_PI;
- /*
- * this is a Processing Instruction.
- */
- SKIP(2);
- SHRINK;
-
- /*
- * Parse the target name and check for special support like
- * namespace.
- */
- target = htmlParseName(ctxt);
- if (target != NULL) {
- if (RAW == '>') {
- SKIP(1);
-
- /*
- * SAX: PI detected.
- */
- if ((ctxt->sax) && (!ctxt->disableSAX) &&
- (ctxt->sax->processingInstruction != NULL))
- ctxt->sax->processingInstruction(ctxt->userData,
- target, NULL);
- ctxt->instate = state;
- return;
- }
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- htmlErrMemory(ctxt, NULL);
- ctxt->instate = state;
- return;
- }
- cur = CUR;
- if (!IS_BLANK(cur)) {
- htmlParseErr(ctxt, XML_ERR_SPACE_REQUIRED,
- "ParsePI: PI %s space expected\n", target, NULL);
- }
- SKIP_BLANKS;
- cur = CUR_CHAR(l);
- while (IS_CHAR(cur) && (cur != '>')) {
- if (len + 5 >= size) {
- xmlChar *tmp;
-
- size *= 2;
- tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
- if (tmp == NULL) {
- htmlErrMemory(ctxt, NULL);
- xmlFree(buf);
- ctxt->instate = state;
- return;
- }
- buf = tmp;
- }
- count++;
- if (count > 50) {
- GROW;
- count = 0;
- }
- COPY_BUF(l,buf,len,cur);
- NEXTL(l);
- cur = CUR_CHAR(l);
- if (cur == 0) {
- SHRINK;
- GROW;
- cur = CUR_CHAR(l);
- }
- }
- buf[len] = 0;
- if (cur != '>') {
- htmlParseErr(ctxt, XML_ERR_PI_NOT_FINISHED,
- "ParsePI: PI %s never end ...\n", target, NULL);
- } else {
- SKIP(1);
-
- /*
- * SAX: PI detected.
- */
- if ((ctxt->sax) && (!ctxt->disableSAX) &&
- (ctxt->sax->processingInstruction != NULL))
- ctxt->sax->processingInstruction(ctxt->userData,
- target, buf);
- }
- xmlFree(buf);
- } else {
- htmlParseErr(ctxt, XML_ERR_PI_NOT_STARTED,
- "PI is not started correctly", NULL, NULL);
- }
- ctxt->instate = state;
- }
-}
-
-/**
- * htmlParseComment:
- * @ctxt: an HTML parser context
- *
- * Parse an XML (SGML) comment <!-- .... -->
- *
- * [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
- */
-static void
-htmlParseComment(htmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- int len;
- int size = HTML_PARSER_BUFFER_SIZE;
- int q, ql;
- int r, rl;
- int cur, l;
- xmlParserInputState state;
-
- /*
- * Check that there is a comment right here.
- */
- if ((RAW != '<') || (NXT(1) != '!') ||
- (NXT(2) != '-') || (NXT(3) != '-')) return;
-
- state = ctxt->instate;
- ctxt->instate = XML_PARSER_COMMENT;
- SHRINK;
- SKIP(4);
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- htmlErrMemory(ctxt, "buffer allocation failed\n");
- ctxt->instate = state;
- return;
- }
- len = 0;
- buf[len] = 0;
- q = CUR_CHAR(ql);
- if (!IS_CHAR(q))
- goto unfinished;
- NEXTL(ql);
- r = CUR_CHAR(rl);
- if (!IS_CHAR(r))
- goto unfinished;
- NEXTL(rl);
- cur = CUR_CHAR(l);
- while (IS_CHAR(cur) &&
- ((cur != '>') ||
- (r != '-') || (q != '-'))) {
- if (len + 5 >= size) {
- xmlChar *tmp;
-
- size *= 2;
- tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlFree(buf);
- htmlErrMemory(ctxt, "growing buffer failed\n");
- ctxt->instate = state;
- return;
- }
- buf = tmp;
- }
- COPY_BUF(ql,buf,len,q);
- q = r;
- ql = rl;
- r = cur;
- rl = l;
- NEXTL(l);
- cur = CUR_CHAR(l);
- if (cur == 0) {
- SHRINK;
- GROW;
- cur = CUR_CHAR(l);
- }
- }
- buf[len] = 0;
- if (IS_CHAR(cur)) {
- NEXT;
- if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->comment(ctxt->userData, buf);
- xmlFree(buf);
- ctxt->instate = state;
- return;
- }
-
-unfinished:
- htmlParseErr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
- "Comment not terminated \n<!--%.50s\n", buf, NULL);
- xmlFree(buf);
-}
-
-/**
- * htmlParseCharRef:
- * @ctxt: an HTML parser context
- *
- * parse Reference declarations
- *
- * [66] CharRef ::= '&#' [0-9]+ ';' |
- * '&#x' [0-9a-fA-F]+ ';'
- *
- * Returns the value parsed (as an int)
- */
-int
-htmlParseCharRef(htmlParserCtxtPtr ctxt) {
- int val = 0;
-
- if ((ctxt == NULL) || (ctxt->input == NULL)) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "htmlParseCharRef: context error\n",
- NULL, NULL);
- return(0);
- }
- if ((CUR == '&') && (NXT(1) == '#') &&
- ((NXT(2) == 'x') || NXT(2) == 'X')) {
- SKIP(3);
- while (CUR != ';') {
- if ((CUR >= '0') && (CUR <= '9'))
- val = val * 16 + (CUR - '0');
- else if ((CUR >= 'a') && (CUR <= 'f'))
- val = val * 16 + (CUR - 'a') + 10;
- else if ((CUR >= 'A') && (CUR <= 'F'))
- val = val * 16 + (CUR - 'A') + 10;
- else {
- htmlParseErr(ctxt, XML_ERR_INVALID_HEX_CHARREF,
- "htmlParseCharRef: missing semicolon\n",
- NULL, NULL);
- break;
- }
- NEXT;
- }
- if (CUR == ';')
- NEXT;
- } else if ((CUR == '&') && (NXT(1) == '#')) {
- SKIP(2);
- while (CUR != ';') {
- if ((CUR >= '0') && (CUR <= '9'))
- val = val * 10 + (CUR - '0');
- else {
- htmlParseErr(ctxt, XML_ERR_INVALID_DEC_CHARREF,
- "htmlParseCharRef: missing semicolon\n",
- NULL, NULL);
- break;
- }
- NEXT;
- }
- if (CUR == ';')
- NEXT;
- } else {
- htmlParseErr(ctxt, XML_ERR_INVALID_CHARREF,
- "htmlParseCharRef: invalid value\n", NULL, NULL);
- }
- /*
- * Check the value IS_CHAR ...
- */
- if (IS_CHAR(val)) {
- return(val);
- } else {
- htmlParseErrInt(ctxt, XML_ERR_INVALID_CHAR,
- "htmlParseCharRef: invalid xmlChar value %d\n",
- val);
- }
- return(0);
-}
-
-
-/**
- * htmlParseDocTypeDecl:
- * @ctxt: an HTML parser context
- *
- * parse a DOCTYPE declaration
- *
- * [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S?
- * ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
- */
-
-static void
-htmlParseDocTypeDecl(htmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- xmlChar *ExternalID = NULL;
- xmlChar *URI = NULL;
-
- /*
- * We know that '<!DOCTYPE' has been detected.
- */
- SKIP(9);
-
- SKIP_BLANKS;
-
- /*
- * Parse the DOCTYPE name.
- */
- name = htmlParseName(ctxt);
- if (name == NULL) {
- htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
- "htmlParseDocTypeDecl : no DOCTYPE name !\n",
- NULL, NULL);
- }
- /*
- * Check that upper(name) == "HTML" !!!!!!!!!!!!!
- */
-
- SKIP_BLANKS;
-
- /*
- * Check for SystemID and ExternalID
- */
- URI = htmlParseExternalID(ctxt, &ExternalID);
- SKIP_BLANKS;
-
- /*
- * We should be at the end of the DOCTYPE declaration.
- */
- if (CUR != '>') {
- htmlParseErr(ctxt, XML_ERR_DOCTYPE_NOT_FINISHED,
- "DOCTYPE improperly terminated\n", NULL, NULL);
- /* We shouldn't try to resynchronize ... */
- }
- NEXT;
-
- /*
- * Create or update the document accordingly to the DOCTYPE
- */
- if ((ctxt->sax != NULL) && (ctxt->sax->internalSubset != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->internalSubset(ctxt->userData, name, ExternalID, URI);
-
- /*
- * Cleanup, since we don't use all those identifiers
- */
- if (URI != NULL) xmlFree(URI);
- if (ExternalID != NULL) xmlFree(ExternalID);
-}
-
-/**
- * htmlParseAttribute:
- * @ctxt: an HTML parser context
- * @value: a xmlChar ** used to store the value of the attribute
- *
- * parse an attribute
- *
- * [41] Attribute ::= Name Eq AttValue
- *
- * [25] Eq ::= S? '=' S?
- *
- * With namespace:
- *
- * [NS 11] Attribute ::= QName Eq AttValue
- *
- * Also the case QName == xmlns:??? is handled independently as a namespace
- * definition.
- *
- * Returns the attribute name, and the value in *value.
- */
-
-static const xmlChar *
-htmlParseAttribute(htmlParserCtxtPtr ctxt, xmlChar **value) {
- const xmlChar *name;
- xmlChar *val = NULL;
-
- *value = NULL;
- name = htmlParseHTMLName(ctxt);
- if (name == NULL) {
- htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
- "error parsing attribute name\n", NULL, NULL);
- return(NULL);
- }
-
- /*
- * read the value
- */
- SKIP_BLANKS;
- if (CUR == '=') {
- NEXT;
- SKIP_BLANKS;
- val = htmlParseAttValue(ctxt);
- }
-
- *value = val;
- return(name);
-}
-
-/**
- * htmlCheckEncodingDirect:
- * @ctxt: an HTML parser context
- * @attvalue: the attribute value
- *
- * Checks an attribute value to detect
- * the encoding
- * If a new encoding is detected the parser is switched to decode
- * it and pass UTF8
- */
-static void
-htmlCheckEncodingDirect(htmlParserCtxtPtr ctxt, const xmlChar *encoding) {
-
- if ((ctxt == NULL) || (encoding == NULL) ||
- (ctxt->options & HTML_PARSE_IGNORE_ENC))
- return;
-
- /* do not change encoding */
- if (ctxt->input->encoding != NULL)
- return;
-
- if (encoding != NULL) {
- xmlCharEncoding enc;
- xmlCharEncodingHandlerPtr handler;
-
- while ((*encoding == ' ') || (*encoding == '\t')) encoding++;
-
- if (ctxt->input->encoding != NULL)
- xmlFree((xmlChar *) ctxt->input->encoding);
- ctxt->input->encoding = xmlStrdup(encoding);
-
- enc = xmlParseCharEncoding((const char *) encoding);
- /*
- * registered set of known encodings
- */
- if (enc != XML_CHAR_ENCODING_ERROR) {
- if (((enc == XML_CHAR_ENCODING_UTF16LE) ||
- (enc == XML_CHAR_ENCODING_UTF16BE) ||
- (enc == XML_CHAR_ENCODING_UCS4LE) ||
- (enc == XML_CHAR_ENCODING_UCS4BE)) &&
- (ctxt->input->buf != NULL) &&
- (ctxt->input->buf->encoder == NULL)) {
- htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
- "htmlCheckEncoding: wrong encoding meta\n",
- NULL, NULL);
- } else {
- xmlSwitchEncoding(ctxt, enc);
- }
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- } else {
- /*
- * fallback for unknown encodings
- */
- handler = xmlFindCharEncodingHandler((const char *) encoding);
- if (handler != NULL) {
- xmlSwitchToEncoding(ctxt, handler);
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- } else {
- htmlParseErr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "htmlCheckEncoding: unknown encoding %s\n",
- encoding, NULL);
- }
- }
-
- if ((ctxt->input->buf != NULL) &&
- (ctxt->input->buf->encoder != NULL) &&
- (ctxt->input->buf->raw != NULL) &&
- (ctxt->input->buf->buffer != NULL)) {
- int nbchars;
- int processed;
-
- /*
- * convert as much as possible to the parser reading buffer.
- */
- processed = ctxt->input->cur - ctxt->input->base;
- xmlBufShrink(ctxt->input->buf->buffer, processed);
- nbchars = xmlCharEncInput(ctxt->input->buf, 1);
- if (nbchars < 0) {
- htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
- "htmlCheckEncoding: encoder error\n",
- NULL, NULL);
- }
- xmlBufResetInput(ctxt->input->buf->buffer, ctxt->input);
- }
- }
-}
-
-/**
- * htmlCheckEncoding:
- * @ctxt: an HTML parser context
- * @attvalue: the attribute value
- *
- * Checks an http-equiv attribute from a Meta tag to detect
- * the encoding
- * If a new encoding is detected the parser is switched to decode
- * it and pass UTF8
- */
-static void
-htmlCheckEncoding(htmlParserCtxtPtr ctxt, const xmlChar *attvalue) {
- const xmlChar *encoding;
-
- if (!attvalue)
- return;
-
- encoding = xmlStrcasestr(attvalue, BAD_CAST"charset");
- if (encoding != NULL) {
- encoding += 7;
- }
- /*
- * skip blank
- */
- if (encoding && IS_BLANK_CH(*encoding))
- encoding = xmlStrcasestr(attvalue, BAD_CAST"=");
- if (encoding && *encoding == '=') {
- encoding ++;
- htmlCheckEncodingDirect(ctxt, encoding);
- }
-}
-
-/**
- * htmlCheckMeta:
- * @ctxt: an HTML parser context
- * @atts: the attributes values
- *
- * Checks an attributes from a Meta tag
- */
-static void
-htmlCheckMeta(htmlParserCtxtPtr ctxt, const xmlChar **atts) {
- int i;
- const xmlChar *att, *value;
- int http = 0;
- const xmlChar *content = NULL;
-
- if ((ctxt == NULL) || (atts == NULL))
- return;
-
- i = 0;
- att = atts[i++];
- while (att != NULL) {
- value = atts[i++];
- if ((value != NULL) && (!xmlStrcasecmp(att, BAD_CAST"http-equiv"))
- && (!xmlStrcasecmp(value, BAD_CAST"Content-Type")))
- http = 1;
- else if ((value != NULL) && (!xmlStrcasecmp(att, BAD_CAST"charset")))
- htmlCheckEncodingDirect(ctxt, value);
- else if ((value != NULL) && (!xmlStrcasecmp(att, BAD_CAST"content")))
- content = value;
- att = atts[i++];
- }
- if ((http) && (content != NULL))
- htmlCheckEncoding(ctxt, content);
-
-}
-
-/**
- * htmlParseStartTag:
- * @ctxt: an HTML parser context
- *
- * parse a start of tag either for rule element or
- * EmptyElement. In both case we don't parse the tag closing chars.
- *
- * [40] STag ::= '<' Name (S Attribute)* S? '>'
- *
- * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
- *
- * With namespace:
- *
- * [NS 8] STag ::= '<' QName (S Attribute)* S? '>'
- *
- * [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>'
- *
- * Returns 0 in case of success, -1 in case of error and 1 if discarded
- */
-
-static int
-htmlParseStartTag(htmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- const xmlChar *attname;
- xmlChar *attvalue;
- const xmlChar **atts;
- int nbatts = 0;
- int maxatts;
- int meta = 0;
- int i;
- int discardtag = 0;
-
- if ((ctxt == NULL) || (ctxt->input == NULL)) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "htmlParseStartTag: context error\n", NULL, NULL);
- return -1;
- }
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
- if (CUR != '<') return -1;
- NEXT;
-
- atts = ctxt->atts;
- maxatts = ctxt->maxatts;
-
- GROW;
- name = htmlParseHTMLName(ctxt);
- if (name == NULL) {
- htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
- "htmlParseStartTag: invalid element name\n",
- NULL, NULL);
- /* if recover preserve text on classic misconstructs */
- if ((ctxt->recovery) && ((IS_BLANK_CH(CUR)) || (CUR == '<') ||
- (CUR == '=') || (CUR == '>') || (((CUR >= '0') && (CUR <= '9'))))) {
- htmlParseCharDataInternal(ctxt, '<');
- return(-1);
- }
-
-
- /* Dump the bogus tag like browsers do */
- while ((IS_CHAR_CH(CUR)) && (CUR != '>') &&
- (ctxt->instate != XML_PARSER_EOF))
- NEXT;
- return -1;
- }
- if (xmlStrEqual(name, BAD_CAST"meta"))
- meta = 1;
-
- /*
- * Check for auto-closure of HTML elements.
- */
- htmlAutoClose(ctxt, name);
-
- /*
- * Check for implied HTML elements.
- */
- htmlCheckImplied(ctxt, name);
-
- /*
- * Avoid html at any level > 0, head at any level != 1
- * or any attempt to recurse body
- */
- if ((ctxt->nameNr > 0) && (xmlStrEqual(name, BAD_CAST"html"))) {
- htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
- "htmlParseStartTag: misplaced <html> tag\n",
- name, NULL);
- discardtag = 1;
- ctxt->depth++;
- }
- if ((ctxt->nameNr != 1) &&
- (xmlStrEqual(name, BAD_CAST"head"))) {
- htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
- "htmlParseStartTag: misplaced <head> tag\n",
- name, NULL);
- discardtag = 1;
- ctxt->depth++;
- }
- if (xmlStrEqual(name, BAD_CAST"body")) {
- int indx;
- for (indx = 0;indx < ctxt->nameNr;indx++) {
- if (xmlStrEqual(ctxt->nameTab[indx], BAD_CAST"body")) {
- htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
- "htmlParseStartTag: misplaced <body> tag\n",
- name, NULL);
- discardtag = 1;
- ctxt->depth++;
- }
- }
- }
-
- /*
- * Now parse the attributes, it ends up with the ending
- *
- * (S Attribute)* S?
- */
- SKIP_BLANKS;
- while ((IS_CHAR_CH(CUR)) &&
- (CUR != '>') &&
- ((CUR != '/') || (NXT(1) != '>'))) {
- long cons = ctxt->nbChars;
-
- GROW;
- attname = htmlParseAttribute(ctxt, &attvalue);
- if (attname != NULL) {
-
- /*
- * Well formedness requires at most one declaration of an attribute
- */
- for (i = 0; i < nbatts;i += 2) {
- if (xmlStrEqual(atts[i], attname)) {
- htmlParseErr(ctxt, XML_ERR_ATTRIBUTE_REDEFINED,
- "Attribute %s redefined\n", attname, NULL);
- if (attvalue != NULL)
- xmlFree(attvalue);
- goto failed;
- }
- }
-
- /*
- * Add the pair to atts
- */
- if (atts == NULL) {
- maxatts = 22; /* allow for 10 attrs by default */
- atts = (const xmlChar **)
- xmlMalloc(maxatts * sizeof(xmlChar *));
- if (atts == NULL) {
- htmlErrMemory(ctxt, NULL);
- if (attvalue != NULL)
- xmlFree(attvalue);
- goto failed;
- }
- ctxt->atts = atts;
- ctxt->maxatts = maxatts;
- } else if (nbatts + 4 > maxatts) {
- const xmlChar **n;
-
- maxatts *= 2;
- n = (const xmlChar **) xmlRealloc((void *) atts,
- maxatts * sizeof(const xmlChar *));
- if (n == NULL) {
- htmlErrMemory(ctxt, NULL);
- if (attvalue != NULL)
- xmlFree(attvalue);
- goto failed;
- }
- atts = n;
- ctxt->atts = atts;
- ctxt->maxatts = maxatts;
- }
- atts[nbatts++] = attname;
- atts[nbatts++] = attvalue;
- atts[nbatts] = NULL;
- atts[nbatts + 1] = NULL;
- }
- else {
- if (attvalue != NULL)
- xmlFree(attvalue);
- /* Dump the bogus attribute string up to the next blank or
- * the end of the tag. */
- while ((IS_CHAR_CH(CUR)) &&
- !(IS_BLANK_CH(CUR)) && (CUR != '>') &&
- ((CUR != '/') || (NXT(1) != '>')))
- NEXT;
- }
-
-failed:
- SKIP_BLANKS;
- if (cons == ctxt->nbChars) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "htmlParseStartTag: problem parsing attributes\n",
- NULL, NULL);
- break;
- }
- }
-
- /*
- * Handle specific association to the META tag
- */
- if (meta && (nbatts != 0))
- htmlCheckMeta(ctxt, atts);
-
- /*
- * SAX: Start of Element !
- */
- if (!discardtag) {
- htmlnamePush(ctxt, name);
- if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL)) {
- if (nbatts != 0)
- ctxt->sax->startElement(ctxt->userData, name, atts);
- else
- ctxt->sax->startElement(ctxt->userData, name, NULL);
- }
- }
-
- if (atts != NULL) {
- for (i = 1;i < nbatts;i += 2) {
- if (atts[i] != NULL)
- xmlFree((xmlChar *) atts[i]);
- }
- }
-
- return(discardtag);
-}
-
-/**
- * htmlParseEndTag:
- * @ctxt: an HTML parser context
- *
- * parse an end of tag
- *
- * [42] ETag ::= '</' Name S? '>'
- *
- * With namespace
- *
- * [NS 9] ETag ::= '</' QName S? '>'
- *
- * Returns 1 if the current level should be closed.
- */
-
-static int
-htmlParseEndTag(htmlParserCtxtPtr ctxt)
-{
- const xmlChar *name;
- const xmlChar *oldname;
- int i, ret;
-
- if ((CUR != '<') || (NXT(1) != '/')) {
- htmlParseErr(ctxt, XML_ERR_LTSLASH_REQUIRED,
- "htmlParseEndTag: '</' not found\n", NULL, NULL);
- return (0);
- }
- SKIP(2);
-
- name = htmlParseHTMLName(ctxt);
- if (name == NULL)
- return (0);
- /*
- * We should definitely be at the ending "S? '>'" part
- */
- SKIP_BLANKS;
- if ((!IS_CHAR_CH(CUR)) || (CUR != '>')) {
- htmlParseErr(ctxt, XML_ERR_GT_REQUIRED,
- "End tag : expected '>'\n", NULL, NULL);
- if (ctxt->recovery) {
- /*
- * We're not at the ending > !!
- * Error, unless in recover mode where we search forwards
- * until we find a >
- */
- while (CUR != '\0' && CUR != '>') NEXT;
- NEXT;
- }
- } else
- NEXT;
-
- /*
- * if we ignored misplaced tags in htmlParseStartTag don't pop them
- * out now.
- */
- if ((ctxt->depth > 0) &&
- (xmlStrEqual(name, BAD_CAST "html") ||
- xmlStrEqual(name, BAD_CAST "body") ||
- xmlStrEqual(name, BAD_CAST "head"))) {
- ctxt->depth--;
- return (0);
- }
-
- /*
- * If the name read is not one of the element in the parsing stack
- * then return, it's just an error.
- */
- for (i = (ctxt->nameNr - 1); i >= 0; i--) {
- if (xmlStrEqual(name, ctxt->nameTab[i]))
- break;
- }
- if (i < 0) {
- htmlParseErr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
- "Unexpected end tag : %s\n", name, NULL);
- return (0);
- }
-
-
- /*
- * Check for auto-closure of HTML elements.
- */
-
- htmlAutoCloseOnClose(ctxt, name);
-
- /*
- * Well formedness constraints, opening and closing must match.
- * With the exception that the autoclose may have popped stuff out
- * of the stack.
- */
- if (!xmlStrEqual(name, ctxt->name)) {
- if ((ctxt->name != NULL) && (!xmlStrEqual(ctxt->name, name))) {
- htmlParseErr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
- "Opening and ending tag mismatch: %s and %s\n",
- name, ctxt->name);
- }
- }
-
- /*
- * SAX: End of Tag
- */
- oldname = ctxt->name;
- if ((oldname != NULL) && (xmlStrEqual(oldname, name))) {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, name);
- htmlNodeInfoPop(ctxt);
- htmlnamePop(ctxt);
- ret = 1;
- } else {
- ret = 0;
- }
-
- return (ret);
-}
-
-
-/**
- * htmlParseReference:
- * @ctxt: an HTML parser context
- *
- * parse and handle entity references in content,
- * this will end-up in a call to character() since this is either a
- * CharRef, or a predefined entity.
- */
-static void
-htmlParseReference(htmlParserCtxtPtr ctxt) {
- const htmlEntityDesc * ent;
- xmlChar out[6];
- const xmlChar *name;
- if (CUR != '&') return;
-
- if (NXT(1) == '#') {
- unsigned int c;
- int bits, i = 0;
-
- c = htmlParseCharRef(ctxt);
- if (c == 0)
- return;
-
- if (c < 0x80) { out[i++]= c; bits= -6; }
- else if (c < 0x800) { out[i++]=((c >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (c < 0x10000) { out[i++]=((c >> 12) & 0x0F) | 0xE0; bits= 6; }
- else { out[i++]=((c >> 18) & 0x07) | 0xF0; bits= 12; }
-
- for ( ; bits >= 0; bits-= 6) {
- out[i++]= ((c >> bits) & 0x3F) | 0x80;
- }
- out[i] = 0;
-
- htmlCheckParagraph(ctxt);
- if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL))
- ctxt->sax->characters(ctxt->userData, out, i);
- } else {
- ent = htmlParseEntityRef(ctxt, &name);
- if (name == NULL) {
- htmlCheckParagraph(ctxt);
- if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL))
- ctxt->sax->characters(ctxt->userData, BAD_CAST "&", 1);
- return;
- }
- if ((ent == NULL) || !(ent->value > 0)) {
- htmlCheckParagraph(ctxt);
- if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL)) {
- ctxt->sax->characters(ctxt->userData, BAD_CAST "&", 1);
- ctxt->sax->characters(ctxt->userData, name, xmlStrlen(name));
- /* ctxt->sax->characters(ctxt->userData, BAD_CAST ";", 1); */
- }
- } else {
- unsigned int c;
- int bits, i = 0;
-
- c = ent->value;
- if (c < 0x80)
- { out[i++]= c; bits= -6; }
- else if (c < 0x800)
- { out[i++]=((c >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (c < 0x10000)
- { out[i++]=((c >> 12) & 0x0F) | 0xE0; bits= 6; }
- else
- { out[i++]=((c >> 18) & 0x07) | 0xF0; bits= 12; }
-
- for ( ; bits >= 0; bits-= 6) {
- out[i++]= ((c >> bits) & 0x3F) | 0x80;
- }
- out[i] = 0;
-
- htmlCheckParagraph(ctxt);
- if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL))
- ctxt->sax->characters(ctxt->userData, out, i);
- }
- }
-}
-
-/**
- * htmlParseContent:
- * @ctxt: an HTML parser context
- *
- * Parse a content: comment, sub-element, reference or text.
- * Kept for compatibility with old code
- */
-
-static void
-htmlParseContent(htmlParserCtxtPtr ctxt) {
- xmlChar *currentNode;
- int depth;
- const xmlChar *name;
-
- currentNode = xmlStrdup(ctxt->name);
- depth = ctxt->nameNr;
- while (1) {
- long cons = ctxt->nbChars;
-
- GROW;
-
- if (ctxt->instate == XML_PARSER_EOF)
- break;
-
- /*
- * Our tag or one of it's parent or children is ending.
- */
- if ((CUR == '<') && (NXT(1) == '/')) {
- if (htmlParseEndTag(ctxt) &&
- ((currentNode != NULL) || (ctxt->nameNr == 0))) {
- if (currentNode != NULL)
- xmlFree(currentNode);
- return;
- }
- continue; /* while */
- }
-
- else if ((CUR == '<') &&
- ((IS_ASCII_LETTER(NXT(1))) ||
- (NXT(1) == '_') || (NXT(1) == ':'))) {
- name = htmlParseHTMLName_nonInvasive(ctxt);
- if (name == NULL) {
- htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
- "htmlParseStartTag: invalid element name\n",
- NULL, NULL);
- /* Dump the bogus tag like browsers do */
- while ((IS_CHAR_CH(CUR)) && (CUR != '>'))
- NEXT;
-
- if (currentNode != NULL)
- xmlFree(currentNode);
- return;
- }
-
- if (ctxt->name != NULL) {
- if (htmlCheckAutoClose(name, ctxt->name) == 1) {
- htmlAutoClose(ctxt, name);
- continue;
- }
- }
- }
-
- /*
- * Has this node been popped out during parsing of
- * the next element
- */
- if ((ctxt->nameNr > 0) && (depth >= ctxt->nameNr) &&
- (!xmlStrEqual(currentNode, ctxt->name)))
- {
- if (currentNode != NULL) xmlFree(currentNode);
- return;
- }
-
- if ((CUR != 0) && ((xmlStrEqual(currentNode, BAD_CAST"script")) ||
- (xmlStrEqual(currentNode, BAD_CAST"style")))) {
- /*
- * Handle SCRIPT/STYLE separately
- */
- htmlParseScript(ctxt);
- } else {
- /*
- * Sometimes DOCTYPE arrives in the middle of the document
- */
- if ((CUR == '<') && (NXT(1) == '!') &&
- (UPP(2) == 'D') && (UPP(3) == 'O') &&
- (UPP(4) == 'C') && (UPP(5) == 'T') &&
- (UPP(6) == 'Y') && (UPP(7) == 'P') &&
- (UPP(8) == 'E')) {
- htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
- "Misplaced DOCTYPE declaration\n",
- BAD_CAST "DOCTYPE" , NULL);
- htmlParseDocTypeDecl(ctxt);
- }
-
- /*
- * First case : a comment
- */
- if ((CUR == '<') && (NXT(1) == '!') &&
- (NXT(2) == '-') && (NXT(3) == '-')) {
- htmlParseComment(ctxt);
- }
-
- /*
- * Second case : a Processing Instruction.
- */
- else if ((CUR == '<') && (NXT(1) == '?')) {
- htmlParsePI(ctxt);
- }
-
- /*
- * Third case : a sub-element.
- */
- else if (CUR == '<') {
- htmlParseElement(ctxt);
- }
-
- /*
- * Fourth case : a reference. If if has not been resolved,
- * parsing returns it's Name, create the node
- */
- else if (CUR == '&') {
- htmlParseReference(ctxt);
- }
-
- /*
- * Fifth case : end of the resource
- */
- else if (CUR == 0) {
- htmlAutoCloseOnEnd(ctxt);
- break;
- }
-
- /*
- * Last case, text. Note that References are handled directly.
- */
- else {
- htmlParseCharData(ctxt);
- }
-
- if (cons == ctxt->nbChars) {
- if (ctxt->node != NULL) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "detected an error in element content\n",
- NULL, NULL);
- }
- break;
- }
- }
- GROW;
- }
- if (currentNode != NULL) xmlFree(currentNode);
-}
-
-/**
- * htmlParseElement:
- * @ctxt: an HTML parser context
- *
- * parse an HTML element, this is highly recursive
- * this is kept for compatibility with previous code versions
- *
- * [39] element ::= EmptyElemTag | STag content ETag
- *
- * [41] Attribute ::= Name Eq AttValue
- */
-
-void
-htmlParseElement(htmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- xmlChar *currentNode = NULL;
- const htmlElemDesc * info;
- htmlParserNodeInfo node_info;
- int failed;
- int depth;
- const xmlChar *oldptr;
-
- if ((ctxt == NULL) || (ctxt->input == NULL)) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "htmlParseElement: context error\n", NULL, NULL);
- return;
- }
-
- if (ctxt->instate == XML_PARSER_EOF)
- return;
-
- /* Capture start position */
- if (ctxt->record_info) {
- node_info.begin_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.begin_line = ctxt->input->line;
- }
-
- failed = htmlParseStartTag(ctxt);
- name = ctxt->name;
- if ((failed == -1) || (name == NULL)) {
- if (CUR == '>')
- NEXT;
- return;
- }
-
- /*
- * Lookup the info for that element.
- */
- info = htmlTagLookup(name);
- if (info == NULL) {
- htmlParseErr(ctxt, XML_HTML_UNKNOWN_TAG,
- "Tag %s invalid\n", name, NULL);
- }
-
- /*
- * Check for an Empty Element labeled the XML/SGML way
- */
- if ((CUR == '/') && (NXT(1) == '>')) {
- SKIP(2);
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, name);
- htmlnamePop(ctxt);
- return;
- }
-
- if (CUR == '>') {
- NEXT;
- } else {
- htmlParseErr(ctxt, XML_ERR_GT_REQUIRED,
- "Couldn't find end of Start Tag %s\n", name, NULL);
-
- /*
- * end of parsing of this node.
- */
- if (xmlStrEqual(name, ctxt->name)) {
- nodePop(ctxt);
- htmlnamePop(ctxt);
- }
-
- /*
- * Capture end position and add node
- */
- if (ctxt->record_info) {
- node_info.end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.end_line = ctxt->input->line;
- node_info.node = ctxt->node;
- xmlParserAddNodeInfo(ctxt, &node_info);
- }
- return;
- }
-
- /*
- * Check for an Empty Element from DTD definition
- */
- if ((info != NULL) && (info->empty)) {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, name);
- htmlnamePop(ctxt);
- return;
- }
-
- /*
- * Parse the content of the element:
- */
- currentNode = xmlStrdup(ctxt->name);
- depth = ctxt->nameNr;
- while (IS_CHAR_CH(CUR)) {
- oldptr = ctxt->input->cur;
- htmlParseContent(ctxt);
- if (oldptr==ctxt->input->cur) break;
- if (ctxt->nameNr < depth) break;
- }
-
- /*
- * Capture end position and add node
- */
- if ( currentNode != NULL && ctxt->record_info ) {
- node_info.end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.end_line = ctxt->input->line;
- node_info.node = ctxt->node;
- xmlParserAddNodeInfo(ctxt, &node_info);
- }
- if (!IS_CHAR_CH(CUR)) {
- htmlAutoCloseOnEnd(ctxt);
- }
-
- if (currentNode != NULL)
- xmlFree(currentNode);
-}
-
-static void
-htmlParserFinishElementParsing(htmlParserCtxtPtr ctxt) {
- /*
- * Capture end position and add node
- */
- if ( ctxt->node != NULL && ctxt->record_info ) {
- ctxt->nodeInfo->end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- ctxt->nodeInfo->end_line = ctxt->input->line;
- ctxt->nodeInfo->node = ctxt->node;
- xmlParserAddNodeInfo(ctxt, ctxt->nodeInfo);
- htmlNodeInfoPop(ctxt);
- }
- if (!IS_CHAR_CH(CUR)) {
- htmlAutoCloseOnEnd(ctxt);
- }
-}
-
-/**
- * htmlParseElementInternal:
- * @ctxt: an HTML parser context
- *
- * parse an HTML element, new version, non recursive
- *
- * [39] element ::= EmptyElemTag | STag content ETag
- *
- * [41] Attribute ::= Name Eq AttValue
- */
-
-static void
-htmlParseElementInternal(htmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- const htmlElemDesc * info;
- htmlParserNodeInfo node_info = { 0, };
- int failed;
-
- if ((ctxt == NULL) || (ctxt->input == NULL)) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "htmlParseElementInternal: context error\n", NULL, NULL);
- return;
- }
-
- if (ctxt->instate == XML_PARSER_EOF)
- return;
-
- /* Capture start position */
- if (ctxt->record_info) {
- node_info.begin_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.begin_line = ctxt->input->line;
- }
-
- failed = htmlParseStartTag(ctxt);
- name = ctxt->name;
- if ((failed == -1) || (name == NULL)) {
- if (CUR == '>')
- NEXT;
- return;
- }
-
- /*
- * Lookup the info for that element.
- */
- info = htmlTagLookup(name);
- if (info == NULL) {
- htmlParseErr(ctxt, XML_HTML_UNKNOWN_TAG,
- "Tag %s invalid\n", name, NULL);
- }
-
- /*
- * Check for an Empty Element labeled the XML/SGML way
- */
- if ((CUR == '/') && (NXT(1) == '>')) {
- SKIP(2);
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, name);
- htmlnamePop(ctxt);
- return;
- }
-
- if (CUR == '>') {
- NEXT;
- } else {
- htmlParseErr(ctxt, XML_ERR_GT_REQUIRED,
- "Couldn't find end of Start Tag %s\n", name, NULL);
-
- /*
- * end of parsing of this node.
- */
- if (xmlStrEqual(name, ctxt->name)) {
- nodePop(ctxt);
- htmlnamePop(ctxt);
- }
-
- if (ctxt->record_info)
- htmlNodeInfoPush(ctxt, &node_info);
- htmlParserFinishElementParsing(ctxt);
- return;
- }
-
- /*
- * Check for an Empty Element from DTD definition
- */
- if ((info != NULL) && (info->empty)) {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, name);
- htmlnamePop(ctxt);
- return;
- }
-
- if (ctxt->record_info)
- htmlNodeInfoPush(ctxt, &node_info);
-}
-
-/**
- * htmlParseContentInternal:
- * @ctxt: an HTML parser context
- *
- * Parse a content: comment, sub-element, reference or text.
- * New version for non recursive htmlParseElementInternal
- */
-
-static void
-htmlParseContentInternal(htmlParserCtxtPtr ctxt) {
- xmlChar *currentNode;
- int depth;
- const xmlChar *name;
-
- currentNode = xmlStrdup(ctxt->name);
- depth = ctxt->nameNr;
- while (1) {
- long cons = ctxt->nbChars;
-
- GROW;
-
- if (ctxt->instate == XML_PARSER_EOF)
- break;
-
- /*
- * Our tag or one of it's parent or children is ending.
- */
- if ((CUR == '<') && (NXT(1) == '/')) {
- if (htmlParseEndTag(ctxt) &&
- ((currentNode != NULL) || (ctxt->nameNr == 0))) {
- if (currentNode != NULL)
- xmlFree(currentNode);
-
- currentNode = xmlStrdup(ctxt->name);
- depth = ctxt->nameNr;
- }
- continue; /* while */
- }
-
- else if ((CUR == '<') &&
- ((IS_ASCII_LETTER(NXT(1))) ||
- (NXT(1) == '_') || (NXT(1) == ':'))) {
- name = htmlParseHTMLName_nonInvasive(ctxt);
- if (name == NULL) {
- htmlParseErr(ctxt, XML_ERR_NAME_REQUIRED,
- "htmlParseStartTag: invalid element name\n",
- NULL, NULL);
- /* Dump the bogus tag like browsers do */
- while ((IS_CHAR_CH(CUR)) && (CUR != '>'))
- NEXT;
-
- htmlParserFinishElementParsing(ctxt);
- if (currentNode != NULL)
- xmlFree(currentNode);
-
- currentNode = xmlStrdup(ctxt->name);
- depth = ctxt->nameNr;
- continue;
- }
-
- if (ctxt->name != NULL) {
- if (htmlCheckAutoClose(name, ctxt->name) == 1) {
- htmlAutoClose(ctxt, name);
- continue;
- }
- }
- }
-
- /*
- * Has this node been popped out during parsing of
- * the next element
- */
- if ((ctxt->nameNr > 0) && (depth >= ctxt->nameNr) &&
- (!xmlStrEqual(currentNode, ctxt->name)))
- {
- htmlParserFinishElementParsing(ctxt);
- if (currentNode != NULL) xmlFree(currentNode);
-
- currentNode = xmlStrdup(ctxt->name);
- depth = ctxt->nameNr;
- continue;
- }
-
- if ((CUR != 0) && ((xmlStrEqual(currentNode, BAD_CAST"script")) ||
- (xmlStrEqual(currentNode, BAD_CAST"style")))) {
- /*
- * Handle SCRIPT/STYLE separately
- */
- htmlParseScript(ctxt);
- } else {
- /*
- * Sometimes DOCTYPE arrives in the middle of the document
- */
- if ((CUR == '<') && (NXT(1) == '!') &&
- (UPP(2) == 'D') && (UPP(3) == 'O') &&
- (UPP(4) == 'C') && (UPP(5) == 'T') &&
- (UPP(6) == 'Y') && (UPP(7) == 'P') &&
- (UPP(8) == 'E')) {
- htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
- "Misplaced DOCTYPE declaration\n",
- BAD_CAST "DOCTYPE" , NULL);
- htmlParseDocTypeDecl(ctxt);
- }
-
- /*
- * First case : a comment
- */
- if ((CUR == '<') && (NXT(1) == '!') &&
- (NXT(2) == '-') && (NXT(3) == '-')) {
- htmlParseComment(ctxt);
- }
-
- /*
- * Second case : a Processing Instruction.
- */
- else if ((CUR == '<') && (NXT(1) == '?')) {
- htmlParsePI(ctxt);
- }
-
- /*
- * Third case : a sub-element.
- */
- else if (CUR == '<') {
- htmlParseElementInternal(ctxt);
- if (currentNode != NULL) xmlFree(currentNode);
-
- currentNode = xmlStrdup(ctxt->name);
- depth = ctxt->nameNr;
- }
-
- /*
- * Fourth case : a reference. If if has not been resolved,
- * parsing returns it's Name, create the node
- */
- else if (CUR == '&') {
- htmlParseReference(ctxt);
- }
-
- /*
- * Fifth case : end of the resource
- */
- else if (CUR == 0) {
- htmlAutoCloseOnEnd(ctxt);
- break;
- }
-
- /*
- * Last case, text. Note that References are handled directly.
- */
- else {
- htmlParseCharData(ctxt);
- }
-
- if (cons == ctxt->nbChars) {
- if (ctxt->node != NULL) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "detected an error in element content\n",
- NULL, NULL);
- }
- break;
- }
- }
- GROW;
- }
- if (currentNode != NULL) xmlFree(currentNode);
-}
-
-/**
- * htmlParseContent:
- * @ctxt: an HTML parser context
- *
- * Parse a content: comment, sub-element, reference or text.
- * This is the entry point when called from parser.c
- */
-
-void
-__htmlParseContent(void *ctxt) {
- if (ctxt != NULL)
- htmlParseContentInternal((htmlParserCtxtPtr) ctxt);
-}
-
-/**
- * htmlParseDocument:
- * @ctxt: an HTML parser context
- *
- * parse an HTML document (and build a tree if using the standard SAX
- * interface).
- *
- * Returns 0, -1 in case of error. the parser context is augmented
- * as a result of the parsing.
- */
-
-int
-htmlParseDocument(htmlParserCtxtPtr ctxt) {
- xmlChar start[4];
- xmlCharEncoding enc;
- xmlDtdPtr dtd;
-
- xmlInitParser();
-
- htmlDefaultSAXHandlerInit();
-
- if ((ctxt == NULL) || (ctxt->input == NULL)) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "htmlParseDocument: context error\n", NULL, NULL);
- return(XML_ERR_INTERNAL_ERROR);
- }
- ctxt->html = 1;
- ctxt->linenumbers = 1;
- GROW;
- /*
- * SAX: beginning of the document processing.
- */
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
-
- if ((ctxt->encoding == (const xmlChar *)XML_CHAR_ENCODING_NONE) &&
- ((ctxt->input->end - ctxt->input->cur) >= 4)) {
- /*
- * Get the 4 first bytes and decode the charset
- * if enc != XML_CHAR_ENCODING_NONE
- * plug some encoding conversion routines.
- */
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(&start[0], 4);
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
- }
-
- /*
- * Wipe out everything which is before the first '<'
- */
- SKIP_BLANKS;
- if (CUR == 0) {
- htmlParseErr(ctxt, XML_ERR_DOCUMENT_EMPTY,
- "Document is empty\n", NULL, NULL);
- }
-
- if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX))
- ctxt->sax->startDocument(ctxt->userData);
-
-
- /*
- * Parse possible comments and PIs before any content
- */
- while (((CUR == '<') && (NXT(1) == '!') &&
- (NXT(2) == '-') && (NXT(3) == '-')) ||
- ((CUR == '<') && (NXT(1) == '?'))) {
- htmlParseComment(ctxt);
- htmlParsePI(ctxt);
- SKIP_BLANKS;
- }
-
-
- /*
- * Then possibly doc type declaration(s) and more Misc
- * (doctypedecl Misc*)?
- */
- if ((CUR == '<') && (NXT(1) == '!') &&
- (UPP(2) == 'D') && (UPP(3) == 'O') &&
- (UPP(4) == 'C') && (UPP(5) == 'T') &&
- (UPP(6) == 'Y') && (UPP(7) == 'P') &&
- (UPP(8) == 'E')) {
- htmlParseDocTypeDecl(ctxt);
- }
- SKIP_BLANKS;
-
- /*
- * Parse possible comments and PIs before any content
- */
- while (((CUR == '<') && (NXT(1) == '!') &&
- (NXT(2) == '-') && (NXT(3) == '-')) ||
- ((CUR == '<') && (NXT(1) == '?'))) {
- htmlParseComment(ctxt);
- htmlParsePI(ctxt);
- SKIP_BLANKS;
- }
-
- /*
- * Time to start parsing the tree itself
- */
- htmlParseContentInternal(ctxt);
-
- /*
- * autoclose
- */
- if (CUR == 0)
- htmlAutoCloseOnEnd(ctxt);
-
-
- /*
- * SAX: end of the document processing.
- */
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
-
- if ((!(ctxt->options & HTML_PARSE_NODEFDTD)) && (ctxt->myDoc != NULL)) {
- dtd = xmlGetIntSubset(ctxt->myDoc);
- if (dtd == NULL)
- ctxt->myDoc->intSubset =
- xmlCreateIntSubset(ctxt->myDoc, BAD_CAST "html",
- BAD_CAST "-//W3C//DTD HTML 4.0 Transitional//EN",
- BAD_CAST "http://www.w3.org/TR/REC-html40/loose.dtd");
- }
- if (! ctxt->wellFormed) return(-1);
- return(0);
-}
-
-
-/************************************************************************
- * *
- * Parser contexts handling *
- * *
- ************************************************************************/
-
-/**
- * htmlInitParserCtxt:
- * @ctxt: an HTML parser context
- *
- * Initialize a parser context
- *
- * Returns 0 in case of success and -1 in case of error
- */
-
-static int
-htmlInitParserCtxt(htmlParserCtxtPtr ctxt)
-{
- htmlSAXHandler *sax;
-
- if (ctxt == NULL) return(-1);
- memset(ctxt, 0, sizeof(htmlParserCtxt));
-
- ctxt->dict = xmlDictCreate();
- if (ctxt->dict == NULL) {
- htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
- return(-1);
- }
- sax = (htmlSAXHandler *) xmlMalloc(sizeof(htmlSAXHandler));
- if (sax == NULL) {
- htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
- return(-1);
- }
- else
- memset(sax, 0, sizeof(htmlSAXHandler));
-
- /* Allocate the Input stack */
- ctxt->inputTab = (htmlParserInputPtr *)
- xmlMalloc(5 * sizeof(htmlParserInputPtr));
- if (ctxt->inputTab == NULL) {
- htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
- ctxt->inputNr = 0;
- ctxt->inputMax = 0;
- ctxt->input = NULL;
- return(-1);
- }
- ctxt->inputNr = 0;
- ctxt->inputMax = 5;
- ctxt->input = NULL;
- ctxt->version = NULL;
- ctxt->encoding = NULL;
- ctxt->standalone = -1;
- ctxt->instate = XML_PARSER_START;
-
- /* Allocate the Node stack */
- ctxt->nodeTab = (htmlNodePtr *) xmlMalloc(10 * sizeof(htmlNodePtr));
- if (ctxt->nodeTab == NULL) {
- htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
- ctxt->nodeNr = 0;
- ctxt->nodeMax = 0;
- ctxt->node = NULL;
- ctxt->inputNr = 0;
- ctxt->inputMax = 0;
- ctxt->input = NULL;
- return(-1);
- }
- ctxt->nodeNr = 0;
- ctxt->nodeMax = 10;
- ctxt->node = NULL;
-
- /* Allocate the Name stack */
- ctxt->nameTab = (const xmlChar **) xmlMalloc(10 * sizeof(xmlChar *));
- if (ctxt->nameTab == NULL) {
- htmlErrMemory(NULL, "htmlInitParserCtxt: out of memory\n");
- ctxt->nameNr = 0;
- ctxt->nameMax = 0;
- ctxt->name = NULL;
- ctxt->nodeNr = 0;
- ctxt->nodeMax = 0;
- ctxt->node = NULL;
- ctxt->inputNr = 0;
- ctxt->inputMax = 0;
- ctxt->input = NULL;
- return(-1);
- }
- ctxt->nameNr = 0;
- ctxt->nameMax = 10;
- ctxt->name = NULL;
-
- ctxt->nodeInfoTab = NULL;
- ctxt->nodeInfoNr = 0;
- ctxt->nodeInfoMax = 0;
-
- if (sax == NULL) ctxt->sax = (xmlSAXHandlerPtr) &htmlDefaultSAXHandler;
- else {
- ctxt->sax = sax;
- memcpy(sax, &htmlDefaultSAXHandler, sizeof(xmlSAXHandlerV1));
- }
- ctxt->userData = ctxt;
- ctxt->myDoc = NULL;
- ctxt->wellFormed = 1;
- ctxt->replaceEntities = 0;
- ctxt->linenumbers = xmlLineNumbersDefaultValue;
- ctxt->html = 1;
- ctxt->vctxt.finishDtd = XML_CTXT_FINISH_DTD_0;
- ctxt->vctxt.userData = ctxt;
- ctxt->vctxt.error = xmlParserValidityError;
- ctxt->vctxt.warning = xmlParserValidityWarning;
- ctxt->record_info = 0;
- ctxt->validate = 0;
- ctxt->nbChars = 0;
- ctxt->checkIndex = 0;
- ctxt->catalogs = NULL;
- xmlInitNodeInfoSeq(&ctxt->node_seq);
- return(0);
-}
-
-/**
- * htmlFreeParserCtxt:
- * @ctxt: an HTML parser context
- *
- * Free all the memory used by a parser context. However the parsed
- * document in ctxt->myDoc is not freed.
- */
-
-void
-htmlFreeParserCtxt(htmlParserCtxtPtr ctxt)
-{
- xmlFreeParserCtxt(ctxt);
-}
-
-/**
- * htmlNewParserCtxt:
- *
- * Allocate and initialize a new parser context.
- *
- * Returns the htmlParserCtxtPtr or NULL in case of allocation error
- */
-
-htmlParserCtxtPtr
-htmlNewParserCtxt(void)
-{
- xmlParserCtxtPtr ctxt;
-
- ctxt = (xmlParserCtxtPtr) xmlMalloc(sizeof(xmlParserCtxt));
- if (ctxt == NULL) {
- htmlErrMemory(NULL, "NewParserCtxt: out of memory\n");
- return(NULL);
- }
- memset(ctxt, 0, sizeof(xmlParserCtxt));
- if (htmlInitParserCtxt(ctxt) < 0) {
- htmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- return(ctxt);
-}
-
-/**
- * htmlCreateMemoryParserCtxt:
- * @buffer: a pointer to a char array
- * @size: the size of the array
- *
- * Create a parser context for an HTML in-memory document.
- *
- * Returns the new parser context or NULL
- */
-htmlParserCtxtPtr
-htmlCreateMemoryParserCtxt(const char *buffer, int size) {
- xmlParserCtxtPtr ctxt;
- xmlParserInputPtr input;
- xmlParserInputBufferPtr buf;
-
- if (buffer == NULL)
- return(NULL);
- if (size <= 0)
- return(NULL);
-
- ctxt = htmlNewParserCtxt();
- if (ctxt == NULL)
- return(NULL);
-
- buf = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE);
- if (buf == NULL) return(NULL);
-
- input = xmlNewInputStream(ctxt);
- if (input == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- input->filename = NULL;
- input->buf = buf;
- xmlBufResetInput(buf->buffer, input);
-
- inputPush(ctxt, input);
- return(ctxt);
-}
-
-/**
- * htmlCreateDocParserCtxt:
- * @cur: a pointer to an array of xmlChar
- * @encoding: a free form C string describing the HTML document encoding, or NULL
- *
- * Create a parser context for an HTML document.
- *
- * TODO: check the need to add encoding handling there
- *
- * Returns the new parser context or NULL
- */
-static htmlParserCtxtPtr
-htmlCreateDocParserCtxt(const xmlChar *cur, const char *encoding) {
- int len;
- htmlParserCtxtPtr ctxt;
-
- if (cur == NULL)
- return(NULL);
- len = xmlStrlen(cur);
- ctxt = htmlCreateMemoryParserCtxt((char *)cur, len);
- if (ctxt == NULL)
- return(NULL);
-
- if (encoding != NULL) {
- xmlCharEncoding enc;
- xmlCharEncodingHandlerPtr handler;
-
- if (ctxt->input->encoding != NULL)
- xmlFree((xmlChar *) ctxt->input->encoding);
- ctxt->input->encoding = xmlStrdup((const xmlChar *) encoding);
-
- enc = xmlParseCharEncoding(encoding);
- /*
- * registered set of known encodings
- */
- if (enc != XML_CHAR_ENCODING_ERROR) {
- xmlSwitchEncoding(ctxt, enc);
- if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
- htmlParseErr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "Unsupported encoding %s\n",
- (const xmlChar *) encoding, NULL);
- }
- } else {
- /*
- * fallback for unknown encodings
- */
- handler = xmlFindCharEncodingHandler((const char *) encoding);
- if (handler != NULL) {
- xmlSwitchToEncoding(ctxt, handler);
- } else {
- htmlParseErr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "Unsupported encoding %s\n",
- (const xmlChar *) encoding, NULL);
- }
- }
- }
- return(ctxt);
-}
-
-#ifdef LIBXML_PUSH_ENABLED
-/************************************************************************
- * *
- * Progressive parsing interfaces *
- * *
- ************************************************************************/
-
-/**
- * htmlParseLookupSequence:
- * @ctxt: an HTML parser context
- * @first: the first char to lookup
- * @next: the next char to lookup or zero
- * @third: the next char to lookup or zero
- * @comment: flag to force checking inside comments
- *
- * Try to find if a sequence (first, next, third) or just (first next) or
- * (first) is available in the input stream.
- * This function has a side effect of (possibly) incrementing ctxt->checkIndex
- * to avoid rescanning sequences of bytes, it DOES change the state of the
- * parser, do not use liberally.
- * This is basically similar to xmlParseLookupSequence()
- *
- * Returns the index to the current parsing point if the full sequence
- * is available, -1 otherwise.
- */
-static int
-htmlParseLookupSequence(htmlParserCtxtPtr ctxt, xmlChar first,
- xmlChar next, xmlChar third, int iscomment,
- int ignoreattrval)
-{
- int base, len;
- htmlParserInputPtr in;
- const xmlChar *buf;
- int incomment = 0;
- int invalue = 0;
- char valdellim = 0x0;
-
- in = ctxt->input;
- if (in == NULL)
- return (-1);
-
- base = in->cur - in->base;
- if (base < 0)
- return (-1);
-
- if (ctxt->checkIndex > base)
- base = ctxt->checkIndex;
-
- if (in->buf == NULL) {
- buf = in->base;
- len = in->length;
- } else {
- buf = xmlBufContent(in->buf->buffer);
- len = xmlBufUse(in->buf->buffer);
- }
-
- /* take into account the sequence length */
- if (third)
- len -= 2;
- else if (next)
- len--;
- for (; base < len; base++) {
- if ((!incomment) && (base + 4 < len) && (!iscomment)) {
- if ((buf[base] == '<') && (buf[base + 1] == '!') &&
- (buf[base + 2] == '-') && (buf[base + 3] == '-')) {
- incomment = 1;
- /* do not increment past <! - some people use <!--> */
- base += 2;
- }
- }
- if (ignoreattrval) {
- if (buf[base] == '"' || buf[base] == '\'') {
- if (invalue) {
- if (buf[base] == valdellim) {
- invalue = 0;
- continue;
- }
- } else {
- valdellim = buf[base];
- invalue = 1;
- continue;
- }
- } else if (invalue) {
- continue;
- }
- }
- if (incomment) {
- if (base + 3 > len)
- return (-1);
- if ((buf[base] == '-') && (buf[base + 1] == '-') &&
- (buf[base + 2] == '>')) {
- incomment = 0;
- base += 2;
- }
- continue;
- }
- if (buf[base] == first) {
- if (third != 0) {
- if ((buf[base + 1] != next) || (buf[base + 2] != third))
- continue;
- } else if (next != 0) {
- if (buf[base + 1] != next)
- continue;
- }
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- if (next == 0)
- xmlGenericError(xmlGenericErrorContext,
- "HPP: lookup '%c' found at %d\n",
- first, base);
- else if (third == 0)
- xmlGenericError(xmlGenericErrorContext,
- "HPP: lookup '%c%c' found at %d\n",
- first, next, base);
- else
- xmlGenericError(xmlGenericErrorContext,
- "HPP: lookup '%c%c%c' found at %d\n",
- first, next, third, base);
-#endif
- return (base - (in->cur - in->base));
- }
- }
- if ((!incomment) && (!invalue))
- ctxt->checkIndex = base;
-#ifdef DEBUG_PUSH
- if (next == 0)
- xmlGenericError(xmlGenericErrorContext,
- "HPP: lookup '%c' failed\n", first);
- else if (third == 0)
- xmlGenericError(xmlGenericErrorContext,
- "HPP: lookup '%c%c' failed\n", first, next);
- else
- xmlGenericError(xmlGenericErrorContext,
- "HPP: lookup '%c%c%c' failed\n", first, next,
- third);
-#endif
- return (-1);
-}
-
-/**
- * htmlParseLookupChars:
- * @ctxt: an HTML parser context
- * @stop: Array of chars, which stop the lookup.
- * @stopLen: Length of stop-Array
- *
- * Try to find if any char of the stop-Array is available in the input
- * stream.
- * This function has a side effect of (possibly) incrementing ctxt->checkIndex
- * to avoid rescanning sequences of bytes, it DOES change the state of the
- * parser, do not use liberally.
- *
- * Returns the index to the current parsing point if a stopChar
- * is available, -1 otherwise.
- */
-static int
-htmlParseLookupChars(htmlParserCtxtPtr ctxt, const xmlChar * stop,
- int stopLen)
-{
- int base, len;
- htmlParserInputPtr in;
- const xmlChar *buf;
- int incomment = 0;
- int i;
-
- in = ctxt->input;
- if (in == NULL)
- return (-1);
-
- base = in->cur - in->base;
- if (base < 0)
- return (-1);
-
- if (ctxt->checkIndex > base)
- base = ctxt->checkIndex;
-
- if (in->buf == NULL) {
- buf = in->base;
- len = in->length;
- } else {
- buf = xmlBufContent(in->buf->buffer);
- len = xmlBufUse(in->buf->buffer);
- }
-
- for (; base < len; base++) {
- if (!incomment && (base + 4 < len)) {
- if ((buf[base] == '<') && (buf[base + 1] == '!') &&
- (buf[base + 2] == '-') && (buf[base + 3] == '-')) {
- incomment = 1;
- /* do not increment past <! - some people use <!--> */
- base += 2;
- }
- }
- if (incomment) {
- if (base + 3 > len)
- return (-1);
- if ((buf[base] == '-') && (buf[base + 1] == '-') &&
- (buf[base + 2] == '>')) {
- incomment = 0;
- base += 2;
- }
- continue;
- }
- for (i = 0; i < stopLen; ++i) {
- if (buf[base] == stop[i]) {
- ctxt->checkIndex = 0;
- return (base - (in->cur - in->base));
- }
- }
- }
- ctxt->checkIndex = base;
- return (-1);
-}
-
-/**
- * htmlParseTryOrFinish:
- * @ctxt: an HTML parser context
- * @terminate: last chunk indicator
- *
- * Try to progress on parsing
- *
- * Returns zero if no parsing was possible
- */
-static int
-htmlParseTryOrFinish(htmlParserCtxtPtr ctxt, int terminate) {
- int ret = 0;
- htmlParserInputPtr in;
- int avail = 0;
- xmlChar cur, next;
-
- htmlParserNodeInfo node_info;
-
-#ifdef DEBUG_PUSH
- switch (ctxt->instate) {
- case XML_PARSER_EOF:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try EOF\n"); break;
- case XML_PARSER_START:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try START\n"); break;
- case XML_PARSER_MISC:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try MISC\n");break;
- case XML_PARSER_COMMENT:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try COMMENT\n");break;
- case XML_PARSER_PROLOG:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try PROLOG\n");break;
- case XML_PARSER_START_TAG:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try START_TAG\n");break;
- case XML_PARSER_CONTENT:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try CONTENT\n");break;
- case XML_PARSER_CDATA_SECTION:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try CDATA_SECTION\n");break;
- case XML_PARSER_END_TAG:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try END_TAG\n");break;
- case XML_PARSER_ENTITY_DECL:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try ENTITY_DECL\n");break;
- case XML_PARSER_ENTITY_VALUE:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try ENTITY_VALUE\n");break;
- case XML_PARSER_ATTRIBUTE_VALUE:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try ATTRIBUTE_VALUE\n");break;
- case XML_PARSER_DTD:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try DTD\n");break;
- case XML_PARSER_EPILOG:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try EPILOG\n");break;
- case XML_PARSER_PI:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try PI\n");break;
- case XML_PARSER_SYSTEM_LITERAL:
- xmlGenericError(xmlGenericErrorContext,
- "HPP: try SYSTEM_LITERAL\n");break;
- }
-#endif
-
- while (1) {
-
- in = ctxt->input;
- if (in == NULL) break;
- if (in->buf == NULL)
- avail = in->length - (in->cur - in->base);
- else
- avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
- if ((avail == 0) && (terminate)) {
- htmlAutoCloseOnEnd(ctxt);
- if ((ctxt->nameNr == 0) && (ctxt->instate != XML_PARSER_EOF)) {
- /*
- * SAX: end of the document processing.
- */
- ctxt->instate = XML_PARSER_EOF;
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- }
- }
- if (avail < 1)
- goto done;
- cur = in->cur[0];
- if (cur == 0) {
- SKIP(1);
- continue;
- }
-
- switch (ctxt->instate) {
- case XML_PARSER_EOF:
- /*
- * Document parsing is done !
- */
- goto done;
- case XML_PARSER_START:
- /*
- * Very first chars read from the document flow.
- */
- cur = in->cur[0];
- if (IS_BLANK_CH(cur)) {
- SKIP_BLANKS;
- if (in->buf == NULL)
- avail = in->length - (in->cur - in->base);
- else
- avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
- }
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData,
- &xmlDefaultSAXLocator);
- if ((ctxt->sax) && (ctxt->sax->startDocument) &&
- (!ctxt->disableSAX))
- ctxt->sax->startDocument(ctxt->userData);
-
- cur = in->cur[0];
- next = in->cur[1];
- if ((cur == '<') && (next == '!') &&
- (UPP(2) == 'D') && (UPP(3) == 'O') &&
- (UPP(4) == 'C') && (UPP(5) == 'T') &&
- (UPP(6) == 'Y') && (UPP(7) == 'P') &&
- (UPP(8) == 'E')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing internal subset\n");
-#endif
- htmlParseDocTypeDecl(ctxt);
- ctxt->instate = XML_PARSER_PROLOG;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering PROLOG\n");
-#endif
- } else {
- ctxt->instate = XML_PARSER_MISC;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering MISC\n");
-#endif
- }
- break;
- case XML_PARSER_MISC:
- SKIP_BLANKS;
- if (in->buf == NULL)
- avail = in->length - (in->cur - in->base);
- else
- avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
- /*
- * no chars in buffer
- */
- if (avail < 1)
- goto done;
- /*
- * not enouth chars in buffer
- */
- if (avail < 2) {
- if (!terminate)
- goto done;
- else
- next = ' ';
- } else {
- next = in->cur[1];
- }
- cur = in->cur[0];
- if ((cur == '<') && (next == '!') &&
- (in->cur[2] == '-') && (in->cur[3] == '-')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '-', '-', '>', 1, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing Comment\n");
-#endif
- htmlParseComment(ctxt);
- ctxt->instate = XML_PARSER_MISC;
- } else if ((cur == '<') && (next == '?')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing PI\n");
-#endif
- htmlParsePI(ctxt);
- ctxt->instate = XML_PARSER_MISC;
- } else if ((cur == '<') && (next == '!') &&
- (UPP(2) == 'D') && (UPP(3) == 'O') &&
- (UPP(4) == 'C') && (UPP(5) == 'T') &&
- (UPP(6) == 'Y') && (UPP(7) == 'P') &&
- (UPP(8) == 'E')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing internal subset\n");
-#endif
- htmlParseDocTypeDecl(ctxt);
- ctxt->instate = XML_PARSER_PROLOG;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering PROLOG\n");
-#endif
- } else if ((cur == '<') && (next == '!') &&
- (avail < 9)) {
- goto done;
- } else {
- ctxt->instate = XML_PARSER_START_TAG;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering START_TAG\n");
-#endif
- }
- break;
- case XML_PARSER_PROLOG:
- SKIP_BLANKS;
- if (in->buf == NULL)
- avail = in->length - (in->cur - in->base);
- else
- avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
- if (avail < 2)
- goto done;
- cur = in->cur[0];
- next = in->cur[1];
- if ((cur == '<') && (next == '!') &&
- (in->cur[2] == '-') && (in->cur[3] == '-')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '-', '-', '>', 1, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing Comment\n");
-#endif
- htmlParseComment(ctxt);
- ctxt->instate = XML_PARSER_PROLOG;
- } else if ((cur == '<') && (next == '?')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing PI\n");
-#endif
- htmlParsePI(ctxt);
- ctxt->instate = XML_PARSER_PROLOG;
- } else if ((cur == '<') && (next == '!') &&
- (avail < 4)) {
- goto done;
- } else {
- ctxt->instate = XML_PARSER_START_TAG;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering START_TAG\n");
-#endif
- }
- break;
- case XML_PARSER_EPILOG:
- if (in->buf == NULL)
- avail = in->length - (in->cur - in->base);
- else
- avail = xmlBufUse(in->buf->buffer) - (in->cur - in->base);
- if (avail < 1)
- goto done;
- cur = in->cur[0];
- if (IS_BLANK_CH(cur)) {
- htmlParseCharData(ctxt);
- goto done;
- }
- if (avail < 2)
- goto done;
- next = in->cur[1];
- if ((cur == '<') && (next == '!') &&
- (in->cur[2] == '-') && (in->cur[3] == '-')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '-', '-', '>', 1, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing Comment\n");
-#endif
- htmlParseComment(ctxt);
- ctxt->instate = XML_PARSER_EPILOG;
- } else if ((cur == '<') && (next == '?')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing PI\n");
-#endif
- htmlParsePI(ctxt);
- ctxt->instate = XML_PARSER_EPILOG;
- } else if ((cur == '<') && (next == '!') &&
- (avail < 4)) {
- goto done;
- } else {
- ctxt->errNo = XML_ERR_DOCUMENT_END;
- ctxt->wellFormed = 0;
- ctxt->instate = XML_PARSER_EOF;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering EOF\n");
-#endif
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- goto done;
- }
- break;
- case XML_PARSER_START_TAG: {
- const xmlChar *name;
- int failed;
- const htmlElemDesc * info;
-
- /*
- * no chars in buffer
- */
- if (avail < 1)
- goto done;
- /*
- * not enouth chars in buffer
- */
- if (avail < 2) {
- if (!terminate)
- goto done;
- else
- next = ' ';
- } else {
- next = in->cur[1];
- }
- cur = in->cur[0];
- if (cur != '<') {
- ctxt->instate = XML_PARSER_CONTENT;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- }
- if (next == '/') {
- ctxt->instate = XML_PARSER_END_TAG;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering END_TAG\n");
-#endif
- break;
- }
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
-
- /* Capture start position */
- if (ctxt->record_info) {
- node_info.begin_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.begin_line = ctxt->input->line;
- }
-
-
- failed = htmlParseStartTag(ctxt);
- name = ctxt->name;
- if ((failed == -1) ||
- (name == NULL)) {
- if (CUR == '>')
- NEXT;
- break;
- }
-
- /*
- * Lookup the info for that element.
- */
- info = htmlTagLookup(name);
- if (info == NULL) {
- htmlParseErr(ctxt, XML_HTML_UNKNOWN_TAG,
- "Tag %s invalid\n", name, NULL);
- }
-
- /*
- * Check for an Empty Element labeled the XML/SGML way
- */
- if ((CUR == '/') && (NXT(1) == '>')) {
- SKIP(2);
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, name);
- htmlnamePop(ctxt);
- ctxt->instate = XML_PARSER_CONTENT;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- }
-
- if (CUR == '>') {
- NEXT;
- } else {
- htmlParseErr(ctxt, XML_ERR_GT_REQUIRED,
- "Couldn't find end of Start Tag %s\n",
- name, NULL);
-
- /*
- * end of parsing of this node.
- */
- if (xmlStrEqual(name, ctxt->name)) {
- nodePop(ctxt);
- htmlnamePop(ctxt);
- }
-
- if (ctxt->record_info)
- htmlNodeInfoPush(ctxt, &node_info);
-
- ctxt->instate = XML_PARSER_CONTENT;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- }
-
- /*
- * Check for an Empty Element from DTD definition
- */
- if ((info != NULL) && (info->empty)) {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL))
- ctxt->sax->endElement(ctxt->userData, name);
- htmlnamePop(ctxt);
- }
-
- if (ctxt->record_info)
- htmlNodeInfoPush(ctxt, &node_info);
-
- ctxt->instate = XML_PARSER_CONTENT;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- }
- case XML_PARSER_CONTENT: {
- long cons;
- /*
- * Handle preparsed entities and charRef
- */
- if (ctxt->token != 0) {
- xmlChar chr[2] = { 0 , 0 } ;
-
- chr[0] = (xmlChar) ctxt->token;
- htmlCheckParagraph(ctxt);
- if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL))
- ctxt->sax->characters(ctxt->userData, chr, 1);
- ctxt->token = 0;
- ctxt->checkIndex = 0;
- }
- if ((avail == 1) && (terminate)) {
- cur = in->cur[0];
- if ((cur != '<') && (cur != '&')) {
- if (ctxt->sax != NULL) {
- if (IS_BLANK_CH(cur)) {
- if (ctxt->keepBlanks) {
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(
- ctxt->userData, &in->cur[0], 1);
- } else {
- if (ctxt->sax->ignorableWhitespace != NULL)
- ctxt->sax->ignorableWhitespace(
- ctxt->userData, &in->cur[0], 1);
- }
- } else {
- htmlCheckParagraph(ctxt);
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(
- ctxt->userData, &in->cur[0], 1);
- }
- }
- ctxt->token = 0;
- ctxt->checkIndex = 0;
- in->cur++;
- break;
- }
- }
- if (avail < 2)
- goto done;
- cur = in->cur[0];
- next = in->cur[1];
- cons = ctxt->nbChars;
- if ((xmlStrEqual(ctxt->name, BAD_CAST"script")) ||
- (xmlStrEqual(ctxt->name, BAD_CAST"style"))) {
- /*
- * Handle SCRIPT/STYLE separately
- */
- if (!terminate) {
- int idx;
- xmlChar val;
-
- idx = htmlParseLookupSequence(ctxt, '<', '/', 0, 0, 0);
- if (idx < 0)
- goto done;
- val = in->cur[idx + 2];
- if (val == 0) /* bad cut of input */
- goto done;
- }
- htmlParseScript(ctxt);
- if ((cur == '<') && (next == '/')) {
- ctxt->instate = XML_PARSER_END_TAG;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering END_TAG\n");
-#endif
- break;
- }
- } else {
- /*
- * Sometimes DOCTYPE arrives in the middle of the document
- */
- if ((cur == '<') && (next == '!') &&
- (UPP(2) == 'D') && (UPP(3) == 'O') &&
- (UPP(4) == 'C') && (UPP(5) == 'T') &&
- (UPP(6) == 'Y') && (UPP(7) == 'P') &&
- (UPP(8) == 'E')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
- htmlParseErr(ctxt, XML_HTML_STRUCURE_ERROR,
- "Misplaced DOCTYPE declaration\n",
- BAD_CAST "DOCTYPE" , NULL);
- htmlParseDocTypeDecl(ctxt);
- } else if ((cur == '<') && (next == '!') &&
- (in->cur[2] == '-') && (in->cur[3] == '-')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(
- ctxt, '-', '-', '>', 1, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing Comment\n");
-#endif
- htmlParseComment(ctxt);
- ctxt->instate = XML_PARSER_CONTENT;
- } else if ((cur == '<') && (next == '?')) {
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing PI\n");
-#endif
- htmlParsePI(ctxt);
- ctxt->instate = XML_PARSER_CONTENT;
- } else if ((cur == '<') && (next == '!') && (avail < 4)) {
- goto done;
- } else if ((cur == '<') && (next == '/')) {
- ctxt->instate = XML_PARSER_END_TAG;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering END_TAG\n");
-#endif
- break;
- } else if (cur == '<') {
- ctxt->instate = XML_PARSER_START_TAG;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering START_TAG\n");
-#endif
- break;
- } else if (cur == '&') {
- if ((!terminate) &&
- (htmlParseLookupChars(ctxt,
- BAD_CAST "; >/", 4) < 0))
- goto done;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing Reference\n");
-#endif
- /* TODO: check generation of subtrees if noent !!! */
- htmlParseReference(ctxt);
- } else {
- /*
- * check that the text sequence is complete
- * before handing out the data to the parser
- * to avoid problems with erroneous end of
- * data detection.
- */
- if ((!terminate) &&
- (htmlParseLookupChars(ctxt, BAD_CAST "<&", 2) < 0))
- goto done;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: Parsing char data\n");
-#endif
- htmlParseCharData(ctxt);
- }
- }
- if (cons == ctxt->nbChars) {
- if (ctxt->node != NULL) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "detected an error in element content\n",
- NULL, NULL);
- }
- NEXT;
- break;
- }
-
- break;
- }
- case XML_PARSER_END_TAG:
- if (avail < 2)
- goto done;
- if ((!terminate) &&
- (htmlParseLookupSequence(ctxt, '>', 0, 0, 0, 1) < 0))
- goto done;
- htmlParseEndTag(ctxt);
- if (ctxt->nameNr == 0) {
- ctxt->instate = XML_PARSER_EPILOG;
- } else {
- ctxt->instate = XML_PARSER_CONTENT;
- }
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_CDATA_SECTION:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == CDATA\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_DTD:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == DTD\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_COMMENT:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == COMMENT\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_PI:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == PI\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_ENTITY_DECL:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == ENTITY_DECL\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_ENTITY_VALUE:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == ENTITY_VALUE\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering DTD\n");
-#endif
- break;
- case XML_PARSER_ATTRIBUTE_VALUE:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == ATTRIBUTE_VALUE\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_START_TAG;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering START_TAG\n");
-#endif
- break;
- case XML_PARSER_SYSTEM_LITERAL:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == XML_PARSER_SYSTEM_LITERAL\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_IGNORE:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == XML_PARSER_IGNORE\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_PUBLIC_LITERAL:
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "HPP: internal error, state == XML_PARSER_LITERAL\n",
- NULL, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "HPP: entering CONTENT\n");
-#endif
- break;
-
- }
- }
-done:
- if ((avail == 0) && (terminate)) {
- htmlAutoCloseOnEnd(ctxt);
- if ((ctxt->nameNr == 0) && (ctxt->instate != XML_PARSER_EOF)) {
- /*
- * SAX: end of the document processing.
- */
- ctxt->instate = XML_PARSER_EOF;
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- }
- }
- if ((!(ctxt->options & HTML_PARSE_NODEFDTD)) && (ctxt->myDoc != NULL) &&
- ((terminate) || (ctxt->instate == XML_PARSER_EOF) ||
- (ctxt->instate == XML_PARSER_EPILOG))) {
- xmlDtdPtr dtd;
- dtd = xmlGetIntSubset(ctxt->myDoc);
- if (dtd == NULL)
- ctxt->myDoc->intSubset =
- xmlCreateIntSubset(ctxt->myDoc, BAD_CAST "html",
- BAD_CAST "-//W3C//DTD HTML 4.0 Transitional//EN",
- BAD_CAST "http://www.w3.org/TR/REC-html40/loose.dtd");
- }
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext, "HPP: done %d\n", ret);
-#endif
- return(ret);
-}
-
-/**
- * htmlParseChunk:
- * @ctxt: an HTML parser context
- * @chunk: an char array
- * @size: the size in byte of the chunk
- * @terminate: last chunk indicator
- *
- * Parse a Chunk of memory
- *
- * Returns zero if no error, the xmlParserErrors otherwise.
- */
-int
-htmlParseChunk(htmlParserCtxtPtr ctxt, const char *chunk, int size,
- int terminate) {
- if ((ctxt == NULL) || (ctxt->input == NULL)) {
- htmlParseErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "htmlParseChunk: context error\n", NULL, NULL);
- return(XML_ERR_INTERNAL_ERROR);
- }
- if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->buf != NULL) && (ctxt->instate != XML_PARSER_EOF)) {
- size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
- size_t cur = ctxt->input->cur - ctxt->input->base;
- int res;
-
- res = xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
- if (res < 0) {
- ctxt->errNo = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- return (XML_PARSER_EOF);
- }
- xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size);
-#endif
-
-#if 0
- if ((terminate) || (ctxt->input->buf->buffer->use > 80))
- htmlParseTryOrFinish(ctxt, terminate);
-#endif
- } else if (ctxt->instate != XML_PARSER_EOF) {
- if ((ctxt->input != NULL) && ctxt->input->buf != NULL) {
- xmlParserInputBufferPtr in = ctxt->input->buf;
- if ((in->encoder != NULL) && (in->buffer != NULL) &&
- (in->raw != NULL)) {
- int nbchars;
- size_t base = xmlBufGetInputBase(in->buffer, ctxt->input);
- size_t current = ctxt->input->cur - ctxt->input->base;
-
- nbchars = xmlCharEncInput(in, terminate);
- if (nbchars < 0) {
- htmlParseErr(ctxt, XML_ERR_INVALID_ENCODING,
- "encoder error\n", NULL, NULL);
- return(XML_ERR_INVALID_ENCODING);
- }
- xmlBufSetInputBaseCur(in->buffer, ctxt->input, base, current);
- }
- }
- }
- htmlParseTryOrFinish(ctxt, terminate);
- if (terminate) {
- if ((ctxt->instate != XML_PARSER_EOF) &&
- (ctxt->instate != XML_PARSER_EPILOG) &&
- (ctxt->instate != XML_PARSER_MISC)) {
- ctxt->errNo = XML_ERR_DOCUMENT_END;
- ctxt->wellFormed = 0;
- }
- if (ctxt->instate != XML_PARSER_EOF) {
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- }
- ctxt->instate = XML_PARSER_EOF;
- }
- return((xmlParserErrors) ctxt->errNo);
-}
-
-/************************************************************************
- * *
- * User entry points *
- * *
- ************************************************************************/
-
-/**
- * htmlCreatePushParserCtxt:
- * @sax: a SAX handler
- * @user_data: The user data returned on SAX callbacks
- * @chunk: a pointer to an array of chars
- * @size: number of chars in the array
- * @filename: an optional file name or URI
- * @enc: an optional encoding
- *
- * Create a parser context for using the HTML parser in push mode
- * The value of @filename is used for fetching external entities
- * and error/warning reports.
- *
- * Returns the new parser context or NULL
- */
-htmlParserCtxtPtr
-htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax, void *user_data,
- const char *chunk, int size, const char *filename,
- xmlCharEncoding enc) {
- htmlParserCtxtPtr ctxt;
- htmlParserInputPtr inputStream;
- xmlParserInputBufferPtr buf;
-
- xmlInitParser();
-
- buf = xmlAllocParserInputBuffer(enc);
- if (buf == NULL) return(NULL);
-
- ctxt = htmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(buf);
- return(NULL);
- }
- if(enc==XML_CHAR_ENCODING_UTF8 || buf->encoder)
- ctxt->charset=XML_CHAR_ENCODING_UTF8;
- if (sax != NULL) {
- if (ctxt->sax != (xmlSAXHandlerPtr) &htmlDefaultSAXHandler)
- xmlFree(ctxt->sax);
- ctxt->sax = (htmlSAXHandlerPtr) xmlMalloc(sizeof(htmlSAXHandler));
- if (ctxt->sax == NULL) {
- xmlFree(buf);
- xmlFree(ctxt);
- return(NULL);
- }
- memcpy(ctxt->sax, sax, sizeof(htmlSAXHandler));
- if (user_data != NULL)
- ctxt->userData = user_data;
- }
- if (filename == NULL) {
- ctxt->directory = NULL;
- } else {
- ctxt->directory = xmlParserGetDirectory(filename);
- }
-
- inputStream = htmlNewInputStream(ctxt);
- if (inputStream == NULL) {
- xmlFreeParserCtxt(ctxt);
- xmlFree(buf);
- return(NULL);
- }
-
- if (filename == NULL)
- inputStream->filename = NULL;
- else
- inputStream->filename = (char *)
- xmlCanonicPath((const xmlChar *) filename);
- inputStream->buf = buf;
- xmlBufResetInput(buf->buffer, inputStream);
-
- inputPush(ctxt, inputStream);
-
- if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->buf != NULL)) {
- size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
- size_t cur = ctxt->input->cur - ctxt->input->base;
-
- xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
-
- xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext, "HPP: pushed %d\n", size);
-#endif
- }
- ctxt->progressive = 1;
-
- return(ctxt);
-}
-#endif /* LIBXML_PUSH_ENABLED */
-
-/**
- * htmlSAXParseDoc:
- * @cur: a pointer to an array of xmlChar
- * @encoding: a free form C string describing the HTML document encoding, or NULL
- * @sax: the SAX handler block
- * @userData: if using SAX, this pointer will be provided on callbacks.
- *
- * Parse an HTML in-memory document. If sax is not NULL, use the SAX callbacks
- * to handle parse events. If sax is NULL, fallback to the default DOM
- * behavior and return a tree.
- *
- * Returns the resulting document tree unless SAX is NULL or the document is
- * not well formed.
- */
-
-htmlDocPtr
-htmlSAXParseDoc(xmlChar *cur, const char *encoding, htmlSAXHandlerPtr sax, void *userData) {
- htmlDocPtr ret;
- htmlParserCtxtPtr ctxt;
-
- xmlInitParser();
-
- if (cur == NULL) return(NULL);
-
-
- ctxt = htmlCreateDocParserCtxt(cur, encoding);
- if (ctxt == NULL) return(NULL);
- if (sax != NULL) {
- if (ctxt->sax != NULL) xmlFree (ctxt->sax);
- ctxt->sax = sax;
- ctxt->userData = userData;
- }
-
- htmlParseDocument(ctxt);
- ret = ctxt->myDoc;
- if (sax != NULL) {
- ctxt->sax = NULL;
- ctxt->userData = NULL;
- }
- htmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-/**
- * htmlParseDoc:
- * @cur: a pointer to an array of xmlChar
- * @encoding: a free form C string describing the HTML document encoding, or NULL
- *
- * parse an HTML in-memory document and build a tree.
- *
- * Returns the resulting document tree
- */
-
-htmlDocPtr
-htmlParseDoc(xmlChar *cur, const char *encoding) {
- return(htmlSAXParseDoc(cur, encoding, NULL, NULL));
-}
-
-
-/**
- * htmlCreateFileParserCtxt:
- * @filename: the filename
- * @encoding: a free form C string describing the HTML document encoding, or NULL
- *
- * Create a parser context for a file content.
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time.
- *
- * Returns the new parser context or NULL
- */
-htmlParserCtxtPtr
-htmlCreateFileParserCtxt(const char *filename, const char *encoding)
-{
- htmlParserCtxtPtr ctxt;
- htmlParserInputPtr inputStream;
- char *canonicFilename;
- /* htmlCharEncoding enc; */
- xmlChar *content, *content_line = (xmlChar *) "charset=";
-
- if (filename == NULL)
- return(NULL);
-
- ctxt = htmlNewParserCtxt();
- if (ctxt == NULL) {
- return(NULL);
- }
- canonicFilename = (char *) xmlCanonicPath((const xmlChar *) filename);
- if (canonicFilename == NULL) {
-#ifdef LIBXML_SAX1_ENABLED
- if (xmlDefaultSAXHandler.error != NULL) {
- xmlDefaultSAXHandler.error(NULL, "out of memory\n");
- }
-#endif
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- inputStream = xmlLoadExternalEntity(canonicFilename, NULL, ctxt);
- xmlFree(canonicFilename);
- if (inputStream == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- inputPush(ctxt, inputStream);
-
- /* set encoding */
- if (encoding) {
- size_t l = strlen(encoding);
-
- if (l < 1000) {
- content = xmlMallocAtomic (xmlStrlen(content_line) + l + 1);
- if (content) {
- strcpy ((char *)content, (char *)content_line);
- strcat ((char *)content, (char *)encoding);
- htmlCheckEncoding (ctxt, content);
- xmlFree (content);
- }
- }
- }
-
- return(ctxt);
-}
-
-/**
- * htmlSAXParseFile:
- * @filename: the filename
- * @encoding: a free form C string describing the HTML document encoding, or NULL
- * @sax: the SAX handler block
- * @userData: if using SAX, this pointer will be provided on callbacks.
- *
- * parse an HTML file and build a tree. Automatic support for ZLIB/Compress
- * compressed document is provided by default if found at compile-time.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * Returns the resulting document tree unless SAX is NULL or the document is
- * not well formed.
- */
-
-htmlDocPtr
-htmlSAXParseFile(const char *filename, const char *encoding, htmlSAXHandlerPtr sax,
- void *userData) {
- htmlDocPtr ret;
- htmlParserCtxtPtr ctxt;
- htmlSAXHandlerPtr oldsax = NULL;
-
- xmlInitParser();
-
- ctxt = htmlCreateFileParserCtxt(filename, encoding);
- if (ctxt == NULL) return(NULL);
- if (sax != NULL) {
- oldsax = ctxt->sax;
- ctxt->sax = sax;
- ctxt->userData = userData;
- }
-
- htmlParseDocument(ctxt);
-
- ret = ctxt->myDoc;
- if (sax != NULL) {
- ctxt->sax = oldsax;
- ctxt->userData = NULL;
- }
- htmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-/**
- * htmlParseFile:
- * @filename: the filename
- * @encoding: a free form C string describing the HTML document encoding, or NULL
- *
- * parse an HTML file and build a tree. Automatic support for ZLIB/Compress
- * compressed document is provided by default if found at compile-time.
- *
- * Returns the resulting document tree
- */
-
-htmlDocPtr
-htmlParseFile(const char *filename, const char *encoding) {
- return(htmlSAXParseFile(filename, encoding, NULL, NULL));
-}
-
-/**
- * htmlHandleOmittedElem:
- * @val: int 0 or 1
- *
- * Set and return the previous value for handling HTML omitted tags.
- *
- * Returns the last value for 0 for no handling, 1 for auto insertion.
- */
-
-int
-htmlHandleOmittedElem(int val) {
- int old = htmlOmittedDefaultValue;
-
- htmlOmittedDefaultValue = val;
- return(old);
-}
-
-/**
- * htmlElementAllowedHere:
- * @parent: HTML parent element
- * @elt: HTML element
- *
- * Checks whether an HTML element may be a direct child of a parent element.
- * Note - doesn't check for deprecated elements
- *
- * Returns 1 if allowed; 0 otherwise.
- */
-int
-htmlElementAllowedHere(const htmlElemDesc* parent, const xmlChar* elt) {
- const char** p ;
-
- if ( ! elt || ! parent || ! parent->subelts )
- return 0 ;
-
- for ( p = parent->subelts; *p; ++p )
- if ( !xmlStrcmp((const xmlChar *)*p, elt) )
- return 1 ;
-
- return 0 ;
-}
-/**
- * htmlElementStatusHere:
- * @parent: HTML parent element
- * @elt: HTML element
- *
- * Checks whether an HTML element may be a direct child of a parent element.
- * and if so whether it is valid or deprecated.
- *
- * Returns one of HTML_VALID, HTML_DEPRECATED, HTML_INVALID
- */
-htmlStatus
-htmlElementStatusHere(const htmlElemDesc* parent, const htmlElemDesc* elt) {
- if ( ! parent || ! elt )
- return HTML_INVALID ;
- if ( ! htmlElementAllowedHere(parent, (const xmlChar*) elt->name ) )
- return HTML_INVALID ;
-
- return ( elt->dtd == 0 ) ? HTML_VALID : HTML_DEPRECATED ;
-}
-/**
- * htmlAttrAllowed:
- * @elt: HTML element
- * @attr: HTML attribute
- * @legacy: whether to allow deprecated attributes
- *
- * Checks whether an attribute is valid for an element
- * Has full knowledge of Required and Deprecated attributes
- *
- * Returns one of HTML_REQUIRED, HTML_VALID, HTML_DEPRECATED, HTML_INVALID
- */
-htmlStatus
-htmlAttrAllowed(const htmlElemDesc* elt, const xmlChar* attr, int legacy) {
- const char** p ;
-
- if ( !elt || ! attr )
- return HTML_INVALID ;
-
- if ( elt->attrs_req )
- for ( p = elt->attrs_req; *p; ++p)
- if ( !xmlStrcmp((const xmlChar*)*p, attr) )
- return HTML_REQUIRED ;
-
- if ( elt->attrs_opt )
- for ( p = elt->attrs_opt; *p; ++p)
- if ( !xmlStrcmp((const xmlChar*)*p, attr) )
- return HTML_VALID ;
-
- if ( legacy && elt->attrs_depr )
- for ( p = elt->attrs_depr; *p; ++p)
- if ( !xmlStrcmp((const xmlChar*)*p, attr) )
- return HTML_DEPRECATED ;
-
- return HTML_INVALID ;
-}
-/**
- * htmlNodeStatus:
- * @node: an htmlNodePtr in a tree
- * @legacy: whether to allow deprecated elements (YES is faster here
- * for Element nodes)
- *
- * Checks whether the tree node is valid. Experimental (the author
- * only uses the HTML enhancements in a SAX parser)
- *
- * Return: for Element nodes, a return from htmlElementAllowedHere (if
- * legacy allowed) or htmlElementStatusHere (otherwise).
- * for Attribute nodes, a return from htmlAttrAllowed
- * for other nodes, HTML_NA (no checks performed)
- */
-htmlStatus
-htmlNodeStatus(const htmlNodePtr node, int legacy) {
- if ( ! node )
- return HTML_INVALID ;
-
- switch ( node->type ) {
- case XML_ELEMENT_NODE:
- return legacy
- ? ( htmlElementAllowedHere (
- htmlTagLookup(node->parent->name) , node->name
- ) ? HTML_VALID : HTML_INVALID )
- : htmlElementStatusHere(
- htmlTagLookup(node->parent->name) ,
- htmlTagLookup(node->name) )
- ;
- case XML_ATTRIBUTE_NODE:
- return htmlAttrAllowed(
- htmlTagLookup(node->parent->name) , node->name, legacy) ;
- default: return HTML_NA ;
- }
-}
-/************************************************************************
- * *
- * New set (2.6.0) of simpler and more flexible APIs *
- * *
- ************************************************************************/
-/**
- * DICT_FREE:
- * @str: a string
- *
- * Free a string if it is not owned by the "dict" dictionary in the
- * current scope
- */
-#define DICT_FREE(str) \
- if ((str) && ((!dict) || \
- (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
- xmlFree((char *)(str));
-
-/**
- * htmlCtxtReset:
- * @ctxt: an HTML parser context
- *
- * Reset a parser context
- */
-void
-htmlCtxtReset(htmlParserCtxtPtr ctxt)
-{
- xmlParserInputPtr input;
- xmlDictPtr dict;
-
- if (ctxt == NULL)
- return;
-
- xmlInitParser();
- dict = ctxt->dict;
-
- while ((input = inputPop(ctxt)) != NULL) { /* Non consuming */
- xmlFreeInputStream(input);
- }
- ctxt->inputNr = 0;
- ctxt->input = NULL;
-
- ctxt->spaceNr = 0;
- if (ctxt->spaceTab != NULL) {
- ctxt->spaceTab[0] = -1;
- ctxt->space = &ctxt->spaceTab[0];
- } else {
- ctxt->space = NULL;
- }
-
-
- ctxt->nodeNr = 0;
- ctxt->node = NULL;
-
- ctxt->nameNr = 0;
- ctxt->name = NULL;
-
- DICT_FREE(ctxt->version);
- ctxt->version = NULL;
- DICT_FREE(ctxt->encoding);
- ctxt->encoding = NULL;
- DICT_FREE(ctxt->directory);
- ctxt->directory = NULL;
- DICT_FREE(ctxt->extSubURI);
- ctxt->extSubURI = NULL;
- DICT_FREE(ctxt->extSubSystem);
- ctxt->extSubSystem = NULL;
- if (ctxt->myDoc != NULL)
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
-
- ctxt->standalone = -1;
- ctxt->hasExternalSubset = 0;
- ctxt->hasPErefs = 0;
- ctxt->html = 1;
- ctxt->external = 0;
- ctxt->instate = XML_PARSER_START;
- ctxt->token = 0;
-
- ctxt->wellFormed = 1;
- ctxt->nsWellFormed = 1;
- ctxt->disableSAX = 0;
- ctxt->valid = 1;
- ctxt->vctxt.userData = ctxt;
- ctxt->vctxt.error = xmlParserValidityError;
- ctxt->vctxt.warning = xmlParserValidityWarning;
- ctxt->record_info = 0;
- ctxt->nbChars = 0;
- ctxt->checkIndex = 0;
- ctxt->inSubset = 0;
- ctxt->errNo = XML_ERR_OK;
- ctxt->depth = 0;
- ctxt->charset = XML_CHAR_ENCODING_NONE;
- ctxt->catalogs = NULL;
- xmlInitNodeInfoSeq(&ctxt->node_seq);
-
- if (ctxt->attsDefault != NULL) {
- xmlHashFree(ctxt->attsDefault, (xmlHashDeallocator) xmlFree);
- ctxt->attsDefault = NULL;
- }
- if (ctxt->attsSpecial != NULL) {
- xmlHashFree(ctxt->attsSpecial, NULL);
- ctxt->attsSpecial = NULL;
- }
-}
-
-/**
- * htmlCtxtUseOptions:
- * @ctxt: an HTML parser context
- * @options: a combination of htmlParserOption(s)
- *
- * Applies the options to the parser context
- *
- * Returns 0 in case of success, the set of unknown or unimplemented options
- * in case of error.
- */
-int
-htmlCtxtUseOptions(htmlParserCtxtPtr ctxt, int options)
-{
- if (ctxt == NULL)
- return(-1);
-
- if (options & HTML_PARSE_NOWARNING) {
- ctxt->sax->warning = NULL;
- ctxt->vctxt.warning = NULL;
- options -= XML_PARSE_NOWARNING;
- ctxt->options |= XML_PARSE_NOWARNING;
- }
- if (options & HTML_PARSE_NOERROR) {
- ctxt->sax->error = NULL;
- ctxt->vctxt.error = NULL;
- ctxt->sax->fatalError = NULL;
- options -= XML_PARSE_NOERROR;
- ctxt->options |= XML_PARSE_NOERROR;
- }
- if (options & HTML_PARSE_PEDANTIC) {
- ctxt->pedantic = 1;
- options -= XML_PARSE_PEDANTIC;
- ctxt->options |= XML_PARSE_PEDANTIC;
- } else
- ctxt->pedantic = 0;
- if (options & XML_PARSE_NOBLANKS) {
- ctxt->keepBlanks = 0;
- ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
- options -= XML_PARSE_NOBLANKS;
- ctxt->options |= XML_PARSE_NOBLANKS;
- } else
- ctxt->keepBlanks = 1;
- if (options & HTML_PARSE_RECOVER) {
- ctxt->recovery = 1;
- options -= HTML_PARSE_RECOVER;
- } else
- ctxt->recovery = 0;
- if (options & HTML_PARSE_COMPACT) {
- ctxt->options |= HTML_PARSE_COMPACT;
- options -= HTML_PARSE_COMPACT;
- }
- if (options & XML_PARSE_HUGE) {
- ctxt->options |= XML_PARSE_HUGE;
- options -= XML_PARSE_HUGE;
- }
- if (options & HTML_PARSE_NODEFDTD) {
- ctxt->options |= HTML_PARSE_NODEFDTD;
- options -= HTML_PARSE_NODEFDTD;
- }
- if (options & HTML_PARSE_IGNORE_ENC) {
- ctxt->options |= HTML_PARSE_IGNORE_ENC;
- options -= HTML_PARSE_IGNORE_ENC;
- }
- if (options & HTML_PARSE_NOIMPLIED) {
- ctxt->options |= HTML_PARSE_NOIMPLIED;
- options -= HTML_PARSE_NOIMPLIED;
- }
- ctxt->dictNames = 0;
- return (options);
-}
-
-/**
- * htmlDoRead:
- * @ctxt: an HTML parser context
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- * @reuse: keep the context for reuse
- *
- * Common front-end for the htmlRead functions
- *
- * Returns the resulting document tree or NULL
- */
-static htmlDocPtr
-htmlDoRead(htmlParserCtxtPtr ctxt, const char *URL, const char *encoding,
- int options, int reuse)
-{
- htmlDocPtr ret;
-
- htmlCtxtUseOptions(ctxt, options);
- ctxt->html = 1;
- if (encoding != NULL) {
- xmlCharEncodingHandlerPtr hdlr;
-
- hdlr = xmlFindCharEncodingHandler(encoding);
- if (hdlr != NULL) {
- xmlSwitchToEncoding(ctxt, hdlr);
- if (ctxt->input->encoding != NULL)
- xmlFree((xmlChar *) ctxt->input->encoding);
- ctxt->input->encoding = xmlStrdup((xmlChar *)encoding);
- }
- }
- if ((URL != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->filename == NULL))
- ctxt->input->filename = (char *) xmlStrdup((const xmlChar *) URL);
- htmlParseDocument(ctxt);
- ret = ctxt->myDoc;
- ctxt->myDoc = NULL;
- if (!reuse) {
- if ((ctxt->dictNames) &&
- (ret != NULL) &&
- (ret->dict == ctxt->dict))
- ctxt->dict = NULL;
- xmlFreeParserCtxt(ctxt);
- }
- return (ret);
-}
-
-/**
- * htmlReadDoc:
- * @cur: a pointer to a zero terminated string
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an XML in-memory document and build a tree.
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlReadDoc(const xmlChar * cur, const char *URL, const char *encoding, int options)
-{
- htmlParserCtxtPtr ctxt;
-
- if (cur == NULL)
- return (NULL);
-
- xmlInitParser();
- ctxt = htmlCreateDocParserCtxt(cur, NULL);
- if (ctxt == NULL)
- return (NULL);
- return (htmlDoRead(ctxt, URL, encoding, options, 0));
-}
-
-/**
- * htmlReadFile:
- * @filename: a file or URL
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an XML file from the filesystem or the network.
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlReadFile(const char *filename, const char *encoding, int options)
-{
- htmlParserCtxtPtr ctxt;
-
- xmlInitParser();
- ctxt = htmlCreateFileParserCtxt(filename, encoding);
- if (ctxt == NULL)
- return (NULL);
- return (htmlDoRead(ctxt, NULL, NULL, options, 0));
-}
-
-/**
- * htmlReadMemory:
- * @buffer: a pointer to a char array
- * @size: the size of the array
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an XML in-memory document and build a tree.
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlReadMemory(const char *buffer, int size, const char *URL, const char *encoding, int options)
-{
- htmlParserCtxtPtr ctxt;
-
- xmlInitParser();
- ctxt = xmlCreateMemoryParserCtxt(buffer, size);
- if (ctxt == NULL)
- return (NULL);
- htmlDefaultSAXHandlerInit();
- if (ctxt->sax != NULL)
- memcpy(ctxt->sax, &htmlDefaultSAXHandler, sizeof(xmlSAXHandlerV1));
- return (htmlDoRead(ctxt, URL, encoding, options, 0));
-}
-
-/**
- * htmlReadFd:
- * @fd: an open file descriptor
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an XML from a file descriptor and build a tree.
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlReadFd(int fd, const char *URL, const char *encoding, int options)
-{
- htmlParserCtxtPtr ctxt;
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (fd < 0)
- return (NULL);
- xmlInitParser();
-
- xmlInitParser();
- input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return (NULL);
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- xmlFreeParserCtxt(ctxt);
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (htmlDoRead(ctxt, URL, encoding, options, 0));
-}
-
-/**
- * htmlReadIO:
- * @ioread: an I/O read function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an HTML document from I/O functions and source and build a tree.
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlReadIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
- void *ioctx, const char *URL, const char *encoding, int options)
-{
- htmlParserCtxtPtr ctxt;
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (ioread == NULL)
- return (NULL);
- xmlInitParser();
-
- input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- if (ioclose != NULL)
- ioclose(ioctx);
- return (NULL);
- }
- ctxt = htmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- xmlFreeParserCtxt(ctxt);
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (htmlDoRead(ctxt, URL, encoding, options, 0));
-}
-
-/**
- * htmlCtxtReadDoc:
- * @ctxt: an HTML parser context
- * @cur: a pointer to a zero terminated string
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an XML in-memory document and build a tree.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlCtxtReadDoc(htmlParserCtxtPtr ctxt, const xmlChar * cur,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputPtr stream;
-
- if (cur == NULL)
- return (NULL);
- if (ctxt == NULL)
- return (NULL);
- xmlInitParser();
-
- htmlCtxtReset(ctxt);
-
- stream = xmlNewStringInputStream(ctxt, cur);
- if (stream == NULL) {
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (htmlDoRead(ctxt, URL, encoding, options, 1));
-}
-
-/**
- * htmlCtxtReadFile:
- * @ctxt: an HTML parser context
- * @filename: a file or URL
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an XML file from the filesystem or the network.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlCtxtReadFile(htmlParserCtxtPtr ctxt, const char *filename,
- const char *encoding, int options)
-{
- xmlParserInputPtr stream;
-
- if (filename == NULL)
- return (NULL);
- if (ctxt == NULL)
- return (NULL);
- xmlInitParser();
-
- htmlCtxtReset(ctxt);
-
- stream = xmlLoadExternalEntity(filename, NULL, ctxt);
- if (stream == NULL) {
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (htmlDoRead(ctxt, NULL, encoding, options, 1));
-}
-
-/**
- * htmlCtxtReadMemory:
- * @ctxt: an HTML parser context
- * @buffer: a pointer to a char array
- * @size: the size of the array
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an XML in-memory document and build a tree.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlCtxtReadMemory(htmlParserCtxtPtr ctxt, const char *buffer, int size,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (ctxt == NULL)
- return (NULL);
- if (buffer == NULL)
- return (NULL);
- xmlInitParser();
-
- htmlCtxtReset(ctxt);
-
- input = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- return(NULL);
- }
-
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- return(NULL);
- }
-
- inputPush(ctxt, stream);
- return (htmlDoRead(ctxt, URL, encoding, options, 1));
-}
-
-/**
- * htmlCtxtReadFd:
- * @ctxt: an HTML parser context
- * @fd: an open file descriptor
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an XML from a file descriptor and build a tree.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlCtxtReadFd(htmlParserCtxtPtr ctxt, int fd,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (fd < 0)
- return (NULL);
- if (ctxt == NULL)
- return (NULL);
- xmlInitParser();
-
- htmlCtxtReset(ctxt);
-
-
- input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return (NULL);
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (htmlDoRead(ctxt, URL, encoding, options, 1));
-}
-
-/**
- * htmlCtxtReadIO:
- * @ctxt: an HTML parser context
- * @ioread: an I/O read function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of htmlParserOption(s)
- *
- * parse an HTML document from I/O functions and source and build a tree.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-htmlDocPtr
-htmlCtxtReadIO(htmlParserCtxtPtr ctxt, xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose, void *ioctx,
- const char *URL,
- const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (ioread == NULL)
- return (NULL);
- if (ctxt == NULL)
- return (NULL);
- xmlInitParser();
-
- htmlCtxtReset(ctxt);
-
- input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- if (ioclose != NULL)
- ioclose(ioctx);
- return (NULL);
- }
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (htmlDoRead(ctxt, URL, encoding, options, 1));
-}
-
-#define bottom_HTMLparser
-#include "elfgcchack.h"
-#endif /* LIBXML_HTML_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/HTMLtree.c b/external/libxml2_android/jni/libxml2/HTMLtree.c
deleted file mode 100644
index 2fd0c9c5..00000000
--- a/external/libxml2_android/jni/libxml2/HTMLtree.c
+++ /dev/null
@@ -1,1281 +0,0 @@
-/*
- * HTMLtree.c : implementation of access function for an HTML tree.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_HTML_ENABLED
-
-#include <string.h> /* for memset() only ! */
-
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/entities.h>
-#include <libxml/valid.h>
-#include <libxml/xmlerror.h>
-#include <libxml/parserInternals.h>
-#include <libxml/globals.h>
-#include <libxml/uri.h>
-
-#include "buf.h"
-
-/************************************************************************
- * *
- * Getting/Setting encoding meta tags *
- * *
- ************************************************************************/
-
-/**
- * htmlGetMetaEncoding:
- * @doc: the document
- *
- * Encoding definition lookup in the Meta tags
- *
- * Returns the current encoding as flagged in the HTML source
- */
-const xmlChar *
-htmlGetMetaEncoding(htmlDocPtr doc) {
- htmlNodePtr cur;
- const xmlChar *content;
- const xmlChar *encoding;
-
- if (doc == NULL)
- return(NULL);
- cur = doc->children;
-
- /*
- * Search the html
- */
- while (cur != NULL) {
- if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
- if (xmlStrEqual(cur->name, BAD_CAST"html"))
- break;
- if (xmlStrEqual(cur->name, BAD_CAST"head"))
- goto found_head;
- if (xmlStrEqual(cur->name, BAD_CAST"meta"))
- goto found_meta;
- }
- cur = cur->next;
- }
- if (cur == NULL)
- return(NULL);
- cur = cur->children;
-
- /*
- * Search the head
- */
- while (cur != NULL) {
- if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
- if (xmlStrEqual(cur->name, BAD_CAST"head"))
- break;
- if (xmlStrEqual(cur->name, BAD_CAST"meta"))
- goto found_meta;
- }
- cur = cur->next;
- }
- if (cur == NULL)
- return(NULL);
-found_head:
- cur = cur->children;
-
- /*
- * Search the meta elements
- */
-found_meta:
- while (cur != NULL) {
- if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
- if (xmlStrEqual(cur->name, BAD_CAST"meta")) {
- xmlAttrPtr attr = cur->properties;
- int http;
- const xmlChar *value;
-
- content = NULL;
- http = 0;
- while (attr != NULL) {
- if ((attr->children != NULL) &&
- (attr->children->type == XML_TEXT_NODE) &&
- (attr->children->next == NULL)) {
- value = attr->children->content;
- if ((!xmlStrcasecmp(attr->name, BAD_CAST"http-equiv"))
- && (!xmlStrcasecmp(value, BAD_CAST"Content-Type")))
- http = 1;
- else if ((value != NULL)
- && (!xmlStrcasecmp(attr->name, BAD_CAST"content")))
- content = value;
- if ((http != 0) && (content != NULL))
- goto found_content;
- }
- attr = attr->next;
- }
- }
- }
- cur = cur->next;
- }
- return(NULL);
-
-found_content:
- encoding = xmlStrstr(content, BAD_CAST"charset=");
- if (encoding == NULL)
- encoding = xmlStrstr(content, BAD_CAST"Charset=");
- if (encoding == NULL)
- encoding = xmlStrstr(content, BAD_CAST"CHARSET=");
- if (encoding != NULL) {
- encoding += 8;
- } else {
- encoding = xmlStrstr(content, BAD_CAST"charset =");
- if (encoding == NULL)
- encoding = xmlStrstr(content, BAD_CAST"Charset =");
- if (encoding == NULL)
- encoding = xmlStrstr(content, BAD_CAST"CHARSET =");
- if (encoding != NULL)
- encoding += 9;
- }
- if (encoding != NULL) {
- while ((*encoding == ' ') || (*encoding == '\t')) encoding++;
- }
- return(encoding);
-}
-
-/**
- * htmlSetMetaEncoding:
- * @doc: the document
- * @encoding: the encoding string
- *
- * Sets the current encoding in the Meta tags
- * NOTE: this will not change the document content encoding, just
- * the META flag associated.
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-htmlSetMetaEncoding(htmlDocPtr doc, const xmlChar *encoding) {
- htmlNodePtr cur, meta = NULL, head = NULL;
- const xmlChar *content = NULL;
- char newcontent[100];
-
- newcontent[0] = 0;
-
- if (doc == NULL)
- return(-1);
-
- /* html isn't a real encoding it's just libxml2 way to get entities */
- if (!xmlStrcasecmp(encoding, BAD_CAST "html"))
- return(-1);
-
- if (encoding != NULL) {
- snprintf(newcontent, sizeof(newcontent), "text/html; charset=%s",
- (char *)encoding);
- newcontent[sizeof(newcontent) - 1] = 0;
- }
-
- cur = doc->children;
-
- /*
- * Search the html
- */
- while (cur != NULL) {
- if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
- if (xmlStrcasecmp(cur->name, BAD_CAST"html") == 0)
- break;
- if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0)
- goto found_head;
- if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0)
- goto found_meta;
- }
- cur = cur->next;
- }
- if (cur == NULL)
- return(-1);
- cur = cur->children;
-
- /*
- * Search the head
- */
- while (cur != NULL) {
- if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
- if (xmlStrcasecmp(cur->name, BAD_CAST"head") == 0)
- break;
- if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) {
- head = cur->parent;
- goto found_meta;
- }
- }
- cur = cur->next;
- }
- if (cur == NULL)
- return(-1);
-found_head:
- head = cur;
- if (cur->children == NULL)
- goto create;
- cur = cur->children;
-
-found_meta:
- /*
- * Search and update all the remaining the meta elements carrying
- * encoding informations
- */
- while (cur != NULL) {
- if ((cur->type == XML_ELEMENT_NODE) && (cur->name != NULL)) {
- if (xmlStrcasecmp(cur->name, BAD_CAST"meta") == 0) {
- xmlAttrPtr attr = cur->properties;
- int http;
- const xmlChar *value;
-
- content = NULL;
- http = 0;
- while (attr != NULL) {
- if ((attr->children != NULL) &&
- (attr->children->type == XML_TEXT_NODE) &&
- (attr->children->next == NULL)) {
- value = attr->children->content;
- if ((!xmlStrcasecmp(attr->name, BAD_CAST"http-equiv"))
- && (!xmlStrcasecmp(value, BAD_CAST"Content-Type")))
- http = 1;
- else
- {
- if ((value != NULL) &&
- (!xmlStrcasecmp(attr->name, BAD_CAST"content")))
- content = value;
- }
- if ((http != 0) && (content != NULL))
- break;
- }
- attr = attr->next;
- }
- if ((http != 0) && (content != NULL)) {
- meta = cur;
- break;
- }
-
- }
- }
- cur = cur->next;
- }
-create:
- if (meta == NULL) {
- if ((encoding != NULL) && (head != NULL)) {
- /*
- * Create a new Meta element with the right attributes
- */
-
- meta = xmlNewDocNode(doc, NULL, BAD_CAST"meta", NULL);
- if (head->children == NULL)
- xmlAddChild(head, meta);
- else
- xmlAddPrevSibling(head->children, meta);
- xmlNewProp(meta, BAD_CAST"http-equiv", BAD_CAST"Content-Type");
- xmlNewProp(meta, BAD_CAST"content", BAD_CAST newcontent);
- }
- } else {
- /* remove the meta tag if NULL is passed */
- if (encoding == NULL) {
- xmlUnlinkNode(meta);
- xmlFreeNode(meta);
- }
- /* change the document only if there is a real encoding change */
- else if (xmlStrcasestr(content, encoding) == NULL) {
- xmlSetProp(meta, BAD_CAST"content", BAD_CAST newcontent);
- }
- }
-
-
- return(0);
-}
-
-/**
- * booleanHTMLAttrs:
- *
- * These are the HTML attributes which will be output
- * in minimized form, i.e. <option selected="selected"> will be
- * output as <option selected>, as per XSLT 1.0 16.2 "HTML Output Method"
- *
- */
-static const char* htmlBooleanAttrs[] = {
- "checked", "compact", "declare", "defer", "disabled", "ismap",
- "multiple", "nohref", "noresize", "noshade", "nowrap", "readonly",
- "selected", NULL
-};
-
-
-/**
- * htmlIsBooleanAttr:
- * @name: the name of the attribute to check
- *
- * Determine if a given attribute is a boolean attribute.
- *
- * returns: false if the attribute is not boolean, true otherwise.
- */
-int
-htmlIsBooleanAttr(const xmlChar *name)
-{
- int i = 0;
-
- while (htmlBooleanAttrs[i] != NULL) {
- if (xmlStrcasecmp((const xmlChar *)htmlBooleanAttrs[i], name) == 0)
- return 1;
- i++;
- }
- return 0;
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/*
- * private routine exported from xmlIO.c
- */
-xmlOutputBufferPtr
-xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder);
-/************************************************************************
- * *
- * Output error handlers *
- * *
- ************************************************************************/
-/**
- * htmlSaveErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-htmlSaveErrMemory(const char *extra)
-{
- __xmlSimpleError(XML_FROM_OUTPUT, XML_ERR_NO_MEMORY, NULL, NULL, extra);
-}
-
-/**
- * htmlSaveErr:
- * @code: the error number
- * @node: the location of the error.
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-htmlSaveErr(int code, xmlNodePtr node, const char *extra)
-{
- const char *msg = NULL;
-
- switch(code) {
- case XML_SAVE_NOT_UTF8:
- msg = "string is not in UTF-8\n";
- break;
- case XML_SAVE_CHAR_INVALID:
- msg = "invalid character value\n";
- break;
- case XML_SAVE_UNKNOWN_ENCODING:
- msg = "unknown encoding %s\n";
- break;
- case XML_SAVE_NO_DOCTYPE:
- msg = "HTML has no DOCTYPE\n";
- break;
- default:
- msg = "unexpected error number\n";
- }
- __xmlSimpleError(XML_FROM_OUTPUT, code, node, msg, extra);
-}
-
-/************************************************************************
- * *
- * Dumping HTML tree content to a simple buffer *
- * *
- ************************************************************************/
-
-/**
- * htmlBufNodeDumpFormat:
- * @buf: the xmlBufPtr output
- * @doc: the document
- * @cur: the current node
- * @format: should formatting spaces been added
- *
- * Dump an HTML node, recursive behaviour,children are printed too.
- *
- * Returns the number of byte written or -1 in case of error
- */
-static size_t
-htmlBufNodeDumpFormat(xmlBufPtr buf, xmlDocPtr doc, xmlNodePtr cur,
- int format) {
- size_t use;
- int ret;
- xmlOutputBufferPtr outbuf;
-
- if (cur == NULL) {
- return (-1);
- }
- if (buf == NULL) {
- return (-1);
- }
- outbuf = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer));
- if (outbuf == NULL) {
- htmlSaveErrMemory("allocating HTML output buffer");
- return (-1);
- }
- memset(outbuf, 0, (size_t) sizeof(xmlOutputBuffer));
- outbuf->buffer = buf;
- outbuf->encoder = NULL;
- outbuf->writecallback = NULL;
- outbuf->closecallback = NULL;
- outbuf->context = NULL;
- outbuf->written = 0;
-
- use = xmlBufUse(buf);
- htmlNodeDumpFormatOutput(outbuf, doc, cur, NULL, format);
- xmlFree(outbuf);
- ret = xmlBufUse(buf) - use;
- return (ret);
-}
-
-/**
- * htmlNodeDump:
- * @buf: the HTML buffer output
- * @doc: the document
- * @cur: the current node
- *
- * Dump an HTML node, recursive behaviour,children are printed too,
- * and formatting returns are added.
- *
- * Returns the number of byte written or -1 in case of error
- */
-int
-htmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur) {
- xmlBufPtr buffer;
- size_t ret;
-
- if ((buf == NULL) || (cur == NULL))
- return(-1);
-
- xmlInitParser();
- buffer = xmlBufFromBuffer(buf);
- if (buffer == NULL)
- return(-1);
-
- ret = htmlBufNodeDumpFormat(buffer, doc, cur, 1);
-
- xmlBufBackToBuffer(buffer);
-
- if (ret > INT_MAX)
- return(-1);
- return((int) ret);
-}
-
-/**
- * htmlNodeDumpFileFormat:
- * @out: the FILE pointer
- * @doc: the document
- * @cur: the current node
- * @encoding: the document encoding
- * @format: should formatting spaces been added
- *
- * Dump an HTML node, recursive behaviour,children are printed too.
- *
- * TODO: if encoding == NULL try to save in the doc encoding
- *
- * returns: the number of byte written or -1 in case of failure.
- */
-int
-htmlNodeDumpFileFormat(FILE *out, xmlDocPtr doc,
- xmlNodePtr cur, const char *encoding, int format) {
- xmlOutputBufferPtr buf;
- xmlCharEncodingHandlerPtr handler = NULL;
- int ret;
-
- xmlInitParser();
-
- if (encoding != NULL) {
- xmlCharEncoding enc;
-
- enc = xmlParseCharEncoding(encoding);
- if (enc != XML_CHAR_ENCODING_UTF8) {
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler == NULL)
- htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
- }
- }
-
- /*
- * Fallback to HTML or ASCII when the encoding is unspecified
- */
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("HTML");
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("ascii");
-
- /*
- * save the content to a temp buffer.
- */
- buf = xmlOutputBufferCreateFile(out, handler);
- if (buf == NULL) return(0);
-
- htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
-
- ret = xmlOutputBufferClose(buf);
- return(ret);
-}
-
-/**
- * htmlNodeDumpFile:
- * @out: the FILE pointer
- * @doc: the document
- * @cur: the current node
- *
- * Dump an HTML node, recursive behaviour,children are printed too,
- * and formatting returns are added.
- */
-void
-htmlNodeDumpFile(FILE *out, xmlDocPtr doc, xmlNodePtr cur) {
- htmlNodeDumpFileFormat(out, doc, cur, NULL, 1);
-}
-
-/**
- * htmlDocDumpMemoryFormat:
- * @cur: the document
- * @mem: OUT: the memory pointer
- * @size: OUT: the memory length
- * @format: should formatting spaces been added
- *
- * Dump an HTML document in memory and return the xmlChar * and it's size.
- * It's up to the caller to free the memory.
- */
-void
-htmlDocDumpMemoryFormat(xmlDocPtr cur, xmlChar**mem, int *size, int format) {
- xmlOutputBufferPtr buf;
- xmlCharEncodingHandlerPtr handler = NULL;
- const char *encoding;
-
- xmlInitParser();
-
- if ((mem == NULL) || (size == NULL))
- return;
- if (cur == NULL) {
- *mem = NULL;
- *size = 0;
- return;
- }
-
- encoding = (const char *) htmlGetMetaEncoding(cur);
-
- if (encoding != NULL) {
- xmlCharEncoding enc;
-
- enc = xmlParseCharEncoding(encoding);
- if (enc != cur->charset) {
- if (cur->charset != XML_CHAR_ENCODING_UTF8) {
- /*
- * Not supported yet
- */
- *mem = NULL;
- *size = 0;
- return;
- }
-
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler == NULL)
- htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
-
- } else {
- handler = xmlFindCharEncodingHandler(encoding);
- }
- }
-
- /*
- * Fallback to HTML or ASCII when the encoding is unspecified
- */
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("HTML");
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("ascii");
-
- buf = xmlAllocOutputBufferInternal(handler);
- if (buf == NULL) {
- *mem = NULL;
- *size = 0;
- return;
- }
-
- htmlDocContentDumpFormatOutput(buf, cur, NULL, format);
-
- xmlOutputBufferFlush(buf);
- if (buf->conv != NULL) {
- *size = xmlBufUse(buf->conv);
- *mem = xmlStrndup(xmlBufContent(buf->conv), *size);
- } else {
- *size = xmlBufUse(buf->buffer);
- *mem = xmlStrndup(xmlBufContent(buf->buffer), *size);
- }
- (void)xmlOutputBufferClose(buf);
-}
-
-/**
- * htmlDocDumpMemory:
- * @cur: the document
- * @mem: OUT: the memory pointer
- * @size: OUT: the memory length
- *
- * Dump an HTML document in memory and return the xmlChar * and it's size.
- * It's up to the caller to free the memory.
- */
-void
-htmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int *size) {
- htmlDocDumpMemoryFormat(cur, mem, size, 1);
-}
-
-
-/************************************************************************
- * *
- * Dumping HTML tree content to an I/O output buffer *
- * *
- ************************************************************************/
-
-void xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur);
-
-/**
- * htmlDtdDumpOutput:
- * @buf: the HTML buffer output
- * @doc: the document
- * @encoding: the encoding string
- *
- * TODO: check whether encoding is needed
- *
- * Dump the HTML document DTD, if any.
- */
-static void
-htmlDtdDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
- const char *encoding ATTRIBUTE_UNUSED) {
- xmlDtdPtr cur = doc->intSubset;
-
- if (cur == NULL) {
- htmlSaveErr(XML_SAVE_NO_DOCTYPE, (xmlNodePtr) doc, NULL);
- return;
- }
- xmlOutputBufferWriteString(buf, "<!DOCTYPE ");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (cur->ExternalID != NULL) {
- xmlOutputBufferWriteString(buf, " PUBLIC ");
- xmlBufWriteQuotedString(buf->buffer, cur->ExternalID);
- if (cur->SystemID != NULL) {
- xmlOutputBufferWriteString(buf, " ");
- xmlBufWriteQuotedString(buf->buffer, cur->SystemID);
- }
- } else if (cur->SystemID != NULL &&
- xmlStrcmp(cur->SystemID, BAD_CAST "about:legacy-compat")) {
- xmlOutputBufferWriteString(buf, " SYSTEM ");
- xmlBufWriteQuotedString(buf->buffer, cur->SystemID);
- }
- xmlOutputBufferWriteString(buf, ">\n");
-}
-
-/**
- * htmlAttrDumpOutput:
- * @buf: the HTML buffer output
- * @doc: the document
- * @cur: the attribute pointer
- * @encoding: the encoding string
- *
- * Dump an HTML attribute
- */
-static void
-htmlAttrDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur,
- const char *encoding ATTRIBUTE_UNUSED) {
- xmlChar *value;
-
- /*
- * The html output method should not escape a & character
- * occurring in an attribute value immediately followed by
- * a { character (see Section B.7.1 of the HTML 4.0 Recommendation).
- * This is implemented in xmlEncodeEntitiesReentrant
- */
-
- if (cur == NULL) {
- return;
- }
- xmlOutputBufferWriteString(buf, " ");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWriteString(buf, ":");
- }
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if ((cur->children != NULL) && (!htmlIsBooleanAttr(cur->name))) {
- value = xmlNodeListGetString(doc, cur->children, 0);
- if (value) {
- xmlOutputBufferWriteString(buf, "=");
- if ((cur->ns == NULL) && (cur->parent != NULL) &&
- (cur->parent->ns == NULL) &&
- ((!xmlStrcasecmp(cur->name, BAD_CAST "href")) ||
- (!xmlStrcasecmp(cur->name, BAD_CAST "action")) ||
- (!xmlStrcasecmp(cur->name, BAD_CAST "src")) ||
- ((!xmlStrcasecmp(cur->name, BAD_CAST "name")) &&
- (!xmlStrcasecmp(cur->parent->name, BAD_CAST "a"))))) {
- xmlChar *tmp = value;
- /* xmlURIEscapeStr() escapes '"' so it can be safely used. */
- xmlBufCCat(buf->buffer, "\"");
-
- while (IS_BLANK_CH(*tmp)) tmp++;
-
- /* URI Escape everything, except server side includes. */
- for ( ; ; ) {
- xmlChar *escaped;
- xmlChar endChar;
- xmlChar *end = NULL;
- xmlChar *start = (xmlChar *)xmlStrstr(tmp, BAD_CAST "<!--");
- if (start != NULL) {
- end = (xmlChar *)xmlStrstr(tmp, BAD_CAST "-->");
- if (end != NULL) {
- *start = '\0';
- }
- }
-
- /* Escape the whole string, or until start (set to '\0'). */
- escaped = xmlURIEscapeStr(tmp, BAD_CAST"@/:=?;#%&,+");
- if (escaped != NULL) {
- xmlBufCat(buf->buffer, escaped);
- xmlFree(escaped);
- } else {
- xmlBufCat(buf->buffer, tmp);
- }
-
- if (end == NULL) { /* Everything has been written. */
- break;
- }
-
- /* Do not escape anything within server side includes. */
- *start = '<'; /* Restore the first character of "<!--". */
- end += 3; /* strlen("-->") */
- endChar = *end;
- *end = '\0';
- xmlBufCat(buf->buffer, start);
- *end = endChar;
- tmp = end;
- }
-
- xmlBufCCat(buf->buffer, "\"");
- } else {
- xmlBufWriteQuotedString(buf->buffer, value);
- }
- xmlFree(value);
- } else {
- xmlOutputBufferWriteString(buf, "=\"\"");
- }
- }
-}
-
-/**
- * htmlAttrListDumpOutput:
- * @buf: the HTML buffer output
- * @doc: the document
- * @cur: the first attribute pointer
- * @encoding: the encoding string
- *
- * Dump a list of HTML attributes
- */
-static void
-htmlAttrListDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur, const char *encoding) {
- if (cur == NULL) {
- return;
- }
- while (cur != NULL) {
- htmlAttrDumpOutput(buf, doc, cur, encoding);
- cur = cur->next;
- }
-}
-
-
-
-/**
- * htmlNodeListDumpOutput:
- * @buf: the HTML buffer output
- * @doc: the document
- * @cur: the first node
- * @encoding: the encoding string
- * @format: should formatting spaces been added
- *
- * Dump an HTML node list, recursive behaviour,children are printed too.
- */
-static void
-htmlNodeListDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
- xmlNodePtr cur, const char *encoding, int format) {
- if (cur == NULL) {
- return;
- }
- while (cur != NULL) {
- htmlNodeDumpFormatOutput(buf, doc, cur, encoding, format);
- cur = cur->next;
- }
-}
-
-/**
- * htmlNodeDumpFormatOutput:
- * @buf: the HTML buffer output
- * @doc: the document
- * @cur: the current node
- * @encoding: the encoding string
- * @format: should formatting spaces been added
- *
- * Dump an HTML node, recursive behaviour,children are printed too.
- */
-void
-htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
- xmlNodePtr cur, const char *encoding, int format) {
- const htmlElemDesc * info;
-
- xmlInitParser();
-
- if ((cur == NULL) || (buf == NULL)) {
- return;
- }
- /*
- * Special cases.
- */
- if (cur->type == XML_DTD_NODE)
- return;
- if ((cur->type == XML_HTML_DOCUMENT_NODE) ||
- (cur->type == XML_DOCUMENT_NODE)){
- htmlDocContentDumpOutput(buf, (xmlDocPtr) cur, encoding);
- return;
- }
- if (cur->type == XML_ATTRIBUTE_NODE) {
- htmlAttrDumpOutput(buf, doc, (xmlAttrPtr) cur, encoding);
- return;
- }
- if (cur->type == HTML_TEXT_NODE) {
- if (cur->content != NULL) {
- if (((cur->name == (const xmlChar *)xmlStringText) ||
- (cur->name != (const xmlChar *)xmlStringTextNoenc)) &&
- ((cur->parent == NULL) ||
- ((xmlStrcasecmp(cur->parent->name, BAD_CAST "script")) &&
- (xmlStrcasecmp(cur->parent->name, BAD_CAST "style"))))) {
- xmlChar *buffer;
-
- buffer = xmlEncodeEntitiesReentrant(doc, cur->content);
- if (buffer != NULL) {
- xmlOutputBufferWriteString(buf, (const char *)buffer);
- xmlFree(buffer);
- }
- } else {
- xmlOutputBufferWriteString(buf, (const char *)cur->content);
- }
- }
- return;
- }
- if (cur->type == HTML_COMMENT_NODE) {
- if (cur->content != NULL) {
- xmlOutputBufferWriteString(buf, "<!--");
- xmlOutputBufferWriteString(buf, (const char *)cur->content);
- xmlOutputBufferWriteString(buf, "-->");
- }
- return;
- }
- if (cur->type == HTML_PI_NODE) {
- if (cur->name == NULL)
- return;
- xmlOutputBufferWriteString(buf, "<?");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (cur->content != NULL) {
- xmlOutputBufferWriteString(buf, " ");
- xmlOutputBufferWriteString(buf, (const char *)cur->content);
- }
- xmlOutputBufferWriteString(buf, ">");
- return;
- }
- if (cur->type == HTML_ENTITY_REF_NODE) {
- xmlOutputBufferWriteString(buf, "&");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWriteString(buf, ";");
- return;
- }
- if (cur->type == HTML_PRESERVE_NODE) {
- if (cur->content != NULL) {
- xmlOutputBufferWriteString(buf, (const char *)cur->content);
- }
- return;
- }
-
- /*
- * Get specific HTML info for that node.
- */
- if (cur->ns == NULL)
- info = htmlTagLookup(cur->name);
- else
- info = NULL;
-
- xmlOutputBufferWriteString(buf, "<");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWriteString(buf, ":");
- }
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (cur->nsDef)
- xmlNsListDumpOutput(buf, cur->nsDef);
- if (cur->properties != NULL)
- htmlAttrListDumpOutput(buf, doc, cur->properties, encoding);
-
- if ((info != NULL) && (info->empty)) {
- xmlOutputBufferWriteString(buf, ">");
- if ((format) && (!info->isinline) && (cur->next != NULL)) {
- if ((cur->next->type != HTML_TEXT_NODE) &&
- (cur->next->type != HTML_ENTITY_REF_NODE) &&
- (cur->parent != NULL) &&
- (cur->parent->name != NULL) &&
- (cur->parent->name[0] != 'p')) /* p, pre, param */
- xmlOutputBufferWriteString(buf, "\n");
- }
- return;
- }
- if (((cur->type == XML_ELEMENT_NODE) || (cur->content == NULL)) &&
- (cur->children == NULL)) {
- if ((info != NULL) && (info->saveEndTag != 0) &&
- (xmlStrcmp(BAD_CAST info->name, BAD_CAST "html")) &&
- (xmlStrcmp(BAD_CAST info->name, BAD_CAST "body"))) {
- xmlOutputBufferWriteString(buf, ">");
- } else {
- xmlOutputBufferWriteString(buf, "></");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWriteString(buf, ":");
- }
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWriteString(buf, ">");
- }
- if ((format) && (cur->next != NULL) &&
- (info != NULL) && (!info->isinline)) {
- if ((cur->next->type != HTML_TEXT_NODE) &&
- (cur->next->type != HTML_ENTITY_REF_NODE) &&
- (cur->parent != NULL) &&
- (cur->parent->name != NULL) &&
- (cur->parent->name[0] != 'p')) /* p, pre, param */
- xmlOutputBufferWriteString(buf, "\n");
- }
- return;
- }
- xmlOutputBufferWriteString(buf, ">");
- if ((cur->type != XML_ELEMENT_NODE) &&
- (cur->content != NULL)) {
- /*
- * Uses the OutputBuffer property to automatically convert
- * invalids to charrefs
- */
-
- xmlOutputBufferWriteString(buf, (const char *) cur->content);
- }
- if (cur->children != NULL) {
- if ((format) && (info != NULL) && (!info->isinline) &&
- (cur->children->type != HTML_TEXT_NODE) &&
- (cur->children->type != HTML_ENTITY_REF_NODE) &&
- (cur->children != cur->last) &&
- (cur->name != NULL) &&
- (cur->name[0] != 'p')) /* p, pre, param */
- xmlOutputBufferWriteString(buf, "\n");
- htmlNodeListDumpOutput(buf, doc, cur->children, encoding, format);
- if ((format) && (info != NULL) && (!info->isinline) &&
- (cur->last->type != HTML_TEXT_NODE) &&
- (cur->last->type != HTML_ENTITY_REF_NODE) &&
- (cur->children != cur->last) &&
- (cur->name != NULL) &&
- (cur->name[0] != 'p')) /* p, pre, param */
- xmlOutputBufferWriteString(buf, "\n");
- }
- xmlOutputBufferWriteString(buf, "</");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWriteString(buf, ":");
- }
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWriteString(buf, ">");
- if ((format) && (info != NULL) && (!info->isinline) &&
- (cur->next != NULL)) {
- if ((cur->next->type != HTML_TEXT_NODE) &&
- (cur->next->type != HTML_ENTITY_REF_NODE) &&
- (cur->parent != NULL) &&
- (cur->parent->name != NULL) &&
- (cur->parent->name[0] != 'p')) /* p, pre, param */
- xmlOutputBufferWriteString(buf, "\n");
- }
-}
-
-/**
- * htmlNodeDumpOutput:
- * @buf: the HTML buffer output
- * @doc: the document
- * @cur: the current node
- * @encoding: the encoding string
- *
- * Dump an HTML node, recursive behaviour,children are printed too,
- * and formatting returns/spaces are added.
- */
-void
-htmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc,
- xmlNodePtr cur, const char *encoding) {
- htmlNodeDumpFormatOutput(buf, doc, cur, encoding, 1);
-}
-
-/**
- * htmlDocContentDumpFormatOutput:
- * @buf: the HTML buffer output
- * @cur: the document
- * @encoding: the encoding string
- * @format: should formatting spaces been added
- *
- * Dump an HTML document.
- */
-void
-htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf, xmlDocPtr cur,
- const char *encoding, int format) {
- int type;
-
- xmlInitParser();
-
- if ((buf == NULL) || (cur == NULL))
- return;
-
- /*
- * force to output the stuff as HTML, especially for entities
- */
- type = cur->type;
- cur->type = XML_HTML_DOCUMENT_NODE;
- if (cur->intSubset != NULL) {
- htmlDtdDumpOutput(buf, cur, NULL);
- }
- if (cur->children != NULL) {
- htmlNodeListDumpOutput(buf, cur, cur->children, encoding, format);
- }
- xmlOutputBufferWriteString(buf, "\n");
- cur->type = (xmlElementType) type;
-}
-
-/**
- * htmlDocContentDumpOutput:
- * @buf: the HTML buffer output
- * @cur: the document
- * @encoding: the encoding string
- *
- * Dump an HTML document. Formating return/spaces are added.
- */
-void
-htmlDocContentDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr cur,
- const char *encoding) {
- htmlDocContentDumpFormatOutput(buf, cur, encoding, 1);
-}
-
-/************************************************************************
- * *
- * Saving functions front-ends *
- * *
- ************************************************************************/
-
-/**
- * htmlDocDump:
- * @f: the FILE*
- * @cur: the document
- *
- * Dump an HTML document to an open FILE.
- *
- * returns: the number of byte written or -1 in case of failure.
- */
-int
-htmlDocDump(FILE *f, xmlDocPtr cur) {
- xmlOutputBufferPtr buf;
- xmlCharEncodingHandlerPtr handler = NULL;
- const char *encoding;
- int ret;
-
- xmlInitParser();
-
- if ((cur == NULL) || (f == NULL)) {
- return(-1);
- }
-
- encoding = (const char *) htmlGetMetaEncoding(cur);
-
- if (encoding != NULL) {
- xmlCharEncoding enc;
-
- enc = xmlParseCharEncoding(encoding);
- if (enc != cur->charset) {
- if (cur->charset != XML_CHAR_ENCODING_UTF8) {
- /*
- * Not supported yet
- */
- return(-1);
- }
-
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler == NULL)
- htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
- } else {
- handler = xmlFindCharEncodingHandler(encoding);
- }
- }
-
- /*
- * Fallback to HTML or ASCII when the encoding is unspecified
- */
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("HTML");
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("ascii");
-
- buf = xmlOutputBufferCreateFile(f, handler);
- if (buf == NULL) return(-1);
- htmlDocContentDumpOutput(buf, cur, NULL);
-
- ret = xmlOutputBufferClose(buf);
- return(ret);
-}
-
-/**
- * htmlSaveFile:
- * @filename: the filename (or URL)
- * @cur: the document
- *
- * Dump an HTML document to a file. If @filename is "-" the stdout file is
- * used.
- * returns: the number of byte written or -1 in case of failure.
- */
-int
-htmlSaveFile(const char *filename, xmlDocPtr cur) {
- xmlOutputBufferPtr buf;
- xmlCharEncodingHandlerPtr handler = NULL;
- const char *encoding;
- int ret;
-
- if ((cur == NULL) || (filename == NULL))
- return(-1);
-
- xmlInitParser();
-
- encoding = (const char *) htmlGetMetaEncoding(cur);
-
- if (encoding != NULL) {
- xmlCharEncoding enc;
-
- enc = xmlParseCharEncoding(encoding);
- if (enc != cur->charset) {
- if (cur->charset != XML_CHAR_ENCODING_UTF8) {
- /*
- * Not supported yet
- */
- return(-1);
- }
-
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler == NULL)
- htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
- }
- }
-
- /*
- * Fallback to HTML or ASCII when the encoding is unspecified
- */
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("HTML");
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("ascii");
-
- /*
- * save the content to a temp buffer.
- */
- buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression);
- if (buf == NULL) return(0);
-
- htmlDocContentDumpOutput(buf, cur, NULL);
-
- ret = xmlOutputBufferClose(buf);
- return(ret);
-}
-
-/**
- * htmlSaveFileFormat:
- * @filename: the filename
- * @cur: the document
- * @format: should formatting spaces been added
- * @encoding: the document encoding
- *
- * Dump an HTML document to a file using a given encoding.
- *
- * returns: the number of byte written or -1 in case of failure.
- */
-int
-htmlSaveFileFormat(const char *filename, xmlDocPtr cur,
- const char *encoding, int format) {
- xmlOutputBufferPtr buf;
- xmlCharEncodingHandlerPtr handler = NULL;
- int ret;
-
- if ((cur == NULL) || (filename == NULL))
- return(-1);
-
- xmlInitParser();
-
- if (encoding != NULL) {
- xmlCharEncoding enc;
-
- enc = xmlParseCharEncoding(encoding);
- if (enc != cur->charset) {
- if (cur->charset != XML_CHAR_ENCODING_UTF8) {
- /*
- * Not supported yet
- */
- return(-1);
- }
-
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler == NULL)
- htmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
- }
- htmlSetMetaEncoding(cur, (const xmlChar *) encoding);
- } else {
- htmlSetMetaEncoding(cur, (const xmlChar *) "UTF-8");
- }
-
- /*
- * Fallback to HTML or ASCII when the encoding is unspecified
- */
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("HTML");
- if (handler == NULL)
- handler = xmlFindCharEncodingHandler("ascii");
-
- /*
- * save the content to a temp buffer.
- */
- buf = xmlOutputBufferCreateFilename(filename, handler, 0);
- if (buf == NULL) return(0);
-
- htmlDocContentDumpFormatOutput(buf, cur, encoding, format);
-
- ret = xmlOutputBufferClose(buf);
- return(ret);
-}
-
-/**
- * htmlSaveFileEnc:
- * @filename: the filename
- * @cur: the document
- * @encoding: the document encoding
- *
- * Dump an HTML document to a file using a given encoding
- * and formatting returns/spaces are added.
- *
- * returns: the number of byte written or -1 in case of failure.
- */
-int
-htmlSaveFileEnc(const char *filename, xmlDocPtr cur, const char *encoding) {
- return(htmlSaveFileFormat(filename, cur, encoding, 1));
-}
-
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#define bottom_HTMLtree
-#include "elfgcchack.h"
-#endif /* LIBXML_HTML_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/SAX.c b/external/libxml2_android/jni/libxml2/SAX.c
deleted file mode 100644
index 292af57e..00000000
--- a/external/libxml2_android/jni/libxml2/SAX.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * SAX.c : Old SAX v1 handlers to build a tree.
- * Deprecated except for compatibility
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <daniel@veillard.com>
- */
-
-
-#define IN_LIBXML
-#include "libxml.h"
-#include <stdlib.h>
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/valid.h>
-#include <libxml/entities.h>
-#include <libxml/xmlerror.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlIO.h>
-#include <libxml/SAX.h>
-#include <libxml/uri.h>
-#include <libxml/valid.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/globals.h>
-#include <libxml/SAX2.h>
-
-#ifdef LIBXML_LEGACY_ENABLED
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * initxmlDefaultSAXHandler:
- * @hdlr: the SAX handler
- * @warning: flag if non-zero sets the handler warning procedure
- *
- * Initialize the default XML SAX version 1 handler
- * DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks
- */
-void
-initxmlDefaultSAXHandler(xmlSAXHandlerV1 *hdlr, int warning)
-{
-
- if(hdlr->initialized == 1)
- return;
-
- hdlr->internalSubset = xmlSAX2InternalSubset;
- hdlr->externalSubset = xmlSAX2ExternalSubset;
- hdlr->isStandalone = xmlSAX2IsStandalone;
- hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
- hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
- hdlr->resolveEntity = xmlSAX2ResolveEntity;
- hdlr->getEntity = xmlSAX2GetEntity;
- hdlr->getParameterEntity = xmlSAX2GetParameterEntity;
- hdlr->entityDecl = xmlSAX2EntityDecl;
- hdlr->attributeDecl = xmlSAX2AttributeDecl;
- hdlr->elementDecl = xmlSAX2ElementDecl;
- hdlr->notationDecl = xmlSAX2NotationDecl;
- hdlr->unparsedEntityDecl = xmlSAX2UnparsedEntityDecl;
- hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
- hdlr->startDocument = xmlSAX2StartDocument;
- hdlr->endDocument = xmlSAX2EndDocument;
- hdlr->startElement = xmlSAX2StartElement;
- hdlr->endElement = xmlSAX2EndElement;
- hdlr->reference = xmlSAX2Reference;
- hdlr->characters = xmlSAX2Characters;
- hdlr->cdataBlock = xmlSAX2CDataBlock;
- hdlr->ignorableWhitespace = xmlSAX2Characters;
- hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
- if (warning == 0)
- hdlr->warning = NULL;
- else
- hdlr->warning = xmlParserWarning;
- hdlr->error = xmlParserError;
- hdlr->fatalError = xmlParserError;
-
- hdlr->initialized = 1;
-}
-
-#ifdef LIBXML_HTML_ENABLED
-
-/**
- * inithtmlDefaultSAXHandler:
- * @hdlr: the SAX handler
- *
- * Initialize the default HTML SAX version 1 handler
- * DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks
- */
-void
-inithtmlDefaultSAXHandler(xmlSAXHandlerV1 *hdlr)
-{
- if(hdlr->initialized == 1)
- return;
-
- hdlr->internalSubset = xmlSAX2InternalSubset;
- hdlr->externalSubset = NULL;
- hdlr->isStandalone = NULL;
- hdlr->hasInternalSubset = NULL;
- hdlr->hasExternalSubset = NULL;
- hdlr->resolveEntity = NULL;
- hdlr->getEntity = xmlSAX2GetEntity;
- hdlr->getParameterEntity = NULL;
- hdlr->entityDecl = NULL;
- hdlr->attributeDecl = NULL;
- hdlr->elementDecl = NULL;
- hdlr->notationDecl = NULL;
- hdlr->unparsedEntityDecl = NULL;
- hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
- hdlr->startDocument = xmlSAX2StartDocument;
- hdlr->endDocument = xmlSAX2EndDocument;
- hdlr->startElement = xmlSAX2StartElement;
- hdlr->endElement = xmlSAX2EndElement;
- hdlr->reference = NULL;
- hdlr->characters = xmlSAX2Characters;
- hdlr->cdataBlock = xmlSAX2CDataBlock;
- hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
- hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
- hdlr->comment = xmlSAX2Comment;
- hdlr->warning = xmlParserWarning;
- hdlr->error = xmlParserError;
- hdlr->fatalError = xmlParserError;
-
- hdlr->initialized = 1;
-}
-
-#endif /* LIBXML_HTML_ENABLED */
-
-#ifdef LIBXML_DOCB_ENABLED
-/**
- * initdocbDefaultSAXHandler:
- * @hdlr: the SAX handler
- *
- * Initialize the default DocBook SAX version 1 handler
- * DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks
- */
-void
-initdocbDefaultSAXHandler(xmlSAXHandlerV1 *hdlr)
-{
- if(hdlr->initialized == 1)
- return;
-
- hdlr->internalSubset = xmlSAX2InternalSubset;
- hdlr->externalSubset = NULL;
- hdlr->isStandalone = xmlSAX2IsStandalone;
- hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
- hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
- hdlr->resolveEntity = xmlSAX2ResolveEntity;
- hdlr->getEntity = xmlSAX2GetEntity;
- hdlr->getParameterEntity = NULL;
- hdlr->entityDecl = xmlSAX2EntityDecl;
- hdlr->attributeDecl = NULL;
- hdlr->elementDecl = NULL;
- hdlr->notationDecl = NULL;
- hdlr->unparsedEntityDecl = NULL;
- hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
- hdlr->startDocument = xmlSAX2StartDocument;
- hdlr->endDocument = xmlSAX2EndDocument;
- hdlr->startElement = xmlSAX2StartElement;
- hdlr->endElement = xmlSAX2EndElement;
- hdlr->reference = xmlSAX2Reference;
- hdlr->characters = xmlSAX2Characters;
- hdlr->cdataBlock = NULL;
- hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
- hdlr->processingInstruction = NULL;
- hdlr->comment = xmlSAX2Comment;
- hdlr->warning = xmlParserWarning;
- hdlr->error = xmlParserError;
- hdlr->fatalError = xmlParserError;
-
- hdlr->initialized = 1;
-}
-
-#endif /* LIBXML_DOCB_ENABLED */
-
-#endif /* LIBXML_SAX1_ENABLED */
-
-#define bottom_SAX
-#include "elfgcchack.h"
-#endif /* LIBXML_LEGACY_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/SAX2.c b/external/libxml2_android/jni/libxml2/SAX2.c
deleted file mode 100644
index 0f0ad2a4..00000000
--- a/external/libxml2_android/jni/libxml2/SAX2.c
+++ /dev/null
@@ -1,3046 +0,0 @@
-/*
- * SAX2.c : Default SAX2 handler to build a tree.
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <daniel@veillard.com>
- */
-
-
-#define IN_LIBXML
-#include "libxml.h"
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/valid.h>
-#include <libxml/entities.h>
-#include <libxml/xmlerror.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlIO.h>
-#include <libxml/SAX.h>
-#include <libxml/uri.h>
-#include <libxml/valid.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/globals.h>
-
-/* Define SIZE_T_MAX unless defined through <limits.h>. */
-#ifndef SIZE_T_MAX
-# define SIZE_T_MAX ((size_t)-1)
-#endif /* !SIZE_T_MAX */
-
-/* #define DEBUG_SAX2 */
-/* #define DEBUG_SAX2_TREE */
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- * XML_CATALOG_PREFER user env to select between system/public prefered
- * option. C.f. Richard Tobin <richard@cogsci.ed.ac.uk>
- *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with
- *> values "system" and "public". I have made the default be "system" to
- *> match yours.
- */
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-/*
- * xmlSAX2ErrMemory:
- * @ctxt: an XML validation parser context
- * @msg: a string to accompany the error message
- */
-static void LIBXML_ATTR_FORMAT(2,0)
-xmlSAX2ErrMemory(xmlParserCtxtPtr ctxt, const char *msg) {
- xmlStructuredErrorFunc schannel = NULL;
- const char *str1 = "out of memory\n";
-
- if (ctxt != NULL) {
- ctxt->errNo = XML_ERR_NO_MEMORY;
- if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
- schannel = ctxt->sax->serror;
- __xmlRaiseError(schannel,
- ctxt->vctxt.error, ctxt->vctxt.userData,
- ctxt, NULL, XML_FROM_PARSER, XML_ERR_NO_MEMORY,
- XML_ERR_ERROR, NULL, 0, (const char *) str1,
- NULL, NULL, 0, 0,
- msg, (const char *) str1, NULL);
- ctxt->errNo = XML_ERR_NO_MEMORY;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- } else {
- __xmlRaiseError(schannel,
- NULL, NULL,
- ctxt, NULL, XML_FROM_PARSER, XML_ERR_NO_MEMORY,
- XML_ERR_ERROR, NULL, 0, (const char *) str1,
- NULL, NULL, 0, 0,
- msg, (const char *) str1, NULL);
- }
-}
-
-/**
- * xmlValidError:
- * @ctxt: an XML validation parser context
- * @error: the error number
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- *
- * Handle a validation error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlErrValid(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const char *str1, const char *str2)
-{
- xmlStructuredErrorFunc schannel = NULL;
-
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL) {
- ctxt->errNo = error;
- if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
- schannel = ctxt->sax->serror;
- __xmlRaiseError(schannel,
- ctxt->vctxt.error, ctxt->vctxt.userData,
- ctxt, NULL, XML_FROM_DTD, error,
- XML_ERR_ERROR, NULL, 0, (const char *) str1,
- (const char *) str2, NULL, 0, 0,
- msg, (const char *) str1, (const char *) str2);
- ctxt->valid = 0;
- } else {
- __xmlRaiseError(schannel,
- NULL, NULL,
- ctxt, NULL, XML_FROM_DTD, error,
- XML_ERR_ERROR, NULL, 0, (const char *) str1,
- (const char *) str2, NULL, 0, 0,
- msg, (const char *) str1, (const char *) str2);
- }
-}
-
-/**
- * xmlFatalErrMsg:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @str1: an error string
- * @str2: an error string
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar *str1, const xmlChar *str2)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
- XML_ERR_FATAL, NULL, 0,
- (const char *) str1, (const char *) str2,
- NULL, 0, 0, msg, str1, str2);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- ctxt->valid = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlWarnMsg:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @str1: an error string
- * @str2: an error string
- *
- * Handle a parser warning
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlWarnMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar *str1)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
- XML_ERR_WARNING, NULL, 0,
- (const char *) str1, NULL,
- NULL, 0, 0, msg, str1);
-}
-
-/**
- * xmlNsErrMsg:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @str1: an error string
- * @str2: an error string
- *
- * Handle a namespace error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlNsErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar *str1, const xmlChar *str2)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
- XML_ERR_ERROR, NULL, 0,
- (const char *) str1, (const char *) str2,
- NULL, 0, 0, msg, str1, str2);
-}
-
-/**
- * xmlNsWarnMsg:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @str1: an error string
- *
- * Handle a namespace warning
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlNsWarnMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar *str1, const xmlChar *str2)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
- XML_ERR_WARNING, NULL, 0,
- (const char *) str1, (const char *) str2,
- NULL, 0, 0, msg, str1, str2);
-}
-
-/**
- * xmlSAX2GetPublicId:
- * @ctx: the user data (XML parser context)
- *
- * Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"
- *
- * Returns a xmlChar *
- */
-const xmlChar *
-xmlSAX2GetPublicId(void *ctx ATTRIBUTE_UNUSED)
-{
- /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
- return(NULL);
-}
-
-/**
- * xmlSAX2GetSystemId:
- * @ctx: the user data (XML parser context)
- *
- * Provides the system ID, basically URL or filename e.g.
- * http://www.sgmlsource.com/dtds/memo.dtd
- *
- * Returns a xmlChar *
- */
-const xmlChar *
-xmlSAX2GetSystemId(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if ((ctx == NULL) || (ctxt->input == NULL)) return(NULL);
- return((const xmlChar *) ctxt->input->filename);
-}
-
-/**
- * xmlSAX2GetLineNumber:
- * @ctx: the user data (XML parser context)
- *
- * Provide the line number of the current parsing point.
- *
- * Returns an int
- */
-int
-xmlSAX2GetLineNumber(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if ((ctx == NULL) || (ctxt->input == NULL)) return(0);
- return(ctxt->input->line);
-}
-
-/**
- * xmlSAX2GetColumnNumber:
- * @ctx: the user data (XML parser context)
- *
- * Provide the column number of the current parsing point.
- *
- * Returns an int
- */
-int
-xmlSAX2GetColumnNumber(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if ((ctx == NULL) || (ctxt->input == NULL)) return(0);
- return(ctxt->input->col);
-}
-
-/**
- * xmlSAX2IsStandalone:
- * @ctx: the user data (XML parser context)
- *
- * Is this document tagged standalone ?
- *
- * Returns 1 if true
- */
-int
-xmlSAX2IsStandalone(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if ((ctx == NULL) || (ctxt->myDoc == NULL)) return(0);
- return(ctxt->myDoc->standalone == 1);
-}
-
-/**
- * xmlSAX2HasInternalSubset:
- * @ctx: the user data (XML parser context)
- *
- * Does this document has an internal subset
- *
- * Returns 1 if true
- */
-int
-xmlSAX2HasInternalSubset(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if ((ctxt == NULL) || (ctxt->myDoc == NULL)) return(0);
- return(ctxt->myDoc->intSubset != NULL);
-}
-
-/**
- * xmlSAX2HasExternalSubset:
- * @ctx: the user data (XML parser context)
- *
- * Does this document has an external subset
- *
- * Returns 1 if true
- */
-int
-xmlSAX2HasExternalSubset(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if ((ctxt == NULL) || (ctxt->myDoc == NULL)) return(0);
- return(ctxt->myDoc->extSubset != NULL);
-}
-
-/**
- * xmlSAX2InternalSubset:
- * @ctx: the user data (XML parser context)
- * @name: the root element name
- * @ExternalID: the external ID
- * @SystemID: the SYSTEM ID (e.g. filename or URL)
- *
- * Callback on internal subset declaration.
- */
-void
-xmlSAX2InternalSubset(void *ctx, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlDtdPtr dtd;
- if (ctx == NULL) return;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2InternalSubset(%s, %s, %s)\n",
- name, ExternalID, SystemID);
-#endif
-
- if (ctxt->myDoc == NULL)
- return;
- dtd = xmlGetIntSubset(ctxt->myDoc);
- if (dtd != NULL) {
- if (ctxt->html)
- return;
- xmlUnlinkNode((xmlNodePtr) dtd);
- xmlFreeDtd(dtd);
- ctxt->myDoc->intSubset = NULL;
- }
- ctxt->myDoc->intSubset =
- xmlCreateIntSubset(ctxt->myDoc, name, ExternalID, SystemID);
- if (ctxt->myDoc->intSubset == NULL)
- xmlSAX2ErrMemory(ctxt, "xmlSAX2InternalSubset");
-}
-
-/**
- * xmlSAX2ExternalSubset:
- * @ctx: the user data (XML parser context)
- * @name: the root element name
- * @ExternalID: the external ID
- * @SystemID: the SYSTEM ID (e.g. filename or URL)
- *
- * Callback on external subset declaration.
- */
-void
-xmlSAX2ExternalSubset(void *ctx, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if (ctx == NULL) return;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2ExternalSubset(%s, %s, %s)\n",
- name, ExternalID, SystemID);
-#endif
- if (((ExternalID != NULL) || (SystemID != NULL)) &&
- (((ctxt->validate) || (ctxt->loadsubset != 0)) &&
- (ctxt->wellFormed && ctxt->myDoc))) {
- /*
- * Try to fetch and parse the external subset.
- */
- xmlParserInputPtr oldinput;
- int oldinputNr;
- int oldinputMax;
- xmlParserInputPtr *oldinputTab;
- xmlParserInputPtr input = NULL;
- xmlCharEncoding enc;
- int oldcharset;
- const xmlChar *oldencoding;
-
- /*
- * Ask the Entity resolver to load the damn thing
- */
- if ((ctxt->sax != NULL) && (ctxt->sax->resolveEntity != NULL))
- input = ctxt->sax->resolveEntity(ctxt->userData, ExternalID,
- SystemID);
- if (input == NULL) {
- return;
- }
-
- xmlNewDtd(ctxt->myDoc, name, ExternalID, SystemID);
-
- /*
- * make sure we won't destroy the main document context
- */
- oldinput = ctxt->input;
- oldinputNr = ctxt->inputNr;
- oldinputMax = ctxt->inputMax;
- oldinputTab = ctxt->inputTab;
- oldcharset = ctxt->charset;
- oldencoding = ctxt->encoding;
- ctxt->encoding = NULL;
-
- ctxt->inputTab = (xmlParserInputPtr *)
- xmlMalloc(5 * sizeof(xmlParserInputPtr));
- if (ctxt->inputTab == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2ExternalSubset");
- ctxt->input = oldinput;
- ctxt->inputNr = oldinputNr;
- ctxt->inputMax = oldinputMax;
- ctxt->inputTab = oldinputTab;
- ctxt->charset = oldcharset;
- ctxt->encoding = oldencoding;
- return;
- }
- ctxt->inputNr = 0;
- ctxt->inputMax = 5;
- ctxt->input = NULL;
- xmlPushInput(ctxt, input);
-
- /*
- * On the fly encoding conversion if needed
- */
- if (ctxt->input->length >= 4) {
- enc = xmlDetectCharEncoding(ctxt->input->cur, 4);
- xmlSwitchEncoding(ctxt, enc);
- }
-
- if (input->filename == NULL)
- input->filename = (char *) xmlCanonicPath(SystemID);
- input->line = 1;
- input->col = 1;
- input->base = ctxt->input->cur;
- input->cur = ctxt->input->cur;
- input->free = NULL;
-
- /*
- * let's parse that entity knowing it's an external subset.
- */
- xmlParseExternalSubset(ctxt, ExternalID, SystemID);
-
- /*
- * Free up the external entities
- */
-
- while (ctxt->inputNr > 1)
- xmlPopInput(ctxt);
- xmlFreeInputStream(ctxt->input);
- xmlFree(ctxt->inputTab);
-
- /*
- * Restore the parsing context of the main entity
- */
- ctxt->input = oldinput;
- ctxt->inputNr = oldinputNr;
- ctxt->inputMax = oldinputMax;
- ctxt->inputTab = oldinputTab;
- ctxt->charset = oldcharset;
- if ((ctxt->encoding != NULL) &&
- ((ctxt->dict == NULL) ||
- (!xmlDictOwns(ctxt->dict, ctxt->encoding))))
- xmlFree((xmlChar *) ctxt->encoding);
- ctxt->encoding = oldencoding;
- /* ctxt->wellFormed = oldwellFormed; */
- }
-}
-
-/**
- * xmlSAX2ResolveEntity:
- * @ctx: the user data (XML parser context)
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * The entity loader, to control the loading of external entities,
- * the application can either:
- * - override this xmlSAX2ResolveEntity() callback in the SAX block
- * - or better use the xmlSetExternalEntityLoader() function to
- * set up it's own entity resolution routine
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-xmlParserInputPtr
-xmlSAX2ResolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr ret;
- xmlChar *URI;
- const char *base = NULL;
-
- if (ctx == NULL) return(NULL);
- if (ctxt->input != NULL)
- base = ctxt->input->filename;
- if (base == NULL)
- base = ctxt->directory;
-
- URI = xmlBuildURI(systemId, (const xmlChar *) base);
-
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2ResolveEntity(%s, %s)\n", publicId, systemId);
-#endif
-
- ret = xmlLoadExternalEntity((const char *) URI,
- (const char *) publicId, ctxt);
- if (URI != NULL)
- xmlFree(URI);
- return(ret);
-}
-
-/**
- * xmlSAX2GetEntity:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Get an entity by name
- *
- * Returns the xmlEntityPtr if found.
- */
-xmlEntityPtr
-xmlSAX2GetEntity(void *ctx, const xmlChar *name)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlEntityPtr ret = NULL;
-
- if (ctx == NULL) return(NULL);
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2GetEntity(%s)\n", name);
-#endif
-
- if (ctxt->inSubset == 0) {
- ret = xmlGetPredefinedEntity(name);
- if (ret != NULL)
- return(ret);
- }
- if ((ctxt->myDoc != NULL) && (ctxt->myDoc->standalone == 1)) {
- if (ctxt->inSubset == 2) {
- ctxt->myDoc->standalone = 0;
- ret = xmlGetDocEntity(ctxt->myDoc, name);
- ctxt->myDoc->standalone = 1;
- } else {
- ret = xmlGetDocEntity(ctxt->myDoc, name);
- if (ret == NULL) {
- ctxt->myDoc->standalone = 0;
- ret = xmlGetDocEntity(ctxt->myDoc, name);
- if (ret != NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NOT_STANDALONE,
- "Entity(%s) document marked standalone but requires external subset\n",
- name, NULL);
- }
- ctxt->myDoc->standalone = 1;
- }
- }
- } else {
- ret = xmlGetDocEntity(ctxt->myDoc, name);
- }
- if ((ret != NULL) &&
- ((ctxt->validate) || (ctxt->replaceEntities)) &&
- (ret->children == NULL) &&
- (ret->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) {
- int val;
-
- /*
- * for validation purposes we really need to fetch and
- * parse the external entity
- */
- xmlNodePtr children;
- unsigned long oldnbent = ctxt->nbentities;
-
- val = xmlParseCtxtExternalEntity(ctxt, ret->URI,
- ret->ExternalID, &children);
- if (val == 0) {
- xmlAddChildList((xmlNodePtr) ret, children);
- } else {
- xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_PROCESSING,
- "Failure to process entity %s\n", name, NULL);
- ctxt->validate = 0;
- return(NULL);
- }
- ret->owner = 1;
- if (ret->checked == 0) {
- ret->checked = (ctxt->nbentities - oldnbent + 1) * 2;
- if ((ret->content != NULL) && (xmlStrchr(ret->content, '<')))
- ret->checked |= 1;
- }
- }
- return(ret);
-}
-
-/**
- * xmlSAX2GetParameterEntity:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Get a parameter entity by name
- *
- * Returns the xmlEntityPtr if found.
- */
-xmlEntityPtr
-xmlSAX2GetParameterEntity(void *ctx, const xmlChar *name)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlEntityPtr ret;
-
- if (ctx == NULL) return(NULL);
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2GetParameterEntity(%s)\n", name);
-#endif
-
- ret = xmlGetParameterEntity(ctxt->myDoc, name);
- return(ret);
-}
-
-
-/**
- * xmlSAX2EntityDecl:
- * @ctx: the user data (XML parser context)
- * @name: the entity name
- * @type: the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed
- */
-void
-xmlSAX2EntityDecl(void *ctx, const xmlChar *name, int type,
- const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
-{
- xmlEntityPtr ent;
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
-
- if (ctx == NULL) return;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2EntityDecl(%s, %d, %s, %s, %s)\n",
- name, type, publicId, systemId, content);
-#endif
- if (ctxt->inSubset == 1) {
- ent = xmlAddDocEntity(ctxt->myDoc, name, type, publicId,
- systemId, content);
- if ((ent == NULL) && (ctxt->pedantic))
- xmlWarnMsg(ctxt, XML_WAR_ENTITY_REDEFINED,
- "Entity(%s) already defined in the internal subset\n",
- name);
- if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
- xmlChar *URI;
- const char *base = NULL;
-
- if (ctxt->input != NULL)
- base = ctxt->input->filename;
- if (base == NULL)
- base = ctxt->directory;
-
- URI = xmlBuildURI(systemId, (const xmlChar *) base);
- ent->URI = URI;
- }
- } else if (ctxt->inSubset == 2) {
- ent = xmlAddDtdEntity(ctxt->myDoc, name, type, publicId,
- systemId, content);
- if ((ent == NULL) && (ctxt->pedantic) &&
- (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
- ctxt->sax->warning(ctxt->userData,
- "Entity(%s) already defined in the external subset\n", name);
- if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
- xmlChar *URI;
- const char *base = NULL;
-
- if (ctxt->input != NULL)
- base = ctxt->input->filename;
- if (base == NULL)
- base = ctxt->directory;
-
- URI = xmlBuildURI(systemId, (const xmlChar *) base);
- ent->URI = URI;
- }
- } else {
- xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_PROCESSING,
- "SAX.xmlSAX2EntityDecl(%s) called while not in subset\n",
- name, NULL);
- }
-}
-
-/**
- * xmlSAX2AttributeDecl:
- * @ctx: the user data (XML parser context)
- * @elem: the name of the element
- * @fullname: the attribute name
- * @type: the attribute type
- * @def: the type of default value
- * @defaultValue: the attribute default value
- * @tree: the tree of enumerated value set
- *
- * An attribute definition has been parsed
- */
-void
-xmlSAX2AttributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname,
- int type, int def, const xmlChar *defaultValue,
- xmlEnumerationPtr tree)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlAttributePtr attr;
- xmlChar *name = NULL, *prefix = NULL;
-
- if ((ctxt == NULL) || (ctxt->myDoc == NULL))
- return;
-
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2AttributeDecl(%s, %s, %d, %d, %s, ...)\n",
- elem, fullname, type, def, defaultValue);
-#endif
- if ((xmlStrEqual(fullname, BAD_CAST "xml:id")) &&
- (type != XML_ATTRIBUTE_ID)) {
- /*
- * Raise the error but keep the validity flag
- */
- int tmp = ctxt->valid;
- xmlErrValid(ctxt, XML_DTD_XMLID_TYPE,
- "xml:id : attribute type should be ID\n", NULL, NULL);
- ctxt->valid = tmp;
- }
- /* TODO: optimize name/prefix allocation */
- name = xmlSplitQName(ctxt, fullname, &prefix);
- ctxt->vctxt.valid = 1;
- if (ctxt->inSubset == 1)
- attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->intSubset, elem,
- name, prefix, (xmlAttributeType) type,
- (xmlAttributeDefault) def, defaultValue, tree);
- else if (ctxt->inSubset == 2)
- attr = xmlAddAttributeDecl(&ctxt->vctxt, ctxt->myDoc->extSubset, elem,
- name, prefix, (xmlAttributeType) type,
- (xmlAttributeDefault) def, defaultValue, tree);
- else {
- xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
- "SAX.xmlSAX2AttributeDecl(%s) called while not in subset\n",
- name, NULL);
- xmlFreeEnumeration(tree);
- return;
- }
-#ifdef LIBXML_VALID_ENABLED
- if (ctxt->vctxt.valid == 0)
- ctxt->valid = 0;
- if ((attr != NULL) && (ctxt->validate) && (ctxt->wellFormed) &&
- (ctxt->myDoc->intSubset != NULL))
- ctxt->valid &= xmlValidateAttributeDecl(&ctxt->vctxt, ctxt->myDoc,
- attr);
-#endif /* LIBXML_VALID_ENABLED */
- if (prefix != NULL)
- xmlFree(prefix);
- if (name != NULL)
- xmlFree(name);
-}
-
-/**
- * xmlSAX2ElementDecl:
- * @ctx: the user data (XML parser context)
- * @name: the element name
- * @type: the element type
- * @content: the element value tree
- *
- * An element definition has been parsed
- */
-void
-xmlSAX2ElementDecl(void *ctx, const xmlChar * name, int type,
- xmlElementContentPtr content)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlElementPtr elem = NULL;
-
- if ((ctxt == NULL) || (ctxt->myDoc == NULL))
- return;
-
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2ElementDecl(%s, %d, ...)\n", name, type);
-#endif
-
- if (ctxt->inSubset == 1)
- elem = xmlAddElementDecl(&ctxt->vctxt, ctxt->myDoc->intSubset,
- name, (xmlElementTypeVal) type, content);
- else if (ctxt->inSubset == 2)
- elem = xmlAddElementDecl(&ctxt->vctxt, ctxt->myDoc->extSubset,
- name, (xmlElementTypeVal) type, content);
- else {
- xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
- "SAX.xmlSAX2ElementDecl(%s) called while not in subset\n",
- name, NULL);
- return;
- }
-#ifdef LIBXML_VALID_ENABLED
- if (elem == NULL)
- ctxt->valid = 0;
- if (ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset)
- ctxt->valid &=
- xmlValidateElementDecl(&ctxt->vctxt, ctxt->myDoc, elem);
-#endif /* LIBXML_VALID_ENABLED */
-}
-
-/**
- * xmlSAX2NotationDecl:
- * @ctx: the user data (XML parser context)
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- */
-void
-xmlSAX2NotationDecl(void *ctx, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNotationPtr nota = NULL;
-
- if ((ctxt == NULL) || (ctxt->myDoc == NULL))
- return;
-
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2NotationDecl(%s, %s, %s)\n", name, publicId, systemId);
-#endif
-
- if ((publicId == NULL) && (systemId == NULL)) {
- xmlFatalErrMsg(ctxt, XML_ERR_NOTATION_PROCESSING,
- "SAX.xmlSAX2NotationDecl(%s) externalID or PublicID missing\n",
- name, NULL);
- return;
- } else if (ctxt->inSubset == 1)
- nota = xmlAddNotationDecl(&ctxt->vctxt, ctxt->myDoc->intSubset, name,
- publicId, systemId);
- else if (ctxt->inSubset == 2)
- nota = xmlAddNotationDecl(&ctxt->vctxt, ctxt->myDoc->extSubset, name,
- publicId, systemId);
- else {
- xmlFatalErrMsg(ctxt, XML_ERR_NOTATION_PROCESSING,
- "SAX.xmlSAX2NotationDecl(%s) called while not in subset\n",
- name, NULL);
- return;
- }
-#ifdef LIBXML_VALID_ENABLED
- if (nota == NULL) ctxt->valid = 0;
- if ((ctxt->validate) && (ctxt->wellFormed) &&
- (ctxt->myDoc->intSubset != NULL))
- ctxt->valid &= xmlValidateNotationDecl(&ctxt->vctxt, ctxt->myDoc,
- nota);
-#endif /* LIBXML_VALID_ENABLED */
-}
-
-/**
- * xmlSAX2UnparsedEntityDecl:
- * @ctx: the user data (XML parser context)
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed
- */
-void
-xmlSAX2UnparsedEntityDecl(void *ctx, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId,
- const xmlChar *notationName)
-{
- xmlEntityPtr ent;
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- if (ctx == NULL) return;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2UnparsedEntityDecl(%s, %s, %s, %s)\n",
- name, publicId, systemId, notationName);
-#endif
- if (ctxt->inSubset == 1) {
- ent = xmlAddDocEntity(ctxt->myDoc, name,
- XML_EXTERNAL_GENERAL_UNPARSED_ENTITY,
- publicId, systemId, notationName);
- if ((ent == NULL) && (ctxt->pedantic) &&
- (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
- ctxt->sax->warning(ctxt->userData,
- "Entity(%s) already defined in the internal subset\n", name);
- if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
- xmlChar *URI;
- const char *base = NULL;
-
- if (ctxt->input != NULL)
- base = ctxt->input->filename;
- if (base == NULL)
- base = ctxt->directory;
-
- URI = xmlBuildURI(systemId, (const xmlChar *) base);
- ent->URI = URI;
- }
- } else if (ctxt->inSubset == 2) {
- ent = xmlAddDtdEntity(ctxt->myDoc, name,
- XML_EXTERNAL_GENERAL_UNPARSED_ENTITY,
- publicId, systemId, notationName);
- if ((ent == NULL) && (ctxt->pedantic) &&
- (ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
- ctxt->sax->warning(ctxt->userData,
- "Entity(%s) already defined in the external subset\n", name);
- if ((ent != NULL) && (ent->URI == NULL) && (systemId != NULL)) {
- xmlChar *URI;
- const char *base = NULL;
-
- if (ctxt->input != NULL)
- base = ctxt->input->filename;
- if (base == NULL)
- base = ctxt->directory;
-
- URI = xmlBuildURI(systemId, (const xmlChar *) base);
- ent->URI = URI;
- }
- } else {
- xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
- "SAX.xmlSAX2UnparsedEntityDecl(%s) called while not in subset\n",
- name, NULL);
- }
-}
-
-/**
- * xmlSAX2SetDocumentLocator:
- * @ctx: the user data (XML parser context)
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
- * Everything is available on the context, so this is useless in our case.
- */
-void
-xmlSAX2SetDocumentLocator(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
-{
- /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2SetDocumentLocator()\n");
-#endif
-}
-
-/**
- * xmlSAX2StartDocument:
- * @ctx: the user data (XML parser context)
- *
- * called when the document start being processed.
- */
-void
-xmlSAX2StartDocument(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlDocPtr doc;
-
- if (ctx == NULL) return;
-
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2StartDocument()\n");
-#endif
- if (ctxt->html) {
-#ifdef LIBXML_HTML_ENABLED
- if (ctxt->myDoc == NULL)
- ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL);
- if (ctxt->myDoc == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument");
- return;
- }
- ctxt->myDoc->properties = XML_DOC_HTML;
- ctxt->myDoc->parseFlags = ctxt->options;
-#else
- xmlGenericError(xmlGenericErrorContext,
- "libxml2 built without HTML support\n");
- ctxt->errNo = XML_ERR_INTERNAL_ERROR;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- return;
-#endif
- } else {
- doc = ctxt->myDoc = xmlNewDoc(ctxt->version);
- if (doc != NULL) {
- doc->properties = 0;
- if (ctxt->options & XML_PARSE_OLD10)
- doc->properties |= XML_DOC_OLD10;
- doc->parseFlags = ctxt->options;
- if (ctxt->encoding != NULL)
- doc->encoding = xmlStrdup(ctxt->encoding);
- else
- doc->encoding = NULL;
- doc->standalone = ctxt->standalone;
- } else {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument");
- return;
- }
- if ((ctxt->dictNames) && (doc != NULL)) {
- doc->dict = ctxt->dict;
- xmlDictReference(doc->dict);
- }
- }
- if ((ctxt->myDoc != NULL) && (ctxt->myDoc->URL == NULL) &&
- (ctxt->input != NULL) && (ctxt->input->filename != NULL)) {
- ctxt->myDoc->URL = xmlPathToURI((const xmlChar *)ctxt->input->filename);
- if (ctxt->myDoc->URL == NULL)
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartDocument");
- }
-}
-
-/**
- * xmlSAX2EndDocument:
- * @ctx: the user data (XML parser context)
- *
- * called when the document end has been detected.
- */
-void
-xmlSAX2EndDocument(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2EndDocument()\n");
-#endif
- if (ctx == NULL) return;
-#ifdef LIBXML_VALID_ENABLED
- if (ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset)
- ctxt->valid &= xmlValidateDocumentFinal(&ctxt->vctxt, ctxt->myDoc);
-#endif /* LIBXML_VALID_ENABLED */
-
- /*
- * Grab the encoding if it was added on-the-fly
- */
- if ((ctxt->encoding != NULL) && (ctxt->myDoc != NULL) &&
- (ctxt->myDoc->encoding == NULL)) {
- ctxt->myDoc->encoding = ctxt->encoding;
- ctxt->encoding = NULL;
- }
- if ((ctxt->inputTab != NULL) &&
- (ctxt->inputNr > 0) && (ctxt->inputTab[0] != NULL) &&
- (ctxt->inputTab[0]->encoding != NULL) && (ctxt->myDoc != NULL) &&
- (ctxt->myDoc->encoding == NULL)) {
- ctxt->myDoc->encoding = xmlStrdup(ctxt->inputTab[0]->encoding);
- }
- if ((ctxt->charset != XML_CHAR_ENCODING_NONE) && (ctxt->myDoc != NULL) &&
- (ctxt->myDoc->charset == XML_CHAR_ENCODING_NONE)) {
- ctxt->myDoc->charset = ctxt->charset;
- }
-}
-
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-/**
- * xmlSAX2AttributeInternal:
- * @ctx: the user data (XML parser context)
- * @fullname: The attribute name, including namespace prefix
- * @value: The attribute value
- * @prefix: the prefix on the element node
- *
- * Handle an attribute that has been read by the parser.
- * The default handling is to convert the attribute into an
- * DOM subtree and past it in a new xmlAttr element added to
- * the element.
- */
-static void
-xmlSAX2AttributeInternal(void *ctx, const xmlChar *fullname,
- const xmlChar *value, const xmlChar *prefix ATTRIBUTE_UNUSED)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlAttrPtr ret;
- xmlChar *name;
- xmlChar *ns;
- xmlChar *nval;
- xmlNsPtr namespace;
-
- if (ctxt->html) {
- name = xmlStrdup(fullname);
- ns = NULL;
- namespace = NULL;
- } else {
- /*
- * Split the full name into a namespace prefix and the tag name
- */
- name = xmlSplitQName(ctxt, fullname, &ns);
- if ((name != NULL) && (name[0] == 0)) {
- if (xmlStrEqual(ns, BAD_CAST "xmlns")) {
- xmlNsErrMsg(ctxt, XML_ERR_NS_DECL_ERROR,
- "invalid namespace declaration '%s'\n",
- fullname, NULL);
- } else {
- xmlNsWarnMsg(ctxt, XML_WAR_NS_COLUMN,
- "Avoid attribute ending with ':' like '%s'\n",
- fullname, NULL);
- }
- if (ns != NULL)
- xmlFree(ns);
- ns = NULL;
- xmlFree(name);
- name = xmlStrdup(fullname);
- }
- }
- if (name == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
- if (ns != NULL)
- xmlFree(ns);
- return;
- }
-
-#ifdef LIBXML_HTML_ENABLED
- if ((ctxt->html) &&
- (value == NULL) && (htmlIsBooleanAttr(fullname))) {
- nval = xmlStrdup(fullname);
- value = (const xmlChar *) nval;
- } else
-#endif
- {
-#ifdef LIBXML_VALID_ENABLED
- /*
- * Do the last stage of the attribute normalization
- * Needed for HTML too:
- * http://www.w3.org/TR/html4/types.html#h-6.2
- */
- ctxt->vctxt.valid = 1;
- nval = xmlValidCtxtNormalizeAttributeValue(&ctxt->vctxt,
- ctxt->myDoc, ctxt->node,
- fullname, value);
- if (ctxt->vctxt.valid != 1) {
- ctxt->valid = 0;
- }
- if (nval != NULL)
- value = nval;
-#else
- nval = NULL;
-#endif /* LIBXML_VALID_ENABLED */
- }
-
- /*
- * Check whether it's a namespace definition
- */
- if ((!ctxt->html) && (ns == NULL) &&
- (name[0] == 'x') && (name[1] == 'm') && (name[2] == 'l') &&
- (name[3] == 'n') && (name[4] == 's') && (name[5] == 0)) {
- xmlNsPtr nsret;
- xmlChar *val;
-
- if (!ctxt->replaceEntities) {
- ctxt->depth++;
- val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
- 0,0,0);
- ctxt->depth--;
- if (val == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
- if (name != NULL)
- xmlFree(name);
- return;
- }
- } else {
- val = (xmlChar *) value;
- }
-
- if (val[0] != 0) {
- xmlURIPtr uri;
-
- uri = xmlParseURI((const char *)val);
- if (uri == NULL) {
- if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
- ctxt->sax->warning(ctxt->userData,
- "xmlns: %s not a valid URI\n", val);
- } else {
- if (uri->scheme == NULL) {
- if ((ctxt->sax != NULL) && (ctxt->sax->warning != NULL))
- ctxt->sax->warning(ctxt->userData,
- "xmlns: URI %s is not absolute\n", val);
- }
- xmlFreeURI(uri);
- }
- }
-
- /* a default namespace definition */
- nsret = xmlNewNs(ctxt->node, val, NULL);
-
-#ifdef LIBXML_VALID_ENABLED
- /*
- * Validate also for namespace decls, they are attributes from
- * an XML-1.0 perspective
- */
- if (nsret != NULL && ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset)
- ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
- ctxt->node, prefix, nsret, val);
-#endif /* LIBXML_VALID_ENABLED */
- if (name != NULL)
- xmlFree(name);
- if (nval != NULL)
- xmlFree(nval);
- if (val != value)
- xmlFree(val);
- return;
- }
- if ((!ctxt->html) &&
- (ns != NULL) && (ns[0] == 'x') && (ns[1] == 'm') && (ns[2] == 'l') &&
- (ns[3] == 'n') && (ns[4] == 's') && (ns[5] == 0)) {
- xmlNsPtr nsret;
- xmlChar *val;
-
- if (!ctxt->replaceEntities) {
- ctxt->depth++;
- val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
- 0,0,0);
- ctxt->depth--;
- if (val == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
- xmlFree(ns);
- if (name != NULL)
- xmlFree(name);
- return;
- }
- } else {
- val = (xmlChar *) value;
- }
-
- if (val[0] == 0) {
- xmlNsErrMsg(ctxt, XML_NS_ERR_EMPTY,
- "Empty namespace name for prefix %s\n", name, NULL);
- }
- if ((ctxt->pedantic != 0) && (val[0] != 0)) {
- xmlURIPtr uri;
-
- uri = xmlParseURI((const char *)val);
- if (uri == NULL) {
- xmlNsWarnMsg(ctxt, XML_WAR_NS_URI,
- "xmlns:%s: %s not a valid URI\n", name, value);
- } else {
- if (uri->scheme == NULL) {
- xmlNsWarnMsg(ctxt, XML_WAR_NS_URI_RELATIVE,
- "xmlns:%s: URI %s is not absolute\n", name, value);
- }
- xmlFreeURI(uri);
- }
- }
-
- /* a standard namespace definition */
- nsret = xmlNewNs(ctxt->node, val, name);
- xmlFree(ns);
-#ifdef LIBXML_VALID_ENABLED
- /*
- * Validate also for namespace decls, they are attributes from
- * an XML-1.0 perspective
- */
- if (nsret != NULL && ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset)
- ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
- ctxt->node, prefix, nsret, value);
-#endif /* LIBXML_VALID_ENABLED */
- if (name != NULL)
- xmlFree(name);
- if (nval != NULL)
- xmlFree(nval);
- if (val != value)
- xmlFree(val);
- return;
- }
-
- if (ns != NULL) {
- namespace = xmlSearchNs(ctxt->myDoc, ctxt->node, ns);
-
- if (namespace == NULL) {
- xmlNsErrMsg(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
- "Namespace prefix %s of attribute %s is not defined\n",
- ns, name);
- } else {
- xmlAttrPtr prop;
-
- prop = ctxt->node->properties;
- while (prop != NULL) {
- if (prop->ns != NULL) {
- if ((xmlStrEqual(name, prop->name)) &&
- ((namespace == prop->ns) ||
- (xmlStrEqual(namespace->href, prop->ns->href)))) {
- xmlNsErrMsg(ctxt, XML_ERR_ATTRIBUTE_REDEFINED,
- "Attribute %s in %s redefined\n",
- name, namespace->href);
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0) ctxt->disableSAX = 1;
- goto error;
- }
- }
- prop = prop->next;
- }
- }
- } else {
- namespace = NULL;
- }
-
- /* !!!!!! <a toto:arg="" xmlns:toto="http://toto.com"> */
- ret = xmlNewNsPropEatName(ctxt->node, namespace, name, NULL);
-
- if (ret != NULL) {
- if ((ctxt->replaceEntities == 0) && (!ctxt->html)) {
- xmlNodePtr tmp;
-
- ret->children = xmlStringGetNodeList(ctxt->myDoc, value);
- tmp = ret->children;
- while (tmp != NULL) {
- tmp->parent = (xmlNodePtr) ret;
- if (tmp->next == NULL)
- ret->last = tmp;
- tmp = tmp->next;
- }
- } else if (value != NULL) {
- ret->children = xmlNewDocText(ctxt->myDoc, value);
- ret->last = ret->children;
- if (ret->children != NULL)
- ret->children->parent = (xmlNodePtr) ret;
- }
- }
-
-#ifdef LIBXML_VALID_ENABLED
- if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset) {
-
- /*
- * If we don't substitute entities, the validation should be
- * done on a value with replaced entities anyway.
- */
- if (!ctxt->replaceEntities) {
- xmlChar *val;
-
- ctxt->depth++;
- val = xmlStringDecodeEntities(ctxt, value, XML_SUBSTITUTE_REF,
- 0,0,0);
- ctxt->depth--;
-
- if (val == NULL)
- ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
- ctxt->myDoc, ctxt->node, ret, value);
- else {
- xmlChar *nvalnorm;
-
- /*
- * Do the last stage of the attribute normalization
- * It need to be done twice ... it's an extra burden related
- * to the ability to keep xmlSAX2References in attributes
- */
- nvalnorm = xmlValidNormalizeAttributeValue(ctxt->myDoc,
- ctxt->node, fullname, val);
- if (nvalnorm != NULL) {
- xmlFree(val);
- val = nvalnorm;
- }
-
- ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
- ctxt->myDoc, ctxt->node, ret, val);
- xmlFree(val);
- }
- } else {
- ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt, ctxt->myDoc,
- ctxt->node, ret, value);
- }
- } else
-#endif /* LIBXML_VALID_ENABLED */
- if (((ctxt->loadsubset & XML_SKIP_IDS) == 0) &&
- (((ctxt->replaceEntities == 0) && (ctxt->external != 2)) ||
- ((ctxt->replaceEntities != 0) && (ctxt->inSubset == 0)))) {
- /*
- * when validating, the ID registration is done at the attribute
- * validation level. Otherwise we have to do specific handling here.
- */
- if (xmlStrEqual(fullname, BAD_CAST "xml:id")) {
- /*
- * Add the xml:id value
- *
- * Open issue: normalization of the value.
- */
- if (xmlValidateNCName(value, 1) != 0) {
- xmlErrValid(ctxt, XML_DTD_XMLID_VALUE,
- "xml:id : attribute value %s is not an NCName\n",
- (const char *) value, NULL);
- }
- xmlAddID(&ctxt->vctxt, ctxt->myDoc, value, ret);
- } else if (xmlIsID(ctxt->myDoc, ctxt->node, ret))
- xmlAddID(&ctxt->vctxt, ctxt->myDoc, value, ret);
- else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret))
- xmlAddRef(&ctxt->vctxt, ctxt->myDoc, value, ret);
- }
-
-error:
- if (nval != NULL)
- xmlFree(nval);
- if (ns != NULL)
- xmlFree(ns);
-}
-
-/*
- * xmlCheckDefaultedAttributes:
- *
- * Check defaulted attributes from the DTD
- */
-static void
-xmlCheckDefaultedAttributes(xmlParserCtxtPtr ctxt, const xmlChar *name,
- const xmlChar *prefix, const xmlChar **atts) {
- xmlElementPtr elemDecl;
- const xmlChar *att;
- int internal = 1;
- int i;
-
- elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->intSubset, name, prefix);
- if (elemDecl == NULL) {
- elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->extSubset, name, prefix);
- internal = 0;
- }
-
-process_external_subset:
-
- if (elemDecl != NULL) {
- xmlAttributePtr attr = elemDecl->attributes;
- /*
- * Check against defaulted attributes from the external subset
- * if the document is stamped as standalone
- */
- if ((ctxt->myDoc->standalone == 1) &&
- (ctxt->myDoc->extSubset != NULL) &&
- (ctxt->validate)) {
- while (attr != NULL) {
- if ((attr->defaultValue != NULL) &&
- (xmlGetDtdQAttrDesc(ctxt->myDoc->extSubset,
- attr->elem, attr->name,
- attr->prefix) == attr) &&
- (xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
- attr->elem, attr->name,
- attr->prefix) == NULL)) {
- xmlChar *fulln;
-
- if (attr->prefix != NULL) {
- fulln = xmlStrdup(attr->prefix);
- fulln = xmlStrcat(fulln, BAD_CAST ":");
- fulln = xmlStrcat(fulln, attr->name);
- } else {
- fulln = xmlStrdup(attr->name);
- }
- if (fulln == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
- break;
- }
-
- /*
- * Check that the attribute is not declared in the
- * serialization
- */
- att = NULL;
- if (atts != NULL) {
- i = 0;
- att = atts[i];
- while (att != NULL) {
- if (xmlStrEqual(att, fulln))
- break;
- i += 2;
- att = atts[i];
- }
- }
- if (att == NULL) {
- xmlErrValid(ctxt, XML_DTD_STANDALONE_DEFAULTED,
- "standalone: attribute %s on %s defaulted from external subset\n",
- (const char *)fulln,
- (const char *)attr->elem);
- }
- xmlFree(fulln);
- }
- attr = attr->nexth;
- }
- }
-
- /*
- * Actually insert defaulted values when needed
- */
- attr = elemDecl->attributes;
- while (attr != NULL) {
- /*
- * Make sure that attributes redefinition occuring in the
- * internal subset are not overriden by definitions in the
- * external subset.
- */
- if (attr->defaultValue != NULL) {
- /*
- * the element should be instantiated in the tree if:
- * - this is a namespace prefix
- * - the user required for completion in the tree
- * like XSLT
- * - there isn't already an attribute definition
- * in the internal subset overriding it.
- */
- if (((attr->prefix != NULL) &&
- (xmlStrEqual(attr->prefix, BAD_CAST "xmlns"))) ||
- ((attr->prefix == NULL) &&
- (xmlStrEqual(attr->name, BAD_CAST "xmlns"))) ||
- (ctxt->loadsubset & XML_COMPLETE_ATTRS)) {
- xmlAttributePtr tst;
-
- tst = xmlGetDtdQAttrDesc(ctxt->myDoc->intSubset,
- attr->elem, attr->name,
- attr->prefix);
- if ((tst == attr) || (tst == NULL)) {
- xmlChar fn[50];
- xmlChar *fulln;
-
- fulln = xmlBuildQName(attr->name, attr->prefix, fn, 50);
- if (fulln == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
- return;
- }
-
- /*
- * Check that the attribute is not declared in the
- * serialization
- */
- att = NULL;
- if (atts != NULL) {
- i = 0;
- att = atts[i];
- while (att != NULL) {
- if (xmlStrEqual(att, fulln))
- break;
- i += 2;
- att = atts[i];
- }
- }
- if (att == NULL) {
- xmlSAX2AttributeInternal(ctxt, fulln,
- attr->defaultValue, prefix);
- }
- if ((fulln != fn) && (fulln != attr->name))
- xmlFree(fulln);
- }
- }
- }
- attr = attr->nexth;
- }
- if (internal == 1) {
- elemDecl = xmlGetDtdQElementDesc(ctxt->myDoc->extSubset,
- name, prefix);
- internal = 0;
- goto process_external_subset;
- }
- }
-}
-
-/**
- * xmlSAX2StartElement:
- * @ctx: the user data (XML parser context)
- * @fullname: The element name, including namespace prefix
- * @atts: An array of name/value attributes pairs, NULL terminated
- *
- * called when an opening tag has been processed.
- */
-void
-xmlSAX2StartElement(void *ctx, const xmlChar *fullname, const xmlChar **atts)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNodePtr ret;
- xmlNodePtr parent;
- xmlNsPtr ns;
- xmlChar *name;
- xmlChar *prefix;
- const xmlChar *att;
- const xmlChar *value;
- int i;
-
- if ((ctx == NULL) || (fullname == NULL) || (ctxt->myDoc == NULL)) return;
- parent = ctxt->node;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2StartElement(%s)\n", fullname);
-#endif
-
- /*
- * First check on validity:
- */
- if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) &&
- ((ctxt->myDoc->intSubset == NULL) ||
- ((ctxt->myDoc->intSubset->notations == NULL) &&
- (ctxt->myDoc->intSubset->elements == NULL) &&
- (ctxt->myDoc->intSubset->attributes == NULL) &&
- (ctxt->myDoc->intSubset->entities == NULL)))) {
- xmlErrValid(ctxt, XML_ERR_NO_DTD,
- "Validation failed: no DTD found !", NULL, NULL);
- ctxt->validate = 0;
- }
-
-
- /*
- * Split the full name into a namespace prefix and the tag name
- */
- name = xmlSplitQName(ctxt, fullname, &prefix);
-
-
- /*
- * Note : the namespace resolution is deferred until the end of the
- * attributes parsing, since local namespace can be defined as
- * an attribute at this level.
- */
- ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL, name, NULL);
- if (ret == NULL) {
- if (prefix != NULL)
- xmlFree(prefix);
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElement");
- return;
- }
- if (ctxt->myDoc->children == NULL) {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext, "Setting %s as root\n", name);
-#endif
- xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
- } else if (parent == NULL) {
- parent = ctxt->myDoc->children;
- }
- ctxt->nodemem = -1;
- if (ctxt->linenumbers) {
- if (ctxt->input != NULL) {
- if (ctxt->input->line < 65535)
- ret->line = (short) ctxt->input->line;
- else
- ret->line = 65535;
- }
- }
-
- /*
- * We are parsing a new node.
- */
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext, "pushing(%s)\n", name);
-#endif
- nodePush(ctxt, ret);
-
- /*
- * Link the child element
- */
- if (parent != NULL) {
- if (parent->type == XML_ELEMENT_NODE) {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "adding child %s to %s\n", name, parent->name);
-#endif
- xmlAddChild(parent, ret);
- } else {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "adding sibling %s to ", name);
- xmlDebugDumpOneNode(stderr, parent, 0);
-#endif
- xmlAddSibling(parent, ret);
- }
- }
-
- /*
- * Insert all the defaulted attributes from the DTD especially namespaces
- */
- if ((!ctxt->html) &&
- ((ctxt->myDoc->intSubset != NULL) ||
- (ctxt->myDoc->extSubset != NULL))) {
- xmlCheckDefaultedAttributes(ctxt, name, prefix, atts);
- }
-
- /*
- * process all the attributes whose name start with "xmlns"
- */
- if (atts != NULL) {
- i = 0;
- att = atts[i++];
- value = atts[i++];
- if (!ctxt->html) {
- while ((att != NULL) && (value != NULL)) {
- if ((att[0] == 'x') && (att[1] == 'm') && (att[2] == 'l') &&
- (att[3] == 'n') && (att[4] == 's'))
- xmlSAX2AttributeInternal(ctxt, att, value, prefix);
-
- att = atts[i++];
- value = atts[i++];
- }
- }
- }
-
- /*
- * Search the namespace, note that since the attributes have been
- * processed, the local namespaces are available.
- */
- ns = xmlSearchNs(ctxt->myDoc, ret, prefix);
- if ((ns == NULL) && (parent != NULL))
- ns = xmlSearchNs(ctxt->myDoc, parent, prefix);
- if ((prefix != NULL) && (ns == NULL)) {
- ns = xmlNewNs(ret, NULL, prefix);
- xmlNsWarnMsg(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
- "Namespace prefix %s is not defined\n",
- prefix, NULL);
- }
-
- /*
- * set the namespace node, making sure that if the default namspace
- * is unbound on a parent we simply kee it NULL
- */
- if ((ns != NULL) && (ns->href != NULL) &&
- ((ns->href[0] != 0) || (ns->prefix != NULL)))
- xmlSetNs(ret, ns);
-
- /*
- * process all the other attributes
- */
- if (atts != NULL) {
- i = 0;
- att = atts[i++];
- value = atts[i++];
- if (ctxt->html) {
- while (att != NULL) {
- xmlSAX2AttributeInternal(ctxt, att, value, NULL);
- att = atts[i++];
- value = atts[i++];
- }
- } else {
- while ((att != NULL) && (value != NULL)) {
- if ((att[0] != 'x') || (att[1] != 'm') || (att[2] != 'l') ||
- (att[3] != 'n') || (att[4] != 's'))
- xmlSAX2AttributeInternal(ctxt, att, value, NULL);
-
- /*
- * Next ones
- */
- att = atts[i++];
- value = atts[i++];
- }
- }
- }
-
-#ifdef LIBXML_VALID_ENABLED
- /*
- * If it's the Document root, finish the DTD validation and
- * check the document root element for validity
- */
- if ((ctxt->validate) && (ctxt->vctxt.finishDtd == XML_CTXT_FINISH_DTD_0)) {
- int chk;
-
- chk = xmlValidateDtdFinal(&ctxt->vctxt, ctxt->myDoc);
- if (chk <= 0)
- ctxt->valid = 0;
- if (chk < 0)
- ctxt->wellFormed = 0;
- ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
- ctxt->vctxt.finishDtd = XML_CTXT_FINISH_DTD_1;
- }
-#endif /* LIBXML_VALID_ENABLED */
-
- if (prefix != NULL)
- xmlFree(prefix);
-
-}
-
-/**
- * xmlSAX2EndElement:
- * @ctx: the user data (XML parser context)
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-void
-xmlSAX2EndElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNodePtr cur;
-
- if (ctx == NULL) return;
- cur = ctxt->node;
-#ifdef DEBUG_SAX
- if (name == NULL)
- xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(NULL)\n");
- else
- xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2EndElement(%s)\n", name);
-#endif
-
- /* Capture end position and add node */
- if (cur != NULL && ctxt->record_info) {
- ctxt->nodeInfo->end_pos = ctxt->input->cur - ctxt->input->base;
- ctxt->nodeInfo->end_line = ctxt->input->line;
- ctxt->nodeInfo->node = cur;
- xmlParserAddNodeInfo(ctxt, ctxt->nodeInfo);
- }
- ctxt->nodemem = -1;
-
-#ifdef LIBXML_VALID_ENABLED
- if (ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset)
- ctxt->valid &= xmlValidateOneElement(&ctxt->vctxt, ctxt->myDoc,
- cur);
-#endif /* LIBXML_VALID_ENABLED */
-
-
- /*
- * end of parsing of this node.
- */
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext, "popping(%s)\n", cur->name);
-#endif
- nodePop(ctxt);
-}
-#endif /* LIBXML_SAX1_ENABLED || LIBXML_HTML_ENABLED || LIBXML_LEGACY_ENABLED */
-
-/*
- * xmlSAX2TextNode:
- * @ctxt: the parser context
- * @str: the input string
- * @len: the string length
- *
- * Callback for a text node
- *
- * Returns the newly allocated string or NULL if not needed or error
- */
-static xmlNodePtr
-xmlSAX2TextNode(xmlParserCtxtPtr ctxt, const xmlChar *str, int len) {
- xmlNodePtr ret;
- const xmlChar *intern = NULL;
-
- /*
- * Allocate
- */
- if (ctxt->freeElems != NULL) {
- ret = ctxt->freeElems;
- ctxt->freeElems = ret->next;
- ctxt->freeElemsNr--;
- } else {
- ret = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- }
- if (ret == NULL) {
- xmlErrMemory(ctxt, "xmlSAX2Characters");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlNode));
- /*
- * intern the formatting blanks found between tags, or the
- * very short strings
- */
- if (ctxt->dictNames) {
- xmlChar cur = str[len];
-
- if ((len < (int) (2 * sizeof(void *))) &&
- (ctxt->options & XML_PARSE_COMPACT)) {
- /* store the string in the node overriding properties and nsDef */
- xmlChar *tmp = (xmlChar *) &(ret->properties);
- memcpy(tmp, str, len);
- tmp[len] = 0;
- intern = tmp;
- } else if ((len <= 3) && ((cur == '"') || (cur == '\'') ||
- ((cur == '<') && (str[len + 1] != '!')))) {
- intern = xmlDictLookup(ctxt->dict, str, len);
- } else if (IS_BLANK_CH(*str) && (len < 60) && (cur == '<') &&
- (str[len + 1] != '!')) {
- int i;
-
- for (i = 1;i < len;i++) {
- if (!IS_BLANK_CH(str[i])) goto skip;
- }
- intern = xmlDictLookup(ctxt->dict, str, len);
- }
- }
-skip:
- ret->type = XML_TEXT_NODE;
-
- ret->name = xmlStringText;
- if (intern == NULL) {
- ret->content = xmlStrndup(str, len);
- if (ret->content == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2TextNode");
- xmlFree(ret);
- return(NULL);
- }
- } else
- ret->content = (xmlChar *) intern;
-
- if (ctxt->linenumbers) {
- if (ctxt->input != NULL) {
- if (ctxt->input->line < 65535)
- ret->line = (short) ctxt->input->line;
- else {
- ret->line = 65535;
- if (ctxt->options & XML_PARSE_BIG_LINES)
- ret->psvi = (void *) (long) ctxt->input->line;
- }
- }
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(ret);
- return(ret);
-}
-
-#ifdef LIBXML_VALID_ENABLED
-/*
- * xmlSAX2DecodeAttrEntities:
- * @ctxt: the parser context
- * @str: the input string
- * @len: the string length
- *
- * Remove the entities from an attribute value
- *
- * Returns the newly allocated string or NULL if not needed or error
- */
-static xmlChar *
-xmlSAX2DecodeAttrEntities(xmlParserCtxtPtr ctxt, const xmlChar *str,
- const xmlChar *end) {
- const xmlChar *in;
- xmlChar *ret;
-
- in = str;
- while (in < end)
- if (*in++ == '&')
- goto decode;
- return(NULL);
-decode:
- ctxt->depth++;
- ret = xmlStringLenDecodeEntities(ctxt, str, end - str,
- XML_SUBSTITUTE_REF, 0,0,0);
- ctxt->depth--;
- return(ret);
-}
-#endif /* LIBXML_VALID_ENABLED */
-
-/**
- * xmlSAX2AttributeNs:
- * @ctx: the user data (XML parser context)
- * @localname: the local name of the attribute
- * @prefix: the attribute namespace prefix if available
- * @URI: the attribute namespace name if available
- * @value: Start of the attribute value
- * @valueend: end of the attribute value
- *
- * Handle an attribute that has been read by the parser.
- * The default handling is to convert the attribute into an
- * DOM subtree and past it in a new xmlAttr element added to
- * the element.
- */
-static void
-xmlSAX2AttributeNs(xmlParserCtxtPtr ctxt,
- const xmlChar * localname,
- const xmlChar * prefix,
- const xmlChar * value,
- const xmlChar * valueend)
-{
- xmlAttrPtr ret;
- xmlNsPtr namespace = NULL;
- xmlChar *dup = NULL;
-
- /*
- * Note: if prefix == NULL, the attribute is not in the default namespace
- */
- if (prefix != NULL)
- namespace = xmlSearchNs(ctxt->myDoc, ctxt->node, prefix);
-
- /*
- * allocate the node
- */
- if (ctxt->freeAttrs != NULL) {
- ret = ctxt->freeAttrs;
- ctxt->freeAttrs = ret->next;
- ctxt->freeAttrsNr--;
- memset(ret, 0, sizeof(xmlAttr));
- ret->type = XML_ATTRIBUTE_NODE;
-
- ret->parent = ctxt->node;
- ret->doc = ctxt->myDoc;
- ret->ns = namespace;
-
- if (ctxt->dictNames)
- ret->name = localname;
- else
- ret->name = xmlStrdup(localname);
-
- /* link at the end to preserv order, TODO speed up with a last */
- if (ctxt->node->properties == NULL) {
- ctxt->node->properties = ret;
- } else {
- xmlAttrPtr prev = ctxt->node->properties;
-
- while (prev->next != NULL) prev = prev->next;
- prev->next = ret;
- ret->prev = prev;
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
- } else {
- if (ctxt->dictNames)
- ret = xmlNewNsPropEatName(ctxt->node, namespace,
- (xmlChar *) localname, NULL);
- else
- ret = xmlNewNsProp(ctxt->node, namespace, localname, NULL);
- if (ret == NULL) {
- xmlErrMemory(ctxt, "xmlSAX2AttributeNs");
- return;
- }
- }
-
- if ((ctxt->replaceEntities == 0) && (!ctxt->html)) {
- xmlNodePtr tmp;
-
- /*
- * We know that if there is an entity reference, then
- * the string has been dup'ed and terminates with 0
- * otherwise with ' or "
- */
- if (*valueend != 0) {
- tmp = xmlSAX2TextNode(ctxt, value, valueend - value);
- ret->children = tmp;
- ret->last = tmp;
- if (tmp != NULL) {
- tmp->doc = ret->doc;
- tmp->parent = (xmlNodePtr) ret;
- }
- } else {
- ret->children = xmlStringLenGetNodeList(ctxt->myDoc, value,
- valueend - value);
- tmp = ret->children;
- while (tmp != NULL) {
- tmp->doc = ret->doc;
- tmp->parent = (xmlNodePtr) ret;
- if (tmp->next == NULL)
- ret->last = tmp;
- tmp = tmp->next;
- }
- }
- } else if (value != NULL) {
- xmlNodePtr tmp;
-
- tmp = xmlSAX2TextNode(ctxt, value, valueend - value);
- ret->children = tmp;
- ret->last = tmp;
- if (tmp != NULL) {
- tmp->doc = ret->doc;
- tmp->parent = (xmlNodePtr) ret;
- }
- }
-
-#ifdef LIBXML_VALID_ENABLED
- if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset) {
- /*
- * If we don't substitute entities, the validation should be
- * done on a value with replaced entities anyway.
- */
- if (!ctxt->replaceEntities) {
- dup = xmlSAX2DecodeAttrEntities(ctxt, value, valueend);
- if (dup == NULL) {
- if (*valueend == 0) {
- ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
- ctxt->myDoc, ctxt->node, ret, value);
- } else {
- /*
- * That should already be normalized.
- * cheaper to finally allocate here than duplicate
- * entry points in the full validation code
- */
- dup = xmlStrndup(value, valueend - value);
-
- ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
- ctxt->myDoc, ctxt->node, ret, dup);
- }
- } else {
- /*
- * dup now contains a string of the flattened attribute
- * content with entities substitued. Check if we need to
- * apply an extra layer of normalization.
- * It need to be done twice ... it's an extra burden related
- * to the ability to keep references in attributes
- */
- if (ctxt->attsSpecial != NULL) {
- xmlChar *nvalnorm;
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(localname, prefix, fn, 50);
- if (fullname != NULL) {
- ctxt->vctxt.valid = 1;
- nvalnorm = xmlValidCtxtNormalizeAttributeValue(
- &ctxt->vctxt, ctxt->myDoc,
- ctxt->node, fullname, dup);
- if (ctxt->vctxt.valid != 1)
- ctxt->valid = 0;
-
- if ((fullname != fn) && (fullname != localname))
- xmlFree(fullname);
- if (nvalnorm != NULL) {
- xmlFree(dup);
- dup = nvalnorm;
- }
- }
- }
-
- ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
- ctxt->myDoc, ctxt->node, ret, dup);
- }
- } else {
- /*
- * if entities already have been substitued, then
- * the attribute as passed is already normalized
- */
- dup = xmlStrndup(value, valueend - value);
-
- ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt,
- ctxt->myDoc, ctxt->node, ret, dup);
- }
- } else
-#endif /* LIBXML_VALID_ENABLED */
- if (((ctxt->loadsubset & XML_SKIP_IDS) == 0) &&
- (((ctxt->replaceEntities == 0) && (ctxt->external != 2)) ||
- ((ctxt->replaceEntities != 0) && (ctxt->inSubset == 0)))) {
- /*
- * when validating, the ID registration is done at the attribute
- * validation level. Otherwise we have to do specific handling here.
- */
- if ((prefix == ctxt->str_xml) &&
- (localname[0] == 'i') && (localname[1] == 'd') &&
- (localname[2] == 0)) {
- /*
- * Add the xml:id value
- *
- * Open issue: normalization of the value.
- */
- if (dup == NULL)
- dup = xmlStrndup(value, valueend - value);
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_VALID_ENABLED
- if (xmlValidateNCName(dup, 1) != 0) {
- xmlErrValid(ctxt, XML_DTD_XMLID_VALUE,
- "xml:id : attribute value %s is not an NCName\n",
- (const char *) dup, NULL);
- }
-#endif
-#endif
- xmlAddID(&ctxt->vctxt, ctxt->myDoc, dup, ret);
- } else if (xmlIsID(ctxt->myDoc, ctxt->node, ret)) {
- /* might be worth duplicate entry points and not copy */
- if (dup == NULL)
- dup = xmlStrndup(value, valueend - value);
- xmlAddID(&ctxt->vctxt, ctxt->myDoc, dup, ret);
- } else if (xmlIsRef(ctxt->myDoc, ctxt->node, ret)) {
- if (dup == NULL)
- dup = xmlStrndup(value, valueend - value);
- xmlAddRef(&ctxt->vctxt, ctxt->myDoc, dup, ret);
- }
- }
- if (dup != NULL)
- xmlFree(dup);
-}
-
-/**
- * xmlSAX2StartElementNs:
- * @ctx: the user data (XML parser context)
- * @localname: the local name of the element
- * @prefix: the element namespace prefix if available
- * @URI: the element namespace name if available
- * @nb_namespaces: number of namespace definitions on that node
- * @namespaces: pointer to the array of prefix/URI pairs namespace definitions
- * @nb_attributes: the number of attributes on that node
- * @nb_defaulted: the number of defaulted attributes.
- * @attributes: pointer to the array of (localname/prefix/URI/value/end)
- * attribute values.
- *
- * SAX2 callback when an element start has been detected by the parser.
- * It provides the namespace informations for the element, as well as
- * the new namespace declarations on the element.
- */
-void
-xmlSAX2StartElementNs(void *ctx,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI,
- int nb_namespaces,
- const xmlChar **namespaces,
- int nb_attributes,
- int nb_defaulted,
- const xmlChar **attributes)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNodePtr ret;
- xmlNodePtr parent;
- xmlNsPtr last = NULL, ns;
- const xmlChar *uri, *pref;
- xmlChar *lname = NULL;
- int i, j;
-
- if (ctx == NULL) return;
- parent = ctxt->node;
- /*
- * First check on validity:
- */
- if (ctxt->validate && (ctxt->myDoc->extSubset == NULL) &&
- ((ctxt->myDoc->intSubset == NULL) ||
- ((ctxt->myDoc->intSubset->notations == NULL) &&
- (ctxt->myDoc->intSubset->elements == NULL) &&
- (ctxt->myDoc->intSubset->attributes == NULL) &&
- (ctxt->myDoc->intSubset->entities == NULL)))) {
- xmlErrValid(ctxt, XML_DTD_NO_DTD,
- "Validation failed: no DTD found !", NULL, NULL);
- ctxt->validate = 0;
- }
-
- /*
- * Take care of the rare case of an undefined namespace prefix
- */
- if ((prefix != NULL) && (URI == NULL)) {
- if (ctxt->dictNames) {
- const xmlChar *fullname;
-
- fullname = xmlDictQLookup(ctxt->dict, prefix, localname);
- if (fullname != NULL)
- localname = fullname;
- } else {
- lname = xmlBuildQName(localname, prefix, NULL, 0);
- }
- }
- /*
- * allocate the node
- */
- if (ctxt->freeElems != NULL) {
- ret = ctxt->freeElems;
- ctxt->freeElems = ret->next;
- ctxt->freeElemsNr--;
- memset(ret, 0, sizeof(xmlNode));
- ret->type = XML_ELEMENT_NODE;
-
- if (ctxt->dictNames)
- ret->name = localname;
- else {
- if (lname == NULL)
- ret->name = xmlStrdup(localname);
- else
- ret->name = lname;
- if (ret->name == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
- return;
- }
- }
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(ret);
- } else {
- if (ctxt->dictNames)
- ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
- (xmlChar *) localname, NULL);
- else if (lname == NULL)
- ret = xmlNewDocNode(ctxt->myDoc, NULL, localname, NULL);
- else
- ret = xmlNewDocNodeEatName(ctxt->myDoc, NULL,
- (xmlChar *) lname, NULL);
- if (ret == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
- return;
- }
- }
- if (ctxt->linenumbers) {
- if (ctxt->input != NULL) {
- if (ctxt->input->line < 65535)
- ret->line = (short) ctxt->input->line;
- else
- ret->line = 65535;
- }
- }
-
- if (parent == NULL) {
- xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
- }
- /*
- * Build the namespace list
- */
- for (i = 0,j = 0;j < nb_namespaces;j++) {
- pref = namespaces[i++];
- uri = namespaces[i++];
- ns = xmlNewNs(NULL, uri, pref);
- if (ns != NULL) {
- if (last == NULL) {
- ret->nsDef = last = ns;
- } else {
- last->next = ns;
- last = ns;
- }
- if ((URI != NULL) && (prefix == pref))
- ret->ns = ns;
- } else {
- /*
- * any out of memory error would already have been raised
- * but we can't be garanteed it's the actual error due to the
- * API, best is to skip in this case
- */
- continue;
- }
-#ifdef LIBXML_VALID_ENABLED
- if ((!ctxt->html) && ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset) {
- ctxt->valid &= xmlValidateOneNamespace(&ctxt->vctxt, ctxt->myDoc,
- ret, prefix, ns, uri);
- }
-#endif /* LIBXML_VALID_ENABLED */
- }
- ctxt->nodemem = -1;
-
- /*
- * We are parsing a new node.
- */
- nodePush(ctxt, ret);
-
- /*
- * Link the child element
- */
- if (parent != NULL) {
- if (parent->type == XML_ELEMENT_NODE) {
- xmlAddChild(parent, ret);
- } else {
- xmlAddSibling(parent, ret);
- }
- }
-
- /*
- * Insert the defaulted attributes from the DTD only if requested:
- */
- if ((nb_defaulted != 0) &&
- ((ctxt->loadsubset & XML_COMPLETE_ATTRS) == 0))
- nb_attributes -= nb_defaulted;
-
- /*
- * Search the namespace if it wasn't already found
- * Note that, if prefix is NULL, this searches for the default Ns
- */
- if ((URI != NULL) && (ret->ns == NULL)) {
- ret->ns = xmlSearchNs(ctxt->myDoc, parent, prefix);
- if ((ret->ns == NULL) && (xmlStrEqual(prefix, BAD_CAST "xml"))) {
- ret->ns = xmlSearchNs(ctxt->myDoc, ret, prefix);
- }
- if (ret->ns == NULL) {
- ns = xmlNewNs(ret, NULL, prefix);
- if (ns == NULL) {
-
- xmlSAX2ErrMemory(ctxt, "xmlSAX2StartElementNs");
- return;
- }
- if (prefix != NULL)
- xmlNsWarnMsg(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
- "Namespace prefix %s was not found\n",
- prefix, NULL);
- else
- xmlNsWarnMsg(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
- "Namespace default prefix was not found\n",
- NULL, NULL);
- }
- }
-
- /*
- * process all the other attributes
- */
- if (nb_attributes > 0) {
- for (j = 0,i = 0;i < nb_attributes;i++,j+=5) {
- /*
- * Handle the rare case of an undefined atribute prefix
- */
- if ((attributes[j+1] != NULL) && (attributes[j+2] == NULL)) {
- if (ctxt->dictNames) {
- const xmlChar *fullname;
-
- fullname = xmlDictQLookup(ctxt->dict, attributes[j+1],
- attributes[j]);
- if (fullname != NULL) {
- xmlSAX2AttributeNs(ctxt, fullname, NULL,
- attributes[j+3], attributes[j+4]);
- continue;
- }
- } else {
- lname = xmlBuildQName(attributes[j], attributes[j+1],
- NULL, 0);
- if (lname != NULL) {
- xmlSAX2AttributeNs(ctxt, lname, NULL,
- attributes[j+3], attributes[j+4]);
- xmlFree(lname);
- continue;
- }
- }
- }
- xmlSAX2AttributeNs(ctxt, attributes[j], attributes[j+1],
- attributes[j+3], attributes[j+4]);
- }
- }
-
-#ifdef LIBXML_VALID_ENABLED
- /*
- * If it's the Document root, finish the DTD validation and
- * check the document root element for validity
- */
- if ((ctxt->validate) && (ctxt->vctxt.finishDtd == XML_CTXT_FINISH_DTD_0)) {
- int chk;
-
- chk = xmlValidateDtdFinal(&ctxt->vctxt, ctxt->myDoc);
- if (chk <= 0)
- ctxt->valid = 0;
- if (chk < 0)
- ctxt->wellFormed = 0;
- ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
- ctxt->vctxt.finishDtd = XML_CTXT_FINISH_DTD_1;
- }
-#endif /* LIBXML_VALID_ENABLED */
-}
-
-/**
- * xmlSAX2EndElementNs:
- * @ctx: the user data (XML parser context)
- * @localname: the local name of the element
- * @prefix: the element namespace prefix if available
- * @URI: the element namespace name if available
- *
- * SAX2 callback when an element end has been detected by the parser.
- * It provides the namespace informations for the element.
- */
-void
-xmlSAX2EndElementNs(void *ctx,
- const xmlChar * localname ATTRIBUTE_UNUSED,
- const xmlChar * prefix ATTRIBUTE_UNUSED,
- const xmlChar * URI ATTRIBUTE_UNUSED)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserNodeInfo node_info;
- xmlNodePtr cur;
-
- if (ctx == NULL) return;
- cur = ctxt->node;
- /* Capture end position and add node */
- if ((ctxt->record_info) && (cur != NULL)) {
- node_info.end_pos = ctxt->input->cur - ctxt->input->base;
- node_info.end_line = ctxt->input->line;
- node_info.node = cur;
- xmlParserAddNodeInfo(ctxt, &node_info);
- }
- ctxt->nodemem = -1;
-
-#ifdef LIBXML_VALID_ENABLED
- if (ctxt->validate && ctxt->wellFormed &&
- ctxt->myDoc && ctxt->myDoc->intSubset)
- ctxt->valid &= xmlValidateOneElement(&ctxt->vctxt, ctxt->myDoc, cur);
-#endif /* LIBXML_VALID_ENABLED */
-
- /*
- * end of parsing of this node.
- */
- nodePop(ctxt);
-}
-
-/**
- * xmlSAX2Reference:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * called when an entity xmlSAX2Reference is detected.
- */
-void
-xmlSAX2Reference(void *ctx, const xmlChar *name)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNodePtr ret;
-
- if (ctx == NULL) return;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2Reference(%s)\n", name);
-#endif
- if (name[0] == '#')
- ret = xmlNewCharRef(ctxt->myDoc, name);
- else
- ret = xmlNewReference(ctxt->myDoc, name);
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "add xmlSAX2Reference %s to %s \n", name, ctxt->node->name);
-#endif
- if (xmlAddChild(ctxt->node, ret) == NULL) {
- xmlFreeNode(ret);
- }
-}
-
-/**
- * xmlSAX2Characters:
- * @ctx: the user data (XML parser context)
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- */
-void
-xmlSAX2Characters(void *ctx, const xmlChar *ch, int len)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNodePtr lastChild;
-
- if (ctx == NULL) return;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2Characters(%.30s, %d)\n", ch, len);
-#endif
- /*
- * Handle the data if any. If there is no child
- * add it as content, otherwise if the last child is text,
- * concatenate it, else create a new node of type text.
- */
-
- if (ctxt->node == NULL) {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "add chars: ctxt->node == NULL !\n");
-#endif
- return;
- }
- lastChild = ctxt->node->last;
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "add chars to %s \n", ctxt->node->name);
-#endif
-
- /*
- * Here we needed an accelerator mechanism in case of very large
- * elements. Use an attribute in the structure !!!
- */
- if (lastChild == NULL) {
- lastChild = xmlSAX2TextNode(ctxt, ch, len);
- if (lastChild != NULL) {
- ctxt->node->children = lastChild;
- ctxt->node->last = lastChild;
- lastChild->parent = ctxt->node;
- lastChild->doc = ctxt->node->doc;
- ctxt->nodelen = len;
- ctxt->nodemem = len + 1;
- } else {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters");
- return;
- }
- } else {
- int coalesceText = (lastChild != NULL) &&
- (lastChild->type == XML_TEXT_NODE) &&
- (lastChild->name == xmlStringText);
- if ((coalesceText) && (ctxt->nodemem != 0)) {
- /*
- * The whole point of maintaining nodelen and nodemem,
- * xmlTextConcat is too costly, i.e. compute length,
- * reallocate a new buffer, move data, append ch. Here
- * We try to minimaze realloc() uses and avoid copying
- * and recomputing length over and over.
- */
- if (lastChild->content == (xmlChar *)&(lastChild->properties)) {
- lastChild->content = xmlStrdup(lastChild->content);
- lastChild->properties = NULL;
- } else if ((ctxt->nodemem == ctxt->nodelen + 1) &&
- (xmlDictOwns(ctxt->dict, lastChild->content))) {
- lastChild->content = xmlStrdup(lastChild->content);
- }
- if (lastChild->content == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: xmlStrdup returned NULL");
- return;
- }
- if (((size_t)ctxt->nodelen + (size_t)len > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters: huge text node");
- return;
- }
- if ((size_t)ctxt->nodelen > SIZE_T_MAX - (size_t)len ||
- (size_t)ctxt->nodemem + (size_t)len > SIZE_T_MAX / 2) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters overflow prevented");
- return;
- }
- if (ctxt->nodelen + len >= ctxt->nodemem) {
- xmlChar *newbuf;
- size_t size;
-
- size = ctxt->nodemem + len;
- size *= 2;
- newbuf = (xmlChar *) xmlRealloc(lastChild->content,size);
- if (newbuf == NULL) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters");
- return;
- }
- ctxt->nodemem = size;
- lastChild->content = newbuf;
- }
- memcpy(&lastChild->content[ctxt->nodelen], ch, len);
- ctxt->nodelen += len;
- lastChild->content[ctxt->nodelen] = 0;
- } else if (coalesceText) {
- if (xmlTextConcat(lastChild, ch, len)) {
- xmlSAX2ErrMemory(ctxt, "xmlSAX2Characters");
- }
- if (ctxt->node->children != NULL) {
- ctxt->nodelen = xmlStrlen(lastChild->content);
- ctxt->nodemem = ctxt->nodelen + 1;
- }
- } else {
- /* Mixed content, first time */
- lastChild = xmlSAX2TextNode(ctxt, ch, len);
- if (lastChild != NULL) {
- xmlAddChild(ctxt->node, lastChild);
- if (ctxt->node->children != NULL) {
- ctxt->nodelen = len;
- ctxt->nodemem = len + 1;
- }
- }
- }
- }
-}
-
-/**
- * xmlSAX2IgnorableWhitespace:
- * @ctx: the user data (XML parser context)
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some ignorable whitespaces from the parser.
- * UNUSED: by default the DOM building will use xmlSAX2Characters
- */
-void
-xmlSAX2IgnorableWhitespace(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch ATTRIBUTE_UNUSED, int len ATTRIBUTE_UNUSED)
-{
- /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2IgnorableWhitespace(%.30s, %d)\n", ch, len);
-#endif
-}
-
-/**
- * xmlSAX2ProcessingInstruction:
- * @ctx: the user data (XML parser context)
- * @target: the target name
- * @data: the PI data's
- *
- * A processing instruction has been parsed.
- */
-void
-xmlSAX2ProcessingInstruction(void *ctx, const xmlChar *target,
- const xmlChar *data)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNodePtr ret;
- xmlNodePtr parent;
-
- if (ctx == NULL) return;
- parent = ctxt->node;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.xmlSAX2ProcessingInstruction(%s, %s)\n", target, data);
-#endif
-
- ret = xmlNewDocPI(ctxt->myDoc, target, data);
- if (ret == NULL) return;
-
- if (ctxt->linenumbers) {
- if (ctxt->input != NULL) {
- if (ctxt->input->line < 65535)
- ret->line = (short) ctxt->input->line;
- else
- ret->line = 65535;
- }
- }
- if (ctxt->inSubset == 1) {
- xmlAddChild((xmlNodePtr) ctxt->myDoc->intSubset, ret);
- return;
- } else if (ctxt->inSubset == 2) {
- xmlAddChild((xmlNodePtr) ctxt->myDoc->extSubset, ret);
- return;
- }
- if (parent == NULL) {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "Setting PI %s as root\n", target);
-#endif
- xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
- return;
- }
- if (parent->type == XML_ELEMENT_NODE) {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "adding PI %s child to %s\n", target, parent->name);
-#endif
- xmlAddChild(parent, ret);
- } else {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "adding PI %s sibling to ", target);
- xmlDebugDumpOneNode(stderr, parent, 0);
-#endif
- xmlAddSibling(parent, ret);
- }
-}
-
-/**
- * xmlSAX2Comment:
- * @ctx: the user data (XML parser context)
- * @value: the xmlSAX2Comment content
- *
- * A xmlSAX2Comment has been parsed.
- */
-void
-xmlSAX2Comment(void *ctx, const xmlChar *value)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNodePtr ret;
- xmlNodePtr parent;
-
- if (ctx == NULL) return;
- parent = ctxt->node;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext, "SAX.xmlSAX2Comment(%s)\n", value);
-#endif
- ret = xmlNewDocComment(ctxt->myDoc, value);
- if (ret == NULL) return;
- if (ctxt->linenumbers) {
- if (ctxt->input != NULL) {
- if (ctxt->input->line < 65535)
- ret->line = (short) ctxt->input->line;
- else
- ret->line = 65535;
- }
- }
-
- if (ctxt->inSubset == 1) {
- xmlAddChild((xmlNodePtr) ctxt->myDoc->intSubset, ret);
- return;
- } else if (ctxt->inSubset == 2) {
- xmlAddChild((xmlNodePtr) ctxt->myDoc->extSubset, ret);
- return;
- }
- if (parent == NULL) {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "Setting xmlSAX2Comment as root\n");
-#endif
- xmlAddChild((xmlNodePtr) ctxt->myDoc, (xmlNodePtr) ret);
- return;
- }
- if (parent->type == XML_ELEMENT_NODE) {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "adding xmlSAX2Comment child to %s\n", parent->name);
-#endif
- xmlAddChild(parent, ret);
- } else {
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "adding xmlSAX2Comment sibling to ");
- xmlDebugDumpOneNode(stderr, parent, 0);
-#endif
- xmlAddSibling(parent, ret);
- }
-}
-
-/**
- * xmlSAX2CDataBlock:
- * @ctx: the user data (XML parser context)
- * @value: The pcdata content
- * @len: the block length
- *
- * called when a pcdata block has been parsed
- */
-void
-xmlSAX2CDataBlock(void *ctx, const xmlChar *value, int len)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlNodePtr ret, lastChild;
-
- if (ctx == NULL) return;
-#ifdef DEBUG_SAX
- xmlGenericError(xmlGenericErrorContext,
- "SAX.pcdata(%.10s, %d)\n", value, len);
-#endif
- lastChild = xmlGetLastChild(ctxt->node);
-#ifdef DEBUG_SAX_TREE
- xmlGenericError(xmlGenericErrorContext,
- "add chars to %s \n", ctxt->node->name);
-#endif
- if ((lastChild != NULL) &&
- (lastChild->type == XML_CDATA_SECTION_NODE)) {
- xmlTextConcat(lastChild, value, len);
- } else {
- ret = xmlNewCDataBlock(ctxt->myDoc, value, len);
- if (xmlAddChild(ctxt->node, ret) == NULL)
- xmlFreeNode(ret);
- }
-}
-
-static int xmlSAX2DefaultVersionValue = 2;
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * xmlSAXDefaultVersion:
- * @version: the version, 1 or 2
- *
- * Set the default version of SAX used globally by the library.
- * By default, during initialization the default is set to 2.
- * Note that it is generally a better coding style to use
- * xmlSAXVersion() to set up the version explicitly for a given
- * parsing context.
- *
- * Returns the previous value in case of success and -1 in case of error.
- */
-int
-xmlSAXDefaultVersion(int version)
-{
- int ret = xmlSAX2DefaultVersionValue;
-
- if ((version != 1) && (version != 2))
- return(-1);
- xmlSAX2DefaultVersionValue = version;
- return(ret);
-}
-#endif /* LIBXML_SAX1_ENABLED */
-
-/**
- * xmlSAXVersion:
- * @hdlr: the SAX handler
- * @version: the version, 1 or 2
- *
- * Initialize the default XML SAX handler according to the version
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlSAXVersion(xmlSAXHandler *hdlr, int version)
-{
- if (hdlr == NULL) return(-1);
- if (version == 2) {
- hdlr->startElement = NULL;
- hdlr->endElement = NULL;
- hdlr->startElementNs = xmlSAX2StartElementNs;
- hdlr->endElementNs = xmlSAX2EndElementNs;
- hdlr->serror = NULL;
- hdlr->initialized = XML_SAX2_MAGIC;
-#ifdef LIBXML_SAX1_ENABLED
- } else if (version == 1) {
- hdlr->startElement = xmlSAX2StartElement;
- hdlr->endElement = xmlSAX2EndElement;
- hdlr->initialized = 1;
-#endif /* LIBXML_SAX1_ENABLED */
- } else
- return(-1);
- hdlr->internalSubset = xmlSAX2InternalSubset;
- hdlr->externalSubset = xmlSAX2ExternalSubset;
- hdlr->isStandalone = xmlSAX2IsStandalone;
- hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
- hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
- hdlr->resolveEntity = xmlSAX2ResolveEntity;
- hdlr->getEntity = xmlSAX2GetEntity;
- hdlr->getParameterEntity = xmlSAX2GetParameterEntity;
- hdlr->entityDecl = xmlSAX2EntityDecl;
- hdlr->attributeDecl = xmlSAX2AttributeDecl;
- hdlr->elementDecl = xmlSAX2ElementDecl;
- hdlr->notationDecl = xmlSAX2NotationDecl;
- hdlr->unparsedEntityDecl = xmlSAX2UnparsedEntityDecl;
- hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
- hdlr->startDocument = xmlSAX2StartDocument;
- hdlr->endDocument = xmlSAX2EndDocument;
- hdlr->reference = xmlSAX2Reference;
- hdlr->characters = xmlSAX2Characters;
- hdlr->cdataBlock = xmlSAX2CDataBlock;
- hdlr->ignorableWhitespace = xmlSAX2Characters;
- hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
- hdlr->comment = xmlSAX2Comment;
- hdlr->warning = xmlParserWarning;
- hdlr->error = xmlParserError;
- hdlr->fatalError = xmlParserError;
-
- return(0);
-}
-
-/**
- * xmlSAX2InitDefaultSAXHandler:
- * @hdlr: the SAX handler
- * @warning: flag if non-zero sets the handler warning procedure
- *
- * Initialize the default XML SAX2 handler
- */
-void
-xmlSAX2InitDefaultSAXHandler(xmlSAXHandler *hdlr, int warning)
-{
- if ((hdlr == NULL) || (hdlr->initialized != 0))
- return;
-
- xmlSAXVersion(hdlr, xmlSAX2DefaultVersionValue);
- if (warning == 0)
- hdlr->warning = NULL;
- else
- hdlr->warning = xmlParserWarning;
-}
-
-/**
- * xmlDefaultSAXHandlerInit:
- *
- * Initialize the default SAX2 handler
- */
-void
-xmlDefaultSAXHandlerInit(void)
-{
-#ifdef LIBXML_SAX1_ENABLED
- xmlSAXVersion((xmlSAXHandlerPtr) &xmlDefaultSAXHandler, 1);
-#endif /* LIBXML_SAX1_ENABLED */
-}
-
-#ifdef LIBXML_HTML_ENABLED
-
-/**
- * xmlSAX2InitHtmlDefaultSAXHandler:
- * @hdlr: the SAX handler
- *
- * Initialize the default HTML SAX2 handler
- */
-void
-xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr)
-{
- if ((hdlr == NULL) || (hdlr->initialized != 0))
- return;
-
- hdlr->internalSubset = xmlSAX2InternalSubset;
- hdlr->externalSubset = NULL;
- hdlr->isStandalone = NULL;
- hdlr->hasInternalSubset = NULL;
- hdlr->hasExternalSubset = NULL;
- hdlr->resolveEntity = NULL;
- hdlr->getEntity = xmlSAX2GetEntity;
- hdlr->getParameterEntity = NULL;
- hdlr->entityDecl = NULL;
- hdlr->attributeDecl = NULL;
- hdlr->elementDecl = NULL;
- hdlr->notationDecl = NULL;
- hdlr->unparsedEntityDecl = NULL;
- hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
- hdlr->startDocument = xmlSAX2StartDocument;
- hdlr->endDocument = xmlSAX2EndDocument;
- hdlr->startElement = xmlSAX2StartElement;
- hdlr->endElement = xmlSAX2EndElement;
- hdlr->reference = NULL;
- hdlr->characters = xmlSAX2Characters;
- hdlr->cdataBlock = xmlSAX2CDataBlock;
- hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
- hdlr->processingInstruction = xmlSAX2ProcessingInstruction;
- hdlr->comment = xmlSAX2Comment;
- hdlr->warning = xmlParserWarning;
- hdlr->error = xmlParserError;
- hdlr->fatalError = xmlParserError;
-
- hdlr->initialized = 1;
-}
-
-/**
- * htmlDefaultSAXHandlerInit:
- *
- * Initialize the default SAX handler
- */
-void
-htmlDefaultSAXHandlerInit(void)
-{
- xmlSAX2InitHtmlDefaultSAXHandler((xmlSAXHandlerPtr) &htmlDefaultSAXHandler);
-}
-
-#endif /* LIBXML_HTML_ENABLED */
-
-#ifdef LIBXML_DOCB_ENABLED
-
-/**
- * xmlSAX2InitDocbDefaultSAXHandler:
- * @hdlr: the SAX handler
- *
- * Initialize the default DocBook SAX2 handler
- */
-void
-xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr)
-{
- if ((hdlr == NULL) || (hdlr->initialized != 0))
- return;
-
- hdlr->internalSubset = xmlSAX2InternalSubset;
- hdlr->externalSubset = NULL;
- hdlr->isStandalone = xmlSAX2IsStandalone;
- hdlr->hasInternalSubset = xmlSAX2HasInternalSubset;
- hdlr->hasExternalSubset = xmlSAX2HasExternalSubset;
- hdlr->resolveEntity = xmlSAX2ResolveEntity;
- hdlr->getEntity = xmlSAX2GetEntity;
- hdlr->getParameterEntity = NULL;
- hdlr->entityDecl = xmlSAX2EntityDecl;
- hdlr->attributeDecl = NULL;
- hdlr->elementDecl = NULL;
- hdlr->notationDecl = NULL;
- hdlr->unparsedEntityDecl = NULL;
- hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator;
- hdlr->startDocument = xmlSAX2StartDocument;
- hdlr->endDocument = xmlSAX2EndDocument;
- hdlr->startElement = xmlSAX2StartElement;
- hdlr->endElement = xmlSAX2EndElement;
- hdlr->reference = xmlSAX2Reference;
- hdlr->characters = xmlSAX2Characters;
- hdlr->cdataBlock = NULL;
- hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
- hdlr->processingInstruction = NULL;
- hdlr->comment = xmlSAX2Comment;
- hdlr->warning = xmlParserWarning;
- hdlr->error = xmlParserError;
- hdlr->fatalError = xmlParserError;
-
- hdlr->initialized = 1;
-}
-
-/**
- * docbDefaultSAXHandlerInit:
- *
- * Initialize the default SAX handler
- */
-void
-docbDefaultSAXHandlerInit(void)
-{
- xmlSAX2InitDocbDefaultSAXHandler((xmlSAXHandlerPtr) &docbDefaultSAXHandler);
-}
-
-#endif /* LIBXML_DOCB_ENABLED */
-#define bottom_SAX2
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/buf.c b/external/libxml2_android/jni/libxml2/buf.c
deleted file mode 100644
index 07922ff6..00000000
--- a/external/libxml2_android/jni/libxml2/buf.c
+++ /dev/null
@@ -1,1345 +0,0 @@
-/*
- * buf.c: memory buffers for libxml2
- *
- * new buffer structures and entry points to simplify the maintainance
- * of libxml2 and ensure we keep good control over memory allocations
- * and stay 64 bits clean.
- * The new entry point use the xmlBufPtr opaque structure and
- * xmlBuf...() counterparts to the old xmlBuf...() functions
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h> /* for memset() only ! */
-#include <limits.h>
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include <libxml/tree.h>
-#include <libxml/globals.h>
-#include <libxml/tree.h>
-#include <libxml/parserInternals.h> /* for XML_MAX_TEXT_LENGTH */
-#include "buf.h"
-
-#define WITH_BUFFER_COMPAT
-
-/**
- * xmlBuf:
- *
- * A buffer structure. The base of the structure is somehow compatible
- * with struct _xmlBuffer to limit risks on application which accessed
- * directly the input->buf->buffer structures.
- */
-
-struct _xmlBuf {
- xmlChar *content; /* The buffer content UTF8 */
- unsigned int compat_use; /* for binary compatibility */
- unsigned int compat_size; /* for binary compatibility */
- xmlBufferAllocationScheme alloc; /* The realloc method */
- xmlChar *contentIO; /* in IO mode we may have a different base */
- size_t use; /* The buffer size used */
- size_t size; /* The buffer size */
- xmlBufferPtr buffer; /* wrapper for an old buffer */
- int error; /* an error code if a failure occured */
-};
-
-#ifdef WITH_BUFFER_COMPAT
-/*
- * Macro for compatibility with xmlBuffer to be used after an xmlBuf
- * is updated. This makes sure the compat fields are updated too.
- */
-#define UPDATE_COMPAT(buf) \
- if (buf->size < INT_MAX) buf->compat_size = buf->size; \
- else buf->compat_size = INT_MAX; \
- if (buf->use < INT_MAX) buf->compat_use = buf->use; \
- else buf->compat_use = INT_MAX;
-
-/*
- * Macro for compatibility with xmlBuffer to be used in all the xmlBuf
- * entry points, it checks that the compat fields have not been modified
- * by direct call to xmlBuffer function from code compiled before 2.9.0 .
- */
-#define CHECK_COMPAT(buf) \
- if (buf->size != (size_t) buf->compat_size) \
- if (buf->compat_size < INT_MAX) \
- buf->size = buf->compat_size; \
- if (buf->use != (size_t) buf->compat_use) \
- if (buf->compat_use < INT_MAX) \
- buf->use = buf->compat_use;
-
-#else /* ! WITH_BUFFER_COMPAT */
-#define UPDATE_COMPAT(buf)
-#define CHECK_COMPAT(buf)
-#endif /* WITH_BUFFER_COMPAT */
-
-/**
- * xmlBufMemoryError:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- * To be improved...
- */
-static void
-xmlBufMemoryError(xmlBufPtr buf, const char *extra)
-{
- __xmlSimpleError(XML_FROM_BUFFER, XML_ERR_NO_MEMORY, NULL, NULL, extra);
- if ((buf) && (buf->error == 0))
- buf->error = XML_ERR_NO_MEMORY;
-}
-
-/**
- * xmlBufOverflowError:
- * @extra: extra informations
- *
- * Handle a buffer overflow error
- * To be improved...
- */
-static void
-xmlBufOverflowError(xmlBufPtr buf, const char *extra)
-{
- __xmlSimpleError(XML_FROM_BUFFER, XML_BUF_OVERFLOW, NULL, NULL, extra);
- if ((buf) && (buf->error == 0))
- buf->error = XML_BUF_OVERFLOW;
-}
-
-
-/**
- * xmlBufCreate:
- *
- * routine to create an XML buffer.
- * returns the new structure.
- */
-xmlBufPtr
-xmlBufCreate(void) {
- xmlBufPtr ret;
-
- ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
- if (ret == NULL) {
- xmlBufMemoryError(NULL, "creating buffer");
- return(NULL);
- }
- ret->compat_use = 0;
- ret->use = 0;
- ret->error = 0;
- ret->buffer = NULL;
- ret->size = xmlDefaultBufferSize;
- ret->compat_size = xmlDefaultBufferSize;
- ret->alloc = xmlBufferAllocScheme;
- ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar));
- if (ret->content == NULL) {
- xmlBufMemoryError(ret, "creating buffer");
- xmlFree(ret);
- return(NULL);
- }
- ret->content[0] = 0;
- ret->contentIO = NULL;
- return(ret);
-}
-
-/**
- * xmlBufCreateSize:
- * @size: initial size of buffer
- *
- * routine to create an XML buffer.
- * returns the new structure.
- */
-xmlBufPtr
-xmlBufCreateSize(size_t size) {
- xmlBufPtr ret;
-
- ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
- if (ret == NULL) {
- xmlBufMemoryError(NULL, "creating buffer");
- return(NULL);
- }
- ret->compat_use = 0;
- ret->use = 0;
- ret->error = 0;
- ret->buffer = NULL;
- ret->alloc = xmlBufferAllocScheme;
- ret->size = (size ? size+2 : 0); /* +1 for ending null */
- ret->compat_size = (int) ret->size;
- if (ret->size){
- ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar));
- if (ret->content == NULL) {
- xmlBufMemoryError(ret, "creating buffer");
- xmlFree(ret);
- return(NULL);
- }
- ret->content[0] = 0;
- } else
- ret->content = NULL;
- ret->contentIO = NULL;
- return(ret);
-}
-
-/**
- * xmlBufDetach:
- * @buf: the buffer
- *
- * Remove the string contained in a buffer and give it back to the
- * caller. The buffer is reset to an empty content.
- * This doesn't work with immutable buffers as they can't be reset.
- *
- * Returns the previous string contained by the buffer.
- */
-xmlChar *
-xmlBufDetach(xmlBufPtr buf) {
- xmlChar *ret;
-
- if (buf == NULL)
- return(NULL);
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
- return(NULL);
- if (buf->buffer != NULL)
- return(NULL);
- if (buf->error)
- return(NULL);
-
- ret = buf->content;
- buf->content = NULL;
- buf->size = 0;
- buf->use = 0;
- buf->compat_use = 0;
- buf->compat_size = 0;
-
- return ret;
-}
-
-
-/**
- * xmlBufCreateStatic:
- * @mem: the memory area
- * @size: the size in byte
- *
- * routine to create an XML buffer from an immutable memory area.
- * The area won't be modified nor copied, and is expected to be
- * present until the end of the buffer lifetime.
- *
- * returns the new structure.
- */
-xmlBufPtr
-xmlBufCreateStatic(void *mem, size_t size) {
- xmlBufPtr ret;
-
- if ((mem == NULL) || (size == 0))
- return(NULL);
-
- ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
- if (ret == NULL) {
- xmlBufMemoryError(NULL, "creating buffer");
- return(NULL);
- }
- if (size < INT_MAX) {
- ret->compat_use = size;
- ret->compat_size = size;
- } else {
- ret->compat_use = INT_MAX;
- ret->compat_size = INT_MAX;
- }
- ret->use = size;
- ret->size = size;
- ret->alloc = XML_BUFFER_ALLOC_IMMUTABLE;
- ret->content = (xmlChar *) mem;
- ret->error = 0;
- ret->buffer = NULL;
- return(ret);
-}
-
-/**
- * xmlBufGetAllocationScheme:
- * @buf: the buffer
- *
- * Get the buffer allocation scheme
- *
- * Returns the scheme or -1 in case of error
- */
-int
-xmlBufGetAllocationScheme(xmlBufPtr buf) {
- if (buf == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufGetAllocationScheme: buf == NULL\n");
-#endif
- return(-1);
- }
- return(buf->alloc);
-}
-
-/**
- * xmlBufSetAllocationScheme:
- * @buf: the buffer to tune
- * @scheme: allocation scheme to use
- *
- * Sets the allocation scheme for this buffer
- *
- * returns 0 in case of success and -1 in case of failure
- */
-int
-xmlBufSetAllocationScheme(xmlBufPtr buf,
- xmlBufferAllocationScheme scheme) {
- if ((buf == NULL) || (buf->error != 0)) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufSetAllocationScheme: buf == NULL or in error\n");
-#endif
- return(-1);
- }
- if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) ||
- (buf->alloc == XML_BUFFER_ALLOC_IO))
- return(-1);
- if ((scheme == XML_BUFFER_ALLOC_DOUBLEIT) ||
- (scheme == XML_BUFFER_ALLOC_EXACT) ||
- (scheme == XML_BUFFER_ALLOC_HYBRID) ||
- (scheme == XML_BUFFER_ALLOC_IMMUTABLE) ||
- (scheme == XML_BUFFER_ALLOC_BOUNDED)) {
- buf->alloc = scheme;
- if (buf->buffer)
- buf->buffer->alloc = scheme;
- return(0);
- }
- /*
- * Switching a buffer ALLOC_IO has the side effect of initializing
- * the contentIO field with the current content
- */
- if (scheme == XML_BUFFER_ALLOC_IO) {
- buf->alloc = XML_BUFFER_ALLOC_IO;
- buf->contentIO = buf->content;
- }
- return(-1);
-}
-
-/**
- * xmlBufFree:
- * @buf: the buffer to free
- *
- * Frees an XML buffer. It frees both the content and the structure which
- * encapsulate it.
- */
-void
-xmlBufFree(xmlBufPtr buf) {
- if (buf == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufFree: buf == NULL\n");
-#endif
- return;
- }
-
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) &&
- (buf->contentIO != NULL)) {
- xmlFree(buf->contentIO);
- } else if ((buf->content != NULL) &&
- (buf->alloc != XML_BUFFER_ALLOC_IMMUTABLE)) {
- xmlFree(buf->content);
- }
- xmlFree(buf);
-}
-
-/**
- * xmlBufEmpty:
- * @buf: the buffer
- *
- * empty a buffer.
- */
-void
-xmlBufEmpty(xmlBufPtr buf) {
- if ((buf == NULL) || (buf->error != 0)) return;
- if (buf->content == NULL) return;
- CHECK_COMPAT(buf)
- buf->use = 0;
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) {
- buf->content = BAD_CAST "";
- } else if ((buf->alloc == XML_BUFFER_ALLOC_IO) &&
- (buf->contentIO != NULL)) {
- size_t start_buf = buf->content - buf->contentIO;
-
- buf->size += start_buf;
- buf->content = buf->contentIO;
- buf->content[0] = 0;
- } else {
- buf->content[0] = 0;
- }
- UPDATE_COMPAT(buf)
-}
-
-/**
- * xmlBufShrink:
- * @buf: the buffer to dump
- * @len: the number of xmlChar to remove
- *
- * Remove the beginning of an XML buffer.
- * NOTE that this routine behaviour differs from xmlBufferShrink()
- * as it will return 0 on error instead of -1 due to size_t being
- * used as the return type.
- *
- * Returns the number of byte removed or 0 in case of failure
- */
-size_t
-xmlBufShrink(xmlBufPtr buf, size_t len) {
- if ((buf == NULL) || (buf->error != 0)) return(0);
- CHECK_COMPAT(buf)
- if (len == 0) return(0);
- if (len > buf->use) return(0);
-
- buf->use -= len;
- if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) ||
- ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL))) {
- /*
- * we just move the content pointer, but also make sure
- * the perceived buffer size has shrinked accordingly
- */
- buf->content += len;
- buf->size -= len;
-
- /*
- * sometimes though it maybe be better to really shrink
- * on IO buffers
- */
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
- size_t start_buf = buf->content - buf->contentIO;
- if (start_buf >= buf->size) {
- memmove(buf->contentIO, &buf->content[0], buf->use);
- buf->content = buf->contentIO;
- buf->content[buf->use] = 0;
- buf->size += start_buf;
- }
- }
- } else {
- memmove(buf->content, &buf->content[len], buf->use);
- buf->content[buf->use] = 0;
- }
- UPDATE_COMPAT(buf)
- return(len);
-}
-
-/**
- * xmlBufGrowInternal:
- * @buf: the buffer
- * @len: the minimum free size to allocate
- *
- * Grow the available space of an XML buffer, @len is the target value
- * Error checking should be done on buf->error since using the return
- * value doesn't work that well
- *
- * Returns 0 in case of error or the length made available otherwise
- */
-static size_t
-xmlBufGrowInternal(xmlBufPtr buf, size_t len) {
- size_t size;
- xmlChar *newbuf;
-
- if ((buf == NULL) || (buf->error != 0)) return(0);
- CHECK_COMPAT(buf)
-
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
- if (buf->use + len < buf->size)
- return(buf->size - buf->use);
-
- /*
- * Windows has a BIG problem on realloc timing, so we try to double
- * the buffer size (if that's enough) (bug 146697)
- * Apparently BSD too, and it's probably best for linux too
- * On an embedded system this may be something to change
- */
-#if 1
- if (buf->size > (size_t) len)
- size = buf->size * 2;
- else
- size = buf->use + len + 100;
-#else
- size = buf->use + len + 100;
-#endif
-
- if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
- /*
- * Used to provide parsing limits
- */
- if ((buf->use + len >= XML_MAX_TEXT_LENGTH) ||
- (buf->size >= XML_MAX_TEXT_LENGTH)) {
- xmlBufMemoryError(buf, "buffer error: text too long\n");
- return(0);
- }
- if (size >= XML_MAX_TEXT_LENGTH)
- size = XML_MAX_TEXT_LENGTH;
- }
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
- size_t start_buf = buf->content - buf->contentIO;
-
- newbuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + size);
- if (newbuf == NULL) {
- xmlBufMemoryError(buf, "growing buffer");
- return(0);
- }
- buf->contentIO = newbuf;
- buf->content = newbuf + start_buf;
- } else {
- newbuf = (xmlChar *) xmlRealloc(buf->content, size);
- if (newbuf == NULL) {
- xmlBufMemoryError(buf, "growing buffer");
- return(0);
- }
- buf->content = newbuf;
- }
- buf->size = size;
- UPDATE_COMPAT(buf)
- return(buf->size - buf->use);
-}
-
-/**
- * xmlBufGrow:
- * @buf: the buffer
- * @len: the minimum free size to allocate
- *
- * Grow the available space of an XML buffer, @len is the target value
- * This is been kept compatible with xmlBufferGrow() as much as possible
- *
- * Returns -1 in case of error or the length made available otherwise
- */
-int
-xmlBufGrow(xmlBufPtr buf, int len) {
- size_t ret;
-
- if ((buf == NULL) || (len < 0)) return(-1);
- if (len == 0)
- return(0);
- ret = xmlBufGrowInternal(buf, len);
- if (buf->error != 0)
- return(-1);
- return((int) ret);
-}
-
-/**
- * xmlBufInflate:
- * @buf: the buffer
- * @len: the minimum extra free size to allocate
- *
- * Grow the available space of an XML buffer, adding at least @len bytes
- *
- * Returns 0 if successful or -1 in case of error
- */
-int
-xmlBufInflate(xmlBufPtr buf, size_t len) {
- if (buf == NULL) return(-1);
- xmlBufGrowInternal(buf, len + buf->size);
- if (buf->error)
- return(-1);
- return(0);
-}
-
-/**
- * xmlBufDump:
- * @file: the file output
- * @buf: the buffer to dump
- *
- * Dumps an XML buffer to a FILE *.
- * Returns the number of #xmlChar written
- */
-size_t
-xmlBufDump(FILE *file, xmlBufPtr buf) {
- size_t ret;
-
- if ((buf == NULL) || (buf->error != 0)) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufDump: buf == NULL or in error\n");
-#endif
- return(0);
- }
- if (buf->content == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufDump: buf->content == NULL\n");
-#endif
- return(0);
- }
- CHECK_COMPAT(buf)
- if (file == NULL)
- file = stdout;
- ret = fwrite(buf->content, sizeof(xmlChar), buf->use, file);
- return(ret);
-}
-
-/**
- * xmlBufContent:
- * @buf: the buffer
- *
- * Function to extract the content of a buffer
- *
- * Returns the internal content
- */
-
-xmlChar *
-xmlBufContent(const xmlBuf *buf)
-{
- if ((!buf) || (buf->error))
- return NULL;
-
- return(buf->content);
-}
-
-/**
- * xmlBufEnd:
- * @buf: the buffer
- *
- * Function to extract the end of the content of a buffer
- *
- * Returns the end of the internal content or NULL in case of error
- */
-
-xmlChar *
-xmlBufEnd(xmlBufPtr buf)
-{
- if ((!buf) || (buf->error))
- return NULL;
- CHECK_COMPAT(buf)
-
- return(&buf->content[buf->use]);
-}
-
-/**
- * xmlBufAddLen:
- * @buf: the buffer
- * @len: the size which were added at the end
- *
- * Sometime data may be added at the end of the buffer without
- * using the xmlBuf APIs that is used to expand the used space
- * and set the zero terminating at the end of the buffer
- *
- * Returns -1 in case of error and 0 otherwise
- */
-int
-xmlBufAddLen(xmlBufPtr buf, size_t len) {
- if ((buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- if (len > (buf->size - buf->use))
- return(-1);
- buf->use += len;
- UPDATE_COMPAT(buf)
- if (buf->size > buf->use)
- buf->content[buf->use] = 0;
- else
- return(-1);
- return(0);
-}
-
-/**
- * xmlBufErase:
- * @buf: the buffer
- * @len: the size to erase at the end
- *
- * Sometime data need to be erased at the end of the buffer
- *
- * Returns -1 in case of error and 0 otherwise
- */
-int
-xmlBufErase(xmlBufPtr buf, size_t len) {
- if ((buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- if (len > buf->use)
- return(-1);
- buf->use -= len;
- buf->content[buf->use] = 0;
- UPDATE_COMPAT(buf)
- return(0);
-}
-
-/**
- * xmlBufLength:
- * @buf: the buffer
- *
- * Function to get the length of a buffer
- *
- * Returns the length of data in the internal content
- */
-
-size_t
-xmlBufLength(const xmlBufPtr buf)
-{
- if ((!buf) || (buf->error))
- return 0;
- CHECK_COMPAT(buf)
-
- return(buf->use);
-}
-
-/**
- * xmlBufUse:
- * @buf: the buffer
- *
- * Function to get the length of a buffer
- *
- * Returns the length of data in the internal content
- */
-
-size_t
-xmlBufUse(const xmlBufPtr buf)
-{
- if ((!buf) || (buf->error))
- return 0;
- CHECK_COMPAT(buf)
-
- return(buf->use);
-}
-
-/**
- * xmlBufAvail:
- * @buf: the buffer
- *
- * Function to find how much free space is allocated but not
- * used in the buffer. It does not account for the terminating zero
- * usually needed
- *
- * Returns the amount or 0 if none or an error occured
- */
-
-size_t
-xmlBufAvail(const xmlBufPtr buf)
-{
- if ((!buf) || (buf->error))
- return 0;
- CHECK_COMPAT(buf)
-
- return(buf->size - buf->use);
-}
-
-/**
- * xmlBufIsEmpty:
- * @buf: the buffer
- *
- * Tell if a buffer is empty
- *
- * Returns 0 if no, 1 if yes and -1 in case of error
- */
-int
-xmlBufIsEmpty(const xmlBufPtr buf)
-{
- if ((!buf) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
-
- return(buf->use == 0);
-}
-
-/**
- * xmlBufResize:
- * @buf: the buffer to resize
- * @size: the desired size
- *
- * Resize a buffer to accommodate minimum size of @size.
- *
- * Returns 0 in case of problems, 1 otherwise
- */
-int
-xmlBufResize(xmlBufPtr buf, size_t size)
-{
- unsigned int newSize;
- xmlChar* rebuf = NULL;
- size_t start_buf;
-
- if ((buf == NULL) || (buf->error))
- return(0);
- CHECK_COMPAT(buf)
-
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
- if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
- /*
- * Used to provide parsing limits
- */
- if (size >= XML_MAX_TEXT_LENGTH) {
- xmlBufMemoryError(buf, "buffer error: text too long\n");
- return(0);
- }
- }
-
- /* Don't resize if we don't have to */
- if (size < buf->size)
- return 1;
-
- /* figure out new size */
- switch (buf->alloc){
- case XML_BUFFER_ALLOC_IO:
- case XML_BUFFER_ALLOC_DOUBLEIT:
- /*take care of empty case*/
- newSize = (buf->size ? buf->size*2 : size + 10);
- while (size > newSize) {
- if (newSize > UINT_MAX / 2) {
- xmlBufMemoryError(buf, "growing buffer");
- return 0;
- }
- newSize *= 2;
- }
- break;
- case XML_BUFFER_ALLOC_EXACT:
- newSize = size+10;
- break;
- case XML_BUFFER_ALLOC_HYBRID:
- if (buf->use < BASE_BUFFER_SIZE)
- newSize = size;
- else {
- newSize = buf->size * 2;
- while (size > newSize) {
- if (newSize > UINT_MAX / 2) {
- xmlBufMemoryError(buf, "growing buffer");
- return 0;
- }
- newSize *= 2;
- }
- }
- break;
-
- default:
- newSize = size+10;
- break;
- }
-
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
- start_buf = buf->content - buf->contentIO;
-
- if (start_buf > newSize) {
- /* move data back to start */
- memmove(buf->contentIO, buf->content, buf->use);
- buf->content = buf->contentIO;
- buf->content[buf->use] = 0;
- buf->size += start_buf;
- } else {
- rebuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + newSize);
- if (rebuf == NULL) {
- xmlBufMemoryError(buf, "growing buffer");
- return 0;
- }
- buf->contentIO = rebuf;
- buf->content = rebuf + start_buf;
- }
- } else {
- if (buf->content == NULL) {
- rebuf = (xmlChar *) xmlMallocAtomic(newSize);
- } else if (buf->size - buf->use < 100) {
- rebuf = (xmlChar *) xmlRealloc(buf->content, newSize);
- } else {
- /*
- * if we are reallocating a buffer far from being full, it's
- * better to make a new allocation and copy only the used range
- * and free the old one.
- */
- rebuf = (xmlChar *) xmlMallocAtomic(newSize);
- if (rebuf != NULL) {
- memcpy(rebuf, buf->content, buf->use);
- xmlFree(buf->content);
- rebuf[buf->use] = 0;
- }
- }
- if (rebuf == NULL) {
- xmlBufMemoryError(buf, "growing buffer");
- return 0;
- }
- buf->content = rebuf;
- }
- buf->size = newSize;
- UPDATE_COMPAT(buf)
-
- return 1;
-}
-
-/**
- * xmlBufAdd:
- * @buf: the buffer to dump
- * @str: the #xmlChar string
- * @len: the number of #xmlChar to add
- *
- * Add a string range to an XML buffer. if len == -1, the length of
- * str is recomputed.
- *
- * Returns 0 successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufAdd(xmlBufPtr buf, const xmlChar *str, int len) {
- unsigned int needSize;
-
- if ((str == NULL) || (buf == NULL) || (buf->error))
- return -1;
- CHECK_COMPAT(buf)
-
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
- if (len < -1) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufAdd: len < 0\n");
-#endif
- return -1;
- }
- if (len == 0) return 0;
-
- if (len < 0)
- len = xmlStrlen(str);
-
- if (len < 0) return -1;
- if (len == 0) return 0;
-
- needSize = buf->use + len + 2;
- if (needSize > buf->size){
- if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
- /*
- * Used to provide parsing limits
- */
- if (needSize >= XML_MAX_TEXT_LENGTH) {
- xmlBufMemoryError(buf, "buffer error: text too long\n");
- return(-1);
- }
- }
- if (!xmlBufResize(buf, needSize)){
- xmlBufMemoryError(buf, "growing buffer");
- return XML_ERR_NO_MEMORY;
- }
- }
-
- memmove(&buf->content[buf->use], str, len*sizeof(xmlChar));
- buf->use += len;
- buf->content[buf->use] = 0;
- UPDATE_COMPAT(buf)
- return 0;
-}
-
-/**
- * xmlBufAddHead:
- * @buf: the buffer
- * @str: the #xmlChar string
- * @len: the number of #xmlChar to add
- *
- * Add a string range to the beginning of an XML buffer.
- * if len == -1, the length of @str is recomputed.
- *
- * Returns 0 successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufAddHead(xmlBufPtr buf, const xmlChar *str, int len) {
- unsigned int needSize;
-
- if ((buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
- if (str == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufAddHead: str == NULL\n");
-#endif
- return -1;
- }
- if (len < -1) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufAddHead: len < 0\n");
-#endif
- return -1;
- }
- if (len == 0) return 0;
-
- if (len < 0)
- len = xmlStrlen(str);
-
- if (len <= 0) return -1;
-
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
- size_t start_buf = buf->content - buf->contentIO;
-
- if (start_buf > (unsigned int) len) {
- /*
- * We can add it in the space previously shrinked
- */
- buf->content -= len;
- memmove(&buf->content[0], str, len);
- buf->use += len;
- buf->size += len;
- UPDATE_COMPAT(buf)
- return(0);
- }
- }
- needSize = buf->use + len + 2;
- if (needSize > buf->size){
- if (buf->alloc == XML_BUFFER_ALLOC_BOUNDED) {
- /*
- * Used to provide parsing limits
- */
- if (needSize >= XML_MAX_TEXT_LENGTH) {
- xmlBufMemoryError(buf, "buffer error: text too long\n");
- return(-1);
- }
- }
- if (!xmlBufResize(buf, needSize)){
- xmlBufMemoryError(buf, "growing buffer");
- return XML_ERR_NO_MEMORY;
- }
- }
-
- memmove(&buf->content[len], &buf->content[0], buf->use);
- memmove(&buf->content[0], str, len);
- buf->use += len;
- buf->content[buf->use] = 0;
- UPDATE_COMPAT(buf)
- return 0;
-}
-
-/**
- * xmlBufCat:
- * @buf: the buffer to add to
- * @str: the #xmlChar string
- *
- * Append a zero terminated string to an XML buffer.
- *
- * Returns 0 successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufCat(xmlBufPtr buf, const xmlChar *str) {
- if ((buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
- if (str == NULL) return -1;
- return xmlBufAdd(buf, str, -1);
-}
-
-/**
- * xmlBufCCat:
- * @buf: the buffer to dump
- * @str: the C char string
- *
- * Append a zero terminated C string to an XML buffer.
- *
- * Returns 0 successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufCCat(xmlBufPtr buf, const char *str) {
- const char *cur;
-
- if ((buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
- if (str == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufCCat: str == NULL\n");
-#endif
- return -1;
- }
- for (cur = str;*cur != 0;cur++) {
- if (buf->use + 10 >= buf->size) {
- if (!xmlBufResize(buf, buf->use+10)){
- xmlBufMemoryError(buf, "growing buffer");
- return XML_ERR_NO_MEMORY;
- }
- }
- buf->content[buf->use++] = *cur;
- }
- buf->content[buf->use] = 0;
- UPDATE_COMPAT(buf)
- return 0;
-}
-
-/**
- * xmlBufWriteCHAR:
- * @buf: the XML buffer
- * @string: the string to add
- *
- * routine which manages and grows an output buffer. This one adds
- * xmlChars at the end of the buffer.
- *
- * Returns 0 if successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufWriteCHAR(xmlBufPtr buf, const xmlChar *string) {
- if ((buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
- return(-1);
- return(xmlBufCat(buf, string));
-}
-
-/**
- * xmlBufWriteChar:
- * @buf: the XML buffer output
- * @string: the string to add
- *
- * routine which manage and grows an output buffer. This one add
- * C chars at the end of the array.
- *
- * Returns 0 if successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufWriteChar(xmlBufPtr buf, const char *string) {
- if ((buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
- return(-1);
- return(xmlBufCCat(buf, string));
-}
-
-
-/**
- * xmlBufWriteQuotedString:
- * @buf: the XML buffer output
- * @string: the string to add
- *
- * routine which manage and grows an output buffer. This one writes
- * a quoted or double quoted #xmlChar string, checking first if it holds
- * quote or double-quotes internally
- *
- * Returns 0 if successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufWriteQuotedString(xmlBufPtr buf, const xmlChar *string) {
- const xmlChar *cur, *base;
- if ((buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
- return(-1);
- if (xmlStrchr(string, '\"')) {
- if (xmlStrchr(string, '\'')) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufWriteQuotedString: string contains quote and double-quotes !\n");
-#endif
- xmlBufCCat(buf, "\"");
- base = cur = string;
- while(*cur != 0){
- if(*cur == '"'){
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufAdd(buf, BAD_CAST "&quot;", 6);
- cur++;
- base = cur;
- }
- else {
- cur++;
- }
- }
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufCCat(buf, "\"");
- }
- else{
- xmlBufCCat(buf, "\'");
- xmlBufCat(buf, string);
- xmlBufCCat(buf, "\'");
- }
- } else {
- xmlBufCCat(buf, "\"");
- xmlBufCat(buf, string);
- xmlBufCCat(buf, "\"");
- }
- return(0);
-}
-
-/**
- * xmlBufFromBuffer:
- * @buffer: incoming old buffer to convert to a new one
- *
- * Helper routine to switch from the old buffer structures in use
- * in various APIs. It creates a wrapper xmlBufPtr which will be
- * used for internal processing until the xmlBufBackToBuffer() is
- * issued.
- *
- * Returns a new xmlBufPtr unless the call failed and NULL is returned
- */
-xmlBufPtr
-xmlBufFromBuffer(xmlBufferPtr buffer) {
- xmlBufPtr ret;
-
- if (buffer == NULL)
- return(NULL);
-
- ret = (xmlBufPtr) xmlMalloc(sizeof(xmlBuf));
- if (ret == NULL) {
- xmlBufMemoryError(NULL, "creating buffer");
- return(NULL);
- }
- ret->use = buffer->use;
- ret->size = buffer->size;
- ret->compat_use = buffer->use;
- ret->compat_size = buffer->size;
- ret->error = 0;
- ret->buffer = buffer;
- ret->alloc = buffer->alloc;
- ret->content = buffer->content;
- ret->contentIO = buffer->contentIO;
-
- return(ret);
-}
-
-/**
- * xmlBufBackToBuffer:
- * @buf: new buffer wrapping the old one
- *
- * Function to be called once internal processing had been done to
- * update back the buffer provided by the user. This can lead to
- * a failure in case the size accumulated in the xmlBuf is larger
- * than what an xmlBuffer can support on 64 bits (INT_MAX)
- * The xmlBufPtr @buf wrapper is deallocated by this call in any case.
- *
- * Returns the old xmlBufferPtr unless the call failed and NULL is returned
- */
-xmlBufferPtr
-xmlBufBackToBuffer(xmlBufPtr buf) {
- xmlBufferPtr ret;
-
- if ((buf == NULL) || (buf->error))
- return(NULL);
- CHECK_COMPAT(buf)
- if (buf->buffer == NULL) {
- xmlBufFree(buf);
- return(NULL);
- }
-
- ret = buf->buffer;
- /*
- * What to do in case of error in the buffer ???
- */
- if (buf->use > INT_MAX) {
- /*
- * Worse case, we really allocated and used more than the
- * maximum allowed memory for an xmlBuffer on this architecture.
- * Keep the buffer but provide a truncated size value.
- */
- xmlBufOverflowError(buf, "Used size too big for xmlBuffer");
- ret->use = INT_MAX;
- ret->size = INT_MAX;
- } else if (buf->size > INT_MAX) {
- /*
- * milder case, we allocated more than the maximum allowed memory
- * for an xmlBuffer on this architecture, but used less than the
- * limit.
- * Keep the buffer but provide a truncated size value.
- */
- xmlBufOverflowError(buf, "Allocated size too big for xmlBuffer");
- ret->size = INT_MAX;
- }
- ret->use = (int) buf->use;
- ret->size = (int) buf->size;
- ret->alloc = buf->alloc;
- ret->content = buf->content;
- ret->contentIO = buf->contentIO;
- xmlFree(buf);
- return(ret);
-}
-
-/**
- * xmlBufMergeBuffer:
- * @buf: an xmlBufPtr
- * @buffer: the buffer to consume into @buf
- *
- * The content of @buffer is appended to @buf and @buffer is freed
- *
- * Returns -1 in case of error, 0 otherwise, in any case @buffer is freed
- */
-int
-xmlBufMergeBuffer(xmlBufPtr buf, xmlBufferPtr buffer) {
- int ret = 0;
-
- if ((buf == NULL) || (buf->error)) {
- xmlBufferFree(buffer);
- return(-1);
- }
- CHECK_COMPAT(buf)
- if ((buffer != NULL) && (buffer->content != NULL) &&
- (buffer->use > 0)) {
- ret = xmlBufAdd(buf, buffer->content, buffer->use);
- }
- xmlBufferFree(buffer);
- return(ret);
-}
-
-/**
- * xmlBufResetInput:
- * @buf: an xmlBufPtr
- * @input: an xmlParserInputPtr
- *
- * Update the input to use the current set of pointers from the buffer.
- *
- * Returns -1 in case of error, 0 otherwise
- */
-int
-xmlBufResetInput(xmlBufPtr buf, xmlParserInputPtr input) {
- if ((input == NULL) || (buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- input->base = input->cur = buf->content;
- input->end = &buf->content[buf->use];
- return(0);
-}
-
-/**
- * xmlBufGetInputBase:
- * @buf: an xmlBufPtr
- * @input: an xmlParserInputPtr
- *
- * Get the base of the @input relative to the beginning of the buffer
- *
- * Returns the size_t corresponding to the displacement
- */
-size_t
-xmlBufGetInputBase(xmlBufPtr buf, xmlParserInputPtr input) {
- size_t base;
-
- if ((input == NULL) || (buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- base = input->base - buf->content;
- /*
- * We could do some pointer arythmetic checks but that's probably
- * sufficient.
- */
- if (base > buf->size) {
- xmlBufOverflowError(buf, "Input reference outside of the buffer");
- base = 0;
- }
- return(base);
-}
-
-/**
- * xmlBufSetInputBaseCur:
- * @buf: an xmlBufPtr
- * @input: an xmlParserInputPtr
- * @base: the base value relative to the beginning of the buffer
- * @cur: the cur value relative to the beginning of the buffer
- *
- * Update the input to use the base and cur relative to the buffer
- * after a possible reallocation of its content
- *
- * Returns -1 in case of error, 0 otherwise
- */
-int
-xmlBufSetInputBaseCur(xmlBufPtr buf, xmlParserInputPtr input,
- size_t base, size_t cur) {
- if ((input == NULL) || (buf == NULL) || (buf->error))
- return(-1);
- CHECK_COMPAT(buf)
- input->base = &buf->content[base];
- input->cur = input->base + cur;
- input->end = &buf->content[buf->use];
- return(0);
-}
-
-#define bottom_buf
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/buf.h b/external/libxml2_android/jni/libxml2/buf.h
deleted file mode 100644
index ebdc9781..00000000
--- a/external/libxml2_android/jni/libxml2/buf.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Summary: Internal Interfaces for memory buffers in libxml2
- * Description: this module describes most of the new xmlBuf buffer
- * entry points, those are private routines, with a
- * few exceptions exported in tree.h. This was added
- * in 2.9.0.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_BUF_H__
-#define __XML_BUF_H__
-
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-xmlBufPtr xmlBufCreate(void);
-xmlBufPtr xmlBufCreateSize(size_t size);
-xmlBufPtr xmlBufCreateStatic(void *mem, size_t size);
-
-int xmlBufSetAllocationScheme(xmlBufPtr buf,
- xmlBufferAllocationScheme scheme);
-int xmlBufGetAllocationScheme(xmlBufPtr buf);
-
-void xmlBufFree(xmlBufPtr buf);
-void xmlBufEmpty(xmlBufPtr buf);
-
-/* size_t xmlBufShrink(xmlBufPtr buf, size_t len); */
-int xmlBufGrow(xmlBufPtr buf, int len);
-int xmlBufInflate(xmlBufPtr buf, size_t len);
-int xmlBufResize(xmlBufPtr buf, size_t len);
-
-int xmlBufAdd(xmlBufPtr buf, const xmlChar *str, int len);
-int xmlBufAddHead(xmlBufPtr buf, const xmlChar *str, int len);
-int xmlBufCat(xmlBufPtr buf, const xmlChar *str);
-int xmlBufCCat(xmlBufPtr buf, const char *str);
-int xmlBufWriteCHAR(xmlBufPtr buf, const xmlChar *string);
-int xmlBufWriteChar(xmlBufPtr buf, const char *string);
-int xmlBufWriteQuotedString(xmlBufPtr buf, const xmlChar *string);
-
-size_t xmlBufAvail(const xmlBufPtr buf);
-size_t xmlBufLength(const xmlBufPtr buf);
-/* size_t xmlBufUse(const xmlBufPtr buf); */
-int xmlBufIsEmpty(const xmlBufPtr buf);
-int xmlBufAddLen(xmlBufPtr buf, size_t len);
-int xmlBufErase(xmlBufPtr buf, size_t len);
-
-/* const xmlChar * xmlBufContent(const xmlBuf *buf); */
-/* const xmlChar * xmlBufEnd(xmlBufPtr buf); */
-
-xmlChar * xmlBufDetach(xmlBufPtr buf);
-
-size_t xmlBufDump(FILE *file, xmlBufPtr buf);
-
-xmlBufPtr xmlBufFromBuffer(xmlBufferPtr buffer);
-xmlBufferPtr xmlBufBackToBuffer(xmlBufPtr buf);
-int xmlBufMergeBuffer(xmlBufPtr buf, xmlBufferPtr buffer);
-
-int xmlBufResetInput(xmlBufPtr buf, xmlParserInputPtr input);
-size_t xmlBufGetInputBase(xmlBufPtr buf, xmlParserInputPtr input);
-int xmlBufSetInputBaseCur(xmlBufPtr buf, xmlParserInputPtr input,
- size_t base, size_t cur);
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_BUF_H__ */
-
diff --git a/external/libxml2_android/jni/libxml2/c14n.c b/external/libxml2_android/jni/libxml2/c14n.c
deleted file mode 100644
index ca77f922..00000000
--- a/external/libxml2_android/jni/libxml2/c14n.c
+++ /dev/null
@@ -1,2238 +0,0 @@
-/*
- * "Canonical XML" implementation
- * http://www.w3.org/TR/xml-c14n
- *
- * "Exclusive XML Canonicalization" implementation
- * http://www.w3.org/TR/xml-exc-c14n
- *
- * See Copyright for the status of this software.
- *
- * Author: Aleksey Sanin <aleksey@aleksey.com>
- */
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_C14N_ENABLED
-#ifdef LIBXML_OUTPUT_ENABLED
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h>
-
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/uri.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/c14n.h>
-
-#include "buf.h"
-
-/************************************************************************
- * *
- * Some declaration better left private ATM *
- * *
- ************************************************************************/
-
-typedef enum {
- XMLC14N_BEFORE_DOCUMENT_ELEMENT = 0,
- XMLC14N_INSIDE_DOCUMENT_ELEMENT = 1,
- XMLC14N_AFTER_DOCUMENT_ELEMENT = 2
-} xmlC14NPosition;
-
-typedef struct _xmlC14NVisibleNsStack {
- int nsCurEnd; /* number of nodes in the set */
- int nsPrevStart; /* the begginning of the stack for previous visible node */
- int nsPrevEnd; /* the end of the stack for previous visible node */
- int nsMax; /* size of the array as allocated */
- xmlNsPtr *nsTab; /* array of ns in no particular order */
- xmlNodePtr *nodeTab; /* array of nodes in no particular order */
-} xmlC14NVisibleNsStack, *xmlC14NVisibleNsStackPtr;
-
-typedef struct _xmlC14NCtx {
- /* input parameters */
- xmlDocPtr doc;
- xmlC14NIsVisibleCallback is_visible_callback;
- void* user_data;
- int with_comments;
- xmlOutputBufferPtr buf;
-
- /* position in the XML document */
- xmlC14NPosition pos;
- int parent_is_doc;
- xmlC14NVisibleNsStackPtr ns_rendered;
-
- /* C14N mode */
- xmlC14NMode mode;
-
- /* exclusive canonicalization */
- xmlChar **inclusive_ns_prefixes;
-
- /* error number */
- int error;
-} xmlC14NCtx, *xmlC14NCtxPtr;
-
-static xmlC14NVisibleNsStackPtr xmlC14NVisibleNsStackCreate (void);
-static void xmlC14NVisibleNsStackDestroy (xmlC14NVisibleNsStackPtr cur);
-static void xmlC14NVisibleNsStackAdd (xmlC14NVisibleNsStackPtr cur,
- xmlNsPtr ns,
- xmlNodePtr node);
-static void xmlC14NVisibleNsStackSave (xmlC14NVisibleNsStackPtr cur,
- xmlC14NVisibleNsStackPtr state);
-static void xmlC14NVisibleNsStackRestore (xmlC14NVisibleNsStackPtr cur,
- xmlC14NVisibleNsStackPtr state);
-static void xmlC14NVisibleNsStackShift (xmlC14NVisibleNsStackPtr cur);
-static int xmlC14NVisibleNsStackFind (xmlC14NVisibleNsStackPtr cur,
- xmlNsPtr ns);
-static int xmlExcC14NVisibleNsStackFind (xmlC14NVisibleNsStackPtr cur,
- xmlNsPtr ns,
- xmlC14NCtxPtr ctx);
-
-static int xmlC14NIsNodeInNodeset (xmlNodeSetPtr nodes,
- xmlNodePtr node,
- xmlNodePtr parent);
-
-
-
-static int xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur);
-static int xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur);
-typedef enum {
- XMLC14N_NORMALIZE_ATTR = 0,
- XMLC14N_NORMALIZE_COMMENT = 1,
- XMLC14N_NORMALIZE_PI = 2,
- XMLC14N_NORMALIZE_TEXT = 3
-} xmlC14NNormalizationMode;
-
-static xmlChar *xmlC11NNormalizeString(const xmlChar * input,
- xmlC14NNormalizationMode mode);
-
-#define xmlC11NNormalizeAttr( a ) \
- xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_ATTR)
-#define xmlC11NNormalizeComment( a ) \
- xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_COMMENT)
-#define xmlC11NNormalizePI( a ) \
- xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_PI)
-#define xmlC11NNormalizeText( a ) \
- xmlC11NNormalizeString((a), XMLC14N_NORMALIZE_TEXT)
-
-#define xmlC14NIsVisible( ctx, node, parent ) \
- (((ctx)->is_visible_callback != NULL) ? \
- (ctx)->is_visible_callback((ctx)->user_data, \
- (xmlNodePtr)(node), (xmlNodePtr)(parent)) : 1)
-
-#define xmlC14NIsExclusive( ctx ) \
- ( (ctx)->mode == XML_C14N_EXCLUSIVE_1_0 )
-
-/************************************************************************
- * *
- * Some factorized error routines *
- * *
- ************************************************************************/
-
-/**
- * xmlC14NErrMemory:
- * @extra: extra informations
- *
- * Handle a redefinition of memory error
- */
-static void
-xmlC14NErrMemory(const char *extra)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
- XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlC14NErrParam:
- * @extra: extra informations
- *
- * Handle a redefinition of param error
- */
-static void
-xmlC14NErrParam(const char *extra)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
- XML_ERR_INTERNAL_ERROR, XML_ERR_ERROR, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Invalid parameter : %s\n", extra);
-}
-
-/**
- * xmlC14NErrInternal:
- * @extra: extra informations
- *
- * Handle a redefinition of internal error
- */
-static void
-xmlC14NErrInternal(const char *extra)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
- XML_ERR_INTERNAL_ERROR, XML_ERR_ERROR, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Internal error : %s\n", extra);
-}
-
-/**
- * xmlC14NErrInvalidNode:
- * @extra: extra informations
- *
- * Handle a redefinition of invalid node error
- */
-static void
-xmlC14NErrInvalidNode(const char *node_type, const char *extra)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
- XML_C14N_INVALID_NODE, XML_ERR_ERROR, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Node %s is invalid here : %s\n", node_type, extra);
-}
-
-/**
- * xmlC14NErrUnknownNode:
- * @extra: extra informations
- *
- * Handle a redefinition of unknown node error
- */
-static void
-xmlC14NErrUnknownNode(int node_type, const char *extra)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
- XML_C14N_UNKNOW_NODE, XML_ERR_ERROR, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Unknown node type %d found : %s\n", node_type, extra);
-}
-
-/**
- * xmlC14NErrRelativeNamespace:
- * @extra: extra informations
- *
- * Handle a redefinition of relative namespace error
- */
-static void
-xmlC14NErrRelativeNamespace(const char *ns_uri)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_C14N,
- XML_C14N_RELATIVE_NAMESPACE, XML_ERR_ERROR, NULL, 0, NULL,
- NULL, NULL, 0, 0,
- "Relative namespace UR is invalid here : %s\n", ns_uri);
-}
-
-
-
-/**
- * xmlC14NErr:
- * @ctxt: a C14N evaluation context
- * @node: the context node
- * @error: the erorr code
- * @msg: the message
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlC14NErr(xmlC14NCtxPtr ctxt, xmlNodePtr node, int error,
- const char * msg)
-{
- if (ctxt != NULL)
- ctxt->error = error;
- __xmlRaiseError(NULL, NULL, NULL,
- ctxt, node, XML_FROM_C14N, error,
- XML_ERR_ERROR, NULL, 0,
- NULL, NULL, NULL, 0, 0, "%s", msg);
-}
-
-/************************************************************************
- * *
- * The implementation internals *
- * *
- ************************************************************************/
-#define XML_NAMESPACES_DEFAULT 16
-
-static int
-xmlC14NIsNodeInNodeset(xmlNodeSetPtr nodes, xmlNodePtr node, xmlNodePtr parent) {
- if((nodes != NULL) && (node != NULL)) {
- if(node->type != XML_NAMESPACE_DECL) {
- return(xmlXPathNodeSetContains(nodes, node));
- } else {
- xmlNs ns;
-
- memcpy(&ns, node, sizeof(ns));
-
- /* this is a libxml hack! check xpath.c for details */
- if((parent != NULL) && (parent->type == XML_ATTRIBUTE_NODE)) {
- ns.next = (xmlNsPtr)parent->parent;
- } else {
- ns.next = (xmlNsPtr)parent;
- }
-
- /*
- * If the input is an XPath node-set, then the node-set must explicitly
- * contain every node to be rendered to the canonical form.
- */
- return(xmlXPathNodeSetContains(nodes, (xmlNodePtr)&ns));
- }
- }
- return(1);
-}
-
-static xmlC14NVisibleNsStackPtr
-xmlC14NVisibleNsStackCreate(void) {
- xmlC14NVisibleNsStackPtr ret;
-
- ret = (xmlC14NVisibleNsStackPtr) xmlMalloc(sizeof(xmlC14NVisibleNsStack));
- if (ret == NULL) {
- xmlC14NErrMemory("creating namespaces stack");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlC14NVisibleNsStack));
- return(ret);
-}
-
-static void
-xmlC14NVisibleNsStackDestroy(xmlC14NVisibleNsStackPtr cur) {
- if(cur == NULL) {
- xmlC14NErrParam("destroying namespaces stack");
- return;
- }
- if(cur->nsTab != NULL) {
- memset(cur->nsTab, 0, cur->nsMax * sizeof(xmlNsPtr));
- xmlFree(cur->nsTab);
- }
- if(cur->nodeTab != NULL) {
- memset(cur->nodeTab, 0, cur->nsMax * sizeof(xmlNodePtr));
- xmlFree(cur->nodeTab);
- }
- memset(cur, 0, sizeof(xmlC14NVisibleNsStack));
- xmlFree(cur);
-
-}
-
-static void
-xmlC14NVisibleNsStackAdd(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlNodePtr node) {
- if((cur == NULL) ||
- ((cur->nsTab == NULL) && (cur->nodeTab != NULL)) ||
- ((cur->nsTab != NULL) && (cur->nodeTab == NULL))) {
- xmlC14NErrParam("adding namespace to stack");
- return;
- }
-
- if ((cur->nsTab == NULL) && (cur->nodeTab == NULL)) {
- cur->nsTab = (xmlNsPtr*) xmlMalloc(XML_NAMESPACES_DEFAULT * sizeof(xmlNsPtr));
- cur->nodeTab = (xmlNodePtr*) xmlMalloc(XML_NAMESPACES_DEFAULT * sizeof(xmlNodePtr));
- if ((cur->nsTab == NULL) || (cur->nodeTab == NULL)) {
- xmlC14NErrMemory("adding node to stack");
- return;
- }
- memset(cur->nsTab, 0 , XML_NAMESPACES_DEFAULT * sizeof(xmlNsPtr));
- memset(cur->nodeTab, 0 , XML_NAMESPACES_DEFAULT * sizeof(xmlNodePtr));
- cur->nsMax = XML_NAMESPACES_DEFAULT;
- } else if(cur->nsMax == cur->nsCurEnd) {
- void *tmp;
- int tmpSize;
-
- tmpSize = 2 * cur->nsMax;
- tmp = xmlRealloc(cur->nsTab, tmpSize * sizeof(xmlNsPtr));
- if (tmp == NULL) {
- xmlC14NErrMemory("adding node to stack");
- return;
- }
- cur->nsTab = (xmlNsPtr*)tmp;
-
- tmp = xmlRealloc(cur->nodeTab, tmpSize * sizeof(xmlNodePtr));
- if (tmp == NULL) {
- xmlC14NErrMemory("adding node to stack");
- return;
- }
- cur->nodeTab = (xmlNodePtr*)tmp;
-
- cur->nsMax = tmpSize;
- }
- cur->nsTab[cur->nsCurEnd] = ns;
- cur->nodeTab[cur->nsCurEnd] = node;
-
- ++cur->nsCurEnd;
-}
-
-static void
-xmlC14NVisibleNsStackSave(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr state) {
- if((cur == NULL) || (state == NULL)) {
- xmlC14NErrParam("saving namespaces stack");
- return;
- }
-
- state->nsCurEnd = cur->nsCurEnd;
- state->nsPrevStart = cur->nsPrevStart;
- state->nsPrevEnd = cur->nsPrevEnd;
-}
-
-static void
-xmlC14NVisibleNsStackRestore(xmlC14NVisibleNsStackPtr cur, xmlC14NVisibleNsStackPtr state) {
- if((cur == NULL) || (state == NULL)) {
- xmlC14NErrParam("restoring namespaces stack");
- return;
- }
- cur->nsCurEnd = state->nsCurEnd;
- cur->nsPrevStart = state->nsPrevStart;
- cur->nsPrevEnd = state->nsPrevEnd;
-}
-
-static void
-xmlC14NVisibleNsStackShift(xmlC14NVisibleNsStackPtr cur) {
- if(cur == NULL) {
- xmlC14NErrParam("shifting namespaces stack");
- return;
- }
- cur->nsPrevStart = cur->nsPrevEnd;
- cur->nsPrevEnd = cur->nsCurEnd;
-}
-
-static int
-xmlC14NStrEqual(const xmlChar *str1, const xmlChar *str2) {
- if (str1 == str2) return(1);
- if (str1 == NULL) return((*str2) == '\0');
- if (str2 == NULL) return((*str1) == '\0');
- do {
- if (*str1++ != *str2) return(0);
- } while (*str2++);
- return(1);
-}
-
-/**
- * xmlC14NVisibleNsStackFind:
- * @ctx: the C14N context
- * @ns: the namespace to check
- *
- * Checks whether the given namespace was already rendered or not
- *
- * Returns 1 if we already wrote this namespace or 0 otherwise
- */
-static int
-xmlC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns)
-{
- int i;
- const xmlChar *prefix;
- const xmlChar *href;
- int has_empty_ns;
-
- if(cur == NULL) {
- xmlC14NErrParam("searching namespaces stack (c14n)");
- return (0);
- }
-
- /*
- * if the default namespace xmlns="" is not defined yet then
- * we do not want to print it out
- */
- prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix;
- href = ((ns == NULL) || (ns->href == NULL)) ? BAD_CAST "" : ns->href;
- has_empty_ns = (xmlC14NStrEqual(prefix, NULL) && xmlC14NStrEqual(href, NULL));
-
- if (cur->nsTab != NULL) {
- int start = (has_empty_ns) ? 0 : cur->nsPrevStart;
- for (i = cur->nsCurEnd - 1; i >= start; --i) {
- xmlNsPtr ns1 = cur->nsTab[i];
-
- if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) {
- return(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL));
- }
- }
- }
- return(has_empty_ns);
-}
-
-static int
-xmlExcC14NVisibleNsStackFind(xmlC14NVisibleNsStackPtr cur, xmlNsPtr ns, xmlC14NCtxPtr ctx) {
- int i;
- const xmlChar *prefix;
- const xmlChar *href;
- int has_empty_ns;
-
- if(cur == NULL) {
- xmlC14NErrParam("searching namespaces stack (exc c14n)");
- return (0);
- }
-
- /*
- * if the default namespace xmlns="" is not defined yet then
- * we do not want to print it out
- */
- prefix = ((ns == NULL) || (ns->prefix == NULL)) ? BAD_CAST "" : ns->prefix;
- href = ((ns == NULL) || (ns->href == NULL)) ? BAD_CAST "" : ns->href;
- has_empty_ns = (xmlC14NStrEqual(prefix, NULL) && xmlC14NStrEqual(href, NULL));
-
- if (cur->nsTab != NULL) {
- int start = 0;
- for (i = cur->nsCurEnd - 1; i >= start; --i) {
- xmlNsPtr ns1 = cur->nsTab[i];
-
- if(xmlC14NStrEqual(prefix, (ns1 != NULL) ? ns1->prefix : NULL)) {
- if(xmlC14NStrEqual(href, (ns1 != NULL) ? ns1->href : NULL)) {
- return(xmlC14NIsVisible(ctx, ns1, cur->nodeTab[i]));
- } else {
- return(0);
- }
- }
- }
- }
- return(has_empty_ns);
-}
-
-
-
-
-/**
- * xmlC14NIsXmlNs:
- * @ns: the namespace to check
- *
- * Checks whether the given namespace is a default "xml:" namespace
- * with href="http://www.w3.org/XML/1998/namespace"
- *
- * Returns 1 if the node is default or 0 otherwise
- */
-
-/* todo: make it a define? */
-static int
-xmlC14NIsXmlNs(xmlNsPtr ns)
-{
- return ((ns != NULL) &&
- (xmlStrEqual(ns->prefix, BAD_CAST "xml")) &&
- (xmlStrEqual(ns->href, XML_XML_NAMESPACE)));
-}
-
-
-/**
- * xmlC14NNsCompare:
- * @ns1: the pointer to first namespace
- * @ns2: the pointer to second namespace
- *
- * Compares the namespaces by names (prefixes).
- *
- * Returns -1 if ns1 < ns2, 0 if ns1 == ns2 or 1 if ns1 > ns2.
- */
-static int
-xmlC14NNsCompare(xmlNsPtr ns1, xmlNsPtr ns2)
-{
- if (ns1 == ns2)
- return (0);
- if (ns1 == NULL)
- return (-1);
- if (ns2 == NULL)
- return (1);
-
- return (xmlStrcmp(ns1->prefix, ns2->prefix));
-}
-
-
-/**
- * xmlC14NPrintNamespaces:
- * @ns: the pointer to namespace
- * @ctx: the C14N context
- *
- * Prints the given namespace to the output buffer from C14N context.
- *
- * Returns 1 on success or 0 on fail.
- */
-static int
-xmlC14NPrintNamespaces(const xmlNsPtr ns, xmlC14NCtxPtr ctx)
-{
-
- if ((ns == NULL) || (ctx == NULL)) {
- xmlC14NErrParam("writing namespaces");
- return 0;
- }
-
- if (ns->prefix != NULL) {
- xmlOutputBufferWriteString(ctx->buf, " xmlns:");
- xmlOutputBufferWriteString(ctx->buf, (const char *) ns->prefix);
- xmlOutputBufferWriteString(ctx->buf, "=");
- } else {
- xmlOutputBufferWriteString(ctx->buf, " xmlns=");
- }
- if(ns->href != NULL) {
- xmlBufWriteQuotedString(ctx->buf->buffer, ns->href);
- } else {
- xmlOutputBufferWriteString(ctx->buf, "\"\"");
- }
- return (1);
-}
-
-/**
- * xmlC14NProcessNamespacesAxis:
- * @ctx: the C14N context
- * @node: the current node
- *
- * Prints out canonical namespace axis of the current node to the
- * buffer from C14N context as follows
- *
- * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
- *
- * Namespace Axis
- * Consider a list L containing only namespace nodes in the
- * axis and in the node-set in lexicographic order (ascending). To begin
- * processing L, if the first node is not the default namespace node (a node
- * with no namespace URI and no local name), then generate a space followed
- * by xmlns="" if and only if the following conditions are met:
- * - the element E that owns the axis is in the node-set
- * - The nearest ancestor element of E in the node-set has a default
- * namespace node in the node-set (default namespace nodes always
- * have non-empty values in XPath)
- * The latter condition eliminates unnecessary occurrences of xmlns="" in
- * the canonical form since an element only receives an xmlns="" if its
- * default namespace is empty and if it has an immediate parent in the
- * canonical form that has a non-empty default namespace. To finish
- * processing L, simply process every namespace node in L, except omit
- * namespace node with local name xml, which defines the xml prefix,
- * if its string value is http://www.w3.org/XML/1998/namespace.
- *
- * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n)
- * Canonical XML applied to a document subset requires the search of the
- * ancestor nodes of each orphan element node for attributes in the xml
- * namespace, such as xml:lang and xml:space. These are copied into the
- * element node except if a declaration of the same attribute is already
- * in the attribute axis of the element (whether or not it is included in
- * the document subset). This search and copying are omitted from the
- * Exclusive XML Canonicalization method.
- *
- * Returns 0 on success or -1 on fail.
- */
-static int
-xmlC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
-{
- xmlNodePtr n;
- xmlNsPtr ns, tmp;
- xmlListPtr list;
- int already_rendered;
- int has_empty_ns = 0;
-
- if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
- xmlC14NErrParam("processing namespaces axis (c14n)");
- return (-1);
- }
-
- /*
- * Create a sorted list to store element namespaces
- */
- list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NNsCompare);
- if (list == NULL) {
- xmlC14NErrInternal("creating namespaces list (c14n)");
- return (-1);
- }
-
- /* check all namespaces */
- for(n = cur; n != NULL; n = n->parent) {
- for(ns = n->nsDef; ns != NULL; ns = ns->next) {
- tmp = xmlSearchNs(cur->doc, cur, ns->prefix);
-
- if((tmp == ns) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) {
- already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns);
- if(visible) {
- xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
- }
- if(!already_rendered) {
- xmlListInsert(list, ns);
- }
- if(xmlStrlen(ns->prefix) == 0) {
- has_empty_ns = 1;
- }
- }
- }
- }
-
- /**
- * if the first node is not the default namespace node (a node with no
- * namespace URI and no local name), then generate a space followed by
- * xmlns="" if and only if the following conditions are met:
- * - the element E that owns the axis is in the node-set
- * - the nearest ancestor element of E in the node-set has a default
- * namespace node in the node-set (default namespace nodes always
- * have non-empty values in XPath)
- */
- if(visible && !has_empty_ns) {
- static xmlNs ns_default;
-
- memset(&ns_default, 0, sizeof(ns_default));
- if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) {
- xmlC14NPrintNamespaces(&ns_default, ctx);
- }
- }
-
-
- /*
- * print out all elements from list
- */
- xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx);
-
- /*
- * Cleanup
- */
- xmlListDelete(list);
- return (0);
-}
-
-
-/**
- * xmlExcC14NProcessNamespacesAxis:
- * @ctx: the C14N context
- * @node: the current node
- *
- * Prints out exclusive canonical namespace axis of the current node to the
- * buffer from C14N context as follows
- *
- * Exclusive XML Canonicalization
- * http://www.w3.org/TR/xml-exc-c14n
- *
- * If the element node is in the XPath subset then output the node in
- * accordance with Canonical XML except for namespace nodes which are
- * rendered as follows:
- *
- * 1. Render each namespace node iff:
- * * it is visibly utilized by the immediate parent element or one of
- * its attributes, or is present in InclusiveNamespaces PrefixList, and
- * * its prefix and value do not appear in ns_rendered. ns_rendered is
- * obtained by popping the state stack in order to obtain a list of
- * prefixes and their values which have already been rendered by
- * an output ancestor of the namespace node's parent element.
- * 2. Append the rendered namespace node to the list ns_rendered of namespace
- * nodes rendered by output ancestors. Push ns_rendered on state stack and
- * recurse.
- * 3. After the recursion returns, pop thestate stack.
- *
- *
- * Returns 0 on success or -1 on fail.
- */
-static int
-xmlExcC14NProcessNamespacesAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
-{
- xmlNsPtr ns;
- xmlListPtr list;
- xmlAttrPtr attr;
- int already_rendered;
- int has_empty_ns = 0;
- int has_visibly_utilized_empty_ns = 0;
- int has_empty_ns_in_inclusive_list = 0;
-
- if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
- xmlC14NErrParam("processing namespaces axis (exc c14n)");
- return (-1);
- }
-
- if(!xmlC14NIsExclusive(ctx)) {
- xmlC14NErrParam("processing namespaces axis (exc c14n)");
- return (-1);
-
- }
-
- /*
- * Create a sorted list to store element namespaces
- */
- list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NNsCompare);
- if (list == NULL) {
- xmlC14NErrInternal("creating namespaces list (exc c14n)");
- return (-1);
- }
-
- /*
- * process inclusive namespaces:
- * All namespace nodes appearing on inclusive ns list are
- * handled as provided in Canonical XML
- */
- if(ctx->inclusive_ns_prefixes != NULL) {
- xmlChar *prefix;
- int i;
-
- for (i = 0; ctx->inclusive_ns_prefixes[i] != NULL; ++i) {
- prefix = ctx->inclusive_ns_prefixes[i];
- /*
- * Special values for namespace with empty prefix
- */
- if (xmlStrEqual(prefix, BAD_CAST "#default")
- || xmlStrEqual(prefix, BAD_CAST "")) {
- prefix = NULL;
- has_empty_ns_in_inclusive_list = 1;
- }
-
- ns = xmlSearchNs(cur->doc, cur, prefix);
- if((ns != NULL) && !xmlC14NIsXmlNs(ns) && xmlC14NIsVisible(ctx, ns, cur)) {
- already_rendered = xmlC14NVisibleNsStackFind(ctx->ns_rendered, ns);
- if(visible) {
- xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
- }
- if(!already_rendered) {
- xmlListInsert(list, ns);
- }
- if(xmlStrlen(ns->prefix) == 0) {
- has_empty_ns = 1;
- }
- }
- }
- }
-
- /* add node namespace */
- if(cur->ns != NULL) {
- ns = cur->ns;
- } else {
- ns = xmlSearchNs(cur->doc, cur, NULL);
- has_visibly_utilized_empty_ns = 1;
- }
- if((ns != NULL) && !xmlC14NIsXmlNs(ns)) {
- if(visible && xmlC14NIsVisible(ctx, ns, cur)) {
- if(!xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, ns, ctx)) {
- xmlListInsert(list, ns);
- }
- }
- if(visible) {
- xmlC14NVisibleNsStackAdd(ctx->ns_rendered, ns, cur);
- }
- if(xmlStrlen(ns->prefix) == 0) {
- has_empty_ns = 1;
- }
- }
-
-
- /* add attributes */
- for(attr = cur->properties; attr != NULL; attr = attr->next) {
- /*
- * we need to check that attribute is visible and has non
- * default namespace (XML Namespaces: "default namespaces
- * do not apply directly to attributes")
- */
- if((attr->ns != NULL) && !xmlC14NIsXmlNs(attr->ns) && xmlC14NIsVisible(ctx, attr, cur)) {
- already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, attr->ns, ctx);
- xmlC14NVisibleNsStackAdd(ctx->ns_rendered, attr->ns, cur);
- if(!already_rendered && visible) {
- xmlListInsert(list, attr->ns);
- }
- if(xmlStrlen(attr->ns->prefix) == 0) {
- has_empty_ns = 1;
- }
- } else if((attr->ns != NULL) && (xmlStrlen(attr->ns->prefix) == 0) && (xmlStrlen(attr->ns->href) == 0)) {
- has_visibly_utilized_empty_ns = 1;
- }
- }
-
- /*
- * Process xmlns=""
- */
- if(visible && has_visibly_utilized_empty_ns &&
- !has_empty_ns && !has_empty_ns_in_inclusive_list) {
- static xmlNs ns_default;
-
- memset(&ns_default, 0, sizeof(ns_default));
-
- already_rendered = xmlExcC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default, ctx);
- if(!already_rendered) {
- xmlC14NPrintNamespaces(&ns_default, ctx);
- }
- } else if(visible && !has_empty_ns && has_empty_ns_in_inclusive_list) {
- static xmlNs ns_default;
-
- memset(&ns_default, 0, sizeof(ns_default));
- if(!xmlC14NVisibleNsStackFind(ctx->ns_rendered, &ns_default)) {
- xmlC14NPrintNamespaces(&ns_default, ctx);
- }
- }
-
-
-
- /*
- * print out all elements from list
- */
- xmlListWalk(list, (xmlListWalker) xmlC14NPrintNamespaces, (const void *) ctx);
-
- /*
- * Cleanup
- */
- xmlListDelete(list);
- return (0);
-}
-
-
-/**
- * xmlC14NIsXmlAttr:
- * @attr: the attr to check
- *
- * Checks whether the given attribute is a default "xml:" namespace
- * with href="http://www.w3.org/XML/1998/namespace"
- *
- * Returns 1 if the node is default or 0 otherwise
- */
-
-/* todo: make it a define? */
-static int
-xmlC14NIsXmlAttr(xmlAttrPtr attr)
-{
- return ((attr->ns != NULL) &&
- (xmlC14NIsXmlNs(attr->ns) != 0));
-}
-
-
-/**
- * xmlC14NAttrsCompare:
- * @attr1: the pointer tls o first attr
- * @attr2: the pointer to second attr
- *
- * Prints the given attribute to the output buffer from C14N context.
- *
- * Returns -1 if attr1 < attr2, 0 if attr1 == attr2 or 1 if attr1 > attr2.
- */
-static int
-xmlC14NAttrsCompare(xmlAttrPtr attr1, xmlAttrPtr attr2)
-{
- int ret = 0;
-
- /*
- * Simple cases
- */
- if (attr1 == attr2)
- return (0);
- if (attr1 == NULL)
- return (-1);
- if (attr2 == NULL)
- return (1);
- if (attr1->ns == attr2->ns) {
- return (xmlStrcmp(attr1->name, attr2->name));
- }
-
- /*
- * Attributes in the default namespace are first
- * because the default namespace is not applied to
- * unqualified attributes
- */
- if (attr1->ns == NULL)
- return (-1);
- if (attr2->ns == NULL)
- return (1);
- if (attr1->ns->prefix == NULL)
- return (-1);
- if (attr2->ns->prefix == NULL)
- return (1);
-
- ret = xmlStrcmp(attr1->ns->href, attr2->ns->href);
- if (ret == 0) {
- ret = xmlStrcmp(attr1->name, attr2->name);
- }
- return (ret);
-}
-
-
-/**
- * xmlC14NPrintAttrs:
- * @attr: the pointer to attr
- * @ctx: the C14N context
- *
- * Prints out canonical attribute urrent node to the
- * buffer from C14N context as follows
- *
- * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
- *
- * Returns 1 on success or 0 on fail.
- */
-static int
-xmlC14NPrintAttrs(const xmlAttrPtr attr, xmlC14NCtxPtr ctx)
-{
- xmlChar *value;
- xmlChar *buffer;
-
- if ((attr == NULL) || (ctx == NULL)) {
- xmlC14NErrParam("writing attributes");
- return (0);
- }
-
- xmlOutputBufferWriteString(ctx->buf, " ");
- if (attr->ns != NULL && xmlStrlen(attr->ns->prefix) > 0) {
- xmlOutputBufferWriteString(ctx->buf,
- (const char *) attr->ns->prefix);
- xmlOutputBufferWriteString(ctx->buf, ":");
- }
- xmlOutputBufferWriteString(ctx->buf, (const char *) attr->name);
- xmlOutputBufferWriteString(ctx->buf, "=\"");
-
- value = xmlNodeListGetString(ctx->doc, attr->children, 1);
- /* todo: should we log an error if value==NULL ? */
- if (value != NULL) {
- buffer = xmlC11NNormalizeAttr(value);
- xmlFree(value);
- if (buffer != NULL) {
- xmlOutputBufferWriteString(ctx->buf, (const char *) buffer);
- xmlFree(buffer);
- } else {
- xmlC14NErrInternal("normalizing attributes axis");
- return (0);
- }
- }
- xmlOutputBufferWriteString(ctx->buf, "\"");
- return (1);
-}
-
-/**
- * xmlC14NFindHiddenParentAttr:
- *
- * Finds an attribute in a hidden parent node.
- *
- * Returns a pointer to the attribute node (if found) or NULL otherwise.
- */
-static xmlAttrPtr
-xmlC14NFindHiddenParentAttr(xmlC14NCtxPtr ctx, xmlNodePtr cur, const xmlChar * name, const xmlChar * ns)
-{
- xmlAttrPtr res;
- while((cur != NULL) && (!xmlC14NIsVisible(ctx, cur, cur->parent))) {
- res = xmlHasNsProp(cur, name, ns);
- if(res != NULL) {
- return res;
- }
-
- cur = cur->parent;
- }
-
- return NULL;
-}
-
-/**
- * xmlC14NFixupBaseAttr:
- *
- * Fixes up the xml:base attribute
- *
- * Returns the newly created attribute or NULL
- */
-static xmlAttrPtr
-xmlC14NFixupBaseAttr(xmlC14NCtxPtr ctx, xmlAttrPtr xml_base_attr)
-{
- xmlChar * res = NULL;
- xmlNodePtr cur;
- xmlAttrPtr attr;
- xmlChar * tmp_str;
- xmlChar * tmp_str2;
- int tmp_str_len;
-
- if ((ctx == NULL) || (xml_base_attr == NULL) || (xml_base_attr->parent == NULL)) {
- xmlC14NErrParam("processing xml:base attribute");
- return (NULL);
- }
-
- /* start from current value */
- res = xmlNodeListGetString(ctx->doc, xml_base_attr->children, 1);
- if(res == NULL) {
- xmlC14NErrInternal("processing xml:base attribute - can't get attr value");
- return (NULL);
- }
-
- /* go up the stack until we find a node that we rendered already */
- cur = xml_base_attr->parent->parent;
- while((cur != NULL) && (!xmlC14NIsVisible(ctx, cur, cur->parent))) {
- attr = xmlHasNsProp(cur, BAD_CAST "base", XML_XML_NAMESPACE);
- if(attr != NULL) {
- /* get attr value */
- tmp_str = xmlNodeListGetString(ctx->doc, attr->children, 1);
- if(tmp_str == NULL) {
- xmlFree(res);
-
- xmlC14NErrInternal("processing xml:base attribute - can't get attr value");
- return (NULL);
- }
-
- /* we need to add '/' if our current base uri ends with '..' or '.'
- to ensure that we are forced to go "up" all the time */
- tmp_str_len = xmlStrlen(tmp_str);
- if(tmp_str_len > 1 && tmp_str[tmp_str_len - 2] == '.') {
- tmp_str2 = xmlStrcat(tmp_str, BAD_CAST "/");
- if(tmp_str2 == NULL) {
- xmlFree(tmp_str);
- xmlFree(res);
-
- xmlC14NErrInternal("processing xml:base attribute - can't modify uri");
- return (NULL);
- }
-
- tmp_str = tmp_str2;
- }
-
- /* build uri */
- tmp_str2 = xmlBuildURI(res, tmp_str);
- if(tmp_str2 == NULL) {
- xmlFree(tmp_str);
- xmlFree(res);
-
- xmlC14NErrInternal("processing xml:base attribute - can't construct uri");
- return (NULL);
- }
-
- /* cleanup and set the new res */
- xmlFree(tmp_str);
- xmlFree(res);
- res = tmp_str2;
- }
-
- /* next */
- cur = cur->parent;
- }
-
- /* check if result uri is empty or not */
- if((res == NULL) || xmlStrEqual(res, BAD_CAST "")) {
- xmlFree(res);
- return (NULL);
- }
-
- /* create and return the new attribute node */
- attr = xmlNewNsProp(NULL, xml_base_attr->ns, BAD_CAST "base", res);
- if(attr == NULL) {
- xmlFree(res);
-
- xmlC14NErrInternal("processing xml:base attribute - can't construct attribute");
- return (NULL);
- }
-
- /* done */
- xmlFree(res);
- return (attr);
-}
-
-/**
- * xmlC14NProcessAttrsAxis:
- * @ctx: the C14N context
- * @cur: the current node
- * @parent_visible: the visibility of parent node
- * @all_parents_visible: the visibility of all parent nodes
- *
- * Prints out canonical attribute axis of the current node to the
- * buffer from C14N context as follows
- *
- * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
- *
- * Attribute Axis
- * In lexicographic order (ascending), process each node that
- * is in the element's attribute axis and in the node-set.
- *
- * The processing of an element node E MUST be modified slightly
- * when an XPath node-set is given as input and the element's
- * parent is omitted from the node-set.
- *
- *
- * Exclusive XML Canonicalization v 1.0 (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Canonical XML applied to a document subset requires the search of the
- * ancestor nodes of each orphan element node for attributes in the xml
- * namespace, such as xml:lang and xml:space. These are copied into the
- * element node except if a declaration of the same attribute is already
- * in the attribute axis of the element (whether or not it is included in
- * the document subset). This search and copying are omitted from the
- * Exclusive XML Canonicalization method.
- *
- * Returns 0 on success or -1 on fail.
- */
-static int
-xmlC14NProcessAttrsAxis(xmlC14NCtxPtr ctx, xmlNodePtr cur, int parent_visible)
-{
- xmlAttrPtr attr;
- xmlListPtr list;
- xmlAttrPtr attrs_to_delete = NULL;
-
- /* special processing for 1.1 spec */
- xmlAttrPtr xml_base_attr = NULL;
- xmlAttrPtr xml_lang_attr = NULL;
- xmlAttrPtr xml_space_attr = NULL;
-
- if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
- xmlC14NErrParam("processing attributes axis");
- return (-1);
- }
-
- /*
- * Create a sorted list to store element attributes
- */
- list = xmlListCreate(NULL, (xmlListDataCompare) xmlC14NAttrsCompare);
- if (list == NULL) {
- xmlC14NErrInternal("creating attributes list");
- return (-1);
- }
-
- switch(ctx->mode) {
- case XML_C14N_1_0:
- /* The processing of an element node E MUST be modified slightly when an XPath node-set is
- * given as input and the element's parent is omitted from the node-set. The method for processing
- * the attribute axis of an element E in the node-set is enhanced. All element nodes along E's
- * ancestor axis are examined for nearest occurrences of attributes in the xml namespace, such
- * as xml:lang and xml:space (whether or not they are in the node-set). From this list of attributes,
- * remove any that are in E's attribute axis (whether or not they are in the node-set). Then,
- * lexicographically merge this attribute list with the nodes of E's attribute axis that are in
- * the node-set. The result of visiting the attribute axis is computed by processing the attribute
- * nodes in this merged attribute list.
- */
-
- /*
- * Add all visible attributes from current node.
- */
- attr = cur->properties;
- while (attr != NULL) {
- /* check that attribute is visible */
- if (xmlC14NIsVisible(ctx, attr, cur)) {
- xmlListInsert(list, attr);
- }
- attr = attr->next;
- }
-
- /*
- * Handle xml attributes
- */
- if (parent_visible && (cur->parent != NULL) &&
- (!xmlC14NIsVisible(ctx, cur->parent, cur->parent->parent)))
- {
- xmlNodePtr tmp;
-
- /*
- * If XPath node-set is not specified then the parent is always
- * visible!
- */
- tmp = cur->parent;
- while (tmp != NULL) {
- attr = tmp->properties;
- while (attr != NULL) {
- if (xmlC14NIsXmlAttr(attr) != 0) {
- if (xmlListSearch(list, attr) == NULL) {
- xmlListInsert(list, attr);
- }
- }
- attr = attr->next;
- }
- tmp = tmp->parent;
- }
- }
-
- /* done */
- break;
- case XML_C14N_EXCLUSIVE_1_0:
- /* attributes in the XML namespace, such as xml:lang and xml:space
- * are not imported into orphan nodes of the document subset
- */
-
- /*
- * Add all visible attributes from current node.
- */
- attr = cur->properties;
- while (attr != NULL) {
- /* check that attribute is visible */
- if (xmlC14NIsVisible(ctx, attr, cur)) {
- xmlListInsert(list, attr);
- }
- attr = attr->next;
- }
-
- /* do nothing special for xml attributes */
- break;
- case XML_C14N_1_1:
- /* The processing of an element node E MUST be modified slightly when an XPath node-set is
- * given as input and some of the element's ancestors are omitted from the node-set.
- *
- * Simple inheritable attributes are attributes that have a value that requires at most a simple
- * redeclaration. This redeclaration is done by supplying a new value in the child axis. The
- * redeclaration of a simple inheritable attribute A contained in one of E's ancestors is done
- * by supplying a value to an attribute Ae inside E with the same name. Simple inheritable attributes
- * are xml:lang and xml:space.
- *
- * The method for processing the attribute axis of an element E in the node-set is hence enhanced.
- * All element nodes along E's ancestor axis are examined for the nearest occurrences of simple
- * inheritable attributes in the xml namespace, such as xml:lang and xml:space (whether or not they
- * are in the node-set). From this list of attributes, any simple inheritable attributes that are
- * already in E's attribute axis (whether or not they are in the node-set) are removed. Then,
- * lexicographically merge this attribute list with the nodes of E's attribute axis that are in
- * the node-set. The result of visiting the attribute axis is computed by processing the attribute
- * nodes in this merged attribute list.
- *
- * The xml:id attribute is not a simple inheritable attribute and no processing of these attributes is
- * performed.
- *
- * The xml:base attribute is not a simple inheritable attribute and requires special processing beyond
- * a simple redeclaration.
- *
- * Attributes in the XML namespace other than xml:base, xml:id, xml:lang, and xml:space MUST be processed
- * as ordinary attributes.
- */
-
- /*
- * Add all visible attributes from current node.
- */
- attr = cur->properties;
- while (attr != NULL) {
- /* special processing for XML attribute kiks in only when we have invisible parents */
- if ((!parent_visible) || (xmlC14NIsXmlAttr(attr) == 0)) {
- /* check that attribute is visible */
- if (xmlC14NIsVisible(ctx, attr, cur)) {
- xmlListInsert(list, attr);
- }
- } else {
- int matched = 0;
-
- /* check for simple inheritance attributes */
- if((!matched) && (xml_lang_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "lang")) {
- xml_lang_attr = attr;
- matched = 1;
- }
- if((!matched) && (xml_space_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "space")) {
- xml_space_attr = attr;
- matched = 1;
- }
-
- /* check for base attr */
- if((!matched) && (xml_base_attr == NULL) && xmlStrEqual(attr->name, BAD_CAST "base")) {
- xml_base_attr = attr;
- matched = 1;
- }
-
- /* otherwise, it is a normal attribute, so just check if it is visible */
- if((!matched) && xmlC14NIsVisible(ctx, attr, cur)) {
- xmlListInsert(list, attr);
- }
- }
-
- /* move to the next one */
- attr = attr->next;
- }
-
- /* special processing for XML attribute kiks in only when we have invisible parents */
- if ((parent_visible)) {
-
- /* simple inheritance attributes - copy */
- if(xml_lang_attr == NULL) {
- xml_lang_attr = xmlC14NFindHiddenParentAttr(ctx, cur->parent, BAD_CAST "lang", XML_XML_NAMESPACE);
- }
- if(xml_lang_attr != NULL) {
- xmlListInsert(list, xml_lang_attr);
- }
- if(xml_space_attr == NULL) {
- xml_space_attr = xmlC14NFindHiddenParentAttr(ctx, cur->parent, BAD_CAST "space", XML_XML_NAMESPACE);
- }
- if(xml_space_attr != NULL) {
- xmlListInsert(list, xml_space_attr);
- }
-
- /* base uri attribute - fix up */
- if(xml_base_attr == NULL) {
- /* if we don't have base uri attribute, check if we have a "hidden" one above */
- xml_base_attr = xmlC14NFindHiddenParentAttr(ctx, cur->parent, BAD_CAST "base", XML_XML_NAMESPACE);
- }
- if(xml_base_attr != NULL) {
- xml_base_attr = xmlC14NFixupBaseAttr(ctx, xml_base_attr);
- if(xml_base_attr != NULL) {
- xmlListInsert(list, xml_base_attr);
-
- /* note that we MUST delete returned attr node ourselves! */
- xml_base_attr->next = attrs_to_delete;
- attrs_to_delete = xml_base_attr;
- }
- }
- }
-
- /* done */
- break;
- }
-
- /*
- * print out all elements from list
- */
- xmlListWalk(list, (xmlListWalker) xmlC14NPrintAttrs, (const void *) ctx);
-
- /*
- * Cleanup
- */
- xmlFreePropList(attrs_to_delete);
- xmlListDelete(list);
- return (0);
-}
-
-/**
- * xmlC14NCheckForRelativeNamespaces:
- * @ctx: the C14N context
- * @cur: the current element node
- *
- * Checks that current element node has no relative namespaces defined
- *
- * Returns 0 if the node has no relative namespaces or -1 otherwise.
- */
-static int
-xmlC14NCheckForRelativeNamespaces(xmlC14NCtxPtr ctx, xmlNodePtr cur)
-{
- xmlNsPtr ns;
-
- if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
- xmlC14NErrParam("checking for relative namespaces");
- return (-1);
- }
-
- ns = cur->nsDef;
- while (ns != NULL) {
- if (xmlStrlen(ns->href) > 0) {
- xmlURIPtr uri;
-
- uri = xmlParseURI((const char *) ns->href);
- if (uri == NULL) {
- xmlC14NErrInternal("parsing namespace uri");
- return (-1);
- }
- if (xmlStrlen((const xmlChar *) uri->scheme) == 0) {
- xmlC14NErrRelativeNamespace(uri->scheme);
- xmlFreeURI(uri);
- return (-1);
- }
- if ((xmlStrcasecmp((const xmlChar *) uri->scheme, BAD_CAST "urn") != 0)
- && (xmlStrcasecmp((const xmlChar *) uri->scheme, BAD_CAST "dav") !=0)
- && (xmlStrlen((const xmlChar *) uri->server) == 0)) {
- xmlC14NErrRelativeNamespace(uri->scheme);
- xmlFreeURI(uri);
- return (-1);
- }
- xmlFreeURI(uri);
- }
- ns = ns->next;
- }
- return (0);
-}
-
-/**
- * xmlC14NProcessElementNode:
- * @ctx: the pointer to C14N context object
- * @cur: the node to process
- * @visible: this node is visible
- * @all_parents_visible: whether all the parents of this node are visible
- *
- * Canonical XML v 1.0 (http://www.w3.org/TR/xml-c14n)
- *
- * Element Nodes
- * If the element is not in the node-set, then the result is obtained
- * by processing the namespace axis, then the attribute axis, then
- * processing the child nodes of the element that are in the node-set
- * (in document order). If the element is in the node-set, then the result
- * is an open angle bracket (<), the element QName, the result of
- * processing the namespace axis, the result of processing the attribute
- * axis, a close angle bracket (>), the result of processing the child
- * nodes of the element that are in the node-set (in document order), an
- * open angle bracket, a forward slash (/), the element QName, and a close
- * angle bracket.
- *
- * Returns non-negative value on success or negative value on fail
- */
-static int
-xmlC14NProcessElementNode(xmlC14NCtxPtr ctx, xmlNodePtr cur, int visible)
-{
- int ret;
- xmlC14NVisibleNsStack state;
- int parent_is_doc = 0;
-
- if ((ctx == NULL) || (cur == NULL) || (cur->type != XML_ELEMENT_NODE)) {
- xmlC14NErrParam("processing element node");
- return (-1);
- }
-
- /*
- * Check relative relative namespaces:
- * implementations of XML canonicalization MUST report an operation
- * failure on documents containing relative namespace URIs.
- */
- if (xmlC14NCheckForRelativeNamespaces(ctx, cur) < 0) {
- xmlC14NErrInternal("checking for relative namespaces");
- return (-1);
- }
-
-
- /*
- * Save ns_rendered stack position
- */
- memset(&state, 0, sizeof(state));
- xmlC14NVisibleNsStackSave(ctx->ns_rendered, &state);
-
- if (visible) {
- if (ctx->parent_is_doc) {
- /* save this flag into the stack */
- parent_is_doc = ctx->parent_is_doc;
- ctx->parent_is_doc = 0;
- ctx->pos = XMLC14N_INSIDE_DOCUMENT_ELEMENT;
- }
- xmlOutputBufferWriteString(ctx->buf, "<");
-
- if ((cur->ns != NULL) && (xmlStrlen(cur->ns->prefix) > 0)) {
- xmlOutputBufferWriteString(ctx->buf,
- (const char *) cur->ns->prefix);
- xmlOutputBufferWriteString(ctx->buf, ":");
- }
- xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
- }
-
- if (!xmlC14NIsExclusive(ctx)) {
- ret = xmlC14NProcessNamespacesAxis(ctx, cur, visible);
- } else {
- ret = xmlExcC14NProcessNamespacesAxis(ctx, cur, visible);
- }
- if (ret < 0) {
- xmlC14NErrInternal("processing namespaces axis");
- return (-1);
- }
- /* todo: shouldn't this go to "visible only"? */
- if(visible) {
- xmlC14NVisibleNsStackShift(ctx->ns_rendered);
- }
-
- ret = xmlC14NProcessAttrsAxis(ctx, cur, visible);
- if (ret < 0) {
- xmlC14NErrInternal("processing attributes axis");
- return (-1);
- }
-
- if (visible) {
- xmlOutputBufferWriteString(ctx->buf, ">");
- }
- if (cur->children != NULL) {
- ret = xmlC14NProcessNodeList(ctx, cur->children);
- if (ret < 0) {
- xmlC14NErrInternal("processing childrens list");
- return (-1);
- }
- }
- if (visible) {
- xmlOutputBufferWriteString(ctx->buf, "</");
- if ((cur->ns != NULL) && (xmlStrlen(cur->ns->prefix) > 0)) {
- xmlOutputBufferWriteString(ctx->buf,
- (const char *) cur->ns->prefix);
- xmlOutputBufferWriteString(ctx->buf, ":");
- }
- xmlOutputBufferWriteString(ctx->buf, (const char *) cur->name);
- xmlOutputBufferWriteString(ctx->buf, ">");
- if (parent_is_doc) {
- /* restore this flag from the stack for next node */
- ctx->parent_is_doc = parent_is_doc;
- ctx->pos = XMLC14N_AFTER_DOCUMENT_ELEMENT;
- }
- }
-
- /*
- * Restore ns_rendered stack position
- */
- xmlC14NVisibleNsStackRestore(ctx->ns_rendered, &state);
- return (0);
-}
-
-/**
- * xmlC14NProcessNode:
- * @ctx: the pointer to C14N context object
- * @cur: the node to process
- *
- * Processes the given node
- *
- * Returns non-negative value on success or negative value on fail
- */
-static int
-xmlC14NProcessNode(xmlC14NCtxPtr ctx, xmlNodePtr cur)
-{
- int ret = 0;
- int visible;
-
- if ((ctx == NULL) || (cur == NULL)) {
- xmlC14NErrParam("processing node");
- return (-1);
- }
-
- visible = xmlC14NIsVisible(ctx, cur, cur->parent);
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- ret = xmlC14NProcessElementNode(ctx, cur, visible);
- break;
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- /*
- * Text Nodes
- * the string value, except all ampersands are replaced
- * by &amp;, all open angle brackets (<) are replaced by &lt;, all closing
- * angle brackets (>) are replaced by &gt;, and all #xD characters are
- * replaced by &#xD;.
- */
- /* cdata sections are processed as text nodes */
- /* todo: verify that cdata sections are included in XPath nodes set */
- if ((visible) && (cur->content != NULL)) {
- xmlChar *buffer;
-
- buffer = xmlC11NNormalizeText(cur->content);
- if (buffer != NULL) {
- xmlOutputBufferWriteString(ctx->buf,
- (const char *) buffer);
- xmlFree(buffer);
- } else {
- xmlC14NErrInternal("normalizing text node");
- return (-1);
- }
- }
- break;
- case XML_PI_NODE:
- /*
- * Processing Instruction (PI) Nodes-
- * The opening PI symbol (<?), the PI target name of the node,
- * a leading space and the string value if it is not empty, and
- * the closing PI symbol (?>). If the string value is empty,
- * then the leading space is not added. Also, a trailing #xA is
- * rendered after the closing PI symbol for PI children of the
- * root node with a lesser document order than the document
- * element, and a leading #xA is rendered before the opening PI
- * symbol of PI children of the root node with a greater document
- * order than the document element.
- */
- if (visible) {
- if (ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
- xmlOutputBufferWriteString(ctx->buf, "\x0A<?");
- } else {
- xmlOutputBufferWriteString(ctx->buf, "<?");
- }
-
- xmlOutputBufferWriteString(ctx->buf,
- (const char *) cur->name);
- if ((cur->content != NULL) && (*(cur->content) != '\0')) {
- xmlChar *buffer;
-
- xmlOutputBufferWriteString(ctx->buf, " ");
-
- /* todo: do we need to normalize pi? */
- buffer = xmlC11NNormalizePI(cur->content);
- if (buffer != NULL) {
- xmlOutputBufferWriteString(ctx->buf,
- (const char *) buffer);
- xmlFree(buffer);
- } else {
- xmlC14NErrInternal("normalizing pi node");
- return (-1);
- }
- }
-
- if (ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
- xmlOutputBufferWriteString(ctx->buf, "?>\x0A");
- } else {
- xmlOutputBufferWriteString(ctx->buf, "?>");
- }
- }
- break;
- case XML_COMMENT_NODE:
- /*
- * Comment Nodes
- * Nothing if generating canonical XML without comments. For
- * canonical XML with comments, generate the opening comment
- * symbol (<!--), the string value of the node, and the
- * closing comment symbol (-->). Also, a trailing #xA is rendered
- * after the closing comment symbol for comment children of the
- * root node with a lesser document order than the document
- * element, and a leading #xA is rendered before the opening
- * comment symbol of comment children of the root node with a
- * greater document order than the document element. (Comment
- * children of the root node represent comments outside of the
- * top-level document element and outside of the document type
- * declaration).
- */
- if (visible && ctx->with_comments) {
- if (ctx->pos == XMLC14N_AFTER_DOCUMENT_ELEMENT) {
- xmlOutputBufferWriteString(ctx->buf, "\x0A<!--");
- } else {
- xmlOutputBufferWriteString(ctx->buf, "<!--");
- }
-
- if (cur->content != NULL) {
- xmlChar *buffer;
-
- /* todo: do we need to normalize comment? */
- buffer = xmlC11NNormalizeComment(cur->content);
- if (buffer != NULL) {
- xmlOutputBufferWriteString(ctx->buf,
- (const char *) buffer);
- xmlFree(buffer);
- } else {
- xmlC14NErrInternal("normalizing comment node");
- return (-1);
- }
- }
-
- if (ctx->pos == XMLC14N_BEFORE_DOCUMENT_ELEMENT) {
- xmlOutputBufferWriteString(ctx->buf, "-->\x0A");
- } else {
- xmlOutputBufferWriteString(ctx->buf, "-->");
- }
- }
- break;
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_FRAG_NODE: /* should be processed as document? */
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE: /* should be processed as document? */
-#endif
-#ifdef LIBXML_HTML_ENABLED
- case XML_HTML_DOCUMENT_NODE: /* should be processed as document? */
-#endif
- if (cur->children != NULL) {
- ctx->pos = XMLC14N_BEFORE_DOCUMENT_ELEMENT;
- ctx->parent_is_doc = 1;
- ret = xmlC14NProcessNodeList(ctx, cur->children);
- }
- break;
-
- case XML_ATTRIBUTE_NODE:
- xmlC14NErrInvalidNode("XML_ATTRIBUTE_NODE", "processing node");
- return (-1);
- case XML_NAMESPACE_DECL:
- xmlC14NErrInvalidNode("XML_NAMESPACE_DECL", "processing node");
- return (-1);
- case XML_ENTITY_REF_NODE:
- xmlC14NErrInvalidNode("XML_ENTITY_REF_NODE", "processing node");
- return (-1);
- case XML_ENTITY_NODE:
- xmlC14NErrInvalidNode("XML_ENTITY_NODE", "processing node");
- return (-1);
-
- case XML_DOCUMENT_TYPE_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
-#ifdef LIBXML_XINCLUDE_ENABLED
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
-#endif
- /*
- * should be ignored according to "W3C Canonical XML"
- */
- break;
- default:
- xmlC14NErrUnknownNode(cur->type, "processing node");
- return (-1);
- }
-
- return (ret);
-}
-
-/**
- * xmlC14NProcessNodeList:
- * @ctx: the pointer to C14N context object
- * @cur: the node to start from
- *
- * Processes all nodes in the row starting from cur.
- *
- * Returns non-negative value on success or negative value on fail
- */
-static int
-xmlC14NProcessNodeList(xmlC14NCtxPtr ctx, xmlNodePtr cur)
-{
- int ret;
-
- if (ctx == NULL) {
- xmlC14NErrParam("processing node list");
- return (-1);
- }
-
- for (ret = 0; cur != NULL && ret >= 0; cur = cur->next) {
- ret = xmlC14NProcessNode(ctx, cur);
- }
- return (ret);
-}
-
-
-/**
- * xmlC14NFreeCtx:
- * @ctx: the pointer to C14N context object
- *
- * Cleanups the C14N context object.
- */
-
-static void
-xmlC14NFreeCtx(xmlC14NCtxPtr ctx)
-{
- if (ctx == NULL) {
- xmlC14NErrParam("freeing context");
- return;
- }
-
- if (ctx->ns_rendered != NULL) {
- xmlC14NVisibleNsStackDestroy(ctx->ns_rendered);
- }
- xmlFree(ctx);
-}
-
-/**
- * xmlC14NNewCtx:
- * @doc: the XML document for canonization
- * @is_visible_callback:the function to use to determine is node visible
- * or not
- * @user_data: the first parameter for @is_visible_callback function
- * (in most cases, it is nodes set)
- * @mode: the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixe the list of inclusive namespace prefixes
- * ended with a NULL or NULL if there is no
- * inclusive namespaces (only for `
- * canonicalization)
- * @with_comments: include comments in the result (!=0) or not (==0)
- * @buf: the output buffer to store canonical XML; this
- * buffer MUST have encoder==NULL because C14N requires
- * UTF-8 output
- *
- * Creates new C14N context object to store C14N parameters.
- *
- * Returns pointer to newly created object (success) or NULL (fail)
- */
-static xmlC14NCtxPtr
-xmlC14NNewCtx(xmlDocPtr doc,
- xmlC14NIsVisibleCallback is_visible_callback, void* user_data,
- xmlC14NMode mode, xmlChar ** inclusive_ns_prefixes,
- int with_comments, xmlOutputBufferPtr buf)
-{
- xmlC14NCtxPtr ctx = NULL;
-
- if ((doc == NULL) || (buf == NULL)) {
- xmlC14NErrParam("creating new context");
- return (NULL);
- }
-
- /*
- * Validate the encoding output buffer encoding
- */
- if (buf->encoder != NULL) {
- xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
-"xmlC14NNewCtx: output buffer encoder != NULL but C14N requires UTF8 output\n");
- return (NULL);
- }
-
- /*
- * Validate the XML document encoding value, if provided.
- */
- if (doc->charset != XML_CHAR_ENCODING_UTF8) {
- xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
- "xmlC14NNewCtx: source document not in UTF8\n");
- return (NULL);
- }
-
- /*
- * Allocate a new xmlC14NCtxPtr and fill the fields.
- */
- ctx = (xmlC14NCtxPtr) xmlMalloc(sizeof(xmlC14NCtx));
- if (ctx == NULL) {
- xmlC14NErrMemory("creating context");
- return (NULL);
- }
- memset(ctx, 0, sizeof(xmlC14NCtx));
-
- /*
- * initialize C14N context
- */
- ctx->doc = doc;
- ctx->with_comments = with_comments;
- ctx->is_visible_callback = is_visible_callback;
- ctx->user_data = user_data;
- ctx->buf = buf;
- ctx->parent_is_doc = 1;
- ctx->pos = XMLC14N_BEFORE_DOCUMENT_ELEMENT;
- ctx->ns_rendered = xmlC14NVisibleNsStackCreate();
-
- if(ctx->ns_rendered == NULL) {
- xmlC14NErr(ctx, (xmlNodePtr) doc, XML_C14N_CREATE_STACK,
- "xmlC14NNewCtx: xmlC14NVisibleNsStackCreate failed\n");
- xmlC14NFreeCtx(ctx);
- return (NULL);
- }
-
- /*
- * Set "mode" flag and remember list of incluseve prefixes
- * for exclusive c14n
- */
- ctx->mode = mode;
- if(xmlC14NIsExclusive(ctx)) {
- ctx->inclusive_ns_prefixes = inclusive_ns_prefixes;
- }
- return (ctx);
-}
-
-/**
- * xmlC14NExecute:
- * @doc: the XML document for canonization
- * @is_visible_callback:the function to use to determine is node visible
- * or not
- * @user_data: the first parameter for @is_visible_callback function
- * (in most cases, it is nodes set)
- * @mode: the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
- * ended with a NULL or NULL if there is no
- * inclusive namespaces (only for exclusive
- * canonicalization, ignored otherwise)
- * @with_comments: include comments in the result (!=0) or not (==0)
- * @buf: the output buffer to store canonical XML; this
- * buffer MUST have encoder==NULL because C14N requires
- * UTF-8 output
- *
- * Dumps the canonized image of given XML document into the provided buffer.
- * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
- * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Returns non-negative value on success or a negative value on fail
- */
-int
-xmlC14NExecute(xmlDocPtr doc, xmlC14NIsVisibleCallback is_visible_callback,
- void* user_data, int mode, xmlChar **inclusive_ns_prefixes,
- int with_comments, xmlOutputBufferPtr buf) {
-
- xmlC14NCtxPtr ctx;
- xmlC14NMode c14n_mode = XML_C14N_1_0;
- int ret;
-
- if ((buf == NULL) || (doc == NULL)) {
- xmlC14NErrParam("executing c14n");
- return (-1);
- }
-
- /* for backward compatibility, we have to have "mode" as "int"
- and here we check that user gives valid value */
- switch(mode) {
- case XML_C14N_1_0:
- case XML_C14N_EXCLUSIVE_1_0:
- case XML_C14N_1_1:
- c14n_mode = (xmlC14NMode)mode;
- break;
- default:
- xmlC14NErrParam("invalid mode for executing c14n");
- return (-1);
- }
-
- /*
- * Validate the encoding output buffer encoding
- */
- if (buf->encoder != NULL) {
- xmlC14NErr(NULL, (xmlNodePtr) doc, XML_C14N_REQUIRES_UTF8,
-"xmlC14NExecute: output buffer encoder != NULL but C14N requires UTF8 output\n");
- return (-1);
- }
-
- ctx = xmlC14NNewCtx(doc, is_visible_callback, user_data,
- c14n_mode, inclusive_ns_prefixes,
- with_comments, buf);
- if (ctx == NULL) {
- xmlC14NErr(NULL, (xmlNodePtr) doc, XML_C14N_CREATE_CTXT,
- "xmlC14NExecute: unable to create C14N context\n");
- return (-1);
- }
-
-
-
- /*
- * Root Node
- * The root node is the parent of the top-level document element. The
- * result of processing each of its child nodes that is in the node-set
- * in document order. The root node does not generate a byte order mark,
- * XML declaration, nor anything from within the document type
- * declaration.
- */
- if (doc->children != NULL) {
- ret = xmlC14NProcessNodeList(ctx, doc->children);
- if (ret < 0) {
- xmlC14NErrInternal("processing docs children list");
- xmlC14NFreeCtx(ctx);
- return (-1);
- }
- }
-
- /*
- * Flush buffer to get number of bytes written
- */
- ret = xmlOutputBufferFlush(buf);
- if (ret < 0) {
- xmlC14NErrInternal("flushing output buffer");
- xmlC14NFreeCtx(ctx);
- return (-1);
- }
-
- /*
- * Cleanup
- */
- xmlC14NFreeCtx(ctx);
- return (ret);
-}
-
-/**
- * xmlC14NDocSaveTo:
- * @doc: the XML document for canonization
- * @nodes: the nodes set to be included in the canonized image
- * or NULL if all document nodes should be included
- * @mode: the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
- * ended with a NULL or NULL if there is no
- * inclusive namespaces (only for exclusive
- * canonicalization, ignored otherwise)
- * @with_comments: include comments in the result (!=0) or not (==0)
- * @buf: the output buffer to store canonical XML; this
- * buffer MUST have encoder==NULL because C14N requires
- * UTF-8 output
- *
- * Dumps the canonized image of given XML document into the provided buffer.
- * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
- * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Returns non-negative value on success or a negative value on fail
- */
-int
-xmlC14NDocSaveTo(xmlDocPtr doc, xmlNodeSetPtr nodes,
- int mode, xmlChar ** inclusive_ns_prefixes,
- int with_comments, xmlOutputBufferPtr buf) {
- return(xmlC14NExecute(doc,
- (xmlC14NIsVisibleCallback)xmlC14NIsNodeInNodeset,
- nodes,
- mode,
- inclusive_ns_prefixes,
- with_comments,
- buf));
-}
-
-
-/**
- * xmlC14NDocDumpMemory:
- * @doc: the XML document for canonization
- * @nodes: the nodes set to be included in the canonized image
- * or NULL if all document nodes should be included
- * @mode: the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
- * ended with a NULL or NULL if there is no
- * inclusive namespaces (only for exclusive
- * canonicalization, ignored otherwise)
- * @with_comments: include comments in the result (!=0) or not (==0)
- * @doc_txt_ptr: the memory pointer for allocated canonical XML text;
- * the caller of this functions is responsible for calling
- * xmlFree() to free allocated memory
- *
- * Dumps the canonized image of given XML document into memory.
- * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
- * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Returns the number of bytes written on success or a negative value on fail
- */
-int
-xmlC14NDocDumpMemory(xmlDocPtr doc, xmlNodeSetPtr nodes,
- int mode, xmlChar ** inclusive_ns_prefixes,
- int with_comments, xmlChar ** doc_txt_ptr)
-{
- int ret;
- xmlOutputBufferPtr buf;
-
- if (doc_txt_ptr == NULL) {
- xmlC14NErrParam("dumping doc to memory");
- return (-1);
- }
-
- *doc_txt_ptr = NULL;
-
- /*
- * create memory buffer with UTF8 (default) encoding
- */
- buf = xmlAllocOutputBuffer(NULL);
- if (buf == NULL) {
- xmlC14NErrMemory("creating output buffer");
- return (-1);
- }
-
- /*
- * canonize document and write to buffer
- */
- ret = xmlC14NDocSaveTo(doc, nodes, mode, inclusive_ns_prefixes,
- with_comments, buf);
- if (ret < 0) {
- xmlC14NErrInternal("saving doc to output buffer");
- (void) xmlOutputBufferClose(buf);
- return (-1);
- }
-
- ret = xmlBufUse(buf->buffer);
- if (ret > 0) {
- *doc_txt_ptr = xmlStrndup(xmlBufContent(buf->buffer), ret);
- }
- (void) xmlOutputBufferClose(buf);
-
- if ((*doc_txt_ptr == NULL) && (ret > 0)) {
- xmlC14NErrMemory("coping canonicanized document");
- return (-1);
- }
- return (ret);
-}
-
-/**
- * xmlC14NDocSave:
- * @doc: the XML document for canonization
- * @nodes: the nodes set to be included in the canonized image
- * or NULL if all document nodes should be included
- * @mode: the c14n mode (see @xmlC14NMode)
- * @inclusive_ns_prefixes: the list of inclusive namespace prefixes
- * ended with a NULL or NULL if there is no
- * inclusive namespaces (only for exclusive
- * canonicalization, ignored otherwise)
- * @with_comments: include comments in the result (!=0) or not (==0)
- * @filename: the filename to store canonical XML image
- * @compression: the compression level (zlib requred):
- * -1 - libxml default,
- * 0 - uncompressed,
- * >0 - compression level
- *
- * Dumps the canonized image of given XML document into the file.
- * For details see "Canonical XML" (http://www.w3.org/TR/xml-c14n) or
- * "Exclusive XML Canonicalization" (http://www.w3.org/TR/xml-exc-c14n)
- *
- * Returns the number of bytes written success or a negative value on fail
- */
-int
-xmlC14NDocSave(xmlDocPtr doc, xmlNodeSetPtr nodes,
- int mode, xmlChar ** inclusive_ns_prefixes,
- int with_comments, const char *filename, int compression)
-{
- xmlOutputBufferPtr buf;
- int ret;
-
- if (filename == NULL) {
- xmlC14NErrParam("saving doc");
- return (-1);
- }
-#ifdef HAVE_ZLIB_H
- if (compression < 0)
- compression = xmlGetCompressMode();
-#endif
-
- /*
- * save the content to a temp buffer, use default UTF8 encoding.
- */
- buf = xmlOutputBufferCreateFilename(filename, NULL, compression);
- if (buf == NULL) {
- xmlC14NErrInternal("creating temporary filename");
- return (-1);
- }
-
- /*
- * canonize document and write to buffer
- */
- ret = xmlC14NDocSaveTo(doc, nodes, mode, inclusive_ns_prefixes,
- with_comments, buf);
- if (ret < 0) {
- xmlC14NErrInternal("cannicanize document to buffer");
- (void) xmlOutputBufferClose(buf);
- return (-1);
- }
-
- /*
- * get the numbers of bytes written
- */
- ret = xmlOutputBufferClose(buf);
- return (ret);
-}
-
-
-
-/*
- * Macro used to grow the current buffer.
- */
-#define growBufferReentrant() { \
- buffer_size *= 2; \
- buffer = (xmlChar *) \
- xmlRealloc(buffer, buffer_size * sizeof(xmlChar)); \
- if (buffer == NULL) { \
- xmlC14NErrMemory("growing buffer"); \
- return(NULL); \
- } \
-}
-
-/**
- * xmlC11NNormalizeString:
- * @input: the input string
- * @mode: the normalization mode (attribute, comment, PI or text)
- *
- * Converts a string to a canonical (normalized) format. The code is stolen
- * from xmlEncodeEntitiesReentrant(). Added normalization of \x09, \x0a, \x0A
- * and the @mode parameter
- *
- * Returns a normalized string (caller is responsible for calling xmlFree())
- * or NULL if an error occurs
- */
-static xmlChar *
-xmlC11NNormalizeString(const xmlChar * input,
- xmlC14NNormalizationMode mode)
-{
- const xmlChar *cur = input;
- xmlChar *buffer = NULL;
- xmlChar *out = NULL;
- int buffer_size = 0;
-
- if (input == NULL)
- return (NULL);
-
- /*
- * allocate an translation buffer.
- */
- buffer_size = 1000;
- buffer = (xmlChar *) xmlMallocAtomic(buffer_size * sizeof(xmlChar));
- if (buffer == NULL) {
- xmlC14NErrMemory("allocating buffer");
- return (NULL);
- }
- out = buffer;
-
- while (*cur != '\0') {
- if ((out - buffer) > (buffer_size - 10)) {
- int indx = out - buffer;
-
- growBufferReentrant();
- out = &buffer[indx];
- }
-
- if ((*cur == '<') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
- (mode == XMLC14N_NORMALIZE_TEXT))) {
- *out++ = '&';
- *out++ = 'l';
- *out++ = 't';
- *out++ = ';';
- } else if ((*cur == '>') && (mode == XMLC14N_NORMALIZE_TEXT)) {
- *out++ = '&';
- *out++ = 'g';
- *out++ = 't';
- *out++ = ';';
- } else if ((*cur == '&') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
- (mode == XMLC14N_NORMALIZE_TEXT))) {
- *out++ = '&';
- *out++ = 'a';
- *out++ = 'm';
- *out++ = 'p';
- *out++ = ';';
- } else if ((*cur == '"') && (mode == XMLC14N_NORMALIZE_ATTR)) {
- *out++ = '&';
- *out++ = 'q';
- *out++ = 'u';
- *out++ = 'o';
- *out++ = 't';
- *out++ = ';';
- } else if ((*cur == '\x09') && (mode == XMLC14N_NORMALIZE_ATTR)) {
- *out++ = '&';
- *out++ = '#';
- *out++ = 'x';
- *out++ = '9';
- *out++ = ';';
- } else if ((*cur == '\x0A') && (mode == XMLC14N_NORMALIZE_ATTR)) {
- *out++ = '&';
- *out++ = '#';
- *out++ = 'x';
- *out++ = 'A';
- *out++ = ';';
- } else if ((*cur == '\x0D') && ((mode == XMLC14N_NORMALIZE_ATTR) ||
- (mode == XMLC14N_NORMALIZE_TEXT) ||
- (mode == XMLC14N_NORMALIZE_COMMENT) ||
- (mode == XMLC14N_NORMALIZE_PI))) {
- *out++ = '&';
- *out++ = '#';
- *out++ = 'x';
- *out++ = 'D';
- *out++ = ';';
- } else {
- /*
- * Works because on UTF-8, all extended sequences cannot
- * result in bytes in the ASCII range.
- */
- *out++ = *cur;
- }
- cur++;
- }
- *out = 0;
- return (buffer);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-#define bottom_c14n
-#include "elfgcchack.h"
-#endif /* LIBXML_C14N_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/catalog.c b/external/libxml2_android/jni/libxml2/catalog.c
deleted file mode 100644
index 6dfdfbb8..00000000
--- a/external/libxml2_android/jni/libxml2/catalog.c
+++ /dev/null
@@ -1,3825 +0,0 @@
-/**
- * catalog.c: set of generic Catalog related routines
- *
- * Reference: SGML Open Technical Resolution TR9401:1997.
- * http://www.jclark.com/sp/catalog.htm
- *
- * XML Catalogs Working Draft 06 August 2001
- * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * See Copyright for the status of this software.
- *
- * Daniel.Veillard@imag.fr
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_CATALOG_ENABLED
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/hash.h>
-#include <libxml/uri.h>
-#include <libxml/parserInternals.h>
-#include <libxml/catalog.h>
-#include <libxml/xmlerror.h>
-#include <libxml/threads.h>
-#include <libxml/globals.h>
-
-#include "buf.h"
-
-#define MAX_DELEGATE 50
-#define MAX_CATAL_DEPTH 50
-
-#ifdef _WIN32
-# define PATH_SEPARATOR ';'
-#else
-# define PATH_SEPARATOR ':'
-#endif
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- * XML_CATALOG_PREFER user env to select between system/public prefered
- * option. C.f. Richard Tobin <richard@cogsci.ed.ac.uk>
- *> Just FYI, I am using an environment variable XML_CATALOG_PREFER with
- *> values "system" and "public". I have made the default be "system" to
- *> match yours.
- */
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-#define XML_URN_PUBID "urn:publicid:"
-#define XML_CATAL_BREAK ((xmlChar *) -1)
-#ifndef XML_XML_DEFAULT_CATALOG
-#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
-#endif
-#ifndef XML_SGML_DEFAULT_CATALOG
-#define XML_SGML_DEFAULT_CATALOG "file:///etc/sgml/catalog"
-#endif
-
-#if defined(_WIN32) && defined(_MSC_VER)
-#undef XML_XML_DEFAULT_CATALOG
-static char XML_XML_DEFAULT_CATALOG[256] = "file:///etc/xml/catalog";
-#if defined(_WIN32_WCE)
-/* Windows CE don't have a A variant */
-#define GetModuleHandleA GetModuleHandle
-#define GetModuleFileNameA GetModuleFileName
-#else
-#if !defined(_WINDOWS_)
-void* __stdcall GetModuleHandleA(const char*);
-unsigned long __stdcall GetModuleFileNameA(void*, char*, unsigned long);
-#endif
-#endif
-#endif
-
-static xmlChar *xmlCatalogNormalizePublic(const xmlChar *pubID);
-static int xmlExpandCatalog(xmlCatalogPtr catal, const char *filename);
-
-/************************************************************************
- * *
- * Types, all private *
- * *
- ************************************************************************/
-
-typedef enum {
- XML_CATA_REMOVED = -1,
- XML_CATA_NONE = 0,
- XML_CATA_CATALOG,
- XML_CATA_BROKEN_CATALOG,
- XML_CATA_NEXT_CATALOG,
- XML_CATA_GROUP,
- XML_CATA_PUBLIC,
- XML_CATA_SYSTEM,
- XML_CATA_REWRITE_SYSTEM,
- XML_CATA_DELEGATE_PUBLIC,
- XML_CATA_DELEGATE_SYSTEM,
- XML_CATA_URI,
- XML_CATA_REWRITE_URI,
- XML_CATA_DELEGATE_URI,
- SGML_CATA_SYSTEM,
- SGML_CATA_PUBLIC,
- SGML_CATA_ENTITY,
- SGML_CATA_PENTITY,
- SGML_CATA_DOCTYPE,
- SGML_CATA_LINKTYPE,
- SGML_CATA_NOTATION,
- SGML_CATA_DELEGATE,
- SGML_CATA_BASE,
- SGML_CATA_CATALOG,
- SGML_CATA_DOCUMENT,
- SGML_CATA_SGMLDECL
-} xmlCatalogEntryType;
-
-typedef struct _xmlCatalogEntry xmlCatalogEntry;
-typedef xmlCatalogEntry *xmlCatalogEntryPtr;
-struct _xmlCatalogEntry {
- struct _xmlCatalogEntry *next;
- struct _xmlCatalogEntry *parent;
- struct _xmlCatalogEntry *children;
- xmlCatalogEntryType type;
- xmlChar *name;
- xmlChar *value;
- xmlChar *URL; /* The expanded URL using the base */
- xmlCatalogPrefer prefer;
- int dealloc;
- int depth;
- struct _xmlCatalogEntry *group;
-};
-
-typedef enum {
- XML_XML_CATALOG_TYPE = 1,
- XML_SGML_CATALOG_TYPE
-} xmlCatalogType;
-
-#define XML_MAX_SGML_CATA_DEPTH 10
-struct _xmlCatalog {
- xmlCatalogType type; /* either XML or SGML */
-
- /*
- * SGML Catalogs are stored as a simple hash table of catalog entries
- * Catalog stack to check against overflows when building the
- * SGML catalog
- */
- char *catalTab[XML_MAX_SGML_CATA_DEPTH]; /* stack of catals */
- int catalNr; /* Number of current catal streams */
- int catalMax; /* Max number of catal streams */
- xmlHashTablePtr sgml;
-
- /*
- * XML Catalogs are stored as a tree of Catalog entries
- */
- xmlCatalogPrefer prefer;
- xmlCatalogEntryPtr xml;
-};
-
-/************************************************************************
- * *
- * Global variables *
- * *
- ************************************************************************/
-
-/*
- * Those are preferences
- */
-static int xmlDebugCatalogs = 0; /* used for debugging */
-static xmlCatalogAllow xmlCatalogDefaultAllow = XML_CATA_ALLOW_ALL;
-static xmlCatalogPrefer xmlCatalogDefaultPrefer = XML_CATA_PREFER_PUBLIC;
-
-/*
- * Hash table containing all the trees of XML catalogs parsed by
- * the application.
- */
-static xmlHashTablePtr xmlCatalogXMLFiles = NULL;
-
-/*
- * The default catalog in use by the application
- */
-static xmlCatalogPtr xmlDefaultCatalog = NULL;
-
-/*
- * A mutex for modifying the shared global catalog(s)
- * xmlDefaultCatalog tree.
- * It also protects xmlCatalogXMLFiles
- * The core of this readers/writer scheme is in xmlFetchXMLCatalogFile()
- */
-static xmlRMutexPtr xmlCatalogMutex = NULL;
-
-/*
- * Whether the catalog support was initialized.
- */
-static int xmlCatalogInitialized = 0;
-
-/************************************************************************
- * *
- * Catalog error handlers *
- * *
- ************************************************************************/
-
-/**
- * xmlCatalogErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlCatalogErrMemory(const char *extra)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_CATALOG,
- XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0,
- extra, NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlCatalogErr:
- * @catal: the Catalog entry
- * @node: the context node
- * @msg: the error message
- * @extra: extra informations
- *
- * Handle a catalog error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlCatalogErr(xmlCatalogEntryPtr catal, xmlNodePtr node, int error,
- const char *msg, const xmlChar *str1, const xmlChar *str2,
- const xmlChar *str3)
-{
- __xmlRaiseError(NULL, NULL, NULL, catal, node, XML_FROM_CATALOG,
- error, XML_ERR_ERROR, NULL, 0,
- (const char *) str1, (const char *) str2,
- (const char *) str3, 0, 0,
- msg, str1, str2, str3);
-}
-
-
-/************************************************************************
- * *
- * Allocation and Freeing *
- * *
- ************************************************************************/
-
-/**
- * xmlNewCatalogEntry:
- * @type: type of entry
- * @name: name of the entry
- * @value: value of the entry
- * @prefer: the PUBLIC vs. SYSTEM current preference value
- * @group: for members of a group, the group entry
- *
- * create a new Catalog entry, this type is shared both by XML and
- * SGML catalogs, but the acceptable types values differs.
- *
- * Returns the xmlCatalogEntryPtr or NULL in case of error
- */
-static xmlCatalogEntryPtr
-xmlNewCatalogEntry(xmlCatalogEntryType type, const xmlChar *name,
- const xmlChar *value, const xmlChar *URL, xmlCatalogPrefer prefer,
- xmlCatalogEntryPtr group) {
- xmlCatalogEntryPtr ret;
- xmlChar *normid = NULL;
-
- ret = (xmlCatalogEntryPtr) xmlMalloc(sizeof(xmlCatalogEntry));
- if (ret == NULL) {
- xmlCatalogErrMemory("allocating catalog entry");
- return(NULL);
- }
- ret->next = NULL;
- ret->parent = NULL;
- ret->children = NULL;
- ret->type = type;
- if (type == XML_CATA_PUBLIC || type == XML_CATA_DELEGATE_PUBLIC) {
- normid = xmlCatalogNormalizePublic(name);
- if (normid != NULL)
- name = (*normid != 0 ? normid : NULL);
- }
- if (name != NULL)
- ret->name = xmlStrdup(name);
- else
- ret->name = NULL;
- if (normid != NULL)
- xmlFree(normid);
- if (value != NULL)
- ret->value = xmlStrdup(value);
- else
- ret->value = NULL;
- if (URL == NULL)
- URL = value;
- if (URL != NULL)
- ret->URL = xmlStrdup(URL);
- else
- ret->URL = NULL;
- ret->prefer = prefer;
- ret->dealloc = 0;
- ret->depth = 0;
- ret->group = group;
- return(ret);
-}
-
-static void
-xmlFreeCatalogEntryList(xmlCatalogEntryPtr ret);
-
-/**
- * xmlFreeCatalogEntry:
- * @ret: a Catalog entry
- *
- * Free the memory allocated to a Catalog entry
- */
-static void
-xmlFreeCatalogEntry(xmlCatalogEntryPtr ret) {
- if (ret == NULL)
- return;
- /*
- * Entries stored in the file hash must be deallocated
- * only by the file hash cleaner !
- */
- if (ret->dealloc == 1)
- return;
-
- if (xmlDebugCatalogs) {
- if (ret->name != NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Free catalog entry %s\n", ret->name);
- else if (ret->value != NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Free catalog entry %s\n", ret->value);
- else
- xmlGenericError(xmlGenericErrorContext,
- "Free catalog entry\n");
- }
-
- if (ret->name != NULL)
- xmlFree(ret->name);
- if (ret->value != NULL)
- xmlFree(ret->value);
- if (ret->URL != NULL)
- xmlFree(ret->URL);
- xmlFree(ret);
-}
-
-/**
- * xmlFreeCatalogEntryList:
- * @ret: a Catalog entry list
- *
- * Free the memory allocated to a full chained list of Catalog entries
- */
-static void
-xmlFreeCatalogEntryList(xmlCatalogEntryPtr ret) {
- xmlCatalogEntryPtr next;
-
- while (ret != NULL) {
- next = ret->next;
- xmlFreeCatalogEntry(ret);
- ret = next;
- }
-}
-
-/**
- * xmlFreeCatalogHashEntryList:
- * @ret: a Catalog entry list
- *
- * Free the memory allocated to list of Catalog entries from the
- * catalog file hash.
- */
-static void
-xmlFreeCatalogHashEntryList(xmlCatalogEntryPtr catal) {
- xmlCatalogEntryPtr children, next;
-
- if (catal == NULL)
- return;
-
- children = catal->children;
- while (children != NULL) {
- next = children->next;
- children->dealloc = 0;
- children->children = NULL;
- xmlFreeCatalogEntry(children);
- children = next;
- }
- catal->dealloc = 0;
- xmlFreeCatalogEntry(catal);
-}
-
-/**
- * xmlCreateNewCatalog:
- * @type: type of catalog
- * @prefer: the PUBLIC vs. SYSTEM current preference value
- *
- * create a new Catalog, this type is shared both by XML and
- * SGML catalogs, but the acceptable types values differs.
- *
- * Returns the xmlCatalogPtr or NULL in case of error
- */
-static xmlCatalogPtr
-xmlCreateNewCatalog(xmlCatalogType type, xmlCatalogPrefer prefer) {
- xmlCatalogPtr ret;
-
- ret = (xmlCatalogPtr) xmlMalloc(sizeof(xmlCatalog));
- if (ret == NULL) {
- xmlCatalogErrMemory("allocating catalog");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlCatalog));
- ret->type = type;
- ret->catalNr = 0;
- ret->catalMax = XML_MAX_SGML_CATA_DEPTH;
- ret->prefer = prefer;
- if (ret->type == XML_SGML_CATALOG_TYPE)
- ret->sgml = xmlHashCreate(10);
- return(ret);
-}
-
-/**
- * xmlFreeCatalog:
- * @catal: a Catalog
- *
- * Free the memory allocated to a Catalog
- */
-void
-xmlFreeCatalog(xmlCatalogPtr catal) {
- if (catal == NULL)
- return;
- if (catal->xml != NULL)
- xmlFreeCatalogEntryList(catal->xml);
- if (catal->sgml != NULL)
- xmlHashFree(catal->sgml,
- (xmlHashDeallocator) xmlFreeCatalogEntry);
- xmlFree(catal);
-}
-
-/************************************************************************
- * *
- * Serializing Catalogs *
- * *
- ************************************************************************/
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlCatalogDumpEntry:
- * @entry: the catalog entry
- * @out: the file.
- *
- * Serialize an SGML Catalog entry
- */
-static void
-xmlCatalogDumpEntry(xmlCatalogEntryPtr entry, FILE *out) {
- if ((entry == NULL) || (out == NULL))
- return;
- switch (entry->type) {
- case SGML_CATA_ENTITY:
- fprintf(out, "ENTITY "); break;
- case SGML_CATA_PENTITY:
- fprintf(out, "ENTITY %%"); break;
- case SGML_CATA_DOCTYPE:
- fprintf(out, "DOCTYPE "); break;
- case SGML_CATA_LINKTYPE:
- fprintf(out, "LINKTYPE "); break;
- case SGML_CATA_NOTATION:
- fprintf(out, "NOTATION "); break;
- case SGML_CATA_PUBLIC:
- fprintf(out, "PUBLIC "); break;
- case SGML_CATA_SYSTEM:
- fprintf(out, "SYSTEM "); break;
- case SGML_CATA_DELEGATE:
- fprintf(out, "DELEGATE "); break;
- case SGML_CATA_BASE:
- fprintf(out, "BASE "); break;
- case SGML_CATA_CATALOG:
- fprintf(out, "CATALOG "); break;
- case SGML_CATA_DOCUMENT:
- fprintf(out, "DOCUMENT "); break;
- case SGML_CATA_SGMLDECL:
- fprintf(out, "SGMLDECL "); break;
- default:
- return;
- }
- switch (entry->type) {
- case SGML_CATA_ENTITY:
- case SGML_CATA_PENTITY:
- case SGML_CATA_DOCTYPE:
- case SGML_CATA_LINKTYPE:
- case SGML_CATA_NOTATION:
- fprintf(out, "%s", (const char *) entry->name); break;
- case SGML_CATA_PUBLIC:
- case SGML_CATA_SYSTEM:
- case SGML_CATA_SGMLDECL:
- case SGML_CATA_DOCUMENT:
- case SGML_CATA_CATALOG:
- case SGML_CATA_BASE:
- case SGML_CATA_DELEGATE:
- fprintf(out, "\"%s\"", entry->name); break;
- default:
- break;
- }
- switch (entry->type) {
- case SGML_CATA_ENTITY:
- case SGML_CATA_PENTITY:
- case SGML_CATA_DOCTYPE:
- case SGML_CATA_LINKTYPE:
- case SGML_CATA_NOTATION:
- case SGML_CATA_PUBLIC:
- case SGML_CATA_SYSTEM:
- case SGML_CATA_DELEGATE:
- fprintf(out, " \"%s\"", entry->value); break;
- default:
- break;
- }
- fprintf(out, "\n");
-}
-
-/**
- * xmlDumpXMLCatalogNode:
- * @catal: top catalog entry
- * @catalog: pointer to the xml tree
- * @doc: the containing document
- * @ns: the current namespace
- * @cgroup: group node for group members
- *
- * Serializes a Catalog entry, called by xmlDumpXMLCatalog and recursively
- * for group entries
- */
-static void xmlDumpXMLCatalogNode(xmlCatalogEntryPtr catal, xmlNodePtr catalog,
- xmlDocPtr doc, xmlNsPtr ns, xmlCatalogEntryPtr cgroup) {
- xmlNodePtr node;
- xmlCatalogEntryPtr cur;
- /*
- * add all the catalog entries
- */
- cur = catal;
- while (cur != NULL) {
- if (cur->group == cgroup) {
- switch (cur->type) {
- case XML_CATA_REMOVED:
- break;
- case XML_CATA_BROKEN_CATALOG:
- case XML_CATA_CATALOG:
- if (cur == catal) {
- cur = cur->children;
- continue;
- }
- break;
- case XML_CATA_NEXT_CATALOG:
- node = xmlNewDocNode(doc, ns, BAD_CAST "nextCatalog", NULL);
- xmlSetProp(node, BAD_CAST "catalog", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_NONE:
- break;
- case XML_CATA_GROUP:
- node = xmlNewDocNode(doc, ns, BAD_CAST "group", NULL);
- xmlSetProp(node, BAD_CAST "id", cur->name);
- if (cur->value != NULL) {
- xmlNsPtr xns;
- xns = xmlSearchNsByHref(doc, node, XML_XML_NAMESPACE);
- if (xns != NULL)
- xmlSetNsProp(node, xns, BAD_CAST "base",
- cur->value);
- }
- switch (cur->prefer) {
- case XML_CATA_PREFER_NONE:
- break;
- case XML_CATA_PREFER_PUBLIC:
- xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "public");
- break;
- case XML_CATA_PREFER_SYSTEM:
- xmlSetProp(node, BAD_CAST "prefer", BAD_CAST "system");
- break;
- }
- xmlDumpXMLCatalogNode(cur->next, node, doc, ns, cur);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_PUBLIC:
- node = xmlNewDocNode(doc, ns, BAD_CAST "public", NULL);
- xmlSetProp(node, BAD_CAST "publicId", cur->name);
- xmlSetProp(node, BAD_CAST "uri", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_SYSTEM:
- node = xmlNewDocNode(doc, ns, BAD_CAST "system", NULL);
- xmlSetProp(node, BAD_CAST "systemId", cur->name);
- xmlSetProp(node, BAD_CAST "uri", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_REWRITE_SYSTEM:
- node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteSystem", NULL);
- xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
- xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_DELEGATE_PUBLIC:
- node = xmlNewDocNode(doc, ns, BAD_CAST "delegatePublic", NULL);
- xmlSetProp(node, BAD_CAST "publicIdStartString", cur->name);
- xmlSetProp(node, BAD_CAST "catalog", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_DELEGATE_SYSTEM:
- node = xmlNewDocNode(doc, ns, BAD_CAST "delegateSystem", NULL);
- xmlSetProp(node, BAD_CAST "systemIdStartString", cur->name);
- xmlSetProp(node, BAD_CAST "catalog", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_URI:
- node = xmlNewDocNode(doc, ns, BAD_CAST "uri", NULL);
- xmlSetProp(node, BAD_CAST "name", cur->name);
- xmlSetProp(node, BAD_CAST "uri", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_REWRITE_URI:
- node = xmlNewDocNode(doc, ns, BAD_CAST "rewriteURI", NULL);
- xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
- xmlSetProp(node, BAD_CAST "rewritePrefix", cur->value);
- xmlAddChild(catalog, node);
- break;
- case XML_CATA_DELEGATE_URI:
- node = xmlNewDocNode(doc, ns, BAD_CAST "delegateURI", NULL);
- xmlSetProp(node, BAD_CAST "uriStartString", cur->name);
- xmlSetProp(node, BAD_CAST "catalog", cur->value);
- xmlAddChild(catalog, node);
- break;
- case SGML_CATA_SYSTEM:
- case SGML_CATA_PUBLIC:
- case SGML_CATA_ENTITY:
- case SGML_CATA_PENTITY:
- case SGML_CATA_DOCTYPE:
- case SGML_CATA_LINKTYPE:
- case SGML_CATA_NOTATION:
- case SGML_CATA_DELEGATE:
- case SGML_CATA_BASE:
- case SGML_CATA_CATALOG:
- case SGML_CATA_DOCUMENT:
- case SGML_CATA_SGMLDECL:
- break;
- }
- }
- cur = cur->next;
- }
-}
-
-static int
-xmlDumpXMLCatalog(FILE *out, xmlCatalogEntryPtr catal) {
- int ret;
- xmlDocPtr doc;
- xmlNsPtr ns;
- xmlDtdPtr dtd;
- xmlNodePtr catalog;
- xmlOutputBufferPtr buf;
-
- /*
- * Rebuild a catalog
- */
- doc = xmlNewDoc(NULL);
- if (doc == NULL)
- return(-1);
- dtd = xmlNewDtd(doc, BAD_CAST "catalog",
- BAD_CAST "-//OASIS//DTD Entity Resolution XML Catalog V1.0//EN",
-BAD_CAST "http://www.oasis-open.org/committees/entity/release/1.0/catalog.dtd");
-
- xmlAddChild((xmlNodePtr) doc, (xmlNodePtr) dtd);
-
- ns = xmlNewNs(NULL, XML_CATALOGS_NAMESPACE, NULL);
- if (ns == NULL) {
- xmlFreeDoc(doc);
- return(-1);
- }
- catalog = xmlNewDocNode(doc, ns, BAD_CAST "catalog", NULL);
- if (catalog == NULL) {
- xmlFreeNs(ns);
- xmlFreeDoc(doc);
- return(-1);
- }
- catalog->nsDef = ns;
- xmlAddChild((xmlNodePtr) doc, catalog);
-
- xmlDumpXMLCatalogNode(catal, catalog, doc, ns, NULL);
-
- /*
- * reserialize it
- */
- buf = xmlOutputBufferCreateFile(out, NULL);
- if (buf == NULL) {
- xmlFreeDoc(doc);
- return(-1);
- }
- ret = xmlSaveFormatFileTo(buf, doc, NULL, 1);
-
- /*
- * Free it
- */
- xmlFreeDoc(doc);
-
- return(ret);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- * *
- * Converting SGML Catalogs to XML *
- * *
- ************************************************************************/
-
-/**
- * xmlCatalogConvertEntry:
- * @entry: the entry
- * @catal: pointer to the catalog being converted
- *
- * Convert one entry from the catalog
- */
-static void
-xmlCatalogConvertEntry(xmlCatalogEntryPtr entry, xmlCatalogPtr catal) {
- if ((entry == NULL) || (catal == NULL) || (catal->sgml == NULL) ||
- (catal->xml == NULL))
- return;
- switch (entry->type) {
- case SGML_CATA_ENTITY:
- entry->type = XML_CATA_PUBLIC;
- break;
- case SGML_CATA_PENTITY:
- entry->type = XML_CATA_PUBLIC;
- break;
- case SGML_CATA_DOCTYPE:
- entry->type = XML_CATA_PUBLIC;
- break;
- case SGML_CATA_LINKTYPE:
- entry->type = XML_CATA_PUBLIC;
- break;
- case SGML_CATA_NOTATION:
- entry->type = XML_CATA_PUBLIC;
- break;
- case SGML_CATA_PUBLIC:
- entry->type = XML_CATA_PUBLIC;
- break;
- case SGML_CATA_SYSTEM:
- entry->type = XML_CATA_SYSTEM;
- break;
- case SGML_CATA_DELEGATE:
- entry->type = XML_CATA_DELEGATE_PUBLIC;
- break;
- case SGML_CATA_CATALOG:
- entry->type = XML_CATA_CATALOG;
- break;
- default:
- xmlHashRemoveEntry(catal->sgml, entry->name,
- (xmlHashDeallocator) xmlFreeCatalogEntry);
- return;
- }
- /*
- * Conversion successful, remove from the SGML catalog
- * and add it to the default XML one
- */
- xmlHashRemoveEntry(catal->sgml, entry->name, NULL);
- entry->parent = catal->xml;
- entry->next = NULL;
- if (catal->xml->children == NULL)
- catal->xml->children = entry;
- else {
- xmlCatalogEntryPtr prev;
-
- prev = catal->xml->children;
- while (prev->next != NULL)
- prev = prev->next;
- prev->next = entry;
- }
-}
-
-/**
- * xmlConvertSGMLCatalog:
- * @catal: the catalog
- *
- * Convert all the SGML catalog entries as XML ones
- *
- * Returns the number of entries converted if successful, -1 otherwise
- */
-int
-xmlConvertSGMLCatalog(xmlCatalogPtr catal) {
-
- if ((catal == NULL) || (catal->type != XML_SGML_CATALOG_TYPE))
- return(-1);
-
- if (xmlDebugCatalogs) {
- xmlGenericError(xmlGenericErrorContext,
- "Converting SGML catalog to XML\n");
- }
- xmlHashScan(catal->sgml,
- (xmlHashScanner) xmlCatalogConvertEntry,
- &catal);
- return(0);
-}
-
-/************************************************************************
- * *
- * Helper function *
- * *
- ************************************************************************/
-
-/**
- * xmlCatalogUnWrapURN:
- * @urn: an "urn:publicid:" to unwrap
- *
- * Expand the URN into the equivalent Public Identifier
- *
- * Returns the new identifier or NULL, the string must be deallocated
- * by the caller.
- */
-static xmlChar *
-xmlCatalogUnWrapURN(const xmlChar *urn) {
- xmlChar result[2000];
- unsigned int i = 0;
-
- if (xmlStrncmp(urn, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1))
- return(NULL);
- urn += sizeof(XML_URN_PUBID) - 1;
-
- while (*urn != 0) {
- if (i > sizeof(result) - 4)
- break;
- if (*urn == '+') {
- result[i++] = ' ';
- urn++;
- } else if (*urn == ':') {
- result[i++] = '/';
- result[i++] = '/';
- urn++;
- } else if (*urn == ';') {
- result[i++] = ':';
- result[i++] = ':';
- urn++;
- } else if (*urn == '%') {
- if ((urn[1] == '2') && (urn[2] == 'B'))
- result[i++] = '+';
- else if ((urn[1] == '3') && (urn[2] == 'A'))
- result[i++] = ':';
- else if ((urn[1] == '2') && (urn[2] == 'F'))
- result[i++] = '/';
- else if ((urn[1] == '3') && (urn[2] == 'B'))
- result[i++] = ';';
- else if ((urn[1] == '2') && (urn[2] == '7'))
- result[i++] = '\'';
- else if ((urn[1] == '3') && (urn[2] == 'F'))
- result[i++] = '?';
- else if ((urn[1] == '2') && (urn[2] == '3'))
- result[i++] = '#';
- else if ((urn[1] == '2') && (urn[2] == '5'))
- result[i++] = '%';
- else {
- result[i++] = *urn;
- urn++;
- continue;
- }
- urn += 3;
- } else {
- result[i++] = *urn;
- urn++;
- }
- }
- result[i] = 0;
-
- return(xmlStrdup(result));
-}
-
-/**
- * xmlParseCatalogFile:
- * @filename: the filename
- *
- * parse an XML file and build a tree. It's like xmlParseFile()
- * except it bypass all catalog lookups.
- *
- * Returns the resulting document tree or NULL in case of error
- */
-
-xmlDocPtr
-xmlParseCatalogFile(const char *filename) {
- xmlDocPtr ret;
- xmlParserCtxtPtr ctxt;
- char *directory = NULL;
- xmlParserInputPtr inputStream;
- xmlParserInputBufferPtr buf;
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
-#ifdef LIBXML_SAX1_ENABLED
- if (xmlDefaultSAXHandler.error != NULL) {
- xmlDefaultSAXHandler.error(NULL, "out of memory\n");
- }
-#endif
- return(NULL);
- }
-
- buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
- if (buf == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- inputStream = xmlNewInputStream(ctxt);
- if (inputStream == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- inputStream->filename = (char *) xmlCanonicPath((const xmlChar *)filename);
- inputStream->buf = buf;
- xmlBufResetInput(buf->buffer, inputStream);
-
- inputPush(ctxt, inputStream);
- if ((ctxt->directory == NULL) && (directory == NULL))
- directory = xmlParserGetDirectory(filename);
- if ((ctxt->directory == NULL) && (directory != NULL))
- ctxt->directory = directory;
- ctxt->valid = 0;
- ctxt->validate = 0;
- ctxt->loadsubset = 0;
- ctxt->pedantic = 0;
- ctxt->dictNames = 1;
-
- xmlParseDocument(ctxt);
-
- if (ctxt->wellFormed)
- ret = ctxt->myDoc;
- else {
- ret = NULL;
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-/**
- * xmlLoadFileContent:
- * @filename: a file path
- *
- * Load a file content into memory.
- *
- * Returns a pointer to the 0 terminated string or NULL in case of error
- */
-static xmlChar *
-xmlLoadFileContent(const char *filename)
-{
-#ifdef HAVE_STAT
- int fd;
-#else
- FILE *fd;
-#endif
- int len;
- long size;
-
-#ifdef HAVE_STAT
- struct stat info;
-#endif
- xmlChar *content;
-
- if (filename == NULL)
- return (NULL);
-
-#ifdef HAVE_STAT
- if (stat(filename, &info) < 0)
- return (NULL);
-#endif
-
-#ifdef HAVE_STAT
- if ((fd = open(filename, O_RDONLY)) < 0)
-#else
- if ((fd = fopen(filename, "rb")) == NULL)
-#endif
- {
- return (NULL);
- }
-#ifdef HAVE_STAT
- size = info.st_size;
-#else
- if (fseek(fd, 0, SEEK_END) || (size = ftell(fd)) == EOF || fseek(fd, 0, SEEK_SET)) { /* File operations denied? ok, just close and return failure */
- fclose(fd);
- return (NULL);
- }
-#endif
- content = (xmlChar*)xmlMallocAtomic(size + 10);
- if (content == NULL) {
- xmlCatalogErrMemory("allocating catalog data");
-#ifdef HAVE_STAT
- close(fd);
-#else
- fclose(fd);
-#endif
- return (NULL);
- }
-#ifdef HAVE_STAT
- len = read(fd, content, size);
- close(fd);
-#else
- len = fread(content, 1, size, fd);
- fclose(fd);
-#endif
- if (len < 0) {
- xmlFree(content);
- return (NULL);
- }
- content[len] = 0;
-
- return(content);
-}
-
-/**
- * xmlCatalogNormalizePublic:
- * @pubID: the public ID string
- *
- * Normalizes the Public Identifier
- *
- * Implements 6.2. Public Identifier Normalization
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the new string or NULL, the string must be deallocated
- * by the caller.
- */
-static xmlChar *
-xmlCatalogNormalizePublic(const xmlChar *pubID)
-{
- int ok = 1;
- int white;
- const xmlChar *p;
- xmlChar *ret;
- xmlChar *q;
-
- if (pubID == NULL)
- return(NULL);
-
- white = 1;
- for (p = pubID;*p != 0 && ok;p++) {
- if (!xmlIsBlank_ch(*p))
- white = 0;
- else if (*p == 0x20 && !white)
- white = 1;
- else
- ok = 0;
- }
- if (ok && !white) /* is normalized */
- return(NULL);
-
- ret = xmlStrdup(pubID);
- q = ret;
- white = 0;
- for (p = pubID;*p != 0;p++) {
- if (xmlIsBlank_ch(*p)) {
- if (q != ret)
- white = 1;
- } else {
- if (white) {
- *(q++) = 0x20;
- white = 0;
- }
- *(q++) = *p;
- }
- }
- *q = 0;
- return(ret);
-}
-
-/************************************************************************
- * *
- * The XML Catalog parser *
- * *
- ************************************************************************/
-
-static xmlCatalogEntryPtr
-xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename);
-static void
-xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
- xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup);
-static xmlChar *
-xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
- const xmlChar *sysID);
-static xmlChar *
-xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI);
-
-
-/**
- * xmlGetXMLCatalogEntryType:
- * @name: the name
- *
- * lookup the internal type associated to an XML catalog entry name
- *
- * Returns the type associated with that name
- */
-static xmlCatalogEntryType
-xmlGetXMLCatalogEntryType(const xmlChar *name) {
- xmlCatalogEntryType type = XML_CATA_NONE;
- if (xmlStrEqual(name, (const xmlChar *) "system"))
- type = XML_CATA_SYSTEM;
- else if (xmlStrEqual(name, (const xmlChar *) "public"))
- type = XML_CATA_PUBLIC;
- else if (xmlStrEqual(name, (const xmlChar *) "rewriteSystem"))
- type = XML_CATA_REWRITE_SYSTEM;
- else if (xmlStrEqual(name, (const xmlChar *) "delegatePublic"))
- type = XML_CATA_DELEGATE_PUBLIC;
- else if (xmlStrEqual(name, (const xmlChar *) "delegateSystem"))
- type = XML_CATA_DELEGATE_SYSTEM;
- else if (xmlStrEqual(name, (const xmlChar *) "uri"))
- type = XML_CATA_URI;
- else if (xmlStrEqual(name, (const xmlChar *) "rewriteURI"))
- type = XML_CATA_REWRITE_URI;
- else if (xmlStrEqual(name, (const xmlChar *) "delegateURI"))
- type = XML_CATA_DELEGATE_URI;
- else if (xmlStrEqual(name, (const xmlChar *) "nextCatalog"))
- type = XML_CATA_NEXT_CATALOG;
- else if (xmlStrEqual(name, (const xmlChar *) "catalog"))
- type = XML_CATA_CATALOG;
- return(type);
-}
-
-/**
- * xmlParseXMLCatalogOneNode:
- * @cur: the XML node
- * @type: the type of Catalog entry
- * @name: the name of the node
- * @attrName: the attribute holding the value
- * @uriAttrName: the attribute holding the URI-Reference
- * @prefer: the PUBLIC vs. SYSTEM current preference value
- * @cgroup: the group which includes this node
- *
- * Finishes the examination of an XML tree node of a catalog and build
- * a Catalog entry from it.
- *
- * Returns the new Catalog entry node or NULL in case of error.
- */
-static xmlCatalogEntryPtr
-xmlParseXMLCatalogOneNode(xmlNodePtr cur, xmlCatalogEntryType type,
- const xmlChar *name, const xmlChar *attrName,
- const xmlChar *uriAttrName, xmlCatalogPrefer prefer,
- xmlCatalogEntryPtr cgroup) {
- int ok = 1;
- xmlChar *uriValue;
- xmlChar *nameValue = NULL;
- xmlChar *base = NULL;
- xmlChar *URL = NULL;
- xmlCatalogEntryPtr ret = NULL;
-
- if (attrName != NULL) {
- nameValue = xmlGetProp(cur, attrName);
- if (nameValue == NULL) {
- xmlCatalogErr(ret, cur, XML_CATALOG_MISSING_ATTR,
- "%s entry lacks '%s'\n", name, attrName, NULL);
- ok = 0;
- }
- }
- uriValue = xmlGetProp(cur, uriAttrName);
- if (uriValue == NULL) {
- xmlCatalogErr(ret, cur, XML_CATALOG_MISSING_ATTR,
- "%s entry lacks '%s'\n", name, uriAttrName, NULL);
- ok = 0;
- }
- if (!ok) {
- if (nameValue != NULL)
- xmlFree(nameValue);
- if (uriValue != NULL)
- xmlFree(uriValue);
- return(NULL);
- }
-
- base = xmlNodeGetBase(cur->doc, cur);
- URL = xmlBuildURI(uriValue, base);
- if (URL != NULL) {
- if (xmlDebugCatalogs > 1) {
- if (nameValue != NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Found %s: '%s' '%s'\n", name, nameValue, URL);
- else
- xmlGenericError(xmlGenericErrorContext,
- "Found %s: '%s'\n", name, URL);
- }
- ret = xmlNewCatalogEntry(type, nameValue, uriValue, URL, prefer, cgroup);
- } else {
- xmlCatalogErr(ret, cur, XML_CATALOG_ENTRY_BROKEN,
- "%s entry '%s' broken ?: %s\n", name, uriAttrName, uriValue);
- }
- if (nameValue != NULL)
- xmlFree(nameValue);
- if (uriValue != NULL)
- xmlFree(uriValue);
- if (base != NULL)
- xmlFree(base);
- if (URL != NULL)
- xmlFree(URL);
- return(ret);
-}
-
-/**
- * xmlParseXMLCatalogNode:
- * @cur: the XML node
- * @prefer: the PUBLIC vs. SYSTEM current preference value
- * @parent: the parent Catalog entry
- * @cgroup: the group which includes this node
- *
- * Examines an XML tree node of a catalog and build
- * a Catalog entry from it adding it to its parent. The examination can
- * be recursive.
- */
-static void
-xmlParseXMLCatalogNode(xmlNodePtr cur, xmlCatalogPrefer prefer,
- xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup)
-{
- xmlChar *base = NULL;
- xmlCatalogEntryPtr entry = NULL;
-
- if (cur == NULL)
- return;
- if (xmlStrEqual(cur->name, BAD_CAST "group")) {
- xmlChar *prop;
- xmlCatalogPrefer pref = XML_CATA_PREFER_NONE;
-
- prop = xmlGetProp(cur, BAD_CAST "prefer");
- if (prop != NULL) {
- if (xmlStrEqual(prop, BAD_CAST "system")) {
- prefer = XML_CATA_PREFER_SYSTEM;
- } else if (xmlStrEqual(prop, BAD_CAST "public")) {
- prefer = XML_CATA_PREFER_PUBLIC;
- } else {
- xmlCatalogErr(parent, cur, XML_CATALOG_PREFER_VALUE,
- "Invalid value for prefer: '%s'\n",
- prop, NULL, NULL);
- }
- xmlFree(prop);
- pref = prefer;
- }
- prop = xmlGetProp(cur, BAD_CAST "id");
- base = xmlGetNsProp(cur, BAD_CAST "base", XML_XML_NAMESPACE);
- entry = xmlNewCatalogEntry(XML_CATA_GROUP, prop, base, NULL, pref, cgroup);
- xmlFree(prop);
- } else if (xmlStrEqual(cur->name, BAD_CAST "public")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_PUBLIC,
- BAD_CAST "public", BAD_CAST "publicId", BAD_CAST "uri", prefer, cgroup);
- } else if (xmlStrEqual(cur->name, BAD_CAST "system")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_SYSTEM,
- BAD_CAST "system", BAD_CAST "systemId", BAD_CAST "uri", prefer, cgroup);
- } else if (xmlStrEqual(cur->name, BAD_CAST "rewriteSystem")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_SYSTEM,
- BAD_CAST "rewriteSystem", BAD_CAST "systemIdStartString",
- BAD_CAST "rewritePrefix", prefer, cgroup);
- } else if (xmlStrEqual(cur->name, BAD_CAST "delegatePublic")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_PUBLIC,
- BAD_CAST "delegatePublic", BAD_CAST "publicIdStartString",
- BAD_CAST "catalog", prefer, cgroup);
- } else if (xmlStrEqual(cur->name, BAD_CAST "delegateSystem")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_SYSTEM,
- BAD_CAST "delegateSystem", BAD_CAST "systemIdStartString",
- BAD_CAST "catalog", prefer, cgroup);
- } else if (xmlStrEqual(cur->name, BAD_CAST "uri")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_URI,
- BAD_CAST "uri", BAD_CAST "name",
- BAD_CAST "uri", prefer, cgroup);
- } else if (xmlStrEqual(cur->name, BAD_CAST "rewriteURI")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_REWRITE_URI,
- BAD_CAST "rewriteURI", BAD_CAST "uriStartString",
- BAD_CAST "rewritePrefix", prefer, cgroup);
- } else if (xmlStrEqual(cur->name, BAD_CAST "delegateURI")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_DELEGATE_URI,
- BAD_CAST "delegateURI", BAD_CAST "uriStartString",
- BAD_CAST "catalog", prefer, cgroup);
- } else if (xmlStrEqual(cur->name, BAD_CAST "nextCatalog")) {
- entry = xmlParseXMLCatalogOneNode(cur, XML_CATA_NEXT_CATALOG,
- BAD_CAST "nextCatalog", NULL,
- BAD_CAST "catalog", prefer, cgroup);
- }
- if (entry != NULL) {
- if (parent != NULL) {
- entry->parent = parent;
- if (parent->children == NULL)
- parent->children = entry;
- else {
- xmlCatalogEntryPtr prev;
-
- prev = parent->children;
- while (prev->next != NULL)
- prev = prev->next;
- prev->next = entry;
- }
- }
- if (entry->type == XML_CATA_GROUP) {
- /*
- * Recurse to propagate prefer to the subtree
- * (xml:base handling is automated)
- */
- xmlParseXMLCatalogNodeList(cur->children, prefer, parent, entry);
- }
- }
- if (base != NULL)
- xmlFree(base);
-}
-
-/**
- * xmlParseXMLCatalogNodeList:
- * @cur: the XML node list of siblings
- * @prefer: the PUBLIC vs. SYSTEM current preference value
- * @parent: the parent Catalog entry
- * @cgroup: the group which includes this list
- *
- * Examines a list of XML sibling nodes of a catalog and build
- * a list of Catalog entry from it adding it to the parent.
- * The examination will recurse to examine node subtrees.
- */
-static void
-xmlParseXMLCatalogNodeList(xmlNodePtr cur, xmlCatalogPrefer prefer,
- xmlCatalogEntryPtr parent, xmlCatalogEntryPtr cgroup) {
- while (cur != NULL) {
- if ((cur->ns != NULL) && (cur->ns->href != NULL) &&
- (xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) {
- xmlParseXMLCatalogNode(cur, prefer, parent, cgroup);
- }
- cur = cur->next;
- }
- /* TODO: sort the list according to REWRITE lengths and prefer value */
-}
-
-/**
- * xmlParseXMLCatalogFile:
- * @prefer: the PUBLIC vs. SYSTEM current preference value
- * @filename: the filename for the catalog
- *
- * Parses the catalog file to extract the XML tree and then analyze the
- * tree to build a list of Catalog entries corresponding to this catalog
- *
- * Returns the resulting Catalog entries list
- */
-static xmlCatalogEntryPtr
-xmlParseXMLCatalogFile(xmlCatalogPrefer prefer, const xmlChar *filename) {
- xmlDocPtr doc;
- xmlNodePtr cur;
- xmlChar *prop;
- xmlCatalogEntryPtr parent = NULL;
-
- if (filename == NULL)
- return(NULL);
-
- doc = xmlParseCatalogFile((const char *) filename);
- if (doc == NULL) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Failed to parse catalog %s\n", filename);
- return(NULL);
- }
-
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "%d Parsing catalog %s\n", xmlGetThreadId(), filename);
-
- cur = xmlDocGetRootElement(doc);
- if ((cur != NULL) && (xmlStrEqual(cur->name, BAD_CAST "catalog")) &&
- (cur->ns != NULL) && (cur->ns->href != NULL) &&
- (xmlStrEqual(cur->ns->href, XML_CATALOGS_NAMESPACE))) {
-
- parent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- (const xmlChar *)filename, NULL, prefer, NULL);
- if (parent == NULL) {
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- prop = xmlGetProp(cur, BAD_CAST "prefer");
- if (prop != NULL) {
- if (xmlStrEqual(prop, BAD_CAST "system")) {
- prefer = XML_CATA_PREFER_SYSTEM;
- } else if (xmlStrEqual(prop, BAD_CAST "public")) {
- prefer = XML_CATA_PREFER_PUBLIC;
- } else {
- xmlCatalogErr(NULL, cur, XML_CATALOG_PREFER_VALUE,
- "Invalid value for prefer: '%s'\n",
- prop, NULL, NULL);
- }
- xmlFree(prop);
- }
- cur = cur->children;
- xmlParseXMLCatalogNodeList(cur, prefer, parent, NULL);
- } else {
- xmlCatalogErr(NULL, (xmlNodePtr) doc, XML_CATALOG_NOT_CATALOG,
- "File %s is not an XML Catalog\n",
- filename, NULL, NULL);
- xmlFreeDoc(doc);
- return(NULL);
- }
- xmlFreeDoc(doc);
- return(parent);
-}
-
-/**
- * xmlFetchXMLCatalogFile:
- * @catal: an existing but incomplete catalog entry
- *
- * Fetch and parse the subcatalog referenced by an entry
- *
- * Returns 0 in case of success, -1 otherwise
- */
-static int
-xmlFetchXMLCatalogFile(xmlCatalogEntryPtr catal) {
- xmlCatalogEntryPtr doc;
-
- if (catal == NULL)
- return(-1);
- if (catal->URL == NULL)
- return(-1);
-
- /*
- * lock the whole catalog for modification
- */
- xmlRMutexLock(xmlCatalogMutex);
- if (catal->children != NULL) {
- /* Okay someone else did it in the meantime */
- xmlRMutexUnlock(xmlCatalogMutex);
- return(0);
- }
-
- if (xmlCatalogXMLFiles != NULL) {
- doc = (xmlCatalogEntryPtr)
- xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
- if (doc != NULL) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Found %s in file hash\n", catal->URL);
-
- if (catal->type == XML_CATA_CATALOG)
- catal->children = doc->children;
- else
- catal->children = doc;
- catal->dealloc = 0;
- xmlRMutexUnlock(xmlCatalogMutex);
- return(0);
- }
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "%s not found in file hash\n", catal->URL);
- }
-
- /*
- * Fetch and parse. Note that xmlParseXMLCatalogFile does not
- * use the existing catalog, there is no recursion allowed at
- * that level.
- */
- doc = xmlParseXMLCatalogFile(catal->prefer, catal->URL);
- if (doc == NULL) {
- catal->type = XML_CATA_BROKEN_CATALOG;
- xmlRMutexUnlock(xmlCatalogMutex);
- return(-1);
- }
-
- if (catal->type == XML_CATA_CATALOG)
- catal->children = doc->children;
- else
- catal->children = doc;
-
- doc->dealloc = 1;
-
- if (xmlCatalogXMLFiles == NULL)
- xmlCatalogXMLFiles = xmlHashCreate(10);
- if (xmlCatalogXMLFiles != NULL) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "%s added to file hash\n", catal->URL);
- xmlHashAddEntry(xmlCatalogXMLFiles, catal->URL, doc);
- }
- xmlRMutexUnlock(xmlCatalogMutex);
- return(0);
-}
-
-/************************************************************************
- * *
- * XML Catalog handling *
- * *
- ************************************************************************/
-
-/**
- * xmlAddXMLCatalog:
- * @catal: top of an XML catalog
- * @type: the type of record to add to the catalog
- * @orig: the system, public or prefix to match (or NULL)
- * @replace: the replacement value for the match
- *
- * Add an entry in the XML catalog, it may overwrite existing but
- * different entries.
- *
- * Returns 0 if successful, -1 otherwise
- */
-static int
-xmlAddXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *type,
- const xmlChar *orig, const xmlChar *replace) {
- xmlCatalogEntryPtr cur;
- xmlCatalogEntryType typ;
- int doregister = 0;
-
- if ((catal == NULL) ||
- ((catal->type != XML_CATA_CATALOG) &&
- (catal->type != XML_CATA_BROKEN_CATALOG)))
- return(-1);
- if (catal->children == NULL) {
- xmlFetchXMLCatalogFile(catal);
- }
- if (catal->children == NULL)
- doregister = 1;
-
- typ = xmlGetXMLCatalogEntryType(type);
- if (typ == XML_CATA_NONE) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Failed to add unknown element %s to catalog\n", type);
- return(-1);
- }
-
- cur = catal->children;
- /*
- * Might be a simple "update in place"
- */
- if (cur != NULL) {
- while (cur != NULL) {
- if ((orig != NULL) && (cur->type == typ) &&
- (xmlStrEqual(orig, cur->name))) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Updating element %s to catalog\n", type);
- if (cur->value != NULL)
- xmlFree(cur->value);
- if (cur->URL != NULL)
- xmlFree(cur->URL);
- cur->value = xmlStrdup(replace);
- cur->URL = xmlStrdup(replace);
- return(0);
- }
- if (cur->next == NULL)
- break;
- cur = cur->next;
- }
- }
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Adding element %s to catalog\n", type);
- if (cur == NULL)
- catal->children = xmlNewCatalogEntry(typ, orig, replace,
- NULL, catal->prefer, NULL);
- else
- cur->next = xmlNewCatalogEntry(typ, orig, replace,
- NULL, catal->prefer, NULL);
- if (doregister) {
- catal->type = XML_CATA_CATALOG;
- cur = (xmlCatalogEntryPtr)xmlHashLookup(xmlCatalogXMLFiles, catal->URL);
- if (cur != NULL)
- cur->children = catal->children;
- }
-
- return(0);
-}
-
-/**
- * xmlDelXMLCatalog:
- * @catal: top of an XML catalog
- * @value: the value to remove from the catalog
- *
- * Remove entries in the XML catalog where the value or the URI
- * is equal to @value
- *
- * Returns the number of entries removed if successful, -1 otherwise
- */
-static int
-xmlDelXMLCatalog(xmlCatalogEntryPtr catal, const xmlChar *value) {
- xmlCatalogEntryPtr cur;
- int ret = 0;
-
- if ((catal == NULL) ||
- ((catal->type != XML_CATA_CATALOG) &&
- (catal->type != XML_CATA_BROKEN_CATALOG)))
- return(-1);
- if (value == NULL)
- return(-1);
- if (catal->children == NULL) {
- xmlFetchXMLCatalogFile(catal);
- }
-
- /*
- * Scan the children
- */
- cur = catal->children;
- while (cur != NULL) {
- if (((cur->name != NULL) && (xmlStrEqual(value, cur->name))) ||
- (xmlStrEqual(value, cur->value))) {
- if (xmlDebugCatalogs) {
- if (cur->name != NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Removing element %s from catalog\n", cur->name);
- else
- xmlGenericError(xmlGenericErrorContext,
- "Removing element %s from catalog\n", cur->value);
- }
- cur->type = XML_CATA_REMOVED;
- }
- cur = cur->next;
- }
- return(ret);
-}
-
-/**
- * xmlCatalogXMLResolve:
- * @catal: a catalog list
- * @pubID: the public ID string
- * @sysID: the system ID string
- *
- * Do a complete resolution lookup of an External Identifier for a
- * list of catalog entries.
- *
- * Implements (or tries to) 7.1. External Identifier Resolution
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the URI of the resource or NULL if not found
- */
-static xmlChar *
-xmlCatalogXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
- const xmlChar *sysID) {
- xmlChar *ret = NULL;
- xmlCatalogEntryPtr cur;
- int haveDelegate = 0;
- int haveNext = 0;
-
- /*
- * protection against loops
- */
- if (catal->depth > MAX_CATAL_DEPTH) {
- xmlCatalogErr(catal, NULL, XML_CATALOG_RECURSION,
- "Detected recursion in catalog %s\n",
- catal->name, NULL, NULL);
- return(NULL);
- }
- catal->depth++;
-
- /*
- * First tries steps 2/ 3/ 4/ if a system ID is provided.
- */
- if (sysID != NULL) {
- xmlCatalogEntryPtr rewrite = NULL;
- int lenrewrite = 0, len;
- cur = catal;
- haveDelegate = 0;
- while (cur != NULL) {
- switch (cur->type) {
- case XML_CATA_SYSTEM:
- if (xmlStrEqual(sysID, cur->name)) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Found system match %s, using %s\n",
- cur->name, cur->URL);
- catal->depth--;
- return(xmlStrdup(cur->URL));
- }
- break;
- case XML_CATA_REWRITE_SYSTEM:
- len = xmlStrlen(cur->name);
- if ((len > lenrewrite) &&
- (!xmlStrncmp(sysID, cur->name, len))) {
- lenrewrite = len;
- rewrite = cur;
- }
- break;
- case XML_CATA_DELEGATE_SYSTEM:
- if (!xmlStrncmp(sysID, cur->name, xmlStrlen(cur->name)))
- haveDelegate++;
- break;
- case XML_CATA_NEXT_CATALOG:
- haveNext++;
- break;
- default:
- break;
- }
- cur = cur->next;
- }
- if (rewrite != NULL) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Using rewriting rule %s\n", rewrite->name);
- ret = xmlStrdup(rewrite->URL);
- if (ret != NULL)
- ret = xmlStrcat(ret, &sysID[lenrewrite]);
- catal->depth--;
- return(ret);
- }
- if (haveDelegate) {
- const xmlChar *delegates[MAX_DELEGATE];
- int nbList = 0, i;
-
- /*
- * Assume the entries have been sorted by decreasing substring
- * matches when the list was produced.
- */
- cur = catal;
- while (cur != NULL) {
- if ((cur->type == XML_CATA_DELEGATE_SYSTEM) &&
- (!xmlStrncmp(sysID, cur->name, xmlStrlen(cur->name)))) {
- for (i = 0;i < nbList;i++)
- if (xmlStrEqual(cur->URL, delegates[i]))
- break;
- if (i < nbList) {
- cur = cur->next;
- continue;
- }
- if (nbList < MAX_DELEGATE)
- delegates[nbList++] = cur->URL;
-
- if (cur->children == NULL) {
- xmlFetchXMLCatalogFile(cur);
- }
- if (cur->children != NULL) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Trying system delegate %s\n", cur->URL);
- ret = xmlCatalogListXMLResolve(
- cur->children, NULL, sysID);
- if (ret != NULL) {
- catal->depth--;
- return(ret);
- }
- }
- }
- cur = cur->next;
- }
- /*
- * Apply the cut algorithm explained in 4/
- */
- catal->depth--;
- return(XML_CATAL_BREAK);
- }
- }
- /*
- * Then tries 5/ 6/ if a public ID is provided
- */
- if (pubID != NULL) {
- cur = catal;
- haveDelegate = 0;
- while (cur != NULL) {
- switch (cur->type) {
- case XML_CATA_PUBLIC:
- if (xmlStrEqual(pubID, cur->name)) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Found public match %s\n", cur->name);
- catal->depth--;
- return(xmlStrdup(cur->URL));
- }
- break;
- case XML_CATA_DELEGATE_PUBLIC:
- if (!xmlStrncmp(pubID, cur->name, xmlStrlen(cur->name)) &&
- (cur->prefer == XML_CATA_PREFER_PUBLIC))
- haveDelegate++;
- break;
- case XML_CATA_NEXT_CATALOG:
- if (sysID == NULL)
- haveNext++;
- break;
- default:
- break;
- }
- cur = cur->next;
- }
- if (haveDelegate) {
- const xmlChar *delegates[MAX_DELEGATE];
- int nbList = 0, i;
-
- /*
- * Assume the entries have been sorted by decreasing substring
- * matches when the list was produced.
- */
- cur = catal;
- while (cur != NULL) {
- if ((cur->type == XML_CATA_DELEGATE_PUBLIC) &&
- (cur->prefer == XML_CATA_PREFER_PUBLIC) &&
- (!xmlStrncmp(pubID, cur->name, xmlStrlen(cur->name)))) {
-
- for (i = 0;i < nbList;i++)
- if (xmlStrEqual(cur->URL, delegates[i]))
- break;
- if (i < nbList) {
- cur = cur->next;
- continue;
- }
- if (nbList < MAX_DELEGATE)
- delegates[nbList++] = cur->URL;
-
- if (cur->children == NULL) {
- xmlFetchXMLCatalogFile(cur);
- }
- if (cur->children != NULL) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Trying public delegate %s\n", cur->URL);
- ret = xmlCatalogListXMLResolve(
- cur->children, pubID, NULL);
- if (ret != NULL) {
- catal->depth--;
- return(ret);
- }
- }
- }
- cur = cur->next;
- }
- /*
- * Apply the cut algorithm explained in 4/
- */
- catal->depth--;
- return(XML_CATAL_BREAK);
- }
- }
- if (haveNext) {
- cur = catal;
- while (cur != NULL) {
- if (cur->type == XML_CATA_NEXT_CATALOG) {
- if (cur->children == NULL) {
- xmlFetchXMLCatalogFile(cur);
- }
- if (cur->children != NULL) {
- ret = xmlCatalogListXMLResolve(cur->children, pubID, sysID);
- if (ret != NULL) {
- catal->depth--;
- return(ret);
- } else if (catal->depth > MAX_CATAL_DEPTH) {
- return(NULL);
- }
- }
- }
- cur = cur->next;
- }
- }
-
- catal->depth--;
- return(NULL);
-}
-
-/**
- * xmlCatalogXMLResolveURI:
- * @catal: a catalog list
- * @URI: the URI
- * @sysID: the system ID string
- *
- * Do a complete resolution lookup of an External Identifier for a
- * list of catalog entries.
- *
- * Implements (or tries to) 7.2.2. URI Resolution
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the URI of the resource or NULL if not found
- */
-static xmlChar *
-xmlCatalogXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) {
- xmlChar *ret = NULL;
- xmlCatalogEntryPtr cur;
- int haveDelegate = 0;
- int haveNext = 0;
- xmlCatalogEntryPtr rewrite = NULL;
- int lenrewrite = 0, len;
-
- if (catal == NULL)
- return(NULL);
-
- if (URI == NULL)
- return(NULL);
-
- if (catal->depth > MAX_CATAL_DEPTH) {
- xmlCatalogErr(catal, NULL, XML_CATALOG_RECURSION,
- "Detected recursion in catalog %s\n",
- catal->name, NULL, NULL);
- return(NULL);
- }
-
- /*
- * First tries steps 2/ 3/ 4/ if a system ID is provided.
- */
- cur = catal;
- haveDelegate = 0;
- while (cur != NULL) {
- switch (cur->type) {
- case XML_CATA_URI:
- if (xmlStrEqual(URI, cur->name)) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Found URI match %s\n", cur->name);
- return(xmlStrdup(cur->URL));
- }
- break;
- case XML_CATA_REWRITE_URI:
- len = xmlStrlen(cur->name);
- if ((len > lenrewrite) &&
- (!xmlStrncmp(URI, cur->name, len))) {
- lenrewrite = len;
- rewrite = cur;
- }
- break;
- case XML_CATA_DELEGATE_URI:
- if (!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name)))
- haveDelegate++;
- break;
- case XML_CATA_NEXT_CATALOG:
- haveNext++;
- break;
- default:
- break;
- }
- cur = cur->next;
- }
- if (rewrite != NULL) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Using rewriting rule %s\n", rewrite->name);
- ret = xmlStrdup(rewrite->URL);
- if (ret != NULL)
- ret = xmlStrcat(ret, &URI[lenrewrite]);
- return(ret);
- }
- if (haveDelegate) {
- const xmlChar *delegates[MAX_DELEGATE];
- int nbList = 0, i;
-
- /*
- * Assume the entries have been sorted by decreasing substring
- * matches when the list was produced.
- */
- cur = catal;
- while (cur != NULL) {
- if (((cur->type == XML_CATA_DELEGATE_SYSTEM) ||
- (cur->type == XML_CATA_DELEGATE_URI)) &&
- (!xmlStrncmp(URI, cur->name, xmlStrlen(cur->name)))) {
- for (i = 0;i < nbList;i++)
- if (xmlStrEqual(cur->URL, delegates[i]))
- break;
- if (i < nbList) {
- cur = cur->next;
- continue;
- }
- if (nbList < MAX_DELEGATE)
- delegates[nbList++] = cur->URL;
-
- if (cur->children == NULL) {
- xmlFetchXMLCatalogFile(cur);
- }
- if (cur->children != NULL) {
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Trying URI delegate %s\n", cur->URL);
- ret = xmlCatalogListXMLResolveURI(
- cur->children, URI);
- if (ret != NULL)
- return(ret);
- }
- }
- cur = cur->next;
- }
- /*
- * Apply the cut algorithm explained in 4/
- */
- return(XML_CATAL_BREAK);
- }
- if (haveNext) {
- cur = catal;
- while (cur != NULL) {
- if (cur->type == XML_CATA_NEXT_CATALOG) {
- if (cur->children == NULL) {
- xmlFetchXMLCatalogFile(cur);
- }
- if (cur->children != NULL) {
- ret = xmlCatalogListXMLResolveURI(cur->children, URI);
- if (ret != NULL)
- return(ret);
- }
- }
- cur = cur->next;
- }
- }
-
- return(NULL);
-}
-
-/**
- * xmlCatalogListXMLResolve:
- * @catal: a catalog list
- * @pubID: the public ID string
- * @sysID: the system ID string
- *
- * Do a complete resolution lookup of an External Identifier for a
- * list of catalogs
- *
- * Implements (or tries to) 7.1. External Identifier Resolution
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the URI of the resource or NULL if not found
- */
-static xmlChar *
-xmlCatalogListXMLResolve(xmlCatalogEntryPtr catal, const xmlChar *pubID,
- const xmlChar *sysID) {
- xmlChar *ret = NULL;
- xmlChar *urnID = NULL;
- xmlChar *normid;
-
- if (catal == NULL)
- return(NULL);
- if ((pubID == NULL) && (sysID == NULL))
- return(NULL);
-
- normid = xmlCatalogNormalizePublic(pubID);
- if (normid != NULL)
- pubID = (*normid != 0 ? normid : NULL);
-
- if (!xmlStrncmp(pubID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
- urnID = xmlCatalogUnWrapURN(pubID);
- if (xmlDebugCatalogs) {
- if (urnID == NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Public URN ID %s expanded to NULL\n", pubID);
- else
- xmlGenericError(xmlGenericErrorContext,
- "Public URN ID expanded to %s\n", urnID);
- }
- ret = xmlCatalogListXMLResolve(catal, urnID, sysID);
- if (urnID != NULL)
- xmlFree(urnID);
- if (normid != NULL)
- xmlFree(normid);
- return(ret);
- }
- if (!xmlStrncmp(sysID, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
- urnID = xmlCatalogUnWrapURN(sysID);
- if (xmlDebugCatalogs) {
- if (urnID == NULL)
- xmlGenericError(xmlGenericErrorContext,
- "System URN ID %s expanded to NULL\n", sysID);
- else
- xmlGenericError(xmlGenericErrorContext,
- "System URN ID expanded to %s\n", urnID);
- }
- if (pubID == NULL)
- ret = xmlCatalogListXMLResolve(catal, urnID, NULL);
- else if (xmlStrEqual(pubID, urnID))
- ret = xmlCatalogListXMLResolve(catal, pubID, NULL);
- else {
- ret = xmlCatalogListXMLResolve(catal, pubID, urnID);
- }
- if (urnID != NULL)
- xmlFree(urnID);
- if (normid != NULL)
- xmlFree(normid);
- return(ret);
- }
- while (catal != NULL) {
- if (catal->type == XML_CATA_CATALOG) {
- if (catal->children == NULL) {
- xmlFetchXMLCatalogFile(catal);
- }
- if (catal->children != NULL) {
- ret = xmlCatalogXMLResolve(catal->children, pubID, sysID);
- if (ret != NULL) {
- break;
- } else if ((catal->children != NULL) &&
- (catal->children->depth > MAX_CATAL_DEPTH)) {
- ret = NULL;
- break;
- }
- }
- }
- catal = catal->next;
- }
- if (normid != NULL)
- xmlFree(normid);
- return(ret);
-}
-
-/**
- * xmlCatalogListXMLResolveURI:
- * @catal: a catalog list
- * @URI: the URI
- *
- * Do a complete resolution lookup of an URI for a list of catalogs
- *
- * Implements (or tries to) 7.2. URI Resolution
- * from http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Returns the URI of the resource or NULL if not found
- */
-static xmlChar *
-xmlCatalogListXMLResolveURI(xmlCatalogEntryPtr catal, const xmlChar *URI) {
- xmlChar *ret = NULL;
- xmlChar *urnID = NULL;
-
- if (catal == NULL)
- return(NULL);
- if (URI == NULL)
- return(NULL);
-
- if (!xmlStrncmp(URI, BAD_CAST XML_URN_PUBID, sizeof(XML_URN_PUBID) - 1)) {
- urnID = xmlCatalogUnWrapURN(URI);
- if (xmlDebugCatalogs) {
- if (urnID == NULL)
- xmlGenericError(xmlGenericErrorContext,
- "URN ID %s expanded to NULL\n", URI);
- else
- xmlGenericError(xmlGenericErrorContext,
- "URN ID expanded to %s\n", urnID);
- }
- ret = xmlCatalogListXMLResolve(catal, urnID, NULL);
- if (urnID != NULL)
- xmlFree(urnID);
- return(ret);
- }
- while (catal != NULL) {
- if (catal->type == XML_CATA_CATALOG) {
- if (catal->children == NULL) {
- xmlFetchXMLCatalogFile(catal);
- }
- if (catal->children != NULL) {
- ret = xmlCatalogXMLResolveURI(catal->children, URI);
- if (ret != NULL)
- return(ret);
- }
- }
- catal = catal->next;
- }
- return(ret);
-}
-
-/************************************************************************
- * *
- * The SGML Catalog parser *
- * *
- ************************************************************************/
-
-
-#define RAW *cur
-#define NEXT cur++;
-#define SKIP(x) cur += x;
-
-#define SKIP_BLANKS while (IS_BLANK_CH(*cur)) NEXT;
-
-/**
- * xmlParseSGMLCatalogComment:
- * @cur: the current character
- *
- * Skip a comment in an SGML catalog
- *
- * Returns new current character
- */
-static const xmlChar *
-xmlParseSGMLCatalogComment(const xmlChar *cur) {
- if ((cur[0] != '-') || (cur[1] != '-'))
- return(cur);
- SKIP(2);
- while ((cur[0] != 0) && ((cur[0] != '-') || ((cur[1] != '-'))))
- NEXT;
- if (cur[0] == 0) {
- return(NULL);
- }
- return(cur + 2);
-}
-
-/**
- * xmlParseSGMLCatalogPubid:
- * @cur: the current character
- * @id: the return location
- *
- * Parse an SGML catalog ID
- *
- * Returns new current character and store the value in @id
- */
-static const xmlChar *
-xmlParseSGMLCatalogPubid(const xmlChar *cur, xmlChar **id) {
- xmlChar *buf = NULL, *tmp;
- int len = 0;
- int size = 50;
- xmlChar stop;
- int count = 0;
-
- *id = NULL;
-
- if (RAW == '"') {
- NEXT;
- stop = '"';
- } else if (RAW == '\'') {
- NEXT;
- stop = '\'';
- } else {
- stop = ' ';
- }
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlCatalogErrMemory("allocating public ID");
- return(NULL);
- }
- while (IS_PUBIDCHAR_CH(*cur) || (*cur == '?')) {
- if ((*cur == stop) && (stop != ' '))
- break;
- if ((stop == ' ') && (IS_BLANK_CH(*cur)))
- break;
- if (len + 1 >= size) {
- size *= 2;
- tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlCatalogErrMemory("allocating public ID");
- xmlFree(buf);
- return(NULL);
- }
- buf = tmp;
- }
- buf[len++] = *cur;
- count++;
- NEXT;
- }
- buf[len] = 0;
- if (stop == ' ') {
- if (!IS_BLANK_CH(*cur)) {
- xmlFree(buf);
- return(NULL);
- }
- } else {
- if (*cur != stop) {
- xmlFree(buf);
- return(NULL);
- }
- NEXT;
- }
- *id = buf;
- return(cur);
-}
-
-/**
- * xmlParseSGMLCatalogName:
- * @cur: the current character
- * @name: the return location
- *
- * Parse an SGML catalog name
- *
- * Returns new current character and store the value in @name
- */
-static const xmlChar *
-xmlParseSGMLCatalogName(const xmlChar *cur, xmlChar **name) {
- xmlChar buf[XML_MAX_NAMELEN + 5];
- int len = 0;
- int c;
-
- *name = NULL;
-
- /*
- * Handler for more complex cases
- */
- c = *cur;
- if ((!IS_LETTER(c) && (c != '_') && (c != ':'))) {
- return(NULL);
- }
-
- while (((IS_LETTER(c)) || (IS_DIGIT(c)) ||
- (c == '.') || (c == '-') ||
- (c == '_') || (c == ':'))) {
- buf[len++] = c;
- cur++;
- c = *cur;
- if (len >= XML_MAX_NAMELEN)
- return(NULL);
- }
- *name = xmlStrndup(buf, len);
- return(cur);
-}
-
-/**
- * xmlGetSGMLCatalogEntryType:
- * @name: the entry name
- *
- * Get the Catalog entry type for a given SGML Catalog name
- *
- * Returns Catalog entry type
- */
-static xmlCatalogEntryType
-xmlGetSGMLCatalogEntryType(const xmlChar *name) {
- xmlCatalogEntryType type = XML_CATA_NONE;
- if (xmlStrEqual(name, (const xmlChar *) "SYSTEM"))
- type = SGML_CATA_SYSTEM;
- else if (xmlStrEqual(name, (const xmlChar *) "PUBLIC"))
- type = SGML_CATA_PUBLIC;
- else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE"))
- type = SGML_CATA_DELEGATE;
- else if (xmlStrEqual(name, (const xmlChar *) "ENTITY"))
- type = SGML_CATA_ENTITY;
- else if (xmlStrEqual(name, (const xmlChar *) "DOCTYPE"))
- type = SGML_CATA_DOCTYPE;
- else if (xmlStrEqual(name, (const xmlChar *) "LINKTYPE"))
- type = SGML_CATA_LINKTYPE;
- else if (xmlStrEqual(name, (const xmlChar *) "NOTATION"))
- type = SGML_CATA_NOTATION;
- else if (xmlStrEqual(name, (const xmlChar *) "SGMLDECL"))
- type = SGML_CATA_SGMLDECL;
- else if (xmlStrEqual(name, (const xmlChar *) "DOCUMENT"))
- type = SGML_CATA_DOCUMENT;
- else if (xmlStrEqual(name, (const xmlChar *) "CATALOG"))
- type = SGML_CATA_CATALOG;
- else if (xmlStrEqual(name, (const xmlChar *) "BASE"))
- type = SGML_CATA_BASE;
- return(type);
-}
-
-/**
- * xmlParseSGMLCatalog:
- * @catal: the SGML Catalog
- * @value: the content of the SGML Catalog serialization
- * @file: the filepath for the catalog
- * @super: should this be handled as a Super Catalog in which case
- * parsing is not recursive
- *
- * Parse an SGML catalog content and fill up the @catal hash table with
- * the new entries found.
- *
- * Returns 0 in case of success, -1 in case of error.
- */
-static int
-xmlParseSGMLCatalog(xmlCatalogPtr catal, const xmlChar *value,
- const char *file, int super) {
- const xmlChar *cur = value;
- xmlChar *base = NULL;
- int res;
-
- if ((cur == NULL) || (file == NULL))
- return(-1);
- base = xmlStrdup((const xmlChar *) file);
-
- while ((cur != NULL) && (cur[0] != 0)) {
- SKIP_BLANKS;
- if (cur[0] == 0)
- break;
- if ((cur[0] == '-') && (cur[1] == '-')) {
- cur = xmlParseSGMLCatalogComment(cur);
- if (cur == NULL) {
- /* error */
- break;
- }
- } else {
- xmlChar *sysid = NULL;
- xmlChar *name = NULL;
- xmlCatalogEntryType type = XML_CATA_NONE;
-
- cur = xmlParseSGMLCatalogName(cur, &name);
- if (name == NULL) {
- /* error */
- break;
- }
- if (!IS_BLANK_CH(*cur)) {
- /* error */
- break;
- }
- SKIP_BLANKS;
- if (xmlStrEqual(name, (const xmlChar *) "SYSTEM"))
- type = SGML_CATA_SYSTEM;
- else if (xmlStrEqual(name, (const xmlChar *) "PUBLIC"))
- type = SGML_CATA_PUBLIC;
- else if (xmlStrEqual(name, (const xmlChar *) "DELEGATE"))
- type = SGML_CATA_DELEGATE;
- else if (xmlStrEqual(name, (const xmlChar *) "ENTITY"))
- type = SGML_CATA_ENTITY;
- else if (xmlStrEqual(name, (const xmlChar *) "DOCTYPE"))
- type = SGML_CATA_DOCTYPE;
- else if (xmlStrEqual(name, (const xmlChar *) "LINKTYPE"))
- type = SGML_CATA_LINKTYPE;
- else if (xmlStrEqual(name, (const xmlChar *) "NOTATION"))
- type = SGML_CATA_NOTATION;
- else if (xmlStrEqual(name, (const xmlChar *) "SGMLDECL"))
- type = SGML_CATA_SGMLDECL;
- else if (xmlStrEqual(name, (const xmlChar *) "DOCUMENT"))
- type = SGML_CATA_DOCUMENT;
- else if (xmlStrEqual(name, (const xmlChar *) "CATALOG"))
- type = SGML_CATA_CATALOG;
- else if (xmlStrEqual(name, (const xmlChar *) "BASE"))
- type = SGML_CATA_BASE;
- else if (xmlStrEqual(name, (const xmlChar *) "OVERRIDE")) {
- xmlFree(name);
- cur = xmlParseSGMLCatalogName(cur, &name);
- if (name == NULL) {
- /* error */
- break;
- }
- xmlFree(name);
- continue;
- }
- xmlFree(name);
- name = NULL;
-
- switch(type) {
- case SGML_CATA_ENTITY:
- if (*cur == '%')
- type = SGML_CATA_PENTITY;
- case SGML_CATA_PENTITY:
- case SGML_CATA_DOCTYPE:
- case SGML_CATA_LINKTYPE:
- case SGML_CATA_NOTATION:
- cur = xmlParseSGMLCatalogName(cur, &name);
- if (cur == NULL) {
- /* error */
- break;
- }
- if (!IS_BLANK_CH(*cur)) {
- /* error */
- break;
- }
- SKIP_BLANKS;
- cur = xmlParseSGMLCatalogPubid(cur, &sysid);
- if (cur == NULL) {
- /* error */
- break;
- }
- break;
- case SGML_CATA_PUBLIC:
- case SGML_CATA_SYSTEM:
- case SGML_CATA_DELEGATE:
- cur = xmlParseSGMLCatalogPubid(cur, &name);
- if (cur == NULL) {
- /* error */
- break;
- }
- if (type != SGML_CATA_SYSTEM) {
- xmlChar *normid;
-
- normid = xmlCatalogNormalizePublic(name);
- if (normid != NULL) {
- if (name != NULL)
- xmlFree(name);
- if (*normid != 0)
- name = normid;
- else {
- xmlFree(normid);
- name = NULL;
- }
- }
- }
- if (!IS_BLANK_CH(*cur)) {
- /* error */
- break;
- }
- SKIP_BLANKS;
- cur = xmlParseSGMLCatalogPubid(cur, &sysid);
- if (cur == NULL) {
- /* error */
- break;
- }
- break;
- case SGML_CATA_BASE:
- case SGML_CATA_CATALOG:
- case SGML_CATA_DOCUMENT:
- case SGML_CATA_SGMLDECL:
- cur = xmlParseSGMLCatalogPubid(cur, &sysid);
- if (cur == NULL) {
- /* error */
- break;
- }
- break;
- default:
- break;
- }
- if (cur == NULL) {
- if (name != NULL)
- xmlFree(name);
- if (sysid != NULL)
- xmlFree(sysid);
- break;
- } else if (type == SGML_CATA_BASE) {
- if (base != NULL)
- xmlFree(base);
- base = xmlStrdup(sysid);
- } else if ((type == SGML_CATA_PUBLIC) ||
- (type == SGML_CATA_SYSTEM)) {
- xmlChar *filename;
-
- filename = xmlBuildURI(sysid, base);
- if (filename != NULL) {
- xmlCatalogEntryPtr entry;
-
- entry = xmlNewCatalogEntry(type, name, filename,
- NULL, XML_CATA_PREFER_NONE, NULL);
- res = xmlHashAddEntry(catal->sgml, name, entry);
- if (res < 0) {
- xmlFreeCatalogEntry(entry);
- }
- xmlFree(filename);
- }
-
- } else if (type == SGML_CATA_CATALOG) {
- if (super) {
- xmlCatalogEntryPtr entry;
-
- entry = xmlNewCatalogEntry(type, sysid, NULL, NULL,
- XML_CATA_PREFER_NONE, NULL);
- res = xmlHashAddEntry(catal->sgml, sysid, entry);
- if (res < 0) {
- xmlFreeCatalogEntry(entry);
- }
- } else {
- xmlChar *filename;
-
- filename = xmlBuildURI(sysid, base);
- if (filename != NULL) {
- xmlExpandCatalog(catal, (const char *)filename);
- xmlFree(filename);
- }
- }
- }
- /*
- * drop anything else we won't handle it
- */
- if (name != NULL)
- xmlFree(name);
- if (sysid != NULL)
- xmlFree(sysid);
- }
- }
- if (base != NULL)
- xmlFree(base);
- if (cur == NULL)
- return(-1);
- return(0);
-}
-
-/************************************************************************
- * *
- * SGML Catalog handling *
- * *
- ************************************************************************/
-
-/**
- * xmlCatalogGetSGMLPublic:
- * @catal: an SGML catalog hash
- * @pubID: the public ID string
- *
- * Try to lookup the catalog local reference associated to a public ID
- *
- * Returns the local resource if found or NULL otherwise.
- */
-static const xmlChar *
-xmlCatalogGetSGMLPublic(xmlHashTablePtr catal, const xmlChar *pubID) {
- xmlCatalogEntryPtr entry;
- xmlChar *normid;
-
- if (catal == NULL)
- return(NULL);
-
- normid = xmlCatalogNormalizePublic(pubID);
- if (normid != NULL)
- pubID = (*normid != 0 ? normid : NULL);
-
- entry = (xmlCatalogEntryPtr) xmlHashLookup(catal, pubID);
- if (entry == NULL) {
- if (normid != NULL)
- xmlFree(normid);
- return(NULL);
- }
- if (entry->type == SGML_CATA_PUBLIC) {
- if (normid != NULL)
- xmlFree(normid);
- return(entry->URL);
- }
- if (normid != NULL)
- xmlFree(normid);
- return(NULL);
-}
-
-/**
- * xmlCatalogGetSGMLSystem:
- * @catal: an SGML catalog hash
- * @sysID: the system ID string
- *
- * Try to lookup the catalog local reference for a system ID
- *
- * Returns the local resource if found or NULL otherwise.
- */
-static const xmlChar *
-xmlCatalogGetSGMLSystem(xmlHashTablePtr catal, const xmlChar *sysID) {
- xmlCatalogEntryPtr entry;
-
- if (catal == NULL)
- return(NULL);
-
- entry = (xmlCatalogEntryPtr) xmlHashLookup(catal, sysID);
- if (entry == NULL)
- return(NULL);
- if (entry->type == SGML_CATA_SYSTEM)
- return(entry->URL);
- return(NULL);
-}
-
-/**
- * xmlCatalogSGMLResolve:
- * @catal: the SGML catalog
- * @pubID: the public ID string
- * @sysID: the system ID string
- *
- * Do a complete resolution lookup of an External Identifier
- *
- * Returns the URI of the resource or NULL if not found
- */
-static const xmlChar *
-xmlCatalogSGMLResolve(xmlCatalogPtr catal, const xmlChar *pubID,
- const xmlChar *sysID) {
- const xmlChar *ret = NULL;
-
- if (catal->sgml == NULL)
- return(NULL);
-
- if (pubID != NULL)
- ret = xmlCatalogGetSGMLPublic(catal->sgml, pubID);
- if (ret != NULL)
- return(ret);
- if (sysID != NULL)
- ret = xmlCatalogGetSGMLSystem(catal->sgml, sysID);
- if (ret != NULL)
- return(ret);
- return(NULL);
-}
-
-/************************************************************************
- * *
- * Specific Public interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlLoadSGMLSuperCatalog:
- * @filename: a file path
- *
- * Load an SGML super catalog. It won't expand CATALOG or DELEGATE
- * references. This is only needed for manipulating SGML Super Catalogs
- * like adding and removing CATALOG or DELEGATE entries.
- *
- * Returns the catalog parsed or NULL in case of error
- */
-xmlCatalogPtr
-xmlLoadSGMLSuperCatalog(const char *filename)
-{
- xmlChar *content;
- xmlCatalogPtr catal;
- int ret;
-
- content = xmlLoadFileContent(filename);
- if (content == NULL)
- return(NULL);
-
- catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
- if (catal == NULL) {
- xmlFree(content);
- return(NULL);
- }
-
- ret = xmlParseSGMLCatalog(catal, content, filename, 1);
- xmlFree(content);
- if (ret < 0) {
- xmlFreeCatalog(catal);
- return(NULL);
- }
- return (catal);
-}
-
-/**
- * xmlLoadACatalog:
- * @filename: a file path
- *
- * Load the catalog and build the associated data structures.
- * This can be either an XML Catalog or an SGML Catalog
- * It will recurse in SGML CATALOG entries. On the other hand XML
- * Catalogs are not handled recursively.
- *
- * Returns the catalog parsed or NULL in case of error
- */
-xmlCatalogPtr
-xmlLoadACatalog(const char *filename)
-{
- xmlChar *content;
- xmlChar *first;
- xmlCatalogPtr catal;
- int ret;
-
- content = xmlLoadFileContent(filename);
- if (content == NULL)
- return(NULL);
-
-
- first = content;
-
- while ((*first != 0) && (*first != '-') && (*first != '<') &&
- (!(((*first >= 'A') && (*first <= 'Z')) ||
- ((*first >= 'a') && (*first <= 'z')))))
- first++;
-
- if (*first != '<') {
- catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
- if (catal == NULL) {
- xmlFree(content);
- return(NULL);
- }
- ret = xmlParseSGMLCatalog(catal, content, filename, 0);
- if (ret < 0) {
- xmlFreeCatalog(catal);
- xmlFree(content);
- return(NULL);
- }
- } else {
- catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE, xmlCatalogDefaultPrefer);
- if (catal == NULL) {
- xmlFree(content);
- return(NULL);
- }
- catal->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- NULL, BAD_CAST filename, xmlCatalogDefaultPrefer, NULL);
- }
- xmlFree(content);
- return (catal);
-}
-
-/**
- * xmlExpandCatalog:
- * @catal: a catalog
- * @filename: a file path
- *
- * Load the catalog and expand the existing catal structure.
- * This can be either an XML Catalog or an SGML Catalog
- *
- * Returns 0 in case of success, -1 in case of error
- */
-static int
-xmlExpandCatalog(xmlCatalogPtr catal, const char *filename)
-{
- int ret;
-
- if ((catal == NULL) || (filename == NULL))
- return(-1);
-
-
- if (catal->type == XML_SGML_CATALOG_TYPE) {
- xmlChar *content;
-
- content = xmlLoadFileContent(filename);
- if (content == NULL)
- return(-1);
-
- ret = xmlParseSGMLCatalog(catal, content, filename, 0);
- if (ret < 0) {
- xmlFree(content);
- return(-1);
- }
- xmlFree(content);
- } else {
- xmlCatalogEntryPtr tmp, cur;
- tmp = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- NULL, BAD_CAST filename, xmlCatalogDefaultPrefer, NULL);
-
- cur = catal->xml;
- if (cur == NULL) {
- catal->xml = tmp;
- } else {
- while (cur->next != NULL) cur = cur->next;
- cur->next = tmp;
- }
- }
- return (0);
-}
-
-/**
- * xmlACatalogResolveSystem:
- * @catal: a Catalog
- * @sysID: the system ID string
- *
- * Try to lookup the catalog resource for a system ID
- *
- * Returns the resource if found or NULL otherwise, the value returned
- * must be freed by the caller.
- */
-xmlChar *
-xmlACatalogResolveSystem(xmlCatalogPtr catal, const xmlChar *sysID) {
- xmlChar *ret = NULL;
-
- if ((sysID == NULL) || (catal == NULL))
- return(NULL);
-
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Resolve sysID %s\n", sysID);
-
- if (catal->type == XML_XML_CATALOG_TYPE) {
- ret = xmlCatalogListXMLResolve(catal->xml, NULL, sysID);
- if (ret == XML_CATAL_BREAK)
- ret = NULL;
- } else {
- const xmlChar *sgml;
-
- sgml = xmlCatalogGetSGMLSystem(catal->sgml, sysID);
- if (sgml != NULL)
- ret = xmlStrdup(sgml);
- }
- return(ret);
-}
-
-/**
- * xmlACatalogResolvePublic:
- * @catal: a Catalog
- * @pubID: the public ID string
- *
- * Try to lookup the catalog local reference associated to a public ID in that catalog
- *
- * Returns the local resource if found or NULL otherwise, the value returned
- * must be freed by the caller.
- */
-xmlChar *
-xmlACatalogResolvePublic(xmlCatalogPtr catal, const xmlChar *pubID) {
- xmlChar *ret = NULL;
-
- if ((pubID == NULL) || (catal == NULL))
- return(NULL);
-
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Resolve pubID %s\n", pubID);
-
- if (catal->type == XML_XML_CATALOG_TYPE) {
- ret = xmlCatalogListXMLResolve(catal->xml, pubID, NULL);
- if (ret == XML_CATAL_BREAK)
- ret = NULL;
- } else {
- const xmlChar *sgml;
-
- sgml = xmlCatalogGetSGMLPublic(catal->sgml, pubID);
- if (sgml != NULL)
- ret = xmlStrdup(sgml);
- }
- return(ret);
-}
-
-/**
- * xmlACatalogResolve:
- * @catal: a Catalog
- * @pubID: the public ID string
- * @sysID: the system ID string
- *
- * Do a complete resolution lookup of an External Identifier
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- * by the caller.
- */
-xmlChar *
-xmlACatalogResolve(xmlCatalogPtr catal, const xmlChar * pubID,
- const xmlChar * sysID)
-{
- xmlChar *ret = NULL;
-
- if (((pubID == NULL) && (sysID == NULL)) || (catal == NULL))
- return (NULL);
-
- if (xmlDebugCatalogs) {
- if ((pubID != NULL) && (sysID != NULL)) {
- xmlGenericError(xmlGenericErrorContext,
- "Resolve: pubID %s sysID %s\n", pubID, sysID);
- } else if (pubID != NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Resolve: pubID %s\n", pubID);
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "Resolve: sysID %s\n", sysID);
- }
- }
-
- if (catal->type == XML_XML_CATALOG_TYPE) {
- ret = xmlCatalogListXMLResolve(catal->xml, pubID, sysID);
- if (ret == XML_CATAL_BREAK)
- ret = NULL;
- } else {
- const xmlChar *sgml;
-
- sgml = xmlCatalogSGMLResolve(catal, pubID, sysID);
- if (sgml != NULL)
- ret = xmlStrdup(sgml);
- }
- return (ret);
-}
-
-/**
- * xmlACatalogResolveURI:
- * @catal: a Catalog
- * @URI: the URI
- *
- * Do a complete resolution lookup of an URI
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- * by the caller.
- */
-xmlChar *
-xmlACatalogResolveURI(xmlCatalogPtr catal, const xmlChar *URI) {
- xmlChar *ret = NULL;
-
- if ((URI == NULL) || (catal == NULL))
- return(NULL);
-
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Resolve URI %s\n", URI);
-
- if (catal->type == XML_XML_CATALOG_TYPE) {
- ret = xmlCatalogListXMLResolveURI(catal->xml, URI);
- if (ret == XML_CATAL_BREAK)
- ret = NULL;
- } else {
- const xmlChar *sgml;
-
- sgml = xmlCatalogSGMLResolve(catal, NULL, URI);
- if (sgml != NULL)
- ret = xmlStrdup(sgml);
- }
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlACatalogDump:
- * @catal: a Catalog
- * @out: the file.
- *
- * Dump the given catalog to the given file.
- */
-void
-xmlACatalogDump(xmlCatalogPtr catal, FILE *out) {
- if ((out == NULL) || (catal == NULL))
- return;
-
- if (catal->type == XML_XML_CATALOG_TYPE) {
- xmlDumpXMLCatalog(out, catal->xml);
- } else {
- xmlHashScan(catal->sgml,
- (xmlHashScanner) xmlCatalogDumpEntry, out);
- }
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlACatalogAdd:
- * @catal: a Catalog
- * @type: the type of record to add to the catalog
- * @orig: the system, public or prefix to match
- * @replace: the replacement value for the match
- *
- * Add an entry in the catalog, it may overwrite existing but
- * different entries.
- *
- * Returns 0 if successful, -1 otherwise
- */
-int
-xmlACatalogAdd(xmlCatalogPtr catal, const xmlChar * type,
- const xmlChar * orig, const xmlChar * replace)
-{
- int res = -1;
-
- if (catal == NULL)
- return(-1);
-
- if (catal->type == XML_XML_CATALOG_TYPE) {
- res = xmlAddXMLCatalog(catal->xml, type, orig, replace);
- } else {
- xmlCatalogEntryType cattype;
-
- cattype = xmlGetSGMLCatalogEntryType(type);
- if (cattype != XML_CATA_NONE) {
- xmlCatalogEntryPtr entry;
-
- entry = xmlNewCatalogEntry(cattype, orig, replace, NULL,
- XML_CATA_PREFER_NONE, NULL);
- if (catal->sgml == NULL)
- catal->sgml = xmlHashCreate(10);
- res = xmlHashAddEntry(catal->sgml, orig, entry);
- }
- }
- return (res);
-}
-
-/**
- * xmlACatalogRemove:
- * @catal: a Catalog
- * @value: the value to remove
- *
- * Remove an entry from the catalog
- *
- * Returns the number of entries removed if successful, -1 otherwise
- */
-int
-xmlACatalogRemove(xmlCatalogPtr catal, const xmlChar *value) {
- int res = -1;
-
- if ((catal == NULL) || (value == NULL))
- return(-1);
-
- if (catal->type == XML_XML_CATALOG_TYPE) {
- res = xmlDelXMLCatalog(catal->xml, value);
- } else {
- res = xmlHashRemoveEntry(catal->sgml, value,
- (xmlHashDeallocator) xmlFreeCatalogEntry);
- if (res == 0)
- res = 1;
- }
- return(res);
-}
-
-/**
- * xmlNewCatalog:
- * @sgml: should this create an SGML catalog
- *
- * create a new Catalog.
- *
- * Returns the xmlCatalogPtr or NULL in case of error
- */
-xmlCatalogPtr
-xmlNewCatalog(int sgml) {
- xmlCatalogPtr catal = NULL;
-
- if (sgml) {
- catal = xmlCreateNewCatalog(XML_SGML_CATALOG_TYPE,
- xmlCatalogDefaultPrefer);
- if ((catal != NULL) && (catal->sgml == NULL))
- catal->sgml = xmlHashCreate(10);
- } else
- catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
- xmlCatalogDefaultPrefer);
- return(catal);
-}
-
-/**
- * xmlCatalogIsEmpty:
- * @catal: should this create an SGML catalog
- *
- * Check is a catalog is empty
- *
- * Returns 1 if the catalog is empty, 0 if not, amd -1 in case of error.
- */
-int
-xmlCatalogIsEmpty(xmlCatalogPtr catal) {
- if (catal == NULL)
- return(-1);
-
- if (catal->type == XML_XML_CATALOG_TYPE) {
- if (catal->xml == NULL)
- return(1);
- if ((catal->xml->type != XML_CATA_CATALOG) &&
- (catal->xml->type != XML_CATA_BROKEN_CATALOG))
- return(-1);
- if (catal->xml->children == NULL)
- return(1);
- return(0);
- } else {
- int res;
-
- if (catal->sgml == NULL)
- return(1);
- res = xmlHashSize(catal->sgml);
- if (res == 0)
- return(1);
- if (res < 0)
- return(-1);
- }
- return(0);
-}
-
-/************************************************************************
- * *
- * Public interfaces manipulating the global shared default catalog *
- * *
- ************************************************************************/
-
-/**
- * xmlInitializeCatalogData:
- *
- * Do the catalog initialization only of global data, doesn't try to load
- * any catalog actually.
- * this function is not thread safe, catalog initialization should
- * preferably be done once at startup
- */
-static void
-xmlInitializeCatalogData(void) {
- if (xmlCatalogInitialized != 0)
- return;
-
- if (getenv("XML_DEBUG_CATALOG"))
- xmlDebugCatalogs = 1;
- xmlCatalogMutex = xmlNewRMutex();
-
- xmlCatalogInitialized = 1;
-}
-/**
- * xmlInitializeCatalog:
- *
- * Do the catalog initialization.
- * this function is not thread safe, catalog initialization should
- * preferably be done once at startup
- */
-void
-xmlInitializeCatalog(void) {
- if (xmlCatalogInitialized != 0)
- return;
-
- xmlInitializeCatalogData();
- xmlRMutexLock(xmlCatalogMutex);
-
- if (getenv("XML_DEBUG_CATALOG"))
- xmlDebugCatalogs = 1;
-
- if (xmlDefaultCatalog == NULL) {
- const char *catalogs;
- char *path;
- const char *cur, *paths;
- xmlCatalogPtr catal;
- xmlCatalogEntryPtr *nextent;
-
- catalogs = (const char *) getenv("XML_CATALOG_FILES");
- if (catalogs == NULL)
-#if defined(_WIN32) && defined(_MSC_VER)
- {
- void* hmodule;
- hmodule = GetModuleHandleA("libxml2.dll");
- if (hmodule == NULL)
- hmodule = GetModuleHandleA(NULL);
- if (hmodule != NULL) {
- char buf[256];
- unsigned long len = GetModuleFileNameA(hmodule, buf, 255);
- if (len != 0) {
- char* p = &(buf[len]);
- while (*p != '\\' && p > buf)
- p--;
- if (p != buf) {
- xmlChar* uri;
- strncpy(p, "\\..\\etc\\catalog", 255 - (p - buf));
- uri = xmlCanonicPath((const xmlChar*)buf);
- if (uri != NULL) {
- strncpy(XML_XML_DEFAULT_CATALOG, uri, 255);
- xmlFree(uri);
- }
- }
- }
- }
- catalogs = XML_XML_DEFAULT_CATALOG;
- }
-#else
- catalogs = XML_XML_DEFAULT_CATALOG;
-#endif
-
- catal = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
- xmlCatalogDefaultPrefer);
- if (catal != NULL) {
- /* the XML_CATALOG_FILES envvar is allowed to contain a
- space-separated list of entries. */
- cur = catalogs;
- nextent = &catal->xml;
- while (*cur != '\0') {
- while (xmlIsBlank_ch(*cur))
- cur++;
- if (*cur != 0) {
- paths = cur;
- while ((*cur != 0) && (!xmlIsBlank_ch(*cur)))
- cur++;
- path = (char *) xmlStrndup((const xmlChar *)paths, cur - paths);
- if (path != NULL) {
- *nextent = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- NULL, BAD_CAST path, xmlCatalogDefaultPrefer, NULL);
- if (*nextent != NULL)
- nextent = &((*nextent)->next);
- xmlFree(path);
- }
- }
- }
- xmlDefaultCatalog = catal;
- }
- }
-
- xmlRMutexUnlock(xmlCatalogMutex);
-}
-
-
-/**
- * xmlLoadCatalog:
- * @filename: a file path
- *
- * Load the catalog and makes its definitions effective for the default
- * external entity loader. It will recurse in SGML CATALOG entries.
- * this function is not thread safe, catalog initialization should
- * preferably be done once at startup
- *
- * Returns 0 in case of success -1 in case of error
- */
-int
-xmlLoadCatalog(const char *filename)
-{
- int ret;
- xmlCatalogPtr catal;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalogData();
-
- xmlRMutexLock(xmlCatalogMutex);
-
- if (xmlDefaultCatalog == NULL) {
- catal = xmlLoadACatalog(filename);
- if (catal == NULL) {
- xmlRMutexUnlock(xmlCatalogMutex);
- return(-1);
- }
-
- xmlDefaultCatalog = catal;
- xmlRMutexUnlock(xmlCatalogMutex);
- return(0);
- }
-
- ret = xmlExpandCatalog(xmlDefaultCatalog, filename);
- xmlRMutexUnlock(xmlCatalogMutex);
- return(ret);
-}
-
-/**
- * xmlLoadCatalogs:
- * @pathss: a list of directories separated by a colon or a space.
- *
- * Load the catalogs and makes their definitions effective for the default
- * external entity loader.
- * this function is not thread safe, catalog initialization should
- * preferably be done once at startup
- */
-void
-xmlLoadCatalogs(const char *pathss) {
- const char *cur;
- const char *paths;
- xmlChar *path;
-#ifdef _WIN32
- int i, iLen;
-#endif
-
- if (pathss == NULL)
- return;
-
- cur = pathss;
- while (*cur != 0) {
- while (xmlIsBlank_ch(*cur)) cur++;
- if (*cur != 0) {
- paths = cur;
- while ((*cur != 0) && (*cur != PATH_SEPARATOR) && (!xmlIsBlank_ch(*cur)))
- cur++;
- path = xmlStrndup((const xmlChar *)paths, cur - paths);
-#ifdef _WIN32
- iLen = strlen((const char*)path);
- for(i = 0; i < iLen; i++) {
- if(path[i] == '\\') {
- path[i] = '/';
- }
- }
-#endif
- if (path != NULL) {
- xmlLoadCatalog((const char *) path);
- xmlFree(path);
- }
- }
- while (*cur == PATH_SEPARATOR)
- cur++;
- }
-}
-
-/**
- * xmlCatalogCleanup:
- *
- * Free up all the memory associated with catalogs
- */
-void
-xmlCatalogCleanup(void) {
- if (xmlCatalogInitialized == 0)
- return;
-
- xmlRMutexLock(xmlCatalogMutex);
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Catalogs cleanup\n");
- if (xmlCatalogXMLFiles != NULL)
- xmlHashFree(xmlCatalogXMLFiles,
- (xmlHashDeallocator)xmlFreeCatalogHashEntryList);
- xmlCatalogXMLFiles = NULL;
- if (xmlDefaultCatalog != NULL)
- xmlFreeCatalog(xmlDefaultCatalog);
- xmlDefaultCatalog = NULL;
- xmlDebugCatalogs = 0;
- xmlCatalogInitialized = 0;
- xmlRMutexUnlock(xmlCatalogMutex);
- xmlFreeRMutex(xmlCatalogMutex);
-}
-
-/**
- * xmlCatalogResolveSystem:
- * @sysID: the system ID string
- *
- * Try to lookup the catalog resource for a system ID
- *
- * Returns the resource if found or NULL otherwise, the value returned
- * must be freed by the caller.
- */
-xmlChar *
-xmlCatalogResolveSystem(const xmlChar *sysID) {
- xmlChar *ret;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- ret = xmlACatalogResolveSystem(xmlDefaultCatalog, sysID);
- return(ret);
-}
-
-/**
- * xmlCatalogResolvePublic:
- * @pubID: the public ID string
- *
- * Try to lookup the catalog reference associated to a public ID
- *
- * Returns the resource if found or NULL otherwise, the value returned
- * must be freed by the caller.
- */
-xmlChar *
-xmlCatalogResolvePublic(const xmlChar *pubID) {
- xmlChar *ret;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- ret = xmlACatalogResolvePublic(xmlDefaultCatalog, pubID);
- return(ret);
-}
-
-/**
- * xmlCatalogResolve:
- * @pubID: the public ID string
- * @sysID: the system ID string
- *
- * Do a complete resolution lookup of an External Identifier
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- * by the caller.
- */
-xmlChar *
-xmlCatalogResolve(const xmlChar *pubID, const xmlChar *sysID) {
- xmlChar *ret;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- ret = xmlACatalogResolve(xmlDefaultCatalog, pubID, sysID);
- return(ret);
-}
-
-/**
- * xmlCatalogResolveURI:
- * @URI: the URI
- *
- * Do a complete resolution lookup of an URI
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- * by the caller.
- */
-xmlChar *
-xmlCatalogResolveURI(const xmlChar *URI) {
- xmlChar *ret;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- ret = xmlACatalogResolveURI(xmlDefaultCatalog, URI);
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlCatalogDump:
- * @out: the file.
- *
- * Dump all the global catalog content to the given file.
- */
-void
-xmlCatalogDump(FILE *out) {
- if (out == NULL)
- return;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- xmlACatalogDump(xmlDefaultCatalog, out);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlCatalogAdd:
- * @type: the type of record to add to the catalog
- * @orig: the system, public or prefix to match
- * @replace: the replacement value for the match
- *
- * Add an entry in the catalog, it may overwrite existing but
- * different entries.
- * If called before any other catalog routine, allows to override the
- * default shared catalog put in place by xmlInitializeCatalog();
- *
- * Returns 0 if successful, -1 otherwise
- */
-int
-xmlCatalogAdd(const xmlChar *type, const xmlChar *orig, const xmlChar *replace) {
- int res = -1;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalogData();
-
- xmlRMutexLock(xmlCatalogMutex);
- /*
- * Specific case where one want to override the default catalog
- * put in place by xmlInitializeCatalog();
- */
- if ((xmlDefaultCatalog == NULL) &&
- (xmlStrEqual(type, BAD_CAST "catalog"))) {
- xmlDefaultCatalog = xmlCreateNewCatalog(XML_XML_CATALOG_TYPE,
- xmlCatalogDefaultPrefer);
- xmlDefaultCatalog->xml = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL,
- orig, NULL, xmlCatalogDefaultPrefer, NULL);
-
- xmlRMutexUnlock(xmlCatalogMutex);
- return(0);
- }
-
- res = xmlACatalogAdd(xmlDefaultCatalog, type, orig, replace);
- xmlRMutexUnlock(xmlCatalogMutex);
- return(res);
-}
-
-/**
- * xmlCatalogRemove:
- * @value: the value to remove
- *
- * Remove an entry from the catalog
- *
- * Returns the number of entries removed if successful, -1 otherwise
- */
-int
-xmlCatalogRemove(const xmlChar *value) {
- int res;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- xmlRMutexLock(xmlCatalogMutex);
- res = xmlACatalogRemove(xmlDefaultCatalog, value);
- xmlRMutexUnlock(xmlCatalogMutex);
- return(res);
-}
-
-/**
- * xmlCatalogConvert:
- *
- * Convert all the SGML catalog entries as XML ones
- *
- * Returns the number of entries converted if successful, -1 otherwise
- */
-int
-xmlCatalogConvert(void) {
- int res = -1;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- xmlRMutexLock(xmlCatalogMutex);
- res = xmlConvertSGMLCatalog(xmlDefaultCatalog);
- xmlRMutexUnlock(xmlCatalogMutex);
- return(res);
-}
-
-/************************************************************************
- * *
- * Public interface manipulating the common preferences *
- * *
- ************************************************************************/
-
-/**
- * xmlCatalogGetDefaults:
- *
- * Used to get the user preference w.r.t. to what catalogs should
- * be accepted
- *
- * Returns the current xmlCatalogAllow value
- */
-xmlCatalogAllow
-xmlCatalogGetDefaults(void) {
- return(xmlCatalogDefaultAllow);
-}
-
-/**
- * xmlCatalogSetDefaults:
- * @allow: what catalogs should be accepted
- *
- * Used to set the user preference w.r.t. to what catalogs should
- * be accepted
- */
-void
-xmlCatalogSetDefaults(xmlCatalogAllow allow) {
- if (xmlDebugCatalogs) {
- switch (allow) {
- case XML_CATA_ALLOW_NONE:
- xmlGenericError(xmlGenericErrorContext,
- "Disabling catalog usage\n");
- break;
- case XML_CATA_ALLOW_GLOBAL:
- xmlGenericError(xmlGenericErrorContext,
- "Allowing only global catalogs\n");
- break;
- case XML_CATA_ALLOW_DOCUMENT:
- xmlGenericError(xmlGenericErrorContext,
- "Allowing only catalogs from the document\n");
- break;
- case XML_CATA_ALLOW_ALL:
- xmlGenericError(xmlGenericErrorContext,
- "Allowing all catalogs\n");
- break;
- }
- }
- xmlCatalogDefaultAllow = allow;
-}
-
-/**
- * xmlCatalogSetDefaultPrefer:
- * @prefer: the default preference for delegation
- *
- * Allows to set the preference between public and system for deletion
- * in XML Catalog resolution. C.f. section 4.1.1 of the spec
- * Values accepted are XML_CATA_PREFER_PUBLIC or XML_CATA_PREFER_SYSTEM
- *
- * Returns the previous value of the default preference for delegation
- */
-xmlCatalogPrefer
-xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer) {
- xmlCatalogPrefer ret = xmlCatalogDefaultPrefer;
-
- if (prefer == XML_CATA_PREFER_NONE)
- return(ret);
-
- if (xmlDebugCatalogs) {
- switch (prefer) {
- case XML_CATA_PREFER_PUBLIC:
- xmlGenericError(xmlGenericErrorContext,
- "Setting catalog preference to PUBLIC\n");
- break;
- case XML_CATA_PREFER_SYSTEM:
- xmlGenericError(xmlGenericErrorContext,
- "Setting catalog preference to SYSTEM\n");
- break;
- default:
- return(ret);
- }
- }
- xmlCatalogDefaultPrefer = prefer;
- return(ret);
-}
-
-/**
- * xmlCatalogSetDebug:
- * @level: the debug level of catalogs required
- *
- * Used to set the debug level for catalog operation, 0 disable
- * debugging, 1 enable it
- *
- * Returns the previous value of the catalog debugging level
- */
-int
-xmlCatalogSetDebug(int level) {
- int ret = xmlDebugCatalogs;
-
- if (level <= 0)
- xmlDebugCatalogs = 0;
- else
- xmlDebugCatalogs = level;
- return(ret);
-}
-
-/************************************************************************
- * *
- * Minimal interfaces used for per-document catalogs by the parser *
- * *
- ************************************************************************/
-
-/**
- * xmlCatalogFreeLocal:
- * @catalogs: a document's list of catalogs
- *
- * Free up the memory associated to the catalog list
- */
-void
-xmlCatalogFreeLocal(void *catalogs) {
- xmlCatalogEntryPtr catal;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- catal = (xmlCatalogEntryPtr) catalogs;
- if (catal != NULL)
- xmlFreeCatalogEntryList(catal);
-}
-
-
-/**
- * xmlCatalogAddLocal:
- * @catalogs: a document's list of catalogs
- * @URL: the URL to a new local catalog
- *
- * Add the new entry to the catalog list
- *
- * Returns the updated list
- */
-void *
-xmlCatalogAddLocal(void *catalogs, const xmlChar *URL) {
- xmlCatalogEntryPtr catal, add;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- if (URL == NULL)
- return(catalogs);
-
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Adding document catalog %s\n", URL);
-
- add = xmlNewCatalogEntry(XML_CATA_CATALOG, NULL, URL, NULL,
- xmlCatalogDefaultPrefer, NULL);
- if (add == NULL)
- return(catalogs);
-
- catal = (xmlCatalogEntryPtr) catalogs;
- if (catal == NULL)
- return((void *) add);
-
- while (catal->next != NULL)
- catal = catal->next;
- catal->next = add;
- return(catalogs);
-}
-
-/**
- * xmlCatalogLocalResolve:
- * @catalogs: a document's list of catalogs
- * @pubID: the public ID string
- * @sysID: the system ID string
- *
- * Do a complete resolution lookup of an External Identifier using a
- * document's private catalog list
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- * by the caller.
- */
-xmlChar *
-xmlCatalogLocalResolve(void *catalogs, const xmlChar *pubID,
- const xmlChar *sysID) {
- xmlCatalogEntryPtr catal;
- xmlChar *ret;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- if ((pubID == NULL) && (sysID == NULL))
- return(NULL);
-
- if (xmlDebugCatalogs) {
- if ((pubID != NULL) && (sysID != NULL)) {
- xmlGenericError(xmlGenericErrorContext,
- "Local Resolve: pubID %s sysID %s\n", pubID, sysID);
- } else if (pubID != NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Local Resolve: pubID %s\n", pubID);
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "Local Resolve: sysID %s\n", sysID);
- }
- }
-
- catal = (xmlCatalogEntryPtr) catalogs;
- if (catal == NULL)
- return(NULL);
- ret = xmlCatalogListXMLResolve(catal, pubID, sysID);
- if ((ret != NULL) && (ret != XML_CATAL_BREAK))
- return(ret);
- return(NULL);
-}
-
-/**
- * xmlCatalogLocalResolveURI:
- * @catalogs: a document's list of catalogs
- * @URI: the URI
- *
- * Do a complete resolution lookup of an URI using a
- * document's private catalog list
- *
- * Returns the URI of the resource or NULL if not found, it must be freed
- * by the caller.
- */
-xmlChar *
-xmlCatalogLocalResolveURI(void *catalogs, const xmlChar *URI) {
- xmlCatalogEntryPtr catal;
- xmlChar *ret;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- if (URI == NULL)
- return(NULL);
-
- if (xmlDebugCatalogs)
- xmlGenericError(xmlGenericErrorContext,
- "Resolve URI %s\n", URI);
-
- catal = (xmlCatalogEntryPtr) catalogs;
- if (catal == NULL)
- return(NULL);
- ret = xmlCatalogListXMLResolveURI(catal, URI);
- if ((ret != NULL) && (ret != XML_CATAL_BREAK))
- return(ret);
- return(NULL);
-}
-
-/************************************************************************
- * *
- * Deprecated interfaces *
- * *
- ************************************************************************/
-/**
- * xmlCatalogGetSystem:
- * @sysID: the system ID string
- *
- * Try to lookup the catalog reference associated to a system ID
- * DEPRECATED, use xmlCatalogResolveSystem()
- *
- * Returns the resource if found or NULL otherwise.
- */
-const xmlChar *
-xmlCatalogGetSystem(const xmlChar *sysID) {
- xmlChar *ret;
- static xmlChar result[1000];
- static int msg = 0;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- if (msg == 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Use of deprecated xmlCatalogGetSystem() call\n");
- msg++;
- }
-
- if (sysID == NULL)
- return(NULL);
-
- /*
- * Check first the XML catalogs
- */
- if (xmlDefaultCatalog != NULL) {
- ret = xmlCatalogListXMLResolve(xmlDefaultCatalog->xml, NULL, sysID);
- if ((ret != NULL) && (ret != XML_CATAL_BREAK)) {
- snprintf((char *) result, sizeof(result) - 1, "%s", (char *) ret);
- result[sizeof(result) - 1] = 0;
- return(result);
- }
- }
-
- if (xmlDefaultCatalog != NULL)
- return(xmlCatalogGetSGMLSystem(xmlDefaultCatalog->sgml, sysID));
- return(NULL);
-}
-
-/**
- * xmlCatalogGetPublic:
- * @pubID: the public ID string
- *
- * Try to lookup the catalog reference associated to a public ID
- * DEPRECATED, use xmlCatalogResolvePublic()
- *
- * Returns the resource if found or NULL otherwise.
- */
-const xmlChar *
-xmlCatalogGetPublic(const xmlChar *pubID) {
- xmlChar *ret;
- static xmlChar result[1000];
- static int msg = 0;
-
- if (!xmlCatalogInitialized)
- xmlInitializeCatalog();
-
- if (msg == 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Use of deprecated xmlCatalogGetPublic() call\n");
- msg++;
- }
-
- if (pubID == NULL)
- return(NULL);
-
- /*
- * Check first the XML catalogs
- */
- if (xmlDefaultCatalog != NULL) {
- ret = xmlCatalogListXMLResolve(xmlDefaultCatalog->xml, pubID, NULL);
- if ((ret != NULL) && (ret != XML_CATAL_BREAK)) {
- snprintf((char *) result, sizeof(result) - 1, "%s", (char *) ret);
- result[sizeof(result) - 1] = 0;
- return(result);
- }
- }
-
- if (xmlDefaultCatalog != NULL)
- return(xmlCatalogGetSGMLPublic(xmlDefaultCatalog->sgml, pubID));
- return(NULL);
-}
-
-#define bottom_catalog
-#include "elfgcchack.h"
-#endif /* LIBXML_CATALOG_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/chvalid.c b/external/libxml2_android/jni/libxml2/chvalid.c
deleted file mode 100644
index 06e8db06..00000000
--- a/external/libxml2_android/jni/libxml2/chvalid.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
- * chvalid.c: this module implements the character range
- * validation APIs
- *
- * This file is automatically generated from the cvs source
- * definition files using the genChRanges.py Python script
- *
- * Generation date: Mon Mar 27 11:09:48 2006
- * Sources: chvalid.def
- * William Brack <wbrack@mmm.com.hk>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-#include <libxml/chvalid.h>
-
-/*
- * The initial tables ({func_name}_tab) are used to validate whether a
- * single-byte character is within the specified group. Each table
- * contains 256 bytes, with each byte representing one of the 256
- * possible characters. If the table byte is set, the character is
- * allowed.
- *
- */
-const unsigned char xmlIsPubidChar_tab[256] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
- 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01,
- 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01,
- 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00 };
-
-static const xmlChSRange xmlIsBaseChar_srng[] = { {0x100, 0x131},
- {0x134, 0x13e}, {0x141, 0x148}, {0x14a, 0x17e}, {0x180, 0x1c3},
- {0x1cd, 0x1f0}, {0x1f4, 0x1f5}, {0x1fa, 0x217}, {0x250, 0x2a8},
- {0x2bb, 0x2c1}, {0x386, 0x386}, {0x388, 0x38a}, {0x38c, 0x38c},
- {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3d6}, {0x3da, 0x3da},
- {0x3dc, 0x3dc}, {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3f3},
- {0x401, 0x40c}, {0x40e, 0x44f}, {0x451, 0x45c}, {0x45e, 0x481},
- {0x490, 0x4c4}, {0x4c7, 0x4c8}, {0x4cb, 0x4cc}, {0x4d0, 0x4eb},
- {0x4ee, 0x4f5}, {0x4f8, 0x4f9}, {0x531, 0x556}, {0x559, 0x559},
- {0x561, 0x586}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a},
- {0x641, 0x64a}, {0x671, 0x6b7}, {0x6ba, 0x6be}, {0x6c0, 0x6ce},
- {0x6d0, 0x6d3}, {0x6d5, 0x6d5}, {0x6e5, 0x6e6}, {0x905, 0x939},
- {0x93d, 0x93d}, {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990},
- {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9},
- {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a},
- {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33},
- {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e},
- {0xa72, 0xa74}, {0xa85, 0xa8b}, {0xa8d, 0xa8d}, {0xa8f, 0xa91},
- {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9},
- {0xabd, 0xabd}, {0xae0, 0xae0}, {0xb05, 0xb0c}, {0xb0f, 0xb10},
- {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb36, 0xb39},
- {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb85, 0xb8a},
- {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c},
- {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5},
- {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28},
- {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c},
- {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9},
- {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10},
- {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xe01, 0xe2e},
- {0xe30, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45}, {0xe81, 0xe82},
- {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d},
- {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5},
- {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeae}, {0xeb0, 0xeb0},
- {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xf40, 0xf47},
- {0xf49, 0xf69}, {0x10a0, 0x10c5}, {0x10d0, 0x10f6}, {0x1100, 0x1100},
- {0x1102, 0x1103}, {0x1105, 0x1107}, {0x1109, 0x1109}, {0x110b, 0x110c},
- {0x110e, 0x1112}, {0x113c, 0x113c}, {0x113e, 0x113e}, {0x1140, 0x1140},
- {0x114c, 0x114c}, {0x114e, 0x114e}, {0x1150, 0x1150}, {0x1154, 0x1155},
- {0x1159, 0x1159}, {0x115f, 0x1161}, {0x1163, 0x1163}, {0x1165, 0x1165},
- {0x1167, 0x1167}, {0x1169, 0x1169}, {0x116d, 0x116e}, {0x1172, 0x1173},
- {0x1175, 0x1175}, {0x119e, 0x119e}, {0x11a8, 0x11a8}, {0x11ab, 0x11ab},
- {0x11ae, 0x11af}, {0x11b7, 0x11b8}, {0x11ba, 0x11ba}, {0x11bc, 0x11c2},
- {0x11eb, 0x11eb}, {0x11f0, 0x11f0}, {0x11f9, 0x11f9}, {0x1e00, 0x1e9b},
- {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15}, {0x1f18, 0x1f1d}, {0x1f20, 0x1f45},
- {0x1f48, 0x1f4d}, {0x1f50, 0x1f57}, {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b},
- {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d}, {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc},
- {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3},
- {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc},
- {0x2126, 0x2126}, {0x212a, 0x212b}, {0x212e, 0x212e}, {0x2180, 0x2182},
- {0x3041, 0x3094}, {0x30a1, 0x30fa}, {0x3105, 0x312c}, {0xac00, 0xd7a3}};
-const xmlChRangeGroup xmlIsBaseCharGroup =
- {197, 0, xmlIsBaseChar_srng, (xmlChLRangePtr)0};
-
-static const xmlChSRange xmlIsChar_srng[] = { {0x100, 0xd7ff},
- {0xe000, 0xfffd}};
-static const xmlChLRange xmlIsChar_lrng[] = { {0x10000, 0x10ffff}};
-const xmlChRangeGroup xmlIsCharGroup =
- {2, 1, xmlIsChar_srng, xmlIsChar_lrng};
-
-static const xmlChSRange xmlIsCombining_srng[] = { {0x300, 0x345},
- {0x360, 0x361}, {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
- {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
- {0x64b, 0x652}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6dd, 0x6df},
- {0x6e0, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x901, 0x903},
- {0x93c, 0x93c}, {0x93e, 0x94c}, {0x94d, 0x94d}, {0x951, 0x954},
- {0x962, 0x963}, {0x981, 0x983}, {0x9bc, 0x9bc}, {0x9be, 0x9be},
- {0x9bf, 0x9bf}, {0x9c0, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
- {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa02, 0xa02}, {0xa3c, 0xa3c},
- {0xa3e, 0xa3e}, {0xa3f, 0xa3f}, {0xa40, 0xa42}, {0xa47, 0xa48},
- {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa83}, {0xabc, 0xabc},
- {0xabe, 0xac5}, {0xac7, 0xac9}, {0xacb, 0xacd}, {0xb01, 0xb03},
- {0xb3c, 0xb3c}, {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d},
- {0xb56, 0xb57}, {0xb82, 0xb83}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8},
- {0xbca, 0xbcd}, {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44},
- {0xc46, 0xc48}, {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83},
- {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
- {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
- {0xd57, 0xd57}, {0xe31, 0xe31}, {0xe34, 0xe3a}, {0xe47, 0xe4e},
- {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc}, {0xec8, 0xecd},
- {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37}, {0xf39, 0xf39},
- {0xf3e, 0xf3e}, {0xf3f, 0xf3f}, {0xf71, 0xf84}, {0xf86, 0xf8b},
- {0xf90, 0xf95}, {0xf97, 0xf97}, {0xf99, 0xfad}, {0xfb1, 0xfb7},
- {0xfb9, 0xfb9}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1}, {0x302a, 0x302f},
- {0x3099, 0x3099}, {0x309a, 0x309a}};
-const xmlChRangeGroup xmlIsCombiningGroup =
- {95, 0, xmlIsCombining_srng, (xmlChLRangePtr)0};
-
-static const xmlChSRange xmlIsDigit_srng[] = { {0x660, 0x669},
- {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f},
- {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f},
- {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9},
- {0xf20, 0xf29}};
-const xmlChRangeGroup xmlIsDigitGroup =
- {14, 0, xmlIsDigit_srng, (xmlChLRangePtr)0};
-
-static const xmlChSRange xmlIsExtender_srng[] = { {0x2d0, 0x2d0},
- {0x2d1, 0x2d1}, {0x387, 0x387}, {0x640, 0x640}, {0xe46, 0xe46},
- {0xec6, 0xec6}, {0x3005, 0x3005}, {0x3031, 0x3035}, {0x309d, 0x309e},
- {0x30fc, 0x30fe}};
-const xmlChRangeGroup xmlIsExtenderGroup =
- {10, 0, xmlIsExtender_srng, (xmlChLRangePtr)0};
-
-static const xmlChSRange xmlIsIdeographic_srng[] = { {0x3007, 0x3007},
- {0x3021, 0x3029}, {0x4e00, 0x9fa5}};
-const xmlChRangeGroup xmlIsIdeographicGroup =
- {3, 0, xmlIsIdeographic_srng, (xmlChLRangePtr)0};
-
-
-/**
- * xmlCharInRange:
- * @val: character to be validated
- * @rptr: pointer to range to be used to validate
- *
- * Does a binary search of the range table to determine if char
- * is valid
- *
- * Returns: true if character valid, false otherwise
- */
-int
-xmlCharInRange (unsigned int val, const xmlChRangeGroup *rptr) {
- int low, high, mid;
- const xmlChSRange *sptr;
- const xmlChLRange *lptr;
-
- if (rptr == NULL) return(0);
- if (val < 0x10000) { /* is val in 'short' or 'long' array? */
- if (rptr->nbShortRange == 0)
- return 0;
- low = 0;
- high = rptr->nbShortRange - 1;
- sptr = rptr->shortRange;
- while (low <= high) {
- mid = (low + high) / 2;
- if ((unsigned short) val < sptr[mid].low) {
- high = mid - 1;
- } else {
- if ((unsigned short) val > sptr[mid].high) {
- low = mid + 1;
- } else {
- return 1;
- }
- }
- }
- } else {
- if (rptr->nbLongRange == 0) {
- return 0;
- }
- low = 0;
- high = rptr->nbLongRange - 1;
- lptr = rptr->longRange;
- while (low <= high) {
- mid = (low + high) / 2;
- if (val < lptr[mid].low) {
- high = mid - 1;
- } else {
- if (val > lptr[mid].high) {
- low = mid + 1;
- } else {
- return 1;
- }
- }
- }
- }
- return 0;
-}
-
-
-/**
- * xmlIsBaseChar:
- * @ch: character to validate
- *
- * This function is DEPRECATED.
- * Use xmlIsBaseChar_ch or xmlIsBaseCharQ instead
- *
- * Returns true if argument valid, false otherwise
- */
-int
-xmlIsBaseChar(unsigned int ch) {
- return(xmlIsBaseCharQ(ch));
-}
-
-
-/**
- * xmlIsBlank:
- * @ch: character to validate
- *
- * This function is DEPRECATED.
- * Use xmlIsBlank_ch or xmlIsBlankQ instead
- *
- * Returns true if argument valid, false otherwise
- */
-int
-xmlIsBlank(unsigned int ch) {
- return(xmlIsBlankQ(ch));
-}
-
-
-/**
- * xmlIsChar:
- * @ch: character to validate
- *
- * This function is DEPRECATED.
- * Use xmlIsChar_ch or xmlIsCharQ instead
- *
- * Returns true if argument valid, false otherwise
- */
-int
-xmlIsChar(unsigned int ch) {
- return(xmlIsCharQ(ch));
-}
-
-
-/**
- * xmlIsCombining:
- * @ch: character to validate
- *
- * This function is DEPRECATED.
- * Use xmlIsCombiningQ instead
- *
- * Returns true if argument valid, false otherwise
- */
-int
-xmlIsCombining(unsigned int ch) {
- return(xmlIsCombiningQ(ch));
-}
-
-
-/**
- * xmlIsDigit:
- * @ch: character to validate
- *
- * This function is DEPRECATED.
- * Use xmlIsDigit_ch or xmlIsDigitQ instead
- *
- * Returns true if argument valid, false otherwise
- */
-int
-xmlIsDigit(unsigned int ch) {
- return(xmlIsDigitQ(ch));
-}
-
-
-/**
- * xmlIsExtender:
- * @ch: character to validate
- *
- * This function is DEPRECATED.
- * Use xmlIsExtender_ch or xmlIsExtenderQ instead
- *
- * Returns true if argument valid, false otherwise
- */
-int
-xmlIsExtender(unsigned int ch) {
- return(xmlIsExtenderQ(ch));
-}
-
-
-/**
- * xmlIsIdeographic:
- * @ch: character to validate
- *
- * This function is DEPRECATED.
- * Use xmlIsIdeographicQ instead
- *
- * Returns true if argument valid, false otherwise
- */
-int
-xmlIsIdeographic(unsigned int ch) {
- return(xmlIsIdeographicQ(ch));
-}
-
-
-/**
- * xmlIsPubidChar:
- * @ch: character to validate
- *
- * This function is DEPRECATED.
- * Use xmlIsPubidChar_ch or xmlIsPubidCharQ instead
- *
- * Returns true if argument valid, false otherwise
- */
-int
-xmlIsPubidChar(unsigned int ch) {
- return(xmlIsPubidCharQ(ch));
-}
-
-#define bottom_chvalid
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/config.h b/external/libxml2_android/jni/libxml2/config.h
deleted file mode 100644
index bc910aee..00000000
--- a/external/libxml2_android/jni/libxml2/config.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* Type cast for the gethostbyname() argument */
-#define GETHOSTBYNAME_ARG_CAST /**/
-
-/* Define to 1 if you have the <ansidecl.h> header file. */
-/* #undef HAVE_ANSIDECL_H */
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the <arpa/nameser.h> header file. */
-#define HAVE_ARPA_NAMESER_H 1
-
-/* Whether struct sockaddr::__ss_family exists */
-/* #undef HAVE_BROKEN_SS_FAMILY */
-
-/* Define to 1 if you have the `class' function. */
-/* #undef HAVE_CLASS */
-
-/* Define to 1 if you have the <ctype.h> header file. */
-#define HAVE_CTYPE_H 1
-
-/* Define to 1 if you have the <dirent.h> header file. */
-#define HAVE_DIRENT_H 1
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Have dlopen based dso */
-#define HAVE_DLOPEN /**/
-
-/* Define to 1 if you have the <dl.h> header file. */
-/* #undef HAVE_DL_H */
-
-/* Define to 1 if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have the `finite' function. */
-/* #undef HAVE_FINITE */
-
-/* Define to 1 if you have the <float.h> header file. */
-#define HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `fpclass' function. */
-/* #undef HAVE_FPCLASS */
-
-/* Define to 1 if you have the `fprintf' function. */
-#define HAVE_FPRINTF 1
-
-/* Define to 1 if you have the `fp_class' function. */
-/* #undef HAVE_FP_CLASS */
-
-/* Define to 1 if you have the <fp_class.h> header file. */
-/* #undef HAVE_FP_CLASS_H */
-
-/* Define to 1 if you have the `ftime' function. */
-/* #undef HAVE_FTIME */
-
-/* Define if getaddrinfo is there */
-#define HAVE_GETADDRINFO /**/
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have the <ieeefp.h> header file. */
-/* #undef HAVE_IEEEFP_H */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `isascii' function. */
-#define HAVE_ISASCII 1
-
-/* Define if isinf is there */
-#define HAVE_ISINF /**/
-
-/* Define if isnan is there */
-#define HAVE_ISNAN /**/
-
-/* Define to 1 if you have the `isnand' function. */
-/* #undef HAVE_ISNAND */
-
-/* Define if history library is there (-lhistory) */
-/* #undef HAVE_LIBHISTORY */
-
-/* Have compression library */
-/* #undef HAVE_LIBLZMA */
-
-/* Define if pthread library is there (-lpthread) */
-/* #undef HAVE_LIBPTHREAD */
-
-/* Define if readline library is there (-lreadline) */
-/* #undef HAVE_LIBREADLINE */
-
-/* Have compression library */
-#define HAVE_LIBZ 1
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the `localtime' function. */
-#define HAVE_LOCALTIME 1
-
-/* Define to 1 if you have the <lzma.h> header file. */
-/* #undef HAVE_LZMA_H */
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#define HAVE_MALLOC_H 1
-
-/* Define to 1 if you have the <math.h> header file. */
-#define HAVE_MATH_H 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mmap' function. */
-#define HAVE_MMAP 1
-
-/* Define to 1 if you have the `munmap' function. */
-#define HAVE_MUNMAP 1
-
-/* mmap() is no good without munmap() */
-#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP)
-# undef /**/ HAVE_MMAP
-#endif
-
-/* Define to 1 if you have the <nan.h> header file. */
-/* #undef HAVE_NAN_H */
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-/* #undef HAVE_NDIR_H */
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the <poll.h> header file. */
-#define HAVE_POLL_H 1
-
-/* Define to 1 if you have the `printf' function. */
-#define HAVE_PRINTF 1
-
-/* Define if <pthread.h> is there */
-/* #undef HAVE_PTHREAD_H */
-
-/* Define to 1 if you have the `putenv' function. */
-#define HAVE_PUTENV 1
-
-/* Define to 1 if you have the `rand' function. */
-#define HAVE_RAND 1
-
-/* Define to 1 if you have the `rand_r' function. */
-#define HAVE_RAND_R 1
-
-/* Define to 1 if you have the <resolv.h> header file. */
-#define HAVE_RESOLV_H 1
-
-/* Have shl_load based dso */
-/* #undef HAVE_SHLLOAD */
-
-/* Define to 1 if you have the `signal' function. */
-#define HAVE_SIGNAL 1
-
-/* Define to 1 if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define to 1 if you have the `snprintf' function. */
-#define HAVE_SNPRINTF 1
-
-/* Define to 1 if you have the `sprintf' function. */
-#define HAVE_SPRINTF 1
-
-/* Define to 1 if you have the `srand' function. */
-#define HAVE_SRAND 1
-
-/* Define to 1 if you have the `sscanf' function. */
-#define HAVE_SSCANF 1
-
-/* Define to 1 if you have the `stat' function. */
-#define HAVE_STAT 1
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#define HAVE_STDARG_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define to 1 if you have the `strftime' function. */
-#define HAVE_STRFTIME 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strndup' function. */
-#define HAVE_STRNDUP 1
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_DIR_H */
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#define HAVE_SYS_MMAN_H 1
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_NDIR_H */
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/timeb.h> header file. */
-/* #undef HAVE_SYS_TIMEB_H */
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the `time' function. */
-#define HAVE_TIME 1
-
-/* Define to 1 if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Whether va_copy() is available */
-#define HAVE_VA_COPY 1
-
-/* Define to 1 if you have the `vfprintf' function. */
-#define HAVE_VFPRINTF 1
-
-/* Define to 1 if you have the `vsnprintf' function. */
-#define HAVE_VSNPRINTF 1
-
-/* Define to 1 if you have the `vsprintf' function. */
-#define HAVE_VSPRINTF 1
-
-/* Define to 1 if you have the <zlib.h> header file. */
-#define HAVE_ZLIB_H 1
-
-/* Define to 1 if you have the `_stat' function. */
-/* #undef HAVE__STAT */
-
-/* Whether __va_copy() is available */
-/* #undef HAVE___VA_COPY */
-
-/* Define as const if the declaration of iconv() needs const. */
-/* #undef ICONV_CONST */
-
-/* Define to the sub-directory where libtool stores uninstalled libraries. */
-#define LT_OBJDIR ".libs/"
-
-/* Name of package */
-#define PACKAGE "libxml2"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* Type cast for the send() function 2nd arg */
-#define SEND_ARG2_CAST /**/
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Support for IPv6 */
-#define SUPPORT_IP6 /**/
-
-/* Define if va_list is an array type */
-/* #undef VA_LIST_IS_ARRAY */
-
-/* Version number of package */
-#define VERSION "2.9.4"
-
-/* Determine what socket length (socklen_t) data type is */
-#define XML_SOCKLEN_T socklen_t
-
-/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
- <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
- #define below would cause a syntax error. */
-/* #undef _UINT32_T */
-
-/* Using the Win32 Socket implementation */
-/* #undef _WINSOCKAPI_ */
-
-/* ss_family is not defined here, use __ss_family instead */
-/* #undef ss_family */
-
-/* Define to the type of an unsigned integer type of width exactly 32 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef uint32_t */
diff --git a/external/libxml2_android/jni/libxml2/debugXML.c b/external/libxml2_android/jni/libxml2/debugXML.c
deleted file mode 100644
index a1b550ac..00000000
--- a/external/libxml2_android/jni/libxml2/debugXML.c
+++ /dev/null
@@ -1,3428 +0,0 @@
-/*
- * debugXML.c : This is a set of routines used for debugging the tree
- * produced by the XML parser.
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <daniel@veillard.com>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_DEBUG_ENABLED
-
-#include <string.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/valid.h>
-#include <libxml/debugXML.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/HTMLparser.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/uri.h>
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#endif
-
-#define DUMP_TEXT_TYPE 1
-
-typedef struct _xmlDebugCtxt xmlDebugCtxt;
-typedef xmlDebugCtxt *xmlDebugCtxtPtr;
-struct _xmlDebugCtxt {
- FILE *output; /* the output file */
- char shift[101]; /* used for indenting */
- int depth; /* current depth */
- xmlDocPtr doc; /* current document */
- xmlNodePtr node; /* current node */
- xmlDictPtr dict; /* the doc dictionary */
- int check; /* do just checkings */
- int errors; /* number of errors found */
- int nodict; /* if the document has no dictionary */
- int options; /* options */
-};
-
-static void xmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node);
-
-static void
-xmlCtxtDumpInitCtxt(xmlDebugCtxtPtr ctxt)
-{
- int i;
-
- ctxt->depth = 0;
- ctxt->check = 0;
- ctxt->errors = 0;
- ctxt->output = stdout;
- ctxt->doc = NULL;
- ctxt->node = NULL;
- ctxt->dict = NULL;
- ctxt->nodict = 0;
- ctxt->options = 0;
- for (i = 0; i < 100; i++)
- ctxt->shift[i] = ' ';
- ctxt->shift[100] = 0;
-}
-
-static void
-xmlCtxtDumpCleanCtxt(xmlDebugCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- /* remove the ATTRIBUTE_UNUSED when this is added */
-}
-
-/**
- * xmlNsCheckScope:
- * @node: the node
- * @ns: the namespace node
- *
- * Check that a given namespace is in scope on a node.
- *
- * Returns 1 if in scope, -1 in case of argument error,
- * -2 if the namespace is not in scope, and -3 if not on
- * an ancestor node.
- */
-static int
-xmlNsCheckScope(xmlNodePtr node, xmlNsPtr ns)
-{
- xmlNsPtr cur;
-
- if ((node == NULL) || (ns == NULL))
- return(-1);
-
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE) &&
- (node->type != XML_DOCUMENT_NODE) &&
- (node->type != XML_TEXT_NODE) &&
- (node->type != XML_HTML_DOCUMENT_NODE) &&
- (node->type != XML_XINCLUDE_START))
- return(-2);
-
- while ((node != NULL) &&
- ((node->type == XML_ELEMENT_NODE) ||
- (node->type == XML_ATTRIBUTE_NODE) ||
- (node->type == XML_TEXT_NODE) ||
- (node->type == XML_XINCLUDE_START))) {
- if ((node->type == XML_ELEMENT_NODE) ||
- (node->type == XML_XINCLUDE_START)) {
- cur = node->nsDef;
- while (cur != NULL) {
- if (cur == ns)
- return(1);
- if (xmlStrEqual(cur->prefix, ns->prefix))
- return(-2);
- cur = cur->next;
- }
- }
- node = node->parent;
- }
- /* the xml namespace may be declared on the document node */
- if ((node != NULL) &&
- ((node->type == XML_DOCUMENT_NODE) ||
- (node->type == XML_HTML_DOCUMENT_NODE))) {
- xmlNsPtr oldNs = ((xmlDocPtr) node)->oldNs;
- if (oldNs == ns)
- return(1);
- }
- return(-3);
-}
-
-static void
-xmlCtxtDumpSpaces(xmlDebugCtxtPtr ctxt)
-{
- if (ctxt->check)
- return;
- if ((ctxt->output != NULL) && (ctxt->depth > 0)) {
- if (ctxt->depth < 50)
- fprintf(ctxt->output, "%s", &ctxt->shift[100 - 2 * ctxt->depth]);
- else
- fprintf(ctxt->output, "%s", ctxt->shift);
- }
-}
-
-/**
- * xmlDebugErr:
- * @ctxt: a debug context
- * @error: the error code
- *
- * Handle a debug error.
- */
-static void
-xmlDebugErr(xmlDebugCtxtPtr ctxt, int error, const char *msg)
-{
- ctxt->errors++;
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, ctxt->node, XML_FROM_CHECK,
- error, XML_ERR_ERROR, NULL, 0,
- NULL, NULL, NULL, 0, 0,
- "%s", msg);
-}
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlDebugErr2(xmlDebugCtxtPtr ctxt, int error, const char *msg, int extra)
-{
- ctxt->errors++;
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, ctxt->node, XML_FROM_CHECK,
- error, XML_ERR_ERROR, NULL, 0,
- NULL, NULL, NULL, 0, 0,
- msg, extra);
-}
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlDebugErr3(xmlDebugCtxtPtr ctxt, int error, const char *msg, const char *extra)
-{
- ctxt->errors++;
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, ctxt->node, XML_FROM_CHECK,
- error, XML_ERR_ERROR, NULL, 0,
- NULL, NULL, NULL, 0, 0,
- msg, extra);
-}
-
-/**
- * xmlCtxtNsCheckScope:
- * @ctxt: the debugging context
- * @node: the node
- * @ns: the namespace node
- *
- * Report if a given namespace is is not in scope.
- */
-static void
-xmlCtxtNsCheckScope(xmlDebugCtxtPtr ctxt, xmlNodePtr node, xmlNsPtr ns)
-{
- int ret;
-
- ret = xmlNsCheckScope(node, ns);
- if (ret == -2) {
- if (ns->prefix == NULL)
- xmlDebugErr(ctxt, XML_CHECK_NS_SCOPE,
- "Reference to default namespace not in scope\n");
- else
- xmlDebugErr3(ctxt, XML_CHECK_NS_SCOPE,
- "Reference to namespace '%s' not in scope\n",
- (char *) ns->prefix);
- }
- if (ret == -3) {
- if (ns->prefix == NULL)
- xmlDebugErr(ctxt, XML_CHECK_NS_ANCESTOR,
- "Reference to default namespace not on ancestor\n");
- else
- xmlDebugErr3(ctxt, XML_CHECK_NS_ANCESTOR,
- "Reference to namespace '%s' not on ancestor\n",
- (char *) ns->prefix);
- }
-}
-
-/**
- * xmlCtxtCheckString:
- * @ctxt: the debug context
- * @str: the string
- *
- * Do debugging on the string, currently it just checks the UTF-8 content
- */
-static void
-xmlCtxtCheckString(xmlDebugCtxtPtr ctxt, const xmlChar * str)
-{
- if (str == NULL) return;
- if (ctxt->check) {
- if (!xmlCheckUTF8(str)) {
- xmlDebugErr3(ctxt, XML_CHECK_NOT_UTF8,
- "String is not UTF-8 %s", (const char *) str);
- }
- }
-}
-
-/**
- * xmlCtxtCheckName:
- * @ctxt: the debug context
- * @name: the name
- *
- * Do debugging on the name, for example the dictionary status and
- * conformance to the Name production.
- */
-static void
-xmlCtxtCheckName(xmlDebugCtxtPtr ctxt, const xmlChar * name)
-{
- if (ctxt->check) {
- if (name == NULL) {
- xmlDebugErr(ctxt, XML_CHECK_NO_NAME, "Name is NULL");
- return;
- }
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
- if (xmlValidateName(name, 0)) {
- xmlDebugErr3(ctxt, XML_CHECK_NOT_NCNAME,
- "Name is not an NCName '%s'", (const char *) name);
- }
-#endif
- if ((ctxt->dict != NULL) &&
- (!xmlDictOwns(ctxt->dict, name)) &&
- ((ctxt->doc == NULL) ||
- ((ctxt->doc->parseFlags & (XML_PARSE_SAX1 | XML_PARSE_NODICT)) == 0))) {
- xmlDebugErr3(ctxt, XML_CHECK_OUTSIDE_DICT,
- "Name is not from the document dictionary '%s'",
- (const char *) name);
- }
- }
-}
-
-static void
-xmlCtxtGenericNodeCheck(xmlDebugCtxtPtr ctxt, xmlNodePtr node) {
- xmlDocPtr doc;
- xmlDictPtr dict;
-
- doc = node->doc;
-
- if (node->parent == NULL)
- xmlDebugErr(ctxt, XML_CHECK_NO_PARENT,
- "Node has no parent\n");
- if (node->doc == NULL) {
- xmlDebugErr(ctxt, XML_CHECK_NO_DOC,
- "Node has no doc\n");
- dict = NULL;
- } else {
- dict = doc->dict;
- if ((dict == NULL) && (ctxt->nodict == 0)) {
-#if 0
- /* desactivated right now as it raises too many errors */
- if (doc->type == XML_DOCUMENT_NODE)
- xmlDebugErr(ctxt, XML_CHECK_NO_DICT,
- "Document has no dictionary\n");
-#endif
- ctxt->nodict = 1;
- }
- if (ctxt->doc == NULL)
- ctxt->doc = doc;
-
- if (ctxt->dict == NULL) {
- ctxt->dict = dict;
- }
- }
- if ((node->parent != NULL) && (node->doc != node->parent->doc) &&
- (!xmlStrEqual(node->name, BAD_CAST "pseudoroot")))
- xmlDebugErr(ctxt, XML_CHECK_WRONG_DOC,
- "Node doc differs from parent's one\n");
- if (node->prev == NULL) {
- if (node->type == XML_ATTRIBUTE_NODE) {
- if ((node->parent != NULL) &&
- (node != (xmlNodePtr) node->parent->properties))
- xmlDebugErr(ctxt, XML_CHECK_NO_PREV,
- "Attr has no prev and not first of attr list\n");
-
- } else if ((node->parent != NULL) && (node->parent->children != node))
- xmlDebugErr(ctxt, XML_CHECK_NO_PREV,
- "Node has no prev and not first of parent list\n");
- } else {
- if (node->prev->next != node)
- xmlDebugErr(ctxt, XML_CHECK_WRONG_PREV,
- "Node prev->next : back link wrong\n");
- }
- if (node->next == NULL) {
- if ((node->parent != NULL) && (node->type != XML_ATTRIBUTE_NODE) &&
- (node->parent->last != node) &&
- (node->parent->type == XML_ELEMENT_NODE))
- xmlDebugErr(ctxt, XML_CHECK_NO_NEXT,
- "Node has no next and not last of parent list\n");
- } else {
- if (node->next->prev != node)
- xmlDebugErr(ctxt, XML_CHECK_WRONG_NEXT,
- "Node next->prev : forward link wrong\n");
- if (node->next->parent != node->parent)
- xmlDebugErr(ctxt, XML_CHECK_WRONG_PARENT,
- "Node next->prev : forward link wrong\n");
- }
- if (node->type == XML_ELEMENT_NODE) {
- xmlNsPtr ns;
-
- ns = node->nsDef;
- while (ns != NULL) {
- xmlCtxtNsCheckScope(ctxt, node, ns);
- ns = ns->next;
- }
- if (node->ns != NULL)
- xmlCtxtNsCheckScope(ctxt, node, node->ns);
- } else if (node->type == XML_ATTRIBUTE_NODE) {
- if (node->ns != NULL)
- xmlCtxtNsCheckScope(ctxt, node, node->ns);
- }
-
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE) &&
- (node->type != XML_ELEMENT_DECL) &&
- (node->type != XML_ATTRIBUTE_DECL) &&
- (node->type != XML_DTD_NODE) &&
- (node->type != XML_HTML_DOCUMENT_NODE) &&
- (node->type != XML_DOCUMENT_NODE)) {
- if (node->content != NULL)
- xmlCtxtCheckString(ctxt, (const xmlChar *) node->content);
- }
- switch (node->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- xmlCtxtCheckName(ctxt, node->name);
- break;
- case XML_TEXT_NODE:
- if ((node->name == xmlStringText) ||
- (node->name == xmlStringTextNoenc))
- break;
- /* some case of entity substitution can lead to this */
- if ((ctxt->dict != NULL) &&
- (node->name == xmlDictLookup(ctxt->dict, BAD_CAST "nbktext",
- 7)))
- break;
-
- xmlDebugErr3(ctxt, XML_CHECK_WRONG_NAME,
- "Text node has wrong name '%s'",
- (const char *) node->name);
- break;
- case XML_COMMENT_NODE:
- if (node->name == xmlStringComment)
- break;
- xmlDebugErr3(ctxt, XML_CHECK_WRONG_NAME,
- "Comment node has wrong name '%s'",
- (const char *) node->name);
- break;
- case XML_PI_NODE:
- xmlCtxtCheckName(ctxt, node->name);
- break;
- case XML_CDATA_SECTION_NODE:
- if (node->name == NULL)
- break;
- xmlDebugErr3(ctxt, XML_CHECK_NAME_NOT_NULL,
- "CData section has non NULL name '%s'",
- (const char *) node->name);
- break;
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- break;
- }
-}
-
-static void
-xmlCtxtDumpString(xmlDebugCtxtPtr ctxt, const xmlChar * str)
-{
- int i;
-
- if (ctxt->check) {
- return;
- }
- /* TODO: check UTF8 content of the string */
- if (str == NULL) {
- fprintf(ctxt->output, "(NULL)");
- return;
- }
- for (i = 0; i < 40; i++)
- if (str[i] == 0)
- return;
- else if (IS_BLANK_CH(str[i]))
- fputc(' ', ctxt->output);
- else if (str[i] >= 0x80)
- fprintf(ctxt->output, "#%X", str[i]);
- else
- fputc(str[i], ctxt->output);
- fprintf(ctxt->output, "...");
-}
-
-static void
-xmlCtxtDumpDtdNode(xmlDebugCtxtPtr ctxt, xmlDtdPtr dtd)
-{
- xmlCtxtDumpSpaces(ctxt);
-
- if (dtd == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "DTD node is NULL\n");
- return;
- }
-
- if (dtd->type != XML_DTD_NODE) {
- xmlDebugErr(ctxt, XML_CHECK_NOT_DTD,
- "Node is not a DTD");
- return;
- }
- if (!ctxt->check) {
- if (dtd->name != NULL)
- fprintf(ctxt->output, "DTD(%s)", (char *) dtd->name);
- else
- fprintf(ctxt->output, "DTD");
- if (dtd->ExternalID != NULL)
- fprintf(ctxt->output, ", PUBLIC %s", (char *) dtd->ExternalID);
- if (dtd->SystemID != NULL)
- fprintf(ctxt->output, ", SYSTEM %s", (char *) dtd->SystemID);
- fprintf(ctxt->output, "\n");
- }
- /*
- * Do a bit of checking
- */
- xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) dtd);
-}
-
-static void
-xmlCtxtDumpAttrDecl(xmlDebugCtxtPtr ctxt, xmlAttributePtr attr)
-{
- xmlCtxtDumpSpaces(ctxt);
-
- if (attr == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "Attribute declaration is NULL\n");
- return;
- }
- if (attr->type != XML_ATTRIBUTE_DECL) {
- xmlDebugErr(ctxt, XML_CHECK_NOT_ATTR_DECL,
- "Node is not an attribute declaration");
- return;
- }
- if (attr->name != NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "ATTRDECL(%s)", (char *) attr->name);
- } else
- xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
- "Node attribute declaration has no name");
- if (attr->elem != NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, " for %s", (char *) attr->elem);
- } else
- xmlDebugErr(ctxt, XML_CHECK_NO_ELEM,
- "Node attribute declaration has no element name");
- if (!ctxt->check) {
- switch (attr->atype) {
- case XML_ATTRIBUTE_CDATA:
- fprintf(ctxt->output, " CDATA");
- break;
- case XML_ATTRIBUTE_ID:
- fprintf(ctxt->output, " ID");
- break;
- case XML_ATTRIBUTE_IDREF:
- fprintf(ctxt->output, " IDREF");
- break;
- case XML_ATTRIBUTE_IDREFS:
- fprintf(ctxt->output, " IDREFS");
- break;
- case XML_ATTRIBUTE_ENTITY:
- fprintf(ctxt->output, " ENTITY");
- break;
- case XML_ATTRIBUTE_ENTITIES:
- fprintf(ctxt->output, " ENTITIES");
- break;
- case XML_ATTRIBUTE_NMTOKEN:
- fprintf(ctxt->output, " NMTOKEN");
- break;
- case XML_ATTRIBUTE_NMTOKENS:
- fprintf(ctxt->output, " NMTOKENS");
- break;
- case XML_ATTRIBUTE_ENUMERATION:
- fprintf(ctxt->output, " ENUMERATION");
- break;
- case XML_ATTRIBUTE_NOTATION:
- fprintf(ctxt->output, " NOTATION ");
- break;
- }
- if (attr->tree != NULL) {
- int indx;
- xmlEnumerationPtr cur = attr->tree;
-
- for (indx = 0; indx < 5; indx++) {
- if (indx != 0)
- fprintf(ctxt->output, "|%s", (char *) cur->name);
- else
- fprintf(ctxt->output, " (%s", (char *) cur->name);
- cur = cur->next;
- if (cur == NULL)
- break;
- }
- if (cur == NULL)
- fprintf(ctxt->output, ")");
- else
- fprintf(ctxt->output, "...)");
- }
- switch (attr->def) {
- case XML_ATTRIBUTE_NONE:
- break;
- case XML_ATTRIBUTE_REQUIRED:
- fprintf(ctxt->output, " REQUIRED");
- break;
- case XML_ATTRIBUTE_IMPLIED:
- fprintf(ctxt->output, " IMPLIED");
- break;
- case XML_ATTRIBUTE_FIXED:
- fprintf(ctxt->output, " FIXED");
- break;
- }
- if (attr->defaultValue != NULL) {
- fprintf(ctxt->output, "\"");
- xmlCtxtDumpString(ctxt, attr->defaultValue);
- fprintf(ctxt->output, "\"");
- }
- fprintf(ctxt->output, "\n");
- }
-
- /*
- * Do a bit of checking
- */
- xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) attr);
-}
-
-static void
-xmlCtxtDumpElemDecl(xmlDebugCtxtPtr ctxt, xmlElementPtr elem)
-{
- xmlCtxtDumpSpaces(ctxt);
-
- if (elem == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "Element declaration is NULL\n");
- return;
- }
- if (elem->type != XML_ELEMENT_DECL) {
- xmlDebugErr(ctxt, XML_CHECK_NOT_ELEM_DECL,
- "Node is not an element declaration");
- return;
- }
- if (elem->name != NULL) {
- if (!ctxt->check) {
- fprintf(ctxt->output, "ELEMDECL(");
- xmlCtxtDumpString(ctxt, elem->name);
- fprintf(ctxt->output, ")");
- }
- } else
- xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
- "Element declaration has no name");
- if (!ctxt->check) {
- switch (elem->etype) {
- case XML_ELEMENT_TYPE_UNDEFINED:
- fprintf(ctxt->output, ", UNDEFINED");
- break;
- case XML_ELEMENT_TYPE_EMPTY:
- fprintf(ctxt->output, ", EMPTY");
- break;
- case XML_ELEMENT_TYPE_ANY:
- fprintf(ctxt->output, ", ANY");
- break;
- case XML_ELEMENT_TYPE_MIXED:
- fprintf(ctxt->output, ", MIXED ");
- break;
- case XML_ELEMENT_TYPE_ELEMENT:
- fprintf(ctxt->output, ", MIXED ");
- break;
- }
- if ((elem->type != XML_ELEMENT_NODE) && (elem->content != NULL)) {
- char buf[5001];
-
- buf[0] = 0;
- xmlSnprintfElementContent(buf, 5000, elem->content, 1);
- buf[5000] = 0;
- fprintf(ctxt->output, "%s", buf);
- }
- fprintf(ctxt->output, "\n");
- }
-
- /*
- * Do a bit of checking
- */
- xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) elem);
-}
-
-static void
-xmlCtxtDumpEntityDecl(xmlDebugCtxtPtr ctxt, xmlEntityPtr ent)
-{
- xmlCtxtDumpSpaces(ctxt);
-
- if (ent == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "Entity declaration is NULL\n");
- return;
- }
- if (ent->type != XML_ENTITY_DECL) {
- xmlDebugErr(ctxt, XML_CHECK_NOT_ENTITY_DECL,
- "Node is not an entity declaration");
- return;
- }
- if (ent->name != NULL) {
- if (!ctxt->check) {
- fprintf(ctxt->output, "ENTITYDECL(");
- xmlCtxtDumpString(ctxt, ent->name);
- fprintf(ctxt->output, ")");
- }
- } else
- xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
- "Entity declaration has no name");
- if (!ctxt->check) {
- switch (ent->etype) {
- case XML_INTERNAL_GENERAL_ENTITY:
- fprintf(ctxt->output, ", internal\n");
- break;
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- fprintf(ctxt->output, ", external parsed\n");
- break;
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- fprintf(ctxt->output, ", unparsed\n");
- break;
- case XML_INTERNAL_PARAMETER_ENTITY:
- fprintf(ctxt->output, ", parameter\n");
- break;
- case XML_EXTERNAL_PARAMETER_ENTITY:
- fprintf(ctxt->output, ", external parameter\n");
- break;
- case XML_INTERNAL_PREDEFINED_ENTITY:
- fprintf(ctxt->output, ", predefined\n");
- break;
- }
- if (ent->ExternalID) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, " ExternalID=%s\n",
- (char *) ent->ExternalID);
- }
- if (ent->SystemID) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, " SystemID=%s\n",
- (char *) ent->SystemID);
- }
- if (ent->URI != NULL) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, " URI=%s\n", (char *) ent->URI);
- }
- if (ent->content) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, " content=");
- xmlCtxtDumpString(ctxt, ent->content);
- fprintf(ctxt->output, "\n");
- }
- }
-
- /*
- * Do a bit of checking
- */
- xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) ent);
-}
-
-static void
-xmlCtxtDumpNamespace(xmlDebugCtxtPtr ctxt, xmlNsPtr ns)
-{
- xmlCtxtDumpSpaces(ctxt);
-
- if (ns == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "namespace node is NULL\n");
- return;
- }
- if (ns->type != XML_NAMESPACE_DECL) {
- xmlDebugErr(ctxt, XML_CHECK_NOT_NS_DECL,
- "Node is not a namespace declaration");
- return;
- }
- if (ns->href == NULL) {
- if (ns->prefix != NULL)
- xmlDebugErr3(ctxt, XML_CHECK_NO_HREF,
- "Incomplete namespace %s href=NULL\n",
- (char *) ns->prefix);
- else
- xmlDebugErr(ctxt, XML_CHECK_NO_HREF,
- "Incomplete default namespace href=NULL\n");
- } else {
- if (!ctxt->check) {
- if (ns->prefix != NULL)
- fprintf(ctxt->output, "namespace %s href=",
- (char *) ns->prefix);
- else
- fprintf(ctxt->output, "default namespace href=");
-
- xmlCtxtDumpString(ctxt, ns->href);
- fprintf(ctxt->output, "\n");
- }
- }
-}
-
-static void
-xmlCtxtDumpNamespaceList(xmlDebugCtxtPtr ctxt, xmlNsPtr ns)
-{
- while (ns != NULL) {
- xmlCtxtDumpNamespace(ctxt, ns);
- ns = ns->next;
- }
-}
-
-static void
-xmlCtxtDumpEntity(xmlDebugCtxtPtr ctxt, xmlEntityPtr ent)
-{
- xmlCtxtDumpSpaces(ctxt);
-
- if (ent == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "Entity is NULL\n");
- return;
- }
- if (!ctxt->check) {
- switch (ent->etype) {
- case XML_INTERNAL_GENERAL_ENTITY:
- fprintf(ctxt->output, "INTERNAL_GENERAL_ENTITY ");
- break;
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- fprintf(ctxt->output, "EXTERNAL_GENERAL_PARSED_ENTITY ");
- break;
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- fprintf(ctxt->output, "EXTERNAL_GENERAL_UNPARSED_ENTITY ");
- break;
- case XML_INTERNAL_PARAMETER_ENTITY:
- fprintf(ctxt->output, "INTERNAL_PARAMETER_ENTITY ");
- break;
- case XML_EXTERNAL_PARAMETER_ENTITY:
- fprintf(ctxt->output, "EXTERNAL_PARAMETER_ENTITY ");
- break;
- default:
- fprintf(ctxt->output, "ENTITY_%d ! ", (int) ent->etype);
- }
- fprintf(ctxt->output, "%s\n", ent->name);
- if (ent->ExternalID) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "ExternalID=%s\n",
- (char *) ent->ExternalID);
- }
- if (ent->SystemID) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "SystemID=%s\n", (char *) ent->SystemID);
- }
- if (ent->URI) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "URI=%s\n", (char *) ent->URI);
- }
- if (ent->content) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "content=");
- xmlCtxtDumpString(ctxt, ent->content);
- fprintf(ctxt->output, "\n");
- }
- }
-}
-
-/**
- * xmlCtxtDumpAttr:
- * @output: the FILE * for the output
- * @attr: the attribute
- * @depth: the indentation level.
- *
- * Dumps debug information for the attribute
- */
-static void
-xmlCtxtDumpAttr(xmlDebugCtxtPtr ctxt, xmlAttrPtr attr)
-{
- xmlCtxtDumpSpaces(ctxt);
-
- if (attr == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "Attr is NULL");
- return;
- }
- if (!ctxt->check) {
- fprintf(ctxt->output, "ATTRIBUTE ");
- xmlCtxtDumpString(ctxt, attr->name);
- fprintf(ctxt->output, "\n");
- if (attr->children != NULL) {
- ctxt->depth++;
- xmlCtxtDumpNodeList(ctxt, attr->children);
- ctxt->depth--;
- }
- }
- if (attr->name == NULL)
- xmlDebugErr(ctxt, XML_CHECK_NO_NAME,
- "Attribute has no name");
-
- /*
- * Do a bit of checking
- */
- xmlCtxtGenericNodeCheck(ctxt, (xmlNodePtr) attr);
-}
-
-/**
- * xmlCtxtDumpAttrList:
- * @output: the FILE * for the output
- * @attr: the attribute list
- * @depth: the indentation level.
- *
- * Dumps debug information for the attribute list
- */
-static void
-xmlCtxtDumpAttrList(xmlDebugCtxtPtr ctxt, xmlAttrPtr attr)
-{
- while (attr != NULL) {
- xmlCtxtDumpAttr(ctxt, attr);
- attr = attr->next;
- }
-}
-
-/**
- * xmlCtxtDumpOneNode:
- * @output: the FILE * for the output
- * @node: the node
- * @depth: the indentation level.
- *
- * Dumps debug information for the element node, it is not recursive
- */
-static void
-xmlCtxtDumpOneNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
-{
- if (node == NULL) {
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "node is NULL\n");
- }
- return;
- }
- ctxt->node = node;
-
- switch (node->type) {
- case XML_ELEMENT_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "ELEMENT ");
- if ((node->ns != NULL) && (node->ns->prefix != NULL)) {
- xmlCtxtDumpString(ctxt, node->ns->prefix);
- fprintf(ctxt->output, ":");
- }
- xmlCtxtDumpString(ctxt, node->name);
- fprintf(ctxt->output, "\n");
- }
- break;
- case XML_ATTRIBUTE_NODE:
- if (!ctxt->check)
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "Error, ATTRIBUTE found here\n");
- xmlCtxtGenericNodeCheck(ctxt, node);
- return;
- case XML_TEXT_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- if (node->name == (const xmlChar *) xmlStringTextNoenc)
- fprintf(ctxt->output, "TEXT no enc");
- else
- fprintf(ctxt->output, "TEXT");
- if (ctxt->options & DUMP_TEXT_TYPE) {
- if (node->content == (xmlChar *) &(node->properties))
- fprintf(ctxt->output, " compact\n");
- else if (xmlDictOwns(ctxt->dict, node->content) == 1)
- fprintf(ctxt->output, " interned\n");
- else
- fprintf(ctxt->output, "\n");
- } else
- fprintf(ctxt->output, "\n");
- }
- break;
- case XML_CDATA_SECTION_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "CDATA_SECTION\n");
- }
- break;
- case XML_ENTITY_REF_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "ENTITY_REF(%s)\n",
- (char *) node->name);
- }
- break;
- case XML_ENTITY_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "ENTITY\n");
- }
- break;
- case XML_PI_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "PI %s\n", (char *) node->name);
- }
- break;
- case XML_COMMENT_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "COMMENT\n");
- }
- break;
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- }
- fprintf(ctxt->output, "Error, DOCUMENT found here\n");
- xmlCtxtGenericNodeCheck(ctxt, node);
- return;
- case XML_DOCUMENT_TYPE_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "DOCUMENT_TYPE\n");
- }
- break;
- case XML_DOCUMENT_FRAG_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "DOCUMENT_FRAG\n");
- }
- break;
- case XML_NOTATION_NODE:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "NOTATION\n");
- }
- break;
- case XML_DTD_NODE:
- xmlCtxtDumpDtdNode(ctxt, (xmlDtdPtr) node);
- return;
- case XML_ELEMENT_DECL:
- xmlCtxtDumpElemDecl(ctxt, (xmlElementPtr) node);
- return;
- case XML_ATTRIBUTE_DECL:
- xmlCtxtDumpAttrDecl(ctxt, (xmlAttributePtr) node);
- return;
- case XML_ENTITY_DECL:
- xmlCtxtDumpEntityDecl(ctxt, (xmlEntityPtr) node);
- return;
- case XML_NAMESPACE_DECL:
- xmlCtxtDumpNamespace(ctxt, (xmlNsPtr) node);
- return;
- case XML_XINCLUDE_START:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "INCLUDE START\n");
- }
- return;
- case XML_XINCLUDE_END:
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "INCLUDE END\n");
- }
- return;
- default:
- if (!ctxt->check)
- xmlCtxtDumpSpaces(ctxt);
- xmlDebugErr2(ctxt, XML_CHECK_UNKNOWN_NODE,
- "Unknown node type %d\n", node->type);
- return;
- }
- if (node->doc == NULL) {
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- }
- fprintf(ctxt->output, "PBM: doc == NULL !!!\n");
- }
- ctxt->depth++;
- if ((node->type == XML_ELEMENT_NODE) && (node->nsDef != NULL))
- xmlCtxtDumpNamespaceList(ctxt, node->nsDef);
- if ((node->type == XML_ELEMENT_NODE) && (node->properties != NULL))
- xmlCtxtDumpAttrList(ctxt, node->properties);
- if (node->type != XML_ENTITY_REF_NODE) {
- if ((node->type != XML_ELEMENT_NODE) && (node->content != NULL)) {
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "content=");
- xmlCtxtDumpString(ctxt, node->content);
- fprintf(ctxt->output, "\n");
- }
- }
- } else {
- xmlEntityPtr ent;
-
- ent = xmlGetDocEntity(node->doc, node->name);
- if (ent != NULL)
- xmlCtxtDumpEntity(ctxt, ent);
- }
- ctxt->depth--;
-
- /*
- * Do a bit of checking
- */
- xmlCtxtGenericNodeCheck(ctxt, node);
-}
-
-/**
- * xmlCtxtDumpNode:
- * @output: the FILE * for the output
- * @node: the node
- * @depth: the indentation level.
- *
- * Dumps debug information for the element node, it is recursive
- */
-static void
-xmlCtxtDumpNode(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
-{
- if (node == NULL) {
- if (!ctxt->check) {
- xmlCtxtDumpSpaces(ctxt);
- fprintf(ctxt->output, "node is NULL\n");
- }
- return;
- }
- xmlCtxtDumpOneNode(ctxt, node);
- if ((node->type != XML_NAMESPACE_DECL) &&
- (node->children != NULL) && (node->type != XML_ENTITY_REF_NODE)) {
- ctxt->depth++;
- xmlCtxtDumpNodeList(ctxt, node->children);
- ctxt->depth--;
- }
-}
-
-/**
- * xmlCtxtDumpNodeList:
- * @output: the FILE * for the output
- * @node: the node list
- * @depth: the indentation level.
- *
- * Dumps debug information for the list of element node, it is recursive
- */
-static void
-xmlCtxtDumpNodeList(xmlDebugCtxtPtr ctxt, xmlNodePtr node)
-{
- while (node != NULL) {
- xmlCtxtDumpNode(ctxt, node);
- node = node->next;
- }
-}
-
-static void
-xmlCtxtDumpDocHead(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
-{
- if (doc == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "DOCUMENT == NULL !\n");
- return;
- }
- ctxt->node = (xmlNodePtr) doc;
-
- switch (doc->type) {
- case XML_ELEMENT_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_ELEMENT,
- "Misplaced ELEMENT node\n");
- break;
- case XML_ATTRIBUTE_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_ATTRIBUTE,
- "Misplaced ATTRIBUTE node\n");
- break;
- case XML_TEXT_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_TEXT,
- "Misplaced TEXT node\n");
- break;
- case XML_CDATA_SECTION_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_CDATA,
- "Misplaced CDATA node\n");
- break;
- case XML_ENTITY_REF_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_ENTITYREF,
- "Misplaced ENTITYREF node\n");
- break;
- case XML_ENTITY_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_ENTITY,
- "Misplaced ENTITY node\n");
- break;
- case XML_PI_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_PI,
- "Misplaced PI node\n");
- break;
- case XML_COMMENT_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_COMMENT,
- "Misplaced COMMENT node\n");
- break;
- case XML_DOCUMENT_NODE:
- if (!ctxt->check)
- fprintf(ctxt->output, "DOCUMENT\n");
- break;
- case XML_HTML_DOCUMENT_NODE:
- if (!ctxt->check)
- fprintf(ctxt->output, "HTML DOCUMENT\n");
- break;
- case XML_DOCUMENT_TYPE_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_DOCTYPE,
- "Misplaced DOCTYPE node\n");
- break;
- case XML_DOCUMENT_FRAG_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_FRAGMENT,
- "Misplaced FRAGMENT node\n");
- break;
- case XML_NOTATION_NODE:
- xmlDebugErr(ctxt, XML_CHECK_FOUND_NOTATION,
- "Misplaced NOTATION node\n");
- break;
- default:
- xmlDebugErr2(ctxt, XML_CHECK_UNKNOWN_NODE,
- "Unknown node type %d\n", doc->type);
- }
-}
-
-/**
- * xmlCtxtDumpDocumentHead:
- * @output: the FILE * for the output
- * @doc: the document
- *
- * Dumps debug information cncerning the document, not recursive
- */
-static void
-xmlCtxtDumpDocumentHead(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
-{
- if (doc == NULL) return;
- xmlCtxtDumpDocHead(ctxt, doc);
- if (!ctxt->check) {
- if (doc->name != NULL) {
- fprintf(ctxt->output, "name=");
- xmlCtxtDumpString(ctxt, BAD_CAST doc->name);
- fprintf(ctxt->output, "\n");
- }
- if (doc->version != NULL) {
- fprintf(ctxt->output, "version=");
- xmlCtxtDumpString(ctxt, doc->version);
- fprintf(ctxt->output, "\n");
- }
- if (doc->encoding != NULL) {
- fprintf(ctxt->output, "encoding=");
- xmlCtxtDumpString(ctxt, doc->encoding);
- fprintf(ctxt->output, "\n");
- }
- if (doc->URL != NULL) {
- fprintf(ctxt->output, "URL=");
- xmlCtxtDumpString(ctxt, doc->URL);
- fprintf(ctxt->output, "\n");
- }
- if (doc->standalone)
- fprintf(ctxt->output, "standalone=true\n");
- }
- if (doc->oldNs != NULL)
- xmlCtxtDumpNamespaceList(ctxt, doc->oldNs);
-}
-
-/**
- * xmlCtxtDumpDocument:
- * @output: the FILE * for the output
- * @doc: the document
- *
- * Dumps debug information for the document, it's recursive
- */
-static void
-xmlCtxtDumpDocument(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
-{
- if (doc == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "DOCUMENT == NULL !\n");
- return;
- }
- xmlCtxtDumpDocumentHead(ctxt, doc);
- if (((doc->type == XML_DOCUMENT_NODE) ||
- (doc->type == XML_HTML_DOCUMENT_NODE))
- && (doc->children != NULL)) {
- ctxt->depth++;
- xmlCtxtDumpNodeList(ctxt, doc->children);
- ctxt->depth--;
- }
-}
-
-static void
-xmlCtxtDumpEntityCallback(xmlEntityPtr cur, xmlDebugCtxtPtr ctxt)
-{
- if (cur == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "Entity is NULL");
- return;
- }
- if (!ctxt->check) {
- fprintf(ctxt->output, "%s : ", (char *) cur->name);
- switch (cur->etype) {
- case XML_INTERNAL_GENERAL_ENTITY:
- fprintf(ctxt->output, "INTERNAL GENERAL, ");
- break;
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- fprintf(ctxt->output, "EXTERNAL PARSED, ");
- break;
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- fprintf(ctxt->output, "EXTERNAL UNPARSED, ");
- break;
- case XML_INTERNAL_PARAMETER_ENTITY:
- fprintf(ctxt->output, "INTERNAL PARAMETER, ");
- break;
- case XML_EXTERNAL_PARAMETER_ENTITY:
- fprintf(ctxt->output, "EXTERNAL PARAMETER, ");
- break;
- default:
- xmlDebugErr2(ctxt, XML_CHECK_ENTITY_TYPE,
- "Unknown entity type %d\n", cur->etype);
- }
- if (cur->ExternalID != NULL)
- fprintf(ctxt->output, "ID \"%s\"", (char *) cur->ExternalID);
- if (cur->SystemID != NULL)
- fprintf(ctxt->output, "SYSTEM \"%s\"", (char *) cur->SystemID);
- if (cur->orig != NULL)
- fprintf(ctxt->output, "\n orig \"%s\"", (char *) cur->orig);
- if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL))
- fprintf(ctxt->output, "\n content \"%s\"",
- (char *) cur->content);
- fprintf(ctxt->output, "\n");
- }
-}
-
-/**
- * xmlCtxtDumpEntities:
- * @output: the FILE * for the output
- * @doc: the document
- *
- * Dumps debug information for all the entities in use by the document
- */
-static void
-xmlCtxtDumpEntities(xmlDebugCtxtPtr ctxt, xmlDocPtr doc)
-{
- if (doc == NULL) return;
- xmlCtxtDumpDocHead(ctxt, doc);
- if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) {
- xmlEntitiesTablePtr table = (xmlEntitiesTablePtr)
- doc->intSubset->entities;
-
- if (!ctxt->check)
- fprintf(ctxt->output, "Entities in internal subset\n");
- xmlHashScan(table, (xmlHashScanner) xmlCtxtDumpEntityCallback,
- ctxt);
- } else
- fprintf(ctxt->output, "No entities in internal subset\n");
- if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) {
- xmlEntitiesTablePtr table = (xmlEntitiesTablePtr)
- doc->extSubset->entities;
-
- if (!ctxt->check)
- fprintf(ctxt->output, "Entities in external subset\n");
- xmlHashScan(table, (xmlHashScanner) xmlCtxtDumpEntityCallback,
- ctxt);
- } else if (!ctxt->check)
- fprintf(ctxt->output, "No entities in external subset\n");
-}
-
-/**
- * xmlCtxtDumpDTD:
- * @output: the FILE * for the output
- * @dtd: the DTD
- *
- * Dumps debug information for the DTD
- */
-static void
-xmlCtxtDumpDTD(xmlDebugCtxtPtr ctxt, xmlDtdPtr dtd)
-{
- if (dtd == NULL) {
- if (!ctxt->check)
- fprintf(ctxt->output, "DTD is NULL\n");
- return;
- }
- xmlCtxtDumpDtdNode(ctxt, dtd);
- if (dtd->children == NULL)
- fprintf(ctxt->output, " DTD is empty\n");
- else {
- ctxt->depth++;
- xmlCtxtDumpNodeList(ctxt, dtd->children);
- ctxt->depth--;
- }
-}
-
-/************************************************************************
- * *
- * Public entry points for dump *
- * *
- ************************************************************************/
-
-/**
- * xmlDebugDumpString:
- * @output: the FILE * for the output
- * @str: the string
- *
- * Dumps informations about the string, shorten it if necessary
- */
-void
-xmlDebugDumpString(FILE * output, const xmlChar * str)
-{
- int i;
-
- if (output == NULL)
- output = stdout;
- if (str == NULL) {
- fprintf(output, "(NULL)");
- return;
- }
- for (i = 0; i < 40; i++)
- if (str[i] == 0)
- return;
- else if (IS_BLANK_CH(str[i]))
- fputc(' ', output);
- else if (str[i] >= 0x80)
- fprintf(output, "#%X", str[i]);
- else
- fputc(str[i], output);
- fprintf(output, "...");
-}
-
-/**
- * xmlDebugDumpAttr:
- * @output: the FILE * for the output
- * @attr: the attribute
- * @depth: the indentation level.
- *
- * Dumps debug information for the attribute
- */
-void
-xmlDebugDumpAttr(FILE *output, xmlAttrPtr attr, int depth) {
- xmlDebugCtxt ctxt;
-
- if (output == NULL) return;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.output = output;
- ctxt.depth = depth;
- xmlCtxtDumpAttr(&ctxt, attr);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-
-/**
- * xmlDebugDumpEntities:
- * @output: the FILE * for the output
- * @doc: the document
- *
- * Dumps debug information for all the entities in use by the document
- */
-void
-xmlDebugDumpEntities(FILE * output, xmlDocPtr doc)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL) return;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.output = output;
- xmlCtxtDumpEntities(&ctxt, doc);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpAttrList:
- * @output: the FILE * for the output
- * @attr: the attribute list
- * @depth: the indentation level.
- *
- * Dumps debug information for the attribute list
- */
-void
-xmlDebugDumpAttrList(FILE * output, xmlAttrPtr attr, int depth)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL) return;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.output = output;
- ctxt.depth = depth;
- xmlCtxtDumpAttrList(&ctxt, attr);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpOneNode:
- * @output: the FILE * for the output
- * @node: the node
- * @depth: the indentation level.
- *
- * Dumps debug information for the element node, it is not recursive
- */
-void
-xmlDebugDumpOneNode(FILE * output, xmlNodePtr node, int depth)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL) return;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.output = output;
- ctxt.depth = depth;
- xmlCtxtDumpOneNode(&ctxt, node);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpNode:
- * @output: the FILE * for the output
- * @node: the node
- * @depth: the indentation level.
- *
- * Dumps debug information for the element node, it is recursive
- */
-void
-xmlDebugDumpNode(FILE * output, xmlNodePtr node, int depth)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL)
- output = stdout;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.output = output;
- ctxt.depth = depth;
- xmlCtxtDumpNode(&ctxt, node);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpNodeList:
- * @output: the FILE * for the output
- * @node: the node list
- * @depth: the indentation level.
- *
- * Dumps debug information for the list of element node, it is recursive
- */
-void
-xmlDebugDumpNodeList(FILE * output, xmlNodePtr node, int depth)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL)
- output = stdout;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.output = output;
- ctxt.depth = depth;
- xmlCtxtDumpNodeList(&ctxt, node);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpDocumentHead:
- * @output: the FILE * for the output
- * @doc: the document
- *
- * Dumps debug information cncerning the document, not recursive
- */
-void
-xmlDebugDumpDocumentHead(FILE * output, xmlDocPtr doc)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL)
- output = stdout;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.options |= DUMP_TEXT_TYPE;
- ctxt.output = output;
- xmlCtxtDumpDocumentHead(&ctxt, doc);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpDocument:
- * @output: the FILE * for the output
- * @doc: the document
- *
- * Dumps debug information for the document, it's recursive
- */
-void
-xmlDebugDumpDocument(FILE * output, xmlDocPtr doc)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL)
- output = stdout;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.options |= DUMP_TEXT_TYPE;
- ctxt.output = output;
- xmlCtxtDumpDocument(&ctxt, doc);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/**
- * xmlDebugDumpDTD:
- * @output: the FILE * for the output
- * @dtd: the DTD
- *
- * Dumps debug information for the DTD
- */
-void
-xmlDebugDumpDTD(FILE * output, xmlDtdPtr dtd)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL)
- output = stdout;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.options |= DUMP_TEXT_TYPE;
- ctxt.output = output;
- xmlCtxtDumpDTD(&ctxt, dtd);
- xmlCtxtDumpCleanCtxt(&ctxt);
-}
-
-/************************************************************************
- * *
- * Public entry points for checkings *
- * *
- ************************************************************************/
-
-/**
- * xmlDebugCheckDocument:
- * @output: the FILE * for the output
- * @doc: the document
- *
- * Check the document for potential content problems, and output
- * the errors to @output
- *
- * Returns the number of errors found
- */
-int
-xmlDebugCheckDocument(FILE * output, xmlDocPtr doc)
-{
- xmlDebugCtxt ctxt;
-
- if (output == NULL)
- output = stdout;
- xmlCtxtDumpInitCtxt(&ctxt);
- ctxt.output = output;
- ctxt.check = 1;
- xmlCtxtDumpDocument(&ctxt, doc);
- xmlCtxtDumpCleanCtxt(&ctxt);
- return(ctxt.errors);
-}
-
-/************************************************************************
- * *
- * Helpers for Shell *
- * *
- ************************************************************************/
-
-/**
- * xmlLsCountNode:
- * @node: the node to count
- *
- * Count the children of @node.
- *
- * Returns the number of children of @node.
- */
-int
-xmlLsCountNode(xmlNodePtr node) {
- int ret = 0;
- xmlNodePtr list = NULL;
-
- if (node == NULL)
- return(0);
-
- switch (node->type) {
- case XML_ELEMENT_NODE:
- list = node->children;
- break;
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- list = ((xmlDocPtr) node)->children;
- break;
- case XML_ATTRIBUTE_NODE:
- list = ((xmlAttrPtr) node)->children;
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- if (node->content != NULL) {
- ret = xmlStrlen(node->content);
- }
- break;
- case XML_ENTITY_REF_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_ENTITY_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- ret = 1;
- break;
- }
- for (;list != NULL;ret++)
- list = list->next;
- return(ret);
-}
-
-/**
- * xmlLsOneNode:
- * @output: the FILE * for the output
- * @node: the node to dump
- *
- * Dump to @output the type and name of @node.
- */
-void
-xmlLsOneNode(FILE *output, xmlNodePtr node) {
- if (output == NULL) return;
- if (node == NULL) {
- fprintf(output, "NULL\n");
- return;
- }
- switch (node->type) {
- case XML_ELEMENT_NODE:
- fprintf(output, "-");
- break;
- case XML_ATTRIBUTE_NODE:
- fprintf(output, "a");
- break;
- case XML_TEXT_NODE:
- fprintf(output, "t");
- break;
- case XML_CDATA_SECTION_NODE:
- fprintf(output, "C");
- break;
- case XML_ENTITY_REF_NODE:
- fprintf(output, "e");
- break;
- case XML_ENTITY_NODE:
- fprintf(output, "E");
- break;
- case XML_PI_NODE:
- fprintf(output, "p");
- break;
- case XML_COMMENT_NODE:
- fprintf(output, "c");
- break;
- case XML_DOCUMENT_NODE:
- fprintf(output, "d");
- break;
- case XML_HTML_DOCUMENT_NODE:
- fprintf(output, "h");
- break;
- case XML_DOCUMENT_TYPE_NODE:
- fprintf(output, "T");
- break;
- case XML_DOCUMENT_FRAG_NODE:
- fprintf(output, "F");
- break;
- case XML_NOTATION_NODE:
- fprintf(output, "N");
- break;
- case XML_NAMESPACE_DECL:
- fprintf(output, "n");
- break;
- default:
- fprintf(output, "?");
- }
- if (node->type != XML_NAMESPACE_DECL) {
- if (node->properties != NULL)
- fprintf(output, "a");
- else
- fprintf(output, "-");
- if (node->nsDef != NULL)
- fprintf(output, "n");
- else
- fprintf(output, "-");
- }
-
- fprintf(output, " %8d ", xmlLsCountNode(node));
-
- switch (node->type) {
- case XML_ELEMENT_NODE:
- if (node->name != NULL) {
- if ((node->ns != NULL) && (node->ns->prefix != NULL))
- fprintf(output, "%s:", node->ns->prefix);
- fprintf(output, "%s", (const char *) node->name);
- }
- break;
- case XML_ATTRIBUTE_NODE:
- if (node->name != NULL)
- fprintf(output, "%s", (const char *) node->name);
- break;
- case XML_TEXT_NODE:
- if (node->content != NULL) {
- xmlDebugDumpString(output, node->content);
- }
- break;
- case XML_CDATA_SECTION_NODE:
- break;
- case XML_ENTITY_REF_NODE:
- if (node->name != NULL)
- fprintf(output, "%s", (const char *) node->name);
- break;
- case XML_ENTITY_NODE:
- if (node->name != NULL)
- fprintf(output, "%s", (const char *) node->name);
- break;
- case XML_PI_NODE:
- if (node->name != NULL)
- fprintf(output, "%s", (const char *) node->name);
- break;
- case XML_COMMENT_NODE:
- break;
- case XML_DOCUMENT_NODE:
- break;
- case XML_HTML_DOCUMENT_NODE:
- break;
- case XML_DOCUMENT_TYPE_NODE:
- break;
- case XML_DOCUMENT_FRAG_NODE:
- break;
- case XML_NOTATION_NODE:
- break;
- case XML_NAMESPACE_DECL: {
- xmlNsPtr ns = (xmlNsPtr) node;
-
- if (ns->prefix == NULL)
- fprintf(output, "default -> %s", (char *)ns->href);
- else
- fprintf(output, "%s -> %s", (char *)ns->prefix,
- (char *)ns->href);
- break;
- }
- default:
- if (node->name != NULL)
- fprintf(output, "%s", (const char *) node->name);
- }
- fprintf(output, "\n");
-}
-
-/**
- * xmlBoolToText:
- * @boolval: a bool to turn into text
- *
- * Convenient way to turn bool into text
- *
- * Returns a pointer to either "True" or "False"
- */
-const char *
-xmlBoolToText(int boolval)
-{
- if (boolval)
- return("True");
- else
- return("False");
-}
-
-#ifdef LIBXML_XPATH_ENABLED
-/****************************************************************
- * *
- * The XML shell related functions *
- * *
- ****************************************************************/
-
-
-
-/*
- * TODO: Improvement/cleanups for the XML shell
- * - allow to shell out an editor on a subpart
- * - cleanup function registrations (with help) and calling
- * - provide registration routines
- */
-
-/**
- * xmlShellPrintXPathError:
- * @errorType: valid xpath error id
- * @arg: the argument that cause xpath to fail
- *
- * Print the xpath error to libxml default error channel
- */
-void
-xmlShellPrintXPathError(int errorType, const char *arg)
-{
- const char *default_arg = "Result";
-
- if (!arg)
- arg = default_arg;
-
- switch (errorType) {
- case XPATH_UNDEFINED:
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- break;
-
- case XPATH_BOOLEAN:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a Boolean\n", arg);
- break;
- case XPATH_NUMBER:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a number\n", arg);
- break;
- case XPATH_STRING:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a string\n", arg);
- break;
- case XPATH_POINT:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a point\n", arg);
- break;
- case XPATH_RANGE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_LOCATIONSET:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_USERS:
- xmlGenericError(xmlGenericErrorContext,
- "%s is user-defined\n", arg);
- break;
- case XPATH_XSLT_TREE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is an XSLT value tree\n", arg);
- break;
- }
-#if 0
- xmlGenericError(xmlGenericErrorContext,
- "Try casting the result string function (xpath builtin)\n",
- arg);
-#endif
-}
-
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlShellPrintNodeCtxt:
- * @ctxt : a non-null shell context
- * @node : a non-null node to print to the output FILE
- *
- * Print node to the output FILE
- */
-static void
-xmlShellPrintNodeCtxt(xmlShellCtxtPtr ctxt,xmlNodePtr node)
-{
- FILE *fp;
-
- if (!node)
- return;
- if (ctxt == NULL)
- fp = stdout;
- else
- fp = ctxt->output;
-
- if (node->type == XML_DOCUMENT_NODE)
- xmlDocDump(fp, (xmlDocPtr) node);
- else if (node->type == XML_ATTRIBUTE_NODE)
- xmlDebugDumpAttrList(fp, (xmlAttrPtr) node, 0);
- else
- xmlElemDump(fp, node->doc, node);
-
- fprintf(fp, "\n");
-}
-
-/**
- * xmlShellPrintNode:
- * @node : a non-null node to print to the output FILE
- *
- * Print node to the output FILE
- */
-void
-xmlShellPrintNode(xmlNodePtr node)
-{
- xmlShellPrintNodeCtxt(NULL, node);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlShellPrintXPathResultCtxt:
- * @ctxt: a valid shell context
- * @list: a valid result generated by an xpath evaluation
- *
- * Prints result to the output FILE
- */
-static void
-xmlShellPrintXPathResultCtxt(xmlShellCtxtPtr ctxt,xmlXPathObjectPtr list)
-{
- if (!ctxt)
- return;
-
- if (list != NULL) {
- switch (list->type) {
- case XPATH_NODESET:{
-#ifdef LIBXML_OUTPUT_ENABLED
- int indx;
-
- if (list->nodesetval) {
- for (indx = 0; indx < list->nodesetval->nodeNr;
- indx++) {
- xmlShellPrintNodeCtxt(ctxt,
- list->nodesetval->nodeTab[indx]);
- }
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "Empty node set\n");
- }
- break;
-#else
- xmlGenericError(xmlGenericErrorContext,
- "Node set\n");
-#endif /* LIBXML_OUTPUT_ENABLED */
- }
- case XPATH_BOOLEAN:
- xmlGenericError(xmlGenericErrorContext,
- "Is a Boolean:%s\n",
- xmlBoolToText(list->boolval));
- break;
- case XPATH_NUMBER:
- xmlGenericError(xmlGenericErrorContext,
- "Is a number:%0g\n", list->floatval);
- break;
- case XPATH_STRING:
- xmlGenericError(xmlGenericErrorContext,
- "Is a string:%s\n", list->stringval);
- break;
-
- default:
- xmlShellPrintXPathError(list->type, NULL);
- }
- }
-}
-
-/**
- * xmlShellPrintXPathResult:
- * @list: a valid result generated by an xpath evaluation
- *
- * Prints result to the output FILE
- */
-void
-xmlShellPrintXPathResult(xmlXPathObjectPtr list)
-{
- xmlShellPrintXPathResultCtxt(NULL, list);
-}
-
-/**
- * xmlShellList:
- * @ctxt: the shell context
- * @arg: unused
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "ls"
- * Does an Unix like listing of the given node (like a directory)
- *
- * Returns 0
- */
-int
-xmlShellList(xmlShellCtxtPtr ctxt,
- char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlNodePtr cur;
- if (!ctxt)
- return (0);
- if (node == NULL) {
- fprintf(ctxt->output, "NULL\n");
- return (0);
- }
- if ((node->type == XML_DOCUMENT_NODE) ||
- (node->type == XML_HTML_DOCUMENT_NODE)) {
- cur = ((xmlDocPtr) node)->children;
- } else if (node->type == XML_NAMESPACE_DECL) {
- xmlLsOneNode(ctxt->output, node);
- return (0);
- } else if (node->children != NULL) {
- cur = node->children;
- } else {
- xmlLsOneNode(ctxt->output, node);
- return (0);
- }
- while (cur != NULL) {
- xmlLsOneNode(ctxt->output, cur);
- cur = cur->next;
- }
- return (0);
-}
-
-/**
- * xmlShellBase:
- * @ctxt: the shell context
- * @arg: unused
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "base"
- * dumps the current XML base of the node
- *
- * Returns 0
- */
-int
-xmlShellBase(xmlShellCtxtPtr ctxt,
- char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlChar *base;
- if (!ctxt)
- return 0;
- if (node == NULL) {
- fprintf(ctxt->output, "NULL\n");
- return (0);
- }
-
- base = xmlNodeGetBase(node->doc, node);
-
- if (base == NULL) {
- fprintf(ctxt->output, " No base found !!!\n");
- } else {
- fprintf(ctxt->output, "%s\n", base);
- xmlFree(base);
- }
- return (0);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlShellSetBase:
- * @ctxt: the shell context
- * @arg: the new base
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "setbase"
- * change the current XML base of the node
- *
- * Returns 0
- */
-static int
-xmlShellSetBase(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
- char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlNodeSetBase(node, (xmlChar*) arg);
- return (0);
-}
-#endif
-
-#ifdef LIBXML_XPATH_ENABLED
-/**
- * xmlShellRegisterNamespace:
- * @ctxt: the shell context
- * @arg: a string in prefix=nsuri format
- * @node: unused
- * @node2: unused
- *
- * Implements the XML shell function "setns"
- * register/unregister a prefix=namespace pair
- * on the XPath context
- *
- * Returns 0 on success and a negative value otherwise.
- */
-static int
-xmlShellRegisterNamespace(xmlShellCtxtPtr ctxt, char *arg,
- xmlNodePtr node ATTRIBUTE_UNUSED, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlChar* nsListDup;
- xmlChar* prefix;
- xmlChar* href;
- xmlChar* next;
-
- nsListDup = xmlStrdup((xmlChar *) arg);
- next = nsListDup;
- while(next != NULL) {
- /* skip spaces */
- /*while((*next) == ' ') next++;*/
- if((*next) == '\0') break;
-
- /* find prefix */
- prefix = next;
- next = (xmlChar*)xmlStrchr(next, '=');
- if(next == NULL) {
- fprintf(ctxt->output, "setns: prefix=[nsuri] required\n");
- xmlFree(nsListDup);
- return(-1);
- }
- *(next++) = '\0';
-
- /* find href */
- href = next;
- next = (xmlChar*)xmlStrchr(next, ' ');
- if(next != NULL) {
- *(next++) = '\0';
- }
-
- /* do register namespace */
- if(xmlXPathRegisterNs(ctxt->pctxt, prefix, href) != 0) {
- fprintf(ctxt->output,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", prefix, href);
- xmlFree(nsListDup);
- return(-1);
- }
- }
-
- xmlFree(nsListDup);
- return(0);
-}
-/**
- * xmlShellRegisterRootNamespaces:
- * @ctxt: the shell context
- * @arg: unused
- * @node: the root element
- * @node2: unused
- *
- * Implements the XML shell function "setrootns"
- * which registers all namespaces declarations found on the root element.
- *
- * Returns 0 on success and a negative value otherwise.
- */
-static int
-xmlShellRegisterRootNamespaces(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED,
- xmlNodePtr root, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlNsPtr ns;
-
- if ((root == NULL) || (root->type != XML_ELEMENT_NODE) ||
- (root->nsDef == NULL) || (ctxt == NULL) || (ctxt->pctxt == NULL))
- return(-1);
- ns = root->nsDef;
- while (ns != NULL) {
- if (ns->prefix == NULL)
- xmlXPathRegisterNs(ctxt->pctxt, BAD_CAST "defaultns", ns->href);
- else
- xmlXPathRegisterNs(ctxt->pctxt, ns->prefix, ns->href);
- ns = ns->next;
- }
- return(0);
-}
-#endif
-
-/**
- * xmlShellGrep:
- * @ctxt: the shell context
- * @arg: the string or regular expression to find
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "grep"
- * dumps informations about the node (namespace, attributes, content).
- *
- * Returns 0
- */
-static int
-xmlShellGrep(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
- char *arg, xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- if (!ctxt)
- return (0);
- if (node == NULL)
- return (0);
- if (arg == NULL)
- return (0);
-#ifdef LIBXML_REGEXP_ENABLED
- if ((xmlStrchr((xmlChar *) arg, '?')) ||
- (xmlStrchr((xmlChar *) arg, '*')) ||
- (xmlStrchr((xmlChar *) arg, '.')) ||
- (xmlStrchr((xmlChar *) arg, '['))) {
- }
-#endif
- while (node != NULL) {
- if (node->type == XML_COMMENT_NODE) {
- if (xmlStrstr(node->content, (xmlChar *) arg)) {
-
- fprintf(ctxt->output, "%s : ", xmlGetNodePath(node));
- xmlShellList(ctxt, NULL, node, NULL);
- }
- } else if (node->type == XML_TEXT_NODE) {
- if (xmlStrstr(node->content, (xmlChar *) arg)) {
-
- fprintf(ctxt->output, "%s : ", xmlGetNodePath(node->parent));
- xmlShellList(ctxt, NULL, node->parent, NULL);
- }
- }
-
- /*
- * Browse the full subtree, deep first
- */
-
- if ((node->type == XML_DOCUMENT_NODE) ||
- (node->type == XML_HTML_DOCUMENT_NODE)) {
- node = ((xmlDocPtr) node)->children;
- } else if ((node->children != NULL)
- && (node->type != XML_ENTITY_REF_NODE)) {
- /* deep first */
- node = node->children;
- } else if (node->next != NULL) {
- /* then siblings */
- node = node->next;
- } else {
- /* go up to parents->next if needed */
- while (node != NULL) {
- if (node->parent != NULL) {
- node = node->parent;
- }
- if (node->next != NULL) {
- node = node->next;
- break;
- }
- if (node->parent == NULL) {
- node = NULL;
- break;
- }
- }
- }
- }
- return (0);
-}
-
-/**
- * xmlShellDir:
- * @ctxt: the shell context
- * @arg: unused
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "dir"
- * dumps informations about the node (namespace, attributes, content).
- *
- * Returns 0
- */
-int
-xmlShellDir(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
- char *arg ATTRIBUTE_UNUSED, xmlNodePtr node,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- if (!ctxt)
- return (0);
- if (node == NULL) {
- fprintf(ctxt->output, "NULL\n");
- return (0);
- }
- if ((node->type == XML_DOCUMENT_NODE) ||
- (node->type == XML_HTML_DOCUMENT_NODE)) {
- xmlDebugDumpDocumentHead(ctxt->output, (xmlDocPtr) node);
- } else if (node->type == XML_ATTRIBUTE_NODE) {
- xmlDebugDumpAttr(ctxt->output, (xmlAttrPtr) node, 0);
- } else {
- xmlDebugDumpOneNode(ctxt->output, node, 0);
- }
- return (0);
-}
-
-/**
- * xmlShellSetContent:
- * @ctxt: the shell context
- * @value: the content as a string
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "dir"
- * dumps informations about the node (namespace, attributes, content).
- *
- * Returns 0
- */
-static int
-xmlShellSetContent(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED,
- char *value, xmlNodePtr node,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlNodePtr results;
- xmlParserErrors ret;
-
- if (!ctxt)
- return (0);
- if (node == NULL) {
- fprintf(ctxt->output, "NULL\n");
- return (0);
- }
- if (value == NULL) {
- fprintf(ctxt->output, "NULL\n");
- return (0);
- }
-
- ret = xmlParseInNodeContext(node, value, strlen(value), 0, &results);
- if (ret == XML_ERR_OK) {
- if (node->children != NULL) {
- xmlFreeNodeList(node->children);
- node->children = NULL;
- node->last = NULL;
- }
- xmlAddChildList(node, results);
- } else {
- fprintf(ctxt->output, "failed to parse content\n");
- }
- return (0);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-/**
- * xmlShellRNGValidate:
- * @ctxt: the shell context
- * @schemas: the path to the Relax-NG schemas
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "relaxng"
- * validating the instance against a Relax-NG schemas
- *
- * Returns 0
- */
-static int
-xmlShellRNGValidate(xmlShellCtxtPtr sctxt, char *schemas,
- xmlNodePtr node ATTRIBUTE_UNUSED,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlRelaxNGPtr relaxngschemas;
- xmlRelaxNGParserCtxtPtr ctxt;
- xmlRelaxNGValidCtxtPtr vctxt;
- int ret;
-
- ctxt = xmlRelaxNGNewParserCtxt(schemas);
- xmlRelaxNGSetParserErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) fprintf,
- (xmlRelaxNGValidityWarningFunc) fprintf,
- stderr);
- relaxngschemas = xmlRelaxNGParse(ctxt);
- xmlRelaxNGFreeParserCtxt(ctxt);
- if (relaxngschemas == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Relax-NG schema %s failed to compile\n", schemas);
- return(-1);
- }
- vctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
- xmlRelaxNGSetValidErrors(vctxt,
- (xmlRelaxNGValidityErrorFunc) fprintf,
- (xmlRelaxNGValidityWarningFunc) fprintf,
- stderr);
- ret = xmlRelaxNGValidateDoc(vctxt, sctxt->doc);
- if (ret == 0) {
- fprintf(stderr, "%s validates\n", sctxt->filename);
- } else if (ret > 0) {
- fprintf(stderr, "%s fails to validate\n", sctxt->filename);
- } else {
- fprintf(stderr, "%s validation generated an internal error\n",
- sctxt->filename);
- }
- xmlRelaxNGFreeValidCtxt(vctxt);
- if (relaxngschemas != NULL)
- xmlRelaxNGFree(relaxngschemas);
- return(0);
-}
-#endif
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlShellCat:
- * @ctxt: the shell context
- * @arg: unused
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "cat"
- * dumps the serialization node content (XML or HTML).
- *
- * Returns 0
- */
-int
-xmlShellCat(xmlShellCtxtPtr ctxt, char *arg ATTRIBUTE_UNUSED,
- xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- if (!ctxt)
- return (0);
- if (node == NULL) {
- fprintf(ctxt->output, "NULL\n");
- return (0);
- }
- if (ctxt->doc->type == XML_HTML_DOCUMENT_NODE) {
-#ifdef LIBXML_HTML_ENABLED
- if (node->type == XML_HTML_DOCUMENT_NODE)
- htmlDocDump(ctxt->output, (htmlDocPtr) node);
- else
- htmlNodeDumpFile(ctxt->output, ctxt->doc, node);
-#else
- if (node->type == XML_DOCUMENT_NODE)
- xmlDocDump(ctxt->output, (xmlDocPtr) node);
- else
- xmlElemDump(ctxt->output, ctxt->doc, node);
-#endif /* LIBXML_HTML_ENABLED */
- } else {
- if (node->type == XML_DOCUMENT_NODE)
- xmlDocDump(ctxt->output, (xmlDocPtr) node);
- else
- xmlElemDump(ctxt->output, ctxt->doc, node);
- }
- fprintf(ctxt->output, "\n");
- return (0);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlShellLoad:
- * @ctxt: the shell context
- * @filename: the file name
- * @node: unused
- * @node2: unused
- *
- * Implements the XML shell function "load"
- * loads a new document specified by the filename
- *
- * Returns 0 or -1 if loading failed
- */
-int
-xmlShellLoad(xmlShellCtxtPtr ctxt, char *filename,
- xmlNodePtr node ATTRIBUTE_UNUSED,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlDocPtr doc;
- int html = 0;
-
- if ((ctxt == NULL) || (filename == NULL)) return(-1);
- if (ctxt->doc != NULL)
- html = (ctxt->doc->type == XML_HTML_DOCUMENT_NODE);
-
- if (html) {
-#ifdef LIBXML_HTML_ENABLED
- doc = htmlParseFile(filename, NULL);
-#else
- fprintf(ctxt->output, "HTML support not compiled in\n");
- doc = NULL;
-#endif /* LIBXML_HTML_ENABLED */
- } else {
- doc = xmlReadFile(filename,NULL,0);
- }
- if (doc != NULL) {
- if (ctxt->loaded == 1) {
- xmlFreeDoc(ctxt->doc);
- }
- ctxt->loaded = 1;
-#ifdef LIBXML_XPATH_ENABLED
- xmlXPathFreeContext(ctxt->pctxt);
-#endif /* LIBXML_XPATH_ENABLED */
- xmlFree(ctxt->filename);
- ctxt->doc = doc;
- ctxt->node = (xmlNodePtr) doc;
-#ifdef LIBXML_XPATH_ENABLED
- ctxt->pctxt = xmlXPathNewContext(doc);
-#endif /* LIBXML_XPATH_ENABLED */
- ctxt->filename = (char *) xmlCanonicPath((xmlChar *) filename);
- } else
- return (-1);
- return (0);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlShellWrite:
- * @ctxt: the shell context
- * @filename: the file name
- * @node: a node in the tree
- * @node2: unused
- *
- * Implements the XML shell function "write"
- * Write the current node to the filename, it saves the serialization
- * of the subtree under the @node specified
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellWrite(xmlShellCtxtPtr ctxt, char *filename, xmlNodePtr node,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- if (node == NULL)
- return (-1);
- if ((filename == NULL) || (filename[0] == 0)) {
- return (-1);
- }
-#ifdef W_OK
- if (access((char *) filename, W_OK)) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot write to %s\n", filename);
- return (-1);
- }
-#endif
- switch (node->type) {
- case XML_DOCUMENT_NODE:
- if (xmlSaveFile((char *) filename, ctxt->doc) < -1) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to write to %s\n", filename);
- return (-1);
- }
- break;
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_HTML_ENABLED
- if (htmlSaveFile((char *) filename, ctxt->doc) < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to write to %s\n", filename);
- return (-1);
- }
-#else
- if (xmlSaveFile((char *) filename, ctxt->doc) < -1) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to write to %s\n", filename);
- return (-1);
- }
-#endif /* LIBXML_HTML_ENABLED */
- break;
- default:{
- FILE *f;
-
- f = fopen((char *) filename, "w");
- if (f == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to write to %s\n", filename);
- return (-1);
- }
- xmlElemDump(f, ctxt->doc, node);
- fclose(f);
- }
- }
- return (0);
-}
-
-/**
- * xmlShellSave:
- * @ctxt: the shell context
- * @filename: the file name (optional)
- * @node: unused
- * @node2: unused
- *
- * Implements the XML shell function "save"
- * Write the current document to the filename, or it's original name
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellSave(xmlShellCtxtPtr ctxt, char *filename,
- xmlNodePtr node ATTRIBUTE_UNUSED,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- if ((ctxt == NULL) || (ctxt->doc == NULL))
- return (-1);
- if ((filename == NULL) || (filename[0] == 0))
- filename = ctxt->filename;
- if (filename == NULL)
- return (-1);
-#ifdef W_OK
- if (access((char *) filename, W_OK)) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot save to %s\n", filename);
- return (-1);
- }
-#endif
- switch (ctxt->doc->type) {
- case XML_DOCUMENT_NODE:
- if (xmlSaveFile((char *) filename, ctxt->doc) < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to save to %s\n", filename);
- }
- break;
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_HTML_ENABLED
- if (htmlSaveFile((char *) filename, ctxt->doc) < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to save to %s\n", filename);
- }
-#else
- if (xmlSaveFile((char *) filename, ctxt->doc) < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to save to %s\n", filename);
- }
-#endif /* LIBXML_HTML_ENABLED */
- break;
- default:
- xmlGenericError(xmlGenericErrorContext,
- "To save to subparts of a document use the 'write' command\n");
- return (-1);
-
- }
- return (0);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#ifdef LIBXML_VALID_ENABLED
-/**
- * xmlShellValidate:
- * @ctxt: the shell context
- * @dtd: the DTD URI (optional)
- * @node: unused
- * @node2: unused
- *
- * Implements the XML shell function "validate"
- * Validate the document, if a DTD path is provided, then the validation
- * is done against the given DTD.
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellValidate(xmlShellCtxtPtr ctxt, char *dtd,
- xmlNodePtr node ATTRIBUTE_UNUSED,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlValidCtxt vctxt;
- int res = -1;
-
- if ((ctxt == NULL) || (ctxt->doc == NULL)) return(-1);
- vctxt.userData = stderr;
- vctxt.error = (xmlValidityErrorFunc) fprintf;
- vctxt.warning = (xmlValidityWarningFunc) fprintf;
-
- if ((dtd == NULL) || (dtd[0] == 0)) {
- res = xmlValidateDocument(&vctxt, ctxt->doc);
- } else {
- xmlDtdPtr subset;
-
- subset = xmlParseDTD(NULL, (xmlChar *) dtd);
- if (subset != NULL) {
- res = xmlValidateDtd(&vctxt, ctxt->doc, subset);
-
- xmlFreeDtd(subset);
- }
- }
- return (res);
-}
-#endif /* LIBXML_VALID_ENABLED */
-
-/**
- * xmlShellDu:
- * @ctxt: the shell context
- * @arg: unused
- * @tree: a node defining a subtree
- * @node2: unused
- *
- * Implements the XML shell function "du"
- * show the structure of the subtree under node @tree
- * If @tree is null, the command works on the current node.
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellDu(xmlShellCtxtPtr ctxt,
- char *arg ATTRIBUTE_UNUSED, xmlNodePtr tree,
- xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlNodePtr node;
- int indent = 0, i;
-
- if (!ctxt)
- return (-1);
-
- if (tree == NULL)
- return (-1);
- node = tree;
- while (node != NULL) {
- if ((node->type == XML_DOCUMENT_NODE) ||
- (node->type == XML_HTML_DOCUMENT_NODE)) {
- fprintf(ctxt->output, "/\n");
- } else if (node->type == XML_ELEMENT_NODE) {
- for (i = 0; i < indent; i++)
- fprintf(ctxt->output, " ");
- if ((node->ns) && (node->ns->prefix))
- fprintf(ctxt->output, "%s:", node->ns->prefix);
- fprintf(ctxt->output, "%s\n", node->name);
- } else {
- }
-
- /*
- * Browse the full subtree, deep first
- */
-
- if ((node->type == XML_DOCUMENT_NODE) ||
- (node->type == XML_HTML_DOCUMENT_NODE)) {
- node = ((xmlDocPtr) node)->children;
- } else if ((node->children != NULL)
- && (node->type != XML_ENTITY_REF_NODE)) {
- /* deep first */
- node = node->children;
- indent++;
- } else if ((node != tree) && (node->next != NULL)) {
- /* then siblings */
- node = node->next;
- } else if (node != tree) {
- /* go up to parents->next if needed */
- while (node != tree) {
- if (node->parent != NULL) {
- node = node->parent;
- indent--;
- }
- if ((node != tree) && (node->next != NULL)) {
- node = node->next;
- break;
- }
- if (node->parent == NULL) {
- node = NULL;
- break;
- }
- if (node == tree) {
- node = NULL;
- break;
- }
- }
- /* exit condition */
- if (node == tree)
- node = NULL;
- } else
- node = NULL;
- }
- return (0);
-}
-
-/**
- * xmlShellPwd:
- * @ctxt: the shell context
- * @buffer: the output buffer
- * @node: a node
- * @node2: unused
- *
- * Implements the XML shell function "pwd"
- * Show the full path from the root to the node, if needed building
- * thumblers when similar elements exists at a given ancestor level.
- * The output is compatible with XPath commands.
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlShellPwd(xmlShellCtxtPtr ctxt ATTRIBUTE_UNUSED, char *buffer,
- xmlNodePtr node, xmlNodePtr node2 ATTRIBUTE_UNUSED)
-{
- xmlChar *path;
-
- if ((node == NULL) || (buffer == NULL))
- return (-1);
-
- path = xmlGetNodePath(node);
- if (path == NULL)
- return (-1);
-
- /*
- * This test prevents buffer overflow, because this routine
- * is only called by xmlShell, in which the second argument is
- * 500 chars long.
- * It is a dirty hack before a cleaner solution is found.
- * Documentation should mention that the second argument must
- * be at least 500 chars long, and could be stripped if too long.
- */
- snprintf(buffer, 499, "%s", path);
- buffer[499] = '0';
- xmlFree(path);
-
- return (0);
-}
-
-/**
- * xmlShell:
- * @doc: the initial document
- * @filename: the output buffer
- * @input: the line reading function
- * @output: the output FILE*, defaults to stdout if NULL
- *
- * Implements the XML shell
- * This allow to load, validate, view, modify and save a document
- * using a environment similar to a UNIX commandline.
- */
-void
-xmlShell(xmlDocPtr doc, char *filename, xmlShellReadlineFunc input,
- FILE * output)
-{
- char prompt[500] = "/ > ";
- char *cmdline = NULL, *cur;
- char command[100];
- char arg[400];
- int i;
- xmlShellCtxtPtr ctxt;
- xmlXPathObjectPtr list;
-
- if (doc == NULL)
- return;
- if (filename == NULL)
- return;
- if (input == NULL)
- return;
- if (output == NULL)
- output = stdout;
- ctxt = (xmlShellCtxtPtr) xmlMalloc(sizeof(xmlShellCtxt));
- if (ctxt == NULL)
- return;
- ctxt->loaded = 0;
- ctxt->doc = doc;
- ctxt->input = input;
- ctxt->output = output;
- ctxt->filename = (char *) xmlStrdup((xmlChar *) filename);
- ctxt->node = (xmlNodePtr) ctxt->doc;
-
-#ifdef LIBXML_XPATH_ENABLED
- ctxt->pctxt = xmlXPathNewContext(ctxt->doc);
- if (ctxt->pctxt == NULL) {
- xmlFree(ctxt);
- return;
- }
-#endif /* LIBXML_XPATH_ENABLED */
- while (1) {
- if (ctxt->node == (xmlNodePtr) ctxt->doc)
- snprintf(prompt, sizeof(prompt), "%s > ", "/");
- else if ((ctxt->node != NULL) && (ctxt->node->name) &&
- (ctxt->node->ns) && (ctxt->node->ns->prefix))
- snprintf(prompt, sizeof(prompt), "%s:%s > ",
- (ctxt->node->ns->prefix), ctxt->node->name);
- else if ((ctxt->node != NULL) && (ctxt->node->name))
- snprintf(prompt, sizeof(prompt), "%s > ", ctxt->node->name);
- else
- snprintf(prompt, sizeof(prompt), "? > ");
- prompt[sizeof(prompt) - 1] = 0;
-
- /*
- * Get a new command line
- */
- cmdline = ctxt->input(prompt);
- if (cmdline == NULL)
- break;
-
- /*
- * Parse the command itself
- */
- cur = cmdline;
- while ((*cur == ' ') || (*cur == '\t'))
- cur++;
- i = 0;
- while ((*cur != ' ') && (*cur != '\t') &&
- (*cur != '\n') && (*cur != '\r')) {
- if (*cur == 0)
- break;
- command[i++] = *cur++;
- }
- command[i] = 0;
- if (i == 0)
- continue;
-
- /*
- * Parse the argument
- */
- while ((*cur == ' ') || (*cur == '\t'))
- cur++;
- i = 0;
- while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) {
- if (*cur == 0)
- break;
- arg[i++] = *cur++;
- }
- arg[i] = 0;
-
- /*
- * start interpreting the command
- */
- if (!strcmp(command, "exit"))
- break;
- if (!strcmp(command, "quit"))
- break;
- if (!strcmp(command, "bye"))
- break;
- if (!strcmp(command, "help")) {
- fprintf(ctxt->output, "\tbase display XML base of the node\n");
- fprintf(ctxt->output, "\tsetbase URI change the XML base of the node\n");
- fprintf(ctxt->output, "\tbye leave shell\n");
- fprintf(ctxt->output, "\tcat [node] display node or current node\n");
- fprintf(ctxt->output, "\tcd [path] change directory to path or to root\n");
- fprintf(ctxt->output, "\tdir [path] dumps informations about the node (namespace, attributes, content)\n");
- fprintf(ctxt->output, "\tdu [path] show the structure of the subtree under path or the current node\n");
- fprintf(ctxt->output, "\texit leave shell\n");
- fprintf(ctxt->output, "\thelp display this help\n");
- fprintf(ctxt->output, "\tfree display memory usage\n");
- fprintf(ctxt->output, "\tload [name] load a new document with name\n");
- fprintf(ctxt->output, "\tls [path] list contents of path or the current directory\n");
- fprintf(ctxt->output, "\tset xml_fragment replace the current node content with the fragment parsed in context\n");
-#ifdef LIBXML_XPATH_ENABLED
- fprintf(ctxt->output, "\txpath expr evaluate the XPath expression in that context and print the result\n");
- fprintf(ctxt->output, "\tsetns nsreg register a namespace to a prefix in the XPath evaluation context\n");
- fprintf(ctxt->output, "\t format for nsreg is: prefix=[nsuri] (i.e. prefix= unsets a prefix)\n");
- fprintf(ctxt->output, "\tsetrootns register all namespace found on the root element\n");
- fprintf(ctxt->output, "\t the default namespace if any uses 'defaultns' prefix\n");
-#endif /* LIBXML_XPATH_ENABLED */
- fprintf(ctxt->output, "\tpwd display current working directory\n");
- fprintf(ctxt->output, "\twhereis display absolute path of [path] or current working directory\n");
- fprintf(ctxt->output, "\tquit leave shell\n");
-#ifdef LIBXML_OUTPUT_ENABLED
- fprintf(ctxt->output, "\tsave [name] save this document to name or the original name\n");
- fprintf(ctxt->output, "\twrite [name] write the current node to the filename\n");
-#endif /* LIBXML_OUTPUT_ENABLED */
-#ifdef LIBXML_VALID_ENABLED
- fprintf(ctxt->output, "\tvalidate check the document for errors\n");
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_SCHEMAS_ENABLED
- fprintf(ctxt->output, "\trelaxng rng validate the document agaisnt the Relax-NG schemas\n");
-#endif
- fprintf(ctxt->output, "\tgrep string search for a string in the subtree\n");
-#ifdef LIBXML_VALID_ENABLED
- } else if (!strcmp(command, "validate")) {
- xmlShellValidate(ctxt, arg, NULL, NULL);
-#endif /* LIBXML_VALID_ENABLED */
- } else if (!strcmp(command, "load")) {
- xmlShellLoad(ctxt, arg, NULL, NULL);
-#ifdef LIBXML_SCHEMAS_ENABLED
- } else if (!strcmp(command, "relaxng")) {
- xmlShellRNGValidate(ctxt, arg, NULL, NULL);
-#endif
-#ifdef LIBXML_OUTPUT_ENABLED
- } else if (!strcmp(command, "save")) {
- xmlShellSave(ctxt, arg, NULL, NULL);
- } else if (!strcmp(command, "write")) {
- if (arg[0] == 0)
- xmlGenericError(xmlGenericErrorContext,
- "Write command requires a filename argument\n");
- else
- xmlShellWrite(ctxt, arg, ctxt->node, NULL);
-#endif /* LIBXML_OUTPUT_ENABLED */
- } else if (!strcmp(command, "grep")) {
- xmlShellGrep(ctxt, arg, ctxt->node, NULL);
- } else if (!strcmp(command, "free")) {
- if (arg[0] == 0) {
- xmlMemShow(ctxt->output, 0);
- } else {
- int len = 0;
-
- sscanf(arg, "%d", &len);
- xmlMemShow(ctxt->output, len);
- }
- } else if (!strcmp(command, "pwd")) {
- char dir[500];
-
- if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL))
- fprintf(ctxt->output, "%s\n", dir);
- } else if (!strcmp(command, "du")) {
- if (arg[0] == 0) {
- xmlShellDu(ctxt, NULL, ctxt->node, NULL);
- } else {
- ctxt->pctxt->node = ctxt->node;
-#ifdef LIBXML_XPATH_ENABLED
- ctxt->pctxt->node = ctxt->node;
- list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
- list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
- if (list != NULL) {
- switch (list->type) {
- case XPATH_UNDEFINED:
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- break;
- case XPATH_NODESET:{
- int indx;
-
- if (list->nodesetval == NULL)
- break;
-
- for (indx = 0;
- indx < list->nodesetval->nodeNr;
- indx++)
- xmlShellDu(ctxt, NULL,
- list->nodesetval->
- nodeTab[indx], NULL);
- break;
- }
- case XPATH_BOOLEAN:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a Boolean\n", arg);
- break;
- case XPATH_NUMBER:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a number\n", arg);
- break;
- case XPATH_STRING:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a string\n", arg);
- break;
- case XPATH_POINT:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a point\n", arg);
- break;
- case XPATH_RANGE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_LOCATIONSET:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_USERS:
- xmlGenericError(xmlGenericErrorContext,
- "%s is user-defined\n", arg);
- break;
- case XPATH_XSLT_TREE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is an XSLT value tree\n",
- arg);
- break;
- }
-#ifdef LIBXML_XPATH_ENABLED
- xmlXPathFreeObject(list);
-#endif
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- }
- ctxt->pctxt->node = NULL;
- }
- } else if (!strcmp(command, "base")) {
- xmlShellBase(ctxt, NULL, ctxt->node, NULL);
- } else if (!strcmp(command, "set")) {
- xmlShellSetContent(ctxt, arg, ctxt->node, NULL);
-#ifdef LIBXML_XPATH_ENABLED
- } else if (!strcmp(command, "setns")) {
- if (arg[0] == 0) {
- xmlGenericError(xmlGenericErrorContext,
- "setns: prefix=[nsuri] required\n");
- } else {
- xmlShellRegisterNamespace(ctxt, arg, NULL, NULL);
- }
- } else if (!strcmp(command, "setrootns")) {
- xmlNodePtr root;
-
- root = xmlDocGetRootElement(ctxt->doc);
- xmlShellRegisterRootNamespaces(ctxt, NULL, root, NULL);
- } else if (!strcmp(command, "xpath")) {
- if (arg[0] == 0) {
- xmlGenericError(xmlGenericErrorContext,
- "xpath: expression required\n");
- } else {
- ctxt->pctxt->node = ctxt->node;
- list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
- xmlXPathDebugDumpObject(ctxt->output, list, 0);
- xmlXPathFreeObject(list);
- }
-#endif /* LIBXML_XPATH_ENABLED */
-#ifdef LIBXML_TREE_ENABLED
- } else if (!strcmp(command, "setbase")) {
- xmlShellSetBase(ctxt, arg, ctxt->node, NULL);
-#endif
- } else if ((!strcmp(command, "ls")) || (!strcmp(command, "dir"))) {
- int dir = (!strcmp(command, "dir"));
-
- if (arg[0] == 0) {
- if (dir)
- xmlShellDir(ctxt, NULL, ctxt->node, NULL);
- else
- xmlShellList(ctxt, NULL, ctxt->node, NULL);
- } else {
- ctxt->pctxt->node = ctxt->node;
-#ifdef LIBXML_XPATH_ENABLED
- ctxt->pctxt->node = ctxt->node;
- list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
- list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
- if (list != NULL) {
- switch (list->type) {
- case XPATH_UNDEFINED:
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- break;
- case XPATH_NODESET:{
- int indx;
-
- if (list->nodesetval == NULL)
- break;
-
- for (indx = 0;
- indx < list->nodesetval->nodeNr;
- indx++) {
- if (dir)
- xmlShellDir(ctxt, NULL,
- list->nodesetval->
- nodeTab[indx], NULL);
- else
- xmlShellList(ctxt, NULL,
- list->nodesetval->
- nodeTab[indx], NULL);
- }
- break;
- }
- case XPATH_BOOLEAN:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a Boolean\n", arg);
- break;
- case XPATH_NUMBER:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a number\n", arg);
- break;
- case XPATH_STRING:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a string\n", arg);
- break;
- case XPATH_POINT:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a point\n", arg);
- break;
- case XPATH_RANGE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_LOCATIONSET:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_USERS:
- xmlGenericError(xmlGenericErrorContext,
- "%s is user-defined\n", arg);
- break;
- case XPATH_XSLT_TREE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is an XSLT value tree\n",
- arg);
- break;
- }
-#ifdef LIBXML_XPATH_ENABLED
- xmlXPathFreeObject(list);
-#endif
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- }
- ctxt->pctxt->node = NULL;
- }
- } else if (!strcmp(command, "whereis")) {
- char dir[500];
-
- if (arg[0] == 0) {
- if (!xmlShellPwd(ctxt, dir, ctxt->node, NULL))
- fprintf(ctxt->output, "%s\n", dir);
- } else {
- ctxt->pctxt->node = ctxt->node;
-#ifdef LIBXML_XPATH_ENABLED
- list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
- list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
- if (list != NULL) {
- switch (list->type) {
- case XPATH_UNDEFINED:
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- break;
- case XPATH_NODESET:{
- int indx;
-
- if (list->nodesetval == NULL)
- break;
-
- for (indx = 0;
- indx < list->nodesetval->nodeNr;
- indx++) {
- if (!xmlShellPwd(ctxt, dir, list->nodesetval->
- nodeTab[indx], NULL))
- fprintf(ctxt->output, "%s\n", dir);
- }
- break;
- }
- case XPATH_BOOLEAN:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a Boolean\n", arg);
- break;
- case XPATH_NUMBER:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a number\n", arg);
- break;
- case XPATH_STRING:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a string\n", arg);
- break;
- case XPATH_POINT:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a point\n", arg);
- break;
- case XPATH_RANGE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_LOCATIONSET:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_USERS:
- xmlGenericError(xmlGenericErrorContext,
- "%s is user-defined\n", arg);
- break;
- case XPATH_XSLT_TREE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is an XSLT value tree\n",
- arg);
- break;
- }
-#ifdef LIBXML_XPATH_ENABLED
- xmlXPathFreeObject(list);
-#endif
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- }
- ctxt->pctxt->node = NULL;
- }
- } else if (!strcmp(command, "cd")) {
- if (arg[0] == 0) {
- ctxt->node = (xmlNodePtr) ctxt->doc;
- } else {
-#ifdef LIBXML_XPATH_ENABLED
- int l;
-
- ctxt->pctxt->node = ctxt->node;
- l = strlen(arg);
- if ((l >= 2) && (arg[l - 1] == '/'))
- arg[l - 1] = 0;
- list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
- list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
- if (list != NULL) {
- switch (list->type) {
- case XPATH_UNDEFINED:
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- break;
- case XPATH_NODESET:
- if (list->nodesetval != NULL) {
- if (list->nodesetval->nodeNr == 1) {
- ctxt->node = list->nodesetval->nodeTab[0];
- if ((ctxt->node != NULL) &&
- (ctxt->node->type ==
- XML_NAMESPACE_DECL)) {
- xmlGenericError(xmlGenericErrorContext,
- "cannot cd to namespace\n");
- ctxt->node = NULL;
- }
- } else
- xmlGenericError(xmlGenericErrorContext,
- "%s is a %d Node Set\n",
- arg,
- list->nodesetval->nodeNr);
- } else
- xmlGenericError(xmlGenericErrorContext,
- "%s is an empty Node Set\n",
- arg);
- break;
- case XPATH_BOOLEAN:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a Boolean\n", arg);
- break;
- case XPATH_NUMBER:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a number\n", arg);
- break;
- case XPATH_STRING:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a string\n", arg);
- break;
- case XPATH_POINT:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a point\n", arg);
- break;
- case XPATH_RANGE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_LOCATIONSET:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_USERS:
- xmlGenericError(xmlGenericErrorContext,
- "%s is user-defined\n", arg);
- break;
- case XPATH_XSLT_TREE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is an XSLT value tree\n",
- arg);
- break;
- }
-#ifdef LIBXML_XPATH_ENABLED
- xmlXPathFreeObject(list);
-#endif
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- }
- ctxt->pctxt->node = NULL;
- }
-#ifdef LIBXML_OUTPUT_ENABLED
- } else if (!strcmp(command, "cat")) {
- if (arg[0] == 0) {
- xmlShellCat(ctxt, NULL, ctxt->node, NULL);
- } else {
- ctxt->pctxt->node = ctxt->node;
-#ifdef LIBXML_XPATH_ENABLED
- ctxt->pctxt->node = ctxt->node;
- list = xmlXPathEval((xmlChar *) arg, ctxt->pctxt);
-#else
- list = NULL;
-#endif /* LIBXML_XPATH_ENABLED */
- if (list != NULL) {
- switch (list->type) {
- case XPATH_UNDEFINED:
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- break;
- case XPATH_NODESET:{
- int indx;
-
- if (list->nodesetval == NULL)
- break;
-
- for (indx = 0;
- indx < list->nodesetval->nodeNr;
- indx++) {
- if (i > 0)
- fprintf(ctxt->output, " -------\n");
- xmlShellCat(ctxt, NULL,
- list->nodesetval->
- nodeTab[indx], NULL);
- }
- break;
- }
- case XPATH_BOOLEAN:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a Boolean\n", arg);
- break;
- case XPATH_NUMBER:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a number\n", arg);
- break;
- case XPATH_STRING:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a string\n", arg);
- break;
- case XPATH_POINT:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a point\n", arg);
- break;
- case XPATH_RANGE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_LOCATIONSET:
- xmlGenericError(xmlGenericErrorContext,
- "%s is a range\n", arg);
- break;
- case XPATH_USERS:
- xmlGenericError(xmlGenericErrorContext,
- "%s is user-defined\n", arg);
- break;
- case XPATH_XSLT_TREE:
- xmlGenericError(xmlGenericErrorContext,
- "%s is an XSLT value tree\n",
- arg);
- break;
- }
-#ifdef LIBXML_XPATH_ENABLED
- xmlXPathFreeObject(list);
-#endif
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "%s: no such node\n", arg);
- }
- ctxt->pctxt->node = NULL;
- }
-#endif /* LIBXML_OUTPUT_ENABLED */
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "Unknown command %s\n", command);
- }
- free(cmdline); /* not xmlFree here ! */
- cmdline = NULL;
- }
-#ifdef LIBXML_XPATH_ENABLED
- xmlXPathFreeContext(ctxt->pctxt);
-#endif /* LIBXML_XPATH_ENABLED */
- if (ctxt->loaded) {
- xmlFreeDoc(ctxt->doc);
- }
- if (ctxt->filename != NULL)
- xmlFree(ctxt->filename);
- xmlFree(ctxt);
- if (cmdline != NULL)
- free(cmdline); /* not xmlFree here ! */
-}
-
-#endif /* LIBXML_XPATH_ENABLED */
-#define bottom_debugXML
-#include "elfgcchack.h"
-#endif /* LIBXML_DEBUG_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/dict.c b/external/libxml2_android/jni/libxml2/dict.c
deleted file mode 100644
index c0585fe2..00000000
--- a/external/libxml2_android/jni/libxml2/dict.c
+++ /dev/null
@@ -1,1262 +0,0 @@
-/*
- * dict.c: dictionary of reusable strings, just used to avoid allocation
- * and freeing operations.
- *
- * Copyright (C) 2003-2012 Daniel Veillard.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- * Author: daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <limits.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-
-/*
- * Following http://www.ocert.org/advisories/ocert-2011-003.html
- * it seems that having hash randomization might be a good idea
- * when using XML with untrusted data
- * Note1: that it works correctly only if compiled with WITH_BIG_KEY
- * which is the default.
- * Note2: the fast function used for a small dict won't protect very
- * well but since the attack is based on growing a very big hash
- * list we will use the BigKey algo as soon as the hash size grows
- * over MIN_DICT_SIZE so this actually works
- */
-#if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME)
-#define DICT_RANDOMIZATION
-#endif
-
-#include <string.h>
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#else
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#elif defined(WIN32)
-typedef unsigned __int32 uint32_t;
-#endif
-#endif
-#include <libxml/tree.h>
-#include <libxml/dict.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-
-/* #define DEBUG_GROW */
-/* #define DICT_DEBUG_PATTERNS */
-
-#define MAX_HASH_LEN 3
-#define MIN_DICT_SIZE 128
-#define MAX_DICT_HASH 8 * 2048
-#define WITH_BIG_KEY
-
-#ifdef WITH_BIG_KEY
-#define xmlDictComputeKey(dict, name, len) \
- (((dict)->size == MIN_DICT_SIZE) ? \
- xmlDictComputeFastKey(name, len, (dict)->seed) : \
- xmlDictComputeBigKey(name, len, (dict)->seed))
-
-#define xmlDictComputeQKey(dict, prefix, plen, name, len) \
- (((prefix) == NULL) ? \
- (xmlDictComputeKey(dict, name, len)) : \
- (((dict)->size == MIN_DICT_SIZE) ? \
- xmlDictComputeFastQKey(prefix, plen, name, len, (dict)->seed) : \
- xmlDictComputeBigQKey(prefix, plen, name, len, (dict)->seed)))
-
-#else /* !WITH_BIG_KEY */
-#define xmlDictComputeKey(dict, name, len) \
- xmlDictComputeFastKey(name, len, (dict)->seed)
-#define xmlDictComputeQKey(dict, prefix, plen, name, len) \
- xmlDictComputeFastQKey(prefix, plen, name, len, (dict)->seed)
-#endif /* WITH_BIG_KEY */
-
-/*
- * An entry in the dictionary
- */
-typedef struct _xmlDictEntry xmlDictEntry;
-typedef xmlDictEntry *xmlDictEntryPtr;
-struct _xmlDictEntry {
- struct _xmlDictEntry *next;
- const xmlChar *name;
- unsigned int len;
- int valid;
- unsigned long okey;
-};
-
-typedef struct _xmlDictStrings xmlDictStrings;
-typedef xmlDictStrings *xmlDictStringsPtr;
-struct _xmlDictStrings {
- xmlDictStringsPtr next;
- xmlChar *free;
- xmlChar *end;
- size_t size;
- size_t nbStrings;
- xmlChar array[1];
-};
-/*
- * The entire dictionary
- */
-struct _xmlDict {
- int ref_counter;
-
- struct _xmlDictEntry *dict;
- size_t size;
- unsigned int nbElems;
- xmlDictStringsPtr strings;
-
- struct _xmlDict *subdict;
- /* used for randomization */
- int seed;
- /* used to impose a limit on size */
- size_t limit;
-};
-
-/*
- * A mutex for modifying the reference counter for shared
- * dictionaries.
- */
-static xmlRMutexPtr xmlDictMutex = NULL;
-
-/*
- * Whether the dictionary mutex was initialized.
- */
-static int xmlDictInitialized = 0;
-
-#ifdef DICT_RANDOMIZATION
-#ifdef HAVE_RAND_R
-/*
- * Internal data for random function, protected by xmlDictMutex
- */
-static unsigned int rand_seed = 0;
-#endif
-#endif
-
-/**
- * xmlInitializeDict:
- *
- * Do the dictionary mutex initialization.
- * this function is deprecated
- *
- * Returns 0 if initialization was already done, and 1 if that
- * call led to the initialization
- */
-int xmlInitializeDict(void) {
- return(0);
-}
-
-/**
- * __xmlInitializeDict:
- *
- * This function is not public
- * Do the dictionary mutex initialization.
- * this function is not thread safe, initialization should
- * normally be done once at setup when called from xmlOnceInit()
- * we may also land in this code if thread support is not compiled in
- *
- * Returns 0 if initialization was already done, and 1 if that
- * call led to the initialization
- */
-int __xmlInitializeDict(void) {
- if (xmlDictInitialized)
- return(1);
-
- if ((xmlDictMutex = xmlNewRMutex()) == NULL)
- return(0);
- xmlRMutexLock(xmlDictMutex);
-
-#ifdef DICT_RANDOMIZATION
-#ifdef HAVE_RAND_R
- rand_seed = time(NULL);
- rand_r(& rand_seed);
-#else
- srand(time(NULL));
-#endif
-#endif
- xmlDictInitialized = 1;
- xmlRMutexUnlock(xmlDictMutex);
- return(1);
-}
-
-#ifdef DICT_RANDOMIZATION
-int __xmlRandom(void) {
- int ret;
-
- if (xmlDictInitialized == 0)
- __xmlInitializeDict();
-
- xmlRMutexLock(xmlDictMutex);
-#ifdef HAVE_RAND_R
- ret = rand_r(& rand_seed);
-#else
- ret = rand();
-#endif
- xmlRMutexUnlock(xmlDictMutex);
- return(ret);
-}
-#endif
-
-/**
- * xmlDictCleanup:
- *
- * Free the dictionary mutex. Do not call unless sure the library
- * is not in use anymore !
- */
-void
-xmlDictCleanup(void) {
- if (!xmlDictInitialized)
- return;
-
- xmlFreeRMutex(xmlDictMutex);
-
- xmlDictInitialized = 0;
-}
-
-/*
- * xmlDictAddString:
- * @dict: the dictionary
- * @name: the name of the userdata
- * @len: the length of the name
- *
- * Add the string to the array[s]
- *
- * Returns the pointer of the local string, or NULL in case of error.
- */
-static const xmlChar *
-xmlDictAddString(xmlDictPtr dict, const xmlChar *name, unsigned int namelen) {
- xmlDictStringsPtr pool;
- const xmlChar *ret;
- size_t size = 0; /* + sizeof(_xmlDictStrings) == 1024 */
- size_t limit = 0;
-
-#ifdef DICT_DEBUG_PATTERNS
- fprintf(stderr, "-");
-#endif
- pool = dict->strings;
- while (pool != NULL) {
- if (pool->end - pool->free > namelen)
- goto found_pool;
- if (pool->size > size) size = pool->size;
- limit += pool->size;
- pool = pool->next;
- }
- /*
- * Not found, need to allocate
- */
- if (pool == NULL) {
- if ((dict->limit > 0) && (limit > dict->limit)) {
- return(NULL);
- }
-
- if (size == 0) size = 1000;
- else size *= 4; /* exponential growth */
- if (size < 4 * namelen)
- size = 4 * namelen; /* just in case ! */
- pool = (xmlDictStringsPtr) xmlMalloc(sizeof(xmlDictStrings) + size);
- if (pool == NULL)
- return(NULL);
- pool->size = size;
- pool->nbStrings = 0;
- pool->free = &pool->array[0];
- pool->end = &pool->array[size];
- pool->next = dict->strings;
- dict->strings = pool;
-#ifdef DICT_DEBUG_PATTERNS
- fprintf(stderr, "+");
-#endif
- }
-found_pool:
- ret = pool->free;
- memcpy(pool->free, name, namelen);
- pool->free += namelen;
- *(pool->free++) = 0;
- pool->nbStrings++;
- return(ret);
-}
-
-/*
- * xmlDictAddQString:
- * @dict: the dictionary
- * @prefix: the prefix of the userdata
- * @plen: the prefix length
- * @name: the name of the userdata
- * @len: the length of the name
- *
- * Add the QName to the array[s]
- *
- * Returns the pointer of the local string, or NULL in case of error.
- */
-static const xmlChar *
-xmlDictAddQString(xmlDictPtr dict, const xmlChar *prefix, unsigned int plen,
- const xmlChar *name, unsigned int namelen)
-{
- xmlDictStringsPtr pool;
- const xmlChar *ret;
- size_t size = 0; /* + sizeof(_xmlDictStrings) == 1024 */
- size_t limit = 0;
-
- if (prefix == NULL) return(xmlDictAddString(dict, name, namelen));
-
-#ifdef DICT_DEBUG_PATTERNS
- fprintf(stderr, "=");
-#endif
- pool = dict->strings;
- while (pool != NULL) {
- if (pool->end - pool->free > namelen + plen + 1)
- goto found_pool;
- if (pool->size > size) size = pool->size;
- limit += pool->size;
- pool = pool->next;
- }
- /*
- * Not found, need to allocate
- */
- if (pool == NULL) {
- if ((dict->limit > 0) && (limit > dict->limit)) {
- return(NULL);
- }
-
- if (size == 0) size = 1000;
- else size *= 4; /* exponential growth */
- if (size < 4 * (namelen + plen + 1))
- size = 4 * (namelen + plen + 1); /* just in case ! */
- pool = (xmlDictStringsPtr) xmlMalloc(sizeof(xmlDictStrings) + size);
- if (pool == NULL)
- return(NULL);
- pool->size = size;
- pool->nbStrings = 0;
- pool->free = &pool->array[0];
- pool->end = &pool->array[size];
- pool->next = dict->strings;
- dict->strings = pool;
-#ifdef DICT_DEBUG_PATTERNS
- fprintf(stderr, "+");
-#endif
- }
-found_pool:
- ret = pool->free;
- memcpy(pool->free, prefix, plen);
- pool->free += plen;
- *(pool->free++) = ':';
- memcpy(pool->free, name, namelen);
- pool->free += namelen;
- *(pool->free++) = 0;
- pool->nbStrings++;
- return(ret);
-}
-
-#ifdef WITH_BIG_KEY
-/*
- * xmlDictComputeBigKey:
- *
- * Calculate a hash key using a good hash function that works well for
- * larger hash table sizes.
- *
- * Hash function by "One-at-a-Time Hash" see
- * http://burtleburtle.net/bob/hash/doobs.html
- */
-
-static uint32_t
-xmlDictComputeBigKey(const xmlChar* data, int namelen, int seed) {
- uint32_t hash;
- int i;
-
- if (namelen <= 0 || data == NULL) return(0);
-
- hash = seed;
-
- for (i = 0;i < namelen; i++) {
- hash += data[i];
- hash += (hash << 10);
- hash ^= (hash >> 6);
- }
- hash += (hash << 3);
- hash ^= (hash >> 11);
- hash += (hash << 15);
-
- return hash;
-}
-
-/*
- * xmlDictComputeBigQKey:
- *
- * Calculate a hash key for two strings using a good hash function
- * that works well for larger hash table sizes.
- *
- * Hash function by "One-at-a-Time Hash" see
- * http://burtleburtle.net/bob/hash/doobs.html
- *
- * Neither of the two strings must be NULL.
- */
-static unsigned long
-xmlDictComputeBigQKey(const xmlChar *prefix, int plen,
- const xmlChar *name, int len, int seed)
-{
- uint32_t hash;
- int i;
-
- hash = seed;
-
- for (i = 0;i < plen; i++) {
- hash += prefix[i];
- hash += (hash << 10);
- hash ^= (hash >> 6);
- }
- hash += ':';
- hash += (hash << 10);
- hash ^= (hash >> 6);
-
- for (i = 0;i < len; i++) {
- hash += name[i];
- hash += (hash << 10);
- hash ^= (hash >> 6);
- }
- hash += (hash << 3);
- hash ^= (hash >> 11);
- hash += (hash << 15);
-
- return hash;
-}
-#endif /* WITH_BIG_KEY */
-
-/*
- * xmlDictComputeFastKey:
- *
- * Calculate a hash key using a fast hash function that works well
- * for low hash table fill.
- */
-static unsigned long
-xmlDictComputeFastKey(const xmlChar *name, int namelen, int seed) {
- unsigned long value = seed;
-
- if (name == NULL) return(0);
- value = *name;
- value <<= 5;
- if (namelen > 10) {
- value += name[namelen - 1];
- namelen = 10;
- }
- switch (namelen) {
- case 10: value += name[9];
- case 9: value += name[8];
- case 8: value += name[7];
- case 7: value += name[6];
- case 6: value += name[5];
- case 5: value += name[4];
- case 4: value += name[3];
- case 3: value += name[2];
- case 2: value += name[1];
- default: break;
- }
- return(value);
-}
-
-/*
- * xmlDictComputeFastQKey:
- *
- * Calculate a hash key for two strings using a fast hash function
- * that works well for low hash table fill.
- *
- * Neither of the two strings must be NULL.
- */
-static unsigned long
-xmlDictComputeFastQKey(const xmlChar *prefix, int plen,
- const xmlChar *name, int len, int seed)
-{
- unsigned long value = (unsigned long) seed;
-
- if (plen == 0)
- value += 30 * (unsigned long) ':';
- else
- value += 30 * (*prefix);
-
- if (len > 10) {
- int offset = len - (plen + 1 + 1);
- if (offset < 0)
- offset = len - (10 + 1);
- value += name[offset];
- len = 10;
- if (plen > 10)
- plen = 10;
- }
- switch (plen) {
- case 10: value += prefix[9];
- case 9: value += prefix[8];
- case 8: value += prefix[7];
- case 7: value += prefix[6];
- case 6: value += prefix[5];
- case 5: value += prefix[4];
- case 4: value += prefix[3];
- case 3: value += prefix[2];
- case 2: value += prefix[1];
- case 1: value += prefix[0];
- default: break;
- }
- len -= plen;
- if (len > 0) {
- value += (unsigned long) ':';
- len--;
- }
- switch (len) {
- case 10: value += name[9];
- case 9: value += name[8];
- case 8: value += name[7];
- case 7: value += name[6];
- case 6: value += name[5];
- case 5: value += name[4];
- case 4: value += name[3];
- case 3: value += name[2];
- case 2: value += name[1];
- case 1: value += name[0];
- default: break;
- }
- return(value);
-}
-
-/**
- * xmlDictCreate:
- *
- * Create a new dictionary
- *
- * Returns the newly created dictionary, or NULL if an error occured.
- */
-xmlDictPtr
-xmlDictCreate(void) {
- xmlDictPtr dict;
-
- if (!xmlDictInitialized)
- if (!__xmlInitializeDict())
- return(NULL);
-
-#ifdef DICT_DEBUG_PATTERNS
- fprintf(stderr, "C");
-#endif
-
- dict = xmlMalloc(sizeof(xmlDict));
- if (dict) {
- dict->ref_counter = 1;
- dict->limit = 0;
-
- dict->size = MIN_DICT_SIZE;
- dict->nbElems = 0;
- dict->dict = xmlMalloc(MIN_DICT_SIZE * sizeof(xmlDictEntry));
- dict->strings = NULL;
- dict->subdict = NULL;
- if (dict->dict) {
- memset(dict->dict, 0, MIN_DICT_SIZE * sizeof(xmlDictEntry));
-#ifdef DICT_RANDOMIZATION
- dict->seed = __xmlRandom();
-#else
- dict->seed = 0;
-#endif
- return(dict);
- }
- xmlFree(dict);
- }
- return(NULL);
-}
-
-/**
- * xmlDictCreateSub:
- * @sub: an existing dictionary
- *
- * Create a new dictionary, inheriting strings from the read-only
- * dictionary @sub. On lookup, strings are first searched in the
- * new dictionary, then in @sub, and if not found are created in the
- * new dictionary.
- *
- * Returns the newly created dictionary, or NULL if an error occured.
- */
-xmlDictPtr
-xmlDictCreateSub(xmlDictPtr sub) {
- xmlDictPtr dict = xmlDictCreate();
-
- if ((dict != NULL) && (sub != NULL)) {
-#ifdef DICT_DEBUG_PATTERNS
- fprintf(stderr, "R");
-#endif
- dict->seed = sub->seed;
- dict->subdict = sub;
- xmlDictReference(dict->subdict);
- }
- return(dict);
-}
-
-/**
- * xmlDictReference:
- * @dict: the dictionary
- *
- * Increment the reference counter of a dictionary
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-xmlDictReference(xmlDictPtr dict) {
- if (!xmlDictInitialized)
- if (!__xmlInitializeDict())
- return(-1);
-
- if (dict == NULL) return -1;
- xmlRMutexLock(xmlDictMutex);
- dict->ref_counter++;
- xmlRMutexUnlock(xmlDictMutex);
- return(0);
-}
-
-/**
- * xmlDictGrow:
- * @dict: the dictionary
- * @size: the new size of the dictionary
- *
- * resize the dictionary
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlDictGrow(xmlDictPtr dict, size_t size) {
- unsigned long key, okey;
- size_t oldsize, i;
- xmlDictEntryPtr iter, next;
- struct _xmlDictEntry *olddict;
-#ifdef DEBUG_GROW
- unsigned long nbElem = 0;
-#endif
- int ret = 0;
- int keep_keys = 1;
-
- if (dict == NULL)
- return(-1);
- if (size < 8)
- return(-1);
- if (size > 8 * 2048)
- return(-1);
-
-#ifdef DICT_DEBUG_PATTERNS
- fprintf(stderr, "*");
-#endif
-
- oldsize = dict->size;
- olddict = dict->dict;
- if (olddict == NULL)
- return(-1);
- if (oldsize == MIN_DICT_SIZE)
- keep_keys = 0;
-
- dict->dict = xmlMalloc(size * sizeof(xmlDictEntry));
- if (dict->dict == NULL) {
- dict->dict = olddict;
- return(-1);
- }
- memset(dict->dict, 0, size * sizeof(xmlDictEntry));
- dict->size = size;
-
- /* If the two loops are merged, there would be situations where
- a new entry needs to allocated and data copied into it from
- the main dict. It is nicer to run through the array twice, first
- copying all the elements in the main array (less probability of
- allocate) and then the rest, so we only free in the second loop.
- */
- for (i = 0; i < oldsize; i++) {
- if (olddict[i].valid == 0)
- continue;
-
- if (keep_keys)
- okey = olddict[i].okey;
- else
- okey = xmlDictComputeKey(dict, olddict[i].name, olddict[i].len);
- key = okey % dict->size;
-
- if (dict->dict[key].valid == 0) {
- memcpy(&(dict->dict[key]), &(olddict[i]), sizeof(xmlDictEntry));
- dict->dict[key].next = NULL;
- dict->dict[key].okey = okey;
- } else {
- xmlDictEntryPtr entry;
-
- entry = xmlMalloc(sizeof(xmlDictEntry));
- if (entry != NULL) {
- entry->name = olddict[i].name;
- entry->len = olddict[i].len;
- entry->okey = okey;
- entry->next = dict->dict[key].next;
- entry->valid = 1;
- dict->dict[key].next = entry;
- } else {
- /*
- * we don't have much ways to alert from herei
- * result is loosing an entry and unicity garantee
- */
- ret = -1;
- }
- }
-#ifdef DEBUG_GROW
- nbElem++;
-#endif
- }
-
- for (i = 0; i < oldsize; i++) {
- iter = olddict[i].next;
- while (iter) {
- next = iter->next;
-
- /*
- * put back the entry in the new dict
- */
-
- if (keep_keys)
- okey = iter->okey;
- else
- okey = xmlDictComputeKey(dict, iter->name, iter->len);
- key = okey % dict->size;
- if (dict->dict[key].valid == 0) {
- memcpy(&(dict->dict[key]), iter, sizeof(xmlDictEntry));
- dict->dict[key].next = NULL;
- dict->dict[key].valid = 1;
- dict->dict[key].okey = okey;
- xmlFree(iter);
- } else {
- iter->next = dict->dict[key].next;
- iter->okey = okey;
- dict->dict[key].next = iter;
- }
-
-#ifdef DEBUG_GROW
- nbElem++;
-#endif
-
- iter = next;
- }
- }
-
- xmlFree(olddict);
-
-#ifdef DEBUG_GROW
- xmlGenericError(xmlGenericErrorContext,
- "xmlDictGrow : from %lu to %lu, %u elems\n", oldsize, size, nbElem);
-#endif
-
- return(ret);
-}
-
-/**
- * xmlDictFree:
- * @dict: the dictionary
- *
- * Free the hash @dict and its contents. The userdata is
- * deallocated with @f if provided.
- */
-void
-xmlDictFree(xmlDictPtr dict) {
- size_t i;
- xmlDictEntryPtr iter;
- xmlDictEntryPtr next;
- int inside_dict = 0;
- xmlDictStringsPtr pool, nextp;
-
- if (dict == NULL)
- return;
-
- if (!xmlDictInitialized)
- if (!__xmlInitializeDict())
- return;
-
- /* decrement the counter, it may be shared by a parser and docs */
- xmlRMutexLock(xmlDictMutex);
- dict->ref_counter--;
- if (dict->ref_counter > 0) {
- xmlRMutexUnlock(xmlDictMutex);
- return;
- }
-
- xmlRMutexUnlock(xmlDictMutex);
-
- if (dict->subdict != NULL) {
- xmlDictFree(dict->subdict);
- }
-
- if (dict->dict) {
- for(i = 0; ((i < dict->size) && (dict->nbElems > 0)); i++) {
- iter = &(dict->dict[i]);
- if (iter->valid == 0)
- continue;
- inside_dict = 1;
- while (iter) {
- next = iter->next;
- if (!inside_dict)
- xmlFree(iter);
- dict->nbElems--;
- inside_dict = 0;
- iter = next;
- }
- }
- xmlFree(dict->dict);
- }
- pool = dict->strings;
- while (pool != NULL) {
- nextp = pool->next;
- xmlFree(pool);
- pool = nextp;
- }
- xmlFree(dict);
-}
-
-/**
- * xmlDictLookup:
- * @dict: the dictionary
- * @name: the name of the userdata
- * @len: the length of the name, if -1 it is recomputed
- *
- * Add the @name to the dictionary @dict if not present.
- *
- * Returns the internal copy of the name or NULL in case of internal error
- */
-const xmlChar *
-xmlDictLookup(xmlDictPtr dict, const xmlChar *name, int len) {
- unsigned long key, okey, nbi = 0;
- xmlDictEntryPtr entry;
- xmlDictEntryPtr insert;
- const xmlChar *ret;
- unsigned int l;
-
- if ((dict == NULL) || (name == NULL))
- return(NULL);
-
- if (len < 0)
- l = strlen((const char *) name);
- else
- l = len;
-
- if (((dict->limit > 0) && (l >= dict->limit)) ||
- (l > INT_MAX / 2))
- return(NULL);
-
- /*
- * Check for duplicate and insertion location.
- */
- okey = xmlDictComputeKey(dict, name, l);
- key = okey % dict->size;
- if (dict->dict[key].valid == 0) {
- insert = NULL;
- } else {
- for (insert = &(dict->dict[key]); insert->next != NULL;
- insert = insert->next) {
-#ifdef __GNUC__
- if ((insert->okey == okey) && (insert->len == l)) {
- if (!memcmp(insert->name, name, l))
- return(insert->name);
- }
-#else
- if ((insert->okey == okey) && (insert->len == l) &&
- (!xmlStrncmp(insert->name, name, l)))
- return(insert->name);
-#endif
- nbi++;
- }
-#ifdef __GNUC__
- if ((insert->okey == okey) && (insert->len == l)) {
- if (!memcmp(insert->name, name, l))
- return(insert->name);
- }
-#else
- if ((insert->okey == okey) && (insert->len == l) &&
- (!xmlStrncmp(insert->name, name, l)))
- return(insert->name);
-#endif
- }
-
- if (dict->subdict) {
- unsigned long skey;
-
- /* we cannot always reuse the same okey for the subdict */
- if (((dict->size == MIN_DICT_SIZE) &&
- (dict->subdict->size != MIN_DICT_SIZE)) ||
- ((dict->size != MIN_DICT_SIZE) &&
- (dict->subdict->size == MIN_DICT_SIZE)))
- skey = xmlDictComputeKey(dict->subdict, name, l);
- else
- skey = okey;
-
- key = skey % dict->subdict->size;
- if (dict->subdict->dict[key].valid != 0) {
- xmlDictEntryPtr tmp;
-
- for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL;
- tmp = tmp->next) {
-#ifdef __GNUC__
- if ((tmp->okey == skey) && (tmp->len == l)) {
- if (!memcmp(tmp->name, name, l))
- return(tmp->name);
- }
-#else
- if ((tmp->okey == skey) && (tmp->len == l) &&
- (!xmlStrncmp(tmp->name, name, l)))
- return(tmp->name);
-#endif
- nbi++;
- }
-#ifdef __GNUC__
- if ((tmp->okey == skey) && (tmp->len == l)) {
- if (!memcmp(tmp->name, name, l))
- return(tmp->name);
- }
-#else
- if ((tmp->okey == skey) && (tmp->len == l) &&
- (!xmlStrncmp(tmp->name, name, l)))
- return(tmp->name);
-#endif
- }
- key = okey % dict->size;
- }
-
- ret = xmlDictAddString(dict, name, l);
- if (ret == NULL)
- return(NULL);
- if (insert == NULL) {
- entry = &(dict->dict[key]);
- } else {
- entry = xmlMalloc(sizeof(xmlDictEntry));
- if (entry == NULL)
- return(NULL);
- }
- entry->name = ret;
- entry->len = l;
- entry->next = NULL;
- entry->valid = 1;
- entry->okey = okey;
-
-
- if (insert != NULL)
- insert->next = entry;
-
- dict->nbElems++;
-
- if ((nbi > MAX_HASH_LEN) &&
- (dict->size <= ((MAX_DICT_HASH / 2) / MAX_HASH_LEN))) {
- if (xmlDictGrow(dict, MAX_HASH_LEN * 2 * dict->size) != 0)
- return(NULL);
- }
- /* Note that entry may have been freed at this point by xmlDictGrow */
-
- return(ret);
-}
-
-/**
- * xmlDictExists:
- * @dict: the dictionary
- * @name: the name of the userdata
- * @len: the length of the name, if -1 it is recomputed
- *
- * Check if the @name exists in the dictionary @dict.
- *
- * Returns the internal copy of the name or NULL if not found.
- */
-const xmlChar *
-xmlDictExists(xmlDictPtr dict, const xmlChar *name, int len) {
- unsigned long key, okey, nbi = 0;
- xmlDictEntryPtr insert;
- unsigned int l;
-
- if ((dict == NULL) || (name == NULL))
- return(NULL);
-
- if (len < 0)
- l = strlen((const char *) name);
- else
- l = len;
- if (((dict->limit > 0) && (l >= dict->limit)) ||
- (l > INT_MAX / 2))
- return(NULL);
-
- /*
- * Check for duplicate and insertion location.
- */
- okey = xmlDictComputeKey(dict, name, l);
- key = okey % dict->size;
- if (dict->dict[key].valid == 0) {
- insert = NULL;
- } else {
- for (insert = &(dict->dict[key]); insert->next != NULL;
- insert = insert->next) {
-#ifdef __GNUC__
- if ((insert->okey == okey) && (insert->len == l)) {
- if (!memcmp(insert->name, name, l))
- return(insert->name);
- }
-#else
- if ((insert->okey == okey) && (insert->len == l) &&
- (!xmlStrncmp(insert->name, name, l)))
- return(insert->name);
-#endif
- nbi++;
- }
-#ifdef __GNUC__
- if ((insert->okey == okey) && (insert->len == l)) {
- if (!memcmp(insert->name, name, l))
- return(insert->name);
- }
-#else
- if ((insert->okey == okey) && (insert->len == l) &&
- (!xmlStrncmp(insert->name, name, l)))
- return(insert->name);
-#endif
- }
-
- if (dict->subdict) {
- unsigned long skey;
-
- /* we cannot always reuse the same okey for the subdict */
- if (((dict->size == MIN_DICT_SIZE) &&
- (dict->subdict->size != MIN_DICT_SIZE)) ||
- ((dict->size != MIN_DICT_SIZE) &&
- (dict->subdict->size == MIN_DICT_SIZE)))
- skey = xmlDictComputeKey(dict->subdict, name, l);
- else
- skey = okey;
-
- key = skey % dict->subdict->size;
- if (dict->subdict->dict[key].valid != 0) {
- xmlDictEntryPtr tmp;
-
- for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL;
- tmp = tmp->next) {
-#ifdef __GNUC__
- if ((tmp->okey == skey) && (tmp->len == l)) {
- if (!memcmp(tmp->name, name, l))
- return(tmp->name);
- }
-#else
- if ((tmp->okey == skey) && (tmp->len == l) &&
- (!xmlStrncmp(tmp->name, name, l)))
- return(tmp->name);
-#endif
- nbi++;
- }
-#ifdef __GNUC__
- if ((tmp->okey == skey) && (tmp->len == l)) {
- if (!memcmp(tmp->name, name, l))
- return(tmp->name);
- }
-#else
- if ((tmp->okey == skey) && (tmp->len == l) &&
- (!xmlStrncmp(tmp->name, name, l)))
- return(tmp->name);
-#endif
- }
- }
-
- /* not found */
- return(NULL);
-}
-
-/**
- * xmlDictQLookup:
- * @dict: the dictionary
- * @prefix: the prefix
- * @name: the name
- *
- * Add the QName @prefix:@name to the hash @dict if not present.
- *
- * Returns the internal copy of the QName or NULL in case of internal error
- */
-const xmlChar *
-xmlDictQLookup(xmlDictPtr dict, const xmlChar *prefix, const xmlChar *name) {
- unsigned long okey, key, nbi = 0;
- xmlDictEntryPtr entry;
- xmlDictEntryPtr insert;
- const xmlChar *ret;
- unsigned int len, plen, l;
-
- if ((dict == NULL) || (name == NULL))
- return(NULL);
- if (prefix == NULL)
- return(xmlDictLookup(dict, name, -1));
-
- l = len = strlen((const char *) name);
- plen = strlen((const char *) prefix);
- len += 1 + plen;
-
- /*
- * Check for duplicate and insertion location.
- */
- okey = xmlDictComputeQKey(dict, prefix, plen, name, l);
- key = okey % dict->size;
- if (dict->dict[key].valid == 0) {
- insert = NULL;
- } else {
- for (insert = &(dict->dict[key]); insert->next != NULL;
- insert = insert->next) {
- if ((insert->okey == okey) && (insert->len == len) &&
- (xmlStrQEqual(prefix, name, insert->name)))
- return(insert->name);
- nbi++;
- }
- if ((insert->okey == okey) && (insert->len == len) &&
- (xmlStrQEqual(prefix, name, insert->name)))
- return(insert->name);
- }
-
- if (dict->subdict) {
- unsigned long skey;
-
- /* we cannot always reuse the same okey for the subdict */
- if (((dict->size == MIN_DICT_SIZE) &&
- (dict->subdict->size != MIN_DICT_SIZE)) ||
- ((dict->size != MIN_DICT_SIZE) &&
- (dict->subdict->size == MIN_DICT_SIZE)))
- skey = xmlDictComputeQKey(dict->subdict, prefix, plen, name, l);
- else
- skey = okey;
-
- key = skey % dict->subdict->size;
- if (dict->subdict->dict[key].valid != 0) {
- xmlDictEntryPtr tmp;
- for (tmp = &(dict->subdict->dict[key]); tmp->next != NULL;
- tmp = tmp->next) {
- if ((tmp->okey == skey) && (tmp->len == len) &&
- (xmlStrQEqual(prefix, name, tmp->name)))
- return(tmp->name);
- nbi++;
- }
- if ((tmp->okey == skey) && (tmp->len == len) &&
- (xmlStrQEqual(prefix, name, tmp->name)))
- return(tmp->name);
- }
- key = okey % dict->size;
- }
-
- ret = xmlDictAddQString(dict, prefix, plen, name, l);
- if (ret == NULL)
- return(NULL);
- if (insert == NULL) {
- entry = &(dict->dict[key]);
- } else {
- entry = xmlMalloc(sizeof(xmlDictEntry));
- if (entry == NULL)
- return(NULL);
- }
- entry->name = ret;
- entry->len = len;
- entry->next = NULL;
- entry->valid = 1;
- entry->okey = okey;
-
- if (insert != NULL)
- insert->next = entry;
-
- dict->nbElems++;
-
- if ((nbi > MAX_HASH_LEN) &&
- (dict->size <= ((MAX_DICT_HASH / 2) / MAX_HASH_LEN)))
- xmlDictGrow(dict, MAX_HASH_LEN * 2 * dict->size);
- /* Note that entry may have been freed at this point by xmlDictGrow */
-
- return(ret);
-}
-
-/**
- * xmlDictOwns:
- * @dict: the dictionary
- * @str: the string
- *
- * check if a string is owned by the disctionary
- *
- * Returns 1 if true, 0 if false and -1 in case of error
- * -1 in case of error
- */
-int
-xmlDictOwns(xmlDictPtr dict, const xmlChar *str) {
- xmlDictStringsPtr pool;
-
- if ((dict == NULL) || (str == NULL))
- return(-1);
- pool = dict->strings;
- while (pool != NULL) {
- if ((str >= &pool->array[0]) && (str <= pool->free))
- return(1);
- pool = pool->next;
- }
- if (dict->subdict)
- return(xmlDictOwns(dict->subdict, str));
- return(0);
-}
-
-/**
- * xmlDictSize:
- * @dict: the dictionary
- *
- * Query the number of elements installed in the hash @dict.
- *
- * Returns the number of elements in the dictionary or
- * -1 in case of error
- */
-int
-xmlDictSize(xmlDictPtr dict) {
- if (dict == NULL)
- return(-1);
- if (dict->subdict)
- return(dict->nbElems + dict->subdict->nbElems);
- return(dict->nbElems);
-}
-
-/**
- * xmlDictSetLimit:
- * @dict: the dictionary
- * @limit: the limit in bytes
- *
- * Set a size limit for the dictionary
- * Added in 2.9.0
- *
- * Returns the previous limit of the dictionary or 0
- */
-size_t
-xmlDictSetLimit(xmlDictPtr dict, size_t limit) {
- size_t ret;
-
- if (dict == NULL)
- return(0);
- ret = dict->limit;
- dict->limit = limit;
- return(ret);
-}
-
-/**
- * xmlDictGetUsage:
- * @dict: the dictionary
- *
- * Get how much memory is used by a dictionary for strings
- * Added in 2.9.0
- *
- * Returns the amount of strings allocated
- */
-size_t
-xmlDictGetUsage(xmlDictPtr dict) {
- xmlDictStringsPtr pool;
- size_t limit = 0;
-
- if (dict == NULL)
- return(0);
- pool = dict->strings;
- while (pool != NULL) {
- limit += pool->size;
- pool = pool->next;
- }
- return(limit);
-}
-
-#define bottom_dict
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/elfgcchack.h b/external/libxml2_android/jni/libxml2/elfgcchack.h
deleted file mode 100644
index 1b81dcde..00000000
--- a/external/libxml2_android/jni/libxml2/elfgcchack.h
+++ /dev/null
@@ -1,17818 +0,0 @@
-/*
- * elfgcchack.h: hack by Arjan van de Ven <arjanv@redhat.com> to speed
- * up the code when using gcc for call within the library.
- *
- * Based on the analysis http://people.redhat.com/drepper/dsohowto.pdf
- * from Ulrich drepper. Rewritten to be generated from the XML description
- * file for libxml2 API
- * autogenerated with xsltproc doc/elfgcchack.xsl doc/libxml2-api.xml
- */
-
-#ifdef IN_LIBXML
-#ifdef __GNUC__
-#ifdef PIC
-#ifdef linux
-#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3)
-
-#include "libxml/c14n.h"
-#include "libxml/catalog.h"
-#include "libxml/chvalid.h"
-#include "libxml/debugXML.h"
-#include "libxml/dict.h"
-#include "libxml/DOCBparser.h"
-#include "libxml/encoding.h"
-#include "libxml/entities.h"
-#include "libxml/globals.h"
-#include "libxml/hash.h"
-#include "libxml/HTMLparser.h"
-#include "libxml/HTMLtree.h"
-#include "libxml/list.h"
-#include "libxml/nanoftp.h"
-#include "libxml/nanohttp.h"
-#include "libxml/parser.h"
-#include "libxml/parserInternals.h"
-#include "libxml/pattern.h"
-#include "libxml/relaxng.h"
-#include "libxml/SAX2.h"
-#include "libxml/SAX.h"
-#include "libxml/schemasInternals.h"
-#include "libxml/schematron.h"
-#include "libxml/threads.h"
-#include "libxml/tree.h"
-#include "libxml/uri.h"
-#include "libxml/valid.h"
-#include "libxml/xinclude.h"
-#include "libxml/xlink.h"
-#include "libxml/xmlautomata.h"
-#include "libxml/xmlerror.h"
-#include "libxml/xmlexports.h"
-#include "libxml/xmlIO.h"
-#include "libxml/xmlmemory.h"
-#include "libxml/xmlreader.h"
-#include "libxml/xmlregexp.h"
-#include "libxml/xmlsave.h"
-#include "libxml/xmlschemas.h"
-#include "libxml/xmlschemastypes.h"
-#include "libxml/xmlstring.h"
-#include "libxml/xmlunicode.h"
-#include "libxml/xmlversion.h"
-#include "libxml/xmlwriter.h"
-#include "libxml/xpath.h"
-#include "libxml/xpathInternals.h"
-#include "libxml/xpointer.h"
-#include "libxml/xmlmodule.h"
-
-/* special hot spot not exported ones */
-
-#ifdef bottom_globals
-#undef __xmlGenericError
-extern __typeof (__xmlGenericError) __xmlGenericError __attribute((alias("__xmlGenericError__internal_alias")));
-#else
-#ifndef __xmlGenericError
-extern __typeof (__xmlGenericError) __xmlGenericError__internal_alias __attribute((visibility("hidden")));
-#define __xmlGenericError __xmlGenericError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef __xmlGenericErrorContext
-extern __typeof (__xmlGenericErrorContext) __xmlGenericErrorContext __attribute((alias("__xmlGenericErrorContext__internal_alias")));
-#else
-#ifndef __xmlGenericErrorContext
-extern __typeof (__xmlGenericErrorContext) __xmlGenericErrorContext__internal_alias __attribute((visibility("hidden")));
-#define __xmlGenericErrorContext __xmlGenericErrorContext__internal_alias
-#endif
-#endif
-
-/* list generated from libxml2-api.xml */
-#if defined(LIBXML_DOCB_ENABLED)
-#ifdef bottom_DOCBparser
-#undef docbCreatePushParserCtxt
-extern __typeof (docbCreatePushParserCtxt) docbCreatePushParserCtxt __attribute((alias("docbCreatePushParserCtxt__internal_alias")));
-#else
-#ifndef docbCreatePushParserCtxt
-extern __typeof (docbCreatePushParserCtxt) docbCreatePushParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define docbCreatePushParserCtxt docbCreatePushParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlAttrAllowed
-extern __typeof (htmlAttrAllowed) htmlAttrAllowed __attribute((alias("htmlAttrAllowed__internal_alias")));
-#else
-#ifndef htmlAttrAllowed
-extern __typeof (htmlAttrAllowed) htmlAttrAllowed__internal_alias __attribute((visibility("hidden")));
-#define htmlAttrAllowed htmlAttrAllowed__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlAutoCloseTag
-extern __typeof (htmlAutoCloseTag) htmlAutoCloseTag __attribute((alias("htmlAutoCloseTag__internal_alias")));
-#else
-#ifndef htmlAutoCloseTag
-extern __typeof (htmlAutoCloseTag) htmlAutoCloseTag__internal_alias __attribute((visibility("hidden")));
-#define htmlAutoCloseTag htmlAutoCloseTag__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCreateFileParserCtxt
-extern __typeof (htmlCreateFileParserCtxt) htmlCreateFileParserCtxt __attribute((alias("htmlCreateFileParserCtxt__internal_alias")));
-#else
-#ifndef htmlCreateFileParserCtxt
-extern __typeof (htmlCreateFileParserCtxt) htmlCreateFileParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define htmlCreateFileParserCtxt htmlCreateFileParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCreateMemoryParserCtxt
-extern __typeof (htmlCreateMemoryParserCtxt) htmlCreateMemoryParserCtxt __attribute((alias("htmlCreateMemoryParserCtxt__internal_alias")));
-#else
-#ifndef htmlCreateMemoryParserCtxt
-extern __typeof (htmlCreateMemoryParserCtxt) htmlCreateMemoryParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define htmlCreateMemoryParserCtxt htmlCreateMemoryParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCreatePushParserCtxt
-extern __typeof (htmlCreatePushParserCtxt) htmlCreatePushParserCtxt __attribute((alias("htmlCreatePushParserCtxt__internal_alias")));
-#else
-#ifndef htmlCreatePushParserCtxt
-extern __typeof (htmlCreatePushParserCtxt) htmlCreatePushParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define htmlCreatePushParserCtxt htmlCreatePushParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCtxtReadDoc
-extern __typeof (htmlCtxtReadDoc) htmlCtxtReadDoc __attribute((alias("htmlCtxtReadDoc__internal_alias")));
-#else
-#ifndef htmlCtxtReadDoc
-extern __typeof (htmlCtxtReadDoc) htmlCtxtReadDoc__internal_alias __attribute((visibility("hidden")));
-#define htmlCtxtReadDoc htmlCtxtReadDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCtxtReadFd
-extern __typeof (htmlCtxtReadFd) htmlCtxtReadFd __attribute((alias("htmlCtxtReadFd__internal_alias")));
-#else
-#ifndef htmlCtxtReadFd
-extern __typeof (htmlCtxtReadFd) htmlCtxtReadFd__internal_alias __attribute((visibility("hidden")));
-#define htmlCtxtReadFd htmlCtxtReadFd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCtxtReadFile
-extern __typeof (htmlCtxtReadFile) htmlCtxtReadFile __attribute((alias("htmlCtxtReadFile__internal_alias")));
-#else
-#ifndef htmlCtxtReadFile
-extern __typeof (htmlCtxtReadFile) htmlCtxtReadFile__internal_alias __attribute((visibility("hidden")));
-#define htmlCtxtReadFile htmlCtxtReadFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCtxtReadIO
-extern __typeof (htmlCtxtReadIO) htmlCtxtReadIO __attribute((alias("htmlCtxtReadIO__internal_alias")));
-#else
-#ifndef htmlCtxtReadIO
-extern __typeof (htmlCtxtReadIO) htmlCtxtReadIO__internal_alias __attribute((visibility("hidden")));
-#define htmlCtxtReadIO htmlCtxtReadIO__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCtxtReadMemory
-extern __typeof (htmlCtxtReadMemory) htmlCtxtReadMemory __attribute((alias("htmlCtxtReadMemory__internal_alias")));
-#else
-#ifndef htmlCtxtReadMemory
-extern __typeof (htmlCtxtReadMemory) htmlCtxtReadMemory__internal_alias __attribute((visibility("hidden")));
-#define htmlCtxtReadMemory htmlCtxtReadMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCtxtReset
-extern __typeof (htmlCtxtReset) htmlCtxtReset __attribute((alias("htmlCtxtReset__internal_alias")));
-#else
-#ifndef htmlCtxtReset
-extern __typeof (htmlCtxtReset) htmlCtxtReset__internal_alias __attribute((visibility("hidden")));
-#define htmlCtxtReset htmlCtxtReset__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlCtxtUseOptions
-extern __typeof (htmlCtxtUseOptions) htmlCtxtUseOptions __attribute((alias("htmlCtxtUseOptions__internal_alias")));
-#else
-#ifndef htmlCtxtUseOptions
-extern __typeof (htmlCtxtUseOptions) htmlCtxtUseOptions__internal_alias __attribute((visibility("hidden")));
-#define htmlCtxtUseOptions htmlCtxtUseOptions__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_SAX2
-#undef htmlDefaultSAXHandlerInit
-extern __typeof (htmlDefaultSAXHandlerInit) htmlDefaultSAXHandlerInit __attribute((alias("htmlDefaultSAXHandlerInit__internal_alias")));
-#else
-#ifndef htmlDefaultSAXHandlerInit
-extern __typeof (htmlDefaultSAXHandlerInit) htmlDefaultSAXHandlerInit__internal_alias __attribute((visibility("hidden")));
-#define htmlDefaultSAXHandlerInit htmlDefaultSAXHandlerInit__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlDocContentDumpFormatOutput
-extern __typeof (htmlDocContentDumpFormatOutput) htmlDocContentDumpFormatOutput __attribute((alias("htmlDocContentDumpFormatOutput__internal_alias")));
-#else
-#ifndef htmlDocContentDumpFormatOutput
-extern __typeof (htmlDocContentDumpFormatOutput) htmlDocContentDumpFormatOutput__internal_alias __attribute((visibility("hidden")));
-#define htmlDocContentDumpFormatOutput htmlDocContentDumpFormatOutput__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlDocContentDumpOutput
-extern __typeof (htmlDocContentDumpOutput) htmlDocContentDumpOutput __attribute((alias("htmlDocContentDumpOutput__internal_alias")));
-#else
-#ifndef htmlDocContentDumpOutput
-extern __typeof (htmlDocContentDumpOutput) htmlDocContentDumpOutput__internal_alias __attribute((visibility("hidden")));
-#define htmlDocContentDumpOutput htmlDocContentDumpOutput__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlDocDump
-extern __typeof (htmlDocDump) htmlDocDump __attribute((alias("htmlDocDump__internal_alias")));
-#else
-#ifndef htmlDocDump
-extern __typeof (htmlDocDump) htmlDocDump__internal_alias __attribute((visibility("hidden")));
-#define htmlDocDump htmlDocDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlDocDumpMemory
-extern __typeof (htmlDocDumpMemory) htmlDocDumpMemory __attribute((alias("htmlDocDumpMemory__internal_alias")));
-#else
-#ifndef htmlDocDumpMemory
-extern __typeof (htmlDocDumpMemory) htmlDocDumpMemory__internal_alias __attribute((visibility("hidden")));
-#define htmlDocDumpMemory htmlDocDumpMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlDocDumpMemoryFormat
-extern __typeof (htmlDocDumpMemoryFormat) htmlDocDumpMemoryFormat __attribute((alias("htmlDocDumpMemoryFormat__internal_alias")));
-#else
-#ifndef htmlDocDumpMemoryFormat
-extern __typeof (htmlDocDumpMemoryFormat) htmlDocDumpMemoryFormat__internal_alias __attribute((visibility("hidden")));
-#define htmlDocDumpMemoryFormat htmlDocDumpMemoryFormat__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlElementAllowedHere
-extern __typeof (htmlElementAllowedHere) htmlElementAllowedHere __attribute((alias("htmlElementAllowedHere__internal_alias")));
-#else
-#ifndef htmlElementAllowedHere
-extern __typeof (htmlElementAllowedHere) htmlElementAllowedHere__internal_alias __attribute((visibility("hidden")));
-#define htmlElementAllowedHere htmlElementAllowedHere__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlElementStatusHere
-extern __typeof (htmlElementStatusHere) htmlElementStatusHere __attribute((alias("htmlElementStatusHere__internal_alias")));
-#else
-#ifndef htmlElementStatusHere
-extern __typeof (htmlElementStatusHere) htmlElementStatusHere__internal_alias __attribute((visibility("hidden")));
-#define htmlElementStatusHere htmlElementStatusHere__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlEncodeEntities
-extern __typeof (htmlEncodeEntities) htmlEncodeEntities __attribute((alias("htmlEncodeEntities__internal_alias")));
-#else
-#ifndef htmlEncodeEntities
-extern __typeof (htmlEncodeEntities) htmlEncodeEntities__internal_alias __attribute((visibility("hidden")));
-#define htmlEncodeEntities htmlEncodeEntities__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlEntityLookup
-extern __typeof (htmlEntityLookup) htmlEntityLookup __attribute((alias("htmlEntityLookup__internal_alias")));
-#else
-#ifndef htmlEntityLookup
-extern __typeof (htmlEntityLookup) htmlEntityLookup__internal_alias __attribute((visibility("hidden")));
-#define htmlEntityLookup htmlEntityLookup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlEntityValueLookup
-extern __typeof (htmlEntityValueLookup) htmlEntityValueLookup __attribute((alias("htmlEntityValueLookup__internal_alias")));
-#else
-#ifndef htmlEntityValueLookup
-extern __typeof (htmlEntityValueLookup) htmlEntityValueLookup__internal_alias __attribute((visibility("hidden")));
-#define htmlEntityValueLookup htmlEntityValueLookup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlFreeParserCtxt
-extern __typeof (htmlFreeParserCtxt) htmlFreeParserCtxt __attribute((alias("htmlFreeParserCtxt__internal_alias")));
-#else
-#ifndef htmlFreeParserCtxt
-extern __typeof (htmlFreeParserCtxt) htmlFreeParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define htmlFreeParserCtxt htmlFreeParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlGetMetaEncoding
-extern __typeof (htmlGetMetaEncoding) htmlGetMetaEncoding __attribute((alias("htmlGetMetaEncoding__internal_alias")));
-#else
-#ifndef htmlGetMetaEncoding
-extern __typeof (htmlGetMetaEncoding) htmlGetMetaEncoding__internal_alias __attribute((visibility("hidden")));
-#define htmlGetMetaEncoding htmlGetMetaEncoding__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlHandleOmittedElem
-extern __typeof (htmlHandleOmittedElem) htmlHandleOmittedElem __attribute((alias("htmlHandleOmittedElem__internal_alias")));
-#else
-#ifndef htmlHandleOmittedElem
-extern __typeof (htmlHandleOmittedElem) htmlHandleOmittedElem__internal_alias __attribute((visibility("hidden")));
-#define htmlHandleOmittedElem htmlHandleOmittedElem__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlInitAutoClose
-extern __typeof (htmlInitAutoClose) htmlInitAutoClose __attribute((alias("htmlInitAutoClose__internal_alias")));
-#else
-#ifndef htmlInitAutoClose
-extern __typeof (htmlInitAutoClose) htmlInitAutoClose__internal_alias __attribute((visibility("hidden")));
-#define htmlInitAutoClose htmlInitAutoClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlIsAutoClosed
-extern __typeof (htmlIsAutoClosed) htmlIsAutoClosed __attribute((alias("htmlIsAutoClosed__internal_alias")));
-#else
-#ifndef htmlIsAutoClosed
-extern __typeof (htmlIsAutoClosed) htmlIsAutoClosed__internal_alias __attribute((visibility("hidden")));
-#define htmlIsAutoClosed htmlIsAutoClosed__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlIsBooleanAttr
-extern __typeof (htmlIsBooleanAttr) htmlIsBooleanAttr __attribute((alias("htmlIsBooleanAttr__internal_alias")));
-#else
-#ifndef htmlIsBooleanAttr
-extern __typeof (htmlIsBooleanAttr) htmlIsBooleanAttr__internal_alias __attribute((visibility("hidden")));
-#define htmlIsBooleanAttr htmlIsBooleanAttr__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlIsScriptAttribute
-extern __typeof (htmlIsScriptAttribute) htmlIsScriptAttribute __attribute((alias("htmlIsScriptAttribute__internal_alias")));
-#else
-#ifndef htmlIsScriptAttribute
-extern __typeof (htmlIsScriptAttribute) htmlIsScriptAttribute__internal_alias __attribute((visibility("hidden")));
-#define htmlIsScriptAttribute htmlIsScriptAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlNewDoc
-extern __typeof (htmlNewDoc) htmlNewDoc __attribute((alias("htmlNewDoc__internal_alias")));
-#else
-#ifndef htmlNewDoc
-extern __typeof (htmlNewDoc) htmlNewDoc__internal_alias __attribute((visibility("hidden")));
-#define htmlNewDoc htmlNewDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlNewDocNoDtD
-extern __typeof (htmlNewDocNoDtD) htmlNewDocNoDtD __attribute((alias("htmlNewDocNoDtD__internal_alias")));
-#else
-#ifndef htmlNewDocNoDtD
-extern __typeof (htmlNewDocNoDtD) htmlNewDocNoDtD__internal_alias __attribute((visibility("hidden")));
-#define htmlNewDocNoDtD htmlNewDocNoDtD__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlNewParserCtxt
-extern __typeof (htmlNewParserCtxt) htmlNewParserCtxt __attribute((alias("htmlNewParserCtxt__internal_alias")));
-#else
-#ifndef htmlNewParserCtxt
-extern __typeof (htmlNewParserCtxt) htmlNewParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define htmlNewParserCtxt htmlNewParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlNodeDump
-extern __typeof (htmlNodeDump) htmlNodeDump __attribute((alias("htmlNodeDump__internal_alias")));
-#else
-#ifndef htmlNodeDump
-extern __typeof (htmlNodeDump) htmlNodeDump__internal_alias __attribute((visibility("hidden")));
-#define htmlNodeDump htmlNodeDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlNodeDumpFile
-extern __typeof (htmlNodeDumpFile) htmlNodeDumpFile __attribute((alias("htmlNodeDumpFile__internal_alias")));
-#else
-#ifndef htmlNodeDumpFile
-extern __typeof (htmlNodeDumpFile) htmlNodeDumpFile__internal_alias __attribute((visibility("hidden")));
-#define htmlNodeDumpFile htmlNodeDumpFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlNodeDumpFileFormat
-extern __typeof (htmlNodeDumpFileFormat) htmlNodeDumpFileFormat __attribute((alias("htmlNodeDumpFileFormat__internal_alias")));
-#else
-#ifndef htmlNodeDumpFileFormat
-extern __typeof (htmlNodeDumpFileFormat) htmlNodeDumpFileFormat__internal_alias __attribute((visibility("hidden")));
-#define htmlNodeDumpFileFormat htmlNodeDumpFileFormat__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlNodeDumpFormatOutput
-extern __typeof (htmlNodeDumpFormatOutput) htmlNodeDumpFormatOutput __attribute((alias("htmlNodeDumpFormatOutput__internal_alias")));
-#else
-#ifndef htmlNodeDumpFormatOutput
-extern __typeof (htmlNodeDumpFormatOutput) htmlNodeDumpFormatOutput__internal_alias __attribute((visibility("hidden")));
-#define htmlNodeDumpFormatOutput htmlNodeDumpFormatOutput__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlNodeDumpOutput
-extern __typeof (htmlNodeDumpOutput) htmlNodeDumpOutput __attribute((alias("htmlNodeDumpOutput__internal_alias")));
-#else
-#ifndef htmlNodeDumpOutput
-extern __typeof (htmlNodeDumpOutput) htmlNodeDumpOutput__internal_alias __attribute((visibility("hidden")));
-#define htmlNodeDumpOutput htmlNodeDumpOutput__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlNodeStatus
-extern __typeof (htmlNodeStatus) htmlNodeStatus __attribute((alias("htmlNodeStatus__internal_alias")));
-#else
-#ifndef htmlNodeStatus
-extern __typeof (htmlNodeStatus) htmlNodeStatus__internal_alias __attribute((visibility("hidden")));
-#define htmlNodeStatus htmlNodeStatus__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlParseCharRef
-extern __typeof (htmlParseCharRef) htmlParseCharRef __attribute((alias("htmlParseCharRef__internal_alias")));
-#else
-#ifndef htmlParseCharRef
-extern __typeof (htmlParseCharRef) htmlParseCharRef__internal_alias __attribute((visibility("hidden")));
-#define htmlParseCharRef htmlParseCharRef__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlParseChunk
-extern __typeof (htmlParseChunk) htmlParseChunk __attribute((alias("htmlParseChunk__internal_alias")));
-#else
-#ifndef htmlParseChunk
-extern __typeof (htmlParseChunk) htmlParseChunk__internal_alias __attribute((visibility("hidden")));
-#define htmlParseChunk htmlParseChunk__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlParseDoc
-extern __typeof (htmlParseDoc) htmlParseDoc __attribute((alias("htmlParseDoc__internal_alias")));
-#else
-#ifndef htmlParseDoc
-extern __typeof (htmlParseDoc) htmlParseDoc__internal_alias __attribute((visibility("hidden")));
-#define htmlParseDoc htmlParseDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlParseDocument
-extern __typeof (htmlParseDocument) htmlParseDocument __attribute((alias("htmlParseDocument__internal_alias")));
-#else
-#ifndef htmlParseDocument
-extern __typeof (htmlParseDocument) htmlParseDocument__internal_alias __attribute((visibility("hidden")));
-#define htmlParseDocument htmlParseDocument__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlParseElement
-extern __typeof (htmlParseElement) htmlParseElement __attribute((alias("htmlParseElement__internal_alias")));
-#else
-#ifndef htmlParseElement
-extern __typeof (htmlParseElement) htmlParseElement__internal_alias __attribute((visibility("hidden")));
-#define htmlParseElement htmlParseElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlParseEntityRef
-extern __typeof (htmlParseEntityRef) htmlParseEntityRef __attribute((alias("htmlParseEntityRef__internal_alias")));
-#else
-#ifndef htmlParseEntityRef
-extern __typeof (htmlParseEntityRef) htmlParseEntityRef__internal_alias __attribute((visibility("hidden")));
-#define htmlParseEntityRef htmlParseEntityRef__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlParseFile
-extern __typeof (htmlParseFile) htmlParseFile __attribute((alias("htmlParseFile__internal_alias")));
-#else
-#ifndef htmlParseFile
-extern __typeof (htmlParseFile) htmlParseFile__internal_alias __attribute((visibility("hidden")));
-#define htmlParseFile htmlParseFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlReadDoc
-extern __typeof (htmlReadDoc) htmlReadDoc __attribute((alias("htmlReadDoc__internal_alias")));
-#else
-#ifndef htmlReadDoc
-extern __typeof (htmlReadDoc) htmlReadDoc__internal_alias __attribute((visibility("hidden")));
-#define htmlReadDoc htmlReadDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlReadFd
-extern __typeof (htmlReadFd) htmlReadFd __attribute((alias("htmlReadFd__internal_alias")));
-#else
-#ifndef htmlReadFd
-extern __typeof (htmlReadFd) htmlReadFd__internal_alias __attribute((visibility("hidden")));
-#define htmlReadFd htmlReadFd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlReadFile
-extern __typeof (htmlReadFile) htmlReadFile __attribute((alias("htmlReadFile__internal_alias")));
-#else
-#ifndef htmlReadFile
-extern __typeof (htmlReadFile) htmlReadFile__internal_alias __attribute((visibility("hidden")));
-#define htmlReadFile htmlReadFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlReadIO
-extern __typeof (htmlReadIO) htmlReadIO __attribute((alias("htmlReadIO__internal_alias")));
-#else
-#ifndef htmlReadIO
-extern __typeof (htmlReadIO) htmlReadIO__internal_alias __attribute((visibility("hidden")));
-#define htmlReadIO htmlReadIO__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlReadMemory
-extern __typeof (htmlReadMemory) htmlReadMemory __attribute((alias("htmlReadMemory__internal_alias")));
-#else
-#ifndef htmlReadMemory
-extern __typeof (htmlReadMemory) htmlReadMemory__internal_alias __attribute((visibility("hidden")));
-#define htmlReadMemory htmlReadMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlSAXParseDoc
-extern __typeof (htmlSAXParseDoc) htmlSAXParseDoc __attribute((alias("htmlSAXParseDoc__internal_alias")));
-#else
-#ifndef htmlSAXParseDoc
-extern __typeof (htmlSAXParseDoc) htmlSAXParseDoc__internal_alias __attribute((visibility("hidden")));
-#define htmlSAXParseDoc htmlSAXParseDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlSAXParseFile
-extern __typeof (htmlSAXParseFile) htmlSAXParseFile __attribute((alias("htmlSAXParseFile__internal_alias")));
-#else
-#ifndef htmlSAXParseFile
-extern __typeof (htmlSAXParseFile) htmlSAXParseFile__internal_alias __attribute((visibility("hidden")));
-#define htmlSAXParseFile htmlSAXParseFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlSaveFile
-extern __typeof (htmlSaveFile) htmlSaveFile __attribute((alias("htmlSaveFile__internal_alias")));
-#else
-#ifndef htmlSaveFile
-extern __typeof (htmlSaveFile) htmlSaveFile__internal_alias __attribute((visibility("hidden")));
-#define htmlSaveFile htmlSaveFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlSaveFileEnc
-extern __typeof (htmlSaveFileEnc) htmlSaveFileEnc __attribute((alias("htmlSaveFileEnc__internal_alias")));
-#else
-#ifndef htmlSaveFileEnc
-extern __typeof (htmlSaveFileEnc) htmlSaveFileEnc__internal_alias __attribute((visibility("hidden")));
-#define htmlSaveFileEnc htmlSaveFileEnc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlSaveFileFormat
-extern __typeof (htmlSaveFileFormat) htmlSaveFileFormat __attribute((alias("htmlSaveFileFormat__internal_alias")));
-#else
-#ifndef htmlSaveFileFormat
-extern __typeof (htmlSaveFileFormat) htmlSaveFileFormat__internal_alias __attribute((visibility("hidden")));
-#define htmlSaveFileFormat htmlSaveFileFormat__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLtree
-#undef htmlSetMetaEncoding
-extern __typeof (htmlSetMetaEncoding) htmlSetMetaEncoding __attribute((alias("htmlSetMetaEncoding__internal_alias")));
-#else
-#ifndef htmlSetMetaEncoding
-extern __typeof (htmlSetMetaEncoding) htmlSetMetaEncoding__internal_alias __attribute((visibility("hidden")));
-#define htmlSetMetaEncoding htmlSetMetaEncoding__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_HTMLparser
-#undef htmlTagLookup
-extern __typeof (htmlTagLookup) htmlTagLookup __attribute((alias("htmlTagLookup__internal_alias")));
-#else
-#ifndef htmlTagLookup
-extern __typeof (htmlTagLookup) htmlTagLookup__internal_alias __attribute((visibility("hidden")));
-#define htmlTagLookup htmlTagLookup__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef inputPop
-extern __typeof (inputPop) inputPop __attribute((alias("inputPop__internal_alias")));
-#else
-#ifndef inputPop
-extern __typeof (inputPop) inputPop__internal_alias __attribute((visibility("hidden")));
-#define inputPop inputPop__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef inputPush
-extern __typeof (inputPush) inputPush __attribute((alias("inputPush__internal_alias")));
-#else
-#ifndef inputPush
-extern __typeof (inputPush) inputPush__internal_alias __attribute((visibility("hidden")));
-#define inputPush inputPush__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef namePop
-extern __typeof (namePop) namePop __attribute((alias("namePop__internal_alias")));
-#else
-#ifndef namePop
-extern __typeof (namePop) namePop__internal_alias __attribute((visibility("hidden")));
-#define namePop namePop__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef namePush
-extern __typeof (namePush) namePush __attribute((alias("namePush__internal_alias")));
-#else
-#ifndef namePush
-extern __typeof (namePush) namePush__internal_alias __attribute((visibility("hidden")));
-#define namePush namePush__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef nodePop
-extern __typeof (nodePop) nodePop __attribute((alias("nodePop__internal_alias")));
-#else
-#ifndef nodePop
-extern __typeof (nodePop) nodePop__internal_alias __attribute((visibility("hidden")));
-#define nodePop nodePop__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef nodePush
-extern __typeof (nodePush) nodePush __attribute((alias("nodePush__internal_alias")));
-#else
-#ifndef nodePush
-extern __typeof (nodePush) nodePush__internal_alias __attribute((visibility("hidden")));
-#define nodePush nodePush__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef valuePop
-extern __typeof (valuePop) valuePop __attribute((alias("valuePop__internal_alias")));
-#else
-#ifndef valuePop
-extern __typeof (valuePop) valuePop__internal_alias __attribute((visibility("hidden")));
-#define valuePop valuePop__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef valuePush
-extern __typeof (valuePush) valuePush __attribute((alias("valuePush__internal_alias")));
-#else
-#ifndef valuePush
-extern __typeof (valuePush) valuePush__internal_alias __attribute((visibility("hidden")));
-#define valuePush valuePush__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlACatalogAdd
-extern __typeof (xmlACatalogAdd) xmlACatalogAdd __attribute((alias("xmlACatalogAdd__internal_alias")));
-#else
-#ifndef xmlACatalogAdd
-extern __typeof (xmlACatalogAdd) xmlACatalogAdd__internal_alias __attribute((visibility("hidden")));
-#define xmlACatalogAdd xmlACatalogAdd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_catalog
-#undef xmlACatalogDump
-extern __typeof (xmlACatalogDump) xmlACatalogDump __attribute((alias("xmlACatalogDump__internal_alias")));
-#else
-#ifndef xmlACatalogDump
-extern __typeof (xmlACatalogDump) xmlACatalogDump__internal_alias __attribute((visibility("hidden")));
-#define xmlACatalogDump xmlACatalogDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlACatalogRemove
-extern __typeof (xmlACatalogRemove) xmlACatalogRemove __attribute((alias("xmlACatalogRemove__internal_alias")));
-#else
-#ifndef xmlACatalogRemove
-extern __typeof (xmlACatalogRemove) xmlACatalogRemove__internal_alias __attribute((visibility("hidden")));
-#define xmlACatalogRemove xmlACatalogRemove__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlACatalogResolve
-extern __typeof (xmlACatalogResolve) xmlACatalogResolve __attribute((alias("xmlACatalogResolve__internal_alias")));
-#else
-#ifndef xmlACatalogResolve
-extern __typeof (xmlACatalogResolve) xmlACatalogResolve__internal_alias __attribute((visibility("hidden")));
-#define xmlACatalogResolve xmlACatalogResolve__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlACatalogResolvePublic
-extern __typeof (xmlACatalogResolvePublic) xmlACatalogResolvePublic __attribute((alias("xmlACatalogResolvePublic__internal_alias")));
-#else
-#ifndef xmlACatalogResolvePublic
-extern __typeof (xmlACatalogResolvePublic) xmlACatalogResolvePublic__internal_alias __attribute((visibility("hidden")));
-#define xmlACatalogResolvePublic xmlACatalogResolvePublic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlACatalogResolveSystem
-extern __typeof (xmlACatalogResolveSystem) xmlACatalogResolveSystem __attribute((alias("xmlACatalogResolveSystem__internal_alias")));
-#else
-#ifndef xmlACatalogResolveSystem
-extern __typeof (xmlACatalogResolveSystem) xmlACatalogResolveSystem__internal_alias __attribute((visibility("hidden")));
-#define xmlACatalogResolveSystem xmlACatalogResolveSystem__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlACatalogResolveURI
-extern __typeof (xmlACatalogResolveURI) xmlACatalogResolveURI __attribute((alias("xmlACatalogResolveURI__internal_alias")));
-#else
-#ifndef xmlACatalogResolveURI
-extern __typeof (xmlACatalogResolveURI) xmlACatalogResolveURI__internal_alias __attribute((visibility("hidden")));
-#define xmlACatalogResolveURI xmlACatalogResolveURI__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlAddAttributeDecl
-extern __typeof (xmlAddAttributeDecl) xmlAddAttributeDecl __attribute((alias("xmlAddAttributeDecl__internal_alias")));
-#else
-#ifndef xmlAddAttributeDecl
-extern __typeof (xmlAddAttributeDecl) xmlAddAttributeDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlAddAttributeDecl xmlAddAttributeDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlAddChild
-extern __typeof (xmlAddChild) xmlAddChild __attribute((alias("xmlAddChild__internal_alias")));
-#else
-#ifndef xmlAddChild
-extern __typeof (xmlAddChild) xmlAddChild__internal_alias __attribute((visibility("hidden")));
-#define xmlAddChild xmlAddChild__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlAddChildList
-extern __typeof (xmlAddChildList) xmlAddChildList __attribute((alias("xmlAddChildList__internal_alias")));
-#else
-#ifndef xmlAddChildList
-extern __typeof (xmlAddChildList) xmlAddChildList__internal_alias __attribute((visibility("hidden")));
-#define xmlAddChildList xmlAddChildList__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlAddDocEntity
-extern __typeof (xmlAddDocEntity) xmlAddDocEntity __attribute((alias("xmlAddDocEntity__internal_alias")));
-#else
-#ifndef xmlAddDocEntity
-extern __typeof (xmlAddDocEntity) xmlAddDocEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlAddDocEntity xmlAddDocEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlAddDtdEntity
-extern __typeof (xmlAddDtdEntity) xmlAddDtdEntity __attribute((alias("xmlAddDtdEntity__internal_alias")));
-#else
-#ifndef xmlAddDtdEntity
-extern __typeof (xmlAddDtdEntity) xmlAddDtdEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlAddDtdEntity xmlAddDtdEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlAddElementDecl
-extern __typeof (xmlAddElementDecl) xmlAddElementDecl __attribute((alias("xmlAddElementDecl__internal_alias")));
-#else
-#ifndef xmlAddElementDecl
-extern __typeof (xmlAddElementDecl) xmlAddElementDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlAddElementDecl xmlAddElementDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlAddEncodingAlias
-extern __typeof (xmlAddEncodingAlias) xmlAddEncodingAlias __attribute((alias("xmlAddEncodingAlias__internal_alias")));
-#else
-#ifndef xmlAddEncodingAlias
-extern __typeof (xmlAddEncodingAlias) xmlAddEncodingAlias__internal_alias __attribute((visibility("hidden")));
-#define xmlAddEncodingAlias xmlAddEncodingAlias__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlAddID
-extern __typeof (xmlAddID) xmlAddID __attribute((alias("xmlAddID__internal_alias")));
-#else
-#ifndef xmlAddID
-extern __typeof (xmlAddID) xmlAddID__internal_alias __attribute((visibility("hidden")));
-#define xmlAddID xmlAddID__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlAddNextSibling
-extern __typeof (xmlAddNextSibling) xmlAddNextSibling __attribute((alias("xmlAddNextSibling__internal_alias")));
-#else
-#ifndef xmlAddNextSibling
-extern __typeof (xmlAddNextSibling) xmlAddNextSibling__internal_alias __attribute((visibility("hidden")));
-#define xmlAddNextSibling xmlAddNextSibling__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlAddNotationDecl
-extern __typeof (xmlAddNotationDecl) xmlAddNotationDecl __attribute((alias("xmlAddNotationDecl__internal_alias")));
-#else
-#ifndef xmlAddNotationDecl
-extern __typeof (xmlAddNotationDecl) xmlAddNotationDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlAddNotationDecl xmlAddNotationDecl__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_tree
-#undef xmlAddPrevSibling
-extern __typeof (xmlAddPrevSibling) xmlAddPrevSibling __attribute((alias("xmlAddPrevSibling__internal_alias")));
-#else
-#ifndef xmlAddPrevSibling
-extern __typeof (xmlAddPrevSibling) xmlAddPrevSibling__internal_alias __attribute((visibility("hidden")));
-#define xmlAddPrevSibling xmlAddPrevSibling__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlAddRef
-extern __typeof (xmlAddRef) xmlAddRef __attribute((alias("xmlAddRef__internal_alias")));
-#else
-#ifndef xmlAddRef
-extern __typeof (xmlAddRef) xmlAddRef__internal_alias __attribute((visibility("hidden")));
-#define xmlAddRef xmlAddRef__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlAddSibling
-extern __typeof (xmlAddSibling) xmlAddSibling __attribute((alias("xmlAddSibling__internal_alias")));
-#else
-#ifndef xmlAddSibling
-extern __typeof (xmlAddSibling) xmlAddSibling__internal_alias __attribute((visibility("hidden")));
-#define xmlAddSibling xmlAddSibling__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlAllocOutputBuffer
-extern __typeof (xmlAllocOutputBuffer) xmlAllocOutputBuffer __attribute((alias("xmlAllocOutputBuffer__internal_alias")));
-#else
-#ifndef xmlAllocOutputBuffer
-extern __typeof (xmlAllocOutputBuffer) xmlAllocOutputBuffer__internal_alias __attribute((visibility("hidden")));
-#define xmlAllocOutputBuffer xmlAllocOutputBuffer__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlAllocParserInputBuffer
-extern __typeof (xmlAllocParserInputBuffer) xmlAllocParserInputBuffer __attribute((alias("xmlAllocParserInputBuffer__internal_alias")));
-#else
-#ifndef xmlAllocParserInputBuffer
-extern __typeof (xmlAllocParserInputBuffer) xmlAllocParserInputBuffer__internal_alias __attribute((visibility("hidden")));
-#define xmlAllocParserInputBuffer xmlAllocParserInputBuffer__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlAttrSerializeTxtContent
-extern __typeof (xmlAttrSerializeTxtContent) xmlAttrSerializeTxtContent __attribute((alias("xmlAttrSerializeTxtContent__internal_alias")));
-#else
-#ifndef xmlAttrSerializeTxtContent
-extern __typeof (xmlAttrSerializeTxtContent) xmlAttrSerializeTxtContent__internal_alias __attribute((visibility("hidden")));
-#define xmlAttrSerializeTxtContent xmlAttrSerializeTxtContent__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataCompile
-extern __typeof (xmlAutomataCompile) xmlAutomataCompile __attribute((alias("xmlAutomataCompile__internal_alias")));
-#else
-#ifndef xmlAutomataCompile
-extern __typeof (xmlAutomataCompile) xmlAutomataCompile__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataCompile xmlAutomataCompile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataGetInitState
-extern __typeof (xmlAutomataGetInitState) xmlAutomataGetInitState __attribute((alias("xmlAutomataGetInitState__internal_alias")));
-#else
-#ifndef xmlAutomataGetInitState
-extern __typeof (xmlAutomataGetInitState) xmlAutomataGetInitState__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataGetInitState xmlAutomataGetInitState__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataIsDeterminist
-extern __typeof (xmlAutomataIsDeterminist) xmlAutomataIsDeterminist __attribute((alias("xmlAutomataIsDeterminist__internal_alias")));
-#else
-#ifndef xmlAutomataIsDeterminist
-extern __typeof (xmlAutomataIsDeterminist) xmlAutomataIsDeterminist__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataIsDeterminist xmlAutomataIsDeterminist__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewAllTrans
-extern __typeof (xmlAutomataNewAllTrans) xmlAutomataNewAllTrans __attribute((alias("xmlAutomataNewAllTrans__internal_alias")));
-#else
-#ifndef xmlAutomataNewAllTrans
-extern __typeof (xmlAutomataNewAllTrans) xmlAutomataNewAllTrans__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewAllTrans xmlAutomataNewAllTrans__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewCountTrans
-extern __typeof (xmlAutomataNewCountTrans) xmlAutomataNewCountTrans __attribute((alias("xmlAutomataNewCountTrans__internal_alias")));
-#else
-#ifndef xmlAutomataNewCountTrans
-extern __typeof (xmlAutomataNewCountTrans) xmlAutomataNewCountTrans__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewCountTrans xmlAutomataNewCountTrans__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewCountTrans2
-extern __typeof (xmlAutomataNewCountTrans2) xmlAutomataNewCountTrans2 __attribute((alias("xmlAutomataNewCountTrans2__internal_alias")));
-#else
-#ifndef xmlAutomataNewCountTrans2
-extern __typeof (xmlAutomataNewCountTrans2) xmlAutomataNewCountTrans2__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewCountTrans2 xmlAutomataNewCountTrans2__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewCountedTrans
-extern __typeof (xmlAutomataNewCountedTrans) xmlAutomataNewCountedTrans __attribute((alias("xmlAutomataNewCountedTrans__internal_alias")));
-#else
-#ifndef xmlAutomataNewCountedTrans
-extern __typeof (xmlAutomataNewCountedTrans) xmlAutomataNewCountedTrans__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewCountedTrans xmlAutomataNewCountedTrans__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewCounter
-extern __typeof (xmlAutomataNewCounter) xmlAutomataNewCounter __attribute((alias("xmlAutomataNewCounter__internal_alias")));
-#else
-#ifndef xmlAutomataNewCounter
-extern __typeof (xmlAutomataNewCounter) xmlAutomataNewCounter__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewCounter xmlAutomataNewCounter__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewCounterTrans
-extern __typeof (xmlAutomataNewCounterTrans) xmlAutomataNewCounterTrans __attribute((alias("xmlAutomataNewCounterTrans__internal_alias")));
-#else
-#ifndef xmlAutomataNewCounterTrans
-extern __typeof (xmlAutomataNewCounterTrans) xmlAutomataNewCounterTrans__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewCounterTrans xmlAutomataNewCounterTrans__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewEpsilon
-extern __typeof (xmlAutomataNewEpsilon) xmlAutomataNewEpsilon __attribute((alias("xmlAutomataNewEpsilon__internal_alias")));
-#else
-#ifndef xmlAutomataNewEpsilon
-extern __typeof (xmlAutomataNewEpsilon) xmlAutomataNewEpsilon__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewEpsilon xmlAutomataNewEpsilon__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewNegTrans
-extern __typeof (xmlAutomataNewNegTrans) xmlAutomataNewNegTrans __attribute((alias("xmlAutomataNewNegTrans__internal_alias")));
-#else
-#ifndef xmlAutomataNewNegTrans
-extern __typeof (xmlAutomataNewNegTrans) xmlAutomataNewNegTrans__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewNegTrans xmlAutomataNewNegTrans__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewOnceTrans
-extern __typeof (xmlAutomataNewOnceTrans) xmlAutomataNewOnceTrans __attribute((alias("xmlAutomataNewOnceTrans__internal_alias")));
-#else
-#ifndef xmlAutomataNewOnceTrans
-extern __typeof (xmlAutomataNewOnceTrans) xmlAutomataNewOnceTrans__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewOnceTrans xmlAutomataNewOnceTrans__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewOnceTrans2
-extern __typeof (xmlAutomataNewOnceTrans2) xmlAutomataNewOnceTrans2 __attribute((alias("xmlAutomataNewOnceTrans2__internal_alias")));
-#else
-#ifndef xmlAutomataNewOnceTrans2
-extern __typeof (xmlAutomataNewOnceTrans2) xmlAutomataNewOnceTrans2__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewOnceTrans2 xmlAutomataNewOnceTrans2__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewState
-extern __typeof (xmlAutomataNewState) xmlAutomataNewState __attribute((alias("xmlAutomataNewState__internal_alias")));
-#else
-#ifndef xmlAutomataNewState
-extern __typeof (xmlAutomataNewState) xmlAutomataNewState__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewState xmlAutomataNewState__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewTransition
-extern __typeof (xmlAutomataNewTransition) xmlAutomataNewTransition __attribute((alias("xmlAutomataNewTransition__internal_alias")));
-#else
-#ifndef xmlAutomataNewTransition
-extern __typeof (xmlAutomataNewTransition) xmlAutomataNewTransition__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewTransition xmlAutomataNewTransition__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataNewTransition2
-extern __typeof (xmlAutomataNewTransition2) xmlAutomataNewTransition2 __attribute((alias("xmlAutomataNewTransition2__internal_alias")));
-#else
-#ifndef xmlAutomataNewTransition2
-extern __typeof (xmlAutomataNewTransition2) xmlAutomataNewTransition2__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataNewTransition2 xmlAutomataNewTransition2__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlAutomataSetFinalState
-extern __typeof (xmlAutomataSetFinalState) xmlAutomataSetFinalState __attribute((alias("xmlAutomataSetFinalState__internal_alias")));
-#else
-#ifndef xmlAutomataSetFinalState
-extern __typeof (xmlAutomataSetFinalState) xmlAutomataSetFinalState__internal_alias __attribute((visibility("hidden")));
-#define xmlAutomataSetFinalState xmlAutomataSetFinalState__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlBoolToText
-extern __typeof (xmlBoolToText) xmlBoolToText __attribute((alias("xmlBoolToText__internal_alias")));
-#else
-#ifndef xmlBoolToText
-extern __typeof (xmlBoolToText) xmlBoolToText__internal_alias __attribute((visibility("hidden")));
-#define xmlBoolToText xmlBoolToText__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_buf
-#undef xmlBufContent
-extern __typeof (xmlBufContent) xmlBufContent __attribute((alias("xmlBufContent__internal_alias")));
-#else
-#ifndef xmlBufContent
-extern __typeof (xmlBufContent) xmlBufContent__internal_alias __attribute((visibility("hidden")));
-#define xmlBufContent xmlBufContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_buf
-#undef xmlBufEnd
-extern __typeof (xmlBufEnd) xmlBufEnd __attribute((alias("xmlBufEnd__internal_alias")));
-#else
-#ifndef xmlBufEnd
-extern __typeof (xmlBufEnd) xmlBufEnd__internal_alias __attribute((visibility("hidden")));
-#define xmlBufEnd xmlBufEnd__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufGetNodeContent
-extern __typeof (xmlBufGetNodeContent) xmlBufGetNodeContent __attribute((alias("xmlBufGetNodeContent__internal_alias")));
-#else
-#ifndef xmlBufGetNodeContent
-extern __typeof (xmlBufGetNodeContent) xmlBufGetNodeContent__internal_alias __attribute((visibility("hidden")));
-#define xmlBufGetNodeContent xmlBufGetNodeContent__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlBufNodeDump
-extern __typeof (xmlBufNodeDump) xmlBufNodeDump __attribute((alias("xmlBufNodeDump__internal_alias")));
-#else
-#ifndef xmlBufNodeDump
-extern __typeof (xmlBufNodeDump) xmlBufNodeDump__internal_alias __attribute((visibility("hidden")));
-#define xmlBufNodeDump xmlBufNodeDump__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_buf
-#undef xmlBufShrink
-extern __typeof (xmlBufShrink) xmlBufShrink __attribute((alias("xmlBufShrink__internal_alias")));
-#else
-#ifndef xmlBufShrink
-extern __typeof (xmlBufShrink) xmlBufShrink__internal_alias __attribute((visibility("hidden")));
-#define xmlBufShrink xmlBufShrink__internal_alias
-#endif
-#endif
-
-#ifdef bottom_buf
-#undef xmlBufUse
-extern __typeof (xmlBufUse) xmlBufUse __attribute((alias("xmlBufUse__internal_alias")));
-#else
-#ifndef xmlBufUse
-extern __typeof (xmlBufUse) xmlBufUse__internal_alias __attribute((visibility("hidden")));
-#define xmlBufUse xmlBufUse__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferAdd
-extern __typeof (xmlBufferAdd) xmlBufferAdd __attribute((alias("xmlBufferAdd__internal_alias")));
-#else
-#ifndef xmlBufferAdd
-extern __typeof (xmlBufferAdd) xmlBufferAdd__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferAdd xmlBufferAdd__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferAddHead
-extern __typeof (xmlBufferAddHead) xmlBufferAddHead __attribute((alias("xmlBufferAddHead__internal_alias")));
-#else
-#ifndef xmlBufferAddHead
-extern __typeof (xmlBufferAddHead) xmlBufferAddHead__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferAddHead xmlBufferAddHead__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferCCat
-extern __typeof (xmlBufferCCat) xmlBufferCCat __attribute((alias("xmlBufferCCat__internal_alias")));
-#else
-#ifndef xmlBufferCCat
-extern __typeof (xmlBufferCCat) xmlBufferCCat__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferCCat xmlBufferCCat__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferCat
-extern __typeof (xmlBufferCat) xmlBufferCat __attribute((alias("xmlBufferCat__internal_alias")));
-#else
-#ifndef xmlBufferCat
-extern __typeof (xmlBufferCat) xmlBufferCat__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferCat xmlBufferCat__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferContent
-extern __typeof (xmlBufferContent) xmlBufferContent __attribute((alias("xmlBufferContent__internal_alias")));
-#else
-#ifndef xmlBufferContent
-extern __typeof (xmlBufferContent) xmlBufferContent__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferContent xmlBufferContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferCreate
-extern __typeof (xmlBufferCreate) xmlBufferCreate __attribute((alias("xmlBufferCreate__internal_alias")));
-#else
-#ifndef xmlBufferCreate
-extern __typeof (xmlBufferCreate) xmlBufferCreate__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferCreate xmlBufferCreate__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferCreateSize
-extern __typeof (xmlBufferCreateSize) xmlBufferCreateSize __attribute((alias("xmlBufferCreateSize__internal_alias")));
-#else
-#ifndef xmlBufferCreateSize
-extern __typeof (xmlBufferCreateSize) xmlBufferCreateSize__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferCreateSize xmlBufferCreateSize__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferCreateStatic
-extern __typeof (xmlBufferCreateStatic) xmlBufferCreateStatic __attribute((alias("xmlBufferCreateStatic__internal_alias")));
-#else
-#ifndef xmlBufferCreateStatic
-extern __typeof (xmlBufferCreateStatic) xmlBufferCreateStatic__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferCreateStatic xmlBufferCreateStatic__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferDetach
-extern __typeof (xmlBufferDetach) xmlBufferDetach __attribute((alias("xmlBufferDetach__internal_alias")));
-#else
-#ifndef xmlBufferDetach
-extern __typeof (xmlBufferDetach) xmlBufferDetach__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferDetach xmlBufferDetach__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferDump
-extern __typeof (xmlBufferDump) xmlBufferDump __attribute((alias("xmlBufferDump__internal_alias")));
-#else
-#ifndef xmlBufferDump
-extern __typeof (xmlBufferDump) xmlBufferDump__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferDump xmlBufferDump__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferEmpty
-extern __typeof (xmlBufferEmpty) xmlBufferEmpty __attribute((alias("xmlBufferEmpty__internal_alias")));
-#else
-#ifndef xmlBufferEmpty
-extern __typeof (xmlBufferEmpty) xmlBufferEmpty__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferEmpty xmlBufferEmpty__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferFree
-extern __typeof (xmlBufferFree) xmlBufferFree __attribute((alias("xmlBufferFree__internal_alias")));
-#else
-#ifndef xmlBufferFree
-extern __typeof (xmlBufferFree) xmlBufferFree__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferFree xmlBufferFree__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferGrow
-extern __typeof (xmlBufferGrow) xmlBufferGrow __attribute((alias("xmlBufferGrow__internal_alias")));
-#else
-#ifndef xmlBufferGrow
-extern __typeof (xmlBufferGrow) xmlBufferGrow__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferGrow xmlBufferGrow__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferLength
-extern __typeof (xmlBufferLength) xmlBufferLength __attribute((alias("xmlBufferLength__internal_alias")));
-#else
-#ifndef xmlBufferLength
-extern __typeof (xmlBufferLength) xmlBufferLength__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferLength xmlBufferLength__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferResize
-extern __typeof (xmlBufferResize) xmlBufferResize __attribute((alias("xmlBufferResize__internal_alias")));
-#else
-#ifndef xmlBufferResize
-extern __typeof (xmlBufferResize) xmlBufferResize__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferResize xmlBufferResize__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferSetAllocationScheme
-extern __typeof (xmlBufferSetAllocationScheme) xmlBufferSetAllocationScheme __attribute((alias("xmlBufferSetAllocationScheme__internal_alias")));
-#else
-#ifndef xmlBufferSetAllocationScheme
-extern __typeof (xmlBufferSetAllocationScheme) xmlBufferSetAllocationScheme__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferSetAllocationScheme xmlBufferSetAllocationScheme__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferShrink
-extern __typeof (xmlBufferShrink) xmlBufferShrink __attribute((alias("xmlBufferShrink__internal_alias")));
-#else
-#ifndef xmlBufferShrink
-extern __typeof (xmlBufferShrink) xmlBufferShrink__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferShrink xmlBufferShrink__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferWriteCHAR
-extern __typeof (xmlBufferWriteCHAR) xmlBufferWriteCHAR __attribute((alias("xmlBufferWriteCHAR__internal_alias")));
-#else
-#ifndef xmlBufferWriteCHAR
-extern __typeof (xmlBufferWriteCHAR) xmlBufferWriteCHAR__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferWriteCHAR xmlBufferWriteCHAR__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferWriteChar
-extern __typeof (xmlBufferWriteChar) xmlBufferWriteChar __attribute((alias("xmlBufferWriteChar__internal_alias")));
-#else
-#ifndef xmlBufferWriteChar
-extern __typeof (xmlBufferWriteChar) xmlBufferWriteChar__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferWriteChar xmlBufferWriteChar__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBufferWriteQuotedString
-extern __typeof (xmlBufferWriteQuotedString) xmlBufferWriteQuotedString __attribute((alias("xmlBufferWriteQuotedString__internal_alias")));
-#else
-#ifndef xmlBufferWriteQuotedString
-extern __typeof (xmlBufferWriteQuotedString) xmlBufferWriteQuotedString__internal_alias __attribute((visibility("hidden")));
-#define xmlBufferWriteQuotedString xmlBufferWriteQuotedString__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlBuildQName
-extern __typeof (xmlBuildQName) xmlBuildQName __attribute((alias("xmlBuildQName__internal_alias")));
-#else
-#ifndef xmlBuildQName
-extern __typeof (xmlBuildQName) xmlBuildQName__internal_alias __attribute((visibility("hidden")));
-#define xmlBuildQName xmlBuildQName__internal_alias
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlBuildRelativeURI
-extern __typeof (xmlBuildRelativeURI) xmlBuildRelativeURI __attribute((alias("xmlBuildRelativeURI__internal_alias")));
-#else
-#ifndef xmlBuildRelativeURI
-extern __typeof (xmlBuildRelativeURI) xmlBuildRelativeURI__internal_alias __attribute((visibility("hidden")));
-#define xmlBuildRelativeURI xmlBuildRelativeURI__internal_alias
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlBuildURI
-extern __typeof (xmlBuildURI) xmlBuildURI __attribute((alias("xmlBuildURI__internal_alias")));
-#else
-#ifndef xmlBuildURI
-extern __typeof (xmlBuildURI) xmlBuildURI__internal_alias __attribute((visibility("hidden")));
-#define xmlBuildURI xmlBuildURI__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlByteConsumed
-extern __typeof (xmlByteConsumed) xmlByteConsumed __attribute((alias("xmlByteConsumed__internal_alias")));
-#else
-#ifndef xmlByteConsumed
-extern __typeof (xmlByteConsumed) xmlByteConsumed__internal_alias __attribute((visibility("hidden")));
-#define xmlByteConsumed xmlByteConsumed__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_c14n
-#undef xmlC14NDocDumpMemory
-extern __typeof (xmlC14NDocDumpMemory) xmlC14NDocDumpMemory __attribute((alias("xmlC14NDocDumpMemory__internal_alias")));
-#else
-#ifndef xmlC14NDocDumpMemory
-extern __typeof (xmlC14NDocDumpMemory) xmlC14NDocDumpMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlC14NDocDumpMemory xmlC14NDocDumpMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_c14n
-#undef xmlC14NDocSave
-extern __typeof (xmlC14NDocSave) xmlC14NDocSave __attribute((alias("xmlC14NDocSave__internal_alias")));
-#else
-#ifndef xmlC14NDocSave
-extern __typeof (xmlC14NDocSave) xmlC14NDocSave__internal_alias __attribute((visibility("hidden")));
-#define xmlC14NDocSave xmlC14NDocSave__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_c14n
-#undef xmlC14NDocSaveTo
-extern __typeof (xmlC14NDocSaveTo) xmlC14NDocSaveTo __attribute((alias("xmlC14NDocSaveTo__internal_alias")));
-#else
-#ifndef xmlC14NDocSaveTo
-extern __typeof (xmlC14NDocSaveTo) xmlC14NDocSaveTo__internal_alias __attribute((visibility("hidden")));
-#define xmlC14NDocSaveTo xmlC14NDocSaveTo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_c14n
-#undef xmlC14NExecute
-extern __typeof (xmlC14NExecute) xmlC14NExecute __attribute((alias("xmlC14NExecute__internal_alias")));
-#else
-#ifndef xmlC14NExecute
-extern __typeof (xmlC14NExecute) xmlC14NExecute__internal_alias __attribute((visibility("hidden")));
-#define xmlC14NExecute xmlC14NExecute__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlCanonicPath
-extern __typeof (xmlCanonicPath) xmlCanonicPath __attribute((alias("xmlCanonicPath__internal_alias")));
-#else
-#ifndef xmlCanonicPath
-extern __typeof (xmlCanonicPath) xmlCanonicPath__internal_alias __attribute((visibility("hidden")));
-#define xmlCanonicPath xmlCanonicPath__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogAdd
-extern __typeof (xmlCatalogAdd) xmlCatalogAdd __attribute((alias("xmlCatalogAdd__internal_alias")));
-#else
-#ifndef xmlCatalogAdd
-extern __typeof (xmlCatalogAdd) xmlCatalogAdd__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogAdd xmlCatalogAdd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogAddLocal
-extern __typeof (xmlCatalogAddLocal) xmlCatalogAddLocal __attribute((alias("xmlCatalogAddLocal__internal_alias")));
-#else
-#ifndef xmlCatalogAddLocal
-extern __typeof (xmlCatalogAddLocal) xmlCatalogAddLocal__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogAddLocal xmlCatalogAddLocal__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogCleanup
-extern __typeof (xmlCatalogCleanup) xmlCatalogCleanup __attribute((alias("xmlCatalogCleanup__internal_alias")));
-#else
-#ifndef xmlCatalogCleanup
-extern __typeof (xmlCatalogCleanup) xmlCatalogCleanup__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogCleanup xmlCatalogCleanup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogConvert
-extern __typeof (xmlCatalogConvert) xmlCatalogConvert __attribute((alias("xmlCatalogConvert__internal_alias")));
-#else
-#ifndef xmlCatalogConvert
-extern __typeof (xmlCatalogConvert) xmlCatalogConvert__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogConvert xmlCatalogConvert__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogDump
-extern __typeof (xmlCatalogDump) xmlCatalogDump __attribute((alias("xmlCatalogDump__internal_alias")));
-#else
-#ifndef xmlCatalogDump
-extern __typeof (xmlCatalogDump) xmlCatalogDump__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogDump xmlCatalogDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogFreeLocal
-extern __typeof (xmlCatalogFreeLocal) xmlCatalogFreeLocal __attribute((alias("xmlCatalogFreeLocal__internal_alias")));
-#else
-#ifndef xmlCatalogFreeLocal
-extern __typeof (xmlCatalogFreeLocal) xmlCatalogFreeLocal__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogFreeLocal xmlCatalogFreeLocal__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogGetDefaults
-extern __typeof (xmlCatalogGetDefaults) xmlCatalogGetDefaults __attribute((alias("xmlCatalogGetDefaults__internal_alias")));
-#else
-#ifndef xmlCatalogGetDefaults
-extern __typeof (xmlCatalogGetDefaults) xmlCatalogGetDefaults__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogGetDefaults xmlCatalogGetDefaults__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogGetPublic
-extern __typeof (xmlCatalogGetPublic) xmlCatalogGetPublic __attribute((alias("xmlCatalogGetPublic__internal_alias")));
-#else
-#ifndef xmlCatalogGetPublic
-extern __typeof (xmlCatalogGetPublic) xmlCatalogGetPublic__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogGetPublic xmlCatalogGetPublic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogGetSystem
-extern __typeof (xmlCatalogGetSystem) xmlCatalogGetSystem __attribute((alias("xmlCatalogGetSystem__internal_alias")));
-#else
-#ifndef xmlCatalogGetSystem
-extern __typeof (xmlCatalogGetSystem) xmlCatalogGetSystem__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogGetSystem xmlCatalogGetSystem__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogIsEmpty
-extern __typeof (xmlCatalogIsEmpty) xmlCatalogIsEmpty __attribute((alias("xmlCatalogIsEmpty__internal_alias")));
-#else
-#ifndef xmlCatalogIsEmpty
-extern __typeof (xmlCatalogIsEmpty) xmlCatalogIsEmpty__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogIsEmpty xmlCatalogIsEmpty__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogLocalResolve
-extern __typeof (xmlCatalogLocalResolve) xmlCatalogLocalResolve __attribute((alias("xmlCatalogLocalResolve__internal_alias")));
-#else
-#ifndef xmlCatalogLocalResolve
-extern __typeof (xmlCatalogLocalResolve) xmlCatalogLocalResolve__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogLocalResolve xmlCatalogLocalResolve__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogLocalResolveURI
-extern __typeof (xmlCatalogLocalResolveURI) xmlCatalogLocalResolveURI __attribute((alias("xmlCatalogLocalResolveURI__internal_alias")));
-#else
-#ifndef xmlCatalogLocalResolveURI
-extern __typeof (xmlCatalogLocalResolveURI) xmlCatalogLocalResolveURI__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogLocalResolveURI xmlCatalogLocalResolveURI__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogRemove
-extern __typeof (xmlCatalogRemove) xmlCatalogRemove __attribute((alias("xmlCatalogRemove__internal_alias")));
-#else
-#ifndef xmlCatalogRemove
-extern __typeof (xmlCatalogRemove) xmlCatalogRemove__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogRemove xmlCatalogRemove__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogResolve
-extern __typeof (xmlCatalogResolve) xmlCatalogResolve __attribute((alias("xmlCatalogResolve__internal_alias")));
-#else
-#ifndef xmlCatalogResolve
-extern __typeof (xmlCatalogResolve) xmlCatalogResolve__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogResolve xmlCatalogResolve__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogResolvePublic
-extern __typeof (xmlCatalogResolvePublic) xmlCatalogResolvePublic __attribute((alias("xmlCatalogResolvePublic__internal_alias")));
-#else
-#ifndef xmlCatalogResolvePublic
-extern __typeof (xmlCatalogResolvePublic) xmlCatalogResolvePublic__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogResolvePublic xmlCatalogResolvePublic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogResolveSystem
-extern __typeof (xmlCatalogResolveSystem) xmlCatalogResolveSystem __attribute((alias("xmlCatalogResolveSystem__internal_alias")));
-#else
-#ifndef xmlCatalogResolveSystem
-extern __typeof (xmlCatalogResolveSystem) xmlCatalogResolveSystem__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogResolveSystem xmlCatalogResolveSystem__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogResolveURI
-extern __typeof (xmlCatalogResolveURI) xmlCatalogResolveURI __attribute((alias("xmlCatalogResolveURI__internal_alias")));
-#else
-#ifndef xmlCatalogResolveURI
-extern __typeof (xmlCatalogResolveURI) xmlCatalogResolveURI__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogResolveURI xmlCatalogResolveURI__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogSetDebug
-extern __typeof (xmlCatalogSetDebug) xmlCatalogSetDebug __attribute((alias("xmlCatalogSetDebug__internal_alias")));
-#else
-#ifndef xmlCatalogSetDebug
-extern __typeof (xmlCatalogSetDebug) xmlCatalogSetDebug__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogSetDebug xmlCatalogSetDebug__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogSetDefaultPrefer
-extern __typeof (xmlCatalogSetDefaultPrefer) xmlCatalogSetDefaultPrefer __attribute((alias("xmlCatalogSetDefaultPrefer__internal_alias")));
-#else
-#ifndef xmlCatalogSetDefaultPrefer
-extern __typeof (xmlCatalogSetDefaultPrefer) xmlCatalogSetDefaultPrefer__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogSetDefaultPrefer xmlCatalogSetDefaultPrefer__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlCatalogSetDefaults
-extern __typeof (xmlCatalogSetDefaults) xmlCatalogSetDefaults __attribute((alias("xmlCatalogSetDefaults__internal_alias")));
-#else
-#ifndef xmlCatalogSetDefaults
-extern __typeof (xmlCatalogSetDefaults) xmlCatalogSetDefaults__internal_alias __attribute((visibility("hidden")));
-#define xmlCatalogSetDefaults xmlCatalogSetDefaults__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlCharEncCloseFunc
-extern __typeof (xmlCharEncCloseFunc) xmlCharEncCloseFunc __attribute((alias("xmlCharEncCloseFunc__internal_alias")));
-#else
-#ifndef xmlCharEncCloseFunc
-extern __typeof (xmlCharEncCloseFunc) xmlCharEncCloseFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlCharEncCloseFunc xmlCharEncCloseFunc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlCharEncFirstLine
-extern __typeof (xmlCharEncFirstLine) xmlCharEncFirstLine __attribute((alias("xmlCharEncFirstLine__internal_alias")));
-#else
-#ifndef xmlCharEncFirstLine
-extern __typeof (xmlCharEncFirstLine) xmlCharEncFirstLine__internal_alias __attribute((visibility("hidden")));
-#define xmlCharEncFirstLine xmlCharEncFirstLine__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlCharEncInFunc
-extern __typeof (xmlCharEncInFunc) xmlCharEncInFunc __attribute((alias("xmlCharEncInFunc__internal_alias")));
-#else
-#ifndef xmlCharEncInFunc
-extern __typeof (xmlCharEncInFunc) xmlCharEncInFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlCharEncInFunc xmlCharEncInFunc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlCharEncOutFunc
-extern __typeof (xmlCharEncOutFunc) xmlCharEncOutFunc __attribute((alias("xmlCharEncOutFunc__internal_alias")));
-#else
-#ifndef xmlCharEncOutFunc
-extern __typeof (xmlCharEncOutFunc) xmlCharEncOutFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlCharEncOutFunc xmlCharEncOutFunc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlCharInRange
-extern __typeof (xmlCharInRange) xmlCharInRange __attribute((alias("xmlCharInRange__internal_alias")));
-#else
-#ifndef xmlCharInRange
-extern __typeof (xmlCharInRange) xmlCharInRange__internal_alias __attribute((visibility("hidden")));
-#define xmlCharInRange xmlCharInRange__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlCharStrdup
-extern __typeof (xmlCharStrdup) xmlCharStrdup __attribute((alias("xmlCharStrdup__internal_alias")));
-#else
-#ifndef xmlCharStrdup
-extern __typeof (xmlCharStrdup) xmlCharStrdup__internal_alias __attribute((visibility("hidden")));
-#define xmlCharStrdup xmlCharStrdup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlCharStrndup
-extern __typeof (xmlCharStrndup) xmlCharStrndup __attribute((alias("xmlCharStrndup__internal_alias")));
-#else
-#ifndef xmlCharStrndup
-extern __typeof (xmlCharStrndup) xmlCharStrndup__internal_alias __attribute((visibility("hidden")));
-#define xmlCharStrndup xmlCharStrndup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlCheckFilename
-extern __typeof (xmlCheckFilename) xmlCheckFilename __attribute((alias("xmlCheckFilename__internal_alias")));
-#else
-#ifndef xmlCheckFilename
-extern __typeof (xmlCheckFilename) xmlCheckFilename__internal_alias __attribute((visibility("hidden")));
-#define xmlCheckFilename xmlCheckFilename__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlCheckHTTPInput
-extern __typeof (xmlCheckHTTPInput) xmlCheckHTTPInput __attribute((alias("xmlCheckHTTPInput__internal_alias")));
-#else
-#ifndef xmlCheckHTTPInput
-extern __typeof (xmlCheckHTTPInput) xmlCheckHTTPInput__internal_alias __attribute((visibility("hidden")));
-#define xmlCheckHTTPInput xmlCheckHTTPInput__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCheckLanguageID
-extern __typeof (xmlCheckLanguageID) xmlCheckLanguageID __attribute((alias("xmlCheckLanguageID__internal_alias")));
-#else
-#ifndef xmlCheckLanguageID
-extern __typeof (xmlCheckLanguageID) xmlCheckLanguageID__internal_alias __attribute((visibility("hidden")));
-#define xmlCheckLanguageID xmlCheckLanguageID__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlCheckUTF8
-extern __typeof (xmlCheckUTF8) xmlCheckUTF8 __attribute((alias("xmlCheckUTF8__internal_alias")));
-#else
-#ifndef xmlCheckUTF8
-extern __typeof (xmlCheckUTF8) xmlCheckUTF8__internal_alias __attribute((visibility("hidden")));
-#define xmlCheckUTF8 xmlCheckUTF8__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlCheckVersion
-extern __typeof (xmlCheckVersion) xmlCheckVersion __attribute((alias("xmlCheckVersion__internal_alias")));
-#else
-#ifndef xmlCheckVersion
-extern __typeof (xmlCheckVersion) xmlCheckVersion__internal_alias __attribute((visibility("hidden")));
-#define xmlCheckVersion xmlCheckVersion__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlChildElementCount
-extern __typeof (xmlChildElementCount) xmlChildElementCount __attribute((alias("xmlChildElementCount__internal_alias")));
-#else
-#ifndef xmlChildElementCount
-extern __typeof (xmlChildElementCount) xmlChildElementCount__internal_alias __attribute((visibility("hidden")));
-#define xmlChildElementCount xmlChildElementCount__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlCleanupCharEncodingHandlers
-extern __typeof (xmlCleanupCharEncodingHandlers) xmlCleanupCharEncodingHandlers __attribute((alias("xmlCleanupCharEncodingHandlers__internal_alias")));
-#else
-#ifndef xmlCleanupCharEncodingHandlers
-extern __typeof (xmlCleanupCharEncodingHandlers) xmlCleanupCharEncodingHandlers__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupCharEncodingHandlers xmlCleanupCharEncodingHandlers__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlCleanupEncodingAliases
-extern __typeof (xmlCleanupEncodingAliases) xmlCleanupEncodingAliases __attribute((alias("xmlCleanupEncodingAliases__internal_alias")));
-#else
-#ifndef xmlCleanupEncodingAliases
-extern __typeof (xmlCleanupEncodingAliases) xmlCleanupEncodingAliases__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupEncodingAliases xmlCleanupEncodingAliases__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlCleanupGlobals
-extern __typeof (xmlCleanupGlobals) xmlCleanupGlobals __attribute((alias("xmlCleanupGlobals__internal_alias")));
-#else
-#ifndef xmlCleanupGlobals
-extern __typeof (xmlCleanupGlobals) xmlCleanupGlobals__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupGlobals xmlCleanupGlobals__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlCleanupInputCallbacks
-extern __typeof (xmlCleanupInputCallbacks) xmlCleanupInputCallbacks __attribute((alias("xmlCleanupInputCallbacks__internal_alias")));
-#else
-#ifndef xmlCleanupInputCallbacks
-extern __typeof (xmlCleanupInputCallbacks) xmlCleanupInputCallbacks__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupInputCallbacks xmlCleanupInputCallbacks__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlCleanupMemory
-extern __typeof (xmlCleanupMemory) xmlCleanupMemory __attribute((alias("xmlCleanupMemory__internal_alias")));
-#else
-#ifndef xmlCleanupMemory
-extern __typeof (xmlCleanupMemory) xmlCleanupMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupMemory xmlCleanupMemory__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlCleanupOutputCallbacks
-extern __typeof (xmlCleanupOutputCallbacks) xmlCleanupOutputCallbacks __attribute((alias("xmlCleanupOutputCallbacks__internal_alias")));
-#else
-#ifndef xmlCleanupOutputCallbacks
-extern __typeof (xmlCleanupOutputCallbacks) xmlCleanupOutputCallbacks__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupOutputCallbacks xmlCleanupOutputCallbacks__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCleanupParser
-extern __typeof (xmlCleanupParser) xmlCleanupParser __attribute((alias("xmlCleanupParser__internal_alias")));
-#else
-#ifndef xmlCleanupParser
-extern __typeof (xmlCleanupParser) xmlCleanupParser__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupParser xmlCleanupParser__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlCleanupPredefinedEntities
-extern __typeof (xmlCleanupPredefinedEntities) xmlCleanupPredefinedEntities __attribute((alias("xmlCleanupPredefinedEntities__internal_alias")));
-#else
-#ifndef xmlCleanupPredefinedEntities
-extern __typeof (xmlCleanupPredefinedEntities) xmlCleanupPredefinedEntities__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupPredefinedEntities xmlCleanupPredefinedEntities__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlCleanupThreads
-extern __typeof (xmlCleanupThreads) xmlCleanupThreads __attribute((alias("xmlCleanupThreads__internal_alias")));
-#else
-#ifndef xmlCleanupThreads
-extern __typeof (xmlCleanupThreads) xmlCleanupThreads__internal_alias __attribute((visibility("hidden")));
-#define xmlCleanupThreads xmlCleanupThreads__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlClearNodeInfoSeq
-extern __typeof (xmlClearNodeInfoSeq) xmlClearNodeInfoSeq __attribute((alias("xmlClearNodeInfoSeq__internal_alias")));
-#else
-#ifndef xmlClearNodeInfoSeq
-extern __typeof (xmlClearNodeInfoSeq) xmlClearNodeInfoSeq__internal_alias __attribute((visibility("hidden")));
-#define xmlClearNodeInfoSeq xmlClearNodeInfoSeq__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlClearParserCtxt
-extern __typeof (xmlClearParserCtxt) xmlClearParserCtxt __attribute((alias("xmlClearParserCtxt__internal_alias")));
-#else
-#ifndef xmlClearParserCtxt
-extern __typeof (xmlClearParserCtxt) xmlClearParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlClearParserCtxt xmlClearParserCtxt__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlConvertSGMLCatalog
-extern __typeof (xmlConvertSGMLCatalog) xmlConvertSGMLCatalog __attribute((alias("xmlConvertSGMLCatalog__internal_alias")));
-#else
-#ifndef xmlConvertSGMLCatalog
-extern __typeof (xmlConvertSGMLCatalog) xmlConvertSGMLCatalog__internal_alias __attribute((visibility("hidden")));
-#define xmlConvertSGMLCatalog xmlConvertSGMLCatalog__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_valid
-#undef xmlCopyAttributeTable
-extern __typeof (xmlCopyAttributeTable) xmlCopyAttributeTable __attribute((alias("xmlCopyAttributeTable__internal_alias")));
-#else
-#ifndef xmlCopyAttributeTable
-extern __typeof (xmlCopyAttributeTable) xmlCopyAttributeTable__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyAttributeTable xmlCopyAttributeTable__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlCopyChar
-extern __typeof (xmlCopyChar) xmlCopyChar __attribute((alias("xmlCopyChar__internal_alias")));
-#else
-#ifndef xmlCopyChar
-extern __typeof (xmlCopyChar) xmlCopyChar__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyChar xmlCopyChar__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlCopyCharMultiByte
-extern __typeof (xmlCopyCharMultiByte) xmlCopyCharMultiByte __attribute((alias("xmlCopyCharMultiByte__internal_alias")));
-#else
-#ifndef xmlCopyCharMultiByte
-extern __typeof (xmlCopyCharMultiByte) xmlCopyCharMultiByte__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyCharMultiByte xmlCopyCharMultiByte__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlCopyDoc
-extern __typeof (xmlCopyDoc) xmlCopyDoc __attribute((alias("xmlCopyDoc__internal_alias")));
-#else
-#ifndef xmlCopyDoc
-extern __typeof (xmlCopyDoc) xmlCopyDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyDoc xmlCopyDoc__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlCopyDocElementContent
-extern __typeof (xmlCopyDocElementContent) xmlCopyDocElementContent __attribute((alias("xmlCopyDocElementContent__internal_alias")));
-#else
-#ifndef xmlCopyDocElementContent
-extern __typeof (xmlCopyDocElementContent) xmlCopyDocElementContent__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyDocElementContent xmlCopyDocElementContent__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlCopyDtd
-extern __typeof (xmlCopyDtd) xmlCopyDtd __attribute((alias("xmlCopyDtd__internal_alias")));
-#else
-#ifndef xmlCopyDtd
-extern __typeof (xmlCopyDtd) xmlCopyDtd__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyDtd xmlCopyDtd__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlCopyElementContent
-extern __typeof (xmlCopyElementContent) xmlCopyElementContent __attribute((alias("xmlCopyElementContent__internal_alias")));
-#else
-#ifndef xmlCopyElementContent
-extern __typeof (xmlCopyElementContent) xmlCopyElementContent__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyElementContent xmlCopyElementContent__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_valid
-#undef xmlCopyElementTable
-extern __typeof (xmlCopyElementTable) xmlCopyElementTable __attribute((alias("xmlCopyElementTable__internal_alias")));
-#else
-#ifndef xmlCopyElementTable
-extern __typeof (xmlCopyElementTable) xmlCopyElementTable__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyElementTable xmlCopyElementTable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_entities
-#undef xmlCopyEntitiesTable
-extern __typeof (xmlCopyEntitiesTable) xmlCopyEntitiesTable __attribute((alias("xmlCopyEntitiesTable__internal_alias")));
-#else
-#ifndef xmlCopyEntitiesTable
-extern __typeof (xmlCopyEntitiesTable) xmlCopyEntitiesTable__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyEntitiesTable xmlCopyEntitiesTable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_valid
-#undef xmlCopyEnumeration
-extern __typeof (xmlCopyEnumeration) xmlCopyEnumeration __attribute((alias("xmlCopyEnumeration__internal_alias")));
-#else
-#ifndef xmlCopyEnumeration
-extern __typeof (xmlCopyEnumeration) xmlCopyEnumeration__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyEnumeration xmlCopyEnumeration__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlCopyError
-extern __typeof (xmlCopyError) xmlCopyError __attribute((alias("xmlCopyError__internal_alias")));
-#else
-#ifndef xmlCopyError
-extern __typeof (xmlCopyError) xmlCopyError__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyError xmlCopyError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlCopyNamespace
-extern __typeof (xmlCopyNamespace) xmlCopyNamespace __attribute((alias("xmlCopyNamespace__internal_alias")));
-#else
-#ifndef xmlCopyNamespace
-extern __typeof (xmlCopyNamespace) xmlCopyNamespace__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyNamespace xmlCopyNamespace__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlCopyNamespaceList
-extern __typeof (xmlCopyNamespaceList) xmlCopyNamespaceList __attribute((alias("xmlCopyNamespaceList__internal_alias")));
-#else
-#ifndef xmlCopyNamespaceList
-extern __typeof (xmlCopyNamespaceList) xmlCopyNamespaceList__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyNamespaceList xmlCopyNamespaceList__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlCopyNode
-extern __typeof (xmlCopyNode) xmlCopyNode __attribute((alias("xmlCopyNode__internal_alias")));
-#else
-#ifndef xmlCopyNode
-extern __typeof (xmlCopyNode) xmlCopyNode__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyNode xmlCopyNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlCopyNodeList
-extern __typeof (xmlCopyNodeList) xmlCopyNodeList __attribute((alias("xmlCopyNodeList__internal_alias")));
-#else
-#ifndef xmlCopyNodeList
-extern __typeof (xmlCopyNodeList) xmlCopyNodeList__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyNodeList xmlCopyNodeList__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_valid
-#undef xmlCopyNotationTable
-extern __typeof (xmlCopyNotationTable) xmlCopyNotationTable __attribute((alias("xmlCopyNotationTable__internal_alias")));
-#else
-#ifndef xmlCopyNotationTable
-extern __typeof (xmlCopyNotationTable) xmlCopyNotationTable__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyNotationTable xmlCopyNotationTable__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlCopyProp
-extern __typeof (xmlCopyProp) xmlCopyProp __attribute((alias("xmlCopyProp__internal_alias")));
-#else
-#ifndef xmlCopyProp
-extern __typeof (xmlCopyProp) xmlCopyProp__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyProp xmlCopyProp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlCopyPropList
-extern __typeof (xmlCopyPropList) xmlCopyPropList __attribute((alias("xmlCopyPropList__internal_alias")));
-#else
-#ifndef xmlCopyPropList
-extern __typeof (xmlCopyPropList) xmlCopyPropList__internal_alias __attribute((visibility("hidden")));
-#define xmlCopyPropList xmlCopyPropList__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCreateDocParserCtxt
-extern __typeof (xmlCreateDocParserCtxt) xmlCreateDocParserCtxt __attribute((alias("xmlCreateDocParserCtxt__internal_alias")));
-#else
-#ifndef xmlCreateDocParserCtxt
-extern __typeof (xmlCreateDocParserCtxt) xmlCreateDocParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateDocParserCtxt xmlCreateDocParserCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlCreateEntitiesTable
-extern __typeof (xmlCreateEntitiesTable) xmlCreateEntitiesTable __attribute((alias("xmlCreateEntitiesTable__internal_alias")));
-#else
-#ifndef xmlCreateEntitiesTable
-extern __typeof (xmlCreateEntitiesTable) xmlCreateEntitiesTable__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateEntitiesTable xmlCreateEntitiesTable__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCreateEntityParserCtxt
-extern __typeof (xmlCreateEntityParserCtxt) xmlCreateEntityParserCtxt __attribute((alias("xmlCreateEntityParserCtxt__internal_alias")));
-#else
-#ifndef xmlCreateEntityParserCtxt
-extern __typeof (xmlCreateEntityParserCtxt) xmlCreateEntityParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateEntityParserCtxt xmlCreateEntityParserCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlCreateEnumeration
-extern __typeof (xmlCreateEnumeration) xmlCreateEnumeration __attribute((alias("xmlCreateEnumeration__internal_alias")));
-#else
-#ifndef xmlCreateEnumeration
-extern __typeof (xmlCreateEnumeration) xmlCreateEnumeration__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateEnumeration xmlCreateEnumeration__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCreateFileParserCtxt
-extern __typeof (xmlCreateFileParserCtxt) xmlCreateFileParserCtxt __attribute((alias("xmlCreateFileParserCtxt__internal_alias")));
-#else
-#ifndef xmlCreateFileParserCtxt
-extern __typeof (xmlCreateFileParserCtxt) xmlCreateFileParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateFileParserCtxt xmlCreateFileParserCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCreateIOParserCtxt
-extern __typeof (xmlCreateIOParserCtxt) xmlCreateIOParserCtxt __attribute((alias("xmlCreateIOParserCtxt__internal_alias")));
-#else
-#ifndef xmlCreateIOParserCtxt
-extern __typeof (xmlCreateIOParserCtxt) xmlCreateIOParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateIOParserCtxt xmlCreateIOParserCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlCreateIntSubset
-extern __typeof (xmlCreateIntSubset) xmlCreateIntSubset __attribute((alias("xmlCreateIntSubset__internal_alias")));
-#else
-#ifndef xmlCreateIntSubset
-extern __typeof (xmlCreateIntSubset) xmlCreateIntSubset__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateIntSubset xmlCreateIntSubset__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCreateMemoryParserCtxt
-extern __typeof (xmlCreateMemoryParserCtxt) xmlCreateMemoryParserCtxt __attribute((alias("xmlCreateMemoryParserCtxt__internal_alias")));
-#else
-#ifndef xmlCreateMemoryParserCtxt
-extern __typeof (xmlCreateMemoryParserCtxt) xmlCreateMemoryParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateMemoryParserCtxt xmlCreateMemoryParserCtxt__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_PUSH_ENABLED)
-#ifdef bottom_parser
-#undef xmlCreatePushParserCtxt
-extern __typeof (xmlCreatePushParserCtxt) xmlCreatePushParserCtxt __attribute((alias("xmlCreatePushParserCtxt__internal_alias")));
-#else
-#ifndef xmlCreatePushParserCtxt
-extern __typeof (xmlCreatePushParserCtxt) xmlCreatePushParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlCreatePushParserCtxt xmlCreatePushParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlCreateURI
-extern __typeof (xmlCreateURI) xmlCreateURI __attribute((alias("xmlCreateURI__internal_alias")));
-#else
-#ifndef xmlCreateURI
-extern __typeof (xmlCreateURI) xmlCreateURI__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateURI xmlCreateURI__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCreateURLParserCtxt
-extern __typeof (xmlCreateURLParserCtxt) xmlCreateURLParserCtxt __attribute((alias("xmlCreateURLParserCtxt__internal_alias")));
-#else
-#ifndef xmlCreateURLParserCtxt
-extern __typeof (xmlCreateURLParserCtxt) xmlCreateURLParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlCreateURLParserCtxt xmlCreateURLParserCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlCtxtGetLastError
-extern __typeof (xmlCtxtGetLastError) xmlCtxtGetLastError __attribute((alias("xmlCtxtGetLastError__internal_alias")));
-#else
-#ifndef xmlCtxtGetLastError
-extern __typeof (xmlCtxtGetLastError) xmlCtxtGetLastError__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtGetLastError xmlCtxtGetLastError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCtxtReadDoc
-extern __typeof (xmlCtxtReadDoc) xmlCtxtReadDoc __attribute((alias("xmlCtxtReadDoc__internal_alias")));
-#else
-#ifndef xmlCtxtReadDoc
-extern __typeof (xmlCtxtReadDoc) xmlCtxtReadDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtReadDoc xmlCtxtReadDoc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCtxtReadFd
-extern __typeof (xmlCtxtReadFd) xmlCtxtReadFd __attribute((alias("xmlCtxtReadFd__internal_alias")));
-#else
-#ifndef xmlCtxtReadFd
-extern __typeof (xmlCtxtReadFd) xmlCtxtReadFd__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtReadFd xmlCtxtReadFd__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCtxtReadFile
-extern __typeof (xmlCtxtReadFile) xmlCtxtReadFile __attribute((alias("xmlCtxtReadFile__internal_alias")));
-#else
-#ifndef xmlCtxtReadFile
-extern __typeof (xmlCtxtReadFile) xmlCtxtReadFile__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtReadFile xmlCtxtReadFile__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCtxtReadIO
-extern __typeof (xmlCtxtReadIO) xmlCtxtReadIO __attribute((alias("xmlCtxtReadIO__internal_alias")));
-#else
-#ifndef xmlCtxtReadIO
-extern __typeof (xmlCtxtReadIO) xmlCtxtReadIO__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtReadIO xmlCtxtReadIO__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCtxtReadMemory
-extern __typeof (xmlCtxtReadMemory) xmlCtxtReadMemory __attribute((alias("xmlCtxtReadMemory__internal_alias")));
-#else
-#ifndef xmlCtxtReadMemory
-extern __typeof (xmlCtxtReadMemory) xmlCtxtReadMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtReadMemory xmlCtxtReadMemory__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCtxtReset
-extern __typeof (xmlCtxtReset) xmlCtxtReset __attribute((alias("xmlCtxtReset__internal_alias")));
-#else
-#ifndef xmlCtxtReset
-extern __typeof (xmlCtxtReset) xmlCtxtReset__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtReset xmlCtxtReset__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlCtxtResetLastError
-extern __typeof (xmlCtxtResetLastError) xmlCtxtResetLastError __attribute((alias("xmlCtxtResetLastError__internal_alias")));
-#else
-#ifndef xmlCtxtResetLastError
-extern __typeof (xmlCtxtResetLastError) xmlCtxtResetLastError__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtResetLastError xmlCtxtResetLastError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCtxtResetPush
-extern __typeof (xmlCtxtResetPush) xmlCtxtResetPush __attribute((alias("xmlCtxtResetPush__internal_alias")));
-#else
-#ifndef xmlCtxtResetPush
-extern __typeof (xmlCtxtResetPush) xmlCtxtResetPush__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtResetPush xmlCtxtResetPush__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlCtxtUseOptions
-extern __typeof (xmlCtxtUseOptions) xmlCtxtUseOptions __attribute((alias("xmlCtxtUseOptions__internal_alias")));
-#else
-#ifndef xmlCtxtUseOptions
-extern __typeof (xmlCtxtUseOptions) xmlCtxtUseOptions__internal_alias __attribute((visibility("hidden")));
-#define xmlCtxtUseOptions xmlCtxtUseOptions__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlCurrentChar
-extern __typeof (xmlCurrentChar) xmlCurrentChar __attribute((alias("xmlCurrentChar__internal_alias")));
-#else
-#ifndef xmlCurrentChar
-extern __typeof (xmlCurrentChar) xmlCurrentChar__internal_alias __attribute((visibility("hidden")));
-#define xmlCurrentChar xmlCurrentChar__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDOMWrapAdoptNode
-extern __typeof (xmlDOMWrapAdoptNode) xmlDOMWrapAdoptNode __attribute((alias("xmlDOMWrapAdoptNode__internal_alias")));
-#else
-#ifndef xmlDOMWrapAdoptNode
-extern __typeof (xmlDOMWrapAdoptNode) xmlDOMWrapAdoptNode__internal_alias __attribute((visibility("hidden")));
-#define xmlDOMWrapAdoptNode xmlDOMWrapAdoptNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDOMWrapCloneNode
-extern __typeof (xmlDOMWrapCloneNode) xmlDOMWrapCloneNode __attribute((alias("xmlDOMWrapCloneNode__internal_alias")));
-#else
-#ifndef xmlDOMWrapCloneNode
-extern __typeof (xmlDOMWrapCloneNode) xmlDOMWrapCloneNode__internal_alias __attribute((visibility("hidden")));
-#define xmlDOMWrapCloneNode xmlDOMWrapCloneNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDOMWrapFreeCtxt
-extern __typeof (xmlDOMWrapFreeCtxt) xmlDOMWrapFreeCtxt __attribute((alias("xmlDOMWrapFreeCtxt__internal_alias")));
-#else
-#ifndef xmlDOMWrapFreeCtxt
-extern __typeof (xmlDOMWrapFreeCtxt) xmlDOMWrapFreeCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlDOMWrapFreeCtxt xmlDOMWrapFreeCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDOMWrapNewCtxt
-extern __typeof (xmlDOMWrapNewCtxt) xmlDOMWrapNewCtxt __attribute((alias("xmlDOMWrapNewCtxt__internal_alias")));
-#else
-#ifndef xmlDOMWrapNewCtxt
-extern __typeof (xmlDOMWrapNewCtxt) xmlDOMWrapNewCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlDOMWrapNewCtxt xmlDOMWrapNewCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDOMWrapReconcileNamespaces
-extern __typeof (xmlDOMWrapReconcileNamespaces) xmlDOMWrapReconcileNamespaces __attribute((alias("xmlDOMWrapReconcileNamespaces__internal_alias")));
-#else
-#ifndef xmlDOMWrapReconcileNamespaces
-extern __typeof (xmlDOMWrapReconcileNamespaces) xmlDOMWrapReconcileNamespaces__internal_alias __attribute((visibility("hidden")));
-#define xmlDOMWrapReconcileNamespaces xmlDOMWrapReconcileNamespaces__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDOMWrapRemoveNode
-extern __typeof (xmlDOMWrapRemoveNode) xmlDOMWrapRemoveNode __attribute((alias("xmlDOMWrapRemoveNode__internal_alias")));
-#else
-#ifndef xmlDOMWrapRemoveNode
-extern __typeof (xmlDOMWrapRemoveNode) xmlDOMWrapRemoveNode__internal_alias __attribute((visibility("hidden")));
-#define xmlDOMWrapRemoveNode xmlDOMWrapRemoveNode__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugCheckDocument
-extern __typeof (xmlDebugCheckDocument) xmlDebugCheckDocument __attribute((alias("xmlDebugCheckDocument__internal_alias")));
-#else
-#ifndef xmlDebugCheckDocument
-extern __typeof (xmlDebugCheckDocument) xmlDebugCheckDocument__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugCheckDocument xmlDebugCheckDocument__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpAttr
-extern __typeof (xmlDebugDumpAttr) xmlDebugDumpAttr __attribute((alias("xmlDebugDumpAttr__internal_alias")));
-#else
-#ifndef xmlDebugDumpAttr
-extern __typeof (xmlDebugDumpAttr) xmlDebugDumpAttr__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpAttr xmlDebugDumpAttr__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpAttrList
-extern __typeof (xmlDebugDumpAttrList) xmlDebugDumpAttrList __attribute((alias("xmlDebugDumpAttrList__internal_alias")));
-#else
-#ifndef xmlDebugDumpAttrList
-extern __typeof (xmlDebugDumpAttrList) xmlDebugDumpAttrList__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpAttrList xmlDebugDumpAttrList__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpDTD
-extern __typeof (xmlDebugDumpDTD) xmlDebugDumpDTD __attribute((alias("xmlDebugDumpDTD__internal_alias")));
-#else
-#ifndef xmlDebugDumpDTD
-extern __typeof (xmlDebugDumpDTD) xmlDebugDumpDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpDTD xmlDebugDumpDTD__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpDocument
-extern __typeof (xmlDebugDumpDocument) xmlDebugDumpDocument __attribute((alias("xmlDebugDumpDocument__internal_alias")));
-#else
-#ifndef xmlDebugDumpDocument
-extern __typeof (xmlDebugDumpDocument) xmlDebugDumpDocument__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpDocument xmlDebugDumpDocument__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpDocumentHead
-extern __typeof (xmlDebugDumpDocumentHead) xmlDebugDumpDocumentHead __attribute((alias("xmlDebugDumpDocumentHead__internal_alias")));
-#else
-#ifndef xmlDebugDumpDocumentHead
-extern __typeof (xmlDebugDumpDocumentHead) xmlDebugDumpDocumentHead__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpDocumentHead xmlDebugDumpDocumentHead__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpEntities
-extern __typeof (xmlDebugDumpEntities) xmlDebugDumpEntities __attribute((alias("xmlDebugDumpEntities__internal_alias")));
-#else
-#ifndef xmlDebugDumpEntities
-extern __typeof (xmlDebugDumpEntities) xmlDebugDumpEntities__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpEntities xmlDebugDumpEntities__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpNode
-extern __typeof (xmlDebugDumpNode) xmlDebugDumpNode __attribute((alias("xmlDebugDumpNode__internal_alias")));
-#else
-#ifndef xmlDebugDumpNode
-extern __typeof (xmlDebugDumpNode) xmlDebugDumpNode__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpNode xmlDebugDumpNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpNodeList
-extern __typeof (xmlDebugDumpNodeList) xmlDebugDumpNodeList __attribute((alias("xmlDebugDumpNodeList__internal_alias")));
-#else
-#ifndef xmlDebugDumpNodeList
-extern __typeof (xmlDebugDumpNodeList) xmlDebugDumpNodeList__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpNodeList xmlDebugDumpNodeList__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpOneNode
-extern __typeof (xmlDebugDumpOneNode) xmlDebugDumpOneNode __attribute((alias("xmlDebugDumpOneNode__internal_alias")));
-#else
-#ifndef xmlDebugDumpOneNode
-extern __typeof (xmlDebugDumpOneNode) xmlDebugDumpOneNode__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpOneNode xmlDebugDumpOneNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlDebugDumpString
-extern __typeof (xmlDebugDumpString) xmlDebugDumpString __attribute((alias("xmlDebugDumpString__internal_alias")));
-#else
-#ifndef xmlDebugDumpString
-extern __typeof (xmlDebugDumpString) xmlDebugDumpString__internal_alias __attribute((visibility("hidden")));
-#define xmlDebugDumpString xmlDebugDumpString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlDecodeEntities
-extern __typeof (xmlDecodeEntities) xmlDecodeEntities __attribute((alias("xmlDecodeEntities__internal_alias")));
-#else
-#ifndef xmlDecodeEntities
-extern __typeof (xmlDecodeEntities) xmlDecodeEntities__internal_alias __attribute((visibility("hidden")));
-#define xmlDecodeEntities xmlDecodeEntities__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlDefaultSAXHandlerInit
-extern __typeof (xmlDefaultSAXHandlerInit) xmlDefaultSAXHandlerInit __attribute((alias("xmlDefaultSAXHandlerInit__internal_alias")));
-#else
-#ifndef xmlDefaultSAXHandlerInit
-extern __typeof (xmlDefaultSAXHandlerInit) xmlDefaultSAXHandlerInit__internal_alias __attribute((visibility("hidden")));
-#define xmlDefaultSAXHandlerInit xmlDefaultSAXHandlerInit__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlDelEncodingAlias
-extern __typeof (xmlDelEncodingAlias) xmlDelEncodingAlias __attribute((alias("xmlDelEncodingAlias__internal_alias")));
-#else
-#ifndef xmlDelEncodingAlias
-extern __typeof (xmlDelEncodingAlias) xmlDelEncodingAlias__internal_alias __attribute((visibility("hidden")));
-#define xmlDelEncodingAlias xmlDelEncodingAlias__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlDeregisterNodeDefault
-extern __typeof (xmlDeregisterNodeDefault) xmlDeregisterNodeDefault __attribute((alias("xmlDeregisterNodeDefault__internal_alias")));
-#else
-#ifndef xmlDeregisterNodeDefault
-extern __typeof (xmlDeregisterNodeDefault) xmlDeregisterNodeDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlDeregisterNodeDefault xmlDeregisterNodeDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlDetectCharEncoding
-extern __typeof (xmlDetectCharEncoding) xmlDetectCharEncoding __attribute((alias("xmlDetectCharEncoding__internal_alias")));
-#else
-#ifndef xmlDetectCharEncoding
-extern __typeof (xmlDetectCharEncoding) xmlDetectCharEncoding__internal_alias __attribute((visibility("hidden")));
-#define xmlDetectCharEncoding xmlDetectCharEncoding__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictCleanup
-extern __typeof (xmlDictCleanup) xmlDictCleanup __attribute((alias("xmlDictCleanup__internal_alias")));
-#else
-#ifndef xmlDictCleanup
-extern __typeof (xmlDictCleanup) xmlDictCleanup__internal_alias __attribute((visibility("hidden")));
-#define xmlDictCleanup xmlDictCleanup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictCreate
-extern __typeof (xmlDictCreate) xmlDictCreate __attribute((alias("xmlDictCreate__internal_alias")));
-#else
-#ifndef xmlDictCreate
-extern __typeof (xmlDictCreate) xmlDictCreate__internal_alias __attribute((visibility("hidden")));
-#define xmlDictCreate xmlDictCreate__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictCreateSub
-extern __typeof (xmlDictCreateSub) xmlDictCreateSub __attribute((alias("xmlDictCreateSub__internal_alias")));
-#else
-#ifndef xmlDictCreateSub
-extern __typeof (xmlDictCreateSub) xmlDictCreateSub__internal_alias __attribute((visibility("hidden")));
-#define xmlDictCreateSub xmlDictCreateSub__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictExists
-extern __typeof (xmlDictExists) xmlDictExists __attribute((alias("xmlDictExists__internal_alias")));
-#else
-#ifndef xmlDictExists
-extern __typeof (xmlDictExists) xmlDictExists__internal_alias __attribute((visibility("hidden")));
-#define xmlDictExists xmlDictExists__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictFree
-extern __typeof (xmlDictFree) xmlDictFree __attribute((alias("xmlDictFree__internal_alias")));
-#else
-#ifndef xmlDictFree
-extern __typeof (xmlDictFree) xmlDictFree__internal_alias __attribute((visibility("hidden")));
-#define xmlDictFree xmlDictFree__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictGetUsage
-extern __typeof (xmlDictGetUsage) xmlDictGetUsage __attribute((alias("xmlDictGetUsage__internal_alias")));
-#else
-#ifndef xmlDictGetUsage
-extern __typeof (xmlDictGetUsage) xmlDictGetUsage__internal_alias __attribute((visibility("hidden")));
-#define xmlDictGetUsage xmlDictGetUsage__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictLookup
-extern __typeof (xmlDictLookup) xmlDictLookup __attribute((alias("xmlDictLookup__internal_alias")));
-#else
-#ifndef xmlDictLookup
-extern __typeof (xmlDictLookup) xmlDictLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlDictLookup xmlDictLookup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictOwns
-extern __typeof (xmlDictOwns) xmlDictOwns __attribute((alias("xmlDictOwns__internal_alias")));
-#else
-#ifndef xmlDictOwns
-extern __typeof (xmlDictOwns) xmlDictOwns__internal_alias __attribute((visibility("hidden")));
-#define xmlDictOwns xmlDictOwns__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictQLookup
-extern __typeof (xmlDictQLookup) xmlDictQLookup __attribute((alias("xmlDictQLookup__internal_alias")));
-#else
-#ifndef xmlDictQLookup
-extern __typeof (xmlDictQLookup) xmlDictQLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlDictQLookup xmlDictQLookup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictReference
-extern __typeof (xmlDictReference) xmlDictReference __attribute((alias("xmlDictReference__internal_alias")));
-#else
-#ifndef xmlDictReference
-extern __typeof (xmlDictReference) xmlDictReference__internal_alias __attribute((visibility("hidden")));
-#define xmlDictReference xmlDictReference__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictSetLimit
-extern __typeof (xmlDictSetLimit) xmlDictSetLimit __attribute((alias("xmlDictSetLimit__internal_alias")));
-#else
-#ifndef xmlDictSetLimit
-extern __typeof (xmlDictSetLimit) xmlDictSetLimit__internal_alias __attribute((visibility("hidden")));
-#define xmlDictSetLimit xmlDictSetLimit__internal_alias
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlDictSize
-extern __typeof (xmlDictSize) xmlDictSize __attribute((alias("xmlDictSize__internal_alias")));
-#else
-#ifndef xmlDictSize
-extern __typeof (xmlDictSize) xmlDictSize__internal_alias __attribute((visibility("hidden")));
-#define xmlDictSize xmlDictSize__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDocCopyNode
-extern __typeof (xmlDocCopyNode) xmlDocCopyNode __attribute((alias("xmlDocCopyNode__internal_alias")));
-#else
-#ifndef xmlDocCopyNode
-extern __typeof (xmlDocCopyNode) xmlDocCopyNode__internal_alias __attribute((visibility("hidden")));
-#define xmlDocCopyNode xmlDocCopyNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDocCopyNodeList
-extern __typeof (xmlDocCopyNodeList) xmlDocCopyNodeList __attribute((alias("xmlDocCopyNodeList__internal_alias")));
-#else
-#ifndef xmlDocCopyNodeList
-extern __typeof (xmlDocCopyNodeList) xmlDocCopyNodeList__internal_alias __attribute((visibility("hidden")));
-#define xmlDocCopyNodeList xmlDocCopyNodeList__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlDocDump
-extern __typeof (xmlDocDump) xmlDocDump __attribute((alias("xmlDocDump__internal_alias")));
-#else
-#ifndef xmlDocDump
-extern __typeof (xmlDocDump) xmlDocDump__internal_alias __attribute((visibility("hidden")));
-#define xmlDocDump xmlDocDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlDocDumpFormatMemory
-extern __typeof (xmlDocDumpFormatMemory) xmlDocDumpFormatMemory __attribute((alias("xmlDocDumpFormatMemory__internal_alias")));
-#else
-#ifndef xmlDocDumpFormatMemory
-extern __typeof (xmlDocDumpFormatMemory) xmlDocDumpFormatMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlDocDumpFormatMemory xmlDocDumpFormatMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlDocDumpFormatMemoryEnc
-extern __typeof (xmlDocDumpFormatMemoryEnc) xmlDocDumpFormatMemoryEnc __attribute((alias("xmlDocDumpFormatMemoryEnc__internal_alias")));
-#else
-#ifndef xmlDocDumpFormatMemoryEnc
-extern __typeof (xmlDocDumpFormatMemoryEnc) xmlDocDumpFormatMemoryEnc__internal_alias __attribute((visibility("hidden")));
-#define xmlDocDumpFormatMemoryEnc xmlDocDumpFormatMemoryEnc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlDocDumpMemory
-extern __typeof (xmlDocDumpMemory) xmlDocDumpMemory __attribute((alias("xmlDocDumpMemory__internal_alias")));
-#else
-#ifndef xmlDocDumpMemory
-extern __typeof (xmlDocDumpMemory) xmlDocDumpMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlDocDumpMemory xmlDocDumpMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlDocDumpMemoryEnc
-extern __typeof (xmlDocDumpMemoryEnc) xmlDocDumpMemoryEnc __attribute((alias("xmlDocDumpMemoryEnc__internal_alias")));
-#else
-#ifndef xmlDocDumpMemoryEnc
-extern __typeof (xmlDocDumpMemoryEnc) xmlDocDumpMemoryEnc__internal_alias __attribute((visibility("hidden")));
-#define xmlDocDumpMemoryEnc xmlDocDumpMemoryEnc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlDocFormatDump
-extern __typeof (xmlDocFormatDump) xmlDocFormatDump __attribute((alias("xmlDocFormatDump__internal_alias")));
-#else
-#ifndef xmlDocFormatDump
-extern __typeof (xmlDocFormatDump) xmlDocFormatDump__internal_alias __attribute((visibility("hidden")));
-#define xmlDocFormatDump xmlDocFormatDump__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlDocGetRootElement
-extern __typeof (xmlDocGetRootElement) xmlDocGetRootElement __attribute((alias("xmlDocGetRootElement__internal_alias")));
-#else
-#ifndef xmlDocGetRootElement
-extern __typeof (xmlDocGetRootElement) xmlDocGetRootElement__internal_alias __attribute((visibility("hidden")));
-#define xmlDocGetRootElement xmlDocGetRootElement__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_tree
-#undef xmlDocSetRootElement
-extern __typeof (xmlDocSetRootElement) xmlDocSetRootElement __attribute((alias("xmlDocSetRootElement__internal_alias")));
-#else
-#ifndef xmlDocSetRootElement
-extern __typeof (xmlDocSetRootElement) xmlDocSetRootElement__internal_alias __attribute((visibility("hidden")));
-#define xmlDocSetRootElement xmlDocSetRootElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_valid
-#undef xmlDumpAttributeDecl
-extern __typeof (xmlDumpAttributeDecl) xmlDumpAttributeDecl __attribute((alias("xmlDumpAttributeDecl__internal_alias")));
-#else
-#ifndef xmlDumpAttributeDecl
-extern __typeof (xmlDumpAttributeDecl) xmlDumpAttributeDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlDumpAttributeDecl xmlDumpAttributeDecl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_valid
-#undef xmlDumpAttributeTable
-extern __typeof (xmlDumpAttributeTable) xmlDumpAttributeTable __attribute((alias("xmlDumpAttributeTable__internal_alias")));
-#else
-#ifndef xmlDumpAttributeTable
-extern __typeof (xmlDumpAttributeTable) xmlDumpAttributeTable__internal_alias __attribute((visibility("hidden")));
-#define xmlDumpAttributeTable xmlDumpAttributeTable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_valid
-#undef xmlDumpElementDecl
-extern __typeof (xmlDumpElementDecl) xmlDumpElementDecl __attribute((alias("xmlDumpElementDecl__internal_alias")));
-#else
-#ifndef xmlDumpElementDecl
-extern __typeof (xmlDumpElementDecl) xmlDumpElementDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlDumpElementDecl xmlDumpElementDecl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_valid
-#undef xmlDumpElementTable
-extern __typeof (xmlDumpElementTable) xmlDumpElementTable __attribute((alias("xmlDumpElementTable__internal_alias")));
-#else
-#ifndef xmlDumpElementTable
-extern __typeof (xmlDumpElementTable) xmlDumpElementTable__internal_alias __attribute((visibility("hidden")));
-#define xmlDumpElementTable xmlDumpElementTable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_entities
-#undef xmlDumpEntitiesTable
-extern __typeof (xmlDumpEntitiesTable) xmlDumpEntitiesTable __attribute((alias("xmlDumpEntitiesTable__internal_alias")));
-#else
-#ifndef xmlDumpEntitiesTable
-extern __typeof (xmlDumpEntitiesTable) xmlDumpEntitiesTable__internal_alias __attribute((visibility("hidden")));
-#define xmlDumpEntitiesTable xmlDumpEntitiesTable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_entities
-#undef xmlDumpEntityDecl
-extern __typeof (xmlDumpEntityDecl) xmlDumpEntityDecl __attribute((alias("xmlDumpEntityDecl__internal_alias")));
-#else
-#ifndef xmlDumpEntityDecl
-extern __typeof (xmlDumpEntityDecl) xmlDumpEntityDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlDumpEntityDecl xmlDumpEntityDecl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_valid
-#undef xmlDumpNotationDecl
-extern __typeof (xmlDumpNotationDecl) xmlDumpNotationDecl __attribute((alias("xmlDumpNotationDecl__internal_alias")));
-#else
-#ifndef xmlDumpNotationDecl
-extern __typeof (xmlDumpNotationDecl) xmlDumpNotationDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlDumpNotationDecl xmlDumpNotationDecl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_valid
-#undef xmlDumpNotationTable
-extern __typeof (xmlDumpNotationTable) xmlDumpNotationTable __attribute((alias("xmlDumpNotationTable__internal_alias")));
-#else
-#ifndef xmlDumpNotationTable
-extern __typeof (xmlDumpNotationTable) xmlDumpNotationTable__internal_alias __attribute((visibility("hidden")));
-#define xmlDumpNotationTable xmlDumpNotationTable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlElemDump
-extern __typeof (xmlElemDump) xmlElemDump __attribute((alias("xmlElemDump__internal_alias")));
-#else
-#ifndef xmlElemDump
-extern __typeof (xmlElemDump) xmlElemDump__internal_alias __attribute((visibility("hidden")));
-#define xmlElemDump xmlElemDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlEncodeEntities
-extern __typeof (xmlEncodeEntities) xmlEncodeEntities __attribute((alias("xmlEncodeEntities__internal_alias")));
-#else
-#ifndef xmlEncodeEntities
-extern __typeof (xmlEncodeEntities) xmlEncodeEntities__internal_alias __attribute((visibility("hidden")));
-#define xmlEncodeEntities xmlEncodeEntities__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlEncodeEntitiesReentrant
-extern __typeof (xmlEncodeEntitiesReentrant) xmlEncodeEntitiesReentrant __attribute((alias("xmlEncodeEntitiesReentrant__internal_alias")));
-#else
-#ifndef xmlEncodeEntitiesReentrant
-extern __typeof (xmlEncodeEntitiesReentrant) xmlEncodeEntitiesReentrant__internal_alias __attribute((visibility("hidden")));
-#define xmlEncodeEntitiesReentrant xmlEncodeEntitiesReentrant__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlEncodeSpecialChars
-extern __typeof (xmlEncodeSpecialChars) xmlEncodeSpecialChars __attribute((alias("xmlEncodeSpecialChars__internal_alias")));
-#else
-#ifndef xmlEncodeSpecialChars
-extern __typeof (xmlEncodeSpecialChars) xmlEncodeSpecialChars__internal_alias __attribute((visibility("hidden")));
-#define xmlEncodeSpecialChars xmlEncodeSpecialChars__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlErrMemory
-extern __typeof (xmlErrMemory) xmlErrMemory __attribute((alias("xmlErrMemory__internal_alias")));
-#else
-#ifndef xmlErrMemory
-extern __typeof (xmlErrMemory) xmlErrMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlErrMemory xmlErrMemory__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpCtxtNbCons
-extern __typeof (xmlExpCtxtNbCons) xmlExpCtxtNbCons __attribute((alias("xmlExpCtxtNbCons__internal_alias")));
-#else
-#ifndef xmlExpCtxtNbCons
-extern __typeof (xmlExpCtxtNbCons) xmlExpCtxtNbCons__internal_alias __attribute((visibility("hidden")));
-#define xmlExpCtxtNbCons xmlExpCtxtNbCons__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpCtxtNbNodes
-extern __typeof (xmlExpCtxtNbNodes) xmlExpCtxtNbNodes __attribute((alias("xmlExpCtxtNbNodes__internal_alias")));
-#else
-#ifndef xmlExpCtxtNbNodes
-extern __typeof (xmlExpCtxtNbNodes) xmlExpCtxtNbNodes__internal_alias __attribute((visibility("hidden")));
-#define xmlExpCtxtNbNodes xmlExpCtxtNbNodes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpDump
-extern __typeof (xmlExpDump) xmlExpDump __attribute((alias("xmlExpDump__internal_alias")));
-#else
-#ifndef xmlExpDump
-extern __typeof (xmlExpDump) xmlExpDump__internal_alias __attribute((visibility("hidden")));
-#define xmlExpDump xmlExpDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpExpDerive
-extern __typeof (xmlExpExpDerive) xmlExpExpDerive __attribute((alias("xmlExpExpDerive__internal_alias")));
-#else
-#ifndef xmlExpExpDerive
-extern __typeof (xmlExpExpDerive) xmlExpExpDerive__internal_alias __attribute((visibility("hidden")));
-#define xmlExpExpDerive xmlExpExpDerive__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpFree
-extern __typeof (xmlExpFree) xmlExpFree __attribute((alias("xmlExpFree__internal_alias")));
-#else
-#ifndef xmlExpFree
-extern __typeof (xmlExpFree) xmlExpFree__internal_alias __attribute((visibility("hidden")));
-#define xmlExpFree xmlExpFree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpFreeCtxt
-extern __typeof (xmlExpFreeCtxt) xmlExpFreeCtxt __attribute((alias("xmlExpFreeCtxt__internal_alias")));
-#else
-#ifndef xmlExpFreeCtxt
-extern __typeof (xmlExpFreeCtxt) xmlExpFreeCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlExpFreeCtxt xmlExpFreeCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpGetLanguage
-extern __typeof (xmlExpGetLanguage) xmlExpGetLanguage __attribute((alias("xmlExpGetLanguage__internal_alias")));
-#else
-#ifndef xmlExpGetLanguage
-extern __typeof (xmlExpGetLanguage) xmlExpGetLanguage__internal_alias __attribute((visibility("hidden")));
-#define xmlExpGetLanguage xmlExpGetLanguage__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpGetStart
-extern __typeof (xmlExpGetStart) xmlExpGetStart __attribute((alias("xmlExpGetStart__internal_alias")));
-#else
-#ifndef xmlExpGetStart
-extern __typeof (xmlExpGetStart) xmlExpGetStart__internal_alias __attribute((visibility("hidden")));
-#define xmlExpGetStart xmlExpGetStart__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpIsNillable
-extern __typeof (xmlExpIsNillable) xmlExpIsNillable __attribute((alias("xmlExpIsNillable__internal_alias")));
-#else
-#ifndef xmlExpIsNillable
-extern __typeof (xmlExpIsNillable) xmlExpIsNillable__internal_alias __attribute((visibility("hidden")));
-#define xmlExpIsNillable xmlExpIsNillable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpMaxToken
-extern __typeof (xmlExpMaxToken) xmlExpMaxToken __attribute((alias("xmlExpMaxToken__internal_alias")));
-#else
-#ifndef xmlExpMaxToken
-extern __typeof (xmlExpMaxToken) xmlExpMaxToken__internal_alias __attribute((visibility("hidden")));
-#define xmlExpMaxToken xmlExpMaxToken__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpNewAtom
-extern __typeof (xmlExpNewAtom) xmlExpNewAtom __attribute((alias("xmlExpNewAtom__internal_alias")));
-#else
-#ifndef xmlExpNewAtom
-extern __typeof (xmlExpNewAtom) xmlExpNewAtom__internal_alias __attribute((visibility("hidden")));
-#define xmlExpNewAtom xmlExpNewAtom__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpNewCtxt
-extern __typeof (xmlExpNewCtxt) xmlExpNewCtxt __attribute((alias("xmlExpNewCtxt__internal_alias")));
-#else
-#ifndef xmlExpNewCtxt
-extern __typeof (xmlExpNewCtxt) xmlExpNewCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlExpNewCtxt xmlExpNewCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpNewOr
-extern __typeof (xmlExpNewOr) xmlExpNewOr __attribute((alias("xmlExpNewOr__internal_alias")));
-#else
-#ifndef xmlExpNewOr
-extern __typeof (xmlExpNewOr) xmlExpNewOr__internal_alias __attribute((visibility("hidden")));
-#define xmlExpNewOr xmlExpNewOr__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpNewRange
-extern __typeof (xmlExpNewRange) xmlExpNewRange __attribute((alias("xmlExpNewRange__internal_alias")));
-#else
-#ifndef xmlExpNewRange
-extern __typeof (xmlExpNewRange) xmlExpNewRange__internal_alias __attribute((visibility("hidden")));
-#define xmlExpNewRange xmlExpNewRange__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpNewSeq
-extern __typeof (xmlExpNewSeq) xmlExpNewSeq __attribute((alias("xmlExpNewSeq__internal_alias")));
-#else
-#ifndef xmlExpNewSeq
-extern __typeof (xmlExpNewSeq) xmlExpNewSeq__internal_alias __attribute((visibility("hidden")));
-#define xmlExpNewSeq xmlExpNewSeq__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpParse
-extern __typeof (xmlExpParse) xmlExpParse __attribute((alias("xmlExpParse__internal_alias")));
-#else
-#ifndef xmlExpParse
-extern __typeof (xmlExpParse) xmlExpParse__internal_alias __attribute((visibility("hidden")));
-#define xmlExpParse xmlExpParse__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpRef
-extern __typeof (xmlExpRef) xmlExpRef __attribute((alias("xmlExpRef__internal_alias")));
-#else
-#ifndef xmlExpRef
-extern __typeof (xmlExpRef) xmlExpRef__internal_alias __attribute((visibility("hidden")));
-#define xmlExpRef xmlExpRef__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpStringDerive
-extern __typeof (xmlExpStringDerive) xmlExpStringDerive __attribute((alias("xmlExpStringDerive__internal_alias")));
-#else
-#ifndef xmlExpStringDerive
-extern __typeof (xmlExpStringDerive) xmlExpStringDerive__internal_alias __attribute((visibility("hidden")));
-#define xmlExpStringDerive xmlExpStringDerive__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlExpSubsume
-extern __typeof (xmlExpSubsume) xmlExpSubsume __attribute((alias("xmlExpSubsume__internal_alias")));
-#else
-#ifndef xmlExpSubsume
-extern __typeof (xmlExpSubsume) xmlExpSubsume__internal_alias __attribute((visibility("hidden")));
-#define xmlExpSubsume xmlExpSubsume__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlFileClose
-extern __typeof (xmlFileClose) xmlFileClose __attribute((alias("xmlFileClose__internal_alias")));
-#else
-#ifndef xmlFileClose
-extern __typeof (xmlFileClose) xmlFileClose__internal_alias __attribute((visibility("hidden")));
-#define xmlFileClose xmlFileClose__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlFileMatch
-extern __typeof (xmlFileMatch) xmlFileMatch __attribute((alias("xmlFileMatch__internal_alias")));
-#else
-#ifndef xmlFileMatch
-extern __typeof (xmlFileMatch) xmlFileMatch__internal_alias __attribute((visibility("hidden")));
-#define xmlFileMatch xmlFileMatch__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlFileOpen
-extern __typeof (xmlFileOpen) xmlFileOpen __attribute((alias("xmlFileOpen__internal_alias")));
-#else
-#ifndef xmlFileOpen
-extern __typeof (xmlFileOpen) xmlFileOpen__internal_alias __attribute((visibility("hidden")));
-#define xmlFileOpen xmlFileOpen__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlFileRead
-extern __typeof (xmlFileRead) xmlFileRead __attribute((alias("xmlFileRead__internal_alias")));
-#else
-#ifndef xmlFileRead
-extern __typeof (xmlFileRead) xmlFileRead__internal_alias __attribute((visibility("hidden")));
-#define xmlFileRead xmlFileRead__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlFindCharEncodingHandler
-extern __typeof (xmlFindCharEncodingHandler) xmlFindCharEncodingHandler __attribute((alias("xmlFindCharEncodingHandler__internal_alias")));
-#else
-#ifndef xmlFindCharEncodingHandler
-extern __typeof (xmlFindCharEncodingHandler) xmlFindCharEncodingHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlFindCharEncodingHandler xmlFindCharEncodingHandler__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlFirstElementChild
-extern __typeof (xmlFirstElementChild) xmlFirstElementChild __attribute((alias("xmlFirstElementChild__internal_alias")));
-#else
-#ifndef xmlFirstElementChild
-extern __typeof (xmlFirstElementChild) xmlFirstElementChild__internal_alias __attribute((visibility("hidden")));
-#define xmlFirstElementChild xmlFirstElementChild__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlFreeAttributeTable
-extern __typeof (xmlFreeAttributeTable) xmlFreeAttributeTable __attribute((alias("xmlFreeAttributeTable__internal_alias")));
-#else
-#ifndef xmlFreeAttributeTable
-extern __typeof (xmlFreeAttributeTable) xmlFreeAttributeTable__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeAttributeTable xmlFreeAttributeTable__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlFreeAutomata
-extern __typeof (xmlFreeAutomata) xmlFreeAutomata __attribute((alias("xmlFreeAutomata__internal_alias")));
-#else
-#ifndef xmlFreeAutomata
-extern __typeof (xmlFreeAutomata) xmlFreeAutomata__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeAutomata xmlFreeAutomata__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlFreeCatalog
-extern __typeof (xmlFreeCatalog) xmlFreeCatalog __attribute((alias("xmlFreeCatalog__internal_alias")));
-#else
-#ifndef xmlFreeCatalog
-extern __typeof (xmlFreeCatalog) xmlFreeCatalog__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeCatalog xmlFreeCatalog__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlFreeDoc
-extern __typeof (xmlFreeDoc) xmlFreeDoc __attribute((alias("xmlFreeDoc__internal_alias")));
-#else
-#ifndef xmlFreeDoc
-extern __typeof (xmlFreeDoc) xmlFreeDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeDoc xmlFreeDoc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlFreeDocElementContent
-extern __typeof (xmlFreeDocElementContent) xmlFreeDocElementContent __attribute((alias("xmlFreeDocElementContent__internal_alias")));
-#else
-#ifndef xmlFreeDocElementContent
-extern __typeof (xmlFreeDocElementContent) xmlFreeDocElementContent__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeDocElementContent xmlFreeDocElementContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlFreeDtd
-extern __typeof (xmlFreeDtd) xmlFreeDtd __attribute((alias("xmlFreeDtd__internal_alias")));
-#else
-#ifndef xmlFreeDtd
-extern __typeof (xmlFreeDtd) xmlFreeDtd__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeDtd xmlFreeDtd__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlFreeElementContent
-extern __typeof (xmlFreeElementContent) xmlFreeElementContent __attribute((alias("xmlFreeElementContent__internal_alias")));
-#else
-#ifndef xmlFreeElementContent
-extern __typeof (xmlFreeElementContent) xmlFreeElementContent__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeElementContent xmlFreeElementContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlFreeElementTable
-extern __typeof (xmlFreeElementTable) xmlFreeElementTable __attribute((alias("xmlFreeElementTable__internal_alias")));
-#else
-#ifndef xmlFreeElementTable
-extern __typeof (xmlFreeElementTable) xmlFreeElementTable__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeElementTable xmlFreeElementTable__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlFreeEntitiesTable
-extern __typeof (xmlFreeEntitiesTable) xmlFreeEntitiesTable __attribute((alias("xmlFreeEntitiesTable__internal_alias")));
-#else
-#ifndef xmlFreeEntitiesTable
-extern __typeof (xmlFreeEntitiesTable) xmlFreeEntitiesTable__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeEntitiesTable xmlFreeEntitiesTable__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlFreeEnumeration
-extern __typeof (xmlFreeEnumeration) xmlFreeEnumeration __attribute((alias("xmlFreeEnumeration__internal_alias")));
-#else
-#ifndef xmlFreeEnumeration
-extern __typeof (xmlFreeEnumeration) xmlFreeEnumeration__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeEnumeration xmlFreeEnumeration__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlFreeIDTable
-extern __typeof (xmlFreeIDTable) xmlFreeIDTable __attribute((alias("xmlFreeIDTable__internal_alias")));
-#else
-#ifndef xmlFreeIDTable
-extern __typeof (xmlFreeIDTable) xmlFreeIDTable__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeIDTable xmlFreeIDTable__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlFreeInputStream
-extern __typeof (xmlFreeInputStream) xmlFreeInputStream __attribute((alias("xmlFreeInputStream__internal_alias")));
-#else
-#ifndef xmlFreeInputStream
-extern __typeof (xmlFreeInputStream) xmlFreeInputStream__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeInputStream xmlFreeInputStream__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlFreeMutex
-extern __typeof (xmlFreeMutex) xmlFreeMutex __attribute((alias("xmlFreeMutex__internal_alias")));
-#else
-#ifndef xmlFreeMutex
-extern __typeof (xmlFreeMutex) xmlFreeMutex__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeMutex xmlFreeMutex__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlFreeNode
-extern __typeof (xmlFreeNode) xmlFreeNode __attribute((alias("xmlFreeNode__internal_alias")));
-#else
-#ifndef xmlFreeNode
-extern __typeof (xmlFreeNode) xmlFreeNode__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeNode xmlFreeNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlFreeNodeList
-extern __typeof (xmlFreeNodeList) xmlFreeNodeList __attribute((alias("xmlFreeNodeList__internal_alias")));
-#else
-#ifndef xmlFreeNodeList
-extern __typeof (xmlFreeNodeList) xmlFreeNodeList__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeNodeList xmlFreeNodeList__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlFreeNotationTable
-extern __typeof (xmlFreeNotationTable) xmlFreeNotationTable __attribute((alias("xmlFreeNotationTable__internal_alias")));
-#else
-#ifndef xmlFreeNotationTable
-extern __typeof (xmlFreeNotationTable) xmlFreeNotationTable__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeNotationTable xmlFreeNotationTable__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlFreeNs
-extern __typeof (xmlFreeNs) xmlFreeNs __attribute((alias("xmlFreeNs__internal_alias")));
-#else
-#ifndef xmlFreeNs
-extern __typeof (xmlFreeNs) xmlFreeNs__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeNs xmlFreeNs__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlFreeNsList
-extern __typeof (xmlFreeNsList) xmlFreeNsList __attribute((alias("xmlFreeNsList__internal_alias")));
-#else
-#ifndef xmlFreeNsList
-extern __typeof (xmlFreeNsList) xmlFreeNsList__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeNsList xmlFreeNsList__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlFreeParserCtxt
-extern __typeof (xmlFreeParserCtxt) xmlFreeParserCtxt __attribute((alias("xmlFreeParserCtxt__internal_alias")));
-#else
-#ifndef xmlFreeParserCtxt
-extern __typeof (xmlFreeParserCtxt) xmlFreeParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeParserCtxt xmlFreeParserCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlFreeParserInputBuffer
-extern __typeof (xmlFreeParserInputBuffer) xmlFreeParserInputBuffer __attribute((alias("xmlFreeParserInputBuffer__internal_alias")));
-#else
-#ifndef xmlFreeParserInputBuffer
-extern __typeof (xmlFreeParserInputBuffer) xmlFreeParserInputBuffer__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeParserInputBuffer xmlFreeParserInputBuffer__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlFreePattern
-extern __typeof (xmlFreePattern) xmlFreePattern __attribute((alias("xmlFreePattern__internal_alias")));
-#else
-#ifndef xmlFreePattern
-extern __typeof (xmlFreePattern) xmlFreePattern__internal_alias __attribute((visibility("hidden")));
-#define xmlFreePattern xmlFreePattern__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlFreePatternList
-extern __typeof (xmlFreePatternList) xmlFreePatternList __attribute((alias("xmlFreePatternList__internal_alias")));
-#else
-#ifndef xmlFreePatternList
-extern __typeof (xmlFreePatternList) xmlFreePatternList__internal_alias __attribute((visibility("hidden")));
-#define xmlFreePatternList xmlFreePatternList__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlFreeProp
-extern __typeof (xmlFreeProp) xmlFreeProp __attribute((alias("xmlFreeProp__internal_alias")));
-#else
-#ifndef xmlFreeProp
-extern __typeof (xmlFreeProp) xmlFreeProp__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeProp xmlFreeProp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlFreePropList
-extern __typeof (xmlFreePropList) xmlFreePropList __attribute((alias("xmlFreePropList__internal_alias")));
-#else
-#ifndef xmlFreePropList
-extern __typeof (xmlFreePropList) xmlFreePropList__internal_alias __attribute((visibility("hidden")));
-#define xmlFreePropList xmlFreePropList__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlFreeRMutex
-extern __typeof (xmlFreeRMutex) xmlFreeRMutex __attribute((alias("xmlFreeRMutex__internal_alias")));
-#else
-#ifndef xmlFreeRMutex
-extern __typeof (xmlFreeRMutex) xmlFreeRMutex__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeRMutex xmlFreeRMutex__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlFreeRefTable
-extern __typeof (xmlFreeRefTable) xmlFreeRefTable __attribute((alias("xmlFreeRefTable__internal_alias")));
-#else
-#ifndef xmlFreeRefTable
-extern __typeof (xmlFreeRefTable) xmlFreeRefTable__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeRefTable xmlFreeRefTable__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlFreeStreamCtxt
-extern __typeof (xmlFreeStreamCtxt) xmlFreeStreamCtxt __attribute((alias("xmlFreeStreamCtxt__internal_alias")));
-#else
-#ifndef xmlFreeStreamCtxt
-extern __typeof (xmlFreeStreamCtxt) xmlFreeStreamCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeStreamCtxt xmlFreeStreamCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlFreeTextReader
-extern __typeof (xmlFreeTextReader) xmlFreeTextReader __attribute((alias("xmlFreeTextReader__internal_alias")));
-#else
-#ifndef xmlFreeTextReader
-extern __typeof (xmlFreeTextReader) xmlFreeTextReader__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeTextReader xmlFreeTextReader__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlFreeTextWriter
-extern __typeof (xmlFreeTextWriter) xmlFreeTextWriter __attribute((alias("xmlFreeTextWriter__internal_alias")));
-#else
-#ifndef xmlFreeTextWriter
-extern __typeof (xmlFreeTextWriter) xmlFreeTextWriter__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeTextWriter xmlFreeTextWriter__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlFreeURI
-extern __typeof (xmlFreeURI) xmlFreeURI __attribute((alias("xmlFreeURI__internal_alias")));
-#else
-#ifndef xmlFreeURI
-extern __typeof (xmlFreeURI) xmlFreeURI__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeURI xmlFreeURI__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlFreeValidCtxt
-extern __typeof (xmlFreeValidCtxt) xmlFreeValidCtxt __attribute((alias("xmlFreeValidCtxt__internal_alias")));
-#else
-#ifndef xmlFreeValidCtxt
-extern __typeof (xmlFreeValidCtxt) xmlFreeValidCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlFreeValidCtxt xmlFreeValidCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlGcMemGet
-extern __typeof (xmlGcMemGet) xmlGcMemGet __attribute((alias("xmlGcMemGet__internal_alias")));
-#else
-#ifndef xmlGcMemGet
-extern __typeof (xmlGcMemGet) xmlGcMemGet__internal_alias __attribute((visibility("hidden")));
-#define xmlGcMemGet xmlGcMemGet__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlGcMemSetup
-extern __typeof (xmlGcMemSetup) xmlGcMemSetup __attribute((alias("xmlGcMemSetup__internal_alias")));
-#else
-#ifndef xmlGcMemSetup
-extern __typeof (xmlGcMemSetup) xmlGcMemSetup__internal_alias __attribute((visibility("hidden")));
-#define xmlGcMemSetup xmlGcMemSetup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetBufferAllocationScheme
-extern __typeof (xmlGetBufferAllocationScheme) xmlGetBufferAllocationScheme __attribute((alias("xmlGetBufferAllocationScheme__internal_alias")));
-#else
-#ifndef xmlGetBufferAllocationScheme
-extern __typeof (xmlGetBufferAllocationScheme) xmlGetBufferAllocationScheme__internal_alias __attribute((visibility("hidden")));
-#define xmlGetBufferAllocationScheme xmlGetBufferAllocationScheme__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlGetCharEncodingHandler
-extern __typeof (xmlGetCharEncodingHandler) xmlGetCharEncodingHandler __attribute((alias("xmlGetCharEncodingHandler__internal_alias")));
-#else
-#ifndef xmlGetCharEncodingHandler
-extern __typeof (xmlGetCharEncodingHandler) xmlGetCharEncodingHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlGetCharEncodingHandler xmlGetCharEncodingHandler__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlGetCharEncodingName
-extern __typeof (xmlGetCharEncodingName) xmlGetCharEncodingName __attribute((alias("xmlGetCharEncodingName__internal_alias")));
-#else
-#ifndef xmlGetCharEncodingName
-extern __typeof (xmlGetCharEncodingName) xmlGetCharEncodingName__internal_alias __attribute((visibility("hidden")));
-#define xmlGetCharEncodingName xmlGetCharEncodingName__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetCompressMode
-extern __typeof (xmlGetCompressMode) xmlGetCompressMode __attribute((alias("xmlGetCompressMode__internal_alias")));
-#else
-#ifndef xmlGetCompressMode
-extern __typeof (xmlGetCompressMode) xmlGetCompressMode__internal_alias __attribute((visibility("hidden")));
-#define xmlGetCompressMode xmlGetCompressMode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetDocCompressMode
-extern __typeof (xmlGetDocCompressMode) xmlGetDocCompressMode __attribute((alias("xmlGetDocCompressMode__internal_alias")));
-#else
-#ifndef xmlGetDocCompressMode
-extern __typeof (xmlGetDocCompressMode) xmlGetDocCompressMode__internal_alias __attribute((visibility("hidden")));
-#define xmlGetDocCompressMode xmlGetDocCompressMode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlGetDocEntity
-extern __typeof (xmlGetDocEntity) xmlGetDocEntity __attribute((alias("xmlGetDocEntity__internal_alias")));
-#else
-#ifndef xmlGetDocEntity
-extern __typeof (xmlGetDocEntity) xmlGetDocEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlGetDocEntity xmlGetDocEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlGetDtdAttrDesc
-extern __typeof (xmlGetDtdAttrDesc) xmlGetDtdAttrDesc __attribute((alias("xmlGetDtdAttrDesc__internal_alias")));
-#else
-#ifndef xmlGetDtdAttrDesc
-extern __typeof (xmlGetDtdAttrDesc) xmlGetDtdAttrDesc__internal_alias __attribute((visibility("hidden")));
-#define xmlGetDtdAttrDesc xmlGetDtdAttrDesc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlGetDtdElementDesc
-extern __typeof (xmlGetDtdElementDesc) xmlGetDtdElementDesc __attribute((alias("xmlGetDtdElementDesc__internal_alias")));
-#else
-#ifndef xmlGetDtdElementDesc
-extern __typeof (xmlGetDtdElementDesc) xmlGetDtdElementDesc__internal_alias __attribute((visibility("hidden")));
-#define xmlGetDtdElementDesc xmlGetDtdElementDesc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlGetDtdEntity
-extern __typeof (xmlGetDtdEntity) xmlGetDtdEntity __attribute((alias("xmlGetDtdEntity__internal_alias")));
-#else
-#ifndef xmlGetDtdEntity
-extern __typeof (xmlGetDtdEntity) xmlGetDtdEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlGetDtdEntity xmlGetDtdEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlGetDtdNotationDesc
-extern __typeof (xmlGetDtdNotationDesc) xmlGetDtdNotationDesc __attribute((alias("xmlGetDtdNotationDesc__internal_alias")));
-#else
-#ifndef xmlGetDtdNotationDesc
-extern __typeof (xmlGetDtdNotationDesc) xmlGetDtdNotationDesc__internal_alias __attribute((visibility("hidden")));
-#define xmlGetDtdNotationDesc xmlGetDtdNotationDesc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlGetDtdQAttrDesc
-extern __typeof (xmlGetDtdQAttrDesc) xmlGetDtdQAttrDesc __attribute((alias("xmlGetDtdQAttrDesc__internal_alias")));
-#else
-#ifndef xmlGetDtdQAttrDesc
-extern __typeof (xmlGetDtdQAttrDesc) xmlGetDtdQAttrDesc__internal_alias __attribute((visibility("hidden")));
-#define xmlGetDtdQAttrDesc xmlGetDtdQAttrDesc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlGetDtdQElementDesc
-extern __typeof (xmlGetDtdQElementDesc) xmlGetDtdQElementDesc __attribute((alias("xmlGetDtdQElementDesc__internal_alias")));
-#else
-#ifndef xmlGetDtdQElementDesc
-extern __typeof (xmlGetDtdQElementDesc) xmlGetDtdQElementDesc__internal_alias __attribute((visibility("hidden")));
-#define xmlGetDtdQElementDesc xmlGetDtdQElementDesc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlGetEncodingAlias
-extern __typeof (xmlGetEncodingAlias) xmlGetEncodingAlias __attribute((alias("xmlGetEncodingAlias__internal_alias")));
-#else
-#ifndef xmlGetEncodingAlias
-extern __typeof (xmlGetEncodingAlias) xmlGetEncodingAlias__internal_alias __attribute((visibility("hidden")));
-#define xmlGetEncodingAlias xmlGetEncodingAlias__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlGetExternalEntityLoader
-extern __typeof (xmlGetExternalEntityLoader) xmlGetExternalEntityLoader __attribute((alias("xmlGetExternalEntityLoader__internal_alias")));
-#else
-#ifndef xmlGetExternalEntityLoader
-extern __typeof (xmlGetExternalEntityLoader) xmlGetExternalEntityLoader__internal_alias __attribute((visibility("hidden")));
-#define xmlGetExternalEntityLoader xmlGetExternalEntityLoader__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlGetFeature
-extern __typeof (xmlGetFeature) xmlGetFeature __attribute((alias("xmlGetFeature__internal_alias")));
-#else
-#ifndef xmlGetFeature
-extern __typeof (xmlGetFeature) xmlGetFeature__internal_alias __attribute((visibility("hidden")));
-#define xmlGetFeature xmlGetFeature__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlGetFeaturesList
-extern __typeof (xmlGetFeaturesList) xmlGetFeaturesList __attribute((alias("xmlGetFeaturesList__internal_alias")));
-#else
-#ifndef xmlGetFeaturesList
-extern __typeof (xmlGetFeaturesList) xmlGetFeaturesList__internal_alias __attribute((visibility("hidden")));
-#define xmlGetFeaturesList xmlGetFeaturesList__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlGetGlobalState
-extern __typeof (xmlGetGlobalState) xmlGetGlobalState __attribute((alias("xmlGetGlobalState__internal_alias")));
-#else
-#ifndef xmlGetGlobalState
-extern __typeof (xmlGetGlobalState) xmlGetGlobalState__internal_alias __attribute((visibility("hidden")));
-#define xmlGetGlobalState xmlGetGlobalState__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlGetID
-extern __typeof (xmlGetID) xmlGetID __attribute((alias("xmlGetID__internal_alias")));
-#else
-#ifndef xmlGetID
-extern __typeof (xmlGetID) xmlGetID__internal_alias __attribute((visibility("hidden")));
-#define xmlGetID xmlGetID__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetIntSubset
-extern __typeof (xmlGetIntSubset) xmlGetIntSubset __attribute((alias("xmlGetIntSubset__internal_alias")));
-#else
-#ifndef xmlGetIntSubset
-extern __typeof (xmlGetIntSubset) xmlGetIntSubset__internal_alias __attribute((visibility("hidden")));
-#define xmlGetIntSubset xmlGetIntSubset__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetLastChild
-extern __typeof (xmlGetLastChild) xmlGetLastChild __attribute((alias("xmlGetLastChild__internal_alias")));
-#else
-#ifndef xmlGetLastChild
-extern __typeof (xmlGetLastChild) xmlGetLastChild__internal_alias __attribute((visibility("hidden")));
-#define xmlGetLastChild xmlGetLastChild__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlGetLastError
-extern __typeof (xmlGetLastError) xmlGetLastError __attribute((alias("xmlGetLastError__internal_alias")));
-#else
-#ifndef xmlGetLastError
-extern __typeof (xmlGetLastError) xmlGetLastError__internal_alias __attribute((visibility("hidden")));
-#define xmlGetLastError xmlGetLastError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetLineNo
-extern __typeof (xmlGetLineNo) xmlGetLineNo __attribute((alias("xmlGetLineNo__internal_alias")));
-#else
-#ifndef xmlGetLineNo
-extern __typeof (xmlGetLineNo) xmlGetLineNo__internal_alias __attribute((visibility("hidden")));
-#define xmlGetLineNo xmlGetLineNo__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetNoNsProp
-extern __typeof (xmlGetNoNsProp) xmlGetNoNsProp __attribute((alias("xmlGetNoNsProp__internal_alias")));
-#else
-#ifndef xmlGetNoNsProp
-extern __typeof (xmlGetNoNsProp) xmlGetNoNsProp__internal_alias __attribute((visibility("hidden")));
-#define xmlGetNoNsProp xmlGetNoNsProp__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_tree
-#undef xmlGetNodePath
-extern __typeof (xmlGetNodePath) xmlGetNodePath __attribute((alias("xmlGetNodePath__internal_alias")));
-#else
-#ifndef xmlGetNodePath
-extern __typeof (xmlGetNodePath) xmlGetNodePath__internal_alias __attribute((visibility("hidden")));
-#define xmlGetNodePath xmlGetNodePath__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlGetNsList
-extern __typeof (xmlGetNsList) xmlGetNsList __attribute((alias("xmlGetNsList__internal_alias")));
-#else
-#ifndef xmlGetNsList
-extern __typeof (xmlGetNsList) xmlGetNsList__internal_alias __attribute((visibility("hidden")));
-#define xmlGetNsList xmlGetNsList__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetNsProp
-extern __typeof (xmlGetNsProp) xmlGetNsProp __attribute((alias("xmlGetNsProp__internal_alias")));
-#else
-#ifndef xmlGetNsProp
-extern __typeof (xmlGetNsProp) xmlGetNsProp__internal_alias __attribute((visibility("hidden")));
-#define xmlGetNsProp xmlGetNsProp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlGetParameterEntity
-extern __typeof (xmlGetParameterEntity) xmlGetParameterEntity __attribute((alias("xmlGetParameterEntity__internal_alias")));
-#else
-#ifndef xmlGetParameterEntity
-extern __typeof (xmlGetParameterEntity) xmlGetParameterEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlGetParameterEntity xmlGetParameterEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlGetPredefinedEntity
-extern __typeof (xmlGetPredefinedEntity) xmlGetPredefinedEntity __attribute((alias("xmlGetPredefinedEntity__internal_alias")));
-#else
-#ifndef xmlGetPredefinedEntity
-extern __typeof (xmlGetPredefinedEntity) xmlGetPredefinedEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlGetPredefinedEntity xmlGetPredefinedEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlGetProp
-extern __typeof (xmlGetProp) xmlGetProp __attribute((alias("xmlGetProp__internal_alias")));
-#else
-#ifndef xmlGetProp
-extern __typeof (xmlGetProp) xmlGetProp__internal_alias __attribute((visibility("hidden")));
-#define xmlGetProp xmlGetProp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlGetRefs
-extern __typeof (xmlGetRefs) xmlGetRefs __attribute((alias("xmlGetRefs__internal_alias")));
-#else
-#ifndef xmlGetRefs
-extern __typeof (xmlGetRefs) xmlGetRefs__internal_alias __attribute((visibility("hidden")));
-#define xmlGetRefs xmlGetRefs__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlGetThreadId
-extern __typeof (xmlGetThreadId) xmlGetThreadId __attribute((alias("xmlGetThreadId__internal_alias")));
-#else
-#ifndef xmlGetThreadId
-extern __typeof (xmlGetThreadId) xmlGetThreadId__internal_alias __attribute((visibility("hidden")));
-#define xmlGetThreadId xmlGetThreadId__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlGetUTF8Char
-extern __typeof (xmlGetUTF8Char) xmlGetUTF8Char __attribute((alias("xmlGetUTF8Char__internal_alias")));
-#else
-#ifndef xmlGetUTF8Char
-extern __typeof (xmlGetUTF8Char) xmlGetUTF8Char__internal_alias __attribute((visibility("hidden")));
-#define xmlGetUTF8Char xmlGetUTF8Char__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlHandleEntity
-extern __typeof (xmlHandleEntity) xmlHandleEntity __attribute((alias("xmlHandleEntity__internal_alias")));
-#else
-#ifndef xmlHandleEntity
-extern __typeof (xmlHandleEntity) xmlHandleEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlHandleEntity xmlHandleEntity__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlHasFeature
-extern __typeof (xmlHasFeature) xmlHasFeature __attribute((alias("xmlHasFeature__internal_alias")));
-#else
-#ifndef xmlHasFeature
-extern __typeof (xmlHasFeature) xmlHasFeature__internal_alias __attribute((visibility("hidden")));
-#define xmlHasFeature xmlHasFeature__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlHasNsProp
-extern __typeof (xmlHasNsProp) xmlHasNsProp __attribute((alias("xmlHasNsProp__internal_alias")));
-#else
-#ifndef xmlHasNsProp
-extern __typeof (xmlHasNsProp) xmlHasNsProp__internal_alias __attribute((visibility("hidden")));
-#define xmlHasNsProp xmlHasNsProp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlHasProp
-extern __typeof (xmlHasProp) xmlHasProp __attribute((alias("xmlHasProp__internal_alias")));
-#else
-#ifndef xmlHasProp
-extern __typeof (xmlHasProp) xmlHasProp__internal_alias __attribute((visibility("hidden")));
-#define xmlHasProp xmlHasProp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashAddEntry
-extern __typeof (xmlHashAddEntry) xmlHashAddEntry __attribute((alias("xmlHashAddEntry__internal_alias")));
-#else
-#ifndef xmlHashAddEntry
-extern __typeof (xmlHashAddEntry) xmlHashAddEntry__internal_alias __attribute((visibility("hidden")));
-#define xmlHashAddEntry xmlHashAddEntry__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashAddEntry2
-extern __typeof (xmlHashAddEntry2) xmlHashAddEntry2 __attribute((alias("xmlHashAddEntry2__internal_alias")));
-#else
-#ifndef xmlHashAddEntry2
-extern __typeof (xmlHashAddEntry2) xmlHashAddEntry2__internal_alias __attribute((visibility("hidden")));
-#define xmlHashAddEntry2 xmlHashAddEntry2__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashAddEntry3
-extern __typeof (xmlHashAddEntry3) xmlHashAddEntry3 __attribute((alias("xmlHashAddEntry3__internal_alias")));
-#else
-#ifndef xmlHashAddEntry3
-extern __typeof (xmlHashAddEntry3) xmlHashAddEntry3__internal_alias __attribute((visibility("hidden")));
-#define xmlHashAddEntry3 xmlHashAddEntry3__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashCopy
-extern __typeof (xmlHashCopy) xmlHashCopy __attribute((alias("xmlHashCopy__internal_alias")));
-#else
-#ifndef xmlHashCopy
-extern __typeof (xmlHashCopy) xmlHashCopy__internal_alias __attribute((visibility("hidden")));
-#define xmlHashCopy xmlHashCopy__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashCreate
-extern __typeof (xmlHashCreate) xmlHashCreate __attribute((alias("xmlHashCreate__internal_alias")));
-#else
-#ifndef xmlHashCreate
-extern __typeof (xmlHashCreate) xmlHashCreate__internal_alias __attribute((visibility("hidden")));
-#define xmlHashCreate xmlHashCreate__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashCreateDict
-extern __typeof (xmlHashCreateDict) xmlHashCreateDict __attribute((alias("xmlHashCreateDict__internal_alias")));
-#else
-#ifndef xmlHashCreateDict
-extern __typeof (xmlHashCreateDict) xmlHashCreateDict__internal_alias __attribute((visibility("hidden")));
-#define xmlHashCreateDict xmlHashCreateDict__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashFree
-extern __typeof (xmlHashFree) xmlHashFree __attribute((alias("xmlHashFree__internal_alias")));
-#else
-#ifndef xmlHashFree
-extern __typeof (xmlHashFree) xmlHashFree__internal_alias __attribute((visibility("hidden")));
-#define xmlHashFree xmlHashFree__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashLookup
-extern __typeof (xmlHashLookup) xmlHashLookup __attribute((alias("xmlHashLookup__internal_alias")));
-#else
-#ifndef xmlHashLookup
-extern __typeof (xmlHashLookup) xmlHashLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlHashLookup xmlHashLookup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashLookup2
-extern __typeof (xmlHashLookup2) xmlHashLookup2 __attribute((alias("xmlHashLookup2__internal_alias")));
-#else
-#ifndef xmlHashLookup2
-extern __typeof (xmlHashLookup2) xmlHashLookup2__internal_alias __attribute((visibility("hidden")));
-#define xmlHashLookup2 xmlHashLookup2__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashLookup3
-extern __typeof (xmlHashLookup3) xmlHashLookup3 __attribute((alias("xmlHashLookup3__internal_alias")));
-#else
-#ifndef xmlHashLookup3
-extern __typeof (xmlHashLookup3) xmlHashLookup3__internal_alias __attribute((visibility("hidden")));
-#define xmlHashLookup3 xmlHashLookup3__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashQLookup
-extern __typeof (xmlHashQLookup) xmlHashQLookup __attribute((alias("xmlHashQLookup__internal_alias")));
-#else
-#ifndef xmlHashQLookup
-extern __typeof (xmlHashQLookup) xmlHashQLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlHashQLookup xmlHashQLookup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashQLookup2
-extern __typeof (xmlHashQLookup2) xmlHashQLookup2 __attribute((alias("xmlHashQLookup2__internal_alias")));
-#else
-#ifndef xmlHashQLookup2
-extern __typeof (xmlHashQLookup2) xmlHashQLookup2__internal_alias __attribute((visibility("hidden")));
-#define xmlHashQLookup2 xmlHashQLookup2__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashQLookup3
-extern __typeof (xmlHashQLookup3) xmlHashQLookup3 __attribute((alias("xmlHashQLookup3__internal_alias")));
-#else
-#ifndef xmlHashQLookup3
-extern __typeof (xmlHashQLookup3) xmlHashQLookup3__internal_alias __attribute((visibility("hidden")));
-#define xmlHashQLookup3 xmlHashQLookup3__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashRemoveEntry
-extern __typeof (xmlHashRemoveEntry) xmlHashRemoveEntry __attribute((alias("xmlHashRemoveEntry__internal_alias")));
-#else
-#ifndef xmlHashRemoveEntry
-extern __typeof (xmlHashRemoveEntry) xmlHashRemoveEntry__internal_alias __attribute((visibility("hidden")));
-#define xmlHashRemoveEntry xmlHashRemoveEntry__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashRemoveEntry2
-extern __typeof (xmlHashRemoveEntry2) xmlHashRemoveEntry2 __attribute((alias("xmlHashRemoveEntry2__internal_alias")));
-#else
-#ifndef xmlHashRemoveEntry2
-extern __typeof (xmlHashRemoveEntry2) xmlHashRemoveEntry2__internal_alias __attribute((visibility("hidden")));
-#define xmlHashRemoveEntry2 xmlHashRemoveEntry2__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashRemoveEntry3
-extern __typeof (xmlHashRemoveEntry3) xmlHashRemoveEntry3 __attribute((alias("xmlHashRemoveEntry3__internal_alias")));
-#else
-#ifndef xmlHashRemoveEntry3
-extern __typeof (xmlHashRemoveEntry3) xmlHashRemoveEntry3__internal_alias __attribute((visibility("hidden")));
-#define xmlHashRemoveEntry3 xmlHashRemoveEntry3__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashScan
-extern __typeof (xmlHashScan) xmlHashScan __attribute((alias("xmlHashScan__internal_alias")));
-#else
-#ifndef xmlHashScan
-extern __typeof (xmlHashScan) xmlHashScan__internal_alias __attribute((visibility("hidden")));
-#define xmlHashScan xmlHashScan__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashScan3
-extern __typeof (xmlHashScan3) xmlHashScan3 __attribute((alias("xmlHashScan3__internal_alias")));
-#else
-#ifndef xmlHashScan3
-extern __typeof (xmlHashScan3) xmlHashScan3__internal_alias __attribute((visibility("hidden")));
-#define xmlHashScan3 xmlHashScan3__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashScanFull
-extern __typeof (xmlHashScanFull) xmlHashScanFull __attribute((alias("xmlHashScanFull__internal_alias")));
-#else
-#ifndef xmlHashScanFull
-extern __typeof (xmlHashScanFull) xmlHashScanFull__internal_alias __attribute((visibility("hidden")));
-#define xmlHashScanFull xmlHashScanFull__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashScanFull3
-extern __typeof (xmlHashScanFull3) xmlHashScanFull3 __attribute((alias("xmlHashScanFull3__internal_alias")));
-#else
-#ifndef xmlHashScanFull3
-extern __typeof (xmlHashScanFull3) xmlHashScanFull3__internal_alias __attribute((visibility("hidden")));
-#define xmlHashScanFull3 xmlHashScanFull3__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashSize
-extern __typeof (xmlHashSize) xmlHashSize __attribute((alias("xmlHashSize__internal_alias")));
-#else
-#ifndef xmlHashSize
-extern __typeof (xmlHashSize) xmlHashSize__internal_alias __attribute((visibility("hidden")));
-#define xmlHashSize xmlHashSize__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashUpdateEntry
-extern __typeof (xmlHashUpdateEntry) xmlHashUpdateEntry __attribute((alias("xmlHashUpdateEntry__internal_alias")));
-#else
-#ifndef xmlHashUpdateEntry
-extern __typeof (xmlHashUpdateEntry) xmlHashUpdateEntry__internal_alias __attribute((visibility("hidden")));
-#define xmlHashUpdateEntry xmlHashUpdateEntry__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashUpdateEntry2
-extern __typeof (xmlHashUpdateEntry2) xmlHashUpdateEntry2 __attribute((alias("xmlHashUpdateEntry2__internal_alias")));
-#else
-#ifndef xmlHashUpdateEntry2
-extern __typeof (xmlHashUpdateEntry2) xmlHashUpdateEntry2__internal_alias __attribute((visibility("hidden")));
-#define xmlHashUpdateEntry2 xmlHashUpdateEntry2__internal_alias
-#endif
-#endif
-
-#ifdef bottom_hash
-#undef xmlHashUpdateEntry3
-extern __typeof (xmlHashUpdateEntry3) xmlHashUpdateEntry3 __attribute((alias("xmlHashUpdateEntry3__internal_alias")));
-#else
-#ifndef xmlHashUpdateEntry3
-extern __typeof (xmlHashUpdateEntry3) xmlHashUpdateEntry3__internal_alias __attribute((visibility("hidden")));
-#define xmlHashUpdateEntry3 xmlHashUpdateEntry3__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOFTPClose
-extern __typeof (xmlIOFTPClose) xmlIOFTPClose __attribute((alias("xmlIOFTPClose__internal_alias")));
-#else
-#ifndef xmlIOFTPClose
-extern __typeof (xmlIOFTPClose) xmlIOFTPClose__internal_alias __attribute((visibility("hidden")));
-#define xmlIOFTPClose xmlIOFTPClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOFTPMatch
-extern __typeof (xmlIOFTPMatch) xmlIOFTPMatch __attribute((alias("xmlIOFTPMatch__internal_alias")));
-#else
-#ifndef xmlIOFTPMatch
-extern __typeof (xmlIOFTPMatch) xmlIOFTPMatch__internal_alias __attribute((visibility("hidden")));
-#define xmlIOFTPMatch xmlIOFTPMatch__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOFTPOpen
-extern __typeof (xmlIOFTPOpen) xmlIOFTPOpen __attribute((alias("xmlIOFTPOpen__internal_alias")));
-#else
-#ifndef xmlIOFTPOpen
-extern __typeof (xmlIOFTPOpen) xmlIOFTPOpen__internal_alias __attribute((visibility("hidden")));
-#define xmlIOFTPOpen xmlIOFTPOpen__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOFTPRead
-extern __typeof (xmlIOFTPRead) xmlIOFTPRead __attribute((alias("xmlIOFTPRead__internal_alias")));
-#else
-#ifndef xmlIOFTPRead
-extern __typeof (xmlIOFTPRead) xmlIOFTPRead__internal_alias __attribute((visibility("hidden")));
-#define xmlIOFTPRead xmlIOFTPRead__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOHTTPClose
-extern __typeof (xmlIOHTTPClose) xmlIOHTTPClose __attribute((alias("xmlIOHTTPClose__internal_alias")));
-#else
-#ifndef xmlIOHTTPClose
-extern __typeof (xmlIOHTTPClose) xmlIOHTTPClose__internal_alias __attribute((visibility("hidden")));
-#define xmlIOHTTPClose xmlIOHTTPClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOHTTPMatch
-extern __typeof (xmlIOHTTPMatch) xmlIOHTTPMatch __attribute((alias("xmlIOHTTPMatch__internal_alias")));
-#else
-#ifndef xmlIOHTTPMatch
-extern __typeof (xmlIOHTTPMatch) xmlIOHTTPMatch__internal_alias __attribute((visibility("hidden")));
-#define xmlIOHTTPMatch xmlIOHTTPMatch__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOHTTPOpen
-extern __typeof (xmlIOHTTPOpen) xmlIOHTTPOpen __attribute((alias("xmlIOHTTPOpen__internal_alias")));
-#else
-#ifndef xmlIOHTTPOpen
-extern __typeof (xmlIOHTTPOpen) xmlIOHTTPOpen__internal_alias __attribute((visibility("hidden")));
-#define xmlIOHTTPOpen xmlIOHTTPOpen__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOHTTPOpenW
-extern __typeof (xmlIOHTTPOpenW) xmlIOHTTPOpenW __attribute((alias("xmlIOHTTPOpenW__internal_alias")));
-#else
-#ifndef xmlIOHTTPOpenW
-extern __typeof (xmlIOHTTPOpenW) xmlIOHTTPOpenW__internal_alias __attribute((visibility("hidden")));
-#define xmlIOHTTPOpenW xmlIOHTTPOpenW__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlIOHTTPRead
-extern __typeof (xmlIOHTTPRead) xmlIOHTTPRead __attribute((alias("xmlIOHTTPRead__internal_alias")));
-#else
-#ifndef xmlIOHTTPRead
-extern __typeof (xmlIOHTTPRead) xmlIOHTTPRead__internal_alias __attribute((visibility("hidden")));
-#define xmlIOHTTPRead xmlIOHTTPRead__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_parser
-#undef xmlIOParseDTD
-extern __typeof (xmlIOParseDTD) xmlIOParseDTD __attribute((alias("xmlIOParseDTD__internal_alias")));
-#else
-#ifndef xmlIOParseDTD
-extern __typeof (xmlIOParseDTD) xmlIOParseDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlIOParseDTD xmlIOParseDTD__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlInitCharEncodingHandlers
-extern __typeof (xmlInitCharEncodingHandlers) xmlInitCharEncodingHandlers __attribute((alias("xmlInitCharEncodingHandlers__internal_alias")));
-#else
-#ifndef xmlInitCharEncodingHandlers
-extern __typeof (xmlInitCharEncodingHandlers) xmlInitCharEncodingHandlers__internal_alias __attribute((visibility("hidden")));
-#define xmlInitCharEncodingHandlers xmlInitCharEncodingHandlers__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlInitGlobals
-extern __typeof (xmlInitGlobals) xmlInitGlobals __attribute((alias("xmlInitGlobals__internal_alias")));
-#else
-#ifndef xmlInitGlobals
-extern __typeof (xmlInitGlobals) xmlInitGlobals__internal_alias __attribute((visibility("hidden")));
-#define xmlInitGlobals xmlInitGlobals__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlInitMemory
-extern __typeof (xmlInitMemory) xmlInitMemory __attribute((alias("xmlInitMemory__internal_alias")));
-#else
-#ifndef xmlInitMemory
-extern __typeof (xmlInitMemory) xmlInitMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlInitMemory xmlInitMemory__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlInitNodeInfoSeq
-extern __typeof (xmlInitNodeInfoSeq) xmlInitNodeInfoSeq __attribute((alias("xmlInitNodeInfoSeq__internal_alias")));
-#else
-#ifndef xmlInitNodeInfoSeq
-extern __typeof (xmlInitNodeInfoSeq) xmlInitNodeInfoSeq__internal_alias __attribute((visibility("hidden")));
-#define xmlInitNodeInfoSeq xmlInitNodeInfoSeq__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlInitParser
-extern __typeof (xmlInitParser) xmlInitParser __attribute((alias("xmlInitParser__internal_alias")));
-#else
-#ifndef xmlInitParser
-extern __typeof (xmlInitParser) xmlInitParser__internal_alias __attribute((visibility("hidden")));
-#define xmlInitParser xmlInitParser__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlInitParserCtxt
-extern __typeof (xmlInitParserCtxt) xmlInitParserCtxt __attribute((alias("xmlInitParserCtxt__internal_alias")));
-#else
-#ifndef xmlInitParserCtxt
-extern __typeof (xmlInitParserCtxt) xmlInitParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlInitParserCtxt xmlInitParserCtxt__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlInitThreads
-extern __typeof (xmlInitThreads) xmlInitThreads __attribute((alias("xmlInitThreads__internal_alias")));
-#else
-#ifndef xmlInitThreads
-extern __typeof (xmlInitThreads) xmlInitThreads__internal_alias __attribute((visibility("hidden")));
-#define xmlInitThreads xmlInitThreads__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlInitializeCatalog
-extern __typeof (xmlInitializeCatalog) xmlInitializeCatalog __attribute((alias("xmlInitializeCatalog__internal_alias")));
-#else
-#ifndef xmlInitializeCatalog
-extern __typeof (xmlInitializeCatalog) xmlInitializeCatalog__internal_alias __attribute((visibility("hidden")));
-#define xmlInitializeCatalog xmlInitializeCatalog__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_dict
-#undef xmlInitializeDict
-extern __typeof (xmlInitializeDict) xmlInitializeDict __attribute((alias("xmlInitializeDict__internal_alias")));
-#else
-#ifndef xmlInitializeDict
-extern __typeof (xmlInitializeDict) xmlInitializeDict__internal_alias __attribute((visibility("hidden")));
-#define xmlInitializeDict xmlInitializeDict__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlInitializeGlobalState
-extern __typeof (xmlInitializeGlobalState) xmlInitializeGlobalState __attribute((alias("xmlInitializeGlobalState__internal_alias")));
-#else
-#ifndef xmlInitializeGlobalState
-extern __typeof (xmlInitializeGlobalState) xmlInitializeGlobalState__internal_alias __attribute((visibility("hidden")));
-#define xmlInitializeGlobalState xmlInitializeGlobalState__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlInitializePredefinedEntities
-extern __typeof (xmlInitializePredefinedEntities) xmlInitializePredefinedEntities __attribute((alias("xmlInitializePredefinedEntities__internal_alias")));
-#else
-#ifndef xmlInitializePredefinedEntities
-extern __typeof (xmlInitializePredefinedEntities) xmlInitializePredefinedEntities__internal_alias __attribute((visibility("hidden")));
-#define xmlInitializePredefinedEntities xmlInitializePredefinedEntities__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlIsBaseChar
-extern __typeof (xmlIsBaseChar) xmlIsBaseChar __attribute((alias("xmlIsBaseChar__internal_alias")));
-#else
-#ifndef xmlIsBaseChar
-extern __typeof (xmlIsBaseChar) xmlIsBaseChar__internal_alias __attribute((visibility("hidden")));
-#define xmlIsBaseChar xmlIsBaseChar__internal_alias
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlIsBlank
-extern __typeof (xmlIsBlank) xmlIsBlank __attribute((alias("xmlIsBlank__internal_alias")));
-#else
-#ifndef xmlIsBlank
-extern __typeof (xmlIsBlank) xmlIsBlank__internal_alias __attribute((visibility("hidden")));
-#define xmlIsBlank xmlIsBlank__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlIsBlankNode
-extern __typeof (xmlIsBlankNode) xmlIsBlankNode __attribute((alias("xmlIsBlankNode__internal_alias")));
-#else
-#ifndef xmlIsBlankNode
-extern __typeof (xmlIsBlankNode) xmlIsBlankNode__internal_alias __attribute((visibility("hidden")));
-#define xmlIsBlankNode xmlIsBlankNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlIsChar
-extern __typeof (xmlIsChar) xmlIsChar __attribute((alias("xmlIsChar__internal_alias")));
-#else
-#ifndef xmlIsChar
-extern __typeof (xmlIsChar) xmlIsChar__internal_alias __attribute((visibility("hidden")));
-#define xmlIsChar xmlIsChar__internal_alias
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlIsCombining
-extern __typeof (xmlIsCombining) xmlIsCombining __attribute((alias("xmlIsCombining__internal_alias")));
-#else
-#ifndef xmlIsCombining
-extern __typeof (xmlIsCombining) xmlIsCombining__internal_alias __attribute((visibility("hidden")));
-#define xmlIsCombining xmlIsCombining__internal_alias
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlIsDigit
-extern __typeof (xmlIsDigit) xmlIsDigit __attribute((alias("xmlIsDigit__internal_alias")));
-#else
-#ifndef xmlIsDigit
-extern __typeof (xmlIsDigit) xmlIsDigit__internal_alias __attribute((visibility("hidden")));
-#define xmlIsDigit xmlIsDigit__internal_alias
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlIsExtender
-extern __typeof (xmlIsExtender) xmlIsExtender __attribute((alias("xmlIsExtender__internal_alias")));
-#else
-#ifndef xmlIsExtender
-extern __typeof (xmlIsExtender) xmlIsExtender__internal_alias __attribute((visibility("hidden")));
-#define xmlIsExtender xmlIsExtender__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlIsID
-extern __typeof (xmlIsID) xmlIsID __attribute((alias("xmlIsID__internal_alias")));
-#else
-#ifndef xmlIsID
-extern __typeof (xmlIsID) xmlIsID__internal_alias __attribute((visibility("hidden")));
-#define xmlIsID xmlIsID__internal_alias
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlIsIdeographic
-extern __typeof (xmlIsIdeographic) xmlIsIdeographic __attribute((alias("xmlIsIdeographic__internal_alias")));
-#else
-#ifndef xmlIsIdeographic
-extern __typeof (xmlIsIdeographic) xmlIsIdeographic__internal_alias __attribute((visibility("hidden")));
-#define xmlIsIdeographic xmlIsIdeographic__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlIsLetter
-extern __typeof (xmlIsLetter) xmlIsLetter __attribute((alias("xmlIsLetter__internal_alias")));
-#else
-#ifndef xmlIsLetter
-extern __typeof (xmlIsLetter) xmlIsLetter__internal_alias __attribute((visibility("hidden")));
-#define xmlIsLetter xmlIsLetter__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlIsMainThread
-extern __typeof (xmlIsMainThread) xmlIsMainThread __attribute((alias("xmlIsMainThread__internal_alias")));
-#else
-#ifndef xmlIsMainThread
-extern __typeof (xmlIsMainThread) xmlIsMainThread__internal_alias __attribute((visibility("hidden")));
-#define xmlIsMainThread xmlIsMainThread__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlIsMixedElement
-extern __typeof (xmlIsMixedElement) xmlIsMixedElement __attribute((alias("xmlIsMixedElement__internal_alias")));
-#else
-#ifndef xmlIsMixedElement
-extern __typeof (xmlIsMixedElement) xmlIsMixedElement__internal_alias __attribute((visibility("hidden")));
-#define xmlIsMixedElement xmlIsMixedElement__internal_alias
-#endif
-#endif
-
-#ifdef bottom_chvalid
-#undef xmlIsPubidChar
-extern __typeof (xmlIsPubidChar) xmlIsPubidChar __attribute((alias("xmlIsPubidChar__internal_alias")));
-#else
-#ifndef xmlIsPubidChar
-extern __typeof (xmlIsPubidChar) xmlIsPubidChar__internal_alias __attribute((visibility("hidden")));
-#define xmlIsPubidChar xmlIsPubidChar__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlIsRef
-extern __typeof (xmlIsRef) xmlIsRef __attribute((alias("xmlIsRef__internal_alias")));
-#else
-#ifndef xmlIsRef
-extern __typeof (xmlIsRef) xmlIsRef__internal_alias __attribute((visibility("hidden")));
-#define xmlIsRef xmlIsRef__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlsave
-#undef xmlIsXHTML
-extern __typeof (xmlIsXHTML) xmlIsXHTML __attribute((alias("xmlIsXHTML__internal_alias")));
-#else
-#ifndef xmlIsXHTML
-extern __typeof (xmlIsXHTML) xmlIsXHTML__internal_alias __attribute((visibility("hidden")));
-#define xmlIsXHTML xmlIsXHTML__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlKeepBlanksDefault
-extern __typeof (xmlKeepBlanksDefault) xmlKeepBlanksDefault __attribute((alias("xmlKeepBlanksDefault__internal_alias")));
-#else
-#ifndef xmlKeepBlanksDefault
-extern __typeof (xmlKeepBlanksDefault) xmlKeepBlanksDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlKeepBlanksDefault xmlKeepBlanksDefault__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlLastElementChild
-extern __typeof (xmlLastElementChild) xmlLastElementChild __attribute((alias("xmlLastElementChild__internal_alias")));
-#else
-#ifndef xmlLastElementChild
-extern __typeof (xmlLastElementChild) xmlLastElementChild__internal_alias __attribute((visibility("hidden")));
-#define xmlLastElementChild xmlLastElementChild__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlLineNumbersDefault
-extern __typeof (xmlLineNumbersDefault) xmlLineNumbersDefault __attribute((alias("xmlLineNumbersDefault__internal_alias")));
-#else
-#ifndef xmlLineNumbersDefault
-extern __typeof (xmlLineNumbersDefault) xmlLineNumbersDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlLineNumbersDefault xmlLineNumbersDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlLinkGetData
-extern __typeof (xmlLinkGetData) xmlLinkGetData __attribute((alias("xmlLinkGetData__internal_alias")));
-#else
-#ifndef xmlLinkGetData
-extern __typeof (xmlLinkGetData) xmlLinkGetData__internal_alias __attribute((visibility("hidden")));
-#define xmlLinkGetData xmlLinkGetData__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListAppend
-extern __typeof (xmlListAppend) xmlListAppend __attribute((alias("xmlListAppend__internal_alias")));
-#else
-#ifndef xmlListAppend
-extern __typeof (xmlListAppend) xmlListAppend__internal_alias __attribute((visibility("hidden")));
-#define xmlListAppend xmlListAppend__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListClear
-extern __typeof (xmlListClear) xmlListClear __attribute((alias("xmlListClear__internal_alias")));
-#else
-#ifndef xmlListClear
-extern __typeof (xmlListClear) xmlListClear__internal_alias __attribute((visibility("hidden")));
-#define xmlListClear xmlListClear__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListCopy
-extern __typeof (xmlListCopy) xmlListCopy __attribute((alias("xmlListCopy__internal_alias")));
-#else
-#ifndef xmlListCopy
-extern __typeof (xmlListCopy) xmlListCopy__internal_alias __attribute((visibility("hidden")));
-#define xmlListCopy xmlListCopy__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListCreate
-extern __typeof (xmlListCreate) xmlListCreate __attribute((alias("xmlListCreate__internal_alias")));
-#else
-#ifndef xmlListCreate
-extern __typeof (xmlListCreate) xmlListCreate__internal_alias __attribute((visibility("hidden")));
-#define xmlListCreate xmlListCreate__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListDelete
-extern __typeof (xmlListDelete) xmlListDelete __attribute((alias("xmlListDelete__internal_alias")));
-#else
-#ifndef xmlListDelete
-extern __typeof (xmlListDelete) xmlListDelete__internal_alias __attribute((visibility("hidden")));
-#define xmlListDelete xmlListDelete__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListDup
-extern __typeof (xmlListDup) xmlListDup __attribute((alias("xmlListDup__internal_alias")));
-#else
-#ifndef xmlListDup
-extern __typeof (xmlListDup) xmlListDup__internal_alias __attribute((visibility("hidden")));
-#define xmlListDup xmlListDup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListEmpty
-extern __typeof (xmlListEmpty) xmlListEmpty __attribute((alias("xmlListEmpty__internal_alias")));
-#else
-#ifndef xmlListEmpty
-extern __typeof (xmlListEmpty) xmlListEmpty__internal_alias __attribute((visibility("hidden")));
-#define xmlListEmpty xmlListEmpty__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListEnd
-extern __typeof (xmlListEnd) xmlListEnd __attribute((alias("xmlListEnd__internal_alias")));
-#else
-#ifndef xmlListEnd
-extern __typeof (xmlListEnd) xmlListEnd__internal_alias __attribute((visibility("hidden")));
-#define xmlListEnd xmlListEnd__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListFront
-extern __typeof (xmlListFront) xmlListFront __attribute((alias("xmlListFront__internal_alias")));
-#else
-#ifndef xmlListFront
-extern __typeof (xmlListFront) xmlListFront__internal_alias __attribute((visibility("hidden")));
-#define xmlListFront xmlListFront__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListInsert
-extern __typeof (xmlListInsert) xmlListInsert __attribute((alias("xmlListInsert__internal_alias")));
-#else
-#ifndef xmlListInsert
-extern __typeof (xmlListInsert) xmlListInsert__internal_alias __attribute((visibility("hidden")));
-#define xmlListInsert xmlListInsert__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListMerge
-extern __typeof (xmlListMerge) xmlListMerge __attribute((alias("xmlListMerge__internal_alias")));
-#else
-#ifndef xmlListMerge
-extern __typeof (xmlListMerge) xmlListMerge__internal_alias __attribute((visibility("hidden")));
-#define xmlListMerge xmlListMerge__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListPopBack
-extern __typeof (xmlListPopBack) xmlListPopBack __attribute((alias("xmlListPopBack__internal_alias")));
-#else
-#ifndef xmlListPopBack
-extern __typeof (xmlListPopBack) xmlListPopBack__internal_alias __attribute((visibility("hidden")));
-#define xmlListPopBack xmlListPopBack__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListPopFront
-extern __typeof (xmlListPopFront) xmlListPopFront __attribute((alias("xmlListPopFront__internal_alias")));
-#else
-#ifndef xmlListPopFront
-extern __typeof (xmlListPopFront) xmlListPopFront__internal_alias __attribute((visibility("hidden")));
-#define xmlListPopFront xmlListPopFront__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListPushBack
-extern __typeof (xmlListPushBack) xmlListPushBack __attribute((alias("xmlListPushBack__internal_alias")));
-#else
-#ifndef xmlListPushBack
-extern __typeof (xmlListPushBack) xmlListPushBack__internal_alias __attribute((visibility("hidden")));
-#define xmlListPushBack xmlListPushBack__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListPushFront
-extern __typeof (xmlListPushFront) xmlListPushFront __attribute((alias("xmlListPushFront__internal_alias")));
-#else
-#ifndef xmlListPushFront
-extern __typeof (xmlListPushFront) xmlListPushFront__internal_alias __attribute((visibility("hidden")));
-#define xmlListPushFront xmlListPushFront__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListRemoveAll
-extern __typeof (xmlListRemoveAll) xmlListRemoveAll __attribute((alias("xmlListRemoveAll__internal_alias")));
-#else
-#ifndef xmlListRemoveAll
-extern __typeof (xmlListRemoveAll) xmlListRemoveAll__internal_alias __attribute((visibility("hidden")));
-#define xmlListRemoveAll xmlListRemoveAll__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListRemoveFirst
-extern __typeof (xmlListRemoveFirst) xmlListRemoveFirst __attribute((alias("xmlListRemoveFirst__internal_alias")));
-#else
-#ifndef xmlListRemoveFirst
-extern __typeof (xmlListRemoveFirst) xmlListRemoveFirst__internal_alias __attribute((visibility("hidden")));
-#define xmlListRemoveFirst xmlListRemoveFirst__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListRemoveLast
-extern __typeof (xmlListRemoveLast) xmlListRemoveLast __attribute((alias("xmlListRemoveLast__internal_alias")));
-#else
-#ifndef xmlListRemoveLast
-extern __typeof (xmlListRemoveLast) xmlListRemoveLast__internal_alias __attribute((visibility("hidden")));
-#define xmlListRemoveLast xmlListRemoveLast__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListReverse
-extern __typeof (xmlListReverse) xmlListReverse __attribute((alias("xmlListReverse__internal_alias")));
-#else
-#ifndef xmlListReverse
-extern __typeof (xmlListReverse) xmlListReverse__internal_alias __attribute((visibility("hidden")));
-#define xmlListReverse xmlListReverse__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListReverseSearch
-extern __typeof (xmlListReverseSearch) xmlListReverseSearch __attribute((alias("xmlListReverseSearch__internal_alias")));
-#else
-#ifndef xmlListReverseSearch
-extern __typeof (xmlListReverseSearch) xmlListReverseSearch__internal_alias __attribute((visibility("hidden")));
-#define xmlListReverseSearch xmlListReverseSearch__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListReverseWalk
-extern __typeof (xmlListReverseWalk) xmlListReverseWalk __attribute((alias("xmlListReverseWalk__internal_alias")));
-#else
-#ifndef xmlListReverseWalk
-extern __typeof (xmlListReverseWalk) xmlListReverseWalk__internal_alias __attribute((visibility("hidden")));
-#define xmlListReverseWalk xmlListReverseWalk__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListSearch
-extern __typeof (xmlListSearch) xmlListSearch __attribute((alias("xmlListSearch__internal_alias")));
-#else
-#ifndef xmlListSearch
-extern __typeof (xmlListSearch) xmlListSearch__internal_alias __attribute((visibility("hidden")));
-#define xmlListSearch xmlListSearch__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListSize
-extern __typeof (xmlListSize) xmlListSize __attribute((alias("xmlListSize__internal_alias")));
-#else
-#ifndef xmlListSize
-extern __typeof (xmlListSize) xmlListSize__internal_alias __attribute((visibility("hidden")));
-#define xmlListSize xmlListSize__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListSort
-extern __typeof (xmlListSort) xmlListSort __attribute((alias("xmlListSort__internal_alias")));
-#else
-#ifndef xmlListSort
-extern __typeof (xmlListSort) xmlListSort__internal_alias __attribute((visibility("hidden")));
-#define xmlListSort xmlListSort__internal_alias
-#endif
-#endif
-
-#ifdef bottom_list
-#undef xmlListWalk
-extern __typeof (xmlListWalk) xmlListWalk __attribute((alias("xmlListWalk__internal_alias")));
-#else
-#ifndef xmlListWalk
-extern __typeof (xmlListWalk) xmlListWalk__internal_alias __attribute((visibility("hidden")));
-#define xmlListWalk xmlListWalk__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlLoadACatalog
-extern __typeof (xmlLoadACatalog) xmlLoadACatalog __attribute((alias("xmlLoadACatalog__internal_alias")));
-#else
-#ifndef xmlLoadACatalog
-extern __typeof (xmlLoadACatalog) xmlLoadACatalog__internal_alias __attribute((visibility("hidden")));
-#define xmlLoadACatalog xmlLoadACatalog__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlLoadCatalog
-extern __typeof (xmlLoadCatalog) xmlLoadCatalog __attribute((alias("xmlLoadCatalog__internal_alias")));
-#else
-#ifndef xmlLoadCatalog
-extern __typeof (xmlLoadCatalog) xmlLoadCatalog__internal_alias __attribute((visibility("hidden")));
-#define xmlLoadCatalog xmlLoadCatalog__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlLoadCatalogs
-extern __typeof (xmlLoadCatalogs) xmlLoadCatalogs __attribute((alias("xmlLoadCatalogs__internal_alias")));
-#else
-#ifndef xmlLoadCatalogs
-extern __typeof (xmlLoadCatalogs) xmlLoadCatalogs__internal_alias __attribute((visibility("hidden")));
-#define xmlLoadCatalogs xmlLoadCatalogs__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlLoadExternalEntity
-extern __typeof (xmlLoadExternalEntity) xmlLoadExternalEntity __attribute((alias("xmlLoadExternalEntity__internal_alias")));
-#else
-#ifndef xmlLoadExternalEntity
-extern __typeof (xmlLoadExternalEntity) xmlLoadExternalEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlLoadExternalEntity xmlLoadExternalEntity__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlLoadSGMLSuperCatalog
-extern __typeof (xmlLoadSGMLSuperCatalog) xmlLoadSGMLSuperCatalog __attribute((alias("xmlLoadSGMLSuperCatalog__internal_alias")));
-#else
-#ifndef xmlLoadSGMLSuperCatalog
-extern __typeof (xmlLoadSGMLSuperCatalog) xmlLoadSGMLSuperCatalog__internal_alias __attribute((visibility("hidden")));
-#define xmlLoadSGMLSuperCatalog xmlLoadSGMLSuperCatalog__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlLockLibrary
-extern __typeof (xmlLockLibrary) xmlLockLibrary __attribute((alias("xmlLockLibrary__internal_alias")));
-#else
-#ifndef xmlLockLibrary
-extern __typeof (xmlLockLibrary) xmlLockLibrary__internal_alias __attribute((visibility("hidden")));
-#define xmlLockLibrary xmlLockLibrary__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlLsCountNode
-extern __typeof (xmlLsCountNode) xmlLsCountNode __attribute((alias("xmlLsCountNode__internal_alias")));
-#else
-#ifndef xmlLsCountNode
-extern __typeof (xmlLsCountNode) xmlLsCountNode__internal_alias __attribute((visibility("hidden")));
-#define xmlLsCountNode xmlLsCountNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlLsOneNode
-extern __typeof (xmlLsOneNode) xmlLsOneNode __attribute((alias("xmlLsOneNode__internal_alias")));
-#else
-#ifndef xmlLsOneNode
-extern __typeof (xmlLsOneNode) xmlLsOneNode__internal_alias __attribute((visibility("hidden")));
-#define xmlLsOneNode xmlLsOneNode__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMallocAtomicLoc
-extern __typeof (xmlMallocAtomicLoc) xmlMallocAtomicLoc __attribute((alias("xmlMallocAtomicLoc__internal_alias")));
-#else
-#ifndef xmlMallocAtomicLoc
-extern __typeof (xmlMallocAtomicLoc) xmlMallocAtomicLoc__internal_alias __attribute((visibility("hidden")));
-#define xmlMallocAtomicLoc xmlMallocAtomicLoc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMallocLoc
-extern __typeof (xmlMallocLoc) xmlMallocLoc __attribute((alias("xmlMallocLoc__internal_alias")));
-#else
-#ifndef xmlMallocLoc
-extern __typeof (xmlMallocLoc) xmlMallocLoc__internal_alias __attribute((visibility("hidden")));
-#define xmlMallocLoc xmlMallocLoc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemBlocks
-extern __typeof (xmlMemBlocks) xmlMemBlocks __attribute((alias("xmlMemBlocks__internal_alias")));
-#else
-#ifndef xmlMemBlocks
-extern __typeof (xmlMemBlocks) xmlMemBlocks__internal_alias __attribute((visibility("hidden")));
-#define xmlMemBlocks xmlMemBlocks__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemDisplay
-extern __typeof (xmlMemDisplay) xmlMemDisplay __attribute((alias("xmlMemDisplay__internal_alias")));
-#else
-#ifndef xmlMemDisplay
-extern __typeof (xmlMemDisplay) xmlMemDisplay__internal_alias __attribute((visibility("hidden")));
-#define xmlMemDisplay xmlMemDisplay__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemDisplayLast
-extern __typeof (xmlMemDisplayLast) xmlMemDisplayLast __attribute((alias("xmlMemDisplayLast__internal_alias")));
-#else
-#ifndef xmlMemDisplayLast
-extern __typeof (xmlMemDisplayLast) xmlMemDisplayLast__internal_alias __attribute((visibility("hidden")));
-#define xmlMemDisplayLast xmlMemDisplayLast__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemFree
-extern __typeof (xmlMemFree) xmlMemFree __attribute((alias("xmlMemFree__internal_alias")));
-#else
-#ifndef xmlMemFree
-extern __typeof (xmlMemFree) xmlMemFree__internal_alias __attribute((visibility("hidden")));
-#define xmlMemFree xmlMemFree__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemGet
-extern __typeof (xmlMemGet) xmlMemGet __attribute((alias("xmlMemGet__internal_alias")));
-#else
-#ifndef xmlMemGet
-extern __typeof (xmlMemGet) xmlMemGet__internal_alias __attribute((visibility("hidden")));
-#define xmlMemGet xmlMemGet__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemMalloc
-extern __typeof (xmlMemMalloc) xmlMemMalloc __attribute((alias("xmlMemMalloc__internal_alias")));
-#else
-#ifndef xmlMemMalloc
-extern __typeof (xmlMemMalloc) xmlMemMalloc__internal_alias __attribute((visibility("hidden")));
-#define xmlMemMalloc xmlMemMalloc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemRealloc
-extern __typeof (xmlMemRealloc) xmlMemRealloc __attribute((alias("xmlMemRealloc__internal_alias")));
-#else
-#ifndef xmlMemRealloc
-extern __typeof (xmlMemRealloc) xmlMemRealloc__internal_alias __attribute((visibility("hidden")));
-#define xmlMemRealloc xmlMemRealloc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemSetup
-extern __typeof (xmlMemSetup) xmlMemSetup __attribute((alias("xmlMemSetup__internal_alias")));
-#else
-#ifndef xmlMemSetup
-extern __typeof (xmlMemSetup) xmlMemSetup__internal_alias __attribute((visibility("hidden")));
-#define xmlMemSetup xmlMemSetup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemShow
-extern __typeof (xmlMemShow) xmlMemShow __attribute((alias("xmlMemShow__internal_alias")));
-#else
-#ifndef xmlMemShow
-extern __typeof (xmlMemShow) xmlMemShow__internal_alias __attribute((visibility("hidden")));
-#define xmlMemShow xmlMemShow__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemStrdupLoc
-extern __typeof (xmlMemStrdupLoc) xmlMemStrdupLoc __attribute((alias("xmlMemStrdupLoc__internal_alias")));
-#else
-#ifndef xmlMemStrdupLoc
-extern __typeof (xmlMemStrdupLoc) xmlMemStrdupLoc__internal_alias __attribute((visibility("hidden")));
-#define xmlMemStrdupLoc xmlMemStrdupLoc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemUsed
-extern __typeof (xmlMemUsed) xmlMemUsed __attribute((alias("xmlMemUsed__internal_alias")));
-#else
-#ifndef xmlMemUsed
-extern __typeof (xmlMemUsed) xmlMemUsed__internal_alias __attribute((visibility("hidden")));
-#define xmlMemUsed xmlMemUsed__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemoryDump
-extern __typeof (xmlMemoryDump) xmlMemoryDump __attribute((alias("xmlMemoryDump__internal_alias")));
-#else
-#ifndef xmlMemoryDump
-extern __typeof (xmlMemoryDump) xmlMemoryDump__internal_alias __attribute((visibility("hidden")));
-#define xmlMemoryDump xmlMemoryDump__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlMemoryStrdup
-extern __typeof (xmlMemoryStrdup) xmlMemoryStrdup __attribute((alias("xmlMemoryStrdup__internal_alias")));
-#else
-#ifndef xmlMemoryStrdup
-extern __typeof (xmlMemoryStrdup) xmlMemoryStrdup__internal_alias __attribute((visibility("hidden")));
-#define xmlMemoryStrdup xmlMemoryStrdup__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_MODULES_ENABLED)
-#ifdef bottom_xmlmodule
-#undef xmlModuleClose
-extern __typeof (xmlModuleClose) xmlModuleClose __attribute((alias("xmlModuleClose__internal_alias")));
-#else
-#ifndef xmlModuleClose
-extern __typeof (xmlModuleClose) xmlModuleClose__internal_alias __attribute((visibility("hidden")));
-#define xmlModuleClose xmlModuleClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_MODULES_ENABLED)
-#ifdef bottom_xmlmodule
-#undef xmlModuleFree
-extern __typeof (xmlModuleFree) xmlModuleFree __attribute((alias("xmlModuleFree__internal_alias")));
-#else
-#ifndef xmlModuleFree
-extern __typeof (xmlModuleFree) xmlModuleFree__internal_alias __attribute((visibility("hidden")));
-#define xmlModuleFree xmlModuleFree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_MODULES_ENABLED)
-#ifdef bottom_xmlmodule
-#undef xmlModuleOpen
-extern __typeof (xmlModuleOpen) xmlModuleOpen __attribute((alias("xmlModuleOpen__internal_alias")));
-#else
-#ifndef xmlModuleOpen
-extern __typeof (xmlModuleOpen) xmlModuleOpen__internal_alias __attribute((visibility("hidden")));
-#define xmlModuleOpen xmlModuleOpen__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_MODULES_ENABLED)
-#ifdef bottom_xmlmodule
-#undef xmlModuleSymbol
-extern __typeof (xmlModuleSymbol) xmlModuleSymbol __attribute((alias("xmlModuleSymbol__internal_alias")));
-#else
-#ifndef xmlModuleSymbol
-extern __typeof (xmlModuleSymbol) xmlModuleSymbol__internal_alias __attribute((visibility("hidden")));
-#define xmlModuleSymbol xmlModuleSymbol__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlMutexLock
-extern __typeof (xmlMutexLock) xmlMutexLock __attribute((alias("xmlMutexLock__internal_alias")));
-#else
-#ifndef xmlMutexLock
-extern __typeof (xmlMutexLock) xmlMutexLock__internal_alias __attribute((visibility("hidden")));
-#define xmlMutexLock xmlMutexLock__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlMutexUnlock
-extern __typeof (xmlMutexUnlock) xmlMutexUnlock __attribute((alias("xmlMutexUnlock__internal_alias")));
-#else
-#ifndef xmlMutexUnlock
-extern __typeof (xmlMutexUnlock) xmlMutexUnlock__internal_alias __attribute((visibility("hidden")));
-#define xmlMutexUnlock xmlMutexUnlock__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlNamespaceParseNCName
-extern __typeof (xmlNamespaceParseNCName) xmlNamespaceParseNCName __attribute((alias("xmlNamespaceParseNCName__internal_alias")));
-#else
-#ifndef xmlNamespaceParseNCName
-extern __typeof (xmlNamespaceParseNCName) xmlNamespaceParseNCName__internal_alias __attribute((visibility("hidden")));
-#define xmlNamespaceParseNCName xmlNamespaceParseNCName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlNamespaceParseNSDef
-extern __typeof (xmlNamespaceParseNSDef) xmlNamespaceParseNSDef __attribute((alias("xmlNamespaceParseNSDef__internal_alias")));
-#else
-#ifndef xmlNamespaceParseNSDef
-extern __typeof (xmlNamespaceParseNSDef) xmlNamespaceParseNSDef__internal_alias __attribute((visibility("hidden")));
-#define xmlNamespaceParseNSDef xmlNamespaceParseNSDef__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlNamespaceParseQName
-extern __typeof (xmlNamespaceParseQName) xmlNamespaceParseQName __attribute((alias("xmlNamespaceParseQName__internal_alias")));
-#else
-#ifndef xmlNamespaceParseQName
-extern __typeof (xmlNamespaceParseQName) xmlNamespaceParseQName__internal_alias __attribute((visibility("hidden")));
-#define xmlNamespaceParseQName xmlNamespaceParseQName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPCheckResponse
-extern __typeof (xmlNanoFTPCheckResponse) xmlNanoFTPCheckResponse __attribute((alias("xmlNanoFTPCheckResponse__internal_alias")));
-#else
-#ifndef xmlNanoFTPCheckResponse
-extern __typeof (xmlNanoFTPCheckResponse) xmlNanoFTPCheckResponse__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPCheckResponse xmlNanoFTPCheckResponse__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPCleanup
-extern __typeof (xmlNanoFTPCleanup) xmlNanoFTPCleanup __attribute((alias("xmlNanoFTPCleanup__internal_alias")));
-#else
-#ifndef xmlNanoFTPCleanup
-extern __typeof (xmlNanoFTPCleanup) xmlNanoFTPCleanup__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPCleanup xmlNanoFTPCleanup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPClose
-extern __typeof (xmlNanoFTPClose) xmlNanoFTPClose __attribute((alias("xmlNanoFTPClose__internal_alias")));
-#else
-#ifndef xmlNanoFTPClose
-extern __typeof (xmlNanoFTPClose) xmlNanoFTPClose__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPClose xmlNanoFTPClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPCloseConnection
-extern __typeof (xmlNanoFTPCloseConnection) xmlNanoFTPCloseConnection __attribute((alias("xmlNanoFTPCloseConnection__internal_alias")));
-#else
-#ifndef xmlNanoFTPCloseConnection
-extern __typeof (xmlNanoFTPCloseConnection) xmlNanoFTPCloseConnection__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPCloseConnection xmlNanoFTPCloseConnection__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPConnect
-extern __typeof (xmlNanoFTPConnect) xmlNanoFTPConnect __attribute((alias("xmlNanoFTPConnect__internal_alias")));
-#else
-#ifndef xmlNanoFTPConnect
-extern __typeof (xmlNanoFTPConnect) xmlNanoFTPConnect__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPConnect xmlNanoFTPConnect__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPConnectTo
-extern __typeof (xmlNanoFTPConnectTo) xmlNanoFTPConnectTo __attribute((alias("xmlNanoFTPConnectTo__internal_alias")));
-#else
-#ifndef xmlNanoFTPConnectTo
-extern __typeof (xmlNanoFTPConnectTo) xmlNanoFTPConnectTo__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPConnectTo xmlNanoFTPConnectTo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPCwd
-extern __typeof (xmlNanoFTPCwd) xmlNanoFTPCwd __attribute((alias("xmlNanoFTPCwd__internal_alias")));
-#else
-#ifndef xmlNanoFTPCwd
-extern __typeof (xmlNanoFTPCwd) xmlNanoFTPCwd__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPCwd xmlNanoFTPCwd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPDele
-extern __typeof (xmlNanoFTPDele) xmlNanoFTPDele __attribute((alias("xmlNanoFTPDele__internal_alias")));
-#else
-#ifndef xmlNanoFTPDele
-extern __typeof (xmlNanoFTPDele) xmlNanoFTPDele__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPDele xmlNanoFTPDele__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPFreeCtxt
-extern __typeof (xmlNanoFTPFreeCtxt) xmlNanoFTPFreeCtxt __attribute((alias("xmlNanoFTPFreeCtxt__internal_alias")));
-#else
-#ifndef xmlNanoFTPFreeCtxt
-extern __typeof (xmlNanoFTPFreeCtxt) xmlNanoFTPFreeCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPFreeCtxt xmlNanoFTPFreeCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPGet
-extern __typeof (xmlNanoFTPGet) xmlNanoFTPGet __attribute((alias("xmlNanoFTPGet__internal_alias")));
-#else
-#ifndef xmlNanoFTPGet
-extern __typeof (xmlNanoFTPGet) xmlNanoFTPGet__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPGet xmlNanoFTPGet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPGetConnection
-extern __typeof (xmlNanoFTPGetConnection) xmlNanoFTPGetConnection __attribute((alias("xmlNanoFTPGetConnection__internal_alias")));
-#else
-#ifndef xmlNanoFTPGetConnection
-extern __typeof (xmlNanoFTPGetConnection) xmlNanoFTPGetConnection__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPGetConnection xmlNanoFTPGetConnection__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPGetResponse
-extern __typeof (xmlNanoFTPGetResponse) xmlNanoFTPGetResponse __attribute((alias("xmlNanoFTPGetResponse__internal_alias")));
-#else
-#ifndef xmlNanoFTPGetResponse
-extern __typeof (xmlNanoFTPGetResponse) xmlNanoFTPGetResponse__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPGetResponse xmlNanoFTPGetResponse__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPGetSocket
-extern __typeof (xmlNanoFTPGetSocket) xmlNanoFTPGetSocket __attribute((alias("xmlNanoFTPGetSocket__internal_alias")));
-#else
-#ifndef xmlNanoFTPGetSocket
-extern __typeof (xmlNanoFTPGetSocket) xmlNanoFTPGetSocket__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPGetSocket xmlNanoFTPGetSocket__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPInit
-extern __typeof (xmlNanoFTPInit) xmlNanoFTPInit __attribute((alias("xmlNanoFTPInit__internal_alias")));
-#else
-#ifndef xmlNanoFTPInit
-extern __typeof (xmlNanoFTPInit) xmlNanoFTPInit__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPInit xmlNanoFTPInit__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPList
-extern __typeof (xmlNanoFTPList) xmlNanoFTPList __attribute((alias("xmlNanoFTPList__internal_alias")));
-#else
-#ifndef xmlNanoFTPList
-extern __typeof (xmlNanoFTPList) xmlNanoFTPList__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPList xmlNanoFTPList__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPNewCtxt
-extern __typeof (xmlNanoFTPNewCtxt) xmlNanoFTPNewCtxt __attribute((alias("xmlNanoFTPNewCtxt__internal_alias")));
-#else
-#ifndef xmlNanoFTPNewCtxt
-extern __typeof (xmlNanoFTPNewCtxt) xmlNanoFTPNewCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPNewCtxt xmlNanoFTPNewCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPOpen
-extern __typeof (xmlNanoFTPOpen) xmlNanoFTPOpen __attribute((alias("xmlNanoFTPOpen__internal_alias")));
-#else
-#ifndef xmlNanoFTPOpen
-extern __typeof (xmlNanoFTPOpen) xmlNanoFTPOpen__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPOpen xmlNanoFTPOpen__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPProxy
-extern __typeof (xmlNanoFTPProxy) xmlNanoFTPProxy __attribute((alias("xmlNanoFTPProxy__internal_alias")));
-#else
-#ifndef xmlNanoFTPProxy
-extern __typeof (xmlNanoFTPProxy) xmlNanoFTPProxy__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPProxy xmlNanoFTPProxy__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPQuit
-extern __typeof (xmlNanoFTPQuit) xmlNanoFTPQuit __attribute((alias("xmlNanoFTPQuit__internal_alias")));
-#else
-#ifndef xmlNanoFTPQuit
-extern __typeof (xmlNanoFTPQuit) xmlNanoFTPQuit__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPQuit xmlNanoFTPQuit__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPRead
-extern __typeof (xmlNanoFTPRead) xmlNanoFTPRead __attribute((alias("xmlNanoFTPRead__internal_alias")));
-#else
-#ifndef xmlNanoFTPRead
-extern __typeof (xmlNanoFTPRead) xmlNanoFTPRead__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPRead xmlNanoFTPRead__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPScanProxy
-extern __typeof (xmlNanoFTPScanProxy) xmlNanoFTPScanProxy __attribute((alias("xmlNanoFTPScanProxy__internal_alias")));
-#else
-#ifndef xmlNanoFTPScanProxy
-extern __typeof (xmlNanoFTPScanProxy) xmlNanoFTPScanProxy__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPScanProxy xmlNanoFTPScanProxy__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_FTP_ENABLED)
-#ifdef bottom_nanoftp
-#undef xmlNanoFTPUpdateURL
-extern __typeof (xmlNanoFTPUpdateURL) xmlNanoFTPUpdateURL __attribute((alias("xmlNanoFTPUpdateURL__internal_alias")));
-#else
-#ifndef xmlNanoFTPUpdateURL
-extern __typeof (xmlNanoFTPUpdateURL) xmlNanoFTPUpdateURL__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoFTPUpdateURL xmlNanoFTPUpdateURL__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPAuthHeader
-extern __typeof (xmlNanoHTTPAuthHeader) xmlNanoHTTPAuthHeader __attribute((alias("xmlNanoHTTPAuthHeader__internal_alias")));
-#else
-#ifndef xmlNanoHTTPAuthHeader
-extern __typeof (xmlNanoHTTPAuthHeader) xmlNanoHTTPAuthHeader__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPAuthHeader xmlNanoHTTPAuthHeader__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPCleanup
-extern __typeof (xmlNanoHTTPCleanup) xmlNanoHTTPCleanup __attribute((alias("xmlNanoHTTPCleanup__internal_alias")));
-#else
-#ifndef xmlNanoHTTPCleanup
-extern __typeof (xmlNanoHTTPCleanup) xmlNanoHTTPCleanup__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPCleanup xmlNanoHTTPCleanup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPClose
-extern __typeof (xmlNanoHTTPClose) xmlNanoHTTPClose __attribute((alias("xmlNanoHTTPClose__internal_alias")));
-#else
-#ifndef xmlNanoHTTPClose
-extern __typeof (xmlNanoHTTPClose) xmlNanoHTTPClose__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPClose xmlNanoHTTPClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPContentLength
-extern __typeof (xmlNanoHTTPContentLength) xmlNanoHTTPContentLength __attribute((alias("xmlNanoHTTPContentLength__internal_alias")));
-#else
-#ifndef xmlNanoHTTPContentLength
-extern __typeof (xmlNanoHTTPContentLength) xmlNanoHTTPContentLength__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPContentLength xmlNanoHTTPContentLength__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPEncoding
-extern __typeof (xmlNanoHTTPEncoding) xmlNanoHTTPEncoding __attribute((alias("xmlNanoHTTPEncoding__internal_alias")));
-#else
-#ifndef xmlNanoHTTPEncoding
-extern __typeof (xmlNanoHTTPEncoding) xmlNanoHTTPEncoding__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPEncoding xmlNanoHTTPEncoding__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPFetch
-extern __typeof (xmlNanoHTTPFetch) xmlNanoHTTPFetch __attribute((alias("xmlNanoHTTPFetch__internal_alias")));
-#else
-#ifndef xmlNanoHTTPFetch
-extern __typeof (xmlNanoHTTPFetch) xmlNanoHTTPFetch__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPFetch xmlNanoHTTPFetch__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPInit
-extern __typeof (xmlNanoHTTPInit) xmlNanoHTTPInit __attribute((alias("xmlNanoHTTPInit__internal_alias")));
-#else
-#ifndef xmlNanoHTTPInit
-extern __typeof (xmlNanoHTTPInit) xmlNanoHTTPInit__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPInit xmlNanoHTTPInit__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPMethod
-extern __typeof (xmlNanoHTTPMethod) xmlNanoHTTPMethod __attribute((alias("xmlNanoHTTPMethod__internal_alias")));
-#else
-#ifndef xmlNanoHTTPMethod
-extern __typeof (xmlNanoHTTPMethod) xmlNanoHTTPMethod__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPMethod xmlNanoHTTPMethod__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPMethodRedir
-extern __typeof (xmlNanoHTTPMethodRedir) xmlNanoHTTPMethodRedir __attribute((alias("xmlNanoHTTPMethodRedir__internal_alias")));
-#else
-#ifndef xmlNanoHTTPMethodRedir
-extern __typeof (xmlNanoHTTPMethodRedir) xmlNanoHTTPMethodRedir__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPMethodRedir xmlNanoHTTPMethodRedir__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPMimeType
-extern __typeof (xmlNanoHTTPMimeType) xmlNanoHTTPMimeType __attribute((alias("xmlNanoHTTPMimeType__internal_alias")));
-#else
-#ifndef xmlNanoHTTPMimeType
-extern __typeof (xmlNanoHTTPMimeType) xmlNanoHTTPMimeType__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPMimeType xmlNanoHTTPMimeType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPOpen
-extern __typeof (xmlNanoHTTPOpen) xmlNanoHTTPOpen __attribute((alias("xmlNanoHTTPOpen__internal_alias")));
-#else
-#ifndef xmlNanoHTTPOpen
-extern __typeof (xmlNanoHTTPOpen) xmlNanoHTTPOpen__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPOpen xmlNanoHTTPOpen__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPOpenRedir
-extern __typeof (xmlNanoHTTPOpenRedir) xmlNanoHTTPOpenRedir __attribute((alias("xmlNanoHTTPOpenRedir__internal_alias")));
-#else
-#ifndef xmlNanoHTTPOpenRedir
-extern __typeof (xmlNanoHTTPOpenRedir) xmlNanoHTTPOpenRedir__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPOpenRedir xmlNanoHTTPOpenRedir__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPRead
-extern __typeof (xmlNanoHTTPRead) xmlNanoHTTPRead __attribute((alias("xmlNanoHTTPRead__internal_alias")));
-#else
-#ifndef xmlNanoHTTPRead
-extern __typeof (xmlNanoHTTPRead) xmlNanoHTTPRead__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPRead xmlNanoHTTPRead__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPRedir
-extern __typeof (xmlNanoHTTPRedir) xmlNanoHTTPRedir __attribute((alias("xmlNanoHTTPRedir__internal_alias")));
-#else
-#ifndef xmlNanoHTTPRedir
-extern __typeof (xmlNanoHTTPRedir) xmlNanoHTTPRedir__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPRedir xmlNanoHTTPRedir__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPReturnCode
-extern __typeof (xmlNanoHTTPReturnCode) xmlNanoHTTPReturnCode __attribute((alias("xmlNanoHTTPReturnCode__internal_alias")));
-#else
-#ifndef xmlNanoHTTPReturnCode
-extern __typeof (xmlNanoHTTPReturnCode) xmlNanoHTTPReturnCode__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPReturnCode xmlNanoHTTPReturnCode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPSave
-extern __typeof (xmlNanoHTTPSave) xmlNanoHTTPSave __attribute((alias("xmlNanoHTTPSave__internal_alias")));
-#else
-#ifndef xmlNanoHTTPSave
-extern __typeof (xmlNanoHTTPSave) xmlNanoHTTPSave__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPSave xmlNanoHTTPSave__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_nanohttp
-#undef xmlNanoHTTPScanProxy
-extern __typeof (xmlNanoHTTPScanProxy) xmlNanoHTTPScanProxy __attribute((alias("xmlNanoHTTPScanProxy__internal_alias")));
-#else
-#ifndef xmlNanoHTTPScanProxy
-extern __typeof (xmlNanoHTTPScanProxy) xmlNanoHTTPScanProxy__internal_alias __attribute((visibility("hidden")));
-#define xmlNanoHTTPScanProxy xmlNanoHTTPScanProxy__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlNewAutomata
-extern __typeof (xmlNewAutomata) xmlNewAutomata __attribute((alias("xmlNewAutomata__internal_alias")));
-#else
-#ifndef xmlNewAutomata
-extern __typeof (xmlNewAutomata) xmlNewAutomata__internal_alias __attribute((visibility("hidden")));
-#define xmlNewAutomata xmlNewAutomata__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewCDataBlock
-extern __typeof (xmlNewCDataBlock) xmlNewCDataBlock __attribute((alias("xmlNewCDataBlock__internal_alias")));
-#else
-#ifndef xmlNewCDataBlock
-extern __typeof (xmlNewCDataBlock) xmlNewCDataBlock__internal_alias __attribute((visibility("hidden")));
-#define xmlNewCDataBlock xmlNewCDataBlock__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlNewCatalog
-extern __typeof (xmlNewCatalog) xmlNewCatalog __attribute((alias("xmlNewCatalog__internal_alias")));
-#else
-#ifndef xmlNewCatalog
-extern __typeof (xmlNewCatalog) xmlNewCatalog__internal_alias __attribute((visibility("hidden")));
-#define xmlNewCatalog xmlNewCatalog__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlNewCharEncodingHandler
-extern __typeof (xmlNewCharEncodingHandler) xmlNewCharEncodingHandler __attribute((alias("xmlNewCharEncodingHandler__internal_alias")));
-#else
-#ifndef xmlNewCharEncodingHandler
-extern __typeof (xmlNewCharEncodingHandler) xmlNewCharEncodingHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlNewCharEncodingHandler xmlNewCharEncodingHandler__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewCharRef
-extern __typeof (xmlNewCharRef) xmlNewCharRef __attribute((alias("xmlNewCharRef__internal_alias")));
-#else
-#ifndef xmlNewCharRef
-extern __typeof (xmlNewCharRef) xmlNewCharRef__internal_alias __attribute((visibility("hidden")));
-#define xmlNewCharRef xmlNewCharRef__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlNewChild
-extern __typeof (xmlNewChild) xmlNewChild __attribute((alias("xmlNewChild__internal_alias")));
-#else
-#ifndef xmlNewChild
-extern __typeof (xmlNewChild) xmlNewChild__internal_alias __attribute((visibility("hidden")));
-#define xmlNewChild xmlNewChild__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewComment
-extern __typeof (xmlNewComment) xmlNewComment __attribute((alias("xmlNewComment__internal_alias")));
-#else
-#ifndef xmlNewComment
-extern __typeof (xmlNewComment) xmlNewComment__internal_alias __attribute((visibility("hidden")));
-#define xmlNewComment xmlNewComment__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDoc
-extern __typeof (xmlNewDoc) xmlNewDoc __attribute((alias("xmlNewDoc__internal_alias")));
-#else
-#ifndef xmlNewDoc
-extern __typeof (xmlNewDoc) xmlNewDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDoc xmlNewDoc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDocComment
-extern __typeof (xmlNewDocComment) xmlNewDocComment __attribute((alias("xmlNewDocComment__internal_alias")));
-#else
-#ifndef xmlNewDocComment
-extern __typeof (xmlNewDocComment) xmlNewDocComment__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocComment xmlNewDocComment__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlNewDocElementContent
-extern __typeof (xmlNewDocElementContent) xmlNewDocElementContent __attribute((alias("xmlNewDocElementContent__internal_alias")));
-#else
-#ifndef xmlNewDocElementContent
-extern __typeof (xmlNewDocElementContent) xmlNewDocElementContent__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocElementContent xmlNewDocElementContent__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNewDocFragment
-extern __typeof (xmlNewDocFragment) xmlNewDocFragment __attribute((alias("xmlNewDocFragment__internal_alias")));
-#else
-#ifndef xmlNewDocFragment
-extern __typeof (xmlNewDocFragment) xmlNewDocFragment__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocFragment xmlNewDocFragment__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDocNode
-extern __typeof (xmlNewDocNode) xmlNewDocNode __attribute((alias("xmlNewDocNode__internal_alias")));
-#else
-#ifndef xmlNewDocNode
-extern __typeof (xmlNewDocNode) xmlNewDocNode__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocNode xmlNewDocNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDocNodeEatName
-extern __typeof (xmlNewDocNodeEatName) xmlNewDocNodeEatName __attribute((alias("xmlNewDocNodeEatName__internal_alias")));
-#else
-#ifndef xmlNewDocNodeEatName
-extern __typeof (xmlNewDocNodeEatName) xmlNewDocNodeEatName__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocNodeEatName xmlNewDocNodeEatName__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDocPI
-extern __typeof (xmlNewDocPI) xmlNewDocPI __attribute((alias("xmlNewDocPI__internal_alias")));
-#else
-#ifndef xmlNewDocPI
-extern __typeof (xmlNewDocPI) xmlNewDocPI__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocPI xmlNewDocPI__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDocProp
-extern __typeof (xmlNewDocProp) xmlNewDocProp __attribute((alias("xmlNewDocProp__internal_alias")));
-#else
-#ifndef xmlNewDocProp
-extern __typeof (xmlNewDocProp) xmlNewDocProp__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocProp xmlNewDocProp__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNewDocRawNode
-extern __typeof (xmlNewDocRawNode) xmlNewDocRawNode __attribute((alias("xmlNewDocRawNode__internal_alias")));
-#else
-#ifndef xmlNewDocRawNode
-extern __typeof (xmlNewDocRawNode) xmlNewDocRawNode__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocRawNode xmlNewDocRawNode__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDocText
-extern __typeof (xmlNewDocText) xmlNewDocText __attribute((alias("xmlNewDocText__internal_alias")));
-#else
-#ifndef xmlNewDocText
-extern __typeof (xmlNewDocText) xmlNewDocText__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocText xmlNewDocText__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDocTextLen
-extern __typeof (xmlNewDocTextLen) xmlNewDocTextLen __attribute((alias("xmlNewDocTextLen__internal_alias")));
-#else
-#ifndef xmlNewDocTextLen
-extern __typeof (xmlNewDocTextLen) xmlNewDocTextLen__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDocTextLen xmlNewDocTextLen__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewDtd
-extern __typeof (xmlNewDtd) xmlNewDtd __attribute((alias("xmlNewDtd__internal_alias")));
-#else
-#ifndef xmlNewDtd
-extern __typeof (xmlNewDtd) xmlNewDtd__internal_alias __attribute((visibility("hidden")));
-#define xmlNewDtd xmlNewDtd__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlNewElementContent
-extern __typeof (xmlNewElementContent) xmlNewElementContent __attribute((alias("xmlNewElementContent__internal_alias")));
-#else
-#ifndef xmlNewElementContent
-extern __typeof (xmlNewElementContent) xmlNewElementContent__internal_alias __attribute((visibility("hidden")));
-#define xmlNewElementContent xmlNewElementContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_entities
-#undef xmlNewEntity
-extern __typeof (xmlNewEntity) xmlNewEntity __attribute((alias("xmlNewEntity__internal_alias")));
-#else
-#ifndef xmlNewEntity
-extern __typeof (xmlNewEntity) xmlNewEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlNewEntity xmlNewEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlNewEntityInputStream
-extern __typeof (xmlNewEntityInputStream) xmlNewEntityInputStream __attribute((alias("xmlNewEntityInputStream__internal_alias")));
-#else
-#ifndef xmlNewEntityInputStream
-extern __typeof (xmlNewEntityInputStream) xmlNewEntityInputStream__internal_alias __attribute((visibility("hidden")));
-#define xmlNewEntityInputStream xmlNewEntityInputStream__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlNewGlobalNs
-extern __typeof (xmlNewGlobalNs) xmlNewGlobalNs __attribute((alias("xmlNewGlobalNs__internal_alias")));
-#else
-#ifndef xmlNewGlobalNs
-extern __typeof (xmlNewGlobalNs) xmlNewGlobalNs__internal_alias __attribute((visibility("hidden")));
-#define xmlNewGlobalNs xmlNewGlobalNs__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlNewIOInputStream
-extern __typeof (xmlNewIOInputStream) xmlNewIOInputStream __attribute((alias("xmlNewIOInputStream__internal_alias")));
-#else
-#ifndef xmlNewIOInputStream
-extern __typeof (xmlNewIOInputStream) xmlNewIOInputStream__internal_alias __attribute((visibility("hidden")));
-#define xmlNewIOInputStream xmlNewIOInputStream__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlNewInputFromFile
-extern __typeof (xmlNewInputFromFile) xmlNewInputFromFile __attribute((alias("xmlNewInputFromFile__internal_alias")));
-#else
-#ifndef xmlNewInputFromFile
-extern __typeof (xmlNewInputFromFile) xmlNewInputFromFile__internal_alias __attribute((visibility("hidden")));
-#define xmlNewInputFromFile xmlNewInputFromFile__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlNewInputStream
-extern __typeof (xmlNewInputStream) xmlNewInputStream __attribute((alias("xmlNewInputStream__internal_alias")));
-#else
-#ifndef xmlNewInputStream
-extern __typeof (xmlNewInputStream) xmlNewInputStream__internal_alias __attribute((visibility("hidden")));
-#define xmlNewInputStream xmlNewInputStream__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlNewMutex
-extern __typeof (xmlNewMutex) xmlNewMutex __attribute((alias("xmlNewMutex__internal_alias")));
-#else
-#ifndef xmlNewMutex
-extern __typeof (xmlNewMutex) xmlNewMutex__internal_alias __attribute((visibility("hidden")));
-#define xmlNewMutex xmlNewMutex__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewNode
-extern __typeof (xmlNewNode) xmlNewNode __attribute((alias("xmlNewNode__internal_alias")));
-#else
-#ifndef xmlNewNode
-extern __typeof (xmlNewNode) xmlNewNode__internal_alias __attribute((visibility("hidden")));
-#define xmlNewNode xmlNewNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewNodeEatName
-extern __typeof (xmlNewNodeEatName) xmlNewNodeEatName __attribute((alias("xmlNewNodeEatName__internal_alias")));
-#else
-#ifndef xmlNewNodeEatName
-extern __typeof (xmlNewNodeEatName) xmlNewNodeEatName__internal_alias __attribute((visibility("hidden")));
-#define xmlNewNodeEatName xmlNewNodeEatName__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewNs
-extern __typeof (xmlNewNs) xmlNewNs __attribute((alias("xmlNewNs__internal_alias")));
-#else
-#ifndef xmlNewNs
-extern __typeof (xmlNewNs) xmlNewNs__internal_alias __attribute((visibility("hidden")));
-#define xmlNewNs xmlNewNs__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewNsProp
-extern __typeof (xmlNewNsProp) xmlNewNsProp __attribute((alias("xmlNewNsProp__internal_alias")));
-#else
-#ifndef xmlNewNsProp
-extern __typeof (xmlNewNsProp) xmlNewNsProp__internal_alias __attribute((visibility("hidden")));
-#define xmlNewNsProp xmlNewNsProp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewNsPropEatName
-extern __typeof (xmlNewNsPropEatName) xmlNewNsPropEatName __attribute((alias("xmlNewNsPropEatName__internal_alias")));
-#else
-#ifndef xmlNewNsPropEatName
-extern __typeof (xmlNewNsPropEatName) xmlNewNsPropEatName__internal_alias __attribute((visibility("hidden")));
-#define xmlNewNsPropEatName xmlNewNsPropEatName__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewPI
-extern __typeof (xmlNewPI) xmlNewPI __attribute((alias("xmlNewPI__internal_alias")));
-#else
-#ifndef xmlNewPI
-extern __typeof (xmlNewPI) xmlNewPI__internal_alias __attribute((visibility("hidden")));
-#define xmlNewPI xmlNewPI__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlNewParserCtxt
-extern __typeof (xmlNewParserCtxt) xmlNewParserCtxt __attribute((alias("xmlNewParserCtxt__internal_alias")));
-#else
-#ifndef xmlNewParserCtxt
-extern __typeof (xmlNewParserCtxt) xmlNewParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlNewParserCtxt xmlNewParserCtxt__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlNewProp
-extern __typeof (xmlNewProp) xmlNewProp __attribute((alias("xmlNewProp__internal_alias")));
-#else
-#ifndef xmlNewProp
-extern __typeof (xmlNewProp) xmlNewProp__internal_alias __attribute((visibility("hidden")));
-#define xmlNewProp xmlNewProp__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlNewRMutex
-extern __typeof (xmlNewRMutex) xmlNewRMutex __attribute((alias("xmlNewRMutex__internal_alias")));
-#else
-#ifndef xmlNewRMutex
-extern __typeof (xmlNewRMutex) xmlNewRMutex__internal_alias __attribute((visibility("hidden")));
-#define xmlNewRMutex xmlNewRMutex__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewReference
-extern __typeof (xmlNewReference) xmlNewReference __attribute((alias("xmlNewReference__internal_alias")));
-#else
-#ifndef xmlNewReference
-extern __typeof (xmlNewReference) xmlNewReference__internal_alias __attribute((visibility("hidden")));
-#define xmlNewReference xmlNewReference__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlNewStringInputStream
-extern __typeof (xmlNewStringInputStream) xmlNewStringInputStream __attribute((alias("xmlNewStringInputStream__internal_alias")));
-#else
-#ifndef xmlNewStringInputStream
-extern __typeof (xmlNewStringInputStream) xmlNewStringInputStream__internal_alias __attribute((visibility("hidden")));
-#define xmlNewStringInputStream xmlNewStringInputStream__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewText
-extern __typeof (xmlNewText) xmlNewText __attribute((alias("xmlNewText__internal_alias")));
-#else
-#ifndef xmlNewText
-extern __typeof (xmlNewText) xmlNewText__internal_alias __attribute((visibility("hidden")));
-#define xmlNewText xmlNewText__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNewTextChild
-extern __typeof (xmlNewTextChild) xmlNewTextChild __attribute((alias("xmlNewTextChild__internal_alias")));
-#else
-#ifndef xmlNewTextChild
-extern __typeof (xmlNewTextChild) xmlNewTextChild__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextChild xmlNewTextChild__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNewTextLen
-extern __typeof (xmlNewTextLen) xmlNewTextLen __attribute((alias("xmlNewTextLen__internal_alias")));
-#else
-#ifndef xmlNewTextLen
-extern __typeof (xmlNewTextLen) xmlNewTextLen__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextLen xmlNewTextLen__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlNewTextReader
-extern __typeof (xmlNewTextReader) xmlNewTextReader __attribute((alias("xmlNewTextReader__internal_alias")));
-#else
-#ifndef xmlNewTextReader
-extern __typeof (xmlNewTextReader) xmlNewTextReader__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextReader xmlNewTextReader__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlNewTextReaderFilename
-extern __typeof (xmlNewTextReaderFilename) xmlNewTextReaderFilename __attribute((alias("xmlNewTextReaderFilename__internal_alias")));
-#else
-#ifndef xmlNewTextReaderFilename
-extern __typeof (xmlNewTextReaderFilename) xmlNewTextReaderFilename__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextReaderFilename xmlNewTextReaderFilename__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlNewTextWriter
-extern __typeof (xmlNewTextWriter) xmlNewTextWriter __attribute((alias("xmlNewTextWriter__internal_alias")));
-#else
-#ifndef xmlNewTextWriter
-extern __typeof (xmlNewTextWriter) xmlNewTextWriter__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextWriter xmlNewTextWriter__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlNewTextWriterDoc
-extern __typeof (xmlNewTextWriterDoc) xmlNewTextWriterDoc __attribute((alias("xmlNewTextWriterDoc__internal_alias")));
-#else
-#ifndef xmlNewTextWriterDoc
-extern __typeof (xmlNewTextWriterDoc) xmlNewTextWriterDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextWriterDoc xmlNewTextWriterDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlNewTextWriterFilename
-extern __typeof (xmlNewTextWriterFilename) xmlNewTextWriterFilename __attribute((alias("xmlNewTextWriterFilename__internal_alias")));
-#else
-#ifndef xmlNewTextWriterFilename
-extern __typeof (xmlNewTextWriterFilename) xmlNewTextWriterFilename__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextWriterFilename xmlNewTextWriterFilename__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlNewTextWriterMemory
-extern __typeof (xmlNewTextWriterMemory) xmlNewTextWriterMemory __attribute((alias("xmlNewTextWriterMemory__internal_alias")));
-#else
-#ifndef xmlNewTextWriterMemory
-extern __typeof (xmlNewTextWriterMemory) xmlNewTextWriterMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextWriterMemory xmlNewTextWriterMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlNewTextWriterPushParser
-extern __typeof (xmlNewTextWriterPushParser) xmlNewTextWriterPushParser __attribute((alias("xmlNewTextWriterPushParser__internal_alias")));
-#else
-#ifndef xmlNewTextWriterPushParser
-extern __typeof (xmlNewTextWriterPushParser) xmlNewTextWriterPushParser__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextWriterPushParser xmlNewTextWriterPushParser__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlNewTextWriterTree
-extern __typeof (xmlNewTextWriterTree) xmlNewTextWriterTree __attribute((alias("xmlNewTextWriterTree__internal_alias")));
-#else
-#ifndef xmlNewTextWriterTree
-extern __typeof (xmlNewTextWriterTree) xmlNewTextWriterTree__internal_alias __attribute((visibility("hidden")));
-#define xmlNewTextWriterTree xmlNewTextWriterTree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlNewValidCtxt
-extern __typeof (xmlNewValidCtxt) xmlNewValidCtxt __attribute((alias("xmlNewValidCtxt__internal_alias")));
-#else
-#ifndef xmlNewValidCtxt
-extern __typeof (xmlNewValidCtxt) xmlNewValidCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlNewValidCtxt xmlNewValidCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlNextChar
-extern __typeof (xmlNextChar) xmlNextChar __attribute((alias("xmlNextChar__internal_alias")));
-#else
-#ifndef xmlNextChar
-extern __typeof (xmlNextChar) xmlNextChar__internal_alias __attribute((visibility("hidden")));
-#define xmlNextChar xmlNextChar__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNextElementSibling
-extern __typeof (xmlNextElementSibling) xmlNextElementSibling __attribute((alias("xmlNextElementSibling__internal_alias")));
-#else
-#ifndef xmlNextElementSibling
-extern __typeof (xmlNextElementSibling) xmlNextElementSibling__internal_alias __attribute((visibility("hidden")));
-#define xmlNextElementSibling xmlNextElementSibling__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlNoNetExternalEntityLoader
-extern __typeof (xmlNoNetExternalEntityLoader) xmlNoNetExternalEntityLoader __attribute((alias("xmlNoNetExternalEntityLoader__internal_alias")));
-#else
-#ifndef xmlNoNetExternalEntityLoader
-extern __typeof (xmlNoNetExternalEntityLoader) xmlNoNetExternalEntityLoader__internal_alias __attribute((visibility("hidden")));
-#define xmlNoNetExternalEntityLoader xmlNoNetExternalEntityLoader__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlNoXxeExternalEntityLoader
-extern __typeof (xmlNoXxeExternalEntityLoader) xmlNoXxeExternalEntityLoader __attribute((alias("xmlNoXxeExternalEntityLoader__internal_alias")));
-#else
-#ifndef xmlNoXxeExternalEntityLoader
-extern __typeof (xmlNoXxeExternalEntityLoader) xmlNoXxeExternalEntityLoader__internal_alias __attribute((visibility("hidden")));
-#define xmlNoXxeExternalEntityLoader xmlNoXxeExternalEntityLoader__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeAddContent
-extern __typeof (xmlNodeAddContent) xmlNodeAddContent __attribute((alias("xmlNodeAddContent__internal_alias")));
-#else
-#ifndef xmlNodeAddContent
-extern __typeof (xmlNodeAddContent) xmlNodeAddContent__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeAddContent xmlNodeAddContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeAddContentLen
-extern __typeof (xmlNodeAddContentLen) xmlNodeAddContentLen __attribute((alias("xmlNodeAddContentLen__internal_alias")));
-#else
-#ifndef xmlNodeAddContentLen
-extern __typeof (xmlNodeAddContentLen) xmlNodeAddContentLen__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeAddContentLen xmlNodeAddContentLen__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeBufGetContent
-extern __typeof (xmlNodeBufGetContent) xmlNodeBufGetContent __attribute((alias("xmlNodeBufGetContent__internal_alias")));
-#else
-#ifndef xmlNodeBufGetContent
-extern __typeof (xmlNodeBufGetContent) xmlNodeBufGetContent__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeBufGetContent xmlNodeBufGetContent__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlNodeDump
-extern __typeof (xmlNodeDump) xmlNodeDump __attribute((alias("xmlNodeDump__internal_alias")));
-#else
-#ifndef xmlNodeDump
-extern __typeof (xmlNodeDump) xmlNodeDump__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeDump xmlNodeDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlNodeDumpOutput
-extern __typeof (xmlNodeDumpOutput) xmlNodeDumpOutput __attribute((alias("xmlNodeDumpOutput__internal_alias")));
-#else
-#ifndef xmlNodeDumpOutput
-extern __typeof (xmlNodeDumpOutput) xmlNodeDumpOutput__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeDumpOutput xmlNodeDumpOutput__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeGetBase
-extern __typeof (xmlNodeGetBase) xmlNodeGetBase __attribute((alias("xmlNodeGetBase__internal_alias")));
-#else
-#ifndef xmlNodeGetBase
-extern __typeof (xmlNodeGetBase) xmlNodeGetBase__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeGetBase xmlNodeGetBase__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeGetContent
-extern __typeof (xmlNodeGetContent) xmlNodeGetContent __attribute((alias("xmlNodeGetContent__internal_alias")));
-#else
-#ifndef xmlNodeGetContent
-extern __typeof (xmlNodeGetContent) xmlNodeGetContent__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeGetContent xmlNodeGetContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeGetLang
-extern __typeof (xmlNodeGetLang) xmlNodeGetLang __attribute((alias("xmlNodeGetLang__internal_alias")));
-#else
-#ifndef xmlNodeGetLang
-extern __typeof (xmlNodeGetLang) xmlNodeGetLang__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeGetLang xmlNodeGetLang__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeGetSpacePreserve
-extern __typeof (xmlNodeGetSpacePreserve) xmlNodeGetSpacePreserve __attribute((alias("xmlNodeGetSpacePreserve__internal_alias")));
-#else
-#ifndef xmlNodeGetSpacePreserve
-extern __typeof (xmlNodeGetSpacePreserve) xmlNodeGetSpacePreserve__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeGetSpacePreserve xmlNodeGetSpacePreserve__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeIsText
-extern __typeof (xmlNodeIsText) xmlNodeIsText __attribute((alias("xmlNodeIsText__internal_alias")));
-#else
-#ifndef xmlNodeIsText
-extern __typeof (xmlNodeIsText) xmlNodeIsText__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeIsText xmlNodeIsText__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNodeListGetRawString
-extern __typeof (xmlNodeListGetRawString) xmlNodeListGetRawString __attribute((alias("xmlNodeListGetRawString__internal_alias")));
-#else
-#ifndef xmlNodeListGetRawString
-extern __typeof (xmlNodeListGetRawString) xmlNodeListGetRawString__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeListGetRawString xmlNodeListGetRawString__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeListGetString
-extern __typeof (xmlNodeListGetString) xmlNodeListGetString __attribute((alias("xmlNodeListGetString__internal_alias")));
-#else
-#ifndef xmlNodeListGetString
-extern __typeof (xmlNodeListGetString) xmlNodeListGetString__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeListGetString xmlNodeListGetString__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNodeSetBase
-extern __typeof (xmlNodeSetBase) xmlNodeSetBase __attribute((alias("xmlNodeSetBase__internal_alias")));
-#else
-#ifndef xmlNodeSetBase
-extern __typeof (xmlNodeSetBase) xmlNodeSetBase__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeSetBase xmlNodeSetBase__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlNodeSetContent
-extern __typeof (xmlNodeSetContent) xmlNodeSetContent __attribute((alias("xmlNodeSetContent__internal_alias")));
-#else
-#ifndef xmlNodeSetContent
-extern __typeof (xmlNodeSetContent) xmlNodeSetContent__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeSetContent xmlNodeSetContent__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNodeSetContentLen
-extern __typeof (xmlNodeSetContentLen) xmlNodeSetContentLen __attribute((alias("xmlNodeSetContentLen__internal_alias")));
-#else
-#ifndef xmlNodeSetContentLen
-extern __typeof (xmlNodeSetContentLen) xmlNodeSetContentLen__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeSetContentLen xmlNodeSetContentLen__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNodeSetLang
-extern __typeof (xmlNodeSetLang) xmlNodeSetLang __attribute((alias("xmlNodeSetLang__internal_alias")));
-#else
-#ifndef xmlNodeSetLang
-extern __typeof (xmlNodeSetLang) xmlNodeSetLang__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeSetLang xmlNodeSetLang__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNodeSetName
-extern __typeof (xmlNodeSetName) xmlNodeSetName __attribute((alias("xmlNodeSetName__internal_alias")));
-#else
-#ifndef xmlNodeSetName
-extern __typeof (xmlNodeSetName) xmlNodeSetName__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeSetName xmlNodeSetName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlNodeSetSpacePreserve
-extern __typeof (xmlNodeSetSpacePreserve) xmlNodeSetSpacePreserve __attribute((alias("xmlNodeSetSpacePreserve__internal_alias")));
-#else
-#ifndef xmlNodeSetSpacePreserve
-extern __typeof (xmlNodeSetSpacePreserve) xmlNodeSetSpacePreserve__internal_alias __attribute((visibility("hidden")));
-#define xmlNodeSetSpacePreserve xmlNodeSetSpacePreserve__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlNormalizeURIPath
-extern __typeof (xmlNormalizeURIPath) xmlNormalizeURIPath __attribute((alias("xmlNormalizeURIPath__internal_alias")));
-#else
-#ifndef xmlNormalizeURIPath
-extern __typeof (xmlNormalizeURIPath) xmlNormalizeURIPath__internal_alias __attribute((visibility("hidden")));
-#define xmlNormalizeURIPath xmlNormalizeURIPath__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlNormalizeWindowsPath
-extern __typeof (xmlNormalizeWindowsPath) xmlNormalizeWindowsPath __attribute((alias("xmlNormalizeWindowsPath__internal_alias")));
-#else
-#ifndef xmlNormalizeWindowsPath
-extern __typeof (xmlNormalizeWindowsPath) xmlNormalizeWindowsPath__internal_alias __attribute((visibility("hidden")));
-#define xmlNormalizeWindowsPath xmlNormalizeWindowsPath__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferClose
-extern __typeof (xmlOutputBufferClose) xmlOutputBufferClose __attribute((alias("xmlOutputBufferClose__internal_alias")));
-#else
-#ifndef xmlOutputBufferClose
-extern __typeof (xmlOutputBufferClose) xmlOutputBufferClose__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferClose xmlOutputBufferClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferCreateBuffer
-extern __typeof (xmlOutputBufferCreateBuffer) xmlOutputBufferCreateBuffer __attribute((alias("xmlOutputBufferCreateBuffer__internal_alias")));
-#else
-#ifndef xmlOutputBufferCreateBuffer
-extern __typeof (xmlOutputBufferCreateBuffer) xmlOutputBufferCreateBuffer__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferCreateBuffer xmlOutputBufferCreateBuffer__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferCreateFd
-extern __typeof (xmlOutputBufferCreateFd) xmlOutputBufferCreateFd __attribute((alias("xmlOutputBufferCreateFd__internal_alias")));
-#else
-#ifndef xmlOutputBufferCreateFd
-extern __typeof (xmlOutputBufferCreateFd) xmlOutputBufferCreateFd__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferCreateFd xmlOutputBufferCreateFd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferCreateFile
-extern __typeof (xmlOutputBufferCreateFile) xmlOutputBufferCreateFile __attribute((alias("xmlOutputBufferCreateFile__internal_alias")));
-#else
-#ifndef xmlOutputBufferCreateFile
-extern __typeof (xmlOutputBufferCreateFile) xmlOutputBufferCreateFile__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferCreateFile xmlOutputBufferCreateFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferCreateFilename
-extern __typeof (xmlOutputBufferCreateFilename) xmlOutputBufferCreateFilename __attribute((alias("xmlOutputBufferCreateFilename__internal_alias")));
-#else
-#ifndef xmlOutputBufferCreateFilename
-extern __typeof (xmlOutputBufferCreateFilename) xmlOutputBufferCreateFilename__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferCreateFilename xmlOutputBufferCreateFilename__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferCreateFilenameDefault
-extern __typeof (xmlOutputBufferCreateFilenameDefault) xmlOutputBufferCreateFilenameDefault __attribute((alias("xmlOutputBufferCreateFilenameDefault__internal_alias")));
-#else
-#ifndef xmlOutputBufferCreateFilenameDefault
-extern __typeof (xmlOutputBufferCreateFilenameDefault) xmlOutputBufferCreateFilenameDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferCreateFilenameDefault xmlOutputBufferCreateFilenameDefault__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferCreateIO
-extern __typeof (xmlOutputBufferCreateIO) xmlOutputBufferCreateIO __attribute((alias("xmlOutputBufferCreateIO__internal_alias")));
-#else
-#ifndef xmlOutputBufferCreateIO
-extern __typeof (xmlOutputBufferCreateIO) xmlOutputBufferCreateIO__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferCreateIO xmlOutputBufferCreateIO__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferFlush
-extern __typeof (xmlOutputBufferFlush) xmlOutputBufferFlush __attribute((alias("xmlOutputBufferFlush__internal_alias")));
-#else
-#ifndef xmlOutputBufferFlush
-extern __typeof (xmlOutputBufferFlush) xmlOutputBufferFlush__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferFlush xmlOutputBufferFlush__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferGetContent
-extern __typeof (xmlOutputBufferGetContent) xmlOutputBufferGetContent __attribute((alias("xmlOutputBufferGetContent__internal_alias")));
-#else
-#ifndef xmlOutputBufferGetContent
-extern __typeof (xmlOutputBufferGetContent) xmlOutputBufferGetContent__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferGetContent xmlOutputBufferGetContent__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferGetSize
-extern __typeof (xmlOutputBufferGetSize) xmlOutputBufferGetSize __attribute((alias("xmlOutputBufferGetSize__internal_alias")));
-#else
-#ifndef xmlOutputBufferGetSize
-extern __typeof (xmlOutputBufferGetSize) xmlOutputBufferGetSize__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferGetSize xmlOutputBufferGetSize__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferWrite
-extern __typeof (xmlOutputBufferWrite) xmlOutputBufferWrite __attribute((alias("xmlOutputBufferWrite__internal_alias")));
-#else
-#ifndef xmlOutputBufferWrite
-extern __typeof (xmlOutputBufferWrite) xmlOutputBufferWrite__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferWrite xmlOutputBufferWrite__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferWriteEscape
-extern __typeof (xmlOutputBufferWriteEscape) xmlOutputBufferWriteEscape __attribute((alias("xmlOutputBufferWriteEscape__internal_alias")));
-#else
-#ifndef xmlOutputBufferWriteEscape
-extern __typeof (xmlOutputBufferWriteEscape) xmlOutputBufferWriteEscape__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferWriteEscape xmlOutputBufferWriteEscape__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlOutputBufferWriteString
-extern __typeof (xmlOutputBufferWriteString) xmlOutputBufferWriteString __attribute((alias("xmlOutputBufferWriteString__internal_alias")));
-#else
-#ifndef xmlOutputBufferWriteString
-extern __typeof (xmlOutputBufferWriteString) xmlOutputBufferWriteString__internal_alias __attribute((visibility("hidden")));
-#define xmlOutputBufferWriteString xmlOutputBufferWriteString__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseAttValue
-extern __typeof (xmlParseAttValue) xmlParseAttValue __attribute((alias("xmlParseAttValue__internal_alias")));
-#else
-#ifndef xmlParseAttValue
-extern __typeof (xmlParseAttValue) xmlParseAttValue__internal_alias __attribute((visibility("hidden")));
-#define xmlParseAttValue xmlParseAttValue__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseAttribute
-extern __typeof (xmlParseAttribute) xmlParseAttribute __attribute((alias("xmlParseAttribute__internal_alias")));
-#else
-#ifndef xmlParseAttribute
-extern __typeof (xmlParseAttribute) xmlParseAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlParseAttribute xmlParseAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseAttributeListDecl
-extern __typeof (xmlParseAttributeListDecl) xmlParseAttributeListDecl __attribute((alias("xmlParseAttributeListDecl__internal_alias")));
-#else
-#ifndef xmlParseAttributeListDecl
-extern __typeof (xmlParseAttributeListDecl) xmlParseAttributeListDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseAttributeListDecl xmlParseAttributeListDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseAttributeType
-extern __typeof (xmlParseAttributeType) xmlParseAttributeType __attribute((alias("xmlParseAttributeType__internal_alias")));
-#else
-#ifndef xmlParseAttributeType
-extern __typeof (xmlParseAttributeType) xmlParseAttributeType__internal_alias __attribute((visibility("hidden")));
-#define xmlParseAttributeType xmlParseAttributeType__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseBalancedChunkMemory
-extern __typeof (xmlParseBalancedChunkMemory) xmlParseBalancedChunkMemory __attribute((alias("xmlParseBalancedChunkMemory__internal_alias")));
-#else
-#ifndef xmlParseBalancedChunkMemory
-extern __typeof (xmlParseBalancedChunkMemory) xmlParseBalancedChunkMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlParseBalancedChunkMemory xmlParseBalancedChunkMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseBalancedChunkMemoryRecover
-extern __typeof (xmlParseBalancedChunkMemoryRecover) xmlParseBalancedChunkMemoryRecover __attribute((alias("xmlParseBalancedChunkMemoryRecover__internal_alias")));
-#else
-#ifndef xmlParseBalancedChunkMemoryRecover
-extern __typeof (xmlParseBalancedChunkMemoryRecover) xmlParseBalancedChunkMemoryRecover__internal_alias __attribute((visibility("hidden")));
-#define xmlParseBalancedChunkMemoryRecover xmlParseBalancedChunkMemoryRecover__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseCDSect
-extern __typeof (xmlParseCDSect) xmlParseCDSect __attribute((alias("xmlParseCDSect__internal_alias")));
-#else
-#ifndef xmlParseCDSect
-extern __typeof (xmlParseCDSect) xmlParseCDSect__internal_alias __attribute((visibility("hidden")));
-#define xmlParseCDSect xmlParseCDSect__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_CATALOG_ENABLED)
-#ifdef bottom_catalog
-#undef xmlParseCatalogFile
-extern __typeof (xmlParseCatalogFile) xmlParseCatalogFile __attribute((alias("xmlParseCatalogFile__internal_alias")));
-#else
-#ifndef xmlParseCatalogFile
-extern __typeof (xmlParseCatalogFile) xmlParseCatalogFile__internal_alias __attribute((visibility("hidden")));
-#define xmlParseCatalogFile xmlParseCatalogFile__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseCharData
-extern __typeof (xmlParseCharData) xmlParseCharData __attribute((alias("xmlParseCharData__internal_alias")));
-#else
-#ifndef xmlParseCharData
-extern __typeof (xmlParseCharData) xmlParseCharData__internal_alias __attribute((visibility("hidden")));
-#define xmlParseCharData xmlParseCharData__internal_alias
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlParseCharEncoding
-extern __typeof (xmlParseCharEncoding) xmlParseCharEncoding __attribute((alias("xmlParseCharEncoding__internal_alias")));
-#else
-#ifndef xmlParseCharEncoding
-extern __typeof (xmlParseCharEncoding) xmlParseCharEncoding__internal_alias __attribute((visibility("hidden")));
-#define xmlParseCharEncoding xmlParseCharEncoding__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseCharRef
-extern __typeof (xmlParseCharRef) xmlParseCharRef __attribute((alias("xmlParseCharRef__internal_alias")));
-#else
-#ifndef xmlParseCharRef
-extern __typeof (xmlParseCharRef) xmlParseCharRef__internal_alias __attribute((visibility("hidden")));
-#define xmlParseCharRef xmlParseCharRef__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_PUSH_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseChunk
-extern __typeof (xmlParseChunk) xmlParseChunk __attribute((alias("xmlParseChunk__internal_alias")));
-#else
-#ifndef xmlParseChunk
-extern __typeof (xmlParseChunk) xmlParseChunk__internal_alias __attribute((visibility("hidden")));
-#define xmlParseChunk xmlParseChunk__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseComment
-extern __typeof (xmlParseComment) xmlParseComment __attribute((alias("xmlParseComment__internal_alias")));
-#else
-#ifndef xmlParseComment
-extern __typeof (xmlParseComment) xmlParseComment__internal_alias __attribute((visibility("hidden")));
-#define xmlParseComment xmlParseComment__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseContent
-extern __typeof (xmlParseContent) xmlParseContent __attribute((alias("xmlParseContent__internal_alias")));
-#else
-#ifndef xmlParseContent
-extern __typeof (xmlParseContent) xmlParseContent__internal_alias __attribute((visibility("hidden")));
-#define xmlParseContent xmlParseContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseCtxtExternalEntity
-extern __typeof (xmlParseCtxtExternalEntity) xmlParseCtxtExternalEntity __attribute((alias("xmlParseCtxtExternalEntity__internal_alias")));
-#else
-#ifndef xmlParseCtxtExternalEntity
-extern __typeof (xmlParseCtxtExternalEntity) xmlParseCtxtExternalEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlParseCtxtExternalEntity xmlParseCtxtExternalEntity__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseDTD
-extern __typeof (xmlParseDTD) xmlParseDTD __attribute((alias("xmlParseDTD__internal_alias")));
-#else
-#ifndef xmlParseDTD
-extern __typeof (xmlParseDTD) xmlParseDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlParseDTD xmlParseDTD__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseDefaultDecl
-extern __typeof (xmlParseDefaultDecl) xmlParseDefaultDecl __attribute((alias("xmlParseDefaultDecl__internal_alias")));
-#else
-#ifndef xmlParseDefaultDecl
-extern __typeof (xmlParseDefaultDecl) xmlParseDefaultDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseDefaultDecl xmlParseDefaultDecl__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseDoc
-extern __typeof (xmlParseDoc) xmlParseDoc __attribute((alias("xmlParseDoc__internal_alias")));
-#else
-#ifndef xmlParseDoc
-extern __typeof (xmlParseDoc) xmlParseDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlParseDoc xmlParseDoc__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseDocTypeDecl
-extern __typeof (xmlParseDocTypeDecl) xmlParseDocTypeDecl __attribute((alias("xmlParseDocTypeDecl__internal_alias")));
-#else
-#ifndef xmlParseDocTypeDecl
-extern __typeof (xmlParseDocTypeDecl) xmlParseDocTypeDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseDocTypeDecl xmlParseDocTypeDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseDocument
-extern __typeof (xmlParseDocument) xmlParseDocument __attribute((alias("xmlParseDocument__internal_alias")));
-#else
-#ifndef xmlParseDocument
-extern __typeof (xmlParseDocument) xmlParseDocument__internal_alias __attribute((visibility("hidden")));
-#define xmlParseDocument xmlParseDocument__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseElement
-extern __typeof (xmlParseElement) xmlParseElement __attribute((alias("xmlParseElement__internal_alias")));
-#else
-#ifndef xmlParseElement
-extern __typeof (xmlParseElement) xmlParseElement__internal_alias __attribute((visibility("hidden")));
-#define xmlParseElement xmlParseElement__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseElementChildrenContentDecl
-extern __typeof (xmlParseElementChildrenContentDecl) xmlParseElementChildrenContentDecl __attribute((alias("xmlParseElementChildrenContentDecl__internal_alias")));
-#else
-#ifndef xmlParseElementChildrenContentDecl
-extern __typeof (xmlParseElementChildrenContentDecl) xmlParseElementChildrenContentDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseElementChildrenContentDecl xmlParseElementChildrenContentDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseElementContentDecl
-extern __typeof (xmlParseElementContentDecl) xmlParseElementContentDecl __attribute((alias("xmlParseElementContentDecl__internal_alias")));
-#else
-#ifndef xmlParseElementContentDecl
-extern __typeof (xmlParseElementContentDecl) xmlParseElementContentDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseElementContentDecl xmlParseElementContentDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseElementDecl
-extern __typeof (xmlParseElementDecl) xmlParseElementDecl __attribute((alias("xmlParseElementDecl__internal_alias")));
-#else
-#ifndef xmlParseElementDecl
-extern __typeof (xmlParseElementDecl) xmlParseElementDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseElementDecl xmlParseElementDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseElementMixedContentDecl
-extern __typeof (xmlParseElementMixedContentDecl) xmlParseElementMixedContentDecl __attribute((alias("xmlParseElementMixedContentDecl__internal_alias")));
-#else
-#ifndef xmlParseElementMixedContentDecl
-extern __typeof (xmlParseElementMixedContentDecl) xmlParseElementMixedContentDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseElementMixedContentDecl xmlParseElementMixedContentDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseEncName
-extern __typeof (xmlParseEncName) xmlParseEncName __attribute((alias("xmlParseEncName__internal_alias")));
-#else
-#ifndef xmlParseEncName
-extern __typeof (xmlParseEncName) xmlParseEncName__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEncName xmlParseEncName__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseEncodingDecl
-extern __typeof (xmlParseEncodingDecl) xmlParseEncodingDecl __attribute((alias("xmlParseEncodingDecl__internal_alias")));
-#else
-#ifndef xmlParseEncodingDecl
-extern __typeof (xmlParseEncodingDecl) xmlParseEncodingDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEncodingDecl xmlParseEncodingDecl__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseEndTag
-extern __typeof (xmlParseEndTag) xmlParseEndTag __attribute((alias("xmlParseEndTag__internal_alias")));
-#else
-#ifndef xmlParseEndTag
-extern __typeof (xmlParseEndTag) xmlParseEndTag__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEndTag xmlParseEndTag__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseEntity
-extern __typeof (xmlParseEntity) xmlParseEntity __attribute((alias("xmlParseEntity__internal_alias")));
-#else
-#ifndef xmlParseEntity
-extern __typeof (xmlParseEntity) xmlParseEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEntity xmlParseEntity__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseEntityDecl
-extern __typeof (xmlParseEntityDecl) xmlParseEntityDecl __attribute((alias("xmlParseEntityDecl__internal_alias")));
-#else
-#ifndef xmlParseEntityDecl
-extern __typeof (xmlParseEntityDecl) xmlParseEntityDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEntityDecl xmlParseEntityDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseEntityRef
-extern __typeof (xmlParseEntityRef) xmlParseEntityRef __attribute((alias("xmlParseEntityRef__internal_alias")));
-#else
-#ifndef xmlParseEntityRef
-extern __typeof (xmlParseEntityRef) xmlParseEntityRef__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEntityRef xmlParseEntityRef__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseEntityValue
-extern __typeof (xmlParseEntityValue) xmlParseEntityValue __attribute((alias("xmlParseEntityValue__internal_alias")));
-#else
-#ifndef xmlParseEntityValue
-extern __typeof (xmlParseEntityValue) xmlParseEntityValue__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEntityValue xmlParseEntityValue__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseEnumeratedType
-extern __typeof (xmlParseEnumeratedType) xmlParseEnumeratedType __attribute((alias("xmlParseEnumeratedType__internal_alias")));
-#else
-#ifndef xmlParseEnumeratedType
-extern __typeof (xmlParseEnumeratedType) xmlParseEnumeratedType__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEnumeratedType xmlParseEnumeratedType__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseEnumerationType
-extern __typeof (xmlParseEnumerationType) xmlParseEnumerationType __attribute((alias("xmlParseEnumerationType__internal_alias")));
-#else
-#ifndef xmlParseEnumerationType
-extern __typeof (xmlParseEnumerationType) xmlParseEnumerationType__internal_alias __attribute((visibility("hidden")));
-#define xmlParseEnumerationType xmlParseEnumerationType__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseExtParsedEnt
-extern __typeof (xmlParseExtParsedEnt) xmlParseExtParsedEnt __attribute((alias("xmlParseExtParsedEnt__internal_alias")));
-#else
-#ifndef xmlParseExtParsedEnt
-extern __typeof (xmlParseExtParsedEnt) xmlParseExtParsedEnt__internal_alias __attribute((visibility("hidden")));
-#define xmlParseExtParsedEnt xmlParseExtParsedEnt__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseExternalEntity
-extern __typeof (xmlParseExternalEntity) xmlParseExternalEntity __attribute((alias("xmlParseExternalEntity__internal_alias")));
-#else
-#ifndef xmlParseExternalEntity
-extern __typeof (xmlParseExternalEntity) xmlParseExternalEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlParseExternalEntity xmlParseExternalEntity__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseExternalID
-extern __typeof (xmlParseExternalID) xmlParseExternalID __attribute((alias("xmlParseExternalID__internal_alias")));
-#else
-#ifndef xmlParseExternalID
-extern __typeof (xmlParseExternalID) xmlParseExternalID__internal_alias __attribute((visibility("hidden")));
-#define xmlParseExternalID xmlParseExternalID__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseExternalSubset
-extern __typeof (xmlParseExternalSubset) xmlParseExternalSubset __attribute((alias("xmlParseExternalSubset__internal_alias")));
-#else
-#ifndef xmlParseExternalSubset
-extern __typeof (xmlParseExternalSubset) xmlParseExternalSubset__internal_alias __attribute((visibility("hidden")));
-#define xmlParseExternalSubset xmlParseExternalSubset__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseFile
-extern __typeof (xmlParseFile) xmlParseFile __attribute((alias("xmlParseFile__internal_alias")));
-#else
-#ifndef xmlParseFile
-extern __typeof (xmlParseFile) xmlParseFile__internal_alias __attribute((visibility("hidden")));
-#define xmlParseFile xmlParseFile__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseInNodeContext
-extern __typeof (xmlParseInNodeContext) xmlParseInNodeContext __attribute((alias("xmlParseInNodeContext__internal_alias")));
-#else
-#ifndef xmlParseInNodeContext
-extern __typeof (xmlParseInNodeContext) xmlParseInNodeContext__internal_alias __attribute((visibility("hidden")));
-#define xmlParseInNodeContext xmlParseInNodeContext__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseMarkupDecl
-extern __typeof (xmlParseMarkupDecl) xmlParseMarkupDecl __attribute((alias("xmlParseMarkupDecl__internal_alias")));
-#else
-#ifndef xmlParseMarkupDecl
-extern __typeof (xmlParseMarkupDecl) xmlParseMarkupDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseMarkupDecl xmlParseMarkupDecl__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseMemory
-extern __typeof (xmlParseMemory) xmlParseMemory __attribute((alias("xmlParseMemory__internal_alias")));
-#else
-#ifndef xmlParseMemory
-extern __typeof (xmlParseMemory) xmlParseMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlParseMemory xmlParseMemory__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseMisc
-extern __typeof (xmlParseMisc) xmlParseMisc __attribute((alias("xmlParseMisc__internal_alias")));
-#else
-#ifndef xmlParseMisc
-extern __typeof (xmlParseMisc) xmlParseMisc__internal_alias __attribute((visibility("hidden")));
-#define xmlParseMisc xmlParseMisc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseName
-extern __typeof (xmlParseName) xmlParseName __attribute((alias("xmlParseName__internal_alias")));
-#else
-#ifndef xmlParseName
-extern __typeof (xmlParseName) xmlParseName__internal_alias __attribute((visibility("hidden")));
-#define xmlParseName xmlParseName__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlParseNamespace
-extern __typeof (xmlParseNamespace) xmlParseNamespace __attribute((alias("xmlParseNamespace__internal_alias")));
-#else
-#ifndef xmlParseNamespace
-extern __typeof (xmlParseNamespace) xmlParseNamespace__internal_alias __attribute((visibility("hidden")));
-#define xmlParseNamespace xmlParseNamespace__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseNmtoken
-extern __typeof (xmlParseNmtoken) xmlParseNmtoken __attribute((alias("xmlParseNmtoken__internal_alias")));
-#else
-#ifndef xmlParseNmtoken
-extern __typeof (xmlParseNmtoken) xmlParseNmtoken__internal_alias __attribute((visibility("hidden")));
-#define xmlParseNmtoken xmlParseNmtoken__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseNotationDecl
-extern __typeof (xmlParseNotationDecl) xmlParseNotationDecl __attribute((alias("xmlParseNotationDecl__internal_alias")));
-#else
-#ifndef xmlParseNotationDecl
-extern __typeof (xmlParseNotationDecl) xmlParseNotationDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseNotationDecl xmlParseNotationDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseNotationType
-extern __typeof (xmlParseNotationType) xmlParseNotationType __attribute((alias("xmlParseNotationType__internal_alias")));
-#else
-#ifndef xmlParseNotationType
-extern __typeof (xmlParseNotationType) xmlParseNotationType__internal_alias __attribute((visibility("hidden")));
-#define xmlParseNotationType xmlParseNotationType__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParsePEReference
-extern __typeof (xmlParsePEReference) xmlParsePEReference __attribute((alias("xmlParsePEReference__internal_alias")));
-#else
-#ifndef xmlParsePEReference
-extern __typeof (xmlParsePEReference) xmlParsePEReference__internal_alias __attribute((visibility("hidden")));
-#define xmlParsePEReference xmlParsePEReference__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParsePI
-extern __typeof (xmlParsePI) xmlParsePI __attribute((alias("xmlParsePI__internal_alias")));
-#else
-#ifndef xmlParsePI
-extern __typeof (xmlParsePI) xmlParsePI__internal_alias __attribute((visibility("hidden")));
-#define xmlParsePI xmlParsePI__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParsePITarget
-extern __typeof (xmlParsePITarget) xmlParsePITarget __attribute((alias("xmlParsePITarget__internal_alias")));
-#else
-#ifndef xmlParsePITarget
-extern __typeof (xmlParsePITarget) xmlParsePITarget__internal_alias __attribute((visibility("hidden")));
-#define xmlParsePITarget xmlParsePITarget__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParsePubidLiteral
-extern __typeof (xmlParsePubidLiteral) xmlParsePubidLiteral __attribute((alias("xmlParsePubidLiteral__internal_alias")));
-#else
-#ifndef xmlParsePubidLiteral
-extern __typeof (xmlParsePubidLiteral) xmlParsePubidLiteral__internal_alias __attribute((visibility("hidden")));
-#define xmlParsePubidLiteral xmlParsePubidLiteral__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlParseQuotedString
-extern __typeof (xmlParseQuotedString) xmlParseQuotedString __attribute((alias("xmlParseQuotedString__internal_alias")));
-#else
-#ifndef xmlParseQuotedString
-extern __typeof (xmlParseQuotedString) xmlParseQuotedString__internal_alias __attribute((visibility("hidden")));
-#define xmlParseQuotedString xmlParseQuotedString__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseReference
-extern __typeof (xmlParseReference) xmlParseReference __attribute((alias("xmlParseReference__internal_alias")));
-#else
-#ifndef xmlParseReference
-extern __typeof (xmlParseReference) xmlParseReference__internal_alias __attribute((visibility("hidden")));
-#define xmlParseReference xmlParseReference__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseSDDecl
-extern __typeof (xmlParseSDDecl) xmlParseSDDecl __attribute((alias("xmlParseSDDecl__internal_alias")));
-#else
-#ifndef xmlParseSDDecl
-extern __typeof (xmlParseSDDecl) xmlParseSDDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseSDDecl xmlParseSDDecl__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlParseStartTag
-extern __typeof (xmlParseStartTag) xmlParseStartTag __attribute((alias("xmlParseStartTag__internal_alias")));
-#else
-#ifndef xmlParseStartTag
-extern __typeof (xmlParseStartTag) xmlParseStartTag__internal_alias __attribute((visibility("hidden")));
-#define xmlParseStartTag xmlParseStartTag__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseSystemLiteral
-extern __typeof (xmlParseSystemLiteral) xmlParseSystemLiteral __attribute((alias("xmlParseSystemLiteral__internal_alias")));
-#else
-#ifndef xmlParseSystemLiteral
-extern __typeof (xmlParseSystemLiteral) xmlParseSystemLiteral__internal_alias __attribute((visibility("hidden")));
-#define xmlParseSystemLiteral xmlParseSystemLiteral__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseTextDecl
-extern __typeof (xmlParseTextDecl) xmlParseTextDecl __attribute((alias("xmlParseTextDecl__internal_alias")));
-#else
-#ifndef xmlParseTextDecl
-extern __typeof (xmlParseTextDecl) xmlParseTextDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseTextDecl xmlParseTextDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlParseURI
-extern __typeof (xmlParseURI) xmlParseURI __attribute((alias("xmlParseURI__internal_alias")));
-#else
-#ifndef xmlParseURI
-extern __typeof (xmlParseURI) xmlParseURI__internal_alias __attribute((visibility("hidden")));
-#define xmlParseURI xmlParseURI__internal_alias
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlParseURIRaw
-extern __typeof (xmlParseURIRaw) xmlParseURIRaw __attribute((alias("xmlParseURIRaw__internal_alias")));
-#else
-#ifndef xmlParseURIRaw
-extern __typeof (xmlParseURIRaw) xmlParseURIRaw__internal_alias __attribute((visibility("hidden")));
-#define xmlParseURIRaw xmlParseURIRaw__internal_alias
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlParseURIReference
-extern __typeof (xmlParseURIReference) xmlParseURIReference __attribute((alias("xmlParseURIReference__internal_alias")));
-#else
-#ifndef xmlParseURIReference
-extern __typeof (xmlParseURIReference) xmlParseURIReference__internal_alias __attribute((visibility("hidden")));
-#define xmlParseURIReference xmlParseURIReference__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseVersionInfo
-extern __typeof (xmlParseVersionInfo) xmlParseVersionInfo __attribute((alias("xmlParseVersionInfo__internal_alias")));
-#else
-#ifndef xmlParseVersionInfo
-extern __typeof (xmlParseVersionInfo) xmlParseVersionInfo__internal_alias __attribute((visibility("hidden")));
-#define xmlParseVersionInfo xmlParseVersionInfo__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseVersionNum
-extern __typeof (xmlParseVersionNum) xmlParseVersionNum __attribute((alias("xmlParseVersionNum__internal_alias")));
-#else
-#ifndef xmlParseVersionNum
-extern __typeof (xmlParseVersionNum) xmlParseVersionNum__internal_alias __attribute((visibility("hidden")));
-#define xmlParseVersionNum xmlParseVersionNum__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParseXMLDecl
-extern __typeof (xmlParseXMLDecl) xmlParseXMLDecl __attribute((alias("xmlParseXMLDecl__internal_alias")));
-#else
-#ifndef xmlParseXMLDecl
-extern __typeof (xmlParseXMLDecl) xmlParseXMLDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlParseXMLDecl xmlParseXMLDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlParserAddNodeInfo
-extern __typeof (xmlParserAddNodeInfo) xmlParserAddNodeInfo __attribute((alias("xmlParserAddNodeInfo__internal_alias")));
-#else
-#ifndef xmlParserAddNodeInfo
-extern __typeof (xmlParserAddNodeInfo) xmlParserAddNodeInfo__internal_alias __attribute((visibility("hidden")));
-#define xmlParserAddNodeInfo xmlParserAddNodeInfo__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlParserError
-extern __typeof (xmlParserError) xmlParserError __attribute((alias("xmlParserError__internal_alias")));
-#else
-#ifndef xmlParserError
-extern __typeof (xmlParserError) xmlParserError__internal_alias __attribute((visibility("hidden")));
-#define xmlParserError xmlParserError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlParserFindNodeInfo
-extern __typeof (xmlParserFindNodeInfo) xmlParserFindNodeInfo __attribute((alias("xmlParserFindNodeInfo__internal_alias")));
-#else
-#ifndef xmlParserFindNodeInfo
-extern __typeof (xmlParserFindNodeInfo) xmlParserFindNodeInfo__internal_alias __attribute((visibility("hidden")));
-#define xmlParserFindNodeInfo xmlParserFindNodeInfo__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlParserFindNodeInfoIndex
-extern __typeof (xmlParserFindNodeInfoIndex) xmlParserFindNodeInfoIndex __attribute((alias("xmlParserFindNodeInfoIndex__internal_alias")));
-#else
-#ifndef xmlParserFindNodeInfoIndex
-extern __typeof (xmlParserFindNodeInfoIndex) xmlParserFindNodeInfoIndex__internal_alias __attribute((visibility("hidden")));
-#define xmlParserFindNodeInfoIndex xmlParserFindNodeInfoIndex__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserGetDirectory
-extern __typeof (xmlParserGetDirectory) xmlParserGetDirectory __attribute((alias("xmlParserGetDirectory__internal_alias")));
-#else
-#ifndef xmlParserGetDirectory
-extern __typeof (xmlParserGetDirectory) xmlParserGetDirectory__internal_alias __attribute((visibility("hidden")));
-#define xmlParserGetDirectory xmlParserGetDirectory__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlParserHandlePEReference
-extern __typeof (xmlParserHandlePEReference) xmlParserHandlePEReference __attribute((alias("xmlParserHandlePEReference__internal_alias")));
-#else
-#ifndef xmlParserHandlePEReference
-extern __typeof (xmlParserHandlePEReference) xmlParserHandlePEReference__internal_alias __attribute((visibility("hidden")));
-#define xmlParserHandlePEReference xmlParserHandlePEReference__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlParserHandleReference
-extern __typeof (xmlParserHandleReference) xmlParserHandleReference __attribute((alias("xmlParserHandleReference__internal_alias")));
-#else
-#ifndef xmlParserHandleReference
-extern __typeof (xmlParserHandleReference) xmlParserHandleReference__internal_alias __attribute((visibility("hidden")));
-#define xmlParserHandleReference xmlParserHandleReference__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferCreateFd
-extern __typeof (xmlParserInputBufferCreateFd) xmlParserInputBufferCreateFd __attribute((alias("xmlParserInputBufferCreateFd__internal_alias")));
-#else
-#ifndef xmlParserInputBufferCreateFd
-extern __typeof (xmlParserInputBufferCreateFd) xmlParserInputBufferCreateFd__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferCreateFd xmlParserInputBufferCreateFd__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferCreateFile
-extern __typeof (xmlParserInputBufferCreateFile) xmlParserInputBufferCreateFile __attribute((alias("xmlParserInputBufferCreateFile__internal_alias")));
-#else
-#ifndef xmlParserInputBufferCreateFile
-extern __typeof (xmlParserInputBufferCreateFile) xmlParserInputBufferCreateFile__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferCreateFile xmlParserInputBufferCreateFile__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferCreateFilename
-extern __typeof (xmlParserInputBufferCreateFilename) xmlParserInputBufferCreateFilename __attribute((alias("xmlParserInputBufferCreateFilename__internal_alias")));
-#else
-#ifndef xmlParserInputBufferCreateFilename
-extern __typeof (xmlParserInputBufferCreateFilename) xmlParserInputBufferCreateFilename__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferCreateFilename xmlParserInputBufferCreateFilename__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferCreateFilenameDefault
-extern __typeof (xmlParserInputBufferCreateFilenameDefault) xmlParserInputBufferCreateFilenameDefault __attribute((alias("xmlParserInputBufferCreateFilenameDefault__internal_alias")));
-#else
-#ifndef xmlParserInputBufferCreateFilenameDefault
-extern __typeof (xmlParserInputBufferCreateFilenameDefault) xmlParserInputBufferCreateFilenameDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferCreateFilenameDefault xmlParserInputBufferCreateFilenameDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferCreateIO
-extern __typeof (xmlParserInputBufferCreateIO) xmlParserInputBufferCreateIO __attribute((alias("xmlParserInputBufferCreateIO__internal_alias")));
-#else
-#ifndef xmlParserInputBufferCreateIO
-extern __typeof (xmlParserInputBufferCreateIO) xmlParserInputBufferCreateIO__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferCreateIO xmlParserInputBufferCreateIO__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferCreateMem
-extern __typeof (xmlParserInputBufferCreateMem) xmlParserInputBufferCreateMem __attribute((alias("xmlParserInputBufferCreateMem__internal_alias")));
-#else
-#ifndef xmlParserInputBufferCreateMem
-extern __typeof (xmlParserInputBufferCreateMem) xmlParserInputBufferCreateMem__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferCreateMem xmlParserInputBufferCreateMem__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferCreateStatic
-extern __typeof (xmlParserInputBufferCreateStatic) xmlParserInputBufferCreateStatic __attribute((alias("xmlParserInputBufferCreateStatic__internal_alias")));
-#else
-#ifndef xmlParserInputBufferCreateStatic
-extern __typeof (xmlParserInputBufferCreateStatic) xmlParserInputBufferCreateStatic__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferCreateStatic xmlParserInputBufferCreateStatic__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferGrow
-extern __typeof (xmlParserInputBufferGrow) xmlParserInputBufferGrow __attribute((alias("xmlParserInputBufferGrow__internal_alias")));
-#else
-#ifndef xmlParserInputBufferGrow
-extern __typeof (xmlParserInputBufferGrow) xmlParserInputBufferGrow__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferGrow xmlParserInputBufferGrow__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferPush
-extern __typeof (xmlParserInputBufferPush) xmlParserInputBufferPush __attribute((alias("xmlParserInputBufferPush__internal_alias")));
-#else
-#ifndef xmlParserInputBufferPush
-extern __typeof (xmlParserInputBufferPush) xmlParserInputBufferPush__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferPush xmlParserInputBufferPush__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlParserInputBufferRead
-extern __typeof (xmlParserInputBufferRead) xmlParserInputBufferRead __attribute((alias("xmlParserInputBufferRead__internal_alias")));
-#else
-#ifndef xmlParserInputBufferRead
-extern __typeof (xmlParserInputBufferRead) xmlParserInputBufferRead__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputBufferRead xmlParserInputBufferRead__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlParserInputGrow
-extern __typeof (xmlParserInputGrow) xmlParserInputGrow __attribute((alias("xmlParserInputGrow__internal_alias")));
-#else
-#ifndef xmlParserInputGrow
-extern __typeof (xmlParserInputGrow) xmlParserInputGrow__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputGrow xmlParserInputGrow__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlParserInputRead
-extern __typeof (xmlParserInputRead) xmlParserInputRead __attribute((alias("xmlParserInputRead__internal_alias")));
-#else
-#ifndef xmlParserInputRead
-extern __typeof (xmlParserInputRead) xmlParserInputRead__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputRead xmlParserInputRead__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlParserInputShrink
-extern __typeof (xmlParserInputShrink) xmlParserInputShrink __attribute((alias("xmlParserInputShrink__internal_alias")));
-#else
-#ifndef xmlParserInputShrink
-extern __typeof (xmlParserInputShrink) xmlParserInputShrink__internal_alias __attribute((visibility("hidden")));
-#define xmlParserInputShrink xmlParserInputShrink__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlParserPrintFileContext
-extern __typeof (xmlParserPrintFileContext) xmlParserPrintFileContext __attribute((alias("xmlParserPrintFileContext__internal_alias")));
-#else
-#ifndef xmlParserPrintFileContext
-extern __typeof (xmlParserPrintFileContext) xmlParserPrintFileContext__internal_alias __attribute((visibility("hidden")));
-#define xmlParserPrintFileContext xmlParserPrintFileContext__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlParserPrintFileInfo
-extern __typeof (xmlParserPrintFileInfo) xmlParserPrintFileInfo __attribute((alias("xmlParserPrintFileInfo__internal_alias")));
-#else
-#ifndef xmlParserPrintFileInfo
-extern __typeof (xmlParserPrintFileInfo) xmlParserPrintFileInfo__internal_alias __attribute((visibility("hidden")));
-#define xmlParserPrintFileInfo xmlParserPrintFileInfo__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlParserValidityError
-extern __typeof (xmlParserValidityError) xmlParserValidityError __attribute((alias("xmlParserValidityError__internal_alias")));
-#else
-#ifndef xmlParserValidityError
-extern __typeof (xmlParserValidityError) xmlParserValidityError__internal_alias __attribute((visibility("hidden")));
-#define xmlParserValidityError xmlParserValidityError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlParserValidityWarning
-extern __typeof (xmlParserValidityWarning) xmlParserValidityWarning __attribute((alias("xmlParserValidityWarning__internal_alias")));
-#else
-#ifndef xmlParserValidityWarning
-extern __typeof (xmlParserValidityWarning) xmlParserValidityWarning__internal_alias __attribute((visibility("hidden")));
-#define xmlParserValidityWarning xmlParserValidityWarning__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlParserWarning
-extern __typeof (xmlParserWarning) xmlParserWarning __attribute((alias("xmlParserWarning__internal_alias")));
-#else
-#ifndef xmlParserWarning
-extern __typeof (xmlParserWarning) xmlParserWarning__internal_alias __attribute((visibility("hidden")));
-#define xmlParserWarning xmlParserWarning__internal_alias
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlPathToURI
-extern __typeof (xmlPathToURI) xmlPathToURI __attribute((alias("xmlPathToURI__internal_alias")));
-#else
-#ifndef xmlPathToURI
-extern __typeof (xmlPathToURI) xmlPathToURI__internal_alias __attribute((visibility("hidden")));
-#define xmlPathToURI xmlPathToURI__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlPatternFromRoot
-extern __typeof (xmlPatternFromRoot) xmlPatternFromRoot __attribute((alias("xmlPatternFromRoot__internal_alias")));
-#else
-#ifndef xmlPatternFromRoot
-extern __typeof (xmlPatternFromRoot) xmlPatternFromRoot__internal_alias __attribute((visibility("hidden")));
-#define xmlPatternFromRoot xmlPatternFromRoot__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlPatternGetStreamCtxt
-extern __typeof (xmlPatternGetStreamCtxt) xmlPatternGetStreamCtxt __attribute((alias("xmlPatternGetStreamCtxt__internal_alias")));
-#else
-#ifndef xmlPatternGetStreamCtxt
-extern __typeof (xmlPatternGetStreamCtxt) xmlPatternGetStreamCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlPatternGetStreamCtxt xmlPatternGetStreamCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlPatternMatch
-extern __typeof (xmlPatternMatch) xmlPatternMatch __attribute((alias("xmlPatternMatch__internal_alias")));
-#else
-#ifndef xmlPatternMatch
-extern __typeof (xmlPatternMatch) xmlPatternMatch__internal_alias __attribute((visibility("hidden")));
-#define xmlPatternMatch xmlPatternMatch__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlPatternMaxDepth
-extern __typeof (xmlPatternMaxDepth) xmlPatternMaxDepth __attribute((alias("xmlPatternMaxDepth__internal_alias")));
-#else
-#ifndef xmlPatternMaxDepth
-extern __typeof (xmlPatternMaxDepth) xmlPatternMaxDepth__internal_alias __attribute((visibility("hidden")));
-#define xmlPatternMaxDepth xmlPatternMaxDepth__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlPatternMinDepth
-extern __typeof (xmlPatternMinDepth) xmlPatternMinDepth __attribute((alias("xmlPatternMinDepth__internal_alias")));
-#else
-#ifndef xmlPatternMinDepth
-extern __typeof (xmlPatternMinDepth) xmlPatternMinDepth__internal_alias __attribute((visibility("hidden")));
-#define xmlPatternMinDepth xmlPatternMinDepth__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlPatternStreamable
-extern __typeof (xmlPatternStreamable) xmlPatternStreamable __attribute((alias("xmlPatternStreamable__internal_alias")));
-#else
-#ifndef xmlPatternStreamable
-extern __typeof (xmlPatternStreamable) xmlPatternStreamable__internal_alias __attribute((visibility("hidden")));
-#define xmlPatternStreamable xmlPatternStreamable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlPatterncompile
-extern __typeof (xmlPatterncompile) xmlPatterncompile __attribute((alias("xmlPatterncompile__internal_alias")));
-#else
-#ifndef xmlPatterncompile
-extern __typeof (xmlPatterncompile) xmlPatterncompile__internal_alias __attribute((visibility("hidden")));
-#define xmlPatterncompile xmlPatterncompile__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlPedanticParserDefault
-extern __typeof (xmlPedanticParserDefault) xmlPedanticParserDefault __attribute((alias("xmlPedanticParserDefault__internal_alias")));
-#else
-#ifndef xmlPedanticParserDefault
-extern __typeof (xmlPedanticParserDefault) xmlPedanticParserDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlPedanticParserDefault xmlPedanticParserDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlPopInput
-extern __typeof (xmlPopInput) xmlPopInput __attribute((alias("xmlPopInput__internal_alias")));
-#else
-#ifndef xmlPopInput
-extern __typeof (xmlPopInput) xmlPopInput__internal_alias __attribute((visibility("hidden")));
-#define xmlPopInput xmlPopInput__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlPopInputCallbacks
-extern __typeof (xmlPopInputCallbacks) xmlPopInputCallbacks __attribute((alias("xmlPopInputCallbacks__internal_alias")));
-#else
-#ifndef xmlPopInputCallbacks
-extern __typeof (xmlPopInputCallbacks) xmlPopInputCallbacks__internal_alias __attribute((visibility("hidden")));
-#define xmlPopInputCallbacks xmlPopInputCallbacks__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlPreviousElementSibling
-extern __typeof (xmlPreviousElementSibling) xmlPreviousElementSibling __attribute((alias("xmlPreviousElementSibling__internal_alias")));
-#else
-#ifndef xmlPreviousElementSibling
-extern __typeof (xmlPreviousElementSibling) xmlPreviousElementSibling__internal_alias __attribute((visibility("hidden")));
-#define xmlPreviousElementSibling xmlPreviousElementSibling__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlPrintURI
-extern __typeof (xmlPrintURI) xmlPrintURI __attribute((alias("xmlPrintURI__internal_alias")));
-#else
-#ifndef xmlPrintURI
-extern __typeof (xmlPrintURI) xmlPrintURI__internal_alias __attribute((visibility("hidden")));
-#define xmlPrintURI xmlPrintURI__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlPushInput
-extern __typeof (xmlPushInput) xmlPushInput __attribute((alias("xmlPushInput__internal_alias")));
-#else
-#ifndef xmlPushInput
-extern __typeof (xmlPushInput) xmlPushInput__internal_alias __attribute((visibility("hidden")));
-#define xmlPushInput xmlPushInput__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlRMutexLock
-extern __typeof (xmlRMutexLock) xmlRMutexLock __attribute((alias("xmlRMutexLock__internal_alias")));
-#else
-#ifndef xmlRMutexLock
-extern __typeof (xmlRMutexLock) xmlRMutexLock__internal_alias __attribute((visibility("hidden")));
-#define xmlRMutexLock xmlRMutexLock__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlRMutexUnlock
-extern __typeof (xmlRMutexUnlock) xmlRMutexUnlock __attribute((alias("xmlRMutexUnlock__internal_alias")));
-#else
-#ifndef xmlRMutexUnlock
-extern __typeof (xmlRMutexUnlock) xmlRMutexUnlock__internal_alias __attribute((visibility("hidden")));
-#define xmlRMutexUnlock xmlRMutexUnlock__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlReadDoc
-extern __typeof (xmlReadDoc) xmlReadDoc __attribute((alias("xmlReadDoc__internal_alias")));
-#else
-#ifndef xmlReadDoc
-extern __typeof (xmlReadDoc) xmlReadDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlReadDoc xmlReadDoc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlReadFd
-extern __typeof (xmlReadFd) xmlReadFd __attribute((alias("xmlReadFd__internal_alias")));
-#else
-#ifndef xmlReadFd
-extern __typeof (xmlReadFd) xmlReadFd__internal_alias __attribute((visibility("hidden")));
-#define xmlReadFd xmlReadFd__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlReadFile
-extern __typeof (xmlReadFile) xmlReadFile __attribute((alias("xmlReadFile__internal_alias")));
-#else
-#ifndef xmlReadFile
-extern __typeof (xmlReadFile) xmlReadFile__internal_alias __attribute((visibility("hidden")));
-#define xmlReadFile xmlReadFile__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlReadIO
-extern __typeof (xmlReadIO) xmlReadIO __attribute((alias("xmlReadIO__internal_alias")));
-#else
-#ifndef xmlReadIO
-extern __typeof (xmlReadIO) xmlReadIO__internal_alias __attribute((visibility("hidden")));
-#define xmlReadIO xmlReadIO__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlReadMemory
-extern __typeof (xmlReadMemory) xmlReadMemory __attribute((alias("xmlReadMemory__internal_alias")));
-#else
-#ifndef xmlReadMemory
-extern __typeof (xmlReadMemory) xmlReadMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlReadMemory xmlReadMemory__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderForDoc
-extern __typeof (xmlReaderForDoc) xmlReaderForDoc __attribute((alias("xmlReaderForDoc__internal_alias")));
-#else
-#ifndef xmlReaderForDoc
-extern __typeof (xmlReaderForDoc) xmlReaderForDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderForDoc xmlReaderForDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderForFd
-extern __typeof (xmlReaderForFd) xmlReaderForFd __attribute((alias("xmlReaderForFd__internal_alias")));
-#else
-#ifndef xmlReaderForFd
-extern __typeof (xmlReaderForFd) xmlReaderForFd__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderForFd xmlReaderForFd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderForFile
-extern __typeof (xmlReaderForFile) xmlReaderForFile __attribute((alias("xmlReaderForFile__internal_alias")));
-#else
-#ifndef xmlReaderForFile
-extern __typeof (xmlReaderForFile) xmlReaderForFile__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderForFile xmlReaderForFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderForIO
-extern __typeof (xmlReaderForIO) xmlReaderForIO __attribute((alias("xmlReaderForIO__internal_alias")));
-#else
-#ifndef xmlReaderForIO
-extern __typeof (xmlReaderForIO) xmlReaderForIO__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderForIO xmlReaderForIO__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderForMemory
-extern __typeof (xmlReaderForMemory) xmlReaderForMemory __attribute((alias("xmlReaderForMemory__internal_alias")));
-#else
-#ifndef xmlReaderForMemory
-extern __typeof (xmlReaderForMemory) xmlReaderForMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderForMemory xmlReaderForMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderNewDoc
-extern __typeof (xmlReaderNewDoc) xmlReaderNewDoc __attribute((alias("xmlReaderNewDoc__internal_alias")));
-#else
-#ifndef xmlReaderNewDoc
-extern __typeof (xmlReaderNewDoc) xmlReaderNewDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderNewDoc xmlReaderNewDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderNewFd
-extern __typeof (xmlReaderNewFd) xmlReaderNewFd __attribute((alias("xmlReaderNewFd__internal_alias")));
-#else
-#ifndef xmlReaderNewFd
-extern __typeof (xmlReaderNewFd) xmlReaderNewFd__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderNewFd xmlReaderNewFd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderNewFile
-extern __typeof (xmlReaderNewFile) xmlReaderNewFile __attribute((alias("xmlReaderNewFile__internal_alias")));
-#else
-#ifndef xmlReaderNewFile
-extern __typeof (xmlReaderNewFile) xmlReaderNewFile__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderNewFile xmlReaderNewFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderNewIO
-extern __typeof (xmlReaderNewIO) xmlReaderNewIO __attribute((alias("xmlReaderNewIO__internal_alias")));
-#else
-#ifndef xmlReaderNewIO
-extern __typeof (xmlReaderNewIO) xmlReaderNewIO__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderNewIO xmlReaderNewIO__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderNewMemory
-extern __typeof (xmlReaderNewMemory) xmlReaderNewMemory __attribute((alias("xmlReaderNewMemory__internal_alias")));
-#else
-#ifndef xmlReaderNewMemory
-extern __typeof (xmlReaderNewMemory) xmlReaderNewMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderNewMemory xmlReaderNewMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderNewWalker
-extern __typeof (xmlReaderNewWalker) xmlReaderNewWalker __attribute((alias("xmlReaderNewWalker__internal_alias")));
-#else
-#ifndef xmlReaderNewWalker
-extern __typeof (xmlReaderNewWalker) xmlReaderNewWalker__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderNewWalker xmlReaderNewWalker__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlReaderWalker
-extern __typeof (xmlReaderWalker) xmlReaderWalker __attribute((alias("xmlReaderWalker__internal_alias")));
-#else
-#ifndef xmlReaderWalker
-extern __typeof (xmlReaderWalker) xmlReaderWalker__internal_alias __attribute((visibility("hidden")));
-#define xmlReaderWalker xmlReaderWalker__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlmemory
-#undef xmlReallocLoc
-extern __typeof (xmlReallocLoc) xmlReallocLoc __attribute((alias("xmlReallocLoc__internal_alias")));
-#else
-#ifndef xmlReallocLoc
-extern __typeof (xmlReallocLoc) xmlReallocLoc__internal_alias __attribute((visibility("hidden")));
-#define xmlReallocLoc xmlReallocLoc__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef bottom_tree
-#undef xmlReconciliateNs
-extern __typeof (xmlReconciliateNs) xmlReconciliateNs __attribute((alias("xmlReconciliateNs__internal_alias")));
-#else
-#ifndef xmlReconciliateNs
-extern __typeof (xmlReconciliateNs) xmlReconciliateNs__internal_alias __attribute((visibility("hidden")));
-#define xmlReconciliateNs xmlReconciliateNs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlRecoverDoc
-extern __typeof (xmlRecoverDoc) xmlRecoverDoc __attribute((alias("xmlRecoverDoc__internal_alias")));
-#else
-#ifndef xmlRecoverDoc
-extern __typeof (xmlRecoverDoc) xmlRecoverDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlRecoverDoc xmlRecoverDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlRecoverFile
-extern __typeof (xmlRecoverFile) xmlRecoverFile __attribute((alias("xmlRecoverFile__internal_alias")));
-#else
-#ifndef xmlRecoverFile
-extern __typeof (xmlRecoverFile) xmlRecoverFile__internal_alias __attribute((visibility("hidden")));
-#define xmlRecoverFile xmlRecoverFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlRecoverMemory
-extern __typeof (xmlRecoverMemory) xmlRecoverMemory __attribute((alias("xmlRecoverMemory__internal_alias")));
-#else
-#ifndef xmlRecoverMemory
-extern __typeof (xmlRecoverMemory) xmlRecoverMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlRecoverMemory xmlRecoverMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegExecErrInfo
-extern __typeof (xmlRegExecErrInfo) xmlRegExecErrInfo __attribute((alias("xmlRegExecErrInfo__internal_alias")));
-#else
-#ifndef xmlRegExecErrInfo
-extern __typeof (xmlRegExecErrInfo) xmlRegExecErrInfo__internal_alias __attribute((visibility("hidden")));
-#define xmlRegExecErrInfo xmlRegExecErrInfo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegExecNextValues
-extern __typeof (xmlRegExecNextValues) xmlRegExecNextValues __attribute((alias("xmlRegExecNextValues__internal_alias")));
-#else
-#ifndef xmlRegExecNextValues
-extern __typeof (xmlRegExecNextValues) xmlRegExecNextValues__internal_alias __attribute((visibility("hidden")));
-#define xmlRegExecNextValues xmlRegExecNextValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegExecPushString
-extern __typeof (xmlRegExecPushString) xmlRegExecPushString __attribute((alias("xmlRegExecPushString__internal_alias")));
-#else
-#ifndef xmlRegExecPushString
-extern __typeof (xmlRegExecPushString) xmlRegExecPushString__internal_alias __attribute((visibility("hidden")));
-#define xmlRegExecPushString xmlRegExecPushString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegExecPushString2
-extern __typeof (xmlRegExecPushString2) xmlRegExecPushString2 __attribute((alias("xmlRegExecPushString2__internal_alias")));
-#else
-#ifndef xmlRegExecPushString2
-extern __typeof (xmlRegExecPushString2) xmlRegExecPushString2__internal_alias __attribute((visibility("hidden")));
-#define xmlRegExecPushString2 xmlRegExecPushString2__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegFreeExecCtxt
-extern __typeof (xmlRegFreeExecCtxt) xmlRegFreeExecCtxt __attribute((alias("xmlRegFreeExecCtxt__internal_alias")));
-#else
-#ifndef xmlRegFreeExecCtxt
-extern __typeof (xmlRegFreeExecCtxt) xmlRegFreeExecCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlRegFreeExecCtxt xmlRegFreeExecCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegFreeRegexp
-extern __typeof (xmlRegFreeRegexp) xmlRegFreeRegexp __attribute((alias("xmlRegFreeRegexp__internal_alias")));
-#else
-#ifndef xmlRegFreeRegexp
-extern __typeof (xmlRegFreeRegexp) xmlRegFreeRegexp__internal_alias __attribute((visibility("hidden")));
-#define xmlRegFreeRegexp xmlRegFreeRegexp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegNewExecCtxt
-extern __typeof (xmlRegNewExecCtxt) xmlRegNewExecCtxt __attribute((alias("xmlRegNewExecCtxt__internal_alias")));
-#else
-#ifndef xmlRegNewExecCtxt
-extern __typeof (xmlRegNewExecCtxt) xmlRegNewExecCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlRegNewExecCtxt xmlRegNewExecCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegexpCompile
-extern __typeof (xmlRegexpCompile) xmlRegexpCompile __attribute((alias("xmlRegexpCompile__internal_alias")));
-#else
-#ifndef xmlRegexpCompile
-extern __typeof (xmlRegexpCompile) xmlRegexpCompile__internal_alias __attribute((visibility("hidden")));
-#define xmlRegexpCompile xmlRegexpCompile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegexpExec
-extern __typeof (xmlRegexpExec) xmlRegexpExec __attribute((alias("xmlRegexpExec__internal_alias")));
-#else
-#ifndef xmlRegexpExec
-extern __typeof (xmlRegexpExec) xmlRegexpExec__internal_alias __attribute((visibility("hidden")));
-#define xmlRegexpExec xmlRegexpExec__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegexpIsDeterminist
-extern __typeof (xmlRegexpIsDeterminist) xmlRegexpIsDeterminist __attribute((alias("xmlRegexpIsDeterminist__internal_alias")));
-#else
-#ifndef xmlRegexpIsDeterminist
-extern __typeof (xmlRegexpIsDeterminist) xmlRegexpIsDeterminist__internal_alias __attribute((visibility("hidden")));
-#define xmlRegexpIsDeterminist xmlRegexpIsDeterminist__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_xmlregexp
-#undef xmlRegexpPrint
-extern __typeof (xmlRegexpPrint) xmlRegexpPrint __attribute((alias("xmlRegexpPrint__internal_alias")));
-#else
-#ifndef xmlRegexpPrint
-extern __typeof (xmlRegexpPrint) xmlRegexpPrint__internal_alias __attribute((visibility("hidden")));
-#define xmlRegexpPrint xmlRegexpPrint__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_encoding
-#undef xmlRegisterCharEncodingHandler
-extern __typeof (xmlRegisterCharEncodingHandler) xmlRegisterCharEncodingHandler __attribute((alias("xmlRegisterCharEncodingHandler__internal_alias")));
-#else
-#ifndef xmlRegisterCharEncodingHandler
-extern __typeof (xmlRegisterCharEncodingHandler) xmlRegisterCharEncodingHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlRegisterCharEncodingHandler xmlRegisterCharEncodingHandler__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlRegisterDefaultInputCallbacks
-extern __typeof (xmlRegisterDefaultInputCallbacks) xmlRegisterDefaultInputCallbacks __attribute((alias("xmlRegisterDefaultInputCallbacks__internal_alias")));
-#else
-#ifndef xmlRegisterDefaultInputCallbacks
-extern __typeof (xmlRegisterDefaultInputCallbacks) xmlRegisterDefaultInputCallbacks__internal_alias __attribute((visibility("hidden")));
-#define xmlRegisterDefaultInputCallbacks xmlRegisterDefaultInputCallbacks__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlRegisterDefaultOutputCallbacks
-extern __typeof (xmlRegisterDefaultOutputCallbacks) xmlRegisterDefaultOutputCallbacks __attribute((alias("xmlRegisterDefaultOutputCallbacks__internal_alias")));
-#else
-#ifndef xmlRegisterDefaultOutputCallbacks
-extern __typeof (xmlRegisterDefaultOutputCallbacks) xmlRegisterDefaultOutputCallbacks__internal_alias __attribute((visibility("hidden")));
-#define xmlRegisterDefaultOutputCallbacks xmlRegisterDefaultOutputCallbacks__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlRegisterHTTPPostCallbacks
-extern __typeof (xmlRegisterHTTPPostCallbacks) xmlRegisterHTTPPostCallbacks __attribute((alias("xmlRegisterHTTPPostCallbacks__internal_alias")));
-#else
-#ifndef xmlRegisterHTTPPostCallbacks
-extern __typeof (xmlRegisterHTTPPostCallbacks) xmlRegisterHTTPPostCallbacks__internal_alias __attribute((visibility("hidden")));
-#define xmlRegisterHTTPPostCallbacks xmlRegisterHTTPPostCallbacks__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlRegisterInputCallbacks
-extern __typeof (xmlRegisterInputCallbacks) xmlRegisterInputCallbacks __attribute((alias("xmlRegisterInputCallbacks__internal_alias")));
-#else
-#ifndef xmlRegisterInputCallbacks
-extern __typeof (xmlRegisterInputCallbacks) xmlRegisterInputCallbacks__internal_alias __attribute((visibility("hidden")));
-#define xmlRegisterInputCallbacks xmlRegisterInputCallbacks__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlRegisterNodeDefault
-extern __typeof (xmlRegisterNodeDefault) xmlRegisterNodeDefault __attribute((alias("xmlRegisterNodeDefault__internal_alias")));
-#else
-#ifndef xmlRegisterNodeDefault
-extern __typeof (xmlRegisterNodeDefault) xmlRegisterNodeDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlRegisterNodeDefault xmlRegisterNodeDefault__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlIO
-#undef xmlRegisterOutputCallbacks
-extern __typeof (xmlRegisterOutputCallbacks) xmlRegisterOutputCallbacks __attribute((alias("xmlRegisterOutputCallbacks__internal_alias")));
-#else
-#ifndef xmlRegisterOutputCallbacks
-extern __typeof (xmlRegisterOutputCallbacks) xmlRegisterOutputCallbacks__internal_alias __attribute((visibility("hidden")));
-#define xmlRegisterOutputCallbacks xmlRegisterOutputCallbacks__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGCleanupTypes
-extern __typeof (xmlRelaxNGCleanupTypes) xmlRelaxNGCleanupTypes __attribute((alias("xmlRelaxNGCleanupTypes__internal_alias")));
-#else
-#ifndef xmlRelaxNGCleanupTypes
-extern __typeof (xmlRelaxNGCleanupTypes) xmlRelaxNGCleanupTypes__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGCleanupTypes xmlRelaxNGCleanupTypes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGDump
-extern __typeof (xmlRelaxNGDump) xmlRelaxNGDump __attribute((alias("xmlRelaxNGDump__internal_alias")));
-#else
-#ifndef xmlRelaxNGDump
-extern __typeof (xmlRelaxNGDump) xmlRelaxNGDump__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGDump xmlRelaxNGDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGDumpTree
-extern __typeof (xmlRelaxNGDumpTree) xmlRelaxNGDumpTree __attribute((alias("xmlRelaxNGDumpTree__internal_alias")));
-#else
-#ifndef xmlRelaxNGDumpTree
-extern __typeof (xmlRelaxNGDumpTree) xmlRelaxNGDumpTree__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGDumpTree xmlRelaxNGDumpTree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGFree
-extern __typeof (xmlRelaxNGFree) xmlRelaxNGFree __attribute((alias("xmlRelaxNGFree__internal_alias")));
-#else
-#ifndef xmlRelaxNGFree
-extern __typeof (xmlRelaxNGFree) xmlRelaxNGFree__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGFree xmlRelaxNGFree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGFreeParserCtxt
-extern __typeof (xmlRelaxNGFreeParserCtxt) xmlRelaxNGFreeParserCtxt __attribute((alias("xmlRelaxNGFreeParserCtxt__internal_alias")));
-#else
-#ifndef xmlRelaxNGFreeParserCtxt
-extern __typeof (xmlRelaxNGFreeParserCtxt) xmlRelaxNGFreeParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGFreeParserCtxt xmlRelaxNGFreeParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGFreeValidCtxt
-extern __typeof (xmlRelaxNGFreeValidCtxt) xmlRelaxNGFreeValidCtxt __attribute((alias("xmlRelaxNGFreeValidCtxt__internal_alias")));
-#else
-#ifndef xmlRelaxNGFreeValidCtxt
-extern __typeof (xmlRelaxNGFreeValidCtxt) xmlRelaxNGFreeValidCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGFreeValidCtxt xmlRelaxNGFreeValidCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGGetParserErrors
-extern __typeof (xmlRelaxNGGetParserErrors) xmlRelaxNGGetParserErrors __attribute((alias("xmlRelaxNGGetParserErrors__internal_alias")));
-#else
-#ifndef xmlRelaxNGGetParserErrors
-extern __typeof (xmlRelaxNGGetParserErrors) xmlRelaxNGGetParserErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGGetParserErrors xmlRelaxNGGetParserErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGGetValidErrors
-extern __typeof (xmlRelaxNGGetValidErrors) xmlRelaxNGGetValidErrors __attribute((alias("xmlRelaxNGGetValidErrors__internal_alias")));
-#else
-#ifndef xmlRelaxNGGetValidErrors
-extern __typeof (xmlRelaxNGGetValidErrors) xmlRelaxNGGetValidErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGGetValidErrors xmlRelaxNGGetValidErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGInitTypes
-extern __typeof (xmlRelaxNGInitTypes) xmlRelaxNGInitTypes __attribute((alias("xmlRelaxNGInitTypes__internal_alias")));
-#else
-#ifndef xmlRelaxNGInitTypes
-extern __typeof (xmlRelaxNGInitTypes) xmlRelaxNGInitTypes__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGInitTypes xmlRelaxNGInitTypes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGNewDocParserCtxt
-extern __typeof (xmlRelaxNGNewDocParserCtxt) xmlRelaxNGNewDocParserCtxt __attribute((alias("xmlRelaxNGNewDocParserCtxt__internal_alias")));
-#else
-#ifndef xmlRelaxNGNewDocParserCtxt
-extern __typeof (xmlRelaxNGNewDocParserCtxt) xmlRelaxNGNewDocParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGNewDocParserCtxt xmlRelaxNGNewDocParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGNewMemParserCtxt
-extern __typeof (xmlRelaxNGNewMemParserCtxt) xmlRelaxNGNewMemParserCtxt __attribute((alias("xmlRelaxNGNewMemParserCtxt__internal_alias")));
-#else
-#ifndef xmlRelaxNGNewMemParserCtxt
-extern __typeof (xmlRelaxNGNewMemParserCtxt) xmlRelaxNGNewMemParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGNewMemParserCtxt xmlRelaxNGNewMemParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGNewParserCtxt
-extern __typeof (xmlRelaxNGNewParserCtxt) xmlRelaxNGNewParserCtxt __attribute((alias("xmlRelaxNGNewParserCtxt__internal_alias")));
-#else
-#ifndef xmlRelaxNGNewParserCtxt
-extern __typeof (xmlRelaxNGNewParserCtxt) xmlRelaxNGNewParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGNewParserCtxt xmlRelaxNGNewParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGNewValidCtxt
-extern __typeof (xmlRelaxNGNewValidCtxt) xmlRelaxNGNewValidCtxt __attribute((alias("xmlRelaxNGNewValidCtxt__internal_alias")));
-#else
-#ifndef xmlRelaxNGNewValidCtxt
-extern __typeof (xmlRelaxNGNewValidCtxt) xmlRelaxNGNewValidCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGNewValidCtxt xmlRelaxNGNewValidCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGParse
-extern __typeof (xmlRelaxNGParse) xmlRelaxNGParse __attribute((alias("xmlRelaxNGParse__internal_alias")));
-#else
-#ifndef xmlRelaxNGParse
-extern __typeof (xmlRelaxNGParse) xmlRelaxNGParse__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGParse xmlRelaxNGParse__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGSetParserErrors
-extern __typeof (xmlRelaxNGSetParserErrors) xmlRelaxNGSetParserErrors __attribute((alias("xmlRelaxNGSetParserErrors__internal_alias")));
-#else
-#ifndef xmlRelaxNGSetParserErrors
-extern __typeof (xmlRelaxNGSetParserErrors) xmlRelaxNGSetParserErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGSetParserErrors xmlRelaxNGSetParserErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGSetParserStructuredErrors
-extern __typeof (xmlRelaxNGSetParserStructuredErrors) xmlRelaxNGSetParserStructuredErrors __attribute((alias("xmlRelaxNGSetParserStructuredErrors__internal_alias")));
-#else
-#ifndef xmlRelaxNGSetParserStructuredErrors
-extern __typeof (xmlRelaxNGSetParserStructuredErrors) xmlRelaxNGSetParserStructuredErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGSetParserStructuredErrors xmlRelaxNGSetParserStructuredErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGSetValidErrors
-extern __typeof (xmlRelaxNGSetValidErrors) xmlRelaxNGSetValidErrors __attribute((alias("xmlRelaxNGSetValidErrors__internal_alias")));
-#else
-#ifndef xmlRelaxNGSetValidErrors
-extern __typeof (xmlRelaxNGSetValidErrors) xmlRelaxNGSetValidErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGSetValidErrors xmlRelaxNGSetValidErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGSetValidStructuredErrors
-extern __typeof (xmlRelaxNGSetValidStructuredErrors) xmlRelaxNGSetValidStructuredErrors __attribute((alias("xmlRelaxNGSetValidStructuredErrors__internal_alias")));
-#else
-#ifndef xmlRelaxNGSetValidStructuredErrors
-extern __typeof (xmlRelaxNGSetValidStructuredErrors) xmlRelaxNGSetValidStructuredErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGSetValidStructuredErrors xmlRelaxNGSetValidStructuredErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGValidateDoc
-extern __typeof (xmlRelaxNGValidateDoc) xmlRelaxNGValidateDoc __attribute((alias("xmlRelaxNGValidateDoc__internal_alias")));
-#else
-#ifndef xmlRelaxNGValidateDoc
-extern __typeof (xmlRelaxNGValidateDoc) xmlRelaxNGValidateDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGValidateDoc xmlRelaxNGValidateDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGValidateFullElement
-extern __typeof (xmlRelaxNGValidateFullElement) xmlRelaxNGValidateFullElement __attribute((alias("xmlRelaxNGValidateFullElement__internal_alias")));
-#else
-#ifndef xmlRelaxNGValidateFullElement
-extern __typeof (xmlRelaxNGValidateFullElement) xmlRelaxNGValidateFullElement__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGValidateFullElement xmlRelaxNGValidateFullElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGValidatePopElement
-extern __typeof (xmlRelaxNGValidatePopElement) xmlRelaxNGValidatePopElement __attribute((alias("xmlRelaxNGValidatePopElement__internal_alias")));
-#else
-#ifndef xmlRelaxNGValidatePopElement
-extern __typeof (xmlRelaxNGValidatePopElement) xmlRelaxNGValidatePopElement__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGValidatePopElement xmlRelaxNGValidatePopElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGValidatePushCData
-extern __typeof (xmlRelaxNGValidatePushCData) xmlRelaxNGValidatePushCData __attribute((alias("xmlRelaxNGValidatePushCData__internal_alias")));
-#else
-#ifndef xmlRelaxNGValidatePushCData
-extern __typeof (xmlRelaxNGValidatePushCData) xmlRelaxNGValidatePushCData__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGValidatePushCData xmlRelaxNGValidatePushCData__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxNGValidatePushElement
-extern __typeof (xmlRelaxNGValidatePushElement) xmlRelaxNGValidatePushElement __attribute((alias("xmlRelaxNGValidatePushElement__internal_alias")));
-#else
-#ifndef xmlRelaxNGValidatePushElement
-extern __typeof (xmlRelaxNGValidatePushElement) xmlRelaxNGValidatePushElement__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxNGValidatePushElement xmlRelaxNGValidatePushElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_relaxng
-#undef xmlRelaxParserSetFlag
-extern __typeof (xmlRelaxParserSetFlag) xmlRelaxParserSetFlag __attribute((alias("xmlRelaxParserSetFlag__internal_alias")));
-#else
-#ifndef xmlRelaxParserSetFlag
-extern __typeof (xmlRelaxParserSetFlag) xmlRelaxParserSetFlag__internal_alias __attribute((visibility("hidden")));
-#define xmlRelaxParserSetFlag xmlRelaxParserSetFlag__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlRemoveID
-extern __typeof (xmlRemoveID) xmlRemoveID __attribute((alias("xmlRemoveID__internal_alias")));
-#else
-#ifndef xmlRemoveID
-extern __typeof (xmlRemoveID) xmlRemoveID__internal_alias __attribute((visibility("hidden")));
-#define xmlRemoveID xmlRemoveID__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlRemoveProp
-extern __typeof (xmlRemoveProp) xmlRemoveProp __attribute((alias("xmlRemoveProp__internal_alias")));
-#else
-#ifndef xmlRemoveProp
-extern __typeof (xmlRemoveProp) xmlRemoveProp__internal_alias __attribute((visibility("hidden")));
-#define xmlRemoveProp xmlRemoveProp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlRemoveRef
-extern __typeof (xmlRemoveRef) xmlRemoveRef __attribute((alias("xmlRemoveRef__internal_alias")));
-#else
-#ifndef xmlRemoveRef
-extern __typeof (xmlRemoveRef) xmlRemoveRef__internal_alias __attribute((visibility("hidden")));
-#define xmlRemoveRef xmlRemoveRef__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_tree
-#undef xmlReplaceNode
-extern __typeof (xmlReplaceNode) xmlReplaceNode __attribute((alias("xmlReplaceNode__internal_alias")));
-#else
-#ifndef xmlReplaceNode
-extern __typeof (xmlReplaceNode) xmlReplaceNode__internal_alias __attribute((visibility("hidden")));
-#define xmlReplaceNode xmlReplaceNode__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlResetError
-extern __typeof (xmlResetError) xmlResetError __attribute((alias("xmlResetError__internal_alias")));
-#else
-#ifndef xmlResetError
-extern __typeof (xmlResetError) xmlResetError__internal_alias __attribute((visibility("hidden")));
-#define xmlResetError xmlResetError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlResetLastError
-extern __typeof (xmlResetLastError) xmlResetLastError __attribute((alias("xmlResetLastError__internal_alias")));
-#else
-#ifndef xmlResetLastError
-extern __typeof (xmlResetLastError) xmlResetLastError__internal_alias __attribute((visibility("hidden")));
-#define xmlResetLastError xmlResetLastError__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2AttributeDecl
-extern __typeof (xmlSAX2AttributeDecl) xmlSAX2AttributeDecl __attribute((alias("xmlSAX2AttributeDecl__internal_alias")));
-#else
-#ifndef xmlSAX2AttributeDecl
-extern __typeof (xmlSAX2AttributeDecl) xmlSAX2AttributeDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2AttributeDecl xmlSAX2AttributeDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2CDataBlock
-extern __typeof (xmlSAX2CDataBlock) xmlSAX2CDataBlock __attribute((alias("xmlSAX2CDataBlock__internal_alias")));
-#else
-#ifndef xmlSAX2CDataBlock
-extern __typeof (xmlSAX2CDataBlock) xmlSAX2CDataBlock__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2CDataBlock xmlSAX2CDataBlock__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2Characters
-extern __typeof (xmlSAX2Characters) xmlSAX2Characters __attribute((alias("xmlSAX2Characters__internal_alias")));
-#else
-#ifndef xmlSAX2Characters
-extern __typeof (xmlSAX2Characters) xmlSAX2Characters__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2Characters xmlSAX2Characters__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2Comment
-extern __typeof (xmlSAX2Comment) xmlSAX2Comment __attribute((alias("xmlSAX2Comment__internal_alias")));
-#else
-#ifndef xmlSAX2Comment
-extern __typeof (xmlSAX2Comment) xmlSAX2Comment__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2Comment xmlSAX2Comment__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2ElementDecl
-extern __typeof (xmlSAX2ElementDecl) xmlSAX2ElementDecl __attribute((alias("xmlSAX2ElementDecl__internal_alias")));
-#else
-#ifndef xmlSAX2ElementDecl
-extern __typeof (xmlSAX2ElementDecl) xmlSAX2ElementDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2ElementDecl xmlSAX2ElementDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2EndDocument
-extern __typeof (xmlSAX2EndDocument) xmlSAX2EndDocument __attribute((alias("xmlSAX2EndDocument__internal_alias")));
-#else
-#ifndef xmlSAX2EndDocument
-extern __typeof (xmlSAX2EndDocument) xmlSAX2EndDocument__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2EndDocument xmlSAX2EndDocument__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_SAX2
-#undef xmlSAX2EndElement
-extern __typeof (xmlSAX2EndElement) xmlSAX2EndElement __attribute((alias("xmlSAX2EndElement__internal_alias")));
-#else
-#ifndef xmlSAX2EndElement
-extern __typeof (xmlSAX2EndElement) xmlSAX2EndElement__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2EndElement xmlSAX2EndElement__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2EndElementNs
-extern __typeof (xmlSAX2EndElementNs) xmlSAX2EndElementNs __attribute((alias("xmlSAX2EndElementNs__internal_alias")));
-#else
-#ifndef xmlSAX2EndElementNs
-extern __typeof (xmlSAX2EndElementNs) xmlSAX2EndElementNs__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2EndElementNs xmlSAX2EndElementNs__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2EntityDecl
-extern __typeof (xmlSAX2EntityDecl) xmlSAX2EntityDecl __attribute((alias("xmlSAX2EntityDecl__internal_alias")));
-#else
-#ifndef xmlSAX2EntityDecl
-extern __typeof (xmlSAX2EntityDecl) xmlSAX2EntityDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2EntityDecl xmlSAX2EntityDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2ExternalSubset
-extern __typeof (xmlSAX2ExternalSubset) xmlSAX2ExternalSubset __attribute((alias("xmlSAX2ExternalSubset__internal_alias")));
-#else
-#ifndef xmlSAX2ExternalSubset
-extern __typeof (xmlSAX2ExternalSubset) xmlSAX2ExternalSubset__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2ExternalSubset xmlSAX2ExternalSubset__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2GetColumnNumber
-extern __typeof (xmlSAX2GetColumnNumber) xmlSAX2GetColumnNumber __attribute((alias("xmlSAX2GetColumnNumber__internal_alias")));
-#else
-#ifndef xmlSAX2GetColumnNumber
-extern __typeof (xmlSAX2GetColumnNumber) xmlSAX2GetColumnNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2GetColumnNumber xmlSAX2GetColumnNumber__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2GetEntity
-extern __typeof (xmlSAX2GetEntity) xmlSAX2GetEntity __attribute((alias("xmlSAX2GetEntity__internal_alias")));
-#else
-#ifndef xmlSAX2GetEntity
-extern __typeof (xmlSAX2GetEntity) xmlSAX2GetEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2GetEntity xmlSAX2GetEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2GetLineNumber
-extern __typeof (xmlSAX2GetLineNumber) xmlSAX2GetLineNumber __attribute((alias("xmlSAX2GetLineNumber__internal_alias")));
-#else
-#ifndef xmlSAX2GetLineNumber
-extern __typeof (xmlSAX2GetLineNumber) xmlSAX2GetLineNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2GetLineNumber xmlSAX2GetLineNumber__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2GetParameterEntity
-extern __typeof (xmlSAX2GetParameterEntity) xmlSAX2GetParameterEntity __attribute((alias("xmlSAX2GetParameterEntity__internal_alias")));
-#else
-#ifndef xmlSAX2GetParameterEntity
-extern __typeof (xmlSAX2GetParameterEntity) xmlSAX2GetParameterEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2GetParameterEntity xmlSAX2GetParameterEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2GetPublicId
-extern __typeof (xmlSAX2GetPublicId) xmlSAX2GetPublicId __attribute((alias("xmlSAX2GetPublicId__internal_alias")));
-#else
-#ifndef xmlSAX2GetPublicId
-extern __typeof (xmlSAX2GetPublicId) xmlSAX2GetPublicId__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2GetPublicId xmlSAX2GetPublicId__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2GetSystemId
-extern __typeof (xmlSAX2GetSystemId) xmlSAX2GetSystemId __attribute((alias("xmlSAX2GetSystemId__internal_alias")));
-#else
-#ifndef xmlSAX2GetSystemId
-extern __typeof (xmlSAX2GetSystemId) xmlSAX2GetSystemId__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2GetSystemId xmlSAX2GetSystemId__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2HasExternalSubset
-extern __typeof (xmlSAX2HasExternalSubset) xmlSAX2HasExternalSubset __attribute((alias("xmlSAX2HasExternalSubset__internal_alias")));
-#else
-#ifndef xmlSAX2HasExternalSubset
-extern __typeof (xmlSAX2HasExternalSubset) xmlSAX2HasExternalSubset__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2HasExternalSubset xmlSAX2HasExternalSubset__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2HasInternalSubset
-extern __typeof (xmlSAX2HasInternalSubset) xmlSAX2HasInternalSubset __attribute((alias("xmlSAX2HasInternalSubset__internal_alias")));
-#else
-#ifndef xmlSAX2HasInternalSubset
-extern __typeof (xmlSAX2HasInternalSubset) xmlSAX2HasInternalSubset__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2HasInternalSubset xmlSAX2HasInternalSubset__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2IgnorableWhitespace
-extern __typeof (xmlSAX2IgnorableWhitespace) xmlSAX2IgnorableWhitespace __attribute((alias("xmlSAX2IgnorableWhitespace__internal_alias")));
-#else
-#ifndef xmlSAX2IgnorableWhitespace
-extern __typeof (xmlSAX2IgnorableWhitespace) xmlSAX2IgnorableWhitespace__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2IgnorableWhitespace xmlSAX2IgnorableWhitespace__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2InitDefaultSAXHandler
-extern __typeof (xmlSAX2InitDefaultSAXHandler) xmlSAX2InitDefaultSAXHandler __attribute((alias("xmlSAX2InitDefaultSAXHandler__internal_alias")));
-#else
-#ifndef xmlSAX2InitDefaultSAXHandler
-extern __typeof (xmlSAX2InitDefaultSAXHandler) xmlSAX2InitDefaultSAXHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2InitDefaultSAXHandler xmlSAX2InitDefaultSAXHandler__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_DOCB_ENABLED)
-#ifdef bottom_SAX2
-#undef xmlSAX2InitDocbDefaultSAXHandler
-extern __typeof (xmlSAX2InitDocbDefaultSAXHandler) xmlSAX2InitDocbDefaultSAXHandler __attribute((alias("xmlSAX2InitDocbDefaultSAXHandler__internal_alias")));
-#else
-#ifndef xmlSAX2InitDocbDefaultSAXHandler
-extern __typeof (xmlSAX2InitDocbDefaultSAXHandler) xmlSAX2InitDocbDefaultSAXHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2InitDocbDefaultSAXHandler xmlSAX2InitDocbDefaultSAXHandler__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_SAX2
-#undef xmlSAX2InitHtmlDefaultSAXHandler
-extern __typeof (xmlSAX2InitHtmlDefaultSAXHandler) xmlSAX2InitHtmlDefaultSAXHandler __attribute((alias("xmlSAX2InitHtmlDefaultSAXHandler__internal_alias")));
-#else
-#ifndef xmlSAX2InitHtmlDefaultSAXHandler
-extern __typeof (xmlSAX2InitHtmlDefaultSAXHandler) xmlSAX2InitHtmlDefaultSAXHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2InitHtmlDefaultSAXHandler xmlSAX2InitHtmlDefaultSAXHandler__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2InternalSubset
-extern __typeof (xmlSAX2InternalSubset) xmlSAX2InternalSubset __attribute((alias("xmlSAX2InternalSubset__internal_alias")));
-#else
-#ifndef xmlSAX2InternalSubset
-extern __typeof (xmlSAX2InternalSubset) xmlSAX2InternalSubset__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2InternalSubset xmlSAX2InternalSubset__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2IsStandalone
-extern __typeof (xmlSAX2IsStandalone) xmlSAX2IsStandalone __attribute((alias("xmlSAX2IsStandalone__internal_alias")));
-#else
-#ifndef xmlSAX2IsStandalone
-extern __typeof (xmlSAX2IsStandalone) xmlSAX2IsStandalone__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2IsStandalone xmlSAX2IsStandalone__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2NotationDecl
-extern __typeof (xmlSAX2NotationDecl) xmlSAX2NotationDecl __attribute((alias("xmlSAX2NotationDecl__internal_alias")));
-#else
-#ifndef xmlSAX2NotationDecl
-extern __typeof (xmlSAX2NotationDecl) xmlSAX2NotationDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2NotationDecl xmlSAX2NotationDecl__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2ProcessingInstruction
-extern __typeof (xmlSAX2ProcessingInstruction) xmlSAX2ProcessingInstruction __attribute((alias("xmlSAX2ProcessingInstruction__internal_alias")));
-#else
-#ifndef xmlSAX2ProcessingInstruction
-extern __typeof (xmlSAX2ProcessingInstruction) xmlSAX2ProcessingInstruction__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2ProcessingInstruction xmlSAX2ProcessingInstruction__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2Reference
-extern __typeof (xmlSAX2Reference) xmlSAX2Reference __attribute((alias("xmlSAX2Reference__internal_alias")));
-#else
-#ifndef xmlSAX2Reference
-extern __typeof (xmlSAX2Reference) xmlSAX2Reference__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2Reference xmlSAX2Reference__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2ResolveEntity
-extern __typeof (xmlSAX2ResolveEntity) xmlSAX2ResolveEntity __attribute((alias("xmlSAX2ResolveEntity__internal_alias")));
-#else
-#ifndef xmlSAX2ResolveEntity
-extern __typeof (xmlSAX2ResolveEntity) xmlSAX2ResolveEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2ResolveEntity xmlSAX2ResolveEntity__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2SetDocumentLocator
-extern __typeof (xmlSAX2SetDocumentLocator) xmlSAX2SetDocumentLocator __attribute((alias("xmlSAX2SetDocumentLocator__internal_alias")));
-#else
-#ifndef xmlSAX2SetDocumentLocator
-extern __typeof (xmlSAX2SetDocumentLocator) xmlSAX2SetDocumentLocator__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2SetDocumentLocator xmlSAX2SetDocumentLocator__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2StartDocument
-extern __typeof (xmlSAX2StartDocument) xmlSAX2StartDocument __attribute((alias("xmlSAX2StartDocument__internal_alias")));
-#else
-#ifndef xmlSAX2StartDocument
-extern __typeof (xmlSAX2StartDocument) xmlSAX2StartDocument__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2StartDocument xmlSAX2StartDocument__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_SAX2
-#undef xmlSAX2StartElement
-extern __typeof (xmlSAX2StartElement) xmlSAX2StartElement __attribute((alias("xmlSAX2StartElement__internal_alias")));
-#else
-#ifndef xmlSAX2StartElement
-extern __typeof (xmlSAX2StartElement) xmlSAX2StartElement__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2StartElement xmlSAX2StartElement__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2StartElementNs
-extern __typeof (xmlSAX2StartElementNs) xmlSAX2StartElementNs __attribute((alias("xmlSAX2StartElementNs__internal_alias")));
-#else
-#ifndef xmlSAX2StartElementNs
-extern __typeof (xmlSAX2StartElementNs) xmlSAX2StartElementNs__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2StartElementNs xmlSAX2StartElementNs__internal_alias
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAX2UnparsedEntityDecl
-extern __typeof (xmlSAX2UnparsedEntityDecl) xmlSAX2UnparsedEntityDecl __attribute((alias("xmlSAX2UnparsedEntityDecl__internal_alias")));
-#else
-#ifndef xmlSAX2UnparsedEntityDecl
-extern __typeof (xmlSAX2UnparsedEntityDecl) xmlSAX2UnparsedEntityDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlSAX2UnparsedEntityDecl xmlSAX2UnparsedEntityDecl__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_SAX2
-#undef xmlSAXDefaultVersion
-extern __typeof (xmlSAXDefaultVersion) xmlSAXDefaultVersion __attribute((alias("xmlSAXDefaultVersion__internal_alias")));
-#else
-#ifndef xmlSAXDefaultVersion
-extern __typeof (xmlSAXDefaultVersion) xmlSAXDefaultVersion__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXDefaultVersion xmlSAXDefaultVersion__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXParseDTD
-extern __typeof (xmlSAXParseDTD) xmlSAXParseDTD __attribute((alias("xmlSAXParseDTD__internal_alias")));
-#else
-#ifndef xmlSAXParseDTD
-extern __typeof (xmlSAXParseDTD) xmlSAXParseDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXParseDTD xmlSAXParseDTD__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXParseDoc
-extern __typeof (xmlSAXParseDoc) xmlSAXParseDoc __attribute((alias("xmlSAXParseDoc__internal_alias")));
-#else
-#ifndef xmlSAXParseDoc
-extern __typeof (xmlSAXParseDoc) xmlSAXParseDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXParseDoc xmlSAXParseDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXParseEntity
-extern __typeof (xmlSAXParseEntity) xmlSAXParseEntity __attribute((alias("xmlSAXParseEntity__internal_alias")));
-#else
-#ifndef xmlSAXParseEntity
-extern __typeof (xmlSAXParseEntity) xmlSAXParseEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXParseEntity xmlSAXParseEntity__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXParseFile
-extern __typeof (xmlSAXParseFile) xmlSAXParseFile __attribute((alias("xmlSAXParseFile__internal_alias")));
-#else
-#ifndef xmlSAXParseFile
-extern __typeof (xmlSAXParseFile) xmlSAXParseFile__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXParseFile xmlSAXParseFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXParseFileWithData
-extern __typeof (xmlSAXParseFileWithData) xmlSAXParseFileWithData __attribute((alias("xmlSAXParseFileWithData__internal_alias")));
-#else
-#ifndef xmlSAXParseFileWithData
-extern __typeof (xmlSAXParseFileWithData) xmlSAXParseFileWithData__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXParseFileWithData xmlSAXParseFileWithData__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXParseMemory
-extern __typeof (xmlSAXParseMemory) xmlSAXParseMemory __attribute((alias("xmlSAXParseMemory__internal_alias")));
-#else
-#ifndef xmlSAXParseMemory
-extern __typeof (xmlSAXParseMemory) xmlSAXParseMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXParseMemory xmlSAXParseMemory__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXParseMemoryWithData
-extern __typeof (xmlSAXParseMemoryWithData) xmlSAXParseMemoryWithData __attribute((alias("xmlSAXParseMemoryWithData__internal_alias")));
-#else
-#ifndef xmlSAXParseMemoryWithData
-extern __typeof (xmlSAXParseMemoryWithData) xmlSAXParseMemoryWithData__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXParseMemoryWithData xmlSAXParseMemoryWithData__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXUserParseFile
-extern __typeof (xmlSAXUserParseFile) xmlSAXUserParseFile __attribute((alias("xmlSAXUserParseFile__internal_alias")));
-#else
-#ifndef xmlSAXUserParseFile
-extern __typeof (xmlSAXUserParseFile) xmlSAXUserParseFile__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXUserParseFile xmlSAXUserParseFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSAXUserParseMemory
-extern __typeof (xmlSAXUserParseMemory) xmlSAXUserParseMemory __attribute((alias("xmlSAXUserParseMemory__internal_alias")));
-#else
-#ifndef xmlSAXUserParseMemory
-extern __typeof (xmlSAXUserParseMemory) xmlSAXUserParseMemory__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXUserParseMemory xmlSAXUserParseMemory__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_SAX2
-#undef xmlSAXVersion
-extern __typeof (xmlSAXVersion) xmlSAXVersion __attribute((alias("xmlSAXVersion__internal_alias")));
-#else
-#ifndef xmlSAXVersion
-extern __typeof (xmlSAXVersion) xmlSAXVersion__internal_alias __attribute((visibility("hidden")));
-#define xmlSAXVersion xmlSAXVersion__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveClose
-extern __typeof (xmlSaveClose) xmlSaveClose __attribute((alias("xmlSaveClose__internal_alias")));
-#else
-#ifndef xmlSaveClose
-extern __typeof (xmlSaveClose) xmlSaveClose__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveClose xmlSaveClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveDoc
-extern __typeof (xmlSaveDoc) xmlSaveDoc __attribute((alias("xmlSaveDoc__internal_alias")));
-#else
-#ifndef xmlSaveDoc
-extern __typeof (xmlSaveDoc) xmlSaveDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveDoc xmlSaveDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveFile
-extern __typeof (xmlSaveFile) xmlSaveFile __attribute((alias("xmlSaveFile__internal_alias")));
-#else
-#ifndef xmlSaveFile
-extern __typeof (xmlSaveFile) xmlSaveFile__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveFile xmlSaveFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveFileEnc
-extern __typeof (xmlSaveFileEnc) xmlSaveFileEnc __attribute((alias("xmlSaveFileEnc__internal_alias")));
-#else
-#ifndef xmlSaveFileEnc
-extern __typeof (xmlSaveFileEnc) xmlSaveFileEnc__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveFileEnc xmlSaveFileEnc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveFileTo
-extern __typeof (xmlSaveFileTo) xmlSaveFileTo __attribute((alias("xmlSaveFileTo__internal_alias")));
-#else
-#ifndef xmlSaveFileTo
-extern __typeof (xmlSaveFileTo) xmlSaveFileTo__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveFileTo xmlSaveFileTo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveFlush
-extern __typeof (xmlSaveFlush) xmlSaveFlush __attribute((alias("xmlSaveFlush__internal_alias")));
-#else
-#ifndef xmlSaveFlush
-extern __typeof (xmlSaveFlush) xmlSaveFlush__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveFlush xmlSaveFlush__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveFormatFile
-extern __typeof (xmlSaveFormatFile) xmlSaveFormatFile __attribute((alias("xmlSaveFormatFile__internal_alias")));
-#else
-#ifndef xmlSaveFormatFile
-extern __typeof (xmlSaveFormatFile) xmlSaveFormatFile__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveFormatFile xmlSaveFormatFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveFormatFileEnc
-extern __typeof (xmlSaveFormatFileEnc) xmlSaveFormatFileEnc __attribute((alias("xmlSaveFormatFileEnc__internal_alias")));
-#else
-#ifndef xmlSaveFormatFileEnc
-extern __typeof (xmlSaveFormatFileEnc) xmlSaveFormatFileEnc__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveFormatFileEnc xmlSaveFormatFileEnc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveFormatFileTo
-extern __typeof (xmlSaveFormatFileTo) xmlSaveFormatFileTo __attribute((alias("xmlSaveFormatFileTo__internal_alias")));
-#else
-#ifndef xmlSaveFormatFileTo
-extern __typeof (xmlSaveFormatFileTo) xmlSaveFormatFileTo__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveFormatFileTo xmlSaveFormatFileTo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveSetAttrEscape
-extern __typeof (xmlSaveSetAttrEscape) xmlSaveSetAttrEscape __attribute((alias("xmlSaveSetAttrEscape__internal_alias")));
-#else
-#ifndef xmlSaveSetAttrEscape
-extern __typeof (xmlSaveSetAttrEscape) xmlSaveSetAttrEscape__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveSetAttrEscape xmlSaveSetAttrEscape__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveSetEscape
-extern __typeof (xmlSaveSetEscape) xmlSaveSetEscape __attribute((alias("xmlSaveSetEscape__internal_alias")));
-#else
-#ifndef xmlSaveSetEscape
-extern __typeof (xmlSaveSetEscape) xmlSaveSetEscape__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveSetEscape xmlSaveSetEscape__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveToBuffer
-extern __typeof (xmlSaveToBuffer) xmlSaveToBuffer __attribute((alias("xmlSaveToBuffer__internal_alias")));
-#else
-#ifndef xmlSaveToBuffer
-extern __typeof (xmlSaveToBuffer) xmlSaveToBuffer__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveToBuffer xmlSaveToBuffer__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveToFd
-extern __typeof (xmlSaveToFd) xmlSaveToFd __attribute((alias("xmlSaveToFd__internal_alias")));
-#else
-#ifndef xmlSaveToFd
-extern __typeof (xmlSaveToFd) xmlSaveToFd__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveToFd xmlSaveToFd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveToFilename
-extern __typeof (xmlSaveToFilename) xmlSaveToFilename __attribute((alias("xmlSaveToFilename__internal_alias")));
-#else
-#ifndef xmlSaveToFilename
-extern __typeof (xmlSaveToFilename) xmlSaveToFilename__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveToFilename xmlSaveToFilename__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveToIO
-extern __typeof (xmlSaveToIO) xmlSaveToIO __attribute((alias("xmlSaveToIO__internal_alias")));
-#else
-#ifndef xmlSaveToIO
-extern __typeof (xmlSaveToIO) xmlSaveToIO__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveToIO xmlSaveToIO__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlsave
-#undef xmlSaveTree
-extern __typeof (xmlSaveTree) xmlSaveTree __attribute((alias("xmlSaveTree__internal_alias")));
-#else
-#ifndef xmlSaveTree
-extern __typeof (xmlSaveTree) xmlSaveTree__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveTree xmlSaveTree__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlSaveUri
-extern __typeof (xmlSaveUri) xmlSaveUri __attribute((alias("xmlSaveUri__internal_alias")));
-#else
-#ifndef xmlSaveUri
-extern __typeof (xmlSaveUri) xmlSaveUri__internal_alias __attribute((visibility("hidden")));
-#define xmlSaveUri xmlSaveUri__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlScanName
-extern __typeof (xmlScanName) xmlScanName __attribute((alias("xmlScanName__internal_alias")));
-#else
-#ifndef xmlScanName
-extern __typeof (xmlScanName) xmlScanName__internal_alias __attribute((visibility("hidden")));
-#define xmlScanName xmlScanName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaCheckFacet
-extern __typeof (xmlSchemaCheckFacet) xmlSchemaCheckFacet __attribute((alias("xmlSchemaCheckFacet__internal_alias")));
-#else
-#ifndef xmlSchemaCheckFacet
-extern __typeof (xmlSchemaCheckFacet) xmlSchemaCheckFacet__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaCheckFacet xmlSchemaCheckFacet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaCleanupTypes
-extern __typeof (xmlSchemaCleanupTypes) xmlSchemaCleanupTypes __attribute((alias("xmlSchemaCleanupTypes__internal_alias")));
-#else
-#ifndef xmlSchemaCleanupTypes
-extern __typeof (xmlSchemaCleanupTypes) xmlSchemaCleanupTypes__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaCleanupTypes xmlSchemaCleanupTypes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaCollapseString
-extern __typeof (xmlSchemaCollapseString) xmlSchemaCollapseString __attribute((alias("xmlSchemaCollapseString__internal_alias")));
-#else
-#ifndef xmlSchemaCollapseString
-extern __typeof (xmlSchemaCollapseString) xmlSchemaCollapseString__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaCollapseString xmlSchemaCollapseString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaCompareValues
-extern __typeof (xmlSchemaCompareValues) xmlSchemaCompareValues __attribute((alias("xmlSchemaCompareValues__internal_alias")));
-#else
-#ifndef xmlSchemaCompareValues
-extern __typeof (xmlSchemaCompareValues) xmlSchemaCompareValues__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaCompareValues xmlSchemaCompareValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaCompareValuesWhtsp
-extern __typeof (xmlSchemaCompareValuesWhtsp) xmlSchemaCompareValuesWhtsp __attribute((alias("xmlSchemaCompareValuesWhtsp__internal_alias")));
-#else
-#ifndef xmlSchemaCompareValuesWhtsp
-extern __typeof (xmlSchemaCompareValuesWhtsp) xmlSchemaCompareValuesWhtsp__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaCompareValuesWhtsp xmlSchemaCompareValuesWhtsp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaCopyValue
-extern __typeof (xmlSchemaCopyValue) xmlSchemaCopyValue __attribute((alias("xmlSchemaCopyValue__internal_alias")));
-#else
-#ifndef xmlSchemaCopyValue
-extern __typeof (xmlSchemaCopyValue) xmlSchemaCopyValue__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaCopyValue xmlSchemaCopyValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaDump
-extern __typeof (xmlSchemaDump) xmlSchemaDump __attribute((alias("xmlSchemaDump__internal_alias")));
-#else
-#ifndef xmlSchemaDump
-extern __typeof (xmlSchemaDump) xmlSchemaDump__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaDump xmlSchemaDump__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaFree
-extern __typeof (xmlSchemaFree) xmlSchemaFree __attribute((alias("xmlSchemaFree__internal_alias")));
-#else
-#ifndef xmlSchemaFree
-extern __typeof (xmlSchemaFree) xmlSchemaFree__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaFree xmlSchemaFree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaFreeFacet
-extern __typeof (xmlSchemaFreeFacet) xmlSchemaFreeFacet __attribute((alias("xmlSchemaFreeFacet__internal_alias")));
-#else
-#ifndef xmlSchemaFreeFacet
-extern __typeof (xmlSchemaFreeFacet) xmlSchemaFreeFacet__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaFreeFacet xmlSchemaFreeFacet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaFreeParserCtxt
-extern __typeof (xmlSchemaFreeParserCtxt) xmlSchemaFreeParserCtxt __attribute((alias("xmlSchemaFreeParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchemaFreeParserCtxt
-extern __typeof (xmlSchemaFreeParserCtxt) xmlSchemaFreeParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaFreeParserCtxt xmlSchemaFreeParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaFreeType
-extern __typeof (xmlSchemaFreeType) xmlSchemaFreeType __attribute((alias("xmlSchemaFreeType__internal_alias")));
-#else
-#ifndef xmlSchemaFreeType
-extern __typeof (xmlSchemaFreeType) xmlSchemaFreeType__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaFreeType xmlSchemaFreeType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaFreeValidCtxt
-extern __typeof (xmlSchemaFreeValidCtxt) xmlSchemaFreeValidCtxt __attribute((alias("xmlSchemaFreeValidCtxt__internal_alias")));
-#else
-#ifndef xmlSchemaFreeValidCtxt
-extern __typeof (xmlSchemaFreeValidCtxt) xmlSchemaFreeValidCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaFreeValidCtxt xmlSchemaFreeValidCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaFreeValue
-extern __typeof (xmlSchemaFreeValue) xmlSchemaFreeValue __attribute((alias("xmlSchemaFreeValue__internal_alias")));
-#else
-#ifndef xmlSchemaFreeValue
-extern __typeof (xmlSchemaFreeValue) xmlSchemaFreeValue__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaFreeValue xmlSchemaFreeValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaFreeWildcard
-extern __typeof (xmlSchemaFreeWildcard) xmlSchemaFreeWildcard __attribute((alias("xmlSchemaFreeWildcard__internal_alias")));
-#else
-#ifndef xmlSchemaFreeWildcard
-extern __typeof (xmlSchemaFreeWildcard) xmlSchemaFreeWildcard__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaFreeWildcard xmlSchemaFreeWildcard__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaGetBuiltInListSimpleTypeItemType
-extern __typeof (xmlSchemaGetBuiltInListSimpleTypeItemType) xmlSchemaGetBuiltInListSimpleTypeItemType __attribute((alias("xmlSchemaGetBuiltInListSimpleTypeItemType__internal_alias")));
-#else
-#ifndef xmlSchemaGetBuiltInListSimpleTypeItemType
-extern __typeof (xmlSchemaGetBuiltInListSimpleTypeItemType) xmlSchemaGetBuiltInListSimpleTypeItemType__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetBuiltInListSimpleTypeItemType xmlSchemaGetBuiltInListSimpleTypeItemType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaGetBuiltInType
-extern __typeof (xmlSchemaGetBuiltInType) xmlSchemaGetBuiltInType __attribute((alias("xmlSchemaGetBuiltInType__internal_alias")));
-#else
-#ifndef xmlSchemaGetBuiltInType
-extern __typeof (xmlSchemaGetBuiltInType) xmlSchemaGetBuiltInType__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetBuiltInType xmlSchemaGetBuiltInType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaGetCanonValue
-extern __typeof (xmlSchemaGetCanonValue) xmlSchemaGetCanonValue __attribute((alias("xmlSchemaGetCanonValue__internal_alias")));
-#else
-#ifndef xmlSchemaGetCanonValue
-extern __typeof (xmlSchemaGetCanonValue) xmlSchemaGetCanonValue__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetCanonValue xmlSchemaGetCanonValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaGetCanonValueWhtsp
-extern __typeof (xmlSchemaGetCanonValueWhtsp) xmlSchemaGetCanonValueWhtsp __attribute((alias("xmlSchemaGetCanonValueWhtsp__internal_alias")));
-#else
-#ifndef xmlSchemaGetCanonValueWhtsp
-extern __typeof (xmlSchemaGetCanonValueWhtsp) xmlSchemaGetCanonValueWhtsp__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetCanonValueWhtsp xmlSchemaGetCanonValueWhtsp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaGetFacetValueAsULong
-extern __typeof (xmlSchemaGetFacetValueAsULong) xmlSchemaGetFacetValueAsULong __attribute((alias("xmlSchemaGetFacetValueAsULong__internal_alias")));
-#else
-#ifndef xmlSchemaGetFacetValueAsULong
-extern __typeof (xmlSchemaGetFacetValueAsULong) xmlSchemaGetFacetValueAsULong__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetFacetValueAsULong xmlSchemaGetFacetValueAsULong__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaGetParserErrors
-extern __typeof (xmlSchemaGetParserErrors) xmlSchemaGetParserErrors __attribute((alias("xmlSchemaGetParserErrors__internal_alias")));
-#else
-#ifndef xmlSchemaGetParserErrors
-extern __typeof (xmlSchemaGetParserErrors) xmlSchemaGetParserErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetParserErrors xmlSchemaGetParserErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaGetPredefinedType
-extern __typeof (xmlSchemaGetPredefinedType) xmlSchemaGetPredefinedType __attribute((alias("xmlSchemaGetPredefinedType__internal_alias")));
-#else
-#ifndef xmlSchemaGetPredefinedType
-extern __typeof (xmlSchemaGetPredefinedType) xmlSchemaGetPredefinedType__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetPredefinedType xmlSchemaGetPredefinedType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaGetValType
-extern __typeof (xmlSchemaGetValType) xmlSchemaGetValType __attribute((alias("xmlSchemaGetValType__internal_alias")));
-#else
-#ifndef xmlSchemaGetValType
-extern __typeof (xmlSchemaGetValType) xmlSchemaGetValType__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetValType xmlSchemaGetValType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaGetValidErrors
-extern __typeof (xmlSchemaGetValidErrors) xmlSchemaGetValidErrors __attribute((alias("xmlSchemaGetValidErrors__internal_alias")));
-#else
-#ifndef xmlSchemaGetValidErrors
-extern __typeof (xmlSchemaGetValidErrors) xmlSchemaGetValidErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaGetValidErrors xmlSchemaGetValidErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaInitTypes
-extern __typeof (xmlSchemaInitTypes) xmlSchemaInitTypes __attribute((alias("xmlSchemaInitTypes__internal_alias")));
-#else
-#ifndef xmlSchemaInitTypes
-extern __typeof (xmlSchemaInitTypes) xmlSchemaInitTypes__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaInitTypes xmlSchemaInitTypes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaIsBuiltInTypeFacet
-extern __typeof (xmlSchemaIsBuiltInTypeFacet) xmlSchemaIsBuiltInTypeFacet __attribute((alias("xmlSchemaIsBuiltInTypeFacet__internal_alias")));
-#else
-#ifndef xmlSchemaIsBuiltInTypeFacet
-extern __typeof (xmlSchemaIsBuiltInTypeFacet) xmlSchemaIsBuiltInTypeFacet__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaIsBuiltInTypeFacet xmlSchemaIsBuiltInTypeFacet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaIsValid
-extern __typeof (xmlSchemaIsValid) xmlSchemaIsValid __attribute((alias("xmlSchemaIsValid__internal_alias")));
-#else
-#ifndef xmlSchemaIsValid
-extern __typeof (xmlSchemaIsValid) xmlSchemaIsValid__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaIsValid xmlSchemaIsValid__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaNewDocParserCtxt
-extern __typeof (xmlSchemaNewDocParserCtxt) xmlSchemaNewDocParserCtxt __attribute((alias("xmlSchemaNewDocParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchemaNewDocParserCtxt
-extern __typeof (xmlSchemaNewDocParserCtxt) xmlSchemaNewDocParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaNewDocParserCtxt xmlSchemaNewDocParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaNewFacet
-extern __typeof (xmlSchemaNewFacet) xmlSchemaNewFacet __attribute((alias("xmlSchemaNewFacet__internal_alias")));
-#else
-#ifndef xmlSchemaNewFacet
-extern __typeof (xmlSchemaNewFacet) xmlSchemaNewFacet__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaNewFacet xmlSchemaNewFacet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaNewMemParserCtxt
-extern __typeof (xmlSchemaNewMemParserCtxt) xmlSchemaNewMemParserCtxt __attribute((alias("xmlSchemaNewMemParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchemaNewMemParserCtxt
-extern __typeof (xmlSchemaNewMemParserCtxt) xmlSchemaNewMemParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaNewMemParserCtxt xmlSchemaNewMemParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaNewNOTATIONValue
-extern __typeof (xmlSchemaNewNOTATIONValue) xmlSchemaNewNOTATIONValue __attribute((alias("xmlSchemaNewNOTATIONValue__internal_alias")));
-#else
-#ifndef xmlSchemaNewNOTATIONValue
-extern __typeof (xmlSchemaNewNOTATIONValue) xmlSchemaNewNOTATIONValue__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaNewNOTATIONValue xmlSchemaNewNOTATIONValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaNewParserCtxt
-extern __typeof (xmlSchemaNewParserCtxt) xmlSchemaNewParserCtxt __attribute((alias("xmlSchemaNewParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchemaNewParserCtxt
-extern __typeof (xmlSchemaNewParserCtxt) xmlSchemaNewParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaNewParserCtxt xmlSchemaNewParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaNewQNameValue
-extern __typeof (xmlSchemaNewQNameValue) xmlSchemaNewQNameValue __attribute((alias("xmlSchemaNewQNameValue__internal_alias")));
-#else
-#ifndef xmlSchemaNewQNameValue
-extern __typeof (xmlSchemaNewQNameValue) xmlSchemaNewQNameValue__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaNewQNameValue xmlSchemaNewQNameValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaNewStringValue
-extern __typeof (xmlSchemaNewStringValue) xmlSchemaNewStringValue __attribute((alias("xmlSchemaNewStringValue__internal_alias")));
-#else
-#ifndef xmlSchemaNewStringValue
-extern __typeof (xmlSchemaNewStringValue) xmlSchemaNewStringValue__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaNewStringValue xmlSchemaNewStringValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaNewValidCtxt
-extern __typeof (xmlSchemaNewValidCtxt) xmlSchemaNewValidCtxt __attribute((alias("xmlSchemaNewValidCtxt__internal_alias")));
-#else
-#ifndef xmlSchemaNewValidCtxt
-extern __typeof (xmlSchemaNewValidCtxt) xmlSchemaNewValidCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaNewValidCtxt xmlSchemaNewValidCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaParse
-extern __typeof (xmlSchemaParse) xmlSchemaParse __attribute((alias("xmlSchemaParse__internal_alias")));
-#else
-#ifndef xmlSchemaParse
-extern __typeof (xmlSchemaParse) xmlSchemaParse__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaParse xmlSchemaParse__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaSAXPlug
-extern __typeof (xmlSchemaSAXPlug) xmlSchemaSAXPlug __attribute((alias("xmlSchemaSAXPlug__internal_alias")));
-#else
-#ifndef xmlSchemaSAXPlug
-extern __typeof (xmlSchemaSAXPlug) xmlSchemaSAXPlug__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaSAXPlug xmlSchemaSAXPlug__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaSAXUnplug
-extern __typeof (xmlSchemaSAXUnplug) xmlSchemaSAXUnplug __attribute((alias("xmlSchemaSAXUnplug__internal_alias")));
-#else
-#ifndef xmlSchemaSAXUnplug
-extern __typeof (xmlSchemaSAXUnplug) xmlSchemaSAXUnplug__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaSAXUnplug xmlSchemaSAXUnplug__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaSetParserErrors
-extern __typeof (xmlSchemaSetParserErrors) xmlSchemaSetParserErrors __attribute((alias("xmlSchemaSetParserErrors__internal_alias")));
-#else
-#ifndef xmlSchemaSetParserErrors
-extern __typeof (xmlSchemaSetParserErrors) xmlSchemaSetParserErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaSetParserErrors xmlSchemaSetParserErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaSetParserStructuredErrors
-extern __typeof (xmlSchemaSetParserStructuredErrors) xmlSchemaSetParserStructuredErrors __attribute((alias("xmlSchemaSetParserStructuredErrors__internal_alias")));
-#else
-#ifndef xmlSchemaSetParserStructuredErrors
-extern __typeof (xmlSchemaSetParserStructuredErrors) xmlSchemaSetParserStructuredErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaSetParserStructuredErrors xmlSchemaSetParserStructuredErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaSetValidErrors
-extern __typeof (xmlSchemaSetValidErrors) xmlSchemaSetValidErrors __attribute((alias("xmlSchemaSetValidErrors__internal_alias")));
-#else
-#ifndef xmlSchemaSetValidErrors
-extern __typeof (xmlSchemaSetValidErrors) xmlSchemaSetValidErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaSetValidErrors xmlSchemaSetValidErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaSetValidOptions
-extern __typeof (xmlSchemaSetValidOptions) xmlSchemaSetValidOptions __attribute((alias("xmlSchemaSetValidOptions__internal_alias")));
-#else
-#ifndef xmlSchemaSetValidOptions
-extern __typeof (xmlSchemaSetValidOptions) xmlSchemaSetValidOptions__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaSetValidOptions xmlSchemaSetValidOptions__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaSetValidStructuredErrors
-extern __typeof (xmlSchemaSetValidStructuredErrors) xmlSchemaSetValidStructuredErrors __attribute((alias("xmlSchemaSetValidStructuredErrors__internal_alias")));
-#else
-#ifndef xmlSchemaSetValidStructuredErrors
-extern __typeof (xmlSchemaSetValidStructuredErrors) xmlSchemaSetValidStructuredErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaSetValidStructuredErrors xmlSchemaSetValidStructuredErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValPredefTypeNode
-extern __typeof (xmlSchemaValPredefTypeNode) xmlSchemaValPredefTypeNode __attribute((alias("xmlSchemaValPredefTypeNode__internal_alias")));
-#else
-#ifndef xmlSchemaValPredefTypeNode
-extern __typeof (xmlSchemaValPredefTypeNode) xmlSchemaValPredefTypeNode__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValPredefTypeNode xmlSchemaValPredefTypeNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValPredefTypeNodeNoNorm
-extern __typeof (xmlSchemaValPredefTypeNodeNoNorm) xmlSchemaValPredefTypeNodeNoNorm __attribute((alias("xmlSchemaValPredefTypeNodeNoNorm__internal_alias")));
-#else
-#ifndef xmlSchemaValPredefTypeNodeNoNorm
-extern __typeof (xmlSchemaValPredefTypeNodeNoNorm) xmlSchemaValPredefTypeNodeNoNorm__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValPredefTypeNodeNoNorm xmlSchemaValPredefTypeNodeNoNorm__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaValidCtxtGetOptions
-extern __typeof (xmlSchemaValidCtxtGetOptions) xmlSchemaValidCtxtGetOptions __attribute((alias("xmlSchemaValidCtxtGetOptions__internal_alias")));
-#else
-#ifndef xmlSchemaValidCtxtGetOptions
-extern __typeof (xmlSchemaValidCtxtGetOptions) xmlSchemaValidCtxtGetOptions__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidCtxtGetOptions xmlSchemaValidCtxtGetOptions__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaValidCtxtGetParserCtxt
-extern __typeof (xmlSchemaValidCtxtGetParserCtxt) xmlSchemaValidCtxtGetParserCtxt __attribute((alias("xmlSchemaValidCtxtGetParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchemaValidCtxtGetParserCtxt
-extern __typeof (xmlSchemaValidCtxtGetParserCtxt) xmlSchemaValidCtxtGetParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidCtxtGetParserCtxt xmlSchemaValidCtxtGetParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaValidateDoc
-extern __typeof (xmlSchemaValidateDoc) xmlSchemaValidateDoc __attribute((alias("xmlSchemaValidateDoc__internal_alias")));
-#else
-#ifndef xmlSchemaValidateDoc
-extern __typeof (xmlSchemaValidateDoc) xmlSchemaValidateDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateDoc xmlSchemaValidateDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValidateFacet
-extern __typeof (xmlSchemaValidateFacet) xmlSchemaValidateFacet __attribute((alias("xmlSchemaValidateFacet__internal_alias")));
-#else
-#ifndef xmlSchemaValidateFacet
-extern __typeof (xmlSchemaValidateFacet) xmlSchemaValidateFacet__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateFacet xmlSchemaValidateFacet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValidateFacetWhtsp
-extern __typeof (xmlSchemaValidateFacetWhtsp) xmlSchemaValidateFacetWhtsp __attribute((alias("xmlSchemaValidateFacetWhtsp__internal_alias")));
-#else
-#ifndef xmlSchemaValidateFacetWhtsp
-extern __typeof (xmlSchemaValidateFacetWhtsp) xmlSchemaValidateFacetWhtsp__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateFacetWhtsp xmlSchemaValidateFacetWhtsp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaValidateFile
-extern __typeof (xmlSchemaValidateFile) xmlSchemaValidateFile __attribute((alias("xmlSchemaValidateFile__internal_alias")));
-#else
-#ifndef xmlSchemaValidateFile
-extern __typeof (xmlSchemaValidateFile) xmlSchemaValidateFile__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateFile xmlSchemaValidateFile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValidateLengthFacet
-extern __typeof (xmlSchemaValidateLengthFacet) xmlSchemaValidateLengthFacet __attribute((alias("xmlSchemaValidateLengthFacet__internal_alias")));
-#else
-#ifndef xmlSchemaValidateLengthFacet
-extern __typeof (xmlSchemaValidateLengthFacet) xmlSchemaValidateLengthFacet__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateLengthFacet xmlSchemaValidateLengthFacet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValidateLengthFacetWhtsp
-extern __typeof (xmlSchemaValidateLengthFacetWhtsp) xmlSchemaValidateLengthFacetWhtsp __attribute((alias("xmlSchemaValidateLengthFacetWhtsp__internal_alias")));
-#else
-#ifndef xmlSchemaValidateLengthFacetWhtsp
-extern __typeof (xmlSchemaValidateLengthFacetWhtsp) xmlSchemaValidateLengthFacetWhtsp__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateLengthFacetWhtsp xmlSchemaValidateLengthFacetWhtsp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValidateListSimpleTypeFacet
-extern __typeof (xmlSchemaValidateListSimpleTypeFacet) xmlSchemaValidateListSimpleTypeFacet __attribute((alias("xmlSchemaValidateListSimpleTypeFacet__internal_alias")));
-#else
-#ifndef xmlSchemaValidateListSimpleTypeFacet
-extern __typeof (xmlSchemaValidateListSimpleTypeFacet) xmlSchemaValidateListSimpleTypeFacet__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateListSimpleTypeFacet xmlSchemaValidateListSimpleTypeFacet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaValidateOneElement
-extern __typeof (xmlSchemaValidateOneElement) xmlSchemaValidateOneElement __attribute((alias("xmlSchemaValidateOneElement__internal_alias")));
-#else
-#ifndef xmlSchemaValidateOneElement
-extern __typeof (xmlSchemaValidateOneElement) xmlSchemaValidateOneElement__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateOneElement xmlSchemaValidateOneElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValidatePredefinedType
-extern __typeof (xmlSchemaValidatePredefinedType) xmlSchemaValidatePredefinedType __attribute((alias("xmlSchemaValidatePredefinedType__internal_alias")));
-#else
-#ifndef xmlSchemaValidatePredefinedType
-extern __typeof (xmlSchemaValidatePredefinedType) xmlSchemaValidatePredefinedType__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidatePredefinedType xmlSchemaValidatePredefinedType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaValidateSetFilename
-extern __typeof (xmlSchemaValidateSetFilename) xmlSchemaValidateSetFilename __attribute((alias("xmlSchemaValidateSetFilename__internal_alias")));
-#else
-#ifndef xmlSchemaValidateSetFilename
-extern __typeof (xmlSchemaValidateSetFilename) xmlSchemaValidateSetFilename__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateSetFilename xmlSchemaValidateSetFilename__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaValidateSetLocator
-extern __typeof (xmlSchemaValidateSetLocator) xmlSchemaValidateSetLocator __attribute((alias("xmlSchemaValidateSetLocator__internal_alias")));
-#else
-#ifndef xmlSchemaValidateSetLocator
-extern __typeof (xmlSchemaValidateSetLocator) xmlSchemaValidateSetLocator__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateSetLocator xmlSchemaValidateSetLocator__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemas
-#undef xmlSchemaValidateStream
-extern __typeof (xmlSchemaValidateStream) xmlSchemaValidateStream __attribute((alias("xmlSchemaValidateStream__internal_alias")));
-#else
-#ifndef xmlSchemaValidateStream
-extern __typeof (xmlSchemaValidateStream) xmlSchemaValidateStream__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValidateStream xmlSchemaValidateStream__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValueAppend
-extern __typeof (xmlSchemaValueAppend) xmlSchemaValueAppend __attribute((alias("xmlSchemaValueAppend__internal_alias")));
-#else
-#ifndef xmlSchemaValueAppend
-extern __typeof (xmlSchemaValueAppend) xmlSchemaValueAppend__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValueAppend xmlSchemaValueAppend__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValueGetAsBoolean
-extern __typeof (xmlSchemaValueGetAsBoolean) xmlSchemaValueGetAsBoolean __attribute((alias("xmlSchemaValueGetAsBoolean__internal_alias")));
-#else
-#ifndef xmlSchemaValueGetAsBoolean
-extern __typeof (xmlSchemaValueGetAsBoolean) xmlSchemaValueGetAsBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValueGetAsBoolean xmlSchemaValueGetAsBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValueGetAsString
-extern __typeof (xmlSchemaValueGetAsString) xmlSchemaValueGetAsString __attribute((alias("xmlSchemaValueGetAsString__internal_alias")));
-#else
-#ifndef xmlSchemaValueGetAsString
-extern __typeof (xmlSchemaValueGetAsString) xmlSchemaValueGetAsString__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValueGetAsString xmlSchemaValueGetAsString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaValueGetNext
-extern __typeof (xmlSchemaValueGetNext) xmlSchemaValueGetNext __attribute((alias("xmlSchemaValueGetNext__internal_alias")));
-#else
-#ifndef xmlSchemaValueGetNext
-extern __typeof (xmlSchemaValueGetNext) xmlSchemaValueGetNext__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaValueGetNext xmlSchemaValueGetNext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlschemastypes
-#undef xmlSchemaWhiteSpaceReplace
-extern __typeof (xmlSchemaWhiteSpaceReplace) xmlSchemaWhiteSpaceReplace __attribute((alias("xmlSchemaWhiteSpaceReplace__internal_alias")));
-#else
-#ifndef xmlSchemaWhiteSpaceReplace
-extern __typeof (xmlSchemaWhiteSpaceReplace) xmlSchemaWhiteSpaceReplace__internal_alias __attribute((visibility("hidden")));
-#define xmlSchemaWhiteSpaceReplace xmlSchemaWhiteSpaceReplace__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronFree
-extern __typeof (xmlSchematronFree) xmlSchematronFree __attribute((alias("xmlSchematronFree__internal_alias")));
-#else
-#ifndef xmlSchematronFree
-extern __typeof (xmlSchematronFree) xmlSchematronFree__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronFree xmlSchematronFree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronFreeParserCtxt
-extern __typeof (xmlSchematronFreeParserCtxt) xmlSchematronFreeParserCtxt __attribute((alias("xmlSchematronFreeParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchematronFreeParserCtxt
-extern __typeof (xmlSchematronFreeParserCtxt) xmlSchematronFreeParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronFreeParserCtxt xmlSchematronFreeParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronFreeValidCtxt
-extern __typeof (xmlSchematronFreeValidCtxt) xmlSchematronFreeValidCtxt __attribute((alias("xmlSchematronFreeValidCtxt__internal_alias")));
-#else
-#ifndef xmlSchematronFreeValidCtxt
-extern __typeof (xmlSchematronFreeValidCtxt) xmlSchematronFreeValidCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronFreeValidCtxt xmlSchematronFreeValidCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronNewDocParserCtxt
-extern __typeof (xmlSchematronNewDocParserCtxt) xmlSchematronNewDocParserCtxt __attribute((alias("xmlSchematronNewDocParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchematronNewDocParserCtxt
-extern __typeof (xmlSchematronNewDocParserCtxt) xmlSchematronNewDocParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronNewDocParserCtxt xmlSchematronNewDocParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronNewMemParserCtxt
-extern __typeof (xmlSchematronNewMemParserCtxt) xmlSchematronNewMemParserCtxt __attribute((alias("xmlSchematronNewMemParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchematronNewMemParserCtxt
-extern __typeof (xmlSchematronNewMemParserCtxt) xmlSchematronNewMemParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronNewMemParserCtxt xmlSchematronNewMemParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronNewParserCtxt
-extern __typeof (xmlSchematronNewParserCtxt) xmlSchematronNewParserCtxt __attribute((alias("xmlSchematronNewParserCtxt__internal_alias")));
-#else
-#ifndef xmlSchematronNewParserCtxt
-extern __typeof (xmlSchematronNewParserCtxt) xmlSchematronNewParserCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronNewParserCtxt xmlSchematronNewParserCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronNewValidCtxt
-extern __typeof (xmlSchematronNewValidCtxt) xmlSchematronNewValidCtxt __attribute((alias("xmlSchematronNewValidCtxt__internal_alias")));
-#else
-#ifndef xmlSchematronNewValidCtxt
-extern __typeof (xmlSchematronNewValidCtxt) xmlSchematronNewValidCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronNewValidCtxt xmlSchematronNewValidCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronParse
-extern __typeof (xmlSchematronParse) xmlSchematronParse __attribute((alias("xmlSchematronParse__internal_alias")));
-#else
-#ifndef xmlSchematronParse
-extern __typeof (xmlSchematronParse) xmlSchematronParse__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronParse xmlSchematronParse__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronSetValidStructuredErrors
-extern __typeof (xmlSchematronSetValidStructuredErrors) xmlSchematronSetValidStructuredErrors __attribute((alias("xmlSchematronSetValidStructuredErrors__internal_alias")));
-#else
-#ifndef xmlSchematronSetValidStructuredErrors
-extern __typeof (xmlSchematronSetValidStructuredErrors) xmlSchematronSetValidStructuredErrors__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronSetValidStructuredErrors xmlSchematronSetValidStructuredErrors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
-#ifdef bottom_schematron
-#undef xmlSchematronValidateDoc
-extern __typeof (xmlSchematronValidateDoc) xmlSchematronValidateDoc __attribute((alias("xmlSchematronValidateDoc__internal_alias")));
-#else
-#ifndef xmlSchematronValidateDoc
-extern __typeof (xmlSchematronValidateDoc) xmlSchematronValidateDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlSchematronValidateDoc xmlSchematronValidateDoc__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSearchNs
-extern __typeof (xmlSearchNs) xmlSearchNs __attribute((alias("xmlSearchNs__internal_alias")));
-#else
-#ifndef xmlSearchNs
-extern __typeof (xmlSearchNs) xmlSearchNs__internal_alias __attribute((visibility("hidden")));
-#define xmlSearchNs xmlSearchNs__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSearchNsByHref
-extern __typeof (xmlSearchNsByHref) xmlSearchNsByHref __attribute((alias("xmlSearchNsByHref__internal_alias")));
-#else
-#ifndef xmlSearchNsByHref
-extern __typeof (xmlSearchNsByHref) xmlSearchNsByHref__internal_alias __attribute((visibility("hidden")));
-#define xmlSearchNsByHref xmlSearchNsByHref__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSetBufferAllocationScheme
-extern __typeof (xmlSetBufferAllocationScheme) xmlSetBufferAllocationScheme __attribute((alias("xmlSetBufferAllocationScheme__internal_alias")));
-#else
-#ifndef xmlSetBufferAllocationScheme
-extern __typeof (xmlSetBufferAllocationScheme) xmlSetBufferAllocationScheme__internal_alias __attribute((visibility("hidden")));
-#define xmlSetBufferAllocationScheme xmlSetBufferAllocationScheme__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSetCompressMode
-extern __typeof (xmlSetCompressMode) xmlSetCompressMode __attribute((alias("xmlSetCompressMode__internal_alias")));
-#else
-#ifndef xmlSetCompressMode
-extern __typeof (xmlSetCompressMode) xmlSetCompressMode__internal_alias __attribute((visibility("hidden")));
-#define xmlSetCompressMode xmlSetCompressMode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSetDocCompressMode
-extern __typeof (xmlSetDocCompressMode) xmlSetDocCompressMode __attribute((alias("xmlSetDocCompressMode__internal_alias")));
-#else
-#ifndef xmlSetDocCompressMode
-extern __typeof (xmlSetDocCompressMode) xmlSetDocCompressMode__internal_alias __attribute((visibility("hidden")));
-#define xmlSetDocCompressMode xmlSetDocCompressMode__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_parser
-#undef xmlSetEntityReferenceFunc
-extern __typeof (xmlSetEntityReferenceFunc) xmlSetEntityReferenceFunc __attribute((alias("xmlSetEntityReferenceFunc__internal_alias")));
-#else
-#ifndef xmlSetEntityReferenceFunc
-extern __typeof (xmlSetEntityReferenceFunc) xmlSetEntityReferenceFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlSetEntityReferenceFunc xmlSetEntityReferenceFunc__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_xmlIO
-#undef xmlSetExternalEntityLoader
-extern __typeof (xmlSetExternalEntityLoader) xmlSetExternalEntityLoader __attribute((alias("xmlSetExternalEntityLoader__internal_alias")));
-#else
-#ifndef xmlSetExternalEntityLoader
-extern __typeof (xmlSetExternalEntityLoader) xmlSetExternalEntityLoader__internal_alias __attribute((visibility("hidden")));
-#define xmlSetExternalEntityLoader xmlSetExternalEntityLoader__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_legacy
-#undef xmlSetFeature
-extern __typeof (xmlSetFeature) xmlSetFeature __attribute((alias("xmlSetFeature__internal_alias")));
-#else
-#ifndef xmlSetFeature
-extern __typeof (xmlSetFeature) xmlSetFeature__internal_alias __attribute((visibility("hidden")));
-#define xmlSetFeature xmlSetFeature__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlSetGenericErrorFunc
-extern __typeof (xmlSetGenericErrorFunc) xmlSetGenericErrorFunc __attribute((alias("xmlSetGenericErrorFunc__internal_alias")));
-#else
-#ifndef xmlSetGenericErrorFunc
-extern __typeof (xmlSetGenericErrorFunc) xmlSetGenericErrorFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlSetGenericErrorFunc xmlSetGenericErrorFunc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSetListDoc
-extern __typeof (xmlSetListDoc) xmlSetListDoc __attribute((alias("xmlSetListDoc__internal_alias")));
-#else
-#ifndef xmlSetListDoc
-extern __typeof (xmlSetListDoc) xmlSetListDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlSetListDoc xmlSetListDoc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSetNs
-extern __typeof (xmlSetNs) xmlSetNs __attribute((alias("xmlSetNs__internal_alias")));
-#else
-#ifndef xmlSetNs
-extern __typeof (xmlSetNs) xmlSetNs__internal_alias __attribute((visibility("hidden")));
-#define xmlSetNs xmlSetNs__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_tree
-#undef xmlSetNsProp
-extern __typeof (xmlSetNsProp) xmlSetNsProp __attribute((alias("xmlSetNsProp__internal_alias")));
-#else
-#ifndef xmlSetNsProp
-extern __typeof (xmlSetNsProp) xmlSetNsProp__internal_alias __attribute((visibility("hidden")));
-#define xmlSetNsProp xmlSetNsProp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
-#ifdef bottom_tree
-#undef xmlSetProp
-extern __typeof (xmlSetProp) xmlSetProp __attribute((alias("xmlSetProp__internal_alias")));
-#else
-#ifndef xmlSetProp
-extern __typeof (xmlSetProp) xmlSetProp__internal_alias __attribute((visibility("hidden")));
-#define xmlSetProp xmlSetProp__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_error
-#undef xmlSetStructuredErrorFunc
-extern __typeof (xmlSetStructuredErrorFunc) xmlSetStructuredErrorFunc __attribute((alias("xmlSetStructuredErrorFunc__internal_alias")));
-#else
-#ifndef xmlSetStructuredErrorFunc
-extern __typeof (xmlSetStructuredErrorFunc) xmlSetStructuredErrorFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlSetStructuredErrorFunc xmlSetStructuredErrorFunc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSetTreeDoc
-extern __typeof (xmlSetTreeDoc) xmlSetTreeDoc __attribute((alias("xmlSetTreeDoc__internal_alias")));
-#else
-#ifndef xmlSetTreeDoc
-extern __typeof (xmlSetTreeDoc) xmlSetTreeDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlSetTreeDoc xmlSetTreeDoc__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef bottom_parser
-#undef xmlSetupParserForBuffer
-extern __typeof (xmlSetupParserForBuffer) xmlSetupParserForBuffer __attribute((alias("xmlSetupParserForBuffer__internal_alias")));
-#else
-#ifndef xmlSetupParserForBuffer
-extern __typeof (xmlSetupParserForBuffer) xmlSetupParserForBuffer__internal_alias __attribute((visibility("hidden")));
-#define xmlSetupParserForBuffer xmlSetupParserForBuffer__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShell
-extern __typeof (xmlShell) xmlShell __attribute((alias("xmlShell__internal_alias")));
-#else
-#ifndef xmlShell
-extern __typeof (xmlShell) xmlShell__internal_alias __attribute((visibility("hidden")));
-#define xmlShell xmlShell__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellBase
-extern __typeof (xmlShellBase) xmlShellBase __attribute((alias("xmlShellBase__internal_alias")));
-#else
-#ifndef xmlShellBase
-extern __typeof (xmlShellBase) xmlShellBase__internal_alias __attribute((visibility("hidden")));
-#define xmlShellBase xmlShellBase__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellCat
-extern __typeof (xmlShellCat) xmlShellCat __attribute((alias("xmlShellCat__internal_alias")));
-#else
-#ifndef xmlShellCat
-extern __typeof (xmlShellCat) xmlShellCat__internal_alias __attribute((visibility("hidden")));
-#define xmlShellCat xmlShellCat__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellDir
-extern __typeof (xmlShellDir) xmlShellDir __attribute((alias("xmlShellDir__internal_alias")));
-#else
-#ifndef xmlShellDir
-extern __typeof (xmlShellDir) xmlShellDir__internal_alias __attribute((visibility("hidden")));
-#define xmlShellDir xmlShellDir__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellDu
-extern __typeof (xmlShellDu) xmlShellDu __attribute((alias("xmlShellDu__internal_alias")));
-#else
-#ifndef xmlShellDu
-extern __typeof (xmlShellDu) xmlShellDu__internal_alias __attribute((visibility("hidden")));
-#define xmlShellDu xmlShellDu__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellList
-extern __typeof (xmlShellList) xmlShellList __attribute((alias("xmlShellList__internal_alias")));
-#else
-#ifndef xmlShellList
-extern __typeof (xmlShellList) xmlShellList__internal_alias __attribute((visibility("hidden")));
-#define xmlShellList xmlShellList__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellLoad
-extern __typeof (xmlShellLoad) xmlShellLoad __attribute((alias("xmlShellLoad__internal_alias")));
-#else
-#ifndef xmlShellLoad
-extern __typeof (xmlShellLoad) xmlShellLoad__internal_alias __attribute((visibility("hidden")));
-#define xmlShellLoad xmlShellLoad__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellPrintNode
-extern __typeof (xmlShellPrintNode) xmlShellPrintNode __attribute((alias("xmlShellPrintNode__internal_alias")));
-#else
-#ifndef xmlShellPrintNode
-extern __typeof (xmlShellPrintNode) xmlShellPrintNode__internal_alias __attribute((visibility("hidden")));
-#define xmlShellPrintNode xmlShellPrintNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellPrintXPathError
-extern __typeof (xmlShellPrintXPathError) xmlShellPrintXPathError __attribute((alias("xmlShellPrintXPathError__internal_alias")));
-#else
-#ifndef xmlShellPrintXPathError
-extern __typeof (xmlShellPrintXPathError) xmlShellPrintXPathError__internal_alias __attribute((visibility("hidden")));
-#define xmlShellPrintXPathError xmlShellPrintXPathError__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellPrintXPathResult
-extern __typeof (xmlShellPrintXPathResult) xmlShellPrintXPathResult __attribute((alias("xmlShellPrintXPathResult__internal_alias")));
-#else
-#ifndef xmlShellPrintXPathResult
-extern __typeof (xmlShellPrintXPathResult) xmlShellPrintXPathResult__internal_alias __attribute((visibility("hidden")));
-#define xmlShellPrintXPathResult xmlShellPrintXPathResult__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellPwd
-extern __typeof (xmlShellPwd) xmlShellPwd __attribute((alias("xmlShellPwd__internal_alias")));
-#else
-#ifndef xmlShellPwd
-extern __typeof (xmlShellPwd) xmlShellPwd__internal_alias __attribute((visibility("hidden")));
-#define xmlShellPwd xmlShellPwd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellSave
-extern __typeof (xmlShellSave) xmlShellSave __attribute((alias("xmlShellSave__internal_alias")));
-#else
-#ifndef xmlShellSave
-extern __typeof (xmlShellSave) xmlShellSave__internal_alias __attribute((visibility("hidden")));
-#define xmlShellSave xmlShellSave__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellValidate
-extern __typeof (xmlShellValidate) xmlShellValidate __attribute((alias("xmlShellValidate__internal_alias")));
-#else
-#ifndef xmlShellValidate
-extern __typeof (xmlShellValidate) xmlShellValidate__internal_alias __attribute((visibility("hidden")));
-#define xmlShellValidate xmlShellValidate__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_debugXML
-#undef xmlShellWrite
-extern __typeof (xmlShellWrite) xmlShellWrite __attribute((alias("xmlShellWrite__internal_alias")));
-#else
-#ifndef xmlShellWrite
-extern __typeof (xmlShellWrite) xmlShellWrite__internal_alias __attribute((visibility("hidden")));
-#define xmlShellWrite xmlShellWrite__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlSkipBlankChars
-extern __typeof (xmlSkipBlankChars) xmlSkipBlankChars __attribute((alias("xmlSkipBlankChars__internal_alias")));
-#else
-#ifndef xmlSkipBlankChars
-extern __typeof (xmlSkipBlankChars) xmlSkipBlankChars__internal_alias __attribute((visibility("hidden")));
-#define xmlSkipBlankChars xmlSkipBlankChars__internal_alias
-#endif
-#endif
-
-#ifdef bottom_valid
-#undef xmlSnprintfElementContent
-extern __typeof (xmlSnprintfElementContent) xmlSnprintfElementContent __attribute((alias("xmlSnprintfElementContent__internal_alias")));
-#else
-#ifndef xmlSnprintfElementContent
-extern __typeof (xmlSnprintfElementContent) xmlSnprintfElementContent__internal_alias __attribute((visibility("hidden")));
-#define xmlSnprintfElementContent xmlSnprintfElementContent__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlSplitQName
-extern __typeof (xmlSplitQName) xmlSplitQName __attribute((alias("xmlSplitQName__internal_alias")));
-#else
-#ifndef xmlSplitQName
-extern __typeof (xmlSplitQName) xmlSplitQName__internal_alias __attribute((visibility("hidden")));
-#define xmlSplitQName xmlSplitQName__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSplitQName2
-extern __typeof (xmlSplitQName2) xmlSplitQName2 __attribute((alias("xmlSplitQName2__internal_alias")));
-#else
-#ifndef xmlSplitQName2
-extern __typeof (xmlSplitQName2) xmlSplitQName2__internal_alias __attribute((visibility("hidden")));
-#define xmlSplitQName2 xmlSplitQName2__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlSplitQName3
-extern __typeof (xmlSplitQName3) xmlSplitQName3 __attribute((alias("xmlSplitQName3__internal_alias")));
-#else
-#ifndef xmlSplitQName3
-extern __typeof (xmlSplitQName3) xmlSplitQName3__internal_alias __attribute((visibility("hidden")));
-#define xmlSplitQName3 xmlSplitQName3__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef bottom_valid
-#undef xmlSprintfElementContent
-extern __typeof (xmlSprintfElementContent) xmlSprintfElementContent __attribute((alias("xmlSprintfElementContent__internal_alias")));
-#else
-#ifndef xmlSprintfElementContent
-extern __typeof (xmlSprintfElementContent) xmlSprintfElementContent__internal_alias __attribute((visibility("hidden")));
-#define xmlSprintfElementContent xmlSprintfElementContent__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlStopParser
-extern __typeof (xmlStopParser) xmlStopParser __attribute((alias("xmlStopParser__internal_alias")));
-#else
-#ifndef xmlStopParser
-extern __typeof (xmlStopParser) xmlStopParser__internal_alias __attribute((visibility("hidden")));
-#define xmlStopParser xmlStopParser__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrEqual
-extern __typeof (xmlStrEqual) xmlStrEqual __attribute((alias("xmlStrEqual__internal_alias")));
-#else
-#ifndef xmlStrEqual
-extern __typeof (xmlStrEqual) xmlStrEqual__internal_alias __attribute((visibility("hidden")));
-#define xmlStrEqual xmlStrEqual__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrPrintf
-extern __typeof (xmlStrPrintf) xmlStrPrintf __attribute((alias("xmlStrPrintf__internal_alias")));
-#else
-#ifndef xmlStrPrintf
-extern __typeof (xmlStrPrintf) xmlStrPrintf__internal_alias __attribute((visibility("hidden")));
-#define xmlStrPrintf xmlStrPrintf__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrQEqual
-extern __typeof (xmlStrQEqual) xmlStrQEqual __attribute((alias("xmlStrQEqual__internal_alias")));
-#else
-#ifndef xmlStrQEqual
-extern __typeof (xmlStrQEqual) xmlStrQEqual__internal_alias __attribute((visibility("hidden")));
-#define xmlStrQEqual xmlStrQEqual__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrVPrintf
-extern __typeof (xmlStrVPrintf) xmlStrVPrintf __attribute((alias("xmlStrVPrintf__internal_alias")));
-#else
-#ifndef xmlStrVPrintf
-extern __typeof (xmlStrVPrintf) xmlStrVPrintf__internal_alias __attribute((visibility("hidden")));
-#define xmlStrVPrintf xmlStrVPrintf__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrcasecmp
-extern __typeof (xmlStrcasecmp) xmlStrcasecmp __attribute((alias("xmlStrcasecmp__internal_alias")));
-#else
-#ifndef xmlStrcasecmp
-extern __typeof (xmlStrcasecmp) xmlStrcasecmp__internal_alias __attribute((visibility("hidden")));
-#define xmlStrcasecmp xmlStrcasecmp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrcasestr
-extern __typeof (xmlStrcasestr) xmlStrcasestr __attribute((alias("xmlStrcasestr__internal_alias")));
-#else
-#ifndef xmlStrcasestr
-extern __typeof (xmlStrcasestr) xmlStrcasestr__internal_alias __attribute((visibility("hidden")));
-#define xmlStrcasestr xmlStrcasestr__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrcat
-extern __typeof (xmlStrcat) xmlStrcat __attribute((alias("xmlStrcat__internal_alias")));
-#else
-#ifndef xmlStrcat
-extern __typeof (xmlStrcat) xmlStrcat__internal_alias __attribute((visibility("hidden")));
-#define xmlStrcat xmlStrcat__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrchr
-extern __typeof (xmlStrchr) xmlStrchr __attribute((alias("xmlStrchr__internal_alias")));
-#else
-#ifndef xmlStrchr
-extern __typeof (xmlStrchr) xmlStrchr__internal_alias __attribute((visibility("hidden")));
-#define xmlStrchr xmlStrchr__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrcmp
-extern __typeof (xmlStrcmp) xmlStrcmp __attribute((alias("xmlStrcmp__internal_alias")));
-#else
-#ifndef xmlStrcmp
-extern __typeof (xmlStrcmp) xmlStrcmp__internal_alias __attribute((visibility("hidden")));
-#define xmlStrcmp xmlStrcmp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrdup
-extern __typeof (xmlStrdup) xmlStrdup __attribute((alias("xmlStrdup__internal_alias")));
-#else
-#ifndef xmlStrdup
-extern __typeof (xmlStrdup) xmlStrdup__internal_alias __attribute((visibility("hidden")));
-#define xmlStrdup xmlStrdup__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlStreamPop
-extern __typeof (xmlStreamPop) xmlStreamPop __attribute((alias("xmlStreamPop__internal_alias")));
-#else
-#ifndef xmlStreamPop
-extern __typeof (xmlStreamPop) xmlStreamPop__internal_alias __attribute((visibility("hidden")));
-#define xmlStreamPop xmlStreamPop__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlStreamPush
-extern __typeof (xmlStreamPush) xmlStreamPush __attribute((alias("xmlStreamPush__internal_alias")));
-#else
-#ifndef xmlStreamPush
-extern __typeof (xmlStreamPush) xmlStreamPush__internal_alias __attribute((visibility("hidden")));
-#define xmlStreamPush xmlStreamPush__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlStreamPushAttr
-extern __typeof (xmlStreamPushAttr) xmlStreamPushAttr __attribute((alias("xmlStreamPushAttr__internal_alias")));
-#else
-#ifndef xmlStreamPushAttr
-extern __typeof (xmlStreamPushAttr) xmlStreamPushAttr__internal_alias __attribute((visibility("hidden")));
-#define xmlStreamPushAttr xmlStreamPushAttr__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlStreamPushNode
-extern __typeof (xmlStreamPushNode) xmlStreamPushNode __attribute((alias("xmlStreamPushNode__internal_alias")));
-#else
-#ifndef xmlStreamPushNode
-extern __typeof (xmlStreamPushNode) xmlStreamPushNode__internal_alias __attribute((visibility("hidden")));
-#define xmlStreamPushNode xmlStreamPushNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_pattern
-#undef xmlStreamWantsAnyNode
-extern __typeof (xmlStreamWantsAnyNode) xmlStreamWantsAnyNode __attribute((alias("xmlStreamWantsAnyNode__internal_alias")));
-#else
-#ifndef xmlStreamWantsAnyNode
-extern __typeof (xmlStreamWantsAnyNode) xmlStreamWantsAnyNode__internal_alias __attribute((visibility("hidden")));
-#define xmlStreamWantsAnyNode xmlStreamWantsAnyNode__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlStringCurrentChar
-extern __typeof (xmlStringCurrentChar) xmlStringCurrentChar __attribute((alias("xmlStringCurrentChar__internal_alias")));
-#else
-#ifndef xmlStringCurrentChar
-extern __typeof (xmlStringCurrentChar) xmlStringCurrentChar__internal_alias __attribute((visibility("hidden")));
-#define xmlStringCurrentChar xmlStringCurrentChar__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlStringDecodeEntities
-extern __typeof (xmlStringDecodeEntities) xmlStringDecodeEntities __attribute((alias("xmlStringDecodeEntities__internal_alias")));
-#else
-#ifndef xmlStringDecodeEntities
-extern __typeof (xmlStringDecodeEntities) xmlStringDecodeEntities__internal_alias __attribute((visibility("hidden")));
-#define xmlStringDecodeEntities xmlStringDecodeEntities__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlStringGetNodeList
-extern __typeof (xmlStringGetNodeList) xmlStringGetNodeList __attribute((alias("xmlStringGetNodeList__internal_alias")));
-#else
-#ifndef xmlStringGetNodeList
-extern __typeof (xmlStringGetNodeList) xmlStringGetNodeList__internal_alias __attribute((visibility("hidden")));
-#define xmlStringGetNodeList xmlStringGetNodeList__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parser
-#undef xmlStringLenDecodeEntities
-extern __typeof (xmlStringLenDecodeEntities) xmlStringLenDecodeEntities __attribute((alias("xmlStringLenDecodeEntities__internal_alias")));
-#else
-#ifndef xmlStringLenDecodeEntities
-extern __typeof (xmlStringLenDecodeEntities) xmlStringLenDecodeEntities__internal_alias __attribute((visibility("hidden")));
-#define xmlStringLenDecodeEntities xmlStringLenDecodeEntities__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlStringLenGetNodeList
-extern __typeof (xmlStringLenGetNodeList) xmlStringLenGetNodeList __attribute((alias("xmlStringLenGetNodeList__internal_alias")));
-#else
-#ifndef xmlStringLenGetNodeList
-extern __typeof (xmlStringLenGetNodeList) xmlStringLenGetNodeList__internal_alias __attribute((visibility("hidden")));
-#define xmlStringLenGetNodeList xmlStringLenGetNodeList__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrlen
-extern __typeof (xmlStrlen) xmlStrlen __attribute((alias("xmlStrlen__internal_alias")));
-#else
-#ifndef xmlStrlen
-extern __typeof (xmlStrlen) xmlStrlen__internal_alias __attribute((visibility("hidden")));
-#define xmlStrlen xmlStrlen__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrncasecmp
-extern __typeof (xmlStrncasecmp) xmlStrncasecmp __attribute((alias("xmlStrncasecmp__internal_alias")));
-#else
-#ifndef xmlStrncasecmp
-extern __typeof (xmlStrncasecmp) xmlStrncasecmp__internal_alias __attribute((visibility("hidden")));
-#define xmlStrncasecmp xmlStrncasecmp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrncat
-extern __typeof (xmlStrncat) xmlStrncat __attribute((alias("xmlStrncat__internal_alias")));
-#else
-#ifndef xmlStrncat
-extern __typeof (xmlStrncat) xmlStrncat__internal_alias __attribute((visibility("hidden")));
-#define xmlStrncat xmlStrncat__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrncatNew
-extern __typeof (xmlStrncatNew) xmlStrncatNew __attribute((alias("xmlStrncatNew__internal_alias")));
-#else
-#ifndef xmlStrncatNew
-extern __typeof (xmlStrncatNew) xmlStrncatNew__internal_alias __attribute((visibility("hidden")));
-#define xmlStrncatNew xmlStrncatNew__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrncmp
-extern __typeof (xmlStrncmp) xmlStrncmp __attribute((alias("xmlStrncmp__internal_alias")));
-#else
-#ifndef xmlStrncmp
-extern __typeof (xmlStrncmp) xmlStrncmp__internal_alias __attribute((visibility("hidden")));
-#define xmlStrncmp xmlStrncmp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrndup
-extern __typeof (xmlStrndup) xmlStrndup __attribute((alias("xmlStrndup__internal_alias")));
-#else
-#ifndef xmlStrndup
-extern __typeof (xmlStrndup) xmlStrndup__internal_alias __attribute((visibility("hidden")));
-#define xmlStrndup xmlStrndup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrstr
-extern __typeof (xmlStrstr) xmlStrstr __attribute((alias("xmlStrstr__internal_alias")));
-#else
-#ifndef xmlStrstr
-extern __typeof (xmlStrstr) xmlStrstr__internal_alias __attribute((visibility("hidden")));
-#define xmlStrstr xmlStrstr__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlStrsub
-extern __typeof (xmlStrsub) xmlStrsub __attribute((alias("xmlStrsub__internal_alias")));
-#else
-#ifndef xmlStrsub
-extern __typeof (xmlStrsub) xmlStrsub__internal_alias __attribute((visibility("hidden")));
-#define xmlStrsub xmlStrsub__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlSubstituteEntitiesDefault
-extern __typeof (xmlSubstituteEntitiesDefault) xmlSubstituteEntitiesDefault __attribute((alias("xmlSubstituteEntitiesDefault__internal_alias")));
-#else
-#ifndef xmlSubstituteEntitiesDefault
-extern __typeof (xmlSubstituteEntitiesDefault) xmlSubstituteEntitiesDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlSubstituteEntitiesDefault xmlSubstituteEntitiesDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlSwitchEncoding
-extern __typeof (xmlSwitchEncoding) xmlSwitchEncoding __attribute((alias("xmlSwitchEncoding__internal_alias")));
-#else
-#ifndef xmlSwitchEncoding
-extern __typeof (xmlSwitchEncoding) xmlSwitchEncoding__internal_alias __attribute((visibility("hidden")));
-#define xmlSwitchEncoding xmlSwitchEncoding__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlSwitchInputEncoding
-extern __typeof (xmlSwitchInputEncoding) xmlSwitchInputEncoding __attribute((alias("xmlSwitchInputEncoding__internal_alias")));
-#else
-#ifndef xmlSwitchInputEncoding
-extern __typeof (xmlSwitchInputEncoding) xmlSwitchInputEncoding__internal_alias __attribute((visibility("hidden")));
-#define xmlSwitchInputEncoding xmlSwitchInputEncoding__internal_alias
-#endif
-#endif
-
-#ifdef bottom_parserInternals
-#undef xmlSwitchToEncoding
-extern __typeof (xmlSwitchToEncoding) xmlSwitchToEncoding __attribute((alias("xmlSwitchToEncoding__internal_alias")));
-#else
-#ifndef xmlSwitchToEncoding
-extern __typeof (xmlSwitchToEncoding) xmlSwitchToEncoding__internal_alias __attribute((visibility("hidden")));
-#define xmlSwitchToEncoding xmlSwitchToEncoding__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlTextConcat
-extern __typeof (xmlTextConcat) xmlTextConcat __attribute((alias("xmlTextConcat__internal_alias")));
-#else
-#ifndef xmlTextConcat
-extern __typeof (xmlTextConcat) xmlTextConcat__internal_alias __attribute((visibility("hidden")));
-#define xmlTextConcat xmlTextConcat__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlTextMerge
-extern __typeof (xmlTextMerge) xmlTextMerge __attribute((alias("xmlTextMerge__internal_alias")));
-#else
-#ifndef xmlTextMerge
-extern __typeof (xmlTextMerge) xmlTextMerge__internal_alias __attribute((visibility("hidden")));
-#define xmlTextMerge xmlTextMerge__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderAttributeCount
-extern __typeof (xmlTextReaderAttributeCount) xmlTextReaderAttributeCount __attribute((alias("xmlTextReaderAttributeCount__internal_alias")));
-#else
-#ifndef xmlTextReaderAttributeCount
-extern __typeof (xmlTextReaderAttributeCount) xmlTextReaderAttributeCount__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderAttributeCount xmlTextReaderAttributeCount__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderBaseUri
-extern __typeof (xmlTextReaderBaseUri) xmlTextReaderBaseUri __attribute((alias("xmlTextReaderBaseUri__internal_alias")));
-#else
-#ifndef xmlTextReaderBaseUri
-extern __typeof (xmlTextReaderBaseUri) xmlTextReaderBaseUri__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderBaseUri xmlTextReaderBaseUri__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderByteConsumed
-extern __typeof (xmlTextReaderByteConsumed) xmlTextReaderByteConsumed __attribute((alias("xmlTextReaderByteConsumed__internal_alias")));
-#else
-#ifndef xmlTextReaderByteConsumed
-extern __typeof (xmlTextReaderByteConsumed) xmlTextReaderByteConsumed__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderByteConsumed xmlTextReaderByteConsumed__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderClose
-extern __typeof (xmlTextReaderClose) xmlTextReaderClose __attribute((alias("xmlTextReaderClose__internal_alias")));
-#else
-#ifndef xmlTextReaderClose
-extern __typeof (xmlTextReaderClose) xmlTextReaderClose__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderClose xmlTextReaderClose__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstBaseUri
-extern __typeof (xmlTextReaderConstBaseUri) xmlTextReaderConstBaseUri __attribute((alias("xmlTextReaderConstBaseUri__internal_alias")));
-#else
-#ifndef xmlTextReaderConstBaseUri
-extern __typeof (xmlTextReaderConstBaseUri) xmlTextReaderConstBaseUri__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstBaseUri xmlTextReaderConstBaseUri__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstEncoding
-extern __typeof (xmlTextReaderConstEncoding) xmlTextReaderConstEncoding __attribute((alias("xmlTextReaderConstEncoding__internal_alias")));
-#else
-#ifndef xmlTextReaderConstEncoding
-extern __typeof (xmlTextReaderConstEncoding) xmlTextReaderConstEncoding__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstEncoding xmlTextReaderConstEncoding__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstLocalName
-extern __typeof (xmlTextReaderConstLocalName) xmlTextReaderConstLocalName __attribute((alias("xmlTextReaderConstLocalName__internal_alias")));
-#else
-#ifndef xmlTextReaderConstLocalName
-extern __typeof (xmlTextReaderConstLocalName) xmlTextReaderConstLocalName__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstLocalName xmlTextReaderConstLocalName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstName
-extern __typeof (xmlTextReaderConstName) xmlTextReaderConstName __attribute((alias("xmlTextReaderConstName__internal_alias")));
-#else
-#ifndef xmlTextReaderConstName
-extern __typeof (xmlTextReaderConstName) xmlTextReaderConstName__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstName xmlTextReaderConstName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstNamespaceUri
-extern __typeof (xmlTextReaderConstNamespaceUri) xmlTextReaderConstNamespaceUri __attribute((alias("xmlTextReaderConstNamespaceUri__internal_alias")));
-#else
-#ifndef xmlTextReaderConstNamespaceUri
-extern __typeof (xmlTextReaderConstNamespaceUri) xmlTextReaderConstNamespaceUri__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstNamespaceUri xmlTextReaderConstNamespaceUri__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstPrefix
-extern __typeof (xmlTextReaderConstPrefix) xmlTextReaderConstPrefix __attribute((alias("xmlTextReaderConstPrefix__internal_alias")));
-#else
-#ifndef xmlTextReaderConstPrefix
-extern __typeof (xmlTextReaderConstPrefix) xmlTextReaderConstPrefix__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstPrefix xmlTextReaderConstPrefix__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstString
-extern __typeof (xmlTextReaderConstString) xmlTextReaderConstString __attribute((alias("xmlTextReaderConstString__internal_alias")));
-#else
-#ifndef xmlTextReaderConstString
-extern __typeof (xmlTextReaderConstString) xmlTextReaderConstString__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstString xmlTextReaderConstString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstValue
-extern __typeof (xmlTextReaderConstValue) xmlTextReaderConstValue __attribute((alias("xmlTextReaderConstValue__internal_alias")));
-#else
-#ifndef xmlTextReaderConstValue
-extern __typeof (xmlTextReaderConstValue) xmlTextReaderConstValue__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstValue xmlTextReaderConstValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstXmlLang
-extern __typeof (xmlTextReaderConstXmlLang) xmlTextReaderConstXmlLang __attribute((alias("xmlTextReaderConstXmlLang__internal_alias")));
-#else
-#ifndef xmlTextReaderConstXmlLang
-extern __typeof (xmlTextReaderConstXmlLang) xmlTextReaderConstXmlLang__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstXmlLang xmlTextReaderConstXmlLang__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderConstXmlVersion
-extern __typeof (xmlTextReaderConstXmlVersion) xmlTextReaderConstXmlVersion __attribute((alias("xmlTextReaderConstXmlVersion__internal_alias")));
-#else
-#ifndef xmlTextReaderConstXmlVersion
-extern __typeof (xmlTextReaderConstXmlVersion) xmlTextReaderConstXmlVersion__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderConstXmlVersion xmlTextReaderConstXmlVersion__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderCurrentDoc
-extern __typeof (xmlTextReaderCurrentDoc) xmlTextReaderCurrentDoc __attribute((alias("xmlTextReaderCurrentDoc__internal_alias")));
-#else
-#ifndef xmlTextReaderCurrentDoc
-extern __typeof (xmlTextReaderCurrentDoc) xmlTextReaderCurrentDoc__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderCurrentDoc xmlTextReaderCurrentDoc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderCurrentNode
-extern __typeof (xmlTextReaderCurrentNode) xmlTextReaderCurrentNode __attribute((alias("xmlTextReaderCurrentNode__internal_alias")));
-#else
-#ifndef xmlTextReaderCurrentNode
-extern __typeof (xmlTextReaderCurrentNode) xmlTextReaderCurrentNode__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderCurrentNode xmlTextReaderCurrentNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderDepth
-extern __typeof (xmlTextReaderDepth) xmlTextReaderDepth __attribute((alias("xmlTextReaderDepth__internal_alias")));
-#else
-#ifndef xmlTextReaderDepth
-extern __typeof (xmlTextReaderDepth) xmlTextReaderDepth__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderDepth xmlTextReaderDepth__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderExpand
-extern __typeof (xmlTextReaderExpand) xmlTextReaderExpand __attribute((alias("xmlTextReaderExpand__internal_alias")));
-#else
-#ifndef xmlTextReaderExpand
-extern __typeof (xmlTextReaderExpand) xmlTextReaderExpand__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderExpand xmlTextReaderExpand__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderGetAttribute
-extern __typeof (xmlTextReaderGetAttribute) xmlTextReaderGetAttribute __attribute((alias("xmlTextReaderGetAttribute__internal_alias")));
-#else
-#ifndef xmlTextReaderGetAttribute
-extern __typeof (xmlTextReaderGetAttribute) xmlTextReaderGetAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderGetAttribute xmlTextReaderGetAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderGetAttributeNo
-extern __typeof (xmlTextReaderGetAttributeNo) xmlTextReaderGetAttributeNo __attribute((alias("xmlTextReaderGetAttributeNo__internal_alias")));
-#else
-#ifndef xmlTextReaderGetAttributeNo
-extern __typeof (xmlTextReaderGetAttributeNo) xmlTextReaderGetAttributeNo__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderGetAttributeNo xmlTextReaderGetAttributeNo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderGetAttributeNs
-extern __typeof (xmlTextReaderGetAttributeNs) xmlTextReaderGetAttributeNs __attribute((alias("xmlTextReaderGetAttributeNs__internal_alias")));
-#else
-#ifndef xmlTextReaderGetAttributeNs
-extern __typeof (xmlTextReaderGetAttributeNs) xmlTextReaderGetAttributeNs__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderGetAttributeNs xmlTextReaderGetAttributeNs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderGetErrorHandler
-extern __typeof (xmlTextReaderGetErrorHandler) xmlTextReaderGetErrorHandler __attribute((alias("xmlTextReaderGetErrorHandler__internal_alias")));
-#else
-#ifndef xmlTextReaderGetErrorHandler
-extern __typeof (xmlTextReaderGetErrorHandler) xmlTextReaderGetErrorHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderGetErrorHandler xmlTextReaderGetErrorHandler__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderGetParserColumnNumber
-extern __typeof (xmlTextReaderGetParserColumnNumber) xmlTextReaderGetParserColumnNumber __attribute((alias("xmlTextReaderGetParserColumnNumber__internal_alias")));
-#else
-#ifndef xmlTextReaderGetParserColumnNumber
-extern __typeof (xmlTextReaderGetParserColumnNumber) xmlTextReaderGetParserColumnNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderGetParserColumnNumber xmlTextReaderGetParserColumnNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderGetParserLineNumber
-extern __typeof (xmlTextReaderGetParserLineNumber) xmlTextReaderGetParserLineNumber __attribute((alias("xmlTextReaderGetParserLineNumber__internal_alias")));
-#else
-#ifndef xmlTextReaderGetParserLineNumber
-extern __typeof (xmlTextReaderGetParserLineNumber) xmlTextReaderGetParserLineNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderGetParserLineNumber xmlTextReaderGetParserLineNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderGetParserProp
-extern __typeof (xmlTextReaderGetParserProp) xmlTextReaderGetParserProp __attribute((alias("xmlTextReaderGetParserProp__internal_alias")));
-#else
-#ifndef xmlTextReaderGetParserProp
-extern __typeof (xmlTextReaderGetParserProp) xmlTextReaderGetParserProp__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderGetParserProp xmlTextReaderGetParserProp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderGetRemainder
-extern __typeof (xmlTextReaderGetRemainder) xmlTextReaderGetRemainder __attribute((alias("xmlTextReaderGetRemainder__internal_alias")));
-#else
-#ifndef xmlTextReaderGetRemainder
-extern __typeof (xmlTextReaderGetRemainder) xmlTextReaderGetRemainder__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderGetRemainder xmlTextReaderGetRemainder__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderHasAttributes
-extern __typeof (xmlTextReaderHasAttributes) xmlTextReaderHasAttributes __attribute((alias("xmlTextReaderHasAttributes__internal_alias")));
-#else
-#ifndef xmlTextReaderHasAttributes
-extern __typeof (xmlTextReaderHasAttributes) xmlTextReaderHasAttributes__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderHasAttributes xmlTextReaderHasAttributes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderHasValue
-extern __typeof (xmlTextReaderHasValue) xmlTextReaderHasValue __attribute((alias("xmlTextReaderHasValue__internal_alias")));
-#else
-#ifndef xmlTextReaderHasValue
-extern __typeof (xmlTextReaderHasValue) xmlTextReaderHasValue__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderHasValue xmlTextReaderHasValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderIsDefault
-extern __typeof (xmlTextReaderIsDefault) xmlTextReaderIsDefault __attribute((alias("xmlTextReaderIsDefault__internal_alias")));
-#else
-#ifndef xmlTextReaderIsDefault
-extern __typeof (xmlTextReaderIsDefault) xmlTextReaderIsDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderIsDefault xmlTextReaderIsDefault__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderIsEmptyElement
-extern __typeof (xmlTextReaderIsEmptyElement) xmlTextReaderIsEmptyElement __attribute((alias("xmlTextReaderIsEmptyElement__internal_alias")));
-#else
-#ifndef xmlTextReaderIsEmptyElement
-extern __typeof (xmlTextReaderIsEmptyElement) xmlTextReaderIsEmptyElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderIsEmptyElement xmlTextReaderIsEmptyElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderIsNamespaceDecl
-extern __typeof (xmlTextReaderIsNamespaceDecl) xmlTextReaderIsNamespaceDecl __attribute((alias("xmlTextReaderIsNamespaceDecl__internal_alias")));
-#else
-#ifndef xmlTextReaderIsNamespaceDecl
-extern __typeof (xmlTextReaderIsNamespaceDecl) xmlTextReaderIsNamespaceDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderIsNamespaceDecl xmlTextReaderIsNamespaceDecl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderIsValid
-extern __typeof (xmlTextReaderIsValid) xmlTextReaderIsValid __attribute((alias("xmlTextReaderIsValid__internal_alias")));
-#else
-#ifndef xmlTextReaderIsValid
-extern __typeof (xmlTextReaderIsValid) xmlTextReaderIsValid__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderIsValid xmlTextReaderIsValid__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderLocalName
-extern __typeof (xmlTextReaderLocalName) xmlTextReaderLocalName __attribute((alias("xmlTextReaderLocalName__internal_alias")));
-#else
-#ifndef xmlTextReaderLocalName
-extern __typeof (xmlTextReaderLocalName) xmlTextReaderLocalName__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderLocalName xmlTextReaderLocalName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderLocatorBaseURI
-extern __typeof (xmlTextReaderLocatorBaseURI) xmlTextReaderLocatorBaseURI __attribute((alias("xmlTextReaderLocatorBaseURI__internal_alias")));
-#else
-#ifndef xmlTextReaderLocatorBaseURI
-extern __typeof (xmlTextReaderLocatorBaseURI) xmlTextReaderLocatorBaseURI__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderLocatorBaseURI xmlTextReaderLocatorBaseURI__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderLocatorLineNumber
-extern __typeof (xmlTextReaderLocatorLineNumber) xmlTextReaderLocatorLineNumber __attribute((alias("xmlTextReaderLocatorLineNumber__internal_alias")));
-#else
-#ifndef xmlTextReaderLocatorLineNumber
-extern __typeof (xmlTextReaderLocatorLineNumber) xmlTextReaderLocatorLineNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderLocatorLineNumber xmlTextReaderLocatorLineNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderLookupNamespace
-extern __typeof (xmlTextReaderLookupNamespace) xmlTextReaderLookupNamespace __attribute((alias("xmlTextReaderLookupNamespace__internal_alias")));
-#else
-#ifndef xmlTextReaderLookupNamespace
-extern __typeof (xmlTextReaderLookupNamespace) xmlTextReaderLookupNamespace__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderLookupNamespace xmlTextReaderLookupNamespace__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderMoveToAttribute
-extern __typeof (xmlTextReaderMoveToAttribute) xmlTextReaderMoveToAttribute __attribute((alias("xmlTextReaderMoveToAttribute__internal_alias")));
-#else
-#ifndef xmlTextReaderMoveToAttribute
-extern __typeof (xmlTextReaderMoveToAttribute) xmlTextReaderMoveToAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderMoveToAttribute xmlTextReaderMoveToAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderMoveToAttributeNo
-extern __typeof (xmlTextReaderMoveToAttributeNo) xmlTextReaderMoveToAttributeNo __attribute((alias("xmlTextReaderMoveToAttributeNo__internal_alias")));
-#else
-#ifndef xmlTextReaderMoveToAttributeNo
-extern __typeof (xmlTextReaderMoveToAttributeNo) xmlTextReaderMoveToAttributeNo__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderMoveToAttributeNo xmlTextReaderMoveToAttributeNo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderMoveToAttributeNs
-extern __typeof (xmlTextReaderMoveToAttributeNs) xmlTextReaderMoveToAttributeNs __attribute((alias("xmlTextReaderMoveToAttributeNs__internal_alias")));
-#else
-#ifndef xmlTextReaderMoveToAttributeNs
-extern __typeof (xmlTextReaderMoveToAttributeNs) xmlTextReaderMoveToAttributeNs__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderMoveToAttributeNs xmlTextReaderMoveToAttributeNs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderMoveToElement
-extern __typeof (xmlTextReaderMoveToElement) xmlTextReaderMoveToElement __attribute((alias("xmlTextReaderMoveToElement__internal_alias")));
-#else
-#ifndef xmlTextReaderMoveToElement
-extern __typeof (xmlTextReaderMoveToElement) xmlTextReaderMoveToElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderMoveToElement xmlTextReaderMoveToElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderMoveToFirstAttribute
-extern __typeof (xmlTextReaderMoveToFirstAttribute) xmlTextReaderMoveToFirstAttribute __attribute((alias("xmlTextReaderMoveToFirstAttribute__internal_alias")));
-#else
-#ifndef xmlTextReaderMoveToFirstAttribute
-extern __typeof (xmlTextReaderMoveToFirstAttribute) xmlTextReaderMoveToFirstAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderMoveToFirstAttribute xmlTextReaderMoveToFirstAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderMoveToNextAttribute
-extern __typeof (xmlTextReaderMoveToNextAttribute) xmlTextReaderMoveToNextAttribute __attribute((alias("xmlTextReaderMoveToNextAttribute__internal_alias")));
-#else
-#ifndef xmlTextReaderMoveToNextAttribute
-extern __typeof (xmlTextReaderMoveToNextAttribute) xmlTextReaderMoveToNextAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderMoveToNextAttribute xmlTextReaderMoveToNextAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderName
-extern __typeof (xmlTextReaderName) xmlTextReaderName __attribute((alias("xmlTextReaderName__internal_alias")));
-#else
-#ifndef xmlTextReaderName
-extern __typeof (xmlTextReaderName) xmlTextReaderName__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderName xmlTextReaderName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderNamespaceUri
-extern __typeof (xmlTextReaderNamespaceUri) xmlTextReaderNamespaceUri __attribute((alias("xmlTextReaderNamespaceUri__internal_alias")));
-#else
-#ifndef xmlTextReaderNamespaceUri
-extern __typeof (xmlTextReaderNamespaceUri) xmlTextReaderNamespaceUri__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderNamespaceUri xmlTextReaderNamespaceUri__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderNext
-extern __typeof (xmlTextReaderNext) xmlTextReaderNext __attribute((alias("xmlTextReaderNext__internal_alias")));
-#else
-#ifndef xmlTextReaderNext
-extern __typeof (xmlTextReaderNext) xmlTextReaderNext__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderNext xmlTextReaderNext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderNextSibling
-extern __typeof (xmlTextReaderNextSibling) xmlTextReaderNextSibling __attribute((alias("xmlTextReaderNextSibling__internal_alias")));
-#else
-#ifndef xmlTextReaderNextSibling
-extern __typeof (xmlTextReaderNextSibling) xmlTextReaderNextSibling__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderNextSibling xmlTextReaderNextSibling__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderNodeType
-extern __typeof (xmlTextReaderNodeType) xmlTextReaderNodeType __attribute((alias("xmlTextReaderNodeType__internal_alias")));
-#else
-#ifndef xmlTextReaderNodeType
-extern __typeof (xmlTextReaderNodeType) xmlTextReaderNodeType__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderNodeType xmlTextReaderNodeType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderNormalization
-extern __typeof (xmlTextReaderNormalization) xmlTextReaderNormalization __attribute((alias("xmlTextReaderNormalization__internal_alias")));
-#else
-#ifndef xmlTextReaderNormalization
-extern __typeof (xmlTextReaderNormalization) xmlTextReaderNormalization__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderNormalization xmlTextReaderNormalization__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderPrefix
-extern __typeof (xmlTextReaderPrefix) xmlTextReaderPrefix __attribute((alias("xmlTextReaderPrefix__internal_alias")));
-#else
-#ifndef xmlTextReaderPrefix
-extern __typeof (xmlTextReaderPrefix) xmlTextReaderPrefix__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderPrefix xmlTextReaderPrefix__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderPreserve
-extern __typeof (xmlTextReaderPreserve) xmlTextReaderPreserve __attribute((alias("xmlTextReaderPreserve__internal_alias")));
-#else
-#ifndef xmlTextReaderPreserve
-extern __typeof (xmlTextReaderPreserve) xmlTextReaderPreserve__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderPreserve xmlTextReaderPreserve__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderPreservePattern
-extern __typeof (xmlTextReaderPreservePattern) xmlTextReaderPreservePattern __attribute((alias("xmlTextReaderPreservePattern__internal_alias")));
-#else
-#ifndef xmlTextReaderPreservePattern
-extern __typeof (xmlTextReaderPreservePattern) xmlTextReaderPreservePattern__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderPreservePattern xmlTextReaderPreservePattern__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderQuoteChar
-extern __typeof (xmlTextReaderQuoteChar) xmlTextReaderQuoteChar __attribute((alias("xmlTextReaderQuoteChar__internal_alias")));
-#else
-#ifndef xmlTextReaderQuoteChar
-extern __typeof (xmlTextReaderQuoteChar) xmlTextReaderQuoteChar__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderQuoteChar xmlTextReaderQuoteChar__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderRead
-extern __typeof (xmlTextReaderRead) xmlTextReaderRead __attribute((alias("xmlTextReaderRead__internal_alias")));
-#else
-#ifndef xmlTextReaderRead
-extern __typeof (xmlTextReaderRead) xmlTextReaderRead__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderRead xmlTextReaderRead__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderReadAttributeValue
-extern __typeof (xmlTextReaderReadAttributeValue) xmlTextReaderReadAttributeValue __attribute((alias("xmlTextReaderReadAttributeValue__internal_alias")));
-#else
-#ifndef xmlTextReaderReadAttributeValue
-extern __typeof (xmlTextReaderReadAttributeValue) xmlTextReaderReadAttributeValue__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderReadAttributeValue xmlTextReaderReadAttributeValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderReadInnerXml
-extern __typeof (xmlTextReaderReadInnerXml) xmlTextReaderReadInnerXml __attribute((alias("xmlTextReaderReadInnerXml__internal_alias")));
-#else
-#ifndef xmlTextReaderReadInnerXml
-extern __typeof (xmlTextReaderReadInnerXml) xmlTextReaderReadInnerXml__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderReadInnerXml xmlTextReaderReadInnerXml__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderReadOuterXml
-extern __typeof (xmlTextReaderReadOuterXml) xmlTextReaderReadOuterXml __attribute((alias("xmlTextReaderReadOuterXml__internal_alias")));
-#else
-#ifndef xmlTextReaderReadOuterXml
-extern __typeof (xmlTextReaderReadOuterXml) xmlTextReaderReadOuterXml__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderReadOuterXml xmlTextReaderReadOuterXml__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderReadState
-extern __typeof (xmlTextReaderReadState) xmlTextReaderReadState __attribute((alias("xmlTextReaderReadState__internal_alias")));
-#else
-#ifndef xmlTextReaderReadState
-extern __typeof (xmlTextReaderReadState) xmlTextReaderReadState__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderReadState xmlTextReaderReadState__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderReadString
-extern __typeof (xmlTextReaderReadString) xmlTextReaderReadString __attribute((alias("xmlTextReaderReadString__internal_alias")));
-#else
-#ifndef xmlTextReaderReadString
-extern __typeof (xmlTextReaderReadString) xmlTextReaderReadString__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderReadString xmlTextReaderReadString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderRelaxNGSetSchema
-extern __typeof (xmlTextReaderRelaxNGSetSchema) xmlTextReaderRelaxNGSetSchema __attribute((alias("xmlTextReaderRelaxNGSetSchema__internal_alias")));
-#else
-#ifndef xmlTextReaderRelaxNGSetSchema
-extern __typeof (xmlTextReaderRelaxNGSetSchema) xmlTextReaderRelaxNGSetSchema__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderRelaxNGSetSchema xmlTextReaderRelaxNGSetSchema__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderRelaxNGValidate
-extern __typeof (xmlTextReaderRelaxNGValidate) xmlTextReaderRelaxNGValidate __attribute((alias("xmlTextReaderRelaxNGValidate__internal_alias")));
-#else
-#ifndef xmlTextReaderRelaxNGValidate
-extern __typeof (xmlTextReaderRelaxNGValidate) xmlTextReaderRelaxNGValidate__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderRelaxNGValidate xmlTextReaderRelaxNGValidate__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderRelaxNGValidateCtxt
-extern __typeof (xmlTextReaderRelaxNGValidateCtxt) xmlTextReaderRelaxNGValidateCtxt __attribute((alias("xmlTextReaderRelaxNGValidateCtxt__internal_alias")));
-#else
-#ifndef xmlTextReaderRelaxNGValidateCtxt
-extern __typeof (xmlTextReaderRelaxNGValidateCtxt) xmlTextReaderRelaxNGValidateCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderRelaxNGValidateCtxt xmlTextReaderRelaxNGValidateCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderSchemaValidate
-extern __typeof (xmlTextReaderSchemaValidate) xmlTextReaderSchemaValidate __attribute((alias("xmlTextReaderSchemaValidate__internal_alias")));
-#else
-#ifndef xmlTextReaderSchemaValidate
-extern __typeof (xmlTextReaderSchemaValidate) xmlTextReaderSchemaValidate__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderSchemaValidate xmlTextReaderSchemaValidate__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderSchemaValidateCtxt
-extern __typeof (xmlTextReaderSchemaValidateCtxt) xmlTextReaderSchemaValidateCtxt __attribute((alias("xmlTextReaderSchemaValidateCtxt__internal_alias")));
-#else
-#ifndef xmlTextReaderSchemaValidateCtxt
-extern __typeof (xmlTextReaderSchemaValidateCtxt) xmlTextReaderSchemaValidateCtxt__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderSchemaValidateCtxt xmlTextReaderSchemaValidateCtxt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderSetErrorHandler
-extern __typeof (xmlTextReaderSetErrorHandler) xmlTextReaderSetErrorHandler __attribute((alias("xmlTextReaderSetErrorHandler__internal_alias")));
-#else
-#ifndef xmlTextReaderSetErrorHandler
-extern __typeof (xmlTextReaderSetErrorHandler) xmlTextReaderSetErrorHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderSetErrorHandler xmlTextReaderSetErrorHandler__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderSetParserProp
-extern __typeof (xmlTextReaderSetParserProp) xmlTextReaderSetParserProp __attribute((alias("xmlTextReaderSetParserProp__internal_alias")));
-#else
-#ifndef xmlTextReaderSetParserProp
-extern __typeof (xmlTextReaderSetParserProp) xmlTextReaderSetParserProp__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderSetParserProp xmlTextReaderSetParserProp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderSetSchema
-extern __typeof (xmlTextReaderSetSchema) xmlTextReaderSetSchema __attribute((alias("xmlTextReaderSetSchema__internal_alias")));
-#else
-#ifndef xmlTextReaderSetSchema
-extern __typeof (xmlTextReaderSetSchema) xmlTextReaderSetSchema__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderSetSchema xmlTextReaderSetSchema__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderSetStructuredErrorHandler
-extern __typeof (xmlTextReaderSetStructuredErrorHandler) xmlTextReaderSetStructuredErrorHandler __attribute((alias("xmlTextReaderSetStructuredErrorHandler__internal_alias")));
-#else
-#ifndef xmlTextReaderSetStructuredErrorHandler
-extern __typeof (xmlTextReaderSetStructuredErrorHandler) xmlTextReaderSetStructuredErrorHandler__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderSetStructuredErrorHandler xmlTextReaderSetStructuredErrorHandler__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderSetup
-extern __typeof (xmlTextReaderSetup) xmlTextReaderSetup __attribute((alias("xmlTextReaderSetup__internal_alias")));
-#else
-#ifndef xmlTextReaderSetup
-extern __typeof (xmlTextReaderSetup) xmlTextReaderSetup__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderSetup xmlTextReaderSetup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderStandalone
-extern __typeof (xmlTextReaderStandalone) xmlTextReaderStandalone __attribute((alias("xmlTextReaderStandalone__internal_alias")));
-#else
-#ifndef xmlTextReaderStandalone
-extern __typeof (xmlTextReaderStandalone) xmlTextReaderStandalone__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderStandalone xmlTextReaderStandalone__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderValue
-extern __typeof (xmlTextReaderValue) xmlTextReaderValue __attribute((alias("xmlTextReaderValue__internal_alias")));
-#else
-#ifndef xmlTextReaderValue
-extern __typeof (xmlTextReaderValue) xmlTextReaderValue__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderValue xmlTextReaderValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_READER_ENABLED)
-#ifdef bottom_xmlreader
-#undef xmlTextReaderXmlLang
-extern __typeof (xmlTextReaderXmlLang) xmlTextReaderXmlLang __attribute((alias("xmlTextReaderXmlLang__internal_alias")));
-#else
-#ifndef xmlTextReaderXmlLang
-extern __typeof (xmlTextReaderXmlLang) xmlTextReaderXmlLang__internal_alias __attribute((visibility("hidden")));
-#define xmlTextReaderXmlLang xmlTextReaderXmlLang__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndAttribute
-extern __typeof (xmlTextWriterEndAttribute) xmlTextWriterEndAttribute __attribute((alias("xmlTextWriterEndAttribute__internal_alias")));
-#else
-#ifndef xmlTextWriterEndAttribute
-extern __typeof (xmlTextWriterEndAttribute) xmlTextWriterEndAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndAttribute xmlTextWriterEndAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndCDATA
-extern __typeof (xmlTextWriterEndCDATA) xmlTextWriterEndCDATA __attribute((alias("xmlTextWriterEndCDATA__internal_alias")));
-#else
-#ifndef xmlTextWriterEndCDATA
-extern __typeof (xmlTextWriterEndCDATA) xmlTextWriterEndCDATA__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndCDATA xmlTextWriterEndCDATA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndComment
-extern __typeof (xmlTextWriterEndComment) xmlTextWriterEndComment __attribute((alias("xmlTextWriterEndComment__internal_alias")));
-#else
-#ifndef xmlTextWriterEndComment
-extern __typeof (xmlTextWriterEndComment) xmlTextWriterEndComment__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndComment xmlTextWriterEndComment__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndDTD
-extern __typeof (xmlTextWriterEndDTD) xmlTextWriterEndDTD __attribute((alias("xmlTextWriterEndDTD__internal_alias")));
-#else
-#ifndef xmlTextWriterEndDTD
-extern __typeof (xmlTextWriterEndDTD) xmlTextWriterEndDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndDTD xmlTextWriterEndDTD__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndDTDAttlist
-extern __typeof (xmlTextWriterEndDTDAttlist) xmlTextWriterEndDTDAttlist __attribute((alias("xmlTextWriterEndDTDAttlist__internal_alias")));
-#else
-#ifndef xmlTextWriterEndDTDAttlist
-extern __typeof (xmlTextWriterEndDTDAttlist) xmlTextWriterEndDTDAttlist__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndDTDAttlist xmlTextWriterEndDTDAttlist__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndDTDElement
-extern __typeof (xmlTextWriterEndDTDElement) xmlTextWriterEndDTDElement __attribute((alias("xmlTextWriterEndDTDElement__internal_alias")));
-#else
-#ifndef xmlTextWriterEndDTDElement
-extern __typeof (xmlTextWriterEndDTDElement) xmlTextWriterEndDTDElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndDTDElement xmlTextWriterEndDTDElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndDTDEntity
-extern __typeof (xmlTextWriterEndDTDEntity) xmlTextWriterEndDTDEntity __attribute((alias("xmlTextWriterEndDTDEntity__internal_alias")));
-#else
-#ifndef xmlTextWriterEndDTDEntity
-extern __typeof (xmlTextWriterEndDTDEntity) xmlTextWriterEndDTDEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndDTDEntity xmlTextWriterEndDTDEntity__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndDocument
-extern __typeof (xmlTextWriterEndDocument) xmlTextWriterEndDocument __attribute((alias("xmlTextWriterEndDocument__internal_alias")));
-#else
-#ifndef xmlTextWriterEndDocument
-extern __typeof (xmlTextWriterEndDocument) xmlTextWriterEndDocument__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndDocument xmlTextWriterEndDocument__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndElement
-extern __typeof (xmlTextWriterEndElement) xmlTextWriterEndElement __attribute((alias("xmlTextWriterEndElement__internal_alias")));
-#else
-#ifndef xmlTextWriterEndElement
-extern __typeof (xmlTextWriterEndElement) xmlTextWriterEndElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndElement xmlTextWriterEndElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterEndPI
-extern __typeof (xmlTextWriterEndPI) xmlTextWriterEndPI __attribute((alias("xmlTextWriterEndPI__internal_alias")));
-#else
-#ifndef xmlTextWriterEndPI
-extern __typeof (xmlTextWriterEndPI) xmlTextWriterEndPI__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterEndPI xmlTextWriterEndPI__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterFlush
-extern __typeof (xmlTextWriterFlush) xmlTextWriterFlush __attribute((alias("xmlTextWriterFlush__internal_alias")));
-#else
-#ifndef xmlTextWriterFlush
-extern __typeof (xmlTextWriterFlush) xmlTextWriterFlush__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterFlush xmlTextWriterFlush__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterFullEndElement
-extern __typeof (xmlTextWriterFullEndElement) xmlTextWriterFullEndElement __attribute((alias("xmlTextWriterFullEndElement__internal_alias")));
-#else
-#ifndef xmlTextWriterFullEndElement
-extern __typeof (xmlTextWriterFullEndElement) xmlTextWriterFullEndElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterFullEndElement xmlTextWriterFullEndElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterSetIndent
-extern __typeof (xmlTextWriterSetIndent) xmlTextWriterSetIndent __attribute((alias("xmlTextWriterSetIndent__internal_alias")));
-#else
-#ifndef xmlTextWriterSetIndent
-extern __typeof (xmlTextWriterSetIndent) xmlTextWriterSetIndent__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterSetIndent xmlTextWriterSetIndent__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterSetIndentString
-extern __typeof (xmlTextWriterSetIndentString) xmlTextWriterSetIndentString __attribute((alias("xmlTextWriterSetIndentString__internal_alias")));
-#else
-#ifndef xmlTextWriterSetIndentString
-extern __typeof (xmlTextWriterSetIndentString) xmlTextWriterSetIndentString__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterSetIndentString xmlTextWriterSetIndentString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterSetQuoteChar
-extern __typeof (xmlTextWriterSetQuoteChar) xmlTextWriterSetQuoteChar __attribute((alias("xmlTextWriterSetQuoteChar__internal_alias")));
-#else
-#ifndef xmlTextWriterSetQuoteChar
-extern __typeof (xmlTextWriterSetQuoteChar) xmlTextWriterSetQuoteChar__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterSetQuoteChar xmlTextWriterSetQuoteChar__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartAttribute
-extern __typeof (xmlTextWriterStartAttribute) xmlTextWriterStartAttribute __attribute((alias("xmlTextWriterStartAttribute__internal_alias")));
-#else
-#ifndef xmlTextWriterStartAttribute
-extern __typeof (xmlTextWriterStartAttribute) xmlTextWriterStartAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartAttribute xmlTextWriterStartAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartAttributeNS
-extern __typeof (xmlTextWriterStartAttributeNS) xmlTextWriterStartAttributeNS __attribute((alias("xmlTextWriterStartAttributeNS__internal_alias")));
-#else
-#ifndef xmlTextWriterStartAttributeNS
-extern __typeof (xmlTextWriterStartAttributeNS) xmlTextWriterStartAttributeNS__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartAttributeNS xmlTextWriterStartAttributeNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartCDATA
-extern __typeof (xmlTextWriterStartCDATA) xmlTextWriterStartCDATA __attribute((alias("xmlTextWriterStartCDATA__internal_alias")));
-#else
-#ifndef xmlTextWriterStartCDATA
-extern __typeof (xmlTextWriterStartCDATA) xmlTextWriterStartCDATA__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartCDATA xmlTextWriterStartCDATA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartComment
-extern __typeof (xmlTextWriterStartComment) xmlTextWriterStartComment __attribute((alias("xmlTextWriterStartComment__internal_alias")));
-#else
-#ifndef xmlTextWriterStartComment
-extern __typeof (xmlTextWriterStartComment) xmlTextWriterStartComment__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartComment xmlTextWriterStartComment__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartDTD
-extern __typeof (xmlTextWriterStartDTD) xmlTextWriterStartDTD __attribute((alias("xmlTextWriterStartDTD__internal_alias")));
-#else
-#ifndef xmlTextWriterStartDTD
-extern __typeof (xmlTextWriterStartDTD) xmlTextWriterStartDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartDTD xmlTextWriterStartDTD__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartDTDAttlist
-extern __typeof (xmlTextWriterStartDTDAttlist) xmlTextWriterStartDTDAttlist __attribute((alias("xmlTextWriterStartDTDAttlist__internal_alias")));
-#else
-#ifndef xmlTextWriterStartDTDAttlist
-extern __typeof (xmlTextWriterStartDTDAttlist) xmlTextWriterStartDTDAttlist__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartDTDAttlist xmlTextWriterStartDTDAttlist__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartDTDElement
-extern __typeof (xmlTextWriterStartDTDElement) xmlTextWriterStartDTDElement __attribute((alias("xmlTextWriterStartDTDElement__internal_alias")));
-#else
-#ifndef xmlTextWriterStartDTDElement
-extern __typeof (xmlTextWriterStartDTDElement) xmlTextWriterStartDTDElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartDTDElement xmlTextWriterStartDTDElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartDTDEntity
-extern __typeof (xmlTextWriterStartDTDEntity) xmlTextWriterStartDTDEntity __attribute((alias("xmlTextWriterStartDTDEntity__internal_alias")));
-#else
-#ifndef xmlTextWriterStartDTDEntity
-extern __typeof (xmlTextWriterStartDTDEntity) xmlTextWriterStartDTDEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartDTDEntity xmlTextWriterStartDTDEntity__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartDocument
-extern __typeof (xmlTextWriterStartDocument) xmlTextWriterStartDocument __attribute((alias("xmlTextWriterStartDocument__internal_alias")));
-#else
-#ifndef xmlTextWriterStartDocument
-extern __typeof (xmlTextWriterStartDocument) xmlTextWriterStartDocument__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartDocument xmlTextWriterStartDocument__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartElement
-extern __typeof (xmlTextWriterStartElement) xmlTextWriterStartElement __attribute((alias("xmlTextWriterStartElement__internal_alias")));
-#else
-#ifndef xmlTextWriterStartElement
-extern __typeof (xmlTextWriterStartElement) xmlTextWriterStartElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartElement xmlTextWriterStartElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartElementNS
-extern __typeof (xmlTextWriterStartElementNS) xmlTextWriterStartElementNS __attribute((alias("xmlTextWriterStartElementNS__internal_alias")));
-#else
-#ifndef xmlTextWriterStartElementNS
-extern __typeof (xmlTextWriterStartElementNS) xmlTextWriterStartElementNS__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartElementNS xmlTextWriterStartElementNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterStartPI
-extern __typeof (xmlTextWriterStartPI) xmlTextWriterStartPI __attribute((alias("xmlTextWriterStartPI__internal_alias")));
-#else
-#ifndef xmlTextWriterStartPI
-extern __typeof (xmlTextWriterStartPI) xmlTextWriterStartPI__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterStartPI xmlTextWriterStartPI__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteAttribute
-extern __typeof (xmlTextWriterWriteAttribute) xmlTextWriterWriteAttribute __attribute((alias("xmlTextWriterWriteAttribute__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteAttribute
-extern __typeof (xmlTextWriterWriteAttribute) xmlTextWriterWriteAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteAttribute xmlTextWriterWriteAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteAttributeNS
-extern __typeof (xmlTextWriterWriteAttributeNS) xmlTextWriterWriteAttributeNS __attribute((alias("xmlTextWriterWriteAttributeNS__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteAttributeNS
-extern __typeof (xmlTextWriterWriteAttributeNS) xmlTextWriterWriteAttributeNS__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteAttributeNS xmlTextWriterWriteAttributeNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteBase64
-extern __typeof (xmlTextWriterWriteBase64) xmlTextWriterWriteBase64 __attribute((alias("xmlTextWriterWriteBase64__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteBase64
-extern __typeof (xmlTextWriterWriteBase64) xmlTextWriterWriteBase64__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteBase64 xmlTextWriterWriteBase64__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteBinHex
-extern __typeof (xmlTextWriterWriteBinHex) xmlTextWriterWriteBinHex __attribute((alias("xmlTextWriterWriteBinHex__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteBinHex
-extern __typeof (xmlTextWriterWriteBinHex) xmlTextWriterWriteBinHex__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteBinHex xmlTextWriterWriteBinHex__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteCDATA
-extern __typeof (xmlTextWriterWriteCDATA) xmlTextWriterWriteCDATA __attribute((alias("xmlTextWriterWriteCDATA__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteCDATA
-extern __typeof (xmlTextWriterWriteCDATA) xmlTextWriterWriteCDATA__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteCDATA xmlTextWriterWriteCDATA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteComment
-extern __typeof (xmlTextWriterWriteComment) xmlTextWriterWriteComment __attribute((alias("xmlTextWriterWriteComment__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteComment
-extern __typeof (xmlTextWriterWriteComment) xmlTextWriterWriteComment__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteComment xmlTextWriterWriteComment__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteDTD
-extern __typeof (xmlTextWriterWriteDTD) xmlTextWriterWriteDTD __attribute((alias("xmlTextWriterWriteDTD__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteDTD
-extern __typeof (xmlTextWriterWriteDTD) xmlTextWriterWriteDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteDTD xmlTextWriterWriteDTD__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteDTDAttlist
-extern __typeof (xmlTextWriterWriteDTDAttlist) xmlTextWriterWriteDTDAttlist __attribute((alias("xmlTextWriterWriteDTDAttlist__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteDTDAttlist
-extern __typeof (xmlTextWriterWriteDTDAttlist) xmlTextWriterWriteDTDAttlist__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteDTDAttlist xmlTextWriterWriteDTDAttlist__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteDTDElement
-extern __typeof (xmlTextWriterWriteDTDElement) xmlTextWriterWriteDTDElement __attribute((alias("xmlTextWriterWriteDTDElement__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteDTDElement
-extern __typeof (xmlTextWriterWriteDTDElement) xmlTextWriterWriteDTDElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteDTDElement xmlTextWriterWriteDTDElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteDTDEntity
-extern __typeof (xmlTextWriterWriteDTDEntity) xmlTextWriterWriteDTDEntity __attribute((alias("xmlTextWriterWriteDTDEntity__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteDTDEntity
-extern __typeof (xmlTextWriterWriteDTDEntity) xmlTextWriterWriteDTDEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteDTDEntity xmlTextWriterWriteDTDEntity__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteDTDExternalEntity
-extern __typeof (xmlTextWriterWriteDTDExternalEntity) xmlTextWriterWriteDTDExternalEntity __attribute((alias("xmlTextWriterWriteDTDExternalEntity__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteDTDExternalEntity
-extern __typeof (xmlTextWriterWriteDTDExternalEntity) xmlTextWriterWriteDTDExternalEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteDTDExternalEntity xmlTextWriterWriteDTDExternalEntity__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteDTDExternalEntityContents
-extern __typeof (xmlTextWriterWriteDTDExternalEntityContents) xmlTextWriterWriteDTDExternalEntityContents __attribute((alias("xmlTextWriterWriteDTDExternalEntityContents__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteDTDExternalEntityContents
-extern __typeof (xmlTextWriterWriteDTDExternalEntityContents) xmlTextWriterWriteDTDExternalEntityContents__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteDTDExternalEntityContents xmlTextWriterWriteDTDExternalEntityContents__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteDTDInternalEntity
-extern __typeof (xmlTextWriterWriteDTDInternalEntity) xmlTextWriterWriteDTDInternalEntity __attribute((alias("xmlTextWriterWriteDTDInternalEntity__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteDTDInternalEntity
-extern __typeof (xmlTextWriterWriteDTDInternalEntity) xmlTextWriterWriteDTDInternalEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteDTDInternalEntity xmlTextWriterWriteDTDInternalEntity__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteDTDNotation
-extern __typeof (xmlTextWriterWriteDTDNotation) xmlTextWriterWriteDTDNotation __attribute((alias("xmlTextWriterWriteDTDNotation__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteDTDNotation
-extern __typeof (xmlTextWriterWriteDTDNotation) xmlTextWriterWriteDTDNotation__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteDTDNotation xmlTextWriterWriteDTDNotation__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteElement
-extern __typeof (xmlTextWriterWriteElement) xmlTextWriterWriteElement __attribute((alias("xmlTextWriterWriteElement__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteElement
-extern __typeof (xmlTextWriterWriteElement) xmlTextWriterWriteElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteElement xmlTextWriterWriteElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteElementNS
-extern __typeof (xmlTextWriterWriteElementNS) xmlTextWriterWriteElementNS __attribute((alias("xmlTextWriterWriteElementNS__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteElementNS
-extern __typeof (xmlTextWriterWriteElementNS) xmlTextWriterWriteElementNS__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteElementNS xmlTextWriterWriteElementNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatAttribute
-extern __typeof (xmlTextWriterWriteFormatAttribute) xmlTextWriterWriteFormatAttribute __attribute((alias("xmlTextWriterWriteFormatAttribute__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatAttribute
-extern __typeof (xmlTextWriterWriteFormatAttribute) xmlTextWriterWriteFormatAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatAttribute xmlTextWriterWriteFormatAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatAttributeNS
-extern __typeof (xmlTextWriterWriteFormatAttributeNS) xmlTextWriterWriteFormatAttributeNS __attribute((alias("xmlTextWriterWriteFormatAttributeNS__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatAttributeNS
-extern __typeof (xmlTextWriterWriteFormatAttributeNS) xmlTextWriterWriteFormatAttributeNS__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatAttributeNS xmlTextWriterWriteFormatAttributeNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatCDATA
-extern __typeof (xmlTextWriterWriteFormatCDATA) xmlTextWriterWriteFormatCDATA __attribute((alias("xmlTextWriterWriteFormatCDATA__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatCDATA
-extern __typeof (xmlTextWriterWriteFormatCDATA) xmlTextWriterWriteFormatCDATA__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatCDATA xmlTextWriterWriteFormatCDATA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatComment
-extern __typeof (xmlTextWriterWriteFormatComment) xmlTextWriterWriteFormatComment __attribute((alias("xmlTextWriterWriteFormatComment__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatComment
-extern __typeof (xmlTextWriterWriteFormatComment) xmlTextWriterWriteFormatComment__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatComment xmlTextWriterWriteFormatComment__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatDTD
-extern __typeof (xmlTextWriterWriteFormatDTD) xmlTextWriterWriteFormatDTD __attribute((alias("xmlTextWriterWriteFormatDTD__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatDTD
-extern __typeof (xmlTextWriterWriteFormatDTD) xmlTextWriterWriteFormatDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatDTD xmlTextWriterWriteFormatDTD__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatDTDAttlist
-extern __typeof (xmlTextWriterWriteFormatDTDAttlist) xmlTextWriterWriteFormatDTDAttlist __attribute((alias("xmlTextWriterWriteFormatDTDAttlist__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatDTDAttlist
-extern __typeof (xmlTextWriterWriteFormatDTDAttlist) xmlTextWriterWriteFormatDTDAttlist__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatDTDAttlist xmlTextWriterWriteFormatDTDAttlist__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatDTDElement
-extern __typeof (xmlTextWriterWriteFormatDTDElement) xmlTextWriterWriteFormatDTDElement __attribute((alias("xmlTextWriterWriteFormatDTDElement__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatDTDElement
-extern __typeof (xmlTextWriterWriteFormatDTDElement) xmlTextWriterWriteFormatDTDElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatDTDElement xmlTextWriterWriteFormatDTDElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatDTDInternalEntity
-extern __typeof (xmlTextWriterWriteFormatDTDInternalEntity) xmlTextWriterWriteFormatDTDInternalEntity __attribute((alias("xmlTextWriterWriteFormatDTDInternalEntity__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatDTDInternalEntity
-extern __typeof (xmlTextWriterWriteFormatDTDInternalEntity) xmlTextWriterWriteFormatDTDInternalEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatDTDInternalEntity xmlTextWriterWriteFormatDTDInternalEntity__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatElement
-extern __typeof (xmlTextWriterWriteFormatElement) xmlTextWriterWriteFormatElement __attribute((alias("xmlTextWriterWriteFormatElement__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatElement
-extern __typeof (xmlTextWriterWriteFormatElement) xmlTextWriterWriteFormatElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatElement xmlTextWriterWriteFormatElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatElementNS
-extern __typeof (xmlTextWriterWriteFormatElementNS) xmlTextWriterWriteFormatElementNS __attribute((alias("xmlTextWriterWriteFormatElementNS__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatElementNS
-extern __typeof (xmlTextWriterWriteFormatElementNS) xmlTextWriterWriteFormatElementNS__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatElementNS xmlTextWriterWriteFormatElementNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatPI
-extern __typeof (xmlTextWriterWriteFormatPI) xmlTextWriterWriteFormatPI __attribute((alias("xmlTextWriterWriteFormatPI__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatPI
-extern __typeof (xmlTextWriterWriteFormatPI) xmlTextWriterWriteFormatPI__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatPI xmlTextWriterWriteFormatPI__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatRaw
-extern __typeof (xmlTextWriterWriteFormatRaw) xmlTextWriterWriteFormatRaw __attribute((alias("xmlTextWriterWriteFormatRaw__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatRaw
-extern __typeof (xmlTextWriterWriteFormatRaw) xmlTextWriterWriteFormatRaw__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatRaw xmlTextWriterWriteFormatRaw__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteFormatString
-extern __typeof (xmlTextWriterWriteFormatString) xmlTextWriterWriteFormatString __attribute((alias("xmlTextWriterWriteFormatString__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteFormatString
-extern __typeof (xmlTextWriterWriteFormatString) xmlTextWriterWriteFormatString__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteFormatString xmlTextWriterWriteFormatString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWritePI
-extern __typeof (xmlTextWriterWritePI) xmlTextWriterWritePI __attribute((alias("xmlTextWriterWritePI__internal_alias")));
-#else
-#ifndef xmlTextWriterWritePI
-extern __typeof (xmlTextWriterWritePI) xmlTextWriterWritePI__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWritePI xmlTextWriterWritePI__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteRaw
-extern __typeof (xmlTextWriterWriteRaw) xmlTextWriterWriteRaw __attribute((alias("xmlTextWriterWriteRaw__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteRaw
-extern __typeof (xmlTextWriterWriteRaw) xmlTextWriterWriteRaw__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteRaw xmlTextWriterWriteRaw__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteRawLen
-extern __typeof (xmlTextWriterWriteRawLen) xmlTextWriterWriteRawLen __attribute((alias("xmlTextWriterWriteRawLen__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteRawLen
-extern __typeof (xmlTextWriterWriteRawLen) xmlTextWriterWriteRawLen__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteRawLen xmlTextWriterWriteRawLen__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteString
-extern __typeof (xmlTextWriterWriteString) xmlTextWriterWriteString __attribute((alias("xmlTextWriterWriteString__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteString
-extern __typeof (xmlTextWriterWriteString) xmlTextWriterWriteString__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteString xmlTextWriterWriteString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatAttribute
-extern __typeof (xmlTextWriterWriteVFormatAttribute) xmlTextWriterWriteVFormatAttribute __attribute((alias("xmlTextWriterWriteVFormatAttribute__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatAttribute
-extern __typeof (xmlTextWriterWriteVFormatAttribute) xmlTextWriterWriteVFormatAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatAttribute xmlTextWriterWriteVFormatAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatAttributeNS
-extern __typeof (xmlTextWriterWriteVFormatAttributeNS) xmlTextWriterWriteVFormatAttributeNS __attribute((alias("xmlTextWriterWriteVFormatAttributeNS__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatAttributeNS
-extern __typeof (xmlTextWriterWriteVFormatAttributeNS) xmlTextWriterWriteVFormatAttributeNS__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatAttributeNS xmlTextWriterWriteVFormatAttributeNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatCDATA
-extern __typeof (xmlTextWriterWriteVFormatCDATA) xmlTextWriterWriteVFormatCDATA __attribute((alias("xmlTextWriterWriteVFormatCDATA__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatCDATA
-extern __typeof (xmlTextWriterWriteVFormatCDATA) xmlTextWriterWriteVFormatCDATA__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatCDATA xmlTextWriterWriteVFormatCDATA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatComment
-extern __typeof (xmlTextWriterWriteVFormatComment) xmlTextWriterWriteVFormatComment __attribute((alias("xmlTextWriterWriteVFormatComment__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatComment
-extern __typeof (xmlTextWriterWriteVFormatComment) xmlTextWriterWriteVFormatComment__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatComment xmlTextWriterWriteVFormatComment__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatDTD
-extern __typeof (xmlTextWriterWriteVFormatDTD) xmlTextWriterWriteVFormatDTD __attribute((alias("xmlTextWriterWriteVFormatDTD__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatDTD
-extern __typeof (xmlTextWriterWriteVFormatDTD) xmlTextWriterWriteVFormatDTD__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatDTD xmlTextWriterWriteVFormatDTD__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatDTDAttlist
-extern __typeof (xmlTextWriterWriteVFormatDTDAttlist) xmlTextWriterWriteVFormatDTDAttlist __attribute((alias("xmlTextWriterWriteVFormatDTDAttlist__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatDTDAttlist
-extern __typeof (xmlTextWriterWriteVFormatDTDAttlist) xmlTextWriterWriteVFormatDTDAttlist__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatDTDAttlist xmlTextWriterWriteVFormatDTDAttlist__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatDTDElement
-extern __typeof (xmlTextWriterWriteVFormatDTDElement) xmlTextWriterWriteVFormatDTDElement __attribute((alias("xmlTextWriterWriteVFormatDTDElement__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatDTDElement
-extern __typeof (xmlTextWriterWriteVFormatDTDElement) xmlTextWriterWriteVFormatDTDElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatDTDElement xmlTextWriterWriteVFormatDTDElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatDTDInternalEntity
-extern __typeof (xmlTextWriterWriteVFormatDTDInternalEntity) xmlTextWriterWriteVFormatDTDInternalEntity __attribute((alias("xmlTextWriterWriteVFormatDTDInternalEntity__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatDTDInternalEntity
-extern __typeof (xmlTextWriterWriteVFormatDTDInternalEntity) xmlTextWriterWriteVFormatDTDInternalEntity__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatDTDInternalEntity xmlTextWriterWriteVFormatDTDInternalEntity__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatElement
-extern __typeof (xmlTextWriterWriteVFormatElement) xmlTextWriterWriteVFormatElement __attribute((alias("xmlTextWriterWriteVFormatElement__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatElement
-extern __typeof (xmlTextWriterWriteVFormatElement) xmlTextWriterWriteVFormatElement__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatElement xmlTextWriterWriteVFormatElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatElementNS
-extern __typeof (xmlTextWriterWriteVFormatElementNS) xmlTextWriterWriteVFormatElementNS __attribute((alias("xmlTextWriterWriteVFormatElementNS__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatElementNS
-extern __typeof (xmlTextWriterWriteVFormatElementNS) xmlTextWriterWriteVFormatElementNS__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatElementNS xmlTextWriterWriteVFormatElementNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatPI
-extern __typeof (xmlTextWriterWriteVFormatPI) xmlTextWriterWriteVFormatPI __attribute((alias("xmlTextWriterWriteVFormatPI__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatPI
-extern __typeof (xmlTextWriterWriteVFormatPI) xmlTextWriterWriteVFormatPI__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatPI xmlTextWriterWriteVFormatPI__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatRaw
-extern __typeof (xmlTextWriterWriteVFormatRaw) xmlTextWriterWriteVFormatRaw __attribute((alias("xmlTextWriterWriteVFormatRaw__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatRaw
-extern __typeof (xmlTextWriterWriteVFormatRaw) xmlTextWriterWriteVFormatRaw__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatRaw xmlTextWriterWriteVFormatRaw__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_WRITER_ENABLED)
-#ifdef bottom_xmlwriter
-#undef xmlTextWriterWriteVFormatString
-extern __typeof (xmlTextWriterWriteVFormatString) xmlTextWriterWriteVFormatString __attribute((alias("xmlTextWriterWriteVFormatString__internal_alias")));
-#else
-#ifndef xmlTextWriterWriteVFormatString
-extern __typeof (xmlTextWriterWriteVFormatString) xmlTextWriterWriteVFormatString__internal_alias __attribute((visibility("hidden")));
-#define xmlTextWriterWriteVFormatString xmlTextWriterWriteVFormatString__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefBufferAllocScheme
-extern __typeof (xmlThrDefBufferAllocScheme) xmlThrDefBufferAllocScheme __attribute((alias("xmlThrDefBufferAllocScheme__internal_alias")));
-#else
-#ifndef xmlThrDefBufferAllocScheme
-extern __typeof (xmlThrDefBufferAllocScheme) xmlThrDefBufferAllocScheme__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefBufferAllocScheme xmlThrDefBufferAllocScheme__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefDefaultBufferSize
-extern __typeof (xmlThrDefDefaultBufferSize) xmlThrDefDefaultBufferSize __attribute((alias("xmlThrDefDefaultBufferSize__internal_alias")));
-#else
-#ifndef xmlThrDefDefaultBufferSize
-extern __typeof (xmlThrDefDefaultBufferSize) xmlThrDefDefaultBufferSize__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefDefaultBufferSize xmlThrDefDefaultBufferSize__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefDeregisterNodeDefault
-extern __typeof (xmlThrDefDeregisterNodeDefault) xmlThrDefDeregisterNodeDefault __attribute((alias("xmlThrDefDeregisterNodeDefault__internal_alias")));
-#else
-#ifndef xmlThrDefDeregisterNodeDefault
-extern __typeof (xmlThrDefDeregisterNodeDefault) xmlThrDefDeregisterNodeDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefDeregisterNodeDefault xmlThrDefDeregisterNodeDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefDoValidityCheckingDefaultValue
-extern __typeof (xmlThrDefDoValidityCheckingDefaultValue) xmlThrDefDoValidityCheckingDefaultValue __attribute((alias("xmlThrDefDoValidityCheckingDefaultValue__internal_alias")));
-#else
-#ifndef xmlThrDefDoValidityCheckingDefaultValue
-extern __typeof (xmlThrDefDoValidityCheckingDefaultValue) xmlThrDefDoValidityCheckingDefaultValue__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefDoValidityCheckingDefaultValue xmlThrDefDoValidityCheckingDefaultValue__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefGetWarningsDefaultValue
-extern __typeof (xmlThrDefGetWarningsDefaultValue) xmlThrDefGetWarningsDefaultValue __attribute((alias("xmlThrDefGetWarningsDefaultValue__internal_alias")));
-#else
-#ifndef xmlThrDefGetWarningsDefaultValue
-extern __typeof (xmlThrDefGetWarningsDefaultValue) xmlThrDefGetWarningsDefaultValue__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefGetWarningsDefaultValue xmlThrDefGetWarningsDefaultValue__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefIndentTreeOutput
-extern __typeof (xmlThrDefIndentTreeOutput) xmlThrDefIndentTreeOutput __attribute((alias("xmlThrDefIndentTreeOutput__internal_alias")));
-#else
-#ifndef xmlThrDefIndentTreeOutput
-extern __typeof (xmlThrDefIndentTreeOutput) xmlThrDefIndentTreeOutput__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefIndentTreeOutput xmlThrDefIndentTreeOutput__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefKeepBlanksDefaultValue
-extern __typeof (xmlThrDefKeepBlanksDefaultValue) xmlThrDefKeepBlanksDefaultValue __attribute((alias("xmlThrDefKeepBlanksDefaultValue__internal_alias")));
-#else
-#ifndef xmlThrDefKeepBlanksDefaultValue
-extern __typeof (xmlThrDefKeepBlanksDefaultValue) xmlThrDefKeepBlanksDefaultValue__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefKeepBlanksDefaultValue xmlThrDefKeepBlanksDefaultValue__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefLineNumbersDefaultValue
-extern __typeof (xmlThrDefLineNumbersDefaultValue) xmlThrDefLineNumbersDefaultValue __attribute((alias("xmlThrDefLineNumbersDefaultValue__internal_alias")));
-#else
-#ifndef xmlThrDefLineNumbersDefaultValue
-extern __typeof (xmlThrDefLineNumbersDefaultValue) xmlThrDefLineNumbersDefaultValue__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefLineNumbersDefaultValue xmlThrDefLineNumbersDefaultValue__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefLoadExtDtdDefaultValue
-extern __typeof (xmlThrDefLoadExtDtdDefaultValue) xmlThrDefLoadExtDtdDefaultValue __attribute((alias("xmlThrDefLoadExtDtdDefaultValue__internal_alias")));
-#else
-#ifndef xmlThrDefLoadExtDtdDefaultValue
-extern __typeof (xmlThrDefLoadExtDtdDefaultValue) xmlThrDefLoadExtDtdDefaultValue__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefLoadExtDtdDefaultValue xmlThrDefLoadExtDtdDefaultValue__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefOutputBufferCreateFilenameDefault
-extern __typeof (xmlThrDefOutputBufferCreateFilenameDefault) xmlThrDefOutputBufferCreateFilenameDefault __attribute((alias("xmlThrDefOutputBufferCreateFilenameDefault__internal_alias")));
-#else
-#ifndef xmlThrDefOutputBufferCreateFilenameDefault
-extern __typeof (xmlThrDefOutputBufferCreateFilenameDefault) xmlThrDefOutputBufferCreateFilenameDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefOutputBufferCreateFilenameDefault xmlThrDefOutputBufferCreateFilenameDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefParserDebugEntities
-extern __typeof (xmlThrDefParserDebugEntities) xmlThrDefParserDebugEntities __attribute((alias("xmlThrDefParserDebugEntities__internal_alias")));
-#else
-#ifndef xmlThrDefParserDebugEntities
-extern __typeof (xmlThrDefParserDebugEntities) xmlThrDefParserDebugEntities__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefParserDebugEntities xmlThrDefParserDebugEntities__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefParserInputBufferCreateFilenameDefault
-extern __typeof (xmlThrDefParserInputBufferCreateFilenameDefault) xmlThrDefParserInputBufferCreateFilenameDefault __attribute((alias("xmlThrDefParserInputBufferCreateFilenameDefault__internal_alias")));
-#else
-#ifndef xmlThrDefParserInputBufferCreateFilenameDefault
-extern __typeof (xmlThrDefParserInputBufferCreateFilenameDefault) xmlThrDefParserInputBufferCreateFilenameDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefParserInputBufferCreateFilenameDefault xmlThrDefParserInputBufferCreateFilenameDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefPedanticParserDefaultValue
-extern __typeof (xmlThrDefPedanticParserDefaultValue) xmlThrDefPedanticParserDefaultValue __attribute((alias("xmlThrDefPedanticParserDefaultValue__internal_alias")));
-#else
-#ifndef xmlThrDefPedanticParserDefaultValue
-extern __typeof (xmlThrDefPedanticParserDefaultValue) xmlThrDefPedanticParserDefaultValue__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefPedanticParserDefaultValue xmlThrDefPedanticParserDefaultValue__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefRegisterNodeDefault
-extern __typeof (xmlThrDefRegisterNodeDefault) xmlThrDefRegisterNodeDefault __attribute((alias("xmlThrDefRegisterNodeDefault__internal_alias")));
-#else
-#ifndef xmlThrDefRegisterNodeDefault
-extern __typeof (xmlThrDefRegisterNodeDefault) xmlThrDefRegisterNodeDefault__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefRegisterNodeDefault xmlThrDefRegisterNodeDefault__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefSaveNoEmptyTags
-extern __typeof (xmlThrDefSaveNoEmptyTags) xmlThrDefSaveNoEmptyTags __attribute((alias("xmlThrDefSaveNoEmptyTags__internal_alias")));
-#else
-#ifndef xmlThrDefSaveNoEmptyTags
-extern __typeof (xmlThrDefSaveNoEmptyTags) xmlThrDefSaveNoEmptyTags__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefSaveNoEmptyTags xmlThrDefSaveNoEmptyTags__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefSetGenericErrorFunc
-extern __typeof (xmlThrDefSetGenericErrorFunc) xmlThrDefSetGenericErrorFunc __attribute((alias("xmlThrDefSetGenericErrorFunc__internal_alias")));
-#else
-#ifndef xmlThrDefSetGenericErrorFunc
-extern __typeof (xmlThrDefSetGenericErrorFunc) xmlThrDefSetGenericErrorFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefSetGenericErrorFunc xmlThrDefSetGenericErrorFunc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefSetStructuredErrorFunc
-extern __typeof (xmlThrDefSetStructuredErrorFunc) xmlThrDefSetStructuredErrorFunc __attribute((alias("xmlThrDefSetStructuredErrorFunc__internal_alias")));
-#else
-#ifndef xmlThrDefSetStructuredErrorFunc
-extern __typeof (xmlThrDefSetStructuredErrorFunc) xmlThrDefSetStructuredErrorFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefSetStructuredErrorFunc xmlThrDefSetStructuredErrorFunc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefSubstituteEntitiesDefaultValue
-extern __typeof (xmlThrDefSubstituteEntitiesDefaultValue) xmlThrDefSubstituteEntitiesDefaultValue __attribute((alias("xmlThrDefSubstituteEntitiesDefaultValue__internal_alias")));
-#else
-#ifndef xmlThrDefSubstituteEntitiesDefaultValue
-extern __typeof (xmlThrDefSubstituteEntitiesDefaultValue) xmlThrDefSubstituteEntitiesDefaultValue__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefSubstituteEntitiesDefaultValue xmlThrDefSubstituteEntitiesDefaultValue__internal_alias
-#endif
-#endif
-
-#ifdef bottom_globals
-#undef xmlThrDefTreeIndentString
-extern __typeof (xmlThrDefTreeIndentString) xmlThrDefTreeIndentString __attribute((alias("xmlThrDefTreeIndentString__internal_alias")));
-#else
-#ifndef xmlThrDefTreeIndentString
-extern __typeof (xmlThrDefTreeIndentString) xmlThrDefTreeIndentString__internal_alias __attribute((visibility("hidden")));
-#define xmlThrDefTreeIndentString xmlThrDefTreeIndentString__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsAegeanNumbers
-extern __typeof (xmlUCSIsAegeanNumbers) xmlUCSIsAegeanNumbers __attribute((alias("xmlUCSIsAegeanNumbers__internal_alias")));
-#else
-#ifndef xmlUCSIsAegeanNumbers
-extern __typeof (xmlUCSIsAegeanNumbers) xmlUCSIsAegeanNumbers__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsAegeanNumbers xmlUCSIsAegeanNumbers__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsAlphabeticPresentationForms
-extern __typeof (xmlUCSIsAlphabeticPresentationForms) xmlUCSIsAlphabeticPresentationForms __attribute((alias("xmlUCSIsAlphabeticPresentationForms__internal_alias")));
-#else
-#ifndef xmlUCSIsAlphabeticPresentationForms
-extern __typeof (xmlUCSIsAlphabeticPresentationForms) xmlUCSIsAlphabeticPresentationForms__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsAlphabeticPresentationForms xmlUCSIsAlphabeticPresentationForms__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsArabic
-extern __typeof (xmlUCSIsArabic) xmlUCSIsArabic __attribute((alias("xmlUCSIsArabic__internal_alias")));
-#else
-#ifndef xmlUCSIsArabic
-extern __typeof (xmlUCSIsArabic) xmlUCSIsArabic__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsArabic xmlUCSIsArabic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsArabicPresentationFormsA
-extern __typeof (xmlUCSIsArabicPresentationFormsA) xmlUCSIsArabicPresentationFormsA __attribute((alias("xmlUCSIsArabicPresentationFormsA__internal_alias")));
-#else
-#ifndef xmlUCSIsArabicPresentationFormsA
-extern __typeof (xmlUCSIsArabicPresentationFormsA) xmlUCSIsArabicPresentationFormsA__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsArabicPresentationFormsA xmlUCSIsArabicPresentationFormsA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsArabicPresentationFormsB
-extern __typeof (xmlUCSIsArabicPresentationFormsB) xmlUCSIsArabicPresentationFormsB __attribute((alias("xmlUCSIsArabicPresentationFormsB__internal_alias")));
-#else
-#ifndef xmlUCSIsArabicPresentationFormsB
-extern __typeof (xmlUCSIsArabicPresentationFormsB) xmlUCSIsArabicPresentationFormsB__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsArabicPresentationFormsB xmlUCSIsArabicPresentationFormsB__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsArmenian
-extern __typeof (xmlUCSIsArmenian) xmlUCSIsArmenian __attribute((alias("xmlUCSIsArmenian__internal_alias")));
-#else
-#ifndef xmlUCSIsArmenian
-extern __typeof (xmlUCSIsArmenian) xmlUCSIsArmenian__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsArmenian xmlUCSIsArmenian__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsArrows
-extern __typeof (xmlUCSIsArrows) xmlUCSIsArrows __attribute((alias("xmlUCSIsArrows__internal_alias")));
-#else
-#ifndef xmlUCSIsArrows
-extern __typeof (xmlUCSIsArrows) xmlUCSIsArrows__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsArrows xmlUCSIsArrows__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBasicLatin
-extern __typeof (xmlUCSIsBasicLatin) xmlUCSIsBasicLatin __attribute((alias("xmlUCSIsBasicLatin__internal_alias")));
-#else
-#ifndef xmlUCSIsBasicLatin
-extern __typeof (xmlUCSIsBasicLatin) xmlUCSIsBasicLatin__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBasicLatin xmlUCSIsBasicLatin__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBengali
-extern __typeof (xmlUCSIsBengali) xmlUCSIsBengali __attribute((alias("xmlUCSIsBengali__internal_alias")));
-#else
-#ifndef xmlUCSIsBengali
-extern __typeof (xmlUCSIsBengali) xmlUCSIsBengali__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBengali xmlUCSIsBengali__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBlock
-extern __typeof (xmlUCSIsBlock) xmlUCSIsBlock __attribute((alias("xmlUCSIsBlock__internal_alias")));
-#else
-#ifndef xmlUCSIsBlock
-extern __typeof (xmlUCSIsBlock) xmlUCSIsBlock__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBlock xmlUCSIsBlock__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBlockElements
-extern __typeof (xmlUCSIsBlockElements) xmlUCSIsBlockElements __attribute((alias("xmlUCSIsBlockElements__internal_alias")));
-#else
-#ifndef xmlUCSIsBlockElements
-extern __typeof (xmlUCSIsBlockElements) xmlUCSIsBlockElements__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBlockElements xmlUCSIsBlockElements__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBopomofo
-extern __typeof (xmlUCSIsBopomofo) xmlUCSIsBopomofo __attribute((alias("xmlUCSIsBopomofo__internal_alias")));
-#else
-#ifndef xmlUCSIsBopomofo
-extern __typeof (xmlUCSIsBopomofo) xmlUCSIsBopomofo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBopomofo xmlUCSIsBopomofo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBopomofoExtended
-extern __typeof (xmlUCSIsBopomofoExtended) xmlUCSIsBopomofoExtended __attribute((alias("xmlUCSIsBopomofoExtended__internal_alias")));
-#else
-#ifndef xmlUCSIsBopomofoExtended
-extern __typeof (xmlUCSIsBopomofoExtended) xmlUCSIsBopomofoExtended__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBopomofoExtended xmlUCSIsBopomofoExtended__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBoxDrawing
-extern __typeof (xmlUCSIsBoxDrawing) xmlUCSIsBoxDrawing __attribute((alias("xmlUCSIsBoxDrawing__internal_alias")));
-#else
-#ifndef xmlUCSIsBoxDrawing
-extern __typeof (xmlUCSIsBoxDrawing) xmlUCSIsBoxDrawing__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBoxDrawing xmlUCSIsBoxDrawing__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBraillePatterns
-extern __typeof (xmlUCSIsBraillePatterns) xmlUCSIsBraillePatterns __attribute((alias("xmlUCSIsBraillePatterns__internal_alias")));
-#else
-#ifndef xmlUCSIsBraillePatterns
-extern __typeof (xmlUCSIsBraillePatterns) xmlUCSIsBraillePatterns__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBraillePatterns xmlUCSIsBraillePatterns__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsBuhid
-extern __typeof (xmlUCSIsBuhid) xmlUCSIsBuhid __attribute((alias("xmlUCSIsBuhid__internal_alias")));
-#else
-#ifndef xmlUCSIsBuhid
-extern __typeof (xmlUCSIsBuhid) xmlUCSIsBuhid__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsBuhid xmlUCSIsBuhid__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsByzantineMusicalSymbols
-extern __typeof (xmlUCSIsByzantineMusicalSymbols) xmlUCSIsByzantineMusicalSymbols __attribute((alias("xmlUCSIsByzantineMusicalSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsByzantineMusicalSymbols
-extern __typeof (xmlUCSIsByzantineMusicalSymbols) xmlUCSIsByzantineMusicalSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsByzantineMusicalSymbols xmlUCSIsByzantineMusicalSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKCompatibility
-extern __typeof (xmlUCSIsCJKCompatibility) xmlUCSIsCJKCompatibility __attribute((alias("xmlUCSIsCJKCompatibility__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKCompatibility
-extern __typeof (xmlUCSIsCJKCompatibility) xmlUCSIsCJKCompatibility__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKCompatibility xmlUCSIsCJKCompatibility__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKCompatibilityForms
-extern __typeof (xmlUCSIsCJKCompatibilityForms) xmlUCSIsCJKCompatibilityForms __attribute((alias("xmlUCSIsCJKCompatibilityForms__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKCompatibilityForms
-extern __typeof (xmlUCSIsCJKCompatibilityForms) xmlUCSIsCJKCompatibilityForms__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKCompatibilityForms xmlUCSIsCJKCompatibilityForms__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKCompatibilityIdeographs
-extern __typeof (xmlUCSIsCJKCompatibilityIdeographs) xmlUCSIsCJKCompatibilityIdeographs __attribute((alias("xmlUCSIsCJKCompatibilityIdeographs__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKCompatibilityIdeographs
-extern __typeof (xmlUCSIsCJKCompatibilityIdeographs) xmlUCSIsCJKCompatibilityIdeographs__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKCompatibilityIdeographs xmlUCSIsCJKCompatibilityIdeographs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKCompatibilityIdeographsSupplement
-extern __typeof (xmlUCSIsCJKCompatibilityIdeographsSupplement) xmlUCSIsCJKCompatibilityIdeographsSupplement __attribute((alias("xmlUCSIsCJKCompatibilityIdeographsSupplement__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKCompatibilityIdeographsSupplement
-extern __typeof (xmlUCSIsCJKCompatibilityIdeographsSupplement) xmlUCSIsCJKCompatibilityIdeographsSupplement__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKCompatibilityIdeographsSupplement xmlUCSIsCJKCompatibilityIdeographsSupplement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKRadicalsSupplement
-extern __typeof (xmlUCSIsCJKRadicalsSupplement) xmlUCSIsCJKRadicalsSupplement __attribute((alias("xmlUCSIsCJKRadicalsSupplement__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKRadicalsSupplement
-extern __typeof (xmlUCSIsCJKRadicalsSupplement) xmlUCSIsCJKRadicalsSupplement__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKRadicalsSupplement xmlUCSIsCJKRadicalsSupplement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKSymbolsandPunctuation
-extern __typeof (xmlUCSIsCJKSymbolsandPunctuation) xmlUCSIsCJKSymbolsandPunctuation __attribute((alias("xmlUCSIsCJKSymbolsandPunctuation__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKSymbolsandPunctuation
-extern __typeof (xmlUCSIsCJKSymbolsandPunctuation) xmlUCSIsCJKSymbolsandPunctuation__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKSymbolsandPunctuation xmlUCSIsCJKSymbolsandPunctuation__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKUnifiedIdeographs
-extern __typeof (xmlUCSIsCJKUnifiedIdeographs) xmlUCSIsCJKUnifiedIdeographs __attribute((alias("xmlUCSIsCJKUnifiedIdeographs__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKUnifiedIdeographs
-extern __typeof (xmlUCSIsCJKUnifiedIdeographs) xmlUCSIsCJKUnifiedIdeographs__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKUnifiedIdeographs xmlUCSIsCJKUnifiedIdeographs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKUnifiedIdeographsExtensionA
-extern __typeof (xmlUCSIsCJKUnifiedIdeographsExtensionA) xmlUCSIsCJKUnifiedIdeographsExtensionA __attribute((alias("xmlUCSIsCJKUnifiedIdeographsExtensionA__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKUnifiedIdeographsExtensionA
-extern __typeof (xmlUCSIsCJKUnifiedIdeographsExtensionA) xmlUCSIsCJKUnifiedIdeographsExtensionA__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKUnifiedIdeographsExtensionA xmlUCSIsCJKUnifiedIdeographsExtensionA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCJKUnifiedIdeographsExtensionB
-extern __typeof (xmlUCSIsCJKUnifiedIdeographsExtensionB) xmlUCSIsCJKUnifiedIdeographsExtensionB __attribute((alias("xmlUCSIsCJKUnifiedIdeographsExtensionB__internal_alias")));
-#else
-#ifndef xmlUCSIsCJKUnifiedIdeographsExtensionB
-extern __typeof (xmlUCSIsCJKUnifiedIdeographsExtensionB) xmlUCSIsCJKUnifiedIdeographsExtensionB__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCJKUnifiedIdeographsExtensionB xmlUCSIsCJKUnifiedIdeographsExtensionB__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCat
-extern __typeof (xmlUCSIsCat) xmlUCSIsCat __attribute((alias("xmlUCSIsCat__internal_alias")));
-#else
-#ifndef xmlUCSIsCat
-extern __typeof (xmlUCSIsCat) xmlUCSIsCat__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCat xmlUCSIsCat__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatC
-extern __typeof (xmlUCSIsCatC) xmlUCSIsCatC __attribute((alias("xmlUCSIsCatC__internal_alias")));
-#else
-#ifndef xmlUCSIsCatC
-extern __typeof (xmlUCSIsCatC) xmlUCSIsCatC__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatC xmlUCSIsCatC__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatCc
-extern __typeof (xmlUCSIsCatCc) xmlUCSIsCatCc __attribute((alias("xmlUCSIsCatCc__internal_alias")));
-#else
-#ifndef xmlUCSIsCatCc
-extern __typeof (xmlUCSIsCatCc) xmlUCSIsCatCc__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatCc xmlUCSIsCatCc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatCf
-extern __typeof (xmlUCSIsCatCf) xmlUCSIsCatCf __attribute((alias("xmlUCSIsCatCf__internal_alias")));
-#else
-#ifndef xmlUCSIsCatCf
-extern __typeof (xmlUCSIsCatCf) xmlUCSIsCatCf__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatCf xmlUCSIsCatCf__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatCo
-extern __typeof (xmlUCSIsCatCo) xmlUCSIsCatCo __attribute((alias("xmlUCSIsCatCo__internal_alias")));
-#else
-#ifndef xmlUCSIsCatCo
-extern __typeof (xmlUCSIsCatCo) xmlUCSIsCatCo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatCo xmlUCSIsCatCo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatCs
-extern __typeof (xmlUCSIsCatCs) xmlUCSIsCatCs __attribute((alias("xmlUCSIsCatCs__internal_alias")));
-#else
-#ifndef xmlUCSIsCatCs
-extern __typeof (xmlUCSIsCatCs) xmlUCSIsCatCs__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatCs xmlUCSIsCatCs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatL
-extern __typeof (xmlUCSIsCatL) xmlUCSIsCatL __attribute((alias("xmlUCSIsCatL__internal_alias")));
-#else
-#ifndef xmlUCSIsCatL
-extern __typeof (xmlUCSIsCatL) xmlUCSIsCatL__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatL xmlUCSIsCatL__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatLl
-extern __typeof (xmlUCSIsCatLl) xmlUCSIsCatLl __attribute((alias("xmlUCSIsCatLl__internal_alias")));
-#else
-#ifndef xmlUCSIsCatLl
-extern __typeof (xmlUCSIsCatLl) xmlUCSIsCatLl__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatLl xmlUCSIsCatLl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatLm
-extern __typeof (xmlUCSIsCatLm) xmlUCSIsCatLm __attribute((alias("xmlUCSIsCatLm__internal_alias")));
-#else
-#ifndef xmlUCSIsCatLm
-extern __typeof (xmlUCSIsCatLm) xmlUCSIsCatLm__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatLm xmlUCSIsCatLm__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatLo
-extern __typeof (xmlUCSIsCatLo) xmlUCSIsCatLo __attribute((alias("xmlUCSIsCatLo__internal_alias")));
-#else
-#ifndef xmlUCSIsCatLo
-extern __typeof (xmlUCSIsCatLo) xmlUCSIsCatLo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatLo xmlUCSIsCatLo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatLt
-extern __typeof (xmlUCSIsCatLt) xmlUCSIsCatLt __attribute((alias("xmlUCSIsCatLt__internal_alias")));
-#else
-#ifndef xmlUCSIsCatLt
-extern __typeof (xmlUCSIsCatLt) xmlUCSIsCatLt__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatLt xmlUCSIsCatLt__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatLu
-extern __typeof (xmlUCSIsCatLu) xmlUCSIsCatLu __attribute((alias("xmlUCSIsCatLu__internal_alias")));
-#else
-#ifndef xmlUCSIsCatLu
-extern __typeof (xmlUCSIsCatLu) xmlUCSIsCatLu__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatLu xmlUCSIsCatLu__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatM
-extern __typeof (xmlUCSIsCatM) xmlUCSIsCatM __attribute((alias("xmlUCSIsCatM__internal_alias")));
-#else
-#ifndef xmlUCSIsCatM
-extern __typeof (xmlUCSIsCatM) xmlUCSIsCatM__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatM xmlUCSIsCatM__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatMc
-extern __typeof (xmlUCSIsCatMc) xmlUCSIsCatMc __attribute((alias("xmlUCSIsCatMc__internal_alias")));
-#else
-#ifndef xmlUCSIsCatMc
-extern __typeof (xmlUCSIsCatMc) xmlUCSIsCatMc__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatMc xmlUCSIsCatMc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatMe
-extern __typeof (xmlUCSIsCatMe) xmlUCSIsCatMe __attribute((alias("xmlUCSIsCatMe__internal_alias")));
-#else
-#ifndef xmlUCSIsCatMe
-extern __typeof (xmlUCSIsCatMe) xmlUCSIsCatMe__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatMe xmlUCSIsCatMe__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatMn
-extern __typeof (xmlUCSIsCatMn) xmlUCSIsCatMn __attribute((alias("xmlUCSIsCatMn__internal_alias")));
-#else
-#ifndef xmlUCSIsCatMn
-extern __typeof (xmlUCSIsCatMn) xmlUCSIsCatMn__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatMn xmlUCSIsCatMn__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatN
-extern __typeof (xmlUCSIsCatN) xmlUCSIsCatN __attribute((alias("xmlUCSIsCatN__internal_alias")));
-#else
-#ifndef xmlUCSIsCatN
-extern __typeof (xmlUCSIsCatN) xmlUCSIsCatN__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatN xmlUCSIsCatN__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatNd
-extern __typeof (xmlUCSIsCatNd) xmlUCSIsCatNd __attribute((alias("xmlUCSIsCatNd__internal_alias")));
-#else
-#ifndef xmlUCSIsCatNd
-extern __typeof (xmlUCSIsCatNd) xmlUCSIsCatNd__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatNd xmlUCSIsCatNd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatNl
-extern __typeof (xmlUCSIsCatNl) xmlUCSIsCatNl __attribute((alias("xmlUCSIsCatNl__internal_alias")));
-#else
-#ifndef xmlUCSIsCatNl
-extern __typeof (xmlUCSIsCatNl) xmlUCSIsCatNl__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatNl xmlUCSIsCatNl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatNo
-extern __typeof (xmlUCSIsCatNo) xmlUCSIsCatNo __attribute((alias("xmlUCSIsCatNo__internal_alias")));
-#else
-#ifndef xmlUCSIsCatNo
-extern __typeof (xmlUCSIsCatNo) xmlUCSIsCatNo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatNo xmlUCSIsCatNo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatP
-extern __typeof (xmlUCSIsCatP) xmlUCSIsCatP __attribute((alias("xmlUCSIsCatP__internal_alias")));
-#else
-#ifndef xmlUCSIsCatP
-extern __typeof (xmlUCSIsCatP) xmlUCSIsCatP__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatP xmlUCSIsCatP__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatPc
-extern __typeof (xmlUCSIsCatPc) xmlUCSIsCatPc __attribute((alias("xmlUCSIsCatPc__internal_alias")));
-#else
-#ifndef xmlUCSIsCatPc
-extern __typeof (xmlUCSIsCatPc) xmlUCSIsCatPc__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatPc xmlUCSIsCatPc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatPd
-extern __typeof (xmlUCSIsCatPd) xmlUCSIsCatPd __attribute((alias("xmlUCSIsCatPd__internal_alias")));
-#else
-#ifndef xmlUCSIsCatPd
-extern __typeof (xmlUCSIsCatPd) xmlUCSIsCatPd__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatPd xmlUCSIsCatPd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatPe
-extern __typeof (xmlUCSIsCatPe) xmlUCSIsCatPe __attribute((alias("xmlUCSIsCatPe__internal_alias")));
-#else
-#ifndef xmlUCSIsCatPe
-extern __typeof (xmlUCSIsCatPe) xmlUCSIsCatPe__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatPe xmlUCSIsCatPe__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatPf
-extern __typeof (xmlUCSIsCatPf) xmlUCSIsCatPf __attribute((alias("xmlUCSIsCatPf__internal_alias")));
-#else
-#ifndef xmlUCSIsCatPf
-extern __typeof (xmlUCSIsCatPf) xmlUCSIsCatPf__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatPf xmlUCSIsCatPf__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatPi
-extern __typeof (xmlUCSIsCatPi) xmlUCSIsCatPi __attribute((alias("xmlUCSIsCatPi__internal_alias")));
-#else
-#ifndef xmlUCSIsCatPi
-extern __typeof (xmlUCSIsCatPi) xmlUCSIsCatPi__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatPi xmlUCSIsCatPi__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatPo
-extern __typeof (xmlUCSIsCatPo) xmlUCSIsCatPo __attribute((alias("xmlUCSIsCatPo__internal_alias")));
-#else
-#ifndef xmlUCSIsCatPo
-extern __typeof (xmlUCSIsCatPo) xmlUCSIsCatPo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatPo xmlUCSIsCatPo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatPs
-extern __typeof (xmlUCSIsCatPs) xmlUCSIsCatPs __attribute((alias("xmlUCSIsCatPs__internal_alias")));
-#else
-#ifndef xmlUCSIsCatPs
-extern __typeof (xmlUCSIsCatPs) xmlUCSIsCatPs__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatPs xmlUCSIsCatPs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatS
-extern __typeof (xmlUCSIsCatS) xmlUCSIsCatS __attribute((alias("xmlUCSIsCatS__internal_alias")));
-#else
-#ifndef xmlUCSIsCatS
-extern __typeof (xmlUCSIsCatS) xmlUCSIsCatS__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatS xmlUCSIsCatS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatSc
-extern __typeof (xmlUCSIsCatSc) xmlUCSIsCatSc __attribute((alias("xmlUCSIsCatSc__internal_alias")));
-#else
-#ifndef xmlUCSIsCatSc
-extern __typeof (xmlUCSIsCatSc) xmlUCSIsCatSc__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatSc xmlUCSIsCatSc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatSk
-extern __typeof (xmlUCSIsCatSk) xmlUCSIsCatSk __attribute((alias("xmlUCSIsCatSk__internal_alias")));
-#else
-#ifndef xmlUCSIsCatSk
-extern __typeof (xmlUCSIsCatSk) xmlUCSIsCatSk__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatSk xmlUCSIsCatSk__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatSm
-extern __typeof (xmlUCSIsCatSm) xmlUCSIsCatSm __attribute((alias("xmlUCSIsCatSm__internal_alias")));
-#else
-#ifndef xmlUCSIsCatSm
-extern __typeof (xmlUCSIsCatSm) xmlUCSIsCatSm__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatSm xmlUCSIsCatSm__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatSo
-extern __typeof (xmlUCSIsCatSo) xmlUCSIsCatSo __attribute((alias("xmlUCSIsCatSo__internal_alias")));
-#else
-#ifndef xmlUCSIsCatSo
-extern __typeof (xmlUCSIsCatSo) xmlUCSIsCatSo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatSo xmlUCSIsCatSo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatZ
-extern __typeof (xmlUCSIsCatZ) xmlUCSIsCatZ __attribute((alias("xmlUCSIsCatZ__internal_alias")));
-#else
-#ifndef xmlUCSIsCatZ
-extern __typeof (xmlUCSIsCatZ) xmlUCSIsCatZ__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatZ xmlUCSIsCatZ__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatZl
-extern __typeof (xmlUCSIsCatZl) xmlUCSIsCatZl __attribute((alias("xmlUCSIsCatZl__internal_alias")));
-#else
-#ifndef xmlUCSIsCatZl
-extern __typeof (xmlUCSIsCatZl) xmlUCSIsCatZl__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatZl xmlUCSIsCatZl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatZp
-extern __typeof (xmlUCSIsCatZp) xmlUCSIsCatZp __attribute((alias("xmlUCSIsCatZp__internal_alias")));
-#else
-#ifndef xmlUCSIsCatZp
-extern __typeof (xmlUCSIsCatZp) xmlUCSIsCatZp__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatZp xmlUCSIsCatZp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCatZs
-extern __typeof (xmlUCSIsCatZs) xmlUCSIsCatZs __attribute((alias("xmlUCSIsCatZs__internal_alias")));
-#else
-#ifndef xmlUCSIsCatZs
-extern __typeof (xmlUCSIsCatZs) xmlUCSIsCatZs__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCatZs xmlUCSIsCatZs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCherokee
-extern __typeof (xmlUCSIsCherokee) xmlUCSIsCherokee __attribute((alias("xmlUCSIsCherokee__internal_alias")));
-#else
-#ifndef xmlUCSIsCherokee
-extern __typeof (xmlUCSIsCherokee) xmlUCSIsCherokee__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCherokee xmlUCSIsCherokee__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCombiningDiacriticalMarks
-extern __typeof (xmlUCSIsCombiningDiacriticalMarks) xmlUCSIsCombiningDiacriticalMarks __attribute((alias("xmlUCSIsCombiningDiacriticalMarks__internal_alias")));
-#else
-#ifndef xmlUCSIsCombiningDiacriticalMarks
-extern __typeof (xmlUCSIsCombiningDiacriticalMarks) xmlUCSIsCombiningDiacriticalMarks__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCombiningDiacriticalMarks xmlUCSIsCombiningDiacriticalMarks__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCombiningDiacriticalMarksforSymbols
-extern __typeof (xmlUCSIsCombiningDiacriticalMarksforSymbols) xmlUCSIsCombiningDiacriticalMarksforSymbols __attribute((alias("xmlUCSIsCombiningDiacriticalMarksforSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsCombiningDiacriticalMarksforSymbols
-extern __typeof (xmlUCSIsCombiningDiacriticalMarksforSymbols) xmlUCSIsCombiningDiacriticalMarksforSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCombiningDiacriticalMarksforSymbols xmlUCSIsCombiningDiacriticalMarksforSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCombiningHalfMarks
-extern __typeof (xmlUCSIsCombiningHalfMarks) xmlUCSIsCombiningHalfMarks __attribute((alias("xmlUCSIsCombiningHalfMarks__internal_alias")));
-#else
-#ifndef xmlUCSIsCombiningHalfMarks
-extern __typeof (xmlUCSIsCombiningHalfMarks) xmlUCSIsCombiningHalfMarks__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCombiningHalfMarks xmlUCSIsCombiningHalfMarks__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCombiningMarksforSymbols
-extern __typeof (xmlUCSIsCombiningMarksforSymbols) xmlUCSIsCombiningMarksforSymbols __attribute((alias("xmlUCSIsCombiningMarksforSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsCombiningMarksforSymbols
-extern __typeof (xmlUCSIsCombiningMarksforSymbols) xmlUCSIsCombiningMarksforSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCombiningMarksforSymbols xmlUCSIsCombiningMarksforSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsControlPictures
-extern __typeof (xmlUCSIsControlPictures) xmlUCSIsControlPictures __attribute((alias("xmlUCSIsControlPictures__internal_alias")));
-#else
-#ifndef xmlUCSIsControlPictures
-extern __typeof (xmlUCSIsControlPictures) xmlUCSIsControlPictures__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsControlPictures xmlUCSIsControlPictures__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCurrencySymbols
-extern __typeof (xmlUCSIsCurrencySymbols) xmlUCSIsCurrencySymbols __attribute((alias("xmlUCSIsCurrencySymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsCurrencySymbols
-extern __typeof (xmlUCSIsCurrencySymbols) xmlUCSIsCurrencySymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCurrencySymbols xmlUCSIsCurrencySymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCypriotSyllabary
-extern __typeof (xmlUCSIsCypriotSyllabary) xmlUCSIsCypriotSyllabary __attribute((alias("xmlUCSIsCypriotSyllabary__internal_alias")));
-#else
-#ifndef xmlUCSIsCypriotSyllabary
-extern __typeof (xmlUCSIsCypriotSyllabary) xmlUCSIsCypriotSyllabary__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCypriotSyllabary xmlUCSIsCypriotSyllabary__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCyrillic
-extern __typeof (xmlUCSIsCyrillic) xmlUCSIsCyrillic __attribute((alias("xmlUCSIsCyrillic__internal_alias")));
-#else
-#ifndef xmlUCSIsCyrillic
-extern __typeof (xmlUCSIsCyrillic) xmlUCSIsCyrillic__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCyrillic xmlUCSIsCyrillic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsCyrillicSupplement
-extern __typeof (xmlUCSIsCyrillicSupplement) xmlUCSIsCyrillicSupplement __attribute((alias("xmlUCSIsCyrillicSupplement__internal_alias")));
-#else
-#ifndef xmlUCSIsCyrillicSupplement
-extern __typeof (xmlUCSIsCyrillicSupplement) xmlUCSIsCyrillicSupplement__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsCyrillicSupplement xmlUCSIsCyrillicSupplement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsDeseret
-extern __typeof (xmlUCSIsDeseret) xmlUCSIsDeseret __attribute((alias("xmlUCSIsDeseret__internal_alias")));
-#else
-#ifndef xmlUCSIsDeseret
-extern __typeof (xmlUCSIsDeseret) xmlUCSIsDeseret__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsDeseret xmlUCSIsDeseret__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsDevanagari
-extern __typeof (xmlUCSIsDevanagari) xmlUCSIsDevanagari __attribute((alias("xmlUCSIsDevanagari__internal_alias")));
-#else
-#ifndef xmlUCSIsDevanagari
-extern __typeof (xmlUCSIsDevanagari) xmlUCSIsDevanagari__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsDevanagari xmlUCSIsDevanagari__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsDingbats
-extern __typeof (xmlUCSIsDingbats) xmlUCSIsDingbats __attribute((alias("xmlUCSIsDingbats__internal_alias")));
-#else
-#ifndef xmlUCSIsDingbats
-extern __typeof (xmlUCSIsDingbats) xmlUCSIsDingbats__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsDingbats xmlUCSIsDingbats__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsEnclosedAlphanumerics
-extern __typeof (xmlUCSIsEnclosedAlphanumerics) xmlUCSIsEnclosedAlphanumerics __attribute((alias("xmlUCSIsEnclosedAlphanumerics__internal_alias")));
-#else
-#ifndef xmlUCSIsEnclosedAlphanumerics
-extern __typeof (xmlUCSIsEnclosedAlphanumerics) xmlUCSIsEnclosedAlphanumerics__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsEnclosedAlphanumerics xmlUCSIsEnclosedAlphanumerics__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsEnclosedCJKLettersandMonths
-extern __typeof (xmlUCSIsEnclosedCJKLettersandMonths) xmlUCSIsEnclosedCJKLettersandMonths __attribute((alias("xmlUCSIsEnclosedCJKLettersandMonths__internal_alias")));
-#else
-#ifndef xmlUCSIsEnclosedCJKLettersandMonths
-extern __typeof (xmlUCSIsEnclosedCJKLettersandMonths) xmlUCSIsEnclosedCJKLettersandMonths__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsEnclosedCJKLettersandMonths xmlUCSIsEnclosedCJKLettersandMonths__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsEthiopic
-extern __typeof (xmlUCSIsEthiopic) xmlUCSIsEthiopic __attribute((alias("xmlUCSIsEthiopic__internal_alias")));
-#else
-#ifndef xmlUCSIsEthiopic
-extern __typeof (xmlUCSIsEthiopic) xmlUCSIsEthiopic__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsEthiopic xmlUCSIsEthiopic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGeneralPunctuation
-extern __typeof (xmlUCSIsGeneralPunctuation) xmlUCSIsGeneralPunctuation __attribute((alias("xmlUCSIsGeneralPunctuation__internal_alias")));
-#else
-#ifndef xmlUCSIsGeneralPunctuation
-extern __typeof (xmlUCSIsGeneralPunctuation) xmlUCSIsGeneralPunctuation__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGeneralPunctuation xmlUCSIsGeneralPunctuation__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGeometricShapes
-extern __typeof (xmlUCSIsGeometricShapes) xmlUCSIsGeometricShapes __attribute((alias("xmlUCSIsGeometricShapes__internal_alias")));
-#else
-#ifndef xmlUCSIsGeometricShapes
-extern __typeof (xmlUCSIsGeometricShapes) xmlUCSIsGeometricShapes__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGeometricShapes xmlUCSIsGeometricShapes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGeorgian
-extern __typeof (xmlUCSIsGeorgian) xmlUCSIsGeorgian __attribute((alias("xmlUCSIsGeorgian__internal_alias")));
-#else
-#ifndef xmlUCSIsGeorgian
-extern __typeof (xmlUCSIsGeorgian) xmlUCSIsGeorgian__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGeorgian xmlUCSIsGeorgian__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGothic
-extern __typeof (xmlUCSIsGothic) xmlUCSIsGothic __attribute((alias("xmlUCSIsGothic__internal_alias")));
-#else
-#ifndef xmlUCSIsGothic
-extern __typeof (xmlUCSIsGothic) xmlUCSIsGothic__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGothic xmlUCSIsGothic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGreek
-extern __typeof (xmlUCSIsGreek) xmlUCSIsGreek __attribute((alias("xmlUCSIsGreek__internal_alias")));
-#else
-#ifndef xmlUCSIsGreek
-extern __typeof (xmlUCSIsGreek) xmlUCSIsGreek__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGreek xmlUCSIsGreek__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGreekExtended
-extern __typeof (xmlUCSIsGreekExtended) xmlUCSIsGreekExtended __attribute((alias("xmlUCSIsGreekExtended__internal_alias")));
-#else
-#ifndef xmlUCSIsGreekExtended
-extern __typeof (xmlUCSIsGreekExtended) xmlUCSIsGreekExtended__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGreekExtended xmlUCSIsGreekExtended__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGreekandCoptic
-extern __typeof (xmlUCSIsGreekandCoptic) xmlUCSIsGreekandCoptic __attribute((alias("xmlUCSIsGreekandCoptic__internal_alias")));
-#else
-#ifndef xmlUCSIsGreekandCoptic
-extern __typeof (xmlUCSIsGreekandCoptic) xmlUCSIsGreekandCoptic__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGreekandCoptic xmlUCSIsGreekandCoptic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGujarati
-extern __typeof (xmlUCSIsGujarati) xmlUCSIsGujarati __attribute((alias("xmlUCSIsGujarati__internal_alias")));
-#else
-#ifndef xmlUCSIsGujarati
-extern __typeof (xmlUCSIsGujarati) xmlUCSIsGujarati__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGujarati xmlUCSIsGujarati__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsGurmukhi
-extern __typeof (xmlUCSIsGurmukhi) xmlUCSIsGurmukhi __attribute((alias("xmlUCSIsGurmukhi__internal_alias")));
-#else
-#ifndef xmlUCSIsGurmukhi
-extern __typeof (xmlUCSIsGurmukhi) xmlUCSIsGurmukhi__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsGurmukhi xmlUCSIsGurmukhi__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHalfwidthandFullwidthForms
-extern __typeof (xmlUCSIsHalfwidthandFullwidthForms) xmlUCSIsHalfwidthandFullwidthForms __attribute((alias("xmlUCSIsHalfwidthandFullwidthForms__internal_alias")));
-#else
-#ifndef xmlUCSIsHalfwidthandFullwidthForms
-extern __typeof (xmlUCSIsHalfwidthandFullwidthForms) xmlUCSIsHalfwidthandFullwidthForms__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHalfwidthandFullwidthForms xmlUCSIsHalfwidthandFullwidthForms__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHangulCompatibilityJamo
-extern __typeof (xmlUCSIsHangulCompatibilityJamo) xmlUCSIsHangulCompatibilityJamo __attribute((alias("xmlUCSIsHangulCompatibilityJamo__internal_alias")));
-#else
-#ifndef xmlUCSIsHangulCompatibilityJamo
-extern __typeof (xmlUCSIsHangulCompatibilityJamo) xmlUCSIsHangulCompatibilityJamo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHangulCompatibilityJamo xmlUCSIsHangulCompatibilityJamo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHangulJamo
-extern __typeof (xmlUCSIsHangulJamo) xmlUCSIsHangulJamo __attribute((alias("xmlUCSIsHangulJamo__internal_alias")));
-#else
-#ifndef xmlUCSIsHangulJamo
-extern __typeof (xmlUCSIsHangulJamo) xmlUCSIsHangulJamo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHangulJamo xmlUCSIsHangulJamo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHangulSyllables
-extern __typeof (xmlUCSIsHangulSyllables) xmlUCSIsHangulSyllables __attribute((alias("xmlUCSIsHangulSyllables__internal_alias")));
-#else
-#ifndef xmlUCSIsHangulSyllables
-extern __typeof (xmlUCSIsHangulSyllables) xmlUCSIsHangulSyllables__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHangulSyllables xmlUCSIsHangulSyllables__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHanunoo
-extern __typeof (xmlUCSIsHanunoo) xmlUCSIsHanunoo __attribute((alias("xmlUCSIsHanunoo__internal_alias")));
-#else
-#ifndef xmlUCSIsHanunoo
-extern __typeof (xmlUCSIsHanunoo) xmlUCSIsHanunoo__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHanunoo xmlUCSIsHanunoo__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHebrew
-extern __typeof (xmlUCSIsHebrew) xmlUCSIsHebrew __attribute((alias("xmlUCSIsHebrew__internal_alias")));
-#else
-#ifndef xmlUCSIsHebrew
-extern __typeof (xmlUCSIsHebrew) xmlUCSIsHebrew__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHebrew xmlUCSIsHebrew__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHighPrivateUseSurrogates
-extern __typeof (xmlUCSIsHighPrivateUseSurrogates) xmlUCSIsHighPrivateUseSurrogates __attribute((alias("xmlUCSIsHighPrivateUseSurrogates__internal_alias")));
-#else
-#ifndef xmlUCSIsHighPrivateUseSurrogates
-extern __typeof (xmlUCSIsHighPrivateUseSurrogates) xmlUCSIsHighPrivateUseSurrogates__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHighPrivateUseSurrogates xmlUCSIsHighPrivateUseSurrogates__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHighSurrogates
-extern __typeof (xmlUCSIsHighSurrogates) xmlUCSIsHighSurrogates __attribute((alias("xmlUCSIsHighSurrogates__internal_alias")));
-#else
-#ifndef xmlUCSIsHighSurrogates
-extern __typeof (xmlUCSIsHighSurrogates) xmlUCSIsHighSurrogates__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHighSurrogates xmlUCSIsHighSurrogates__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsHiragana
-extern __typeof (xmlUCSIsHiragana) xmlUCSIsHiragana __attribute((alias("xmlUCSIsHiragana__internal_alias")));
-#else
-#ifndef xmlUCSIsHiragana
-extern __typeof (xmlUCSIsHiragana) xmlUCSIsHiragana__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsHiragana xmlUCSIsHiragana__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsIPAExtensions
-extern __typeof (xmlUCSIsIPAExtensions) xmlUCSIsIPAExtensions __attribute((alias("xmlUCSIsIPAExtensions__internal_alias")));
-#else
-#ifndef xmlUCSIsIPAExtensions
-extern __typeof (xmlUCSIsIPAExtensions) xmlUCSIsIPAExtensions__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsIPAExtensions xmlUCSIsIPAExtensions__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsIdeographicDescriptionCharacters
-extern __typeof (xmlUCSIsIdeographicDescriptionCharacters) xmlUCSIsIdeographicDescriptionCharacters __attribute((alias("xmlUCSIsIdeographicDescriptionCharacters__internal_alias")));
-#else
-#ifndef xmlUCSIsIdeographicDescriptionCharacters
-extern __typeof (xmlUCSIsIdeographicDescriptionCharacters) xmlUCSIsIdeographicDescriptionCharacters__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsIdeographicDescriptionCharacters xmlUCSIsIdeographicDescriptionCharacters__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsKanbun
-extern __typeof (xmlUCSIsKanbun) xmlUCSIsKanbun __attribute((alias("xmlUCSIsKanbun__internal_alias")));
-#else
-#ifndef xmlUCSIsKanbun
-extern __typeof (xmlUCSIsKanbun) xmlUCSIsKanbun__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsKanbun xmlUCSIsKanbun__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsKangxiRadicals
-extern __typeof (xmlUCSIsKangxiRadicals) xmlUCSIsKangxiRadicals __attribute((alias("xmlUCSIsKangxiRadicals__internal_alias")));
-#else
-#ifndef xmlUCSIsKangxiRadicals
-extern __typeof (xmlUCSIsKangxiRadicals) xmlUCSIsKangxiRadicals__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsKangxiRadicals xmlUCSIsKangxiRadicals__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsKannada
-extern __typeof (xmlUCSIsKannada) xmlUCSIsKannada __attribute((alias("xmlUCSIsKannada__internal_alias")));
-#else
-#ifndef xmlUCSIsKannada
-extern __typeof (xmlUCSIsKannada) xmlUCSIsKannada__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsKannada xmlUCSIsKannada__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsKatakana
-extern __typeof (xmlUCSIsKatakana) xmlUCSIsKatakana __attribute((alias("xmlUCSIsKatakana__internal_alias")));
-#else
-#ifndef xmlUCSIsKatakana
-extern __typeof (xmlUCSIsKatakana) xmlUCSIsKatakana__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsKatakana xmlUCSIsKatakana__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsKatakanaPhoneticExtensions
-extern __typeof (xmlUCSIsKatakanaPhoneticExtensions) xmlUCSIsKatakanaPhoneticExtensions __attribute((alias("xmlUCSIsKatakanaPhoneticExtensions__internal_alias")));
-#else
-#ifndef xmlUCSIsKatakanaPhoneticExtensions
-extern __typeof (xmlUCSIsKatakanaPhoneticExtensions) xmlUCSIsKatakanaPhoneticExtensions__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsKatakanaPhoneticExtensions xmlUCSIsKatakanaPhoneticExtensions__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsKhmer
-extern __typeof (xmlUCSIsKhmer) xmlUCSIsKhmer __attribute((alias("xmlUCSIsKhmer__internal_alias")));
-#else
-#ifndef xmlUCSIsKhmer
-extern __typeof (xmlUCSIsKhmer) xmlUCSIsKhmer__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsKhmer xmlUCSIsKhmer__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsKhmerSymbols
-extern __typeof (xmlUCSIsKhmerSymbols) xmlUCSIsKhmerSymbols __attribute((alias("xmlUCSIsKhmerSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsKhmerSymbols
-extern __typeof (xmlUCSIsKhmerSymbols) xmlUCSIsKhmerSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsKhmerSymbols xmlUCSIsKhmerSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLao
-extern __typeof (xmlUCSIsLao) xmlUCSIsLao __attribute((alias("xmlUCSIsLao__internal_alias")));
-#else
-#ifndef xmlUCSIsLao
-extern __typeof (xmlUCSIsLao) xmlUCSIsLao__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLao xmlUCSIsLao__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLatin1Supplement
-extern __typeof (xmlUCSIsLatin1Supplement) xmlUCSIsLatin1Supplement __attribute((alias("xmlUCSIsLatin1Supplement__internal_alias")));
-#else
-#ifndef xmlUCSIsLatin1Supplement
-extern __typeof (xmlUCSIsLatin1Supplement) xmlUCSIsLatin1Supplement__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLatin1Supplement xmlUCSIsLatin1Supplement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLatinExtendedA
-extern __typeof (xmlUCSIsLatinExtendedA) xmlUCSIsLatinExtendedA __attribute((alias("xmlUCSIsLatinExtendedA__internal_alias")));
-#else
-#ifndef xmlUCSIsLatinExtendedA
-extern __typeof (xmlUCSIsLatinExtendedA) xmlUCSIsLatinExtendedA__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLatinExtendedA xmlUCSIsLatinExtendedA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLatinExtendedAdditional
-extern __typeof (xmlUCSIsLatinExtendedAdditional) xmlUCSIsLatinExtendedAdditional __attribute((alias("xmlUCSIsLatinExtendedAdditional__internal_alias")));
-#else
-#ifndef xmlUCSIsLatinExtendedAdditional
-extern __typeof (xmlUCSIsLatinExtendedAdditional) xmlUCSIsLatinExtendedAdditional__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLatinExtendedAdditional xmlUCSIsLatinExtendedAdditional__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLatinExtendedB
-extern __typeof (xmlUCSIsLatinExtendedB) xmlUCSIsLatinExtendedB __attribute((alias("xmlUCSIsLatinExtendedB__internal_alias")));
-#else
-#ifndef xmlUCSIsLatinExtendedB
-extern __typeof (xmlUCSIsLatinExtendedB) xmlUCSIsLatinExtendedB__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLatinExtendedB xmlUCSIsLatinExtendedB__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLetterlikeSymbols
-extern __typeof (xmlUCSIsLetterlikeSymbols) xmlUCSIsLetterlikeSymbols __attribute((alias("xmlUCSIsLetterlikeSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsLetterlikeSymbols
-extern __typeof (xmlUCSIsLetterlikeSymbols) xmlUCSIsLetterlikeSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLetterlikeSymbols xmlUCSIsLetterlikeSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLimbu
-extern __typeof (xmlUCSIsLimbu) xmlUCSIsLimbu __attribute((alias("xmlUCSIsLimbu__internal_alias")));
-#else
-#ifndef xmlUCSIsLimbu
-extern __typeof (xmlUCSIsLimbu) xmlUCSIsLimbu__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLimbu xmlUCSIsLimbu__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLinearBIdeograms
-extern __typeof (xmlUCSIsLinearBIdeograms) xmlUCSIsLinearBIdeograms __attribute((alias("xmlUCSIsLinearBIdeograms__internal_alias")));
-#else
-#ifndef xmlUCSIsLinearBIdeograms
-extern __typeof (xmlUCSIsLinearBIdeograms) xmlUCSIsLinearBIdeograms__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLinearBIdeograms xmlUCSIsLinearBIdeograms__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLinearBSyllabary
-extern __typeof (xmlUCSIsLinearBSyllabary) xmlUCSIsLinearBSyllabary __attribute((alias("xmlUCSIsLinearBSyllabary__internal_alias")));
-#else
-#ifndef xmlUCSIsLinearBSyllabary
-extern __typeof (xmlUCSIsLinearBSyllabary) xmlUCSIsLinearBSyllabary__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLinearBSyllabary xmlUCSIsLinearBSyllabary__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsLowSurrogates
-extern __typeof (xmlUCSIsLowSurrogates) xmlUCSIsLowSurrogates __attribute((alias("xmlUCSIsLowSurrogates__internal_alias")));
-#else
-#ifndef xmlUCSIsLowSurrogates
-extern __typeof (xmlUCSIsLowSurrogates) xmlUCSIsLowSurrogates__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsLowSurrogates xmlUCSIsLowSurrogates__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMalayalam
-extern __typeof (xmlUCSIsMalayalam) xmlUCSIsMalayalam __attribute((alias("xmlUCSIsMalayalam__internal_alias")));
-#else
-#ifndef xmlUCSIsMalayalam
-extern __typeof (xmlUCSIsMalayalam) xmlUCSIsMalayalam__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMalayalam xmlUCSIsMalayalam__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMathematicalAlphanumericSymbols
-extern __typeof (xmlUCSIsMathematicalAlphanumericSymbols) xmlUCSIsMathematicalAlphanumericSymbols __attribute((alias("xmlUCSIsMathematicalAlphanumericSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsMathematicalAlphanumericSymbols
-extern __typeof (xmlUCSIsMathematicalAlphanumericSymbols) xmlUCSIsMathematicalAlphanumericSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMathematicalAlphanumericSymbols xmlUCSIsMathematicalAlphanumericSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMathematicalOperators
-extern __typeof (xmlUCSIsMathematicalOperators) xmlUCSIsMathematicalOperators __attribute((alias("xmlUCSIsMathematicalOperators__internal_alias")));
-#else
-#ifndef xmlUCSIsMathematicalOperators
-extern __typeof (xmlUCSIsMathematicalOperators) xmlUCSIsMathematicalOperators__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMathematicalOperators xmlUCSIsMathematicalOperators__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMiscellaneousMathematicalSymbolsA
-extern __typeof (xmlUCSIsMiscellaneousMathematicalSymbolsA) xmlUCSIsMiscellaneousMathematicalSymbolsA __attribute((alias("xmlUCSIsMiscellaneousMathematicalSymbolsA__internal_alias")));
-#else
-#ifndef xmlUCSIsMiscellaneousMathematicalSymbolsA
-extern __typeof (xmlUCSIsMiscellaneousMathematicalSymbolsA) xmlUCSIsMiscellaneousMathematicalSymbolsA__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMiscellaneousMathematicalSymbolsA xmlUCSIsMiscellaneousMathematicalSymbolsA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMiscellaneousMathematicalSymbolsB
-extern __typeof (xmlUCSIsMiscellaneousMathematicalSymbolsB) xmlUCSIsMiscellaneousMathematicalSymbolsB __attribute((alias("xmlUCSIsMiscellaneousMathematicalSymbolsB__internal_alias")));
-#else
-#ifndef xmlUCSIsMiscellaneousMathematicalSymbolsB
-extern __typeof (xmlUCSIsMiscellaneousMathematicalSymbolsB) xmlUCSIsMiscellaneousMathematicalSymbolsB__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMiscellaneousMathematicalSymbolsB xmlUCSIsMiscellaneousMathematicalSymbolsB__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMiscellaneousSymbols
-extern __typeof (xmlUCSIsMiscellaneousSymbols) xmlUCSIsMiscellaneousSymbols __attribute((alias("xmlUCSIsMiscellaneousSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsMiscellaneousSymbols
-extern __typeof (xmlUCSIsMiscellaneousSymbols) xmlUCSIsMiscellaneousSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMiscellaneousSymbols xmlUCSIsMiscellaneousSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMiscellaneousSymbolsandArrows
-extern __typeof (xmlUCSIsMiscellaneousSymbolsandArrows) xmlUCSIsMiscellaneousSymbolsandArrows __attribute((alias("xmlUCSIsMiscellaneousSymbolsandArrows__internal_alias")));
-#else
-#ifndef xmlUCSIsMiscellaneousSymbolsandArrows
-extern __typeof (xmlUCSIsMiscellaneousSymbolsandArrows) xmlUCSIsMiscellaneousSymbolsandArrows__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMiscellaneousSymbolsandArrows xmlUCSIsMiscellaneousSymbolsandArrows__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMiscellaneousTechnical
-extern __typeof (xmlUCSIsMiscellaneousTechnical) xmlUCSIsMiscellaneousTechnical __attribute((alias("xmlUCSIsMiscellaneousTechnical__internal_alias")));
-#else
-#ifndef xmlUCSIsMiscellaneousTechnical
-extern __typeof (xmlUCSIsMiscellaneousTechnical) xmlUCSIsMiscellaneousTechnical__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMiscellaneousTechnical xmlUCSIsMiscellaneousTechnical__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMongolian
-extern __typeof (xmlUCSIsMongolian) xmlUCSIsMongolian __attribute((alias("xmlUCSIsMongolian__internal_alias")));
-#else
-#ifndef xmlUCSIsMongolian
-extern __typeof (xmlUCSIsMongolian) xmlUCSIsMongolian__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMongolian xmlUCSIsMongolian__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMusicalSymbols
-extern __typeof (xmlUCSIsMusicalSymbols) xmlUCSIsMusicalSymbols __attribute((alias("xmlUCSIsMusicalSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsMusicalSymbols
-extern __typeof (xmlUCSIsMusicalSymbols) xmlUCSIsMusicalSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMusicalSymbols xmlUCSIsMusicalSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsMyanmar
-extern __typeof (xmlUCSIsMyanmar) xmlUCSIsMyanmar __attribute((alias("xmlUCSIsMyanmar__internal_alias")));
-#else
-#ifndef xmlUCSIsMyanmar
-extern __typeof (xmlUCSIsMyanmar) xmlUCSIsMyanmar__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsMyanmar xmlUCSIsMyanmar__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsNumberForms
-extern __typeof (xmlUCSIsNumberForms) xmlUCSIsNumberForms __attribute((alias("xmlUCSIsNumberForms__internal_alias")));
-#else
-#ifndef xmlUCSIsNumberForms
-extern __typeof (xmlUCSIsNumberForms) xmlUCSIsNumberForms__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsNumberForms xmlUCSIsNumberForms__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsOgham
-extern __typeof (xmlUCSIsOgham) xmlUCSIsOgham __attribute((alias("xmlUCSIsOgham__internal_alias")));
-#else
-#ifndef xmlUCSIsOgham
-extern __typeof (xmlUCSIsOgham) xmlUCSIsOgham__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsOgham xmlUCSIsOgham__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsOldItalic
-extern __typeof (xmlUCSIsOldItalic) xmlUCSIsOldItalic __attribute((alias("xmlUCSIsOldItalic__internal_alias")));
-#else
-#ifndef xmlUCSIsOldItalic
-extern __typeof (xmlUCSIsOldItalic) xmlUCSIsOldItalic__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsOldItalic xmlUCSIsOldItalic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsOpticalCharacterRecognition
-extern __typeof (xmlUCSIsOpticalCharacterRecognition) xmlUCSIsOpticalCharacterRecognition __attribute((alias("xmlUCSIsOpticalCharacterRecognition__internal_alias")));
-#else
-#ifndef xmlUCSIsOpticalCharacterRecognition
-extern __typeof (xmlUCSIsOpticalCharacterRecognition) xmlUCSIsOpticalCharacterRecognition__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsOpticalCharacterRecognition xmlUCSIsOpticalCharacterRecognition__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsOriya
-extern __typeof (xmlUCSIsOriya) xmlUCSIsOriya __attribute((alias("xmlUCSIsOriya__internal_alias")));
-#else
-#ifndef xmlUCSIsOriya
-extern __typeof (xmlUCSIsOriya) xmlUCSIsOriya__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsOriya xmlUCSIsOriya__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsOsmanya
-extern __typeof (xmlUCSIsOsmanya) xmlUCSIsOsmanya __attribute((alias("xmlUCSIsOsmanya__internal_alias")));
-#else
-#ifndef xmlUCSIsOsmanya
-extern __typeof (xmlUCSIsOsmanya) xmlUCSIsOsmanya__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsOsmanya xmlUCSIsOsmanya__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsPhoneticExtensions
-extern __typeof (xmlUCSIsPhoneticExtensions) xmlUCSIsPhoneticExtensions __attribute((alias("xmlUCSIsPhoneticExtensions__internal_alias")));
-#else
-#ifndef xmlUCSIsPhoneticExtensions
-extern __typeof (xmlUCSIsPhoneticExtensions) xmlUCSIsPhoneticExtensions__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsPhoneticExtensions xmlUCSIsPhoneticExtensions__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsPrivateUse
-extern __typeof (xmlUCSIsPrivateUse) xmlUCSIsPrivateUse __attribute((alias("xmlUCSIsPrivateUse__internal_alias")));
-#else
-#ifndef xmlUCSIsPrivateUse
-extern __typeof (xmlUCSIsPrivateUse) xmlUCSIsPrivateUse__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsPrivateUse xmlUCSIsPrivateUse__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsPrivateUseArea
-extern __typeof (xmlUCSIsPrivateUseArea) xmlUCSIsPrivateUseArea __attribute((alias("xmlUCSIsPrivateUseArea__internal_alias")));
-#else
-#ifndef xmlUCSIsPrivateUseArea
-extern __typeof (xmlUCSIsPrivateUseArea) xmlUCSIsPrivateUseArea__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsPrivateUseArea xmlUCSIsPrivateUseArea__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsRunic
-extern __typeof (xmlUCSIsRunic) xmlUCSIsRunic __attribute((alias("xmlUCSIsRunic__internal_alias")));
-#else
-#ifndef xmlUCSIsRunic
-extern __typeof (xmlUCSIsRunic) xmlUCSIsRunic__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsRunic xmlUCSIsRunic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsShavian
-extern __typeof (xmlUCSIsShavian) xmlUCSIsShavian __attribute((alias("xmlUCSIsShavian__internal_alias")));
-#else
-#ifndef xmlUCSIsShavian
-extern __typeof (xmlUCSIsShavian) xmlUCSIsShavian__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsShavian xmlUCSIsShavian__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSinhala
-extern __typeof (xmlUCSIsSinhala) xmlUCSIsSinhala __attribute((alias("xmlUCSIsSinhala__internal_alias")));
-#else
-#ifndef xmlUCSIsSinhala
-extern __typeof (xmlUCSIsSinhala) xmlUCSIsSinhala__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSinhala xmlUCSIsSinhala__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSmallFormVariants
-extern __typeof (xmlUCSIsSmallFormVariants) xmlUCSIsSmallFormVariants __attribute((alias("xmlUCSIsSmallFormVariants__internal_alias")));
-#else
-#ifndef xmlUCSIsSmallFormVariants
-extern __typeof (xmlUCSIsSmallFormVariants) xmlUCSIsSmallFormVariants__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSmallFormVariants xmlUCSIsSmallFormVariants__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSpacingModifierLetters
-extern __typeof (xmlUCSIsSpacingModifierLetters) xmlUCSIsSpacingModifierLetters __attribute((alias("xmlUCSIsSpacingModifierLetters__internal_alias")));
-#else
-#ifndef xmlUCSIsSpacingModifierLetters
-extern __typeof (xmlUCSIsSpacingModifierLetters) xmlUCSIsSpacingModifierLetters__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSpacingModifierLetters xmlUCSIsSpacingModifierLetters__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSpecials
-extern __typeof (xmlUCSIsSpecials) xmlUCSIsSpecials __attribute((alias("xmlUCSIsSpecials__internal_alias")));
-#else
-#ifndef xmlUCSIsSpecials
-extern __typeof (xmlUCSIsSpecials) xmlUCSIsSpecials__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSpecials xmlUCSIsSpecials__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSuperscriptsandSubscripts
-extern __typeof (xmlUCSIsSuperscriptsandSubscripts) xmlUCSIsSuperscriptsandSubscripts __attribute((alias("xmlUCSIsSuperscriptsandSubscripts__internal_alias")));
-#else
-#ifndef xmlUCSIsSuperscriptsandSubscripts
-extern __typeof (xmlUCSIsSuperscriptsandSubscripts) xmlUCSIsSuperscriptsandSubscripts__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSuperscriptsandSubscripts xmlUCSIsSuperscriptsandSubscripts__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSupplementalArrowsA
-extern __typeof (xmlUCSIsSupplementalArrowsA) xmlUCSIsSupplementalArrowsA __attribute((alias("xmlUCSIsSupplementalArrowsA__internal_alias")));
-#else
-#ifndef xmlUCSIsSupplementalArrowsA
-extern __typeof (xmlUCSIsSupplementalArrowsA) xmlUCSIsSupplementalArrowsA__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSupplementalArrowsA xmlUCSIsSupplementalArrowsA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSupplementalArrowsB
-extern __typeof (xmlUCSIsSupplementalArrowsB) xmlUCSIsSupplementalArrowsB __attribute((alias("xmlUCSIsSupplementalArrowsB__internal_alias")));
-#else
-#ifndef xmlUCSIsSupplementalArrowsB
-extern __typeof (xmlUCSIsSupplementalArrowsB) xmlUCSIsSupplementalArrowsB__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSupplementalArrowsB xmlUCSIsSupplementalArrowsB__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSupplementalMathematicalOperators
-extern __typeof (xmlUCSIsSupplementalMathematicalOperators) xmlUCSIsSupplementalMathematicalOperators __attribute((alias("xmlUCSIsSupplementalMathematicalOperators__internal_alias")));
-#else
-#ifndef xmlUCSIsSupplementalMathematicalOperators
-extern __typeof (xmlUCSIsSupplementalMathematicalOperators) xmlUCSIsSupplementalMathematicalOperators__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSupplementalMathematicalOperators xmlUCSIsSupplementalMathematicalOperators__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSupplementaryPrivateUseAreaA
-extern __typeof (xmlUCSIsSupplementaryPrivateUseAreaA) xmlUCSIsSupplementaryPrivateUseAreaA __attribute((alias("xmlUCSIsSupplementaryPrivateUseAreaA__internal_alias")));
-#else
-#ifndef xmlUCSIsSupplementaryPrivateUseAreaA
-extern __typeof (xmlUCSIsSupplementaryPrivateUseAreaA) xmlUCSIsSupplementaryPrivateUseAreaA__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSupplementaryPrivateUseAreaA xmlUCSIsSupplementaryPrivateUseAreaA__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSupplementaryPrivateUseAreaB
-extern __typeof (xmlUCSIsSupplementaryPrivateUseAreaB) xmlUCSIsSupplementaryPrivateUseAreaB __attribute((alias("xmlUCSIsSupplementaryPrivateUseAreaB__internal_alias")));
-#else
-#ifndef xmlUCSIsSupplementaryPrivateUseAreaB
-extern __typeof (xmlUCSIsSupplementaryPrivateUseAreaB) xmlUCSIsSupplementaryPrivateUseAreaB__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSupplementaryPrivateUseAreaB xmlUCSIsSupplementaryPrivateUseAreaB__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsSyriac
-extern __typeof (xmlUCSIsSyriac) xmlUCSIsSyriac __attribute((alias("xmlUCSIsSyriac__internal_alias")));
-#else
-#ifndef xmlUCSIsSyriac
-extern __typeof (xmlUCSIsSyriac) xmlUCSIsSyriac__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsSyriac xmlUCSIsSyriac__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsTagalog
-extern __typeof (xmlUCSIsTagalog) xmlUCSIsTagalog __attribute((alias("xmlUCSIsTagalog__internal_alias")));
-#else
-#ifndef xmlUCSIsTagalog
-extern __typeof (xmlUCSIsTagalog) xmlUCSIsTagalog__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsTagalog xmlUCSIsTagalog__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsTagbanwa
-extern __typeof (xmlUCSIsTagbanwa) xmlUCSIsTagbanwa __attribute((alias("xmlUCSIsTagbanwa__internal_alias")));
-#else
-#ifndef xmlUCSIsTagbanwa
-extern __typeof (xmlUCSIsTagbanwa) xmlUCSIsTagbanwa__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsTagbanwa xmlUCSIsTagbanwa__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsTags
-extern __typeof (xmlUCSIsTags) xmlUCSIsTags __attribute((alias("xmlUCSIsTags__internal_alias")));
-#else
-#ifndef xmlUCSIsTags
-extern __typeof (xmlUCSIsTags) xmlUCSIsTags__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsTags xmlUCSIsTags__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsTaiLe
-extern __typeof (xmlUCSIsTaiLe) xmlUCSIsTaiLe __attribute((alias("xmlUCSIsTaiLe__internal_alias")));
-#else
-#ifndef xmlUCSIsTaiLe
-extern __typeof (xmlUCSIsTaiLe) xmlUCSIsTaiLe__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsTaiLe xmlUCSIsTaiLe__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsTaiXuanJingSymbols
-extern __typeof (xmlUCSIsTaiXuanJingSymbols) xmlUCSIsTaiXuanJingSymbols __attribute((alias("xmlUCSIsTaiXuanJingSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsTaiXuanJingSymbols
-extern __typeof (xmlUCSIsTaiXuanJingSymbols) xmlUCSIsTaiXuanJingSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsTaiXuanJingSymbols xmlUCSIsTaiXuanJingSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsTamil
-extern __typeof (xmlUCSIsTamil) xmlUCSIsTamil __attribute((alias("xmlUCSIsTamil__internal_alias")));
-#else
-#ifndef xmlUCSIsTamil
-extern __typeof (xmlUCSIsTamil) xmlUCSIsTamil__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsTamil xmlUCSIsTamil__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsTelugu
-extern __typeof (xmlUCSIsTelugu) xmlUCSIsTelugu __attribute((alias("xmlUCSIsTelugu__internal_alias")));
-#else
-#ifndef xmlUCSIsTelugu
-extern __typeof (xmlUCSIsTelugu) xmlUCSIsTelugu__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsTelugu xmlUCSIsTelugu__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsThaana
-extern __typeof (xmlUCSIsThaana) xmlUCSIsThaana __attribute((alias("xmlUCSIsThaana__internal_alias")));
-#else
-#ifndef xmlUCSIsThaana
-extern __typeof (xmlUCSIsThaana) xmlUCSIsThaana__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsThaana xmlUCSIsThaana__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsThai
-extern __typeof (xmlUCSIsThai) xmlUCSIsThai __attribute((alias("xmlUCSIsThai__internal_alias")));
-#else
-#ifndef xmlUCSIsThai
-extern __typeof (xmlUCSIsThai) xmlUCSIsThai__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsThai xmlUCSIsThai__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsTibetan
-extern __typeof (xmlUCSIsTibetan) xmlUCSIsTibetan __attribute((alias("xmlUCSIsTibetan__internal_alias")));
-#else
-#ifndef xmlUCSIsTibetan
-extern __typeof (xmlUCSIsTibetan) xmlUCSIsTibetan__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsTibetan xmlUCSIsTibetan__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsUgaritic
-extern __typeof (xmlUCSIsUgaritic) xmlUCSIsUgaritic __attribute((alias("xmlUCSIsUgaritic__internal_alias")));
-#else
-#ifndef xmlUCSIsUgaritic
-extern __typeof (xmlUCSIsUgaritic) xmlUCSIsUgaritic__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsUgaritic xmlUCSIsUgaritic__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsUnifiedCanadianAboriginalSyllabics
-extern __typeof (xmlUCSIsUnifiedCanadianAboriginalSyllabics) xmlUCSIsUnifiedCanadianAboriginalSyllabics __attribute((alias("xmlUCSIsUnifiedCanadianAboriginalSyllabics__internal_alias")));
-#else
-#ifndef xmlUCSIsUnifiedCanadianAboriginalSyllabics
-extern __typeof (xmlUCSIsUnifiedCanadianAboriginalSyllabics) xmlUCSIsUnifiedCanadianAboriginalSyllabics__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsUnifiedCanadianAboriginalSyllabics xmlUCSIsUnifiedCanadianAboriginalSyllabics__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsVariationSelectors
-extern __typeof (xmlUCSIsVariationSelectors) xmlUCSIsVariationSelectors __attribute((alias("xmlUCSIsVariationSelectors__internal_alias")));
-#else
-#ifndef xmlUCSIsVariationSelectors
-extern __typeof (xmlUCSIsVariationSelectors) xmlUCSIsVariationSelectors__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsVariationSelectors xmlUCSIsVariationSelectors__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsVariationSelectorsSupplement
-extern __typeof (xmlUCSIsVariationSelectorsSupplement) xmlUCSIsVariationSelectorsSupplement __attribute((alias("xmlUCSIsVariationSelectorsSupplement__internal_alias")));
-#else
-#ifndef xmlUCSIsVariationSelectorsSupplement
-extern __typeof (xmlUCSIsVariationSelectorsSupplement) xmlUCSIsVariationSelectorsSupplement__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsVariationSelectorsSupplement xmlUCSIsVariationSelectorsSupplement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsYiRadicals
-extern __typeof (xmlUCSIsYiRadicals) xmlUCSIsYiRadicals __attribute((alias("xmlUCSIsYiRadicals__internal_alias")));
-#else
-#ifndef xmlUCSIsYiRadicals
-extern __typeof (xmlUCSIsYiRadicals) xmlUCSIsYiRadicals__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsYiRadicals xmlUCSIsYiRadicals__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsYiSyllables
-extern __typeof (xmlUCSIsYiSyllables) xmlUCSIsYiSyllables __attribute((alias("xmlUCSIsYiSyllables__internal_alias")));
-#else
-#ifndef xmlUCSIsYiSyllables
-extern __typeof (xmlUCSIsYiSyllables) xmlUCSIsYiSyllables__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsYiSyllables xmlUCSIsYiSyllables__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_UNICODE_ENABLED)
-#ifdef bottom_xmlunicode
-#undef xmlUCSIsYijingHexagramSymbols
-extern __typeof (xmlUCSIsYijingHexagramSymbols) xmlUCSIsYijingHexagramSymbols __attribute((alias("xmlUCSIsYijingHexagramSymbols__internal_alias")));
-#else
-#ifndef xmlUCSIsYijingHexagramSymbols
-extern __typeof (xmlUCSIsYijingHexagramSymbols) xmlUCSIsYijingHexagramSymbols__internal_alias __attribute((visibility("hidden")));
-#define xmlUCSIsYijingHexagramSymbols xmlUCSIsYijingHexagramSymbols__internal_alias
-#endif
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlURIEscape
-extern __typeof (xmlURIEscape) xmlURIEscape __attribute((alias("xmlURIEscape__internal_alias")));
-#else
-#ifndef xmlURIEscape
-extern __typeof (xmlURIEscape) xmlURIEscape__internal_alias __attribute((visibility("hidden")));
-#define xmlURIEscape xmlURIEscape__internal_alias
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlURIEscapeStr
-extern __typeof (xmlURIEscapeStr) xmlURIEscapeStr __attribute((alias("xmlURIEscapeStr__internal_alias")));
-#else
-#ifndef xmlURIEscapeStr
-extern __typeof (xmlURIEscapeStr) xmlURIEscapeStr__internal_alias __attribute((visibility("hidden")));
-#define xmlURIEscapeStr xmlURIEscapeStr__internal_alias
-#endif
-#endif
-
-#ifdef bottom_uri
-#undef xmlURIUnescapeString
-extern __typeof (xmlURIUnescapeString) xmlURIUnescapeString __attribute((alias("xmlURIUnescapeString__internal_alias")));
-#else
-#ifndef xmlURIUnescapeString
-extern __typeof (xmlURIUnescapeString) xmlURIUnescapeString__internal_alias __attribute((visibility("hidden")));
-#define xmlURIUnescapeString xmlURIUnescapeString__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlUTF8Charcmp
-extern __typeof (xmlUTF8Charcmp) xmlUTF8Charcmp __attribute((alias("xmlUTF8Charcmp__internal_alias")));
-#else
-#ifndef xmlUTF8Charcmp
-extern __typeof (xmlUTF8Charcmp) xmlUTF8Charcmp__internal_alias __attribute((visibility("hidden")));
-#define xmlUTF8Charcmp xmlUTF8Charcmp__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlUTF8Size
-extern __typeof (xmlUTF8Size) xmlUTF8Size __attribute((alias("xmlUTF8Size__internal_alias")));
-#else
-#ifndef xmlUTF8Size
-extern __typeof (xmlUTF8Size) xmlUTF8Size__internal_alias __attribute((visibility("hidden")));
-#define xmlUTF8Size xmlUTF8Size__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlUTF8Strlen
-extern __typeof (xmlUTF8Strlen) xmlUTF8Strlen __attribute((alias("xmlUTF8Strlen__internal_alias")));
-#else
-#ifndef xmlUTF8Strlen
-extern __typeof (xmlUTF8Strlen) xmlUTF8Strlen__internal_alias __attribute((visibility("hidden")));
-#define xmlUTF8Strlen xmlUTF8Strlen__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlUTF8Strloc
-extern __typeof (xmlUTF8Strloc) xmlUTF8Strloc __attribute((alias("xmlUTF8Strloc__internal_alias")));
-#else
-#ifndef xmlUTF8Strloc
-extern __typeof (xmlUTF8Strloc) xmlUTF8Strloc__internal_alias __attribute((visibility("hidden")));
-#define xmlUTF8Strloc xmlUTF8Strloc__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlUTF8Strndup
-extern __typeof (xmlUTF8Strndup) xmlUTF8Strndup __attribute((alias("xmlUTF8Strndup__internal_alias")));
-#else
-#ifndef xmlUTF8Strndup
-extern __typeof (xmlUTF8Strndup) xmlUTF8Strndup__internal_alias __attribute((visibility("hidden")));
-#define xmlUTF8Strndup xmlUTF8Strndup__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlUTF8Strpos
-extern __typeof (xmlUTF8Strpos) xmlUTF8Strpos __attribute((alias("xmlUTF8Strpos__internal_alias")));
-#else
-#ifndef xmlUTF8Strpos
-extern __typeof (xmlUTF8Strpos) xmlUTF8Strpos__internal_alias __attribute((visibility("hidden")));
-#define xmlUTF8Strpos xmlUTF8Strpos__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlUTF8Strsize
-extern __typeof (xmlUTF8Strsize) xmlUTF8Strsize __attribute((alias("xmlUTF8Strsize__internal_alias")));
-#else
-#ifndef xmlUTF8Strsize
-extern __typeof (xmlUTF8Strsize) xmlUTF8Strsize__internal_alias __attribute((visibility("hidden")));
-#define xmlUTF8Strsize xmlUTF8Strsize__internal_alias
-#endif
-#endif
-
-#ifdef bottom_xmlstring
-#undef xmlUTF8Strsub
-extern __typeof (xmlUTF8Strsub) xmlUTF8Strsub __attribute((alias("xmlUTF8Strsub__internal_alias")));
-#else
-#ifndef xmlUTF8Strsub
-extern __typeof (xmlUTF8Strsub) xmlUTF8Strsub__internal_alias __attribute((visibility("hidden")));
-#define xmlUTF8Strsub xmlUTF8Strsub__internal_alias
-#endif
-#endif
-
-#ifdef bottom_tree
-#undef xmlUnlinkNode
-extern __typeof (xmlUnlinkNode) xmlUnlinkNode __attribute((alias("xmlUnlinkNode__internal_alias")));
-#else
-#ifndef xmlUnlinkNode
-extern __typeof (xmlUnlinkNode) xmlUnlinkNode__internal_alias __attribute((visibility("hidden")));
-#define xmlUnlinkNode xmlUnlinkNode__internal_alias
-#endif
-#endif
-
-#ifdef bottom_threads
-#undef xmlUnlockLibrary
-extern __typeof (xmlUnlockLibrary) xmlUnlockLibrary __attribute((alias("xmlUnlockLibrary__internal_alias")));
-#else
-#ifndef xmlUnlockLibrary
-extern __typeof (xmlUnlockLibrary) xmlUnlockLibrary__internal_alias __attribute((visibility("hidden")));
-#define xmlUnlockLibrary xmlUnlockLibrary__internal_alias
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlUnsetNsProp
-extern __typeof (xmlUnsetNsProp) xmlUnsetNsProp __attribute((alias("xmlUnsetNsProp__internal_alias")));
-#else
-#ifndef xmlUnsetNsProp
-extern __typeof (xmlUnsetNsProp) xmlUnsetNsProp__internal_alias __attribute((visibility("hidden")));
-#define xmlUnsetNsProp xmlUnsetNsProp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlUnsetProp
-extern __typeof (xmlUnsetProp) xmlUnsetProp __attribute((alias("xmlUnsetProp__internal_alias")));
-#else
-#ifndef xmlUnsetProp
-extern __typeof (xmlUnsetProp) xmlUnsetProp__internal_alias __attribute((visibility("hidden")));
-#define xmlUnsetProp xmlUnsetProp__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidBuildContentModel
-extern __typeof (xmlValidBuildContentModel) xmlValidBuildContentModel __attribute((alias("xmlValidBuildContentModel__internal_alias")));
-#else
-#ifndef xmlValidBuildContentModel
-extern __typeof (xmlValidBuildContentModel) xmlValidBuildContentModel__internal_alias __attribute((visibility("hidden")));
-#define xmlValidBuildContentModel xmlValidBuildContentModel__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidCtxtNormalizeAttributeValue
-extern __typeof (xmlValidCtxtNormalizeAttributeValue) xmlValidCtxtNormalizeAttributeValue __attribute((alias("xmlValidCtxtNormalizeAttributeValue__internal_alias")));
-#else
-#ifndef xmlValidCtxtNormalizeAttributeValue
-extern __typeof (xmlValidCtxtNormalizeAttributeValue) xmlValidCtxtNormalizeAttributeValue__internal_alias __attribute((visibility("hidden")));
-#define xmlValidCtxtNormalizeAttributeValue xmlValidCtxtNormalizeAttributeValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidGetPotentialChildren
-extern __typeof (xmlValidGetPotentialChildren) xmlValidGetPotentialChildren __attribute((alias("xmlValidGetPotentialChildren__internal_alias")));
-#else
-#ifndef xmlValidGetPotentialChildren
-extern __typeof (xmlValidGetPotentialChildren) xmlValidGetPotentialChildren__internal_alias __attribute((visibility("hidden")));
-#define xmlValidGetPotentialChildren xmlValidGetPotentialChildren__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidGetValidElements
-extern __typeof (xmlValidGetValidElements) xmlValidGetValidElements __attribute((alias("xmlValidGetValidElements__internal_alias")));
-#else
-#ifndef xmlValidGetValidElements
-extern __typeof (xmlValidGetValidElements) xmlValidGetValidElements__internal_alias __attribute((visibility("hidden")));
-#define xmlValidGetValidElements xmlValidGetValidElements__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidNormalizeAttributeValue
-extern __typeof (xmlValidNormalizeAttributeValue) xmlValidNormalizeAttributeValue __attribute((alias("xmlValidNormalizeAttributeValue__internal_alias")));
-#else
-#ifndef xmlValidNormalizeAttributeValue
-extern __typeof (xmlValidNormalizeAttributeValue) xmlValidNormalizeAttributeValue__internal_alias __attribute((visibility("hidden")));
-#define xmlValidNormalizeAttributeValue xmlValidNormalizeAttributeValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateAttributeDecl
-extern __typeof (xmlValidateAttributeDecl) xmlValidateAttributeDecl __attribute((alias("xmlValidateAttributeDecl__internal_alias")));
-#else
-#ifndef xmlValidateAttributeDecl
-extern __typeof (xmlValidateAttributeDecl) xmlValidateAttributeDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateAttributeDecl xmlValidateAttributeDecl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateAttributeValue
-extern __typeof (xmlValidateAttributeValue) xmlValidateAttributeValue __attribute((alias("xmlValidateAttributeValue__internal_alias")));
-#else
-#ifndef xmlValidateAttributeValue
-extern __typeof (xmlValidateAttributeValue) xmlValidateAttributeValue__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateAttributeValue xmlValidateAttributeValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateDocument
-extern __typeof (xmlValidateDocument) xmlValidateDocument __attribute((alias("xmlValidateDocument__internal_alias")));
-#else
-#ifndef xmlValidateDocument
-extern __typeof (xmlValidateDocument) xmlValidateDocument__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateDocument xmlValidateDocument__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateDocumentFinal
-extern __typeof (xmlValidateDocumentFinal) xmlValidateDocumentFinal __attribute((alias("xmlValidateDocumentFinal__internal_alias")));
-#else
-#ifndef xmlValidateDocumentFinal
-extern __typeof (xmlValidateDocumentFinal) xmlValidateDocumentFinal__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateDocumentFinal xmlValidateDocumentFinal__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateDtd
-extern __typeof (xmlValidateDtd) xmlValidateDtd __attribute((alias("xmlValidateDtd__internal_alias")));
-#else
-#ifndef xmlValidateDtd
-extern __typeof (xmlValidateDtd) xmlValidateDtd__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateDtd xmlValidateDtd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateDtdFinal
-extern __typeof (xmlValidateDtdFinal) xmlValidateDtdFinal __attribute((alias("xmlValidateDtdFinal__internal_alias")));
-#else
-#ifndef xmlValidateDtdFinal
-extern __typeof (xmlValidateDtdFinal) xmlValidateDtdFinal__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateDtdFinal xmlValidateDtdFinal__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateElement
-extern __typeof (xmlValidateElement) xmlValidateElement __attribute((alias("xmlValidateElement__internal_alias")));
-#else
-#ifndef xmlValidateElement
-extern __typeof (xmlValidateElement) xmlValidateElement__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateElement xmlValidateElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateElementDecl
-extern __typeof (xmlValidateElementDecl) xmlValidateElementDecl __attribute((alias("xmlValidateElementDecl__internal_alias")));
-#else
-#ifndef xmlValidateElementDecl
-extern __typeof (xmlValidateElementDecl) xmlValidateElementDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateElementDecl xmlValidateElementDecl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-#ifdef bottom_tree
-#undef xmlValidateNCName
-extern __typeof (xmlValidateNCName) xmlValidateNCName __attribute((alias("xmlValidateNCName__internal_alias")));
-#else
-#ifndef xmlValidateNCName
-extern __typeof (xmlValidateNCName) xmlValidateNCName__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateNCName xmlValidateNCName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlValidateNMToken
-extern __typeof (xmlValidateNMToken) xmlValidateNMToken __attribute((alias("xmlValidateNMToken__internal_alias")));
-#else
-#ifndef xmlValidateNMToken
-extern __typeof (xmlValidateNMToken) xmlValidateNMToken__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateNMToken xmlValidateNMToken__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlValidateName
-extern __typeof (xmlValidateName) xmlValidateName __attribute((alias("xmlValidateName__internal_alias")));
-#else
-#ifndef xmlValidateName
-extern __typeof (xmlValidateName) xmlValidateName__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateName xmlValidateName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateNameValue
-extern __typeof (xmlValidateNameValue) xmlValidateNameValue __attribute((alias("xmlValidateNameValue__internal_alias")));
-#else
-#ifndef xmlValidateNameValue
-extern __typeof (xmlValidateNameValue) xmlValidateNameValue__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateNameValue xmlValidateNameValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateNamesValue
-extern __typeof (xmlValidateNamesValue) xmlValidateNamesValue __attribute((alias("xmlValidateNamesValue__internal_alias")));
-#else
-#ifndef xmlValidateNamesValue
-extern __typeof (xmlValidateNamesValue) xmlValidateNamesValue__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateNamesValue xmlValidateNamesValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateNmtokenValue
-extern __typeof (xmlValidateNmtokenValue) xmlValidateNmtokenValue __attribute((alias("xmlValidateNmtokenValue__internal_alias")));
-#else
-#ifndef xmlValidateNmtokenValue
-extern __typeof (xmlValidateNmtokenValue) xmlValidateNmtokenValue__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateNmtokenValue xmlValidateNmtokenValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateNmtokensValue
-extern __typeof (xmlValidateNmtokensValue) xmlValidateNmtokensValue __attribute((alias("xmlValidateNmtokensValue__internal_alias")));
-#else
-#ifndef xmlValidateNmtokensValue
-extern __typeof (xmlValidateNmtokensValue) xmlValidateNmtokensValue__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateNmtokensValue xmlValidateNmtokensValue__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateNotationDecl
-extern __typeof (xmlValidateNotationDecl) xmlValidateNotationDecl __attribute((alias("xmlValidateNotationDecl__internal_alias")));
-#else
-#ifndef xmlValidateNotationDecl
-extern __typeof (xmlValidateNotationDecl) xmlValidateNotationDecl__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateNotationDecl xmlValidateNotationDecl__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateNotationUse
-extern __typeof (xmlValidateNotationUse) xmlValidateNotationUse __attribute((alias("xmlValidateNotationUse__internal_alias")));
-#else
-#ifndef xmlValidateNotationUse
-extern __typeof (xmlValidateNotationUse) xmlValidateNotationUse__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateNotationUse xmlValidateNotationUse__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateOneAttribute
-extern __typeof (xmlValidateOneAttribute) xmlValidateOneAttribute __attribute((alias("xmlValidateOneAttribute__internal_alias")));
-#else
-#ifndef xmlValidateOneAttribute
-extern __typeof (xmlValidateOneAttribute) xmlValidateOneAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateOneAttribute xmlValidateOneAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateOneElement
-extern __typeof (xmlValidateOneElement) xmlValidateOneElement __attribute((alias("xmlValidateOneElement__internal_alias")));
-#else
-#ifndef xmlValidateOneElement
-extern __typeof (xmlValidateOneElement) xmlValidateOneElement__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateOneElement xmlValidateOneElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateOneNamespace
-extern __typeof (xmlValidateOneNamespace) xmlValidateOneNamespace __attribute((alias("xmlValidateOneNamespace__internal_alias")));
-#else
-#ifndef xmlValidateOneNamespace
-extern __typeof (xmlValidateOneNamespace) xmlValidateOneNamespace__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateOneNamespace xmlValidateOneNamespace__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidatePopElement
-extern __typeof (xmlValidatePopElement) xmlValidatePopElement __attribute((alias("xmlValidatePopElement__internal_alias")));
-#else
-#ifndef xmlValidatePopElement
-extern __typeof (xmlValidatePopElement) xmlValidatePopElement__internal_alias __attribute((visibility("hidden")));
-#define xmlValidatePopElement xmlValidatePopElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidatePushCData
-extern __typeof (xmlValidatePushCData) xmlValidatePushCData __attribute((alias("xmlValidatePushCData__internal_alias")));
-#else
-#ifndef xmlValidatePushCData
-extern __typeof (xmlValidatePushCData) xmlValidatePushCData__internal_alias __attribute((visibility("hidden")));
-#define xmlValidatePushCData xmlValidatePushCData__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidatePushElement
-extern __typeof (xmlValidatePushElement) xmlValidatePushElement __attribute((alias("xmlValidatePushElement__internal_alias")));
-#else
-#ifndef xmlValidatePushElement
-extern __typeof (xmlValidatePushElement) xmlValidatePushElement__internal_alias __attribute((visibility("hidden")));
-#define xmlValidatePushElement xmlValidatePushElement__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_tree
-#undef xmlValidateQName
-extern __typeof (xmlValidateQName) xmlValidateQName __attribute((alias("xmlValidateQName__internal_alias")));
-#else
-#ifndef xmlValidateQName
-extern __typeof (xmlValidateQName) xmlValidateQName__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateQName xmlValidateQName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef bottom_valid
-#undef xmlValidateRoot
-extern __typeof (xmlValidateRoot) xmlValidateRoot __attribute((alias("xmlValidateRoot__internal_alias")));
-#else
-#ifndef xmlValidateRoot
-extern __typeof (xmlValidateRoot) xmlValidateRoot__internal_alias __attribute((visibility("hidden")));
-#define xmlValidateRoot xmlValidateRoot__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeFreeContext
-extern __typeof (xmlXIncludeFreeContext) xmlXIncludeFreeContext __attribute((alias("xmlXIncludeFreeContext__internal_alias")));
-#else
-#ifndef xmlXIncludeFreeContext
-extern __typeof (xmlXIncludeFreeContext) xmlXIncludeFreeContext__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeFreeContext xmlXIncludeFreeContext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeNewContext
-extern __typeof (xmlXIncludeNewContext) xmlXIncludeNewContext __attribute((alias("xmlXIncludeNewContext__internal_alias")));
-#else
-#ifndef xmlXIncludeNewContext
-extern __typeof (xmlXIncludeNewContext) xmlXIncludeNewContext__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeNewContext xmlXIncludeNewContext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeProcess
-extern __typeof (xmlXIncludeProcess) xmlXIncludeProcess __attribute((alias("xmlXIncludeProcess__internal_alias")));
-#else
-#ifndef xmlXIncludeProcess
-extern __typeof (xmlXIncludeProcess) xmlXIncludeProcess__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeProcess xmlXIncludeProcess__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeProcessFlags
-extern __typeof (xmlXIncludeProcessFlags) xmlXIncludeProcessFlags __attribute((alias("xmlXIncludeProcessFlags__internal_alias")));
-#else
-#ifndef xmlXIncludeProcessFlags
-extern __typeof (xmlXIncludeProcessFlags) xmlXIncludeProcessFlags__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeProcessFlags xmlXIncludeProcessFlags__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeProcessFlagsData
-extern __typeof (xmlXIncludeProcessFlagsData) xmlXIncludeProcessFlagsData __attribute((alias("xmlXIncludeProcessFlagsData__internal_alias")));
-#else
-#ifndef xmlXIncludeProcessFlagsData
-extern __typeof (xmlXIncludeProcessFlagsData) xmlXIncludeProcessFlagsData__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeProcessFlagsData xmlXIncludeProcessFlagsData__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeProcessNode
-extern __typeof (xmlXIncludeProcessNode) xmlXIncludeProcessNode __attribute((alias("xmlXIncludeProcessNode__internal_alias")));
-#else
-#ifndef xmlXIncludeProcessNode
-extern __typeof (xmlXIncludeProcessNode) xmlXIncludeProcessNode__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeProcessNode xmlXIncludeProcessNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeProcessTree
-extern __typeof (xmlXIncludeProcessTree) xmlXIncludeProcessTree __attribute((alias("xmlXIncludeProcessTree__internal_alias")));
-#else
-#ifndef xmlXIncludeProcessTree
-extern __typeof (xmlXIncludeProcessTree) xmlXIncludeProcessTree__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeProcessTree xmlXIncludeProcessTree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeProcessTreeFlags
-extern __typeof (xmlXIncludeProcessTreeFlags) xmlXIncludeProcessTreeFlags __attribute((alias("xmlXIncludeProcessTreeFlags__internal_alias")));
-#else
-#ifndef xmlXIncludeProcessTreeFlags
-extern __typeof (xmlXIncludeProcessTreeFlags) xmlXIncludeProcessTreeFlags__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeProcessTreeFlags xmlXIncludeProcessTreeFlags__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeProcessTreeFlagsData
-extern __typeof (xmlXIncludeProcessTreeFlagsData) xmlXIncludeProcessTreeFlagsData __attribute((alias("xmlXIncludeProcessTreeFlagsData__internal_alias")));
-#else
-#ifndef xmlXIncludeProcessTreeFlagsData
-extern __typeof (xmlXIncludeProcessTreeFlagsData) xmlXIncludeProcessTreeFlagsData__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeProcessTreeFlagsData xmlXIncludeProcessTreeFlagsData__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
-#ifdef bottom_xinclude
-#undef xmlXIncludeSetFlags
-extern __typeof (xmlXIncludeSetFlags) xmlXIncludeSetFlags __attribute((alias("xmlXIncludeSetFlags__internal_alias")));
-#else
-#ifndef xmlXIncludeSetFlags
-extern __typeof (xmlXIncludeSetFlags) xmlXIncludeSetFlags__internal_alias __attribute((visibility("hidden")));
-#define xmlXIncludeSetFlags xmlXIncludeSetFlags__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathAddValues
-extern __typeof (xmlXPathAddValues) xmlXPathAddValues __attribute((alias("xmlXPathAddValues__internal_alias")));
-#else
-#ifndef xmlXPathAddValues
-extern __typeof (xmlXPathAddValues) xmlXPathAddValues__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathAddValues xmlXPathAddValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathBooleanFunction
-extern __typeof (xmlXPathBooleanFunction) xmlXPathBooleanFunction __attribute((alias("xmlXPathBooleanFunction__internal_alias")));
-#else
-#ifndef xmlXPathBooleanFunction
-extern __typeof (xmlXPathBooleanFunction) xmlXPathBooleanFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathBooleanFunction xmlXPathBooleanFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastBooleanToNumber
-extern __typeof (xmlXPathCastBooleanToNumber) xmlXPathCastBooleanToNumber __attribute((alias("xmlXPathCastBooleanToNumber__internal_alias")));
-#else
-#ifndef xmlXPathCastBooleanToNumber
-extern __typeof (xmlXPathCastBooleanToNumber) xmlXPathCastBooleanToNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastBooleanToNumber xmlXPathCastBooleanToNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastBooleanToString
-extern __typeof (xmlXPathCastBooleanToString) xmlXPathCastBooleanToString __attribute((alias("xmlXPathCastBooleanToString__internal_alias")));
-#else
-#ifndef xmlXPathCastBooleanToString
-extern __typeof (xmlXPathCastBooleanToString) xmlXPathCastBooleanToString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastBooleanToString xmlXPathCastBooleanToString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastNodeSetToBoolean
-extern __typeof (xmlXPathCastNodeSetToBoolean) xmlXPathCastNodeSetToBoolean __attribute((alias("xmlXPathCastNodeSetToBoolean__internal_alias")));
-#else
-#ifndef xmlXPathCastNodeSetToBoolean
-extern __typeof (xmlXPathCastNodeSetToBoolean) xmlXPathCastNodeSetToBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastNodeSetToBoolean xmlXPathCastNodeSetToBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastNodeSetToNumber
-extern __typeof (xmlXPathCastNodeSetToNumber) xmlXPathCastNodeSetToNumber __attribute((alias("xmlXPathCastNodeSetToNumber__internal_alias")));
-#else
-#ifndef xmlXPathCastNodeSetToNumber
-extern __typeof (xmlXPathCastNodeSetToNumber) xmlXPathCastNodeSetToNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastNodeSetToNumber xmlXPathCastNodeSetToNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastNodeSetToString
-extern __typeof (xmlXPathCastNodeSetToString) xmlXPathCastNodeSetToString __attribute((alias("xmlXPathCastNodeSetToString__internal_alias")));
-#else
-#ifndef xmlXPathCastNodeSetToString
-extern __typeof (xmlXPathCastNodeSetToString) xmlXPathCastNodeSetToString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastNodeSetToString xmlXPathCastNodeSetToString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastNodeToNumber
-extern __typeof (xmlXPathCastNodeToNumber) xmlXPathCastNodeToNumber __attribute((alias("xmlXPathCastNodeToNumber__internal_alias")));
-#else
-#ifndef xmlXPathCastNodeToNumber
-extern __typeof (xmlXPathCastNodeToNumber) xmlXPathCastNodeToNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastNodeToNumber xmlXPathCastNodeToNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastNodeToString
-extern __typeof (xmlXPathCastNodeToString) xmlXPathCastNodeToString __attribute((alias("xmlXPathCastNodeToString__internal_alias")));
-#else
-#ifndef xmlXPathCastNodeToString
-extern __typeof (xmlXPathCastNodeToString) xmlXPathCastNodeToString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastNodeToString xmlXPathCastNodeToString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastNumberToBoolean
-extern __typeof (xmlXPathCastNumberToBoolean) xmlXPathCastNumberToBoolean __attribute((alias("xmlXPathCastNumberToBoolean__internal_alias")));
-#else
-#ifndef xmlXPathCastNumberToBoolean
-extern __typeof (xmlXPathCastNumberToBoolean) xmlXPathCastNumberToBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastNumberToBoolean xmlXPathCastNumberToBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastNumberToString
-extern __typeof (xmlXPathCastNumberToString) xmlXPathCastNumberToString __attribute((alias("xmlXPathCastNumberToString__internal_alias")));
-#else
-#ifndef xmlXPathCastNumberToString
-extern __typeof (xmlXPathCastNumberToString) xmlXPathCastNumberToString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastNumberToString xmlXPathCastNumberToString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastStringToBoolean
-extern __typeof (xmlXPathCastStringToBoolean) xmlXPathCastStringToBoolean __attribute((alias("xmlXPathCastStringToBoolean__internal_alias")));
-#else
-#ifndef xmlXPathCastStringToBoolean
-extern __typeof (xmlXPathCastStringToBoolean) xmlXPathCastStringToBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastStringToBoolean xmlXPathCastStringToBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastStringToNumber
-extern __typeof (xmlXPathCastStringToNumber) xmlXPathCastStringToNumber __attribute((alias("xmlXPathCastStringToNumber__internal_alias")));
-#else
-#ifndef xmlXPathCastStringToNumber
-extern __typeof (xmlXPathCastStringToNumber) xmlXPathCastStringToNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastStringToNumber xmlXPathCastStringToNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastToBoolean
-extern __typeof (xmlXPathCastToBoolean) xmlXPathCastToBoolean __attribute((alias("xmlXPathCastToBoolean__internal_alias")));
-#else
-#ifndef xmlXPathCastToBoolean
-extern __typeof (xmlXPathCastToBoolean) xmlXPathCastToBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastToBoolean xmlXPathCastToBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastToNumber
-extern __typeof (xmlXPathCastToNumber) xmlXPathCastToNumber __attribute((alias("xmlXPathCastToNumber__internal_alias")));
-#else
-#ifndef xmlXPathCastToNumber
-extern __typeof (xmlXPathCastToNumber) xmlXPathCastToNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastToNumber xmlXPathCastToNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCastToString
-extern __typeof (xmlXPathCastToString) xmlXPathCastToString __attribute((alias("xmlXPathCastToString__internal_alias")));
-#else
-#ifndef xmlXPathCastToString
-extern __typeof (xmlXPathCastToString) xmlXPathCastToString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCastToString xmlXPathCastToString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCeilingFunction
-extern __typeof (xmlXPathCeilingFunction) xmlXPathCeilingFunction __attribute((alias("xmlXPathCeilingFunction__internal_alias")));
-#else
-#ifndef xmlXPathCeilingFunction
-extern __typeof (xmlXPathCeilingFunction) xmlXPathCeilingFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCeilingFunction xmlXPathCeilingFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCmpNodes
-extern __typeof (xmlXPathCmpNodes) xmlXPathCmpNodes __attribute((alias("xmlXPathCmpNodes__internal_alias")));
-#else
-#ifndef xmlXPathCmpNodes
-extern __typeof (xmlXPathCmpNodes) xmlXPathCmpNodes__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCmpNodes xmlXPathCmpNodes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCompareValues
-extern __typeof (xmlXPathCompareValues) xmlXPathCompareValues __attribute((alias("xmlXPathCompareValues__internal_alias")));
-#else
-#ifndef xmlXPathCompareValues
-extern __typeof (xmlXPathCompareValues) xmlXPathCompareValues__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCompareValues xmlXPathCompareValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCompile
-extern __typeof (xmlXPathCompile) xmlXPathCompile __attribute((alias("xmlXPathCompile__internal_alias")));
-#else
-#ifndef xmlXPathCompile
-extern __typeof (xmlXPathCompile) xmlXPathCompile__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCompile xmlXPathCompile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCompiledEval
-extern __typeof (xmlXPathCompiledEval) xmlXPathCompiledEval __attribute((alias("xmlXPathCompiledEval__internal_alias")));
-#else
-#ifndef xmlXPathCompiledEval
-extern __typeof (xmlXPathCompiledEval) xmlXPathCompiledEval__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCompiledEval xmlXPathCompiledEval__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCompiledEvalToBoolean
-extern __typeof (xmlXPathCompiledEvalToBoolean) xmlXPathCompiledEvalToBoolean __attribute((alias("xmlXPathCompiledEvalToBoolean__internal_alias")));
-#else
-#ifndef xmlXPathCompiledEvalToBoolean
-extern __typeof (xmlXPathCompiledEvalToBoolean) xmlXPathCompiledEvalToBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCompiledEvalToBoolean xmlXPathCompiledEvalToBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathConcatFunction
-extern __typeof (xmlXPathConcatFunction) xmlXPathConcatFunction __attribute((alias("xmlXPathConcatFunction__internal_alias")));
-#else
-#ifndef xmlXPathConcatFunction
-extern __typeof (xmlXPathConcatFunction) xmlXPathConcatFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathConcatFunction xmlXPathConcatFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathContainsFunction
-extern __typeof (xmlXPathContainsFunction) xmlXPathContainsFunction __attribute((alias("xmlXPathContainsFunction__internal_alias")));
-#else
-#ifndef xmlXPathContainsFunction
-extern __typeof (xmlXPathContainsFunction) xmlXPathContainsFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathContainsFunction xmlXPathContainsFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathContextSetCache
-extern __typeof (xmlXPathContextSetCache) xmlXPathContextSetCache __attribute((alias("xmlXPathContextSetCache__internal_alias")));
-#else
-#ifndef xmlXPathContextSetCache
-extern __typeof (xmlXPathContextSetCache) xmlXPathContextSetCache__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathContextSetCache xmlXPathContextSetCache__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathConvertBoolean
-extern __typeof (xmlXPathConvertBoolean) xmlXPathConvertBoolean __attribute((alias("xmlXPathConvertBoolean__internal_alias")));
-#else
-#ifndef xmlXPathConvertBoolean
-extern __typeof (xmlXPathConvertBoolean) xmlXPathConvertBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathConvertBoolean xmlXPathConvertBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathConvertNumber
-extern __typeof (xmlXPathConvertNumber) xmlXPathConvertNumber __attribute((alias("xmlXPathConvertNumber__internal_alias")));
-#else
-#ifndef xmlXPathConvertNumber
-extern __typeof (xmlXPathConvertNumber) xmlXPathConvertNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathConvertNumber xmlXPathConvertNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathConvertString
-extern __typeof (xmlXPathConvertString) xmlXPathConvertString __attribute((alias("xmlXPathConvertString__internal_alias")));
-#else
-#ifndef xmlXPathConvertString
-extern __typeof (xmlXPathConvertString) xmlXPathConvertString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathConvertString xmlXPathConvertString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCountFunction
-extern __typeof (xmlXPathCountFunction) xmlXPathCountFunction __attribute((alias("xmlXPathCountFunction__internal_alias")));
-#else
-#ifndef xmlXPathCountFunction
-extern __typeof (xmlXPathCountFunction) xmlXPathCountFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCountFunction xmlXPathCountFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathCtxtCompile
-extern __typeof (xmlXPathCtxtCompile) xmlXPathCtxtCompile __attribute((alias("xmlXPathCtxtCompile__internal_alias")));
-#else
-#ifndef xmlXPathCtxtCompile
-extern __typeof (xmlXPathCtxtCompile) xmlXPathCtxtCompile__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathCtxtCompile xmlXPathCtxtCompile__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathDebugDumpCompExpr
-extern __typeof (xmlXPathDebugDumpCompExpr) xmlXPathDebugDumpCompExpr __attribute((alias("xmlXPathDebugDumpCompExpr__internal_alias")));
-#else
-#ifndef xmlXPathDebugDumpCompExpr
-extern __typeof (xmlXPathDebugDumpCompExpr) xmlXPathDebugDumpCompExpr__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathDebugDumpCompExpr xmlXPathDebugDumpCompExpr__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathDebugDumpObject
-extern __typeof (xmlXPathDebugDumpObject) xmlXPathDebugDumpObject __attribute((alias("xmlXPathDebugDumpObject__internal_alias")));
-#else
-#ifndef xmlXPathDebugDumpObject
-extern __typeof (xmlXPathDebugDumpObject) xmlXPathDebugDumpObject__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathDebugDumpObject xmlXPathDebugDumpObject__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathDifference
-extern __typeof (xmlXPathDifference) xmlXPathDifference __attribute((alias("xmlXPathDifference__internal_alias")));
-#else
-#ifndef xmlXPathDifference
-extern __typeof (xmlXPathDifference) xmlXPathDifference__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathDifference xmlXPathDifference__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathDistinct
-extern __typeof (xmlXPathDistinct) xmlXPathDistinct __attribute((alias("xmlXPathDistinct__internal_alias")));
-#else
-#ifndef xmlXPathDistinct
-extern __typeof (xmlXPathDistinct) xmlXPathDistinct__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathDistinct xmlXPathDistinct__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathDistinctSorted
-extern __typeof (xmlXPathDistinctSorted) xmlXPathDistinctSorted __attribute((alias("xmlXPathDistinctSorted__internal_alias")));
-#else
-#ifndef xmlXPathDistinctSorted
-extern __typeof (xmlXPathDistinctSorted) xmlXPathDistinctSorted__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathDistinctSorted xmlXPathDistinctSorted__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathDivValues
-extern __typeof (xmlXPathDivValues) xmlXPathDivValues __attribute((alias("xmlXPathDivValues__internal_alias")));
-#else
-#ifndef xmlXPathDivValues
-extern __typeof (xmlXPathDivValues) xmlXPathDivValues__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathDivValues xmlXPathDivValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathEqualValues
-extern __typeof (xmlXPathEqualValues) xmlXPathEqualValues __attribute((alias("xmlXPathEqualValues__internal_alias")));
-#else
-#ifndef xmlXPathEqualValues
-extern __typeof (xmlXPathEqualValues) xmlXPathEqualValues__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathEqualValues xmlXPathEqualValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathErr
-extern __typeof (xmlXPathErr) xmlXPathErr __attribute((alias("xmlXPathErr__internal_alias")));
-#else
-#ifndef xmlXPathErr
-extern __typeof (xmlXPathErr) xmlXPathErr__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathErr xmlXPathErr__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathEval
-extern __typeof (xmlXPathEval) xmlXPathEval __attribute((alias("xmlXPathEval__internal_alias")));
-#else
-#ifndef xmlXPathEval
-extern __typeof (xmlXPathEval) xmlXPathEval__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathEval xmlXPathEval__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathEvalExpr
-extern __typeof (xmlXPathEvalExpr) xmlXPathEvalExpr __attribute((alias("xmlXPathEvalExpr__internal_alias")));
-#else
-#ifndef xmlXPathEvalExpr
-extern __typeof (xmlXPathEvalExpr) xmlXPathEvalExpr__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathEvalExpr xmlXPathEvalExpr__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathEvalExpression
-extern __typeof (xmlXPathEvalExpression) xmlXPathEvalExpression __attribute((alias("xmlXPathEvalExpression__internal_alias")));
-#else
-#ifndef xmlXPathEvalExpression
-extern __typeof (xmlXPathEvalExpression) xmlXPathEvalExpression__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathEvalExpression xmlXPathEvalExpression__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathEvalPredicate
-extern __typeof (xmlXPathEvalPredicate) xmlXPathEvalPredicate __attribute((alias("xmlXPathEvalPredicate__internal_alias")));
-#else
-#ifndef xmlXPathEvalPredicate
-extern __typeof (xmlXPathEvalPredicate) xmlXPathEvalPredicate__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathEvalPredicate xmlXPathEvalPredicate__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathEvaluatePredicateResult
-extern __typeof (xmlXPathEvaluatePredicateResult) xmlXPathEvaluatePredicateResult __attribute((alias("xmlXPathEvaluatePredicateResult__internal_alias")));
-#else
-#ifndef xmlXPathEvaluatePredicateResult
-extern __typeof (xmlXPathEvaluatePredicateResult) xmlXPathEvaluatePredicateResult__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathEvaluatePredicateResult xmlXPathEvaluatePredicateResult__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFalseFunction
-extern __typeof (xmlXPathFalseFunction) xmlXPathFalseFunction __attribute((alias("xmlXPathFalseFunction__internal_alias")));
-#else
-#ifndef xmlXPathFalseFunction
-extern __typeof (xmlXPathFalseFunction) xmlXPathFalseFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFalseFunction xmlXPathFalseFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFloorFunction
-extern __typeof (xmlXPathFloorFunction) xmlXPathFloorFunction __attribute((alias("xmlXPathFloorFunction__internal_alias")));
-#else
-#ifndef xmlXPathFloorFunction
-extern __typeof (xmlXPathFloorFunction) xmlXPathFloorFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFloorFunction xmlXPathFloorFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFreeCompExpr
-extern __typeof (xmlXPathFreeCompExpr) xmlXPathFreeCompExpr __attribute((alias("xmlXPathFreeCompExpr__internal_alias")));
-#else
-#ifndef xmlXPathFreeCompExpr
-extern __typeof (xmlXPathFreeCompExpr) xmlXPathFreeCompExpr__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFreeCompExpr xmlXPathFreeCompExpr__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFreeContext
-extern __typeof (xmlXPathFreeContext) xmlXPathFreeContext __attribute((alias("xmlXPathFreeContext__internal_alias")));
-#else
-#ifndef xmlXPathFreeContext
-extern __typeof (xmlXPathFreeContext) xmlXPathFreeContext__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFreeContext xmlXPathFreeContext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFreeNodeSet
-extern __typeof (xmlXPathFreeNodeSet) xmlXPathFreeNodeSet __attribute((alias("xmlXPathFreeNodeSet__internal_alias")));
-#else
-#ifndef xmlXPathFreeNodeSet
-extern __typeof (xmlXPathFreeNodeSet) xmlXPathFreeNodeSet__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFreeNodeSet xmlXPathFreeNodeSet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFreeNodeSetList
-extern __typeof (xmlXPathFreeNodeSetList) xmlXPathFreeNodeSetList __attribute((alias("xmlXPathFreeNodeSetList__internal_alias")));
-#else
-#ifndef xmlXPathFreeNodeSetList
-extern __typeof (xmlXPathFreeNodeSetList) xmlXPathFreeNodeSetList__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFreeNodeSetList xmlXPathFreeNodeSetList__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFreeObject
-extern __typeof (xmlXPathFreeObject) xmlXPathFreeObject __attribute((alias("xmlXPathFreeObject__internal_alias")));
-#else
-#ifndef xmlXPathFreeObject
-extern __typeof (xmlXPathFreeObject) xmlXPathFreeObject__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFreeObject xmlXPathFreeObject__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFreeParserContext
-extern __typeof (xmlXPathFreeParserContext) xmlXPathFreeParserContext __attribute((alias("xmlXPathFreeParserContext__internal_alias")));
-#else
-#ifndef xmlXPathFreeParserContext
-extern __typeof (xmlXPathFreeParserContext) xmlXPathFreeParserContext__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFreeParserContext xmlXPathFreeParserContext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFunctionLookup
-extern __typeof (xmlXPathFunctionLookup) xmlXPathFunctionLookup __attribute((alias("xmlXPathFunctionLookup__internal_alias")));
-#else
-#ifndef xmlXPathFunctionLookup
-extern __typeof (xmlXPathFunctionLookup) xmlXPathFunctionLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFunctionLookup xmlXPathFunctionLookup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathFunctionLookupNS
-extern __typeof (xmlXPathFunctionLookupNS) xmlXPathFunctionLookupNS __attribute((alias("xmlXPathFunctionLookupNS__internal_alias")));
-#else
-#ifndef xmlXPathFunctionLookupNS
-extern __typeof (xmlXPathFunctionLookupNS) xmlXPathFunctionLookupNS__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathFunctionLookupNS xmlXPathFunctionLookupNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathHasSameNodes
-extern __typeof (xmlXPathHasSameNodes) xmlXPathHasSameNodes __attribute((alias("xmlXPathHasSameNodes__internal_alias")));
-#else
-#ifndef xmlXPathHasSameNodes
-extern __typeof (xmlXPathHasSameNodes) xmlXPathHasSameNodes__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathHasSameNodes xmlXPathHasSameNodes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathIdFunction
-extern __typeof (xmlXPathIdFunction) xmlXPathIdFunction __attribute((alias("xmlXPathIdFunction__internal_alias")));
-#else
-#ifndef xmlXPathIdFunction
-extern __typeof (xmlXPathIdFunction) xmlXPathIdFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathIdFunction xmlXPathIdFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathInit
-extern __typeof (xmlXPathInit) xmlXPathInit __attribute((alias("xmlXPathInit__internal_alias")));
-#else
-#ifndef xmlXPathInit
-extern __typeof (xmlXPathInit) xmlXPathInit__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathInit xmlXPathInit__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathIntersection
-extern __typeof (xmlXPathIntersection) xmlXPathIntersection __attribute((alias("xmlXPathIntersection__internal_alias")));
-#else
-#ifndef xmlXPathIntersection
-extern __typeof (xmlXPathIntersection) xmlXPathIntersection__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathIntersection xmlXPathIntersection__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathIsInf
-extern __typeof (xmlXPathIsInf) xmlXPathIsInf __attribute((alias("xmlXPathIsInf__internal_alias")));
-#else
-#ifndef xmlXPathIsInf
-extern __typeof (xmlXPathIsInf) xmlXPathIsInf__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathIsInf xmlXPathIsInf__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathIsNaN
-extern __typeof (xmlXPathIsNaN) xmlXPathIsNaN __attribute((alias("xmlXPathIsNaN__internal_alias")));
-#else
-#ifndef xmlXPathIsNaN
-extern __typeof (xmlXPathIsNaN) xmlXPathIsNaN__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathIsNaN xmlXPathIsNaN__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathIsNodeType
-extern __typeof (xmlXPathIsNodeType) xmlXPathIsNodeType __attribute((alias("xmlXPathIsNodeType__internal_alias")));
-#else
-#ifndef xmlXPathIsNodeType
-extern __typeof (xmlXPathIsNodeType) xmlXPathIsNodeType__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathIsNodeType xmlXPathIsNodeType__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathLangFunction
-extern __typeof (xmlXPathLangFunction) xmlXPathLangFunction __attribute((alias("xmlXPathLangFunction__internal_alias")));
-#else
-#ifndef xmlXPathLangFunction
-extern __typeof (xmlXPathLangFunction) xmlXPathLangFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathLangFunction xmlXPathLangFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathLastFunction
-extern __typeof (xmlXPathLastFunction) xmlXPathLastFunction __attribute((alias("xmlXPathLastFunction__internal_alias")));
-#else
-#ifndef xmlXPathLastFunction
-extern __typeof (xmlXPathLastFunction) xmlXPathLastFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathLastFunction xmlXPathLastFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathLeading
-extern __typeof (xmlXPathLeading) xmlXPathLeading __attribute((alias("xmlXPathLeading__internal_alias")));
-#else
-#ifndef xmlXPathLeading
-extern __typeof (xmlXPathLeading) xmlXPathLeading__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathLeading xmlXPathLeading__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathLeadingSorted
-extern __typeof (xmlXPathLeadingSorted) xmlXPathLeadingSorted __attribute((alias("xmlXPathLeadingSorted__internal_alias")));
-#else
-#ifndef xmlXPathLeadingSorted
-extern __typeof (xmlXPathLeadingSorted) xmlXPathLeadingSorted__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathLeadingSorted xmlXPathLeadingSorted__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathLocalNameFunction
-extern __typeof (xmlXPathLocalNameFunction) xmlXPathLocalNameFunction __attribute((alias("xmlXPathLocalNameFunction__internal_alias")));
-#else
-#ifndef xmlXPathLocalNameFunction
-extern __typeof (xmlXPathLocalNameFunction) xmlXPathLocalNameFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathLocalNameFunction xmlXPathLocalNameFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathModValues
-extern __typeof (xmlXPathModValues) xmlXPathModValues __attribute((alias("xmlXPathModValues__internal_alias")));
-#else
-#ifndef xmlXPathModValues
-extern __typeof (xmlXPathModValues) xmlXPathModValues__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathModValues xmlXPathModValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathMultValues
-extern __typeof (xmlXPathMultValues) xmlXPathMultValues __attribute((alias("xmlXPathMultValues__internal_alias")));
-#else
-#ifndef xmlXPathMultValues
-extern __typeof (xmlXPathMultValues) xmlXPathMultValues__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathMultValues xmlXPathMultValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNamespaceURIFunction
-extern __typeof (xmlXPathNamespaceURIFunction) xmlXPathNamespaceURIFunction __attribute((alias("xmlXPathNamespaceURIFunction__internal_alias")));
-#else
-#ifndef xmlXPathNamespaceURIFunction
-extern __typeof (xmlXPathNamespaceURIFunction) xmlXPathNamespaceURIFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNamespaceURIFunction xmlXPathNamespaceURIFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewBoolean
-extern __typeof (xmlXPathNewBoolean) xmlXPathNewBoolean __attribute((alias("xmlXPathNewBoolean__internal_alias")));
-#else
-#ifndef xmlXPathNewBoolean
-extern __typeof (xmlXPathNewBoolean) xmlXPathNewBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewBoolean xmlXPathNewBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewCString
-extern __typeof (xmlXPathNewCString) xmlXPathNewCString __attribute((alias("xmlXPathNewCString__internal_alias")));
-#else
-#ifndef xmlXPathNewCString
-extern __typeof (xmlXPathNewCString) xmlXPathNewCString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewCString xmlXPathNewCString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewContext
-extern __typeof (xmlXPathNewContext) xmlXPathNewContext __attribute((alias("xmlXPathNewContext__internal_alias")));
-#else
-#ifndef xmlXPathNewContext
-extern __typeof (xmlXPathNewContext) xmlXPathNewContext__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewContext xmlXPathNewContext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewFloat
-extern __typeof (xmlXPathNewFloat) xmlXPathNewFloat __attribute((alias("xmlXPathNewFloat__internal_alias")));
-#else
-#ifndef xmlXPathNewFloat
-extern __typeof (xmlXPathNewFloat) xmlXPathNewFloat__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewFloat xmlXPathNewFloat__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewNodeSet
-extern __typeof (xmlXPathNewNodeSet) xmlXPathNewNodeSet __attribute((alias("xmlXPathNewNodeSet__internal_alias")));
-#else
-#ifndef xmlXPathNewNodeSet
-extern __typeof (xmlXPathNewNodeSet) xmlXPathNewNodeSet__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewNodeSet xmlXPathNewNodeSet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewNodeSetList
-extern __typeof (xmlXPathNewNodeSetList) xmlXPathNewNodeSetList __attribute((alias("xmlXPathNewNodeSetList__internal_alias")));
-#else
-#ifndef xmlXPathNewNodeSetList
-extern __typeof (xmlXPathNewNodeSetList) xmlXPathNewNodeSetList__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewNodeSetList xmlXPathNewNodeSetList__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewParserContext
-extern __typeof (xmlXPathNewParserContext) xmlXPathNewParserContext __attribute((alias("xmlXPathNewParserContext__internal_alias")));
-#else
-#ifndef xmlXPathNewParserContext
-extern __typeof (xmlXPathNewParserContext) xmlXPathNewParserContext__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewParserContext xmlXPathNewParserContext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewString
-extern __typeof (xmlXPathNewString) xmlXPathNewString __attribute((alias("xmlXPathNewString__internal_alias")));
-#else
-#ifndef xmlXPathNewString
-extern __typeof (xmlXPathNewString) xmlXPathNewString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewString xmlXPathNewString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNewValueTree
-extern __typeof (xmlXPathNewValueTree) xmlXPathNewValueTree __attribute((alias("xmlXPathNewValueTree__internal_alias")));
-#else
-#ifndef xmlXPathNewValueTree
-extern __typeof (xmlXPathNewValueTree) xmlXPathNewValueTree__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNewValueTree xmlXPathNewValueTree__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextAncestor
-extern __typeof (xmlXPathNextAncestor) xmlXPathNextAncestor __attribute((alias("xmlXPathNextAncestor__internal_alias")));
-#else
-#ifndef xmlXPathNextAncestor
-extern __typeof (xmlXPathNextAncestor) xmlXPathNextAncestor__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextAncestor xmlXPathNextAncestor__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextAncestorOrSelf
-extern __typeof (xmlXPathNextAncestorOrSelf) xmlXPathNextAncestorOrSelf __attribute((alias("xmlXPathNextAncestorOrSelf__internal_alias")));
-#else
-#ifndef xmlXPathNextAncestorOrSelf
-extern __typeof (xmlXPathNextAncestorOrSelf) xmlXPathNextAncestorOrSelf__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextAncestorOrSelf xmlXPathNextAncestorOrSelf__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextAttribute
-extern __typeof (xmlXPathNextAttribute) xmlXPathNextAttribute __attribute((alias("xmlXPathNextAttribute__internal_alias")));
-#else
-#ifndef xmlXPathNextAttribute
-extern __typeof (xmlXPathNextAttribute) xmlXPathNextAttribute__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextAttribute xmlXPathNextAttribute__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextChild
-extern __typeof (xmlXPathNextChild) xmlXPathNextChild __attribute((alias("xmlXPathNextChild__internal_alias")));
-#else
-#ifndef xmlXPathNextChild
-extern __typeof (xmlXPathNextChild) xmlXPathNextChild__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextChild xmlXPathNextChild__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextDescendant
-extern __typeof (xmlXPathNextDescendant) xmlXPathNextDescendant __attribute((alias("xmlXPathNextDescendant__internal_alias")));
-#else
-#ifndef xmlXPathNextDescendant
-extern __typeof (xmlXPathNextDescendant) xmlXPathNextDescendant__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextDescendant xmlXPathNextDescendant__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextDescendantOrSelf
-extern __typeof (xmlXPathNextDescendantOrSelf) xmlXPathNextDescendantOrSelf __attribute((alias("xmlXPathNextDescendantOrSelf__internal_alias")));
-#else
-#ifndef xmlXPathNextDescendantOrSelf
-extern __typeof (xmlXPathNextDescendantOrSelf) xmlXPathNextDescendantOrSelf__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextDescendantOrSelf xmlXPathNextDescendantOrSelf__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextFollowing
-extern __typeof (xmlXPathNextFollowing) xmlXPathNextFollowing __attribute((alias("xmlXPathNextFollowing__internal_alias")));
-#else
-#ifndef xmlXPathNextFollowing
-extern __typeof (xmlXPathNextFollowing) xmlXPathNextFollowing__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextFollowing xmlXPathNextFollowing__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextFollowingSibling
-extern __typeof (xmlXPathNextFollowingSibling) xmlXPathNextFollowingSibling __attribute((alias("xmlXPathNextFollowingSibling__internal_alias")));
-#else
-#ifndef xmlXPathNextFollowingSibling
-extern __typeof (xmlXPathNextFollowingSibling) xmlXPathNextFollowingSibling__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextFollowingSibling xmlXPathNextFollowingSibling__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextNamespace
-extern __typeof (xmlXPathNextNamespace) xmlXPathNextNamespace __attribute((alias("xmlXPathNextNamespace__internal_alias")));
-#else
-#ifndef xmlXPathNextNamespace
-extern __typeof (xmlXPathNextNamespace) xmlXPathNextNamespace__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextNamespace xmlXPathNextNamespace__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextParent
-extern __typeof (xmlXPathNextParent) xmlXPathNextParent __attribute((alias("xmlXPathNextParent__internal_alias")));
-#else
-#ifndef xmlXPathNextParent
-extern __typeof (xmlXPathNextParent) xmlXPathNextParent__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextParent xmlXPathNextParent__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextPreceding
-extern __typeof (xmlXPathNextPreceding) xmlXPathNextPreceding __attribute((alias("xmlXPathNextPreceding__internal_alias")));
-#else
-#ifndef xmlXPathNextPreceding
-extern __typeof (xmlXPathNextPreceding) xmlXPathNextPreceding__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextPreceding xmlXPathNextPreceding__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextPrecedingSibling
-extern __typeof (xmlXPathNextPrecedingSibling) xmlXPathNextPrecedingSibling __attribute((alias("xmlXPathNextPrecedingSibling__internal_alias")));
-#else
-#ifndef xmlXPathNextPrecedingSibling
-extern __typeof (xmlXPathNextPrecedingSibling) xmlXPathNextPrecedingSibling__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextPrecedingSibling xmlXPathNextPrecedingSibling__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNextSelf
-extern __typeof (xmlXPathNextSelf) xmlXPathNextSelf __attribute((alias("xmlXPathNextSelf__internal_alias")));
-#else
-#ifndef xmlXPathNextSelf
-extern __typeof (xmlXPathNextSelf) xmlXPathNextSelf__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNextSelf xmlXPathNextSelf__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeEval
-extern __typeof (xmlXPathNodeEval) xmlXPathNodeEval __attribute((alias("xmlXPathNodeEval__internal_alias")));
-#else
-#ifndef xmlXPathNodeEval
-extern __typeof (xmlXPathNodeEval) xmlXPathNodeEval__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeEval xmlXPathNodeEval__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeLeading
-extern __typeof (xmlXPathNodeLeading) xmlXPathNodeLeading __attribute((alias("xmlXPathNodeLeading__internal_alias")));
-#else
-#ifndef xmlXPathNodeLeading
-extern __typeof (xmlXPathNodeLeading) xmlXPathNodeLeading__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeLeading xmlXPathNodeLeading__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeLeadingSorted
-extern __typeof (xmlXPathNodeLeadingSorted) xmlXPathNodeLeadingSorted __attribute((alias("xmlXPathNodeLeadingSorted__internal_alias")));
-#else
-#ifndef xmlXPathNodeLeadingSorted
-extern __typeof (xmlXPathNodeLeadingSorted) xmlXPathNodeLeadingSorted__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeLeadingSorted xmlXPathNodeLeadingSorted__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetAdd
-extern __typeof (xmlXPathNodeSetAdd) xmlXPathNodeSetAdd __attribute((alias("xmlXPathNodeSetAdd__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetAdd
-extern __typeof (xmlXPathNodeSetAdd) xmlXPathNodeSetAdd__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetAdd xmlXPathNodeSetAdd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetAddNs
-extern __typeof (xmlXPathNodeSetAddNs) xmlXPathNodeSetAddNs __attribute((alias("xmlXPathNodeSetAddNs__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetAddNs
-extern __typeof (xmlXPathNodeSetAddNs) xmlXPathNodeSetAddNs__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetAddNs xmlXPathNodeSetAddNs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetAddUnique
-extern __typeof (xmlXPathNodeSetAddUnique) xmlXPathNodeSetAddUnique __attribute((alias("xmlXPathNodeSetAddUnique__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetAddUnique
-extern __typeof (xmlXPathNodeSetAddUnique) xmlXPathNodeSetAddUnique__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetAddUnique xmlXPathNodeSetAddUnique__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetContains
-extern __typeof (xmlXPathNodeSetContains) xmlXPathNodeSetContains __attribute((alias("xmlXPathNodeSetContains__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetContains
-extern __typeof (xmlXPathNodeSetContains) xmlXPathNodeSetContains__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetContains xmlXPathNodeSetContains__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetCreate
-extern __typeof (xmlXPathNodeSetCreate) xmlXPathNodeSetCreate __attribute((alias("xmlXPathNodeSetCreate__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetCreate
-extern __typeof (xmlXPathNodeSetCreate) xmlXPathNodeSetCreate__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetCreate xmlXPathNodeSetCreate__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetDel
-extern __typeof (xmlXPathNodeSetDel) xmlXPathNodeSetDel __attribute((alias("xmlXPathNodeSetDel__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetDel
-extern __typeof (xmlXPathNodeSetDel) xmlXPathNodeSetDel__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetDel xmlXPathNodeSetDel__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetFreeNs
-extern __typeof (xmlXPathNodeSetFreeNs) xmlXPathNodeSetFreeNs __attribute((alias("xmlXPathNodeSetFreeNs__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetFreeNs
-extern __typeof (xmlXPathNodeSetFreeNs) xmlXPathNodeSetFreeNs__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetFreeNs xmlXPathNodeSetFreeNs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetMerge
-extern __typeof (xmlXPathNodeSetMerge) xmlXPathNodeSetMerge __attribute((alias("xmlXPathNodeSetMerge__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetMerge
-extern __typeof (xmlXPathNodeSetMerge) xmlXPathNodeSetMerge__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetMerge xmlXPathNodeSetMerge__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetRemove
-extern __typeof (xmlXPathNodeSetRemove) xmlXPathNodeSetRemove __attribute((alias("xmlXPathNodeSetRemove__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetRemove
-extern __typeof (xmlXPathNodeSetRemove) xmlXPathNodeSetRemove__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetRemove xmlXPathNodeSetRemove__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeSetSort
-extern __typeof (xmlXPathNodeSetSort) xmlXPathNodeSetSort __attribute((alias("xmlXPathNodeSetSort__internal_alias")));
-#else
-#ifndef xmlXPathNodeSetSort
-extern __typeof (xmlXPathNodeSetSort) xmlXPathNodeSetSort__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeSetSort xmlXPathNodeSetSort__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeTrailing
-extern __typeof (xmlXPathNodeTrailing) xmlXPathNodeTrailing __attribute((alias("xmlXPathNodeTrailing__internal_alias")));
-#else
-#ifndef xmlXPathNodeTrailing
-extern __typeof (xmlXPathNodeTrailing) xmlXPathNodeTrailing__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeTrailing xmlXPathNodeTrailing__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNodeTrailingSorted
-extern __typeof (xmlXPathNodeTrailingSorted) xmlXPathNodeTrailingSorted __attribute((alias("xmlXPathNodeTrailingSorted__internal_alias")));
-#else
-#ifndef xmlXPathNodeTrailingSorted
-extern __typeof (xmlXPathNodeTrailingSorted) xmlXPathNodeTrailingSorted__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNodeTrailingSorted xmlXPathNodeTrailingSorted__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNormalizeFunction
-extern __typeof (xmlXPathNormalizeFunction) xmlXPathNormalizeFunction __attribute((alias("xmlXPathNormalizeFunction__internal_alias")));
-#else
-#ifndef xmlXPathNormalizeFunction
-extern __typeof (xmlXPathNormalizeFunction) xmlXPathNormalizeFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNormalizeFunction xmlXPathNormalizeFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNotEqualValues
-extern __typeof (xmlXPathNotEqualValues) xmlXPathNotEqualValues __attribute((alias("xmlXPathNotEqualValues__internal_alias")));
-#else
-#ifndef xmlXPathNotEqualValues
-extern __typeof (xmlXPathNotEqualValues) xmlXPathNotEqualValues__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNotEqualValues xmlXPathNotEqualValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNotFunction
-extern __typeof (xmlXPathNotFunction) xmlXPathNotFunction __attribute((alias("xmlXPathNotFunction__internal_alias")));
-#else
-#ifndef xmlXPathNotFunction
-extern __typeof (xmlXPathNotFunction) xmlXPathNotFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNotFunction xmlXPathNotFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNsLookup
-extern __typeof (xmlXPathNsLookup) xmlXPathNsLookup __attribute((alias("xmlXPathNsLookup__internal_alias")));
-#else
-#ifndef xmlXPathNsLookup
-extern __typeof (xmlXPathNsLookup) xmlXPathNsLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNsLookup xmlXPathNsLookup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathNumberFunction
-extern __typeof (xmlXPathNumberFunction) xmlXPathNumberFunction __attribute((alias("xmlXPathNumberFunction__internal_alias")));
-#else
-#ifndef xmlXPathNumberFunction
-extern __typeof (xmlXPathNumberFunction) xmlXPathNumberFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathNumberFunction xmlXPathNumberFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathObjectCopy
-extern __typeof (xmlXPathObjectCopy) xmlXPathObjectCopy __attribute((alias("xmlXPathObjectCopy__internal_alias")));
-#else
-#ifndef xmlXPathObjectCopy
-extern __typeof (xmlXPathObjectCopy) xmlXPathObjectCopy__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathObjectCopy xmlXPathObjectCopy__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathOrderDocElems
-extern __typeof (xmlXPathOrderDocElems) xmlXPathOrderDocElems __attribute((alias("xmlXPathOrderDocElems__internal_alias")));
-#else
-#ifndef xmlXPathOrderDocElems
-extern __typeof (xmlXPathOrderDocElems) xmlXPathOrderDocElems__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathOrderDocElems xmlXPathOrderDocElems__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathParseNCName
-extern __typeof (xmlXPathParseNCName) xmlXPathParseNCName __attribute((alias("xmlXPathParseNCName__internal_alias")));
-#else
-#ifndef xmlXPathParseNCName
-extern __typeof (xmlXPathParseNCName) xmlXPathParseNCName__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathParseNCName xmlXPathParseNCName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathParseName
-extern __typeof (xmlXPathParseName) xmlXPathParseName __attribute((alias("xmlXPathParseName__internal_alias")));
-#else
-#ifndef xmlXPathParseName
-extern __typeof (xmlXPathParseName) xmlXPathParseName__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathParseName xmlXPathParseName__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathPopBoolean
-extern __typeof (xmlXPathPopBoolean) xmlXPathPopBoolean __attribute((alias("xmlXPathPopBoolean__internal_alias")));
-#else
-#ifndef xmlXPathPopBoolean
-extern __typeof (xmlXPathPopBoolean) xmlXPathPopBoolean__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathPopBoolean xmlXPathPopBoolean__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathPopExternal
-extern __typeof (xmlXPathPopExternal) xmlXPathPopExternal __attribute((alias("xmlXPathPopExternal__internal_alias")));
-#else
-#ifndef xmlXPathPopExternal
-extern __typeof (xmlXPathPopExternal) xmlXPathPopExternal__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathPopExternal xmlXPathPopExternal__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathPopNodeSet
-extern __typeof (xmlXPathPopNodeSet) xmlXPathPopNodeSet __attribute((alias("xmlXPathPopNodeSet__internal_alias")));
-#else
-#ifndef xmlXPathPopNodeSet
-extern __typeof (xmlXPathPopNodeSet) xmlXPathPopNodeSet__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathPopNodeSet xmlXPathPopNodeSet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathPopNumber
-extern __typeof (xmlXPathPopNumber) xmlXPathPopNumber __attribute((alias("xmlXPathPopNumber__internal_alias")));
-#else
-#ifndef xmlXPathPopNumber
-extern __typeof (xmlXPathPopNumber) xmlXPathPopNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathPopNumber xmlXPathPopNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathPopString
-extern __typeof (xmlXPathPopString) xmlXPathPopString __attribute((alias("xmlXPathPopString__internal_alias")));
-#else
-#ifndef xmlXPathPopString
-extern __typeof (xmlXPathPopString) xmlXPathPopString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathPopString xmlXPathPopString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathPositionFunction
-extern __typeof (xmlXPathPositionFunction) xmlXPathPositionFunction __attribute((alias("xmlXPathPositionFunction__internal_alias")));
-#else
-#ifndef xmlXPathPositionFunction
-extern __typeof (xmlXPathPositionFunction) xmlXPathPositionFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathPositionFunction xmlXPathPositionFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisterAllFunctions
-extern __typeof (xmlXPathRegisterAllFunctions) xmlXPathRegisterAllFunctions __attribute((alias("xmlXPathRegisterAllFunctions__internal_alias")));
-#else
-#ifndef xmlXPathRegisterAllFunctions
-extern __typeof (xmlXPathRegisterAllFunctions) xmlXPathRegisterAllFunctions__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisterAllFunctions xmlXPathRegisterAllFunctions__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisterFunc
-extern __typeof (xmlXPathRegisterFunc) xmlXPathRegisterFunc __attribute((alias("xmlXPathRegisterFunc__internal_alias")));
-#else
-#ifndef xmlXPathRegisterFunc
-extern __typeof (xmlXPathRegisterFunc) xmlXPathRegisterFunc__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisterFunc xmlXPathRegisterFunc__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisterFuncLookup
-extern __typeof (xmlXPathRegisterFuncLookup) xmlXPathRegisterFuncLookup __attribute((alias("xmlXPathRegisterFuncLookup__internal_alias")));
-#else
-#ifndef xmlXPathRegisterFuncLookup
-extern __typeof (xmlXPathRegisterFuncLookup) xmlXPathRegisterFuncLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisterFuncLookup xmlXPathRegisterFuncLookup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisterFuncNS
-extern __typeof (xmlXPathRegisterFuncNS) xmlXPathRegisterFuncNS __attribute((alias("xmlXPathRegisterFuncNS__internal_alias")));
-#else
-#ifndef xmlXPathRegisterFuncNS
-extern __typeof (xmlXPathRegisterFuncNS) xmlXPathRegisterFuncNS__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisterFuncNS xmlXPathRegisterFuncNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisterNs
-extern __typeof (xmlXPathRegisterNs) xmlXPathRegisterNs __attribute((alias("xmlXPathRegisterNs__internal_alias")));
-#else
-#ifndef xmlXPathRegisterNs
-extern __typeof (xmlXPathRegisterNs) xmlXPathRegisterNs__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisterNs xmlXPathRegisterNs__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisterVariable
-extern __typeof (xmlXPathRegisterVariable) xmlXPathRegisterVariable __attribute((alias("xmlXPathRegisterVariable__internal_alias")));
-#else
-#ifndef xmlXPathRegisterVariable
-extern __typeof (xmlXPathRegisterVariable) xmlXPathRegisterVariable__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisterVariable xmlXPathRegisterVariable__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisterVariableLookup
-extern __typeof (xmlXPathRegisterVariableLookup) xmlXPathRegisterVariableLookup __attribute((alias("xmlXPathRegisterVariableLookup__internal_alias")));
-#else
-#ifndef xmlXPathRegisterVariableLookup
-extern __typeof (xmlXPathRegisterVariableLookup) xmlXPathRegisterVariableLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisterVariableLookup xmlXPathRegisterVariableLookup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisterVariableNS
-extern __typeof (xmlXPathRegisterVariableNS) xmlXPathRegisterVariableNS __attribute((alias("xmlXPathRegisterVariableNS__internal_alias")));
-#else
-#ifndef xmlXPathRegisterVariableNS
-extern __typeof (xmlXPathRegisterVariableNS) xmlXPathRegisterVariableNS__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisterVariableNS xmlXPathRegisterVariableNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisteredFuncsCleanup
-extern __typeof (xmlXPathRegisteredFuncsCleanup) xmlXPathRegisteredFuncsCleanup __attribute((alias("xmlXPathRegisteredFuncsCleanup__internal_alias")));
-#else
-#ifndef xmlXPathRegisteredFuncsCleanup
-extern __typeof (xmlXPathRegisteredFuncsCleanup) xmlXPathRegisteredFuncsCleanup__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisteredFuncsCleanup xmlXPathRegisteredFuncsCleanup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisteredNsCleanup
-extern __typeof (xmlXPathRegisteredNsCleanup) xmlXPathRegisteredNsCleanup __attribute((alias("xmlXPathRegisteredNsCleanup__internal_alias")));
-#else
-#ifndef xmlXPathRegisteredNsCleanup
-extern __typeof (xmlXPathRegisteredNsCleanup) xmlXPathRegisteredNsCleanup__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisteredNsCleanup xmlXPathRegisteredNsCleanup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRegisteredVariablesCleanup
-extern __typeof (xmlXPathRegisteredVariablesCleanup) xmlXPathRegisteredVariablesCleanup __attribute((alias("xmlXPathRegisteredVariablesCleanup__internal_alias")));
-#else
-#ifndef xmlXPathRegisteredVariablesCleanup
-extern __typeof (xmlXPathRegisteredVariablesCleanup) xmlXPathRegisteredVariablesCleanup__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRegisteredVariablesCleanup xmlXPathRegisteredVariablesCleanup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRoot
-extern __typeof (xmlXPathRoot) xmlXPathRoot __attribute((alias("xmlXPathRoot__internal_alias")));
-#else
-#ifndef xmlXPathRoot
-extern __typeof (xmlXPathRoot) xmlXPathRoot__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRoot xmlXPathRoot__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathRoundFunction
-extern __typeof (xmlXPathRoundFunction) xmlXPathRoundFunction __attribute((alias("xmlXPathRoundFunction__internal_alias")));
-#else
-#ifndef xmlXPathRoundFunction
-extern __typeof (xmlXPathRoundFunction) xmlXPathRoundFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathRoundFunction xmlXPathRoundFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathSetContextNode
-extern __typeof (xmlXPathSetContextNode) xmlXPathSetContextNode __attribute((alias("xmlXPathSetContextNode__internal_alias")));
-#else
-#ifndef xmlXPathSetContextNode
-extern __typeof (xmlXPathSetContextNode) xmlXPathSetContextNode__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathSetContextNode xmlXPathSetContextNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathStartsWithFunction
-extern __typeof (xmlXPathStartsWithFunction) xmlXPathStartsWithFunction __attribute((alias("xmlXPathStartsWithFunction__internal_alias")));
-#else
-#ifndef xmlXPathStartsWithFunction
-extern __typeof (xmlXPathStartsWithFunction) xmlXPathStartsWithFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathStartsWithFunction xmlXPathStartsWithFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathStringEvalNumber
-extern __typeof (xmlXPathStringEvalNumber) xmlXPathStringEvalNumber __attribute((alias("xmlXPathStringEvalNumber__internal_alias")));
-#else
-#ifndef xmlXPathStringEvalNumber
-extern __typeof (xmlXPathStringEvalNumber) xmlXPathStringEvalNumber__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathStringEvalNumber xmlXPathStringEvalNumber__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathStringFunction
-extern __typeof (xmlXPathStringFunction) xmlXPathStringFunction __attribute((alias("xmlXPathStringFunction__internal_alias")));
-#else
-#ifndef xmlXPathStringFunction
-extern __typeof (xmlXPathStringFunction) xmlXPathStringFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathStringFunction xmlXPathStringFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathStringLengthFunction
-extern __typeof (xmlXPathStringLengthFunction) xmlXPathStringLengthFunction __attribute((alias("xmlXPathStringLengthFunction__internal_alias")));
-#else
-#ifndef xmlXPathStringLengthFunction
-extern __typeof (xmlXPathStringLengthFunction) xmlXPathStringLengthFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathStringLengthFunction xmlXPathStringLengthFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathSubValues
-extern __typeof (xmlXPathSubValues) xmlXPathSubValues __attribute((alias("xmlXPathSubValues__internal_alias")));
-#else
-#ifndef xmlXPathSubValues
-extern __typeof (xmlXPathSubValues) xmlXPathSubValues__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathSubValues xmlXPathSubValues__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathSubstringAfterFunction
-extern __typeof (xmlXPathSubstringAfterFunction) xmlXPathSubstringAfterFunction __attribute((alias("xmlXPathSubstringAfterFunction__internal_alias")));
-#else
-#ifndef xmlXPathSubstringAfterFunction
-extern __typeof (xmlXPathSubstringAfterFunction) xmlXPathSubstringAfterFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathSubstringAfterFunction xmlXPathSubstringAfterFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathSubstringBeforeFunction
-extern __typeof (xmlXPathSubstringBeforeFunction) xmlXPathSubstringBeforeFunction __attribute((alias("xmlXPathSubstringBeforeFunction__internal_alias")));
-#else
-#ifndef xmlXPathSubstringBeforeFunction
-extern __typeof (xmlXPathSubstringBeforeFunction) xmlXPathSubstringBeforeFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathSubstringBeforeFunction xmlXPathSubstringBeforeFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathSubstringFunction
-extern __typeof (xmlXPathSubstringFunction) xmlXPathSubstringFunction __attribute((alias("xmlXPathSubstringFunction__internal_alias")));
-#else
-#ifndef xmlXPathSubstringFunction
-extern __typeof (xmlXPathSubstringFunction) xmlXPathSubstringFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathSubstringFunction xmlXPathSubstringFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathSumFunction
-extern __typeof (xmlXPathSumFunction) xmlXPathSumFunction __attribute((alias("xmlXPathSumFunction__internal_alias")));
-#else
-#ifndef xmlXPathSumFunction
-extern __typeof (xmlXPathSumFunction) xmlXPathSumFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathSumFunction xmlXPathSumFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathTrailing
-extern __typeof (xmlXPathTrailing) xmlXPathTrailing __attribute((alias("xmlXPathTrailing__internal_alias")));
-#else
-#ifndef xmlXPathTrailing
-extern __typeof (xmlXPathTrailing) xmlXPathTrailing__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathTrailing xmlXPathTrailing__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathTrailingSorted
-extern __typeof (xmlXPathTrailingSorted) xmlXPathTrailingSorted __attribute((alias("xmlXPathTrailingSorted__internal_alias")));
-#else
-#ifndef xmlXPathTrailingSorted
-extern __typeof (xmlXPathTrailingSorted) xmlXPathTrailingSorted__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathTrailingSorted xmlXPathTrailingSorted__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathTranslateFunction
-extern __typeof (xmlXPathTranslateFunction) xmlXPathTranslateFunction __attribute((alias("xmlXPathTranslateFunction__internal_alias")));
-#else
-#ifndef xmlXPathTranslateFunction
-extern __typeof (xmlXPathTranslateFunction) xmlXPathTranslateFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathTranslateFunction xmlXPathTranslateFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathTrueFunction
-extern __typeof (xmlXPathTrueFunction) xmlXPathTrueFunction __attribute((alias("xmlXPathTrueFunction__internal_alias")));
-#else
-#ifndef xmlXPathTrueFunction
-extern __typeof (xmlXPathTrueFunction) xmlXPathTrueFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathTrueFunction xmlXPathTrueFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathValueFlipSign
-extern __typeof (xmlXPathValueFlipSign) xmlXPathValueFlipSign __attribute((alias("xmlXPathValueFlipSign__internal_alias")));
-#else
-#ifndef xmlXPathValueFlipSign
-extern __typeof (xmlXPathValueFlipSign) xmlXPathValueFlipSign__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathValueFlipSign xmlXPathValueFlipSign__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathVariableLookup
-extern __typeof (xmlXPathVariableLookup) xmlXPathVariableLookup __attribute((alias("xmlXPathVariableLookup__internal_alias")));
-#else
-#ifndef xmlXPathVariableLookup
-extern __typeof (xmlXPathVariableLookup) xmlXPathVariableLookup__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathVariableLookup xmlXPathVariableLookup__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathVariableLookupNS
-extern __typeof (xmlXPathVariableLookupNS) xmlXPathVariableLookupNS __attribute((alias("xmlXPathVariableLookupNS__internal_alias")));
-#else
-#ifndef xmlXPathVariableLookupNS
-extern __typeof (xmlXPathVariableLookupNS) xmlXPathVariableLookupNS__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathVariableLookupNS xmlXPathVariableLookupNS__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathWrapCString
-extern __typeof (xmlXPathWrapCString) xmlXPathWrapCString __attribute((alias("xmlXPathWrapCString__internal_alias")));
-#else
-#ifndef xmlXPathWrapCString
-extern __typeof (xmlXPathWrapCString) xmlXPathWrapCString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathWrapCString xmlXPathWrapCString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathWrapExternal
-extern __typeof (xmlXPathWrapExternal) xmlXPathWrapExternal __attribute((alias("xmlXPathWrapExternal__internal_alias")));
-#else
-#ifndef xmlXPathWrapExternal
-extern __typeof (xmlXPathWrapExternal) xmlXPathWrapExternal__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathWrapExternal xmlXPathWrapExternal__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathWrapNodeSet
-extern __typeof (xmlXPathWrapNodeSet) xmlXPathWrapNodeSet __attribute((alias("xmlXPathWrapNodeSet__internal_alias")));
-#else
-#ifndef xmlXPathWrapNodeSet
-extern __typeof (xmlXPathWrapNodeSet) xmlXPathWrapNodeSet__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathWrapNodeSet xmlXPathWrapNodeSet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPathWrapString
-extern __typeof (xmlXPathWrapString) xmlXPathWrapString __attribute((alias("xmlXPathWrapString__internal_alias")));
-#else
-#ifndef xmlXPathWrapString
-extern __typeof (xmlXPathWrapString) xmlXPathWrapString__internal_alias __attribute((visibility("hidden")));
-#define xmlXPathWrapString xmlXPathWrapString__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPATH_ENABLED)
-#ifdef bottom_xpath
-#undef xmlXPatherror
-extern __typeof (xmlXPatherror) xmlXPatherror __attribute((alias("xmlXPatherror__internal_alias")));
-#else
-#ifndef xmlXPatherror
-extern __typeof (xmlXPatherror) xmlXPatherror__internal_alias __attribute((visibility("hidden")));
-#define xmlXPatherror xmlXPatherror__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrBuildNodeList
-extern __typeof (xmlXPtrBuildNodeList) xmlXPtrBuildNodeList __attribute((alias("xmlXPtrBuildNodeList__internal_alias")));
-#else
-#ifndef xmlXPtrBuildNodeList
-extern __typeof (xmlXPtrBuildNodeList) xmlXPtrBuildNodeList__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrBuildNodeList xmlXPtrBuildNodeList__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrEval
-extern __typeof (xmlXPtrEval) xmlXPtrEval __attribute((alias("xmlXPtrEval__internal_alias")));
-#else
-#ifndef xmlXPtrEval
-extern __typeof (xmlXPtrEval) xmlXPtrEval__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrEval xmlXPtrEval__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrEvalRangePredicate
-extern __typeof (xmlXPtrEvalRangePredicate) xmlXPtrEvalRangePredicate __attribute((alias("xmlXPtrEvalRangePredicate__internal_alias")));
-#else
-#ifndef xmlXPtrEvalRangePredicate
-extern __typeof (xmlXPtrEvalRangePredicate) xmlXPtrEvalRangePredicate__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrEvalRangePredicate xmlXPtrEvalRangePredicate__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrFreeLocationSet
-extern __typeof (xmlXPtrFreeLocationSet) xmlXPtrFreeLocationSet __attribute((alias("xmlXPtrFreeLocationSet__internal_alias")));
-#else
-#ifndef xmlXPtrFreeLocationSet
-extern __typeof (xmlXPtrFreeLocationSet) xmlXPtrFreeLocationSet__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrFreeLocationSet xmlXPtrFreeLocationSet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrLocationSetAdd
-extern __typeof (xmlXPtrLocationSetAdd) xmlXPtrLocationSetAdd __attribute((alias("xmlXPtrLocationSetAdd__internal_alias")));
-#else
-#ifndef xmlXPtrLocationSetAdd
-extern __typeof (xmlXPtrLocationSetAdd) xmlXPtrLocationSetAdd__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrLocationSetAdd xmlXPtrLocationSetAdd__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrLocationSetCreate
-extern __typeof (xmlXPtrLocationSetCreate) xmlXPtrLocationSetCreate __attribute((alias("xmlXPtrLocationSetCreate__internal_alias")));
-#else
-#ifndef xmlXPtrLocationSetCreate
-extern __typeof (xmlXPtrLocationSetCreate) xmlXPtrLocationSetCreate__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrLocationSetCreate xmlXPtrLocationSetCreate__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrLocationSetDel
-extern __typeof (xmlXPtrLocationSetDel) xmlXPtrLocationSetDel __attribute((alias("xmlXPtrLocationSetDel__internal_alias")));
-#else
-#ifndef xmlXPtrLocationSetDel
-extern __typeof (xmlXPtrLocationSetDel) xmlXPtrLocationSetDel__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrLocationSetDel xmlXPtrLocationSetDel__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrLocationSetMerge
-extern __typeof (xmlXPtrLocationSetMerge) xmlXPtrLocationSetMerge __attribute((alias("xmlXPtrLocationSetMerge__internal_alias")));
-#else
-#ifndef xmlXPtrLocationSetMerge
-extern __typeof (xmlXPtrLocationSetMerge) xmlXPtrLocationSetMerge__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrLocationSetMerge xmlXPtrLocationSetMerge__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrLocationSetRemove
-extern __typeof (xmlXPtrLocationSetRemove) xmlXPtrLocationSetRemove __attribute((alias("xmlXPtrLocationSetRemove__internal_alias")));
-#else
-#ifndef xmlXPtrLocationSetRemove
-extern __typeof (xmlXPtrLocationSetRemove) xmlXPtrLocationSetRemove__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrLocationSetRemove xmlXPtrLocationSetRemove__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewCollapsedRange
-extern __typeof (xmlXPtrNewCollapsedRange) xmlXPtrNewCollapsedRange __attribute((alias("xmlXPtrNewCollapsedRange__internal_alias")));
-#else
-#ifndef xmlXPtrNewCollapsedRange
-extern __typeof (xmlXPtrNewCollapsedRange) xmlXPtrNewCollapsedRange__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewCollapsedRange xmlXPtrNewCollapsedRange__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewContext
-extern __typeof (xmlXPtrNewContext) xmlXPtrNewContext __attribute((alias("xmlXPtrNewContext__internal_alias")));
-#else
-#ifndef xmlXPtrNewContext
-extern __typeof (xmlXPtrNewContext) xmlXPtrNewContext__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewContext xmlXPtrNewContext__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewLocationSetNodeSet
-extern __typeof (xmlXPtrNewLocationSetNodeSet) xmlXPtrNewLocationSetNodeSet __attribute((alias("xmlXPtrNewLocationSetNodeSet__internal_alias")));
-#else
-#ifndef xmlXPtrNewLocationSetNodeSet
-extern __typeof (xmlXPtrNewLocationSetNodeSet) xmlXPtrNewLocationSetNodeSet__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewLocationSetNodeSet xmlXPtrNewLocationSetNodeSet__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewLocationSetNodes
-extern __typeof (xmlXPtrNewLocationSetNodes) xmlXPtrNewLocationSetNodes __attribute((alias("xmlXPtrNewLocationSetNodes__internal_alias")));
-#else
-#ifndef xmlXPtrNewLocationSetNodes
-extern __typeof (xmlXPtrNewLocationSetNodes) xmlXPtrNewLocationSetNodes__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewLocationSetNodes xmlXPtrNewLocationSetNodes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewRange
-extern __typeof (xmlXPtrNewRange) xmlXPtrNewRange __attribute((alias("xmlXPtrNewRange__internal_alias")));
-#else
-#ifndef xmlXPtrNewRange
-extern __typeof (xmlXPtrNewRange) xmlXPtrNewRange__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewRange xmlXPtrNewRange__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewRangeNodeObject
-extern __typeof (xmlXPtrNewRangeNodeObject) xmlXPtrNewRangeNodeObject __attribute((alias("xmlXPtrNewRangeNodeObject__internal_alias")));
-#else
-#ifndef xmlXPtrNewRangeNodeObject
-extern __typeof (xmlXPtrNewRangeNodeObject) xmlXPtrNewRangeNodeObject__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewRangeNodeObject xmlXPtrNewRangeNodeObject__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewRangeNodePoint
-extern __typeof (xmlXPtrNewRangeNodePoint) xmlXPtrNewRangeNodePoint __attribute((alias("xmlXPtrNewRangeNodePoint__internal_alias")));
-#else
-#ifndef xmlXPtrNewRangeNodePoint
-extern __typeof (xmlXPtrNewRangeNodePoint) xmlXPtrNewRangeNodePoint__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewRangeNodePoint xmlXPtrNewRangeNodePoint__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewRangeNodes
-extern __typeof (xmlXPtrNewRangeNodes) xmlXPtrNewRangeNodes __attribute((alias("xmlXPtrNewRangeNodes__internal_alias")));
-#else
-#ifndef xmlXPtrNewRangeNodes
-extern __typeof (xmlXPtrNewRangeNodes) xmlXPtrNewRangeNodes__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewRangeNodes xmlXPtrNewRangeNodes__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewRangePointNode
-extern __typeof (xmlXPtrNewRangePointNode) xmlXPtrNewRangePointNode __attribute((alias("xmlXPtrNewRangePointNode__internal_alias")));
-#else
-#ifndef xmlXPtrNewRangePointNode
-extern __typeof (xmlXPtrNewRangePointNode) xmlXPtrNewRangePointNode__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewRangePointNode xmlXPtrNewRangePointNode__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrNewRangePoints
-extern __typeof (xmlXPtrNewRangePoints) xmlXPtrNewRangePoints __attribute((alias("xmlXPtrNewRangePoints__internal_alias")));
-#else
-#ifndef xmlXPtrNewRangePoints
-extern __typeof (xmlXPtrNewRangePoints) xmlXPtrNewRangePoints__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrNewRangePoints xmlXPtrNewRangePoints__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrRangeToFunction
-extern __typeof (xmlXPtrRangeToFunction) xmlXPtrRangeToFunction __attribute((alias("xmlXPtrRangeToFunction__internal_alias")));
-#else
-#ifndef xmlXPtrRangeToFunction
-extern __typeof (xmlXPtrRangeToFunction) xmlXPtrRangeToFunction__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrRangeToFunction xmlXPtrRangeToFunction__internal_alias
-#endif
-#endif
-#endif
-
-#if defined(LIBXML_XPTR_ENABLED)
-#ifdef bottom_xpointer
-#undef xmlXPtrWrapLocationSet
-extern __typeof (xmlXPtrWrapLocationSet) xmlXPtrWrapLocationSet __attribute((alias("xmlXPtrWrapLocationSet__internal_alias")));
-#else
-#ifndef xmlXPtrWrapLocationSet
-extern __typeof (xmlXPtrWrapLocationSet) xmlXPtrWrapLocationSet__internal_alias __attribute((visibility("hidden")));
-#define xmlXPtrWrapLocationSet xmlXPtrWrapLocationSet__internal_alias
-#endif
-#endif
-#endif
-
-
-#endif
-#endif
-#endif
-#endif
-#endif
-
diff --git a/external/libxml2_android/jni/libxml2/enc.h b/external/libxml2_android/jni/libxml2/enc.h
deleted file mode 100644
index 057d206d..00000000
--- a/external/libxml2_android/jni/libxml2/enc.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Summary: Internal Interfaces for encoding in libxml2
- * Description: this module describes a few interfaces which were
- * addded along with the API changes in 2.9.0
- * those are private routines at this point
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_ENC_H__
-#define __XML_ENC_H__
-
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-int xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out,
- xmlBufferPtr in, int len);
-int xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len);
-int xmlCharEncInput(xmlParserInputBufferPtr input, int flush);
-int xmlCharEncOutput(xmlOutputBufferPtr output, int init);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_ENC_H__ */
-
-
diff --git a/external/libxml2_android/jni/libxml2/encoding.c b/external/libxml2_android/jni/libxml2/encoding.c
deleted file mode 100644
index e49c7f89..00000000
--- a/external/libxml2_android/jni/libxml2/encoding.c
+++ /dev/null
@@ -1,4085 +0,0 @@
-/*
- * encoding.c : implements the encoding conversion functions needed for XML
- *
- * Related specs:
- * rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies
- * rfc2781 UTF-16, an encoding of ISO 10646, P. Hoffman, F. Yergeau
- * [ISO-10646] UTF-8 and UTF-16 in Annexes
- * [ISO-8859-1] ISO Latin-1 characters codes.
- * [UNICODE] The Unicode Consortium, "The Unicode Standard --
- * Worldwide Character Encoding -- Version 1.0", Addison-
- * Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is
- * described in Unicode Technical Report #4.
- * [US-ASCII] Coded Character Set--7-bit American Standard Code for
- * Information Interchange, ANSI X3.4-1986.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- *
- * Original code for IsoLatin1 and UTF-16 by "Martin J. Duerst" <duerst@w3.org>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#include <limits.h>
-
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef LIBXML_ICONV_ENABLED
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#endif
-#include <libxml/encoding.h>
-#include <libxml/xmlmemory.h>
-#ifdef LIBXML_HTML_ENABLED
-#include <libxml/HTMLparser.h>
-#endif
-#include <libxml/globals.h>
-#include <libxml/xmlerror.h>
-
-#include "buf.h"
-#include "enc.h"
-
-static xmlCharEncodingHandlerPtr xmlUTF16LEHandler = NULL;
-static xmlCharEncodingHandlerPtr xmlUTF16BEHandler = NULL;
-
-typedef struct _xmlCharEncodingAlias xmlCharEncodingAlias;
-typedef xmlCharEncodingAlias *xmlCharEncodingAliasPtr;
-struct _xmlCharEncodingAlias {
- const char *name;
- const char *alias;
-};
-
-static xmlCharEncodingAliasPtr xmlCharEncodingAliases = NULL;
-static int xmlCharEncodingAliasesNb = 0;
-static int xmlCharEncodingAliasesMax = 0;
-
-#if defined(LIBXML_ICONV_ENABLED) || defined(LIBXML_ICU_ENABLED)
-#if 0
-#define DEBUG_ENCODING /* Define this to get encoding traces */
-#endif
-#else
-#ifdef LIBXML_ISO8859X_ENABLED
-static void xmlRegisterCharEncodingHandlersISO8859x (void);
-#endif
-#endif
-
-static int xmlLittleEndian = 1;
-
-/**
- * xmlEncodingErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlEncodingErrMemory(const char *extra)
-{
- __xmlSimpleError(XML_FROM_I18N, XML_ERR_NO_MEMORY, NULL, NULL, extra);
-}
-
-/**
- * xmlErrEncoding:
- * @error: the error number
- * @msg: the error message
- *
- * n encoding error
- */
-static void LIBXML_ATTR_FORMAT(2,0)
-xmlEncodingErr(xmlParserErrors error, const char *msg, const char *val)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL,
- XML_FROM_I18N, error, XML_ERR_FATAL,
- NULL, 0, val, NULL, NULL, 0, 0, msg, val);
-}
-
-#ifdef LIBXML_ICU_ENABLED
-static uconv_t*
-openIcuConverter(const char* name, int toUnicode)
-{
- UErrorCode status = U_ZERO_ERROR;
- uconv_t *conv = (uconv_t *) xmlMalloc(sizeof(uconv_t));
- if (conv == NULL)
- return NULL;
-
- conv->uconv = ucnv_open(name, &status);
- if (U_FAILURE(status))
- goto error;
-
- status = U_ZERO_ERROR;
- if (toUnicode) {
- ucnv_setToUCallBack(conv->uconv, UCNV_TO_U_CALLBACK_STOP,
- NULL, NULL, NULL, &status);
- }
- else {
- ucnv_setFromUCallBack(conv->uconv, UCNV_FROM_U_CALLBACK_STOP,
- NULL, NULL, NULL, &status);
- }
- if (U_FAILURE(status))
- goto error;
-
- status = U_ZERO_ERROR;
- conv->utf8 = ucnv_open("UTF-8", &status);
- if (U_SUCCESS(status))
- return conv;
-
-error:
- if (conv->uconv)
- ucnv_close(conv->uconv);
- xmlFree(conv);
- return NULL;
-}
-
-static void
-closeIcuConverter(uconv_t *conv)
-{
- if (conv != NULL) {
- ucnv_close(conv->uconv);
- ucnv_close(conv->utf8);
- xmlFree(conv);
- }
-}
-#endif /* LIBXML_ICU_ENABLED */
-
-/************************************************************************
- * *
- * Conversions To/From UTF8 encoding *
- * *
- ************************************************************************/
-
-/**
- * asciiToUTF8:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of ASCII chars
- * @inlen: the length of @in
- *
- * Take a block of ASCII chars in and try to convert it to an UTF-8
- * block of chars out.
- * Returns 0 if success, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-static int
-asciiToUTF8(unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- unsigned char* outstart = out;
- const unsigned char* base = in;
- const unsigned char* processed = in;
- unsigned char* outend = out + *outlen;
- const unsigned char* inend;
- unsigned int c;
-
- inend = in + (*inlen);
- while ((in < inend) && (out - outstart + 5 < *outlen)) {
- c= *in++;
-
- if (out >= outend)
- break;
- if (c < 0x80) {
- *out++ = c;
- } else {
- *outlen = out - outstart;
- *inlen = processed - base;
- return(-1);
- }
-
- processed = (const unsigned char*) in;
- }
- *outlen = out - outstart;
- *inlen = processed - base;
- return(*outlen);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * UTF8Toascii:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and try to convert it to an ASCII
- * block of chars out.
- *
- * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-static int
-UTF8Toascii(unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- const unsigned char* processed = in;
- const unsigned char* outend;
- const unsigned char* outstart = out;
- const unsigned char* instart = in;
- const unsigned char* inend;
- unsigned int c, d;
- int trailing;
-
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1);
- if (in == NULL) {
- /*
- * initialization nothing to do
- */
- *outlen = 0;
- *inlen = 0;
- return(0);
- }
- inend = in + (*inlen);
- outend = out + (*outlen);
- while (in < inend) {
- d = *in++;
- if (d < 0x80) { c= d; trailing= 0; }
- else if (d < 0xC0) {
- /* trailing byte in leading position */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
- else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
- else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
- else {
- /* no chance for this in Ascii */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
-
- if (inend - in < trailing) {
- break;
- }
-
- for ( ; trailing; trailing--) {
- if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80))
- break;
- c <<= 6;
- c |= d & 0x3F;
- }
-
- /* assertion: c is a single UTF-4 value */
- if (c < 0x80) {
- if (out >= outend)
- break;
- *out++ = c;
- } else {
- /* no chance for this in Ascii */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- processed = in;
- }
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(*outlen);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * isolat1ToUTF8:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of ISO Latin 1 chars
- * @inlen: the length of @in
- *
- * Take a block of ISO Latin 1 chars in and try to convert it to an UTF-8
- * block of chars out.
- * Returns the number of bytes written if success, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-int
-isolat1ToUTF8(unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- unsigned char* outstart = out;
- const unsigned char* base = in;
- unsigned char* outend;
- const unsigned char* inend;
- const unsigned char* instop;
-
- if ((out == NULL) || (in == NULL) || (outlen == NULL) || (inlen == NULL))
- return(-1);
-
- outend = out + *outlen;
- inend = in + (*inlen);
- instop = inend;
-
- while ((in < inend) && (out < outend - 1)) {
- if (*in >= 0x80) {
- *out++ = (((*in) >> 6) & 0x1F) | 0xC0;
- *out++ = ((*in) & 0x3F) | 0x80;
- ++in;
- }
- if ((instop - in) > (outend - out)) instop = in + (outend - out);
- while ((in < instop) && (*in < 0x80)) {
- *out++ = *in++;
- }
- }
- if ((in < inend) && (out < outend) && (*in < 0x80)) {
- *out++ = *in++;
- }
- *outlen = out - outstart;
- *inlen = in - base;
- return(*outlen);
-}
-
-/**
- * UTF8ToUTF8:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @inb: a pointer to an array of UTF-8 chars
- * @inlenb: the length of @in in UTF-8 chars
- *
- * No op copy operation for UTF8 handling.
- *
- * Returns the number of bytes written, or -1 if lack of space.
- * The value of *inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- */
-static int
-UTF8ToUTF8(unsigned char* out, int *outlen,
- const unsigned char* inb, int *inlenb)
-{
- int len;
-
- if ((out == NULL) || (inb == NULL) || (outlen == NULL) || (inlenb == NULL))
- return(-1);
- if (*outlen > *inlenb) {
- len = *inlenb;
- } else {
- len = *outlen;
- }
- if (len < 0)
- return(-1);
-
- memcpy(out, inb, len);
-
- *outlen = len;
- *inlenb = len;
- return(*outlen);
-}
-
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * UTF8Toisolat1:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and try to convert it to an ISO Latin 1
- * block of chars out.
- *
- * Returns the number of bytes written if success, -2 if the transcoding fails,
- or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-int
-UTF8Toisolat1(unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- const unsigned char* processed = in;
- const unsigned char* outend;
- const unsigned char* outstart = out;
- const unsigned char* instart = in;
- const unsigned char* inend;
- unsigned int c, d;
- int trailing;
-
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1);
- if (in == NULL) {
- /*
- * initialization nothing to do
- */
- *outlen = 0;
- *inlen = 0;
- return(0);
- }
- inend = in + (*inlen);
- outend = out + (*outlen);
- while (in < inend) {
- d = *in++;
- if (d < 0x80) { c= d; trailing= 0; }
- else if (d < 0xC0) {
- /* trailing byte in leading position */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
- else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
- else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
- else {
- /* no chance for this in IsoLat1 */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
-
- if (inend - in < trailing) {
- break;
- }
-
- for ( ; trailing; trailing--) {
- if (in >= inend)
- break;
- if (((d= *in++) & 0xC0) != 0x80) {
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- c <<= 6;
- c |= d & 0x3F;
- }
-
- /* assertion: c is a single UTF-4 value */
- if (c <= 0xFF) {
- if (out >= outend)
- break;
- *out++ = c;
- } else {
- /* no chance for this in IsoLat1 */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- processed = in;
- }
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(*outlen);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * UTF16LEToUTF8:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @inb: a pointer to an array of UTF-16LE passwd as a byte array
- * @inlenb: the length of @in in UTF-16LE chars
- *
- * Take a block of UTF-16LE ushorts in and try to convert it to an UTF-8
- * block of chars out. This function assumes the endian property
- * is the same between the native type of this machine and the
- * inputed one.
- *
- * Returns the number of bytes written, or -1 if lack of space, or -2
- * if the transcoding fails (if *in is not a valid utf16 string)
- * The value of *inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- */
-static int
-UTF16LEToUTF8(unsigned char* out, int *outlen,
- const unsigned char* inb, int *inlenb)
-{
- unsigned char* outstart = out;
- const unsigned char* processed = inb;
- unsigned char* outend = out + *outlen;
- unsigned short* in = (unsigned short*) inb;
- unsigned short* inend;
- unsigned int c, d, inlen;
- unsigned char *tmp;
- int bits;
-
- if ((*inlenb % 2) == 1)
- (*inlenb)--;
- inlen = *inlenb / 2;
- inend = in + inlen;
- while ((in < inend) && (out - outstart + 5 < *outlen)) {
- if (xmlLittleEndian) {
- c= *in++;
- } else {
- tmp = (unsigned char *) in;
- c = *tmp++;
- c = c | (((unsigned int)*tmp) << 8);
- in++;
- }
- if ((c & 0xFC00) == 0xD800) { /* surrogates */
- if (in >= inend) { /* (in > inend) shouldn't happens */
- break;
- }
- if (xmlLittleEndian) {
- d = *in++;
- } else {
- tmp = (unsigned char *) in;
- d = *tmp++;
- d = d | (((unsigned int)*tmp) << 8);
- in++;
- }
- if ((d & 0xFC00) == 0xDC00) {
- c &= 0x03FF;
- c <<= 10;
- c |= d & 0x03FF;
- c += 0x10000;
- }
- else {
- *outlen = out - outstart;
- *inlenb = processed - inb;
- return(-2);
- }
- }
-
- /* assertion: c is a single UTF-4 value */
- if (out >= outend)
- break;
- if (c < 0x80) { *out++= c; bits= -6; }
- else if (c < 0x800) { *out++= ((c >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (c < 0x10000) { *out++= ((c >> 12) & 0x0F) | 0xE0; bits= 6; }
- else { *out++= ((c >> 18) & 0x07) | 0xF0; bits= 12; }
-
- for ( ; bits >= 0; bits-= 6) {
- if (out >= outend)
- break;
- *out++= ((c >> bits) & 0x3F) | 0x80;
- }
- processed = (const unsigned char*) in;
- }
- *outlen = out - outstart;
- *inlenb = processed - inb;
- return(*outlen);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * UTF8ToUTF16LE:
- * @outb: a pointer to an array of bytes to store the result
- * @outlen: the length of @outb
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and try to convert it to an UTF-16LE
- * block of chars out.
- *
- * Returns the number of bytes written, or -1 if lack of space, or -2
- * if the transcoding failed.
- */
-static int
-UTF8ToUTF16LE(unsigned char* outb, int *outlen,
- const unsigned char* in, int *inlen)
-{
- unsigned short* out = (unsigned short*) outb;
- const unsigned char* processed = in;
- const unsigned char *const instart = in;
- unsigned short* outstart= out;
- unsigned short* outend;
- const unsigned char* inend;
- unsigned int c, d;
- int trailing;
- unsigned char *tmp;
- unsigned short tmp1, tmp2;
-
- /* UTF16LE encoding has no BOM */
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1);
- if (in == NULL) {
- *outlen = 0;
- *inlen = 0;
- return(0);
- }
- inend= in + *inlen;
- outend = out + (*outlen / 2);
- while (in < inend) {
- d= *in++;
- if (d < 0x80) { c= d; trailing= 0; }
- else if (d < 0xC0) {
- /* trailing byte in leading position */
- *outlen = (out - outstart) * 2;
- *inlen = processed - instart;
- return(-2);
- } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
- else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
- else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
- else {
- /* no chance for this in UTF-16 */
- *outlen = (out - outstart) * 2;
- *inlen = processed - instart;
- return(-2);
- }
-
- if (inend - in < trailing) {
- break;
- }
-
- for ( ; trailing; trailing--) {
- if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80))
- break;
- c <<= 6;
- c |= d & 0x3F;
- }
-
- /* assertion: c is a single UTF-4 value */
- if (c < 0x10000) {
- if (out >= outend)
- break;
- if (xmlLittleEndian) {
- *out++ = c;
- } else {
- tmp = (unsigned char *) out;
- *tmp = c ;
- *(tmp + 1) = c >> 8 ;
- out++;
- }
- }
- else if (c < 0x110000) {
- if (out+1 >= outend)
- break;
- c -= 0x10000;
- if (xmlLittleEndian) {
- *out++ = 0xD800 | (c >> 10);
- *out++ = 0xDC00 | (c & 0x03FF);
- } else {
- tmp1 = 0xD800 | (c >> 10);
- tmp = (unsigned char *) out;
- *tmp = (unsigned char) tmp1;
- *(tmp + 1) = tmp1 >> 8;
- out++;
-
- tmp2 = 0xDC00 | (c & 0x03FF);
- tmp = (unsigned char *) out;
- *tmp = (unsigned char) tmp2;
- *(tmp + 1) = tmp2 >> 8;
- out++;
- }
- }
- else
- break;
- processed = in;
- }
- *outlen = (out - outstart) * 2;
- *inlen = processed - instart;
- return(*outlen);
-}
-
-/**
- * UTF8ToUTF16:
- * @outb: a pointer to an array of bytes to store the result
- * @outlen: the length of @outb
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and try to convert it to an UTF-16
- * block of chars out.
- *
- * Returns the number of bytes written, or -1 if lack of space, or -2
- * if the transcoding failed.
- */
-static int
-UTF8ToUTF16(unsigned char* outb, int *outlen,
- const unsigned char* in, int *inlen)
-{
- if (in == NULL) {
- /*
- * initialization, add the Byte Order Mark for UTF-16LE
- */
- if (*outlen >= 2) {
- outb[0] = 0xFF;
- outb[1] = 0xFE;
- *outlen = 2;
- *inlen = 0;
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "Added FFFE Byte Order Mark\n");
-#endif
- return(2);
- }
- *outlen = 0;
- *inlen = 0;
- return(0);
- }
- return (UTF8ToUTF16LE(outb, outlen, in, inlen));
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * UTF16BEToUTF8:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @inb: a pointer to an array of UTF-16 passed as a byte array
- * @inlenb: the length of @in in UTF-16 chars
- *
- * Take a block of UTF-16 ushorts in and try to convert it to an UTF-8
- * block of chars out. This function assumes the endian property
- * is the same between the native type of this machine and the
- * inputed one.
- *
- * Returns the number of bytes written, or -1 if lack of space, or -2
- * if the transcoding fails (if *in is not a valid utf16 string)
- * The value of *inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- */
-static int
-UTF16BEToUTF8(unsigned char* out, int *outlen,
- const unsigned char* inb, int *inlenb)
-{
- unsigned char* outstart = out;
- const unsigned char* processed = inb;
- unsigned char* outend = out + *outlen;
- unsigned short* in = (unsigned short*) inb;
- unsigned short* inend;
- unsigned int c, d, inlen;
- unsigned char *tmp;
- int bits;
-
- if ((*inlenb % 2) == 1)
- (*inlenb)--;
- inlen = *inlenb / 2;
- inend= in + inlen;
- while (in < inend) {
- if (xmlLittleEndian) {
- tmp = (unsigned char *) in;
- c = *tmp++;
- c = c << 8;
- c = c | (unsigned int) *tmp;
- in++;
- } else {
- c= *in++;
- }
- if ((c & 0xFC00) == 0xD800) { /* surrogates */
- if (in >= inend) { /* (in > inend) shouldn't happens */
- *outlen = out - outstart;
- *inlenb = processed - inb;
- return(-2);
- }
- if (xmlLittleEndian) {
- tmp = (unsigned char *) in;
- d = *tmp++;
- d = d << 8;
- d = d | (unsigned int) *tmp;
- in++;
- } else {
- d= *in++;
- }
- if ((d & 0xFC00) == 0xDC00) {
- c &= 0x03FF;
- c <<= 10;
- c |= d & 0x03FF;
- c += 0x10000;
- }
- else {
- *outlen = out - outstart;
- *inlenb = processed - inb;
- return(-2);
- }
- }
-
- /* assertion: c is a single UTF-4 value */
- if (out >= outend)
- break;
- if (c < 0x80) { *out++= c; bits= -6; }
- else if (c < 0x800) { *out++= ((c >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (c < 0x10000) { *out++= ((c >> 12) & 0x0F) | 0xE0; bits= 6; }
- else { *out++= ((c >> 18) & 0x07) | 0xF0; bits= 12; }
-
- for ( ; bits >= 0; bits-= 6) {
- if (out >= outend)
- break;
- *out++= ((c >> bits) & 0x3F) | 0x80;
- }
- processed = (const unsigned char*) in;
- }
- *outlen = out - outstart;
- *inlenb = processed - inb;
- return(*outlen);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * UTF8ToUTF16BE:
- * @outb: a pointer to an array of bytes to store the result
- * @outlen: the length of @outb
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and try to convert it to an UTF-16BE
- * block of chars out.
- *
- * Returns the number of byte written, or -1 by lack of space, or -2
- * if the transcoding failed.
- */
-static int
-UTF8ToUTF16BE(unsigned char* outb, int *outlen,
- const unsigned char* in, int *inlen)
-{
- unsigned short* out = (unsigned short*) outb;
- const unsigned char* processed = in;
- const unsigned char *const instart = in;
- unsigned short* outstart= out;
- unsigned short* outend;
- const unsigned char* inend;
- unsigned int c, d;
- int trailing;
- unsigned char *tmp;
- unsigned short tmp1, tmp2;
-
- /* UTF-16BE has no BOM */
- if ((outb == NULL) || (outlen == NULL) || (inlen == NULL)) return(-1);
- if (in == NULL) {
- *outlen = 0;
- *inlen = 0;
- return(0);
- }
- inend= in + *inlen;
- outend = out + (*outlen / 2);
- while (in < inend) {
- d= *in++;
- if (d < 0x80) { c= d; trailing= 0; }
- else if (d < 0xC0) {
- /* trailing byte in leading position */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- } else if (d < 0xE0) { c= d & 0x1F; trailing= 1; }
- else if (d < 0xF0) { c= d & 0x0F; trailing= 2; }
- else if (d < 0xF8) { c= d & 0x07; trailing= 3; }
- else {
- /* no chance for this in UTF-16 */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
-
- if (inend - in < trailing) {
- break;
- }
-
- for ( ; trailing; trailing--) {
- if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80)) break;
- c <<= 6;
- c |= d & 0x3F;
- }
-
- /* assertion: c is a single UTF-4 value */
- if (c < 0x10000) {
- if (out >= outend) break;
- if (xmlLittleEndian) {
- tmp = (unsigned char *) out;
- *tmp = c >> 8;
- *(tmp + 1) = c;
- out++;
- } else {
- *out++ = c;
- }
- }
- else if (c < 0x110000) {
- if (out+1 >= outend) break;
- c -= 0x10000;
- if (xmlLittleEndian) {
- tmp1 = 0xD800 | (c >> 10);
- tmp = (unsigned char *) out;
- *tmp = tmp1 >> 8;
- *(tmp + 1) = (unsigned char) tmp1;
- out++;
-
- tmp2 = 0xDC00 | (c & 0x03FF);
- tmp = (unsigned char *) out;
- *tmp = tmp2 >> 8;
- *(tmp + 1) = (unsigned char) tmp2;
- out++;
- } else {
- *out++ = 0xD800 | (c >> 10);
- *out++ = 0xDC00 | (c & 0x03FF);
- }
- }
- else
- break;
- processed = in;
- }
- *outlen = (out - outstart) * 2;
- *inlen = processed - instart;
- return(*outlen);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- * *
- * Generic encoding handling routines *
- * *
- ************************************************************************/
-
-/**
- * xmlDetectCharEncoding:
- * @in: a pointer to the first bytes of the XML entity, must be at least
- * 2 bytes long (at least 4 if encoding is UTF4 variant).
- * @len: pointer to the length of the buffer
- *
- * Guess the encoding of the entity using the first bytes of the entity content
- * according to the non-normative appendix F of the XML-1.0 recommendation.
- *
- * Returns one of the XML_CHAR_ENCODING_... values.
- */
-xmlCharEncoding
-xmlDetectCharEncoding(const unsigned char* in, int len)
-{
- if (in == NULL)
- return(XML_CHAR_ENCODING_NONE);
- if (len >= 4) {
- if ((in[0] == 0x00) && (in[1] == 0x00) &&
- (in[2] == 0x00) && (in[3] == 0x3C))
- return(XML_CHAR_ENCODING_UCS4BE);
- if ((in[0] == 0x3C) && (in[1] == 0x00) &&
- (in[2] == 0x00) && (in[3] == 0x00))
- return(XML_CHAR_ENCODING_UCS4LE);
- if ((in[0] == 0x00) && (in[1] == 0x00) &&
- (in[2] == 0x3C) && (in[3] == 0x00))
- return(XML_CHAR_ENCODING_UCS4_2143);
- if ((in[0] == 0x00) && (in[1] == 0x3C) &&
- (in[2] == 0x00) && (in[3] == 0x00))
- return(XML_CHAR_ENCODING_UCS4_3412);
- if ((in[0] == 0x4C) && (in[1] == 0x6F) &&
- (in[2] == 0xA7) && (in[3] == 0x94))
- return(XML_CHAR_ENCODING_EBCDIC);
- if ((in[0] == 0x3C) && (in[1] == 0x3F) &&
- (in[2] == 0x78) && (in[3] == 0x6D))
- return(XML_CHAR_ENCODING_UTF8);
- /*
- * Although not part of the recommendation, we also
- * attempt an "auto-recognition" of UTF-16LE and
- * UTF-16BE encodings.
- */
- if ((in[0] == 0x3C) && (in[1] == 0x00) &&
- (in[2] == 0x3F) && (in[3] == 0x00))
- return(XML_CHAR_ENCODING_UTF16LE);
- if ((in[0] == 0x00) && (in[1] == 0x3C) &&
- (in[2] == 0x00) && (in[3] == 0x3F))
- return(XML_CHAR_ENCODING_UTF16BE);
- }
- if (len >= 3) {
- /*
- * Errata on XML-1.0 June 20 2001
- * We now allow an UTF8 encoded BOM
- */
- if ((in[0] == 0xEF) && (in[1] == 0xBB) &&
- (in[2] == 0xBF))
- return(XML_CHAR_ENCODING_UTF8);
- }
- /* For UTF-16 we can recognize by the BOM */
- if (len >= 2) {
- if ((in[0] == 0xFE) && (in[1] == 0xFF))
- return(XML_CHAR_ENCODING_UTF16BE);
- if ((in[0] == 0xFF) && (in[1] == 0xFE))
- return(XML_CHAR_ENCODING_UTF16LE);
- }
- return(XML_CHAR_ENCODING_NONE);
-}
-
-/**
- * xmlCleanupEncodingAliases:
- *
- * Unregisters all aliases
- */
-void
-xmlCleanupEncodingAliases(void) {
- int i;
-
- if (xmlCharEncodingAliases == NULL)
- return;
-
- for (i = 0;i < xmlCharEncodingAliasesNb;i++) {
- if (xmlCharEncodingAliases[i].name != NULL)
- xmlFree((char *) xmlCharEncodingAliases[i].name);
- if (xmlCharEncodingAliases[i].alias != NULL)
- xmlFree((char *) xmlCharEncodingAliases[i].alias);
- }
- xmlCharEncodingAliasesNb = 0;
- xmlCharEncodingAliasesMax = 0;
- xmlFree(xmlCharEncodingAliases);
- xmlCharEncodingAliases = NULL;
-}
-
-/**
- * xmlGetEncodingAlias:
- * @alias: the alias name as parsed, in UTF-8 format (ASCII actually)
- *
- * Lookup an encoding name for the given alias.
- *
- * Returns NULL if not found, otherwise the original name
- */
-const char *
-xmlGetEncodingAlias(const char *alias) {
- int i;
- char upper[100];
-
- if (alias == NULL)
- return(NULL);
-
- if (xmlCharEncodingAliases == NULL)
- return(NULL);
-
- for (i = 0;i < 99;i++) {
- upper[i] = toupper(alias[i]);
- if (upper[i] == 0) break;
- }
- upper[i] = 0;
-
- /*
- * Walk down the list looking for a definition of the alias
- */
- for (i = 0;i < xmlCharEncodingAliasesNb;i++) {
- if (!strcmp(xmlCharEncodingAliases[i].alias, upper)) {
- return(xmlCharEncodingAliases[i].name);
- }
- }
- return(NULL);
-}
-
-/**
- * xmlAddEncodingAlias:
- * @name: the encoding name as parsed, in UTF-8 format (ASCII actually)
- * @alias: the alias name as parsed, in UTF-8 format (ASCII actually)
- *
- * Registers an alias @alias for an encoding named @name. Existing alias
- * will be overwritten.
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-xmlAddEncodingAlias(const char *name, const char *alias) {
- int i;
- char upper[100];
-
- if ((name == NULL) || (alias == NULL))
- return(-1);
-
- for (i = 0;i < 99;i++) {
- upper[i] = toupper(alias[i]);
- if (upper[i] == 0) break;
- }
- upper[i] = 0;
-
- if (xmlCharEncodingAliases == NULL) {
- xmlCharEncodingAliasesNb = 0;
- xmlCharEncodingAliasesMax = 20;
- xmlCharEncodingAliases = (xmlCharEncodingAliasPtr)
- xmlMalloc(xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias));
- if (xmlCharEncodingAliases == NULL)
- return(-1);
- } else if (xmlCharEncodingAliasesNb >= xmlCharEncodingAliasesMax) {
- xmlCharEncodingAliasesMax *= 2;
- xmlCharEncodingAliases = (xmlCharEncodingAliasPtr)
- xmlRealloc(xmlCharEncodingAliases,
- xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias));
- }
- /*
- * Walk down the list looking for a definition of the alias
- */
- for (i = 0;i < xmlCharEncodingAliasesNb;i++) {
- if (!strcmp(xmlCharEncodingAliases[i].alias, upper)) {
- /*
- * Replace the definition.
- */
- xmlFree((char *) xmlCharEncodingAliases[i].name);
- xmlCharEncodingAliases[i].name = xmlMemStrdup(name);
- return(0);
- }
- }
- /*
- * Add the definition
- */
- xmlCharEncodingAliases[xmlCharEncodingAliasesNb].name = xmlMemStrdup(name);
- xmlCharEncodingAliases[xmlCharEncodingAliasesNb].alias = xmlMemStrdup(upper);
- xmlCharEncodingAliasesNb++;
- return(0);
-}
-
-/**
- * xmlDelEncodingAlias:
- * @alias: the alias name as parsed, in UTF-8 format (ASCII actually)
- *
- * Unregisters an encoding alias @alias
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-xmlDelEncodingAlias(const char *alias) {
- int i;
-
- if (alias == NULL)
- return(-1);
-
- if (xmlCharEncodingAliases == NULL)
- return(-1);
- /*
- * Walk down the list looking for a definition of the alias
- */
- for (i = 0;i < xmlCharEncodingAliasesNb;i++) {
- if (!strcmp(xmlCharEncodingAliases[i].alias, alias)) {
- xmlFree((char *) xmlCharEncodingAliases[i].name);
- xmlFree((char *) xmlCharEncodingAliases[i].alias);
- xmlCharEncodingAliasesNb--;
- memmove(&xmlCharEncodingAliases[i], &xmlCharEncodingAliases[i + 1],
- sizeof(xmlCharEncodingAlias) * (xmlCharEncodingAliasesNb - i));
- return(0);
- }
- }
- return(-1);
-}
-
-/**
- * xmlParseCharEncoding:
- * @name: the encoding name as parsed, in UTF-8 format (ASCII actually)
- *
- * Compare the string to the encoding schemes already known. Note
- * that the comparison is case insensitive accordingly to the section
- * [XML] 4.3.3 Character Encoding in Entities.
- *
- * Returns one of the XML_CHAR_ENCODING_... values or XML_CHAR_ENCODING_NONE
- * if not recognized.
- */
-xmlCharEncoding
-xmlParseCharEncoding(const char* name)
-{
- const char *alias;
- char upper[500];
- int i;
-
- if (name == NULL)
- return(XML_CHAR_ENCODING_NONE);
-
- /*
- * Do the alias resolution
- */
- alias = xmlGetEncodingAlias(name);
- if (alias != NULL)
- name = alias;
-
- for (i = 0;i < 499;i++) {
- upper[i] = toupper(name[i]);
- if (upper[i] == 0) break;
- }
- upper[i] = 0;
-
- if (!strcmp(upper, "")) return(XML_CHAR_ENCODING_NONE);
- if (!strcmp(upper, "UTF-8")) return(XML_CHAR_ENCODING_UTF8);
- if (!strcmp(upper, "UTF8")) return(XML_CHAR_ENCODING_UTF8);
-
- /*
- * NOTE: if we were able to parse this, the endianness of UTF16 is
- * already found and in use
- */
- if (!strcmp(upper, "UTF-16")) return(XML_CHAR_ENCODING_UTF16LE);
- if (!strcmp(upper, "UTF16")) return(XML_CHAR_ENCODING_UTF16LE);
-
- if (!strcmp(upper, "ISO-10646-UCS-2")) return(XML_CHAR_ENCODING_UCS2);
- if (!strcmp(upper, "UCS-2")) return(XML_CHAR_ENCODING_UCS2);
- if (!strcmp(upper, "UCS2")) return(XML_CHAR_ENCODING_UCS2);
-
- /*
- * NOTE: if we were able to parse this, the endianness of UCS4 is
- * already found and in use
- */
- if (!strcmp(upper, "ISO-10646-UCS-4")) return(XML_CHAR_ENCODING_UCS4LE);
- if (!strcmp(upper, "UCS-4")) return(XML_CHAR_ENCODING_UCS4LE);
- if (!strcmp(upper, "UCS4")) return(XML_CHAR_ENCODING_UCS4LE);
-
-
- if (!strcmp(upper, "ISO-8859-1")) return(XML_CHAR_ENCODING_8859_1);
- if (!strcmp(upper, "ISO-LATIN-1")) return(XML_CHAR_ENCODING_8859_1);
- if (!strcmp(upper, "ISO LATIN 1")) return(XML_CHAR_ENCODING_8859_1);
-
- if (!strcmp(upper, "ISO-8859-2")) return(XML_CHAR_ENCODING_8859_2);
- if (!strcmp(upper, "ISO-LATIN-2")) return(XML_CHAR_ENCODING_8859_2);
- if (!strcmp(upper, "ISO LATIN 2")) return(XML_CHAR_ENCODING_8859_2);
-
- if (!strcmp(upper, "ISO-8859-3")) return(XML_CHAR_ENCODING_8859_3);
- if (!strcmp(upper, "ISO-8859-4")) return(XML_CHAR_ENCODING_8859_4);
- if (!strcmp(upper, "ISO-8859-5")) return(XML_CHAR_ENCODING_8859_5);
- if (!strcmp(upper, "ISO-8859-6")) return(XML_CHAR_ENCODING_8859_6);
- if (!strcmp(upper, "ISO-8859-7")) return(XML_CHAR_ENCODING_8859_7);
- if (!strcmp(upper, "ISO-8859-8")) return(XML_CHAR_ENCODING_8859_8);
- if (!strcmp(upper, "ISO-8859-9")) return(XML_CHAR_ENCODING_8859_9);
-
- if (!strcmp(upper, "ISO-2022-JP")) return(XML_CHAR_ENCODING_2022_JP);
- if (!strcmp(upper, "SHIFT_JIS")) return(XML_CHAR_ENCODING_SHIFT_JIS);
- if (!strcmp(upper, "EUC-JP")) return(XML_CHAR_ENCODING_EUC_JP);
-
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext, "Unknown encoding %s\n", name);
-#endif
- return(XML_CHAR_ENCODING_ERROR);
-}
-
-/**
- * xmlGetCharEncodingName:
- * @enc: the encoding
- *
- * The "canonical" name for XML encoding.
- * C.f. http://www.w3.org/TR/REC-xml#charencoding
- * Section 4.3.3 Character Encoding in Entities
- *
- * Returns the canonical name for the given encoding
- */
-
-const char*
-xmlGetCharEncodingName(xmlCharEncoding enc) {
- switch (enc) {
- case XML_CHAR_ENCODING_ERROR:
- return(NULL);
- case XML_CHAR_ENCODING_NONE:
- return(NULL);
- case XML_CHAR_ENCODING_UTF8:
- return("UTF-8");
- case XML_CHAR_ENCODING_UTF16LE:
- return("UTF-16");
- case XML_CHAR_ENCODING_UTF16BE:
- return("UTF-16");
- case XML_CHAR_ENCODING_EBCDIC:
- return("EBCDIC");
- case XML_CHAR_ENCODING_UCS4LE:
- return("ISO-10646-UCS-4");
- case XML_CHAR_ENCODING_UCS4BE:
- return("ISO-10646-UCS-4");
- case XML_CHAR_ENCODING_UCS4_2143:
- return("ISO-10646-UCS-4");
- case XML_CHAR_ENCODING_UCS4_3412:
- return("ISO-10646-UCS-4");
- case XML_CHAR_ENCODING_UCS2:
- return("ISO-10646-UCS-2");
- case XML_CHAR_ENCODING_8859_1:
- return("ISO-8859-1");
- case XML_CHAR_ENCODING_8859_2:
- return("ISO-8859-2");
- case XML_CHAR_ENCODING_8859_3:
- return("ISO-8859-3");
- case XML_CHAR_ENCODING_8859_4:
- return("ISO-8859-4");
- case XML_CHAR_ENCODING_8859_5:
- return("ISO-8859-5");
- case XML_CHAR_ENCODING_8859_6:
- return("ISO-8859-6");
- case XML_CHAR_ENCODING_8859_7:
- return("ISO-8859-7");
- case XML_CHAR_ENCODING_8859_8:
- return("ISO-8859-8");
- case XML_CHAR_ENCODING_8859_9:
- return("ISO-8859-9");
- case XML_CHAR_ENCODING_2022_JP:
- return("ISO-2022-JP");
- case XML_CHAR_ENCODING_SHIFT_JIS:
- return("Shift-JIS");
- case XML_CHAR_ENCODING_EUC_JP:
- return("EUC-JP");
- case XML_CHAR_ENCODING_ASCII:
- return(NULL);
- }
- return(NULL);
-}
-
-/************************************************************************
- * *
- * Char encoding handlers *
- * *
- ************************************************************************/
-
-
-/* the size should be growable, but it's not a big deal ... */
-#define MAX_ENCODING_HANDLERS 50
-static xmlCharEncodingHandlerPtr *handlers = NULL;
-static int nbCharEncodingHandler = 0;
-
-/*
- * The default is UTF-8 for XML, that's also the default used for the
- * parser internals, so the default encoding handler is NULL
- */
-
-static xmlCharEncodingHandlerPtr xmlDefaultCharEncodingHandler = NULL;
-
-/**
- * xmlNewCharEncodingHandler:
- * @name: the encoding name, in UTF-8 format (ASCII actually)
- * @input: the xmlCharEncodingInputFunc to read that encoding
- * @output: the xmlCharEncodingOutputFunc to write that encoding
- *
- * Create and registers an xmlCharEncodingHandler.
- *
- * Returns the xmlCharEncodingHandlerPtr created (or NULL in case of error).
- */
-xmlCharEncodingHandlerPtr
-xmlNewCharEncodingHandler(const char *name,
- xmlCharEncodingInputFunc input,
- xmlCharEncodingOutputFunc output) {
- xmlCharEncodingHandlerPtr handler;
- const char *alias;
- char upper[500];
- int i;
- char *up = NULL;
-
- /*
- * Do the alias resolution
- */
- alias = xmlGetEncodingAlias(name);
- if (alias != NULL)
- name = alias;
-
- /*
- * Keep only the uppercase version of the encoding.
- */
- if (name == NULL) {
- xmlEncodingErr(XML_I18N_NO_NAME,
- "xmlNewCharEncodingHandler : no name !\n", NULL);
- return(NULL);
- }
- for (i = 0;i < 499;i++) {
- upper[i] = toupper(name[i]);
- if (upper[i] == 0) break;
- }
- upper[i] = 0;
- up = xmlMemStrdup(upper);
- if (up == NULL) {
- xmlEncodingErrMemory("xmlNewCharEncodingHandler : out of memory !\n");
- return(NULL);
- }
-
- /*
- * allocate and fill-up an handler block.
- */
- handler = (xmlCharEncodingHandlerPtr)
- xmlMalloc(sizeof(xmlCharEncodingHandler));
- if (handler == NULL) {
- xmlFree(up);
- xmlEncodingErrMemory("xmlNewCharEncodingHandler : out of memory !\n");
- return(NULL);
- }
- memset(handler, 0, sizeof(xmlCharEncodingHandler));
- handler->input = input;
- handler->output = output;
- handler->name = up;
-
-#ifdef LIBXML_ICONV_ENABLED
- handler->iconv_in = NULL;
- handler->iconv_out = NULL;
-#endif
-#ifdef LIBXML_ICU_ENABLED
- handler->uconv_in = NULL;
- handler->uconv_out = NULL;
-#endif
-
- /*
- * registers and returns the handler.
- */
- xmlRegisterCharEncodingHandler(handler);
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "Registered encoding handler for %s\n", name);
-#endif
- return(handler);
-}
-
-/**
- * xmlInitCharEncodingHandlers:
- *
- * Initialize the char encoding support, it registers the default
- * encoding supported.
- * NOTE: while public, this function usually doesn't need to be called
- * in normal processing.
- */
-void
-xmlInitCharEncodingHandlers(void) {
- unsigned short int tst = 0x1234;
- unsigned char *ptr = (unsigned char *) &tst;
-
- if (handlers != NULL) return;
-
- handlers = (xmlCharEncodingHandlerPtr *)
- xmlMalloc(MAX_ENCODING_HANDLERS * sizeof(xmlCharEncodingHandlerPtr));
-
- if (*ptr == 0x12) xmlLittleEndian = 0;
- else if (*ptr == 0x34) xmlLittleEndian = 1;
- else {
- xmlEncodingErr(XML_ERR_INTERNAL_ERROR,
- "Odd problem at endianness detection\n", NULL);
- }
-
- if (handlers == NULL) {
- xmlEncodingErrMemory("xmlInitCharEncodingHandlers : out of memory !\n");
- return;
- }
- xmlNewCharEncodingHandler("UTF-8", UTF8ToUTF8, UTF8ToUTF8);
-#ifdef LIBXML_OUTPUT_ENABLED
- xmlUTF16LEHandler =
- xmlNewCharEncodingHandler("UTF-16LE", UTF16LEToUTF8, UTF8ToUTF16LE);
- xmlUTF16BEHandler =
- xmlNewCharEncodingHandler("UTF-16BE", UTF16BEToUTF8, UTF8ToUTF16BE);
- xmlNewCharEncodingHandler("UTF-16", UTF16LEToUTF8, UTF8ToUTF16);
- xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, UTF8Toisolat1);
- xmlNewCharEncodingHandler("ASCII", asciiToUTF8, UTF8Toascii);
- xmlNewCharEncodingHandler("US-ASCII", asciiToUTF8, UTF8Toascii);
-#ifdef LIBXML_HTML_ENABLED
- xmlNewCharEncodingHandler("HTML", NULL, UTF8ToHtml);
-#endif
-#else
- xmlUTF16LEHandler =
- xmlNewCharEncodingHandler("UTF-16LE", UTF16LEToUTF8, NULL);
- xmlUTF16BEHandler =
- xmlNewCharEncodingHandler("UTF-16BE", UTF16BEToUTF8, NULL);
- xmlNewCharEncodingHandler("UTF-16", UTF16LEToUTF8, NULL);
- xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, NULL);
- xmlNewCharEncodingHandler("ASCII", asciiToUTF8, NULL);
- xmlNewCharEncodingHandler("US-ASCII", asciiToUTF8, NULL);
-#endif /* LIBXML_OUTPUT_ENABLED */
-#if !defined(LIBXML_ICONV_ENABLED) && !defined(LIBXML_ICU_ENABLED)
-#ifdef LIBXML_ISO8859X_ENABLED
- xmlRegisterCharEncodingHandlersISO8859x ();
-#endif
-#endif
-
-}
-
-/**
- * xmlCleanupCharEncodingHandlers:
- *
- * Cleanup the memory allocated for the char encoding support, it
- * unregisters all the encoding handlers and the aliases.
- */
-void
-xmlCleanupCharEncodingHandlers(void) {
- xmlCleanupEncodingAliases();
-
- if (handlers == NULL) return;
-
- for (;nbCharEncodingHandler > 0;) {
- nbCharEncodingHandler--;
- if (handlers[nbCharEncodingHandler] != NULL) {
- if (handlers[nbCharEncodingHandler]->name != NULL)
- xmlFree(handlers[nbCharEncodingHandler]->name);
- xmlFree(handlers[nbCharEncodingHandler]);
- }
- }
- xmlFree(handlers);
- handlers = NULL;
- nbCharEncodingHandler = 0;
- xmlDefaultCharEncodingHandler = NULL;
-}
-
-/**
- * xmlRegisterCharEncodingHandler:
- * @handler: the xmlCharEncodingHandlerPtr handler block
- *
- * Register the char encoding handler, surprising, isn't it ?
- */
-void
-xmlRegisterCharEncodingHandler(xmlCharEncodingHandlerPtr handler) {
- if (handlers == NULL) xmlInitCharEncodingHandlers();
- if ((handler == NULL) || (handlers == NULL)) {
- xmlEncodingErr(XML_I18N_NO_HANDLER,
- "xmlRegisterCharEncodingHandler: NULL handler !\n", NULL);
- return;
- }
-
- if (nbCharEncodingHandler >= MAX_ENCODING_HANDLERS) {
- xmlEncodingErr(XML_I18N_EXCESS_HANDLER,
- "xmlRegisterCharEncodingHandler: Too many handler registered, see %s\n",
- "MAX_ENCODING_HANDLERS");
- return;
- }
- handlers[nbCharEncodingHandler++] = handler;
-}
-
-/**
- * xmlGetCharEncodingHandler:
- * @enc: an xmlCharEncoding value.
- *
- * Search in the registered set the handler able to read/write that encoding.
- *
- * Returns the handler or NULL if not found
- */
-xmlCharEncodingHandlerPtr
-xmlGetCharEncodingHandler(xmlCharEncoding enc) {
- xmlCharEncodingHandlerPtr handler;
-
- if (handlers == NULL) xmlInitCharEncodingHandlers();
- switch (enc) {
- case XML_CHAR_ENCODING_ERROR:
- return(NULL);
- case XML_CHAR_ENCODING_NONE:
- return(NULL);
- case XML_CHAR_ENCODING_UTF8:
- return(NULL);
- case XML_CHAR_ENCODING_UTF16LE:
- return(xmlUTF16LEHandler);
- case XML_CHAR_ENCODING_UTF16BE:
- return(xmlUTF16BEHandler);
- case XML_CHAR_ENCODING_EBCDIC:
- handler = xmlFindCharEncodingHandler("EBCDIC");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("ebcdic");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("EBCDIC-US");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("IBM-037");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_UCS4BE:
- handler = xmlFindCharEncodingHandler("ISO-10646-UCS-4");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("UCS-4");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("UCS4");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_UCS4LE:
- handler = xmlFindCharEncodingHandler("ISO-10646-UCS-4");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("UCS-4");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("UCS4");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_UCS4_2143:
- break;
- case XML_CHAR_ENCODING_UCS4_3412:
- break;
- case XML_CHAR_ENCODING_UCS2:
- handler = xmlFindCharEncodingHandler("ISO-10646-UCS-2");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("UCS-2");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("UCS2");
- if (handler != NULL) return(handler);
- break;
-
- /*
- * We used to keep ISO Latin encodings native in the
- * generated data. This led to so many problems that
- * this has been removed. One can still change this
- * back by registering no-ops encoders for those
- */
- case XML_CHAR_ENCODING_8859_1:
- handler = xmlFindCharEncodingHandler("ISO-8859-1");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_8859_2:
- handler = xmlFindCharEncodingHandler("ISO-8859-2");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_8859_3:
- handler = xmlFindCharEncodingHandler("ISO-8859-3");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_8859_4:
- handler = xmlFindCharEncodingHandler("ISO-8859-4");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_8859_5:
- handler = xmlFindCharEncodingHandler("ISO-8859-5");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_8859_6:
- handler = xmlFindCharEncodingHandler("ISO-8859-6");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_8859_7:
- handler = xmlFindCharEncodingHandler("ISO-8859-7");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_8859_8:
- handler = xmlFindCharEncodingHandler("ISO-8859-8");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_8859_9:
- handler = xmlFindCharEncodingHandler("ISO-8859-9");
- if (handler != NULL) return(handler);
- break;
-
-
- case XML_CHAR_ENCODING_2022_JP:
- handler = xmlFindCharEncodingHandler("ISO-2022-JP");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_SHIFT_JIS:
- handler = xmlFindCharEncodingHandler("SHIFT-JIS");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("SHIFT_JIS");
- if (handler != NULL) return(handler);
- handler = xmlFindCharEncodingHandler("Shift_JIS");
- if (handler != NULL) return(handler);
- break;
- case XML_CHAR_ENCODING_EUC_JP:
- handler = xmlFindCharEncodingHandler("EUC-JP");
- if (handler != NULL) return(handler);
- break;
- default:
- break;
- }
-
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "No handler found for encoding %d\n", enc);
-#endif
- return(NULL);
-}
-
-/**
- * xmlFindCharEncodingHandler:
- * @name: a string describing the char encoding.
- *
- * Search in the registered set the handler able to read/write that encoding.
- *
- * Returns the handler or NULL if not found
- */
-xmlCharEncodingHandlerPtr
-xmlFindCharEncodingHandler(const char *name) {
- const char *nalias;
- const char *norig;
- xmlCharEncoding alias;
-#ifdef LIBXML_ICONV_ENABLED
- xmlCharEncodingHandlerPtr enc;
- iconv_t icv_in, icv_out;
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- xmlCharEncodingHandlerPtr encu;
- uconv_t *ucv_in, *ucv_out;
-#endif /* LIBXML_ICU_ENABLED */
- char upper[100];
- int i;
-
- if (handlers == NULL) xmlInitCharEncodingHandlers();
- if (name == NULL) return(xmlDefaultCharEncodingHandler);
- if (name[0] == 0) return(xmlDefaultCharEncodingHandler);
-
- /*
- * Do the alias resolution
- */
- norig = name;
- nalias = xmlGetEncodingAlias(name);
- if (nalias != NULL)
- name = nalias;
-
- /*
- * Check first for directly registered encoding names
- */
- for (i = 0;i < 99;i++) {
- upper[i] = toupper(name[i]);
- if (upper[i] == 0) break;
- }
- upper[i] = 0;
-
- if (handlers != NULL) {
- for (i = 0;i < nbCharEncodingHandler; i++) {
- if (!strcmp(upper, handlers[i]->name)) {
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "Found registered handler for encoding %s\n", name);
-#endif
- return(handlers[i]);
- }
- }
- }
-
-#ifdef LIBXML_ICONV_ENABLED
- /* check whether iconv can handle this */
- icv_in = iconv_open("UTF-8", name);
- icv_out = iconv_open(name, "UTF-8");
- if (icv_in == (iconv_t) -1) {
- icv_in = iconv_open("UTF-8", upper);
- }
- if (icv_out == (iconv_t) -1) {
- icv_out = iconv_open(upper, "UTF-8");
- }
- if ((icv_in != (iconv_t) -1) && (icv_out != (iconv_t) -1)) {
- enc = (xmlCharEncodingHandlerPtr)
- xmlMalloc(sizeof(xmlCharEncodingHandler));
- if (enc == NULL) {
- iconv_close(icv_in);
- iconv_close(icv_out);
- return(NULL);
- }
- memset(enc, 0, sizeof(xmlCharEncodingHandler));
- enc->name = xmlMemStrdup(name);
- enc->input = NULL;
- enc->output = NULL;
- enc->iconv_in = icv_in;
- enc->iconv_out = icv_out;
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "Found iconv handler for encoding %s\n", name);
-#endif
- return enc;
- } else if ((icv_in != (iconv_t) -1) || icv_out != (iconv_t) -1) {
- xmlEncodingErr(XML_ERR_INTERNAL_ERROR,
- "iconv : problems with filters for '%s'\n", name);
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- /* check whether icu can handle this */
- ucv_in = openIcuConverter(name, 1);
- ucv_out = openIcuConverter(name, 0);
- if (ucv_in != NULL && ucv_out != NULL) {
- encu = (xmlCharEncodingHandlerPtr)
- xmlMalloc(sizeof(xmlCharEncodingHandler));
- if (encu == NULL) {
- closeIcuConverter(ucv_in);
- closeIcuConverter(ucv_out);
- return(NULL);
- }
- memset(encu, 0, sizeof(xmlCharEncodingHandler));
- encu->name = xmlMemStrdup(name);
- encu->input = NULL;
- encu->output = NULL;
- encu->uconv_in = ucv_in;
- encu->uconv_out = ucv_out;
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "Found ICU converter handler for encoding %s\n", name);
-#endif
- return encu;
- } else if (ucv_in != NULL || ucv_out != NULL) {
- closeIcuConverter(ucv_in);
- closeIcuConverter(ucv_out);
- xmlEncodingErr(XML_ERR_INTERNAL_ERROR,
- "ICU converter : problems with filters for '%s'\n", name);
- }
-#endif /* LIBXML_ICU_ENABLED */
-
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "No handler found for encoding %s\n", name);
-#endif
-
- /*
- * Fallback using the canonical names
- */
- alias = xmlParseCharEncoding(norig);
- if (alias != XML_CHAR_ENCODING_ERROR) {
- const char* canon;
- canon = xmlGetCharEncodingName(alias);
- if ((canon != NULL) && (strcmp(name, canon))) {
- return(xmlFindCharEncodingHandler(canon));
- }
- }
-
- /* If "none of the above", give up */
- return(NULL);
-}
-
-/************************************************************************
- * *
- * ICONV based generic conversion functions *
- * *
- ************************************************************************/
-
-#ifdef LIBXML_ICONV_ENABLED
-/**
- * xmlIconvWrapper:
- * @cd: iconv converter data structure
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of ISO Latin 1 chars
- * @inlen: the length of @in
- *
- * Returns 0 if success, or
- * -1 by lack of space, or
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- * -3 if there the last byte can't form a single output char.
- *
- * The value of @inlen after return is the number of octets consumed
- * as the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of ocetes consumed.
- */
-static int
-xmlIconvWrapper(iconv_t cd, unsigned char *out, int *outlen,
- const unsigned char *in, int *inlen) {
- size_t icv_inlen, icv_outlen;
- const char *icv_in = (const char *) in;
- char *icv_out = (char *) out;
- int ret;
-
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || (in == NULL)) {
- if (outlen != NULL) *outlen = 0;
- return(-1);
- }
- icv_inlen = *inlen;
- icv_outlen = *outlen;
- ret = iconv(cd, (ICONV_CONST char **) &icv_in, &icv_inlen, &icv_out, &icv_outlen);
- *inlen -= icv_inlen;
- *outlen -= icv_outlen;
- if ((icv_inlen != 0) || (ret == -1)) {
-#ifdef EILSEQ
- if (errno == EILSEQ) {
- return -2;
- } else
-#endif
-#ifdef E2BIG
- if (errno == E2BIG) {
- return -1;
- } else
-#endif
-#ifdef EINVAL
- if (errno == EINVAL) {
- return -3;
- } else
-#endif
- {
- return -3;
- }
- }
- return 0;
-}
-#endif /* LIBXML_ICONV_ENABLED */
-
-/************************************************************************
- * *
- * ICU based generic conversion functions *
- * *
- ************************************************************************/
-
-#ifdef LIBXML_ICU_ENABLED
-/**
- * xmlUconvWrapper:
- * @cd: ICU uconverter data structure
- * @toUnicode : non-zero if toUnicode. 0 otherwise.
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of ISO Latin 1 chars
- * @inlen: the length of @in
- *
- * Returns 0 if success, or
- * -1 by lack of space, or
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- * -3 if there the last byte can't form a single output char.
- *
- * The value of @inlen after return is the number of octets consumed
- * as the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of ocetes consumed.
- */
-static int
-xmlUconvWrapper(uconv_t *cd, int toUnicode, unsigned char *out, int *outlen,
- const unsigned char *in, int *inlen) {
- const char *ucv_in = (const char *) in;
- char *ucv_out = (char *) out;
- UErrorCode err = U_ZERO_ERROR;
-
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || (in == NULL)) {
- if (outlen != NULL) *outlen = 0;
- return(-1);
- }
-
- /*
- * TODO(jungshik)
- * 1. is ucnv_convert(To|From)Algorithmic better?
- * 2. had we better use an explicit pivot buffer?
- * 3. error returned comes from 'fromUnicode' only even
- * when toUnicode is true !
- */
- if (toUnicode) {
- /* encoding => UTF-16 => UTF-8 */
- ucnv_convertEx(cd->utf8, cd->uconv, &ucv_out, ucv_out + *outlen,
- &ucv_in, ucv_in + *inlen, NULL, NULL, NULL, NULL,
- 0, TRUE, &err);
- } else {
- /* UTF-8 => UTF-16 => encoding */
- ucnv_convertEx(cd->uconv, cd->utf8, &ucv_out, ucv_out + *outlen,
- &ucv_in, ucv_in + *inlen, NULL, NULL, NULL, NULL,
- 0, TRUE, &err);
- }
- *inlen = ucv_in - (const char*) in;
- *outlen = ucv_out - (char *) out;
- if (U_SUCCESS(err))
- return 0;
- if (err == U_BUFFER_OVERFLOW_ERROR)
- return -1;
- if (err == U_INVALID_CHAR_FOUND || err == U_ILLEGAL_CHAR_FOUND)
- return -2;
- /* if (err == U_TRUNCATED_CHAR_FOUND) */
- return -3;
-}
-#endif /* LIBXML_ICU_ENABLED */
-
-/************************************************************************
- * *
- * The real API used by libxml for on-the-fly conversion *
- * *
- ************************************************************************/
-
-/**
- * xmlCharEncFirstLineInt:
- * @handler: char enconding transformation data structure
- * @out: an xmlBuffer for the output.
- * @in: an xmlBuffer for the input
- * @len: number of bytes to convert for the first line, or -1
- *
- * Front-end for the encoding handler input function, but handle only
- * the very first line, i.e. limit itself to 45 chars.
- *
- * Returns the number of byte written if success, or
- * -1 general error
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- */
-int
-xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out,
- xmlBufferPtr in, int len) {
- int ret = -2;
- int written;
- int toconv;
-
- if (handler == NULL) return(-1);
- if (out == NULL) return(-1);
- if (in == NULL) return(-1);
-
- /* calculate space available */
- written = out->size - out->use - 1; /* count '\0' */
- toconv = in->use;
- /*
- * echo '<?xml version="1.0" encoding="UCS4"?>' | wc -c => 38
- * 45 chars should be sufficient to reach the end of the encoding
- * declaration without going too far inside the document content.
- * on UTF-16 this means 90bytes, on UCS4 this means 180
- * The actual value depending on guessed encoding is passed as @len
- * if provided
- */
- if (len >= 0) {
- if (toconv > len)
- toconv = len;
- } else {
- if (toconv > 180)
- toconv = 180;
- }
- if (toconv * 2 >= written) {
- xmlBufferGrow(out, toconv * 2);
- written = out->size - out->use - 1;
- }
-
- if (handler->input != NULL) {
- ret = handler->input(&out->content[out->use], &written,
- in->content, &toconv);
- xmlBufferShrink(in, toconv);
- out->use += written;
- out->content[out->use] = 0;
- }
-#ifdef LIBXML_ICONV_ENABLED
- else if (handler->iconv_in != NULL) {
- ret = xmlIconvWrapper(handler->iconv_in, &out->content[out->use],
- &written, in->content, &toconv);
- xmlBufferShrink(in, toconv);
- out->use += written;
- out->content[out->use] = 0;
- if (ret == -1) ret = -3;
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- else if (handler->uconv_in != NULL) {
- ret = xmlUconvWrapper(handler->uconv_in, 1, &out->content[out->use],
- &written, in->content, &toconv);
- xmlBufferShrink(in, toconv);
- out->use += written;
- out->content[out->use] = 0;
- if (ret == -1) ret = -3;
- }
-#endif /* LIBXML_ICU_ENABLED */
-#ifdef DEBUG_ENCODING
- switch (ret) {
- case 0:
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input\n",
- toconv, written);
- break;
- case -1:
- xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of input, %d left\n",
- toconv, written, in->use);
- break;
- case -2:
- xmlGenericError(xmlGenericErrorContext,
- "input conversion failed due to input error\n");
- break;
- case -3:
- xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of input, %d left\n",
- toconv, written, in->use);
- break;
- default:
- xmlGenericError(xmlGenericErrorContext,"Unknown input conversion failed %d\n", ret);
- }
-#endif /* DEBUG_ENCODING */
- /*
- * Ignore when input buffer is not on a boundary
- */
- if (ret == -3) ret = 0;
- if (ret == -1) ret = 0;
- return(ret);
-}
-
-/**
- * xmlCharEncFirstLine:
- * @handler: char enconding transformation data structure
- * @out: an xmlBuffer for the output.
- * @in: an xmlBuffer for the input
- *
- * Front-end for the encoding handler input function, but handle only
- * the very first line, i.e. limit itself to 45 chars.
- *
- * Returns the number of byte written if success, or
- * -1 general error
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- */
-int
-xmlCharEncFirstLine(xmlCharEncodingHandler *handler, xmlBufferPtr out,
- xmlBufferPtr in) {
- return(xmlCharEncFirstLineInt(handler, out, in, -1));
-}
-
-/**
- * xmlCharEncFirstLineInput:
- * @input: a parser input buffer
- * @len: number of bytes to convert for the first line, or -1
- *
- * Front-end for the encoding handler input function, but handle only
- * the very first line. Point is that this is based on autodetection
- * of the encoding and once that first line is converted we may find
- * out that a different decoder is needed to process the input.
- *
- * Returns the number of byte written if success, or
- * -1 general error
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- */
-int
-xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len)
-{
- int ret = -2;
- size_t written;
- size_t toconv;
- int c_in;
- int c_out;
- xmlBufPtr in;
- xmlBufPtr out;
-
- if ((input == NULL) || (input->encoder == NULL) ||
- (input->buffer == NULL) || (input->raw == NULL))
- return (-1);
- out = input->buffer;
- in = input->raw;
-
- toconv = xmlBufUse(in);
- if (toconv == 0)
- return (0);
- written = xmlBufAvail(out) - 1; /* count '\0' */
- /*
- * echo '<?xml version="1.0" encoding="UCS4"?>' | wc -c => 38
- * 45 chars should be sufficient to reach the end of the encoding
- * declaration without going too far inside the document content.
- * on UTF-16 this means 90bytes, on UCS4 this means 180
- * The actual value depending on guessed encoding is passed as @len
- * if provided
- */
- if (len >= 0) {
- if (toconv > (unsigned int) len)
- toconv = len;
- } else {
- if (toconv > 180)
- toconv = 180;
- }
- if (toconv * 2 >= written) {
- xmlBufGrow(out, toconv * 2);
- written = xmlBufAvail(out) - 1;
- }
- if (written > 360)
- written = 360;
-
- c_in = toconv;
- c_out = written;
- if (input->encoder->input != NULL) {
- ret = input->encoder->input(xmlBufEnd(out), &c_out,
- xmlBufContent(in), &c_in);
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- }
-#ifdef LIBXML_ICONV_ENABLED
- else if (input->encoder->iconv_in != NULL) {
- ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out),
- &c_out, xmlBufContent(in), &c_in);
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- if (ret == -1)
- ret = -3;
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- else if (input->encoder->uconv_in != NULL) {
- ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out),
- &c_out, xmlBufContent(in), &c_in);
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- if (ret == -1)
- ret = -3;
- }
-#endif /* LIBXML_ICU_ENABLED */
- switch (ret) {
- case 0:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input\n",
- c_in, c_out);
-#endif
- break;
- case -1:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input, %d left\n",
- c_in, c_out, (int)xmlBufUse(in));
-#endif
- break;
- case -3:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input, %d left\n",
- c_in, c_out, (int)xmlBufUse(in));
-#endif
- break;
- case -2: {
- char buf[50];
- const xmlChar *content = xmlBufContent(in);
-
- snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
- content[0], content[1],
- content[2], content[3]);
- buf[49] = 0;
- xmlEncodingErr(XML_I18N_CONV_FAILED,
- "input conversion failed due to input error, bytes %s\n",
- buf);
- }
- }
- /*
- * Ignore when input buffer is not on a boundary
- */
- if (ret == -3) ret = 0;
- if (ret == -1) ret = 0;
- return(ret);
-}
-
-/**
- * xmlCharEncInput:
- * @input: a parser input buffer
- * @flush: try to flush all the raw buffer
- *
- * Generic front-end for the encoding handler on parser input
- *
- * Returns the number of byte written if success, or
- * -1 general error
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- */
-int
-xmlCharEncInput(xmlParserInputBufferPtr input, int flush)
-{
- int ret = -2;
- size_t written;
- size_t toconv;
- int c_in;
- int c_out;
- xmlBufPtr in;
- xmlBufPtr out;
-
- if ((input == NULL) || (input->encoder == NULL) ||
- (input->buffer == NULL) || (input->raw == NULL))
- return (-1);
- out = input->buffer;
- in = input->raw;
-
- toconv = xmlBufUse(in);
- if (toconv == 0)
- return (0);
- if ((toconv > 64 * 1024) && (flush == 0))
- toconv = 64 * 1024;
- written = xmlBufAvail(out);
- if (written > 0)
- written--; /* count '\0' */
- if (toconv * 2 >= written) {
- xmlBufGrow(out, toconv * 2);
- written = xmlBufAvail(out);
- if (written > 0)
- written--; /* count '\0' */
- }
- if ((written > 128 * 1024) && (flush == 0))
- written = 128 * 1024;
-
- c_in = toconv;
- c_out = written;
- if (input->encoder->input != NULL) {
- ret = input->encoder->input(xmlBufEnd(out), &c_out,
- xmlBufContent(in), &c_in);
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- }
-#ifdef LIBXML_ICONV_ENABLED
- else if (input->encoder->iconv_in != NULL) {
- ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out),
- &c_out, xmlBufContent(in), &c_in);
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- if (ret == -1)
- ret = -3;
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- else if (input->encoder->uconv_in != NULL) {
- ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out),
- &c_out, xmlBufContent(in), &c_in);
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- if (ret == -1)
- ret = -3;
- }
-#endif /* LIBXML_ICU_ENABLED */
- switch (ret) {
- case 0:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input\n",
- c_in, c_out);
-#endif
- break;
- case -1:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input, %d left\n",
- c_in, c_out, (int)xmlBufUse(in));
-#endif
- break;
- case -3:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input, %d left\n",
- c_in, c_out, (int)xmlBufUse(in));
-#endif
- break;
- case -2: {
- char buf[50];
- const xmlChar *content = xmlBufContent(in);
-
- snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
- content[0], content[1],
- content[2], content[3]);
- buf[49] = 0;
- xmlEncodingErr(XML_I18N_CONV_FAILED,
- "input conversion failed due to input error, bytes %s\n",
- buf);
- }
- }
- /*
- * Ignore when input buffer is not on a boundary
- */
- if (ret == -3)
- ret = 0;
- return (c_out? c_out : ret);
-}
-
-/**
- * xmlCharEncInFunc:
- * @handler: char encoding transformation data structure
- * @out: an xmlBuffer for the output.
- * @in: an xmlBuffer for the input
- *
- * Generic front-end for the encoding handler input function
- *
- * Returns the number of byte written if success, or
- * -1 general error
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- */
-int
-xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out,
- xmlBufferPtr in)
-{
- int ret = -2;
- int written;
- int toconv;
-
- if (handler == NULL)
- return (-1);
- if (out == NULL)
- return (-1);
- if (in == NULL)
- return (-1);
-
- toconv = in->use;
- if (toconv == 0)
- return (0);
- written = out->size - out->use -1; /* count '\0' */
- if (toconv * 2 >= written) {
- xmlBufferGrow(out, out->size + toconv * 2);
- written = out->size - out->use - 1;
- }
- if (handler->input != NULL) {
- ret = handler->input(&out->content[out->use], &written,
- in->content, &toconv);
- xmlBufferShrink(in, toconv);
- out->use += written;
- out->content[out->use] = 0;
- }
-#ifdef LIBXML_ICONV_ENABLED
- else if (handler->iconv_in != NULL) {
- ret = xmlIconvWrapper(handler->iconv_in, &out->content[out->use],
- &written, in->content, &toconv);
- xmlBufferShrink(in, toconv);
- out->use += written;
- out->content[out->use] = 0;
- if (ret == -1)
- ret = -3;
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- else if (handler->uconv_in != NULL) {
- ret = xmlUconvWrapper(handler->uconv_in, 1, &out->content[out->use],
- &written, in->content, &toconv);
- xmlBufferShrink(in, toconv);
- out->use += written;
- out->content[out->use] = 0;
- if (ret == -1)
- ret = -3;
- }
-#endif /* LIBXML_ICU_ENABLED */
- switch (ret) {
- case 0:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input\n",
- toconv, written);
-#endif
- break;
- case -1:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input, %d left\n",
- toconv, written, in->use);
-#endif
- break;
- case -3:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of input, %d left\n",
- toconv, written, in->use);
-#endif
- break;
- case -2: {
- char buf[50];
-
- snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
- in->content[0], in->content[1],
- in->content[2], in->content[3]);
- buf[49] = 0;
- xmlEncodingErr(XML_I18N_CONV_FAILED,
- "input conversion failed due to input error, bytes %s\n",
- buf);
- }
- }
- /*
- * Ignore when input buffer is not on a boundary
- */
- if (ret == -3)
- ret = 0;
- return (written? written : ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlCharEncOutput:
- * @output: a parser output buffer
- * @init: is this an initialization call without data
- *
- * Generic front-end for the encoding handler on parser output
- * a first call with @init == 1 has to be made first to initiate the
- * output in case of non-stateless encoding needing to initiate their
- * state or the output (like the BOM in UTF16).
- * In case of UTF8 sequence conversion errors for the given encoder,
- * the content will be automatically remapped to a CharRef sequence.
- *
- * Returns the number of byte written if success, or
- * -1 general error
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- */
-int
-xmlCharEncOutput(xmlOutputBufferPtr output, int init)
-{
- int ret = -2;
- size_t written;
- size_t writtentot = 0;
- size_t toconv;
- int c_in;
- int c_out;
- xmlBufPtr in;
- xmlBufPtr out;
- int charref_len = 0;
-
- if ((output == NULL) || (output->encoder == NULL) ||
- (output->buffer == NULL) || (output->conv == NULL))
- return (-1);
- out = output->conv;
- in = output->buffer;
-
-retry:
-
- written = xmlBufAvail(out);
- if (written > 0)
- written--; /* count '\0' */
-
- /*
- * First specific handling of the initialization call
- */
- if (init) {
- c_in = 0;
- c_out = written;
- if (output->encoder->output != NULL) {
- ret = output->encoder->output(xmlBufEnd(out), &c_out,
- NULL, &c_in);
- if (ret > 0) /* Gennady: check return value */
- xmlBufAddLen(out, c_out);
- }
-#ifdef LIBXML_ICONV_ENABLED
- else if (output->encoder->iconv_out != NULL) {
- ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out),
- &c_out, NULL, &c_in);
- xmlBufAddLen(out, c_out);
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- else if (output->encoder->uconv_out != NULL) {
- ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out),
- &c_out, NULL, &c_in);
- xmlBufAddLen(out, c_out);
- }
-#endif /* LIBXML_ICU_ENABLED */
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "initialized encoder\n");
-#endif
- return(0);
- }
-
- /*
- * Conversion itself.
- */
- toconv = xmlBufUse(in);
- if (toconv == 0)
- return (0);
- if (toconv > 64 * 1024)
- toconv = 64 * 1024;
- if (toconv * 4 >= written) {
- xmlBufGrow(out, toconv * 4);
- written = xmlBufAvail(out) - 1;
- }
- if (written > 256 * 1024)
- written = 256 * 1024;
-
- c_in = toconv;
- c_out = written;
- if (output->encoder->output != NULL) {
- ret = output->encoder->output(xmlBufEnd(out), &c_out,
- xmlBufContent(in), &c_in);
- if (c_out > 0) {
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- writtentot += c_out;
- }
- }
-#ifdef LIBXML_ICONV_ENABLED
- else if (output->encoder->iconv_out != NULL) {
- ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out),
- &c_out, xmlBufContent(in), &c_in);
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- writtentot += c_out;
- if (ret == -1) {
- if (c_out > 0) {
- /*
- * Can be a limitation of iconv
- */
- charref_len = 0;
- goto retry;
- }
- ret = -3;
- }
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- else if (output->encoder->uconv_out != NULL) {
- ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out),
- &c_out, xmlBufContent(in), &c_in);
- xmlBufShrink(in, c_in);
- xmlBufAddLen(out, c_out);
- writtentot += c_out;
- if (ret == -1) {
- if (c_out > 0) {
- /*
- * Can be a limitation of uconv
- */
- charref_len = 0;
- goto retry;
- }
- ret = -3;
- }
- }
-#endif /* LIBXML_ICU_ENABLED */
- else {
- xmlEncodingErr(XML_I18N_NO_OUTPUT,
- "xmlCharEncOutFunc: no output function !\n", NULL);
- return(-1);
- }
-
- if (ret >= 0) output += ret;
-
- /*
- * Attempt to handle error cases
- */
- switch (ret) {
- case 0:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of output\n",
- c_in, c_out);
-#endif
- break;
- case -1:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "output conversion failed by lack of space\n");
-#endif
- break;
- case -3:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of output %d left\n",
- c_in, c_out, (int) xmlBufUse(in));
-#endif
- break;
- case -2: {
- int len = (int) xmlBufUse(in);
- xmlChar *content = xmlBufContent(in);
- int cur;
-
- cur = xmlGetUTF8Char(content, &len);
- if ((charref_len != 0) && (c_out < charref_len)) {
- /*
- * We attempted to insert a character reference and failed.
- * Undo what was written and skip the remaining charref.
- */
- xmlBufErase(out, c_out);
- writtentot -= c_out;
- xmlBufShrink(in, charref_len - c_out);
- charref_len = 0;
-
- ret = -1;
- break;
- } else if (cur > 0) {
- xmlChar charref[20];
-
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "handling output conversion error\n");
- xmlGenericError(xmlGenericErrorContext,
- "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- content[0], content[1],
- content[2], content[3]);
-#endif
- /*
- * Removes the UTF8 sequence, and replace it by a charref
- * and continue the transcoding phase, hoping the error
- * did not mangle the encoder state.
- */
- charref_len = snprintf((char *) &charref[0], sizeof(charref),
- "&#%d;", cur);
- xmlBufShrink(in, len);
- xmlBufAddHead(in, charref, -1);
-
- goto retry;
- } else {
- char buf[50];
-
- snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
- content[0], content[1],
- content[2], content[3]);
- buf[49] = 0;
- xmlEncodingErr(XML_I18N_CONV_FAILED,
- "output conversion failed due to conv error, bytes %s\n",
- buf);
- if (xmlBufGetAllocationScheme(in) != XML_BUFFER_ALLOC_IMMUTABLE)
- content[0] = ' ';
- }
- break;
- }
- }
- return(ret);
-}
-#endif
-
-/**
- * xmlCharEncOutFunc:
- * @handler: char enconding transformation data structure
- * @out: an xmlBuffer for the output.
- * @in: an xmlBuffer for the input
- *
- * Generic front-end for the encoding handler output function
- * a first call with @in == NULL has to be made firs to initiate the
- * output in case of non-stateless encoding needing to initiate their
- * state or the output (like the BOM in UTF16).
- * In case of UTF8 sequence conversion errors for the given encoder,
- * the content will be automatically remapped to a CharRef sequence.
- *
- * Returns the number of byte written if success, or
- * -1 general error
- * -2 if the transcoding fails (for *in is not valid utf8 string or
- * the result of transformation can't fit into the encoding we want), or
- */
-int
-xmlCharEncOutFunc(xmlCharEncodingHandler *handler, xmlBufferPtr out,
- xmlBufferPtr in) {
- int ret = -2;
- int written;
- int writtentot = 0;
- int toconv;
- int output = 0;
- int charref_len = 0;
-
- if (handler == NULL) return(-1);
- if (out == NULL) return(-1);
-
-retry:
-
- written = out->size - out->use;
-
- if (written > 0)
- written--; /* Gennady: count '/0' */
-
- /*
- * First specific handling of in = NULL, i.e. the initialization call
- */
- if (in == NULL) {
- toconv = 0;
- if (handler->output != NULL) {
- ret = handler->output(&out->content[out->use], &written,
- NULL, &toconv);
- if (ret >= 0) { /* Gennady: check return value */
- out->use += written;
- out->content[out->use] = 0;
- }
- }
-#ifdef LIBXML_ICONV_ENABLED
- else if (handler->iconv_out != NULL) {
- ret = xmlIconvWrapper(handler->iconv_out, &out->content[out->use],
- &written, NULL, &toconv);
- out->use += written;
- out->content[out->use] = 0;
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- else if (handler->uconv_out != NULL) {
- ret = xmlUconvWrapper(handler->uconv_out, 0,
- &out->content[out->use],
- &written, NULL, &toconv);
- out->use += written;
- out->content[out->use] = 0;
- }
-#endif /* LIBXML_ICU_ENABLED */
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "initialized encoder\n");
-#endif
- return(0);
- }
-
- /*
- * Conversion itself.
- */
- toconv = in->use;
- if (toconv == 0)
- return(0);
- if (toconv * 4 >= written) {
- xmlBufferGrow(out, toconv * 4);
- written = out->size - out->use - 1;
- }
- if (handler->output != NULL) {
- ret = handler->output(&out->content[out->use], &written,
- in->content, &toconv);
- if (written > 0) {
- xmlBufferShrink(in, toconv);
- out->use += written;
- writtentot += written;
- }
- out->content[out->use] = 0;
- }
-#ifdef LIBXML_ICONV_ENABLED
- else if (handler->iconv_out != NULL) {
- ret = xmlIconvWrapper(handler->iconv_out, &out->content[out->use],
- &written, in->content, &toconv);
- xmlBufferShrink(in, toconv);
- out->use += written;
- writtentot += written;
- out->content[out->use] = 0;
- if (ret == -1) {
- if (written > 0) {
- /*
- * Can be a limitation of iconv
- */
- charref_len = 0;
- goto retry;
- }
- ret = -3;
- }
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- else if (handler->uconv_out != NULL) {
- ret = xmlUconvWrapper(handler->uconv_out, 0,
- &out->content[out->use],
- &written, in->content, &toconv);
- xmlBufferShrink(in, toconv);
- out->use += written;
- writtentot += written;
- out->content[out->use] = 0;
- if (ret == -1) {
- if (written > 0) {
- /*
- * Can be a limitation of iconv
- */
- charref_len = 0;
- goto retry;
- }
- ret = -3;
- }
- }
-#endif /* LIBXML_ICU_ENABLED */
- else {
- xmlEncodingErr(XML_I18N_NO_OUTPUT,
- "xmlCharEncOutFunc: no output function !\n", NULL);
- return(-1);
- }
-
- if (ret >= 0) output += ret;
-
- /*
- * Attempt to handle error cases
- */
- switch (ret) {
- case 0:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "converted %d bytes to %d bytes of output\n",
- toconv, written);
-#endif
- break;
- case -1:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "output conversion failed by lack of space\n");
-#endif
- break;
- case -3:
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of output %d left\n",
- toconv, written, in->use);
-#endif
- break;
- case -2: {
- int len = in->use;
- const xmlChar *utf = (const xmlChar *) in->content;
- int cur;
-
- cur = xmlGetUTF8Char(utf, &len);
- if ((charref_len != 0) && (written < charref_len)) {
- /*
- * We attempted to insert a character reference and failed.
- * Undo what was written and skip the remaining charref.
- */
- out->use -= written;
- writtentot -= written;
- xmlBufferShrink(in, charref_len - written);
- charref_len = 0;
-
- ret = -1;
- break;
- } else if (cur > 0) {
- xmlChar charref[20];
-
-#ifdef DEBUG_ENCODING
- xmlGenericError(xmlGenericErrorContext,
- "handling output conversion error\n");
- xmlGenericError(xmlGenericErrorContext,
- "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- in->content[0], in->content[1],
- in->content[2], in->content[3]);
-#endif
- /*
- * Removes the UTF8 sequence, and replace it by a charref
- * and continue the transcoding phase, hoping the error
- * did not mangle the encoder state.
- */
- charref_len = snprintf((char *) &charref[0], sizeof(charref),
- "&#%d;", cur);
- xmlBufferShrink(in, len);
- xmlBufferAddHead(in, charref, -1);
-
- goto retry;
- } else {
- char buf[50];
-
- snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X",
- in->content[0], in->content[1],
- in->content[2], in->content[3]);
- buf[49] = 0;
- xmlEncodingErr(XML_I18N_CONV_FAILED,
- "output conversion failed due to conv error, bytes %s\n",
- buf);
- if (in->alloc != XML_BUFFER_ALLOC_IMMUTABLE)
- in->content[0] = ' ';
- }
- break;
- }
- }
- return(ret);
-}
-
-/**
- * xmlCharEncCloseFunc:
- * @handler: char enconding transformation data structure
- *
- * Generic front-end for encoding handler close function
- *
- * Returns 0 if success, or -1 in case of error
- */
-int
-xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) {
- int ret = 0;
- int tofree = 0;
- int i, handler_in_list = 0;
-
- if (handler == NULL) return(-1);
- if (handler->name == NULL) return(-1);
- if (handlers != NULL) {
- for (i = 0;i < nbCharEncodingHandler; i++) {
- if (handler == handlers[i]) {
- handler_in_list = 1;
- break;
- }
- }
- }
-#ifdef LIBXML_ICONV_ENABLED
- /*
- * Iconv handlers can be used only once, free the whole block.
- * and the associated icon resources.
- */
- if ((handler_in_list == 0) &&
- ((handler->iconv_out != NULL) || (handler->iconv_in != NULL))) {
- tofree = 1;
- if (handler->iconv_out != NULL) {
- if (iconv_close(handler->iconv_out))
- ret = -1;
- handler->iconv_out = NULL;
- }
- if (handler->iconv_in != NULL) {
- if (iconv_close(handler->iconv_in))
- ret = -1;
- handler->iconv_in = NULL;
- }
- }
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- if ((handler_in_list == 0) &&
- ((handler->uconv_out != NULL) || (handler->uconv_in != NULL))) {
- tofree = 1;
- if (handler->uconv_out != NULL) {
- closeIcuConverter(handler->uconv_out);
- handler->uconv_out = NULL;
- }
- if (handler->uconv_in != NULL) {
- closeIcuConverter(handler->uconv_in);
- handler->uconv_in = NULL;
- }
- }
-#endif
- if (tofree) {
- /* free up only dynamic handlers iconv/uconv */
- if (handler->name != NULL)
- xmlFree(handler->name);
- handler->name = NULL;
- xmlFree(handler);
- }
-#ifdef DEBUG_ENCODING
- if (ret)
- xmlGenericError(xmlGenericErrorContext,
- "failed to close the encoding handler\n");
- else
- xmlGenericError(xmlGenericErrorContext,
- "closed the encoding handler\n");
-#endif
-
- return(ret);
-}
-
-/**
- * xmlByteConsumed:
- * @ctxt: an XML parser context
- *
- * This function provides the current index of the parser relative
- * to the start of the current entity. This function is computed in
- * bytes from the beginning starting at zero and finishing at the
- * size in byte of the file if parsing a file. The function is
- * of constant cost if the input is UTF-8 but can be costly if run
- * on non-UTF-8 input.
- *
- * Returns the index in bytes from the beginning of the entity or -1
- * in case the index could not be computed.
- */
-long
-xmlByteConsumed(xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr in;
-
- if (ctxt == NULL) return(-1);
- in = ctxt->input;
- if (in == NULL) return(-1);
- if ((in->buf != NULL) && (in->buf->encoder != NULL)) {
- unsigned int unused = 0;
- xmlCharEncodingHandler * handler = in->buf->encoder;
- /*
- * Encoding conversion, compute the number of unused original
- * bytes from the input not consumed and substract that from
- * the raw consumed value, this is not a cheap operation
- */
- if (in->end - in->cur > 0) {
- unsigned char convbuf[32000];
- const unsigned char *cur = (const unsigned char *)in->cur;
- int toconv = in->end - in->cur, written = 32000;
-
- int ret;
-
- if (handler->output != NULL) {
- do {
- toconv = in->end - cur;
- written = 32000;
- ret = handler->output(&convbuf[0], &written,
- cur, &toconv);
- if (ret == -1) return(-1);
- unused += written;
- cur += toconv;
- } while (ret == -2);
-#ifdef LIBXML_ICONV_ENABLED
- } else if (handler->iconv_out != NULL) {
- do {
- toconv = in->end - cur;
- written = 32000;
- ret = xmlIconvWrapper(handler->iconv_out, &convbuf[0],
- &written, cur, &toconv);
- if (ret < 0) {
- if (written > 0)
- ret = -2;
- else
- return(-1);
- }
- unused += written;
- cur += toconv;
- } while (ret == -2);
-#endif
-#ifdef LIBXML_ICU_ENABLED
- } else if (handler->uconv_out != NULL) {
- do {
- toconv = in->end - cur;
- written = 32000;
- ret = xmlUconvWrapper(handler->uconv_out, 0, &convbuf[0],
- &written, cur, &toconv);
- if (ret < 0) {
- if (written > 0)
- ret = -2;
- else
- return(-1);
- }
- unused += written;
- cur += toconv;
- } while (ret == -2);
-#endif
- } else {
- /* could not find a converter */
- return(-1);
- }
- }
- if (in->buf->rawconsumed < unused)
- return(-1);
- return(in->buf->rawconsumed - unused);
- }
- return(in->consumed + (in->cur - in->base));
-}
-
-#if !defined(LIBXML_ICONV_ENABLED) && !defined(LIBXML_ICU_ENABLED)
-#ifdef LIBXML_ISO8859X_ENABLED
-
-/**
- * UTF8ToISO8859x:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- * @xlattable: the 2-level transcoding table
- *
- * Take a block of UTF-8 chars in and try to convert it to an ISO 8859-*
- * block of chars out.
- *
- * Returns 0 if success, -2 if the transcoding fails, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * as the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of ocetes consumed.
- */
-static int
-UTF8ToISO8859x(unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen,
- unsigned char const *xlattable) {
- const unsigned char* outstart = out;
- const unsigned char* inend;
- const unsigned char* instart = in;
- const unsigned char* processed = in;
-
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL) ||
- (xlattable == NULL))
- return(-1);
- if (in == NULL) {
- /*
- * initialization nothing to do
- */
- *outlen = 0;
- *inlen = 0;
- return(0);
- }
- inend = in + (*inlen);
- while (in < inend) {
- unsigned char d = *in++;
- if (d < 0x80) {
- *out++ = d;
- } else if (d < 0xC0) {
- /* trailing byte in leading position */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- } else if (d < 0xE0) {
- unsigned char c;
- if (!(in < inend)) {
- /* trailing byte not in input buffer */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-3);
- }
- c = *in++;
- if ((c & 0xC0) != 0x80) {
- /* not a trailing byte */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- c = c & 0x3F;
- d = d & 0x1F;
- d = xlattable [48 + c + xlattable [d] * 64];
- if (d == 0) {
- /* not in character set */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- *out++ = d;
- } else if (d < 0xF0) {
- unsigned char c1;
- unsigned char c2;
- if (!(in < inend - 1)) {
- /* trailing bytes not in input buffer */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-3);
- }
- c1 = *in++;
- if ((c1 & 0xC0) != 0x80) {
- /* not a trailing byte (c1) */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- c2 = *in++;
- if ((c2 & 0xC0) != 0x80) {
- /* not a trailing byte (c2) */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- c1 = c1 & 0x3F;
- c2 = c2 & 0x3F;
- d = d & 0x0F;
- d = xlattable [48 + c2 + xlattable [48 + c1 +
- xlattable [32 + d] * 64] * 64];
- if (d == 0) {
- /* not in character set */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- *out++ = d;
- } else {
- /* cannot transcode >= U+010000 */
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(-2);
- }
- processed = in;
- }
- *outlen = out - outstart;
- *inlen = processed - instart;
- return(*outlen);
-}
-
-/**
- * ISO8859xToUTF8
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of ISO Latin 1 chars
- * @inlen: the length of @in
- *
- * Take a block of ISO 8859-* chars in and try to convert it to an UTF-8
- * block of chars out.
- * Returns 0 if success, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * The value of @outlen after return is the number of ocetes produced.
- */
-static int
-ISO8859xToUTF8(unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen,
- unsigned short const *unicodetable) {
- unsigned char* outstart = out;
- unsigned char* outend;
- const unsigned char* instart = in;
- const unsigned char* inend;
- const unsigned char* instop;
- unsigned int c;
-
- if ((out == NULL) || (outlen == NULL) || (inlen == NULL) ||
- (in == NULL) || (unicodetable == NULL))
- return(-1);
- outend = out + *outlen;
- inend = in + *inlen;
- instop = inend;
-
- while ((in < inend) && (out < outend - 2)) {
- if (*in >= 0x80) {
- c = unicodetable [*in - 0x80];
- if (c == 0) {
- /* undefined code point */
- *outlen = out - outstart;
- *inlen = in - instart;
- return (-1);
- }
- if (c < 0x800) {
- *out++ = ((c >> 6) & 0x1F) | 0xC0;
- *out++ = (c & 0x3F) | 0x80;
- } else {
- *out++ = ((c >> 12) & 0x0F) | 0xE0;
- *out++ = ((c >> 6) & 0x3F) | 0x80;
- *out++ = (c & 0x3F) | 0x80;
- }
- ++in;
- }
- if (instop - in > outend - out) instop = in + (outend - out);
- while ((*in < 0x80) && (in < instop)) {
- *out++ = *in++;
- }
- }
- if ((in < inend) && (out < outend) && (*in < 0x80)) {
- *out++ = *in++;
- }
- if ((in < inend) && (out < outend) && (*in < 0x80)) {
- *out++ = *in++;
- }
- *outlen = out - outstart;
- *inlen = in - instart;
- return (*outlen);
-}
-
-
-/************************************************************************
- * Lookup tables for ISO-8859-2..ISO-8859-16 transcoding *
- ************************************************************************/
-
-static unsigned short const xmlunicodetable_ISO8859_2 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7,
- 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b,
- 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7,
- 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c,
- 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7,
- 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e,
- 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7,
- 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df,
- 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7,
- 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f,
- 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7,
- 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_2 [48 + 6 * 64] = {
- "\x00\x00\x01\x05\x02\x04\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\x00\xa4\x00\x00\xa7\xa8\x00\x00\x00\x00\xad\x00\x00"
- "\xb0\x00\x00\x00\xb4\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\xc3\xe3\xa1\xb1\xc6\xe6\x00\x00\x00\x00\xc8\xe8\xcf\xef"
- "\xd0\xf0\x00\x00\x00\x00\x00\x00\xca\xea\xcc\xec\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc5\xe5\x00\x00\xa5\xb5\x00"
- "\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xff\x00\xb2\x00\xbd\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\xa3\xb3\xd1\xf1\x00\x00\xd2\xf2\x00\x00\x00\x00\x00\x00\x00"
- "\xd5\xf5\x00\x00\xc0\xe0\x00\x00\xd8\xf8\xa6\xb6\x00\x00\xaa\xba"
- "\xa9\xb9\xde\xfe\xab\xbb\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xf9"
- "\xdb\xfb\x00\x00\x00\x00\x00\x00\x00\xac\xbc\xaf\xbf\xae\xbe\x00"
- "\x00\xc1\xc2\x00\xc4\x00\x00\xc7\x00\xc9\x00\xcb\x00\xcd\xce\x00"
- "\x00\x00\x00\xd3\xd4\x00\xd6\xd7\x00\x00\xda\x00\xdc\xdd\x00\xdf"
- "\x00\xe1\xe2\x00\xe4\x00\x00\xe7\x00\xe9\x00\xeb\x00\xed\xee\x00"
- "\x00\x00\x00\xf3\xf4\x00\xf6\xf7\x00\x00\xfa\x00\xfc\xfd\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_3 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x0000, 0x0124, 0x00a7,
- 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x0000, 0x017b,
- 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7,
- 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x0000, 0x017c,
- 0x00c0, 0x00c1, 0x00c2, 0x0000, 0x00c4, 0x010a, 0x0108, 0x00c7,
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
- 0x0000, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7,
- 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df,
- 0x00e0, 0x00e1, 0x00e2, 0x0000, 0x00e4, 0x010b, 0x0109, 0x00e7,
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
- 0x0000, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7,
- 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_3 [48 + 7 * 64] = {
- "\x04\x00\x01\x06\x02\x05\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\xa3\xa4\x00\x00\xa7\xa8\x00\x00\x00\x00\xad\x00\x00"
- "\xb0\x00\xb2\xb3\xb4\xb5\x00\xb7\xb8\x00\x00\x00\x00\xbd\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xe6\xc5\xe5\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd8\xf8\xab\xbb"
- "\xd5\xf5\x00\x00\xa6\xb6\xa1\xb1\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xa9\xb9\x00\x00\xac\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xff\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xfe\xaa\xba"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xfd\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\xbf\x00\x00\x00"
- "\xc0\xc1\xc2\x00\xc4\x00\x00\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\x00\xd1\xd2\xd3\xd4\x00\xd6\xd7\x00\xd9\xda\xdb\xdc\x00\x00\xdf"
- "\xe0\xe1\xe2\x00\xe4\x00\x00\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\x00\xf1\xf2\xf3\xf4\x00\xf6\xf7\x00\xf9\xfa\xfb\xfc\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_4 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7,
- 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af,
- 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7,
- 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b,
- 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
- 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a,
- 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
- 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df,
- 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
- 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b,
- 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
- 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_4 [48 + 6 * 64] = {
- "\x00\x00\x01\x05\x02\x03\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\x00\xa4\x00\x00\xa7\xa8\x00\x00\x00\x00\xad\x00\xaf"
- "\xb0\x00\x00\x00\xb4\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00"
- "\xc0\xe0\x00\x00\xa1\xb1\x00\x00\x00\x00\x00\x00\xc8\xe8\x00\x00"
- "\xd0\xf0\xaa\xba\x00\x00\xcc\xec\xca\xea\x00\x00\x00\x00\x00\x00"
- "\x00\x00\xab\xbb\x00\x00\x00\x00\xa5\xb5\xcf\xef\x00\x00\xc7\xe7"
- "\x00\x00\x00\x00\x00\x00\xd3\xf3\xa2\x00\x00\xa6\xb6\x00\x00\x00"
- "\x00\x00\x00\x00\x00\xd1\xf1\x00\x00\x00\xbd\xbf\xd2\xf2\x00\x00"
- "\x00\x00\x00\x00\x00\x00\xa3\xb3\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xa9\xb9\x00\x00\x00\x00\xac\xbc\xdd\xfd\xde\xfe\x00\x00\x00\x00"
- "\x00\x00\xd9\xf9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\xbe\x00"
- "\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\xb2\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\xc1\xc2\xc3\xc4\xc5\xc6\x00\x00\xc9\x00\xcb\x00\xcd\xce\x00"
- "\x00\x00\x00\x00\xd4\xd5\xd6\xd7\xd8\x00\xda\xdb\xdc\x00\x00\xdf"
- "\x00\xe1\xe2\xe3\xe4\xe5\xe6\x00\x00\xe9\x00\xeb\x00\xed\xee\x00"
- "\x00\x00\x00\x00\xf4\xf5\xf6\xf7\xf8\x00\xfa\xfb\xfc\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_5 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407,
- 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f,
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417,
- 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427,
- 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f,
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437,
- 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447,
- 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f,
- 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457,
- 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_5 [48 + 6 * 64] = {
- "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\xad\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\x00\xae\xaf"
- "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
- "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
- "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\x00\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\x00\xfe\xff"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_6 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x060c, 0x00ad, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f,
- 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627,
- 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f,
- 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637,
- 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647,
- 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f,
- 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_6 [48 + 5 * 64] = {
- "\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbb\x00\x00\x00\xbf"
- "\x00\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\x00\x00\x00\x00\x00"
- "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\xf0\xf1\xf2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_7 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x2018, 0x2019, 0x00a3, 0x0000, 0x0000, 0x00a6, 0x00a7,
- 0x00a8, 0x00a9, 0x0000, 0x00ab, 0x00ac, 0x00ad, 0x0000, 0x2015,
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7,
- 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f,
- 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
- 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
- 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
- 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af,
- 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
- 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
- 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
- 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_7 [48 + 7 * 64] = {
- "\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x06"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\xa3\x00\x00\xa6\xa7\xa8\xa9\x00\xab\xac\xad\x00\x00"
- "\xb0\xb1\xb2\xb3\x00\x00\x00\xb7\x00\x00\x00\xbb\x00\xbd\x00\x00"
- "\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\xaf\x00\x00\xa1\xa2\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\xb4\xb5\xb6\x00\xb8\xb9\xba\x00\xbc\x00\xbe\xbf"
- "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\xd0\xd1\x00\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
- "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_8 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
- 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
- 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017,
- 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7,
- 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df,
- 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
- 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x200e, 0x200f, 0x0000,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_8 [48 + 7 * 64] = {
- "\x02\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\x00\xab\xac\xad\xae\xaf"
- "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\x00\xbb\xbc\xbd\xbe\x00"
- "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\xaa\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\xba\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xfe"
- "\x00\x00\x00\x00\x00\x00\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_9 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
- 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
- 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
- 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
- 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
- 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df,
- 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
- 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
- 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_9 [48 + 5 * 64] = {
- "\x00\x00\x01\x02\x03\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
- "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
- "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\x00\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\x00\x00\xdf"
- "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\x00\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\x00\x00\xff"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xf0"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xdd\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xfe"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_10 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7,
- 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a,
- 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7,
- 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b,
- 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e,
- 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf,
- 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168,
- 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
- 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f,
- 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef,
- 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169,
- 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_10 [48 + 7 * 64] = {
- "\x00\x00\x01\x06\x02\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\x00\x00\x00\x00\xa7\x00\x00\x00\x00\x00\xad\x00\x00"
- "\xb0\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xc0\xe0\x00\x00\xa1\xb1\x00\x00\x00\x00\x00\x00\xc8\xe8\x00\x00"
- "\xa9\xb9\xa2\xb2\x00\x00\xcc\xec\xca\xea\x00\x00\x00\x00\x00\x00"
- "\x00\x00\xa3\xb3\x00\x00\x00\x00\xa5\xb5\xa4\xb4\x00\x00\xc7\xe7"
- "\x00\x00\x00\x00\x00\x00\xa6\xb6\xff\x00\x00\xa8\xb8\x00\x00\x00"
- "\x00\x00\x00\x00\x00\xd1\xf1\x00\x00\x00\xaf\xbf\xd2\xf2\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xaa\xba\x00\x00\x00\x00\xab\xbb\xd7\xf7\xae\xbe\x00\x00\x00\x00"
- "\x00\x00\xd9\xf9\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\xbc\x00"
- "\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\xc1\xc2\xc3\xc4\xc5\xc6\x00\x00\xc9\x00\xcb\x00\xcd\xce\xcf"
- "\xd0\x00\x00\xd3\xd4\xd5\xd6\x00\xd8\x00\xda\xdb\xdc\xdd\xde\xdf"
- "\x00\xe1\xe2\xe3\xe4\xe5\xe6\x00\x00\xe9\x00\xeb\x00\xed\xee\xef"
- "\xf0\x00\x00\xf3\xf4\xf5\xf6\x00\xf8\x00\xfa\xfb\xfc\xfd\xfe\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_11 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07,
- 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f,
- 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17,
- 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f,
- 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27,
- 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f,
- 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37,
- 0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e3f,
- 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47,
- 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f,
- 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57,
- 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x0000, 0x0000, 0x0000, 0x0000,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_11 [48 + 6 * 64] = {
- "\x04\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x03\x05\x00\x00\x00\x00\x00\x00"
- "\x00\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
- "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
- "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\x00\x00\x00\x00\xdf"
- "\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_13 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7,
- 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6,
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7,
- 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6,
- 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112,
- 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b,
- 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7,
- 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df,
- 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113,
- 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c,
- 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7,
- 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_13 [48 + 7 * 64] = {
- "\x00\x00\x01\x04\x06\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\xa2\xa3\xa4\x00\xa6\xa7\x00\xa9\x00\xab\xac\xad\xae\x00"
- "\xb0\xb1\xb2\xb3\x00\xb5\xb6\xb7\x00\xb9\x00\xbb\xbc\xbd\xbe\x00"
- "\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\xb4\xa1\xa5\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\xc4\xc5\xaf\x00\x00\xc9\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\xd3\x00\xd5\xd6\xd7\xa8\x00\x00\x00\xdc\x00\x00\xdf"
- "\x00\x00\x00\x00\xe4\xe5\xbf\x00\x00\xe9\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\xf3\x00\xf5\xf6\xf7\xb8\x00\x00\x00\xfc\x00\x00\x00"
- "\x00\xd9\xf9\xd1\xf1\xd2\xf2\x00\x00\x00\x00\x00\xd4\xf4\x00\x00"
- "\x00\x00\x00\x00\x00\x00\xaa\xba\x00\x00\xda\xfa\x00\x00\x00\x00"
- "\xd0\xf0\x00\x00\x00\x00\x00\x00\x00\x00\xdb\xfb\x00\x00\x00\x00"
- "\x00\x00\xd8\xf8\x00\x00\x00\x00\x00\xca\xea\xdd\xfd\xde\xfe\x00"
- "\xc2\xe2\x00\x00\xc0\xe0\xc3\xe3\x00\x00\x00\x00\xc8\xe8\x00\x00"
- "\x00\x00\xc7\xe7\x00\x00\xcb\xeb\xc6\xe6\x00\x00\x00\x00\x00\x00"
- "\x00\x00\xcc\xec\x00\x00\x00\x00\x00\x00\xce\xee\x00\x00\xc1\xe1"
- "\x00\x00\x00\x00\x00\x00\xcd\xed\x00\x00\x00\xcf\xef\x00\x00\x00"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_14 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7,
- 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178,
- 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56,
- 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61,
- 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
- 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a,
- 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df,
- 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
- 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b,
- 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_14 [48 + 10 * 64] = {
- "\x00\x00\x01\x09\x04\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\xa3\x00\x00\x00\xa7\x00\xa9\x00\x00\x00\xad\xae\x00"
- "\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x03\x08\x05\x06\x00\x00\x00\x00"
- "\x00\x00\xa1\xa2\x00\x00\x00\x00\x00\x00\xa6\xab\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xb1"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xa5\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xb2\xb3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xa8\xb8\xaa\xba\xbd\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\xac\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\xd0\xf0\xde\xfe\xaf\x00\x00\x00\x00\x00\x00\x00"
- "\xb4\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\xb7\xb9\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xbb\xbf\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xf7\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\x00\xd1\xd2\xd3\xd4\xd5\xd6\x00\xd8\xd9\xda\xdb\xdc\xdd\x00\xdf"
- "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\x00\xf1\xf2\xf3\xf4\xf5\xf6\x00\xf8\xf9\xfa\xfb\xfc\xfd\x00\xff"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_15 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7,
- 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7,
- 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf,
- 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
- 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
- 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
- 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
- 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
- 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_15 [48 + 6 * 64] = {
- "\x00\x00\x01\x05\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\xa1\xa2\xa3\x00\xa5\x00\xa7\x00\xa9\xaa\xab\xac\xad\xae\xaf"
- "\xb0\xb1\xb2\xb3\x00\xb5\xb6\xb7\x00\xb9\xba\xbb\x00\x00\x00\xbf"
- "\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\xbc\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xa6\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x00\x00\x00\x00\xb4\xb8\x00"
- "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
- "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff"
-};
-
-static unsigned short const xmlunicodetable_ISO8859_16 [128] = {
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
- 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7,
- 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b,
- 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7,
- 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c,
- 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7,
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
- 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a,
- 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df,
- 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7,
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
- 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b,
- 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff,
-};
-
-static unsigned char const xmltranscodetable_ISO8859_16 [48 + 9 * 64] = {
- "\x00\x00\x01\x08\x02\x03\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
- "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
- "\xa0\x00\x00\x00\x00\x00\x00\xa7\x00\xa9\x00\xab\x00\xad\x00\x00"
- "\xb0\xb1\x00\x00\x00\x00\xb6\xb7\x00\x00\x00\xbb\x00\x00\x00\x00"
- "\x00\x00\xc3\xe3\xa1\xa2\xc5\xe5\x00\x00\x00\x00\xb2\xb9\x00\x00"
- "\xd0\xf0\x00\x00\x00\x00\x00\x00\xdd\xfd\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\xa3\xb3\xd1\xf1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xd5\xf5\xbc\xbd\x00\x00\x00\x00\x00\x00\xd7\xf7\x00\x00\x00\x00"
- "\xa6\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xd8\xf8\x00\x00\x00\x00\x00\x00\xbe\xac\xae\xaf\xbf\xb4\xb8\x00"
- "\x06\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xa5\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xba\xde\xfe\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- "\xc0\xc1\xc2\x00\xc4\x00\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
- "\x00\x00\xd2\xd3\xd4\x00\xd6\x00\x00\xd9\xda\xdb\xdc\x00\x00\xdf"
- "\xe0\xe1\xe2\x00\xe4\x00\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
- "\x00\x00\xf2\xf3\xf4\x00\xf6\x00\x00\xf9\xfa\xfb\xfc\x00\x00\xff"
-};
-
-
-/*
- * auto-generated functions for ISO-8859-2 .. ISO-8859-16
- */
-
-static int ISO8859_2ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_2);
-}
-static int UTF8ToISO8859_2 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_2);
-}
-
-static int ISO8859_3ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_3);
-}
-static int UTF8ToISO8859_3 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_3);
-}
-
-static int ISO8859_4ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_4);
-}
-static int UTF8ToISO8859_4 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_4);
-}
-
-static int ISO8859_5ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_5);
-}
-static int UTF8ToISO8859_5 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_5);
-}
-
-static int ISO8859_6ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_6);
-}
-static int UTF8ToISO8859_6 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_6);
-}
-
-static int ISO8859_7ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_7);
-}
-static int UTF8ToISO8859_7 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_7);
-}
-
-static int ISO8859_8ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_8);
-}
-static int UTF8ToISO8859_8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_8);
-}
-
-static int ISO8859_9ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_9);
-}
-static int UTF8ToISO8859_9 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_9);
-}
-
-static int ISO8859_10ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_10);
-}
-static int UTF8ToISO8859_10 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_10);
-}
-
-static int ISO8859_11ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_11);
-}
-static int UTF8ToISO8859_11 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_11);
-}
-
-static int ISO8859_13ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_13);
-}
-static int UTF8ToISO8859_13 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_13);
-}
-
-static int ISO8859_14ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_14);
-}
-static int UTF8ToISO8859_14 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_14);
-}
-
-static int ISO8859_15ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_15);
-}
-static int UTF8ToISO8859_15 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_15);
-}
-
-static int ISO8859_16ToUTF8 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return ISO8859xToUTF8 (out, outlen, in, inlen, xmlunicodetable_ISO8859_16);
-}
-static int UTF8ToISO8859_16 (unsigned char* out, int *outlen,
- const unsigned char* in, int *inlen) {
- return UTF8ToISO8859x (out, outlen, in, inlen, xmltranscodetable_ISO8859_16);
-}
-
-static void
-xmlRegisterCharEncodingHandlersISO8859x (void) {
- xmlNewCharEncodingHandler ("ISO-8859-2", ISO8859_2ToUTF8, UTF8ToISO8859_2);
- xmlNewCharEncodingHandler ("ISO-8859-3", ISO8859_3ToUTF8, UTF8ToISO8859_3);
- xmlNewCharEncodingHandler ("ISO-8859-4", ISO8859_4ToUTF8, UTF8ToISO8859_4);
- xmlNewCharEncodingHandler ("ISO-8859-5", ISO8859_5ToUTF8, UTF8ToISO8859_5);
- xmlNewCharEncodingHandler ("ISO-8859-6", ISO8859_6ToUTF8, UTF8ToISO8859_6);
- xmlNewCharEncodingHandler ("ISO-8859-7", ISO8859_7ToUTF8, UTF8ToISO8859_7);
- xmlNewCharEncodingHandler ("ISO-8859-8", ISO8859_8ToUTF8, UTF8ToISO8859_8);
- xmlNewCharEncodingHandler ("ISO-8859-9", ISO8859_9ToUTF8, UTF8ToISO8859_9);
- xmlNewCharEncodingHandler ("ISO-8859-10", ISO8859_10ToUTF8, UTF8ToISO8859_10);
- xmlNewCharEncodingHandler ("ISO-8859-11", ISO8859_11ToUTF8, UTF8ToISO8859_11);
- xmlNewCharEncodingHandler ("ISO-8859-13", ISO8859_13ToUTF8, UTF8ToISO8859_13);
- xmlNewCharEncodingHandler ("ISO-8859-14", ISO8859_14ToUTF8, UTF8ToISO8859_14);
- xmlNewCharEncodingHandler ("ISO-8859-15", ISO8859_15ToUTF8, UTF8ToISO8859_15);
- xmlNewCharEncodingHandler ("ISO-8859-16", ISO8859_16ToUTF8, UTF8ToISO8859_16);
-}
-
-#endif
-#endif
-
-#define bottom_encoding
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/entities.c b/external/libxml2_android/jni/libxml2/entities.c
deleted file mode 100644
index 64808ff6..00000000
--- a/external/libxml2_android/jni/libxml2/entities.c
+++ /dev/null
@@ -1,1105 +0,0 @@
-/*
- * entities.c : implementation for the XML entities handling
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <libxml/xmlmemory.h>
-#include <libxml/hash.h>
-#include <libxml/entities.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-#include <libxml/dict.h>
-
-#include "save.h"
-
-/*
- * The XML predefined entities.
- */
-
-static xmlEntity xmlEntityLt = {
- NULL, XML_ENTITY_DECL, BAD_CAST "lt",
- NULL, NULL, NULL, NULL, NULL, NULL,
- BAD_CAST "<", BAD_CAST "<", 1,
- XML_INTERNAL_PREDEFINED_ENTITY,
- NULL, NULL, NULL, NULL, 0, 1
-};
-static xmlEntity xmlEntityGt = {
- NULL, XML_ENTITY_DECL, BAD_CAST "gt",
- NULL, NULL, NULL, NULL, NULL, NULL,
- BAD_CAST ">", BAD_CAST ">", 1,
- XML_INTERNAL_PREDEFINED_ENTITY,
- NULL, NULL, NULL, NULL, 0, 1
-};
-static xmlEntity xmlEntityAmp = {
- NULL, XML_ENTITY_DECL, BAD_CAST "amp",
- NULL, NULL, NULL, NULL, NULL, NULL,
- BAD_CAST "&", BAD_CAST "&", 1,
- XML_INTERNAL_PREDEFINED_ENTITY,
- NULL, NULL, NULL, NULL, 0, 1
-};
-static xmlEntity xmlEntityQuot = {
- NULL, XML_ENTITY_DECL, BAD_CAST "quot",
- NULL, NULL, NULL, NULL, NULL, NULL,
- BAD_CAST "\"", BAD_CAST "\"", 1,
- XML_INTERNAL_PREDEFINED_ENTITY,
- NULL, NULL, NULL, NULL, 0, 1
-};
-static xmlEntity xmlEntityApos = {
- NULL, XML_ENTITY_DECL, BAD_CAST "apos",
- NULL, NULL, NULL, NULL, NULL, NULL,
- BAD_CAST "'", BAD_CAST "'", 1,
- XML_INTERNAL_PREDEFINED_ENTITY,
- NULL, NULL, NULL, NULL, 0, 1
-};
-
-/**
- * xmlEntitiesErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlEntitiesErrMemory(const char *extra)
-{
- __xmlSimpleError(XML_FROM_TREE, XML_ERR_NO_MEMORY, NULL, NULL, extra);
-}
-
-/**
- * xmlEntitiesErr:
- * @code: the error code
- * @msg: the message
- *
- * Handle an out of memory condition
- */
-static void LIBXML_ATTR_FORMAT(2,0)
-xmlEntitiesErr(xmlParserErrors code, const char *msg)
-{
- __xmlSimpleError(XML_FROM_TREE, code, NULL, msg, NULL);
-}
-
-/*
- * xmlFreeEntity : clean-up an entity record.
- */
-static void
-xmlFreeEntity(xmlEntityPtr entity)
-{
- xmlDictPtr dict = NULL;
-
- if (entity == NULL)
- return;
-
- if (entity->doc != NULL)
- dict = entity->doc->dict;
-
-
- if ((entity->children) && (entity->owner == 1) &&
- (entity == (xmlEntityPtr) entity->children->parent))
- xmlFreeNodeList(entity->children);
- if (dict != NULL) {
- if ((entity->name != NULL) && (!xmlDictOwns(dict, entity->name)))
- xmlFree((char *) entity->name);
- if ((entity->ExternalID != NULL) &&
- (!xmlDictOwns(dict, entity->ExternalID)))
- xmlFree((char *) entity->ExternalID);
- if ((entity->SystemID != NULL) &&
- (!xmlDictOwns(dict, entity->SystemID)))
- xmlFree((char *) entity->SystemID);
- if ((entity->URI != NULL) && (!xmlDictOwns(dict, entity->URI)))
- xmlFree((char *) entity->URI);
- if ((entity->content != NULL)
- && (!xmlDictOwns(dict, entity->content)))
- xmlFree((char *) entity->content);
- if ((entity->orig != NULL) && (!xmlDictOwns(dict, entity->orig)))
- xmlFree((char *) entity->orig);
- } else {
- if (entity->name != NULL)
- xmlFree((char *) entity->name);
- if (entity->ExternalID != NULL)
- xmlFree((char *) entity->ExternalID);
- if (entity->SystemID != NULL)
- xmlFree((char *) entity->SystemID);
- if (entity->URI != NULL)
- xmlFree((char *) entity->URI);
- if (entity->content != NULL)
- xmlFree((char *) entity->content);
- if (entity->orig != NULL)
- xmlFree((char *) entity->orig);
- }
- xmlFree(entity);
-}
-
-/*
- * xmlCreateEntity:
- *
- * internal routine doing the entity node strutures allocations
- */
-static xmlEntityPtr
-xmlCreateEntity(xmlDictPtr dict, const xmlChar *name, int type,
- const xmlChar *ExternalID, const xmlChar *SystemID,
- const xmlChar *content) {
- xmlEntityPtr ret;
-
- ret = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity));
- if (ret == NULL) {
- xmlEntitiesErrMemory("xmlCreateEntity: malloc failed");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlEntity));
- ret->type = XML_ENTITY_DECL;
- ret->checked = 0;
-
- /*
- * fill the structure.
- */
- ret->etype = (xmlEntityType) type;
- if (dict == NULL) {
- ret->name = xmlStrdup(name);
- if (ExternalID != NULL)
- ret->ExternalID = xmlStrdup(ExternalID);
- if (SystemID != NULL)
- ret->SystemID = xmlStrdup(SystemID);
- } else {
- ret->name = xmlDictLookup(dict, name, -1);
- if (ExternalID != NULL)
- ret->ExternalID = xmlDictLookup(dict, ExternalID, -1);
- if (SystemID != NULL)
- ret->SystemID = xmlDictLookup(dict, SystemID, -1);
- }
- if (content != NULL) {
- ret->length = xmlStrlen(content);
- if ((dict != NULL) && (ret->length < 5))
- ret->content = (xmlChar *)
- xmlDictLookup(dict, content, ret->length);
- else
- ret->content = xmlStrndup(content, ret->length);
- } else {
- ret->length = 0;
- ret->content = NULL;
- }
- ret->URI = NULL; /* to be computed by the layer knowing
- the defining entity */
- ret->orig = NULL;
- ret->owner = 0;
-
- return(ret);
-}
-
-/*
- * xmlAddEntity : register a new entity for an entities table.
- */
-static xmlEntityPtr
-xmlAddEntity(xmlDtdPtr dtd, const xmlChar *name, int type,
- const xmlChar *ExternalID, const xmlChar *SystemID,
- const xmlChar *content) {
- xmlDictPtr dict = NULL;
- xmlEntitiesTablePtr table = NULL;
- xmlEntityPtr ret;
-
- if (name == NULL)
- return(NULL);
- if (dtd == NULL)
- return(NULL);
- if (dtd->doc != NULL)
- dict = dtd->doc->dict;
-
- switch (type) {
- case XML_INTERNAL_GENERAL_ENTITY:
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- if (dtd->entities == NULL)
- dtd->entities = xmlHashCreateDict(0, dict);
- table = dtd->entities;
- break;
- case XML_INTERNAL_PARAMETER_ENTITY:
- case XML_EXTERNAL_PARAMETER_ENTITY:
- if (dtd->pentities == NULL)
- dtd->pentities = xmlHashCreateDict(0, dict);
- table = dtd->pentities;
- break;
- case XML_INTERNAL_PREDEFINED_ENTITY:
- return(NULL);
- }
- if (table == NULL)
- return(NULL);
- ret = xmlCreateEntity(dict, name, type, ExternalID, SystemID, content);
- if (ret == NULL)
- return(NULL);
- ret->doc = dtd->doc;
-
- if (xmlHashAddEntry(table, name, ret)) {
- /*
- * entity was already defined at another level.
- */
- xmlFreeEntity(ret);
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlGetPredefinedEntity:
- * @name: the entity name
- *
- * Check whether this name is an predefined entity.
- *
- * Returns NULL if not, otherwise the entity
- */
-xmlEntityPtr
-xmlGetPredefinedEntity(const xmlChar *name) {
- if (name == NULL) return(NULL);
- switch (name[0]) {
- case 'l':
- if (xmlStrEqual(name, BAD_CAST "lt"))
- return(&xmlEntityLt);
- break;
- case 'g':
- if (xmlStrEqual(name, BAD_CAST "gt"))
- return(&xmlEntityGt);
- break;
- case 'a':
- if (xmlStrEqual(name, BAD_CAST "amp"))
- return(&xmlEntityAmp);
- if (xmlStrEqual(name, BAD_CAST "apos"))
- return(&xmlEntityApos);
- break;
- case 'q':
- if (xmlStrEqual(name, BAD_CAST "quot"))
- return(&xmlEntityQuot);
- break;
- default:
- break;
- }
- return(NULL);
-}
-
-/**
- * xmlAddDtdEntity:
- * @doc: the document
- * @name: the entity name
- * @type: the entity type XML_xxx_yyy_ENTITY
- * @ExternalID: the entity external ID if available
- * @SystemID: the entity system ID if available
- * @content: the entity content
- *
- * Register a new entity for this document DTD external subset.
- *
- * Returns a pointer to the entity or NULL in case of error
- */
-xmlEntityPtr
-xmlAddDtdEntity(xmlDocPtr doc, const xmlChar *name, int type,
- const xmlChar *ExternalID, const xmlChar *SystemID,
- const xmlChar *content) {
- xmlEntityPtr ret;
- xmlDtdPtr dtd;
-
- if (doc == NULL) {
- xmlEntitiesErr(XML_DTD_NO_DOC,
- "xmlAddDtdEntity: document is NULL");
- return(NULL);
- }
- if (doc->extSubset == NULL) {
- xmlEntitiesErr(XML_DTD_NO_DTD,
- "xmlAddDtdEntity: document without external subset");
- return(NULL);
- }
- dtd = doc->extSubset;
- ret = xmlAddEntity(dtd, name, type, ExternalID, SystemID, content);
- if (ret == NULL) return(NULL);
-
- /*
- * Link it to the DTD
- */
- ret->parent = dtd;
- ret->doc = dtd->doc;
- if (dtd->last == NULL) {
- dtd->children = dtd->last = (xmlNodePtr) ret;
- } else {
- dtd->last->next = (xmlNodePtr) ret;
- ret->prev = dtd->last;
- dtd->last = (xmlNodePtr) ret;
- }
- return(ret);
-}
-
-/**
- * xmlAddDocEntity:
- * @doc: the document
- * @name: the entity name
- * @type: the entity type XML_xxx_yyy_ENTITY
- * @ExternalID: the entity external ID if available
- * @SystemID: the entity system ID if available
- * @content: the entity content
- *
- * Register a new entity for this document.
- *
- * Returns a pointer to the entity or NULL in case of error
- */
-xmlEntityPtr
-xmlAddDocEntity(xmlDocPtr doc, const xmlChar *name, int type,
- const xmlChar *ExternalID, const xmlChar *SystemID,
- const xmlChar *content) {
- xmlEntityPtr ret;
- xmlDtdPtr dtd;
-
- if (doc == NULL) {
- xmlEntitiesErr(XML_DTD_NO_DOC,
- "xmlAddDocEntity: document is NULL");
- return(NULL);
- }
- if (doc->intSubset == NULL) {
- xmlEntitiesErr(XML_DTD_NO_DTD,
- "xmlAddDocEntity: document without internal subset");
- return(NULL);
- }
- dtd = doc->intSubset;
- ret = xmlAddEntity(dtd, name, type, ExternalID, SystemID, content);
- if (ret == NULL) return(NULL);
-
- /*
- * Link it to the DTD
- */
- ret->parent = dtd;
- ret->doc = dtd->doc;
- if (dtd->last == NULL) {
- dtd->children = dtd->last = (xmlNodePtr) ret;
- } else {
- dtd->last->next = (xmlNodePtr) ret;
- ret->prev = dtd->last;
- dtd->last = (xmlNodePtr) ret;
- }
- return(ret);
-}
-
-/**
- * xmlNewEntity:
- * @doc: the document
- * @name: the entity name
- * @type: the entity type XML_xxx_yyy_ENTITY
- * @ExternalID: the entity external ID if available
- * @SystemID: the entity system ID if available
- * @content: the entity content
- *
- * Create a new entity, this differs from xmlAddDocEntity() that if
- * the document is NULL or has no internal subset defined, then an
- * unlinked entity structure will be returned, it is then the responsability
- * of the caller to link it to the document later or free it when not needed
- * anymore.
- *
- * Returns a pointer to the entity or NULL in case of error
- */
-xmlEntityPtr
-xmlNewEntity(xmlDocPtr doc, const xmlChar *name, int type,
- const xmlChar *ExternalID, const xmlChar *SystemID,
- const xmlChar *content) {
- xmlEntityPtr ret;
- xmlDictPtr dict;
-
- if ((doc != NULL) && (doc->intSubset != NULL)) {
- return(xmlAddDocEntity(doc, name, type, ExternalID, SystemID, content));
- }
- if (doc != NULL)
- dict = doc->dict;
- else
- dict = NULL;
- ret = xmlCreateEntity(dict, name, type, ExternalID, SystemID, content);
- if (ret == NULL)
- return(NULL);
- ret->doc = doc;
- return(ret);
-}
-
-/**
- * xmlGetEntityFromTable:
- * @table: an entity table
- * @name: the entity name
- * @parameter: look for parameter entities
- *
- * Do an entity lookup in the table.
- * returns the corresponding parameter entity, if found.
- *
- * Returns A pointer to the entity structure or NULL if not found.
- */
-static xmlEntityPtr
-xmlGetEntityFromTable(xmlEntitiesTablePtr table, const xmlChar *name) {
- return((xmlEntityPtr) xmlHashLookup(table, name));
-}
-
-/**
- * xmlGetParameterEntity:
- * @doc: the document referencing the entity
- * @name: the entity name
- *
- * Do an entity lookup in the internal and external subsets and
- * returns the corresponding parameter entity, if found.
- *
- * Returns A pointer to the entity structure or NULL if not found.
- */
-xmlEntityPtr
-xmlGetParameterEntity(xmlDocPtr doc, const xmlChar *name) {
- xmlEntitiesTablePtr table;
- xmlEntityPtr ret;
-
- if (doc == NULL)
- return(NULL);
- if ((doc->intSubset != NULL) && (doc->intSubset->pentities != NULL)) {
- table = (xmlEntitiesTablePtr) doc->intSubset->pentities;
- ret = xmlGetEntityFromTable(table, name);
- if (ret != NULL)
- return(ret);
- }
- if ((doc->extSubset != NULL) && (doc->extSubset->pentities != NULL)) {
- table = (xmlEntitiesTablePtr) doc->extSubset->pentities;
- return(xmlGetEntityFromTable(table, name));
- }
- return(NULL);
-}
-
-/**
- * xmlGetDtdEntity:
- * @doc: the document referencing the entity
- * @name: the entity name
- *
- * Do an entity lookup in the DTD entity hash table and
- * returns the corresponding entity, if found.
- * Note: the first argument is the document node, not the DTD node.
- *
- * Returns A pointer to the entity structure or NULL if not found.
- */
-xmlEntityPtr
-xmlGetDtdEntity(xmlDocPtr doc, const xmlChar *name) {
- xmlEntitiesTablePtr table;
-
- if (doc == NULL)
- return(NULL);
- if ((doc->extSubset != NULL) && (doc->extSubset->entities != NULL)) {
- table = (xmlEntitiesTablePtr) doc->extSubset->entities;
- return(xmlGetEntityFromTable(table, name));
- }
- return(NULL);
-}
-
-/**
- * xmlGetDocEntity:
- * @doc: the document referencing the entity
- * @name: the entity name
- *
- * Do an entity lookup in the document entity hash table and
- * returns the corresponding entity, otherwise a lookup is done
- * in the predefined entities too.
- *
- * Returns A pointer to the entity structure or NULL if not found.
- */
-xmlEntityPtr
-xmlGetDocEntity(const xmlDoc *doc, const xmlChar *name) {
- xmlEntityPtr cur;
- xmlEntitiesTablePtr table;
-
- if (doc != NULL) {
- if ((doc->intSubset != NULL) && (doc->intSubset->entities != NULL)) {
- table = (xmlEntitiesTablePtr) doc->intSubset->entities;
- cur = xmlGetEntityFromTable(table, name);
- if (cur != NULL)
- return(cur);
- }
- if (doc->standalone != 1) {
- if ((doc->extSubset != NULL) &&
- (doc->extSubset->entities != NULL)) {
- table = (xmlEntitiesTablePtr) doc->extSubset->entities;
- cur = xmlGetEntityFromTable(table, name);
- if (cur != NULL)
- return(cur);
- }
- }
- }
- return(xmlGetPredefinedEntity(name));
-}
-
-/*
- * Macro used to grow the current buffer.
- */
-#define growBufferReentrant() { \
- xmlChar *tmp; \
- size_t new_size = buffer_size * 2; \
- if (new_size < buffer_size) goto mem_error; \
- tmp = (xmlChar *) xmlRealloc(buffer, new_size); \
- if (tmp == NULL) goto mem_error; \
- buffer = tmp; \
- buffer_size = new_size; \
-}
-
-/**
- * xmlEncodeEntitiesInternal:
- * @doc: the document containing the string
- * @input: A string to convert to XML.
- * @attr: are we handling an atrbute value
- *
- * Do a global encoding of a string, replacing the predefined entities
- * and non ASCII values with their entities and CharRef counterparts.
- * Contrary to xmlEncodeEntities, this routine is reentrant, and result
- * must be deallocated.
- *
- * Returns A newly allocated string with the substitution done.
- */
-static xmlChar *
-xmlEncodeEntitiesInternal(xmlDocPtr doc, const xmlChar *input, int attr) {
- const xmlChar *cur = input;
- xmlChar *buffer = NULL;
- xmlChar *out = NULL;
- size_t buffer_size = 0;
- int html = 0;
-
- if (input == NULL) return(NULL);
- if (doc != NULL)
- html = (doc->type == XML_HTML_DOCUMENT_NODE);
-
- /*
- * allocate an translation buffer.
- */
- buffer_size = 1000;
- buffer = (xmlChar *) xmlMalloc(buffer_size * sizeof(xmlChar));
- if (buffer == NULL) {
- xmlEntitiesErrMemory("xmlEncodeEntities: malloc failed");
- return(NULL);
- }
- out = buffer;
-
- while (*cur != '\0') {
- size_t indx = out - buffer;
- if (indx + 100 > buffer_size) {
-
- growBufferReentrant();
- out = &buffer[indx];
- }
-
- /*
- * By default one have to encode at least '<', '>', '"' and '&' !
- */
- if (*cur == '<') {
- const xmlChar *end;
-
- /*
- * Special handling of server side include in HTML attributes
- */
- if (html && attr &&
- (cur[1] == '!') && (cur[2] == '-') && (cur[3] == '-') &&
- ((end = xmlStrstr(cur, BAD_CAST "-->")) != NULL)) {
- while (cur != end) {
- *out++ = *cur++;
- indx = out - buffer;
- if (indx + 100 > buffer_size) {
- growBufferReentrant();
- out = &buffer[indx];
- }
- }
- *out++ = *cur++;
- *out++ = *cur++;
- *out++ = *cur++;
- continue;
- }
- *out++ = '&';
- *out++ = 'l';
- *out++ = 't';
- *out++ = ';';
- } else if (*cur == '>') {
- *out++ = '&';
- *out++ = 'g';
- *out++ = 't';
- *out++ = ';';
- } else if (*cur == '&') {
- /*
- * Special handling of &{...} construct from HTML 4, see
- * http://www.w3.org/TR/html401/appendix/notes.html#h-B.7.1
- */
- if (html && attr && (cur[1] == '{') &&
- (strchr((const char *) cur, '}'))) {
- while (*cur != '}') {
- *out++ = *cur++;
- indx = out - buffer;
- if (indx + 100 > buffer_size) {
- growBufferReentrant();
- out = &buffer[indx];
- }
- }
- *out++ = *cur++;
- continue;
- }
- *out++ = '&';
- *out++ = 'a';
- *out++ = 'm';
- *out++ = 'p';
- *out++ = ';';
- } else if (((*cur >= 0x20) && (*cur < 0x80)) ||
- (*cur == '\n') || (*cur == '\t') || ((html) && (*cur == '\r'))) {
- /*
- * default case, just copy !
- */
- *out++ = *cur;
- } else if (*cur >= 0x80) {
- if (((doc != NULL) && (doc->encoding != NULL)) || (html)) {
- /*
- * Bjørn Reese <br@sseusa.com> provided the patch
- xmlChar xc;
- xc = (*cur & 0x3F) << 6;
- if (cur[1] != 0) {
- xc += *(++cur) & 0x3F;
- *out++ = xc;
- } else
- */
- *out++ = *cur;
- } else {
- /*
- * We assume we have UTF-8 input.
- */
- char buf[11], *ptr;
- int val = 0, l = 1;
-
- if (*cur < 0xC0) {
- xmlEntitiesErr(XML_CHECK_NOT_UTF8,
- "xmlEncodeEntities: input not UTF-8");
- if (doc != NULL)
- doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
- snprintf(buf, sizeof(buf), "&#%d;", *cur);
- buf[sizeof(buf) - 1] = 0;
- ptr = buf;
- while (*ptr != 0) *out++ = *ptr++;
- cur++;
- continue;
- } else if (*cur < 0xE0) {
- val = (cur[0]) & 0x1F;
- val <<= 6;
- val |= (cur[1]) & 0x3F;
- l = 2;
- } else if (*cur < 0xF0) {
- val = (cur[0]) & 0x0F;
- val <<= 6;
- val |= (cur[1]) & 0x3F;
- val <<= 6;
- val |= (cur[2]) & 0x3F;
- l = 3;
- } else if (*cur < 0xF8) {
- val = (cur[0]) & 0x07;
- val <<= 6;
- val |= (cur[1]) & 0x3F;
- val <<= 6;
- val |= (cur[2]) & 0x3F;
- val <<= 6;
- val |= (cur[3]) & 0x3F;
- l = 4;
- }
- if ((l == 1) || (!IS_CHAR(val))) {
- xmlEntitiesErr(XML_ERR_INVALID_CHAR,
- "xmlEncodeEntities: char out of range\n");
- if (doc != NULL)
- doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
- snprintf(buf, sizeof(buf), "&#%d;", *cur);
- buf[sizeof(buf) - 1] = 0;
- ptr = buf;
- while (*ptr != 0) *out++ = *ptr++;
- cur++;
- continue;
- }
- /*
- * We could do multiple things here. Just save as a char ref
- */
- snprintf(buf, sizeof(buf), "&#x%X;", val);
- buf[sizeof(buf) - 1] = 0;
- ptr = buf;
- while (*ptr != 0) *out++ = *ptr++;
- cur += l;
- continue;
- }
- } else if (IS_BYTE_CHAR(*cur)) {
- char buf[11], *ptr;
-
- snprintf(buf, sizeof(buf), "&#%d;", *cur);
- buf[sizeof(buf) - 1] = 0;
- ptr = buf;
- while (*ptr != 0) *out++ = *ptr++;
- }
- cur++;
- }
- *out = 0;
- return(buffer);
-
-mem_error:
- xmlEntitiesErrMemory("xmlEncodeEntities: realloc failed");
- xmlFree(buffer);
- return(NULL);
-}
-
-/**
- * xmlEncodeAttributeEntities:
- * @doc: the document containing the string
- * @input: A string to convert to XML.
- *
- * Do a global encoding of a string, replacing the predefined entities
- * and non ASCII values with their entities and CharRef counterparts for
- * attribute values.
- *
- * Returns A newly allocated string with the substitution done.
- */
-xmlChar *
-xmlEncodeAttributeEntities(xmlDocPtr doc, const xmlChar *input) {
- return xmlEncodeEntitiesInternal(doc, input, 1);
-}
-
-/**
- * xmlEncodeEntitiesReentrant:
- * @doc: the document containing the string
- * @input: A string to convert to XML.
- *
- * Do a global encoding of a string, replacing the predefined entities
- * and non ASCII values with their entities and CharRef counterparts.
- * Contrary to xmlEncodeEntities, this routine is reentrant, and result
- * must be deallocated.
- *
- * Returns A newly allocated string with the substitution done.
- */
-xmlChar *
-xmlEncodeEntitiesReentrant(xmlDocPtr doc, const xmlChar *input) {
- return xmlEncodeEntitiesInternal(doc, input, 0);
-}
-
-/**
- * xmlEncodeSpecialChars:
- * @doc: the document containing the string
- * @input: A string to convert to XML.
- *
- * Do a global encoding of a string, replacing the predefined entities
- * this routine is reentrant, and result must be deallocated.
- *
- * Returns A newly allocated string with the substitution done.
- */
-xmlChar *
-xmlEncodeSpecialChars(const xmlDoc *doc ATTRIBUTE_UNUSED, const xmlChar *input) {
- const xmlChar *cur = input;
- xmlChar *buffer = NULL;
- xmlChar *out = NULL;
- size_t buffer_size = 0;
- if (input == NULL) return(NULL);
-
- /*
- * allocate an translation buffer.
- */
- buffer_size = 1000;
- buffer = (xmlChar *) xmlMalloc(buffer_size * sizeof(xmlChar));
- if (buffer == NULL) {
- xmlEntitiesErrMemory("xmlEncodeSpecialChars: malloc failed");
- return(NULL);
- }
- out = buffer;
-
- while (*cur != '\0') {
- size_t indx = out - buffer;
- if (indx + 10 > buffer_size) {
-
- growBufferReentrant();
- out = &buffer[indx];
- }
-
- /*
- * By default one have to encode at least '<', '>', '"' and '&' !
- */
- if (*cur == '<') {
- *out++ = '&';
- *out++ = 'l';
- *out++ = 't';
- *out++ = ';';
- } else if (*cur == '>') {
- *out++ = '&';
- *out++ = 'g';
- *out++ = 't';
- *out++ = ';';
- } else if (*cur == '&') {
- *out++ = '&';
- *out++ = 'a';
- *out++ = 'm';
- *out++ = 'p';
- *out++ = ';';
- } else if (*cur == '"') {
- *out++ = '&';
- *out++ = 'q';
- *out++ = 'u';
- *out++ = 'o';
- *out++ = 't';
- *out++ = ';';
- } else if (*cur == '\r') {
- *out++ = '&';
- *out++ = '#';
- *out++ = '1';
- *out++ = '3';
- *out++ = ';';
- } else {
- /*
- * Works because on UTF-8, all extended sequences cannot
- * result in bytes in the ASCII range.
- */
- *out++ = *cur;
- }
- cur++;
- }
- *out = 0;
- return(buffer);
-
-mem_error:
- xmlEntitiesErrMemory("xmlEncodeSpecialChars: realloc failed");
- xmlFree(buffer);
- return(NULL);
-}
-
-/**
- * xmlCreateEntitiesTable:
- *
- * create and initialize an empty entities hash table.
- * This really doesn't make sense and should be deprecated
- *
- * Returns the xmlEntitiesTablePtr just created or NULL in case of error.
- */
-xmlEntitiesTablePtr
-xmlCreateEntitiesTable(void) {
- return((xmlEntitiesTablePtr) xmlHashCreate(0));
-}
-
-/**
- * xmlFreeEntityWrapper:
- * @entity: An entity
- * @name: its name
- *
- * Deallocate the memory used by an entities in the hash table.
- */
-static void
-xmlFreeEntityWrapper(xmlEntityPtr entity,
- const xmlChar *name ATTRIBUTE_UNUSED) {
- if (entity != NULL)
- xmlFreeEntity(entity);
-}
-
-/**
- * xmlFreeEntitiesTable:
- * @table: An entity table
- *
- * Deallocate the memory used by an entities hash table.
- */
-void
-xmlFreeEntitiesTable(xmlEntitiesTablePtr table) {
- xmlHashFree(table, (xmlHashDeallocator) xmlFreeEntityWrapper);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlCopyEntity:
- * @ent: An entity
- *
- * Build a copy of an entity
- *
- * Returns the new xmlEntitiesPtr or NULL in case of error.
- */
-static xmlEntityPtr
-xmlCopyEntity(xmlEntityPtr ent) {
- xmlEntityPtr cur;
-
- cur = (xmlEntityPtr) xmlMalloc(sizeof(xmlEntity));
- if (cur == NULL) {
- xmlEntitiesErrMemory("xmlCopyEntity:: malloc failed");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlEntity));
- cur->type = XML_ENTITY_DECL;
-
- cur->etype = ent->etype;
- if (ent->name != NULL)
- cur->name = xmlStrdup(ent->name);
- if (ent->ExternalID != NULL)
- cur->ExternalID = xmlStrdup(ent->ExternalID);
- if (ent->SystemID != NULL)
- cur->SystemID = xmlStrdup(ent->SystemID);
- if (ent->content != NULL)
- cur->content = xmlStrdup(ent->content);
- if (ent->orig != NULL)
- cur->orig = xmlStrdup(ent->orig);
- if (ent->URI != NULL)
- cur->URI = xmlStrdup(ent->URI);
- return(cur);
-}
-
-/**
- * xmlCopyEntitiesTable:
- * @table: An entity table
- *
- * Build a copy of an entity table.
- *
- * Returns the new xmlEntitiesTablePtr or NULL in case of error.
- */
-xmlEntitiesTablePtr
-xmlCopyEntitiesTable(xmlEntitiesTablePtr table) {
- return(xmlHashCopy(table, (xmlHashCopier) xmlCopyEntity));
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-#ifdef LIBXML_OUTPUT_ENABLED
-
-/**
- * xmlDumpEntityContent:
- * @buf: An XML buffer.
- * @content: The entity content.
- *
- * This will dump the quoted string value, taking care of the special
- * treatment required by %
- */
-static void
-xmlDumpEntityContent(xmlBufferPtr buf, const xmlChar *content) {
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
- if (xmlStrchr(content, '%')) {
- const xmlChar * base, *cur;
-
- xmlBufferCCat(buf, "\"");
- base = cur = content;
- while (*cur != 0) {
- if (*cur == '"') {
- if (base != cur)
- xmlBufferAdd(buf, base, cur - base);
- xmlBufferAdd(buf, BAD_CAST "&quot;", 6);
- cur++;
- base = cur;
- } else if (*cur == '%') {
- if (base != cur)
- xmlBufferAdd(buf, base, cur - base);
- xmlBufferAdd(buf, BAD_CAST "&#x25;", 6);
- cur++;
- base = cur;
- } else {
- cur++;
- }
- }
- if (base != cur)
- xmlBufferAdd(buf, base, cur - base);
- xmlBufferCCat(buf, "\"");
- } else {
- xmlBufferWriteQuotedString(buf, content);
- }
-}
-
-/**
- * xmlDumpEntityDecl:
- * @buf: An XML buffer.
- * @ent: An entity table
- *
- * This will dump the content of the entity table as an XML DTD definition
- */
-void
-xmlDumpEntityDecl(xmlBufferPtr buf, xmlEntityPtr ent) {
- if ((buf == NULL) || (ent == NULL)) return;
- switch (ent->etype) {
- case XML_INTERNAL_GENERAL_ENTITY:
- xmlBufferWriteChar(buf, "<!ENTITY ");
- xmlBufferWriteCHAR(buf, ent->name);
- xmlBufferWriteChar(buf, " ");
- if (ent->orig != NULL)
- xmlBufferWriteQuotedString(buf, ent->orig);
- else
- xmlDumpEntityContent(buf, ent->content);
- xmlBufferWriteChar(buf, ">\n");
- break;
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- xmlBufferWriteChar(buf, "<!ENTITY ");
- xmlBufferWriteCHAR(buf, ent->name);
- if (ent->ExternalID != NULL) {
- xmlBufferWriteChar(buf, " PUBLIC ");
- xmlBufferWriteQuotedString(buf, ent->ExternalID);
- xmlBufferWriteChar(buf, " ");
- xmlBufferWriteQuotedString(buf, ent->SystemID);
- } else {
- xmlBufferWriteChar(buf, " SYSTEM ");
- xmlBufferWriteQuotedString(buf, ent->SystemID);
- }
- xmlBufferWriteChar(buf, ">\n");
- break;
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- xmlBufferWriteChar(buf, "<!ENTITY ");
- xmlBufferWriteCHAR(buf, ent->name);
- if (ent->ExternalID != NULL) {
- xmlBufferWriteChar(buf, " PUBLIC ");
- xmlBufferWriteQuotedString(buf, ent->ExternalID);
- xmlBufferWriteChar(buf, " ");
- xmlBufferWriteQuotedString(buf, ent->SystemID);
- } else {
- xmlBufferWriteChar(buf, " SYSTEM ");
- xmlBufferWriteQuotedString(buf, ent->SystemID);
- }
- if (ent->content != NULL) { /* Should be true ! */
- xmlBufferWriteChar(buf, " NDATA ");
- if (ent->orig != NULL)
- xmlBufferWriteCHAR(buf, ent->orig);
- else
- xmlBufferWriteCHAR(buf, ent->content);
- }
- xmlBufferWriteChar(buf, ">\n");
- break;
- case XML_INTERNAL_PARAMETER_ENTITY:
- xmlBufferWriteChar(buf, "<!ENTITY % ");
- xmlBufferWriteCHAR(buf, ent->name);
- xmlBufferWriteChar(buf, " ");
- if (ent->orig == NULL)
- xmlDumpEntityContent(buf, ent->content);
- else
- xmlBufferWriteQuotedString(buf, ent->orig);
- xmlBufferWriteChar(buf, ">\n");
- break;
- case XML_EXTERNAL_PARAMETER_ENTITY:
- xmlBufferWriteChar(buf, "<!ENTITY % ");
- xmlBufferWriteCHAR(buf, ent->name);
- if (ent->ExternalID != NULL) {
- xmlBufferWriteChar(buf, " PUBLIC ");
- xmlBufferWriteQuotedString(buf, ent->ExternalID);
- xmlBufferWriteChar(buf, " ");
- xmlBufferWriteQuotedString(buf, ent->SystemID);
- } else {
- xmlBufferWriteChar(buf, " SYSTEM ");
- xmlBufferWriteQuotedString(buf, ent->SystemID);
- }
- xmlBufferWriteChar(buf, ">\n");
- break;
- default:
- xmlEntitiesErr(XML_DTD_UNKNOWN_ENTITY,
- "xmlDumpEntitiesDecl: internal: unknown type entity type");
- }
-}
-
-/**
- * xmlDumpEntityDeclScan:
- * @ent: An entity table
- * @buf: An XML buffer.
- *
- * When using the hash table scan function, arguments need to be reversed
- */
-static void
-xmlDumpEntityDeclScan(xmlEntityPtr ent, xmlBufferPtr buf) {
- xmlDumpEntityDecl(buf, ent);
-}
-
-/**
- * xmlDumpEntitiesTable:
- * @buf: An XML buffer.
- * @table: An entity table
- *
- * This will dump the content of the entity table as an XML DTD definition
- */
-void
-xmlDumpEntitiesTable(xmlBufferPtr buf, xmlEntitiesTablePtr table) {
- xmlHashScan(table, (xmlHashScanner)xmlDumpEntityDeclScan, buf);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-#define bottom_entities
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/error.c b/external/libxml2_android/jni/libxml2/error.c
deleted file mode 100644
index 9606f135..00000000
--- a/external/libxml2_android/jni/libxml2/error.c
+++ /dev/null
@@ -1,998 +0,0 @@
-/*
- * error.c: module displaying/handling XML parser errors
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <daniel@veillard.com>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#include <stdarg.h>
-#include <libxml/parser.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/globals.h>
-
-void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-
-#define XML_GET_VAR_STR(msg, str) { \
- int size, prev_size = -1; \
- int chars; \
- char *larger; \
- va_list ap; \
- \
- str = (char *) xmlMalloc(150); \
- if (str != NULL) { \
- \
- size = 150; \
- \
- while (size < 64000) { \
- va_start(ap, msg); \
- chars = vsnprintf(str, size, msg, ap); \
- va_end(ap); \
- if ((chars > -1) && (chars < size)) { \
- if (prev_size == chars) { \
- break; \
- } else { \
- prev_size = chars; \
- } \
- } \
- if (chars > -1) \
- size += chars + 1; \
- else \
- size += 100; \
- if ((larger = (char *) xmlRealloc(str, size)) == NULL) {\
- break; \
- } \
- str = larger; \
- }} \
-}
-
-/************************************************************************
- * *
- * Handling of out of context errors *
- * *
- ************************************************************************/
-
-/**
- * xmlGenericErrorDefaultFunc:
- * @ctx: an error context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Default handler for out of context error messages.
- */
-void XMLCDECL
-xmlGenericErrorDefaultFunc(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
- va_list args;
-
- if (xmlGenericErrorContext == NULL)
- xmlGenericErrorContext = (void *) stderr;
-
- va_start(args, msg);
- vfprintf((FILE *)xmlGenericErrorContext, msg, args);
- va_end(args);
-}
-
-/**
- * initGenericErrorDefaultFunc:
- * @handler: the handler
- *
- * Set or reset (if NULL) the default handler for generic errors
- * to the builtin error function.
- */
-void
-initGenericErrorDefaultFunc(xmlGenericErrorFunc * handler)
-{
- if (handler == NULL)
- xmlGenericError = xmlGenericErrorDefaultFunc;
- else
- xmlGenericError = (*handler);
-}
-
-/**
- * xmlSetGenericErrorFunc:
- * @ctx: the new error handling context
- * @handler: the new handler function
- *
- * Function to reset the handler and the error context for out of
- * context error messages.
- * This simply means that @handler will be called for subsequent
- * error messages while not parsing nor validating. And @ctx will
- * be passed as first argument to @handler
- * One can simply force messages to be emitted to another FILE * than
- * stderr by setting @ctx to this file handle and @handler to NULL.
- * For multi-threaded applications, this must be set separately for each thread.
- */
-void
-xmlSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) {
- xmlGenericErrorContext = ctx;
- if (handler != NULL)
- xmlGenericError = handler;
- else
- xmlGenericError = xmlGenericErrorDefaultFunc;
-}
-
-/**
- * xmlSetStructuredErrorFunc:
- * @ctx: the new error handling context
- * @handler: the new handler function
- *
- * Function to reset the handler and the error context for out of
- * context structured error messages.
- * This simply means that @handler will be called for subsequent
- * error messages while not parsing nor validating. And @ctx will
- * be passed as first argument to @handler
- * For multi-threaded applications, this must be set separately for each thread.
- */
-void
-xmlSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
- xmlStructuredErrorContext = ctx;
- xmlStructuredError = handler;
-}
-
-/************************************************************************
- * *
- * Handling of parsing errors *
- * *
- ************************************************************************/
-
-/**
- * xmlParserPrintFileInfo:
- * @input: an xmlParserInputPtr input
- *
- * Displays the associated file and line informations for the current input
- */
-
-void
-xmlParserPrintFileInfo(xmlParserInputPtr input) {
- if (input != NULL) {
- if (input->filename)
- xmlGenericError(xmlGenericErrorContext,
- "%s:%d: ", input->filename,
- input->line);
- else
- xmlGenericError(xmlGenericErrorContext,
- "Entity: line %d: ", input->line);
- }
-}
-
-/**
- * xmlParserPrintFileContext:
- * @input: an xmlParserInputPtr input
- *
- * Displays current context within the input content for error tracking
- */
-
-static void
-xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
- xmlGenericErrorFunc channel, void *data ) {
- const xmlChar *cur, *base;
- unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */
- xmlChar content[81]; /* space for 80 chars + line terminator */
- xmlChar *ctnt;
-
- if ((input == NULL) || (input->cur == NULL))
- return;
-
- cur = input->cur;
- base = input->base;
- /* skip backwards over any end-of-lines */
- while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) {
- cur--;
- }
- n = 0;
- /* search backwards for beginning-of-line (to max buff size) */
- while ((n++ < (sizeof(content)-1)) && (cur > base) &&
- (*(cur) != '\n') && (*(cur) != '\r'))
- cur--;
- if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
- /* calculate the error position in terms of the current position */
- col = input->cur - cur;
- /* search forward for end-of-line (to max buff size) */
- n = 0;
- ctnt = content;
- /* copy selected text to our buffer */
- while ((*cur != 0) && (*(cur) != '\n') &&
- (*(cur) != '\r') && (n < sizeof(content)-1)) {
- *ctnt++ = *cur++;
- n++;
- }
- *ctnt = 0;
- /* print out the selected text */
- channel(data ,"%s\n", content);
- /* create blank line with problem pointer */
- n = 0;
- ctnt = content;
- /* (leave buffer space for pointer + line terminator) */
- while ((n<col) && (n++ < sizeof(content)-2) && (*ctnt != 0)) {
- if (*(ctnt) != '\t')
- *(ctnt) = ' ';
- ctnt++;
- }
- *ctnt++ = '^';
- *ctnt = 0;
- channel(data ,"%s\n", content);
-}
-
-/**
- * xmlParserPrintFileContext:
- * @input: an xmlParserInputPtr input
- *
- * Displays current context within the input content for error tracking
- */
-void
-xmlParserPrintFileContext(xmlParserInputPtr input) {
- xmlParserPrintFileContextInternal(input, xmlGenericError,
- xmlGenericErrorContext);
-}
-
-/**
- * xmlReportError:
- * @err: the error
- * @ctx: the parser context or NULL
- * @str: the formatted error message
- *
- * Report an erro with its context, replace the 4 old error/warning
- * routines.
- */
-static void
-xmlReportError(xmlErrorPtr err, xmlParserCtxtPtr ctxt, const char *str,
- xmlGenericErrorFunc channel, void *data)
-{
- char *file = NULL;
- int line = 0;
- int code = -1;
- int domain;
- const xmlChar *name = NULL;
- xmlNodePtr node;
- xmlErrorLevel level;
- xmlParserInputPtr input = NULL;
- xmlParserInputPtr cur = NULL;
-
- if (err == NULL)
- return;
-
- if (channel == NULL) {
- channel = xmlGenericError;
- data = xmlGenericErrorContext;
- }
- file = err->file;
- line = err->line;
- code = err->code;
- domain = err->domain;
- level = err->level;
- node = err->node;
-
- if (code == XML_ERR_OK)
- return;
-
- if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
- name = node->name;
-
- /*
- * Maintain the compatibility with the legacy error handling
- */
- if (ctxt != NULL) {
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) &&
- (ctxt->inputNr > 1)) {
- cur = input;
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
- if (input != NULL) {
- if (input->filename)
- channel(data, "%s:%d: ", input->filename, input->line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: ", input->line);
- }
- } else {
- if (file != NULL)
- channel(data, "%s:%d: ", file, line);
- else if ((line != 0) &&
- ((domain == XML_FROM_PARSER) || (domain == XML_FROM_SCHEMASV)||
- (domain == XML_FROM_SCHEMASP)||(domain == XML_FROM_DTD) ||
- (domain == XML_FROM_RELAXNGP)||(domain == XML_FROM_RELAXNGV)))
- channel(data, "Entity: line %d: ", line);
- }
- if (name != NULL) {
- channel(data, "element %s: ", name);
- }
- switch (domain) {
- case XML_FROM_PARSER:
- channel(data, "parser ");
- break;
- case XML_FROM_NAMESPACE:
- channel(data, "namespace ");
- break;
- case XML_FROM_DTD:
- case XML_FROM_VALID:
- channel(data, "validity ");
- break;
- case XML_FROM_HTML:
- channel(data, "HTML parser ");
- break;
- case XML_FROM_MEMORY:
- channel(data, "memory ");
- break;
- case XML_FROM_OUTPUT:
- channel(data, "output ");
- break;
- case XML_FROM_IO:
- channel(data, "I/O ");
- break;
- case XML_FROM_XINCLUDE:
- channel(data, "XInclude ");
- break;
- case XML_FROM_XPATH:
- channel(data, "XPath ");
- break;
- case XML_FROM_XPOINTER:
- channel(data, "parser ");
- break;
- case XML_FROM_REGEXP:
- channel(data, "regexp ");
- break;
- case XML_FROM_MODULE:
- channel(data, "module ");
- break;
- case XML_FROM_SCHEMASV:
- channel(data, "Schemas validity ");
- break;
- case XML_FROM_SCHEMASP:
- channel(data, "Schemas parser ");
- break;
- case XML_FROM_RELAXNGP:
- channel(data, "Relax-NG parser ");
- break;
- case XML_FROM_RELAXNGV:
- channel(data, "Relax-NG validity ");
- break;
- case XML_FROM_CATALOG:
- channel(data, "Catalog ");
- break;
- case XML_FROM_C14N:
- channel(data, "C14N ");
- break;
- case XML_FROM_XSLT:
- channel(data, "XSLT ");
- break;
- case XML_FROM_I18N:
- channel(data, "encoding ");
- break;
- case XML_FROM_SCHEMATRONV:
- channel(data, "schematron ");
- break;
- case XML_FROM_BUFFER:
- channel(data, "internal buffer ");
- break;
- case XML_FROM_URI:
- channel(data, "URI ");
- break;
- default:
- break;
- }
- switch (level) {
- case XML_ERR_NONE:
- channel(data, ": ");
- break;
- case XML_ERR_WARNING:
- channel(data, "warning : ");
- break;
- case XML_ERR_ERROR:
- channel(data, "error : ");
- break;
- case XML_ERR_FATAL:
- channel(data, "error : ");
- break;
- }
- if (str != NULL) {
- int len;
- len = xmlStrlen((const xmlChar *)str);
- if ((len > 0) && (str[len - 1] != '\n'))
- channel(data, "%s\n", str);
- else
- channel(data, "%s", str);
- } else {
- channel(data, "%s\n", "out of memory error");
- }
-
- if (ctxt != NULL) {
- xmlParserPrintFileContextInternal(input, channel, data);
- if (cur != NULL) {
- if (cur->filename)
- channel(data, "%s:%d: \n", cur->filename, cur->line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: \n", cur->line);
- xmlParserPrintFileContextInternal(cur, channel, data);
- }
- }
- if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
- (err->int1 < 100) &&
- (err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
- xmlChar buf[150];
- int i;
-
- channel(data, "%s\n", err->str1);
- for (i=0;i < err->int1;i++)
- buf[i] = ' ';
- buf[i++] = '^';
- buf[i] = 0;
- channel(data, "%s\n", buf);
- }
-}
-
-/**
- * __xmlRaiseError:
- * @schannel: the structured callback channel
- * @channel: the old callback channel
- * @data: the callback data
- * @ctx: the parser context or NULL
- * @ctx: the parser context or NULL
- * @domain: the domain for the error
- * @code: the code for the error
- * @level: the xmlErrorLevel for the error
- * @file: the file source of the error (or NULL)
- * @line: the line of the error or 0 if N/A
- * @str1: extra string info
- * @str2: extra string info
- * @str3: extra string info
- * @int1: extra int info
- * @col: column number of the error or 0 if N/A
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Update the appropriate global or contextual error structure,
- * then forward the error message down the parser or generic
- * error callback handler
- */
-void XMLCDECL
-__xmlRaiseError(xmlStructuredErrorFunc schannel,
- xmlGenericErrorFunc channel, void *data, void *ctx,
- void *nod, int domain, int code, xmlErrorLevel level,
- const char *file, int line, const char *str1,
- const char *str2, const char *str3, int int1, int col,
- const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = NULL;
- xmlNodePtr node = (xmlNodePtr) nod;
- char *str = NULL;
- xmlParserInputPtr input = NULL;
- xmlErrorPtr to = &xmlLastError;
- xmlNodePtr baseptr = NULL;
-
- if (code == XML_ERR_OK)
- return;
- if ((xmlGetWarningsDefaultValue == 0) && (level == XML_ERR_WARNING))
- return;
- if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
- (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
- (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) {
- ctxt = (xmlParserCtxtPtr) ctx;
- if ((schannel == NULL) && (ctxt != NULL) && (ctxt->sax != NULL) &&
- (ctxt->sax->initialized == XML_SAX2_MAGIC) &&
- (ctxt->sax->serror != NULL)) {
- schannel = ctxt->sax->serror;
- data = ctxt->userData;
- }
- }
- /*
- * Check if structured error handler set
- */
- if (schannel == NULL) {
- schannel = xmlStructuredError;
- /*
- * if user has defined handler, change data ptr to user's choice
- */
- if (schannel != NULL)
- data = xmlStructuredErrorContext;
- }
- /*
- * Formatting the message
- */
- if (msg == NULL) {
- str = (char *) xmlStrdup(BAD_CAST "No error message provided");
- } else {
- XML_GET_VAR_STR(msg, str);
- }
-
- /*
- * specific processing if a parser context is provided
- */
- if (ctxt != NULL) {
- if (file == NULL) {
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) &&
- (ctxt->inputNr > 1)) {
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
- if (input != NULL) {
- file = input->filename;
- line = input->line;
- col = input->col;
- }
- }
- to = &ctxt->lastError;
- } else if ((node != NULL) && (file == NULL)) {
- int i;
-
- if ((node->doc != NULL) && (node->doc->URL != NULL)) {
- baseptr = node;
-/* file = (const char *) node->doc->URL; */
- }
- for (i = 0;
- ((i < 10) && (node != NULL) && (node->type != XML_ELEMENT_NODE));
- i++)
- node = node->parent;
- if ((baseptr == NULL) && (node != NULL) &&
- (node->doc != NULL) && (node->doc->URL != NULL))
- baseptr = node;
-
- if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
- line = node->line;
- if ((line == 0) || (line == 65535))
- line = xmlGetLineNo(node);
- }
-
- /*
- * Save the information about the error
- */
- xmlResetError(to);
- to->domain = domain;
- to->code = code;
- to->message = str;
- to->level = level;
- if (file != NULL)
- to->file = (char *) xmlStrdup((const xmlChar *) file);
- else if (baseptr != NULL) {
-#ifdef LIBXML_XINCLUDE_ENABLED
- /*
- * We check if the error is within an XInclude section and,
- * if so, attempt to print out the href of the XInclude instead
- * of the usual "base" (doc->URL) for the node (bug 152623).
- */
- xmlNodePtr prev = baseptr;
- int inclcount = 0;
- while (prev != NULL) {
- if (prev->prev == NULL)
- prev = prev->parent;
- else {
- prev = prev->prev;
- if (prev->type == XML_XINCLUDE_START) {
- if (--inclcount < 0)
- break;
- } else if (prev->type == XML_XINCLUDE_END)
- inclcount++;
- }
- }
- if (prev != NULL) {
- if (prev->type == XML_XINCLUDE_START) {
- prev->type = XML_ELEMENT_NODE;
- to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
- prev->type = XML_XINCLUDE_START;
- } else {
- to->file = (char *) xmlGetProp(prev, BAD_CAST "href");
- }
- } else
-#endif
- to->file = (char *) xmlStrdup(baseptr->doc->URL);
- if ((to->file == NULL) && (node != NULL) && (node->doc != NULL)) {
- to->file = (char *) xmlStrdup(node->doc->URL);
- }
- }
- to->line = line;
- if (str1 != NULL)
- to->str1 = (char *) xmlStrdup((const xmlChar *) str1);
- if (str2 != NULL)
- to->str2 = (char *) xmlStrdup((const xmlChar *) str2);
- if (str3 != NULL)
- to->str3 = (char *) xmlStrdup((const xmlChar *) str3);
- to->int1 = int1;
- to->int2 = col;
- to->node = node;
- to->ctxt = ctx;
-
- if (to != &xmlLastError)
- xmlCopyError(to,&xmlLastError);
-
- if (schannel != NULL) {
- schannel(data, to);
- return;
- }
-
- /*
- * Find the callback channel if channel param is NULL
- */
- if ((ctxt != NULL) && (channel == NULL) &&
- (xmlStructuredError == NULL) && (ctxt->sax != NULL)) {
- if (level == XML_ERR_WARNING)
- channel = ctxt->sax->warning;
- else
- channel = ctxt->sax->error;
- data = ctxt->userData;
- } else if (channel == NULL) {
- channel = xmlGenericError;
- if (ctxt != NULL) {
- data = ctxt;
- } else {
- data = xmlGenericErrorContext;
- }
- }
- if (channel == NULL)
- return;
-
- if ((channel == xmlParserError) ||
- (channel == xmlParserWarning) ||
- (channel == xmlParserValidityError) ||
- (channel == xmlParserValidityWarning))
- xmlReportError(to, ctxt, str, NULL, NULL);
- else if ((channel == (xmlGenericErrorFunc) fprintf) ||
- (channel == xmlGenericErrorDefaultFunc))
- xmlReportError(to, ctxt, str, channel, data);
- else
- channel(data, "%s", str);
-}
-
-/**
- * __xmlSimpleError:
- * @domain: where the error comes from
- * @code: the error code
- * @node: the context node
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-void
-__xmlSimpleError(int domain, int code, xmlNodePtr node,
- const char *msg, const char *extra)
-{
-
- if (code == XML_ERR_NO_MEMORY) {
- if (extra)
- __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
- else
- __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
- NULL, NULL, 0, 0, "Memory allocation failed\n");
- } else {
- __xmlRaiseError(NULL, NULL, NULL, NULL, node, domain,
- code, XML_ERR_ERROR, NULL, 0, extra,
- NULL, NULL, 0, 0, msg, extra);
- }
-}
-/**
- * xmlParserError:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format an error messages, gives file, line, position and
- * extra parameters.
- */
-void XMLCDECL
-xmlParserError(void *ctx, const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr input = NULL;
- xmlParserInputPtr cur = NULL;
- char * str;
-
- if (ctxt != NULL) {
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) &&
- (ctxt->inputNr > 1)) {
- cur = input;
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
- xmlParserPrintFileInfo(input);
- }
-
- xmlGenericError(xmlGenericErrorContext, "error: ");
- XML_GET_VAR_STR(msg, str);
- xmlGenericError(xmlGenericErrorContext, "%s", str);
- if (str != NULL)
- xmlFree(str);
-
- if (ctxt != NULL) {
- xmlParserPrintFileContext(input);
- if (cur != NULL) {
- xmlParserPrintFileInfo(cur);
- xmlGenericError(xmlGenericErrorContext, "\n");
- xmlParserPrintFileContext(cur);
- }
- }
-}
-
-/**
- * xmlParserWarning:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a warning messages, gives file, line, position and
- * extra parameters.
- */
-void XMLCDECL
-xmlParserWarning(void *ctx, const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr input = NULL;
- xmlParserInputPtr cur = NULL;
- char * str;
-
- if (ctxt != NULL) {
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) &&
- (ctxt->inputNr > 1)) {
- cur = input;
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
- xmlParserPrintFileInfo(input);
- }
-
- xmlGenericError(xmlGenericErrorContext, "warning: ");
- XML_GET_VAR_STR(msg, str);
- xmlGenericError(xmlGenericErrorContext, "%s", str);
- if (str != NULL)
- xmlFree(str);
-
- if (ctxt != NULL) {
- xmlParserPrintFileContext(input);
- if (cur != NULL) {
- xmlParserPrintFileInfo(cur);
- xmlGenericError(xmlGenericErrorContext, "\n");
- xmlParserPrintFileContext(cur);
- }
- }
-}
-
-/************************************************************************
- * *
- * Handling of validation errors *
- * *
- ************************************************************************/
-
-/**
- * xmlParserValidityError:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format an validity error messages, gives file,
- * line, position and extra parameters.
- */
-void XMLCDECL
-xmlParserValidityError(void *ctx, const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr input = NULL;
- char * str;
- int len = xmlStrlen((const xmlChar *) msg);
- static int had_info = 0;
-
- if ((len > 1) && (msg[len - 2] != ':')) {
- if (ctxt != NULL) {
- input = ctxt->input;
- if ((input->filename == NULL) && (ctxt->inputNr > 1))
- input = ctxt->inputTab[ctxt->inputNr - 2];
-
- if (had_info == 0) {
- xmlParserPrintFileInfo(input);
- }
- }
- xmlGenericError(xmlGenericErrorContext, "validity error: ");
- had_info = 0;
- } else {
- had_info = 1;
- }
-
- XML_GET_VAR_STR(msg, str);
- xmlGenericError(xmlGenericErrorContext, "%s", str);
- if (str != NULL)
- xmlFree(str);
-
- if ((ctxt != NULL) && (input != NULL)) {
- xmlParserPrintFileContext(input);
- }
-}
-
-/**
- * xmlParserValidityWarning:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a validity warning messages, gives file, line,
- * position and extra parameters.
- */
-void XMLCDECL
-xmlParserValidityWarning(void *ctx, const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr input = NULL;
- char * str;
- int len = xmlStrlen((const xmlChar *) msg);
-
- if ((ctxt != NULL) && (len != 0) && (msg[len - 1] != ':')) {
- input = ctxt->input;
- if ((input->filename == NULL) && (ctxt->inputNr > 1))
- input = ctxt->inputTab[ctxt->inputNr - 2];
-
- xmlParserPrintFileInfo(input);
- }
-
- xmlGenericError(xmlGenericErrorContext, "validity warning: ");
- XML_GET_VAR_STR(msg, str);
- xmlGenericError(xmlGenericErrorContext, "%s", str);
- if (str != NULL)
- xmlFree(str);
-
- if (ctxt != NULL) {
- xmlParserPrintFileContext(input);
- }
-}
-
-
-/************************************************************************
- * *
- * Extended Error Handling *
- * *
- ************************************************************************/
-
-/**
- * xmlGetLastError:
- *
- * Get the last global error registered. This is per thread if compiled
- * with thread support.
- *
- * Returns NULL if no error occured or a pointer to the error
- */
-xmlErrorPtr
-xmlGetLastError(void)
-{
- if (xmlLastError.code == XML_ERR_OK)
- return (NULL);
- return (&xmlLastError);
-}
-
-/**
- * xmlResetError:
- * @err: pointer to the error.
- *
- * Cleanup the error.
- */
-void
-xmlResetError(xmlErrorPtr err)
-{
- if (err == NULL)
- return;
- if (err->code == XML_ERR_OK)
- return;
- if (err->message != NULL)
- xmlFree(err->message);
- if (err->file != NULL)
- xmlFree(err->file);
- if (err->str1 != NULL)
- xmlFree(err->str1);
- if (err->str2 != NULL)
- xmlFree(err->str2);
- if (err->str3 != NULL)
- xmlFree(err->str3);
- memset(err, 0, sizeof(xmlError));
- err->code = XML_ERR_OK;
-}
-
-/**
- * xmlResetLastError:
- *
- * Cleanup the last global error registered. For parsing error
- * this does not change the well-formedness result.
- */
-void
-xmlResetLastError(void)
-{
- if (xmlLastError.code == XML_ERR_OK)
- return;
- xmlResetError(&xmlLastError);
-}
-
-/**
- * xmlCtxtGetLastError:
- * @ctx: an XML parser context
- *
- * Get the last parsing error registered.
- *
- * Returns NULL if no error occured or a pointer to the error
- */
-xmlErrorPtr
-xmlCtxtGetLastError(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
-
- if (ctxt == NULL)
- return (NULL);
- if (ctxt->lastError.code == XML_ERR_OK)
- return (NULL);
- return (&ctxt->lastError);
-}
-
-/**
- * xmlCtxtResetLastError:
- * @ctx: an XML parser context
- *
- * Cleanup the last global error registered. For parsing error
- * this does not change the well-formedness result.
- */
-void
-xmlCtxtResetLastError(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
-
- if (ctxt == NULL)
- return;
- ctxt->errNo = XML_ERR_OK;
- if (ctxt->lastError.code == XML_ERR_OK)
- return;
- xmlResetError(&ctxt->lastError);
-}
-
-/**
- * xmlCopyError:
- * @from: a source error
- * @to: a target error
- *
- * Save the original error to the new place.
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlCopyError(xmlErrorPtr from, xmlErrorPtr to) {
- char *message, *file, *str1, *str2, *str3;
-
- if ((from == NULL) || (to == NULL))
- return(-1);
-
- message = (char *) xmlStrdup((xmlChar *) from->message);
- file = (char *) xmlStrdup ((xmlChar *) from->file);
- str1 = (char *) xmlStrdup ((xmlChar *) from->str1);
- str2 = (char *) xmlStrdup ((xmlChar *) from->str2);
- str3 = (char *) xmlStrdup ((xmlChar *) from->str3);
-
- if (to->message != NULL)
- xmlFree(to->message);
- if (to->file != NULL)
- xmlFree(to->file);
- if (to->str1 != NULL)
- xmlFree(to->str1);
- if (to->str2 != NULL)
- xmlFree(to->str2);
- if (to->str3 != NULL)
- xmlFree(to->str3);
- to->domain = from->domain;
- to->code = from->code;
- to->level = from->level;
- to->line = from->line;
- to->node = from->node;
- to->int1 = from->int1;
- to->int2 = from->int2;
- to->node = from->node;
- to->ctxt = from->ctxt;
- to->message = message;
- to->file = file;
- to->str1 = str1;
- to->str2 = str2;
- to->str3 = str3;
-
- return 0;
-}
-
-#define bottom_error
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/globals.c b/external/libxml2_android/jni/libxml2/globals.c
deleted file mode 100644
index e351b03f..00000000
--- a/external/libxml2_android/jni/libxml2/globals.c
+++ /dev/null
@@ -1,1114 +0,0 @@
-/*
- * globals.c: definition and handling of the set of global variables
- * of the library
- *
- * The bottom of this file is automatically generated by build_glob.py
- * based on the description file global.data
- *
- * See Copyright for the status of this software.
- *
- * Gary Pennington <Gary.Pennington@uk.sun.com>
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h>
-
-#include <libxml/globals.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/threads.h>
-
-/* #define DEBUG_GLOBALS */
-
-/*
- * Helpful Macro
- */
-#ifdef LIBXML_THREAD_ENABLED
-#define IS_MAIN_THREAD (xmlIsMainThread())
-#else
-#define IS_MAIN_THREAD 1
-#endif
-
-/*
- * Mutex to protect "ForNewThreads" variables
- */
-static xmlMutexPtr xmlThrDefMutex = NULL;
-
-/**
- * xmlInitGlobals:
- *
- * Additional initialisation for multi-threading
- */
-void xmlInitGlobals(void)
-{
- if (xmlThrDefMutex == NULL)
- xmlThrDefMutex = xmlNewMutex();
-}
-
-/**
- * xmlCleanupGlobals:
- *
- * Additional cleanup for multi-threading
- */
-void xmlCleanupGlobals(void)
-{
- if (xmlThrDefMutex != NULL) {
- xmlFreeMutex(xmlThrDefMutex);
- xmlThrDefMutex = NULL;
- }
- __xmlGlobalInitMutexDestroy();
-}
-
-/************************************************************************
- * *
- * All the user accessible global variables of the library *
- * *
- ************************************************************************/
-
-/*
- * Memory allocation routines
- */
-#undef xmlFree
-#undef xmlMalloc
-#undef xmlMallocAtomic
-#undef xmlMemStrdup
-#undef xmlRealloc
-
-#if defined(DEBUG_MEMORY_LOCATION) || defined(DEBUG_MEMORY)
-xmlFreeFunc xmlFree = (xmlFreeFunc) xmlMemFree;
-xmlMallocFunc xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
-xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
-xmlReallocFunc xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
-xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
-#else
-/**
- * xmlFree:
- * @mem: an already allocated block of memory
- *
- * The variable holding the libxml free() implementation
- */
-xmlFreeFunc xmlFree = (xmlFreeFunc) free;
-/**
- * xmlMalloc:
- * @size: the size requested in bytes
- *
- * The variable holding the libxml malloc() implementation
- *
- * Returns a pointer to the newly allocated block or NULL in case of error
- */
-xmlMallocFunc xmlMalloc = (xmlMallocFunc) malloc;
-/**
- * xmlMallocAtomic:
- * @size: the size requested in bytes
- *
- * The variable holding the libxml malloc() implementation for atomic
- * data (i.e. blocks not containings pointers), useful when using a
- * garbage collecting allocator.
- *
- * Returns a pointer to the newly allocated block or NULL in case of error
- */
-xmlMallocFunc xmlMallocAtomic = (xmlMallocFunc) malloc;
-/**
- * xmlRealloc:
- * @mem: an already allocated block of memory
- * @size: the new size requested in bytes
- *
- * The variable holding the libxml realloc() implementation
- *
- * Returns a pointer to the newly reallocated block or NULL in case of error
- */
-xmlReallocFunc xmlRealloc = (xmlReallocFunc) realloc;
-/**
- * xmlMemStrdup:
- * @str: a zero terminated string
- *
- * The variable holding the libxml strdup() implementation
- *
- * Returns the copy of the string or NULL in case of error
- */
-xmlStrdupFunc xmlMemStrdup = (xmlStrdupFunc) xmlStrdup;
-#endif /* DEBUG_MEMORY_LOCATION || DEBUG_MEMORY */
-
-#include <libxml/threads.h>
-#include <libxml/globals.h>
-#include <libxml/SAX.h>
-
-#undef docbDefaultSAXHandler
-#undef htmlDefaultSAXHandler
-#undef oldXMLWDcompatibility
-#undef xmlBufferAllocScheme
-#undef xmlDefaultBufferSize
-#undef xmlDefaultSAXHandler
-#undef xmlDefaultSAXLocator
-#undef xmlDoValidityCheckingDefaultValue
-#undef xmlGenericError
-#undef xmlStructuredError
-#undef xmlGenericErrorContext
-#undef xmlStructuredErrorContext
-#undef xmlGetWarningsDefaultValue
-#undef xmlIndentTreeOutput
-#undef xmlTreeIndentString
-#undef xmlKeepBlanksDefaultValue
-#undef xmlLineNumbersDefaultValue
-#undef xmlLoadExtDtdDefaultValue
-#undef xmlParserDebugEntities
-#undef xmlParserVersion
-#undef xmlPedanticParserDefaultValue
-#undef xmlSaveNoEmptyTags
-#undef xmlSubstituteEntitiesDefaultValue
-#undef xmlRegisterNodeDefaultValue
-#undef xmlDeregisterNodeDefaultValue
-#undef xmlLastError
-
-#undef xmlParserInputBufferCreateFilenameValue
-#undef xmlOutputBufferCreateFilenameValue
-/**
- * xmlParserVersion:
- *
- * Constant string describing the internal version of the library
- */
-const char *xmlParserVersion = LIBXML_VERSION_STRING LIBXML_VERSION_EXTRA;
-
-/**
- * xmlBufferAllocScheme:
- *
- * Global setting, default allocation policy for buffers, default is
- * XML_BUFFER_ALLOC_EXACT
- */
-xmlBufferAllocationScheme xmlBufferAllocScheme = XML_BUFFER_ALLOC_EXACT;
-static xmlBufferAllocationScheme xmlBufferAllocSchemeThrDef = XML_BUFFER_ALLOC_EXACT;
-/**
- * xmlDefaultBufferSize:
- *
- * Global setting, default buffer size. Default value is BASE_BUFFER_SIZE
- */
-int xmlDefaultBufferSize = BASE_BUFFER_SIZE;
-static int xmlDefaultBufferSizeThrDef = BASE_BUFFER_SIZE;
-
-/*
- * Parser defaults
- */
-
-/**
- * oldXMLWDcompatibility:
- *
- * Global setting, DEPRECATED.
- */
-int oldXMLWDcompatibility = 0; /* DEPRECATED */
-/**
- * xmlParserDebugEntities:
- *
- * Global setting, asking the parser to print out debugging informations.
- * while handling entities.
- * Disabled by default
- */
-int xmlParserDebugEntities = 0;
-static int xmlParserDebugEntitiesThrDef = 0;
-/**
- * xmlDoValidityCheckingDefaultValue:
- *
- * Global setting, indicate that the parser should work in validating mode.
- * Disabled by default.
- */
-int xmlDoValidityCheckingDefaultValue = 0;
-static int xmlDoValidityCheckingDefaultValueThrDef = 0;
-/**
- * xmlGetWarningsDefaultValue:
- *
- * Global setting, indicate that the parser should provide warnings.
- * Activated by default.
- */
-int xmlGetWarningsDefaultValue = 1;
-static int xmlGetWarningsDefaultValueThrDef = 1;
-/**
- * xmlLoadExtDtdDefaultValue:
- *
- * Global setting, indicate that the parser should load DTD while not
- * validating.
- * Disabled by default.
- */
-int xmlLoadExtDtdDefaultValue = 0;
-static int xmlLoadExtDtdDefaultValueThrDef = 0;
-/**
- * xmlPedanticParserDefaultValue:
- *
- * Global setting, indicate that the parser be pedantic
- * Disabled by default.
- */
-int xmlPedanticParserDefaultValue = 0;
-static int xmlPedanticParserDefaultValueThrDef = 0;
-/**
- * xmlLineNumbersDefaultValue:
- *
- * Global setting, indicate that the parser should store the line number
- * in the content field of elements in the DOM tree.
- * Disabled by default since this may not be safe for old classes of
- * applicaton.
- */
-int xmlLineNumbersDefaultValue = 0;
-static int xmlLineNumbersDefaultValueThrDef = 0;
-/**
- * xmlKeepBlanksDefaultValue:
- *
- * Global setting, indicate that the parser should keep all blanks
- * nodes found in the content
- * Activated by default, this is actually needed to have the parser
- * conformant to the XML Recommendation, however the option is kept
- * for some applications since this was libxml1 default behaviour.
- */
-int xmlKeepBlanksDefaultValue = 1;
-static int xmlKeepBlanksDefaultValueThrDef = 1;
-/**
- * xmlSubstituteEntitiesDefaultValue:
- *
- * Global setting, indicate that the parser should not generate entity
- * references but replace them with the actual content of the entity
- * Disabled by default, this should be activated when using XPath since
- * the XPath data model requires entities replacement and the XPath
- * engine does not handle entities references transparently.
- */
-int xmlSubstituteEntitiesDefaultValue = 0;
-static int xmlSubstituteEntitiesDefaultValueThrDef = 0;
-
-xmlRegisterNodeFunc xmlRegisterNodeDefaultValue = NULL;
-static xmlRegisterNodeFunc xmlRegisterNodeDefaultValueThrDef = NULL;
-xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue = NULL;
-static xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValueThrDef = NULL;
-
-xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue = NULL;
-static xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValueThrDef = NULL;
-
-xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue = NULL;
-static xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValueThrDef = NULL;
-
-/*
- * Error handling
- */
-
-/* xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc; */
-/* Must initialize xmlGenericError in xmlInitParser */
-void XMLCDECL xmlGenericErrorDefaultFunc (void *ctx ATTRIBUTE_UNUSED,
- const char *msg,
- ...);
-/**
- * xmlGenericError:
- *
- * Global setting: function used for generic error callbacks
- */
-xmlGenericErrorFunc xmlGenericError = xmlGenericErrorDefaultFunc;
-static xmlGenericErrorFunc xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc;
-/**
- * xmlStructuredError:
- *
- * Global setting: function used for structured error callbacks
- */
-xmlStructuredErrorFunc xmlStructuredError = NULL;
-static xmlStructuredErrorFunc xmlStructuredErrorThrDef = NULL;
-/**
- * xmlGenericErrorContext:
- *
- * Global setting passed to generic error callbacks
- */
-void *xmlGenericErrorContext = NULL;
-static void *xmlGenericErrorContextThrDef = NULL;
-/**
- * xmlStructuredErrorContext:
- *
- * Global setting passed to structured error callbacks
- */
-void *xmlStructuredErrorContext = NULL;
-static void *xmlStructuredErrorContextThrDef = NULL;
-xmlError xmlLastError;
-
-/*
- * output defaults
- */
-/**
- * xmlIndentTreeOutput:
- *
- * Global setting, asking the serializer to indent the output tree by default
- * Enabled by default
- */
-int xmlIndentTreeOutput = 1;
-static int xmlIndentTreeOutputThrDef = 1;
-
-/**
- * xmlTreeIndentString:
- *
- * The string used to do one-level indent. By default is equal to " " (two spaces)
- */
-const char *xmlTreeIndentString = " ";
-static const char *xmlTreeIndentStringThrDef = " ";
-
-/**
- * xmlSaveNoEmptyTags:
- *
- * Global setting, asking the serializer to not output empty tags
- * as <empty/> but <empty></empty>. those two forms are undistinguishable
- * once parsed.
- * Disabled by default
- */
-int xmlSaveNoEmptyTags = 0;
-static int xmlSaveNoEmptyTagsThrDef = 0;
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * xmlDefaultSAXHandler:
- *
- * Default SAX version1 handler for XML, builds the DOM tree
- */
-xmlSAXHandlerV1 xmlDefaultSAXHandler = {
- xmlSAX2InternalSubset,
- xmlSAX2IsStandalone,
- xmlSAX2HasInternalSubset,
- xmlSAX2HasExternalSubset,
- xmlSAX2ResolveEntity,
- xmlSAX2GetEntity,
- xmlSAX2EntityDecl,
- xmlSAX2NotationDecl,
- xmlSAX2AttributeDecl,
- xmlSAX2ElementDecl,
- xmlSAX2UnparsedEntityDecl,
- xmlSAX2SetDocumentLocator,
- xmlSAX2StartDocument,
- xmlSAX2EndDocument,
- xmlSAX2StartElement,
- xmlSAX2EndElement,
- xmlSAX2Reference,
- xmlSAX2Characters,
- xmlSAX2Characters,
- xmlSAX2ProcessingInstruction,
- xmlSAX2Comment,
- xmlParserWarning,
- xmlParserError,
- xmlParserError,
- xmlSAX2GetParameterEntity,
- xmlSAX2CDataBlock,
- xmlSAX2ExternalSubset,
- 0,
-};
-#endif /* LIBXML_SAX1_ENABLED */
-
-/**
- * xmlDefaultSAXLocator:
- *
- * The default SAX Locator
- * { getPublicId, getSystemId, getLineNumber, getColumnNumber}
- */
-xmlSAXLocator xmlDefaultSAXLocator = {
- xmlSAX2GetPublicId,
- xmlSAX2GetSystemId,
- xmlSAX2GetLineNumber,
- xmlSAX2GetColumnNumber
-};
-
-#ifdef LIBXML_HTML_ENABLED
-/**
- * htmlDefaultSAXHandler:
- *
- * Default old SAX v1 handler for HTML, builds the DOM tree
- */
-xmlSAXHandlerV1 htmlDefaultSAXHandler = {
- xmlSAX2InternalSubset,
- NULL,
- NULL,
- NULL,
- NULL,
- xmlSAX2GetEntity,
- NULL,
- NULL,
- NULL,
- NULL,
- NULL,
- xmlSAX2SetDocumentLocator,
- xmlSAX2StartDocument,
- xmlSAX2EndDocument,
- xmlSAX2StartElement,
- xmlSAX2EndElement,
- NULL,
- xmlSAX2Characters,
- xmlSAX2IgnorableWhitespace,
- xmlSAX2ProcessingInstruction,
- xmlSAX2Comment,
- xmlParserWarning,
- xmlParserError,
- xmlParserError,
- xmlSAX2GetParameterEntity,
- xmlSAX2CDataBlock,
- NULL,
- 0,
-};
-#endif /* LIBXML_HTML_ENABLED */
-
-#ifdef LIBXML_DOCB_ENABLED
-/**
- * docbDefaultSAXHandler:
- *
- * Default old SAX v1 handler for SGML DocBook, builds the DOM tree
- */
-xmlSAXHandlerV1 docbDefaultSAXHandler = {
- xmlSAX2InternalSubset,
- xmlSAX2IsStandalone,
- xmlSAX2HasInternalSubset,
- xmlSAX2HasExternalSubset,
- xmlSAX2ResolveEntity,
- xmlSAX2GetEntity,
- xmlSAX2EntityDecl,
- NULL,
- NULL,
- NULL,
- NULL,
- xmlSAX2SetDocumentLocator,
- xmlSAX2StartDocument,
- xmlSAX2EndDocument,
- xmlSAX2StartElement,
- xmlSAX2EndElement,
- xmlSAX2Reference,
- xmlSAX2Characters,
- xmlSAX2IgnorableWhitespace,
- NULL,
- xmlSAX2Comment,
- xmlParserWarning,
- xmlParserError,
- xmlParserError,
- xmlSAX2GetParameterEntity,
- NULL,
- NULL,
- 0,
-};
-#endif /* LIBXML_DOCB_ENABLED */
-
-/**
- * xmlInitializeGlobalState:
- * @gs: a pointer to a newly allocated global state
- *
- * xmlInitializeGlobalState() initialize a global state with all the
- * default values of the library.
- */
-void
-xmlInitializeGlobalState(xmlGlobalStatePtr gs)
-{
-#ifdef DEBUG_GLOBALS
- fprintf(stderr, "Initializing globals at %lu for thread %d\n",
- (unsigned long) gs, xmlGetThreadId());
-#endif
-
- /*
- * Perform initialization as required by libxml
- */
- if (xmlThrDefMutex == NULL)
- xmlInitGlobals();
-
- xmlMutexLock(xmlThrDefMutex);
-
-#if defined(LIBXML_DOCB_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED)
- initdocbDefaultSAXHandler(&gs->docbDefaultSAXHandler);
-#endif
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_LEGACY_ENABLED) && defined(LIBXML_SAX1_ENABLED)
- inithtmlDefaultSAXHandler(&gs->htmlDefaultSAXHandler);
-#endif
-
- gs->oldXMLWDcompatibility = 0;
- gs->xmlBufferAllocScheme = xmlBufferAllocSchemeThrDef;
- gs->xmlDefaultBufferSize = xmlDefaultBufferSizeThrDef;
-#if defined(LIBXML_SAX1_ENABLED) && defined(LIBXML_LEGACY_ENABLED)
- initxmlDefaultSAXHandler(&gs->xmlDefaultSAXHandler, 1);
-#endif /* LIBXML_SAX1_ENABLED */
- gs->xmlDefaultSAXLocator.getPublicId = xmlSAX2GetPublicId;
- gs->xmlDefaultSAXLocator.getSystemId = xmlSAX2GetSystemId;
- gs->xmlDefaultSAXLocator.getLineNumber = xmlSAX2GetLineNumber;
- gs->xmlDefaultSAXLocator.getColumnNumber = xmlSAX2GetColumnNumber;
- gs->xmlDoValidityCheckingDefaultValue =
- xmlDoValidityCheckingDefaultValueThrDef;
-#if defined(DEBUG_MEMORY_LOCATION) | defined(DEBUG_MEMORY)
- gs->xmlFree = (xmlFreeFunc) xmlMemFree;
- gs->xmlMalloc = (xmlMallocFunc) xmlMemMalloc;
- gs->xmlMallocAtomic = (xmlMallocFunc) xmlMemMalloc;
- gs->xmlRealloc = (xmlReallocFunc) xmlMemRealloc;
- gs->xmlMemStrdup = (xmlStrdupFunc) xmlMemoryStrdup;
-#else
- gs->xmlFree = (xmlFreeFunc) free;
- gs->xmlMalloc = (xmlMallocFunc) malloc;
- gs->xmlMallocAtomic = (xmlMallocFunc) malloc;
- gs->xmlRealloc = (xmlReallocFunc) realloc;
- gs->xmlMemStrdup = (xmlStrdupFunc) xmlStrdup;
-#endif
- gs->xmlGetWarningsDefaultValue = xmlGetWarningsDefaultValueThrDef;
- gs->xmlIndentTreeOutput = xmlIndentTreeOutputThrDef;
- gs->xmlTreeIndentString = xmlTreeIndentStringThrDef;
- gs->xmlKeepBlanksDefaultValue = xmlKeepBlanksDefaultValueThrDef;
- gs->xmlLineNumbersDefaultValue = xmlLineNumbersDefaultValueThrDef;
- gs->xmlLoadExtDtdDefaultValue = xmlLoadExtDtdDefaultValueThrDef;
- gs->xmlParserDebugEntities = xmlParserDebugEntitiesThrDef;
- gs->xmlParserVersion = LIBXML_VERSION_STRING;
- gs->xmlPedanticParserDefaultValue = xmlPedanticParserDefaultValueThrDef;
- gs->xmlSaveNoEmptyTags = xmlSaveNoEmptyTagsThrDef;
- gs->xmlSubstituteEntitiesDefaultValue =
- xmlSubstituteEntitiesDefaultValueThrDef;
-
- gs->xmlGenericError = xmlGenericErrorThrDef;
- gs->xmlStructuredError = xmlStructuredErrorThrDef;
- gs->xmlGenericErrorContext = xmlGenericErrorContextThrDef;
- gs->xmlStructuredErrorContext = xmlStructuredErrorContextThrDef;
- gs->xmlRegisterNodeDefaultValue = xmlRegisterNodeDefaultValueThrDef;
- gs->xmlDeregisterNodeDefaultValue = xmlDeregisterNodeDefaultValueThrDef;
-
- gs->xmlParserInputBufferCreateFilenameValue = xmlParserInputBufferCreateFilenameValueThrDef;
- gs->xmlOutputBufferCreateFilenameValue = xmlOutputBufferCreateFilenameValueThrDef;
- memset(&gs->xmlLastError, 0, sizeof(xmlError));
-
- xmlMutexUnlock(xmlThrDefMutex);
-}
-
-/**
- * DOC_DISABLE : we ignore missing doc for the xmlThrDef functions,
- * those are really internal work
- */
-void
-xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler) {
- xmlMutexLock(xmlThrDefMutex);
- xmlGenericErrorContextThrDef = ctx;
- if (handler != NULL)
- xmlGenericErrorThrDef = handler;
- else
- xmlGenericErrorThrDef = xmlGenericErrorDefaultFunc;
- xmlMutexUnlock(xmlThrDefMutex);
-}
-
-void
-xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler) {
- xmlMutexLock(xmlThrDefMutex);
- xmlStructuredErrorContextThrDef = ctx;
- xmlStructuredErrorThrDef = handler;
- xmlMutexUnlock(xmlThrDefMutex);
-}
-
-/**
- * xmlRegisterNodeDefault:
- * @func: function pointer to the new RegisterNodeFunc
- *
- * Registers a callback for node creation
- *
- * Returns the old value of the registration function
- */
-xmlRegisterNodeFunc
-xmlRegisterNodeDefault(xmlRegisterNodeFunc func)
-{
- xmlRegisterNodeFunc old = xmlRegisterNodeDefaultValue;
-
- __xmlRegisterCallbacks = 1;
- xmlRegisterNodeDefaultValue = func;
- return(old);
-}
-
-xmlRegisterNodeFunc
-xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func)
-{
- xmlRegisterNodeFunc old;
-
- xmlMutexLock(xmlThrDefMutex);
- old = xmlRegisterNodeDefaultValueThrDef;
-
- __xmlRegisterCallbacks = 1;
- xmlRegisterNodeDefaultValueThrDef = func;
- xmlMutexUnlock(xmlThrDefMutex);
-
- return(old);
-}
-
-/**
- * xmlDeregisterNodeDefault:
- * @func: function pointer to the new DeregisterNodeFunc
- *
- * Registers a callback for node destruction
- *
- * Returns the previous value of the deregistration function
- */
-xmlDeregisterNodeFunc
-xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func)
-{
- xmlDeregisterNodeFunc old = xmlDeregisterNodeDefaultValue;
-
- __xmlRegisterCallbacks = 1;
- xmlDeregisterNodeDefaultValue = func;
- return(old);
-}
-
-xmlDeregisterNodeFunc
-xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func)
-{
- xmlDeregisterNodeFunc old;
-
- xmlMutexLock(xmlThrDefMutex);
- old = xmlDeregisterNodeDefaultValueThrDef;
-
- __xmlRegisterCallbacks = 1;
- xmlDeregisterNodeDefaultValueThrDef = func;
- xmlMutexUnlock(xmlThrDefMutex);
-
- return(old);
-}
-
-xmlParserInputBufferCreateFilenameFunc
-xmlThrDefParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func)
-{
- xmlParserInputBufferCreateFilenameFunc old;
-
- xmlMutexLock(xmlThrDefMutex);
- old = xmlParserInputBufferCreateFilenameValueThrDef;
- if (old == NULL) {
- old = __xmlParserInputBufferCreateFilename;
- }
-
- xmlParserInputBufferCreateFilenameValueThrDef = func;
- xmlMutexUnlock(xmlThrDefMutex);
-
- return(old);
-}
-
-xmlOutputBufferCreateFilenameFunc
-xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func)
-{
- xmlOutputBufferCreateFilenameFunc old;
-
- xmlMutexLock(xmlThrDefMutex);
- old = xmlOutputBufferCreateFilenameValueThrDef;
-#ifdef LIBXML_OUTPUT_ENABLED
- if (old == NULL) {
- old = __xmlOutputBufferCreateFilename;
- }
-#endif
- xmlOutputBufferCreateFilenameValueThrDef = func;
- xmlMutexUnlock(xmlThrDefMutex);
-
- return(old);
-}
-
-#ifdef LIBXML_DOCB_ENABLED
-#undef docbDefaultSAXHandler
-xmlSAXHandlerV1 *
-__docbDefaultSAXHandler(void) {
- if (IS_MAIN_THREAD)
- return (&docbDefaultSAXHandler);
- else
- return (&xmlGetGlobalState()->docbDefaultSAXHandler);
-}
-#endif
-
-#ifdef LIBXML_HTML_ENABLED
-#undef htmlDefaultSAXHandler
-xmlSAXHandlerV1 *
-__htmlDefaultSAXHandler(void) {
- if (IS_MAIN_THREAD)
- return (&htmlDefaultSAXHandler);
- else
- return (&xmlGetGlobalState()->htmlDefaultSAXHandler);
-}
-#endif
-
-#undef xmlLastError
-xmlError *
-__xmlLastError(void) {
- if (IS_MAIN_THREAD)
- return (&xmlLastError);
- else
- return (&xmlGetGlobalState()->xmlLastError);
-}
-
-/*
- * The following memory routines were apparently lost at some point,
- * and were re-inserted at this point on June 10, 2004. Hope it's
- * the right place for them :-)
- */
-#if defined(LIBXML_THREAD_ALLOC_ENABLED) && defined(LIBXML_THREAD_ENABLED)
-#undef xmlMalloc
-xmlMallocFunc *
-__xmlMalloc(void){
- if (IS_MAIN_THREAD)
- return (&xmlMalloc);
- else
- return (&xmlGetGlobalState()->xmlMalloc);
-}
-
-#undef xmlMallocAtomic
-xmlMallocFunc *
-__xmlMallocAtomic(void){
- if (IS_MAIN_THREAD)
- return (&xmlMallocAtomic);
- else
- return (&xmlGetGlobalState()->xmlMallocAtomic);
-}
-
-#undef xmlRealloc
-xmlReallocFunc *
-__xmlRealloc(void){
- if (IS_MAIN_THREAD)
- return (&xmlRealloc);
- else
- return (&xmlGetGlobalState()->xmlRealloc);
-}
-
-#undef xmlFree
-xmlFreeFunc *
-__xmlFree(void){
- if (IS_MAIN_THREAD)
- return (&xmlFree);
- else
- return (&xmlGetGlobalState()->xmlFree);
-}
-
-xmlStrdupFunc *
-__xmlMemStrdup(void){
- if (IS_MAIN_THREAD)
- return (&xmlMemStrdup);
- else
- return (&xmlGetGlobalState()->xmlMemStrdup);
-}
-
-#endif
-
-/*
- * Everything starting from the line below is
- * Automatically generated by build_glob.py.
- * Do not modify the previous line.
- */
-
-
-#undef oldXMLWDcompatibility
-int *
-__oldXMLWDcompatibility(void) {
- if (IS_MAIN_THREAD)
- return (&oldXMLWDcompatibility);
- else
- return (&xmlGetGlobalState()->oldXMLWDcompatibility);
-}
-
-#undef xmlBufferAllocScheme
-xmlBufferAllocationScheme *
-__xmlBufferAllocScheme(void) {
- if (IS_MAIN_THREAD)
- return (&xmlBufferAllocScheme);
- else
- return (&xmlGetGlobalState()->xmlBufferAllocScheme);
-}
-xmlBufferAllocationScheme xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v) {
- xmlBufferAllocationScheme ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlBufferAllocSchemeThrDef;
- xmlBufferAllocSchemeThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlDefaultBufferSize
-int *
-__xmlDefaultBufferSize(void) {
- if (IS_MAIN_THREAD)
- return (&xmlDefaultBufferSize);
- else
- return (&xmlGetGlobalState()->xmlDefaultBufferSize);
-}
-int xmlThrDefDefaultBufferSize(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlDefaultBufferSizeThrDef;
- xmlDefaultBufferSizeThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#ifdef LIBXML_SAX1_ENABLED
-#undef xmlDefaultSAXHandler
-xmlSAXHandlerV1 *
-__xmlDefaultSAXHandler(void) {
- if (IS_MAIN_THREAD)
- return (&xmlDefaultSAXHandler);
- else
- return (&xmlGetGlobalState()->xmlDefaultSAXHandler);
-}
-#endif /* LIBXML_SAX1_ENABLED */
-
-#undef xmlDefaultSAXLocator
-xmlSAXLocator *
-__xmlDefaultSAXLocator(void) {
- if (IS_MAIN_THREAD)
- return (&xmlDefaultSAXLocator);
- else
- return (&xmlGetGlobalState()->xmlDefaultSAXLocator);
-}
-
-#undef xmlDoValidityCheckingDefaultValue
-int *
-__xmlDoValidityCheckingDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlDoValidityCheckingDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlDoValidityCheckingDefaultValue);
-}
-int xmlThrDefDoValidityCheckingDefaultValue(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlDoValidityCheckingDefaultValueThrDef;
- xmlDoValidityCheckingDefaultValueThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlGenericError
-xmlGenericErrorFunc *
-__xmlGenericError(void) {
- if (IS_MAIN_THREAD)
- return (&xmlGenericError);
- else
- return (&xmlGetGlobalState()->xmlGenericError);
-}
-
-#undef xmlStructuredError
-xmlStructuredErrorFunc *
-__xmlStructuredError(void) {
- if (IS_MAIN_THREAD)
- return (&xmlStructuredError);
- else
- return (&xmlGetGlobalState()->xmlStructuredError);
-}
-
-#undef xmlGenericErrorContext
-void * *
-__xmlGenericErrorContext(void) {
- if (IS_MAIN_THREAD)
- return (&xmlGenericErrorContext);
- else
- return (&xmlGetGlobalState()->xmlGenericErrorContext);
-}
-
-#undef xmlStructuredErrorContext
-void * *
-__xmlStructuredErrorContext(void) {
- if (IS_MAIN_THREAD)
- return (&xmlStructuredErrorContext);
- else
- return (&xmlGetGlobalState()->xmlStructuredErrorContext);
-}
-
-#undef xmlGetWarningsDefaultValue
-int *
-__xmlGetWarningsDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlGetWarningsDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlGetWarningsDefaultValue);
-}
-int xmlThrDefGetWarningsDefaultValue(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlGetWarningsDefaultValueThrDef;
- xmlGetWarningsDefaultValueThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlIndentTreeOutput
-int *
-__xmlIndentTreeOutput(void) {
- if (IS_MAIN_THREAD)
- return (&xmlIndentTreeOutput);
- else
- return (&xmlGetGlobalState()->xmlIndentTreeOutput);
-}
-int xmlThrDefIndentTreeOutput(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlIndentTreeOutputThrDef;
- xmlIndentTreeOutputThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlTreeIndentString
-const char * *
-__xmlTreeIndentString(void) {
- if (IS_MAIN_THREAD)
- return (&xmlTreeIndentString);
- else
- return (&xmlGetGlobalState()->xmlTreeIndentString);
-}
-const char * xmlThrDefTreeIndentString(const char * v) {
- const char * ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlTreeIndentStringThrDef;
- xmlTreeIndentStringThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlKeepBlanksDefaultValue
-int *
-__xmlKeepBlanksDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlKeepBlanksDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlKeepBlanksDefaultValue);
-}
-int xmlThrDefKeepBlanksDefaultValue(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlKeepBlanksDefaultValueThrDef;
- xmlKeepBlanksDefaultValueThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlLineNumbersDefaultValue
-int *
-__xmlLineNumbersDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlLineNumbersDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlLineNumbersDefaultValue);
-}
-int xmlThrDefLineNumbersDefaultValue(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlLineNumbersDefaultValueThrDef;
- xmlLineNumbersDefaultValueThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlLoadExtDtdDefaultValue
-int *
-__xmlLoadExtDtdDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlLoadExtDtdDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlLoadExtDtdDefaultValue);
-}
-int xmlThrDefLoadExtDtdDefaultValue(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlLoadExtDtdDefaultValueThrDef;
- xmlLoadExtDtdDefaultValueThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlParserDebugEntities
-int *
-__xmlParserDebugEntities(void) {
- if (IS_MAIN_THREAD)
- return (&xmlParserDebugEntities);
- else
- return (&xmlGetGlobalState()->xmlParserDebugEntities);
-}
-int xmlThrDefParserDebugEntities(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlParserDebugEntitiesThrDef;
- xmlParserDebugEntitiesThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlParserVersion
-const char * *
-__xmlParserVersion(void) {
- if (IS_MAIN_THREAD)
- return (&xmlParserVersion);
- else
- return (&xmlGetGlobalState()->xmlParserVersion);
-}
-
-#undef xmlPedanticParserDefaultValue
-int *
-__xmlPedanticParserDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlPedanticParserDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlPedanticParserDefaultValue);
-}
-int xmlThrDefPedanticParserDefaultValue(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlPedanticParserDefaultValueThrDef;
- xmlPedanticParserDefaultValueThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlSaveNoEmptyTags
-int *
-__xmlSaveNoEmptyTags(void) {
- if (IS_MAIN_THREAD)
- return (&xmlSaveNoEmptyTags);
- else
- return (&xmlGetGlobalState()->xmlSaveNoEmptyTags);
-}
-int xmlThrDefSaveNoEmptyTags(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlSaveNoEmptyTagsThrDef;
- xmlSaveNoEmptyTagsThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlSubstituteEntitiesDefaultValue
-int *
-__xmlSubstituteEntitiesDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlSubstituteEntitiesDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlSubstituteEntitiesDefaultValue);
-}
-int xmlThrDefSubstituteEntitiesDefaultValue(int v) {
- int ret;
- xmlMutexLock(xmlThrDefMutex);
- ret = xmlSubstituteEntitiesDefaultValueThrDef;
- xmlSubstituteEntitiesDefaultValueThrDef = v;
- xmlMutexUnlock(xmlThrDefMutex);
- return ret;
-}
-
-#undef xmlRegisterNodeDefaultValue
-xmlRegisterNodeFunc *
-__xmlRegisterNodeDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlRegisterNodeDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlRegisterNodeDefaultValue);
-}
-
-#undef xmlDeregisterNodeDefaultValue
-xmlDeregisterNodeFunc *
-__xmlDeregisterNodeDefaultValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlDeregisterNodeDefaultValue);
- else
- return (&xmlGetGlobalState()->xmlDeregisterNodeDefaultValue);
-}
-
-#undef xmlParserInputBufferCreateFilenameValue
-xmlParserInputBufferCreateFilenameFunc *
-__xmlParserInputBufferCreateFilenameValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlParserInputBufferCreateFilenameValue);
- else
- return (&xmlGetGlobalState()->xmlParserInputBufferCreateFilenameValue);
-}
-
-#undef xmlOutputBufferCreateFilenameValue
-xmlOutputBufferCreateFilenameFunc *
-__xmlOutputBufferCreateFilenameValue(void) {
- if (IS_MAIN_THREAD)
- return (&xmlOutputBufferCreateFilenameValue);
- else
- return (&xmlGetGlobalState()->xmlOutputBufferCreateFilenameValue);
-}
-
-#define bottom_globals
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/hash.c b/external/libxml2_android/jni/libxml2/hash.c
deleted file mode 100644
index f9a20172..00000000
--- a/external/libxml2_android/jni/libxml2/hash.c
+++ /dev/null
@@ -1,1124 +0,0 @@
-/*
- * hash.c: chained hash tables
- *
- * Reference: Your favorite introductory book on algorithms
- *
- * Copyright (C) 2000,2012 Bjorn Reese and Daniel Veillard.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- * Author: breese@users.sourceforge.net
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-
-/*
- * Following http://www.ocert.org/advisories/ocert-2011-003.html
- * it seems that having hash randomization might be a good idea
- * when using XML with untrusted data
- */
-#if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME)
-#define HASH_RANDOMIZATION
-#endif
-
-#include <libxml/parser.h>
-#include <libxml/hash.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-
-#define MAX_HASH_LEN 8
-
-/* #define DEBUG_GROW */
-
-/*
- * A single entry in the hash table
- */
-typedef struct _xmlHashEntry xmlHashEntry;
-typedef xmlHashEntry *xmlHashEntryPtr;
-struct _xmlHashEntry {
- struct _xmlHashEntry *next;
- xmlChar *name;
- xmlChar *name2;
- xmlChar *name3;
- void *payload;
- int valid;
-};
-
-/*
- * The entire hash table
- */
-struct _xmlHashTable {
- struct _xmlHashEntry *table;
- int size;
- int nbElems;
- xmlDictPtr dict;
-#ifdef HASH_RANDOMIZATION
- int random_seed;
-#endif
-};
-
-/*
- * xmlHashComputeKey:
- * Calculate the hash key
- */
-static unsigned long
-xmlHashComputeKey(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, const xmlChar *name3) {
- unsigned long value = 0L;
- char ch;
-
-#ifdef HASH_RANDOMIZATION
- value = table->random_seed;
-#endif
- if (name != NULL) {
- value += 30 * (*name);
- while ((ch = *name++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- }
- value = value ^ ((value << 5) + (value >> 3));
- if (name2 != NULL) {
- while ((ch = *name2++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- }
- value = value ^ ((value << 5) + (value >> 3));
- if (name3 != NULL) {
- while ((ch = *name3++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- }
- return (value % table->size);
-}
-
-static unsigned long
-xmlHashComputeQKey(xmlHashTablePtr table,
- const xmlChar *prefix, const xmlChar *name,
- const xmlChar *prefix2, const xmlChar *name2,
- const xmlChar *prefix3, const xmlChar *name3) {
- unsigned long value = 0L;
- char ch;
-
-#ifdef HASH_RANDOMIZATION
- value = table->random_seed;
-#endif
- if (prefix != NULL)
- value += 30 * (*prefix);
- else
- value += 30 * (*name);
-
- if (prefix != NULL) {
- while ((ch = *prefix++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':');
- }
- if (name != NULL) {
- while ((ch = *name++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- }
- value = value ^ ((value << 5) + (value >> 3));
- if (prefix2 != NULL) {
- while ((ch = *prefix2++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':');
- }
- if (name2 != NULL) {
- while ((ch = *name2++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- }
- value = value ^ ((value << 5) + (value >> 3));
- if (prefix3 != NULL) {
- while ((ch = *prefix3++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)':');
- }
- if (name3 != NULL) {
- while ((ch = *name3++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- }
- return (value % table->size);
-}
-
-/**
- * xmlHashCreate:
- * @size: the size of the hash table
- *
- * Create a new xmlHashTablePtr.
- *
- * Returns the newly created object, or NULL if an error occured.
- */
-xmlHashTablePtr
-xmlHashCreate(int size) {
- xmlHashTablePtr table;
-
- if (size <= 0)
- size = 256;
-
- table = xmlMalloc(sizeof(xmlHashTable));
- if (table) {
- table->dict = NULL;
- table->size = size;
- table->nbElems = 0;
- table->table = xmlMalloc(size * sizeof(xmlHashEntry));
- if (table->table) {
- memset(table->table, 0, size * sizeof(xmlHashEntry));
-#ifdef HASH_RANDOMIZATION
- table->random_seed = __xmlRandom();
-#endif
- return(table);
- }
- xmlFree(table);
- }
- return(NULL);
-}
-
-/**
- * xmlHashCreateDict:
- * @size: the size of the hash table
- * @dict: a dictionary to use for the hash
- *
- * Create a new xmlHashTablePtr which will use @dict as the internal dictionary
- *
- * Returns the newly created object, or NULL if an error occured.
- */
-xmlHashTablePtr
-xmlHashCreateDict(int size, xmlDictPtr dict) {
- xmlHashTablePtr table;
-
- table = xmlHashCreate(size);
- if (table != NULL) {
- table->dict = dict;
- xmlDictReference(dict);
- }
- return(table);
-}
-
-/**
- * xmlHashGrow:
- * @table: the hash table
- * @size: the new size of the hash table
- *
- * resize the hash table
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlHashGrow(xmlHashTablePtr table, int size) {
- unsigned long key;
- int oldsize, i;
- xmlHashEntryPtr iter, next;
- struct _xmlHashEntry *oldtable;
-#ifdef DEBUG_GROW
- unsigned long nbElem = 0;
-#endif
-
- if (table == NULL)
- return(-1);
- if (size < 8)
- return(-1);
- if (size > 8 * 2048)
- return(-1);
-
- oldsize = table->size;
- oldtable = table->table;
- if (oldtable == NULL)
- return(-1);
-
- table->table = xmlMalloc(size * sizeof(xmlHashEntry));
- if (table->table == NULL) {
- table->table = oldtable;
- return(-1);
- }
- memset(table->table, 0, size * sizeof(xmlHashEntry));
- table->size = size;
-
- /* If the two loops are merged, there would be situations where
- a new entry needs to allocated and data copied into it from
- the main table. So instead, we run through the array twice, first
- copying all the elements in the main array (where we can't get
- conflicts) and then the rest, so we only free (and don't allocate)
- */
- for (i = 0; i < oldsize; i++) {
- if (oldtable[i].valid == 0)
- continue;
- key = xmlHashComputeKey(table, oldtable[i].name, oldtable[i].name2,
- oldtable[i].name3);
- memcpy(&(table->table[key]), &(oldtable[i]), sizeof(xmlHashEntry));
- table->table[key].next = NULL;
- }
-
- for (i = 0; i < oldsize; i++) {
- iter = oldtable[i].next;
- while (iter) {
- next = iter->next;
-
- /*
- * put back the entry in the new table
- */
-
- key = xmlHashComputeKey(table, iter->name, iter->name2,
- iter->name3);
- if (table->table[key].valid == 0) {
- memcpy(&(table->table[key]), iter, sizeof(xmlHashEntry));
- table->table[key].next = NULL;
- xmlFree(iter);
- } else {
- iter->next = table->table[key].next;
- table->table[key].next = iter;
- }
-
-#ifdef DEBUG_GROW
- nbElem++;
-#endif
-
- iter = next;
- }
- }
-
- xmlFree(oldtable);
-
-#ifdef DEBUG_GROW
- xmlGenericError(xmlGenericErrorContext,
- "xmlHashGrow : from %d to %d, %d elems\n", oldsize, size, nbElem);
-#endif
-
- return(0);
-}
-
-/**
- * xmlHashFree:
- * @table: the hash table
- * @f: the deallocator function for items in the hash
- *
- * Free the hash @table and its contents. The userdata is
- * deallocated with @f if provided.
- */
-void
-xmlHashFree(xmlHashTablePtr table, xmlHashDeallocator f) {
- int i;
- xmlHashEntryPtr iter;
- xmlHashEntryPtr next;
- int inside_table = 0;
- int nbElems;
-
- if (table == NULL)
- return;
- if (table->table) {
- nbElems = table->nbElems;
- for(i = 0; (i < table->size) && (nbElems > 0); i++) {
- iter = &(table->table[i]);
- if (iter->valid == 0)
- continue;
- inside_table = 1;
- while (iter) {
- next = iter->next;
- if ((f != NULL) && (iter->payload != NULL))
- f(iter->payload, iter->name);
- if (table->dict == NULL) {
- if (iter->name)
- xmlFree(iter->name);
- if (iter->name2)
- xmlFree(iter->name2);
- if (iter->name3)
- xmlFree(iter->name3);
- }
- iter->payload = NULL;
- if (!inside_table)
- xmlFree(iter);
- nbElems--;
- inside_table = 0;
- iter = next;
- }
- }
- xmlFree(table->table);
- }
- if (table->dict)
- xmlDictFree(table->dict);
- xmlFree(table);
-}
-
-/**
- * xmlHashAddEntry:
- * @table: the hash table
- * @name: the name of the userdata
- * @userdata: a pointer to the userdata
- *
- * Add the @userdata to the hash @table. This can later be retrieved
- * by using the @name. Duplicate names generate errors.
- *
- * Returns 0 the addition succeeded and -1 in case of error.
- */
-int
-xmlHashAddEntry(xmlHashTablePtr table, const xmlChar *name, void *userdata) {
- return(xmlHashAddEntry3(table, name, NULL, NULL, userdata));
-}
-
-/**
- * xmlHashAddEntry2:
- * @table: the hash table
- * @name: the name of the userdata
- * @name2: a second name of the userdata
- * @userdata: a pointer to the userdata
- *
- * Add the @userdata to the hash @table. This can later be retrieved
- * by using the (@name, @name2) tuple. Duplicate tuples generate errors.
- *
- * Returns 0 the addition succeeded and -1 in case of error.
- */
-int
-xmlHashAddEntry2(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, void *userdata) {
- return(xmlHashAddEntry3(table, name, name2, NULL, userdata));
-}
-
-/**
- * xmlHashUpdateEntry:
- * @table: the hash table
- * @name: the name of the userdata
- * @userdata: a pointer to the userdata
- * @f: the deallocator function for replaced item (if any)
- *
- * Add the @userdata to the hash @table. This can later be retrieved
- * by using the @name. Existing entry for this @name will be removed
- * and freed with @f if found.
- *
- * Returns 0 the addition succeeded and -1 in case of error.
- */
-int
-xmlHashUpdateEntry(xmlHashTablePtr table, const xmlChar *name,
- void *userdata, xmlHashDeallocator f) {
- return(xmlHashUpdateEntry3(table, name, NULL, NULL, userdata, f));
-}
-
-/**
- * xmlHashUpdateEntry2:
- * @table: the hash table
- * @name: the name of the userdata
- * @name2: a second name of the userdata
- * @userdata: a pointer to the userdata
- * @f: the deallocator function for replaced item (if any)
- *
- * Add the @userdata to the hash @table. This can later be retrieved
- * by using the (@name, @name2) tuple. Existing entry for this tuple will
- * be removed and freed with @f if found.
- *
- * Returns 0 the addition succeeded and -1 in case of error.
- */
-int
-xmlHashUpdateEntry2(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, void *userdata,
- xmlHashDeallocator f) {
- return(xmlHashUpdateEntry3(table, name, name2, NULL, userdata, f));
-}
-
-/**
- * xmlHashLookup:
- * @table: the hash table
- * @name: the name of the userdata
- *
- * Find the userdata specified by the @name.
- *
- * Returns the pointer to the userdata
- */
-void *
-xmlHashLookup(xmlHashTablePtr table, const xmlChar *name) {
- return(xmlHashLookup3(table, name, NULL, NULL));
-}
-
-/**
- * xmlHashLookup2:
- * @table: the hash table
- * @name: the name of the userdata
- * @name2: a second name of the userdata
- *
- * Find the userdata specified by the (@name, @name2) tuple.
- *
- * Returns the pointer to the userdata
- */
-void *
-xmlHashLookup2(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2) {
- return(xmlHashLookup3(table, name, name2, NULL));
-}
-
-/**
- * xmlHashQLookup:
- * @table: the hash table
- * @prefix: the prefix of the userdata
- * @name: the name of the userdata
- *
- * Find the userdata specified by the QName @prefix:@name/@name.
- *
- * Returns the pointer to the userdata
- */
-void *
-xmlHashQLookup(xmlHashTablePtr table, const xmlChar *prefix,
- const xmlChar *name) {
- return(xmlHashQLookup3(table, prefix, name, NULL, NULL, NULL, NULL));
-}
-
-/**
- * xmlHashQLookup2:
- * @table: the hash table
- * @prefix: the prefix of the userdata
- * @name: the name of the userdata
- * @prefix2: the second prefix of the userdata
- * @name2: a second name of the userdata
- *
- * Find the userdata specified by the QNames tuple
- *
- * Returns the pointer to the userdata
- */
-void *
-xmlHashQLookup2(xmlHashTablePtr table, const xmlChar *prefix,
- const xmlChar *name, const xmlChar *prefix2,
- const xmlChar *name2) {
- return(xmlHashQLookup3(table, prefix, name, prefix2, name2, NULL, NULL));
-}
-
-/**
- * xmlHashAddEntry3:
- * @table: the hash table
- * @name: the name of the userdata
- * @name2: a second name of the userdata
- * @name3: a third name of the userdata
- * @userdata: a pointer to the userdata
- *
- * Add the @userdata to the hash @table. This can later be retrieved
- * by using the tuple (@name, @name2, @name3). Duplicate entries generate
- * errors.
- *
- * Returns 0 the addition succeeded and -1 in case of error.
- */
-int
-xmlHashAddEntry3(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, const xmlChar *name3,
- void *userdata) {
- unsigned long key, len = 0;
- xmlHashEntryPtr entry;
- xmlHashEntryPtr insert;
-
- if ((table == NULL) || (name == NULL))
- return(-1);
-
- /*
- * If using a dict internalize if needed
- */
- if (table->dict) {
- if (!xmlDictOwns(table->dict, name)) {
- name = xmlDictLookup(table->dict, name, -1);
- if (name == NULL)
- return(-1);
- }
- if ((name2 != NULL) && (!xmlDictOwns(table->dict, name2))) {
- name2 = xmlDictLookup(table->dict, name2, -1);
- if (name2 == NULL)
- return(-1);
- }
- if ((name3 != NULL) && (!xmlDictOwns(table->dict, name3))) {
- name3 = xmlDictLookup(table->dict, name3, -1);
- if (name3 == NULL)
- return(-1);
- }
- }
-
- /*
- * Check for duplicate and insertion location.
- */
- key = xmlHashComputeKey(table, name, name2, name3);
- if (table->table[key].valid == 0) {
- insert = NULL;
- } else {
- if (table->dict) {
- for (insert = &(table->table[key]); insert->next != NULL;
- insert = insert->next) {
- if ((insert->name == name) &&
- (insert->name2 == name2) &&
- (insert->name3 == name3))
- return(-1);
- len++;
- }
- if ((insert->name == name) &&
- (insert->name2 == name2) &&
- (insert->name3 == name3))
- return(-1);
- } else {
- for (insert = &(table->table[key]); insert->next != NULL;
- insert = insert->next) {
- if ((xmlStrEqual(insert->name, name)) &&
- (xmlStrEqual(insert->name2, name2)) &&
- (xmlStrEqual(insert->name3, name3)))
- return(-1);
- len++;
- }
- if ((xmlStrEqual(insert->name, name)) &&
- (xmlStrEqual(insert->name2, name2)) &&
- (xmlStrEqual(insert->name3, name3)))
- return(-1);
- }
- }
-
- if (insert == NULL) {
- entry = &(table->table[key]);
- } else {
- entry = xmlMalloc(sizeof(xmlHashEntry));
- if (entry == NULL)
- return(-1);
- }
-
- if (table->dict != NULL) {
- entry->name = (xmlChar *) name;
- entry->name2 = (xmlChar *) name2;
- entry->name3 = (xmlChar *) name3;
- } else {
- entry->name = xmlStrdup(name);
- entry->name2 = xmlStrdup(name2);
- entry->name3 = xmlStrdup(name3);
- }
- entry->payload = userdata;
- entry->next = NULL;
- entry->valid = 1;
-
-
- if (insert != NULL)
- insert->next = entry;
-
- table->nbElems++;
-
- if (len > MAX_HASH_LEN)
- xmlHashGrow(table, MAX_HASH_LEN * table->size);
-
- return(0);
-}
-
-/**
- * xmlHashUpdateEntry3:
- * @table: the hash table
- * @name: the name of the userdata
- * @name2: a second name of the userdata
- * @name3: a third name of the userdata
- * @userdata: a pointer to the userdata
- * @f: the deallocator function for replaced item (if any)
- *
- * Add the @userdata to the hash @table. This can later be retrieved
- * by using the tuple (@name, @name2, @name3). Existing entry for this tuple
- * will be removed and freed with @f if found.
- *
- * Returns 0 the addition succeeded and -1 in case of error.
- */
-int
-xmlHashUpdateEntry3(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, const xmlChar *name3,
- void *userdata, xmlHashDeallocator f) {
- unsigned long key;
- xmlHashEntryPtr entry;
- xmlHashEntryPtr insert;
-
- if ((table == NULL) || name == NULL)
- return(-1);
-
- /*
- * If using a dict internalize if needed
- */
- if (table->dict) {
- if (!xmlDictOwns(table->dict, name)) {
- name = xmlDictLookup(table->dict, name, -1);
- if (name == NULL)
- return(-1);
- }
- if ((name2 != NULL) && (!xmlDictOwns(table->dict, name2))) {
- name2 = xmlDictLookup(table->dict, name2, -1);
- if (name2 == NULL)
- return(-1);
- }
- if ((name3 != NULL) && (!xmlDictOwns(table->dict, name3))) {
- name3 = xmlDictLookup(table->dict, name3, -1);
- if (name3 == NULL)
- return(-1);
- }
- }
-
- /*
- * Check for duplicate and insertion location.
- */
- key = xmlHashComputeKey(table, name, name2, name3);
- if (table->table[key].valid == 0) {
- insert = NULL;
- } else {
- if (table ->dict) {
- for (insert = &(table->table[key]); insert->next != NULL;
- insert = insert->next) {
- if ((insert->name == name) &&
- (insert->name2 == name2) &&
- (insert->name3 == name3)) {
- if (f)
- f(insert->payload, insert->name);
- insert->payload = userdata;
- return(0);
- }
- }
- if ((insert->name == name) &&
- (insert->name2 == name2) &&
- (insert->name3 == name3)) {
- if (f)
- f(insert->payload, insert->name);
- insert->payload = userdata;
- return(0);
- }
- } else {
- for (insert = &(table->table[key]); insert->next != NULL;
- insert = insert->next) {
- if ((xmlStrEqual(insert->name, name)) &&
- (xmlStrEqual(insert->name2, name2)) &&
- (xmlStrEqual(insert->name3, name3))) {
- if (f)
- f(insert->payload, insert->name);
- insert->payload = userdata;
- return(0);
- }
- }
- if ((xmlStrEqual(insert->name, name)) &&
- (xmlStrEqual(insert->name2, name2)) &&
- (xmlStrEqual(insert->name3, name3))) {
- if (f)
- f(insert->payload, insert->name);
- insert->payload = userdata;
- return(0);
- }
- }
- }
-
- if (insert == NULL) {
- entry = &(table->table[key]);
- } else {
- entry = xmlMalloc(sizeof(xmlHashEntry));
- if (entry == NULL)
- return(-1);
- }
-
- if (table->dict != NULL) {
- entry->name = (xmlChar *) name;
- entry->name2 = (xmlChar *) name2;
- entry->name3 = (xmlChar *) name3;
- } else {
- entry->name = xmlStrdup(name);
- entry->name2 = xmlStrdup(name2);
- entry->name3 = xmlStrdup(name3);
- }
- entry->payload = userdata;
- entry->next = NULL;
- entry->valid = 1;
- table->nbElems++;
-
-
- if (insert != NULL) {
- insert->next = entry;
- }
- return(0);
-}
-
-/**
- * xmlHashLookup3:
- * @table: the hash table
- * @name: the name of the userdata
- * @name2: a second name of the userdata
- * @name3: a third name of the userdata
- *
- * Find the userdata specified by the (@name, @name2, @name3) tuple.
- *
- * Returns the a pointer to the userdata
- */
-void *
-xmlHashLookup3(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, const xmlChar *name3) {
- unsigned long key;
- xmlHashEntryPtr entry;
-
- if (table == NULL)
- return(NULL);
- if (name == NULL)
- return(NULL);
- key = xmlHashComputeKey(table, name, name2, name3);
- if (table->table[key].valid == 0)
- return(NULL);
- if (table->dict) {
- for (entry = &(table->table[key]); entry != NULL; entry = entry->next) {
- if ((entry->name == name) &&
- (entry->name2 == name2) &&
- (entry->name3 == name3))
- return(entry->payload);
- }
- }
- for (entry = &(table->table[key]); entry != NULL; entry = entry->next) {
- if ((xmlStrEqual(entry->name, name)) &&
- (xmlStrEqual(entry->name2, name2)) &&
- (xmlStrEqual(entry->name3, name3)))
- return(entry->payload);
- }
- return(NULL);
-}
-
-/**
- * xmlHashQLookup3:
- * @table: the hash table
- * @prefix: the prefix of the userdata
- * @name: the name of the userdata
- * @prefix2: the second prefix of the userdata
- * @name2: a second name of the userdata
- * @prefix3: the third prefix of the userdata
- * @name3: a third name of the userdata
- *
- * Find the userdata specified by the (@name, @name2, @name3) tuple.
- *
- * Returns the a pointer to the userdata
- */
-void *
-xmlHashQLookup3(xmlHashTablePtr table,
- const xmlChar *prefix, const xmlChar *name,
- const xmlChar *prefix2, const xmlChar *name2,
- const xmlChar *prefix3, const xmlChar *name3) {
- unsigned long key;
- xmlHashEntryPtr entry;
-
- if (table == NULL)
- return(NULL);
- if (name == NULL)
- return(NULL);
- key = xmlHashComputeQKey(table, prefix, name, prefix2,
- name2, prefix3, name3);
- if (table->table[key].valid == 0)
- return(NULL);
- for (entry = &(table->table[key]); entry != NULL; entry = entry->next) {
- if ((xmlStrQEqual(prefix, name, entry->name)) &&
- (xmlStrQEqual(prefix2, name2, entry->name2)) &&
- (xmlStrQEqual(prefix3, name3, entry->name3)))
- return(entry->payload);
- }
- return(NULL);
-}
-
-typedef struct {
- xmlHashScanner hashscanner;
- void *data;
-} stubData;
-
-static void
-stubHashScannerFull (void *payload, void *data, const xmlChar *name,
- const xmlChar *name2 ATTRIBUTE_UNUSED,
- const xmlChar *name3 ATTRIBUTE_UNUSED) {
- stubData *stubdata = (stubData *) data;
- stubdata->hashscanner (payload, stubdata->data, (xmlChar *) name);
-}
-
-/**
- * xmlHashScan:
- * @table: the hash table
- * @f: the scanner function for items in the hash
- * @data: extra data passed to f
- *
- * Scan the hash @table and applied @f to each value.
- */
-void
-xmlHashScan(xmlHashTablePtr table, xmlHashScanner f, void *data) {
- stubData stubdata;
- stubdata.data = data;
- stubdata.hashscanner = f;
- xmlHashScanFull (table, stubHashScannerFull, &stubdata);
-}
-
-/**
- * xmlHashScanFull:
- * @table: the hash table
- * @f: the scanner function for items in the hash
- * @data: extra data passed to f
- *
- * Scan the hash @table and applied @f to each value.
- */
-void
-xmlHashScanFull(xmlHashTablePtr table, xmlHashScannerFull f, void *data) {
- int i, nb;
- xmlHashEntryPtr iter;
- xmlHashEntryPtr next;
-
- if (table == NULL)
- return;
- if (f == NULL)
- return;
-
- if (table->table) {
- for(i = 0; i < table->size; i++) {
- if (table->table[i].valid == 0)
- continue;
- iter = &(table->table[i]);
- while (iter) {
- next = iter->next;
- nb = table->nbElems;
- if ((f != NULL) && (iter->payload != NULL))
- f(iter->payload, data, iter->name,
- iter->name2, iter->name3);
- if (nb != table->nbElems) {
- /* table was modified by the callback, be careful */
- if (iter == &(table->table[i])) {
- if (table->table[i].valid == 0)
- iter = NULL;
- if (table->table[i].next != next)
- iter = &(table->table[i]);
- } else
- iter = next;
- } else
- iter = next;
- }
- }
- }
-}
-
-/**
- * xmlHashScan3:
- * @table: the hash table
- * @name: the name of the userdata or NULL
- * @name2: a second name of the userdata or NULL
- * @name3: a third name of the userdata or NULL
- * @f: the scanner function for items in the hash
- * @data: extra data passed to f
- *
- * Scan the hash @table and applied @f to each value matching
- * (@name, @name2, @name3) tuple. If one of the names is null,
- * the comparison is considered to match.
- */
-void
-xmlHashScan3(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, const xmlChar *name3,
- xmlHashScanner f, void *data) {
- xmlHashScanFull3 (table, name, name2, name3,
- (xmlHashScannerFull) f, data);
-}
-
-/**
- * xmlHashScanFull3:
- * @table: the hash table
- * @name: the name of the userdata or NULL
- * @name2: a second name of the userdata or NULL
- * @name3: a third name of the userdata or NULL
- * @f: the scanner function for items in the hash
- * @data: extra data passed to f
- *
- * Scan the hash @table and applied @f to each value matching
- * (@name, @name2, @name3) tuple. If one of the names is null,
- * the comparison is considered to match.
- */
-void
-xmlHashScanFull3(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, const xmlChar *name3,
- xmlHashScannerFull f, void *data) {
- int i;
- xmlHashEntryPtr iter;
- xmlHashEntryPtr next;
-
- if (table == NULL)
- return;
- if (f == NULL)
- return;
-
- if (table->table) {
- for(i = 0; i < table->size; i++) {
- if (table->table[i].valid == 0)
- continue;
- iter = &(table->table[i]);
- while (iter) {
- next = iter->next;
- if (((name == NULL) || (xmlStrEqual(name, iter->name))) &&
- ((name2 == NULL) || (xmlStrEqual(name2, iter->name2))) &&
- ((name3 == NULL) || (xmlStrEqual(name3, iter->name3))) &&
- (iter->payload != NULL)) {
- f(iter->payload, data, iter->name,
- iter->name2, iter->name3);
- }
- iter = next;
- }
- }
- }
-}
-
-/**
- * xmlHashCopy:
- * @table: the hash table
- * @f: the copier function for items in the hash
- *
- * Scan the hash @table and applied @f to each value.
- *
- * Returns the new table or NULL in case of error.
- */
-xmlHashTablePtr
-xmlHashCopy(xmlHashTablePtr table, xmlHashCopier f) {
- int i;
- xmlHashEntryPtr iter;
- xmlHashEntryPtr next;
- xmlHashTablePtr ret;
-
- if (table == NULL)
- return(NULL);
- if (f == NULL)
- return(NULL);
-
- ret = xmlHashCreate(table->size);
- if (ret == NULL)
- return(NULL);
-
- if (table->table) {
- for(i = 0; i < table->size; i++) {
- if (table->table[i].valid == 0)
- continue;
- iter = &(table->table[i]);
- while (iter) {
- next = iter->next;
- xmlHashAddEntry3(ret, iter->name, iter->name2,
- iter->name3, f(iter->payload, iter->name));
- iter = next;
- }
- }
- }
- ret->nbElems = table->nbElems;
- return(ret);
-}
-
-/**
- * xmlHashSize:
- * @table: the hash table
- *
- * Query the number of elements installed in the hash @table.
- *
- * Returns the number of elements in the hash table or
- * -1 in case of error
- */
-int
-xmlHashSize(xmlHashTablePtr table) {
- if (table == NULL)
- return(-1);
- return(table->nbElems);
-}
-
-/**
- * xmlHashRemoveEntry:
- * @table: the hash table
- * @name: the name of the userdata
- * @f: the deallocator function for removed item (if any)
- *
- * Find the userdata specified by the @name and remove
- * it from the hash @table. Existing userdata for this tuple will be removed
- * and freed with @f.
- *
- * Returns 0 if the removal succeeded and -1 in case of error or not found.
- */
-int xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
- xmlHashDeallocator f) {
- return(xmlHashRemoveEntry3(table, name, NULL, NULL, f));
-}
-
-/**
- * xmlHashRemoveEntry2:
- * @table: the hash table
- * @name: the name of the userdata
- * @name2: a second name of the userdata
- * @f: the deallocator function for removed item (if any)
- *
- * Find the userdata specified by the (@name, @name2) tuple and remove
- * it from the hash @table. Existing userdata for this tuple will be removed
- * and freed with @f.
- *
- * Returns 0 if the removal succeeded and -1 in case of error or not found.
- */
-int
-xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, xmlHashDeallocator f) {
- return(xmlHashRemoveEntry3(table, name, name2, NULL, f));
-}
-
-/**
- * xmlHashRemoveEntry3:
- * @table: the hash table
- * @name: the name of the userdata
- * @name2: a second name of the userdata
- * @name3: a third name of the userdata
- * @f: the deallocator function for removed item (if any)
- *
- * Find the userdata specified by the (@name, @name2, @name3) tuple and remove
- * it from the hash @table. Existing userdata for this tuple will be removed
- * and freed with @f.
- *
- * Returns 0 if the removal succeeded and -1 in case of error or not found.
- */
-int
-xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, const xmlChar *name3, xmlHashDeallocator f) {
- unsigned long key;
- xmlHashEntryPtr entry;
- xmlHashEntryPtr prev = NULL;
-
- if (table == NULL || name == NULL)
- return(-1);
-
- key = xmlHashComputeKey(table, name, name2, name3);
- if (table->table[key].valid == 0) {
- return(-1);
- } else {
- for (entry = &(table->table[key]); entry != NULL; entry = entry->next) {
- if (xmlStrEqual(entry->name, name) &&
- xmlStrEqual(entry->name2, name2) &&
- xmlStrEqual(entry->name3, name3)) {
- if ((f != NULL) && (entry->payload != NULL))
- f(entry->payload, entry->name);
- entry->payload = NULL;
- if (table->dict == NULL) {
- if(entry->name)
- xmlFree(entry->name);
- if(entry->name2)
- xmlFree(entry->name2);
- if(entry->name3)
- xmlFree(entry->name3);
- }
- if(prev) {
- prev->next = entry->next;
- xmlFree(entry);
- } else {
- if (entry->next == NULL) {
- entry->valid = 0;
- } else {
- entry = entry->next;
- memcpy(&(table->table[key]), entry, sizeof(xmlHashEntry));
- xmlFree(entry);
- }
- }
- table->nbElems--;
- return(0);
- }
- prev = entry;
- }
- return(-1);
- }
-}
-
-#define bottom_hash
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/DOCBparser.h b/external/libxml2_android/jni/libxml2/include/libxml/DOCBparser.h
deleted file mode 100644
index 9394fa71..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/DOCBparser.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Summary: old DocBook SGML parser
- * Description: interface for a DocBook SGML non-verifying parser
- * This code is DEPRECATED, and should not be used anymore.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __DOCB_PARSER_H__
-#define __DOCB_PARSER_H__
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_DOCB_ENABLED
-
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-
-#ifndef IN_LIBXML
-#ifdef __GNUC__
-#warning "The DOCBparser module has been deprecated in libxml2-2.6.0"
-#endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Most of the back-end structures from XML and SGML are shared.
- */
-typedef xmlParserCtxt docbParserCtxt;
-typedef xmlParserCtxtPtr docbParserCtxtPtr;
-typedef xmlSAXHandler docbSAXHandler;
-typedef xmlSAXHandlerPtr docbSAXHandlerPtr;
-typedef xmlParserInput docbParserInput;
-typedef xmlParserInputPtr docbParserInputPtr;
-typedef xmlDocPtr docbDocPtr;
-
-/*
- * There is only few public functions.
- */
-XMLPUBFUN int XMLCALL
- docbEncodeEntities(unsigned char *out,
- int *outlen,
- const unsigned char *in,
- int *inlen, int quoteChar);
-
-XMLPUBFUN docbDocPtr XMLCALL
- docbSAXParseDoc (xmlChar *cur,
- const char *encoding,
- docbSAXHandlerPtr sax,
- void *userData);
-XMLPUBFUN docbDocPtr XMLCALL
- docbParseDoc (xmlChar *cur,
- const char *encoding);
-XMLPUBFUN docbDocPtr XMLCALL
- docbSAXParseFile (const char *filename,
- const char *encoding,
- docbSAXHandlerPtr sax,
- void *userData);
-XMLPUBFUN docbDocPtr XMLCALL
- docbParseFile (const char *filename,
- const char *encoding);
-
-/**
- * Interfaces for the Push mode.
- */
-XMLPUBFUN void XMLCALL
- docbFreeParserCtxt (docbParserCtxtPtr ctxt);
-XMLPUBFUN docbParserCtxtPtr XMLCALL
- docbCreatePushParserCtxt(docbSAXHandlerPtr sax,
- void *user_data,
- const char *chunk,
- int size,
- const char *filename,
- xmlCharEncoding enc);
-XMLPUBFUN int XMLCALL
- docbParseChunk (docbParserCtxtPtr ctxt,
- const char *chunk,
- int size,
- int terminate);
-XMLPUBFUN docbParserCtxtPtr XMLCALL
- docbCreateFileParserCtxt(const char *filename,
- const char *encoding);
-XMLPUBFUN int XMLCALL
- docbParseDocument (docbParserCtxtPtr ctxt);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_DOCB_ENABLED */
-
-#endif /* __DOCB_PARSER_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/HTMLparser.h b/external/libxml2_android/jni/libxml2/include/libxml/HTMLparser.h
deleted file mode 100644
index 551186cb..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/HTMLparser.h
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Summary: interface for an HTML 4.0 non-verifying parser
- * Description: this module implements an HTML 4.0 non-verifying parser
- * with API compatible with the XML parser ones. It should
- * be able to parse "real world" HTML, even if severely
- * broken from a specification point of view.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __HTML_PARSER_H__
-#define __HTML_PARSER_H__
-#include <libxml/xmlversion.h>
-#include <libxml/parser.h>
-
-#ifdef LIBXML_HTML_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Most of the back-end structures from XML and HTML are shared.
- */
-typedef xmlParserCtxt htmlParserCtxt;
-typedef xmlParserCtxtPtr htmlParserCtxtPtr;
-typedef xmlParserNodeInfo htmlParserNodeInfo;
-typedef xmlSAXHandler htmlSAXHandler;
-typedef xmlSAXHandlerPtr htmlSAXHandlerPtr;
-typedef xmlParserInput htmlParserInput;
-typedef xmlParserInputPtr htmlParserInputPtr;
-typedef xmlDocPtr htmlDocPtr;
-typedef xmlNodePtr htmlNodePtr;
-
-/*
- * Internal description of an HTML element, representing HTML 4.01
- * and XHTML 1.0 (which share the same structure).
- */
-typedef struct _htmlElemDesc htmlElemDesc;
-typedef htmlElemDesc *htmlElemDescPtr;
-struct _htmlElemDesc {
- const char *name; /* The tag name */
- char startTag; /* Whether the start tag can be implied */
- char endTag; /* Whether the end tag can be implied */
- char saveEndTag; /* Whether the end tag should be saved */
- char empty; /* Is this an empty element ? */
- char depr; /* Is this a deprecated element ? */
- char dtd; /* 1: only in Loose DTD, 2: only Frameset one */
- char isinline; /* is this a block 0 or inline 1 element */
- const char *desc; /* the description */
-
-/* NRK Jan.2003
- * New fields encapsulating HTML structure
- *
- * Bugs:
- * This is a very limited representation. It fails to tell us when
- * an element *requires* subelements (we only have whether they're
- * allowed or not), and it doesn't tell us where CDATA and PCDATA
- * are allowed. Some element relationships are not fully represented:
- * these are flagged with the word MODIFIER
- */
- const char** subelts; /* allowed sub-elements of this element */
- const char* defaultsubelt; /* subelement for suggested auto-repair
- if necessary or NULL */
- const char** attrs_opt; /* Optional Attributes */
- const char** attrs_depr; /* Additional deprecated attributes */
- const char** attrs_req; /* Required attributes */
-};
-
-/*
- * Internal description of an HTML entity.
- */
-typedef struct _htmlEntityDesc htmlEntityDesc;
-typedef htmlEntityDesc *htmlEntityDescPtr;
-struct _htmlEntityDesc {
- unsigned int value; /* the UNICODE value for the character */
- const char *name; /* The entity name */
- const char *desc; /* the description */
-};
-
-/*
- * There is only few public functions.
- */
-XMLPUBFUN const htmlElemDesc * XMLCALL
- htmlTagLookup (const xmlChar *tag);
-XMLPUBFUN const htmlEntityDesc * XMLCALL
- htmlEntityLookup(const xmlChar *name);
-XMLPUBFUN const htmlEntityDesc * XMLCALL
- htmlEntityValueLookup(unsigned int value);
-
-XMLPUBFUN int XMLCALL
- htmlIsAutoClosed(htmlDocPtr doc,
- htmlNodePtr elem);
-XMLPUBFUN int XMLCALL
- htmlAutoCloseTag(htmlDocPtr doc,
- const xmlChar *name,
- htmlNodePtr elem);
-XMLPUBFUN const htmlEntityDesc * XMLCALL
- htmlParseEntityRef(htmlParserCtxtPtr ctxt,
- const xmlChar **str);
-XMLPUBFUN int XMLCALL
- htmlParseCharRef(htmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- htmlParseElement(htmlParserCtxtPtr ctxt);
-
-XMLPUBFUN htmlParserCtxtPtr XMLCALL
- htmlNewParserCtxt(void);
-
-XMLPUBFUN htmlParserCtxtPtr XMLCALL
- htmlCreateMemoryParserCtxt(const char *buffer,
- int size);
-
-XMLPUBFUN int XMLCALL
- htmlParseDocument(htmlParserCtxtPtr ctxt);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlSAXParseDoc (xmlChar *cur,
- const char *encoding,
- htmlSAXHandlerPtr sax,
- void *userData);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlParseDoc (xmlChar *cur,
- const char *encoding);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlSAXParseFile(const char *filename,
- const char *encoding,
- htmlSAXHandlerPtr sax,
- void *userData);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlParseFile (const char *filename,
- const char *encoding);
-XMLPUBFUN int XMLCALL
- UTF8ToHtml (unsigned char *out,
- int *outlen,
- const unsigned char *in,
- int *inlen);
-XMLPUBFUN int XMLCALL
- htmlEncodeEntities(unsigned char *out,
- int *outlen,
- const unsigned char *in,
- int *inlen, int quoteChar);
-XMLPUBFUN int XMLCALL
- htmlIsScriptAttribute(const xmlChar *name);
-XMLPUBFUN int XMLCALL
- htmlHandleOmittedElem(int val);
-
-#ifdef LIBXML_PUSH_ENABLED
-/**
- * Interfaces for the Push mode.
- */
-XMLPUBFUN htmlParserCtxtPtr XMLCALL
- htmlCreatePushParserCtxt(htmlSAXHandlerPtr sax,
- void *user_data,
- const char *chunk,
- int size,
- const char *filename,
- xmlCharEncoding enc);
-XMLPUBFUN int XMLCALL
- htmlParseChunk (htmlParserCtxtPtr ctxt,
- const char *chunk,
- int size,
- int terminate);
-#endif /* LIBXML_PUSH_ENABLED */
-
-XMLPUBFUN void XMLCALL
- htmlFreeParserCtxt (htmlParserCtxtPtr ctxt);
-
-/*
- * New set of simpler/more flexible APIs
- */
-/**
- * xmlParserOption:
- *
- * This is the set of XML parser options that can be passed down
- * to the xmlReadDoc() and similar calls.
- */
-typedef enum {
- HTML_PARSE_RECOVER = 1<<0, /* Relaxed parsing */
- HTML_PARSE_NODEFDTD = 1<<2, /* do not default a doctype if not found */
- HTML_PARSE_NOERROR = 1<<5, /* suppress error reports */
- HTML_PARSE_NOWARNING= 1<<6, /* suppress warning reports */
- HTML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */
- HTML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */
- HTML_PARSE_NONET = 1<<11,/* Forbid network access */
- HTML_PARSE_NOIMPLIED= 1<<13,/* Do not add implied html/body... elements */
- HTML_PARSE_COMPACT = 1<<16,/* compact small text nodes */
- HTML_PARSE_IGNORE_ENC=1<<21 /* ignore internal document encoding hint */
-} htmlParserOption;
-
-XMLPUBFUN void XMLCALL
- htmlCtxtReset (htmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- htmlCtxtUseOptions (htmlParserCtxtPtr ctxt,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlReadDoc (const xmlChar *cur,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlReadFile (const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlReadMemory (const char *buffer,
- int size,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlReadFd (int fd,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlReadIO (xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose,
- void *ioctx,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlCtxtReadDoc (xmlParserCtxtPtr ctxt,
- const xmlChar *cur,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlCtxtReadFile (xmlParserCtxtPtr ctxt,
- const char *filename,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlCtxtReadMemory (xmlParserCtxtPtr ctxt,
- const char *buffer,
- int size,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlCtxtReadFd (xmlParserCtxtPtr ctxt,
- int fd,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlCtxtReadIO (xmlParserCtxtPtr ctxt,
- xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose,
- void *ioctx,
- const char *URL,
- const char *encoding,
- int options);
-
-/* NRK/Jan2003: further knowledge of HTML structure
- */
-typedef enum {
- HTML_NA = 0 , /* something we don't check at all */
- HTML_INVALID = 0x1 ,
- HTML_DEPRECATED = 0x2 ,
- HTML_VALID = 0x4 ,
- HTML_REQUIRED = 0xc /* VALID bit set so ( & HTML_VALID ) is TRUE */
-} htmlStatus ;
-
-/* Using htmlElemDesc rather than name here, to emphasise the fact
- that otherwise there's a lookup overhead
-*/
-XMLPUBFUN htmlStatus XMLCALL htmlAttrAllowed(const htmlElemDesc*, const xmlChar*, int) ;
-XMLPUBFUN int XMLCALL htmlElementAllowedHere(const htmlElemDesc*, const xmlChar*) ;
-XMLPUBFUN htmlStatus XMLCALL htmlElementStatusHere(const htmlElemDesc*, const htmlElemDesc*) ;
-XMLPUBFUN htmlStatus XMLCALL htmlNodeStatus(const htmlNodePtr, int) ;
-/**
- * htmlDefaultSubelement:
- * @elt: HTML element
- *
- * Returns the default subelement for this element
- */
-#define htmlDefaultSubelement(elt) elt->defaultsubelt
-/**
- * htmlElementAllowedHereDesc:
- * @parent: HTML parent element
- * @elt: HTML element
- *
- * Checks whether an HTML element description may be a
- * direct child of the specified element.
- *
- * Returns 1 if allowed; 0 otherwise.
- */
-#define htmlElementAllowedHereDesc(parent,elt) \
- htmlElementAllowedHere((parent), (elt)->name)
-/**
- * htmlRequiredAttrs:
- * @elt: HTML element
- *
- * Returns the attributes required for the specified element.
- */
-#define htmlRequiredAttrs(elt) (elt)->attrs_req
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_HTML_ENABLED */
-#endif /* __HTML_PARSER_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/HTMLtree.h b/external/libxml2_android/jni/libxml2/include/libxml/HTMLtree.h
deleted file mode 100644
index c0e11033..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/HTMLtree.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Summary: specific APIs to process HTML tree, especially serialization
- * Description: this module implements a few function needed to process
- * tree in an HTML specific way.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __HTML_TREE_H__
-#define __HTML_TREE_H__
-
-#include <stdio.h>
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-#include <libxml/HTMLparser.h>
-
-#ifdef LIBXML_HTML_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/**
- * HTML_TEXT_NODE:
- *
- * Macro. A text node in a HTML document is really implemented
- * the same way as a text node in an XML document.
- */
-#define HTML_TEXT_NODE XML_TEXT_NODE
-/**
- * HTML_ENTITY_REF_NODE:
- *
- * Macro. An entity reference in a HTML document is really implemented
- * the same way as an entity reference in an XML document.
- */
-#define HTML_ENTITY_REF_NODE XML_ENTITY_REF_NODE
-/**
- * HTML_COMMENT_NODE:
- *
- * Macro. A comment in a HTML document is really implemented
- * the same way as a comment in an XML document.
- */
-#define HTML_COMMENT_NODE XML_COMMENT_NODE
-/**
- * HTML_PRESERVE_NODE:
- *
- * Macro. A preserved node in a HTML document is really implemented
- * the same way as a CDATA section in an XML document.
- */
-#define HTML_PRESERVE_NODE XML_CDATA_SECTION_NODE
-/**
- * HTML_PI_NODE:
- *
- * Macro. A processing instruction in a HTML document is really implemented
- * the same way as a processing instruction in an XML document.
- */
-#define HTML_PI_NODE XML_PI_NODE
-
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlNewDoc (const xmlChar *URI,
- const xmlChar *ExternalID);
-XMLPUBFUN htmlDocPtr XMLCALL
- htmlNewDocNoDtD (const xmlChar *URI,
- const xmlChar *ExternalID);
-XMLPUBFUN const xmlChar * XMLCALL
- htmlGetMetaEncoding (htmlDocPtr doc);
-XMLPUBFUN int XMLCALL
- htmlSetMetaEncoding (htmlDocPtr doc,
- const xmlChar *encoding);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- htmlDocDumpMemory (xmlDocPtr cur,
- xmlChar **mem,
- int *size);
-XMLPUBFUN void XMLCALL
- htmlDocDumpMemoryFormat (xmlDocPtr cur,
- xmlChar **mem,
- int *size,
- int format);
-XMLPUBFUN int XMLCALL
- htmlDocDump (FILE *f,
- xmlDocPtr cur);
-XMLPUBFUN int XMLCALL
- htmlSaveFile (const char *filename,
- xmlDocPtr cur);
-XMLPUBFUN int XMLCALL
- htmlNodeDump (xmlBufferPtr buf,
- xmlDocPtr doc,
- xmlNodePtr cur);
-XMLPUBFUN void XMLCALL
- htmlNodeDumpFile (FILE *out,
- xmlDocPtr doc,
- xmlNodePtr cur);
-XMLPUBFUN int XMLCALL
- htmlNodeDumpFileFormat (FILE *out,
- xmlDocPtr doc,
- xmlNodePtr cur,
- const char *encoding,
- int format);
-XMLPUBFUN int XMLCALL
- htmlSaveFileEnc (const char *filename,
- xmlDocPtr cur,
- const char *encoding);
-XMLPUBFUN int XMLCALL
- htmlSaveFileFormat (const char *filename,
- xmlDocPtr cur,
- const char *encoding,
- int format);
-
-XMLPUBFUN void XMLCALL
- htmlNodeDumpFormatOutput(xmlOutputBufferPtr buf,
- xmlDocPtr doc,
- xmlNodePtr cur,
- const char *encoding,
- int format);
-XMLPUBFUN void XMLCALL
- htmlDocContentDumpOutput(xmlOutputBufferPtr buf,
- xmlDocPtr cur,
- const char *encoding);
-XMLPUBFUN void XMLCALL
- htmlDocContentDumpFormatOutput(xmlOutputBufferPtr buf,
- xmlDocPtr cur,
- const char *encoding,
- int format);
-XMLPUBFUN void XMLCALL
- htmlNodeDumpOutput (xmlOutputBufferPtr buf,
- xmlDocPtr doc,
- xmlNodePtr cur,
- const char *encoding);
-
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-XMLPUBFUN int XMLCALL
- htmlIsBooleanAttr (const xmlChar *name);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_HTML_ENABLED */
-
-#endif /* __HTML_TREE_H__ */
-
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/Makefile.am b/external/libxml2_android/jni/libxml2/include/libxml/Makefile.am
deleted file mode 100644
index cf9297aa..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/Makefile.am
+++ /dev/null
@@ -1,54 +0,0 @@
-## Process this file with automake to produce Makefile.in
-
-xmlincdir = $(includedir)/libxml2/libxml
-
-xmlinc_HEADERS = \
- SAX.h \
- entities.h \
- encoding.h \
- parser.h \
- parserInternals.h \
- xmlerror.h \
- HTMLparser.h \
- HTMLtree.h \
- debugXML.h \
- tree.h \
- list.h \
- hash.h \
- xpath.h \
- xpathInternals.h \
- xpointer.h \
- xinclude.h \
- xmlIO.h \
- xmlmemory.h \
- nanohttp.h \
- nanoftp.h \
- uri.h \
- valid.h \
- xlink.h \
- xmlversion.h \
- DOCBparser.h \
- catalog.h \
- threads.h \
- globals.h \
- c14n.h \
- xmlautomata.h \
- xmlregexp.h \
- xmlmodule.h \
- xmlschemas.h \
- schemasInternals.h \
- xmlschemastypes.h \
- xmlstring.h \
- xmlunicode.h \
- xmlreader.h \
- relaxng.h \
- dict.h \
- SAX2.h \
- xmlexports.h \
- xmlwriter.h \
- chvalid.h \
- pattern.h \
- xmlsave.h \
- schematron.h
-
-EXTRA_DIST = xmlversion.h.in
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/SAX.h b/external/libxml2_android/jni/libxml2/include/libxml/SAX.h
deleted file mode 100644
index 20093ceb..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/SAX.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Summary: Old SAX version 1 handler, deprecated
- * Description: DEPRECATED set of SAX version 1 interfaces used to
- * build the DOM tree.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-
-#ifndef __XML_SAX_H__
-#define __XML_SAX_H__
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <libxml/xmlversion.h>
-#include <libxml/parser.h>
-#include <libxml/xlink.h>
-
-#ifdef LIBXML_LEGACY_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-XMLPUBFUN const xmlChar * XMLCALL
- getPublicId (void *ctx);
-XMLPUBFUN const xmlChar * XMLCALL
- getSystemId (void *ctx);
-XMLPUBFUN void XMLCALL
- setDocumentLocator (void *ctx,
- xmlSAXLocatorPtr loc);
-
-XMLPUBFUN int XMLCALL
- getLineNumber (void *ctx);
-XMLPUBFUN int XMLCALL
- getColumnNumber (void *ctx);
-
-XMLPUBFUN int XMLCALL
- isStandalone (void *ctx);
-XMLPUBFUN int XMLCALL
- hasInternalSubset (void *ctx);
-XMLPUBFUN int XMLCALL
- hasExternalSubset (void *ctx);
-
-XMLPUBFUN void XMLCALL
- internalSubset (void *ctx,
- const xmlChar *name,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-XMLPUBFUN void XMLCALL
- externalSubset (void *ctx,
- const xmlChar *name,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-XMLPUBFUN xmlEntityPtr XMLCALL
- getEntity (void *ctx,
- const xmlChar *name);
-XMLPUBFUN xmlEntityPtr XMLCALL
- getParameterEntity (void *ctx,
- const xmlChar *name);
-XMLPUBFUN xmlParserInputPtr XMLCALL
- resolveEntity (void *ctx,
- const xmlChar *publicId,
- const xmlChar *systemId);
-
-XMLPUBFUN void XMLCALL
- entityDecl (void *ctx,
- const xmlChar *name,
- int type,
- const xmlChar *publicId,
- const xmlChar *systemId,
- xmlChar *content);
-XMLPUBFUN void XMLCALL
- attributeDecl (void *ctx,
- const xmlChar *elem,
- const xmlChar *fullname,
- int type,
- int def,
- const xmlChar *defaultValue,
- xmlEnumerationPtr tree);
-XMLPUBFUN void XMLCALL
- elementDecl (void *ctx,
- const xmlChar *name,
- int type,
- xmlElementContentPtr content);
-XMLPUBFUN void XMLCALL
- notationDecl (void *ctx,
- const xmlChar *name,
- const xmlChar *publicId,
- const xmlChar *systemId);
-XMLPUBFUN void XMLCALL
- unparsedEntityDecl (void *ctx,
- const xmlChar *name,
- const xmlChar *publicId,
- const xmlChar *systemId,
- const xmlChar *notationName);
-
-XMLPUBFUN void XMLCALL
- startDocument (void *ctx);
-XMLPUBFUN void XMLCALL
- endDocument (void *ctx);
-XMLPUBFUN void XMLCALL
- attribute (void *ctx,
- const xmlChar *fullname,
- const xmlChar *value);
-XMLPUBFUN void XMLCALL
- startElement (void *ctx,
- const xmlChar *fullname,
- const xmlChar **atts);
-XMLPUBFUN void XMLCALL
- endElement (void *ctx,
- const xmlChar *name);
-XMLPUBFUN void XMLCALL
- reference (void *ctx,
- const xmlChar *name);
-XMLPUBFUN void XMLCALL
- characters (void *ctx,
- const xmlChar *ch,
- int len);
-XMLPUBFUN void XMLCALL
- ignorableWhitespace (void *ctx,
- const xmlChar *ch,
- int len);
-XMLPUBFUN void XMLCALL
- processingInstruction (void *ctx,
- const xmlChar *target,
- const xmlChar *data);
-XMLPUBFUN void XMLCALL
- globalNamespace (void *ctx,
- const xmlChar *href,
- const xmlChar *prefix);
-XMLPUBFUN void XMLCALL
- setNamespace (void *ctx,
- const xmlChar *name);
-XMLPUBFUN xmlNsPtr XMLCALL
- getNamespace (void *ctx);
-XMLPUBFUN int XMLCALL
- checkNamespace (void *ctx,
- xmlChar *nameSpace);
-XMLPUBFUN void XMLCALL
- namespaceDecl (void *ctx,
- const xmlChar *href,
- const xmlChar *prefix);
-XMLPUBFUN void XMLCALL
- comment (void *ctx,
- const xmlChar *value);
-XMLPUBFUN void XMLCALL
- cdataBlock (void *ctx,
- const xmlChar *value,
- int len);
-
-#ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN void XMLCALL
- initxmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr,
- int warning);
-#ifdef LIBXML_HTML_ENABLED
-XMLPUBFUN void XMLCALL
- inithtmlDefaultSAXHandler (xmlSAXHandlerV1 *hdlr);
-#endif
-#ifdef LIBXML_DOCB_ENABLED
-XMLPUBFUN void XMLCALL
- initdocbDefaultSAXHandler (xmlSAXHandlerV1 *hdlr);
-#endif
-#endif /* LIBXML_SAX1_ENABLED */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_LEGACY_ENABLED */
-
-#endif /* __XML_SAX_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/SAX2.h b/external/libxml2_android/jni/libxml2/include/libxml/SAX2.h
deleted file mode 100644
index a55212eb..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/SAX2.h
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Summary: SAX2 parser interface used to build the DOM tree
- * Description: those are the default SAX2 interfaces used by
- * the library when building DOM tree.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-
-#ifndef __XML_SAX2_H__
-#define __XML_SAX2_H__
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <libxml/xmlversion.h>
-#include <libxml/parser.h>
-#include <libxml/xlink.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-XMLPUBFUN const xmlChar * XMLCALL
- xmlSAX2GetPublicId (void *ctx);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlSAX2GetSystemId (void *ctx);
-XMLPUBFUN void XMLCALL
- xmlSAX2SetDocumentLocator (void *ctx,
- xmlSAXLocatorPtr loc);
-
-XMLPUBFUN int XMLCALL
- xmlSAX2GetLineNumber (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlSAX2GetColumnNumber (void *ctx);
-
-XMLPUBFUN int XMLCALL
- xmlSAX2IsStandalone (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlSAX2HasInternalSubset (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlSAX2HasExternalSubset (void *ctx);
-
-XMLPUBFUN void XMLCALL
- xmlSAX2InternalSubset (void *ctx,
- const xmlChar *name,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-XMLPUBFUN void XMLCALL
- xmlSAX2ExternalSubset (void *ctx,
- const xmlChar *name,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlSAX2GetEntity (void *ctx,
- const xmlChar *name);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlSAX2GetParameterEntity (void *ctx,
- const xmlChar *name);
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlSAX2ResolveEntity (void *ctx,
- const xmlChar *publicId,
- const xmlChar *systemId);
-
-XMLPUBFUN void XMLCALL
- xmlSAX2EntityDecl (void *ctx,
- const xmlChar *name,
- int type,
- const xmlChar *publicId,
- const xmlChar *systemId,
- xmlChar *content);
-XMLPUBFUN void XMLCALL
- xmlSAX2AttributeDecl (void *ctx,
- const xmlChar *elem,
- const xmlChar *fullname,
- int type,
- int def,
- const xmlChar *defaultValue,
- xmlEnumerationPtr tree);
-XMLPUBFUN void XMLCALL
- xmlSAX2ElementDecl (void *ctx,
- const xmlChar *name,
- int type,
- xmlElementContentPtr content);
-XMLPUBFUN void XMLCALL
- xmlSAX2NotationDecl (void *ctx,
- const xmlChar *name,
- const xmlChar *publicId,
- const xmlChar *systemId);
-XMLPUBFUN void XMLCALL
- xmlSAX2UnparsedEntityDecl (void *ctx,
- const xmlChar *name,
- const xmlChar *publicId,
- const xmlChar *systemId,
- const xmlChar *notationName);
-
-XMLPUBFUN void XMLCALL
- xmlSAX2StartDocument (void *ctx);
-XMLPUBFUN void XMLCALL
- xmlSAX2EndDocument (void *ctx);
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
- defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || \
- defined(LIBXML_LEGACY_ENABLED)
-XMLPUBFUN void XMLCALL
- xmlSAX2StartElement (void *ctx,
- const xmlChar *fullname,
- const xmlChar **atts);
-XMLPUBFUN void XMLCALL
- xmlSAX2EndElement (void *ctx,
- const xmlChar *name);
-#endif /* LIBXML_SAX1_ENABLED or LIBXML_HTML_ENABLED or LIBXML_LEGACY_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlSAX2StartElementNs (void *ctx,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI,
- int nb_namespaces,
- const xmlChar **namespaces,
- int nb_attributes,
- int nb_defaulted,
- const xmlChar **attributes);
-XMLPUBFUN void XMLCALL
- xmlSAX2EndElementNs (void *ctx,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI);
-XMLPUBFUN void XMLCALL
- xmlSAX2Reference (void *ctx,
- const xmlChar *name);
-XMLPUBFUN void XMLCALL
- xmlSAX2Characters (void *ctx,
- const xmlChar *ch,
- int len);
-XMLPUBFUN void XMLCALL
- xmlSAX2IgnorableWhitespace (void *ctx,
- const xmlChar *ch,
- int len);
-XMLPUBFUN void XMLCALL
- xmlSAX2ProcessingInstruction (void *ctx,
- const xmlChar *target,
- const xmlChar *data);
-XMLPUBFUN void XMLCALL
- xmlSAX2Comment (void *ctx,
- const xmlChar *value);
-XMLPUBFUN void XMLCALL
- xmlSAX2CDataBlock (void *ctx,
- const xmlChar *value,
- int len);
-
-#ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN int XMLCALL
- xmlSAXDefaultVersion (int version);
-#endif /* LIBXML_SAX1_ENABLED */
-
-XMLPUBFUN int XMLCALL
- xmlSAXVersion (xmlSAXHandler *hdlr,
- int version);
-XMLPUBFUN void XMLCALL
- xmlSAX2InitDefaultSAXHandler (xmlSAXHandler *hdlr,
- int warning);
-#ifdef LIBXML_HTML_ENABLED
-XMLPUBFUN void XMLCALL
- xmlSAX2InitHtmlDefaultSAXHandler(xmlSAXHandler *hdlr);
-XMLPUBFUN void XMLCALL
- htmlDefaultSAXHandlerInit (void);
-#endif
-#ifdef LIBXML_DOCB_ENABLED
-XMLPUBFUN void XMLCALL
- xmlSAX2InitDocbDefaultSAXHandler(xmlSAXHandler *hdlr);
-XMLPUBFUN void XMLCALL
- docbDefaultSAXHandlerInit (void);
-#endif
-XMLPUBFUN void XMLCALL
- xmlDefaultSAXHandlerInit (void);
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_SAX2_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/c14n.h b/external/libxml2_android/jni/libxml2/include/libxml/c14n.h
deleted file mode 100644
index b8971d92..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/c14n.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Summary: Provide Canonical XML and Exclusive XML Canonicalization
- * Description: the c14n modules provides a
- *
- * "Canonical XML" implementation
- * http://www.w3.org/TR/xml-c14n
- *
- * and an
- *
- * "Exclusive XML Canonicalization" implementation
- * http://www.w3.org/TR/xml-exc-c14n
-
- * Copy: See Copyright for the status of this software.
- *
- * Author: Aleksey Sanin <aleksey@aleksey.com>
- */
-#ifndef __XML_C14N_H__
-#define __XML_C14N_H__
-#ifdef LIBXML_C14N_ENABLED
-#ifdef LIBXML_OUTPUT_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-#include <libxml/xpath.h>
-
-/*
- * XML Canonicazation
- * http://www.w3.org/TR/xml-c14n
- *
- * Exclusive XML Canonicazation
- * http://www.w3.org/TR/xml-exc-c14n
- *
- * Canonical form of an XML document could be created if and only if
- * a) default attributes (if any) are added to all nodes
- * b) all character and parsed entity references are resolved
- * In order to achive this in libxml2 the document MUST be loaded with
- * following global setings:
- *
- * xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
- * xmlSubstituteEntitiesDefault(1);
- *
- * or corresponding parser context setting:
- * xmlParserCtxtPtr ctxt;
- *
- * ...
- * ctxt->loadsubset = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
- * ctxt->replaceEntities = 1;
- * ...
- */
-
-/*
- * xmlC14NMode:
- *
- * Predefined values for C14N modes
- *
- */
-typedef enum {
- XML_C14N_1_0 = 0, /* Origianal C14N 1.0 spec */
- XML_C14N_EXCLUSIVE_1_0 = 1, /* Exclusive C14N 1.0 spec */
- XML_C14N_1_1 = 2 /* C14N 1.1 spec */
-} xmlC14NMode;
-
-XMLPUBFUN int XMLCALL
- xmlC14NDocSaveTo (xmlDocPtr doc,
- xmlNodeSetPtr nodes,
- int mode, /* a xmlC14NMode */
- xmlChar **inclusive_ns_prefixes,
- int with_comments,
- xmlOutputBufferPtr buf);
-
-XMLPUBFUN int XMLCALL
- xmlC14NDocDumpMemory (xmlDocPtr doc,
- xmlNodeSetPtr nodes,
- int mode, /* a xmlC14NMode */
- xmlChar **inclusive_ns_prefixes,
- int with_comments,
- xmlChar **doc_txt_ptr);
-
-XMLPUBFUN int XMLCALL
- xmlC14NDocSave (xmlDocPtr doc,
- xmlNodeSetPtr nodes,
- int mode, /* a xmlC14NMode */
- xmlChar **inclusive_ns_prefixes,
- int with_comments,
- const char* filename,
- int compression);
-
-
-/**
- * This is the core C14N function
- */
-/**
- * xmlC14NIsVisibleCallback:
- * @user_data: user data
- * @node: the curent node
- * @parent: the parent node
- *
- * Signature for a C14N callback on visible nodes
- *
- * Returns 1 if the node should be included
- */
-typedef int (*xmlC14NIsVisibleCallback) (void* user_data,
- xmlNodePtr node,
- xmlNodePtr parent);
-
-XMLPUBFUN int XMLCALL
- xmlC14NExecute (xmlDocPtr doc,
- xmlC14NIsVisibleCallback is_visible_callback,
- void* user_data,
- int mode, /* a xmlC14NMode */
- xmlChar **inclusive_ns_prefixes,
- int with_comments,
- xmlOutputBufferPtr buf);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* LIBXML_OUTPUT_ENABLED */
-#endif /* LIBXML_C14N_ENABLED */
-#endif /* __XML_C14N_H__ */
-
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/catalog.h b/external/libxml2_android/jni/libxml2/include/libxml/catalog.h
deleted file mode 100644
index 5a13f51b..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/catalog.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/**
- * Summary: interfaces to the Catalog handling system
- * Description: the catalog module implements the support for
- * XML Catalogs and SGML catalogs
- *
- * SGML Open Technical Resolution TR9401:1997.
- * http://www.jclark.com/sp/catalog.htm
- *
- * XML Catalogs Working Draft 06 August 2001
- * http://www.oasis-open.org/committees/entity/spec-2001-08-06.html
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_CATALOG_H__
-#define __XML_CATALOG_H__
-
-#include <stdio.h>
-
-#include <libxml/xmlversion.h>
-#include <libxml/xmlstring.h>
-#include <libxml/tree.h>
-
-#ifdef LIBXML_CATALOG_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * XML_CATALOGS_NAMESPACE:
- *
- * The namespace for the XML Catalogs elements.
- */
-#define XML_CATALOGS_NAMESPACE \
- (const xmlChar *) "urn:oasis:names:tc:entity:xmlns:xml:catalog"
-/**
- * XML_CATALOG_PI:
- *
- * The specific XML Catalog Processing Instuction name.
- */
-#define XML_CATALOG_PI \
- (const xmlChar *) "oasis-xml-catalog"
-
-/*
- * The API is voluntarily limited to general cataloging.
- */
-typedef enum {
- XML_CATA_PREFER_NONE = 0,
- XML_CATA_PREFER_PUBLIC = 1,
- XML_CATA_PREFER_SYSTEM
-} xmlCatalogPrefer;
-
-typedef enum {
- XML_CATA_ALLOW_NONE = 0,
- XML_CATA_ALLOW_GLOBAL = 1,
- XML_CATA_ALLOW_DOCUMENT = 2,
- XML_CATA_ALLOW_ALL = 3
-} xmlCatalogAllow;
-
-typedef struct _xmlCatalog xmlCatalog;
-typedef xmlCatalog *xmlCatalogPtr;
-
-/*
- * Operations on a given catalog.
- */
-XMLPUBFUN xmlCatalogPtr XMLCALL
- xmlNewCatalog (int sgml);
-XMLPUBFUN xmlCatalogPtr XMLCALL
- xmlLoadACatalog (const char *filename);
-XMLPUBFUN xmlCatalogPtr XMLCALL
- xmlLoadSGMLSuperCatalog (const char *filename);
-XMLPUBFUN int XMLCALL
- xmlConvertSGMLCatalog (xmlCatalogPtr catal);
-XMLPUBFUN int XMLCALL
- xmlACatalogAdd (xmlCatalogPtr catal,
- const xmlChar *type,
- const xmlChar *orig,
- const xmlChar *replace);
-XMLPUBFUN int XMLCALL
- xmlACatalogRemove (xmlCatalogPtr catal,
- const xmlChar *value);
-XMLPUBFUN xmlChar * XMLCALL
- xmlACatalogResolve (xmlCatalogPtr catal,
- const xmlChar *pubID,
- const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL
- xmlACatalogResolveSystem(xmlCatalogPtr catal,
- const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL
- xmlACatalogResolvePublic(xmlCatalogPtr catal,
- const xmlChar *pubID);
-XMLPUBFUN xmlChar * XMLCALL
- xmlACatalogResolveURI (xmlCatalogPtr catal,
- const xmlChar *URI);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlACatalogDump (xmlCatalogPtr catal,
- FILE *out);
-#endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlFreeCatalog (xmlCatalogPtr catal);
-XMLPUBFUN int XMLCALL
- xmlCatalogIsEmpty (xmlCatalogPtr catal);
-
-/*
- * Global operations.
- */
-XMLPUBFUN void XMLCALL
- xmlInitializeCatalog (void);
-XMLPUBFUN int XMLCALL
- xmlLoadCatalog (const char *filename);
-XMLPUBFUN void XMLCALL
- xmlLoadCatalogs (const char *paths);
-XMLPUBFUN void XMLCALL
- xmlCatalogCleanup (void);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlCatalogDump (FILE *out);
-#endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN xmlChar * XMLCALL
- xmlCatalogResolve (const xmlChar *pubID,
- const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL
- xmlCatalogResolveSystem (const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL
- xmlCatalogResolvePublic (const xmlChar *pubID);
-XMLPUBFUN xmlChar * XMLCALL
- xmlCatalogResolveURI (const xmlChar *URI);
-XMLPUBFUN int XMLCALL
- xmlCatalogAdd (const xmlChar *type,
- const xmlChar *orig,
- const xmlChar *replace);
-XMLPUBFUN int XMLCALL
- xmlCatalogRemove (const xmlChar *value);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlParseCatalogFile (const char *filename);
-XMLPUBFUN int XMLCALL
- xmlCatalogConvert (void);
-
-/*
- * Strictly minimal interfaces for per-document catalogs used
- * by the parser.
- */
-XMLPUBFUN void XMLCALL
- xmlCatalogFreeLocal (void *catalogs);
-XMLPUBFUN void * XMLCALL
- xmlCatalogAddLocal (void *catalogs,
- const xmlChar *URL);
-XMLPUBFUN xmlChar * XMLCALL
- xmlCatalogLocalResolve (void *catalogs,
- const xmlChar *pubID,
- const xmlChar *sysID);
-XMLPUBFUN xmlChar * XMLCALL
- xmlCatalogLocalResolveURI(void *catalogs,
- const xmlChar *URI);
-/*
- * Preference settings.
- */
-XMLPUBFUN int XMLCALL
- xmlCatalogSetDebug (int level);
-XMLPUBFUN xmlCatalogPrefer XMLCALL
- xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer);
-XMLPUBFUN void XMLCALL
- xmlCatalogSetDefaults (xmlCatalogAllow allow);
-XMLPUBFUN xmlCatalogAllow XMLCALL
- xmlCatalogGetDefaults (void);
-
-
-/* DEPRECATED interfaces */
-XMLPUBFUN const xmlChar * XMLCALL
- xmlCatalogGetSystem (const xmlChar *sysID);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlCatalogGetPublic (const xmlChar *pubID);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* LIBXML_CATALOG_ENABLED */
-#endif /* __XML_CATALOG_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/chvalid.h b/external/libxml2_android/jni/libxml2/include/libxml/chvalid.h
deleted file mode 100644
index fb430169..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/chvalid.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Summary: Unicode character range checking
- * Description: this module exports interfaces for the character
- * range validation APIs
- *
- * This file is automatically generated from the cvs source
- * definition files using the genChRanges.py Python script
- *
- * Generation date: Mon Mar 27 11:09:48 2006
- * Sources: chvalid.def
- * Author: William Brack <wbrack@mmm.com.hk>
- */
-
-#ifndef __XML_CHVALID_H__
-#define __XML_CHVALID_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/xmlstring.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Define our typedefs and structures
- *
- */
-typedef struct _xmlChSRange xmlChSRange;
-typedef xmlChSRange *xmlChSRangePtr;
-struct _xmlChSRange {
- unsigned short low;
- unsigned short high;
-};
-
-typedef struct _xmlChLRange xmlChLRange;
-typedef xmlChLRange *xmlChLRangePtr;
-struct _xmlChLRange {
- unsigned int low;
- unsigned int high;
-};
-
-typedef struct _xmlChRangeGroup xmlChRangeGroup;
-typedef xmlChRangeGroup *xmlChRangeGroupPtr;
-struct _xmlChRangeGroup {
- int nbShortRange;
- int nbLongRange;
- const xmlChSRange *shortRange; /* points to an array of ranges */
- const xmlChLRange *longRange;
-};
-
-/**
- * Range checking routine
- */
-XMLPUBFUN int XMLCALL
- xmlCharInRange(unsigned int val, const xmlChRangeGroup *group);
-
-
-/**
- * xmlIsBaseChar_ch:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsBaseChar_ch(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \
- ((0x61 <= (c)) && ((c) <= 0x7a)) || \
- ((0xc0 <= (c)) && ((c) <= 0xd6)) || \
- ((0xd8 <= (c)) && ((c) <= 0xf6)) || \
- (0xf8 <= (c)))
-
-/**
- * xmlIsBaseCharQ:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsBaseCharQ(c) (((c) < 0x100) ? \
- xmlIsBaseChar_ch((c)) : \
- xmlCharInRange((c), &xmlIsBaseCharGroup))
-
-XMLPUBVAR const xmlChRangeGroup xmlIsBaseCharGroup;
-
-/**
- * xmlIsBlank_ch:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsBlank_ch(c) (((c) == 0x20) || \
- ((0x9 <= (c)) && ((c) <= 0xa)) || \
- ((c) == 0xd))
-
-/**
- * xmlIsBlankQ:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsBlankQ(c) (((c) < 0x100) ? \
- xmlIsBlank_ch((c)) : 0)
-
-
-/**
- * xmlIsChar_ch:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsChar_ch(c) (((0x9 <= (c)) && ((c) <= 0xa)) || \
- ((c) == 0xd) || \
- (0x20 <= (c)))
-
-/**
- * xmlIsCharQ:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsCharQ(c) (((c) < 0x100) ? \
- xmlIsChar_ch((c)) :\
- (((0x100 <= (c)) && ((c) <= 0xd7ff)) || \
- ((0xe000 <= (c)) && ((c) <= 0xfffd)) || \
- ((0x10000 <= (c)) && ((c) <= 0x10ffff))))
-
-XMLPUBVAR const xmlChRangeGroup xmlIsCharGroup;
-
-/**
- * xmlIsCombiningQ:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsCombiningQ(c) (((c) < 0x100) ? \
- 0 : \
- xmlCharInRange((c), &xmlIsCombiningGroup))
-
-XMLPUBVAR const xmlChRangeGroup xmlIsCombiningGroup;
-
-/**
- * xmlIsDigit_ch:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsDigit_ch(c) (((0x30 <= (c)) && ((c) <= 0x39)))
-
-/**
- * xmlIsDigitQ:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsDigitQ(c) (((c) < 0x100) ? \
- xmlIsDigit_ch((c)) : \
- xmlCharInRange((c), &xmlIsDigitGroup))
-
-XMLPUBVAR const xmlChRangeGroup xmlIsDigitGroup;
-
-/**
- * xmlIsExtender_ch:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsExtender_ch(c) (((c) == 0xb7))
-
-/**
- * xmlIsExtenderQ:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsExtenderQ(c) (((c) < 0x100) ? \
- xmlIsExtender_ch((c)) : \
- xmlCharInRange((c), &xmlIsExtenderGroup))
-
-XMLPUBVAR const xmlChRangeGroup xmlIsExtenderGroup;
-
-/**
- * xmlIsIdeographicQ:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsIdeographicQ(c) (((c) < 0x100) ? \
- 0 :\
- (((0x4e00 <= (c)) && ((c) <= 0x9fa5)) || \
- ((c) == 0x3007) || \
- ((0x3021 <= (c)) && ((c) <= 0x3029))))
-
-XMLPUBVAR const xmlChRangeGroup xmlIsIdeographicGroup;
-XMLPUBVAR const unsigned char xmlIsPubidChar_tab[256];
-
-/**
- * xmlIsPubidChar_ch:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsPubidChar_ch(c) (xmlIsPubidChar_tab[(c)])
-
-/**
- * xmlIsPubidCharQ:
- * @c: char to validate
- *
- * Automatically generated by genChRanges.py
- */
-#define xmlIsPubidCharQ(c) (((c) < 0x100) ? \
- xmlIsPubidChar_ch((c)) : 0)
-
-XMLPUBFUN int XMLCALL
- xmlIsBaseChar(unsigned int ch);
-XMLPUBFUN int XMLCALL
- xmlIsBlank(unsigned int ch);
-XMLPUBFUN int XMLCALL
- xmlIsChar(unsigned int ch);
-XMLPUBFUN int XMLCALL
- xmlIsCombining(unsigned int ch);
-XMLPUBFUN int XMLCALL
- xmlIsDigit(unsigned int ch);
-XMLPUBFUN int XMLCALL
- xmlIsExtender(unsigned int ch);
-XMLPUBFUN int XMLCALL
- xmlIsIdeographic(unsigned int ch);
-XMLPUBFUN int XMLCALL
- xmlIsPubidChar(unsigned int ch);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_CHVALID_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/debugXML.h b/external/libxml2_android/jni/libxml2/include/libxml/debugXML.h
deleted file mode 100644
index 5b3be13d..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/debugXML.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Summary: Tree debugging APIs
- * Description: Interfaces to a set of routines used for debugging the tree
- * produced by the XML parser.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __DEBUG_XML__
-#define __DEBUG_XML__
-#include <stdio.h>
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-
-#ifdef LIBXML_DEBUG_ENABLED
-
-#include <libxml/xpath.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The standard Dump routines.
- */
-XMLPUBFUN void XMLCALL
- xmlDebugDumpString (FILE *output,
- const xmlChar *str);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpAttr (FILE *output,
- xmlAttrPtr attr,
- int depth);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpAttrList (FILE *output,
- xmlAttrPtr attr,
- int depth);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpOneNode (FILE *output,
- xmlNodePtr node,
- int depth);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpNode (FILE *output,
- xmlNodePtr node,
- int depth);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpNodeList (FILE *output,
- xmlNodePtr node,
- int depth);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpDocumentHead(FILE *output,
- xmlDocPtr doc);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpDocument (FILE *output,
- xmlDocPtr doc);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpDTD (FILE *output,
- xmlDtdPtr dtd);
-XMLPUBFUN void XMLCALL
- xmlDebugDumpEntities (FILE *output,
- xmlDocPtr doc);
-
-/****************************************************************
- * *
- * Checking routines *
- * *
- ****************************************************************/
-
-XMLPUBFUN int XMLCALL
- xmlDebugCheckDocument (FILE * output,
- xmlDocPtr doc);
-
-/****************************************************************
- * *
- * XML shell helpers *
- * *
- ****************************************************************/
-
-XMLPUBFUN void XMLCALL
- xmlLsOneNode (FILE *output, xmlNodePtr node);
-XMLPUBFUN int XMLCALL
- xmlLsCountNode (xmlNodePtr node);
-
-XMLPUBFUN const char * XMLCALL
- xmlBoolToText (int boolval);
-
-/****************************************************************
- * *
- * The XML shell related structures and functions *
- * *
- ****************************************************************/
-
-#ifdef LIBXML_XPATH_ENABLED
-/**
- * xmlShellReadlineFunc:
- * @prompt: a string prompt
- *
- * This is a generic signature for the XML shell input function.
- *
- * Returns a string which will be freed by the Shell.
- */
-typedef char * (* xmlShellReadlineFunc)(char *prompt);
-
-/**
- * xmlShellCtxt:
- *
- * A debugging shell context.
- * TODO: add the defined function tables.
- */
-typedef struct _xmlShellCtxt xmlShellCtxt;
-typedef xmlShellCtxt *xmlShellCtxtPtr;
-struct _xmlShellCtxt {
- char *filename;
- xmlDocPtr doc;
- xmlNodePtr node;
- xmlXPathContextPtr pctxt;
- int loaded;
- FILE *output;
- xmlShellReadlineFunc input;
-};
-
-/**
- * xmlShellCmd:
- * @ctxt: a shell context
- * @arg: a string argument
- * @node: a first node
- * @node2: a second node
- *
- * This is a generic signature for the XML shell functions.
- *
- * Returns an int, negative returns indicating errors.
- */
-typedef int (* xmlShellCmd) (xmlShellCtxtPtr ctxt,
- char *arg,
- xmlNodePtr node,
- xmlNodePtr node2);
-
-XMLPUBFUN void XMLCALL
- xmlShellPrintXPathError (int errorType,
- const char *arg);
-XMLPUBFUN void XMLCALL
- xmlShellPrintXPathResult(xmlXPathObjectPtr list);
-XMLPUBFUN int XMLCALL
- xmlShellList (xmlShellCtxtPtr ctxt,
- char *arg,
- xmlNodePtr node,
- xmlNodePtr node2);
-XMLPUBFUN int XMLCALL
- xmlShellBase (xmlShellCtxtPtr ctxt,
- char *arg,
- xmlNodePtr node,
- xmlNodePtr node2);
-XMLPUBFUN int XMLCALL
- xmlShellDir (xmlShellCtxtPtr ctxt,
- char *arg,
- xmlNodePtr node,
- xmlNodePtr node2);
-XMLPUBFUN int XMLCALL
- xmlShellLoad (xmlShellCtxtPtr ctxt,
- char *filename,
- xmlNodePtr node,
- xmlNodePtr node2);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlShellPrintNode (xmlNodePtr node);
-XMLPUBFUN int XMLCALL
- xmlShellCat (xmlShellCtxtPtr ctxt,
- char *arg,
- xmlNodePtr node,
- xmlNodePtr node2);
-XMLPUBFUN int XMLCALL
- xmlShellWrite (xmlShellCtxtPtr ctxt,
- char *filename,
- xmlNodePtr node,
- xmlNodePtr node2);
-XMLPUBFUN int XMLCALL
- xmlShellSave (xmlShellCtxtPtr ctxt,
- char *filename,
- xmlNodePtr node,
- xmlNodePtr node2);
-#endif /* LIBXML_OUTPUT_ENABLED */
-#ifdef LIBXML_VALID_ENABLED
-XMLPUBFUN int XMLCALL
- xmlShellValidate (xmlShellCtxtPtr ctxt,
- char *dtd,
- xmlNodePtr node,
- xmlNodePtr node2);
-#endif /* LIBXML_VALID_ENABLED */
-XMLPUBFUN int XMLCALL
- xmlShellDu (xmlShellCtxtPtr ctxt,
- char *arg,
- xmlNodePtr tree,
- xmlNodePtr node2);
-XMLPUBFUN int XMLCALL
- xmlShellPwd (xmlShellCtxtPtr ctxt,
- char *buffer,
- xmlNodePtr node,
- xmlNodePtr node2);
-
-/*
- * The Shell interface.
- */
-XMLPUBFUN void XMLCALL
- xmlShell (xmlDocPtr doc,
- char *filename,
- xmlShellReadlineFunc input,
- FILE *output);
-
-#endif /* LIBXML_XPATH_ENABLED */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_DEBUG_ENABLED */
-#endif /* __DEBUG_XML__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/dict.h b/external/libxml2_android/jni/libxml2/include/libxml/dict.h
deleted file mode 100644
index b83db59a..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/dict.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Summary: string dictionary
- * Description: dictionary of reusable strings, just used to avoid allocation
- * and freeing operations.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_DICT_H__
-#define __XML_DICT_H__
-
-#ifdef __cplusplus
-#define __XML_EXTERNC extern "C"
-#else
-#define __XML_EXTERNC
-#endif
-
-/*
- * The dictionary.
- */
-__XML_EXTERNC typedef struct _xmlDict xmlDict;
-__XML_EXTERNC typedef xmlDict *xmlDictPtr;
-
-#include <limits.h>
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Initializer
- */
-XMLPUBFUN int XMLCALL xmlInitializeDict(void);
-
-/*
- * Constructor and destructor.
- */
-XMLPUBFUN xmlDictPtr XMLCALL
- xmlDictCreate (void);
-XMLPUBFUN size_t XMLCALL
- xmlDictSetLimit (xmlDictPtr dict,
- size_t limit);
-XMLPUBFUN size_t XMLCALL
- xmlDictGetUsage (xmlDictPtr dict);
-XMLPUBFUN xmlDictPtr XMLCALL
- xmlDictCreateSub(xmlDictPtr sub);
-XMLPUBFUN int XMLCALL
- xmlDictReference(xmlDictPtr dict);
-XMLPUBFUN void XMLCALL
- xmlDictFree (xmlDictPtr dict);
-
-/*
- * Lookup of entry in the dictionary.
- */
-XMLPUBFUN const xmlChar * XMLCALL
- xmlDictLookup (xmlDictPtr dict,
- const xmlChar *name,
- int len);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlDictExists (xmlDictPtr dict,
- const xmlChar *name,
- int len);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlDictQLookup (xmlDictPtr dict,
- const xmlChar *prefix,
- const xmlChar *name);
-XMLPUBFUN int XMLCALL
- xmlDictOwns (xmlDictPtr dict,
- const xmlChar *str);
-XMLPUBFUN int XMLCALL
- xmlDictSize (xmlDictPtr dict);
-
-/*
- * Cleanup function
- */
-XMLPUBFUN void XMLCALL
- xmlDictCleanup (void);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* ! __XML_DICT_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/encoding.h b/external/libxml2_android/jni/libxml2/include/libxml/encoding.h
deleted file mode 100644
index 7967cc66..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/encoding.h
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Summary: interface for the encoding conversion functions
- * Description: interface for the encoding conversion functions needed for
- * XML basic encoding and iconv() support.
- *
- * Related specs are
- * rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies
- * [ISO-10646] UTF-8 and UTF-16 in Annexes
- * [ISO-8859-1] ISO Latin-1 characters codes.
- * [UNICODE] The Unicode Consortium, "The Unicode Standard --
- * Worldwide Character Encoding -- Version 1.0", Addison-
- * Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is
- * described in Unicode Technical Report #4.
- * [US-ASCII] Coded Character Set--7-bit American Standard Code for
- * Information Interchange, ANSI X3.4-1986.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_CHAR_ENCODING_H__
-#define __XML_CHAR_ENCODING_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_ICONV_ENABLED
-#include <iconv.h>
-#endif
-#ifdef LIBXML_ICU_ENABLED
-#include <unicode/ucnv.h>
-#endif
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * xmlCharEncoding:
- *
- * Predefined values for some standard encodings.
- * Libxml does not do beforehand translation on UTF8 and ISOLatinX.
- * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default.
- *
- * Anything else would have to be translated to UTF8 before being
- * given to the parser itself. The BOM for UTF16 and the encoding
- * declaration are looked at and a converter is looked for at that
- * point. If not found the parser stops here as asked by the XML REC. A
- * converter can be registered by the user using xmlRegisterCharEncodingHandler
- * but the current form doesn't allow stateful transcoding (a serious
- * problem agreed !). If iconv has been found it will be used
- * automatically and allow stateful transcoding, the simplest is then
- * to be sure to enable iconv and to provide iconv libs for the encoding
- * support needed.
- *
- * Note that the generic "UTF-16" is not a predefined value. Instead, only
- * the specific UTF-16LE and UTF-16BE are present.
- */
-typedef enum {
- XML_CHAR_ENCODING_ERROR= -1, /* No char encoding detected */
- XML_CHAR_ENCODING_NONE= 0, /* No char encoding detected */
- XML_CHAR_ENCODING_UTF8= 1, /* UTF-8 */
- XML_CHAR_ENCODING_UTF16LE= 2, /* UTF-16 little endian */
- XML_CHAR_ENCODING_UTF16BE= 3, /* UTF-16 big endian */
- XML_CHAR_ENCODING_UCS4LE= 4, /* UCS-4 little endian */
- XML_CHAR_ENCODING_UCS4BE= 5, /* UCS-4 big endian */
- XML_CHAR_ENCODING_EBCDIC= 6, /* EBCDIC uh! */
- XML_CHAR_ENCODING_UCS4_2143=7, /* UCS-4 unusual ordering */
- XML_CHAR_ENCODING_UCS4_3412=8, /* UCS-4 unusual ordering */
- XML_CHAR_ENCODING_UCS2= 9, /* UCS-2 */
- XML_CHAR_ENCODING_8859_1= 10,/* ISO-8859-1 ISO Latin 1 */
- XML_CHAR_ENCODING_8859_2= 11,/* ISO-8859-2 ISO Latin 2 */
- XML_CHAR_ENCODING_8859_3= 12,/* ISO-8859-3 */
- XML_CHAR_ENCODING_8859_4= 13,/* ISO-8859-4 */
- XML_CHAR_ENCODING_8859_5= 14,/* ISO-8859-5 */
- XML_CHAR_ENCODING_8859_6= 15,/* ISO-8859-6 */
- XML_CHAR_ENCODING_8859_7= 16,/* ISO-8859-7 */
- XML_CHAR_ENCODING_8859_8= 17,/* ISO-8859-8 */
- XML_CHAR_ENCODING_8859_9= 18,/* ISO-8859-9 */
- XML_CHAR_ENCODING_2022_JP= 19,/* ISO-2022-JP */
- XML_CHAR_ENCODING_SHIFT_JIS=20,/* Shift_JIS */
- XML_CHAR_ENCODING_EUC_JP= 21,/* EUC-JP */
- XML_CHAR_ENCODING_ASCII= 22 /* pure ASCII */
-} xmlCharEncoding;
-
-/**
- * xmlCharEncodingInputFunc:
- * @out: a pointer to an array of bytes to store the UTF-8 result
- * @outlen: the length of @out
- * @in: a pointer to an array of chars in the original encoding
- * @inlen: the length of @in
- *
- * Take a block of chars in the original encoding and try to convert
- * it to an UTF-8 block of chars out.
- *
- * Returns the number of bytes written, -1 if lack of space, or -2
- * if the transcoding failed.
- * The value of @inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictiable.
- * The value of @outlen after return is the number of octets consumed.
- */
-typedef int (* xmlCharEncodingInputFunc)(unsigned char *out, int *outlen,
- const unsigned char *in, int *inlen);
-
-
-/**
- * xmlCharEncodingOutputFunc:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of UTF-8 chars
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and try to convert it to another
- * encoding.
- * Note: a first call designed to produce heading info is called with
- * in = NULL. If stateful this should also initialize the encoder state.
- *
- * Returns the number of bytes written, -1 if lack of space, or -2
- * if the transcoding failed.
- * The value of @inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictiable.
- * The value of @outlen after return is the number of octets produced.
- */
-typedef int (* xmlCharEncodingOutputFunc)(unsigned char *out, int *outlen,
- const unsigned char *in, int *inlen);
-
-
-/*
- * Block defining the handlers for non UTF-8 encodings.
- * If iconv is supported, there are two extra fields.
- */
-#ifdef LIBXML_ICU_ENABLED
-struct _uconv_t {
- UConverter *uconv; /* for conversion between an encoding and UTF-16 */
- UConverter *utf8; /* for conversion between UTF-8 and UTF-16 */
-};
-typedef struct _uconv_t uconv_t;
-#endif
-
-typedef struct _xmlCharEncodingHandler xmlCharEncodingHandler;
-typedef xmlCharEncodingHandler *xmlCharEncodingHandlerPtr;
-struct _xmlCharEncodingHandler {
- char *name;
- xmlCharEncodingInputFunc input;
- xmlCharEncodingOutputFunc output;
-#ifdef LIBXML_ICONV_ENABLED
- iconv_t iconv_in;
- iconv_t iconv_out;
-#endif /* LIBXML_ICONV_ENABLED */
-#ifdef LIBXML_ICU_ENABLED
- uconv_t *uconv_in;
- uconv_t *uconv_out;
-#endif /* LIBXML_ICU_ENABLED */
-};
-
-#ifdef __cplusplus
-}
-#endif
-#include <libxml/tree.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Interfaces for encoding handlers.
- */
-XMLPUBFUN void XMLCALL
- xmlInitCharEncodingHandlers (void);
-XMLPUBFUN void XMLCALL
- xmlCleanupCharEncodingHandlers (void);
-XMLPUBFUN void XMLCALL
- xmlRegisterCharEncodingHandler (xmlCharEncodingHandlerPtr handler);
-XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
- xmlGetCharEncodingHandler (xmlCharEncoding enc);
-XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
- xmlFindCharEncodingHandler (const char *name);
-XMLPUBFUN xmlCharEncodingHandlerPtr XMLCALL
- xmlNewCharEncodingHandler (const char *name,
- xmlCharEncodingInputFunc input,
- xmlCharEncodingOutputFunc output);
-
-/*
- * Interfaces for encoding names and aliases.
- */
-XMLPUBFUN int XMLCALL
- xmlAddEncodingAlias (const char *name,
- const char *alias);
-XMLPUBFUN int XMLCALL
- xmlDelEncodingAlias (const char *alias);
-XMLPUBFUN const char * XMLCALL
- xmlGetEncodingAlias (const char *alias);
-XMLPUBFUN void XMLCALL
- xmlCleanupEncodingAliases (void);
-XMLPUBFUN xmlCharEncoding XMLCALL
- xmlParseCharEncoding (const char *name);
-XMLPUBFUN const char * XMLCALL
- xmlGetCharEncodingName (xmlCharEncoding enc);
-
-/*
- * Interfaces directly used by the parsers.
- */
-XMLPUBFUN xmlCharEncoding XMLCALL
- xmlDetectCharEncoding (const unsigned char *in,
- int len);
-
-XMLPUBFUN int XMLCALL
- xmlCharEncOutFunc (xmlCharEncodingHandler *handler,
- xmlBufferPtr out,
- xmlBufferPtr in);
-
-XMLPUBFUN int XMLCALL
- xmlCharEncInFunc (xmlCharEncodingHandler *handler,
- xmlBufferPtr out,
- xmlBufferPtr in);
-XMLPUBFUN int XMLCALL
- xmlCharEncFirstLine (xmlCharEncodingHandler *handler,
- xmlBufferPtr out,
- xmlBufferPtr in);
-XMLPUBFUN int XMLCALL
- xmlCharEncCloseFunc (xmlCharEncodingHandler *handler);
-
-/*
- * Export a few useful functions
- */
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN int XMLCALL
- UTF8Toisolat1 (unsigned char *out,
- int *outlen,
- const unsigned char *in,
- int *inlen);
-#endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN int XMLCALL
- isolat1ToUTF8 (unsigned char *out,
- int *outlen,
- const unsigned char *in,
- int *inlen);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_CHAR_ENCODING_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/entities.h b/external/libxml2_android/jni/libxml2/include/libxml/entities.h
deleted file mode 100644
index 47b4573e..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/entities.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Summary: interface for the XML entities handling
- * Description: this module provides some of the entity API needed
- * for the parser and applications.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_ENTITIES_H__
-#define __XML_ENTITIES_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The different valid entity types.
- */
-typedef enum {
- XML_INTERNAL_GENERAL_ENTITY = 1,
- XML_EXTERNAL_GENERAL_PARSED_ENTITY = 2,
- XML_EXTERNAL_GENERAL_UNPARSED_ENTITY = 3,
- XML_INTERNAL_PARAMETER_ENTITY = 4,
- XML_EXTERNAL_PARAMETER_ENTITY = 5,
- XML_INTERNAL_PREDEFINED_ENTITY = 6
-} xmlEntityType;
-
-/*
- * An unit of storage for an entity, contains the string, the value
- * and the linkind data needed for the linking in the hash table.
- */
-
-struct _xmlEntity {
- void *_private; /* application data */
- xmlElementType type; /* XML_ENTITY_DECL, must be second ! */
- const xmlChar *name; /* Entity name */
- struct _xmlNode *children; /* First child link */
- struct _xmlNode *last; /* Last child link */
- struct _xmlDtd *parent; /* -> DTD */
- struct _xmlNode *next; /* next sibling link */
- struct _xmlNode *prev; /* previous sibling link */
- struct _xmlDoc *doc; /* the containing document */
-
- xmlChar *orig; /* content without ref substitution */
- xmlChar *content; /* content or ndata if unparsed */
- int length; /* the content length */
- xmlEntityType etype; /* The entity type */
- const xmlChar *ExternalID; /* External identifier for PUBLIC */
- const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC Entity */
-
- struct _xmlEntity *nexte; /* unused */
- const xmlChar *URI; /* the full URI as computed */
- int owner; /* does the entity own the childrens */
- int checked; /* was the entity content checked */
- /* this is also used to count entities
- * references done from that entity
- * and if it contains '<' */
-};
-
-/*
- * All entities are stored in an hash table.
- * There is 2 separate hash tables for global and parameter entities.
- */
-
-typedef struct _xmlHashTable xmlEntitiesTable;
-typedef xmlEntitiesTable *xmlEntitiesTablePtr;
-
-/*
- * External functions:
- */
-
-#ifdef LIBXML_LEGACY_ENABLED
-XMLPUBFUN void XMLCALL
- xmlInitializePredefinedEntities (void);
-#endif /* LIBXML_LEGACY_ENABLED */
-
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlNewEntity (xmlDocPtr doc,
- const xmlChar *name,
- int type,
- const xmlChar *ExternalID,
- const xmlChar *SystemID,
- const xmlChar *content);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlAddDocEntity (xmlDocPtr doc,
- const xmlChar *name,
- int type,
- const xmlChar *ExternalID,
- const xmlChar *SystemID,
- const xmlChar *content);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlAddDtdEntity (xmlDocPtr doc,
- const xmlChar *name,
- int type,
- const xmlChar *ExternalID,
- const xmlChar *SystemID,
- const xmlChar *content);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlGetPredefinedEntity (const xmlChar *name);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlGetDocEntity (const xmlDoc *doc,
- const xmlChar *name);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlGetDtdEntity (xmlDocPtr doc,
- const xmlChar *name);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlGetParameterEntity (xmlDocPtr doc,
- const xmlChar *name);
-#ifdef LIBXML_LEGACY_ENABLED
-XMLPUBFUN const xmlChar * XMLCALL
- xmlEncodeEntities (xmlDocPtr doc,
- const xmlChar *input);
-#endif /* LIBXML_LEGACY_ENABLED */
-XMLPUBFUN xmlChar * XMLCALL
- xmlEncodeEntitiesReentrant(xmlDocPtr doc,
- const xmlChar *input);
-XMLPUBFUN xmlChar * XMLCALL
- xmlEncodeSpecialChars (const xmlDoc *doc,
- const xmlChar *input);
-XMLPUBFUN xmlEntitiesTablePtr XMLCALL
- xmlCreateEntitiesTable (void);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlEntitiesTablePtr XMLCALL
- xmlCopyEntitiesTable (xmlEntitiesTablePtr table);
-#endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlFreeEntitiesTable (xmlEntitiesTablePtr table);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlDumpEntitiesTable (xmlBufferPtr buf,
- xmlEntitiesTablePtr table);
-XMLPUBFUN void XMLCALL
- xmlDumpEntityDecl (xmlBufferPtr buf,
- xmlEntityPtr ent);
-#endif /* LIBXML_OUTPUT_ENABLED */
-#ifdef LIBXML_LEGACY_ENABLED
-XMLPUBFUN void XMLCALL
- xmlCleanupPredefinedEntities(void);
-#endif /* LIBXML_LEGACY_ENABLED */
-
-
-#ifdef __cplusplus
-}
-#endif
-
-# endif /* __XML_ENTITIES_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/globals.h b/external/libxml2_android/jni/libxml2/include/libxml/globals.h
deleted file mode 100644
index a9305aa9..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/globals.h
+++ /dev/null
@@ -1,509 +0,0 @@
-/*
- * Summary: interface for all global variables of the library
- * Description: all the global variables and thread handling for
- * those variables is handled by this module.
- *
- * The bottom of this file is automatically generated by build_glob.py
- * based on the description file global.data
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Gary Pennington <Gary.Pennington@uk.sun.com>, Daniel Veillard
- */
-
-#ifndef __XML_GLOBALS_H
-#define __XML_GLOBALS_H
-
-#include <libxml/xmlversion.h>
-#include <libxml/parser.h>
-#include <libxml/xmlerror.h>
-#include <libxml/SAX.h>
-#include <libxml/SAX2.h>
-#include <libxml/xmlmemory.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-XMLPUBFUN void XMLCALL xmlInitGlobals(void);
-XMLPUBFUN void XMLCALL xmlCleanupGlobals(void);
-
-/**
- * xmlParserInputBufferCreateFilenameFunc:
- * @URI: the URI to read from
- * @enc: the requested source encoding
- *
- * Signature for the function doing the lookup for a suitable input method
- * corresponding to an URI.
- *
- * Returns the new xmlParserInputBufferPtr in case of success or NULL if no
- * method was found.
- */
-typedef xmlParserInputBufferPtr (*xmlParserInputBufferCreateFilenameFunc) (const char *URI,
- xmlCharEncoding enc);
-
-
-/**
- * xmlOutputBufferCreateFilenameFunc:
- * @URI: the URI to write to
- * @enc: the requested target encoding
- *
- * Signature for the function doing the lookup for a suitable output method
- * corresponding to an URI.
- *
- * Returns the new xmlOutputBufferPtr in case of success or NULL if no
- * method was found.
- */
-typedef xmlOutputBufferPtr (*xmlOutputBufferCreateFilenameFunc) (const char *URI,
- xmlCharEncodingHandlerPtr encoder,
- int compression);
-
-XMLPUBFUN xmlParserInputBufferCreateFilenameFunc
-XMLCALL xmlParserInputBufferCreateFilenameDefault (xmlParserInputBufferCreateFilenameFunc func);
-XMLPUBFUN xmlOutputBufferCreateFilenameFunc
-XMLCALL xmlOutputBufferCreateFilenameDefault (xmlOutputBufferCreateFilenameFunc func);
-
-/*
- * Externally global symbols which need to be protected for backwards
- * compatibility support.
- */
-
-#undef docbDefaultSAXHandler
-#undef htmlDefaultSAXHandler
-#undef oldXMLWDcompatibility
-#undef xmlBufferAllocScheme
-#undef xmlDefaultBufferSize
-#undef xmlDefaultSAXHandler
-#undef xmlDefaultSAXLocator
-#undef xmlDoValidityCheckingDefaultValue
-#undef xmlFree
-#undef xmlGenericError
-#undef xmlStructuredError
-#undef xmlGenericErrorContext
-#undef xmlStructuredErrorContext
-#undef xmlGetWarningsDefaultValue
-#undef xmlIndentTreeOutput
-#undef xmlTreeIndentString
-#undef xmlKeepBlanksDefaultValue
-#undef xmlLineNumbersDefaultValue
-#undef xmlLoadExtDtdDefaultValue
-#undef xmlMalloc
-#undef xmlMallocAtomic
-#undef xmlMemStrdup
-#undef xmlParserDebugEntities
-#undef xmlParserVersion
-#undef xmlPedanticParserDefaultValue
-#undef xmlRealloc
-#undef xmlSaveNoEmptyTags
-#undef xmlSubstituteEntitiesDefaultValue
-#undef xmlRegisterNodeDefaultValue
-#undef xmlDeregisterNodeDefaultValue
-#undef xmlLastError
-#undef xmlParserInputBufferCreateFilenameValue
-#undef xmlOutputBufferCreateFilenameValue
-
-/**
- * xmlRegisterNodeFunc:
- * @node: the current node
- *
- * Signature for the registration callback of a created node
- */
-typedef void (*xmlRegisterNodeFunc) (xmlNodePtr node);
-/**
- * xmlDeregisterNodeFunc:
- * @node: the current node
- *
- * Signature for the deregistration callback of a discarded node
- */
-typedef void (*xmlDeregisterNodeFunc) (xmlNodePtr node);
-
-typedef struct _xmlGlobalState xmlGlobalState;
-typedef xmlGlobalState *xmlGlobalStatePtr;
-struct _xmlGlobalState
-{
- const char *xmlParserVersion;
-
- xmlSAXLocator xmlDefaultSAXLocator;
- xmlSAXHandlerV1 xmlDefaultSAXHandler;
- xmlSAXHandlerV1 docbDefaultSAXHandler;
- xmlSAXHandlerV1 htmlDefaultSAXHandler;
-
- xmlFreeFunc xmlFree;
- xmlMallocFunc xmlMalloc;
- xmlStrdupFunc xmlMemStrdup;
- xmlReallocFunc xmlRealloc;
-
- xmlGenericErrorFunc xmlGenericError;
- xmlStructuredErrorFunc xmlStructuredError;
- void *xmlGenericErrorContext;
-
- int oldXMLWDcompatibility;
-
- xmlBufferAllocationScheme xmlBufferAllocScheme;
- int xmlDefaultBufferSize;
-
- int xmlSubstituteEntitiesDefaultValue;
- int xmlDoValidityCheckingDefaultValue;
- int xmlGetWarningsDefaultValue;
- int xmlKeepBlanksDefaultValue;
- int xmlLineNumbersDefaultValue;
- int xmlLoadExtDtdDefaultValue;
- int xmlParserDebugEntities;
- int xmlPedanticParserDefaultValue;
-
- int xmlSaveNoEmptyTags;
- int xmlIndentTreeOutput;
- const char *xmlTreeIndentString;
-
- xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
- xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
-
- xmlMallocFunc xmlMallocAtomic;
- xmlError xmlLastError;
-
- xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
- xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
-
- void *xmlStructuredErrorContext;
-};
-
-#ifdef __cplusplus
-}
-#endif
-#include <libxml/threads.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-XMLPUBFUN void XMLCALL xmlInitializeGlobalState(xmlGlobalStatePtr gs);
-
-XMLPUBFUN void XMLCALL xmlThrDefSetGenericErrorFunc(void *ctx, xmlGenericErrorFunc handler);
-
-XMLPUBFUN void XMLCALL xmlThrDefSetStructuredErrorFunc(void *ctx, xmlStructuredErrorFunc handler);
-
-XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlRegisterNodeDefault(xmlRegisterNodeFunc func);
-XMLPUBFUN xmlRegisterNodeFunc XMLCALL xmlThrDefRegisterNodeDefault(xmlRegisterNodeFunc func);
-XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlDeregisterNodeDefault(xmlDeregisterNodeFunc func);
-XMLPUBFUN xmlDeregisterNodeFunc XMLCALL xmlThrDefDeregisterNodeDefault(xmlDeregisterNodeFunc func);
-
-XMLPUBFUN xmlOutputBufferCreateFilenameFunc XMLCALL
- xmlThrDefOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func);
-XMLPUBFUN xmlParserInputBufferCreateFilenameFunc XMLCALL
- xmlThrDefParserInputBufferCreateFilenameDefault(
- xmlParserInputBufferCreateFilenameFunc func);
-
-/** DOC_DISABLE */
-/*
- * In general the memory allocation entry points are not kept
- * thread specific but this can be overridden by LIBXML_THREAD_ALLOC_ENABLED
- * - xmlMalloc
- * - xmlMallocAtomic
- * - xmlRealloc
- * - xmlMemStrdup
- * - xmlFree
- */
-
-#ifdef LIBXML_THREAD_ALLOC_ENABLED
-#ifdef LIBXML_THREAD_ENABLED
-XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMalloc(void);
-#define xmlMalloc \
-(*(__xmlMalloc()))
-#else
-XMLPUBVAR xmlMallocFunc xmlMalloc;
-#endif
-
-#ifdef LIBXML_THREAD_ENABLED
-XMLPUBFUN xmlMallocFunc * XMLCALL __xmlMallocAtomic(void);
-#define xmlMallocAtomic \
-(*(__xmlMallocAtomic()))
-#else
-XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
-#endif
-
-#ifdef LIBXML_THREAD_ENABLED
-XMLPUBFUN xmlReallocFunc * XMLCALL __xmlRealloc(void);
-#define xmlRealloc \
-(*(__xmlRealloc()))
-#else
-XMLPUBVAR xmlReallocFunc xmlRealloc;
-#endif
-
-#ifdef LIBXML_THREAD_ENABLED
-XMLPUBFUN xmlFreeFunc * XMLCALL __xmlFree(void);
-#define xmlFree \
-(*(__xmlFree()))
-#else
-XMLPUBVAR xmlFreeFunc xmlFree;
-#endif
-
-#ifdef LIBXML_THREAD_ENABLED
-XMLPUBFUN xmlStrdupFunc * XMLCALL __xmlMemStrdup(void);
-#define xmlMemStrdup \
-(*(__xmlMemStrdup()))
-#else
-XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
-#endif
-
-#else /* !LIBXML_THREAD_ALLOC_ENABLED */
-XMLPUBVAR xmlMallocFunc xmlMalloc;
-XMLPUBVAR xmlMallocFunc xmlMallocAtomic;
-XMLPUBVAR xmlReallocFunc xmlRealloc;
-XMLPUBVAR xmlFreeFunc xmlFree;
-XMLPUBVAR xmlStrdupFunc xmlMemStrdup;
-#endif /* LIBXML_THREAD_ALLOC_ENABLED */
-
-#ifdef LIBXML_DOCB_ENABLED
-XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __docbDefaultSAXHandler(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define docbDefaultSAXHandler \
-(*(__docbDefaultSAXHandler()))
-#else
-XMLPUBVAR xmlSAXHandlerV1 docbDefaultSAXHandler;
-#endif
-#endif
-
-#ifdef LIBXML_HTML_ENABLED
-XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __htmlDefaultSAXHandler(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define htmlDefaultSAXHandler \
-(*(__htmlDefaultSAXHandler()))
-#else
-XMLPUBVAR xmlSAXHandlerV1 htmlDefaultSAXHandler;
-#endif
-#endif
-
-XMLPUBFUN xmlError * XMLCALL __xmlLastError(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlLastError \
-(*(__xmlLastError()))
-#else
-XMLPUBVAR xmlError xmlLastError;
-#endif
-
-/*
- * Everything starting from the line below is
- * Automatically generated by build_glob.py.
- * Do not modify the previous line.
- */
-
-
-XMLPUBFUN int * XMLCALL __oldXMLWDcompatibility(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define oldXMLWDcompatibility \
-(*(__oldXMLWDcompatibility()))
-#else
-XMLPUBVAR int oldXMLWDcompatibility;
-#endif
-
-XMLPUBFUN xmlBufferAllocationScheme * XMLCALL __xmlBufferAllocScheme(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlBufferAllocScheme \
-(*(__xmlBufferAllocScheme()))
-#else
-XMLPUBVAR xmlBufferAllocationScheme xmlBufferAllocScheme;
-#endif
-XMLPUBFUN xmlBufferAllocationScheme XMLCALL
- xmlThrDefBufferAllocScheme(xmlBufferAllocationScheme v);
-
-XMLPUBFUN int * XMLCALL __xmlDefaultBufferSize(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlDefaultBufferSize \
-(*(__xmlDefaultBufferSize()))
-#else
-XMLPUBVAR int xmlDefaultBufferSize;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefDefaultBufferSize(int v);
-
-XMLPUBFUN xmlSAXHandlerV1 * XMLCALL __xmlDefaultSAXHandler(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlDefaultSAXHandler \
-(*(__xmlDefaultSAXHandler()))
-#else
-XMLPUBVAR xmlSAXHandlerV1 xmlDefaultSAXHandler;
-#endif
-
-XMLPUBFUN xmlSAXLocator * XMLCALL __xmlDefaultSAXLocator(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlDefaultSAXLocator \
-(*(__xmlDefaultSAXLocator()))
-#else
-XMLPUBVAR xmlSAXLocator xmlDefaultSAXLocator;
-#endif
-
-XMLPUBFUN int * XMLCALL __xmlDoValidityCheckingDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlDoValidityCheckingDefaultValue \
-(*(__xmlDoValidityCheckingDefaultValue()))
-#else
-XMLPUBVAR int xmlDoValidityCheckingDefaultValue;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefDoValidityCheckingDefaultValue(int v);
-
-XMLPUBFUN xmlGenericErrorFunc * XMLCALL __xmlGenericError(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlGenericError \
-(*(__xmlGenericError()))
-#else
-XMLPUBVAR xmlGenericErrorFunc xmlGenericError;
-#endif
-
-XMLPUBFUN xmlStructuredErrorFunc * XMLCALL __xmlStructuredError(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlStructuredError \
-(*(__xmlStructuredError()))
-#else
-XMLPUBVAR xmlStructuredErrorFunc xmlStructuredError;
-#endif
-
-XMLPUBFUN void * * XMLCALL __xmlGenericErrorContext(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlGenericErrorContext \
-(*(__xmlGenericErrorContext()))
-#else
-XMLPUBVAR void * xmlGenericErrorContext;
-#endif
-
-XMLPUBFUN void * * XMLCALL __xmlStructuredErrorContext(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlStructuredErrorContext \
-(*(__xmlStructuredErrorContext()))
-#else
-XMLPUBVAR void * xmlStructuredErrorContext;
-#endif
-
-XMLPUBFUN int * XMLCALL __xmlGetWarningsDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlGetWarningsDefaultValue \
-(*(__xmlGetWarningsDefaultValue()))
-#else
-XMLPUBVAR int xmlGetWarningsDefaultValue;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefGetWarningsDefaultValue(int v);
-
-XMLPUBFUN int * XMLCALL __xmlIndentTreeOutput(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlIndentTreeOutput \
-(*(__xmlIndentTreeOutput()))
-#else
-XMLPUBVAR int xmlIndentTreeOutput;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefIndentTreeOutput(int v);
-
-XMLPUBFUN const char * * XMLCALL __xmlTreeIndentString(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlTreeIndentString \
-(*(__xmlTreeIndentString()))
-#else
-XMLPUBVAR const char * xmlTreeIndentString;
-#endif
-XMLPUBFUN const char * XMLCALL xmlThrDefTreeIndentString(const char * v);
-
-XMLPUBFUN int * XMLCALL __xmlKeepBlanksDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlKeepBlanksDefaultValue \
-(*(__xmlKeepBlanksDefaultValue()))
-#else
-XMLPUBVAR int xmlKeepBlanksDefaultValue;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefKeepBlanksDefaultValue(int v);
-
-XMLPUBFUN int * XMLCALL __xmlLineNumbersDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlLineNumbersDefaultValue \
-(*(__xmlLineNumbersDefaultValue()))
-#else
-XMLPUBVAR int xmlLineNumbersDefaultValue;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefLineNumbersDefaultValue(int v);
-
-XMLPUBFUN int * XMLCALL __xmlLoadExtDtdDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlLoadExtDtdDefaultValue \
-(*(__xmlLoadExtDtdDefaultValue()))
-#else
-XMLPUBVAR int xmlLoadExtDtdDefaultValue;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefLoadExtDtdDefaultValue(int v);
-
-XMLPUBFUN int * XMLCALL __xmlParserDebugEntities(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlParserDebugEntities \
-(*(__xmlParserDebugEntities()))
-#else
-XMLPUBVAR int xmlParserDebugEntities;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefParserDebugEntities(int v);
-
-XMLPUBFUN const char * * XMLCALL __xmlParserVersion(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlParserVersion \
-(*(__xmlParserVersion()))
-#else
-XMLPUBVAR const char * xmlParserVersion;
-#endif
-
-XMLPUBFUN int * XMLCALL __xmlPedanticParserDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlPedanticParserDefaultValue \
-(*(__xmlPedanticParserDefaultValue()))
-#else
-XMLPUBVAR int xmlPedanticParserDefaultValue;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefPedanticParserDefaultValue(int v);
-
-XMLPUBFUN int * XMLCALL __xmlSaveNoEmptyTags(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlSaveNoEmptyTags \
-(*(__xmlSaveNoEmptyTags()))
-#else
-XMLPUBVAR int xmlSaveNoEmptyTags;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefSaveNoEmptyTags(int v);
-
-XMLPUBFUN int * XMLCALL __xmlSubstituteEntitiesDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlSubstituteEntitiesDefaultValue \
-(*(__xmlSubstituteEntitiesDefaultValue()))
-#else
-XMLPUBVAR int xmlSubstituteEntitiesDefaultValue;
-#endif
-XMLPUBFUN int XMLCALL xmlThrDefSubstituteEntitiesDefaultValue(int v);
-
-XMLPUBFUN xmlRegisterNodeFunc * XMLCALL __xmlRegisterNodeDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlRegisterNodeDefaultValue \
-(*(__xmlRegisterNodeDefaultValue()))
-#else
-XMLPUBVAR xmlRegisterNodeFunc xmlRegisterNodeDefaultValue;
-#endif
-
-XMLPUBFUN xmlDeregisterNodeFunc * XMLCALL __xmlDeregisterNodeDefaultValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlDeregisterNodeDefaultValue \
-(*(__xmlDeregisterNodeDefaultValue()))
-#else
-XMLPUBVAR xmlDeregisterNodeFunc xmlDeregisterNodeDefaultValue;
-#endif
-
-XMLPUBFUN xmlParserInputBufferCreateFilenameFunc * XMLCALL \
- __xmlParserInputBufferCreateFilenameValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlParserInputBufferCreateFilenameValue \
-(*(__xmlParserInputBufferCreateFilenameValue()))
-#else
-XMLPUBVAR xmlParserInputBufferCreateFilenameFunc xmlParserInputBufferCreateFilenameValue;
-#endif
-
-XMLPUBFUN xmlOutputBufferCreateFilenameFunc * XMLCALL __xmlOutputBufferCreateFilenameValue(void);
-#ifdef LIBXML_THREAD_ENABLED
-#define xmlOutputBufferCreateFilenameValue \
-(*(__xmlOutputBufferCreateFilenameValue()))
-#else
-XMLPUBVAR xmlOutputBufferCreateFilenameFunc xmlOutputBufferCreateFilenameValue;
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_GLOBALS_H */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/hash.h b/external/libxml2_android/jni/libxml2/include/libxml/hash.h
deleted file mode 100644
index dc8ab7ec..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/hash.h
+++ /dev/null
@@ -1,233 +0,0 @@
-/*
- * Summary: Chained hash tables
- * Description: This module implements the hash table support used in
- * various places in the library.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Bjorn Reese <bjorn.reese@systematic.dk>
- */
-
-#ifndef __XML_HASH_H__
-#define __XML_HASH_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The hash table.
- */
-typedef struct _xmlHashTable xmlHashTable;
-typedef xmlHashTable *xmlHashTablePtr;
-
-#ifdef __cplusplus
-}
-#endif
-
-#include <libxml/xmlversion.h>
-#include <libxml/parser.h>
-#include <libxml/dict.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Recent version of gcc produce a warning when a function pointer is assigned
- * to an object pointer, or vice versa. The following macro is a dirty hack
- * to allow suppression of the warning. If your architecture has function
- * pointers which are a different size than a void pointer, there may be some
- * serious trouble within the library.
- */
-/**
- * XML_CAST_FPTR:
- * @fptr: pointer to a function
- *
- * Macro to do a casting from an object pointer to a
- * function pointer without encountering a warning from
- * gcc
- *
- * #define XML_CAST_FPTR(fptr) (*(void **)(&fptr))
- * This macro violated ISO C aliasing rules (gcc4 on s390 broke)
- * so it is disabled now
- */
-
-#define XML_CAST_FPTR(fptr) fptr
-
-
-/*
- * function types:
- */
-/**
- * xmlHashDeallocator:
- * @payload: the data in the hash
- * @name: the name associated
- *
- * Callback to free data from a hash.
- */
-typedef void (*xmlHashDeallocator)(void *payload, xmlChar *name);
-/**
- * xmlHashCopier:
- * @payload: the data in the hash
- * @name: the name associated
- *
- * Callback to copy data from a hash.
- *
- * Returns a copy of the data or NULL in case of error.
- */
-typedef void *(*xmlHashCopier)(void *payload, xmlChar *name);
-/**
- * xmlHashScanner:
- * @payload: the data in the hash
- * @data: extra scannner data
- * @name: the name associated
- *
- * Callback when scanning data in a hash with the simple scanner.
- */
-typedef void (*xmlHashScanner)(void *payload, void *data, xmlChar *name);
-/**
- * xmlHashScannerFull:
- * @payload: the data in the hash
- * @data: extra scannner data
- * @name: the name associated
- * @name2: the second name associated
- * @name3: the third name associated
- *
- * Callback when scanning data in a hash with the full scanner.
- */
-typedef void (*xmlHashScannerFull)(void *payload, void *data,
- const xmlChar *name, const xmlChar *name2,
- const xmlChar *name3);
-
-/*
- * Constructor and destructor.
- */
-XMLPUBFUN xmlHashTablePtr XMLCALL
- xmlHashCreate (int size);
-XMLPUBFUN xmlHashTablePtr XMLCALL
- xmlHashCreateDict(int size,
- xmlDictPtr dict);
-XMLPUBFUN void XMLCALL
- xmlHashFree (xmlHashTablePtr table,
- xmlHashDeallocator f);
-
-/*
- * Add a new entry to the hash table.
- */
-XMLPUBFUN int XMLCALL
- xmlHashAddEntry (xmlHashTablePtr table,
- const xmlChar *name,
- void *userdata);
-XMLPUBFUN int XMLCALL
- xmlHashUpdateEntry(xmlHashTablePtr table,
- const xmlChar *name,
- void *userdata,
- xmlHashDeallocator f);
-XMLPUBFUN int XMLCALL
- xmlHashAddEntry2(xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *name2,
- void *userdata);
-XMLPUBFUN int XMLCALL
- xmlHashUpdateEntry2(xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *name2,
- void *userdata,
- xmlHashDeallocator f);
-XMLPUBFUN int XMLCALL
- xmlHashAddEntry3(xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *name2,
- const xmlChar *name3,
- void *userdata);
-XMLPUBFUN int XMLCALL
- xmlHashUpdateEntry3(xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *name2,
- const xmlChar *name3,
- void *userdata,
- xmlHashDeallocator f);
-
-/*
- * Remove an entry from the hash table.
- */
-XMLPUBFUN int XMLCALL
- xmlHashRemoveEntry(xmlHashTablePtr table, const xmlChar *name,
- xmlHashDeallocator f);
-XMLPUBFUN int XMLCALL
- xmlHashRemoveEntry2(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, xmlHashDeallocator f);
-XMLPUBFUN int XMLCALL
- xmlHashRemoveEntry3(xmlHashTablePtr table, const xmlChar *name,
- const xmlChar *name2, const xmlChar *name3,
- xmlHashDeallocator f);
-
-/*
- * Retrieve the userdata.
- */
-XMLPUBFUN void * XMLCALL
- xmlHashLookup (xmlHashTablePtr table,
- const xmlChar *name);
-XMLPUBFUN void * XMLCALL
- xmlHashLookup2 (xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *name2);
-XMLPUBFUN void * XMLCALL
- xmlHashLookup3 (xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *name2,
- const xmlChar *name3);
-XMLPUBFUN void * XMLCALL
- xmlHashQLookup (xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *prefix);
-XMLPUBFUN void * XMLCALL
- xmlHashQLookup2 (xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *prefix,
- const xmlChar *name2,
- const xmlChar *prefix2);
-XMLPUBFUN void * XMLCALL
- xmlHashQLookup3 (xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *prefix,
- const xmlChar *name2,
- const xmlChar *prefix2,
- const xmlChar *name3,
- const xmlChar *prefix3);
-
-/*
- * Helpers.
- */
-XMLPUBFUN xmlHashTablePtr XMLCALL
- xmlHashCopy (xmlHashTablePtr table,
- xmlHashCopier f);
-XMLPUBFUN int XMLCALL
- xmlHashSize (xmlHashTablePtr table);
-XMLPUBFUN void XMLCALL
- xmlHashScan (xmlHashTablePtr table,
- xmlHashScanner f,
- void *data);
-XMLPUBFUN void XMLCALL
- xmlHashScan3 (xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *name2,
- const xmlChar *name3,
- xmlHashScanner f,
- void *data);
-XMLPUBFUN void XMLCALL
- xmlHashScanFull (xmlHashTablePtr table,
- xmlHashScannerFull f,
- void *data);
-XMLPUBFUN void XMLCALL
- xmlHashScanFull3(xmlHashTablePtr table,
- const xmlChar *name,
- const xmlChar *name2,
- const xmlChar *name3,
- xmlHashScannerFull f,
- void *data);
-#ifdef __cplusplus
-}
-#endif
-#endif /* ! __XML_HASH_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/list.h b/external/libxml2_android/jni/libxml2/include/libxml/list.h
deleted file mode 100644
index 0504e0cf..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/list.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Summary: lists interfaces
- * Description: this module implement the list support used in
- * various place in the library.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Gary Pennington <Gary.Pennington@uk.sun.com>
- */
-
-#ifndef __XML_LINK_INCLUDE__
-#define __XML_LINK_INCLUDE__
-
-#include <libxml/xmlversion.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct _xmlLink xmlLink;
-typedef xmlLink *xmlLinkPtr;
-
-typedef struct _xmlList xmlList;
-typedef xmlList *xmlListPtr;
-
-/**
- * xmlListDeallocator:
- * @lk: the data to deallocate
- *
- * Callback function used to free data from a list.
- */
-typedef void (*xmlListDeallocator) (xmlLinkPtr lk);
-/**
- * xmlListDataCompare:
- * @data0: the first data
- * @data1: the second data
- *
- * Callback function used to compare 2 data.
- *
- * Returns 0 is equality, -1 or 1 otherwise depending on the ordering.
- */
-typedef int (*xmlListDataCompare) (const void *data0, const void *data1);
-/**
- * xmlListWalker:
- * @data: the data found in the list
- * @user: extra user provided data to the walker
- *
- * Callback function used when walking a list with xmlListWalk().
- *
- * Returns 0 to stop walking the list, 1 otherwise.
- */
-typedef int (*xmlListWalker) (const void *data, const void *user);
-
-/* Creation/Deletion */
-XMLPUBFUN xmlListPtr XMLCALL
- xmlListCreate (xmlListDeallocator deallocator,
- xmlListDataCompare compare);
-XMLPUBFUN void XMLCALL
- xmlListDelete (xmlListPtr l);
-
-/* Basic Operators */
-XMLPUBFUN void * XMLCALL
- xmlListSearch (xmlListPtr l,
- void *data);
-XMLPUBFUN void * XMLCALL
- xmlListReverseSearch (xmlListPtr l,
- void *data);
-XMLPUBFUN int XMLCALL
- xmlListInsert (xmlListPtr l,
- void *data) ;
-XMLPUBFUN int XMLCALL
- xmlListAppend (xmlListPtr l,
- void *data) ;
-XMLPUBFUN int XMLCALL
- xmlListRemoveFirst (xmlListPtr l,
- void *data);
-XMLPUBFUN int XMLCALL
- xmlListRemoveLast (xmlListPtr l,
- void *data);
-XMLPUBFUN int XMLCALL
- xmlListRemoveAll (xmlListPtr l,
- void *data);
-XMLPUBFUN void XMLCALL
- xmlListClear (xmlListPtr l);
-XMLPUBFUN int XMLCALL
- xmlListEmpty (xmlListPtr l);
-XMLPUBFUN xmlLinkPtr XMLCALL
- xmlListFront (xmlListPtr l);
-XMLPUBFUN xmlLinkPtr XMLCALL
- xmlListEnd (xmlListPtr l);
-XMLPUBFUN int XMLCALL
- xmlListSize (xmlListPtr l);
-
-XMLPUBFUN void XMLCALL
- xmlListPopFront (xmlListPtr l);
-XMLPUBFUN void XMLCALL
- xmlListPopBack (xmlListPtr l);
-XMLPUBFUN int XMLCALL
- xmlListPushFront (xmlListPtr l,
- void *data);
-XMLPUBFUN int XMLCALL
- xmlListPushBack (xmlListPtr l,
- void *data);
-
-/* Advanced Operators */
-XMLPUBFUN void XMLCALL
- xmlListReverse (xmlListPtr l);
-XMLPUBFUN void XMLCALL
- xmlListSort (xmlListPtr l);
-XMLPUBFUN void XMLCALL
- xmlListWalk (xmlListPtr l,
- xmlListWalker walker,
- const void *user);
-XMLPUBFUN void XMLCALL
- xmlListReverseWalk (xmlListPtr l,
- xmlListWalker walker,
- const void *user);
-XMLPUBFUN void XMLCALL
- xmlListMerge (xmlListPtr l1,
- xmlListPtr l2);
-XMLPUBFUN xmlListPtr XMLCALL
- xmlListDup (const xmlListPtr old);
-XMLPUBFUN int XMLCALL
- xmlListCopy (xmlListPtr cur,
- const xmlListPtr old);
-/* Link operators */
-XMLPUBFUN void * XMLCALL
- xmlLinkGetData (xmlLinkPtr lk);
-
-/* xmlListUnique() */
-/* xmlListSwap */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_LINK_INCLUDE__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/nanoftp.h b/external/libxml2_android/jni/libxml2/include/libxml/nanoftp.h
deleted file mode 100644
index abb4bf71..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/nanoftp.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Summary: minimal FTP implementation
- * Description: minimal FTP implementation allowing to fetch resources
- * like external subset.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __NANO_FTP_H__
-#define __NANO_FTP_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_FTP_ENABLED
-
-/* Needed for portability to Windows 64 bits */
-#if defined(__MINGW32__) || defined(_WIN32_WCE)
-#include <winsock2.h>
-#else
-/**
- * SOCKET:
- *
- * macro used to provide portability of code to windows sockets
- */
-#define SOCKET int
-/**
- * INVALID_SOCKET:
- *
- * macro used to provide portability of code to windows sockets
- * the value to be used when the socket is not valid
- */
-#undef INVALID_SOCKET
-#define INVALID_SOCKET (-1)
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * ftpListCallback:
- * @userData: user provided data for the callback
- * @filename: the file name (including "->" when links are shown)
- * @attrib: the attribute string
- * @owner: the owner string
- * @group: the group string
- * @size: the file size
- * @links: the link count
- * @year: the year
- * @month: the month
- * @day: the day
- * @hour: the hour
- * @minute: the minute
- *
- * A callback for the xmlNanoFTPList command.
- * Note that only one of year and day:minute are specified.
- */
-typedef void (*ftpListCallback) (void *userData,
- const char *filename, const char *attrib,
- const char *owner, const char *group,
- unsigned long size, int links, int year,
- const char *month, int day, int hour,
- int minute);
-/**
- * ftpDataCallback:
- * @userData: the user provided context
- * @data: the data received
- * @len: its size in bytes
- *
- * A callback for the xmlNanoFTPGet command.
- */
-typedef void (*ftpDataCallback) (void *userData,
- const char *data,
- int len);
-
-/*
- * Init
- */
-XMLPUBFUN void XMLCALL
- xmlNanoFTPInit (void);
-XMLPUBFUN void XMLCALL
- xmlNanoFTPCleanup (void);
-
-/*
- * Creating/freeing contexts.
- */
-XMLPUBFUN void * XMLCALL
- xmlNanoFTPNewCtxt (const char *URL);
-XMLPUBFUN void XMLCALL
- xmlNanoFTPFreeCtxt (void * ctx);
-XMLPUBFUN void * XMLCALL
- xmlNanoFTPConnectTo (const char *server,
- int port);
-/*
- * Opening/closing session connections.
- */
-XMLPUBFUN void * XMLCALL
- xmlNanoFTPOpen (const char *URL);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPConnect (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPClose (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPQuit (void *ctx);
-XMLPUBFUN void XMLCALL
- xmlNanoFTPScanProxy (const char *URL);
-XMLPUBFUN void XMLCALL
- xmlNanoFTPProxy (const char *host,
- int port,
- const char *user,
- const char *passwd,
- int type);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPUpdateURL (void *ctx,
- const char *URL);
-
-/*
- * Rather internal commands.
- */
-XMLPUBFUN int XMLCALL
- xmlNanoFTPGetResponse (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPCheckResponse (void *ctx);
-
-/*
- * CD/DIR/GET handlers.
- */
-XMLPUBFUN int XMLCALL
- xmlNanoFTPCwd (void *ctx,
- const char *directory);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPDele (void *ctx,
- const char *file);
-
-XMLPUBFUN SOCKET XMLCALL
- xmlNanoFTPGetConnection (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPCloseConnection(void *ctx);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPList (void *ctx,
- ftpListCallback callback,
- void *userData,
- const char *filename);
-XMLPUBFUN SOCKET XMLCALL
- xmlNanoFTPGetSocket (void *ctx,
- const char *filename);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPGet (void *ctx,
- ftpDataCallback callback,
- void *userData,
- const char *filename);
-XMLPUBFUN int XMLCALL
- xmlNanoFTPRead (void *ctx,
- void *dest,
- int len);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* LIBXML_FTP_ENABLED */
-#endif /* __NANO_FTP_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/nanohttp.h b/external/libxml2_android/jni/libxml2/include/libxml/nanohttp.h
deleted file mode 100644
index 22b8fb43..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/nanohttp.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Summary: minimal HTTP implementation
- * Description: minimal HTTP implementation allowing to fetch resources
- * like external subset.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __NANO_HTTP_H__
-#define __NANO_HTTP_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_HTTP_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-XMLPUBFUN void XMLCALL
- xmlNanoHTTPInit (void);
-XMLPUBFUN void XMLCALL
- xmlNanoHTTPCleanup (void);
-XMLPUBFUN void XMLCALL
- xmlNanoHTTPScanProxy (const char *URL);
-XMLPUBFUN int XMLCALL
- xmlNanoHTTPFetch (const char *URL,
- const char *filename,
- char **contentType);
-XMLPUBFUN void * XMLCALL
- xmlNanoHTTPMethod (const char *URL,
- const char *method,
- const char *input,
- char **contentType,
- const char *headers,
- int ilen);
-XMLPUBFUN void * XMLCALL
- xmlNanoHTTPMethodRedir (const char *URL,
- const char *method,
- const char *input,
- char **contentType,
- char **redir,
- const char *headers,
- int ilen);
-XMLPUBFUN void * XMLCALL
- xmlNanoHTTPOpen (const char *URL,
- char **contentType);
-XMLPUBFUN void * XMLCALL
- xmlNanoHTTPOpenRedir (const char *URL,
- char **contentType,
- char **redir);
-XMLPUBFUN int XMLCALL
- xmlNanoHTTPReturnCode (void *ctx);
-XMLPUBFUN const char * XMLCALL
- xmlNanoHTTPAuthHeader (void *ctx);
-XMLPUBFUN const char * XMLCALL
- xmlNanoHTTPRedir (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlNanoHTTPContentLength( void * ctx );
-XMLPUBFUN const char * XMLCALL
- xmlNanoHTTPEncoding (void *ctx);
-XMLPUBFUN const char * XMLCALL
- xmlNanoHTTPMimeType (void *ctx);
-XMLPUBFUN int XMLCALL
- xmlNanoHTTPRead (void *ctx,
- void *dest,
- int len);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN int XMLCALL
- xmlNanoHTTPSave (void *ctxt,
- const char *filename);
-#endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlNanoHTTPClose (void *ctx);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_HTTP_ENABLED */
-#endif /* __NANO_HTTP_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/parser.h b/external/libxml2_android/jni/libxml2/include/libxml/parser.h
deleted file mode 100644
index 63ca1b97..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/parser.h
+++ /dev/null
@@ -1,1242 +0,0 @@
-/*
- * Summary: the core parser module
- * Description: Interfaces, constants and types related to the XML parser
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_PARSER_H__
-#define __XML_PARSER_H__
-
-#include <stdarg.h>
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-#include <libxml/dict.h>
-#include <libxml/hash.h>
-#include <libxml/valid.h>
-#include <libxml/entities.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xmlstring.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * XML_DEFAULT_VERSION:
- *
- * The default version of XML used: 1.0
- */
-#define XML_DEFAULT_VERSION "1.0"
-
-/**
- * xmlParserInput:
- *
- * An xmlParserInput is an input flow for the XML processor.
- * Each entity parsed is associated an xmlParserInput (except the
- * few predefined ones). This is the case both for internal entities
- * - in which case the flow is already completely in memory - or
- * external entities - in which case we use the buf structure for
- * progressive reading and I18N conversions to the internal UTF-8 format.
- */
-
-/**
- * xmlParserInputDeallocate:
- * @str: the string to deallocate
- *
- * Callback for freeing some parser input allocations.
- */
-typedef void (* xmlParserInputDeallocate)(xmlChar *str);
-
-struct _xmlParserInput {
- /* Input buffer */
- xmlParserInputBufferPtr buf; /* UTF-8 encoded buffer */
-
- const char *filename; /* The file analyzed, if any */
- const char *directory; /* the directory/base of the file */
- const xmlChar *base; /* Base of the array to parse */
- const xmlChar *cur; /* Current char being parsed */
- const xmlChar *end; /* end of the array to parse */
- int length; /* length if known */
- int line; /* Current line */
- int col; /* Current column */
- /*
- * NOTE: consumed is only tested for equality in the parser code,
- * so even if there is an overflow this should not give troubles
- * for parsing very large instances.
- */
- unsigned long consumed; /* How many xmlChars already consumed */
- xmlParserInputDeallocate free; /* function to deallocate the base */
- const xmlChar *encoding; /* the encoding string for entity */
- const xmlChar *version; /* the version string for entity */
- int standalone; /* Was that entity marked standalone */
- int id; /* an unique identifier for the entity */
-};
-
-/**
- * xmlParserNodeInfo:
- *
- * The parser can be asked to collect Node informations, i.e. at what
- * place in the file they were detected.
- * NOTE: This is off by default and not very well tested.
- */
-typedef struct _xmlParserNodeInfo xmlParserNodeInfo;
-typedef xmlParserNodeInfo *xmlParserNodeInfoPtr;
-
-struct _xmlParserNodeInfo {
- const struct _xmlNode* node;
- /* Position & line # that text that created the node begins & ends on */
- unsigned long begin_pos;
- unsigned long begin_line;
- unsigned long end_pos;
- unsigned long end_line;
-};
-
-typedef struct _xmlParserNodeInfoSeq xmlParserNodeInfoSeq;
-typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr;
-struct _xmlParserNodeInfoSeq {
- unsigned long maximum;
- unsigned long length;
- xmlParserNodeInfo* buffer;
-};
-
-/**
- * xmlParserInputState:
- *
- * The parser is now working also as a state based parser.
- * The recursive one use the state info for entities processing.
- */
-typedef enum {
- XML_PARSER_EOF = -1, /* nothing is to be parsed */
- XML_PARSER_START = 0, /* nothing has been parsed */
- XML_PARSER_MISC, /* Misc* before int subset */
- XML_PARSER_PI, /* Within a processing instruction */
- XML_PARSER_DTD, /* within some DTD content */
- XML_PARSER_PROLOG, /* Misc* after internal subset */
- XML_PARSER_COMMENT, /* within a comment */
- XML_PARSER_START_TAG, /* within a start tag */
- XML_PARSER_CONTENT, /* within the content */
- XML_PARSER_CDATA_SECTION, /* within a CDATA section */
- XML_PARSER_END_TAG, /* within a closing tag */
- XML_PARSER_ENTITY_DECL, /* within an entity declaration */
- XML_PARSER_ENTITY_VALUE, /* within an entity value in a decl */
- XML_PARSER_ATTRIBUTE_VALUE, /* within an attribute value */
- XML_PARSER_SYSTEM_LITERAL, /* within a SYSTEM value */
- XML_PARSER_EPILOG, /* the Misc* after the last end tag */
- XML_PARSER_IGNORE, /* within an IGNORED section */
- XML_PARSER_PUBLIC_LITERAL /* within a PUBLIC value */
-} xmlParserInputState;
-
-/**
- * XML_DETECT_IDS:
- *
- * Bit in the loadsubset context field to tell to do ID/REFs lookups.
- * Use it to initialize xmlLoadExtDtdDefaultValue.
- */
-#define XML_DETECT_IDS 2
-
-/**
- * XML_COMPLETE_ATTRS:
- *
- * Bit in the loadsubset context field to tell to do complete the
- * elements attributes lists with the ones defaulted from the DTDs.
- * Use it to initialize xmlLoadExtDtdDefaultValue.
- */
-#define XML_COMPLETE_ATTRS 4
-
-/**
- * XML_SKIP_IDS:
- *
- * Bit in the loadsubset context field to tell to not do ID/REFs registration.
- * Used to initialize xmlLoadExtDtdDefaultValue in some special cases.
- */
-#define XML_SKIP_IDS 8
-
-/**
- * xmlParserMode:
- *
- * A parser can operate in various modes
- */
-typedef enum {
- XML_PARSE_UNKNOWN = 0,
- XML_PARSE_DOM = 1,
- XML_PARSE_SAX = 2,
- XML_PARSE_PUSH_DOM = 3,
- XML_PARSE_PUSH_SAX = 4,
- XML_PARSE_READER = 5
-} xmlParserMode;
-
-/**
- * xmlParserCtxt:
- *
- * The parser context.
- * NOTE This doesn't completely define the parser state, the (current ?)
- * design of the parser uses recursive function calls since this allow
- * and easy mapping from the production rules of the specification
- * to the actual code. The drawback is that the actual function call
- * also reflect the parser state. However most of the parsing routines
- * takes as the only argument the parser context pointer, so migrating
- * to a state based parser for progressive parsing shouldn't be too hard.
- */
-struct _xmlParserCtxt {
- struct _xmlSAXHandler *sax; /* The SAX handler */
- void *userData; /* For SAX interface only, used by DOM build */
- xmlDocPtr myDoc; /* the document being built */
- int wellFormed; /* is the document well formed */
- int replaceEntities; /* shall we replace entities ? */
- const xmlChar *version; /* the XML version string */
- const xmlChar *encoding; /* the declared encoding, if any */
- int standalone; /* standalone document */
- int html; /* an HTML(1)/Docbook(2) document
- * 3 is HTML after <head>
- * 10 is HTML after <body>
- */
-
- /* Input stream stack */
- xmlParserInputPtr input; /* Current input stream */
- int inputNr; /* Number of current input streams */
- int inputMax; /* Max number of input streams */
- xmlParserInputPtr *inputTab; /* stack of inputs */
-
- /* Node analysis stack only used for DOM building */
- xmlNodePtr node; /* Current parsed Node */
- int nodeNr; /* Depth of the parsing stack */
- int nodeMax; /* Max depth of the parsing stack */
- xmlNodePtr *nodeTab; /* array of nodes */
-
- int record_info; /* Whether node info should be kept */
- xmlParserNodeInfoSeq node_seq; /* info about each node parsed */
-
- int errNo; /* error code */
-
- int hasExternalSubset; /* reference and external subset */
- int hasPErefs; /* the internal subset has PE refs */
- int external; /* are we parsing an external entity */
-
- int valid; /* is the document valid */
- int validate; /* shall we try to validate ? */
- xmlValidCtxt vctxt; /* The validity context */
-
- xmlParserInputState instate; /* current type of input */
- int token; /* next char look-ahead */
-
- char *directory; /* the data directory */
-
- /* Node name stack */
- const xmlChar *name; /* Current parsed Node */
- int nameNr; /* Depth of the parsing stack */
- int nameMax; /* Max depth of the parsing stack */
- const xmlChar * *nameTab; /* array of nodes */
-
- long nbChars; /* number of xmlChar processed */
- long checkIndex; /* used by progressive parsing lookup */
- int keepBlanks; /* ugly but ... */
- int disableSAX; /* SAX callbacks are disabled */
- int inSubset; /* Parsing is in int 1/ext 2 subset */
- const xmlChar * intSubName; /* name of subset */
- xmlChar * extSubURI; /* URI of external subset */
- xmlChar * extSubSystem; /* SYSTEM ID of external subset */
-
- /* xml:space values */
- int * space; /* Should the parser preserve spaces */
- int spaceNr; /* Depth of the parsing stack */
- int spaceMax; /* Max depth of the parsing stack */
- int * spaceTab; /* array of space infos */
-
- int depth; /* to prevent entity substitution loops */
- xmlParserInputPtr entity; /* used to check entities boundaries */
- int charset; /* encoding of the in-memory content
- actually an xmlCharEncoding */
- int nodelen; /* Those two fields are there to */
- int nodemem; /* Speed up large node parsing */
- int pedantic; /* signal pedantic warnings */
- void *_private; /* For user data, libxml won't touch it */
-
- int loadsubset; /* should the external subset be loaded */
- int linenumbers; /* set line number in element content */
- void *catalogs; /* document's own catalog */
- int recovery; /* run in recovery mode */
- int progressive; /* is this a progressive parsing */
- xmlDictPtr dict; /* dictionary for the parser */
- const xmlChar * *atts; /* array for the attributes callbacks */
- int maxatts; /* the size of the array */
- int docdict; /* use strings from dict to build tree */
-
- /*
- * pre-interned strings
- */
- const xmlChar *str_xml;
- const xmlChar *str_xmlns;
- const xmlChar *str_xml_ns;
-
- /*
- * Everything below is used only by the new SAX mode
- */
- int sax2; /* operating in the new SAX mode */
- int nsNr; /* the number of inherited namespaces */
- int nsMax; /* the size of the arrays */
- const xmlChar * *nsTab; /* the array of prefix/namespace name */
- int *attallocs; /* which attribute were allocated */
- void * *pushTab; /* array of data for push */
- xmlHashTablePtr attsDefault; /* defaulted attributes if any */
- xmlHashTablePtr attsSpecial; /* non-CDATA attributes if any */
- int nsWellFormed; /* is the document XML Nanespace okay */
- int options; /* Extra options */
-
- /*
- * Those fields are needed only for treaming parsing so far
- */
- int dictNames; /* Use dictionary names for the tree */
- int freeElemsNr; /* number of freed element nodes */
- xmlNodePtr freeElems; /* List of freed element nodes */
- int freeAttrsNr; /* number of freed attributes nodes */
- xmlAttrPtr freeAttrs; /* List of freed attributes nodes */
-
- /*
- * the complete error informations for the last error.
- */
- xmlError lastError;
- xmlParserMode parseMode; /* the parser mode */
- unsigned long nbentities; /* number of entities references */
- unsigned long sizeentities; /* size of parsed entities */
-
- /* for use by HTML non-recursive parser */
- xmlParserNodeInfo *nodeInfo; /* Current NodeInfo */
- int nodeInfoNr; /* Depth of the parsing stack */
- int nodeInfoMax; /* Max depth of the parsing stack */
- xmlParserNodeInfo *nodeInfoTab; /* array of nodeInfos */
-
- int input_id; /* we need to label inputs */
- unsigned long sizeentcopy; /* volume of entity copy */
-};
-
-/**
- * xmlSAXLocator:
- *
- * A SAX Locator.
- */
-struct _xmlSAXLocator {
- const xmlChar *(*getPublicId)(void *ctx);
- const xmlChar *(*getSystemId)(void *ctx);
- int (*getLineNumber)(void *ctx);
- int (*getColumnNumber)(void *ctx);
-};
-
-/**
- * xmlSAXHandler:
- *
- * A SAX handler is bunch of callbacks called by the parser when processing
- * of the input generate data or structure informations.
- */
-
-/**
- * resolveEntitySAXFunc:
- * @ctx: the user data (XML parser context)
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * Callback:
- * The entity loader, to control the loading of external entities,
- * the application can either:
- * - override this resolveEntity() callback in the SAX block
- * - or better use the xmlSetExternalEntityLoader() function to
- * set up it's own entity resolution routine
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-typedef xmlParserInputPtr (*resolveEntitySAXFunc) (void *ctx,
- const xmlChar *publicId,
- const xmlChar *systemId);
-/**
- * internalSubsetSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: the root element name
- * @ExternalID: the external ID
- * @SystemID: the SYSTEM ID (e.g. filename or URL)
- *
- * Callback on internal subset declaration.
- */
-typedef void (*internalSubsetSAXFunc) (void *ctx,
- const xmlChar *name,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-/**
- * externalSubsetSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: the root element name
- * @ExternalID: the external ID
- * @SystemID: the SYSTEM ID (e.g. filename or URL)
- *
- * Callback on external subset declaration.
- */
-typedef void (*externalSubsetSAXFunc) (void *ctx,
- const xmlChar *name,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-/**
- * getEntitySAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Get an entity by name.
- *
- * Returns the xmlEntityPtr if found.
- */
-typedef xmlEntityPtr (*getEntitySAXFunc) (void *ctx,
- const xmlChar *name);
-/**
- * getParameterEntitySAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Get a parameter entity by name.
- *
- * Returns the xmlEntityPtr if found.
- */
-typedef xmlEntityPtr (*getParameterEntitySAXFunc) (void *ctx,
- const xmlChar *name);
-/**
- * entityDeclSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: the entity name
- * @type: the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed.
- */
-typedef void (*entityDeclSAXFunc) (void *ctx,
- const xmlChar *name,
- int type,
- const xmlChar *publicId,
- const xmlChar *systemId,
- xmlChar *content);
-/**
- * notationDeclSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- */
-typedef void (*notationDeclSAXFunc)(void *ctx,
- const xmlChar *name,
- const xmlChar *publicId,
- const xmlChar *systemId);
-/**
- * attributeDeclSAXFunc:
- * @ctx: the user data (XML parser context)
- * @elem: the name of the element
- * @fullname: the attribute name
- * @type: the attribute type
- * @def: the type of default value
- * @defaultValue: the attribute default value
- * @tree: the tree of enumerated value set
- *
- * An attribute definition has been parsed.
- */
-typedef void (*attributeDeclSAXFunc)(void *ctx,
- const xmlChar *elem,
- const xmlChar *fullname,
- int type,
- int def,
- const xmlChar *defaultValue,
- xmlEnumerationPtr tree);
-/**
- * elementDeclSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: the element name
- * @type: the element type
- * @content: the element value tree
- *
- * An element definition has been parsed.
- */
-typedef void (*elementDeclSAXFunc)(void *ctx,
- const xmlChar *name,
- int type,
- xmlElementContentPtr content);
-/**
- * unparsedEntityDeclSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed.
- */
-typedef void (*unparsedEntityDeclSAXFunc)(void *ctx,
- const xmlChar *name,
- const xmlChar *publicId,
- const xmlChar *systemId,
- const xmlChar *notationName);
-/**
- * setDocumentLocatorSAXFunc:
- * @ctx: the user data (XML parser context)
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator.
- * Everything is available on the context, so this is useless in our case.
- */
-typedef void (*setDocumentLocatorSAXFunc) (void *ctx,
- xmlSAXLocatorPtr loc);
-/**
- * startDocumentSAXFunc:
- * @ctx: the user data (XML parser context)
- *
- * Called when the document start being processed.
- */
-typedef void (*startDocumentSAXFunc) (void *ctx);
-/**
- * endDocumentSAXFunc:
- * @ctx: the user data (XML parser context)
- *
- * Called when the document end has been detected.
- */
-typedef void (*endDocumentSAXFunc) (void *ctx);
-/**
- * startElementSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: The element name, including namespace prefix
- * @atts: An array of name/value attributes pairs, NULL terminated
- *
- * Called when an opening tag has been processed.
- */
-typedef void (*startElementSAXFunc) (void *ctx,
- const xmlChar *name,
- const xmlChar **atts);
-/**
- * endElementSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: The element name
- *
- * Called when the end of an element has been detected.
- */
-typedef void (*endElementSAXFunc) (void *ctx,
- const xmlChar *name);
-/**
- * attributeSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: The attribute name, including namespace prefix
- * @value: The attribute value
- *
- * Handle an attribute that has been read by the parser.
- * The default handling is to convert the attribute into an
- * DOM subtree and past it in a new xmlAttr element added to
- * the element.
- */
-typedef void (*attributeSAXFunc) (void *ctx,
- const xmlChar *name,
- const xmlChar *value);
-/**
- * referenceSAXFunc:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Called when an entity reference is detected.
- */
-typedef void (*referenceSAXFunc) (void *ctx,
- const xmlChar *name);
-/**
- * charactersSAXFunc:
- * @ctx: the user data (XML parser context)
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * Receiving some chars from the parser.
- */
-typedef void (*charactersSAXFunc) (void *ctx,
- const xmlChar *ch,
- int len);
-/**
- * ignorableWhitespaceSAXFunc:
- * @ctx: the user data (XML parser context)
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * Receiving some ignorable whitespaces from the parser.
- * UNUSED: by default the DOM building will use characters.
- */
-typedef void (*ignorableWhitespaceSAXFunc) (void *ctx,
- const xmlChar *ch,
- int len);
-/**
- * processingInstructionSAXFunc:
- * @ctx: the user data (XML parser context)
- * @target: the target name
- * @data: the PI data's
- *
- * A processing instruction has been parsed.
- */
-typedef void (*processingInstructionSAXFunc) (void *ctx,
- const xmlChar *target,
- const xmlChar *data);
-/**
- * commentSAXFunc:
- * @ctx: the user data (XML parser context)
- * @value: the comment content
- *
- * A comment has been parsed.
- */
-typedef void (*commentSAXFunc) (void *ctx,
- const xmlChar *value);
-/**
- * cdataBlockSAXFunc:
- * @ctx: the user data (XML parser context)
- * @value: The pcdata content
- * @len: the block length
- *
- * Called when a pcdata block has been parsed.
- */
-typedef void (*cdataBlockSAXFunc) (
- void *ctx,
- const xmlChar *value,
- int len);
-/**
- * warningSAXFunc:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a warning messages, callback.
- */
-typedef void (XMLCDECL *warningSAXFunc) (void *ctx,
- const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-/**
- * errorSAXFunc:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format an error messages, callback.
- */
-typedef void (XMLCDECL *errorSAXFunc) (void *ctx,
- const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-/**
- * fatalErrorSAXFunc:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format fatal error messages, callback.
- * Note: so far fatalError() SAX callbacks are not used, error()
- * get all the callbacks for errors.
- */
-typedef void (XMLCDECL *fatalErrorSAXFunc) (void *ctx,
- const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-/**
- * isStandaloneSAXFunc:
- * @ctx: the user data (XML parser context)
- *
- * Is this document tagged standalone?
- *
- * Returns 1 if true
- */
-typedef int (*isStandaloneSAXFunc) (void *ctx);
-/**
- * hasInternalSubsetSAXFunc:
- * @ctx: the user data (XML parser context)
- *
- * Does this document has an internal subset.
- *
- * Returns 1 if true
- */
-typedef int (*hasInternalSubsetSAXFunc) (void *ctx);
-
-/**
- * hasExternalSubsetSAXFunc:
- * @ctx: the user data (XML parser context)
- *
- * Does this document has an external subset?
- *
- * Returns 1 if true
- */
-typedef int (*hasExternalSubsetSAXFunc) (void *ctx);
-
-/************************************************************************
- * *
- * The SAX version 2 API extensions *
- * *
- ************************************************************************/
-/**
- * XML_SAX2_MAGIC:
- *
- * Special constant found in SAX2 blocks initialized fields
- */
-#define XML_SAX2_MAGIC 0xDEEDBEAF
-
-/**
- * startElementNsSAX2Func:
- * @ctx: the user data (XML parser context)
- * @localname: the local name of the element
- * @prefix: the element namespace prefix if available
- * @URI: the element namespace name if available
- * @nb_namespaces: number of namespace definitions on that node
- * @namespaces: pointer to the array of prefix/URI pairs namespace definitions
- * @nb_attributes: the number of attributes on that node
- * @nb_defaulted: the number of defaulted attributes. The defaulted
- * ones are at the end of the array
- * @attributes: pointer to the array of (localname/prefix/URI/value/end)
- * attribute values.
- *
- * SAX2 callback when an element start has been detected by the parser.
- * It provides the namespace informations for the element, as well as
- * the new namespace declarations on the element.
- */
-
-typedef void (*startElementNsSAX2Func) (void *ctx,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI,
- int nb_namespaces,
- const xmlChar **namespaces,
- int nb_attributes,
- int nb_defaulted,
- const xmlChar **attributes);
-
-/**
- * endElementNsSAX2Func:
- * @ctx: the user data (XML parser context)
- * @localname: the local name of the element
- * @prefix: the element namespace prefix if available
- * @URI: the element namespace name if available
- *
- * SAX2 callback when an element end has been detected by the parser.
- * It provides the namespace informations for the element.
- */
-
-typedef void (*endElementNsSAX2Func) (void *ctx,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI);
-
-
-struct _xmlSAXHandler {
- internalSubsetSAXFunc internalSubset;
- isStandaloneSAXFunc isStandalone;
- hasInternalSubsetSAXFunc hasInternalSubset;
- hasExternalSubsetSAXFunc hasExternalSubset;
- resolveEntitySAXFunc resolveEntity;
- getEntitySAXFunc getEntity;
- entityDeclSAXFunc entityDecl;
- notationDeclSAXFunc notationDecl;
- attributeDeclSAXFunc attributeDecl;
- elementDeclSAXFunc elementDecl;
- unparsedEntityDeclSAXFunc unparsedEntityDecl;
- setDocumentLocatorSAXFunc setDocumentLocator;
- startDocumentSAXFunc startDocument;
- endDocumentSAXFunc endDocument;
- startElementSAXFunc startElement;
- endElementSAXFunc endElement;
- referenceSAXFunc reference;
- charactersSAXFunc characters;
- ignorableWhitespaceSAXFunc ignorableWhitespace;
- processingInstructionSAXFunc processingInstruction;
- commentSAXFunc comment;
- warningSAXFunc warning;
- errorSAXFunc error;
- fatalErrorSAXFunc fatalError; /* unused error() get all the errors */
- getParameterEntitySAXFunc getParameterEntity;
- cdataBlockSAXFunc cdataBlock;
- externalSubsetSAXFunc externalSubset;
- unsigned int initialized;
- /* The following fields are extensions available only on version 2 */
- void *_private;
- startElementNsSAX2Func startElementNs;
- endElementNsSAX2Func endElementNs;
- xmlStructuredErrorFunc serror;
-};
-
-/*
- * SAX Version 1
- */
-typedef struct _xmlSAXHandlerV1 xmlSAXHandlerV1;
-typedef xmlSAXHandlerV1 *xmlSAXHandlerV1Ptr;
-struct _xmlSAXHandlerV1 {
- internalSubsetSAXFunc internalSubset;
- isStandaloneSAXFunc isStandalone;
- hasInternalSubsetSAXFunc hasInternalSubset;
- hasExternalSubsetSAXFunc hasExternalSubset;
- resolveEntitySAXFunc resolveEntity;
- getEntitySAXFunc getEntity;
- entityDeclSAXFunc entityDecl;
- notationDeclSAXFunc notationDecl;
- attributeDeclSAXFunc attributeDecl;
- elementDeclSAXFunc elementDecl;
- unparsedEntityDeclSAXFunc unparsedEntityDecl;
- setDocumentLocatorSAXFunc setDocumentLocator;
- startDocumentSAXFunc startDocument;
- endDocumentSAXFunc endDocument;
- startElementSAXFunc startElement;
- endElementSAXFunc endElement;
- referenceSAXFunc reference;
- charactersSAXFunc characters;
- ignorableWhitespaceSAXFunc ignorableWhitespace;
- processingInstructionSAXFunc processingInstruction;
- commentSAXFunc comment;
- warningSAXFunc warning;
- errorSAXFunc error;
- fatalErrorSAXFunc fatalError; /* unused error() get all the errors */
- getParameterEntitySAXFunc getParameterEntity;
- cdataBlockSAXFunc cdataBlock;
- externalSubsetSAXFunc externalSubset;
- unsigned int initialized;
-};
-
-
-/**
- * xmlExternalEntityLoader:
- * @URL: The System ID of the resource requested
- * @ID: The Public ID of the resource requested
- * @context: the XML parser context
- *
- * External entity loaders types.
- *
- * Returns the entity input parser.
- */
-typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL,
- const char *ID,
- xmlParserCtxtPtr context);
-
-#ifdef __cplusplus
-}
-#endif
-
-#include <libxml/encoding.h>
-#include <libxml/xmlIO.h>
-#include <libxml/globals.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*
- * Init/Cleanup
- */
-XMLPUBFUN void XMLCALL
- xmlInitParser (void);
-XMLPUBFUN void XMLCALL
- xmlCleanupParser (void);
-
-/*
- * Input functions
- */
-XMLPUBFUN int XMLCALL
- xmlParserInputRead (xmlParserInputPtr in,
- int len);
-XMLPUBFUN int XMLCALL
- xmlParserInputGrow (xmlParserInputPtr in,
- int len);
-
-/*
- * Basic parsing Interfaces
- */
-#ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlParseDoc (const xmlChar *cur);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlParseFile (const char *filename);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlParseMemory (const char *buffer,
- int size);
-#endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN int XMLCALL
- xmlSubstituteEntitiesDefault(int val);
-XMLPUBFUN int XMLCALL
- xmlKeepBlanksDefault (int val);
-XMLPUBFUN void XMLCALL
- xmlStopParser (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlPedanticParserDefault(int val);
-XMLPUBFUN int XMLCALL
- xmlLineNumbersDefault (int val);
-
-#ifdef LIBXML_SAX1_ENABLED
-/*
- * Recovery mode
- */
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlRecoverDoc (const xmlChar *cur);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlRecoverMemory (const char *buffer,
- int size);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlRecoverFile (const char *filename);
-#endif /* LIBXML_SAX1_ENABLED */
-
-/*
- * Less common routines and SAX interfaces
- */
-XMLPUBFUN int XMLCALL
- xmlParseDocument (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlParseExtParsedEnt (xmlParserCtxtPtr ctxt);
-#ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN int XMLCALL
- xmlSAXUserParseFile (xmlSAXHandlerPtr sax,
- void *user_data,
- const char *filename);
-XMLPUBFUN int XMLCALL
- xmlSAXUserParseMemory (xmlSAXHandlerPtr sax,
- void *user_data,
- const char *buffer,
- int size);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlSAXParseDoc (xmlSAXHandlerPtr sax,
- const xmlChar *cur,
- int recovery);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlSAXParseMemory (xmlSAXHandlerPtr sax,
- const char *buffer,
- int size,
- int recovery);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax,
- const char *buffer,
- int size,
- int recovery,
- void *data);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlSAXParseFile (xmlSAXHandlerPtr sax,
- const char *filename,
- int recovery);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlSAXParseFileWithData (xmlSAXHandlerPtr sax,
- const char *filename,
- int recovery,
- void *data);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlSAXParseEntity (xmlSAXHandlerPtr sax,
- const char *filename);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlParseEntity (const char *filename);
-#endif /* LIBXML_SAX1_ENABLED */
-
-#ifdef LIBXML_VALID_ENABLED
-XMLPUBFUN xmlDtdPtr XMLCALL
- xmlSAXParseDTD (xmlSAXHandlerPtr sax,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-XMLPUBFUN xmlDtdPtr XMLCALL
- xmlParseDTD (const xmlChar *ExternalID,
- const xmlChar *SystemID);
-XMLPUBFUN xmlDtdPtr XMLCALL
- xmlIOParseDTD (xmlSAXHandlerPtr sax,
- xmlParserInputBufferPtr input,
- xmlCharEncoding enc);
-#endif /* LIBXML_VALID_ENABLE */
-#ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN int XMLCALL
- xmlParseBalancedChunkMemory(xmlDocPtr doc,
- xmlSAXHandlerPtr sax,
- void *user_data,
- int depth,
- const xmlChar *string,
- xmlNodePtr *lst);
-#endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN xmlParserErrors XMLCALL
- xmlParseInNodeContext (xmlNodePtr node,
- const char *data,
- int datalen,
- int options,
- xmlNodePtr *lst);
-#ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN int XMLCALL
- xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc,
- xmlSAXHandlerPtr sax,
- void *user_data,
- int depth,
- const xmlChar *string,
- xmlNodePtr *lst,
- int recover);
-XMLPUBFUN int XMLCALL
- xmlParseExternalEntity (xmlDocPtr doc,
- xmlSAXHandlerPtr sax,
- void *user_data,
- int depth,
- const xmlChar *URL,
- const xmlChar *ID,
- xmlNodePtr *lst);
-#endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN int XMLCALL
- xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx,
- const xmlChar *URL,
- const xmlChar *ID,
- xmlNodePtr *lst);
-
-/*
- * Parser contexts handling.
- */
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlNewParserCtxt (void);
-XMLPUBFUN int XMLCALL
- xmlInitParserCtxt (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlClearParserCtxt (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlFreeParserCtxt (xmlParserCtxtPtr ctxt);
-#ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN void XMLCALL
- xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt,
- const xmlChar* buffer,
- const char *filename);
-#endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlCreateDocParserCtxt (const xmlChar *cur);
-
-#ifdef LIBXML_LEGACY_ENABLED
-/*
- * Reading/setting optional parsing features.
- */
-XMLPUBFUN int XMLCALL
- xmlGetFeaturesList (int *len,
- const char **result);
-XMLPUBFUN int XMLCALL
- xmlGetFeature (xmlParserCtxtPtr ctxt,
- const char *name,
- void *result);
-XMLPUBFUN int XMLCALL
- xmlSetFeature (xmlParserCtxtPtr ctxt,
- const char *name,
- void *value);
-#endif /* LIBXML_LEGACY_ENABLED */
-
-#ifdef LIBXML_PUSH_ENABLED
-/*
- * Interfaces for the Push mode.
- */
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax,
- void *user_data,
- const char *chunk,
- int size,
- const char *filename);
-XMLPUBFUN int XMLCALL
- xmlParseChunk (xmlParserCtxtPtr ctxt,
- const char *chunk,
- int size,
- int terminate);
-#endif /* LIBXML_PUSH_ENABLED */
-
-/*
- * Special I/O mode.
- */
-
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlCreateIOParserCtxt (xmlSAXHandlerPtr sax,
- void *user_data,
- xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose,
- void *ioctx,
- xmlCharEncoding enc);
-
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlNewIOInputStream (xmlParserCtxtPtr ctxt,
- xmlParserInputBufferPtr input,
- xmlCharEncoding enc);
-
-/*
- * Node infos.
- */
-XMLPUBFUN const xmlParserNodeInfo* XMLCALL
- xmlParserFindNodeInfo (const xmlParserCtxtPtr ctxt,
- const xmlNodePtr node);
-XMLPUBFUN void XMLCALL
- xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq);
-XMLPUBFUN void XMLCALL
- xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq);
-XMLPUBFUN unsigned long XMLCALL
- xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq,
- const xmlNodePtr node);
-XMLPUBFUN void XMLCALL
- xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt,
- const xmlParserNodeInfoPtr info);
-
-/*
- * External entities handling actually implemented in xmlIO.
- */
-
-XMLPUBFUN void XMLCALL
- xmlSetExternalEntityLoader(xmlExternalEntityLoader f);
-XMLPUBFUN xmlExternalEntityLoader XMLCALL
- xmlGetExternalEntityLoader(void);
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlLoadExternalEntity (const char *URL,
- const char *ID,
- xmlParserCtxtPtr ctxt);
-
-/*
- * Index lookup, actually implemented in the encoding module
- */
-XMLPUBFUN long XMLCALL
- xmlByteConsumed (xmlParserCtxtPtr ctxt);
-
-/*
- * New set of simpler/more flexible APIs
- */
-/**
- * xmlParserOption:
- *
- * This is the set of XML parser options that can be passed down
- * to the xmlReadDoc() and similar calls.
- */
-typedef enum {
- XML_PARSE_RECOVER = 1<<0, /* recover on errors */
- XML_PARSE_NOENT = 1<<1, /* substitute entities */
- XML_PARSE_DTDLOAD = 1<<2, /* load the external subset */
- XML_PARSE_DTDATTR = 1<<3, /* default DTD attributes */
- XML_PARSE_DTDVALID = 1<<4, /* validate with the DTD */
- XML_PARSE_NOERROR = 1<<5, /* suppress error reports */
- XML_PARSE_NOWARNING = 1<<6, /* suppress warning reports */
- XML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */
- XML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */
- XML_PARSE_SAX1 = 1<<9, /* use the SAX1 interface internally */
- XML_PARSE_XINCLUDE = 1<<10,/* Implement XInclude substitition */
- XML_PARSE_NONET = 1<<11,/* Forbid network access */
- XML_PARSE_NODICT = 1<<12,/* Do not reuse the context dictionary */
- XML_PARSE_NSCLEAN = 1<<13,/* remove redundant namespaces declarations */
- XML_PARSE_NOCDATA = 1<<14,/* merge CDATA as text nodes */
- XML_PARSE_NOXINCNODE= 1<<15,/* do not generate XINCLUDE START/END nodes */
- XML_PARSE_COMPACT = 1<<16,/* compact small text nodes; no modification of
- the tree allowed afterwards (will possibly
- crash if you try to modify the tree) */
- XML_PARSE_OLD10 = 1<<17,/* parse using XML-1.0 before update 5 */
- XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */
- XML_PARSE_HUGE = 1<<19,/* relax any hardcoded limit from the parser */
- XML_PARSE_OLDSAX = 1<<20,/* parse using SAX2 interface before 2.7.0 */
- XML_PARSE_IGNORE_ENC= 1<<21,/* ignore internal document encoding hint */
- XML_PARSE_BIG_LINES = 1<<22,/* Store big lines numbers in text PSVI field */
- XML_PARSE_NOXXE = 1<<23 /* Forbid any external entity loading */
-} xmlParserOption;
-
-XMLPUBFUN void XMLCALL
- xmlCtxtReset (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlCtxtResetPush (xmlParserCtxtPtr ctxt,
- const char *chunk,
- int size,
- const char *filename,
- const char *encoding);
-XMLPUBFUN int XMLCALL
- xmlCtxtUseOptions (xmlParserCtxtPtr ctxt,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlReadDoc (const xmlChar *cur,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlReadFile (const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlReadMemory (const char *buffer,
- int size,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlReadFd (int fd,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlReadIO (xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose,
- void *ioctx,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlCtxtReadDoc (xmlParserCtxtPtr ctxt,
- const xmlChar *cur,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlCtxtReadFile (xmlParserCtxtPtr ctxt,
- const char *filename,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlCtxtReadMemory (xmlParserCtxtPtr ctxt,
- const char *buffer,
- int size,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlCtxtReadFd (xmlParserCtxtPtr ctxt,
- int fd,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlCtxtReadIO (xmlParserCtxtPtr ctxt,
- xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose,
- void *ioctx,
- const char *URL,
- const char *encoding,
- int options);
-
-/*
- * Library wide options
- */
-/**
- * xmlFeature:
- *
- * Used to examine the existance of features that can be enabled
- * or disabled at compile-time.
- * They used to be called XML_FEATURE_xxx but this clashed with Expat
- */
-typedef enum {
- XML_WITH_THREAD = 1,
- XML_WITH_TREE = 2,
- XML_WITH_OUTPUT = 3,
- XML_WITH_PUSH = 4,
- XML_WITH_READER = 5,
- XML_WITH_PATTERN = 6,
- XML_WITH_WRITER = 7,
- XML_WITH_SAX1 = 8,
- XML_WITH_FTP = 9,
- XML_WITH_HTTP = 10,
- XML_WITH_VALID = 11,
- XML_WITH_HTML = 12,
- XML_WITH_LEGACY = 13,
- XML_WITH_C14N = 14,
- XML_WITH_CATALOG = 15,
- XML_WITH_XPATH = 16,
- XML_WITH_XPTR = 17,
- XML_WITH_XINCLUDE = 18,
- XML_WITH_ICONV = 19,
- XML_WITH_ISO8859X = 20,
- XML_WITH_UNICODE = 21,
- XML_WITH_REGEXP = 22,
- XML_WITH_AUTOMATA = 23,
- XML_WITH_EXPR = 24,
- XML_WITH_SCHEMAS = 25,
- XML_WITH_SCHEMATRON = 26,
- XML_WITH_MODULES = 27,
- XML_WITH_DEBUG = 28,
- XML_WITH_DEBUG_MEM = 29,
- XML_WITH_DEBUG_RUN = 30,
- XML_WITH_ZLIB = 31,
- XML_WITH_ICU = 32,
- XML_WITH_LZMA = 33,
- XML_WITH_NONE = 99999 /* just to be sure of allocation size */
-} xmlFeature;
-
-XMLPUBFUN int XMLCALL
- xmlHasFeature (xmlFeature feature);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_PARSER_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/parserInternals.h b/external/libxml2_android/jni/libxml2/include/libxml/parserInternals.h
deleted file mode 100644
index f30fc687..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/parserInternals.h
+++ /dev/null
@@ -1,644 +0,0 @@
-/*
- * Summary: internals routines and limits exported by the parser.
- * Description: this module exports a number of internal parsing routines
- * they are not really all intended for applications but
- * can prove useful doing low level processing.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_PARSER_INTERNALS_H__
-#define __XML_PARSER_INTERNALS_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/parser.h>
-#include <libxml/HTMLparser.h>
-#include <libxml/chvalid.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlParserMaxDepth:
- *
- * arbitrary depth limit for the XML documents that we allow to
- * process. This is not a limitation of the parser but a safety
- * boundary feature, use XML_PARSE_HUGE option to override it.
- */
-XMLPUBVAR unsigned int xmlParserMaxDepth;
-
-/**
- * XML_MAX_TEXT_LENGTH:
- *
- * Maximum size allowed for a single text node when building a tree.
- * This is not a limitation of the parser but a safety boundary feature,
- * use XML_PARSE_HUGE option to override it.
- * Introduced in 2.9.0
- */
-#define XML_MAX_TEXT_LENGTH 10000000
-
-/**
- * XML_MAX_NAME_LENGTH:
- *
- * Maximum size allowed for a markup identitier
- * This is not a limitation of the parser but a safety boundary feature,
- * use XML_PARSE_HUGE option to override it.
- * Note that with the use of parsing dictionaries overriding the limit
- * may result in more runtime memory usage in face of "unfriendly' content
- * Introduced in 2.9.0
- */
-#define XML_MAX_NAME_LENGTH 50000
-
-/**
- * XML_MAX_DICTIONARY_LIMIT:
- *
- * Maximum size allowed by the parser for a dictionary by default
- * This is not a limitation of the parser but a safety boundary feature,
- * use XML_PARSE_HUGE option to override it.
- * Introduced in 2.9.0
- */
-#define XML_MAX_DICTIONARY_LIMIT 10000000
-
-/**
- * XML_MAX_LOOKUP_LIMIT:
- *
- * Maximum size allowed by the parser for ahead lookup
- * This is an upper boundary enforced by the parser to avoid bad
- * behaviour on "unfriendly' content
- * Introduced in 2.9.0
- */
-#define XML_MAX_LOOKUP_LIMIT 10000000
-
-/**
- * XML_MAX_NAMELEN:
- *
- * Identifiers can be longer, but this will be more costly
- * at runtime.
- */
-#define XML_MAX_NAMELEN 100
-
-/**
- * INPUT_CHUNK:
- *
- * The parser tries to always have that amount of input ready.
- * One of the point is providing context when reporting errors.
- */
-#define INPUT_CHUNK 250
-
-/************************************************************************
- * *
- * UNICODE version of the macros. *
- * *
- ************************************************************************/
-/**
- * IS_BYTE_CHAR:
- * @c: an byte value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- * [2] Char ::= #x9 | #xA | #xD | [#x20...]
- * any byte character in the accepted range
- */
-#define IS_BYTE_CHAR(c) xmlIsChar_ch(c)
-
-/**
- * IS_CHAR:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
- * | [#x10000-#x10FFFF]
- * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
- */
-#define IS_CHAR(c) xmlIsCharQ(c)
-
-/**
- * IS_CHAR_CH:
- * @c: an xmlChar (usually an unsigned char)
- *
- * Behaves like IS_CHAR on single-byte value
- */
-#define IS_CHAR_CH(c) xmlIsChar_ch(c)
-
-/**
- * IS_BLANK:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- * [3] S ::= (#x20 | #x9 | #xD | #xA)+
- */
-#define IS_BLANK(c) xmlIsBlankQ(c)
-
-/**
- * IS_BLANK_CH:
- * @c: an xmlChar value (normally unsigned char)
- *
- * Behaviour same as IS_BLANK
- */
-#define IS_BLANK_CH(c) xmlIsBlank_ch(c)
-
-/**
- * IS_BASECHAR:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- * [85] BaseChar ::= ... long list see REC ...
- */
-#define IS_BASECHAR(c) xmlIsBaseCharQ(c)
-
-/**
- * IS_DIGIT:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- * [88] Digit ::= ... long list see REC ...
- */
-#define IS_DIGIT(c) xmlIsDigitQ(c)
-
-/**
- * IS_DIGIT_CH:
- * @c: an xmlChar value (usually an unsigned char)
- *
- * Behaves like IS_DIGIT but with a single byte argument
- */
-#define IS_DIGIT_CH(c) xmlIsDigit_ch(c)
-
-/**
- * IS_COMBINING:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- * [87] CombiningChar ::= ... long list see REC ...
- */
-#define IS_COMBINING(c) xmlIsCombiningQ(c)
-
-/**
- * IS_COMBINING_CH:
- * @c: an xmlChar (usually an unsigned char)
- *
- * Always false (all combining chars > 0xff)
- */
-#define IS_COMBINING_CH(c) 0
-
-/**
- * IS_EXTENDER:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- *
- * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 |
- * #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] |
- * [#x309D-#x309E] | [#x30FC-#x30FE]
- */
-#define IS_EXTENDER(c) xmlIsExtenderQ(c)
-
-/**
- * IS_EXTENDER_CH:
- * @c: an xmlChar value (usually an unsigned char)
- *
- * Behaves like IS_EXTENDER but with a single-byte argument
- */
-#define IS_EXTENDER_CH(c) xmlIsExtender_ch(c)
-
-/**
- * IS_IDEOGRAPHIC:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- *
- * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
- */
-#define IS_IDEOGRAPHIC(c) xmlIsIdeographicQ(c)
-
-/**
- * IS_LETTER:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- *
- * [84] Letter ::= BaseChar | Ideographic
- */
-#define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c))
-
-/**
- * IS_LETTER_CH:
- * @c: an xmlChar value (normally unsigned char)
- *
- * Macro behaves like IS_LETTER, but only check base chars
- *
- */
-#define IS_LETTER_CH(c) xmlIsBaseChar_ch(c)
-
-/**
- * IS_ASCII_LETTER:
- * @c: an xmlChar value
- *
- * Macro to check [a-zA-Z]
- *
- */
-#define IS_ASCII_LETTER(c) (((0x41 <= (c)) && ((c) <= 0x5a)) || \
- ((0x61 <= (c)) && ((c) <= 0x7a)))
-
-/**
- * IS_ASCII_DIGIT:
- * @c: an xmlChar value
- *
- * Macro to check [0-9]
- *
- */
-#define IS_ASCII_DIGIT(c) ((0x30 <= (c)) && ((c) <= 0x39))
-
-/**
- * IS_PUBIDCHAR:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- *
- * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
- */
-#define IS_PUBIDCHAR(c) xmlIsPubidCharQ(c)
-
-/**
- * IS_PUBIDCHAR_CH:
- * @c: an xmlChar value (normally unsigned char)
- *
- * Same as IS_PUBIDCHAR but for single-byte value
- */
-#define IS_PUBIDCHAR_CH(c) xmlIsPubidChar_ch(c)
-
-/**
- * SKIP_EOL:
- * @p: and UTF8 string pointer
- *
- * Skips the end of line chars.
- */
-#define SKIP_EOL(p) \
- if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; } \
- if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; }
-
-/**
- * MOVETO_ENDTAG:
- * @p: and UTF8 string pointer
- *
- * Skips to the next '>' char.
- */
-#define MOVETO_ENDTAG(p) \
- while ((*p) && (*(p) != '>')) (p)++
-
-/**
- * MOVETO_STARTTAG:
- * @p: and UTF8 string pointer
- *
- * Skips to the next '<' char.
- */
-#define MOVETO_STARTTAG(p) \
- while ((*p) && (*(p) != '<')) (p)++
-
-/**
- * Global variables used for predefined strings.
- */
-XMLPUBVAR const xmlChar xmlStringText[];
-XMLPUBVAR const xmlChar xmlStringTextNoenc[];
-XMLPUBVAR const xmlChar xmlStringComment[];
-
-/*
- * Function to finish the work of the macros where needed.
- */
-XMLPUBFUN int XMLCALL xmlIsLetter (int c);
-
-/**
- * Parser context.
- */
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlCreateFileParserCtxt (const char *filename);
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlCreateURLParserCtxt (const char *filename,
- int options);
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlCreateMemoryParserCtxt(const char *buffer,
- int size);
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlCreateEntityParserCtxt(const xmlChar *URL,
- const xmlChar *ID,
- const xmlChar *base);
-XMLPUBFUN int XMLCALL
- xmlSwitchEncoding (xmlParserCtxtPtr ctxt,
- xmlCharEncoding enc);
-XMLPUBFUN int XMLCALL
- xmlSwitchToEncoding (xmlParserCtxtPtr ctxt,
- xmlCharEncodingHandlerPtr handler);
-XMLPUBFUN int XMLCALL
- xmlSwitchInputEncoding (xmlParserCtxtPtr ctxt,
- xmlParserInputPtr input,
- xmlCharEncodingHandlerPtr handler);
-
-#ifdef IN_LIBXML
-/* internal error reporting */
-XMLPUBFUN void XMLCALL
- __xmlErrEncoding (xmlParserCtxtPtr ctxt,
- xmlParserErrors xmlerr,
- const char *msg,
- const xmlChar * str1,
- const xmlChar * str2) LIBXML_ATTR_FORMAT(3,0);
-#endif
-
-/**
- * Input Streams.
- */
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlNewStringInputStream (xmlParserCtxtPtr ctxt,
- const xmlChar *buffer);
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlNewEntityInputStream (xmlParserCtxtPtr ctxt,
- xmlEntityPtr entity);
-XMLPUBFUN int XMLCALL
- xmlPushInput (xmlParserCtxtPtr ctxt,
- xmlParserInputPtr input);
-XMLPUBFUN xmlChar XMLCALL
- xmlPopInput (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlFreeInputStream (xmlParserInputPtr input);
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlNewInputFromFile (xmlParserCtxtPtr ctxt,
- const char *filename);
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlNewInputStream (xmlParserCtxtPtr ctxt);
-
-/**
- * Namespaces.
- */
-XMLPUBFUN xmlChar * XMLCALL
- xmlSplitQName (xmlParserCtxtPtr ctxt,
- const xmlChar *name,
- xmlChar **prefix);
-
-/**
- * Generic production rules.
- */
-XMLPUBFUN const xmlChar * XMLCALL
- xmlParseName (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseNmtoken (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseEntityValue (xmlParserCtxtPtr ctxt,
- xmlChar **orig);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseAttValue (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseSystemLiteral (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParsePubidLiteral (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseCharData (xmlParserCtxtPtr ctxt,
- int cdata);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseExternalID (xmlParserCtxtPtr ctxt,
- xmlChar **publicID,
- int strict);
-XMLPUBFUN void XMLCALL
- xmlParseComment (xmlParserCtxtPtr ctxt);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlParsePITarget (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParsePI (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseNotationDecl (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseEntityDecl (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlParseDefaultDecl (xmlParserCtxtPtr ctxt,
- xmlChar **value);
-XMLPUBFUN xmlEnumerationPtr XMLCALL
- xmlParseNotationType (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlEnumerationPtr XMLCALL
- xmlParseEnumerationType (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlParseEnumeratedType (xmlParserCtxtPtr ctxt,
- xmlEnumerationPtr *tree);
-XMLPUBFUN int XMLCALL
- xmlParseAttributeType (xmlParserCtxtPtr ctxt,
- xmlEnumerationPtr *tree);
-XMLPUBFUN void XMLCALL
- xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlElementContentPtr XMLCALL
- xmlParseElementMixedContentDecl
- (xmlParserCtxtPtr ctxt,
- int inputchk);
-XMLPUBFUN xmlElementContentPtr XMLCALL
- xmlParseElementChildrenContentDecl
- (xmlParserCtxtPtr ctxt,
- int inputchk);
-XMLPUBFUN int XMLCALL
- xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
- const xmlChar *name,
- xmlElementContentPtr *result);
-XMLPUBFUN int XMLCALL
- xmlParseElementDecl (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseMarkupDecl (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlParseCharRef (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlEntityPtr XMLCALL
- xmlParseEntityRef (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseReference (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParsePEReference (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt);
-#ifdef LIBXML_SAX1_ENABLED
-XMLPUBFUN const xmlChar * XMLCALL
- xmlParseAttribute (xmlParserCtxtPtr ctxt,
- xmlChar **value);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlParseStartTag (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseEndTag (xmlParserCtxtPtr ctxt);
-#endif /* LIBXML_SAX1_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlParseCDSect (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseContent (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseElement (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseVersionNum (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseVersionInfo (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseEncName (xmlParserCtxtPtr ctxt);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlParseEncodingDecl (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlParseSDDecl (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseXMLDecl (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseTextDecl (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseMisc (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseExternalSubset (xmlParserCtxtPtr ctxt,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-/**
- * XML_SUBSTITUTE_NONE:
- *
- * If no entities need to be substituted.
- */
-#define XML_SUBSTITUTE_NONE 0
-/**
- * XML_SUBSTITUTE_REF:
- *
- * Whether general entities need to be substituted.
- */
-#define XML_SUBSTITUTE_REF 1
-/**
- * XML_SUBSTITUTE_PEREF:
- *
- * Whether parameter entities need to be substituted.
- */
-#define XML_SUBSTITUTE_PEREF 2
-/**
- * XML_SUBSTITUTE_BOTH:
- *
- * Both general and parameter entities need to be substituted.
- */
-#define XML_SUBSTITUTE_BOTH 3
-
-XMLPUBFUN xmlChar * XMLCALL
- xmlStringDecodeEntities (xmlParserCtxtPtr ctxt,
- const xmlChar *str,
- int what,
- xmlChar end,
- xmlChar end2,
- xmlChar end3);
-XMLPUBFUN xmlChar * XMLCALL
- xmlStringLenDecodeEntities (xmlParserCtxtPtr ctxt,
- const xmlChar *str,
- int len,
- int what,
- xmlChar end,
- xmlChar end2,
- xmlChar end3);
-
-/*
- * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP.
- */
-XMLPUBFUN int XMLCALL nodePush (xmlParserCtxtPtr ctxt,
- xmlNodePtr value);
-XMLPUBFUN xmlNodePtr XMLCALL nodePop (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL inputPush (xmlParserCtxtPtr ctxt,
- xmlParserInputPtr value);
-XMLPUBFUN xmlParserInputPtr XMLCALL inputPop (xmlParserCtxtPtr ctxt);
-XMLPUBFUN const xmlChar * XMLCALL namePop (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL namePush (xmlParserCtxtPtr ctxt,
- const xmlChar *value);
-
-/*
- * other commodities shared between parser.c and parserInternals.
- */
-XMLPUBFUN int XMLCALL xmlSkipBlankChars (xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL xmlStringCurrentChar (xmlParserCtxtPtr ctxt,
- const xmlChar *cur,
- int *len);
-XMLPUBFUN void XMLCALL xmlParserHandlePEReference(xmlParserCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL xmlCheckLanguageID (const xmlChar *lang);
-
-/*
- * Really core function shared with HTML parser.
- */
-XMLPUBFUN int XMLCALL xmlCurrentChar (xmlParserCtxtPtr ctxt,
- int *len);
-XMLPUBFUN int XMLCALL xmlCopyCharMultiByte (xmlChar *out,
- int val);
-XMLPUBFUN int XMLCALL xmlCopyChar (int len,
- xmlChar *out,
- int val);
-XMLPUBFUN void XMLCALL xmlNextChar (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL xmlParserInputShrink (xmlParserInputPtr in);
-
-#ifdef LIBXML_HTML_ENABLED
-/*
- * Actually comes from the HTML parser but launched from the init stuff.
- */
-XMLPUBFUN void XMLCALL htmlInitAutoClose (void);
-XMLPUBFUN htmlParserCtxtPtr XMLCALL htmlCreateFileParserCtxt(const char *filename,
- const char *encoding);
-#endif
-
-/*
- * Specific function to keep track of entities references
- * and used by the XSLT debugger.
- */
-#ifdef LIBXML_LEGACY_ENABLED
-/**
- * xmlEntityReferenceFunc:
- * @ent: the entity
- * @firstNode: the fist node in the chunk
- * @lastNode: the last nod in the chunk
- *
- * Callback function used when one needs to be able to track back the
- * provenance of a chunk of nodes inherited from an entity replacement.
- */
-typedef void (*xmlEntityReferenceFunc) (xmlEntityPtr ent,
- xmlNodePtr firstNode,
- xmlNodePtr lastNode);
-
-XMLPUBFUN void XMLCALL xmlSetEntityReferenceFunc (xmlEntityReferenceFunc func);
-
-XMLPUBFUN xmlChar * XMLCALL
- xmlParseQuotedString (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlParseNamespace (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlScanName (xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL xmlParserHandleReference(xmlParserCtxtPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlNamespaceParseQName (xmlParserCtxtPtr ctxt,
- xmlChar **prefix);
-/**
- * Entities
- */
-XMLPUBFUN xmlChar * XMLCALL
- xmlDecodeEntities (xmlParserCtxtPtr ctxt,
- int len,
- int what,
- xmlChar end,
- xmlChar end2,
- xmlChar end3);
-XMLPUBFUN void XMLCALL
- xmlHandleEntity (xmlParserCtxtPtr ctxt,
- xmlEntityPtr entity);
-
-#endif /* LIBXML_LEGACY_ENABLED */
-
-#ifdef IN_LIBXML
-/*
- * internal only
- */
-XMLPUBFUN void XMLCALL
- xmlErrMemory (xmlParserCtxtPtr ctxt,
- const char *extra);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_PARSER_INTERNALS_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/pattern.h b/external/libxml2_android/jni/libxml2/include/libxml/pattern.h
deleted file mode 100644
index 97d2cd2b..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/pattern.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Summary: pattern expression handling
- * Description: allows to compile and test pattern expressions for nodes
- * either in a tree or based on a parser state.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_PATTERN_H__
-#define __XML_PATTERN_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-#include <libxml/dict.h>
-
-#ifdef LIBXML_PATTERN_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlPattern:
- *
- * A compiled (XPath based) pattern to select nodes
- */
-typedef struct _xmlPattern xmlPattern;
-typedef xmlPattern *xmlPatternPtr;
-
-/**
- * xmlPatternFlags:
- *
- * This is the set of options affecting the behaviour of pattern
- * matching with this module
- *
- */
-typedef enum {
- XML_PATTERN_DEFAULT = 0, /* simple pattern match */
- XML_PATTERN_XPATH = 1<<0, /* standard XPath pattern */
- XML_PATTERN_XSSEL = 1<<1, /* XPath subset for schema selector */
- XML_PATTERN_XSFIELD = 1<<2 /* XPath subset for schema field */
-} xmlPatternFlags;
-
-XMLPUBFUN void XMLCALL
- xmlFreePattern (xmlPatternPtr comp);
-
-XMLPUBFUN void XMLCALL
- xmlFreePatternList (xmlPatternPtr comp);
-
-XMLPUBFUN xmlPatternPtr XMLCALL
- xmlPatterncompile (const xmlChar *pattern,
- xmlDict *dict,
- int flags,
- const xmlChar **namespaces);
-XMLPUBFUN int XMLCALL
- xmlPatternMatch (xmlPatternPtr comp,
- xmlNodePtr node);
-
-/* streaming interfaces */
-typedef struct _xmlStreamCtxt xmlStreamCtxt;
-typedef xmlStreamCtxt *xmlStreamCtxtPtr;
-
-XMLPUBFUN int XMLCALL
- xmlPatternStreamable (xmlPatternPtr comp);
-XMLPUBFUN int XMLCALL
- xmlPatternMaxDepth (xmlPatternPtr comp);
-XMLPUBFUN int XMLCALL
- xmlPatternMinDepth (xmlPatternPtr comp);
-XMLPUBFUN int XMLCALL
- xmlPatternFromRoot (xmlPatternPtr comp);
-XMLPUBFUN xmlStreamCtxtPtr XMLCALL
- xmlPatternGetStreamCtxt (xmlPatternPtr comp);
-XMLPUBFUN void XMLCALL
- xmlFreeStreamCtxt (xmlStreamCtxtPtr stream);
-XMLPUBFUN int XMLCALL
- xmlStreamPushNode (xmlStreamCtxtPtr stream,
- const xmlChar *name,
- const xmlChar *ns,
- int nodeType);
-XMLPUBFUN int XMLCALL
- xmlStreamPush (xmlStreamCtxtPtr stream,
- const xmlChar *name,
- const xmlChar *ns);
-XMLPUBFUN int XMLCALL
- xmlStreamPushAttr (xmlStreamCtxtPtr stream,
- const xmlChar *name,
- const xmlChar *ns);
-XMLPUBFUN int XMLCALL
- xmlStreamPop (xmlStreamCtxtPtr stream);
-XMLPUBFUN int XMLCALL
- xmlStreamWantsAnyNode (xmlStreamCtxtPtr stream);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_PATTERN_ENABLED */
-
-#endif /* __XML_PATTERN_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/relaxng.h b/external/libxml2_android/jni/libxml2/include/libxml/relaxng.h
deleted file mode 100644
index f269c9ec..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/relaxng.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Summary: implementation of the Relax-NG validation
- * Description: implementation of the Relax-NG validation
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_RELAX_NG__
-#define __XML_RELAX_NG__
-
-#include <libxml/xmlversion.h>
-#include <libxml/hash.h>
-#include <libxml/xmlstring.h>
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct _xmlRelaxNG xmlRelaxNG;
-typedef xmlRelaxNG *xmlRelaxNGPtr;
-
-
-/**
- * xmlRelaxNGValidityErrorFunc:
- * @ctx: the validation context
- * @msg: the message
- * @...: extra arguments
- *
- * Signature of an error callback from a Relax-NG validation
- */
-typedef void (XMLCDECL *xmlRelaxNGValidityErrorFunc) (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-
-/**
- * xmlRelaxNGValidityWarningFunc:
- * @ctx: the validation context
- * @msg: the message
- * @...: extra arguments
- *
- * Signature of a warning callback from a Relax-NG validation
- */
-typedef void (XMLCDECL *xmlRelaxNGValidityWarningFunc) (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-
-/**
- * A schemas validation context
- */
-typedef struct _xmlRelaxNGParserCtxt xmlRelaxNGParserCtxt;
-typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
-
-typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
-typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
-
-/*
- * xmlRelaxNGValidErr:
- *
- * List of possible Relax NG validation errors
- */
-typedef enum {
- XML_RELAXNG_OK = 0,
- XML_RELAXNG_ERR_MEMORY,
- XML_RELAXNG_ERR_TYPE,
- XML_RELAXNG_ERR_TYPEVAL,
- XML_RELAXNG_ERR_DUPID,
- XML_RELAXNG_ERR_TYPECMP,
- XML_RELAXNG_ERR_NOSTATE,
- XML_RELAXNG_ERR_NODEFINE,
- XML_RELAXNG_ERR_LISTEXTRA,
- XML_RELAXNG_ERR_LISTEMPTY,
- XML_RELAXNG_ERR_INTERNODATA,
- XML_RELAXNG_ERR_INTERSEQ,
- XML_RELAXNG_ERR_INTEREXTRA,
- XML_RELAXNG_ERR_ELEMNAME,
- XML_RELAXNG_ERR_ATTRNAME,
- XML_RELAXNG_ERR_ELEMNONS,
- XML_RELAXNG_ERR_ATTRNONS,
- XML_RELAXNG_ERR_ELEMWRONGNS,
- XML_RELAXNG_ERR_ATTRWRONGNS,
- XML_RELAXNG_ERR_ELEMEXTRANS,
- XML_RELAXNG_ERR_ATTREXTRANS,
- XML_RELAXNG_ERR_ELEMNOTEMPTY,
- XML_RELAXNG_ERR_NOELEM,
- XML_RELAXNG_ERR_NOTELEM,
- XML_RELAXNG_ERR_ATTRVALID,
- XML_RELAXNG_ERR_CONTENTVALID,
- XML_RELAXNG_ERR_EXTRACONTENT,
- XML_RELAXNG_ERR_INVALIDATTR,
- XML_RELAXNG_ERR_DATAELEM,
- XML_RELAXNG_ERR_VALELEM,
- XML_RELAXNG_ERR_LISTELEM,
- XML_RELAXNG_ERR_DATATYPE,
- XML_RELAXNG_ERR_VALUE,
- XML_RELAXNG_ERR_LIST,
- XML_RELAXNG_ERR_NOGRAMMAR,
- XML_RELAXNG_ERR_EXTRADATA,
- XML_RELAXNG_ERR_LACKDATA,
- XML_RELAXNG_ERR_INTERNAL,
- XML_RELAXNG_ERR_ELEMWRONG,
- XML_RELAXNG_ERR_TEXTWRONG
-} xmlRelaxNGValidErr;
-
-/*
- * xmlRelaxNGParserFlags:
- *
- * List of possible Relax NG Parser flags
- */
-typedef enum {
- XML_RELAXNGP_NONE = 0,
- XML_RELAXNGP_FREE_DOC = 1,
- XML_RELAXNGP_CRNG = 2
-} xmlRelaxNGParserFlag;
-
-XMLPUBFUN int XMLCALL
- xmlRelaxNGInitTypes (void);
-XMLPUBFUN void XMLCALL
- xmlRelaxNGCleanupTypes (void);
-
-/*
- * Interfaces for parsing.
- */
-XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
- xmlRelaxNGNewParserCtxt (const char *URL);
-XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
- xmlRelaxNGNewMemParserCtxt (const char *buffer,
- int size);
-XMLPUBFUN xmlRelaxNGParserCtxtPtr XMLCALL
- xmlRelaxNGNewDocParserCtxt (xmlDocPtr doc);
-
-XMLPUBFUN int XMLCALL
- xmlRelaxParserSetFlag (xmlRelaxNGParserCtxtPtr ctxt,
- int flag);
-
-XMLPUBFUN void XMLCALL
- xmlRelaxNGFreeParserCtxt (xmlRelaxNGParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGValidityErrorFunc err,
- xmlRelaxNGValidityWarningFunc warn,
- void *ctx);
-XMLPUBFUN int XMLCALL
- xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGValidityErrorFunc *err,
- xmlRelaxNGValidityWarningFunc *warn,
- void **ctx);
-XMLPUBFUN void XMLCALL
- xmlRelaxNGSetParserStructuredErrors(
- xmlRelaxNGParserCtxtPtr ctxt,
- xmlStructuredErrorFunc serror,
- void *ctx);
-XMLPUBFUN xmlRelaxNGPtr XMLCALL
- xmlRelaxNGParse (xmlRelaxNGParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlRelaxNGFree (xmlRelaxNGPtr schema);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlRelaxNGDump (FILE *output,
- xmlRelaxNGPtr schema);
-XMLPUBFUN void XMLCALL
- xmlRelaxNGDumpTree (FILE * output,
- xmlRelaxNGPtr schema);
-#endif /* LIBXML_OUTPUT_ENABLED */
-/*
- * Interfaces for validating
- */
-XMLPUBFUN void XMLCALL
- xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidityErrorFunc err,
- xmlRelaxNGValidityWarningFunc warn,
- void *ctx);
-XMLPUBFUN int XMLCALL
- xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidityErrorFunc *err,
- xmlRelaxNGValidityWarningFunc *warn,
- void **ctx);
-XMLPUBFUN void XMLCALL
- xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
- xmlStructuredErrorFunc serror, void *ctx);
-XMLPUBFUN xmlRelaxNGValidCtxtPtr XMLCALL
- xmlRelaxNGNewValidCtxt (xmlRelaxNGPtr schema);
-XMLPUBFUN void XMLCALL
- xmlRelaxNGFreeValidCtxt (xmlRelaxNGValidCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlRelaxNGValidateDoc (xmlRelaxNGValidCtxtPtr ctxt,
- xmlDocPtr doc);
-/*
- * Interfaces for progressive validation when possible
- */
-XMLPUBFUN int XMLCALL
- xmlRelaxNGValidatePushElement (xmlRelaxNGValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem);
-XMLPUBFUN int XMLCALL
- xmlRelaxNGValidatePushCData (xmlRelaxNGValidCtxtPtr ctxt,
- const xmlChar *data,
- int len);
-XMLPUBFUN int XMLCALL
- xmlRelaxNGValidatePopElement (xmlRelaxNGValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem);
-XMLPUBFUN int XMLCALL
- xmlRelaxNGValidateFullElement (xmlRelaxNGValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_SCHEMAS_ENABLED */
-
-#endif /* __XML_RELAX_NG__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/schemasInternals.h b/external/libxml2_android/jni/libxml2/include/libxml/schemasInternals.h
deleted file mode 100644
index c7cf5525..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/schemasInternals.h
+++ /dev/null
@@ -1,958 +0,0 @@
-/*
- * Summary: internal interfaces for XML Schemas
- * Description: internal interfaces for the XML Schemas handling
- * and schema validity checking
- * The Schemas development is a Work In Progress.
- * Some of those interfaces are not garanteed to be API or ABI stable !
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-
-#ifndef __XML_SCHEMA_INTERNALS_H__
-#define __XML_SCHEMA_INTERNALS_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <libxml/xmlregexp.h>
-#include <libxml/hash.h>
-#include <libxml/dict.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
- XML_SCHEMAS_UNKNOWN = 0,
- XML_SCHEMAS_STRING = 1,
- XML_SCHEMAS_NORMSTRING = 2,
- XML_SCHEMAS_DECIMAL = 3,
- XML_SCHEMAS_TIME = 4,
- XML_SCHEMAS_GDAY = 5,
- XML_SCHEMAS_GMONTH = 6,
- XML_SCHEMAS_GMONTHDAY = 7,
- XML_SCHEMAS_GYEAR = 8,
- XML_SCHEMAS_GYEARMONTH = 9,
- XML_SCHEMAS_DATE = 10,
- XML_SCHEMAS_DATETIME = 11,
- XML_SCHEMAS_DURATION = 12,
- XML_SCHEMAS_FLOAT = 13,
- XML_SCHEMAS_DOUBLE = 14,
- XML_SCHEMAS_BOOLEAN = 15,
- XML_SCHEMAS_TOKEN = 16,
- XML_SCHEMAS_LANGUAGE = 17,
- XML_SCHEMAS_NMTOKEN = 18,
- XML_SCHEMAS_NMTOKENS = 19,
- XML_SCHEMAS_NAME = 20,
- XML_SCHEMAS_QNAME = 21,
- XML_SCHEMAS_NCNAME = 22,
- XML_SCHEMAS_ID = 23,
- XML_SCHEMAS_IDREF = 24,
- XML_SCHEMAS_IDREFS = 25,
- XML_SCHEMAS_ENTITY = 26,
- XML_SCHEMAS_ENTITIES = 27,
- XML_SCHEMAS_NOTATION = 28,
- XML_SCHEMAS_ANYURI = 29,
- XML_SCHEMAS_INTEGER = 30,
- XML_SCHEMAS_NPINTEGER = 31,
- XML_SCHEMAS_NINTEGER = 32,
- XML_SCHEMAS_NNINTEGER = 33,
- XML_SCHEMAS_PINTEGER = 34,
- XML_SCHEMAS_INT = 35,
- XML_SCHEMAS_UINT = 36,
- XML_SCHEMAS_LONG = 37,
- XML_SCHEMAS_ULONG = 38,
- XML_SCHEMAS_SHORT = 39,
- XML_SCHEMAS_USHORT = 40,
- XML_SCHEMAS_BYTE = 41,
- XML_SCHEMAS_UBYTE = 42,
- XML_SCHEMAS_HEXBINARY = 43,
- XML_SCHEMAS_BASE64BINARY = 44,
- XML_SCHEMAS_ANYTYPE = 45,
- XML_SCHEMAS_ANYSIMPLETYPE = 46
-} xmlSchemaValType;
-
-/*
- * XML Schemas defines multiple type of types.
- */
-typedef enum {
- XML_SCHEMA_TYPE_BASIC = 1, /* A built-in datatype */
- XML_SCHEMA_TYPE_ANY,
- XML_SCHEMA_TYPE_FACET,
- XML_SCHEMA_TYPE_SIMPLE,
- XML_SCHEMA_TYPE_COMPLEX,
- XML_SCHEMA_TYPE_SEQUENCE = 6,
- XML_SCHEMA_TYPE_CHOICE,
- XML_SCHEMA_TYPE_ALL,
- XML_SCHEMA_TYPE_SIMPLE_CONTENT,
- XML_SCHEMA_TYPE_COMPLEX_CONTENT,
- XML_SCHEMA_TYPE_UR,
- XML_SCHEMA_TYPE_RESTRICTION,
- XML_SCHEMA_TYPE_EXTENSION,
- XML_SCHEMA_TYPE_ELEMENT,
- XML_SCHEMA_TYPE_ATTRIBUTE,
- XML_SCHEMA_TYPE_ATTRIBUTEGROUP,
- XML_SCHEMA_TYPE_GROUP,
- XML_SCHEMA_TYPE_NOTATION,
- XML_SCHEMA_TYPE_LIST,
- XML_SCHEMA_TYPE_UNION,
- XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
- XML_SCHEMA_TYPE_IDC_UNIQUE,
- XML_SCHEMA_TYPE_IDC_KEY,
- XML_SCHEMA_TYPE_IDC_KEYREF,
- XML_SCHEMA_TYPE_PARTICLE = 25,
- XML_SCHEMA_TYPE_ATTRIBUTE_USE,
- XML_SCHEMA_FACET_MININCLUSIVE = 1000,
- XML_SCHEMA_FACET_MINEXCLUSIVE,
- XML_SCHEMA_FACET_MAXINCLUSIVE,
- XML_SCHEMA_FACET_MAXEXCLUSIVE,
- XML_SCHEMA_FACET_TOTALDIGITS,
- XML_SCHEMA_FACET_FRACTIONDIGITS,
- XML_SCHEMA_FACET_PATTERN,
- XML_SCHEMA_FACET_ENUMERATION,
- XML_SCHEMA_FACET_WHITESPACE,
- XML_SCHEMA_FACET_LENGTH,
- XML_SCHEMA_FACET_MAXLENGTH,
- XML_SCHEMA_FACET_MINLENGTH,
- XML_SCHEMA_EXTRA_QNAMEREF = 2000,
- XML_SCHEMA_EXTRA_ATTR_USE_PROHIB
-} xmlSchemaTypeType;
-
-typedef enum {
- XML_SCHEMA_CONTENT_UNKNOWN = 0,
- XML_SCHEMA_CONTENT_EMPTY = 1,
- XML_SCHEMA_CONTENT_ELEMENTS,
- XML_SCHEMA_CONTENT_MIXED,
- XML_SCHEMA_CONTENT_SIMPLE,
- XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS, /* Obsolete */
- XML_SCHEMA_CONTENT_BASIC,
- XML_SCHEMA_CONTENT_ANY
-} xmlSchemaContentType;
-
-typedef struct _xmlSchemaVal xmlSchemaVal;
-typedef xmlSchemaVal *xmlSchemaValPtr;
-
-typedef struct _xmlSchemaType xmlSchemaType;
-typedef xmlSchemaType *xmlSchemaTypePtr;
-
-typedef struct _xmlSchemaFacet xmlSchemaFacet;
-typedef xmlSchemaFacet *xmlSchemaFacetPtr;
-
-/**
- * Annotation
- */
-typedef struct _xmlSchemaAnnot xmlSchemaAnnot;
-typedef xmlSchemaAnnot *xmlSchemaAnnotPtr;
-struct _xmlSchemaAnnot {
- struct _xmlSchemaAnnot *next;
- xmlNodePtr content; /* the annotation */
-};
-
-/**
- * XML_SCHEMAS_ANYATTR_SKIP:
- *
- * Skip unknown attribute from validation
- * Obsolete, not used anymore.
- */
-#define XML_SCHEMAS_ANYATTR_SKIP 1
-/**
- * XML_SCHEMAS_ANYATTR_LAX:
- *
- * Ignore validation non definition on attributes
- * Obsolete, not used anymore.
- */
-#define XML_SCHEMAS_ANYATTR_LAX 2
-/**
- * XML_SCHEMAS_ANYATTR_STRICT:
- *
- * Apply strict validation rules on attributes
- * Obsolete, not used anymore.
- */
-#define XML_SCHEMAS_ANYATTR_STRICT 3
-/**
- * XML_SCHEMAS_ANY_SKIP:
- *
- * Skip unknown attribute from validation
- */
-#define XML_SCHEMAS_ANY_SKIP 1
-/**
- * XML_SCHEMAS_ANY_LAX:
- *
- * Used by wildcards.
- * Validate if type found, don't worry if not found
- */
-#define XML_SCHEMAS_ANY_LAX 2
-/**
- * XML_SCHEMAS_ANY_STRICT:
- *
- * Used by wildcards.
- * Apply strict validation rules
- */
-#define XML_SCHEMAS_ANY_STRICT 3
-/**
- * XML_SCHEMAS_ATTR_USE_PROHIBITED:
- *
- * Used by wildcards.
- * The attribute is prohibited.
- */
-#define XML_SCHEMAS_ATTR_USE_PROHIBITED 0
-/**
- * XML_SCHEMAS_ATTR_USE_REQUIRED:
- *
- * The attribute is required.
- */
-#define XML_SCHEMAS_ATTR_USE_REQUIRED 1
-/**
- * XML_SCHEMAS_ATTR_USE_OPTIONAL:
- *
- * The attribute is optional.
- */
-#define XML_SCHEMAS_ATTR_USE_OPTIONAL 2
-/**
- * XML_SCHEMAS_ATTR_GLOBAL:
- *
- * allow elements in no namespace
- */
-#define XML_SCHEMAS_ATTR_GLOBAL 1 << 0
-/**
- * XML_SCHEMAS_ATTR_NSDEFAULT:
- *
- * allow elements in no namespace
- */
-#define XML_SCHEMAS_ATTR_NSDEFAULT 1 << 7
-/**
- * XML_SCHEMAS_ATTR_INTERNAL_RESOLVED:
- *
- * this is set when the "type" and "ref" references
- * have been resolved.
- */
-#define XML_SCHEMAS_ATTR_INTERNAL_RESOLVED 1 << 8
-/**
- * XML_SCHEMAS_ATTR_FIXED:
- *
- * the attribute has a fixed value
- */
-#define XML_SCHEMAS_ATTR_FIXED 1 << 9
-
-/**
- * xmlSchemaAttribute:
- * An attribute definition.
- */
-
-typedef struct _xmlSchemaAttribute xmlSchemaAttribute;
-typedef xmlSchemaAttribute *xmlSchemaAttributePtr;
-struct _xmlSchemaAttribute {
- xmlSchemaTypeType type;
- struct _xmlSchemaAttribute *next; /* the next attribute (not used?) */
- const xmlChar *name; /* the name of the declaration */
- const xmlChar *id; /* Deprecated; not used */
- const xmlChar *ref; /* Deprecated; not used */
- const xmlChar *refNs; /* Deprecated; not used */
- const xmlChar *typeName; /* the local name of the type definition */
- const xmlChar *typeNs; /* the ns URI of the type definition */
- xmlSchemaAnnotPtr annot;
-
- xmlSchemaTypePtr base; /* Deprecated; not used */
- int occurs; /* Deprecated; not used */
- const xmlChar *defValue; /* The initial value of the value constraint */
- xmlSchemaTypePtr subtypes; /* the type definition */
- xmlNodePtr node;
- const xmlChar *targetNamespace;
- int flags;
- const xmlChar *refPrefix; /* Deprecated; not used */
- xmlSchemaValPtr defVal; /* The compiled value constraint */
- xmlSchemaAttributePtr refDecl; /* Deprecated; not used */
-};
-
-/**
- * xmlSchemaAttributeLink:
- * Used to build a list of attribute uses on complexType definitions.
- * WARNING: Deprecated; not used.
- */
-typedef struct _xmlSchemaAttributeLink xmlSchemaAttributeLink;
-typedef xmlSchemaAttributeLink *xmlSchemaAttributeLinkPtr;
-struct _xmlSchemaAttributeLink {
- struct _xmlSchemaAttributeLink *next;/* the next attribute link ... */
- struct _xmlSchemaAttribute *attr;/* the linked attribute */
-};
-
-/**
- * XML_SCHEMAS_WILDCARD_COMPLETE:
- *
- * If the wildcard is complete.
- */
-#define XML_SCHEMAS_WILDCARD_COMPLETE 1 << 0
-
-/**
- * xmlSchemaCharValueLink:
- * Used to build a list of namespaces on wildcards.
- */
-typedef struct _xmlSchemaWildcardNs xmlSchemaWildcardNs;
-typedef xmlSchemaWildcardNs *xmlSchemaWildcardNsPtr;
-struct _xmlSchemaWildcardNs {
- struct _xmlSchemaWildcardNs *next;/* the next constraint link ... */
- const xmlChar *value;/* the value */
-};
-
-/**
- * xmlSchemaWildcard.
- * A wildcard.
- */
-typedef struct _xmlSchemaWildcard xmlSchemaWildcard;
-typedef xmlSchemaWildcard *xmlSchemaWildcardPtr;
-struct _xmlSchemaWildcard {
- xmlSchemaTypeType type; /* The kind of type */
- const xmlChar *id; /* Deprecated; not used */
- xmlSchemaAnnotPtr annot;
- xmlNodePtr node;
- int minOccurs; /* Deprecated; not used */
- int maxOccurs; /* Deprecated; not used */
- int processContents;
- int any; /* Indicates if the ns constraint is of ##any */
- xmlSchemaWildcardNsPtr nsSet; /* The list of allowed namespaces */
- xmlSchemaWildcardNsPtr negNsSet; /* The negated namespace */
- int flags;
-};
-
-/**
- * XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED:
- *
- * The attribute wildcard has been already builded.
- */
-#define XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED 1 << 0
-/**
- * XML_SCHEMAS_ATTRGROUP_GLOBAL:
- *
- * The attribute wildcard has been already builded.
- */
-#define XML_SCHEMAS_ATTRGROUP_GLOBAL 1 << 1
-/**
- * XML_SCHEMAS_ATTRGROUP_MARKED:
- *
- * Marks the attr group as marked; used for circular checks.
- */
-#define XML_SCHEMAS_ATTRGROUP_MARKED 1 << 2
-
-/**
- * XML_SCHEMAS_ATTRGROUP_REDEFINED:
- *
- * The attr group was redefined.
- */
-#define XML_SCHEMAS_ATTRGROUP_REDEFINED 1 << 3
-/**
- * XML_SCHEMAS_ATTRGROUP_HAS_REFS:
- *
- * Whether this attr. group contains attr. group references.
- */
-#define XML_SCHEMAS_ATTRGROUP_HAS_REFS 1 << 4
-
-/**
- * An attribute group definition.
- *
- * xmlSchemaAttribute and xmlSchemaAttributeGroup start of structures
- * must be kept similar
- */
-typedef struct _xmlSchemaAttributeGroup xmlSchemaAttributeGroup;
-typedef xmlSchemaAttributeGroup *xmlSchemaAttributeGroupPtr;
-struct _xmlSchemaAttributeGroup {
- xmlSchemaTypeType type; /* The kind of type */
- struct _xmlSchemaAttribute *next;/* the next attribute if in a group ... */
- const xmlChar *name;
- const xmlChar *id;
- const xmlChar *ref; /* Deprecated; not used */
- const xmlChar *refNs; /* Deprecated; not used */
- xmlSchemaAnnotPtr annot;
-
- xmlSchemaAttributePtr attributes; /* Deprecated; not used */
- xmlNodePtr node;
- int flags;
- xmlSchemaWildcardPtr attributeWildcard;
- const xmlChar *refPrefix; /* Deprecated; not used */
- xmlSchemaAttributeGroupPtr refItem; /* Deprecated; not used */
- const xmlChar *targetNamespace;
- void *attrUses;
-};
-
-/**
- * xmlSchemaTypeLink:
- * Used to build a list of types (e.g. member types of
- * simpleType with variety "union").
- */
-typedef struct _xmlSchemaTypeLink xmlSchemaTypeLink;
-typedef xmlSchemaTypeLink *xmlSchemaTypeLinkPtr;
-struct _xmlSchemaTypeLink {
- struct _xmlSchemaTypeLink *next;/* the next type link ... */
- xmlSchemaTypePtr type;/* the linked type */
-};
-
-/**
- * xmlSchemaFacetLink:
- * Used to build a list of facets.
- */
-typedef struct _xmlSchemaFacetLink xmlSchemaFacetLink;
-typedef xmlSchemaFacetLink *xmlSchemaFacetLinkPtr;
-struct _xmlSchemaFacetLink {
- struct _xmlSchemaFacetLink *next;/* the next facet link ... */
- xmlSchemaFacetPtr facet;/* the linked facet */
-};
-
-/**
- * XML_SCHEMAS_TYPE_MIXED:
- *
- * the element content type is mixed
- */
-#define XML_SCHEMAS_TYPE_MIXED 1 << 0
-/**
- * XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION:
- *
- * the simple or complex type has a derivation method of "extension".
- */
-#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION 1 << 1
-/**
- * XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION:
- *
- * the simple or complex type has a derivation method of "restriction".
- */
-#define XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION 1 << 2
-/**
- * XML_SCHEMAS_TYPE_GLOBAL:
- *
- * the type is global
- */
-#define XML_SCHEMAS_TYPE_GLOBAL 1 << 3
-/**
- * XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD:
- *
- * the complexType owns an attribute wildcard, i.e.
- * it can be freed by the complexType
- */
-#define XML_SCHEMAS_TYPE_OWNED_ATTR_WILDCARD 1 << 4 /* Obsolete. */
-/**
- * XML_SCHEMAS_TYPE_VARIETY_ABSENT:
- *
- * the simpleType has a variety of "absent".
- * TODO: Actually not necessary :-/, since if
- * none of the variety flags occur then it's
- * automatically absent.
- */
-#define XML_SCHEMAS_TYPE_VARIETY_ABSENT 1 << 5
-/**
- * XML_SCHEMAS_TYPE_VARIETY_LIST:
- *
- * the simpleType has a variety of "list".
- */
-#define XML_SCHEMAS_TYPE_VARIETY_LIST 1 << 6
-/**
- * XML_SCHEMAS_TYPE_VARIETY_UNION:
- *
- * the simpleType has a variety of "union".
- */
-#define XML_SCHEMAS_TYPE_VARIETY_UNION 1 << 7
-/**
- * XML_SCHEMAS_TYPE_VARIETY_ATOMIC:
- *
- * the simpleType has a variety of "union".
- */
-#define XML_SCHEMAS_TYPE_VARIETY_ATOMIC 1 << 8
-/**
- * XML_SCHEMAS_TYPE_FINAL_EXTENSION:
- *
- * the complexType has a final of "extension".
- */
-#define XML_SCHEMAS_TYPE_FINAL_EXTENSION 1 << 9
-/**
- * XML_SCHEMAS_TYPE_FINAL_RESTRICTION:
- *
- * the simpleType/complexType has a final of "restriction".
- */
-#define XML_SCHEMAS_TYPE_FINAL_RESTRICTION 1 << 10
-/**
- * XML_SCHEMAS_TYPE_FINAL_LIST:
- *
- * the simpleType has a final of "list".
- */
-#define XML_SCHEMAS_TYPE_FINAL_LIST 1 << 11
-/**
- * XML_SCHEMAS_TYPE_FINAL_UNION:
- *
- * the simpleType has a final of "union".
- */
-#define XML_SCHEMAS_TYPE_FINAL_UNION 1 << 12
-/**
- * XML_SCHEMAS_TYPE_FINAL_DEFAULT:
- *
- * the simpleType has a final of "default".
- */
-#define XML_SCHEMAS_TYPE_FINAL_DEFAULT 1 << 13
-/**
- * XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE:
- *
- * Marks the item as a builtin primitive.
- */
-#define XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE 1 << 14
-/**
- * XML_SCHEMAS_TYPE_MARKED:
- *
- * Marks the item as marked; used for circular checks.
- */
-#define XML_SCHEMAS_TYPE_MARKED 1 << 16
-/**
- * XML_SCHEMAS_TYPE_BLOCK_DEFAULT:
- *
- * the complexType did not specify 'block' so use the default of the
- * <schema> item.
- */
-#define XML_SCHEMAS_TYPE_BLOCK_DEFAULT 1 << 17
-/**
- * XML_SCHEMAS_TYPE_BLOCK_EXTENSION:
- *
- * the complexType has a 'block' of "extension".
- */
-#define XML_SCHEMAS_TYPE_BLOCK_EXTENSION 1 << 18
-/**
- * XML_SCHEMAS_TYPE_BLOCK_RESTRICTION:
- *
- * the complexType has a 'block' of "restriction".
- */
-#define XML_SCHEMAS_TYPE_BLOCK_RESTRICTION 1 << 19
-/**
- * XML_SCHEMAS_TYPE_ABSTRACT:
- *
- * the simple/complexType is abstract.
- */
-#define XML_SCHEMAS_TYPE_ABSTRACT 1 << 20
-/**
- * XML_SCHEMAS_TYPE_FACETSNEEDVALUE:
- *
- * indicates if the facets need a computed value
- */
-#define XML_SCHEMAS_TYPE_FACETSNEEDVALUE 1 << 21
-/**
- * XML_SCHEMAS_TYPE_INTERNAL_RESOLVED:
- *
- * indicates that the type was typefixed
- */
-#define XML_SCHEMAS_TYPE_INTERNAL_RESOLVED 1 << 22
-/**
- * XML_SCHEMAS_TYPE_INTERNAL_INVALID:
- *
- * indicates that the type is invalid
- */
-#define XML_SCHEMAS_TYPE_INTERNAL_INVALID 1 << 23
-/**
- * XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE:
- *
- * a whitespace-facet value of "preserve"
- */
-#define XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE 1 << 24
-/**
- * XML_SCHEMAS_TYPE_WHITESPACE_REPLACE:
- *
- * a whitespace-facet value of "replace"
- */
-#define XML_SCHEMAS_TYPE_WHITESPACE_REPLACE 1 << 25
-/**
- * XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE:
- *
- * a whitespace-facet value of "collapse"
- */
-#define XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE 1 << 26
-/**
- * XML_SCHEMAS_TYPE_HAS_FACETS:
- *
- * has facets
- */
-#define XML_SCHEMAS_TYPE_HAS_FACETS 1 << 27
-/**
- * XML_SCHEMAS_TYPE_NORMVALUENEEDED:
- *
- * indicates if the facets (pattern) need a normalized value
- */
-#define XML_SCHEMAS_TYPE_NORMVALUENEEDED 1 << 28
-
-/**
- * XML_SCHEMAS_TYPE_FIXUP_1:
- *
- * First stage of fixup was done.
- */
-#define XML_SCHEMAS_TYPE_FIXUP_1 1 << 29
-
-/**
- * XML_SCHEMAS_TYPE_REDEFINED:
- *
- * The type was redefined.
- */
-#define XML_SCHEMAS_TYPE_REDEFINED 1 << 30
-/**
- * XML_SCHEMAS_TYPE_REDEFINING:
- *
- * The type redefines an other type.
- */
-/* #define XML_SCHEMAS_TYPE_REDEFINING 1 << 31 */
-
-/**
- * _xmlSchemaType:
- *
- * Schemas type definition.
- */
-struct _xmlSchemaType {
- xmlSchemaTypeType type; /* The kind of type */
- struct _xmlSchemaType *next; /* the next type if in a sequence ... */
- const xmlChar *name;
- const xmlChar *id ; /* Deprecated; not used */
- const xmlChar *ref; /* Deprecated; not used */
- const xmlChar *refNs; /* Deprecated; not used */
- xmlSchemaAnnotPtr annot;
- xmlSchemaTypePtr subtypes;
- xmlSchemaAttributePtr attributes; /* Deprecated; not used */
- xmlNodePtr node;
- int minOccurs; /* Deprecated; not used */
- int maxOccurs; /* Deprecated; not used */
-
- int flags;
- xmlSchemaContentType contentType;
- const xmlChar *base; /* Base type's local name */
- const xmlChar *baseNs; /* Base type's target namespace */
- xmlSchemaTypePtr baseType; /* The base type component */
- xmlSchemaFacetPtr facets; /* Local facets */
- struct _xmlSchemaType *redef; /* Deprecated; not used */
- int recurse; /* Obsolete */
- xmlSchemaAttributeLinkPtr *attributeUses; /* Deprecated; not used */
- xmlSchemaWildcardPtr attributeWildcard;
- int builtInType; /* Type of built-in types. */
- xmlSchemaTypeLinkPtr memberTypes; /* member-types if a union type. */
- xmlSchemaFacetLinkPtr facetSet; /* All facets (incl. inherited) */
- const xmlChar *refPrefix; /* Deprecated; not used */
- xmlSchemaTypePtr contentTypeDef; /* Used for the simple content of complex types.
- Could we use @subtypes for this? */
- xmlRegexpPtr contModel; /* Holds the automaton of the content model */
- const xmlChar *targetNamespace;
- void *attrUses;
-};
-
-/*
- * xmlSchemaElement:
- * An element definition.
- *
- * xmlSchemaType, xmlSchemaFacet and xmlSchemaElement start of
- * structures must be kept similar
- */
-/**
- * XML_SCHEMAS_ELEM_NILLABLE:
- *
- * the element is nillable
- */
-#define XML_SCHEMAS_ELEM_NILLABLE 1 << 0
-/**
- * XML_SCHEMAS_ELEM_GLOBAL:
- *
- * the element is global
- */
-#define XML_SCHEMAS_ELEM_GLOBAL 1 << 1
-/**
- * XML_SCHEMAS_ELEM_DEFAULT:
- *
- * the element has a default value
- */
-#define XML_SCHEMAS_ELEM_DEFAULT 1 << 2
-/**
- * XML_SCHEMAS_ELEM_FIXED:
- *
- * the element has a fixed value
- */
-#define XML_SCHEMAS_ELEM_FIXED 1 << 3
-/**
- * XML_SCHEMAS_ELEM_ABSTRACT:
- *
- * the element is abstract
- */
-#define XML_SCHEMAS_ELEM_ABSTRACT 1 << 4
-/**
- * XML_SCHEMAS_ELEM_TOPLEVEL:
- *
- * the element is top level
- * obsolete: use XML_SCHEMAS_ELEM_GLOBAL instead
- */
-#define XML_SCHEMAS_ELEM_TOPLEVEL 1 << 5
-/**
- * XML_SCHEMAS_ELEM_REF:
- *
- * the element is a reference to a type
- */
-#define XML_SCHEMAS_ELEM_REF 1 << 6
-/**
- * XML_SCHEMAS_ELEM_NSDEFAULT:
- *
- * allow elements in no namespace
- * Obsolete, not used anymore.
- */
-#define XML_SCHEMAS_ELEM_NSDEFAULT 1 << 7
-/**
- * XML_SCHEMAS_ELEM_INTERNAL_RESOLVED:
- *
- * this is set when "type", "ref", "substitutionGroup"
- * references have been resolved.
- */
-#define XML_SCHEMAS_ELEM_INTERNAL_RESOLVED 1 << 8
- /**
- * XML_SCHEMAS_ELEM_CIRCULAR:
- *
- * a helper flag for the search of circular references.
- */
-#define XML_SCHEMAS_ELEM_CIRCULAR 1 << 9
-/**
- * XML_SCHEMAS_ELEM_BLOCK_ABSENT:
- *
- * the "block" attribute is absent
- */
-#define XML_SCHEMAS_ELEM_BLOCK_ABSENT 1 << 10
-/**
- * XML_SCHEMAS_ELEM_BLOCK_EXTENSION:
- *
- * disallowed substitutions are absent
- */
-#define XML_SCHEMAS_ELEM_BLOCK_EXTENSION 1 << 11
-/**
- * XML_SCHEMAS_ELEM_BLOCK_RESTRICTION:
- *
- * disallowed substitutions: "restriction"
- */
-#define XML_SCHEMAS_ELEM_BLOCK_RESTRICTION 1 << 12
-/**
- * XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION:
- *
- * disallowed substitutions: "substituion"
- */
-#define XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION 1 << 13
-/**
- * XML_SCHEMAS_ELEM_FINAL_ABSENT:
- *
- * substitution group exclusions are absent
- */
-#define XML_SCHEMAS_ELEM_FINAL_ABSENT 1 << 14
-/**
- * XML_SCHEMAS_ELEM_FINAL_EXTENSION:
- *
- * substitution group exclusions: "extension"
- */
-#define XML_SCHEMAS_ELEM_FINAL_EXTENSION 1 << 15
-/**
- * XML_SCHEMAS_ELEM_FINAL_RESTRICTION:
- *
- * substitution group exclusions: "restriction"
- */
-#define XML_SCHEMAS_ELEM_FINAL_RESTRICTION 1 << 16
-/**
- * XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD:
- *
- * the declaration is a substitution group head
- */
-#define XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD 1 << 17
-/**
- * XML_SCHEMAS_ELEM_INTERNAL_CHECKED:
- *
- * this is set when the elem decl has been checked against
- * all constraints
- */
-#define XML_SCHEMAS_ELEM_INTERNAL_CHECKED 1 << 18
-
-typedef struct _xmlSchemaElement xmlSchemaElement;
-typedef xmlSchemaElement *xmlSchemaElementPtr;
-struct _xmlSchemaElement {
- xmlSchemaTypeType type; /* The kind of type */
- struct _xmlSchemaType *next; /* Not used? */
- const xmlChar *name;
- const xmlChar *id; /* Deprecated; not used */
- const xmlChar *ref; /* Deprecated; not used */
- const xmlChar *refNs; /* Deprecated; not used */
- xmlSchemaAnnotPtr annot;
- xmlSchemaTypePtr subtypes; /* the type definition */
- xmlSchemaAttributePtr attributes;
- xmlNodePtr node;
- int minOccurs; /* Deprecated; not used */
- int maxOccurs; /* Deprecated; not used */
-
- int flags;
- const xmlChar *targetNamespace;
- const xmlChar *namedType;
- const xmlChar *namedTypeNs;
- const xmlChar *substGroup;
- const xmlChar *substGroupNs;
- const xmlChar *scope;
- const xmlChar *value; /* The original value of the value constraint. */
- struct _xmlSchemaElement *refDecl; /* This will now be used for the
- substitution group affiliation */
- xmlRegexpPtr contModel; /* Obsolete for WXS, maybe used for RelaxNG */
- xmlSchemaContentType contentType;
- const xmlChar *refPrefix; /* Deprecated; not used */
- xmlSchemaValPtr defVal; /* The compiled value contraint. */
- void *idcs; /* The identity-constraint defs */
-};
-
-/*
- * XML_SCHEMAS_FACET_UNKNOWN:
- *
- * unknown facet handling
- */
-#define XML_SCHEMAS_FACET_UNKNOWN 0
-/*
- * XML_SCHEMAS_FACET_PRESERVE:
- *
- * preserve the type of the facet
- */
-#define XML_SCHEMAS_FACET_PRESERVE 1
-/*
- * XML_SCHEMAS_FACET_REPLACE:
- *
- * replace the type of the facet
- */
-#define XML_SCHEMAS_FACET_REPLACE 2
-/*
- * XML_SCHEMAS_FACET_COLLAPSE:
- *
- * collapse the types of the facet
- */
-#define XML_SCHEMAS_FACET_COLLAPSE 3
-/**
- * A facet definition.
- */
-struct _xmlSchemaFacet {
- xmlSchemaTypeType type; /* The kind of type */
- struct _xmlSchemaFacet *next;/* the next type if in a sequence ... */
- const xmlChar *value; /* The original value */
- const xmlChar *id; /* Obsolete */
- xmlSchemaAnnotPtr annot;
- xmlNodePtr node;
- int fixed; /* XML_SCHEMAS_FACET_PRESERVE, etc. */
- int whitespace;
- xmlSchemaValPtr val; /* The compiled value */
- xmlRegexpPtr regexp; /* The regex for patterns */
-};
-
-/**
- * A notation definition.
- */
-typedef struct _xmlSchemaNotation xmlSchemaNotation;
-typedef xmlSchemaNotation *xmlSchemaNotationPtr;
-struct _xmlSchemaNotation {
- xmlSchemaTypeType type; /* The kind of type */
- const xmlChar *name;
- xmlSchemaAnnotPtr annot;
- const xmlChar *identifier;
- const xmlChar *targetNamespace;
-};
-
-/*
-* TODO: Actually all those flags used for the schema should sit
-* on the schema parser context, since they are used only
-* during parsing an XML schema document, and not available
-* on the component level as per spec.
-*/
-/**
- * XML_SCHEMAS_QUALIF_ELEM:
- *
- * Reflects elementFormDefault == qualified in
- * an XML schema document.
- */
-#define XML_SCHEMAS_QUALIF_ELEM 1 << 0
-/**
- * XML_SCHEMAS_QUALIF_ATTR:
- *
- * Reflects attributeFormDefault == qualified in
- * an XML schema document.
- */
-#define XML_SCHEMAS_QUALIF_ATTR 1 << 1
-/**
- * XML_SCHEMAS_FINAL_DEFAULT_EXTENSION:
- *
- * the schema has "extension" in the set of finalDefault.
- */
-#define XML_SCHEMAS_FINAL_DEFAULT_EXTENSION 1 << 2
-/**
- * XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION:
- *
- * the schema has "restriction" in the set of finalDefault.
- */
-#define XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION 1 << 3
-/**
- * XML_SCHEMAS_FINAL_DEFAULT_LIST:
- *
- * the cshema has "list" in the set of finalDefault.
- */
-#define XML_SCHEMAS_FINAL_DEFAULT_LIST 1 << 4
-/**
- * XML_SCHEMAS_FINAL_DEFAULT_UNION:
- *
- * the schema has "union" in the set of finalDefault.
- */
-#define XML_SCHEMAS_FINAL_DEFAULT_UNION 1 << 5
-/**
- * XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION:
- *
- * the schema has "extension" in the set of blockDefault.
- */
-#define XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION 1 << 6
-/**
- * XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION:
- *
- * the schema has "restriction" in the set of blockDefault.
- */
-#define XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION 1 << 7
-/**
- * XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION:
- *
- * the schema has "substitution" in the set of blockDefault.
- */
-#define XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION 1 << 8
-/**
- * XML_SCHEMAS_INCLUDING_CONVERT_NS:
- *
- * the schema is currently including an other schema with
- * no target namespace.
- */
-#define XML_SCHEMAS_INCLUDING_CONVERT_NS 1 << 9
-/**
- * _xmlSchema:
- *
- * A Schemas definition
- */
-struct _xmlSchema {
- const xmlChar *name; /* schema name */
- const xmlChar *targetNamespace; /* the target namespace */
- const xmlChar *version;
- const xmlChar *id; /* Obsolete */
- xmlDocPtr doc;
- xmlSchemaAnnotPtr annot;
- int flags;
-
- xmlHashTablePtr typeDecl;
- xmlHashTablePtr attrDecl;
- xmlHashTablePtr attrgrpDecl;
- xmlHashTablePtr elemDecl;
- xmlHashTablePtr notaDecl;
-
- xmlHashTablePtr schemasImports;
-
- void *_private; /* unused by the library for users or bindings */
- xmlHashTablePtr groupDecl;
- xmlDictPtr dict;
- void *includes; /* the includes, this is opaque for now */
- int preserve; /* whether to free the document */
- int counter; /* used to give ononymous components unique names */
- xmlHashTablePtr idcDef; /* All identity-constraint defs. */
- void *volatiles; /* Obsolete */
-};
-
-XMLPUBFUN void XMLCALL xmlSchemaFreeType (xmlSchemaTypePtr type);
-XMLPUBFUN void XMLCALL xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_SCHEMAS_ENABLED */
-#endif /* __XML_SCHEMA_INTERNALS_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/schematron.h b/external/libxml2_android/jni/libxml2/include/libxml/schematron.h
deleted file mode 100644
index 364eaecd..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/schematron.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Summary: XML Schemastron implementation
- * Description: interface to the XML Schematron validity checking.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-
-#ifndef __XML_SCHEMATRON_H__
-#define __XML_SCHEMATRON_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_SCHEMATRON_ENABLED
-
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
- XML_SCHEMATRON_OUT_QUIET = 1 << 0, /* quiet no report */
- XML_SCHEMATRON_OUT_TEXT = 1 << 1, /* build a textual report */
- XML_SCHEMATRON_OUT_XML = 1 << 2, /* output SVRL */
- XML_SCHEMATRON_OUT_ERROR = 1 << 3, /* output via xmlStructuredErrorFunc */
- XML_SCHEMATRON_OUT_FILE = 1 << 8, /* output to a file descriptor */
- XML_SCHEMATRON_OUT_BUFFER = 1 << 9, /* output to a buffer */
- XML_SCHEMATRON_OUT_IO = 1 << 10 /* output to I/O mechanism */
-} xmlSchematronValidOptions;
-
-/**
- * The schemas related types are kept internal
- */
-typedef struct _xmlSchematron xmlSchematron;
-typedef xmlSchematron *xmlSchematronPtr;
-
-/**
- * xmlSchematronValidityErrorFunc:
- * @ctx: the validation context
- * @msg: the message
- * @...: extra arguments
- *
- * Signature of an error callback from a Schematron validation
- */
-typedef void (*xmlSchematronValidityErrorFunc) (void *ctx, const char *msg, ...);
-
-/**
- * xmlSchematronValidityWarningFunc:
- * @ctx: the validation context
- * @msg: the message
- * @...: extra arguments
- *
- * Signature of a warning callback from a Schematron validation
- */
-typedef void (*xmlSchematronValidityWarningFunc) (void *ctx, const char *msg, ...);
-
-/**
- * A schemas validation context
- */
-typedef struct _xmlSchematronParserCtxt xmlSchematronParserCtxt;
-typedef xmlSchematronParserCtxt *xmlSchematronParserCtxtPtr;
-
-typedef struct _xmlSchematronValidCtxt xmlSchematronValidCtxt;
-typedef xmlSchematronValidCtxt *xmlSchematronValidCtxtPtr;
-
-/*
- * Interfaces for parsing.
- */
-XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
- xmlSchematronNewParserCtxt (const char *URL);
-XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
- xmlSchematronNewMemParserCtxt(const char *buffer,
- int size);
-XMLPUBFUN xmlSchematronParserCtxtPtr XMLCALL
- xmlSchematronNewDocParserCtxt(xmlDocPtr doc);
-XMLPUBFUN void XMLCALL
- xmlSchematronFreeParserCtxt (xmlSchematronParserCtxtPtr ctxt);
-/*****
-XMLPUBFUN void XMLCALL
- xmlSchematronSetParserErrors(xmlSchematronParserCtxtPtr ctxt,
- xmlSchematronValidityErrorFunc err,
- xmlSchematronValidityWarningFunc warn,
- void *ctx);
-XMLPUBFUN int XMLCALL
- xmlSchematronGetParserErrors(xmlSchematronParserCtxtPtr ctxt,
- xmlSchematronValidityErrorFunc * err,
- xmlSchematronValidityWarningFunc * warn,
- void **ctx);
-XMLPUBFUN int XMLCALL
- xmlSchematronIsValid (xmlSchematronValidCtxtPtr ctxt);
- *****/
-XMLPUBFUN xmlSchematronPtr XMLCALL
- xmlSchematronParse (xmlSchematronParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlSchematronFree (xmlSchematronPtr schema);
-/*
- * Interfaces for validating
- */
-XMLPUBFUN void XMLCALL
- xmlSchematronSetValidStructuredErrors(
- xmlSchematronValidCtxtPtr ctxt,
- xmlStructuredErrorFunc serror,
- void *ctx);
-/******
-XMLPUBFUN void XMLCALL
- xmlSchematronSetValidErrors (xmlSchematronValidCtxtPtr ctxt,
- xmlSchematronValidityErrorFunc err,
- xmlSchematronValidityWarningFunc warn,
- void *ctx);
-XMLPUBFUN int XMLCALL
- xmlSchematronGetValidErrors (xmlSchematronValidCtxtPtr ctxt,
- xmlSchematronValidityErrorFunc *err,
- xmlSchematronValidityWarningFunc *warn,
- void **ctx);
-XMLPUBFUN int XMLCALL
- xmlSchematronSetValidOptions(xmlSchematronValidCtxtPtr ctxt,
- int options);
-XMLPUBFUN int XMLCALL
- xmlSchematronValidCtxtGetOptions(xmlSchematronValidCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlSchematronValidateOneElement (xmlSchematronValidCtxtPtr ctxt,
- xmlNodePtr elem);
- *******/
-
-XMLPUBFUN xmlSchematronValidCtxtPtr XMLCALL
- xmlSchematronNewValidCtxt (xmlSchematronPtr schema,
- int options);
-XMLPUBFUN void XMLCALL
- xmlSchematronFreeValidCtxt (xmlSchematronValidCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlSchematronValidateDoc (xmlSchematronValidCtxtPtr ctxt,
- xmlDocPtr instance);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_SCHEMATRON_ENABLED */
-#endif /* __XML_SCHEMATRON_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/threads.h b/external/libxml2_android/jni/libxml2/include/libxml/threads.h
deleted file mode 100644
index d31f16ac..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/threads.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * Summary: interfaces for thread handling
- * Description: set of generic threading related routines
- * should work with pthreads, Windows native or TLS threads
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_THREADS_H__
-#define __XML_THREADS_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * xmlMutex are a simple mutual exception locks.
- */
-typedef struct _xmlMutex xmlMutex;
-typedef xmlMutex *xmlMutexPtr;
-
-/*
- * xmlRMutex are reentrant mutual exception locks.
- */
-typedef struct _xmlRMutex xmlRMutex;
-typedef xmlRMutex *xmlRMutexPtr;
-
-#ifdef __cplusplus
-}
-#endif
-#include <libxml/globals.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-XMLPUBFUN xmlMutexPtr XMLCALL
- xmlNewMutex (void);
-XMLPUBFUN void XMLCALL
- xmlMutexLock (xmlMutexPtr tok);
-XMLPUBFUN void XMLCALL
- xmlMutexUnlock (xmlMutexPtr tok);
-XMLPUBFUN void XMLCALL
- xmlFreeMutex (xmlMutexPtr tok);
-
-XMLPUBFUN xmlRMutexPtr XMLCALL
- xmlNewRMutex (void);
-XMLPUBFUN void XMLCALL
- xmlRMutexLock (xmlRMutexPtr tok);
-XMLPUBFUN void XMLCALL
- xmlRMutexUnlock (xmlRMutexPtr tok);
-XMLPUBFUN void XMLCALL
- xmlFreeRMutex (xmlRMutexPtr tok);
-
-/*
- * Library wide APIs.
- */
-XMLPUBFUN void XMLCALL
- xmlInitThreads (void);
-XMLPUBFUN void XMLCALL
- xmlLockLibrary (void);
-XMLPUBFUN void XMLCALL
- xmlUnlockLibrary(void);
-XMLPUBFUN int XMLCALL
- xmlGetThreadId (void);
-XMLPUBFUN int XMLCALL
- xmlIsMainThread (void);
-XMLPUBFUN void XMLCALL
- xmlCleanupThreads(void);
-XMLPUBFUN xmlGlobalStatePtr XMLCALL
- xmlGetGlobalState(void);
-
-#if defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && defined(LIBXML_STATIC_FOR_DLL)
-int XMLCALL xmlDllMain(void *hinstDLL, unsigned long fdwReason, void *lpvReserved);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* __XML_THREADS_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/tree.h b/external/libxml2_android/jni/libxml2/include/libxml/tree.h
deleted file mode 100644
index 4a9b3bc6..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/tree.h
+++ /dev/null
@@ -1,1311 +0,0 @@
-/*
- * Summary: interfaces for tree manipulation
- * Description: this module describes the structures found in an tree resulting
- * from an XML or HTML parsing, as well as the API provided for
- * various processing on that tree
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_TREE_H__
-#define __XML_TREE_H__
-
-#include <stdio.h>
-#include <limits.h>
-#include <libxml/xmlversion.h>
-#include <libxml/xmlstring.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Some of the basic types pointer to structures:
- */
-/* xmlIO.h */
-typedef struct _xmlParserInputBuffer xmlParserInputBuffer;
-typedef xmlParserInputBuffer *xmlParserInputBufferPtr;
-
-typedef struct _xmlOutputBuffer xmlOutputBuffer;
-typedef xmlOutputBuffer *xmlOutputBufferPtr;
-
-/* parser.h */
-typedef struct _xmlParserInput xmlParserInput;
-typedef xmlParserInput *xmlParserInputPtr;
-
-typedef struct _xmlParserCtxt xmlParserCtxt;
-typedef xmlParserCtxt *xmlParserCtxtPtr;
-
-typedef struct _xmlSAXLocator xmlSAXLocator;
-typedef xmlSAXLocator *xmlSAXLocatorPtr;
-
-typedef struct _xmlSAXHandler xmlSAXHandler;
-typedef xmlSAXHandler *xmlSAXHandlerPtr;
-
-/* entities.h */
-typedef struct _xmlEntity xmlEntity;
-typedef xmlEntity *xmlEntityPtr;
-
-/**
- * BASE_BUFFER_SIZE:
- *
- * default buffer size 4000.
- */
-#define BASE_BUFFER_SIZE 4096
-
-/**
- * LIBXML_NAMESPACE_DICT:
- *
- * Defines experimental behaviour:
- * 1) xmlNs gets an additional field @context (a xmlDoc)
- * 2) when creating a tree, xmlNs->href is stored in the dict of xmlDoc.
- */
-/* #define LIBXML_NAMESPACE_DICT */
-
-/**
- * xmlBufferAllocationScheme:
- *
- * A buffer allocation scheme can be defined to either match exactly the
- * need or double it's allocated size each time it is found too small.
- */
-
-typedef enum {
- XML_BUFFER_ALLOC_DOUBLEIT, /* double each time one need to grow */
- XML_BUFFER_ALLOC_EXACT, /* grow only to the minimal size */
- XML_BUFFER_ALLOC_IMMUTABLE, /* immutable buffer */
- XML_BUFFER_ALLOC_IO, /* special allocation scheme used for I/O */
- XML_BUFFER_ALLOC_HYBRID, /* exact up to a threshold, and doubleit thereafter */
- XML_BUFFER_ALLOC_BOUNDED /* limit the upper size of the buffer */
-} xmlBufferAllocationScheme;
-
-/**
- * xmlBuffer:
- *
- * A buffer structure, this old construct is limited to 2GB and
- * is being deprecated, use API with xmlBuf instead
- */
-typedef struct _xmlBuffer xmlBuffer;
-typedef xmlBuffer *xmlBufferPtr;
-struct _xmlBuffer {
- xmlChar *content; /* The buffer content UTF8 */
- unsigned int use; /* The buffer size used */
- unsigned int size; /* The buffer size */
- xmlBufferAllocationScheme alloc; /* The realloc method */
- xmlChar *contentIO; /* in IO mode we may have a different base */
-};
-
-/**
- * xmlBuf:
- *
- * A buffer structure, new one, the actual structure internals are not public
- */
-
-typedef struct _xmlBuf xmlBuf;
-
-/**
- * xmlBufPtr:
- *
- * A pointer to a buffer structure, the actual structure internals are not
- * public
- */
-
-typedef xmlBuf *xmlBufPtr;
-
-/*
- * A few public routines for xmlBuf. As those are expected to be used
- * mostly internally the bulk of the routines are internal in buf.h
- */
-XMLPUBFUN xmlChar* XMLCALL xmlBufContent (const xmlBuf* buf);
-XMLPUBFUN xmlChar* XMLCALL xmlBufEnd (xmlBufPtr buf);
-XMLPUBFUN size_t XMLCALL xmlBufUse (const xmlBufPtr buf);
-XMLPUBFUN size_t XMLCALL xmlBufShrink (xmlBufPtr buf, size_t len);
-
-/*
- * LIBXML2_NEW_BUFFER:
- *
- * Macro used to express that the API use the new buffers for
- * xmlParserInputBuffer and xmlOutputBuffer. The change was
- * introduced in 2.9.0.
- */
-#define LIBXML2_NEW_BUFFER
-
-/**
- * XML_XML_NAMESPACE:
- *
- * This is the namespace for the special xml: prefix predefined in the
- * XML Namespace specification.
- */
-#define XML_XML_NAMESPACE \
- (const xmlChar *) "http://www.w3.org/XML/1998/namespace"
-
-/**
- * XML_XML_ID:
- *
- * This is the name for the special xml:id attribute
- */
-#define XML_XML_ID (const xmlChar *) "xml:id"
-
-/*
- * The different element types carried by an XML tree.
- *
- * NOTE: This is synchronized with DOM Level1 values
- * See http://www.w3.org/TR/REC-DOM-Level-1/
- *
- * Actually this had diverged a bit, and now XML_DOCUMENT_TYPE_NODE should
- * be deprecated to use an XML_DTD_NODE.
- */
-typedef enum {
- XML_ELEMENT_NODE= 1,
- XML_ATTRIBUTE_NODE= 2,
- XML_TEXT_NODE= 3,
- XML_CDATA_SECTION_NODE= 4,
- XML_ENTITY_REF_NODE= 5,
- XML_ENTITY_NODE= 6,
- XML_PI_NODE= 7,
- XML_COMMENT_NODE= 8,
- XML_DOCUMENT_NODE= 9,
- XML_DOCUMENT_TYPE_NODE= 10,
- XML_DOCUMENT_FRAG_NODE= 11,
- XML_NOTATION_NODE= 12,
- XML_HTML_DOCUMENT_NODE= 13,
- XML_DTD_NODE= 14,
- XML_ELEMENT_DECL= 15,
- XML_ATTRIBUTE_DECL= 16,
- XML_ENTITY_DECL= 17,
- XML_NAMESPACE_DECL= 18,
- XML_XINCLUDE_START= 19,
- XML_XINCLUDE_END= 20
-#ifdef LIBXML_DOCB_ENABLED
- ,XML_DOCB_DOCUMENT_NODE= 21
-#endif
-} xmlElementType;
-
-
-/**
- * xmlNotation:
- *
- * A DTD Notation definition.
- */
-
-typedef struct _xmlNotation xmlNotation;
-typedef xmlNotation *xmlNotationPtr;
-struct _xmlNotation {
- const xmlChar *name; /* Notation name */
- const xmlChar *PublicID; /* Public identifier, if any */
- const xmlChar *SystemID; /* System identifier, if any */
-};
-
-/**
- * xmlAttributeType:
- *
- * A DTD Attribute type definition.
- */
-
-typedef enum {
- XML_ATTRIBUTE_CDATA = 1,
- XML_ATTRIBUTE_ID,
- XML_ATTRIBUTE_IDREF ,
- XML_ATTRIBUTE_IDREFS,
- XML_ATTRIBUTE_ENTITY,
- XML_ATTRIBUTE_ENTITIES,
- XML_ATTRIBUTE_NMTOKEN,
- XML_ATTRIBUTE_NMTOKENS,
- XML_ATTRIBUTE_ENUMERATION,
- XML_ATTRIBUTE_NOTATION
-} xmlAttributeType;
-
-/**
- * xmlAttributeDefault:
- *
- * A DTD Attribute default definition.
- */
-
-typedef enum {
- XML_ATTRIBUTE_NONE = 1,
- XML_ATTRIBUTE_REQUIRED,
- XML_ATTRIBUTE_IMPLIED,
- XML_ATTRIBUTE_FIXED
-} xmlAttributeDefault;
-
-/**
- * xmlEnumeration:
- *
- * List structure used when there is an enumeration in DTDs.
- */
-
-typedef struct _xmlEnumeration xmlEnumeration;
-typedef xmlEnumeration *xmlEnumerationPtr;
-struct _xmlEnumeration {
- struct _xmlEnumeration *next; /* next one */
- const xmlChar *name; /* Enumeration name */
-};
-
-/**
- * xmlAttribute:
- *
- * An Attribute declaration in a DTD.
- */
-
-typedef struct _xmlAttribute xmlAttribute;
-typedef xmlAttribute *xmlAttributePtr;
-struct _xmlAttribute {
- void *_private; /* application data */
- xmlElementType type; /* XML_ATTRIBUTE_DECL, must be second ! */
- const xmlChar *name; /* Attribute name */
- struct _xmlNode *children; /* NULL */
- struct _xmlNode *last; /* NULL */
- struct _xmlDtd *parent; /* -> DTD */
- struct _xmlNode *next; /* next sibling link */
- struct _xmlNode *prev; /* previous sibling link */
- struct _xmlDoc *doc; /* the containing document */
-
- struct _xmlAttribute *nexth; /* next in hash table */
- xmlAttributeType atype; /* The attribute type */
- xmlAttributeDefault def; /* the default */
- const xmlChar *defaultValue; /* or the default value */
- xmlEnumerationPtr tree; /* or the enumeration tree if any */
- const xmlChar *prefix; /* the namespace prefix if any */
- const xmlChar *elem; /* Element holding the attribute */
-};
-
-/**
- * xmlElementContentType:
- *
- * Possible definitions of element content types.
- */
-typedef enum {
- XML_ELEMENT_CONTENT_PCDATA = 1,
- XML_ELEMENT_CONTENT_ELEMENT,
- XML_ELEMENT_CONTENT_SEQ,
- XML_ELEMENT_CONTENT_OR
-} xmlElementContentType;
-
-/**
- * xmlElementContentOccur:
- *
- * Possible definitions of element content occurrences.
- */
-typedef enum {
- XML_ELEMENT_CONTENT_ONCE = 1,
- XML_ELEMENT_CONTENT_OPT,
- XML_ELEMENT_CONTENT_MULT,
- XML_ELEMENT_CONTENT_PLUS
-} xmlElementContentOccur;
-
-/**
- * xmlElementContent:
- *
- * An XML Element content as stored after parsing an element definition
- * in a DTD.
- */
-
-typedef struct _xmlElementContent xmlElementContent;
-typedef xmlElementContent *xmlElementContentPtr;
-struct _xmlElementContent {
- xmlElementContentType type; /* PCDATA, ELEMENT, SEQ or OR */
- xmlElementContentOccur ocur; /* ONCE, OPT, MULT or PLUS */
- const xmlChar *name; /* Element name */
- struct _xmlElementContent *c1; /* first child */
- struct _xmlElementContent *c2; /* second child */
- struct _xmlElementContent *parent; /* parent */
- const xmlChar *prefix; /* Namespace prefix */
-};
-
-/**
- * xmlElementTypeVal:
- *
- * The different possibilities for an element content type.
- */
-
-typedef enum {
- XML_ELEMENT_TYPE_UNDEFINED = 0,
- XML_ELEMENT_TYPE_EMPTY = 1,
- XML_ELEMENT_TYPE_ANY,
- XML_ELEMENT_TYPE_MIXED,
- XML_ELEMENT_TYPE_ELEMENT
-} xmlElementTypeVal;
-
-#ifdef __cplusplus
-}
-#endif
-#include <libxml/xmlregexp.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlElement:
- *
- * An XML Element declaration from a DTD.
- */
-
-typedef struct _xmlElement xmlElement;
-typedef xmlElement *xmlElementPtr;
-struct _xmlElement {
- void *_private; /* application data */
- xmlElementType type; /* XML_ELEMENT_DECL, must be second ! */
- const xmlChar *name; /* Element name */
- struct _xmlNode *children; /* NULL */
- struct _xmlNode *last; /* NULL */
- struct _xmlDtd *parent; /* -> DTD */
- struct _xmlNode *next; /* next sibling link */
- struct _xmlNode *prev; /* previous sibling link */
- struct _xmlDoc *doc; /* the containing document */
-
- xmlElementTypeVal etype; /* The type */
- xmlElementContentPtr content; /* the allowed element content */
- xmlAttributePtr attributes; /* List of the declared attributes */
- const xmlChar *prefix; /* the namespace prefix if any */
-#ifdef LIBXML_REGEXP_ENABLED
- xmlRegexpPtr contModel; /* the validating regexp */
-#else
- void *contModel;
-#endif
-};
-
-
-/**
- * XML_LOCAL_NAMESPACE:
- *
- * A namespace declaration node.
- */
-#define XML_LOCAL_NAMESPACE XML_NAMESPACE_DECL
-typedef xmlElementType xmlNsType;
-
-/**
- * xmlNs:
- *
- * An XML namespace.
- * Note that prefix == NULL is valid, it defines the default namespace
- * within the subtree (until overridden).
- *
- * xmlNsType is unified with xmlElementType.
- */
-
-typedef struct _xmlNs xmlNs;
-typedef xmlNs *xmlNsPtr;
-struct _xmlNs {
- struct _xmlNs *next; /* next Ns link for this node */
- xmlNsType type; /* global or local */
- const xmlChar *href; /* URL for the namespace */
- const xmlChar *prefix; /* prefix for the namespace */
- void *_private; /* application data */
- struct _xmlDoc *context; /* normally an xmlDoc */
-};
-
-/**
- * xmlDtd:
- *
- * An XML DTD, as defined by <!DOCTYPE ... There is actually one for
- * the internal subset and for the external subset.
- */
-typedef struct _xmlDtd xmlDtd;
-typedef xmlDtd *xmlDtdPtr;
-struct _xmlDtd {
- void *_private; /* application data */
- xmlElementType type; /* XML_DTD_NODE, must be second ! */
- const xmlChar *name; /* Name of the DTD */
- struct _xmlNode *children; /* the value of the property link */
- struct _xmlNode *last; /* last child link */
- struct _xmlDoc *parent; /* child->parent link */
- struct _xmlNode *next; /* next sibling link */
- struct _xmlNode *prev; /* previous sibling link */
- struct _xmlDoc *doc; /* the containing document */
-
- /* End of common part */
- void *notations; /* Hash table for notations if any */
- void *elements; /* Hash table for elements if any */
- void *attributes; /* Hash table for attributes if any */
- void *entities; /* Hash table for entities if any */
- const xmlChar *ExternalID; /* External identifier for PUBLIC DTD */
- const xmlChar *SystemID; /* URI for a SYSTEM or PUBLIC DTD */
- void *pentities; /* Hash table for param entities if any */
-};
-
-/**
- * xmlAttr:
- *
- * An attribute on an XML node.
- */
-typedef struct _xmlAttr xmlAttr;
-typedef xmlAttr *xmlAttrPtr;
-struct _xmlAttr {
- void *_private; /* application data */
- xmlElementType type; /* XML_ATTRIBUTE_NODE, must be second ! */
- const xmlChar *name; /* the name of the property */
- struct _xmlNode *children; /* the value of the property */
- struct _xmlNode *last; /* NULL */
- struct _xmlNode *parent; /* child->parent link */
- struct _xmlAttr *next; /* next sibling link */
- struct _xmlAttr *prev; /* previous sibling link */
- struct _xmlDoc *doc; /* the containing document */
- xmlNs *ns; /* pointer to the associated namespace */
- xmlAttributeType atype; /* the attribute type if validating */
- void *psvi; /* for type/PSVI informations */
-};
-
-/**
- * xmlID:
- *
- * An XML ID instance.
- */
-
-typedef struct _xmlID xmlID;
-typedef xmlID *xmlIDPtr;
-struct _xmlID {
- struct _xmlID *next; /* next ID */
- const xmlChar *value; /* The ID name */
- xmlAttrPtr attr; /* The attribute holding it */
- const xmlChar *name; /* The attribute if attr is not available */
- int lineno; /* The line number if attr is not available */
- struct _xmlDoc *doc; /* The document holding the ID */
-};
-
-/**
- * xmlRef:
- *
- * An XML IDREF instance.
- */
-
-typedef struct _xmlRef xmlRef;
-typedef xmlRef *xmlRefPtr;
-struct _xmlRef {
- struct _xmlRef *next; /* next Ref */
- const xmlChar *value; /* The Ref name */
- xmlAttrPtr attr; /* The attribute holding it */
- const xmlChar *name; /* The attribute if attr is not available */
- int lineno; /* The line number if attr is not available */
-};
-
-/**
- * xmlNode:
- *
- * A node in an XML tree.
- */
-typedef struct _xmlNode xmlNode;
-typedef xmlNode *xmlNodePtr;
-struct _xmlNode {
- void *_private; /* application data */
- xmlElementType type; /* type number, must be second ! */
- const xmlChar *name; /* the name of the node, or the entity */
- struct _xmlNode *children; /* parent->childs link */
- struct _xmlNode *last; /* last child link */
- struct _xmlNode *parent; /* child->parent link */
- struct _xmlNode *next; /* next sibling link */
- struct _xmlNode *prev; /* previous sibling link */
- struct _xmlDoc *doc; /* the containing document */
-
- /* End of common part */
- xmlNs *ns; /* pointer to the associated namespace */
- xmlChar *content; /* the content */
- struct _xmlAttr *properties;/* properties list */
- xmlNs *nsDef; /* namespace definitions on this node */
- void *psvi; /* for type/PSVI informations */
- unsigned short line; /* line number */
- unsigned short extra; /* extra data for XPath/XSLT */
-};
-
-/**
- * XML_GET_CONTENT:
- *
- * Macro to extract the content pointer of a node.
- */
-#define XML_GET_CONTENT(n) \
- ((n)->type == XML_ELEMENT_NODE ? NULL : (n)->content)
-
-/**
- * XML_GET_LINE:
- *
- * Macro to extract the line number of an element node.
- */
-#define XML_GET_LINE(n) \
- (xmlGetLineNo(n))
-
-/**
- * xmlDocProperty
- *
- * Set of properties of the document as found by the parser
- * Some of them are linked to similary named xmlParserOption
- */
-typedef enum {
- XML_DOC_WELLFORMED = 1<<0, /* document is XML well formed */
- XML_DOC_NSVALID = 1<<1, /* document is Namespace valid */
- XML_DOC_OLD10 = 1<<2, /* parsed with old XML-1.0 parser */
- XML_DOC_DTDVALID = 1<<3, /* DTD validation was successful */
- XML_DOC_XINCLUDE = 1<<4, /* XInclude substitution was done */
- XML_DOC_USERBUILT = 1<<5, /* Document was built using the API
- and not by parsing an instance */
- XML_DOC_INTERNAL = 1<<6, /* built for internal processing */
- XML_DOC_HTML = 1<<7 /* parsed or built HTML document */
-} xmlDocProperties;
-
-/**
- * xmlDoc:
- *
- * An XML document.
- */
-typedef struct _xmlDoc xmlDoc;
-typedef xmlDoc *xmlDocPtr;
-struct _xmlDoc {
- void *_private; /* application data */
- xmlElementType type; /* XML_DOCUMENT_NODE, must be second ! */
- char *name; /* name/filename/URI of the document */
- struct _xmlNode *children; /* the document tree */
- struct _xmlNode *last; /* last child link */
- struct _xmlNode *parent; /* child->parent link */
- struct _xmlNode *next; /* next sibling link */
- struct _xmlNode *prev; /* previous sibling link */
- struct _xmlDoc *doc; /* autoreference to itself */
-
- /* End of common part */
- int compression;/* level of zlib compression */
- int standalone; /* standalone document (no external refs)
- 1 if standalone="yes"
- 0 if standalone="no"
- -1 if there is no XML declaration
- -2 if there is an XML declaration, but no
- standalone attribute was specified */
- struct _xmlDtd *intSubset; /* the document internal subset */
- struct _xmlDtd *extSubset; /* the document external subset */
- struct _xmlNs *oldNs; /* Global namespace, the old way */
- const xmlChar *version; /* the XML version string */
- const xmlChar *encoding; /* external initial encoding, if any */
- void *ids; /* Hash table for ID attributes if any */
- void *refs; /* Hash table for IDREFs attributes if any */
- const xmlChar *URL; /* The URI for that document */
- int charset; /* encoding of the in-memory content
- actually an xmlCharEncoding */
- struct _xmlDict *dict; /* dict used to allocate names or NULL */
- void *psvi; /* for type/PSVI informations */
- int parseFlags; /* set of xmlParserOption used to parse the
- document */
- int properties; /* set of xmlDocProperties for this document
- set at the end of parsing */
-};
-
-
-typedef struct _xmlDOMWrapCtxt xmlDOMWrapCtxt;
-typedef xmlDOMWrapCtxt *xmlDOMWrapCtxtPtr;
-
-/**
- * xmlDOMWrapAcquireNsFunction:
- * @ctxt: a DOM wrapper context
- * @node: the context node (element or attribute)
- * @nsName: the requested namespace name
- * @nsPrefix: the requested namespace prefix
- *
- * A function called to acquire namespaces (xmlNs) from the wrapper.
- *
- * Returns an xmlNsPtr or NULL in case of an error.
- */
-typedef xmlNsPtr (*xmlDOMWrapAcquireNsFunction) (xmlDOMWrapCtxtPtr ctxt,
- xmlNodePtr node,
- const xmlChar *nsName,
- const xmlChar *nsPrefix);
-
-/**
- * xmlDOMWrapCtxt:
- *
- * Context for DOM wrapper-operations.
- */
-struct _xmlDOMWrapCtxt {
- void * _private;
- /*
- * The type of this context, just in case we need specialized
- * contexts in the future.
- */
- int type;
- /*
- * Internal namespace map used for various operations.
- */
- void * namespaceMap;
- /*
- * Use this one to acquire an xmlNsPtr intended for node->ns.
- * (Note that this is not intended for elem->nsDef).
- */
- xmlDOMWrapAcquireNsFunction getNsForNodeFunc;
-};
-
-/**
- * xmlChildrenNode:
- *
- * Macro for compatibility naming layer with libxml1. Maps
- * to "children."
- */
-#ifndef xmlChildrenNode
-#define xmlChildrenNode children
-#endif
-
-/**
- * xmlRootNode:
- *
- * Macro for compatibility naming layer with libxml1. Maps
- * to "children".
- */
-#ifndef xmlRootNode
-#define xmlRootNode children
-#endif
-
-/*
- * Variables.
- */
-
-/*
- * Some helper functions
- */
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || \
- defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || \
- defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || \
- defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || \
- defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-XMLPUBFUN int XMLCALL
- xmlValidateNCName (const xmlChar *value,
- int space);
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN int XMLCALL
- xmlValidateQName (const xmlChar *value,
- int space);
-XMLPUBFUN int XMLCALL
- xmlValidateName (const xmlChar *value,
- int space);
-XMLPUBFUN int XMLCALL
- xmlValidateNMToken (const xmlChar *value,
- int space);
-#endif
-
-XMLPUBFUN xmlChar * XMLCALL
- xmlBuildQName (const xmlChar *ncname,
- const xmlChar *prefix,
- xmlChar *memory,
- int len);
-XMLPUBFUN xmlChar * XMLCALL
- xmlSplitQName2 (const xmlChar *name,
- xmlChar **prefix);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlSplitQName3 (const xmlChar *name,
- int *len);
-
-/*
- * Handling Buffers, the old ones see @xmlBuf for the new ones.
- */
-
-XMLPUBFUN void XMLCALL
- xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme);
-XMLPUBFUN xmlBufferAllocationScheme XMLCALL
- xmlGetBufferAllocationScheme(void);
-
-XMLPUBFUN xmlBufferPtr XMLCALL
- xmlBufferCreate (void);
-XMLPUBFUN xmlBufferPtr XMLCALL
- xmlBufferCreateSize (size_t size);
-XMLPUBFUN xmlBufferPtr XMLCALL
- xmlBufferCreateStatic (void *mem,
- size_t size);
-XMLPUBFUN int XMLCALL
- xmlBufferResize (xmlBufferPtr buf,
- unsigned int size);
-XMLPUBFUN void XMLCALL
- xmlBufferFree (xmlBufferPtr buf);
-XMLPUBFUN int XMLCALL
- xmlBufferDump (FILE *file,
- xmlBufferPtr buf);
-XMLPUBFUN int XMLCALL
- xmlBufferAdd (xmlBufferPtr buf,
- const xmlChar *str,
- int len);
-XMLPUBFUN int XMLCALL
- xmlBufferAddHead (xmlBufferPtr buf,
- const xmlChar *str,
- int len);
-XMLPUBFUN int XMLCALL
- xmlBufferCat (xmlBufferPtr buf,
- const xmlChar *str);
-XMLPUBFUN int XMLCALL
- xmlBufferCCat (xmlBufferPtr buf,
- const char *str);
-XMLPUBFUN int XMLCALL
- xmlBufferShrink (xmlBufferPtr buf,
- unsigned int len);
-XMLPUBFUN int XMLCALL
- xmlBufferGrow (xmlBufferPtr buf,
- unsigned int len);
-XMLPUBFUN void XMLCALL
- xmlBufferEmpty (xmlBufferPtr buf);
-XMLPUBFUN const xmlChar* XMLCALL
- xmlBufferContent (const xmlBuffer *buf);
-XMLPUBFUN xmlChar* XMLCALL
- xmlBufferDetach (xmlBufferPtr buf);
-XMLPUBFUN void XMLCALL
- xmlBufferSetAllocationScheme(xmlBufferPtr buf,
- xmlBufferAllocationScheme scheme);
-XMLPUBFUN int XMLCALL
- xmlBufferLength (const xmlBuffer *buf);
-
-/*
- * Creating/freeing new structures.
- */
-XMLPUBFUN xmlDtdPtr XMLCALL
- xmlCreateIntSubset (xmlDocPtr doc,
- const xmlChar *name,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-XMLPUBFUN xmlDtdPtr XMLCALL
- xmlNewDtd (xmlDocPtr doc,
- const xmlChar *name,
- const xmlChar *ExternalID,
- const xmlChar *SystemID);
-XMLPUBFUN xmlDtdPtr XMLCALL
- xmlGetIntSubset (const xmlDoc *doc);
-XMLPUBFUN void XMLCALL
- xmlFreeDtd (xmlDtdPtr cur);
-#ifdef LIBXML_LEGACY_ENABLED
-XMLPUBFUN xmlNsPtr XMLCALL
- xmlNewGlobalNs (xmlDocPtr doc,
- const xmlChar *href,
- const xmlChar *prefix);
-#endif /* LIBXML_LEGACY_ENABLED */
-XMLPUBFUN xmlNsPtr XMLCALL
- xmlNewNs (xmlNodePtr node,
- const xmlChar *href,
- const xmlChar *prefix);
-XMLPUBFUN void XMLCALL
- xmlFreeNs (xmlNsPtr cur);
-XMLPUBFUN void XMLCALL
- xmlFreeNsList (xmlNsPtr cur);
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlNewDoc (const xmlChar *version);
-XMLPUBFUN void XMLCALL
- xmlFreeDoc (xmlDocPtr cur);
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlNewDocProp (xmlDocPtr doc,
- const xmlChar *name,
- const xmlChar *value);
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
- defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlNewProp (xmlNodePtr node,
- const xmlChar *name,
- const xmlChar *value);
-#endif
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlNewNsProp (xmlNodePtr node,
- xmlNsPtr ns,
- const xmlChar *name,
- const xmlChar *value);
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlNewNsPropEatName (xmlNodePtr node,
- xmlNsPtr ns,
- xmlChar *name,
- const xmlChar *value);
-XMLPUBFUN void XMLCALL
- xmlFreePropList (xmlAttrPtr cur);
-XMLPUBFUN void XMLCALL
- xmlFreeProp (xmlAttrPtr cur);
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlCopyProp (xmlNodePtr target,
- xmlAttrPtr cur);
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlCopyPropList (xmlNodePtr target,
- xmlAttrPtr cur);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlDtdPtr XMLCALL
- xmlCopyDtd (xmlDtdPtr dtd);
-#endif /* LIBXML_TREE_ENABLED */
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlCopyDoc (xmlDocPtr doc,
- int recursive);
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
-/*
- * Creating new nodes.
- */
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewDocNode (xmlDocPtr doc,
- xmlNsPtr ns,
- const xmlChar *name,
- const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewDocNodeEatName (xmlDocPtr doc,
- xmlNsPtr ns,
- xmlChar *name,
- const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewNode (xmlNsPtr ns,
- const xmlChar *name);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewNodeEatName (xmlNsPtr ns,
- xmlChar *name);
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewChild (xmlNodePtr parent,
- xmlNsPtr ns,
- const xmlChar *name,
- const xmlChar *content);
-#endif
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewDocText (const xmlDoc *doc,
- const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewText (const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewDocPI (xmlDocPtr doc,
- const xmlChar *name,
- const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewPI (const xmlChar *name,
- const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewDocTextLen (xmlDocPtr doc,
- const xmlChar *content,
- int len);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewTextLen (const xmlChar *content,
- int len);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewDocComment (xmlDocPtr doc,
- const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewComment (const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewCDataBlock (xmlDocPtr doc,
- const xmlChar *content,
- int len);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewCharRef (xmlDocPtr doc,
- const xmlChar *name);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewReference (const xmlDoc *doc,
- const xmlChar *name);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlCopyNode (xmlNodePtr node,
- int recursive);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlDocCopyNode (xmlNodePtr node,
- xmlDocPtr doc,
- int recursive);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlDocCopyNodeList (xmlDocPtr doc,
- xmlNodePtr node);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlCopyNodeList (xmlNodePtr node);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewTextChild (xmlNodePtr parent,
- xmlNsPtr ns,
- const xmlChar *name,
- const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewDocRawNode (xmlDocPtr doc,
- xmlNsPtr ns,
- const xmlChar *name,
- const xmlChar *content);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNewDocFragment (xmlDocPtr doc);
-#endif /* LIBXML_TREE_ENABLED */
-
-/*
- * Navigating.
- */
-XMLPUBFUN long XMLCALL
- xmlGetLineNo (const xmlNode *node);
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
-XMLPUBFUN xmlChar * XMLCALL
- xmlGetNodePath (const xmlNode *node);
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED) */
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlDocGetRootElement (const xmlDoc *doc);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlGetLastChild (const xmlNode *parent);
-XMLPUBFUN int XMLCALL
- xmlNodeIsText (const xmlNode *node);
-XMLPUBFUN int XMLCALL
- xmlIsBlankNode (const xmlNode *node);
-
-/*
- * Changing the structure.
- */
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlDocSetRootElement (xmlDocPtr doc,
- xmlNodePtr root);
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN void XMLCALL
- xmlNodeSetName (xmlNodePtr cur,
- const xmlChar *name);
-#endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlAddChild (xmlNodePtr parent,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlAddChildList (xmlNodePtr parent,
- xmlNodePtr cur);
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlReplaceNode (xmlNodePtr old,
- xmlNodePtr cur);
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED) */
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
- defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlAddPrevSibling (xmlNodePtr cur,
- xmlNodePtr elem);
-#endif /* LIBXML_TREE_ENABLED || LIBXML_HTML_ENABLED || LIBXML_SCHEMAS_ENABLED */
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlAddSibling (xmlNodePtr cur,
- xmlNodePtr elem);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlAddNextSibling (xmlNodePtr cur,
- xmlNodePtr elem);
-XMLPUBFUN void XMLCALL
- xmlUnlinkNode (xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlTextMerge (xmlNodePtr first,
- xmlNodePtr second);
-XMLPUBFUN int XMLCALL
- xmlTextConcat (xmlNodePtr node,
- const xmlChar *content,
- int len);
-XMLPUBFUN void XMLCALL
- xmlFreeNodeList (xmlNodePtr cur);
-XMLPUBFUN void XMLCALL
- xmlFreeNode (xmlNodePtr cur);
-XMLPUBFUN void XMLCALL
- xmlSetTreeDoc (xmlNodePtr tree,
- xmlDocPtr doc);
-XMLPUBFUN void XMLCALL
- xmlSetListDoc (xmlNodePtr list,
- xmlDocPtr doc);
-/*
- * Namespaces.
- */
-XMLPUBFUN xmlNsPtr XMLCALL
- xmlSearchNs (xmlDocPtr doc,
- xmlNodePtr node,
- const xmlChar *nameSpace);
-XMLPUBFUN xmlNsPtr XMLCALL
- xmlSearchNsByHref (xmlDocPtr doc,
- xmlNodePtr node,
- const xmlChar *href);
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || \
- defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN xmlNsPtr * XMLCALL
- xmlGetNsList (const xmlDoc *doc,
- const xmlNode *node);
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) */
-
-XMLPUBFUN void XMLCALL
- xmlSetNs (xmlNodePtr node,
- xmlNsPtr ns);
-XMLPUBFUN xmlNsPtr XMLCALL
- xmlCopyNamespace (xmlNsPtr cur);
-XMLPUBFUN xmlNsPtr XMLCALL
- xmlCopyNamespaceList (xmlNsPtr cur);
-
-/*
- * Changing the content.
- */
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || \
- defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlSetProp (xmlNodePtr node,
- const xmlChar *name,
- const xmlChar *value);
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlSetNsProp (xmlNodePtr node,
- xmlNsPtr ns,
- const xmlChar *name,
- const xmlChar *value);
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || \
- defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED) */
-XMLPUBFUN xmlChar * XMLCALL
- xmlGetNoNsProp (const xmlNode *node,
- const xmlChar *name);
-XMLPUBFUN xmlChar * XMLCALL
- xmlGetProp (const xmlNode *node,
- const xmlChar *name);
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlHasProp (const xmlNode *node,
- const xmlChar *name);
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlHasNsProp (const xmlNode *node,
- const xmlChar *name,
- const xmlChar *nameSpace);
-XMLPUBFUN xmlChar * XMLCALL
- xmlGetNsProp (const xmlNode *node,
- const xmlChar *name,
- const xmlChar *nameSpace);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlStringGetNodeList (const xmlDoc *doc,
- const xmlChar *value);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlStringLenGetNodeList (const xmlDoc *doc,
- const xmlChar *value,
- int len);
-XMLPUBFUN xmlChar * XMLCALL
- xmlNodeListGetString (xmlDocPtr doc,
- const xmlNode *list,
- int inLine);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlChar * XMLCALL
- xmlNodeListGetRawString (const xmlDoc *doc,
- const xmlNode *list,
- int inLine);
-#endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlNodeSetContent (xmlNodePtr cur,
- const xmlChar *content);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN void XMLCALL
- xmlNodeSetContentLen (xmlNodePtr cur,
- const xmlChar *content,
- int len);
-#endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlNodeAddContent (xmlNodePtr cur,
- const xmlChar *content);
-XMLPUBFUN void XMLCALL
- xmlNodeAddContentLen (xmlNodePtr cur,
- const xmlChar *content,
- int len);
-XMLPUBFUN xmlChar * XMLCALL
- xmlNodeGetContent (const xmlNode *cur);
-
-XMLPUBFUN int XMLCALL
- xmlNodeBufGetContent (xmlBufferPtr buffer,
- const xmlNode *cur);
-XMLPUBFUN int XMLCALL
- xmlBufGetNodeContent (xmlBufPtr buf,
- const xmlNode *cur);
-
-XMLPUBFUN xmlChar * XMLCALL
- xmlNodeGetLang (const xmlNode *cur);
-XMLPUBFUN int XMLCALL
- xmlNodeGetSpacePreserve (const xmlNode *cur);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN void XMLCALL
- xmlNodeSetLang (xmlNodePtr cur,
- const xmlChar *lang);
-XMLPUBFUN void XMLCALL
- xmlNodeSetSpacePreserve (xmlNodePtr cur,
- int val);
-#endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN xmlChar * XMLCALL
- xmlNodeGetBase (const xmlDoc *doc,
- const xmlNode *cur);
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
-XMLPUBFUN void XMLCALL
- xmlNodeSetBase (xmlNodePtr cur,
- const xmlChar *uri);
-#endif
-
-/*
- * Removing content.
- */
-XMLPUBFUN int XMLCALL
- xmlRemoveProp (xmlAttrPtr cur);
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN int XMLCALL
- xmlUnsetNsProp (xmlNodePtr node,
- xmlNsPtr ns,
- const xmlChar *name);
-XMLPUBFUN int XMLCALL
- xmlUnsetProp (xmlNodePtr node,
- const xmlChar *name);
-#endif /* defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) */
-
-/*
- * Internal, don't use.
- */
-XMLPUBFUN void XMLCALL
- xmlBufferWriteCHAR (xmlBufferPtr buf,
- const xmlChar *string);
-XMLPUBFUN void XMLCALL
- xmlBufferWriteChar (xmlBufferPtr buf,
- const char *string);
-XMLPUBFUN void XMLCALL
- xmlBufferWriteQuotedString(xmlBufferPtr buf,
- const xmlChar *string);
-
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void xmlAttrSerializeTxtContent(xmlBufferPtr buf,
- xmlDocPtr doc,
- xmlAttrPtr attr,
- const xmlChar *string);
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#ifdef LIBXML_TREE_ENABLED
-/*
- * Namespace handling.
- */
-XMLPUBFUN int XMLCALL
- xmlReconciliateNs (xmlDocPtr doc,
- xmlNodePtr tree);
-#endif
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/*
- * Saving.
- */
-XMLPUBFUN void XMLCALL
- xmlDocDumpFormatMemory (xmlDocPtr cur,
- xmlChar **mem,
- int *size,
- int format);
-XMLPUBFUN void XMLCALL
- xmlDocDumpMemory (xmlDocPtr cur,
- xmlChar **mem,
- int *size);
-XMLPUBFUN void XMLCALL
- xmlDocDumpMemoryEnc (xmlDocPtr out_doc,
- xmlChar **doc_txt_ptr,
- int * doc_txt_len,
- const char *txt_encoding);
-XMLPUBFUN void XMLCALL
- xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc,
- xmlChar **doc_txt_ptr,
- int * doc_txt_len,
- const char *txt_encoding,
- int format);
-XMLPUBFUN int XMLCALL
- xmlDocFormatDump (FILE *f,
- xmlDocPtr cur,
- int format);
-XMLPUBFUN int XMLCALL
- xmlDocDump (FILE *f,
- xmlDocPtr cur);
-XMLPUBFUN void XMLCALL
- xmlElemDump (FILE *f,
- xmlDocPtr doc,
- xmlNodePtr cur);
-XMLPUBFUN int XMLCALL
- xmlSaveFile (const char *filename,
- xmlDocPtr cur);
-XMLPUBFUN int XMLCALL
- xmlSaveFormatFile (const char *filename,
- xmlDocPtr cur,
- int format);
-XMLPUBFUN size_t XMLCALL
- xmlBufNodeDump (xmlBufPtr buf,
- xmlDocPtr doc,
- xmlNodePtr cur,
- int level,
- int format);
-XMLPUBFUN int XMLCALL
- xmlNodeDump (xmlBufferPtr buf,
- xmlDocPtr doc,
- xmlNodePtr cur,
- int level,
- int format);
-
-XMLPUBFUN int XMLCALL
- xmlSaveFileTo (xmlOutputBufferPtr buf,
- xmlDocPtr cur,
- const char *encoding);
-XMLPUBFUN int XMLCALL
- xmlSaveFormatFileTo (xmlOutputBufferPtr buf,
- xmlDocPtr cur,
- const char *encoding,
- int format);
-XMLPUBFUN void XMLCALL
- xmlNodeDumpOutput (xmlOutputBufferPtr buf,
- xmlDocPtr doc,
- xmlNodePtr cur,
- int level,
- int format,
- const char *encoding);
-
-XMLPUBFUN int XMLCALL
- xmlSaveFormatFileEnc (const char *filename,
- xmlDocPtr cur,
- const char *encoding,
- int format);
-
-XMLPUBFUN int XMLCALL
- xmlSaveFileEnc (const char *filename,
- xmlDocPtr cur,
- const char *encoding);
-
-#endif /* LIBXML_OUTPUT_ENABLED */
-/*
- * XHTML
- */
-XMLPUBFUN int XMLCALL
- xmlIsXHTML (const xmlChar *systemID,
- const xmlChar *publicID);
-
-/*
- * Compression.
- */
-XMLPUBFUN int XMLCALL
- xmlGetDocCompressMode (const xmlDoc *doc);
-XMLPUBFUN void XMLCALL
- xmlSetDocCompressMode (xmlDocPtr doc,
- int mode);
-XMLPUBFUN int XMLCALL
- xmlGetCompressMode (void);
-XMLPUBFUN void XMLCALL
- xmlSetCompressMode (int mode);
-
-/*
-* DOM-wrapper helper functions.
-*/
-XMLPUBFUN xmlDOMWrapCtxtPtr XMLCALL
- xmlDOMWrapNewCtxt (void);
-XMLPUBFUN void XMLCALL
- xmlDOMWrapFreeCtxt (xmlDOMWrapCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlDOMWrapReconcileNamespaces(xmlDOMWrapCtxtPtr ctxt,
- xmlNodePtr elem,
- int options);
-XMLPUBFUN int XMLCALL
- xmlDOMWrapAdoptNode (xmlDOMWrapCtxtPtr ctxt,
- xmlDocPtr sourceDoc,
- xmlNodePtr node,
- xmlDocPtr destDoc,
- xmlNodePtr destParent,
- int options);
-XMLPUBFUN int XMLCALL
- xmlDOMWrapRemoveNode (xmlDOMWrapCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr node,
- int options);
-XMLPUBFUN int XMLCALL
- xmlDOMWrapCloneNode (xmlDOMWrapCtxtPtr ctxt,
- xmlDocPtr sourceDoc,
- xmlNodePtr node,
- xmlNodePtr *clonedNode,
- xmlDocPtr destDoc,
- xmlNodePtr destParent,
- int deep,
- int options);
-
-#ifdef LIBXML_TREE_ENABLED
-/*
- * 5 interfaces from DOM ElementTraversal, but different in entities
- * traversal.
- */
-XMLPUBFUN unsigned long XMLCALL
- xmlChildElementCount (xmlNodePtr parent);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlNextElementSibling (xmlNodePtr node);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlFirstElementChild (xmlNodePtr parent);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlLastElementChild (xmlNodePtr parent);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlPreviousElementSibling (xmlNodePtr node);
-#endif
-#ifdef __cplusplus
-}
-#endif
-#ifndef __XML_PARSER_H__
-#include <libxml/xmlmemory.h>
-#endif
-
-#endif /* __XML_TREE_H__ */
-
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/uri.h b/external/libxml2_android/jni/libxml2/include/libxml/uri.h
deleted file mode 100644
index db48262b..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/uri.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/**
- * Summary: library of generic URI related routines
- * Description: library of generic URI related routines
- * Implements RFC 2396
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_URI_H__
-#define __XML_URI_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlURI:
- *
- * A parsed URI reference. This is a struct containing the various fields
- * as described in RFC 2396 but separated for further processing.
- *
- * Note: query is a deprecated field which is incorrectly unescaped.
- * query_raw takes precedence over query if the former is set.
- * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00127
- */
-typedef struct _xmlURI xmlURI;
-typedef xmlURI *xmlURIPtr;
-struct _xmlURI {
- char *scheme; /* the URI scheme */
- char *opaque; /* opaque part */
- char *authority; /* the authority part */
- char *server; /* the server part */
- char *user; /* the user part */
- int port; /* the port number */
- char *path; /* the path string */
- char *query; /* the query string (deprecated - use with caution) */
- char *fragment; /* the fragment identifier */
- int cleanup; /* parsing potentially unclean URI */
- char *query_raw; /* the query string (as it appears in the URI) */
-};
-
-/*
- * This function is in tree.h:
- * xmlChar * xmlNodeGetBase (xmlDocPtr doc,
- * xmlNodePtr cur);
- */
-XMLPUBFUN xmlURIPtr XMLCALL
- xmlCreateURI (void);
-XMLPUBFUN xmlChar * XMLCALL
- xmlBuildURI (const xmlChar *URI,
- const xmlChar *base);
-XMLPUBFUN xmlChar * XMLCALL
- xmlBuildRelativeURI (const xmlChar *URI,
- const xmlChar *base);
-XMLPUBFUN xmlURIPtr XMLCALL
- xmlParseURI (const char *str);
-XMLPUBFUN xmlURIPtr XMLCALL
- xmlParseURIRaw (const char *str,
- int raw);
-XMLPUBFUN int XMLCALL
- xmlParseURIReference (xmlURIPtr uri,
- const char *str);
-XMLPUBFUN xmlChar * XMLCALL
- xmlSaveUri (xmlURIPtr uri);
-XMLPUBFUN void XMLCALL
- xmlPrintURI (FILE *stream,
- xmlURIPtr uri);
-XMLPUBFUN xmlChar * XMLCALL
- xmlURIEscapeStr (const xmlChar *str,
- const xmlChar *list);
-XMLPUBFUN char * XMLCALL
- xmlURIUnescapeString (const char *str,
- int len,
- char *target);
-XMLPUBFUN int XMLCALL
- xmlNormalizeURIPath (char *path);
-XMLPUBFUN xmlChar * XMLCALL
- xmlURIEscape (const xmlChar *str);
-XMLPUBFUN void XMLCALL
- xmlFreeURI (xmlURIPtr uri);
-XMLPUBFUN xmlChar* XMLCALL
- xmlCanonicPath (const xmlChar *path);
-XMLPUBFUN xmlChar* XMLCALL
- xmlPathToURI (const xmlChar *path);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_URI_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/valid.h b/external/libxml2_android/jni/libxml2/include/libxml/valid.h
deleted file mode 100644
index 2bc7b380..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/valid.h
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
- * Summary: The DTD validation
- * Description: API for the DTD handling and the validity checking
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-
-#ifndef __XML_VALID_H__
-#define __XML_VALID_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/xmlerror.h>
-#include <libxml/tree.h>
-#include <libxml/list.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlregexp.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Validation state added for non-determinist content model.
- */
-typedef struct _xmlValidState xmlValidState;
-typedef xmlValidState *xmlValidStatePtr;
-
-/**
- * xmlValidityErrorFunc:
- * @ctx: usually an xmlValidCtxtPtr to a validity error context,
- * but comes from ctxt->userData (which normally contains such
- * a pointer); ctxt->userData can be changed by the user.
- * @msg: the string to format *printf like vararg
- * @...: remaining arguments to the format
- *
- * Callback called when a validity error is found. This is a message
- * oriented function similar to an *printf function.
- */
-typedef void (XMLCDECL *xmlValidityErrorFunc) (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-
-/**
- * xmlValidityWarningFunc:
- * @ctx: usually an xmlValidCtxtPtr to a validity error context,
- * but comes from ctxt->userData (which normally contains such
- * a pointer); ctxt->userData can be changed by the user.
- * @msg: the string to format *printf like vararg
- * @...: remaining arguments to the format
- *
- * Callback called when a validity warning is found. This is a message
- * oriented function similar to an *printf function.
- */
-typedef void (XMLCDECL *xmlValidityWarningFunc) (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-
-#ifdef IN_LIBXML
-/**
- * XML_CTXT_FINISH_DTD_0:
- *
- * Special value for finishDtd field when embedded in an xmlParserCtxt
- */
-#define XML_CTXT_FINISH_DTD_0 0xabcd1234
-/**
- * XML_CTXT_FINISH_DTD_1:
- *
- * Special value for finishDtd field when embedded in an xmlParserCtxt
- */
-#define XML_CTXT_FINISH_DTD_1 0xabcd1235
-#endif
-
-/*
- * xmlValidCtxt:
- * An xmlValidCtxt is used for error reporting when validating.
- */
-typedef struct _xmlValidCtxt xmlValidCtxt;
-typedef xmlValidCtxt *xmlValidCtxtPtr;
-struct _xmlValidCtxt {
- void *userData; /* user specific data block */
- xmlValidityErrorFunc error; /* the callback in case of errors */
- xmlValidityWarningFunc warning; /* the callback in case of warning */
-
- /* Node analysis stack used when validating within entities */
- xmlNodePtr node; /* Current parsed Node */
- int nodeNr; /* Depth of the parsing stack */
- int nodeMax; /* Max depth of the parsing stack */
- xmlNodePtr *nodeTab; /* array of nodes */
-
- unsigned int finishDtd; /* finished validating the Dtd ? */
- xmlDocPtr doc; /* the document */
- int valid; /* temporary validity check result */
-
- /* state state used for non-determinist content validation */
- xmlValidState *vstate; /* current state */
- int vstateNr; /* Depth of the validation stack */
- int vstateMax; /* Max depth of the validation stack */
- xmlValidState *vstateTab; /* array of validation states */
-
-#ifdef LIBXML_REGEXP_ENABLED
- xmlAutomataPtr am; /* the automata */
- xmlAutomataStatePtr state; /* used to build the automata */
-#else
- void *am;
- void *state;
-#endif
-};
-
-/*
- * ALL notation declarations are stored in a table.
- * There is one table per DTD.
- */
-
-typedef struct _xmlHashTable xmlNotationTable;
-typedef xmlNotationTable *xmlNotationTablePtr;
-
-/*
- * ALL element declarations are stored in a table.
- * There is one table per DTD.
- */
-
-typedef struct _xmlHashTable xmlElementTable;
-typedef xmlElementTable *xmlElementTablePtr;
-
-/*
- * ALL attribute declarations are stored in a table.
- * There is one table per DTD.
- */
-
-typedef struct _xmlHashTable xmlAttributeTable;
-typedef xmlAttributeTable *xmlAttributeTablePtr;
-
-/*
- * ALL IDs attributes are stored in a table.
- * There is one table per document.
- */
-
-typedef struct _xmlHashTable xmlIDTable;
-typedef xmlIDTable *xmlIDTablePtr;
-
-/*
- * ALL Refs attributes are stored in a table.
- * There is one table per document.
- */
-
-typedef struct _xmlHashTable xmlRefTable;
-typedef xmlRefTable *xmlRefTablePtr;
-
-/* Notation */
-XMLPUBFUN xmlNotationPtr XMLCALL
- xmlAddNotationDecl (xmlValidCtxtPtr ctxt,
- xmlDtdPtr dtd,
- const xmlChar *name,
- const xmlChar *PublicID,
- const xmlChar *SystemID);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlNotationTablePtr XMLCALL
- xmlCopyNotationTable (xmlNotationTablePtr table);
-#endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlFreeNotationTable (xmlNotationTablePtr table);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlDumpNotationDecl (xmlBufferPtr buf,
- xmlNotationPtr nota);
-XMLPUBFUN void XMLCALL
- xmlDumpNotationTable (xmlBufferPtr buf,
- xmlNotationTablePtr table);
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/* Element Content */
-/* the non Doc version are being deprecated */
-XMLPUBFUN xmlElementContentPtr XMLCALL
- xmlNewElementContent (const xmlChar *name,
- xmlElementContentType type);
-XMLPUBFUN xmlElementContentPtr XMLCALL
- xmlCopyElementContent (xmlElementContentPtr content);
-XMLPUBFUN void XMLCALL
- xmlFreeElementContent (xmlElementContentPtr cur);
-/* the new versions with doc argument */
-XMLPUBFUN xmlElementContentPtr XMLCALL
- xmlNewDocElementContent (xmlDocPtr doc,
- const xmlChar *name,
- xmlElementContentType type);
-XMLPUBFUN xmlElementContentPtr XMLCALL
- xmlCopyDocElementContent(xmlDocPtr doc,
- xmlElementContentPtr content);
-XMLPUBFUN void XMLCALL
- xmlFreeDocElementContent(xmlDocPtr doc,
- xmlElementContentPtr cur);
-XMLPUBFUN void XMLCALL
- xmlSnprintfElementContent(char *buf,
- int size,
- xmlElementContentPtr content,
- int englob);
-#ifdef LIBXML_OUTPUT_ENABLED
-/* DEPRECATED */
-XMLPUBFUN void XMLCALL
- xmlSprintfElementContent(char *buf,
- xmlElementContentPtr content,
- int englob);
-#endif /* LIBXML_OUTPUT_ENABLED */
-/* DEPRECATED */
-
-/* Element */
-XMLPUBFUN xmlElementPtr XMLCALL
- xmlAddElementDecl (xmlValidCtxtPtr ctxt,
- xmlDtdPtr dtd,
- const xmlChar *name,
- xmlElementTypeVal type,
- xmlElementContentPtr content);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlElementTablePtr XMLCALL
- xmlCopyElementTable (xmlElementTablePtr table);
-#endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlFreeElementTable (xmlElementTablePtr table);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlDumpElementTable (xmlBufferPtr buf,
- xmlElementTablePtr table);
-XMLPUBFUN void XMLCALL
- xmlDumpElementDecl (xmlBufferPtr buf,
- xmlElementPtr elem);
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/* Enumeration */
-XMLPUBFUN xmlEnumerationPtr XMLCALL
- xmlCreateEnumeration (const xmlChar *name);
-XMLPUBFUN void XMLCALL
- xmlFreeEnumeration (xmlEnumerationPtr cur);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlEnumerationPtr XMLCALL
- xmlCopyEnumeration (xmlEnumerationPtr cur);
-#endif /* LIBXML_TREE_ENABLED */
-
-/* Attribute */
-XMLPUBFUN xmlAttributePtr XMLCALL
- xmlAddAttributeDecl (xmlValidCtxtPtr ctxt,
- xmlDtdPtr dtd,
- const xmlChar *elem,
- const xmlChar *name,
- const xmlChar *ns,
- xmlAttributeType type,
- xmlAttributeDefault def,
- const xmlChar *defaultValue,
- xmlEnumerationPtr tree);
-#ifdef LIBXML_TREE_ENABLED
-XMLPUBFUN xmlAttributeTablePtr XMLCALL
- xmlCopyAttributeTable (xmlAttributeTablePtr table);
-#endif /* LIBXML_TREE_ENABLED */
-XMLPUBFUN void XMLCALL
- xmlFreeAttributeTable (xmlAttributeTablePtr table);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlDumpAttributeTable (xmlBufferPtr buf,
- xmlAttributeTablePtr table);
-XMLPUBFUN void XMLCALL
- xmlDumpAttributeDecl (xmlBufferPtr buf,
- xmlAttributePtr attr);
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/* IDs */
-XMLPUBFUN xmlIDPtr XMLCALL
- xmlAddID (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- const xmlChar *value,
- xmlAttrPtr attr);
-XMLPUBFUN void XMLCALL
- xmlFreeIDTable (xmlIDTablePtr table);
-XMLPUBFUN xmlAttrPtr XMLCALL
- xmlGetID (xmlDocPtr doc,
- const xmlChar *ID);
-XMLPUBFUN int XMLCALL
- xmlIsID (xmlDocPtr doc,
- xmlNodePtr elem,
- xmlAttrPtr attr);
-XMLPUBFUN int XMLCALL
- xmlRemoveID (xmlDocPtr doc,
- xmlAttrPtr attr);
-
-/* IDREFs */
-XMLPUBFUN xmlRefPtr XMLCALL
- xmlAddRef (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- const xmlChar *value,
- xmlAttrPtr attr);
-XMLPUBFUN void XMLCALL
- xmlFreeRefTable (xmlRefTablePtr table);
-XMLPUBFUN int XMLCALL
- xmlIsRef (xmlDocPtr doc,
- xmlNodePtr elem,
- xmlAttrPtr attr);
-XMLPUBFUN int XMLCALL
- xmlRemoveRef (xmlDocPtr doc,
- xmlAttrPtr attr);
-XMLPUBFUN xmlListPtr XMLCALL
- xmlGetRefs (xmlDocPtr doc,
- const xmlChar *ID);
-
-/**
- * The public function calls related to validity checking.
- */
-#ifdef LIBXML_VALID_ENABLED
-/* Allocate/Release Validation Contexts */
-XMLPUBFUN xmlValidCtxtPtr XMLCALL
- xmlNewValidCtxt(void);
-XMLPUBFUN void XMLCALL
- xmlFreeValidCtxt(xmlValidCtxtPtr);
-
-XMLPUBFUN int XMLCALL
- xmlValidateRoot (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc);
-XMLPUBFUN int XMLCALL
- xmlValidateElementDecl (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlElementPtr elem);
-XMLPUBFUN xmlChar * XMLCALL
- xmlValidNormalizeAttributeValue(xmlDocPtr doc,
- xmlNodePtr elem,
- const xmlChar *name,
- const xmlChar *value);
-XMLPUBFUN xmlChar * XMLCALL
- xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem,
- const xmlChar *name,
- const xmlChar *value);
-XMLPUBFUN int XMLCALL
- xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlAttributePtr attr);
-XMLPUBFUN int XMLCALL
- xmlValidateAttributeValue(xmlAttributeType type,
- const xmlChar *value);
-XMLPUBFUN int XMLCALL
- xmlValidateNotationDecl (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNotationPtr nota);
-XMLPUBFUN int XMLCALL
- xmlValidateDtd (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlDtdPtr dtd);
-XMLPUBFUN int XMLCALL
- xmlValidateDtdFinal (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc);
-XMLPUBFUN int XMLCALL
- xmlValidateDocument (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc);
-XMLPUBFUN int XMLCALL
- xmlValidateElement (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem);
-XMLPUBFUN int XMLCALL
- xmlValidateOneElement (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem);
-XMLPUBFUN int XMLCALL
- xmlValidateOneAttribute (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem,
- xmlAttrPtr attr,
- const xmlChar *value);
-XMLPUBFUN int XMLCALL
- xmlValidateOneNamespace (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem,
- const xmlChar *prefix,
- xmlNsPtr ns,
- const xmlChar *value);
-XMLPUBFUN int XMLCALL
- xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt,
- xmlDocPtr doc);
-#endif /* LIBXML_VALID_ENABLED */
-
-#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN int XMLCALL
- xmlValidateNotationUse (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- const xmlChar *notationName);
-#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
-
-XMLPUBFUN int XMLCALL
- xmlIsMixedElement (xmlDocPtr doc,
- const xmlChar *name);
-XMLPUBFUN xmlAttributePtr XMLCALL
- xmlGetDtdAttrDesc (xmlDtdPtr dtd,
- const xmlChar *elem,
- const xmlChar *name);
-XMLPUBFUN xmlAttributePtr XMLCALL
- xmlGetDtdQAttrDesc (xmlDtdPtr dtd,
- const xmlChar *elem,
- const xmlChar *name,
- const xmlChar *prefix);
-XMLPUBFUN xmlNotationPtr XMLCALL
- xmlGetDtdNotationDesc (xmlDtdPtr dtd,
- const xmlChar *name);
-XMLPUBFUN xmlElementPtr XMLCALL
- xmlGetDtdQElementDesc (xmlDtdPtr dtd,
- const xmlChar *name,
- const xmlChar *prefix);
-XMLPUBFUN xmlElementPtr XMLCALL
- xmlGetDtdElementDesc (xmlDtdPtr dtd,
- const xmlChar *name);
-
-#ifdef LIBXML_VALID_ENABLED
-
-XMLPUBFUN int XMLCALL
- xmlValidGetPotentialChildren(xmlElementContent *ctree,
- const xmlChar **names,
- int *len,
- int max);
-
-XMLPUBFUN int XMLCALL
- xmlValidGetValidElements(xmlNode *prev,
- xmlNode *next,
- const xmlChar **names,
- int max);
-XMLPUBFUN int XMLCALL
- xmlValidateNameValue (const xmlChar *value);
-XMLPUBFUN int XMLCALL
- xmlValidateNamesValue (const xmlChar *value);
-XMLPUBFUN int XMLCALL
- xmlValidateNmtokenValue (const xmlChar *value);
-XMLPUBFUN int XMLCALL
- xmlValidateNmtokensValue(const xmlChar *value);
-
-#ifdef LIBXML_REGEXP_ENABLED
-/*
- * Validation based on the regexp support
- */
-XMLPUBFUN int XMLCALL
- xmlValidBuildContentModel(xmlValidCtxtPtr ctxt,
- xmlElementPtr elem);
-
-XMLPUBFUN int XMLCALL
- xmlValidatePushElement (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem,
- const xmlChar *qname);
-XMLPUBFUN int XMLCALL
- xmlValidatePushCData (xmlValidCtxtPtr ctxt,
- const xmlChar *data,
- int len);
-XMLPUBFUN int XMLCALL
- xmlValidatePopElement (xmlValidCtxtPtr ctxt,
- xmlDocPtr doc,
- xmlNodePtr elem,
- const xmlChar *qname);
-#endif /* LIBXML_REGEXP_ENABLED */
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_VALID_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xinclude.h b/external/libxml2_android/jni/libxml2/include/libxml/xinclude.h
deleted file mode 100644
index 863ab25a..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xinclude.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Summary: implementation of XInclude
- * Description: API to handle XInclude processing,
- * implements the
- * World Wide Web Consortium Last Call Working Draft 10 November 2003
- * http://www.w3.org/TR/2003/WD-xinclude-20031110
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_XINCLUDE_H__
-#define __XML_XINCLUDE_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-
-#ifdef LIBXML_XINCLUDE_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * XINCLUDE_NS:
- *
- * Macro defining the Xinclude namespace: http://www.w3.org/2003/XInclude
- */
-#define XINCLUDE_NS (const xmlChar *) "http://www.w3.org/2003/XInclude"
-/**
- * XINCLUDE_OLD_NS:
- *
- * Macro defining the draft Xinclude namespace: http://www.w3.org/2001/XInclude
- */
-#define XINCLUDE_OLD_NS (const xmlChar *) "http://www.w3.org/2001/XInclude"
-/**
- * XINCLUDE_NODE:
- *
- * Macro defining "include"
- */
-#define XINCLUDE_NODE (const xmlChar *) "include"
-/**
- * XINCLUDE_FALLBACK:
- *
- * Macro defining "fallback"
- */
-#define XINCLUDE_FALLBACK (const xmlChar *) "fallback"
-/**
- * XINCLUDE_HREF:
- *
- * Macro defining "href"
- */
-#define XINCLUDE_HREF (const xmlChar *) "href"
-/**
- * XINCLUDE_PARSE:
- *
- * Macro defining "parse"
- */
-#define XINCLUDE_PARSE (const xmlChar *) "parse"
-/**
- * XINCLUDE_PARSE_XML:
- *
- * Macro defining "xml"
- */
-#define XINCLUDE_PARSE_XML (const xmlChar *) "xml"
-/**
- * XINCLUDE_PARSE_TEXT:
- *
- * Macro defining "text"
- */
-#define XINCLUDE_PARSE_TEXT (const xmlChar *) "text"
-/**
- * XINCLUDE_PARSE_ENCODING:
- *
- * Macro defining "encoding"
- */
-#define XINCLUDE_PARSE_ENCODING (const xmlChar *) "encoding"
-/**
- * XINCLUDE_PARSE_XPOINTER:
- *
- * Macro defining "xpointer"
- */
-#define XINCLUDE_PARSE_XPOINTER (const xmlChar *) "xpointer"
-
-typedef struct _xmlXIncludeCtxt xmlXIncludeCtxt;
-typedef xmlXIncludeCtxt *xmlXIncludeCtxtPtr;
-
-/*
- * standalone processing
- */
-XMLPUBFUN int XMLCALL
- xmlXIncludeProcess (xmlDocPtr doc);
-XMLPUBFUN int XMLCALL
- xmlXIncludeProcessFlags (xmlDocPtr doc,
- int flags);
-XMLPUBFUN int XMLCALL
- xmlXIncludeProcessFlagsData(xmlDocPtr doc,
- int flags,
- void *data);
-XMLPUBFUN int XMLCALL
- xmlXIncludeProcessTreeFlagsData(xmlNodePtr tree,
- int flags,
- void *data);
-XMLPUBFUN int XMLCALL
- xmlXIncludeProcessTree (xmlNodePtr tree);
-XMLPUBFUN int XMLCALL
- xmlXIncludeProcessTreeFlags(xmlNodePtr tree,
- int flags);
-/*
- * contextual processing
- */
-XMLPUBFUN xmlXIncludeCtxtPtr XMLCALL
- xmlXIncludeNewContext (xmlDocPtr doc);
-XMLPUBFUN int XMLCALL
- xmlXIncludeSetFlags (xmlXIncludeCtxtPtr ctxt,
- int flags);
-XMLPUBFUN void XMLCALL
- xmlXIncludeFreeContext (xmlXIncludeCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlXIncludeProcessNode (xmlXIncludeCtxtPtr ctxt,
- xmlNodePtr tree);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_XINCLUDE_ENABLED */
-
-#endif /* __XML_XINCLUDE_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xlink.h b/external/libxml2_android/jni/libxml2/include/libxml/xlink.h
deleted file mode 100644
index a209a997..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xlink.h
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Summary: unfinished XLink detection module
- * Description: unfinished XLink detection module
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_XLINK_H__
-#define __XML_XLINK_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-
-#ifdef LIBXML_XPTR_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Various defines for the various Link properties.
- *
- * NOTE: the link detection layer will try to resolve QName expansion
- * of namespaces. If "foo" is the prefix for "http://foo.com/"
- * then the link detection layer will expand role="foo:myrole"
- * to "http://foo.com/:myrole".
- * NOTE: the link detection layer will expand URI-Refences found on
- * href attributes by using the base mechanism if found.
- */
-typedef xmlChar *xlinkHRef;
-typedef xmlChar *xlinkRole;
-typedef xmlChar *xlinkTitle;
-
-typedef enum {
- XLINK_TYPE_NONE = 0,
- XLINK_TYPE_SIMPLE,
- XLINK_TYPE_EXTENDED,
- XLINK_TYPE_EXTENDED_SET
-} xlinkType;
-
-typedef enum {
- XLINK_SHOW_NONE = 0,
- XLINK_SHOW_NEW,
- XLINK_SHOW_EMBED,
- XLINK_SHOW_REPLACE
-} xlinkShow;
-
-typedef enum {
- XLINK_ACTUATE_NONE = 0,
- XLINK_ACTUATE_AUTO,
- XLINK_ACTUATE_ONREQUEST
-} xlinkActuate;
-
-/**
- * xlinkNodeDetectFunc:
- * @ctx: user data pointer
- * @node: the node to check
- *
- * This is the prototype for the link detection routine.
- * It calls the default link detection callbacks upon link detection.
- */
-typedef void (*xlinkNodeDetectFunc) (void *ctx, xmlNodePtr node);
-
-/*
- * The link detection module interact with the upper layers using
- * a set of callback registered at parsing time.
- */
-
-/**
- * xlinkSimpleLinkFunk:
- * @ctx: user data pointer
- * @node: the node carrying the link
- * @href: the target of the link
- * @role: the role string
- * @title: the link title
- *
- * This is the prototype for a simple link detection callback.
- */
-typedef void
-(*xlinkSimpleLinkFunk) (void *ctx,
- xmlNodePtr node,
- const xlinkHRef href,
- const xlinkRole role,
- const xlinkTitle title);
-
-/**
- * xlinkExtendedLinkFunk:
- * @ctx: user data pointer
- * @node: the node carrying the link
- * @nbLocators: the number of locators detected on the link
- * @hrefs: pointer to the array of locator hrefs
- * @roles: pointer to the array of locator roles
- * @nbArcs: the number of arcs detected on the link
- * @from: pointer to the array of source roles found on the arcs
- * @to: pointer to the array of target roles found on the arcs
- * @show: array of values for the show attributes found on the arcs
- * @actuate: array of values for the actuate attributes found on the arcs
- * @nbTitles: the number of titles detected on the link
- * @title: array of titles detected on the link
- * @langs: array of xml:lang values for the titles
- *
- * This is the prototype for a extended link detection callback.
- */
-typedef void
-(*xlinkExtendedLinkFunk)(void *ctx,
- xmlNodePtr node,
- int nbLocators,
- const xlinkHRef *hrefs,
- const xlinkRole *roles,
- int nbArcs,
- const xlinkRole *from,
- const xlinkRole *to,
- xlinkShow *show,
- xlinkActuate *actuate,
- int nbTitles,
- const xlinkTitle *titles,
- const xmlChar **langs);
-
-/**
- * xlinkExtendedLinkSetFunk:
- * @ctx: user data pointer
- * @node: the node carrying the link
- * @nbLocators: the number of locators detected on the link
- * @hrefs: pointer to the array of locator hrefs
- * @roles: pointer to the array of locator roles
- * @nbTitles: the number of titles detected on the link
- * @title: array of titles detected on the link
- * @langs: array of xml:lang values for the titles
- *
- * This is the prototype for a extended link set detection callback.
- */
-typedef void
-(*xlinkExtendedLinkSetFunk) (void *ctx,
- xmlNodePtr node,
- int nbLocators,
- const xlinkHRef *hrefs,
- const xlinkRole *roles,
- int nbTitles,
- const xlinkTitle *titles,
- const xmlChar **langs);
-
-/**
- * This is the structure containing a set of Links detection callbacks.
- *
- * There is no default xlink callbacks, if one want to get link
- * recognition activated, those call backs must be provided before parsing.
- */
-typedef struct _xlinkHandler xlinkHandler;
-typedef xlinkHandler *xlinkHandlerPtr;
-struct _xlinkHandler {
- xlinkSimpleLinkFunk simple;
- xlinkExtendedLinkFunk extended;
- xlinkExtendedLinkSetFunk set;
-};
-
-/*
- * The default detection routine, can be overridden, they call the default
- * detection callbacks.
- */
-
-XMLPUBFUN xlinkNodeDetectFunc XMLCALL
- xlinkGetDefaultDetect (void);
-XMLPUBFUN void XMLCALL
- xlinkSetDefaultDetect (xlinkNodeDetectFunc func);
-
-/*
- * Routines to set/get the default handlers.
- */
-XMLPUBFUN xlinkHandlerPtr XMLCALL
- xlinkGetDefaultHandler (void);
-XMLPUBFUN void XMLCALL
- xlinkSetDefaultHandler (xlinkHandlerPtr handler);
-
-/*
- * Link detection module itself.
- */
-XMLPUBFUN xlinkType XMLCALL
- xlinkIsLink (xmlDocPtr doc,
- xmlNodePtr node);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_XPTR_ENABLED */
-
-#endif /* __XML_XLINK_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlIO.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlIO.h
deleted file mode 100644
index 8d3fdef5..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlIO.h
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
- * Summary: interface for the I/O interfaces used by the parser
- * Description: interface for the I/O interfaces used by the parser
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_IO_H__
-#define __XML_IO_H__
-
-#include <stdio.h>
-#include <libxml/xmlversion.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Those are the functions and datatypes for the parser input
- * I/O structures.
- */
-
-/**
- * xmlInputMatchCallback:
- * @filename: the filename or URI
- *
- * Callback used in the I/O Input API to detect if the current handler
- * can provide input fonctionnalities for this resource.
- *
- * Returns 1 if yes and 0 if another Input module should be used
- */
-typedef int (XMLCALL *xmlInputMatchCallback) (char const *filename);
-/**
- * xmlInputOpenCallback:
- * @filename: the filename or URI
- *
- * Callback used in the I/O Input API to open the resource
- *
- * Returns an Input context or NULL in case or error
- */
-typedef void * (XMLCALL *xmlInputOpenCallback) (char const *filename);
-/**
- * xmlInputReadCallback:
- * @context: an Input context
- * @buffer: the buffer to store data read
- * @len: the length of the buffer in bytes
- *
- * Callback used in the I/O Input API to read the resource
- *
- * Returns the number of bytes read or -1 in case of error
- */
-typedef int (XMLCALL *xmlInputReadCallback) (void * context, char * buffer, int len);
-/**
- * xmlInputCloseCallback:
- * @context: an Input context
- *
- * Callback used in the I/O Input API to close the resource
- *
- * Returns 0 or -1 in case of error
- */
-typedef int (XMLCALL *xmlInputCloseCallback) (void * context);
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/*
- * Those are the functions and datatypes for the library output
- * I/O structures.
- */
-
-/**
- * xmlOutputMatchCallback:
- * @filename: the filename or URI
- *
- * Callback used in the I/O Output API to detect if the current handler
- * can provide output fonctionnalities for this resource.
- *
- * Returns 1 if yes and 0 if another Output module should be used
- */
-typedef int (XMLCALL *xmlOutputMatchCallback) (char const *filename);
-/**
- * xmlOutputOpenCallback:
- * @filename: the filename or URI
- *
- * Callback used in the I/O Output API to open the resource
- *
- * Returns an Output context or NULL in case or error
- */
-typedef void * (XMLCALL *xmlOutputOpenCallback) (char const *filename);
-/**
- * xmlOutputWriteCallback:
- * @context: an Output context
- * @buffer: the buffer of data to write
- * @len: the length of the buffer in bytes
- *
- * Callback used in the I/O Output API to write to the resource
- *
- * Returns the number of bytes written or -1 in case of error
- */
-typedef int (XMLCALL *xmlOutputWriteCallback) (void * context, const char * buffer,
- int len);
-/**
- * xmlOutputCloseCallback:
- * @context: an Output context
- *
- * Callback used in the I/O Output API to close the resource
- *
- * Returns 0 or -1 in case of error
- */
-typedef int (XMLCALL *xmlOutputCloseCallback) (void * context);
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#ifdef __cplusplus
-}
-#endif
-
-#include <libxml/globals.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/encoding.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-struct _xmlParserInputBuffer {
- void* context;
- xmlInputReadCallback readcallback;
- xmlInputCloseCallback closecallback;
-
- xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
-
- xmlBufPtr buffer; /* Local buffer encoded in UTF-8 */
- xmlBufPtr raw; /* if encoder != NULL buffer for raw input */
- int compressed; /* -1=unknown, 0=not compressed, 1=compressed */
- int error;
- unsigned long rawconsumed;/* amount consumed from raw */
-};
-
-
-#ifdef LIBXML_OUTPUT_ENABLED
-struct _xmlOutputBuffer {
- void* context;
- xmlOutputWriteCallback writecallback;
- xmlOutputCloseCallback closecallback;
-
- xmlCharEncodingHandlerPtr encoder; /* I18N conversions to UTF-8 */
-
- xmlBufPtr buffer; /* Local buffer encoded in UTF-8 or ISOLatin */
- xmlBufPtr conv; /* if encoder != NULL buffer for output */
- int written; /* total number of byte written */
- int error;
-};
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/*
- * Interfaces for input
- */
-XMLPUBFUN void XMLCALL
- xmlCleanupInputCallbacks (void);
-
-XMLPUBFUN int XMLCALL
- xmlPopInputCallbacks (void);
-
-XMLPUBFUN void XMLCALL
- xmlRegisterDefaultInputCallbacks (void);
-XMLPUBFUN xmlParserInputBufferPtr XMLCALL
- xmlAllocParserInputBuffer (xmlCharEncoding enc);
-
-XMLPUBFUN xmlParserInputBufferPtr XMLCALL
- xmlParserInputBufferCreateFilename (const char *URI,
- xmlCharEncoding enc);
-XMLPUBFUN xmlParserInputBufferPtr XMLCALL
- xmlParserInputBufferCreateFile (FILE *file,
- xmlCharEncoding enc);
-XMLPUBFUN xmlParserInputBufferPtr XMLCALL
- xmlParserInputBufferCreateFd (int fd,
- xmlCharEncoding enc);
-XMLPUBFUN xmlParserInputBufferPtr XMLCALL
- xmlParserInputBufferCreateMem (const char *mem, int size,
- xmlCharEncoding enc);
-XMLPUBFUN xmlParserInputBufferPtr XMLCALL
- xmlParserInputBufferCreateStatic (const char *mem, int size,
- xmlCharEncoding enc);
-XMLPUBFUN xmlParserInputBufferPtr XMLCALL
- xmlParserInputBufferCreateIO (xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose,
- void *ioctx,
- xmlCharEncoding enc);
-XMLPUBFUN int XMLCALL
- xmlParserInputBufferRead (xmlParserInputBufferPtr in,
- int len);
-XMLPUBFUN int XMLCALL
- xmlParserInputBufferGrow (xmlParserInputBufferPtr in,
- int len);
-XMLPUBFUN int XMLCALL
- xmlParserInputBufferPush (xmlParserInputBufferPtr in,
- int len,
- const char *buf);
-XMLPUBFUN void XMLCALL
- xmlFreeParserInputBuffer (xmlParserInputBufferPtr in);
-XMLPUBFUN char * XMLCALL
- xmlParserGetDirectory (const char *filename);
-
-XMLPUBFUN int XMLCALL
- xmlRegisterInputCallbacks (xmlInputMatchCallback matchFunc,
- xmlInputOpenCallback openFunc,
- xmlInputReadCallback readFunc,
- xmlInputCloseCallback closeFunc);
-
-xmlParserInputBufferPtr
- __xmlParserInputBufferCreateFilename(const char *URI,
- xmlCharEncoding enc);
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/*
- * Interfaces for output
- */
-XMLPUBFUN void XMLCALL
- xmlCleanupOutputCallbacks (void);
-XMLPUBFUN void XMLCALL
- xmlRegisterDefaultOutputCallbacks(void);
-XMLPUBFUN xmlOutputBufferPtr XMLCALL
- xmlAllocOutputBuffer (xmlCharEncodingHandlerPtr encoder);
-
-XMLPUBFUN xmlOutputBufferPtr XMLCALL
- xmlOutputBufferCreateFilename (const char *URI,
- xmlCharEncodingHandlerPtr encoder,
- int compression);
-
-XMLPUBFUN xmlOutputBufferPtr XMLCALL
- xmlOutputBufferCreateFile (FILE *file,
- xmlCharEncodingHandlerPtr encoder);
-
-XMLPUBFUN xmlOutputBufferPtr XMLCALL
- xmlOutputBufferCreateBuffer (xmlBufferPtr buffer,
- xmlCharEncodingHandlerPtr encoder);
-
-XMLPUBFUN xmlOutputBufferPtr XMLCALL
- xmlOutputBufferCreateFd (int fd,
- xmlCharEncodingHandlerPtr encoder);
-
-XMLPUBFUN xmlOutputBufferPtr XMLCALL
- xmlOutputBufferCreateIO (xmlOutputWriteCallback iowrite,
- xmlOutputCloseCallback ioclose,
- void *ioctx,
- xmlCharEncodingHandlerPtr encoder);
-
-/* Couple of APIs to get the output without digging into the buffers */
-XMLPUBFUN const xmlChar * XMLCALL
- xmlOutputBufferGetContent (xmlOutputBufferPtr out);
-XMLPUBFUN size_t XMLCALL
- xmlOutputBufferGetSize (xmlOutputBufferPtr out);
-
-XMLPUBFUN int XMLCALL
- xmlOutputBufferWrite (xmlOutputBufferPtr out,
- int len,
- const char *buf);
-XMLPUBFUN int XMLCALL
- xmlOutputBufferWriteString (xmlOutputBufferPtr out,
- const char *str);
-XMLPUBFUN int XMLCALL
- xmlOutputBufferWriteEscape (xmlOutputBufferPtr out,
- const xmlChar *str,
- xmlCharEncodingOutputFunc escaping);
-
-XMLPUBFUN int XMLCALL
- xmlOutputBufferFlush (xmlOutputBufferPtr out);
-XMLPUBFUN int XMLCALL
- xmlOutputBufferClose (xmlOutputBufferPtr out);
-
-XMLPUBFUN int XMLCALL
- xmlRegisterOutputCallbacks (xmlOutputMatchCallback matchFunc,
- xmlOutputOpenCallback openFunc,
- xmlOutputWriteCallback writeFunc,
- xmlOutputCloseCallback closeFunc);
-
-xmlOutputBufferPtr
- __xmlOutputBufferCreateFilename(const char *URI,
- xmlCharEncodingHandlerPtr encoder,
- int compression);
-
-#ifdef LIBXML_HTTP_ENABLED
-/* This function only exists if HTTP support built into the library */
-XMLPUBFUN void XMLCALL
- xmlRegisterHTTPPostCallbacks (void );
-#endif /* LIBXML_HTTP_ENABLED */
-
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlCheckHTTPInput (xmlParserCtxtPtr ctxt,
- xmlParserInputPtr ret);
-
-/*
- * A predefined entity loader disabling network accesses
- */
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlNoNetExternalEntityLoader (const char *URL,
- const char *ID,
- xmlParserCtxtPtr ctxt);
-
-/*
- * A predefined entity loader external entity expansion
- */
-XMLPUBFUN xmlParserInputPtr XMLCALL
- xmlNoXxeExternalEntityLoader (const char *URL,
- const char *ID,
- xmlParserCtxtPtr ctxt);
-
-/*
- * xmlNormalizeWindowsPath is obsolete, don't use it.
- * Check xmlCanonicPath in uri.h for a better alternative.
- */
-XMLPUBFUN xmlChar * XMLCALL
- xmlNormalizeWindowsPath (const xmlChar *path);
-
-XMLPUBFUN int XMLCALL
- xmlCheckFilename (const char *path);
-/**
- * Default 'file://' protocol callbacks
- */
-XMLPUBFUN int XMLCALL
- xmlFileMatch (const char *filename);
-XMLPUBFUN void * XMLCALL
- xmlFileOpen (const char *filename);
-XMLPUBFUN int XMLCALL
- xmlFileRead (void * context,
- char * buffer,
- int len);
-XMLPUBFUN int XMLCALL
- xmlFileClose (void * context);
-
-/**
- * Default 'http://' protocol callbacks
- */
-#ifdef LIBXML_HTTP_ENABLED
-XMLPUBFUN int XMLCALL
- xmlIOHTTPMatch (const char *filename);
-XMLPUBFUN void * XMLCALL
- xmlIOHTTPOpen (const char *filename);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void * XMLCALL
- xmlIOHTTPOpenW (const char * post_uri,
- int compression );
-#endif /* LIBXML_OUTPUT_ENABLED */
-XMLPUBFUN int XMLCALL
- xmlIOHTTPRead (void * context,
- char * buffer,
- int len);
-XMLPUBFUN int XMLCALL
- xmlIOHTTPClose (void * context);
-#endif /* LIBXML_HTTP_ENABLED */
-
-/**
- * Default 'ftp://' protocol callbacks
- */
-#ifdef LIBXML_FTP_ENABLED
-XMLPUBFUN int XMLCALL
- xmlIOFTPMatch (const char *filename);
-XMLPUBFUN void * XMLCALL
- xmlIOFTPOpen (const char *filename);
-XMLPUBFUN int XMLCALL
- xmlIOFTPRead (void * context,
- char * buffer,
- int len);
-XMLPUBFUN int XMLCALL
- xmlIOFTPClose (void * context);
-#endif /* LIBXML_FTP_ENABLED */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_IO_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlautomata.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlautomata.h
deleted file mode 100644
index bf1b131c..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlautomata.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Summary: API to build regexp automata
- * Description: the API to build regexp automata
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_AUTOMATA_H__
-#define __XML_AUTOMATA_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-
-#ifdef LIBXML_REGEXP_ENABLED
-#ifdef LIBXML_AUTOMATA_ENABLED
-#include <libxml/xmlregexp.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlAutomataPtr:
- *
- * A libxml automata description, It can be compiled into a regexp
- */
-typedef struct _xmlAutomata xmlAutomata;
-typedef xmlAutomata *xmlAutomataPtr;
-
-/**
- * xmlAutomataStatePtr:
- *
- * A state int the automata description,
- */
-typedef struct _xmlAutomataState xmlAutomataState;
-typedef xmlAutomataState *xmlAutomataStatePtr;
-
-/*
- * Building API
- */
-XMLPUBFUN xmlAutomataPtr XMLCALL
- xmlNewAutomata (void);
-XMLPUBFUN void XMLCALL
- xmlFreeAutomata (xmlAutomataPtr am);
-
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataGetInitState (xmlAutomataPtr am);
-XMLPUBFUN int XMLCALL
- xmlAutomataSetFinalState (xmlAutomataPtr am,
- xmlAutomataStatePtr state);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewState (xmlAutomataPtr am);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewTransition (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- const xmlChar *token,
- void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewTransition2 (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- const xmlChar *token,
- const xmlChar *token2,
- void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewNegTrans (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- const xmlChar *token,
- const xmlChar *token2,
- void *data);
-
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewCountTrans (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- const xmlChar *token,
- int min,
- int max,
- void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewCountTrans2 (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- const xmlChar *token,
- const xmlChar *token2,
- int min,
- int max,
- void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewOnceTrans (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- const xmlChar *token,
- int min,
- int max,
- void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewOnceTrans2 (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- const xmlChar *token,
- const xmlChar *token2,
- int min,
- int max,
- void *data);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewAllTrans (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- int lax);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewEpsilon (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewCountedTrans (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- int counter);
-XMLPUBFUN xmlAutomataStatePtr XMLCALL
- xmlAutomataNewCounterTrans (xmlAutomataPtr am,
- xmlAutomataStatePtr from,
- xmlAutomataStatePtr to,
- int counter);
-XMLPUBFUN int XMLCALL
- xmlAutomataNewCounter (xmlAutomataPtr am,
- int min,
- int max);
-
-XMLPUBFUN xmlRegexpPtr XMLCALL
- xmlAutomataCompile (xmlAutomataPtr am);
-XMLPUBFUN int XMLCALL
- xmlAutomataIsDeterminist (xmlAutomataPtr am);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_AUTOMATA_ENABLED */
-#endif /* LIBXML_REGEXP_ENABLED */
-
-#endif /* __XML_AUTOMATA_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlerror.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlerror.h
deleted file mode 100644
index 3036062d..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlerror.h
+++ /dev/null
@@ -1,946 +0,0 @@
-/*
- * Summary: error handling
- * Description: the API used to report errors
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#include <libxml/parser.h>
-
-#ifndef __XML_ERROR_H__
-#define __XML_ERROR_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlErrorLevel:
- *
- * Indicates the level of an error
- */
-typedef enum {
- XML_ERR_NONE = 0,
- XML_ERR_WARNING = 1, /* A simple warning */
- XML_ERR_ERROR = 2, /* A recoverable error */
- XML_ERR_FATAL = 3 /* A fatal error */
-} xmlErrorLevel;
-
-/**
- * xmlErrorDomain:
- *
- * Indicates where an error may have come from
- */
-typedef enum {
- XML_FROM_NONE = 0,
- XML_FROM_PARSER, /* The XML parser */
- XML_FROM_TREE, /* The tree module */
- XML_FROM_NAMESPACE, /* The XML Namespace module */
- XML_FROM_DTD, /* The XML DTD validation with parser context*/
- XML_FROM_HTML, /* The HTML parser */
- XML_FROM_MEMORY, /* The memory allocator */
- XML_FROM_OUTPUT, /* The serialization code */
- XML_FROM_IO, /* The Input/Output stack */
- XML_FROM_FTP, /* The FTP module */
- XML_FROM_HTTP, /* The HTTP module */
- XML_FROM_XINCLUDE, /* The XInclude processing */
- XML_FROM_XPATH, /* The XPath module */
- XML_FROM_XPOINTER, /* The XPointer module */
- XML_FROM_REGEXP, /* The regular expressions module */
- XML_FROM_DATATYPE, /* The W3C XML Schemas Datatype module */
- XML_FROM_SCHEMASP, /* The W3C XML Schemas parser module */
- XML_FROM_SCHEMASV, /* The W3C XML Schemas validation module */
- XML_FROM_RELAXNGP, /* The Relax-NG parser module */
- XML_FROM_RELAXNGV, /* The Relax-NG validator module */
- XML_FROM_CATALOG, /* The Catalog module */
- XML_FROM_C14N, /* The Canonicalization module */
- XML_FROM_XSLT, /* The XSLT engine from libxslt */
- XML_FROM_VALID, /* The XML DTD validation with valid context */
- XML_FROM_CHECK, /* The error checking module */
- XML_FROM_WRITER, /* The xmlwriter module */
- XML_FROM_MODULE, /* The dynamically loaded module module*/
- XML_FROM_I18N, /* The module handling character conversion */
- XML_FROM_SCHEMATRONV,/* The Schematron validator module */
- XML_FROM_BUFFER, /* The buffers module */
- XML_FROM_URI /* The URI module */
-} xmlErrorDomain;
-
-/**
- * xmlError:
- *
- * An XML Error instance.
- */
-
-typedef struct _xmlError xmlError;
-typedef xmlError *xmlErrorPtr;
-struct _xmlError {
- int domain; /* What part of the library raised this error */
- int code; /* The error code, e.g. an xmlParserError */
- char *message;/* human-readable informative error message */
- xmlErrorLevel level;/* how consequent is the error */
- char *file; /* the filename */
- int line; /* the line number if available */
- char *str1; /* extra string information */
- char *str2; /* extra string information */
- char *str3; /* extra string information */
- int int1; /* extra number information */
- int int2; /* error column # or 0 if N/A (todo: rename field when we would brk ABI) */
- void *ctxt; /* the parser context if available */
- void *node; /* the node in the tree */
-};
-
-/**
- * xmlParserError:
- *
- * This is an error that the XML (or HTML) parser can generate
- */
-typedef enum {
- XML_ERR_OK = 0,
- XML_ERR_INTERNAL_ERROR, /* 1 */
- XML_ERR_NO_MEMORY, /* 2 */
- XML_ERR_DOCUMENT_START, /* 3 */
- XML_ERR_DOCUMENT_EMPTY, /* 4 */
- XML_ERR_DOCUMENT_END, /* 5 */
- XML_ERR_INVALID_HEX_CHARREF, /* 6 */
- XML_ERR_INVALID_DEC_CHARREF, /* 7 */
- XML_ERR_INVALID_CHARREF, /* 8 */
- XML_ERR_INVALID_CHAR, /* 9 */
- XML_ERR_CHARREF_AT_EOF, /* 10 */
- XML_ERR_CHARREF_IN_PROLOG, /* 11 */
- XML_ERR_CHARREF_IN_EPILOG, /* 12 */
- XML_ERR_CHARREF_IN_DTD, /* 13 */
- XML_ERR_ENTITYREF_AT_EOF, /* 14 */
- XML_ERR_ENTITYREF_IN_PROLOG, /* 15 */
- XML_ERR_ENTITYREF_IN_EPILOG, /* 16 */
- XML_ERR_ENTITYREF_IN_DTD, /* 17 */
- XML_ERR_PEREF_AT_EOF, /* 18 */
- XML_ERR_PEREF_IN_PROLOG, /* 19 */
- XML_ERR_PEREF_IN_EPILOG, /* 20 */
- XML_ERR_PEREF_IN_INT_SUBSET, /* 21 */
- XML_ERR_ENTITYREF_NO_NAME, /* 22 */
- XML_ERR_ENTITYREF_SEMICOL_MISSING, /* 23 */
- XML_ERR_PEREF_NO_NAME, /* 24 */
- XML_ERR_PEREF_SEMICOL_MISSING, /* 25 */
- XML_ERR_UNDECLARED_ENTITY, /* 26 */
- XML_WAR_UNDECLARED_ENTITY, /* 27 */
- XML_ERR_UNPARSED_ENTITY, /* 28 */
- XML_ERR_ENTITY_IS_EXTERNAL, /* 29 */
- XML_ERR_ENTITY_IS_PARAMETER, /* 30 */
- XML_ERR_UNKNOWN_ENCODING, /* 31 */
- XML_ERR_UNSUPPORTED_ENCODING, /* 32 */
- XML_ERR_STRING_NOT_STARTED, /* 33 */
- XML_ERR_STRING_NOT_CLOSED, /* 34 */
- XML_ERR_NS_DECL_ERROR, /* 35 */
- XML_ERR_ENTITY_NOT_STARTED, /* 36 */
- XML_ERR_ENTITY_NOT_FINISHED, /* 37 */
- XML_ERR_LT_IN_ATTRIBUTE, /* 38 */
- XML_ERR_ATTRIBUTE_NOT_STARTED, /* 39 */
- XML_ERR_ATTRIBUTE_NOT_FINISHED, /* 40 */
- XML_ERR_ATTRIBUTE_WITHOUT_VALUE, /* 41 */
- XML_ERR_ATTRIBUTE_REDEFINED, /* 42 */
- XML_ERR_LITERAL_NOT_STARTED, /* 43 */
- XML_ERR_LITERAL_NOT_FINISHED, /* 44 */
- XML_ERR_COMMENT_NOT_FINISHED, /* 45 */
- XML_ERR_PI_NOT_STARTED, /* 46 */
- XML_ERR_PI_NOT_FINISHED, /* 47 */
- XML_ERR_NOTATION_NOT_STARTED, /* 48 */
- XML_ERR_NOTATION_NOT_FINISHED, /* 49 */
- XML_ERR_ATTLIST_NOT_STARTED, /* 50 */
- XML_ERR_ATTLIST_NOT_FINISHED, /* 51 */
- XML_ERR_MIXED_NOT_STARTED, /* 52 */
- XML_ERR_MIXED_NOT_FINISHED, /* 53 */
- XML_ERR_ELEMCONTENT_NOT_STARTED, /* 54 */
- XML_ERR_ELEMCONTENT_NOT_FINISHED, /* 55 */
- XML_ERR_XMLDECL_NOT_STARTED, /* 56 */
- XML_ERR_XMLDECL_NOT_FINISHED, /* 57 */
- XML_ERR_CONDSEC_NOT_STARTED, /* 58 */
- XML_ERR_CONDSEC_NOT_FINISHED, /* 59 */
- XML_ERR_EXT_SUBSET_NOT_FINISHED, /* 60 */
- XML_ERR_DOCTYPE_NOT_FINISHED, /* 61 */
- XML_ERR_MISPLACED_CDATA_END, /* 62 */
- XML_ERR_CDATA_NOT_FINISHED, /* 63 */
- XML_ERR_RESERVED_XML_NAME, /* 64 */
- XML_ERR_SPACE_REQUIRED, /* 65 */
- XML_ERR_SEPARATOR_REQUIRED, /* 66 */
- XML_ERR_NMTOKEN_REQUIRED, /* 67 */
- XML_ERR_NAME_REQUIRED, /* 68 */
- XML_ERR_PCDATA_REQUIRED, /* 69 */
- XML_ERR_URI_REQUIRED, /* 70 */
- XML_ERR_PUBID_REQUIRED, /* 71 */
- XML_ERR_LT_REQUIRED, /* 72 */
- XML_ERR_GT_REQUIRED, /* 73 */
- XML_ERR_LTSLASH_REQUIRED, /* 74 */
- XML_ERR_EQUAL_REQUIRED, /* 75 */
- XML_ERR_TAG_NAME_MISMATCH, /* 76 */
- XML_ERR_TAG_NOT_FINISHED, /* 77 */
- XML_ERR_STANDALONE_VALUE, /* 78 */
- XML_ERR_ENCODING_NAME, /* 79 */
- XML_ERR_HYPHEN_IN_COMMENT, /* 80 */
- XML_ERR_INVALID_ENCODING, /* 81 */
- XML_ERR_EXT_ENTITY_STANDALONE, /* 82 */
- XML_ERR_CONDSEC_INVALID, /* 83 */
- XML_ERR_VALUE_REQUIRED, /* 84 */
- XML_ERR_NOT_WELL_BALANCED, /* 85 */
- XML_ERR_EXTRA_CONTENT, /* 86 */
- XML_ERR_ENTITY_CHAR_ERROR, /* 87 */
- XML_ERR_ENTITY_PE_INTERNAL, /* 88 */
- XML_ERR_ENTITY_LOOP, /* 89 */
- XML_ERR_ENTITY_BOUNDARY, /* 90 */
- XML_ERR_INVALID_URI, /* 91 */
- XML_ERR_URI_FRAGMENT, /* 92 */
- XML_WAR_CATALOG_PI, /* 93 */
- XML_ERR_NO_DTD, /* 94 */
- XML_ERR_CONDSEC_INVALID_KEYWORD, /* 95 */
- XML_ERR_VERSION_MISSING, /* 96 */
- XML_WAR_UNKNOWN_VERSION, /* 97 */
- XML_WAR_LANG_VALUE, /* 98 */
- XML_WAR_NS_URI, /* 99 */
- XML_WAR_NS_URI_RELATIVE, /* 100 */
- XML_ERR_MISSING_ENCODING, /* 101 */
- XML_WAR_SPACE_VALUE, /* 102 */
- XML_ERR_NOT_STANDALONE, /* 103 */
- XML_ERR_ENTITY_PROCESSING, /* 104 */
- XML_ERR_NOTATION_PROCESSING, /* 105 */
- XML_WAR_NS_COLUMN, /* 106 */
- XML_WAR_ENTITY_REDEFINED, /* 107 */
- XML_ERR_UNKNOWN_VERSION, /* 108 */
- XML_ERR_VERSION_MISMATCH, /* 109 */
- XML_ERR_NAME_TOO_LONG, /* 110 */
- XML_ERR_USER_STOP, /* 111 */
- XML_NS_ERR_XML_NAMESPACE = 200,
- XML_NS_ERR_UNDEFINED_NAMESPACE, /* 201 */
- XML_NS_ERR_QNAME, /* 202 */
- XML_NS_ERR_ATTRIBUTE_REDEFINED, /* 203 */
- XML_NS_ERR_EMPTY, /* 204 */
- XML_NS_ERR_COLON, /* 205 */
- XML_DTD_ATTRIBUTE_DEFAULT = 500,
- XML_DTD_ATTRIBUTE_REDEFINED, /* 501 */
- XML_DTD_ATTRIBUTE_VALUE, /* 502 */
- XML_DTD_CONTENT_ERROR, /* 503 */
- XML_DTD_CONTENT_MODEL, /* 504 */
- XML_DTD_CONTENT_NOT_DETERMINIST, /* 505 */
- XML_DTD_DIFFERENT_PREFIX, /* 506 */
- XML_DTD_ELEM_DEFAULT_NAMESPACE, /* 507 */
- XML_DTD_ELEM_NAMESPACE, /* 508 */
- XML_DTD_ELEM_REDEFINED, /* 509 */
- XML_DTD_EMPTY_NOTATION, /* 510 */
- XML_DTD_ENTITY_TYPE, /* 511 */
- XML_DTD_ID_FIXED, /* 512 */
- XML_DTD_ID_REDEFINED, /* 513 */
- XML_DTD_ID_SUBSET, /* 514 */
- XML_DTD_INVALID_CHILD, /* 515 */
- XML_DTD_INVALID_DEFAULT, /* 516 */
- XML_DTD_LOAD_ERROR, /* 517 */
- XML_DTD_MISSING_ATTRIBUTE, /* 518 */
- XML_DTD_MIXED_CORRUPT, /* 519 */
- XML_DTD_MULTIPLE_ID, /* 520 */
- XML_DTD_NO_DOC, /* 521 */
- XML_DTD_NO_DTD, /* 522 */
- XML_DTD_NO_ELEM_NAME, /* 523 */
- XML_DTD_NO_PREFIX, /* 524 */
- XML_DTD_NO_ROOT, /* 525 */
- XML_DTD_NOTATION_REDEFINED, /* 526 */
- XML_DTD_NOTATION_VALUE, /* 527 */
- XML_DTD_NOT_EMPTY, /* 528 */
- XML_DTD_NOT_PCDATA, /* 529 */
- XML_DTD_NOT_STANDALONE, /* 530 */
- XML_DTD_ROOT_NAME, /* 531 */
- XML_DTD_STANDALONE_WHITE_SPACE, /* 532 */
- XML_DTD_UNKNOWN_ATTRIBUTE, /* 533 */
- XML_DTD_UNKNOWN_ELEM, /* 534 */
- XML_DTD_UNKNOWN_ENTITY, /* 535 */
- XML_DTD_UNKNOWN_ID, /* 536 */
- XML_DTD_UNKNOWN_NOTATION, /* 537 */
- XML_DTD_STANDALONE_DEFAULTED, /* 538 */
- XML_DTD_XMLID_VALUE, /* 539 */
- XML_DTD_XMLID_TYPE, /* 540 */
- XML_DTD_DUP_TOKEN, /* 541 */
- XML_HTML_STRUCURE_ERROR = 800,
- XML_HTML_UNKNOWN_TAG, /* 801 */
- XML_RNGP_ANYNAME_ATTR_ANCESTOR = 1000,
- XML_RNGP_ATTR_CONFLICT, /* 1001 */
- XML_RNGP_ATTRIBUTE_CHILDREN, /* 1002 */
- XML_RNGP_ATTRIBUTE_CONTENT, /* 1003 */
- XML_RNGP_ATTRIBUTE_EMPTY, /* 1004 */
- XML_RNGP_ATTRIBUTE_NOOP, /* 1005 */
- XML_RNGP_CHOICE_CONTENT, /* 1006 */
- XML_RNGP_CHOICE_EMPTY, /* 1007 */
- XML_RNGP_CREATE_FAILURE, /* 1008 */
- XML_RNGP_DATA_CONTENT, /* 1009 */
- XML_RNGP_DEF_CHOICE_AND_INTERLEAVE, /* 1010 */
- XML_RNGP_DEFINE_CREATE_FAILED, /* 1011 */
- XML_RNGP_DEFINE_EMPTY, /* 1012 */
- XML_RNGP_DEFINE_MISSING, /* 1013 */
- XML_RNGP_DEFINE_NAME_MISSING, /* 1014 */
- XML_RNGP_ELEM_CONTENT_EMPTY, /* 1015 */
- XML_RNGP_ELEM_CONTENT_ERROR, /* 1016 */
- XML_RNGP_ELEMENT_EMPTY, /* 1017 */
- XML_RNGP_ELEMENT_CONTENT, /* 1018 */
- XML_RNGP_ELEMENT_NAME, /* 1019 */
- XML_RNGP_ELEMENT_NO_CONTENT, /* 1020 */
- XML_RNGP_ELEM_TEXT_CONFLICT, /* 1021 */
- XML_RNGP_EMPTY, /* 1022 */
- XML_RNGP_EMPTY_CONSTRUCT, /* 1023 */
- XML_RNGP_EMPTY_CONTENT, /* 1024 */
- XML_RNGP_EMPTY_NOT_EMPTY, /* 1025 */
- XML_RNGP_ERROR_TYPE_LIB, /* 1026 */
- XML_RNGP_EXCEPT_EMPTY, /* 1027 */
- XML_RNGP_EXCEPT_MISSING, /* 1028 */
- XML_RNGP_EXCEPT_MULTIPLE, /* 1029 */
- XML_RNGP_EXCEPT_NO_CONTENT, /* 1030 */
- XML_RNGP_EXTERNALREF_EMTPY, /* 1031 */
- XML_RNGP_EXTERNAL_REF_FAILURE, /* 1032 */
- XML_RNGP_EXTERNALREF_RECURSE, /* 1033 */
- XML_RNGP_FORBIDDEN_ATTRIBUTE, /* 1034 */
- XML_RNGP_FOREIGN_ELEMENT, /* 1035 */
- XML_RNGP_GRAMMAR_CONTENT, /* 1036 */
- XML_RNGP_GRAMMAR_EMPTY, /* 1037 */
- XML_RNGP_GRAMMAR_MISSING, /* 1038 */
- XML_RNGP_GRAMMAR_NO_START, /* 1039 */
- XML_RNGP_GROUP_ATTR_CONFLICT, /* 1040 */
- XML_RNGP_HREF_ERROR, /* 1041 */
- XML_RNGP_INCLUDE_EMPTY, /* 1042 */
- XML_RNGP_INCLUDE_FAILURE, /* 1043 */
- XML_RNGP_INCLUDE_RECURSE, /* 1044 */
- XML_RNGP_INTERLEAVE_ADD, /* 1045 */
- XML_RNGP_INTERLEAVE_CREATE_FAILED, /* 1046 */
- XML_RNGP_INTERLEAVE_EMPTY, /* 1047 */
- XML_RNGP_INTERLEAVE_NO_CONTENT, /* 1048 */
- XML_RNGP_INVALID_DEFINE_NAME, /* 1049 */
- XML_RNGP_INVALID_URI, /* 1050 */
- XML_RNGP_INVALID_VALUE, /* 1051 */
- XML_RNGP_MISSING_HREF, /* 1052 */
- XML_RNGP_NAME_MISSING, /* 1053 */
- XML_RNGP_NEED_COMBINE, /* 1054 */
- XML_RNGP_NOTALLOWED_NOT_EMPTY, /* 1055 */
- XML_RNGP_NSNAME_ATTR_ANCESTOR, /* 1056 */
- XML_RNGP_NSNAME_NO_NS, /* 1057 */
- XML_RNGP_PARAM_FORBIDDEN, /* 1058 */
- XML_RNGP_PARAM_NAME_MISSING, /* 1059 */
- XML_RNGP_PARENTREF_CREATE_FAILED, /* 1060 */
- XML_RNGP_PARENTREF_NAME_INVALID, /* 1061 */
- XML_RNGP_PARENTREF_NO_NAME, /* 1062 */
- XML_RNGP_PARENTREF_NO_PARENT, /* 1063 */
- XML_RNGP_PARENTREF_NOT_EMPTY, /* 1064 */
- XML_RNGP_PARSE_ERROR, /* 1065 */
- XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME, /* 1066 */
- XML_RNGP_PAT_ATTR_ATTR, /* 1067 */
- XML_RNGP_PAT_ATTR_ELEM, /* 1068 */
- XML_RNGP_PAT_DATA_EXCEPT_ATTR, /* 1069 */
- XML_RNGP_PAT_DATA_EXCEPT_ELEM, /* 1070 */
- XML_RNGP_PAT_DATA_EXCEPT_EMPTY, /* 1071 */
- XML_RNGP_PAT_DATA_EXCEPT_GROUP, /* 1072 */
- XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE, /* 1073 */
- XML_RNGP_PAT_DATA_EXCEPT_LIST, /* 1074 */
- XML_RNGP_PAT_DATA_EXCEPT_ONEMORE, /* 1075 */
- XML_RNGP_PAT_DATA_EXCEPT_REF, /* 1076 */
- XML_RNGP_PAT_DATA_EXCEPT_TEXT, /* 1077 */
- XML_RNGP_PAT_LIST_ATTR, /* 1078 */
- XML_RNGP_PAT_LIST_ELEM, /* 1079 */
- XML_RNGP_PAT_LIST_INTERLEAVE, /* 1080 */
- XML_RNGP_PAT_LIST_LIST, /* 1081 */
- XML_RNGP_PAT_LIST_REF, /* 1082 */
- XML_RNGP_PAT_LIST_TEXT, /* 1083 */
- XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME, /* 1084 */
- XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME, /* 1085 */
- XML_RNGP_PAT_ONEMORE_GROUP_ATTR, /* 1086 */
- XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR, /* 1087 */
- XML_RNGP_PAT_START_ATTR, /* 1088 */
- XML_RNGP_PAT_START_DATA, /* 1089 */
- XML_RNGP_PAT_START_EMPTY, /* 1090 */
- XML_RNGP_PAT_START_GROUP, /* 1091 */
- XML_RNGP_PAT_START_INTERLEAVE, /* 1092 */
- XML_RNGP_PAT_START_LIST, /* 1093 */
- XML_RNGP_PAT_START_ONEMORE, /* 1094 */
- XML_RNGP_PAT_START_TEXT, /* 1095 */
- XML_RNGP_PAT_START_VALUE, /* 1096 */
- XML_RNGP_PREFIX_UNDEFINED, /* 1097 */
- XML_RNGP_REF_CREATE_FAILED, /* 1098 */
- XML_RNGP_REF_CYCLE, /* 1099 */
- XML_RNGP_REF_NAME_INVALID, /* 1100 */
- XML_RNGP_REF_NO_DEF, /* 1101 */
- XML_RNGP_REF_NO_NAME, /* 1102 */
- XML_RNGP_REF_NOT_EMPTY, /* 1103 */
- XML_RNGP_START_CHOICE_AND_INTERLEAVE, /* 1104 */
- XML_RNGP_START_CONTENT, /* 1105 */
- XML_RNGP_START_EMPTY, /* 1106 */
- XML_RNGP_START_MISSING, /* 1107 */
- XML_RNGP_TEXT_EXPECTED, /* 1108 */
- XML_RNGP_TEXT_HAS_CHILD, /* 1109 */
- XML_RNGP_TYPE_MISSING, /* 1110 */
- XML_RNGP_TYPE_NOT_FOUND, /* 1111 */
- XML_RNGP_TYPE_VALUE, /* 1112 */
- XML_RNGP_UNKNOWN_ATTRIBUTE, /* 1113 */
- XML_RNGP_UNKNOWN_COMBINE, /* 1114 */
- XML_RNGP_UNKNOWN_CONSTRUCT, /* 1115 */
- XML_RNGP_UNKNOWN_TYPE_LIB, /* 1116 */
- XML_RNGP_URI_FRAGMENT, /* 1117 */
- XML_RNGP_URI_NOT_ABSOLUTE, /* 1118 */
- XML_RNGP_VALUE_EMPTY, /* 1119 */
- XML_RNGP_VALUE_NO_CONTENT, /* 1120 */
- XML_RNGP_XMLNS_NAME, /* 1121 */
- XML_RNGP_XML_NS, /* 1122 */
- XML_XPATH_EXPRESSION_OK = 1200,
- XML_XPATH_NUMBER_ERROR, /* 1201 */
- XML_XPATH_UNFINISHED_LITERAL_ERROR, /* 1202 */
- XML_XPATH_START_LITERAL_ERROR, /* 1203 */
- XML_XPATH_VARIABLE_REF_ERROR, /* 1204 */
- XML_XPATH_UNDEF_VARIABLE_ERROR, /* 1205 */
- XML_XPATH_INVALID_PREDICATE_ERROR, /* 1206 */
- XML_XPATH_EXPR_ERROR, /* 1207 */
- XML_XPATH_UNCLOSED_ERROR, /* 1208 */
- XML_XPATH_UNKNOWN_FUNC_ERROR, /* 1209 */
- XML_XPATH_INVALID_OPERAND, /* 1210 */
- XML_XPATH_INVALID_TYPE, /* 1211 */
- XML_XPATH_INVALID_ARITY, /* 1212 */
- XML_XPATH_INVALID_CTXT_SIZE, /* 1213 */
- XML_XPATH_INVALID_CTXT_POSITION, /* 1214 */
- XML_XPATH_MEMORY_ERROR, /* 1215 */
- XML_XPTR_SYNTAX_ERROR, /* 1216 */
- XML_XPTR_RESOURCE_ERROR, /* 1217 */
- XML_XPTR_SUB_RESOURCE_ERROR, /* 1218 */
- XML_XPATH_UNDEF_PREFIX_ERROR, /* 1219 */
- XML_XPATH_ENCODING_ERROR, /* 1220 */
- XML_XPATH_INVALID_CHAR_ERROR, /* 1221 */
- XML_TREE_INVALID_HEX = 1300,
- XML_TREE_INVALID_DEC, /* 1301 */
- XML_TREE_UNTERMINATED_ENTITY, /* 1302 */
- XML_TREE_NOT_UTF8, /* 1303 */
- XML_SAVE_NOT_UTF8 = 1400,
- XML_SAVE_CHAR_INVALID, /* 1401 */
- XML_SAVE_NO_DOCTYPE, /* 1402 */
- XML_SAVE_UNKNOWN_ENCODING, /* 1403 */
- XML_REGEXP_COMPILE_ERROR = 1450,
- XML_IO_UNKNOWN = 1500,
- XML_IO_EACCES, /* 1501 */
- XML_IO_EAGAIN, /* 1502 */
- XML_IO_EBADF, /* 1503 */
- XML_IO_EBADMSG, /* 1504 */
- XML_IO_EBUSY, /* 1505 */
- XML_IO_ECANCELED, /* 1506 */
- XML_IO_ECHILD, /* 1507 */
- XML_IO_EDEADLK, /* 1508 */
- XML_IO_EDOM, /* 1509 */
- XML_IO_EEXIST, /* 1510 */
- XML_IO_EFAULT, /* 1511 */
- XML_IO_EFBIG, /* 1512 */
- XML_IO_EINPROGRESS, /* 1513 */
- XML_IO_EINTR, /* 1514 */
- XML_IO_EINVAL, /* 1515 */
- XML_IO_EIO, /* 1516 */
- XML_IO_EISDIR, /* 1517 */
- XML_IO_EMFILE, /* 1518 */
- XML_IO_EMLINK, /* 1519 */
- XML_IO_EMSGSIZE, /* 1520 */
- XML_IO_ENAMETOOLONG, /* 1521 */
- XML_IO_ENFILE, /* 1522 */
- XML_IO_ENODEV, /* 1523 */
- XML_IO_ENOENT, /* 1524 */
- XML_IO_ENOEXEC, /* 1525 */
- XML_IO_ENOLCK, /* 1526 */
- XML_IO_ENOMEM, /* 1527 */
- XML_IO_ENOSPC, /* 1528 */
- XML_IO_ENOSYS, /* 1529 */
- XML_IO_ENOTDIR, /* 1530 */
- XML_IO_ENOTEMPTY, /* 1531 */
- XML_IO_ENOTSUP, /* 1532 */
- XML_IO_ENOTTY, /* 1533 */
- XML_IO_ENXIO, /* 1534 */
- XML_IO_EPERM, /* 1535 */
- XML_IO_EPIPE, /* 1536 */
- XML_IO_ERANGE, /* 1537 */
- XML_IO_EROFS, /* 1538 */
- XML_IO_ESPIPE, /* 1539 */
- XML_IO_ESRCH, /* 1540 */
- XML_IO_ETIMEDOUT, /* 1541 */
- XML_IO_EXDEV, /* 1542 */
- XML_IO_NETWORK_ATTEMPT, /* 1543 */
- XML_IO_ENCODER, /* 1544 */
- XML_IO_FLUSH, /* 1545 */
- XML_IO_WRITE, /* 1546 */
- XML_IO_NO_INPUT, /* 1547 */
- XML_IO_BUFFER_FULL, /* 1548 */
- XML_IO_LOAD_ERROR, /* 1549 */
- XML_IO_ENOTSOCK, /* 1550 */
- XML_IO_EISCONN, /* 1551 */
- XML_IO_ECONNREFUSED, /* 1552 */
- XML_IO_ENETUNREACH, /* 1553 */
- XML_IO_EADDRINUSE, /* 1554 */
- XML_IO_EALREADY, /* 1555 */
- XML_IO_EAFNOSUPPORT, /* 1556 */
- XML_IO_ILLEGAL_XXE, /* 1557 */
- XML_XINCLUDE_RECURSION=1600,
- XML_XINCLUDE_PARSE_VALUE, /* 1601 */
- XML_XINCLUDE_ENTITY_DEF_MISMATCH, /* 1602 */
- XML_XINCLUDE_NO_HREF, /* 1603 */
- XML_XINCLUDE_NO_FALLBACK, /* 1604 */
- XML_XINCLUDE_HREF_URI, /* 1605 */
- XML_XINCLUDE_TEXT_FRAGMENT, /* 1606 */
- XML_XINCLUDE_TEXT_DOCUMENT, /* 1607 */
- XML_XINCLUDE_INVALID_CHAR, /* 1608 */
- XML_XINCLUDE_BUILD_FAILED, /* 1609 */
- XML_XINCLUDE_UNKNOWN_ENCODING, /* 1610 */
- XML_XINCLUDE_MULTIPLE_ROOT, /* 1611 */
- XML_XINCLUDE_XPTR_FAILED, /* 1612 */
- XML_XINCLUDE_XPTR_RESULT, /* 1613 */
- XML_XINCLUDE_INCLUDE_IN_INCLUDE, /* 1614 */
- XML_XINCLUDE_FALLBACKS_IN_INCLUDE, /* 1615 */
- XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE, /* 1616 */
- XML_XINCLUDE_DEPRECATED_NS, /* 1617 */
- XML_XINCLUDE_FRAGMENT_ID, /* 1618 */
- XML_CATALOG_MISSING_ATTR = 1650,
- XML_CATALOG_ENTRY_BROKEN, /* 1651 */
- XML_CATALOG_PREFER_VALUE, /* 1652 */
- XML_CATALOG_NOT_CATALOG, /* 1653 */
- XML_CATALOG_RECURSION, /* 1654 */
- XML_SCHEMAP_PREFIX_UNDEFINED = 1700,
- XML_SCHEMAP_ATTRFORMDEFAULT_VALUE, /* 1701 */
- XML_SCHEMAP_ATTRGRP_NONAME_NOREF, /* 1702 */
- XML_SCHEMAP_ATTR_NONAME_NOREF, /* 1703 */
- XML_SCHEMAP_COMPLEXTYPE_NONAME_NOREF, /* 1704 */
- XML_SCHEMAP_ELEMFORMDEFAULT_VALUE, /* 1705 */
- XML_SCHEMAP_ELEM_NONAME_NOREF, /* 1706 */
- XML_SCHEMAP_EXTENSION_NO_BASE, /* 1707 */
- XML_SCHEMAP_FACET_NO_VALUE, /* 1708 */
- XML_SCHEMAP_FAILED_BUILD_IMPORT, /* 1709 */
- XML_SCHEMAP_GROUP_NONAME_NOREF, /* 1710 */
- XML_SCHEMAP_IMPORT_NAMESPACE_NOT_URI, /* 1711 */
- XML_SCHEMAP_IMPORT_REDEFINE_NSNAME, /* 1712 */
- XML_SCHEMAP_IMPORT_SCHEMA_NOT_URI, /* 1713 */
- XML_SCHEMAP_INVALID_BOOLEAN, /* 1714 */
- XML_SCHEMAP_INVALID_ENUM, /* 1715 */
- XML_SCHEMAP_INVALID_FACET, /* 1716 */
- XML_SCHEMAP_INVALID_FACET_VALUE, /* 1717 */
- XML_SCHEMAP_INVALID_MAXOCCURS, /* 1718 */
- XML_SCHEMAP_INVALID_MINOCCURS, /* 1719 */
- XML_SCHEMAP_INVALID_REF_AND_SUBTYPE, /* 1720 */
- XML_SCHEMAP_INVALID_WHITE_SPACE, /* 1721 */
- XML_SCHEMAP_NOATTR_NOREF, /* 1722 */
- XML_SCHEMAP_NOTATION_NO_NAME, /* 1723 */
- XML_SCHEMAP_NOTYPE_NOREF, /* 1724 */
- XML_SCHEMAP_REF_AND_SUBTYPE, /* 1725 */
- XML_SCHEMAP_RESTRICTION_NONAME_NOREF, /* 1726 */
- XML_SCHEMAP_SIMPLETYPE_NONAME, /* 1727 */
- XML_SCHEMAP_TYPE_AND_SUBTYPE, /* 1728 */
- XML_SCHEMAP_UNKNOWN_ALL_CHILD, /* 1729 */
- XML_SCHEMAP_UNKNOWN_ANYATTRIBUTE_CHILD, /* 1730 */
- XML_SCHEMAP_UNKNOWN_ATTR_CHILD, /* 1731 */
- XML_SCHEMAP_UNKNOWN_ATTRGRP_CHILD, /* 1732 */
- XML_SCHEMAP_UNKNOWN_ATTRIBUTE_GROUP, /* 1733 */
- XML_SCHEMAP_UNKNOWN_BASE_TYPE, /* 1734 */
- XML_SCHEMAP_UNKNOWN_CHOICE_CHILD, /* 1735 */
- XML_SCHEMAP_UNKNOWN_COMPLEXCONTENT_CHILD, /* 1736 */
- XML_SCHEMAP_UNKNOWN_COMPLEXTYPE_CHILD, /* 1737 */
- XML_SCHEMAP_UNKNOWN_ELEM_CHILD, /* 1738 */
- XML_SCHEMAP_UNKNOWN_EXTENSION_CHILD, /* 1739 */
- XML_SCHEMAP_UNKNOWN_FACET_CHILD, /* 1740 */
- XML_SCHEMAP_UNKNOWN_FACET_TYPE, /* 1741 */
- XML_SCHEMAP_UNKNOWN_GROUP_CHILD, /* 1742 */
- XML_SCHEMAP_UNKNOWN_IMPORT_CHILD, /* 1743 */
- XML_SCHEMAP_UNKNOWN_LIST_CHILD, /* 1744 */
- XML_SCHEMAP_UNKNOWN_NOTATION_CHILD, /* 1745 */
- XML_SCHEMAP_UNKNOWN_PROCESSCONTENT_CHILD, /* 1746 */
- XML_SCHEMAP_UNKNOWN_REF, /* 1747 */
- XML_SCHEMAP_UNKNOWN_RESTRICTION_CHILD, /* 1748 */
- XML_SCHEMAP_UNKNOWN_SCHEMAS_CHILD, /* 1749 */
- XML_SCHEMAP_UNKNOWN_SEQUENCE_CHILD, /* 1750 */
- XML_SCHEMAP_UNKNOWN_SIMPLECONTENT_CHILD, /* 1751 */
- XML_SCHEMAP_UNKNOWN_SIMPLETYPE_CHILD, /* 1752 */
- XML_SCHEMAP_UNKNOWN_TYPE, /* 1753 */
- XML_SCHEMAP_UNKNOWN_UNION_CHILD, /* 1754 */
- XML_SCHEMAP_ELEM_DEFAULT_FIXED, /* 1755 */
- XML_SCHEMAP_REGEXP_INVALID, /* 1756 */
- XML_SCHEMAP_FAILED_LOAD, /* 1757 */
- XML_SCHEMAP_NOTHING_TO_PARSE, /* 1758 */
- XML_SCHEMAP_NOROOT, /* 1759 */
- XML_SCHEMAP_REDEFINED_GROUP, /* 1760 */
- XML_SCHEMAP_REDEFINED_TYPE, /* 1761 */
- XML_SCHEMAP_REDEFINED_ELEMENT, /* 1762 */
- XML_SCHEMAP_REDEFINED_ATTRGROUP, /* 1763 */
- XML_SCHEMAP_REDEFINED_ATTR, /* 1764 */
- XML_SCHEMAP_REDEFINED_NOTATION, /* 1765 */
- XML_SCHEMAP_FAILED_PARSE, /* 1766 */
- XML_SCHEMAP_UNKNOWN_PREFIX, /* 1767 */
- XML_SCHEMAP_DEF_AND_PREFIX, /* 1768 */
- XML_SCHEMAP_UNKNOWN_INCLUDE_CHILD, /* 1769 */
- XML_SCHEMAP_INCLUDE_SCHEMA_NOT_URI, /* 1770 */
- XML_SCHEMAP_INCLUDE_SCHEMA_NO_URI, /* 1771 */
- XML_SCHEMAP_NOT_SCHEMA, /* 1772 */
- XML_SCHEMAP_UNKNOWN_MEMBER_TYPE, /* 1773 */
- XML_SCHEMAP_INVALID_ATTR_USE, /* 1774 */
- XML_SCHEMAP_RECURSIVE, /* 1775 */
- XML_SCHEMAP_SUPERNUMEROUS_LIST_ITEM_TYPE, /* 1776 */
- XML_SCHEMAP_INVALID_ATTR_COMBINATION, /* 1777 */
- XML_SCHEMAP_INVALID_ATTR_INLINE_COMBINATION, /* 1778 */
- XML_SCHEMAP_MISSING_SIMPLETYPE_CHILD, /* 1779 */
- XML_SCHEMAP_INVALID_ATTR_NAME, /* 1780 */
- XML_SCHEMAP_REF_AND_CONTENT, /* 1781 */
- XML_SCHEMAP_CT_PROPS_CORRECT_1, /* 1782 */
- XML_SCHEMAP_CT_PROPS_CORRECT_2, /* 1783 */
- XML_SCHEMAP_CT_PROPS_CORRECT_3, /* 1784 */
- XML_SCHEMAP_CT_PROPS_CORRECT_4, /* 1785 */
- XML_SCHEMAP_CT_PROPS_CORRECT_5, /* 1786 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1, /* 1787 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1, /* 1788 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2, /* 1789 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2, /* 1790 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3, /* 1791 */
- XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER, /* 1792 */
- XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE, /* 1793 */
- XML_SCHEMAP_UNION_NOT_EXPRESSIBLE, /* 1794 */
- XML_SCHEMAP_SRC_IMPORT_3_1, /* 1795 */
- XML_SCHEMAP_SRC_IMPORT_3_2, /* 1796 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1, /* 1797 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2, /* 1798 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3, /* 1799 */
- XML_SCHEMAP_COS_CT_EXTENDS_1_3, /* 1800 */
- XML_SCHEMAV_NOROOT = 1801,
- XML_SCHEMAV_UNDECLAREDELEM, /* 1802 */
- XML_SCHEMAV_NOTTOPLEVEL, /* 1803 */
- XML_SCHEMAV_MISSING, /* 1804 */
- XML_SCHEMAV_WRONGELEM, /* 1805 */
- XML_SCHEMAV_NOTYPE, /* 1806 */
- XML_SCHEMAV_NOROLLBACK, /* 1807 */
- XML_SCHEMAV_ISABSTRACT, /* 1808 */
- XML_SCHEMAV_NOTEMPTY, /* 1809 */
- XML_SCHEMAV_ELEMCONT, /* 1810 */
- XML_SCHEMAV_HAVEDEFAULT, /* 1811 */
- XML_SCHEMAV_NOTNILLABLE, /* 1812 */
- XML_SCHEMAV_EXTRACONTENT, /* 1813 */
- XML_SCHEMAV_INVALIDATTR, /* 1814 */
- XML_SCHEMAV_INVALIDELEM, /* 1815 */
- XML_SCHEMAV_NOTDETERMINIST, /* 1816 */
- XML_SCHEMAV_CONSTRUCT, /* 1817 */
- XML_SCHEMAV_INTERNAL, /* 1818 */
- XML_SCHEMAV_NOTSIMPLE, /* 1819 */
- XML_SCHEMAV_ATTRUNKNOWN, /* 1820 */
- XML_SCHEMAV_ATTRINVALID, /* 1821 */
- XML_SCHEMAV_VALUE, /* 1822 */
- XML_SCHEMAV_FACET, /* 1823 */
- XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, /* 1824 */
- XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2, /* 1825 */
- XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3, /* 1826 */
- XML_SCHEMAV_CVC_TYPE_3_1_1, /* 1827 */
- XML_SCHEMAV_CVC_TYPE_3_1_2, /* 1828 */
- XML_SCHEMAV_CVC_FACET_VALID, /* 1829 */
- XML_SCHEMAV_CVC_LENGTH_VALID, /* 1830 */
- XML_SCHEMAV_CVC_MINLENGTH_VALID, /* 1831 */
- XML_SCHEMAV_CVC_MAXLENGTH_VALID, /* 1832 */
- XML_SCHEMAV_CVC_MININCLUSIVE_VALID, /* 1833 */
- XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID, /* 1834 */
- XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID, /* 1835 */
- XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID, /* 1836 */
- XML_SCHEMAV_CVC_TOTALDIGITS_VALID, /* 1837 */
- XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID, /* 1838 */
- XML_SCHEMAV_CVC_PATTERN_VALID, /* 1839 */
- XML_SCHEMAV_CVC_ENUMERATION_VALID, /* 1840 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1, /* 1841 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2, /* 1842 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3, /* 1843 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_2_4, /* 1844 */
- XML_SCHEMAV_CVC_ELT_1, /* 1845 */
- XML_SCHEMAV_CVC_ELT_2, /* 1846 */
- XML_SCHEMAV_CVC_ELT_3_1, /* 1847 */
- XML_SCHEMAV_CVC_ELT_3_2_1, /* 1848 */
- XML_SCHEMAV_CVC_ELT_3_2_2, /* 1849 */
- XML_SCHEMAV_CVC_ELT_4_1, /* 1850 */
- XML_SCHEMAV_CVC_ELT_4_2, /* 1851 */
- XML_SCHEMAV_CVC_ELT_4_3, /* 1852 */
- XML_SCHEMAV_CVC_ELT_5_1_1, /* 1853 */
- XML_SCHEMAV_CVC_ELT_5_1_2, /* 1854 */
- XML_SCHEMAV_CVC_ELT_5_2_1, /* 1855 */
- XML_SCHEMAV_CVC_ELT_5_2_2_1, /* 1856 */
- XML_SCHEMAV_CVC_ELT_5_2_2_2_1, /* 1857 */
- XML_SCHEMAV_CVC_ELT_5_2_2_2_2, /* 1858 */
- XML_SCHEMAV_CVC_ELT_6, /* 1859 */
- XML_SCHEMAV_CVC_ELT_7, /* 1860 */
- XML_SCHEMAV_CVC_ATTRIBUTE_1, /* 1861 */
- XML_SCHEMAV_CVC_ATTRIBUTE_2, /* 1862 */
- XML_SCHEMAV_CVC_ATTRIBUTE_3, /* 1863 */
- XML_SCHEMAV_CVC_ATTRIBUTE_4, /* 1864 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_3_1, /* 1865 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1, /* 1866 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2, /* 1867 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_4, /* 1868 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_5_1, /* 1869 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_5_2, /* 1870 */
- XML_SCHEMAV_ELEMENT_CONTENT, /* 1871 */
- XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING, /* 1872 */
- XML_SCHEMAV_CVC_COMPLEX_TYPE_1, /* 1873 */
- XML_SCHEMAV_CVC_AU, /* 1874 */
- XML_SCHEMAV_CVC_TYPE_1, /* 1875 */
- XML_SCHEMAV_CVC_TYPE_2, /* 1876 */
- XML_SCHEMAV_CVC_IDC, /* 1877 */
- XML_SCHEMAV_CVC_WILDCARD, /* 1878 */
- XML_SCHEMAV_MISC, /* 1879 */
- XML_XPTR_UNKNOWN_SCHEME = 1900,
- XML_XPTR_CHILDSEQ_START, /* 1901 */
- XML_XPTR_EVAL_FAILED, /* 1902 */
- XML_XPTR_EXTRA_OBJECTS, /* 1903 */
- XML_C14N_CREATE_CTXT = 1950,
- XML_C14N_REQUIRES_UTF8, /* 1951 */
- XML_C14N_CREATE_STACK, /* 1952 */
- XML_C14N_INVALID_NODE, /* 1953 */
- XML_C14N_UNKNOW_NODE, /* 1954 */
- XML_C14N_RELATIVE_NAMESPACE, /* 1955 */
- XML_FTP_PASV_ANSWER = 2000,
- XML_FTP_EPSV_ANSWER, /* 2001 */
- XML_FTP_ACCNT, /* 2002 */
- XML_FTP_URL_SYNTAX, /* 2003 */
- XML_HTTP_URL_SYNTAX = 2020,
- XML_HTTP_USE_IP, /* 2021 */
- XML_HTTP_UNKNOWN_HOST, /* 2022 */
- XML_SCHEMAP_SRC_SIMPLE_TYPE_1 = 3000,
- XML_SCHEMAP_SRC_SIMPLE_TYPE_2, /* 3001 */
- XML_SCHEMAP_SRC_SIMPLE_TYPE_3, /* 3002 */
- XML_SCHEMAP_SRC_SIMPLE_TYPE_4, /* 3003 */
- XML_SCHEMAP_SRC_RESOLVE, /* 3004 */
- XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE, /* 3005 */
- XML_SCHEMAP_SRC_LIST_ITEMTYPE_OR_SIMPLETYPE, /* 3006 */
- XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES, /* 3007 */
- XML_SCHEMAP_ST_PROPS_CORRECT_1, /* 3008 */
- XML_SCHEMAP_ST_PROPS_CORRECT_2, /* 3009 */
- XML_SCHEMAP_ST_PROPS_CORRECT_3, /* 3010 */
- XML_SCHEMAP_COS_ST_RESTRICTS_1_1, /* 3011 */
- XML_SCHEMAP_COS_ST_RESTRICTS_1_2, /* 3012 */
- XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1, /* 3013 */
- XML_SCHEMAP_COS_ST_RESTRICTS_1_3_2, /* 3014 */
- XML_SCHEMAP_COS_ST_RESTRICTS_2_1, /* 3015 */
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1, /* 3016 */
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2, /* 3017 */
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1, /* 3018 */
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2, /* 3019 */
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3, /* 3020 */
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4, /* 3021 */
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_5, /* 3022 */
- XML_SCHEMAP_COS_ST_RESTRICTS_3_1, /* 3023 */
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1, /* 3024 */
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2, /* 3025 */
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2, /* 3026 */
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1, /* 3027 */
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3, /* 3028 */
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4, /* 3029 */
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_5, /* 3030 */
- XML_SCHEMAP_COS_ST_DERIVED_OK_2_1, /* 3031 */
- XML_SCHEMAP_COS_ST_DERIVED_OK_2_2, /* 3032 */
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED, /* 3033 */
- XML_SCHEMAP_S4S_ELEM_MISSING, /* 3034 */
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, /* 3035 */
- XML_SCHEMAP_S4S_ATTR_MISSING, /* 3036 */
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE, /* 3037 */
- XML_SCHEMAP_SRC_ELEMENT_1, /* 3038 */
- XML_SCHEMAP_SRC_ELEMENT_2_1, /* 3039 */
- XML_SCHEMAP_SRC_ELEMENT_2_2, /* 3040 */
- XML_SCHEMAP_SRC_ELEMENT_3, /* 3041 */
- XML_SCHEMAP_P_PROPS_CORRECT_1, /* 3042 */
- XML_SCHEMAP_P_PROPS_CORRECT_2_1, /* 3043 */
- XML_SCHEMAP_P_PROPS_CORRECT_2_2, /* 3044 */
- XML_SCHEMAP_E_PROPS_CORRECT_2, /* 3045 */
- XML_SCHEMAP_E_PROPS_CORRECT_3, /* 3046 */
- XML_SCHEMAP_E_PROPS_CORRECT_4, /* 3047 */
- XML_SCHEMAP_E_PROPS_CORRECT_5, /* 3048 */
- XML_SCHEMAP_E_PROPS_CORRECT_6, /* 3049 */
- XML_SCHEMAP_SRC_INCLUDE, /* 3050 */
- XML_SCHEMAP_SRC_ATTRIBUTE_1, /* 3051 */
- XML_SCHEMAP_SRC_ATTRIBUTE_2, /* 3052 */
- XML_SCHEMAP_SRC_ATTRIBUTE_3_1, /* 3053 */
- XML_SCHEMAP_SRC_ATTRIBUTE_3_2, /* 3054 */
- XML_SCHEMAP_SRC_ATTRIBUTE_4, /* 3055 */
- XML_SCHEMAP_NO_XMLNS, /* 3056 */
- XML_SCHEMAP_NO_XSI, /* 3057 */
- XML_SCHEMAP_COS_VALID_DEFAULT_1, /* 3058 */
- XML_SCHEMAP_COS_VALID_DEFAULT_2_1, /* 3059 */
- XML_SCHEMAP_COS_VALID_DEFAULT_2_2_1, /* 3060 */
- XML_SCHEMAP_COS_VALID_DEFAULT_2_2_2, /* 3061 */
- XML_SCHEMAP_CVC_SIMPLE_TYPE, /* 3062 */
- XML_SCHEMAP_COS_CT_EXTENDS_1_1, /* 3063 */
- XML_SCHEMAP_SRC_IMPORT_1_1, /* 3064 */
- XML_SCHEMAP_SRC_IMPORT_1_2, /* 3065 */
- XML_SCHEMAP_SRC_IMPORT_2, /* 3066 */
- XML_SCHEMAP_SRC_IMPORT_2_1, /* 3067 */
- XML_SCHEMAP_SRC_IMPORT_2_2, /* 3068 */
- XML_SCHEMAP_INTERNAL, /* 3069 non-W3C */
- XML_SCHEMAP_NOT_DETERMINISTIC, /* 3070 non-W3C */
- XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_1, /* 3071 */
- XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_2, /* 3072 */
- XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3, /* 3073 */
- XML_SCHEMAP_MG_PROPS_CORRECT_1, /* 3074 */
- XML_SCHEMAP_MG_PROPS_CORRECT_2, /* 3075 */
- XML_SCHEMAP_SRC_CT_1, /* 3076 */
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3, /* 3077 */
- XML_SCHEMAP_AU_PROPS_CORRECT_2, /* 3078 */
- XML_SCHEMAP_A_PROPS_CORRECT_2, /* 3079 */
- XML_SCHEMAP_C_PROPS_CORRECT, /* 3080 */
- XML_SCHEMAP_SRC_REDEFINE, /* 3081 */
- XML_SCHEMAP_SRC_IMPORT, /* 3082 */
- XML_SCHEMAP_WARN_SKIP_SCHEMA, /* 3083 */
- XML_SCHEMAP_WARN_UNLOCATED_SCHEMA, /* 3084 */
- XML_SCHEMAP_WARN_ATTR_REDECL_PROH, /* 3085 */
- XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH, /* 3085 */
- XML_SCHEMAP_AG_PROPS_CORRECT, /* 3086 */
- XML_SCHEMAP_COS_CT_EXTENDS_1_2, /* 3087 */
- XML_SCHEMAP_AU_PROPS_CORRECT, /* 3088 */
- XML_SCHEMAP_A_PROPS_CORRECT_3, /* 3089 */
- XML_SCHEMAP_COS_ALL_LIMITED, /* 3090 */
- XML_SCHEMATRONV_ASSERT = 4000, /* 4000 */
- XML_SCHEMATRONV_REPORT,
- XML_MODULE_OPEN = 4900, /* 4900 */
- XML_MODULE_CLOSE, /* 4901 */
- XML_CHECK_FOUND_ELEMENT = 5000,
- XML_CHECK_FOUND_ATTRIBUTE, /* 5001 */
- XML_CHECK_FOUND_TEXT, /* 5002 */
- XML_CHECK_FOUND_CDATA, /* 5003 */
- XML_CHECK_FOUND_ENTITYREF, /* 5004 */
- XML_CHECK_FOUND_ENTITY, /* 5005 */
- XML_CHECK_FOUND_PI, /* 5006 */
- XML_CHECK_FOUND_COMMENT, /* 5007 */
- XML_CHECK_FOUND_DOCTYPE, /* 5008 */
- XML_CHECK_FOUND_FRAGMENT, /* 5009 */
- XML_CHECK_FOUND_NOTATION, /* 5010 */
- XML_CHECK_UNKNOWN_NODE, /* 5011 */
- XML_CHECK_ENTITY_TYPE, /* 5012 */
- XML_CHECK_NO_PARENT, /* 5013 */
- XML_CHECK_NO_DOC, /* 5014 */
- XML_CHECK_NO_NAME, /* 5015 */
- XML_CHECK_NO_ELEM, /* 5016 */
- XML_CHECK_WRONG_DOC, /* 5017 */
- XML_CHECK_NO_PREV, /* 5018 */
- XML_CHECK_WRONG_PREV, /* 5019 */
- XML_CHECK_NO_NEXT, /* 5020 */
- XML_CHECK_WRONG_NEXT, /* 5021 */
- XML_CHECK_NOT_DTD, /* 5022 */
- XML_CHECK_NOT_ATTR, /* 5023 */
- XML_CHECK_NOT_ATTR_DECL, /* 5024 */
- XML_CHECK_NOT_ELEM_DECL, /* 5025 */
- XML_CHECK_NOT_ENTITY_DECL, /* 5026 */
- XML_CHECK_NOT_NS_DECL, /* 5027 */
- XML_CHECK_NO_HREF, /* 5028 */
- XML_CHECK_WRONG_PARENT,/* 5029 */
- XML_CHECK_NS_SCOPE, /* 5030 */
- XML_CHECK_NS_ANCESTOR, /* 5031 */
- XML_CHECK_NOT_UTF8, /* 5032 */
- XML_CHECK_NO_DICT, /* 5033 */
- XML_CHECK_NOT_NCNAME, /* 5034 */
- XML_CHECK_OUTSIDE_DICT, /* 5035 */
- XML_CHECK_WRONG_NAME, /* 5036 */
- XML_CHECK_NAME_NOT_NULL, /* 5037 */
- XML_I18N_NO_NAME = 6000,
- XML_I18N_NO_HANDLER, /* 6001 */
- XML_I18N_EXCESS_HANDLER, /* 6002 */
- XML_I18N_CONV_FAILED, /* 6003 */
- XML_I18N_NO_OUTPUT, /* 6004 */
- XML_BUF_OVERFLOW = 7000
-} xmlParserErrors;
-
-/**
- * xmlGenericErrorFunc:
- * @ctx: a parsing context
- * @msg: the message
- * @...: the extra arguments of the varags to format the message
- *
- * Signature of the function to use when there is an error and
- * no parsing or validity context available .
- */
-typedef void (XMLCDECL *xmlGenericErrorFunc) (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-/**
- * xmlStructuredErrorFunc:
- * @userData: user provided data for the error callback
- * @error: the error being raised.
- *
- * Signature of the function to use when there is an error and
- * the module handles the new error reporting mechanism.
- */
-typedef void (XMLCALL *xmlStructuredErrorFunc) (void *userData, xmlErrorPtr error);
-
-/*
- * Use the following function to reset the two global variables
- * xmlGenericError and xmlGenericErrorContext.
- */
-XMLPUBFUN void XMLCALL
- xmlSetGenericErrorFunc (void *ctx,
- xmlGenericErrorFunc handler);
-XMLPUBFUN void XMLCALL
- initGenericErrorDefaultFunc (xmlGenericErrorFunc *handler);
-
-XMLPUBFUN void XMLCALL
- xmlSetStructuredErrorFunc (void *ctx,
- xmlStructuredErrorFunc handler);
-/*
- * Default message routines used by SAX and Valid context for error
- * and warning reporting.
- */
-XMLPUBFUN void XMLCDECL
- xmlParserError (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-XMLPUBFUN void XMLCDECL
- xmlParserWarning (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-XMLPUBFUN void XMLCDECL
- xmlParserValidityError (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-XMLPUBFUN void XMLCDECL
- xmlParserValidityWarning (void *ctx,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(2,3);
-XMLPUBFUN void XMLCALL
- xmlParserPrintFileInfo (xmlParserInputPtr input);
-XMLPUBFUN void XMLCALL
- xmlParserPrintFileContext (xmlParserInputPtr input);
-
-/*
- * Extended error information routines
- */
-XMLPUBFUN xmlErrorPtr XMLCALL
- xmlGetLastError (void);
-XMLPUBFUN void XMLCALL
- xmlResetLastError (void);
-XMLPUBFUN xmlErrorPtr XMLCALL
- xmlCtxtGetLastError (void *ctx);
-XMLPUBFUN void XMLCALL
- xmlCtxtResetLastError (void *ctx);
-XMLPUBFUN void XMLCALL
- xmlResetError (xmlErrorPtr err);
-XMLPUBFUN int XMLCALL
- xmlCopyError (xmlErrorPtr from,
- xmlErrorPtr to);
-
-#ifdef IN_LIBXML
-/*
- * Internal callback reporting routine
- */
-XMLPUBFUN void XMLCALL
- __xmlRaiseError (xmlStructuredErrorFunc schannel,
- xmlGenericErrorFunc channel,
- void *data,
- void *ctx,
- void *node,
- int domain,
- int code,
- xmlErrorLevel level,
- const char *file,
- int line,
- const char *str1,
- const char *str2,
- const char *str3,
- int int1,
- int col,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(16,17);
-XMLPUBFUN void XMLCALL
- __xmlSimpleError (int domain,
- int code,
- xmlNodePtr node,
- const char *msg,
- const char *extra) LIBXML_ATTR_FORMAT(4,0);
-#endif
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_ERROR_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlexports.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlexports.h
deleted file mode 100644
index 2c79f814..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlexports.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Summary: macros for marking symbols as exportable/importable.
- * Description: macros for marking symbols as exportable/importable.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Igor Zlatovic <igor@zlatkovic.com>
- */
-
-#ifndef __XML_EXPORTS_H__
-#define __XML_EXPORTS_H__
-
-/**
- * XMLPUBFUN, XMLPUBVAR, XMLCALL
- *
- * Macros which declare an exportable function, an exportable variable and
- * the calling convention used for functions.
- *
- * Please use an extra block for every platform/compiler combination when
- * modifying this, rather than overlong #ifdef lines. This helps
- * readability as well as the fact that different compilers on the same
- * platform might need different definitions.
- */
-
-/**
- * XMLPUBFUN:
- *
- * Macros which declare an exportable function
- */
-#define XMLPUBFUN
-/**
- * XMLPUBVAR:
- *
- * Macros which declare an exportable variable
- */
-#define XMLPUBVAR extern
-/**
- * XMLCALL:
- *
- * Macros which declare the called convention for exported functions
- */
-#define XMLCALL
-/**
- * XMLCDECL:
- *
- * Macro which declares the calling convention for exported functions that
- * use '...'.
- */
-#define XMLCDECL
-
-/** DOC_DISABLE */
-
-/* Windows platform with MS compiler */
-#if defined(_WIN32) && defined(_MSC_VER)
- #undef XMLPUBFUN
- #undef XMLPUBVAR
- #undef XMLCALL
- #undef XMLCDECL
- #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
- #define XMLPUBFUN __declspec(dllexport)
- #define XMLPUBVAR __declspec(dllexport)
- #else
- #define XMLPUBFUN
- #if !defined(LIBXML_STATIC)
- #define XMLPUBVAR __declspec(dllimport) extern
- #else
- #define XMLPUBVAR extern
- #endif
- #endif
- #if defined(LIBXML_FASTCALL)
- #define XMLCALL __fastcall
- #else
- #define XMLCALL __cdecl
- #endif
- #define XMLCDECL __cdecl
- #if !defined _REENTRANT
- #define _REENTRANT
- #endif
-#endif
-
-/* Windows platform with Borland compiler */
-#if defined(_WIN32) && defined(__BORLANDC__)
- #undef XMLPUBFUN
- #undef XMLPUBVAR
- #undef XMLCALL
- #undef XMLCDECL
- #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
- #define XMLPUBFUN __declspec(dllexport)
- #define XMLPUBVAR __declspec(dllexport) extern
- #else
- #define XMLPUBFUN
- #if !defined(LIBXML_STATIC)
- #define XMLPUBVAR __declspec(dllimport) extern
- #else
- #define XMLPUBVAR extern
- #endif
- #endif
- #define XMLCALL __cdecl
- #define XMLCDECL __cdecl
- #if !defined _REENTRANT
- #define _REENTRANT
- #endif
-#endif
-
-/* Windows platform with GNU compiler (Mingw) */
-#if defined(_WIN32) && defined(__MINGW32__)
- #undef XMLPUBFUN
- #undef XMLPUBVAR
- #undef XMLCALL
- #undef XMLCDECL
- /*
- * if defined(IN_LIBXML) this raises problems on mingw with msys
- * _imp__xmlFree listed as missing. Try to workaround the problem
- * by also making that declaration when compiling client code.
- */
- #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
- #define XMLPUBFUN __declspec(dllexport)
- #define XMLPUBVAR __declspec(dllexport) extern
- #else
- #define XMLPUBFUN
- #if !defined(LIBXML_STATIC)
- #define XMLPUBVAR __declspec(dllimport) extern
- #else
- #define XMLPUBVAR extern
- #endif
- #endif
- #define XMLCALL __cdecl
- #define XMLCDECL __cdecl
- #if !defined _REENTRANT
- #define _REENTRANT
- #endif
-#endif
-
-/* Cygwin platform, GNU compiler */
-#if defined(_WIN32) && defined(__CYGWIN__)
- #undef XMLPUBFUN
- #undef XMLPUBVAR
- #undef XMLCALL
- #undef XMLCDECL
- #if defined(IN_LIBXML) && !defined(LIBXML_STATIC)
- #define XMLPUBFUN __declspec(dllexport)
- #define XMLPUBVAR __declspec(dllexport)
- #else
- #define XMLPUBFUN
- #if !defined(LIBXML_STATIC)
- #define XMLPUBVAR __declspec(dllimport) extern
- #else
- #define XMLPUBVAR
- #endif
- #endif
- #define XMLCALL __cdecl
- #define XMLCDECL __cdecl
-#endif
-
-/* Compatibility */
-#if !defined(LIBXML_DLL_IMPORT)
-#define LIBXML_DLL_IMPORT XMLPUBVAR
-#endif
-
-#endif /* __XML_EXPORTS_H__ */
-
-
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlmemory.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlmemory.h
deleted file mode 100644
index 17e375a3..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlmemory.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Summary: interface for the memory allocator
- * Description: provides interfaces for the memory allocator,
- * including debugging capabilities.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-
-#ifndef __DEBUG_MEMORY_ALLOC__
-#define __DEBUG_MEMORY_ALLOC__
-
-#include <stdio.h>
-#include <libxml/xmlversion.h>
-
-/**
- * DEBUG_MEMORY:
- *
- * DEBUG_MEMORY replaces the allocator with a collect and debug
- * shell to the libc allocator.
- * DEBUG_MEMORY should only be activated when debugging
- * libxml i.e. if libxml has been configured with --with-debug-mem too.
- */
-/* #define DEBUG_MEMORY_FREED */
-/* #define DEBUG_MEMORY_LOCATION */
-
-#ifdef DEBUG
-#ifndef DEBUG_MEMORY
-#define DEBUG_MEMORY
-#endif
-#endif
-
-/**
- * DEBUG_MEMORY_LOCATION:
- *
- * DEBUG_MEMORY_LOCATION should be activated only when debugging
- * libxml i.e. if libxml has been configured with --with-debug-mem too.
- */
-#ifdef DEBUG_MEMORY_LOCATION
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The XML memory wrapper support 4 basic overloadable functions.
- */
-/**
- * xmlFreeFunc:
- * @mem: an already allocated block of memory
- *
- * Signature for a free() implementation.
- */
-typedef void (XMLCALL *xmlFreeFunc)(void *mem);
-/**
- * xmlMallocFunc:
- * @size: the size requested in bytes
- *
- * Signature for a malloc() implementation.
- *
- * Returns a pointer to the newly allocated block or NULL in case of error.
- */
-typedef void *(LIBXML_ATTR_ALLOC_SIZE(1) XMLCALL *xmlMallocFunc)(size_t size);
-
-/**
- * xmlReallocFunc:
- * @mem: an already allocated block of memory
- * @size: the new size requested in bytes
- *
- * Signature for a realloc() implementation.
- *
- * Returns a pointer to the newly reallocated block or NULL in case of error.
- */
-typedef void *(XMLCALL *xmlReallocFunc)(void *mem, size_t size);
-
-/**
- * xmlStrdupFunc:
- * @str: a zero terminated string
- *
- * Signature for an strdup() implementation.
- *
- * Returns the copy of the string or NULL in case of error.
- */
-typedef char *(XMLCALL *xmlStrdupFunc)(const char *str);
-
-/*
- * The 4 interfaces used for all memory handling within libxml.
-LIBXML_DLL_IMPORT xmlFreeFunc xmlFree;
-LIBXML_DLL_IMPORT xmlMallocFunc xmlMalloc;
-LIBXML_DLL_IMPORT xmlMallocFunc xmlMallocAtomic;
-LIBXML_DLL_IMPORT xmlReallocFunc xmlRealloc;
-LIBXML_DLL_IMPORT xmlStrdupFunc xmlMemStrdup;
- */
-
-/*
- * The way to overload the existing functions.
- * The xmlGc function have an extra entry for atomic block
- * allocations useful for garbage collected memory allocators
- */
-XMLPUBFUN int XMLCALL
- xmlMemSetup (xmlFreeFunc freeFunc,
- xmlMallocFunc mallocFunc,
- xmlReallocFunc reallocFunc,
- xmlStrdupFunc strdupFunc);
-XMLPUBFUN int XMLCALL
- xmlMemGet (xmlFreeFunc *freeFunc,
- xmlMallocFunc *mallocFunc,
- xmlReallocFunc *reallocFunc,
- xmlStrdupFunc *strdupFunc);
-XMLPUBFUN int XMLCALL
- xmlGcMemSetup (xmlFreeFunc freeFunc,
- xmlMallocFunc mallocFunc,
- xmlMallocFunc mallocAtomicFunc,
- xmlReallocFunc reallocFunc,
- xmlStrdupFunc strdupFunc);
-XMLPUBFUN int XMLCALL
- xmlGcMemGet (xmlFreeFunc *freeFunc,
- xmlMallocFunc *mallocFunc,
- xmlMallocFunc *mallocAtomicFunc,
- xmlReallocFunc *reallocFunc,
- xmlStrdupFunc *strdupFunc);
-
-/*
- * Initialization of the memory layer.
- */
-XMLPUBFUN int XMLCALL
- xmlInitMemory (void);
-
-/*
- * Cleanup of the memory layer.
- */
-XMLPUBFUN void XMLCALL
- xmlCleanupMemory (void);
-/*
- * These are specific to the XML debug memory wrapper.
- */
-XMLPUBFUN int XMLCALL
- xmlMemUsed (void);
-XMLPUBFUN int XMLCALL
- xmlMemBlocks (void);
-XMLPUBFUN void XMLCALL
- xmlMemDisplay (FILE *fp);
-XMLPUBFUN void XMLCALL
- xmlMemDisplayLast(FILE *fp, long nbBytes);
-XMLPUBFUN void XMLCALL
- xmlMemShow (FILE *fp, int nr);
-XMLPUBFUN void XMLCALL
- xmlMemoryDump (void);
-XMLPUBFUN void * XMLCALL
- xmlMemMalloc (size_t size) LIBXML_ATTR_ALLOC_SIZE(1);
-XMLPUBFUN void * XMLCALL
- xmlMemRealloc (void *ptr,size_t size);
-XMLPUBFUN void XMLCALL
- xmlMemFree (void *ptr);
-XMLPUBFUN char * XMLCALL
- xmlMemoryStrdup (const char *str);
-XMLPUBFUN void * XMLCALL
- xmlMallocLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
-XMLPUBFUN void * XMLCALL
- xmlReallocLoc (void *ptr, size_t size, const char *file, int line);
-XMLPUBFUN void * XMLCALL
- xmlMallocAtomicLoc (size_t size, const char *file, int line) LIBXML_ATTR_ALLOC_SIZE(1);
-XMLPUBFUN char * XMLCALL
- xmlMemStrdupLoc (const char *str, const char *file, int line);
-
-
-#ifdef DEBUG_MEMORY_LOCATION
-/**
- * xmlMalloc:
- * @size: number of bytes to allocate
- *
- * Wrapper for the malloc() function used in the XML library.
- *
- * Returns the pointer to the allocated area or NULL in case of error.
- */
-#define xmlMalloc(size) xmlMallocLoc((size), __FILE__, __LINE__)
-/**
- * xmlMallocAtomic:
- * @size: number of bytes to allocate
- *
- * Wrapper for the malloc() function used in the XML library for allocation
- * of block not containing pointers to other areas.
- *
- * Returns the pointer to the allocated area or NULL in case of error.
- */
-#define xmlMallocAtomic(size) xmlMallocAtomicLoc((size), __FILE__, __LINE__)
-/**
- * xmlRealloc:
- * @ptr: pointer to the existing allocated area
- * @size: number of bytes to allocate
- *
- * Wrapper for the realloc() function used in the XML library.
- *
- * Returns the pointer to the allocated area or NULL in case of error.
- */
-#define xmlRealloc(ptr, size) xmlReallocLoc((ptr), (size), __FILE__, __LINE__)
-/**
- * xmlMemStrdup:
- * @str: pointer to the existing string
- *
- * Wrapper for the strdup() function, xmlStrdup() is usually preferred.
- *
- * Returns the pointer to the allocated area or NULL in case of error.
- */
-#define xmlMemStrdup(str) xmlMemStrdupLoc((str), __FILE__, __LINE__)
-
-#endif /* DEBUG_MEMORY_LOCATION */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#ifndef __XML_GLOBALS_H
-#ifndef __XML_THREADS_H__
-#include <libxml/threads.h>
-#include <libxml/globals.h>
-#endif
-#endif
-
-#endif /* __DEBUG_MEMORY_ALLOC__ */
-
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlmodule.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlmodule.h
deleted file mode 100644
index 96678200..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlmodule.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Summary: dynamic module loading
- * Description: basic API for dynamic module loading, used by
- * libexslt added in 2.6.17
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Joel W. Reed
- */
-
-#ifndef __XML_MODULE_H__
-#define __XML_MODULE_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_MODULES_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlModulePtr:
- *
- * A handle to a dynamically loaded module
- */
-typedef struct _xmlModule xmlModule;
-typedef xmlModule *xmlModulePtr;
-
-/**
- * xmlModuleOption:
- *
- * enumeration of options that can be passed down to xmlModuleOpen()
- */
-typedef enum {
- XML_MODULE_LAZY = 1, /* lazy binding */
- XML_MODULE_LOCAL= 2 /* local binding */
-} xmlModuleOption;
-
-XMLPUBFUN xmlModulePtr XMLCALL xmlModuleOpen (const char *filename,
- int options);
-
-XMLPUBFUN int XMLCALL xmlModuleSymbol (xmlModulePtr module,
- const char* name,
- void **result);
-
-XMLPUBFUN int XMLCALL xmlModuleClose (xmlModulePtr module);
-
-XMLPUBFUN int XMLCALL xmlModuleFree (xmlModulePtr module);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_MODULES_ENABLED */
-
-#endif /*__XML_MODULE_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlreader.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlreader.h
deleted file mode 100644
index 2c99e3a7..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlreader.h
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- * Summary: the XMLReader implementation
- * Description: API of the XML streaming API based on C# interfaces.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_XMLREADER_H__
-#define __XML_XMLREADER_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-#include <libxml/xmlIO.h>
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#include <libxml/xmlschemas.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlParserSeverities:
- *
- * How severe an error callback is when the per-reader error callback API
- * is used.
- */
-typedef enum {
- XML_PARSER_SEVERITY_VALIDITY_WARNING = 1,
- XML_PARSER_SEVERITY_VALIDITY_ERROR = 2,
- XML_PARSER_SEVERITY_WARNING = 3,
- XML_PARSER_SEVERITY_ERROR = 4
-} xmlParserSeverities;
-
-#ifdef LIBXML_READER_ENABLED
-
-/**
- * xmlTextReaderMode:
- *
- * Internal state values for the reader.
- */
-typedef enum {
- XML_TEXTREADER_MODE_INITIAL = 0,
- XML_TEXTREADER_MODE_INTERACTIVE = 1,
- XML_TEXTREADER_MODE_ERROR = 2,
- XML_TEXTREADER_MODE_EOF =3,
- XML_TEXTREADER_MODE_CLOSED = 4,
- XML_TEXTREADER_MODE_READING = 5
-} xmlTextReaderMode;
-
-/**
- * xmlParserProperties:
- *
- * Some common options to use with xmlTextReaderSetParserProp, but it
- * is better to use xmlParserOption and the xmlReaderNewxxx and
- * xmlReaderForxxx APIs now.
- */
-typedef enum {
- XML_PARSER_LOADDTD = 1,
- XML_PARSER_DEFAULTATTRS = 2,
- XML_PARSER_VALIDATE = 3,
- XML_PARSER_SUBST_ENTITIES = 4
-} xmlParserProperties;
-
-/**
- * xmlReaderTypes:
- *
- * Predefined constants for the different types of nodes.
- */
-typedef enum {
- XML_READER_TYPE_NONE = 0,
- XML_READER_TYPE_ELEMENT = 1,
- XML_READER_TYPE_ATTRIBUTE = 2,
- XML_READER_TYPE_TEXT = 3,
- XML_READER_TYPE_CDATA = 4,
- XML_READER_TYPE_ENTITY_REFERENCE = 5,
- XML_READER_TYPE_ENTITY = 6,
- XML_READER_TYPE_PROCESSING_INSTRUCTION = 7,
- XML_READER_TYPE_COMMENT = 8,
- XML_READER_TYPE_DOCUMENT = 9,
- XML_READER_TYPE_DOCUMENT_TYPE = 10,
- XML_READER_TYPE_DOCUMENT_FRAGMENT = 11,
- XML_READER_TYPE_NOTATION = 12,
- XML_READER_TYPE_WHITESPACE = 13,
- XML_READER_TYPE_SIGNIFICANT_WHITESPACE = 14,
- XML_READER_TYPE_END_ELEMENT = 15,
- XML_READER_TYPE_END_ENTITY = 16,
- XML_READER_TYPE_XML_DECLARATION = 17
-} xmlReaderTypes;
-
-/**
- * xmlTextReader:
- *
- * Structure for an xmlReader context.
- */
-typedef struct _xmlTextReader xmlTextReader;
-
-/**
- * xmlTextReaderPtr:
- *
- * Pointer to an xmlReader context.
- */
-typedef xmlTextReader *xmlTextReaderPtr;
-
-/*
- * Constructors & Destructor
- */
-XMLPUBFUN xmlTextReaderPtr XMLCALL
- xmlNewTextReader (xmlParserInputBufferPtr input,
- const char *URI);
-XMLPUBFUN xmlTextReaderPtr XMLCALL
- xmlNewTextReaderFilename(const char *URI);
-
-XMLPUBFUN void XMLCALL
- xmlFreeTextReader (xmlTextReaderPtr reader);
-
-XMLPUBFUN int XMLCALL
- xmlTextReaderSetup(xmlTextReaderPtr reader,
- xmlParserInputBufferPtr input, const char *URL,
- const char *encoding, int options);
-
-/*
- * Iterators
- */
-XMLPUBFUN int XMLCALL
- xmlTextReaderRead (xmlTextReaderPtr reader);
-
-#ifdef LIBXML_WRITER_ENABLED
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderReadInnerXml(xmlTextReaderPtr reader);
-
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderReadOuterXml(xmlTextReaderPtr reader);
-#endif
-
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderReadString (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader);
-
-/*
- * Attributes of the node
- */
-XMLPUBFUN int XMLCALL
- xmlTextReaderAttributeCount(xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderDepth (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderHasAttributes(xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderHasValue(xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderIsDefault (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderNodeType (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderQuoteChar (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderReadState (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader);
-
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstBaseUri (xmlTextReaderPtr reader);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstLocalName (xmlTextReaderPtr reader);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstName (xmlTextReaderPtr reader);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstPrefix (xmlTextReaderPtr reader);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstXmlLang (xmlTextReaderPtr reader);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstString (xmlTextReaderPtr reader,
- const xmlChar *str);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstValue (xmlTextReaderPtr reader);
-
-/*
- * use the Const version of the routine for
- * better performance and simpler code
- */
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderBaseUri (xmlTextReaderPtr reader);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderLocalName (xmlTextReaderPtr reader);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderName (xmlTextReaderPtr reader);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderNamespaceUri(xmlTextReaderPtr reader);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderPrefix (xmlTextReaderPtr reader);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderXmlLang (xmlTextReaderPtr reader);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderValue (xmlTextReaderPtr reader);
-
-/*
- * Methods of the XmlTextReader
- */
-XMLPUBFUN int XMLCALL
- xmlTextReaderClose (xmlTextReaderPtr reader);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderGetAttributeNo (xmlTextReaderPtr reader,
- int no);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderGetAttribute (xmlTextReaderPtr reader,
- const xmlChar *name);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderGetAttributeNs (xmlTextReaderPtr reader,
- const xmlChar *localName,
- const xmlChar *namespaceURI);
-XMLPUBFUN xmlParserInputBufferPtr XMLCALL
- xmlTextReaderGetRemainder (xmlTextReaderPtr reader);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderLookupNamespace(xmlTextReaderPtr reader,
- const xmlChar *prefix);
-XMLPUBFUN int XMLCALL
- xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader,
- int no);
-XMLPUBFUN int XMLCALL
- xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader,
- const xmlChar *name);
-XMLPUBFUN int XMLCALL
- xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
- const xmlChar *localName,
- const xmlChar *namespaceURI);
-XMLPUBFUN int XMLCALL
- xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderMoveToElement (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderNormalization (xmlTextReaderPtr reader);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstEncoding (xmlTextReaderPtr reader);
-
-/*
- * Extensions
- */
-XMLPUBFUN int XMLCALL
- xmlTextReaderSetParserProp (xmlTextReaderPtr reader,
- int prop,
- int value);
-XMLPUBFUN int XMLCALL
- xmlTextReaderGetParserProp (xmlTextReaderPtr reader,
- int prop);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlTextReaderCurrentNode (xmlTextReaderPtr reader);
-
-XMLPUBFUN int XMLCALL
- xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader);
-
-XMLPUBFUN int XMLCALL
- xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader);
-
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlTextReaderPreserve (xmlTextReaderPtr reader);
-#ifdef LIBXML_PATTERN_ENABLED
-XMLPUBFUN int XMLCALL
- xmlTextReaderPreservePattern(xmlTextReaderPtr reader,
- const xmlChar *pattern,
- const xmlChar **namespaces);
-#endif /* LIBXML_PATTERN_ENABLED */
-XMLPUBFUN xmlDocPtr XMLCALL
- xmlTextReaderCurrentDoc (xmlTextReaderPtr reader);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlTextReaderExpand (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderNext (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderNextSibling (xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderIsValid (xmlTextReaderPtr reader);
-#ifdef LIBXML_SCHEMAS_ENABLED
-XMLPUBFUN int XMLCALL
- xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader,
- const char *rng);
-XMLPUBFUN int XMLCALL
- xmlTextReaderRelaxNGValidateCtxt(xmlTextReaderPtr reader,
- xmlRelaxNGValidCtxtPtr ctxt,
- int options);
-
-XMLPUBFUN int XMLCALL
- xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader,
- xmlRelaxNGPtr schema);
-XMLPUBFUN int XMLCALL
- xmlTextReaderSchemaValidate (xmlTextReaderPtr reader,
- const char *xsd);
-XMLPUBFUN int XMLCALL
- xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader,
- xmlSchemaValidCtxtPtr ctxt,
- int options);
-XMLPUBFUN int XMLCALL
- xmlTextReaderSetSchema (xmlTextReaderPtr reader,
- xmlSchemaPtr schema);
-#endif
-XMLPUBFUN const xmlChar * XMLCALL
- xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader);
-XMLPUBFUN int XMLCALL
- xmlTextReaderStandalone (xmlTextReaderPtr reader);
-
-
-/*
- * Index lookup
- */
-XMLPUBFUN long XMLCALL
- xmlTextReaderByteConsumed (xmlTextReaderPtr reader);
-
-/*
- * New more complete APIs for simpler creation and reuse of readers
- */
-XMLPUBFUN xmlTextReaderPtr XMLCALL
- xmlReaderWalker (xmlDocPtr doc);
-XMLPUBFUN xmlTextReaderPtr XMLCALL
- xmlReaderForDoc (const xmlChar * cur,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlTextReaderPtr XMLCALL
- xmlReaderForFile (const char *filename,
- const char *encoding,
- int options);
-XMLPUBFUN xmlTextReaderPtr XMLCALL
- xmlReaderForMemory (const char *buffer,
- int size,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlTextReaderPtr XMLCALL
- xmlReaderForFd (int fd,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN xmlTextReaderPtr XMLCALL
- xmlReaderForIO (xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose,
- void *ioctx,
- const char *URL,
- const char *encoding,
- int options);
-
-XMLPUBFUN int XMLCALL
- xmlReaderNewWalker (xmlTextReaderPtr reader,
- xmlDocPtr doc);
-XMLPUBFUN int XMLCALL
- xmlReaderNewDoc (xmlTextReaderPtr reader,
- const xmlChar * cur,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN int XMLCALL
- xmlReaderNewFile (xmlTextReaderPtr reader,
- const char *filename,
- const char *encoding,
- int options);
-XMLPUBFUN int XMLCALL
- xmlReaderNewMemory (xmlTextReaderPtr reader,
- const char *buffer,
- int size,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN int XMLCALL
- xmlReaderNewFd (xmlTextReaderPtr reader,
- int fd,
- const char *URL,
- const char *encoding,
- int options);
-XMLPUBFUN int XMLCALL
- xmlReaderNewIO (xmlTextReaderPtr reader,
- xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose,
- void *ioctx,
- const char *URL,
- const char *encoding,
- int options);
-/*
- * Error handling extensions
- */
-typedef void * xmlTextReaderLocatorPtr;
-
-/**
- * xmlTextReaderErrorFunc:
- * @arg: the user argument
- * @msg: the message
- * @severity: the severity of the error
- * @locator: a locator indicating where the error occured
- *
- * Signature of an error callback from a reader parser
- */
-typedef void (XMLCALL *xmlTextReaderErrorFunc)(void *arg,
- const char *msg,
- xmlParserSeverities severity,
- xmlTextReaderLocatorPtr locator);
-XMLPUBFUN int XMLCALL
- xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator);
-XMLPUBFUN xmlChar * XMLCALL
- xmlTextReaderLocatorBaseURI (xmlTextReaderLocatorPtr locator);
-XMLPUBFUN void XMLCALL
- xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
- xmlTextReaderErrorFunc f,
- void *arg);
-XMLPUBFUN void XMLCALL
- xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
- xmlStructuredErrorFunc f,
- void *arg);
-XMLPUBFUN void XMLCALL
- xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
- xmlTextReaderErrorFunc *f,
- void **arg);
-
-#endif /* LIBXML_READER_ENABLED */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __XML_XMLREADER_H__ */
-
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlregexp.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlregexp.h
deleted file mode 100644
index 7009645a..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlregexp.h
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Summary: regular expressions handling
- * Description: basic API for libxml regular expressions handling used
- * for XML Schemas and validation.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_REGEXP_H__
-#define __XML_REGEXP_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_REGEXP_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlRegexpPtr:
- *
- * A libxml regular expression, they can actually be far more complex
- * thank the POSIX regex expressions.
- */
-typedef struct _xmlRegexp xmlRegexp;
-typedef xmlRegexp *xmlRegexpPtr;
-
-/**
- * xmlRegExecCtxtPtr:
- *
- * A libxml progressive regular expression evaluation context
- */
-typedef struct _xmlRegExecCtxt xmlRegExecCtxt;
-typedef xmlRegExecCtxt *xmlRegExecCtxtPtr;
-
-#ifdef __cplusplus
-}
-#endif
-#include <libxml/tree.h>
-#include <libxml/dict.h>
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * The POSIX like API
- */
-XMLPUBFUN xmlRegexpPtr XMLCALL
- xmlRegexpCompile (const xmlChar *regexp);
-XMLPUBFUN void XMLCALL xmlRegFreeRegexp(xmlRegexpPtr regexp);
-XMLPUBFUN int XMLCALL
- xmlRegexpExec (xmlRegexpPtr comp,
- const xmlChar *value);
-XMLPUBFUN void XMLCALL
- xmlRegexpPrint (FILE *output,
- xmlRegexpPtr regexp);
-XMLPUBFUN int XMLCALL
- xmlRegexpIsDeterminist(xmlRegexpPtr comp);
-
-/**
- * xmlRegExecCallbacks:
- * @exec: the regular expression context
- * @token: the current token string
- * @transdata: transition data
- * @inputdata: input data
- *
- * Callback function when doing a transition in the automata
- */
-typedef void (*xmlRegExecCallbacks) (xmlRegExecCtxtPtr exec,
- const xmlChar *token,
- void *transdata,
- void *inputdata);
-
-/*
- * The progressive API
- */
-XMLPUBFUN xmlRegExecCtxtPtr XMLCALL
- xmlRegNewExecCtxt (xmlRegexpPtr comp,
- xmlRegExecCallbacks callback,
- void *data);
-XMLPUBFUN void XMLCALL
- xmlRegFreeExecCtxt (xmlRegExecCtxtPtr exec);
-XMLPUBFUN int XMLCALL
- xmlRegExecPushString(xmlRegExecCtxtPtr exec,
- const xmlChar *value,
- void *data);
-XMLPUBFUN int XMLCALL
- xmlRegExecPushString2(xmlRegExecCtxtPtr exec,
- const xmlChar *value,
- const xmlChar *value2,
- void *data);
-
-XMLPUBFUN int XMLCALL
- xmlRegExecNextValues(xmlRegExecCtxtPtr exec,
- int *nbval,
- int *nbneg,
- xmlChar **values,
- int *terminal);
-XMLPUBFUN int XMLCALL
- xmlRegExecErrInfo (xmlRegExecCtxtPtr exec,
- const xmlChar **string,
- int *nbval,
- int *nbneg,
- xmlChar **values,
- int *terminal);
-#ifdef LIBXML_EXPR_ENABLED
-/*
- * Formal regular expression handling
- * Its goal is to do some formal work on content models
- */
-
-/* expressions are used within a context */
-typedef struct _xmlExpCtxt xmlExpCtxt;
-typedef xmlExpCtxt *xmlExpCtxtPtr;
-
-XMLPUBFUN void XMLCALL
- xmlExpFreeCtxt (xmlExpCtxtPtr ctxt);
-XMLPUBFUN xmlExpCtxtPtr XMLCALL
- xmlExpNewCtxt (int maxNodes,
- xmlDictPtr dict);
-
-XMLPUBFUN int XMLCALL
- xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt);
-
-/* Expressions are trees but the tree is opaque */
-typedef struct _xmlExpNode xmlExpNode;
-typedef xmlExpNode *xmlExpNodePtr;
-
-typedef enum {
- XML_EXP_EMPTY = 0,
- XML_EXP_FORBID = 1,
- XML_EXP_ATOM = 2,
- XML_EXP_SEQ = 3,
- XML_EXP_OR = 4,
- XML_EXP_COUNT = 5
-} xmlExpNodeType;
-
-/*
- * 2 core expressions shared by all for the empty language set
- * and for the set with just the empty token
- */
-XMLPUBVAR xmlExpNodePtr forbiddenExp;
-XMLPUBVAR xmlExpNodePtr emptyExp;
-
-/*
- * Expressions are reference counted internally
- */
-XMLPUBFUN void XMLCALL
- xmlExpFree (xmlExpCtxtPtr ctxt,
- xmlExpNodePtr expr);
-XMLPUBFUN void XMLCALL
- xmlExpRef (xmlExpNodePtr expr);
-
-/*
- * constructors can be either manual or from a string
- */
-XMLPUBFUN xmlExpNodePtr XMLCALL
- xmlExpParse (xmlExpCtxtPtr ctxt,
- const char *expr);
-XMLPUBFUN xmlExpNodePtr XMLCALL
- xmlExpNewAtom (xmlExpCtxtPtr ctxt,
- const xmlChar *name,
- int len);
-XMLPUBFUN xmlExpNodePtr XMLCALL
- xmlExpNewOr (xmlExpCtxtPtr ctxt,
- xmlExpNodePtr left,
- xmlExpNodePtr right);
-XMLPUBFUN xmlExpNodePtr XMLCALL
- xmlExpNewSeq (xmlExpCtxtPtr ctxt,
- xmlExpNodePtr left,
- xmlExpNodePtr right);
-XMLPUBFUN xmlExpNodePtr XMLCALL
- xmlExpNewRange (xmlExpCtxtPtr ctxt,
- xmlExpNodePtr subset,
- int min,
- int max);
-/*
- * The really interesting APIs
- */
-XMLPUBFUN int XMLCALL
- xmlExpIsNillable(xmlExpNodePtr expr);
-XMLPUBFUN int XMLCALL
- xmlExpMaxToken (xmlExpNodePtr expr);
-XMLPUBFUN int XMLCALL
- xmlExpGetLanguage(xmlExpCtxtPtr ctxt,
- xmlExpNodePtr expr,
- const xmlChar**langList,
- int len);
-XMLPUBFUN int XMLCALL
- xmlExpGetStart (xmlExpCtxtPtr ctxt,
- xmlExpNodePtr expr,
- const xmlChar**tokList,
- int len);
-XMLPUBFUN xmlExpNodePtr XMLCALL
- xmlExpStringDerive(xmlExpCtxtPtr ctxt,
- xmlExpNodePtr expr,
- const xmlChar *str,
- int len);
-XMLPUBFUN xmlExpNodePtr XMLCALL
- xmlExpExpDerive (xmlExpCtxtPtr ctxt,
- xmlExpNodePtr expr,
- xmlExpNodePtr sub);
-XMLPUBFUN int XMLCALL
- xmlExpSubsume (xmlExpCtxtPtr ctxt,
- xmlExpNodePtr expr,
- xmlExpNodePtr sub);
-XMLPUBFUN void XMLCALL
- xmlExpDump (xmlBufferPtr buf,
- xmlExpNodePtr expr);
-#endif /* LIBXML_EXPR_ENABLED */
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_REGEXP_ENABLED */
-
-#endif /*__XML_REGEXP_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlsave.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlsave.h
deleted file mode 100644
index fb329b22..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlsave.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Summary: the XML document serializer
- * Description: API to save document or subtree of document
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_XMLSAVE_H__
-#define __XML_XMLSAVE_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/tree.h>
-#include <libxml/encoding.h>
-#include <libxml/xmlIO.h>
-
-#ifdef LIBXML_OUTPUT_ENABLED
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlSaveOption:
- *
- * This is the set of XML save options that can be passed down
- * to the xmlSaveToFd() and similar calls.
- */
-typedef enum {
- XML_SAVE_FORMAT = 1<<0, /* format save output */
- XML_SAVE_NO_DECL = 1<<1, /* drop the xml declaration */
- XML_SAVE_NO_EMPTY = 1<<2, /* no empty tags */
- XML_SAVE_NO_XHTML = 1<<3, /* disable XHTML1 specific rules */
- XML_SAVE_XHTML = 1<<4, /* force XHTML1 specific rules */
- XML_SAVE_AS_XML = 1<<5, /* force XML serialization on HTML doc */
- XML_SAVE_AS_HTML = 1<<6, /* force HTML serialization on XML doc */
- XML_SAVE_WSNONSIG = 1<<7 /* format with non-significant whitespace */
-} xmlSaveOption;
-
-
-typedef struct _xmlSaveCtxt xmlSaveCtxt;
-typedef xmlSaveCtxt *xmlSaveCtxtPtr;
-
-XMLPUBFUN xmlSaveCtxtPtr XMLCALL
- xmlSaveToFd (int fd,
- const char *encoding,
- int options);
-XMLPUBFUN xmlSaveCtxtPtr XMLCALL
- xmlSaveToFilename (const char *filename,
- const char *encoding,
- int options);
-
-XMLPUBFUN xmlSaveCtxtPtr XMLCALL
- xmlSaveToBuffer (xmlBufferPtr buffer,
- const char *encoding,
- int options);
-
-XMLPUBFUN xmlSaveCtxtPtr XMLCALL
- xmlSaveToIO (xmlOutputWriteCallback iowrite,
- xmlOutputCloseCallback ioclose,
- void *ioctx,
- const char *encoding,
- int options);
-
-XMLPUBFUN long XMLCALL
- xmlSaveDoc (xmlSaveCtxtPtr ctxt,
- xmlDocPtr doc);
-XMLPUBFUN long XMLCALL
- xmlSaveTree (xmlSaveCtxtPtr ctxt,
- xmlNodePtr node);
-
-XMLPUBFUN int XMLCALL
- xmlSaveFlush (xmlSaveCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlSaveClose (xmlSaveCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlSaveSetEscape (xmlSaveCtxtPtr ctxt,
- xmlCharEncodingOutputFunc escape);
-XMLPUBFUN int XMLCALL
- xmlSaveSetAttrEscape (xmlSaveCtxtPtr ctxt,
- xmlCharEncodingOutputFunc escape);
-#ifdef __cplusplus
-}
-#endif
-#endif /* LIBXML_OUTPUT_ENABLED */
-#endif /* __XML_XMLSAVE_H__ */
-
-
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlschemas.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlschemas.h
deleted file mode 100644
index 97930c7c..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlschemas.h
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Summary: incomplete XML Schemas structure implementation
- * Description: interface to the XML Schemas handling and schema validity
- * checking, it is incomplete right now.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-
-#ifndef __XML_SCHEMA_H__
-#define __XML_SCHEMA_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * This error codes are obsolete; not used any more.
- */
-typedef enum {
- XML_SCHEMAS_ERR_OK = 0,
- XML_SCHEMAS_ERR_NOROOT = 1,
- XML_SCHEMAS_ERR_UNDECLAREDELEM,
- XML_SCHEMAS_ERR_NOTTOPLEVEL,
- XML_SCHEMAS_ERR_MISSING,
- XML_SCHEMAS_ERR_WRONGELEM,
- XML_SCHEMAS_ERR_NOTYPE,
- XML_SCHEMAS_ERR_NOROLLBACK,
- XML_SCHEMAS_ERR_ISABSTRACT,
- XML_SCHEMAS_ERR_NOTEMPTY,
- XML_SCHEMAS_ERR_ELEMCONT,
- XML_SCHEMAS_ERR_HAVEDEFAULT,
- XML_SCHEMAS_ERR_NOTNILLABLE,
- XML_SCHEMAS_ERR_EXTRACONTENT,
- XML_SCHEMAS_ERR_INVALIDATTR,
- XML_SCHEMAS_ERR_INVALIDELEM,
- XML_SCHEMAS_ERR_NOTDETERMINIST,
- XML_SCHEMAS_ERR_CONSTRUCT,
- XML_SCHEMAS_ERR_INTERNAL,
- XML_SCHEMAS_ERR_NOTSIMPLE,
- XML_SCHEMAS_ERR_ATTRUNKNOWN,
- XML_SCHEMAS_ERR_ATTRINVALID,
- XML_SCHEMAS_ERR_VALUE,
- XML_SCHEMAS_ERR_FACET,
- XML_SCHEMAS_ERR_,
- XML_SCHEMAS_ERR_XXX
-} xmlSchemaValidError;
-
-/*
-* ATTENTION: Change xmlSchemaSetValidOptions's check
-* for invalid values, if adding to the validation
-* options below.
-*/
-/**
- * xmlSchemaValidOption:
- *
- * This is the set of XML Schema validation options.
- */
-typedef enum {
- XML_SCHEMA_VAL_VC_I_CREATE = 1<<0
- /* Default/fixed: create an attribute node
- * or an element's text node on the instance.
- */
-} xmlSchemaValidOption;
-
-/*
- XML_SCHEMA_VAL_XSI_ASSEMBLE = 1<<1,
- * assemble schemata using
- * xsi:schemaLocation and
- * xsi:noNamespaceSchemaLocation
-*/
-
-/**
- * The schemas related types are kept internal
- */
-typedef struct _xmlSchema xmlSchema;
-typedef xmlSchema *xmlSchemaPtr;
-
-/**
- * xmlSchemaValidityErrorFunc:
- * @ctx: the validation context
- * @msg: the message
- * @...: extra arguments
- *
- * Signature of an error callback from an XSD validation
- */
-typedef void (XMLCDECL *xmlSchemaValidityErrorFunc)
- (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-
-/**
- * xmlSchemaValidityWarningFunc:
- * @ctx: the validation context
- * @msg: the message
- * @...: extra arguments
- *
- * Signature of a warning callback from an XSD validation
- */
-typedef void (XMLCDECL *xmlSchemaValidityWarningFunc)
- (void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-
-/**
- * A schemas validation context
- */
-typedef struct _xmlSchemaParserCtxt xmlSchemaParserCtxt;
-typedef xmlSchemaParserCtxt *xmlSchemaParserCtxtPtr;
-
-typedef struct _xmlSchemaValidCtxt xmlSchemaValidCtxt;
-typedef xmlSchemaValidCtxt *xmlSchemaValidCtxtPtr;
-
-/**
- * xmlSchemaValidityLocatorFunc:
- * @ctx: user provided context
- * @file: returned file information
- * @line: returned line information
- *
- * A schemas validation locator, a callback called by the validator.
- * This is used when file or node informations are not available
- * to find out what file and line number are affected
- *
- * Returns: 0 in case of success and -1 in case of error
- */
-
-typedef int (XMLCDECL *xmlSchemaValidityLocatorFunc) (void *ctx,
- const char **file, unsigned long *line);
-
-/*
- * Interfaces for parsing.
- */
-XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
- xmlSchemaNewParserCtxt (const char *URL);
-XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
- xmlSchemaNewMemParserCtxt (const char *buffer,
- int size);
-XMLPUBFUN xmlSchemaParserCtxtPtr XMLCALL
- xmlSchemaNewDocParserCtxt (xmlDocPtr doc);
-XMLPUBFUN void XMLCALL
- xmlSchemaFreeParserCtxt (xmlSchemaParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlSchemaSetParserErrors (xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaValidityErrorFunc err,
- xmlSchemaValidityWarningFunc warn,
- void *ctx);
-XMLPUBFUN void XMLCALL
- xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt,
- xmlStructuredErrorFunc serror,
- void *ctx);
-XMLPUBFUN int XMLCALL
- xmlSchemaGetParserErrors(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaValidityErrorFunc * err,
- xmlSchemaValidityWarningFunc * warn,
- void **ctx);
-XMLPUBFUN int XMLCALL
- xmlSchemaIsValid (xmlSchemaValidCtxtPtr ctxt);
-
-XMLPUBFUN xmlSchemaPtr XMLCALL
- xmlSchemaParse (xmlSchemaParserCtxtPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlSchemaFree (xmlSchemaPtr schema);
-#ifdef LIBXML_OUTPUT_ENABLED
-XMLPUBFUN void XMLCALL
- xmlSchemaDump (FILE *output,
- xmlSchemaPtr schema);
-#endif /* LIBXML_OUTPUT_ENABLED */
-/*
- * Interfaces for validating
- */
-XMLPUBFUN void XMLCALL
- xmlSchemaSetValidErrors (xmlSchemaValidCtxtPtr ctxt,
- xmlSchemaValidityErrorFunc err,
- xmlSchemaValidityWarningFunc warn,
- void *ctx);
-XMLPUBFUN void XMLCALL
- xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt,
- xmlStructuredErrorFunc serror,
- void *ctx);
-XMLPUBFUN int XMLCALL
- xmlSchemaGetValidErrors (xmlSchemaValidCtxtPtr ctxt,
- xmlSchemaValidityErrorFunc *err,
- xmlSchemaValidityWarningFunc *warn,
- void **ctx);
-XMLPUBFUN int XMLCALL
- xmlSchemaSetValidOptions (xmlSchemaValidCtxtPtr ctxt,
- int options);
-XMLPUBFUN void XMLCALL
- xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt,
- const char *filename);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt);
-
-XMLPUBFUN xmlSchemaValidCtxtPtr XMLCALL
- xmlSchemaNewValidCtxt (xmlSchemaPtr schema);
-XMLPUBFUN void XMLCALL
- xmlSchemaFreeValidCtxt (xmlSchemaValidCtxtPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateDoc (xmlSchemaValidCtxtPtr ctxt,
- xmlDocPtr instance);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateOneElement (xmlSchemaValidCtxtPtr ctxt,
- xmlNodePtr elem);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateStream (xmlSchemaValidCtxtPtr ctxt,
- xmlParserInputBufferPtr input,
- xmlCharEncoding enc,
- xmlSAXHandlerPtr sax,
- void *user_data);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateFile (xmlSchemaValidCtxtPtr ctxt,
- const char * filename,
- int options);
-
-XMLPUBFUN xmlParserCtxtPtr XMLCALL
- xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt);
-
-/*
- * Interface to insert Schemas SAX validation in a SAX stream
- */
-typedef struct _xmlSchemaSAXPlug xmlSchemaSAXPlugStruct;
-typedef xmlSchemaSAXPlugStruct *xmlSchemaSAXPlugPtr;
-
-XMLPUBFUN xmlSchemaSAXPlugPtr XMLCALL
- xmlSchemaSAXPlug (xmlSchemaValidCtxtPtr ctxt,
- xmlSAXHandlerPtr *sax,
- void **user_data);
-XMLPUBFUN int XMLCALL
- xmlSchemaSAXUnplug (xmlSchemaSAXPlugPtr plug);
-
-
-XMLPUBFUN void XMLCALL
- xmlSchemaValidateSetLocator (xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaValidityLocatorFunc f,
- void *ctxt);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_SCHEMAS_ENABLED */
-#endif /* __XML_SCHEMA_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlschemastypes.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlschemastypes.h
deleted file mode 100644
index 35d48d41..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlschemastypes.h
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Summary: implementation of XML Schema Datatypes
- * Description: module providing the XML Schema Datatypes implementation
- * both definition and validity checking
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-
-#ifndef __XML_SCHEMA_TYPES_H__
-#define __XML_SCHEMA_TYPES_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <libxml/schemasInternals.h>
-#include <libxml/xmlschemas.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
- XML_SCHEMA_WHITESPACE_UNKNOWN = 0,
- XML_SCHEMA_WHITESPACE_PRESERVE = 1,
- XML_SCHEMA_WHITESPACE_REPLACE = 2,
- XML_SCHEMA_WHITESPACE_COLLAPSE = 3
-} xmlSchemaWhitespaceValueType;
-
-XMLPUBFUN void XMLCALL
- xmlSchemaInitTypes (void);
-XMLPUBFUN void XMLCALL
- xmlSchemaCleanupTypes (void);
-XMLPUBFUN xmlSchemaTypePtr XMLCALL
- xmlSchemaGetPredefinedType (const xmlChar *name,
- const xmlChar *ns);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidatePredefinedType (xmlSchemaTypePtr type,
- const xmlChar *value,
- xmlSchemaValPtr *val);
-XMLPUBFUN int XMLCALL
- xmlSchemaValPredefTypeNode (xmlSchemaTypePtr type,
- const xmlChar *value,
- xmlSchemaValPtr *val,
- xmlNodePtr node);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateFacet (xmlSchemaTypePtr base,
- xmlSchemaFacetPtr facet,
- const xmlChar *value,
- xmlSchemaValPtr val);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateFacetWhtsp (xmlSchemaFacetPtr facet,
- xmlSchemaWhitespaceValueType fws,
- xmlSchemaValType valType,
- const xmlChar *value,
- xmlSchemaValPtr val,
- xmlSchemaWhitespaceValueType ws);
-XMLPUBFUN void XMLCALL
- xmlSchemaFreeValue (xmlSchemaValPtr val);
-XMLPUBFUN xmlSchemaFacetPtr XMLCALL
- xmlSchemaNewFacet (void);
-XMLPUBFUN int XMLCALL
- xmlSchemaCheckFacet (xmlSchemaFacetPtr facet,
- xmlSchemaTypePtr typeDecl,
- xmlSchemaParserCtxtPtr ctxt,
- const xmlChar *name);
-XMLPUBFUN void XMLCALL
- xmlSchemaFreeFacet (xmlSchemaFacetPtr facet);
-XMLPUBFUN int XMLCALL
- xmlSchemaCompareValues (xmlSchemaValPtr x,
- xmlSchemaValPtr y);
-XMLPUBFUN xmlSchemaTypePtr XMLCALL
- xmlSchemaGetBuiltInListSimpleTypeItemType (xmlSchemaTypePtr type);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateListSimpleTypeFacet (xmlSchemaFacetPtr facet,
- const xmlChar *value,
- unsigned long actualLen,
- unsigned long *expectedLen);
-XMLPUBFUN xmlSchemaTypePtr XMLCALL
- xmlSchemaGetBuiltInType (xmlSchemaValType type);
-XMLPUBFUN int XMLCALL
- xmlSchemaIsBuiltInTypeFacet (xmlSchemaTypePtr type,
- int facetType);
-XMLPUBFUN xmlChar * XMLCALL
- xmlSchemaCollapseString (const xmlChar *value);
-XMLPUBFUN xmlChar * XMLCALL
- xmlSchemaWhiteSpaceReplace (const xmlChar *value);
-XMLPUBFUN unsigned long XMLCALL
- xmlSchemaGetFacetValueAsULong (xmlSchemaFacetPtr facet);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateLengthFacet (xmlSchemaTypePtr type,
- xmlSchemaFacetPtr facet,
- const xmlChar *value,
- xmlSchemaValPtr val,
- unsigned long *length);
-XMLPUBFUN int XMLCALL
- xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
- xmlSchemaValType valType,
- const xmlChar *value,
- xmlSchemaValPtr val,
- unsigned long *length,
- xmlSchemaWhitespaceValueType ws);
-XMLPUBFUN int XMLCALL
- xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type,
- const xmlChar *value,
- xmlSchemaValPtr *val,
- xmlNodePtr node);
-XMLPUBFUN int XMLCALL
- xmlSchemaGetCanonValue (xmlSchemaValPtr val,
- const xmlChar **retValue);
-XMLPUBFUN int XMLCALL
- xmlSchemaGetCanonValueWhtsp (xmlSchemaValPtr val,
- const xmlChar **retValue,
- xmlSchemaWhitespaceValueType ws);
-XMLPUBFUN int XMLCALL
- xmlSchemaValueAppend (xmlSchemaValPtr prev,
- xmlSchemaValPtr cur);
-XMLPUBFUN xmlSchemaValPtr XMLCALL
- xmlSchemaValueGetNext (xmlSchemaValPtr cur);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlSchemaValueGetAsString (xmlSchemaValPtr val);
-XMLPUBFUN int XMLCALL
- xmlSchemaValueGetAsBoolean (xmlSchemaValPtr val);
-XMLPUBFUN xmlSchemaValPtr XMLCALL
- xmlSchemaNewStringValue (xmlSchemaValType type,
- const xmlChar *value);
-XMLPUBFUN xmlSchemaValPtr XMLCALL
- xmlSchemaNewNOTATIONValue (const xmlChar *name,
- const xmlChar *ns);
-XMLPUBFUN xmlSchemaValPtr XMLCALL
- xmlSchemaNewQNameValue (const xmlChar *namespaceName,
- const xmlChar *localName);
-XMLPUBFUN int XMLCALL
- xmlSchemaCompareValuesWhtsp (xmlSchemaValPtr x,
- xmlSchemaWhitespaceValueType xws,
- xmlSchemaValPtr y,
- xmlSchemaWhitespaceValueType yws);
-XMLPUBFUN xmlSchemaValPtr XMLCALL
- xmlSchemaCopyValue (xmlSchemaValPtr val);
-XMLPUBFUN xmlSchemaValType XMLCALL
- xmlSchemaGetValType (xmlSchemaValPtr val);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_SCHEMAS_ENABLED */
-#endif /* __XML_SCHEMA_TYPES_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlstring.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlstring.h
deleted file mode 100644
index 2d0b2d16..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlstring.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Summary: set of routines to process strings
- * Description: type and interfaces needed for the internal string handling
- * of the library, especially UTF8 processing.
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_STRING_H__
-#define __XML_STRING_H__
-
-#include <stdarg.h>
-#include <libxml/xmlversion.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * xmlChar:
- *
- * This is a basic byte in an UTF-8 encoded string.
- * It's unsigned allowing to pinpoint case where char * are assigned
- * to xmlChar * (possibly making serialization back impossible).
- */
-typedef unsigned char xmlChar;
-
-/**
- * BAD_CAST:
- *
- * Macro to cast a string to an xmlChar * when one know its safe.
- */
-#define BAD_CAST (xmlChar *)
-
-/*
- * xmlChar handling
- */
-XMLPUBFUN xmlChar * XMLCALL
- xmlStrdup (const xmlChar *cur);
-XMLPUBFUN xmlChar * XMLCALL
- xmlStrndup (const xmlChar *cur,
- int len);
-XMLPUBFUN xmlChar * XMLCALL
- xmlCharStrndup (const char *cur,
- int len);
-XMLPUBFUN xmlChar * XMLCALL
- xmlCharStrdup (const char *cur);
-XMLPUBFUN xmlChar * XMLCALL
- xmlStrsub (const xmlChar *str,
- int start,
- int len);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlStrchr (const xmlChar *str,
- xmlChar val);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlStrstr (const xmlChar *str,
- const xmlChar *val);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlStrcasestr (const xmlChar *str,
- const xmlChar *val);
-XMLPUBFUN int XMLCALL
- xmlStrcmp (const xmlChar *str1,
- const xmlChar *str2);
-XMLPUBFUN int XMLCALL
- xmlStrncmp (const xmlChar *str1,
- const xmlChar *str2,
- int len);
-XMLPUBFUN int XMLCALL
- xmlStrcasecmp (const xmlChar *str1,
- const xmlChar *str2);
-XMLPUBFUN int XMLCALL
- xmlStrncasecmp (const xmlChar *str1,
- const xmlChar *str2,
- int len);
-XMLPUBFUN int XMLCALL
- xmlStrEqual (const xmlChar *str1,
- const xmlChar *str2);
-XMLPUBFUN int XMLCALL
- xmlStrQEqual (const xmlChar *pref,
- const xmlChar *name,
- const xmlChar *str);
-XMLPUBFUN int XMLCALL
- xmlStrlen (const xmlChar *str);
-XMLPUBFUN xmlChar * XMLCALL
- xmlStrcat (xmlChar *cur,
- const xmlChar *add);
-XMLPUBFUN xmlChar * XMLCALL
- xmlStrncat (xmlChar *cur,
- const xmlChar *add,
- int len);
-XMLPUBFUN xmlChar * XMLCALL
- xmlStrncatNew (const xmlChar *str1,
- const xmlChar *str2,
- int len);
-XMLPUBFUN int XMLCALL
- xmlStrPrintf (xmlChar *buf,
- int len,
- const char *msg,
- ...) LIBXML_ATTR_FORMAT(3,4);
-XMLPUBFUN int XMLCALL
- xmlStrVPrintf (xmlChar *buf,
- int len,
- const char *msg,
- va_list ap) LIBXML_ATTR_FORMAT(3,0);
-
-XMLPUBFUN int XMLCALL
- xmlGetUTF8Char (const unsigned char *utf,
- int *len);
-XMLPUBFUN int XMLCALL
- xmlCheckUTF8 (const unsigned char *utf);
-XMLPUBFUN int XMLCALL
- xmlUTF8Strsize (const xmlChar *utf,
- int len);
-XMLPUBFUN xmlChar * XMLCALL
- xmlUTF8Strndup (const xmlChar *utf,
- int len);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlUTF8Strpos (const xmlChar *utf,
- int pos);
-XMLPUBFUN int XMLCALL
- xmlUTF8Strloc (const xmlChar *utf,
- const xmlChar *utfchar);
-XMLPUBFUN xmlChar * XMLCALL
- xmlUTF8Strsub (const xmlChar *utf,
- int start,
- int len);
-XMLPUBFUN int XMLCALL
- xmlUTF8Strlen (const xmlChar *utf);
-XMLPUBFUN int XMLCALL
- xmlUTF8Size (const xmlChar *utf);
-XMLPUBFUN int XMLCALL
- xmlUTF8Charcmp (const xmlChar *utf1,
- const xmlChar *utf2);
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_STRING_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlunicode.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlunicode.h
deleted file mode 100644
index 01ac8b61..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlunicode.h
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * Summary: Unicode character APIs
- * Description: API for the Unicode character APIs
- *
- * This file is automatically generated from the
- * UCS description files of the Unicode Character Database
- * http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1.html
- * using the genUnicode.py Python script.
- *
- * Generation date: Mon Mar 27 11:09:52 2006
- * Sources: Blocks-4.0.1.txt UnicodeData-4.0.1.txt
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_UNICODE_H__
-#define __XML_UNICODE_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_UNICODE_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-XMLPUBFUN int XMLCALL xmlUCSIsAegeanNumbers (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsAlphabeticPresentationForms (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsArabic (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsA (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsArabicPresentationFormsB (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsArmenian (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsArrows (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsBasicLatin (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsBengali (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsBlockElements (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsBopomofo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsBopomofoExtended (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsBoxDrawing (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsBraillePatterns (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsBuhid (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsByzantineMusicalSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibility (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityForms (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographs (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKCompatibilityIdeographsSupplement (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKRadicalsSupplement (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKSymbolsandPunctuation (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographs (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionA (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCJKUnifiedIdeographsExtensionB (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCherokee (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarks (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCombiningDiacriticalMarksforSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCombiningHalfMarks (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCombiningMarksforSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsControlPictures (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCurrencySymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCypriotSyllabary (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCyrillic (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCyrillicSupplement (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsDeseret (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsDevanagari (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsDingbats (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsEnclosedAlphanumerics (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsEnclosedCJKLettersandMonths (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsEthiopic (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGeneralPunctuation (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGeometricShapes (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGeorgian (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGothic (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGreek (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGreekExtended (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGreekandCoptic (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGujarati (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsGurmukhi (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHalfwidthandFullwidthForms (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHangulCompatibilityJamo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHangulJamo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHangulSyllables (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHanunoo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHebrew (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHighPrivateUseSurrogates (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHighSurrogates (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsHiragana (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsIPAExtensions (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsIdeographicDescriptionCharacters (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsKanbun (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsKangxiRadicals (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsKannada (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsKatakana (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsKatakanaPhoneticExtensions (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsKhmer (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsKhmerSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLao (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLatin1Supplement (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedA (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedB (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLatinExtendedAdditional (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLetterlikeSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLimbu (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLinearBIdeograms (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLinearBSyllabary (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsLowSurrogates (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMalayalam (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMathematicalAlphanumericSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMathematicalOperators (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsA (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousMathematicalSymbolsB (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousSymbolsandArrows (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMiscellaneousTechnical (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMongolian (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMusicalSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsMyanmar (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsNumberForms (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsOgham (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsOldItalic (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsOpticalCharacterRecognition (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsOriya (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsOsmanya (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsPhoneticExtensions (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsPrivateUse (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsPrivateUseArea (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsRunic (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsShavian (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSinhala (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSmallFormVariants (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSpacingModifierLetters (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSpecials (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSuperscriptsandSubscripts (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsA (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSupplementalArrowsB (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSupplementalMathematicalOperators (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaA (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSupplementaryPrivateUseAreaB (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsSyriac (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsTagalog (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsTagbanwa (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsTags (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsTaiLe (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsTaiXuanJingSymbols (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsTamil (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsTelugu (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsThaana (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsThai (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsTibetan (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsUgaritic (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsUnifiedCanadianAboriginalSyllabics (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectors (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsVariationSelectorsSupplement (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsYiRadicals (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsYiSyllables (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsYijingHexagramSymbols (int code);
-
-XMLPUBFUN int XMLCALL xmlUCSIsBlock (int code, const char *block);
-
-XMLPUBFUN int XMLCALL xmlUCSIsCatC (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatCc (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatCf (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatCo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatCs (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatL (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatLl (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatLm (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatLo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatLt (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatLu (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatM (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatMc (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatMe (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatMn (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatN (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatNd (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatNl (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatNo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatP (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatPc (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatPd (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatPe (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatPf (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatPi (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatPo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatPs (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatS (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatSc (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatSk (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatSm (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatSo (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatZ (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatZl (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatZp (int code);
-XMLPUBFUN int XMLCALL xmlUCSIsCatZs (int code);
-
-XMLPUBFUN int XMLCALL xmlUCSIsCat (int code, const char *cat);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_UNICODE_ENABLED */
-
-#endif /* __XML_UNICODE_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlversion.h.in b/external/libxml2_android/jni/libxml2/include/libxml/xmlversion.h.in
deleted file mode 100644
index b173be9e..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlversion.h.in
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * Summary: compile-time version informations
- * Description: compile-time version informations for the XML library
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_VERSION_H__
-#define __XML_VERSION_H__
-
-#include <libxml/xmlexports.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * use those to be sure nothing nasty will happen if
- * your library and includes mismatch
- */
-#ifndef LIBXML2_COMPILING_MSCCDEF
-XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
-#endif /* LIBXML2_COMPILING_MSCCDEF */
-
-/**
- * LIBXML_DOTTED_VERSION:
- *
- * the version string like "1.2.3"
- */
-#define LIBXML_DOTTED_VERSION "@VERSION@"
-
-/**
- * LIBXML_VERSION:
- *
- * the version number: 1.2.3 value is 10203
- */
-#define LIBXML_VERSION @LIBXML_VERSION_NUMBER@
-
-/**
- * LIBXML_VERSION_STRING:
- *
- * the version number string, 1.2.3 value is "10203"
- */
-#define LIBXML_VERSION_STRING "@LIBXML_VERSION_NUMBER@"
-
-/**
- * LIBXML_VERSION_EXTRA:
- *
- * extra version information, used to show a CVS compilation
- */
-#define LIBXML_VERSION_EXTRA "@LIBXML_VERSION_EXTRA@"
-
-/**
- * LIBXML_TEST_VERSION:
- *
- * Macro to check that the libxml version in use is compatible with
- * the version the software has been compiled against
- */
-#define LIBXML_TEST_VERSION xmlCheckVersion(@LIBXML_VERSION_NUMBER@);
-
-#ifndef VMS
-#if @WITH_TRIO@
-/**
- * WITH_TRIO:
- *
- * defined if the trio support need to be configured in
- */
-#define WITH_TRIO
-#else
-/**
- * WITHOUT_TRIO:
- *
- * defined if the trio support should not be configured in
- */
-#define WITHOUT_TRIO
-#endif
-#else /* VMS */
-/**
- * WITH_TRIO:
- *
- * defined if the trio support need to be configured in
- */
-#define WITH_TRIO 1
-#endif /* VMS */
-
-/**
- * LIBXML_THREAD_ENABLED:
- *
- * Whether the thread support is configured in
- */
-#if @WITH_THREADS@
-#if defined(_REENTRANT) || defined(__MT__) || \
- (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0 >= 199506L))
-#define LIBXML_THREAD_ENABLED
-#endif
-#endif
-
-/**
- * LIBXML_THREAD_ALLOC_ENABLED:
- *
- * Whether the allocation hooks are per-thread
- */
-#if @WITH_THREAD_ALLOC@
-#define LIBXML_THREAD_ALLOC_ENABLED
-#endif
-
-/**
- * LIBXML_TREE_ENABLED:
- *
- * Whether the DOM like tree manipulation API support is configured in
- */
-#if @WITH_TREE@
-#define LIBXML_TREE_ENABLED
-#endif
-
-/**
- * LIBXML_OUTPUT_ENABLED:
- *
- * Whether the serialization/saving support is configured in
- */
-#if @WITH_OUTPUT@
-#define LIBXML_OUTPUT_ENABLED
-#endif
-
-/**
- * LIBXML_PUSH_ENABLED:
- *
- * Whether the push parsing interfaces are configured in
- */
-#if @WITH_PUSH@
-#define LIBXML_PUSH_ENABLED
-#endif
-
-/**
- * LIBXML_READER_ENABLED:
- *
- * Whether the xmlReader parsing interface is configured in
- */
-#if @WITH_READER@
-#define LIBXML_READER_ENABLED
-#endif
-
-/**
- * LIBXML_PATTERN_ENABLED:
- *
- * Whether the xmlPattern node selection interface is configured in
- */
-#if @WITH_PATTERN@
-#define LIBXML_PATTERN_ENABLED
-#endif
-
-/**
- * LIBXML_WRITER_ENABLED:
- *
- * Whether the xmlWriter saving interface is configured in
- */
-#if @WITH_WRITER@
-#define LIBXML_WRITER_ENABLED
-#endif
-
-/**
- * LIBXML_SAX1_ENABLED:
- *
- * Whether the older SAX1 interface is configured in
- */
-#if @WITH_SAX1@
-#define LIBXML_SAX1_ENABLED
-#endif
-
-/**
- * LIBXML_FTP_ENABLED:
- *
- * Whether the FTP support is configured in
- */
-#if @WITH_FTP@
-#define LIBXML_FTP_ENABLED
-#endif
-
-/**
- * LIBXML_HTTP_ENABLED:
- *
- * Whether the HTTP support is configured in
- */
-#if @WITH_HTTP@
-#define LIBXML_HTTP_ENABLED
-#endif
-
-/**
- * LIBXML_VALID_ENABLED:
- *
- * Whether the DTD validation support is configured in
- */
-#if @WITH_VALID@
-#define LIBXML_VALID_ENABLED
-#endif
-
-/**
- * LIBXML_HTML_ENABLED:
- *
- * Whether the HTML support is configured in
- */
-#if @WITH_HTML@
-#define LIBXML_HTML_ENABLED
-#endif
-
-/**
- * LIBXML_LEGACY_ENABLED:
- *
- * Whether the deprecated APIs are compiled in for compatibility
- */
-#if @WITH_LEGACY@
-#define LIBXML_LEGACY_ENABLED
-#endif
-
-/**
- * LIBXML_C14N_ENABLED:
- *
- * Whether the Canonicalization support is configured in
- */
-#if @WITH_C14N@
-#define LIBXML_C14N_ENABLED
-#endif
-
-/**
- * LIBXML_CATALOG_ENABLED:
- *
- * Whether the Catalog support is configured in
- */
-#if @WITH_CATALOG@
-#define LIBXML_CATALOG_ENABLED
-#endif
-
-/**
- * LIBXML_DOCB_ENABLED:
- *
- * Whether the SGML Docbook support is configured in
- */
-#if @WITH_DOCB@
-#define LIBXML_DOCB_ENABLED
-#endif
-
-/**
- * LIBXML_XPATH_ENABLED:
- *
- * Whether XPath is configured in
- */
-#if @WITH_XPATH@
-#define LIBXML_XPATH_ENABLED
-#endif
-
-/**
- * LIBXML_XPTR_ENABLED:
- *
- * Whether XPointer is configured in
- */
-#if @WITH_XPTR@
-#define LIBXML_XPTR_ENABLED
-#endif
-
-/**
- * LIBXML_XINCLUDE_ENABLED:
- *
- * Whether XInclude is configured in
- */
-#if @WITH_XINCLUDE@
-#define LIBXML_XINCLUDE_ENABLED
-#endif
-
-/**
- * LIBXML_ICONV_ENABLED:
- *
- * Whether iconv support is available
- */
-#if @WITH_ICONV@
-#define LIBXML_ICONV_ENABLED
-#endif
-
-/**
- * LIBXML_ICU_ENABLED:
- *
- * Whether icu support is available
- */
-#if @WITH_ICU@
-#define LIBXML_ICU_ENABLED
-#endif
-
-/**
- * LIBXML_ISO8859X_ENABLED:
- *
- * Whether ISO-8859-* support is made available in case iconv is not
- */
-#if @WITH_ISO8859X@
-#define LIBXML_ISO8859X_ENABLED
-#endif
-
-/**
- * LIBXML_DEBUG_ENABLED:
- *
- * Whether Debugging module is configured in
- */
-#if @WITH_DEBUG@
-#define LIBXML_DEBUG_ENABLED
-#endif
-
-/**
- * DEBUG_MEMORY_LOCATION:
- *
- * Whether the memory debugging is configured in
- */
-#if @WITH_MEM_DEBUG@
-#define DEBUG_MEMORY_LOCATION
-#endif
-
-/**
- * LIBXML_DEBUG_RUNTIME:
- *
- * Whether the runtime debugging is configured in
- */
-#if @WITH_RUN_DEBUG@
-#define LIBXML_DEBUG_RUNTIME
-#endif
-
-/**
- * LIBXML_UNICODE_ENABLED:
- *
- * Whether the Unicode related interfaces are compiled in
- */
-#if @WITH_REGEXPS@
-#define LIBXML_UNICODE_ENABLED
-#endif
-
-/**
- * LIBXML_REGEXP_ENABLED:
- *
- * Whether the regular expressions interfaces are compiled in
- */
-#if @WITH_REGEXPS@
-#define LIBXML_REGEXP_ENABLED
-#endif
-
-/**
- * LIBXML_AUTOMATA_ENABLED:
- *
- * Whether the automata interfaces are compiled in
- */
-#if @WITH_REGEXPS@
-#define LIBXML_AUTOMATA_ENABLED
-#endif
-
-/**
- * LIBXML_EXPR_ENABLED:
- *
- * Whether the formal expressions interfaces are compiled in
- */
-#if @WITH_SCHEMAS@
-#define LIBXML_EXPR_ENABLED
-#endif
-
-/**
- * LIBXML_SCHEMAS_ENABLED:
- *
- * Whether the Schemas validation interfaces are compiled in
- */
-#if @WITH_SCHEMAS@
-#define LIBXML_SCHEMAS_ENABLED
-#endif
-
-/**
- * LIBXML_SCHEMATRON_ENABLED:
- *
- * Whether the Schematron validation interfaces are compiled in
- */
-#if @WITH_SCHEMATRON@
-#define LIBXML_SCHEMATRON_ENABLED
-#endif
-
-/**
- * LIBXML_MODULES_ENABLED:
- *
- * Whether the module interfaces are compiled in
- */
-#if @WITH_MODULES@
-#define LIBXML_MODULES_ENABLED
-/**
- * LIBXML_MODULE_EXTENSION:
- *
- * the string suffix used by dynamic modules (usually shared libraries)
- */
-#define LIBXML_MODULE_EXTENSION "@MODULE_EXTENSION@"
-#endif
-
-/**
- * LIBXML_ZLIB_ENABLED:
- *
- * Whether the Zlib support is compiled in
- */
-#if @WITH_ZLIB@
-#define LIBXML_ZLIB_ENABLED
-#endif
-
-/**
- * LIBXML_LZMA_ENABLED:
- *
- * Whether the Lzma support is compiled in
- */
-#if @WITH_LZMA@
-#define LIBXML_LZMA_ENABLED
-#endif
-
-#ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include <ansidecl.h>
-#endif
-
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- */
-
-#ifndef ATTRIBUTE_UNUSED
-# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)))
-# define ATTRIBUTE_UNUSED __attribute__((unused))
-# else
-# define ATTRIBUTE_UNUSED
-# endif
-#endif
-
-/**
- * LIBXML_ATTR_ALLOC_SIZE:
- *
- * Macro used to indicate to GCC this is an allocator function
- */
-
-#ifndef LIBXML_ATTR_ALLOC_SIZE
-# if (!defined(__clang__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))))
-# define LIBXML_ATTR_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
-# else
-# define LIBXML_ATTR_ALLOC_SIZE(x)
-# endif
-#else
-# define LIBXML_ATTR_ALLOC_SIZE(x)
-#endif
-
-/**
- * LIBXML_ATTR_FORMAT:
- *
- * Macro used to indicate to GCC the parameter are printf like
- */
-
-#ifndef LIBXML_ATTR_FORMAT
-# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
-# define LIBXML_ATTR_FORMAT(fmt,args) __attribute__((__format__(__printf__,fmt,args)))
-# else
-# define LIBXML_ATTR_FORMAT(fmt,args)
-# endif
-#else
-# define LIBXML_ATTR_FORMAT(fmt,args)
-#endif
-
-#else /* ! __GNUC__ */
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- */
-#define ATTRIBUTE_UNUSED
-/**
- * LIBXML_ATTR_ALLOC_SIZE:
- *
- * Macro used to indicate to GCC this is an allocator function
- */
-#define LIBXML_ATTR_ALLOC_SIZE(x)
-/**
- * LIBXML_ATTR_FORMAT:
- *
- * Macro used to indicate to GCC the parameter are printf like
- */
-#define LIBXML_ATTR_FORMAT(fmt,args)
-#endif /* __GNUC__ */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif
-
-
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlwin32version.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlwin32version.h
deleted file mode 100644
index 96412411..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlwin32version.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Summary: compile-time version informations on Windows
- * Description: compile-time version informations for the XML library
- * when compiled on the Windows platform
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_VERSION_H__
-#define __XML_VERSION_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * use those to be sure nothing nasty will happen if
- * your library and includes mismatch
- */
-#ifndef LIBXML2_COMPILING_MSCCDEF
-extern void xmlCheckVersion(int version);
-#endif /* LIBXML2_COMPILING_MSCCDEF */
-
-/**
- * LIBXML_DOTTED_VERSION:
- *
- * the version string like "1.2.3"
- */
-#define LIBXML_DOTTED_VERSION "2.4.26"
-
-/**
- * LIBXML_VERSION:
- *
- * the version number: 1.2.3 value is 1002003
- */
-#define LIBXML_VERSION 20426
-
-/**
- * LIBXML_VERSION_STRING:
- *
- * the version number string, 1.2.3 value is "1002003"
- */
-#define LIBXML_VERSION_STRING "20426"
-
-/**
- * LIBXML_TEST_VERSION:
- *
- * Macro to check that the libxml version in use is compatible with
- * the version the software has been compiled against
- */
-#define LIBXML_TEST_VERSION xmlCheckVersion(20426);
-
-#if 0
-/**
- * WITH_TRIO:
- *
- * defined if the trio support need to be configured in
- */
-#define WITH_TRIO
-#else
-/**
- * WITHOUT_TRIO:
- *
- * defined if the trio support should not be configured in
- */
-#define WITHOUT_TRIO
-#endif
-
-/**
- * LIBXML_THREAD_ENABLED:
- *
- * Whether the thread support is configured in
- */
-#if 0
-#define LIBXML_THREAD_ENABLED
-#endif
-
-/**
- * LIBXML_FTP_ENABLED:
- *
- * Whether the FTP support is configured in
- */
-#if 1
-#define LIBXML_FTP_ENABLED
-#endif
-
-/**
- * LIBXML_HTTP_ENABLED:
- *
- * Whether the HTTP support is configured in
- */
-#if 1
-#define LIBXML_HTTP_ENABLED
-#endif
-
-/**
- * LIBXML_HTML_ENABLED:
- *
- * Whether the HTML support is configured in
- */
-#if 1
-#define LIBXML_HTML_ENABLED
-#endif
-
-/**
- * LIBXML_CATALOG_ENABLED:
- *
- * Whether the Catalog support is configured in
- */
-#if 1
-#define LIBXML_CATALOG_ENABLED
-#endif
-
-/**
- * LIBXML_DOCB_ENABLED:
- *
- * Whether the SGML Docbook support is configured in
- */
-#if 1
-#define LIBXML_DOCB_ENABLED
-#endif
-
-/**
- * LIBXML_XPATH_ENABLED:
- *
- * Whether XPath is configured in
- */
-#if 1
-#define LIBXML_XPATH_ENABLED
-#endif
-
-/**
- * LIBXML_XPTR_ENABLED:
- *
- * Whether XPointer is configured in
- */
-#if 1
-#define LIBXML_XPTR_ENABLED
-#endif
-
-/**
- * LIBXML_C14N_ENABLED:
- *
- * Whether the Canonicalization support is configured in
- */
-#if 0
-#define LIBXML_C14N_ENABLED
-#endif
-
-/**
- * LIBXML_XINCLUDE_ENABLED:
- *
- * Whether XInclude is configured in
- */
-#if 1
-#define LIBXML_XINCLUDE_ENABLED
-#endif
-
-/**
- * LIBXML_ICONV_ENABLED:
- *
- * Whether iconv support is available
- */
-#if 0
-#define LIBXML_ICONV_ENABLED
-#endif
-
-/**
- * LIBXML_DEBUG_ENABLED:
- *
- * Whether Debugging module is configured in
- */
-#if 1
-#define LIBXML_DEBUG_ENABLED
-#endif
-
-/**
- * DEBUG_MEMORY_LOCATION:
- *
- * Whether the memory debugging is configured in
- */
-#if 0
-#define DEBUG_MEMORY_LOCATION
-#endif
-
-/**
- * LIBXML_DLL_IMPORT:
- *
- * Used on Windows (MS C compiler only) to declare a variable as
- * imported from the library. This macro should be empty when compiling
- * libxml itself. It should expand to __declspec(dllimport)
- * when the client code includes this header, and that only if the client
- * links dynamically against libxml.
- * For this to work, we need three macros. One tells us which compiler is
- * being used and luckily the compiler defines such a thing: _MSC_VER. The
- * second macro tells us if we are compiling libxml or the client code and
- * we define the macro IN_LIBXML on the compiler's command line for this
- * purpose. The third macro, LIBXML_STATIC, must be defined by any client
- * code which links against libxml statically.
- */
-#ifndef LIBXML_DLL_IMPORT
-#if defined(_MSC_VER) && !defined(IN_LIBXML) && !defined(LIBXML_STATIC)
-#define LIBXML_DLL_IMPORT __declspec(dllimport)
-#else
-#define LIBXML_DLL_IMPORT
-#endif
-#endif
-
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- */
-#ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include <ansidecl.h>
-#endif
-#ifndef ATTRIBUTE_UNUSED
-#define ATTRIBUTE_UNUSED
-#endif
-#else
-#define ATTRIBUTE_UNUSED
-#endif
-
-/*
- * #pragma comment(lib, "iconv.lib")
- *
- * pragma understood my MS compiler which enables a conditional link with
- * iconv.
- */
-#ifdef _MSC_VER
-#if defined LIBXML_ICONV_ENABLED && !defined LIBXML2_COMPILING_MSCCDEF
-#pragma comment(lib, "iconv.lib")
-#endif
-#endif
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlwin32version.h.in b/external/libxml2_android/jni/libxml2/include/libxml/xmlwin32version.h.in
deleted file mode 100644
index 375f3a4e..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlwin32version.h.in
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Summary: compile-time version informations on Windows
- * Description: compile-time version informations for the XML library
- * when compiled on the Windows platform
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_VERSION_H__
-#define __XML_VERSION_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * use those to be sure nothing nasty will happen if
- * your library and includes mismatch
- */
-#ifndef LIBXML2_COMPILING_MSCCDEF
-extern void xmlCheckVersion(int version);
-#endif /* LIBXML2_COMPILING_MSCCDEF */
-
-/**
- * LIBXML_DOTTED_VERSION:
- *
- * the version string like "1.2.3"
- */
-#define LIBXML_DOTTED_VERSION "@VERSION@"
-
-/**
- * LIBXML_VERSION:
- *
- * the version number: 1.2.3 value is 1002003
- */
-#define LIBXML_VERSION @LIBXML_VERSION_NUMBER@
-
-/**
- * LIBXML_VERSION_STRING:
- *
- * the version number string, 1.2.3 value is "1002003"
- */
-#define LIBXML_VERSION_STRING "@LIBXML_VERSION_NUMBER@"
-
-/**
- * LIBXML_VERSION_EXTRA:
- *
- * extra version information, used to show a CVS compilation
- */
-#define LIBXML_VERSION_EXTRA "-win32"
-
-/**
- * LIBXML_TEST_VERSION:
- *
- * Macro to check that the libxml version in use is compatible with
- * the version the software has been compiled against
- */
-#define LIBXML_TEST_VERSION xmlCheckVersion(@LIBXML_VERSION_NUMBER@);
-
-#if 0
-/**
- * WITH_TRIO:
- *
- * defined if the trio support need to be configured in
- */
-#define WITH_TRIO
-#else
-/**
- * WITHOUT_TRIO:
- *
- * defined if the trio support should not be configured in
- */
-#define WITHOUT_TRIO
-#endif
-
-/**
- * LIBXML_THREAD_ENABLED:
- *
- * Whether the thread support is configured in
- */
-#if 0
-#define LIBXML_THREAD_ENABLED
-#endif
-
-/**
- * LIBXML_FTP_ENABLED:
- *
- * Whether the FTP support is configured in
- */
-#if 1
-#define LIBXML_FTP_ENABLED
-#endif
-
-/**
- * LIBXML_HTTP_ENABLED:
- *
- * Whether the HTTP support is configured in
- */
-#if 1
-#define LIBXML_HTTP_ENABLED
-#endif
-
-/**
- * LIBXML_HTML_ENABLED:
- *
- * Whether the HTML support is configured in
- */
-#if 1
-#define LIBXML_HTML_ENABLED
-#endif
-
-/**
- * LIBXML_CATALOG_ENABLED:
- *
- * Whether the Catalog support is configured in
- */
-#if 1
-#define LIBXML_CATALOG_ENABLED
-#endif
-
-/**
- * LIBXML_DOCB_ENABLED:
- *
- * Whether the SGML Docbook support is configured in
- */
-#if 1
-#define LIBXML_DOCB_ENABLED
-#endif
-
-/**
- * LIBXML_XPATH_ENABLED:
- *
- * Whether XPath is configured in
- */
-#if 1
-#define LIBXML_XPATH_ENABLED
-#endif
-
-/**
- * LIBXML_XPTR_ENABLED:
- *
- * Whether XPointer is configured in
- */
-#if 1
-#define LIBXML_XPTR_ENABLED
-#endif
-
-/**
- * LIBXML_C14N_ENABLED:
- *
- * Whether the Canonicalization support is configured in
- */
-#if 0
-#define LIBXML_C14N_ENABLED
-#endif
-
-/**
- * LIBXML_XINCLUDE_ENABLED:
- *
- * Whether XInclude is configured in
- */
-#if 1
-#define LIBXML_XINCLUDE_ENABLED
-#endif
-
-/**
- * LIBXML_SCHEMATRON_ENABLED:
- *
- * Whether the Schematron validation interfaces are compiled in
- */
-#if 1
-#define LIBXML_SCHEMATRON_ENABLED
-#endif
-
-/**
- * LIBXML_ICONV_ENABLED:
- *
- * Whether iconv support is available
- */
-#if 0
-#define LIBXML_ICONV_ENABLED
-#endif
-
-/**
- * LIBXML_ISO8859X_ENABLED:
- *
- * Whether ISO-8859-* support is made available in case iconv is not
- */
-#if 1
-#define LIBXML_ISO8859X_ENABLED
-#endif
-
-/**
- * LIBXML_DEBUG_ENABLED:
- *
- * Whether Debugging module is configured in
- */
-#if 1
-#define LIBXML_DEBUG_ENABLED
-#endif
-
-/**
- * DEBUG_MEMORY_LOCATION:
- *
- * Whether the memory debugging is configured in
- */
-#if 0
-#define DEBUG_MEMORY_LOCATION
-#endif
-
-/**
- * LIBXML_DEBUG_RUNTIME:
- *
- * Whether the runtime debugging is configured in
- */
-#if 0
-#define LIBXML_DEBUG_RUNTIME
-#endif
-
-/**
- * LIBXML_DLL_IMPORT:
- *
- * Used on Windows (MS C compiler only) to declare a variable as
- * imported from the library. This macro should be empty when compiling
- * libxml itself. It should expand to __declspec(dllimport)
- * when the client code includes this header, and that only if the client
- * links dynamically against libxml.
- * For this to work, we need three macros. One tells us which compiler is
- * being used and luckily the compiler defines such a thing: _MSC_VER. The
- * second macro tells us if we are compiling libxml or the client code and
- * we define the macro IN_LIBXML on the compiler's command line for this
- * purpose. The third macro, LIBXML_STATIC, must be defined by any client
- * code which links against libxml statically.
- */
-#ifndef LIBXML_DLL_IMPORT
-#if defined(_MSC_VER) && !defined(IN_LIBXML) && !defined(LIBXML_STATIC)
-#define LIBXML_DLL_IMPORT __declspec(dllimport)
-#else
-#define LIBXML_DLL_IMPORT
-#endif
-#endif
-
-#ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include <ansidecl.h>
-#endif
-
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- */
-
-#ifndef ATTRIBUTE_UNUSED
-#define ATTRIBUTE_UNUSED
-#endif
-
-/**
- * ATTRIBUTE_ALLOC_SIZE:
- *
- * Macro used to indicate to GCC this is an allocator function
- */
-
-#ifndef ATTRIBUTE_ALLOC_SIZE
-# if ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
-# define ATTRIBUTE_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
-# else
-# define ATTRIBUTE_ALLOC_SIZE(x)
-# endif
-#else
-# define ATTRIBUTE_ALLOC_SIZE(x)
-#endif
-
-/**
- * LIBXML_ATTR_FORMAT:
- *
- * Macro used to indicate to GCC the parameter are printf like
- */
-
-#ifndef LIBXML_ATTR_FORMAT
-# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
-# define LIBXML_ATTR_FORMAT(fmt,args) __attribute__((__format__(__printf__,fmt,args)))
-# else
-# define LIBXML_ATTR_FORMAT(fmt,args)
-# endif
-#else
-# define LIBXML_ATTR_FORMAT(fmt,args)
-#endif
-
-#else /* !__GNUC__ */
-#define ATTRIBUTE_UNUSED
-#define LIBXML_ATTR_FORMAT(fmt,args)
-#define ATTRIBUTE_ALLOC_SIZE(x)
-#endif /* __GNUC__ */
-
-/*
- * #pragma comment(lib, "iconv.lib")
- *
- * pragma understood my MS compiler which enables a conditional link with
- * iconv.
- */
-#ifdef _MSC_VER
-#if defined LIBXML_ICONV_ENABLED && !defined LIBXML2_COMPILING_MSCCDEF
-#pragma comment(lib, "iconv.lib")
-#endif
-#endif
-
-/*
- * #pragma comment(lib, "kernel32.lib")
- *
- * pragma understood my MS compiler which enables a conditional link with
- * kernel32.
- */
-#ifdef _MSC_VER
-#if defined LIBXML_MODULES_ENABLED
-#pragma comment(lib, "kernel32.lib")
-#endif
-#endif
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xmlwriter.h b/external/libxml2_android/jni/libxml2/include/libxml/xmlwriter.h
deleted file mode 100644
index dd5add34..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xmlwriter.h
+++ /dev/null
@@ -1,488 +0,0 @@
-/*
- * Summary: text writing API for XML
- * Description: text writing API for XML
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Alfred Mickautsch <alfred@mickautsch.de>
- */
-
-#ifndef __XML_XMLWRITER_H__
-#define __XML_XMLWRITER_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_WRITER_ENABLED
-
-#include <stdarg.h>
-#include <libxml/xmlIO.h>
-#include <libxml/list.h>
-#include <libxml/xmlstring.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
- typedef struct _xmlTextWriter xmlTextWriter;
- typedef xmlTextWriter *xmlTextWriterPtr;
-
-/*
- * Constructors & Destructor
- */
- XMLPUBFUN xmlTextWriterPtr XMLCALL
- xmlNewTextWriter(xmlOutputBufferPtr out);
- XMLPUBFUN xmlTextWriterPtr XMLCALL
- xmlNewTextWriterFilename(const char *uri, int compression);
- XMLPUBFUN xmlTextWriterPtr XMLCALL
- xmlNewTextWriterMemory(xmlBufferPtr buf, int compression);
- XMLPUBFUN xmlTextWriterPtr XMLCALL
- xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, int compression);
- XMLPUBFUN xmlTextWriterPtr XMLCALL
- xmlNewTextWriterDoc(xmlDocPtr * doc, int compression);
- XMLPUBFUN xmlTextWriterPtr XMLCALL
- xmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node,
- int compression);
- XMLPUBFUN void XMLCALL xmlFreeTextWriter(xmlTextWriterPtr writer);
-
-/*
- * Functions
- */
-
-
-/*
- * Document
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterStartDocument(xmlTextWriterPtr writer,
- const char *version,
- const char *encoding,
- const char *standalone);
- XMLPUBFUN int XMLCALL xmlTextWriterEndDocument(xmlTextWriterPtr
- writer);
-
-/*
- * Comments
- */
- XMLPUBFUN int XMLCALL xmlTextWriterStartComment(xmlTextWriterPtr
- writer);
- XMLPUBFUN int XMLCALL xmlTextWriterEndComment(xmlTextWriterPtr writer);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(2,3);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,
- const char *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(2,0);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteComment(xmlTextWriterPtr
- writer,
- const xmlChar *
- content);
-
-/*
- * Elements
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterStartElement(xmlTextWriterPtr writer,
- const xmlChar * name);
- XMLPUBFUN int XMLCALL xmlTextWriterStartElementNS(xmlTextWriterPtr
- writer,
- const xmlChar *
- prefix,
- const xmlChar * name,
- const xmlChar *
- namespaceURI);
- XMLPUBFUN int XMLCALL xmlTextWriterEndElement(xmlTextWriterPtr writer);
- XMLPUBFUN int XMLCALL xmlTextWriterFullEndElement(xmlTextWriterPtr
- writer);
-
-/*
- * Elements conveniency functions
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(3,4);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(3,0);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteElement(xmlTextWriterPtr
- writer,
- const xmlChar * name,
- const xmlChar *
- content);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
- const xmlChar * prefix,
- const xmlChar * name,
- const xmlChar * namespaceURI,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(5,6);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer,
- const xmlChar * prefix,
- const xmlChar * name,
- const xmlChar * namespaceURI,
- const char *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(5,0);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteElementNS(xmlTextWriterPtr
- writer,
- const xmlChar *
- prefix,
- const xmlChar * name,
- const xmlChar *
- namespaceURI,
- const xmlChar *
- content);
-
-/*
- * Text
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(2,3);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer,
- const char *format, va_list argptr)
- LIBXML_ATTR_FORMAT(2,0);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteRawLen(xmlTextWriterPtr writer,
- const xmlChar * content, int len);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteRaw(xmlTextWriterPtr writer,
- const xmlChar * content);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteFormatString(xmlTextWriterPtr
- writer,
- const char
- *format, ...)
- LIBXML_ATTR_FORMAT(2,3);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteVFormatString(xmlTextWriterPtr
- writer,
- const char
- *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(2,0);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteString(xmlTextWriterPtr writer,
- const xmlChar *
- content);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteBase64(xmlTextWriterPtr writer,
- const char *data,
- int start, int len);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteBinHex(xmlTextWriterPtr writer,
- const char *data,
- int start, int len);
-
-/*
- * Attributes
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterStartAttribute(xmlTextWriterPtr writer,
- const xmlChar * name);
- XMLPUBFUN int XMLCALL xmlTextWriterStartAttributeNS(xmlTextWriterPtr
- writer,
- const xmlChar *
- prefix,
- const xmlChar *
- name,
- const xmlChar *
- namespaceURI);
- XMLPUBFUN int XMLCALL xmlTextWriterEndAttribute(xmlTextWriterPtr
- writer);
-
-/*
- * Attributes conveniency functions
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(3,4);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(3,0);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteAttribute(xmlTextWriterPtr
- writer,
- const xmlChar * name,
- const xmlChar *
- content);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
- const xmlChar * prefix,
- const xmlChar * name,
- const xmlChar * namespaceURI,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(5,6);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer,
- const xmlChar * prefix,
- const xmlChar * name,
- const xmlChar * namespaceURI,
- const char *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(5,0);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteAttributeNS(xmlTextWriterPtr
- writer,
- const xmlChar *
- prefix,
- const xmlChar *
- name,
- const xmlChar *
- namespaceURI,
- const xmlChar *
- content);
-
-/*
- * PI's
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterStartPI(xmlTextWriterPtr writer,
- const xmlChar * target);
- XMLPUBFUN int XMLCALL xmlTextWriterEndPI(xmlTextWriterPtr writer);
-
-/*
- * PI conveniency functions
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer,
- const xmlChar * target,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(3,4);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer,
- const xmlChar * target,
- const char *format, va_list argptr)
- LIBXML_ATTR_FORMAT(3,0);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWritePI(xmlTextWriterPtr writer,
- const xmlChar * target,
- const xmlChar * content);
-
-/**
- * xmlTextWriterWriteProcessingInstruction:
- *
- * This macro maps to xmlTextWriterWritePI
- */
-#define xmlTextWriterWriteProcessingInstruction xmlTextWriterWritePI
-
-/*
- * CDATA
- */
- XMLPUBFUN int XMLCALL xmlTextWriterStartCDATA(xmlTextWriterPtr writer);
- XMLPUBFUN int XMLCALL xmlTextWriterEndCDATA(xmlTextWriterPtr writer);
-
-/*
- * CDATA conveniency functions
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(2,3);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer,
- const char *format, va_list argptr)
- LIBXML_ATTR_FORMAT(2,0);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteCDATA(xmlTextWriterPtr writer,
- const xmlChar * content);
-
-/*
- * DTD
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterStartDTD(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid);
- XMLPUBFUN int XMLCALL xmlTextWriterEndDTD(xmlTextWriterPtr writer);
-
-/*
- * DTD conveniency functions
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(5,6);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const char *format, va_list argptr)
- LIBXML_ATTR_FORMAT(5,0);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteDTD(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const xmlChar * subset);
-
-/**
- * xmlTextWriterWriteDocType:
- *
- * this macro maps to xmlTextWriterWriteDTD
- */
-#define xmlTextWriterWriteDocType xmlTextWriterWriteDTD
-
-/*
- * DTD element definition
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterStartDTDElement(xmlTextWriterPtr writer,
- const xmlChar * name);
- XMLPUBFUN int XMLCALL xmlTextWriterEndDTDElement(xmlTextWriterPtr
- writer);
-
-/*
- * DTD element definition conveniency functions
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(3,4);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(3,0);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDElement(xmlTextWriterPtr
- writer,
- const xmlChar *
- name,
- const xmlChar *
- content);
-
-/*
- * DTD attribute list definition
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer,
- const xmlChar * name);
- XMLPUBFUN int XMLCALL xmlTextWriterEndDTDAttlist(xmlTextWriterPtr
- writer);
-
-/*
- * DTD attribute list definition conveniency functions
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(3,4);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(3,0);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDAttlist(xmlTextWriterPtr
- writer,
- const xmlChar *
- name,
- const xmlChar *
- content);
-
-/*
- * DTD entity definition
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterStartDTDEntity(xmlTextWriterPtr writer,
- int pe, const xmlChar * name);
- XMLPUBFUN int XMLCALL xmlTextWriterEndDTDEntity(xmlTextWriterPtr
- writer);
-
-/*
- * DTD entity definition conveniency functions
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const char *format, ...)
- LIBXML_ATTR_FORMAT(4,5);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const char *format,
- va_list argptr)
- LIBXML_ATTR_FORMAT(4,0);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const xmlChar * content);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const xmlChar * ndataid);
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr
- writer,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const xmlChar *
- ndataid);
- XMLPUBFUN int XMLCALL xmlTextWriterWriteDTDEntity(xmlTextWriterPtr
- writer, int pe,
- const xmlChar * name,
- const xmlChar *
- pubid,
- const xmlChar *
- sysid,
- const xmlChar *
- ndataid,
- const xmlChar *
- content);
-
-/*
- * DTD notation definition
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid);
-
-/*
- * Indentation
- */
- XMLPUBFUN int XMLCALL
- xmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent);
- XMLPUBFUN int XMLCALL
- xmlTextWriterSetIndentString(xmlTextWriterPtr writer,
- const xmlChar * str);
-
- XMLPUBFUN int XMLCALL
- xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar);
-
-
-/*
- * misc
- */
- XMLPUBFUN int XMLCALL xmlTextWriterFlush(xmlTextWriterPtr writer);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_WRITER_ENABLED */
-
-#endif /* __XML_XMLWRITER_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xpath.h b/external/libxml2_android/jni/libxml2/include/libxml/xpath.h
deleted file mode 100644
index d96776c5..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xpath.h
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
- * Summary: XML Path Language implementation
- * Description: API for the XML Path Language implementation
- *
- * XML Path Language implementation
- * XPath is a language for addressing parts of an XML document,
- * designed to be used by both XSLT and XPointer
- * http://www.w3.org/TR/xpath
- *
- * Implements
- * W3C Recommendation 16 November 1999
- * http://www.w3.org/TR/1999/REC-xpath-19991116
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_XPATH_H__
-#define __XML_XPATH_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_XPATH_ENABLED
-
-#include <libxml/xmlerror.h>
-#include <libxml/tree.h>
-#include <libxml/hash.h>
-#endif /* LIBXML_XPATH_ENABLED */
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef __cplusplus
-extern "C" {
-#endif
-#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */
-
-#ifdef LIBXML_XPATH_ENABLED
-
-typedef struct _xmlXPathContext xmlXPathContext;
-typedef xmlXPathContext *xmlXPathContextPtr;
-typedef struct _xmlXPathParserContext xmlXPathParserContext;
-typedef xmlXPathParserContext *xmlXPathParserContextPtr;
-
-/**
- * The set of XPath error codes.
- */
-
-typedef enum {
- XPATH_EXPRESSION_OK = 0,
- XPATH_NUMBER_ERROR,
- XPATH_UNFINISHED_LITERAL_ERROR,
- XPATH_START_LITERAL_ERROR,
- XPATH_VARIABLE_REF_ERROR,
- XPATH_UNDEF_VARIABLE_ERROR,
- XPATH_INVALID_PREDICATE_ERROR,
- XPATH_EXPR_ERROR,
- XPATH_UNCLOSED_ERROR,
- XPATH_UNKNOWN_FUNC_ERROR,
- XPATH_INVALID_OPERAND,
- XPATH_INVALID_TYPE,
- XPATH_INVALID_ARITY,
- XPATH_INVALID_CTXT_SIZE,
- XPATH_INVALID_CTXT_POSITION,
- XPATH_MEMORY_ERROR,
- XPTR_SYNTAX_ERROR,
- XPTR_RESOURCE_ERROR,
- XPTR_SUB_RESOURCE_ERROR,
- XPATH_UNDEF_PREFIX_ERROR,
- XPATH_ENCODING_ERROR,
- XPATH_INVALID_CHAR_ERROR,
- XPATH_INVALID_CTXT,
- XPATH_STACK_ERROR,
- XPATH_FORBID_VARIABLE_ERROR
-} xmlXPathError;
-
-/*
- * A node-set (an unordered collection of nodes without duplicates).
- */
-typedef struct _xmlNodeSet xmlNodeSet;
-typedef xmlNodeSet *xmlNodeSetPtr;
-struct _xmlNodeSet {
- int nodeNr; /* number of nodes in the set */
- int nodeMax; /* size of the array as allocated */
- xmlNodePtr *nodeTab; /* array of nodes in no particular order */
- /* @@ with_ns to check wether namespace nodes should be looked at @@ */
-};
-
-/*
- * An expression is evaluated to yield an object, which
- * has one of the following four basic types:
- * - node-set
- * - boolean
- * - number
- * - string
- *
- * @@ XPointer will add more types !
- */
-
-typedef enum {
- XPATH_UNDEFINED = 0,
- XPATH_NODESET = 1,
- XPATH_BOOLEAN = 2,
- XPATH_NUMBER = 3,
- XPATH_STRING = 4,
- XPATH_POINT = 5,
- XPATH_RANGE = 6,
- XPATH_LOCATIONSET = 7,
- XPATH_USERS = 8,
- XPATH_XSLT_TREE = 9 /* An XSLT value tree, non modifiable */
-} xmlXPathObjectType;
-
-typedef struct _xmlXPathObject xmlXPathObject;
-typedef xmlXPathObject *xmlXPathObjectPtr;
-struct _xmlXPathObject {
- xmlXPathObjectType type;
- xmlNodeSetPtr nodesetval;
- int boolval;
- double floatval;
- xmlChar *stringval;
- void *user;
- int index;
- void *user2;
- int index2;
-};
-
-/**
- * xmlXPathConvertFunc:
- * @obj: an XPath object
- * @type: the number of the target type
- *
- * A conversion function is associated to a type and used to cast
- * the new type to primitive values.
- *
- * Returns -1 in case of error, 0 otherwise
- */
-typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
-
-/*
- * Extra type: a name and a conversion function.
- */
-
-typedef struct _xmlXPathType xmlXPathType;
-typedef xmlXPathType *xmlXPathTypePtr;
-struct _xmlXPathType {
- const xmlChar *name; /* the type name */
- xmlXPathConvertFunc func; /* the conversion function */
-};
-
-/*
- * Extra variable: a name and a value.
- */
-
-typedef struct _xmlXPathVariable xmlXPathVariable;
-typedef xmlXPathVariable *xmlXPathVariablePtr;
-struct _xmlXPathVariable {
- const xmlChar *name; /* the variable name */
- xmlXPathObjectPtr value; /* the value */
-};
-
-/**
- * xmlXPathEvalFunc:
- * @ctxt: an XPath parser context
- * @nargs: the number of arguments passed to the function
- *
- * An XPath evaluation function, the parameters are on the XPath context stack.
- */
-
-typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
- int nargs);
-
-/*
- * Extra function: a name and a evaluation function.
- */
-
-typedef struct _xmlXPathFunct xmlXPathFunct;
-typedef xmlXPathFunct *xmlXPathFuncPtr;
-struct _xmlXPathFunct {
- const xmlChar *name; /* the function name */
- xmlXPathEvalFunc func; /* the evaluation function */
-};
-
-/**
- * xmlXPathAxisFunc:
- * @ctxt: the XPath interpreter context
- * @cur: the previous node being explored on that axis
- *
- * An axis traversal function. To traverse an axis, the engine calls
- * the first time with cur == NULL and repeat until the function returns
- * NULL indicating the end of the axis traversal.
- *
- * Returns the next node in that axis or NULL if at the end of the axis.
- */
-
-typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
- xmlXPathObjectPtr cur);
-
-/*
- * Extra axis: a name and an axis function.
- */
-
-typedef struct _xmlXPathAxis xmlXPathAxis;
-typedef xmlXPathAxis *xmlXPathAxisPtr;
-struct _xmlXPathAxis {
- const xmlChar *name; /* the axis name */
- xmlXPathAxisFunc func; /* the search function */
-};
-
-/**
- * xmlXPathFunction:
- * @ctxt: the XPath interprestation context
- * @nargs: the number of arguments
- *
- * An XPath function.
- * The arguments (if any) are popped out from the context stack
- * and the result is pushed on the stack.
- */
-
-typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
-
-/*
- * Function and Variable Lookup.
- */
-
-/**
- * xmlXPathVariableLookupFunc:
- * @ctxt: an XPath context
- * @name: name of the variable
- * @ns_uri: the namespace name hosting this variable
- *
- * Prototype for callbacks used to plug variable lookup in the XPath
- * engine.
- *
- * Returns the XPath object value or NULL if not found.
- */
-typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
- const xmlChar *name,
- const xmlChar *ns_uri);
-
-/**
- * xmlXPathFuncLookupFunc:
- * @ctxt: an XPath context
- * @name: name of the function
- * @ns_uri: the namespace name hosting this function
- *
- * Prototype for callbacks used to plug function lookup in the XPath
- * engine.
- *
- * Returns the XPath function or NULL if not found.
- */
-typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
- const xmlChar *name,
- const xmlChar *ns_uri);
-
-/**
- * xmlXPathFlags:
- * Flags for XPath engine compilation and runtime
- */
-/**
- * XML_XPATH_CHECKNS:
- *
- * check namespaces at compilation
- */
-#define XML_XPATH_CHECKNS (1<<0)
-/**
- * XML_XPATH_NOVAR:
- *
- * forbid variables in expression
- */
-#define XML_XPATH_NOVAR (1<<1)
-
-/**
- * xmlXPathContext:
- *
- * Expression evaluation occurs with respect to a context.
- * he context consists of:
- * - a node (the context node)
- * - a node list (the context node list)
- * - a set of variable bindings
- * - a function library
- * - the set of namespace declarations in scope for the expression
- * Following the switch to hash tables, this need to be trimmed up at
- * the next binary incompatible release.
- * The node may be modified when the context is passed to libxml2
- * for an XPath evaluation so you may need to initialize it again
- * before the next call.
- */
-
-struct _xmlXPathContext {
- xmlDocPtr doc; /* The current document */
- xmlNodePtr node; /* The current node */
-
- int nb_variables_unused; /* unused (hash table) */
- int max_variables_unused; /* unused (hash table) */
- xmlHashTablePtr varHash; /* Hash table of defined variables */
-
- int nb_types; /* number of defined types */
- int max_types; /* max number of types */
- xmlXPathTypePtr types; /* Array of defined types */
-
- int nb_funcs_unused; /* unused (hash table) */
- int max_funcs_unused; /* unused (hash table) */
- xmlHashTablePtr funcHash; /* Hash table of defined funcs */
-
- int nb_axis; /* number of defined axis */
- int max_axis; /* max number of axis */
- xmlXPathAxisPtr axis; /* Array of defined axis */
-
- /* the namespace nodes of the context node */
- xmlNsPtr *namespaces; /* Array of namespaces */
- int nsNr; /* number of namespace in scope */
- void *user; /* function to free */
-
- /* extra variables */
- int contextSize; /* the context size */
- int proximityPosition; /* the proximity position */
-
- /* extra stuff for XPointer */
- int xptr; /* is this an XPointer context? */
- xmlNodePtr here; /* for here() */
- xmlNodePtr origin; /* for origin() */
-
- /* the set of namespace declarations in scope for the expression */
- xmlHashTablePtr nsHash; /* The namespaces hash table */
- xmlXPathVariableLookupFunc varLookupFunc;/* variable lookup func */
- void *varLookupData; /* variable lookup data */
-
- /* Possibility to link in an extra item */
- void *extra; /* needed for XSLT */
-
- /* The function name and URI when calling a function */
- const xmlChar *function;
- const xmlChar *functionURI;
-
- /* function lookup function and data */
- xmlXPathFuncLookupFunc funcLookupFunc;/* function lookup func */
- void *funcLookupData; /* function lookup data */
-
- /* temporary namespace lists kept for walking the namespace axis */
- xmlNsPtr *tmpNsList; /* Array of namespaces */
- int tmpNsNr; /* number of namespaces in scope */
-
- /* error reporting mechanism */
- void *userData; /* user specific data block */
- xmlStructuredErrorFunc error; /* the callback in case of errors */
- xmlError lastError; /* the last error */
- xmlNodePtr debugNode; /* the source node XSLT */
-
- /* dictionary */
- xmlDictPtr dict; /* dictionary if any */
-
- int flags; /* flags to control compilation */
-
- /* Cache for reusal of XPath objects */
- void *cache;
-};
-
-/*
- * The structure of a compiled expression form is not public.
- */
-
-typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
-typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
-
-/**
- * xmlXPathParserContext:
- *
- * An XPath parser context. It contains pure parsing informations,
- * an xmlXPathContext, and the stack of objects.
- */
-struct _xmlXPathParserContext {
- const xmlChar *cur; /* the current char being parsed */
- const xmlChar *base; /* the full expression */
-
- int error; /* error code */
-
- xmlXPathContextPtr context; /* the evaluation context */
- xmlXPathObjectPtr value; /* the current value */
- int valueNr; /* number of values stacked */
- int valueMax; /* max number of values stacked */
- xmlXPathObjectPtr *valueTab; /* stack of values */
-
- xmlXPathCompExprPtr comp; /* the precompiled expression */
- int xptr; /* it this an XPointer expression */
- xmlNodePtr ancestor; /* used for walking preceding axis */
-
- int valueFrame; /* used to limit Pop on the stack */
-};
-
-/************************************************************************
- * *
- * Public API *
- * *
- ************************************************************************/
-
-/**
- * Objects and Nodesets handling
- */
-
-XMLPUBVAR double xmlXPathNAN;
-XMLPUBVAR double xmlXPathPINF;
-XMLPUBVAR double xmlXPathNINF;
-
-/* These macros may later turn into functions */
-/**
- * xmlXPathNodeSetGetLength:
- * @ns: a node-set
- *
- * Implement a functionality similar to the DOM NodeList.length.
- *
- * Returns the number of nodes in the node-set.
- */
-#define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
-/**
- * xmlXPathNodeSetItem:
- * @ns: a node-set
- * @index: index of a node in the set
- *
- * Implements a functionality similar to the DOM NodeList.item().
- *
- * Returns the xmlNodePtr at the given @index in @ns or NULL if
- * @index is out of range (0 to length-1)
- */
-#define xmlXPathNodeSetItem(ns, index) \
- ((((ns) != NULL) && \
- ((index) >= 0) && ((index) < (ns)->nodeNr)) ? \
- (ns)->nodeTab[(index)] \
- : NULL)
-/**
- * xmlXPathNodeSetIsEmpty:
- * @ns: a node-set
- *
- * Checks whether @ns is empty or not.
- *
- * Returns %TRUE if @ns is an empty node-set.
- */
-#define xmlXPathNodeSetIsEmpty(ns) \
- (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
-
-
-XMLPUBFUN void XMLCALL
- xmlXPathFreeObject (xmlXPathObjectPtr obj);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathNodeSetCreate (xmlNodePtr val);
-XMLPUBFUN void XMLCALL
- xmlXPathFreeNodeSetList (xmlXPathObjectPtr obj);
-XMLPUBFUN void XMLCALL
- xmlXPathFreeNodeSet (xmlNodeSetPtr obj);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathObjectCopy (xmlXPathObjectPtr val);
-XMLPUBFUN int XMLCALL
- xmlXPathCmpNodes (xmlNodePtr node1,
- xmlNodePtr node2);
-/**
- * Conversion functions to basic types.
- */
-XMLPUBFUN int XMLCALL
- xmlXPathCastNumberToBoolean (double val);
-XMLPUBFUN int XMLCALL
- xmlXPathCastStringToBoolean (const xmlChar * val);
-XMLPUBFUN int XMLCALL
- xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
-XMLPUBFUN int XMLCALL
- xmlXPathCastToBoolean (xmlXPathObjectPtr val);
-
-XMLPUBFUN double XMLCALL
- xmlXPathCastBooleanToNumber (int val);
-XMLPUBFUN double XMLCALL
- xmlXPathCastStringToNumber (const xmlChar * val);
-XMLPUBFUN double XMLCALL
- xmlXPathCastNodeToNumber (xmlNodePtr node);
-XMLPUBFUN double XMLCALL
- xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns);
-XMLPUBFUN double XMLCALL
- xmlXPathCastToNumber (xmlXPathObjectPtr val);
-
-XMLPUBFUN xmlChar * XMLCALL
- xmlXPathCastBooleanToString (int val);
-XMLPUBFUN xmlChar * XMLCALL
- xmlXPathCastNumberToString (double val);
-XMLPUBFUN xmlChar * XMLCALL
- xmlXPathCastNodeToString (xmlNodePtr node);
-XMLPUBFUN xmlChar * XMLCALL
- xmlXPathCastNodeSetToString (xmlNodeSetPtr ns);
-XMLPUBFUN xmlChar * XMLCALL
- xmlXPathCastToString (xmlXPathObjectPtr val);
-
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathConvertBoolean (xmlXPathObjectPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathConvertNumber (xmlXPathObjectPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathConvertString (xmlXPathObjectPtr val);
-
-/**
- * Context handling.
- */
-XMLPUBFUN xmlXPathContextPtr XMLCALL
- xmlXPathNewContext (xmlDocPtr doc);
-XMLPUBFUN void XMLCALL
- xmlXPathFreeContext (xmlXPathContextPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
- int active,
- int value,
- int options);
-/**
- * Evaluation functions.
- */
-XMLPUBFUN long XMLCALL
- xmlXPathOrderDocElems (xmlDocPtr doc);
-XMLPUBFUN int XMLCALL
- xmlXPathSetContextNode (xmlNodePtr node,
- xmlXPathContextPtr ctx);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathNodeEval (xmlNodePtr node,
- const xmlChar *str,
- xmlXPathContextPtr ctx);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathEval (const xmlChar *str,
- xmlXPathContextPtr ctx);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathEvalExpression (const xmlChar *str,
- xmlXPathContextPtr ctxt);
-XMLPUBFUN int XMLCALL
- xmlXPathEvalPredicate (xmlXPathContextPtr ctxt,
- xmlXPathObjectPtr res);
-/**
- * Separate compilation/evaluation entry points.
- */
-XMLPUBFUN xmlXPathCompExprPtr XMLCALL
- xmlXPathCompile (const xmlChar *str);
-XMLPUBFUN xmlXPathCompExprPtr XMLCALL
- xmlXPathCtxtCompile (xmlXPathContextPtr ctxt,
- const xmlChar *str);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathCompiledEval (xmlXPathCompExprPtr comp,
- xmlXPathContextPtr ctx);
-XMLPUBFUN int XMLCALL
- xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
- xmlXPathContextPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlXPathFreeCompExpr (xmlXPathCompExprPtr comp);
-#endif /* LIBXML_XPATH_ENABLED */
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-XMLPUBFUN void XMLCALL
- xmlXPathInit (void);
-XMLPUBFUN int XMLCALL
- xmlXPathIsNaN (double val);
-XMLPUBFUN int XMLCALL
- xmlXPathIsInf (double val);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED*/
-#endif /* ! __XML_XPATH_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xpathInternals.h b/external/libxml2_android/jni/libxml2/include/libxml/xpathInternals.h
deleted file mode 100644
index 76a6b481..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xpathInternals.h
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- * Summary: internal interfaces for XML Path Language implementation
- * Description: internal interfaces for XML Path Language implementation
- * used to build new modules on top of XPath like XPointer and
- * XSLT
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_XPATH_INTERNALS_H__
-#define __XML_XPATH_INTERNALS_H__
-
-#include <libxml/xmlversion.h>
-#include <libxml/xpath.h>
-
-#ifdef LIBXML_XPATH_ENABLED
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/************************************************************************
- * *
- * Helpers *
- * *
- ************************************************************************/
-
-/*
- * Many of these macros may later turn into functions. They
- * shouldn't be used in #ifdef's preprocessor instructions.
- */
-/**
- * xmlXPathSetError:
- * @ctxt: an XPath parser context
- * @err: an xmlXPathError code
- *
- * Raises an error.
- */
-#define xmlXPathSetError(ctxt, err) \
- { xmlXPatherror((ctxt), __FILE__, __LINE__, (err)); \
- if ((ctxt) != NULL) (ctxt)->error = (err); }
-
-/**
- * xmlXPathSetArityError:
- * @ctxt: an XPath parser context
- *
- * Raises an XPATH_INVALID_ARITY error.
- */
-#define xmlXPathSetArityError(ctxt) \
- xmlXPathSetError((ctxt), XPATH_INVALID_ARITY)
-
-/**
- * xmlXPathSetTypeError:
- * @ctxt: an XPath parser context
- *
- * Raises an XPATH_INVALID_TYPE error.
- */
-#define xmlXPathSetTypeError(ctxt) \
- xmlXPathSetError((ctxt), XPATH_INVALID_TYPE)
-
-/**
- * xmlXPathGetError:
- * @ctxt: an XPath parser context
- *
- * Get the error code of an XPath context.
- *
- * Returns the context error.
- */
-#define xmlXPathGetError(ctxt) ((ctxt)->error)
-
-/**
- * xmlXPathCheckError:
- * @ctxt: an XPath parser context
- *
- * Check if an XPath error was raised.
- *
- * Returns true if an error has been raised, false otherwise.
- */
-#define xmlXPathCheckError(ctxt) ((ctxt)->error != XPATH_EXPRESSION_OK)
-
-/**
- * xmlXPathGetDocument:
- * @ctxt: an XPath parser context
- *
- * Get the document of an XPath context.
- *
- * Returns the context document.
- */
-#define xmlXPathGetDocument(ctxt) ((ctxt)->context->doc)
-
-/**
- * xmlXPathGetContextNode:
- * @ctxt: an XPath parser context
- *
- * Get the context node of an XPath context.
- *
- * Returns the context node.
- */
-#define xmlXPathGetContextNode(ctxt) ((ctxt)->context->node)
-
-XMLPUBFUN int XMLCALL
- xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN double XMLCALL
- xmlXPathPopNumber (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlXPathPopString (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void * XMLCALL
- xmlXPathPopExternal (xmlXPathParserContextPtr ctxt);
-
-/**
- * xmlXPathReturnBoolean:
- * @ctxt: an XPath parser context
- * @val: a boolean
- *
- * Pushes the boolean @val on the context stack.
- */
-#define xmlXPathReturnBoolean(ctxt, val) \
- valuePush((ctxt), xmlXPathNewBoolean(val))
-
-/**
- * xmlXPathReturnTrue:
- * @ctxt: an XPath parser context
- *
- * Pushes true on the context stack.
- */
-#define xmlXPathReturnTrue(ctxt) xmlXPathReturnBoolean((ctxt), 1)
-
-/**
- * xmlXPathReturnFalse:
- * @ctxt: an XPath parser context
- *
- * Pushes false on the context stack.
- */
-#define xmlXPathReturnFalse(ctxt) xmlXPathReturnBoolean((ctxt), 0)
-
-/**
- * xmlXPathReturnNumber:
- * @ctxt: an XPath parser context
- * @val: a double
- *
- * Pushes the double @val on the context stack.
- */
-#define xmlXPathReturnNumber(ctxt, val) \
- valuePush((ctxt), xmlXPathNewFloat(val))
-
-/**
- * xmlXPathReturnString:
- * @ctxt: an XPath parser context
- * @str: a string
- *
- * Pushes the string @str on the context stack.
- */
-#define xmlXPathReturnString(ctxt, str) \
- valuePush((ctxt), xmlXPathWrapString(str))
-
-/**
- * xmlXPathReturnEmptyString:
- * @ctxt: an XPath parser context
- *
- * Pushes an empty string on the stack.
- */
-#define xmlXPathReturnEmptyString(ctxt) \
- valuePush((ctxt), xmlXPathNewCString(""))
-
-/**
- * xmlXPathReturnNodeSet:
- * @ctxt: an XPath parser context
- * @ns: a node-set
- *
- * Pushes the node-set @ns on the context stack.
- */
-#define xmlXPathReturnNodeSet(ctxt, ns) \
- valuePush((ctxt), xmlXPathWrapNodeSet(ns))
-
-/**
- * xmlXPathReturnEmptyNodeSet:
- * @ctxt: an XPath parser context
- *
- * Pushes an empty node-set on the context stack.
- */
-#define xmlXPathReturnEmptyNodeSet(ctxt) \
- valuePush((ctxt), xmlXPathNewNodeSet(NULL))
-
-/**
- * xmlXPathReturnExternal:
- * @ctxt: an XPath parser context
- * @val: user data
- *
- * Pushes user data on the context stack.
- */
-#define xmlXPathReturnExternal(ctxt, val) \
- valuePush((ctxt), xmlXPathWrapExternal(val))
-
-/**
- * xmlXPathStackIsNodeSet:
- * @ctxt: an XPath parser context
- *
- * Check if the current value on the XPath stack is a node set or
- * an XSLT value tree.
- *
- * Returns true if the current object on the stack is a node-set.
- */
-#define xmlXPathStackIsNodeSet(ctxt) \
- (((ctxt)->value != NULL) \
- && (((ctxt)->value->type == XPATH_NODESET) \
- || ((ctxt)->value->type == XPATH_XSLT_TREE)))
-
-/**
- * xmlXPathStackIsExternal:
- * @ctxt: an XPath parser context
- *
- * Checks if the current value on the XPath stack is an external
- * object.
- *
- * Returns true if the current object on the stack is an external
- * object.
- */
-#define xmlXPathStackIsExternal(ctxt) \
- ((ctxt->value != NULL) && (ctxt->value->type == XPATH_USERS))
-
-/**
- * xmlXPathEmptyNodeSet:
- * @ns: a node-set
- *
- * Empties a node-set.
- */
-#define xmlXPathEmptyNodeSet(ns) \
- { while ((ns)->nodeNr > 0) (ns)->nodeTab[--(ns)->nodeNr] = NULL; }
-
-/**
- * CHECK_ERROR:
- *
- * Macro to return from the function if an XPath error was detected.
- */
-#define CHECK_ERROR \
- if (ctxt->error != XPATH_EXPRESSION_OK) return
-
-/**
- * CHECK_ERROR0:
- *
- * Macro to return 0 from the function if an XPath error was detected.
- */
-#define CHECK_ERROR0 \
- if (ctxt->error != XPATH_EXPRESSION_OK) return(0)
-
-/**
- * XP_ERROR:
- * @X: the error code
- *
- * Macro to raise an XPath error and return.
- */
-#define XP_ERROR(X) \
- { xmlXPathErr(ctxt, X); return; }
-
-/**
- * XP_ERROR0:
- * @X: the error code
- *
- * Macro to raise an XPath error and return 0.
- */
-#define XP_ERROR0(X) \
- { xmlXPathErr(ctxt, X); return(0); }
-
-/**
- * CHECK_TYPE:
- * @typeval: the XPath type
- *
- * Macro to check that the value on top of the XPath stack is of a given
- * type.
- */
-#define CHECK_TYPE(typeval) \
- if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
- XP_ERROR(XPATH_INVALID_TYPE)
-
-/**
- * CHECK_TYPE0:
- * @typeval: the XPath type
- *
- * Macro to check that the value on top of the XPath stack is of a given
- * type. Return(0) in case of failure
- */
-#define CHECK_TYPE0(typeval) \
- if ((ctxt->value == NULL) || (ctxt->value->type != typeval)) \
- XP_ERROR0(XPATH_INVALID_TYPE)
-
-/**
- * CHECK_ARITY:
- * @x: the number of expected args
- *
- * Macro to check that the number of args passed to an XPath function matches.
- */
-#define CHECK_ARITY(x) \
- if (ctxt == NULL) return; \
- if (nargs != (x)) \
- XP_ERROR(XPATH_INVALID_ARITY); \
- if (ctxt->valueNr < ctxt->valueFrame + (x)) \
- XP_ERROR(XPATH_STACK_ERROR);
-
-/**
- * CAST_TO_STRING:
- *
- * Macro to try to cast the value on the top of the XPath stack to a string.
- */
-#define CAST_TO_STRING \
- if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_STRING)) \
- xmlXPathStringFunction(ctxt, 1);
-
-/**
- * CAST_TO_NUMBER:
- *
- * Macro to try to cast the value on the top of the XPath stack to a number.
- */
-#define CAST_TO_NUMBER \
- if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_NUMBER)) \
- xmlXPathNumberFunction(ctxt, 1);
-
-/**
- * CAST_TO_BOOLEAN:
- *
- * Macro to try to cast the value on the top of the XPath stack to a boolean.
- */
-#define CAST_TO_BOOLEAN \
- if ((ctxt->value != NULL) && (ctxt->value->type != XPATH_BOOLEAN)) \
- xmlXPathBooleanFunction(ctxt, 1);
-
-/*
- * Variable Lookup forwarding.
- */
-
-XMLPUBFUN void XMLCALL
- xmlXPathRegisterVariableLookup (xmlXPathContextPtr ctxt,
- xmlXPathVariableLookupFunc f,
- void *data);
-
-/*
- * Function Lookup forwarding.
- */
-
-XMLPUBFUN void XMLCALL
- xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
- xmlXPathFuncLookupFunc f,
- void *funcCtxt);
-
-/*
- * Error reporting.
- */
-XMLPUBFUN void XMLCALL
- xmlXPatherror (xmlXPathParserContextPtr ctxt,
- const char *file,
- int line,
- int no);
-
-XMLPUBFUN void XMLCALL
- xmlXPathErr (xmlXPathParserContextPtr ctxt,
- int error);
-
-#ifdef LIBXML_DEBUG_ENABLED
-XMLPUBFUN void XMLCALL
- xmlXPathDebugDumpObject (FILE *output,
- xmlXPathObjectPtr cur,
- int depth);
-XMLPUBFUN void XMLCALL
- xmlXPathDebugDumpCompExpr(FILE *output,
- xmlXPathCompExprPtr comp,
- int depth);
-#endif
-/**
- * NodeSet handling.
- */
-XMLPUBFUN int XMLCALL
- xmlXPathNodeSetContains (xmlNodeSetPtr cur,
- xmlNodePtr val);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathDifference (xmlNodeSetPtr nodes1,
- xmlNodeSetPtr nodes2);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathIntersection (xmlNodeSetPtr nodes1,
- xmlNodeSetPtr nodes2);
-
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathDistinctSorted (xmlNodeSetPtr nodes);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathDistinct (xmlNodeSetPtr nodes);
-
-XMLPUBFUN int XMLCALL
- xmlXPathHasSameNodes (xmlNodeSetPtr nodes1,
- xmlNodeSetPtr nodes2);
-
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes,
- xmlNodePtr node);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathLeadingSorted (xmlNodeSetPtr nodes1,
- xmlNodeSetPtr nodes2);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathNodeLeading (xmlNodeSetPtr nodes,
- xmlNodePtr node);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathLeading (xmlNodeSetPtr nodes1,
- xmlNodeSetPtr nodes2);
-
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes,
- xmlNodePtr node);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathTrailingSorted (xmlNodeSetPtr nodes1,
- xmlNodeSetPtr nodes2);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathNodeTrailing (xmlNodeSetPtr nodes,
- xmlNodePtr node);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathTrailing (xmlNodeSetPtr nodes1,
- xmlNodeSetPtr nodes2);
-
-
-/**
- * Extending a context.
- */
-
-XMLPUBFUN int XMLCALL
- xmlXPathRegisterNs (xmlXPathContextPtr ctxt,
- const xmlChar *prefix,
- const xmlChar *ns_uri);
-XMLPUBFUN const xmlChar * XMLCALL
- xmlXPathNsLookup (xmlXPathContextPtr ctxt,
- const xmlChar *prefix);
-XMLPUBFUN void XMLCALL
- xmlXPathRegisteredNsCleanup (xmlXPathContextPtr ctxt);
-
-XMLPUBFUN int XMLCALL
- xmlXPathRegisterFunc (xmlXPathContextPtr ctxt,
- const xmlChar *name,
- xmlXPathFunction f);
-XMLPUBFUN int XMLCALL
- xmlXPathRegisterFuncNS (xmlXPathContextPtr ctxt,
- const xmlChar *name,
- const xmlChar *ns_uri,
- xmlXPathFunction f);
-XMLPUBFUN int XMLCALL
- xmlXPathRegisterVariable (xmlXPathContextPtr ctxt,
- const xmlChar *name,
- xmlXPathObjectPtr value);
-XMLPUBFUN int XMLCALL
- xmlXPathRegisterVariableNS (xmlXPathContextPtr ctxt,
- const xmlChar *name,
- const xmlChar *ns_uri,
- xmlXPathObjectPtr value);
-XMLPUBFUN xmlXPathFunction XMLCALL
- xmlXPathFunctionLookup (xmlXPathContextPtr ctxt,
- const xmlChar *name);
-XMLPUBFUN xmlXPathFunction XMLCALL
- xmlXPathFunctionLookupNS (xmlXPathContextPtr ctxt,
- const xmlChar *name,
- const xmlChar *ns_uri);
-XMLPUBFUN void XMLCALL
- xmlXPathRegisteredFuncsCleanup (xmlXPathContextPtr ctxt);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathVariableLookup (xmlXPathContextPtr ctxt,
- const xmlChar *name);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathVariableLookupNS (xmlXPathContextPtr ctxt,
- const xmlChar *name,
- const xmlChar *ns_uri);
-XMLPUBFUN void XMLCALL
- xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt);
-
-/**
- * Utilities to extend XPath.
- */
-XMLPUBFUN xmlXPathParserContextPtr XMLCALL
- xmlXPathNewParserContext (const xmlChar *str,
- xmlXPathContextPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlXPathFreeParserContext (xmlXPathParserContextPtr ctxt);
-
-/* TODO: remap to xmlXPathValuePop and Push. */
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- valuePop (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN int XMLCALL
- valuePush (xmlXPathParserContextPtr ctxt,
- xmlXPathObjectPtr value);
-
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathNewString (const xmlChar *val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathNewCString (const char *val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathWrapString (xmlChar *val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathWrapCString (char * val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathNewFloat (double val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathNewBoolean (int val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathNewNodeSet (xmlNodePtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathNewValueTree (xmlNodePtr val);
-XMLPUBFUN int XMLCALL
- xmlXPathNodeSetAdd (xmlNodeSetPtr cur,
- xmlNodePtr val);
-XMLPUBFUN int XMLCALL
- xmlXPathNodeSetAddUnique (xmlNodeSetPtr cur,
- xmlNodePtr val);
-XMLPUBFUN int XMLCALL
- xmlXPathNodeSetAddNs (xmlNodeSetPtr cur,
- xmlNodePtr node,
- xmlNsPtr ns);
-XMLPUBFUN void XMLCALL
- xmlXPathNodeSetSort (xmlNodeSetPtr set);
-
-XMLPUBFUN void XMLCALL
- xmlXPathRoot (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void XMLCALL
- xmlXPathEvalExpr (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlXPathParseName (xmlXPathParserContextPtr ctxt);
-XMLPUBFUN xmlChar * XMLCALL
- xmlXPathParseNCName (xmlXPathParserContextPtr ctxt);
-
-/*
- * Existing functions.
- */
-XMLPUBFUN double XMLCALL
- xmlXPathStringEvalNumber (const xmlChar *str);
-XMLPUBFUN int XMLCALL
- xmlXPathEvaluatePredicateResult (xmlXPathParserContextPtr ctxt,
- xmlXPathObjectPtr res);
-XMLPUBFUN void XMLCALL
- xmlXPathRegisterAllFunctions (xmlXPathContextPtr ctxt);
-XMLPUBFUN xmlNodeSetPtr XMLCALL
- xmlXPathNodeSetMerge (xmlNodeSetPtr val1,
- xmlNodeSetPtr val2);
-XMLPUBFUN void XMLCALL
- xmlXPathNodeSetDel (xmlNodeSetPtr cur,
- xmlNodePtr val);
-XMLPUBFUN void XMLCALL
- xmlXPathNodeSetRemove (xmlNodeSetPtr cur,
- int val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathNewNodeSetList (xmlNodeSetPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathWrapNodeSet (xmlNodeSetPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPathWrapExternal (void *val);
-
-XMLPUBFUN int XMLCALL xmlXPathEqualValues(xmlXPathParserContextPtr ctxt);
-XMLPUBFUN int XMLCALL xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt);
-XMLPUBFUN int XMLCALL xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict);
-XMLPUBFUN void XMLCALL xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void XMLCALL xmlXPathAddValues(xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void XMLCALL xmlXPathSubValues(xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void XMLCALL xmlXPathMultValues(xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void XMLCALL xmlXPathDivValues(xmlXPathParserContextPtr ctxt);
-XMLPUBFUN void XMLCALL xmlXPathModValues(xmlXPathParserContextPtr ctxt);
-
-XMLPUBFUN int XMLCALL xmlXPathIsNodeType(const xmlChar *name);
-
-/*
- * Some of the axis navigation routines.
- */
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextSelf(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextChild(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextParent(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-XMLPUBFUN xmlNodePtr XMLCALL xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur);
-/*
- * The official core of XPath functions.
- */
-XMLPUBFUN void XMLCALL xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs);
-XMLPUBFUN void XMLCALL xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs);
-
-/**
- * Really internal functions
- */
-XMLPUBFUN void XMLCALL xmlXPathNodeSetFreeNs(xmlNsPtr ns);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_XPATH_ENABLED */
-#endif /* ! __XML_XPATH_INTERNALS_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/libxml/xpointer.h b/external/libxml2_android/jni/libxml2/include/libxml/xpointer.h
deleted file mode 100644
index b99112b8..00000000
--- a/external/libxml2_android/jni/libxml2/include/libxml/xpointer.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Summary: API to handle XML Pointers
- * Description: API to handle XML Pointers
- * Base implementation was made accordingly to
- * W3C Candidate Recommendation 7 June 2000
- * http://www.w3.org/TR/2000/CR-xptr-20000607
- *
- * Added support for the element() scheme described in:
- * W3C Proposed Recommendation 13 November 2002
- * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_XPTR_H__
-#define __XML_XPTR_H__
-
-#include <libxml/xmlversion.h>
-
-#ifdef LIBXML_XPTR_ENABLED
-
-#include <libxml/tree.h>
-#include <libxml/xpath.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * A Location Set
- */
-typedef struct _xmlLocationSet xmlLocationSet;
-typedef xmlLocationSet *xmlLocationSetPtr;
-struct _xmlLocationSet {
- int locNr; /* number of locations in the set */
- int locMax; /* size of the array as allocated */
- xmlXPathObjectPtr *locTab;/* array of locations */
-};
-
-/*
- * Handling of location sets.
- */
-
-XMLPUBFUN xmlLocationSetPtr XMLCALL
- xmlXPtrLocationSetCreate (xmlXPathObjectPtr val);
-XMLPUBFUN void XMLCALL
- xmlXPtrFreeLocationSet (xmlLocationSetPtr obj);
-XMLPUBFUN xmlLocationSetPtr XMLCALL
- xmlXPtrLocationSetMerge (xmlLocationSetPtr val1,
- xmlLocationSetPtr val2);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewRange (xmlNodePtr start,
- int startindex,
- xmlNodePtr end,
- int endindex);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewRangePoints (xmlXPathObjectPtr start,
- xmlXPathObjectPtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewRangeNodePoint (xmlNodePtr start,
- xmlXPathObjectPtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewRangePointNode (xmlXPathObjectPtr start,
- xmlNodePtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewRangeNodes (xmlNodePtr start,
- xmlNodePtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewLocationSetNodes (xmlNodePtr start,
- xmlNodePtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewRangeNodeObject (xmlNodePtr start,
- xmlXPathObjectPtr end);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrNewCollapsedRange (xmlNodePtr start);
-XMLPUBFUN void XMLCALL
- xmlXPtrLocationSetAdd (xmlLocationSetPtr cur,
- xmlXPathObjectPtr val);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrWrapLocationSet (xmlLocationSetPtr val);
-XMLPUBFUN void XMLCALL
- xmlXPtrLocationSetDel (xmlLocationSetPtr cur,
- xmlXPathObjectPtr val);
-XMLPUBFUN void XMLCALL
- xmlXPtrLocationSetRemove (xmlLocationSetPtr cur,
- int val);
-
-/*
- * Functions.
- */
-XMLPUBFUN xmlXPathContextPtr XMLCALL
- xmlXPtrNewContext (xmlDocPtr doc,
- xmlNodePtr here,
- xmlNodePtr origin);
-XMLPUBFUN xmlXPathObjectPtr XMLCALL
- xmlXPtrEval (const xmlChar *str,
- xmlXPathContextPtr ctx);
-XMLPUBFUN void XMLCALL
- xmlXPtrRangeToFunction (xmlXPathParserContextPtr ctxt,
- int nargs);
-XMLPUBFUN xmlNodePtr XMLCALL
- xmlXPtrBuildNodeList (xmlXPathObjectPtr obj);
-XMLPUBFUN void XMLCALL
- xmlXPtrEvalRangePredicate (xmlXPathParserContextPtr ctxt);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LIBXML_XPTR_ENABLED */
-#endif /* __XML_XPTR_H__ */
diff --git a/external/libxml2_android/jni/libxml2/include/win32config.h b/external/libxml2_android/jni/libxml2/include/win32config.h
deleted file mode 100644
index 40cf7df8..00000000
--- a/external/libxml2_android/jni/libxml2/include/win32config.h
+++ /dev/null
@@ -1,128 +0,0 @@
-#ifndef __LIBXML_WIN32_CONFIG__
-#define __LIBXML_WIN32_CONFIG__
-
-#define HAVE_CTYPE_H
-#define HAVE_STDARG_H
-#define HAVE_MALLOC_H
-#define HAVE_ERRNO_H
-#define SEND_ARG2_CAST
-#define GETHOSTBYNAME_ARG_CAST
-
-#if defined(_WIN32_WCE)
-#undef HAVE_ERRNO_H
-#include <windows.h>
-#include "wincecompat.h"
-#else
-#define HAVE_SYS_STAT_H
-#define HAVE__STAT
-#define HAVE_STAT
-#define HAVE_STDLIB_H
-#define HAVE_TIME_H
-#define HAVE_FCNTL_H
-#include <io.h>
-#include <direct.h>
-#endif
-
-#include <libxml/xmlversion.h>
-
-#ifndef ICONV_CONST
-#define ICONV_CONST const
-#endif
-
-#ifdef NEED_SOCKETS
-#include <wsockcompat.h>
-#endif
-
-/*
- * Windows platforms may define except
- */
-#undef except
-
-#define HAVE_ISINF
-#define HAVE_ISNAN
-#include <math.h>
-#if defined(_MSC_VER) || defined(__BORLANDC__)
-/* MS C-runtime has functions which can be used in order to determine if
- a given floating-point variable contains NaN, (+-)INF. These are
- preferred, because floating-point technology is considered propriatary
- by MS and we can assume that their functions know more about their
- oddities than we do. */
-#include <float.h>
-/* Bjorn Reese figured a quite nice construct for isinf() using the _fpclass
- function. */
-#ifndef isinf
-#define isinf(d) ((_fpclass(d) == _FPCLASS_PINF) ? 1 \
- : ((_fpclass(d) == _FPCLASS_NINF) ? -1 : 0))
-#endif
-/* _isnan(x) returns nonzero if (x == NaN) and zero otherwise. */
-#ifndef isnan
-#define isnan(d) (_isnan(d))
-#endif
-#else /* _MSC_VER */
-#ifndef isinf
-static int isinf (double d) {
- int expon = 0;
- double val = frexp (d, &expon);
- if (expon == 1025) {
- if (val == 0.5) {
- return 1;
- } else if (val == -0.5) {
- return -1;
- } else {
- return 0;
- }
- } else {
- return 0;
- }
-}
-#endif
-#ifndef isnan
-static int isnan (double d) {
- int expon = 0;
- double val = frexp (d, &expon);
- if (expon == 1025) {
- if (val == 0.5) {
- return 0;
- } else if (val == -0.5) {
- return 0;
- } else {
- return 1;
- }
- } else {
- return 0;
- }
-}
-#endif
-#endif /* _MSC_VER */
-
-#if defined(_MSC_VER)
-#define mkdir(p,m) _mkdir(p)
-#if _MSC_VER < 1900
-#define snprintf _snprintf
-#endif
-#if _MSC_VER < 1500
-#define vsnprintf(b,c,f,a) _vsnprintf(b,c,f,a)
-#endif
-#elif defined(__MINGW32__)
-#define mkdir(p,m) _mkdir(p)
-#endif
-
-/* Threading API to use should be specified here for compatibility reasons.
- This is however best specified on the compiler's command-line. */
-#if defined(LIBXML_THREAD_ENABLED)
-#if !defined(HAVE_PTHREAD_H) && !defined(HAVE_WIN32_THREADS) && !defined(_WIN32_WCE)
-#define HAVE_WIN32_THREADS
-#endif
-#endif
-
-/* Some third-party libraries far from our control assume the following
- is defined, which it is not if we don't include windows.h. */
-#if !defined(FALSE)
-#define FALSE 0
-#endif
-#if !defined(TRUE)
-#define TRUE (!(FALSE))
-#endif
-
-#endif /* __LIBXML_WIN32_CONFIG__ */
-
diff --git a/external/libxml2_android/jni/libxml2/include/wsockcompat.h b/external/libxml2_android/jni/libxml2/include/wsockcompat.h
deleted file mode 100644
index e6a1a993..00000000
--- a/external/libxml2_android/jni/libxml2/include/wsockcompat.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/* include/wsockcompat.h
- * Windows -> Berkeley Sockets compatibility things.
- */
-
-#if !defined __XML_WSOCKCOMPAT_H__
-#define __XML_WSOCKCOMPAT_H__
-
-#ifdef _WIN32_WCE
-#include <winsock.h>
-#else
-#undef HAVE_ERRNO_H
-#include <winsock2.h>
-
-/* the following is a workaround a problem for 'inline' keyword in said
- header when compiled with Borland C++ 6 */
-#if defined(__BORLANDC__) && !defined(__cplusplus)
-#define inline __inline
-#define _inline __inline
-#endif
-
-#include <ws2tcpip.h>
-
-/* Check if ws2tcpip.h is a recent version which provides getaddrinfo() */
-#if defined(GetAddrInfo)
-#include <wspiapi.h>
-#define HAVE_GETADDRINFO
-#endif
-#endif
-
-#if defined( __MINGW32__ ) || defined( _MSC_VER )
-/* Include <errno.h> here to ensure that it doesn't get included later
- * (e.g. by iconv.h) and overwrites the definition of EWOULDBLOCK. */
-#include <errno.h>
-#undef EWOULDBLOCK
-#endif
-
-#if !defined SOCKLEN_T
-#define SOCKLEN_T int
-#endif
-
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#define ESHUTDOWN WSAESHUTDOWN
-
-#if (!defined(_MSC_VER) || (_MSC_VER < 1600))
-#define EINPROGRESS WSAEINPROGRESS
-#define EALREADY WSAEALREADY
-#define ENOTSOCK WSAENOTSOCK
-#define EDESTADDRREQ WSAEDESTADDRREQ
-#define EMSGSIZE WSAEMSGSIZE
-#define EPROTOTYPE WSAEPROTOTYPE
-#define ENOPROTOOPT WSAENOPROTOOPT
-#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
-#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
-#define EOPNOTSUPP WSAEOPNOTSUPP
-#define EPFNOSUPPORT WSAEPFNOSUPPORT
-#define EAFNOSUPPORT WSAEAFNOSUPPORT
-#define EADDRINUSE WSAEADDRINUSE
-#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
-#define ENETDOWN WSAENETDOWN
-#define ENETUNREACH WSAENETUNREACH
-#define ENETRESET WSAENETRESET
-#define ECONNABORTED WSAECONNABORTED
-#define ECONNRESET WSAECONNRESET
-#define ENOBUFS WSAENOBUFS
-#define EISCONN WSAEISCONN
-#define ENOTCONN WSAENOTCONN
-#define ETOOMANYREFS WSAETOOMANYREFS
-#define ETIMEDOUT WSAETIMEDOUT
-#define ECONNREFUSED WSAECONNREFUSED
-#define ELOOP WSAELOOP
-#define EHOSTDOWN WSAEHOSTDOWN
-#define EHOSTUNREACH WSAEHOSTUNREACH
-#define EPROCLIM WSAEPROCLIM
-#define EUSERS WSAEUSERS
-#define EDQUOT WSAEDQUOT
-#define ESTALE WSAESTALE
-#define EREMOTE WSAEREMOTE
-/* These cause conflicts with the codes from errno.h. Since they are
- not used in the relevant code (nanoftp, nanohttp), we can leave
- them disabled.
-#define ENAMETOOLONG WSAENAMETOOLONG
-#define ENOTEMPTY WSAENOTEMPTY
-*/
-#endif /* _MSC_VER */
-
-#endif /* __XML_WSOCKCOMPAT_H__ */
diff --git a/external/libxml2_android/jni/libxml2/legacy.c b/external/libxml2_android/jni/libxml2/legacy.c
deleted file mode 100644
index 86362bf5..00000000
--- a/external/libxml2_android/jni/libxml2/legacy.c
+++ /dev/null
@@ -1,1343 +0,0 @@
-/*
- * legacy.c: set of deprecated routines, not to be used anymore but
- * kept purely for ABI compatibility
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_LEGACY_ENABLED
-#include <string.h>
-
-#include <libxml/tree.h>
-#include <libxml/entities.h>
-#include <libxml/SAX.h>
-#include <libxml/parserInternals.h>
-#include <libxml/HTMLparser.h>
-
-void xmlUpgradeOldNs(xmlDocPtr doc);
-
-/************************************************************************
- * *
- * Deprecated functions kept for compatibility *
- * *
- ************************************************************************/
-
-#ifdef LIBXML_HTML_ENABLED
-xmlChar *htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len, xmlChar end,
- xmlChar end2, xmlChar end3);
-
-/**
- * htmlDecodeEntities:
- * @ctxt: the parser context
- * @len: the len to decode (in bytes !), -1 for no size limit
- * @end: an end marker xmlChar, 0 if none
- * @end2: an end marker xmlChar, 0 if none
- * @end3: an end marker xmlChar, 0 if none
- *
- * Substitute the HTML entities by their value
- *
- * DEPRECATED !!!!
- *
- * Returns A newly allocated string with the substitution done. The caller
- * must deallocate it !
- */
-xmlChar *
-htmlDecodeEntities(htmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED, xmlChar end ATTRIBUTE_UNUSED,
- xmlChar end2 ATTRIBUTE_UNUSED,
- xmlChar end3 ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "htmlDecodeEntities() deprecated function reached\n");
- deprecated = 1;
- }
- return (NULL);
-}
-#endif
-
-/**
- * xmlInitializePredefinedEntities:
- *
- * Set up the predefined entities.
- * Deprecated call
- */
-void
-xmlInitializePredefinedEntities(void)
-{
-}
-
-/**
- * xmlCleanupPredefinedEntities:
- *
- * Cleanup up the predefined entities table.
- * Deprecated call
- */
-void
-xmlCleanupPredefinedEntities(void)
-{
-}
-
-static const char *xmlFeaturesList[] = {
- "validate",
- "load subset",
- "keep blanks",
- "disable SAX",
- "fetch external entities",
- "substitute entities",
- "gather line info",
- "user data",
- "is html",
- "is standalone",
- "stop parser",
- "document",
- "is well formed",
- "is valid",
- "SAX block",
- "SAX function internalSubset",
- "SAX function isStandalone",
- "SAX function hasInternalSubset",
- "SAX function hasExternalSubset",
- "SAX function resolveEntity",
- "SAX function getEntity",
- "SAX function entityDecl",
- "SAX function notationDecl",
- "SAX function attributeDecl",
- "SAX function elementDecl",
- "SAX function unparsedEntityDecl",
- "SAX function setDocumentLocator",
- "SAX function startDocument",
- "SAX function endDocument",
- "SAX function startElement",
- "SAX function endElement",
- "SAX function reference",
- "SAX function characters",
- "SAX function ignorableWhitespace",
- "SAX function processingInstruction",
- "SAX function comment",
- "SAX function warning",
- "SAX function error",
- "SAX function fatalError",
- "SAX function getParameterEntity",
- "SAX function cdataBlock",
- "SAX function externalSubset",
-};
-
-/**
- * xmlGetFeaturesList:
- * @len: the length of the features name array (input/output)
- * @result: an array of string to be filled with the features name.
- *
- * Copy at most *@len feature names into the @result array
- *
- * Returns -1 in case or error, or the total number of features,
- * len is updated with the number of strings copied,
- * strings must not be deallocated
- */
-int
-xmlGetFeaturesList(int *len, const char **result)
-{
- int ret, i;
-
- ret = sizeof(xmlFeaturesList) / sizeof(xmlFeaturesList[0]);
- if ((len == NULL) || (result == NULL))
- return (ret);
- if ((*len < 0) || (*len >= 1000))
- return (-1);
- if (*len > ret)
- *len = ret;
- for (i = 0; i < *len; i++)
- result[i] = xmlFeaturesList[i];
- return (ret);
-}
-
-/**
- * xmlGetFeature:
- * @ctxt: an XML/HTML parser context
- * @name: the feature name
- * @result: location to store the result
- *
- * Read the current value of one feature of this parser instance
- *
- * Returns -1 in case or error, 0 otherwise
- */
-int
-xmlGetFeature(xmlParserCtxtPtr ctxt, const char *name, void *result)
-{
- if ((ctxt == NULL) || (name == NULL) || (result == NULL))
- return (-1);
-
- if (!strcmp(name, "validate")) {
- *((int *) result) = ctxt->validate;
- } else if (!strcmp(name, "keep blanks")) {
- *((int *) result) = ctxt->keepBlanks;
- } else if (!strcmp(name, "disable SAX")) {
- *((int *) result) = ctxt->disableSAX;
- } else if (!strcmp(name, "fetch external entities")) {
- *((int *) result) = ctxt->loadsubset;
- } else if (!strcmp(name, "substitute entities")) {
- *((int *) result) = ctxt->replaceEntities;
- } else if (!strcmp(name, "gather line info")) {
- *((int *) result) = ctxt->record_info;
- } else if (!strcmp(name, "user data")) {
- *((void **) result) = ctxt->userData;
- } else if (!strcmp(name, "is html")) {
- *((int *) result) = ctxt->html;
- } else if (!strcmp(name, "is standalone")) {
- *((int *) result) = ctxt->standalone;
- } else if (!strcmp(name, "document")) {
- *((xmlDocPtr *) result) = ctxt->myDoc;
- } else if (!strcmp(name, "is well formed")) {
- *((int *) result) = ctxt->wellFormed;
- } else if (!strcmp(name, "is valid")) {
- *((int *) result) = ctxt->valid;
- } else if (!strcmp(name, "SAX block")) {
- *((xmlSAXHandlerPtr *) result) = ctxt->sax;
- } else if (!strcmp(name, "SAX function internalSubset")) {
- *((internalSubsetSAXFunc *) result) = ctxt->sax->internalSubset;
- } else if (!strcmp(name, "SAX function isStandalone")) {
- *((isStandaloneSAXFunc *) result) = ctxt->sax->isStandalone;
- } else if (!strcmp(name, "SAX function hasInternalSubset")) {
- *((hasInternalSubsetSAXFunc *) result) =
- ctxt->sax->hasInternalSubset;
- } else if (!strcmp(name, "SAX function hasExternalSubset")) {
- *((hasExternalSubsetSAXFunc *) result) =
- ctxt->sax->hasExternalSubset;
- } else if (!strcmp(name, "SAX function resolveEntity")) {
- *((resolveEntitySAXFunc *) result) = ctxt->sax->resolveEntity;
- } else if (!strcmp(name, "SAX function getEntity")) {
- *((getEntitySAXFunc *) result) = ctxt->sax->getEntity;
- } else if (!strcmp(name, "SAX function entityDecl")) {
- *((entityDeclSAXFunc *) result) = ctxt->sax->entityDecl;
- } else if (!strcmp(name, "SAX function notationDecl")) {
- *((notationDeclSAXFunc *) result) = ctxt->sax->notationDecl;
- } else if (!strcmp(name, "SAX function attributeDecl")) {
- *((attributeDeclSAXFunc *) result) = ctxt->sax->attributeDecl;
- } else if (!strcmp(name, "SAX function elementDecl")) {
- *((elementDeclSAXFunc *) result) = ctxt->sax->elementDecl;
- } else if (!strcmp(name, "SAX function unparsedEntityDecl")) {
- *((unparsedEntityDeclSAXFunc *) result) =
- ctxt->sax->unparsedEntityDecl;
- } else if (!strcmp(name, "SAX function setDocumentLocator")) {
- *((setDocumentLocatorSAXFunc *) result) =
- ctxt->sax->setDocumentLocator;
- } else if (!strcmp(name, "SAX function startDocument")) {
- *((startDocumentSAXFunc *) result) = ctxt->sax->startDocument;
- } else if (!strcmp(name, "SAX function endDocument")) {
- *((endDocumentSAXFunc *) result) = ctxt->sax->endDocument;
- } else if (!strcmp(name, "SAX function startElement")) {
- *((startElementSAXFunc *) result) = ctxt->sax->startElement;
- } else if (!strcmp(name, "SAX function endElement")) {
- *((endElementSAXFunc *) result) = ctxt->sax->endElement;
- } else if (!strcmp(name, "SAX function reference")) {
- *((referenceSAXFunc *) result) = ctxt->sax->reference;
- } else if (!strcmp(name, "SAX function characters")) {
- *((charactersSAXFunc *) result) = ctxt->sax->characters;
- } else if (!strcmp(name, "SAX function ignorableWhitespace")) {
- *((ignorableWhitespaceSAXFunc *) result) =
- ctxt->sax->ignorableWhitespace;
- } else if (!strcmp(name, "SAX function processingInstruction")) {
- *((processingInstructionSAXFunc *) result) =
- ctxt->sax->processingInstruction;
- } else if (!strcmp(name, "SAX function comment")) {
- *((commentSAXFunc *) result) = ctxt->sax->comment;
- } else if (!strcmp(name, "SAX function warning")) {
- *((warningSAXFunc *) result) = ctxt->sax->warning;
- } else if (!strcmp(name, "SAX function error")) {
- *((errorSAXFunc *) result) = ctxt->sax->error;
- } else if (!strcmp(name, "SAX function fatalError")) {
- *((fatalErrorSAXFunc *) result) = ctxt->sax->fatalError;
- } else if (!strcmp(name, "SAX function getParameterEntity")) {
- *((getParameterEntitySAXFunc *) result) =
- ctxt->sax->getParameterEntity;
- } else if (!strcmp(name, "SAX function cdataBlock")) {
- *((cdataBlockSAXFunc *) result) = ctxt->sax->cdataBlock;
- } else if (!strcmp(name, "SAX function externalSubset")) {
- *((externalSubsetSAXFunc *) result) = ctxt->sax->externalSubset;
- } else {
- return (-1);
- }
- return (0);
-}
-
-/**
- * xmlSetFeature:
- * @ctxt: an XML/HTML parser context
- * @name: the feature name
- * @value: pointer to the location of the new value
- *
- * Change the current value of one feature of this parser instance
- *
- * Returns -1 in case or error, 0 otherwise
- */
-int
-xmlSetFeature(xmlParserCtxtPtr ctxt, const char *name, void *value)
-{
- if ((ctxt == NULL) || (name == NULL) || (value == NULL))
- return (-1);
-
- if (!strcmp(name, "validate")) {
- int newvalidate = *((int *) value);
-
- if ((!ctxt->validate) && (newvalidate != 0)) {
- if (ctxt->vctxt.warning == NULL)
- ctxt->vctxt.warning = xmlParserValidityWarning;
- if (ctxt->vctxt.error == NULL)
- ctxt->vctxt.error = xmlParserValidityError;
- ctxt->vctxt.nodeMax = 0;
- }
- ctxt->validate = newvalidate;
- } else if (!strcmp(name, "keep blanks")) {
- ctxt->keepBlanks = *((int *) value);
- } else if (!strcmp(name, "disable SAX")) {
- ctxt->disableSAX = *((int *) value);
- } else if (!strcmp(name, "fetch external entities")) {
- ctxt->loadsubset = *((int *) value);
- } else if (!strcmp(name, "substitute entities")) {
- ctxt->replaceEntities = *((int *) value);
- } else if (!strcmp(name, "gather line info")) {
- ctxt->record_info = *((int *) value);
- } else if (!strcmp(name, "user data")) {
- ctxt->userData = *((void **) value);
- } else if (!strcmp(name, "is html")) {
- ctxt->html = *((int *) value);
- } else if (!strcmp(name, "is standalone")) {
- ctxt->standalone = *((int *) value);
- } else if (!strcmp(name, "document")) {
- ctxt->myDoc = *((xmlDocPtr *) value);
- } else if (!strcmp(name, "is well formed")) {
- ctxt->wellFormed = *((int *) value);
- } else if (!strcmp(name, "is valid")) {
- ctxt->valid = *((int *) value);
- } else if (!strcmp(name, "SAX block")) {
- ctxt->sax = *((xmlSAXHandlerPtr *) value);
- } else if (!strcmp(name, "SAX function internalSubset")) {
- ctxt->sax->internalSubset = *((internalSubsetSAXFunc *) value);
- } else if (!strcmp(name, "SAX function isStandalone")) {
- ctxt->sax->isStandalone = *((isStandaloneSAXFunc *) value);
- } else if (!strcmp(name, "SAX function hasInternalSubset")) {
- ctxt->sax->hasInternalSubset =
- *((hasInternalSubsetSAXFunc *) value);
- } else if (!strcmp(name, "SAX function hasExternalSubset")) {
- ctxt->sax->hasExternalSubset =
- *((hasExternalSubsetSAXFunc *) value);
- } else if (!strcmp(name, "SAX function resolveEntity")) {
- ctxt->sax->resolveEntity = *((resolveEntitySAXFunc *) value);
- } else if (!strcmp(name, "SAX function getEntity")) {
- ctxt->sax->getEntity = *((getEntitySAXFunc *) value);
- } else if (!strcmp(name, "SAX function entityDecl")) {
- ctxt->sax->entityDecl = *((entityDeclSAXFunc *) value);
- } else if (!strcmp(name, "SAX function notationDecl")) {
- ctxt->sax->notationDecl = *((notationDeclSAXFunc *) value);
- } else if (!strcmp(name, "SAX function attributeDecl")) {
- ctxt->sax->attributeDecl = *((attributeDeclSAXFunc *) value);
- } else if (!strcmp(name, "SAX function elementDecl")) {
- ctxt->sax->elementDecl = *((elementDeclSAXFunc *) value);
- } else if (!strcmp(name, "SAX function unparsedEntityDecl")) {
- ctxt->sax->unparsedEntityDecl =
- *((unparsedEntityDeclSAXFunc *) value);
- } else if (!strcmp(name, "SAX function setDocumentLocator")) {
- ctxt->sax->setDocumentLocator =
- *((setDocumentLocatorSAXFunc *) value);
- } else if (!strcmp(name, "SAX function startDocument")) {
- ctxt->sax->startDocument = *((startDocumentSAXFunc *) value);
- } else if (!strcmp(name, "SAX function endDocument")) {
- ctxt->sax->endDocument = *((endDocumentSAXFunc *) value);
- } else if (!strcmp(name, "SAX function startElement")) {
- ctxt->sax->startElement = *((startElementSAXFunc *) value);
- } else if (!strcmp(name, "SAX function endElement")) {
- ctxt->sax->endElement = *((endElementSAXFunc *) value);
- } else if (!strcmp(name, "SAX function reference")) {
- ctxt->sax->reference = *((referenceSAXFunc *) value);
- } else if (!strcmp(name, "SAX function characters")) {
- ctxt->sax->characters = *((charactersSAXFunc *) value);
- } else if (!strcmp(name, "SAX function ignorableWhitespace")) {
- ctxt->sax->ignorableWhitespace =
- *((ignorableWhitespaceSAXFunc *) value);
- } else if (!strcmp(name, "SAX function processingInstruction")) {
- ctxt->sax->processingInstruction =
- *((processingInstructionSAXFunc *) value);
- } else if (!strcmp(name, "SAX function comment")) {
- ctxt->sax->comment = *((commentSAXFunc *) value);
- } else if (!strcmp(name, "SAX function warning")) {
- ctxt->sax->warning = *((warningSAXFunc *) value);
- } else if (!strcmp(name, "SAX function error")) {
- ctxt->sax->error = *((errorSAXFunc *) value);
- } else if (!strcmp(name, "SAX function fatalError")) {
- ctxt->sax->fatalError = *((fatalErrorSAXFunc *) value);
- } else if (!strcmp(name, "SAX function getParameterEntity")) {
- ctxt->sax->getParameterEntity =
- *((getParameterEntitySAXFunc *) value);
- } else if (!strcmp(name, "SAX function cdataBlock")) {
- ctxt->sax->cdataBlock = *((cdataBlockSAXFunc *) value);
- } else if (!strcmp(name, "SAX function externalSubset")) {
- ctxt->sax->externalSubset = *((externalSubsetSAXFunc *) value);
- } else {
- return (-1);
- }
- return (0);
-}
-
-/**
- * xmlDecodeEntities:
- * @ctxt: the parser context
- * @len: the len to decode (in bytes !), -1 for no size limit
- * @what: combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF
- * @end: an end marker xmlChar, 0 if none
- * @end2: an end marker xmlChar, 0 if none
- * @end3: an end marker xmlChar, 0 if none
- *
- * This function is deprecated, we now always process entities content
- * through xmlStringDecodeEntities
- *
- * TODO: remove it in next major release.
- *
- * [67] Reference ::= EntityRef | CharRef
- *
- * [69] PEReference ::= '%' Name ';'
- *
- * Returns A newly allocated string with the substitution done. The caller
- * must deallocate it !
- */
-xmlChar *
-xmlDecodeEntities(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED, int what ATTRIBUTE_UNUSED,
- xmlChar end ATTRIBUTE_UNUSED,
- xmlChar end2 ATTRIBUTE_UNUSED,
- xmlChar end3 ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlDecodeEntities() deprecated function reached\n");
- deprecated = 1;
- }
- return (NULL);
-}
-
-/**
- * xmlNamespaceParseNCName:
- * @ctxt: an XML parser context
- *
- * parse an XML namespace name.
- *
- * TODO: this seems not in use anymore, the namespace handling is done on
- * top of the SAX interfaces, i.e. not on raw input.
- *
- * [NS 3] NCName ::= (Letter | '_') (NCNameChar)*
- *
- * [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' |
- * CombiningChar | Extender
- *
- * Returns the namespace name or NULL
- */
-
-xmlChar *
-xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNamespaceParseNCName() deprecated function reached\n");
- deprecated = 1;
- }
- return (NULL);
-}
-
-/**
- * xmlNamespaceParseQName:
- * @ctxt: an XML parser context
- * @prefix: a xmlChar **
- *
- * TODO: this seems not in use anymore, the namespace handling is done on
- * top of the SAX interfaces, i.e. not on raw input.
- *
- * parse an XML qualified name
- *
- * [NS 5] QName ::= (Prefix ':')? LocalPart
- *
- * [NS 6] Prefix ::= NCName
- *
- * [NS 7] LocalPart ::= NCName
- *
- * Returns the local part, and prefix is updated
- * to get the Prefix if any.
- */
-
-xmlChar *
-xmlNamespaceParseQName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlChar ** prefix ATTRIBUTE_UNUSED)
-{
-
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNamespaceParseQName() deprecated function reached\n");
- deprecated = 1;
- }
- return (NULL);
-}
-
-/**
- * xmlNamespaceParseNSDef:
- * @ctxt: an XML parser context
- *
- * parse a namespace prefix declaration
- *
- * TODO: this seems not in use anymore, the namespace handling is done on
- * top of the SAX interfaces, i.e. not on raw input.
- *
- * [NS 1] NSDef ::= PrefixDef Eq SystemLiteral
- *
- * [NS 2] PrefixDef ::= 'xmlns' (':' NCName)?
- *
- * Returns the namespace name
- */
-
-xmlChar *
-xmlNamespaceParseNSDef(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNamespaceParseNSDef() deprecated function reached\n");
- deprecated = 1;
- }
- return (NULL);
-}
-
-/**
- * xmlParseQuotedString:
- * @ctxt: an XML parser context
- *
- * Parse and return a string between quotes or doublequotes
- *
- * TODO: Deprecated, to be removed at next drop of binary compatibility
- *
- * Returns the string parser or NULL.
- */
-xmlChar *
-xmlParseQuotedString(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlParseQuotedString() deprecated function reached\n");
- deprecated = 1;
- }
- return (NULL);
-}
-
-/**
- * xmlParseNamespace:
- * @ctxt: an XML parser context
- *
- * xmlParseNamespace: parse specific PI '<?namespace ...' constructs.
- *
- * This is what the older xml-name Working Draft specified, a bunch of
- * other stuff may still rely on it, so support is still here as
- * if it was declared on the root of the Tree:-(
- *
- * TODO: remove from library
- *
- * To be removed at next drop of binary compatibility
- */
-
-void
-xmlParseNamespace(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlParseNamespace() deprecated function reached\n");
- deprecated = 1;
- }
-}
-
-/**
- * xmlScanName:
- * @ctxt: an XML parser context
- *
- * Trickery: parse an XML name but without consuming the input flow
- * Needed for rollback cases. Used only when parsing entities references.
- *
- * TODO: seems deprecated now, only used in the default part of
- * xmlParserHandleReference
- *
- * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
- * CombiningChar | Extender
- *
- * [5] Name ::= (Letter | '_' | ':') (NameChar)*
- *
- * [6] Names ::= Name (S Name)*
- *
- * Returns the Name parsed or NULL
- */
-
-xmlChar *
-xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlScanName() deprecated function reached\n");
- deprecated = 1;
- }
- return (NULL);
-}
-
-/**
- * xmlParserHandleReference:
- * @ctxt: the parser context
- *
- * TODO: Remove, now deprecated ... the test is done directly in the
- * content parsing
- * routines.
- *
- * [67] Reference ::= EntityRef | CharRef
- *
- * [68] EntityRef ::= '&' Name ';'
- *
- * [ WFC: Entity Declared ]
- * the Name given in the entity reference must match that in an entity
- * declaration, except that well-formed documents need not declare any
- * of the following entities: amp, lt, gt, apos, quot.
- *
- * [ WFC: Parsed Entity ]
- * An entity reference must not contain the name of an unparsed entity
- *
- * [66] CharRef ::= '&#' [0-9]+ ';' |
- * '&#x' [0-9a-fA-F]+ ';'
- *
- * A PEReference may have been detected in the current input stream
- * the handling is done accordingly to
- * http://www.w3.org/TR/REC-xml#entproc
- */
-void
-xmlParserHandleReference(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlParserHandleReference() deprecated function reached\n");
- deprecated = 1;
- }
-
- return;
-}
-
-/**
- * xmlHandleEntity:
- * @ctxt: an XML parser context
- * @entity: an XML entity pointer.
- *
- * Default handling of defined entities, when should we define a new input
- * stream ? When do we just handle that as a set of chars ?
- *
- * OBSOLETE: to be removed at some point.
- */
-
-void
-xmlHandleEntity(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlEntityPtr entity ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlHandleEntity() deprecated function reached\n");
- deprecated = 1;
- }
-}
-
-/**
- * xmlNewGlobalNs:
- * @doc: the document carrying the namespace
- * @href: the URI associated
- * @prefix: the prefix for the namespace
- *
- * Creation of a Namespace, the old way using PI and without scoping
- * DEPRECATED !!!
- * Returns NULL this functionality had been removed
- */
-xmlNsPtr
-xmlNewGlobalNs(xmlDocPtr doc ATTRIBUTE_UNUSED,
- const xmlChar * href ATTRIBUTE_UNUSED,
- const xmlChar * prefix ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewGlobalNs() deprecated function reached\n");
- deprecated = 1;
- }
- return (NULL);
-}
-
-/**
- * xmlUpgradeOldNs:
- * @doc: a document pointer
- *
- * Upgrade old style Namespaces (PI) and move them to the root of the document.
- * DEPRECATED
- */
-void
-xmlUpgradeOldNs(xmlDocPtr doc ATTRIBUTE_UNUSED)
-{
- static int deprecated = 0;
-
- if (!deprecated) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlUpgradeOldNs() deprecated function reached\n");
- deprecated = 1;
- }
-}
-
-/**
- * xmlEncodeEntities:
- * @doc: the document containing the string
- * @input: A string to convert to XML.
- *
- * TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary
- * compatibility
- *
- * People must migrate their code to xmlEncodeEntitiesReentrant !
- * This routine will issue a warning when encountered.
- *
- * Returns NULL
- */
-const xmlChar *
-xmlEncodeEntities(xmlDocPtr doc ATTRIBUTE_UNUSED,
- const xmlChar * input ATTRIBUTE_UNUSED)
-{
- static int warning = 1;
-
- if (warning) {
- xmlGenericError(xmlGenericErrorContext,
- "Deprecated API xmlEncodeEntities() used\n");
- xmlGenericError(xmlGenericErrorContext,
- " change code to use xmlEncodeEntitiesReentrant()\n");
- warning = 0;
- }
- return (NULL);
-}
-
-/************************************************************************
- * *
- * Old set of SAXv1 functions *
- * *
- ************************************************************************/
-static int deprecated_v1_msg = 0;
-
-#define DEPRECATED(n) \
- if (deprecated_v1_msg == 0) \
- xmlGenericError(xmlGenericErrorContext, \
- "Use of deprecated SAXv1 function %s\n", n); \
- deprecated_v1_msg++;
-
-/**
- * getPublicId:
- * @ctx: the user data (XML parser context)
- *
- * Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"
- * DEPRECATED: use xmlSAX2GetPublicId()
- *
- * Returns a xmlChar *
- */
-const xmlChar *
-getPublicId(void *ctx)
-{
- DEPRECATED("getPublicId")
- return (xmlSAX2GetPublicId(ctx));
-}
-
-/**
- * getSystemId:
- * @ctx: the user data (XML parser context)
- *
- * Provides the system ID, basically URL or filename e.g.
- * http://www.sgmlsource.com/dtds/memo.dtd
- * DEPRECATED: use xmlSAX2GetSystemId()
- *
- * Returns a xmlChar *
- */
-const xmlChar *
-getSystemId(void *ctx)
-{
- DEPRECATED("getSystemId")
- return (xmlSAX2GetSystemId(ctx));
-}
-
-/**
- * getLineNumber:
- * @ctx: the user data (XML parser context)
- *
- * Provide the line number of the current parsing point.
- * DEPRECATED: use xmlSAX2GetLineNumber()
- *
- * Returns an int
- */
-int
-getLineNumber(void *ctx)
-{
- DEPRECATED("getLineNumber")
- return (xmlSAX2GetLineNumber(ctx));
-}
-
-/**
- * getColumnNumber:
- * @ctx: the user data (XML parser context)
- *
- * Provide the column number of the current parsing point.
- * DEPRECATED: use xmlSAX2GetColumnNumber()
- *
- * Returns an int
- */
-int
-getColumnNumber(void *ctx)
-{
- DEPRECATED("getColumnNumber")
- return (xmlSAX2GetColumnNumber(ctx));
-}
-
-/**
- * isStandalone:
- * @ctx: the user data (XML parser context)
- *
- * Is this document tagged standalone ?
- * DEPRECATED: use xmlSAX2IsStandalone()
- *
- * Returns 1 if true
- */
-int
-isStandalone(void *ctx)
-{
- DEPRECATED("isStandalone")
- return (xmlSAX2IsStandalone(ctx));
-}
-
-/**
- * hasInternalSubset:
- * @ctx: the user data (XML parser context)
- *
- * Does this document has an internal subset
- * DEPRECATED: use xmlSAX2HasInternalSubset()
- *
- * Returns 1 if true
- */
-int
-hasInternalSubset(void *ctx)
-{
- DEPRECATED("hasInternalSubset")
- return (xmlSAX2HasInternalSubset(ctx));
-}
-
-/**
- * hasExternalSubset:
- * @ctx: the user data (XML parser context)
- *
- * Does this document has an external subset
- * DEPRECATED: use xmlSAX2HasExternalSubset()
- *
- * Returns 1 if true
- */
-int
-hasExternalSubset(void *ctx)
-{
- DEPRECATED("hasExternalSubset")
- return (xmlSAX2HasExternalSubset(ctx));
-}
-
-/**
- * internalSubset:
- * @ctx: the user data (XML parser context)
- * @name: the root element name
- * @ExternalID: the external ID
- * @SystemID: the SYSTEM ID (e.g. filename or URL)
- *
- * Callback on internal subset declaration.
- * DEPRECATED: use xmlSAX2InternalSubset()
- */
-void
-internalSubset(void *ctx, const xmlChar * name,
- const xmlChar * ExternalID, const xmlChar * SystemID)
-{
- DEPRECATED("internalSubset")
- xmlSAX2InternalSubset(ctx, name, ExternalID, SystemID);
-}
-
-/**
- * externalSubset:
- * @ctx: the user data (XML parser context)
- * @name: the root element name
- * @ExternalID: the external ID
- * @SystemID: the SYSTEM ID (e.g. filename or URL)
- *
- * Callback on external subset declaration.
- * DEPRECATED: use xmlSAX2ExternalSubset()
- */
-void
-externalSubset(void *ctx, const xmlChar * name,
- const xmlChar * ExternalID, const xmlChar * SystemID)
-{
- DEPRECATED("externalSubset")
- xmlSAX2ExternalSubset(ctx, name, ExternalID, SystemID);
-}
-
-/**
- * resolveEntity:
- * @ctx: the user data (XML parser context)
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * The entity loader, to control the loading of external entities,
- * the application can either:
- * - override this resolveEntity() callback in the SAX block
- * - or better use the xmlSetExternalEntityLoader() function to
- * set up it's own entity resolution routine
- * DEPRECATED: use xmlSAX2ResolveEntity()
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-xmlParserInputPtr
-resolveEntity(void *ctx, const xmlChar * publicId,
- const xmlChar * systemId)
-{
- DEPRECATED("resolveEntity")
- return (xmlSAX2ResolveEntity(ctx, publicId, systemId));
-}
-
-/**
- * getEntity:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Get an entity by name
- * DEPRECATED: use xmlSAX2GetEntity()
- *
- * Returns the xmlEntityPtr if found.
- */
-xmlEntityPtr
-getEntity(void *ctx, const xmlChar * name)
-{
- DEPRECATED("getEntity")
- return (xmlSAX2GetEntity(ctx, name));
-}
-
-/**
- * getParameterEntity:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * Get a parameter entity by name
- * DEPRECATED: use xmlSAX2GetParameterEntity()
- *
- * Returns the xmlEntityPtr if found.
- */
-xmlEntityPtr
-getParameterEntity(void *ctx, const xmlChar * name)
-{
- DEPRECATED("getParameterEntity")
- return (xmlSAX2GetParameterEntity(ctx, name));
-}
-
-
-/**
- * entityDecl:
- * @ctx: the user data (XML parser context)
- * @name: the entity name
- * @type: the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed
- * DEPRECATED: use xmlSAX2EntityDecl()
- */
-void
-entityDecl(void *ctx, const xmlChar * name, int type,
- const xmlChar * publicId, const xmlChar * systemId,
- xmlChar * content)
-{
- DEPRECATED("entityDecl")
- xmlSAX2EntityDecl(ctx, name, type, publicId, systemId, content);
-}
-
-/**
- * attributeDecl:
- * @ctx: the user data (XML parser context)
- * @elem: the name of the element
- * @fullname: the attribute name
- * @type: the attribute type
- * @def: the type of default value
- * @defaultValue: the attribute default value
- * @tree: the tree of enumerated value set
- *
- * An attribute definition has been parsed
- * DEPRECATED: use xmlSAX2AttributeDecl()
- */
-void
-attributeDecl(void *ctx, const xmlChar * elem, const xmlChar * fullname,
- int type, int def, const xmlChar * defaultValue,
- xmlEnumerationPtr tree)
-{
- DEPRECATED("attributeDecl")
- xmlSAX2AttributeDecl(ctx, elem, fullname, type, def, defaultValue,
- tree);
-}
-
-/**
- * elementDecl:
- * @ctx: the user data (XML parser context)
- * @name: the element name
- * @type: the element type
- * @content: the element value tree
- *
- * An element definition has been parsed
- * DEPRECATED: use xmlSAX2ElementDecl()
- */
-void
-elementDecl(void *ctx, const xmlChar * name, int type,
- xmlElementContentPtr content)
-{
- DEPRECATED("elementDecl")
- xmlSAX2ElementDecl(ctx, name, type, content);
-}
-
-/**
- * notationDecl:
- * @ctx: the user data (XML parser context)
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- * DEPRECATED: use xmlSAX2NotationDecl()
- */
-void
-notationDecl(void *ctx, const xmlChar * name,
- const xmlChar * publicId, const xmlChar * systemId)
-{
- DEPRECATED("notationDecl")
- xmlSAX2NotationDecl(ctx, name, publicId, systemId);
-}
-
-/**
- * unparsedEntityDecl:
- * @ctx: the user data (XML parser context)
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed
- * DEPRECATED: use xmlSAX2UnparsedEntityDecl()
- */
-void
-unparsedEntityDecl(void *ctx, const xmlChar * name,
- const xmlChar * publicId, const xmlChar * systemId,
- const xmlChar * notationName)
-{
- DEPRECATED("unparsedEntityDecl")
- xmlSAX2UnparsedEntityDecl(ctx, name, publicId, systemId,
- notationName);
-}
-
-/**
- * setDocumentLocator:
- * @ctx: the user data (XML parser context)
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
- * Everything is available on the context, so this is useless in our case.
- * DEPRECATED
- */
-void
-setDocumentLocator(void *ctx ATTRIBUTE_UNUSED,
- xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
-{
- DEPRECATED("setDocumentLocator")
-}
-
-/**
- * startDocument:
- * @ctx: the user data (XML parser context)
- *
- * called when the document start being processed.
- * DEPRECATED: use xmlSAX2StartDocument()
- */
-void
-startDocument(void *ctx)
-{
- /* don't be too painful for glade users */
- /* DEPRECATED("startDocument") */
- xmlSAX2StartDocument(ctx);
-}
-
-/**
- * endDocument:
- * @ctx: the user data (XML parser context)
- *
- * called when the document end has been detected.
- * DEPRECATED: use xmlSAX2EndDocument()
- */
-void
-endDocument(void *ctx)
-{
- DEPRECATED("endDocument")
- xmlSAX2EndDocument(ctx);
-}
-
-/**
- * attribute:
- * @ctx: the user data (XML parser context)
- * @fullname: The attribute name, including namespace prefix
- * @value: The attribute value
- *
- * Handle an attribute that has been read by the parser.
- * The default handling is to convert the attribute into an
- * DOM subtree and past it in a new xmlAttr element added to
- * the element.
- * DEPRECATED: use xmlSAX2Attribute()
- */
-void
-attribute(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * fullname ATTRIBUTE_UNUSED,
- const xmlChar * value ATTRIBUTE_UNUSED)
-{
- DEPRECATED("attribute")
-}
-
-/**
- * startElement:
- * @ctx: the user data (XML parser context)
- * @fullname: The element name, including namespace prefix
- * @atts: An array of name/value attributes pairs, NULL terminated
- *
- * called when an opening tag has been processed.
- * DEPRECATED: use xmlSAX2StartElement()
- */
-void
-startElement(void *ctx, const xmlChar * fullname, const xmlChar ** atts)
-{
- xmlSAX2StartElement(ctx, fullname, atts);
-}
-
-/**
- * endElement:
- * @ctx: the user data (XML parser context)
- * @name: The element name
- *
- * called when the end of an element has been detected.
- * DEPRECATED: use xmlSAX2EndElement()
- */
-void
-endElement(void *ctx, const xmlChar * name ATTRIBUTE_UNUSED)
-{
- DEPRECATED("endElement")
- xmlSAX2EndElement(ctx, name);
-}
-
-/**
- * reference:
- * @ctx: the user data (XML parser context)
- * @name: The entity name
- *
- * called when an entity reference is detected.
- * DEPRECATED: use xmlSAX2Reference()
- */
-void
-reference(void *ctx, const xmlChar * name)
-{
- DEPRECATED("reference")
- xmlSAX2Reference(ctx, name);
-}
-
-/**
- * characters:
- * @ctx: the user data (XML parser context)
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- * DEPRECATED: use xmlSAX2Characters()
- */
-void
-characters(void *ctx, const xmlChar * ch, int len)
-{
- DEPRECATED("characters")
- xmlSAX2Characters(ctx, ch, len);
-}
-
-/**
- * ignorableWhitespace:
- * @ctx: the user data (XML parser context)
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some ignorable whitespaces from the parser.
- * UNUSED: by default the DOM building will use characters
- * DEPRECATED: use xmlSAX2IgnorableWhitespace()
- */
-void
-ignorableWhitespace(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * ch ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED)
-{
- DEPRECATED("ignorableWhitespace")
-}
-
-/**
- * processingInstruction:
- * @ctx: the user data (XML parser context)
- * @target: the target name
- * @data: the PI data's
- *
- * A processing instruction has been parsed.
- * DEPRECATED: use xmlSAX2ProcessingInstruction()
- */
-void
-processingInstruction(void *ctx, const xmlChar * target,
- const xmlChar * data)
-{
- DEPRECATED("processingInstruction")
- xmlSAX2ProcessingInstruction(ctx, target, data);
-}
-
-/**
- * globalNamespace:
- * @ctx: the user data (XML parser context)
- * @href: the namespace associated URN
- * @prefix: the namespace prefix
- *
- * An old global namespace has been parsed.
- * DEPRECATED
- */
-void
-globalNamespace(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * href ATTRIBUTE_UNUSED,
- const xmlChar * prefix ATTRIBUTE_UNUSED)
-{
- DEPRECATED("globalNamespace")
-}
-
-/**
- * setNamespace:
- * @ctx: the user data (XML parser context)
- * @name: the namespace prefix
- *
- * Set the current element namespace.
- * DEPRECATED
- */
-
-void
-setNamespace(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED)
-{
- DEPRECATED("setNamespace")
-}
-
-/**
- * getNamespace:
- * @ctx: the user data (XML parser context)
- *
- * Get the current element namespace.
- * DEPRECATED
- *
- * Returns the xmlNsPtr or NULL if none
- */
-
-xmlNsPtr
-getNamespace(void *ctx ATTRIBUTE_UNUSED)
-{
- DEPRECATED("getNamespace")
- return (NULL);
-}
-
-/**
- * checkNamespace:
- * @ctx: the user data (XML parser context)
- * @namespace: the namespace to check against
- *
- * Check that the current element namespace is the same as the
- * one read upon parsing.
- * DEPRECATED
- *
- * Returns 1 if true 0 otherwise
- */
-
-int
-checkNamespace(void *ctx ATTRIBUTE_UNUSED,
- xmlChar * namespace ATTRIBUTE_UNUSED)
-{
- DEPRECATED("checkNamespace")
- return (0);
-}
-
-/**
- * namespaceDecl:
- * @ctx: the user data (XML parser context)
- * @href: the namespace associated URN
- * @prefix: the namespace prefix
- *
- * A namespace has been parsed.
- * DEPRECATED
- */
-void
-namespaceDecl(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * href ATTRIBUTE_UNUSED,
- const xmlChar * prefix ATTRIBUTE_UNUSED)
-{
- DEPRECATED("namespaceDecl")
-}
-
-/**
- * comment:
- * @ctx: the user data (XML parser context)
- * @value: the comment content
- *
- * A comment has been parsed.
- * DEPRECATED: use xmlSAX2Comment()
- */
-void
-comment(void *ctx, const xmlChar * value)
-{
- DEPRECATED("comment")
- xmlSAX2Comment(ctx, value);
-}
-
-/**
- * cdataBlock:
- * @ctx: the user data (XML parser context)
- * @value: The pcdata content
- * @len: the block length
- *
- * called when a pcdata block has been parsed
- * DEPRECATED: use xmlSAX2CDataBlock()
- */
-void
-cdataBlock(void *ctx, const xmlChar * value, int len)
-{
- DEPRECATED("cdataBlock")
- xmlSAX2CDataBlock(ctx, value, len);
-}
-#define bottom_legacy
-#include "elfgcchack.h"
-#endif /* LIBXML_LEGACY_ENABLED */
-
diff --git a/external/libxml2_android/jni/libxml2/libxml.h b/external/libxml2_android/jni/libxml2/libxml.h
deleted file mode 100644
index 88e515f5..00000000
--- a/external/libxml2_android/jni/libxml2/libxml.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * libxml.h: internal header only used during the compilation of libxml
- *
- * See COPYRIGHT for the status of this software
- *
- * Author: breese@users.sourceforge.net
- */
-
-#ifndef __XML_LIBXML_H__
-#define __XML_LIBXML_H__
-
-#include <libxml/xmlstring.h>
-
-#ifndef NO_LARGEFILE_SOURCE
-#ifndef _LARGEFILE_SOURCE
-#define _LARGEFILE_SOURCE
-#endif
-#ifndef _FILE_OFFSET_BITS
-#define _FILE_OFFSET_BITS 64
-#endif
-#endif
-
-#if defined(macintosh)
-#include "config-mac.h"
-#elif defined(_WIN32_WCE)
-/*
- * Windows CE compatibility definitions and functions
- * This is needed to compile libxml2 for Windows CE.
- * At least I tested it with WinCE 5.0 for Emulator and WinCE 4.2/SH4 target
- */
-#include <win32config.h>
-#include <libxml/xmlversion.h>
-#else
-/*
- * Currently supported platforms use either autoconf or
- * copy to config.h own "preset" configuration file.
- * As result ifdef HAVE_CONFIG_H is omited here.
- */
-#include "config.h"
-#include <libxml/xmlversion.h>
-#endif
-
-#if defined(__Lynx__)
-#include <stdio.h> /* pull definition of size_t */
-#include <varargs.h>
-int snprintf(char *, size_t, const char *, ...);
-int vfprintf(FILE *, const char *, va_list);
-#endif
-
-#ifndef WITH_TRIO
-#include <stdio.h>
-#else
-/**
- * TRIO_REPLACE_STDIO:
- *
- * This macro is defined if teh trio string formatting functions are to
- * be used instead of the default stdio ones.
- */
-#define TRIO_REPLACE_STDIO
-#include "trio.h"
-#endif
-
-/*
- * Internal variable indicating if a callback has been registered for
- * node creation/destruction. It avoids spending a lot of time in locking
- * function while checking if the callback exists.
- */
-extern int __xmlRegisterCallbacks;
-/*
- * internal error reporting routines, shared but not partof the API.
- */
-void __xmlIOErr(int domain, int code, const char *extra);
-void __xmlLoaderErr(void *ctx, const char *msg, const char *filename) LIBXML_ATTR_FORMAT(2,0);
-#ifdef LIBXML_HTML_ENABLED
-/*
- * internal function of HTML parser needed for xmlParseInNodeContext
- * but not part of the API
- */
-void __htmlParseContent(void *ctx);
-#endif
-
-/*
- * internal global initialization critical section routines.
- */
-void __xmlGlobalInitMutexLock(void);
-void __xmlGlobalInitMutexUnlock(void);
-void __xmlGlobalInitMutexDestroy(void);
-
-int __xmlInitializeDict(void);
-
-#if defined(HAVE_RAND) && defined(HAVE_SRAND) && defined(HAVE_TIME)
-/*
- * internal thread safe random function
- */
-int __xmlRandom(void);
-#endif
-
-XMLPUBFUN xmlChar * XMLCALL xmlEscapeFormatString(xmlChar **msg);
-int xmlNop(void);
-
-#ifdef IN_LIBXML
-#ifdef __GNUC__
-#ifdef PIC
-#ifdef linux
-#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3)
-#include "elfgcchack.h"
-#endif
-#endif
-#endif
-#endif
-#endif
-#if !defined(PIC) && !defined(NOLIBTOOL)
-# define LIBXML_STATIC
-#endif
-#endif /* ! __XML_LIBXML_H__ */
diff --git a/external/libxml2_android/jni/libxml2/list.c b/external/libxml2_android/jni/libxml2/list.c
deleted file mode 100644
index d33d9281..00000000
--- a/external/libxml2_android/jni/libxml2/list.c
+++ /dev/null
@@ -1,779 +0,0 @@
-/*
- * list.c: lists handling implementation
- *
- * Copyright (C) 2000 Gary Pennington and Daniel Veillard.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- * Author: Gary.Pennington@uk.sun.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/list.h>
-#include <libxml/globals.h>
-
-/*
- * Type definition are kept internal
- */
-
-struct _xmlLink
-{
- struct _xmlLink *next;
- struct _xmlLink *prev;
- void *data;
-};
-
-struct _xmlList
-{
- xmlLinkPtr sentinel;
- void (*linkDeallocator)(xmlLinkPtr );
- int (*linkCompare)(const void *, const void*);
-};
-
-/************************************************************************
- * *
- * Interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlLinkDeallocator:
- * @l: a list
- * @lk: a link
- *
- * Unlink and deallocate @lk from list @l
- */
-static void
-xmlLinkDeallocator(xmlListPtr l, xmlLinkPtr lk)
-{
- (lk->prev)->next = lk->next;
- (lk->next)->prev = lk->prev;
- if(l->linkDeallocator)
- l->linkDeallocator(lk);
- xmlFree(lk);
-}
-
-/**
- * xmlLinkCompare:
- * @data0: first data
- * @data1: second data
- *
- * Compares two arbitrary data
- *
- * Returns -1, 0 or 1 depending on whether data1 is greater equal or smaller
- * than data0
- */
-static int
-xmlLinkCompare(const void *data0, const void *data1)
-{
- if (data0 < data1)
- return (-1);
- else if (data0 == data1)
- return (0);
- return (1);
-}
-
-/**
- * xmlListLowerSearch:
- * @l: a list
- * @data: a data
- *
- * Search data in the ordered list walking from the beginning
- *
- * Returns the link containing the data or NULL
- */
-static xmlLinkPtr
-xmlListLowerSearch(xmlListPtr l, void *data)
-{
- xmlLinkPtr lk;
-
- if (l == NULL)
- return(NULL);
- for(lk = l->sentinel->next;lk != l->sentinel && l->linkCompare(lk->data, data) <0 ;lk = lk->next);
- return lk;
-}
-
-/**
- * xmlListHigherSearch:
- * @l: a list
- * @data: a data
- *
- * Search data in the ordered list walking backward from the end
- *
- * Returns the link containing the data or NULL
- */
-static xmlLinkPtr
-xmlListHigherSearch(xmlListPtr l, void *data)
-{
- xmlLinkPtr lk;
-
- if (l == NULL)
- return(NULL);
- for(lk = l->sentinel->prev;lk != l->sentinel && l->linkCompare(lk->data, data) >0 ;lk = lk->prev);
- return lk;
-}
-
-/**
- * xmlListSearch:
- * @l: a list
- * @data: a data
- *
- * Search data in the list
- *
- * Returns the link containing the data or NULL
- */
-static xmlLinkPtr
-xmlListLinkSearch(xmlListPtr l, void *data)
-{
- xmlLinkPtr lk;
- if (l == NULL)
- return(NULL);
- lk = xmlListLowerSearch(l, data);
- if (lk == l->sentinel)
- return NULL;
- else {
- if (l->linkCompare(lk->data, data) ==0)
- return lk;
- return NULL;
- }
-}
-
-/**
- * xmlListLinkReverseSearch:
- * @l: a list
- * @data: a data
- *
- * Search data in the list processing backward
- *
- * Returns the link containing the data or NULL
- */
-static xmlLinkPtr
-xmlListLinkReverseSearch(xmlListPtr l, void *data)
-{
- xmlLinkPtr lk;
- if (l == NULL)
- return(NULL);
- lk = xmlListHigherSearch(l, data);
- if (lk == l->sentinel)
- return NULL;
- else {
- if (l->linkCompare(lk->data, data) ==0)
- return lk;
- return NULL;
- }
-}
-
-/**
- * xmlListCreate:
- * @deallocator: an optional deallocator function
- * @compare: an optional comparison function
- *
- * Create a new list
- *
- * Returns the new list or NULL in case of error
- */
-xmlListPtr
-xmlListCreate(xmlListDeallocator deallocator, xmlListDataCompare compare)
-{
- xmlListPtr l;
- if (NULL == (l = (xmlListPtr )xmlMalloc( sizeof(xmlList)))) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot initialize memory for list");
- return (NULL);
- }
- /* Initialize the list to NULL */
- memset(l, 0, sizeof(xmlList));
-
- /* Add the sentinel */
- if (NULL ==(l->sentinel = (xmlLinkPtr )xmlMalloc(sizeof(xmlLink)))) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot initialize memory for sentinel");
- xmlFree(l);
- return (NULL);
- }
- l->sentinel->next = l->sentinel;
- l->sentinel->prev = l->sentinel;
- l->sentinel->data = NULL;
-
- /* If there is a link deallocator, use it */
- if (deallocator != NULL)
- l->linkDeallocator = deallocator;
- /* If there is a link comparator, use it */
- if (compare != NULL)
- l->linkCompare = compare;
- else /* Use our own */
- l->linkCompare = xmlLinkCompare;
- return l;
-}
-
-/**
- * xmlListSearch:
- * @l: a list
- * @data: a search value
- *
- * Search the list for an existing value of @data
- *
- * Returns the value associated to @data or NULL in case of error
- */
-void *
-xmlListSearch(xmlListPtr l, void *data)
-{
- xmlLinkPtr lk;
- if (l == NULL)
- return(NULL);
- lk = xmlListLinkSearch(l, data);
- if (lk)
- return (lk->data);
- return NULL;
-}
-
-/**
- * xmlListReverseSearch:
- * @l: a list
- * @data: a search value
- *
- * Search the list in reverse order for an existing value of @data
- *
- * Returns the value associated to @data or NULL in case of error
- */
-void *
-xmlListReverseSearch(xmlListPtr l, void *data)
-{
- xmlLinkPtr lk;
- if (l == NULL)
- return(NULL);
- lk = xmlListLinkReverseSearch(l, data);
- if (lk)
- return (lk->data);
- return NULL;
-}
-
-/**
- * xmlListInsert:
- * @l: a list
- * @data: the data
- *
- * Insert data in the ordered list at the beginning for this value
- *
- * Returns 0 in case of success, 1 in case of failure
- */
-int
-xmlListInsert(xmlListPtr l, void *data)
-{
- xmlLinkPtr lkPlace, lkNew;
-
- if (l == NULL)
- return(1);
- lkPlace = xmlListLowerSearch(l, data);
- /* Add the new link */
- lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
- if (lkNew == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot initialize memory for new link");
- return (1);
- }
- lkNew->data = data;
- lkPlace = lkPlace->prev;
- lkNew->next = lkPlace->next;
- (lkPlace->next)->prev = lkNew;
- lkPlace->next = lkNew;
- lkNew->prev = lkPlace;
- return 0;
-}
-
-/**
- * xmlListAppend:
- * @l: a list
- * @data: the data
- *
- * Insert data in the ordered list at the end for this value
- *
- * Returns 0 in case of success, 1 in case of failure
- */
-int xmlListAppend(xmlListPtr l, void *data)
-{
- xmlLinkPtr lkPlace, lkNew;
-
- if (l == NULL)
- return(1);
- lkPlace = xmlListHigherSearch(l, data);
- /* Add the new link */
- lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
- if (lkNew == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot initialize memory for new link");
- return (1);
- }
- lkNew->data = data;
- lkNew->next = lkPlace->next;
- (lkPlace->next)->prev = lkNew;
- lkPlace->next = lkNew;
- lkNew->prev = lkPlace;
- return 0;
-}
-
-/**
- * xmlListDelete:
- * @l: a list
- *
- * Deletes the list and its associated data
- */
-void xmlListDelete(xmlListPtr l)
-{
- if (l == NULL)
- return;
-
- xmlListClear(l);
- xmlFree(l->sentinel);
- xmlFree(l);
-}
-
-/**
- * xmlListRemoveFirst:
- * @l: a list
- * @data: list data
- *
- * Remove the first instance associated to data in the list
- *
- * Returns 1 if a deallocation occured, or 0 if not found
- */
-int
-xmlListRemoveFirst(xmlListPtr l, void *data)
-{
- xmlLinkPtr lk;
-
- if (l == NULL)
- return(0);
- /*Find the first instance of this data */
- lk = xmlListLinkSearch(l, data);
- if (lk != NULL) {
- xmlLinkDeallocator(l, lk);
- return 1;
- }
- return 0;
-}
-
-/**
- * xmlListRemoveLast:
- * @l: a list
- * @data: list data
- *
- * Remove the last instance associated to data in the list
- *
- * Returns 1 if a deallocation occured, or 0 if not found
- */
-int
-xmlListRemoveLast(xmlListPtr l, void *data)
-{
- xmlLinkPtr lk;
-
- if (l == NULL)
- return(0);
- /*Find the last instance of this data */
- lk = xmlListLinkReverseSearch(l, data);
- if (lk != NULL) {
- xmlLinkDeallocator(l, lk);
- return 1;
- }
- return 0;
-}
-
-/**
- * xmlListRemoveAll:
- * @l: a list
- * @data: list data
- *
- * Remove the all instance associated to data in the list
- *
- * Returns the number of deallocation, or 0 if not found
- */
-int
-xmlListRemoveAll(xmlListPtr l, void *data)
-{
- int count=0;
-
- if (l == NULL)
- return(0);
-
- while(xmlListRemoveFirst(l, data))
- count++;
- return count;
-}
-
-/**
- * xmlListClear:
- * @l: a list
- *
- * Remove the all data in the list
- */
-void
-xmlListClear(xmlListPtr l)
-{
- xmlLinkPtr lk;
-
- if (l == NULL)
- return;
- lk = l->sentinel->next;
- while(lk != l->sentinel) {
- xmlLinkPtr next = lk->next;
-
- xmlLinkDeallocator(l, lk);
- lk = next;
- }
-}
-
-/**
- * xmlListEmpty:
- * @l: a list
- *
- * Is the list empty ?
- *
- * Returns 1 if the list is empty, 0 if not empty and -1 in case of error
- */
-int
-xmlListEmpty(xmlListPtr l)
-{
- if (l == NULL)
- return(-1);
- return (l->sentinel->next == l->sentinel);
-}
-
-/**
- * xmlListFront:
- * @l: a list
- *
- * Get the first element in the list
- *
- * Returns the first element in the list, or NULL
- */
-xmlLinkPtr
-xmlListFront(xmlListPtr l)
-{
- if (l == NULL)
- return(NULL);
- return (l->sentinel->next);
-}
-
-/**
- * xmlListEnd:
- * @l: a list
- *
- * Get the last element in the list
- *
- * Returns the last element in the list, or NULL
- */
-xmlLinkPtr
-xmlListEnd(xmlListPtr l)
-{
- if (l == NULL)
- return(NULL);
- return (l->sentinel->prev);
-}
-
-/**
- * xmlListSize:
- * @l: a list
- *
- * Get the number of elements in the list
- *
- * Returns the number of elements in the list or -1 in case of error
- */
-int
-xmlListSize(xmlListPtr l)
-{
- xmlLinkPtr lk;
- int count=0;
-
- if (l == NULL)
- return(-1);
- /* TODO: keep a counter in xmlList instead */
- for(lk = l->sentinel->next; lk != l->sentinel; lk = lk->next, count++);
- return count;
-}
-
-/**
- * xmlListPopFront:
- * @l: a list
- *
- * Removes the first element in the list
- */
-void
-xmlListPopFront(xmlListPtr l)
-{
- if(!xmlListEmpty(l))
- xmlLinkDeallocator(l, l->sentinel->next);
-}
-
-/**
- * xmlListPopBack:
- * @l: a list
- *
- * Removes the last element in the list
- */
-void
-xmlListPopBack(xmlListPtr l)
-{
- if(!xmlListEmpty(l))
- xmlLinkDeallocator(l, l->sentinel->prev);
-}
-
-/**
- * xmlListPushFront:
- * @l: a list
- * @data: new data
- *
- * add the new data at the beginning of the list
- *
- * Returns 1 if successful, 0 otherwise
- */
-int
-xmlListPushFront(xmlListPtr l, void *data)
-{
- xmlLinkPtr lkPlace, lkNew;
-
- if (l == NULL)
- return(0);
- lkPlace = l->sentinel;
- /* Add the new link */
- lkNew = (xmlLinkPtr) xmlMalloc(sizeof(xmlLink));
- if (lkNew == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot initialize memory for new link");
- return (0);
- }
- lkNew->data = data;
- lkNew->next = lkPlace->next;
- (lkPlace->next)->prev = lkNew;
- lkPlace->next = lkNew;
- lkNew->prev = lkPlace;
- return 1;
-}
-
-/**
- * xmlListPushBack:
- * @l: a list
- * @data: new data
- *
- * add the new data at the end of the list
- *
- * Returns 1 if successful, 0 otherwise
- */
-int
-xmlListPushBack(xmlListPtr l, void *data)
-{
- xmlLinkPtr lkPlace, lkNew;
-
- if (l == NULL)
- return(0);
- lkPlace = l->sentinel->prev;
- /* Add the new link */
- if (NULL ==(lkNew = (xmlLinkPtr )xmlMalloc(sizeof(xmlLink)))) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot initialize memory for new link");
- return (0);
- }
- lkNew->data = data;
- lkNew->next = lkPlace->next;
- (lkPlace->next)->prev = lkNew;
- lkPlace->next = lkNew;
- lkNew->prev = lkPlace;
- return 1;
-}
-
-/**
- * xmlLinkGetData:
- * @lk: a link
- *
- * See Returns.
- *
- * Returns a pointer to the data referenced from this link
- */
-void *
-xmlLinkGetData(xmlLinkPtr lk)
-{
- if (lk == NULL)
- return(NULL);
- return lk->data;
-}
-
-/**
- * xmlListReverse:
- * @l: a list
- *
- * Reverse the order of the elements in the list
- */
-void
-xmlListReverse(xmlListPtr l)
-{
- xmlLinkPtr lk;
- xmlLinkPtr lkPrev;
-
- if (l == NULL)
- return;
- lkPrev = l->sentinel;
- for (lk = l->sentinel->next; lk != l->sentinel; lk = lk->next) {
- lkPrev->next = lkPrev->prev;
- lkPrev->prev = lk;
- lkPrev = lk;
- }
- /* Fix up the last node */
- lkPrev->next = lkPrev->prev;
- lkPrev->prev = lk;
-}
-
-/**
- * xmlListSort:
- * @l: a list
- *
- * Sort all the elements in the list
- */
-void
-xmlListSort(xmlListPtr l)
-{
- xmlListPtr lTemp;
-
- if (l == NULL)
- return;
- if(xmlListEmpty(l))
- return;
-
- /* I think that the real answer is to implement quicksort, the
- * alternative is to implement some list copying procedure which
- * would be based on a list copy followed by a clear followed by
- * an insert. This is slow...
- */
-
- if (NULL ==(lTemp = xmlListDup(l)))
- return;
- xmlListClear(l);
- xmlListMerge(l, lTemp);
- xmlListDelete(lTemp);
- return;
-}
-
-/**
- * xmlListWalk:
- * @l: a list
- * @walker: a processing function
- * @user: a user parameter passed to the walker function
- *
- * Walk all the element of the first from first to last and
- * apply the walker function to it
- */
-void
-xmlListWalk(xmlListPtr l, xmlListWalker walker, const void *user) {
- xmlLinkPtr lk;
-
- if ((l == NULL) || (walker == NULL))
- return;
- for(lk = l->sentinel->next; lk != l->sentinel; lk = lk->next) {
- if((walker(lk->data, user)) == 0)
- break;
- }
-}
-
-/**
- * xmlListReverseWalk:
- * @l: a list
- * @walker: a processing function
- * @user: a user parameter passed to the walker function
- *
- * Walk all the element of the list in reverse order and
- * apply the walker function to it
- */
-void
-xmlListReverseWalk(xmlListPtr l, xmlListWalker walker, const void *user) {
- xmlLinkPtr lk;
-
- if ((l == NULL) || (walker == NULL))
- return;
- for(lk = l->sentinel->prev; lk != l->sentinel; lk = lk->prev) {
- if((walker(lk->data, user)) == 0)
- break;
- }
-}
-
-/**
- * xmlListMerge:
- * @l1: the original list
- * @l2: the new list
- *
- * include all the elements of the second list in the first one and
- * clear the second list
- */
-void
-xmlListMerge(xmlListPtr l1, xmlListPtr l2)
-{
- xmlListCopy(l1, l2);
- xmlListClear(l2);
-}
-
-/**
- * xmlListDup:
- * @old: the list
- *
- * Duplicate the list
- *
- * Returns a new copy of the list or NULL in case of error
- */
-xmlListPtr
-xmlListDup(const xmlListPtr old)
-{
- xmlListPtr cur;
-
- if (old == NULL)
- return(NULL);
- /* Hmmm, how to best deal with allocation issues when copying
- * lists. If there is a de-allocator, should responsibility lie with
- * the new list or the old list. Surely not both. I'll arbitrarily
- * set it to be the old list for the time being whilst I work out
- * the answer
- */
- if (NULL ==(cur = xmlListCreate(NULL, old->linkCompare)))
- return (NULL);
- if (0 != xmlListCopy(cur, old))
- return NULL;
- return cur;
-}
-
-/**
- * xmlListCopy:
- * @cur: the new list
- * @old: the old list
- *
- * Move all the element from the old list in the new list
- *
- * Returns 0 in case of success 1 in case of error
- */
-int
-xmlListCopy(xmlListPtr cur, const xmlListPtr old)
-{
- /* Walk the old tree and insert the data into the new one */
- xmlLinkPtr lk;
-
- if ((old == NULL) || (cur == NULL))
- return(1);
- for(lk = old->sentinel->next; lk != old->sentinel; lk = lk->next) {
- if (0 !=xmlListInsert(cur, lk->data)) {
- xmlListDelete(cur);
- return (1);
- }
- }
- return (0);
-}
-/* xmlListUnique() */
-/* xmlListSwap */
-#define bottom_list
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/nanoftp.c b/external/libxml2_android/jni/libxml2/nanoftp.c
deleted file mode 100644
index 2135ab9b..00000000
--- a/external/libxml2_android/jni/libxml2/nanoftp.c
+++ /dev/null
@@ -1,2121 +0,0 @@
-/*
- * nanoftp.c: basic FTP client support
- *
- * Reference: RFC 959
- */
-
-#ifdef TESTING
-#define STANDALONE
-#define HAVE_STDLIB_H
-#define HAVE_UNISTD_H
-#define HAVE_SYS_SOCKET_H
-#define HAVE_NETINET_IN_H
-#define HAVE_NETDB_H
-#define HAVE_SYS_TIME_H
-#else /* TESTING */
-#define NEED_SOCKETS
-#endif /* TESTING */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_FTP_ENABLED
-#include <string.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/xmlerror.h>
-#include <libxml/uri.h>
-#include <libxml/nanoftp.h>
-#include <libxml/globals.h>
-
-/* #define DEBUG_FTP 1 */
-#ifdef STANDALONE
-#ifndef DEBUG_FTP
-#define DEBUG_FTP 1
-#endif
-#endif
-
-
-#if defined(__MINGW32__) || defined(_WIN32_WCE)
-#ifndef _WINSOCKAPI_
-#define _WINSOCKAPI_
-#endif
-#include <wsockcompat.h>
-#include <winsock2.h>
-#undef XML_SOCKLEN_T
-#define XML_SOCKLEN_T unsigned int
-#endif
-
-/**
- * A couple portability macros
- */
-#ifndef _WINSOCKAPI_
-#if !defined(__BEOS__) || defined(__HAIKU__)
-#define closesocket(s) close(s)
-#endif
-#endif
-
-#ifdef __BEOS__
-#ifndef PF_INET
-#define PF_INET AF_INET
-#endif
-#endif
-
-#ifdef _AIX
-#ifdef HAVE_BROKEN_SS_FAMILY
-#define ss_family __ss_family
-#endif
-#endif
-
-#ifndef XML_SOCKLEN_T
-#define XML_SOCKLEN_T unsigned int
-#endif
-
-#define FTP_COMMAND_OK 200
-#define FTP_SYNTAX_ERROR 500
-#define FTP_GET_PASSWD 331
-#define FTP_BUF_SIZE 1024
-
-#define XML_NANO_MAX_URLBUF 4096
-
-typedef struct xmlNanoFTPCtxt {
- char *protocol; /* the protocol name */
- char *hostname; /* the host name */
- int port; /* the port */
- char *path; /* the path within the URL */
- char *user; /* user string */
- char *passwd; /* passwd string */
-#ifdef SUPPORT_IP6
- struct sockaddr_storage ftpAddr; /* this is large enough to hold IPv6 address*/
-#else
- struct sockaddr_in ftpAddr; /* the socket address struct */
-#endif
- int passive; /* currently we support only passive !!! */
- SOCKET controlFd; /* the file descriptor for the control socket */
- SOCKET dataFd; /* the file descriptor for the data socket */
- int state; /* WRITE / READ / CLOSED */
- int returnValue; /* the protocol return value */
- /* buffer for data received from the control connection */
- char controlBuf[FTP_BUF_SIZE + 1];
- int controlBufIndex;
- int controlBufUsed;
- int controlBufAnswer;
-} xmlNanoFTPCtxt, *xmlNanoFTPCtxtPtr;
-
-static int initialized = 0;
-static char *proxy = NULL; /* the proxy name if any */
-static int proxyPort = 0; /* the proxy port if any */
-static char *proxyUser = NULL; /* user for proxy authentication */
-static char *proxyPasswd = NULL;/* passwd for proxy authentication */
-static int proxyType = 0; /* uses TYPE or a@b ? */
-
-#ifdef SUPPORT_IP6
-static
-int have_ipv6(void) {
- int s;
-
- s = socket (AF_INET6, SOCK_STREAM, 0);
- if (s != -1) {
- close (s);
- return (1);
- }
- return (0);
-}
-#endif
-
-/**
- * xmlFTPErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlFTPErrMemory(const char *extra)
-{
- __xmlSimpleError(XML_FROM_FTP, XML_ERR_NO_MEMORY, NULL, NULL, extra);
-}
-
-/**
- * xmlNanoFTPInit:
- *
- * Initialize the FTP protocol layer.
- * Currently it just checks for proxy informations,
- * and get the hostname
- */
-
-void
-xmlNanoFTPInit(void) {
- const char *env;
-#ifdef _WINSOCKAPI_
- WSADATA wsaData;
-#endif
-
- if (initialized)
- return;
-
-#ifdef _WINSOCKAPI_
- if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
- return;
-#endif
-
- proxyPort = 21;
- env = getenv("no_proxy");
- if (env && ((env[0] == '*' ) && (env[1] == 0)))
- return;
- env = getenv("ftp_proxy");
- if (env != NULL) {
- xmlNanoFTPScanProxy(env);
- } else {
- env = getenv("FTP_PROXY");
- if (env != NULL) {
- xmlNanoFTPScanProxy(env);
- }
- }
- env = getenv("ftp_proxy_user");
- if (env != NULL) {
- proxyUser = xmlMemStrdup(env);
- }
- env = getenv("ftp_proxy_password");
- if (env != NULL) {
- proxyPasswd = xmlMemStrdup(env);
- }
- initialized = 1;
-}
-
-/**
- * xmlNanoFTPCleanup:
- *
- * Cleanup the FTP protocol layer. This cleanup proxy informations.
- */
-
-void
-xmlNanoFTPCleanup(void) {
- if (proxy != NULL) {
- xmlFree(proxy);
- proxy = NULL;
- }
- if (proxyUser != NULL) {
- xmlFree(proxyUser);
- proxyUser = NULL;
- }
- if (proxyPasswd != NULL) {
- xmlFree(proxyPasswd);
- proxyPasswd = NULL;
- }
-#ifdef _WINSOCKAPI_
- if (initialized)
- WSACleanup();
-#endif
- initialized = 0;
-}
-
-/**
- * xmlNanoFTPProxy:
- * @host: the proxy host name
- * @port: the proxy port
- * @user: the proxy user name
- * @passwd: the proxy password
- * @type: the type of proxy 1 for using SITE, 2 for USER a@b
- *
- * Setup the FTP proxy informations.
- * This can also be done by using ftp_proxy ftp_proxy_user and
- * ftp_proxy_password environment variables.
- */
-
-void
-xmlNanoFTPProxy(const char *host, int port, const char *user,
- const char *passwd, int type) {
- if (proxy != NULL) {
- xmlFree(proxy);
- proxy = NULL;
- }
- if (proxyUser != NULL) {
- xmlFree(proxyUser);
- proxyUser = NULL;
- }
- if (proxyPasswd != NULL) {
- xmlFree(proxyPasswd);
- proxyPasswd = NULL;
- }
- if (host)
- proxy = xmlMemStrdup(host);
- if (user)
- proxyUser = xmlMemStrdup(user);
- if (passwd)
- proxyPasswd = xmlMemStrdup(passwd);
- proxyPort = port;
- proxyType = type;
-}
-
-/**
- * xmlNanoFTPScanURL:
- * @ctx: an FTP context
- * @URL: The URL used to initialize the context
- *
- * (Re)Initialize an FTP context by parsing the URL and finding
- * the protocol host port and path it indicates.
- */
-
-static void
-xmlNanoFTPScanURL(void *ctx, const char *URL) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- xmlURIPtr uri;
-
- /*
- * Clear any existing data from the context
- */
- if (ctxt->protocol != NULL) {
- xmlFree(ctxt->protocol);
- ctxt->protocol = NULL;
- }
- if (ctxt->hostname != NULL) {
- xmlFree(ctxt->hostname);
- ctxt->hostname = NULL;
- }
- if (ctxt->path != NULL) {
- xmlFree(ctxt->path);
- ctxt->path = NULL;
- }
- if (URL == NULL) return;
-
- uri = xmlParseURIRaw(URL, 1);
- if (uri == NULL)
- return;
-
- if ((uri->scheme == NULL) || (uri->server == NULL)) {
- xmlFreeURI(uri);
- return;
- }
-
- ctxt->protocol = xmlMemStrdup(uri->scheme);
- ctxt->hostname = xmlMemStrdup(uri->server);
- if (uri->path != NULL)
- ctxt->path = xmlMemStrdup(uri->path);
- else
- ctxt->path = xmlMemStrdup("/");
- if (uri->port != 0)
- ctxt->port = uri->port;
-
- if (uri->user != NULL) {
- char *cptr;
- if ((cptr=strchr(uri->user, ':')) == NULL)
- ctxt->user = xmlMemStrdup(uri->user);
- else {
- ctxt->user = (char *)xmlStrndup((xmlChar *)uri->user,
- (cptr - uri->user));
- ctxt->passwd = xmlMemStrdup(cptr+1);
- }
- }
-
- xmlFreeURI(uri);
-
-}
-
-/**
- * xmlNanoFTPUpdateURL:
- * @ctx: an FTP context
- * @URL: The URL used to update the context
- *
- * Update an FTP context by parsing the URL and finding
- * new path it indicates. If there is an error in the
- * protocol, hostname, port or other information, the
- * error is raised. It indicates a new connection has to
- * be established.
- *
- * Returns 0 if Ok, -1 in case of error (other host).
- */
-
-int
-xmlNanoFTPUpdateURL(void *ctx, const char *URL) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- xmlURIPtr uri;
-
- if (URL == NULL)
- return(-1);
- if (ctxt == NULL)
- return(-1);
- if (ctxt->protocol == NULL)
- return(-1);
- if (ctxt->hostname == NULL)
- return(-1);
-
- uri = xmlParseURIRaw(URL, 1);
- if (uri == NULL)
- return(-1);
-
- if ((uri->scheme == NULL) || (uri->server == NULL)) {
- xmlFreeURI(uri);
- return(-1);
- }
- if ((strcmp(ctxt->protocol, uri->scheme)) ||
- (strcmp(ctxt->hostname, uri->server)) ||
- ((uri->port != 0) && (ctxt->port != uri->port))) {
- xmlFreeURI(uri);
- return(-1);
- }
-
- if (uri->port != 0)
- ctxt->port = uri->port;
-
- if (ctxt->path != NULL) {
- xmlFree(ctxt->path);
- ctxt->path = NULL;
- }
-
- if (uri->path == NULL)
- ctxt->path = xmlMemStrdup("/");
- else
- ctxt->path = xmlMemStrdup(uri->path);
-
- xmlFreeURI(uri);
-
- return(0);
-}
-
-/**
- * xmlNanoFTPScanProxy:
- * @URL: The proxy URL used to initialize the proxy context
- *
- * (Re)Initialize the FTP Proxy context by parsing the URL and finding
- * the protocol host port it indicates.
- * Should be like ftp://myproxy/ or ftp://myproxy:3128/
- * A NULL URL cleans up proxy informations.
- */
-
-void
-xmlNanoFTPScanProxy(const char *URL) {
- xmlURIPtr uri;
-
- if (proxy != NULL) {
- xmlFree(proxy);
- proxy = NULL;
- }
- proxyPort = 0;
-
-#ifdef DEBUG_FTP
- if (URL == NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Removing FTP proxy info\n");
- else
- xmlGenericError(xmlGenericErrorContext,
- "Using FTP proxy %s\n", URL);
-#endif
- if (URL == NULL) return;
-
- uri = xmlParseURIRaw(URL, 1);
- if ((uri == NULL) || (uri->scheme == NULL) ||
- (strcmp(uri->scheme, "ftp")) || (uri->server == NULL)) {
- __xmlIOErr(XML_FROM_FTP, XML_FTP_URL_SYNTAX, "Syntax Error\n");
- if (uri != NULL)
- xmlFreeURI(uri);
- return;
- }
-
- proxy = xmlMemStrdup(uri->server);
- if (uri->port != 0)
- proxyPort = uri->port;
-
- xmlFreeURI(uri);
-}
-
-/**
- * xmlNanoFTPNewCtxt:
- * @URL: The URL used to initialize the context
- *
- * Allocate and initialize a new FTP context.
- *
- * Returns an FTP context or NULL in case of error.
- */
-
-void*
-xmlNanoFTPNewCtxt(const char *URL) {
- xmlNanoFTPCtxtPtr ret;
- char *unescaped;
-
- ret = (xmlNanoFTPCtxtPtr) xmlMalloc(sizeof(xmlNanoFTPCtxt));
- if (ret == NULL) {
- xmlFTPErrMemory("allocating FTP context");
- return(NULL);
- }
-
- memset(ret, 0, sizeof(xmlNanoFTPCtxt));
- ret->port = 21;
- ret->passive = 1;
- ret->returnValue = 0;
- ret->controlBufIndex = 0;
- ret->controlBufUsed = 0;
- ret->controlFd = INVALID_SOCKET;
-
- unescaped = xmlURIUnescapeString(URL, 0, NULL);
- if (unescaped != NULL) {
- xmlNanoFTPScanURL(ret, unescaped);
- xmlFree(unescaped);
- } else if (URL != NULL)
- xmlNanoFTPScanURL(ret, URL);
-
- return(ret);
-}
-
-/**
- * xmlNanoFTPFreeCtxt:
- * @ctx: an FTP context
- *
- * Frees the context after closing the connection.
- */
-
-void
-xmlNanoFTPFreeCtxt(void * ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- if (ctxt == NULL) return;
- if (ctxt->hostname != NULL) xmlFree(ctxt->hostname);
- if (ctxt->protocol != NULL) xmlFree(ctxt->protocol);
- if (ctxt->path != NULL) xmlFree(ctxt->path);
- ctxt->passive = 1;
- if (ctxt->controlFd != INVALID_SOCKET) closesocket(ctxt->controlFd);
- ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlBufIndex = -1;
- ctxt->controlBufUsed = -1;
- xmlFree(ctxt);
-}
-
-/**
- * xmlNanoFTPParseResponse:
- * @buf: the buffer containing the response
- * @len: the buffer length
- *
- * Parsing of the server answer, we just extract the code.
- *
- * returns 0 for errors
- * +XXX for last line of response
- * -XXX for response to be continued
- */
-static int
-xmlNanoFTPParseResponse(char *buf, int len) {
- int val = 0;
-
- if (len < 3) return(-1);
- if ((*buf >= '0') && (*buf <= '9'))
- val = val * 10 + (*buf - '0');
- else
- return(0);
- buf++;
- if ((*buf >= '0') && (*buf <= '9'))
- val = val * 10 + (*buf - '0');
- else
- return(0);
- buf++;
- if ((*buf >= '0') && (*buf <= '9'))
- val = val * 10 + (*buf - '0');
- else
- return(0);
- buf++;
- if (*buf == '-')
- return(-val);
- return(val);
-}
-
-/**
- * xmlNanoFTPGetMore:
- * @ctx: an FTP context
- *
- * Read more information from the FTP control connection
- * Returns the number of bytes read, < 0 indicates an error
- */
-static int
-xmlNanoFTPGetMore(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- int len;
- int size;
-
- if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1);
-
- if ((ctxt->controlBufIndex < 0) || (ctxt->controlBufIndex > FTP_BUF_SIZE)) {
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext,
- "xmlNanoFTPGetMore : controlBufIndex = %d\n",
- ctxt->controlBufIndex);
-#endif
- return(-1);
- }
-
- if ((ctxt->controlBufUsed < 0) || (ctxt->controlBufUsed > FTP_BUF_SIZE)) {
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext,
- "xmlNanoFTPGetMore : controlBufUsed = %d\n",
- ctxt->controlBufUsed);
-#endif
- return(-1);
- }
- if (ctxt->controlBufIndex > ctxt->controlBufUsed) {
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext,
- "xmlNanoFTPGetMore : controlBufIndex > controlBufUsed %d > %d\n",
- ctxt->controlBufIndex, ctxt->controlBufUsed);
-#endif
- return(-1);
- }
-
- /*
- * First pack the control buffer
- */
- if (ctxt->controlBufIndex > 0) {
- memmove(&ctxt->controlBuf[0], &ctxt->controlBuf[ctxt->controlBufIndex],
- ctxt->controlBufUsed - ctxt->controlBufIndex);
- ctxt->controlBufUsed -= ctxt->controlBufIndex;
- ctxt->controlBufIndex = 0;
- }
- size = FTP_BUF_SIZE - ctxt->controlBufUsed;
- if (size == 0) {
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext,
- "xmlNanoFTPGetMore : buffer full %d \n", ctxt->controlBufUsed);
-#endif
- return(0);
- }
-
- /*
- * Read the amount left on the control connection
- */
- if ((len = recv(ctxt->controlFd, &ctxt->controlBuf[ctxt->controlBufIndex],
- size, 0)) < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "recv failed");
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext,
- "xmlNanoFTPGetMore : read %d [%d - %d]\n", len,
- ctxt->controlBufUsed, ctxt->controlBufUsed + len);
-#endif
- ctxt->controlBufUsed += len;
- ctxt->controlBuf[ctxt->controlBufUsed] = 0;
-
- return(len);
-}
-
-/**
- * xmlNanoFTPReadResponse:
- * @ctx: an FTP context
- *
- * Read the response from the FTP server after a command.
- * Returns the code number
- */
-static int
-xmlNanoFTPReadResponse(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char *ptr, *end;
- int len;
- int res = -1, cur = -1;
-
- if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1);
-
-get_more:
- /*
- * Assumes everything up to controlBuf[controlBufIndex] has been read
- * and analyzed.
- */
- len = xmlNanoFTPGetMore(ctx);
- if (len < 0) {
- return(-1);
- }
- if ((ctxt->controlBufUsed == 0) && (len == 0)) {
- return(-1);
- }
- ptr = &ctxt->controlBuf[ctxt->controlBufIndex];
- end = &ctxt->controlBuf[ctxt->controlBufUsed];
-
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext,
- "\n<<<\n%s\n--\n", ptr);
-#endif
- while (ptr < end) {
- cur = xmlNanoFTPParseResponse(ptr, end - ptr);
- if (cur > 0) {
- /*
- * Successfully scanned the control code, scratch
- * till the end of the line, but keep the index to be
- * able to analyze the result if needed.
- */
- res = cur;
- ptr += 3;
- ctxt->controlBufAnswer = ptr - ctxt->controlBuf;
- while ((ptr < end) && (*ptr != '\n')) ptr++;
- if (*ptr == '\n') ptr++;
- if (*ptr == '\r') ptr++;
- break;
- }
- while ((ptr < end) && (*ptr != '\n')) ptr++;
- if (ptr >= end) {
- ctxt->controlBufIndex = ctxt->controlBufUsed;
- goto get_more;
- }
- if (*ptr != '\r') ptr++;
- }
-
- if (res < 0) goto get_more;
- ctxt->controlBufIndex = ptr - ctxt->controlBuf;
-#ifdef DEBUG_FTP
- ptr = &ctxt->controlBuf[ctxt->controlBufIndex];
- xmlGenericError(xmlGenericErrorContext, "\n---\n%s\n--\n", ptr);
-#endif
-
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "Got %d\n", res);
-#endif
- return(res / 100);
-}
-
-/**
- * xmlNanoFTPGetResponse:
- * @ctx: an FTP context
- *
- * Get the response from the FTP server after a command.
- * Returns the code number
- */
-
-int
-xmlNanoFTPGetResponse(void *ctx) {
- int res;
-
- res = xmlNanoFTPReadResponse(ctx);
-
- return(res);
-}
-
-/**
- * xmlNanoFTPCheckResponse:
- * @ctx: an FTP context
- *
- * Check if there is a response from the FTP server after a command.
- * Returns the code number, or 0
- */
-
-int
-xmlNanoFTPCheckResponse(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- fd_set rfd;
- struct timeval tv;
-
- if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1);
- tv.tv_sec = 0;
- tv.tv_usec = 0;
- FD_ZERO(&rfd);
- FD_SET(ctxt->controlFd, &rfd);
- switch(select(ctxt->controlFd + 1, &rfd, NULL, NULL, &tv)) {
- case 0:
- return(0);
- case -1:
- __xmlIOErr(XML_FROM_FTP, 0, "select");
- return(-1);
-
- }
-
- return(xmlNanoFTPReadResponse(ctx));
-}
-
-/**
- * Send the user authentication
- */
-
-static int
-xmlNanoFTPSendUser(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[200];
- int len;
- int res;
-
- if (ctxt->user == NULL)
- snprintf(buf, sizeof(buf), "USER anonymous\r\n");
- else
- snprintf(buf, sizeof(buf), "USER %s\r\n", ctxt->user);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- return(res);
- }
- return(0);
-}
-
-/**
- * Send the password authentication
- */
-
-static int
-xmlNanoFTPSendPasswd(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[200];
- int len;
- int res;
-
- if (ctxt->passwd == NULL)
- snprintf(buf, sizeof(buf), "PASS anonymous@\r\n");
- else
- snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- return(res);
- }
- return(0);
-}
-
-/**
- * xmlNanoFTPQuit:
- * @ctx: an FTP context
- *
- * Send a QUIT command to the server
- *
- * Returns -1 in case of error, 0 otherwise
- */
-
-
-int
-xmlNanoFTPQuit(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[200];
- int len, res;
-
- if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1);
-
- snprintf(buf, sizeof(buf), "QUIT\r\n");
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf); /* Just to be consistent, even though we know it can't have a % in it */
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- return(res);
- }
- return(0);
-}
-
-/**
- * xmlNanoFTPConnect:
- * @ctx: an FTP context
- *
- * Tries to open a control connection
- *
- * Returns -1 in case of error, 0 otherwise
- */
-
-int
-xmlNanoFTPConnect(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- struct hostent *hp;
- int port;
- int res;
- int addrlen = sizeof (struct sockaddr_in);
-
- if (ctxt == NULL)
- return(-1);
- if (ctxt->hostname == NULL)
- return(-1);
-
- /*
- * do the blocking DNS query.
- */
- if (proxy) {
- port = proxyPort;
- } else {
- port = ctxt->port;
- }
- if (port == 0)
- port = 21;
-
- memset (&ctxt->ftpAddr, 0, sizeof(ctxt->ftpAddr));
-
-#ifdef SUPPORT_IP6
- if (have_ipv6 ()) {
- struct addrinfo hints, *tmp, *result;
-
- result = NULL;
- memset (&hints, 0, sizeof(hints));
- hints.ai_socktype = SOCK_STREAM;
-
- if (proxy) {
- if (getaddrinfo (proxy, NULL, &hints, &result) != 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "getaddrinfo failed");
- return (-1);
- }
- }
- else
- if (getaddrinfo (ctxt->hostname, NULL, &hints, &result) != 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "getaddrinfo failed");
- return (-1);
- }
-
- for (tmp = result; tmp; tmp = tmp->ai_next)
- if (tmp->ai_family == AF_INET || tmp->ai_family == AF_INET6)
- break;
-
- if (!tmp) {
- if (result)
- freeaddrinfo (result);
- __xmlIOErr(XML_FROM_FTP, 0, "getaddrinfo failed");
- return (-1);
- }
- if (tmp->ai_addrlen > sizeof(ctxt->ftpAddr)) {
- if (result)
- freeaddrinfo (result);
- __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname address mismatch");
- return (-1);
- }
- if (tmp->ai_family == AF_INET6) {
- memcpy (&ctxt->ftpAddr, tmp->ai_addr, tmp->ai_addrlen);
- ((struct sockaddr_in6 *) &ctxt->ftpAddr)->sin6_port = htons (port);
- ctxt->controlFd = socket (AF_INET6, SOCK_STREAM, 0);
- }
- else {
- memcpy (&ctxt->ftpAddr, tmp->ai_addr, tmp->ai_addrlen);
- ((struct sockaddr_in *) &ctxt->ftpAddr)->sin_port = htons (port);
- ctxt->controlFd = socket (AF_INET, SOCK_STREAM, 0);
- }
- addrlen = tmp->ai_addrlen;
- freeaddrinfo (result);
- }
- else
-#endif
- {
- if (proxy)
- hp = gethostbyname (GETHOSTBYNAME_ARG_CAST proxy);
- else
- hp = gethostbyname (GETHOSTBYNAME_ARG_CAST ctxt->hostname);
- if (hp == NULL) {
- __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname failed");
- return (-1);
- }
- if ((unsigned int) hp->h_length >
- sizeof(((struct sockaddr_in *)&ctxt->ftpAddr)->sin_addr)) {
- __xmlIOErr(XML_FROM_FTP, 0, "gethostbyname address mismatch");
- return (-1);
- }
-
- /*
- * Prepare the socket
- */
- ((struct sockaddr_in *)&ctxt->ftpAddr)->sin_family = AF_INET;
- memcpy (&((struct sockaddr_in *)&ctxt->ftpAddr)->sin_addr,
- hp->h_addr_list[0], hp->h_length);
- ((struct sockaddr_in *)&ctxt->ftpAddr)->sin_port =
- (unsigned short)htons ((unsigned short)port);
- ctxt->controlFd = socket (AF_INET, SOCK_STREAM, 0);
- addrlen = sizeof (struct sockaddr_in);
- }
-
- if (ctxt->controlFd == INVALID_SOCKET) {
- __xmlIOErr(XML_FROM_FTP, 0, "socket failed");
- return(-1);
- }
-
- /*
- * Do the connect.
- */
- if (connect(ctxt->controlFd, (struct sockaddr *) &ctxt->ftpAddr,
- addrlen) < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "Failed to create a connection");
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
-
- /*
- * Wait for the HELLO from the server.
- */
- res = xmlNanoFTPGetResponse(ctxt);
- if (res != 2) {
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
-
- /*
- * State diagram for the login operation on the FTP server
- *
- * Reference: RFC 959
- *
- * 1
- * +---+ USER +---+------------->+---+
- * | B |---------->| W | 2 ---->| E |
- * +---+ +---+------ | -->+---+
- * | | | | |
- * 3 | | 4,5 | | |
- * -------------- ----- | | |
- * | | | | |
- * | | | | |
- * | --------- |
- * | 1| | | |
- * V | | | |
- * +---+ PASS +---+ 2 | ------>+---+
- * | |---------->| W |------------->| S |
- * +---+ +---+ ---------->+---+
- * | | | | |
- * 3 | |4,5| | |
- * -------------- -------- |
- * | | | | |
- * | | | | |
- * | -----------
- * | 1,3| | | |
- * V | 2| | |
- * +---+ ACCT +---+-- | ----->+---+
- * | |---------->| W | 4,5 -------->| F |
- * +---+ +---+------------->+---+
- *
- * Of course in case of using a proxy this get really nasty and is not
- * standardized at all :-(
- */
- if (proxy) {
- int len;
- char buf[400];
-
- if (proxyUser != NULL) {
- /*
- * We need proxy auth
- */
- snprintf(buf, sizeof(buf), "USER %s\r\n", proxyUser);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->controlFd);
- ctxt->controlFd = INVALID_SOCKET;
- return(res);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- switch (res) {
- case 2:
- if (proxyPasswd == NULL)
- break;
- case 3:
- if (proxyPasswd != NULL)
- snprintf(buf, sizeof(buf), "PASS %s\r\n", proxyPasswd);
- else
- snprintf(buf, sizeof(buf), "PASS anonymous@\r\n");
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->controlFd);
- ctxt->controlFd = INVALID_SOCKET;
- return(res);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- if (res > 3) {
- closesocket(ctxt->controlFd);
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- break;
- case 1:
- break;
- case 4:
- case 5:
- case -1:
- default:
- closesocket(ctxt->controlFd);
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- }
-
- /*
- * We assume we don't need more authentication to the proxy
- * and that it succeeded :-\
- */
- switch (proxyType) {
- case 0:
- /* we will try in sequence */
- case 1:
- /* Using SITE command */
- snprintf(buf, sizeof(buf), "SITE %s\r\n", ctxt->hostname);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(res);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- if (res == 2) {
- /* we assume it worked :-\ 1 is error for SITE command */
- proxyType = 1;
- break;
- }
- if (proxyType == 1) {
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- case 2:
- /* USER user@host command */
- if (ctxt->user == NULL)
- snprintf(buf, sizeof(buf), "USER anonymous@%s\r\n",
- ctxt->hostname);
- else
- snprintf(buf, sizeof(buf), "USER %s@%s\r\n",
- ctxt->user, ctxt->hostname);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(res);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- if ((res == 1) || (res == 2)) {
- /* we assume it worked :-\ */
- proxyType = 2;
- return(0);
- }
- if (ctxt->passwd == NULL)
- snprintf(buf, sizeof(buf), "PASS anonymous@\r\n");
- else
- snprintf(buf, sizeof(buf), "PASS %s\r\n", ctxt->passwd);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(res);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- if ((res == 1) || (res == 2)) {
- /* we assume it worked :-\ */
- proxyType = 2;
- return(0);
- }
- if (proxyType == 2) {
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- case 3:
- /*
- * If you need support for other Proxy authentication scheme
- * send the code or at least the sequence in use.
- */
- default:
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- }
- /*
- * Non-proxy handling.
- */
- res = xmlNanoFTPSendUser(ctxt);
- if (res < 0) {
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- switch (res) {
- case 2:
- return(0);
- case 3:
- break;
- case 1:
- case 4:
- case 5:
- case -1:
- default:
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- res = xmlNanoFTPSendPasswd(ctxt);
- if (res < 0) {
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- switch (res) {
- case 2:
- break;
- case 3:
- __xmlIOErr(XML_FROM_FTP, XML_FTP_ACCNT,
- "FTP server asking for ACCNT on anonymous\n");
- case 1:
- case 4:
- case 5:
- case -1:
- default:
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
-
- return(0);
-}
-
-/**
- * xmlNanoFTPConnectTo:
- * @server: an FTP server name
- * @port: the port (use 21 if 0)
- *
- * Tries to open a control connection to the given server/port
- *
- * Returns an fTP context or NULL if it failed
- */
-
-void*
-xmlNanoFTPConnectTo(const char *server, int port) {
- xmlNanoFTPCtxtPtr ctxt;
- int res;
-
- xmlNanoFTPInit();
- if (server == NULL)
- return(NULL);
- if (port <= 0)
- return(NULL);
- ctxt = (xmlNanoFTPCtxtPtr) xmlNanoFTPNewCtxt(NULL);
- if (ctxt == NULL)
- return(NULL);
- ctxt->hostname = xmlMemStrdup(server);
- if (ctxt->hostname == NULL) {
- xmlNanoFTPFreeCtxt(ctxt);
- return(NULL);
- }
- if (port != 0)
- ctxt->port = port;
- res = xmlNanoFTPConnect(ctxt);
- if (res < 0) {
- xmlNanoFTPFreeCtxt(ctxt);
- return(NULL);
- }
- return(ctxt);
-}
-
-/**
- * xmlNanoFTPCwd:
- * @ctx: an FTP context
- * @directory: a directory on the server
- *
- * Tries to change the remote directory
- *
- * Returns -1 incase of error, 1 if CWD worked, 0 if it failed
- */
-
-int
-xmlNanoFTPCwd(void *ctx, const char *directory) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[400];
- int len;
- int res;
-
- if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1);
- if (directory == NULL) return 0;
-
- /*
- * Expected response code for CWD:
- *
- * CWD
- * 250
- * 500, 501, 502, 421, 530, 550
- */
- snprintf(buf, sizeof(buf), "CWD %s\r\n", directory);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- return(res);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- if (res == 4) {
- return(-1);
- }
- if (res == 2) return(1);
- if (res == 5) {
- return(0);
- }
- return(0);
-}
-
-/**
- * xmlNanoFTPDele:
- * @ctx: an FTP context
- * @file: a file or directory on the server
- *
- * Tries to delete an item (file or directory) from server
- *
- * Returns -1 incase of error, 1 if DELE worked, 0 if it failed
- */
-
-int
-xmlNanoFTPDele(void *ctx, const char *file) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[400];
- int len;
- int res;
-
- if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET) ||
- (file == NULL)) return(-1);
-
- /*
- * Expected response code for DELE:
- *
- * DELE
- * 250
- * 450, 550
- * 500, 501, 502, 421, 530
- */
-
- snprintf(buf, sizeof(buf), "DELE %s\r\n", file);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- return(res);
- }
- res = xmlNanoFTPGetResponse(ctxt);
- if (res == 4) {
- return(-1);
- }
- if (res == 2) return(1);
- if (res == 5) {
- return(0);
- }
- return(0);
-}
-/**
- * xmlNanoFTPGetConnection:
- * @ctx: an FTP context
- *
- * Try to open a data connection to the server. Currently only
- * passive mode is supported.
- *
- * Returns -1 incase of error, 0 otherwise
- */
-
-SOCKET
-xmlNanoFTPGetConnection(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[200], *cur;
- int len, i;
- int res;
- unsigned char ad[6], *adp, *portp;
- unsigned int temp[6];
-#ifdef SUPPORT_IP6
- struct sockaddr_storage dataAddr;
-#else
- struct sockaddr_in dataAddr;
-#endif
- XML_SOCKLEN_T dataAddrLen;
-
- if (ctxt == NULL) return INVALID_SOCKET;
-
- memset (&dataAddr, 0, sizeof(dataAddr));
-#ifdef SUPPORT_IP6
- if ((ctxt->ftpAddr).ss_family == AF_INET6) {
- ctxt->dataFd = socket (AF_INET6, SOCK_STREAM, IPPROTO_TCP);
- ((struct sockaddr_in6 *)&dataAddr)->sin6_family = AF_INET6;
- dataAddrLen = sizeof(struct sockaddr_in6);
- } else
-#endif
- {
- ctxt->dataFd = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
- ((struct sockaddr_in *)&dataAddr)->sin_family = AF_INET;
- dataAddrLen = sizeof (struct sockaddr_in);
- }
-
- if (ctxt->dataFd == INVALID_SOCKET) {
- __xmlIOErr(XML_FROM_FTP, 0, "socket failed");
- return INVALID_SOCKET;
- }
-
- if (ctxt->passive) {
-#ifdef SUPPORT_IP6
- if ((ctxt->ftpAddr).ss_family == AF_INET6)
- snprintf (buf, sizeof(buf), "EPSV\r\n");
- else
-#endif
- snprintf (buf, sizeof(buf), "PASV\r\n");
- len = strlen (buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- res = xmlNanoFTPReadResponse(ctx);
- if (res != 2) {
- if (res == 5) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- } else {
- /*
- * retry with an active connection
- */
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- ctxt->passive = 0;
- }
- }
- cur = &ctxt->controlBuf[ctxt->controlBufAnswer];
- while (((*cur < '0') || (*cur > '9')) && *cur != '\0') cur++;
-#ifdef SUPPORT_IP6
- if ((ctxt->ftpAddr).ss_family == AF_INET6) {
- if (sscanf (cur, "%u", &temp[0]) != 1) {
- __xmlIOErr(XML_FROM_FTP, XML_FTP_EPSV_ANSWER,
- "Invalid answer to EPSV\n");
- if (ctxt->dataFd != INVALID_SOCKET) {
- closesocket (ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- }
- return INVALID_SOCKET;
- }
- memcpy (&((struct sockaddr_in6 *)&dataAddr)->sin6_addr, &((struct sockaddr_in6 *)&ctxt->ftpAddr)->sin6_addr, sizeof(struct in6_addr));
- ((struct sockaddr_in6 *)&dataAddr)->sin6_port = htons (temp[0]);
- }
- else
-#endif
- {
- if (sscanf (cur, "%u,%u,%u,%u,%u,%u", &temp[0], &temp[1], &temp[2],
- &temp[3], &temp[4], &temp[5]) != 6) {
- __xmlIOErr(XML_FROM_FTP, XML_FTP_PASV_ANSWER,
- "Invalid answer to PASV\n");
- if (ctxt->dataFd != INVALID_SOCKET) {
- closesocket (ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- }
- return INVALID_SOCKET;
- }
- for (i=0; i<6; i++) ad[i] = (unsigned char) (temp[i] & 0xff);
- memcpy (&((struct sockaddr_in *)&dataAddr)->sin_addr, &ad[0], 4);
- memcpy (&((struct sockaddr_in *)&dataAddr)->sin_port, &ad[4], 2);
- }
-
- if (connect(ctxt->dataFd, (struct sockaddr *) &dataAddr, dataAddrLen) < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "Failed to create a data connection");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- } else {
- getsockname(ctxt->dataFd, (struct sockaddr *) &dataAddr, &dataAddrLen);
-#ifdef SUPPORT_IP6
- if ((ctxt->ftpAddr).ss_family == AF_INET6)
- ((struct sockaddr_in6 *)&dataAddr)->sin6_port = 0;
- else
-#endif
- ((struct sockaddr_in *)&dataAddr)->sin_port = 0;
-
- if (bind(ctxt->dataFd, (struct sockaddr *) &dataAddr, dataAddrLen) < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "bind failed");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- getsockname(ctxt->dataFd, (struct sockaddr *) &dataAddr, &dataAddrLen);
-
- if (listen(ctxt->dataFd, 1) < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "listen failed");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
-#ifdef SUPPORT_IP6
- if ((ctxt->ftpAddr).ss_family == AF_INET6) {
- char buf6[INET6_ADDRSTRLEN];
- inet_ntop (AF_INET6, &((struct sockaddr_in6 *)&dataAddr)->sin6_addr,
- buf6, INET6_ADDRSTRLEN);
- adp = (unsigned char *) buf6;
- portp = (unsigned char *) &((struct sockaddr_in6 *)&dataAddr)->sin6_port;
- snprintf (buf, sizeof(buf), "EPRT |2|%s|%s|\r\n", adp, portp);
- } else
-#endif
- {
- adp = (unsigned char *) &((struct sockaddr_in *)&dataAddr)->sin_addr;
- portp = (unsigned char *) &((struct sockaddr_in *)&dataAddr)->sin_port;
- snprintf (buf, sizeof(buf), "PORT %d,%d,%d,%d,%d,%d\r\n",
- adp[0] & 0xff, adp[1] & 0xff, adp[2] & 0xff, adp[3] & 0xff,
- portp[0] & 0xff, portp[1] & 0xff);
- }
-
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
-
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- res = xmlNanoFTPGetResponse(ctxt);
- if (res != 2) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- }
- return(ctxt->dataFd);
-
-}
-
-/**
- * xmlNanoFTPCloseConnection:
- * @ctx: an FTP context
- *
- * Close the data connection from the server
- *
- * Returns -1 incase of error, 0 otherwise
- */
-
-int
-xmlNanoFTPCloseConnection(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- int res;
- fd_set rfd, efd;
- struct timeval tv;
-
- if ((ctxt == NULL) || (ctxt->controlFd == INVALID_SOCKET)) return(-1);
-
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- tv.tv_sec = 15;
- tv.tv_usec = 0;
- FD_ZERO(&rfd);
- FD_SET(ctxt->controlFd, &rfd);
- FD_ZERO(&efd);
- FD_SET(ctxt->controlFd, &efd);
- res = select(ctxt->controlFd + 1, &rfd, NULL, &efd, &tv);
- if (res < 0) {
-#ifdef DEBUG_FTP
- perror("select");
-#endif
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- if (res == 0) {
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext,
- "xmlNanoFTPCloseConnection: timeout\n");
-#endif
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- } else {
- res = xmlNanoFTPGetResponse(ctxt);
- if (res != 2) {
- closesocket(ctxt->controlFd); ctxt->controlFd = INVALID_SOCKET;
- return(-1);
- }
- }
- return(0);
-}
-
-/**
- * xmlNanoFTPParseList:
- * @list: some data listing received from the server
- * @callback: the user callback
- * @userData: the user callback data
- *
- * Parse at most one entry from the listing.
- *
- * Returns -1 incase of error, the length of data parsed otherwise
- */
-
-static int
-xmlNanoFTPParseList(const char *list, ftpListCallback callback, void *userData) {
- const char *cur = list;
- char filename[151];
- char attrib[11];
- char owner[11];
- char group[11];
- char month[4];
- int year = 0;
- int minute = 0;
- int hour = 0;
- int day = 0;
- unsigned long size = 0;
- int links = 0;
- int i;
-
- if (!strncmp(cur, "total", 5)) {
- cur += 5;
- while (*cur == ' ') cur++;
- while ((*cur >= '0') && (*cur <= '9'))
- links = (links * 10) + (*cur++ - '0');
- while ((*cur == ' ') || (*cur == '\n') || (*cur == '\r'))
- cur++;
- return(cur - list);
- } else if (*list == '+') {
- return(0);
- } else {
- while ((*cur == ' ') || (*cur == '\n') || (*cur == '\r'))
- cur++;
- if (*cur == 0) return(0);
- i = 0;
- while (*cur != ' ') {
- if (i < 10)
- attrib[i++] = *cur;
- cur++;
- if (*cur == 0) return(0);
- }
- attrib[10] = 0;
- while (*cur == ' ') cur++;
- if (*cur == 0) return(0);
- while ((*cur >= '0') && (*cur <= '9'))
- links = (links * 10) + (*cur++ - '0');
- while (*cur == ' ') cur++;
- if (*cur == 0) return(0);
- i = 0;
- while (*cur != ' ') {
- if (i < 10)
- owner[i++] = *cur;
- cur++;
- if (*cur == 0) return(0);
- }
- owner[i] = 0;
- while (*cur == ' ') cur++;
- if (*cur == 0) return(0);
- i = 0;
- while (*cur != ' ') {
- if (i < 10)
- group[i++] = *cur;
- cur++;
- if (*cur == 0) return(0);
- }
- group[i] = 0;
- while (*cur == ' ') cur++;
- if (*cur == 0) return(0);
- while ((*cur >= '0') && (*cur <= '9'))
- size = (size * 10) + (*cur++ - '0');
- while (*cur == ' ') cur++;
- if (*cur == 0) return(0);
- i = 0;
- while (*cur != ' ') {
- if (i < 3)
- month[i++] = *cur;
- cur++;
- if (*cur == 0) return(0);
- }
- month[i] = 0;
- while (*cur == ' ') cur++;
- if (*cur == 0) return(0);
- while ((*cur >= '0') && (*cur <= '9'))
- day = (day * 10) + (*cur++ - '0');
- while (*cur == ' ') cur++;
- if (*cur == 0) return(0);
- if ((cur[1] == 0) || (cur[2] == 0)) return(0);
- if ((cur[1] == ':') || (cur[2] == ':')) {
- while ((*cur >= '0') && (*cur <= '9'))
- hour = (hour * 10) + (*cur++ - '0');
- if (*cur == ':') cur++;
- while ((*cur >= '0') && (*cur <= '9'))
- minute = (minute * 10) + (*cur++ - '0');
- } else {
- while ((*cur >= '0') && (*cur <= '9'))
- year = (year * 10) + (*cur++ - '0');
- }
- while (*cur == ' ') cur++;
- if (*cur == 0) return(0);
- i = 0;
- while ((*cur != '\n') && (*cur != '\r')) {
- if (i < 150)
- filename[i++] = *cur;
- cur++;
- if (*cur == 0) return(0);
- }
- filename[i] = 0;
- if ((*cur != '\n') && (*cur != '\r'))
- return(0);
- while ((*cur == '\n') || (*cur == '\r'))
- cur++;
- }
- if (callback != NULL) {
- callback(userData, filename, attrib, owner, group, size, links,
- year, month, day, hour, minute);
- }
- return(cur - list);
-}
-
-/**
- * xmlNanoFTPList:
- * @ctx: an FTP context
- * @callback: the user callback
- * @userData: the user callback data
- * @filename: optional files to list
- *
- * Do a listing on the server. All files info are passed back
- * in the callbacks.
- *
- * Returns -1 incase of error, 0 otherwise
- */
-
-int
-xmlNanoFTPList(void *ctx, ftpListCallback callback, void *userData,
- const char *filename) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[4096 + 1];
- int len, res;
- int indx = 0, base;
- fd_set rfd, efd;
- struct timeval tv;
-
- if (ctxt == NULL) return (-1);
- if (filename == NULL) {
- if (xmlNanoFTPCwd(ctxt, ctxt->path) < 1)
- return(-1);
- ctxt->dataFd = xmlNanoFTPGetConnection(ctxt);
- if (ctxt->dataFd == INVALID_SOCKET)
- return(-1);
- snprintf(buf, sizeof(buf), "LIST -L\r\n");
- } else {
- if (filename[0] != '/') {
- if (xmlNanoFTPCwd(ctxt, ctxt->path) < 1)
- return(-1);
- }
- ctxt->dataFd = xmlNanoFTPGetConnection(ctxt);
- if (ctxt->dataFd == INVALID_SOCKET)
- return(-1);
- snprintf(buf, sizeof(buf), "LIST -L %s\r\n", filename);
- }
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return(res);
- }
- res = xmlNanoFTPReadResponse(ctxt);
- if (res != 1) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return(-res);
- }
-
- do {
- tv.tv_sec = 1;
- tv.tv_usec = 0;
- FD_ZERO(&rfd);
- FD_SET(ctxt->dataFd, &rfd);
- FD_ZERO(&efd);
- FD_SET(ctxt->dataFd, &efd);
- res = select(ctxt->dataFd + 1, &rfd, NULL, &efd, &tv);
- if (res < 0) {
-#ifdef DEBUG_FTP
- perror("select");
-#endif
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return(-1);
- }
- if (res == 0) {
- res = xmlNanoFTPCheckResponse(ctxt);
- if (res < 0) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- ctxt->dataFd = INVALID_SOCKET;
- return(-1);
- }
- if (res == 2) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return(0);
- }
-
- continue;
- }
-
- if ((len = recv(ctxt->dataFd, &buf[indx], sizeof(buf) - (indx + 1), 0)) < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "recv");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- ctxt->dataFd = INVALID_SOCKET;
- return(-1);
- }
-#ifdef DEBUG_FTP
- write(1, &buf[indx], len);
-#endif
- indx += len;
- buf[indx] = 0;
- base = 0;
- do {
- res = xmlNanoFTPParseList(&buf[base], callback, userData);
- base += res;
- } while (res > 0);
-
- memmove(&buf[0], &buf[base], indx - base);
- indx -= base;
- } while (len != 0);
- xmlNanoFTPCloseConnection(ctxt);
- return(0);
-}
-
-/**
- * xmlNanoFTPGetSocket:
- * @ctx: an FTP context
- * @filename: the file to retrieve (or NULL if path is in context).
- *
- * Initiate fetch of the given file from the server.
- *
- * Returns the socket for the data connection, or <0 in case of error
- */
-
-
-SOCKET
-xmlNanoFTPGetSocket(void *ctx, const char *filename) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[300];
- int res, len;
- if (ctx == NULL)
- return INVALID_SOCKET;
- if ((filename == NULL) && (ctxt->path == NULL))
- return INVALID_SOCKET;
- ctxt->dataFd = xmlNanoFTPGetConnection(ctxt);
- if (ctxt->dataFd == INVALID_SOCKET)
- return INVALID_SOCKET;
-
- snprintf(buf, sizeof(buf), "TYPE I\r\n");
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- res = xmlNanoFTPReadResponse(ctxt);
- if (res != 2) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- if (filename == NULL)
- snprintf(buf, sizeof(buf), "RETR %s\r\n", ctxt->path);
- else
- snprintf(buf, sizeof(buf), "RETR %s\r\n", filename);
- buf[sizeof(buf) - 1] = 0;
- len = strlen(buf);
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "%s", buf);
-#endif
- res = send(ctxt->controlFd, SEND_ARG2_CAST buf, len, 0);
- if (res < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "send failed");
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- res = xmlNanoFTPReadResponse(ctxt);
- if (res != 1) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return INVALID_SOCKET;
- }
- return(ctxt->dataFd);
-}
-
-/**
- * xmlNanoFTPGet:
- * @ctx: an FTP context
- * @callback: the user callback
- * @userData: the user callback data
- * @filename: the file to retrieve
- *
- * Fetch the given file from the server. All data are passed back
- * in the callbacks. The last callback has a size of 0 block.
- *
- * Returns -1 incase of error, 0 otherwise
- */
-
-int
-xmlNanoFTPGet(void *ctx, ftpDataCallback callback, void *userData,
- const char *filename) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
- char buf[4096];
- int len = 0, res;
- fd_set rfd;
- struct timeval tv;
-
- if (ctxt == NULL) return(-1);
- if ((filename == NULL) && (ctxt->path == NULL))
- return(-1);
- if (callback == NULL)
- return(-1);
- if (xmlNanoFTPGetSocket(ctxt, filename) == INVALID_SOCKET)
- return(-1);
-
- do {
- tv.tv_sec = 1;
- tv.tv_usec = 0;
- FD_ZERO(&rfd);
- FD_SET(ctxt->dataFd, &rfd);
- res = select(ctxt->dataFd + 1, &rfd, NULL, NULL, &tv);
- if (res < 0) {
-#ifdef DEBUG_FTP
- perror("select");
-#endif
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return(-1);
- }
- if (res == 0) {
- res = xmlNanoFTPCheckResponse(ctxt);
- if (res < 0) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- ctxt->dataFd = INVALID_SOCKET;
- return(-1);
- }
- if (res == 2) {
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return(0);
- }
-
- continue;
- }
- if ((len = recv(ctxt->dataFd, buf, sizeof(buf), 0)) < 0) {
- __xmlIOErr(XML_FROM_FTP, 0, "recv failed");
- callback(userData, buf, len);
- closesocket(ctxt->dataFd); ctxt->dataFd = INVALID_SOCKET;
- return(-1);
- }
- callback(userData, buf, len);
- } while (len != 0);
-
- return(xmlNanoFTPCloseConnection(ctxt));
-}
-
-/**
- * xmlNanoFTPRead:
- * @ctx: the FTP context
- * @dest: a buffer
- * @len: the buffer length
- *
- * This function tries to read @len bytes from the existing FTP connection
- * and saves them in @dest. This is a blocking call.
- *
- * Returns the number of byte read. 0 is an indication of an end of connection.
- * -1 indicates a parameter error.
- */
-int
-xmlNanoFTPRead(void *ctx, void *dest, int len) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
-
- if (ctx == NULL) return(-1);
- if (ctxt->dataFd == INVALID_SOCKET) return(0);
- if (dest == NULL) return(-1);
- if (len <= 0) return(0);
-
- len = recv(ctxt->dataFd, dest, len, 0);
- if (len <= 0) {
- if (len < 0)
- __xmlIOErr(XML_FROM_FTP, 0, "recv failed");
- xmlNanoFTPCloseConnection(ctxt);
- }
-#ifdef DEBUG_FTP
- xmlGenericError(xmlGenericErrorContext, "Recvd %d bytes\n", len);
-#endif
- return(len);
-}
-
-/**
- * xmlNanoFTPOpen:
- * @URL: the URL to the resource
- *
- * Start to fetch the given ftp:// resource
- *
- * Returns an FTP context, or NULL
- */
-
-void*
-xmlNanoFTPOpen(const char *URL) {
- xmlNanoFTPCtxtPtr ctxt;
- SOCKET sock;
-
- xmlNanoFTPInit();
- if (URL == NULL) return(NULL);
- if (strncmp("ftp://", URL, 6)) return(NULL);
-
- ctxt = (xmlNanoFTPCtxtPtr) xmlNanoFTPNewCtxt(URL);
- if (ctxt == NULL) return(NULL);
- if (xmlNanoFTPConnect(ctxt) < 0) {
- xmlNanoFTPFreeCtxt(ctxt);
- return(NULL);
- }
- sock = xmlNanoFTPGetSocket(ctxt, ctxt->path);
- if (sock == INVALID_SOCKET) {
- xmlNanoFTPFreeCtxt(ctxt);
- return(NULL);
- }
- return(ctxt);
-}
-
-/**
- * xmlNanoFTPClose:
- * @ctx: an FTP context
- *
- * Close the connection and both control and transport
- *
- * Returns -1 incase of error, 0 otherwise
- */
-
-int
-xmlNanoFTPClose(void *ctx) {
- xmlNanoFTPCtxtPtr ctxt = (xmlNanoFTPCtxtPtr) ctx;
-
- if (ctxt == NULL)
- return(-1);
-
- if (ctxt->dataFd != INVALID_SOCKET) {
- closesocket(ctxt->dataFd);
- ctxt->dataFd = INVALID_SOCKET;
- }
- if (ctxt->controlFd != INVALID_SOCKET) {
- xmlNanoFTPQuit(ctxt);
- closesocket(ctxt->controlFd);
- ctxt->controlFd = INVALID_SOCKET;
- }
- xmlNanoFTPFreeCtxt(ctxt);
- return(0);
-}
-
-#ifdef STANDALONE
-/************************************************************************
- * *
- * Basic test in Standalone mode *
- * *
- ************************************************************************/
-static
-void ftpList(void *userData, const char *filename, const char* attrib,
- const char *owner, const char *group, unsigned long size, int links,
- int year, const char *month, int day, int hour, int minute) {
- xmlGenericError(xmlGenericErrorContext,
- "%s %s %s %ld %s\n", attrib, owner, group, size, filename);
-}
-static
-void ftpData(void *userData, const char *data, int len) {
- if (userData == NULL) return;
- if (len <= 0) {
- fclose((FILE*)userData);
- return;
- }
- fwrite(data, len, 1, (FILE*)userData);
-}
-
-int main(int argc, char **argv) {
- void *ctxt;
- FILE *output;
- char *tstfile = NULL;
-
- xmlNanoFTPInit();
- if (argc > 1) {
- ctxt = xmlNanoFTPNewCtxt(argv[1]);
- if (xmlNanoFTPConnect(ctxt) < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Couldn't connect to %s\n", argv[1]);
- exit(1);
- }
- if (argc > 2)
- tstfile = argv[2];
- } else
- ctxt = xmlNanoFTPConnectTo("localhost", 0);
- if (ctxt == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Couldn't connect to localhost\n");
- exit(1);
- }
- xmlNanoFTPList(ctxt, ftpList, NULL, tstfile);
- output = fopen("/tmp/tstdata", "w");
- if (output != NULL) {
- if (xmlNanoFTPGet(ctxt, ftpData, (void *) output, tstfile) < 0)
- xmlGenericError(xmlGenericErrorContext,
- "Failed to get file\n");
-
- }
- xmlNanoFTPClose(ctxt);
- xmlMemoryDump();
- exit(0);
-}
-#endif /* STANDALONE */
-#else /* !LIBXML_FTP_ENABLED */
-#ifdef STANDALONE
-#include <stdio.h>
-int main(int argc, char **argv) {
- xmlGenericError(xmlGenericErrorContext,
- "%s : FTP support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* STANDALONE */
-#endif /* LIBXML_FTP_ENABLED */
-#define bottom_nanoftp
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/nanohttp.c b/external/libxml2_android/jni/libxml2/nanohttp.c
deleted file mode 100644
index 373425de..00000000
--- a/external/libxml2_android/jni/libxml2/nanohttp.c
+++ /dev/null
@@ -1,1890 +0,0 @@
-/*
- * nanohttp.c: minimalist HTTP GET implementation to fetch external subsets.
- * focuses on size, streamability, reentrancy and portability
- *
- * This is clearly not a general purpose HTTP implementation
- * If you look for one, check:
- * http://www.w3.org/Library/
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define NEED_SOCKETS
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_HTTP_ENABLED
-#include <string.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-#ifdef HAVE_NETDB_H
-#include <netdb.h>
-#endif
-#ifdef HAVE_RESOLV_H
-#ifdef HAVE_ARPA_NAMESER_H
-#include <arpa/nameser.h>
-#endif
-#include <resolv.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifndef HAVE_POLL_H
-#ifdef HAVE_SYS_SELECT_H
-#include <sys/select.h>
-#endif
-#else
-#include <poll.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-
-
-#ifdef VMS
-#include <stropts>
-#define XML_SOCKLEN_T unsigned int
-#endif
-
-#if defined(__MINGW32__) || defined(_WIN32_WCE)
-#ifndef _WINSOCKAPI_
-#define _WINSOCKAPI_
-#endif
-#include <wsockcompat.h>
-#include <winsock2.h>
-#undef XML_SOCKLEN_T
-#define XML_SOCKLEN_T unsigned int
-#endif
-
-#include <libxml/globals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h> /* for xmlStr(n)casecmp() */
-#include <libxml/nanohttp.h>
-#include <libxml/globals.h>
-#include <libxml/uri.h>
-
-/**
- * A couple portability macros
- */
-#ifndef _WINSOCKAPI_
-#if !defined(__BEOS__) || defined(__HAIKU__)
-#define closesocket(s) close(s)
-#endif
-#define SOCKET int
-#define INVALID_SOCKET (-1)
-#endif
-
-#ifdef __BEOS__
-#ifndef PF_INET
-#define PF_INET AF_INET
-#endif
-#endif
-
-#ifndef XML_SOCKLEN_T
-#define XML_SOCKLEN_T unsigned int
-#endif
-
-#ifdef STANDALONE
-#define DEBUG_HTTP
-#define xmlStrncasecmp(a, b, n) strncasecmp((char *)a, (char *)b, n)
-#define xmlStrcasecmpi(a, b) strcasecmp((char *)a, (char *)b)
-#endif
-
-#define XML_NANO_HTTP_MAX_REDIR 10
-
-#define XML_NANO_HTTP_CHUNK 4096
-
-#define XML_NANO_HTTP_CLOSED 0
-#define XML_NANO_HTTP_WRITE 1
-#define XML_NANO_HTTP_READ 2
-#define XML_NANO_HTTP_NONE 4
-
-typedef struct xmlNanoHTTPCtxt {
- char *protocol; /* the protocol name */
- char *hostname; /* the host name */
- int port; /* the port */
- char *path; /* the path within the URL */
- char *query; /* the query string */
- SOCKET fd; /* the file descriptor for the socket */
- int state; /* WRITE / READ / CLOSED */
- char *out; /* buffer sent (zero terminated) */
- char *outptr; /* index within the buffer sent */
- char *in; /* the receiving buffer */
- char *content; /* the start of the content */
- char *inptr; /* the next byte to read from network */
- char *inrptr; /* the next byte to give back to the client */
- int inlen; /* len of the input buffer */
- int last; /* return code for last operation */
- int returnValue; /* the protocol return value */
- int version; /* the protocol version */
- int ContentLength; /* specified content length from HTTP header */
- char *contentType; /* the MIME type for the input */
- char *location; /* the new URL in case of redirect */
- char *authHeader; /* contents of {WWW,Proxy}-Authenticate header */
- char *encoding; /* encoding extracted from the contentType */
- char *mimeType; /* Mime-Type extracted from the contentType */
-#ifdef HAVE_ZLIB_H
- z_stream *strm; /* Zlib stream object */
- int usesGzip; /* "Content-Encoding: gzip" was detected */
-#endif
-} xmlNanoHTTPCtxt, *xmlNanoHTTPCtxtPtr;
-
-static int initialized = 0;
-static char *proxy = NULL; /* the proxy name if any */
-static int proxyPort; /* the proxy port if any */
-static unsigned int timeout = 60;/* the select() timeout in seconds */
-
-static int xmlNanoHTTPFetchContent( void * ctx, char ** ptr, int * len );
-
-/**
- * xmlHTTPErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlHTTPErrMemory(const char *extra)
-{
- __xmlSimpleError(XML_FROM_HTTP, XML_ERR_NO_MEMORY, NULL, NULL, extra);
-}
-
-/**
- * A portability function
- */
-static int socket_errno(void) {
-#ifdef _WINSOCKAPI_
- return(WSAGetLastError());
-#else
- return(errno);
-#endif
-}
-
-#ifdef SUPPORT_IP6
-static
-int have_ipv6(void) {
- SOCKET s;
-
- s = socket (AF_INET6, SOCK_STREAM, 0);
- if (s != INVALID_SOCKET) {
- close (s);
- return (1);
- }
- return (0);
-}
-#endif
-
-/**
- * xmlNanoHTTPInit:
- *
- * Initialize the HTTP protocol layer.
- * Currently it just checks for proxy informations
- */
-
-void
-xmlNanoHTTPInit(void) {
- const char *env;
-#ifdef _WINSOCKAPI_
- WSADATA wsaData;
-#endif
-
- if (initialized)
- return;
-
-#ifdef _WINSOCKAPI_
- if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0)
- return;
-#endif
-
- if (proxy == NULL) {
- proxyPort = 80;
- env = getenv("no_proxy");
- if (env && ((env[0] == '*') && (env[1] == 0)))
- goto done;
- env = getenv("http_proxy");
- if (env != NULL) {
- xmlNanoHTTPScanProxy(env);
- goto done;
- }
- env = getenv("HTTP_PROXY");
- if (env != NULL) {
- xmlNanoHTTPScanProxy(env);
- goto done;
- }
- }
-done:
- initialized = 1;
-}
-
-/**
- * xmlNanoHTTPCleanup:
- *
- * Cleanup the HTTP protocol layer.
- */
-
-void
-xmlNanoHTTPCleanup(void) {
- if (proxy != NULL) {
- xmlFree(proxy);
- proxy = NULL;
- }
-#ifdef _WINSOCKAPI_
- if (initialized)
- WSACleanup();
-#endif
- initialized = 0;
- return;
-}
-
-/**
- * xmlNanoHTTPScanURL:
- * @ctxt: an HTTP context
- * @URL: The URL used to initialize the context
- *
- * (Re)Initialize an HTTP context by parsing the URL and finding
- * the protocol host port and path it indicates.
- */
-
-static void
-xmlNanoHTTPScanURL(xmlNanoHTTPCtxtPtr ctxt, const char *URL) {
- xmlURIPtr uri;
- int len;
-
- /*
- * Clear any existing data from the context
- */
- if (ctxt->protocol != NULL) {
- xmlFree(ctxt->protocol);
- ctxt->protocol = NULL;
- }
- if (ctxt->hostname != NULL) {
- xmlFree(ctxt->hostname);
- ctxt->hostname = NULL;
- }
- if (ctxt->path != NULL) {
- xmlFree(ctxt->path);
- ctxt->path = NULL;
- }
- if (ctxt->query != NULL) {
- xmlFree(ctxt->query);
- ctxt->query = NULL;
- }
- if (URL == NULL) return;
-
- uri = xmlParseURIRaw(URL, 1);
- if (uri == NULL)
- return;
-
- if ((uri->scheme == NULL) || (uri->server == NULL)) {
- xmlFreeURI(uri);
- return;
- }
-
- ctxt->protocol = xmlMemStrdup(uri->scheme);
- /* special case of IPv6 addresses, the [] need to be removed */
- if ((uri->server != NULL) && (*uri->server == '[')) {
- len = strlen(uri->server);
- if ((len > 2) && (uri->server[len - 1] == ']')) {
- ctxt->hostname = (char *) xmlCharStrndup(uri->server + 1, len -2);
- } else
- ctxt->hostname = xmlMemStrdup(uri->server);
- } else
- ctxt->hostname = xmlMemStrdup(uri->server);
- if (uri->path != NULL)
- ctxt->path = xmlMemStrdup(uri->path);
- else
- ctxt->path = xmlMemStrdup("/");
- if (uri->query != NULL)
- ctxt->query = xmlMemStrdup(uri->query);
- if (uri->port != 0)
- ctxt->port = uri->port;
-
- xmlFreeURI(uri);
-}
-
-/**
- * xmlNanoHTTPScanProxy:
- * @URL: The proxy URL used to initialize the proxy context
- *
- * (Re)Initialize the HTTP Proxy context by parsing the URL and finding
- * the protocol host port it indicates.
- * Should be like http://myproxy/ or http://myproxy:3128/
- * A NULL URL cleans up proxy informations.
- */
-
-void
-xmlNanoHTTPScanProxy(const char *URL) {
- xmlURIPtr uri;
-
- if (proxy != NULL) {
- xmlFree(proxy);
- proxy = NULL;
- }
- proxyPort = 0;
-
-#ifdef DEBUG_HTTP
- if (URL == NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Removing HTTP proxy info\n");
- else
- xmlGenericError(xmlGenericErrorContext,
- "Using HTTP proxy %s\n", URL);
-#endif
- if (URL == NULL) return;
-
- uri = xmlParseURIRaw(URL, 1);
- if ((uri == NULL) || (uri->scheme == NULL) ||
- (strcmp(uri->scheme, "http")) || (uri->server == NULL)) {
- __xmlIOErr(XML_FROM_HTTP, XML_HTTP_URL_SYNTAX, "Syntax Error\n");
- if (uri != NULL)
- xmlFreeURI(uri);
- return;
- }
-
- proxy = xmlMemStrdup(uri->server);
- if (uri->port != 0)
- proxyPort = uri->port;
-
- xmlFreeURI(uri);
-}
-
-/**
- * xmlNanoHTTPNewCtxt:
- * @URL: The URL used to initialize the context
- *
- * Allocate and initialize a new HTTP context.
- *
- * Returns an HTTP context or NULL in case of error.
- */
-
-static xmlNanoHTTPCtxtPtr
-xmlNanoHTTPNewCtxt(const char *URL) {
- xmlNanoHTTPCtxtPtr ret;
-
- ret = (xmlNanoHTTPCtxtPtr) xmlMalloc(sizeof(xmlNanoHTTPCtxt));
- if (ret == NULL) {
- xmlHTTPErrMemory("allocating context");
- return(NULL);
- }
-
- memset(ret, 0, sizeof(xmlNanoHTTPCtxt));
- ret->port = 80;
- ret->returnValue = 0;
- ret->fd = INVALID_SOCKET;
- ret->ContentLength = -1;
-
- xmlNanoHTTPScanURL(ret, URL);
-
- return(ret);
-}
-
-/**
- * xmlNanoHTTPFreeCtxt:
- * @ctxt: an HTTP context
- *
- * Frees the context after closing the connection.
- */
-
-static void
-xmlNanoHTTPFreeCtxt(xmlNanoHTTPCtxtPtr ctxt) {
- if (ctxt == NULL) return;
- if (ctxt->hostname != NULL) xmlFree(ctxt->hostname);
- if (ctxt->protocol != NULL) xmlFree(ctxt->protocol);
- if (ctxt->path != NULL) xmlFree(ctxt->path);
- if (ctxt->query != NULL) xmlFree(ctxt->query);
- if (ctxt->out != NULL) xmlFree(ctxt->out);
- if (ctxt->in != NULL) xmlFree(ctxt->in);
- if (ctxt->contentType != NULL) xmlFree(ctxt->contentType);
- if (ctxt->encoding != NULL) xmlFree(ctxt->encoding);
- if (ctxt->mimeType != NULL) xmlFree(ctxt->mimeType);
- if (ctxt->location != NULL) xmlFree(ctxt->location);
- if (ctxt->authHeader != NULL) xmlFree(ctxt->authHeader);
-#ifdef HAVE_ZLIB_H
- if (ctxt->strm != NULL) {
- inflateEnd(ctxt->strm);
- xmlFree(ctxt->strm);
- }
-#endif
-
- ctxt->state = XML_NANO_HTTP_NONE;
- if (ctxt->fd != INVALID_SOCKET) closesocket(ctxt->fd);
- ctxt->fd = INVALID_SOCKET;
- xmlFree(ctxt);
-}
-
-/**
- * xmlNanoHTTPSend:
- * @ctxt: an HTTP context
- *
- * Send the input needed to initiate the processing on the server side
- * Returns number of bytes sent or -1 on error.
- */
-
-static int
-xmlNanoHTTPSend(xmlNanoHTTPCtxtPtr ctxt, const char *xmt_ptr, int outlen)
-{
- int total_sent = 0;
-#ifdef HAVE_POLL_H
- struct pollfd p;
-#else
- struct timeval tv;
- fd_set wfd;
-#endif
-
- if ((ctxt->state & XML_NANO_HTTP_WRITE) && (xmt_ptr != NULL)) {
- while (total_sent < outlen) {
- int nsent = send(ctxt->fd, SEND_ARG2_CAST (xmt_ptr + total_sent),
- outlen - total_sent, 0);
-
- if (nsent > 0)
- total_sent += nsent;
- else if ((nsent == -1) &&
-#if defined(EAGAIN) && EAGAIN != EWOULDBLOCK
- (socket_errno() != EAGAIN) &&
-#endif
- (socket_errno() != EWOULDBLOCK)) {
- __xmlIOErr(XML_FROM_HTTP, 0, "send failed\n");
- if (total_sent == 0)
- total_sent = -1;
- break;
- } else {
- /*
- * No data sent
- * Since non-blocking sockets are used, wait for
- * socket to be writable or default timeout prior
- * to retrying.
- */
-#ifndef HAVE_POLL_H
-#ifndef _WINSOCKAPI_
- if (ctxt->fd > FD_SETSIZE)
- return -1;
-#endif
-
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
- FD_ZERO(&wfd);
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable: 4018)
-#endif
- FD_SET(ctxt->fd, &wfd);
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
- (void) select(ctxt->fd + 1, NULL, &wfd, NULL, &tv);
-#else
- p.fd = ctxt->fd;
- p.events = POLLOUT;
- (void) poll(&p, 1, timeout * 1000);
-#endif /* !HAVE_POLL_H */
- }
- }
- }
-
- return total_sent;
-}
-
-/**
- * xmlNanoHTTPRecv:
- * @ctxt: an HTTP context
- *
- * Read information coming from the HTTP connection.
- * This is a blocking call (but it blocks in select(), not read()).
- *
- * Returns the number of byte read or -1 in case of error.
- */
-
-static int
-xmlNanoHTTPRecv(xmlNanoHTTPCtxtPtr ctxt)
-{
-#ifdef HAVE_POLL_H
- struct pollfd p;
-#else
- fd_set rfd;
- struct timeval tv;
-#endif
-
-
- while (ctxt->state & XML_NANO_HTTP_READ) {
- if (ctxt->in == NULL) {
- ctxt->in = (char *) xmlMallocAtomic(65000 * sizeof(char));
- if (ctxt->in == NULL) {
- xmlHTTPErrMemory("allocating input");
- ctxt->last = -1;
- return (-1);
- }
- ctxt->inlen = 65000;
- ctxt->inptr = ctxt->content = ctxt->inrptr = ctxt->in;
- }
- if (ctxt->inrptr > ctxt->in + XML_NANO_HTTP_CHUNK) {
- int delta = ctxt->inrptr - ctxt->in;
- int len = ctxt->inptr - ctxt->inrptr;
-
- memmove(ctxt->in, ctxt->inrptr, len);
- ctxt->inrptr -= delta;
- ctxt->content -= delta;
- ctxt->inptr -= delta;
- }
- if ((ctxt->in + ctxt->inlen) < (ctxt->inptr + XML_NANO_HTTP_CHUNK)) {
- int d_inptr = ctxt->inptr - ctxt->in;
- int d_content = ctxt->content - ctxt->in;
- int d_inrptr = ctxt->inrptr - ctxt->in;
- char *tmp_ptr = ctxt->in;
-
- ctxt->inlen *= 2;
- ctxt->in = (char *) xmlRealloc(tmp_ptr, ctxt->inlen);
- if (ctxt->in == NULL) {
- xmlHTTPErrMemory("allocating input buffer");
- xmlFree(tmp_ptr);
- ctxt->last = -1;
- return (-1);
- }
- ctxt->inptr = ctxt->in + d_inptr;
- ctxt->content = ctxt->in + d_content;
- ctxt->inrptr = ctxt->in + d_inrptr;
- }
- ctxt->last = recv(ctxt->fd, ctxt->inptr, XML_NANO_HTTP_CHUNK, 0);
- if (ctxt->last > 0) {
- ctxt->inptr += ctxt->last;
- return (ctxt->last);
- }
- if (ctxt->last == 0) {
- return (0);
- }
- if (ctxt->last == -1) {
- switch (socket_errno()) {
- case EINPROGRESS:
- case EWOULDBLOCK:
-#if defined(EAGAIN) && EAGAIN != EWOULDBLOCK
- case EAGAIN:
-#endif
- break;
-
- case ECONNRESET:
- case ESHUTDOWN:
- return (0);
-
- default:
- __xmlIOErr(XML_FROM_HTTP, 0, "recv failed\n");
- return (-1);
- }
- }
-#ifdef HAVE_POLL_H
- p.fd = ctxt->fd;
- p.events = POLLIN;
- if ((poll(&p, 1, timeout * 1000) < 1)
-#if defined(EINTR)
- && (errno != EINTR)
-#endif
- )
- return (0);
-#else /* !HAVE_POLL_H */
-#ifndef _WINSOCKAPI_
- if (ctxt->fd > FD_SETSIZE)
- return 0;
-#endif
-
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
- FD_ZERO(&rfd);
-
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable: 4018)
-#endif
-
- FD_SET(ctxt->fd, &rfd);
-
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
- if ((select(ctxt->fd + 1, &rfd, NULL, NULL, &tv) < 1)
-#if defined(EINTR)
- && (errno != EINTR)
-#endif
- )
- return (0);
-#endif /* !HAVE_POLL_H */
- }
- return (0);
-}
-
-/**
- * xmlNanoHTTPReadLine:
- * @ctxt: an HTTP context
- *
- * Read one line in the HTTP server output, usually for extracting
- * the HTTP protocol informations from the answer header.
- *
- * Returns a newly allocated string with a copy of the line, or NULL
- * which indicate the end of the input.
- */
-
-static char *
-xmlNanoHTTPReadLine(xmlNanoHTTPCtxtPtr ctxt) {
- char buf[4096];
- char *bp = buf;
- int rc;
-
- while (bp - buf < 4095) {
- if (ctxt->inrptr == ctxt->inptr) {
- if ( (rc = xmlNanoHTTPRecv(ctxt)) == 0) {
- if (bp == buf)
- return(NULL);
- else
- *bp = 0;
- return(xmlMemStrdup(buf));
- }
- else if ( rc == -1 ) {
- return ( NULL );
- }
- }
- *bp = *ctxt->inrptr++;
- if (*bp == '\n') {
- *bp = 0;
- return(xmlMemStrdup(buf));
- }
- if (*bp != '\r')
- bp++;
- }
- buf[4095] = 0;
- return(xmlMemStrdup(buf));
-}
-
-
-/**
- * xmlNanoHTTPScanAnswer:
- * @ctxt: an HTTP context
- * @line: an HTTP header line
- *
- * Try to extract useful informations from the server answer.
- * We currently parse and process:
- * - The HTTP revision/ return code
- * - The Content-Type, Mime-Type and charset used
- * - The Location for redirect processing.
- *
- * Returns -1 in case of failure, the file descriptor number otherwise
- */
-
-static void
-xmlNanoHTTPScanAnswer(xmlNanoHTTPCtxtPtr ctxt, const char *line) {
- const char *cur = line;
-
- if (line == NULL) return;
-
- if (!strncmp(line, "HTTP/", 5)) {
- int version = 0;
- int ret = 0;
-
- cur += 5;
- while ((*cur >= '0') && (*cur <= '9')) {
- version *= 10;
- version += *cur - '0';
- cur++;
- }
- if (*cur == '.') {
- cur++;
- if ((*cur >= '0') && (*cur <= '9')) {
- version *= 10;
- version += *cur - '0';
- cur++;
- }
- while ((*cur >= '0') && (*cur <= '9'))
- cur++;
- } else
- version *= 10;
- if ((*cur != ' ') && (*cur != '\t')) return;
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- if ((*cur < '0') || (*cur > '9')) return;
- while ((*cur >= '0') && (*cur <= '9')) {
- ret *= 10;
- ret += *cur - '0';
- cur++;
- }
- if ((*cur != 0) && (*cur != ' ') && (*cur != '\t')) return;
- ctxt->returnValue = ret;
- ctxt->version = version;
- } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"Content-Type:", 13)) {
- const xmlChar *charset, *last, *mime;
- cur += 13;
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- if (ctxt->contentType != NULL)
- xmlFree(ctxt->contentType);
- ctxt->contentType = xmlMemStrdup(cur);
- mime = (const xmlChar *) cur;
- last = mime;
- while ((*last != 0) && (*last != ' ') && (*last != '\t') &&
- (*last != ';') && (*last != ','))
- last++;
- if (ctxt->mimeType != NULL)
- xmlFree(ctxt->mimeType);
- ctxt->mimeType = (char *) xmlStrndup(mime, last - mime);
- charset = xmlStrstr(BAD_CAST ctxt->contentType, BAD_CAST "charset=");
- if (charset != NULL) {
- charset += 8;
- last = charset;
- while ((*last != 0) && (*last != ' ') && (*last != '\t') &&
- (*last != ';') && (*last != ','))
- last++;
- if (ctxt->encoding != NULL)
- xmlFree(ctxt->encoding);
- ctxt->encoding = (char *) xmlStrndup(charset, last - charset);
- }
- } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"ContentType:", 12)) {
- const xmlChar *charset, *last, *mime;
- cur += 12;
- if (ctxt->contentType != NULL) return;
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- ctxt->contentType = xmlMemStrdup(cur);
- mime = (const xmlChar *) cur;
- last = mime;
- while ((*last != 0) && (*last != ' ') && (*last != '\t') &&
- (*last != ';') && (*last != ','))
- last++;
- if (ctxt->mimeType != NULL)
- xmlFree(ctxt->mimeType);
- ctxt->mimeType = (char *) xmlStrndup(mime, last - mime);
- charset = xmlStrstr(BAD_CAST ctxt->contentType, BAD_CAST "charset=");
- if (charset != NULL) {
- charset += 8;
- last = charset;
- while ((*last != 0) && (*last != ' ') && (*last != '\t') &&
- (*last != ';') && (*last != ','))
- last++;
- if (ctxt->encoding != NULL)
- xmlFree(ctxt->encoding);
- ctxt->encoding = (char *) xmlStrndup(charset, last - charset);
- }
- } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"Location:", 9)) {
- cur += 9;
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- if (ctxt->location != NULL)
- xmlFree(ctxt->location);
- if (*cur == '/') {
- xmlChar *tmp_http = xmlStrdup(BAD_CAST "http://");
- xmlChar *tmp_loc =
- xmlStrcat(tmp_http, (const xmlChar *) ctxt->hostname);
- ctxt->location =
- (char *) xmlStrcat (tmp_loc, (const xmlChar *) cur);
- } else {
- ctxt->location = xmlMemStrdup(cur);
- }
- } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"WWW-Authenticate:", 17)) {
- cur += 17;
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- if (ctxt->authHeader != NULL)
- xmlFree(ctxt->authHeader);
- ctxt->authHeader = xmlMemStrdup(cur);
- } else if (!xmlStrncasecmp(BAD_CAST line, BAD_CAST"Proxy-Authenticate:", 19)) {
- cur += 19;
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- if (ctxt->authHeader != NULL)
- xmlFree(ctxt->authHeader);
- ctxt->authHeader = xmlMemStrdup(cur);
-#ifdef HAVE_ZLIB_H
- } else if ( !xmlStrncasecmp( BAD_CAST line, BAD_CAST"Content-Encoding:", 17) ) {
- cur += 17;
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- if ( !xmlStrncasecmp( BAD_CAST cur, BAD_CAST"gzip", 4) ) {
- ctxt->usesGzip = 1;
-
- ctxt->strm = xmlMalloc(sizeof(z_stream));
-
- if (ctxt->strm != NULL) {
- ctxt->strm->zalloc = Z_NULL;
- ctxt->strm->zfree = Z_NULL;
- ctxt->strm->opaque = Z_NULL;
- ctxt->strm->avail_in = 0;
- ctxt->strm->next_in = Z_NULL;
-
- inflateInit2( ctxt->strm, 31 );
- }
- }
-#endif
- } else if ( !xmlStrncasecmp( BAD_CAST line, BAD_CAST"Content-Length:", 15) ) {
- cur += 15;
- ctxt->ContentLength = strtol( cur, NULL, 10 );
- }
-}
-
-/**
- * xmlNanoHTTPConnectAttempt:
- * @addr: a socket address structure
- *
- * Attempt a connection to the given IP:port endpoint. It forces
- * non-blocking semantic on the socket, and allow 60 seconds for
- * the host to answer.
- *
- * Returns -1 in case of failure, the file descriptor number otherwise
- */
-
-static SOCKET
-xmlNanoHTTPConnectAttempt(struct sockaddr *addr)
-{
-#ifndef HAVE_POLL_H
- fd_set wfd;
-#ifdef _WINSOCKAPI_
- fd_set xfd;
-#endif
- struct timeval tv;
-#else /* !HAVE_POLL_H */
- struct pollfd p;
-#endif /* !HAVE_POLL_H */
- int status;
-
- int addrlen;
-
- SOCKET s;
-
-#ifdef SUPPORT_IP6
- if (addr->sa_family == AF_INET6) {
- s = socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP);
- addrlen = sizeof(struct sockaddr_in6);
- } else
-#endif
- {
- s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- addrlen = sizeof(struct sockaddr_in);
- }
- if (s == INVALID_SOCKET) {
-#ifdef DEBUG_HTTP
- perror("socket");
-#endif
- __xmlIOErr(XML_FROM_HTTP, 0, "socket failed\n");
- return INVALID_SOCKET;
- }
-#ifdef _WINSOCKAPI_
- {
- u_long one = 1;
-
- status = ioctlsocket(s, FIONBIO, &one) == SOCKET_ERROR ? -1 : 0;
- }
-#else /* _WINSOCKAPI_ */
-#if defined(VMS)
- {
- int enable = 1;
-
- status = ioctl(s, FIONBIO, &enable);
- }
-#else /* VMS */
-#if defined(__BEOS__) && !defined(__HAIKU__)
- {
- bool noblock = true;
-
- status =
- setsockopt(s, SOL_SOCKET, SO_NONBLOCK, &noblock,
- sizeof(noblock));
- }
-#else /* __BEOS__ */
- if ((status = fcntl(s, F_GETFL, 0)) != -1) {
-#ifdef O_NONBLOCK
- status |= O_NONBLOCK;
-#else /* O_NONBLOCK */
-#ifdef F_NDELAY
- status |= F_NDELAY;
-#endif /* F_NDELAY */
-#endif /* !O_NONBLOCK */
- status = fcntl(s, F_SETFL, status);
- }
- if (status < 0) {
-#ifdef DEBUG_HTTP
- perror("nonblocking");
-#endif
- __xmlIOErr(XML_FROM_HTTP, 0, "error setting non-blocking IO\n");
- closesocket(s);
- return INVALID_SOCKET;
- }
-#endif /* !__BEOS__ */
-#endif /* !VMS */
-#endif /* !_WINSOCKAPI_ */
-
- if (connect(s, addr, addrlen) == -1) {
- switch (socket_errno()) {
- case EINPROGRESS:
- case EWOULDBLOCK:
- break;
- default:
- __xmlIOErr(XML_FROM_HTTP, 0,
- "error connecting to HTTP server");
- closesocket(s);
- return INVALID_SOCKET;
- }
- }
-#ifndef HAVE_POLL_H
- tv.tv_sec = timeout;
- tv.tv_usec = 0;
-
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable: 4018)
-#endif
-#ifndef _WINSOCKAPI_
- if (s > FD_SETSIZE)
- return INVALID_SOCKET;
-#endif
- FD_ZERO(&wfd);
- FD_SET(s, &wfd);
-
-#ifdef _WINSOCKAPI_
- FD_ZERO(&xfd);
- FD_SET(s, &xfd);
-
- switch (select(s + 1, NULL, &wfd, &xfd, &tv))
-#else
- switch (select(s + 1, NULL, &wfd, NULL, &tv))
-#endif
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-
-#else /* !HAVE_POLL_H */
- p.fd = s;
- p.events = POLLOUT;
- switch (poll(&p, 1, timeout * 1000))
-#endif /* !HAVE_POLL_H */
-
- {
- case 0:
- /* Time out */
- __xmlIOErr(XML_FROM_HTTP, 0, "Connect attempt timed out");
- closesocket(s);
- return INVALID_SOCKET;
- case -1:
- /* Ermm.. ?? */
- __xmlIOErr(XML_FROM_HTTP, 0, "Connect failed");
- closesocket(s);
- return INVALID_SOCKET;
- }
-
-#ifndef HAVE_POLL_H
- if (FD_ISSET(s, &wfd)
-#ifdef _WINSOCKAPI_
- || FD_ISSET(s, &xfd)
-#endif
- )
-#else /* !HAVE_POLL_H */
- if (p.revents == POLLOUT)
-#endif /* !HAVE_POLL_H */
- {
- XML_SOCKLEN_T len;
-
- len = sizeof(status);
-#ifdef SO_ERROR
- if (getsockopt(s, SOL_SOCKET, SO_ERROR, (char *) &status, &len) <
- 0) {
- /* Solaris error code */
- __xmlIOErr(XML_FROM_HTTP, 0, "getsockopt failed\n");
- closesocket(s);
- return INVALID_SOCKET;
- }
-#endif
- if (status) {
- __xmlIOErr(XML_FROM_HTTP, 0,
- "Error connecting to remote host");
- closesocket(s);
- errno = status;
- return INVALID_SOCKET;
- }
- } else {
- /* pbm */
- __xmlIOErr(XML_FROM_HTTP, 0, "select failed\n");
- closesocket(s);
- return INVALID_SOCKET;
- }
-
- return (s);
-}
-
-/**
- * xmlNanoHTTPConnectHost:
- * @host: the host name
- * @port: the port number
- *
- * Attempt a connection to the given host:port endpoint. It tries
- * the multiple IP provided by the DNS if available.
- *
- * Returns -1 in case of failure, the file descriptor number otherwise
- */
-
-static SOCKET
-xmlNanoHTTPConnectHost(const char *host, int port)
-{
- struct hostent *h;
- struct sockaddr *addr = NULL;
- struct in_addr ia;
- struct sockaddr_in sockin;
-
-#ifdef SUPPORT_IP6
- struct in6_addr ia6;
- struct sockaddr_in6 sockin6;
-#endif
- int i;
- SOCKET s;
-
- memset (&sockin, 0, sizeof(sockin));
-#ifdef SUPPORT_IP6
- memset (&sockin6, 0, sizeof(sockin6));
-#endif
-
-#if !defined(HAVE_GETADDRINFO) && defined(SUPPORT_IP6) && defined(RES_USE_INET6)
- if (have_ipv6 ())
- {
- if (!(_res.options & RES_INIT))
- res_init();
- _res.options |= RES_USE_INET6;
- }
-#endif
-
-#if defined(HAVE_GETADDRINFO) && defined(SUPPORT_IP6) && !defined(_WIN32)
- if (have_ipv6 ())
-#endif
-#if defined(HAVE_GETADDRINFO) && (defined(SUPPORT_IP6) || defined(_WIN32))
- {
- int status;
- struct addrinfo hints, *res, *result;
-
- result = NULL;
- memset (&hints, 0,sizeof(hints));
- hints.ai_socktype = SOCK_STREAM;
-
- status = getaddrinfo (host, NULL, &hints, &result);
- if (status) {
- __xmlIOErr(XML_FROM_HTTP, 0, "getaddrinfo failed\n");
- return INVALID_SOCKET;
- }
-
- for (res = result; res; res = res->ai_next) {
- if (res->ai_family == AF_INET) {
- if (res->ai_addrlen > sizeof(sockin)) {
- __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n");
- freeaddrinfo (result);
- return INVALID_SOCKET;
- }
- memcpy (&sockin, res->ai_addr, res->ai_addrlen);
- sockin.sin_port = htons (port);
- addr = (struct sockaddr *)&sockin;
-#ifdef SUPPORT_IP6
- } else if (have_ipv6 () && (res->ai_family == AF_INET6)) {
- if (res->ai_addrlen > sizeof(sockin6)) {
- __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n");
- freeaddrinfo (result);
- return INVALID_SOCKET;
- }
- memcpy (&sockin6, res->ai_addr, res->ai_addrlen);
- sockin6.sin6_port = htons (port);
- addr = (struct sockaddr *)&sockin6;
-#endif
- } else
- continue; /* for */
-
- s = xmlNanoHTTPConnectAttempt (addr);
- if (s != INVALID_SOCKET) {
- freeaddrinfo (result);
- return (s);
- }
- }
-
- if (result)
- freeaddrinfo (result);
- }
-#endif
-#if defined(HAVE_GETADDRINFO) && defined(SUPPORT_IP6) && !defined(_WIN32)
- else
-#endif
-#if !defined(HAVE_GETADDRINFO) || !defined(_WIN32)
- {
- h = gethostbyname (GETHOSTBYNAME_ARG_CAST host);
- if (h == NULL) {
-
-/*
- * Okay, I got fed up by the non-portability of this error message
- * extraction code. it work on Linux, if it work on your platform
- * and one want to enable it, send me the defined(foobar) needed
- */
-#if defined(HAVE_NETDB_H) && defined(HOST_NOT_FOUND) && defined(linux)
- const char *h_err_txt = "";
-
- switch (h_errno) {
- case HOST_NOT_FOUND:
- h_err_txt = "Authoritive host not found";
- break;
-
- case TRY_AGAIN:
- h_err_txt =
- "Non-authoritive host not found or server failure.";
- break;
-
- case NO_RECOVERY:
- h_err_txt =
- "Non-recoverable errors: FORMERR, REFUSED, or NOTIMP.";
- break;
-
-#ifdef NO_ADDRESS
- case NO_ADDRESS:
- h_err_txt =
- "Valid name, no data record of requested type.";
- break;
-#endif
-
- default:
- h_err_txt = "No error text defined.";
- break;
- }
- __xmlIOErr(XML_FROM_HTTP, 0, h_err_txt);
-#else
- __xmlIOErr(XML_FROM_HTTP, 0, "Failed to resolve host");
-#endif
- return INVALID_SOCKET;
- }
-
- for (i = 0; h->h_addr_list[i]; i++) {
- if (h->h_addrtype == AF_INET) {
- /* A records (IPv4) */
- if ((unsigned int) h->h_length > sizeof(ia)) {
- __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n");
- return INVALID_SOCKET;
- }
- memcpy (&ia, h->h_addr_list[i], h->h_length);
- sockin.sin_family = h->h_addrtype;
- sockin.sin_addr = ia;
- sockin.sin_port = (unsigned short)htons ((unsigned short)port);
- addr = (struct sockaddr *) &sockin;
-#ifdef SUPPORT_IP6
- } else if (have_ipv6 () && (h->h_addrtype == AF_INET6)) {
- /* AAAA records (IPv6) */
- if ((unsigned int) h->h_length > sizeof(ia6)) {
- __xmlIOErr(XML_FROM_HTTP, 0, "address size mismatch\n");
- return INVALID_SOCKET;
- }
- memcpy (&ia6, h->h_addr_list[i], h->h_length);
- sockin6.sin6_family = h->h_addrtype;
- sockin6.sin6_addr = ia6;
- sockin6.sin6_port = htons (port);
- addr = (struct sockaddr *) &sockin6;
-#endif
- } else
- break; /* for */
-
- s = xmlNanoHTTPConnectAttempt (addr);
- if (s != INVALID_SOCKET)
- return (s);
- }
- }
-#endif
-
-#ifdef DEBUG_HTTP
- xmlGenericError(xmlGenericErrorContext,
- "xmlNanoHTTPConnectHost: unable to connect to '%s'.\n",
- host);
-#endif
- return INVALID_SOCKET;
-}
-
-
-/**
- * xmlNanoHTTPOpen:
- * @URL: The URL to load
- * @contentType: if available the Content-Type information will be
- * returned at that location
- *
- * This function try to open a connection to the indicated resource
- * via HTTP GET.
- *
- * Returns NULL in case of failure, otherwise a request handler.
- * The contentType, if provided must be freed by the caller
- */
-
-void*
-xmlNanoHTTPOpen(const char *URL, char **contentType) {
- if (contentType != NULL) *contentType = NULL;
- return(xmlNanoHTTPMethod(URL, NULL, NULL, contentType, NULL, 0));
-}
-
-/**
- * xmlNanoHTTPOpenRedir:
- * @URL: The URL to load
- * @contentType: if available the Content-Type information will be
- * returned at that location
- * @redir: if available the redirected URL will be returned
- *
- * This function try to open a connection to the indicated resource
- * via HTTP GET.
- *
- * Returns NULL in case of failure, otherwise a request handler.
- * The contentType, if provided must be freed by the caller
- */
-
-void*
-xmlNanoHTTPOpenRedir(const char *URL, char **contentType, char **redir) {
- if (contentType != NULL) *contentType = NULL;
- if (redir != NULL) *redir = NULL;
- return(xmlNanoHTTPMethodRedir(URL, NULL, NULL, contentType, redir, NULL,0));
-}
-
-/**
- * xmlNanoHTTPRead:
- * @ctx: the HTTP context
- * @dest: a buffer
- * @len: the buffer length
- *
- * This function tries to read @len bytes from the existing HTTP connection
- * and saves them in @dest. This is a blocking call.
- *
- * Returns the number of byte read. 0 is an indication of an end of connection.
- * -1 indicates a parameter error.
- */
-int
-xmlNanoHTTPRead(void *ctx, void *dest, int len) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
-#ifdef HAVE_ZLIB_H
- int bytes_read = 0;
- int orig_avail_in;
- int z_ret;
-#endif
-
- if (ctx == NULL) return(-1);
- if (dest == NULL) return(-1);
- if (len <= 0) return(0);
-
-#ifdef HAVE_ZLIB_H
- if (ctxt->usesGzip == 1) {
- if (ctxt->strm == NULL) return(0);
-
- ctxt->strm->next_out = dest;
- ctxt->strm->avail_out = len;
- ctxt->strm->avail_in = ctxt->inptr - ctxt->inrptr;
-
- while (ctxt->strm->avail_out > 0 &&
- (ctxt->strm->avail_in > 0 || xmlNanoHTTPRecv(ctxt) > 0)) {
- orig_avail_in = ctxt->strm->avail_in =
- ctxt->inptr - ctxt->inrptr - bytes_read;
- ctxt->strm->next_in = BAD_CAST (ctxt->inrptr + bytes_read);
-
- z_ret = inflate(ctxt->strm, Z_NO_FLUSH);
- bytes_read += orig_avail_in - ctxt->strm->avail_in;
-
- if (z_ret != Z_OK) break;
- }
-
- ctxt->inrptr += bytes_read;
- return(len - ctxt->strm->avail_out);
- }
-#endif
-
- while (ctxt->inptr - ctxt->inrptr < len) {
- if (xmlNanoHTTPRecv(ctxt) <= 0) break;
- }
- if (ctxt->inptr - ctxt->inrptr < len)
- len = ctxt->inptr - ctxt->inrptr;
- memcpy(dest, ctxt->inrptr, len);
- ctxt->inrptr += len;
- return(len);
-}
-
-/**
- * xmlNanoHTTPClose:
- * @ctx: the HTTP context
- *
- * This function closes an HTTP context, it ends up the connection and
- * free all data related to it.
- */
-void
-xmlNanoHTTPClose(void *ctx) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
-
- if (ctx == NULL) return;
-
- xmlNanoHTTPFreeCtxt(ctxt);
-}
-
-/**
- * xmlNanoHTTPMethodRedir:
- * @URL: The URL to load
- * @method: the HTTP method to use
- * @input: the input string if any
- * @contentType: the Content-Type information IN and OUT
- * @redir: the redirected URL OUT
- * @headers: the extra headers
- * @ilen: input length
- *
- * This function try to open a connection to the indicated resource
- * via HTTP using the given @method, adding the given extra headers
- * and the input buffer for the request content.
- *
- * Returns NULL in case of failure, otherwise a request handler.
- * The contentType, or redir, if provided must be freed by the caller
- */
-
-void*
-xmlNanoHTTPMethodRedir(const char *URL, const char *method, const char *input,
- char **contentType, char **redir,
- const char *headers, int ilen ) {
- xmlNanoHTTPCtxtPtr ctxt;
- char *bp, *p;
- int blen;
- SOCKET ret;
- int nbRedirects = 0;
- char *redirURL = NULL;
-#ifdef DEBUG_HTTP
- int xmt_bytes;
-#endif
-
- if (URL == NULL) return(NULL);
- if (method == NULL) method = "GET";
- xmlNanoHTTPInit();
-
-retry:
- if (redirURL == NULL) {
- ctxt = xmlNanoHTTPNewCtxt(URL);
- if (ctxt == NULL)
- return(NULL);
- } else {
- ctxt = xmlNanoHTTPNewCtxt(redirURL);
- if (ctxt == NULL)
- return(NULL);
- ctxt->location = xmlMemStrdup(redirURL);
- }
-
- if ((ctxt->protocol == NULL) || (strcmp(ctxt->protocol, "http"))) {
- __xmlIOErr(XML_FROM_HTTP, XML_HTTP_URL_SYNTAX, "Not a valid HTTP URI");
- xmlNanoHTTPFreeCtxt(ctxt);
- if (redirURL != NULL) xmlFree(redirURL);
- return(NULL);
- }
- if (ctxt->hostname == NULL) {
- __xmlIOErr(XML_FROM_HTTP, XML_HTTP_UNKNOWN_HOST,
- "Failed to identify host in URI");
- xmlNanoHTTPFreeCtxt(ctxt);
- if (redirURL != NULL) xmlFree(redirURL);
- return(NULL);
- }
- if (proxy) {
- blen = strlen(ctxt->hostname) * 2 + 16;
- ret = xmlNanoHTTPConnectHost(proxy, proxyPort);
- }
- else {
- blen = strlen(ctxt->hostname);
- ret = xmlNanoHTTPConnectHost(ctxt->hostname, ctxt->port);
- }
- if (ret == INVALID_SOCKET) {
- xmlNanoHTTPFreeCtxt(ctxt);
- if (redirURL != NULL) xmlFree(redirURL);
- return(NULL);
- }
- ctxt->fd = ret;
-
- if (input == NULL)
- ilen = 0;
- else
- blen += 36;
-
- if (headers != NULL)
- blen += strlen(headers) + 2;
- if (contentType && *contentType)
- /* reserve for string plus 'Content-Type: \r\n" */
- blen += strlen(*contentType) + 16;
- if (ctxt->query != NULL)
- /* 1 for '?' */
- blen += strlen(ctxt->query) + 1;
- blen += strlen(method) + strlen(ctxt->path) + 24;
-#ifdef HAVE_ZLIB_H
- /* reserve for possible 'Accept-Encoding: gzip' string */
- blen += 23;
-#endif
- if (ctxt->port != 80) {
- /* reserve space for ':xxxxx', incl. potential proxy */
- if (proxy)
- blen += 17;
- else
- blen += 11;
- }
- bp = (char*)xmlMallocAtomic(blen);
- if ( bp == NULL ) {
- xmlNanoHTTPFreeCtxt( ctxt );
- xmlHTTPErrMemory("allocating header buffer");
- return ( NULL );
- }
-
- p = bp;
-
- if (proxy) {
- if (ctxt->port != 80) {
- p += snprintf( p, blen - (p - bp), "%s http://%s:%d%s",
- method, ctxt->hostname,
- ctxt->port, ctxt->path );
- }
- else
- p += snprintf( p, blen - (p - bp), "%s http://%s%s", method,
- ctxt->hostname, ctxt->path);
- }
- else
- p += snprintf( p, blen - (p - bp), "%s %s", method, ctxt->path);
-
- if (ctxt->query != NULL)
- p += snprintf( p, blen - (p - bp), "?%s", ctxt->query);
-
- if (ctxt->port == 80) {
- p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s\r\n",
- ctxt->hostname);
- } else {
- p += snprintf( p, blen - (p - bp), " HTTP/1.0\r\nHost: %s:%d\r\n",
- ctxt->hostname, ctxt->port);
- }
-
-#ifdef HAVE_ZLIB_H
- p += snprintf(p, blen - (p - bp), "Accept-Encoding: gzip\r\n");
-#endif
-
- if (contentType != NULL && *contentType)
- p += snprintf(p, blen - (p - bp), "Content-Type: %s\r\n", *contentType);
-
- if (headers != NULL)
- p += snprintf( p, blen - (p - bp), "%s", headers );
-
- if (input != NULL)
- snprintf(p, blen - (p - bp), "Content-Length: %d\r\n\r\n", ilen );
- else
- snprintf(p, blen - (p - bp), "\r\n");
-
-#ifdef DEBUG_HTTP
- xmlGenericError(xmlGenericErrorContext,
- "-> %s%s", proxy? "(Proxy) " : "", bp);
- if ((blen -= strlen(bp)+1) < 0)
- xmlGenericError(xmlGenericErrorContext,
- "ERROR: overflowed buffer by %d bytes\n", -blen);
-#endif
- ctxt->outptr = ctxt->out = bp;
- ctxt->state = XML_NANO_HTTP_WRITE;
- blen = strlen( ctxt->out );
-#ifdef DEBUG_HTTP
- xmt_bytes = xmlNanoHTTPSend(ctxt, ctxt->out, blen );
- if ( xmt_bytes != blen )
- xmlGenericError( xmlGenericErrorContext,
- "xmlNanoHTTPMethodRedir: Only %d of %d %s %s\n",
- xmt_bytes, blen,
- "bytes of HTTP headers sent to host",
- ctxt->hostname );
-#else
- xmlNanoHTTPSend(ctxt, ctxt->out, blen );
-#endif
-
- if ( input != NULL ) {
-#ifdef DEBUG_HTTP
- xmt_bytes = xmlNanoHTTPSend( ctxt, input, ilen );
-
- if ( xmt_bytes != ilen )
- xmlGenericError( xmlGenericErrorContext,
- "xmlNanoHTTPMethodRedir: Only %d of %d %s %s\n",
- xmt_bytes, ilen,
- "bytes of HTTP content sent to host",
- ctxt->hostname );
-#else
- xmlNanoHTTPSend( ctxt, input, ilen );
-#endif
- }
-
- ctxt->state = XML_NANO_HTTP_READ;
-
- while ((p = xmlNanoHTTPReadLine(ctxt)) != NULL) {
- if (*p == 0) {
- ctxt->content = ctxt->inrptr;
- xmlFree(p);
- break;
- }
- xmlNanoHTTPScanAnswer(ctxt, p);
-
-#ifdef DEBUG_HTTP
- xmlGenericError(xmlGenericErrorContext, "<- %s\n", p);
-#endif
- xmlFree(p);
- }
-
- if ((ctxt->location != NULL) && (ctxt->returnValue >= 300) &&
- (ctxt->returnValue < 400)) {
-#ifdef DEBUG_HTTP
- xmlGenericError(xmlGenericErrorContext,
- "\nRedirect to: %s\n", ctxt->location);
-#endif
- while ( xmlNanoHTTPRecv(ctxt) > 0 ) ;
- if (nbRedirects < XML_NANO_HTTP_MAX_REDIR) {
- nbRedirects++;
- if (redirURL != NULL)
- xmlFree(redirURL);
- redirURL = xmlMemStrdup(ctxt->location);
- xmlNanoHTTPFreeCtxt(ctxt);
- goto retry;
- }
- xmlNanoHTTPFreeCtxt(ctxt);
- if (redirURL != NULL) xmlFree(redirURL);
-#ifdef DEBUG_HTTP
- xmlGenericError(xmlGenericErrorContext,
- "xmlNanoHTTPMethodRedir: Too many redirects, aborting ...\n");
-#endif
- return(NULL);
- }
-
- if (contentType != NULL) {
- if (ctxt->contentType != NULL)
- *contentType = xmlMemStrdup(ctxt->contentType);
- else
- *contentType = NULL;
- }
-
- if ((redir != NULL) && (redirURL != NULL)) {
- *redir = redirURL;
- } else {
- if (redirURL != NULL)
- xmlFree(redirURL);
- if (redir != NULL)
- *redir = NULL;
- }
-
-#ifdef DEBUG_HTTP
- if (ctxt->contentType != NULL)
- xmlGenericError(xmlGenericErrorContext,
- "\nCode %d, content-type '%s'\n\n",
- ctxt->returnValue, ctxt->contentType);
- else
- xmlGenericError(xmlGenericErrorContext,
- "\nCode %d, no content-type\n\n",
- ctxt->returnValue);
-#endif
-
- return((void *) ctxt);
-}
-
-/**
- * xmlNanoHTTPMethod:
- * @URL: The URL to load
- * @method: the HTTP method to use
- * @input: the input string if any
- * @contentType: the Content-Type information IN and OUT
- * @headers: the extra headers
- * @ilen: input length
- *
- * This function try to open a connection to the indicated resource
- * via HTTP using the given @method, adding the given extra headers
- * and the input buffer for the request content.
- *
- * Returns NULL in case of failure, otherwise a request handler.
- * The contentType, if provided must be freed by the caller
- */
-
-void*
-xmlNanoHTTPMethod(const char *URL, const char *method, const char *input,
- char **contentType, const char *headers, int ilen) {
- return(xmlNanoHTTPMethodRedir(URL, method, input, contentType,
- NULL, headers, ilen));
-}
-
-/**
- * xmlNanoHTTPFetch:
- * @URL: The URL to load
- * @filename: the filename where the content should be saved
- * @contentType: if available the Content-Type information will be
- * returned at that location
- *
- * This function try to fetch the indicated resource via HTTP GET
- * and save it's content in the file.
- *
- * Returns -1 in case of failure, 0 incase of success. The contentType,
- * if provided must be freed by the caller
- */
-int
-xmlNanoHTTPFetch(const char *URL, const char *filename, char **contentType) {
- void *ctxt = NULL;
- char *buf = NULL;
- int fd;
- int len;
- int ret = 0;
-
- if (filename == NULL) return(-1);
- ctxt = xmlNanoHTTPOpen(URL, contentType);
- if (ctxt == NULL) return(-1);
-
- if (!strcmp(filename, "-"))
- fd = 0;
- else {
- fd = open(filename, O_CREAT | O_WRONLY, 00644);
- if (fd < 0) {
- xmlNanoHTTPClose(ctxt);
- if ((contentType != NULL) && (*contentType != NULL)) {
- xmlFree(*contentType);
- *contentType = NULL;
- }
- return(-1);
- }
- }
-
- xmlNanoHTTPFetchContent( ctxt, &buf, &len );
- if ( len > 0 ) {
- if (write(fd, buf, len) == -1) {
- ret = -1;
- }
- }
-
- xmlNanoHTTPClose(ctxt);
- close(fd);
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlNanoHTTPSave:
- * @ctxt: the HTTP context
- * @filename: the filename where the content should be saved
- *
- * This function saves the output of the HTTP transaction to a file
- * It closes and free the context at the end
- *
- * Returns -1 in case of failure, 0 incase of success.
- */
-int
-xmlNanoHTTPSave(void *ctxt, const char *filename) {
- char *buf = NULL;
- int fd;
- int len;
- int ret = 0;
-
- if ((ctxt == NULL) || (filename == NULL)) return(-1);
-
- if (!strcmp(filename, "-"))
- fd = 0;
- else {
- fd = open(filename, O_CREAT | O_WRONLY, 0666);
- if (fd < 0) {
- xmlNanoHTTPClose(ctxt);
- return(-1);
- }
- }
-
- xmlNanoHTTPFetchContent( ctxt, &buf, &len );
- if ( len > 0 ) {
- if (write(fd, buf, len) == -1) {
- ret = -1;
- }
- }
-
- xmlNanoHTTPClose(ctxt);
- close(fd);
- return(ret);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlNanoHTTPReturnCode:
- * @ctx: the HTTP context
- *
- * Get the latest HTTP return code received
- *
- * Returns the HTTP return code for the request.
- */
-int
-xmlNanoHTTPReturnCode(void *ctx) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
-
- if (ctxt == NULL) return(-1);
-
- return(ctxt->returnValue);
-}
-
-/**
- * xmlNanoHTTPAuthHeader:
- * @ctx: the HTTP context
- *
- * Get the authentication header of an HTTP context
- *
- * Returns the stashed value of the WWW-Authenticate or Proxy-Authenticate
- * header.
- */
-const char *
-xmlNanoHTTPAuthHeader(void *ctx) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr) ctx;
-
- if (ctxt == NULL) return(NULL);
-
- return(ctxt->authHeader);
-}
-
-/**
- * xmlNanoHTTPContentLength:
- * @ctx: the HTTP context
- *
- * Provides the specified content length from the HTTP header.
- *
- * Return the specified content length from the HTTP header. Note that
- * a value of -1 indicates that the content length element was not included in
- * the response header.
- */
-int
-xmlNanoHTTPContentLength( void * ctx ) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
-
- return ( ( ctxt == NULL ) ? -1 : ctxt->ContentLength );
-}
-
-/**
- * xmlNanoHTTPRedir:
- * @ctx: the HTTP context
- *
- * Provides the specified redirection URL if available from the HTTP header.
- *
- * Return the specified redirection URL or NULL if not redirected.
- */
-const char *
-xmlNanoHTTPRedir( void * ctx ) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
-
- return ( ( ctxt == NULL ) ? NULL : ctxt->location );
-}
-
-/**
- * xmlNanoHTTPEncoding:
- * @ctx: the HTTP context
- *
- * Provides the specified encoding if specified in the HTTP headers.
- *
- * Return the specified encoding or NULL if not available
- */
-const char *
-xmlNanoHTTPEncoding( void * ctx ) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
-
- return ( ( ctxt == NULL ) ? NULL : ctxt->encoding );
-}
-
-/**
- * xmlNanoHTTPMimeType:
- * @ctx: the HTTP context
- *
- * Provides the specified Mime-Type if specified in the HTTP headers.
- *
- * Return the specified Mime-Type or NULL if not available
- */
-const char *
-xmlNanoHTTPMimeType( void * ctx ) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
-
- return ( ( ctxt == NULL ) ? NULL : ctxt->mimeType );
-}
-
-/**
- * xmlNanoHTTPFetchContent:
- * @ctx: the HTTP context
- * @ptr: pointer to set to the content buffer.
- * @len: integer pointer to hold the length of the content
- *
- * Check if all the content was read
- *
- * Returns 0 if all the content was read and available, returns
- * -1 if received content length was less than specified or an error
- * occurred.
- */
-static int
-xmlNanoHTTPFetchContent( void * ctx, char ** ptr, int * len ) {
- xmlNanoHTTPCtxtPtr ctxt = (xmlNanoHTTPCtxtPtr)ctx;
-
- int rc = 0;
- int cur_lgth;
- int rcvd_lgth;
- int dummy_int;
- char * dummy_ptr = NULL;
-
- /* Dummy up return input parameters if not provided */
-
- if ( len == NULL )
- len = &dummy_int;
-
- if ( ptr == NULL )
- ptr = &dummy_ptr;
-
- /* But can't work without the context pointer */
-
- if ( ( ctxt == NULL ) || ( ctxt->content == NULL ) ) {
- *len = 0;
- *ptr = NULL;
- return ( -1 );
- }
-
- rcvd_lgth = ctxt->inptr - ctxt->content;
-
- while ( (cur_lgth = xmlNanoHTTPRecv( ctxt )) > 0 ) {
-
- rcvd_lgth += cur_lgth;
- if ( (ctxt->ContentLength > 0) && (rcvd_lgth >= ctxt->ContentLength) )
- break;
- }
-
- *ptr = ctxt->content;
- *len = rcvd_lgth;
-
- if ( ( ctxt->ContentLength > 0 ) && ( rcvd_lgth < ctxt->ContentLength ) )
- rc = -1;
- else if ( rcvd_lgth == 0 )
- rc = -1;
-
- return ( rc );
-}
-
-#ifdef STANDALONE
-int main(int argc, char **argv) {
- char *contentType = NULL;
-
- if (argv[1] != NULL) {
- if (argv[2] != NULL)
- xmlNanoHTTPFetch(argv[1], argv[2], &contentType);
- else
- xmlNanoHTTPFetch(argv[1], "-", &contentType);
- if (contentType != NULL) xmlFree(contentType);
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "%s: minimal HTTP GET implementation\n", argv[0]);
- xmlGenericError(xmlGenericErrorContext,
- "\tusage %s [ URL [ filename ] ]\n", argv[0]);
- }
- xmlNanoHTTPCleanup();
- xmlMemoryDump();
- return(0);
-}
-#endif /* STANDALONE */
-#else /* !LIBXML_HTTP_ENABLED */
-#ifdef STANDALONE
-#include <stdio.h>
-int main(int argc, char **argv) {
- xmlGenericError(xmlGenericErrorContext,
- "%s : HTTP support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* STANDALONE */
-#endif /* LIBXML_HTTP_ENABLED */
-#define bottom_nanohttp
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/parser.c b/external/libxml2_android/jni/libxml2/parser.c
deleted file mode 100644
index df2efa55..00000000
--- a/external/libxml2_android/jni/libxml2/parser.c
+++ /dev/null
@@ -1,15783 +0,0 @@
-/*
- * parser.c : an XML 1.0 parser, namespaces and validity support are mostly
- * implemented on top of the SAX interfaces
- *
- * References:
- * The XML specification:
- * http://www.w3.org/TR/REC-xml
- * Original 1.0 version:
- * http://www.w3.org/TR/1998/REC-xml-19980210
- * XML second edition working draft
- * http://www.w3.org/TR/2000/WD-xml-2e-20000814
- *
- * Okay this is a big file, the parser core is around 7000 lines, then it
- * is followed by the progressive parser top routines, then the various
- * high level APIs to call the parser and a few miscellaneous functions.
- * A number of helper functions and deprecated ones have been moved to
- * parserInternals.c to reduce this file size.
- * As much as possible the functions are associated with their relative
- * production in the XML specification. A few productions defining the
- * different ranges of character are actually implanted either in
- * parserInternals.h or parserInternals.c
- * The DOM tree build is realized from the default SAX callbacks in
- * the module SAX.c.
- * The routines doing the validation checks are in valid.c and called either
- * from the SAX callbacks or as standalone functions using a preparsed
- * document.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#if defined(WIN32) && !defined (__CYGWIN__)
-#define XML_DIR_SEP '\\'
-#else
-#define XML_DIR_SEP '/'
-#endif
-
-#include <stdlib.h>
-#include <limits.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/threads.h>
-#include <libxml/globals.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/valid.h>
-#include <libxml/entities.h>
-#include <libxml/xmlerror.h>
-#include <libxml/encoding.h>
-#include <libxml/xmlIO.h>
-#include <libxml/uri.h>
-#ifdef LIBXML_CATALOG_ENABLED
-#include <libxml/catalog.h>
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/xmlschemastypes.h>
-#include <libxml/relaxng.h>
-#endif
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-#ifdef HAVE_LZMA_H
-#include <lzma.h>
-#endif
-
-#include "buf.h"
-#include "enc.h"
-
-static void
-xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info);
-
-static xmlParserCtxtPtr
-xmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID,
- const xmlChar *base, xmlParserCtxtPtr pctx);
-
-static void xmlHaltParser(xmlParserCtxtPtr ctxt);
-
-/************************************************************************
- * *
- * Arbitrary limits set in the parser. See XML_PARSE_HUGE *
- * *
- ************************************************************************/
-
-#define XML_PARSER_BIG_ENTITY 1000
-#define XML_PARSER_LOT_ENTITY 5000
-
-/*
- * XML_PARSER_NON_LINEAR is the threshold where the ratio of parsed entity
- * replacement over the size in byte of the input indicates that you have
- * and eponential behaviour. A value of 10 correspond to at least 3 entity
- * replacement per byte of input.
- */
-#define XML_PARSER_NON_LINEAR 10
-
-/*
- * xmlParserEntityCheck
- *
- * Function to check non-linear entity expansion behaviour
- * This is here to detect and stop exponential linear entity expansion
- * This is not a limitation of the parser but a safety
- * boundary feature. It can be disabled with the XML_PARSE_HUGE
- * parser option.
- */
-static int
-xmlParserEntityCheck(xmlParserCtxtPtr ctxt, size_t size,
- xmlEntityPtr ent, size_t replacement)
-{
- size_t consumed = 0;
-
- if ((ctxt == NULL) || (ctxt->options & XML_PARSE_HUGE))
- return (0);
- if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP)
- return (1);
-
- /*
- * This may look absurd but is needed to detect
- * entities problems
- */
- if ((ent != NULL) && (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
- (ent->content != NULL) && (ent->checked == 0) &&
- (ctxt->errNo != XML_ERR_ENTITY_LOOP)) {
- unsigned long oldnbent = ctxt->nbentities;
- xmlChar *rep;
-
- ent->checked = 1;
-
- ++ctxt->depth;
- rep = xmlStringDecodeEntities(ctxt, ent->content,
- XML_SUBSTITUTE_REF, 0, 0, 0);
- --ctxt->depth;
- if (ctxt->errNo == XML_ERR_ENTITY_LOOP) {
- ent->content[0] = 0;
- }
-
- ent->checked = (ctxt->nbentities - oldnbent + 1) * 2;
- if (rep != NULL) {
- if (xmlStrchr(rep, '<'))
- ent->checked |= 1;
- xmlFree(rep);
- rep = NULL;
- }
- }
- if (replacement != 0) {
- if (replacement < XML_MAX_TEXT_LENGTH)
- return(0);
-
- /*
- * If the volume of entity copy reaches 10 times the
- * amount of parsed data and over the large text threshold
- * then that's very likely to be an abuse.
- */
- if (ctxt->input != NULL) {
- consumed = ctxt->input->consumed +
- (ctxt->input->cur - ctxt->input->base);
- }
- consumed += ctxt->sizeentities;
-
- if (replacement < XML_PARSER_NON_LINEAR * consumed)
- return(0);
- } else if (size != 0) {
- /*
- * Do the check based on the replacement size of the entity
- */
- if (size < XML_PARSER_BIG_ENTITY)
- return(0);
-
- /*
- * A limit on the amount of text data reasonably used
- */
- if (ctxt->input != NULL) {
- consumed = ctxt->input->consumed +
- (ctxt->input->cur - ctxt->input->base);
- }
- consumed += ctxt->sizeentities;
-
- if ((size < XML_PARSER_NON_LINEAR * consumed) &&
- (ctxt->nbentities * 3 < XML_PARSER_NON_LINEAR * consumed))
- return (0);
- } else if (ent != NULL) {
- /*
- * use the number of parsed entities in the replacement
- */
- size = ent->checked / 2;
-
- /*
- * The amount of data parsed counting entities size only once
- */
- if (ctxt->input != NULL) {
- consumed = ctxt->input->consumed +
- (ctxt->input->cur - ctxt->input->base);
- }
- consumed += ctxt->sizeentities;
-
- /*
- * Check the density of entities for the amount of data
- * knowing an entity reference will take at least 3 bytes
- */
- if (size * 3 < consumed * XML_PARSER_NON_LINEAR)
- return (0);
- } else {
- /*
- * strange we got no data for checking
- */
- if (((ctxt->lastError.code != XML_ERR_UNDECLARED_ENTITY) &&
- (ctxt->lastError.code != XML_WAR_UNDECLARED_ENTITY)) ||
- (ctxt->nbentities <= 10000))
- return (0);
- }
- xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
- return (1);
-}
-
-/**
- * xmlParserMaxDepth:
- *
- * arbitrary depth limit for the XML documents that we allow to
- * process. This is not a limitation of the parser but a safety
- * boundary feature. It can be disabled with the XML_PARSE_HUGE
- * parser option.
- */
-unsigned int xmlParserMaxDepth = 256;
-
-
-
-#define SAX2 1
-#define XML_PARSER_BIG_BUFFER_SIZE 300
-#define XML_PARSER_BUFFER_SIZE 100
-#define SAX_COMPAT_MODE BAD_CAST "SAX compatibility mode document"
-
-/**
- * XML_PARSER_CHUNK_SIZE
- *
- * When calling GROW that's the minimal amount of data
- * the parser expected to have received. It is not a hard
- * limit but an optimization when reading strings like Names
- * It is not strictly needed as long as inputs available characters
- * are followed by 0, which should be provided by the I/O level
- */
-#define XML_PARSER_CHUNK_SIZE 100
-
-/*
- * List of XML prefixed PI allowed by W3C specs
- */
-
-static const char *xmlW3CPIs[] = {
- "xml-stylesheet",
- "xml-model",
- NULL
-};
-
-
-/* DEPR void xmlParserHandleReference(xmlParserCtxtPtr ctxt); */
-static xmlEntityPtr xmlParseStringPEReference(xmlParserCtxtPtr ctxt,
- const xmlChar **str);
-
-static xmlParserErrors
-xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt,
- xmlSAXHandlerPtr sax,
- void *user_data, int depth, const xmlChar *URL,
- const xmlChar *ID, xmlNodePtr *list);
-
-static int
-xmlCtxtUseOptionsInternal(xmlParserCtxtPtr ctxt, int options,
- const char *encoding);
-#ifdef LIBXML_LEGACY_ENABLED
-static void
-xmlAddEntityReference(xmlEntityPtr ent, xmlNodePtr firstNode,
- xmlNodePtr lastNode);
-#endif /* LIBXML_LEGACY_ENABLED */
-
-static xmlParserErrors
-xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
- const xmlChar *string, void *user_data, xmlNodePtr *lst);
-
-static int
-xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity);
-
-/************************************************************************
- * *
- * Some factorized error routines *
- * *
- ************************************************************************/
-
-/**
- * xmlErrAttributeDup:
- * @ctxt: an XML parser context
- * @prefix: the attribute prefix
- * @localname: the attribute localname
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlErrAttributeDup(xmlParserCtxtPtr ctxt, const xmlChar * prefix,
- const xmlChar * localname)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = XML_ERR_ATTRIBUTE_REDEFINED;
-
- if (prefix == NULL)
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
- XML_ERR_ATTRIBUTE_REDEFINED, XML_ERR_FATAL, NULL, 0,
- (const char *) localname, NULL, NULL, 0, 0,
- "Attribute %s redefined\n", localname);
- else
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
- XML_ERR_ATTRIBUTE_REDEFINED, XML_ERR_FATAL, NULL, 0,
- (const char *) prefix, (const char *) localname,
- NULL, 0, 0, "Attribute %s:%s redefined\n", prefix,
- localname);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlFatalErr:
- * @ctxt: an XML parser context
- * @error: the error number
- * @extra: extra information string
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void
-xmlFatalErr(xmlParserCtxtPtr ctxt, xmlParserErrors error, const char *info)
-{
- const char *errmsg;
-
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- switch (error) {
- case XML_ERR_INVALID_HEX_CHARREF:
- errmsg = "CharRef: invalid hexadecimal value";
- break;
- case XML_ERR_INVALID_DEC_CHARREF:
- errmsg = "CharRef: invalid decimal value";
- break;
- case XML_ERR_INVALID_CHARREF:
- errmsg = "CharRef: invalid value";
- break;
- case XML_ERR_INTERNAL_ERROR:
- errmsg = "internal error";
- break;
- case XML_ERR_PEREF_AT_EOF:
- errmsg = "PEReference at end of document";
- break;
- case XML_ERR_PEREF_IN_PROLOG:
- errmsg = "PEReference in prolog";
- break;
- case XML_ERR_PEREF_IN_EPILOG:
- errmsg = "PEReference in epilog";
- break;
- case XML_ERR_PEREF_NO_NAME:
- errmsg = "PEReference: no name";
- break;
- case XML_ERR_PEREF_SEMICOL_MISSING:
- errmsg = "PEReference: expecting ';'";
- break;
- case XML_ERR_ENTITY_LOOP:
- errmsg = "Detected an entity reference loop";
- break;
- case XML_ERR_ENTITY_NOT_STARTED:
- errmsg = "EntityValue: \" or ' expected";
- break;
- case XML_ERR_ENTITY_PE_INTERNAL:
- errmsg = "PEReferences forbidden in internal subset";
- break;
- case XML_ERR_ENTITY_NOT_FINISHED:
- errmsg = "EntityValue: \" or ' expected";
- break;
- case XML_ERR_ATTRIBUTE_NOT_STARTED:
- errmsg = "AttValue: \" or ' expected";
- break;
- case XML_ERR_LT_IN_ATTRIBUTE:
- errmsg = "Unescaped '<' not allowed in attributes values";
- break;
- case XML_ERR_LITERAL_NOT_STARTED:
- errmsg = "SystemLiteral \" or ' expected";
- break;
- case XML_ERR_LITERAL_NOT_FINISHED:
- errmsg = "Unfinished System or Public ID \" or ' expected";
- break;
- case XML_ERR_MISPLACED_CDATA_END:
- errmsg = "Sequence ']]>' not allowed in content";
- break;
- case XML_ERR_URI_REQUIRED:
- errmsg = "SYSTEM or PUBLIC, the URI is missing";
- break;
- case XML_ERR_PUBID_REQUIRED:
- errmsg = "PUBLIC, the Public Identifier is missing";
- break;
- case XML_ERR_HYPHEN_IN_COMMENT:
- errmsg = "Comment must not contain '--' (double-hyphen)";
- break;
- case XML_ERR_PI_NOT_STARTED:
- errmsg = "xmlParsePI : no target name";
- break;
- case XML_ERR_RESERVED_XML_NAME:
- errmsg = "Invalid PI name";
- break;
- case XML_ERR_NOTATION_NOT_STARTED:
- errmsg = "NOTATION: Name expected here";
- break;
- case XML_ERR_NOTATION_NOT_FINISHED:
- errmsg = "'>' required to close NOTATION declaration";
- break;
- case XML_ERR_VALUE_REQUIRED:
- errmsg = "Entity value required";
- break;
- case XML_ERR_URI_FRAGMENT:
- errmsg = "Fragment not allowed";
- break;
- case XML_ERR_ATTLIST_NOT_STARTED:
- errmsg = "'(' required to start ATTLIST enumeration";
- break;
- case XML_ERR_NMTOKEN_REQUIRED:
- errmsg = "NmToken expected in ATTLIST enumeration";
- break;
- case XML_ERR_ATTLIST_NOT_FINISHED:
- errmsg = "')' required to finish ATTLIST enumeration";
- break;
- case XML_ERR_MIXED_NOT_STARTED:
- errmsg = "MixedContentDecl : '|' or ')*' expected";
- break;
- case XML_ERR_PCDATA_REQUIRED:
- errmsg = "MixedContentDecl : '#PCDATA' expected";
- break;
- case XML_ERR_ELEMCONTENT_NOT_STARTED:
- errmsg = "ContentDecl : Name or '(' expected";
- break;
- case XML_ERR_ELEMCONTENT_NOT_FINISHED:
- errmsg = "ContentDecl : ',' '|' or ')' expected";
- break;
- case XML_ERR_PEREF_IN_INT_SUBSET:
- errmsg =
- "PEReference: forbidden within markup decl in internal subset";
- break;
- case XML_ERR_GT_REQUIRED:
- errmsg = "expected '>'";
- break;
- case XML_ERR_CONDSEC_INVALID:
- errmsg = "XML conditional section '[' expected";
- break;
- case XML_ERR_EXT_SUBSET_NOT_FINISHED:
- errmsg = "Content error in the external subset";
- break;
- case XML_ERR_CONDSEC_INVALID_KEYWORD:
- errmsg =
- "conditional section INCLUDE or IGNORE keyword expected";
- break;
- case XML_ERR_CONDSEC_NOT_FINISHED:
- errmsg = "XML conditional section not closed";
- break;
- case XML_ERR_XMLDECL_NOT_STARTED:
- errmsg = "Text declaration '<?xml' required";
- break;
- case XML_ERR_XMLDECL_NOT_FINISHED:
- errmsg = "parsing XML declaration: '?>' expected";
- break;
- case XML_ERR_EXT_ENTITY_STANDALONE:
- errmsg = "external parsed entities cannot be standalone";
- break;
- case XML_ERR_ENTITYREF_SEMICOL_MISSING:
- errmsg = "EntityRef: expecting ';'";
- break;
- case XML_ERR_DOCTYPE_NOT_FINISHED:
- errmsg = "DOCTYPE improperly terminated";
- break;
- case XML_ERR_LTSLASH_REQUIRED:
- errmsg = "EndTag: '</' not found";
- break;
- case XML_ERR_EQUAL_REQUIRED:
- errmsg = "expected '='";
- break;
- case XML_ERR_STRING_NOT_CLOSED:
- errmsg = "String not closed expecting \" or '";
- break;
- case XML_ERR_STRING_NOT_STARTED:
- errmsg = "String not started expecting ' or \"";
- break;
- case XML_ERR_ENCODING_NAME:
- errmsg = "Invalid XML encoding name";
- break;
- case XML_ERR_STANDALONE_VALUE:
- errmsg = "standalone accepts only 'yes' or 'no'";
- break;
- case XML_ERR_DOCUMENT_EMPTY:
- errmsg = "Document is empty";
- break;
- case XML_ERR_DOCUMENT_END:
- errmsg = "Extra content at the end of the document";
- break;
- case XML_ERR_NOT_WELL_BALANCED:
- errmsg = "chunk is not well balanced";
- break;
- case XML_ERR_EXTRA_CONTENT:
- errmsg = "extra content at the end of well balanced chunk";
- break;
- case XML_ERR_VERSION_MISSING:
- errmsg = "Malformed declaration expecting version";
- break;
- case XML_ERR_NAME_TOO_LONG:
- errmsg = "Name too long use XML_PARSE_HUGE option";
- break;
-#if 0
- case:
- errmsg = "";
- break;
-#endif
- default:
- errmsg = "Unregistered error message";
- }
- if (ctxt != NULL)
- ctxt->errNo = error;
- if (info == NULL) {
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
- XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, "%s\n",
- errmsg);
- } else {
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
- XML_ERR_FATAL, NULL, 0, info, NULL, NULL, 0, 0, "%s: %s\n",
- errmsg, info);
- }
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlFatalErrMsg:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlFatalErrMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER, error,
- XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0, "%s", msg);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlWarningMsg:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- *
- * Handle a warning.
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlWarningMsg(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar *str1, const xmlChar *str2)
-{
- xmlStructuredErrorFunc schannel = NULL;
-
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if ((ctxt != NULL) && (ctxt->sax != NULL) &&
- (ctxt->sax->initialized == XML_SAX2_MAGIC))
- schannel = ctxt->sax->serror;
- if (ctxt != NULL) {
- __xmlRaiseError(schannel,
- (ctxt->sax) ? ctxt->sax->warning : NULL,
- ctxt->userData,
- ctxt, NULL, XML_FROM_PARSER, error,
- XML_ERR_WARNING, NULL, 0,
- (const char *) str1, (const char *) str2, NULL, 0, 0,
- msg, (const char *) str1, (const char *) str2);
- } else {
- __xmlRaiseError(schannel, NULL, NULL,
- ctxt, NULL, XML_FROM_PARSER, error,
- XML_ERR_WARNING, NULL, 0,
- (const char *) str1, (const char *) str2, NULL, 0, 0,
- msg, (const char *) str1, (const char *) str2);
- }
-}
-
-/**
- * xmlValidityError:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @str1: extra data
- *
- * Handle a validity error.
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlValidityError(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar *str1, const xmlChar *str2)
-{
- xmlStructuredErrorFunc schannel = NULL;
-
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL) {
- ctxt->errNo = error;
- if ((ctxt->sax != NULL) && (ctxt->sax->initialized == XML_SAX2_MAGIC))
- schannel = ctxt->sax->serror;
- }
- if (ctxt != NULL) {
- __xmlRaiseError(schannel,
- ctxt->vctxt.error, ctxt->vctxt.userData,
- ctxt, NULL, XML_FROM_DTD, error,
- XML_ERR_ERROR, NULL, 0, (const char *) str1,
- (const char *) str2, NULL, 0, 0,
- msg, (const char *) str1, (const char *) str2);
- ctxt->valid = 0;
- } else {
- __xmlRaiseError(schannel, NULL, NULL,
- ctxt, NULL, XML_FROM_DTD, error,
- XML_ERR_ERROR, NULL, 0, (const char *) str1,
- (const char *) str2, NULL, 0, 0,
- msg, (const char *) str1, (const char *) str2);
- }
-}
-
-/**
- * xmlFatalErrMsgInt:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @val: an integer value
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlFatalErrMsgInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, int val)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL,
- ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
- NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlFatalErrMsgStrIntStr:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @str1: an string info
- * @val: an integer value
- * @str2: an string info
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlFatalErrMsgStrIntStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar *str1, int val,
- const xmlChar *str2)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL,
- ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
- NULL, 0, (const char *) str1, (const char *) str2,
- NULL, val, 0, msg, str1, val, str2);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlFatalErrMsgStr:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @val: a string value
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlFatalErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar * val)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL,
- XML_FROM_PARSER, error, XML_ERR_FATAL,
- NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg,
- val);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlErrMsgStr:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @val: a string value
- *
- * Handle a non fatal parser error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlErrMsgStr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const xmlChar * val)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL,
- XML_FROM_PARSER, error, XML_ERR_ERROR,
- NULL, 0, (const char *) val, NULL, NULL, 0, 0, msg,
- val);
-}
-
-/**
- * xmlNsErr:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the message
- * @info1: extra information string
- * @info2: extra information string
- *
- * Handle a fatal parser error, i.e. violating Well-Formedness constraints
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlNsErr(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg,
- const xmlChar * info1, const xmlChar * info2,
- const xmlChar * info3)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
- XML_ERR_ERROR, NULL, 0, (const char *) info1,
- (const char *) info2, (const char *) info3, 0, 0, msg,
- info1, info2, info3);
- if (ctxt != NULL)
- ctxt->nsWellFormed = 0;
-}
-
-/**
- * xmlNsWarn
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the message
- * @info1: extra information string
- * @info2: extra information string
- *
- * Handle a namespace warning error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlNsWarn(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg,
- const xmlChar * info1, const xmlChar * info2,
- const xmlChar * info3)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_NAMESPACE, error,
- XML_ERR_WARNING, NULL, 0, (const char *) info1,
- (const char *) info2, (const char *) info3, 0, 0, msg,
- info1, info2, info3);
-}
-
-/************************************************************************
- * *
- * Library wide options *
- * *
- ************************************************************************/
-
-/**
- * xmlHasFeature:
- * @feature: the feature to be examined
- *
- * Examines if the library has been compiled with a given feature.
- *
- * Returns a non-zero value if the feature exist, otherwise zero.
- * Returns zero (0) if the feature does not exist or an unknown
- * unknown feature is requested, non-zero otherwise.
- */
-int
-xmlHasFeature(xmlFeature feature)
-{
- switch (feature) {
- case XML_WITH_THREAD:
-#ifdef LIBXML_THREAD_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_TREE:
-#ifdef LIBXML_TREE_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_OUTPUT:
-#ifdef LIBXML_OUTPUT_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_PUSH:
-#ifdef LIBXML_PUSH_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_READER:
-#ifdef LIBXML_READER_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_PATTERN:
-#ifdef LIBXML_PATTERN_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_WRITER:
-#ifdef LIBXML_WRITER_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_SAX1:
-#ifdef LIBXML_SAX1_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_FTP:
-#ifdef LIBXML_FTP_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_HTTP:
-#ifdef LIBXML_HTTP_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_VALID:
-#ifdef LIBXML_VALID_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_HTML:
-#ifdef LIBXML_HTML_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_LEGACY:
-#ifdef LIBXML_LEGACY_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_C14N:
-#ifdef LIBXML_C14N_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_CATALOG:
-#ifdef LIBXML_CATALOG_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_XPATH:
-#ifdef LIBXML_XPATH_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_XPTR:
-#ifdef LIBXML_XPTR_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_XINCLUDE:
-#ifdef LIBXML_XINCLUDE_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_ICONV:
-#ifdef LIBXML_ICONV_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_ISO8859X:
-#ifdef LIBXML_ISO8859X_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_UNICODE:
-#ifdef LIBXML_UNICODE_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_REGEXP:
-#ifdef LIBXML_REGEXP_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_AUTOMATA:
-#ifdef LIBXML_AUTOMATA_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_EXPR:
-#ifdef LIBXML_EXPR_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_SCHEMAS:
-#ifdef LIBXML_SCHEMAS_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_SCHEMATRON:
-#ifdef LIBXML_SCHEMATRON_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_MODULES:
-#ifdef LIBXML_MODULES_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_DEBUG:
-#ifdef LIBXML_DEBUG_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_DEBUG_MEM:
-#ifdef DEBUG_MEMORY_LOCATION
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_DEBUG_RUN:
-#ifdef LIBXML_DEBUG_RUNTIME
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_ZLIB:
-#ifdef LIBXML_ZLIB_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_LZMA:
-#ifdef LIBXML_LZMA_ENABLED
- return(1);
-#else
- return(0);
-#endif
- case XML_WITH_ICU:
-#ifdef LIBXML_ICU_ENABLED
- return(1);
-#else
- return(0);
-#endif
- default:
- break;
- }
- return(0);
-}
-
-/************************************************************************
- * *
- * SAX2 defaulted attributes handling *
- * *
- ************************************************************************/
-
-/**
- * xmlDetectSAX2:
- * @ctxt: an XML parser context
- *
- * Do the SAX2 detection and specific intialization
- */
-static void
-xmlDetectSAX2(xmlParserCtxtPtr ctxt) {
- if (ctxt == NULL) return;
-#ifdef LIBXML_SAX1_ENABLED
- if ((ctxt->sax) && (ctxt->sax->initialized == XML_SAX2_MAGIC) &&
- ((ctxt->sax->startElementNs != NULL) ||
- (ctxt->sax->endElementNs != NULL))) ctxt->sax2 = 1;
-#else
- ctxt->sax2 = 1;
-#endif /* LIBXML_SAX1_ENABLED */
-
- ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
- ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
- ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
- if ((ctxt->str_xml==NULL) || (ctxt->str_xmlns==NULL) ||
- (ctxt->str_xml_ns == NULL)) {
- xmlErrMemory(ctxt, NULL);
- }
-}
-
-typedef struct _xmlDefAttrs xmlDefAttrs;
-typedef xmlDefAttrs *xmlDefAttrsPtr;
-struct _xmlDefAttrs {
- int nbAttrs; /* number of defaulted attributes on that element */
- int maxAttrs; /* the size of the array */
-#if __STDC_VERSION__ >= 199901L
- /* Using a C99 flexible array member avoids UBSan errors. */
- const xmlChar *values[]; /* array of localname/prefix/values/external */
-#else
- const xmlChar *values[5];
-#endif
-};
-
-/**
- * xmlAttrNormalizeSpace:
- * @src: the source string
- * @dst: the target string
- *
- * Normalize the space in non CDATA attribute values:
- * If the attribute type is not CDATA, then the XML processor MUST further
- * process the normalized attribute value by discarding any leading and
- * trailing space (#x20) characters, and by replacing sequences of space
- * (#x20) characters by a single space (#x20) character.
- * Note that the size of dst need to be at least src, and if one doesn't need
- * to preserve dst (and it doesn't come from a dictionary or read-only) then
- * passing src as dst is just fine.
- *
- * Returns a pointer to the normalized value (dst) or NULL if no conversion
- * is needed.
- */
-static xmlChar *
-xmlAttrNormalizeSpace(const xmlChar *src, xmlChar *dst)
-{
- if ((src == NULL) || (dst == NULL))
- return(NULL);
-
- while (*src == 0x20) src++;
- while (*src != 0) {
- if (*src == 0x20) {
- while (*src == 0x20) src++;
- if (*src != 0)
- *dst++ = 0x20;
- } else {
- *dst++ = *src++;
- }
- }
- *dst = 0;
- if (dst == src)
- return(NULL);
- return(dst);
-}
-
-/**
- * xmlAttrNormalizeSpace2:
- * @src: the source string
- *
- * Normalize the space in non CDATA attribute values, a slightly more complex
- * front end to avoid allocation problems when running on attribute values
- * coming from the input.
- *
- * Returns a pointer to the normalized value (dst) or NULL if no conversion
- * is needed.
- */
-static const xmlChar *
-xmlAttrNormalizeSpace2(xmlParserCtxtPtr ctxt, xmlChar *src, int *len)
-{
- int i;
- int remove_head = 0;
- int need_realloc = 0;
- const xmlChar *cur;
-
- if ((ctxt == NULL) || (src == NULL) || (len == NULL))
- return(NULL);
- i = *len;
- if (i <= 0)
- return(NULL);
-
- cur = src;
- while (*cur == 0x20) {
- cur++;
- remove_head++;
- }
- while (*cur != 0) {
- if (*cur == 0x20) {
- cur++;
- if ((*cur == 0x20) || (*cur == 0)) {
- need_realloc = 1;
- break;
- }
- } else
- cur++;
- }
- if (need_realloc) {
- xmlChar *ret;
-
- ret = xmlStrndup(src + remove_head, i - remove_head + 1);
- if (ret == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- xmlAttrNormalizeSpace(ret, ret);
- *len = (int) strlen((const char *)ret);
- return(ret);
- } else if (remove_head) {
- *len -= remove_head;
- memmove(src, src + remove_head, 1 + *len);
- return(src);
- }
- return(NULL);
-}
-
-/**
- * xmlAddDefAttrs:
- * @ctxt: an XML parser context
- * @fullname: the element fullname
- * @fullattr: the attribute fullname
- * @value: the attribute value
- *
- * Add a defaulted attribute for an element
- */
-static void
-xmlAddDefAttrs(xmlParserCtxtPtr ctxt,
- const xmlChar *fullname,
- const xmlChar *fullattr,
- const xmlChar *value) {
- xmlDefAttrsPtr defaults;
- int len;
- const xmlChar *name;
- const xmlChar *prefix;
-
- /*
- * Allows to detect attribute redefinitions
- */
- if (ctxt->attsSpecial != NULL) {
- if (xmlHashLookup2(ctxt->attsSpecial, fullname, fullattr) != NULL)
- return;
- }
-
- if (ctxt->attsDefault == NULL) {
- ctxt->attsDefault = xmlHashCreateDict(10, ctxt->dict);
- if (ctxt->attsDefault == NULL)
- goto mem_error;
- }
-
- /*
- * split the element name into prefix:localname , the string found
- * are within the DTD and then not associated to namespace names.
- */
- name = xmlSplitQName3(fullname, &len);
- if (name == NULL) {
- name = xmlDictLookup(ctxt->dict, fullname, -1);
- prefix = NULL;
- } else {
- name = xmlDictLookup(ctxt->dict, name, -1);
- prefix = xmlDictLookup(ctxt->dict, fullname, len);
- }
-
- /*
- * make sure there is some storage
- */
- defaults = xmlHashLookup2(ctxt->attsDefault, name, prefix);
- if (defaults == NULL) {
- defaults = (xmlDefAttrsPtr) xmlMalloc(sizeof(xmlDefAttrs) +
- (4 * 5) * sizeof(const xmlChar *));
- if (defaults == NULL)
- goto mem_error;
- defaults->nbAttrs = 0;
- defaults->maxAttrs = 4;
- if (xmlHashUpdateEntry2(ctxt->attsDefault, name, prefix,
- defaults, NULL) < 0) {
- xmlFree(defaults);
- goto mem_error;
- }
- } else if (defaults->nbAttrs >= defaults->maxAttrs) {
- xmlDefAttrsPtr temp;
-
- temp = (xmlDefAttrsPtr) xmlRealloc(defaults, sizeof(xmlDefAttrs) +
- (2 * defaults->maxAttrs * 5) * sizeof(const xmlChar *));
- if (temp == NULL)
- goto mem_error;
- defaults = temp;
- defaults->maxAttrs *= 2;
- if (xmlHashUpdateEntry2(ctxt->attsDefault, name, prefix,
- defaults, NULL) < 0) {
- xmlFree(defaults);
- goto mem_error;
- }
- }
-
- /*
- * Split the element name into prefix:localname , the string found
- * are within the DTD and hen not associated to namespace names.
- */
- name = xmlSplitQName3(fullattr, &len);
- if (name == NULL) {
- name = xmlDictLookup(ctxt->dict, fullattr, -1);
- prefix = NULL;
- } else {
- name = xmlDictLookup(ctxt->dict, name, -1);
- prefix = xmlDictLookup(ctxt->dict, fullattr, len);
- }
-
- defaults->values[5 * defaults->nbAttrs] = name;
- defaults->values[5 * defaults->nbAttrs + 1] = prefix;
- /* intern the string and precompute the end */
- len = xmlStrlen(value);
- value = xmlDictLookup(ctxt->dict, value, len);
- defaults->values[5 * defaults->nbAttrs + 2] = value;
- defaults->values[5 * defaults->nbAttrs + 3] = value + len;
- if (ctxt->external)
- defaults->values[5 * defaults->nbAttrs + 4] = BAD_CAST "external";
- else
- defaults->values[5 * defaults->nbAttrs + 4] = NULL;
- defaults->nbAttrs++;
-
- return;
-
-mem_error:
- xmlErrMemory(ctxt, NULL);
- return;
-}
-
-/**
- * xmlAddSpecialAttr:
- * @ctxt: an XML parser context
- * @fullname: the element fullname
- * @fullattr: the attribute fullname
- * @type: the attribute type
- *
- * Register this attribute type
- */
-static void
-xmlAddSpecialAttr(xmlParserCtxtPtr ctxt,
- const xmlChar *fullname,
- const xmlChar *fullattr,
- int type)
-{
- if (ctxt->attsSpecial == NULL) {
- ctxt->attsSpecial = xmlHashCreateDict(10, ctxt->dict);
- if (ctxt->attsSpecial == NULL)
- goto mem_error;
- }
-
- if (xmlHashLookup2(ctxt->attsSpecial, fullname, fullattr) != NULL)
- return;
-
- xmlHashAddEntry2(ctxt->attsSpecial, fullname, fullattr,
- (void *) (long) type);
- return;
-
-mem_error:
- xmlErrMemory(ctxt, NULL);
- return;
-}
-
-/**
- * xmlCleanSpecialAttrCallback:
- *
- * Removes CDATA attributes from the special attribute table
- */
-static void
-xmlCleanSpecialAttrCallback(void *payload, void *data,
- const xmlChar *fullname, const xmlChar *fullattr,
- const xmlChar *unused ATTRIBUTE_UNUSED) {
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) data;
-
- if (((long) payload) == XML_ATTRIBUTE_CDATA) {
- xmlHashRemoveEntry2(ctxt->attsSpecial, fullname, fullattr, NULL);
- }
-}
-
-/**
- * xmlCleanSpecialAttr:
- * @ctxt: an XML parser context
- *
- * Trim the list of attributes defined to remove all those of type
- * CDATA as they are not special. This call should be done when finishing
- * to parse the DTD and before starting to parse the document root.
- */
-static void
-xmlCleanSpecialAttr(xmlParserCtxtPtr ctxt)
-{
- if (ctxt->attsSpecial == NULL)
- return;
-
- xmlHashScanFull(ctxt->attsSpecial, xmlCleanSpecialAttrCallback, ctxt);
-
- if (xmlHashSize(ctxt->attsSpecial) == 0) {
- xmlHashFree(ctxt->attsSpecial, NULL);
- ctxt->attsSpecial = NULL;
- }
- return;
-}
-
-/**
- * xmlCheckLanguageID:
- * @lang: pointer to the string value
- *
- * Checks that the value conforms to the LanguageID production:
- *
- * NOTE: this is somewhat deprecated, those productions were removed from
- * the XML Second edition.
- *
- * [33] LanguageID ::= Langcode ('-' Subcode)*
- * [34] Langcode ::= ISO639Code | IanaCode | UserCode
- * [35] ISO639Code ::= ([a-z] | [A-Z]) ([a-z] | [A-Z])
- * [36] IanaCode ::= ('i' | 'I') '-' ([a-z] | [A-Z])+
- * [37] UserCode ::= ('x' | 'X') '-' ([a-z] | [A-Z])+
- * [38] Subcode ::= ([a-z] | [A-Z])+
- *
- * The current REC reference the sucessors of RFC 1766, currently 5646
- *
- * http://www.rfc-editor.org/rfc/rfc5646.txt
- * langtag = language
- * ["-" script]
- * ["-" region]
- * *("-" variant)
- * *("-" extension)
- * ["-" privateuse]
- * language = 2*3ALPHA ; shortest ISO 639 code
- * ["-" extlang] ; sometimes followed by
- * ; extended language subtags
- * / 4ALPHA ; or reserved for future use
- * / 5*8ALPHA ; or registered language subtag
- *
- * extlang = 3ALPHA ; selected ISO 639 codes
- * *2("-" 3ALPHA) ; permanently reserved
- *
- * script = 4ALPHA ; ISO 15924 code
- *
- * region = 2ALPHA ; ISO 3166-1 code
- * / 3DIGIT ; UN M.49 code
- *
- * variant = 5*8alphanum ; registered variants
- * / (DIGIT 3alphanum)
- *
- * extension = singleton 1*("-" (2*8alphanum))
- *
- * ; Single alphanumerics
- * ; "x" reserved for private use
- * singleton = DIGIT ; 0 - 9
- * / %x41-57 ; A - W
- * / %x59-5A ; Y - Z
- * / %x61-77 ; a - w
- * / %x79-7A ; y - z
- *
- * it sounds right to still allow Irregular i-xxx IANA and user codes too
- * The parser below doesn't try to cope with extension or privateuse
- * that could be added but that's not interoperable anyway
- *
- * Returns 1 if correct 0 otherwise
- **/
-int
-xmlCheckLanguageID(const xmlChar * lang)
-{
- const xmlChar *cur = lang, *nxt;
-
- if (cur == NULL)
- return (0);
- if (((cur[0] == 'i') && (cur[1] == '-')) ||
- ((cur[0] == 'I') && (cur[1] == '-')) ||
- ((cur[0] == 'x') && (cur[1] == '-')) ||
- ((cur[0] == 'X') && (cur[1] == '-'))) {
- /*
- * Still allow IANA code and user code which were coming
- * from the previous version of the XML-1.0 specification
- * it's deprecated but we should not fail
- */
- cur += 2;
- while (((cur[0] >= 'A') && (cur[0] <= 'Z')) ||
- ((cur[0] >= 'a') && (cur[0] <= 'z')))
- cur++;
- return(cur[0] == 0);
- }
- nxt = cur;
- while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) ||
- ((nxt[0] >= 'a') && (nxt[0] <= 'z')))
- nxt++;
- if (nxt - cur >= 4) {
- /*
- * Reserved
- */
- if ((nxt - cur > 8) || (nxt[0] != 0))
- return(0);
- return(1);
- }
- if (nxt - cur < 2)
- return(0);
- /* we got an ISO 639 code */
- if (nxt[0] == 0)
- return(1);
- if (nxt[0] != '-')
- return(0);
-
- nxt++;
- cur = nxt;
- /* now we can have extlang or script or region or variant */
- if ((nxt[0] >= '0') && (nxt[0] <= '9'))
- goto region_m49;
-
- while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) ||
- ((nxt[0] >= 'a') && (nxt[0] <= 'z')))
- nxt++;
- if (nxt - cur == 4)
- goto script;
- if (nxt - cur == 2)
- goto region;
- if ((nxt - cur >= 5) && (nxt - cur <= 8))
- goto variant;
- if (nxt - cur != 3)
- return(0);
- /* we parsed an extlang */
- if (nxt[0] == 0)
- return(1);
- if (nxt[0] != '-')
- return(0);
-
- nxt++;
- cur = nxt;
- /* now we can have script or region or variant */
- if ((nxt[0] >= '0') && (nxt[0] <= '9'))
- goto region_m49;
-
- while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) ||
- ((nxt[0] >= 'a') && (nxt[0] <= 'z')))
- nxt++;
- if (nxt - cur == 2)
- goto region;
- if ((nxt - cur >= 5) && (nxt - cur <= 8))
- goto variant;
- if (nxt - cur != 4)
- return(0);
- /* we parsed a script */
-script:
- if (nxt[0] == 0)
- return(1);
- if (nxt[0] != '-')
- return(0);
-
- nxt++;
- cur = nxt;
- /* now we can have region or variant */
- if ((nxt[0] >= '0') && (nxt[0] <= '9'))
- goto region_m49;
-
- while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) ||
- ((nxt[0] >= 'a') && (nxt[0] <= 'z')))
- nxt++;
-
- if ((nxt - cur >= 5) && (nxt - cur <= 8))
- goto variant;
- if (nxt - cur != 2)
- return(0);
- /* we parsed a region */
-region:
- if (nxt[0] == 0)
- return(1);
- if (nxt[0] != '-')
- return(0);
-
- nxt++;
- cur = nxt;
- /* now we can just have a variant */
- while (((nxt[0] >= 'A') && (nxt[0] <= 'Z')) ||
- ((nxt[0] >= 'a') && (nxt[0] <= 'z')))
- nxt++;
-
- if ((nxt - cur < 5) || (nxt - cur > 8))
- return(0);
-
- /* we parsed a variant */
-variant:
- if (nxt[0] == 0)
- return(1);
- if (nxt[0] != '-')
- return(0);
- /* extensions and private use subtags not checked */
- return (1);
-
-region_m49:
- if (((nxt[1] >= '0') && (nxt[1] <= '9')) &&
- ((nxt[2] >= '0') && (nxt[2] <= '9'))) {
- nxt += 3;
- goto region;
- }
- return(0);
-}
-
-/************************************************************************
- * *
- * Parser stacks related functions and macros *
- * *
- ************************************************************************/
-
-static xmlEntityPtr xmlParseStringEntityRef(xmlParserCtxtPtr ctxt,
- const xmlChar ** str);
-
-#ifdef SAX2
-/**
- * nsPush:
- * @ctxt: an XML parser context
- * @prefix: the namespace prefix or NULL
- * @URL: the namespace name
- *
- * Pushes a new parser namespace on top of the ns stack
- *
- * Returns -1 in case of error, -2 if the namespace should be discarded
- * and the index in the stack otherwise.
- */
-static int
-nsPush(xmlParserCtxtPtr ctxt, const xmlChar *prefix, const xmlChar *URL)
-{
- if (ctxt->options & XML_PARSE_NSCLEAN) {
- int i;
- for (i = ctxt->nsNr - 2;i >= 0;i -= 2) {
- if (ctxt->nsTab[i] == prefix) {
- /* in scope */
- if (ctxt->nsTab[i + 1] == URL)
- return(-2);
- /* out of scope keep it */
- break;
- }
- }
- }
- if ((ctxt->nsMax == 0) || (ctxt->nsTab == NULL)) {
- ctxt->nsMax = 10;
- ctxt->nsNr = 0;
- ctxt->nsTab = (const xmlChar **)
- xmlMalloc(ctxt->nsMax * sizeof(xmlChar *));
- if (ctxt->nsTab == NULL) {
- xmlErrMemory(ctxt, NULL);
- ctxt->nsMax = 0;
- return (-1);
- }
- } else if (ctxt->nsNr >= ctxt->nsMax) {
- const xmlChar ** tmp;
- ctxt->nsMax *= 2;
- tmp = (const xmlChar **) xmlRealloc((char *) ctxt->nsTab,
- ctxt->nsMax * sizeof(ctxt->nsTab[0]));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- ctxt->nsMax /= 2;
- return (-1);
- }
- ctxt->nsTab = tmp;
- }
- ctxt->nsTab[ctxt->nsNr++] = prefix;
- ctxt->nsTab[ctxt->nsNr++] = URL;
- return (ctxt->nsNr);
-}
-/**
- * nsPop:
- * @ctxt: an XML parser context
- * @nr: the number to pop
- *
- * Pops the top @nr parser prefix/namespace from the ns stack
- *
- * Returns the number of namespaces removed
- */
-static int
-nsPop(xmlParserCtxtPtr ctxt, int nr)
-{
- int i;
-
- if (ctxt->nsTab == NULL) return(0);
- if (ctxt->nsNr < nr) {
- xmlGenericError(xmlGenericErrorContext, "Pbm popping %d NS\n", nr);
- nr = ctxt->nsNr;
- }
- if (ctxt->nsNr <= 0)
- return (0);
-
- for (i = 0;i < nr;i++) {
- ctxt->nsNr--;
- ctxt->nsTab[ctxt->nsNr] = NULL;
- }
- return(nr);
-}
-#endif
-
-static int
-xmlCtxtGrowAttrs(xmlParserCtxtPtr ctxt, int nr) {
- const xmlChar **atts;
- int *attallocs;
- int maxatts;
-
- if (ctxt->atts == NULL) {
- maxatts = 55; /* allow for 10 attrs by default */
- atts = (const xmlChar **)
- xmlMalloc(maxatts * sizeof(xmlChar *));
- if (atts == NULL) goto mem_error;
- ctxt->atts = atts;
- attallocs = (int *) xmlMalloc((maxatts / 5) * sizeof(int));
- if (attallocs == NULL) goto mem_error;
- ctxt->attallocs = attallocs;
- ctxt->maxatts = maxatts;
- } else if (nr + 5 > ctxt->maxatts) {
- maxatts = (nr + 5) * 2;
- atts = (const xmlChar **) xmlRealloc((void *) ctxt->atts,
- maxatts * sizeof(const xmlChar *));
- if (atts == NULL) goto mem_error;
- ctxt->atts = atts;
- attallocs = (int *) xmlRealloc((void *) ctxt->attallocs,
- (maxatts / 5) * sizeof(int));
- if (attallocs == NULL) goto mem_error;
- ctxt->attallocs = attallocs;
- ctxt->maxatts = maxatts;
- }
- return(ctxt->maxatts);
-mem_error:
- xmlErrMemory(ctxt, NULL);
- return(-1);
-}
-
-/**
- * inputPush:
- * @ctxt: an XML parser context
- * @value: the parser input
- *
- * Pushes a new parser input on top of the input stack
- *
- * Returns -1 in case of error, the index in the stack otherwise
- */
-int
-inputPush(xmlParserCtxtPtr ctxt, xmlParserInputPtr value)
-{
- if ((ctxt == NULL) || (value == NULL))
- return(-1);
- if (ctxt->inputNr >= ctxt->inputMax) {
- ctxt->inputMax *= 2;
- ctxt->inputTab =
- (xmlParserInputPtr *) xmlRealloc(ctxt->inputTab,
- ctxt->inputMax *
- sizeof(ctxt->inputTab[0]));
- if (ctxt->inputTab == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFreeInputStream(value);
- ctxt->inputMax /= 2;
- value = NULL;
- return (-1);
- }
- }
- ctxt->inputTab[ctxt->inputNr] = value;
- ctxt->input = value;
- return (ctxt->inputNr++);
-}
-/**
- * inputPop:
- * @ctxt: an XML parser context
- *
- * Pops the top parser input from the input stack
- *
- * Returns the input just removed
- */
-xmlParserInputPtr
-inputPop(xmlParserCtxtPtr ctxt)
-{
- xmlParserInputPtr ret;
-
- if (ctxt == NULL)
- return(NULL);
- if (ctxt->inputNr <= 0)
- return (NULL);
- ctxt->inputNr--;
- if (ctxt->inputNr > 0)
- ctxt->input = ctxt->inputTab[ctxt->inputNr - 1];
- else
- ctxt->input = NULL;
- ret = ctxt->inputTab[ctxt->inputNr];
- ctxt->inputTab[ctxt->inputNr] = NULL;
- return (ret);
-}
-/**
- * nodePush:
- * @ctxt: an XML parser context
- * @value: the element node
- *
- * Pushes a new element node on top of the node stack
- *
- * Returns -1 in case of error, the index in the stack otherwise
- */
-int
-nodePush(xmlParserCtxtPtr ctxt, xmlNodePtr value)
-{
- if (ctxt == NULL) return(0);
- if (ctxt->nodeNr >= ctxt->nodeMax) {
- xmlNodePtr *tmp;
-
- tmp = (xmlNodePtr *) xmlRealloc(ctxt->nodeTab,
- ctxt->nodeMax * 2 *
- sizeof(ctxt->nodeTab[0]));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- return (-1);
- }
- ctxt->nodeTab = tmp;
- ctxt->nodeMax *= 2;
- }
- if ((((unsigned int) ctxt->nodeNr) > xmlParserMaxDepth) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_INTERNAL_ERROR,
- "Excessive depth in document: %d use XML_PARSE_HUGE option\n",
- xmlParserMaxDepth);
- xmlHaltParser(ctxt);
- return(-1);
- }
- ctxt->nodeTab[ctxt->nodeNr] = value;
- ctxt->node = value;
- return (ctxt->nodeNr++);
-}
-
-/**
- * nodePop:
- * @ctxt: an XML parser context
- *
- * Pops the top element node from the node stack
- *
- * Returns the node just removed
- */
-xmlNodePtr
-nodePop(xmlParserCtxtPtr ctxt)
-{
- xmlNodePtr ret;
-
- if (ctxt == NULL) return(NULL);
- if (ctxt->nodeNr <= 0)
- return (NULL);
- ctxt->nodeNr--;
- if (ctxt->nodeNr > 0)
- ctxt->node = ctxt->nodeTab[ctxt->nodeNr - 1];
- else
- ctxt->node = NULL;
- ret = ctxt->nodeTab[ctxt->nodeNr];
- ctxt->nodeTab[ctxt->nodeNr] = NULL;
- return (ret);
-}
-
-#ifdef LIBXML_PUSH_ENABLED
-/**
- * nameNsPush:
- * @ctxt: an XML parser context
- * @value: the element name
- * @prefix: the element prefix
- * @URI: the element namespace name
- *
- * Pushes a new element name/prefix/URL on top of the name stack
- *
- * Returns -1 in case of error, the index in the stack otherwise
- */
-static int
-nameNsPush(xmlParserCtxtPtr ctxt, const xmlChar * value,
- const xmlChar *prefix, const xmlChar *URI, int nsNr)
-{
- if (ctxt->nameNr >= ctxt->nameMax) {
- const xmlChar * *tmp;
- void **tmp2;
- ctxt->nameMax *= 2;
- tmp = (const xmlChar * *) xmlRealloc((xmlChar * *)ctxt->nameTab,
- ctxt->nameMax *
- sizeof(ctxt->nameTab[0]));
- if (tmp == NULL) {
- ctxt->nameMax /= 2;
- goto mem_error;
- }
- ctxt->nameTab = tmp;
- tmp2 = (void **) xmlRealloc((void * *)ctxt->pushTab,
- ctxt->nameMax * 3 *
- sizeof(ctxt->pushTab[0]));
- if (tmp2 == NULL) {
- ctxt->nameMax /= 2;
- goto mem_error;
- }
- ctxt->pushTab = tmp2;
- }
- ctxt->nameTab[ctxt->nameNr] = value;
- ctxt->name = value;
- ctxt->pushTab[ctxt->nameNr * 3] = (void *) prefix;
- ctxt->pushTab[ctxt->nameNr * 3 + 1] = (void *) URI;
- ctxt->pushTab[ctxt->nameNr * 3 + 2] = (void *) (long) nsNr;
- return (ctxt->nameNr++);
-mem_error:
- xmlErrMemory(ctxt, NULL);
- return (-1);
-}
-/**
- * nameNsPop:
- * @ctxt: an XML parser context
- *
- * Pops the top element/prefix/URI name from the name stack
- *
- * Returns the name just removed
- */
-static const xmlChar *
-nameNsPop(xmlParserCtxtPtr ctxt)
-{
- const xmlChar *ret;
-
- if (ctxt->nameNr <= 0)
- return (NULL);
- ctxt->nameNr--;
- if (ctxt->nameNr > 0)
- ctxt->name = ctxt->nameTab[ctxt->nameNr - 1];
- else
- ctxt->name = NULL;
- ret = ctxt->nameTab[ctxt->nameNr];
- ctxt->nameTab[ctxt->nameNr] = NULL;
- return (ret);
-}
-#endif /* LIBXML_PUSH_ENABLED */
-
-/**
- * namePush:
- * @ctxt: an XML parser context
- * @value: the element name
- *
- * Pushes a new element name on top of the name stack
- *
- * Returns -1 in case of error, the index in the stack otherwise
- */
-int
-namePush(xmlParserCtxtPtr ctxt, const xmlChar * value)
-{
- if (ctxt == NULL) return (-1);
-
- if (ctxt->nameNr >= ctxt->nameMax) {
- const xmlChar * *tmp;
- tmp = (const xmlChar * *) xmlRealloc((xmlChar * *)ctxt->nameTab,
- ctxt->nameMax * 2 *
- sizeof(ctxt->nameTab[0]));
- if (tmp == NULL) {
- goto mem_error;
- }
- ctxt->nameTab = tmp;
- ctxt->nameMax *= 2;
- }
- ctxt->nameTab[ctxt->nameNr] = value;
- ctxt->name = value;
- return (ctxt->nameNr++);
-mem_error:
- xmlErrMemory(ctxt, NULL);
- return (-1);
-}
-/**
- * namePop:
- * @ctxt: an XML parser context
- *
- * Pops the top element name from the name stack
- *
- * Returns the name just removed
- */
-const xmlChar *
-namePop(xmlParserCtxtPtr ctxt)
-{
- const xmlChar *ret;
-
- if ((ctxt == NULL) || (ctxt->nameNr <= 0))
- return (NULL);
- ctxt->nameNr--;
- if (ctxt->nameNr > 0)
- ctxt->name = ctxt->nameTab[ctxt->nameNr - 1];
- else
- ctxt->name = NULL;
- ret = ctxt->nameTab[ctxt->nameNr];
- ctxt->nameTab[ctxt->nameNr] = NULL;
- return (ret);
-}
-
-static int spacePush(xmlParserCtxtPtr ctxt, int val) {
- if (ctxt->spaceNr >= ctxt->spaceMax) {
- int *tmp;
-
- ctxt->spaceMax *= 2;
- tmp = (int *) xmlRealloc(ctxt->spaceTab,
- ctxt->spaceMax * sizeof(ctxt->spaceTab[0]));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- ctxt->spaceMax /=2;
- return(-1);
- }
- ctxt->spaceTab = tmp;
- }
- ctxt->spaceTab[ctxt->spaceNr] = val;
- ctxt->space = &ctxt->spaceTab[ctxt->spaceNr];
- return(ctxt->spaceNr++);
-}
-
-static int spacePop(xmlParserCtxtPtr ctxt) {
- int ret;
- if (ctxt->spaceNr <= 0) return(0);
- ctxt->spaceNr--;
- if (ctxt->spaceNr > 0)
- ctxt->space = &ctxt->spaceTab[ctxt->spaceNr - 1];
- else
- ctxt->space = &ctxt->spaceTab[0];
- ret = ctxt->spaceTab[ctxt->spaceNr];
- ctxt->spaceTab[ctxt->spaceNr] = -1;
- return(ret);
-}
-
-/*
- * Macros for accessing the content. Those should be used only by the parser,
- * and not exported.
- *
- * Dirty macros, i.e. one often need to make assumption on the context to
- * use them
- *
- * CUR_PTR return the current pointer to the xmlChar to be parsed.
- * To be used with extreme caution since operations consuming
- * characters may move the input buffer to a different location !
- * CUR returns the current xmlChar value, i.e. a 8 bit value if compiled
- * This should be used internally by the parser
- * only to compare to ASCII values otherwise it would break when
- * running with UTF-8 encoding.
- * RAW same as CUR but in the input buffer, bypass any token
- * extraction that may have been done
- * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
- * to compare on ASCII based substring.
- * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
- * strings without newlines within the parser.
- * NEXT1(l) Skip 1 xmlChar, and must also be used only to skip 1 non-newline ASCII
- * defined char within the parser.
- * Clean macros, not dependent of an ASCII context, expect UTF-8 encoding
- *
- * NEXT Skip to the next character, this does the proper decoding
- * in UTF-8 mode. It also pop-up unfinished entities on the fly.
- * NEXTL(l) Skip the current unicode character of l xmlChars long.
- * CUR_CHAR(l) returns the current unicode character (int), set l
- * to the number of xmlChars used for the encoding [0-5].
- * CUR_SCHAR same but operate on a string instead of the context
- * COPY_BUF copy the current unicode char to the target buffer, increment
- * the index
- * GROW, SHRINK handling of input buffers
- */
-
-#define RAW (*ctxt->input->cur)
-#define CUR (*ctxt->input->cur)
-#define NXT(val) ctxt->input->cur[(val)]
-#define CUR_PTR ctxt->input->cur
-#define BASE_PTR ctxt->input->base
-
-#define CMP4( s, c1, c2, c3, c4 ) \
- ( ((unsigned char *) s)[ 0 ] == c1 && ((unsigned char *) s)[ 1 ] == c2 && \
- ((unsigned char *) s)[ 2 ] == c3 && ((unsigned char *) s)[ 3 ] == c4 )
-#define CMP5( s, c1, c2, c3, c4, c5 ) \
- ( CMP4( s, c1, c2, c3, c4 ) && ((unsigned char *) s)[ 4 ] == c5 )
-#define CMP6( s, c1, c2, c3, c4, c5, c6 ) \
- ( CMP5( s, c1, c2, c3, c4, c5 ) && ((unsigned char *) s)[ 5 ] == c6 )
-#define CMP7( s, c1, c2, c3, c4, c5, c6, c7 ) \
- ( CMP6( s, c1, c2, c3, c4, c5, c6 ) && ((unsigned char *) s)[ 6 ] == c7 )
-#define CMP8( s, c1, c2, c3, c4, c5, c6, c7, c8 ) \
- ( CMP7( s, c1, c2, c3, c4, c5, c6, c7 ) && ((unsigned char *) s)[ 7 ] == c8 )
-#define CMP9( s, c1, c2, c3, c4, c5, c6, c7, c8, c9 ) \
- ( CMP8( s, c1, c2, c3, c4, c5, c6, c7, c8 ) && \
- ((unsigned char *) s)[ 8 ] == c9 )
-#define CMP10( s, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 ) \
- ( CMP9( s, c1, c2, c3, c4, c5, c6, c7, c8, c9 ) && \
- ((unsigned char *) s)[ 9 ] == c10 )
-
-#define SKIP(val) do { \
- ctxt->nbChars += (val),ctxt->input->cur += (val),ctxt->input->col+=(val); \
- if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \
- if ((*ctxt->input->cur == 0) && \
- (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) \
- xmlPopInput(ctxt); \
- } while (0)
-
-#define SKIPL(val) do { \
- int skipl; \
- for(skipl=0; skipl<val; skipl++) { \
- if (*(ctxt->input->cur) == '\n') { \
- ctxt->input->line++; ctxt->input->col = 1; \
- } else ctxt->input->col++; \
- ctxt->nbChars++; \
- ctxt->input->cur++; \
- } \
- if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \
- if ((*ctxt->input->cur == 0) && \
- (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) \
- xmlPopInput(ctxt); \
- } while (0)
-
-#define SHRINK if ((ctxt->progressive == 0) && \
- (ctxt->input->cur - ctxt->input->base > 2 * INPUT_CHUNK) && \
- (ctxt->input->end - ctxt->input->cur < 2 * INPUT_CHUNK)) \
- xmlSHRINK (ctxt);
-
-static void xmlSHRINK (xmlParserCtxtPtr ctxt) {
- xmlParserInputShrink(ctxt->input);
- if ((*ctxt->input->cur == 0) &&
- (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
- xmlPopInput(ctxt);
- }
-
-#define GROW if ((ctxt->progressive == 0) && \
- (ctxt->input->end - ctxt->input->cur < INPUT_CHUNK)) \
- xmlGROW (ctxt);
-
-static void xmlGROW (xmlParserCtxtPtr ctxt) {
- unsigned long curEnd = ctxt->input->end - ctxt->input->cur;
- unsigned long curBase = ctxt->input->cur - ctxt->input->base;
-
- if (((curEnd > (unsigned long) XML_MAX_LOOKUP_LIMIT) ||
- (curBase > (unsigned long) XML_MAX_LOOKUP_LIMIT)) &&
- ((ctxt->input->buf) && (ctxt->input->buf->readcallback != (xmlInputReadCallback) xmlNop)) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "Huge input lookup");
- xmlHaltParser(ctxt);
- return;
- }
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- if ((ctxt->input->cur > ctxt->input->end) ||
- (ctxt->input->cur < ctxt->input->base)) {
- xmlHaltParser(ctxt);
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "cur index out of bound");
- return;
- }
- if ((ctxt->input->cur != NULL) && (*ctxt->input->cur == 0) &&
- (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
- xmlPopInput(ctxt);
-}
-
-#define SKIP_BLANKS xmlSkipBlankChars(ctxt)
-
-#define NEXT xmlNextChar(ctxt)
-
-#define NEXT1 { \
- ctxt->input->col++; \
- ctxt->input->cur++; \
- ctxt->nbChars++; \
- if (*ctxt->input->cur == 0) \
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK); \
- }
-
-#define NEXTL(l) do { \
- if (*(ctxt->input->cur) == '\n') { \
- ctxt->input->line++; ctxt->input->col = 1; \
- } else ctxt->input->col++; \
- ctxt->input->cur += l; \
- if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt); \
- } while (0)
-
-#define CUR_CHAR(l) xmlCurrentChar(ctxt, &l)
-#define CUR_SCHAR(s, l) xmlStringCurrentChar(ctxt, s, &l)
-
-#define COPY_BUF(l,b,i,v) \
- if (l == 1) b[i++] = (xmlChar) v; \
- else i += xmlCopyCharMultiByte(&b[i],v)
-
-/**
- * xmlSkipBlankChars:
- * @ctxt: the XML parser context
- *
- * skip all blanks character found at that point in the input streams.
- * It pops up finished entities in the process if allowable at that point.
- *
- * Returns the number of space chars skipped
- */
-
-int
-xmlSkipBlankChars(xmlParserCtxtPtr ctxt) {
- int res = 0;
-
- /*
- * It's Okay to use CUR/NEXT here since all the blanks are on
- * the ASCII range.
- */
- if ((ctxt->inputNr == 1) && (ctxt->instate != XML_PARSER_DTD)) {
- const xmlChar *cur;
- /*
- * if we are in the document content, go really fast
- */
- cur = ctxt->input->cur;
- while (IS_BLANK_CH(*cur)) {
- if (*cur == '\n') {
- ctxt->input->line++; ctxt->input->col = 1;
- } else {
- ctxt->input->col++;
- }
- cur++;
- res++;
- if (*cur == 0) {
- ctxt->input->cur = cur;
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- }
- ctxt->input->cur = cur;
- } else {
- int cur;
- do {
- cur = CUR;
- while ((IS_BLANK_CH(cur) && /* CHECKED tstblanks.xml */
- (ctxt->instate != XML_PARSER_EOF))) {
- NEXT;
- cur = CUR;
- res++;
- }
- while ((cur == 0) && (ctxt->inputNr > 1) &&
- (ctxt->instate != XML_PARSER_COMMENT)) {
- xmlPopInput(ctxt);
- cur = CUR;
- }
- /*
- * Need to handle support of entities branching here
- */
- if (*ctxt->input->cur == '%') xmlParserHandlePEReference(ctxt);
- } while ((IS_BLANK(cur)) && /* CHECKED tstblanks.xml */
- (ctxt->instate != XML_PARSER_EOF));
- }
- return(res);
-}
-
-/************************************************************************
- * *
- * Commodity functions to handle entities *
- * *
- ************************************************************************/
-
-/**
- * xmlPopInput:
- * @ctxt: an XML parser context
- *
- * xmlPopInput: the current input pointed by ctxt->input came to an end
- * pop it and return the next char.
- *
- * Returns the current xmlChar in the parser context
- */
-xmlChar
-xmlPopInput(xmlParserCtxtPtr ctxt) {
- if ((ctxt == NULL) || (ctxt->inputNr <= 1)) return(0);
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "Popping input %d\n", ctxt->inputNr);
- xmlFreeInputStream(inputPop(ctxt));
- if ((*ctxt->input->cur == 0) &&
- (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
- return(xmlPopInput(ctxt));
- return(CUR);
-}
-
-/**
- * xmlPushInput:
- * @ctxt: an XML parser context
- * @input: an XML parser input fragment (entity, XML fragment ...).
- *
- * xmlPushInput: switch to a new input stream which is stacked on top
- * of the previous one(s).
- * Returns -1 in case of error or the index in the input stack
- */
-int
-xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input) {
- int ret;
- if (input == NULL) return(-1);
-
- if (xmlParserDebugEntities) {
- if ((ctxt->input != NULL) && (ctxt->input->filename))
- xmlGenericError(xmlGenericErrorContext,
- "%s(%d): ", ctxt->input->filename,
- ctxt->input->line);
- xmlGenericError(xmlGenericErrorContext,
- "Pushing input %d : %.30s\n", ctxt->inputNr+1, input->cur);
- }
- ret = inputPush(ctxt, input);
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
- GROW;
- return(ret);
-}
-
-/**
- * xmlParseCharRef:
- * @ctxt: an XML parser context
- *
- * parse Reference declarations
- *
- * [66] CharRef ::= '&#' [0-9]+ ';' |
- * '&#x' [0-9a-fA-F]+ ';'
- *
- * [ WFC: Legal Character ]
- * Characters referred to using character references must match the
- * production for Char.
- *
- * Returns the value parsed (as an int), 0 in case of error
- */
-int
-xmlParseCharRef(xmlParserCtxtPtr ctxt) {
- unsigned int val = 0;
- int count = 0;
- unsigned int outofrange = 0;
-
- /*
- * Using RAW/CUR/NEXT is okay since we are working on ASCII range here
- */
- if ((RAW == '&') && (NXT(1) == '#') &&
- (NXT(2) == 'x')) {
- SKIP(3);
- GROW;
- while (RAW != ';') { /* loop blocked by count */
- if (count++ > 20) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(0);
- }
- if ((RAW >= '0') && (RAW <= '9'))
- val = val * 16 + (CUR - '0');
- else if ((RAW >= 'a') && (RAW <= 'f') && (count < 20))
- val = val * 16 + (CUR - 'a') + 10;
- else if ((RAW >= 'A') && (RAW <= 'F') && (count < 20))
- val = val * 16 + (CUR - 'A') + 10;
- else {
- xmlFatalErr(ctxt, XML_ERR_INVALID_HEX_CHARREF, NULL);
- val = 0;
- break;
- }
- if (val > 0x10FFFF)
- outofrange = val;
-
- NEXT;
- count++;
- }
- if (RAW == ';') {
- /* on purpose to avoid reentrancy problems with NEXT and SKIP */
- ctxt->input->col++;
- ctxt->nbChars ++;
- ctxt->input->cur++;
- }
- } else if ((RAW == '&') && (NXT(1) == '#')) {
- SKIP(2);
- GROW;
- while (RAW != ';') { /* loop blocked by count */
- if (count++ > 20) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(0);
- }
- if ((RAW >= '0') && (RAW <= '9'))
- val = val * 10 + (CUR - '0');
- else {
- xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL);
- val = 0;
- break;
- }
- if (val > 0x10FFFF)
- outofrange = val;
-
- NEXT;
- count++;
- }
- if (RAW == ';') {
- /* on purpose to avoid reentrancy problems with NEXT and SKIP */
- ctxt->input->col++;
- ctxt->nbChars ++;
- ctxt->input->cur++;
- }
- } else {
- xmlFatalErr(ctxt, XML_ERR_INVALID_CHARREF, NULL);
- }
-
- /*
- * [ WFC: Legal Character ]
- * Characters referred to using character references must match the
- * production for Char.
- */
- if ((IS_CHAR(val) && (outofrange == 0))) {
- return(val);
- } else {
- xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
- "xmlParseCharRef: invalid xmlChar value %d\n",
- val);
- }
- return(0);
-}
-
-/**
- * xmlParseStringCharRef:
- * @ctxt: an XML parser context
- * @str: a pointer to an index in the string
- *
- * parse Reference declarations, variant parsing from a string rather
- * than an an input flow.
- *
- * [66] CharRef ::= '&#' [0-9]+ ';' |
- * '&#x' [0-9a-fA-F]+ ';'
- *
- * [ WFC: Legal Character ]
- * Characters referred to using character references must match the
- * production for Char.
- *
- * Returns the value parsed (as an int), 0 in case of error, str will be
- * updated to the current value of the index
- */
-static int
-xmlParseStringCharRef(xmlParserCtxtPtr ctxt, const xmlChar **str) {
- const xmlChar *ptr;
- xmlChar cur;
- unsigned int val = 0;
- unsigned int outofrange = 0;
-
- if ((str == NULL) || (*str == NULL)) return(0);
- ptr = *str;
- cur = *ptr;
- if ((cur == '&') && (ptr[1] == '#') && (ptr[2] == 'x')) {
- ptr += 3;
- cur = *ptr;
- while (cur != ';') { /* Non input consuming loop */
- if ((cur >= '0') && (cur <= '9'))
- val = val * 16 + (cur - '0');
- else if ((cur >= 'a') && (cur <= 'f'))
- val = val * 16 + (cur - 'a') + 10;
- else if ((cur >= 'A') && (cur <= 'F'))
- val = val * 16 + (cur - 'A') + 10;
- else {
- xmlFatalErr(ctxt, XML_ERR_INVALID_HEX_CHARREF, NULL);
- val = 0;
- break;
- }
- if (val > 0x10FFFF)
- outofrange = val;
-
- ptr++;
- cur = *ptr;
- }
- if (cur == ';')
- ptr++;
- } else if ((cur == '&') && (ptr[1] == '#')){
- ptr += 2;
- cur = *ptr;
- while (cur != ';') { /* Non input consuming loops */
- if ((cur >= '0') && (cur <= '9'))
- val = val * 10 + (cur - '0');
- else {
- xmlFatalErr(ctxt, XML_ERR_INVALID_DEC_CHARREF, NULL);
- val = 0;
- break;
- }
- if (val > 0x10FFFF)
- outofrange = val;
-
- ptr++;
- cur = *ptr;
- }
- if (cur == ';')
- ptr++;
- } else {
- xmlFatalErr(ctxt, XML_ERR_INVALID_CHARREF, NULL);
- return(0);
- }
- *str = ptr;
-
- /*
- * [ WFC: Legal Character ]
- * Characters referred to using character references must match the
- * production for Char.
- */
- if ((IS_CHAR(val) && (outofrange == 0))) {
- return(val);
- } else {
- xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
- "xmlParseStringCharRef: invalid xmlChar value %d\n",
- val);
- }
- return(0);
-}
-
-/**
- * xmlNewBlanksWrapperInputStream:
- * @ctxt: an XML parser context
- * @entity: an Entity pointer
- *
- * Create a new input stream for wrapping
- * blanks around a PEReference
- *
- * Returns the new input stream or NULL
- */
-
-static void deallocblankswrapper (xmlChar *str) {xmlFree(str);}
-
-static xmlParserInputPtr
-xmlNewBlanksWrapperInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
- xmlParserInputPtr input;
- xmlChar *buffer;
- size_t length;
- if (entity == NULL) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlNewBlanksWrapperInputStream entity\n");
- return(NULL);
- }
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "new blanks wrapper for entity: %s\n", entity->name);
- input = xmlNewInputStream(ctxt);
- if (input == NULL) {
- return(NULL);
- }
- length = xmlStrlen(entity->name) + 5;
- buffer = xmlMallocAtomic(length);
- if (buffer == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFree(input);
- return(NULL);
- }
- buffer [0] = ' ';
- buffer [1] = '%';
- buffer [length-3] = ';';
- buffer [length-2] = ' ';
- buffer [length-1] = 0;
- memcpy(buffer + 2, entity->name, length - 5);
- input->free = deallocblankswrapper;
- input->base = buffer;
- input->cur = buffer;
- input->length = length;
- input->end = &buffer[length];
- return(input);
-}
-
-/**
- * xmlParserHandlePEReference:
- * @ctxt: the parser context
- *
- * [69] PEReference ::= '%' Name ';'
- *
- * [ WFC: No Recursion ]
- * A parsed entity must not contain a recursive
- * reference to itself, either directly or indirectly.
- *
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an internal DTD
- * subset which contains no parameter entity references, or a document
- * with "standalone='yes'", ... ... The declaration of a parameter
- * entity must precede any reference to it...
- *
- * [ VC: Entity Declared ]
- * In a document with an external subset or external parameter entities
- * with "standalone='no'", ... ... The declaration of a parameter entity
- * must precede any reference to it...
- *
- * [ WFC: In DTD ]
- * Parameter-entity references may only appear in the DTD.
- * NOTE: misleading but this is handled.
- *
- * A PEReference may have been detected in the current input stream
- * the handling is done accordingly to
- * http://www.w3.org/TR/REC-xml#entproc
- * i.e.
- * - Included in literal in entity values
- * - Included as Parameter Entity reference within DTDs
- */
-void
-xmlParserHandlePEReference(xmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- xmlEntityPtr entity = NULL;
- xmlParserInputPtr input;
-
- if (RAW != '%') return;
- switch(ctxt->instate) {
- case XML_PARSER_CDATA_SECTION:
- return;
- case XML_PARSER_COMMENT:
- return;
- case XML_PARSER_START_TAG:
- return;
- case XML_PARSER_END_TAG:
- return;
- case XML_PARSER_EOF:
- xmlFatalErr(ctxt, XML_ERR_PEREF_AT_EOF, NULL);
- return;
- case XML_PARSER_PROLOG:
- case XML_PARSER_START:
- case XML_PARSER_MISC:
- xmlFatalErr(ctxt, XML_ERR_PEREF_IN_PROLOG, NULL);
- return;
- case XML_PARSER_ENTITY_DECL:
- case XML_PARSER_CONTENT:
- case XML_PARSER_ATTRIBUTE_VALUE:
- case XML_PARSER_PI:
- case XML_PARSER_SYSTEM_LITERAL:
- case XML_PARSER_PUBLIC_LITERAL:
- /* we just ignore it there */
- return;
- case XML_PARSER_EPILOG:
- xmlFatalErr(ctxt, XML_ERR_PEREF_IN_EPILOG, NULL);
- return;
- case XML_PARSER_ENTITY_VALUE:
- /*
- * NOTE: in the case of entity values, we don't do the
- * substitution here since we need the literal
- * entity value to be able to save the internal
- * subset of the document.
- * This will be handled by xmlStringDecodeEntities
- */
- return;
- case XML_PARSER_DTD:
- /*
- * [WFC: Well-Formedness Constraint: PEs in Internal Subset]
- * In the internal DTD subset, parameter-entity references
- * can occur only where markup declarations can occur, not
- * within markup declarations.
- * In that case this is handled in xmlParseMarkupDecl
- */
- if ((ctxt->external == 0) && (ctxt->inputNr == 1))
- return;
- if (IS_BLANK_CH(NXT(1)) || NXT(1) == 0)
- return;
- break;
- case XML_PARSER_IGNORE:
- return;
- }
-
- NEXT;
- name = xmlParseName(ctxt);
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "PEReference: %s\n", name);
- if (name == NULL) {
- xmlFatalErr(ctxt, XML_ERR_PEREF_NO_NAME, NULL);
- } else {
- if (RAW == ';') {
- NEXT;
- if ((ctxt->sax != NULL) && (ctxt->sax->getParameterEntity != NULL))
- entity = ctxt->sax->getParameterEntity(ctxt->userData, name);
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- if (entity == NULL) {
-
- /*
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an
- * internal DTD subset which contains no parameter entity
- * references, or a document with "standalone='yes'", ...
- * ... The declaration of a parameter entity must precede
- * any reference to it...
- */
- if ((ctxt->standalone == 1) ||
- ((ctxt->hasExternalSubset == 0) &&
- (ctxt->hasPErefs == 0))) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
- "PEReference: %%%s; not found\n", name);
- } else {
- /*
- * [ VC: Entity Declared ]
- * In a document with an external subset or external
- * parameter entities with "standalone='no'", ...
- * ... The declaration of a parameter entity must precede
- * any reference to it...
- */
- if ((ctxt->validate) && (ctxt->vctxt.error != NULL)) {
- xmlValidityError(ctxt, XML_WAR_UNDECLARED_ENTITY,
- "PEReference: %%%s; not found\n",
- name, NULL);
- } else
- xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
- "PEReference: %%%s; not found\n",
- name, NULL);
- ctxt->valid = 0;
- }
- xmlParserEntityCheck(ctxt, 0, NULL, 0);
- } else if (ctxt->input->free != deallocblankswrapper) {
- input = xmlNewBlanksWrapperInputStream(ctxt, entity);
- if (xmlPushInput(ctxt, input) < 0)
- return;
- } else {
- if ((entity->etype == XML_INTERNAL_PARAMETER_ENTITY) ||
- (entity->etype == XML_EXTERNAL_PARAMETER_ENTITY)) {
- xmlChar start[4];
- xmlCharEncoding enc;
-
- /*
- * Note: external parameter entities will not be loaded, it
- * is not required for a non-validating parser, unless the
- * option of validating, or substituting entities were
- * given. Doing so is far more secure as the parser will
- * only process data coming from the document entity by
- * default.
- */
- if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
- ((ctxt->options & XML_PARSE_NOENT) == 0) &&
- ((ctxt->options & XML_PARSE_DTDVALID) == 0) &&
- ((ctxt->options & XML_PARSE_DTDLOAD) == 0) &&
- ((ctxt->options & XML_PARSE_DTDATTR) == 0) &&
- (ctxt->replaceEntities == 0) &&
- (ctxt->validate == 0))
- return;
-
- /*
- * handle the extra spaces added before and after
- * c.f. http://www.w3.org/TR/REC-xml#as-PE
- * this is done independently.
- */
- input = xmlNewEntityInputStream(ctxt, entity);
- if (xmlPushInput(ctxt, input) < 0)
- return;
-
- /*
- * Get the 4 first bytes and decode the charset
- * if enc != XML_CHAR_ENCODING_NONE
- * plug some encoding conversion routines.
- * Note that, since we may have some non-UTF8
- * encoding (like UTF16, bug 135229), the 'length'
- * is not known, but we can calculate based upon
- * the amount of data in the buffer.
- */
- GROW
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- if ((ctxt->input->end - ctxt->input->cur)>=4) {
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(start, 4);
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
- }
-
- if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
- (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l' )) &&
- (IS_BLANK_CH(NXT(5)))) {
- xmlParseTextDecl(ctxt);
- }
- } else {
- xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER,
- "PEReference: %s is not a parameter entity\n",
- name);
- }
- }
- } else {
- xmlFatalErr(ctxt, XML_ERR_PEREF_SEMICOL_MISSING, NULL);
- }
- }
-}
-
-/*
- * Macro used to grow the current buffer.
- * buffer##_size is expected to be a size_t
- * mem_error: is expected to handle memory allocation failures
- */
-#define growBuffer(buffer, n) { \
- xmlChar *tmp; \
- size_t new_size = buffer##_size * 2 + n; \
- if (new_size < buffer##_size) goto mem_error; \
- tmp = (xmlChar *) xmlRealloc(buffer, new_size); \
- if (tmp == NULL) goto mem_error; \
- buffer = tmp; \
- buffer##_size = new_size; \
-}
-
-/**
- * xmlStringLenDecodeEntities:
- * @ctxt: the parser context
- * @str: the input string
- * @len: the string length
- * @what: combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF
- * @end: an end marker xmlChar, 0 if none
- * @end2: an end marker xmlChar, 0 if none
- * @end3: an end marker xmlChar, 0 if none
- *
- * Takes a entity string content and process to do the adequate substitutions.
- *
- * [67] Reference ::= EntityRef | CharRef
- *
- * [69] PEReference ::= '%' Name ';'
- *
- * Returns A newly allocated string with the substitution done. The caller
- * must deallocate it !
- */
-xmlChar *
-xmlStringLenDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
- int what, xmlChar end, xmlChar end2, xmlChar end3) {
- xmlChar *buffer = NULL;
- size_t buffer_size = 0;
- size_t nbchars = 0;
-
- xmlChar *current = NULL;
- xmlChar *rep = NULL;
- const xmlChar *last;
- xmlEntityPtr ent;
- int c,l;
-
- if ((ctxt == NULL) || (str == NULL) || (len < 0))
- return(NULL);
- last = str + len;
-
- if (((ctxt->depth > 40) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) ||
- (ctxt->depth > 1024)) {
- xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
- return(NULL);
- }
-
- /*
- * allocate a translation buffer.
- */
- buffer_size = XML_PARSER_BIG_BUFFER_SIZE;
- buffer = (xmlChar *) xmlMallocAtomic(buffer_size);
- if (buffer == NULL) goto mem_error;
-
- /*
- * OK loop until we reach one of the ending char or a size limit.
- * we are operating on already parsed values.
- */
- if (str < last)
- c = CUR_SCHAR(str, l);
- else
- c = 0;
- while ((c != 0) && (c != end) && /* non input consuming loop */
- (c != end2) && (c != end3)) {
-
- if (c == 0) break;
- if ((c == '&') && (str[1] == '#')) {
- int val = xmlParseStringCharRef(ctxt, &str);
- if (val != 0) {
- COPY_BUF(0,buffer,nbchars,val);
- }
- if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
- growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
- }
- } else if ((c == '&') && (what & XML_SUBSTITUTE_REF)) {
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "String decoding Entity Reference: %.30s\n",
- str);
- ent = xmlParseStringEntityRef(ctxt, &str);
- if ((ctxt->lastError.code == XML_ERR_ENTITY_LOOP) ||
- (ctxt->lastError.code == XML_ERR_INTERNAL_ERROR))
- goto int_error;
- xmlParserEntityCheck(ctxt, 0, ent, 0);
- if (ent != NULL)
- ctxt->nbentities += ent->checked / 2;
- if ((ent != NULL) &&
- (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
- if (ent->content != NULL) {
- COPY_BUF(0,buffer,nbchars,ent->content[0]);
- if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
- growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
- }
- } else {
- xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
- "predefined entity has no content\n");
- }
- } else if ((ent != NULL) && (ent->content != NULL)) {
- ctxt->depth++;
- rep = xmlStringDecodeEntities(ctxt, ent->content, what,
- 0, 0, 0);
- ctxt->depth--;
-
- if ((ctxt->lastError.code == XML_ERR_ENTITY_LOOP) ||
- (ctxt->lastError.code == XML_ERR_INTERNAL_ERROR))
- goto int_error;
-
- if (rep != NULL) {
- current = rep;
- while (*current != 0) { /* non input consuming loop */
- buffer[nbchars++] = *current++;
- if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
- if (xmlParserEntityCheck(ctxt, nbchars, ent, 0))
- goto int_error;
- growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
- }
- }
- xmlFree(rep);
- rep = NULL;
- }
- } else if (ent != NULL) {
- int i = xmlStrlen(ent->name);
- const xmlChar *cur = ent->name;
-
- buffer[nbchars++] = '&';
- if (nbchars + i + XML_PARSER_BUFFER_SIZE > buffer_size) {
- growBuffer(buffer, i + XML_PARSER_BUFFER_SIZE);
- }
- for (;i > 0;i--)
- buffer[nbchars++] = *cur++;
- buffer[nbchars++] = ';';
- }
- } else if (c == '%' && (what & XML_SUBSTITUTE_PEREF)) {
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "String decoding PE Reference: %.30s\n", str);
- ent = xmlParseStringPEReference(ctxt, &str);
- if (ctxt->lastError.code == XML_ERR_ENTITY_LOOP)
- goto int_error;
- xmlParserEntityCheck(ctxt, 0, ent, 0);
- if (ent != NULL)
- ctxt->nbentities += ent->checked / 2;
- if (ent != NULL) {
- if (ent->content == NULL) {
- /*
- * Note: external parsed entities will not be loaded,
- * it is not required for a non-validating parser to
- * complete external PEreferences coming from the
- * internal subset
- */
- if (((ctxt->options & XML_PARSE_NOENT) != 0) ||
- ((ctxt->options & XML_PARSE_DTDVALID) != 0) ||
- (ctxt->validate != 0)) {
- xmlLoadEntityContent(ctxt, ent);
- } else {
- xmlWarningMsg(ctxt, XML_ERR_ENTITY_PROCESSING,
- "not validating will not read content for PE entity %s\n",
- ent->name, NULL);
- }
- }
- ctxt->depth++;
- rep = xmlStringDecodeEntities(ctxt, ent->content, what,
- 0, 0, 0);
- ctxt->depth--;
- if (rep != NULL) {
- current = rep;
- while (*current != 0) { /* non input consuming loop */
- buffer[nbchars++] = *current++;
- if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
- if (xmlParserEntityCheck(ctxt, nbchars, ent, 0))
- goto int_error;
- growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
- }
- }
- xmlFree(rep);
- rep = NULL;
- }
- }
- } else {
- COPY_BUF(l,buffer,nbchars,c);
- str += l;
- if (nbchars + XML_PARSER_BUFFER_SIZE > buffer_size) {
- growBuffer(buffer, XML_PARSER_BUFFER_SIZE);
- }
- }
- if (str < last)
- c = CUR_SCHAR(str, l);
- else
- c = 0;
- }
- buffer[nbchars] = 0;
- return(buffer);
-
-mem_error:
- xmlErrMemory(ctxt, NULL);
-int_error:
- if (rep != NULL)
- xmlFree(rep);
- if (buffer != NULL)
- xmlFree(buffer);
- return(NULL);
-}
-
-/**
- * xmlStringDecodeEntities:
- * @ctxt: the parser context
- * @str: the input string
- * @what: combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF
- * @end: an end marker xmlChar, 0 if none
- * @end2: an end marker xmlChar, 0 if none
- * @end3: an end marker xmlChar, 0 if none
- *
- * Takes a entity string content and process to do the adequate substitutions.
- *
- * [67] Reference ::= EntityRef | CharRef
- *
- * [69] PEReference ::= '%' Name ';'
- *
- * Returns A newly allocated string with the substitution done. The caller
- * must deallocate it !
- */
-xmlChar *
-xmlStringDecodeEntities(xmlParserCtxtPtr ctxt, const xmlChar *str, int what,
- xmlChar end, xmlChar end2, xmlChar end3) {
- if ((ctxt == NULL) || (str == NULL)) return(NULL);
- return(xmlStringLenDecodeEntities(ctxt, str, xmlStrlen(str), what,
- end, end2, end3));
-}
-
-/************************************************************************
- * *
- * Commodity functions, cleanup needed ? *
- * *
- ************************************************************************/
-
-/**
- * areBlanks:
- * @ctxt: an XML parser context
- * @str: a xmlChar *
- * @len: the size of @str
- * @blank_chars: we know the chars are blanks
- *
- * Is this a sequence of blank chars that one can ignore ?
- *
- * Returns 1 if ignorable 0 otherwise.
- */
-
-static int areBlanks(xmlParserCtxtPtr ctxt, const xmlChar *str, int len,
- int blank_chars) {
- int i, ret;
- xmlNodePtr lastChild;
-
- /*
- * Don't spend time trying to differentiate them, the same callback is
- * used !
- */
- if (ctxt->sax->ignorableWhitespace == ctxt->sax->characters)
- return(0);
-
- /*
- * Check for xml:space value.
- */
- if ((ctxt->space == NULL) || (*(ctxt->space) == 1) ||
- (*(ctxt->space) == -2))
- return(0);
-
- /*
- * Check that the string is made of blanks
- */
- if (blank_chars == 0) {
- for (i = 0;i < len;i++)
- if (!(IS_BLANK_CH(str[i]))) return(0);
- }
-
- /*
- * Look if the element is mixed content in the DTD if available
- */
- if (ctxt->node == NULL) return(0);
- if (ctxt->myDoc != NULL) {
- ret = xmlIsMixedElement(ctxt->myDoc, ctxt->node->name);
- if (ret == 0) return(1);
- if (ret == 1) return(0);
- }
-
- /*
- * Otherwise, heuristic :-\
- */
- if ((RAW != '<') && (RAW != 0xD)) return(0);
- if ((ctxt->node->children == NULL) &&
- (RAW == '<') && (NXT(1) == '/')) return(0);
-
- lastChild = xmlGetLastChild(ctxt->node);
- if (lastChild == NULL) {
- if ((ctxt->node->type != XML_ELEMENT_NODE) &&
- (ctxt->node->content != NULL)) return(0);
- } else if (xmlNodeIsText(lastChild))
- return(0);
- else if ((ctxt->node->children != NULL) &&
- (xmlNodeIsText(ctxt->node->children)))
- return(0);
- return(1);
-}
-
-/************************************************************************
- * *
- * Extra stuff for namespace support *
- * Relates to http://www.w3.org/TR/WD-xml-names *
- * *
- ************************************************************************/
-
-/**
- * xmlSplitQName:
- * @ctxt: an XML parser context
- * @name: an XML parser context
- * @prefix: a xmlChar **
- *
- * parse an UTF8 encoded XML qualified name string
- *
- * [NS 5] QName ::= (Prefix ':')? LocalPart
- *
- * [NS 6] Prefix ::= NCName
- *
- * [NS 7] LocalPart ::= NCName
- *
- * Returns the local part, and prefix is updated
- * to get the Prefix if any.
- */
-
-xmlChar *
-xmlSplitQName(xmlParserCtxtPtr ctxt, const xmlChar *name, xmlChar **prefix) {
- xmlChar buf[XML_MAX_NAMELEN + 5];
- xmlChar *buffer = NULL;
- int len = 0;
- int max = XML_MAX_NAMELEN;
- xmlChar *ret = NULL;
- const xmlChar *cur = name;
- int c;
-
- if (prefix == NULL) return(NULL);
- *prefix = NULL;
-
- if (cur == NULL) return(NULL);
-
-#ifndef XML_XML_NAMESPACE
- /* xml: prefix is not really a namespace */
- if ((cur[0] == 'x') && (cur[1] == 'm') &&
- (cur[2] == 'l') && (cur[3] == ':'))
- return(xmlStrdup(name));
-#endif
-
- /* nasty but well=formed */
- if (cur[0] == ':')
- return(xmlStrdup(name));
-
- c = *cur++;
- while ((c != 0) && (c != ':') && (len < max)) { /* tested bigname.xml */
- buf[len++] = c;
- c = *cur++;
- }
- if (len >= max) {
- /*
- * Okay someone managed to make a huge name, so he's ready to pay
- * for the processing speed.
- */
- max = len * 2;
-
- buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
- if (buffer == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- memcpy(buffer, buf, len);
- while ((c != 0) && (c != ':')) { /* tested bigname.xml */
- if (len + 10 > max) {
- xmlChar *tmp;
-
- max *= 2;
- tmp = (xmlChar *) xmlRealloc(buffer,
- max * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlFree(buffer);
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- buffer = tmp;
- }
- buffer[len++] = c;
- c = *cur++;
- }
- buffer[len] = 0;
- }
-
- if ((c == ':') && (*cur == 0)) {
- if (buffer != NULL)
- xmlFree(buffer);
- *prefix = NULL;
- return(xmlStrdup(name));
- }
-
- if (buffer == NULL)
- ret = xmlStrndup(buf, len);
- else {
- ret = buffer;
- buffer = NULL;
- max = XML_MAX_NAMELEN;
- }
-
-
- if (c == ':') {
- c = *cur;
- *prefix = ret;
- if (c == 0) {
- return(xmlStrndup(BAD_CAST "", 0));
- }
- len = 0;
-
- /*
- * Check that the first character is proper to start
- * a new name
- */
- if (!(((c >= 0x61) && (c <= 0x7A)) ||
- ((c >= 0x41) && (c <= 0x5A)) ||
- (c == '_') || (c == ':'))) {
- int l;
- int first = CUR_SCHAR(cur, l);
-
- if (!IS_LETTER(first) && (first != '_')) {
- xmlFatalErrMsgStr(ctxt, XML_NS_ERR_QNAME,
- "Name %s is not XML Namespace compliant\n",
- name);
- }
- }
- cur++;
-
- while ((c != 0) && (len < max)) { /* tested bigname2.xml */
- buf[len++] = c;
- c = *cur++;
- }
- if (len >= max) {
- /*
- * Okay someone managed to make a huge name, so he's ready to pay
- * for the processing speed.
- */
- max = len * 2;
-
- buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
- if (buffer == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- memcpy(buffer, buf, len);
- while (c != 0) { /* tested bigname2.xml */
- if (len + 10 > max) {
- xmlChar *tmp;
-
- max *= 2;
- tmp = (xmlChar *) xmlRealloc(buffer,
- max * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFree(buffer);
- return(NULL);
- }
- buffer = tmp;
- }
- buffer[len++] = c;
- c = *cur++;
- }
- buffer[len] = 0;
- }
-
- if (buffer == NULL)
- ret = xmlStrndup(buf, len);
- else {
- ret = buffer;
- }
- }
-
- return(ret);
-}
-
-/************************************************************************
- * *
- * The parser itself *
- * Relates to http://www.w3.org/TR/REC-xml *
- * *
- ************************************************************************/
-
-/************************************************************************
- * *
- * Routines to parse Name, NCName and NmToken *
- * *
- ************************************************************************/
-#ifdef DEBUG
-static unsigned long nbParseName = 0;
-static unsigned long nbParseNmToken = 0;
-static unsigned long nbParseNCName = 0;
-static unsigned long nbParseNCNameComplex = 0;
-static unsigned long nbParseNameComplex = 0;
-static unsigned long nbParseStringName = 0;
-#endif
-
-/*
- * The two following functions are related to the change of accepted
- * characters for Name and NmToken in the Revision 5 of XML-1.0
- * They correspond to the modified production [4] and the new production [4a]
- * changes in that revision. Also note that the macros used for the
- * productions Letter, Digit, CombiningChar and Extender are not needed
- * anymore.
- * We still keep compatibility to pre-revision5 parsing semantic if the
- * new XML_PARSE_OLD10 option is given to the parser.
- */
-static int
-xmlIsNameStartChar(xmlParserCtxtPtr ctxt, int c) {
- if ((ctxt->options & XML_PARSE_OLD10) == 0) {
- /*
- * Use the new checks of production [4] [4a] amd [5] of the
- * Update 5 of XML-1.0
- */
- if ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */
- (((c >= 'a') && (c <= 'z')) ||
- ((c >= 'A') && (c <= 'Z')) ||
- (c == '_') || (c == ':') ||
- ((c >= 0xC0) && (c <= 0xD6)) ||
- ((c >= 0xD8) && (c <= 0xF6)) ||
- ((c >= 0xF8) && (c <= 0x2FF)) ||
- ((c >= 0x370) && (c <= 0x37D)) ||
- ((c >= 0x37F) && (c <= 0x1FFF)) ||
- ((c >= 0x200C) && (c <= 0x200D)) ||
- ((c >= 0x2070) && (c <= 0x218F)) ||
- ((c >= 0x2C00) && (c <= 0x2FEF)) ||
- ((c >= 0x3001) && (c <= 0xD7FF)) ||
- ((c >= 0xF900) && (c <= 0xFDCF)) ||
- ((c >= 0xFDF0) && (c <= 0xFFFD)) ||
- ((c >= 0x10000) && (c <= 0xEFFFF))))
- return(1);
- } else {
- if (IS_LETTER(c) || (c == '_') || (c == ':'))
- return(1);
- }
- return(0);
-}
-
-static int
-xmlIsNameChar(xmlParserCtxtPtr ctxt, int c) {
- if ((ctxt->options & XML_PARSE_OLD10) == 0) {
- /*
- * Use the new checks of production [4] [4a] amd [5] of the
- * Update 5 of XML-1.0
- */
- if ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */
- (((c >= 'a') && (c <= 'z')) ||
- ((c >= 'A') && (c <= 'Z')) ||
- ((c >= '0') && (c <= '9')) || /* !start */
- (c == '_') || (c == ':') ||
- (c == '-') || (c == '.') || (c == 0xB7) || /* !start */
- ((c >= 0xC0) && (c <= 0xD6)) ||
- ((c >= 0xD8) && (c <= 0xF6)) ||
- ((c >= 0xF8) && (c <= 0x2FF)) ||
- ((c >= 0x300) && (c <= 0x36F)) || /* !start */
- ((c >= 0x370) && (c <= 0x37D)) ||
- ((c >= 0x37F) && (c <= 0x1FFF)) ||
- ((c >= 0x200C) && (c <= 0x200D)) ||
- ((c >= 0x203F) && (c <= 0x2040)) || /* !start */
- ((c >= 0x2070) && (c <= 0x218F)) ||
- ((c >= 0x2C00) && (c <= 0x2FEF)) ||
- ((c >= 0x3001) && (c <= 0xD7FF)) ||
- ((c >= 0xF900) && (c <= 0xFDCF)) ||
- ((c >= 0xFDF0) && (c <= 0xFFFD)) ||
- ((c >= 0x10000) && (c <= 0xEFFFF))))
- return(1);
- } else {
- if ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
- (c == '.') || (c == '-') ||
- (c == '_') || (c == ':') ||
- (IS_COMBINING(c)) ||
- (IS_EXTENDER(c)))
- return(1);
- }
- return(0);
-}
-
-static xmlChar * xmlParseAttValueInternal(xmlParserCtxtPtr ctxt,
- int *len, int *alloc, int normalize);
-
-static const xmlChar *
-xmlParseNameComplex(xmlParserCtxtPtr ctxt) {
- int len = 0, l;
- int c;
- int count = 0;
-
-#ifdef DEBUG
- nbParseNameComplex++;
-#endif
-
- /*
- * Handler for more complex cases
- */
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- c = CUR_CHAR(l);
- if ((ctxt->options & XML_PARSE_OLD10) == 0) {
- /*
- * Use the new checks of production [4] [4a] amd [5] of the
- * Update 5 of XML-1.0
- */
- if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
- (!(((c >= 'a') && (c <= 'z')) ||
- ((c >= 'A') && (c <= 'Z')) ||
- (c == '_') || (c == ':') ||
- ((c >= 0xC0) && (c <= 0xD6)) ||
- ((c >= 0xD8) && (c <= 0xF6)) ||
- ((c >= 0xF8) && (c <= 0x2FF)) ||
- ((c >= 0x370) && (c <= 0x37D)) ||
- ((c >= 0x37F) && (c <= 0x1FFF)) ||
- ((c >= 0x200C) && (c <= 0x200D)) ||
- ((c >= 0x2070) && (c <= 0x218F)) ||
- ((c >= 0x2C00) && (c <= 0x2FEF)) ||
- ((c >= 0x3001) && (c <= 0xD7FF)) ||
- ((c >= 0xF900) && (c <= 0xFDCF)) ||
- ((c >= 0xFDF0) && (c <= 0xFFFD)) ||
- ((c >= 0x10000) && (c <= 0xEFFFF))))) {
- return(NULL);
- }
- len += l;
- NEXTL(l);
- c = CUR_CHAR(l);
- while ((c != ' ') && (c != '>') && (c != '/') && /* accelerators */
- (((c >= 'a') && (c <= 'z')) ||
- ((c >= 'A') && (c <= 'Z')) ||
- ((c >= '0') && (c <= '9')) || /* !start */
- (c == '_') || (c == ':') ||
- (c == '-') || (c == '.') || (c == 0xB7) || /* !start */
- ((c >= 0xC0) && (c <= 0xD6)) ||
- ((c >= 0xD8) && (c <= 0xF6)) ||
- ((c >= 0xF8) && (c <= 0x2FF)) ||
- ((c >= 0x300) && (c <= 0x36F)) || /* !start */
- ((c >= 0x370) && (c <= 0x37D)) ||
- ((c >= 0x37F) && (c <= 0x1FFF)) ||
- ((c >= 0x200C) && (c <= 0x200D)) ||
- ((c >= 0x203F) && (c <= 0x2040)) || /* !start */
- ((c >= 0x2070) && (c <= 0x218F)) ||
- ((c >= 0x2C00) && (c <= 0x2FEF)) ||
- ((c >= 0x3001) && (c <= 0xD7FF)) ||
- ((c >= 0xF900) && (c <= 0xFDCF)) ||
- ((c >= 0xFDF0) && (c <= 0xFFFD)) ||
- ((c >= 0x10000) && (c <= 0xEFFFF))
- )) {
- if (count++ > XML_PARSER_CHUNK_SIZE) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- }
- len += l;
- NEXTL(l);
- c = CUR_CHAR(l);
- }
- } else {
- if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
- (!IS_LETTER(c) && (c != '_') &&
- (c != ':'))) {
- return(NULL);
- }
- len += l;
- NEXTL(l);
- c = CUR_CHAR(l);
-
- while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
- ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
- (c == '.') || (c == '-') ||
- (c == '_') || (c == ':') ||
- (IS_COMBINING(c)) ||
- (IS_EXTENDER(c)))) {
- if (count++ > XML_PARSER_CHUNK_SIZE) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- }
- len += l;
- NEXTL(l);
- c = CUR_CHAR(l);
- if (c == 0) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- c = CUR_CHAR(l);
- }
- }
- }
- if ((len > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name");
- return(NULL);
- }
- if ((*ctxt->input->cur == '\n') && (ctxt->input->cur[-1] == '\r'))
- return(xmlDictLookup(ctxt->dict, ctxt->input->cur - (len + 1), len));
- return(xmlDictLookup(ctxt->dict, ctxt->input->cur - len, len));
-}
-
-/**
- * xmlParseName:
- * @ctxt: an XML parser context
- *
- * parse an XML name.
- *
- * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
- * CombiningChar | Extender
- *
- * [5] Name ::= (Letter | '_' | ':') (NameChar)*
- *
- * [6] Names ::= Name (#x20 Name)*
- *
- * Returns the Name parsed or NULL
- */
-
-const xmlChar *
-xmlParseName(xmlParserCtxtPtr ctxt) {
- const xmlChar *in;
- const xmlChar *ret;
- int count = 0;
-
- GROW;
-
-#ifdef DEBUG
- nbParseName++;
-#endif
-
- /*
- * Accelerator for simple ASCII names
- */
- in = ctxt->input->cur;
- if (((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- (*in == '_') || (*in == ':')) {
- in++;
- while (((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- ((*in >= 0x30) && (*in <= 0x39)) ||
- (*in == '_') || (*in == '-') ||
- (*in == ':') || (*in == '.'))
- in++;
- if ((*in > 0) && (*in < 0x80)) {
- count = in - ctxt->input->cur;
- if ((count > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Name");
- return(NULL);
- }
- ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count);
- ctxt->input->cur = in;
- ctxt->nbChars += count;
- ctxt->input->col += count;
- if (ret == NULL)
- xmlErrMemory(ctxt, NULL);
- return(ret);
- }
- }
- /* accelerator for special cases */
- return(xmlParseNameComplex(ctxt));
-}
-
-static const xmlChar *
-xmlParseNCNameComplex(xmlParserCtxtPtr ctxt) {
- int len = 0, l;
- int c;
- int count = 0;
- size_t startPosition = 0;
-
-#ifdef DEBUG
- nbParseNCNameComplex++;
-#endif
-
- /*
- * Handler for more complex cases
- */
- GROW;
- startPosition = CUR_PTR - BASE_PTR;
- c = CUR_CHAR(l);
- if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
- (!xmlIsNameStartChar(ctxt, c) || (c == ':'))) {
- return(NULL);
- }
-
- while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
- (xmlIsNameChar(ctxt, c) && (c != ':'))) {
- if (count++ > XML_PARSER_CHUNK_SIZE) {
- if ((len > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
- return(NULL);
- }
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- }
- len += l;
- NEXTL(l);
- c = CUR_CHAR(l);
- if (c == 0) {
- count = 0;
- /*
- * when shrinking to extend the buffer we really need to preserve
- * the part of the name we already parsed. Hence rolling back
- * by current lenght.
- */
- ctxt->input->cur -= l;
- GROW;
- ctxt->input->cur += l;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- c = CUR_CHAR(l);
- }
- }
- if ((len > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
- return(NULL);
- }
- return(xmlDictLookup(ctxt->dict, (BASE_PTR + startPosition), len));
-}
-
-/**
- * xmlParseNCName:
- * @ctxt: an XML parser context
- * @len: length of the string parsed
- *
- * parse an XML name.
- *
- * [4NS] NCNameChar ::= Letter | Digit | '.' | '-' | '_' |
- * CombiningChar | Extender
- *
- * [5NS] NCName ::= (Letter | '_') (NCNameChar)*
- *
- * Returns the Name parsed or NULL
- */
-
-static const xmlChar *
-xmlParseNCName(xmlParserCtxtPtr ctxt) {
- const xmlChar *in, *e;
- const xmlChar *ret;
- int count = 0;
-
-#ifdef DEBUG
- nbParseNCName++;
-#endif
-
- /*
- * Accelerator for simple ASCII names
- */
- in = ctxt->input->cur;
- e = ctxt->input->end;
- if ((((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- (*in == '_')) && (in < e)) {
- in++;
- while ((((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- ((*in >= 0x30) && (*in <= 0x39)) ||
- (*in == '_') || (*in == '-') ||
- (*in == '.')) && (in < e))
- in++;
- if (in >= e)
- goto complex;
- if ((*in > 0) && (*in < 0x80)) {
- count = in - ctxt->input->cur;
- if ((count > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
- return(NULL);
- }
- ret = xmlDictLookup(ctxt->dict, ctxt->input->cur, count);
- ctxt->input->cur = in;
- ctxt->nbChars += count;
- ctxt->input->col += count;
- if (ret == NULL) {
- xmlErrMemory(ctxt, NULL);
- }
- return(ret);
- }
- }
-complex:
- return(xmlParseNCNameComplex(ctxt));
-}
-
-/**
- * xmlParseNameAndCompare:
- * @ctxt: an XML parser context
- *
- * parse an XML name and compares for match
- * (specialized for endtag parsing)
- *
- * Returns NULL for an illegal name, (xmlChar*) 1 for success
- * and the name for mismatch
- */
-
-static const xmlChar *
-xmlParseNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *other) {
- register const xmlChar *cmp = other;
- register const xmlChar *in;
- const xmlChar *ret;
-
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
-
- in = ctxt->input->cur;
- while (*in != 0 && *in == *cmp) {
- ++in;
- ++cmp;
- ctxt->input->col++;
- }
- if (*cmp == 0 && (*in == '>' || IS_BLANK_CH (*in))) {
- /* success */
- ctxt->input->cur = in;
- return (const xmlChar*) 1;
- }
- /* failure (or end of input buffer), check with full function */
- ret = xmlParseName (ctxt);
- /* strings coming from the dictionary direct compare possible */
- if (ret == other) {
- return (const xmlChar*) 1;
- }
- return ret;
-}
-
-/**
- * xmlParseStringName:
- * @ctxt: an XML parser context
- * @str: a pointer to the string pointer (IN/OUT)
- *
- * parse an XML name.
- *
- * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
- * CombiningChar | Extender
- *
- * [5] Name ::= (Letter | '_' | ':') (NameChar)*
- *
- * [6] Names ::= Name (#x20 Name)*
- *
- * Returns the Name parsed or NULL. The @str pointer
- * is updated to the current location in the string.
- */
-
-static xmlChar *
-xmlParseStringName(xmlParserCtxtPtr ctxt, const xmlChar** str) {
- xmlChar buf[XML_MAX_NAMELEN + 5];
- const xmlChar *cur = *str;
- int len = 0, l;
- int c;
-
-#ifdef DEBUG
- nbParseStringName++;
-#endif
-
- c = CUR_SCHAR(cur, l);
- if (!xmlIsNameStartChar(ctxt, c)) {
- return(NULL);
- }
-
- COPY_BUF(l,buf,len,c);
- cur += l;
- c = CUR_SCHAR(cur, l);
- while (xmlIsNameChar(ctxt, c)) {
- COPY_BUF(l,buf,len,c);
- cur += l;
- c = CUR_SCHAR(cur, l);
- if (len >= XML_MAX_NAMELEN) { /* test bigentname.xml */
- /*
- * Okay someone managed to make a huge name, so he's ready to pay
- * for the processing speed.
- */
- xmlChar *buffer;
- int max = len * 2;
-
- buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
- if (buffer == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- memcpy(buffer, buf, len);
- while (xmlIsNameChar(ctxt, c)) {
- if (len + 10 > max) {
- xmlChar *tmp;
-
- if ((len > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
- xmlFree(buffer);
- return(NULL);
- }
- max *= 2;
- tmp = (xmlChar *) xmlRealloc(buffer,
- max * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFree(buffer);
- return(NULL);
- }
- buffer = tmp;
- }
- COPY_BUF(l,buffer,len,c);
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- buffer[len] = 0;
- *str = cur;
- return(buffer);
- }
- }
- if ((len > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NCName");
- return(NULL);
- }
- *str = cur;
- return(xmlStrndup(buf, len));
-}
-
-/**
- * xmlParseNmtoken:
- * @ctxt: an XML parser context
- *
- * parse an XML Nmtoken.
- *
- * [7] Nmtoken ::= (NameChar)+
- *
- * [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*
- *
- * Returns the Nmtoken parsed or NULL
- */
-
-xmlChar *
-xmlParseNmtoken(xmlParserCtxtPtr ctxt) {
- xmlChar buf[XML_MAX_NAMELEN + 5];
- int len = 0, l;
- int c;
- int count = 0;
-
-#ifdef DEBUG
- nbParseNmToken++;
-#endif
-
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- c = CUR_CHAR(l);
-
- while (xmlIsNameChar(ctxt, c)) {
- if (count++ > XML_PARSER_CHUNK_SIZE) {
- count = 0;
- GROW;
- }
- COPY_BUF(l,buf,len,c);
- NEXTL(l);
- c = CUR_CHAR(l);
- if (c == 0) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- c = CUR_CHAR(l);
- }
- if (len >= XML_MAX_NAMELEN) {
- /*
- * Okay someone managed to make a huge token, so he's ready to pay
- * for the processing speed.
- */
- xmlChar *buffer;
- int max = len * 2;
-
- buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
- if (buffer == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- memcpy(buffer, buf, len);
- while (xmlIsNameChar(ctxt, c)) {
- if (count++ > XML_PARSER_CHUNK_SIZE) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buffer);
- return(NULL);
- }
- }
- if (len + 10 > max) {
- xmlChar *tmp;
-
- if ((max > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken");
- xmlFree(buffer);
- return(NULL);
- }
- max *= 2;
- tmp = (xmlChar *) xmlRealloc(buffer,
- max * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFree(buffer);
- return(NULL);
- }
- buffer = tmp;
- }
- COPY_BUF(l,buffer,len,c);
- NEXTL(l);
- c = CUR_CHAR(l);
- }
- buffer[len] = 0;
- return(buffer);
- }
- }
- if (len == 0)
- return(NULL);
- if ((len > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "NmToken");
- return(NULL);
- }
- return(xmlStrndup(buf, len));
-}
-
-/**
- * xmlParseEntityValue:
- * @ctxt: an XML parser context
- * @orig: if non-NULL store a copy of the original entity value
- *
- * parse a value for ENTITY declarations
- *
- * [9] EntityValue ::= '"' ([^%&"] | PEReference | Reference)* '"' |
- * "'" ([^%&'] | PEReference | Reference)* "'"
- *
- * Returns the EntityValue parsed with reference substituted or NULL
- */
-
-xmlChar *
-xmlParseEntityValue(xmlParserCtxtPtr ctxt, xmlChar **orig) {
- xmlChar *buf = NULL;
- int len = 0;
- int size = XML_PARSER_BUFFER_SIZE;
- int c, l;
- xmlChar stop;
- xmlChar *ret = NULL;
- const xmlChar *cur = NULL;
- xmlParserInputPtr input;
-
- if (RAW == '"') stop = '"';
- else if (RAW == '\'') stop = '\'';
- else {
- xmlFatalErr(ctxt, XML_ERR_ENTITY_NOT_STARTED, NULL);
- return(NULL);
- }
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
-
- /*
- * The content of the entity definition is copied in a buffer.
- */
-
- ctxt->instate = XML_PARSER_ENTITY_VALUE;
- input = ctxt->input;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buf);
- return(NULL);
- }
- NEXT;
- c = CUR_CHAR(l);
- /*
- * NOTE: 4.4.5 Included in Literal
- * When a parameter entity reference appears in a literal entity
- * value, ... a single or double quote character in the replacement
- * text is always treated as a normal data character and will not
- * terminate the literal.
- * In practice it means we stop the loop only when back at parsing
- * the initial entity and the quote is found
- */
- while (((IS_CHAR(c)) && ((c != stop) || /* checked */
- (ctxt->input != input))) && (ctxt->instate != XML_PARSER_EOF)) {
- if (len + 5 >= size) {
- xmlChar *tmp;
-
- size *= 2;
- tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFree(buf);
- return(NULL);
- }
- buf = tmp;
- }
- COPY_BUF(l,buf,len,c);
- NEXTL(l);
- /*
- * Pop-up of finished entities.
- */
- while ((RAW == 0) && (ctxt->inputNr > 1)) /* non input consuming */
- xmlPopInput(ctxt);
-
- GROW;
- c = CUR_CHAR(l);
- if (c == 0) {
- GROW;
- c = CUR_CHAR(l);
- }
- }
- buf[len] = 0;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buf);
- return(NULL);
- }
-
- /*
- * Raise problem w.r.t. '&' and '%' being used in non-entities
- * reference constructs. Note Charref will be handled in
- * xmlStringDecodeEntities()
- */
- cur = buf;
- while (*cur != 0) { /* non input consuming */
- if ((*cur == '%') || ((*cur == '&') && (cur[1] != '#'))) {
- xmlChar *name;
- xmlChar tmp = *cur;
-
- cur++;
- name = xmlParseStringName(ctxt, &cur);
- if ((name == NULL) || (*cur != ';')) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_ENTITY_CHAR_ERROR,
- "EntityValue: '%c' forbidden except for entities references\n",
- tmp);
- }
- if ((tmp == '%') && (ctxt->inSubset == 1) &&
- (ctxt->inputNr == 1)) {
- xmlFatalErr(ctxt, XML_ERR_ENTITY_PE_INTERNAL, NULL);
- }
- if (name != NULL)
- xmlFree(name);
- if (*cur == 0)
- break;
- }
- cur++;
- }
-
- /*
- * Then PEReference entities are substituted.
- */
- if (c != stop) {
- xmlFatalErr(ctxt, XML_ERR_ENTITY_NOT_FINISHED, NULL);
- xmlFree(buf);
- } else {
- NEXT;
- /*
- * NOTE: 4.4.7 Bypassed
- * When a general entity reference appears in the EntityValue in
- * an entity declaration, it is bypassed and left as is.
- * so XML_SUBSTITUTE_REF is not set here.
- */
- ++ctxt->depth;
- ret = xmlStringDecodeEntities(ctxt, buf, XML_SUBSTITUTE_PEREF,
- 0, 0, 0);
- --ctxt->depth;
- if (orig != NULL)
- *orig = buf;
- else
- xmlFree(buf);
- }
-
- return(ret);
-}
-
-/**
- * xmlParseAttValueComplex:
- * @ctxt: an XML parser context
- * @len: the resulting attribute len
- * @normalize: wether to apply the inner normalization
- *
- * parse a value for an attribute, this is the fallback function
- * of xmlParseAttValue() when the attribute parsing requires handling
- * of non-ASCII characters, or normalization compaction.
- *
- * Returns the AttValue parsed or NULL. The value has to be freed by the caller.
- */
-static xmlChar *
-xmlParseAttValueComplex(xmlParserCtxtPtr ctxt, int *attlen, int normalize) {
- xmlChar limit = 0;
- xmlChar *buf = NULL;
- xmlChar *rep = NULL;
- size_t len = 0;
- size_t buf_size = 0;
- int c, l, in_space = 0;
- xmlChar *current = NULL;
- xmlEntityPtr ent;
-
- if (NXT(0) == '"') {
- ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE;
- limit = '"';
- NEXT;
- } else if (NXT(0) == '\'') {
- limit = '\'';
- ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE;
- NEXT;
- } else {
- xmlFatalErr(ctxt, XML_ERR_ATTRIBUTE_NOT_STARTED, NULL);
- return(NULL);
- }
-
- /*
- * allocate a translation buffer.
- */
- buf_size = XML_PARSER_BUFFER_SIZE;
- buf = (xmlChar *) xmlMallocAtomic(buf_size);
- if (buf == NULL) goto mem_error;
-
- /*
- * OK loop until we reach one of the ending char or a size limit.
- */
- c = CUR_CHAR(l);
- while (((NXT(0) != limit) && /* checked */
- (IS_CHAR(c)) && (c != '<')) &&
- (ctxt->instate != XML_PARSER_EOF)) {
- /*
- * Impose a reasonable limit on attribute size, unless XML_PARSE_HUGE
- * special option is given
- */
- if ((len > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue length too long\n");
- goto mem_error;
- }
- if (c == 0) break;
- if (c == '&') {
- in_space = 0;
- if (NXT(1) == '#') {
- int val = xmlParseCharRef(ctxt);
-
- if (val == '&') {
- if (ctxt->replaceEntities) {
- if (len + 10 > buf_size) {
- growBuffer(buf, 10);
- }
- buf[len++] = '&';
- } else {
- /*
- * The reparsing will be done in xmlStringGetNodeList()
- * called by the attribute() function in SAX.c
- */
- if (len + 10 > buf_size) {
- growBuffer(buf, 10);
- }
- buf[len++] = '&';
- buf[len++] = '#';
- buf[len++] = '3';
- buf[len++] = '8';
- buf[len++] = ';';
- }
- } else if (val != 0) {
- if (len + 10 > buf_size) {
- growBuffer(buf, 10);
- }
- len += xmlCopyChar(0, &buf[len], val);
- }
- } else {
- ent = xmlParseEntityRef(ctxt);
- ctxt->nbentities++;
- if (ent != NULL)
- ctxt->nbentities += ent->owner;
- if ((ent != NULL) &&
- (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
- if (len + 10 > buf_size) {
- growBuffer(buf, 10);
- }
- if ((ctxt->replaceEntities == 0) &&
- (ent->content[0] == '&')) {
- buf[len++] = '&';
- buf[len++] = '#';
- buf[len++] = '3';
- buf[len++] = '8';
- buf[len++] = ';';
- } else {
- buf[len++] = ent->content[0];
- }
- } else if ((ent != NULL) &&
- (ctxt->replaceEntities != 0)) {
- if (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) {
- ++ctxt->depth;
- rep = xmlStringDecodeEntities(ctxt, ent->content,
- XML_SUBSTITUTE_REF,
- 0, 0, 0);
- --ctxt->depth;
- if (rep != NULL) {
- current = rep;
- while (*current != 0) { /* non input consuming */
- if ((*current == 0xD) || (*current == 0xA) ||
- (*current == 0x9)) {
- buf[len++] = 0x20;
- current++;
- } else
- buf[len++] = *current++;
- if (len + 10 > buf_size) {
- growBuffer(buf, 10);
- }
- }
- xmlFree(rep);
- rep = NULL;
- }
- } else {
- if (len + 10 > buf_size) {
- growBuffer(buf, 10);
- }
- if (ent->content != NULL)
- buf[len++] = ent->content[0];
- }
- } else if (ent != NULL) {
- int i = xmlStrlen(ent->name);
- const xmlChar *cur = ent->name;
-
- /*
- * This may look absurd but is needed to detect
- * entities problems
- */
- if ((ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
- (ent->content != NULL) && (ent->checked == 0)) {
- unsigned long oldnbent = ctxt->nbentities;
-
- ++ctxt->depth;
- rep = xmlStringDecodeEntities(ctxt, ent->content,
- XML_SUBSTITUTE_REF, 0, 0, 0);
- --ctxt->depth;
-
- ent->checked = (ctxt->nbentities - oldnbent + 1) * 2;
- if (rep != NULL) {
- if (xmlStrchr(rep, '<'))
- ent->checked |= 1;
- xmlFree(rep);
- rep = NULL;
- }
- }
-
- /*
- * Just output the reference
- */
- buf[len++] = '&';
- while (len + i + 10 > buf_size) {
- growBuffer(buf, i + 10);
- }
- for (;i > 0;i--)
- buf[len++] = *cur++;
- buf[len++] = ';';
- }
- }
- } else {
- if ((c == 0x20) || (c == 0xD) || (c == 0xA) || (c == 0x9)) {
- if ((len != 0) || (!normalize)) {
- if ((!normalize) || (!in_space)) {
- COPY_BUF(l,buf,len,0x20);
- while (len + 10 > buf_size) {
- growBuffer(buf, 10);
- }
- }
- in_space = 1;
- }
- } else {
- in_space = 0;
- COPY_BUF(l,buf,len,c);
- if (len + 10 > buf_size) {
- growBuffer(buf, 10);
- }
- }
- NEXTL(l);
- }
- GROW;
- c = CUR_CHAR(l);
- }
- if (ctxt->instate == XML_PARSER_EOF)
- goto error;
-
- if ((in_space) && (normalize)) {
- while ((len > 0) && (buf[len - 1] == 0x20)) len--;
- }
- buf[len] = 0;
- if (RAW == '<') {
- xmlFatalErr(ctxt, XML_ERR_LT_IN_ATTRIBUTE, NULL);
- } else if (RAW != limit) {
- if ((c != 0) && (!IS_CHAR(c))) {
- xmlFatalErrMsg(ctxt, XML_ERR_INVALID_CHAR,
- "invalid character in attribute value\n");
- } else {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue: ' expected\n");
- }
- } else
- NEXT;
-
- /*
- * There we potentially risk an overflow, don't allow attribute value of
- * length more than INT_MAX it is a very reasonnable assumption !
- */
- if (len >= INT_MAX) {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue length too long\n");
- goto mem_error;
- }
-
- if (attlen != NULL) *attlen = (int) len;
- return(buf);
-
-mem_error:
- xmlErrMemory(ctxt, NULL);
-error:
- if (buf != NULL)
- xmlFree(buf);
- if (rep != NULL)
- xmlFree(rep);
- return(NULL);
-}
-
-/**
- * xmlParseAttValue:
- * @ctxt: an XML parser context
- *
- * parse a value for an attribute
- * Note: the parser won't do substitution of entities here, this
- * will be handled later in xmlStringGetNodeList
- *
- * [10] AttValue ::= '"' ([^<&"] | Reference)* '"' |
- * "'" ([^<&'] | Reference)* "'"
- *
- * 3.3.3 Attribute-Value Normalization:
- * Before the value of an attribute is passed to the application or
- * checked for validity, the XML processor must normalize it as follows:
- * - a character reference is processed by appending the referenced
- * character to the attribute value
- * - an entity reference is processed by recursively processing the
- * replacement text of the entity
- * - a whitespace character (#x20, #xD, #xA, #x9) is processed by
- * appending #x20 to the normalized value, except that only a single
- * #x20 is appended for a "#xD#xA" sequence that is part of an external
- * parsed entity or the literal entity value of an internal parsed entity
- * - other characters are processed by appending them to the normalized value
- * If the declared value is not CDATA, then the XML processor must further
- * process the normalized attribute value by discarding any leading and
- * trailing space (#x20) characters, and by replacing sequences of space
- * (#x20) characters by a single space (#x20) character.
- * All attributes for which no declaration has been read should be treated
- * by a non-validating parser as if declared CDATA.
- *
- * Returns the AttValue parsed or NULL. The value has to be freed by the caller.
- */
-
-
-xmlChar *
-xmlParseAttValue(xmlParserCtxtPtr ctxt) {
- if ((ctxt == NULL) || (ctxt->input == NULL)) return(NULL);
- return(xmlParseAttValueInternal(ctxt, NULL, NULL, 0));
-}
-
-/**
- * xmlParseSystemLiteral:
- * @ctxt: an XML parser context
- *
- * parse an XML Literal
- *
- * [11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'")
- *
- * Returns the SystemLiteral parsed or NULL
- */
-
-xmlChar *
-xmlParseSystemLiteral(xmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- int len = 0;
- int size = XML_PARSER_BUFFER_SIZE;
- int cur, l;
- xmlChar stop;
- int state = ctxt->instate;
- int count = 0;
-
- SHRINK;
- if (RAW == '"') {
- NEXT;
- stop = '"';
- } else if (RAW == '\'') {
- NEXT;
- stop = '\'';
- } else {
- xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_STARTED, NULL);
- return(NULL);
- }
-
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- ctxt->instate = XML_PARSER_SYSTEM_LITERAL;
- cur = CUR_CHAR(l);
- while ((IS_CHAR(cur)) && (cur != stop)) { /* checked */
- if (len + 5 >= size) {
- xmlChar *tmp;
-
- if ((size > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "SystemLiteral");
- xmlFree(buf);
- ctxt->instate = (xmlParserInputState) state;
- return(NULL);
- }
- size *= 2;
- tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlFree(buf);
- xmlErrMemory(ctxt, NULL);
- ctxt->instate = (xmlParserInputState) state;
- return(NULL);
- }
- buf = tmp;
- }
- count++;
- if (count > 50) {
- GROW;
- count = 0;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buf);
- return(NULL);
- }
- }
- COPY_BUF(l,buf,len,cur);
- NEXTL(l);
- cur = CUR_CHAR(l);
- if (cur == 0) {
- GROW;
- SHRINK;
- cur = CUR_CHAR(l);
- }
- }
- buf[len] = 0;
- ctxt->instate = (xmlParserInputState) state;
- if (!IS_CHAR(cur)) {
- xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED, NULL);
- } else {
- NEXT;
- }
- return(buf);
-}
-
-/**
- * xmlParsePubidLiteral:
- * @ctxt: an XML parser context
- *
- * parse an XML public literal
- *
- * [12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'"
- *
- * Returns the PubidLiteral parsed or NULL.
- */
-
-xmlChar *
-xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- int len = 0;
- int size = XML_PARSER_BUFFER_SIZE;
- xmlChar cur;
- xmlChar stop;
- int count = 0;
- xmlParserInputState oldstate = ctxt->instate;
-
- SHRINK;
- if (RAW == '"') {
- NEXT;
- stop = '"';
- } else if (RAW == '\'') {
- NEXT;
- stop = '\'';
- } else {
- xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_STARTED, NULL);
- return(NULL);
- }
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- ctxt->instate = XML_PARSER_PUBLIC_LITERAL;
- cur = CUR;
- while ((IS_PUBIDCHAR_CH(cur)) && (cur != stop)) { /* checked */
- if (len + 1 >= size) {
- xmlChar *tmp;
-
- if ((size > XML_MAX_NAME_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_NAME_TOO_LONG, "Public ID");
- xmlFree(buf);
- return(NULL);
- }
- size *= 2;
- tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFree(buf);
- return(NULL);
- }
- buf = tmp;
- }
- buf[len++] = cur;
- count++;
- if (count > 50) {
- GROW;
- count = 0;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buf);
- return(NULL);
- }
- }
- NEXT;
- cur = CUR;
- if (cur == 0) {
- GROW;
- SHRINK;
- cur = CUR;
- }
- }
- buf[len] = 0;
- if (cur != stop) {
- xmlFatalErr(ctxt, XML_ERR_LITERAL_NOT_FINISHED, NULL);
- } else {
- NEXT;
- }
- ctxt->instate = oldstate;
- return(buf);
-}
-
-static void xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata);
-
-/*
- * used for the test in the inner loop of the char data testing
- */
-static const unsigned char test_char_data[256] = {
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9, CR/LF separated */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x27, /* & */
- 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
- 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
- 0x38, 0x39, 0x3A, 0x3B, 0x00, 0x3D, 0x3E, 0x3F, /* < */
- 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
- 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
- 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
- 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x00, 0x5E, 0x5F, /* ] */
- 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
- 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
- 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
- 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* non-ascii */
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-/**
- * xmlParseCharData:
- * @ctxt: an XML parser context
- * @cdata: int indicating whether we are within a CDATA section
- *
- * parse a CharData section.
- * if we are within a CDATA section ']]>' marks an end of section.
- *
- * The right angle bracket (>) may be represented using the string "&gt;",
- * and must, for compatibility, be escaped using "&gt;" or a character
- * reference when it appears in the string "]]>" in content, when that
- * string is not marking the end of a CDATA section.
- *
- * [14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
- */
-
-void
-xmlParseCharData(xmlParserCtxtPtr ctxt, int cdata) {
- const xmlChar *in;
- int nbchar = 0;
- int line = ctxt->input->line;
- int col = ctxt->input->col;
- int ccol;
-
- SHRINK;
- GROW;
- /*
- * Accelerated common case where input don't need to be
- * modified before passing it to the handler.
- */
- if (!cdata) {
- in = ctxt->input->cur;
- do {
-get_more_space:
- while (*in == 0x20) { in++; ctxt->input->col++; }
- if (*in == 0xA) {
- do {
- ctxt->input->line++; ctxt->input->col = 1;
- in++;
- } while (*in == 0xA);
- goto get_more_space;
- }
- if (*in == '<') {
- nbchar = in - ctxt->input->cur;
- if (nbchar > 0) {
- const xmlChar *tmp = ctxt->input->cur;
- ctxt->input->cur = in;
-
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->ignorableWhitespace !=
- ctxt->sax->characters)) {
- if (areBlanks(ctxt, tmp, nbchar, 1)) {
- if (ctxt->sax->ignorableWhitespace != NULL)
- ctxt->sax->ignorableWhitespace(ctxt->userData,
- tmp, nbchar);
- } else {
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData,
- tmp, nbchar);
- if (*ctxt->space == -1)
- *ctxt->space = -2;
- }
- } else if ((ctxt->sax != NULL) &&
- (ctxt->sax->characters != NULL)) {
- ctxt->sax->characters(ctxt->userData,
- tmp, nbchar);
- }
- }
- return;
- }
-
-get_more:
- ccol = ctxt->input->col;
- while (test_char_data[*in]) {
- in++;
- ccol++;
- }
- ctxt->input->col = ccol;
- if (*in == 0xA) {
- do {
- ctxt->input->line++; ctxt->input->col = 1;
- in++;
- } while (*in == 0xA);
- goto get_more;
- }
- if (*in == ']') {
- if ((in[1] == ']') && (in[2] == '>')) {
- xmlFatalErr(ctxt, XML_ERR_MISPLACED_CDATA_END, NULL);
- ctxt->input->cur = in;
- return;
- }
- in++;
- ctxt->input->col++;
- goto get_more;
- }
- nbchar = in - ctxt->input->cur;
- if (nbchar > 0) {
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->ignorableWhitespace !=
- ctxt->sax->characters) &&
- (IS_BLANK_CH(*ctxt->input->cur))) {
- const xmlChar *tmp = ctxt->input->cur;
- ctxt->input->cur = in;
-
- if (areBlanks(ctxt, tmp, nbchar, 0)) {
- if (ctxt->sax->ignorableWhitespace != NULL)
- ctxt->sax->ignorableWhitespace(ctxt->userData,
- tmp, nbchar);
- } else {
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData,
- tmp, nbchar);
- if (*ctxt->space == -1)
- *ctxt->space = -2;
- }
- line = ctxt->input->line;
- col = ctxt->input->col;
- } else if (ctxt->sax != NULL) {
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData,
- ctxt->input->cur, nbchar);
- line = ctxt->input->line;
- col = ctxt->input->col;
- }
- /* something really bad happened in the SAX callback */
- if (ctxt->instate != XML_PARSER_CONTENT)
- return;
- }
- ctxt->input->cur = in;
- if (*in == 0xD) {
- in++;
- if (*in == 0xA) {
- ctxt->input->cur = in;
- in++;
- ctxt->input->line++; ctxt->input->col = 1;
- continue; /* while */
- }
- in--;
- }
- if (*in == '<') {
- return;
- }
- if (*in == '&') {
- return;
- }
- SHRINK;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- in = ctxt->input->cur;
- } while (((*in >= 0x20) && (*in <= 0x7F)) || (*in == 0x09));
- nbchar = 0;
- }
- ctxt->input->line = line;
- ctxt->input->col = col;
- xmlParseCharDataComplex(ctxt, cdata);
-}
-
-/**
- * xmlParseCharDataComplex:
- * @ctxt: an XML parser context
- * @cdata: int indicating whether we are within a CDATA section
- *
- * parse a CharData section.this is the fallback function
- * of xmlParseCharData() when the parsing requires handling
- * of non-ASCII characters.
- */
-static void
-xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata) {
- xmlChar buf[XML_PARSER_BIG_BUFFER_SIZE + 5];
- int nbchar = 0;
- int cur, l;
- int count = 0;
-
- SHRINK;
- GROW;
- cur = CUR_CHAR(l);
- while ((cur != '<') && /* checked */
- (cur != '&') &&
- (IS_CHAR(cur))) /* test also done in xmlCurrentChar() */ {
- if ((cur == ']') && (NXT(1) == ']') &&
- (NXT(2) == '>')) {
- if (cdata) break;
- else {
- xmlFatalErr(ctxt, XML_ERR_MISPLACED_CDATA_END, NULL);
- }
- }
- COPY_BUF(l,buf,nbchar,cur);
- if (nbchar >= XML_PARSER_BIG_BUFFER_SIZE) {
- buf[nbchar] = 0;
-
- /*
- * OK the segment is to be consumed as chars.
- */
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
- if (areBlanks(ctxt, buf, nbchar, 0)) {
- if (ctxt->sax->ignorableWhitespace != NULL)
- ctxt->sax->ignorableWhitespace(ctxt->userData,
- buf, nbchar);
- } else {
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData, buf, nbchar);
- if ((ctxt->sax->characters !=
- ctxt->sax->ignorableWhitespace) &&
- (*ctxt->space == -1))
- *ctxt->space = -2;
- }
- }
- nbchar = 0;
- /* something really bad happened in the SAX callback */
- if (ctxt->instate != XML_PARSER_CONTENT)
- return;
- }
- count++;
- if (count > 50) {
- GROW;
- count = 0;
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- }
- NEXTL(l);
- cur = CUR_CHAR(l);
- }
- if (nbchar != 0) {
- buf[nbchar] = 0;
- /*
- * OK the segment is to be consumed as chars.
- */
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
- if (areBlanks(ctxt, buf, nbchar, 0)) {
- if (ctxt->sax->ignorableWhitespace != NULL)
- ctxt->sax->ignorableWhitespace(ctxt->userData, buf, nbchar);
- } else {
- if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData, buf, nbchar);
- if ((ctxt->sax->characters != ctxt->sax->ignorableWhitespace) &&
- (*ctxt->space == -1))
- *ctxt->space = -2;
- }
- }
- }
- if ((cur != 0) && (!IS_CHAR(cur))) {
- /* Generate the error and skip the offending character */
- xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
- "PCDATA invalid Char value %d\n",
- cur);
- NEXTL(l);
- }
-}
-
-/**
- * xmlParseExternalID:
- * @ctxt: an XML parser context
- * @publicID: a xmlChar** receiving PubidLiteral
- * @strict: indicate whether we should restrict parsing to only
- * production [75], see NOTE below
- *
- * Parse an External ID or a Public ID
- *
- * NOTE: Productions [75] and [83] interact badly since [75] can generate
- * 'PUBLIC' S PubidLiteral S SystemLiteral
- *
- * [75] ExternalID ::= 'SYSTEM' S SystemLiteral
- * | 'PUBLIC' S PubidLiteral S SystemLiteral
- *
- * [83] PublicID ::= 'PUBLIC' S PubidLiteral
- *
- * Returns the function returns SystemLiteral and in the second
- * case publicID receives PubidLiteral, is strict is off
- * it is possible to return NULL and have publicID set.
- */
-
-xmlChar *
-xmlParseExternalID(xmlParserCtxtPtr ctxt, xmlChar **publicID, int strict) {
- xmlChar *URI = NULL;
-
- SHRINK;
-
- *publicID = NULL;
- if (CMP6(CUR_PTR, 'S', 'Y', 'S', 'T', 'E', 'M')) {
- SKIP(6);
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after 'SYSTEM'\n");
- }
- SKIP_BLANKS;
- URI = xmlParseSystemLiteral(ctxt);
- if (URI == NULL) {
- xmlFatalErr(ctxt, XML_ERR_URI_REQUIRED, NULL);
- }
- } else if (CMP6(CUR_PTR, 'P', 'U', 'B', 'L', 'I', 'C')) {
- SKIP(6);
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after 'PUBLIC'\n");
- }
- SKIP_BLANKS;
- *publicID = xmlParsePubidLiteral(ctxt);
- if (*publicID == NULL) {
- xmlFatalErr(ctxt, XML_ERR_PUBID_REQUIRED, NULL);
- }
- if (strict) {
- /*
- * We don't handle [83] so "S SystemLiteral" is required.
- */
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after the Public Identifier\n");
- }
- } else {
- /*
- * We handle [83] so we return immediately, if
- * "S SystemLiteral" is not detected. From a purely parsing
- * point of view that's a nice mess.
- */
- const xmlChar *ptr;
- GROW;
-
- ptr = CUR_PTR;
- if (!IS_BLANK_CH(*ptr)) return(NULL);
-
- while (IS_BLANK_CH(*ptr)) ptr++; /* TODO: dangerous, fix ! */
- if ((*ptr != '\'') && (*ptr != '"')) return(NULL);
- }
- SKIP_BLANKS;
- URI = xmlParseSystemLiteral(ctxt);
- if (URI == NULL) {
- xmlFatalErr(ctxt, XML_ERR_URI_REQUIRED, NULL);
- }
- }
- return(URI);
-}
-
-/**
- * xmlParseCommentComplex:
- * @ctxt: an XML parser context
- * @buf: the already parsed part of the buffer
- * @len: number of bytes filles in the buffer
- * @size: allocated size of the buffer
- *
- * Skip an XML (SGML) comment <!-- .... -->
- * The spec says that "For compatibility, the string "--" (double-hyphen)
- * must not occur within comments. "
- * This is the slow routine in case the accelerator for ascii didn't work
- *
- * [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
- */
-static void
-xmlParseCommentComplex(xmlParserCtxtPtr ctxt, xmlChar *buf,
- size_t len, size_t size) {
- int q, ql;
- int r, rl;
- int cur, l;
- size_t count = 0;
- int inputid;
-
- inputid = ctxt->input->id;
-
- if (buf == NULL) {
- len = 0;
- size = XML_PARSER_BUFFER_SIZE;
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- return;
- }
- }
- GROW; /* Assure there's enough input data */
- q = CUR_CHAR(ql);
- if (q == 0)
- goto not_terminated;
- if (!IS_CHAR(q)) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
- "xmlParseComment: invalid xmlChar value %d\n",
- q);
- xmlFree (buf);
- return;
- }
- NEXTL(ql);
- r = CUR_CHAR(rl);
- if (r == 0)
- goto not_terminated;
- if (!IS_CHAR(r)) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
- "xmlParseComment: invalid xmlChar value %d\n",
- q);
- xmlFree (buf);
- return;
- }
- NEXTL(rl);
- cur = CUR_CHAR(l);
- if (cur == 0)
- goto not_terminated;
- while (IS_CHAR(cur) && /* checked */
- ((cur != '>') ||
- (r != '-') || (q != '-'))) {
- if ((r == '-') && (q == '-')) {
- xmlFatalErr(ctxt, XML_ERR_HYPHEN_IN_COMMENT, NULL);
- }
- if ((len > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
- "Comment too big found", NULL);
- xmlFree (buf);
- return;
- }
- if (len + 5 >= size) {
- xmlChar *new_buf;
- size_t new_size;
-
- new_size = size * 2;
- new_buf = (xmlChar *) xmlRealloc(buf, new_size);
- if (new_buf == NULL) {
- xmlFree (buf);
- xmlErrMemory(ctxt, NULL);
- return;
- }
- buf = new_buf;
- size = new_size;
- }
- COPY_BUF(ql,buf,len,q);
- q = r;
- ql = rl;
- r = cur;
- rl = l;
-
- count++;
- if (count > 50) {
- GROW;
- count = 0;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buf);
- return;
- }
- }
- NEXTL(l);
- cur = CUR_CHAR(l);
- if (cur == 0) {
- SHRINK;
- GROW;
- cur = CUR_CHAR(l);
- }
- }
- buf[len] = 0;
- if (cur == 0) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
- "Comment not terminated \n<!--%.50s\n", buf);
- } else if (!IS_CHAR(cur)) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
- "xmlParseComment: invalid xmlChar value %d\n",
- cur);
- } else {
- if (inputid != ctxt->input->id) {
- xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "Comment doesn't start and stop in the same entity\n");
- }
- NEXT;
- if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->comment(ctxt->userData, buf);
- }
- xmlFree(buf);
- return;
-not_terminated:
- xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
- "Comment not terminated\n", NULL);
- xmlFree(buf);
- return;
-}
-
-/**
- * xmlParseComment:
- * @ctxt: an XML parser context
- *
- * Skip an XML (SGML) comment <!-- .... -->
- * The spec says that "For compatibility, the string "--" (double-hyphen)
- * must not occur within comments. "
- *
- * [15] Comment ::= '<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'
- */
-void
-xmlParseComment(xmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- size_t size = XML_PARSER_BUFFER_SIZE;
- size_t len = 0;
- xmlParserInputState state;
- const xmlChar *in;
- size_t nbchar = 0;
- int ccol;
- int inputid;
-
- /*
- * Check that there is a comment right here.
- */
- if ((RAW != '<') || (NXT(1) != '!') ||
- (NXT(2) != '-') || (NXT(3) != '-')) return;
- state = ctxt->instate;
- ctxt->instate = XML_PARSER_COMMENT;
- inputid = ctxt->input->id;
- SKIP(4);
- SHRINK;
- GROW;
-
- /*
- * Accelerated common case where input don't need to be
- * modified before passing it to the handler.
- */
- in = ctxt->input->cur;
- do {
- if (*in == 0xA) {
- do {
- ctxt->input->line++; ctxt->input->col = 1;
- in++;
- } while (*in == 0xA);
- }
-get_more:
- ccol = ctxt->input->col;
- while (((*in > '-') && (*in <= 0x7F)) ||
- ((*in >= 0x20) && (*in < '-')) ||
- (*in == 0x09)) {
- in++;
- ccol++;
- }
- ctxt->input->col = ccol;
- if (*in == 0xA) {
- do {
- ctxt->input->line++; ctxt->input->col = 1;
- in++;
- } while (*in == 0xA);
- goto get_more;
- }
- nbchar = in - ctxt->input->cur;
- /*
- * save current set of data
- */
- if (nbchar > 0) {
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->comment != NULL)) {
- if (buf == NULL) {
- if ((*in == '-') && (in[1] == '-'))
- size = nbchar + 1;
- else
- size = XML_PARSER_BUFFER_SIZE + nbchar;
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- ctxt->instate = state;
- return;
- }
- len = 0;
- } else if (len + nbchar + 1 >= size) {
- xmlChar *new_buf;
- size += len + nbchar + XML_PARSER_BUFFER_SIZE;
- new_buf = (xmlChar *) xmlRealloc(buf,
- size * sizeof(xmlChar));
- if (new_buf == NULL) {
- xmlFree (buf);
- xmlErrMemory(ctxt, NULL);
- ctxt->instate = state;
- return;
- }
- buf = new_buf;
- }
- memcpy(&buf[len], ctxt->input->cur, nbchar);
- len += nbchar;
- buf[len] = 0;
- }
- }
- if ((len > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_COMMENT_NOT_FINISHED,
- "Comment too big found", NULL);
- xmlFree (buf);
- return;
- }
- ctxt->input->cur = in;
- if (*in == 0xA) {
- in++;
- ctxt->input->line++; ctxt->input->col = 1;
- }
- if (*in == 0xD) {
- in++;
- if (*in == 0xA) {
- ctxt->input->cur = in;
- in++;
- ctxt->input->line++; ctxt->input->col = 1;
- continue; /* while */
- }
- in--;
- }
- SHRINK;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buf);
- return;
- }
- in = ctxt->input->cur;
- if (*in == '-') {
- if (in[1] == '-') {
- if (in[2] == '>') {
- if (ctxt->input->id != inputid) {
- xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "comment doesn't start and stop in the same entity\n");
- }
- SKIP(3);
- if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL) &&
- (!ctxt->disableSAX)) {
- if (buf != NULL)
- ctxt->sax->comment(ctxt->userData, buf);
- else
- ctxt->sax->comment(ctxt->userData, BAD_CAST "");
- }
- if (buf != NULL)
- xmlFree(buf);
- if (ctxt->instate != XML_PARSER_EOF)
- ctxt->instate = state;
- return;
- }
- if (buf != NULL) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_HYPHEN_IN_COMMENT,
- "Double hyphen within comment: "
- "<!--%.50s\n",
- buf);
- } else
- xmlFatalErrMsgStr(ctxt, XML_ERR_HYPHEN_IN_COMMENT,
- "Double hyphen within comment\n", NULL);
- in++;
- ctxt->input->col++;
- }
- in++;
- ctxt->input->col++;
- goto get_more;
- }
- } while (((*in >= 0x20) && (*in <= 0x7F)) || (*in == 0x09));
- xmlParseCommentComplex(ctxt, buf, len, size);
- ctxt->instate = state;
- return;
-}
-
-
-/**
- * xmlParsePITarget:
- * @ctxt: an XML parser context
- *
- * parse the name of a PI
- *
- * [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))
- *
- * Returns the PITarget name or NULL
- */
-
-const xmlChar *
-xmlParsePITarget(xmlParserCtxtPtr ctxt) {
- const xmlChar *name;
-
- name = xmlParseName(ctxt);
- if ((name != NULL) &&
- ((name[0] == 'x') || (name[0] == 'X')) &&
- ((name[1] == 'm') || (name[1] == 'M')) &&
- ((name[2] == 'l') || (name[2] == 'L'))) {
- int i;
- if ((name[0] == 'x') && (name[1] == 'm') &&
- (name[2] == 'l') && (name[3] == 0)) {
- xmlFatalErrMsg(ctxt, XML_ERR_RESERVED_XML_NAME,
- "XML declaration allowed only at the start of the document\n");
- return(name);
- } else if (name[3] == 0) {
- xmlFatalErr(ctxt, XML_ERR_RESERVED_XML_NAME, NULL);
- return(name);
- }
- for (i = 0;;i++) {
- if (xmlW3CPIs[i] == NULL) break;
- if (xmlStrEqual(name, (const xmlChar *)xmlW3CPIs[i]))
- return(name);
- }
- xmlWarningMsg(ctxt, XML_ERR_RESERVED_XML_NAME,
- "xmlParsePITarget: invalid name prefix 'xml'\n",
- NULL, NULL);
- }
- if ((name != NULL) && (xmlStrchr(name, ':') != NULL)) {
- xmlNsErr(ctxt, XML_NS_ERR_COLON,
- "colons are forbidden from PI names '%s'\n", name, NULL, NULL);
- }
- return(name);
-}
-
-#ifdef LIBXML_CATALOG_ENABLED
-/**
- * xmlParseCatalogPI:
- * @ctxt: an XML parser context
- * @catalog: the PI value string
- *
- * parse an XML Catalog Processing Instruction.
- *
- * <?oasis-xml-catalog catalog="http://example.com/catalog.xml"?>
- *
- * Occurs only if allowed by the user and if happening in the Misc
- * part of the document before any doctype informations
- * This will add the given catalog to the parsing context in order
- * to be used if there is a resolution need further down in the document
- */
-
-static void
-xmlParseCatalogPI(xmlParserCtxtPtr ctxt, const xmlChar *catalog) {
- xmlChar *URL = NULL;
- const xmlChar *tmp, *base;
- xmlChar marker;
-
- tmp = catalog;
- while (IS_BLANK_CH(*tmp)) tmp++;
- if (xmlStrncmp(tmp, BAD_CAST"catalog", 7))
- goto error;
- tmp += 7;
- while (IS_BLANK_CH(*tmp)) tmp++;
- if (*tmp != '=') {
- return;
- }
- tmp++;
- while (IS_BLANK_CH(*tmp)) tmp++;
- marker = *tmp;
- if ((marker != '\'') && (marker != '"'))
- goto error;
- tmp++;
- base = tmp;
- while ((*tmp != 0) && (*tmp != marker)) tmp++;
- if (*tmp == 0)
- goto error;
- URL = xmlStrndup(base, tmp - base);
- tmp++;
- while (IS_BLANK_CH(*tmp)) tmp++;
- if (*tmp != 0)
- goto error;
-
- if (URL != NULL) {
- ctxt->catalogs = xmlCatalogAddLocal(ctxt->catalogs, URL);
- xmlFree(URL);
- }
- return;
-
-error:
- xmlWarningMsg(ctxt, XML_WAR_CATALOG_PI,
- "Catalog PI syntax error: %s\n",
- catalog, NULL);
- if (URL != NULL)
- xmlFree(URL);
-}
-#endif
-
-/**
- * xmlParsePI:
- * @ctxt: an XML parser context
- *
- * parse an XML Processing Instruction.
- *
- * [16] PI ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
- *
- * The processing is transfered to SAX once parsed.
- */
-
-void
-xmlParsePI(xmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- size_t len = 0;
- size_t size = XML_PARSER_BUFFER_SIZE;
- int cur, l;
- const xmlChar *target;
- xmlParserInputState state;
- int count = 0;
-
- if ((RAW == '<') && (NXT(1) == '?')) {
- xmlParserInputPtr input = ctxt->input;
- state = ctxt->instate;
- ctxt->instate = XML_PARSER_PI;
- /*
- * this is a Processing Instruction.
- */
- SKIP(2);
- SHRINK;
-
- /*
- * Parse the target name and check for special support like
- * namespace.
- */
- target = xmlParsePITarget(ctxt);
- if (target != NULL) {
- if ((RAW == '?') && (NXT(1) == '>')) {
- if (input != ctxt->input) {
- xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "PI declaration doesn't start and stop in the same entity\n");
- }
- SKIP(2);
-
- /*
- * SAX: PI detected.
- */
- if ((ctxt->sax) && (!ctxt->disableSAX) &&
- (ctxt->sax->processingInstruction != NULL))
- ctxt->sax->processingInstruction(ctxt->userData,
- target, NULL);
- if (ctxt->instate != XML_PARSER_EOF)
- ctxt->instate = state;
- return;
- }
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- ctxt->instate = state;
- return;
- }
- cur = CUR;
- if (!IS_BLANK(cur)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_SPACE_REQUIRED,
- "ParsePI: PI %s space expected\n", target);
- }
- SKIP_BLANKS;
- cur = CUR_CHAR(l);
- while (IS_CHAR(cur) && /* checked */
- ((cur != '?') || (NXT(1) != '>'))) {
- if (len + 5 >= size) {
- xmlChar *tmp;
- size_t new_size = size * 2;
- tmp = (xmlChar *) xmlRealloc(buf, new_size);
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFree(buf);
- ctxt->instate = state;
- return;
- }
- buf = tmp;
- size = new_size;
- }
- count++;
- if (count > 50) {
- GROW;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buf);
- return;
- }
- count = 0;
- if ((len > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED,
- "PI %s too big found", target);
- xmlFree(buf);
- ctxt->instate = state;
- return;
- }
- }
- COPY_BUF(l,buf,len,cur);
- NEXTL(l);
- cur = CUR_CHAR(l);
- if (cur == 0) {
- SHRINK;
- GROW;
- cur = CUR_CHAR(l);
- }
- }
- if ((len > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED,
- "PI %s too big found", target);
- xmlFree(buf);
- ctxt->instate = state;
- return;
- }
- buf[len] = 0;
- if (cur != '?') {
- xmlFatalErrMsgStr(ctxt, XML_ERR_PI_NOT_FINISHED,
- "ParsePI: PI %s never end ...\n", target);
- } else {
- if (input != ctxt->input) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "PI declaration doesn't start and stop in the same entity\n");
- }
- SKIP(2);
-
-#ifdef LIBXML_CATALOG_ENABLED
- if (((state == XML_PARSER_MISC) ||
- (state == XML_PARSER_START)) &&
- (xmlStrEqual(target, XML_CATALOG_PI))) {
- xmlCatalogAllow allow = xmlCatalogGetDefaults();
- if ((allow == XML_CATA_ALLOW_DOCUMENT) ||
- (allow == XML_CATA_ALLOW_ALL))
- xmlParseCatalogPI(ctxt, buf);
- }
-#endif
-
-
- /*
- * SAX: PI detected.
- */
- if ((ctxt->sax) && (!ctxt->disableSAX) &&
- (ctxt->sax->processingInstruction != NULL))
- ctxt->sax->processingInstruction(ctxt->userData,
- target, buf);
- }
- xmlFree(buf);
- } else {
- xmlFatalErr(ctxt, XML_ERR_PI_NOT_STARTED, NULL);
- }
- if (ctxt->instate != XML_PARSER_EOF)
- ctxt->instate = state;
- }
-}
-
-/**
- * xmlParseNotationDecl:
- * @ctxt: an XML parser context
- *
- * parse a notation declaration
- *
- * [82] NotationDecl ::= '<!NOTATION' S Name S (ExternalID | PublicID) S? '>'
- *
- * Hence there is actually 3 choices:
- * 'PUBLIC' S PubidLiteral
- * 'PUBLIC' S PubidLiteral S SystemLiteral
- * and 'SYSTEM' S SystemLiteral
- *
- * See the NOTE on xmlParseExternalID().
- */
-
-void
-xmlParseNotationDecl(xmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- xmlChar *Pubid;
- xmlChar *Systemid;
-
- if (CMP10(CUR_PTR, '<', '!', 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N')) {
- xmlParserInputPtr input = ctxt->input;
- SHRINK;
- SKIP(10);
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after '<!NOTATION'\n");
- return;
- }
- SKIP_BLANKS;
-
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_STARTED, NULL);
- return;
- }
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after the NOTATION name'\n");
- return;
- }
- if (xmlStrchr(name, ':') != NULL) {
- xmlNsErr(ctxt, XML_NS_ERR_COLON,
- "colons are forbidden from notation names '%s'\n",
- name, NULL, NULL);
- }
- SKIP_BLANKS;
-
- /*
- * Parse the IDs.
- */
- Systemid = xmlParseExternalID(ctxt, &Pubid, 0);
- SKIP_BLANKS;
-
- if (RAW == '>') {
- if (input != ctxt->input) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Notation declaration doesn't start and stop in the same entity\n");
- }
- NEXT;
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
- (ctxt->sax->notationDecl != NULL))
- ctxt->sax->notationDecl(ctxt->userData, name, Pubid, Systemid);
- } else {
- xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_FINISHED, NULL);
- }
- if (Systemid != NULL) xmlFree(Systemid);
- if (Pubid != NULL) xmlFree(Pubid);
- }
-}
-
-/**
- * xmlParseEntityDecl:
- * @ctxt: an XML parser context
- *
- * parse <!ENTITY declarations
- *
- * [70] EntityDecl ::= GEDecl | PEDecl
- *
- * [71] GEDecl ::= '<!ENTITY' S Name S EntityDef S? '>'
- *
- * [72] PEDecl ::= '<!ENTITY' S '%' S Name S PEDef S? '>'
- *
- * [73] EntityDef ::= EntityValue | (ExternalID NDataDecl?)
- *
- * [74] PEDef ::= EntityValue | ExternalID
- *
- * [76] NDataDecl ::= S 'NDATA' S Name
- *
- * [ VC: Notation Declared ]
- * The Name must match the declared name of a notation.
- */
-
-void
-xmlParseEntityDecl(xmlParserCtxtPtr ctxt) {
- const xmlChar *name = NULL;
- xmlChar *value = NULL;
- xmlChar *URI = NULL, *literal = NULL;
- const xmlChar *ndata = NULL;
- int isParameter = 0;
- xmlChar *orig = NULL;
- int skipped;
-
- /* GROW; done in the caller */
- if (CMP8(CUR_PTR, '<', '!', 'E', 'N', 'T', 'I', 'T', 'Y')) {
- xmlParserInputPtr input = ctxt->input;
- SHRINK;
- SKIP(8);
- skipped = SKIP_BLANKS;
- if (skipped == 0) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after '<!ENTITY'\n");
- }
-
- if (RAW == '%') {
- NEXT;
- skipped = SKIP_BLANKS;
- if (skipped == 0) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after '%%'\n");
- }
- isParameter = 1;
- }
-
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParseEntityDecl: no name\n");
- return;
- }
- if (xmlStrchr(name, ':') != NULL) {
- xmlNsErr(ctxt, XML_NS_ERR_COLON,
- "colons are forbidden from entities names '%s'\n",
- name, NULL, NULL);
- }
- skipped = SKIP_BLANKS;
- if (skipped == 0) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after the entity name\n");
- }
-
- ctxt->instate = XML_PARSER_ENTITY_DECL;
- /*
- * handle the various case of definitions...
- */
- if (isParameter) {
- if ((RAW == '"') || (RAW == '\'')) {
- value = xmlParseEntityValue(ctxt, &orig);
- if (value) {
- if ((ctxt->sax != NULL) &&
- (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL))
- ctxt->sax->entityDecl(ctxt->userData, name,
- XML_INTERNAL_PARAMETER_ENTITY,
- NULL, NULL, value);
- }
- } else {
- URI = xmlParseExternalID(ctxt, &literal, 1);
- if ((URI == NULL) && (literal == NULL)) {
- xmlFatalErr(ctxt, XML_ERR_VALUE_REQUIRED, NULL);
- }
- if (URI) {
- xmlURIPtr uri;
-
- uri = xmlParseURI((const char *) URI);
- if (uri == NULL) {
- xmlErrMsgStr(ctxt, XML_ERR_INVALID_URI,
- "Invalid URI: %s\n", URI);
- /*
- * This really ought to be a well formedness error
- * but the XML Core WG decided otherwise c.f. issue
- * E26 of the XML erratas.
- */
- } else {
- if (uri->fragment != NULL) {
- /*
- * Okay this is foolish to block those but not
- * invalid URIs.
- */
- xmlFatalErr(ctxt, XML_ERR_URI_FRAGMENT, NULL);
- } else {
- if ((ctxt->sax != NULL) &&
- (!ctxt->disableSAX) &&
- (ctxt->sax->entityDecl != NULL))
- ctxt->sax->entityDecl(ctxt->userData, name,
- XML_EXTERNAL_PARAMETER_ENTITY,
- literal, URI, NULL);
- }
- xmlFreeURI(uri);
- }
- }
- }
- } else {
- if ((RAW == '"') || (RAW == '\'')) {
- value = xmlParseEntityValue(ctxt, &orig);
- if ((ctxt->sax != NULL) &&
- (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL))
- ctxt->sax->entityDecl(ctxt->userData, name,
- XML_INTERNAL_GENERAL_ENTITY,
- NULL, NULL, value);
- /*
- * For expat compatibility in SAX mode.
- */
- if ((ctxt->myDoc == NULL) ||
- (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE))) {
- if (ctxt->myDoc == NULL) {
- ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE);
- if (ctxt->myDoc == NULL) {
- xmlErrMemory(ctxt, "New Doc failed");
- return;
- }
- ctxt->myDoc->properties = XML_DOC_INTERNAL;
- }
- if (ctxt->myDoc->intSubset == NULL)
- ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc,
- BAD_CAST "fake", NULL, NULL);
-
- xmlSAX2EntityDecl(ctxt, name, XML_INTERNAL_GENERAL_ENTITY,
- NULL, NULL, value);
- }
- } else {
- URI = xmlParseExternalID(ctxt, &literal, 1);
- if ((URI == NULL) && (literal == NULL)) {
- xmlFatalErr(ctxt, XML_ERR_VALUE_REQUIRED, NULL);
- }
- if (URI) {
- xmlURIPtr uri;
-
- uri = xmlParseURI((const char *)URI);
- if (uri == NULL) {
- xmlErrMsgStr(ctxt, XML_ERR_INVALID_URI,
- "Invalid URI: %s\n", URI);
- /*
- * This really ought to be a well formedness error
- * but the XML Core WG decided otherwise c.f. issue
- * E26 of the XML erratas.
- */
- } else {
- if (uri->fragment != NULL) {
- /*
- * Okay this is foolish to block those but not
- * invalid URIs.
- */
- xmlFatalErr(ctxt, XML_ERR_URI_FRAGMENT, NULL);
- }
- xmlFreeURI(uri);
- }
- }
- if ((RAW != '>') && (!IS_BLANK_CH(CUR))) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required before 'NDATA'\n");
- }
- SKIP_BLANKS;
- if (CMP5(CUR_PTR, 'N', 'D', 'A', 'T', 'A')) {
- SKIP(5);
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after 'NDATA'\n");
- }
- SKIP_BLANKS;
- ndata = xmlParseName(ctxt);
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
- (ctxt->sax->unparsedEntityDecl != NULL))
- ctxt->sax->unparsedEntityDecl(ctxt->userData, name,
- literal, URI, ndata);
- } else {
- if ((ctxt->sax != NULL) &&
- (!ctxt->disableSAX) && (ctxt->sax->entityDecl != NULL))
- ctxt->sax->entityDecl(ctxt->userData, name,
- XML_EXTERNAL_GENERAL_PARSED_ENTITY,
- literal, URI, NULL);
- /*
- * For expat compatibility in SAX mode.
- * assuming the entity repalcement was asked for
- */
- if ((ctxt->replaceEntities != 0) &&
- ((ctxt->myDoc == NULL) ||
- (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE)))) {
- if (ctxt->myDoc == NULL) {
- ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE);
- if (ctxt->myDoc == NULL) {
- xmlErrMemory(ctxt, "New Doc failed");
- return;
- }
- ctxt->myDoc->properties = XML_DOC_INTERNAL;
- }
-
- if (ctxt->myDoc->intSubset == NULL)
- ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc,
- BAD_CAST "fake", NULL, NULL);
- xmlSAX2EntityDecl(ctxt, name,
- XML_EXTERNAL_GENERAL_PARSED_ENTITY,
- literal, URI, NULL);
- }
- }
- }
- }
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- SKIP_BLANKS;
- if (RAW != '>') {
- xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_NOT_FINISHED,
- "xmlParseEntityDecl: entity %s not terminated\n", name);
- xmlHaltParser(ctxt);
- } else {
- if (input != ctxt->input) {
- xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "Entity declaration doesn't start and stop in the same entity\n");
- }
- NEXT;
- }
- if (orig != NULL) {
- /*
- * Ugly mechanism to save the raw entity value.
- */
- xmlEntityPtr cur = NULL;
-
- if (isParameter) {
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->getParameterEntity != NULL))
- cur = ctxt->sax->getParameterEntity(ctxt->userData, name);
- } else {
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->getEntity != NULL))
- cur = ctxt->sax->getEntity(ctxt->userData, name);
- if ((cur == NULL) && (ctxt->userData==ctxt)) {
- cur = xmlSAX2GetEntity(ctxt, name);
- }
- }
- if (cur != NULL) {
- if (cur->orig != NULL)
- xmlFree(orig);
- else
- cur->orig = orig;
- } else
- xmlFree(orig);
- }
- if (value != NULL) xmlFree(value);
- if (URI != NULL) xmlFree(URI);
- if (literal != NULL) xmlFree(literal);
- }
-}
-
-/**
- * xmlParseDefaultDecl:
- * @ctxt: an XML parser context
- * @value: Receive a possible fixed default value for the attribute
- *
- * Parse an attribute default declaration
- *
- * [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue)
- *
- * [ VC: Required Attribute ]
- * if the default declaration is the keyword #REQUIRED, then the
- * attribute must be specified for all elements of the type in the
- * attribute-list declaration.
- *
- * [ VC: Attribute Default Legal ]
- * The declared default value must meet the lexical constraints of
- * the declared attribute type c.f. xmlValidateAttributeDecl()
- *
- * [ VC: Fixed Attribute Default ]
- * if an attribute has a default value declared with the #FIXED
- * keyword, instances of that attribute must match the default value.
- *
- * [ WFC: No < in Attribute Values ]
- * handled in xmlParseAttValue()
- *
- * returns: XML_ATTRIBUTE_NONE, XML_ATTRIBUTE_REQUIRED, XML_ATTRIBUTE_IMPLIED
- * or XML_ATTRIBUTE_FIXED.
- */
-
-int
-xmlParseDefaultDecl(xmlParserCtxtPtr ctxt, xmlChar **value) {
- int val;
- xmlChar *ret;
-
- *value = NULL;
- if (CMP9(CUR_PTR, '#', 'R', 'E', 'Q', 'U', 'I', 'R', 'E', 'D')) {
- SKIP(9);
- return(XML_ATTRIBUTE_REQUIRED);
- }
- if (CMP8(CUR_PTR, '#', 'I', 'M', 'P', 'L', 'I', 'E', 'D')) {
- SKIP(8);
- return(XML_ATTRIBUTE_IMPLIED);
- }
- val = XML_ATTRIBUTE_NONE;
- if (CMP6(CUR_PTR, '#', 'F', 'I', 'X', 'E', 'D')) {
- SKIP(6);
- val = XML_ATTRIBUTE_FIXED;
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after '#FIXED'\n");
- }
- SKIP_BLANKS;
- }
- ret = xmlParseAttValue(ctxt);
- ctxt->instate = XML_PARSER_DTD;
- if (ret == NULL) {
- xmlFatalErrMsg(ctxt, (xmlParserErrors)ctxt->errNo,
- "Attribute default value declaration error\n");
- } else
- *value = ret;
- return(val);
-}
-
-/**
- * xmlParseNotationType:
- * @ctxt: an XML parser context
- *
- * parse an Notation attribute type.
- *
- * Note: the leading 'NOTATION' S part has already being parsed...
- *
- * [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
- *
- * [ VC: Notation Attributes ]
- * Values of this type must match one of the notation names included
- * in the declaration; all notation names in the declaration must be declared.
- *
- * Returns: the notation attribute tree built while parsing
- */
-
-xmlEnumerationPtr
-xmlParseNotationType(xmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- xmlEnumerationPtr ret = NULL, last = NULL, cur, tmp;
-
- if (RAW != '(') {
- xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_STARTED, NULL);
- return(NULL);
- }
- SHRINK;
- do {
- NEXT;
- SKIP_BLANKS;
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "Name expected in NOTATION declaration\n");
- xmlFreeEnumeration(ret);
- return(NULL);
- }
- tmp = ret;
- while (tmp != NULL) {
- if (xmlStrEqual(name, tmp->name)) {
- xmlValidityError(ctxt, XML_DTD_DUP_TOKEN,
- "standalone: attribute notation value token %s duplicated\n",
- name, NULL);
- if (!xmlDictOwns(ctxt->dict, name))
- xmlFree((xmlChar *) name);
- break;
- }
- tmp = tmp->next;
- }
- if (tmp == NULL) {
- cur = xmlCreateEnumeration(name);
- if (cur == NULL) {
- xmlFreeEnumeration(ret);
- return(NULL);
- }
- if (last == NULL) ret = last = cur;
- else {
- last->next = cur;
- last = cur;
- }
- }
- SKIP_BLANKS;
- } while (RAW == '|');
- if (RAW != ')') {
- xmlFatalErr(ctxt, XML_ERR_NOTATION_NOT_FINISHED, NULL);
- xmlFreeEnumeration(ret);
- return(NULL);
- }
- NEXT;
- return(ret);
-}
-
-/**
- * xmlParseEnumerationType:
- * @ctxt: an XML parser context
- *
- * parse an Enumeration attribute type.
- *
- * [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')'
- *
- * [ VC: Enumeration ]
- * Values of this type must match one of the Nmtoken tokens in
- * the declaration
- *
- * Returns: the enumeration attribute tree built while parsing
- */
-
-xmlEnumerationPtr
-xmlParseEnumerationType(xmlParserCtxtPtr ctxt) {
- xmlChar *name;
- xmlEnumerationPtr ret = NULL, last = NULL, cur, tmp;
-
- if (RAW != '(') {
- xmlFatalErr(ctxt, XML_ERR_ATTLIST_NOT_STARTED, NULL);
- return(NULL);
- }
- SHRINK;
- do {
- NEXT;
- SKIP_BLANKS;
- name = xmlParseNmtoken(ctxt);
- if (name == NULL) {
- xmlFatalErr(ctxt, XML_ERR_NMTOKEN_REQUIRED, NULL);
- return(ret);
- }
- tmp = ret;
- while (tmp != NULL) {
- if (xmlStrEqual(name, tmp->name)) {
- xmlValidityError(ctxt, XML_DTD_DUP_TOKEN,
- "standalone: attribute enumeration value token %s duplicated\n",
- name, NULL);
- if (!xmlDictOwns(ctxt->dict, name))
- xmlFree(name);
- break;
- }
- tmp = tmp->next;
- }
- if (tmp == NULL) {
- cur = xmlCreateEnumeration(name);
- if (!xmlDictOwns(ctxt->dict, name))
- xmlFree(name);
- if (cur == NULL) {
- xmlFreeEnumeration(ret);
- return(NULL);
- }
- if (last == NULL) ret = last = cur;
- else {
- last->next = cur;
- last = cur;
- }
- }
- SKIP_BLANKS;
- } while (RAW == '|');
- if (RAW != ')') {
- xmlFatalErr(ctxt, XML_ERR_ATTLIST_NOT_FINISHED, NULL);
- return(ret);
- }
- NEXT;
- return(ret);
-}
-
-/**
- * xmlParseEnumeratedType:
- * @ctxt: an XML parser context
- * @tree: the enumeration tree built while parsing
- *
- * parse an Enumerated attribute type.
- *
- * [57] EnumeratedType ::= NotationType | Enumeration
- *
- * [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')'
- *
- *
- * Returns: XML_ATTRIBUTE_ENUMERATION or XML_ATTRIBUTE_NOTATION
- */
-
-int
-xmlParseEnumeratedType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) {
- if (CMP8(CUR_PTR, 'N', 'O', 'T', 'A', 'T', 'I', 'O', 'N')) {
- SKIP(8);
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after 'NOTATION'\n");
- return(0);
- }
- SKIP_BLANKS;
- *tree = xmlParseNotationType(ctxt);
- if (*tree == NULL) return(0);
- return(XML_ATTRIBUTE_NOTATION);
- }
- *tree = xmlParseEnumerationType(ctxt);
- if (*tree == NULL) return(0);
- return(XML_ATTRIBUTE_ENUMERATION);
-}
-
-/**
- * xmlParseAttributeType:
- * @ctxt: an XML parser context
- * @tree: the enumeration tree built while parsing
- *
- * parse the Attribute list def for an element
- *
- * [54] AttType ::= StringType | TokenizedType | EnumeratedType
- *
- * [55] StringType ::= 'CDATA'
- *
- * [56] TokenizedType ::= 'ID' | 'IDREF' | 'IDREFS' | 'ENTITY' |
- * 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS'
- *
- * Validity constraints for attribute values syntax are checked in
- * xmlValidateAttributeValue()
- *
- * [ VC: ID ]
- * Values of type ID must match the Name production. A name must not
- * appear more than once in an XML document as a value of this type;
- * i.e., ID values must uniquely identify the elements which bear them.
- *
- * [ VC: One ID per Element Type ]
- * No element type may have more than one ID attribute specified.
- *
- * [ VC: ID Attribute Default ]
- * An ID attribute must have a declared default of #IMPLIED or #REQUIRED.
- *
- * [ VC: IDREF ]
- * Values of type IDREF must match the Name production, and values
- * of type IDREFS must match Names; each IDREF Name must match the value
- * of an ID attribute on some element in the XML document; i.e. IDREF
- * values must match the value of some ID attribute.
- *
- * [ VC: Entity Name ]
- * Values of type ENTITY must match the Name production, values
- * of type ENTITIES must match Names; each Entity Name must match the
- * name of an unparsed entity declared in the DTD.
- *
- * [ VC: Name Token ]
- * Values of type NMTOKEN must match the Nmtoken production; values
- * of type NMTOKENS must match Nmtokens.
- *
- * Returns the attribute type
- */
-int
-xmlParseAttributeType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) {
- SHRINK;
- if (CMP5(CUR_PTR, 'C', 'D', 'A', 'T', 'A')) {
- SKIP(5);
- return(XML_ATTRIBUTE_CDATA);
- } else if (CMP6(CUR_PTR, 'I', 'D', 'R', 'E', 'F', 'S')) {
- SKIP(6);
- return(XML_ATTRIBUTE_IDREFS);
- } else if (CMP5(CUR_PTR, 'I', 'D', 'R', 'E', 'F')) {
- SKIP(5);
- return(XML_ATTRIBUTE_IDREF);
- } else if ((RAW == 'I') && (NXT(1) == 'D')) {
- SKIP(2);
- return(XML_ATTRIBUTE_ID);
- } else if (CMP6(CUR_PTR, 'E', 'N', 'T', 'I', 'T', 'Y')) {
- SKIP(6);
- return(XML_ATTRIBUTE_ENTITY);
- } else if (CMP8(CUR_PTR, 'E', 'N', 'T', 'I', 'T', 'I', 'E', 'S')) {
- SKIP(8);
- return(XML_ATTRIBUTE_ENTITIES);
- } else if (CMP8(CUR_PTR, 'N', 'M', 'T', 'O', 'K', 'E', 'N', 'S')) {
- SKIP(8);
- return(XML_ATTRIBUTE_NMTOKENS);
- } else if (CMP7(CUR_PTR, 'N', 'M', 'T', 'O', 'K', 'E', 'N')) {
- SKIP(7);
- return(XML_ATTRIBUTE_NMTOKEN);
- }
- return(xmlParseEnumeratedType(ctxt, tree));
-}
-
-/**
- * xmlParseAttributeListDecl:
- * @ctxt: an XML parser context
- *
- * : parse the Attribute list def for an element
- *
- * [52] AttlistDecl ::= '<!ATTLIST' S Name AttDef* S? '>'
- *
- * [53] AttDef ::= S Name S AttType S DefaultDecl
- *
- */
-void
-xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt) {
- const xmlChar *elemName;
- const xmlChar *attrName;
- xmlEnumerationPtr tree;
-
- if (CMP9(CUR_PTR, '<', '!', 'A', 'T', 'T', 'L', 'I', 'S', 'T')) {
- xmlParserInputPtr input = ctxt->input;
-
- SKIP(9);
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after '<!ATTLIST'\n");
- }
- SKIP_BLANKS;
- elemName = xmlParseName(ctxt);
- if (elemName == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "ATTLIST: no name for Element\n");
- return;
- }
- SKIP_BLANKS;
- GROW;
- while ((RAW != '>') && (ctxt->instate != XML_PARSER_EOF)) {
- const xmlChar *check = CUR_PTR;
- int type;
- int def;
- xmlChar *defaultValue = NULL;
-
- GROW;
- tree = NULL;
- attrName = xmlParseName(ctxt);
- if (attrName == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "ATTLIST: no name for Attribute\n");
- break;
- }
- GROW;
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after the attribute name\n");
- break;
- }
- SKIP_BLANKS;
-
- type = xmlParseAttributeType(ctxt, &tree);
- if (type <= 0) {
- break;
- }
-
- GROW;
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after the attribute type\n");
- if (tree != NULL)
- xmlFreeEnumeration(tree);
- break;
- }
- SKIP_BLANKS;
-
- def = xmlParseDefaultDecl(ctxt, &defaultValue);
- if (def <= 0) {
- if (defaultValue != NULL)
- xmlFree(defaultValue);
- if (tree != NULL)
- xmlFreeEnumeration(tree);
- break;
- }
- if ((type != XML_ATTRIBUTE_CDATA) && (defaultValue != NULL))
- xmlAttrNormalizeSpace(defaultValue, defaultValue);
-
- GROW;
- if (RAW != '>') {
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after the attribute default value\n");
- if (defaultValue != NULL)
- xmlFree(defaultValue);
- if (tree != NULL)
- xmlFreeEnumeration(tree);
- break;
- }
- SKIP_BLANKS;
- }
- if (check == CUR_PTR) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "in xmlParseAttributeListDecl\n");
- if (defaultValue != NULL)
- xmlFree(defaultValue);
- if (tree != NULL)
- xmlFreeEnumeration(tree);
- break;
- }
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
- (ctxt->sax->attributeDecl != NULL))
- ctxt->sax->attributeDecl(ctxt->userData, elemName, attrName,
- type, def, defaultValue, tree);
- else if (tree != NULL)
- xmlFreeEnumeration(tree);
-
- if ((ctxt->sax2) && (defaultValue != NULL) &&
- (def != XML_ATTRIBUTE_IMPLIED) &&
- (def != XML_ATTRIBUTE_REQUIRED)) {
- xmlAddDefAttrs(ctxt, elemName, attrName, defaultValue);
- }
- if (ctxt->sax2) {
- xmlAddSpecialAttr(ctxt, elemName, attrName, type);
- }
- if (defaultValue != NULL)
- xmlFree(defaultValue);
- GROW;
- }
- if (RAW == '>') {
- if (input != ctxt->input) {
- xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "Attribute list declaration doesn't start and stop in the same entity\n",
- NULL, NULL);
- }
- NEXT;
- }
- }
-}
-
-/**
- * xmlParseElementMixedContentDecl:
- * @ctxt: an XML parser context
- * @inputchk: the input used for the current entity, needed for boundary checks
- *
- * parse the declaration for a Mixed Element content
- * The leading '(' and spaces have been skipped in xmlParseElementContentDecl
- *
- * [51] Mixed ::= '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' |
- * '(' S? '#PCDATA' S? ')'
- *
- * [ VC: Proper Group/PE Nesting ] applies to [51] too (see [49])
- *
- * [ VC: No Duplicate Types ]
- * The same name must not appear more than once in a single
- * mixed-content declaration.
- *
- * returns: the list of the xmlElementContentPtr describing the element choices
- */
-xmlElementContentPtr
-xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt, int inputchk) {
- xmlElementContentPtr ret = NULL, cur = NULL, n;
- const xmlChar *elem = NULL;
-
- GROW;
- if (CMP7(CUR_PTR, '#', 'P', 'C', 'D', 'A', 'T', 'A')) {
- SKIP(7);
- SKIP_BLANKS;
- SHRINK;
- if (RAW == ')') {
- if ((ctxt->validate) && (ctxt->input->id != inputchk)) {
- xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
-"Element content declaration doesn't start and stop in the same entity\n",
- NULL, NULL);
- }
- NEXT;
- ret = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_PCDATA);
- if (ret == NULL)
- return(NULL);
- if (RAW == '*') {
- ret->ocur = XML_ELEMENT_CONTENT_MULT;
- NEXT;
- }
- return(ret);
- }
- if ((RAW == '(') || (RAW == '|')) {
- ret = cur = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_PCDATA);
- if (ret == NULL) return(NULL);
- }
- while ((RAW == '|') && (ctxt->instate != XML_PARSER_EOF)) {
- NEXT;
- if (elem == NULL) {
- ret = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR);
- if (ret == NULL) return(NULL);
- ret->c1 = cur;
- if (cur != NULL)
- cur->parent = ret;
- cur = ret;
- } else {
- n = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR);
- if (n == NULL) return(NULL);
- n->c1 = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT);
- if (n->c1 != NULL)
- n->c1->parent = n;
- cur->c2 = n;
- if (n != NULL)
- n->parent = cur;
- cur = n;
- }
- SKIP_BLANKS;
- elem = xmlParseName(ctxt);
- if (elem == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParseElementMixedContentDecl : Name expected\n");
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- return(NULL);
- }
- SKIP_BLANKS;
- GROW;
- }
- if ((RAW == ')') && (NXT(1) == '*')) {
- if (elem != NULL) {
- cur->c2 = xmlNewDocElementContent(ctxt->myDoc, elem,
- XML_ELEMENT_CONTENT_ELEMENT);
- if (cur->c2 != NULL)
- cur->c2->parent = cur;
- }
- if (ret != NULL)
- ret->ocur = XML_ELEMENT_CONTENT_MULT;
- if ((ctxt->validate) && (ctxt->input->id != inputchk)) {
- xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
-"Element content declaration doesn't start and stop in the same entity\n",
- NULL, NULL);
- }
- SKIP(2);
- } else {
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- xmlFatalErr(ctxt, XML_ERR_MIXED_NOT_STARTED, NULL);
- return(NULL);
- }
-
- } else {
- xmlFatalErr(ctxt, XML_ERR_PCDATA_REQUIRED, NULL);
- }
- return(ret);
-}
-
-/**
- * xmlParseElementChildrenContentDeclPriv:
- * @ctxt: an XML parser context
- * @inputchk: the input used for the current entity, needed for boundary checks
- * @depth: the level of recursion
- *
- * parse the declaration for a Mixed Element content
- * The leading '(' and spaces have been skipped in xmlParseElementContentDecl
- *
- *
- * [47] children ::= (choice | seq) ('?' | '*' | '+')?
- *
- * [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?
- *
- * [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')'
- *
- * [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'
- *
- * [ VC: Proper Group/PE Nesting ] applies to [49] and [50]
- * TODO Parameter-entity replacement text must be properly nested
- * with parenthesized groups. That is to say, if either of the
- * opening or closing parentheses in a choice, seq, or Mixed
- * construct is contained in the replacement text for a parameter
- * entity, both must be contained in the same replacement text. For
- * interoperability, if a parameter-entity reference appears in a
- * choice, seq, or Mixed construct, its replacement text should not
- * be empty, and neither the first nor last non-blank character of
- * the replacement text should be a connector (| or ,).
- *
- * Returns the tree of xmlElementContentPtr describing the element
- * hierarchy.
- */
-static xmlElementContentPtr
-xmlParseElementChildrenContentDeclPriv(xmlParserCtxtPtr ctxt, int inputchk,
- int depth) {
- xmlElementContentPtr ret = NULL, cur = NULL, last = NULL, op = NULL;
- const xmlChar *elem;
- xmlChar type = 0;
-
- if (((depth > 128) && ((ctxt->options & XML_PARSE_HUGE) == 0)) ||
- (depth > 2048)) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_ELEMCONTENT_NOT_FINISHED,
-"xmlParseElementChildrenContentDecl : depth %d too deep, use XML_PARSE_HUGE\n",
- depth);
- return(NULL);
- }
- SKIP_BLANKS;
- GROW;
- if (RAW == '(') {
- int inputid = ctxt->input->id;
-
- /* Recurse on first child */
- NEXT;
- SKIP_BLANKS;
- cur = ret = xmlParseElementChildrenContentDeclPriv(ctxt, inputid,
- depth + 1);
- SKIP_BLANKS;
- GROW;
- } else {
- elem = xmlParseName(ctxt);
- if (elem == NULL) {
- xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED, NULL);
- return(NULL);
- }
- cur = ret = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT);
- if (cur == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- GROW;
- if (RAW == '?') {
- cur->ocur = XML_ELEMENT_CONTENT_OPT;
- NEXT;
- } else if (RAW == '*') {
- cur->ocur = XML_ELEMENT_CONTENT_MULT;
- NEXT;
- } else if (RAW == '+') {
- cur->ocur = XML_ELEMENT_CONTENT_PLUS;
- NEXT;
- } else {
- cur->ocur = XML_ELEMENT_CONTENT_ONCE;
- }
- GROW;
- }
- SKIP_BLANKS;
- SHRINK;
- while ((RAW != ')') && (ctxt->instate != XML_PARSER_EOF)) {
- /*
- * Each loop we parse one separator and one element.
- */
- if (RAW == ',') {
- if (type == 0) type = CUR;
-
- /*
- * Detect "Name | Name , Name" error
- */
- else if (type != CUR) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_SEPARATOR_REQUIRED,
- "xmlParseElementChildrenContentDecl : '%c' expected\n",
- type);
- if ((last != NULL) && (last != ret))
- xmlFreeDocElementContent(ctxt->myDoc, last);
- if (ret != NULL)
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- return(NULL);
- }
- NEXT;
-
- op = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_SEQ);
- if (op == NULL) {
- if ((last != NULL) && (last != ret))
- xmlFreeDocElementContent(ctxt->myDoc, last);
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- return(NULL);
- }
- if (last == NULL) {
- op->c1 = ret;
- if (ret != NULL)
- ret->parent = op;
- ret = cur = op;
- } else {
- cur->c2 = op;
- if (op != NULL)
- op->parent = cur;
- op->c1 = last;
- if (last != NULL)
- last->parent = op;
- cur =op;
- last = NULL;
- }
- } else if (RAW == '|') {
- if (type == 0) type = CUR;
-
- /*
- * Detect "Name , Name | Name" error
- */
- else if (type != CUR) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_SEPARATOR_REQUIRED,
- "xmlParseElementChildrenContentDecl : '%c' expected\n",
- type);
- if ((last != NULL) && (last != ret))
- xmlFreeDocElementContent(ctxt->myDoc, last);
- if (ret != NULL)
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- return(NULL);
- }
- NEXT;
-
- op = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR);
- if (op == NULL) {
- if ((last != NULL) && (last != ret))
- xmlFreeDocElementContent(ctxt->myDoc, last);
- if (ret != NULL)
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- return(NULL);
- }
- if (last == NULL) {
- op->c1 = ret;
- if (ret != NULL)
- ret->parent = op;
- ret = cur = op;
- } else {
- cur->c2 = op;
- if (op != NULL)
- op->parent = cur;
- op->c1 = last;
- if (last != NULL)
- last->parent = op;
- cur =op;
- last = NULL;
- }
- } else {
- xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_FINISHED, NULL);
- if ((last != NULL) && (last != ret))
- xmlFreeDocElementContent(ctxt->myDoc, last);
- if (ret != NULL)
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- return(NULL);
- }
- GROW;
- SKIP_BLANKS;
- GROW;
- if (RAW == '(') {
- int inputid = ctxt->input->id;
- /* Recurse on second child */
- NEXT;
- SKIP_BLANKS;
- last = xmlParseElementChildrenContentDeclPriv(ctxt, inputid,
- depth + 1);
- SKIP_BLANKS;
- } else {
- elem = xmlParseName(ctxt);
- if (elem == NULL) {
- xmlFatalErr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED, NULL);
- if (ret != NULL)
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- return(NULL);
- }
- last = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT);
- if (last == NULL) {
- if (ret != NULL)
- xmlFreeDocElementContent(ctxt->myDoc, ret);
- return(NULL);
- }
- if (RAW == '?') {
- last->ocur = XML_ELEMENT_CONTENT_OPT;
- NEXT;
- } else if (RAW == '*') {
- last->ocur = XML_ELEMENT_CONTENT_MULT;
- NEXT;
- } else if (RAW == '+') {
- last->ocur = XML_ELEMENT_CONTENT_PLUS;
- NEXT;
- } else {
- last->ocur = XML_ELEMENT_CONTENT_ONCE;
- }
- }
- SKIP_BLANKS;
- GROW;
- }
- if ((cur != NULL) && (last != NULL)) {
- cur->c2 = last;
- if (last != NULL)
- last->parent = cur;
- }
- if ((ctxt->validate) && (ctxt->input->id != inputchk)) {
- xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
-"Element content declaration doesn't start and stop in the same entity\n",
- NULL, NULL);
- }
- NEXT;
- if (RAW == '?') {
- if (ret != NULL) {
- if ((ret->ocur == XML_ELEMENT_CONTENT_PLUS) ||
- (ret->ocur == XML_ELEMENT_CONTENT_MULT))
- ret->ocur = XML_ELEMENT_CONTENT_MULT;
- else
- ret->ocur = XML_ELEMENT_CONTENT_OPT;
- }
- NEXT;
- } else if (RAW == '*') {
- if (ret != NULL) {
- ret->ocur = XML_ELEMENT_CONTENT_MULT;
- cur = ret;
- /*
- * Some normalization:
- * (a | b* | c?)* == (a | b | c)*
- */
- while ((cur != NULL) && (cur->type == XML_ELEMENT_CONTENT_OR)) {
- if ((cur->c1 != NULL) &&
- ((cur->c1->ocur == XML_ELEMENT_CONTENT_OPT) ||
- (cur->c1->ocur == XML_ELEMENT_CONTENT_MULT)))
- cur->c1->ocur = XML_ELEMENT_CONTENT_ONCE;
- if ((cur->c2 != NULL) &&
- ((cur->c2->ocur == XML_ELEMENT_CONTENT_OPT) ||
- (cur->c2->ocur == XML_ELEMENT_CONTENT_MULT)))
- cur->c2->ocur = XML_ELEMENT_CONTENT_ONCE;
- cur = cur->c2;
- }
- }
- NEXT;
- } else if (RAW == '+') {
- if (ret != NULL) {
- int found = 0;
-
- if ((ret->ocur == XML_ELEMENT_CONTENT_OPT) ||
- (ret->ocur == XML_ELEMENT_CONTENT_MULT))
- ret->ocur = XML_ELEMENT_CONTENT_MULT;
- else
- ret->ocur = XML_ELEMENT_CONTENT_PLUS;
- /*
- * Some normalization:
- * (a | b*)+ == (a | b)*
- * (a | b?)+ == (a | b)*
- */
- while ((cur != NULL) && (cur->type == XML_ELEMENT_CONTENT_OR)) {
- if ((cur->c1 != NULL) &&
- ((cur->c1->ocur == XML_ELEMENT_CONTENT_OPT) ||
- (cur->c1->ocur == XML_ELEMENT_CONTENT_MULT))) {
- cur->c1->ocur = XML_ELEMENT_CONTENT_ONCE;
- found = 1;
- }
- if ((cur->c2 != NULL) &&
- ((cur->c2->ocur == XML_ELEMENT_CONTENT_OPT) ||
- (cur->c2->ocur == XML_ELEMENT_CONTENT_MULT))) {
- cur->c2->ocur = XML_ELEMENT_CONTENT_ONCE;
- found = 1;
- }
- cur = cur->c2;
- }
- if (found)
- ret->ocur = XML_ELEMENT_CONTENT_MULT;
- }
- NEXT;
- }
- return(ret);
-}
-
-/**
- * xmlParseElementChildrenContentDecl:
- * @ctxt: an XML parser context
- * @inputchk: the input used for the current entity, needed for boundary checks
- *
- * parse the declaration for a Mixed Element content
- * The leading '(' and spaces have been skipped in xmlParseElementContentDecl
- *
- * [47] children ::= (choice | seq) ('?' | '*' | '+')?
- *
- * [48] cp ::= (Name | choice | seq) ('?' | '*' | '+')?
- *
- * [49] choice ::= '(' S? cp ( S? '|' S? cp )* S? ')'
- *
- * [50] seq ::= '(' S? cp ( S? ',' S? cp )* S? ')'
- *
- * [ VC: Proper Group/PE Nesting ] applies to [49] and [50]
- * TODO Parameter-entity replacement text must be properly nested
- * with parenthesized groups. That is to say, if either of the
- * opening or closing parentheses in a choice, seq, or Mixed
- * construct is contained in the replacement text for a parameter
- * entity, both must be contained in the same replacement text. For
- * interoperability, if a parameter-entity reference appears in a
- * choice, seq, or Mixed construct, its replacement text should not
- * be empty, and neither the first nor last non-blank character of
- * the replacement text should be a connector (| or ,).
- *
- * Returns the tree of xmlElementContentPtr describing the element
- * hierarchy.
- */
-xmlElementContentPtr
-xmlParseElementChildrenContentDecl(xmlParserCtxtPtr ctxt, int inputchk) {
- /* stub left for API/ABI compat */
- return(xmlParseElementChildrenContentDeclPriv(ctxt, inputchk, 1));
-}
-
-/**
- * xmlParseElementContentDecl:
- * @ctxt: an XML parser context
- * @name: the name of the element being defined.
- * @result: the Element Content pointer will be stored here if any
- *
- * parse the declaration for an Element content either Mixed or Children,
- * the cases EMPTY and ANY are handled directly in xmlParseElementDecl
- *
- * [46] contentspec ::= 'EMPTY' | 'ANY' | Mixed | children
- *
- * returns: the type of element content XML_ELEMENT_TYPE_xxx
- */
-
-int
-xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, const xmlChar *name,
- xmlElementContentPtr *result) {
-
- xmlElementContentPtr tree = NULL;
- int inputid = ctxt->input->id;
- int res;
-
- *result = NULL;
-
- if (RAW != '(') {
- xmlFatalErrMsgStr(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED,
- "xmlParseElementContentDecl : %s '(' expected\n", name);
- return(-1);
- }
- NEXT;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
- SKIP_BLANKS;
- if (CMP7(CUR_PTR, '#', 'P', 'C', 'D', 'A', 'T', 'A')) {
- tree = xmlParseElementMixedContentDecl(ctxt, inputid);
- res = XML_ELEMENT_TYPE_MIXED;
- } else {
- tree = xmlParseElementChildrenContentDeclPriv(ctxt, inputid, 1);
- res = XML_ELEMENT_TYPE_ELEMENT;
- }
- SKIP_BLANKS;
- *result = tree;
- return(res);
-}
-
-/**
- * xmlParseElementDecl:
- * @ctxt: an XML parser context
- *
- * parse an Element declaration.
- *
- * [45] elementdecl ::= '<!ELEMENT' S Name S contentspec S? '>'
- *
- * [ VC: Unique Element Type Declaration ]
- * No element type may be declared more than once
- *
- * Returns the type of the element, or -1 in case of error
- */
-int
-xmlParseElementDecl(xmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- int ret = -1;
- xmlElementContentPtr content = NULL;
-
- /* GROW; done in the caller */
- if (CMP9(CUR_PTR, '<', '!', 'E', 'L', 'E', 'M', 'E', 'N', 'T')) {
- xmlParserInputPtr input = ctxt->input;
-
- SKIP(9);
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after 'ELEMENT'\n");
- return(-1);
- }
- SKIP_BLANKS;
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParseElementDecl: no name for Element\n");
- return(-1);
- }
- while ((RAW == 0) && (ctxt->inputNr > 1))
- xmlPopInput(ctxt);
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space required after the element name\n");
- }
- SKIP_BLANKS;
- if (CMP5(CUR_PTR, 'E', 'M', 'P', 'T', 'Y')) {
- SKIP(5);
- /*
- * Element must always be empty.
- */
- ret = XML_ELEMENT_TYPE_EMPTY;
- } else if ((RAW == 'A') && (NXT(1) == 'N') &&
- (NXT(2) == 'Y')) {
- SKIP(3);
- /*
- * Element is a generic container.
- */
- ret = XML_ELEMENT_TYPE_ANY;
- } else if (RAW == '(') {
- ret = xmlParseElementContentDecl(ctxt, name, &content);
- } else {
- /*
- * [ WFC: PEs in Internal Subset ] error handling.
- */
- if ((RAW == '%') && (ctxt->external == 0) &&
- (ctxt->inputNr == 1)) {
- xmlFatalErrMsg(ctxt, XML_ERR_PEREF_IN_INT_SUBSET,
- "PEReference: forbidden within markup decl in internal subset\n");
- } else {
- xmlFatalErrMsg(ctxt, XML_ERR_ELEMCONTENT_NOT_STARTED,
- "xmlParseElementDecl: 'EMPTY', 'ANY' or '(' expected\n");
- }
- return(-1);
- }
-
- SKIP_BLANKS;
- /*
- * Pop-up of finished entities.
- */
- while ((RAW == 0) && (ctxt->inputNr > 1))
- xmlPopInput(ctxt);
- SKIP_BLANKS;
-
- if (RAW != '>') {
- xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL);
- if (content != NULL) {
- xmlFreeDocElementContent(ctxt->myDoc, content);
- }
- } else {
- if (input != ctxt->input) {
- xmlFatalErrMsg(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "Element declaration doesn't start and stop in the same entity\n");
- }
-
- NEXT;
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
- (ctxt->sax->elementDecl != NULL)) {
- if (content != NULL)
- content->parent = NULL;
- ctxt->sax->elementDecl(ctxt->userData, name, ret,
- content);
- if ((content != NULL) && (content->parent == NULL)) {
- /*
- * this is a trick: if xmlAddElementDecl is called,
- * instead of copying the full tree it is plugged directly
- * if called from the parser. Avoid duplicating the
- * interfaces or change the API/ABI
- */
- xmlFreeDocElementContent(ctxt->myDoc, content);
- }
- } else if (content != NULL) {
- xmlFreeDocElementContent(ctxt->myDoc, content);
- }
- }
- }
- return(ret);
-}
-
-/**
- * xmlParseConditionalSections
- * @ctxt: an XML parser context
- *
- * [61] conditionalSect ::= includeSect | ignoreSect
- * [62] includeSect ::= '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>'
- * [63] ignoreSect ::= '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>'
- * [64] ignoreSectContents ::= Ignore ('<![' ignoreSectContents ']]>' Ignore)*
- * [65] Ignore ::= Char* - (Char* ('<![' | ']]>') Char*)
- */
-
-static void
-xmlParseConditionalSections(xmlParserCtxtPtr ctxt) {
- int id = ctxt->input->id;
-
- SKIP(3);
- SKIP_BLANKS;
- if (CMP7(CUR_PTR, 'I', 'N', 'C', 'L', 'U', 'D', 'E')) {
- SKIP(7);
- SKIP_BLANKS;
- if (RAW != '[') {
- xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID, NULL);
- xmlHaltParser(ctxt);
- return;
- } else {
- if (ctxt->input->id != id) {
- xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "All markup of the conditional section is not in the same entity\n",
- NULL, NULL);
- }
- NEXT;
- }
- if (xmlParserDebugEntities) {
- if ((ctxt->input != NULL) && (ctxt->input->filename))
- xmlGenericError(xmlGenericErrorContext,
- "%s(%d): ", ctxt->input->filename,
- ctxt->input->line);
- xmlGenericError(xmlGenericErrorContext,
- "Entering INCLUDE Conditional Section\n");
- }
-
- while (((RAW != 0) && ((RAW != ']') || (NXT(1) != ']') ||
- (NXT(2) != '>'))) && (ctxt->instate != XML_PARSER_EOF)) {
- const xmlChar *check = CUR_PTR;
- unsigned int cons = ctxt->input->consumed;
-
- if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
- xmlParseConditionalSections(ctxt);
- } else if (IS_BLANK_CH(CUR)) {
- NEXT;
- } else if (RAW == '%') {
- xmlParsePEReference(ctxt);
- } else
- xmlParseMarkupDecl(ctxt);
-
- /*
- * Pop-up of finished entities.
- */
- while ((RAW == 0) && (ctxt->inputNr > 1))
- xmlPopInput(ctxt);
-
- if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) {
- xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL);
- xmlHaltParser(ctxt);
- break;
- }
- }
- if (xmlParserDebugEntities) {
- if ((ctxt->input != NULL) && (ctxt->input->filename))
- xmlGenericError(xmlGenericErrorContext,
- "%s(%d): ", ctxt->input->filename,
- ctxt->input->line);
- xmlGenericError(xmlGenericErrorContext,
- "Leaving INCLUDE Conditional Section\n");
- }
-
- } else if (CMP6(CUR_PTR, 'I', 'G', 'N', 'O', 'R', 'E')) {
- int state;
- xmlParserInputState instate;
- int depth = 0;
-
- SKIP(6);
- SKIP_BLANKS;
- if (RAW != '[') {
- xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID, NULL);
- xmlHaltParser(ctxt);
- return;
- } else {
- if (ctxt->input->id != id) {
- xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "All markup of the conditional section is not in the same entity\n",
- NULL, NULL);
- }
- NEXT;
- }
- if (xmlParserDebugEntities) {
- if ((ctxt->input != NULL) && (ctxt->input->filename))
- xmlGenericError(xmlGenericErrorContext,
- "%s(%d): ", ctxt->input->filename,
- ctxt->input->line);
- xmlGenericError(xmlGenericErrorContext,
- "Entering IGNORE Conditional Section\n");
- }
-
- /*
- * Parse up to the end of the conditional section
- * But disable SAX event generating DTD building in the meantime
- */
- state = ctxt->disableSAX;
- instate = ctxt->instate;
- if (ctxt->recovery == 0) ctxt->disableSAX = 1;
- ctxt->instate = XML_PARSER_IGNORE;
-
- while (((depth >= 0) && (RAW != 0)) &&
- (ctxt->instate != XML_PARSER_EOF)) {
- if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
- depth++;
- SKIP(3);
- continue;
- }
- if ((RAW == ']') && (NXT(1) == ']') && (NXT(2) == '>')) {
- if (--depth >= 0) SKIP(3);
- continue;
- }
- NEXT;
- continue;
- }
-
- ctxt->disableSAX = state;
- ctxt->instate = instate;
-
- if (xmlParserDebugEntities) {
- if ((ctxt->input != NULL) && (ctxt->input->filename))
- xmlGenericError(xmlGenericErrorContext,
- "%s(%d): ", ctxt->input->filename,
- ctxt->input->line);
- xmlGenericError(xmlGenericErrorContext,
- "Leaving IGNORE Conditional Section\n");
- }
-
- } else {
- xmlFatalErr(ctxt, XML_ERR_CONDSEC_INVALID_KEYWORD, NULL);
- xmlHaltParser(ctxt);
- return;
- }
-
- if (RAW == 0)
- SHRINK;
-
- if (RAW == 0) {
- xmlFatalErr(ctxt, XML_ERR_CONDSEC_NOT_FINISHED, NULL);
- } else {
- if (ctxt->input->id != id) {
- xmlValidityError(ctxt, XML_ERR_ENTITY_BOUNDARY,
- "All markup of the conditional section is not in the same entity\n",
- NULL, NULL);
- }
- if ((ctxt-> instate != XML_PARSER_EOF) &&
- ((ctxt->input->cur + 3) <= ctxt->input->end))
- SKIP(3);
- }
-}
-
-/**
- * xmlParseMarkupDecl:
- * @ctxt: an XML parser context
- *
- * parse Markup declarations
- *
- * [29] markupdecl ::= elementdecl | AttlistDecl | EntityDecl |
- * NotationDecl | PI | Comment
- *
- * [ VC: Proper Declaration/PE Nesting ]
- * Parameter-entity replacement text must be properly nested with
- * markup declarations. That is to say, if either the first character
- * or the last character of a markup declaration (markupdecl above) is
- * contained in the replacement text for a parameter-entity reference,
- * both must be contained in the same replacement text.
- *
- * [ WFC: PEs in Internal Subset ]
- * In the internal DTD subset, parameter-entity references can occur
- * only where markup declarations can occur, not within markup declarations.
- * (This does not apply to references that occur in external parameter
- * entities or to the external subset.)
- */
-void
-xmlParseMarkupDecl(xmlParserCtxtPtr ctxt) {
- GROW;
- if (CUR == '<') {
- if (NXT(1) == '!') {
- switch (NXT(2)) {
- case 'E':
- if (NXT(3) == 'L')
- xmlParseElementDecl(ctxt);
- else if (NXT(3) == 'N')
- xmlParseEntityDecl(ctxt);
- break;
- case 'A':
- xmlParseAttributeListDecl(ctxt);
- break;
- case 'N':
- xmlParseNotationDecl(ctxt);
- break;
- case '-':
- xmlParseComment(ctxt);
- break;
- default:
- /* there is an error but it will be detected later */
- break;
- }
- } else if (NXT(1) == '?') {
- xmlParsePI(ctxt);
- }
- }
-
- /*
- * detect requirement to exit there and act accordingly
- * and avoid having instate overriden later on
- */
- if (ctxt->instate == XML_PARSER_EOF)
- return;
-
- /*
- * This is only for internal subset. On external entities,
- * the replacement is done before parsing stage
- */
- if ((ctxt->external == 0) && (ctxt->inputNr == 1))
- xmlParsePEReference(ctxt);
-
- /*
- * Conditional sections are allowed from entities included
- * by PE References in the internal subset.
- */
- if ((ctxt->external == 0) && (ctxt->inputNr > 1)) {
- if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
- xmlParseConditionalSections(ctxt);
- }
- }
-
- ctxt->instate = XML_PARSER_DTD;
-}
-
-/**
- * xmlParseTextDecl:
- * @ctxt: an XML parser context
- *
- * parse an XML declaration header for external entities
- *
- * [77] TextDecl ::= '<?xml' VersionInfo? EncodingDecl S? '?>'
- */
-
-void
-xmlParseTextDecl(xmlParserCtxtPtr ctxt) {
- xmlChar *version;
- const xmlChar *encoding;
-
- /*
- * We know that '<?xml' is here.
- */
- if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
- SKIP(5);
- } else {
- xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_STARTED, NULL);
- return;
- }
-
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space needed after '<?xml'\n");
- }
- SKIP_BLANKS;
-
- /*
- * We may have the VersionInfo here.
- */
- version = xmlParseVersionInfo(ctxt);
- if (version == NULL)
- version = xmlCharStrdup(XML_DEFAULT_VERSION);
- else {
- if (!IS_BLANK_CH(CUR)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Space needed here\n");
- }
- }
- ctxt->input->version = version;
-
- /*
- * We must have the encoding declaration
- */
- encoding = xmlParseEncodingDecl(ctxt);
- if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
- /*
- * The XML REC instructs us to stop parsing right here
- */
- return;
- }
- if ((encoding == NULL) && (ctxt->errNo == XML_ERR_OK)) {
- xmlFatalErrMsg(ctxt, XML_ERR_MISSING_ENCODING,
- "Missing encoding in text declaration\n");
- }
-
- SKIP_BLANKS;
- if ((RAW == '?') && (NXT(1) == '>')) {
- SKIP(2);
- } else if (RAW == '>') {
- /* Deprecated old WD ... */
- xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL);
- NEXT;
- } else {
- xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL);
- MOVETO_ENDTAG(CUR_PTR);
- NEXT;
- }
-}
-
-/**
- * xmlParseExternalSubset:
- * @ctxt: an XML parser context
- * @ExternalID: the external identifier
- * @SystemID: the system identifier (or URL)
- *
- * parse Markup declarations from an external subset
- *
- * [30] extSubset ::= textDecl? extSubsetDecl
- *
- * [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) *
- */
-void
-xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const xmlChar *ExternalID,
- const xmlChar *SystemID) {
- xmlDetectSAX2(ctxt);
- GROW;
-
- if ((ctxt->encoding == NULL) &&
- (ctxt->input->end - ctxt->input->cur >= 4)) {
- xmlChar start[4];
- xmlCharEncoding enc;
-
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(start, 4);
- if (enc != XML_CHAR_ENCODING_NONE)
- xmlSwitchEncoding(ctxt, enc);
- }
-
- if (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) {
- xmlParseTextDecl(ctxt);
- if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
- /*
- * The XML REC instructs us to stop parsing right here
- */
- xmlHaltParser(ctxt);
- return;
- }
- }
- if (ctxt->myDoc == NULL) {
- ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0");
- if (ctxt->myDoc == NULL) {
- xmlErrMemory(ctxt, "New Doc failed");
- return;
- }
- ctxt->myDoc->properties = XML_DOC_INTERNAL;
- }
- if ((ctxt->myDoc != NULL) && (ctxt->myDoc->intSubset == NULL))
- xmlCreateIntSubset(ctxt->myDoc, NULL, ExternalID, SystemID);
-
- ctxt->instate = XML_PARSER_DTD;
- ctxt->external = 1;
- while (((RAW == '<') && (NXT(1) == '?')) ||
- ((RAW == '<') && (NXT(1) == '!')) ||
- (RAW == '%') || IS_BLANK_CH(CUR)) {
- const xmlChar *check = CUR_PTR;
- unsigned int cons = ctxt->input->consumed;
-
- GROW;
- if ((RAW == '<') && (NXT(1) == '!') && (NXT(2) == '[')) {
- xmlParseConditionalSections(ctxt);
- } else if (IS_BLANK_CH(CUR)) {
- NEXT;
- } else if (RAW == '%') {
- xmlParsePEReference(ctxt);
- } else
- xmlParseMarkupDecl(ctxt);
-
- /*
- * Pop-up of finished entities.
- */
- while ((RAW == 0) && (ctxt->inputNr > 1))
- xmlPopInput(ctxt);
-
- if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) {
- xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL);
- break;
- }
- }
-
- if (RAW != 0) {
- xmlFatalErr(ctxt, XML_ERR_EXT_SUBSET_NOT_FINISHED, NULL);
- }
-
-}
-
-/**
- * xmlParseReference:
- * @ctxt: an XML parser context
- *
- * parse and handle entity references in content, depending on the SAX
- * interface, this may end-up in a call to character() if this is a
- * CharRef, a predefined entity, if there is no reference() callback.
- * or if the parser was asked to switch to that mode.
- *
- * [67] Reference ::= EntityRef | CharRef
- */
-void
-xmlParseReference(xmlParserCtxtPtr ctxt) {
- xmlEntityPtr ent;
- xmlChar *val;
- int was_checked;
- xmlNodePtr list = NULL;
- xmlParserErrors ret = XML_ERR_OK;
-
-
- if (RAW != '&')
- return;
-
- /*
- * Simple case of a CharRef
- */
- if (NXT(1) == '#') {
- int i = 0;
- xmlChar out[10];
- int hex = NXT(2);
- int value = xmlParseCharRef(ctxt);
-
- if (value == 0)
- return;
- if (ctxt->charset != XML_CHAR_ENCODING_UTF8) {
- /*
- * So we are using non-UTF-8 buffers
- * Check that the char fit on 8bits, if not
- * generate a CharRef.
- */
- if (value <= 0xFF) {
- out[0] = value;
- out[1] = 0;
- if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->characters(ctxt->userData, out, 1);
- } else {
- if ((hex == 'x') || (hex == 'X'))
- snprintf((char *)out, sizeof(out), "#x%X", value);
- else
- snprintf((char *)out, sizeof(out), "#%d", value);
- if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->reference(ctxt->userData, out);
- }
- } else {
- /*
- * Just encode the value in UTF-8
- */
- COPY_BUF(0 ,out, i, value);
- out[i] = 0;
- if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->characters(ctxt->userData, out, i);
- }
- return;
- }
-
- /*
- * We are seeing an entity reference
- */
- ent = xmlParseEntityRef(ctxt);
- if (ent == NULL) return;
- if (!ctxt->wellFormed)
- return;
- was_checked = ent->checked;
-
- /* special case of predefined entities */
- if ((ent->name == NULL) ||
- (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
- val = ent->content;
- if (val == NULL) return;
- /*
- * inline the entity.
- */
- if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->characters(ctxt->userData, val, xmlStrlen(val));
- return;
- }
-
- /*
- * The first reference to the entity trigger a parsing phase
- * where the ent->children is filled with the result from
- * the parsing.
- * Note: external parsed entities will not be loaded, it is not
- * required for a non-validating parser, unless the parsing option
- * of validating, or substituting entities were given. Doing so is
- * far more secure as the parser will only process data coming from
- * the document entity by default.
- */
- if (((ent->checked == 0) ||
- ((ent->children == NULL) && (ctxt->options & XML_PARSE_NOENT))) &&
- ((ent->etype != XML_EXTERNAL_GENERAL_PARSED_ENTITY) ||
- (ctxt->options & (XML_PARSE_NOENT | XML_PARSE_DTDVALID)))) {
- unsigned long oldnbent = ctxt->nbentities;
-
- /*
- * This is a bit hackish but this seems the best
- * way to make sure both SAX and DOM entity support
- * behaves okay.
- */
- void *user_data;
- if (ctxt->userData == ctxt)
- user_data = NULL;
- else
- user_data = ctxt->userData;
-
- /*
- * Check that this entity is well formed
- * 4.3.2: An internal general parsed entity is well-formed
- * if its replacement text matches the production labeled
- * content.
- */
- if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) {
- ctxt->depth++;
- ret = xmlParseBalancedChunkMemoryInternal(ctxt, ent->content,
- user_data, &list);
- ctxt->depth--;
-
- } else if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
- ctxt->depth++;
- ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt, ctxt->sax,
- user_data, ctxt->depth, ent->URI,
- ent->ExternalID, &list);
- ctxt->depth--;
- } else {
- ret = XML_ERR_ENTITY_PE_INTERNAL;
- xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
- "invalid entity type found\n", NULL);
- }
-
- /*
- * Store the number of entities needing parsing for this entity
- * content and do checkings
- */
- ent->checked = (ctxt->nbentities - oldnbent + 1) * 2;
- if ((ent->content != NULL) && (xmlStrchr(ent->content, '<')))
- ent->checked |= 1;
- if (ret == XML_ERR_ENTITY_LOOP) {
- xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
- xmlFreeNodeList(list);
- return;
- }
- if (xmlParserEntityCheck(ctxt, 0, ent, 0)) {
- xmlFreeNodeList(list);
- return;
- }
-
- if ((ret == XML_ERR_OK) && (list != NULL)) {
- if (((ent->etype == XML_INTERNAL_GENERAL_ENTITY) ||
- (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY))&&
- (ent->children == NULL)) {
- ent->children = list;
- if (ctxt->replaceEntities) {
- /*
- * Prune it directly in the generated document
- * except for single text nodes.
- */
- if (((list->type == XML_TEXT_NODE) &&
- (list->next == NULL)) ||
- (ctxt->parseMode == XML_PARSE_READER)) {
- list->parent = (xmlNodePtr) ent;
- list = NULL;
- ent->owner = 1;
- } else {
- ent->owner = 0;
- while (list != NULL) {
- list->parent = (xmlNodePtr) ctxt->node;
- list->doc = ctxt->myDoc;
- if (list->next == NULL)
- ent->last = list;
- list = list->next;
- }
- list = ent->children;
-#ifdef LIBXML_LEGACY_ENABLED
- if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)
- xmlAddEntityReference(ent, list, NULL);
-#endif /* LIBXML_LEGACY_ENABLED */
- }
- } else {
- ent->owner = 1;
- while (list != NULL) {
- list->parent = (xmlNodePtr) ent;
- xmlSetTreeDoc(list, ent->doc);
- if (list->next == NULL)
- ent->last = list;
- list = list->next;
- }
- }
- } else {
- xmlFreeNodeList(list);
- list = NULL;
- }
- } else if ((ret != XML_ERR_OK) &&
- (ret != XML_WAR_UNDECLARED_ENTITY)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
- "Entity '%s' failed to parse\n", ent->name);
- xmlParserEntityCheck(ctxt, 0, ent, 0);
- } else if (list != NULL) {
- xmlFreeNodeList(list);
- list = NULL;
- }
- if (ent->checked == 0)
- ent->checked = 2;
- } else if (ent->checked != 1) {
- ctxt->nbentities += ent->checked / 2;
- }
-
- /*
- * Now that the entity content has been gathered
- * provide it to the application, this can take different forms based
- * on the parsing modes.
- */
- if (ent->children == NULL) {
- /*
- * Probably running in SAX mode and the callbacks don't
- * build the entity content. So unless we already went
- * though parsing for first checking go though the entity
- * content to generate callbacks associated to the entity
- */
- if (was_checked != 0) {
- void *user_data;
- /*
- * This is a bit hackish but this seems the best
- * way to make sure both SAX and DOM entity support
- * behaves okay.
- */
- if (ctxt->userData == ctxt)
- user_data = NULL;
- else
- user_data = ctxt->userData;
-
- if (ent->etype == XML_INTERNAL_GENERAL_ENTITY) {
- ctxt->depth++;
- ret = xmlParseBalancedChunkMemoryInternal(ctxt,
- ent->content, user_data, NULL);
- ctxt->depth--;
- } else if (ent->etype ==
- XML_EXTERNAL_GENERAL_PARSED_ENTITY) {
- ctxt->depth++;
- ret = xmlParseExternalEntityPrivate(ctxt->myDoc, ctxt,
- ctxt->sax, user_data, ctxt->depth,
- ent->URI, ent->ExternalID, NULL);
- ctxt->depth--;
- } else {
- ret = XML_ERR_ENTITY_PE_INTERNAL;
- xmlErrMsgStr(ctxt, XML_ERR_INTERNAL_ERROR,
- "invalid entity type found\n", NULL);
- }
- if (ret == XML_ERR_ENTITY_LOOP) {
- xmlFatalErr(ctxt, XML_ERR_ENTITY_LOOP, NULL);
- return;
- }
- }
- if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) &&
- (ctxt->replaceEntities == 0) && (!ctxt->disableSAX)) {
- /*
- * Entity reference callback comes second, it's somewhat
- * superfluous but a compatibility to historical behaviour
- */
- ctxt->sax->reference(ctxt->userData, ent->name);
- }
- return;
- }
-
- /*
- * If we didn't get any children for the entity being built
- */
- if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) &&
- (ctxt->replaceEntities == 0) && (!ctxt->disableSAX)) {
- /*
- * Create a node.
- */
- ctxt->sax->reference(ctxt->userData, ent->name);
- return;
- }
-
- if ((ctxt->replaceEntities) || (ent->children == NULL)) {
- /*
- * There is a problem on the handling of _private for entities
- * (bug 155816): Should we copy the content of the field from
- * the entity (possibly overwriting some value set by the user
- * when a copy is created), should we leave it alone, or should
- * we try to take care of different situations? The problem
- * is exacerbated by the usage of this field by the xmlReader.
- * To fix this bug, we look at _private on the created node
- * and, if it's NULL, we copy in whatever was in the entity.
- * If it's not NULL we leave it alone. This is somewhat of a
- * hack - maybe we should have further tests to determine
- * what to do.
- */
- if ((ctxt->node != NULL) && (ent->children != NULL)) {
- /*
- * Seems we are generating the DOM content, do
- * a simple tree copy for all references except the first
- * In the first occurrence list contains the replacement.
- */
- if (((list == NULL) && (ent->owner == 0)) ||
- (ctxt->parseMode == XML_PARSE_READER)) {
- xmlNodePtr nw = NULL, cur, firstChild = NULL;
-
- /*
- * We are copying here, make sure there is no abuse
- */
- ctxt->sizeentcopy += ent->length + 5;
- if (xmlParserEntityCheck(ctxt, 0, ent, ctxt->sizeentcopy))
- return;
-
- /*
- * when operating on a reader, the entities definitions
- * are always owning the entities subtree.
- if (ctxt->parseMode == XML_PARSE_READER)
- ent->owner = 1;
- */
-
- cur = ent->children;
- while (cur != NULL) {
- nw = xmlDocCopyNode(cur, ctxt->myDoc, 1);
- if (nw != NULL) {
- if (nw->_private == NULL)
- nw->_private = cur->_private;
- if (firstChild == NULL){
- firstChild = nw;
- }
- nw = xmlAddChild(ctxt->node, nw);
- }
- if (cur == ent->last) {
- /*
- * needed to detect some strange empty
- * node cases in the reader tests
- */
- if ((ctxt->parseMode == XML_PARSE_READER) &&
- (nw != NULL) &&
- (nw->type == XML_ELEMENT_NODE) &&
- (nw->children == NULL))
- nw->extra = 1;
-
- break;
- }
- cur = cur->next;
- }
-#ifdef LIBXML_LEGACY_ENABLED
- if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)
- xmlAddEntityReference(ent, firstChild, nw);
-#endif /* LIBXML_LEGACY_ENABLED */
- } else if ((list == NULL) || (ctxt->inputNr > 0)) {
- xmlNodePtr nw = NULL, cur, next, last,
- firstChild = NULL;
-
- /*
- * We are copying here, make sure there is no abuse
- */
- ctxt->sizeentcopy += ent->length + 5;
- if (xmlParserEntityCheck(ctxt, 0, ent, ctxt->sizeentcopy))
- return;
-
- /*
- * Copy the entity child list and make it the new
- * entity child list. The goal is to make sure any
- * ID or REF referenced will be the one from the
- * document content and not the entity copy.
- */
- cur = ent->children;
- ent->children = NULL;
- last = ent->last;
- ent->last = NULL;
- while (cur != NULL) {
- next = cur->next;
- cur->next = NULL;
- cur->parent = NULL;
- nw = xmlDocCopyNode(cur, ctxt->myDoc, 1);
- if (nw != NULL) {
- if (nw->_private == NULL)
- nw->_private = cur->_private;
- if (firstChild == NULL){
- firstChild = cur;
- }
- xmlAddChild((xmlNodePtr) ent, nw);
- xmlAddChild(ctxt->node, cur);
- }
- if (cur == last)
- break;
- cur = next;
- }
- if (ent->owner == 0)
- ent->owner = 1;
-#ifdef LIBXML_LEGACY_ENABLED
- if (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)
- xmlAddEntityReference(ent, firstChild, nw);
-#endif /* LIBXML_LEGACY_ENABLED */
- } else {
- const xmlChar *nbktext;
-
- /*
- * the name change is to avoid coalescing of the
- * node with a possible previous text one which
- * would make ent->children a dangling pointer
- */
- nbktext = xmlDictLookup(ctxt->dict, BAD_CAST "nbktext",
- -1);
- if (ent->children->type == XML_TEXT_NODE)
- ent->children->name = nbktext;
- if ((ent->last != ent->children) &&
- (ent->last->type == XML_TEXT_NODE))
- ent->last->name = nbktext;
- xmlAddChildList(ctxt->node, ent->children);
- }
-
- /*
- * This is to avoid a nasty side effect, see
- * characters() in SAX.c
- */
- ctxt->nodemem = 0;
- ctxt->nodelen = 0;
- return;
- }
- }
-}
-
-/**
- * xmlParseEntityRef:
- * @ctxt: an XML parser context
- *
- * parse ENTITY references declarations
- *
- * [68] EntityRef ::= '&' Name ';'
- *
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an internal DTD
- * subset which contains no parameter entity references, or a document
- * with "standalone='yes'", the Name given in the entity reference
- * must match that in an entity declaration, except that well-formed
- * documents need not declare any of the following entities: amp, lt,
- * gt, apos, quot. The declaration of a parameter entity must precede
- * any reference to it. Similarly, the declaration of a general entity
- * must precede any reference to it which appears in a default value in an
- * attribute-list declaration. Note that if entities are declared in the
- * external subset or in external parameter entities, a non-validating
- * processor is not obligated to read and process their declarations;
- * for such documents, the rule that an entity must be declared is a
- * well-formedness constraint only if standalone='yes'.
- *
- * [ WFC: Parsed Entity ]
- * An entity reference must not contain the name of an unparsed entity
- *
- * Returns the xmlEntityPtr if found, or NULL otherwise.
- */
-xmlEntityPtr
-xmlParseEntityRef(xmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- xmlEntityPtr ent = NULL;
-
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
-
- if (RAW != '&')
- return(NULL);
- NEXT;
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParseEntityRef: no name\n");
- return(NULL);
- }
- if (RAW != ';') {
- xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL);
- return(NULL);
- }
- NEXT;
-
- /*
- * Predefined entities override any extra definition
- */
- if ((ctxt->options & XML_PARSE_OLDSAX) == 0) {
- ent = xmlGetPredefinedEntity(name);
- if (ent != NULL)
- return(ent);
- }
-
- /*
- * Increase the number of entity references parsed
- */
- ctxt->nbentities++;
-
- /*
- * Ask first SAX for entity resolution, otherwise try the
- * entities which may have stored in the parser context.
- */
- if (ctxt->sax != NULL) {
- if (ctxt->sax->getEntity != NULL)
- ent = ctxt->sax->getEntity(ctxt->userData, name);
- if ((ctxt->wellFormed == 1 ) && (ent == NULL) &&
- (ctxt->options & XML_PARSE_OLDSAX))
- ent = xmlGetPredefinedEntity(name);
- if ((ctxt->wellFormed == 1 ) && (ent == NULL) &&
- (ctxt->userData==ctxt)) {
- ent = xmlSAX2GetEntity(ctxt, name);
- }
- }
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- /*
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an
- * internal DTD subset which contains no parameter entity
- * references, or a document with "standalone='yes'", the
- * Name given in the entity reference must match that in an
- * entity declaration, except that well-formed documents
- * need not declare any of the following entities: amp, lt,
- * gt, apos, quot.
- * The declaration of a parameter entity must precede any
- * reference to it.
- * Similarly, the declaration of a general entity must
- * precede any reference to it which appears in a default
- * value in an attribute-list declaration. Note that if
- * entities are declared in the external subset or in
- * external parameter entities, a non-validating processor
- * is not obligated to read and process their declarations;
- * for such documents, the rule that an entity must be
- * declared is a well-formedness constraint only if
- * standalone='yes'.
- */
- if (ent == NULL) {
- if ((ctxt->standalone == 1) ||
- ((ctxt->hasExternalSubset == 0) &&
- (ctxt->hasPErefs == 0))) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
- "Entity '%s' not defined\n", name);
- } else {
- xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY,
- "Entity '%s' not defined\n", name);
- if ((ctxt->inSubset == 0) &&
- (ctxt->sax != NULL) &&
- (ctxt->sax->reference != NULL)) {
- ctxt->sax->reference(ctxt->userData, name);
- }
- }
- xmlParserEntityCheck(ctxt, 0, ent, 0);
- ctxt->valid = 0;
- }
-
- /*
- * [ WFC: Parsed Entity ]
- * An entity reference must not contain the name of an
- * unparsed entity
- */
- else if (ent->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNPARSED_ENTITY,
- "Entity reference to unparsed entity %s\n", name);
- }
-
- /*
- * [ WFC: No External Entity References ]
- * Attribute values cannot contain direct or indirect
- * entity references to external entities.
- */
- else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
- (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_EXTERNAL,
- "Attribute references external entity '%s'\n", name);
- }
- /*
- * [ WFC: No < in Attribute Values ]
- * The replacement text of any entity referred to directly or
- * indirectly in an attribute value (other than "&lt;") must
- * not contain a <.
- */
- else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
- (ent != NULL) &&
- (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY)) {
- if (((ent->checked & 1) || (ent->checked == 0)) &&
- (ent->content != NULL) && (xmlStrchr(ent->content, '<'))) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
- "'<' in entity '%s' is not allowed in attributes values\n", name);
- }
- }
-
- /*
- * Internal check, no parameter entities here ...
- */
- else {
- switch (ent->etype) {
- case XML_INTERNAL_PARAMETER_ENTITY:
- case XML_EXTERNAL_PARAMETER_ENTITY:
- xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER,
- "Attempt to reference the parameter entity '%s'\n",
- name);
- break;
- default:
- break;
- }
- }
-
- /*
- * [ WFC: No Recursion ]
- * A parsed entity must not contain a recursive reference
- * to itself, either directly or indirectly.
- * Done somewhere else
- */
- return(ent);
-}
-
-/**
- * xmlParseStringEntityRef:
- * @ctxt: an XML parser context
- * @str: a pointer to an index in the string
- *
- * parse ENTITY references declarations, but this version parses it from
- * a string value.
- *
- * [68] EntityRef ::= '&' Name ';'
- *
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an internal DTD
- * subset which contains no parameter entity references, or a document
- * with "standalone='yes'", the Name given in the entity reference
- * must match that in an entity declaration, except that well-formed
- * documents need not declare any of the following entities: amp, lt,
- * gt, apos, quot. The declaration of a parameter entity must precede
- * any reference to it. Similarly, the declaration of a general entity
- * must precede any reference to it which appears in a default value in an
- * attribute-list declaration. Note that if entities are declared in the
- * external subset or in external parameter entities, a non-validating
- * processor is not obligated to read and process their declarations;
- * for such documents, the rule that an entity must be declared is a
- * well-formedness constraint only if standalone='yes'.
- *
- * [ WFC: Parsed Entity ]
- * An entity reference must not contain the name of an unparsed entity
- *
- * Returns the xmlEntityPtr if found, or NULL otherwise. The str pointer
- * is updated to the current location in the string.
- */
-static xmlEntityPtr
-xmlParseStringEntityRef(xmlParserCtxtPtr ctxt, const xmlChar ** str) {
- xmlChar *name;
- const xmlChar *ptr;
- xmlChar cur;
- xmlEntityPtr ent = NULL;
-
- if ((str == NULL) || (*str == NULL))
- return(NULL);
- ptr = *str;
- cur = *ptr;
- if (cur != '&')
- return(NULL);
-
- ptr++;
- name = xmlParseStringName(ctxt, &ptr);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParseStringEntityRef: no name\n");
- *str = ptr;
- return(NULL);
- }
- if (*ptr != ';') {
- xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL);
- xmlFree(name);
- *str = ptr;
- return(NULL);
- }
- ptr++;
-
-
- /*
- * Predefined entities override any extra definition
- */
- if ((ctxt->options & XML_PARSE_OLDSAX) == 0) {
- ent = xmlGetPredefinedEntity(name);
- if (ent != NULL) {
- xmlFree(name);
- *str = ptr;
- return(ent);
- }
- }
-
- /*
- * Increate the number of entity references parsed
- */
- ctxt->nbentities++;
-
- /*
- * Ask first SAX for entity resolution, otherwise try the
- * entities which may have stored in the parser context.
- */
- if (ctxt->sax != NULL) {
- if (ctxt->sax->getEntity != NULL)
- ent = ctxt->sax->getEntity(ctxt->userData, name);
- if ((ent == NULL) && (ctxt->options & XML_PARSE_OLDSAX))
- ent = xmlGetPredefinedEntity(name);
- if ((ent == NULL) && (ctxt->userData==ctxt)) {
- ent = xmlSAX2GetEntity(ctxt, name);
- }
- }
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(name);
- return(NULL);
- }
-
- /*
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an
- * internal DTD subset which contains no parameter entity
- * references, or a document with "standalone='yes'", the
- * Name given in the entity reference must match that in an
- * entity declaration, except that well-formed documents
- * need not declare any of the following entities: amp, lt,
- * gt, apos, quot.
- * The declaration of a parameter entity must precede any
- * reference to it.
- * Similarly, the declaration of a general entity must
- * precede any reference to it which appears in a default
- * value in an attribute-list declaration. Note that if
- * entities are declared in the external subset or in
- * external parameter entities, a non-validating processor
- * is not obligated to read and process their declarations;
- * for such documents, the rule that an entity must be
- * declared is a well-formedness constraint only if
- * standalone='yes'.
- */
- if (ent == NULL) {
- if ((ctxt->standalone == 1) ||
- ((ctxt->hasExternalSubset == 0) &&
- (ctxt->hasPErefs == 0))) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
- "Entity '%s' not defined\n", name);
- } else {
- xmlErrMsgStr(ctxt, XML_WAR_UNDECLARED_ENTITY,
- "Entity '%s' not defined\n",
- name);
- }
- xmlParserEntityCheck(ctxt, 0, ent, 0);
- /* TODO ? check regressions ctxt->valid = 0; */
- }
-
- /*
- * [ WFC: Parsed Entity ]
- * An entity reference must not contain the name of an
- * unparsed entity
- */
- else if (ent->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNPARSED_ENTITY,
- "Entity reference to unparsed entity %s\n", name);
- }
-
- /*
- * [ WFC: No External Entity References ]
- * Attribute values cannot contain direct or indirect
- * entity references to external entities.
- */
- else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
- (ent->etype == XML_EXTERNAL_GENERAL_PARSED_ENTITY)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_EXTERNAL,
- "Attribute references external entity '%s'\n", name);
- }
- /*
- * [ WFC: No < in Attribute Values ]
- * The replacement text of any entity referred to directly or
- * indirectly in an attribute value (other than "&lt;") must
- * not contain a <.
- */
- else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) &&
- (ent != NULL) && (ent->content != NULL) &&
- (ent->etype != XML_INTERNAL_PREDEFINED_ENTITY) &&
- (xmlStrchr(ent->content, '<'))) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_LT_IN_ATTRIBUTE,
- "'<' in entity '%s' is not allowed in attributes values\n",
- name);
- }
-
- /*
- * Internal check, no parameter entities here ...
- */
- else {
- switch (ent->etype) {
- case XML_INTERNAL_PARAMETER_ENTITY:
- case XML_EXTERNAL_PARAMETER_ENTITY:
- xmlFatalErrMsgStr(ctxt, XML_ERR_ENTITY_IS_PARAMETER,
- "Attempt to reference the parameter entity '%s'\n",
- name);
- break;
- default:
- break;
- }
- }
-
- /*
- * [ WFC: No Recursion ]
- * A parsed entity must not contain a recursive reference
- * to itself, either directly or indirectly.
- * Done somewhere else
- */
-
- xmlFree(name);
- *str = ptr;
- return(ent);
-}
-
-/**
- * xmlParsePEReference:
- * @ctxt: an XML parser context
- *
- * parse PEReference declarations
- * The entity content is handled directly by pushing it's content as
- * a new input stream.
- *
- * [69] PEReference ::= '%' Name ';'
- *
- * [ WFC: No Recursion ]
- * A parsed entity must not contain a recursive
- * reference to itself, either directly or indirectly.
- *
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an internal DTD
- * subset which contains no parameter entity references, or a document
- * with "standalone='yes'", ... ... The declaration of a parameter
- * entity must precede any reference to it...
- *
- * [ VC: Entity Declared ]
- * In a document with an external subset or external parameter entities
- * with "standalone='no'", ... ... The declaration of a parameter entity
- * must precede any reference to it...
- *
- * [ WFC: In DTD ]
- * Parameter-entity references may only appear in the DTD.
- * NOTE: misleading but this is handled.
- */
-void
-xmlParsePEReference(xmlParserCtxtPtr ctxt)
-{
- const xmlChar *name;
- xmlEntityPtr entity = NULL;
- xmlParserInputPtr input;
-
- if (RAW != '%')
- return;
- NEXT;
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParsePEReference: no name\n");
- return;
- }
- if (RAW != ';') {
- xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL);
- return;
- }
-
- NEXT;
-
- /*
- * Increate the number of entity references parsed
- */
- ctxt->nbentities++;
-
- /*
- * Request the entity from SAX
- */
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->getParameterEntity != NULL))
- entity = ctxt->sax->getParameterEntity(ctxt->userData, name);
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- if (entity == NULL) {
- /*
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an
- * internal DTD subset which contains no parameter entity
- * references, or a document with "standalone='yes'", ...
- * ... The declaration of a parameter entity must precede
- * any reference to it...
- */
- if ((ctxt->standalone == 1) ||
- ((ctxt->hasExternalSubset == 0) &&
- (ctxt->hasPErefs == 0))) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
- "PEReference: %%%s; not found\n",
- name);
- } else {
- /*
- * [ VC: Entity Declared ]
- * In a document with an external subset or external
- * parameter entities with "standalone='no'", ...
- * ... The declaration of a parameter entity must
- * precede any reference to it...
- */
- xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
- "PEReference: %%%s; not found\n",
- name, NULL);
- ctxt->valid = 0;
- }
- xmlParserEntityCheck(ctxt, 0, NULL, 0);
- } else {
- /*
- * Internal checking in case the entity quest barfed
- */
- if ((entity->etype != XML_INTERNAL_PARAMETER_ENTITY) &&
- (entity->etype != XML_EXTERNAL_PARAMETER_ENTITY)) {
- xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
- "Internal: %%%s; is not a parameter entity\n",
- name, NULL);
- } else if (ctxt->input->free != deallocblankswrapper) {
- input = xmlNewBlanksWrapperInputStream(ctxt, entity);
- if (xmlPushInput(ctxt, input) < 0)
- return;
- } else {
- if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
- ((ctxt->options & XML_PARSE_NOENT) == 0) &&
- ((ctxt->options & XML_PARSE_DTDVALID) == 0) &&
- ((ctxt->options & XML_PARSE_DTDLOAD) == 0) &&
- ((ctxt->options & XML_PARSE_DTDATTR) == 0) &&
- (ctxt->replaceEntities == 0) &&
- (ctxt->validate == 0))
- return;
-
- /*
- * TODO !!!
- * handle the extra spaces added before and after
- * c.f. http://www.w3.org/TR/REC-xml#as-PE
- */
- input = xmlNewEntityInputStream(ctxt, entity);
- if (xmlPushInput(ctxt, input) < 0)
- return;
- if ((entity->etype == XML_EXTERNAL_PARAMETER_ENTITY) &&
- (CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) &&
- (IS_BLANK_CH(NXT(5)))) {
- xmlParseTextDecl(ctxt);
- if (ctxt->errNo ==
- XML_ERR_UNSUPPORTED_ENCODING) {
- /*
- * The XML REC instructs us to stop parsing
- * right here
- */
- xmlHaltParser(ctxt);
- return;
- }
- }
- }
- }
- ctxt->hasPErefs = 1;
-}
-
-/**
- * xmlLoadEntityContent:
- * @ctxt: an XML parser context
- * @entity: an unloaded system entity
- *
- * Load the original content of the given system entity from the
- * ExternalID/SystemID given. This is to be used for Included in Literal
- * http://www.w3.org/TR/REC-xml/#inliteral processing of entities references
- *
- * Returns 0 in case of success and -1 in case of failure
- */
-static int
-xmlLoadEntityContent(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
- xmlParserInputPtr input;
- xmlBufferPtr buf;
- int l, c;
- int count = 0;
-
- if ((ctxt == NULL) || (entity == NULL) ||
- ((entity->etype != XML_EXTERNAL_PARAMETER_ENTITY) &&
- (entity->etype != XML_EXTERNAL_GENERAL_PARSED_ENTITY)) ||
- (entity->content != NULL)) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlLoadEntityContent parameter error");
- return(-1);
- }
-
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "Reading %s entity content input\n", entity->name);
-
- buf = xmlBufferCreate();
- if (buf == NULL) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlLoadEntityContent parameter error");
- return(-1);
- }
-
- input = xmlNewEntityInputStream(ctxt, entity);
- if (input == NULL) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlLoadEntityContent input error");
- xmlBufferFree(buf);
- return(-1);
- }
-
- /*
- * Push the entity as the current input, read char by char
- * saving to the buffer until the end of the entity or an error
- */
- if (xmlPushInput(ctxt, input) < 0) {
- xmlBufferFree(buf);
- return(-1);
- }
-
- GROW;
- c = CUR_CHAR(l);
- while ((ctxt->input == input) && (ctxt->input->cur < ctxt->input->end) &&
- (IS_CHAR(c))) {
- xmlBufferAdd(buf, ctxt->input->cur, l);
- if (count++ > XML_PARSER_CHUNK_SIZE) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlBufferFree(buf);
- return(-1);
- }
- }
- NEXTL(l);
- c = CUR_CHAR(l);
- if (c == 0) {
- count = 0;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlBufferFree(buf);
- return(-1);
- }
- c = CUR_CHAR(l);
- }
- }
-
- if ((ctxt->input == input) && (ctxt->input->cur >= ctxt->input->end)) {
- xmlPopInput(ctxt);
- } else if (!IS_CHAR(c)) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_INVALID_CHAR,
- "xmlLoadEntityContent: invalid char value %d\n",
- c);
- xmlBufferFree(buf);
- return(-1);
- }
- entity->content = buf->content;
- buf->content = NULL;
- xmlBufferFree(buf);
-
- return(0);
-}
-
-/**
- * xmlParseStringPEReference:
- * @ctxt: an XML parser context
- * @str: a pointer to an index in the string
- *
- * parse PEReference declarations
- *
- * [69] PEReference ::= '%' Name ';'
- *
- * [ WFC: No Recursion ]
- * A parsed entity must not contain a recursive
- * reference to itself, either directly or indirectly.
- *
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an internal DTD
- * subset which contains no parameter entity references, or a document
- * with "standalone='yes'", ... ... The declaration of a parameter
- * entity must precede any reference to it...
- *
- * [ VC: Entity Declared ]
- * In a document with an external subset or external parameter entities
- * with "standalone='no'", ... ... The declaration of a parameter entity
- * must precede any reference to it...
- *
- * [ WFC: In DTD ]
- * Parameter-entity references may only appear in the DTD.
- * NOTE: misleading but this is handled.
- *
- * Returns the string of the entity content.
- * str is updated to the current value of the index
- */
-static xmlEntityPtr
-xmlParseStringPEReference(xmlParserCtxtPtr ctxt, const xmlChar **str) {
- const xmlChar *ptr;
- xmlChar cur;
- xmlChar *name;
- xmlEntityPtr entity = NULL;
-
- if ((str == NULL) || (*str == NULL)) return(NULL);
- ptr = *str;
- cur = *ptr;
- if (cur != '%')
- return(NULL);
- ptr++;
- name = xmlParseStringName(ctxt, &ptr);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParseStringPEReference: no name\n");
- *str = ptr;
- return(NULL);
- }
- cur = *ptr;
- if (cur != ';') {
- xmlFatalErr(ctxt, XML_ERR_ENTITYREF_SEMICOL_MISSING, NULL);
- xmlFree(name);
- *str = ptr;
- return(NULL);
- }
- ptr++;
-
- /*
- * Increate the number of entity references parsed
- */
- ctxt->nbentities++;
-
- /*
- * Request the entity from SAX
- */
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->getParameterEntity != NULL))
- entity = ctxt->sax->getParameterEntity(ctxt->userData, name);
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(name);
- return(NULL);
- }
- if (entity == NULL) {
- /*
- * [ WFC: Entity Declared ]
- * In a document without any DTD, a document with only an
- * internal DTD subset which contains no parameter entity
- * references, or a document with "standalone='yes'", ...
- * ... The declaration of a parameter entity must precede
- * any reference to it...
- */
- if ((ctxt->standalone == 1) ||
- ((ctxt->hasExternalSubset == 0) && (ctxt->hasPErefs == 0))) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNDECLARED_ENTITY,
- "PEReference: %%%s; not found\n", name);
- } else {
- /*
- * [ VC: Entity Declared ]
- * In a document with an external subset or external
- * parameter entities with "standalone='no'", ...
- * ... The declaration of a parameter entity must
- * precede any reference to it...
- */
- xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
- "PEReference: %%%s; not found\n",
- name, NULL);
- ctxt->valid = 0;
- }
- xmlParserEntityCheck(ctxt, 0, NULL, 0);
- } else {
- /*
- * Internal checking in case the entity quest barfed
- */
- if ((entity->etype != XML_INTERNAL_PARAMETER_ENTITY) &&
- (entity->etype != XML_EXTERNAL_PARAMETER_ENTITY)) {
- xmlWarningMsg(ctxt, XML_WAR_UNDECLARED_ENTITY,
- "%%%s; is not a parameter entity\n",
- name, NULL);
- }
- }
- ctxt->hasPErefs = 1;
- xmlFree(name);
- *str = ptr;
- return(entity);
-}
-
-/**
- * xmlParseDocTypeDecl:
- * @ctxt: an XML parser context
- *
- * parse a DOCTYPE declaration
- *
- * [28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S?
- * ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
- *
- * [ VC: Root Element Type ]
- * The Name in the document type declaration must match the element
- * type of the root element.
- */
-
-void
-xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt) {
- const xmlChar *name = NULL;
- xmlChar *ExternalID = NULL;
- xmlChar *URI = NULL;
-
- /*
- * We know that '<!DOCTYPE' has been detected.
- */
- SKIP(9);
-
- SKIP_BLANKS;
-
- /*
- * Parse the DOCTYPE name.
- */
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParseDocTypeDecl : no DOCTYPE name !\n");
- }
- ctxt->intSubName = name;
-
- SKIP_BLANKS;
-
- /*
- * Check for SystemID and ExternalID
- */
- URI = xmlParseExternalID(ctxt, &ExternalID, 1);
-
- if ((URI != NULL) || (ExternalID != NULL)) {
- ctxt->hasExternalSubset = 1;
- }
- ctxt->extSubURI = URI;
- ctxt->extSubSystem = ExternalID;
-
- SKIP_BLANKS;
-
- /*
- * Create and update the internal subset.
- */
- if ((ctxt->sax != NULL) && (ctxt->sax->internalSubset != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->internalSubset(ctxt->userData, name, ExternalID, URI);
- if (ctxt->instate == XML_PARSER_EOF)
- return;
-
- /*
- * Is there any internal subset declarations ?
- * they are handled separately in xmlParseInternalSubset()
- */
- if (RAW == '[')
- return;
-
- /*
- * We should be at the end of the DOCTYPE declaration.
- */
- if (RAW != '>') {
- xmlFatalErr(ctxt, XML_ERR_DOCTYPE_NOT_FINISHED, NULL);
- }
- NEXT;
-}
-
-/**
- * xmlParseInternalSubset:
- * @ctxt: an XML parser context
- *
- * parse the internal subset declaration
- *
- * [28 end] ('[' (markupdecl | PEReference | S)* ']' S?)? '>'
- */
-
-static void
-xmlParseInternalSubset(xmlParserCtxtPtr ctxt) {
- /*
- * Is there any DTD definition ?
- */
- if (RAW == '[') {
- ctxt->instate = XML_PARSER_DTD;
- NEXT;
- /*
- * Parse the succession of Markup declarations and
- * PEReferences.
- * Subsequence (markupdecl | PEReference | S)*
- */
- while ((RAW != ']') && (ctxt->instate != XML_PARSER_EOF)) {
- const xmlChar *check = CUR_PTR;
- unsigned int cons = ctxt->input->consumed;
-
- SKIP_BLANKS;
- xmlParseMarkupDecl(ctxt);
- xmlParsePEReference(ctxt);
-
- /*
- * Pop-up of finished entities.
- */
- while ((RAW == 0) && (ctxt->inputNr > 1))
- xmlPopInput(ctxt);
-
- if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlParseInternalSubset: error detected in Markup declaration\n");
- break;
- }
- }
- if (RAW == ']') {
- NEXT;
- SKIP_BLANKS;
- }
- }
-
- /*
- * We should be at the end of the DOCTYPE declaration.
- */
- if (RAW != '>') {
- xmlFatalErr(ctxt, XML_ERR_DOCTYPE_NOT_FINISHED, NULL);
- return;
- }
- NEXT;
-}
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * xmlParseAttribute:
- * @ctxt: an XML parser context
- * @value: a xmlChar ** used to store the value of the attribute
- *
- * parse an attribute
- *
- * [41] Attribute ::= Name Eq AttValue
- *
- * [ WFC: No External Entity References ]
- * Attribute values cannot contain direct or indirect entity references
- * to external entities.
- *
- * [ WFC: No < in Attribute Values ]
- * The replacement text of any entity referred to directly or indirectly in
- * an attribute value (other than "&lt;") must not contain a <.
- *
- * [ VC: Attribute Value Type ]
- * The attribute must have been declared; the value must be of the type
- * declared for it.
- *
- * [25] Eq ::= S? '=' S?
- *
- * With namespace:
- *
- * [NS 11] Attribute ::= QName Eq AttValue
- *
- * Also the case QName == xmlns:??? is handled independently as a namespace
- * definition.
- *
- * Returns the attribute name, and the value in *value.
- */
-
-const xmlChar *
-xmlParseAttribute(xmlParserCtxtPtr ctxt, xmlChar **value) {
- const xmlChar *name;
- xmlChar *val;
-
- *value = NULL;
- GROW;
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "error parsing attribute name\n");
- return(NULL);
- }
-
- /*
- * read the value
- */
- SKIP_BLANKS;
- if (RAW == '=') {
- NEXT;
- SKIP_BLANKS;
- val = xmlParseAttValue(ctxt);
- ctxt->instate = XML_PARSER_CONTENT;
- } else {
- xmlFatalErrMsgStr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE,
- "Specification mandate value for attribute %s\n", name);
- return(NULL);
- }
-
- /*
- * Check that xml:lang conforms to the specification
- * No more registered as an error, just generate a warning now
- * since this was deprecated in XML second edition
- */
- if ((ctxt->pedantic) && (xmlStrEqual(name, BAD_CAST "xml:lang"))) {
- if (!xmlCheckLanguageID(val)) {
- xmlWarningMsg(ctxt, XML_WAR_LANG_VALUE,
- "Malformed value for xml:lang : %s\n",
- val, NULL);
- }
- }
-
- /*
- * Check that xml:space conforms to the specification
- */
- if (xmlStrEqual(name, BAD_CAST "xml:space")) {
- if (xmlStrEqual(val, BAD_CAST "default"))
- *(ctxt->space) = 0;
- else if (xmlStrEqual(val, BAD_CAST "preserve"))
- *(ctxt->space) = 1;
- else {
- xmlWarningMsg(ctxt, XML_WAR_SPACE_VALUE,
-"Invalid value \"%s\" for xml:space : \"default\" or \"preserve\" expected\n",
- val, NULL);
- }
- }
-
- *value = val;
- return(name);
-}
-
-/**
- * xmlParseStartTag:
- * @ctxt: an XML parser context
- *
- * parse a start of tag either for rule element or
- * EmptyElement. In both case we don't parse the tag closing chars.
- *
- * [40] STag ::= '<' Name (S Attribute)* S? '>'
- *
- * [ WFC: Unique Att Spec ]
- * No attribute name may appear more than once in the same start-tag or
- * empty-element tag.
- *
- * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
- *
- * [ WFC: Unique Att Spec ]
- * No attribute name may appear more than once in the same start-tag or
- * empty-element tag.
- *
- * With namespace:
- *
- * [NS 8] STag ::= '<' QName (S Attribute)* S? '>'
- *
- * [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>'
- *
- * Returns the element name parsed
- */
-
-const xmlChar *
-xmlParseStartTag(xmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- const xmlChar *attname;
- xmlChar *attvalue;
- const xmlChar **atts = ctxt->atts;
- int nbatts = 0;
- int maxatts = ctxt->maxatts;
- int i;
-
- if (RAW != '<') return(NULL);
- NEXT1;
-
- name = xmlParseName(ctxt);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "xmlParseStartTag: invalid element name\n");
- return(NULL);
- }
-
- /*
- * Now parse the attributes, it ends up with the ending
- *
- * (S Attribute)* S?
- */
- SKIP_BLANKS;
- GROW;
-
- while (((RAW != '>') &&
- ((RAW != '/') || (NXT(1) != '>')) &&
- (IS_BYTE_CHAR(RAW))) && (ctxt->instate != XML_PARSER_EOF)) {
- const xmlChar *q = CUR_PTR;
- unsigned int cons = ctxt->input->consumed;
-
- attname = xmlParseAttribute(ctxt, &attvalue);
- if ((attname != NULL) && (attvalue != NULL)) {
- /*
- * [ WFC: Unique Att Spec ]
- * No attribute name may appear more than once in the same
- * start-tag or empty-element tag.
- */
- for (i = 0; i < nbatts;i += 2) {
- if (xmlStrEqual(atts[i], attname)) {
- xmlErrAttributeDup(ctxt, NULL, attname);
- xmlFree(attvalue);
- goto failed;
- }
- }
- /*
- * Add the pair to atts
- */
- if (atts == NULL) {
- maxatts = 22; /* allow for 10 attrs by default */
- atts = (const xmlChar **)
- xmlMalloc(maxatts * sizeof(xmlChar *));
- if (atts == NULL) {
- xmlErrMemory(ctxt, NULL);
- if (attvalue != NULL)
- xmlFree(attvalue);
- goto failed;
- }
- ctxt->atts = atts;
- ctxt->maxatts = maxatts;
- } else if (nbatts + 4 > maxatts) {
- const xmlChar **n;
-
- maxatts *= 2;
- n = (const xmlChar **) xmlRealloc((void *) atts,
- maxatts * sizeof(const xmlChar *));
- if (n == NULL) {
- xmlErrMemory(ctxt, NULL);
- if (attvalue != NULL)
- xmlFree(attvalue);
- goto failed;
- }
- atts = n;
- ctxt->atts = atts;
- ctxt->maxatts = maxatts;
- }
- atts[nbatts++] = attname;
- atts[nbatts++] = attvalue;
- atts[nbatts] = NULL;
- atts[nbatts + 1] = NULL;
- } else {
- if (attvalue != NULL)
- xmlFree(attvalue);
- }
-
-failed:
-
- GROW
- if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
- break;
- if (!IS_BLANK_CH(RAW)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "attributes construct error\n");
- }
- SKIP_BLANKS;
- if ((cons == ctxt->input->consumed) && (q == CUR_PTR) &&
- (attname == NULL) && (attvalue == NULL)) {
- xmlFatalErrMsg(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlParseStartTag: problem parsing attributes\n");
- break;
- }
- SHRINK;
- GROW;
- }
-
- /*
- * SAX: Start of Element !
- */
- if ((ctxt->sax != NULL) && (ctxt->sax->startElement != NULL) &&
- (!ctxt->disableSAX)) {
- if (nbatts > 0)
- ctxt->sax->startElement(ctxt->userData, name, atts);
- else
- ctxt->sax->startElement(ctxt->userData, name, NULL);
- }
-
- if (atts != NULL) {
- /* Free only the content strings */
- for (i = 1;i < nbatts;i+=2)
- if (atts[i] != NULL)
- xmlFree((xmlChar *) atts[i]);
- }
- return(name);
-}
-
-/**
- * xmlParseEndTag1:
- * @ctxt: an XML parser context
- * @line: line of the start tag
- * @nsNr: number of namespaces on the start tag
- *
- * parse an end of tag
- *
- * [42] ETag ::= '</' Name S? '>'
- *
- * With namespace
- *
- * [NS 9] ETag ::= '</' QName S? '>'
- */
-
-static void
-xmlParseEndTag1(xmlParserCtxtPtr ctxt, int line) {
- const xmlChar *name;
-
- GROW;
- if ((RAW != '<') || (NXT(1) != '/')) {
- xmlFatalErrMsg(ctxt, XML_ERR_LTSLASH_REQUIRED,
- "xmlParseEndTag: '</' not found\n");
- return;
- }
- SKIP(2);
-
- name = xmlParseNameAndCompare(ctxt,ctxt->name);
-
- /*
- * We should definitely be at the ending "S? '>'" part
- */
- GROW;
- SKIP_BLANKS;
- if ((!IS_BYTE_CHAR(RAW)) || (RAW != '>')) {
- xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL);
- } else
- NEXT1;
-
- /*
- * [ WFC: Element Type Match ]
- * The Name in an element's end-tag must match the element type in the
- * start-tag.
- *
- */
- if (name != (xmlChar*)1) {
- if (name == NULL) name = BAD_CAST "unparseable";
- xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
- "Opening and ending tag mismatch: %s line %d and %s\n",
- ctxt->name, line, name);
- }
-
- /*
- * SAX: End of Tag
- */
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->endElement(ctxt->userData, ctxt->name);
-
- namePop(ctxt);
- spacePop(ctxt);
- return;
-}
-
-/**
- * xmlParseEndTag:
- * @ctxt: an XML parser context
- *
- * parse an end of tag
- *
- * [42] ETag ::= '</' Name S? '>'
- *
- * With namespace
- *
- * [NS 9] ETag ::= '</' QName S? '>'
- */
-
-void
-xmlParseEndTag(xmlParserCtxtPtr ctxt) {
- xmlParseEndTag1(ctxt, 0);
-}
-#endif /* LIBXML_SAX1_ENABLED */
-
-/************************************************************************
- * *
- * SAX 2 specific operations *
- * *
- ************************************************************************/
-
-/*
- * xmlGetNamespace:
- * @ctxt: an XML parser context
- * @prefix: the prefix to lookup
- *
- * Lookup the namespace name for the @prefix (which ca be NULL)
- * The prefix must come from the @ctxt->dict dictionary
- *
- * Returns the namespace name or NULL if not bound
- */
-static const xmlChar *
-xmlGetNamespace(xmlParserCtxtPtr ctxt, const xmlChar *prefix) {
- int i;
-
- if (prefix == ctxt->str_xml) return(ctxt->str_xml_ns);
- for (i = ctxt->nsNr - 2;i >= 0;i-=2)
- if (ctxt->nsTab[i] == prefix) {
- if ((prefix == NULL) && (*ctxt->nsTab[i + 1] == 0))
- return(NULL);
- return(ctxt->nsTab[i + 1]);
- }
- return(NULL);
-}
-
-/**
- * xmlParseQName:
- * @ctxt: an XML parser context
- * @prefix: pointer to store the prefix part
- *
- * parse an XML Namespace QName
- *
- * [6] QName ::= (Prefix ':')? LocalPart
- * [7] Prefix ::= NCName
- * [8] LocalPart ::= NCName
- *
- * Returns the Name parsed or NULL
- */
-
-static const xmlChar *
-xmlParseQName(xmlParserCtxtPtr ctxt, const xmlChar **prefix) {
- const xmlChar *l, *p;
-
- GROW;
-
- l = xmlParseNCName(ctxt);
- if (l == NULL) {
- if (CUR == ':') {
- l = xmlParseName(ctxt);
- if (l != NULL) {
- xmlNsErr(ctxt, XML_NS_ERR_QNAME,
- "Failed to parse QName '%s'\n", l, NULL, NULL);
- *prefix = NULL;
- return(l);
- }
- }
- return(NULL);
- }
- if (CUR == ':') {
- NEXT;
- p = l;
- l = xmlParseNCName(ctxt);
- if (l == NULL) {
- xmlChar *tmp;
-
- xmlNsErr(ctxt, XML_NS_ERR_QNAME,
- "Failed to parse QName '%s:'\n", p, NULL, NULL);
- l = xmlParseNmtoken(ctxt);
- if (l == NULL)
- tmp = xmlBuildQName(BAD_CAST "", p, NULL, 0);
- else {
- tmp = xmlBuildQName(l, p, NULL, 0);
- xmlFree((char *)l);
- }
- p = xmlDictLookup(ctxt->dict, tmp, -1);
- if (tmp != NULL) xmlFree(tmp);
- *prefix = NULL;
- return(p);
- }
- if (CUR == ':') {
- xmlChar *tmp;
-
- xmlNsErr(ctxt, XML_NS_ERR_QNAME,
- "Failed to parse QName '%s:%s:'\n", p, l, NULL);
- NEXT;
- tmp = (xmlChar *) xmlParseName(ctxt);
- if (tmp != NULL) {
- tmp = xmlBuildQName(tmp, l, NULL, 0);
- l = xmlDictLookup(ctxt->dict, tmp, -1);
- if (tmp != NULL) xmlFree(tmp);
- *prefix = p;
- return(l);
- }
- tmp = xmlBuildQName(BAD_CAST "", l, NULL, 0);
- l = xmlDictLookup(ctxt->dict, tmp, -1);
- if (tmp != NULL) xmlFree(tmp);
- *prefix = p;
- return(l);
- }
- *prefix = p;
- } else
- *prefix = NULL;
- return(l);
-}
-
-/**
- * xmlParseQNameAndCompare:
- * @ctxt: an XML parser context
- * @name: the localname
- * @prefix: the prefix, if any.
- *
- * parse an XML name and compares for match
- * (specialized for endtag parsing)
- *
- * Returns NULL for an illegal name, (xmlChar*) 1 for success
- * and the name for mismatch
- */
-
-static const xmlChar *
-xmlParseQNameAndCompare(xmlParserCtxtPtr ctxt, xmlChar const *name,
- xmlChar const *prefix) {
- const xmlChar *cmp;
- const xmlChar *in;
- const xmlChar *ret;
- const xmlChar *prefix2;
-
- if (prefix == NULL) return(xmlParseNameAndCompare(ctxt, name));
-
- GROW;
- in = ctxt->input->cur;
-
- cmp = prefix;
- while (*in != 0 && *in == *cmp) {
- ++in;
- ++cmp;
- }
- if ((*cmp == 0) && (*in == ':')) {
- in++;
- cmp = name;
- while (*in != 0 && *in == *cmp) {
- ++in;
- ++cmp;
- }
- if (*cmp == 0 && (*in == '>' || IS_BLANK_CH (*in))) {
- /* success */
- ctxt->input->cur = in;
- return((const xmlChar*) 1);
- }
- }
- /*
- * all strings coms from the dictionary, equality can be done directly
- */
- ret = xmlParseQName (ctxt, &prefix2);
- if ((ret == name) && (prefix == prefix2))
- return((const xmlChar*) 1);
- return ret;
-}
-
-/**
- * xmlParseAttValueInternal:
- * @ctxt: an XML parser context
- * @len: attribute len result
- * @alloc: whether the attribute was reallocated as a new string
- * @normalize: if 1 then further non-CDATA normalization must be done
- *
- * parse a value for an attribute.
- * NOTE: if no normalization is needed, the routine will return pointers
- * directly from the data buffer.
- *
- * 3.3.3 Attribute-Value Normalization:
- * Before the value of an attribute is passed to the application or
- * checked for validity, the XML processor must normalize it as follows:
- * - a character reference is processed by appending the referenced
- * character to the attribute value
- * - an entity reference is processed by recursively processing the
- * replacement text of the entity
- * - a whitespace character (#x20, #xD, #xA, #x9) is processed by
- * appending #x20 to the normalized value, except that only a single
- * #x20 is appended for a "#xD#xA" sequence that is part of an external
- * parsed entity or the literal entity value of an internal parsed entity
- * - other characters are processed by appending them to the normalized value
- * If the declared value is not CDATA, then the XML processor must further
- * process the normalized attribute value by discarding any leading and
- * trailing space (#x20) characters, and by replacing sequences of space
- * (#x20) characters by a single space (#x20) character.
- * All attributes for which no declaration has been read should be treated
- * by a non-validating parser as if declared CDATA.
- *
- * Returns the AttValue parsed or NULL. The value has to be freed by the
- * caller if it was copied, this can be detected by val[*len] == 0.
- */
-
-static xmlChar *
-xmlParseAttValueInternal(xmlParserCtxtPtr ctxt, int *len, int *alloc,
- int normalize)
-{
- xmlChar limit = 0;
- const xmlChar *in = NULL, *start, *end, *last;
- xmlChar *ret = NULL;
- int line, col;
-
- GROW;
- in = (xmlChar *) CUR_PTR;
- line = ctxt->input->line;
- col = ctxt->input->col;
- if (*in != '"' && *in != '\'') {
- xmlFatalErr(ctxt, XML_ERR_ATTRIBUTE_NOT_STARTED, NULL);
- return (NULL);
- }
- ctxt->instate = XML_PARSER_ATTRIBUTE_VALUE;
-
- /*
- * try to handle in this routine the most common case where no
- * allocation of a new string is required and where content is
- * pure ASCII.
- */
- limit = *in++;
- col++;
- end = ctxt->input->end;
- start = in;
- if (in >= end) {
- const xmlChar *oldbase = ctxt->input->base;
- GROW;
- if (oldbase != ctxt->input->base) {
- long delta = ctxt->input->base - oldbase;
- start = start + delta;
- in = in + delta;
- }
- end = ctxt->input->end;
- }
- if (normalize) {
- /*
- * Skip any leading spaces
- */
- while ((in < end) && (*in != limit) &&
- ((*in == 0x20) || (*in == 0x9) ||
- (*in == 0xA) || (*in == 0xD))) {
- if (*in == 0xA) {
- line++; col = 1;
- } else {
- col++;
- }
- in++;
- start = in;
- if (in >= end) {
- const xmlChar *oldbase = ctxt->input->base;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- if (oldbase != ctxt->input->base) {
- long delta = ctxt->input->base - oldbase;
- start = start + delta;
- in = in + delta;
- }
- end = ctxt->input->end;
- if (((in - start) > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue length too long\n");
- return(NULL);
- }
- }
- }
- while ((in < end) && (*in != limit) && (*in >= 0x20) &&
- (*in <= 0x7f) && (*in != '&') && (*in != '<')) {
- col++;
- if ((*in++ == 0x20) && (*in == 0x20)) break;
- if (in >= end) {
- const xmlChar *oldbase = ctxt->input->base;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- if (oldbase != ctxt->input->base) {
- long delta = ctxt->input->base - oldbase;
- start = start + delta;
- in = in + delta;
- }
- end = ctxt->input->end;
- if (((in - start) > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue length too long\n");
- return(NULL);
- }
- }
- }
- last = in;
- /*
- * skip the trailing blanks
- */
- while ((last[-1] == 0x20) && (last > start)) last--;
- while ((in < end) && (*in != limit) &&
- ((*in == 0x20) || (*in == 0x9) ||
- (*in == 0xA) || (*in == 0xD))) {
- if (*in == 0xA) {
- line++, col = 1;
- } else {
- col++;
- }
- in++;
- if (in >= end) {
- const xmlChar *oldbase = ctxt->input->base;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- if (oldbase != ctxt->input->base) {
- long delta = ctxt->input->base - oldbase;
- start = start + delta;
- in = in + delta;
- last = last + delta;
- }
- end = ctxt->input->end;
- if (((in - start) > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue length too long\n");
- return(NULL);
- }
- }
- }
- if (((in - start) > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue length too long\n");
- return(NULL);
- }
- if (*in != limit) goto need_complex;
- } else {
- while ((in < end) && (*in != limit) && (*in >= 0x20) &&
- (*in <= 0x7f) && (*in != '&') && (*in != '<')) {
- in++;
- col++;
- if (in >= end) {
- const xmlChar *oldbase = ctxt->input->base;
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return(NULL);
- if (oldbase != ctxt->input->base) {
- long delta = ctxt->input->base - oldbase;
- start = start + delta;
- in = in + delta;
- }
- end = ctxt->input->end;
- if (((in - start) > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue length too long\n");
- return(NULL);
- }
- }
- }
- last = in;
- if (((in - start) > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsg(ctxt, XML_ERR_ATTRIBUTE_NOT_FINISHED,
- "AttValue length too long\n");
- return(NULL);
- }
- if (*in != limit) goto need_complex;
- }
- in++;
- col++;
- if (len != NULL) {
- *len = last - start;
- ret = (xmlChar *) start;
- } else {
- if (alloc) *alloc = 1;
- ret = xmlStrndup(start, last - start);
- }
- CUR_PTR = in;
- ctxt->input->line = line;
- ctxt->input->col = col;
- if (alloc) *alloc = 0;
- return ret;
-need_complex:
- if (alloc) *alloc = 1;
- return xmlParseAttValueComplex(ctxt, len, normalize);
-}
-
-/**
- * xmlParseAttribute2:
- * @ctxt: an XML parser context
- * @pref: the element prefix
- * @elem: the element name
- * @prefix: a xmlChar ** used to store the value of the attribute prefix
- * @value: a xmlChar ** used to store the value of the attribute
- * @len: an int * to save the length of the attribute
- * @alloc: an int * to indicate if the attribute was allocated
- *
- * parse an attribute in the new SAX2 framework.
- *
- * Returns the attribute name, and the value in *value, .
- */
-
-static const xmlChar *
-xmlParseAttribute2(xmlParserCtxtPtr ctxt,
- const xmlChar * pref, const xmlChar * elem,
- const xmlChar ** prefix, xmlChar ** value,
- int *len, int *alloc)
-{
- const xmlChar *name;
- xmlChar *val, *internal_val = NULL;
- int normalize = 0;
-
- *value = NULL;
- GROW;
- name = xmlParseQName(ctxt, prefix);
- if (name == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "error parsing attribute name\n");
- return (NULL);
- }
-
- /*
- * get the type if needed
- */
- if (ctxt->attsSpecial != NULL) {
- int type;
-
- type = (int) (long) xmlHashQLookup2(ctxt->attsSpecial,
- pref, elem, *prefix, name);
- if (type != 0)
- normalize = 1;
- }
-
- /*
- * read the value
- */
- SKIP_BLANKS;
- if (RAW == '=') {
- NEXT;
- SKIP_BLANKS;
- val = xmlParseAttValueInternal(ctxt, len, alloc, normalize);
- if (normalize) {
- /*
- * Sometimes a second normalisation pass for spaces is needed
- * but that only happens if charrefs or entities refernces
- * have been used in the attribute value, i.e. the attribute
- * value have been extracted in an allocated string already.
- */
- if (*alloc) {
- const xmlChar *val2;
-
- val2 = xmlAttrNormalizeSpace2(ctxt, val, len);
- if ((val2 != NULL) && (val2 != val)) {
- xmlFree(val);
- val = (xmlChar *) val2;
- }
- }
- }
- ctxt->instate = XML_PARSER_CONTENT;
- } else {
- xmlFatalErrMsgStr(ctxt, XML_ERR_ATTRIBUTE_WITHOUT_VALUE,
- "Specification mandate value for attribute %s\n",
- name);
- return (NULL);
- }
-
- if (*prefix == ctxt->str_xml) {
- /*
- * Check that xml:lang conforms to the specification
- * No more registered as an error, just generate a warning now
- * since this was deprecated in XML second edition
- */
- if ((ctxt->pedantic) && (xmlStrEqual(name, BAD_CAST "lang"))) {
- internal_val = xmlStrndup(val, *len);
- if (!xmlCheckLanguageID(internal_val)) {
- xmlWarningMsg(ctxt, XML_WAR_LANG_VALUE,
- "Malformed value for xml:lang : %s\n",
- internal_val, NULL);
- }
- }
-
- /*
- * Check that xml:space conforms to the specification
- */
- if (xmlStrEqual(name, BAD_CAST "space")) {
- internal_val = xmlStrndup(val, *len);
- if (xmlStrEqual(internal_val, BAD_CAST "default"))
- *(ctxt->space) = 0;
- else if (xmlStrEqual(internal_val, BAD_CAST "preserve"))
- *(ctxt->space) = 1;
- else {
- xmlWarningMsg(ctxt, XML_WAR_SPACE_VALUE,
- "Invalid value \"%s\" for xml:space : \"default\" or \"preserve\" expected\n",
- internal_val, NULL);
- }
- }
- if (internal_val) {
- xmlFree(internal_val);
- }
- }
-
- *value = val;
- return (name);
-}
-/**
- * xmlParseStartTag2:
- * @ctxt: an XML parser context
- *
- * parse a start of tag either for rule element or
- * EmptyElement. In both case we don't parse the tag closing chars.
- * This routine is called when running SAX2 parsing
- *
- * [40] STag ::= '<' Name (S Attribute)* S? '>'
- *
- * [ WFC: Unique Att Spec ]
- * No attribute name may appear more than once in the same start-tag or
- * empty-element tag.
- *
- * [44] EmptyElemTag ::= '<' Name (S Attribute)* S? '/>'
- *
- * [ WFC: Unique Att Spec ]
- * No attribute name may appear more than once in the same start-tag or
- * empty-element tag.
- *
- * With namespace:
- *
- * [NS 8] STag ::= '<' QName (S Attribute)* S? '>'
- *
- * [NS 10] EmptyElement ::= '<' QName (S Attribute)* S? '/>'
- *
- * Returns the element name parsed
- */
-
-static const xmlChar *
-xmlParseStartTag2(xmlParserCtxtPtr ctxt, const xmlChar **pref,
- const xmlChar **URI, int *tlen) {
- const xmlChar *localname;
- const xmlChar *prefix;
- const xmlChar *attname;
- const xmlChar *aprefix;
- const xmlChar *nsname;
- xmlChar *attvalue;
- const xmlChar **atts = ctxt->atts;
- int maxatts = ctxt->maxatts;
- int nratts, nbatts, nbdef;
- int i, j, nbNs, attval;
- unsigned long cur;
- int nsNr = ctxt->nsNr;
-
- if (RAW != '<') return(NULL);
- NEXT1;
-
- /*
- * NOTE: it is crucial with the SAX2 API to never call SHRINK beyond that
- * point since the attribute values may be stored as pointers to
- * the buffer and calling SHRINK would destroy them !
- * The Shrinking is only possible once the full set of attribute
- * callbacks have been done.
- */
- SHRINK;
- cur = ctxt->input->cur - ctxt->input->base;
- nbatts = 0;
- nratts = 0;
- nbdef = 0;
- nbNs = 0;
- attval = 0;
- /* Forget any namespaces added during an earlier parse of this element. */
- ctxt->nsNr = nsNr;
-
- localname = xmlParseQName(ctxt, &prefix);
- if (localname == NULL) {
- xmlFatalErrMsg(ctxt, XML_ERR_NAME_REQUIRED,
- "StartTag: invalid element name\n");
- return(NULL);
- }
- *tlen = ctxt->input->cur - ctxt->input->base - cur;
-
- /*
- * Now parse the attributes, it ends up with the ending
- *
- * (S Attribute)* S?
- */
- SKIP_BLANKS;
- GROW;
-
- while (((RAW != '>') &&
- ((RAW != '/') || (NXT(1) != '>')) &&
- (IS_BYTE_CHAR(RAW))) && (ctxt->instate != XML_PARSER_EOF)) {
- const xmlChar *q = CUR_PTR;
- unsigned int cons = ctxt->input->consumed;
- int len = -1, alloc = 0;
-
- attname = xmlParseAttribute2(ctxt, prefix, localname,
- &aprefix, &attvalue, &len, &alloc);
- if ((attname == NULL) || (attvalue == NULL))
- goto next_attr;
- if (len < 0) len = xmlStrlen(attvalue);
-
- if ((attname == ctxt->str_xmlns) && (aprefix == NULL)) {
- const xmlChar *URL = xmlDictLookup(ctxt->dict, attvalue, len);
- xmlURIPtr uri;
-
- if (URL == NULL) {
- xmlErrMemory(ctxt, "dictionary allocation failure");
- if ((attvalue != NULL) && (alloc != 0))
- xmlFree(attvalue);
- return(NULL);
- }
- if (*URL != 0) {
- uri = xmlParseURI((const char *) URL);
- if (uri == NULL) {
- xmlNsErr(ctxt, XML_WAR_NS_URI,
- "xmlns: '%s' is not a valid URI\n",
- URL, NULL, NULL);
- } else {
- if (uri->scheme == NULL) {
- xmlNsWarn(ctxt, XML_WAR_NS_URI_RELATIVE,
- "xmlns: URI %s is not absolute\n",
- URL, NULL, NULL);
- }
- xmlFreeURI(uri);
- }
- if (URL == ctxt->str_xml_ns) {
- if (attname != ctxt->str_xml) {
- xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE,
- "xml namespace URI cannot be the default namespace\n",
- NULL, NULL, NULL);
- }
- goto next_attr;
- }
- if ((len == 29) &&
- (xmlStrEqual(URL,
- BAD_CAST "http://www.w3.org/2000/xmlns/"))) {
- xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE,
- "reuse of the xmlns namespace name is forbidden\n",
- NULL, NULL, NULL);
- goto next_attr;
- }
- }
- /*
- * check that it's not a defined namespace
- */
- for (j = 1;j <= nbNs;j++)
- if (ctxt->nsTab[ctxt->nsNr - 2 * j] == NULL)
- break;
- if (j <= nbNs)
- xmlErrAttributeDup(ctxt, NULL, attname);
- else
- if (nsPush(ctxt, NULL, URL) > 0) nbNs++;
-
- } else if (aprefix == ctxt->str_xmlns) {
- const xmlChar *URL = xmlDictLookup(ctxt->dict, attvalue, len);
- xmlURIPtr uri;
-
- if (attname == ctxt->str_xml) {
- if (URL != ctxt->str_xml_ns) {
- xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE,
- "xml namespace prefix mapped to wrong URI\n",
- NULL, NULL, NULL);
- }
- /*
- * Do not keep a namespace definition node
- */
- goto next_attr;
- }
- if (URL == ctxt->str_xml_ns) {
- if (attname != ctxt->str_xml) {
- xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE,
- "xml namespace URI mapped to wrong prefix\n",
- NULL, NULL, NULL);
- }
- goto next_attr;
- }
- if (attname == ctxt->str_xmlns) {
- xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE,
- "redefinition of the xmlns prefix is forbidden\n",
- NULL, NULL, NULL);
- goto next_attr;
- }
- if ((len == 29) &&
- (xmlStrEqual(URL,
- BAD_CAST "http://www.w3.org/2000/xmlns/"))) {
- xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE,
- "reuse of the xmlns namespace name is forbidden\n",
- NULL, NULL, NULL);
- goto next_attr;
- }
- if ((URL == NULL) || (URL[0] == 0)) {
- xmlNsErr(ctxt, XML_NS_ERR_XML_NAMESPACE,
- "xmlns:%s: Empty XML namespace is not allowed\n",
- attname, NULL, NULL);
- goto next_attr;
- } else {
- uri = xmlParseURI((const char *) URL);
- if (uri == NULL) {
- xmlNsErr(ctxt, XML_WAR_NS_URI,
- "xmlns:%s: '%s' is not a valid URI\n",
- attname, URL, NULL);
- } else {
- if ((ctxt->pedantic) && (uri->scheme == NULL)) {
- xmlNsWarn(ctxt, XML_WAR_NS_URI_RELATIVE,
- "xmlns:%s: URI %s is not absolute\n",
- attname, URL, NULL);
- }
- xmlFreeURI(uri);
- }
- }
-
- /*
- * check that it's not a defined namespace
- */
- for (j = 1;j <= nbNs;j++)
- if (ctxt->nsTab[ctxt->nsNr - 2 * j] == attname)
- break;
- if (j <= nbNs)
- xmlErrAttributeDup(ctxt, aprefix, attname);
- else
- if (nsPush(ctxt, attname, URL) > 0) nbNs++;
-
- } else {
- /*
- * Add the pair to atts
- */
- if ((atts == NULL) || (nbatts + 5 > maxatts)) {
- if (xmlCtxtGrowAttrs(ctxt, nbatts + 5) < 0) {
- goto next_attr;
- }
- maxatts = ctxt->maxatts;
- atts = ctxt->atts;
- }
- ctxt->attallocs[nratts++] = alloc;
- atts[nbatts++] = attname;
- atts[nbatts++] = aprefix;
- /*
- * The namespace URI field is used temporarily to point at the
- * base of the current input buffer for non-alloced attributes.
- * When the input buffer is reallocated, all the pointers become
- * invalid, but they can be reconstructed later.
- */
- if (alloc)
- atts[nbatts++] = NULL;
- else
- atts[nbatts++] = ctxt->input->base;
- atts[nbatts++] = attvalue;
- attvalue += len;
- atts[nbatts++] = attvalue;
- /*
- * tag if some deallocation is needed
- */
- if (alloc != 0) attval = 1;
- attvalue = NULL; /* moved into atts */
- }
-
-next_attr:
- if ((attvalue != NULL) && (alloc != 0)) {
- xmlFree(attvalue);
- attvalue = NULL;
- }
-
- GROW
- if (ctxt->instate == XML_PARSER_EOF)
- break;
- if ((RAW == '>') || (((RAW == '/') && (NXT(1) == '>'))))
- break;
- if (!IS_BLANK_CH(RAW)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "attributes construct error\n");
- break;
- }
- SKIP_BLANKS;
- if ((cons == ctxt->input->consumed) && (q == CUR_PTR) &&
- (attname == NULL) && (attvalue == NULL)) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlParseStartTag: problem parsing attributes\n");
- break;
- }
- GROW;
- }
-
- /* Reconstruct attribute value pointers. */
- for (i = 0, j = 0; j < nratts; i += 5, j++) {
- if (atts[i+2] != NULL) {
- /*
- * Arithmetic on dangling pointers is technically undefined
- * behavior, but well...
- */
- ptrdiff_t offset = ctxt->input->base - atts[i+2];
- atts[i+2] = NULL; /* Reset repurposed namespace URI */
- atts[i+3] += offset; /* value */
- atts[i+4] += offset; /* valuend */
- }
- }
-
- /*
- * The attributes defaulting
- */
- if (ctxt->attsDefault != NULL) {
- xmlDefAttrsPtr defaults;
-
- defaults = xmlHashLookup2(ctxt->attsDefault, localname, prefix);
- if (defaults != NULL) {
- for (i = 0;i < defaults->nbAttrs;i++) {
- attname = defaults->values[5 * i];
- aprefix = defaults->values[5 * i + 1];
-
- /*
- * special work for namespaces defaulted defs
- */
- if ((attname == ctxt->str_xmlns) && (aprefix == NULL)) {
- /*
- * check that it's not a defined namespace
- */
- for (j = 1;j <= nbNs;j++)
- if (ctxt->nsTab[ctxt->nsNr - 2 * j] == NULL)
- break;
- if (j <= nbNs) continue;
-
- nsname = xmlGetNamespace(ctxt, NULL);
- if (nsname != defaults->values[5 * i + 2]) {
- if (nsPush(ctxt, NULL,
- defaults->values[5 * i + 2]) > 0)
- nbNs++;
- }
- } else if (aprefix == ctxt->str_xmlns) {
- /*
- * check that it's not a defined namespace
- */
- for (j = 1;j <= nbNs;j++)
- if (ctxt->nsTab[ctxt->nsNr - 2 * j] == attname)
- break;
- if (j <= nbNs) continue;
-
- nsname = xmlGetNamespace(ctxt, attname);
- if (nsname != defaults->values[2]) {
- if (nsPush(ctxt, attname,
- defaults->values[5 * i + 2]) > 0)
- nbNs++;
- }
- } else {
- /*
- * check that it's not a defined attribute
- */
- for (j = 0;j < nbatts;j+=5) {
- if ((attname == atts[j]) && (aprefix == atts[j+1]))
- break;
- }
- if (j < nbatts) continue;
-
- if ((atts == NULL) || (nbatts + 5 > maxatts)) {
- if (xmlCtxtGrowAttrs(ctxt, nbatts + 5) < 0) {
- return(NULL);
- }
- maxatts = ctxt->maxatts;
- atts = ctxt->atts;
- }
- atts[nbatts++] = attname;
- atts[nbatts++] = aprefix;
- if (aprefix == NULL)
- atts[nbatts++] = NULL;
- else
- atts[nbatts++] = xmlGetNamespace(ctxt, aprefix);
- atts[nbatts++] = defaults->values[5 * i + 2];
- atts[nbatts++] = defaults->values[5 * i + 3];
- if ((ctxt->standalone == 1) &&
- (defaults->values[5 * i + 4] != NULL)) {
- xmlValidityError(ctxt, XML_DTD_STANDALONE_DEFAULTED,
- "standalone: attribute %s on %s defaulted from external subset\n",
- attname, localname);
- }
- nbdef++;
- }
- }
- }
- }
-
- /*
- * The attributes checkings
- */
- for (i = 0; i < nbatts;i += 5) {
- /*
- * The default namespace does not apply to attribute names.
- */
- if (atts[i + 1] != NULL) {
- nsname = xmlGetNamespace(ctxt, atts[i + 1]);
- if (nsname == NULL) {
- xmlNsErr(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
- "Namespace prefix %s for %s on %s is not defined\n",
- atts[i + 1], atts[i], localname);
- }
- atts[i + 2] = nsname;
- } else
- nsname = NULL;
- /*
- * [ WFC: Unique Att Spec ]
- * No attribute name may appear more than once in the same
- * start-tag or empty-element tag.
- * As extended by the Namespace in XML REC.
- */
- for (j = 0; j < i;j += 5) {
- if (atts[i] == atts[j]) {
- if (atts[i+1] == atts[j+1]) {
- xmlErrAttributeDup(ctxt, atts[i+1], atts[i]);
- break;
- }
- if ((nsname != NULL) && (atts[j + 2] == nsname)) {
- xmlNsErr(ctxt, XML_NS_ERR_ATTRIBUTE_REDEFINED,
- "Namespaced Attribute %s in '%s' redefined\n",
- atts[i], nsname, NULL);
- break;
- }
- }
- }
- }
-
- nsname = xmlGetNamespace(ctxt, prefix);
- if ((prefix != NULL) && (nsname == NULL)) {
- xmlNsErr(ctxt, XML_NS_ERR_UNDEFINED_NAMESPACE,
- "Namespace prefix %s on %s is not defined\n",
- prefix, localname, NULL);
- }
- *pref = prefix;
- *URI = nsname;
-
- /*
- * SAX: Start of Element !
- */
- if ((ctxt->sax != NULL) && (ctxt->sax->startElementNs != NULL) &&
- (!ctxt->disableSAX)) {
- if (nbNs > 0)
- ctxt->sax->startElementNs(ctxt->userData, localname, prefix,
- nsname, nbNs, &ctxt->nsTab[ctxt->nsNr - 2 * nbNs],
- nbatts / 5, nbdef, atts);
- else
- ctxt->sax->startElementNs(ctxt->userData, localname, prefix,
- nsname, 0, NULL, nbatts / 5, nbdef, atts);
- }
-
- /*
- * Free up attribute allocated strings if needed
- */
- if (attval != 0) {
- for (i = 3,j = 0; j < nratts;i += 5,j++)
- if ((ctxt->attallocs[j] != 0) && (atts[i] != NULL))
- xmlFree((xmlChar *) atts[i]);
- }
-
- return(localname);
-}
-
-/**
- * xmlParseEndTag2:
- * @ctxt: an XML parser context
- * @line: line of the start tag
- * @nsNr: number of namespaces on the start tag
- *
- * parse an end of tag
- *
- * [42] ETag ::= '</' Name S? '>'
- *
- * With namespace
- *
- * [NS 9] ETag ::= '</' QName S? '>'
- */
-
-static void
-xmlParseEndTag2(xmlParserCtxtPtr ctxt, const xmlChar *prefix,
- const xmlChar *URI, int line, int nsNr, int tlen) {
- const xmlChar *name;
- size_t curLength;
-
- GROW;
- if ((RAW != '<') || (NXT(1) != '/')) {
- xmlFatalErr(ctxt, XML_ERR_LTSLASH_REQUIRED, NULL);
- return;
- }
- SKIP(2);
-
- curLength = ctxt->input->end - ctxt->input->cur;
- if ((tlen > 0) && (curLength >= (size_t)tlen) &&
- (xmlStrncmp(ctxt->input->cur, ctxt->name, tlen) == 0)) {
- if ((curLength >= (size_t)(tlen + 1)) &&
- (ctxt->input->cur[tlen] == '>')) {
- ctxt->input->cur += tlen + 1;
- ctxt->input->col += tlen + 1;
- goto done;
- }
- ctxt->input->cur += tlen;
- ctxt->input->col += tlen;
- name = (xmlChar*)1;
- } else {
- if (prefix == NULL)
- name = xmlParseNameAndCompare(ctxt, ctxt->name);
- else
- name = xmlParseQNameAndCompare(ctxt, ctxt->name, prefix);
- }
-
- /*
- * We should definitely be at the ending "S? '>'" part
- */
- GROW;
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- SKIP_BLANKS;
- if ((!IS_BYTE_CHAR(RAW)) || (RAW != '>')) {
- xmlFatalErr(ctxt, XML_ERR_GT_REQUIRED, NULL);
- } else
- NEXT1;
-
- /*
- * [ WFC: Element Type Match ]
- * The Name in an element's end-tag must match the element type in the
- * start-tag.
- *
- */
- if (name != (xmlChar*)1) {
- if (name == NULL) name = BAD_CAST "unparseable";
- if ((line == 0) && (ctxt->node != NULL))
- line = ctxt->node->line;
- xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NAME_MISMATCH,
- "Opening and ending tag mismatch: %s line %d and %s\n",
- ctxt->name, line, name);
- }
-
- /*
- * SAX: End of Tag
- */
-done:
- if ((ctxt->sax != NULL) && (ctxt->sax->endElementNs != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->endElementNs(ctxt->userData, ctxt->name, prefix, URI);
-
- spacePop(ctxt);
- if (nsNr != 0)
- nsPop(ctxt, nsNr);
- return;
-}
-
-/**
- * xmlParseCDSect:
- * @ctxt: an XML parser context
- *
- * Parse escaped pure raw content.
- *
- * [18] CDSect ::= CDStart CData CDEnd
- *
- * [19] CDStart ::= '<![CDATA['
- *
- * [20] Data ::= (Char* - (Char* ']]>' Char*))
- *
- * [21] CDEnd ::= ']]>'
- */
-void
-xmlParseCDSect(xmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- int len = 0;
- int size = XML_PARSER_BUFFER_SIZE;
- int r, rl;
- int s, sl;
- int cur, l;
- int count = 0;
-
- /* Check 2.6.0 was NXT(0) not RAW */
- if (CMP9(CUR_PTR, '<', '!', '[', 'C', 'D', 'A', 'T', 'A', '[')) {
- SKIP(9);
- } else
- return;
-
- ctxt->instate = XML_PARSER_CDATA_SECTION;
- r = CUR_CHAR(rl);
- if (!IS_CHAR(r)) {
- xmlFatalErr(ctxt, XML_ERR_CDATA_NOT_FINISHED, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- return;
- }
- NEXTL(rl);
- s = CUR_CHAR(sl);
- if (!IS_CHAR(s)) {
- xmlFatalErr(ctxt, XML_ERR_CDATA_NOT_FINISHED, NULL);
- ctxt->instate = XML_PARSER_CONTENT;
- return;
- }
- NEXTL(sl);
- cur = CUR_CHAR(l);
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- return;
- }
- while (IS_CHAR(cur) &&
- ((r != ']') || (s != ']') || (cur != '>'))) {
- if (len + 5 >= size) {
- xmlChar *tmp;
-
- if ((size > XML_MAX_TEXT_LENGTH) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_CDATA_NOT_FINISHED,
- "CData section too big found", NULL);
- xmlFree (buf);
- return;
- }
- tmp = (xmlChar *) xmlRealloc(buf, size * 2 * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlFree(buf);
- xmlErrMemory(ctxt, NULL);
- return;
- }
- buf = tmp;
- size *= 2;
- }
- COPY_BUF(rl,buf,len,r);
- r = s;
- rl = sl;
- s = cur;
- sl = l;
- count++;
- if (count > 50) {
- GROW;
- if (ctxt->instate == XML_PARSER_EOF) {
- xmlFree(buf);
- return;
- }
- count = 0;
- }
- NEXTL(l);
- cur = CUR_CHAR(l);
- }
- buf[len] = 0;
- ctxt->instate = XML_PARSER_CONTENT;
- if (cur != '>') {
- xmlFatalErrMsgStr(ctxt, XML_ERR_CDATA_NOT_FINISHED,
- "CData section not finished\n%.50s\n", buf);
- xmlFree(buf);
- return;
- }
- NEXTL(l);
-
- /*
- * OK the buffer is to be consumed as cdata.
- */
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
- if (ctxt->sax->cdataBlock != NULL)
- ctxt->sax->cdataBlock(ctxt->userData, buf, len);
- else if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData, buf, len);
- }
- xmlFree(buf);
-}
-
-/**
- * xmlParseContent:
- * @ctxt: an XML parser context
- *
- * Parse a content:
- *
- * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
- */
-
-void
-xmlParseContent(xmlParserCtxtPtr ctxt) {
- GROW;
- while ((RAW != 0) &&
- ((RAW != '<') || (NXT(1) != '/')) &&
- (ctxt->instate != XML_PARSER_EOF)) {
- const xmlChar *test = CUR_PTR;
- unsigned int cons = ctxt->input->consumed;
- const xmlChar *cur = ctxt->input->cur;
-
- /*
- * First case : a Processing Instruction.
- */
- if ((*cur == '<') && (cur[1] == '?')) {
- xmlParsePI(ctxt);
- }
-
- /*
- * Second case : a CDSection
- */
- /* 2.6.0 test was *cur not RAW */
- else if (CMP9(CUR_PTR, '<', '!', '[', 'C', 'D', 'A', 'T', 'A', '[')) {
- xmlParseCDSect(ctxt);
- }
-
- /*
- * Third case : a comment
- */
- else if ((*cur == '<') && (NXT(1) == '!') &&
- (NXT(2) == '-') && (NXT(3) == '-')) {
- xmlParseComment(ctxt);
- ctxt->instate = XML_PARSER_CONTENT;
- }
-
- /*
- * Fourth case : a sub-element.
- */
- else if (*cur == '<') {
- xmlParseElement(ctxt);
- }
-
- /*
- * Fifth case : a reference. If if has not been resolved,
- * parsing returns it's Name, create the node
- */
-
- else if (*cur == '&') {
- xmlParseReference(ctxt);
- }
-
- /*
- * Last case, text. Note that References are handled directly.
- */
- else {
- xmlParseCharData(ctxt, 0);
- }
-
- GROW;
- /*
- * Pop-up of finished entities.
- */
- while ((RAW == 0) && (ctxt->inputNr > 1))
- xmlPopInput(ctxt);
- SHRINK;
-
- if ((cons == ctxt->input->consumed) && (test == CUR_PTR)) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "detected an error in element content\n");
- xmlHaltParser(ctxt);
- break;
- }
- }
-}
-
-/**
- * xmlParseElement:
- * @ctxt: an XML parser context
- *
- * parse an XML element, this is highly recursive
- *
- * [39] element ::= EmptyElemTag | STag content ETag
- *
- * [ WFC: Element Type Match ]
- * The Name in an element's end-tag must match the element type in the
- * start-tag.
- *
- */
-
-void
-xmlParseElement(xmlParserCtxtPtr ctxt) {
- const xmlChar *name;
- const xmlChar *prefix = NULL;
- const xmlChar *URI = NULL;
- xmlParserNodeInfo node_info;
- int line, tlen = 0;
- xmlNodePtr ret;
- int nsNr = ctxt->nsNr;
-
- if (((unsigned int) ctxt->nameNr > xmlParserMaxDepth) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErrMsgInt(ctxt, XML_ERR_INTERNAL_ERROR,
- "Excessive depth in document: %d use XML_PARSE_HUGE option\n",
- xmlParserMaxDepth);
- xmlHaltParser(ctxt);
- return;
- }
-
- /* Capture start position */
- if (ctxt->record_info) {
- node_info.begin_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.begin_line = ctxt->input->line;
- }
-
- if (ctxt->spaceNr == 0)
- spacePush(ctxt, -1);
- else if (*ctxt->space == -2)
- spacePush(ctxt, -1);
- else
- spacePush(ctxt, *ctxt->space);
-
- line = ctxt->input->line;
-#ifdef LIBXML_SAX1_ENABLED
- if (ctxt->sax2)
-#endif /* LIBXML_SAX1_ENABLED */
- name = xmlParseStartTag2(ctxt, &prefix, &URI, &tlen);
-#ifdef LIBXML_SAX1_ENABLED
- else
- name = xmlParseStartTag(ctxt);
-#endif /* LIBXML_SAX1_ENABLED */
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- if (name == NULL) {
- spacePop(ctxt);
- return;
- }
- namePush(ctxt, name);
- ret = ctxt->node;
-
-#ifdef LIBXML_VALID_ENABLED
- /*
- * [ VC: Root Element Type ]
- * The Name in the document type declaration must match the element
- * type of the root element.
- */
- if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc &&
- ctxt->node && (ctxt->node == ctxt->myDoc->children))
- ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
-#endif /* LIBXML_VALID_ENABLED */
-
- /*
- * Check for an Empty Element.
- */
- if ((RAW == '/') && (NXT(1) == '>')) {
- SKIP(2);
- if (ctxt->sax2) {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElementNs != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->endElementNs(ctxt->userData, name, prefix, URI);
-#ifdef LIBXML_SAX1_ENABLED
- } else {
- if ((ctxt->sax != NULL) && (ctxt->sax->endElement != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->endElement(ctxt->userData, name);
-#endif /* LIBXML_SAX1_ENABLED */
- }
- namePop(ctxt);
- spacePop(ctxt);
- if (nsNr != ctxt->nsNr)
- nsPop(ctxt, ctxt->nsNr - nsNr);
- if ( ret != NULL && ctxt->record_info ) {
- node_info.end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.end_line = ctxt->input->line;
- node_info.node = ret;
- xmlParserAddNodeInfo(ctxt, &node_info);
- }
- return;
- }
- if (RAW == '>') {
- NEXT1;
- } else {
- xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_GT_REQUIRED,
- "Couldn't find end of Start Tag %s line %d\n",
- name, line, NULL);
-
- /*
- * end of parsing of this node.
- */
- nodePop(ctxt);
- namePop(ctxt);
- spacePop(ctxt);
- if (nsNr != ctxt->nsNr)
- nsPop(ctxt, ctxt->nsNr - nsNr);
-
- /*
- * Capture end position and add node
- */
- if ( ret != NULL && ctxt->record_info ) {
- node_info.end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.end_line = ctxt->input->line;
- node_info.node = ret;
- xmlParserAddNodeInfo(ctxt, &node_info);
- }
- return;
- }
-
- /*
- * Parse the content of the element:
- */
- xmlParseContent(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- return;
- if (!IS_BYTE_CHAR(RAW)) {
- xmlFatalErrMsgStrIntStr(ctxt, XML_ERR_TAG_NOT_FINISHED,
- "Premature end of data in tag %s line %d\n",
- name, line, NULL);
-
- /*
- * end of parsing of this node.
- */
- nodePop(ctxt);
- namePop(ctxt);
- spacePop(ctxt);
- if (nsNr != ctxt->nsNr)
- nsPop(ctxt, ctxt->nsNr - nsNr);
- return;
- }
-
- /*
- * parse the end of tag: '</' should be here.
- */
- if (ctxt->sax2) {
- xmlParseEndTag2(ctxt, prefix, URI, line, ctxt->nsNr - nsNr, tlen);
- namePop(ctxt);
- }
-#ifdef LIBXML_SAX1_ENABLED
- else
- xmlParseEndTag1(ctxt, line);
-#endif /* LIBXML_SAX1_ENABLED */
-
- /*
- * Capture end position and add node
- */
- if ( ret != NULL && ctxt->record_info ) {
- node_info.end_pos = ctxt->input->consumed +
- (CUR_PTR - ctxt->input->base);
- node_info.end_line = ctxt->input->line;
- node_info.node = ret;
- xmlParserAddNodeInfo(ctxt, &node_info);
- }
-}
-
-/**
- * xmlParseVersionNum:
- * @ctxt: an XML parser context
- *
- * parse the XML version value.
- *
- * [26] VersionNum ::= '1.' [0-9]+
- *
- * In practice allow [0-9].[0-9]+ at that level
- *
- * Returns the string giving the XML version number, or NULL
- */
-xmlChar *
-xmlParseVersionNum(xmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- int len = 0;
- int size = 10;
- xmlChar cur;
-
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- cur = CUR;
- if (!((cur >= '0') && (cur <= '9'))) {
- xmlFree(buf);
- return(NULL);
- }
- buf[len++] = cur;
- NEXT;
- cur=CUR;
- if (cur != '.') {
- xmlFree(buf);
- return(NULL);
- }
- buf[len++] = cur;
- NEXT;
- cur=CUR;
- while ((cur >= '0') && (cur <= '9')) {
- if (len + 1 >= size) {
- xmlChar *tmp;
-
- size *= 2;
- tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlFree(buf);
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
- buf = tmp;
- }
- buf[len++] = cur;
- NEXT;
- cur=CUR;
- }
- buf[len] = 0;
- return(buf);
-}
-
-/**
- * xmlParseVersionInfo:
- * @ctxt: an XML parser context
- *
- * parse the XML version.
- *
- * [24] VersionInfo ::= S 'version' Eq (' VersionNum ' | " VersionNum ")
- *
- * [25] Eq ::= S? '=' S?
- *
- * Returns the version string, e.g. "1.0"
- */
-
-xmlChar *
-xmlParseVersionInfo(xmlParserCtxtPtr ctxt) {
- xmlChar *version = NULL;
-
- if (CMP7(CUR_PTR, 'v', 'e', 'r', 's', 'i', 'o', 'n')) {
- SKIP(7);
- SKIP_BLANKS;
- if (RAW != '=') {
- xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL);
- return(NULL);
- }
- NEXT;
- SKIP_BLANKS;
- if (RAW == '"') {
- NEXT;
- version = xmlParseVersionNum(ctxt);
- if (RAW != '"') {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
- } else
- NEXT;
- } else if (RAW == '\''){
- NEXT;
- version = xmlParseVersionNum(ctxt);
- if (RAW != '\'') {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
- } else
- NEXT;
- } else {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL);
- }
- }
- return(version);
-}
-
-/**
- * xmlParseEncName:
- * @ctxt: an XML parser context
- *
- * parse the XML encoding name
- *
- * [81] EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*
- *
- * Returns the encoding name value or NULL
- */
-xmlChar *
-xmlParseEncName(xmlParserCtxtPtr ctxt) {
- xmlChar *buf = NULL;
- int len = 0;
- int size = 10;
- xmlChar cur;
-
- cur = CUR;
- if (((cur >= 'a') && (cur <= 'z')) ||
- ((cur >= 'A') && (cur <= 'Z'))) {
- buf = (xmlChar *) xmlMallocAtomic(size * sizeof(xmlChar));
- if (buf == NULL) {
- xmlErrMemory(ctxt, NULL);
- return(NULL);
- }
-
- buf[len++] = cur;
- NEXT;
- cur = CUR;
- while (((cur >= 'a') && (cur <= 'z')) ||
- ((cur >= 'A') && (cur <= 'Z')) ||
- ((cur >= '0') && (cur <= '9')) ||
- (cur == '.') || (cur == '_') ||
- (cur == '-')) {
- if (len + 1 >= size) {
- xmlChar *tmp;
-
- size *= 2;
- tmp = (xmlChar *) xmlRealloc(buf, size * sizeof(xmlChar));
- if (tmp == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFree(buf);
- return(NULL);
- }
- buf = tmp;
- }
- buf[len++] = cur;
- NEXT;
- cur = CUR;
- if (cur == 0) {
- SHRINK;
- GROW;
- cur = CUR;
- }
- }
- buf[len] = 0;
- } else {
- xmlFatalErr(ctxt, XML_ERR_ENCODING_NAME, NULL);
- }
- return(buf);
-}
-
-/**
- * xmlParseEncodingDecl:
- * @ctxt: an XML parser context
- *
- * parse the XML encoding declaration
- *
- * [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'")
- *
- * this setups the conversion filters.
- *
- * Returns the encoding value or NULL
- */
-
-const xmlChar *
-xmlParseEncodingDecl(xmlParserCtxtPtr ctxt) {
- xmlChar *encoding = NULL;
-
- SKIP_BLANKS;
- if (CMP8(CUR_PTR, 'e', 'n', 'c', 'o', 'd', 'i', 'n', 'g')) {
- SKIP(8);
- SKIP_BLANKS;
- if (RAW != '=') {
- xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL);
- return(NULL);
- }
- NEXT;
- SKIP_BLANKS;
- if (RAW == '"') {
- NEXT;
- encoding = xmlParseEncName(ctxt);
- if (RAW != '"') {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
- xmlFree((xmlChar *) encoding);
- return(NULL);
- } else
- NEXT;
- } else if (RAW == '\''){
- NEXT;
- encoding = xmlParseEncName(ctxt);
- if (RAW != '\'') {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
- xmlFree((xmlChar *) encoding);
- return(NULL);
- } else
- NEXT;
- } else {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL);
- }
-
- /*
- * Non standard parsing, allowing the user to ignore encoding
- */
- if (ctxt->options & XML_PARSE_IGNORE_ENC) {
- xmlFree((xmlChar *) encoding);
- return(NULL);
- }
-
- /*
- * UTF-16 encoding stwich has already taken place at this stage,
- * more over the little-endian/big-endian selection is already done
- */
- if ((encoding != NULL) &&
- ((!xmlStrcasecmp(encoding, BAD_CAST "UTF-16")) ||
- (!xmlStrcasecmp(encoding, BAD_CAST "UTF16")))) {
- /*
- * If no encoding was passed to the parser, that we are
- * using UTF-16 and no decoder is present i.e. the
- * document is apparently UTF-8 compatible, then raise an
- * encoding mismatch fatal error
- */
- if ((ctxt->encoding == NULL) &&
- (ctxt->input->buf != NULL) &&
- (ctxt->input->buf->encoder == NULL)) {
- xmlFatalErrMsg(ctxt, XML_ERR_INVALID_ENCODING,
- "Document labelled UTF-16 but has UTF-8 content\n");
- }
- if (ctxt->encoding != NULL)
- xmlFree((xmlChar *) ctxt->encoding);
- ctxt->encoding = encoding;
- }
- /*
- * UTF-8 encoding is handled natively
- */
- else if ((encoding != NULL) &&
- ((!xmlStrcasecmp(encoding, BAD_CAST "UTF-8")) ||
- (!xmlStrcasecmp(encoding, BAD_CAST "UTF8")))) {
- if (ctxt->encoding != NULL)
- xmlFree((xmlChar *) ctxt->encoding);
- ctxt->encoding = encoding;
- }
- else if (encoding != NULL) {
- xmlCharEncodingHandlerPtr handler;
-
- if (ctxt->input->encoding != NULL)
- xmlFree((xmlChar *) ctxt->input->encoding);
- ctxt->input->encoding = encoding;
-
- handler = xmlFindCharEncodingHandler((const char *) encoding);
- if (handler != NULL) {
- if (xmlSwitchToEncoding(ctxt, handler) < 0) {
- /* failed to convert */
- ctxt->errNo = XML_ERR_UNSUPPORTED_ENCODING;
- return(NULL);
- }
- } else {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "Unsupported encoding %s\n", encoding);
- return(NULL);
- }
- }
- }
- return(encoding);
-}
-
-/**
- * xmlParseSDDecl:
- * @ctxt: an XML parser context
- *
- * parse the XML standalone declaration
- *
- * [32] SDDecl ::= S 'standalone' Eq
- * (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no')'"'))
- *
- * [ VC: Standalone Document Declaration ]
- * TODO The standalone document declaration must have the value "no"
- * if any external markup declarations contain declarations of:
- * - attributes with default values, if elements to which these
- * attributes apply appear in the document without specifications
- * of values for these attributes, or
- * - entities (other than amp, lt, gt, apos, quot), if references
- * to those entities appear in the document, or
- * - attributes with values subject to normalization, where the
- * attribute appears in the document with a value which will change
- * as a result of normalization, or
- * - element types with element content, if white space occurs directly
- * within any instance of those types.
- *
- * Returns:
- * 1 if standalone="yes"
- * 0 if standalone="no"
- * -2 if standalone attribute is missing or invalid
- * (A standalone value of -2 means that the XML declaration was found,
- * but no value was specified for the standalone attribute).
- */
-
-int
-xmlParseSDDecl(xmlParserCtxtPtr ctxt) {
- int standalone = -2;
-
- SKIP_BLANKS;
- if (CMP10(CUR_PTR, 's', 't', 'a', 'n', 'd', 'a', 'l', 'o', 'n', 'e')) {
- SKIP(10);
- SKIP_BLANKS;
- if (RAW != '=') {
- xmlFatalErr(ctxt, XML_ERR_EQUAL_REQUIRED, NULL);
- return(standalone);
- }
- NEXT;
- SKIP_BLANKS;
- if (RAW == '\''){
- NEXT;
- if ((RAW == 'n') && (NXT(1) == 'o')) {
- standalone = 0;
- SKIP(2);
- } else if ((RAW == 'y') && (NXT(1) == 'e') &&
- (NXT(2) == 's')) {
- standalone = 1;
- SKIP(3);
- } else {
- xmlFatalErr(ctxt, XML_ERR_STANDALONE_VALUE, NULL);
- }
- if (RAW != '\'') {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
- } else
- NEXT;
- } else if (RAW == '"'){
- NEXT;
- if ((RAW == 'n') && (NXT(1) == 'o')) {
- standalone = 0;
- SKIP(2);
- } else if ((RAW == 'y') && (NXT(1) == 'e') &&
- (NXT(2) == 's')) {
- standalone = 1;
- SKIP(3);
- } else {
- xmlFatalErr(ctxt, XML_ERR_STANDALONE_VALUE, NULL);
- }
- if (RAW != '"') {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_CLOSED, NULL);
- } else
- NEXT;
- } else {
- xmlFatalErr(ctxt, XML_ERR_STRING_NOT_STARTED, NULL);
- }
- }
- return(standalone);
-}
-
-/**
- * xmlParseXMLDecl:
- * @ctxt: an XML parser context
- *
- * parse an XML declaration header
- *
- * [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'
- */
-
-void
-xmlParseXMLDecl(xmlParserCtxtPtr ctxt) {
- xmlChar *version;
-
- /*
- * This value for standalone indicates that the document has an
- * XML declaration but it does not have a standalone attribute.
- * It will be overwritten later if a standalone attribute is found.
- */
- ctxt->input->standalone = -2;
-
- /*
- * We know that '<?xml' is here.
- */
- SKIP(5);
-
- if (!IS_BLANK_CH(RAW)) {
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED,
- "Blank needed after '<?xml'\n");
- }
- SKIP_BLANKS;
-
- /*
- * We must have the VersionInfo here.
- */
- version = xmlParseVersionInfo(ctxt);
- if (version == NULL) {
- xmlFatalErr(ctxt, XML_ERR_VERSION_MISSING, NULL);
- } else {
- if (!xmlStrEqual(version, (const xmlChar *) XML_DEFAULT_VERSION)) {
- /*
- * Changed here for XML-1.0 5th edition
- */
- if (ctxt->options & XML_PARSE_OLD10) {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNKNOWN_VERSION,
- "Unsupported version '%s'\n",
- version);
- } else {
- if ((version[0] == '1') && ((version[1] == '.'))) {
- xmlWarningMsg(ctxt, XML_WAR_UNKNOWN_VERSION,
- "Unsupported version '%s'\n",
- version, NULL);
- } else {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNKNOWN_VERSION,
- "Unsupported version '%s'\n",
- version);
- }
- }
- }
- if (ctxt->version != NULL)
- xmlFree((void *) ctxt->version);
- ctxt->version = version;
- }
-
- /*
- * We may have the encoding declaration
- */
- if (!IS_BLANK_CH(RAW)) {
- if ((RAW == '?') && (NXT(1) == '>')) {
- SKIP(2);
- return;
- }
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, "Blank needed here\n");
- }
- xmlParseEncodingDecl(ctxt);
- if ((ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) ||
- (ctxt->instate == XML_PARSER_EOF)) {
- /*
- * The XML REC instructs us to stop parsing right here
- */
- return;
- }
-
- /*
- * We may have the standalone status.
- */
- if ((ctxt->input->encoding != NULL) && (!IS_BLANK_CH(RAW))) {
- if ((RAW == '?') && (NXT(1) == '>')) {
- SKIP(2);
- return;
- }
- xmlFatalErrMsg(ctxt, XML_ERR_SPACE_REQUIRED, "Blank needed here\n");
- }
-
- /*
- * We can grow the input buffer freely at that point
- */
- GROW;
-
- SKIP_BLANKS;
- ctxt->input->standalone = xmlParseSDDecl(ctxt);
-
- SKIP_BLANKS;
- if ((RAW == '?') && (NXT(1) == '>')) {
- SKIP(2);
- } else if (RAW == '>') {
- /* Deprecated old WD ... */
- xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL);
- NEXT;
- } else {
- xmlFatalErr(ctxt, XML_ERR_XMLDECL_NOT_FINISHED, NULL);
- MOVETO_ENDTAG(CUR_PTR);
- NEXT;
- }
-}
-
-/**
- * xmlParseMisc:
- * @ctxt: an XML parser context
- *
- * parse an XML Misc* optional field.
- *
- * [27] Misc ::= Comment | PI | S
- */
-
-void
-xmlParseMisc(xmlParserCtxtPtr ctxt) {
- while ((ctxt->instate != XML_PARSER_EOF) &&
- (((RAW == '<') && (NXT(1) == '?')) ||
- (CMP4(CUR_PTR, '<', '!', '-', '-')) ||
- IS_BLANK_CH(CUR))) {
- if ((RAW == '<') && (NXT(1) == '?')) {
- xmlParsePI(ctxt);
- } else if (IS_BLANK_CH(CUR)) {
- NEXT;
- } else
- xmlParseComment(ctxt);
- }
-}
-
-/**
- * xmlParseDocument:
- * @ctxt: an XML parser context
- *
- * parse an XML document (and build a tree if using the standard SAX
- * interface).
- *
- * [1] document ::= prolog element Misc*
- *
- * [22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)?
- *
- * Returns 0, -1 in case of error. the parser context is augmented
- * as a result of the parsing.
- */
-
-int
-xmlParseDocument(xmlParserCtxtPtr ctxt) {
- xmlChar start[4];
- xmlCharEncoding enc;
-
- xmlInitParser();
-
- if ((ctxt == NULL) || (ctxt->input == NULL))
- return(-1);
-
- GROW;
-
- /*
- * SAX: detecting the level.
- */
- xmlDetectSAX2(ctxt);
-
- /*
- * SAX: beginning of the document processing.
- */
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
-
- if ((ctxt->encoding == NULL) &&
- ((ctxt->input->end - ctxt->input->cur) >= 4)) {
- /*
- * Get the 4 first bytes and decode the charset
- * if enc != XML_CHAR_ENCODING_NONE
- * plug some encoding conversion routines.
- */
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(&start[0], 4);
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
- }
-
-
- if (CUR == 0) {
- xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL);
- return(-1);
- }
-
- /*
- * Check for the XMLDecl in the Prolog.
- * do not GROW here to avoid the detected encoder to decode more
- * than just the first line, unless the amount of data is really
- * too small to hold "<?xml version="1.0" encoding="foo"
- */
- if ((ctxt->input->end - ctxt->input->cur) < 35) {
- GROW;
- }
- if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
-
- /*
- * Note that we will switch encoding on the fly.
- */
- xmlParseXMLDecl(ctxt);
- if ((ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) ||
- (ctxt->instate == XML_PARSER_EOF)) {
- /*
- * The XML REC instructs us to stop parsing right here
- */
- return(-1);
- }
- ctxt->standalone = ctxt->input->standalone;
- SKIP_BLANKS;
- } else {
- ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
- }
- if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX))
- ctxt->sax->startDocument(ctxt->userData);
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
- if ((ctxt->myDoc != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->buf != NULL) && (ctxt->input->buf->compressed >= 0)) {
- ctxt->myDoc->compression = ctxt->input->buf->compressed;
- }
-
- /*
- * The Misc part of the Prolog
- */
- GROW;
- xmlParseMisc(ctxt);
-
- /*
- * Then possibly doc type declaration(s) and more Misc
- * (doctypedecl Misc*)?
- */
- GROW;
- if (CMP9(CUR_PTR, '<', '!', 'D', 'O', 'C', 'T', 'Y', 'P', 'E')) {
-
- ctxt->inSubset = 1;
- xmlParseDocTypeDecl(ctxt);
- if (RAW == '[') {
- ctxt->instate = XML_PARSER_DTD;
- xmlParseInternalSubset(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
- }
-
- /*
- * Create and update the external subset.
- */
- ctxt->inSubset = 2;
- if ((ctxt->sax != NULL) && (ctxt->sax->externalSubset != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->externalSubset(ctxt->userData, ctxt->intSubName,
- ctxt->extSubSystem, ctxt->extSubURI);
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
- ctxt->inSubset = 0;
-
- xmlCleanSpecialAttr(ctxt);
-
- ctxt->instate = XML_PARSER_PROLOG;
- xmlParseMisc(ctxt);
- }
-
- /*
- * Time to start parsing the tree itself
- */
- GROW;
- if (RAW != '<') {
- xmlFatalErrMsg(ctxt, XML_ERR_DOCUMENT_EMPTY,
- "Start tag expected, '<' not found\n");
- } else {
- ctxt->instate = XML_PARSER_CONTENT;
- xmlParseElement(ctxt);
- ctxt->instate = XML_PARSER_EPILOG;
-
-
- /*
- * The Misc part at the end
- */
- xmlParseMisc(ctxt);
-
- if (RAW != 0) {
- xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
- }
- ctxt->instate = XML_PARSER_EOF;
- }
-
- /*
- * SAX: end of the document processing.
- */
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
-
- /*
- * Remove locally kept entity definitions if the tree was not built
- */
- if ((ctxt->myDoc != NULL) &&
- (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE))) {
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
-
- if ((ctxt->wellFormed) && (ctxt->myDoc != NULL)) {
- ctxt->myDoc->properties |= XML_DOC_WELLFORMED;
- if (ctxt->valid)
- ctxt->myDoc->properties |= XML_DOC_DTDVALID;
- if (ctxt->nsWellFormed)
- ctxt->myDoc->properties |= XML_DOC_NSVALID;
- if (ctxt->options & XML_PARSE_OLD10)
- ctxt->myDoc->properties |= XML_DOC_OLD10;
- }
- if (! ctxt->wellFormed) {
- ctxt->valid = 0;
- return(-1);
- }
- return(0);
-}
-
-/**
- * xmlParseExtParsedEnt:
- * @ctxt: an XML parser context
- *
- * parse a general parsed entity
- * An external general parsed entity is well-formed if it matches the
- * production labeled extParsedEnt.
- *
- * [78] extParsedEnt ::= TextDecl? content
- *
- * Returns 0, -1 in case of error. the parser context is augmented
- * as a result of the parsing.
- */
-
-int
-xmlParseExtParsedEnt(xmlParserCtxtPtr ctxt) {
- xmlChar start[4];
- xmlCharEncoding enc;
-
- if ((ctxt == NULL) || (ctxt->input == NULL))
- return(-1);
-
- xmlDefaultSAXHandlerInit();
-
- xmlDetectSAX2(ctxt);
-
- GROW;
-
- /*
- * SAX: beginning of the document processing.
- */
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator);
-
- /*
- * Get the 4 first bytes and decode the charset
- * if enc != XML_CHAR_ENCODING_NONE
- * plug some encoding conversion routines.
- */
- if ((ctxt->input->end - ctxt->input->cur) >= 4) {
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(start, 4);
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
- }
-
-
- if (CUR == 0) {
- xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL);
- }
-
- /*
- * Check for the XMLDecl in the Prolog.
- */
- GROW;
- if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
-
- /*
- * Note that we will switch encoding on the fly.
- */
- xmlParseXMLDecl(ctxt);
- if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
- /*
- * The XML REC instructs us to stop parsing right here
- */
- return(-1);
- }
- SKIP_BLANKS;
- } else {
- ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
- }
- if ((ctxt->sax) && (ctxt->sax->startDocument) && (!ctxt->disableSAX))
- ctxt->sax->startDocument(ctxt->userData);
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
-
- /*
- * Doing validity checking on chunk doesn't make sense
- */
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->validate = 0;
- ctxt->loadsubset = 0;
- ctxt->depth = 0;
-
- xmlParseContent(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
-
- if ((RAW == '<') && (NXT(1) == '/')) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- } else if (RAW != 0) {
- xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
- }
-
- /*
- * SAX: end of the document processing.
- */
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
-
- if (! ctxt->wellFormed) return(-1);
- return(0);
-}
-
-#ifdef LIBXML_PUSH_ENABLED
-/************************************************************************
- * *
- * Progressive parsing interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlParseLookupSequence:
- * @ctxt: an XML parser context
- * @first: the first char to lookup
- * @next: the next char to lookup or zero
- * @third: the next char to lookup or zero
- *
- * Try to find if a sequence (first, next, third) or just (first next) or
- * (first) is available in the input stream.
- * This function has a side effect of (possibly) incrementing ctxt->checkIndex
- * to avoid rescanning sequences of bytes, it DOES change the state of the
- * parser, do not use liberally.
- *
- * Returns the index to the current parsing point if the full sequence
- * is available, -1 otherwise.
- */
-static int
-xmlParseLookupSequence(xmlParserCtxtPtr ctxt, xmlChar first,
- xmlChar next, xmlChar third) {
- int base, len;
- xmlParserInputPtr in;
- const xmlChar *buf;
-
- in = ctxt->input;
- if (in == NULL) return(-1);
- base = in->cur - in->base;
- if (base < 0) return(-1);
- if (ctxt->checkIndex > base)
- base = ctxt->checkIndex;
- if (in->buf == NULL) {
- buf = in->base;
- len = in->length;
- } else {
- buf = xmlBufContent(in->buf->buffer);
- len = xmlBufUse(in->buf->buffer);
- }
- /* take into account the sequence length */
- if (third) len -= 2;
- else if (next) len --;
- for (;base < len;base++) {
- if (buf[base] == first) {
- if (third != 0) {
- if ((buf[base + 1] != next) ||
- (buf[base + 2] != third)) continue;
- } else if (next != 0) {
- if (buf[base + 1] != next) continue;
- }
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- if (next == 0)
- xmlGenericError(xmlGenericErrorContext,
- "PP: lookup '%c' found at %d\n",
- first, base);
- else if (third == 0)
- xmlGenericError(xmlGenericErrorContext,
- "PP: lookup '%c%c' found at %d\n",
- first, next, base);
- else
- xmlGenericError(xmlGenericErrorContext,
- "PP: lookup '%c%c%c' found at %d\n",
- first, next, third, base);
-#endif
- return(base - (in->cur - in->base));
- }
- }
- ctxt->checkIndex = base;
-#ifdef DEBUG_PUSH
- if (next == 0)
- xmlGenericError(xmlGenericErrorContext,
- "PP: lookup '%c' failed\n", first);
- else if (third == 0)
- xmlGenericError(xmlGenericErrorContext,
- "PP: lookup '%c%c' failed\n", first, next);
- else
- xmlGenericError(xmlGenericErrorContext,
- "PP: lookup '%c%c%c' failed\n", first, next, third);
-#endif
- return(-1);
-}
-
-/**
- * xmlParseGetLasts:
- * @ctxt: an XML parser context
- * @lastlt: pointer to store the last '<' from the input
- * @lastgt: pointer to store the last '>' from the input
- *
- * Lookup the last < and > in the current chunk
- */
-static void
-xmlParseGetLasts(xmlParserCtxtPtr ctxt, const xmlChar **lastlt,
- const xmlChar **lastgt) {
- const xmlChar *tmp;
-
- if ((ctxt == NULL) || (lastlt == NULL) || (lastgt == NULL)) {
- xmlGenericError(xmlGenericErrorContext,
- "Internal error: xmlParseGetLasts\n");
- return;
- }
- if ((ctxt->progressive != 0) && (ctxt->inputNr == 1)) {
- tmp = ctxt->input->end;
- tmp--;
- while ((tmp >= ctxt->input->base) && (*tmp != '<')) tmp--;
- if (tmp < ctxt->input->base) {
- *lastlt = NULL;
- *lastgt = NULL;
- } else {
- *lastlt = tmp;
- tmp++;
- while ((tmp < ctxt->input->end) && (*tmp != '>')) {
- if (*tmp == '\'') {
- tmp++;
- while ((tmp < ctxt->input->end) && (*tmp != '\'')) tmp++;
- if (tmp < ctxt->input->end) tmp++;
- } else if (*tmp == '"') {
- tmp++;
- while ((tmp < ctxt->input->end) && (*tmp != '"')) tmp++;
- if (tmp < ctxt->input->end) tmp++;
- } else
- tmp++;
- }
- if (tmp < ctxt->input->end)
- *lastgt = tmp;
- else {
- tmp = *lastlt;
- tmp--;
- while ((tmp >= ctxt->input->base) && (*tmp != '>')) tmp--;
- if (tmp >= ctxt->input->base)
- *lastgt = tmp;
- else
- *lastgt = NULL;
- }
- }
- } else {
- *lastlt = NULL;
- *lastgt = NULL;
- }
-}
-/**
- * xmlCheckCdataPush:
- * @cur: pointer to the block of characters
- * @len: length of the block in bytes
- * @complete: 1 if complete CDATA block is passed in, 0 if partial block
- *
- * Check that the block of characters is okay as SCdata content [20]
- *
- * Returns the number of bytes to pass if okay, a negative index where an
- * UTF-8 error occured otherwise
- */
-static int
-xmlCheckCdataPush(const xmlChar *utf, int len, int complete) {
- int ix;
- unsigned char c;
- int codepoint;
-
- if ((utf == NULL) || (len <= 0))
- return(0);
-
- for (ix = 0; ix < len;) { /* string is 0-terminated */
- c = utf[ix];
- if ((c & 0x80) == 0x00) { /* 1-byte code, starts with 10 */
- if (c >= 0x20)
- ix++;
- else if ((c == 0xA) || (c == 0xD) || (c == 0x9))
- ix++;
- else
- return(-ix);
- } else if ((c & 0xe0) == 0xc0) {/* 2-byte code, starts with 110 */
- if (ix + 2 > len) return(complete ? -ix : ix);
- if ((utf[ix+1] & 0xc0 ) != 0x80)
- return(-ix);
- codepoint = (utf[ix] & 0x1f) << 6;
- codepoint |= utf[ix+1] & 0x3f;
- if (!xmlIsCharQ(codepoint))
- return(-ix);
- ix += 2;
- } else if ((c & 0xf0) == 0xe0) {/* 3-byte code, starts with 1110 */
- if (ix + 3 > len) return(complete ? -ix : ix);
- if (((utf[ix+1] & 0xc0) != 0x80) ||
- ((utf[ix+2] & 0xc0) != 0x80))
- return(-ix);
- codepoint = (utf[ix] & 0xf) << 12;
- codepoint |= (utf[ix+1] & 0x3f) << 6;
- codepoint |= utf[ix+2] & 0x3f;
- if (!xmlIsCharQ(codepoint))
- return(-ix);
- ix += 3;
- } else if ((c & 0xf8) == 0xf0) {/* 4-byte code, starts with 11110 */
- if (ix + 4 > len) return(complete ? -ix : ix);
- if (((utf[ix+1] & 0xc0) != 0x80) ||
- ((utf[ix+2] & 0xc0) != 0x80) ||
- ((utf[ix+3] & 0xc0) != 0x80))
- return(-ix);
- codepoint = (utf[ix] & 0x7) << 18;
- codepoint |= (utf[ix+1] & 0x3f) << 12;
- codepoint |= (utf[ix+2] & 0x3f) << 6;
- codepoint |= utf[ix+3] & 0x3f;
- if (!xmlIsCharQ(codepoint))
- return(-ix);
- ix += 4;
- } else /* unknown encoding */
- return(-ix);
- }
- return(ix);
-}
-
-/**
- * xmlParseTryOrFinish:
- * @ctxt: an XML parser context
- * @terminate: last chunk indicator
- *
- * Try to progress on parsing
- *
- * Returns zero if no parsing was possible
- */
-static int
-xmlParseTryOrFinish(xmlParserCtxtPtr ctxt, int terminate) {
- int ret = 0;
- int avail, tlen;
- xmlChar cur, next;
- const xmlChar *lastlt, *lastgt;
-
- if (ctxt->input == NULL)
- return(0);
-
-#ifdef DEBUG_PUSH
- switch (ctxt->instate) {
- case XML_PARSER_EOF:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try EOF\n"); break;
- case XML_PARSER_START:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try START\n"); break;
- case XML_PARSER_MISC:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try MISC\n");break;
- case XML_PARSER_COMMENT:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try COMMENT\n");break;
- case XML_PARSER_PROLOG:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try PROLOG\n");break;
- case XML_PARSER_START_TAG:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try START_TAG\n");break;
- case XML_PARSER_CONTENT:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try CONTENT\n");break;
- case XML_PARSER_CDATA_SECTION:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try CDATA_SECTION\n");break;
- case XML_PARSER_END_TAG:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try END_TAG\n");break;
- case XML_PARSER_ENTITY_DECL:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try ENTITY_DECL\n");break;
- case XML_PARSER_ENTITY_VALUE:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try ENTITY_VALUE\n");break;
- case XML_PARSER_ATTRIBUTE_VALUE:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try ATTRIBUTE_VALUE\n");break;
- case XML_PARSER_DTD:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try DTD\n");break;
- case XML_PARSER_EPILOG:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try EPILOG\n");break;
- case XML_PARSER_PI:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try PI\n");break;
- case XML_PARSER_IGNORE:
- xmlGenericError(xmlGenericErrorContext,
- "PP: try IGNORE\n");break;
- }
-#endif
-
- if ((ctxt->input != NULL) &&
- (ctxt->input->cur - ctxt->input->base > 4096)) {
- xmlSHRINK(ctxt);
- ctxt->checkIndex = 0;
- }
- xmlParseGetLasts(ctxt, &lastlt, &lastgt);
-
- while (ctxt->instate != XML_PARSER_EOF) {
- if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
- return(0);
-
-
- /*
- * Pop-up of finished entities.
- */
- while ((RAW == 0) && (ctxt->inputNr > 1))
- xmlPopInput(ctxt);
-
- if (ctxt->input == NULL) break;
- if (ctxt->input->buf == NULL)
- avail = ctxt->input->length -
- (ctxt->input->cur - ctxt->input->base);
- else {
- /*
- * If we are operating on converted input, try to flush
- * remainng chars to avoid them stalling in the non-converted
- * buffer. But do not do this in document start where
- * encoding="..." may not have been read and we work on a
- * guessed encoding.
- */
- if ((ctxt->instate != XML_PARSER_START) &&
- (ctxt->input->buf->raw != NULL) &&
- (xmlBufIsEmpty(ctxt->input->buf->raw) == 0)) {
- size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer,
- ctxt->input);
- size_t current = ctxt->input->cur - ctxt->input->base;
-
- xmlParserInputBufferPush(ctxt->input->buf, 0, "");
- xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input,
- base, current);
- }
- avail = xmlBufUse(ctxt->input->buf->buffer) -
- (ctxt->input->cur - ctxt->input->base);
- }
- if (avail < 1)
- goto done;
- switch (ctxt->instate) {
- case XML_PARSER_EOF:
- /*
- * Document parsing is done !
- */
- goto done;
- case XML_PARSER_START:
- if (ctxt->charset == XML_CHAR_ENCODING_NONE) {
- xmlChar start[4];
- xmlCharEncoding enc;
-
- /*
- * Very first chars read from the document flow.
- */
- if (avail < 4)
- goto done;
-
- /*
- * Get the 4 first bytes and decode the charset
- * if enc != XML_CHAR_ENCODING_NONE
- * plug some encoding conversion routines,
- * else xmlSwitchEncoding will set to (default)
- * UTF8.
- */
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(start, 4);
- xmlSwitchEncoding(ctxt, enc);
- break;
- }
-
- if (avail < 2)
- goto done;
- cur = ctxt->input->cur[0];
- next = ctxt->input->cur[1];
- if (cur == 0) {
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData,
- &xmlDefaultSAXLocator);
- xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL);
- xmlHaltParser(ctxt);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering EOF\n");
-#endif
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- goto done;
- }
- if ((cur == '<') && (next == '?')) {
- /* PI or XML decl */
- if (avail < 5) return(ret);
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0))
- return(ret);
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData,
- &xmlDefaultSAXLocator);
- if ((ctxt->input->cur[2] == 'x') &&
- (ctxt->input->cur[3] == 'm') &&
- (ctxt->input->cur[4] == 'l') &&
- (IS_BLANK_CH(ctxt->input->cur[5]))) {
- ret += 5;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: Parsing XML Decl\n");
-#endif
- xmlParseXMLDecl(ctxt);
- if (ctxt->errNo == XML_ERR_UNSUPPORTED_ENCODING) {
- /*
- * The XML REC instructs us to stop parsing right
- * here
- */
- xmlHaltParser(ctxt);
- return(0);
- }
- ctxt->standalone = ctxt->input->standalone;
- if ((ctxt->encoding == NULL) &&
- (ctxt->input->encoding != NULL))
- ctxt->encoding = xmlStrdup(ctxt->input->encoding);
- if ((ctxt->sax) && (ctxt->sax->startDocument) &&
- (!ctxt->disableSAX))
- ctxt->sax->startDocument(ctxt->userData);
- ctxt->instate = XML_PARSER_MISC;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering MISC\n");
-#endif
- } else {
- ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
- if ((ctxt->sax) && (ctxt->sax->startDocument) &&
- (!ctxt->disableSAX))
- ctxt->sax->startDocument(ctxt->userData);
- ctxt->instate = XML_PARSER_MISC;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering MISC\n");
-#endif
- }
- } else {
- if ((ctxt->sax) && (ctxt->sax->setDocumentLocator))
- ctxt->sax->setDocumentLocator(ctxt->userData,
- &xmlDefaultSAXLocator);
- ctxt->version = xmlCharStrdup(XML_DEFAULT_VERSION);
- if (ctxt->version == NULL) {
- xmlErrMemory(ctxt, NULL);
- break;
- }
- if ((ctxt->sax) && (ctxt->sax->startDocument) &&
- (!ctxt->disableSAX))
- ctxt->sax->startDocument(ctxt->userData);
- ctxt->instate = XML_PARSER_MISC;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering MISC\n");
-#endif
- }
- break;
- case XML_PARSER_START_TAG: {
- const xmlChar *name;
- const xmlChar *prefix = NULL;
- const xmlChar *URI = NULL;
- int nsNr = ctxt->nsNr;
-
- if ((avail < 2) && (ctxt->inputNr == 1))
- goto done;
- cur = ctxt->input->cur[0];
- if (cur != '<') {
- xmlFatalErr(ctxt, XML_ERR_DOCUMENT_EMPTY, NULL);
- xmlHaltParser(ctxt);
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- goto done;
- }
- if (!terminate) {
- if (ctxt->progressive) {
- /* > can be found unescaped in attribute values */
- if ((lastgt == NULL) || (ctxt->input->cur >= lastgt))
- goto done;
- } else if (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0) {
- goto done;
- }
- }
- if (ctxt->spaceNr == 0)
- spacePush(ctxt, -1);
- else if (*ctxt->space == -2)
- spacePush(ctxt, -1);
- else
- spacePush(ctxt, *ctxt->space);
-#ifdef LIBXML_SAX1_ENABLED
- if (ctxt->sax2)
-#endif /* LIBXML_SAX1_ENABLED */
- name = xmlParseStartTag2(ctxt, &prefix, &URI, &tlen);
-#ifdef LIBXML_SAX1_ENABLED
- else
- name = xmlParseStartTag(ctxt);
-#endif /* LIBXML_SAX1_ENABLED */
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- if (name == NULL) {
- spacePop(ctxt);
- xmlHaltParser(ctxt);
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- goto done;
- }
-#ifdef LIBXML_VALID_ENABLED
- /*
- * [ VC: Root Element Type ]
- * The Name in the document type declaration must match
- * the element type of the root element.
- */
- if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc &&
- ctxt->node && (ctxt->node == ctxt->myDoc->children))
- ctxt->valid &= xmlValidateRoot(&ctxt->vctxt, ctxt->myDoc);
-#endif /* LIBXML_VALID_ENABLED */
-
- /*
- * Check for an Empty Element.
- */
- if ((RAW == '/') && (NXT(1) == '>')) {
- SKIP(2);
-
- if (ctxt->sax2) {
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->endElementNs != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->endElementNs(ctxt->userData, name,
- prefix, URI);
- if (ctxt->nsNr - nsNr > 0)
- nsPop(ctxt, ctxt->nsNr - nsNr);
-#ifdef LIBXML_SAX1_ENABLED
- } else {
- if ((ctxt->sax != NULL) &&
- (ctxt->sax->endElement != NULL) &&
- (!ctxt->disableSAX))
- ctxt->sax->endElement(ctxt->userData, name);
-#endif /* LIBXML_SAX1_ENABLED */
- }
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- spacePop(ctxt);
- if (ctxt->nameNr == 0) {
- ctxt->instate = XML_PARSER_EPILOG;
- } else {
- ctxt->instate = XML_PARSER_CONTENT;
- }
- ctxt->progressive = 1;
- break;
- }
- if (RAW == '>') {
- NEXT;
- } else {
- xmlFatalErrMsgStr(ctxt, XML_ERR_GT_REQUIRED,
- "Couldn't find end of Start Tag %s\n",
- name);
- nodePop(ctxt);
- spacePop(ctxt);
- }
- if (ctxt->sax2)
- nameNsPush(ctxt, name, prefix, URI, ctxt->nsNr - nsNr);
-#ifdef LIBXML_SAX1_ENABLED
- else
- namePush(ctxt, name);
-#endif /* LIBXML_SAX1_ENABLED */
-
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->progressive = 1;
- break;
- }
- case XML_PARSER_CONTENT: {
- const xmlChar *test;
- unsigned int cons;
- if ((avail < 2) && (ctxt->inputNr == 1))
- goto done;
- cur = ctxt->input->cur[0];
- next = ctxt->input->cur[1];
-
- test = CUR_PTR;
- cons = ctxt->input->consumed;
- if ((cur == '<') && (next == '/')) {
- ctxt->instate = XML_PARSER_END_TAG;
- break;
- } else if ((cur == '<') && (next == '?')) {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) {
- ctxt->progressive = XML_PARSER_PI;
- goto done;
- }
- xmlParsePI(ctxt);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->progressive = 1;
- } else if ((cur == '<') && (next != '!')) {
- ctxt->instate = XML_PARSER_START_TAG;
- break;
- } else if ((cur == '<') && (next == '!') &&
- (ctxt->input->cur[2] == '-') &&
- (ctxt->input->cur[3] == '-')) {
- int term;
-
- if (avail < 4)
- goto done;
- ctxt->input->cur += 4;
- term = xmlParseLookupSequence(ctxt, '-', '-', '>');
- ctxt->input->cur -= 4;
- if ((!terminate) && (term < 0)) {
- ctxt->progressive = XML_PARSER_COMMENT;
- goto done;
- }
- xmlParseComment(ctxt);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->progressive = 1;
- } else if ((cur == '<') && (ctxt->input->cur[1] == '!') &&
- (ctxt->input->cur[2] == '[') &&
- (ctxt->input->cur[3] == 'C') &&
- (ctxt->input->cur[4] == 'D') &&
- (ctxt->input->cur[5] == 'A') &&
- (ctxt->input->cur[6] == 'T') &&
- (ctxt->input->cur[7] == 'A') &&
- (ctxt->input->cur[8] == '[')) {
- SKIP(9);
- ctxt->instate = XML_PARSER_CDATA_SECTION;
- break;
- } else if ((cur == '<') && (next == '!') &&
- (avail < 9)) {
- goto done;
- } else if (cur == '&') {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, ';', 0, 0) < 0))
- goto done;
- xmlParseReference(ctxt);
- } else {
- /* TODO Avoid the extra copy, handle directly !!! */
- /*
- * Goal of the following test is:
- * - minimize calls to the SAX 'character' callback
- * when they are mergeable
- * - handle an problem for isBlank when we only parse
- * a sequence of blank chars and the next one is
- * not available to check against '<' presence.
- * - tries to homogenize the differences in SAX
- * callbacks between the push and pull versions
- * of the parser.
- */
- if ((ctxt->inputNr == 1) &&
- (avail < XML_PARSER_BIG_BUFFER_SIZE)) {
- if (!terminate) {
- if (ctxt->progressive) {
- if ((lastlt == NULL) ||
- (ctxt->input->cur > lastlt))
- goto done;
- } else if (xmlParseLookupSequence(ctxt,
- '<', 0, 0) < 0) {
- goto done;
- }
- }
- }
- ctxt->checkIndex = 0;
- xmlParseCharData(ctxt, 0);
- }
- /*
- * Pop-up of finished entities.
- */
- while ((RAW == 0) && (ctxt->inputNr > 1))
- xmlPopInput(ctxt);
- if ((cons == ctxt->input->consumed) && (test == CUR_PTR)) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR,
- "detected an error in element content\n");
- xmlHaltParser(ctxt);
- break;
- }
- break;
- }
- case XML_PARSER_END_TAG:
- if (avail < 2)
- goto done;
- if (!terminate) {
- if (ctxt->progressive) {
- /* > can be found unescaped in attribute values */
- if ((lastgt == NULL) || (ctxt->input->cur >= lastgt))
- goto done;
- } else if (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0) {
- goto done;
- }
- }
- if (ctxt->sax2) {
- xmlParseEndTag2(ctxt,
- (void *) ctxt->pushTab[ctxt->nameNr * 3 - 3],
- (void *) ctxt->pushTab[ctxt->nameNr * 3 - 2], 0,
- (int) (long) ctxt->pushTab[ctxt->nameNr * 3 - 1], 0);
- nameNsPop(ctxt);
- }
-#ifdef LIBXML_SAX1_ENABLED
- else
- xmlParseEndTag1(ctxt, 0);
-#endif /* LIBXML_SAX1_ENABLED */
- if (ctxt->instate == XML_PARSER_EOF) {
- /* Nothing */
- } else if (ctxt->nameNr == 0) {
- ctxt->instate = XML_PARSER_EPILOG;
- } else {
- ctxt->instate = XML_PARSER_CONTENT;
- }
- break;
- case XML_PARSER_CDATA_SECTION: {
- /*
- * The Push mode need to have the SAX callback for
- * cdataBlock merge back contiguous callbacks.
- */
- int base;
-
- base = xmlParseLookupSequence(ctxt, ']', ']', '>');
- if (base < 0) {
- if (avail >= XML_PARSER_BIG_BUFFER_SIZE + 2) {
- int tmp;
-
- tmp = xmlCheckCdataPush(ctxt->input->cur,
- XML_PARSER_BIG_BUFFER_SIZE, 0);
- if (tmp < 0) {
- tmp = -tmp;
- ctxt->input->cur += tmp;
- goto encoding_error;
- }
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX)) {
- if (ctxt->sax->cdataBlock != NULL)
- ctxt->sax->cdataBlock(ctxt->userData,
- ctxt->input->cur, tmp);
- else if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData,
- ctxt->input->cur, tmp);
- }
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- SKIPL(tmp);
- ctxt->checkIndex = 0;
- }
- goto done;
- } else {
- int tmp;
-
- tmp = xmlCheckCdataPush(ctxt->input->cur, base, 1);
- if ((tmp < 0) || (tmp != base)) {
- tmp = -tmp;
- ctxt->input->cur += tmp;
- goto encoding_error;
- }
- if ((ctxt->sax != NULL) && (base == 0) &&
- (ctxt->sax->cdataBlock != NULL) &&
- (!ctxt->disableSAX)) {
- /*
- * Special case to provide identical behaviour
- * between pull and push parsers on enpty CDATA
- * sections
- */
- if ((ctxt->input->cur - ctxt->input->base >= 9) &&
- (!strncmp((const char *)&ctxt->input->cur[-9],
- "<![CDATA[", 9)))
- ctxt->sax->cdataBlock(ctxt->userData,
- BAD_CAST "", 0);
- } else if ((ctxt->sax != NULL) && (base > 0) &&
- (!ctxt->disableSAX)) {
- if (ctxt->sax->cdataBlock != NULL)
- ctxt->sax->cdataBlock(ctxt->userData,
- ctxt->input->cur, base);
- else if (ctxt->sax->characters != NULL)
- ctxt->sax->characters(ctxt->userData,
- ctxt->input->cur, base);
- }
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- SKIPL(base + 3);
- ctxt->checkIndex = 0;
- ctxt->instate = XML_PARSER_CONTENT;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering CONTENT\n");
-#endif
- }
- break;
- }
- case XML_PARSER_MISC:
- SKIP_BLANKS;
- if (ctxt->input->buf == NULL)
- avail = ctxt->input->length -
- (ctxt->input->cur - ctxt->input->base);
- else
- avail = xmlBufUse(ctxt->input->buf->buffer) -
- (ctxt->input->cur - ctxt->input->base);
- if (avail < 2)
- goto done;
- cur = ctxt->input->cur[0];
- next = ctxt->input->cur[1];
- if ((cur == '<') && (next == '?')) {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) {
- ctxt->progressive = XML_PARSER_PI;
- goto done;
- }
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: Parsing PI\n");
-#endif
- xmlParsePI(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- ctxt->instate = XML_PARSER_MISC;
- ctxt->progressive = 1;
- ctxt->checkIndex = 0;
- } else if ((cur == '<') && (next == '!') &&
- (ctxt->input->cur[2] == '-') &&
- (ctxt->input->cur[3] == '-')) {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) {
- ctxt->progressive = XML_PARSER_COMMENT;
- goto done;
- }
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: Parsing Comment\n");
-#endif
- xmlParseComment(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- ctxt->instate = XML_PARSER_MISC;
- ctxt->progressive = 1;
- ctxt->checkIndex = 0;
- } else if ((cur == '<') && (next == '!') &&
- (ctxt->input->cur[2] == 'D') &&
- (ctxt->input->cur[3] == 'O') &&
- (ctxt->input->cur[4] == 'C') &&
- (ctxt->input->cur[5] == 'T') &&
- (ctxt->input->cur[6] == 'Y') &&
- (ctxt->input->cur[7] == 'P') &&
- (ctxt->input->cur[8] == 'E')) {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '>', 0, 0) < 0)) {
- ctxt->progressive = XML_PARSER_DTD;
- goto done;
- }
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: Parsing internal subset\n");
-#endif
- ctxt->inSubset = 1;
- ctxt->progressive = 0;
- ctxt->checkIndex = 0;
- xmlParseDocTypeDecl(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- if (RAW == '[') {
- ctxt->instate = XML_PARSER_DTD;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering DTD\n");
-#endif
- } else {
- /*
- * Create and update the external subset.
- */
- ctxt->inSubset = 2;
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
- (ctxt->sax->externalSubset != NULL))
- ctxt->sax->externalSubset(ctxt->userData,
- ctxt->intSubName, ctxt->extSubSystem,
- ctxt->extSubURI);
- ctxt->inSubset = 0;
- xmlCleanSpecialAttr(ctxt);
- ctxt->instate = XML_PARSER_PROLOG;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering PROLOG\n");
-#endif
- }
- } else if ((cur == '<') && (next == '!') &&
- (avail < 9)) {
- goto done;
- } else {
- ctxt->instate = XML_PARSER_START_TAG;
- ctxt->progressive = XML_PARSER_START_TAG;
- xmlParseGetLasts(ctxt, &lastlt, &lastgt);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering START_TAG\n");
-#endif
- }
- break;
- case XML_PARSER_PROLOG:
- SKIP_BLANKS;
- if (ctxt->input->buf == NULL)
- avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base);
- else
- avail = xmlBufUse(ctxt->input->buf->buffer) -
- (ctxt->input->cur - ctxt->input->base);
- if (avail < 2)
- goto done;
- cur = ctxt->input->cur[0];
- next = ctxt->input->cur[1];
- if ((cur == '<') && (next == '?')) {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) {
- ctxt->progressive = XML_PARSER_PI;
- goto done;
- }
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: Parsing PI\n");
-#endif
- xmlParsePI(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- ctxt->instate = XML_PARSER_PROLOG;
- ctxt->progressive = 1;
- } else if ((cur == '<') && (next == '!') &&
- (ctxt->input->cur[2] == '-') && (ctxt->input->cur[3] == '-')) {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) {
- ctxt->progressive = XML_PARSER_COMMENT;
- goto done;
- }
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: Parsing Comment\n");
-#endif
- xmlParseComment(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- ctxt->instate = XML_PARSER_PROLOG;
- ctxt->progressive = 1;
- } else if ((cur == '<') && (next == '!') &&
- (avail < 4)) {
- goto done;
- } else {
- ctxt->instate = XML_PARSER_START_TAG;
- if (ctxt->progressive == 0)
- ctxt->progressive = XML_PARSER_START_TAG;
- xmlParseGetLasts(ctxt, &lastlt, &lastgt);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering START_TAG\n");
-#endif
- }
- break;
- case XML_PARSER_EPILOG:
- SKIP_BLANKS;
- if (ctxt->input->buf == NULL)
- avail = ctxt->input->length - (ctxt->input->cur - ctxt->input->base);
- else
- avail = xmlBufUse(ctxt->input->buf->buffer) -
- (ctxt->input->cur - ctxt->input->base);
- if (avail < 2)
- goto done;
- cur = ctxt->input->cur[0];
- next = ctxt->input->cur[1];
- if ((cur == '<') && (next == '?')) {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '?', '>', 0) < 0)) {
- ctxt->progressive = XML_PARSER_PI;
- goto done;
- }
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: Parsing PI\n");
-#endif
- xmlParsePI(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- ctxt->instate = XML_PARSER_EPILOG;
- ctxt->progressive = 1;
- } else if ((cur == '<') && (next == '!') &&
- (ctxt->input->cur[2] == '-') && (ctxt->input->cur[3] == '-')) {
- if ((!terminate) &&
- (xmlParseLookupSequence(ctxt, '-', '-', '>') < 0)) {
- ctxt->progressive = XML_PARSER_COMMENT;
- goto done;
- }
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: Parsing Comment\n");
-#endif
- xmlParseComment(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- ctxt->instate = XML_PARSER_EPILOG;
- ctxt->progressive = 1;
- } else if ((cur == '<') && (next == '!') &&
- (avail < 4)) {
- goto done;
- } else {
- xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
- xmlHaltParser(ctxt);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering EOF\n");
-#endif
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- goto done;
- }
- break;
- case XML_PARSER_DTD: {
- /*
- * Sorry but progressive parsing of the internal subset
- * is not expected to be supported. We first check that
- * the full content of the internal subset is available and
- * the parsing is launched only at that point.
- * Internal subset ends up with "']' S? '>'" in an unescaped
- * section and not in a ']]>' sequence which are conditional
- * sections (whoever argued to keep that crap in XML deserve
- * a place in hell !).
- */
- int base, i;
- xmlChar *buf;
- xmlChar quote = 0;
- size_t use;
-
- base = ctxt->input->cur - ctxt->input->base;
- if (base < 0) return(0);
- if (ctxt->checkIndex > base)
- base = ctxt->checkIndex;
- buf = xmlBufContent(ctxt->input->buf->buffer);
- use = xmlBufUse(ctxt->input->buf->buffer);
- for (;(unsigned int) base < use; base++) {
- if (quote != 0) {
- if (buf[base] == quote)
- quote = 0;
- continue;
- }
- if ((quote == 0) && (buf[base] == '<')) {
- int found = 0;
- /* special handling of comments */
- if (((unsigned int) base + 4 < use) &&
- (buf[base + 1] == '!') &&
- (buf[base + 2] == '-') &&
- (buf[base + 3] == '-')) {
- for (;(unsigned int) base + 3 < use; base++) {
- if ((buf[base] == '-') &&
- (buf[base + 1] == '-') &&
- (buf[base + 2] == '>')) {
- found = 1;
- base += 2;
- break;
- }
- }
- if (!found) {
-#if 0
- fprintf(stderr, "unfinished comment\n");
-#endif
- break; /* for */
- }
- continue;
- }
- }
- if (buf[base] == '"') {
- quote = '"';
- continue;
- }
- if (buf[base] == '\'') {
- quote = '\'';
- continue;
- }
- if (buf[base] == ']') {
-#if 0
- fprintf(stderr, "%c%c%c%c: ", buf[base],
- buf[base + 1], buf[base + 2], buf[base + 3]);
-#endif
- if ((unsigned int) base +1 >= use)
- break;
- if (buf[base + 1] == ']') {
- /* conditional crap, skip both ']' ! */
- base++;
- continue;
- }
- for (i = 1; (unsigned int) base + i < use; i++) {
- if (buf[base + i] == '>') {
-#if 0
- fprintf(stderr, "found\n");
-#endif
- goto found_end_int_subset;
- }
- if (!IS_BLANK_CH(buf[base + i])) {
-#if 0
- fprintf(stderr, "not found\n");
-#endif
- goto not_end_of_int_subset;
- }
- }
-#if 0
- fprintf(stderr, "end of stream\n");
-#endif
- break;
-
- }
-not_end_of_int_subset:
- continue; /* for */
- }
- /*
- * We didn't found the end of the Internal subset
- */
- if (quote == 0)
- ctxt->checkIndex = base;
- else
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- if (next == 0)
- xmlGenericError(xmlGenericErrorContext,
- "PP: lookup of int subset end filed\n");
-#endif
- goto done;
-
-found_end_int_subset:
- ctxt->checkIndex = 0;
- xmlParseInternalSubset(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- ctxt->inSubset = 2;
- if ((ctxt->sax != NULL) && (!ctxt->disableSAX) &&
- (ctxt->sax->externalSubset != NULL))
- ctxt->sax->externalSubset(ctxt->userData, ctxt->intSubName,
- ctxt->extSubSystem, ctxt->extSubURI);
- ctxt->inSubset = 0;
- xmlCleanSpecialAttr(ctxt);
- if (ctxt->instate == XML_PARSER_EOF)
- goto done;
- ctxt->instate = XML_PARSER_PROLOG;
- ctxt->checkIndex = 0;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering PROLOG\n");
-#endif
- break;
- }
- case XML_PARSER_COMMENT:
- xmlGenericError(xmlGenericErrorContext,
- "PP: internal error, state == COMMENT\n");
- ctxt->instate = XML_PARSER_CONTENT;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_IGNORE:
- xmlGenericError(xmlGenericErrorContext,
- "PP: internal error, state == IGNORE");
- ctxt->instate = XML_PARSER_DTD;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering DTD\n");
-#endif
- break;
- case XML_PARSER_PI:
- xmlGenericError(xmlGenericErrorContext,
- "PP: internal error, state == PI\n");
- ctxt->instate = XML_PARSER_CONTENT;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering CONTENT\n");
-#endif
- break;
- case XML_PARSER_ENTITY_DECL:
- xmlGenericError(xmlGenericErrorContext,
- "PP: internal error, state == ENTITY_DECL\n");
- ctxt->instate = XML_PARSER_DTD;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering DTD\n");
-#endif
- break;
- case XML_PARSER_ENTITY_VALUE:
- xmlGenericError(xmlGenericErrorContext,
- "PP: internal error, state == ENTITY_VALUE\n");
- ctxt->instate = XML_PARSER_CONTENT;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering DTD\n");
-#endif
- break;
- case XML_PARSER_ATTRIBUTE_VALUE:
- xmlGenericError(xmlGenericErrorContext,
- "PP: internal error, state == ATTRIBUTE_VALUE\n");
- ctxt->instate = XML_PARSER_START_TAG;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering START_TAG\n");
-#endif
- break;
- case XML_PARSER_SYSTEM_LITERAL:
- xmlGenericError(xmlGenericErrorContext,
- "PP: internal error, state == SYSTEM_LITERAL\n");
- ctxt->instate = XML_PARSER_START_TAG;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering START_TAG\n");
-#endif
- break;
- case XML_PARSER_PUBLIC_LITERAL:
- xmlGenericError(xmlGenericErrorContext,
- "PP: internal error, state == PUBLIC_LITERAL\n");
- ctxt->instate = XML_PARSER_START_TAG;
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext,
- "PP: entering START_TAG\n");
-#endif
- break;
- }
- }
-done:
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext, "PP: done %d\n", ret);
-#endif
- return(ret);
-encoding_error:
- {
- char buffer[150];
-
- snprintf(buffer, 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- ctxt->input->cur[0], ctxt->input->cur[1],
- ctxt->input->cur[2], ctxt->input->cur[3]);
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n%s",
- BAD_CAST buffer, NULL);
- }
- return(0);
-}
-
-/**
- * xmlParseCheckTransition:
- * @ctxt: an XML parser context
- * @chunk: a char array
- * @size: the size in byte of the chunk
- *
- * Check depending on the current parser state if the chunk given must be
- * processed immediately or one need more data to advance on parsing.
- *
- * Returns -1 in case of error, 0 if the push is not needed and 1 if needed
- */
-static int
-xmlParseCheckTransition(xmlParserCtxtPtr ctxt, const char *chunk, int size) {
- if ((ctxt == NULL) || (chunk == NULL) || (size < 0))
- return(-1);
- if (ctxt->instate == XML_PARSER_START_TAG) {
- if (memchr(chunk, '>', size) != NULL)
- return(1);
- return(0);
- }
- if (ctxt->progressive == XML_PARSER_COMMENT) {
- if (memchr(chunk, '>', size) != NULL)
- return(1);
- return(0);
- }
- if (ctxt->instate == XML_PARSER_CDATA_SECTION) {
- if (memchr(chunk, '>', size) != NULL)
- return(1);
- return(0);
- }
- if (ctxt->progressive == XML_PARSER_PI) {
- if (memchr(chunk, '>', size) != NULL)
- return(1);
- return(0);
- }
- if (ctxt->instate == XML_PARSER_END_TAG) {
- if (memchr(chunk, '>', size) != NULL)
- return(1);
- return(0);
- }
- if ((ctxt->progressive == XML_PARSER_DTD) ||
- (ctxt->instate == XML_PARSER_DTD)) {
- if (memchr(chunk, '>', size) != NULL)
- return(1);
- return(0);
- }
- return(1);
-}
-
-/**
- * xmlParseChunk:
- * @ctxt: an XML parser context
- * @chunk: an char array
- * @size: the size in byte of the chunk
- * @terminate: last chunk indicator
- *
- * Parse a Chunk of memory
- *
- * Returns zero if no error, the xmlParserErrors otherwise.
- */
-int
-xmlParseChunk(xmlParserCtxtPtr ctxt, const char *chunk, int size,
- int terminate) {
- int end_in_lf = 0;
- int remain = 0;
- size_t old_avail = 0;
- size_t avail = 0;
-
- if (ctxt == NULL)
- return(XML_ERR_INTERNAL_ERROR);
- if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
- return(ctxt->errNo);
- if (ctxt->instate == XML_PARSER_EOF)
- return(-1);
- if (ctxt->instate == XML_PARSER_START)
- xmlDetectSAX2(ctxt);
- if ((size > 0) && (chunk != NULL) && (!terminate) &&
- (chunk[size - 1] == '\r')) {
- end_in_lf = 1;
- size--;
- }
-
-xmldecl_done:
-
- if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->buf != NULL) && (ctxt->instate != XML_PARSER_EOF)) {
- size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
- size_t cur = ctxt->input->cur - ctxt->input->base;
- int res;
-
- old_avail = xmlBufUse(ctxt->input->buf->buffer);
- /*
- * Specific handling if we autodetected an encoding, we should not
- * push more than the first line ... which depend on the encoding
- * And only push the rest once the final encoding was detected
- */
- if ((ctxt->instate == XML_PARSER_START) && (ctxt->input != NULL) &&
- (ctxt->input->buf != NULL) && (ctxt->input->buf->encoder != NULL)) {
- unsigned int len = 45;
-
- if ((xmlStrcasestr(BAD_CAST ctxt->input->buf->encoder->name,
- BAD_CAST "UTF-16")) ||
- (xmlStrcasestr(BAD_CAST ctxt->input->buf->encoder->name,
- BAD_CAST "UTF16")))
- len = 90;
- else if ((xmlStrcasestr(BAD_CAST ctxt->input->buf->encoder->name,
- BAD_CAST "UCS-4")) ||
- (xmlStrcasestr(BAD_CAST ctxt->input->buf->encoder->name,
- BAD_CAST "UCS4")))
- len = 180;
-
- if (ctxt->input->buf->rawconsumed < len)
- len -= ctxt->input->buf->rawconsumed;
-
- /*
- * Change size for reading the initial declaration only
- * if size is greater than len. Otherwise, memmove in xmlBufferAdd
- * will blindly copy extra bytes from memory.
- */
- if ((unsigned int) size > len) {
- remain = size - len;
- size = len;
- } else {
- remain = 0;
- }
- }
- res = xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
- if (res < 0) {
- ctxt->errNo = XML_PARSER_EOF;
- xmlHaltParser(ctxt);
- return (XML_PARSER_EOF);
- }
- xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
-#endif
-
- } else if (ctxt->instate != XML_PARSER_EOF) {
- if ((ctxt->input != NULL) && ctxt->input->buf != NULL) {
- xmlParserInputBufferPtr in = ctxt->input->buf;
- if ((in->encoder != NULL) && (in->buffer != NULL) &&
- (in->raw != NULL)) {
- int nbchars;
- size_t base = xmlBufGetInputBase(in->buffer, ctxt->input);
- size_t current = ctxt->input->cur - ctxt->input->base;
-
- nbchars = xmlCharEncInput(in, terminate);
- if (nbchars < 0) {
- /* TODO 2.6.0 */
- xmlGenericError(xmlGenericErrorContext,
- "xmlParseChunk: encoder error\n");
- return(XML_ERR_INVALID_ENCODING);
- }
- xmlBufSetInputBaseCur(in->buffer, ctxt->input, base, current);
- }
- }
- }
- if (remain != 0) {
- xmlParseTryOrFinish(ctxt, 0);
- } else {
- if ((ctxt->input != NULL) && (ctxt->input->buf != NULL))
- avail = xmlBufUse(ctxt->input->buf->buffer);
- /*
- * Depending on the current state it may not be such
- * a good idea to try parsing if there is nothing in the chunk
- * which would be worth doing a parser state transition and we
- * need to wait for more data
- */
- if ((terminate) || (avail > XML_MAX_TEXT_LENGTH) ||
- (old_avail == 0) || (avail == 0) ||
- (xmlParseCheckTransition(ctxt,
- (const char *)&ctxt->input->base[old_avail],
- avail - old_avail)))
- xmlParseTryOrFinish(ctxt, terminate);
- }
- if (ctxt->instate == XML_PARSER_EOF)
- return(ctxt->errNo);
-
- if ((ctxt->input != NULL) &&
- (((ctxt->input->end - ctxt->input->cur) > XML_MAX_LOOKUP_LIMIT) ||
- ((ctxt->input->cur - ctxt->input->base) > XML_MAX_LOOKUP_LIMIT)) &&
- ((ctxt->options & XML_PARSE_HUGE) == 0)) {
- xmlFatalErr(ctxt, XML_ERR_INTERNAL_ERROR, "Huge input lookup");
- xmlHaltParser(ctxt);
- }
- if ((ctxt->errNo != XML_ERR_OK) && (ctxt->disableSAX == 1))
- return(ctxt->errNo);
-
- if (remain != 0) {
- chunk += size;
- size = remain;
- remain = 0;
- goto xmldecl_done;
- }
- if ((end_in_lf == 1) && (ctxt->input != NULL) &&
- (ctxt->input->buf != NULL)) {
- size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer,
- ctxt->input);
- size_t current = ctxt->input->cur - ctxt->input->base;
-
- xmlParserInputBufferPush(ctxt->input->buf, 1, "\r");
-
- xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input,
- base, current);
- }
- if (terminate) {
- /*
- * Check for termination
- */
- int cur_avail = 0;
-
- if (ctxt->input != NULL) {
- if (ctxt->input->buf == NULL)
- cur_avail = ctxt->input->length -
- (ctxt->input->cur - ctxt->input->base);
- else
- cur_avail = xmlBufUse(ctxt->input->buf->buffer) -
- (ctxt->input->cur - ctxt->input->base);
- }
-
- if ((ctxt->instate != XML_PARSER_EOF) &&
- (ctxt->instate != XML_PARSER_EPILOG)) {
- xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
- }
- if ((ctxt->instate == XML_PARSER_EPILOG) && (cur_avail > 0)) {
- xmlFatalErr(ctxt, XML_ERR_DOCUMENT_END, NULL);
- }
- if (ctxt->instate != XML_PARSER_EOF) {
- if ((ctxt->sax) && (ctxt->sax->endDocument != NULL))
- ctxt->sax->endDocument(ctxt->userData);
- }
- ctxt->instate = XML_PARSER_EOF;
- }
- if (ctxt->wellFormed == 0)
- return((xmlParserErrors) ctxt->errNo);
- else
- return(0);
-}
-
-/************************************************************************
- * *
- * I/O front end functions to the parser *
- * *
- ************************************************************************/
-
-/**
- * xmlCreatePushParserCtxt:
- * @sax: a SAX handler
- * @user_data: The user data returned on SAX callbacks
- * @chunk: a pointer to an array of chars
- * @size: number of chars in the array
- * @filename: an optional file name or URI
- *
- * Create a parser context for using the XML parser in push mode.
- * If @buffer and @size are non-NULL, the data is used to detect
- * the encoding. The remaining characters will be parsed so they
- * don't need to be fed in again through xmlParseChunk.
- * To allow content encoding detection, @size should be >= 4
- * The value of @filename is used for fetching external entities
- * and error/warning reports.
- *
- * Returns the new parser context or NULL
- */
-
-xmlParserCtxtPtr
-xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
- const char *chunk, int size, const char *filename) {
- xmlParserCtxtPtr ctxt;
- xmlParserInputPtr inputStream;
- xmlParserInputBufferPtr buf;
- xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
-
- /*
- * plug some encoding conversion routines
- */
- if ((chunk != NULL) && (size >= 4))
- enc = xmlDetectCharEncoding((const xmlChar *) chunk, size);
-
- buf = xmlAllocParserInputBuffer(enc);
- if (buf == NULL) return(NULL);
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlErrMemory(NULL, "creating parser: out of memory\n");
- xmlFreeParserInputBuffer(buf);
- return(NULL);
- }
- ctxt->dictNames = 1;
- ctxt->pushTab = (void **) xmlMalloc(ctxt->nameMax * 3 * sizeof(xmlChar *));
- if (ctxt->pushTab == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFreeParserInputBuffer(buf);
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- if (sax != NULL) {
-#ifdef LIBXML_SAX1_ENABLED
- if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
-#endif /* LIBXML_SAX1_ENABLED */
- xmlFree(ctxt->sax);
- ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(xmlSAXHandler));
- if (ctxt->sax == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFreeParserInputBuffer(buf);
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- memset(ctxt->sax, 0, sizeof(xmlSAXHandler));
- if (sax->initialized == XML_SAX2_MAGIC)
- memcpy(ctxt->sax, sax, sizeof(xmlSAXHandler));
- else
- memcpy(ctxt->sax, sax, sizeof(xmlSAXHandlerV1));
- if (user_data != NULL)
- ctxt->userData = user_data;
- }
- if (filename == NULL) {
- ctxt->directory = NULL;
- } else {
- ctxt->directory = xmlParserGetDirectory(filename);
- }
-
- inputStream = xmlNewInputStream(ctxt);
- if (inputStream == NULL) {
- xmlFreeParserCtxt(ctxt);
- xmlFreeParserInputBuffer(buf);
- return(NULL);
- }
-
- if (filename == NULL)
- inputStream->filename = NULL;
- else {
- inputStream->filename = (char *)
- xmlCanonicPath((const xmlChar *) filename);
- if (inputStream->filename == NULL) {
- xmlFreeParserCtxt(ctxt);
- xmlFreeParserInputBuffer(buf);
- return(NULL);
- }
- }
- inputStream->buf = buf;
- xmlBufResetInput(inputStream->buf->buffer, inputStream);
- inputPush(ctxt, inputStream);
-
- /*
- * If the caller didn't provide an initial 'chunk' for determining
- * the encoding, we set the context to XML_CHAR_ENCODING_NONE so
- * that it can be automatically determined later
- */
- if ((size == 0) || (chunk == NULL)) {
- ctxt->charset = XML_CHAR_ENCODING_NONE;
- } else if ((ctxt->input != NULL) && (ctxt->input->buf != NULL)) {
- size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
- size_t cur = ctxt->input->cur - ctxt->input->base;
-
- xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
-
- xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
-#endif
- }
-
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
-
- return(ctxt);
-}
-#endif /* LIBXML_PUSH_ENABLED */
-
-/**
- * xmlHaltParser:
- * @ctxt: an XML parser context
- *
- * Blocks further parser processing don't override error
- * for internal use
- */
-static void
-xmlHaltParser(xmlParserCtxtPtr ctxt) {
- if (ctxt == NULL)
- return;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- if (ctxt->input != NULL) {
- /*
- * in case there was a specific allocation deallocate before
- * overriding base
- */
- if (ctxt->input->free != NULL) {
- ctxt->input->free((xmlChar *) ctxt->input->base);
- ctxt->input->free = NULL;
- }
- ctxt->input->cur = BAD_CAST"";
- ctxt->input->base = ctxt->input->cur;
- }
-}
-
-/**
- * xmlStopParser:
- * @ctxt: an XML parser context
- *
- * Blocks further parser processing
- */
-void
-xmlStopParser(xmlParserCtxtPtr ctxt) {
- if (ctxt == NULL)
- return;
- xmlHaltParser(ctxt);
- ctxt->errNo = XML_ERR_USER_STOP;
-}
-
-/**
- * xmlCreateIOParserCtxt:
- * @sax: a SAX handler
- * @user_data: The user data returned on SAX callbacks
- * @ioread: an I/O read function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @enc: the charset encoding if known
- *
- * Create a parser context for using the XML parser with an existing
- * I/O stream
- *
- * Returns the new parser context or NULL
- */
-xmlParserCtxtPtr
-xmlCreateIOParserCtxt(xmlSAXHandlerPtr sax, void *user_data,
- xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
- void *ioctx, xmlCharEncoding enc) {
- xmlParserCtxtPtr ctxt;
- xmlParserInputPtr inputStream;
- xmlParserInputBufferPtr buf;
-
- if (ioread == NULL) return(NULL);
-
- buf = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx, enc);
- if (buf == NULL) {
- if (ioclose != NULL)
- ioclose(ioctx);
- return (NULL);
- }
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(buf);
- return(NULL);
- }
- if (sax != NULL) {
-#ifdef LIBXML_SAX1_ENABLED
- if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
-#endif /* LIBXML_SAX1_ENABLED */
- xmlFree(ctxt->sax);
- ctxt->sax = (xmlSAXHandlerPtr) xmlMalloc(sizeof(xmlSAXHandler));
- if (ctxt->sax == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- memset(ctxt->sax, 0, sizeof(xmlSAXHandler));
- if (sax->initialized == XML_SAX2_MAGIC)
- memcpy(ctxt->sax, sax, sizeof(xmlSAXHandler));
- else
- memcpy(ctxt->sax, sax, sizeof(xmlSAXHandlerV1));
- if (user_data != NULL)
- ctxt->userData = user_data;
- }
-
- inputStream = xmlNewIOInputStream(ctxt, buf, enc);
- if (inputStream == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- inputPush(ctxt, inputStream);
-
- return(ctxt);
-}
-
-#ifdef LIBXML_VALID_ENABLED
-/************************************************************************
- * *
- * Front ends when parsing a DTD *
- * *
- ************************************************************************/
-
-/**
- * xmlIOParseDTD:
- * @sax: the SAX handler block or NULL
- * @input: an Input Buffer
- * @enc: the charset encoding if known
- *
- * Load and parse a DTD
- *
- * Returns the resulting xmlDtdPtr or NULL in case of error.
- * @input will be freed by the function in any case.
- */
-
-xmlDtdPtr
-xmlIOParseDTD(xmlSAXHandlerPtr sax, xmlParserInputBufferPtr input,
- xmlCharEncoding enc) {
- xmlDtdPtr ret = NULL;
- xmlParserCtxtPtr ctxt;
- xmlParserInputPtr pinput = NULL;
- xmlChar start[4];
-
- if (input == NULL)
- return(NULL);
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(input);
- return(NULL);
- }
-
- /* We are loading a DTD */
- ctxt->options |= XML_PARSE_DTDLOAD;
-
- /*
- * Set-up the SAX context
- */
- if (sax != NULL) {
- if (ctxt->sax != NULL)
- xmlFree(ctxt->sax);
- ctxt->sax = sax;
- ctxt->userData = ctxt;
- }
- xmlDetectSAX2(ctxt);
-
- /*
- * generate a parser input from the I/O handler
- */
-
- pinput = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (pinput == NULL) {
- if (sax != NULL) ctxt->sax = NULL;
- xmlFreeParserInputBuffer(input);
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- /*
- * plug some encoding conversion routines here.
- */
- if (xmlPushInput(ctxt, pinput) < 0) {
- if (sax != NULL) ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
-
- pinput->filename = NULL;
- pinput->line = 1;
- pinput->col = 1;
- pinput->base = ctxt->input->cur;
- pinput->cur = ctxt->input->cur;
- pinput->free = NULL;
-
- /*
- * let's parse that entity knowing it's an external subset.
- */
- ctxt->inSubset = 2;
- ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0");
- if (ctxt->myDoc == NULL) {
- xmlErrMemory(ctxt, "New Doc failed");
- return(NULL);
- }
- ctxt->myDoc->properties = XML_DOC_INTERNAL;
- ctxt->myDoc->extSubset = xmlNewDtd(ctxt->myDoc, BAD_CAST "none",
- BAD_CAST "none", BAD_CAST "none");
-
- if ((enc == XML_CHAR_ENCODING_NONE) &&
- ((ctxt->input->end - ctxt->input->cur) >= 4)) {
- /*
- * Get the 4 first bytes and decode the charset
- * if enc != XML_CHAR_ENCODING_NONE
- * plug some encoding conversion routines.
- */
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(start, 4);
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
- }
-
- xmlParseExternalSubset(ctxt, BAD_CAST "none", BAD_CAST "none");
-
- if (ctxt->myDoc != NULL) {
- if (ctxt->wellFormed) {
- ret = ctxt->myDoc->extSubset;
- ctxt->myDoc->extSubset = NULL;
- if (ret != NULL) {
- xmlNodePtr tmp;
-
- ret->doc = NULL;
- tmp = ret->children;
- while (tmp != NULL) {
- tmp->doc = NULL;
- tmp = tmp->next;
- }
- }
- } else {
- ret = NULL;
- }
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- if (sax != NULL) ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-/**
- * xmlSAXParseDTD:
- * @sax: the SAX handler block
- * @ExternalID: a NAME* containing the External ID of the DTD
- * @SystemID: a NAME* containing the URL to the DTD
- *
- * Load and parse an external subset.
- *
- * Returns the resulting xmlDtdPtr or NULL in case of error.
- */
-
-xmlDtdPtr
-xmlSAXParseDTD(xmlSAXHandlerPtr sax, const xmlChar *ExternalID,
- const xmlChar *SystemID) {
- xmlDtdPtr ret = NULL;
- xmlParserCtxtPtr ctxt;
- xmlParserInputPtr input = NULL;
- xmlCharEncoding enc;
- xmlChar* systemIdCanonic;
-
- if ((ExternalID == NULL) && (SystemID == NULL)) return(NULL);
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- return(NULL);
- }
-
- /* We are loading a DTD */
- ctxt->options |= XML_PARSE_DTDLOAD;
-
- /*
- * Set-up the SAX context
- */
- if (sax != NULL) {
- if (ctxt->sax != NULL)
- xmlFree(ctxt->sax);
- ctxt->sax = sax;
- ctxt->userData = ctxt;
- }
-
- /*
- * Canonicalise the system ID
- */
- systemIdCanonic = xmlCanonicPath(SystemID);
- if ((SystemID != NULL) && (systemIdCanonic == NULL)) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- /*
- * Ask the Entity resolver to load the damn thing
- */
-
- if ((ctxt->sax != NULL) && (ctxt->sax->resolveEntity != NULL))
- input = ctxt->sax->resolveEntity(ctxt->userData, ExternalID,
- systemIdCanonic);
- if (input == NULL) {
- if (sax != NULL) ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
- if (systemIdCanonic != NULL)
- xmlFree(systemIdCanonic);
- return(NULL);
- }
-
- /*
- * plug some encoding conversion routines here.
- */
- if (xmlPushInput(ctxt, input) < 0) {
- if (sax != NULL) ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
- if (systemIdCanonic != NULL)
- xmlFree(systemIdCanonic);
- return(NULL);
- }
- if ((ctxt->input->end - ctxt->input->cur) >= 4) {
- enc = xmlDetectCharEncoding(ctxt->input->cur, 4);
- xmlSwitchEncoding(ctxt, enc);
- }
-
- if (input->filename == NULL)
- input->filename = (char *) systemIdCanonic;
- else
- xmlFree(systemIdCanonic);
- input->line = 1;
- input->col = 1;
- input->base = ctxt->input->cur;
- input->cur = ctxt->input->cur;
- input->free = NULL;
-
- /*
- * let's parse that entity knowing it's an external subset.
- */
- ctxt->inSubset = 2;
- ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0");
- if (ctxt->myDoc == NULL) {
- xmlErrMemory(ctxt, "New Doc failed");
- if (sax != NULL) ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- ctxt->myDoc->properties = XML_DOC_INTERNAL;
- ctxt->myDoc->extSubset = xmlNewDtd(ctxt->myDoc, BAD_CAST "none",
- ExternalID, SystemID);
- xmlParseExternalSubset(ctxt, ExternalID, SystemID);
-
- if (ctxt->myDoc != NULL) {
- if (ctxt->wellFormed) {
- ret = ctxt->myDoc->extSubset;
- ctxt->myDoc->extSubset = NULL;
- if (ret != NULL) {
- xmlNodePtr tmp;
-
- ret->doc = NULL;
- tmp = ret->children;
- while (tmp != NULL) {
- tmp->doc = NULL;
- tmp = tmp->next;
- }
- }
- } else {
- ret = NULL;
- }
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- if (sax != NULL) ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-
-/**
- * xmlParseDTD:
- * @ExternalID: a NAME* containing the External ID of the DTD
- * @SystemID: a NAME* containing the URL to the DTD
- *
- * Load and parse an external subset.
- *
- * Returns the resulting xmlDtdPtr or NULL in case of error.
- */
-
-xmlDtdPtr
-xmlParseDTD(const xmlChar *ExternalID, const xmlChar *SystemID) {
- return(xmlSAXParseDTD(NULL, ExternalID, SystemID));
-}
-#endif /* LIBXML_VALID_ENABLED */
-
-/************************************************************************
- * *
- * Front ends when parsing an Entity *
- * *
- ************************************************************************/
-
-/**
- * xmlParseCtxtExternalEntity:
- * @ctx: the existing parsing context
- * @URL: the URL for the entity to load
- * @ID: the System ID for the entity to load
- * @lst: the return value for the set of parsed nodes
- *
- * Parse an external general entity within an existing parsing context
- * An external general parsed entity is well-formed if it matches the
- * production labeled extParsedEnt.
- *
- * [78] extParsedEnt ::= TextDecl? content
- *
- * Returns 0 if the entity is well formed, -1 in case of args problem and
- * the parser error code otherwise
- */
-
-int
-xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, const xmlChar *URL,
- const xmlChar *ID, xmlNodePtr *lst) {
- xmlParserCtxtPtr ctxt;
- xmlDocPtr newDoc;
- xmlNodePtr newRoot;
- xmlSAXHandlerPtr oldsax = NULL;
- int ret = 0;
- xmlChar start[4];
- xmlCharEncoding enc;
-
- if (ctx == NULL) return(-1);
-
- if (((ctx->depth > 40) && ((ctx->options & XML_PARSE_HUGE) == 0)) ||
- (ctx->depth > 1024)) {
- return(XML_ERR_ENTITY_LOOP);
- }
-
- if (lst != NULL)
- *lst = NULL;
- if ((URL == NULL) && (ID == NULL))
- return(-1);
- if (ctx->myDoc == NULL) /* @@ relax but check for dereferences */
- return(-1);
-
- ctxt = xmlCreateEntityParserCtxtInternal(URL, ID, NULL, ctx);
- if (ctxt == NULL) {
- return(-1);
- }
-
- oldsax = ctxt->sax;
- ctxt->sax = ctx->sax;
- xmlDetectSAX2(ctxt);
- newDoc = xmlNewDoc(BAD_CAST "1.0");
- if (newDoc == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(-1);
- }
- newDoc->properties = XML_DOC_INTERNAL;
- if (ctx->myDoc->dict) {
- newDoc->dict = ctx->myDoc->dict;
- xmlDictReference(newDoc->dict);
- }
- if (ctx->myDoc != NULL) {
- newDoc->intSubset = ctx->myDoc->intSubset;
- newDoc->extSubset = ctx->myDoc->extSubset;
- }
- if (ctx->myDoc->URL != NULL) {
- newDoc->URL = xmlStrdup(ctx->myDoc->URL);
- }
- newRoot = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL);
- if (newRoot == NULL) {
- ctxt->sax = oldsax;
- xmlFreeParserCtxt(ctxt);
- newDoc->intSubset = NULL;
- newDoc->extSubset = NULL;
- xmlFreeDoc(newDoc);
- return(-1);
- }
- xmlAddChild((xmlNodePtr) newDoc, newRoot);
- nodePush(ctxt, newDoc->children);
- if (ctx->myDoc == NULL) {
- ctxt->myDoc = newDoc;
- } else {
- ctxt->myDoc = ctx->myDoc;
- newDoc->children->doc = ctx->myDoc;
- }
-
- /*
- * Get the 4 first bytes and decode the charset
- * if enc != XML_CHAR_ENCODING_NONE
- * plug some encoding conversion routines.
- */
- GROW
- if ((ctxt->input->end - ctxt->input->cur) >= 4) {
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(start, 4);
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
- }
-
- /*
- * Parse a possible text declaration first
- */
- if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
- xmlParseTextDecl(ctxt);
- /*
- * An XML-1.0 document can't reference an entity not XML-1.0
- */
- if ((xmlStrEqual(ctx->version, BAD_CAST "1.0")) &&
- (!xmlStrEqual(ctxt->input->version, BAD_CAST "1.0"))) {
- xmlFatalErrMsg(ctxt, XML_ERR_VERSION_MISMATCH,
- "Version mismatch between document and entity\n");
- }
- }
-
- /*
- * If the user provided its own SAX callbacks then reuse the
- * useData callback field, otherwise the expected setup in a
- * DOM builder is to have userData == ctxt
- */
- if (ctx->userData == ctx)
- ctxt->userData = ctxt;
- else
- ctxt->userData = ctx->userData;
-
- /*
- * Doing validity checking on chunk doesn't make sense
- */
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->validate = ctx->validate;
- ctxt->valid = ctx->valid;
- ctxt->loadsubset = ctx->loadsubset;
- ctxt->depth = ctx->depth + 1;
- ctxt->replaceEntities = ctx->replaceEntities;
- if (ctxt->validate) {
- ctxt->vctxt.error = ctx->vctxt.error;
- ctxt->vctxt.warning = ctx->vctxt.warning;
- } else {
- ctxt->vctxt.error = NULL;
- ctxt->vctxt.warning = NULL;
- }
- ctxt->vctxt.nodeTab = NULL;
- ctxt->vctxt.nodeNr = 0;
- ctxt->vctxt.nodeMax = 0;
- ctxt->vctxt.node = NULL;
- if (ctxt->dict != NULL) xmlDictFree(ctxt->dict);
- ctxt->dict = ctx->dict;
- ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
- ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
- ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
- ctxt->dictNames = ctx->dictNames;
- ctxt->attsDefault = ctx->attsDefault;
- ctxt->attsSpecial = ctx->attsSpecial;
- ctxt->linenumbers = ctx->linenumbers;
-
- xmlParseContent(ctxt);
-
- ctx->validate = ctxt->validate;
- ctx->valid = ctxt->valid;
- if ((RAW == '<') && (NXT(1) == '/')) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- } else if (RAW != 0) {
- xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
- }
- if (ctxt->node != newDoc->children) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- }
-
- if (!ctxt->wellFormed) {
- if (ctxt->errNo == 0)
- ret = 1;
- else
- ret = ctxt->errNo;
- } else {
- if (lst != NULL) {
- xmlNodePtr cur;
-
- /*
- * Return the newly created nodeset after unlinking it from
- * they pseudo parent.
- */
- cur = newDoc->children->children;
- *lst = cur;
- while (cur != NULL) {
- cur->parent = NULL;
- cur = cur->next;
- }
- newDoc->children->children = NULL;
- }
- ret = 0;
- }
- ctxt->sax = oldsax;
- ctxt->dict = NULL;
- ctxt->attsDefault = NULL;
- ctxt->attsSpecial = NULL;
- xmlFreeParserCtxt(ctxt);
- newDoc->intSubset = NULL;
- newDoc->extSubset = NULL;
- xmlFreeDoc(newDoc);
-
- return(ret);
-}
-
-/**
- * xmlParseExternalEntityPrivate:
- * @doc: the document the chunk pertains to
- * @oldctxt: the previous parser context if available
- * @sax: the SAX handler bloc (possibly NULL)
- * @user_data: The user data returned on SAX callbacks (possibly NULL)
- * @depth: Used for loop detection, use 0
- * @URL: the URL for the entity to load
- * @ID: the System ID for the entity to load
- * @list: the return value for the set of parsed nodes
- *
- * Private version of xmlParseExternalEntity()
- *
- * Returns 0 if the entity is well formed, -1 in case of args problem and
- * the parser error code otherwise
- */
-
-static xmlParserErrors
-xmlParseExternalEntityPrivate(xmlDocPtr doc, xmlParserCtxtPtr oldctxt,
- xmlSAXHandlerPtr sax,
- void *user_data, int depth, const xmlChar *URL,
- const xmlChar *ID, xmlNodePtr *list) {
- xmlParserCtxtPtr ctxt;
- xmlDocPtr newDoc;
- xmlNodePtr newRoot;
- xmlSAXHandlerPtr oldsax = NULL;
- xmlParserErrors ret = XML_ERR_OK;
- xmlChar start[4];
- xmlCharEncoding enc;
-
- if (((depth > 40) &&
- ((oldctxt == NULL) || (oldctxt->options & XML_PARSE_HUGE) == 0)) ||
- (depth > 1024)) {
- return(XML_ERR_ENTITY_LOOP);
- }
-
- if (list != NULL)
- *list = NULL;
- if ((URL == NULL) && (ID == NULL))
- return(XML_ERR_INTERNAL_ERROR);
- if (doc == NULL)
- return(XML_ERR_INTERNAL_ERROR);
-
-
- ctxt = xmlCreateEntityParserCtxtInternal(URL, ID, NULL, oldctxt);
- if (ctxt == NULL) return(XML_WAR_UNDECLARED_ENTITY);
- ctxt->userData = ctxt;
- if (oldctxt != NULL) {
- ctxt->_private = oldctxt->_private;
- ctxt->loadsubset = oldctxt->loadsubset;
- ctxt->validate = oldctxt->validate;
- ctxt->external = oldctxt->external;
- ctxt->record_info = oldctxt->record_info;
- ctxt->node_seq.maximum = oldctxt->node_seq.maximum;
- ctxt->node_seq.length = oldctxt->node_seq.length;
- ctxt->node_seq.buffer = oldctxt->node_seq.buffer;
- } else {
- /*
- * Doing validity checking on chunk without context
- * doesn't make sense
- */
- ctxt->_private = NULL;
- ctxt->validate = 0;
- ctxt->external = 2;
- ctxt->loadsubset = 0;
- }
- if (sax != NULL) {
- oldsax = ctxt->sax;
- ctxt->sax = sax;
- if (user_data != NULL)
- ctxt->userData = user_data;
- }
- xmlDetectSAX2(ctxt);
- newDoc = xmlNewDoc(BAD_CAST "1.0");
- if (newDoc == NULL) {
- ctxt->node_seq.maximum = 0;
- ctxt->node_seq.length = 0;
- ctxt->node_seq.buffer = NULL;
- xmlFreeParserCtxt(ctxt);
- return(XML_ERR_INTERNAL_ERROR);
- }
- newDoc->properties = XML_DOC_INTERNAL;
- newDoc->intSubset = doc->intSubset;
- newDoc->extSubset = doc->extSubset;
- newDoc->dict = doc->dict;
- xmlDictReference(newDoc->dict);
-
- if (doc->URL != NULL) {
- newDoc->URL = xmlStrdup(doc->URL);
- }
- newRoot = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL);
- if (newRoot == NULL) {
- if (sax != NULL)
- ctxt->sax = oldsax;
- ctxt->node_seq.maximum = 0;
- ctxt->node_seq.length = 0;
- ctxt->node_seq.buffer = NULL;
- xmlFreeParserCtxt(ctxt);
- newDoc->intSubset = NULL;
- newDoc->extSubset = NULL;
- xmlFreeDoc(newDoc);
- return(XML_ERR_INTERNAL_ERROR);
- }
- xmlAddChild((xmlNodePtr) newDoc, newRoot);
- nodePush(ctxt, newDoc->children);
- ctxt->myDoc = doc;
- newRoot->doc = doc;
-
- /*
- * Get the 4 first bytes and decode the charset
- * if enc != XML_CHAR_ENCODING_NONE
- * plug some encoding conversion routines.
- */
- GROW;
- if ((ctxt->input->end - ctxt->input->cur) >= 4) {
- start[0] = RAW;
- start[1] = NXT(1);
- start[2] = NXT(2);
- start[3] = NXT(3);
- enc = xmlDetectCharEncoding(start, 4);
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
- }
-
- /*
- * Parse a possible text declaration first
- */
- if ((CMP5(CUR_PTR, '<', '?', 'x', 'm', 'l')) && (IS_BLANK_CH(NXT(5)))) {
- xmlParseTextDecl(ctxt);
- }
-
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->depth = depth;
-
- xmlParseContent(ctxt);
-
- if ((RAW == '<') && (NXT(1) == '/')) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- } else if (RAW != 0) {
- xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
- }
- if (ctxt->node != newDoc->children) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- }
-
- if (!ctxt->wellFormed) {
- if (ctxt->errNo == 0)
- ret = XML_ERR_INTERNAL_ERROR;
- else
- ret = (xmlParserErrors)ctxt->errNo;
- } else {
- if (list != NULL) {
- xmlNodePtr cur;
-
- /*
- * Return the newly created nodeset after unlinking it from
- * they pseudo parent.
- */
- cur = newDoc->children->children;
- *list = cur;
- while (cur != NULL) {
- cur->parent = NULL;
- cur = cur->next;
- }
- newDoc->children->children = NULL;
- }
- ret = XML_ERR_OK;
- }
-
- /*
- * Record in the parent context the number of entities replacement
- * done when parsing that reference.
- */
- if (oldctxt != NULL)
- oldctxt->nbentities += ctxt->nbentities;
-
- /*
- * Also record the size of the entity parsed
- */
- if (ctxt->input != NULL && oldctxt != NULL) {
- oldctxt->sizeentities += ctxt->input->consumed;
- oldctxt->sizeentities += (ctxt->input->cur - ctxt->input->base);
- }
- /*
- * And record the last error if any
- */
- if (ctxt->lastError.code != XML_ERR_OK)
- xmlCopyError(&ctxt->lastError, &oldctxt->lastError);
-
- if (sax != NULL)
- ctxt->sax = oldsax;
- if (oldctxt != NULL) {
- oldctxt->node_seq.maximum = ctxt->node_seq.maximum;
- oldctxt->node_seq.length = ctxt->node_seq.length;
- oldctxt->node_seq.buffer = ctxt->node_seq.buffer;
- }
- ctxt->node_seq.maximum = 0;
- ctxt->node_seq.length = 0;
- ctxt->node_seq.buffer = NULL;
- xmlFreeParserCtxt(ctxt);
- newDoc->intSubset = NULL;
- newDoc->extSubset = NULL;
- xmlFreeDoc(newDoc);
-
- return(ret);
-}
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * xmlParseExternalEntity:
- * @doc: the document the chunk pertains to
- * @sax: the SAX handler bloc (possibly NULL)
- * @user_data: The user data returned on SAX callbacks (possibly NULL)
- * @depth: Used for loop detection, use 0
- * @URL: the URL for the entity to load
- * @ID: the System ID for the entity to load
- * @lst: the return value for the set of parsed nodes
- *
- * Parse an external general entity
- * An external general parsed entity is well-formed if it matches the
- * production labeled extParsedEnt.
- *
- * [78] extParsedEnt ::= TextDecl? content
- *
- * Returns 0 if the entity is well formed, -1 in case of args problem and
- * the parser error code otherwise
- */
-
-int
-xmlParseExternalEntity(xmlDocPtr doc, xmlSAXHandlerPtr sax, void *user_data,
- int depth, const xmlChar *URL, const xmlChar *ID, xmlNodePtr *lst) {
- return(xmlParseExternalEntityPrivate(doc, NULL, sax, user_data, depth, URL,
- ID, lst));
-}
-
-/**
- * xmlParseBalancedChunkMemory:
- * @doc: the document the chunk pertains to
- * @sax: the SAX handler bloc (possibly NULL)
- * @user_data: The user data returned on SAX callbacks (possibly NULL)
- * @depth: Used for loop detection, use 0
- * @string: the input string in UTF8 or ISO-Latin (zero terminated)
- * @lst: the return value for the set of parsed nodes
- *
- * Parse a well-balanced chunk of an XML document
- * called by the parser
- * The allowed sequence for the Well Balanced Chunk is the one defined by
- * the content production in the XML grammar:
- *
- * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
- *
- * Returns 0 if the chunk is well balanced, -1 in case of args problem and
- * the parser error code otherwise
- */
-
-int
-xmlParseBalancedChunkMemory(xmlDocPtr doc, xmlSAXHandlerPtr sax,
- void *user_data, int depth, const xmlChar *string, xmlNodePtr *lst) {
- return xmlParseBalancedChunkMemoryRecover( doc, sax, user_data,
- depth, string, lst, 0 );
-}
-#endif /* LIBXML_SAX1_ENABLED */
-
-/**
- * xmlParseBalancedChunkMemoryInternal:
- * @oldctxt: the existing parsing context
- * @string: the input string in UTF8 or ISO-Latin (zero terminated)
- * @user_data: the user data field for the parser context
- * @lst: the return value for the set of parsed nodes
- *
- *
- * Parse a well-balanced chunk of an XML document
- * called by the parser
- * The allowed sequence for the Well Balanced Chunk is the one defined by
- * the content production in the XML grammar:
- *
- * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
- *
- * Returns XML_ERR_OK if the chunk is well balanced, and the parser
- * error code otherwise
- *
- * In case recover is set to 1, the nodelist will not be empty even if
- * the parsed chunk is not well balanced.
- */
-static xmlParserErrors
-xmlParseBalancedChunkMemoryInternal(xmlParserCtxtPtr oldctxt,
- const xmlChar *string, void *user_data, xmlNodePtr *lst) {
- xmlParserCtxtPtr ctxt;
- xmlDocPtr newDoc = NULL;
- xmlNodePtr newRoot;
- xmlSAXHandlerPtr oldsax = NULL;
- xmlNodePtr content = NULL;
- xmlNodePtr last = NULL;
- int size;
- xmlParserErrors ret = XML_ERR_OK;
-#ifdef SAX2
- int i;
-#endif
-
- if (((oldctxt->depth > 40) && ((oldctxt->options & XML_PARSE_HUGE) == 0)) ||
- (oldctxt->depth > 1024)) {
- return(XML_ERR_ENTITY_LOOP);
- }
-
-
- if (lst != NULL)
- *lst = NULL;
- if (string == NULL)
- return(XML_ERR_INTERNAL_ERROR);
-
- size = xmlStrlen(string);
-
- ctxt = xmlCreateMemoryParserCtxt((char *) string, size);
- if (ctxt == NULL) return(XML_WAR_UNDECLARED_ENTITY);
- if (user_data != NULL)
- ctxt->userData = user_data;
- else
- ctxt->userData = ctxt;
- if (ctxt->dict != NULL) xmlDictFree(ctxt->dict);
- ctxt->dict = oldctxt->dict;
- ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
- ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
- ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
-
-#ifdef SAX2
- /* propagate namespaces down the entity */
- for (i = 0;i < oldctxt->nsNr;i += 2) {
- nsPush(ctxt, oldctxt->nsTab[i], oldctxt->nsTab[i+1]);
- }
-#endif
-
- oldsax = ctxt->sax;
- ctxt->sax = oldctxt->sax;
- xmlDetectSAX2(ctxt);
- ctxt->replaceEntities = oldctxt->replaceEntities;
- ctxt->options = oldctxt->options;
-
- ctxt->_private = oldctxt->_private;
- if (oldctxt->myDoc == NULL) {
- newDoc = xmlNewDoc(BAD_CAST "1.0");
- if (newDoc == NULL) {
- ctxt->sax = oldsax;
- ctxt->dict = NULL;
- xmlFreeParserCtxt(ctxt);
- return(XML_ERR_INTERNAL_ERROR);
- }
- newDoc->properties = XML_DOC_INTERNAL;
- newDoc->dict = ctxt->dict;
- xmlDictReference(newDoc->dict);
- ctxt->myDoc = newDoc;
- } else {
- ctxt->myDoc = oldctxt->myDoc;
- content = ctxt->myDoc->children;
- last = ctxt->myDoc->last;
- }
- newRoot = xmlNewDocNode(ctxt->myDoc, NULL, BAD_CAST "pseudoroot", NULL);
- if (newRoot == NULL) {
- ctxt->sax = oldsax;
- ctxt->dict = NULL;
- xmlFreeParserCtxt(ctxt);
- if (newDoc != NULL) {
- xmlFreeDoc(newDoc);
- }
- return(XML_ERR_INTERNAL_ERROR);
- }
- ctxt->myDoc->children = NULL;
- ctxt->myDoc->last = NULL;
- xmlAddChild((xmlNodePtr) ctxt->myDoc, newRoot);
- nodePush(ctxt, ctxt->myDoc->children);
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->depth = oldctxt->depth + 1;
-
- ctxt->validate = 0;
- ctxt->loadsubset = oldctxt->loadsubset;
- if ((oldctxt->validate) || (oldctxt->replaceEntities != 0)) {
- /*
- * ID/IDREF registration will be done in xmlValidateElement below
- */
- ctxt->loadsubset |= XML_SKIP_IDS;
- }
- ctxt->dictNames = oldctxt->dictNames;
- ctxt->attsDefault = oldctxt->attsDefault;
- ctxt->attsSpecial = oldctxt->attsSpecial;
-
- xmlParseContent(ctxt);
- if ((RAW == '<') && (NXT(1) == '/')) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- } else if (RAW != 0) {
- xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
- }
- if (ctxt->node != ctxt->myDoc->children) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- }
-
- if (!ctxt->wellFormed) {
- if (ctxt->errNo == 0)
- ret = XML_ERR_INTERNAL_ERROR;
- else
- ret = (xmlParserErrors)ctxt->errNo;
- } else {
- ret = XML_ERR_OK;
- }
-
- if ((lst != NULL) && (ret == XML_ERR_OK)) {
- xmlNodePtr cur;
-
- /*
- * Return the newly created nodeset after unlinking it from
- * they pseudo parent.
- */
- cur = ctxt->myDoc->children->children;
- *lst = cur;
- while (cur != NULL) {
-#ifdef LIBXML_VALID_ENABLED
- if ((oldctxt->validate) && (oldctxt->wellFormed) &&
- (oldctxt->myDoc) && (oldctxt->myDoc->intSubset) &&
- (cur->type == XML_ELEMENT_NODE)) {
- oldctxt->valid &= xmlValidateElement(&oldctxt->vctxt,
- oldctxt->myDoc, cur);
- }
-#endif /* LIBXML_VALID_ENABLED */
- cur->parent = NULL;
- cur = cur->next;
- }
- ctxt->myDoc->children->children = NULL;
- }
- if (ctxt->myDoc != NULL) {
- xmlFreeNode(ctxt->myDoc->children);
- ctxt->myDoc->children = content;
- ctxt->myDoc->last = last;
- }
-
- /*
- * Record in the parent context the number of entities replacement
- * done when parsing that reference.
- */
- if (oldctxt != NULL)
- oldctxt->nbentities += ctxt->nbentities;
-
- /*
- * Also record the last error if any
- */
- if (ctxt->lastError.code != XML_ERR_OK)
- xmlCopyError(&ctxt->lastError, &oldctxt->lastError);
-
- ctxt->sax = oldsax;
- ctxt->dict = NULL;
- ctxt->attsDefault = NULL;
- ctxt->attsSpecial = NULL;
- xmlFreeParserCtxt(ctxt);
- if (newDoc != NULL) {
- xmlFreeDoc(newDoc);
- }
-
- return(ret);
-}
-
-/**
- * xmlParseInNodeContext:
- * @node: the context node
- * @data: the input string
- * @datalen: the input string length in bytes
- * @options: a combination of xmlParserOption
- * @lst: the return value for the set of parsed nodes
- *
- * Parse a well-balanced chunk of an XML document
- * within the context (DTD, namespaces, etc ...) of the given node.
- *
- * The allowed sequence for the data is a Well Balanced Chunk defined by
- * the content production in the XML grammar:
- *
- * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
- *
- * Returns XML_ERR_OK if the chunk is well balanced, and the parser
- * error code otherwise
- */
-xmlParserErrors
-xmlParseInNodeContext(xmlNodePtr node, const char *data, int datalen,
- int options, xmlNodePtr *lst) {
-#ifdef SAX2
- xmlParserCtxtPtr ctxt;
- xmlDocPtr doc = NULL;
- xmlNodePtr fake, cur;
- int nsnr = 0;
-
- xmlParserErrors ret = XML_ERR_OK;
-
- /*
- * check all input parameters, grab the document
- */
- if ((lst == NULL) || (node == NULL) || (data == NULL) || (datalen < 0))
- return(XML_ERR_INTERNAL_ERROR);
- switch (node->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- break;
- default:
- return(XML_ERR_INTERNAL_ERROR);
-
- }
- while ((node != NULL) && (node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_DOCUMENT_NODE) &&
- (node->type != XML_HTML_DOCUMENT_NODE))
- node = node->parent;
- if (node == NULL)
- return(XML_ERR_INTERNAL_ERROR);
- if (node->type == XML_ELEMENT_NODE)
- doc = node->doc;
- else
- doc = (xmlDocPtr) node;
- if (doc == NULL)
- return(XML_ERR_INTERNAL_ERROR);
-
- /*
- * allocate a context and set-up everything not related to the
- * node position in the tree
- */
- if (doc->type == XML_DOCUMENT_NODE)
- ctxt = xmlCreateMemoryParserCtxt((char *) data, datalen);
-#ifdef LIBXML_HTML_ENABLED
- else if (doc->type == XML_HTML_DOCUMENT_NODE) {
- ctxt = htmlCreateMemoryParserCtxt((char *) data, datalen);
- /*
- * When parsing in context, it makes no sense to add implied
- * elements like html/body/etc...
- */
- options |= HTML_PARSE_NOIMPLIED;
- }
-#endif
- else
- return(XML_ERR_INTERNAL_ERROR);
-
- if (ctxt == NULL)
- return(XML_ERR_NO_MEMORY);
-
- /*
- * Use input doc's dict if present, else assure XML_PARSE_NODICT is set.
- * We need a dictionary for xmlDetectSAX2, so if there's no doc dict
- * we must wait until the last moment to free the original one.
- */
- if (doc->dict != NULL) {
- if (ctxt->dict != NULL)
- xmlDictFree(ctxt->dict);
- ctxt->dict = doc->dict;
- } else
- options |= XML_PARSE_NODICT;
-
- if (doc->encoding != NULL) {
- xmlCharEncodingHandlerPtr hdlr;
-
- if (ctxt->encoding != NULL)
- xmlFree((xmlChar *) ctxt->encoding);
- ctxt->encoding = xmlStrdup((const xmlChar *) doc->encoding);
-
- hdlr = xmlFindCharEncodingHandler((const char *) doc->encoding);
- if (hdlr != NULL) {
- xmlSwitchToEncoding(ctxt, hdlr);
- } else {
- return(XML_ERR_UNSUPPORTED_ENCODING);
- }
- }
-
- xmlCtxtUseOptionsInternal(ctxt, options, NULL);
- xmlDetectSAX2(ctxt);
- ctxt->myDoc = doc;
- /* parsing in context, i.e. as within existing content */
- ctxt->instate = XML_PARSER_CONTENT;
-
- fake = xmlNewComment(NULL);
- if (fake == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(XML_ERR_NO_MEMORY);
- }
- xmlAddChild(node, fake);
-
- if (node->type == XML_ELEMENT_NODE) {
- nodePush(ctxt, node);
- /*
- * initialize the SAX2 namespaces stack
- */
- cur = node;
- while ((cur != NULL) && (cur->type == XML_ELEMENT_NODE)) {
- xmlNsPtr ns = cur->nsDef;
- const xmlChar *iprefix, *ihref;
-
- while (ns != NULL) {
- if (ctxt->dict) {
- iprefix = xmlDictLookup(ctxt->dict, ns->prefix, -1);
- ihref = xmlDictLookup(ctxt->dict, ns->href, -1);
- } else {
- iprefix = ns->prefix;
- ihref = ns->href;
- }
-
- if (xmlGetNamespace(ctxt, iprefix) == NULL) {
- nsPush(ctxt, iprefix, ihref);
- nsnr++;
- }
- ns = ns->next;
- }
- cur = cur->parent;
- }
- }
-
- if ((ctxt->validate) || (ctxt->replaceEntities != 0)) {
- /*
- * ID/IDREF registration will be done in xmlValidateElement below
- */
- ctxt->loadsubset |= XML_SKIP_IDS;
- }
-
-#ifdef LIBXML_HTML_ENABLED
- if (doc->type == XML_HTML_DOCUMENT_NODE)
- __htmlParseContent(ctxt);
- else
-#endif
- xmlParseContent(ctxt);
-
- nsPop(ctxt, nsnr);
- if ((RAW == '<') && (NXT(1) == '/')) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- } else if (RAW != 0) {
- xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
- }
- if ((ctxt->node != NULL) && (ctxt->node != node)) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- ctxt->wellFormed = 0;
- }
-
- if (!ctxt->wellFormed) {
- if (ctxt->errNo == 0)
- ret = XML_ERR_INTERNAL_ERROR;
- else
- ret = (xmlParserErrors)ctxt->errNo;
- } else {
- ret = XML_ERR_OK;
- }
-
- /*
- * Return the newly created nodeset after unlinking it from
- * the pseudo sibling.
- */
-
- cur = fake->next;
- fake->next = NULL;
- node->last = fake;
-
- if (cur != NULL) {
- cur->prev = NULL;
- }
-
- *lst = cur;
-
- while (cur != NULL) {
- cur->parent = NULL;
- cur = cur->next;
- }
-
- xmlUnlinkNode(fake);
- xmlFreeNode(fake);
-
-
- if (ret != XML_ERR_OK) {
- xmlFreeNodeList(*lst);
- *lst = NULL;
- }
-
- if (doc->dict != NULL)
- ctxt->dict = NULL;
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-#else /* !SAX2 */
- return(XML_ERR_INTERNAL_ERROR);
-#endif
-}
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * xmlParseBalancedChunkMemoryRecover:
- * @doc: the document the chunk pertains to
- * @sax: the SAX handler bloc (possibly NULL)
- * @user_data: The user data returned on SAX callbacks (possibly NULL)
- * @depth: Used for loop detection, use 0
- * @string: the input string in UTF8 or ISO-Latin (zero terminated)
- * @lst: the return value for the set of parsed nodes
- * @recover: return nodes even if the data is broken (use 0)
- *
- *
- * Parse a well-balanced chunk of an XML document
- * called by the parser
- * The allowed sequence for the Well Balanced Chunk is the one defined by
- * the content production in the XML grammar:
- *
- * [43] content ::= (element | CharData | Reference | CDSect | PI | Comment)*
- *
- * Returns 0 if the chunk is well balanced, -1 in case of args problem and
- * the parser error code otherwise
- *
- * In case recover is set to 1, the nodelist will not be empty even if
- * the parsed chunk is not well balanced, assuming the parsing succeeded to
- * some extent.
- */
-int
-xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, xmlSAXHandlerPtr sax,
- void *user_data, int depth, const xmlChar *string, xmlNodePtr *lst,
- int recover) {
- xmlParserCtxtPtr ctxt;
- xmlDocPtr newDoc;
- xmlSAXHandlerPtr oldsax = NULL;
- xmlNodePtr content, newRoot;
- int size;
- int ret = 0;
-
- if (depth > 40) {
- return(XML_ERR_ENTITY_LOOP);
- }
-
-
- if (lst != NULL)
- *lst = NULL;
- if (string == NULL)
- return(-1);
-
- size = xmlStrlen(string);
-
- ctxt = xmlCreateMemoryParserCtxt((char *) string, size);
- if (ctxt == NULL) return(-1);
- ctxt->userData = ctxt;
- if (sax != NULL) {
- oldsax = ctxt->sax;
- ctxt->sax = sax;
- if (user_data != NULL)
- ctxt->userData = user_data;
- }
- newDoc = xmlNewDoc(BAD_CAST "1.0");
- if (newDoc == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(-1);
- }
- newDoc->properties = XML_DOC_INTERNAL;
- if ((doc != NULL) && (doc->dict != NULL)) {
- xmlDictFree(ctxt->dict);
- ctxt->dict = doc->dict;
- xmlDictReference(ctxt->dict);
- ctxt->str_xml = xmlDictLookup(ctxt->dict, BAD_CAST "xml", 3);
- ctxt->str_xmlns = xmlDictLookup(ctxt->dict, BAD_CAST "xmlns", 5);
- ctxt->str_xml_ns = xmlDictLookup(ctxt->dict, XML_XML_NAMESPACE, 36);
- ctxt->dictNames = 1;
- } else {
- xmlCtxtUseOptionsInternal(ctxt, XML_PARSE_NODICT, NULL);
- }
- if (doc != NULL) {
- newDoc->intSubset = doc->intSubset;
- newDoc->extSubset = doc->extSubset;
- }
- newRoot = xmlNewDocNode(newDoc, NULL, BAD_CAST "pseudoroot", NULL);
- if (newRoot == NULL) {
- if (sax != NULL)
- ctxt->sax = oldsax;
- xmlFreeParserCtxt(ctxt);
- newDoc->intSubset = NULL;
- newDoc->extSubset = NULL;
- xmlFreeDoc(newDoc);
- return(-1);
- }
- xmlAddChild((xmlNodePtr) newDoc, newRoot);
- nodePush(ctxt, newRoot);
- if (doc == NULL) {
- ctxt->myDoc = newDoc;
- } else {
- ctxt->myDoc = newDoc;
- newDoc->children->doc = doc;
- /* Ensure that doc has XML spec namespace */
- xmlSearchNsByHref(doc, (xmlNodePtr)doc, XML_XML_NAMESPACE);
- newDoc->oldNs = doc->oldNs;
- }
- ctxt->instate = XML_PARSER_CONTENT;
- ctxt->depth = depth;
-
- /*
- * Doing validity checking on chunk doesn't make sense
- */
- ctxt->validate = 0;
- ctxt->loadsubset = 0;
- xmlDetectSAX2(ctxt);
-
- if ( doc != NULL ){
- content = doc->children;
- doc->children = NULL;
- xmlParseContent(ctxt);
- doc->children = content;
- }
- else {
- xmlParseContent(ctxt);
- }
- if ((RAW == '<') && (NXT(1) == '/')) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- } else if (RAW != 0) {
- xmlFatalErr(ctxt, XML_ERR_EXTRA_CONTENT, NULL);
- }
- if (ctxt->node != newDoc->children) {
- xmlFatalErr(ctxt, XML_ERR_NOT_WELL_BALANCED, NULL);
- }
-
- if (!ctxt->wellFormed) {
- if (ctxt->errNo == 0)
- ret = 1;
- else
- ret = ctxt->errNo;
- } else {
- ret = 0;
- }
-
- if ((lst != NULL) && ((ret == 0) || (recover == 1))) {
- xmlNodePtr cur;
-
- /*
- * Return the newly created nodeset after unlinking it from
- * they pseudo parent.
- */
- cur = newDoc->children->children;
- *lst = cur;
- while (cur != NULL) {
- xmlSetTreeDoc(cur, doc);
- cur->parent = NULL;
- cur = cur->next;
- }
- newDoc->children->children = NULL;
- }
-
- if (sax != NULL)
- ctxt->sax = oldsax;
- xmlFreeParserCtxt(ctxt);
- newDoc->intSubset = NULL;
- newDoc->extSubset = NULL;
- newDoc->oldNs = NULL;
- xmlFreeDoc(newDoc);
-
- return(ret);
-}
-
-/**
- * xmlSAXParseEntity:
- * @sax: the SAX handler block
- * @filename: the filename
- *
- * parse an XML external entity out of context and build a tree.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * [78] extParsedEnt ::= TextDecl? content
- *
- * This correspond to a "Well Balanced" chunk
- *
- * Returns the resulting document tree
- */
-
-xmlDocPtr
-xmlSAXParseEntity(xmlSAXHandlerPtr sax, const char *filename) {
- xmlDocPtr ret;
- xmlParserCtxtPtr ctxt;
-
- ctxt = xmlCreateFileParserCtxt(filename);
- if (ctxt == NULL) {
- return(NULL);
- }
- if (sax != NULL) {
- if (ctxt->sax != NULL)
- xmlFree(ctxt->sax);
- ctxt->sax = sax;
- ctxt->userData = NULL;
- }
-
- xmlParseExtParsedEnt(ctxt);
-
- if (ctxt->wellFormed)
- ret = ctxt->myDoc;
- else {
- ret = NULL;
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- if (sax != NULL)
- ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-/**
- * xmlParseEntity:
- * @filename: the filename
- *
- * parse an XML external entity out of context and build a tree.
- *
- * [78] extParsedEnt ::= TextDecl? content
- *
- * This correspond to a "Well Balanced" chunk
- *
- * Returns the resulting document tree
- */
-
-xmlDocPtr
-xmlParseEntity(const char *filename) {
- return(xmlSAXParseEntity(NULL, filename));
-}
-#endif /* LIBXML_SAX1_ENABLED */
-
-/**
- * xmlCreateEntityParserCtxtInternal:
- * @URL: the entity URL
- * @ID: the entity PUBLIC ID
- * @base: a possible base for the target URI
- * @pctx: parser context used to set options on new context
- *
- * Create a parser context for an external entity
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time.
- *
- * Returns the new parser context or NULL
- */
-static xmlParserCtxtPtr
-xmlCreateEntityParserCtxtInternal(const xmlChar *URL, const xmlChar *ID,
- const xmlChar *base, xmlParserCtxtPtr pctx) {
- xmlParserCtxtPtr ctxt;
- xmlParserInputPtr inputStream;
- char *directory = NULL;
- xmlChar *uri;
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- return(NULL);
- }
-
- if (pctx != NULL) {
- ctxt->options = pctx->options;
- ctxt->_private = pctx->_private;
- }
-
- uri = xmlBuildURI(URL, base);
-
- if (uri == NULL) {
- inputStream = xmlLoadExternalEntity((char *)URL, (char *)ID, ctxt);
- if (inputStream == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- inputPush(ctxt, inputStream);
-
- if ((ctxt->directory == NULL) && (directory == NULL))
- directory = xmlParserGetDirectory((char *)URL);
- if ((ctxt->directory == NULL) && (directory != NULL))
- ctxt->directory = directory;
- } else {
- inputStream = xmlLoadExternalEntity((char *)uri, (char *)ID, ctxt);
- if (inputStream == NULL) {
- xmlFree(uri);
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- inputPush(ctxt, inputStream);
-
- if ((ctxt->directory == NULL) && (directory == NULL))
- directory = xmlParserGetDirectory((char *)uri);
- if ((ctxt->directory == NULL) && (directory != NULL))
- ctxt->directory = directory;
- xmlFree(uri);
- }
- return(ctxt);
-}
-
-/**
- * xmlCreateEntityParserCtxt:
- * @URL: the entity URL
- * @ID: the entity PUBLIC ID
- * @base: a possible base for the target URI
- *
- * Create a parser context for an external entity
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time.
- *
- * Returns the new parser context or NULL
- */
-xmlParserCtxtPtr
-xmlCreateEntityParserCtxt(const xmlChar *URL, const xmlChar *ID,
- const xmlChar *base) {
- return xmlCreateEntityParserCtxtInternal(URL, ID, base, NULL);
-
-}
-
-/************************************************************************
- * *
- * Front ends when parsing from a file *
- * *
- ************************************************************************/
-
-/**
- * xmlCreateURLParserCtxt:
- * @filename: the filename or URL
- * @options: a combination of xmlParserOption
- *
- * Create a parser context for a file or URL content.
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time and for file accesses
- *
- * Returns the new parser context or NULL
- */
-xmlParserCtxtPtr
-xmlCreateURLParserCtxt(const char *filename, int options)
-{
- xmlParserCtxtPtr ctxt;
- xmlParserInputPtr inputStream;
- char *directory = NULL;
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlErrMemory(NULL, "cannot allocate parser context");
- return(NULL);
- }
-
- if (options)
- xmlCtxtUseOptionsInternal(ctxt, options, NULL);
- ctxt->linenumbers = 1;
-
- inputStream = xmlLoadExternalEntity(filename, NULL, ctxt);
- if (inputStream == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- inputPush(ctxt, inputStream);
- if ((ctxt->directory == NULL) && (directory == NULL))
- directory = xmlParserGetDirectory(filename);
- if ((ctxt->directory == NULL) && (directory != NULL))
- ctxt->directory = directory;
-
- return(ctxt);
-}
-
-/**
- * xmlCreateFileParserCtxt:
- * @filename: the filename
- *
- * Create a parser context for a file content.
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time.
- *
- * Returns the new parser context or NULL
- */
-xmlParserCtxtPtr
-xmlCreateFileParserCtxt(const char *filename)
-{
- return(xmlCreateURLParserCtxt(filename, 0));
-}
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * xmlSAXParseFileWithData:
- * @sax: the SAX handler block
- * @filename: the filename
- * @recovery: work in recovery mode, i.e. tries to read no Well Formed
- * documents
- * @data: the userdata
- *
- * parse an XML file and build a tree. Automatic support for ZLIB/Compress
- * compressed document is provided by default if found at compile-time.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * User data (void *) is stored within the parser context in the
- * context's _private member, so it is available nearly everywhere in libxml
- *
- * Returns the resulting document tree
- */
-
-xmlDocPtr
-xmlSAXParseFileWithData(xmlSAXHandlerPtr sax, const char *filename,
- int recovery, void *data) {
- xmlDocPtr ret;
- xmlParserCtxtPtr ctxt;
-
- xmlInitParser();
-
- ctxt = xmlCreateFileParserCtxt(filename);
- if (ctxt == NULL) {
- return(NULL);
- }
- if (sax != NULL) {
- if (ctxt->sax != NULL)
- xmlFree(ctxt->sax);
- ctxt->sax = sax;
- }
- xmlDetectSAX2(ctxt);
- if (data!=NULL) {
- ctxt->_private = data;
- }
-
- if (ctxt->directory == NULL)
- ctxt->directory = xmlParserGetDirectory(filename);
-
- ctxt->recovery = recovery;
-
- xmlParseDocument(ctxt);
-
- if ((ctxt->wellFormed) || recovery) {
- ret = ctxt->myDoc;
- if (ret != NULL) {
- if (ctxt->input->buf->compressed > 0)
- ret->compression = 9;
- else
- ret->compression = ctxt->input->buf->compressed;
- }
- }
- else {
- ret = NULL;
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- if (sax != NULL)
- ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-/**
- * xmlSAXParseFile:
- * @sax: the SAX handler block
- * @filename: the filename
- * @recovery: work in recovery mode, i.e. tries to read no Well Formed
- * documents
- *
- * parse an XML file and build a tree. Automatic support for ZLIB/Compress
- * compressed document is provided by default if found at compile-time.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * Returns the resulting document tree
- */
-
-xmlDocPtr
-xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename,
- int recovery) {
- return(xmlSAXParseFileWithData(sax,filename,recovery,NULL));
-}
-
-/**
- * xmlRecoverDoc:
- * @cur: a pointer to an array of xmlChar
- *
- * parse an XML in-memory document and build a tree.
- * In the case the document is not Well Formed, a attempt to build a
- * tree is tried anyway
- *
- * Returns the resulting document tree or NULL in case of failure
- */
-
-xmlDocPtr
-xmlRecoverDoc(const xmlChar *cur) {
- return(xmlSAXParseDoc(NULL, cur, 1));
-}
-
-/**
- * xmlParseFile:
- * @filename: the filename
- *
- * parse an XML file and build a tree. Automatic support for ZLIB/Compress
- * compressed document is provided by default if found at compile-time.
- *
- * Returns the resulting document tree if the file was wellformed,
- * NULL otherwise.
- */
-
-xmlDocPtr
-xmlParseFile(const char *filename) {
- return(xmlSAXParseFile(NULL, filename, 0));
-}
-
-/**
- * xmlRecoverFile:
- * @filename: the filename
- *
- * parse an XML file and build a tree. Automatic support for ZLIB/Compress
- * compressed document is provided by default if found at compile-time.
- * In the case the document is not Well Formed, it attempts to build
- * a tree anyway
- *
- * Returns the resulting document tree or NULL in case of failure
- */
-
-xmlDocPtr
-xmlRecoverFile(const char *filename) {
- return(xmlSAXParseFile(NULL, filename, 1));
-}
-
-
-/**
- * xmlSetupParserForBuffer:
- * @ctxt: an XML parser context
- * @buffer: a xmlChar * buffer
- * @filename: a file name
- *
- * Setup the parser context to parse a new buffer; Clears any prior
- * contents from the parser context. The buffer parameter must not be
- * NULL, but the filename parameter can be
- */
-void
-xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const xmlChar* buffer,
- const char* filename)
-{
- xmlParserInputPtr input;
-
- if ((ctxt == NULL) || (buffer == NULL))
- return;
-
- input = xmlNewInputStream(ctxt);
- if (input == NULL) {
- xmlErrMemory(NULL, "parsing new buffer: out of memory\n");
- xmlClearParserCtxt(ctxt);
- return;
- }
-
- xmlClearParserCtxt(ctxt);
- if (filename != NULL)
- input->filename = (char *) xmlCanonicPath((const xmlChar *)filename);
- input->base = buffer;
- input->cur = buffer;
- input->end = &buffer[xmlStrlen(buffer)];
- inputPush(ctxt, input);
-}
-
-/**
- * xmlSAXUserParseFile:
- * @sax: a SAX handler
- * @user_data: The user data returned on SAX callbacks
- * @filename: a file name
- *
- * parse an XML file and call the given SAX handler routines.
- * Automatic support for ZLIB/Compress compressed document is provided
- *
- * Returns 0 in case of success or a error number otherwise
- */
-int
-xmlSAXUserParseFile(xmlSAXHandlerPtr sax, void *user_data,
- const char *filename) {
- int ret = 0;
- xmlParserCtxtPtr ctxt;
-
- ctxt = xmlCreateFileParserCtxt(filename);
- if (ctxt == NULL) return -1;
- if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
- xmlFree(ctxt->sax);
- ctxt->sax = sax;
- xmlDetectSAX2(ctxt);
-
- if (user_data != NULL)
- ctxt->userData = user_data;
-
- xmlParseDocument(ctxt);
-
- if (ctxt->wellFormed)
- ret = 0;
- else {
- if (ctxt->errNo != 0)
- ret = ctxt->errNo;
- else
- ret = -1;
- }
- if (sax != NULL)
- ctxt->sax = NULL;
- if (ctxt->myDoc != NULL) {
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- xmlFreeParserCtxt(ctxt);
-
- return ret;
-}
-#endif /* LIBXML_SAX1_ENABLED */
-
-/************************************************************************
- * *
- * Front ends when parsing from memory *
- * *
- ************************************************************************/
-
-/**
- * xmlCreateMemoryParserCtxt:
- * @buffer: a pointer to a char array
- * @size: the size of the array
- *
- * Create a parser context for an XML in-memory document.
- *
- * Returns the new parser context or NULL
- */
-xmlParserCtxtPtr
-xmlCreateMemoryParserCtxt(const char *buffer, int size) {
- xmlParserCtxtPtr ctxt;
- xmlParserInputPtr input;
- xmlParserInputBufferPtr buf;
-
- if (buffer == NULL)
- return(NULL);
- if (size <= 0)
- return(NULL);
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL)
- return(NULL);
-
- /* TODO: xmlParserInputBufferCreateStatic, requires some serious changes */
- buf = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE);
- if (buf == NULL) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- input = xmlNewInputStream(ctxt);
- if (input == NULL) {
- xmlFreeParserInputBuffer(buf);
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
-
- input->filename = NULL;
- input->buf = buf;
- xmlBufResetInput(input->buf->buffer, input);
-
- inputPush(ctxt, input);
- return(ctxt);
-}
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * xmlSAXParseMemoryWithData:
- * @sax: the SAX handler block
- * @buffer: an pointer to a char array
- * @size: the size of the array
- * @recovery: work in recovery mode, i.e. tries to read no Well Formed
- * documents
- * @data: the userdata
- *
- * parse an XML in-memory block and use the given SAX function block
- * to handle the parsing callback. If sax is NULL, fallback to the default
- * DOM tree building routines.
- *
- * User data (void *) is stored within the parser context in the
- * context's _private member, so it is available nearly everywhere in libxml
- *
- * Returns the resulting document tree
- */
-
-xmlDocPtr
-xmlSAXParseMemoryWithData(xmlSAXHandlerPtr sax, const char *buffer,
- int size, int recovery, void *data) {
- xmlDocPtr ret;
- xmlParserCtxtPtr ctxt;
-
- xmlInitParser();
-
- ctxt = xmlCreateMemoryParserCtxt(buffer, size);
- if (ctxt == NULL) return(NULL);
- if (sax != NULL) {
- if (ctxt->sax != NULL)
- xmlFree(ctxt->sax);
- ctxt->sax = sax;
- }
- xmlDetectSAX2(ctxt);
- if (data!=NULL) {
- ctxt->_private=data;
- }
-
- ctxt->recovery = recovery;
-
- xmlParseDocument(ctxt);
-
- if ((ctxt->wellFormed) || recovery) ret = ctxt->myDoc;
- else {
- ret = NULL;
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- if (sax != NULL)
- ctxt->sax = NULL;
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-/**
- * xmlSAXParseMemory:
- * @sax: the SAX handler block
- * @buffer: an pointer to a char array
- * @size: the size of the array
- * @recovery: work in recovery mode, i.e. tries to read not Well Formed
- * documents
- *
- * parse an XML in-memory block and use the given SAX function block
- * to handle the parsing callback. If sax is NULL, fallback to the default
- * DOM tree building routines.
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlSAXParseMemory(xmlSAXHandlerPtr sax, const char *buffer,
- int size, int recovery) {
- return xmlSAXParseMemoryWithData(sax, buffer, size, recovery, NULL);
-}
-
-/**
- * xmlParseMemory:
- * @buffer: an pointer to a char array
- * @size: the size of the array
- *
- * parse an XML in-memory block and build a tree.
- *
- * Returns the resulting document tree
- */
-
-xmlDocPtr xmlParseMemory(const char *buffer, int size) {
- return(xmlSAXParseMemory(NULL, buffer, size, 0));
-}
-
-/**
- * xmlRecoverMemory:
- * @buffer: an pointer to a char array
- * @size: the size of the array
- *
- * parse an XML in-memory block and build a tree.
- * In the case the document is not Well Formed, an attempt to
- * build a tree is tried anyway
- *
- * Returns the resulting document tree or NULL in case of error
- */
-
-xmlDocPtr xmlRecoverMemory(const char *buffer, int size) {
- return(xmlSAXParseMemory(NULL, buffer, size, 1));
-}
-
-/**
- * xmlSAXUserParseMemory:
- * @sax: a SAX handler
- * @user_data: The user data returned on SAX callbacks
- * @buffer: an in-memory XML document input
- * @size: the length of the XML document in bytes
- *
- * A better SAX parsing routine.
- * parse an XML in-memory buffer and call the given SAX handler routines.
- *
- * Returns 0 in case of success or a error number otherwise
- */
-int xmlSAXUserParseMemory(xmlSAXHandlerPtr sax, void *user_data,
- const char *buffer, int size) {
- int ret = 0;
- xmlParserCtxtPtr ctxt;
-
- xmlInitParser();
-
- ctxt = xmlCreateMemoryParserCtxt(buffer, size);
- if (ctxt == NULL) return -1;
- if (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler)
- xmlFree(ctxt->sax);
- ctxt->sax = sax;
- xmlDetectSAX2(ctxt);
-
- if (user_data != NULL)
- ctxt->userData = user_data;
-
- xmlParseDocument(ctxt);
-
- if (ctxt->wellFormed)
- ret = 0;
- else {
- if (ctxt->errNo != 0)
- ret = ctxt->errNo;
- else
- ret = -1;
- }
- if (sax != NULL)
- ctxt->sax = NULL;
- if (ctxt->myDoc != NULL) {
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- xmlFreeParserCtxt(ctxt);
-
- return ret;
-}
-#endif /* LIBXML_SAX1_ENABLED */
-
-/**
- * xmlCreateDocParserCtxt:
- * @cur: a pointer to an array of xmlChar
- *
- * Creates a parser context for an XML in-memory document.
- *
- * Returns the new parser context or NULL
- */
-xmlParserCtxtPtr
-xmlCreateDocParserCtxt(const xmlChar *cur) {
- int len;
-
- if (cur == NULL)
- return(NULL);
- len = xmlStrlen(cur);
- return(xmlCreateMemoryParserCtxt((const char *)cur, len));
-}
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * xmlSAXParseDoc:
- * @sax: the SAX handler block
- * @cur: a pointer to an array of xmlChar
- * @recovery: work in recovery mode, i.e. tries to read no Well Formed
- * documents
- *
- * parse an XML in-memory document and build a tree.
- * It use the given SAX function block to handle the parsing callback.
- * If sax is NULL, fallback to the default DOM tree building routines.
- *
- * Returns the resulting document tree
- */
-
-xmlDocPtr
-xmlSAXParseDoc(xmlSAXHandlerPtr sax, const xmlChar *cur, int recovery) {
- xmlDocPtr ret;
- xmlParserCtxtPtr ctxt;
- xmlSAXHandlerPtr oldsax = NULL;
-
- if (cur == NULL) return(NULL);
-
-
- ctxt = xmlCreateDocParserCtxt(cur);
- if (ctxt == NULL) return(NULL);
- if (sax != NULL) {
- oldsax = ctxt->sax;
- ctxt->sax = sax;
- ctxt->userData = NULL;
- }
- xmlDetectSAX2(ctxt);
-
- xmlParseDocument(ctxt);
- if ((ctxt->wellFormed) || recovery) ret = ctxt->myDoc;
- else {
- ret = NULL;
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- if (sax != NULL)
- ctxt->sax = oldsax;
- xmlFreeParserCtxt(ctxt);
-
- return(ret);
-}
-
-/**
- * xmlParseDoc:
- * @cur: a pointer to an array of xmlChar
- *
- * parse an XML in-memory document and build a tree.
- *
- * Returns the resulting document tree
- */
-
-xmlDocPtr
-xmlParseDoc(const xmlChar *cur) {
- return(xmlSAXParseDoc(NULL, cur, 0));
-}
-#endif /* LIBXML_SAX1_ENABLED */
-
-#ifdef LIBXML_LEGACY_ENABLED
-/************************************************************************
- * *
- * Specific function to keep track of entities references *
- * and used by the XSLT debugger *
- * *
- ************************************************************************/
-
-static xmlEntityReferenceFunc xmlEntityRefFunc = NULL;
-
-/**
- * xmlAddEntityReference:
- * @ent : A valid entity
- * @firstNode : A valid first node for children of entity
- * @lastNode : A valid last node of children entity
- *
- * Notify of a reference to an entity of type XML_EXTERNAL_GENERAL_PARSED_ENTITY
- */
-static void
-xmlAddEntityReference(xmlEntityPtr ent, xmlNodePtr firstNode,
- xmlNodePtr lastNode)
-{
- if (xmlEntityRefFunc != NULL) {
- (*xmlEntityRefFunc) (ent, firstNode, lastNode);
- }
-}
-
-
-/**
- * xmlSetEntityReferenceFunc:
- * @func: A valid function
- *
- * Set the function to call call back when a xml reference has been made
- */
-void
-xmlSetEntityReferenceFunc(xmlEntityReferenceFunc func)
-{
- xmlEntityRefFunc = func;
-}
-#endif /* LIBXML_LEGACY_ENABLED */
-
-/************************************************************************
- * *
- * Miscellaneous *
- * *
- ************************************************************************/
-
-#ifdef LIBXML_XPATH_ENABLED
-#include <libxml/xpath.h>
-#endif
-
-extern void XMLCDECL xmlGenericErrorDefaultFunc(void *ctx, const char *msg, ...);
-static int xmlParserInitialized = 0;
-
-/**
- * xmlInitParser:
- *
- * Initialization function for the XML parser.
- * This is not reentrant. Call once before processing in case of
- * use in multithreaded programs.
- */
-
-void
-xmlInitParser(void) {
- if (xmlParserInitialized != 0)
- return;
-
-#ifdef LIBXML_THREAD_ENABLED
- __xmlGlobalInitMutexLock();
- if (xmlParserInitialized == 0) {
-#endif
- xmlInitThreads();
- xmlInitGlobals();
- if ((xmlGenericError == xmlGenericErrorDefaultFunc) ||
- (xmlGenericError == NULL))
- initGenericErrorDefaultFunc(NULL);
- xmlInitMemory();
- xmlInitializeDict();
- xmlInitCharEncodingHandlers();
- xmlDefaultSAXHandlerInit();
- xmlRegisterDefaultInputCallbacks();
-#ifdef LIBXML_OUTPUT_ENABLED
- xmlRegisterDefaultOutputCallbacks();
-#endif /* LIBXML_OUTPUT_ENABLED */
-#ifdef LIBXML_HTML_ENABLED
- htmlInitAutoClose();
- htmlDefaultSAXHandlerInit();
-#endif
-#ifdef LIBXML_XPATH_ENABLED
- xmlXPathInit();
-#endif
- xmlParserInitialized = 1;
-#ifdef LIBXML_THREAD_ENABLED
- }
- __xmlGlobalInitMutexUnlock();
-#endif
-}
-
-/**
- * xmlCleanupParser:
- *
- * This function name is somewhat misleading. It does not clean up
- * parser state, it cleans up memory allocated by the library itself.
- * It is a cleanup function for the XML library. It tries to reclaim all
- * related global memory allocated for the library processing.
- * It doesn't deallocate any document related memory. One should
- * call xmlCleanupParser() only when the process has finished using
- * the library and all XML/HTML documents built with it.
- * See also xmlInitParser() which has the opposite function of preparing
- * the library for operations.
- *
- * WARNING: if your application is multithreaded or has plugin support
- * calling this may crash the application if another thread or
- * a plugin is still using libxml2. It's sometimes very hard to
- * guess if libxml2 is in use in the application, some libraries
- * or plugins may use it without notice. In case of doubt abstain
- * from calling this function or do it just before calling exit()
- * to avoid leak reports from valgrind !
- */
-
-void
-xmlCleanupParser(void) {
- if (!xmlParserInitialized)
- return;
-
- xmlCleanupCharEncodingHandlers();
-#ifdef LIBXML_CATALOG_ENABLED
- xmlCatalogCleanup();
-#endif
- xmlDictCleanup();
- xmlCleanupInputCallbacks();
-#ifdef LIBXML_OUTPUT_ENABLED
- xmlCleanupOutputCallbacks();
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
- xmlSchemaCleanupTypes();
- xmlRelaxNGCleanupTypes();
-#endif
- xmlResetLastError();
- xmlCleanupGlobals();
- xmlCleanupThreads(); /* must be last if called not from the main thread */
- xmlCleanupMemory();
- xmlParserInitialized = 0;
-}
-
-/************************************************************************
- * *
- * New set (2.6.0) of simpler and more flexible APIs *
- * *
- ************************************************************************/
-
-/**
- * DICT_FREE:
- * @str: a string
- *
- * Free a string if it is not owned by the "dict" dictionary in the
- * current scope
- */
-#define DICT_FREE(str) \
- if ((str) && ((!dict) || \
- (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
- xmlFree((char *)(str));
-
-/**
- * xmlCtxtReset:
- * @ctxt: an XML parser context
- *
- * Reset a parser context
- */
-void
-xmlCtxtReset(xmlParserCtxtPtr ctxt)
-{
- xmlParserInputPtr input;
- xmlDictPtr dict;
-
- if (ctxt == NULL)
- return;
-
- dict = ctxt->dict;
-
- while ((input = inputPop(ctxt)) != NULL) { /* Non consuming */
- xmlFreeInputStream(input);
- }
- ctxt->inputNr = 0;
- ctxt->input = NULL;
-
- ctxt->spaceNr = 0;
- if (ctxt->spaceTab != NULL) {
- ctxt->spaceTab[0] = -1;
- ctxt->space = &ctxt->spaceTab[0];
- } else {
- ctxt->space = NULL;
- }
-
-
- ctxt->nodeNr = 0;
- ctxt->node = NULL;
-
- ctxt->nameNr = 0;
- ctxt->name = NULL;
-
- DICT_FREE(ctxt->version);
- ctxt->version = NULL;
- DICT_FREE(ctxt->encoding);
- ctxt->encoding = NULL;
- DICT_FREE(ctxt->directory);
- ctxt->directory = NULL;
- DICT_FREE(ctxt->extSubURI);
- ctxt->extSubURI = NULL;
- DICT_FREE(ctxt->extSubSystem);
- ctxt->extSubSystem = NULL;
- if (ctxt->myDoc != NULL)
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
-
- ctxt->standalone = -1;
- ctxt->hasExternalSubset = 0;
- ctxt->hasPErefs = 0;
- ctxt->html = 0;
- ctxt->external = 0;
- ctxt->instate = XML_PARSER_START;
- ctxt->token = 0;
-
- ctxt->wellFormed = 1;
- ctxt->nsWellFormed = 1;
- ctxt->disableSAX = 0;
- ctxt->valid = 1;
-#if 0
- ctxt->vctxt.userData = ctxt;
- ctxt->vctxt.error = xmlParserValidityError;
- ctxt->vctxt.warning = xmlParserValidityWarning;
-#endif
- ctxt->record_info = 0;
- ctxt->nbChars = 0;
- ctxt->checkIndex = 0;
- ctxt->inSubset = 0;
- ctxt->errNo = XML_ERR_OK;
- ctxt->depth = 0;
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- ctxt->catalogs = NULL;
- ctxt->nbentities = 0;
- ctxt->sizeentities = 0;
- ctxt->sizeentcopy = 0;
- xmlInitNodeInfoSeq(&ctxt->node_seq);
-
- if (ctxt->attsDefault != NULL) {
- xmlHashFree(ctxt->attsDefault, (xmlHashDeallocator) xmlFree);
- ctxt->attsDefault = NULL;
- }
- if (ctxt->attsSpecial != NULL) {
- xmlHashFree(ctxt->attsSpecial, NULL);
- ctxt->attsSpecial = NULL;
- }
-
-#ifdef LIBXML_CATALOG_ENABLED
- if (ctxt->catalogs != NULL)
- xmlCatalogFreeLocal(ctxt->catalogs);
-#endif
- if (ctxt->lastError.code != XML_ERR_OK)
- xmlResetError(&ctxt->lastError);
-}
-
-/**
- * xmlCtxtResetPush:
- * @ctxt: an XML parser context
- * @chunk: a pointer to an array of chars
- * @size: number of chars in the array
- * @filename: an optional file name or URI
- * @encoding: the document encoding, or NULL
- *
- * Reset a push parser context
- *
- * Returns 0 in case of success and 1 in case of error
- */
-int
-xmlCtxtResetPush(xmlParserCtxtPtr ctxt, const char *chunk,
- int size, const char *filename, const char *encoding)
-{
- xmlParserInputPtr inputStream;
- xmlParserInputBufferPtr buf;
- xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
-
- if (ctxt == NULL)
- return(1);
-
- if ((encoding == NULL) && (chunk != NULL) && (size >= 4))
- enc = xmlDetectCharEncoding((const xmlChar *) chunk, size);
-
- buf = xmlAllocParserInputBuffer(enc);
- if (buf == NULL)
- return(1);
-
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(buf);
- return(1);
- }
-
- xmlCtxtReset(ctxt);
-
- if (ctxt->pushTab == NULL) {
- ctxt->pushTab = (void **) xmlMalloc(ctxt->nameMax * 3 *
- sizeof(xmlChar *));
- if (ctxt->pushTab == NULL) {
- xmlErrMemory(ctxt, NULL);
- xmlFreeParserInputBuffer(buf);
- return(1);
- }
- }
-
- if (filename == NULL) {
- ctxt->directory = NULL;
- } else {
- ctxt->directory = xmlParserGetDirectory(filename);
- }
-
- inputStream = xmlNewInputStream(ctxt);
- if (inputStream == NULL) {
- xmlFreeParserInputBuffer(buf);
- return(1);
- }
-
- if (filename == NULL)
- inputStream->filename = NULL;
- else
- inputStream->filename = (char *)
- xmlCanonicPath((const xmlChar *) filename);
- inputStream->buf = buf;
- xmlBufResetInput(buf->buffer, inputStream);
-
- inputPush(ctxt, inputStream);
-
- if ((size > 0) && (chunk != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->buf != NULL)) {
- size_t base = xmlBufGetInputBase(ctxt->input->buf->buffer, ctxt->input);
- size_t cur = ctxt->input->cur - ctxt->input->base;
-
- xmlParserInputBufferPush(ctxt->input->buf, size, chunk);
-
- xmlBufSetInputBaseCur(ctxt->input->buf->buffer, ctxt->input, base, cur);
-#ifdef DEBUG_PUSH
- xmlGenericError(xmlGenericErrorContext, "PP: pushed %d\n", size);
-#endif
- }
-
- if (encoding != NULL) {
- xmlCharEncodingHandlerPtr hdlr;
-
- if (ctxt->encoding != NULL)
- xmlFree((xmlChar *) ctxt->encoding);
- ctxt->encoding = xmlStrdup((const xmlChar *) encoding);
-
- hdlr = xmlFindCharEncodingHandler(encoding);
- if (hdlr != NULL) {
- xmlSwitchToEncoding(ctxt, hdlr);
- } else {
- xmlFatalErrMsgStr(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "Unsupported encoding %s\n", BAD_CAST encoding);
- }
- } else if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
-
- return(0);
-}
-
-
-/**
- * xmlCtxtUseOptionsInternal:
- * @ctxt: an XML parser context
- * @options: a combination of xmlParserOption
- * @encoding: the user provided encoding to use
- *
- * Applies the options to the parser context
- *
- * Returns 0 in case of success, the set of unknown or unimplemented options
- * in case of error.
- */
-static int
-xmlCtxtUseOptionsInternal(xmlParserCtxtPtr ctxt, int options, const char *encoding)
-{
- if (ctxt == NULL)
- return(-1);
- if (encoding != NULL) {
- if (ctxt->encoding != NULL)
- xmlFree((xmlChar *) ctxt->encoding);
- ctxt->encoding = xmlStrdup((const xmlChar *) encoding);
- }
- if (options & XML_PARSE_RECOVER) {
- ctxt->recovery = 1;
- options -= XML_PARSE_RECOVER;
- ctxt->options |= XML_PARSE_RECOVER;
- } else
- ctxt->recovery = 0;
- if (options & XML_PARSE_DTDLOAD) {
- ctxt->loadsubset = XML_DETECT_IDS;
- options -= XML_PARSE_DTDLOAD;
- ctxt->options |= XML_PARSE_DTDLOAD;
- } else
- ctxt->loadsubset = 0;
- if (options & XML_PARSE_DTDATTR) {
- ctxt->loadsubset |= XML_COMPLETE_ATTRS;
- options -= XML_PARSE_DTDATTR;
- ctxt->options |= XML_PARSE_DTDATTR;
- }
- if (options & XML_PARSE_NOENT) {
- ctxt->replaceEntities = 1;
- /* ctxt->loadsubset |= XML_DETECT_IDS; */
- options -= XML_PARSE_NOENT;
- ctxt->options |= XML_PARSE_NOENT;
- } else
- ctxt->replaceEntities = 0;
- if (options & XML_PARSE_PEDANTIC) {
- ctxt->pedantic = 1;
- options -= XML_PARSE_PEDANTIC;
- ctxt->options |= XML_PARSE_PEDANTIC;
- } else
- ctxt->pedantic = 0;
- if (options & XML_PARSE_NOBLANKS) {
- ctxt->keepBlanks = 0;
- ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
- options -= XML_PARSE_NOBLANKS;
- ctxt->options |= XML_PARSE_NOBLANKS;
- } else
- ctxt->keepBlanks = 1;
- if (options & XML_PARSE_DTDVALID) {
- ctxt->validate = 1;
- if (options & XML_PARSE_NOWARNING)
- ctxt->vctxt.warning = NULL;
- if (options & XML_PARSE_NOERROR)
- ctxt->vctxt.error = NULL;
- options -= XML_PARSE_DTDVALID;
- ctxt->options |= XML_PARSE_DTDVALID;
- } else
- ctxt->validate = 0;
- if (options & XML_PARSE_NOWARNING) {
- ctxt->sax->warning = NULL;
- options -= XML_PARSE_NOWARNING;
- }
- if (options & XML_PARSE_NOERROR) {
- ctxt->sax->error = NULL;
- ctxt->sax->fatalError = NULL;
- options -= XML_PARSE_NOERROR;
- }
-#ifdef LIBXML_SAX1_ENABLED
- if (options & XML_PARSE_SAX1) {
- ctxt->sax->startElement = xmlSAX2StartElement;
- ctxt->sax->endElement = xmlSAX2EndElement;
- ctxt->sax->startElementNs = NULL;
- ctxt->sax->endElementNs = NULL;
- ctxt->sax->initialized = 1;
- options -= XML_PARSE_SAX1;
- ctxt->options |= XML_PARSE_SAX1;
- }
-#endif /* LIBXML_SAX1_ENABLED */
- if (options & XML_PARSE_NODICT) {
- ctxt->dictNames = 0;
- options -= XML_PARSE_NODICT;
- ctxt->options |= XML_PARSE_NODICT;
- } else {
- ctxt->dictNames = 1;
- }
- if (options & XML_PARSE_NOCDATA) {
- ctxt->sax->cdataBlock = NULL;
- options -= XML_PARSE_NOCDATA;
- ctxt->options |= XML_PARSE_NOCDATA;
- }
- if (options & XML_PARSE_NSCLEAN) {
- ctxt->options |= XML_PARSE_NSCLEAN;
- options -= XML_PARSE_NSCLEAN;
- }
- if (options & XML_PARSE_NONET) {
- ctxt->options |= XML_PARSE_NONET;
- options -= XML_PARSE_NONET;
- }
- if (options & XML_PARSE_NOXXE) {
- ctxt->options |= XML_PARSE_NOXXE;
- options -= XML_PARSE_NOXXE;
- }
- if (options & XML_PARSE_COMPACT) {
- ctxt->options |= XML_PARSE_COMPACT;
- options -= XML_PARSE_COMPACT;
- }
- if (options & XML_PARSE_OLD10) {
- ctxt->options |= XML_PARSE_OLD10;
- options -= XML_PARSE_OLD10;
- }
- if (options & XML_PARSE_NOBASEFIX) {
- ctxt->options |= XML_PARSE_NOBASEFIX;
- options -= XML_PARSE_NOBASEFIX;
- }
- if (options & XML_PARSE_HUGE) {
- ctxt->options |= XML_PARSE_HUGE;
- options -= XML_PARSE_HUGE;
- if (ctxt->dict != NULL)
- xmlDictSetLimit(ctxt->dict, 0);
- }
- if (options & XML_PARSE_OLDSAX) {
- ctxt->options |= XML_PARSE_OLDSAX;
- options -= XML_PARSE_OLDSAX;
- }
- if (options & XML_PARSE_IGNORE_ENC) {
- ctxt->options |= XML_PARSE_IGNORE_ENC;
- options -= XML_PARSE_IGNORE_ENC;
- }
- if (options & XML_PARSE_BIG_LINES) {
- ctxt->options |= XML_PARSE_BIG_LINES;
- options -= XML_PARSE_BIG_LINES;
- }
- ctxt->linenumbers = 1;
- return (options);
-}
-
-/**
- * xmlCtxtUseOptions:
- * @ctxt: an XML parser context
- * @options: a combination of xmlParserOption
- *
- * Applies the options to the parser context
- *
- * Returns 0 in case of success, the set of unknown or unimplemented options
- * in case of error.
- */
-int
-xmlCtxtUseOptions(xmlParserCtxtPtr ctxt, int options)
-{
- return(xmlCtxtUseOptionsInternal(ctxt, options, NULL));
-}
-
-/**
- * xmlDoRead:
- * @ctxt: an XML parser context
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- * @reuse: keep the context for reuse
- *
- * Common front-end for the xmlRead functions
- *
- * Returns the resulting document tree or NULL
- */
-static xmlDocPtr
-xmlDoRead(xmlParserCtxtPtr ctxt, const char *URL, const char *encoding,
- int options, int reuse)
-{
- xmlDocPtr ret;
-
- xmlCtxtUseOptionsInternal(ctxt, options, encoding);
- if (encoding != NULL) {
- xmlCharEncodingHandlerPtr hdlr;
-
- hdlr = xmlFindCharEncodingHandler(encoding);
- if (hdlr != NULL)
- xmlSwitchToEncoding(ctxt, hdlr);
- }
- if ((URL != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->filename == NULL))
- ctxt->input->filename = (char *) xmlStrdup((const xmlChar *) URL);
- xmlParseDocument(ctxt);
- if ((ctxt->wellFormed) || ctxt->recovery)
- ret = ctxt->myDoc;
- else {
- ret = NULL;
- if (ctxt->myDoc != NULL) {
- xmlFreeDoc(ctxt->myDoc);
- }
- }
- ctxt->myDoc = NULL;
- if (!reuse) {
- xmlFreeParserCtxt(ctxt);
- }
-
- return (ret);
-}
-
-/**
- * xmlReadDoc:
- * @cur: a pointer to a zero terminated string
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML in-memory document and build a tree.
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlReadDoc(const xmlChar * cur, const char *URL, const char *encoding, int options)
-{
- xmlParserCtxtPtr ctxt;
-
- if (cur == NULL)
- return (NULL);
- xmlInitParser();
-
- ctxt = xmlCreateDocParserCtxt(cur);
- if (ctxt == NULL)
- return (NULL);
- return (xmlDoRead(ctxt, URL, encoding, options, 0));
-}
-
-/**
- * xmlReadFile:
- * @filename: a file or URL
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML file from the filesystem or the network.
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlReadFile(const char *filename, const char *encoding, int options)
-{
- xmlParserCtxtPtr ctxt;
-
- xmlInitParser();
- ctxt = xmlCreateURLParserCtxt(filename, options);
- if (ctxt == NULL)
- return (NULL);
- return (xmlDoRead(ctxt, NULL, encoding, options, 0));
-}
-
-/**
- * xmlReadMemory:
- * @buffer: a pointer to a char array
- * @size: the size of the array
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML in-memory document and build a tree.
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlReadMemory(const char *buffer, int size, const char *URL, const char *encoding, int options)
-{
- xmlParserCtxtPtr ctxt;
-
- xmlInitParser();
- ctxt = xmlCreateMemoryParserCtxt(buffer, size);
- if (ctxt == NULL)
- return (NULL);
- return (xmlDoRead(ctxt, URL, encoding, options, 0));
-}
-
-/**
- * xmlReadFd:
- * @fd: an open file descriptor
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML from a file descriptor and build a tree.
- * NOTE that the file descriptor will not be closed when the
- * reader is closed or reset.
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlReadFd(int fd, const char *URL, const char *encoding, int options)
-{
- xmlParserCtxtPtr ctxt;
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (fd < 0)
- return (NULL);
- xmlInitParser();
-
- input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return (NULL);
- input->closecallback = NULL;
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- xmlFreeParserCtxt(ctxt);
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (xmlDoRead(ctxt, URL, encoding, options, 0));
-}
-
-/**
- * xmlReadIO:
- * @ioread: an I/O read function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML document from I/O functions and source and build a tree.
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlReadIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
- void *ioctx, const char *URL, const char *encoding, int options)
-{
- xmlParserCtxtPtr ctxt;
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (ioread == NULL)
- return (NULL);
- xmlInitParser();
-
- input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- if (ioclose != NULL)
- ioclose(ioctx);
- return (NULL);
- }
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- xmlFreeParserCtxt(ctxt);
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (xmlDoRead(ctxt, URL, encoding, options, 0));
-}
-
-/**
- * xmlCtxtReadDoc:
- * @ctxt: an XML parser context
- * @cur: a pointer to a zero terminated string
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML in-memory document and build a tree.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlCtxtReadDoc(xmlParserCtxtPtr ctxt, const xmlChar * cur,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputPtr stream;
-
- if (cur == NULL)
- return (NULL);
- if (ctxt == NULL)
- return (NULL);
- xmlInitParser();
-
- xmlCtxtReset(ctxt);
-
- stream = xmlNewStringInputStream(ctxt, cur);
- if (stream == NULL) {
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (xmlDoRead(ctxt, URL, encoding, options, 1));
-}
-
-/**
- * xmlCtxtReadFile:
- * @ctxt: an XML parser context
- * @filename: a file or URL
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML file from the filesystem or the network.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlCtxtReadFile(xmlParserCtxtPtr ctxt, const char *filename,
- const char *encoding, int options)
-{
- xmlParserInputPtr stream;
-
- if (filename == NULL)
- return (NULL);
- if (ctxt == NULL)
- return (NULL);
- xmlInitParser();
-
- xmlCtxtReset(ctxt);
-
- stream = xmlLoadExternalEntity(filename, NULL, ctxt);
- if (stream == NULL) {
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (xmlDoRead(ctxt, NULL, encoding, options, 1));
-}
-
-/**
- * xmlCtxtReadMemory:
- * @ctxt: an XML parser context
- * @buffer: a pointer to a char array
- * @size: the size of the array
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML in-memory document and build a tree.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlCtxtReadMemory(xmlParserCtxtPtr ctxt, const char *buffer, int size,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (ctxt == NULL)
- return (NULL);
- if (buffer == NULL)
- return (NULL);
- xmlInitParser();
-
- xmlCtxtReset(ctxt);
-
- input = xmlParserInputBufferCreateMem(buffer, size, XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- return(NULL);
- }
-
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- return(NULL);
- }
-
- inputPush(ctxt, stream);
- return (xmlDoRead(ctxt, URL, encoding, options, 1));
-}
-
-/**
- * xmlCtxtReadFd:
- * @ctxt: an XML parser context
- * @fd: an open file descriptor
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML from a file descriptor and build a tree.
- * This reuses the existing @ctxt parser context
- * NOTE that the file descriptor will not be closed when the
- * reader is closed or reset.
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlCtxtReadFd(xmlParserCtxtPtr ctxt, int fd,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (fd < 0)
- return (NULL);
- if (ctxt == NULL)
- return (NULL);
- xmlInitParser();
-
- xmlCtxtReset(ctxt);
-
-
- input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return (NULL);
- input->closecallback = NULL;
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (xmlDoRead(ctxt, URL, encoding, options, 1));
-}
-
-/**
- * xmlCtxtReadIO:
- * @ctxt: an XML parser context
- * @ioread: an I/O read function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML document from I/O functions and source and build a tree.
- * This reuses the existing @ctxt parser context
- *
- * Returns the resulting document tree
- */
-xmlDocPtr
-xmlCtxtReadIO(xmlParserCtxtPtr ctxt, xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose, void *ioctx,
- const char *URL,
- const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
- xmlParserInputPtr stream;
-
- if (ioread == NULL)
- return (NULL);
- if (ctxt == NULL)
- return (NULL);
- xmlInitParser();
-
- xmlCtxtReset(ctxt);
-
- input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- if (ioclose != NULL)
- ioclose(ioctx);
- return (NULL);
- }
- stream = xmlNewIOInputStream(ctxt, input, XML_CHAR_ENCODING_NONE);
- if (stream == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- inputPush(ctxt, stream);
- return (xmlDoRead(ctxt, URL, encoding, options, 1));
-}
-
-#define bottom_parser
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/parserInternals.c b/external/libxml2_android/jni/libxml2/parserInternals.c
deleted file mode 100644
index bfc778ac..00000000
--- a/external/libxml2_android/jni/libxml2/parserInternals.c
+++ /dev/null
@@ -1,2157 +0,0 @@
-/*
- * parserInternals.c : Internal routines (and obsolete ones) needed for the
- * XML and HTML parsers.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#if defined(WIN32) && !defined (__CYGWIN__)
-#define XML_DIR_SEP '\\'
-#else
-#define XML_DIR_SEP '/'
-#endif
-
-#include <string.h>
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/valid.h>
-#include <libxml/entities.h>
-#include <libxml/xmlerror.h>
-#include <libxml/encoding.h>
-#include <libxml/valid.h>
-#include <libxml/xmlIO.h>
-#include <libxml/uri.h>
-#include <libxml/dict.h>
-#include <libxml/SAX.h>
-#ifdef LIBXML_CATALOG_ENABLED
-#include <libxml/catalog.h>
-#endif
-#include <libxml/globals.h>
-#include <libxml/chvalid.h>
-
-#define CUR(ctxt) ctxt->input->cur
-#define END(ctxt) ctxt->input->end
-#define VALID_CTXT(ctxt) (CUR(ctxt) <= END(ctxt))
-
-#include "buf.h"
-#include "enc.h"
-
-/*
- * Various global defaults for parsing
- */
-
-/**
- * xmlCheckVersion:
- * @version: the include version number
- *
- * check the compiled lib version against the include one.
- * This can warn or immediately kill the application
- */
-void
-xmlCheckVersion(int version) {
- int myversion = (int) LIBXML_VERSION;
-
- xmlInitParser();
-
- if ((myversion / 10000) != (version / 10000)) {
- xmlGenericError(xmlGenericErrorContext,
- "Fatal: program compiled against libxml %d using libxml %d\n",
- (version / 10000), (myversion / 10000));
- fprintf(stderr,
- "Fatal: program compiled against libxml %d using libxml %d\n",
- (version / 10000), (myversion / 10000));
- }
- if ((myversion / 100) < (version / 100)) {
- xmlGenericError(xmlGenericErrorContext,
- "Warning: program compiled against libxml %d using older %d\n",
- (version / 100), (myversion / 100));
- }
-}
-
-
-/************************************************************************
- * *
- * Some factorized error routines *
- * *
- ************************************************************************/
-
-
-/**
- * xmlErrMemory:
- * @ctxt: an XML parser context
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-void
-xmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL) {
- ctxt->errNo = XML_ERR_NO_MEMORY;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- }
- if (extra)
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
- else
- __xmlRaiseError(NULL, NULL, NULL, ctxt, NULL, XML_FROM_PARSER,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
- NULL, NULL, 0, 0, "Memory allocation failed\n");
-}
-
-/**
- * __xmlErrEncoding:
- * @ctxt: an XML parser context
- * @xmlerr: the error number
- * @msg: the error message
- * @str1: an string info
- * @str2: an string info
- *
- * Handle an encoding error
- */
-void
-__xmlErrEncoding(xmlParserCtxtPtr ctxt, xmlParserErrors xmlerr,
- const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = xmlerr;
- __xmlRaiseError(NULL, NULL, NULL,
- ctxt, NULL, XML_FROM_PARSER, xmlerr, XML_ERR_FATAL,
- NULL, 0, (const char *) str1, (const char *) str2,
- NULL, 0, 0, msg, str1, str2);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlErrInternal:
- * @ctxt: an XML parser context
- * @msg: the error message
- * @str: error informations
- *
- * Handle an internal error
- */
-static void LIBXML_ATTR_FORMAT(2,0)
-xmlErrInternal(xmlParserCtxtPtr ctxt, const char *msg, const xmlChar * str)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = XML_ERR_INTERNAL_ERROR;
- __xmlRaiseError(NULL, NULL, NULL,
- ctxt, NULL, XML_FROM_PARSER, XML_ERR_INTERNAL_ERROR,
- XML_ERR_FATAL, NULL, 0, (const char *) str, NULL, NULL,
- 0, 0, msg, str);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlErrEncodingInt:
- * @ctxt: an XML parser context
- * @error: the error number
- * @msg: the error message
- * @val: an integer value
- *
- * n encoding error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlErrEncodingInt(xmlParserCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, int val)
-{
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if (ctxt != NULL)
- ctxt->errNo = error;
- __xmlRaiseError(NULL, NULL, NULL,
- ctxt, NULL, XML_FROM_PARSER, error, XML_ERR_FATAL,
- NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
- if (ctxt != NULL) {
- ctxt->wellFormed = 0;
- if (ctxt->recovery == 0)
- ctxt->disableSAX = 1;
- }
-}
-
-/**
- * xmlIsLetter:
- * @c: an unicode character (int)
- *
- * Check whether the character is allowed by the production
- * [84] Letter ::= BaseChar | Ideographic
- *
- * Returns 0 if not, non-zero otherwise
- */
-int
-xmlIsLetter(int c) {
- return(IS_BASECHAR(c) || IS_IDEOGRAPHIC(c));
-}
-
-/************************************************************************
- * *
- * Input handling functions for progressive parsing *
- * *
- ************************************************************************/
-
-/* #define DEBUG_INPUT */
-/* #define DEBUG_STACK */
-/* #define DEBUG_PUSH */
-
-
-/* we need to keep enough input to show errors in context */
-#define LINE_LEN 80
-
-#ifdef DEBUG_INPUT
-#define CHECK_BUFFER(in) check_buffer(in)
-
-static
-void check_buffer(xmlParserInputPtr in) {
- if (in->base != xmlBufContent(in->buf->buffer)) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlParserInput: base mismatch problem\n");
- }
- if (in->cur < in->base) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlParserInput: cur < base problem\n");
- }
- if (in->cur > in->base + xmlBufUse(in->buf->buffer)) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlParserInput: cur > base + use problem\n");
- }
- xmlGenericError(xmlGenericErrorContext,"buffer %x : content %x, cur %d, use %d\n",
- (int) in, (int) xmlBufContent(in->buf->buffer), in->cur - in->base,
- xmlBufUse(in->buf->buffer));
-}
-
-#else
-#define CHECK_BUFFER(in)
-#endif
-
-
-/**
- * xmlParserInputRead:
- * @in: an XML parser input
- * @len: an indicative size for the lookahead
- *
- * This function was internal and is deprecated.
- *
- * Returns -1 as this is an error to use it.
- */
-int
-xmlParserInputRead(xmlParserInputPtr in ATTRIBUTE_UNUSED, int len ATTRIBUTE_UNUSED) {
- return(-1);
-}
-
-/**
- * xmlParserInputGrow:
- * @in: an XML parser input
- * @len: an indicative size for the lookahead
- *
- * This function increase the input for the parser. It tries to
- * preserve pointers to the input buffer, and keep already read data
- *
- * Returns the amount of char read, or -1 in case of error, 0 indicate the
- * end of this entity
- */
-int
-xmlParserInputGrow(xmlParserInputPtr in, int len) {
- int ret;
- size_t indx;
- const xmlChar *content;
-
- if ((in == NULL) || (len < 0)) return(-1);
-#ifdef DEBUG_INPUT
- xmlGenericError(xmlGenericErrorContext, "Grow\n");
-#endif
- if (in->buf == NULL) return(-1);
- if (in->base == NULL) return(-1);
- if (in->cur == NULL) return(-1);
- if (in->buf->buffer == NULL) return(-1);
-
- CHECK_BUFFER(in);
-
- indx = in->cur - in->base;
- if (xmlBufUse(in->buf->buffer) > (unsigned int) indx + INPUT_CHUNK) {
-
- CHECK_BUFFER(in);
-
- return(0);
- }
- if (in->buf->readcallback != NULL) {
- ret = xmlParserInputBufferGrow(in->buf, len);
- } else
- return(0);
-
- /*
- * NOTE : in->base may be a "dangling" i.e. freed pointer in this
- * block, but we use it really as an integer to do some
- * pointer arithmetic. Insure will raise it as a bug but in
- * that specific case, that's not !
- */
-
- content = xmlBufContent(in->buf->buffer);
- if (in->base != content) {
- /*
- * the buffer has been reallocated
- */
- indx = in->cur - in->base;
- in->base = content;
- in->cur = &content[indx];
- }
- in->end = xmlBufEnd(in->buf->buffer);
-
- CHECK_BUFFER(in);
-
- return(ret);
-}
-
-/**
- * xmlParserInputShrink:
- * @in: an XML parser input
- *
- * This function removes used input for the parser.
- */
-void
-xmlParserInputShrink(xmlParserInputPtr in) {
- size_t used;
- size_t ret;
- size_t indx;
- const xmlChar *content;
-
-#ifdef DEBUG_INPUT
- xmlGenericError(xmlGenericErrorContext, "Shrink\n");
-#endif
- if (in == NULL) return;
- if (in->buf == NULL) return;
- if (in->base == NULL) return;
- if (in->cur == NULL) return;
- if (in->buf->buffer == NULL) return;
-
- CHECK_BUFFER(in);
-
- used = in->cur - xmlBufContent(in->buf->buffer);
- /*
- * Do not shrink on large buffers whose only a tiny fraction
- * was consumed
- */
- if (used > INPUT_CHUNK) {
- ret = xmlBufShrink(in->buf->buffer, used - LINE_LEN);
- if (ret > 0) {
- in->cur -= ret;
- in->consumed += ret;
- }
- in->end = xmlBufEnd(in->buf->buffer);
- }
-
- CHECK_BUFFER(in);
-
- if (xmlBufUse(in->buf->buffer) > INPUT_CHUNK) {
- return;
- }
- xmlParserInputBufferRead(in->buf, 2 * INPUT_CHUNK);
- content = xmlBufContent(in->buf->buffer);
- if (in->base != content) {
- /*
- * the buffer has been reallocated
- */
- indx = in->cur - in->base;
- in->base = content;
- in->cur = &content[indx];
- }
- in->end = xmlBufEnd(in->buf->buffer);
-
- CHECK_BUFFER(in);
-}
-
-/************************************************************************
- * *
- * UTF8 character input and related functions *
- * *
- ************************************************************************/
-
-/**
- * xmlNextChar:
- * @ctxt: the XML parser context
- *
- * Skip to the next char input char.
- */
-
-void
-xmlNextChar(xmlParserCtxtPtr ctxt)
-{
- if ((ctxt == NULL) || (ctxt->instate == XML_PARSER_EOF) ||
- (ctxt->input == NULL))
- return;
-
- if (!(VALID_CTXT(ctxt))) {
- xmlErrInternal(ctxt, "Parser input data memory error\n", NULL);
- ctxt->errNo = XML_ERR_INTERNAL_ERROR;
- xmlStopParser(ctxt);
- return;
- }
-
- if ((*ctxt->input->cur == 0) &&
- (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0)) {
- if ((ctxt->instate != XML_PARSER_COMMENT))
- xmlPopInput(ctxt);
- return;
- }
-
- if (ctxt->charset == XML_CHAR_ENCODING_UTF8) {
- const unsigned char *cur;
- unsigned char c;
-
- /*
- * 2.11 End-of-Line Handling
- * the literal two-character sequence "#xD#xA" or a standalone
- * literal #xD, an XML processor must pass to the application
- * the single character #xA.
- */
- if (*(ctxt->input->cur) == '\n') {
- ctxt->input->line++; ctxt->input->col = 1;
- } else
- ctxt->input->col++;
-
- /*
- * We are supposed to handle UTF8, check it's valid
- * From rfc2044: encoding of the Unicode values on UTF-8:
- *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary)
- * 0000 0000-0000 007F 0xxxxxxx
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
- *
- * Check for the 0x110000 limit too
- */
- cur = ctxt->input->cur;
-
- c = *cur;
- if (c & 0x80) {
- if (c == 0xC0)
- goto encoding_error;
- if (cur[1] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if ((cur[1] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xe0) == 0xe0) {
- unsigned int val;
-
- if (cur[2] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if ((cur[2] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xf0) == 0xf0) {
- if (cur[3] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if (((c & 0xf8) != 0xf0) ||
- ((cur[3] & 0xc0) != 0x80))
- goto encoding_error;
- /* 4-byte code */
- ctxt->input->cur += 4;
- val = (cur[0] & 0x7) << 18;
- val |= (cur[1] & 0x3f) << 12;
- val |= (cur[2] & 0x3f) << 6;
- val |= cur[3] & 0x3f;
- } else {
- /* 3-byte code */
- ctxt->input->cur += 3;
- val = (cur[0] & 0xf) << 12;
- val |= (cur[1] & 0x3f) << 6;
- val |= cur[2] & 0x3f;
- }
- if (((val > 0xd7ff) && (val < 0xe000)) ||
- ((val > 0xfffd) && (val < 0x10000)) ||
- (val >= 0x110000)) {
- xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x%X out of allowed range\n",
- val);
- }
- } else
- /* 2-byte code */
- ctxt->input->cur += 2;
- } else
- /* 1-byte code */
- ctxt->input->cur++;
-
- ctxt->nbChars++;
- if (*ctxt->input->cur == 0)
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- } else {
- /*
- * Assume it's a fixed length encoding (1) with
- * a compatible encoding for the ASCII set, since
- * XML constructs only use < 128 chars
- */
-
- if (*(ctxt->input->cur) == '\n') {
- ctxt->input->line++; ctxt->input->col = 1;
- } else
- ctxt->input->col++;
- ctxt->input->cur++;
- ctxt->nbChars++;
- if (*ctxt->input->cur == 0)
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- }
- if ((*ctxt->input->cur == '%') && (!ctxt->html))
- xmlParserHandlePEReference(ctxt);
- if ((*ctxt->input->cur == 0) &&
- (xmlParserInputGrow(ctxt->input, INPUT_CHUNK) <= 0))
- xmlPopInput(ctxt);
- return;
-encoding_error:
- /*
- * If we detect an UTF8 error that probably mean that the
- * input encoding didn't get properly advertised in the
- * declaration header. Report the error and switch the encoding
- * to ISO-Latin-1 (if you don't like this policy, just declare the
- * encoding !)
- */
- if ((ctxt == NULL) || (ctxt->input == NULL) ||
- (ctxt->input->end - ctxt->input->cur < 4)) {
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n",
- NULL, NULL);
- } else {
- char buffer[150];
-
- snprintf(buffer, 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- ctxt->input->cur[0], ctxt->input->cur[1],
- ctxt->input->cur[2], ctxt->input->cur[3]);
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n%s",
- BAD_CAST buffer, NULL);
- }
- ctxt->charset = XML_CHAR_ENCODING_8859_1;
- ctxt->input->cur++;
- return;
-}
-
-/**
- * xmlCurrentChar:
- * @ctxt: the XML parser context
- * @len: pointer to the length of the char read
- *
- * The current char value, if using UTF-8 this may actually span multiple
- * bytes in the input buffer. Implement the end of line normalization:
- * 2.11 End-of-Line Handling
- * Wherever an external parsed entity or the literal entity value
- * of an internal parsed entity contains either the literal two-character
- * sequence "#xD#xA" or a standalone literal #xD, an XML processor
- * must pass to the application the single character #xA.
- * This behavior can conveniently be produced by normalizing all
- * line breaks to #xA on input, before parsing.)
- *
- * Returns the current char value and its length
- */
-
-int
-xmlCurrentChar(xmlParserCtxtPtr ctxt, int *len) {
- if ((ctxt == NULL) || (len == NULL) || (ctxt->input == NULL)) return(0);
- if (ctxt->instate == XML_PARSER_EOF)
- return(0);
-
- if ((*ctxt->input->cur >= 0x20) && (*ctxt->input->cur <= 0x7F)) {
- *len = 1;
- return((int) *ctxt->input->cur);
- }
- if (ctxt->charset == XML_CHAR_ENCODING_UTF8) {
- /*
- * We are supposed to handle UTF8, check it's valid
- * From rfc2044: encoding of the Unicode values on UTF-8:
- *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary)
- * 0000 0000-0000 007F 0xxxxxxx
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
- *
- * Check for the 0x110000 limit too
- */
- const unsigned char *cur = ctxt->input->cur;
- unsigned char c;
- unsigned int val;
-
- c = *cur;
- if (c & 0x80) {
- if (((c & 0x40) == 0) || (c == 0xC0))
- goto encoding_error;
- if (cur[1] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if ((cur[1] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xe0) == 0xe0) {
- if (cur[2] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if ((cur[2] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xf0) == 0xf0) {
- if (cur[3] == 0) {
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- cur = ctxt->input->cur;
- }
- if (((c & 0xf8) != 0xf0) ||
- ((cur[3] & 0xc0) != 0x80))
- goto encoding_error;
- /* 4-byte code */
- *len = 4;
- val = (cur[0] & 0x7) << 18;
- val |= (cur[1] & 0x3f) << 12;
- val |= (cur[2] & 0x3f) << 6;
- val |= cur[3] & 0x3f;
- if (val < 0x10000)
- goto encoding_error;
- } else {
- /* 3-byte code */
- *len = 3;
- val = (cur[0] & 0xf) << 12;
- val |= (cur[1] & 0x3f) << 6;
- val |= cur[2] & 0x3f;
- if (val < 0x800)
- goto encoding_error;
- }
- } else {
- /* 2-byte code */
- *len = 2;
- val = (cur[0] & 0x1f) << 6;
- val |= cur[1] & 0x3f;
- if (val < 0x80)
- goto encoding_error;
- }
- if (!IS_CHAR(val)) {
- xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x%X out of allowed range\n", val);
- }
- return(val);
- } else {
- /* 1-byte code */
- *len = 1;
- if (*ctxt->input->cur == 0)
- xmlParserInputGrow(ctxt->input, INPUT_CHUNK);
- if ((*ctxt->input->cur == 0) &&
- (ctxt->input->end > ctxt->input->cur)) {
- xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x0 out of allowed range\n", 0);
- }
- if (*ctxt->input->cur == 0xD) {
- if (ctxt->input->cur[1] == 0xA) {
- ctxt->nbChars++;
- ctxt->input->cur++;
- }
- return(0xA);
- }
- return((int) *ctxt->input->cur);
- }
- }
- /*
- * Assume it's a fixed length encoding (1) with
- * a compatible encoding for the ASCII set, since
- * XML constructs only use < 128 chars
- */
- *len = 1;
- if (*ctxt->input->cur == 0xD) {
- if (ctxt->input->cur[1] == 0xA) {
- ctxt->nbChars++;
- ctxt->input->cur++;
- }
- return(0xA);
- }
- return((int) *ctxt->input->cur);
-encoding_error:
- /*
- * An encoding problem may arise from a truncated input buffer
- * splitting a character in the middle. In that case do not raise
- * an error but return 0 to endicate an end of stream problem
- */
- if (ctxt->input->end - ctxt->input->cur < 4) {
- *len = 0;
- return(0);
- }
-
- /*
- * If we detect an UTF8 error that probably mean that the
- * input encoding didn't get properly advertised in the
- * declaration header. Report the error and switch the encoding
- * to ISO-Latin-1 (if you don't like this policy, just declare the
- * encoding !)
- */
- {
- char buffer[150];
-
- snprintf(&buffer[0], 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- ctxt->input->cur[0], ctxt->input->cur[1],
- ctxt->input->cur[2], ctxt->input->cur[3]);
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n%s",
- BAD_CAST buffer, NULL);
- }
- ctxt->charset = XML_CHAR_ENCODING_8859_1;
- *len = 1;
- return((int) *ctxt->input->cur);
-}
-
-/**
- * xmlStringCurrentChar:
- * @ctxt: the XML parser context
- * @cur: pointer to the beginning of the char
- * @len: pointer to the length of the char read
- *
- * The current char value, if using UTF-8 this may actually span multiple
- * bytes in the input buffer.
- *
- * Returns the current char value and its length
- */
-
-int
-xmlStringCurrentChar(xmlParserCtxtPtr ctxt, const xmlChar * cur, int *len)
-{
- if ((len == NULL) || (cur == NULL)) return(0);
- if ((ctxt == NULL) || (ctxt->charset == XML_CHAR_ENCODING_UTF8)) {
- /*
- * We are supposed to handle UTF8, check it's valid
- * From rfc2044: encoding of the Unicode values on UTF-8:
- *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary)
- * 0000 0000-0000 007F 0xxxxxxx
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
- *
- * Check for the 0x110000 limit too
- */
- unsigned char c;
- unsigned int val;
-
- c = *cur;
- if (c & 0x80) {
- if ((cur[1] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xe0) == 0xe0) {
-
- if ((cur[2] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xf0) == 0xf0) {
- if (((c & 0xf8) != 0xf0) || ((cur[3] & 0xc0) != 0x80))
- goto encoding_error;
- /* 4-byte code */
- *len = 4;
- val = (cur[0] & 0x7) << 18;
- val |= (cur[1] & 0x3f) << 12;
- val |= (cur[2] & 0x3f) << 6;
- val |= cur[3] & 0x3f;
- } else {
- /* 3-byte code */
- *len = 3;
- val = (cur[0] & 0xf) << 12;
- val |= (cur[1] & 0x3f) << 6;
- val |= cur[2] & 0x3f;
- }
- } else {
- /* 2-byte code */
- *len = 2;
- val = (cur[0] & 0x1f) << 6;
- val |= cur[1] & 0x3f;
- }
- if (!IS_CHAR(val)) {
- xmlErrEncodingInt(ctxt, XML_ERR_INVALID_CHAR,
- "Char 0x%X out of allowed range\n", val);
- }
- return (val);
- } else {
- /* 1-byte code */
- *len = 1;
- return ((int) *cur);
- }
- }
- /*
- * Assume it's a fixed length encoding (1) with
- * a compatible encoding for the ASCII set, since
- * XML constructs only use < 128 chars
- */
- *len = 1;
- return ((int) *cur);
-encoding_error:
-
- /*
- * An encoding problem may arise from a truncated input buffer
- * splitting a character in the middle. In that case do not raise
- * an error but return 0 to endicate an end of stream problem
- */
- if ((ctxt == NULL) || (ctxt->input == NULL) ||
- (ctxt->input->end - ctxt->input->cur < 4)) {
- *len = 0;
- return(0);
- }
- /*
- * If we detect an UTF8 error that probably mean that the
- * input encoding didn't get properly advertised in the
- * declaration header. Report the error and switch the encoding
- * to ISO-Latin-1 (if you don't like this policy, just declare the
- * encoding !)
- */
- {
- char buffer[150];
-
- snprintf(buffer, 149, "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n",
- ctxt->input->cur[0], ctxt->input->cur[1],
- ctxt->input->cur[2], ctxt->input->cur[3]);
- __xmlErrEncoding(ctxt, XML_ERR_INVALID_CHAR,
- "Input is not proper UTF-8, indicate encoding !\n%s",
- BAD_CAST buffer, NULL);
- }
- *len = 1;
- return ((int) *cur);
-}
-
-/**
- * xmlCopyCharMultiByte:
- * @out: pointer to an array of xmlChar
- * @val: the char value
- *
- * append the char value in the array
- *
- * Returns the number of xmlChar written
- */
-int
-xmlCopyCharMultiByte(xmlChar *out, int val) {
- if (out == NULL) return(0);
- /*
- * We are supposed to handle UTF8, check it's valid
- * From rfc2044: encoding of the Unicode values on UTF-8:
- *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary)
- * 0000 0000-0000 007F 0xxxxxxx
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
- */
- if (val >= 0x80) {
- xmlChar *savedout = out;
- int bits;
- if (val < 0x800) { *out++= (val >> 6) | 0xC0; bits= 0; }
- else if (val < 0x10000) { *out++= (val >> 12) | 0xE0; bits= 6;}
- else if (val < 0x110000) { *out++= (val >> 18) | 0xF0; bits= 12; }
- else {
- xmlErrEncodingInt(NULL, XML_ERR_INVALID_CHAR,
- "Internal error, xmlCopyCharMultiByte 0x%X out of bound\n",
- val);
- return(0);
- }
- for ( ; bits >= 0; bits-= 6)
- *out++= ((val >> bits) & 0x3F) | 0x80 ;
- return (out - savedout);
- }
- *out = (xmlChar) val;
- return 1;
-}
-
-/**
- * xmlCopyChar:
- * @len: Ignored, compatibility
- * @out: pointer to an array of xmlChar
- * @val: the char value
- *
- * append the char value in the array
- *
- * Returns the number of xmlChar written
- */
-
-int
-xmlCopyChar(int len ATTRIBUTE_UNUSED, xmlChar *out, int val) {
- if (out == NULL) return(0);
- /* the len parameter is ignored */
- if (val >= 0x80) {
- return(xmlCopyCharMultiByte (out, val));
- }
- *out = (xmlChar) val;
- return 1;
-}
-
-/************************************************************************
- * *
- * Commodity functions to switch encodings *
- * *
- ************************************************************************/
-
-static int
-xmlSwitchToEncodingInt(xmlParserCtxtPtr ctxt,
- xmlCharEncodingHandlerPtr handler, int len);
-static int
-xmlSwitchInputEncodingInt(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
- xmlCharEncodingHandlerPtr handler, int len);
-/**
- * xmlSwitchEncoding:
- * @ctxt: the parser context
- * @enc: the encoding value (number)
- *
- * change the input functions when discovering the character encoding
- * of a given entity.
- *
- * Returns 0 in case of success, -1 otherwise
- */
-int
-xmlSwitchEncoding(xmlParserCtxtPtr ctxt, xmlCharEncoding enc)
-{
- xmlCharEncodingHandlerPtr handler;
- int len = -1;
- int ret;
-
- if (ctxt == NULL) return(-1);
- switch (enc) {
- case XML_CHAR_ENCODING_ERROR:
- __xmlErrEncoding(ctxt, XML_ERR_UNKNOWN_ENCODING,
- "encoding unknown\n", NULL, NULL);
- return(-1);
- case XML_CHAR_ENCODING_NONE:
- /* let's assume it's UTF-8 without the XML decl */
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- return(0);
- case XML_CHAR_ENCODING_UTF8:
- /* default encoding, no conversion should be needed */
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
-
- /*
- * Errata on XML-1.0 June 20 2001
- * Specific handling of the Byte Order Mark for
- * UTF-8
- */
- if ((ctxt->input != NULL) &&
- (ctxt->input->cur[0] == 0xEF) &&
- (ctxt->input->cur[1] == 0xBB) &&
- (ctxt->input->cur[2] == 0xBF)) {
- ctxt->input->cur += 3;
- }
- return(0);
- case XML_CHAR_ENCODING_UTF16LE:
- case XML_CHAR_ENCODING_UTF16BE:
- /*The raw input characters are encoded
- *in UTF-16. As we expect this function
- *to be called after xmlCharEncInFunc, we expect
- *ctxt->input->cur to contain UTF-8 encoded characters.
- *So the raw UTF16 Byte Order Mark
- *has also been converted into
- *an UTF-8 BOM. Let's skip that BOM.
- */
- if ((ctxt->input != NULL) && (ctxt->input->cur != NULL) &&
- (ctxt->input->cur[0] == 0xEF) &&
- (ctxt->input->cur[1] == 0xBB) &&
- (ctxt->input->cur[2] == 0xBF)) {
- ctxt->input->cur += 3;
- }
- len = 90;
- break;
- case XML_CHAR_ENCODING_UCS2:
- len = 90;
- break;
- case XML_CHAR_ENCODING_UCS4BE:
- case XML_CHAR_ENCODING_UCS4LE:
- case XML_CHAR_ENCODING_UCS4_2143:
- case XML_CHAR_ENCODING_UCS4_3412:
- len = 180;
- break;
- case XML_CHAR_ENCODING_EBCDIC:
- case XML_CHAR_ENCODING_8859_1:
- case XML_CHAR_ENCODING_8859_2:
- case XML_CHAR_ENCODING_8859_3:
- case XML_CHAR_ENCODING_8859_4:
- case XML_CHAR_ENCODING_8859_5:
- case XML_CHAR_ENCODING_8859_6:
- case XML_CHAR_ENCODING_8859_7:
- case XML_CHAR_ENCODING_8859_8:
- case XML_CHAR_ENCODING_8859_9:
- case XML_CHAR_ENCODING_ASCII:
- case XML_CHAR_ENCODING_2022_JP:
- case XML_CHAR_ENCODING_SHIFT_JIS:
- case XML_CHAR_ENCODING_EUC_JP:
- len = 45;
- break;
- }
- handler = xmlGetCharEncodingHandler(enc);
- if (handler == NULL) {
- /*
- * Default handlers.
- */
- switch (enc) {
- case XML_CHAR_ENCODING_ASCII:
- /* default encoding, no conversion should be needed */
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- return(0);
- case XML_CHAR_ENCODING_UTF16LE:
- break;
- case XML_CHAR_ENCODING_UTF16BE:
- break;
- case XML_CHAR_ENCODING_UCS4LE:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "USC4 little endian", NULL);
- break;
- case XML_CHAR_ENCODING_UCS4BE:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "USC4 big endian", NULL);
- break;
- case XML_CHAR_ENCODING_EBCDIC:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "EBCDIC", NULL);
- break;
- case XML_CHAR_ENCODING_UCS4_2143:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "UCS4 2143", NULL);
- break;
- case XML_CHAR_ENCODING_UCS4_3412:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "UCS4 3412", NULL);
- break;
- case XML_CHAR_ENCODING_UCS2:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "UCS2", NULL);
- break;
- case XML_CHAR_ENCODING_8859_1:
- case XML_CHAR_ENCODING_8859_2:
- case XML_CHAR_ENCODING_8859_3:
- case XML_CHAR_ENCODING_8859_4:
- case XML_CHAR_ENCODING_8859_5:
- case XML_CHAR_ENCODING_8859_6:
- case XML_CHAR_ENCODING_8859_7:
- case XML_CHAR_ENCODING_8859_8:
- case XML_CHAR_ENCODING_8859_9:
- /*
- * We used to keep the internal content in the
- * document encoding however this turns being unmaintainable
- * So xmlGetCharEncodingHandler() will return non-null
- * values for this now.
- */
- if ((ctxt->inputNr == 1) &&
- (ctxt->encoding == NULL) &&
- (ctxt->input != NULL) &&
- (ctxt->input->encoding != NULL)) {
- ctxt->encoding = xmlStrdup(ctxt->input->encoding);
- }
- ctxt->charset = enc;
- return(0);
- case XML_CHAR_ENCODING_2022_JP:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "ISO-2022-JP", NULL);
- break;
- case XML_CHAR_ENCODING_SHIFT_JIS:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "Shift_JIS", NULL);
- break;
- case XML_CHAR_ENCODING_EUC_JP:
- __xmlErrEncoding(ctxt, XML_ERR_UNSUPPORTED_ENCODING,
- "encoding not supported %s\n",
- BAD_CAST "EUC-JP", NULL);
- break;
- default:
- break;
- }
- }
- if (handler == NULL)
- return(-1);
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- ret = xmlSwitchToEncodingInt(ctxt, handler, len);
- if ((ret < 0) || (ctxt->errNo == XML_I18N_CONV_FAILED)) {
- /*
- * on encoding conversion errors, stop the parser
- */
- xmlStopParser(ctxt);
- ctxt->errNo = XML_I18N_CONV_FAILED;
- }
- return(ret);
-}
-
-/**
- * xmlSwitchInputEncoding:
- * @ctxt: the parser context
- * @input: the input stream
- * @handler: the encoding handler
- * @len: the number of bytes to convert for the first line or -1
- *
- * change the input functions when discovering the character encoding
- * of a given entity.
- *
- * Returns 0 in case of success, -1 otherwise
- */
-static int
-xmlSwitchInputEncodingInt(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
- xmlCharEncodingHandlerPtr handler, int len)
-{
- int nbchars;
-
- if (handler == NULL)
- return (-1);
- if (input == NULL)
- return (-1);
- if (input->buf != NULL) {
- if (input->buf->encoder != NULL) {
- /*
- * Check in case the auto encoding detetection triggered
- * in already.
- */
- if (input->buf->encoder == handler)
- return (0);
-
- /*
- * "UTF-16" can be used for both LE and BE
- if ((!xmlStrncmp(BAD_CAST input->buf->encoder->name,
- BAD_CAST "UTF-16", 6)) &&
- (!xmlStrncmp(BAD_CAST handler->name,
- BAD_CAST "UTF-16", 6))) {
- return(0);
- }
- */
-
- /*
- * Note: this is a bit dangerous, but that's what it
- * takes to use nearly compatible signature for different
- * encodings.
- */
- xmlCharEncCloseFunc(input->buf->encoder);
- input->buf->encoder = handler;
- return (0);
- }
- input->buf->encoder = handler;
-
- /*
- * Is there already some content down the pipe to convert ?
- */
- if (xmlBufIsEmpty(input->buf->buffer) == 0) {
- int processed;
- unsigned int use;
-
- /*
- * Specific handling of the Byte Order Mark for
- * UTF-16
- */
- if ((handler->name != NULL) &&
- (!strcmp(handler->name, "UTF-16LE") ||
- !strcmp(handler->name, "UTF-16")) &&
- (input->cur[0] == 0xFF) && (input->cur[1] == 0xFE)) {
- input->cur += 2;
- }
- if ((handler->name != NULL) &&
- (!strcmp(handler->name, "UTF-16BE")) &&
- (input->cur[0] == 0xFE) && (input->cur[1] == 0xFF)) {
- input->cur += 2;
- }
- /*
- * Errata on XML-1.0 June 20 2001
- * Specific handling of the Byte Order Mark for
- * UTF-8
- */
- if ((handler->name != NULL) &&
- (!strcmp(handler->name, "UTF-8")) &&
- (input->cur[0] == 0xEF) &&
- (input->cur[1] == 0xBB) && (input->cur[2] == 0xBF)) {
- input->cur += 3;
- }
-
- /*
- * Shrink the current input buffer.
- * Move it as the raw buffer and create a new input buffer
- */
- processed = input->cur - input->base;
- xmlBufShrink(input->buf->buffer, processed);
- input->buf->raw = input->buf->buffer;
- input->buf->buffer = xmlBufCreate();
- input->buf->rawconsumed = processed;
- use = xmlBufUse(input->buf->raw);
-
- if (ctxt->html) {
- /*
- * convert as much as possible of the buffer
- */
- nbchars = xmlCharEncInput(input->buf, 1);
- } else {
- /*
- * convert just enough to get
- * '<?xml version="1.0" encoding="xxx"?>'
- * parsed with the autodetected encoding
- * into the parser reading buffer.
- */
- nbchars = xmlCharEncFirstLineInput(input->buf, len);
- }
- if (nbchars < 0) {
- xmlErrInternal(ctxt,
- "switching encoding: encoder error\n",
- NULL);
- return (-1);
- }
- input->buf->rawconsumed += use - xmlBufUse(input->buf->raw);
- xmlBufResetInput(input->buf->buffer, input);
- }
- return (0);
- } else if (input->length == 0) {
- /*
- * When parsing a static memory array one must know the
- * size to be able to convert the buffer.
- */
- xmlErrInternal(ctxt, "switching encoding : no input\n", NULL);
- return (-1);
- }
- return (0);
-}
-
-/**
- * xmlSwitchInputEncoding:
- * @ctxt: the parser context
- * @input: the input stream
- * @handler: the encoding handler
- *
- * change the input functions when discovering the character encoding
- * of a given entity.
- *
- * Returns 0 in case of success, -1 otherwise
- */
-int
-xmlSwitchInputEncoding(xmlParserCtxtPtr ctxt, xmlParserInputPtr input,
- xmlCharEncodingHandlerPtr handler) {
- return(xmlSwitchInputEncodingInt(ctxt, input, handler, -1));
-}
-
-/**
- * xmlSwitchToEncodingInt:
- * @ctxt: the parser context
- * @handler: the encoding handler
- * @len: the length to convert or -1
- *
- * change the input functions when discovering the character encoding
- * of a given entity, and convert only @len bytes of the output, this
- * is needed on auto detect to allows any declared encoding later to
- * convert the actual content after the xmlDecl
- *
- * Returns 0 in case of success, -1 otherwise
- */
-static int
-xmlSwitchToEncodingInt(xmlParserCtxtPtr ctxt,
- xmlCharEncodingHandlerPtr handler, int len) {
- int ret = 0;
-
- if (handler != NULL) {
- if (ctxt->input != NULL) {
- ret = xmlSwitchInputEncodingInt(ctxt, ctxt->input, handler, len);
- } else {
- xmlErrInternal(ctxt, "xmlSwitchToEncoding : no input\n",
- NULL);
- return(-1);
- }
- /*
- * The parsing is now done in UTF8 natively
- */
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- } else
- return(-1);
- return(ret);
-}
-
-/**
- * xmlSwitchToEncoding:
- * @ctxt: the parser context
- * @handler: the encoding handler
- *
- * change the input functions when discovering the character encoding
- * of a given entity.
- *
- * Returns 0 in case of success, -1 otherwise
- */
-int
-xmlSwitchToEncoding(xmlParserCtxtPtr ctxt, xmlCharEncodingHandlerPtr handler)
-{
- return (xmlSwitchToEncodingInt(ctxt, handler, -1));
-}
-
-/************************************************************************
- * *
- * Commodity functions to handle entities processing *
- * *
- ************************************************************************/
-
-/**
- * xmlFreeInputStream:
- * @input: an xmlParserInputPtr
- *
- * Free up an input stream.
- */
-void
-xmlFreeInputStream(xmlParserInputPtr input) {
- if (input == NULL) return;
-
- if (input->filename != NULL) xmlFree((char *) input->filename);
- if (input->directory != NULL) xmlFree((char *) input->directory);
- if (input->encoding != NULL) xmlFree((char *) input->encoding);
- if (input->version != NULL) xmlFree((char *) input->version);
- if ((input->free != NULL) && (input->base != NULL))
- input->free((xmlChar *) input->base);
- if (input->buf != NULL)
- xmlFreeParserInputBuffer(input->buf);
- xmlFree(input);
-}
-
-/**
- * xmlNewInputStream:
- * @ctxt: an XML parser context
- *
- * Create a new input stream structure.
- *
- * Returns the new input stream or NULL
- */
-xmlParserInputPtr
-xmlNewInputStream(xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr input;
-
- input = (xmlParserInputPtr) xmlMalloc(sizeof(xmlParserInput));
- if (input == NULL) {
- xmlErrMemory(ctxt, "couldn't allocate a new input stream\n");
- return(NULL);
- }
- memset(input, 0, sizeof(xmlParserInput));
- input->line = 1;
- input->col = 1;
- input->standalone = -1;
-
- /*
- * If the context is NULL the id cannot be initialized, but that
- * should not happen while parsing which is the situation where
- * the id is actually needed.
- */
- if (ctxt != NULL)
- input->id = ctxt->input_id++;
-
- return(input);
-}
-
-/**
- * xmlNewIOInputStream:
- * @ctxt: an XML parser context
- * @input: an I/O Input
- * @enc: the charset encoding if known
- *
- * Create a new input stream structure encapsulating the @input into
- * a stream suitable for the parser.
- *
- * Returns the new input stream or NULL
- */
-xmlParserInputPtr
-xmlNewIOInputStream(xmlParserCtxtPtr ctxt, xmlParserInputBufferPtr input,
- xmlCharEncoding enc) {
- xmlParserInputPtr inputStream;
-
- if (input == NULL) return(NULL);
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext, "new input from I/O\n");
- inputStream = xmlNewInputStream(ctxt);
- if (inputStream == NULL) {
- return(NULL);
- }
- inputStream->filename = NULL;
- inputStream->buf = input;
- xmlBufResetInput(inputStream->buf->buffer, inputStream);
-
- if (enc != XML_CHAR_ENCODING_NONE) {
- xmlSwitchEncoding(ctxt, enc);
- }
-
- return(inputStream);
-}
-
-/**
- * xmlNewEntityInputStream:
- * @ctxt: an XML parser context
- * @entity: an Entity pointer
- *
- * Create a new input stream based on an xmlEntityPtr
- *
- * Returns the new input stream or NULL
- */
-xmlParserInputPtr
-xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) {
- xmlParserInputPtr input;
-
- if (entity == NULL) {
- xmlErrInternal(ctxt, "xmlNewEntityInputStream entity = NULL\n",
- NULL);
- return(NULL);
- }
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "new input from entity: %s\n", entity->name);
- if (entity->content == NULL) {
- switch (entity->etype) {
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- xmlErrInternal(ctxt, "Cannot parse entity %s\n",
- entity->name);
- break;
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- case XML_EXTERNAL_PARAMETER_ENTITY:
- return(xmlLoadExternalEntity((char *) entity->URI,
- (char *) entity->ExternalID, ctxt));
- case XML_INTERNAL_GENERAL_ENTITY:
- xmlErrInternal(ctxt,
- "Internal entity %s without content !\n",
- entity->name);
- break;
- case XML_INTERNAL_PARAMETER_ENTITY:
- xmlErrInternal(ctxt,
- "Internal parameter entity %s without content !\n",
- entity->name);
- break;
- case XML_INTERNAL_PREDEFINED_ENTITY:
- xmlErrInternal(ctxt,
- "Predefined entity %s without content !\n",
- entity->name);
- break;
- }
- return(NULL);
- }
- input = xmlNewInputStream(ctxt);
- if (input == NULL) {
- return(NULL);
- }
- if (entity->URI != NULL)
- input->filename = (char *) xmlStrdup((xmlChar *) entity->URI);
- input->base = entity->content;
- if (entity->length == 0)
- entity->length = xmlStrlen(entity->content);
- input->cur = entity->content;
- input->length = entity->length;
- input->end = &entity->content[input->length];
- return(input);
-}
-
-/**
- * xmlNewStringInputStream:
- * @ctxt: an XML parser context
- * @buffer: an memory buffer
- *
- * Create a new input stream based on a memory buffer.
- * Returns the new input stream
- */
-xmlParserInputPtr
-xmlNewStringInputStream(xmlParserCtxtPtr ctxt, const xmlChar *buffer) {
- xmlParserInputPtr input;
-
- if (buffer == NULL) {
- xmlErrInternal(ctxt, "xmlNewStringInputStream string = NULL\n",
- NULL);
- return(NULL);
- }
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "new fixed input: %.30s\n", buffer);
- input = xmlNewInputStream(ctxt);
- if (input == NULL) {
- xmlErrMemory(ctxt, "couldn't allocate a new input stream\n");
- return(NULL);
- }
- input->base = buffer;
- input->cur = buffer;
- input->length = xmlStrlen(buffer);
- input->end = &buffer[input->length];
- return(input);
-}
-
-/**
- * xmlNewInputFromFile:
- * @ctxt: an XML parser context
- * @filename: the filename to use as entity
- *
- * Create a new input stream based on a file or an URL.
- *
- * Returns the new input stream or NULL in case of error
- */
-xmlParserInputPtr
-xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename) {
- xmlParserInputBufferPtr buf;
- xmlParserInputPtr inputStream;
- char *directory = NULL;
- xmlChar *URI = NULL;
-
- if (xmlParserDebugEntities)
- xmlGenericError(xmlGenericErrorContext,
- "new input from file: %s\n", filename);
- if (ctxt == NULL) return(NULL);
- buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
- if (buf == NULL) {
- if (filename == NULL)
- __xmlLoaderErr(ctxt,
- "failed to load external entity: NULL filename \n",
- NULL);
- else
- __xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n",
- (const char *) filename);
- return(NULL);
- }
-
- inputStream = xmlNewInputStream(ctxt);
- if (inputStream == NULL)
- return(NULL);
-
- inputStream->buf = buf;
- inputStream = xmlCheckHTTPInput(ctxt, inputStream);
- if (inputStream == NULL)
- return(NULL);
-
- if (inputStream->filename == NULL)
- URI = xmlStrdup((xmlChar *) filename);
- else
- URI = xmlStrdup((xmlChar *) inputStream->filename);
- directory = xmlParserGetDirectory((const char *) URI);
- if (inputStream->filename != NULL) xmlFree((char *)inputStream->filename);
- inputStream->filename = (char *) xmlCanonicPath((const xmlChar *) URI);
- if (URI != NULL) xmlFree((char *) URI);
- inputStream->directory = directory;
-
- xmlBufResetInput(inputStream->buf->buffer, inputStream);
- if ((ctxt->directory == NULL) && (directory != NULL))
- ctxt->directory = (char *) xmlStrdup((const xmlChar *) directory);
- return(inputStream);
-}
-
-/************************************************************************
- * *
- * Commodity functions to handle parser contexts *
- * *
- ************************************************************************/
-
-/**
- * xmlInitParserCtxt:
- * @ctxt: an XML parser context
- *
- * Initialize a parser context
- *
- * Returns 0 in case of success and -1 in case of error
- */
-
-int
-xmlInitParserCtxt(xmlParserCtxtPtr ctxt)
-{
- xmlParserInputPtr input;
-
- if(ctxt==NULL) {
- xmlErrInternal(NULL, "Got NULL parser context\n", NULL);
- return(-1);
- }
-
- xmlDefaultSAXHandlerInit();
-
- if (ctxt->dict == NULL)
- ctxt->dict = xmlDictCreate();
- if (ctxt->dict == NULL) {
- xmlErrMemory(NULL, "cannot initialize parser context\n");
- return(-1);
- }
- xmlDictSetLimit(ctxt->dict, XML_MAX_DICTIONARY_LIMIT);
-
- if (ctxt->sax == NULL)
- ctxt->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
- if (ctxt->sax == NULL) {
- xmlErrMemory(NULL, "cannot initialize parser context\n");
- return(-1);
- }
- else
- xmlSAXVersion(ctxt->sax, 2);
-
- ctxt->maxatts = 0;
- ctxt->atts = NULL;
- /* Allocate the Input stack */
- if (ctxt->inputTab == NULL) {
- ctxt->inputTab = (xmlParserInputPtr *)
- xmlMalloc(5 * sizeof(xmlParserInputPtr));
- ctxt->inputMax = 5;
- }
- if (ctxt->inputTab == NULL) {
- xmlErrMemory(NULL, "cannot initialize parser context\n");
- ctxt->inputNr = 0;
- ctxt->inputMax = 0;
- ctxt->input = NULL;
- return(-1);
- }
- while ((input = inputPop(ctxt)) != NULL) { /* Non consuming */
- xmlFreeInputStream(input);
- }
- ctxt->inputNr = 0;
- ctxt->input = NULL;
-
- ctxt->version = NULL;
- ctxt->encoding = NULL;
- ctxt->standalone = -1;
- ctxt->hasExternalSubset = 0;
- ctxt->hasPErefs = 0;
- ctxt->html = 0;
- ctxt->external = 0;
- ctxt->instate = XML_PARSER_START;
- ctxt->token = 0;
- ctxt->directory = NULL;
-
- /* Allocate the Node stack */
- if (ctxt->nodeTab == NULL) {
- ctxt->nodeTab = (xmlNodePtr *) xmlMalloc(10 * sizeof(xmlNodePtr));
- ctxt->nodeMax = 10;
- }
- if (ctxt->nodeTab == NULL) {
- xmlErrMemory(NULL, "cannot initialize parser context\n");
- ctxt->nodeNr = 0;
- ctxt->nodeMax = 0;
- ctxt->node = NULL;
- ctxt->inputNr = 0;
- ctxt->inputMax = 0;
- ctxt->input = NULL;
- return(-1);
- }
- ctxt->nodeNr = 0;
- ctxt->node = NULL;
-
- /* Allocate the Name stack */
- if (ctxt->nameTab == NULL) {
- ctxt->nameTab = (const xmlChar **) xmlMalloc(10 * sizeof(xmlChar *));
- ctxt->nameMax = 10;
- }
- if (ctxt->nameTab == NULL) {
- xmlErrMemory(NULL, "cannot initialize parser context\n");
- ctxt->nodeNr = 0;
- ctxt->nodeMax = 0;
- ctxt->node = NULL;
- ctxt->inputNr = 0;
- ctxt->inputMax = 0;
- ctxt->input = NULL;
- ctxt->nameNr = 0;
- ctxt->nameMax = 0;
- ctxt->name = NULL;
- return(-1);
- }
- ctxt->nameNr = 0;
- ctxt->name = NULL;
-
- /* Allocate the space stack */
- if (ctxt->spaceTab == NULL) {
- ctxt->spaceTab = (int *) xmlMalloc(10 * sizeof(int));
- ctxt->spaceMax = 10;
- }
- if (ctxt->spaceTab == NULL) {
- xmlErrMemory(NULL, "cannot initialize parser context\n");
- ctxt->nodeNr = 0;
- ctxt->nodeMax = 0;
- ctxt->node = NULL;
- ctxt->inputNr = 0;
- ctxt->inputMax = 0;
- ctxt->input = NULL;
- ctxt->nameNr = 0;
- ctxt->nameMax = 0;
- ctxt->name = NULL;
- ctxt->spaceNr = 0;
- ctxt->spaceMax = 0;
- ctxt->space = NULL;
- return(-1);
- }
- ctxt->spaceNr = 1;
- ctxt->spaceMax = 10;
- ctxt->spaceTab[0] = -1;
- ctxt->space = &ctxt->spaceTab[0];
- ctxt->userData = ctxt;
- ctxt->myDoc = NULL;
- ctxt->wellFormed = 1;
- ctxt->nsWellFormed = 1;
- ctxt->valid = 1;
- ctxt->loadsubset = xmlLoadExtDtdDefaultValue;
- if (ctxt->loadsubset) {
- ctxt->options |= XML_PARSE_DTDLOAD;
- }
- ctxt->validate = xmlDoValidityCheckingDefaultValue;
- ctxt->pedantic = xmlPedanticParserDefaultValue;
- if (ctxt->pedantic) {
- ctxt->options |= XML_PARSE_PEDANTIC;
- }
- ctxt->linenumbers = xmlLineNumbersDefaultValue;
- ctxt->keepBlanks = xmlKeepBlanksDefaultValue;
- if (ctxt->keepBlanks == 0) {
- ctxt->sax->ignorableWhitespace = xmlSAX2IgnorableWhitespace;
- ctxt->options |= XML_PARSE_NOBLANKS;
- }
-
- ctxt->vctxt.finishDtd = XML_CTXT_FINISH_DTD_0;
- ctxt->vctxt.userData = ctxt;
- ctxt->vctxt.error = xmlParserValidityError;
- ctxt->vctxt.warning = xmlParserValidityWarning;
- if (ctxt->validate) {
- if (xmlGetWarningsDefaultValue == 0)
- ctxt->vctxt.warning = NULL;
- else
- ctxt->vctxt.warning = xmlParserValidityWarning;
- ctxt->vctxt.nodeMax = 0;
- ctxt->options |= XML_PARSE_DTDVALID;
- }
- ctxt->replaceEntities = xmlSubstituteEntitiesDefaultValue;
- if (ctxt->replaceEntities) {
- ctxt->options |= XML_PARSE_NOENT;
- }
- ctxt->record_info = 0;
- ctxt->nbChars = 0;
- ctxt->checkIndex = 0;
- ctxt->inSubset = 0;
- ctxt->errNo = XML_ERR_OK;
- ctxt->depth = 0;
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
- ctxt->catalogs = NULL;
- ctxt->nbentities = 0;
- ctxt->sizeentities = 0;
- ctxt->sizeentcopy = 0;
- ctxt->input_id = 1;
- xmlInitNodeInfoSeq(&ctxt->node_seq);
- return(0);
-}
-
-/**
- * xmlFreeParserCtxt:
- * @ctxt: an XML parser context
- *
- * Free all the memory used by a parser context. However the parsed
- * document in ctxt->myDoc is not freed.
- */
-
-void
-xmlFreeParserCtxt(xmlParserCtxtPtr ctxt)
-{
- xmlParserInputPtr input;
-
- if (ctxt == NULL) return;
-
- while ((input = inputPop(ctxt)) != NULL) { /* Non consuming */
- xmlFreeInputStream(input);
- }
- if (ctxt->spaceTab != NULL) xmlFree(ctxt->spaceTab);
- if (ctxt->nameTab != NULL) xmlFree((xmlChar * *)ctxt->nameTab);
- if (ctxt->nodeTab != NULL) xmlFree(ctxt->nodeTab);
- if (ctxt->nodeInfoTab != NULL) xmlFree(ctxt->nodeInfoTab);
- if (ctxt->inputTab != NULL) xmlFree(ctxt->inputTab);
- if (ctxt->version != NULL) xmlFree((char *) ctxt->version);
- if (ctxt->encoding != NULL) xmlFree((char *) ctxt->encoding);
- if (ctxt->extSubURI != NULL) xmlFree((char *) ctxt->extSubURI);
- if (ctxt->extSubSystem != NULL) xmlFree((char *) ctxt->extSubSystem);
-#ifdef LIBXML_SAX1_ENABLED
- if ((ctxt->sax != NULL) &&
- (ctxt->sax != (xmlSAXHandlerPtr) &xmlDefaultSAXHandler))
-#else
- if (ctxt->sax != NULL)
-#endif /* LIBXML_SAX1_ENABLED */
- xmlFree(ctxt->sax);
- if (ctxt->directory != NULL) xmlFree((char *) ctxt->directory);
- if (ctxt->vctxt.nodeTab != NULL) xmlFree(ctxt->vctxt.nodeTab);
- if (ctxt->atts != NULL) xmlFree((xmlChar * *)ctxt->atts);
- if (ctxt->dict != NULL) xmlDictFree(ctxt->dict);
- if (ctxt->nsTab != NULL) xmlFree((char *) ctxt->nsTab);
- if (ctxt->pushTab != NULL) xmlFree(ctxt->pushTab);
- if (ctxt->attallocs != NULL) xmlFree(ctxt->attallocs);
- if (ctxt->attsDefault != NULL)
- xmlHashFree(ctxt->attsDefault, (xmlHashDeallocator) xmlFree);
- if (ctxt->attsSpecial != NULL)
- xmlHashFree(ctxt->attsSpecial, NULL);
- if (ctxt->freeElems != NULL) {
- xmlNodePtr cur, next;
-
- cur = ctxt->freeElems;
- while (cur != NULL) {
- next = cur->next;
- xmlFree(cur);
- cur = next;
- }
- }
- if (ctxt->freeAttrs != NULL) {
- xmlAttrPtr cur, next;
-
- cur = ctxt->freeAttrs;
- while (cur != NULL) {
- next = cur->next;
- xmlFree(cur);
- cur = next;
- }
- }
- /*
- * cleanup the error strings
- */
- if (ctxt->lastError.message != NULL)
- xmlFree(ctxt->lastError.message);
- if (ctxt->lastError.file != NULL)
- xmlFree(ctxt->lastError.file);
- if (ctxt->lastError.str1 != NULL)
- xmlFree(ctxt->lastError.str1);
- if (ctxt->lastError.str2 != NULL)
- xmlFree(ctxt->lastError.str2);
- if (ctxt->lastError.str3 != NULL)
- xmlFree(ctxt->lastError.str3);
-
-#ifdef LIBXML_CATALOG_ENABLED
- if (ctxt->catalogs != NULL)
- xmlCatalogFreeLocal(ctxt->catalogs);
-#endif
- xmlFree(ctxt);
-}
-
-/**
- * xmlNewParserCtxt:
- *
- * Allocate and initialize a new parser context.
- *
- * Returns the xmlParserCtxtPtr or NULL
- */
-
-xmlParserCtxtPtr
-xmlNewParserCtxt(void)
-{
- xmlParserCtxtPtr ctxt;
-
- ctxt = (xmlParserCtxtPtr) xmlMalloc(sizeof(xmlParserCtxt));
- if (ctxt == NULL) {
- xmlErrMemory(NULL, "cannot allocate parser context\n");
- return(NULL);
- }
- memset(ctxt, 0, sizeof(xmlParserCtxt));
- if (xmlInitParserCtxt(ctxt) < 0) {
- xmlFreeParserCtxt(ctxt);
- return(NULL);
- }
- return(ctxt);
-}
-
-/************************************************************************
- * *
- * Handling of node informations *
- * *
- ************************************************************************/
-
-/**
- * xmlClearParserCtxt:
- * @ctxt: an XML parser context
- *
- * Clear (release owned resources) and reinitialize a parser context
- */
-
-void
-xmlClearParserCtxt(xmlParserCtxtPtr ctxt)
-{
- if (ctxt==NULL)
- return;
- xmlClearNodeInfoSeq(&ctxt->node_seq);
- xmlCtxtReset(ctxt);
-}
-
-
-/**
- * xmlParserFindNodeInfo:
- * @ctx: an XML parser context
- * @node: an XML node within the tree
- *
- * Find the parser node info struct for a given node
- *
- * Returns an xmlParserNodeInfo block pointer or NULL
- */
-const xmlParserNodeInfo *
-xmlParserFindNodeInfo(const xmlParserCtxtPtr ctx, const xmlNodePtr node)
-{
- unsigned long pos;
-
- if ((ctx == NULL) || (node == NULL))
- return (NULL);
- /* Find position where node should be at */
- pos = xmlParserFindNodeInfoIndex(&ctx->node_seq, node);
- if (pos < ctx->node_seq.length
- && ctx->node_seq.buffer[pos].node == node)
- return &ctx->node_seq.buffer[pos];
- else
- return NULL;
-}
-
-
-/**
- * xmlInitNodeInfoSeq:
- * @seq: a node info sequence pointer
- *
- * -- Initialize (set to initial state) node info sequence
- */
-void
-xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq)
-{
- if (seq == NULL)
- return;
- seq->length = 0;
- seq->maximum = 0;
- seq->buffer = NULL;
-}
-
-/**
- * xmlClearNodeInfoSeq:
- * @seq: a node info sequence pointer
- *
- * -- Clear (release memory and reinitialize) node
- * info sequence
- */
-void
-xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq)
-{
- if (seq == NULL)
- return;
- if (seq->buffer != NULL)
- xmlFree(seq->buffer);
- xmlInitNodeInfoSeq(seq);
-}
-
-/**
- * xmlParserFindNodeInfoIndex:
- * @seq: a node info sequence pointer
- * @node: an XML node pointer
- *
- *
- * xmlParserFindNodeInfoIndex : Find the index that the info record for
- * the given node is or should be at in a sorted sequence
- *
- * Returns a long indicating the position of the record
- */
-unsigned long
-xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq,
- const xmlNodePtr node)
-{
- unsigned long upper, lower, middle;
- int found = 0;
-
- if ((seq == NULL) || (node == NULL))
- return ((unsigned long) -1);
-
- /* Do a binary search for the key */
- lower = 1;
- upper = seq->length;
- middle = 0;
- while (lower <= upper && !found) {
- middle = lower + (upper - lower) / 2;
- if (node == seq->buffer[middle - 1].node)
- found = 1;
- else if (node < seq->buffer[middle - 1].node)
- upper = middle - 1;
- else
- lower = middle + 1;
- }
-
- /* Return position */
- if (middle == 0 || seq->buffer[middle - 1].node < node)
- return middle;
- else
- return middle - 1;
-}
-
-
-/**
- * xmlParserAddNodeInfo:
- * @ctxt: an XML parser context
- * @info: a node info sequence pointer
- *
- * Insert node info record into the sorted sequence
- */
-void
-xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt,
- const xmlParserNodeInfoPtr info)
-{
- unsigned long pos;
-
- if ((ctxt == NULL) || (info == NULL)) return;
-
- /* Find pos and check to see if node is already in the sequence */
- pos = xmlParserFindNodeInfoIndex(&ctxt->node_seq, (xmlNodePtr)
- info->node);
-
- if ((pos < ctxt->node_seq.length) &&
- (ctxt->node_seq.buffer != NULL) &&
- (ctxt->node_seq.buffer[pos].node == info->node)) {
- ctxt->node_seq.buffer[pos] = *info;
- }
-
- /* Otherwise, we need to add new node to buffer */
- else {
- if ((ctxt->node_seq.length + 1 > ctxt->node_seq.maximum) ||
- (ctxt->node_seq.buffer == NULL)) {
- xmlParserNodeInfo *tmp_buffer;
- unsigned int byte_size;
-
- if (ctxt->node_seq.maximum == 0)
- ctxt->node_seq.maximum = 2;
- byte_size = (sizeof(*ctxt->node_seq.buffer) *
- (2 * ctxt->node_seq.maximum));
-
- if (ctxt->node_seq.buffer == NULL)
- tmp_buffer = (xmlParserNodeInfo *) xmlMalloc(byte_size);
- else
- tmp_buffer =
- (xmlParserNodeInfo *) xmlRealloc(ctxt->node_seq.buffer,
- byte_size);
-
- if (tmp_buffer == NULL) {
- xmlErrMemory(ctxt, "failed to allocate buffer\n");
- return;
- }
- ctxt->node_seq.buffer = tmp_buffer;
- ctxt->node_seq.maximum *= 2;
- }
-
- /* If position is not at end, move elements out of the way */
- if (pos != ctxt->node_seq.length) {
- unsigned long i;
-
- for (i = ctxt->node_seq.length; i > pos; i--)
- ctxt->node_seq.buffer[i] = ctxt->node_seq.buffer[i - 1];
- }
-
- /* Copy element and increase length */
- ctxt->node_seq.buffer[pos] = *info;
- ctxt->node_seq.length++;
- }
-}
-
-/************************************************************************
- * *
- * Defaults settings *
- * *
- ************************************************************************/
-/**
- * xmlPedanticParserDefault:
- * @val: int 0 or 1
- *
- * Set and return the previous value for enabling pedantic warnings.
- *
- * Returns the last value for 0 for no substitution, 1 for substitution.
- */
-
-int
-xmlPedanticParserDefault(int val) {
- int old = xmlPedanticParserDefaultValue;
-
- xmlPedanticParserDefaultValue = val;
- return(old);
-}
-
-/**
- * xmlLineNumbersDefault:
- * @val: int 0 or 1
- *
- * Set and return the previous value for enabling line numbers in elements
- * contents. This may break on old application and is turned off by default.
- *
- * Returns the last value for 0 for no substitution, 1 for substitution.
- */
-
-int
-xmlLineNumbersDefault(int val) {
- int old = xmlLineNumbersDefaultValue;
-
- xmlLineNumbersDefaultValue = val;
- return(old);
-}
-
-/**
- * xmlSubstituteEntitiesDefault:
- * @val: int 0 or 1
- *
- * Set and return the previous value for default entity support.
- * Initially the parser always keep entity references instead of substituting
- * entity values in the output. This function has to be used to change the
- * default parser behavior
- * SAX::substituteEntities() has to be used for changing that on a file by
- * file basis.
- *
- * Returns the last value for 0 for no substitution, 1 for substitution.
- */
-
-int
-xmlSubstituteEntitiesDefault(int val) {
- int old = xmlSubstituteEntitiesDefaultValue;
-
- xmlSubstituteEntitiesDefaultValue = val;
- return(old);
-}
-
-/**
- * xmlKeepBlanksDefault:
- * @val: int 0 or 1
- *
- * Set and return the previous value for default blanks text nodes support.
- * The 1.x version of the parser used an heuristic to try to detect
- * ignorable white spaces. As a result the SAX callback was generating
- * xmlSAX2IgnorableWhitespace() callbacks instead of characters() one, and when
- * using the DOM output text nodes containing those blanks were not generated.
- * The 2.x and later version will switch to the XML standard way and
- * ignorableWhitespace() are only generated when running the parser in
- * validating mode and when the current element doesn't allow CDATA or
- * mixed content.
- * This function is provided as a way to force the standard behavior
- * on 1.X libs and to switch back to the old mode for compatibility when
- * running 1.X client code on 2.X . Upgrade of 1.X code should be done
- * by using xmlIsBlankNode() commodity function to detect the "empty"
- * nodes generated.
- * This value also affect autogeneration of indentation when saving code
- * if blanks sections are kept, indentation is not generated.
- *
- * Returns the last value for 0 for no substitution, 1 for substitution.
- */
-
-int
-xmlKeepBlanksDefault(int val) {
- int old = xmlKeepBlanksDefaultValue;
-
- xmlKeepBlanksDefaultValue = val;
- if (!val) xmlIndentTreeOutput = 1;
- return(old);
-}
-
-#define bottom_parserInternals
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/pattern.c b/external/libxml2_android/jni/libxml2/pattern.c
deleted file mode 100644
index 0eb8d812..00000000
--- a/external/libxml2_android/jni/libxml2/pattern.c
+++ /dev/null
@@ -1,2618 +0,0 @@
-/*
- * pattern.c: Implemetation of selectors for nodes
- *
- * Reference:
- * http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/
- * to some extent
- * http://www.w3.org/TR/1999/REC-xml-19991116
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-/*
- * TODO:
- * - compilation flags to check for specific syntaxes
- * using flags of xmlPatterncompile()
- * - making clear how pattern starting with / or . need to be handled,
- * currently push(NULL, NULL) means a reset of the streaming context
- * and indicating we are on / (the document node), probably need
- * something similar for .
- * - get rid of the "compile" starting with lowercase
- * - DONE (2006-05-16): get rid of the Strdup/Strndup in case of dictionary
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/hash.h>
-#include <libxml/dict.h>
-#include <libxml/xmlerror.h>
-#include <libxml/parserInternals.h>
-#include <libxml/pattern.h>
-
-#ifdef LIBXML_PATTERN_ENABLED
-
-/* #define DEBUG_STREAMING */
-
-#ifdef ERROR
-#undef ERROR
-#endif
-#define ERROR(a, b, c, d)
-#define ERROR5(a, b, c, d, e)
-
-#define XML_STREAM_STEP_DESC 1
-#define XML_STREAM_STEP_FINAL 2
-#define XML_STREAM_STEP_ROOT 4
-#define XML_STREAM_STEP_ATTR 8
-#define XML_STREAM_STEP_NODE 16
-#define XML_STREAM_STEP_IN_SET 32
-
-/*
-* NOTE: Those private flags (XML_STREAM_xxx) are used
-* in _xmlStreamCtxt->flag. They extend the public
-* xmlPatternFlags, so be carefull not to interfere with the
-* reserved values for xmlPatternFlags.
-*/
-#define XML_STREAM_FINAL_IS_ANY_NODE 1<<14
-#define XML_STREAM_FROM_ROOT 1<<15
-#define XML_STREAM_DESC 1<<16
-
-/*
-* XML_STREAM_ANY_NODE is used for comparison against
-* xmlElementType enums, to indicate a node of any type.
-*/
-#define XML_STREAM_ANY_NODE 100
-
-#define XML_PATTERN_NOTPATTERN (XML_PATTERN_XPATH | \
- XML_PATTERN_XSSEL | \
- XML_PATTERN_XSFIELD)
-
-#define XML_STREAM_XS_IDC(c) ((c)->flags & \
- (XML_PATTERN_XSSEL | XML_PATTERN_XSFIELD))
-
-#define XML_STREAM_XS_IDC_SEL(c) ((c)->flags & XML_PATTERN_XSSEL)
-
-#define XML_STREAM_XS_IDC_FIELD(c) ((c)->flags & XML_PATTERN_XSFIELD)
-
-#define XML_PAT_COPY_NSNAME(c, r, nsname) \
- if ((c)->comp->dict) \
- r = (xmlChar *) xmlDictLookup((c)->comp->dict, BAD_CAST nsname, -1); \
- else r = xmlStrdup(BAD_CAST nsname);
-
-#define XML_PAT_FREE_STRING(c, r) if ((c)->comp->dict == NULL) xmlFree(r);
-
-typedef struct _xmlStreamStep xmlStreamStep;
-typedef xmlStreamStep *xmlStreamStepPtr;
-struct _xmlStreamStep {
- int flags; /* properties of that step */
- const xmlChar *name; /* first string value if NULL accept all */
- const xmlChar *ns; /* second string value */
- int nodeType; /* type of node */
-};
-
-typedef struct _xmlStreamComp xmlStreamComp;
-typedef xmlStreamComp *xmlStreamCompPtr;
-struct _xmlStreamComp {
- xmlDict *dict; /* the dictionary if any */
- int nbStep; /* number of steps in the automata */
- int maxStep; /* allocated number of steps */
- xmlStreamStepPtr steps; /* the array of steps */
- int flags;
-};
-
-struct _xmlStreamCtxt {
- struct _xmlStreamCtxt *next;/* link to next sub pattern if | */
- xmlStreamCompPtr comp; /* the compiled stream */
- int nbState; /* number of states in the automata */
- int maxState; /* allocated number of states */
- int level; /* how deep are we ? */
- int *states; /* the array of step indexes */
- int flags; /* validation options */
- int blockLevel;
-};
-
-static void xmlFreeStreamComp(xmlStreamCompPtr comp);
-
-/*
- * Types are private:
- */
-
-typedef enum {
- XML_OP_END=0,
- XML_OP_ROOT,
- XML_OP_ELEM,
- XML_OP_CHILD,
- XML_OP_ATTR,
- XML_OP_PARENT,
- XML_OP_ANCESTOR,
- XML_OP_NS,
- XML_OP_ALL
-} xmlPatOp;
-
-
-typedef struct _xmlStepState xmlStepState;
-typedef xmlStepState *xmlStepStatePtr;
-struct _xmlStepState {
- int step;
- xmlNodePtr node;
-};
-
-typedef struct _xmlStepStates xmlStepStates;
-typedef xmlStepStates *xmlStepStatesPtr;
-struct _xmlStepStates {
- int nbstates;
- int maxstates;
- xmlStepStatePtr states;
-};
-
-typedef struct _xmlStepOp xmlStepOp;
-typedef xmlStepOp *xmlStepOpPtr;
-struct _xmlStepOp {
- xmlPatOp op;
- const xmlChar *value;
- const xmlChar *value2; /* The namespace name */
-};
-
-#define PAT_FROM_ROOT (1<<8)
-#define PAT_FROM_CUR (1<<9)
-
-struct _xmlPattern {
- void *data; /* the associated template */
- xmlDictPtr dict; /* the optional dictionary */
- struct _xmlPattern *next; /* next pattern if | is used */
- const xmlChar *pattern; /* the pattern */
- int flags; /* flags */
- int nbStep;
- int maxStep;
- xmlStepOpPtr steps; /* ops for computation */
- xmlStreamCompPtr stream; /* the streaming data if any */
-};
-
-typedef struct _xmlPatParserContext xmlPatParserContext;
-typedef xmlPatParserContext *xmlPatParserContextPtr;
-struct _xmlPatParserContext {
- const xmlChar *cur; /* the current char being parsed */
- const xmlChar *base; /* the full expression */
- int error; /* error code */
- xmlDictPtr dict; /* the dictionary if any */
- xmlPatternPtr comp; /* the result */
- xmlNodePtr elem; /* the current node if any */
- const xmlChar **namespaces; /* the namespaces definitions */
- int nb_namespaces; /* the number of namespaces */
-};
-
-/************************************************************************
- * *
- * Type functions *
- * *
- ************************************************************************/
-
-/**
- * xmlNewPattern:
- *
- * Create a new XSLT Pattern
- *
- * Returns the newly allocated xmlPatternPtr or NULL in case of error
- */
-static xmlPatternPtr
-xmlNewPattern(void) {
- xmlPatternPtr cur;
-
- cur = (xmlPatternPtr) xmlMalloc(sizeof(xmlPattern));
- if (cur == NULL) {
- ERROR(NULL, NULL, NULL,
- "xmlNewPattern : malloc failed\n");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlPattern));
- cur->maxStep = 10;
- cur->steps = (xmlStepOpPtr) xmlMalloc(cur->maxStep * sizeof(xmlStepOp));
- if (cur->steps == NULL) {
- xmlFree(cur);
- ERROR(NULL, NULL, NULL,
- "xmlNewPattern : malloc failed\n");
- return(NULL);
- }
- return(cur);
-}
-
-/**
- * xmlFreePattern:
- * @comp: an XSLT comp
- *
- * Free up the memory allocated by @comp
- */
-void
-xmlFreePattern(xmlPatternPtr comp) {
- xmlStepOpPtr op;
- int i;
-
- if (comp == NULL)
- return;
- if (comp->next != NULL)
- xmlFreePattern(comp->next);
- if (comp->stream != NULL)
- xmlFreeStreamComp(comp->stream);
- if (comp->pattern != NULL)
- xmlFree((xmlChar *)comp->pattern);
- if (comp->steps != NULL) {
- if (comp->dict == NULL) {
- for (i = 0;i < comp->nbStep;i++) {
- op = &comp->steps[i];
- if (op->value != NULL)
- xmlFree((xmlChar *) op->value);
- if (op->value2 != NULL)
- xmlFree((xmlChar *) op->value2);
- }
- }
- xmlFree(comp->steps);
- }
- if (comp->dict != NULL)
- xmlDictFree(comp->dict);
-
- memset(comp, -1, sizeof(xmlPattern));
- xmlFree(comp);
-}
-
-/**
- * xmlFreePatternList:
- * @comp: an XSLT comp list
- *
- * Free up the memory allocated by all the elements of @comp
- */
-void
-xmlFreePatternList(xmlPatternPtr comp) {
- xmlPatternPtr cur;
-
- while (comp != NULL) {
- cur = comp;
- comp = comp->next;
- cur->next = NULL;
- xmlFreePattern(cur);
- }
-}
-
-/**
- * xmlNewPatParserContext:
- * @pattern: the pattern context
- * @dict: the inherited dictionary or NULL
- * @namespaces: the prefix definitions, array of [URI, prefix] terminated
- * with [NULL, NULL] or NULL if no namespace is used
- *
- * Create a new XML pattern parser context
- *
- * Returns the newly allocated xmlPatParserContextPtr or NULL in case of error
- */
-static xmlPatParserContextPtr
-xmlNewPatParserContext(const xmlChar *pattern, xmlDictPtr dict,
- const xmlChar **namespaces) {
- xmlPatParserContextPtr cur;
-
- if (pattern == NULL)
- return(NULL);
-
- cur = (xmlPatParserContextPtr) xmlMalloc(sizeof(xmlPatParserContext));
- if (cur == NULL) {
- ERROR(NULL, NULL, NULL,
- "xmlNewPatParserContext : malloc failed\n");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlPatParserContext));
- cur->dict = dict;
- cur->cur = pattern;
- cur->base = pattern;
- if (namespaces != NULL) {
- int i;
- for (i = 0;namespaces[2 * i] != NULL;i++)
- ;
- cur->nb_namespaces = i;
- } else {
- cur->nb_namespaces = 0;
- }
- cur->namespaces = namespaces;
- return(cur);
-}
-
-/**
- * xmlFreePatParserContext:
- * @ctxt: an XSLT parser context
- *
- * Free up the memory allocated by @ctxt
- */
-static void
-xmlFreePatParserContext(xmlPatParserContextPtr ctxt) {
- if (ctxt == NULL)
- return;
- memset(ctxt, -1, sizeof(xmlPatParserContext));
- xmlFree(ctxt);
-}
-
-/**
- * xmlPatternAdd:
- * @comp: the compiled match expression
- * @op: an op
- * @value: the first value
- * @value2: the second value
- *
- * Add a step to an XSLT Compiled Match
- *
- * Returns -1 in case of failure, 0 otherwise.
- */
-static int
-xmlPatternAdd(xmlPatParserContextPtr ctxt ATTRIBUTE_UNUSED,
- xmlPatternPtr comp,
- xmlPatOp op, xmlChar * value, xmlChar * value2)
-{
- if (comp->nbStep >= comp->maxStep) {
- xmlStepOpPtr temp;
- temp = (xmlStepOpPtr) xmlRealloc(comp->steps, comp->maxStep * 2 *
- sizeof(xmlStepOp));
- if (temp == NULL) {
- ERROR(ctxt, NULL, NULL,
- "xmlPatternAdd: realloc failed\n");
- return (-1);
- }
- comp->steps = temp;
- comp->maxStep *= 2;
- }
- comp->steps[comp->nbStep].op = op;
- comp->steps[comp->nbStep].value = value;
- comp->steps[comp->nbStep].value2 = value2;
- comp->nbStep++;
- return (0);
-}
-
-#if 0
-/**
- * xsltSwapTopPattern:
- * @comp: the compiled match expression
- *
- * reverse the two top steps.
- */
-static void
-xsltSwapTopPattern(xmlPatternPtr comp) {
- int i;
- int j = comp->nbStep - 1;
-
- if (j > 0) {
- register const xmlChar *tmp;
- register xmlPatOp op;
- i = j - 1;
- tmp = comp->steps[i].value;
- comp->steps[i].value = comp->steps[j].value;
- comp->steps[j].value = tmp;
- tmp = comp->steps[i].value2;
- comp->steps[i].value2 = comp->steps[j].value2;
- comp->steps[j].value2 = tmp;
- op = comp->steps[i].op;
- comp->steps[i].op = comp->steps[j].op;
- comp->steps[j].op = op;
- }
-}
-#endif
-
-/**
- * xmlReversePattern:
- * @comp: the compiled match expression
- *
- * reverse all the stack of expressions
- *
- * returns 0 in case of success and -1 in case of error.
- */
-static int
-xmlReversePattern(xmlPatternPtr comp) {
- int i, j;
-
- /*
- * remove the leading // for //a or .//a
- */
- if ((comp->nbStep > 0) && (comp->steps[0].op == XML_OP_ANCESTOR)) {
- for (i = 0, j = 1;j < comp->nbStep;i++,j++) {
- comp->steps[i].value = comp->steps[j].value;
- comp->steps[i].value2 = comp->steps[j].value2;
- comp->steps[i].op = comp->steps[j].op;
- }
- comp->nbStep--;
- }
- if (comp->nbStep >= comp->maxStep) {
- xmlStepOpPtr temp;
- temp = (xmlStepOpPtr) xmlRealloc(comp->steps, comp->maxStep * 2 *
- sizeof(xmlStepOp));
- if (temp == NULL) {
- ERROR(ctxt, NULL, NULL,
- "xmlReversePattern: realloc failed\n");
- return (-1);
- }
- comp->steps = temp;
- comp->maxStep *= 2;
- }
- i = 0;
- j = comp->nbStep - 1;
- while (j > i) {
- register const xmlChar *tmp;
- register xmlPatOp op;
- tmp = comp->steps[i].value;
- comp->steps[i].value = comp->steps[j].value;
- comp->steps[j].value = tmp;
- tmp = comp->steps[i].value2;
- comp->steps[i].value2 = comp->steps[j].value2;
- comp->steps[j].value2 = tmp;
- op = comp->steps[i].op;
- comp->steps[i].op = comp->steps[j].op;
- comp->steps[j].op = op;
- j--;
- i++;
- }
- comp->steps[comp->nbStep].value = NULL;
- comp->steps[comp->nbStep].value2 = NULL;
- comp->steps[comp->nbStep++].op = XML_OP_END;
- return(0);
-}
-
-/************************************************************************
- * *
- * The interpreter for the precompiled patterns *
- * *
- ************************************************************************/
-
-static int
-xmlPatPushState(xmlStepStates *states, int step, xmlNodePtr node) {
- if ((states->states == NULL) || (states->maxstates <= 0)) {
- states->maxstates = 4;
- states->nbstates = 0;
- states->states = xmlMalloc(4 * sizeof(xmlStepState));
- }
- else if (states->maxstates <= states->nbstates) {
- xmlStepState *tmp;
-
- tmp = (xmlStepStatePtr) xmlRealloc(states->states,
- 2 * states->maxstates * sizeof(xmlStepState));
- if (tmp == NULL)
- return(-1);
- states->states = tmp;
- states->maxstates *= 2;
- }
- states->states[states->nbstates].step = step;
- states->states[states->nbstates++].node = node;
-#if 0
- fprintf(stderr, "Push: %d, %s\n", step, node->name);
-#endif
- return(0);
-}
-
-/**
- * xmlPatMatch:
- * @comp: the precompiled pattern
- * @node: a node
- *
- * Test whether the node matches the pattern
- *
- * Returns 1 if it matches, 0 if it doesn't and -1 in case of failure
- */
-static int
-xmlPatMatch(xmlPatternPtr comp, xmlNodePtr node) {
- int i;
- xmlStepOpPtr step;
- xmlStepStates states = {0, 0, NULL}; /* // may require backtrack */
-
- if ((comp == NULL) || (node == NULL)) return(-1);
- i = 0;
-restart:
- for (;i < comp->nbStep;i++) {
- step = &comp->steps[i];
- switch (step->op) {
- case XML_OP_END:
- goto found;
- case XML_OP_ROOT:
- if (node->type == XML_NAMESPACE_DECL)
- goto rollback;
- node = node->parent;
- if ((node->type == XML_DOCUMENT_NODE) ||
-#ifdef LIBXML_DOCB_ENABLED
- (node->type == XML_DOCB_DOCUMENT_NODE) ||
-#endif
- (node->type == XML_HTML_DOCUMENT_NODE))
- continue;
- goto rollback;
- case XML_OP_ELEM:
- if (node->type != XML_ELEMENT_NODE)
- goto rollback;
- if (step->value == NULL)
- continue;
- if (step->value[0] != node->name[0])
- goto rollback;
- if (!xmlStrEqual(step->value, node->name))
- goto rollback;
-
- /* Namespace test */
- if (node->ns == NULL) {
- if (step->value2 != NULL)
- goto rollback;
- } else if (node->ns->href != NULL) {
- if (step->value2 == NULL)
- goto rollback;
- if (!xmlStrEqual(step->value2, node->ns->href))
- goto rollback;
- }
- continue;
- case XML_OP_CHILD: {
- xmlNodePtr lst;
-
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_DOCUMENT_NODE) &&
-#ifdef LIBXML_DOCB_ENABLED
- (node->type != XML_DOCB_DOCUMENT_NODE) &&
-#endif
- (node->type != XML_HTML_DOCUMENT_NODE))
- goto rollback;
-
- lst = node->children;
-
- if (step->value != NULL) {
- while (lst != NULL) {
- if ((lst->type == XML_ELEMENT_NODE) &&
- (step->value[0] == lst->name[0]) &&
- (xmlStrEqual(step->value, lst->name)))
- break;
- lst = lst->next;
- }
- if (lst != NULL)
- continue;
- }
- goto rollback;
- }
- case XML_OP_ATTR:
- if (node->type != XML_ATTRIBUTE_NODE)
- goto rollback;
- if (step->value != NULL) {
- if (step->value[0] != node->name[0])
- goto rollback;
- if (!xmlStrEqual(step->value, node->name))
- goto rollback;
- }
- /* Namespace test */
- if (node->ns == NULL) {
- if (step->value2 != NULL)
- goto rollback;
- } else if (step->value2 != NULL) {
- if (!xmlStrEqual(step->value2, node->ns->href))
- goto rollback;
- }
- continue;
- case XML_OP_PARENT:
- if ((node->type == XML_DOCUMENT_NODE) ||
- (node->type == XML_HTML_DOCUMENT_NODE) ||
-#ifdef LIBXML_DOCB_ENABLED
- (node->type == XML_DOCB_DOCUMENT_NODE) ||
-#endif
- (node->type == XML_NAMESPACE_DECL))
- goto rollback;
- node = node->parent;
- if (node == NULL)
- goto rollback;
- if (step->value == NULL)
- continue;
- if (step->value[0] != node->name[0])
- goto rollback;
- if (!xmlStrEqual(step->value, node->name))
- goto rollback;
- /* Namespace test */
- if (node->ns == NULL) {
- if (step->value2 != NULL)
- goto rollback;
- } else if (node->ns->href != NULL) {
- if (step->value2 == NULL)
- goto rollback;
- if (!xmlStrEqual(step->value2, node->ns->href))
- goto rollback;
- }
- continue;
- case XML_OP_ANCESTOR:
- /* TODO: implement coalescing of ANCESTOR/NODE ops */
- if (step->value == NULL) {
- i++;
- step = &comp->steps[i];
- if (step->op == XML_OP_ROOT)
- goto found;
- if (step->op != XML_OP_ELEM)
- goto rollback;
- if (step->value == NULL)
- return(-1);
- }
- if (node == NULL)
- goto rollback;
- if ((node->type == XML_DOCUMENT_NODE) ||
- (node->type == XML_HTML_DOCUMENT_NODE) ||
-#ifdef LIBXML_DOCB_ENABLED
- (node->type == XML_DOCB_DOCUMENT_NODE) ||
-#endif
- (node->type == XML_NAMESPACE_DECL))
- goto rollback;
- node = node->parent;
- while (node != NULL) {
- if ((node->type == XML_ELEMENT_NODE) &&
- (step->value[0] == node->name[0]) &&
- (xmlStrEqual(step->value, node->name))) {
- /* Namespace test */
- if (node->ns == NULL) {
- if (step->value2 == NULL)
- break;
- } else if (node->ns->href != NULL) {
- if ((step->value2 != NULL) &&
- (xmlStrEqual(step->value2, node->ns->href)))
- break;
- }
- }
- node = node->parent;
- }
- if (node == NULL)
- goto rollback;
- /*
- * prepare a potential rollback from here
- * for ancestors of that node.
- */
- if (step->op == XML_OP_ANCESTOR)
- xmlPatPushState(&states, i, node);
- else
- xmlPatPushState(&states, i - 1, node);
- continue;
- case XML_OP_NS:
- if (node->type != XML_ELEMENT_NODE)
- goto rollback;
- if (node->ns == NULL) {
- if (step->value != NULL)
- goto rollback;
- } else if (node->ns->href != NULL) {
- if (step->value == NULL)
- goto rollback;
- if (!xmlStrEqual(step->value, node->ns->href))
- goto rollback;
- }
- break;
- case XML_OP_ALL:
- if (node->type != XML_ELEMENT_NODE)
- goto rollback;
- break;
- }
- }
-found:
- if (states.states != NULL) {
- /* Free the rollback states */
- xmlFree(states.states);
- }
- return(1);
-rollback:
- /* got an error try to rollback */
- if (states.states == NULL)
- return(0);
- if (states.nbstates <= 0) {
- xmlFree(states.states);
- return(0);
- }
- states.nbstates--;
- i = states.states[states.nbstates].step;
- node = states.states[states.nbstates].node;
-#if 0
- fprintf(stderr, "Pop: %d, %s\n", i, node->name);
-#endif
- goto restart;
-}
-
-/************************************************************************
- * *
- * Dedicated parser for templates *
- * *
- ************************************************************************/
-
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-#define CUR (*ctxt->cur)
-#define SKIP(val) ctxt->cur += (val)
-#define NXT(val) ctxt->cur[(val)]
-#define PEEKPREV(val) ctxt->cur[-(val)]
-#define CUR_PTR ctxt->cur
-
-#define SKIP_BLANKS \
- while (IS_BLANK_CH(CUR)) NEXT
-
-#define CURRENT (*ctxt->cur)
-#define NEXT ((*ctxt->cur) ? ctxt->cur++: ctxt->cur)
-
-
-#define PUSH(op, val, val2) \
- if (xmlPatternAdd(ctxt, ctxt->comp, (op), (val), (val2))) goto error;
-
-#define XSLT_ERROR(X) \
- { xsltError(ctxt, __FILE__, __LINE__, X); \
- ctxt->error = (X); return; }
-
-#define XSLT_ERROR0(X) \
- { xsltError(ctxt, __FILE__, __LINE__, X); \
- ctxt->error = (X); return(0); }
-
-#if 0
-/**
- * xmlPatScanLiteral:
- * @ctxt: the XPath Parser context
- *
- * Parse an XPath Litteral:
- *
- * [29] Literal ::= '"' [^"]* '"'
- * | "'" [^']* "'"
- *
- * Returns the Literal parsed or NULL
- */
-
-static xmlChar *
-xmlPatScanLiteral(xmlPatParserContextPtr ctxt) {
- const xmlChar *q, *cur;
- xmlChar *ret = NULL;
- int val, len;
-
- SKIP_BLANKS;
- if (CUR == '"') {
- NEXT;
- cur = q = CUR_PTR;
- val = xmlStringCurrentChar(NULL, cur, &len);
- while ((IS_CHAR(val)) && (val != '"')) {
- cur += len;
- val = xmlStringCurrentChar(NULL, cur, &len);
- }
- if (!IS_CHAR(val)) {
- ctxt->error = 1;
- return(NULL);
- } else {
- if (ctxt->dict)
- ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
- else
- ret = xmlStrndup(q, cur - q);
- }
- cur += len;
- CUR_PTR = cur;
- } else if (CUR == '\'') {
- NEXT;
- cur = q = CUR_PTR;
- val = xmlStringCurrentChar(NULL, cur, &len);
- while ((IS_CHAR(val)) && (val != '\'')) {
- cur += len;
- val = xmlStringCurrentChar(NULL, cur, &len);
- }
- if (!IS_CHAR(val)) {
- ctxt->error = 1;
- return(NULL);
- } else {
- if (ctxt->dict)
- ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
- else
- ret = xmlStrndup(q, cur - q);
- }
- cur += len;
- CUR_PTR = cur;
- } else {
- /* XP_ERROR(XPATH_START_LITERAL_ERROR); */
- ctxt->error = 1;
- return(NULL);
- }
- return(ret);
-}
-#endif
-
-/**
- * xmlPatScanName:
- * @ctxt: the XPath Parser context
- *
- * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' |
- * CombiningChar | Extender
- *
- * [5] Name ::= (Letter | '_' | ':') (NameChar)*
- *
- * [6] Names ::= Name (S Name)*
- *
- * Returns the Name parsed or NULL
- */
-
-static xmlChar *
-xmlPatScanName(xmlPatParserContextPtr ctxt) {
- const xmlChar *q, *cur;
- xmlChar *ret = NULL;
- int val, len;
-
- SKIP_BLANKS;
-
- cur = q = CUR_PTR;
- val = xmlStringCurrentChar(NULL, cur, &len);
- if (!IS_LETTER(val) && (val != '_') && (val != ':'))
- return(NULL);
-
- while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
- (val == '.') || (val == '-') ||
- (val == '_') ||
- (IS_COMBINING(val)) ||
- (IS_EXTENDER(val))) {
- cur += len;
- val = xmlStringCurrentChar(NULL, cur, &len);
- }
- if (ctxt->dict)
- ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
- else
- ret = xmlStrndup(q, cur - q);
- CUR_PTR = cur;
- return(ret);
-}
-
-/**
- * xmlPatScanNCName:
- * @ctxt: the XPath Parser context
- *
- * Parses a non qualified name
- *
- * Returns the Name parsed or NULL
- */
-
-static xmlChar *
-xmlPatScanNCName(xmlPatParserContextPtr ctxt) {
- const xmlChar *q, *cur;
- xmlChar *ret = NULL;
- int val, len;
-
- SKIP_BLANKS;
-
- cur = q = CUR_PTR;
- val = xmlStringCurrentChar(NULL, cur, &len);
- if (!IS_LETTER(val) && (val != '_'))
- return(NULL);
-
- while ((IS_LETTER(val)) || (IS_DIGIT(val)) ||
- (val == '.') || (val == '-') ||
- (val == '_') ||
- (IS_COMBINING(val)) ||
- (IS_EXTENDER(val))) {
- cur += len;
- val = xmlStringCurrentChar(NULL, cur, &len);
- }
- if (ctxt->dict)
- ret = (xmlChar *) xmlDictLookup(ctxt->dict, q, cur - q);
- else
- ret = xmlStrndup(q, cur - q);
- CUR_PTR = cur;
- return(ret);
-}
-
-#if 0
-/**
- * xmlPatScanQName:
- * @ctxt: the XPath Parser context
- * @prefix: the place to store the prefix
- *
- * Parse a qualified name
- *
- * Returns the Name parsed or NULL
- */
-
-static xmlChar *
-xmlPatScanQName(xmlPatParserContextPtr ctxt, xmlChar **prefix) {
- xmlChar *ret = NULL;
-
- *prefix = NULL;
- ret = xmlPatScanNCName(ctxt);
- if (CUR == ':') {
- *prefix = ret;
- NEXT;
- ret = xmlPatScanNCName(ctxt);
- }
- return(ret);
-}
-#endif
-
-/**
- * xmlCompileAttributeTest:
- * @ctxt: the compilation context
- *
- * Compile an attribute test.
- */
-static void
-xmlCompileAttributeTest(xmlPatParserContextPtr ctxt) {
- xmlChar *token = NULL;
- xmlChar *name = NULL;
- xmlChar *URL = NULL;
-
- SKIP_BLANKS;
- name = xmlPatScanNCName(ctxt);
- if (name == NULL) {
- if (CUR == '*') {
- PUSH(XML_OP_ATTR, NULL, NULL);
- NEXT;
- } else {
- ERROR(NULL, NULL, NULL,
- "xmlCompileAttributeTest : Name expected\n");
- ctxt->error = 1;
- }
- return;
- }
- if (CUR == ':') {
- int i;
- xmlChar *prefix = name;
-
- NEXT;
-
- if (IS_BLANK_CH(CUR)) {
- ERROR5(NULL, NULL, NULL, "Invalid QName.\n", NULL);
- XML_PAT_FREE_STRING(ctxt, prefix);
- ctxt->error = 1;
- goto error;
- }
- /*
- * This is a namespace match
- */
- token = xmlPatScanName(ctxt);
- if ((prefix[0] == 'x') &&
- (prefix[1] == 'm') &&
- (prefix[2] == 'l') &&
- (prefix[3] == 0))
- {
- XML_PAT_COPY_NSNAME(ctxt, URL, XML_XML_NAMESPACE);
- } else {
- for (i = 0;i < ctxt->nb_namespaces;i++) {
- if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
- XML_PAT_COPY_NSNAME(ctxt, URL, ctxt->namespaces[2 * i])
- break;
- }
- }
- if (i >= ctxt->nb_namespaces) {
- ERROR5(NULL, NULL, NULL,
- "xmlCompileAttributeTest : no namespace bound to prefix %s\n",
- prefix);
- XML_PAT_FREE_STRING(ctxt, prefix);
- ctxt->error = 1;
- goto error;
- }
- }
- XML_PAT_FREE_STRING(ctxt, prefix);
- if (token == NULL) {
- if (CUR == '*') {
- NEXT;
- PUSH(XML_OP_ATTR, NULL, URL);
- } else {
- ERROR(NULL, NULL, NULL,
- "xmlCompileAttributeTest : Name expected\n");
- ctxt->error = 1;
- goto error;
- }
- } else {
- PUSH(XML_OP_ATTR, token, URL);
- }
- } else {
- PUSH(XML_OP_ATTR, name, NULL);
- }
- return;
-error:
- if (URL != NULL)
- XML_PAT_FREE_STRING(ctxt, URL)
- if (token != NULL)
- XML_PAT_FREE_STRING(ctxt, token);
-}
-
-/**
- * xmlCompileStepPattern:
- * @ctxt: the compilation context
- *
- * Compile the Step Pattern and generates a precompiled
- * form suitable for fast matching.
- *
- * [3] Step ::= '.' | NameTest
- * [4] NameTest ::= QName | '*' | NCName ':' '*'
- */
-
-static void
-xmlCompileStepPattern(xmlPatParserContextPtr ctxt) {
- xmlChar *token = NULL;
- xmlChar *name = NULL;
- xmlChar *URL = NULL;
- int hasBlanks = 0;
-
- SKIP_BLANKS;
- if (CUR == '.') {
- /*
- * Context node.
- */
- NEXT;
- PUSH(XML_OP_ELEM, NULL, NULL);
- return;
- }
- if (CUR == '@') {
- /*
- * Attribute test.
- */
- if (XML_STREAM_XS_IDC_SEL(ctxt->comp)) {
- ERROR5(NULL, NULL, NULL,
- "Unexpected attribute axis in '%s'.\n", ctxt->base);
- ctxt->error = 1;
- return;
- }
- NEXT;
- xmlCompileAttributeTest(ctxt);
- if (ctxt->error != 0)
- goto error;
- return;
- }
- name = xmlPatScanNCName(ctxt);
- if (name == NULL) {
- if (CUR == '*') {
- NEXT;
- PUSH(XML_OP_ALL, NULL, NULL);
- return;
- } else {
- ERROR(NULL, NULL, NULL,
- "xmlCompileStepPattern : Name expected\n");
- ctxt->error = 1;
- return;
- }
- }
- if (IS_BLANK_CH(CUR)) {
- hasBlanks = 1;
- SKIP_BLANKS;
- }
- if (CUR == ':') {
- NEXT;
- if (CUR != ':') {
- xmlChar *prefix = name;
- int i;
-
- if (hasBlanks || IS_BLANK_CH(CUR)) {
- ERROR5(NULL, NULL, NULL, "Invalid QName.\n", NULL);
- ctxt->error = 1;
- goto error;
- }
- /*
- * This is a namespace match
- */
- token = xmlPatScanName(ctxt);
- if ((prefix[0] == 'x') &&
- (prefix[1] == 'm') &&
- (prefix[2] == 'l') &&
- (prefix[3] == 0))
- {
- XML_PAT_COPY_NSNAME(ctxt, URL, XML_XML_NAMESPACE)
- } else {
- for (i = 0;i < ctxt->nb_namespaces;i++) {
- if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
- XML_PAT_COPY_NSNAME(ctxt, URL, ctxt->namespaces[2 * i])
- break;
- }
- }
- if (i >= ctxt->nb_namespaces) {
- ERROR5(NULL, NULL, NULL,
- "xmlCompileStepPattern : no namespace bound to prefix %s\n",
- prefix);
- ctxt->error = 1;
- goto error;
- }
- }
- XML_PAT_FREE_STRING(ctxt, prefix);
- name = NULL;
- if (token == NULL) {
- if (CUR == '*') {
- NEXT;
- PUSH(XML_OP_NS, URL, NULL);
- } else {
- ERROR(NULL, NULL, NULL,
- "xmlCompileStepPattern : Name expected\n");
- ctxt->error = 1;
- goto error;
- }
- } else {
- PUSH(XML_OP_ELEM, token, URL);
- }
- } else {
- NEXT;
- if (xmlStrEqual(name, (const xmlChar *) "child")) {
- XML_PAT_FREE_STRING(ctxt, name);
- name = xmlPatScanName(ctxt);
- if (name == NULL) {
- if (CUR == '*') {
- NEXT;
- PUSH(XML_OP_ALL, NULL, NULL);
- return;
- } else {
- ERROR(NULL, NULL, NULL,
- "xmlCompileStepPattern : QName expected\n");
- ctxt->error = 1;
- goto error;
- }
- }
- if (CUR == ':') {
- xmlChar *prefix = name;
- int i;
-
- NEXT;
- if (IS_BLANK_CH(CUR)) {
- ERROR5(NULL, NULL, NULL, "Invalid QName.\n", NULL);
- ctxt->error = 1;
- goto error;
- }
- /*
- * This is a namespace match
- */
- token = xmlPatScanName(ctxt);
- if ((prefix[0] == 'x') &&
- (prefix[1] == 'm') &&
- (prefix[2] == 'l') &&
- (prefix[3] == 0))
- {
- XML_PAT_COPY_NSNAME(ctxt, URL, XML_XML_NAMESPACE)
- } else {
- for (i = 0;i < ctxt->nb_namespaces;i++) {
- if (xmlStrEqual(ctxt->namespaces[2 * i + 1], prefix)) {
- XML_PAT_COPY_NSNAME(ctxt, URL, ctxt->namespaces[2 * i])
- break;
- }
- }
- if (i >= ctxt->nb_namespaces) {
- ERROR5(NULL, NULL, NULL,
- "xmlCompileStepPattern : no namespace bound "
- "to prefix %s\n", prefix);
- ctxt->error = 1;
- goto error;
- }
- }
- XML_PAT_FREE_STRING(ctxt, prefix);
- name = NULL;
- if (token == NULL) {
- if (CUR == '*') {
- NEXT;
- PUSH(XML_OP_NS, URL, NULL);
- } else {
- ERROR(NULL, NULL, NULL,
- "xmlCompileStepPattern : Name expected\n");
- ctxt->error = 1;
- goto error;
- }
- } else {
- PUSH(XML_OP_CHILD, token, URL);
- }
- } else
- PUSH(XML_OP_CHILD, name, NULL);
- return;
- } else if (xmlStrEqual(name, (const xmlChar *) "attribute")) {
- XML_PAT_FREE_STRING(ctxt, name)
- name = NULL;
- if (XML_STREAM_XS_IDC_SEL(ctxt->comp)) {
- ERROR5(NULL, NULL, NULL,
- "Unexpected attribute axis in '%s'.\n", ctxt->base);
- ctxt->error = 1;
- goto error;
- }
- xmlCompileAttributeTest(ctxt);
- if (ctxt->error != 0)
- goto error;
- return;
- } else {
- ERROR5(NULL, NULL, NULL,
- "The 'element' or 'attribute' axis is expected.\n", NULL);
- ctxt->error = 1;
- goto error;
- }
- }
- } else if (CUR == '*') {
- if (name != NULL) {
- ctxt->error = 1;
- goto error;
- }
- NEXT;
- PUSH(XML_OP_ALL, token, NULL);
- } else {
- PUSH(XML_OP_ELEM, name, NULL);
- }
- return;
-error:
- if (URL != NULL)
- XML_PAT_FREE_STRING(ctxt, URL)
- if (token != NULL)
- XML_PAT_FREE_STRING(ctxt, token)
- if (name != NULL)
- XML_PAT_FREE_STRING(ctxt, name)
-}
-
-/**
- * xmlCompilePathPattern:
- * @ctxt: the compilation context
- *
- * Compile the Path Pattern and generates a precompiled
- * form suitable for fast matching.
- *
- * [5] Path ::= ('.//')? ( Step '/' )* ( Step | '@' NameTest )
- */
-static void
-xmlCompilePathPattern(xmlPatParserContextPtr ctxt) {
- SKIP_BLANKS;
- if (CUR == '/') {
- ctxt->comp->flags |= PAT_FROM_ROOT;
- } else if ((CUR == '.') || (ctxt->comp->flags & XML_PATTERN_NOTPATTERN)) {
- ctxt->comp->flags |= PAT_FROM_CUR;
- }
-
- if ((CUR == '/') && (NXT(1) == '/')) {
- PUSH(XML_OP_ANCESTOR, NULL, NULL);
- NEXT;
- NEXT;
- } else if ((CUR == '.') && (NXT(1) == '/') && (NXT(2) == '/')) {
- PUSH(XML_OP_ANCESTOR, NULL, NULL);
- NEXT;
- NEXT;
- NEXT;
- /* Check for incompleteness. */
- SKIP_BLANKS;
- if (CUR == 0) {
- ERROR5(NULL, NULL, NULL,
- "Incomplete expression '%s'.\n", ctxt->base);
- ctxt->error = 1;
- goto error;
- }
- }
- if (CUR == '@') {
- NEXT;
- xmlCompileAttributeTest(ctxt);
- SKIP_BLANKS;
- /* TODO: check for incompleteness */
- if (CUR != 0) {
- xmlCompileStepPattern(ctxt);
- if (ctxt->error != 0)
- goto error;
- }
- } else {
- if (CUR == '/') {
- PUSH(XML_OP_ROOT, NULL, NULL);
- NEXT;
- /* Check for incompleteness. */
- SKIP_BLANKS;
- if (CUR == 0) {
- ERROR5(NULL, NULL, NULL,
- "Incomplete expression '%s'.\n", ctxt->base);
- ctxt->error = 1;
- goto error;
- }
- }
- xmlCompileStepPattern(ctxt);
- if (ctxt->error != 0)
- goto error;
- SKIP_BLANKS;
- while (CUR == '/') {
- if (NXT(1) == '/') {
- PUSH(XML_OP_ANCESTOR, NULL, NULL);
- NEXT;
- NEXT;
- SKIP_BLANKS;
- xmlCompileStepPattern(ctxt);
- if (ctxt->error != 0)
- goto error;
- } else {
- PUSH(XML_OP_PARENT, NULL, NULL);
- NEXT;
- SKIP_BLANKS;
- if (CUR == 0) {
- ERROR5(NULL, NULL, NULL,
- "Incomplete expression '%s'.\n", ctxt->base);
- ctxt->error = 1;
- goto error;
- }
- xmlCompileStepPattern(ctxt);
- if (ctxt->error != 0)
- goto error;
- }
- }
- }
- if (CUR != 0) {
- ERROR5(NULL, NULL, NULL,
- "Failed to compile pattern %s\n", ctxt->base);
- ctxt->error = 1;
- }
-error:
- return;
-}
-
-/**
- * xmlCompileIDCXPathPath:
- * @ctxt: the compilation context
- *
- * Compile the Path Pattern and generates a precompiled
- * form suitable for fast matching.
- *
- * [5] Path ::= ('.//')? ( Step '/' )* ( Step | '@' NameTest )
- */
-static void
-xmlCompileIDCXPathPath(xmlPatParserContextPtr ctxt) {
- SKIP_BLANKS;
- if (CUR == '/') {
- ERROR5(NULL, NULL, NULL,
- "Unexpected selection of the document root in '%s'.\n",
- ctxt->base);
- goto error;
- }
- ctxt->comp->flags |= PAT_FROM_CUR;
-
- if (CUR == '.') {
- /* "." - "self::node()" */
- NEXT;
- SKIP_BLANKS;
- if (CUR == 0) {
- /*
- * Selection of the context node.
- */
- PUSH(XML_OP_ELEM, NULL, NULL);
- return;
- }
- if (CUR != '/') {
- /* TODO: A more meaningful error message. */
- ERROR5(NULL, NULL, NULL,
- "Unexpected token after '.' in '%s'.\n", ctxt->base);
- goto error;
- }
- /* "./" - "self::node()/" */
- NEXT;
- SKIP_BLANKS;
- if (CUR == '/') {
- if (IS_BLANK_CH(PEEKPREV(1))) {
- /*
- * Disallow "./ /"
- */
- ERROR5(NULL, NULL, NULL,
- "Unexpected '/' token in '%s'.\n", ctxt->base);
- goto error;
- }
- /* ".//" - "self:node()/descendant-or-self::node()/" */
- PUSH(XML_OP_ANCESTOR, NULL, NULL);
- NEXT;
- SKIP_BLANKS;
- }
- if (CUR == 0)
- goto error_unfinished;
- }
- /*
- * Process steps.
- */
- do {
- xmlCompileStepPattern(ctxt);
- if (ctxt->error != 0)
- goto error;
- SKIP_BLANKS;
- if (CUR != '/')
- break;
- PUSH(XML_OP_PARENT, NULL, NULL);
- NEXT;
- SKIP_BLANKS;
- if (CUR == '/') {
- /*
- * Disallow subsequent '//'.
- */
- ERROR5(NULL, NULL, NULL,
- "Unexpected subsequent '//' in '%s'.\n",
- ctxt->base);
- goto error;
- }
- if (CUR == 0)
- goto error_unfinished;
-
- } while (CUR != 0);
-
- if (CUR != 0) {
- ERROR5(NULL, NULL, NULL,
- "Failed to compile expression '%s'.\n", ctxt->base);
- ctxt->error = 1;
- }
- return;
-error:
- ctxt->error = 1;
- return;
-
-error_unfinished:
- ctxt->error = 1;
- ERROR5(NULL, NULL, NULL,
- "Unfinished expression '%s'.\n", ctxt->base);
- return;
-}
-
-/************************************************************************
- * *
- * The streaming code *
- * *
- ************************************************************************/
-
-#ifdef DEBUG_STREAMING
-static void
-xmlDebugStreamComp(xmlStreamCompPtr stream) {
- int i;
-
- if (stream == NULL) {
- printf("Stream: NULL\n");
- return;
- }
- printf("Stream: %d steps\n", stream->nbStep);
- for (i = 0;i < stream->nbStep;i++) {
- if (stream->steps[i].ns != NULL) {
- printf("{%s}", stream->steps[i].ns);
- }
- if (stream->steps[i].name == NULL) {
- printf("* ");
- } else {
- printf("%s ", stream->steps[i].name);
- }
- if (stream->steps[i].flags & XML_STREAM_STEP_ROOT)
- printf("root ");
- if (stream->steps[i].flags & XML_STREAM_STEP_DESC)
- printf("// ");
- if (stream->steps[i].flags & XML_STREAM_STEP_FINAL)
- printf("final ");
- printf("\n");
- }
-}
-static void
-xmlDebugStreamCtxt(xmlStreamCtxtPtr ctxt, int match) {
- int i;
-
- if (ctxt == NULL) {
- printf("Stream: NULL\n");
- return;
- }
- printf("Stream: level %d, %d states: ", ctxt->level, ctxt->nbState);
- if (match)
- printf("matches\n");
- else
- printf("\n");
- for (i = 0;i < ctxt->nbState;i++) {
- if (ctxt->states[2 * i] < 0)
- printf(" %d: free\n", i);
- else {
- printf(" %d: step %d, level %d", i, ctxt->states[2 * i],
- ctxt->states[(2 * i) + 1]);
- if (ctxt->comp->steps[ctxt->states[2 * i]].flags &
- XML_STREAM_STEP_DESC)
- printf(" //\n");
- else
- printf("\n");
- }
- }
-}
-#endif
-/**
- * xmlNewStreamComp:
- * @size: the number of expected steps
- *
- * build a new compiled pattern for streaming
- *
- * Returns the new structure or NULL in case of error.
- */
-static xmlStreamCompPtr
-xmlNewStreamComp(int size) {
- xmlStreamCompPtr cur;
-
- if (size < 4)
- size = 4;
-
- cur = (xmlStreamCompPtr) xmlMalloc(sizeof(xmlStreamComp));
- if (cur == NULL) {
- ERROR(NULL, NULL, NULL,
- "xmlNewStreamComp: malloc failed\n");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlStreamComp));
- cur->steps = (xmlStreamStepPtr) xmlMalloc(size * sizeof(xmlStreamStep));
- if (cur->steps == NULL) {
- xmlFree(cur);
- ERROR(NULL, NULL, NULL,
- "xmlNewStreamComp: malloc failed\n");
- return(NULL);
- }
- cur->nbStep = 0;
- cur->maxStep = size;
- return(cur);
-}
-
-/**
- * xmlFreeStreamComp:
- * @comp: the compiled pattern for streaming
- *
- * Free the compiled pattern for streaming
- */
-static void
-xmlFreeStreamComp(xmlStreamCompPtr comp) {
- if (comp != NULL) {
- if (comp->steps != NULL)
- xmlFree(comp->steps);
- if (comp->dict != NULL)
- xmlDictFree(comp->dict);
- xmlFree(comp);
- }
-}
-
-/**
- * xmlStreamCompAddStep:
- * @comp: the compiled pattern for streaming
- * @name: the first string, the name, or NULL for *
- * @ns: the second step, the namespace name
- * @flags: the flags for that step
- *
- * Add a new step to the compiled pattern
- *
- * Returns -1 in case of error or the step index if successful
- */
-static int
-xmlStreamCompAddStep(xmlStreamCompPtr comp, const xmlChar *name,
- const xmlChar *ns, int nodeType, int flags) {
- xmlStreamStepPtr cur;
-
- if (comp->nbStep >= comp->maxStep) {
- cur = (xmlStreamStepPtr) xmlRealloc(comp->steps,
- comp->maxStep * 2 * sizeof(xmlStreamStep));
- if (cur == NULL) {
- ERROR(NULL, NULL, NULL,
- "xmlNewStreamComp: malloc failed\n");
- return(-1);
- }
- comp->steps = cur;
- comp->maxStep *= 2;
- }
- cur = &comp->steps[comp->nbStep++];
- cur->flags = flags;
- cur->name = name;
- cur->ns = ns;
- cur->nodeType = nodeType;
- return(comp->nbStep - 1);
-}
-
-/**
- * xmlStreamCompile:
- * @comp: the precompiled pattern
- *
- * Tries to stream compile a pattern
- *
- * Returns -1 in case of failure and 0 in case of success.
- */
-static int
-xmlStreamCompile(xmlPatternPtr comp) {
- xmlStreamCompPtr stream;
- int i, s = 0, root = 0, flags = 0, prevs = -1;
- xmlStepOp step;
-
- if ((comp == NULL) || (comp->steps == NULL))
- return(-1);
- /*
- * special case for .
- */
- if ((comp->nbStep == 1) &&
- (comp->steps[0].op == XML_OP_ELEM) &&
- (comp->steps[0].value == NULL) &&
- (comp->steps[0].value2 == NULL)) {
- stream = xmlNewStreamComp(0);
- if (stream == NULL)
- return(-1);
- /* Note that the stream will have no steps in this case. */
- stream->flags |= XML_STREAM_FINAL_IS_ANY_NODE;
- comp->stream = stream;
- return(0);
- }
-
- stream = xmlNewStreamComp((comp->nbStep / 2) + 1);
- if (stream == NULL)
- return(-1);
- if (comp->dict != NULL) {
- stream->dict = comp->dict;
- xmlDictReference(stream->dict);
- }
-
- i = 0;
- if (comp->flags & PAT_FROM_ROOT)
- stream->flags |= XML_STREAM_FROM_ROOT;
-
- for (;i < comp->nbStep;i++) {
- step = comp->steps[i];
- switch (step.op) {
- case XML_OP_END:
- break;
- case XML_OP_ROOT:
- if (i != 0)
- goto error;
- root = 1;
- break;
- case XML_OP_NS:
- s = xmlStreamCompAddStep(stream, NULL, step.value,
- XML_ELEMENT_NODE, flags);
- if (s < 0)
- goto error;
- prevs = s;
- flags = 0;
- break;
- case XML_OP_ATTR:
- flags |= XML_STREAM_STEP_ATTR;
- prevs = -1;
- s = xmlStreamCompAddStep(stream,
- step.value, step.value2, XML_ATTRIBUTE_NODE, flags);
- flags = 0;
- if (s < 0)
- goto error;
- break;
- case XML_OP_ELEM:
- if ((step.value == NULL) && (step.value2 == NULL)) {
- /*
- * We have a "." or "self::node()" here.
- * Eliminate redundant self::node() tests like in "/./."
- * or "//./"
- * The only case we won't eliminate is "//.", i.e. if
- * self::node() is the last node test and we had
- * continuation somewhere beforehand.
- */
- if ((comp->nbStep == i + 1) &&
- (flags & XML_STREAM_STEP_DESC)) {
- /*
- * Mark the special case where the expression resolves
- * to any type of node.
- */
- if (comp->nbStep == i + 1) {
- stream->flags |= XML_STREAM_FINAL_IS_ANY_NODE;
- }
- flags |= XML_STREAM_STEP_NODE;
- s = xmlStreamCompAddStep(stream, NULL, NULL,
- XML_STREAM_ANY_NODE, flags);
- if (s < 0)
- goto error;
- flags = 0;
- /*
- * If there was a previous step, mark it to be added to
- * the result node-set; this is needed since only
- * the last step will be marked as "final" and only
- * "final" nodes are added to the resulting set.
- */
- if (prevs != -1) {
- stream->steps[prevs].flags |= XML_STREAM_STEP_IN_SET;
- prevs = -1;
- }
- break;
-
- } else {
- /* Just skip this one. */
- continue;
- }
- }
- /* An element node. */
- s = xmlStreamCompAddStep(stream, step.value, step.value2,
- XML_ELEMENT_NODE, flags);
- if (s < 0)
- goto error;
- prevs = s;
- flags = 0;
- break;
- case XML_OP_CHILD:
- /* An element node child. */
- s = xmlStreamCompAddStep(stream, step.value, step.value2,
- XML_ELEMENT_NODE, flags);
- if (s < 0)
- goto error;
- prevs = s;
- flags = 0;
- break;
- case XML_OP_ALL:
- s = xmlStreamCompAddStep(stream, NULL, NULL,
- XML_ELEMENT_NODE, flags);
- if (s < 0)
- goto error;
- prevs = s;
- flags = 0;
- break;
- case XML_OP_PARENT:
- break;
- case XML_OP_ANCESTOR:
- /* Skip redundant continuations. */
- if (flags & XML_STREAM_STEP_DESC)
- break;
- flags |= XML_STREAM_STEP_DESC;
- /*
- * Mark the expression as having "//".
- */
- if ((stream->flags & XML_STREAM_DESC) == 0)
- stream->flags |= XML_STREAM_DESC;
- break;
- }
- }
- if ((! root) && (comp->flags & XML_PATTERN_NOTPATTERN) == 0) {
- /*
- * If this should behave like a real pattern, we will mark
- * the first step as having "//", to be reentrant on every
- * tree level.
- */
- if ((stream->flags & XML_STREAM_DESC) == 0)
- stream->flags |= XML_STREAM_DESC;
-
- if (stream->nbStep > 0) {
- if ((stream->steps[0].flags & XML_STREAM_STEP_DESC) == 0)
- stream->steps[0].flags |= XML_STREAM_STEP_DESC;
- }
- }
- if (stream->nbStep <= s)
- goto error;
- stream->steps[s].flags |= XML_STREAM_STEP_FINAL;
- if (root)
- stream->steps[0].flags |= XML_STREAM_STEP_ROOT;
-#ifdef DEBUG_STREAMING
- xmlDebugStreamComp(stream);
-#endif
- comp->stream = stream;
- return(0);
-error:
- xmlFreeStreamComp(stream);
- return(0);
-}
-
-/**
- * xmlNewStreamCtxt:
- * @size: the number of expected states
- *
- * build a new stream context
- *
- * Returns the new structure or NULL in case of error.
- */
-static xmlStreamCtxtPtr
-xmlNewStreamCtxt(xmlStreamCompPtr stream) {
- xmlStreamCtxtPtr cur;
-
- cur = (xmlStreamCtxtPtr) xmlMalloc(sizeof(xmlStreamCtxt));
- if (cur == NULL) {
- ERROR(NULL, NULL, NULL,
- "xmlNewStreamCtxt: malloc failed\n");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlStreamCtxt));
- cur->states = (int *) xmlMalloc(4 * 2 * sizeof(int));
- if (cur->states == NULL) {
- xmlFree(cur);
- ERROR(NULL, NULL, NULL,
- "xmlNewStreamCtxt: malloc failed\n");
- return(NULL);
- }
- cur->nbState = 0;
- cur->maxState = 4;
- cur->level = 0;
- cur->comp = stream;
- cur->blockLevel = -1;
- return(cur);
-}
-
-/**
- * xmlFreeStreamCtxt:
- * @stream: the stream context
- *
- * Free the stream context
- */
-void
-xmlFreeStreamCtxt(xmlStreamCtxtPtr stream) {
- xmlStreamCtxtPtr next;
-
- while (stream != NULL) {
- next = stream->next;
- if (stream->states != NULL)
- xmlFree(stream->states);
- xmlFree(stream);
- stream = next;
- }
-}
-
-/**
- * xmlStreamCtxtAddState:
- * @comp: the stream context
- * @idx: the step index for that streaming state
- *
- * Add a new state to the stream context
- *
- * Returns -1 in case of error or the state index if successful
- */
-static int
-xmlStreamCtxtAddState(xmlStreamCtxtPtr comp, int idx, int level) {
- int i;
- for (i = 0;i < comp->nbState;i++) {
- if (comp->states[2 * i] < 0) {
- comp->states[2 * i] = idx;
- comp->states[2 * i + 1] = level;
- return(i);
- }
- }
- if (comp->nbState >= comp->maxState) {
- int *cur;
-
- cur = (int *) xmlRealloc(comp->states,
- comp->maxState * 4 * sizeof(int));
- if (cur == NULL) {
- ERROR(NULL, NULL, NULL,
- "xmlNewStreamCtxt: malloc failed\n");
- return(-1);
- }
- comp->states = cur;
- comp->maxState *= 2;
- }
- comp->states[2 * comp->nbState] = idx;
- comp->states[2 * comp->nbState++ + 1] = level;
- return(comp->nbState - 1);
-}
-
-/**
- * xmlStreamPushInternal:
- * @stream: the stream context
- * @name: the current name
- * @ns: the namespace name
- * @nodeType: the type of the node
- *
- * Push new data onto the stream. NOTE: if the call xmlPatterncompile()
- * indicated a dictionary, then strings for name and ns will be expected
- * to come from the dictionary.
- * Both @name and @ns being NULL means the / i.e. the root of the document.
- * This can also act as a reset.
- *
- * Returns: -1 in case of error, 1 if the current state in the stream is a
- * match and 0 otherwise.
- */
-static int
-xmlStreamPushInternal(xmlStreamCtxtPtr stream,
- const xmlChar *name, const xmlChar *ns,
- int nodeType) {
- int ret = 0, err = 0, final = 0, tmp, i, m, match, stepNr, desc;
- xmlStreamCompPtr comp;
- xmlStreamStep step;
-#ifdef DEBUG_STREAMING
- xmlStreamCtxtPtr orig = stream;
-#endif
-
- if ((stream == NULL) || (stream->nbState < 0))
- return(-1);
-
- while (stream != NULL) {
- comp = stream->comp;
-
- if ((nodeType == XML_ELEMENT_NODE) &&
- (name == NULL) && (ns == NULL)) {
- /* We have a document node here (or a reset). */
- stream->nbState = 0;
- stream->level = 0;
- stream->blockLevel = -1;
- if (comp->flags & XML_STREAM_FROM_ROOT) {
- if (comp->nbStep == 0) {
- /* TODO: We have a "/." here? */
- ret = 1;
- } else {
- if ((comp->nbStep == 1) &&
- (comp->steps[0].nodeType == XML_STREAM_ANY_NODE) &&
- (comp->steps[0].flags & XML_STREAM_STEP_DESC))
- {
- /*
- * In the case of "//." the document node will match
- * as well.
- */
- ret = 1;
- } else if (comp->steps[0].flags & XML_STREAM_STEP_ROOT) {
- /* TODO: Do we need this ? */
- tmp = xmlStreamCtxtAddState(stream, 0, 0);
- if (tmp < 0)
- err++;
- }
- }
- }
- stream = stream->next;
- continue; /* while */
- }
-
- /*
- * Fast check for ".".
- */
- if (comp->nbStep == 0) {
- /*
- * / and . are handled at the XPath node set creation
- * level by checking min depth
- */
- if (stream->flags & XML_PATTERN_XPATH) {
- stream = stream->next;
- continue; /* while */
- }
- /*
- * For non-pattern like evaluation like XML Schema IDCs
- * or traditional XPath expressions, this will match if
- * we are at the first level only, otherwise on every level.
- */
- if ((nodeType != XML_ATTRIBUTE_NODE) &&
- (((stream->flags & XML_PATTERN_NOTPATTERN) == 0) ||
- (stream->level == 0))) {
- ret = 1;
- }
- stream->level++;
- goto stream_next;
- }
- if (stream->blockLevel != -1) {
- /*
- * Skip blocked expressions.
- */
- stream->level++;
- goto stream_next;
- }
-
- if ((nodeType != XML_ELEMENT_NODE) &&
- (nodeType != XML_ATTRIBUTE_NODE) &&
- ((comp->flags & XML_STREAM_FINAL_IS_ANY_NODE) == 0)) {
- /*
- * No need to process nodes of other types if we don't
- * resolve to those types.
- * TODO: Do we need to block the context here?
- */
- stream->level++;
- goto stream_next;
- }
-
- /*
- * Check evolution of existing states
- */
- i = 0;
- m = stream->nbState;
- while (i < m) {
- if ((comp->flags & XML_STREAM_DESC) == 0) {
- /*
- * If there is no "//", then only the last
- * added state is of interest.
- */
- stepNr = stream->states[2 * (stream->nbState -1)];
- /*
- * TODO: Security check, should not happen, remove it.
- */
- if (stream->states[(2 * (stream->nbState -1)) + 1] <
- stream->level) {
- return (-1);
- }
- desc = 0;
- /* loop-stopper */
- i = m;
- } else {
- /*
- * If there are "//", then we need to process every "//"
- * occuring in the states, plus any other state for this
- * level.
- */
- stepNr = stream->states[2 * i];
-
- /* TODO: should not happen anymore: dead states */
- if (stepNr < 0)
- goto next_state;
-
- tmp = stream->states[(2 * i) + 1];
-
- /* skip new states just added */
- if (tmp > stream->level)
- goto next_state;
-
- /* skip states at ancestor levels, except if "//" */
- desc = comp->steps[stepNr].flags & XML_STREAM_STEP_DESC;
- if ((tmp < stream->level) && (!desc))
- goto next_state;
- }
- /*
- * Check for correct node-type.
- */
- step = comp->steps[stepNr];
- if (step.nodeType != nodeType) {
- if (step.nodeType == XML_ATTRIBUTE_NODE) {
- /*
- * Block this expression for deeper evaluation.
- */
- if ((comp->flags & XML_STREAM_DESC) == 0)
- stream->blockLevel = stream->level +1;
- goto next_state;
- } else if (step.nodeType != XML_STREAM_ANY_NODE)
- goto next_state;
- }
- /*
- * Compare local/namespace-name.
- */
- match = 0;
- if (step.nodeType == XML_STREAM_ANY_NODE) {
- match = 1;
- } else if (step.name == NULL) {
- if (step.ns == NULL) {
- /*
- * This lets through all elements/attributes.
- */
- match = 1;
- } else if (ns != NULL)
- match = xmlStrEqual(step.ns, ns);
- } else if (((step.ns != NULL) == (ns != NULL)) &&
- (name != NULL) &&
- (step.name[0] == name[0]) &&
- xmlStrEqual(step.name, name) &&
- ((step.ns == ns) || xmlStrEqual(step.ns, ns)))
- {
- match = 1;
- }
-#if 0
-/*
-* TODO: Pointer comparison won't work, since not guaranteed that the given
-* values are in the same dict; especially if it's the namespace name,
-* normally coming from ns->href. We need a namespace dict mechanism !
-*/
- } else if (comp->dict) {
- if (step.name == NULL) {
- if (step.ns == NULL)
- match = 1;
- else
- match = (step.ns == ns);
- } else {
- match = ((step.name == name) && (step.ns == ns));
- }
-#endif /* if 0 ------------------------------------------------------- */
- if (match) {
- final = step.flags & XML_STREAM_STEP_FINAL;
- if (desc) {
- if (final) {
- ret = 1;
- } else {
- /* descending match create a new state */
- xmlStreamCtxtAddState(stream, stepNr + 1,
- stream->level + 1);
- }
- } else {
- if (final) {
- ret = 1;
- } else {
- xmlStreamCtxtAddState(stream, stepNr + 1,
- stream->level + 1);
- }
- }
- if ((ret != 1) && (step.flags & XML_STREAM_STEP_IN_SET)) {
- /*
- * Check if we have a special case like "foo/bar//.", where
- * "foo" is selected as well.
- */
- ret = 1;
- }
- }
- if (((comp->flags & XML_STREAM_DESC) == 0) &&
- ((! match) || final)) {
- /*
- * Mark this expression as blocked for any evaluation at
- * deeper levels. Note that this includes "/foo"
- * expressions if the *pattern* behaviour is used.
- */
- stream->blockLevel = stream->level +1;
- }
-next_state:
- i++;
- }
-
- stream->level++;
-
- /*
- * Re/enter the expression.
- * Don't reenter if it's an absolute expression like "/foo",
- * except "//foo".
- */
- step = comp->steps[0];
- if (step.flags & XML_STREAM_STEP_ROOT)
- goto stream_next;
-
- desc = step.flags & XML_STREAM_STEP_DESC;
- if (stream->flags & XML_PATTERN_NOTPATTERN) {
- /*
- * Re/enter the expression if it is a "descendant" one,
- * or if we are at the 1st level of evaluation.
- */
-
- if (stream->level == 1) {
- if (XML_STREAM_XS_IDC(stream)) {
- /*
- * XS-IDC: The missing "self::node()" will always
- * match the first given node.
- */
- goto stream_next;
- } else
- goto compare;
- }
- /*
- * A "//" is always reentrant.
- */
- if (desc)
- goto compare;
-
- /*
- * XS-IDC: Process the 2nd level, since the missing
- * "self::node()" is responsible for the 2nd level being
- * the real start level.
- */
- if ((stream->level == 2) && XML_STREAM_XS_IDC(stream))
- goto compare;
-
- goto stream_next;
- }
-
-compare:
- /*
- * Check expected node-type.
- */
- if (step.nodeType != nodeType) {
- if (nodeType == XML_ATTRIBUTE_NODE)
- goto stream_next;
- else if (step.nodeType != XML_STREAM_ANY_NODE)
- goto stream_next;
- }
- /*
- * Compare local/namespace-name.
- */
- match = 0;
- if (step.nodeType == XML_STREAM_ANY_NODE) {
- match = 1;
- } else if (step.name == NULL) {
- if (step.ns == NULL) {
- /*
- * This lets through all elements/attributes.
- */
- match = 1;
- } else if (ns != NULL)
- match = xmlStrEqual(step.ns, ns);
- } else if (((step.ns != NULL) == (ns != NULL)) &&
- (name != NULL) &&
- (step.name[0] == name[0]) &&
- xmlStrEqual(step.name, name) &&
- ((step.ns == ns) || xmlStrEqual(step.ns, ns)))
- {
- match = 1;
- }
- final = step.flags & XML_STREAM_STEP_FINAL;
- if (match) {
- if (final)
- ret = 1;
- else
- xmlStreamCtxtAddState(stream, 1, stream->level);
- if ((ret != 1) && (step.flags & XML_STREAM_STEP_IN_SET)) {
- /*
- * Check if we have a special case like "foo//.", where
- * "foo" is selected as well.
- */
- ret = 1;
- }
- }
- if (((comp->flags & XML_STREAM_DESC) == 0) &&
- ((! match) || final)) {
- /*
- * Mark this expression as blocked for any evaluation at
- * deeper levels.
- */
- stream->blockLevel = stream->level;
- }
-
-stream_next:
- stream = stream->next;
- } /* while stream != NULL */
-
- if (err > 0)
- ret = -1;
-#ifdef DEBUG_STREAMING
- xmlDebugStreamCtxt(orig, ret);
-#endif
- return(ret);
-}
-
-/**
- * xmlStreamPush:
- * @stream: the stream context
- * @name: the current name
- * @ns: the namespace name
- *
- * Push new data onto the stream. NOTE: if the call xmlPatterncompile()
- * indicated a dictionary, then strings for name and ns will be expected
- * to come from the dictionary.
- * Both @name and @ns being NULL means the / i.e. the root of the document.
- * This can also act as a reset.
- * Otherwise the function will act as if it has been given an element-node.
- *
- * Returns: -1 in case of error, 1 if the current state in the stream is a
- * match and 0 otherwise.
- */
-int
-xmlStreamPush(xmlStreamCtxtPtr stream,
- const xmlChar *name, const xmlChar *ns) {
- return (xmlStreamPushInternal(stream, name, ns, (int) XML_ELEMENT_NODE));
-}
-
-/**
- * xmlStreamPushNode:
- * @stream: the stream context
- * @name: the current name
- * @ns: the namespace name
- * @nodeType: the type of the node being pushed
- *
- * Push new data onto the stream. NOTE: if the call xmlPatterncompile()
- * indicated a dictionary, then strings for name and ns will be expected
- * to come from the dictionary.
- * Both @name and @ns being NULL means the / i.e. the root of the document.
- * This can also act as a reset.
- * Different from xmlStreamPush() this function can be fed with nodes of type:
- * element-, attribute-, text-, cdata-section-, comment- and
- * processing-instruction-node.
- *
- * Returns: -1 in case of error, 1 if the current state in the stream is a
- * match and 0 otherwise.
- */
-int
-xmlStreamPushNode(xmlStreamCtxtPtr stream,
- const xmlChar *name, const xmlChar *ns,
- int nodeType)
-{
- return (xmlStreamPushInternal(stream, name, ns,
- nodeType));
-}
-
-/**
-* xmlStreamPushAttr:
-* @stream: the stream context
-* @name: the current name
-* @ns: the namespace name
-*
-* Push new attribute data onto the stream. NOTE: if the call xmlPatterncompile()
-* indicated a dictionary, then strings for name and ns will be expected
-* to come from the dictionary.
-* Both @name and @ns being NULL means the / i.e. the root of the document.
-* This can also act as a reset.
-* Otherwise the function will act as if it has been given an attribute-node.
-*
-* Returns: -1 in case of error, 1 if the current state in the stream is a
-* match and 0 otherwise.
-*/
-int
-xmlStreamPushAttr(xmlStreamCtxtPtr stream,
- const xmlChar *name, const xmlChar *ns) {
- return (xmlStreamPushInternal(stream, name, ns, (int) XML_ATTRIBUTE_NODE));
-}
-
-/**
- * xmlStreamPop:
- * @stream: the stream context
- *
- * push one level from the stream.
- *
- * Returns: -1 in case of error, 0 otherwise.
- */
-int
-xmlStreamPop(xmlStreamCtxtPtr stream) {
- int i, lev;
-
- if (stream == NULL)
- return(-1);
- while (stream != NULL) {
- /*
- * Reset block-level.
- */
- if (stream->blockLevel == stream->level)
- stream->blockLevel = -1;
-
- /*
- * stream->level can be zero when XML_FINAL_IS_ANY_NODE is set
- * (see the thread at
- * http://mail.gnome.org/archives/xslt/2008-July/msg00027.html)
- */
- if (stream->level)
- stream->level--;
- /*
- * Check evolution of existing states
- */
- for (i = stream->nbState -1; i >= 0; i--) {
- /* discard obsoleted states */
- lev = stream->states[(2 * i) + 1];
- if (lev > stream->level)
- stream->nbState--;
- if (lev <= stream->level)
- break;
- }
- stream = stream->next;
- }
- return(0);
-}
-
-/**
- * xmlStreamWantsAnyNode:
- * @streamCtxt: the stream context
- *
- * Query if the streaming pattern additionally needs to be fed with
- * text-, cdata-section-, comment- and processing-instruction-nodes.
- * If the result is 0 then only element-nodes and attribute-nodes
- * need to be pushed.
- *
- * Returns: 1 in case of need of nodes of the above described types,
- * 0 otherwise. -1 on API errors.
- */
-int
-xmlStreamWantsAnyNode(xmlStreamCtxtPtr streamCtxt)
-{
- if (streamCtxt == NULL)
- return(-1);
- while (streamCtxt != NULL) {
- if (streamCtxt->comp->flags & XML_STREAM_FINAL_IS_ANY_NODE)
- return(1);
- streamCtxt = streamCtxt->next;
- }
- return(0);
-}
-
-/************************************************************************
- * *
- * The public interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlPatterncompile:
- * @pattern: the pattern to compile
- * @dict: an optional dictionary for interned strings
- * @flags: compilation flags, see xmlPatternFlags
- * @namespaces: the prefix definitions, array of [URI, prefix] or NULL
- *
- * Compile a pattern.
- *
- * Returns the compiled form of the pattern or NULL in case of error
- */
-xmlPatternPtr
-xmlPatterncompile(const xmlChar *pattern, xmlDict *dict, int flags,
- const xmlChar **namespaces) {
- xmlPatternPtr ret = NULL, cur;
- xmlPatParserContextPtr ctxt = NULL;
- const xmlChar *or, *start;
- xmlChar *tmp = NULL;
- int type = 0;
- int streamable = 1;
-
- if (pattern == NULL)
- return(NULL);
-
- start = pattern;
- or = start;
- while (*or != 0) {
- tmp = NULL;
- while ((*or != 0) && (*or != '|')) or++;
- if (*or == 0)
- ctxt = xmlNewPatParserContext(start, dict, namespaces);
- else {
- tmp = xmlStrndup(start, or - start);
- if (tmp != NULL) {
- ctxt = xmlNewPatParserContext(tmp, dict, namespaces);
- }
- or++;
- }
- if (ctxt == NULL) goto error;
- cur = xmlNewPattern();
- if (cur == NULL) goto error;
- /*
- * Assign string dict.
- */
- if (dict) {
- cur->dict = dict;
- xmlDictReference(dict);
- }
- if (ret == NULL)
- ret = cur;
- else {
- cur->next = ret->next;
- ret->next = cur;
- }
- cur->flags = flags;
- ctxt->comp = cur;
-
- if (XML_STREAM_XS_IDC(cur))
- xmlCompileIDCXPathPath(ctxt);
- else
- xmlCompilePathPattern(ctxt);
- if (ctxt->error != 0)
- goto error;
- xmlFreePatParserContext(ctxt);
- ctxt = NULL;
-
-
- if (streamable) {
- if (type == 0) {
- type = cur->flags & (PAT_FROM_ROOT | PAT_FROM_CUR);
- } else if (type == PAT_FROM_ROOT) {
- if (cur->flags & PAT_FROM_CUR)
- streamable = 0;
- } else if (type == PAT_FROM_CUR) {
- if (cur->flags & PAT_FROM_ROOT)
- streamable = 0;
- }
- }
- if (streamable)
- xmlStreamCompile(cur);
- if (xmlReversePattern(cur) < 0)
- goto error;
- if (tmp != NULL) {
- xmlFree(tmp);
- tmp = NULL;
- }
- start = or;
- }
- if (streamable == 0) {
- cur = ret;
- while (cur != NULL) {
- if (cur->stream != NULL) {
- xmlFreeStreamComp(cur->stream);
- cur->stream = NULL;
- }
- cur = cur->next;
- }
- }
-
- return(ret);
-error:
- if (ctxt != NULL) xmlFreePatParserContext(ctxt);
- if (ret != NULL) xmlFreePattern(ret);
- if (tmp != NULL) xmlFree(tmp);
- return(NULL);
-}
-
-/**
- * xmlPatternMatch:
- * @comp: the precompiled pattern
- * @node: a node
- *
- * Test whether the node matches the pattern
- *
- * Returns 1 if it matches, 0 if it doesn't and -1 in case of failure
- */
-int
-xmlPatternMatch(xmlPatternPtr comp, xmlNodePtr node)
-{
- int ret = 0;
-
- if ((comp == NULL) || (node == NULL))
- return(-1);
-
- while (comp != NULL) {
- ret = xmlPatMatch(comp, node);
- if (ret != 0)
- return(ret);
- comp = comp->next;
- }
- return(ret);
-}
-
-/**
- * xmlPatternGetStreamCtxt:
- * @comp: the precompiled pattern
- *
- * Get a streaming context for that pattern
- * Use xmlFreeStreamCtxt to free the context.
- *
- * Returns a pointer to the context or NULL in case of failure
- */
-xmlStreamCtxtPtr
-xmlPatternGetStreamCtxt(xmlPatternPtr comp)
-{
- xmlStreamCtxtPtr ret = NULL, cur;
-
- if ((comp == NULL) || (comp->stream == NULL))
- return(NULL);
-
- while (comp != NULL) {
- if (comp->stream == NULL)
- goto failed;
- cur = xmlNewStreamCtxt(comp->stream);
- if (cur == NULL)
- goto failed;
- if (ret == NULL)
- ret = cur;
- else {
- cur->next = ret->next;
- ret->next = cur;
- }
- cur->flags = comp->flags;
- comp = comp->next;
- }
- return(ret);
-failed:
- xmlFreeStreamCtxt(ret);
- return(NULL);
-}
-
-/**
- * xmlPatternStreamable:
- * @comp: the precompiled pattern
- *
- * Check if the pattern is streamable i.e. xmlPatternGetStreamCtxt()
- * should work.
- *
- * Returns 1 if streamable, 0 if not and -1 in case of error.
- */
-int
-xmlPatternStreamable(xmlPatternPtr comp) {
- if (comp == NULL)
- return(-1);
- while (comp != NULL) {
- if (comp->stream == NULL)
- return(0);
- comp = comp->next;
- }
- return(1);
-}
-
-/**
- * xmlPatternMaxDepth:
- * @comp: the precompiled pattern
- *
- * Check the maximum depth reachable by a pattern
- *
- * Returns -2 if no limit (using //), otherwise the depth,
- * and -1 in case of error
- */
-int
-xmlPatternMaxDepth(xmlPatternPtr comp) {
- int ret = 0, i;
- if (comp == NULL)
- return(-1);
- while (comp != NULL) {
- if (comp->stream == NULL)
- return(-1);
- for (i = 0;i < comp->stream->nbStep;i++)
- if (comp->stream->steps[i].flags & XML_STREAM_STEP_DESC)
- return(-2);
- if (comp->stream->nbStep > ret)
- ret = comp->stream->nbStep;
- comp = comp->next;
- }
- return(ret);
-}
-
-/**
- * xmlPatternMinDepth:
- * @comp: the precompiled pattern
- *
- * Check the minimum depth reachable by a pattern, 0 mean the / or . are
- * part of the set.
- *
- * Returns -1 in case of error otherwise the depth,
- *
- */
-int
-xmlPatternMinDepth(xmlPatternPtr comp) {
- int ret = 12345678;
- if (comp == NULL)
- return(-1);
- while (comp != NULL) {
- if (comp->stream == NULL)
- return(-1);
- if (comp->stream->nbStep < ret)
- ret = comp->stream->nbStep;
- if (ret == 0)
- return(0);
- comp = comp->next;
- }
- return(ret);
-}
-
-/**
- * xmlPatternFromRoot:
- * @comp: the precompiled pattern
- *
- * Check if the pattern must be looked at from the root.
- *
- * Returns 1 if true, 0 if false and -1 in case of error
- */
-int
-xmlPatternFromRoot(xmlPatternPtr comp) {
- if (comp == NULL)
- return(-1);
- while (comp != NULL) {
- if (comp->stream == NULL)
- return(-1);
- if (comp->flags & PAT_FROM_ROOT)
- return(1);
- comp = comp->next;
- }
- return(0);
-
-}
-
-#define bottom_pattern
-#include "elfgcchack.h"
-#endif /* LIBXML_PATTERN_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/relaxng.c b/external/libxml2_android/jni/libxml2/relaxng.c
deleted file mode 100644
index 3d3e69c0..00000000
--- a/external/libxml2_android/jni/libxml2/relaxng.c
+++ /dev/null
@@ -1,11059 +0,0 @@
-/*
- * relaxng.c : implementation of the Relax-NG handling and validity checking
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-/**
- * TODO:
- * - add support for DTD compatibility spec
- * http://www.oasis-open.org/committees/relax-ng/compatibility-20011203.html
- * - report better mem allocations pbms at runtime and abort immediately.
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <string.h>
-#include <stdio.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/hash.h>
-#include <libxml/uri.h>
-
-#include <libxml/relaxng.h>
-
-#include <libxml/xmlschemastypes.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlregexp.h>
-#include <libxml/xmlschemastypes.h>
-
-/*
- * The Relax-NG namespace
- */
-static const xmlChar *xmlRelaxNGNs = (const xmlChar *)
- "http://relaxng.org/ns/structure/1.0";
-
-#define IS_RELAXNG(node, typ) \
- ((node != NULL) && (node->ns != NULL) && \
- (node->type == XML_ELEMENT_NODE) && \
- (xmlStrEqual(node->name, (const xmlChar *) typ)) && \
- (xmlStrEqual(node->ns->href, xmlRelaxNGNs)))
-
-
-#if 0
-#define DEBUG 1
-
-#define DEBUG_GRAMMAR 1
-
-#define DEBUG_CONTENT 1
-
-#define DEBUG_TYPE 1
-
-#define DEBUG_VALID 1
-
-#define DEBUG_INTERLEAVE 1
-
-#define DEBUG_LIST 1
-
-#define DEBUG_INCLUDE 1
-
-#define DEBUG_ERROR 1
-
-#define DEBUG_COMPILE 1
-
-#define DEBUG_PROGRESSIVE 1
-#endif
-
-#define MAX_ERROR 5
-
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-typedef struct _xmlRelaxNGSchema xmlRelaxNGSchema;
-typedef xmlRelaxNGSchema *xmlRelaxNGSchemaPtr;
-
-typedef struct _xmlRelaxNGDefine xmlRelaxNGDefine;
-typedef xmlRelaxNGDefine *xmlRelaxNGDefinePtr;
-
-typedef struct _xmlRelaxNGDocument xmlRelaxNGDocument;
-typedef xmlRelaxNGDocument *xmlRelaxNGDocumentPtr;
-
-typedef struct _xmlRelaxNGInclude xmlRelaxNGInclude;
-typedef xmlRelaxNGInclude *xmlRelaxNGIncludePtr;
-
-typedef enum {
- XML_RELAXNG_COMBINE_UNDEFINED = 0, /* undefined */
- XML_RELAXNG_COMBINE_CHOICE, /* choice */
- XML_RELAXNG_COMBINE_INTERLEAVE /* interleave */
-} xmlRelaxNGCombine;
-
-typedef enum {
- XML_RELAXNG_CONTENT_ERROR = -1,
- XML_RELAXNG_CONTENT_EMPTY = 0,
- XML_RELAXNG_CONTENT_SIMPLE,
- XML_RELAXNG_CONTENT_COMPLEX
-} xmlRelaxNGContentType;
-
-typedef struct _xmlRelaxNGGrammar xmlRelaxNGGrammar;
-typedef xmlRelaxNGGrammar *xmlRelaxNGGrammarPtr;
-
-struct _xmlRelaxNGGrammar {
- xmlRelaxNGGrammarPtr parent; /* the parent grammar if any */
- xmlRelaxNGGrammarPtr children; /* the children grammar if any */
- xmlRelaxNGGrammarPtr next; /* the next grammar if any */
- xmlRelaxNGDefinePtr start; /* <start> content */
- xmlRelaxNGCombine combine; /* the default combine value */
- xmlRelaxNGDefinePtr startList; /* list of <start> definitions */
- xmlHashTablePtr defs; /* define* */
- xmlHashTablePtr refs; /* references */
-};
-
-
-typedef enum {
- XML_RELAXNG_NOOP = -1, /* a no operation from simplification */
- XML_RELAXNG_EMPTY = 0, /* an empty pattern */
- XML_RELAXNG_NOT_ALLOWED, /* not allowed top */
- XML_RELAXNG_EXCEPT, /* except present in nameclass defs */
- XML_RELAXNG_TEXT, /* textual content */
- XML_RELAXNG_ELEMENT, /* an element */
- XML_RELAXNG_DATATYPE, /* extenal data type definition */
- XML_RELAXNG_PARAM, /* extenal data type parameter */
- XML_RELAXNG_VALUE, /* value from an extenal data type definition */
- XML_RELAXNG_LIST, /* a list of patterns */
- XML_RELAXNG_ATTRIBUTE, /* an attrbute following a pattern */
- XML_RELAXNG_DEF, /* a definition */
- XML_RELAXNG_REF, /* reference to a definition */
- XML_RELAXNG_EXTERNALREF, /* reference to an external def */
- XML_RELAXNG_PARENTREF, /* reference to a def in the parent grammar */
- XML_RELAXNG_OPTIONAL, /* optional patterns */
- XML_RELAXNG_ZEROORMORE, /* zero or more non empty patterns */
- XML_RELAXNG_ONEORMORE, /* one or more non empty patterns */
- XML_RELAXNG_CHOICE, /* a choice between non empty patterns */
- XML_RELAXNG_GROUP, /* a pair/group of non empty patterns */
- XML_RELAXNG_INTERLEAVE, /* interleaving choice of non-empty patterns */
- XML_RELAXNG_START /* Used to keep track of starts on grammars */
-} xmlRelaxNGType;
-
-#define IS_NULLABLE (1 << 0)
-#define IS_NOT_NULLABLE (1 << 1)
-#define IS_INDETERMINIST (1 << 2)
-#define IS_MIXED (1 << 3)
-#define IS_TRIABLE (1 << 4)
-#define IS_PROCESSED (1 << 5)
-#define IS_COMPILABLE (1 << 6)
-#define IS_NOT_COMPILABLE (1 << 7)
-#define IS_EXTERNAL_REF (1 << 8)
-
-struct _xmlRelaxNGDefine {
- xmlRelaxNGType type; /* the type of definition */
- xmlNodePtr node; /* the node in the source */
- xmlChar *name; /* the element local name if present */
- xmlChar *ns; /* the namespace local name if present */
- xmlChar *value; /* value when available */
- void *data; /* data lib or specific pointer */
- xmlRelaxNGDefinePtr content; /* the expected content */
- xmlRelaxNGDefinePtr parent; /* the parent definition, if any */
- xmlRelaxNGDefinePtr next; /* list within grouping sequences */
- xmlRelaxNGDefinePtr attrs; /* list of attributes for elements */
- xmlRelaxNGDefinePtr nameClass; /* the nameClass definition if any */
- xmlRelaxNGDefinePtr nextHash; /* next define in defs/refs hash tables */
- short depth; /* used for the cycle detection */
- short dflags; /* define related flags */
- xmlRegexpPtr contModel; /* a compiled content model if available */
-};
-
-/**
- * _xmlRelaxNG:
- *
- * A RelaxNGs definition
- */
-struct _xmlRelaxNG {
- void *_private; /* unused by the library for users or bindings */
- xmlRelaxNGGrammarPtr topgrammar;
- xmlDocPtr doc;
-
- int idref; /* requires idref checking */
-
- xmlHashTablePtr defs; /* define */
- xmlHashTablePtr refs; /* references */
- xmlRelaxNGDocumentPtr documents; /* all the documents loaded */
- xmlRelaxNGIncludePtr includes; /* all the includes loaded */
- int defNr; /* number of defines used */
- xmlRelaxNGDefinePtr *defTab; /* pointer to the allocated definitions */
-
-};
-
-#define XML_RELAXNG_IN_ATTRIBUTE (1 << 0)
-#define XML_RELAXNG_IN_ONEORMORE (1 << 1)
-#define XML_RELAXNG_IN_LIST (1 << 2)
-#define XML_RELAXNG_IN_DATAEXCEPT (1 << 3)
-#define XML_RELAXNG_IN_START (1 << 4)
-#define XML_RELAXNG_IN_OOMGROUP (1 << 5)
-#define XML_RELAXNG_IN_OOMINTERLEAVE (1 << 6)
-#define XML_RELAXNG_IN_EXTERNALREF (1 << 7)
-#define XML_RELAXNG_IN_ANYEXCEPT (1 << 8)
-#define XML_RELAXNG_IN_NSEXCEPT (1 << 9)
-
-struct _xmlRelaxNGParserCtxt {
- void *userData; /* user specific data block */
- xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */
- xmlRelaxNGValidityWarningFunc warning; /* the callback in case of warning */
- xmlStructuredErrorFunc serror;
- xmlRelaxNGValidErr err;
-
- xmlRelaxNGPtr schema; /* The schema in use */
- xmlRelaxNGGrammarPtr grammar; /* the current grammar */
- xmlRelaxNGGrammarPtr parentgrammar; /* the parent grammar */
- int flags; /* parser flags */
- int nbErrors; /* number of errors at parse time */
- int nbWarnings; /* number of warnings at parse time */
- const xmlChar *define; /* the current define scope */
- xmlRelaxNGDefinePtr def; /* the current define */
-
- int nbInterleaves;
- xmlHashTablePtr interleaves; /* keep track of all the interleaves */
-
- xmlRelaxNGDocumentPtr documents; /* all the documents loaded */
- xmlRelaxNGIncludePtr includes; /* all the includes loaded */
- xmlChar *URL;
- xmlDocPtr document;
-
- int defNr; /* number of defines used */
- int defMax; /* number of defines aloocated */
- xmlRelaxNGDefinePtr *defTab; /* pointer to the allocated definitions */
-
- const char *buffer;
- int size;
-
- /* the document stack */
- xmlRelaxNGDocumentPtr doc; /* Current parsed external ref */
- int docNr; /* Depth of the parsing stack */
- int docMax; /* Max depth of the parsing stack */
- xmlRelaxNGDocumentPtr *docTab; /* array of docs */
-
- /* the include stack */
- xmlRelaxNGIncludePtr inc; /* Current parsed include */
- int incNr; /* Depth of the include parsing stack */
- int incMax; /* Max depth of the parsing stack */
- xmlRelaxNGIncludePtr *incTab; /* array of incs */
-
- int idref; /* requires idref checking */
-
- /* used to compile content models */
- xmlAutomataPtr am; /* the automata */
- xmlAutomataStatePtr state; /* used to build the automata */
-
- int crng; /* compact syntax and other flags */
- int freedoc; /* need to free the document */
-};
-
-#define FLAGS_IGNORABLE 1
-#define FLAGS_NEGATIVE 2
-#define FLAGS_MIXED_CONTENT 4
-#define FLAGS_NOERROR 8
-
-/**
- * xmlRelaxNGInterleaveGroup:
- *
- * A RelaxNGs partition set associated to lists of definitions
- */
-typedef struct _xmlRelaxNGInterleaveGroup xmlRelaxNGInterleaveGroup;
-typedef xmlRelaxNGInterleaveGroup *xmlRelaxNGInterleaveGroupPtr;
-struct _xmlRelaxNGInterleaveGroup {
- xmlRelaxNGDefinePtr rule; /* the rule to satisfy */
- xmlRelaxNGDefinePtr *defs; /* the array of element definitions */
- xmlRelaxNGDefinePtr *attrs; /* the array of attributes definitions */
-};
-
-#define IS_DETERMINIST 1
-#define IS_NEEDCHECK 2
-
-/**
- * xmlRelaxNGPartitions:
- *
- * A RelaxNGs partition associated to an interleave group
- */
-typedef struct _xmlRelaxNGPartition xmlRelaxNGPartition;
-typedef xmlRelaxNGPartition *xmlRelaxNGPartitionPtr;
-struct _xmlRelaxNGPartition {
- int nbgroups; /* number of groups in the partitions */
- xmlHashTablePtr triage; /* hash table used to direct nodes to the
- * right group when possible */
- int flags; /* determinist ? */
- xmlRelaxNGInterleaveGroupPtr *groups;
-};
-
-/**
- * xmlRelaxNGValidState:
- *
- * A RelaxNGs validation state
- */
-#define MAX_ATTR 20
-typedef struct _xmlRelaxNGValidState xmlRelaxNGValidState;
-typedef xmlRelaxNGValidState *xmlRelaxNGValidStatePtr;
-struct _xmlRelaxNGValidState {
- xmlNodePtr node; /* the current node */
- xmlNodePtr seq; /* the sequence of children left to validate */
- int nbAttrs; /* the number of attributes */
- int maxAttrs; /* the size of attrs */
- int nbAttrLeft; /* the number of attributes left to validate */
- xmlChar *value; /* the value when operating on string */
- xmlChar *endvalue; /* the end value when operating on string */
- xmlAttrPtr *attrs; /* the array of attributes */
-};
-
-/**
- * xmlRelaxNGStates:
- *
- * A RelaxNGs container for validation state
- */
-typedef struct _xmlRelaxNGStates xmlRelaxNGStates;
-typedef xmlRelaxNGStates *xmlRelaxNGStatesPtr;
-struct _xmlRelaxNGStates {
- int nbState; /* the number of states */
- int maxState; /* the size of the array */
- xmlRelaxNGValidStatePtr *tabState;
-};
-
-#define ERROR_IS_DUP 1
-
-/**
- * xmlRelaxNGValidError:
- *
- * A RelaxNGs validation error
- */
-typedef struct _xmlRelaxNGValidError xmlRelaxNGValidError;
-typedef xmlRelaxNGValidError *xmlRelaxNGValidErrorPtr;
-struct _xmlRelaxNGValidError {
- xmlRelaxNGValidErr err; /* the error number */
- int flags; /* flags */
- xmlNodePtr node; /* the current node */
- xmlNodePtr seq; /* the current child */
- const xmlChar *arg1; /* first arg */
- const xmlChar *arg2; /* second arg */
-};
-
-/**
- * xmlRelaxNGValidCtxt:
- *
- * A RelaxNGs validation context
- */
-
-struct _xmlRelaxNGValidCtxt {
- void *userData; /* user specific data block */
- xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */
- xmlRelaxNGValidityWarningFunc warning; /* the callback in case of warning */
- xmlStructuredErrorFunc serror;
- int nbErrors; /* number of errors in validation */
-
- xmlRelaxNGPtr schema; /* The schema in use */
- xmlDocPtr doc; /* the document being validated */
- int flags; /* validation flags */
- int depth; /* validation depth */
- int idref; /* requires idref checking */
- int errNo; /* the first error found */
-
- /*
- * Errors accumulated in branches may have to be stacked to be
- * provided back when it's sure they affect validation.
- */
- xmlRelaxNGValidErrorPtr err; /* Last error */
- int errNr; /* Depth of the error stack */
- int errMax; /* Max depth of the error stack */
- xmlRelaxNGValidErrorPtr errTab; /* stack of errors */
-
- xmlRelaxNGValidStatePtr state; /* the current validation state */
- xmlRelaxNGStatesPtr states; /* the accumulated state list */
-
- xmlRelaxNGStatesPtr freeState; /* the pool of free valid states */
- int freeStatesNr;
- int freeStatesMax;
- xmlRelaxNGStatesPtr *freeStates; /* the pool of free state groups */
-
- /*
- * This is used for "progressive" validation
- */
- xmlRegExecCtxtPtr elem; /* the current element regexp */
- int elemNr; /* the number of element validated */
- int elemMax; /* the max depth of elements */
- xmlRegExecCtxtPtr *elemTab; /* the stack of regexp runtime */
- int pstate; /* progressive state */
- xmlNodePtr pnode; /* the current node */
- xmlRelaxNGDefinePtr pdef; /* the non-streamable definition */
- int perr; /* signal error in content model
- * outside the regexp */
-};
-
-/**
- * xmlRelaxNGInclude:
- *
- * Structure associated to a RelaxNGs document element
- */
-struct _xmlRelaxNGInclude {
- xmlRelaxNGIncludePtr next; /* keep a chain of includes */
- xmlChar *href; /* the normalized href value */
- xmlDocPtr doc; /* the associated XML document */
- xmlRelaxNGDefinePtr content; /* the definitions */
- xmlRelaxNGPtr schema; /* the schema */
-};
-
-/**
- * xmlRelaxNGDocument:
- *
- * Structure associated to a RelaxNGs document element
- */
-struct _xmlRelaxNGDocument {
- xmlRelaxNGDocumentPtr next; /* keep a chain of documents */
- xmlChar *href; /* the normalized href value */
- xmlDocPtr doc; /* the associated XML document */
- xmlRelaxNGDefinePtr content; /* the definitions */
- xmlRelaxNGPtr schema; /* the schema */
- int externalRef; /* 1 if an external ref */
-};
-
-
-/************************************************************************
- * *
- * Some factorized error routines *
- * *
- ************************************************************************/
-
-/**
- * xmlRngPErrMemory:
- * @ctxt: an Relax-NG parser context
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlRngPErrMemory(xmlRelaxNGParserCtxtPtr ctxt, const char *extra)
-{
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- if (ctxt->serror != NULL)
- schannel = ctxt->serror;
- else
- channel = ctxt->error;
- data = ctxt->userData;
- ctxt->nbErrors++;
- }
- if (extra)
- __xmlRaiseError(schannel, channel, data,
- NULL, NULL, XML_FROM_RELAXNGP,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
- else
- __xmlRaiseError(schannel, channel, data,
- NULL, NULL, XML_FROM_RELAXNGP,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
- NULL, NULL, 0, 0, "Memory allocation failed\n");
-}
-
-/**
- * xmlRngVErrMemory:
- * @ctxt: a Relax-NG validation context
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlRngVErrMemory(xmlRelaxNGValidCtxtPtr ctxt, const char *extra)
-{
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- if (ctxt->serror != NULL)
- schannel = ctxt->serror;
- else
- channel = ctxt->error;
- data = ctxt->userData;
- ctxt->nbErrors++;
- }
- if (extra)
- __xmlRaiseError(schannel, channel, data,
- NULL, NULL, XML_FROM_RELAXNGV,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
- else
- __xmlRaiseError(schannel, channel, data,
- NULL, NULL, XML_FROM_RELAXNGV,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, NULL,
- NULL, NULL, 0, 0, "Memory allocation failed\n");
-}
-
-/**
- * xmlRngPErr:
- * @ctxt: a Relax-NG parser context
- * @node: the node raising the error
- * @error: the error code
- * @msg: message
- * @str1: extra info
- * @str2: extra info
- *
- * Handle a Relax NG Parsing error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlRngPErr(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node, int error,
- const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- if (ctxt->serror != NULL)
- schannel = ctxt->serror;
- else
- channel = ctxt->error;
- data = ctxt->userData;
- ctxt->nbErrors++;
- }
- __xmlRaiseError(schannel, channel, data,
- NULL, node, XML_FROM_RELAXNGP,
- error, XML_ERR_ERROR, NULL, 0,
- (const char *) str1, (const char *) str2, NULL, 0, 0,
- msg, str1, str2);
-}
-
-/**
- * xmlRngVErr:
- * @ctxt: a Relax-NG validation context
- * @node: the node raising the error
- * @error: the error code
- * @msg: message
- * @str1: extra info
- * @str2: extra info
- *
- * Handle a Relax NG Validation error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlRngVErr(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node, int error,
- const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- if (ctxt->serror != NULL)
- schannel = ctxt->serror;
- else
- channel = ctxt->error;
- data = ctxt->userData;
- ctxt->nbErrors++;
- }
- __xmlRaiseError(schannel, channel, data,
- NULL, node, XML_FROM_RELAXNGV,
- error, XML_ERR_ERROR, NULL, 0,
- (const char *) str1, (const char *) str2, NULL, 0, 0,
- msg, str1, str2);
-}
-
-/************************************************************************
- * *
- * Preliminary type checking interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlRelaxNGTypeHave:
- * @data: data needed for the library
- * @type: the type name
- * @value: the value to check
- *
- * Function provided by a type library to check if a type is exported
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-typedef int (*xmlRelaxNGTypeHave) (void *data, const xmlChar * type);
-
-/**
- * xmlRelaxNGTypeCheck:
- * @data: data needed for the library
- * @type: the type name
- * @value: the value to check
- * @result: place to store the result if needed
- *
- * Function provided by a type library to check if a value match a type
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-typedef int (*xmlRelaxNGTypeCheck) (void *data, const xmlChar * type,
- const xmlChar * value, void **result,
- xmlNodePtr node);
-
-/**
- * xmlRelaxNGFacetCheck:
- * @data: data needed for the library
- * @type: the type name
- * @facet: the facet name
- * @val: the facet value
- * @strval: the string value
- * @value: the value to check
- *
- * Function provided by a type library to check a value facet
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-typedef int (*xmlRelaxNGFacetCheck) (void *data, const xmlChar * type,
- const xmlChar * facet,
- const xmlChar * val,
- const xmlChar * strval, void *value);
-
-/**
- * xmlRelaxNGTypeFree:
- * @data: data needed for the library
- * @result: the value to free
- *
- * Function provided by a type library to free a returned result
- */
-typedef void (*xmlRelaxNGTypeFree) (void *data, void *result);
-
-/**
- * xmlRelaxNGTypeCompare:
- * @data: data needed for the library
- * @type: the type name
- * @value1: the first value
- * @value2: the second value
- *
- * Function provided by a type library to compare two values accordingly
- * to a type.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-typedef int (*xmlRelaxNGTypeCompare) (void *data, const xmlChar * type,
- const xmlChar * value1,
- xmlNodePtr ctxt1,
- void *comp1,
- const xmlChar * value2,
- xmlNodePtr ctxt2);
-typedef struct _xmlRelaxNGTypeLibrary xmlRelaxNGTypeLibrary;
-typedef xmlRelaxNGTypeLibrary *xmlRelaxNGTypeLibraryPtr;
-struct _xmlRelaxNGTypeLibrary {
- const xmlChar *namespace; /* the datatypeLibrary value */
- void *data; /* data needed for the library */
- xmlRelaxNGTypeHave have; /* the export function */
- xmlRelaxNGTypeCheck check; /* the checking function */
- xmlRelaxNGTypeCompare comp; /* the compare function */
- xmlRelaxNGFacetCheck facet; /* the facet check function */
- xmlRelaxNGTypeFree freef; /* the freeing function */
-};
-
-/************************************************************************
- * *
- * Allocation functions *
- * *
- ************************************************************************/
-static void xmlRelaxNGFreeGrammar(xmlRelaxNGGrammarPtr grammar);
-static void xmlRelaxNGFreeDefine(xmlRelaxNGDefinePtr define);
-static void xmlRelaxNGNormExtSpace(xmlChar * value);
-static void xmlRelaxNGFreeInnerSchema(xmlRelaxNGPtr schema);
-static int xmlRelaxNGEqualValidState(xmlRelaxNGValidCtxtPtr ctxt
- ATTRIBUTE_UNUSED,
- xmlRelaxNGValidStatePtr state1,
- xmlRelaxNGValidStatePtr state2);
-static void xmlRelaxNGFreeValidState(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidStatePtr state);
-
-/**
- * xmlRelaxNGFreeDocument:
- * @docu: a document structure
- *
- * Deallocate a RelaxNG document structure.
- */
-static void
-xmlRelaxNGFreeDocument(xmlRelaxNGDocumentPtr docu)
-{
- if (docu == NULL)
- return;
-
- if (docu->href != NULL)
- xmlFree(docu->href);
- if (docu->doc != NULL)
- xmlFreeDoc(docu->doc);
- if (docu->schema != NULL)
- xmlRelaxNGFreeInnerSchema(docu->schema);
- xmlFree(docu);
-}
-
-/**
- * xmlRelaxNGFreeDocumentList:
- * @docu: a list of document structure
- *
- * Deallocate a RelaxNG document structures.
- */
-static void
-xmlRelaxNGFreeDocumentList(xmlRelaxNGDocumentPtr docu)
-{
- xmlRelaxNGDocumentPtr next;
-
- while (docu != NULL) {
- next = docu->next;
- xmlRelaxNGFreeDocument(docu);
- docu = next;
- }
-}
-
-/**
- * xmlRelaxNGFreeInclude:
- * @incl: a include structure
- *
- * Deallocate a RelaxNG include structure.
- */
-static void
-xmlRelaxNGFreeInclude(xmlRelaxNGIncludePtr incl)
-{
- if (incl == NULL)
- return;
-
- if (incl->href != NULL)
- xmlFree(incl->href);
- if (incl->doc != NULL)
- xmlFreeDoc(incl->doc);
- if (incl->schema != NULL)
- xmlRelaxNGFree(incl->schema);
- xmlFree(incl);
-}
-
-/**
- * xmlRelaxNGFreeIncludeList:
- * @incl: a include structure list
- *
- * Deallocate a RelaxNG include structure.
- */
-static void
-xmlRelaxNGFreeIncludeList(xmlRelaxNGIncludePtr incl)
-{
- xmlRelaxNGIncludePtr next;
-
- while (incl != NULL) {
- next = incl->next;
- xmlRelaxNGFreeInclude(incl);
- incl = next;
- }
-}
-
-/**
- * xmlRelaxNGNewRelaxNG:
- * @ctxt: a Relax-NG validation context (optional)
- *
- * Allocate a new RelaxNG structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGPtr
-xmlRelaxNGNewRelaxNG(xmlRelaxNGParserCtxtPtr ctxt)
-{
- xmlRelaxNGPtr ret;
-
- ret = (xmlRelaxNGPtr) xmlMalloc(sizeof(xmlRelaxNG));
- if (ret == NULL) {
- xmlRngPErrMemory(ctxt, NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNG));
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGFreeInnerSchema:
- * @schema: a schema structure
- *
- * Deallocate a RelaxNG schema structure.
- */
-static void
-xmlRelaxNGFreeInnerSchema(xmlRelaxNGPtr schema)
-{
- if (schema == NULL)
- return;
-
- if (schema->doc != NULL)
- xmlFreeDoc(schema->doc);
- if (schema->defTab != NULL) {
- int i;
-
- for (i = 0; i < schema->defNr; i++)
- xmlRelaxNGFreeDefine(schema->defTab[i]);
- xmlFree(schema->defTab);
- }
-
- xmlFree(schema);
-}
-
-/**
- * xmlRelaxNGFree:
- * @schema: a schema structure
- *
- * Deallocate a RelaxNG structure.
- */
-void
-xmlRelaxNGFree(xmlRelaxNGPtr schema)
-{
- if (schema == NULL)
- return;
-
- if (schema->topgrammar != NULL)
- xmlRelaxNGFreeGrammar(schema->topgrammar);
- if (schema->doc != NULL)
- xmlFreeDoc(schema->doc);
- if (schema->documents != NULL)
- xmlRelaxNGFreeDocumentList(schema->documents);
- if (schema->includes != NULL)
- xmlRelaxNGFreeIncludeList(schema->includes);
- if (schema->defTab != NULL) {
- int i;
-
- for (i = 0; i < schema->defNr; i++)
- xmlRelaxNGFreeDefine(schema->defTab[i]);
- xmlFree(schema->defTab);
- }
-
- xmlFree(schema);
-}
-
-/**
- * xmlRelaxNGNewGrammar:
- * @ctxt: a Relax-NG validation context (optional)
- *
- * Allocate a new RelaxNG grammar.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGGrammarPtr
-xmlRelaxNGNewGrammar(xmlRelaxNGParserCtxtPtr ctxt)
-{
- xmlRelaxNGGrammarPtr ret;
-
- ret = (xmlRelaxNGGrammarPtr) xmlMalloc(sizeof(xmlRelaxNGGrammar));
- if (ret == NULL) {
- xmlRngPErrMemory(ctxt, NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGGrammar));
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGFreeGrammar:
- * @grammar: a grammar structure
- *
- * Deallocate a RelaxNG grammar structure.
- */
-static void
-xmlRelaxNGFreeGrammar(xmlRelaxNGGrammarPtr grammar)
-{
- if (grammar == NULL)
- return;
-
- if (grammar->children != NULL) {
- xmlRelaxNGFreeGrammar(grammar->children);
- }
- if (grammar->next != NULL) {
- xmlRelaxNGFreeGrammar(grammar->next);
- }
- if (grammar->refs != NULL) {
- xmlHashFree(grammar->refs, NULL);
- }
- if (grammar->defs != NULL) {
- xmlHashFree(grammar->defs, NULL);
- }
-
- xmlFree(grammar);
-}
-
-/**
- * xmlRelaxNGNewDefine:
- * @ctxt: a Relax-NG validation context
- * @node: the node in the input document.
- *
- * Allocate a new RelaxNG define.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGNewDefine(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGDefinePtr ret;
-
- if (ctxt->defMax == 0) {
- ctxt->defMax = 16;
- ctxt->defNr = 0;
- ctxt->defTab = (xmlRelaxNGDefinePtr *)
- xmlMalloc(ctxt->defMax * sizeof(xmlRelaxNGDefinePtr));
- if (ctxt->defTab == NULL) {
- xmlRngPErrMemory(ctxt, "allocating define\n");
- return (NULL);
- }
- } else if (ctxt->defMax <= ctxt->defNr) {
- xmlRelaxNGDefinePtr *tmp;
-
- ctxt->defMax *= 2;
- tmp = (xmlRelaxNGDefinePtr *) xmlRealloc(ctxt->defTab,
- ctxt->defMax *
- sizeof
- (xmlRelaxNGDefinePtr));
- if (tmp == NULL) {
- xmlRngPErrMemory(ctxt, "allocating define\n");
- return (NULL);
- }
- ctxt->defTab = tmp;
- }
- ret = (xmlRelaxNGDefinePtr) xmlMalloc(sizeof(xmlRelaxNGDefine));
- if (ret == NULL) {
- xmlRngPErrMemory(ctxt, "allocating define\n");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGDefine));
- ctxt->defTab[ctxt->defNr++] = ret;
- ret->node = node;
- ret->depth = -1;
- return (ret);
-}
-
-/**
- * xmlRelaxNGFreePartition:
- * @partitions: a partition set structure
- *
- * Deallocate RelaxNG partition set structures.
- */
-static void
-xmlRelaxNGFreePartition(xmlRelaxNGPartitionPtr partitions)
-{
- xmlRelaxNGInterleaveGroupPtr group;
- int j;
-
- if (partitions != NULL) {
- if (partitions->groups != NULL) {
- for (j = 0; j < partitions->nbgroups; j++) {
- group = partitions->groups[j];
- if (group != NULL) {
- if (group->defs != NULL)
- xmlFree(group->defs);
- if (group->attrs != NULL)
- xmlFree(group->attrs);
- xmlFree(group);
- }
- }
- xmlFree(partitions->groups);
- }
- if (partitions->triage != NULL) {
- xmlHashFree(partitions->triage, NULL);
- }
- xmlFree(partitions);
- }
-}
-
-/**
- * xmlRelaxNGFreeDefine:
- * @define: a define structure
- *
- * Deallocate a RelaxNG define structure.
- */
-static void
-xmlRelaxNGFreeDefine(xmlRelaxNGDefinePtr define)
-{
- if (define == NULL)
- return;
-
- if ((define->type == XML_RELAXNG_VALUE) && (define->attrs != NULL)) {
- xmlRelaxNGTypeLibraryPtr lib;
-
- lib = (xmlRelaxNGTypeLibraryPtr) define->data;
- if ((lib != NULL) && (lib->freef != NULL))
- lib->freef(lib->data, (void *) define->attrs);
- }
- if ((define->data != NULL) && (define->type == XML_RELAXNG_INTERLEAVE))
- xmlRelaxNGFreePartition((xmlRelaxNGPartitionPtr) define->data);
- if ((define->data != NULL) && (define->type == XML_RELAXNG_CHOICE))
- xmlHashFree((xmlHashTablePtr) define->data, NULL);
- if (define->name != NULL)
- xmlFree(define->name);
- if (define->ns != NULL)
- xmlFree(define->ns);
- if (define->value != NULL)
- xmlFree(define->value);
- if (define->contModel != NULL)
- xmlRegFreeRegexp(define->contModel);
- xmlFree(define);
-}
-
-/**
- * xmlRelaxNGNewStates:
- * @ctxt: a Relax-NG validation context
- * @size: the default size for the container
- *
- * Allocate a new RelaxNG validation state container
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGStatesPtr
-xmlRelaxNGNewStates(xmlRelaxNGValidCtxtPtr ctxt, int size)
-{
- xmlRelaxNGStatesPtr ret;
-
- if ((ctxt != NULL) &&
- (ctxt->freeStates != NULL) && (ctxt->freeStatesNr > 0)) {
- ctxt->freeStatesNr--;
- ret = ctxt->freeStates[ctxt->freeStatesNr];
- ret->nbState = 0;
- return (ret);
- }
- if (size < 16)
- size = 16;
-
- ret = (xmlRelaxNGStatesPtr) xmlMalloc(sizeof(xmlRelaxNGStates) +
- (size -
- 1) *
- sizeof(xmlRelaxNGValidStatePtr));
- if (ret == NULL) {
- xmlRngVErrMemory(ctxt, "allocating states\n");
- return (NULL);
- }
- ret->nbState = 0;
- ret->maxState = size;
- ret->tabState = (xmlRelaxNGValidStatePtr *) xmlMalloc((size) *
- sizeof
- (xmlRelaxNGValidStatePtr));
- if (ret->tabState == NULL) {
- xmlRngVErrMemory(ctxt, "allocating states\n");
- xmlFree(ret);
- return (NULL);
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGAddStateUniq:
- * @ctxt: a Relax-NG validation context
- * @states: the states container
- * @state: the validation state
- *
- * Add a RelaxNG validation state to the container without checking
- * for unicity.
- *
- * Return 1 in case of success and 0 if this is a duplicate and -1 on error
- */
-static int
-xmlRelaxNGAddStatesUniq(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGStatesPtr states,
- xmlRelaxNGValidStatePtr state)
-{
- if (state == NULL) {
- return (-1);
- }
- if (states->nbState >= states->maxState) {
- xmlRelaxNGValidStatePtr *tmp;
- int size;
-
- size = states->maxState * 2;
- tmp = (xmlRelaxNGValidStatePtr *) xmlRealloc(states->tabState,
- (size) *
- sizeof
- (xmlRelaxNGValidStatePtr));
- if (tmp == NULL) {
- xmlRngVErrMemory(ctxt, "adding states\n");
- return (-1);
- }
- states->tabState = tmp;
- states->maxState = size;
- }
- states->tabState[states->nbState++] = state;
- return (1);
-}
-
-/**
- * xmlRelaxNGAddState:
- * @ctxt: a Relax-NG validation context
- * @states: the states container
- * @state: the validation state
- *
- * Add a RelaxNG validation state to the container
- *
- * Return 1 in case of success and 0 if this is a duplicate and -1 on error
- */
-static int
-xmlRelaxNGAddStates(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGStatesPtr states,
- xmlRelaxNGValidStatePtr state)
-{
- int i;
-
- if (state == NULL || states == NULL) {
- return (-1);
- }
- if (states->nbState >= states->maxState) {
- xmlRelaxNGValidStatePtr *tmp;
- int size;
-
- size = states->maxState * 2;
- tmp = (xmlRelaxNGValidStatePtr *) xmlRealloc(states->tabState,
- (size) *
- sizeof
- (xmlRelaxNGValidStatePtr));
- if (tmp == NULL) {
- xmlRngVErrMemory(ctxt, "adding states\n");
- return (-1);
- }
- states->tabState = tmp;
- states->maxState = size;
- }
- for (i = 0; i < states->nbState; i++) {
- if (xmlRelaxNGEqualValidState(ctxt, state, states->tabState[i])) {
- xmlRelaxNGFreeValidState(ctxt, state);
- return (0);
- }
- }
- states->tabState[states->nbState++] = state;
- return (1);
-}
-
-/**
- * xmlRelaxNGFreeStates:
- * @ctxt: a Relax-NG validation context
- * @states: teh container
- *
- * Free a RelaxNG validation state container
- */
-static void
-xmlRelaxNGFreeStates(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGStatesPtr states)
-{
- if (states == NULL)
- return;
- if ((ctxt != NULL) && (ctxt->freeStates == NULL)) {
- ctxt->freeStatesMax = 40;
- ctxt->freeStatesNr = 0;
- ctxt->freeStates = (xmlRelaxNGStatesPtr *)
- xmlMalloc(ctxt->freeStatesMax * sizeof(xmlRelaxNGStatesPtr));
- if (ctxt->freeStates == NULL) {
- xmlRngVErrMemory(ctxt, "storing states\n");
- }
- } else if ((ctxt != NULL)
- && (ctxt->freeStatesNr >= ctxt->freeStatesMax)) {
- xmlRelaxNGStatesPtr *tmp;
-
- tmp = (xmlRelaxNGStatesPtr *) xmlRealloc(ctxt->freeStates,
- 2 * ctxt->freeStatesMax *
- sizeof
- (xmlRelaxNGStatesPtr));
- if (tmp == NULL) {
- xmlRngVErrMemory(ctxt, "storing states\n");
- xmlFree(states->tabState);
- xmlFree(states);
- return;
- }
- ctxt->freeStates = tmp;
- ctxt->freeStatesMax *= 2;
- }
- if ((ctxt == NULL) || (ctxt->freeStates == NULL)) {
- xmlFree(states->tabState);
- xmlFree(states);
- } else {
- ctxt->freeStates[ctxt->freeStatesNr++] = states;
- }
-}
-
-/**
- * xmlRelaxNGNewValidState:
- * @ctxt: a Relax-NG validation context
- * @node: the current node or NULL for the document
- *
- * Allocate a new RelaxNG validation state
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGValidStatePtr
-xmlRelaxNGNewValidState(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGValidStatePtr ret;
- xmlAttrPtr attr;
- xmlAttrPtr attrs[MAX_ATTR];
- int nbAttrs = 0;
- xmlNodePtr root = NULL;
-
- if (node == NULL) {
- root = xmlDocGetRootElement(ctxt->doc);
- if (root == NULL)
- return (NULL);
- } else {
- attr = node->properties;
- while (attr != NULL) {
- if (nbAttrs < MAX_ATTR)
- attrs[nbAttrs++] = attr;
- else
- nbAttrs++;
- attr = attr->next;
- }
- }
- if ((ctxt->freeState != NULL) && (ctxt->freeState->nbState > 0)) {
- ctxt->freeState->nbState--;
- ret = ctxt->freeState->tabState[ctxt->freeState->nbState];
- } else {
- ret =
- (xmlRelaxNGValidStatePtr)
- xmlMalloc(sizeof(xmlRelaxNGValidState));
- if (ret == NULL) {
- xmlRngVErrMemory(ctxt, "allocating states\n");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGValidState));
- }
- ret->value = NULL;
- ret->endvalue = NULL;
- if (node == NULL) {
- ret->node = (xmlNodePtr) ctxt->doc;
- ret->seq = root;
- } else {
- ret->node = node;
- ret->seq = node->children;
- }
- ret->nbAttrs = 0;
- if (nbAttrs > 0) {
- if (ret->attrs == NULL) {
- if (nbAttrs < 4)
- ret->maxAttrs = 4;
- else
- ret->maxAttrs = nbAttrs;
- ret->attrs = (xmlAttrPtr *) xmlMalloc(ret->maxAttrs *
- sizeof(xmlAttrPtr));
- if (ret->attrs == NULL) {
- xmlRngVErrMemory(ctxt, "allocating states\n");
- return (ret);
- }
- } else if (ret->maxAttrs < nbAttrs) {
- xmlAttrPtr *tmp;
-
- tmp = (xmlAttrPtr *) xmlRealloc(ret->attrs, nbAttrs *
- sizeof(xmlAttrPtr));
- if (tmp == NULL) {
- xmlRngVErrMemory(ctxt, "allocating states\n");
- return (ret);
- }
- ret->attrs = tmp;
- ret->maxAttrs = nbAttrs;
- }
- ret->nbAttrs = nbAttrs;
- if (nbAttrs < MAX_ATTR) {
- memcpy(ret->attrs, attrs, sizeof(xmlAttrPtr) * nbAttrs);
- } else {
- attr = node->properties;
- nbAttrs = 0;
- while (attr != NULL) {
- ret->attrs[nbAttrs++] = attr;
- attr = attr->next;
- }
- }
- }
- ret->nbAttrLeft = ret->nbAttrs;
- return (ret);
-}
-
-/**
- * xmlRelaxNGCopyValidState:
- * @ctxt: a Relax-NG validation context
- * @state: a validation state
- *
- * Copy the validation state
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlRelaxNGValidStatePtr
-xmlRelaxNGCopyValidState(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidStatePtr state)
-{
- xmlRelaxNGValidStatePtr ret;
- unsigned int maxAttrs;
- xmlAttrPtr *attrs;
-
- if (state == NULL)
- return (NULL);
- if ((ctxt->freeState != NULL) && (ctxt->freeState->nbState > 0)) {
- ctxt->freeState->nbState--;
- ret = ctxt->freeState->tabState[ctxt->freeState->nbState];
- } else {
- ret =
- (xmlRelaxNGValidStatePtr)
- xmlMalloc(sizeof(xmlRelaxNGValidState));
- if (ret == NULL) {
- xmlRngVErrMemory(ctxt, "allocating states\n");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGValidState));
- }
- attrs = ret->attrs;
- maxAttrs = ret->maxAttrs;
- memcpy(ret, state, sizeof(xmlRelaxNGValidState));
- ret->attrs = attrs;
- ret->maxAttrs = maxAttrs;
- if (state->nbAttrs > 0) {
- if (ret->attrs == NULL) {
- ret->maxAttrs = state->maxAttrs;
- ret->attrs = (xmlAttrPtr *) xmlMalloc(ret->maxAttrs *
- sizeof(xmlAttrPtr));
- if (ret->attrs == NULL) {
- xmlRngVErrMemory(ctxt, "allocating states\n");
- ret->nbAttrs = 0;
- return (ret);
- }
- } else if (ret->maxAttrs < state->nbAttrs) {
- xmlAttrPtr *tmp;
-
- tmp = (xmlAttrPtr *) xmlRealloc(ret->attrs, state->maxAttrs *
- sizeof(xmlAttrPtr));
- if (tmp == NULL) {
- xmlRngVErrMemory(ctxt, "allocating states\n");
- ret->nbAttrs = 0;
- return (ret);
- }
- ret->maxAttrs = state->maxAttrs;
- ret->attrs = tmp;
- }
- memcpy(ret->attrs, state->attrs,
- state->nbAttrs * sizeof(xmlAttrPtr));
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGEqualValidState:
- * @ctxt: a Relax-NG validation context
- * @state1: a validation state
- * @state2: a validation state
- *
- * Compare the validation states for equality
- *
- * Returns 1 if equald, 0 otherwise
- */
-static int
-xmlRelaxNGEqualValidState(xmlRelaxNGValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlRelaxNGValidStatePtr state1,
- xmlRelaxNGValidStatePtr state2)
-{
- int i;
-
- if ((state1 == NULL) || (state2 == NULL))
- return (0);
- if (state1 == state2)
- return (1);
- if (state1->node != state2->node)
- return (0);
- if (state1->seq != state2->seq)
- return (0);
- if (state1->nbAttrLeft != state2->nbAttrLeft)
- return (0);
- if (state1->nbAttrs != state2->nbAttrs)
- return (0);
- if (state1->endvalue != state2->endvalue)
- return (0);
- if ((state1->value != state2->value) &&
- (!xmlStrEqual(state1->value, state2->value)))
- return (0);
- for (i = 0; i < state1->nbAttrs; i++) {
- if (state1->attrs[i] != state2->attrs[i])
- return (0);
- }
- return (1);
-}
-
-/**
- * xmlRelaxNGFreeValidState:
- * @state: a validation state structure
- *
- * Deallocate a RelaxNG validation state structure.
- */
-static void
-xmlRelaxNGFreeValidState(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidStatePtr state)
-{
- if (state == NULL)
- return;
-
- if ((ctxt != NULL) && (ctxt->freeState == NULL)) {
- ctxt->freeState = xmlRelaxNGNewStates(ctxt, 40);
- }
- if ((ctxt == NULL) || (ctxt->freeState == NULL)) {
- if (state->attrs != NULL)
- xmlFree(state->attrs);
- xmlFree(state);
- } else {
- xmlRelaxNGAddStatesUniq(ctxt, ctxt->freeState, state);
- }
-}
-
-/************************************************************************
- * *
- * Semi internal functions *
- * *
- ************************************************************************/
-
-/**
- * xmlRelaxParserSetFlag:
- * @ctxt: a RelaxNG parser context
- * @flags: a set of flags values
- *
- * Semi private function used to pass informations to a parser context
- * which are a combination of xmlRelaxNGParserFlag .
- *
- * Returns 0 if success and -1 in case of error
- */
-int
-xmlRelaxParserSetFlag(xmlRelaxNGParserCtxtPtr ctxt, int flags)
-{
- if (ctxt == NULL) return(-1);
- if (flags & XML_RELAXNGP_FREE_DOC) {
- ctxt->crng |= XML_RELAXNGP_FREE_DOC;
- flags -= XML_RELAXNGP_FREE_DOC;
- }
- if (flags & XML_RELAXNGP_CRNG) {
- ctxt->crng |= XML_RELAXNGP_CRNG;
- flags -= XML_RELAXNGP_CRNG;
- }
- if (flags != 0) return(-1);
- return(0);
-}
-
-/************************************************************************
- * *
- * Document functions *
- * *
- ************************************************************************/
-static xmlDocPtr xmlRelaxNGCleanupDoc(xmlRelaxNGParserCtxtPtr ctxt,
- xmlDocPtr doc);
-
-/**
- * xmlRelaxNGIncludePush:
- * @ctxt: the parser context
- * @value: the element doc
- *
- * Pushes a new include on top of the include stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-xmlRelaxNGIncludePush(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGIncludePtr value)
-{
- if (ctxt->incTab == NULL) {
- ctxt->incMax = 4;
- ctxt->incNr = 0;
- ctxt->incTab =
- (xmlRelaxNGIncludePtr *) xmlMalloc(ctxt->incMax *
- sizeof(ctxt->incTab[0]));
- if (ctxt->incTab == NULL) {
- xmlRngPErrMemory(ctxt, "allocating include\n");
- return (0);
- }
- }
- if (ctxt->incNr >= ctxt->incMax) {
- ctxt->incMax *= 2;
- ctxt->incTab =
- (xmlRelaxNGIncludePtr *) xmlRealloc(ctxt->incTab,
- ctxt->incMax *
- sizeof(ctxt->incTab[0]));
- if (ctxt->incTab == NULL) {
- xmlRngPErrMemory(ctxt, "allocating include\n");
- return (0);
- }
- }
- ctxt->incTab[ctxt->incNr] = value;
- ctxt->inc = value;
- return (ctxt->incNr++);
-}
-
-/**
- * xmlRelaxNGIncludePop:
- * @ctxt: the parser context
- *
- * Pops the top include from the include stack
- *
- * Returns the include just removed
- */
-static xmlRelaxNGIncludePtr
-xmlRelaxNGIncludePop(xmlRelaxNGParserCtxtPtr ctxt)
-{
- xmlRelaxNGIncludePtr ret;
-
- if (ctxt->incNr <= 0)
- return (NULL);
- ctxt->incNr--;
- if (ctxt->incNr > 0)
- ctxt->inc = ctxt->incTab[ctxt->incNr - 1];
- else
- ctxt->inc = NULL;
- ret = ctxt->incTab[ctxt->incNr];
- ctxt->incTab[ctxt->incNr] = NULL;
- return (ret);
-}
-
-/**
- * xmlRelaxNGRemoveRedefine:
- * @ctxt: the parser context
- * @URL: the normalized URL
- * @target: the included target
- * @name: the define name to eliminate
- *
- * Applies the elimination algorithm of 4.7
- *
- * Returns 0 in case of error, 1 in case of success.
- */
-static int
-xmlRelaxNGRemoveRedefine(xmlRelaxNGParserCtxtPtr ctxt,
- const xmlChar * URL ATTRIBUTE_UNUSED,
- xmlNodePtr target, const xmlChar * name)
-{
- int found = 0;
- xmlNodePtr tmp, tmp2;
- xmlChar *name2;
-
-#ifdef DEBUG_INCLUDE
- if (name == NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Elimination of <include> start from %s\n", URL);
- else
- xmlGenericError(xmlGenericErrorContext,
- "Elimination of <include> define %s from %s\n",
- name, URL);
-#endif
- tmp = target;
- while (tmp != NULL) {
- tmp2 = tmp->next;
- if ((name == NULL) && (IS_RELAXNG(tmp, "start"))) {
- found = 1;
- xmlUnlinkNode(tmp);
- xmlFreeNode(tmp);
- } else if ((name != NULL) && (IS_RELAXNG(tmp, "define"))) {
- name2 = xmlGetProp(tmp, BAD_CAST "name");
- xmlRelaxNGNormExtSpace(name2);
- if (name2 != NULL) {
- if (xmlStrEqual(name, name2)) {
- found = 1;
- xmlUnlinkNode(tmp);
- xmlFreeNode(tmp);
- }
- xmlFree(name2);
- }
- } else if (IS_RELAXNG(tmp, "include")) {
- xmlChar *href = NULL;
- xmlRelaxNGDocumentPtr inc = tmp->psvi;
-
- if ((inc != NULL) && (inc->doc != NULL) &&
- (inc->doc->children != NULL)) {
-
- if (xmlStrEqual
- (inc->doc->children->name, BAD_CAST "grammar")) {
-#ifdef DEBUG_INCLUDE
- href = xmlGetProp(tmp, BAD_CAST "href");
-#endif
- if (xmlRelaxNGRemoveRedefine(ctxt, href,
- xmlDocGetRootElement(inc->doc)->children,
- name) == 1) {
- found = 1;
- }
-#ifdef DEBUG_INCLUDE
- if (href != NULL)
- xmlFree(href);
-#endif
- }
- }
- }
- tmp = tmp2;
- }
- return (found);
-}
-
-/**
- * xmlRelaxNGLoadInclude:
- * @ctxt: the parser context
- * @URL: the normalized URL
- * @node: the include node.
- * @ns: the namespace passed from the context.
- *
- * First lookup if the document is already loaded into the parser context,
- * check against recursion. If not found the resource is loaded and
- * the content is preprocessed before being returned back to the caller.
- *
- * Returns the xmlRelaxNGIncludePtr or NULL in case of error
- */
-static xmlRelaxNGIncludePtr
-xmlRelaxNGLoadInclude(xmlRelaxNGParserCtxtPtr ctxt, const xmlChar * URL,
- xmlNodePtr node, const xmlChar * ns)
-{
- xmlRelaxNGIncludePtr ret = NULL;
- xmlDocPtr doc;
- int i;
- xmlNodePtr root, cur;
-
-#ifdef DEBUG_INCLUDE
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGLoadInclude(%s)\n", URL);
-#endif
-
- /*
- * check against recursion in the stack
- */
- for (i = 0; i < ctxt->incNr; i++) {
- if (xmlStrEqual(ctxt->incTab[i]->href, URL)) {
- xmlRngPErr(ctxt, NULL, XML_RNGP_INCLUDE_RECURSE,
- "Detected an Include recursion for %s\n", URL,
- NULL);
- return (NULL);
- }
- }
-
- /*
- * load the document
- */
- doc = xmlReadFile((const char *) URL,NULL,0);
- if (doc == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARSE_ERROR,
- "xmlRelaxNG: could not load %s\n", URL, NULL);
- return (NULL);
- }
-#ifdef DEBUG_INCLUDE
- xmlGenericError(xmlGenericErrorContext, "Parsed %s Okay\n", URL);
-#endif
-
- /*
- * Allocate the document structures and register it first.
- */
- ret = (xmlRelaxNGIncludePtr) xmlMalloc(sizeof(xmlRelaxNGInclude));
- if (ret == NULL) {
- xmlRngPErrMemory(ctxt, "allocating include\n");
- xmlFreeDoc(doc);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGInclude));
- ret->doc = doc;
- ret->href = xmlStrdup(URL);
- ret->next = ctxt->includes;
- ctxt->includes = ret;
-
- /*
- * transmit the ns if needed
- */
- if (ns != NULL) {
- root = xmlDocGetRootElement(doc);
- if (root != NULL) {
- if (xmlHasProp(root, BAD_CAST "ns") == NULL) {
- xmlSetProp(root, BAD_CAST "ns", ns);
- }
- }
- }
-
- /*
- * push it on the stack
- */
- xmlRelaxNGIncludePush(ctxt, ret);
-
- /*
- * Some preprocessing of the document content, this include recursing
- * in the include stack.
- */
-#ifdef DEBUG_INCLUDE
- xmlGenericError(xmlGenericErrorContext, "cleanup of %s\n", URL);
-#endif
-
- doc = xmlRelaxNGCleanupDoc(ctxt, doc);
- if (doc == NULL) {
- ctxt->inc = NULL;
- return (NULL);
- }
-
- /*
- * Pop up the include from the stack
- */
- xmlRelaxNGIncludePop(ctxt);
-
-#ifdef DEBUG_INCLUDE
- xmlGenericError(xmlGenericErrorContext, "Checking of %s\n", URL);
-#endif
- /*
- * Check that the top element is a grammar
- */
- root = xmlDocGetRootElement(doc);
- if (root == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY,
- "xmlRelaxNG: included document is empty %s\n", URL,
- NULL);
- return (NULL);
- }
- if (!IS_RELAXNG(root, "grammar")) {
- xmlRngPErr(ctxt, node, XML_RNGP_GRAMMAR_MISSING,
- "xmlRelaxNG: included document %s root is not a grammar\n",
- URL, NULL);
- return (NULL);
- }
-
- /*
- * Elimination of redefined rules in the include.
- */
- cur = node->children;
- while (cur != NULL) {
- if (IS_RELAXNG(cur, "start")) {
- int found = 0;
-
- found =
- xmlRelaxNGRemoveRedefine(ctxt, URL, root->children, NULL);
- if (!found) {
- xmlRngPErr(ctxt, node, XML_RNGP_START_MISSING,
- "xmlRelaxNG: include %s has a start but not the included grammar\n",
- URL, NULL);
- }
- } else if (IS_RELAXNG(cur, "define")) {
- xmlChar *name;
-
- name = xmlGetProp(cur, BAD_CAST "name");
- if (name == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_NAME_MISSING,
- "xmlRelaxNG: include %s has define without name\n",
- URL, NULL);
- } else {
- int found;
-
- xmlRelaxNGNormExtSpace(name);
- found = xmlRelaxNGRemoveRedefine(ctxt, URL,
- root->children, name);
- if (!found) {
- xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_MISSING,
- "xmlRelaxNG: include %s has a define %s but not the included grammar\n",
- URL, name);
- }
- xmlFree(name);
- }
- }
- cur = cur->next;
- }
-
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidErrorPush:
- * @ctxt: the validation context
- * @err: the error code
- * @arg1: the first string argument
- * @arg2: the second string argument
- * @dup: arg need to be duplicated
- *
- * Pushes a new error on top of the error stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-xmlRelaxNGValidErrorPush(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidErr err, const xmlChar * arg1,
- const xmlChar * arg2, int dup)
-{
- xmlRelaxNGValidErrorPtr cur;
-
-#ifdef DEBUG_ERROR
- xmlGenericError(xmlGenericErrorContext,
- "Pushing error %d at %d on stack\n", err, ctxt->errNr);
-#endif
- if (ctxt->errTab == NULL) {
- ctxt->errMax = 8;
- ctxt->errNr = 0;
- ctxt->errTab =
- (xmlRelaxNGValidErrorPtr) xmlMalloc(ctxt->errMax *
- sizeof
- (xmlRelaxNGValidError));
- if (ctxt->errTab == NULL) {
- xmlRngVErrMemory(ctxt, "pushing error\n");
- return (0);
- }
- ctxt->err = NULL;
- }
- if (ctxt->errNr >= ctxt->errMax) {
- ctxt->errMax *= 2;
- ctxt->errTab =
- (xmlRelaxNGValidErrorPtr) xmlRealloc(ctxt->errTab,
- ctxt->errMax *
- sizeof
- (xmlRelaxNGValidError));
- if (ctxt->errTab == NULL) {
- xmlRngVErrMemory(ctxt, "pushing error\n");
- return (0);
- }
- ctxt->err = &ctxt->errTab[ctxt->errNr - 1];
- }
- if ((ctxt->err != NULL) && (ctxt->state != NULL) &&
- (ctxt->err->node == ctxt->state->node) && (ctxt->err->err == err))
- return (ctxt->errNr);
- cur = &ctxt->errTab[ctxt->errNr];
- cur->err = err;
- if (dup) {
- cur->arg1 = xmlStrdup(arg1);
- cur->arg2 = xmlStrdup(arg2);
- cur->flags = ERROR_IS_DUP;
- } else {
- cur->arg1 = arg1;
- cur->arg2 = arg2;
- cur->flags = 0;
- }
- if (ctxt->state != NULL) {
- cur->node = ctxt->state->node;
- cur->seq = ctxt->state->seq;
- } else {
- cur->node = NULL;
- cur->seq = NULL;
- }
- ctxt->err = cur;
- return (ctxt->errNr++);
-}
-
-/**
- * xmlRelaxNGValidErrorPop:
- * @ctxt: the validation context
- *
- * Pops the top error from the error stack
- */
-static void
-xmlRelaxNGValidErrorPop(xmlRelaxNGValidCtxtPtr ctxt)
-{
- xmlRelaxNGValidErrorPtr cur;
-
- if (ctxt->errNr <= 0) {
- ctxt->err = NULL;
- return;
- }
- ctxt->errNr--;
- if (ctxt->errNr > 0)
- ctxt->err = &ctxt->errTab[ctxt->errNr - 1];
- else
- ctxt->err = NULL;
- cur = &ctxt->errTab[ctxt->errNr];
- if (cur->flags & ERROR_IS_DUP) {
- if (cur->arg1 != NULL)
- xmlFree((xmlChar *) cur->arg1);
- cur->arg1 = NULL;
- if (cur->arg2 != NULL)
- xmlFree((xmlChar *) cur->arg2);
- cur->arg2 = NULL;
- cur->flags = 0;
- }
-}
-
-/**
- * xmlRelaxNGDocumentPush:
- * @ctxt: the parser context
- * @value: the element doc
- *
- * Pushes a new doc on top of the doc stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-xmlRelaxNGDocumentPush(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDocumentPtr value)
-{
- if (ctxt->docTab == NULL) {
- ctxt->docMax = 4;
- ctxt->docNr = 0;
- ctxt->docTab =
- (xmlRelaxNGDocumentPtr *) xmlMalloc(ctxt->docMax *
- sizeof(ctxt->docTab[0]));
- if (ctxt->docTab == NULL) {
- xmlRngPErrMemory(ctxt, "adding document\n");
- return (0);
- }
- }
- if (ctxt->docNr >= ctxt->docMax) {
- ctxt->docMax *= 2;
- ctxt->docTab =
- (xmlRelaxNGDocumentPtr *) xmlRealloc(ctxt->docTab,
- ctxt->docMax *
- sizeof(ctxt->docTab[0]));
- if (ctxt->docTab == NULL) {
- xmlRngPErrMemory(ctxt, "adding document\n");
- return (0);
- }
- }
- ctxt->docTab[ctxt->docNr] = value;
- ctxt->doc = value;
- return (ctxt->docNr++);
-}
-
-/**
- * xmlRelaxNGDocumentPop:
- * @ctxt: the parser context
- *
- * Pops the top doc from the doc stack
- *
- * Returns the doc just removed
- */
-static xmlRelaxNGDocumentPtr
-xmlRelaxNGDocumentPop(xmlRelaxNGParserCtxtPtr ctxt)
-{
- xmlRelaxNGDocumentPtr ret;
-
- if (ctxt->docNr <= 0)
- return (NULL);
- ctxt->docNr--;
- if (ctxt->docNr > 0)
- ctxt->doc = ctxt->docTab[ctxt->docNr - 1];
- else
- ctxt->doc = NULL;
- ret = ctxt->docTab[ctxt->docNr];
- ctxt->docTab[ctxt->docNr] = NULL;
- return (ret);
-}
-
-/**
- * xmlRelaxNGLoadExternalRef:
- * @ctxt: the parser context
- * @URL: the normalized URL
- * @ns: the inherited ns if any
- *
- * First lookup if the document is already loaded into the parser context,
- * check against recursion. If not found the resource is loaded and
- * the content is preprocessed before being returned back to the caller.
- *
- * Returns the xmlRelaxNGDocumentPtr or NULL in case of error
- */
-static xmlRelaxNGDocumentPtr
-xmlRelaxNGLoadExternalRef(xmlRelaxNGParserCtxtPtr ctxt,
- const xmlChar * URL, const xmlChar * ns)
-{
- xmlRelaxNGDocumentPtr ret = NULL;
- xmlDocPtr doc;
- xmlNodePtr root;
- int i;
-
- /*
- * check against recursion in the stack
- */
- for (i = 0; i < ctxt->docNr; i++) {
- if (xmlStrEqual(ctxt->docTab[i]->href, URL)) {
- xmlRngPErr(ctxt, NULL, XML_RNGP_EXTERNALREF_RECURSE,
- "Detected an externalRef recursion for %s\n", URL,
- NULL);
- return (NULL);
- }
- }
-
- /*
- * load the document
- */
- doc = xmlReadFile((const char *) URL,NULL,0);
- if (doc == NULL) {
- xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
- "xmlRelaxNG: could not load %s\n", URL, NULL);
- return (NULL);
- }
-
- /*
- * Allocate the document structures and register it first.
- */
- ret = (xmlRelaxNGDocumentPtr) xmlMalloc(sizeof(xmlRelaxNGDocument));
- if (ret == NULL) {
- xmlRngPErr(ctxt, (xmlNodePtr) doc, XML_ERR_NO_MEMORY,
- "xmlRelaxNG: allocate memory for doc %s\n", URL, NULL);
- xmlFreeDoc(doc);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGDocument));
- ret->doc = doc;
- ret->href = xmlStrdup(URL);
- ret->next = ctxt->documents;
- ret->externalRef = 1;
- ctxt->documents = ret;
-
- /*
- * transmit the ns if needed
- */
- if (ns != NULL) {
- root = xmlDocGetRootElement(doc);
- if (root != NULL) {
- if (xmlHasProp(root, BAD_CAST "ns") == NULL) {
- xmlSetProp(root, BAD_CAST "ns", ns);
- }
- }
- }
-
- /*
- * push it on the stack and register it in the hash table
- */
- xmlRelaxNGDocumentPush(ctxt, ret);
-
- /*
- * Some preprocessing of the document content
- */
- doc = xmlRelaxNGCleanupDoc(ctxt, doc);
- if (doc == NULL) {
- ctxt->doc = NULL;
- return (NULL);
- }
-
- xmlRelaxNGDocumentPop(ctxt);
-
- return (ret);
-}
-
-/************************************************************************
- * *
- * Error functions *
- * *
- ************************************************************************/
-
-#define VALID_ERR(a) xmlRelaxNGAddValidError(ctxt, a, NULL, NULL, 0);
-#define VALID_ERR2(a, b) xmlRelaxNGAddValidError(ctxt, a, b, NULL, 0);
-#define VALID_ERR3(a, b, c) xmlRelaxNGAddValidError(ctxt, a, b, c, 0);
-#define VALID_ERR2P(a, b) xmlRelaxNGAddValidError(ctxt, a, b, NULL, 1);
-#define VALID_ERR3P(a, b, c) xmlRelaxNGAddValidError(ctxt, a, b, c, 1);
-
-static const char *
-xmlRelaxNGDefName(xmlRelaxNGDefinePtr def)
-{
- if (def == NULL)
- return ("none");
- switch (def->type) {
- case XML_RELAXNG_EMPTY:
- return ("empty");
- case XML_RELAXNG_NOT_ALLOWED:
- return ("notAllowed");
- case XML_RELAXNG_EXCEPT:
- return ("except");
- case XML_RELAXNG_TEXT:
- return ("text");
- case XML_RELAXNG_ELEMENT:
- return ("element");
- case XML_RELAXNG_DATATYPE:
- return ("datatype");
- case XML_RELAXNG_VALUE:
- return ("value");
- case XML_RELAXNG_LIST:
- return ("list");
- case XML_RELAXNG_ATTRIBUTE:
- return ("attribute");
- case XML_RELAXNG_DEF:
- return ("def");
- case XML_RELAXNG_REF:
- return ("ref");
- case XML_RELAXNG_EXTERNALREF:
- return ("externalRef");
- case XML_RELAXNG_PARENTREF:
- return ("parentRef");
- case XML_RELAXNG_OPTIONAL:
- return ("optional");
- case XML_RELAXNG_ZEROORMORE:
- return ("zeroOrMore");
- case XML_RELAXNG_ONEORMORE:
- return ("oneOrMore");
- case XML_RELAXNG_CHOICE:
- return ("choice");
- case XML_RELAXNG_GROUP:
- return ("group");
- case XML_RELAXNG_INTERLEAVE:
- return ("interleave");
- case XML_RELAXNG_START:
- return ("start");
- case XML_RELAXNG_NOOP:
- return ("noop");
- case XML_RELAXNG_PARAM:
- return ("param");
- }
- return ("unknown");
-}
-
-/**
- * xmlRelaxNGGetErrorString:
- * @err: the error code
- * @arg1: the first string argument
- * @arg2: the second string argument
- *
- * computes a formatted error string for the given error code and args
- *
- * Returns the error string, it must be deallocated by the caller
- */
-static xmlChar *
-xmlRelaxNGGetErrorString(xmlRelaxNGValidErr err, const xmlChar * arg1,
- const xmlChar * arg2)
-{
- char msg[1000];
- xmlChar *result;
-
- if (arg1 == NULL)
- arg1 = BAD_CAST "";
- if (arg2 == NULL)
- arg2 = BAD_CAST "";
-
- msg[0] = 0;
- switch (err) {
- case XML_RELAXNG_OK:
- return (NULL);
- case XML_RELAXNG_ERR_MEMORY:
- return (xmlCharStrdup("out of memory\n"));
- case XML_RELAXNG_ERR_TYPE:
- snprintf(msg, 1000, "failed to validate type %s\n", arg1);
- break;
- case XML_RELAXNG_ERR_TYPEVAL:
- snprintf(msg, 1000, "Type %s doesn't allow value '%s'\n", arg1,
- arg2);
- break;
- case XML_RELAXNG_ERR_DUPID:
- snprintf(msg, 1000, "ID %s redefined\n", arg1);
- break;
- case XML_RELAXNG_ERR_TYPECMP:
- snprintf(msg, 1000, "failed to compare type %s\n", arg1);
- break;
- case XML_RELAXNG_ERR_NOSTATE:
- return (xmlCharStrdup("Internal error: no state\n"));
- case XML_RELAXNG_ERR_NODEFINE:
- return (xmlCharStrdup("Internal error: no define\n"));
- case XML_RELAXNG_ERR_INTERNAL:
- snprintf(msg, 1000, "Internal error: %s\n", arg1);
- break;
- case XML_RELAXNG_ERR_LISTEXTRA:
- snprintf(msg, 1000, "Extra data in list: %s\n", arg1);
- break;
- case XML_RELAXNG_ERR_INTERNODATA:
- return (xmlCharStrdup
- ("Internal: interleave block has no data\n"));
- case XML_RELAXNG_ERR_INTERSEQ:
- return (xmlCharStrdup("Invalid sequence in interleave\n"));
- case XML_RELAXNG_ERR_INTEREXTRA:
- snprintf(msg, 1000, "Extra element %s in interleave\n", arg1);
- break;
- case XML_RELAXNG_ERR_ELEMNAME:
- snprintf(msg, 1000, "Expecting element %s, got %s\n", arg1,
- arg2);
- break;
- case XML_RELAXNG_ERR_ELEMNONS:
- snprintf(msg, 1000, "Expecting a namespace for element %s\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_ELEMWRONGNS:
- snprintf(msg, 1000,
- "Element %s has wrong namespace: expecting %s\n", arg1,
- arg2);
- break;
- case XML_RELAXNG_ERR_ELEMWRONG:
- snprintf(msg, 1000, "Did not expect element %s there\n", arg1);
- break;
- case XML_RELAXNG_ERR_TEXTWRONG:
- snprintf(msg, 1000,
- "Did not expect text in element %s content\n", arg1);
- break;
- case XML_RELAXNG_ERR_ELEMEXTRANS:
- snprintf(msg, 1000, "Expecting no namespace for element %s\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_ELEMNOTEMPTY:
- snprintf(msg, 1000, "Expecting element %s to be empty\n", arg1);
- break;
- case XML_RELAXNG_ERR_NOELEM:
- snprintf(msg, 1000, "Expecting an element %s, got nothing\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_NOTELEM:
- return (xmlCharStrdup("Expecting an element got text\n"));
- case XML_RELAXNG_ERR_ATTRVALID:
- snprintf(msg, 1000, "Element %s failed to validate attributes\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_CONTENTVALID:
- snprintf(msg, 1000, "Element %s failed to validate content\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_EXTRACONTENT:
- snprintf(msg, 1000, "Element %s has extra content: %s\n",
- arg1, arg2);
- break;
- case XML_RELAXNG_ERR_INVALIDATTR:
- snprintf(msg, 1000, "Invalid attribute %s for element %s\n",
- arg1, arg2);
- break;
- case XML_RELAXNG_ERR_LACKDATA:
- snprintf(msg, 1000, "Datatype element %s contains no data\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_DATAELEM:
- snprintf(msg, 1000, "Datatype element %s has child elements\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_VALELEM:
- snprintf(msg, 1000, "Value element %s has child elements\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_LISTELEM:
- snprintf(msg, 1000, "List element %s has child elements\n",
- arg1);
- break;
- case XML_RELAXNG_ERR_DATATYPE:
- snprintf(msg, 1000, "Error validating datatype %s\n", arg1);
- break;
- case XML_RELAXNG_ERR_VALUE:
- snprintf(msg, 1000, "Error validating value %s\n", arg1);
- break;
- case XML_RELAXNG_ERR_LIST:
- return (xmlCharStrdup("Error validating list\n"));
- case XML_RELAXNG_ERR_NOGRAMMAR:
- return (xmlCharStrdup("No top grammar defined\n"));
- case XML_RELAXNG_ERR_EXTRADATA:
- return (xmlCharStrdup("Extra data in the document\n"));
- default:
- return (xmlCharStrdup("Unknown error !\n"));
- }
- if (msg[0] == 0) {
- snprintf(msg, 1000, "Unknown error code %d\n", err);
- }
- msg[1000 - 1] = 0;
- result = xmlCharStrdup(msg);
- return (xmlEscapeFormatString(&result));
-}
-
-/**
- * xmlRelaxNGShowValidError:
- * @ctxt: the validation context
- * @err: the error number
- * @node: the node
- * @child: the node child generating the problem.
- * @arg1: the first argument
- * @arg2: the second argument
- *
- * Show a validation error.
- */
-static void
-xmlRelaxNGShowValidError(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidErr err, xmlNodePtr node,
- xmlNodePtr child, const xmlChar * arg1,
- const xmlChar * arg2)
-{
- xmlChar *msg;
-
- if (ctxt->flags & FLAGS_NOERROR)
- return;
-
-#ifdef DEBUG_ERROR
- xmlGenericError(xmlGenericErrorContext, "Show error %d\n", err);
-#endif
- msg = xmlRelaxNGGetErrorString(err, arg1, arg2);
- if (msg == NULL)
- return;
-
- if (ctxt->errNo == XML_RELAXNG_OK)
- ctxt->errNo = err;
- xmlRngVErr(ctxt, (child == NULL ? node : child), err,
- (const char *) msg, arg1, arg2);
- xmlFree(msg);
-}
-
-/**
- * xmlRelaxNGPopErrors:
- * @ctxt: the validation context
- * @level: the error level in the stack
- *
- * pop and discard all errors until the given level is reached
- */
-static void
-xmlRelaxNGPopErrors(xmlRelaxNGValidCtxtPtr ctxt, int level)
-{
- int i;
- xmlRelaxNGValidErrorPtr err;
-
-#ifdef DEBUG_ERROR
- xmlGenericError(xmlGenericErrorContext,
- "Pop errors till level %d\n", level);
-#endif
- for (i = level; i < ctxt->errNr; i++) {
- err = &ctxt->errTab[i];
- if (err->flags & ERROR_IS_DUP) {
- if (err->arg1 != NULL)
- xmlFree((xmlChar *) err->arg1);
- err->arg1 = NULL;
- if (err->arg2 != NULL)
- xmlFree((xmlChar *) err->arg2);
- err->arg2 = NULL;
- err->flags = 0;
- }
- }
- ctxt->errNr = level;
- if (ctxt->errNr <= 0)
- ctxt->err = NULL;
-}
-
-/**
- * xmlRelaxNGDumpValidError:
- * @ctxt: the validation context
- *
- * Show all validation error over a given index.
- */
-static void
-xmlRelaxNGDumpValidError(xmlRelaxNGValidCtxtPtr ctxt)
-{
- int i, j, k;
- xmlRelaxNGValidErrorPtr err, dup;
-
-#ifdef DEBUG_ERROR
- xmlGenericError(xmlGenericErrorContext,
- "Dumping error stack %d errors\n", ctxt->errNr);
-#endif
- for (i = 0, k = 0; i < ctxt->errNr; i++) {
- err = &ctxt->errTab[i];
- if (k < MAX_ERROR) {
- for (j = 0; j < i; j++) {
- dup = &ctxt->errTab[j];
- if ((err->err == dup->err) && (err->node == dup->node) &&
- (xmlStrEqual(err->arg1, dup->arg1)) &&
- (xmlStrEqual(err->arg2, dup->arg2))) {
- goto skip;
- }
- }
- xmlRelaxNGShowValidError(ctxt, err->err, err->node, err->seq,
- err->arg1, err->arg2);
- k++;
- }
- skip:
- if (err->flags & ERROR_IS_DUP) {
- if (err->arg1 != NULL)
- xmlFree((xmlChar *) err->arg1);
- err->arg1 = NULL;
- if (err->arg2 != NULL)
- xmlFree((xmlChar *) err->arg2);
- err->arg2 = NULL;
- err->flags = 0;
- }
- }
- ctxt->errNr = 0;
-}
-
-/**
- * xmlRelaxNGAddValidError:
- * @ctxt: the validation context
- * @err: the error number
- * @arg1: the first argument
- * @arg2: the second argument
- * @dup: need to dup the args
- *
- * Register a validation error, either generating it if it's sure
- * or stacking it for later handling if unsure.
- */
-static void
-xmlRelaxNGAddValidError(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidErr err, const xmlChar * arg1,
- const xmlChar * arg2, int dup)
-{
- if (ctxt == NULL)
- return;
- if (ctxt->flags & FLAGS_NOERROR)
- return;
-
-#ifdef DEBUG_ERROR
- xmlGenericError(xmlGenericErrorContext, "Adding error %d\n", err);
-#endif
- /*
- * generate the error directly
- */
- if (((ctxt->flags & FLAGS_IGNORABLE) == 0) ||
- (ctxt->flags & FLAGS_NEGATIVE)) {
- xmlNodePtr node, seq;
-
- /*
- * Flush first any stacked error which might be the
- * real cause of the problem.
- */
- if (ctxt->errNr != 0)
- xmlRelaxNGDumpValidError(ctxt);
- if (ctxt->state != NULL) {
- node = ctxt->state->node;
- seq = ctxt->state->seq;
- } else {
- node = seq = NULL;
- }
- if ((node == NULL) && (seq == NULL)) {
- node = ctxt->pnode;
- }
- xmlRelaxNGShowValidError(ctxt, err, node, seq, arg1, arg2);
- }
- /*
- * Stack the error for later processing if needed
- */
- else {
- xmlRelaxNGValidErrorPush(ctxt, err, arg1, arg2, dup);
- }
-}
-
-
-/************************************************************************
- * *
- * Type library hooks *
- * *
- ************************************************************************/
-static xmlChar *xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt,
- const xmlChar * str);
-
-/**
- * xmlRelaxNGSchemaTypeHave:
- * @data: data needed for the library
- * @type: the type name
- *
- * Check if the given type is provided by
- * the W3C XMLSchema Datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGSchemaTypeHave(void *data ATTRIBUTE_UNUSED, const xmlChar * type)
-{
- xmlSchemaTypePtr typ;
-
- if (type == NULL)
- return (-1);
- typ = xmlSchemaGetPredefinedType(type,
- BAD_CAST
- "http://www.w3.org/2001/XMLSchema");
- if (typ == NULL)
- return (0);
- return (1);
-}
-
-/**
- * xmlRelaxNGSchemaTypeCheck:
- * @data: data needed for the library
- * @type: the type name
- * @value: the value to check
- * @node: the node
- *
- * Check if the given type and value are validated by
- * the W3C XMLSchema Datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGSchemaTypeCheck(void *data ATTRIBUTE_UNUSED,
- const xmlChar * type,
- const xmlChar * value,
- void **result, xmlNodePtr node)
-{
- xmlSchemaTypePtr typ;
- int ret;
-
- if ((type == NULL) || (value == NULL))
- return (-1);
- typ = xmlSchemaGetPredefinedType(type,
- BAD_CAST
- "http://www.w3.org/2001/XMLSchema");
- if (typ == NULL)
- return (-1);
- ret = xmlSchemaValPredefTypeNode(typ, value,
- (xmlSchemaValPtr *) result, node);
- if (ret == 2) /* special ID error code */
- return (2);
- if (ret == 0)
- return (1);
- if (ret > 0)
- return (0);
- return (-1);
-}
-
-/**
- * xmlRelaxNGSchemaFacetCheck:
- * @data: data needed for the library
- * @type: the type name
- * @facet: the facet name
- * @val: the facet value
- * @strval: the string value
- * @value: the value to check
- *
- * Function provided by a type library to check a value facet
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGSchemaFacetCheck(void *data ATTRIBUTE_UNUSED,
- const xmlChar * type, const xmlChar * facetname,
- const xmlChar * val, const xmlChar * strval,
- void *value)
-{
- xmlSchemaFacetPtr facet;
- xmlSchemaTypePtr typ;
- int ret;
-
- if ((type == NULL) || (strval == NULL))
- return (-1);
- typ = xmlSchemaGetPredefinedType(type,
- BAD_CAST
- "http://www.w3.org/2001/XMLSchema");
- if (typ == NULL)
- return (-1);
-
- facet = xmlSchemaNewFacet();
- if (facet == NULL)
- return (-1);
-
- if (xmlStrEqual(facetname, BAD_CAST "minInclusive")) {
- facet->type = XML_SCHEMA_FACET_MININCLUSIVE;
- } else if (xmlStrEqual(facetname, BAD_CAST "minExclusive")) {
- facet->type = XML_SCHEMA_FACET_MINEXCLUSIVE;
- } else if (xmlStrEqual(facetname, BAD_CAST "maxInclusive")) {
- facet->type = XML_SCHEMA_FACET_MAXINCLUSIVE;
- } else if (xmlStrEqual(facetname, BAD_CAST "maxExclusive")) {
- facet->type = XML_SCHEMA_FACET_MAXEXCLUSIVE;
- } else if (xmlStrEqual(facetname, BAD_CAST "totalDigits")) {
- facet->type = XML_SCHEMA_FACET_TOTALDIGITS;
- } else if (xmlStrEqual(facetname, BAD_CAST "fractionDigits")) {
- facet->type = XML_SCHEMA_FACET_FRACTIONDIGITS;
- } else if (xmlStrEqual(facetname, BAD_CAST "pattern")) {
- facet->type = XML_SCHEMA_FACET_PATTERN;
- } else if (xmlStrEqual(facetname, BAD_CAST "enumeration")) {
- facet->type = XML_SCHEMA_FACET_ENUMERATION;
- } else if (xmlStrEqual(facetname, BAD_CAST "whiteSpace")) {
- facet->type = XML_SCHEMA_FACET_WHITESPACE;
- } else if (xmlStrEqual(facetname, BAD_CAST "length")) {
- facet->type = XML_SCHEMA_FACET_LENGTH;
- } else if (xmlStrEqual(facetname, BAD_CAST "maxLength")) {
- facet->type = XML_SCHEMA_FACET_MAXLENGTH;
- } else if (xmlStrEqual(facetname, BAD_CAST "minLength")) {
- facet->type = XML_SCHEMA_FACET_MINLENGTH;
- } else {
- xmlSchemaFreeFacet(facet);
- return (-1);
- }
- facet->value = val;
- ret = xmlSchemaCheckFacet(facet, typ, NULL, type);
- if (ret != 0) {
- xmlSchemaFreeFacet(facet);
- return (-1);
- }
- ret = xmlSchemaValidateFacet(typ, facet, strval, value);
- xmlSchemaFreeFacet(facet);
- if (ret != 0)
- return (-1);
- return (0);
-}
-
-/**
- * xmlRelaxNGSchemaFreeValue:
- * @data: data needed for the library
- * @value: the value to free
- *
- * Function provided by a type library to free a Schemas value
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static void
-xmlRelaxNGSchemaFreeValue(void *data ATTRIBUTE_UNUSED, void *value)
-{
- xmlSchemaFreeValue(value);
-}
-
-/**
- * xmlRelaxNGSchemaTypeCompare:
- * @data: data needed for the library
- * @type: the type name
- * @value1: the first value
- * @value2: the second value
- *
- * Compare two values for equality accordingly a type from the W3C XMLSchema
- * Datatype library.
- *
- * Returns 1 if equal, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGSchemaTypeCompare(void *data ATTRIBUTE_UNUSED,
- const xmlChar * type,
- const xmlChar * value1,
- xmlNodePtr ctxt1,
- void *comp1,
- const xmlChar * value2, xmlNodePtr ctxt2)
-{
- int ret;
- xmlSchemaTypePtr typ;
- xmlSchemaValPtr res1 = NULL, res2 = NULL;
-
- if ((type == NULL) || (value1 == NULL) || (value2 == NULL))
- return (-1);
- typ = xmlSchemaGetPredefinedType(type,
- BAD_CAST
- "http://www.w3.org/2001/XMLSchema");
- if (typ == NULL)
- return (-1);
- if (comp1 == NULL) {
- ret = xmlSchemaValPredefTypeNode(typ, value1, &res1, ctxt1);
- if (ret != 0)
- return (-1);
- if (res1 == NULL)
- return (-1);
- } else {
- res1 = (xmlSchemaValPtr) comp1;
- }
- ret = xmlSchemaValPredefTypeNode(typ, value2, &res2, ctxt2);
- if (ret != 0) {
- if (res1 != (xmlSchemaValPtr) comp1)
- xmlSchemaFreeValue(res1);
- return (-1);
- }
- ret = xmlSchemaCompareValues(res1, res2);
- if (res1 != (xmlSchemaValPtr) comp1)
- xmlSchemaFreeValue(res1);
- xmlSchemaFreeValue(res2);
- if (ret == -2)
- return (-1);
- if (ret == 0)
- return (1);
- return (0);
-}
-
-/**
- * xmlRelaxNGDefaultTypeHave:
- * @data: data needed for the library
- * @type: the type name
- *
- * Check if the given type is provided by
- * the default datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGDefaultTypeHave(void *data ATTRIBUTE_UNUSED,
- const xmlChar * type)
-{
- if (type == NULL)
- return (-1);
- if (xmlStrEqual(type, BAD_CAST "string"))
- return (1);
- if (xmlStrEqual(type, BAD_CAST "token"))
- return (1);
- return (0);
-}
-
-/**
- * xmlRelaxNGDefaultTypeCheck:
- * @data: data needed for the library
- * @type: the type name
- * @value: the value to check
- * @node: the node
- *
- * Check if the given type and value are validated by
- * the default datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGDefaultTypeCheck(void *data ATTRIBUTE_UNUSED,
- const xmlChar * type ATTRIBUTE_UNUSED,
- const xmlChar * value ATTRIBUTE_UNUSED,
- void **result ATTRIBUTE_UNUSED,
- xmlNodePtr node ATTRIBUTE_UNUSED)
-{
- if (value == NULL)
- return (-1);
- if (xmlStrEqual(type, BAD_CAST "string"))
- return (1);
- if (xmlStrEqual(type, BAD_CAST "token")) {
- return (1);
- }
-
- return (0);
-}
-
-/**
- * xmlRelaxNGDefaultTypeCompare:
- * @data: data needed for the library
- * @type: the type name
- * @value1: the first value
- * @value2: the second value
- *
- * Compare two values accordingly a type from the default
- * datatype library.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGDefaultTypeCompare(void *data ATTRIBUTE_UNUSED,
- const xmlChar * type,
- const xmlChar * value1,
- xmlNodePtr ctxt1 ATTRIBUTE_UNUSED,
- void *comp1 ATTRIBUTE_UNUSED,
- const xmlChar * value2,
- xmlNodePtr ctxt2 ATTRIBUTE_UNUSED)
-{
- int ret = -1;
-
- if (xmlStrEqual(type, BAD_CAST "string")) {
- ret = xmlStrEqual(value1, value2);
- } else if (xmlStrEqual(type, BAD_CAST "token")) {
- if (!xmlStrEqual(value1, value2)) {
- xmlChar *nval, *nvalue;
-
- /*
- * TODO: trivial optimizations are possible by
- * computing at compile-time
- */
- nval = xmlRelaxNGNormalize(NULL, value1);
- nvalue = xmlRelaxNGNormalize(NULL, value2);
-
- if ((nval == NULL) || (nvalue == NULL))
- ret = -1;
- else if (xmlStrEqual(nval, nvalue))
- ret = 1;
- else
- ret = 0;
- if (nval != NULL)
- xmlFree(nval);
- if (nvalue != NULL)
- xmlFree(nvalue);
- } else
- ret = 1;
- }
- return (ret);
-}
-
-static int xmlRelaxNGTypeInitialized = 0;
-static xmlHashTablePtr xmlRelaxNGRegisteredTypes = NULL;
-
-/**
- * xmlRelaxNGFreeTypeLibrary:
- * @lib: the type library structure
- * @namespace: the URI bound to the library
- *
- * Free the structure associated to the type library
- */
-static void
-xmlRelaxNGFreeTypeLibrary(xmlRelaxNGTypeLibraryPtr lib,
- const xmlChar * namespace ATTRIBUTE_UNUSED)
-{
- if (lib == NULL)
- return;
- if (lib->namespace != NULL)
- xmlFree((xmlChar *) lib->namespace);
- xmlFree(lib);
-}
-
-/**
- * xmlRelaxNGRegisterTypeLibrary:
- * @namespace: the URI bound to the library
- * @data: data associated to the library
- * @have: the provide function
- * @check: the checking function
- * @comp: the comparison function
- *
- * Register a new type library
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-static int
-xmlRelaxNGRegisterTypeLibrary(const xmlChar * namespace, void *data,
- xmlRelaxNGTypeHave have,
- xmlRelaxNGTypeCheck check,
- xmlRelaxNGTypeCompare comp,
- xmlRelaxNGFacetCheck facet,
- xmlRelaxNGTypeFree freef)
-{
- xmlRelaxNGTypeLibraryPtr lib;
- int ret;
-
- if ((xmlRelaxNGRegisteredTypes == NULL) || (namespace == NULL) ||
- (check == NULL) || (comp == NULL))
- return (-1);
- if (xmlHashLookup(xmlRelaxNGRegisteredTypes, namespace) != NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Relax-NG types library '%s' already registered\n",
- namespace);
- return (-1);
- }
- lib =
- (xmlRelaxNGTypeLibraryPtr)
- xmlMalloc(sizeof(xmlRelaxNGTypeLibrary));
- if (lib == NULL) {
- xmlRngVErrMemory(NULL, "adding types library\n");
- return (-1);
- }
- memset(lib, 0, sizeof(xmlRelaxNGTypeLibrary));
- lib->namespace = xmlStrdup(namespace);
- lib->data = data;
- lib->have = have;
- lib->comp = comp;
- lib->check = check;
- lib->facet = facet;
- lib->freef = freef;
- ret = xmlHashAddEntry(xmlRelaxNGRegisteredTypes, namespace, lib);
- if (ret < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Relax-NG types library failed to register '%s'\n",
- namespace);
- xmlRelaxNGFreeTypeLibrary(lib, namespace);
- return (-1);
- }
- return (0);
-}
-
-/**
- * xmlRelaxNGInitTypes:
- *
- * Initilize the default type libraries.
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlRelaxNGInitTypes(void)
-{
- if (xmlRelaxNGTypeInitialized != 0)
- return (0);
- xmlRelaxNGRegisteredTypes = xmlHashCreate(10);
- if (xmlRelaxNGRegisteredTypes == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to allocate sh table for Relax-NG types\n");
- return (-1);
- }
- xmlRelaxNGRegisterTypeLibrary(BAD_CAST
- "http://www.w3.org/2001/XMLSchema-datatypes",
- NULL, xmlRelaxNGSchemaTypeHave,
- xmlRelaxNGSchemaTypeCheck,
- xmlRelaxNGSchemaTypeCompare,
- xmlRelaxNGSchemaFacetCheck,
- xmlRelaxNGSchemaFreeValue);
- xmlRelaxNGRegisterTypeLibrary(xmlRelaxNGNs, NULL,
- xmlRelaxNGDefaultTypeHave,
- xmlRelaxNGDefaultTypeCheck,
- xmlRelaxNGDefaultTypeCompare, NULL,
- NULL);
- xmlRelaxNGTypeInitialized = 1;
- return (0);
-}
-
-/**
- * xmlRelaxNGCleanupTypes:
- *
- * Cleanup the default Schemas type library associated to RelaxNG
- */
-void
-xmlRelaxNGCleanupTypes(void)
-{
- xmlSchemaCleanupTypes();
- if (xmlRelaxNGTypeInitialized == 0)
- return;
- xmlHashFree(xmlRelaxNGRegisteredTypes, (xmlHashDeallocator)
- xmlRelaxNGFreeTypeLibrary);
- xmlRelaxNGTypeInitialized = 0;
-}
-
-/************************************************************************
- * *
- * Compiling element content into regexp *
- * *
- * Sometime the element content can be compiled into a pure regexp, *
- * This allows a faster execution and streamability at that level *
- * *
- ************************************************************************/
-
-/* from automata.c but not exported */
-void xmlAutomataSetFlags(xmlAutomataPtr am, int flags);
-
-
-static int xmlRelaxNGTryCompile(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDefinePtr def);
-
-/**
- * xmlRelaxNGIsCompileable:
- * @define: the definition to check
- *
- * Check if a definition is nullable.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error
- */
-static int
-xmlRelaxNGIsCompileable(xmlRelaxNGDefinePtr def)
-{
- int ret = -1;
-
- if (def == NULL) {
- return (-1);
- }
- if ((def->type != XML_RELAXNG_ELEMENT) &&
- (def->dflags & IS_COMPILABLE))
- return (1);
- if ((def->type != XML_RELAXNG_ELEMENT) &&
- (def->dflags & IS_NOT_COMPILABLE))
- return (0);
- switch (def->type) {
- case XML_RELAXNG_NOOP:
- ret = xmlRelaxNGIsCompileable(def->content);
- break;
- case XML_RELAXNG_TEXT:
- case XML_RELAXNG_EMPTY:
- ret = 1;
- break;
- case XML_RELAXNG_ELEMENT:
- /*
- * Check if the element content is compileable
- */
- if (((def->dflags & IS_NOT_COMPILABLE) == 0) &&
- ((def->dflags & IS_COMPILABLE) == 0)) {
- xmlRelaxNGDefinePtr list;
-
- list = def->content;
- while (list != NULL) {
- ret = xmlRelaxNGIsCompileable(list);
- if (ret != 1)
- break;
- list = list->next;
- }
- /*
- * Because the routine is recursive, we must guard against
- * discovering both COMPILABLE and NOT_COMPILABLE
- */
- if (ret == 0) {
- def->dflags &= ~IS_COMPILABLE;
- def->dflags |= IS_NOT_COMPILABLE;
- }
- if ((ret == 1) && !(def->dflags &= IS_NOT_COMPILABLE))
- def->dflags |= IS_COMPILABLE;
-#ifdef DEBUG_COMPILE
- if (ret == 1) {
- xmlGenericError(xmlGenericErrorContext,
- "element content for %s is compilable\n",
- def->name);
- } else if (ret == 0) {
- xmlGenericError(xmlGenericErrorContext,
- "element content for %s is not compilable\n",
- def->name);
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "Problem in RelaxNGIsCompileable for element %s\n",
- def->name);
- }
-#endif
- }
- /*
- * All elements return a compileable status unless they
- * are generic like anyName
- */
- if ((def->nameClass != NULL) || (def->name == NULL))
- ret = 0;
- else
- ret = 1;
- return (ret);
- case XML_RELAXNG_REF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_PARENTREF:
- if (def->depth == -20) {
- return (1);
- } else {
- xmlRelaxNGDefinePtr list;
-
- def->depth = -20;
- list = def->content;
- while (list != NULL) {
- ret = xmlRelaxNGIsCompileable(list);
- if (ret != 1)
- break;
- list = list->next;
- }
- }
- break;
- case XML_RELAXNG_START:
- case XML_RELAXNG_OPTIONAL:
- case XML_RELAXNG_ZEROORMORE:
- case XML_RELAXNG_ONEORMORE:
- case XML_RELAXNG_CHOICE:
- case XML_RELAXNG_GROUP:
- case XML_RELAXNG_DEF:{
- xmlRelaxNGDefinePtr list;
-
- list = def->content;
- while (list != NULL) {
- ret = xmlRelaxNGIsCompileable(list);
- if (ret != 1)
- break;
- list = list->next;
- }
- break;
- }
- case XML_RELAXNG_EXCEPT:
- case XML_RELAXNG_ATTRIBUTE:
- case XML_RELAXNG_INTERLEAVE:
- case XML_RELAXNG_DATATYPE:
- case XML_RELAXNG_LIST:
- case XML_RELAXNG_PARAM:
- case XML_RELAXNG_VALUE:
- case XML_RELAXNG_NOT_ALLOWED:
- ret = 0;
- break;
- }
- if (ret == 0)
- def->dflags |= IS_NOT_COMPILABLE;
- if (ret == 1)
- def->dflags |= IS_COMPILABLE;
-#ifdef DEBUG_COMPILE
- if (ret == 1) {
- xmlGenericError(xmlGenericErrorContext,
- "RelaxNGIsCompileable %s : true\n",
- xmlRelaxNGDefName(def));
- } else if (ret == 0) {
- xmlGenericError(xmlGenericErrorContext,
- "RelaxNGIsCompileable %s : false\n",
- xmlRelaxNGDefName(def));
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "Problem in RelaxNGIsCompileable %s\n",
- xmlRelaxNGDefName(def));
- }
-#endif
- return (ret);
-}
-
-/**
- * xmlRelaxNGCompile:
- * ctxt: the RelaxNG parser context
- * @define: the definition tree to compile
- *
- * Compile the set of definitions, it works recursively, till the
- * element boundaries, where it tries to compile the content if possible
- *
- * Returns 0 if success and -1 in case of error
- */
-static int
-xmlRelaxNGCompile(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGDefinePtr def)
-{
- int ret = 0;
- xmlRelaxNGDefinePtr list;
-
- if ((ctxt == NULL) || (def == NULL))
- return (-1);
-
- switch (def->type) {
- case XML_RELAXNG_START:
- if ((xmlRelaxNGIsCompileable(def) == 1) && (def->depth != -25)) {
- xmlAutomataPtr oldam = ctxt->am;
- xmlAutomataStatePtr oldstate = ctxt->state;
-
- def->depth = -25;
-
- list = def->content;
- ctxt->am = xmlNewAutomata();
- if (ctxt->am == NULL)
- return (-1);
-
- /*
- * assume identical strings but not same pointer are different
- * atoms, needed for non-determinism detection
- * That way if 2 elements with the same name are in a choice
- * branch the automata is found non-deterministic and
- * we fallback to the normal validation which does the right
- * thing of exploring both choices.
- */
- xmlAutomataSetFlags(ctxt->am, 1);
-
- ctxt->state = xmlAutomataGetInitState(ctxt->am);
- while (list != NULL) {
- xmlRelaxNGCompile(ctxt, list);
- list = list->next;
- }
- xmlAutomataSetFinalState(ctxt->am, ctxt->state);
- if (xmlAutomataIsDeterminist(ctxt->am))
- def->contModel = xmlAutomataCompile(ctxt->am);
-
- xmlFreeAutomata(ctxt->am);
- ctxt->state = oldstate;
- ctxt->am = oldam;
- }
- break;
- case XML_RELAXNG_ELEMENT:
- if ((ctxt->am != NULL) && (def->name != NULL)) {
- ctxt->state = xmlAutomataNewTransition2(ctxt->am,
- ctxt->state, NULL,
- def->name, def->ns,
- def);
- }
- if ((def->dflags & IS_COMPILABLE) && (def->depth != -25)) {
- xmlAutomataPtr oldam = ctxt->am;
- xmlAutomataStatePtr oldstate = ctxt->state;
-
- def->depth = -25;
-
- list = def->content;
- ctxt->am = xmlNewAutomata();
- if (ctxt->am == NULL)
- return (-1);
- xmlAutomataSetFlags(ctxt->am, 1);
- ctxt->state = xmlAutomataGetInitState(ctxt->am);
- while (list != NULL) {
- xmlRelaxNGCompile(ctxt, list);
- list = list->next;
- }
- xmlAutomataSetFinalState(ctxt->am, ctxt->state);
- def->contModel = xmlAutomataCompile(ctxt->am);
- if (!xmlRegexpIsDeterminist(def->contModel)) {
-#ifdef DEBUG_COMPILE
- xmlGenericError(xmlGenericErrorContext,
- "Content model not determinist %s\n",
- def->name);
-#endif
- /*
- * we can only use the automata if it is determinist
- */
- xmlRegFreeRegexp(def->contModel);
- def->contModel = NULL;
- }
- xmlFreeAutomata(ctxt->am);
- ctxt->state = oldstate;
- ctxt->am = oldam;
- } else {
- xmlAutomataPtr oldam = ctxt->am;
-
- /*
- * we can't build the content model for this element content
- * but it still might be possible to build it for some of its
- * children, recurse.
- */
- ret = xmlRelaxNGTryCompile(ctxt, def);
- ctxt->am = oldam;
- }
- break;
- case XML_RELAXNG_NOOP:
- ret = xmlRelaxNGCompile(ctxt, def->content);
- break;
- case XML_RELAXNG_OPTIONAL:{
- xmlAutomataStatePtr oldstate = ctxt->state;
-
- list = def->content;
- while (list != NULL) {
- xmlRelaxNGCompile(ctxt, list);
- list = list->next;
- }
- xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
- break;
- }
- case XML_RELAXNG_ZEROORMORE:{
- xmlAutomataStatePtr oldstate;
-
- ctxt->state =
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
- oldstate = ctxt->state;
- list = def->content;
- while (list != NULL) {
- xmlRelaxNGCompile(ctxt, list);
- list = list->next;
- }
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldstate);
- ctxt->state =
- xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
- break;
- }
- case XML_RELAXNG_ONEORMORE:{
- xmlAutomataStatePtr oldstate;
-
- list = def->content;
- while (list != NULL) {
- xmlRelaxNGCompile(ctxt, list);
- list = list->next;
- }
- oldstate = ctxt->state;
- list = def->content;
- while (list != NULL) {
- xmlRelaxNGCompile(ctxt, list);
- list = list->next;
- }
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldstate);
- ctxt->state =
- xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
- break;
- }
- case XML_RELAXNG_CHOICE:{
- xmlAutomataStatePtr target = NULL;
- xmlAutomataStatePtr oldstate = ctxt->state;
-
- list = def->content;
- while (list != NULL) {
- ctxt->state = oldstate;
- ret = xmlRelaxNGCompile(ctxt, list);
- if (ret != 0)
- break;
- if (target == NULL)
- target = ctxt->state;
- else {
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state,
- target);
- }
- list = list->next;
- }
- ctxt->state = target;
-
- break;
- }
- case XML_RELAXNG_REF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_PARENTREF:
- case XML_RELAXNG_GROUP:
- case XML_RELAXNG_DEF:
- list = def->content;
- while (list != NULL) {
- ret = xmlRelaxNGCompile(ctxt, list);
- if (ret != 0)
- break;
- list = list->next;
- }
- break;
- case XML_RELAXNG_TEXT:{
- xmlAutomataStatePtr oldstate;
-
- ctxt->state =
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
- oldstate = ctxt->state;
- xmlRelaxNGCompile(ctxt, def->content);
- xmlAutomataNewTransition(ctxt->am, ctxt->state,
- ctxt->state, BAD_CAST "#text",
- NULL);
- ctxt->state =
- xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
- break;
- }
- case XML_RELAXNG_EMPTY:
- ctxt->state =
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
- break;
- case XML_RELAXNG_EXCEPT:
- case XML_RELAXNG_ATTRIBUTE:
- case XML_RELAXNG_INTERLEAVE:
- case XML_RELAXNG_NOT_ALLOWED:
- case XML_RELAXNG_DATATYPE:
- case XML_RELAXNG_LIST:
- case XML_RELAXNG_PARAM:
- case XML_RELAXNG_VALUE:
- /* This should not happen and generate an internal error */
- fprintf(stderr, "RNG internal error trying to compile %s\n",
- xmlRelaxNGDefName(def));
- break;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGTryCompile:
- * ctxt: the RelaxNG parser context
- * @define: the definition tree to compile
- *
- * Try to compile the set of definitions, it works recursively,
- * possibly ignoring parts which cannot be compiled.
- *
- * Returns 0 if success and -1 in case of error
- */
-static int
-xmlRelaxNGTryCompile(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGDefinePtr def)
-{
- int ret = 0;
- xmlRelaxNGDefinePtr list;
-
- if ((ctxt == NULL) || (def == NULL))
- return (-1);
-
- if ((def->type == XML_RELAXNG_START) ||
- (def->type == XML_RELAXNG_ELEMENT)) {
- ret = xmlRelaxNGIsCompileable(def);
- if ((def->dflags & IS_COMPILABLE) && (def->depth != -25)) {
- ctxt->am = NULL;
- ret = xmlRelaxNGCompile(ctxt, def);
-#ifdef DEBUG_PROGRESSIVE
- if (ret == 0) {
- if (def->type == XML_RELAXNG_START)
- xmlGenericError(xmlGenericErrorContext,
- "compiled the start\n");
- else
- xmlGenericError(xmlGenericErrorContext,
- "compiled element %s\n", def->name);
- } else {
- if (def->type == XML_RELAXNG_START)
- xmlGenericError(xmlGenericErrorContext,
- "failed to compile the start\n");
- else
- xmlGenericError(xmlGenericErrorContext,
- "failed to compile element %s\n",
- def->name);
- }
-#endif
- return (ret);
- }
- }
- switch (def->type) {
- case XML_RELAXNG_NOOP:
- ret = xmlRelaxNGTryCompile(ctxt, def->content);
- break;
- case XML_RELAXNG_TEXT:
- case XML_RELAXNG_DATATYPE:
- case XML_RELAXNG_LIST:
- case XML_RELAXNG_PARAM:
- case XML_RELAXNG_VALUE:
- case XML_RELAXNG_EMPTY:
- case XML_RELAXNG_ELEMENT:
- ret = 0;
- break;
- case XML_RELAXNG_OPTIONAL:
- case XML_RELAXNG_ZEROORMORE:
- case XML_RELAXNG_ONEORMORE:
- case XML_RELAXNG_CHOICE:
- case XML_RELAXNG_GROUP:
- case XML_RELAXNG_DEF:
- case XML_RELAXNG_START:
- case XML_RELAXNG_REF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_PARENTREF:
- list = def->content;
- while (list != NULL) {
- ret = xmlRelaxNGTryCompile(ctxt, list);
- if (ret != 0)
- break;
- list = list->next;
- }
- break;
- case XML_RELAXNG_EXCEPT:
- case XML_RELAXNG_ATTRIBUTE:
- case XML_RELAXNG_INTERLEAVE:
- case XML_RELAXNG_NOT_ALLOWED:
- ret = 0;
- break;
- }
- return (ret);
-}
-
-/************************************************************************
- * *
- * Parsing functions *
- * *
- ************************************************************************/
-
-static xmlRelaxNGDefinePtr xmlRelaxNGParseAttribute(xmlRelaxNGParserCtxtPtr
- ctxt, xmlNodePtr node);
-static xmlRelaxNGDefinePtr xmlRelaxNGParseElement(xmlRelaxNGParserCtxtPtr
- ctxt, xmlNodePtr node);
-static xmlRelaxNGDefinePtr xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr
- ctxt, xmlNodePtr nodes,
- int group);
-static xmlRelaxNGDefinePtr xmlRelaxNGParsePattern(xmlRelaxNGParserCtxtPtr
- ctxt, xmlNodePtr node);
-static xmlRelaxNGPtr xmlRelaxNGParseDocument(xmlRelaxNGParserCtxtPtr ctxt,
- xmlNodePtr node);
-static int xmlRelaxNGParseGrammarContent(xmlRelaxNGParserCtxtPtr ctxt,
- xmlNodePtr nodes);
-static xmlRelaxNGDefinePtr xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr
- ctxt, xmlNodePtr node,
- xmlRelaxNGDefinePtr
- def);
-static xmlRelaxNGGrammarPtr xmlRelaxNGParseGrammar(xmlRelaxNGParserCtxtPtr
- ctxt, xmlNodePtr nodes);
-static int xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define,
- xmlNodePtr elem);
-
-
-#define IS_BLANK_NODE(n) (xmlRelaxNGIsBlank((n)->content))
-
-/**
- * xmlRelaxNGIsNullable:
- * @define: the definition to verify
- *
- * Check if a definition is nullable.
- *
- * Returns 1 if yes, 0 if no and -1 in case of error
- */
-static int
-xmlRelaxNGIsNullable(xmlRelaxNGDefinePtr define)
-{
- int ret;
-
- if (define == NULL)
- return (-1);
-
- if (define->dflags & IS_NULLABLE)
- return (1);
- if (define->dflags & IS_NOT_NULLABLE)
- return (0);
- switch (define->type) {
- case XML_RELAXNG_EMPTY:
- case XML_RELAXNG_TEXT:
- ret = 1;
- break;
- case XML_RELAXNG_NOOP:
- case XML_RELAXNG_DEF:
- case XML_RELAXNG_REF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_PARENTREF:
- case XML_RELAXNG_ONEORMORE:
- ret = xmlRelaxNGIsNullable(define->content);
- break;
- case XML_RELAXNG_EXCEPT:
- case XML_RELAXNG_NOT_ALLOWED:
- case XML_RELAXNG_ELEMENT:
- case XML_RELAXNG_DATATYPE:
- case XML_RELAXNG_PARAM:
- case XML_RELAXNG_VALUE:
- case XML_RELAXNG_LIST:
- case XML_RELAXNG_ATTRIBUTE:
- ret = 0;
- break;
- case XML_RELAXNG_CHOICE:{
- xmlRelaxNGDefinePtr list = define->content;
-
- while (list != NULL) {
- ret = xmlRelaxNGIsNullable(list);
- if (ret != 0)
- goto done;
- list = list->next;
- }
- ret = 0;
- break;
- }
- case XML_RELAXNG_START:
- case XML_RELAXNG_INTERLEAVE:
- case XML_RELAXNG_GROUP:{
- xmlRelaxNGDefinePtr list = define->content;
-
- while (list != NULL) {
- ret = xmlRelaxNGIsNullable(list);
- if (ret != 1)
- goto done;
- list = list->next;
- }
- return (1);
- }
- default:
- return (-1);
- }
- done:
- if (ret == 0)
- define->dflags |= IS_NOT_NULLABLE;
- if (ret == 1)
- define->dflags |= IS_NULLABLE;
- return (ret);
-}
-
-/**
- * xmlRelaxNGIsBlank:
- * @str: a string
- *
- * Check if a string is ignorable c.f. 4.2. Whitespace
- *
- * Returns 1 if the string is NULL or made of blanks chars, 0 otherwise
- */
-static int
-xmlRelaxNGIsBlank(xmlChar * str)
-{
- if (str == NULL)
- return (1);
- while (*str != 0) {
- if (!(IS_BLANK_CH(*str)))
- return (0);
- str++;
- }
- return (1);
-}
-
-/**
- * xmlRelaxNGGetDataTypeLibrary:
- * @ctxt: a Relax-NG parser context
- * @node: the current data or value element
- *
- * Applies algorithm from 4.3. datatypeLibrary attribute
- *
- * Returns the datatypeLibary value or NULL if not found
- */
-static xmlChar *
-xmlRelaxNGGetDataTypeLibrary(xmlRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlNodePtr node)
-{
- xmlChar *ret, *escape;
-
- if (node == NULL)
- return(NULL);
-
- if ((IS_RELAXNG(node, "data")) || (IS_RELAXNG(node, "value"))) {
- ret = xmlGetProp(node, BAD_CAST "datatypeLibrary");
- if (ret != NULL) {
- if (ret[0] == 0) {
- xmlFree(ret);
- return (NULL);
- }
- escape = xmlURIEscapeStr(ret, BAD_CAST ":/#?");
- if (escape == NULL) {
- return (ret);
- }
- xmlFree(ret);
- return (escape);
- }
- }
- node = node->parent;
- while ((node != NULL) && (node->type == XML_ELEMENT_NODE)) {
- ret = xmlGetProp(node, BAD_CAST "datatypeLibrary");
- if (ret != NULL) {
- if (ret[0] == 0) {
- xmlFree(ret);
- return (NULL);
- }
- escape = xmlURIEscapeStr(ret, BAD_CAST ":/#?");
- if (escape == NULL) {
- return (ret);
- }
- xmlFree(ret);
- return (escape);
- }
- node = node->parent;
- }
- return (NULL);
-}
-
-/**
- * xmlRelaxNGParseValue:
- * @ctxt: a Relax-NG parser context
- * @node: the data node.
- *
- * parse the content of a RelaxNG value node.
- *
- * Returns the definition pointer or NULL in case of error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseValue(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGDefinePtr def = NULL;
- xmlRelaxNGTypeLibraryPtr lib = NULL;
- xmlChar *type;
- xmlChar *library;
- int success = 0;
-
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_VALUE;
-
- type = xmlGetProp(node, BAD_CAST "type");
- if (type != NULL) {
- xmlRelaxNGNormExtSpace(type);
- if (xmlValidateNCName(type, 0)) {
- xmlRngPErr(ctxt, node, XML_RNGP_TYPE_VALUE,
- "value type '%s' is not an NCName\n", type, NULL);
- }
- library = xmlRelaxNGGetDataTypeLibrary(ctxt, node);
- if (library == NULL)
- library =
- xmlStrdup(BAD_CAST "http://relaxng.org/ns/structure/1.0");
-
- def->name = type;
- def->ns = library;
-
- lib = (xmlRelaxNGTypeLibraryPtr)
- xmlHashLookup(xmlRelaxNGRegisteredTypes, library);
- if (lib == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_TYPE_LIB,
- "Use of unregistered type library '%s'\n", library,
- NULL);
- def->data = NULL;
- } else {
- def->data = lib;
- if (lib->have == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_ERROR_TYPE_LIB,
- "Internal error with type library '%s': no 'have'\n",
- library, NULL);
- } else {
- success = lib->have(lib->data, def->name);
- if (success != 1) {
- xmlRngPErr(ctxt, node, XML_RNGP_TYPE_NOT_FOUND,
- "Error type '%s' is not exported by type library '%s'\n",
- def->name, library);
- }
- }
- }
- }
- if (node->children == NULL) {
- def->value = xmlStrdup(BAD_CAST "");
- } else if (((node->children->type != XML_TEXT_NODE) &&
- (node->children->type != XML_CDATA_SECTION_NODE)) ||
- (node->children->next != NULL)) {
- xmlRngPErr(ctxt, node, XML_RNGP_TEXT_EXPECTED,
- "Expecting a single text value for <value>content\n",
- NULL, NULL);
- } else if (def != NULL) {
- def->value = xmlNodeGetContent(node);
- if (def->value == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_VALUE_NO_CONTENT,
- "Element <value> has no content\n", NULL, NULL);
- } else if ((lib != NULL) && (lib->check != NULL) && (success == 1)) {
- void *val = NULL;
-
- success =
- lib->check(lib->data, def->name, def->value, &val, node);
- if (success != 1) {
- xmlRngPErr(ctxt, node, XML_RNGP_INVALID_VALUE,
- "Value '%s' is not acceptable for type '%s'\n",
- def->value, def->name);
- } else {
- if (val != NULL)
- def->attrs = val;
- }
- }
- }
- return (def);
-}
-
-/**
- * xmlRelaxNGParseData:
- * @ctxt: a Relax-NG parser context
- * @node: the data node.
- *
- * parse the content of a RelaxNG data node.
- *
- * Returns the definition pointer or NULL in case of error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseData(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGDefinePtr def = NULL, except;
- xmlRelaxNGDefinePtr param, lastparam = NULL;
- xmlRelaxNGTypeLibraryPtr lib;
- xmlChar *type;
- xmlChar *library;
- xmlNodePtr content;
- int tmp;
-
- type = xmlGetProp(node, BAD_CAST "type");
- if (type == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_TYPE_MISSING, "data has no type\n", NULL,
- NULL);
- return (NULL);
- }
- xmlRelaxNGNormExtSpace(type);
- if (xmlValidateNCName(type, 0)) {
- xmlRngPErr(ctxt, node, XML_RNGP_TYPE_VALUE,
- "data type '%s' is not an NCName\n", type, NULL);
- }
- library = xmlRelaxNGGetDataTypeLibrary(ctxt, node);
- if (library == NULL)
- library =
- xmlStrdup(BAD_CAST "http://relaxng.org/ns/structure/1.0");
-
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL) {
- xmlFree(type);
- return (NULL);
- }
- def->type = XML_RELAXNG_DATATYPE;
- def->name = type;
- def->ns = library;
-
- lib = (xmlRelaxNGTypeLibraryPtr)
- xmlHashLookup(xmlRelaxNGRegisteredTypes, library);
- if (lib == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_TYPE_LIB,
- "Use of unregistered type library '%s'\n", library,
- NULL);
- def->data = NULL;
- } else {
- def->data = lib;
- if (lib->have == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_ERROR_TYPE_LIB,
- "Internal error with type library '%s': no 'have'\n",
- library, NULL);
- } else {
- tmp = lib->have(lib->data, def->name);
- if (tmp != 1) {
- xmlRngPErr(ctxt, node, XML_RNGP_TYPE_NOT_FOUND,
- "Error type '%s' is not exported by type library '%s'\n",
- def->name, library);
- } else
- if ((xmlStrEqual
- (library,
- BAD_CAST
- "http://www.w3.org/2001/XMLSchema-datatypes"))
- && ((xmlStrEqual(def->name, BAD_CAST "IDREF"))
- || (xmlStrEqual(def->name, BAD_CAST "IDREFS")))) {
- ctxt->idref = 1;
- }
- }
- }
- content = node->children;
-
- /*
- * Handle optional params
- */
- while (content != NULL) {
- if (!xmlStrEqual(content->name, BAD_CAST "param"))
- break;
- if (xmlStrEqual(library,
- BAD_CAST "http://relaxng.org/ns/structure/1.0")) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARAM_FORBIDDEN,
- "Type library '%s' does not allow type parameters\n",
- library, NULL);
- content = content->next;
- while ((content != NULL) &&
- (xmlStrEqual(content->name, BAD_CAST "param")))
- content = content->next;
- } else {
- param = xmlRelaxNGNewDefine(ctxt, node);
- if (param != NULL) {
- param->type = XML_RELAXNG_PARAM;
- param->name = xmlGetProp(content, BAD_CAST "name");
- if (param->name == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARAM_NAME_MISSING,
- "param has no name\n", NULL, NULL);
- }
- param->value = xmlNodeGetContent(content);
- if (lastparam == NULL) {
- def->attrs = lastparam = param;
- } else {
- lastparam->next = param;
- lastparam = param;
- }
- if (lib != NULL) {
- }
- }
- content = content->next;
- }
- }
- /*
- * Handle optional except
- */
- if ((content != NULL)
- && (xmlStrEqual(content->name, BAD_CAST "except"))) {
- xmlNodePtr child;
- xmlRelaxNGDefinePtr tmp2, last = NULL;
-
- except = xmlRelaxNGNewDefine(ctxt, node);
- if (except == NULL) {
- return (def);
- }
- except->type = XML_RELAXNG_EXCEPT;
- child = content->children;
- def->content = except;
- if (child == NULL) {
- xmlRngPErr(ctxt, content, XML_RNGP_EXCEPT_NO_CONTENT,
- "except has no content\n", NULL, NULL);
- }
- while (child != NULL) {
- tmp2 = xmlRelaxNGParsePattern(ctxt, child);
- if (tmp2 != NULL) {
- if (last == NULL) {
- except->content = last = tmp2;
- } else {
- last->next = tmp2;
- last = tmp2;
- }
- }
- child = child->next;
- }
- content = content->next;
- }
- /*
- * Check there is no unhandled data
- */
- if (content != NULL) {
- xmlRngPErr(ctxt, content, XML_RNGP_DATA_CONTENT,
- "Element data has unexpected content %s\n",
- content->name, NULL);
- }
-
- return (def);
-}
-
-static const xmlChar *invalidName = BAD_CAST "\1";
-
-/**
- * xmlRelaxNGCompareNameClasses:
- * @defs1: the first element/attribute defs
- * @defs2: the second element/attribute defs
- * @name: the restriction on the name
- * @ns: the restriction on the namespace
- *
- * Compare the 2 lists of element definitions. The comparison is
- * that if both lists do not accept the same QNames, it returns 1
- * If the 2 lists can accept the same QName the comparison returns 0
- *
- * Returns 1 disttinct, 0 if equal
- */
-static int
-xmlRelaxNGCompareNameClasses(xmlRelaxNGDefinePtr def1,
- xmlRelaxNGDefinePtr def2)
-{
- int ret = 1;
- xmlNode node;
- xmlNs ns;
- xmlRelaxNGValidCtxt ctxt;
-
- memset(&ctxt, 0, sizeof(xmlRelaxNGValidCtxt));
-
- ctxt.flags = FLAGS_IGNORABLE | FLAGS_NOERROR;
-
- if ((def1->type == XML_RELAXNG_ELEMENT) ||
- (def1->type == XML_RELAXNG_ATTRIBUTE)) {
- if (def2->type == XML_RELAXNG_TEXT)
- return (1);
- if (def1->name != NULL) {
- node.name = def1->name;
- } else {
- node.name = invalidName;
- }
- if (def1->ns != NULL) {
- if (def1->ns[0] == 0) {
- node.ns = NULL;
- } else {
- node.ns = &ns;
- ns.href = def1->ns;
- }
- } else {
- node.ns = NULL;
- }
- if (xmlRelaxNGElementMatch(&ctxt, def2, &node)) {
- if (def1->nameClass != NULL) {
- ret = xmlRelaxNGCompareNameClasses(def1->nameClass, def2);
- } else {
- ret = 0;
- }
- } else {
- ret = 1;
- }
- } else if (def1->type == XML_RELAXNG_TEXT) {
- if (def2->type == XML_RELAXNG_TEXT)
- return (0);
- return (1);
- } else if (def1->type == XML_RELAXNG_EXCEPT) {
- ret = xmlRelaxNGCompareNameClasses(def1->content, def2);
- if (ret == 0)
- ret = 1;
- else if (ret == 1)
- ret = 0;
- } else {
- TODO ret = 0;
- }
- if (ret == 0)
- return (ret);
- if ((def2->type == XML_RELAXNG_ELEMENT) ||
- (def2->type == XML_RELAXNG_ATTRIBUTE)) {
- if (def2->name != NULL) {
- node.name = def2->name;
- } else {
- node.name = invalidName;
- }
- node.ns = &ns;
- if (def2->ns != NULL) {
- if (def2->ns[0] == 0) {
- node.ns = NULL;
- } else {
- ns.href = def2->ns;
- }
- } else {
- ns.href = invalidName;
- }
- if (xmlRelaxNGElementMatch(&ctxt, def1, &node)) {
- if (def2->nameClass != NULL) {
- ret = xmlRelaxNGCompareNameClasses(def2->nameClass, def1);
- } else {
- ret = 0;
- }
- } else {
- ret = 1;
- }
- } else {
- TODO ret = 0;
- }
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGCompareElemDefLists:
- * @ctxt: a Relax-NG parser context
- * @defs1: the first list of element/attribute defs
- * @defs2: the second list of element/attribute defs
- *
- * Compare the 2 lists of element or attribute definitions. The comparison
- * is that if both lists do not accept the same QNames, it returns 1
- * If the 2 lists can accept the same QName the comparison returns 0
- *
- * Returns 1 disttinct, 0 if equal
- */
-static int
-xmlRelaxNGCompareElemDefLists(xmlRelaxNGParserCtxtPtr ctxt
- ATTRIBUTE_UNUSED, xmlRelaxNGDefinePtr * def1,
- xmlRelaxNGDefinePtr * def2)
-{
- xmlRelaxNGDefinePtr *basedef2 = def2;
-
- if ((def1 == NULL) || (def2 == NULL))
- return (1);
- if ((*def1 == NULL) || (*def2 == NULL))
- return (1);
- while (*def1 != NULL) {
- while ((*def2) != NULL) {
- if (xmlRelaxNGCompareNameClasses(*def1, *def2) == 0)
- return (0);
- def2++;
- }
- def2 = basedef2;
- def1++;
- }
- return (1);
-}
-
-/**
- * xmlRelaxNGGenerateAttributes:
- * @ctxt: a Relax-NG parser context
- * @def: the definition definition
- *
- * Check if the definition can only generate attributes
- *
- * Returns 1 if yes, 0 if no and -1 in case of error.
- */
-static int
-xmlRelaxNGGenerateAttributes(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDefinePtr def)
-{
- xmlRelaxNGDefinePtr parent, cur, tmp;
-
- /*
- * Don't run that check in case of error. Infinite recursion
- * becomes possible.
- */
- if (ctxt->nbErrors != 0)
- return (-1);
-
- parent = NULL;
- cur = def;
- while (cur != NULL) {
- if ((cur->type == XML_RELAXNG_ELEMENT) ||
- (cur->type == XML_RELAXNG_TEXT) ||
- (cur->type == XML_RELAXNG_DATATYPE) ||
- (cur->type == XML_RELAXNG_PARAM) ||
- (cur->type == XML_RELAXNG_LIST) ||
- (cur->type == XML_RELAXNG_VALUE) ||
- (cur->type == XML_RELAXNG_EMPTY))
- return (0);
- if ((cur->type == XML_RELAXNG_CHOICE) ||
- (cur->type == XML_RELAXNG_INTERLEAVE) ||
- (cur->type == XML_RELAXNG_GROUP) ||
- (cur->type == XML_RELAXNG_ONEORMORE) ||
- (cur->type == XML_RELAXNG_ZEROORMORE) ||
- (cur->type == XML_RELAXNG_OPTIONAL) ||
- (cur->type == XML_RELAXNG_PARENTREF) ||
- (cur->type == XML_RELAXNG_EXTERNALREF) ||
- (cur->type == XML_RELAXNG_REF) ||
- (cur->type == XML_RELAXNG_DEF)) {
- if (cur->content != NULL) {
- parent = cur;
- cur = cur->content;
- tmp = cur;
- while (tmp != NULL) {
- tmp->parent = parent;
- tmp = tmp->next;
- }
- continue;
- }
- }
- if (cur == def)
- break;
- if (cur->next != NULL) {
- cur = cur->next;
- continue;
- }
- do {
- cur = cur->parent;
- if (cur == NULL)
- break;
- if (cur == def)
- return (1);
- if (cur->next != NULL) {
- cur = cur->next;
- break;
- }
- } while (cur != NULL);
- }
- return (1);
-}
-
-/**
- * xmlRelaxNGGetElements:
- * @ctxt: a Relax-NG parser context
- * @def: the definition definition
- * @eora: gather elements (0) or attributes (1)
- *
- * Compute the list of top elements a definition can generate
- *
- * Returns a list of elements or NULL if none was found.
- */
-static xmlRelaxNGDefinePtr *
-xmlRelaxNGGetElements(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDefinePtr def, int eora)
-{
- xmlRelaxNGDefinePtr *ret = NULL, parent, cur, tmp;
- int len = 0;
- int max = 0;
-
- /*
- * Don't run that check in case of error. Infinite recursion
- * becomes possible.
- */
- if (ctxt->nbErrors != 0)
- return (NULL);
-
- parent = NULL;
- cur = def;
- while (cur != NULL) {
- if (((eora == 0) && ((cur->type == XML_RELAXNG_ELEMENT) ||
- (cur->type == XML_RELAXNG_TEXT))) ||
- ((eora == 1) && (cur->type == XML_RELAXNG_ATTRIBUTE))) {
- if (ret == NULL) {
- max = 10;
- ret = (xmlRelaxNGDefinePtr *)
- xmlMalloc((max + 1) * sizeof(xmlRelaxNGDefinePtr));
- if (ret == NULL) {
- xmlRngPErrMemory(ctxt, "getting element list\n");
- return (NULL);
- }
- } else if (max <= len) {
- xmlRelaxNGDefinePtr *temp;
-
- max *= 2;
- temp = xmlRealloc(ret,
- (max + 1) * sizeof(xmlRelaxNGDefinePtr));
- if (temp == NULL) {
- xmlRngPErrMemory(ctxt, "getting element list\n");
- xmlFree(ret);
- return (NULL);
- }
- ret = temp;
- }
- ret[len++] = cur;
- ret[len] = NULL;
- } else if ((cur->type == XML_RELAXNG_CHOICE) ||
- (cur->type == XML_RELAXNG_INTERLEAVE) ||
- (cur->type == XML_RELAXNG_GROUP) ||
- (cur->type == XML_RELAXNG_ONEORMORE) ||
- (cur->type == XML_RELAXNG_ZEROORMORE) ||
- (cur->type == XML_RELAXNG_OPTIONAL) ||
- (cur->type == XML_RELAXNG_PARENTREF) ||
- (cur->type == XML_RELAXNG_REF) ||
- (cur->type == XML_RELAXNG_DEF) ||
- (cur->type == XML_RELAXNG_EXTERNALREF)) {
- /*
- * Don't go within elements or attributes or string values.
- * Just gather the element top list
- */
- if (cur->content != NULL) {
- parent = cur;
- cur = cur->content;
- tmp = cur;
- while (tmp != NULL) {
- tmp->parent = parent;
- tmp = tmp->next;
- }
- continue;
- }
- }
- if (cur == def)
- break;
- if (cur->next != NULL) {
- cur = cur->next;
- continue;
- }
- do {
- cur = cur->parent;
- if (cur == NULL)
- break;
- if (cur == def)
- return (ret);
- if (cur->next != NULL) {
- cur = cur->next;
- break;
- }
- } while (cur != NULL);
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGCheckChoiceDeterminism:
- * @ctxt: a Relax-NG parser context
- * @def: the choice definition
- *
- * Also used to find indeterministic pattern in choice
- */
-static void
-xmlRelaxNGCheckChoiceDeterminism(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDefinePtr def)
-{
- xmlRelaxNGDefinePtr **list;
- xmlRelaxNGDefinePtr cur;
- int nbchild = 0, i, j, ret;
- int is_nullable = 0;
- int is_indeterminist = 0;
- xmlHashTablePtr triage = NULL;
- int is_triable = 1;
-
- if ((def == NULL) || (def->type != XML_RELAXNG_CHOICE))
- return;
-
- if (def->dflags & IS_PROCESSED)
- return;
-
- /*
- * Don't run that check in case of error. Infinite recursion
- * becomes possible.
- */
- if (ctxt->nbErrors != 0)
- return;
-
- is_nullable = xmlRelaxNGIsNullable(def);
-
- cur = def->content;
- while (cur != NULL) {
- nbchild++;
- cur = cur->next;
- }
-
- list = (xmlRelaxNGDefinePtr **) xmlMalloc(nbchild *
- sizeof(xmlRelaxNGDefinePtr
- *));
- if (list == NULL) {
- xmlRngPErrMemory(ctxt, "building choice\n");
- return;
- }
- i = 0;
- /*
- * a bit strong but safe
- */
- if (is_nullable == 0) {
- triage = xmlHashCreate(10);
- } else {
- is_triable = 0;
- }
- cur = def->content;
- while (cur != NULL) {
- list[i] = xmlRelaxNGGetElements(ctxt, cur, 0);
- if ((list[i] == NULL) || (list[i][0] == NULL)) {
- is_triable = 0;
- } else if (is_triable == 1) {
- xmlRelaxNGDefinePtr *tmp;
- int res;
-
- tmp = list[i];
- while ((*tmp != NULL) && (is_triable == 1)) {
- if ((*tmp)->type == XML_RELAXNG_TEXT) {
- res = xmlHashAddEntry2(triage,
- BAD_CAST "#text", NULL,
- (void *) cur);
- if (res != 0)
- is_triable = -1;
- } else if (((*tmp)->type == XML_RELAXNG_ELEMENT) &&
- ((*tmp)->name != NULL)) {
- if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
- res = xmlHashAddEntry2(triage,
- (*tmp)->name, NULL,
- (void *) cur);
- else
- res = xmlHashAddEntry2(triage,
- (*tmp)->name, (*tmp)->ns,
- (void *) cur);
- if (res != 0)
- is_triable = -1;
- } else if ((*tmp)->type == XML_RELAXNG_ELEMENT) {
- if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
- res = xmlHashAddEntry2(triage,
- BAD_CAST "#any", NULL,
- (void *) cur);
- else
- res = xmlHashAddEntry2(triage,
- BAD_CAST "#any", (*tmp)->ns,
- (void *) cur);
- if (res != 0)
- is_triable = -1;
- } else {
- is_triable = -1;
- }
- tmp++;
- }
- }
- i++;
- cur = cur->next;
- }
-
- for (i = 0; i < nbchild; i++) {
- if (list[i] == NULL)
- continue;
- for (j = 0; j < i; j++) {
- if (list[j] == NULL)
- continue;
- ret = xmlRelaxNGCompareElemDefLists(ctxt, list[i], list[j]);
- if (ret == 0) {
- is_indeterminist = 1;
- }
- }
- }
- for (i = 0; i < nbchild; i++) {
- if (list[i] != NULL)
- xmlFree(list[i]);
- }
-
- xmlFree(list);
- if (is_indeterminist) {
- def->dflags |= IS_INDETERMINIST;
- }
- if (is_triable == 1) {
- def->dflags |= IS_TRIABLE;
- def->data = triage;
- } else if (triage != NULL) {
- xmlHashFree(triage, NULL);
- }
- def->dflags |= IS_PROCESSED;
-}
-
-/**
- * xmlRelaxNGCheckGroupAttrs:
- * @ctxt: a Relax-NG parser context
- * @def: the group definition
- *
- * Detects violations of rule 7.3
- */
-static void
-xmlRelaxNGCheckGroupAttrs(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDefinePtr def)
-{
- xmlRelaxNGDefinePtr **list;
- xmlRelaxNGDefinePtr cur;
- int nbchild = 0, i, j, ret;
-
- if ((def == NULL) ||
- ((def->type != XML_RELAXNG_GROUP) &&
- (def->type != XML_RELAXNG_ELEMENT)))
- return;
-
- if (def->dflags & IS_PROCESSED)
- return;
-
- /*
- * Don't run that check in case of error. Infinite recursion
- * becomes possible.
- */
- if (ctxt->nbErrors != 0)
- return;
-
- cur = def->attrs;
- while (cur != NULL) {
- nbchild++;
- cur = cur->next;
- }
- cur = def->content;
- while (cur != NULL) {
- nbchild++;
- cur = cur->next;
- }
-
- list = (xmlRelaxNGDefinePtr **) xmlMalloc(nbchild *
- sizeof(xmlRelaxNGDefinePtr
- *));
- if (list == NULL) {
- xmlRngPErrMemory(ctxt, "building group\n");
- return;
- }
- i = 0;
- cur = def->attrs;
- while (cur != NULL) {
- list[i] = xmlRelaxNGGetElements(ctxt, cur, 1);
- i++;
- cur = cur->next;
- }
- cur = def->content;
- while (cur != NULL) {
- list[i] = xmlRelaxNGGetElements(ctxt, cur, 1);
- i++;
- cur = cur->next;
- }
-
- for (i = 0; i < nbchild; i++) {
- if (list[i] == NULL)
- continue;
- for (j = 0; j < i; j++) {
- if (list[j] == NULL)
- continue;
- ret = xmlRelaxNGCompareElemDefLists(ctxt, list[i], list[j]);
- if (ret == 0) {
- xmlRngPErr(ctxt, def->node, XML_RNGP_GROUP_ATTR_CONFLICT,
- "Attributes conflicts in group\n", NULL, NULL);
- }
- }
- }
- for (i = 0; i < nbchild; i++) {
- if (list[i] != NULL)
- xmlFree(list[i]);
- }
-
- xmlFree(list);
- def->dflags |= IS_PROCESSED;
-}
-
-/**
- * xmlRelaxNGComputeInterleaves:
- * @def: the interleave definition
- * @ctxt: a Relax-NG parser context
- * @name: the definition name
- *
- * A lot of work for preprocessing interleave definitions
- * is potentially needed to get a decent execution speed at runtime
- * - trying to get a total order on the element nodes generated
- * by the interleaves, order the list of interleave definitions
- * following that order.
- * - if <text/> is used to handle mixed content, it is better to
- * flag this in the define and simplify the runtime checking
- * algorithm
- */
-static void
-xmlRelaxNGComputeInterleaves(xmlRelaxNGDefinePtr def,
- xmlRelaxNGParserCtxtPtr ctxt,
- xmlChar * name ATTRIBUTE_UNUSED)
-{
- xmlRelaxNGDefinePtr cur, *tmp;
-
- xmlRelaxNGPartitionPtr partitions = NULL;
- xmlRelaxNGInterleaveGroupPtr *groups = NULL;
- xmlRelaxNGInterleaveGroupPtr group;
- int i, j, ret, res;
- int nbgroups = 0;
- int nbchild = 0;
- int is_mixed = 0;
- int is_determinist = 1;
-
- /*
- * Don't run that check in case of error. Infinite recursion
- * becomes possible.
- */
- if (ctxt->nbErrors != 0)
- return;
-
-#ifdef DEBUG_INTERLEAVE
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGComputeInterleaves(%s)\n", name);
-#endif
- cur = def->content;
- while (cur != NULL) {
- nbchild++;
- cur = cur->next;
- }
-
-#ifdef DEBUG_INTERLEAVE
- xmlGenericError(xmlGenericErrorContext, " %d child\n", nbchild);
-#endif
- groups = (xmlRelaxNGInterleaveGroupPtr *)
- xmlMalloc(nbchild * sizeof(xmlRelaxNGInterleaveGroupPtr));
- if (groups == NULL)
- goto error;
- cur = def->content;
- while (cur != NULL) {
- groups[nbgroups] = (xmlRelaxNGInterleaveGroupPtr)
- xmlMalloc(sizeof(xmlRelaxNGInterleaveGroup));
- if (groups[nbgroups] == NULL)
- goto error;
- if (cur->type == XML_RELAXNG_TEXT)
- is_mixed++;
- groups[nbgroups]->rule = cur;
- groups[nbgroups]->defs = xmlRelaxNGGetElements(ctxt, cur, 0);
- groups[nbgroups]->attrs = xmlRelaxNGGetElements(ctxt, cur, 1);
- nbgroups++;
- cur = cur->next;
- }
-#ifdef DEBUG_INTERLEAVE
- xmlGenericError(xmlGenericErrorContext, " %d groups\n", nbgroups);
-#endif
-
- /*
- * Let's check that all rules makes a partitions according to 7.4
- */
- partitions = (xmlRelaxNGPartitionPtr)
- xmlMalloc(sizeof(xmlRelaxNGPartition));
- if (partitions == NULL)
- goto error;
- memset(partitions, 0, sizeof(xmlRelaxNGPartition));
- partitions->nbgroups = nbgroups;
- partitions->triage = xmlHashCreate(nbgroups);
- for (i = 0; i < nbgroups; i++) {
- group = groups[i];
- for (j = i + 1; j < nbgroups; j++) {
- if (groups[j] == NULL)
- continue;
-
- ret = xmlRelaxNGCompareElemDefLists(ctxt, group->defs,
- groups[j]->defs);
- if (ret == 0) {
- xmlRngPErr(ctxt, def->node, XML_RNGP_ELEM_TEXT_CONFLICT,
- "Element or text conflicts in interleave\n",
- NULL, NULL);
- }
- ret = xmlRelaxNGCompareElemDefLists(ctxt, group->attrs,
- groups[j]->attrs);
- if (ret == 0) {
- xmlRngPErr(ctxt, def->node, XML_RNGP_ATTR_CONFLICT,
- "Attributes conflicts in interleave\n", NULL,
- NULL);
- }
- }
- tmp = group->defs;
- if ((tmp != NULL) && (*tmp != NULL)) {
- while (*tmp != NULL) {
- if ((*tmp)->type == XML_RELAXNG_TEXT) {
- res = xmlHashAddEntry2(partitions->triage,
- BAD_CAST "#text", NULL,
- (void *) (long) (i + 1));
- if (res != 0)
- is_determinist = -1;
- } else if (((*tmp)->type == XML_RELAXNG_ELEMENT) &&
- ((*tmp)->name != NULL)) {
- if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
- res = xmlHashAddEntry2(partitions->triage,
- (*tmp)->name, NULL,
- (void *) (long) (i + 1));
- else
- res = xmlHashAddEntry2(partitions->triage,
- (*tmp)->name, (*tmp)->ns,
- (void *) (long) (i + 1));
- if (res != 0)
- is_determinist = -1;
- } else if ((*tmp)->type == XML_RELAXNG_ELEMENT) {
- if (((*tmp)->ns == NULL) || ((*tmp)->ns[0] == 0))
- res = xmlHashAddEntry2(partitions->triage,
- BAD_CAST "#any", NULL,
- (void *) (long) (i + 1));
- else
- res = xmlHashAddEntry2(partitions->triage,
- BAD_CAST "#any", (*tmp)->ns,
- (void *) (long) (i + 1));
- if ((*tmp)->nameClass != NULL)
- is_determinist = 2;
- if (res != 0)
- is_determinist = -1;
- } else {
- is_determinist = -1;
- }
- tmp++;
- }
- } else {
- is_determinist = 0;
- }
- }
- partitions->groups = groups;
-
- /*
- * and save the partition list back in the def
- */
- def->data = partitions;
- if (is_mixed != 0)
- def->dflags |= IS_MIXED;
- if (is_determinist == 1)
- partitions->flags = IS_DETERMINIST;
- if (is_determinist == 2)
- partitions->flags = IS_DETERMINIST | IS_NEEDCHECK;
- return;
-
- error:
- xmlRngPErrMemory(ctxt, "in interleave computation\n");
- if (groups != NULL) {
- for (i = 0; i < nbgroups; i++)
- if (groups[i] != NULL) {
- if (groups[i]->defs != NULL)
- xmlFree(groups[i]->defs);
- xmlFree(groups[i]);
- }
- xmlFree(groups);
- }
- xmlRelaxNGFreePartition(partitions);
-}
-
-/**
- * xmlRelaxNGParseInterleave:
- * @ctxt: a Relax-NG parser context
- * @node: the data node.
- *
- * parse the content of a RelaxNG interleave node.
- *
- * Returns the definition pointer or NULL in case of error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseInterleave(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGDefinePtr def = NULL;
- xmlRelaxNGDefinePtr last = NULL, cur;
- xmlNodePtr child;
-
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL) {
- return (NULL);
- }
- def->type = XML_RELAXNG_INTERLEAVE;
-
- if (ctxt->interleaves == NULL)
- ctxt->interleaves = xmlHashCreate(10);
- if (ctxt->interleaves == NULL) {
- xmlRngPErrMemory(ctxt, "create interleaves\n");
- } else {
- char name[32];
-
- snprintf(name, 32, "interleave%d", ctxt->nbInterleaves++);
- if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST name, def) < 0) {
- xmlRngPErr(ctxt, node, XML_RNGP_INTERLEAVE_ADD,
- "Failed to add %s to hash table\n",
- (const xmlChar *) name, NULL);
- }
- }
- child = node->children;
- if (child == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_INTERLEAVE_NO_CONTENT,
- "Element interleave is empty\n", NULL, NULL);
- }
- while (child != NULL) {
- if (IS_RELAXNG(child, "element")) {
- cur = xmlRelaxNGParseElement(ctxt, child);
- } else {
- cur = xmlRelaxNGParsePattern(ctxt, child);
- }
- if (cur != NULL) {
- cur->parent = def;
- if (last == NULL) {
- def->content = last = cur;
- } else {
- last->next = cur;
- last = cur;
- }
- }
- child = child->next;
- }
-
- return (def);
-}
-
-/**
- * xmlRelaxNGParseInclude:
- * @ctxt: a Relax-NG parser context
- * @node: the include node
- *
- * Integrate the content of an include node in the current grammar
- *
- * Returns 0 in case of success or -1 in case of error
- */
-static int
-xmlRelaxNGParseInclude(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGIncludePtr incl;
- xmlNodePtr root;
- int ret = 0, tmp;
-
- incl = node->psvi;
- if (incl == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_INCLUDE_EMPTY,
- "Include node has no data\n", NULL, NULL);
- return (-1);
- }
- root = xmlDocGetRootElement(incl->doc);
- if (root == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY, "Include document is empty\n",
- NULL, NULL);
- return (-1);
- }
- if (!xmlStrEqual(root->name, BAD_CAST "grammar")) {
- xmlRngPErr(ctxt, node, XML_RNGP_GRAMMAR_MISSING,
- "Include document root is not a grammar\n", NULL, NULL);
- return (-1);
- }
-
- /*
- * Merge the definition from both the include and the internal list
- */
- if (root->children != NULL) {
- tmp = xmlRelaxNGParseGrammarContent(ctxt, root->children);
- if (tmp != 0)
- ret = -1;
- }
- if (node->children != NULL) {
- tmp = xmlRelaxNGParseGrammarContent(ctxt, node->children);
- if (tmp != 0)
- ret = -1;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGParseDefine:
- * @ctxt: a Relax-NG parser context
- * @node: the define node
- *
- * parse the content of a RelaxNG define element node.
- *
- * Returns 0 in case of success or -1 in case of error
- */
-static int
-xmlRelaxNGParseDefine(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlChar *name;
- int ret = 0, tmp;
- xmlRelaxNGDefinePtr def;
- const xmlChar *olddefine;
-
- name = xmlGetProp(node, BAD_CAST "name");
- if (name == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_NAME_MISSING,
- "define has no name\n", NULL, NULL);
- } else {
- xmlRelaxNGNormExtSpace(name);
- if (xmlValidateNCName(name, 0)) {
- xmlRngPErr(ctxt, node, XML_RNGP_INVALID_DEFINE_NAME,
- "define name '%s' is not an NCName\n", name, NULL);
- }
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL) {
- xmlFree(name);
- return (-1);
- }
- def->type = XML_RELAXNG_DEF;
- def->name = name;
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_EMPTY,
- "define has no children\n", NULL, NULL);
- } else {
- olddefine = ctxt->define;
- ctxt->define = name;
- def->content =
- xmlRelaxNGParsePatterns(ctxt, node->children, 0);
- ctxt->define = olddefine;
- }
- if (ctxt->grammar->defs == NULL)
- ctxt->grammar->defs = xmlHashCreate(10);
- if (ctxt->grammar->defs == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_CREATE_FAILED,
- "Could not create definition hash\n", NULL, NULL);
- ret = -1;
- } else {
- tmp = xmlHashAddEntry(ctxt->grammar->defs, name, def);
- if (tmp < 0) {
- xmlRelaxNGDefinePtr prev;
-
- prev = xmlHashLookup(ctxt->grammar->defs, name);
- if (prev == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_DEFINE_CREATE_FAILED,
- "Internal error on define aggregation of %s\n",
- name, NULL);
- ret = -1;
- } else {
- while (prev->nextHash != NULL)
- prev = prev->nextHash;
- prev->nextHash = def;
- }
- }
- }
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGParseImportRef:
- * @payload: the parser context
- * @data: the current grammar
- * @name: the reference name
- *
- * Import import one references into the current grammar
- */
-static void
-xmlRelaxNGParseImportRef(void *payload, void *data, xmlChar *name) {
- xmlRelaxNGParserCtxtPtr ctxt = (xmlRelaxNGParserCtxtPtr) data;
- xmlRelaxNGDefinePtr def = (xmlRelaxNGDefinePtr) payload;
- int tmp;
-
- def->dflags |= IS_EXTERNAL_REF;
-
- tmp = xmlHashAddEntry(ctxt->grammar->refs, name, def);
- if (tmp < 0) {
- xmlRelaxNGDefinePtr prev;
-
- prev = (xmlRelaxNGDefinePtr)
- xmlHashLookup(ctxt->grammar->refs, def->name);
- if (prev == NULL) {
- if (def->name != NULL) {
- xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED,
- "Error refs definitions '%s'\n",
- def->name, NULL);
- } else {
- xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED,
- "Error refs definitions\n",
- NULL, NULL);
- }
- } else {
- def->nextHash = prev->nextHash;
- prev->nextHash = def;
- }
- }
-}
-
-/**
- * xmlRelaxNGParseImportRefs:
- * @ctxt: the parser context
- * @grammar: the sub grammar
- *
- * Import references from the subgrammar into the current grammar
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlRelaxNGParseImportRefs(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGGrammarPtr grammar) {
- if ((ctxt == NULL) || (grammar == NULL) || (ctxt->grammar == NULL))
- return(-1);
- if (grammar->refs == NULL)
- return(0);
- if (ctxt->grammar->refs == NULL)
- ctxt->grammar->refs = xmlHashCreate(10);
- if (ctxt->grammar->refs == NULL) {
- xmlRngPErr(ctxt, NULL, XML_RNGP_REF_CREATE_FAILED,
- "Could not create references hash\n", NULL, NULL);
- return(-1);
- }
- xmlHashScan(grammar->refs, xmlRelaxNGParseImportRef, ctxt);
- return(0);
-}
-
-/**
- * xmlRelaxNGProcessExternalRef:
- * @ctxt: the parser context
- * @node: the externlRef node
- *
- * Process and compile an externlRef node
- *
- * Returns the xmlRelaxNGDefinePtr or NULL in case of error
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGProcessExternalRef(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGDocumentPtr docu;
- xmlNodePtr root, tmp;
- xmlChar *ns;
- int newNs = 0, oldflags;
- xmlRelaxNGDefinePtr def;
-
- docu = node->psvi;
- if (docu != NULL) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_EXTERNALREF;
-
- if (docu->content == NULL) {
- /*
- * Then do the parsing for good
- */
- root = xmlDocGetRootElement(docu->doc);
- if (root == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EXTERNALREF_EMTPY,
- "xmlRelaxNGParse: %s is empty\n", ctxt->URL,
- NULL);
- return (NULL);
- }
- /*
- * ns transmission rules
- */
- ns = xmlGetProp(root, BAD_CAST "ns");
- if (ns == NULL) {
- tmp = node;
- while ((tmp != NULL) && (tmp->type == XML_ELEMENT_NODE)) {
- ns = xmlGetProp(tmp, BAD_CAST "ns");
- if (ns != NULL) {
- break;
- }
- tmp = tmp->parent;
- }
- if (ns != NULL) {
- xmlSetProp(root, BAD_CAST "ns", ns);
- newNs = 1;
- xmlFree(ns);
- }
- } else {
- xmlFree(ns);
- }
-
- /*
- * Parsing to get a precompiled schemas.
- */
- oldflags = ctxt->flags;
- ctxt->flags |= XML_RELAXNG_IN_EXTERNALREF;
- docu->schema = xmlRelaxNGParseDocument(ctxt, root);
- ctxt->flags = oldflags;
- if ((docu->schema != NULL) &&
- (docu->schema->topgrammar != NULL)) {
- docu->content = docu->schema->topgrammar->start;
- if (docu->schema->topgrammar->refs)
- xmlRelaxNGParseImportRefs(ctxt, docu->schema->topgrammar);
- }
-
- /*
- * the externalRef may be reused in a different ns context
- */
- if (newNs == 1) {
- xmlUnsetProp(root, BAD_CAST "ns");
- }
- }
- def->content = docu->content;
- } else {
- def = NULL;
- }
- return (def);
-}
-
-/**
- * xmlRelaxNGParsePattern:
- * @ctxt: a Relax-NG parser context
- * @node: the pattern node.
- *
- * parse the content of a RelaxNG pattern node.
- *
- * Returns the definition pointer or NULL in case of error or if no
- * pattern is generated.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParsePattern(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGDefinePtr def = NULL;
-
- if (node == NULL) {
- return (NULL);
- }
- if (IS_RELAXNG(node, "element")) {
- def = xmlRelaxNGParseElement(ctxt, node);
- } else if (IS_RELAXNG(node, "attribute")) {
- def = xmlRelaxNGParseAttribute(ctxt, node);
- } else if (IS_RELAXNG(node, "empty")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_EMPTY;
- if (node->children != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_NOT_EMPTY,
- "empty: had a child node\n", NULL, NULL);
- }
- } else if (IS_RELAXNG(node, "text")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_TEXT;
- if (node->children != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_TEXT_HAS_CHILD,
- "text: had a child node\n", NULL, NULL);
- }
- } else if (IS_RELAXNG(node, "zeroOrMore")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_ZEROORMORE;
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
- "Element %s is empty\n", node->name, NULL);
- } else {
- def->content =
- xmlRelaxNGParsePatterns(ctxt, node->children, 1);
- }
- } else if (IS_RELAXNG(node, "oneOrMore")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_ONEORMORE;
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
- "Element %s is empty\n", node->name, NULL);
- } else {
- def->content =
- xmlRelaxNGParsePatterns(ctxt, node->children, 1);
- }
- } else if (IS_RELAXNG(node, "optional")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_OPTIONAL;
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
- "Element %s is empty\n", node->name, NULL);
- } else {
- def->content =
- xmlRelaxNGParsePatterns(ctxt, node->children, 1);
- }
- } else if (IS_RELAXNG(node, "choice")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_CHOICE;
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
- "Element %s is empty\n", node->name, NULL);
- } else {
- def->content =
- xmlRelaxNGParsePatterns(ctxt, node->children, 0);
- }
- } else if (IS_RELAXNG(node, "group")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_GROUP;
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
- "Element %s is empty\n", node->name, NULL);
- } else {
- def->content =
- xmlRelaxNGParsePatterns(ctxt, node->children, 0);
- }
- } else if (IS_RELAXNG(node, "ref")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_REF;
- def->name = xmlGetProp(node, BAD_CAST "name");
- if (def->name == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_REF_NO_NAME, "ref has no name\n",
- NULL, NULL);
- } else {
- xmlRelaxNGNormExtSpace(def->name);
- if (xmlValidateNCName(def->name, 0)) {
- xmlRngPErr(ctxt, node, XML_RNGP_REF_NAME_INVALID,
- "ref name '%s' is not an NCName\n", def->name,
- NULL);
- }
- }
- if (node->children != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_REF_NOT_EMPTY, "ref is not empty\n",
- NULL, NULL);
- }
- if (ctxt->grammar->refs == NULL)
- ctxt->grammar->refs = xmlHashCreate(10);
- if (ctxt->grammar->refs == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
- "Could not create references hash\n", NULL, NULL);
- def = NULL;
- } else {
- int tmp;
-
- tmp = xmlHashAddEntry(ctxt->grammar->refs, def->name, def);
- if (tmp < 0) {
- xmlRelaxNGDefinePtr prev;
-
- prev = (xmlRelaxNGDefinePtr)
- xmlHashLookup(ctxt->grammar->refs, def->name);
- if (prev == NULL) {
- if (def->name != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
- "Error refs definitions '%s'\n",
- def->name, NULL);
- } else {
- xmlRngPErr(ctxt, node, XML_RNGP_REF_CREATE_FAILED,
- "Error refs definitions\n",
- NULL, NULL);
- }
- def = NULL;
- } else {
- def->nextHash = prev->nextHash;
- prev->nextHash = def;
- }
- }
- }
- } else if (IS_RELAXNG(node, "data")) {
- def = xmlRelaxNGParseData(ctxt, node);
- } else if (IS_RELAXNG(node, "value")) {
- def = xmlRelaxNGParseValue(ctxt, node);
- } else if (IS_RELAXNG(node, "list")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_LIST;
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT,
- "Element %s is empty\n", node->name, NULL);
- } else {
- def->content =
- xmlRelaxNGParsePatterns(ctxt, node->children, 0);
- }
- } else if (IS_RELAXNG(node, "interleave")) {
- def = xmlRelaxNGParseInterleave(ctxt, node);
- } else if (IS_RELAXNG(node, "externalRef")) {
- def = xmlRelaxNGProcessExternalRef(ctxt, node);
- } else if (IS_RELAXNG(node, "notAllowed")) {
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_NOT_ALLOWED;
- if (node->children != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_NOTALLOWED_NOT_EMPTY,
- "xmlRelaxNGParse: notAllowed element is not empty\n",
- NULL, NULL);
- }
- } else if (IS_RELAXNG(node, "grammar")) {
- xmlRelaxNGGrammarPtr grammar, old;
- xmlRelaxNGGrammarPtr oldparent;
-
-#ifdef DEBUG_GRAMMAR
- xmlGenericError(xmlGenericErrorContext,
- "Found <grammar> pattern\n");
-#endif
-
- oldparent = ctxt->parentgrammar;
- old = ctxt->grammar;
- ctxt->parentgrammar = old;
- grammar = xmlRelaxNGParseGrammar(ctxt, node->children);
- if (old != NULL) {
- ctxt->grammar = old;
- ctxt->parentgrammar = oldparent;
-#if 0
- if (grammar != NULL) {
- grammar->next = old->next;
- old->next = grammar;
- }
-#endif
- }
- if (grammar != NULL)
- def = grammar->start;
- else
- def = NULL;
- } else if (IS_RELAXNG(node, "parentRef")) {
- if (ctxt->parentgrammar == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NO_PARENT,
- "Use of parentRef without a parent grammar\n", NULL,
- NULL);
- return (NULL);
- }
- def = xmlRelaxNGNewDefine(ctxt, node);
- if (def == NULL)
- return (NULL);
- def->type = XML_RELAXNG_PARENTREF;
- def->name = xmlGetProp(node, BAD_CAST "name");
- if (def->name == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NO_NAME,
- "parentRef has no name\n", NULL, NULL);
- } else {
- xmlRelaxNGNormExtSpace(def->name);
- if (xmlValidateNCName(def->name, 0)) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NAME_INVALID,
- "parentRef name '%s' is not an NCName\n",
- def->name, NULL);
- }
- }
- if (node->children != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_NOT_EMPTY,
- "parentRef is not empty\n", NULL, NULL);
- }
- if (ctxt->parentgrammar->refs == NULL)
- ctxt->parentgrammar->refs = xmlHashCreate(10);
- if (ctxt->parentgrammar->refs == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_CREATE_FAILED,
- "Could not create references hash\n", NULL, NULL);
- def = NULL;
- } else if (def->name != NULL) {
- int tmp;
-
- tmp =
- xmlHashAddEntry(ctxt->parentgrammar->refs, def->name, def);
- if (tmp < 0) {
- xmlRelaxNGDefinePtr prev;
-
- prev = (xmlRelaxNGDefinePtr)
- xmlHashLookup(ctxt->parentgrammar->refs, def->name);
- if (prev == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_PARENTREF_CREATE_FAILED,
- "Internal error parentRef definitions '%s'\n",
- def->name, NULL);
- def = NULL;
- } else {
- def->nextHash = prev->nextHash;
- prev->nextHash = def;
- }
- }
- }
- } else if (IS_RELAXNG(node, "mixed")) {
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EMPTY_CONSTRUCT, "Mixed is empty\n",
- NULL, NULL);
- def = NULL;
- } else {
- def = xmlRelaxNGParseInterleave(ctxt, node);
- if (def != NULL) {
- xmlRelaxNGDefinePtr tmp;
-
- if ((def->content != NULL) && (def->content->next != NULL)) {
- tmp = xmlRelaxNGNewDefine(ctxt, node);
- if (tmp != NULL) {
- tmp->type = XML_RELAXNG_GROUP;
- tmp->content = def->content;
- def->content = tmp;
- }
- }
-
- tmp = xmlRelaxNGNewDefine(ctxt, node);
- if (tmp == NULL)
- return (def);
- tmp->type = XML_RELAXNG_TEXT;
- tmp->next = def->content;
- def->content = tmp;
- }
- }
- } else {
- xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_CONSTRUCT,
- "Unexpected node %s is not a pattern\n", node->name,
- NULL);
- def = NULL;
- }
- return (def);
-}
-
-/**
- * xmlRelaxNGParseAttribute:
- * @ctxt: a Relax-NG parser context
- * @node: the element node
- *
- * parse the content of a RelaxNG attribute node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseAttribute(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGDefinePtr ret, cur;
- xmlNodePtr child;
- int old_flags;
-
- ret = xmlRelaxNGNewDefine(ctxt, node);
- if (ret == NULL)
- return (NULL);
- ret->type = XML_RELAXNG_ATTRIBUTE;
- ret->parent = ctxt->def;
- child = node->children;
- if (child == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_EMPTY,
- "xmlRelaxNGParseattribute: attribute has no children\n",
- NULL, NULL);
- return (ret);
- }
- old_flags = ctxt->flags;
- ctxt->flags |= XML_RELAXNG_IN_ATTRIBUTE;
- cur = xmlRelaxNGParseNameClass(ctxt, child, ret);
- if (cur != NULL)
- child = child->next;
-
- if (child != NULL) {
- cur = xmlRelaxNGParsePattern(ctxt, child);
- if (cur != NULL) {
- switch (cur->type) {
- case XML_RELAXNG_EMPTY:
- case XML_RELAXNG_NOT_ALLOWED:
- case XML_RELAXNG_TEXT:
- case XML_RELAXNG_ELEMENT:
- case XML_RELAXNG_DATATYPE:
- case XML_RELAXNG_VALUE:
- case XML_RELAXNG_LIST:
- case XML_RELAXNG_REF:
- case XML_RELAXNG_PARENTREF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_DEF:
- case XML_RELAXNG_ONEORMORE:
- case XML_RELAXNG_ZEROORMORE:
- case XML_RELAXNG_OPTIONAL:
- case XML_RELAXNG_CHOICE:
- case XML_RELAXNG_GROUP:
- case XML_RELAXNG_INTERLEAVE:
- case XML_RELAXNG_ATTRIBUTE:
- ret->content = cur;
- cur->parent = ret;
- break;
- case XML_RELAXNG_START:
- case XML_RELAXNG_PARAM:
- case XML_RELAXNG_EXCEPT:
- xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_CONTENT,
- "attribute has invalid content\n", NULL,
- NULL);
- break;
- case XML_RELAXNG_NOOP:
- xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_NOOP,
- "RNG Internal error, noop found in attribute\n",
- NULL, NULL);
- break;
- }
- }
- child = child->next;
- }
- if (child != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_ATTRIBUTE_CHILDREN,
- "attribute has multiple children\n", NULL, NULL);
- }
- ctxt->flags = old_flags;
- return (ret);
-}
-
-/**
- * xmlRelaxNGParseExceptNameClass:
- * @ctxt: a Relax-NG parser context
- * @node: the except node
- * @attr: 1 if within an attribute, 0 if within an element
- *
- * parse the content of a RelaxNG nameClass node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseExceptNameClass(xmlRelaxNGParserCtxtPtr ctxt,
- xmlNodePtr node, int attr)
-{
- xmlRelaxNGDefinePtr ret, cur, last = NULL;
- xmlNodePtr child;
-
- if (!IS_RELAXNG(node, "except")) {
- xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_MISSING,
- "Expecting an except node\n", NULL, NULL);
- return (NULL);
- }
- if (node->next != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_MULTIPLE,
- "exceptNameClass allows only a single except node\n",
- NULL, NULL);
- }
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_EXCEPT_EMPTY, "except has no content\n",
- NULL, NULL);
- return (NULL);
- }
-
- ret = xmlRelaxNGNewDefine(ctxt, node);
- if (ret == NULL)
- return (NULL);
- ret->type = XML_RELAXNG_EXCEPT;
- child = node->children;
- while (child != NULL) {
- cur = xmlRelaxNGNewDefine(ctxt, child);
- if (cur == NULL)
- break;
- if (attr)
- cur->type = XML_RELAXNG_ATTRIBUTE;
- else
- cur->type = XML_RELAXNG_ELEMENT;
-
- if (xmlRelaxNGParseNameClass(ctxt, child, cur) != NULL) {
- if (last == NULL) {
- ret->content = cur;
- } else {
- last->next = cur;
- }
- last = cur;
- }
- child = child->next;
- }
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGParseNameClass:
- * @ctxt: a Relax-NG parser context
- * @node: the nameClass node
- * @def: the current definition
- *
- * parse the content of a RelaxNG nameClass node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseNameClass(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node,
- xmlRelaxNGDefinePtr def)
-{
- xmlRelaxNGDefinePtr ret, tmp;
- xmlChar *val;
-
- ret = def;
- if ((IS_RELAXNG(node, "name")) || (IS_RELAXNG(node, "anyName")) ||
- (IS_RELAXNG(node, "nsName"))) {
- if ((def->type != XML_RELAXNG_ELEMENT) &&
- (def->type != XML_RELAXNG_ATTRIBUTE)) {
- ret = xmlRelaxNGNewDefine(ctxt, node);
- if (ret == NULL)
- return (NULL);
- ret->parent = def;
- if (ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE)
- ret->type = XML_RELAXNG_ATTRIBUTE;
- else
- ret->type = XML_RELAXNG_ELEMENT;
- }
- }
- if (IS_RELAXNG(node, "name")) {
- val = xmlNodeGetContent(node);
- xmlRelaxNGNormExtSpace(val);
- if (xmlValidateNCName(val, 0)) {
- if (node->parent != NULL)
- xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NAME,
- "Element %s name '%s' is not an NCName\n",
- node->parent->name, val);
- else
- xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NAME,
- "name '%s' is not an NCName\n",
- val, NULL);
- }
- ret->name = val;
- val = xmlGetProp(node, BAD_CAST "ns");
- ret->ns = val;
- if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
- (val != NULL) &&
- (xmlStrEqual(val, BAD_CAST "http://www.w3.org/2000/xmlns"))) {
- xmlRngPErr(ctxt, node, XML_RNGP_XML_NS,
- "Attribute with namespace '%s' is not allowed\n",
- val, NULL);
- }
- if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
- (val != NULL) &&
- (val[0] == 0) && (xmlStrEqual(ret->name, BAD_CAST "xmlns"))) {
- xmlRngPErr(ctxt, node, XML_RNGP_XMLNS_NAME,
- "Attribute with QName 'xmlns' is not allowed\n",
- val, NULL);
- }
- } else if (IS_RELAXNG(node, "anyName")) {
- ret->name = NULL;
- ret->ns = NULL;
- if (node->children != NULL) {
- ret->nameClass =
- xmlRelaxNGParseExceptNameClass(ctxt, node->children,
- (def->type ==
- XML_RELAXNG_ATTRIBUTE));
- }
- } else if (IS_RELAXNG(node, "nsName")) {
- ret->name = NULL;
- ret->ns = xmlGetProp(node, BAD_CAST "ns");
- if (ret->ns == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_NSNAME_NO_NS,
- "nsName has no ns attribute\n", NULL, NULL);
- }
- if ((ctxt->flags & XML_RELAXNG_IN_ATTRIBUTE) &&
- (ret->ns != NULL) &&
- (xmlStrEqual
- (ret->ns, BAD_CAST "http://www.w3.org/2000/xmlns"))) {
- xmlRngPErr(ctxt, node, XML_RNGP_XML_NS,
- "Attribute with namespace '%s' is not allowed\n",
- ret->ns, NULL);
- }
- if (node->children != NULL) {
- ret->nameClass =
- xmlRelaxNGParseExceptNameClass(ctxt, node->children,
- (def->type ==
- XML_RELAXNG_ATTRIBUTE));
- }
- } else if (IS_RELAXNG(node, "choice")) {
- xmlNodePtr child;
- xmlRelaxNGDefinePtr last = NULL;
-
- ret = xmlRelaxNGNewDefine(ctxt, node);
- if (ret == NULL)
- return (NULL);
- ret->parent = def;
- ret->type = XML_RELAXNG_CHOICE;
-
- if (node->children == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_CHOICE_EMPTY,
- "Element choice is empty\n", NULL, NULL);
- } else {
-
- child = node->children;
- while (child != NULL) {
- tmp = xmlRelaxNGParseNameClass(ctxt, child, ret);
- if (tmp != NULL) {
- if (last == NULL) {
- last = ret->nameClass = tmp;
- } else {
- last->next = tmp;
- last = tmp;
- }
- }
- child = child->next;
- }
- }
- } else {
- xmlRngPErr(ctxt, node, XML_RNGP_CHOICE_CONTENT,
- "expecting name, anyName, nsName or choice : got %s\n",
- (node == NULL ? (const xmlChar *) "nothing" : node->name),
- NULL);
- return (NULL);
- }
- if (ret != def) {
- if (def->nameClass == NULL) {
- def->nameClass = ret;
- } else {
- tmp = def->nameClass;
- while (tmp->next != NULL) {
- tmp = tmp->next;
- }
- tmp->next = ret;
- }
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGParseElement:
- * @ctxt: a Relax-NG parser context
- * @node: the element node
- *
- * parse the content of a RelaxNG element node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParseElement(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGDefinePtr ret, cur, last;
- xmlNodePtr child;
- const xmlChar *olddefine;
-
- ret = xmlRelaxNGNewDefine(ctxt, node);
- if (ret == NULL)
- return (NULL);
- ret->type = XML_RELAXNG_ELEMENT;
- ret->parent = ctxt->def;
- child = node->children;
- if (child == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_EMPTY,
- "xmlRelaxNGParseElement: element has no children\n",
- NULL, NULL);
- return (ret);
- }
- cur = xmlRelaxNGParseNameClass(ctxt, child, ret);
- if (cur != NULL)
- child = child->next;
-
- if (child == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_NO_CONTENT,
- "xmlRelaxNGParseElement: element has no content\n",
- NULL, NULL);
- return (ret);
- }
- olddefine = ctxt->define;
- ctxt->define = NULL;
- last = NULL;
- while (child != NULL) {
- cur = xmlRelaxNGParsePattern(ctxt, child);
- if (cur != NULL) {
- cur->parent = ret;
- switch (cur->type) {
- case XML_RELAXNG_EMPTY:
- case XML_RELAXNG_NOT_ALLOWED:
- case XML_RELAXNG_TEXT:
- case XML_RELAXNG_ELEMENT:
- case XML_RELAXNG_DATATYPE:
- case XML_RELAXNG_VALUE:
- case XML_RELAXNG_LIST:
- case XML_RELAXNG_REF:
- case XML_RELAXNG_PARENTREF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_DEF:
- case XML_RELAXNG_ZEROORMORE:
- case XML_RELAXNG_ONEORMORE:
- case XML_RELAXNG_OPTIONAL:
- case XML_RELAXNG_CHOICE:
- case XML_RELAXNG_GROUP:
- case XML_RELAXNG_INTERLEAVE:
- if (last == NULL) {
- ret->content = last = cur;
- } else {
- if ((last->type == XML_RELAXNG_ELEMENT) &&
- (ret->content == last)) {
- ret->content = xmlRelaxNGNewDefine(ctxt, node);
- if (ret->content != NULL) {
- ret->content->type = XML_RELAXNG_GROUP;
- ret->content->content = last;
- } else {
- ret->content = last;
- }
- }
- last->next = cur;
- last = cur;
- }
- break;
- case XML_RELAXNG_ATTRIBUTE:
- cur->next = ret->attrs;
- ret->attrs = cur;
- break;
- case XML_RELAXNG_START:
- xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
- "RNG Internal error, start found in element\n",
- NULL, NULL);
- break;
- case XML_RELAXNG_PARAM:
- xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
- "RNG Internal error, param found in element\n",
- NULL, NULL);
- break;
- case XML_RELAXNG_EXCEPT:
- xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
- "RNG Internal error, except found in element\n",
- NULL, NULL);
- break;
- case XML_RELAXNG_NOOP:
- xmlRngPErr(ctxt, node, XML_RNGP_ELEMENT_CONTENT,
- "RNG Internal error, noop found in element\n",
- NULL, NULL);
- break;
- }
- }
- child = child->next;
- }
- ctxt->define = olddefine;
- return (ret);
-}
-
-/**
- * xmlRelaxNGParsePatterns:
- * @ctxt: a Relax-NG parser context
- * @nodes: list of nodes
- * @group: use an implicit <group> for elements
- *
- * parse the content of a RelaxNG start node.
- *
- * Returns the definition pointer or NULL in case of error.
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGParsePatterns(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes,
- int group)
-{
- xmlRelaxNGDefinePtr def = NULL, last = NULL, cur, parent;
-
- parent = ctxt->def;
- while (nodes != NULL) {
- if (IS_RELAXNG(nodes, "element")) {
- cur = xmlRelaxNGParseElement(ctxt, nodes);
- if (def == NULL) {
- def = last = cur;
- } else {
- if ((group == 1) && (def->type == XML_RELAXNG_ELEMENT) &&
- (def == last)) {
- def = xmlRelaxNGNewDefine(ctxt, nodes);
- def->type = XML_RELAXNG_GROUP;
- def->content = last;
- }
- last->next = cur;
- last = cur;
- }
- cur->parent = parent;
- } else {
- cur = xmlRelaxNGParsePattern(ctxt, nodes);
- if (cur != NULL) {
- if (def == NULL) {
- def = last = cur;
- } else {
- last->next = cur;
- last = cur;
- }
- }
- }
- nodes = nodes->next;
- }
- return (def);
-}
-
-/**
- * xmlRelaxNGParseStart:
- * @ctxt: a Relax-NG parser context
- * @nodes: start children nodes
- *
- * parse the content of a RelaxNG start node.
- *
- * Returns 0 in case of success, -1 in case of error
- */
-static int
-xmlRelaxNGParseStart(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes)
-{
- int ret = 0;
- xmlRelaxNGDefinePtr def = NULL, last;
-
- if (nodes == NULL) {
- xmlRngPErr(ctxt, nodes, XML_RNGP_START_EMPTY, "start has no children\n",
- NULL, NULL);
- return (-1);
- }
- if (IS_RELAXNG(nodes, "empty")) {
- def = xmlRelaxNGNewDefine(ctxt, nodes);
- if (def == NULL)
- return (-1);
- def->type = XML_RELAXNG_EMPTY;
- if (nodes->children != NULL) {
- xmlRngPErr(ctxt, nodes, XML_RNGP_EMPTY_CONTENT,
- "element empty is not empty\n", NULL, NULL);
- }
- } else if (IS_RELAXNG(nodes, "notAllowed")) {
- def = xmlRelaxNGNewDefine(ctxt, nodes);
- if (def == NULL)
- return (-1);
- def->type = XML_RELAXNG_NOT_ALLOWED;
- if (nodes->children != NULL) {
- xmlRngPErr(ctxt, nodes, XML_RNGP_NOTALLOWED_NOT_EMPTY,
- "element notAllowed is not empty\n", NULL, NULL);
- }
- } else {
- def = xmlRelaxNGParsePatterns(ctxt, nodes, 1);
- }
- if (ctxt->grammar->start != NULL) {
- last = ctxt->grammar->start;
- while (last->next != NULL)
- last = last->next;
- last->next = def;
- } else {
- ctxt->grammar->start = def;
- }
- nodes = nodes->next;
- if (nodes != NULL) {
- xmlRngPErr(ctxt, nodes, XML_RNGP_START_CONTENT,
- "start more than one children\n", NULL, NULL);
- return (-1);
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGParseGrammarContent:
- * @ctxt: a Relax-NG parser context
- * @nodes: grammar children nodes
- *
- * parse the content of a RelaxNG grammar node.
- *
- * Returns 0 in case of success, -1 in case of error
- */
-static int
-xmlRelaxNGParseGrammarContent(xmlRelaxNGParserCtxtPtr ctxt,
- xmlNodePtr nodes)
-{
- int ret = 0, tmp;
-
- if (nodes == NULL) {
- xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_EMPTY,
- "grammar has no children\n", NULL, NULL);
- return (-1);
- }
- while (nodes != NULL) {
- if (IS_RELAXNG(nodes, "start")) {
- if (nodes->children == NULL) {
- xmlRngPErr(ctxt, nodes, XML_RNGP_START_EMPTY,
- "start has no children\n", NULL, NULL);
- } else {
- tmp = xmlRelaxNGParseStart(ctxt, nodes->children);
- if (tmp != 0)
- ret = -1;
- }
- } else if (IS_RELAXNG(nodes, "define")) {
- tmp = xmlRelaxNGParseDefine(ctxt, nodes);
- if (tmp != 0)
- ret = -1;
- } else if (IS_RELAXNG(nodes, "include")) {
- tmp = xmlRelaxNGParseInclude(ctxt, nodes);
- if (tmp != 0)
- ret = -1;
- } else {
- xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_CONTENT,
- "grammar has unexpected child %s\n", nodes->name,
- NULL);
- ret = -1;
- }
- nodes = nodes->next;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGCheckReference:
- * @ref: the ref
- * @ctxt: a Relax-NG parser context
- * @name: the name associated to the defines
- *
- * Applies the 4.17. combine attribute rule for all the define
- * element of a given grammar using the same name.
- */
-static void
-xmlRelaxNGCheckReference(xmlRelaxNGDefinePtr ref,
- xmlRelaxNGParserCtxtPtr ctxt,
- const xmlChar * name)
-{
- xmlRelaxNGGrammarPtr grammar;
- xmlRelaxNGDefinePtr def, cur;
-
- /*
- * Those rules don't apply to imported ref from xmlRelaxNGParseImportRef
- */
- if (ref->dflags & IS_EXTERNAL_REF)
- return;
-
- grammar = ctxt->grammar;
- if (grammar == NULL) {
- xmlRngPErr(ctxt, ref->node, XML_ERR_INTERNAL_ERROR,
- "Internal error: no grammar in CheckReference %s\n",
- name, NULL);
- return;
- }
- if (ref->content != NULL) {
- xmlRngPErr(ctxt, ref->node, XML_ERR_INTERNAL_ERROR,
- "Internal error: reference has content in CheckReference %s\n",
- name, NULL);
- return;
- }
- if (grammar->defs != NULL) {
- def = xmlHashLookup(grammar->defs, name);
- if (def != NULL) {
- cur = ref;
- while (cur != NULL) {
- cur->content = def;
- cur = cur->nextHash;
- }
- } else {
- xmlRngPErr(ctxt, ref->node, XML_RNGP_REF_NO_DEF,
- "Reference %s has no matching definition\n", name,
- NULL);
- }
- } else {
- xmlRngPErr(ctxt, ref->node, XML_RNGP_REF_NO_DEF,
- "Reference %s has no matching definition\n", name,
- NULL);
- }
-}
-
-/**
- * xmlRelaxNGCheckCombine:
- * @define: the define(s) list
- * @ctxt: a Relax-NG parser context
- * @name: the name associated to the defines
- *
- * Applies the 4.17. combine attribute rule for all the define
- * element of a given grammar using the same name.
- */
-static void
-xmlRelaxNGCheckCombine(xmlRelaxNGDefinePtr define,
- xmlRelaxNGParserCtxtPtr ctxt, const xmlChar * name)
-{
- xmlChar *combine;
- int choiceOrInterleave = -1;
- int missing = 0;
- xmlRelaxNGDefinePtr cur, last, tmp, tmp2;
-
- if (define->nextHash == NULL)
- return;
- cur = define;
- while (cur != NULL) {
- combine = xmlGetProp(cur->node, BAD_CAST "combine");
- if (combine != NULL) {
- if (xmlStrEqual(combine, BAD_CAST "choice")) {
- if (choiceOrInterleave == -1)
- choiceOrInterleave = 1;
- else if (choiceOrInterleave == 0) {
- xmlRngPErr(ctxt, define->node, XML_RNGP_DEF_CHOICE_AND_INTERLEAVE,
- "Defines for %s use both 'choice' and 'interleave'\n",
- name, NULL);
- }
- } else if (xmlStrEqual(combine, BAD_CAST "interleave")) {
- if (choiceOrInterleave == -1)
- choiceOrInterleave = 0;
- else if (choiceOrInterleave == 1) {
- xmlRngPErr(ctxt, define->node, XML_RNGP_DEF_CHOICE_AND_INTERLEAVE,
- "Defines for %s use both 'choice' and 'interleave'\n",
- name, NULL);
- }
- } else {
- xmlRngPErr(ctxt, define->node, XML_RNGP_UNKNOWN_COMBINE,
- "Defines for %s use unknown combine value '%s''\n",
- name, combine);
- }
- xmlFree(combine);
- } else {
- if (missing == 0)
- missing = 1;
- else {
- xmlRngPErr(ctxt, define->node, XML_RNGP_NEED_COMBINE,
- "Some defines for %s needs the combine attribute\n",
- name, NULL);
- }
- }
-
- cur = cur->nextHash;
- }
-#ifdef DEBUG
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGCheckCombine(): merging %s defines: %d\n",
- name, choiceOrInterleave);
-#endif
- if (choiceOrInterleave == -1)
- choiceOrInterleave = 0;
- cur = xmlRelaxNGNewDefine(ctxt, define->node);
- if (cur == NULL)
- return;
- if (choiceOrInterleave == 0)
- cur->type = XML_RELAXNG_INTERLEAVE;
- else
- cur->type = XML_RELAXNG_CHOICE;
- tmp = define;
- last = NULL;
- while (tmp != NULL) {
- if (tmp->content != NULL) {
- if (tmp->content->next != NULL) {
- /*
- * we need first to create a wrapper.
- */
- tmp2 = xmlRelaxNGNewDefine(ctxt, tmp->content->node);
- if (tmp2 == NULL)
- break;
- tmp2->type = XML_RELAXNG_GROUP;
- tmp2->content = tmp->content;
- } else {
- tmp2 = tmp->content;
- }
- if (last == NULL) {
- cur->content = tmp2;
- } else {
- last->next = tmp2;
- }
- last = tmp2;
- }
- tmp->content = cur;
- tmp = tmp->nextHash;
- }
- define->content = cur;
- if (choiceOrInterleave == 0) {
- if (ctxt->interleaves == NULL)
- ctxt->interleaves = xmlHashCreate(10);
- if (ctxt->interleaves == NULL) {
- xmlRngPErr(ctxt, define->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
- "Failed to create interleaves hash table\n", NULL,
- NULL);
- } else {
- char tmpname[32];
-
- snprintf(tmpname, 32, "interleave%d", ctxt->nbInterleaves++);
- if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST tmpname, cur) <
- 0) {
- xmlRngPErr(ctxt, define->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
- "Failed to add %s to hash table\n",
- (const xmlChar *) tmpname, NULL);
- }
- }
- }
-}
-
-/**
- * xmlRelaxNGCombineStart:
- * @ctxt: a Relax-NG parser context
- * @grammar: the grammar
- *
- * Applies the 4.17. combine rule for all the start
- * element of a given grammar.
- */
-static void
-xmlRelaxNGCombineStart(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGGrammarPtr grammar)
-{
- xmlRelaxNGDefinePtr starts;
- xmlChar *combine;
- int choiceOrInterleave = -1;
- int missing = 0;
- xmlRelaxNGDefinePtr cur;
-
- starts = grammar->start;
- if ((starts == NULL) || (starts->next == NULL))
- return;
- cur = starts;
- while (cur != NULL) {
- if ((cur->node == NULL) || (cur->node->parent == NULL) ||
- (!xmlStrEqual(cur->node->parent->name, BAD_CAST "start"))) {
- combine = NULL;
- xmlRngPErr(ctxt, cur->node, XML_RNGP_START_MISSING,
- "Internal error: start element not found\n", NULL,
- NULL);
- } else {
- combine = xmlGetProp(cur->node->parent, BAD_CAST "combine");
- }
-
- if (combine != NULL) {
- if (xmlStrEqual(combine, BAD_CAST "choice")) {
- if (choiceOrInterleave == -1)
- choiceOrInterleave = 1;
- else if (choiceOrInterleave == 0) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_START_CHOICE_AND_INTERLEAVE,
- "<start> use both 'choice' and 'interleave'\n",
- NULL, NULL);
- }
- } else if (xmlStrEqual(combine, BAD_CAST "interleave")) {
- if (choiceOrInterleave == -1)
- choiceOrInterleave = 0;
- else if (choiceOrInterleave == 1) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_START_CHOICE_AND_INTERLEAVE,
- "<start> use both 'choice' and 'interleave'\n",
- NULL, NULL);
- }
- } else {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_UNKNOWN_COMBINE,
- "<start> uses unknown combine value '%s''\n",
- combine, NULL);
- }
- xmlFree(combine);
- } else {
- if (missing == 0)
- missing = 1;
- else {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_NEED_COMBINE,
- "Some <start> element miss the combine attribute\n",
- NULL, NULL);
- }
- }
-
- cur = cur->next;
- }
-#ifdef DEBUG
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGCombineStart(): merging <start>: %d\n",
- choiceOrInterleave);
-#endif
- if (choiceOrInterleave == -1)
- choiceOrInterleave = 0;
- cur = xmlRelaxNGNewDefine(ctxt, starts->node);
- if (cur == NULL)
- return;
- if (choiceOrInterleave == 0)
- cur->type = XML_RELAXNG_INTERLEAVE;
- else
- cur->type = XML_RELAXNG_CHOICE;
- cur->content = grammar->start;
- grammar->start = cur;
- if (choiceOrInterleave == 0) {
- if (ctxt->interleaves == NULL)
- ctxt->interleaves = xmlHashCreate(10);
- if (ctxt->interleaves == NULL) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
- "Failed to create interleaves hash table\n", NULL,
- NULL);
- } else {
- char tmpname[32];
-
- snprintf(tmpname, 32, "interleave%d", ctxt->nbInterleaves++);
- if (xmlHashAddEntry(ctxt->interleaves, BAD_CAST tmpname, cur) <
- 0) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_INTERLEAVE_CREATE_FAILED,
- "Failed to add %s to hash table\n",
- (const xmlChar *) tmpname, NULL);
- }
- }
- }
-}
-
-/**
- * xmlRelaxNGCheckCycles:
- * @ctxt: a Relax-NG parser context
- * @nodes: grammar children nodes
- * @depth: the counter
- *
- * Check for cycles.
- *
- * Returns 0 if check passed, and -1 in case of error
- */
-static int
-xmlRelaxNGCheckCycles(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDefinePtr cur, int depth)
-{
- int ret = 0;
-
- while ((ret == 0) && (cur != NULL)) {
- if ((cur->type == XML_RELAXNG_REF) ||
- (cur->type == XML_RELAXNG_PARENTREF)) {
- if (cur->depth == -1) {
- cur->depth = depth;
- ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth);
- cur->depth = -2;
- } else if (depth == cur->depth) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_CYCLE,
- "Detected a cycle in %s references\n",
- cur->name, NULL);
- return (-1);
- }
- } else if (cur->type == XML_RELAXNG_ELEMENT) {
- ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth + 1);
- } else {
- ret = xmlRelaxNGCheckCycles(ctxt, cur->content, depth);
- }
- cur = cur->next;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGTryUnlink:
- * @ctxt: a Relax-NG parser context
- * @cur: the definition to unlink
- * @parent: the parent definition
- * @prev: the previous sibling definition
- *
- * Try to unlink a definition. If not possble make it a NOOP
- *
- * Returns the new prev definition
- */
-static xmlRelaxNGDefinePtr
-xmlRelaxNGTryUnlink(xmlRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlRelaxNGDefinePtr cur,
- xmlRelaxNGDefinePtr parent, xmlRelaxNGDefinePtr prev)
-{
- if (prev != NULL) {
- prev->next = cur->next;
- } else {
- if (parent != NULL) {
- if (parent->content == cur)
- parent->content = cur->next;
- else if (parent->attrs == cur)
- parent->attrs = cur->next;
- else if (parent->nameClass == cur)
- parent->nameClass = cur->next;
- } else {
- cur->type = XML_RELAXNG_NOOP;
- prev = cur;
- }
- }
- return (prev);
-}
-
-/**
- * xmlRelaxNGSimplify:
- * @ctxt: a Relax-NG parser context
- * @nodes: grammar children nodes
- *
- * Check for simplification of empty and notAllowed
- */
-static void
-xmlRelaxNGSimplify(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDefinePtr cur, xmlRelaxNGDefinePtr parent)
-{
- xmlRelaxNGDefinePtr prev = NULL;
-
- while (cur != NULL) {
- if ((cur->type == XML_RELAXNG_REF) ||
- (cur->type == XML_RELAXNG_PARENTREF)) {
- if (cur->depth != -3) {
- cur->depth = -3;
- xmlRelaxNGSimplify(ctxt, cur->content, cur);
- }
- } else if (cur->type == XML_RELAXNG_NOT_ALLOWED) {
- cur->parent = parent;
- if ((parent != NULL) &&
- ((parent->type == XML_RELAXNG_ATTRIBUTE) ||
- (parent->type == XML_RELAXNG_LIST) ||
- (parent->type == XML_RELAXNG_GROUP) ||
- (parent->type == XML_RELAXNG_INTERLEAVE) ||
- (parent->type == XML_RELAXNG_ONEORMORE) ||
- (parent->type == XML_RELAXNG_ZEROORMORE))) {
- parent->type = XML_RELAXNG_NOT_ALLOWED;
- break;
- }
- if ((parent != NULL) && (parent->type == XML_RELAXNG_CHOICE)) {
- prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
- } else
- prev = cur;
- } else if (cur->type == XML_RELAXNG_EMPTY) {
- cur->parent = parent;
- if ((parent != NULL) &&
- ((parent->type == XML_RELAXNG_ONEORMORE) ||
- (parent->type == XML_RELAXNG_ZEROORMORE))) {
- parent->type = XML_RELAXNG_EMPTY;
- break;
- }
- if ((parent != NULL) &&
- ((parent->type == XML_RELAXNG_GROUP) ||
- (parent->type == XML_RELAXNG_INTERLEAVE))) {
- prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
- } else
- prev = cur;
- } else {
- cur->parent = parent;
- if (cur->content != NULL)
- xmlRelaxNGSimplify(ctxt, cur->content, cur);
- if ((cur->type != XML_RELAXNG_VALUE) && (cur->attrs != NULL))
- xmlRelaxNGSimplify(ctxt, cur->attrs, cur);
- if (cur->nameClass != NULL)
- xmlRelaxNGSimplify(ctxt, cur->nameClass, cur);
- /*
- * On Elements, try to move attribute only generating rules on
- * the attrs rules.
- */
- if (cur->type == XML_RELAXNG_ELEMENT) {
- int attronly;
- xmlRelaxNGDefinePtr tmp, pre;
-
- while (cur->content != NULL) {
- attronly =
- xmlRelaxNGGenerateAttributes(ctxt, cur->content);
- if (attronly == 1) {
- /*
- * migrate cur->content to attrs
- */
- tmp = cur->content;
- cur->content = tmp->next;
- tmp->next = cur->attrs;
- cur->attrs = tmp;
- } else {
- /*
- * cur->content can generate elements or text
- */
- break;
- }
- }
- pre = cur->content;
- while ((pre != NULL) && (pre->next != NULL)) {
- tmp = pre->next;
- attronly = xmlRelaxNGGenerateAttributes(ctxt, tmp);
- if (attronly == 1) {
- /*
- * migrate tmp to attrs
- */
- pre->next = tmp->next;
- tmp->next = cur->attrs;
- cur->attrs = tmp;
- } else {
- pre = tmp;
- }
- }
- }
- /*
- * This may result in a simplification
- */
- if ((cur->type == XML_RELAXNG_GROUP) ||
- (cur->type == XML_RELAXNG_INTERLEAVE)) {
- if (cur->content == NULL)
- cur->type = XML_RELAXNG_EMPTY;
- else if (cur->content->next == NULL) {
- if ((parent == NULL) && (prev == NULL)) {
- cur->type = XML_RELAXNG_NOOP;
- } else if (prev == NULL) {
- parent->content = cur->content;
- cur->content->next = cur->next;
- cur = cur->content;
- } else {
- cur->content->next = cur->next;
- prev->next = cur->content;
- cur = cur->content;
- }
- }
- }
- /*
- * the current node may have been transformed back
- */
- if ((cur->type == XML_RELAXNG_EXCEPT) &&
- (cur->content != NULL) &&
- (cur->content->type == XML_RELAXNG_NOT_ALLOWED)) {
- prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
- } else if (cur->type == XML_RELAXNG_NOT_ALLOWED) {
- if ((parent != NULL) &&
- ((parent->type == XML_RELAXNG_ATTRIBUTE) ||
- (parent->type == XML_RELAXNG_LIST) ||
- (parent->type == XML_RELAXNG_GROUP) ||
- (parent->type == XML_RELAXNG_INTERLEAVE) ||
- (parent->type == XML_RELAXNG_ONEORMORE) ||
- (parent->type == XML_RELAXNG_ZEROORMORE))) {
- parent->type = XML_RELAXNG_NOT_ALLOWED;
- break;
- }
- if ((parent != NULL) &&
- (parent->type == XML_RELAXNG_CHOICE)) {
- prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
- } else
- prev = cur;
- } else if (cur->type == XML_RELAXNG_EMPTY) {
- if ((parent != NULL) &&
- ((parent->type == XML_RELAXNG_ONEORMORE) ||
- (parent->type == XML_RELAXNG_ZEROORMORE))) {
- parent->type = XML_RELAXNG_EMPTY;
- break;
- }
- if ((parent != NULL) &&
- ((parent->type == XML_RELAXNG_GROUP) ||
- (parent->type == XML_RELAXNG_INTERLEAVE) ||
- (parent->type == XML_RELAXNG_CHOICE))) {
- prev = xmlRelaxNGTryUnlink(ctxt, cur, parent, prev);
- } else
- prev = cur;
- } else {
- prev = cur;
- }
- }
- cur = cur->next;
- }
-}
-
-/**
- * xmlRelaxNGGroupContentType:
- * @ct1: the first content type
- * @ct2: the second content type
- *
- * Try to group 2 content types
- *
- * Returns the content type
- */
-static xmlRelaxNGContentType
-xmlRelaxNGGroupContentType(xmlRelaxNGContentType ct1,
- xmlRelaxNGContentType ct2)
-{
- if ((ct1 == XML_RELAXNG_CONTENT_ERROR) ||
- (ct2 == XML_RELAXNG_CONTENT_ERROR))
- return (XML_RELAXNG_CONTENT_ERROR);
- if (ct1 == XML_RELAXNG_CONTENT_EMPTY)
- return (ct2);
- if (ct2 == XML_RELAXNG_CONTENT_EMPTY)
- return (ct1);
- if ((ct1 == XML_RELAXNG_CONTENT_COMPLEX) &&
- (ct2 == XML_RELAXNG_CONTENT_COMPLEX))
- return (XML_RELAXNG_CONTENT_COMPLEX);
- return (XML_RELAXNG_CONTENT_ERROR);
-}
-
-/**
- * xmlRelaxNGMaxContentType:
- * @ct1: the first content type
- * @ct2: the second content type
- *
- * Compute the max content-type
- *
- * Returns the content type
- */
-static xmlRelaxNGContentType
-xmlRelaxNGMaxContentType(xmlRelaxNGContentType ct1,
- xmlRelaxNGContentType ct2)
-{
- if ((ct1 == XML_RELAXNG_CONTENT_ERROR) ||
- (ct2 == XML_RELAXNG_CONTENT_ERROR))
- return (XML_RELAXNG_CONTENT_ERROR);
- if ((ct1 == XML_RELAXNG_CONTENT_SIMPLE) ||
- (ct2 == XML_RELAXNG_CONTENT_SIMPLE))
- return (XML_RELAXNG_CONTENT_SIMPLE);
- if ((ct1 == XML_RELAXNG_CONTENT_COMPLEX) ||
- (ct2 == XML_RELAXNG_CONTENT_COMPLEX))
- return (XML_RELAXNG_CONTENT_COMPLEX);
- return (XML_RELAXNG_CONTENT_EMPTY);
-}
-
-/**
- * xmlRelaxNGCheckRules:
- * @ctxt: a Relax-NG parser context
- * @cur: the current definition
- * @flags: some accumulated flags
- * @ptype: the parent type
- *
- * Check for rules in section 7.1 and 7.2
- *
- * Returns the content type of @cur
- */
-static xmlRelaxNGContentType
-xmlRelaxNGCheckRules(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGDefinePtr cur, int flags,
- xmlRelaxNGType ptype)
-{
- int nflags;
- xmlRelaxNGContentType ret, tmp, val = XML_RELAXNG_CONTENT_EMPTY;
-
- while (cur != NULL) {
- ret = XML_RELAXNG_CONTENT_EMPTY;
- if ((cur->type == XML_RELAXNG_REF) ||
- (cur->type == XML_RELAXNG_PARENTREF)) {
- /*
- * This should actually be caught by list//element(ref) at the
- * element boundaries, c.f. Bug #159968 local refs are dropped
- * in step 4.19.
- */
-#if 0
- if (flags & XML_RELAXNG_IN_LIST) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_REF,
- "Found forbidden pattern list//ref\n", NULL,
- NULL);
- }
-#endif
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_REF,
- "Found forbidden pattern data/except//ref\n",
- NULL, NULL);
- }
- if (cur->content == NULL) {
- if (cur->type == XML_RELAXNG_PARENTREF)
- xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_NO_DEF,
- "Internal found no define for parent refs\n",
- NULL, NULL);
- else
- xmlRngPErr(ctxt, cur->node, XML_RNGP_REF_NO_DEF,
- "Internal found no define for ref %s\n",
- (cur->name ? cur->name: BAD_CAST "null"), NULL);
- }
- if (cur->depth > -4) {
- cur->depth = -4;
- ret = xmlRelaxNGCheckRules(ctxt, cur->content,
- flags, cur->type);
- cur->depth = ret - 15;
- } else if (cur->depth == -4) {
- ret = XML_RELAXNG_CONTENT_COMPLEX;
- } else {
- ret = (xmlRelaxNGContentType) (cur->depth + 15);
- }
- } else if (cur->type == XML_RELAXNG_ELEMENT) {
- /*
- * The 7.3 Attribute derivation rule for groups is plugged there
- */
- xmlRelaxNGCheckGroupAttrs(ctxt, cur);
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ELEM,
- "Found forbidden pattern data/except//element(ref)\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_LIST) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_ELEM,
- "Found forbidden pattern list//element(ref)\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ELEM,
- "Found forbidden pattern attribute//element(ref)\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ELEM,
- "Found forbidden pattern attribute//element(ref)\n",
- NULL, NULL);
- }
- /*
- * reset since in the simple form elements are only child
- * of grammar/define
- */
- nflags = 0;
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->attrs, nflags, cur->type);
- if (ret != XML_RELAXNG_CONTENT_EMPTY) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_ELEM_CONTENT_EMPTY,
- "Element %s attributes have a content type error\n",
- cur->name, NULL);
- }
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
- cur->type);
- if (ret == XML_RELAXNG_CONTENT_ERROR) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_ELEM_CONTENT_ERROR,
- "Element %s has a content type error\n",
- cur->name, NULL);
- } else {
- ret = XML_RELAXNG_CONTENT_COMPLEX;
- }
- } else if (cur->type == XML_RELAXNG_ATTRIBUTE) {
- if (flags & XML_RELAXNG_IN_ATTRIBUTE) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ATTR_ATTR,
- "Found forbidden pattern attribute//attribute\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_LIST) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_ATTR,
- "Found forbidden pattern list//attribute\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_OOMGROUP) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ONEMORE_GROUP_ATTR,
- "Found forbidden pattern oneOrMore//group//attribute\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_OOMINTERLEAVE) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_ONEMORE_INTERLEAVE_ATTR,
- "Found forbidden pattern oneOrMore//interleave//attribute\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ATTR,
- "Found forbidden pattern data/except//attribute\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_ATTR,
- "Found forbidden pattern start//attribute\n",
- NULL, NULL);
- }
- if ((!(flags & XML_RELAXNG_IN_ONEORMORE))
- && (cur->name == NULL)) {
- if (cur->ns == NULL) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_ANYNAME_ATTR_ANCESTOR,
- "Found anyName attribute without oneOrMore ancestor\n",
- NULL, NULL);
- } else {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_NSNAME_ATTR_ANCESTOR,
- "Found nsName attribute without oneOrMore ancestor\n",
- NULL, NULL);
- }
- }
- nflags = flags | XML_RELAXNG_IN_ATTRIBUTE;
- xmlRelaxNGCheckRules(ctxt, cur->content, nflags, cur->type);
- ret = XML_RELAXNG_CONTENT_EMPTY;
- } else if ((cur->type == XML_RELAXNG_ONEORMORE) ||
- (cur->type == XML_RELAXNG_ZEROORMORE)) {
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_ONEMORE,
- "Found forbidden pattern data/except//oneOrMore\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_ONEMORE,
- "Found forbidden pattern start//oneOrMore\n",
- NULL, NULL);
- }
- nflags = flags | XML_RELAXNG_IN_ONEORMORE;
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
- cur->type);
- ret = xmlRelaxNGGroupContentType(ret, ret);
- } else if (cur->type == XML_RELAXNG_LIST) {
- if (flags & XML_RELAXNG_IN_LIST) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_LIST,
- "Found forbidden pattern list//list\n", NULL,
- NULL);
- }
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_LIST,
- "Found forbidden pattern data/except//list\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_LIST,
- "Found forbidden pattern start//list\n", NULL,
- NULL);
- }
- nflags = flags | XML_RELAXNG_IN_LIST;
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
- cur->type);
- } else if (cur->type == XML_RELAXNG_GROUP) {
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_GROUP,
- "Found forbidden pattern data/except//group\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_GROUP,
- "Found forbidden pattern start//group\n", NULL,
- NULL);
- }
- if (flags & XML_RELAXNG_IN_ONEORMORE)
- nflags = flags | XML_RELAXNG_IN_OOMGROUP;
- else
- nflags = flags;
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
- cur->type);
- /*
- * The 7.3 Attribute derivation rule for groups is plugged there
- */
- xmlRelaxNGCheckGroupAttrs(ctxt, cur);
- } else if (cur->type == XML_RELAXNG_INTERLEAVE) {
- if (flags & XML_RELAXNG_IN_LIST) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_INTERLEAVE,
- "Found forbidden pattern list//interleave\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE,
- "Found forbidden pattern data/except//interleave\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_INTERLEAVE,
- "Found forbidden pattern start//interleave\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_ONEORMORE)
- nflags = flags | XML_RELAXNG_IN_OOMINTERLEAVE;
- else
- nflags = flags;
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
- cur->type);
- } else if (cur->type == XML_RELAXNG_EXCEPT) {
- if ((cur->parent != NULL) &&
- (cur->parent->type == XML_RELAXNG_DATATYPE))
- nflags = flags | XML_RELAXNG_IN_DATAEXCEPT;
- else
- nflags = flags;
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->content, nflags,
- cur->type);
- } else if (cur->type == XML_RELAXNG_DATATYPE) {
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_DATA,
- "Found forbidden pattern start//data\n", NULL,
- NULL);
- }
- xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
- ret = XML_RELAXNG_CONTENT_SIMPLE;
- } else if (cur->type == XML_RELAXNG_VALUE) {
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_VALUE,
- "Found forbidden pattern start//value\n", NULL,
- NULL);
- }
- xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
- ret = XML_RELAXNG_CONTENT_SIMPLE;
- } else if (cur->type == XML_RELAXNG_TEXT) {
- if (flags & XML_RELAXNG_IN_LIST) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_LIST_TEXT,
- "Found forbidden pattern list//text\n", NULL,
- NULL);
- }
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_TEXT,
- "Found forbidden pattern data/except//text\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_TEXT,
- "Found forbidden pattern start//text\n", NULL,
- NULL);
- }
- ret = XML_RELAXNG_CONTENT_COMPLEX;
- } else if (cur->type == XML_RELAXNG_EMPTY) {
- if (flags & XML_RELAXNG_IN_DATAEXCEPT) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_DATA_EXCEPT_EMPTY,
- "Found forbidden pattern data/except//empty\n",
- NULL, NULL);
- }
- if (flags & XML_RELAXNG_IN_START) {
- xmlRngPErr(ctxt, cur->node, XML_RNGP_PAT_START_EMPTY,
- "Found forbidden pattern start//empty\n", NULL,
- NULL);
- }
- ret = XML_RELAXNG_CONTENT_EMPTY;
- } else if (cur->type == XML_RELAXNG_CHOICE) {
- xmlRelaxNGCheckChoiceDeterminism(ctxt, cur);
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
- } else {
- ret =
- xmlRelaxNGCheckRules(ctxt, cur->content, flags, cur->type);
- }
- cur = cur->next;
- if (ptype == XML_RELAXNG_GROUP) {
- val = xmlRelaxNGGroupContentType(val, ret);
- } else if (ptype == XML_RELAXNG_INTERLEAVE) {
- /*
- * TODO: scan complain that tmp is never used, seems on purpose
- * need double-checking
- */
- tmp = xmlRelaxNGGroupContentType(val, ret);
- if (tmp != XML_RELAXNG_CONTENT_ERROR)
- tmp = xmlRelaxNGMaxContentType(val, ret);
- } else if (ptype == XML_RELAXNG_CHOICE) {
- val = xmlRelaxNGMaxContentType(val, ret);
- } else if (ptype == XML_RELAXNG_LIST) {
- val = XML_RELAXNG_CONTENT_SIMPLE;
- } else if (ptype == XML_RELAXNG_EXCEPT) {
- if (ret == XML_RELAXNG_CONTENT_ERROR)
- val = XML_RELAXNG_CONTENT_ERROR;
- else
- val = XML_RELAXNG_CONTENT_SIMPLE;
- } else {
- val = xmlRelaxNGGroupContentType(val, ret);
- }
-
- }
- return (val);
-}
-
-/**
- * xmlRelaxNGParseGrammar:
- * @ctxt: a Relax-NG parser context
- * @nodes: grammar children nodes
- *
- * parse a Relax-NG <grammar> node
- *
- * Returns the internal xmlRelaxNGGrammarPtr built or
- * NULL in case of error
- */
-static xmlRelaxNGGrammarPtr
-xmlRelaxNGParseGrammar(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr nodes)
-{
- xmlRelaxNGGrammarPtr ret, tmp, old;
-
-#ifdef DEBUG_GRAMMAR
- xmlGenericError(xmlGenericErrorContext, "Parsing a new grammar\n");
-#endif
-
- ret = xmlRelaxNGNewGrammar(ctxt);
- if (ret == NULL)
- return (NULL);
-
- /*
- * Link the new grammar in the tree
- */
- ret->parent = ctxt->grammar;
- if (ctxt->grammar != NULL) {
- tmp = ctxt->grammar->children;
- if (tmp == NULL) {
- ctxt->grammar->children = ret;
- } else {
- while (tmp->next != NULL)
- tmp = tmp->next;
- tmp->next = ret;
- }
- }
-
- old = ctxt->grammar;
- ctxt->grammar = ret;
- xmlRelaxNGParseGrammarContent(ctxt, nodes);
- ctxt->grammar = ret;
- if (ctxt->grammar == NULL) {
- xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_CONTENT,
- "Failed to parse <grammar> content\n", NULL, NULL);
- } else if (ctxt->grammar->start == NULL) {
- xmlRngPErr(ctxt, nodes, XML_RNGP_GRAMMAR_NO_START,
- "Element <grammar> has no <start>\n", NULL, NULL);
- }
-
- /*
- * Apply 4.17 merging rules to defines and starts
- */
- xmlRelaxNGCombineStart(ctxt, ret);
- if (ret->defs != NULL) {
- xmlHashScan(ret->defs, (xmlHashScanner) xmlRelaxNGCheckCombine,
- ctxt);
- }
-
- /*
- * link together defines and refs in this grammar
- */
- if (ret->refs != NULL) {
- xmlHashScan(ret->refs, (xmlHashScanner) xmlRelaxNGCheckReference,
- ctxt);
- }
-
-
- /* @@@@ */
-
- ctxt->grammar = old;
- return (ret);
-}
-
-/**
- * xmlRelaxNGParseDocument:
- * @ctxt: a Relax-NG parser context
- * @node: the root node of the RelaxNG schema
- *
- * parse a Relax-NG definition resource and build an internal
- * xmlRelaxNG struture which can be used to validate instances.
- *
- * Returns the internal XML RelaxNG structure built or
- * NULL in case of error
- */
-static xmlRelaxNGPtr
-xmlRelaxNGParseDocument(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlRelaxNGPtr schema = NULL;
- const xmlChar *olddefine;
- xmlRelaxNGGrammarPtr old;
-
- if ((ctxt == NULL) || (node == NULL))
- return (NULL);
-
- schema = xmlRelaxNGNewRelaxNG(ctxt);
- if (schema == NULL)
- return (NULL);
-
- olddefine = ctxt->define;
- ctxt->define = NULL;
- if (IS_RELAXNG(node, "grammar")) {
- schema->topgrammar = xmlRelaxNGParseGrammar(ctxt, node->children);
- if (schema->topgrammar == NULL) {
- xmlRelaxNGFree(schema);
- return (NULL);
- }
- } else {
- xmlRelaxNGGrammarPtr tmp, ret;
-
- schema->topgrammar = ret = xmlRelaxNGNewGrammar(ctxt);
- if (schema->topgrammar == NULL) {
- xmlRelaxNGFree(schema);
- return (NULL);
- }
- /*
- * Link the new grammar in the tree
- */
- ret->parent = ctxt->grammar;
- if (ctxt->grammar != NULL) {
- tmp = ctxt->grammar->children;
- if (tmp == NULL) {
- ctxt->grammar->children = ret;
- } else {
- while (tmp->next != NULL)
- tmp = tmp->next;
- tmp->next = ret;
- }
- }
- old = ctxt->grammar;
- ctxt->grammar = ret;
- xmlRelaxNGParseStart(ctxt, node);
- if (old != NULL)
- ctxt->grammar = old;
- }
- ctxt->define = olddefine;
- if (schema->topgrammar->start != NULL) {
- xmlRelaxNGCheckCycles(ctxt, schema->topgrammar->start, 0);
- if ((ctxt->flags & XML_RELAXNG_IN_EXTERNALREF) == 0) {
- xmlRelaxNGSimplify(ctxt, schema->topgrammar->start, NULL);
- while ((schema->topgrammar->start != NULL) &&
- (schema->topgrammar->start->type == XML_RELAXNG_NOOP) &&
- (schema->topgrammar->start->next != NULL))
- schema->topgrammar->start =
- schema->topgrammar->start->content;
- xmlRelaxNGCheckRules(ctxt, schema->topgrammar->start,
- XML_RELAXNG_IN_START, XML_RELAXNG_NOOP);
- }
- }
-#ifdef DEBUG
- if (schema == NULL)
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGParseDocument() failed\n");
-#endif
-
- return (schema);
-}
-
-/************************************************************************
- * *
- * Reading RelaxNGs *
- * *
- ************************************************************************/
-
-/**
- * xmlRelaxNGNewParserCtxt:
- * @URL: the location of the schema
- *
- * Create an XML RelaxNGs parse context for that file/resource expected
- * to contain an XML RelaxNGs file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlRelaxNGParserCtxtPtr
-xmlRelaxNGNewParserCtxt(const char *URL)
-{
- xmlRelaxNGParserCtxtPtr ret;
-
- if (URL == NULL)
- return (NULL);
-
- ret =
- (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
- if (ret == NULL) {
- xmlRngPErrMemory(NULL, "building parser\n");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
- ret->URL = xmlStrdup((const xmlChar *) URL);
- ret->error = xmlGenericError;
- ret->userData = xmlGenericErrorContext;
- return (ret);
-}
-
-/**
- * xmlRelaxNGNewMemParserCtxt:
- * @buffer: a pointer to a char array containing the schemas
- * @size: the size of the array
- *
- * Create an XML RelaxNGs parse context for that memory buffer expected
- * to contain an XML RelaxNGs file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlRelaxNGParserCtxtPtr
-xmlRelaxNGNewMemParserCtxt(const char *buffer, int size)
-{
- xmlRelaxNGParserCtxtPtr ret;
-
- if ((buffer == NULL) || (size <= 0))
- return (NULL);
-
- ret =
- (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
- if (ret == NULL) {
- xmlRngPErrMemory(NULL, "building parser\n");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
- ret->buffer = buffer;
- ret->size = size;
- ret->error = xmlGenericError;
- ret->userData = xmlGenericErrorContext;
- return (ret);
-}
-
-/**
- * xmlRelaxNGNewDocParserCtxt:
- * @doc: a preparsed document tree
- *
- * Create an XML RelaxNGs parser context for that document.
- * Note: since the process of compiling a RelaxNG schemas modifies the
- * document, the @doc parameter is duplicated internally.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlRelaxNGParserCtxtPtr
-xmlRelaxNGNewDocParserCtxt(xmlDocPtr doc)
-{
- xmlRelaxNGParserCtxtPtr ret;
- xmlDocPtr copy;
-
- if (doc == NULL)
- return (NULL);
- copy = xmlCopyDoc(doc, 1);
- if (copy == NULL)
- return (NULL);
-
- ret =
- (xmlRelaxNGParserCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGParserCtxt));
- if (ret == NULL) {
- xmlRngPErrMemory(NULL, "building parser\n");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGParserCtxt));
- ret->document = copy;
- ret->freedoc = 1;
- ret->userData = xmlGenericErrorContext;
- return (ret);
-}
-
-/**
- * xmlRelaxNGFreeParserCtxt:
- * @ctxt: the schema parser context
- *
- * Free the resources associated to the schema parser context
- */
-void
-xmlRelaxNGFreeParserCtxt(xmlRelaxNGParserCtxtPtr ctxt)
-{
- if (ctxt == NULL)
- return;
- if (ctxt->URL != NULL)
- xmlFree(ctxt->URL);
- if (ctxt->doc != NULL)
- xmlRelaxNGFreeDocument(ctxt->doc);
- if (ctxt->interleaves != NULL)
- xmlHashFree(ctxt->interleaves, NULL);
- if (ctxt->documents != NULL)
- xmlRelaxNGFreeDocumentList(ctxt->documents);
- if (ctxt->includes != NULL)
- xmlRelaxNGFreeIncludeList(ctxt->includes);
- if (ctxt->docTab != NULL)
- xmlFree(ctxt->docTab);
- if (ctxt->incTab != NULL)
- xmlFree(ctxt->incTab);
- if (ctxt->defTab != NULL) {
- int i;
-
- for (i = 0; i < ctxt->defNr; i++)
- xmlRelaxNGFreeDefine(ctxt->defTab[i]);
- xmlFree(ctxt->defTab);
- }
- if ((ctxt->document != NULL) && (ctxt->freedoc))
- xmlFreeDoc(ctxt->document);
- xmlFree(ctxt);
-}
-
-/**
- * xmlRelaxNGNormExtSpace:
- * @value: a value
- *
- * Removes the leading and ending spaces of the value
- * The string is modified "in situ"
- */
-static void
-xmlRelaxNGNormExtSpace(xmlChar * value)
-{
- xmlChar *start = value;
- xmlChar *cur = value;
-
- if (value == NULL)
- return;
-
- while (IS_BLANK_CH(*cur))
- cur++;
- if (cur == start) {
- do {
- while ((*cur != 0) && (!IS_BLANK_CH(*cur)))
- cur++;
- if (*cur == 0)
- return;
- start = cur;
- while (IS_BLANK_CH(*cur))
- cur++;
- if (*cur == 0) {
- *start = 0;
- return;
- }
- } while (1);
- } else {
- do {
- while ((*cur != 0) && (!IS_BLANK_CH(*cur)))
- *start++ = *cur++;
- if (*cur == 0) {
- *start = 0;
- return;
- }
- /* don't try to normalize the inner spaces */
- while (IS_BLANK_CH(*cur))
- cur++;
- if (*cur == 0) {
- *start = 0;
- return;
- }
- *start++ = *cur++;
- } while (1);
- }
-}
-
-/**
- * xmlRelaxNGCleanupAttributes:
- * @ctxt: a Relax-NG parser context
- * @node: a Relax-NG node
- *
- * Check all the attributes on the given node
- */
-static void
-xmlRelaxNGCleanupAttributes(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlAttrPtr cur, next;
-
- cur = node->properties;
- while (cur != NULL) {
- next = cur->next;
- if ((cur->ns == NULL) ||
- (xmlStrEqual(cur->ns->href, xmlRelaxNGNs))) {
- if (xmlStrEqual(cur->name, BAD_CAST "name")) {
- if ((!xmlStrEqual(node->name, BAD_CAST "element")) &&
- (!xmlStrEqual(node->name, BAD_CAST "attribute")) &&
- (!xmlStrEqual(node->name, BAD_CAST "ref")) &&
- (!xmlStrEqual(node->name, BAD_CAST "parentRef")) &&
- (!xmlStrEqual(node->name, BAD_CAST "param")) &&
- (!xmlStrEqual(node->name, BAD_CAST "define"))) {
- xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
- "Attribute %s is not allowed on %s\n",
- cur->name, node->name);
- }
- } else if (xmlStrEqual(cur->name, BAD_CAST "type")) {
- if ((!xmlStrEqual(node->name, BAD_CAST "value")) &&
- (!xmlStrEqual(node->name, BAD_CAST "data"))) {
- xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
- "Attribute %s is not allowed on %s\n",
- cur->name, node->name);
- }
- } else if (xmlStrEqual(cur->name, BAD_CAST "href")) {
- if ((!xmlStrEqual(node->name, BAD_CAST "externalRef")) &&
- (!xmlStrEqual(node->name, BAD_CAST "include"))) {
- xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
- "Attribute %s is not allowed on %s\n",
- cur->name, node->name);
- }
- } else if (xmlStrEqual(cur->name, BAD_CAST "combine")) {
- if ((!xmlStrEqual(node->name, BAD_CAST "start")) &&
- (!xmlStrEqual(node->name, BAD_CAST "define"))) {
- xmlRngPErr(ctxt, node, XML_RNGP_FORBIDDEN_ATTRIBUTE,
- "Attribute %s is not allowed on %s\n",
- cur->name, node->name);
- }
- } else if (xmlStrEqual(cur->name, BAD_CAST "datatypeLibrary")) {
- xmlChar *val;
- xmlURIPtr uri;
-
- val = xmlNodeListGetString(node->doc, cur->children, 1);
- if (val != NULL) {
- if (val[0] != 0) {
- uri = xmlParseURI((const char *) val);
- if (uri == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_INVALID_URI,
- "Attribute %s contains invalid URI %s\n",
- cur->name, val);
- } else {
- if (uri->scheme == NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_URI_NOT_ABSOLUTE,
- "Attribute %s URI %s is not absolute\n",
- cur->name, val);
- }
- if (uri->fragment != NULL) {
- xmlRngPErr(ctxt, node, XML_RNGP_URI_FRAGMENT,
- "Attribute %s URI %s has a fragment ID\n",
- cur->name, val);
- }
- xmlFreeURI(uri);
- }
- }
- xmlFree(val);
- }
- } else if (!xmlStrEqual(cur->name, BAD_CAST "ns")) {
- xmlRngPErr(ctxt, node, XML_RNGP_UNKNOWN_ATTRIBUTE,
- "Unknown attribute %s on %s\n", cur->name,
- node->name);
- }
- }
- cur = next;
- }
-}
-
-/**
- * xmlRelaxNGCleanupTree:
- * @ctxt: a Relax-NG parser context
- * @root: an xmlNodePtr subtree
- *
- * Cleanup the subtree from unwanted nodes for parsing, resolve
- * Include and externalRef lookups.
- */
-static void
-xmlRelaxNGCleanupTree(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr root)
-{
- xmlNodePtr cur, delete;
-
- delete = NULL;
- cur = root;
- while (cur != NULL) {
- if (delete != NULL) {
- xmlUnlinkNode(delete);
- xmlFreeNode(delete);
- delete = NULL;
- }
- if (cur->type == XML_ELEMENT_NODE) {
- /*
- * Simplification 4.1. Annotations
- */
- if ((cur->ns == NULL) ||
- (!xmlStrEqual(cur->ns->href, xmlRelaxNGNs))) {
- if ((cur->parent != NULL) &&
- (cur->parent->type == XML_ELEMENT_NODE) &&
- ((xmlStrEqual(cur->parent->name, BAD_CAST "name")) ||
- (xmlStrEqual(cur->parent->name, BAD_CAST "value")) ||
- (xmlStrEqual(cur->parent->name, BAD_CAST "param")))) {
- xmlRngPErr(ctxt, cur, XML_RNGP_FOREIGN_ELEMENT,
- "element %s doesn't allow foreign elements\n",
- cur->parent->name, NULL);
- }
- delete = cur;
- goto skip_children;
- } else {
- xmlRelaxNGCleanupAttributes(ctxt, cur);
- if (xmlStrEqual(cur->name, BAD_CAST "externalRef")) {
- xmlChar *href, *ns, *base, *URL;
- xmlRelaxNGDocumentPtr docu;
- xmlNodePtr tmp;
- xmlURIPtr uri;
-
- ns = xmlGetProp(cur, BAD_CAST "ns");
- if (ns == NULL) {
- tmp = cur->parent;
- while ((tmp != NULL) &&
- (tmp->type == XML_ELEMENT_NODE)) {
- ns = xmlGetProp(tmp, BAD_CAST "ns");
- if (ns != NULL)
- break;
- tmp = tmp->parent;
- }
- }
- href = xmlGetProp(cur, BAD_CAST "href");
- if (href == NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_MISSING_HREF,
- "xmlRelaxNGParse: externalRef has no href attribute\n",
- NULL, NULL);
- if (ns != NULL)
- xmlFree(ns);
- delete = cur;
- goto skip_children;
- }
- uri = xmlParseURI((const char *) href);
- if (uri == NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
- "Incorrect URI for externalRef %s\n",
- href, NULL);
- if (ns != NULL)
- xmlFree(ns);
- if (href != NULL)
- xmlFree(href);
- delete = cur;
- goto skip_children;
- }
- if (uri->fragment != NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
- "Fragment forbidden in URI for externalRef %s\n",
- href, NULL);
- if (ns != NULL)
- xmlFree(ns);
- xmlFreeURI(uri);
- if (href != NULL)
- xmlFree(href);
- delete = cur;
- goto skip_children;
- }
- xmlFreeURI(uri);
- base = xmlNodeGetBase(cur->doc, cur);
- URL = xmlBuildURI(href, base);
- if (URL == NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
- "Failed to compute URL for externalRef %s\n",
- href, NULL);
- if (ns != NULL)
- xmlFree(ns);
- if (href != NULL)
- xmlFree(href);
- if (base != NULL)
- xmlFree(base);
- delete = cur;
- goto skip_children;
- }
- if (href != NULL)
- xmlFree(href);
- if (base != NULL)
- xmlFree(base);
- docu = xmlRelaxNGLoadExternalRef(ctxt, URL, ns);
- if (docu == NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_EXTERNAL_REF_FAILURE,
- "Failed to load externalRef %s\n", URL,
- NULL);
- if (ns != NULL)
- xmlFree(ns);
- xmlFree(URL);
- delete = cur;
- goto skip_children;
- }
- if (ns != NULL)
- xmlFree(ns);
- xmlFree(URL);
- cur->psvi = docu;
- } else if (xmlStrEqual(cur->name, BAD_CAST "include")) {
- xmlChar *href, *ns, *base, *URL;
- xmlRelaxNGIncludePtr incl;
- xmlNodePtr tmp;
-
- href = xmlGetProp(cur, BAD_CAST "href");
- if (href == NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_MISSING_HREF,
- "xmlRelaxNGParse: include has no href attribute\n",
- NULL, NULL);
- delete = cur;
- goto skip_children;
- }
- base = xmlNodeGetBase(cur->doc, cur);
- URL = xmlBuildURI(href, base);
- if (URL == NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
- "Failed to compute URL for include %s\n",
- href, NULL);
- if (href != NULL)
- xmlFree(href);
- if (base != NULL)
- xmlFree(base);
- delete = cur;
- goto skip_children;
- }
- if (href != NULL)
- xmlFree(href);
- if (base != NULL)
- xmlFree(base);
- ns = xmlGetProp(cur, BAD_CAST "ns");
- if (ns == NULL) {
- tmp = cur->parent;
- while ((tmp != NULL) &&
- (tmp->type == XML_ELEMENT_NODE)) {
- ns = xmlGetProp(tmp, BAD_CAST "ns");
- if (ns != NULL)
- break;
- tmp = tmp->parent;
- }
- }
- incl = xmlRelaxNGLoadInclude(ctxt, URL, cur, ns);
- if (ns != NULL)
- xmlFree(ns);
- if (incl == NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_INCLUDE_FAILURE,
- "Failed to load include %s\n", URL,
- NULL);
- xmlFree(URL);
- delete = cur;
- goto skip_children;
- }
- xmlFree(URL);
- cur->psvi = incl;
- } else if ((xmlStrEqual(cur->name, BAD_CAST "element")) ||
- (xmlStrEqual(cur->name, BAD_CAST "attribute")))
- {
- xmlChar *name, *ns;
- xmlNodePtr text = NULL;
-
- /*
- * Simplification 4.8. name attribute of element
- * and attribute elements
- */
- name = xmlGetProp(cur, BAD_CAST "name");
- if (name != NULL) {
- if (cur->children == NULL) {
- text =
- xmlNewChild(cur, cur->ns, BAD_CAST "name",
- name);
- } else {
- xmlNodePtr node;
-
- node = xmlNewDocNode(cur->doc, cur->ns,
- BAD_CAST "name", NULL);
- if (node != NULL) {
- xmlAddPrevSibling(cur->children, node);
- text = xmlNewText(name);
- xmlAddChild(node, text);
- text = node;
- }
- }
- if (text == NULL) {
- xmlRngPErr(ctxt, cur, XML_RNGP_CREATE_FAILURE,
- "Failed to create a name %s element\n",
- name, NULL);
- }
- xmlUnsetProp(cur, BAD_CAST "name");
- xmlFree(name);
- ns = xmlGetProp(cur, BAD_CAST "ns");
- if (ns != NULL) {
- if (text != NULL) {
- xmlSetProp(text, BAD_CAST "ns", ns);
- /* xmlUnsetProp(cur, BAD_CAST "ns"); */
- }
- xmlFree(ns);
- } else if (xmlStrEqual(cur->name,
- BAD_CAST "attribute")) {
- xmlSetProp(text, BAD_CAST "ns", BAD_CAST "");
- }
- }
- } else if ((xmlStrEqual(cur->name, BAD_CAST "name")) ||
- (xmlStrEqual(cur->name, BAD_CAST "nsName")) ||
- (xmlStrEqual(cur->name, BAD_CAST "value"))) {
- /*
- * Simplification 4.8. name attribute of element
- * and attribute elements
- */
- if (xmlHasProp(cur, BAD_CAST "ns") == NULL) {
- xmlNodePtr node;
- xmlChar *ns = NULL;
-
- node = cur->parent;
- while ((node != NULL) &&
- (node->type == XML_ELEMENT_NODE)) {
- ns = xmlGetProp(node, BAD_CAST "ns");
- if (ns != NULL) {
- break;
- }
- node = node->parent;
- }
- if (ns == NULL) {
- xmlSetProp(cur, BAD_CAST "ns", BAD_CAST "");
- } else {
- xmlSetProp(cur, BAD_CAST "ns", ns);
- xmlFree(ns);
- }
- }
- if (xmlStrEqual(cur->name, BAD_CAST "name")) {
- xmlChar *name, *local, *prefix;
-
- /*
- * Simplification: 4.10. QNames
- */
- name = xmlNodeGetContent(cur);
- if (name != NULL) {
- local = xmlSplitQName2(name, &prefix);
- if (local != NULL) {
- xmlNsPtr ns;
-
- ns = xmlSearchNs(cur->doc, cur, prefix);
- if (ns == NULL) {
- xmlRngPErr(ctxt, cur,
- XML_RNGP_PREFIX_UNDEFINED,
- "xmlRelaxNGParse: no namespace for prefix %s\n",
- prefix, NULL);
- } else {
- xmlSetProp(cur, BAD_CAST "ns",
- ns->href);
- xmlNodeSetContent(cur, local);
- }
- xmlFree(local);
- xmlFree(prefix);
- }
- xmlFree(name);
- }
- }
- /*
- * 4.16
- */
- if (xmlStrEqual(cur->name, BAD_CAST "nsName")) {
- if (ctxt->flags & XML_RELAXNG_IN_NSEXCEPT) {
- xmlRngPErr(ctxt, cur,
- XML_RNGP_PAT_NSNAME_EXCEPT_NSNAME,
- "Found nsName/except//nsName forbidden construct\n",
- NULL, NULL);
- }
- }
- } else if ((xmlStrEqual(cur->name, BAD_CAST "except")) &&
- (cur != root)) {
- int oldflags = ctxt->flags;
-
- /*
- * 4.16
- */
- if ((cur->parent != NULL) &&
- (xmlStrEqual
- (cur->parent->name, BAD_CAST "anyName"))) {
- ctxt->flags |= XML_RELAXNG_IN_ANYEXCEPT;
- xmlRelaxNGCleanupTree(ctxt, cur);
- ctxt->flags = oldflags;
- goto skip_children;
- } else if ((cur->parent != NULL) &&
- (xmlStrEqual
- (cur->parent->name, BAD_CAST "nsName"))) {
- ctxt->flags |= XML_RELAXNG_IN_NSEXCEPT;
- xmlRelaxNGCleanupTree(ctxt, cur);
- ctxt->flags = oldflags;
- goto skip_children;
- }
- } else if (xmlStrEqual(cur->name, BAD_CAST "anyName")) {
- /*
- * 4.16
- */
- if (ctxt->flags & XML_RELAXNG_IN_ANYEXCEPT) {
- xmlRngPErr(ctxt, cur,
- XML_RNGP_PAT_ANYNAME_EXCEPT_ANYNAME,
- "Found anyName/except//anyName forbidden construct\n",
- NULL, NULL);
- } else if (ctxt->flags & XML_RELAXNG_IN_NSEXCEPT) {
- xmlRngPErr(ctxt, cur,
- XML_RNGP_PAT_NSNAME_EXCEPT_ANYNAME,
- "Found nsName/except//anyName forbidden construct\n",
- NULL, NULL);
- }
- }
- /*
- * This is not an else since "include" is transformed
- * into a div
- */
- if (xmlStrEqual(cur->name, BAD_CAST "div")) {
- xmlChar *ns;
- xmlNodePtr child, ins, tmp;
-
- /*
- * implements rule 4.11
- */
-
- ns = xmlGetProp(cur, BAD_CAST "ns");
-
- child = cur->children;
- ins = cur;
- while (child != NULL) {
- if (ns != NULL) {
- if (!xmlHasProp(child, BAD_CAST "ns")) {
- xmlSetProp(child, BAD_CAST "ns", ns);
- }
- }
- tmp = child->next;
- xmlUnlinkNode(child);
- ins = xmlAddNextSibling(ins, child);
- child = tmp;
- }
- if (ns != NULL)
- xmlFree(ns);
- /*
- * Since we are about to delete cur, if its nsDef is non-NULL we
- * need to preserve it (it contains the ns definitions for the
- * children we just moved). We'll just stick it on to the end
- * of cur->parent's list, since it's never going to be re-serialized
- * (bug 143738).
- */
- if ((cur->nsDef != NULL) && (cur->parent != NULL)) {
- xmlNsPtr parDef = (xmlNsPtr)&cur->parent->nsDef;
- while (parDef->next != NULL)
- parDef = parDef->next;
- parDef->next = cur->nsDef;
- cur->nsDef = NULL;
- }
- delete = cur;
- goto skip_children;
- }
- }
- }
- /*
- * Simplification 4.2 whitespaces
- */
- else if ((cur->type == XML_TEXT_NODE) ||
- (cur->type == XML_CDATA_SECTION_NODE)) {
- if (IS_BLANK_NODE(cur)) {
- if ((cur->parent != NULL) &&
- (cur->parent->type == XML_ELEMENT_NODE)) {
- if ((!xmlStrEqual(cur->parent->name, BAD_CAST "value"))
- &&
- (!xmlStrEqual
- (cur->parent->name, BAD_CAST "param")))
- delete = cur;
- } else {
- delete = cur;
- goto skip_children;
- }
- }
- } else {
- delete = cur;
- goto skip_children;
- }
-
- /*
- * Skip to next node
- */
- if (cur->children != NULL) {
- if ((cur->children->type != XML_ENTITY_DECL) &&
- (cur->children->type != XML_ENTITY_REF_NODE) &&
- (cur->children->type != XML_ENTITY_NODE)) {
- cur = cur->children;
- continue;
- }
- }
- skip_children:
- if (cur->next != NULL) {
- cur = cur->next;
- continue;
- }
-
- do {
- cur = cur->parent;
- if (cur == NULL)
- break;
- if (cur == root) {
- cur = NULL;
- break;
- }
- if (cur->next != NULL) {
- cur = cur->next;
- break;
- }
- } while (cur != NULL);
- }
- if (delete != NULL) {
- xmlUnlinkNode(delete);
- xmlFreeNode(delete);
- delete = NULL;
- }
-}
-
-/**
- * xmlRelaxNGCleanupDoc:
- * @ctxt: a Relax-NG parser context
- * @doc: an xmldocPtr document pointer
- *
- * Cleanup the document from unwanted nodes for parsing, resolve
- * Include and externalRef lookups.
- *
- * Returns the cleaned up document or NULL in case of error
- */
-static xmlDocPtr
-xmlRelaxNGCleanupDoc(xmlRelaxNGParserCtxtPtr ctxt, xmlDocPtr doc)
-{
- xmlNodePtr root;
-
- /*
- * Extract the root
- */
- root = xmlDocGetRootElement(doc);
- if (root == NULL) {
- xmlRngPErr(ctxt, (xmlNodePtr) doc, XML_RNGP_EMPTY, "xmlRelaxNGParse: %s is empty\n",
- ctxt->URL, NULL);
- return (NULL);
- }
- xmlRelaxNGCleanupTree(ctxt, root);
- return (doc);
-}
-
-/**
- * xmlRelaxNGParse:
- * @ctxt: a Relax-NG parser context
- *
- * parse a schema definition resource and build an internal
- * XML Shema struture which can be used to validate instances.
- *
- * Returns the internal XML RelaxNG structure built from the resource or
- * NULL in case of error
- */
-xmlRelaxNGPtr
-xmlRelaxNGParse(xmlRelaxNGParserCtxtPtr ctxt)
-{
- xmlRelaxNGPtr ret = NULL;
- xmlDocPtr doc;
- xmlNodePtr root;
-
- xmlRelaxNGInitTypes();
-
- if (ctxt == NULL)
- return (NULL);
-
- /*
- * First step is to parse the input document into an DOM/Infoset
- */
- if (ctxt->URL != NULL) {
- doc = xmlReadFile((const char *) ctxt->URL,NULL,0);
- if (doc == NULL) {
- xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
- "xmlRelaxNGParse: could not load %s\n", ctxt->URL,
- NULL);
- return (NULL);
- }
- } else if (ctxt->buffer != NULL) {
- doc = xmlReadMemory(ctxt->buffer, ctxt->size,NULL,NULL,0);
- if (doc == NULL) {
- xmlRngPErr(ctxt, NULL, XML_RNGP_PARSE_ERROR,
- "xmlRelaxNGParse: could not parse schemas\n", NULL,
- NULL);
- return (NULL);
- }
- doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
- ctxt->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
- } else if (ctxt->document != NULL) {
- doc = ctxt->document;
- } else {
- xmlRngPErr(ctxt, NULL, XML_RNGP_EMPTY,
- "xmlRelaxNGParse: nothing to parse\n", NULL, NULL);
- return (NULL);
- }
- ctxt->document = doc;
-
- /*
- * Some preprocessing of the document content
- */
- doc = xmlRelaxNGCleanupDoc(ctxt, doc);
- if (doc == NULL) {
- xmlFreeDoc(ctxt->document);
- ctxt->document = NULL;
- return (NULL);
- }
-
- /*
- * Then do the parsing for good
- */
- root = xmlDocGetRootElement(doc);
- if (root == NULL) {
- xmlRngPErr(ctxt, (xmlNodePtr) doc,
- XML_RNGP_EMPTY, "xmlRelaxNGParse: %s is empty\n",
- (ctxt->URL ? ctxt->URL : BAD_CAST "schemas"), NULL);
-
- xmlFreeDoc(ctxt->document);
- ctxt->document = NULL;
- return (NULL);
- }
- ret = xmlRelaxNGParseDocument(ctxt, root);
- if (ret == NULL) {
- xmlFreeDoc(ctxt->document);
- ctxt->document = NULL;
- return (NULL);
- }
-
- /*
- * Check the ref/defines links
- */
- /*
- * try to preprocess interleaves
- */
- if (ctxt->interleaves != NULL) {
- xmlHashScan(ctxt->interleaves,
- (xmlHashScanner) xmlRelaxNGComputeInterleaves, ctxt);
- }
-
- /*
- * if there was a parsing error return NULL
- */
- if (ctxt->nbErrors > 0) {
- xmlRelaxNGFree(ret);
- ctxt->document = NULL;
- xmlFreeDoc(doc);
- return (NULL);
- }
-
- /*
- * try to compile (parts of) the schemas
- */
- if ((ret->topgrammar != NULL) && (ret->topgrammar->start != NULL)) {
- if (ret->topgrammar->start->type != XML_RELAXNG_START) {
- xmlRelaxNGDefinePtr def;
-
- def = xmlRelaxNGNewDefine(ctxt, NULL);
- if (def != NULL) {
- def->type = XML_RELAXNG_START;
- def->content = ret->topgrammar->start;
- ret->topgrammar->start = def;
- }
- }
- xmlRelaxNGTryCompile(ctxt, ret->topgrammar->start);
- }
-
- /*
- * Transfer the pointer for cleanup at the schema level.
- */
- ret->doc = doc;
- ctxt->document = NULL;
- ret->documents = ctxt->documents;
- ctxt->documents = NULL;
-
- ret->includes = ctxt->includes;
- ctxt->includes = NULL;
- ret->defNr = ctxt->defNr;
- ret->defTab = ctxt->defTab;
- ctxt->defTab = NULL;
- if (ctxt->idref == 1)
- ret->idref = 1;
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGSetParserErrors:
- * @ctxt: a Relax-NG validation context
- * @err: the error callback
- * @warn: the warning callback
- * @ctx: contextual data for the callbacks
- *
- * Set the callback functions used to handle errors for a validation context
- */
-void
-xmlRelaxNGSetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGValidityErrorFunc err,
- xmlRelaxNGValidityWarningFunc warn, void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->error = err;
- ctxt->warning = warn;
- ctxt->serror = NULL;
- ctxt->userData = ctx;
-}
-
-/**
- * xmlRelaxNGGetParserErrors:
- * @ctxt: a Relax-NG validation context
- * @err: the error callback result
- * @warn: the warning callback result
- * @ctx: contextual data for the callbacks result
- *
- * Get the callback information used to handle errors for a validation context
- *
- * Returns -1 in case of failure, 0 otherwise.
- */
-int
-xmlRelaxNGGetParserErrors(xmlRelaxNGParserCtxtPtr ctxt,
- xmlRelaxNGValidityErrorFunc * err,
- xmlRelaxNGValidityWarningFunc * warn, void **ctx)
-{
- if (ctxt == NULL)
- return (-1);
- if (err != NULL)
- *err = ctxt->error;
- if (warn != NULL)
- *warn = ctxt->warning;
- if (ctx != NULL)
- *ctx = ctxt->userData;
- return (0);
-}
-
-/**
- * xmlRelaxNGSetParserStructuredErrors:
- * @ctxt: a Relax-NG parser context
- * @serror: the error callback
- * @ctx: contextual data for the callbacks
- *
- * Set the callback functions used to handle errors for a parsing context
- */
-void
-xmlRelaxNGSetParserStructuredErrors(xmlRelaxNGParserCtxtPtr ctxt,
- xmlStructuredErrorFunc serror,
- void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->serror = serror;
- ctxt->error = NULL;
- ctxt->warning = NULL;
- ctxt->userData = ctx;
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-
-/************************************************************************
- * *
- * Dump back a compiled form *
- * *
- ************************************************************************/
-static void xmlRelaxNGDumpDefine(FILE * output,
- xmlRelaxNGDefinePtr define);
-
-/**
- * xmlRelaxNGDumpDefines:
- * @output: the file output
- * @defines: a list of define structures
- *
- * Dump a RelaxNG structure back
- */
-static void
-xmlRelaxNGDumpDefines(FILE * output, xmlRelaxNGDefinePtr defines)
-{
- while (defines != NULL) {
- xmlRelaxNGDumpDefine(output, defines);
- defines = defines->next;
- }
-}
-
-/**
- * xmlRelaxNGDumpDefine:
- * @output: the file output
- * @define: a define structure
- *
- * Dump a RelaxNG structure back
- */
-static void
-xmlRelaxNGDumpDefine(FILE * output, xmlRelaxNGDefinePtr define)
-{
- if (define == NULL)
- return;
- switch (define->type) {
- case XML_RELAXNG_EMPTY:
- fprintf(output, "<empty/>\n");
- break;
- case XML_RELAXNG_NOT_ALLOWED:
- fprintf(output, "<notAllowed/>\n");
- break;
- case XML_RELAXNG_TEXT:
- fprintf(output, "<text/>\n");
- break;
- case XML_RELAXNG_ELEMENT:
- fprintf(output, "<element>\n");
- if (define->name != NULL) {
- fprintf(output, "<name");
- if (define->ns != NULL)
- fprintf(output, " ns=\"%s\"", define->ns);
- fprintf(output, ">%s</name>\n", define->name);
- }
- xmlRelaxNGDumpDefines(output, define->attrs);
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</element>\n");
- break;
- case XML_RELAXNG_LIST:
- fprintf(output, "<list>\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</list>\n");
- break;
- case XML_RELAXNG_ONEORMORE:
- fprintf(output, "<oneOrMore>\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</oneOrMore>\n");
- break;
- case XML_RELAXNG_ZEROORMORE:
- fprintf(output, "<zeroOrMore>\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</zeroOrMore>\n");
- break;
- case XML_RELAXNG_CHOICE:
- fprintf(output, "<choice>\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</choice>\n");
- break;
- case XML_RELAXNG_GROUP:
- fprintf(output, "<group>\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</group>\n");
- break;
- case XML_RELAXNG_INTERLEAVE:
- fprintf(output, "<interleave>\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</interleave>\n");
- break;
- case XML_RELAXNG_OPTIONAL:
- fprintf(output, "<optional>\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</optional>\n");
- break;
- case XML_RELAXNG_ATTRIBUTE:
- fprintf(output, "<attribute>\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</attribute>\n");
- break;
- case XML_RELAXNG_DEF:
- fprintf(output, "<define");
- if (define->name != NULL)
- fprintf(output, " name=\"%s\"", define->name);
- fprintf(output, ">\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</define>\n");
- break;
- case XML_RELAXNG_REF:
- fprintf(output, "<ref");
- if (define->name != NULL)
- fprintf(output, " name=\"%s\"", define->name);
- fprintf(output, ">\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</ref>\n");
- break;
- case XML_RELAXNG_PARENTREF:
- fprintf(output, "<parentRef");
- if (define->name != NULL)
- fprintf(output, " name=\"%s\"", define->name);
- fprintf(output, ">\n");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</parentRef>\n");
- break;
- case XML_RELAXNG_EXTERNALREF:
- fprintf(output, "<externalRef>");
- xmlRelaxNGDumpDefines(output, define->content);
- fprintf(output, "</externalRef>\n");
- break;
- case XML_RELAXNG_DATATYPE:
- case XML_RELAXNG_VALUE:
- TODO break;
- case XML_RELAXNG_START:
- case XML_RELAXNG_EXCEPT:
- case XML_RELAXNG_PARAM:
- TODO break;
- case XML_RELAXNG_NOOP:
- xmlRelaxNGDumpDefines(output, define->content);
- break;
- }
-}
-
-/**
- * xmlRelaxNGDumpGrammar:
- * @output: the file output
- * @grammar: a grammar structure
- * @top: is this a top grammar
- *
- * Dump a RelaxNG structure back
- */
-static void
-xmlRelaxNGDumpGrammar(FILE * output, xmlRelaxNGGrammarPtr grammar, int top)
-{
- if (grammar == NULL)
- return;
-
- fprintf(output, "<grammar");
- if (top)
- fprintf(output, " xmlns=\"http://relaxng.org/ns/structure/1.0\"");
- switch (grammar->combine) {
- case XML_RELAXNG_COMBINE_UNDEFINED:
- break;
- case XML_RELAXNG_COMBINE_CHOICE:
- fprintf(output, " combine=\"choice\"");
- break;
- case XML_RELAXNG_COMBINE_INTERLEAVE:
- fprintf(output, " combine=\"interleave\"");
- break;
- default:
- fprintf(output, " <!-- invalid combine value -->");
- }
- fprintf(output, ">\n");
- if (grammar->start == NULL) {
- fprintf(output, " <!-- grammar had no start -->");
- } else {
- fprintf(output, "<start>\n");
- xmlRelaxNGDumpDefine(output, grammar->start);
- fprintf(output, "</start>\n");
- }
- /* TODO ? Dump the defines ? */
- fprintf(output, "</grammar>\n");
-}
-
-/**
- * xmlRelaxNGDump:
- * @output: the file output
- * @schema: a schema structure
- *
- * Dump a RelaxNG structure back
- */
-void
-xmlRelaxNGDump(FILE * output, xmlRelaxNGPtr schema)
-{
- if (output == NULL)
- return;
- if (schema == NULL) {
- fprintf(output, "RelaxNG empty or failed to compile\n");
- return;
- }
- fprintf(output, "RelaxNG: ");
- if (schema->doc == NULL) {
- fprintf(output, "no document\n");
- } else if (schema->doc->URL != NULL) {
- fprintf(output, "%s\n", schema->doc->URL);
- } else {
- fprintf(output, "\n");
- }
- if (schema->topgrammar == NULL) {
- fprintf(output, "RelaxNG has no top grammar\n");
- return;
- }
- xmlRelaxNGDumpGrammar(output, schema->topgrammar, 1);
-}
-
-/**
- * xmlRelaxNGDumpTree:
- * @output: the file output
- * @schema: a schema structure
- *
- * Dump the transformed RelaxNG tree.
- */
-void
-xmlRelaxNGDumpTree(FILE * output, xmlRelaxNGPtr schema)
-{
- if (output == NULL)
- return;
- if (schema == NULL) {
- fprintf(output, "RelaxNG empty or failed to compile\n");
- return;
- }
- if (schema->doc == NULL) {
- fprintf(output, "no document\n");
- } else {
- xmlDocDump(output, schema->doc);
- }
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- * *
- * Validation of compiled content *
- * *
- ************************************************************************/
-static int xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define);
-
-/**
- * xmlRelaxNGValidateCompiledCallback:
- * @exec: the regular expression instance
- * @token: the token which matched
- * @transdata: callback data, the define for the subelement if available
- @ @inputdata: callback data, the Relax NG validation context
- *
- * Handle the callback and if needed validate the element children.
- */
-static void
-xmlRelaxNGValidateCompiledCallback(xmlRegExecCtxtPtr exec ATTRIBUTE_UNUSED,
- const xmlChar * token,
- void *transdata, void *inputdata)
-{
- xmlRelaxNGValidCtxtPtr ctxt = (xmlRelaxNGValidCtxtPtr) inputdata;
- xmlRelaxNGDefinePtr define = (xmlRelaxNGDefinePtr) transdata;
- int ret;
-
-#ifdef DEBUG_COMPILE
- xmlGenericError(xmlGenericErrorContext,
- "Compiled callback for: '%s'\n", token);
-#endif
- if (ctxt == NULL) {
- fprintf(stderr, "callback on %s missing context\n", token);
- return;
- }
- if (define == NULL) {
- if (token[0] == '#')
- return;
- fprintf(stderr, "callback on %s missing define\n", token);
- if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
- ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
- return;
- }
- if ((ctxt == NULL) || (define == NULL)) {
- fprintf(stderr, "callback on %s missing info\n", token);
- if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
- ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
- return;
- } else if (define->type != XML_RELAXNG_ELEMENT) {
- fprintf(stderr, "callback on %s define is not element\n", token);
- if (ctxt->errNo == XML_RELAXNG_OK)
- ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
- return;
- }
- ret = xmlRelaxNGValidateDefinition(ctxt, define);
- if (ret != 0)
- ctxt->perr = ret;
-}
-
-/**
- * xmlRelaxNGValidateCompiledContent:
- * @ctxt: the RelaxNG validation context
- * @regexp: the regular expression as compiled
- * @content: list of children to test against the regexp
- *
- * Validate the content model of an element or start using the regexp
- *
- * Returns 0 in case of success, -1 in case of error.
- */
-static int
-xmlRelaxNGValidateCompiledContent(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRegexpPtr regexp, xmlNodePtr content)
-{
- xmlRegExecCtxtPtr exec;
- xmlNodePtr cur;
- int ret = 0;
- int oldperr;
-
- if ((ctxt == NULL) || (regexp == NULL))
- return (-1);
- oldperr = ctxt->perr;
- exec = xmlRegNewExecCtxt(regexp,
- xmlRelaxNGValidateCompiledCallback, ctxt);
- ctxt->perr = 0;
- cur = content;
- while (cur != NULL) {
- ctxt->state->seq = cur;
- switch (cur->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- if (xmlIsBlankNode(cur))
- break;
- ret = xmlRegExecPushString(exec, BAD_CAST "#text", ctxt);
- if (ret < 0) {
- VALID_ERR2(XML_RELAXNG_ERR_TEXTWRONG,
- cur->parent->name);
- }
- break;
- case XML_ELEMENT_NODE:
- if (cur->ns != NULL) {
- ret = xmlRegExecPushString2(exec, cur->name,
- cur->ns->href, ctxt);
- } else {
- ret = xmlRegExecPushString(exec, cur->name, ctxt);
- }
- if (ret < 0) {
- VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, cur->name);
- }
- break;
- default:
- break;
- }
- if (ret < 0)
- break;
- /*
- * Switch to next element
- */
- cur = cur->next;
- }
- ret = xmlRegExecPushString(exec, NULL, NULL);
- if (ret == 1) {
- ret = 0;
- ctxt->state->seq = NULL;
- } else if (ret == 0) {
- /*
- * TODO: get some of the names needed to exit the current state of exec
- */
- VALID_ERR2(XML_RELAXNG_ERR_NOELEM, BAD_CAST "");
- ret = -1;
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
- xmlRelaxNGDumpValidError(ctxt);
- } else {
- ret = -1;
- }
- xmlRegFreeExecCtxt(exec);
- /*
- * There might be content model errors outside of the pure
- * regexp validation, e.g. for attribute values.
- */
- if ((ret == 0) && (ctxt->perr != 0)) {
- ret = ctxt->perr;
- }
- ctxt->perr = oldperr;
- return (ret);
-}
-
-/************************************************************************
- * *
- * Progressive validation of when possible *
- * *
- ************************************************************************/
-static int xmlRelaxNGValidateAttributeList(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr defines);
-static int xmlRelaxNGValidateElementEnd(xmlRelaxNGValidCtxtPtr ctxt,
- int dolog);
-static void xmlRelaxNGLogBestError(xmlRelaxNGValidCtxtPtr ctxt);
-
-/**
- * xmlRelaxNGElemPush:
- * @ctxt: the validation context
- * @exec: the regexp runtime for the new content model
- *
- * Push a new regexp for the current node content model on the stack
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-static int
-xmlRelaxNGElemPush(xmlRelaxNGValidCtxtPtr ctxt, xmlRegExecCtxtPtr exec)
-{
- if (ctxt->elemTab == NULL) {
- ctxt->elemMax = 10;
- ctxt->elemTab = (xmlRegExecCtxtPtr *) xmlMalloc(ctxt->elemMax *
- sizeof
- (xmlRegExecCtxtPtr));
- if (ctxt->elemTab == NULL) {
- xmlRngVErrMemory(ctxt, "validating\n");
- return (-1);
- }
- }
- if (ctxt->elemNr >= ctxt->elemMax) {
- ctxt->elemMax *= 2;
- ctxt->elemTab = (xmlRegExecCtxtPtr *) xmlRealloc(ctxt->elemTab,
- ctxt->elemMax *
- sizeof
- (xmlRegExecCtxtPtr));
- if (ctxt->elemTab == NULL) {
- xmlRngVErrMemory(ctxt, "validating\n");
- return (-1);
- }
- }
- ctxt->elemTab[ctxt->elemNr++] = exec;
- ctxt->elem = exec;
- return (0);
-}
-
-/**
- * xmlRelaxNGElemPop:
- * @ctxt: the validation context
- *
- * Pop the regexp of the current node content model from the stack
- *
- * Returns the exec or NULL if empty
- */
-static xmlRegExecCtxtPtr
-xmlRelaxNGElemPop(xmlRelaxNGValidCtxtPtr ctxt)
-{
- xmlRegExecCtxtPtr ret;
-
- if (ctxt->elemNr <= 0)
- return (NULL);
- ctxt->elemNr--;
- ret = ctxt->elemTab[ctxt->elemNr];
- ctxt->elemTab[ctxt->elemNr] = NULL;
- if (ctxt->elemNr > 0)
- ctxt->elem = ctxt->elemTab[ctxt->elemNr - 1];
- else
- ctxt->elem = NULL;
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateProgressiveCallback:
- * @exec: the regular expression instance
- * @token: the token which matched
- * @transdata: callback data, the define for the subelement if available
- @ @inputdata: callback data, the Relax NG validation context
- *
- * Handle the callback and if needed validate the element children.
- * some of the in/out informations are passed via the context in @inputdata.
- */
-static void
-xmlRelaxNGValidateProgressiveCallback(xmlRegExecCtxtPtr exec
- ATTRIBUTE_UNUSED,
- const xmlChar * token,
- void *transdata, void *inputdata)
-{
- xmlRelaxNGValidCtxtPtr ctxt = (xmlRelaxNGValidCtxtPtr) inputdata;
- xmlRelaxNGDefinePtr define = (xmlRelaxNGDefinePtr) transdata;
- xmlRelaxNGValidStatePtr state, oldstate;
- xmlNodePtr node;
- int ret = 0, oldflags;
-
-#ifdef DEBUG_PROGRESSIVE
- xmlGenericError(xmlGenericErrorContext,
- "Progressive callback for: '%s'\n", token);
-#endif
- if (ctxt == NULL) {
- fprintf(stderr, "callback on %s missing context\n", token);
- return;
- }
- node = ctxt->pnode;
- ctxt->pstate = 1;
- if (define == NULL) {
- if (token[0] == '#')
- return;
- fprintf(stderr, "callback on %s missing define\n", token);
- if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
- ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
- ctxt->pstate = -1;
- return;
- }
- if ((ctxt == NULL) || (define == NULL)) {
- fprintf(stderr, "callback on %s missing info\n", token);
- if ((ctxt != NULL) && (ctxt->errNo == XML_RELAXNG_OK))
- ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
- ctxt->pstate = -1;
- return;
- } else if (define->type != XML_RELAXNG_ELEMENT) {
- fprintf(stderr, "callback on %s define is not element\n", token);
- if (ctxt->errNo == XML_RELAXNG_OK)
- ctxt->errNo = XML_RELAXNG_ERR_INTERNAL;
- ctxt->pstate = -1;
- return;
- }
- if (node->type != XML_ELEMENT_NODE) {
- VALID_ERR(XML_RELAXNG_ERR_NOTELEM);
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
- xmlRelaxNGDumpValidError(ctxt);
- ctxt->pstate = -1;
- return;
- }
- if (define->contModel == NULL) {
- /*
- * this node cannot be validated in a streamable fashion
- */
-#ifdef DEBUG_PROGRESSIVE
- xmlGenericError(xmlGenericErrorContext,
- "Element '%s' validation is not streamable\n",
- token);
-#endif
- ctxt->pstate = 0;
- ctxt->pdef = define;
- return;
- }
- exec = xmlRegNewExecCtxt(define->contModel,
- xmlRelaxNGValidateProgressiveCallback, ctxt);
- if (exec == NULL) {
- ctxt->pstate = -1;
- return;
- }
- xmlRelaxNGElemPush(ctxt, exec);
-
- /*
- * Validate the attributes part of the content.
- */
- state = xmlRelaxNGNewValidState(ctxt, node);
- if (state == NULL) {
- ctxt->pstate = -1;
- return;
- }
- oldstate = ctxt->state;
- ctxt->state = state;
- if (define->attrs != NULL) {
- ret = xmlRelaxNGValidateAttributeList(ctxt, define->attrs);
- if (ret != 0) {
- ctxt->pstate = -1;
- VALID_ERR2(XML_RELAXNG_ERR_ATTRVALID, node->name);
- }
- }
- if (ctxt->state != NULL) {
- ctxt->state->seq = NULL;
- ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
- if (ret != 0) {
- ctxt->pstate = -1;
- }
- xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- } else if (ctxt->states != NULL) {
- int tmp = -1, i;
-
- oldflags = ctxt->flags;
-
- for (i = 0; i < ctxt->states->nbState; i++) {
- state = ctxt->states->tabState[i];
- ctxt->state = state;
- ctxt->state->seq = NULL;
-
- if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
- tmp = 0;
- break;
- }
- }
- if (tmp != 0) {
- /*
- * validation error, log the message for the "best" one
- */
- ctxt->flags |= FLAGS_IGNORABLE;
- xmlRelaxNGLogBestError(ctxt);
- }
- for (i = 0; i < ctxt->states->nbState; i++) {
- xmlRelaxNGFreeValidState(ctxt, ctxt->states->tabState[i]);
- }
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->states = NULL;
- if ((ret == 0) && (tmp == -1))
- ctxt->pstate = -1;
- ctxt->flags = oldflags;
- }
- if (ctxt->pstate == -1) {
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
- xmlRelaxNGDumpValidError(ctxt);
- }
- }
- ctxt->state = oldstate;
-}
-
-/**
- * xmlRelaxNGValidatePushElement:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- *
- * Push a new element start on the RelaxNG validation stack.
- *
- * returns 1 if no validation problem was found or 0 if validating the
- * element requires a full node, and -1 in case of error.
- */
-int
-xmlRelaxNGValidatePushElement(xmlRelaxNGValidCtxtPtr ctxt,
- xmlDocPtr doc ATTRIBUTE_UNUSED,
- xmlNodePtr elem)
-{
- int ret = 1;
-
- if ((ctxt == NULL) || (elem == NULL))
- return (-1);
-
-#ifdef DEBUG_PROGRESSIVE
- xmlGenericError(xmlGenericErrorContext, "PushElem %s\n", elem->name);
-#endif
- if (ctxt->elem == 0) {
- xmlRelaxNGPtr schema;
- xmlRelaxNGGrammarPtr grammar;
- xmlRegExecCtxtPtr exec;
- xmlRelaxNGDefinePtr define;
-
- schema = ctxt->schema;
- if (schema == NULL) {
- VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
- return (-1);
- }
- grammar = schema->topgrammar;
- if ((grammar == NULL) || (grammar->start == NULL)) {
- VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
- return (-1);
- }
- define = grammar->start;
- if (define->contModel == NULL) {
- ctxt->pdef = define;
- return (0);
- }
- exec = xmlRegNewExecCtxt(define->contModel,
- xmlRelaxNGValidateProgressiveCallback,
- ctxt);
- if (exec == NULL) {
- return (-1);
- }
- xmlRelaxNGElemPush(ctxt, exec);
- }
- ctxt->pnode = elem;
- ctxt->pstate = 0;
- if (elem->ns != NULL) {
- ret =
- xmlRegExecPushString2(ctxt->elem, elem->name, elem->ns->href,
- ctxt);
- } else {
- ret = xmlRegExecPushString(ctxt->elem, elem->name, ctxt);
- }
- if (ret < 0) {
- VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, elem->name);
- } else {
- if (ctxt->pstate == 0)
- ret = 0;
- else if (ctxt->pstate < 0)
- ret = -1;
- else
- ret = 1;
- }
-#ifdef DEBUG_PROGRESSIVE
- if (ret < 0)
- xmlGenericError(xmlGenericErrorContext, "PushElem %s failed\n",
- elem->name);
-#endif
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidatePushCData:
- * @ctxt: the RelaxNG validation context
- * @data: some character data read
- * @len: the length of the data
- *
- * check the CData parsed for validation in the current stack
- *
- * returns 1 if no validation problem was found or -1 otherwise
- */
-int
-xmlRelaxNGValidatePushCData(xmlRelaxNGValidCtxtPtr ctxt,
- const xmlChar * data, int len ATTRIBUTE_UNUSED)
-{
- int ret = 1;
-
- if ((ctxt == NULL) || (ctxt->elem == NULL) || (data == NULL))
- return (-1);
-
-#ifdef DEBUG_PROGRESSIVE
- xmlGenericError(xmlGenericErrorContext, "CDATA %s %d\n", data, len);
-#endif
-
- while (*data != 0) {
- if (!IS_BLANK_CH(*data))
- break;
- data++;
- }
- if (*data == 0)
- return (1);
-
- ret = xmlRegExecPushString(ctxt->elem, BAD_CAST "#text", ctxt);
- if (ret < 0) {
- VALID_ERR2(XML_RELAXNG_ERR_TEXTWRONG, BAD_CAST " TODO ");
-#ifdef DEBUG_PROGRESSIVE
- xmlGenericError(xmlGenericErrorContext, "CDATA failed\n");
-#endif
-
- return (-1);
- }
- return (1);
-}
-
-/**
- * xmlRelaxNGValidatePopElement:
- * @ctxt: the RelaxNG validation context
- * @doc: a document instance
- * @elem: an element instance
- *
- * Pop the element end from the RelaxNG validation stack.
- *
- * returns 1 if no validation problem was found or 0 otherwise
- */
-int
-xmlRelaxNGValidatePopElement(xmlRelaxNGValidCtxtPtr ctxt,
- xmlDocPtr doc ATTRIBUTE_UNUSED,
- xmlNodePtr elem)
-{
- int ret;
- xmlRegExecCtxtPtr exec;
-
- if ((ctxt == NULL) || (ctxt->elem == NULL) || (elem == NULL))
- return (-1);
-#ifdef DEBUG_PROGRESSIVE
- xmlGenericError(xmlGenericErrorContext, "PopElem %s\n", elem->name);
-#endif
- /*
- * verify that we reached a terminal state of the content model.
- */
- exec = xmlRelaxNGElemPop(ctxt);
- ret = xmlRegExecPushString(exec, NULL, NULL);
- if (ret == 0) {
- /*
- * TODO: get some of the names needed to exit the current state of exec
- */
- VALID_ERR2(XML_RELAXNG_ERR_NOELEM, BAD_CAST "");
- ret = -1;
- } else if (ret < 0) {
- ret = -1;
- } else {
- ret = 1;
- }
- xmlRegFreeExecCtxt(exec);
-#ifdef DEBUG_PROGRESSIVE
- if (ret < 0)
- xmlGenericError(xmlGenericErrorContext, "PopElem %s failed\n",
- elem->name);
-#endif
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateFullElement:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- *
- * Validate a full subtree when xmlRelaxNGValidatePushElement() returned
- * 0 and the content of the node has been expanded.
- *
- * returns 1 if no validation problem was found or -1 in case of error.
- */
-int
-xmlRelaxNGValidateFullElement(xmlRelaxNGValidCtxtPtr ctxt,
- xmlDocPtr doc ATTRIBUTE_UNUSED,
- xmlNodePtr elem)
-{
- int ret;
- xmlRelaxNGValidStatePtr state;
-
- if ((ctxt == NULL) || (ctxt->pdef == NULL) || (elem == NULL))
- return (-1);
-#ifdef DEBUG_PROGRESSIVE
- xmlGenericError(xmlGenericErrorContext, "FullElem %s\n", elem->name);
-#endif
- state = xmlRelaxNGNewValidState(ctxt, elem->parent);
- if (state == NULL) {
- return (-1);
- }
- state->seq = elem;
- ctxt->state = state;
- ctxt->errNo = XML_RELAXNG_OK;
- ret = xmlRelaxNGValidateDefinition(ctxt, ctxt->pdef);
- if ((ret != 0) || (ctxt->errNo != XML_RELAXNG_OK))
- ret = -1;
- else
- ret = 1;
- xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = NULL;
-#ifdef DEBUG_PROGRESSIVE
- if (ret < 0)
- xmlGenericError(xmlGenericErrorContext, "FullElem %s failed\n",
- elem->name);
-#endif
- return (ret);
-}
-
-/************************************************************************
- * *
- * Generic interpreted validation implementation *
- * *
- ************************************************************************/
-static int xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define);
-
-/**
- * xmlRelaxNGSkipIgnored:
- * @ctxt: a schema validation context
- * @node: the top node.
- *
- * Skip ignorable nodes in that context
- *
- * Returns the new sibling or NULL in case of error.
- */
-static xmlNodePtr
-xmlRelaxNGSkipIgnored(xmlRelaxNGValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlNodePtr node)
-{
- /*
- * TODO complete and handle entities
- */
- while ((node != NULL) &&
- ((node->type == XML_COMMENT_NODE) ||
- (node->type == XML_PI_NODE) ||
- (node->type == XML_XINCLUDE_START) ||
- (node->type == XML_XINCLUDE_END) ||
- (((node->type == XML_TEXT_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)) &&
- ((ctxt->flags & FLAGS_MIXED_CONTENT) ||
- (IS_BLANK_NODE(node)))))) {
- node = node->next;
- }
- return (node);
-}
-
-/**
- * xmlRelaxNGNormalize:
- * @ctxt: a schema validation context
- * @str: the string to normalize
- *
- * Implements the normalizeWhiteSpace( s ) function from
- * section 6.2.9 of the spec
- *
- * Returns the new string or NULL in case of error.
- */
-static xmlChar *
-xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt, const xmlChar * str)
-{
- xmlChar *ret, *p;
- const xmlChar *tmp;
- int len;
-
- if (str == NULL)
- return (NULL);
- tmp = str;
- while (*tmp != 0)
- tmp++;
- len = tmp - str;
-
- ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
- if (ret == NULL) {
- xmlRngVErrMemory(ctxt, "validating\n");
- return (NULL);
- }
- p = ret;
- while (IS_BLANK_CH(*str))
- str++;
- while (*str != 0) {
- if (IS_BLANK_CH(*str)) {
- while (IS_BLANK_CH(*str))
- str++;
- if (*str == 0)
- break;
- *p++ = ' ';
- } else
- *p++ = *str++;
- }
- *p = 0;
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateDatatype:
- * @ctxt: a Relax-NG validation context
- * @value: the string value
- * @type: the datatype definition
- * @node: the node
- *
- * Validate the given value against the dataype
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateDatatype(xmlRelaxNGValidCtxtPtr ctxt,
- const xmlChar * value,
- xmlRelaxNGDefinePtr define, xmlNodePtr node)
-{
- int ret, tmp;
- xmlRelaxNGTypeLibraryPtr lib;
- void *result = NULL;
- xmlRelaxNGDefinePtr cur;
-
- if ((define == NULL) || (define->data == NULL)) {
- return (-1);
- }
- lib = (xmlRelaxNGTypeLibraryPtr) define->data;
- if (lib->check != NULL) {
- if ((define->attrs != NULL) &&
- (define->attrs->type == XML_RELAXNG_PARAM)) {
- ret =
- lib->check(lib->data, define->name, value, &result, node);
- } else {
- ret = lib->check(lib->data, define->name, value, NULL, node);
- }
- } else
- ret = -1;
- if (ret < 0) {
- VALID_ERR2(XML_RELAXNG_ERR_TYPE, define->name);
- if ((result != NULL) && (lib != NULL) && (lib->freef != NULL))
- lib->freef(lib->data, result);
- return (-1);
- } else if (ret == 1) {
- ret = 0;
- } else if (ret == 2) {
- VALID_ERR2P(XML_RELAXNG_ERR_DUPID, value);
- } else {
- VALID_ERR3P(XML_RELAXNG_ERR_TYPEVAL, define->name, value);
- ret = -1;
- }
- cur = define->attrs;
- while ((ret == 0) && (cur != NULL) && (cur->type == XML_RELAXNG_PARAM)) {
- if (lib->facet != NULL) {
- tmp = lib->facet(lib->data, define->name, cur->name,
- cur->value, value, result);
- if (tmp != 0)
- ret = -1;
- }
- cur = cur->next;
- }
- if ((ret == 0) && (define->content != NULL)) {
- const xmlChar *oldvalue, *oldendvalue;
-
- oldvalue = ctxt->state->value;
- oldendvalue = ctxt->state->endvalue;
- ctxt->state->value = (xmlChar *) value;
- ctxt->state->endvalue = NULL;
- ret = xmlRelaxNGValidateValue(ctxt, define->content);
- ctxt->state->value = (xmlChar *) oldvalue;
- ctxt->state->endvalue = (xmlChar *) oldendvalue;
- }
- if ((result != NULL) && (lib != NULL) && (lib->freef != NULL))
- lib->freef(lib->data, result);
- return (ret);
-}
-
-/**
- * xmlRelaxNGNextValue:
- * @ctxt: a Relax-NG validation context
- *
- * Skip to the next value when validating within a list
- *
- * Returns 0 if the operation succeeded or an error code.
- */
-static int
-xmlRelaxNGNextValue(xmlRelaxNGValidCtxtPtr ctxt)
-{
- xmlChar *cur;
-
- cur = ctxt->state->value;
- if ((cur == NULL) || (ctxt->state->endvalue == NULL)) {
- ctxt->state->value = NULL;
- ctxt->state->endvalue = NULL;
- return (0);
- }
- while (*cur != 0)
- cur++;
- while ((cur != ctxt->state->endvalue) && (*cur == 0))
- cur++;
- if (cur == ctxt->state->endvalue)
- ctxt->state->value = NULL;
- else
- ctxt->state->value = cur;
- return (0);
-}
-
-/**
- * xmlRelaxNGValidateValueList:
- * @ctxt: a Relax-NG validation context
- * @defines: the list of definitions to verify
- *
- * Validate the given set of definitions for the current value
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateValueList(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr defines)
-{
- int ret = 0;
-
- while (defines != NULL) {
- ret = xmlRelaxNGValidateValue(ctxt, defines);
- if (ret != 0)
- break;
- defines = defines->next;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateValue:
- * @ctxt: a Relax-NG validation context
- * @define: the definition to verify
- *
- * Validate the given definition for the current value
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define)
-{
- int ret = 0, oldflags;
- xmlChar *value;
-
- value = ctxt->state->value;
- switch (define->type) {
- case XML_RELAXNG_EMPTY:{
- if ((value != NULL) && (value[0] != 0)) {
- int idx = 0;
-
- while (IS_BLANK_CH(value[idx]))
- idx++;
- if (value[idx] != 0)
- ret = -1;
- }
- break;
- }
- case XML_RELAXNG_TEXT:
- break;
- case XML_RELAXNG_VALUE:{
- if (!xmlStrEqual(value, define->value)) {
- if (define->name != NULL) {
- xmlRelaxNGTypeLibraryPtr lib;
-
- lib = (xmlRelaxNGTypeLibraryPtr) define->data;
- if ((lib != NULL) && (lib->comp != NULL)) {
- ret = lib->comp(lib->data, define->name,
- define->value, define->node,
- (void *) define->attrs,
- value, ctxt->state->node);
- } else
- ret = -1;
- if (ret < 0) {
- VALID_ERR2(XML_RELAXNG_ERR_TYPECMP,
- define->name);
- return (-1);
- } else if (ret == 1) {
- ret = 0;
- } else {
- ret = -1;
- }
- } else {
- xmlChar *nval, *nvalue;
-
- /*
- * TODO: trivial optimizations are possible by
- * computing at compile-time
- */
- nval = xmlRelaxNGNormalize(ctxt, define->value);
- nvalue = xmlRelaxNGNormalize(ctxt, value);
-
- if ((nval == NULL) || (nvalue == NULL) ||
- (!xmlStrEqual(nval, nvalue)))
- ret = -1;
- if (nval != NULL)
- xmlFree(nval);
- if (nvalue != NULL)
- xmlFree(nvalue);
- }
- }
- if (ret == 0)
- xmlRelaxNGNextValue(ctxt);
- break;
- }
- case XML_RELAXNG_DATATYPE:{
- ret = xmlRelaxNGValidateDatatype(ctxt, value, define,
- ctxt->state->seq);
- if (ret == 0)
- xmlRelaxNGNextValue(ctxt);
-
- break;
- }
- case XML_RELAXNG_CHOICE:{
- xmlRelaxNGDefinePtr list = define->content;
- xmlChar *oldvalue;
-
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
-
- oldvalue = ctxt->state->value;
- while (list != NULL) {
- ret = xmlRelaxNGValidateValue(ctxt, list);
- if (ret == 0) {
- break;
- }
- ctxt->state->value = oldvalue;
- list = list->next;
- }
- ctxt->flags = oldflags;
- if (ret != 0) {
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
- xmlRelaxNGDumpValidError(ctxt);
- } else {
- if (ctxt->errNr > 0)
- xmlRelaxNGPopErrors(ctxt, 0);
- }
- break;
- }
- case XML_RELAXNG_LIST:{
- xmlRelaxNGDefinePtr list = define->content;
- xmlChar *oldvalue, *oldend, *val, *cur;
-
-#ifdef DEBUG_LIST
- int nb_values = 0;
-#endif
-
- oldvalue = ctxt->state->value;
- oldend = ctxt->state->endvalue;
-
- val = xmlStrdup(oldvalue);
- if (val == NULL) {
- val = xmlStrdup(BAD_CAST "");
- }
- if (val == NULL) {
- VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
- return (-1);
- }
- cur = val;
- while (*cur != 0) {
- if (IS_BLANK_CH(*cur)) {
- *cur = 0;
- cur++;
-#ifdef DEBUG_LIST
- nb_values++;
-#endif
- while (IS_BLANK_CH(*cur))
- *cur++ = 0;
- } else
- cur++;
- }
-#ifdef DEBUG_LIST
- xmlGenericError(xmlGenericErrorContext,
- "list value: '%s' found %d items\n",
- oldvalue, nb_values);
- nb_values = 0;
-#endif
- ctxt->state->endvalue = cur;
- cur = val;
- while ((*cur == 0) && (cur != ctxt->state->endvalue))
- cur++;
-
- ctxt->state->value = cur;
-
- while (list != NULL) {
- if (ctxt->state->value == ctxt->state->endvalue)
- ctxt->state->value = NULL;
- ret = xmlRelaxNGValidateValue(ctxt, list);
- if (ret != 0) {
-#ifdef DEBUG_LIST
- xmlGenericError(xmlGenericErrorContext,
- "Failed to validate value: '%s' with %d rule\n",
- ctxt->state->value, nb_values);
-#endif
- break;
- }
-#ifdef DEBUG_LIST
- nb_values++;
-#endif
- list = list->next;
- }
-
- if ((ret == 0) && (ctxt->state->value != NULL) &&
- (ctxt->state->value != ctxt->state->endvalue)) {
- VALID_ERR2(XML_RELAXNG_ERR_LISTEXTRA,
- ctxt->state->value);
- ret = -1;
- }
- xmlFree(val);
- ctxt->state->value = oldvalue;
- ctxt->state->endvalue = oldend;
- break;
- }
- case XML_RELAXNG_ONEORMORE:
- ret = xmlRelaxNGValidateValueList(ctxt, define->content);
- if (ret != 0) {
- break;
- }
- /* no break on purpose */
- case XML_RELAXNG_ZEROORMORE:{
- xmlChar *cur, *temp;
-
- if ((ctxt->state->value == NULL) ||
- (*ctxt->state->value == 0)) {
- ret = 0;
- break;
- }
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
- cur = ctxt->state->value;
- temp = NULL;
- while ((cur != NULL) && (cur != ctxt->state->endvalue) &&
- (temp != cur)) {
- temp = cur;
- ret =
- xmlRelaxNGValidateValueList(ctxt, define->content);
- if (ret != 0) {
- ctxt->state->value = temp;
- ret = 0;
- break;
- }
- cur = ctxt->state->value;
- }
- ctxt->flags = oldflags;
- if (ctxt->errNr > 0)
- xmlRelaxNGPopErrors(ctxt, 0);
- break;
- }
- case XML_RELAXNG_OPTIONAL:{
- xmlChar *temp;
-
- if ((ctxt->state->value == NULL) ||
- (*ctxt->state->value == 0)) {
- ret = 0;
- break;
- }
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
- temp = ctxt->state->value;
- ret = xmlRelaxNGValidateValue(ctxt, define->content);
- ctxt->flags = oldflags;
- if (ret != 0) {
- ctxt->state->value = temp;
- if (ctxt->errNr > 0)
- xmlRelaxNGPopErrors(ctxt, 0);
- ret = 0;
- break;
- }
- if (ctxt->errNr > 0)
- xmlRelaxNGPopErrors(ctxt, 0);
- break;
- }
- case XML_RELAXNG_EXCEPT:{
- xmlRelaxNGDefinePtr list;
-
- list = define->content;
- while (list != NULL) {
- ret = xmlRelaxNGValidateValue(ctxt, list);
- if (ret == 0) {
- ret = -1;
- break;
- } else
- ret = 0;
- list = list->next;
- }
- break;
- }
- case XML_RELAXNG_DEF:
- case XML_RELAXNG_GROUP:{
- xmlRelaxNGDefinePtr list;
-
- list = define->content;
- while (list != NULL) {
- ret = xmlRelaxNGValidateValue(ctxt, list);
- if (ret != 0) {
- ret = -1;
- break;
- } else
- ret = 0;
- list = list->next;
- }
- break;
- }
- case XML_RELAXNG_REF:
- case XML_RELAXNG_PARENTREF:
- if (define->content == NULL) {
- VALID_ERR(XML_RELAXNG_ERR_NODEFINE);
- ret = -1;
- } else {
- ret = xmlRelaxNGValidateValue(ctxt, define->content);
- }
- break;
- default:
- TODO ret = -1;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateValueContent:
- * @ctxt: a Relax-NG validation context
- * @defines: the list of definitions to verify
- *
- * Validate the given definitions for the current value
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateValueContent(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr defines)
-{
- int ret = 0;
-
- while (defines != NULL) {
- ret = xmlRelaxNGValidateValue(ctxt, defines);
- if (ret != 0)
- break;
- defines = defines->next;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGAttributeMatch:
- * @ctxt: a Relax-NG validation context
- * @define: the definition to check
- * @prop: the attribute
- *
- * Check if the attribute matches the definition nameClass
- *
- * Returns 1 if the attribute matches, 0 if no, or -1 in case of error
- */
-static int
-xmlRelaxNGAttributeMatch(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define, xmlAttrPtr prop)
-{
- int ret;
-
- if (define->name != NULL) {
- if (!xmlStrEqual(define->name, prop->name))
- return (0);
- }
- if (define->ns != NULL) {
- if (define->ns[0] == 0) {
- if (prop->ns != NULL)
- return (0);
- } else {
- if ((prop->ns == NULL) ||
- (!xmlStrEqual(define->ns, prop->ns->href)))
- return (0);
- }
- }
- if (define->nameClass == NULL)
- return (1);
- define = define->nameClass;
- if (define->type == XML_RELAXNG_EXCEPT) {
- xmlRelaxNGDefinePtr list;
-
- list = define->content;
- while (list != NULL) {
- ret = xmlRelaxNGAttributeMatch(ctxt, list, prop);
- if (ret == 1)
- return (0);
- if (ret < 0)
- return (ret);
- list = list->next;
- }
- } else if (define->type == XML_RELAXNG_CHOICE) {
- xmlRelaxNGDefinePtr list;
-
- list = define->nameClass;
- while (list != NULL) {
- ret = xmlRelaxNGAttributeMatch(ctxt, list, prop);
- if (ret == 1)
- return (1);
- if (ret < 0)
- return (ret);
- list = list->next;
- }
- return (0);
- } else {
- TODO}
- return (1);
-}
-
-/**
- * xmlRelaxNGValidateAttribute:
- * @ctxt: a Relax-NG validation context
- * @define: the definition to verify
- *
- * Validate the given attribute definition for that node
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateAttribute(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define)
-{
- int ret = 0, i;
- xmlChar *value, *oldvalue;
- xmlAttrPtr prop = NULL, tmp;
- xmlNodePtr oldseq;
-
- if (ctxt->state->nbAttrLeft <= 0)
- return (-1);
- if (define->name != NULL) {
- for (i = 0; i < ctxt->state->nbAttrs; i++) {
- tmp = ctxt->state->attrs[i];
- if ((tmp != NULL) && (xmlStrEqual(define->name, tmp->name))) {
- if ((((define->ns == NULL) || (define->ns[0] == 0)) &&
- (tmp->ns == NULL)) ||
- ((tmp->ns != NULL) &&
- (xmlStrEqual(define->ns, tmp->ns->href)))) {
- prop = tmp;
- break;
- }
- }
- }
- if (prop != NULL) {
- value = xmlNodeListGetString(prop->doc, prop->children, 1);
- oldvalue = ctxt->state->value;
- oldseq = ctxt->state->seq;
- ctxt->state->seq = (xmlNodePtr) prop;
- ctxt->state->value = value;
- ctxt->state->endvalue = NULL;
- ret = xmlRelaxNGValidateValueContent(ctxt, define->content);
- if (ctxt->state->value != NULL)
- value = ctxt->state->value;
- if (value != NULL)
- xmlFree(value);
- ctxt->state->value = oldvalue;
- ctxt->state->seq = oldseq;
- if (ret == 0) {
- /*
- * flag the attribute as processed
- */
- ctxt->state->attrs[i] = NULL;
- ctxt->state->nbAttrLeft--;
- }
- } else {
- ret = -1;
- }
-#ifdef DEBUG
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGValidateAttribute(%s): %d\n",
- define->name, ret);
-#endif
- } else {
- for (i = 0; i < ctxt->state->nbAttrs; i++) {
- tmp = ctxt->state->attrs[i];
- if ((tmp != NULL) &&
- (xmlRelaxNGAttributeMatch(ctxt, define, tmp) == 1)) {
- prop = tmp;
- break;
- }
- }
- if (prop != NULL) {
- value = xmlNodeListGetString(prop->doc, prop->children, 1);
- oldvalue = ctxt->state->value;
- oldseq = ctxt->state->seq;
- ctxt->state->seq = (xmlNodePtr) prop;
- ctxt->state->value = value;
- ret = xmlRelaxNGValidateValueContent(ctxt, define->content);
- if (ctxt->state->value != NULL)
- value = ctxt->state->value;
- if (value != NULL)
- xmlFree(value);
- ctxt->state->value = oldvalue;
- ctxt->state->seq = oldseq;
- if (ret == 0) {
- /*
- * flag the attribute as processed
- */
- ctxt->state->attrs[i] = NULL;
- ctxt->state->nbAttrLeft--;
- }
- } else {
- ret = -1;
- }
-#ifdef DEBUG
- if (define->ns != NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGValidateAttribute(nsName ns = %s): %d\n",
- define->ns, ret);
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGValidateAttribute(anyName): %d\n",
- ret);
- }
-#endif
- }
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateAttributeList:
- * @ctxt: a Relax-NG validation context
- * @define: the list of definition to verify
- *
- * Validate the given node against the list of attribute definitions
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateAttributeList(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr defines)
-{
- int ret = 0, res;
- int needmore = 0;
- xmlRelaxNGDefinePtr cur;
-
- cur = defines;
- while (cur != NULL) {
- if (cur->type == XML_RELAXNG_ATTRIBUTE) {
- if (xmlRelaxNGValidateAttribute(ctxt, cur) != 0)
- ret = -1;
- } else
- needmore = 1;
- cur = cur->next;
- }
- if (!needmore)
- return (ret);
- cur = defines;
- while (cur != NULL) {
- if (cur->type != XML_RELAXNG_ATTRIBUTE) {
- if ((ctxt->state != NULL) || (ctxt->states != NULL)) {
- res = xmlRelaxNGValidateDefinition(ctxt, cur);
- if (res < 0)
- ret = -1;
- } else {
- VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
- return (-1);
- }
- if (res == -1) /* continues on -2 */
- break;
- }
- cur = cur->next;
- }
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGNodeMatchesList:
- * @node: the node
- * @list: a NULL terminated array of definitions
- *
- * Check if a node can be matched by one of the definitions
- *
- * Returns 1 if matches 0 otherwise
- */
-static int
-xmlRelaxNGNodeMatchesList(xmlNodePtr node, xmlRelaxNGDefinePtr * list)
-{
- xmlRelaxNGDefinePtr cur;
- int i = 0, tmp;
-
- if ((node == NULL) || (list == NULL))
- return (0);
-
- cur = list[i++];
- while (cur != NULL) {
- if ((node->type == XML_ELEMENT_NODE) &&
- (cur->type == XML_RELAXNG_ELEMENT)) {
- tmp = xmlRelaxNGElementMatch(NULL, cur, node);
- if (tmp == 1)
- return (1);
- } else if (((node->type == XML_TEXT_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)) &&
- (cur->type == XML_RELAXNG_TEXT)) {
- return (1);
- }
- cur = list[i++];
- }
- return (0);
-}
-
-/**
- * xmlRelaxNGValidateInterleave:
- * @ctxt: a Relax-NG validation context
- * @define: the definition to verify
- *
- * Validate an interleave definition for a node.
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define)
-{
- int ret = 0, i, nbgroups;
- int errNr = ctxt->errNr;
- int oldflags;
-
- xmlRelaxNGValidStatePtr oldstate;
- xmlRelaxNGPartitionPtr partitions;
- xmlRelaxNGInterleaveGroupPtr group = NULL;
- xmlNodePtr cur, start, last = NULL, lastchg = NULL, lastelem;
- xmlNodePtr *list = NULL, *lasts = NULL;
-
- if (define->data != NULL) {
- partitions = (xmlRelaxNGPartitionPtr) define->data;
- nbgroups = partitions->nbgroups;
- } else {
- VALID_ERR(XML_RELAXNG_ERR_INTERNODATA);
- return (-1);
- }
- /*
- * Optimizations for MIXED
- */
- oldflags = ctxt->flags;
- if (define->dflags & IS_MIXED) {
- ctxt->flags |= FLAGS_MIXED_CONTENT;
- if (nbgroups == 2) {
- /*
- * this is a pure <mixed> case
- */
- if (ctxt->state != NULL)
- ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt,
- ctxt->state->seq);
- if (partitions->groups[0]->rule->type == XML_RELAXNG_TEXT)
- ret = xmlRelaxNGValidateDefinition(ctxt,
- partitions->groups[1]->
- rule);
- else
- ret = xmlRelaxNGValidateDefinition(ctxt,
- partitions->groups[0]->
- rule);
- if (ret == 0) {
- if (ctxt->state != NULL)
- ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt,
- ctxt->state->
- seq);
- }
- ctxt->flags = oldflags;
- return (ret);
- }
- }
-
- /*
- * Build arrays to store the first and last node of the chain
- * pertaining to each group
- */
- list = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr));
- if (list == NULL) {
- xmlRngVErrMemory(ctxt, "validating\n");
- return (-1);
- }
- memset(list, 0, nbgroups * sizeof(xmlNodePtr));
- lasts = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr));
- if (lasts == NULL) {
- xmlRngVErrMemory(ctxt, "validating\n");
- return (-1);
- }
- memset(lasts, 0, nbgroups * sizeof(xmlNodePtr));
-
- /*
- * Walk the sequence of children finding the right group and
- * sorting them in sequences.
- */
- cur = ctxt->state->seq;
- cur = xmlRelaxNGSkipIgnored(ctxt, cur);
- start = cur;
- while (cur != NULL) {
- ctxt->state->seq = cur;
- if ((partitions->triage != NULL) &&
- (partitions->flags & IS_DETERMINIST)) {
- void *tmp = NULL;
-
- if ((cur->type == XML_TEXT_NODE) ||
- (cur->type == XML_CDATA_SECTION_NODE)) {
- tmp = xmlHashLookup2(partitions->triage, BAD_CAST "#text",
- NULL);
- } else if (cur->type == XML_ELEMENT_NODE) {
- if (cur->ns != NULL) {
- tmp = xmlHashLookup2(partitions->triage, cur->name,
- cur->ns->href);
- if (tmp == NULL)
- tmp = xmlHashLookup2(partitions->triage,
- BAD_CAST "#any",
- cur->ns->href);
- } else
- tmp =
- xmlHashLookup2(partitions->triage, cur->name,
- NULL);
- if (tmp == NULL)
- tmp =
- xmlHashLookup2(partitions->triage, BAD_CAST "#any",
- NULL);
- }
-
- if (tmp == NULL) {
- i = nbgroups;
- } else {
- i = ((long) tmp) - 1;
- if (partitions->flags & IS_NEEDCHECK) {
- group = partitions->groups[i];
- if (!xmlRelaxNGNodeMatchesList(cur, group->defs))
- i = nbgroups;
- }
- }
- } else {
- for (i = 0; i < nbgroups; i++) {
- group = partitions->groups[i];
- if (group == NULL)
- continue;
- if (xmlRelaxNGNodeMatchesList(cur, group->defs))
- break;
- }
- }
- /*
- * We break as soon as an element not matched is found
- */
- if (i >= nbgroups) {
- break;
- }
- if (lasts[i] != NULL) {
- lasts[i]->next = cur;
- lasts[i] = cur;
- } else {
- list[i] = cur;
- lasts[i] = cur;
- }
- if (cur->next != NULL)
- lastchg = cur->next;
- else
- lastchg = cur;
- cur = xmlRelaxNGSkipIgnored(ctxt, cur->next);
- }
- if (ret != 0) {
- VALID_ERR(XML_RELAXNG_ERR_INTERSEQ);
- ret = -1;
- goto done;
- }
- lastelem = cur;
- oldstate = ctxt->state;
- for (i = 0; i < nbgroups; i++) {
- ctxt->state = xmlRelaxNGCopyValidState(ctxt, oldstate);
- if (ctxt->state == NULL) {
- ret = -1;
- break;
- }
- group = partitions->groups[i];
- if (lasts[i] != NULL) {
- last = lasts[i]->next;
- lasts[i]->next = NULL;
- }
- ctxt->state->seq = list[i];
- ret = xmlRelaxNGValidateDefinition(ctxt, group->rule);
- if (ret != 0)
- break;
- if (ctxt->state != NULL) {
- cur = ctxt->state->seq;
- cur = xmlRelaxNGSkipIgnored(ctxt, cur);
- xmlRelaxNGFreeValidState(ctxt, oldstate);
- oldstate = ctxt->state;
- ctxt->state = NULL;
- if (cur != NULL) {
- VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, cur->name);
- ret = -1;
- ctxt->state = oldstate;
- goto done;
- }
- } else if (ctxt->states != NULL) {
- int j;
- int found = 0;
- int best = -1;
- int lowattr = -1;
-
- /*
- * PBM: what happen if there is attributes checks in the interleaves
- */
-
- for (j = 0; j < ctxt->states->nbState; j++) {
- cur = ctxt->states->tabState[j]->seq;
- cur = xmlRelaxNGSkipIgnored(ctxt, cur);
- if (cur == NULL) {
- if (found == 0) {
- lowattr = ctxt->states->tabState[j]->nbAttrLeft;
- best = j;
- }
- found = 1;
- if (ctxt->states->tabState[j]->nbAttrLeft <= lowattr) {
- /* try to keep the latest one to mach old heuristic */
- lowattr = ctxt->states->tabState[j]->nbAttrLeft;
- best = j;
- }
- if (lowattr == 0)
- break;
- } else if (found == 0) {
- if (lowattr == -1) {
- lowattr = ctxt->states->tabState[j]->nbAttrLeft;
- best = j;
- } else
- if (ctxt->states->tabState[j]->nbAttrLeft <= lowattr) {
- /* try to keep the latest one to mach old heuristic */
- lowattr = ctxt->states->tabState[j]->nbAttrLeft;
- best = j;
- }
- }
- }
- /*
- * BIG PBM: here we pick only one restarting point :-(
- */
- if (ctxt->states->nbState > 0) {
- xmlRelaxNGFreeValidState(ctxt, oldstate);
- if (best != -1) {
- oldstate = ctxt->states->tabState[best];
- ctxt->states->tabState[best] = NULL;
- } else {
- oldstate =
- ctxt->states->tabState[ctxt->states->nbState - 1];
- ctxt->states->tabState[ctxt->states->nbState - 1] = NULL;
- ctxt->states->nbState--;
- }
- }
- for (j = 0; j < ctxt->states->nbState ; j++) {
- xmlRelaxNGFreeValidState(ctxt, ctxt->states->tabState[j]);
- }
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->states = NULL;
- if (found == 0) {
- if (cur == NULL) {
- VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA,
- (const xmlChar *) "noname");
- } else {
- VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, cur->name);
- }
- ret = -1;
- ctxt->state = oldstate;
- goto done;
- }
- } else {
- ret = -1;
- break;
- }
- if (lasts[i] != NULL) {
- lasts[i]->next = last;
- }
- }
- if (ctxt->state != NULL)
- xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = oldstate;
- ctxt->state->seq = lastelem;
- if (ret != 0) {
- VALID_ERR(XML_RELAXNG_ERR_INTERSEQ);
- ret = -1;
- goto done;
- }
-
- done:
- ctxt->flags = oldflags;
- /*
- * builds the next links chain from the prev one
- */
- cur = lastchg;
- while (cur != NULL) {
- if ((cur == start) || (cur->prev == NULL))
- break;
- cur->prev->next = cur;
- cur = cur->prev;
- }
- if (ret == 0) {
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- }
-
- xmlFree(list);
- xmlFree(lasts);
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateDefinitionList:
- * @ctxt: a Relax-NG validation context
- * @define: the list of definition to verify
- *
- * Validate the given node content against the (list) of definitions
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateDefinitionList(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr defines)
-{
- int ret = 0, res;
-
-
- if (defines == NULL) {
- VALID_ERR2(XML_RELAXNG_ERR_INTERNAL,
- BAD_CAST "NULL definition list");
- return (-1);
- }
- while (defines != NULL) {
- if ((ctxt->state != NULL) || (ctxt->states != NULL)) {
- res = xmlRelaxNGValidateDefinition(ctxt, defines);
- if (res < 0)
- ret = -1;
- } else {
- VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
- return (-1);
- }
- if (res == -1) /* continues on -2 */
- break;
- defines = defines->next;
- }
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGElementMatch:
- * @ctxt: a Relax-NG validation context
- * @define: the definition to check
- * @elem: the element
- *
- * Check if the element matches the definition nameClass
- *
- * Returns 1 if the element matches, 0 if no, or -1 in case of error
- */
-static int
-xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define, xmlNodePtr elem)
-{
- int ret = 0, oldflags = 0;
-
- if (define->name != NULL) {
- if (!xmlStrEqual(elem->name, define->name)) {
- VALID_ERR3(XML_RELAXNG_ERR_ELEMNAME, define->name, elem->name);
- return (0);
- }
- }
- if ((define->ns != NULL) && (define->ns[0] != 0)) {
- if (elem->ns == NULL) {
- VALID_ERR2(XML_RELAXNG_ERR_ELEMNONS, elem->name);
- return (0);
- } else if (!xmlStrEqual(elem->ns->href, define->ns)) {
- VALID_ERR3(XML_RELAXNG_ERR_ELEMWRONGNS,
- elem->name, define->ns);
- return (0);
- }
- } else if ((elem->ns != NULL) && (define->ns != NULL) &&
- (define->name == NULL)) {
- VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS, elem->name);
- return (0);
- } else if ((elem->ns != NULL) && (define->name != NULL)) {
- VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS, define->name);
- return (0);
- }
-
- if (define->nameClass == NULL)
- return (1);
-
- define = define->nameClass;
- if (define->type == XML_RELAXNG_EXCEPT) {
- xmlRelaxNGDefinePtr list;
-
- if (ctxt != NULL) {
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
- }
-
- list = define->content;
- while (list != NULL) {
- ret = xmlRelaxNGElementMatch(ctxt, list, elem);
- if (ret == 1) {
- if (ctxt != NULL)
- ctxt->flags = oldflags;
- return (0);
- }
- if (ret < 0) {
- if (ctxt != NULL)
- ctxt->flags = oldflags;
- return (ret);
- }
- list = list->next;
- }
- ret = 1;
- if (ctxt != NULL) {
- ctxt->flags = oldflags;
- }
- } else if (define->type == XML_RELAXNG_CHOICE) {
- xmlRelaxNGDefinePtr list;
-
- if (ctxt != NULL) {
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
- }
-
- list = define->nameClass;
- while (list != NULL) {
- ret = xmlRelaxNGElementMatch(ctxt, list, elem);
- if (ret == 1) {
- if (ctxt != NULL)
- ctxt->flags = oldflags;
- return (1);
- }
- if (ret < 0) {
- if (ctxt != NULL)
- ctxt->flags = oldflags;
- return (ret);
- }
- list = list->next;
- }
- if (ctxt != NULL) {
- if (ret != 0) {
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
- xmlRelaxNGDumpValidError(ctxt);
- } else {
- if (ctxt->errNr > 0)
- xmlRelaxNGPopErrors(ctxt, 0);
- }
- }
- ret = 0;
- if (ctxt != NULL) {
- ctxt->flags = oldflags;
- }
- } else {
- TODO ret = -1;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGBestState:
- * @ctxt: a Relax-NG validation context
- *
- * Find the "best" state in the ctxt->states list of states to report
- * errors about. I.e. a state with no element left in the child list
- * or the one with the less attributes left.
- * This is called only if a falidation error was detected
- *
- * Returns the index of the "best" state or -1 in case of error
- */
-static int
-xmlRelaxNGBestState(xmlRelaxNGValidCtxtPtr ctxt)
-{
- xmlRelaxNGValidStatePtr state;
- int i, tmp;
- int best = -1;
- int value = 1000000;
-
- if ((ctxt == NULL) || (ctxt->states == NULL) ||
- (ctxt->states->nbState <= 0))
- return (-1);
-
- for (i = 0; i < ctxt->states->nbState; i++) {
- state = ctxt->states->tabState[i];
- if (state == NULL)
- continue;
- if (state->seq != NULL) {
- if ((best == -1) || (value > 100000)) {
- value = 100000;
- best = i;
- }
- } else {
- tmp = state->nbAttrLeft;
- if ((best == -1) || (value > tmp)) {
- value = tmp;
- best = i;
- }
- }
- }
- return (best);
-}
-
-/**
- * xmlRelaxNGLogBestError:
- * @ctxt: a Relax-NG validation context
- *
- * Find the "best" state in the ctxt->states list of states to report
- * errors about and log it.
- */
-static void
-xmlRelaxNGLogBestError(xmlRelaxNGValidCtxtPtr ctxt)
-{
- int best;
-
- if ((ctxt == NULL) || (ctxt->states == NULL) ||
- (ctxt->states->nbState <= 0))
- return;
-
- best = xmlRelaxNGBestState(ctxt);
- if ((best >= 0) && (best < ctxt->states->nbState)) {
- ctxt->state = ctxt->states->tabState[best];
-
- xmlRelaxNGValidateElementEnd(ctxt, 1);
- }
-}
-
-/**
- * xmlRelaxNGValidateElementEnd:
- * @ctxt: a Relax-NG validation context
- * @dolog: indicate that error logging should be done
- *
- * Validate the end of the element, implements check that
- * there is nothing left not consumed in the element content
- * or in the attribute list.
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateElementEnd(xmlRelaxNGValidCtxtPtr ctxt, int dolog)
-{
- int i;
- xmlRelaxNGValidStatePtr state;
-
- state = ctxt->state;
- if (state->seq != NULL) {
- state->seq = xmlRelaxNGSkipIgnored(ctxt, state->seq);
- if (state->seq != NULL) {
- if (dolog) {
- VALID_ERR3(XML_RELAXNG_ERR_EXTRACONTENT,
- state->node->name, state->seq->name);
- }
- return (-1);
- }
- }
- for (i = 0; i < state->nbAttrs; i++) {
- if (state->attrs[i] != NULL) {
- if (dolog) {
- VALID_ERR3(XML_RELAXNG_ERR_INVALIDATTR,
- state->attrs[i]->name, state->node->name);
- }
- return (-1 - i);
- }
- }
- return (0);
-}
-
-/**
- * xmlRelaxNGValidateState:
- * @ctxt: a Relax-NG validation context
- * @define: the definition to verify
- *
- * Validate the current state against the definition
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateState(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define)
-{
- xmlNodePtr node;
- int ret = 0, i, tmp, oldflags, errNr;
- xmlRelaxNGValidStatePtr oldstate = NULL, state;
-
- if (define == NULL) {
- VALID_ERR(XML_RELAXNG_ERR_NODEFINE);
- return (-1);
- }
-
- if (ctxt->state != NULL) {
- node = ctxt->state->seq;
- } else {
- node = NULL;
- }
-#ifdef DEBUG
- for (i = 0; i < ctxt->depth; i++)
- xmlGenericError(xmlGenericErrorContext, " ");
- xmlGenericError(xmlGenericErrorContext,
- "Start validating %s ", xmlRelaxNGDefName(define));
- if (define->name != NULL)
- xmlGenericError(xmlGenericErrorContext, "%s ", define->name);
- if ((node != NULL) && (node->name != NULL))
- xmlGenericError(xmlGenericErrorContext, "on %s\n", node->name);
- else
- xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
- ctxt->depth++;
- switch (define->type) {
- case XML_RELAXNG_EMPTY:
- xmlRelaxNGSkipIgnored(ctxt, node);
- ret = 0;
- break;
- case XML_RELAXNG_NOT_ALLOWED:
- ret = -1;
- break;
- case XML_RELAXNG_TEXT:
- while ((node != NULL) &&
- ((node->type == XML_TEXT_NODE) ||
- (node->type == XML_COMMENT_NODE) ||
- (node->type == XML_PI_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)))
- node = node->next;
- ctxt->state->seq = node;
- break;
- case XML_RELAXNG_ELEMENT:
- errNr = ctxt->errNr;
- node = xmlRelaxNGSkipIgnored(ctxt, node);
- if (node == NULL) {
- VALID_ERR2(XML_RELAXNG_ERR_NOELEM, define->name);
- ret = -1;
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
- xmlRelaxNGDumpValidError(ctxt);
- break;
- }
- if (node->type != XML_ELEMENT_NODE) {
- VALID_ERR(XML_RELAXNG_ERR_NOTELEM);
- ret = -1;
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
- xmlRelaxNGDumpValidError(ctxt);
- break;
- }
- /*
- * This node was already validated successfully against
- * this definition.
- */
- if (node->psvi == define) {
- ctxt->state->seq = xmlRelaxNGSkipIgnored(ctxt, node->next);
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- if (ctxt->errNr != 0) {
- while ((ctxt->err != NULL) &&
- (((ctxt->err->err == XML_RELAXNG_ERR_ELEMNAME)
- && (xmlStrEqual(ctxt->err->arg2, node->name)))
- ||
- ((ctxt->err->err ==
- XML_RELAXNG_ERR_ELEMEXTRANS)
- && (xmlStrEqual(ctxt->err->arg1, node->name)))
- || (ctxt->err->err == XML_RELAXNG_ERR_NOELEM)
- || (ctxt->err->err ==
- XML_RELAXNG_ERR_NOTELEM)))
- xmlRelaxNGValidErrorPop(ctxt);
- }
- break;
- }
-
- ret = xmlRelaxNGElementMatch(ctxt, define, node);
- if (ret <= 0) {
- ret = -1;
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
- xmlRelaxNGDumpValidError(ctxt);
- break;
- }
- ret = 0;
- if (ctxt->errNr != 0) {
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- while ((ctxt->err != NULL) &&
- (((ctxt->err->err == XML_RELAXNG_ERR_ELEMNAME) &&
- (xmlStrEqual(ctxt->err->arg2, node->name))) ||
- ((ctxt->err->err == XML_RELAXNG_ERR_ELEMEXTRANS) &&
- (xmlStrEqual(ctxt->err->arg1, node->name))) ||
- (ctxt->err->err == XML_RELAXNG_ERR_NOELEM) ||
- (ctxt->err->err == XML_RELAXNG_ERR_NOTELEM)))
- xmlRelaxNGValidErrorPop(ctxt);
- }
- errNr = ctxt->errNr;
-
- oldflags = ctxt->flags;
- if (ctxt->flags & FLAGS_MIXED_CONTENT) {
- ctxt->flags -= FLAGS_MIXED_CONTENT;
- }
- state = xmlRelaxNGNewValidState(ctxt, node);
- if (state == NULL) {
- ret = -1;
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
- xmlRelaxNGDumpValidError(ctxt);
- break;
- }
-
- oldstate = ctxt->state;
- ctxt->state = state;
- if (define->attrs != NULL) {
- tmp = xmlRelaxNGValidateAttributeList(ctxt, define->attrs);
- if (tmp != 0) {
- ret = -1;
- VALID_ERR2(XML_RELAXNG_ERR_ATTRVALID, node->name);
- }
- }
- if (define->contModel != NULL) {
- xmlRelaxNGValidStatePtr nstate, tmpstate = ctxt->state;
- xmlRelaxNGStatesPtr tmpstates = ctxt->states;
- xmlNodePtr nseq;
-
- nstate = xmlRelaxNGNewValidState(ctxt, node);
- ctxt->state = nstate;
- ctxt->states = NULL;
-
- tmp = xmlRelaxNGValidateCompiledContent(ctxt,
- define->contModel,
- ctxt->state->seq);
- nseq = ctxt->state->seq;
- ctxt->state = tmpstate;
- ctxt->states = tmpstates;
- xmlRelaxNGFreeValidState(ctxt, nstate);
-
-#ifdef DEBUG_COMPILE
- xmlGenericError(xmlGenericErrorContext,
- "Validating content of '%s' : %d\n",
- define->name, tmp);
-#endif
- if (tmp != 0)
- ret = -1;
-
- if (ctxt->states != NULL) {
- tmp = -1;
-
- for (i = 0; i < ctxt->states->nbState; i++) {
- state = ctxt->states->tabState[i];
- ctxt->state = state;
- ctxt->state->seq = nseq;
-
- if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
- tmp = 0;
- break;
- }
- }
- if (tmp != 0) {
- /*
- * validation error, log the message for the "best" one
- */
- ctxt->flags |= FLAGS_IGNORABLE;
- xmlRelaxNGLogBestError(ctxt);
- }
- for (i = 0; i < ctxt->states->nbState; i++) {
- xmlRelaxNGFreeValidState(ctxt,
- ctxt->states->
- tabState[i]);
- }
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->flags = oldflags;
- ctxt->states = NULL;
- if ((ret == 0) && (tmp == -1))
- ret = -1;
- } else {
- state = ctxt->state;
- if (ctxt->state != NULL)
- ctxt->state->seq = nseq;
- if (ret == 0)
- ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
- xmlRelaxNGFreeValidState(ctxt, state);
- }
- } else {
- if (define->content != NULL) {
- tmp = xmlRelaxNGValidateDefinitionList(ctxt,
- define->
- content);
- if (tmp != 0) {
- ret = -1;
- if (ctxt->state == NULL) {
- ctxt->state = oldstate;
- VALID_ERR2(XML_RELAXNG_ERR_CONTENTVALID,
- node->name);
- ctxt->state = NULL;
- } else {
- VALID_ERR2(XML_RELAXNG_ERR_CONTENTVALID,
- node->name);
- }
-
- }
- }
- if (ctxt->states != NULL) {
- tmp = -1;
-
- for (i = 0; i < ctxt->states->nbState; i++) {
- state = ctxt->states->tabState[i];
- ctxt->state = state;
-
- if (xmlRelaxNGValidateElementEnd(ctxt, 0) == 0) {
- tmp = 0;
- break;
- }
- }
- if (tmp != 0) {
- /*
- * validation error, log the message for the "best" one
- */
- ctxt->flags |= FLAGS_IGNORABLE;
- xmlRelaxNGLogBestError(ctxt);
- }
- for (i = 0; i < ctxt->states->nbState; i++) {
- xmlRelaxNGFreeValidState(ctxt,
- ctxt->states->tabState[i]);
- ctxt->states->tabState[i] = NULL;
- }
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->flags = oldflags;
- ctxt->states = NULL;
- if ((ret == 0) && (tmp == -1))
- ret = -1;
- } else {
- state = ctxt->state;
- if (ret == 0)
- ret = xmlRelaxNGValidateElementEnd(ctxt, 1);
- xmlRelaxNGFreeValidState(ctxt, state);
- }
- }
- if (ret == 0) {
- node->psvi = define;
- }
- ctxt->flags = oldflags;
- ctxt->state = oldstate;
- if (oldstate != NULL)
- oldstate->seq = xmlRelaxNGSkipIgnored(ctxt, node->next);
- if (ret != 0) {
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
- xmlRelaxNGDumpValidError(ctxt);
- ret = 0;
-#if 0
- } else {
- ret = -2;
-#endif
- }
- } else {
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- }
-
-#ifdef DEBUG
- xmlGenericError(xmlGenericErrorContext,
- "xmlRelaxNGValidateDefinition(): validated %s : %d",
- node->name, ret);
- if (oldstate == NULL)
- xmlGenericError(xmlGenericErrorContext, ": no state\n");
- else if (oldstate->seq == NULL)
- xmlGenericError(xmlGenericErrorContext, ": done\n");
- else if (oldstate->seq->type == XML_ELEMENT_NODE)
- xmlGenericError(xmlGenericErrorContext, ": next elem %s\n",
- oldstate->seq->name);
- else
- xmlGenericError(xmlGenericErrorContext, ": next %s %d\n",
- oldstate->seq->name, oldstate->seq->type);
-#endif
- break;
- case XML_RELAXNG_OPTIONAL:{
- errNr = ctxt->errNr;
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
- oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state);
- ret =
- xmlRelaxNGValidateDefinitionList(ctxt,
- define->content);
- if (ret != 0) {
- if (ctxt->state != NULL)
- xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = oldstate;
- ctxt->flags = oldflags;
- ret = 0;
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- break;
- }
- if (ctxt->states != NULL) {
- xmlRelaxNGAddStates(ctxt, ctxt->states, oldstate);
- } else {
- ctxt->states = xmlRelaxNGNewStates(ctxt, 1);
- if (ctxt->states == NULL) {
- xmlRelaxNGFreeValidState(ctxt, oldstate);
- ctxt->flags = oldflags;
- ret = -1;
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- break;
- }
- xmlRelaxNGAddStates(ctxt, ctxt->states, oldstate);
- xmlRelaxNGAddStates(ctxt, ctxt->states, ctxt->state);
- ctxt->state = NULL;
- }
- ctxt->flags = oldflags;
- ret = 0;
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- break;
- }
- case XML_RELAXNG_ONEORMORE:
- errNr = ctxt->errNr;
- ret = xmlRelaxNGValidateDefinitionList(ctxt, define->content);
- if (ret != 0) {
- break;
- }
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- /* no break on purpose */
- case XML_RELAXNG_ZEROORMORE:{
- int progress;
- xmlRelaxNGStatesPtr states = NULL, res = NULL;
- int base, j;
-
- errNr = ctxt->errNr;
- res = xmlRelaxNGNewStates(ctxt, 1);
- if (res == NULL) {
- ret = -1;
- break;
- }
- /*
- * All the input states are also exit states
- */
- if (ctxt->state != NULL) {
- xmlRelaxNGAddStates(ctxt, res,
- xmlRelaxNGCopyValidState(ctxt,
- ctxt->
- state));
- } else {
- for (j = 0; j < ctxt->states->nbState; j++) {
- xmlRelaxNGAddStates(ctxt, res,
- xmlRelaxNGCopyValidState(ctxt,
- ctxt->states->tabState[j]));
- }
- }
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
- do {
- progress = 0;
- base = res->nbState;
-
- if (ctxt->states != NULL) {
- states = ctxt->states;
- for (i = 0; i < states->nbState; i++) {
- ctxt->state = states->tabState[i];
- ctxt->states = NULL;
- ret = xmlRelaxNGValidateDefinitionList(ctxt,
- define->
- content);
- if (ret == 0) {
- if (ctxt->state != NULL) {
- tmp = xmlRelaxNGAddStates(ctxt, res,
- ctxt->state);
- ctxt->state = NULL;
- if (tmp == 1)
- progress = 1;
- } else if (ctxt->states != NULL) {
- for (j = 0; j < ctxt->states->nbState;
- j++) {
- tmp =
- xmlRelaxNGAddStates(ctxt, res,
- ctxt->states->tabState[j]);
- if (tmp == 1)
- progress = 1;
- }
- xmlRelaxNGFreeStates(ctxt,
- ctxt->states);
- ctxt->states = NULL;
- }
- } else {
- if (ctxt->state != NULL) {
- xmlRelaxNGFreeValidState(ctxt,
- ctxt->state);
- ctxt->state = NULL;
- }
- }
- }
- } else {
- ret = xmlRelaxNGValidateDefinitionList(ctxt,
- define->
- content);
- if (ret != 0) {
- xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = NULL;
- } else {
- base = res->nbState;
- if (ctxt->state != NULL) {
- tmp = xmlRelaxNGAddStates(ctxt, res,
- ctxt->state);
- ctxt->state = NULL;
- if (tmp == 1)
- progress = 1;
- } else if (ctxt->states != NULL) {
- for (j = 0; j < ctxt->states->nbState; j++) {
- tmp = xmlRelaxNGAddStates(ctxt, res,
- ctxt->states->tabState[j]);
- if (tmp == 1)
- progress = 1;
- }
- if (states == NULL) {
- states = ctxt->states;
- } else {
- xmlRelaxNGFreeStates(ctxt,
- ctxt->states);
- }
- ctxt->states = NULL;
- }
- }
- }
- if (progress) {
- /*
- * Collect all the new nodes added at that step
- * and make them the new node set
- */
- if (res->nbState - base == 1) {
- ctxt->state = xmlRelaxNGCopyValidState(ctxt,
- res->
- tabState
- [base]);
- } else {
- if (states == NULL) {
- xmlRelaxNGNewStates(ctxt,
- res->nbState - base);
- states = ctxt->states;
- if (states == NULL) {
- progress = 0;
- break;
- }
- }
- states->nbState = 0;
- for (i = base; i < res->nbState; i++)
- xmlRelaxNGAddStates(ctxt, states,
- xmlRelaxNGCopyValidState
- (ctxt, res->tabState[i]));
- ctxt->states = states;
- }
- }
- } while (progress == 1);
- if (states != NULL) {
- xmlRelaxNGFreeStates(ctxt, states);
- }
- ctxt->states = res;
- ctxt->flags = oldflags;
-#if 0
- /*
- * errors may have to be propagated back...
- */
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
-#endif
- ret = 0;
- break;
- }
- case XML_RELAXNG_CHOICE:{
- xmlRelaxNGDefinePtr list = NULL;
- xmlRelaxNGStatesPtr states = NULL;
-
- node = xmlRelaxNGSkipIgnored(ctxt, node);
-
- errNr = ctxt->errNr;
- if ((define->dflags & IS_TRIABLE) && (define->data != NULL) &&
- (node != NULL)) {
- /*
- * node == NULL can't be optimized since IS_TRIABLE
- * doesn't account for choice which may lead to
- * only attributes.
- */
- xmlHashTablePtr triage =
- (xmlHashTablePtr) define->data;
-
- /*
- * Something we can optimize cleanly there is only one
- * possble branch out !
- */
- if ((node->type == XML_TEXT_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)) {
- list =
- xmlHashLookup2(triage, BAD_CAST "#text", NULL);
- } else if (node->type == XML_ELEMENT_NODE) {
- if (node->ns != NULL) {
- list = xmlHashLookup2(triage, node->name,
- node->ns->href);
- if (list == NULL)
- list =
- xmlHashLookup2(triage, BAD_CAST "#any",
- node->ns->href);
- } else
- list =
- xmlHashLookup2(triage, node->name, NULL);
- if (list == NULL)
- list =
- xmlHashLookup2(triage, BAD_CAST "#any",
- NULL);
- }
- if (list == NULL) {
- ret = -1;
- VALID_ERR2(XML_RELAXNG_ERR_ELEMWRONG, node->name);
- break;
- }
- ret = xmlRelaxNGValidateDefinition(ctxt, list);
- if (ret == 0) {
- }
- break;
- }
-
- list = define->content;
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
-
- while (list != NULL) {
- oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state);
- ret = xmlRelaxNGValidateDefinition(ctxt, list);
- if (ret == 0) {
- if (states == NULL) {
- states = xmlRelaxNGNewStates(ctxt, 1);
- }
- if (ctxt->state != NULL) {
- xmlRelaxNGAddStates(ctxt, states, ctxt->state);
- } else if (ctxt->states != NULL) {
- for (i = 0; i < ctxt->states->nbState; i++) {
- xmlRelaxNGAddStates(ctxt, states,
- ctxt->states->
- tabState[i]);
- }
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->states = NULL;
- }
- } else {
- xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- }
- ctxt->state = oldstate;
- list = list->next;
- }
- if (states != NULL) {
- xmlRelaxNGFreeValidState(ctxt, oldstate);
- ctxt->states = states;
- ctxt->state = NULL;
- ret = 0;
- } else {
- ctxt->states = NULL;
- }
- ctxt->flags = oldflags;
- if (ret != 0) {
- if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
- xmlRelaxNGDumpValidError(ctxt);
- }
- } else {
- if (ctxt->errNr > errNr)
- xmlRelaxNGPopErrors(ctxt, errNr);
- }
- break;
- }
- case XML_RELAXNG_DEF:
- case XML_RELAXNG_GROUP:
- ret = xmlRelaxNGValidateDefinitionList(ctxt, define->content);
- break;
- case XML_RELAXNG_INTERLEAVE:
- ret = xmlRelaxNGValidateInterleave(ctxt, define);
- break;
- case XML_RELAXNG_ATTRIBUTE:
- ret = xmlRelaxNGValidateAttribute(ctxt, define);
- break;
- case XML_RELAXNG_START:
- case XML_RELAXNG_NOOP:
- case XML_RELAXNG_REF:
- case XML_RELAXNG_EXTERNALREF:
- case XML_RELAXNG_PARENTREF:
- ret = xmlRelaxNGValidateDefinition(ctxt, define->content);
- break;
- case XML_RELAXNG_DATATYPE:{
- xmlNodePtr child;
- xmlChar *content = NULL;
-
- child = node;
- while (child != NULL) {
- if (child->type == XML_ELEMENT_NODE) {
- VALID_ERR2(XML_RELAXNG_ERR_DATAELEM,
- node->parent->name);
- ret = -1;
- break;
- } else if ((child->type == XML_TEXT_NODE) ||
- (child->type == XML_CDATA_SECTION_NODE)) {
- content = xmlStrcat(content, child->content);
- }
- /* TODO: handle entities ... */
- child = child->next;
- }
- if (ret == -1) {
- if (content != NULL)
- xmlFree(content);
- break;
- }
- if (content == NULL) {
- content = xmlStrdup(BAD_CAST "");
- if (content == NULL) {
- xmlRngVErrMemory(ctxt, "validating\n");
- ret = -1;
- break;
- }
- }
- ret = xmlRelaxNGValidateDatatype(ctxt, content, define,
- ctxt->state->seq);
- if (ret == -1) {
- VALID_ERR2(XML_RELAXNG_ERR_DATATYPE, define->name);
- } else if (ret == 0) {
- ctxt->state->seq = NULL;
- }
- if (content != NULL)
- xmlFree(content);
- break;
- }
- case XML_RELAXNG_VALUE:{
- xmlChar *content = NULL;
- xmlChar *oldvalue;
- xmlNodePtr child;
-
- child = node;
- while (child != NULL) {
- if (child->type == XML_ELEMENT_NODE) {
- VALID_ERR2(XML_RELAXNG_ERR_VALELEM,
- node->parent->name);
- ret = -1;
- break;
- } else if ((child->type == XML_TEXT_NODE) ||
- (child->type == XML_CDATA_SECTION_NODE)) {
- content = xmlStrcat(content, child->content);
- }
- /* TODO: handle entities ... */
- child = child->next;
- }
- if (ret == -1) {
- if (content != NULL)
- xmlFree(content);
- break;
- }
- if (content == NULL) {
- content = xmlStrdup(BAD_CAST "");
- if (content == NULL) {
- xmlRngVErrMemory(ctxt, "validating\n");
- ret = -1;
- break;
- }
- }
- oldvalue = ctxt->state->value;
- ctxt->state->value = content;
- ret = xmlRelaxNGValidateValue(ctxt, define);
- ctxt->state->value = oldvalue;
- if (ret == -1) {
- VALID_ERR2(XML_RELAXNG_ERR_VALUE, define->name);
- } else if (ret == 0) {
- ctxt->state->seq = NULL;
- }
- if (content != NULL)
- xmlFree(content);
- break;
- }
- case XML_RELAXNG_LIST:{
- xmlChar *content;
- xmlNodePtr child;
- xmlChar *oldvalue, *oldendvalue;
- int len;
-
- /*
- * Make sure it's only text nodes
- */
-
- content = NULL;
- child = node;
- while (child != NULL) {
- if (child->type == XML_ELEMENT_NODE) {
- VALID_ERR2(XML_RELAXNG_ERR_LISTELEM,
- node->parent->name);
- ret = -1;
- break;
- } else if ((child->type == XML_TEXT_NODE) ||
- (child->type == XML_CDATA_SECTION_NODE)) {
- content = xmlStrcat(content, child->content);
- }
- /* TODO: handle entities ... */
- child = child->next;
- }
- if (ret == -1) {
- if (content != NULL)
- xmlFree(content);
- break;
- }
- if (content == NULL) {
- content = xmlStrdup(BAD_CAST "");
- if (content == NULL) {
- xmlRngVErrMemory(ctxt, "validating\n");
- ret = -1;
- break;
- }
- }
- len = xmlStrlen(content);
- oldvalue = ctxt->state->value;
- oldendvalue = ctxt->state->endvalue;
- ctxt->state->value = content;
- ctxt->state->endvalue = content + len;
- ret = xmlRelaxNGValidateValue(ctxt, define);
- ctxt->state->value = oldvalue;
- ctxt->state->endvalue = oldendvalue;
- if (ret == -1) {
- VALID_ERR(XML_RELAXNG_ERR_LIST);
- } else if ((ret == 0) && (node != NULL)) {
- ctxt->state->seq = node->next;
- }
- if (content != NULL)
- xmlFree(content);
- break;
- }
- case XML_RELAXNG_EXCEPT:
- case XML_RELAXNG_PARAM:
- TODO ret = -1;
- break;
- }
- ctxt->depth--;
-#ifdef DEBUG
- for (i = 0; i < ctxt->depth; i++)
- xmlGenericError(xmlGenericErrorContext, " ");
- xmlGenericError(xmlGenericErrorContext,
- "Validating %s ", xmlRelaxNGDefName(define));
- if (define->name != NULL)
- xmlGenericError(xmlGenericErrorContext, "%s ", define->name);
- if (ret == 0)
- xmlGenericError(xmlGenericErrorContext, "suceeded\n");
- else
- xmlGenericError(xmlGenericErrorContext, "failed\n");
-#endif
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateDefinition:
- * @ctxt: a Relax-NG validation context
- * @define: the definition to verify
- *
- * Validate the current node lists against the definition
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGDefinePtr define)
-{
- xmlRelaxNGStatesPtr states, res;
- int i, j, k, ret, oldflags;
-
- /*
- * We should NOT have both ctxt->state and ctxt->states
- */
- if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
- TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = NULL;
- }
-
- if ((ctxt->states == NULL) || (ctxt->states->nbState == 1)) {
- if (ctxt->states != NULL) {
- ctxt->state = ctxt->states->tabState[0];
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->states = NULL;
- }
- ret = xmlRelaxNGValidateState(ctxt, define);
- if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
- TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = NULL;
- }
- if ((ctxt->states != NULL) && (ctxt->states->nbState == 1)) {
- ctxt->state = ctxt->states->tabState[0];
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->states = NULL;
- }
- return (ret);
- }
-
- states = ctxt->states;
- ctxt->states = NULL;
- res = NULL;
- j = 0;
- oldflags = ctxt->flags;
- ctxt->flags |= FLAGS_IGNORABLE;
- for (i = 0; i < states->nbState; i++) {
- ctxt->state = states->tabState[i];
- ctxt->states = NULL;
- ret = xmlRelaxNGValidateState(ctxt, define);
- /*
- * We should NOT have both ctxt->state and ctxt->states
- */
- if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
- TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = NULL;
- }
- if (ret == 0) {
- if (ctxt->states == NULL) {
- if (res != NULL) {
- /* add the state to the container */
- xmlRelaxNGAddStates(ctxt, res, ctxt->state);
- ctxt->state = NULL;
- } else {
- /* add the state directly in states */
- states->tabState[j++] = ctxt->state;
- ctxt->state = NULL;
- }
- } else {
- if (res == NULL) {
- /* make it the new container and copy other results */
- res = ctxt->states;
- ctxt->states = NULL;
- for (k = 0; k < j; k++)
- xmlRelaxNGAddStates(ctxt, res,
- states->tabState[k]);
- } else {
- /* add all the new results to res and reff the container */
- for (k = 0; k < ctxt->states->nbState; k++)
- xmlRelaxNGAddStates(ctxt, res,
- ctxt->states->tabState[k]);
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->states = NULL;
- }
- }
- } else {
- if (ctxt->state != NULL) {
- xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = NULL;
- } else if (ctxt->states != NULL) {
- for (k = 0; k < ctxt->states->nbState; k++)
- xmlRelaxNGFreeValidState(ctxt,
- ctxt->states->tabState[k]);
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->states = NULL;
- }
- }
- }
- ctxt->flags = oldflags;
- if (res != NULL) {
- xmlRelaxNGFreeStates(ctxt, states);
- ctxt->states = res;
- ret = 0;
- } else if (j > 1) {
- states->nbState = j;
- ctxt->states = states;
- ret = 0;
- } else if (j == 1) {
- ctxt->state = states->tabState[0];
- xmlRelaxNGFreeStates(ctxt, states);
- ret = 0;
- } else {
- ret = -1;
- xmlRelaxNGFreeStates(ctxt, states);
- if (ctxt->states != NULL) {
- xmlRelaxNGFreeStates(ctxt, ctxt->states);
- ctxt->states = NULL;
- }
- }
- if ((ctxt->state != NULL) && (ctxt->states != NULL)) {
- TODO xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = NULL;
- }
- return (ret);
-}
-
-/**
- * xmlRelaxNGValidateDocument:
- * @ctxt: a Relax-NG validation context
- * @doc: the document
- *
- * Validate the given document
- *
- * Returns 0 if the validation succeeded or an error code.
- */
-static int
-xmlRelaxNGValidateDocument(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc)
-{
- int ret;
- xmlRelaxNGPtr schema;
- xmlRelaxNGGrammarPtr grammar;
- xmlRelaxNGValidStatePtr state;
- xmlNodePtr node;
-
- if ((ctxt == NULL) || (ctxt->schema == NULL) || (doc == NULL))
- return (-1);
-
- ctxt->errNo = XML_RELAXNG_OK;
- schema = ctxt->schema;
- grammar = schema->topgrammar;
- if (grammar == NULL) {
- VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
- return (-1);
- }
- state = xmlRelaxNGNewValidState(ctxt, NULL);
- ctxt->state = state;
- ret = xmlRelaxNGValidateDefinition(ctxt, grammar->start);
- if ((ctxt->state != NULL) && (state->seq != NULL)) {
- state = ctxt->state;
- node = state->seq;
- node = xmlRelaxNGSkipIgnored(ctxt, node);
- if (node != NULL) {
- if (ret != -1) {
- VALID_ERR(XML_RELAXNG_ERR_EXTRADATA);
- ret = -1;
- }
- }
- } else if (ctxt->states != NULL) {
- int i;
- int tmp = -1;
-
- for (i = 0; i < ctxt->states->nbState; i++) {
- state = ctxt->states->tabState[i];
- node = state->seq;
- node = xmlRelaxNGSkipIgnored(ctxt, node);
- if (node == NULL)
- tmp = 0;
- xmlRelaxNGFreeValidState(ctxt, state);
- }
- if (tmp == -1) {
- if (ret != -1) {
- VALID_ERR(XML_RELAXNG_ERR_EXTRADATA);
- ret = -1;
- }
- }
- }
- if (ctxt->state != NULL) {
- xmlRelaxNGFreeValidState(ctxt, ctxt->state);
- ctxt->state = NULL;
- }
- if (ret != 0)
- xmlRelaxNGDumpValidError(ctxt);
-#ifdef DEBUG
- else if (ctxt->errNr != 0) {
- ctxt->error(ctxt->userData,
- "%d Extra error messages left on stack !\n",
- ctxt->errNr);
- xmlRelaxNGDumpValidError(ctxt);
- }
-#endif
-#ifdef LIBXML_VALID_ENABLED
- if (ctxt->idref == 1) {
- xmlValidCtxt vctxt;
-
- memset(&vctxt, 0, sizeof(xmlValidCtxt));
- vctxt.valid = 1;
- vctxt.error = ctxt->error;
- vctxt.warning = ctxt->warning;
- vctxt.userData = ctxt->userData;
-
- if (xmlValidateDocumentFinal(&vctxt, doc) != 1)
- ret = -1;
- }
-#endif /* LIBXML_VALID_ENABLED */
- if ((ret == 0) && (ctxt->errNo != XML_RELAXNG_OK))
- ret = -1;
-
- return (ret);
-}
-
-/**
- * xmlRelaxNGCleanPSVI:
- * @node: an input element or document
- *
- * Call this routine to speed up XPath computation on static documents.
- * This stamps all the element nodes with the document order
- * Like for line information, the order is kept in the element->content
- * field, the value stored is actually - the node number (starting at -1)
- * to be able to differentiate from line numbers.
- *
- * Returns the number of elements found in the document or -1 in case
- * of error.
- */
-static void
-xmlRelaxNGCleanPSVI(xmlNodePtr node) {
- xmlNodePtr cur;
-
- if ((node == NULL) ||
- ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_DOCUMENT_NODE) &&
- (node->type != XML_HTML_DOCUMENT_NODE)))
- return;
- if (node->type == XML_ELEMENT_NODE)
- node->psvi = NULL;
-
- cur = node->children;
- while (cur != NULL) {
- if (cur->type == XML_ELEMENT_NODE) {
- cur->psvi = NULL;
- if (cur->children != NULL) {
- cur = cur->children;
- continue;
- }
- }
- if (cur->next != NULL) {
- cur = cur->next;
- continue;
- }
- do {
- cur = cur->parent;
- if (cur == NULL)
- break;
- if (cur == node) {
- cur = NULL;
- break;
- }
- if (cur->next != NULL) {
- cur = cur->next;
- break;
- }
- } while (cur != NULL);
- }
- return;
-}
-/************************************************************************
- * *
- * Validation interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlRelaxNGNewValidCtxt:
- * @schema: a precompiled XML RelaxNGs
- *
- * Create an XML RelaxNGs validation context based on the given schema
- *
- * Returns the validation context or NULL in case of error
- */
-xmlRelaxNGValidCtxtPtr
-xmlRelaxNGNewValidCtxt(xmlRelaxNGPtr schema)
-{
- xmlRelaxNGValidCtxtPtr ret;
-
- ret = (xmlRelaxNGValidCtxtPtr) xmlMalloc(sizeof(xmlRelaxNGValidCtxt));
- if (ret == NULL) {
- xmlRngVErrMemory(NULL, "building context\n");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlRelaxNGValidCtxt));
- ret->schema = schema;
- ret->error = xmlGenericError;
- ret->userData = xmlGenericErrorContext;
- ret->errNr = 0;
- ret->errMax = 0;
- ret->err = NULL;
- ret->errTab = NULL;
- if (schema != NULL)
- ret->idref = schema->idref;
- ret->states = NULL;
- ret->freeState = NULL;
- ret->freeStates = NULL;
- ret->errNo = XML_RELAXNG_OK;
- return (ret);
-}
-
-/**
- * xmlRelaxNGFreeValidCtxt:
- * @ctxt: the schema validation context
- *
- * Free the resources associated to the schema validation context
- */
-void
-xmlRelaxNGFreeValidCtxt(xmlRelaxNGValidCtxtPtr ctxt)
-{
- int k;
-
- if (ctxt == NULL)
- return;
- if (ctxt->states != NULL)
- xmlRelaxNGFreeStates(NULL, ctxt->states);
- if (ctxt->freeState != NULL) {
- for (k = 0; k < ctxt->freeState->nbState; k++) {
- xmlRelaxNGFreeValidState(NULL, ctxt->freeState->tabState[k]);
- }
- xmlRelaxNGFreeStates(NULL, ctxt->freeState);
- }
- if (ctxt->freeStates != NULL) {
- for (k = 0; k < ctxt->freeStatesNr; k++) {
- xmlRelaxNGFreeStates(NULL, ctxt->freeStates[k]);
- }
- xmlFree(ctxt->freeStates);
- }
- if (ctxt->errTab != NULL)
- xmlFree(ctxt->errTab);
- if (ctxt->elemTab != NULL) {
- xmlRegExecCtxtPtr exec;
-
- exec = xmlRelaxNGElemPop(ctxt);
- while (exec != NULL) {
- xmlRegFreeExecCtxt(exec);
- exec = xmlRelaxNGElemPop(ctxt);
- }
- xmlFree(ctxt->elemTab);
- }
- xmlFree(ctxt);
-}
-
-/**
- * xmlRelaxNGSetValidErrors:
- * @ctxt: a Relax-NG validation context
- * @err: the error function
- * @warn: the warning function
- * @ctx: the functions context
- *
- * Set the error and warning callback informations
- */
-void
-xmlRelaxNGSetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidityErrorFunc err,
- xmlRelaxNGValidityWarningFunc warn, void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->error = err;
- ctxt->warning = warn;
- ctxt->userData = ctx;
- ctxt->serror = NULL;
-}
-
-/**
- * xmlRelaxNGSetValidStructuredErrors:
- * @ctxt: a Relax-NG validation context
- * @serror: the structured error function
- * @ctx: the functions context
- *
- * Set the structured error callback
- */
-void
-xmlRelaxNGSetValidStructuredErrors(xmlRelaxNGValidCtxtPtr ctxt,
- xmlStructuredErrorFunc serror, void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->serror = serror;
- ctxt->error = NULL;
- ctxt->warning = NULL;
- ctxt->userData = ctx;
-}
-
-/**
- * xmlRelaxNGGetValidErrors:
- * @ctxt: a Relax-NG validation context
- * @err: the error function result
- * @warn: the warning function result
- * @ctx: the functions context result
- *
- * Get the error and warning callback informations
- *
- * Returns -1 in case of error and 0 otherwise
- */
-int
-xmlRelaxNGGetValidErrors(xmlRelaxNGValidCtxtPtr ctxt,
- xmlRelaxNGValidityErrorFunc * err,
- xmlRelaxNGValidityWarningFunc * warn, void **ctx)
-{
- if (ctxt == NULL)
- return (-1);
- if (err != NULL)
- *err = ctxt->error;
- if (warn != NULL)
- *warn = ctxt->warning;
- if (ctx != NULL)
- *ctx = ctxt->userData;
- return (0);
-}
-
-/**
- * xmlRelaxNGValidateDoc:
- * @ctxt: a Relax-NG validation context
- * @doc: a parsed document tree
- *
- * Validate a document tree in memory.
- *
- * Returns 0 if the document is valid, a positive error code
- * number otherwise and -1 in case of internal or API error.
- */
-int
-xmlRelaxNGValidateDoc(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc)
-{
- int ret;
-
- if ((ctxt == NULL) || (doc == NULL))
- return (-1);
-
- ctxt->doc = doc;
-
- ret = xmlRelaxNGValidateDocument(ctxt, doc);
- /*
- * Remove all left PSVI
- */
- xmlRelaxNGCleanPSVI((xmlNodePtr) doc);
-
- /*
- * TODO: build error codes
- */
- if (ret == -1)
- return (1);
- return (ret);
-}
-
-#define bottom_relaxng
-#include "elfgcchack.h"
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/rngparser.c b/external/libxml2_android/jni/libxml2/rngparser.c
deleted file mode 100644
index 7731d4dd..00000000
--- a/external/libxml2_android/jni/libxml2/rngparser.c
+++ /dev/null
@@ -1,1595 +0,0 @@
-/**
- * rngparser.c: parser for the Relax-NG compact syntax.
- *
- * Based on:
- * RELAX NG Compact Syntax
- * Committee Specification 21 November 2002
- * http://www.oasis-open.org/committees/relax-ng/compact-20021121.html
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-#include <string.h>
-
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/relaxng.h>
-#include <libxml/dict.h>
-
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-#define MAX_TOKEN 10
-
-typedef enum {
- CRNG_NONE = 0,
- CRNG_OP = 1,
- CRNG_KEYWORD,
- CRNG_IDENTIFIER,
- CRNG_LITERAL_SEGMENT,
- CRNG_CNAME,
- CRNG_QNAME,
- CRNG_NSNAME,
- CRNG_DOCUMENTATION
-} xmlCRNGTokType;
-
-typedef enum {
- CRNG_OKAY = 0,
- CRNG_MEMORY_ERROR,
- CRNG_INVALID_CHAR_ERROR,
- CRNG_END_ERROR,
- CRNG_ENCODING_ERROR
-} xmlCRNGError;
-
-typedef enum {
- XML_CRNG_ERROR = -1,
- XML_CRNG_OK = 0,
- XML_CRNG_EOF = 1
-} xmlCRelaxNGParserState;
-
-typedef struct _token _token;
-typedef _token *tokenPtr;
-struct _token {
- xmlCRNGTokType toktype;
- int toklen;
- const xmlChar *token;
- const xmlChar *prefix;
-};
-
-typedef struct _xmlCRelaxNGParserCtxt xmlCRelaxNGParserCtxt;
-typedef xmlCRelaxNGParserCtxt *xmlCRelaxNGParserCtxtPtr;
-struct _xmlCRelaxNGParserCtxt {
- void *userData; /* user specific data block */
- xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */
- xmlRelaxNGValidityWarningFunc warning;/* the callback in case of warning */
- xmlRelaxNGValidErr err;
-
- const xmlChar *compact;
- const xmlChar *end;
- const xmlChar *cur;
- int isElem;
- int lineno;
- const xmlChar *linestart;
- const char *filename;
-
- int nbTokens;
- int firstToken;
- _token tokens[MAX_TOKEN];
- int totalToken;
-
- xmlCRelaxNGParserState state;
-
- int nbErrors;
-
- xmlDocPtr res; /* the result */
- xmlNodePtr ins; /* the current insertion node */
-
- xmlNsPtr nsDef;
- tokenPtr token;
-
- xmlHashTablePtr namespaces;
- xmlHashTablePtr datatypes;
-
- /*
- * dictionary and keywords
- */
- xmlDictPtr dict;
- const xmlChar *key_attribute;
- const xmlChar *key_default;
- const xmlChar *key_datatypes;
- const xmlChar *key_div;
- const xmlChar *key_element;
- const xmlChar *key_empty;
- const xmlChar *key_external;
- const xmlChar *key_grammar;
- const xmlChar *key_include;
- const xmlChar *key_inherit;
- const xmlChar *key_list;
- const xmlChar *key_mixed;
- const xmlChar *key_namespace;
- const xmlChar *key_notAllowed;
- const xmlChar *key_parent;
- const xmlChar *key_start;
- const xmlChar *key_string;
- const xmlChar *key_text;
- const xmlChar *key_token;
- const xmlChar *key_equal;
- const xmlChar *key_orequal;
- const xmlChar *key_andequal;
- const xmlChar *key_combine;
- const xmlChar *key_or;
- const xmlChar *key_comma;
- const xmlChar *key_and;
- const xmlChar *key_choice;
- const xmlChar *key_group;
- const xmlChar *key_interleave;
- const xmlChar *key_ref;
- const xmlChar *key_define;
-
- /* results */
- xmlDocPtr doc; /* the resulting doc */
- xmlNodePtr insert; /* the insertion point */
- xmlAttrPtr attrs; /* pending attributes */
-};
-
-static const xmlChar *xmlCRelaxNGInherit = BAD_CAST "Inherit string";
-static const xmlChar *xmlCRelaxNGDefault = BAD_CAST "Default string";
-
-#define CUR_CHAR(l) xmlXPathCurrentChar(ctxt, &l)
-/**
- * IS_BLANK:
- * @c: an UNICODE value (int)
- *
- * Macro to check the following production in the XML spec:
- *
- * [3] S ::= (#x20 | #x9 | #xD | #xA)+
- */
-#ifndef IS_BLANK
-#define IS_BLANK(c) (((c) == 0x20) || ((c) == 0x09) || ((c) == 0xA) || \
- ((c) == 0x0D))
-#endif
-#define IS_SEPARATOR(c) (((c) == 0x20) || ((c) == 0x09) || ((c) == 0xA) || \
- ((c) == 0x0D) || (c == '#'))
-
-#define CRNG_ERROR0(X) \
- { xmlCRNGErr(ctxt, X, NULL); return(0); }
-#define CRNG_ERROR(X) \
- { xmlCRNGErr(ctxt, X, NULL); }
-
-#define CRNG_MEM_ERROR0() \
- { xmlCRNGErr(ctxt, CRNG_MEMORY_ERROR, NULL); return(0); }
-#define CRNG_MEM_ERROR() \
- { xmlCRNGErr(ctxt, CRNG_MEMORY_ERROR, NULL); }
-
-#define ERROR(str) xmlCRNGErr(ctxt, 0, str);
-
-static void
-xmlCRNGErr(xmlCRelaxNGParserCtxtPtr ctxt, int err_no, const char *err_msg) {
- const xmlChar *cur;
- xmlChar buffer[150];
- int i, l;
-
- if (ctxt != NULL) {
- if (ctxt->filename != NULL)
- fprintf(stderr, "%s:%d ", ctxt->filename, ctxt->lineno);
- }
- if (err_msg != NULL) {
- fprintf(stderr, "error: %s\n", err_msg);
- } else if (err_no != 0)
- fprintf(stderr, "error %d\n", err_no);
- cur = ctxt->cur;
- while ((*cur != '\n') && (*cur != '\r') && (ctxt->cur - cur < 80)) cur--;
- l = ctxt->cur - cur;
- cur++;
- for (i = 0; i < 100;i++) {
- if ((*cur == '\n') || (*cur == '\r')) break;
- buffer[i] = *cur++;
- }
- buffer[i] = 0;
- fprintf(stderr, "%s\n", buffer);
- for (i = 0; i < l;i++) buffer[i] = ' ';
- buffer[i++] = '^';
- buffer[i++] = 0;
- fprintf(stderr, "%s\n", buffer);
-}
-
-/**
- * IS_OP
- * @c: an UNICODE value (int)
- *
- * Macro to check for operator value
- */
-#ifndef IS_OP
-#define IS_OP(c) (((c) == ',') || ((c) == '&') || ((c) == '|') || \
- ((c) == '?') || ((c) == '-') || ((c) == '*') || \
- ((c) == '{') || ((c) == '}') || ((c) == '(') || \
- ((c) == ')') || ((c) == '+') || ((c) == '=') || \
- ((c) == ':'))
-#endif
-
-static int
-xmlCRNGIsKeyword(xmlCRelaxNGParserCtxtPtr ctxt, const xmlChar *str) {
- if ((str == ctxt->key_attribute) ||
- (str == ctxt->key_default) ||
- (str == ctxt->key_datatypes) ||
- (str == ctxt->key_div) ||
- (str == ctxt->key_element) ||
- (str == ctxt->key_empty) ||
- (str == ctxt->key_external) ||
- (str == ctxt->key_grammar) ||
- (str == ctxt->key_include) ||
- (str == ctxt->key_inherit) ||
- (str == ctxt->key_list) ||
- (str == ctxt->key_mixed) ||
- (str == ctxt->key_namespace) ||
- (str == ctxt->key_notAllowed) ||
- (str == ctxt->key_parent) ||
- (str == ctxt->key_start) ||
- (str == ctxt->key_string) ||
- (str == ctxt->key_text) ||
- (str == ctxt->key_token))
- return(1);
- return(0);
-
-}
-
-/*
- * xmlCRNGNextToken:
- * ctxt: a compact RNG parser context
- *
- * Scan the schema to get the next token
- *
- * Return 0 if success and -1 in case of error
- */
-
-static int
-xmlCRNGNextToken(xmlCRelaxNGParserCtxtPtr ctxt) {
- const xmlChar *cur;
- tokenPtr token;
-
- if (ctxt == NULL) return(-1);
- if (ctxt->nbTokens >= MAX_TOKEN) return(-1);
- token = &(ctxt->tokens[(ctxt->firstToken + ctxt->nbTokens) % MAX_TOKEN]);
- token->toktype = CRNG_NONE;
-
- if (ctxt->cur == NULL) {
- ctxt->cur = ctxt->compact;
- }
-retry:
- if (ctxt->cur >= ctxt->end) {
- ctxt->state = XML_CRNG_EOF;
- return(-1);
- }
- while ((ctxt->cur < ctxt->end) &&
- (IS_BLANK(*ctxt->cur))) ctxt->cur++;
- if (ctxt->cur >= ctxt->end) {
- ctxt->state = XML_CRNG_EOF;
- return(-1);
- }
- if (*ctxt->cur == '#') {
- cur = ctxt->cur;
- cur++;
- while ((cur < ctxt->end) && (*cur != '\n') && (*cur != '\r'))
- cur++;
- ctxt->cur = cur;
- goto retry;
- } else if (*ctxt->cur == '"') {
- /* string, check for '"""' */
- ctxt->cur++;
- if (ctxt->cur >= ctxt->end) goto eof;
- cur = ctxt->cur;
- if ((ctxt->end - ctxt->end > 2) &&
- (*cur == '"') && (cur[1] == '"')) {
- TODO
- } else {
- while ((cur < ctxt->end) && (*cur != '"')) cur++;
- if (cur >= ctxt->end) goto eof;
- token->toklen = cur - ctxt->cur;
- token->token = xmlDictLookup(ctxt->dict, ctxt->cur, token->toklen);
- token->toktype = CRNG_LITERAL_SEGMENT;
- token->prefix = NULL;
- cur++;
- ctxt->cur = cur;
- }
- } else if (*ctxt->cur == '\'') {
- /* string, check for "'''" */
- TODO
- } else if ((IS_OP(*ctxt->cur)) || (*ctxt->cur == ':')) {
- cur = ctxt->cur;
- cur++;
- if ((cur < ctxt->end) &&
- (((*cur == '=') &&
- ((*ctxt->cur == '|') || (*ctxt->cur == '&'))) ||
- ((*cur == '*') && (*ctxt->cur == ':')))) {
- token->toklen = 2;
- } else {
- token->toklen = 1;
- }
- token->token = xmlDictLookup(ctxt->dict, ctxt->cur, token->toklen);
- token->toktype = CRNG_OP;
- token->prefix = NULL;
- ctxt->cur += token->toklen;
- } else {
- int escape = 0;
-
- cur = ctxt->cur;
- if (*cur == '\\') {
- escape = 1;
- cur++;
- ctxt->cur++;
- }
- while ((cur < ctxt->end) &&
- (!(IS_SEPARATOR(*cur))) && (!(IS_OP(*cur)))) cur++;
-
- token->toklen = cur - ctxt->cur;
- token->token = xmlDictLookup(ctxt->dict, ctxt->cur, token->toklen);
- token->prefix = NULL;
- ctxt->cur = cur;
- if ((escape == 0) && (xmlCRNGIsKeyword(ctxt, token->token)))
- token->toktype = CRNG_KEYWORD;
- else {
- token->toktype = CRNG_IDENTIFIER;
- }
- if (*ctxt->cur == ':') {
- ctxt->cur++;
- if (*ctxt->cur == '*') {
- ctxt->cur++;
- token->toktype = CRNG_NSNAME;
- } else {
- cur = ctxt->cur;
- while ((cur < ctxt->end) &&
- (!(IS_SEPARATOR(*cur))) && (!(IS_OP(*cur)))) cur++;
- token->prefix = token->token;
- token->toklen = cur - ctxt->cur;
- token->token = xmlDictLookup(ctxt->dict, ctxt->cur,
- token->toklen);
- ctxt->cur = cur;
- if (xmlValidateNCName(token->token, 0) == 0)
- token->toktype = CRNG_QNAME;
- else {
- TODO /* sounds like an error ! */
- token->toktype = CRNG_IDENTIFIER;
- }
- }
- }
- }
- ctxt->nbTokens++;
- return(0);
-eof:
- ctxt->state = XML_CRNG_EOF;
- CRNG_ERROR(CRNG_END_ERROR);
- return(-1);
-}
-
-/**
- * xmlParseCRNGGetToken:
- * @ctxt: a compact RNG parser context
- * @no: the number of the token from 1 for the first one
- * and 2, 3 ... for read-ahead
- *
- * Token reading interface
- *
- * returns a pointer to the new token, or NULL in case of error or EOF
- */
-static tokenPtr
-xmlParseCRNGGetToken(xmlCRelaxNGParserCtxtPtr ctxt, int no) {
- tokenPtr ret;
- int res;
-
- if ((no <= 0) || (no >= MAX_TOKEN)) return(NULL);
- no--;
- while (ctxt->nbTokens <= no) {
- res = xmlCRNGNextToken(ctxt);
- if (res < 0)
- return(NULL);
- }
- ret = &(ctxt->tokens[(ctxt->firstToken + no) % MAX_TOKEN]);
- return(ret);
-}
-
-/**
- * xmlParseCRNGDropTokens:
- * @ctxt: a compact RNG parser context
- * @nr: the number of token marked as read
- *
- * mark a number of token as read and consumed.
- *
- * Returns -1 in case of error and 0 otherwise
- */
-static int
-xmlParseCRNGDropTokens(xmlCRelaxNGParserCtxtPtr ctxt, int nr) {
- if ((nr <= 0) || (nr >= MAX_TOKEN)) return(-1);
- while ((ctxt->nbTokens >0) && (nr > 0)) {
- ctxt->firstToken++;
- nr--;
- ctxt->nbTokens--;
- ctxt->totalToken++;
- if (ctxt->totalToken == 384)
- fprintf(stderr, "found\n");
- }
- ctxt->firstToken = ctxt->firstToken % MAX_TOKEN;
- return(0);
-}
-
-static void
-xmlParseCRNGTokenize(xmlCRelaxNGParserCtxtPtr ctxt) {
- tokenPtr token;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- while (token != NULL) {
- switch (token->toktype) {
- case CRNG_NONE: printf("none"); break;
- case CRNG_OP: printf("op"); break;
- case CRNG_KEYWORD: printf("keyword"); break;
- case CRNG_IDENTIFIER: printf("identifier"); break;
- case CRNG_LITERAL_SEGMENT: printf("literal"); break;
- case CRNG_CNAME: printf("cname"); break;
- case CRNG_QNAME: printf("qname"); break;
- case CRNG_NSNAME: printf("nsname"); break;
- case CRNG_DOCUMENTATION: printf("doc"); break;
- }
- printf(":%s\n", token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- token = xmlParseCRNGGetToken(ctxt, 1);
- }
-}
-
-/**
- * xmlParseCRNG_attribute:
- * @ctxt: a compact RNG parser context
- * @name: the attribute name
- * @ns: the attribute namespace
- * @value: the attribute value
- *
- * implements attribute of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_attribute(xmlCRelaxNGParserCtxtPtr ctxt,
- const xmlChar *name,
- xmlNsPtr ns,
- const xmlChar *value)
-{
- xmlAttrPtr attr;
-
- attr = xmlNewNsPropEatName(NULL, ns, (xmlChar *) name, value);
- if (attr == NULL) CRNG_MEM_ERROR0();
- attr->next = ctxt->attrs;
- if (ctxt->attrs != NULL)
- ctxt->attrs->prev = attr;
- ctxt->attrs = attr;
- return(0);
-}
-
-/**
- * xmlParseCRNG_bindPrefix:
- * @ctxt: a compact RNG parser context
- * @prefix: the namespace prefix or NULL
- * @namespace: the namespace name
- *
- * implements bindPrefix of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_bindPrefix(xmlCRelaxNGParserCtxtPtr ctxt,
- const xmlChar *prefix,
- const xmlChar *namespace)
-{
- int ret;
-
- if ((prefix != NULL) && (xmlStrEqual(prefix, BAD_CAST "xml")) &&
- (!xmlStrEqual(namespace, XML_XML_NAMESPACE))) {
- ERROR("The \"xml\" prefix must be bound to \"http://www.w3.org/XML/1998/namespace\"");
- return(-1);
- } else if ((xmlStrEqual(namespace, XML_XML_NAMESPACE)) &&
- (!xmlStrEqual(prefix, BAD_CAST "xml"))) {
- ERROR("The \"http://www.w3.org/XML/1998/namespace\" name must be bound to \"xml\" prefix");
- return(-1);
- }
- if (ctxt->namespaces == NULL)
- ctxt->namespaces = xmlHashCreate(10);
- if (ctxt->namespaces == NULL) {
- ERROR("Failed to create namespace hash table");
- return(-1);
- }
- if (prefix == NULL)
- ret = xmlHashAddEntry(ctxt->namespaces, xmlCRelaxNGDefault,
- (void *) namespace);
- else
- ret = xmlHashAddEntry(ctxt->namespaces, prefix,
- (void *) namespace);
- if (ret < 0) {
- if (prefix == NULL) {
- ERROR("Redefinition of default namespace");
- } else {
- ERROR("Redefinition of namespace");
- }
- return(-1);
- }
-
- return(0);
-}
-
-/**
- * xmlParseCRNG_bindDatatypePrefix:
- * @ctxt: a compact RNG parser context
- * @prefix: the datatype prefix
- * @namespace: the datatype identifier
- *
- * implements bindDatatypePrefix of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_bindDatatypePrefix(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- const xmlChar *prefix,
- const xmlChar *namespace)
-{
- int ret;
-
- if ((prefix != NULL) && (xmlStrEqual(prefix, BAD_CAST "xsd")) &&
- (!xmlStrEqual(namespace,
- BAD_CAST "http://www.w3.org/2001/XMLSchema-datatypes"))) {
- ERROR("The \"xsd\" prefix must be bound to \"http://www.w3.org/2001/XMLSchema-datatypes\"");
- return(-1);
- }
- if (ctxt->datatypes == NULL)
- ctxt->datatypes = xmlHashCreate(10);
- if (ctxt->datatypes == NULL) {
- ERROR("Failed to create namespace hash table");
- return(-1);
- }
- ret = xmlHashAddEntry(ctxt->datatypes, prefix,
- (void *) namespace);
- if (ret < 0) {
- ERROR("Redefinition of datatype");
- return(-1);
- }
- return(0);
-}
-
-/**
- * xmlParseCRNG_lookupPrefix:
- * @ctxt: a compact RNG parser context
- * @prefix: the namespace prefix or NULL
- *
- * implements lookupPrefix of the RELAX NG Compact Syntax Appendix A
- *
- * Returns the prefix in case of success or NULL in case of error
- */
-static const xmlChar *
-xmlParseCRNG_lookupPrefix(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- const xmlChar *prefix)
-{
- const xmlChar *ret;
-
- if (prefix == NULL)
- ret = xmlHashLookup(ctxt->namespaces, xmlCRelaxNGDefault);
- else
- ret = xmlHashLookup(ctxt->namespaces, prefix);
- return(ret);
-}
-
-/**
- * xmlParseCRNG_lookupDatatypePrefix:
- * @ctxt: a compact RNG parser context
- * @prefix: the namespace prefix or NULL
- *
- * implements lookupDatatypePrefix of the RELAX NG Compact Syntax Appendix A
- *
- * Returns the prefix in case of success or NULL in case of error
- */
-static const xmlChar *
-xmlParseCRNG_lookupDatatypePrefix(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- const xmlChar *prefix)
-{
- const xmlChar *ret;
- ret = xmlHashLookup(ctxt->datatypes, prefix);
- return(ret);
-}
-
-/**
- * xmlParseCRNG_datatypeAttributes:
- * @ctxt: a compact RNG parser context
- * @prefix: the namespace prefix or NULL
- *
- * implements lookupPrefix of the RELAX NG Compact Syntax Appendix A
- *
- * Returns the prefix in case of success or NULL in case of error
- */
-static xmlAttrPtr
-xmlParseCRNG_datatypeAttributes(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- const xmlChar *library, const xmlChar *type)
-{
- xmlAttrPtr lib, typ;
-
- lib = xmlNewNsProp(NULL, NULL, BAD_CAST "datatypeLibrary", library);
- if (lib == NULL) {
- CRNG_MEM_ERROR();
- return(NULL);
- }
- typ = xmlNewNsProp(NULL, NULL, BAD_CAST "type", type);
- if (typ == NULL) {
- CRNG_MEM_ERROR();
- return(lib);
- }
- lib->next = typ;
-
- return(lib);
-}
-
-/**
- * xmlParseCRNG_XXX:
- * @ctxt: a compact RNG parser context
- *
- * Parse XXX of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_XXX(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- return(0);
-}
-
-static int xmlParseCRNG_pattern(xmlCRelaxNGParserCtxtPtr ctxt);
-static int xmlParseCRNG_nameClass(xmlCRelaxNGParserCtxtPtr ctxt);
-
-/**
- * xmlParseCRNG_params:
- * @ctxt: a compact RNG parser context
- *
- * Parse params of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_params(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- TODO
- return(0);
-}
-
-/**
- * xmlParseCRNG_exceptNameClass:
- * @ctxt: a compact RNG parser context
- *
- * Parse exceptNameClass of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_exceptNameClass(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- tokenPtr token;
- xmlNodePtr insert = ctxt->insert, cur;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype == CRNG_OP) &&
- (token->token[0] == '-') && (token->token[1] == 0)) {
- xmlParseCRNGDropTokens(ctxt, 1);
- cur = xmlNewNode(NULL, BAD_CAST "except");
- if (cur == NULL) CRNG_MEM_ERROR0();
- if (ctxt->insert != NULL)
- xmlAddChild(ctxt->insert, cur);
- ctxt->insert = cur;
- xmlParseCRNG_nameClass(ctxt);
- }
- ctxt->insert = insert;
- return(0);
-}
-
-/**
- * xmlParseCRNG_innerNameClass:
- * @ctxt: a compact RNG parser context
- *
- * Parse innerNameClass of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_innerNameClass(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token;
- xmlNodePtr cur;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token->toktype == CRNG_OP) {
- if ((token->token[0] == '(') && (token->token[1] == 0)) {
- xmlParseCRNGDropTokens(ctxt, 1);
- xmlParseCRNG_nameClass(ctxt);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_OP) ||
- (token->token[0] != ')') || (token->token[1] != 0)) {
- ERROR("Expecting \")\" here");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- } else if ((token->token[0] == '*') && (token->token[1] == 0)) {
- xmlParseCRNGDropTokens(ctxt, 1);
- cur = xmlNewNode(NULL, BAD_CAST "anyName");
- if (cur == NULL) CRNG_MEM_ERROR0();
- if (ctxt->insert != NULL)
- xmlAddChild(ctxt->insert, cur);
- ctxt->insert = cur;
- xmlParseCRNG_exceptNameClass(ctxt);
- } else {
- TODO
- }
- } else if ((token->toktype == CRNG_IDENTIFIER) ||
- (token->toktype == CRNG_KEYWORD)) {
- cur = xmlNewNode(NULL, BAD_CAST "name");
- if (cur == NULL) CRNG_MEM_ERROR0();
- if (ctxt->isElem) {
- xmlSetProp(cur, BAD_CAST "ns",
- xmlParseCRNG_lookupPrefix(ctxt, NULL));
- } else {
- xmlSetProp(cur, BAD_CAST "ns", BAD_CAST "");
- }
- xmlNodeAddContent(cur, token->token);
- if (ctxt->insert != NULL)
- xmlAddChild(ctxt->insert, cur);
- ctxt->insert = cur;
- xmlParseCRNGDropTokens(ctxt, 1);
- } else if (token->toktype == CRNG_CNAME) {
- TODO
- } else if (token->toktype == CRNG_NSNAME) {
- cur = xmlNewNode(NULL, BAD_CAST "nsName");
- if (cur == NULL) CRNG_MEM_ERROR0();
- xmlSetProp(cur, BAD_CAST "ns",
- xmlParseCRNG_lookupPrefix(ctxt, token->token));
- if (ctxt->insert != NULL)
- xmlAddChild(ctxt->insert, cur);
- ctxt->insert = cur;
- xmlParseCRNGDropTokens(ctxt, 1);
- xmlParseCRNG_exceptNameClass(ctxt);
- } else {
- TODO /* probably an error */
- }
-
- return(0);
-}
-
-/**
- * xmlParseCRNG_nameClass:
- * @ctxt: a compact RNG parser context
- *
- * Parse nameClass of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_nameClass(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token;
- xmlNodePtr insert = ctxt->insert, last, choice;
-
- ctxt->insert = NULL;
- xmlParseCRNG_innerNameClass(ctxt);
- last = ctxt->insert;
- token = xmlParseCRNGGetToken(ctxt, 1);
- while ((token->toktype == CRNG_OP) &&
- (token->token[0] == '|') && (token->token[1] == 0)) {
- choice = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_choice);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (choice == NULL) CRNG_MEM_ERROR0();
- ctxt->insert = NULL;
- xmlParseCRNG_innerNameClass(ctxt);
- xmlAddChild(choice, last);
- xmlAddChild(choice, ctxt->insert);
- last = choice;
- token = xmlParseCRNGGetToken(ctxt, 1);
- }
- xmlAddChild(insert, last);
-
- ctxt->insert = insert;
- return(0);
-}
-
-/**
- * xmlParseCRNG_patternBlock:
- * @ctxt: a compact RNG parser context
- *
- * Parse a pattern block of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_patternBlock(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_OP) ||
- (token->token[0] != '{') || (token->token[1] != 0)) {
- ERROR("Expecting \"{\" here");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- xmlParseCRNG_pattern(ctxt);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_OP) ||
- (token->token[0] != '}') || (token->token[1] != 0)) {
- ERROR("Expecting \"}\" here");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- return(0);
-}
-
-/**
- * xmlParseCRNG_datatype:
- * @ctxt: a compact RNG parser context
- *
- * Parse datatype of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_datatype(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- tokenPtr token;
- xmlAttrPtr attrs = NULL;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token->toktype == CRNG_KEYWORD) {
- if (token->token == ctxt->key_string) {
- attrs = xmlParseCRNG_datatypeAttributes(ctxt, BAD_CAST "",
- token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- } else if (token->token == ctxt->key_token) {
- attrs = xmlParseCRNG_datatypeAttributes(ctxt, BAD_CAST "",
- token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- } else {
- TODO /* probably an error */
- }
- } else if (token->toktype == CRNG_LITERAL_SEGMENT) {
- ctxt->insert = xmlNewNode(NULL, BAD_CAST "value");
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- xmlNodeAddContent(ctxt->insert, token->token);
- } else if (token->toktype == CRNG_QNAME) {
- attrs = xmlParseCRNG_datatypeAttributes(ctxt,
- xmlParseCRNG_lookupDatatypePrefix(ctxt, token->prefix),
- token->token);
- } else {
- TODO
- }
- if (attrs != NULL) {
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token->toktype == CRNG_LITERAL_SEGMENT) {
- ctxt->insert = xmlNewNode(NULL, BAD_CAST "value");
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) {
- xmlFreePropList(attrs);
- CRNG_MEM_ERROR0();
- }
- ctxt->insert->properties = attrs;
- xmlNodeAddContent(ctxt->insert, token->token);
- } else if ((token->toktype == CRNG_OP) &&
- (token->token[0] == '{') && (token->token[0] == 0)) {
- ctxt->insert = xmlNewNode(NULL, BAD_CAST "data");
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) {
- xmlFreePropList(attrs);
- CRNG_MEM_ERROR0();
- }
- ctxt->insert->properties = attrs;
- xmlParseCRNG_params(ctxt);
- } else {
- ctxt->insert = xmlNewNode(NULL, BAD_CAST "data");
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) {
- xmlFreePropList(attrs);
- CRNG_MEM_ERROR0();
- }
- ctxt->insert->properties = attrs;
- xmlNodeAddContent(ctxt->insert, token->token);
- }
- }
- return(0);
-}
-
-/**
- * xmlParseCRNG_primary:
- * @ctxt: a compact RNG parser context
- *
- * Parse primary of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_primary(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- tokenPtr token;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token == NULL)
- return(0);
- if (token->toktype == CRNG_KEYWORD) {
- if (token->token == ctxt->key_element) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- ctxt->isElem = 1;
- xmlParseCRNG_nameClass(ctxt);
- xmlParseCRNG_patternBlock(ctxt);
- } else if (token->token == ctxt->key_attribute) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- ctxt->isElem = 0;
- xmlParseCRNG_nameClass(ctxt);
- xmlParseCRNG_patternBlock(ctxt);
- } else if (token->token == ctxt->key_mixed) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- xmlParseCRNG_patternBlock(ctxt);
- } else if (token->token == ctxt->key_list) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- xmlParseCRNG_patternBlock(ctxt);
- } else if (token->token == ctxt->key_empty) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- } else if (token->token == ctxt->key_notAllowed) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- } else if (token->token == ctxt->key_text) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- } else if (token->token == ctxt->key_parent) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- TODO
- } else if (token->token == ctxt->key_grammar) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- TODO
- } else if (token->token == ctxt->key_external) {
- ctxt->insert = xmlNewNode(NULL, BAD_CAST "externalRef");
- xmlParseCRNGDropTokens(ctxt, 1);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- TODO
- } else {
- TODO
- }
- } else if (token->toktype == CRNG_IDENTIFIER) {
- ctxt->insert = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_ref);
- if (ctxt->insert == NULL) CRNG_MEM_ERROR0();
- xmlSetProp(ctxt->insert, BAD_CAST "name", token->token);
- xmlParseCRNGDropTokens(ctxt, 1);
- } else if (token->toktype == CRNG_QNAME) {
- xmlParseCRNG_datatype(ctxt);
- } else if (token->toktype == CRNG_LITERAL_SEGMENT) {
- xmlParseCRNG_datatype(ctxt);
- } else if ((token->toktype == CRNG_OP) &&
- (token->token[0] == '(') && (token->token[1] == 0)) {
- xmlParseCRNGDropTokens(ctxt, 1);
- xmlParseCRNG_pattern(ctxt);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_OP) ||
- (token->token[0] != ')') || (token->token[1] != 0)) {
- ERROR("Expecting \")\" here");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- }
- return(0);
-}
-
-/**
- * xmlParseCRNG_particle:
- * @ctxt: a compact RNG parser context
- *
- * Parse particle of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_particle(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token;
- xmlNodePtr insert = ctxt->insert, res, tmp = NULL;
-
- ctxt->insert = NULL;
- xmlParseCRNG_primary(ctxt);
- res = ctxt->insert;
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token != NULL) && (token->toktype == CRNG_OP)) {
- if ((token->token[0] == '*') && (token->token[1] == 0)) {
- tmp = xmlNewNode(NULL, BAD_CAST "zeroOrMore");
- if (tmp == NULL) CRNG_MEM_ERROR0();
- } else if ((token->token[0] == '+') && (token->token[1] == 0)) {
- tmp = xmlNewNode(NULL, BAD_CAST "oneOrMore");
- if (tmp == NULL) CRNG_MEM_ERROR0();
- } else if ((token->token[0] == '?') && (token->token[1] == 0)) {
- tmp = xmlNewNode(NULL, BAD_CAST "optional");
- if (tmp == NULL) CRNG_MEM_ERROR0();
- }
- if (tmp != NULL) {
- xmlAddChild(tmp, res);
- res = tmp;
- xmlParseCRNGDropTokens(ctxt, 1);
- }
- }
- if (insert != NULL) {
- xmlAddChild(insert, res);
- ctxt->insert = insert;
- } else
- ctxt->insert = res;
- return(0);
-}
-
-/**
- * xmlParseCRNG_pattern:
- * @ctxt: a compact RNG parser context
- *
- * Parse pattern of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_pattern(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token;
- xmlNodePtr insert = ctxt->insert, prev, grp;
-
- ctxt->insert = NULL;
- xmlParseCRNG_particle(ctxt);
- prev = ctxt->insert;
- token = xmlParseCRNGGetToken(ctxt, 1);
- while ((prev != NULL) && (token != NULL) && (token->toktype == CRNG_OP)) {
- if (token->token == ctxt->key_or) {
- grp = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_choice);
- if (grp == NULL) CRNG_MEM_ERROR0();
- } else if (token->token == ctxt->key_and) {
- grp = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_interleave);
- if (grp == NULL) CRNG_MEM_ERROR0();
- } else if (token->token == ctxt->key_comma) {
- grp = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_group);
- if (grp == NULL) CRNG_MEM_ERROR0();
- } else
- break;
- xmlParseCRNGDropTokens(ctxt, 1);
- ctxt->insert = NULL;
- xmlParseCRNG_particle(ctxt);
- xmlAddChild(grp, prev);
- xmlAddChild(grp, ctxt->insert);
- prev = grp;
- token = xmlParseCRNGGetToken(ctxt, 1);
- }
- if (insert != NULL) {
- xmlAddChild(insert, prev);
- ctxt->insert = insert;
- } else {
- ctxt->insert = prev;
- }
-
- return(0);
-}
-
-/**
- * xmlParseCRNG_component:
- * @ctxt: a compact RNG parser context
- *
- * Parse component of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_component(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token, tok2;
- xmlNodePtr insert = ctxt->insert;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token == NULL)
- return(0);
- if (token->toktype == CRNG_KEYWORD) {
- if (token->token == ctxt->key_start) {
- xmlNodePtr start;
-
- start = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_start);
- if (start == NULL) CRNG_MEM_ERROR0();
- if (ctxt->insert != NULL)
- xmlAddChild(ctxt->insert, start);
- ctxt->insert = start;
- xmlParseCRNGDropTokens(ctxt, 1);
- token = xmlParseCRNGGetToken(ctxt, 1);
-
- if ((token->toktype == CRNG_OP) &&
- (token->token == ctxt->key_equal)) {
- } else if ((token->toktype == CRNG_OP) &&
- (token->token == ctxt->key_orequal)) {
- xmlParseCRNG_attribute(ctxt, ctxt->key_combine, NULL,
- BAD_CAST "choice");
- } else if ((token->toktype == CRNG_OP) &&
- (token->token == ctxt->key_andequal)) {
- xmlParseCRNG_attribute(ctxt, ctxt->key_combine, NULL,
- BAD_CAST "interleave");
- } else {
- ERROR("expecting \"=\" or \"&=\" or \"|=\" here")
- return(-1);
- }
- start->properties = ctxt->attrs;
- ctxt->attrs = NULL;
- xmlParseCRNGDropTokens(ctxt, 1);
- xmlParseCRNG_pattern(ctxt);
-
- } else if (token->token == ctxt->key_include) {
- TODO
- } else if (token->token == ctxt->key_div) {
- TODO
- } else {
- return(-1);
- }
- } else if (token->toktype == CRNG_IDENTIFIER) {
- xmlNodePtr define;
- const xmlChar *identifier;
-
- identifier = token->token;
- tok2 = xmlParseCRNGGetToken(ctxt, 2);
- if ((tok2->toktype == CRNG_OP) &&
- (tok2->token == ctxt->key_equal)) {
- } else if ((tok2->toktype == CRNG_OP) &&
- (tok2->token == ctxt->key_orequal)) {
- xmlParseCRNG_attribute(ctxt, ctxt->key_combine, NULL,
- BAD_CAST "choice");
- } else if ((tok2->toktype == CRNG_OP) &&
- (tok2->token == ctxt->key_andequal)) {
- xmlParseCRNG_attribute(ctxt, ctxt->key_combine, NULL,
- BAD_CAST "interleave");
- } else {
- ERROR("expecting \"=\" or \"&=\" or \"|=\" here")
- return(-1);
- }
- xmlParseCRNGDropTokens(ctxt, 2);
-
- define = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_define);
- if (define == NULL) CRNG_MEM_ERROR0();
- define->properties = ctxt->attrs;
- ctxt->attrs = NULL;
- xmlSetProp(define, BAD_CAST "name", identifier);
- if (ctxt->insert != NULL)
- xmlAddChild(ctxt->insert, define);
- ctxt->insert = define;
- xmlParseCRNG_pattern(ctxt);
- } else {
- return(-1);
- }
- ctxt->insert = insert;
- return(0);
-}
-
-/**
- * xmlParseCRNG_grammar:
- * @ctxt: a compact RNG parser context
- *
- * Parse grammar of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_grammar(xmlCRelaxNGParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
-{
- tokenPtr token;
- int ret;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- while (token != NULL) {
- ret = xmlParseCRNG_component(ctxt);
- if (ret != 0)
- break;
- token = xmlParseCRNGGetToken(ctxt, 1);
- }
- return(0);
-}
-
-/**
- * xmlParseCRNG_topLevelBody:
- * @ctxt: a compact RNG parser context
- *
- * Parse topLevelBody of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_topLevelBody(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token, tok2;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token->toktype == CRNG_KEYWORD) {
- if ((token->token == ctxt->key_start) ||
- (token->token == ctxt->key_include) ||
- (token->token == ctxt->key_div)) {
- xmlNodePtr grammar;
-
- grammar = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_grammar);
- if (grammar == NULL) CRNG_MEM_ERROR0();
- xmlDocSetRootElement(ctxt->doc, grammar);
- ctxt->insert = grammar;
-
- xmlParseCRNG_grammar(ctxt);
- } else {
- xmlParseCRNG_pattern(ctxt);
- }
- } else {
- tok2 = xmlParseCRNGGetToken(ctxt, 2);
- if ((tok2->toktype == CRNG_OP) &&
- ((tok2->token == ctxt->key_equal) ||
- (tok2->token == ctxt->key_orequal) ||
- (tok2->token == ctxt->key_andequal))) {
- xmlNodePtr grammar;
-
- grammar = xmlNewNodeEatName(NULL, (xmlChar *) ctxt->key_grammar);
- if (grammar == NULL) CRNG_MEM_ERROR0();
- xmlDocSetRootElement(ctxt->doc, grammar);
- ctxt->insert = grammar;
-
- xmlParseCRNG_grammar(ctxt);
- } else {
- xmlParseCRNG_pattern(ctxt);
- }
- }
- return(0);
-}
-
-/**
- * xmlParseCRNG_namespacePrefix:
- * @ctxt: a compact RNG parser context
- *
- * Parse namespacePrefix of the RELAX NG Compact Syntax Appendix A
- *
- * Returns the prefix or NULL in case of error
- */
-static const xmlChar *
-xmlParseCRNG_namespacePrefix(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token;
- const xmlChar *prefix = NULL;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token->toktype == CRNG_IDENTIFIER) {
- prefix = token->token;
- } else if (token->toktype == CRNG_OP) {
- if ((token->token[0] == '=') && (token->token[1] == 0))
- return(NULL);
- prefix = token->token;
- } else {
- ERROR("Expecting a namespace prefix");
- return(NULL);
- }
- xmlParseCRNGDropTokens(ctxt, 1);
-
- if (xmlStrEqual(prefix, BAD_CAST "xmlns")) {
- ERROR("Namespace prefix \"xmlns\" is forbidden");
- }
- return(prefix);
-}
-
-/**
- * xmlParseCRNG_decl:
- * @ctxt: a compact RNG parser context
- *
- * Parse decl of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_decl(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- const xmlChar *prefix = NULL;
- const xmlChar *namespace = NULL;
- tokenPtr token;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token->toktype != CRNG_KEYWORD) return(-1);
- if (token->token == ctxt->key_default) {
- xmlParseCRNGDropTokens(ctxt, 1);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_KEYWORD) ||
- (token->token != ctxt->key_namespace)) {
- ERROR("Expecting keyword \"namespace\" after \"default\"");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- prefix = xmlParseCRNG_namespacePrefix(ctxt);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_OP) ||
- (token->token[0] != '=') || (token->token[1] != 0)) {
- ERROR("Expecting keyword \"=\" here");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype == CRNG_KEYWORD) &&
- (token->token == ctxt->key_inherit)) {
- namespace = xmlCRelaxNGInherit;
- } else if (token->toktype == CRNG_LITERAL_SEGMENT) {
- namespace = token->token;
- } else {
- ERROR("Expecting an URI or \"inherit\" value");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- if (namespace != NULL) {
- if (prefix != NULL)
- xmlParseCRNG_bindPrefix(ctxt, prefix, namespace);
- xmlParseCRNG_bindPrefix(ctxt, NULL, namespace);
- }
- } else if (token->token == ctxt->key_namespace) {
- xmlParseCRNGDropTokens(ctxt, 1);
- prefix = xmlParseCRNG_namespacePrefix(ctxt);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_OP) ||
- (token->token[0] != '=') || (token->token[1] != 0)) {
- ERROR("Expecting keyword \"=\" here");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype == CRNG_KEYWORD) &&
- (token->token == ctxt->key_inherit)) {
- namespace = xmlCRelaxNGInherit;
- } else if (token->toktype == CRNG_LITERAL_SEGMENT) {
- namespace = token->token;
- } else {
- ERROR("Expecting an URI or \"inherit\" value");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- if (namespace != NULL)
- xmlParseCRNG_bindPrefix(ctxt, prefix, namespace);
- } else if (token->token == ctxt->key_datatypes) {
- xmlParseCRNGDropTokens(ctxt, 1);
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_KEYWORD) &&
- (token->toktype != CRNG_IDENTIFIER)) {
- ERROR("Expecting a datatype prefix identifier here");
- } else
- prefix = token->token;
- xmlParseCRNGDropTokens(ctxt, 1);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if ((token->toktype != CRNG_OP) ||
- (token->token[0] != '=') || (token->token[1] != 0)) {
- ERROR("Expecting keyword \"=\" here");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- token = xmlParseCRNGGetToken(ctxt, 1);
- if (token->toktype == CRNG_LITERAL_SEGMENT) {
- namespace = token->token;
- } else {
- ERROR("Expecting a literal value for the datatype identifier");
- }
- xmlParseCRNGDropTokens(ctxt, 1);
- if ((namespace != NULL) && (prefix != NULL))
- xmlParseCRNG_bindDatatypePrefix(ctxt, prefix, namespace);
- }
-
- return(0);
-}
-
-/**
- * xmlParseCRNG_preamble:
- * @ctxt: a compact RNG parser context
- *
- * Parse preamble of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_preamble(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- tokenPtr token;
-
- token = xmlParseCRNGGetToken(ctxt, 1);
- while (token != NULL) {
- if (token == NULL) return(-1);
- if ((token->toktype == CRNG_KEYWORD) &&
- ((token->token == ctxt->key_default) ||
- (token->token == ctxt->key_namespace) ||
- (token->token == ctxt->key_datatypes))) {
- xmlParseCRNG_decl(ctxt);
- } else
- break;
- token = xmlParseCRNGGetToken(ctxt, 1);
- }
- return(0);
-}
-
-/**
- * xmlParseCRNG_topLevel:
- * @ctxt: a compact RNG parser context
- *
- * Parse topLevel of the RELAX NG Compact Syntax Appendix A
- *
- * Returns 0 in case of success and -1 in case of error
- */
-static int
-xmlParseCRNG_topLevel(xmlCRelaxNGParserCtxtPtr ctxt)
-{
- xmlParseCRNG_preamble(ctxt);
- xmlParseCRNG_topLevelBody(ctxt);
- return(0);
-}
-
-/**
- * xmlConvertCRNG:
- * @schemas: pointer to the text of the compact schemas
- * @len: length of the schemas in bytes (or 0)
- * @encoding: encoding indicated by the context or NULL
- *
- * Compiles the schemas into the equivalent Relax-NG XML structure
- *
- * Returns the xmlDocPtr resulting from the compilation or
- * NULL in case of error
- */
-xmlDocPtr
-xmlConvertCRNG(const char *schemas, int len, const char *encoding) {
- struct _xmlCRelaxNGParserCtxt ctxt;
- xmlDocPtr ret = NULL;
-
- if (schemas == NULL) return(NULL);
- if (len <= 5) len = xmlStrlen((const unsigned char *) schemas);
- if (len <= 0) return(NULL);
-
- memset(&ctxt, 0, sizeof(ctxt));
- ctxt.compact = (const unsigned char *) schemas;
- ctxt.cur = (const unsigned char *) schemas;
- ctxt.end = (const unsigned char *) &schemas[len];
- ctxt.dict = xmlDictCreate();
- if (ctxt.dict == NULL)
- return(NULL);
- ctxt.doc = xmlNewDoc(NULL);
- if (ctxt.doc == NULL) {
- xmlDictFree(ctxt.dict);
- return(NULL);
- }
- ctxt.doc->dict = ctxt.dict;
- xmlDictReference(ctxt.dict);
-
- ctxt.nbTokens = 0;
- ctxt.firstToken = 0;
- ctxt.key_attribute = xmlDictLookup(ctxt.dict, BAD_CAST "attribute", -1);
- ctxt.key_default = xmlDictLookup(ctxt.dict, BAD_CAST "default", -1);
- ctxt.key_datatypes = xmlDictLookup(ctxt.dict, BAD_CAST "datatypes", -1);
- ctxt.key_div = xmlDictLookup(ctxt.dict, BAD_CAST "div", -1);
- ctxt.key_element = xmlDictLookup(ctxt.dict, BAD_CAST "element", -1);
- ctxt.key_empty = xmlDictLookup(ctxt.dict, BAD_CAST "empty", -1);
- ctxt.key_external = xmlDictLookup(ctxt.dict, BAD_CAST "external", -1);
- ctxt.key_grammar = xmlDictLookup(ctxt.dict, BAD_CAST "grammar", -1);
- ctxt.key_include = xmlDictLookup(ctxt.dict, BAD_CAST "include", -1);
- ctxt.key_inherit = xmlDictLookup(ctxt.dict, BAD_CAST "inherit", -1);
- ctxt.key_list = xmlDictLookup(ctxt.dict, BAD_CAST "list", -1);
- ctxt.key_mixed = xmlDictLookup(ctxt.dict, BAD_CAST "mixed", -1);
- ctxt.key_namespace = xmlDictLookup(ctxt.dict, BAD_CAST "namespace", -1);
- ctxt.key_notAllowed = xmlDictLookup(ctxt.dict, BAD_CAST "notAllowed", -1);
- ctxt.key_parent = xmlDictLookup(ctxt.dict, BAD_CAST "parent", -1);
- ctxt.key_start = xmlDictLookup(ctxt.dict, BAD_CAST "start", -1);
- ctxt.key_string = xmlDictLookup(ctxt.dict, BAD_CAST "string", -1);
- ctxt.key_text = xmlDictLookup(ctxt.dict, BAD_CAST "text", -1);
- ctxt.key_token = xmlDictLookup(ctxt.dict, BAD_CAST "token", -1);
- ctxt.key_equal = xmlDictLookup(ctxt.dict, BAD_CAST "=", 1);
- ctxt.key_orequal = xmlDictLookup(ctxt.dict, BAD_CAST "|=", 2);
- ctxt.key_andequal = xmlDictLookup(ctxt.dict, BAD_CAST "&=", 2);
- ctxt.key_combine = xmlDictLookup(ctxt.dict, BAD_CAST "&=", 2);
- ctxt.key_or = xmlDictLookup(ctxt.dict, BAD_CAST "|", 1);
- ctxt.key_comma = xmlDictLookup(ctxt.dict, BAD_CAST ",", 1);
- ctxt.key_and = xmlDictLookup(ctxt.dict, BAD_CAST "&", 1);
- ctxt.key_choice = xmlDictLookup(ctxt.dict, BAD_CAST "choice", -1);
- ctxt.key_group = xmlDictLookup(ctxt.dict, BAD_CAST "group", -1);
- ctxt.key_interleave = xmlDictLookup(ctxt.dict, BAD_CAST "interleave", -1);
- ctxt.key_ref = xmlDictLookup(ctxt.dict, BAD_CAST "ref", 3);
- ctxt.key_define = xmlDictLookup(ctxt.dict, BAD_CAST "define", 6);
-
- /* xmlConvertCRNGTokenize(&ctxt); */
- xmlConvertCRNG_topLevel(&ctxt);
-
- xmlDictFree(ctxt.dict);
-
- ret = ctxt.doc;
- return(ret);
-}
-
-/**
- * xmlConvertCRNGFile:
- * @URL: URL or filename for the resource
- * @encoding: encoding indicated by the context or NULL
- *
- * Compiles the schemas into the equivalent Relax-NG XML structure
- *
- * Returns the xmlDocPtr resulting from the compilation or
- * NULL in case of error
- */
-xmlDocPtr
-xmlConvertCRNGFile(const char *URL, const char *encoding) {
-}
-
-#ifdef STANDALONE
-const xmlChar *schemas =
-"# RELAX NG XML syntax specified in compact syntax.\n\
-\n\
-default namespace rng = \"http://relaxng.org/ns/structure/1.0\"\n\
-namespace local = \"\"\n\
-datatypes xsd = \"http://www.w3.org/2001/XMLSchema-datatypes\"\n\
-\n\
-start = pattern\n\
-\n\
-pattern =\n\
- element element { (nameQName | nameClass), (common & pattern+) }\n\
- | element attribute { (nameQName | nameClass), (common & pattern?) }\n\
- | element group|interleave|choice|optional\n\
- |zeroOrMore|oneOrMore|list|mixed { common & pattern+ }\n\
- | element ref|parentRef { nameNCName, common }\n\
- | element empty|notAllowed|text { common }\n\
- | element data { type, param*, (common & exceptPattern?) }\n\
- | element value { commonAttributes, type?, xsd:string }\n\
- | element externalRef { href, common }\n\
- | element grammar { common & grammarContent* }\n\
-\n\
-param = element param { commonAttributes, nameNCName, xsd:string }\n\
-\n\
-exceptPattern = element except { common & pattern+ }\n\
-\n\
-grammarContent =\n\
- definition\n\
- | element div { common & grammarContent* }\n\
- | element include { href, (common & includeContent*) }\n\
-\n\
-includeContent =\n\
- definition\n\
- | element div { common & includeContent* }\n\
-\n\
-definition =\n\
- element start { combine?, (common & pattern+) }\n\
- | element define { nameNCName, combine?, (common & pattern+) }\n\
-\n\
-combine = attribute combine { \"choice\" | \"interleave\" }\n\
-\n\
-nameClass =\n\
- element name { commonAttributes, xsd:QName }\n\
- | element anyName { common & exceptNameClass? }\n\
- | element nsName { common & exceptNameClass? }\n\
- | element choice { common & nameClass+ }\n\
-\n\
-exceptNameClass = element except { common & nameClass+ }\n\
-\n\
-nameQName = attribute name { xsd:QName }\n\
-nameNCName = attribute name { xsd:NCName }\n\
-href = attribute href { xsd:anyURI }\n\
-type = attribute type { xsd:NCName }\n\
-\n\
-common = commonAttributes, foreignElement*\n\
-\n\
-commonAttributes =\n\
- attribute ns { xsd:string }?,\n\
- attribute datatypeLibrary { xsd:anyURI }?,\n\
- foreignAttribute*\n\
-\n\
-foreignElement = element * - rng:* { (anyAttribute | text | anyElement)* }\n\
-foreignAttribute = attribute * - (rng:*|local:*) { text }\n\
-anyElement = element * { (anyAttribute | text | anyElement)* }\n\
-anyAttribute = attribute * { text }\n\
-";
-
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- xmlDocPtr res;
-
- res = xmlConvertCRNG(schemas, -1);
- if (res != NULL) {
- xmlDocFormatDump(stdout, res, 1);
- xmlFreeDoc(res);
- }
- return(0);
-}
-#endif
-#define bottom_rngparser
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/runsuite.c b/external/libxml2_android/jni/libxml2/runsuite.c
deleted file mode 100644
index aaab13e1..00000000
--- a/external/libxml2_android/jni/libxml2/runsuite.c
+++ /dev/null
@@ -1,1172 +0,0 @@
-/*
- * runsuite.c: C program to run libxml2 againts published testsuites
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-#include <stdio.h>
-
-#if !defined(_WIN32) || defined(__CYGWIN__)
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_XPATH_ENABLED)
-#include <libxml/xmlreader.h>
-
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-
-#include <libxml/relaxng.h>
-#include <libxml/xmlschemas.h>
-#include <libxml/xmlschemastypes.h>
-
-#define LOGFILE "runsuite.log"
-static FILE *logfile = NULL;
-static int verbose = 0;
-
-
-/************************************************************************
- * *
- * File name and path utilities *
- * *
- ************************************************************************/
-
-static int checkTestFile(const char *filename) {
- struct stat buf;
-
- if (stat(filename, &buf) == -1)
- return(0);
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
- if (!(buf.st_mode & _S_IFREG))
- return(0);
-#else
- if (!S_ISREG(buf.st_mode))
- return(0);
-#endif
-
- return(1);
-}
-
-static xmlChar *composeDir(const xmlChar *dir, const xmlChar *path) {
- char buf[500];
-
- if (dir == NULL) return(xmlStrdup(path));
- if (path == NULL) return(NULL);
-
- snprintf(buf, 500, "%s/%s", (const char *) dir, (const char *) path);
- return(xmlStrdup((const xmlChar *) buf));
-}
-
-/************************************************************************
- * *
- * Libxml2 specific routines *
- * *
- ************************************************************************/
-
-static int nb_tests = 0;
-static int nb_errors = 0;
-static int nb_internals = 0;
-static int nb_schematas = 0;
-static int nb_unimplemented = 0;
-static int nb_leaks = 0;
-static int extraMemoryFromResolver = 0;
-
-static int
-fatalError(void) {
- fprintf(stderr, "Exitting tests on fatal error\n");
- exit(1);
-}
-
-/*
- * that's needed to implement <resource>
- */
-#define MAX_ENTITIES 20
-static char *testEntitiesName[MAX_ENTITIES];
-static char *testEntitiesValue[MAX_ENTITIES];
-static int nb_entities = 0;
-static void resetEntities(void) {
- int i;
-
- for (i = 0;i < nb_entities;i++) {
- if (testEntitiesName[i] != NULL)
- xmlFree(testEntitiesName[i]);
- if (testEntitiesValue[i] != NULL)
- xmlFree(testEntitiesValue[i]);
- }
- nb_entities = 0;
-}
-static int addEntity(char *name, char *content) {
- if (nb_entities >= MAX_ENTITIES) {
- fprintf(stderr, "Too many entities defined\n");
- return(-1);
- }
- testEntitiesName[nb_entities] = name;
- testEntitiesValue[nb_entities] = content;
- nb_entities++;
- return(0);
-}
-
-/*
- * We need to trap calls to the resolver to not account memory for the catalog
- * which is shared to the current running test. We also don't want to have
- * network downloads modifying tests.
- */
-static xmlParserInputPtr
-testExternalEntityLoader(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr ret;
- int i;
-
- for (i = 0;i < nb_entities;i++) {
- if (!strcmp(testEntitiesName[i], URL)) {
- ret = xmlNewStringInputStream(ctxt,
- (const xmlChar *) testEntitiesValue[i]);
- if (ret != NULL) {
- ret->filename = (const char *)
- xmlStrdup((xmlChar *)testEntitiesName[i]);
- }
- return(ret);
- }
- }
- if (checkTestFile(URL)) {
- ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
- } else {
- int memused = xmlMemUsed();
- ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
- extraMemoryFromResolver += xmlMemUsed() - memused;
- }
-#if 0
- if (ret == NULL) {
- fprintf(stderr, "Failed to find resource %s\n", URL);
- }
-#endif
-
- return(ret);
-}
-
-/*
- * Trapping the error messages at the generic level to grab the equivalent of
- * stderr messages on CLI tools.
- */
-static char testErrors[32769];
-static int testErrorsSize = 0;
-
-static void test_log(const char *msg, ...) {
- va_list args;
- if (logfile != NULL) {
- fprintf(logfile, "\n------------\n");
- va_start(args, msg);
- vfprintf(logfile, msg, args);
- va_end(args);
- fprintf(logfile, "%s", testErrors);
- testErrorsSize = 0; testErrors[0] = 0;
- }
- if (verbose) {
- va_start(args, msg);
- vfprintf(stderr, msg, args);
- va_end(args);
- }
-}
-
-static void
-testErrorHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
- va_list args;
- int res;
-
- if (testErrorsSize >= 32768)
- return;
- va_start(args, msg);
- res = vsnprintf(&testErrors[testErrorsSize],
- 32768 - testErrorsSize,
- msg, args);
- va_end(args);
- if (testErrorsSize + res >= 32768) {
- /* buffer is full */
- testErrorsSize = 32768;
- testErrors[testErrorsSize] = 0;
- } else {
- testErrorsSize += res;
- }
- testErrors[testErrorsSize] = 0;
-}
-
-static xmlXPathContextPtr ctxtXPath;
-
-static void
-initializeLibxml2(void) {
- xmlGetWarningsDefaultValue = 0;
- xmlPedanticParserDefault(0);
-
- xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
- xmlInitParser();
- xmlSetExternalEntityLoader(testExternalEntityLoader);
- ctxtXPath = xmlXPathNewContext(NULL);
- /*
- * Deactivate the cache if created; otherwise we have to create/free it
- * for every test, since it will confuse the memory leak detection.
- * Note that normally this need not be done, since the cache is not
- * created until set explicitely with xmlXPathContextSetCache();
- * but for test purposes it is sometimes usefull to activate the
- * cache by default for the whole library.
- */
- if (ctxtXPath->cache != NULL)
- xmlXPathContextSetCache(ctxtXPath, 0, -1, 0);
- /* used as default nanemspace in xstc tests */
- xmlXPathRegisterNs(ctxtXPath, BAD_CAST "ts", BAD_CAST "TestSuite");
- xmlXPathRegisterNs(ctxtXPath, BAD_CAST "xlink",
- BAD_CAST "http://www.w3.org/1999/xlink");
- xmlSetGenericErrorFunc(NULL, testErrorHandler);
-#ifdef LIBXML_SCHEMAS_ENABLED
- xmlSchemaInitTypes();
- xmlRelaxNGInitTypes();
-#endif
-}
-
-static xmlNodePtr
-getNext(xmlNodePtr cur, const char *xpath) {
- xmlNodePtr ret = NULL;
- xmlXPathObjectPtr res;
- xmlXPathCompExprPtr comp;
-
- if ((cur == NULL) || (cur->doc == NULL) || (xpath == NULL))
- return(NULL);
- ctxtXPath->doc = cur->doc;
- ctxtXPath->node = cur;
- comp = xmlXPathCompile(BAD_CAST xpath);
- if (comp == NULL) {
- fprintf(stderr, "Failed to compile %s\n", xpath);
- return(NULL);
- }
- res = xmlXPathCompiledEval(comp, ctxtXPath);
- xmlXPathFreeCompExpr(comp);
- if (res == NULL)
- return(NULL);
- if ((res->type == XPATH_NODESET) &&
- (res->nodesetval != NULL) &&
- (res->nodesetval->nodeNr > 0) &&
- (res->nodesetval->nodeTab != NULL))
- ret = res->nodesetval->nodeTab[0];
- xmlXPathFreeObject(res);
- return(ret);
-}
-
-static xmlChar *
-getString(xmlNodePtr cur, const char *xpath) {
- xmlChar *ret = NULL;
- xmlXPathObjectPtr res;
- xmlXPathCompExprPtr comp;
-
- if ((cur == NULL) || (cur->doc == NULL) || (xpath == NULL))
- return(NULL);
- ctxtXPath->doc = cur->doc;
- ctxtXPath->node = cur;
- comp = xmlXPathCompile(BAD_CAST xpath);
- if (comp == NULL) {
- fprintf(stderr, "Failed to compile %s\n", xpath);
- return(NULL);
- }
- res = xmlXPathCompiledEval(comp, ctxtXPath);
- xmlXPathFreeCompExpr(comp);
- if (res == NULL)
- return(NULL);
- if (res->type == XPATH_STRING) {
- ret = res->stringval;
- res->stringval = NULL;
- }
- xmlXPathFreeObject(res);
- return(ret);
-}
-
-/************************************************************************
- * *
- * Test test/xsdtest/xsdtestsuite.xml *
- * *
- ************************************************************************/
-
-static int
-xsdIncorectTestCase(xmlNodePtr cur) {
- xmlNodePtr test;
- xmlBufferPtr buf;
- xmlRelaxNGParserCtxtPtr pctxt;
- xmlRelaxNGPtr rng = NULL;
- int ret = 0, memt;
-
- cur = getNext(cur, "./incorrect[1]");
- if (cur == NULL) {
- return(0);
- }
-
- test = getNext(cur, "./*");
- if (test == NULL) {
- test_log("Failed to find test in correct line %ld\n",
- xmlGetLineNo(cur));
- return(1);
- }
-
- memt = xmlMemUsed();
- extraMemoryFromResolver = 0;
- /*
- * dump the schemas to a buffer, then reparse it and compile the schemas
- */
- buf = xmlBufferCreate();
- if (buf == NULL) {
- fprintf(stderr, "out of memory !\n");
- fatalError();
- }
- xmlNodeDump(buf, test->doc, test, 0, 0);
- pctxt = xmlRelaxNGNewMemParserCtxt((const char *)buf->content, buf->use);
- xmlRelaxNGSetParserErrors(pctxt,
- (xmlRelaxNGValidityErrorFunc) testErrorHandler,
- (xmlRelaxNGValidityWarningFunc) testErrorHandler,
- pctxt);
- rng = xmlRelaxNGParse(pctxt);
- xmlRelaxNGFreeParserCtxt(pctxt);
- if (rng != NULL) {
- test_log("Failed to detect incorect RNG line %ld\n",
- xmlGetLineNo(test));
- ret = 1;
- goto done;
- }
-
-done:
- if (buf != NULL)
- xmlBufferFree(buf);
- if (rng != NULL)
- xmlRelaxNGFree(rng);
- xmlResetLastError();
- if ((memt < xmlMemUsed()) && (extraMemoryFromResolver == 0)) {
- test_log("Validation of tests starting line %ld leaked %d\n",
- xmlGetLineNo(cur), xmlMemUsed() - memt);
- nb_leaks++;
- }
- return(ret);
-}
-
-static void
-installResources(xmlNodePtr tst, const xmlChar *base) {
- xmlNodePtr test;
- xmlBufferPtr buf;
- xmlChar *name, *content, *res;
-
- buf = xmlBufferCreate();
- if (buf == NULL) {
- fprintf(stderr, "out of memory !\n");
- fatalError();
- }
- xmlNodeDump(buf, tst->doc, tst, 0, 0);
-
- while (tst != NULL) {
- test = getNext(tst, "./*");
- if (test != NULL) {
- xmlBufferEmpty(buf);
- xmlNodeDump(buf, test->doc, test, 0, 0);
- name = getString(tst, "string(@name)");
- content = xmlStrdup(buf->content);
- if ((name != NULL) && (content != NULL)) {
- res = composeDir(base, name);
- xmlFree(name);
- addEntity((char *) res, (char *) content);
- } else {
- if (name != NULL) xmlFree(name);
- if (content != NULL) xmlFree(content);
- }
- }
- tst = getNext(tst, "following-sibling::resource[1]");
- }
- if (buf != NULL)
- xmlBufferFree(buf);
-}
-
-static void
-installDirs(xmlNodePtr tst, const xmlChar *base) {
- xmlNodePtr test;
- xmlChar *name, *res;
-
- name = getString(tst, "string(@name)");
- if (name == NULL)
- return;
- res = composeDir(base, name);
- xmlFree(name);
- if (res == NULL) {
- return;
- }
- /* Now process resources and subdir recursively */
- test = getNext(tst, "./resource[1]");
- if (test != NULL) {
- installResources(test, res);
- }
- test = getNext(tst, "./dir[1]");
- while (test != NULL) {
- installDirs(test, res);
- test = getNext(test, "following-sibling::dir[1]");
- }
- xmlFree(res);
-}
-
-static int
-xsdTestCase(xmlNodePtr tst) {
- xmlNodePtr test, tmp, cur;
- xmlBufferPtr buf;
- xmlDocPtr doc = NULL;
- xmlRelaxNGParserCtxtPtr pctxt;
- xmlRelaxNGValidCtxtPtr ctxt;
- xmlRelaxNGPtr rng = NULL;
- int ret = 0, mem, memt;
- xmlChar *dtd;
-
- resetEntities();
- testErrorsSize = 0; testErrors[0] = 0;
-
- tmp = getNext(tst, "./dir[1]");
- if (tmp != NULL) {
- installDirs(tmp, NULL);
- }
- tmp = getNext(tst, "./resource[1]");
- if (tmp != NULL) {
- installResources(tmp, NULL);
- }
-
- cur = getNext(tst, "./correct[1]");
- if (cur == NULL) {
- return(xsdIncorectTestCase(tst));
- }
-
- test = getNext(cur, "./*");
- if (test == NULL) {
- fprintf(stderr, "Failed to find test in correct line %ld\n",
- xmlGetLineNo(cur));
- return(1);
- }
-
- memt = xmlMemUsed();
- extraMemoryFromResolver = 0;
- /*
- * dump the schemas to a buffer, then reparse it and compile the schemas
- */
- buf = xmlBufferCreate();
- if (buf == NULL) {
- fprintf(stderr, "out of memory !\n");
- fatalError();
- }
- xmlNodeDump(buf, test->doc, test, 0, 0);
- pctxt = xmlRelaxNGNewMemParserCtxt((const char *)buf->content, buf->use);
- xmlRelaxNGSetParserErrors(pctxt,
- (xmlRelaxNGValidityErrorFunc) testErrorHandler,
- (xmlRelaxNGValidityWarningFunc) testErrorHandler,
- pctxt);
- rng = xmlRelaxNGParse(pctxt);
- xmlRelaxNGFreeParserCtxt(pctxt);
- if (extraMemoryFromResolver)
- memt = 0;
-
- if (rng == NULL) {
- test_log("Failed to parse RNGtest line %ld\n",
- xmlGetLineNo(test));
- nb_errors++;
- ret = 1;
- goto done;
- }
- /*
- * now scan all the siblings of correct to process the <valid> tests
- */
- tmp = getNext(cur, "following-sibling::valid[1]");
- while (tmp != NULL) {
- dtd = xmlGetProp(tmp, BAD_CAST "dtd");
- test = getNext(tmp, "./*");
- if (test == NULL) {
- fprintf(stderr, "Failed to find test in <valid> line %ld\n",
- xmlGetLineNo(tmp));
-
- } else {
- xmlBufferEmpty(buf);
- if (dtd != NULL)
- xmlBufferAdd(buf, dtd, -1);
- xmlNodeDump(buf, test->doc, test, 0, 0);
-
- /*
- * We are ready to run the test
- */
- mem = xmlMemUsed();
- extraMemoryFromResolver = 0;
- doc = xmlReadMemory((const char *)buf->content, buf->use,
- "test", NULL, 0);
- if (doc == NULL) {
- test_log("Failed to parse valid instance line %ld\n",
- xmlGetLineNo(tmp));
- nb_errors++;
- } else {
- nb_tests++;
- ctxt = xmlRelaxNGNewValidCtxt(rng);
- xmlRelaxNGSetValidErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) testErrorHandler,
- (xmlRelaxNGValidityWarningFunc) testErrorHandler,
- ctxt);
- ret = xmlRelaxNGValidateDoc(ctxt, doc);
- xmlRelaxNGFreeValidCtxt(ctxt);
- if (ret > 0) {
- test_log("Failed to validate valid instance line %ld\n",
- xmlGetLineNo(tmp));
- nb_errors++;
- } else if (ret < 0) {
- test_log("Internal error validating instance line %ld\n",
- xmlGetLineNo(tmp));
- nb_errors++;
- }
- xmlFreeDoc(doc);
- }
- xmlResetLastError();
- if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) {
- test_log("Validation of instance line %ld leaked %d\n",
- xmlGetLineNo(tmp), xmlMemUsed() - mem);
- xmlMemoryDump();
- nb_leaks++;
- }
- }
- if (dtd != NULL)
- xmlFree(dtd);
- tmp = getNext(tmp, "following-sibling::valid[1]");
- }
- /*
- * now scan all the siblings of correct to process the <invalid> tests
- */
- tmp = getNext(cur, "following-sibling::invalid[1]");
- while (tmp != NULL) {
- test = getNext(tmp, "./*");
- if (test == NULL) {
- fprintf(stderr, "Failed to find test in <invalid> line %ld\n",
- xmlGetLineNo(tmp));
-
- } else {
- xmlBufferEmpty(buf);
- xmlNodeDump(buf, test->doc, test, 0, 0);
-
- /*
- * We are ready to run the test
- */
- mem = xmlMemUsed();
- extraMemoryFromResolver = 0;
- doc = xmlReadMemory((const char *)buf->content, buf->use,
- "test", NULL, 0);
- if (doc == NULL) {
- test_log("Failed to parse valid instance line %ld\n",
- xmlGetLineNo(tmp));
- nb_errors++;
- } else {
- nb_tests++;
- ctxt = xmlRelaxNGNewValidCtxt(rng);
- xmlRelaxNGSetValidErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) testErrorHandler,
- (xmlRelaxNGValidityWarningFunc) testErrorHandler,
- ctxt);
- ret = xmlRelaxNGValidateDoc(ctxt, doc);
- xmlRelaxNGFreeValidCtxt(ctxt);
- if (ret == 0) {
- test_log("Failed to detect invalid instance line %ld\n",
- xmlGetLineNo(tmp));
- nb_errors++;
- } else if (ret < 0) {
- test_log("Internal error validating instance line %ld\n",
- xmlGetLineNo(tmp));
- nb_errors++;
- }
- xmlFreeDoc(doc);
- }
- xmlResetLastError();
- if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) {
- test_log("Validation of instance line %ld leaked %d\n",
- xmlGetLineNo(tmp), xmlMemUsed() - mem);
- xmlMemoryDump();
- nb_leaks++;
- }
- }
- tmp = getNext(tmp, "following-sibling::invalid[1]");
- }
-
-done:
- if (buf != NULL)
- xmlBufferFree(buf);
- if (rng != NULL)
- xmlRelaxNGFree(rng);
- xmlResetLastError();
- if ((memt != xmlMemUsed()) && (memt != 0)) {
- test_log("Validation of tests starting line %ld leaked %d\n",
- xmlGetLineNo(cur), xmlMemUsed() - memt);
- nb_leaks++;
- }
- return(ret);
-}
-
-static int
-xsdTestSuite(xmlNodePtr cur) {
- if (verbose) {
- xmlChar *doc = getString(cur, "string(documentation)");
-
- if (doc != NULL) {
- printf("Suite %s\n", doc);
- xmlFree(doc);
- }
- }
- cur = getNext(cur, "./testCase[1]");
- while (cur != NULL) {
- xsdTestCase(cur);
- cur = getNext(cur, "following-sibling::testCase[1]");
- }
-
- return(0);
-}
-
-static int
-xsdTest(void) {
- xmlDocPtr doc;
- xmlNodePtr cur;
- const char *filename = "test/xsdtest/xsdtestsuite.xml";
- int ret = 0;
-
- doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "Failed to parse %s\n", filename);
- return(-1);
- }
- printf("## XML Schemas datatypes test suite from James Clark\n");
-
- cur = xmlDocGetRootElement(doc);
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
- fprintf(stderr, "Unexpected format %s\n", filename);
- ret = -1;
- goto done;
- }
-
- cur = getNext(cur, "./testSuite[1]");
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
- fprintf(stderr, "Unexpected format %s\n", filename);
- ret = -1;
- goto done;
- }
- while (cur != NULL) {
- xsdTestSuite(cur);
- cur = getNext(cur, "following-sibling::testSuite[1]");
- }
-
-done:
- if (doc != NULL)
- xmlFreeDoc(doc);
- return(ret);
-}
-
-static int
-rngTestSuite(xmlNodePtr cur) {
- if (verbose) {
- xmlChar *doc = getString(cur, "string(documentation)");
-
- if (doc != NULL) {
- printf("Suite %s\n", doc);
- xmlFree(doc);
- } else {
- doc = getString(cur, "string(section)");
- if (doc != NULL) {
- printf("Section %s\n", doc);
- xmlFree(doc);
- }
- }
- }
- cur = getNext(cur, "./testSuite[1]");
- while (cur != NULL) {
- xsdTestSuite(cur);
- cur = getNext(cur, "following-sibling::testSuite[1]");
- }
-
- return(0);
-}
-
-static int
-rngTest1(void) {
- xmlDocPtr doc;
- xmlNodePtr cur;
- const char *filename = "test/relaxng/OASIS/spectest.xml";
- int ret = 0;
-
- doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "Failed to parse %s\n", filename);
- return(-1);
- }
- printf("## Relax NG test suite from James Clark\n");
-
- cur = xmlDocGetRootElement(doc);
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
- fprintf(stderr, "Unexpected format %s\n", filename);
- ret = -1;
- goto done;
- }
-
- cur = getNext(cur, "./testSuite[1]");
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
- fprintf(stderr, "Unexpected format %s\n", filename);
- ret = -1;
- goto done;
- }
- while (cur != NULL) {
- rngTestSuite(cur);
- cur = getNext(cur, "following-sibling::testSuite[1]");
- }
-
-done:
- if (doc != NULL)
- xmlFreeDoc(doc);
- return(ret);
-}
-
-static int
-rngTest2(void) {
- xmlDocPtr doc;
- xmlNodePtr cur;
- const char *filename = "test/relaxng/testsuite.xml";
- int ret = 0;
-
- doc = xmlReadFile(filename, NULL, XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "Failed to parse %s\n", filename);
- return(-1);
- }
- printf("## Relax NG test suite for libxml2\n");
-
- cur = xmlDocGetRootElement(doc);
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
- fprintf(stderr, "Unexpected format %s\n", filename);
- ret = -1;
- goto done;
- }
-
- cur = getNext(cur, "./testSuite[1]");
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSuite"))) {
- fprintf(stderr, "Unexpected format %s\n", filename);
- ret = -1;
- goto done;
- }
- while (cur != NULL) {
- xsdTestSuite(cur);
- cur = getNext(cur, "following-sibling::testSuite[1]");
- }
-
-done:
- if (doc != NULL)
- xmlFreeDoc(doc);
- return(ret);
-}
-
-/************************************************************************
- * *
- * Schemas test suites from W3C/NIST/MS/Sun *
- * *
- ************************************************************************/
-
-static int
-xstcTestInstance(xmlNodePtr cur, xmlSchemaPtr schemas,
- const xmlChar *spath, const char *base) {
- xmlChar *href = NULL;
- xmlChar *path = NULL;
- xmlChar *validity = NULL;
- xmlSchemaValidCtxtPtr ctxt = NULL;
- xmlDocPtr doc = NULL;
- int ret = 0, mem;
-
- xmlResetLastError();
- testErrorsSize = 0; testErrors[0] = 0;
- mem = xmlMemUsed();
- href = getString(cur,
- "string(ts:instanceDocument/@xlink:href)");
- if ((href == NULL) || (href[0] == 0)) {
- test_log("testGroup line %ld misses href for schemaDocument\n",
- xmlGetLineNo(cur));
- ret = -1;
- goto done;
- }
- path = xmlBuildURI(href, BAD_CAST base);
- if (path == NULL) {
- fprintf(stderr,
- "Failed to build path to schemas testGroup line %ld : %s\n",
- xmlGetLineNo(cur), href);
- ret = -1;
- goto done;
- }
- if (checkTestFile((const char *) path) <= 0) {
- test_log("schemas for testGroup line %ld is missing: %s\n",
- xmlGetLineNo(cur), path);
- ret = -1;
- goto done;
- }
- validity = getString(cur,
- "string(ts:expected/@validity)");
- if (validity == NULL) {
- fprintf(stderr, "instanceDocument line %ld misses expected validity\n",
- xmlGetLineNo(cur));
- ret = -1;
- goto done;
- }
- nb_tests++;
- doc = xmlReadFile((const char *) path, NULL, XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "instance %s fails to parse\n", path);
- ret = -1;
- nb_errors++;
- goto done;
- }
-
- ctxt = xmlSchemaNewValidCtxt(schemas);
- xmlSchemaSetValidErrors(ctxt,
- (xmlSchemaValidityErrorFunc) testErrorHandler,
- (xmlSchemaValidityWarningFunc) testErrorHandler,
- ctxt);
- ret = xmlSchemaValidateDoc(ctxt, doc);
-
- if (xmlStrEqual(validity, BAD_CAST "valid")) {
- if (ret > 0) {
- test_log("valid instance %s failed to validate against %s\n",
- path, spath);
- nb_errors++;
- } else if (ret < 0) {
- test_log("valid instance %s got internal error validating %s\n",
- path, spath);
- nb_internals++;
- nb_errors++;
- }
- } else if (xmlStrEqual(validity, BAD_CAST "invalid")) {
- if (ret == 0) {
- test_log("Failed to detect invalid instance %s against %s\n",
- path, spath);
- nb_errors++;
- }
- } else {
- test_log("instanceDocument line %ld has unexpected validity value%s\n",
- xmlGetLineNo(cur), validity);
- ret = -1;
- goto done;
- }
-
-done:
- if (href != NULL) xmlFree(href);
- if (path != NULL) xmlFree(path);
- if (validity != NULL) xmlFree(validity);
- if (ctxt != NULL) xmlSchemaFreeValidCtxt(ctxt);
- if (doc != NULL) xmlFreeDoc(doc);
- xmlResetLastError();
- if (mem != xmlMemUsed()) {
- test_log("Validation of tests starting line %ld leaked %d\n",
- xmlGetLineNo(cur), xmlMemUsed() - mem);
- nb_leaks++;
- }
- return(ret);
-}
-
-static int
-xstcTestGroup(xmlNodePtr cur, const char *base) {
- xmlChar *href = NULL;
- xmlChar *path = NULL;
- xmlChar *validity = NULL;
- xmlSchemaPtr schemas = NULL;
- xmlSchemaParserCtxtPtr ctxt;
- xmlNodePtr instance;
- int ret = 0, mem;
-
- xmlResetLastError();
- testErrorsSize = 0; testErrors[0] = 0;
- mem = xmlMemUsed();
- href = getString(cur,
- "string(ts:schemaTest/ts:schemaDocument/@xlink:href)");
- if ((href == NULL) || (href[0] == 0)) {
- test_log("testGroup line %ld misses href for schemaDocument\n",
- xmlGetLineNo(cur));
- ret = -1;
- goto done;
- }
- path = xmlBuildURI(href, BAD_CAST base);
- if (path == NULL) {
- test_log("Failed to build path to schemas testGroup line %ld : %s\n",
- xmlGetLineNo(cur), href);
- ret = -1;
- goto done;
- }
- if (checkTestFile((const char *) path) <= 0) {
- test_log("schemas for testGroup line %ld is missing: %s\n",
- xmlGetLineNo(cur), path);
- ret = -1;
- goto done;
- }
- validity = getString(cur,
- "string(ts:schemaTest/ts:expected/@validity)");
- if (validity == NULL) {
- test_log("testGroup line %ld misses expected validity\n",
- xmlGetLineNo(cur));
- ret = -1;
- goto done;
- }
- nb_tests++;
- if (xmlStrEqual(validity, BAD_CAST "valid")) {
- nb_schematas++;
- ctxt = xmlSchemaNewParserCtxt((const char *) path);
- xmlSchemaSetParserErrors(ctxt,
- (xmlSchemaValidityErrorFunc) testErrorHandler,
- (xmlSchemaValidityWarningFunc) testErrorHandler,
- ctxt);
- schemas = xmlSchemaParse(ctxt);
- xmlSchemaFreeParserCtxt(ctxt);
- if (schemas == NULL) {
- test_log("valid schemas %s failed to parse\n",
- path);
- ret = 1;
- nb_errors++;
- }
- if ((ret == 0) && (strstr(testErrors, "nimplemented") != NULL)) {
- test_log("valid schemas %s hit an unimplemented block\n",
- path);
- ret = 1;
- nb_unimplemented++;
- nb_errors++;
- }
- instance = getNext(cur, "./ts:instanceTest[1]");
- while (instance != NULL) {
- if (schemas != NULL) {
- xstcTestInstance(instance, schemas, path, base);
- } else {
- /*
- * We'll automatically mark the instances as failed
- * if the schema was broken.
- */
- nb_errors++;
- }
- instance = getNext(instance,
- "following-sibling::ts:instanceTest[1]");
- }
- } else if (xmlStrEqual(validity, BAD_CAST "invalid")) {
- nb_schematas++;
- ctxt = xmlSchemaNewParserCtxt((const char *) path);
- xmlSchemaSetParserErrors(ctxt,
- (xmlSchemaValidityErrorFunc) testErrorHandler,
- (xmlSchemaValidityWarningFunc) testErrorHandler,
- ctxt);
- schemas = xmlSchemaParse(ctxt);
- xmlSchemaFreeParserCtxt(ctxt);
- if (schemas != NULL) {
- test_log("Failed to detect error in schemas %s\n",
- path);
- nb_errors++;
- ret = 1;
- }
- if ((ret == 0) && (strstr(testErrors, "nimplemented") != NULL)) {
- nb_unimplemented++;
- test_log("invalid schemas %s hit an unimplemented block\n",
- path);
- ret = 1;
- nb_errors++;
- }
- } else {
- test_log("testGroup line %ld misses unexpected validity value%s\n",
- xmlGetLineNo(cur), validity);
- ret = -1;
- goto done;
- }
-
-done:
- if (href != NULL) xmlFree(href);
- if (path != NULL) xmlFree(path);
- if (validity != NULL) xmlFree(validity);
- if (schemas != NULL) xmlSchemaFree(schemas);
- xmlResetLastError();
- if ((mem != xmlMemUsed()) && (extraMemoryFromResolver == 0)) {
- test_log("Processing test line %ld %s leaked %d\n",
- xmlGetLineNo(cur), path, xmlMemUsed() - mem);
- nb_leaks++;
- }
- return(ret);
-}
-
-static int
-xstcMetadata(const char *metadata, const char *base) {
- xmlDocPtr doc;
- xmlNodePtr cur;
- xmlChar *contributor;
- xmlChar *name;
- int ret = 0;
-
- doc = xmlReadFile(metadata, NULL, XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "Failed to parse %s\n", metadata);
- return(-1);
- }
-
- cur = xmlDocGetRootElement(doc);
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testSet"))) {
- fprintf(stderr, "Unexpected format %s\n", metadata);
- return(-1);
- }
- contributor = xmlGetProp(cur, BAD_CAST "contributor");
- if (contributor == NULL) {
- contributor = xmlStrdup(BAD_CAST "Unknown");
- }
- name = xmlGetProp(cur, BAD_CAST "name");
- if (name == NULL) {
- name = xmlStrdup(BAD_CAST "Unknown");
- }
- printf("## %s test suite for Schemas version %s\n", contributor, name);
- xmlFree(contributor);
- xmlFree(name);
-
- cur = getNext(cur, "./ts:testGroup[1]");
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "testGroup"))) {
- fprintf(stderr, "Unexpected format %s\n", metadata);
- ret = -1;
- goto done;
- }
- while (cur != NULL) {
- xstcTestGroup(cur, base);
- cur = getNext(cur, "following-sibling::ts:testGroup[1]");
- }
-
-done:
- xmlFreeDoc(doc);
- return(ret);
-}
-
-/************************************************************************
- * *
- * The driver for the tests *
- * *
- ************************************************************************/
-
-int
-main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- int ret = 0;
- int old_errors, old_tests, old_leaks;
-
- logfile = fopen(LOGFILE, "w");
- if (logfile == NULL) {
- fprintf(stderr,
- "Could not open the log file, running in verbose mode\n");
- verbose = 1;
- }
- initializeLibxml2();
-
- if ((argc >= 2) && (!strcmp(argv[1], "-v")))
- verbose = 1;
-
-
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- xsdTest();
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
- else
- printf("Ran %d tests, %d errors, %d leaks\n",
- nb_tests - old_tests,
- nb_errors - old_errors,
- nb_leaks - old_leaks);
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- rngTest1();
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
- else
- printf("Ran %d tests, %d errors, %d leaks\n",
- nb_tests - old_tests,
- nb_errors - old_errors,
- nb_leaks - old_leaks);
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- rngTest2();
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
- else
- printf("Ran %d tests, %d errors, %d leaks\n",
- nb_tests - old_tests,
- nb_errors - old_errors,
- nb_leaks - old_leaks);
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- nb_internals = 0;
- nb_schematas = 0;
- xstcMetadata("xstc/Tests/Metadata/NISTXMLSchemaDatatypes.testSet",
- "xstc/Tests/Metadata/");
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests (%d schemata), no errors\n",
- nb_tests - old_tests, nb_schematas);
- else
- printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n",
- nb_tests - old_tests,
- nb_schematas,
- nb_errors - old_errors,
- nb_internals,
- nb_leaks - old_leaks);
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- nb_internals = 0;
- nb_schematas = 0;
- xstcMetadata("xstc/Tests/Metadata/SunXMLSchema1-0-20020116.testSet",
- "xstc/Tests/");
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests (%d schemata), no errors\n",
- nb_tests - old_tests, nb_schematas);
- else
- printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n",
- nb_tests - old_tests,
- nb_schematas,
- nb_errors - old_errors,
- nb_internals,
- nb_leaks - old_leaks);
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- nb_internals = 0;
- nb_schematas = 0;
- xstcMetadata("xstc/Tests/Metadata/MSXMLSchema1-0-20020116.testSet",
- "xstc/Tests/");
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests (%d schemata), no errors\n",
- nb_tests - old_tests, nb_schematas);
- else
- printf("Ran %d tests (%d schemata), %d errors (%d internals), %d leaks\n",
- nb_tests - old_tests,
- nb_schematas,
- nb_errors - old_errors,
- nb_internals,
- nb_leaks - old_leaks);
-
- if ((nb_errors == 0) && (nb_leaks == 0)) {
- ret = 0;
- printf("Total %d tests, no errors\n",
- nb_tests);
- } else {
- ret = 1;
- printf("Total %d tests, %d errors, %d leaks\n",
- nb_tests, nb_errors, nb_leaks);
- }
- xmlXPathFreeContext(ctxtXPath);
- xmlCleanupParser();
- xmlMemoryDump();
-
- if (logfile != NULL)
- fclose(logfile);
- return(ret);
-}
-#else /* !SCHEMAS */
-int
-main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- fprintf(stderr, "runsuite requires support for schemas and xpath in libxml2\n");
-}
-#endif
diff --git a/external/libxml2_android/jni/libxml2/runtest.c b/external/libxml2_android/jni/libxml2/runtest.c
deleted file mode 100644
index b2ce693b..00000000
--- a/external/libxml2_android/jni/libxml2/runtest.c
+++ /dev/null
@@ -1,4540 +0,0 @@
-/*
- * runtest.c: C program to run libxml2 regression tests without
- * requiring make or Python, and reducing platform dependancies
- * to a strict minimum.
- *
- * To compile on Unixes:
- * cc -o runtest `xml2-config --cflags` runtest.c `xml2-config --libs` -lpthread
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-#include <stdio.h>
-
-#if !defined(_WIN32) || defined(__CYGWIN__)
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-
-#ifdef LIBXML_OUTPUT_ENABLED
-#ifdef LIBXML_READER_ENABLED
-#include <libxml/xmlreader.h>
-#endif
-
-#ifdef LIBXML_XINCLUDE_ENABLED
-#include <libxml/xinclude.h>
-#endif
-
-#ifdef LIBXML_XPATH_ENABLED
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#ifdef LIBXML_XPTR_ENABLED
-#include <libxml/xpointer.h>
-#endif
-#endif
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#include <libxml/xmlschemas.h>
-#include <libxml/xmlschemastypes.h>
-#endif
-
-#ifdef LIBXML_PATTERN_ENABLED
-#include <libxml/pattern.h>
-#endif
-
-#ifdef LIBXML_C14N_ENABLED
-#include <libxml/c14n.h>
-#endif
-
-#ifdef LIBXML_HTML_ENABLED
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-
-/*
- * pseudo flag for the unification of HTML and XML tests
- */
-#define XML_PARSE_HTML 1 << 24
-#endif
-
-#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED)
-#include <libxml/globals.h>
-#include <libxml/threads.h>
-#include <libxml/parser.h>
-#include <libxml/catalog.h>
-#include <string.h>
-#endif
-
-/*
- * O_BINARY is just for Windows compatibility - if it isn't defined
- * on this system, avoid any compilation error
- */
-#ifdef O_BINARY
-#define RD_FLAGS O_RDONLY | O_BINARY
-#define WR_FLAGS O_WRONLY | O_CREAT | O_TRUNC | O_BINARY
-#else
-#define RD_FLAGS O_RDONLY
-#define WR_FLAGS O_WRONLY | O_CREAT | O_TRUNC
-#endif
-
-typedef int (*functest) (const char *filename, const char *result,
- const char *error, int options);
-
-typedef struct testDesc testDesc;
-typedef testDesc *testDescPtr;
-struct testDesc {
- const char *desc; /* descripton of the test */
- functest func; /* function implementing the test */
- const char *in; /* glob to path for input files */
- const char *out; /* output directory */
- const char *suffix;/* suffix for output files */
- const char *err; /* suffix for error output files */
- int options; /* parser options for the test */
-};
-
-static int update_results = 0;
-static int checkTestFile(const char *filename);
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-
-#include <windows.h>
-#include <io.h>
-
-typedef struct
-{
- size_t gl_pathc; /* Count of paths matched so far */
- char **gl_pathv; /* List of matched pathnames. */
- size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */
-} glob_t;
-
-#define GLOB_DOOFFS 0
-static int glob(const char *pattern, int flags,
- int errfunc(const char *epath, int eerrno),
- glob_t *pglob) {
- glob_t *ret;
- WIN32_FIND_DATA FindFileData;
- HANDLE hFind;
- unsigned int nb_paths = 0;
- char directory[500];
- int len;
-
- if ((pattern == NULL) || (pglob == NULL)) return(-1);
-
- strncpy(directory, pattern, 499);
- for (len = strlen(directory);len >= 0;len--) {
- if (directory[len] == '/') {
- len++;
- directory[len] = 0;
- break;
- }
- }
- if (len <= 0)
- len = 0;
-
-
- ret = pglob;
- memset(ret, 0, sizeof(glob_t));
-
- hFind = FindFirstFileA(pattern, &FindFileData);
- if (hFind == INVALID_HANDLE_VALUE)
- return(0);
- nb_paths = 20;
- ret->gl_pathv = (char **) malloc(nb_paths * sizeof(char *));
- if (ret->gl_pathv == NULL) {
- FindClose(hFind);
- return(-1);
- }
- strncpy(directory + len, FindFileData.cFileName, 499 - len);
- ret->gl_pathv[ret->gl_pathc] = strdup(directory);
- if (ret->gl_pathv[ret->gl_pathc] == NULL)
- goto done;
- ret->gl_pathc++;
- while(FindNextFileA(hFind, &FindFileData)) {
- if (FindFileData.cFileName[0] == '.')
- continue;
- if (ret->gl_pathc + 2 > nb_paths) {
- char **tmp = realloc(ret->gl_pathv, nb_paths * 2 * sizeof(char *));
- if (tmp == NULL)
- break;
- ret->gl_pathv = tmp;
- nb_paths *= 2;
- }
- strncpy(directory + len, FindFileData.cFileName, 499 - len);
- ret->gl_pathv[ret->gl_pathc] = strdup(directory);
- if (ret->gl_pathv[ret->gl_pathc] == NULL)
- break;
- ret->gl_pathc++;
- }
- ret->gl_pathv[ret->gl_pathc] = NULL;
-
-done:
- FindClose(hFind);
- return(0);
-}
-
-
-
-static void globfree(glob_t *pglob) {
- unsigned int i;
- if (pglob == NULL)
- return;
-
- for (i = 0;i < pglob->gl_pathc;i++) {
- if (pglob->gl_pathv[i] != NULL)
- free(pglob->gl_pathv[i]);
- }
-}
-
-#else
-#include <glob.h>
-#endif
-
-/************************************************************************
- * *
- * Libxml2 specific routines *
- * *
- ************************************************************************/
-
-static int nb_tests = 0;
-static int nb_errors = 0;
-static int nb_leaks = 0;
-static int extraMemoryFromResolver = 0;
-
-static int
-fatalError(void) {
- fprintf(stderr, "Exitting tests on fatal error\n");
- exit(1);
-}
-
-/*
- * We need to trap calls to the resolver to not account memory for the catalog
- * which is shared to the current running test. We also don't want to have
- * network downloads modifying tests.
- */
-static xmlParserInputPtr
-testExternalEntityLoader(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr ret;
-
- if (checkTestFile(URL)) {
- ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
- } else {
- int memused = xmlMemUsed();
- ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
- extraMemoryFromResolver += xmlMemUsed() - memused;
- }
-
- return(ret);
-}
-
-/*
- * Trapping the error messages at the generic level to grab the equivalent of
- * stderr messages on CLI tools.
- */
-static char testErrors[32769];
-static int testErrorsSize = 0;
-
-static void XMLCDECL
-testErrorHandler(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
- va_list args;
- int res;
-
- if (testErrorsSize >= 32768)
- return;
- va_start(args, msg);
- res = vsnprintf(&testErrors[testErrorsSize],
- 32768 - testErrorsSize,
- msg, args);
- va_end(args);
- if (testErrorsSize + res >= 32768) {
- /* buffer is full */
- testErrorsSize = 32768;
- testErrors[testErrorsSize] = 0;
- } else {
- testErrorsSize += res;
- }
- testErrors[testErrorsSize] = 0;
-}
-
-static void XMLCDECL
-channel(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
- va_list args;
- int res;
-
- if (testErrorsSize >= 32768)
- return;
- va_start(args, msg);
- res = vsnprintf(&testErrors[testErrorsSize],
- 32768 - testErrorsSize,
- msg, args);
- va_end(args);
- if (testErrorsSize + res >= 32768) {
- /* buffer is full */
- testErrorsSize = 32768;
- testErrors[testErrorsSize] = 0;
- } else {
- testErrorsSize += res;
- }
- testErrors[testErrorsSize] = 0;
-}
-
-/**
- * xmlParserPrintFileContext:
- * @input: an xmlParserInputPtr input
- *
- * Displays current context within the input content for error tracking
- */
-
-static void
-xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
- xmlGenericErrorFunc chanl, void *data ) {
- const xmlChar *cur, *base;
- unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */
- xmlChar content[81]; /* space for 80 chars + line terminator */
- xmlChar *ctnt;
-
- if (input == NULL) return;
- cur = input->cur;
- base = input->base;
- /* skip backwards over any end-of-lines */
- while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) {
- cur--;
- }
- n = 0;
- /* search backwards for beginning-of-line (to max buff size) */
- while ((n++ < (sizeof(content)-1)) && (cur > base) &&
- (*(cur) != '\n') && (*(cur) != '\r'))
- cur--;
- if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
- /* calculate the error position in terms of the current position */
- col = input->cur - cur;
- /* search forward for end-of-line (to max buff size) */
- n = 0;
- ctnt = content;
- /* copy selected text to our buffer */
- while ((*cur != 0) && (*(cur) != '\n') &&
- (*(cur) != '\r') && (n < sizeof(content)-1)) {
- *ctnt++ = *cur++;
- n++;
- }
- *ctnt = 0;
- /* print out the selected text */
- chanl(data ,"%s\n", content);
- /* create blank line with problem pointer */
- n = 0;
- ctnt = content;
- /* (leave buffer space for pointer + line terminator) */
- while ((n<col) && (n++ < sizeof(content)-2) && (*ctnt != 0)) {
- if (*(ctnt) != '\t')
- *(ctnt) = ' ';
- ctnt++;
- }
- *ctnt++ = '^';
- *ctnt = 0;
- chanl(data ,"%s\n", content);
-}
-
-static void
-testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, xmlErrorPtr err) {
- char *file = NULL;
- int line = 0;
- int code = -1;
- int domain;
- void *data = NULL;
- const char *str;
- const xmlChar *name = NULL;
- xmlNodePtr node;
- xmlErrorLevel level;
- xmlParserInputPtr input = NULL;
- xmlParserInputPtr cur = NULL;
- xmlParserCtxtPtr ctxt = NULL;
-
- if (err == NULL)
- return;
-
- file = err->file;
- line = err->line;
- code = err->code;
- domain = err->domain;
- level = err->level;
- node = err->node;
- if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
- (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
- (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) {
- ctxt = err->ctxt;
- }
- str = err->message;
-
- if (code == XML_ERR_OK)
- return;
-
- if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
- name = node->name;
-
- /*
- * Maintain the compatibility with the legacy error handling
- */
- if (ctxt != NULL) {
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) &&
- (ctxt->inputNr > 1)) {
- cur = input;
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
- if (input != NULL) {
- if (input->filename)
- channel(data, "%s:%d: ", input->filename, input->line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: ", input->line);
- }
- } else {
- if (file != NULL)
- channel(data, "%s:%d: ", file, line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: ", line);
- }
- if (name != NULL) {
- channel(data, "element %s: ", name);
- }
- if (code == XML_ERR_OK)
- return;
- switch (domain) {
- case XML_FROM_PARSER:
- channel(data, "parser ");
- break;
- case XML_FROM_NAMESPACE:
- channel(data, "namespace ");
- break;
- case XML_FROM_DTD:
- case XML_FROM_VALID:
- channel(data, "validity ");
- break;
- case XML_FROM_HTML:
- channel(data, "HTML parser ");
- break;
- case XML_FROM_MEMORY:
- channel(data, "memory ");
- break;
- case XML_FROM_OUTPUT:
- channel(data, "output ");
- break;
- case XML_FROM_IO:
- channel(data, "I/O ");
- break;
- case XML_FROM_XINCLUDE:
- channel(data, "XInclude ");
- break;
- case XML_FROM_XPATH:
- channel(data, "XPath ");
- break;
- case XML_FROM_XPOINTER:
- channel(data, "parser ");
- break;
- case XML_FROM_REGEXP:
- channel(data, "regexp ");
- break;
- case XML_FROM_MODULE:
- channel(data, "module ");
- break;
- case XML_FROM_SCHEMASV:
- channel(data, "Schemas validity ");
- break;
- case XML_FROM_SCHEMASP:
- channel(data, "Schemas parser ");
- break;
- case XML_FROM_RELAXNGP:
- channel(data, "Relax-NG parser ");
- break;
- case XML_FROM_RELAXNGV:
- channel(data, "Relax-NG validity ");
- break;
- case XML_FROM_CATALOG:
- channel(data, "Catalog ");
- break;
- case XML_FROM_C14N:
- channel(data, "C14N ");
- break;
- case XML_FROM_XSLT:
- channel(data, "XSLT ");
- break;
- default:
- break;
- }
- if (code == XML_ERR_OK)
- return;
- switch (level) {
- case XML_ERR_NONE:
- channel(data, ": ");
- break;
- case XML_ERR_WARNING:
- channel(data, "warning : ");
- break;
- case XML_ERR_ERROR:
- channel(data, "error : ");
- break;
- case XML_ERR_FATAL:
- channel(data, "error : ");
- break;
- }
- if (code == XML_ERR_OK)
- return;
- if (str != NULL) {
- int len;
- len = xmlStrlen((const xmlChar *)str);
- if ((len > 0) && (str[len - 1] != '\n'))
- channel(data, "%s\n", str);
- else
- channel(data, "%s", str);
- } else {
- channel(data, "%s\n", "out of memory error");
- }
- if (code == XML_ERR_OK)
- return;
-
- if (ctxt != NULL) {
- xmlParserPrintFileContextInternal(input, channel, data);
- if (cur != NULL) {
- if (cur->filename)
- channel(data, "%s:%d: \n", cur->filename, cur->line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: \n", cur->line);
- xmlParserPrintFileContextInternal(cur, channel, data);
- }
- }
- if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
- (err->int1 < 100) &&
- (err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
- xmlChar buf[150];
- int i;
-
- channel(data, "%s\n", err->str1);
- for (i=0;i < err->int1;i++)
- buf[i] = ' ';
- buf[i++] = '^';
- buf[i] = 0;
- channel(data, "%s\n", buf);
- }
-}
-
-static void
-initializeLibxml2(void) {
- xmlGetWarningsDefaultValue = 0;
- xmlPedanticParserDefault(0);
-
- xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
- xmlInitParser();
- xmlSetExternalEntityLoader(testExternalEntityLoader);
- xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler);
-#ifdef LIBXML_SCHEMAS_ENABLED
- xmlSchemaInitTypes();
- xmlRelaxNGInitTypes();
-#endif
-}
-
-
-/************************************************************************
- * *
- * File name and path utilities *
- * *
- ************************************************************************/
-
-static const char *baseFilename(const char *filename) {
- const char *cur;
- if (filename == NULL)
- return(NULL);
- cur = &filename[strlen(filename)];
- while ((cur > filename) && (*cur != '/'))
- cur--;
- if (*cur == '/')
- return(cur + 1);
- return(cur);
-}
-
-static char *resultFilename(const char *filename, const char *out,
- const char *suffix) {
- const char *base;
- char res[500];
- char suffixbuff[500];
-
-/*************
- if ((filename[0] == 't') && (filename[1] == 'e') &&
- (filename[2] == 's') && (filename[3] == 't') &&
- (filename[4] == '/'))
- filename = &filename[5];
- *************/
-
- base = baseFilename(filename);
- if (suffix == NULL)
- suffix = ".tmp";
- if (out == NULL)
- out = "";
-
- strncpy(suffixbuff,suffix,499);
-#ifdef VMS
- if(strstr(base,".") && suffixbuff[0]=='.')
- suffixbuff[0]='_';
-#endif
-
- snprintf(res, 499, "%s%s%s", out, base, suffixbuff);
- res[499] = 0;
- return(strdup(res));
-}
-
-static int checkTestFile(const char *filename) {
- struct stat buf;
-
- if (stat(filename, &buf) == -1)
- return(0);
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
- if (!(buf.st_mode & _S_IFREG))
- return(0);
-#else
- if (!S_ISREG(buf.st_mode))
- return(0);
-#endif
-
- return(1);
-}
-
-static int compareFiles(const char *r1 /* temp */, const char *r2 /* result */) {
- int res1, res2;
- int fd1, fd2;
- char bytes1[4096];
- char bytes2[4096];
-
- if (update_results) {
- fd1 = open(r1, RD_FLAGS);
- if (fd1 < 0)
- return(-1);
- fd2 = open(r2, WR_FLAGS, 0644);
- if (fd2 < 0) {
- close(fd1);
- return(-1);
- }
- do {
- res1 = read(fd1, bytes1, 4096);
- if (res1 <= 0)
- break;
- res2 = write(fd2, bytes1, res1);
- if (res2 <= 0 || res2 != res1)
- break;
- } while (1);
- close(fd2);
- close(fd1);
- return(res1 != 0);
- }
-
- fd1 = open(r1, RD_FLAGS);
- if (fd1 < 0)
- return(-1);
- fd2 = open(r2, RD_FLAGS);
- if (fd2 < 0) {
- close(fd1);
- return(-1);
- }
- while (1) {
- res1 = read(fd1, bytes1, 4096);
- res2 = read(fd2, bytes2, 4096);
- if ((res1 != res2) || (res1 < 0)) {
- close(fd1);
- close(fd2);
- return(1);
- }
- if (res1 == 0)
- break;
- if (memcmp(bytes1, bytes2, res1) != 0) {
- close(fd1);
- close(fd2);
- return(1);
- }
- }
- close(fd1);
- close(fd2);
- return(0);
-}
-
-static int compareFileMem(const char *filename, const char *mem, int size) {
- int res;
- int fd;
- char bytes[4096];
- int idx = 0;
- struct stat info;
-
- if (update_results) {
- fd = open(filename, WR_FLAGS, 0644);
- if (fd < 0) {
- fprintf(stderr, "failed to open %s for writing", filename);
- return(-1);
- }
- res = write(fd, mem, size);
- close(fd);
- return(res != size);
- }
-
- if (stat(filename, &info) < 0) {
- fprintf(stderr, "failed to stat %s\n", filename);
- return(-1);
- }
- if (info.st_size != size) {
- fprintf(stderr, "file %s is %ld bytes, result is %d bytes\n",
- filename, (long) info.st_size, size);
- return(-1);
- }
- fd = open(filename, RD_FLAGS);
- if (fd < 0) {
- fprintf(stderr, "failed to open %s for reading", filename);
- return(-1);
- }
- while (idx < size) {
- res = read(fd, bytes, 4096);
- if (res <= 0)
- break;
- if (res + idx > size)
- break;
- if (memcmp(bytes, &mem[idx], res) != 0) {
- int ix;
- for (ix=0; ix<res; ix++)
- if (bytes[ix] != mem[idx+ix])
- break;
- fprintf(stderr,"Compare error at position %d\n", idx+ix);
- close(fd);
- return(1);
- }
- idx += res;
- }
- close(fd);
- if (idx != size) {
- fprintf(stderr,"Compare error index %d, size %d\n", idx, size);
- }
- return(idx != size);
-}
-
-static int loadMem(const char *filename, const char **mem, int *size) {
- int fd, res;
- struct stat info;
- char *base;
- int siz = 0;
- if (stat(filename, &info) < 0)
- return(-1);
- base = malloc(info.st_size + 1);
- if (base == NULL)
- return(-1);
- if ((fd = open(filename, RD_FLAGS)) < 0) {
- free(base);
- return(-1);
- }
- while ((res = read(fd, &base[siz], info.st_size - siz)) > 0) {
- siz += res;
- }
- close(fd);
-#if !defined(_WIN32)
- if (siz != info.st_size) {
- free(base);
- return(-1);
- }
-#endif
- base[siz] = 0;
- *mem = base;
- *size = siz;
- return(0);
-}
-
-static int unloadMem(const char *mem) {
- free((char *)mem);
- return(0);
-}
-
-/************************************************************************
- * *
- * Tests implementations *
- * *
- ************************************************************************/
-
-/************************************************************************
- * *
- * Parse to SAX based tests *
- * *
- ************************************************************************/
-
-static FILE *SAXdebug = NULL;
-
-/*
- * empty SAX block
- */
-static xmlSAXHandler emptySAXHandlerStruct = {
- NULL, /* internalSubset */
- NULL, /* isStandalone */
- NULL, /* hasInternalSubset */
- NULL, /* hasExternalSubset */
- NULL, /* resolveEntity */
- NULL, /* getEntity */
- NULL, /* entityDecl */
- NULL, /* notationDecl */
- NULL, /* attributeDecl */
- NULL, /* elementDecl */
- NULL, /* unparsedEntityDecl */
- NULL, /* setDocumentLocator */
- NULL, /* startDocument */
- NULL, /* endDocument */
- NULL, /* startElement */
- NULL, /* endElement */
- NULL, /* reference */
- NULL, /* characters */
- NULL, /* ignorableWhitespace */
- NULL, /* processingInstruction */
- NULL, /* comment */
- NULL, /* xmlParserWarning */
- NULL, /* xmlParserError */
- NULL, /* xmlParserError */
- NULL, /* getParameterEntity */
- NULL, /* cdataBlock; */
- NULL, /* externalSubset; */
- 1,
- NULL,
- NULL, /* startElementNs */
- NULL, /* endElementNs */
- NULL /* xmlStructuredErrorFunc */
-};
-
-static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
-static int callbacks = 0;
-static int quiet = 0;
-
-/**
- * isStandaloneDebug:
- * @ctxt: An XML parser context
- *
- * Is this document tagged standalone ?
- *
- * Returns 1 if true
- */
-static int
-isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return(0);
- fprintf(SAXdebug, "SAX.isStandalone()\n");
- return(0);
-}
-
-/**
- * hasInternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- *
- * Returns 1 if true
- */
-static int
-hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return(0);
- fprintf(SAXdebug, "SAX.hasInternalSubset()\n");
- return(0);
-}
-
-/**
- * hasExternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- *
- * Returns 1 if true
- */
-static int
-hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return(0);
- fprintf(SAXdebug, "SAX.hasExternalSubset()\n");
- return(0);
-}
-
-/**
- * internalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- */
-static void
-internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.internalSubset(%s,", name);
- if (ExternalID == NULL)
- fprintf(SAXdebug, " ,");
- else
- fprintf(SAXdebug, " %s,", ExternalID);
- if (SystemID == NULL)
- fprintf(SAXdebug, " )\n");
- else
- fprintf(SAXdebug, " %s)\n", SystemID);
-}
-
-/**
- * externalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- */
-static void
-externalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.externalSubset(%s,", name);
- if (ExternalID == NULL)
- fprintf(SAXdebug, " ,");
- else
- fprintf(SAXdebug, " %s,", ExternalID);
- if (SystemID == NULL)
- fprintf(SAXdebug, " )\n");
- else
- fprintf(SAXdebug, " %s)\n", SystemID);
-}
-
-/**
- * resolveEntityDebug:
- * @ctxt: An XML parser context
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * Special entity resolver, better left to the parser, it has
- * more context than the application layer.
- * The default behaviour is to NOT resolve the entities, in that case
- * the ENTITY_REF nodes are built in the structure (and the parameter
- * values).
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlParserInputPtr
-resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
-{
- callbacks++;
- if (quiet)
- return(NULL);
- /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
-
-
- fprintf(SAXdebug, "SAX.resolveEntity(");
- if (publicId != NULL)
- fprintf(SAXdebug, "%s", (char *)publicId);
- else
- fprintf(SAXdebug, " ");
- if (systemId != NULL)
- fprintf(SAXdebug, ", %s)\n", (char *)systemId);
- else
- fprintf(SAXdebug, ", )\n");
-/*********
- if (systemId != NULL) {
- return(xmlNewInputFromFile(ctxt, (char *) systemId));
- }
- *********/
- return(NULL);
-}
-
-/**
- * getEntityDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get an entity by name
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlEntityPtr
-getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (quiet)
- return(NULL);
- fprintf(SAXdebug, "SAX.getEntity(%s)\n", name);
- return(NULL);
-}
-
-/**
- * getParameterEntityDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get a parameter entity by name
- *
- * Returns the xmlParserInputPtr
- */
-static xmlEntityPtr
-getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (quiet)
- return(NULL);
- fprintf(SAXdebug, "SAX.getParameterEntity(%s)\n", name);
- return(NULL);
-}
-
-
-/**
- * entityDeclDebug:
- * @ctxt: An XML parser context
- * @name: the entity name
- * @type: the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed
- */
-static void
-entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
- const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
-{
-const xmlChar *nullstr = BAD_CAST "(null)";
- /* not all libraries handle printing null pointers nicely */
- if (publicId == NULL)
- publicId = nullstr;
- if (systemId == NULL)
- systemId = nullstr;
- if (content == NULL)
- content = (xmlChar *)nullstr;
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
- name, type, publicId, systemId, content);
-}
-
-/**
- * attributeDeclDebug:
- * @ctxt: An XML parser context
- * @name: the attribute name
- * @type: the attribute type
- *
- * An attribute definition has been parsed
- */
-static void
-attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem,
- const xmlChar * name, int type, int def,
- const xmlChar * defaultValue, xmlEnumerationPtr tree)
-{
- callbacks++;
- if (quiet)
- return;
- if (defaultValue == NULL)
- fprintf(SAXdebug, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n",
- elem, name, type, def);
- else
- fprintf(SAXdebug, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
- elem, name, type, def, defaultValue);
- xmlFreeEnumeration(tree);
-}
-
-/**
- * elementDeclDebug:
- * @ctxt: An XML parser context
- * @name: the element name
- * @type: the element type
- * @content: the element value (without processing).
- *
- * An element definition has been parsed
- */
-static void
-elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
- xmlElementContentPtr content ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.elementDecl(%s, %d, ...)\n",
- name, type);
-}
-
-/**
- * notationDeclDebug:
- * @ctxt: An XML parser context
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- */
-static void
-notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.notationDecl(%s, %s, %s)\n",
- (char *) name, (char *) publicId, (char *) systemId);
-}
-
-/**
- * unparsedEntityDeclDebug:
- * @ctxt: An XML parser context
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed
- */
-static void
-unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId,
- const xmlChar *notationName)
-{
-const xmlChar *nullstr = BAD_CAST "(null)";
-
- if (publicId == NULL)
- publicId = nullstr;
- if (systemId == NULL)
- systemId = nullstr;
- if (notationName == NULL)
- notationName = nullstr;
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
- (char *) name, (char *) publicId, (char *) systemId,
- (char *) notationName);
-}
-
-/**
- * setDocumentLocatorDebug:
- * @ctxt: An XML parser context
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
- * Everything is available on the context, so this is useless in our case.
- */
-static void
-setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.setDocumentLocator()\n");
-}
-
-/**
- * startDocumentDebug:
- * @ctxt: An XML parser context
- *
- * called when the document start being processed.
- */
-static void
-startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.startDocument()\n");
-}
-
-/**
- * endDocumentDebug:
- * @ctxt: An XML parser context
- *
- * called when the document end has been detected.
- */
-static void
-endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.endDocument()\n");
-}
-
-/**
- * startElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
-{
- int i;
-
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.startElement(%s", (char *) name);
- if (atts != NULL) {
- for (i = 0;(atts[i] != NULL);i++) {
- fprintf(SAXdebug, ", %s='", atts[i++]);
- if (atts[i] != NULL)
- fprintf(SAXdebug, "%s'", atts[i]);
- }
- }
- fprintf(SAXdebug, ")\n");
-}
-
-/**
- * endElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.endElement(%s)\n", (char *) name);
-}
-
-/**
- * charactersDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- * Question: how much at a time ???
- */
-static void
-charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- char output[40];
- int i;
-
- callbacks++;
- if (quiet)
- return;
- for (i = 0;(i<len) && (i < 30);i++)
- output[i] = ch[i];
- output[i] = 0;
-
- fprintf(SAXdebug, "SAX.characters(%s, %d)\n", output, len);
-}
-
-/**
- * referenceDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * called when an entity reference is detected.
- */
-static void
-referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.reference(%s)\n", name);
-}
-
-/**
- * ignorableWhitespaceDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @start: the first char in the string
- * @len: the number of xmlChar
- *
- * receiving some ignorable whitespaces from the parser.
- * Question: how much at a time ???
- */
-static void
-ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- char output[40];
- int i;
-
- callbacks++;
- if (quiet)
- return;
- for (i = 0;(i<len) && (i < 30);i++)
- output[i] = ch[i];
- output[i] = 0;
- fprintf(SAXdebug, "SAX.ignorableWhitespace(%s, %d)\n", output, len);
-}
-
-/**
- * processingInstructionDebug:
- * @ctxt: An XML parser context
- * @target: the target name
- * @data: the PI data's
- * @len: the number of xmlChar
- *
- * A processing instruction has been parsed.
- */
-static void
-processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
- const xmlChar *data)
-{
- callbacks++;
- if (quiet)
- return;
- if (data != NULL)
- fprintf(SAXdebug, "SAX.processingInstruction(%s, %s)\n",
- (char *) target, (char *) data);
- else
- fprintf(SAXdebug, "SAX.processingInstruction(%s, NULL)\n",
- (char *) target);
-}
-
-/**
- * cdataBlockDebug:
- * @ctx: the user data (XML parser context)
- * @value: The pcdata content
- * @len: the block length
- *
- * called when a pcdata block has been parsed
- */
-static void
-cdataBlockDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.pcdata(%.20s, %d)\n",
- (char *) value, len);
-}
-
-/**
- * commentDebug:
- * @ctxt: An XML parser context
- * @value: the comment content
- *
- * A comment has been parsed.
- */
-static void
-commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.comment(%s)\n", value);
-}
-
-/**
- * warningDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a warning messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (quiet)
- return;
- va_start(args, msg);
- fprintf(SAXdebug, "SAX.warning: ");
- vfprintf(SAXdebug, msg, args);
- va_end(args);
-}
-
-/**
- * errorDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a error messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (quiet)
- return;
- va_start(args, msg);
- fprintf(SAXdebug, "SAX.error: ");
- vfprintf(SAXdebug, msg, args);
- va_end(args);
-}
-
-/**
- * fatalErrorDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a fatalError messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (quiet)
- return;
- va_start(args, msg);
- fprintf(SAXdebug, "SAX.fatalError: ");
- vfprintf(SAXdebug, msg, args);
- va_end(args);
-}
-
-static xmlSAXHandler debugSAXHandlerStruct = {
- internalSubsetDebug,
- isStandaloneDebug,
- hasInternalSubsetDebug,
- hasExternalSubsetDebug,
- resolveEntityDebug,
- getEntityDebug,
- entityDeclDebug,
- notationDeclDebug,
- attributeDeclDebug,
- elementDeclDebug,
- unparsedEntityDeclDebug,
- setDocumentLocatorDebug,
- startDocumentDebug,
- endDocumentDebug,
- startElementDebug,
- endElementDebug,
- referenceDebug,
- charactersDebug,
- ignorableWhitespaceDebug,
- processingInstructionDebug,
- commentDebug,
- warningDebug,
- errorDebug,
- fatalErrorDebug,
- getParameterEntityDebug,
- cdataBlockDebug,
- externalSubsetDebug,
- 1,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-static xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
-
-/*
- * SAX2 specific callbacks
- */
-/**
- * startElementNsDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI,
- int nb_namespaces,
- const xmlChar **namespaces,
- int nb_attributes,
- int nb_defaulted,
- const xmlChar **attributes)
-{
- int i;
-
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.startElementNs(%s", (char *) localname);
- if (prefix == NULL)
- fprintf(SAXdebug, ", NULL");
- else
- fprintf(SAXdebug, ", %s", (char *) prefix);
- if (URI == NULL)
- fprintf(SAXdebug, ", NULL");
- else
- fprintf(SAXdebug, ", '%s'", (char *) URI);
- fprintf(SAXdebug, ", %d", nb_namespaces);
-
- if (namespaces != NULL) {
- for (i = 0;i < nb_namespaces * 2;i++) {
- fprintf(SAXdebug, ", xmlns");
- if (namespaces[i] != NULL)
- fprintf(SAXdebug, ":%s", namespaces[i]);
- i++;
- fprintf(SAXdebug, "='%s'", namespaces[i]);
- }
- }
- fprintf(SAXdebug, ", %d, %d", nb_attributes, nb_defaulted);
- if (attributes != NULL) {
- for (i = 0;i < nb_attributes * 5;i += 5) {
- if (attributes[i + 1] != NULL)
- fprintf(SAXdebug, ", %s:%s='", attributes[i + 1], attributes[i]);
- else
- fprintf(SAXdebug, ", %s='", attributes[i]);
- fprintf(SAXdebug, "%.4s...', %d", attributes[i + 3],
- (int)(attributes[i + 4] - attributes[i + 3]));
- }
- }
- fprintf(SAXdebug, ")\n");
-}
-
-/**
- * endElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(SAXdebug, "SAX.endElementNs(%s", (char *) localname);
- if (prefix == NULL)
- fprintf(SAXdebug, ", NULL");
- else
- fprintf(SAXdebug, ", %s", (char *) prefix);
- if (URI == NULL)
- fprintf(SAXdebug, ", NULL)\n");
- else
- fprintf(SAXdebug, ", '%s')\n", (char *) URI);
-}
-
-static xmlSAXHandler debugSAX2HandlerStruct = {
- internalSubsetDebug,
- isStandaloneDebug,
- hasInternalSubsetDebug,
- hasExternalSubsetDebug,
- resolveEntityDebug,
- getEntityDebug,
- entityDeclDebug,
- notationDeclDebug,
- attributeDeclDebug,
- elementDeclDebug,
- unparsedEntityDeclDebug,
- setDocumentLocatorDebug,
- startDocumentDebug,
- endDocumentDebug,
- NULL,
- NULL,
- referenceDebug,
- charactersDebug,
- ignorableWhitespaceDebug,
- processingInstructionDebug,
- commentDebug,
- warningDebug,
- errorDebug,
- fatalErrorDebug,
- getParameterEntityDebug,
- cdataBlockDebug,
- externalSubsetDebug,
- XML_SAX2_MAGIC,
- NULL,
- startElementNsDebug,
- endElementNsDebug,
- NULL
-};
-
-static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
-
-#ifdef LIBXML_HTML_ENABLED
-/**
- * htmlstartElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-htmlstartElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
-{
- int i;
-
- fprintf(SAXdebug, "SAX.startElement(%s", (char *) name);
- if (atts != NULL) {
- for (i = 0;(atts[i] != NULL);i++) {
- fprintf(SAXdebug, ", %s", atts[i++]);
- if (atts[i] != NULL) {
- unsigned char output[40];
- const unsigned char *att = atts[i];
- int outlen, attlen;
- fprintf(SAXdebug, "='");
- while ((attlen = strlen((char*)att)) > 0) {
- outlen = sizeof output - 1;
- htmlEncodeEntities(output, &outlen, att, &attlen, '\'');
- output[outlen] = 0;
- fprintf(SAXdebug, "%s", (char *) output);
- att += attlen;
- }
- fprintf(SAXdebug, "'");
- }
- }
- }
- fprintf(SAXdebug, ")\n");
-}
-
-/**
- * htmlcharactersDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- * Question: how much at a time ???
- */
-static void
-htmlcharactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- unsigned char output[40];
- int inlen = len, outlen = 30;
-
- htmlEncodeEntities(output, &outlen, ch, &inlen, 0);
- output[outlen] = 0;
-
- fprintf(SAXdebug, "SAX.characters(%s, %d)\n", output, len);
-}
-
-/**
- * htmlcdataDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some cdata chars from the parser.
- * Question: how much at a time ???
- */
-static void
-htmlcdataDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- unsigned char output[40];
- int inlen = len, outlen = 30;
-
- htmlEncodeEntities(output, &outlen, ch, &inlen, 0);
- output[outlen] = 0;
-
- fprintf(SAXdebug, "SAX.cdata(%s, %d)\n", output, len);
-}
-
-static xmlSAXHandler debugHTMLSAXHandlerStruct = {
- internalSubsetDebug,
- isStandaloneDebug,
- hasInternalSubsetDebug,
- hasExternalSubsetDebug,
- resolveEntityDebug,
- getEntityDebug,
- entityDeclDebug,
- notationDeclDebug,
- attributeDeclDebug,
- elementDeclDebug,
- unparsedEntityDeclDebug,
- setDocumentLocatorDebug,
- startDocumentDebug,
- endDocumentDebug,
- htmlstartElementDebug,
- endElementDebug,
- referenceDebug,
- htmlcharactersDebug,
- ignorableWhitespaceDebug,
- processingInstructionDebug,
- commentDebug,
- warningDebug,
- errorDebug,
- fatalErrorDebug,
- getParameterEntityDebug,
- htmlcdataDebug,
- externalSubsetDebug,
- 1,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-static xmlSAXHandlerPtr debugHTMLSAXHandler = &debugHTMLSAXHandlerStruct;
-#endif /* LIBXML_HTML_ENABLED */
-
-#ifdef LIBXML_SAX1_ENABLED
-/**
- * saxParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file using the SAX API and check for errors.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-saxParseTest(const char *filename, const char *result,
- const char *err ATTRIBUTE_UNUSED,
- int options) {
- int ret;
- char *temp;
-
- nb_tests++;
- temp = resultFilename(filename, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "out of memory\n");
- fatalError();
- }
- SAXdebug = fopen(temp, "wb");
- if (SAXdebug == NULL) {
- fprintf(stderr, "Failed to write to %s\n", temp);
- free(temp);
- return(-1);
- }
-
- /* for SAX we really want the callbacks though the context handlers */
- xmlSetStructuredErrorFunc(NULL, NULL);
- xmlSetGenericErrorFunc(NULL, testErrorHandler);
-
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML) {
- htmlSAXParseFile(filename, NULL, emptySAXHandler, NULL);
- ret = 0;
- } else
-#endif
- ret = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
- if (ret == XML_WAR_UNDECLARED_ENTITY) {
- fprintf(SAXdebug, "xmlSAXUserParseFile returned error %d\n", ret);
- ret = 0;
- }
- if (ret != 0) {
- fprintf(stderr, "Failed to parse %s\n", filename);
- ret = 1;
- goto done;
- }
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML) {
- htmlSAXParseFile(filename, NULL, debugHTMLSAXHandler, NULL);
- ret = 0;
- } else
-#endif
- if (options & XML_PARSE_SAX1) {
- ret = xmlSAXUserParseFile(debugSAXHandler, NULL, filename);
- } else {
- ret = xmlSAXUserParseFile(debugSAX2Handler, NULL, filename);
- }
- if (ret == XML_WAR_UNDECLARED_ENTITY) {
- fprintf(SAXdebug, "xmlSAXUserParseFile returned error %d\n", ret);
- ret = 0;
- }
- fclose(SAXdebug);
- if (compareFiles(temp, result)) {
- fprintf(stderr, "Got a difference for %s\n", filename);
- ret = 1;
- }
-
-done:
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
-
- /* switch back to structured error handling */
- xmlSetGenericErrorFunc(NULL, NULL);
- xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler);
-
- return(ret);
-}
-#endif
-
-/************************************************************************
- * *
- * Parse to tree based tests *
- * *
- ************************************************************************/
-/**
- * oldParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages: unused
- *
- * Parse a file using the old xmlParseFile API, then serialize back
- * reparse the result and serialize again, then check for deviation
- * in serialization.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-oldParseTest(const char *filename, const char *result,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- xmlDocPtr doc;
- char *temp;
- int res = 0;
-
- nb_tests++;
- /*
- * base of the test, parse with the old API
- */
-#ifdef LIBXML_SAX1_ENABLED
- doc = xmlParseFile(filename);
-#else
- doc = xmlReadFile(filename, NULL, 0);
-#endif
- if (doc == NULL)
- return(1);
- temp = resultFilename(filename, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "out of memory\n");
- fatalError();
- }
- xmlSaveFile(temp, doc);
- if (compareFiles(temp, result)) {
- res = 1;
- }
- xmlFreeDoc(doc);
-
- /*
- * Parse the saved result to make sure the round trip is okay
- */
-#ifdef LIBXML_SAX1_ENABLED
- doc = xmlParseFile(temp);
-#else
- doc = xmlReadFile(temp, NULL, 0);
-#endif
- if (doc == NULL)
- return(1);
- xmlSaveFile(temp, doc);
- if (compareFiles(temp, result)) {
- res = 1;
- }
- xmlFreeDoc(doc);
-
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- return(res);
-}
-
-#ifdef LIBXML_PUSH_ENABLED
-/**
- * pushParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages: unused
- *
- * Parse a file using the Push API, then serialize back
- * to check for content.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-pushParseTest(const char *filename, const char *result,
- const char *err ATTRIBUTE_UNUSED,
- int options) {
- xmlParserCtxtPtr ctxt;
- xmlDocPtr doc;
- const char *base;
- int size, res;
- int cur = 0;
-
- nb_tests++;
- /*
- * load the document in memory and work from there.
- */
- if (loadMem(filename, &base, &size) != 0) {
- fprintf(stderr, "Failed to load %s\n", filename);
- return(-1);
- }
-
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML)
- ctxt = htmlCreatePushParserCtxt(NULL, NULL, base + cur, 4, filename,
- XML_CHAR_ENCODING_NONE);
- else
-#endif
- ctxt = xmlCreatePushParserCtxt(NULL, NULL, base + cur, 4, filename);
- xmlCtxtUseOptions(ctxt, options);
- cur += 4;
- do {
- if (cur + 1024 >= size) {
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML)
- htmlParseChunk(ctxt, base + cur, size - cur, 1);
- else
-#endif
- xmlParseChunk(ctxt, base + cur, size - cur, 1);
- break;
- } else {
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML)
- htmlParseChunk(ctxt, base + cur, 1024, 0);
- else
-#endif
- xmlParseChunk(ctxt, base + cur, 1024, 0);
- cur += 1024;
- }
- } while (cur < size);
- doc = ctxt->myDoc;
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML)
- res = 1;
- else
-#endif
- res = ctxt->wellFormed;
- xmlFreeParserCtxt(ctxt);
- free((char *)base);
- if (!res) {
- xmlFreeDoc(doc);
- fprintf(stderr, "Failed to parse %s\n", filename);
- return(-1);
- }
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML)
- htmlDocDumpMemory(doc, (xmlChar **) &base, &size);
- else
-#endif
- xmlDocDumpMemory(doc, (xmlChar **) &base, &size);
- xmlFreeDoc(doc);
- res = compareFileMem(result, base, size);
- if ((base == NULL) || (res != 0)) {
- if (base != NULL)
- xmlFree((char *)base);
- fprintf(stderr, "Result for %s failed in %s\n", filename, result);
- return(-1);
- }
- xmlFree((char *)base);
- if (err != NULL) {
- res = compareFileMem(err, testErrors, testErrorsSize);
- if (res != 0) {
- fprintf(stderr, "Error for %s failed\n", filename);
- return(-1);
- }
- }
- return(0);
-}
-#endif
-
-/**
- * memParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages: unused
- *
- * Parse a file using the old xmlReadMemory API, then serialize back
- * reparse the result and serialize again, then check for deviation
- * in serialization.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-memParseTest(const char *filename, const char *result,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- xmlDocPtr doc;
- const char *base;
- int size, res;
-
- nb_tests++;
- /*
- * load and parse the memory
- */
- if (loadMem(filename, &base, &size) != 0) {
- fprintf(stderr, "Failed to load %s\n", filename);
- return(-1);
- }
-
- doc = xmlReadMemory(base, size, filename, NULL, 0);
- unloadMem(base);
- if (doc == NULL) {
- return(1);
- }
- xmlDocDumpMemory(doc, (xmlChar **) &base, &size);
- xmlFreeDoc(doc);
- res = compareFileMem(result, base, size);
- if ((base == NULL) || (res != 0)) {
- if (base != NULL)
- xmlFree((char *)base);
- fprintf(stderr, "Result for %s failed in %s\n", filename, result);
- return(-1);
- }
- xmlFree((char *)base);
- return(0);
-}
-
-/**
- * noentParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages: unused
- *
- * Parse a file with entity resolution, then serialize back
- * reparse the result and serialize again, then check for deviation
- * in serialization.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-noentParseTest(const char *filename, const char *result,
- const char *err ATTRIBUTE_UNUSED,
- int options) {
- xmlDocPtr doc;
- char *temp;
- int res = 0;
-
- nb_tests++;
- /*
- * base of the test, parse with the old API
- */
- doc = xmlReadFile(filename, NULL, options);
- if (doc == NULL)
- return(1);
- temp = resultFilename(filename, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "Out of memory\n");
- fatalError();
- }
- xmlSaveFile(temp, doc);
- if (compareFiles(temp, result)) {
- res = 1;
- }
- xmlFreeDoc(doc);
-
- /*
- * Parse the saved result to make sure the round trip is okay
- */
- doc = xmlReadFile(filename, NULL, options);
- if (doc == NULL)
- return(1);
- xmlSaveFile(temp, doc);
- if (compareFiles(temp, result)) {
- res = 1;
- }
- xmlFreeDoc(doc);
-
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- return(res);
-}
-
-/**
- * errParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file using the xmlReadFile API and check for errors.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-errParseTest(const char *filename, const char *result, const char *err,
- int options) {
- xmlDocPtr doc;
- const char *base = NULL;
- int size, res = 0;
-
- nb_tests++;
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML) {
- doc = htmlReadFile(filename, NULL, options);
- } else
-#endif
-#ifdef LIBXML_XINCLUDE_ENABLED
- if (options & XML_PARSE_XINCLUDE) {
- doc = xmlReadFile(filename, NULL, options);
- xmlXIncludeProcessFlags(doc, options);
- } else
-#endif
- {
- xmlGetWarningsDefaultValue = 1;
- doc = xmlReadFile(filename, NULL, options);
- }
- xmlGetWarningsDefaultValue = 0;
- if (result) {
- if (doc == NULL) {
- base = "";
- size = 0;
- } else {
-#ifdef LIBXML_HTML_ENABLED
- if (options & XML_PARSE_HTML) {
- htmlDocDumpMemory(doc, (xmlChar **) &base, &size);
- } else
-#endif
- xmlDocDumpMemory(doc, (xmlChar **) &base, &size);
- }
- res = compareFileMem(result, base, size);
- if (res != 0) {
- fprintf(stderr, "Result for %s failed in %s\n", filename, result);
- return(-1);
- }
- }
- if (doc != NULL) {
- if (base != NULL)
- xmlFree((char *)base);
- xmlFreeDoc(doc);
- }
- if (err != NULL) {
- res = compareFileMem(err, testErrors, testErrorsSize);
- if (res != 0) {
- fprintf(stderr, "Error for %s failed\n", filename);
- return(-1);
- }
- } else if (options & XML_PARSE_DTDVALID) {
- if (testErrorsSize != 0)
- fprintf(stderr, "Validation for %s failed\n", filename);
- }
-
- return(0);
-}
-
-#ifdef LIBXML_READER_ENABLED
-/************************************************************************
- * *
- * Reader based tests *
- * *
- ************************************************************************/
-
-static void processNode(FILE *out, xmlTextReaderPtr reader) {
- const xmlChar *name, *value;
- int type, empty;
-
- type = xmlTextReaderNodeType(reader);
- empty = xmlTextReaderIsEmptyElement(reader);
-
- name = xmlTextReaderConstName(reader);
- if (name == NULL)
- name = BAD_CAST "--";
-
- value = xmlTextReaderConstValue(reader);
-
-
- fprintf(out, "%d %d %s %d %d",
- xmlTextReaderDepth(reader),
- type,
- name,
- empty,
- xmlTextReaderHasValue(reader));
- if (value == NULL)
- fprintf(out, "\n");
- else {
- fprintf(out, " %s\n", value);
- }
-}
-static int
-streamProcessTest(const char *filename, const char *result, const char *err,
- xmlTextReaderPtr reader, const char *rng, int options) {
- int ret;
- char *temp = NULL;
- FILE *t = NULL;
-
- if (reader == NULL)
- return(-1);
-
- nb_tests++;
- if (result != NULL) {
- temp = resultFilename(filename, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "Out of memory\n");
- fatalError();
- }
- t = fopen(temp, "wb");
- if (t == NULL) {
- fprintf(stderr, "Can't open temp file %s\n", temp);
- free(temp);
- return(-1);
- }
- }
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (rng != NULL) {
- ret = xmlTextReaderRelaxNGValidate(reader, rng);
- if (ret < 0) {
- testErrorHandler(NULL, "Relax-NG schema %s failed to compile\n",
- rng);
- fclose(t);
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- return(0);
- }
- }
-#endif
- xmlGetWarningsDefaultValue = 1;
- ret = xmlTextReaderRead(reader);
- while (ret == 1) {
- if ((t != NULL) && (rng == NULL))
- processNode(t, reader);
- ret = xmlTextReaderRead(reader);
- }
- if (ret != 0) {
- testErrorHandler(NULL, "%s : failed to parse\n", filename);
- }
- if (rng != NULL) {
- if (xmlTextReaderIsValid(reader) != 1) {
- testErrorHandler(NULL, "%s fails to validate\n", filename);
- } else {
- testErrorHandler(NULL, "%s validates\n", filename);
- }
- }
- xmlGetWarningsDefaultValue = 0;
- if (t != NULL) {
- fclose(t);
- ret = compareFiles(temp, result);
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- if (ret) {
- fprintf(stderr, "Result for %s failed in %s\n", filename, result);
- return(-1);
- }
- }
- if (err != NULL) {
- ret = compareFileMem(err, testErrors, testErrorsSize);
- if (ret != 0) {
- fprintf(stderr, "Error for %s failed\n", filename);
- printf("%s", testErrors);
- return(-1);
- }
- }
-
- return(0);
-}
-
-/**
- * streamParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file using the reader API and check for errors.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-streamParseTest(const char *filename, const char *result, const char *err,
- int options) {
- xmlTextReaderPtr reader;
- int ret;
-
- reader = xmlReaderForFile(filename, NULL, options);
- ret = streamProcessTest(filename, result, err, reader, NULL, options);
- xmlFreeTextReader(reader);
- return(ret);
-}
-
-/**
- * walkerParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file using the walker, i.e. a reader built from a atree.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-walkerParseTest(const char *filename, const char *result, const char *err,
- int options) {
- xmlDocPtr doc;
- xmlTextReaderPtr reader;
- int ret;
-
- doc = xmlReadFile(filename, NULL, options);
- if (doc == NULL) {
- fprintf(stderr, "Failed to parse %s\n", filename);
- return(-1);
- }
- reader = xmlReaderWalker(doc);
- ret = streamProcessTest(filename, result, err, reader, NULL, options);
- xmlFreeTextReader(reader);
- xmlFreeDoc(doc);
- return(ret);
-}
-
-/**
- * streamMemParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file using the reader API from memory and check for errors.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-streamMemParseTest(const char *filename, const char *result, const char *err,
- int options) {
- xmlTextReaderPtr reader;
- int ret;
- const char *base;
- int size;
-
- /*
- * load and parse the memory
- */
- if (loadMem(filename, &base, &size) != 0) {
- fprintf(stderr, "Failed to load %s\n", filename);
- return(-1);
- }
- reader = xmlReaderForMemory(base, size, filename, NULL, options);
- ret = streamProcessTest(filename, result, err, reader, NULL, options);
- free((char *)base);
- xmlFreeTextReader(reader);
- return(ret);
-}
-#endif
-
-#ifdef LIBXML_XPATH_ENABLED
-#ifdef LIBXML_DEBUG_ENABLED
-/************************************************************************
- * *
- * XPath and XPointer based tests *
- * *
- ************************************************************************/
-
-static FILE *xpathOutput;
-static xmlDocPtr xpathDocument;
-
-static void
-ignoreGenericError(void *ctx ATTRIBUTE_UNUSED,
- const char *msg ATTRIBUTE_UNUSED, ...) {
-}
-
-static void
-testXPath(const char *str, int xptr, int expr) {
- xmlGenericErrorFunc handler = ignoreGenericError;
- xmlXPathObjectPtr res;
- xmlXPathContextPtr ctxt;
-
- /* Don't print generic errors to stderr. */
- initGenericErrorDefaultFunc(&handler);
-
- nb_tests++;
-#if defined(LIBXML_XPTR_ENABLED)
- if (xptr) {
- ctxt = xmlXPtrNewContext(xpathDocument, NULL, NULL);
- res = xmlXPtrEval(BAD_CAST str, ctxt);
- } else {
-#endif
- ctxt = xmlXPathNewContext(xpathDocument);
- ctxt->node = xmlDocGetRootElement(xpathDocument);
- if (expr)
- res = xmlXPathEvalExpression(BAD_CAST str, ctxt);
- else {
- /* res = xmlXPathEval(BAD_CAST str, ctxt); */
- xmlXPathCompExprPtr comp;
-
- comp = xmlXPathCompile(BAD_CAST str);
- if (comp != NULL) {
- res = xmlXPathCompiledEval(comp, ctxt);
- xmlXPathFreeCompExpr(comp);
- } else
- res = NULL;
- }
-#if defined(LIBXML_XPTR_ENABLED)
- }
-#endif
- xmlXPathDebugDumpObject(xpathOutput, res, 0);
- xmlXPathFreeObject(res);
- xmlXPathFreeContext(ctxt);
-
- /* Reset generic error handler. */
- initGenericErrorDefaultFunc(NULL);
-}
-
-/**
- * xpathExprTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing XPath standalone expressions and evaluate them
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-xpathCommonTest(const char *filename, const char *result,
- int xptr, int expr) {
- FILE *input;
- char expression[5000];
- int len, ret = 0;
- char *temp;
-
- temp = resultFilename(filename, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "Out of memory\n");
- fatalError();
- }
- xpathOutput = fopen(temp, "wb");
- if (xpathOutput == NULL) {
- fprintf(stderr, "failed to open output file %s\n", temp);
- free(temp);
- return(-1);
- }
-
- input = fopen(filename, "rb");
- if (input == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot open %s for reading\n", filename);
- free(temp);
- return(-1);
- }
- while (fgets(expression, 4500, input) != NULL) {
- len = strlen(expression);
- len--;
- while ((len >= 0) &&
- ((expression[len] == '\n') || (expression[len] == '\t') ||
- (expression[len] == '\r') || (expression[len] == ' '))) len--;
- expression[len + 1] = 0;
- if (len >= 0) {
- fprintf(xpathOutput,
- "\n========================\nExpression: %s\n",
- expression) ;
- testXPath(expression, xptr, expr);
- }
- }
-
- fclose(input);
- fclose(xpathOutput);
- if (result != NULL) {
- ret = compareFiles(temp, result);
- if (ret) {
- fprintf(stderr, "Result for %s failed in %s\n", filename, result);
- }
- }
-
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- return(ret);
-}
-
-/**
- * xpathExprTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing XPath standalone expressions and evaluate them
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-xpathExprTest(const char *filename, const char *result,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- return(xpathCommonTest(filename, result, 0, 1));
-}
-
-/**
- * xpathDocTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing XPath expressions and evaluate them against
- * a set of corresponding documents.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-xpathDocTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options) {
-
- char pattern[500];
- char result[500];
- glob_t globbuf;
- size_t i;
- int ret = 0, res;
-
- xpathDocument = xmlReadFile(filename, NULL,
- options | XML_PARSE_DTDATTR | XML_PARSE_NOENT);
- if (xpathDocument == NULL) {
- fprintf(stderr, "Failed to load %s\n", filename);
- return(-1);
- }
-
- snprintf(pattern, 499, "./test/XPath/tests/%s*", baseFilename(filename));
- pattern[499] = 0;
- globbuf.gl_offs = 0;
- glob(pattern, GLOB_DOOFFS, NULL, &globbuf);
- for (i = 0;i < globbuf.gl_pathc;i++) {
- snprintf(result, 499, "result/XPath/tests/%s",
- baseFilename(globbuf.gl_pathv[i]));
- res = xpathCommonTest(globbuf.gl_pathv[i], &result[0], 0, 0);
- if (res != 0)
- ret = res;
- }
- globfree(&globbuf);
-
- xmlFreeDoc(xpathDocument);
- return(ret);
-}
-
-#ifdef LIBXML_XPTR_ENABLED
-/**
- * xptrDocTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing XPath expressions and evaluate them against
- * a set of corresponding documents.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-xptrDocTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options) {
-
- char pattern[500];
- char result[500];
- glob_t globbuf;
- size_t i;
- int ret = 0, res;
-
- xpathDocument = xmlReadFile(filename, NULL,
- options | XML_PARSE_DTDATTR | XML_PARSE_NOENT);
- if (xpathDocument == NULL) {
- fprintf(stderr, "Failed to load %s\n", filename);
- return(-1);
- }
-
- snprintf(pattern, 499, "./test/XPath/xptr/%s*", baseFilename(filename));
- pattern[499] = 0;
- globbuf.gl_offs = 0;
- glob(pattern, GLOB_DOOFFS, NULL, &globbuf);
- for (i = 0;i < globbuf.gl_pathc;i++) {
- snprintf(result, 499, "result/XPath/xptr/%s",
- baseFilename(globbuf.gl_pathv[i]));
- res = xpathCommonTest(globbuf.gl_pathv[i], &result[0], 1, 0);
- if (res != 0)
- ret = res;
- }
- globfree(&globbuf);
-
- xmlFreeDoc(xpathDocument);
- return(ret);
-}
-#endif /* LIBXML_XPTR_ENABLED */
-
-/**
- * xmlidDocTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing xml:id and check for errors and verify
- * that XPath queries will work on them as expected.
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-xmlidDocTest(const char *filename,
- const char *result,
- const char *err,
- int options) {
-
- int res = 0;
- int ret = 0;
- char *temp;
-
- xpathDocument = xmlReadFile(filename, NULL,
- options | XML_PARSE_DTDATTR | XML_PARSE_NOENT);
- if (xpathDocument == NULL) {
- fprintf(stderr, "Failed to load %s\n", filename);
- return(-1);
- }
-
- temp = resultFilename(filename, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "Out of memory\n");
- fatalError();
- }
- xpathOutput = fopen(temp, "wb");
- if (xpathOutput == NULL) {
- fprintf(stderr, "failed to open output file %s\n", temp);
- xmlFreeDoc(xpathDocument);
- free(temp);
- return(-1);
- }
-
- testXPath("id('bar')", 0, 0);
-
- fclose(xpathOutput);
- if (result != NULL) {
- ret = compareFiles(temp, result);
- if (ret) {
- fprintf(stderr, "Result for %s failed in %s\n", filename, result);
- res = 1;
- }
- }
-
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- xmlFreeDoc(xpathDocument);
-
- if (err != NULL) {
- ret = compareFileMem(err, testErrors, testErrorsSize);
- if (ret != 0) {
- fprintf(stderr, "Error for %s failed\n", filename);
- res = 1;
- }
- }
- return(res);
-}
-
-#endif /* LIBXML_DEBUG_ENABLED */
-#endif /* XPATH */
-/************************************************************************
- * *
- * URI based tests *
- * *
- ************************************************************************/
-
-static void
-handleURI(const char *str, const char *base, FILE *o) {
- int ret;
- xmlURIPtr uri;
- xmlChar *res = NULL;
-
- uri = xmlCreateURI();
-
- if (base == NULL) {
- ret = xmlParseURIReference(uri, str);
- if (ret != 0)
- fprintf(o, "%s : error %d\n", str, ret);
- else {
- xmlNormalizeURIPath(uri->path);
- xmlPrintURI(o, uri);
- fprintf(o, "\n");
- }
- } else {
- res = xmlBuildURI((xmlChar *)str, (xmlChar *) base);
- if (res != NULL) {
- fprintf(o, "%s\n", (char *) res);
- }
- else
- fprintf(o, "::ERROR::\n");
- }
- if (res != NULL)
- xmlFree(res);
- xmlFreeURI(uri);
-}
-
-/**
- * uriCommonTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing URI and check for errors
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-uriCommonTest(const char *filename,
- const char *result,
- const char *err,
- const char *base) {
- char *temp;
- FILE *o, *f;
- char str[1024];
- int res = 0, i, ret;
-
- temp = resultFilename(filename, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "Out of memory\n");
- fatalError();
- }
- o = fopen(temp, "wb");
- if (o == NULL) {
- fprintf(stderr, "failed to open output file %s\n", temp);
- free(temp);
- return(-1);
- }
- f = fopen(filename, "rb");
- if (f == NULL) {
- fprintf(stderr, "failed to open input file %s\n", filename);
- fclose(o);
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- return(-1);
- }
-
- while (1) {
- /*
- * read one line in string buffer.
- */
- if (fgets (&str[0], sizeof (str) - 1, f) == NULL)
- break;
-
- /*
- * remove the ending spaces
- */
- i = strlen(str);
- while ((i > 0) &&
- ((str[i - 1] == '\n') || (str[i - 1] == '\r') ||
- (str[i - 1] == ' ') || (str[i - 1] == '\t'))) {
- i--;
- str[i] = 0;
- }
- nb_tests++;
- handleURI(str, base, o);
- }
-
- fclose(f);
- fclose(o);
-
- if (result != NULL) {
- ret = compareFiles(temp, result);
- if (ret) {
- fprintf(stderr, "Result for %s failed in %s\n", filename, result);
- res = 1;
- }
- }
- if (err != NULL) {
- ret = compareFileMem(err, testErrors, testErrorsSize);
- if (ret != 0) {
- fprintf(stderr, "Error for %s failed\n", filename);
- res = 1;
- }
- }
-
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- return(res);
-}
-
-/**
- * uriParseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing URI and check for errors
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-uriParseTest(const char *filename,
- const char *result,
- const char *err,
- int options ATTRIBUTE_UNUSED) {
- return(uriCommonTest(filename, result, err, NULL));
-}
-
-/**
- * uriBaseTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing URI, compose them against a fixed base and
- * check for errors
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-uriBaseTest(const char *filename,
- const char *result,
- const char *err,
- int options ATTRIBUTE_UNUSED) {
- return(uriCommonTest(filename, result, err,
- "http://foo.com/path/to/index.html?orig#help"));
-}
-
-static int urip_success = 1;
-static int urip_current = 0;
-static const char *urip_testURLs[] = {
- "urip://example.com/a b.html",
- "urip://example.com/a%20b.html",
- "file:///path/to/a b.html",
- "file:///path/to/a%20b.html",
- "/path/to/a b.html",
- "/path/to/a%20b.html",
- "urip://example.com/r" "\xe9" "sum" "\xe9" ".html",
- "urip://example.com/test?a=1&b=2%263&c=4#foo",
- NULL
-};
-static const char *urip_rcvsURLs[] = {
- /* it is an URI the strings must be escaped */
- "urip://example.com/a%20b.html",
- /* check that % escaping is not broken */
- "urip://example.com/a%20b.html",
- /* it's an URI path the strings must be escaped */
- "file:///path/to/a%20b.html",
- /* check that % escaping is not broken */
- "file:///path/to/a%20b.html",
- /* this is not an URI, this is a path, so this should not be escaped */
- "/path/to/a b.html",
- /* check that paths with % are not broken */
- "/path/to/a%20b.html",
- /* out of context the encoding can't be guessed byte by byte conversion */
- "urip://example.com/r%E9sum%E9.html",
- /* verify we don't destroy URIs especially the query part */
- "urip://example.com/test?a=1&b=2%263&c=4#foo",
- NULL
-};
-static const char *urip_res = "<list/>";
-static const char *urip_cur = NULL;
-static int urip_rlen;
-
-/**
- * uripMatch:
- * @URI: an URI to test
- *
- * Check for an urip: query
- *
- * Returns 1 if yes and 0 if another Input module should be used
- */
-static int
-uripMatch(const char * URI) {
- if ((URI == NULL) || (!strcmp(URI, "file:///etc/xml/catalog")))
- return(0);
- /* Verify we received the escaped URL */
- if (strcmp(urip_rcvsURLs[urip_current], URI))
- urip_success = 0;
- return(1);
-}
-
-/**
- * uripOpen:
- * @URI: an URI to test
- *
- * Return a pointer to the urip: query handler, in this example simply
- * the urip_current pointer...
- *
- * Returns an Input context or NULL in case or error
- */
-static void *
-uripOpen(const char * URI) {
- if ((URI == NULL) || (!strcmp(URI, "file:///etc/xml/catalog")))
- return(NULL);
- /* Verify we received the escaped URL */
- if (strcmp(urip_rcvsURLs[urip_current], URI))
- urip_success = 0;
- urip_cur = urip_res;
- urip_rlen = strlen(urip_res);
- return((void *) urip_cur);
-}
-
-/**
- * uripClose:
- * @context: the read context
- *
- * Close the urip: query handler
- *
- * Returns 0 or -1 in case of error
- */
-static int
-uripClose(void * context) {
- if (context == NULL) return(-1);
- urip_cur = NULL;
- urip_rlen = 0;
- return(0);
-}
-
-/**
- * uripRead:
- * @context: the read context
- * @buffer: where to store data
- * @len: number of bytes to read
- *
- * Implement an urip: query read.
- *
- * Returns the number of bytes read or -1 in case of error
- */
-static int
-uripRead(void * context, char * buffer, int len) {
- const char *ptr = (const char *) context;
-
- if ((context == NULL) || (buffer == NULL) || (len < 0))
- return(-1);
-
- if (len > urip_rlen) len = urip_rlen;
- memcpy(buffer, ptr, len);
- urip_rlen -= len;
- return(len);
-}
-
-static int
-urip_checkURL(const char *URL) {
- xmlDocPtr doc;
-
- doc = xmlReadFile(URL, NULL, 0);
- if (doc == NULL)
- return(-1);
- xmlFreeDoc(doc);
- return(1);
-}
-
-/**
- * uriPathTest:
- * @filename: ignored
- * @result: ignored
- * @err: ignored
- *
- * Run a set of tests to check how Path and URI are handled before
- * being passed to the I/O layer
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-uriPathTest(const char *filename ATTRIBUTE_UNUSED,
- const char *result ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- int parsed;
- int failures = 0;
-
- /*
- * register the new I/O handlers
- */
- if (xmlRegisterInputCallbacks(uripMatch, uripOpen, uripRead, uripClose) < 0)
- {
- fprintf(stderr, "failed to register HTTP handler\n");
- return(-1);
- }
-
- for (urip_current = 0;urip_testURLs[urip_current] != NULL;urip_current++) {
- urip_success = 1;
- parsed = urip_checkURL(urip_testURLs[urip_current]);
- if (urip_success != 1) {
- fprintf(stderr, "failed the URL passing test for %s",
- urip_testURLs[urip_current]);
- failures++;
- } else if (parsed != 1) {
- fprintf(stderr, "failed the parsing test for %s",
- urip_testURLs[urip_current]);
- failures++;
- }
- nb_tests++;
- }
-
- xmlPopInputCallbacks();
- return(failures);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-/************************************************************************
- * *
- * Schemas tests *
- * *
- ************************************************************************/
-static int
-schemasOneTest(const char *sch,
- const char *filename,
- const char *result,
- const char *err,
- int options,
- xmlSchemaPtr schemas) {
- xmlDocPtr doc;
- xmlSchemaValidCtxtPtr ctxt;
- int ret = 0;
- int validResult = 0;
- char *temp;
- FILE *schemasOutput;
-
- doc = xmlReadFile(filename, NULL, options);
- if (doc == NULL) {
- fprintf(stderr, "failed to parse instance %s for %s\n", filename, sch);
- return(-1);
- }
-
- temp = resultFilename(result, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "Out of memory\n");
- fatalError();
- }
- schemasOutput = fopen(temp, "wb");
- if (schemasOutput == NULL) {
- fprintf(stderr, "failed to open output file %s\n", temp);
- xmlFreeDoc(doc);
- free(temp);
- return(-1);
- }
-
- ctxt = xmlSchemaNewValidCtxt(schemas);
- xmlSchemaSetValidErrors(ctxt,
- (xmlSchemaValidityErrorFunc) testErrorHandler,
- (xmlSchemaValidityWarningFunc) testErrorHandler,
- ctxt);
- validResult = xmlSchemaValidateDoc(ctxt, doc);
- if (validResult == 0) {
- fprintf(schemasOutput, "%s validates\n", filename);
- } else if (validResult > 0) {
- fprintf(schemasOutput, "%s fails to validate\n", filename);
- } else {
- fprintf(schemasOutput, "%s validation generated an internal error\n",
- filename);
- }
- fclose(schemasOutput);
- if (result) {
- if (compareFiles(temp, result)) {
- fprintf(stderr, "Result for %s on %s failed\n", filename, sch);
- ret = 1;
- }
- }
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
-
- if ((validResult != 0) && (err != NULL)) {
- if (compareFileMem(err, testErrors, testErrorsSize)) {
- fprintf(stderr, "Error for %s on %s failed\n", filename, sch);
- ret = 1;
- }
- }
-
- xmlSchemaFreeValidCtxt(ctxt);
- xmlFreeDoc(doc);
- return(ret);
-}
-/**
- * schemasTest:
- * @filename: the schemas file
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a file containing URI, compose them against a fixed base and
- * check for errors
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-schemasTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *errr ATTRIBUTE_UNUSED,
- int options) {
- const char *base = baseFilename(filename);
- const char *base2;
- const char *instance;
- xmlSchemaParserCtxtPtr ctxt;
- xmlSchemaPtr schemas;
- int res = 0, len, ret;
- char pattern[500];
- char prefix[500];
- char result[500];
- char err[500];
- glob_t globbuf;
- size_t i;
- char count = 0;
-
- /* first compile the schemas if possible */
- ctxt = xmlSchemaNewParserCtxt(filename);
- xmlSchemaSetParserErrors(ctxt,
- (xmlSchemaValidityErrorFunc) testErrorHandler,
- (xmlSchemaValidityWarningFunc) testErrorHandler,
- ctxt);
- schemas = xmlSchemaParse(ctxt);
- xmlSchemaFreeParserCtxt(ctxt);
-
- /*
- * most of the mess is about the output filenames generated by the Makefile
- */
- len = strlen(base);
- if ((len > 499) || (len < 5)) {
- xmlSchemaFree(schemas);
- return(-1);
- }
- len -= 4; /* remove trailing .xsd */
- if (base[len - 2] == '_') {
- len -= 2; /* remove subtest number */
- }
- if (base[len - 2] == '_') {
- len -= 2; /* remove subtest number */
- }
- memcpy(prefix, base, len);
- prefix[len] = 0;
-
- snprintf(pattern, 499, "./test/schemas/%s_?.xml", prefix);
- pattern[499] = 0;
-
- if (base[len] == '_') {
- len += 2;
- memcpy(prefix, base, len);
- prefix[len] = 0;
- }
-
- globbuf.gl_offs = 0;
- glob(pattern, GLOB_DOOFFS, NULL, &globbuf);
- for (i = 0;i < globbuf.gl_pathc;i++) {
- testErrorsSize = 0;
- testErrors[0] = 0;
- instance = globbuf.gl_pathv[i];
- base2 = baseFilename(instance);
- len = strlen(base2);
- if ((len > 6) && (base2[len - 6] == '_')) {
- count = base2[len - 5];
- snprintf(result, 499, "result/schemas/%s_%c",
- prefix, count);
- result[499] = 0;
- snprintf(err, 499, "result/schemas/%s_%c.err",
- prefix, count);
- err[499] = 0;
- } else {
- fprintf(stderr, "don't know how to process %s\n", instance);
- continue;
- }
- if (schemas == NULL) {
- } else {
- nb_tests++;
- ret = schemasOneTest(filename, instance, result, err,
- options, schemas);
- if (ret != 0)
- res = ret;
- }
- }
- globfree(&globbuf);
- xmlSchemaFree(schemas);
-
- return(res);
-}
-
-/************************************************************************
- * *
- * Schemas tests *
- * *
- ************************************************************************/
-static int
-rngOneTest(const char *sch,
- const char *filename,
- const char *result,
- const char *err,
- int options,
- xmlRelaxNGPtr schemas) {
- xmlDocPtr doc;
- xmlRelaxNGValidCtxtPtr ctxt;
- int ret = 0;
- char *temp;
- FILE *schemasOutput;
-
- doc = xmlReadFile(filename, NULL, options);
- if (doc == NULL) {
- fprintf(stderr, "failed to parse instance %s for %s\n", filename, sch);
- return(-1);
- }
-
- temp = resultFilename(result, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "Out of memory\n");
- fatalError();
- }
- schemasOutput = fopen(temp, "wb");
- if (schemasOutput == NULL) {
- fprintf(stderr, "failed to open output file %s\n", temp);
- xmlFreeDoc(doc);
- free(temp);
- return(-1);
- }
-
- ctxt = xmlRelaxNGNewValidCtxt(schemas);
- xmlRelaxNGSetValidErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) testErrorHandler,
- (xmlRelaxNGValidityWarningFunc) testErrorHandler,
- ctxt);
- ret = xmlRelaxNGValidateDoc(ctxt, doc);
- if (ret == 0) {
- testErrorHandler(NULL, "%s validates\n", filename);
- } else if (ret > 0) {
- testErrorHandler(NULL, "%s fails to validate\n", filename);
- } else {
- testErrorHandler(NULL, "%s validation generated an internal error\n",
- filename);
- }
- fclose(schemasOutput);
- ret = 0;
- if (result) {
- if (compareFiles(temp, result)) {
- fprintf(stderr, "Result for %s on %s failed\n", filename, sch);
- ret = 1;
- }
- }
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
-
- if (err != NULL) {
- if (compareFileMem(err, testErrors, testErrorsSize)) {
- fprintf(stderr, "Error for %s on %s failed\n", filename, sch);
- ret = 1;
- printf("%s", testErrors);
- }
- }
-
-
- xmlRelaxNGFreeValidCtxt(ctxt);
- xmlFreeDoc(doc);
- return(ret);
-}
-/**
- * rngTest:
- * @filename: the schemas file
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse an RNG schemas and then apply it to the related .xml
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-rngTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *errr ATTRIBUTE_UNUSED,
- int options) {
- const char *base = baseFilename(filename);
- const char *base2;
- const char *instance;
- xmlRelaxNGParserCtxtPtr ctxt;
- xmlRelaxNGPtr schemas;
- int res = 0, len, ret = 0;
- char pattern[500];
- char prefix[500];
- char result[500];
- char err[500];
- glob_t globbuf;
- size_t i;
- char count = 0;
-
- /* first compile the schemas if possible */
- ctxt = xmlRelaxNGNewParserCtxt(filename);
- xmlRelaxNGSetParserErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) testErrorHandler,
- (xmlRelaxNGValidityWarningFunc) testErrorHandler,
- ctxt);
- schemas = xmlRelaxNGParse(ctxt);
- xmlRelaxNGFreeParserCtxt(ctxt);
-
- /*
- * most of the mess is about the output filenames generated by the Makefile
- */
- len = strlen(base);
- if ((len > 499) || (len < 5)) {
- xmlRelaxNGFree(schemas);
- return(-1);
- }
- len -= 4; /* remove trailing .rng */
- memcpy(prefix, base, len);
- prefix[len] = 0;
-
- snprintf(pattern, 499, "./test/relaxng/%s_?.xml", prefix);
- pattern[499] = 0;
-
- globbuf.gl_offs = 0;
- glob(pattern, GLOB_DOOFFS, NULL, &globbuf);
- for (i = 0;i < globbuf.gl_pathc;i++) {
- testErrorsSize = 0;
- testErrors[0] = 0;
- instance = globbuf.gl_pathv[i];
- base2 = baseFilename(instance);
- len = strlen(base2);
- if ((len > 6) && (base2[len - 6] == '_')) {
- count = base2[len - 5];
- snprintf(result, 499, "result/relaxng/%s_%c",
- prefix, count);
- result[499] = 0;
- snprintf(err, 499, "result/relaxng/%s_%c.err",
- prefix, count);
- err[499] = 0;
- } else {
- fprintf(stderr, "don't know how to process %s\n", instance);
- continue;
- }
- if (schemas == NULL) {
- } else {
- nb_tests++;
- ret = rngOneTest(filename, instance, result, err,
- options, schemas);
- if (res != 0)
- ret = res;
- }
- }
- globfree(&globbuf);
- xmlRelaxNGFree(schemas);
-
- return(ret);
-}
-
-#ifdef LIBXML_READER_ENABLED
-/**
- * rngStreamTest:
- * @filename: the schemas file
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a set of files with streaming, applying an RNG schemas
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-rngStreamTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *errr ATTRIBUTE_UNUSED,
- int options) {
- const char *base = baseFilename(filename);
- const char *base2;
- const char *instance;
- int res = 0, len, ret;
- char pattern[500];
- char prefix[500];
- char result[500];
- char err[500];
- glob_t globbuf;
- size_t i;
- char count = 0;
- xmlTextReaderPtr reader;
- int disable_err = 0;
-
- /*
- * most of the mess is about the output filenames generated by the Makefile
- */
- len = strlen(base);
- if ((len > 499) || (len < 5)) {
- fprintf(stderr, "len(base) == %d !\n", len);
- return(-1);
- }
- len -= 4; /* remove trailing .rng */
- memcpy(prefix, base, len);
- prefix[len] = 0;
-
- /*
- * strictly unifying the error messages is nearly impossible this
- * hack is also done in the Makefile
- */
- if ((!strcmp(prefix, "tutor10_1")) || (!strcmp(prefix, "tutor10_2")) ||
- (!strcmp(prefix, "tutor3_2")) || (!strcmp(prefix, "307377")) ||
- (!strcmp(prefix, "tutor8_2")))
- disable_err = 1;
-
- snprintf(pattern, 499, "./test/relaxng/%s_?.xml", prefix);
- pattern[499] = 0;
-
- globbuf.gl_offs = 0;
- glob(pattern, GLOB_DOOFFS, NULL, &globbuf);
- for (i = 0;i < globbuf.gl_pathc;i++) {
- testErrorsSize = 0;
- testErrors[0] = 0;
- instance = globbuf.gl_pathv[i];
- base2 = baseFilename(instance);
- len = strlen(base2);
- if ((len > 6) && (base2[len - 6] == '_')) {
- count = base2[len - 5];
- snprintf(result, 499, "result/relaxng/%s_%c",
- prefix, count);
- result[499] = 0;
- snprintf(err, 499, "result/relaxng/%s_%c.err",
- prefix, count);
- err[499] = 0;
- } else {
- fprintf(stderr, "don't know how to process %s\n", instance);
- continue;
- }
- reader = xmlReaderForFile(instance, NULL, options);
- if (reader == NULL) {
- fprintf(stderr, "Failed to build reder for %s\n", instance);
- }
- if (disable_err == 1)
- ret = streamProcessTest(instance, result, NULL, reader, filename,
- options);
- else
- ret = streamProcessTest(instance, result, err, reader, filename,
- options);
- xmlFreeTextReader(reader);
- if (ret != 0) {
- fprintf(stderr, "instance %s failed\n", instance);
- res = ret;
- }
- }
- globfree(&globbuf);
-
- return(res);
-}
-#endif /* READER */
-
-#endif
-
-#ifdef LIBXML_PATTERN_ENABLED
-#ifdef LIBXML_READER_ENABLED
-/************************************************************************
- * *
- * Patterns tests *
- * *
- ************************************************************************/
-static void patternNode(FILE *out, xmlTextReaderPtr reader,
- const char *pattern, xmlPatternPtr patternc,
- xmlStreamCtxtPtr patstream) {
- xmlChar *path = NULL;
- int match = -1;
- int type, empty;
-
- type = xmlTextReaderNodeType(reader);
- empty = xmlTextReaderIsEmptyElement(reader);
-
- if (type == XML_READER_TYPE_ELEMENT) {
- /* do the check only on element start */
- match = xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader));
-
- if (match) {
- path = xmlGetNodePath(xmlTextReaderCurrentNode(reader));
- fprintf(out, "Node %s matches pattern %s\n", path, pattern);
- }
- }
- if (patstream != NULL) {
- int ret;
-
- if (type == XML_READER_TYPE_ELEMENT) {
- ret = xmlStreamPush(patstream,
- xmlTextReaderConstLocalName(reader),
- xmlTextReaderConstNamespaceUri(reader));
- if (ret < 0) {
- fprintf(out, "xmlStreamPush() failure\n");
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- } else if (ret != match) {
- if (path == NULL) {
- path = xmlGetNodePath(
- xmlTextReaderCurrentNode(reader));
- }
- fprintf(out,
- "xmlPatternMatch and xmlStreamPush disagree\n");
- fprintf(out,
- " pattern %s node %s\n",
- pattern, path);
- }
-
-
- }
- if ((type == XML_READER_TYPE_END_ELEMENT) ||
- ((type == XML_READER_TYPE_ELEMENT) && (empty))) {
- ret = xmlStreamPop(patstream);
- if (ret < 0) {
- fprintf(out, "xmlStreamPop() failure\n");
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- }
- }
- }
- if (path != NULL)
- xmlFree(path);
-}
-
-/**
- * patternTest:
- * @filename: the schemas file
- * @result: the file with expected result
- * @err: the file with error messages
- *
- * Parse a set of files with streaming, applying an RNG schemas
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-patternTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options) {
- xmlPatternPtr patternc = NULL;
- xmlStreamCtxtPtr patstream = NULL;
- FILE *o, *f;
- char str[1024];
- char xml[500];
- char result[500];
- int len, i;
- int ret = 0, res;
- char *temp;
- xmlTextReaderPtr reader;
- xmlDocPtr doc;
-
- len = strlen(filename);
- len -= 4;
- memcpy(xml, filename, len);
- xml[len] = 0;
- snprintf(result, 499, "result/pattern/%s", baseFilename(xml));
- result[499] = 0;
- memcpy(xml + len, ".xml", 5);
-
- if (!checkTestFile(xml) && !update_results) {
- fprintf(stderr, "Missing xml file %s\n", xml);
- return(-1);
- }
- if (!checkTestFile(result) && !update_results) {
- fprintf(stderr, "Missing result file %s\n", result);
- return(-1);
- }
- f = fopen(filename, "rb");
- if (f == NULL) {
- fprintf(stderr, "Failed to open %s\n", filename);
- return(-1);
- }
- temp = resultFilename(filename, "", ".res");
- if (temp == NULL) {
- fprintf(stderr, "Out of memory\n");
- fatalError();
- }
- o = fopen(temp, "wb");
- if (o == NULL) {
- fprintf(stderr, "failed to open output file %s\n", temp);
- fclose(f);
- free(temp);
- return(-1);
- }
- while (1) {
- /*
- * read one line in string buffer.
- */
- if (fgets (&str[0], sizeof (str) - 1, f) == NULL)
- break;
-
- /*
- * remove the ending spaces
- */
- i = strlen(str);
- while ((i > 0) &&
- ((str[i - 1] == '\n') || (str[i - 1] == '\r') ||
- (str[i - 1] == ' ') || (str[i - 1] == '\t'))) {
- i--;
- str[i] = 0;
- }
- doc = xmlReadFile(xml, NULL, options);
- if (doc == NULL) {
- fprintf(stderr, "Failed to parse %s\n", xml);
- ret = 1;
- } else {
- xmlNodePtr root;
- const xmlChar *namespaces[22];
- int j;
- xmlNsPtr ns;
-
- root = xmlDocGetRootElement(doc);
- for (ns = root->nsDef, j = 0;ns != NULL && j < 20;ns=ns->next) {
- namespaces[j++] = ns->href;
- namespaces[j++] = ns->prefix;
- }
- namespaces[j++] = NULL;
- namespaces[j] = NULL;
-
- patternc = xmlPatterncompile((const xmlChar *) str, doc->dict,
- 0, &namespaces[0]);
- if (patternc == NULL) {
- testErrorHandler(NULL,
- "Pattern %s failed to compile\n", str);
- xmlFreeDoc(doc);
- ret = 1;
- continue;
- }
- patstream = xmlPatternGetStreamCtxt(patternc);
- if (patstream != NULL) {
- ret = xmlStreamPush(patstream, NULL, NULL);
- if (ret < 0) {
- fprintf(stderr, "xmlStreamPush() failure\n");
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- }
- }
- nb_tests++;
-
- reader = xmlReaderWalker(doc);
- res = xmlTextReaderRead(reader);
- while (res == 1) {
- patternNode(o, reader, str, patternc, patstream);
- res = xmlTextReaderRead(reader);
- }
- if (res != 0) {
- fprintf(o, "%s : failed to parse\n", filename);
- }
- xmlFreeTextReader(reader);
- xmlFreeDoc(doc);
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- xmlFreePattern(patternc);
-
- }
- }
-
- fclose(f);
- fclose(o);
-
- ret = compareFiles(temp, result);
- if (ret) {
- fprintf(stderr, "Result for %s failed in %s\n", filename, result);
- ret = 1;
- }
- if (temp != NULL) {
- unlink(temp);
- free(temp);
- }
- return(ret);
-}
-#endif /* READER */
-#endif /* PATTERN */
-#ifdef LIBXML_C14N_ENABLED
-/************************************************************************
- * *
- * Canonicalization tests *
- * *
- ************************************************************************/
-static xmlXPathObjectPtr
-load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
- xmlXPathObjectPtr xpath;
- xmlDocPtr doc;
- xmlChar *expr;
- xmlXPathContextPtr ctx;
- xmlNodePtr node;
- xmlNsPtr ns;
-
- /*
- * load XPath expr as a file
- */
- xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
- xmlSubstituteEntitiesDefault(1);
-
- doc = xmlReadFile(filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
- return(NULL);
- }
-
- /*
- * Check the document is of the right kind
- */
- if(xmlDocGetRootElement(doc) == NULL) {
- fprintf(stderr,"Error: empty document for file \"%s\"\n", filename);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- node = doc->children;
- while(node != NULL && !xmlStrEqual(node->name, (const xmlChar *)"XPath")) {
- node = node->next;
- }
-
- if(node == NULL) {
- fprintf(stderr,"Error: XPath element expected in the file \"%s\"\n", filename);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- expr = xmlNodeGetContent(node);
- if(expr == NULL) {
- fprintf(stderr,"Error: XPath content element is NULL \"%s\"\n", filename);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- ctx = xmlXPathNewContext(parent_doc);
- if(ctx == NULL) {
- fprintf(stderr,"Error: unable to create new context\n");
- xmlFree(expr);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- /*
- * Register namespaces
- */
- ns = node->nsDef;
- while(ns != NULL) {
- if(xmlXPathRegisterNs(ctx, ns->prefix, ns->href) != 0) {
- fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", ns->prefix, ns->href);
- xmlFree(expr);
- xmlXPathFreeContext(ctx);
- xmlFreeDoc(doc);
- return(NULL);
- }
- ns = ns->next;
- }
-
- /*
- * Evaluate xpath
- */
- xpath = xmlXPathEvalExpression(expr, ctx);
- if(xpath == NULL) {
- fprintf(stderr,"Error: unable to evaluate xpath expression\n");
-xmlFree(expr);
- xmlXPathFreeContext(ctx);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- /* print_xpath_nodes(xpath->nodesetval); */
-
- xmlFree(expr);
- xmlXPathFreeContext(ctx);
- xmlFreeDoc(doc);
- return(xpath);
-}
-
-/*
- * Macro used to grow the current buffer.
- */
-#define xxx_growBufferReentrant() { \
- buffer_size *= 2; \
- buffer = (xmlChar **) \
- xmlRealloc(buffer, buffer_size * sizeof(xmlChar*)); \
- if (buffer == NULL) { \
- perror("realloc failed"); \
- return(NULL); \
- } \
-}
-
-static xmlChar **
-parse_list(xmlChar *str) {
- xmlChar **buffer;
- xmlChar **out = NULL;
- int buffer_size = 0;
- int len;
-
- if(str == NULL) {
- return(NULL);
- }
-
- len = xmlStrlen(str);
- if((str[0] == '\'') && (str[len - 1] == '\'')) {
- str[len - 1] = '\0';
- str++;
- }
- /*
- * allocate an translation buffer.
- */
- buffer_size = 1000;
- buffer = (xmlChar **) xmlMalloc(buffer_size * sizeof(xmlChar*));
- if (buffer == NULL) {
- perror("malloc failed");
- return(NULL);
- }
- out = buffer;
-
- while(*str != '\0') {
- if (out - buffer > buffer_size - 10) {
- int indx = out - buffer;
-
- xxx_growBufferReentrant();
- out = &buffer[indx];
- }
- (*out++) = str;
- while(*str != ',' && *str != '\0') ++str;
- if(*str == ',') *(str++) = '\0';
- }
- (*out) = NULL;
- return buffer;
-}
-
-static int
-c14nRunTest(const char* xml_filename, int with_comments, int mode,
- const char* xpath_filename, const char *ns_filename,
- const char* result_file) {
- xmlDocPtr doc;
- xmlXPathObjectPtr xpath = NULL;
- xmlChar *result = NULL;
- int ret;
- xmlChar **inclusive_namespaces = NULL;
- const char *nslist = NULL;
- int nssize;
-
-
- /*
- * build an XML tree from a the file; we need to add default
- * attributes and resolve all character and entities references
- */
- xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
- xmlSubstituteEntitiesDefault(1);
-
- doc = xmlReadFile(xml_filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename);
- return(-1);
- }
-
- /*
- * Check the document is of the right kind
- */
- if(xmlDocGetRootElement(doc) == NULL) {
- fprintf(stderr,"Error: empty document for file \"%s\"\n", xml_filename);
- xmlFreeDoc(doc);
- return(-1);
- }
-
- /*
- * load xpath file if specified
- */
- if(xpath_filename) {
- xpath = load_xpath_expr(doc, xpath_filename);
- if(xpath == NULL) {
- fprintf(stderr,"Error: unable to evaluate xpath expression\n");
- xmlFreeDoc(doc);
- return(-1);
- }
- }
-
- if (ns_filename != NULL) {
- if (loadMem(ns_filename, &nslist, &nssize)) {
- fprintf(stderr,"Error: unable to evaluate xpath expression\n");
- if(xpath != NULL) xmlXPathFreeObject(xpath);
- xmlFreeDoc(doc);
- return(-1);
- }
- inclusive_namespaces = parse_list((xmlChar *) nslist);
- }
-
- /*
- * Canonical form
- */
- /* fprintf(stderr,"File \"%s\" loaded: start canonization\n", xml_filename); */
- ret = xmlC14NDocDumpMemory(doc,
- (xpath) ? xpath->nodesetval : NULL,
- mode, inclusive_namespaces,
- with_comments, &result);
- if (ret >= 0) {
- if(result != NULL) {
- if (compareFileMem(result_file, (const char *) result, ret)) {
- fprintf(stderr, "Result mismatch for %s\n", xml_filename);
- fprintf(stderr, "RESULT:\n%s\n", (const char*)result);
- ret = -1;
- }
- }
- } else {
- fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n", xml_filename, ret);
- ret = -1;
- }
-
- /*
- * Cleanup
- */
- if (result != NULL) xmlFree(result);
- if(xpath != NULL) xmlXPathFreeObject(xpath);
- if (inclusive_namespaces != NULL) xmlFree(inclusive_namespaces);
- if (nslist != NULL) free((char *) nslist);
- xmlFreeDoc(doc);
-
- return(ret);
-}
-
-static int
-c14nCommonTest(const char *filename, int with_comments, int mode,
- const char *subdir) {
- char buf[500];
- char prefix[500];
- const char *base;
- int len;
- char *result = NULL;
- char *xpath = NULL;
- char *ns = NULL;
- int ret = 0;
-
- base = baseFilename(filename);
- len = strlen(base);
- len -= 4;
- memcpy(prefix, base, len);
- prefix[len] = 0;
-
- snprintf(buf, 499, "result/c14n/%s/%s", subdir,prefix);
- if (!checkTestFile(buf) && !update_results) {
- fprintf(stderr, "Missing result file %s", buf);
- return(-1);
- }
- result = strdup(buf);
- snprintf(buf, 499, "test/c14n/%s/%s.xpath", subdir,prefix);
- if (checkTestFile(buf)) {
- xpath = strdup(buf);
- }
- snprintf(buf, 499, "test/c14n/%s/%s.ns", subdir,prefix);
- if (checkTestFile(buf)) {
- ns = strdup(buf);
- }
-
- nb_tests++;
- if (c14nRunTest(filename, with_comments, mode,
- xpath, ns, result) < 0)
- ret = 1;
-
- if (result != NULL) free(result);
- if (xpath != NULL) free(xpath);
- if (ns != NULL) free(ns);
- return(ret);
-}
-
-static int
-c14nWithCommentTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- return(c14nCommonTest(filename, 1, XML_C14N_1_0, "with-comments"));
-}
-static int
-c14nWithoutCommentTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- return(c14nCommonTest(filename, 0, XML_C14N_1_0, "without-comments"));
-}
-static int
-c14nExcWithoutCommentTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- return(c14nCommonTest(filename, 0, XML_C14N_EXCLUSIVE_1_0, "exc-without-comments"));
-}
-static int
-c14n11WithoutCommentTest(const char *filename,
- const char *resul ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- return(c14nCommonTest(filename, 0, XML_C14N_1_1, "1-1-without-comments"));
-}
-#endif
-#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined (LIBXML_SAX1_ENABLED)
-/************************************************************************
- * *
- * Catalog and threads test *
- * *
- ************************************************************************/
-
-/*
- * mostly a cut and paste from testThreads.c
- */
-#define MAX_ARGC 20
-
-static const char *catalog = "test/threads/complex.xml";
-static const char *testfiles[] = {
- "test/threads/abc.xml",
- "test/threads/acb.xml",
- "test/threads/bac.xml",
- "test/threads/bca.xml",
- "test/threads/cab.xml",
- "test/threads/cba.xml",
- "test/threads/invalid.xml",
-};
-
-static const char *Okay = "OK";
-static const char *Failed = "Failed";
-
-#ifndef xmlDoValidityCheckingDefaultValue
-#error xmlDoValidityCheckingDefaultValue is not a macro
-#endif
-#ifndef xmlGenericErrorContext
-#error xmlGenericErrorContext is not a macro
-#endif
-
-static void *
-thread_specific_data(void *private_data)
-{
- xmlDocPtr myDoc;
- const char *filename = (const char *) private_data;
- int okay = 1;
-
- if (!strcmp(filename, "test/threads/invalid.xml")) {
- xmlDoValidityCheckingDefaultValue = 0;
- xmlGenericErrorContext = stdout;
- } else {
- xmlDoValidityCheckingDefaultValue = 1;
- xmlGenericErrorContext = stderr;
- }
- myDoc = xmlParseFile(filename);
- if (myDoc) {
- xmlFreeDoc(myDoc);
- } else {
- printf("parse failed\n");
- okay = 0;
- }
- if (!strcmp(filename, "test/threads/invalid.xml")) {
- if (xmlDoValidityCheckingDefaultValue != 0) {
- printf("ValidityCheckingDefaultValue override failed\n");
- okay = 0;
- }
- if (xmlGenericErrorContext != stdout) {
- printf("xmlGenericErrorContext override failed\n");
- okay = 0;
- }
- } else {
- if (xmlDoValidityCheckingDefaultValue != 1) {
- printf("ValidityCheckingDefaultValue override failed\n");
- okay = 0;
- }
- if (xmlGenericErrorContext != stderr) {
- printf("xmlGenericErrorContext override failed\n");
- okay = 0;
- }
- }
- if (okay == 0)
- return ((void *) Failed);
- return ((void *) Okay);
-}
-
-#if defined WIN32
-#include <windows.h>
-#include <string.h>
-
-#define TEST_REPEAT_COUNT 500
-
-static HANDLE tid[MAX_ARGC];
-
-static DWORD WINAPI
-win32_thread_specific_data(void *private_data)
-{
- return((DWORD) thread_specific_data(private_data));
-}
-
-static int
-testThread(void)
-{
- unsigned int i, repeat;
- unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
- DWORD results[MAX_ARGC];
- BOOL ret;
- int res = 0;
-
- xmlInitParser();
- for (repeat = 0; repeat < TEST_REPEAT_COUNT; repeat++) {
- xmlLoadCatalog(catalog);
- nb_tests++;
-
- for (i = 0; i < num_threads; i++) {
- results[i] = 0;
- tid[i] = (HANDLE) - 1;
- }
-
- for (i = 0; i < num_threads; i++) {
- DWORD useless;
-
- tid[i] = CreateThread(NULL, 0,
- win32_thread_specific_data,
- (void *) testfiles[i], 0,
- &useless);
- if (tid[i] == NULL) {
- fprintf(stderr, "CreateThread failed\n");
- return(1);
- }
- }
-
- if (WaitForMultipleObjects(num_threads, tid, TRUE, INFINITE) ==
- WAIT_FAILED) {
- fprintf(stderr, "WaitForMultipleObjects failed\n");
- return(1);
- }
-
- for (i = 0; i < num_threads; i++) {
- ret = GetExitCodeThread(tid[i], &results[i]);
- if (ret == 0) {
- fprintf(stderr, "GetExitCodeThread failed\n");
- return(1);
- }
- CloseHandle(tid[i]);
- }
-
- xmlCatalogCleanup();
- for (i = 0; i < num_threads; i++) {
- if (results[i] != (DWORD) Okay) {
- fprintf(stderr, "Thread %d handling %s failed\n",
- i, testfiles[i]);
- res = 1;
- }
- }
- }
-
- return (res);
-}
-
-#elif defined __BEOS__
-#include <OS.h>
-
-static thread_id tid[MAX_ARGC];
-
-static int
-testThread(void)
-{
- unsigned int i, repeat;
- unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
- void *results[MAX_ARGC];
- status_t ret;
- int res = 0;
-
- xmlInitParser();
- for (repeat = 0; repeat < 500; repeat++) {
- xmlLoadCatalog(catalog);
- for (i = 0; i < num_threads; i++) {
- results[i] = NULL;
- tid[i] = (thread_id) - 1;
- }
- for (i = 0; i < num_threads; i++) {
- tid[i] =
- spawn_thread(thread_specific_data, "xmlTestThread",
- B_NORMAL_PRIORITY, (void *) testfiles[i]);
- if (tid[i] < B_OK) {
- fprintf(stderr, "beos_thread_create failed\n");
- return (1);
- }
- printf("beos_thread_create %d -> %d\n", i, tid[i]);
- }
- for (i = 0; i < num_threads; i++) {
- ret = wait_for_thread(tid[i], &results[i]);
- printf("beos_thread_wait %d -> %d\n", i, ret);
- if (ret != B_OK) {
- fprintf(stderr, "beos_thread_wait failed\n");
- return (1);
- }
- }
-
- xmlCatalogCleanup();
- ret = B_OK;
- for (i = 0; i < num_threads; i++)
- if (results[i] != (void *) Okay) {
- printf("Thread %d handling %s failed\n", i, testfiles[i]);
- ret = B_ERROR;
- }
- }
- if (ret != B_OK)
- return(1);
- return (0);
-}
-
-#elif defined HAVE_PTHREAD_H
-#include <pthread.h>
-
-static pthread_t tid[MAX_ARGC];
-
-static int
-testThread(void)
-{
- unsigned int i, repeat;
- unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
- void *results[MAX_ARGC];
- int ret;
- int res = 0;
-
- xmlInitParser();
-
- for (repeat = 0; repeat < 500; repeat++) {
- xmlLoadCatalog(catalog);
- nb_tests++;
-
- for (i = 0; i < num_threads; i++) {
- results[i] = NULL;
- tid[i] = (pthread_t) - 1;
- }
-
- for (i = 0; i < num_threads; i++) {
- ret = pthread_create(&tid[i], 0, thread_specific_data,
- (void *) testfiles[i]);
- if (ret != 0) {
- fprintf(stderr, "pthread_create failed\n");
- return (1);
- }
- }
- for (i = 0; i < num_threads; i++) {
- ret = pthread_join(tid[i], &results[i]);
- if (ret != 0) {
- fprintf(stderr, "pthread_join failed\n");
- return (1);
- }
- }
-
- xmlCatalogCleanup();
- for (i = 0; i < num_threads; i++)
- if (results[i] != (void *) Okay) {
- fprintf(stderr, "Thread %d handling %s failed\n",
- i, testfiles[i]);
- res = 1;
- }
- }
- return (res);
-}
-
-#else
-static int
-testThread(void)
-{
- fprintf(stderr,
- "Specific platform thread support not detected\n");
- return (-1);
-}
-#endif
-static int
-threadsTest(const char *filename ATTRIBUTE_UNUSED,
- const char *resul ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- return(testThread());
-}
-#endif
-/************************************************************************
- * *
- * Tests Descriptions *
- * *
- ************************************************************************/
-
-static
-testDesc testDescriptions[] = {
- { "XML regression tests" ,
- oldParseTest, "./test/*", "result/", "", NULL,
- 0 },
- { "XML regression tests on memory" ,
- memParseTest, "./test/*", "result/", "", NULL,
- 0 },
- { "XML entity subst regression tests" ,
- noentParseTest, "./test/*", "result/noent/", "", NULL,
- XML_PARSE_NOENT },
- { "XML Namespaces regression tests",
- errParseTest, "./test/namespaces/*", "result/namespaces/", "", ".err",
- 0 },
- { "Error cases regression tests",
- errParseTest, "./test/errors/*.xml", "result/errors/", "", ".err",
- 0 },
-#ifdef LIBXML_READER_ENABLED
- { "Error cases stream regression tests",
- streamParseTest, "./test/errors/*.xml", "result/errors/", NULL, ".str",
- 0 },
- { "Reader regression tests",
- streamParseTest, "./test/*", "result/", ".rdr", NULL,
- 0 },
- { "Reader entities substitution regression tests",
- streamParseTest, "./test/*", "result/", ".rde", NULL,
- XML_PARSE_NOENT },
- { "Reader on memory regression tests",
- streamMemParseTest, "./test/*", "result/", ".rdr", NULL,
- 0 },
- { "Walker regression tests",
- walkerParseTest, "./test/*", "result/", ".rdr", NULL,
- 0 },
-#endif
-#ifdef LIBXML_SAX1_ENABLED
- { "SAX1 callbacks regression tests" ,
- saxParseTest, "./test/*", "result/", ".sax", NULL,
- XML_PARSE_SAX1 },
- { "SAX2 callbacks regression tests" ,
- saxParseTest, "./test/*", "result/", ".sax2", NULL,
- 0 },
-#endif
-#ifdef LIBXML_PUSH_ENABLED
- { "XML push regression tests" ,
- pushParseTest, "./test/*", "result/", "", NULL,
- 0 },
-#endif
-#ifdef LIBXML_HTML_ENABLED
- { "HTML regression tests" ,
- errParseTest, "./test/HTML/*", "result/HTML/", "", ".err",
- XML_PARSE_HTML },
-#ifdef LIBXML_PUSH_ENABLED
- { "Push HTML regression tests" ,
- pushParseTest, "./test/HTML/*", "result/HTML/", "", ".err",
- XML_PARSE_HTML },
-#endif
-#ifdef LIBXML_SAX1_ENABLED
- { "HTML SAX regression tests" ,
- saxParseTest, "./test/HTML/*", "result/HTML/", ".sax", NULL,
- XML_PARSE_HTML },
-#endif
-#endif
-#ifdef LIBXML_VALID_ENABLED
- { "Valid documents regression tests" ,
- errParseTest, "./test/VCM/*", NULL, NULL, NULL,
- XML_PARSE_DTDVALID },
- { "Validity checking regression tests" ,
- errParseTest, "./test/VC/*", "result/VC/", NULL, "",
- XML_PARSE_DTDVALID },
-#ifdef LIBXML_READER_ENABLED
- { "Streaming validity checking regression tests" ,
- streamParseTest, "./test/valid/*.xml", "result/valid/", NULL, ".err.rdr",
- XML_PARSE_DTDVALID },
- { "Streaming validity error checking regression tests" ,
- streamParseTest, "./test/VC/*", "result/VC/", NULL, ".rdr",
- XML_PARSE_DTDVALID },
-#endif
- { "General documents valid regression tests" ,
- errParseTest, "./test/valid/*", "result/valid/", "", ".err",
- XML_PARSE_DTDVALID },
-#endif
-#ifdef LIBXML_XINCLUDE_ENABLED
- { "XInclude regression tests" ,
- errParseTest, "./test/XInclude/docs/*", "result/XInclude/", "", NULL,
- /* Ignore errors at this point ".err", */
- XML_PARSE_XINCLUDE },
-#ifdef LIBXML_READER_ENABLED
- { "XInclude xmlReader regression tests",
- streamParseTest, "./test/XInclude/docs/*", "result/XInclude/", ".rdr",
- /* Ignore errors at this point ".err", */
- NULL, XML_PARSE_XINCLUDE },
-#endif
- { "XInclude regression tests stripping include nodes" ,
- errParseTest, "./test/XInclude/docs/*", "result/XInclude/", "", NULL,
- /* Ignore errors at this point ".err", */
- XML_PARSE_XINCLUDE | XML_PARSE_NOXINCNODE },
-#ifdef LIBXML_READER_ENABLED
- { "XInclude xmlReader regression tests stripping include nodes",
- streamParseTest, "./test/XInclude/docs/*", "result/XInclude/", ".rdr",
- /* Ignore errors at this point ".err", */
- NULL, XML_PARSE_XINCLUDE | XML_PARSE_NOXINCNODE },
-#endif
-#endif
-#ifdef LIBXML_XPATH_ENABLED
-#ifdef LIBXML_DEBUG_ENABLED
- { "XPath expressions regression tests" ,
- xpathExprTest, "./test/XPath/expr/*", "result/XPath/expr/", "", NULL,
- 0 },
- { "XPath document queries regression tests" ,
- xpathDocTest, "./test/XPath/docs/*", NULL, NULL, NULL,
- 0 },
-#ifdef LIBXML_XPTR_ENABLED
- { "XPointer document queries regression tests" ,
- xptrDocTest, "./test/XPath/docs/*", NULL, NULL, NULL,
- 0 },
-#endif
- { "xml:id regression tests" ,
- xmlidDocTest, "./test/xmlid/*", "result/xmlid/", "", ".err",
- 0 },
-#endif
-#endif
- { "URI parsing tests" ,
- uriParseTest, "./test/URI/*.uri", "result/URI/", "", NULL,
- 0 },
- { "URI base composition tests" ,
- uriBaseTest, "./test/URI/*.data", "result/URI/", "", NULL,
- 0 },
- { "Path URI conversion tests" ,
- uriPathTest, NULL, NULL, NULL, NULL,
- 0 },
-#ifdef LIBXML_SCHEMAS_ENABLED
- { "Schemas regression tests" ,
- schemasTest, "./test/schemas/*_*.xsd", NULL, NULL, NULL,
- 0 },
- { "Relax-NG regression tests" ,
- rngTest, "./test/relaxng/*.rng", NULL, NULL, NULL,
- XML_PARSE_DTDATTR | XML_PARSE_NOENT },
-#ifdef LIBXML_READER_ENABLED
- { "Relax-NG streaming regression tests" ,
- rngStreamTest, "./test/relaxng/*.rng", NULL, NULL, NULL,
- XML_PARSE_DTDATTR | XML_PARSE_NOENT },
-#endif
-#endif
-#ifdef LIBXML_PATTERN_ENABLED
-#ifdef LIBXML_READER_ENABLED
- { "Pattern regression tests" ,
- patternTest, "./test/pattern/*.pat", "result/pattern/", NULL, NULL,
- 0 },
-#endif
-#endif
-#ifdef LIBXML_C14N_ENABLED
- { "C14N with comments regression tests" ,
- c14nWithCommentTest, "./test/c14n/with-comments/*.xml", NULL, NULL, NULL,
- 0 },
- { "C14N without comments regression tests" ,
- c14nWithoutCommentTest, "./test/c14n/without-comments/*.xml", NULL, NULL, NULL,
- 0 },
- { "C14N exclusive without comments regression tests" ,
- c14nExcWithoutCommentTest, "./test/c14n/exc-without-comments/*.xml", NULL, NULL, NULL,
- 0 },
- { "C14N 1.1 without comments regression tests" ,
- c14n11WithoutCommentTest, "./test/c14n/1-1-without-comments/*.xml", NULL, NULL, NULL,
- 0 },
-#endif
-#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_SAX1_ENABLED)
- { "Catalog and Threads regression tests" ,
- threadsTest, NULL, NULL, NULL, NULL,
- 0 },
-#endif
- {NULL, NULL, NULL, NULL, NULL, NULL, 0}
-};
-
-/************************************************************************
- * *
- * The main code driving the tests *
- * *
- ************************************************************************/
-
-static int
-launchTests(testDescPtr tst) {
- int res = 0, err = 0;
- size_t i;
- char *result;
- char *error;
- int mem;
-
- if (tst == NULL) return(-1);
- if (tst->in != NULL) {
- glob_t globbuf;
-
- globbuf.gl_offs = 0;
- glob(tst->in, GLOB_DOOFFS, NULL, &globbuf);
- for (i = 0;i < globbuf.gl_pathc;i++) {
- if (!checkTestFile(globbuf.gl_pathv[i]))
- continue;
- if (tst->suffix != NULL) {
- result = resultFilename(globbuf.gl_pathv[i], tst->out,
- tst->suffix);
- if (result == NULL) {
- fprintf(stderr, "Out of memory !\n");
- fatalError();
- }
- } else {
- result = NULL;
- }
- if (tst->err != NULL) {
- error = resultFilename(globbuf.gl_pathv[i], tst->out,
- tst->err);
- if (error == NULL) {
- fprintf(stderr, "Out of memory !\n");
- fatalError();
- }
- } else {
- error = NULL;
- }
- if ((result) &&(!checkTestFile(result)) && !update_results) {
- fprintf(stderr, "Missing result file %s\n", result);
- } else if ((error) &&(!checkTestFile(error)) && !update_results) {
- fprintf(stderr, "Missing error file %s\n", error);
- } else {
- mem = xmlMemUsed();
- extraMemoryFromResolver = 0;
- testErrorsSize = 0;
- testErrors[0] = 0;
- res = tst->func(globbuf.gl_pathv[i], result, error,
- tst->options | XML_PARSE_COMPACT);
- xmlResetLastError();
- if (res != 0) {
- fprintf(stderr, "File %s generated an error\n",
- globbuf.gl_pathv[i]);
- nb_errors++;
- err++;
- }
- else if (xmlMemUsed() != mem) {
- if ((xmlMemUsed() != mem) &&
- (extraMemoryFromResolver == 0)) {
- fprintf(stderr, "File %s leaked %d bytes\n",
- globbuf.gl_pathv[i], xmlMemUsed() - mem);
- nb_leaks++;
- err++;
- }
- }
- testErrorsSize = 0;
- }
- if (result)
- free(result);
- if (error)
- free(error);
- }
- globfree(&globbuf);
- } else {
- testErrorsSize = 0;
- testErrors[0] = 0;
- extraMemoryFromResolver = 0;
- res = tst->func(NULL, NULL, NULL, tst->options);
- if (res != 0) {
- nb_errors++;
- err++;
- }
- }
- return(err);
-}
-
-static int verbose = 0;
-static int tests_quiet = 0;
-
-static int
-runtest(int i) {
- int ret = 0, res;
- int old_errors, old_tests, old_leaks;
-
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL))
- printf("## %s\n", testDescriptions[i].desc);
- res = launchTests(&testDescriptions[i]);
- if (res != 0)
- ret++;
- if (verbose) {
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
- else
- printf("Ran %d tests, %d errors, %d leaks\n",
- nb_tests - old_tests,
- nb_errors - old_errors,
- nb_leaks - old_leaks);
- }
- return(ret);
-}
-
-int
-main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- int i, a, ret = 0;
- int subset = 0;
-
- initializeLibxml2();
-
- for (a = 1; a < argc;a++) {
- if (!strcmp(argv[a], "-v"))
- verbose = 1;
- else if (!strcmp(argv[a], "-u"))
- update_results = 1;
- else if (!strcmp(argv[a], "-quiet"))
- tests_quiet = 1;
- else {
- for (i = 0; testDescriptions[i].func != NULL; i++) {
- if (strstr(testDescriptions[i].desc, argv[a])) {
- ret += runtest(i);
- subset++;
- }
- }
- }
- }
- if (subset == 0) {
- for (i = 0; testDescriptions[i].func != NULL; i++) {
- ret += runtest(i);
- }
- }
- if ((nb_errors == 0) && (nb_leaks == 0)) {
- ret = 0;
- printf("Total %d tests, no errors\n",
- nb_tests);
- } else {
- ret = 1;
- printf("Total %d tests, %d errors, %d leaks\n",
- nb_tests, nb_errors, nb_leaks);
- }
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(ret);
-}
-
-#else /* ! LIBXML_OUTPUT_ENABLED */
-int
-main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- fprintf(stderr, "runtest requires output to be enabled in libxml2\n");
- return(1);
-}
-#endif
diff --git a/external/libxml2_android/jni/libxml2/runxmlconf.c b/external/libxml2_android/jni/libxml2/runxmlconf.c
deleted file mode 100644
index cef20f48..00000000
--- a/external/libxml2_android/jni/libxml2/runxmlconf.c
+++ /dev/null
@@ -1,607 +0,0 @@
-/*
- * runsuite.c: C program to run libxml2 againts published testsuites
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-#include <stdio.h>
-
-#ifdef LIBXML_XPATH_ENABLED
-
-#if !defined(_WIN32) || defined(__CYGWIN__)
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include <libxml/xmlreader.h>
-
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-
-#define LOGFILE "runxmlconf.log"
-static FILE *logfile = NULL;
-static int verbose = 0;
-
-#define NB_EXPECTED_ERRORS 15
-
-
-const char *skipped_tests[] = {
-/* http://lists.w3.org/Archives/Public/public-xml-testsuite/2008Jul/0000.html */
- "rmt-ns10-035",
- NULL
-};
-
-/************************************************************************
- * *
- * File name and path utilities *
- * *
- ************************************************************************/
-
-static int checkTestFile(const char *filename) {
- struct stat buf;
-
- if (stat(filename, &buf) == -1)
- return(0);
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
- if (!(buf.st_mode & _S_IFREG))
- return(0);
-#else
- if (!S_ISREG(buf.st_mode))
- return(0);
-#endif
-
- return(1);
-}
-
-static xmlChar *composeDir(const xmlChar *dir, const xmlChar *path) {
- char buf[500];
-
- if (dir == NULL) return(xmlStrdup(path));
- if (path == NULL) return(NULL);
-
- snprintf(buf, 500, "%s/%s", (const char *) dir, (const char *) path);
- return(xmlStrdup((const xmlChar *) buf));
-}
-
-/************************************************************************
- * *
- * Libxml2 specific routines *
- * *
- ************************************************************************/
-
-static int nb_skipped = 0;
-static int nb_tests = 0;
-static int nb_errors = 0;
-static int nb_leaks = 0;
-
-/*
- * We need to trap calls to the resolver to not account memory for the catalog
- * and not rely on any external resources.
- */
-static xmlParserInputPtr
-testExternalEntityLoader(const char *URL, const char *ID ATTRIBUTE_UNUSED,
- xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr ret;
-
- ret = xmlNewInputFromFile(ctxt, (const char *) URL);
-
- return(ret);
-}
-
-/*
- * Trapping the error messages at the generic level to grab the equivalent of
- * stderr messages on CLI tools.
- */
-static char testErrors[32769];
-static int testErrorsSize = 0;
-static int nbError = 0;
-static int nbFatal = 0;
-
-static void test_log(const char *msg, ...) {
- va_list args;
- if (logfile != NULL) {
- fprintf(logfile, "\n------------\n");
- va_start(args, msg);
- vfprintf(logfile, msg, args);
- va_end(args);
- fprintf(logfile, "%s", testErrors);
- testErrorsSize = 0; testErrors[0] = 0;
- }
- if (verbose) {
- va_start(args, msg);
- vfprintf(stderr, msg, args);
- va_end(args);
- }
-}
-
-static void
-testErrorHandler(void *userData ATTRIBUTE_UNUSED, xmlErrorPtr error) {
- int res;
-
- if (testErrorsSize >= 32768)
- return;
- res = snprintf(&testErrors[testErrorsSize],
- 32768 - testErrorsSize,
- "%s:%d: %s\n", (error->file ? error->file : "entity"),
- error->line, error->message);
- if (error->level == XML_ERR_FATAL)
- nbFatal++;
- else if (error->level == XML_ERR_ERROR)
- nbError++;
- if (testErrorsSize + res >= 32768) {
- /* buffer is full */
- testErrorsSize = 32768;
- testErrors[testErrorsSize] = 0;
- } else {
- testErrorsSize += res;
- }
- testErrors[testErrorsSize] = 0;
-}
-
-static xmlXPathContextPtr ctxtXPath;
-
-static void
-initializeLibxml2(void) {
- xmlGetWarningsDefaultValue = 0;
- xmlPedanticParserDefault(0);
-
- xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
- xmlInitParser();
- xmlSetExternalEntityLoader(testExternalEntityLoader);
- ctxtXPath = xmlXPathNewContext(NULL);
- /*
- * Deactivate the cache if created; otherwise we have to create/free it
- * for every test, since it will confuse the memory leak detection.
- * Note that normally this need not be done, since the cache is not
- * created until set explicitely with xmlXPathContextSetCache();
- * but for test purposes it is sometimes usefull to activate the
- * cache by default for the whole library.
- */
- if (ctxtXPath->cache != NULL)
- xmlXPathContextSetCache(ctxtXPath, 0, -1, 0);
- xmlSetStructuredErrorFunc(NULL, testErrorHandler);
-}
-
-/************************************************************************
- * *
- * Run the xmlconf test if found *
- * *
- ************************************************************************/
-
-static int
-xmlconfTestInvalid(const char *id, const char *filename, int options) {
- xmlDocPtr doc;
- xmlParserCtxtPtr ctxt;
- int ret = 1;
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- test_log("test %s : %s out of memory\n",
- id, filename);
- return(0);
- }
- doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
- if (doc == NULL) {
- test_log("test %s : %s invalid document turned not well-formed too\n",
- id, filename);
- } else {
- /* invalidity should be reported both in the context and in the document */
- if ((ctxt->valid != 0) || (doc->properties & XML_DOC_DTDVALID)) {
- test_log("test %s : %s failed to detect invalid document\n",
- id, filename);
- nb_errors++;
- ret = 0;
- }
- xmlFreeDoc(doc);
- }
- xmlFreeParserCtxt(ctxt);
- return(ret);
-}
-
-static int
-xmlconfTestValid(const char *id, const char *filename, int options) {
- xmlDocPtr doc;
- xmlParserCtxtPtr ctxt;
- int ret = 1;
-
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- test_log("test %s : %s out of memory\n",
- id, filename);
- return(0);
- }
- doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
- if (doc == NULL) {
- test_log("test %s : %s failed to parse a valid document\n",
- id, filename);
- nb_errors++;
- ret = 0;
- } else {
- /* validity should be reported both in the context and in the document */
- if ((ctxt->valid == 0) || ((doc->properties & XML_DOC_DTDVALID) == 0)) {
- test_log("test %s : %s failed to validate a valid document\n",
- id, filename);
- nb_errors++;
- ret = 0;
- }
- xmlFreeDoc(doc);
- }
- xmlFreeParserCtxt(ctxt);
- return(ret);
-}
-
-static int
-xmlconfTestNotNSWF(const char *id, const char *filename, int options) {
- xmlDocPtr doc;
- int ret = 1;
-
- /*
- * In case of Namespace errors, libxml2 will still parse the document
- * but log a Namesapce error.
- */
- doc = xmlReadFile(filename, NULL, options);
- if (doc == NULL) {
- test_log("test %s : %s failed to parse the XML\n",
- id, filename);
- nb_errors++;
- ret = 0;
- } else {
- if ((xmlLastError.code == XML_ERR_OK) ||
- (xmlLastError.domain != XML_FROM_NAMESPACE)) {
- test_log("test %s : %s failed to detect namespace error\n",
- id, filename);
- nb_errors++;
- ret = 0;
- }
- xmlFreeDoc(doc);
- }
- return(ret);
-}
-
-static int
-xmlconfTestNotWF(const char *id, const char *filename, int options) {
- xmlDocPtr doc;
- int ret = 1;
-
- doc = xmlReadFile(filename, NULL, options);
- if (doc != NULL) {
- test_log("test %s : %s failed to detect not well formedness\n",
- id, filename);
- nb_errors++;
- xmlFreeDoc(doc);
- ret = 0;
- }
- return(ret);
-}
-
-static int
-xmlconfTestItem(xmlDocPtr doc, xmlNodePtr cur) {
- int ret = -1;
- xmlChar *type = NULL;
- xmlChar *filename = NULL;
- xmlChar *uri = NULL;
- xmlChar *base = NULL;
- xmlChar *id = NULL;
- xmlChar *rec = NULL;
- xmlChar *version = NULL;
- xmlChar *entities = NULL;
- xmlChar *edition = NULL;
- int options = 0;
- int nstest = 0;
- int mem, final;
- int i;
-
- testErrorsSize = 0; testErrors[0] = 0;
- nbError = 0;
- nbFatal = 0;
- id = xmlGetProp(cur, BAD_CAST "ID");
- if (id == NULL) {
- test_log("test missing ID, line %ld\n", xmlGetLineNo(cur));
- goto error;
- }
- for (i = 0;skipped_tests[i] != NULL;i++) {
- if (!strcmp(skipped_tests[i], (char *) id)) {
- test_log("Skipping test %s from skipped list\n", (char *) id);
- ret = 0;
- nb_skipped++;
- goto error;
- }
- }
- type = xmlGetProp(cur, BAD_CAST "TYPE");
- if (type == NULL) {
- test_log("test %s missing TYPE\n", (char *) id);
- goto error;
- }
- uri = xmlGetProp(cur, BAD_CAST "URI");
- if (uri == NULL) {
- test_log("test %s missing URI\n", (char *) id);
- goto error;
- }
- base = xmlNodeGetBase(doc, cur);
- filename = composeDir(base, uri);
- if (!checkTestFile((char *) filename)) {
- test_log("test %s missing file %s \n", id,
- (filename ? (char *)filename : "NULL"));
- goto error;
- }
-
- version = xmlGetProp(cur, BAD_CAST "VERSION");
-
- entities = xmlGetProp(cur, BAD_CAST "ENTITIES");
- if (!xmlStrEqual(entities, BAD_CAST "none")) {
- options |= XML_PARSE_DTDLOAD;
- options |= XML_PARSE_NOENT;
- }
- rec = xmlGetProp(cur, BAD_CAST "RECOMMENDATION");
- if ((rec == NULL) ||
- (xmlStrEqual(rec, BAD_CAST "XML1.0")) ||
- (xmlStrEqual(rec, BAD_CAST "XML1.0-errata2e")) ||
- (xmlStrEqual(rec, BAD_CAST "XML1.0-errata3e")) ||
- (xmlStrEqual(rec, BAD_CAST "XML1.0-errata4e"))) {
- if ((version != NULL) && (!xmlStrEqual(version, BAD_CAST "1.0"))) {
- test_log("Skipping test %s for %s\n", (char *) id,
- (char *) version);
- ret = 0;
- nb_skipped++;
- goto error;
- }
- ret = 1;
- } else if ((xmlStrEqual(rec, BAD_CAST "NS1.0")) ||
- (xmlStrEqual(rec, BAD_CAST "NS1.0-errata1e"))) {
- ret = 1;
- nstest = 1;
- } else {
- test_log("Skipping test %s for REC %s\n", (char *) id, (char *) rec);
- ret = 0;
- nb_skipped++;
- goto error;
- }
- edition = xmlGetProp(cur, BAD_CAST "EDITION");
- if ((edition != NULL) && (xmlStrchr(edition, '5') == NULL)) {
- /* test limited to all versions before 5th */
- options |= XML_PARSE_OLD10;
- }
-
- /*
- * Reset errors and check memory usage before the test
- */
- xmlResetLastError();
- testErrorsSize = 0; testErrors[0] = 0;
- mem = xmlMemUsed();
-
- if (xmlStrEqual(type, BAD_CAST "not-wf")) {
- if (nstest == 0)
- xmlconfTestNotWF((char *) id, (char *) filename, options);
- else
- xmlconfTestNotNSWF((char *) id, (char *) filename, options);
- } else if (xmlStrEqual(type, BAD_CAST "valid")) {
- options |= XML_PARSE_DTDVALID;
- xmlconfTestValid((char *) id, (char *) filename, options);
- } else if (xmlStrEqual(type, BAD_CAST "invalid")) {
- options |= XML_PARSE_DTDVALID;
- xmlconfTestInvalid((char *) id, (char *) filename, options);
- } else if (xmlStrEqual(type, BAD_CAST "error")) {
- test_log("Skipping error test %s \n", (char *) id);
- ret = 0;
- nb_skipped++;
- goto error;
- } else {
- test_log("test %s unknown TYPE value %s\n", (char *) id, (char *)type);
- ret = -1;
- goto error;
- }
-
- /*
- * Reset errors and check memory usage after the test
- */
- xmlResetLastError();
- final = xmlMemUsed();
- if (final > mem) {
- test_log("test %s : %s leaked %d bytes\n",
- id, filename, final - mem);
- nb_leaks++;
- xmlMemDisplayLast(logfile, final - mem);
- }
- nb_tests++;
-
-error:
- if (type != NULL)
- xmlFree(type);
- if (entities != NULL)
- xmlFree(entities);
- if (edition != NULL)
- xmlFree(edition);
- if (version != NULL)
- xmlFree(version);
- if (filename != NULL)
- xmlFree(filename);
- if (uri != NULL)
- xmlFree(uri);
- if (base != NULL)
- xmlFree(base);
- if (id != NULL)
- xmlFree(id);
- if (rec != NULL)
- xmlFree(rec);
- return(ret);
-}
-
-static int
-xmlconfTestCases(xmlDocPtr doc, xmlNodePtr cur, int level) {
- xmlChar *profile;
- int ret = 0;
- int tests = 0;
- int output = 0;
-
- if (level == 1) {
- profile = xmlGetProp(cur, BAD_CAST "PROFILE");
- if (profile != NULL) {
- output = 1;
- level++;
- printf("Test cases: %s\n", (char *) profile);
- xmlFree(profile);
- }
- }
- cur = cur->children;
- while (cur != NULL) {
- /* look only at elements we ignore everything else */
- if (cur->type == XML_ELEMENT_NODE) {
- if (xmlStrEqual(cur->name, BAD_CAST "TESTCASES")) {
- ret += xmlconfTestCases(doc, cur, level);
- } else if (xmlStrEqual(cur->name, BAD_CAST "TEST")) {
- if (xmlconfTestItem(doc, cur) >= 0)
- ret++;
- tests++;
- } else {
- fprintf(stderr, "Unhandled element %s\n", (char *)cur->name);
- }
- }
- cur = cur->next;
- }
- if (output == 1) {
- if (tests > 0)
- printf("Test cases: %d tests\n", tests);
- }
- return(ret);
-}
-
-static int
-xmlconfTestSuite(xmlDocPtr doc, xmlNodePtr cur) {
- xmlChar *profile;
- int ret = 0;
-
- profile = xmlGetProp(cur, BAD_CAST "PROFILE");
- if (profile != NULL) {
- printf("Test suite: %s\n", (char *) profile);
- xmlFree(profile);
- } else
- printf("Test suite\n");
- cur = cur->children;
- while (cur != NULL) {
- /* look only at elements we ignore everything else */
- if (cur->type == XML_ELEMENT_NODE) {
- if (xmlStrEqual(cur->name, BAD_CAST "TESTCASES")) {
- ret += xmlconfTestCases(doc, cur, 1);
- } else {
- fprintf(stderr, "Unhandled element %s\n", (char *)cur->name);
- }
- }
- cur = cur->next;
- }
- return(ret);
-}
-
-static void
-xmlconfInfo(void) {
- fprintf(stderr, " you need to fetch and extract the\n");
- fprintf(stderr, " latest XML Conformance Test Suites\n");
- fprintf(stderr, " http://www.w3.org/XML/Test/xmlts20080827.tar.gz\n");
- fprintf(stderr, " see http://www.w3.org/XML/Test/ for informations\n");
-}
-
-static int
-xmlconfTest(void) {
- const char *confxml = "xmlconf/xmlconf.xml";
- xmlDocPtr doc;
- xmlNodePtr cur;
- int ret = 0;
-
- if (!checkTestFile(confxml)) {
- fprintf(stderr, "%s is missing \n", confxml);
- xmlconfInfo();
- return(-1);
- }
- doc = xmlReadFile(confxml, NULL, XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "%s is corrupted \n", confxml);
- xmlconfInfo();
- return(-1);
- }
-
- cur = xmlDocGetRootElement(doc);
- if ((cur == NULL) || (!xmlStrEqual(cur->name, BAD_CAST "TESTSUITE"))) {
- fprintf(stderr, "Unexpected format %s\n", confxml);
- xmlconfInfo();
- ret = -1;
- } else {
- ret = xmlconfTestSuite(doc, cur);
- }
- xmlFreeDoc(doc);
- return(ret);
-}
-
-/************************************************************************
- * *
- * The driver for the tests *
- * *
- ************************************************************************/
-
-int
-main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- int ret = 0;
- int old_errors, old_tests, old_leaks;
-
- logfile = fopen(LOGFILE, "w");
- if (logfile == NULL) {
- fprintf(stderr,
- "Could not open the log file, running in verbose mode\n");
- verbose = 1;
- }
- initializeLibxml2();
-
- if ((argc >= 2) && (!strcmp(argv[1], "-v")))
- verbose = 1;
-
-
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- xmlconfTest();
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
- else
- printf("Ran %d tests, %d errors, %d leaks\n",
- nb_tests - old_tests,
- nb_errors - old_errors,
- nb_leaks - old_leaks);
- if ((nb_errors == 0) && (nb_leaks == 0)) {
- ret = 0;
- printf("Total %d tests, no errors\n",
- nb_tests);
- } else {
- ret = 1;
- printf("Total %d tests, %d errors, %d leaks\n",
- nb_tests, nb_errors, nb_leaks);
- printf("See %s for detailed output\n", LOGFILE);
- if ((nb_leaks == 0) && (nb_errors == NB_EXPECTED_ERRORS)) {
- printf("%d errors were expected\n", nb_errors);
- ret = 0;
- }
- }
- xmlXPathFreeContext(ctxtXPath);
- xmlCleanupParser();
- xmlMemoryDump();
-
- if (logfile != NULL)
- fclose(logfile);
- return(ret);
-}
-
-#else /* ! LIBXML_XPATH_ENABLED */
-#include <stdio.h>
-int
-main(int argc, char **argv) {
- fprintf(stderr, "%s need XPath support\n", argv[0]);
-}
-#endif
diff --git a/external/libxml2_android/jni/libxml2/save.h b/external/libxml2_android/jni/libxml2/save.h
deleted file mode 100644
index 2c32a103..00000000
--- a/external/libxml2_android/jni/libxml2/save.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Summary: Internal Interfaces for saving in libxml2
- * Description: this module describes a few interfaces which were
- * addded along with the API changes in 2.9.0
- * those are private routines at this point
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_SAVE_H__
-#define __XML_SAVE_H__
-
-#include <libxml/tree.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef LIBXML_OUTPUT_ENABLED
-void xmlBufAttrSerializeTxtContent(xmlBufPtr buf, xmlDocPtr doc,
- xmlAttrPtr attr, const xmlChar * string);
-void xmlBufDumpNotationTable(xmlBufPtr buf, xmlNotationTablePtr table);
-void xmlBufDumpElementDecl(xmlBufPtr buf, xmlElementPtr elem);
-void xmlBufDumpAttributeDecl(xmlBufPtr buf, xmlAttributePtr attr);
-void xmlBufDumpEntityDecl(xmlBufPtr buf, xmlEntityPtr ent);
-xmlChar *xmlEncodeAttributeEntities(xmlDocPtr doc, const xmlChar *input);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* __XML_SAVE_H__ */
-
diff --git a/external/libxml2_android/jni/libxml2/schematron.c b/external/libxml2_android/jni/libxml2/schematron.c
deleted file mode 100644
index 6200f2d4..00000000
--- a/external/libxml2_android/jni/libxml2/schematron.c
+++ /dev/null
@@ -1,1787 +0,0 @@
-/*
- * schematron.c : implementation of the Schematron schema validity checking
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <daniel@veillard.com>
- */
-
-/*
- * TODO:
- * + double check the semantic, especially
- * - multiple rules applying in a single pattern/node
- * - the semantic of libxml2 patterns vs. XSLT production referenced
- * by the spec.
- * + export of results in SVRL
- * + full parsing and coverage of the spec, conformance of the input to the
- * spec
- * + divergences between the draft and the ISO proposed standard :-(
- * + hook and test include
- * + try and compare with the XSLT version
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_SCHEMATRON_ENABLED
-
-#include <string.h>
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/pattern.h>
-#include <libxml/schematron.h>
-
-#define SCHEMATRON_PARSE_OPTIONS XML_PARSE_NOENT
-
-#define SCT_OLD_NS BAD_CAST "http://www.ascc.net/xml/schematron"
-
-#define XML_SCHEMATRON_NS BAD_CAST "http://purl.oclc.org/dsdl/schematron"
-
-
-static const xmlChar *xmlSchematronNs = XML_SCHEMATRON_NS;
-static const xmlChar *xmlOldSchematronNs = SCT_OLD_NS;
-
-#define IS_SCHEMATRON(node, elem) \
- ((node != NULL) && (node->type == XML_ELEMENT_NODE ) && \
- (node->ns != NULL) && \
- (xmlStrEqual(node->name, (const xmlChar *) elem)) && \
- ((xmlStrEqual(node->ns->href, xmlSchematronNs)) || \
- (xmlStrEqual(node->ns->href, xmlOldSchematronNs))))
-
-#define NEXT_SCHEMATRON(node) \
- while (node != NULL) { \
- if ((node->type == XML_ELEMENT_NODE ) && (node->ns != NULL) && \
- ((xmlStrEqual(node->ns->href, xmlSchematronNs)) || \
- (xmlStrEqual(node->ns->href, xmlOldSchematronNs)))) \
- break; \
- node = node->next; \
- }
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- */
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-typedef enum {
- XML_SCHEMATRON_ASSERT=1,
- XML_SCHEMATRON_REPORT=2
-} xmlSchematronTestType;
-
-/**
- * _xmlSchematronTest:
- *
- * A Schematrons test, either an assert or a report
- */
-typedef struct _xmlSchematronTest xmlSchematronTest;
-typedef xmlSchematronTest *xmlSchematronTestPtr;
-struct _xmlSchematronTest {
- xmlSchematronTestPtr next; /* the next test in the list */
- xmlSchematronTestType type; /* the test type */
- xmlNodePtr node; /* the node in the tree */
- xmlChar *test; /* the expression to test */
- xmlXPathCompExprPtr comp; /* the compiled expression */
- xmlChar *report; /* the message to report */
-};
-
-/**
- * _xmlSchematronRule:
- *
- * A Schematrons rule
- */
-typedef struct _xmlSchematronRule xmlSchematronRule;
-typedef xmlSchematronRule *xmlSchematronRulePtr;
-struct _xmlSchematronRule {
- xmlSchematronRulePtr next; /* the next rule in the list */
- xmlSchematronRulePtr patnext;/* the next rule in the pattern list */
- xmlNodePtr node; /* the node in the tree */
- xmlChar *context; /* the context evaluation rule */
- xmlSchematronTestPtr tests; /* the list of tests */
- xmlPatternPtr pattern; /* the compiled pattern associated */
- xmlChar *report; /* the message to report */
-};
-
-/**
- * _xmlSchematronPattern:
- *
- * A Schematrons pattern
- */
-typedef struct _xmlSchematronPattern xmlSchematronPattern;
-typedef xmlSchematronPattern *xmlSchematronPatternPtr;
-struct _xmlSchematronPattern {
- xmlSchematronPatternPtr next;/* the next pattern in the list */
- xmlSchematronRulePtr rules; /* the list of rules */
- xmlChar *name; /* the name of the pattern */
-};
-
-/**
- * _xmlSchematron:
- *
- * A Schematrons definition
- */
-struct _xmlSchematron {
- const xmlChar *name; /* schema name */
- int preserve; /* was the document passed by the user */
- xmlDocPtr doc; /* pointer to the parsed document */
- int flags; /* specific to this schematron */
-
- void *_private; /* unused by the library */
- xmlDictPtr dict; /* the dictionary used internally */
-
- const xmlChar *title; /* the title if any */
-
- int nbNs; /* the number of namespaces */
-
- int nbPattern; /* the number of patterns */
- xmlSchematronPatternPtr patterns;/* the patterns found */
- xmlSchematronRulePtr rules; /* the rules gathered */
- int nbNamespaces; /* number of namespaces in the array */
- int maxNamespaces; /* size of the array */
- const xmlChar **namespaces; /* the array of namespaces */
-};
-
-/**
- * xmlSchematronValidCtxt:
- *
- * A Schematrons validation context
- */
-struct _xmlSchematronValidCtxt {
- int type;
- int flags; /* an or of xmlSchematronValidOptions */
-
- xmlDictPtr dict;
- int nberrors;
- int err;
-
- xmlSchematronPtr schema;
- xmlXPathContextPtr xctxt;
-
- FILE *outputFile; /* if using XML_SCHEMATRON_OUT_FILE */
- xmlBufferPtr outputBuffer; /* if using XML_SCHEMATRON_OUT_BUFFER */
-#ifdef LIBXML_OUTPUT_ENABLED
- xmlOutputWriteCallback iowrite; /* if using XML_SCHEMATRON_OUT_IO */
- xmlOutputCloseCallback ioclose;
-#endif
- void *ioctx;
-
- /* error reporting data */
- void *userData; /* user specific data block */
- xmlSchematronValidityErrorFunc error;/* the callback in case of errors */
- xmlSchematronValidityWarningFunc warning;/* callback in case of warning */
- xmlStructuredErrorFunc serror; /* the structured function */
-};
-
-struct _xmlSchematronParserCtxt {
- int type;
- const xmlChar *URL;
- xmlDocPtr doc;
- int preserve; /* Whether the doc should be freed */
- const char *buffer;
- int size;
-
- xmlDictPtr dict; /* dictionary for interned string names */
-
- int nberrors;
- int err;
- xmlXPathContextPtr xctxt; /* the XPath context used for compilation */
- xmlSchematronPtr schema;
-
- int nbNamespaces; /* number of namespaces in the array */
- int maxNamespaces; /* size of the array */
- const xmlChar **namespaces; /* the array of namespaces */
-
- int nbIncludes; /* number of includes in the array */
- int maxIncludes; /* size of the array */
- xmlNodePtr *includes; /* the array of includes */
-
- /* error reporting data */
- void *userData; /* user specific data block */
- xmlSchematronValidityErrorFunc error;/* the callback in case of errors */
- xmlSchematronValidityWarningFunc warning;/* callback in case of warning */
- xmlStructuredErrorFunc serror; /* the structured function */
-};
-
-#define XML_STRON_CTXT_PARSER 1
-#define XML_STRON_CTXT_VALIDATOR 2
-
-/************************************************************************
- * *
- * Error reporting *
- * *
- ************************************************************************/
-
-/**
- * xmlSchematronPErrMemory:
- * @node: a context node
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchematronPErrMemory(xmlSchematronParserCtxtPtr ctxt,
- const char *extra, xmlNodePtr node)
-{
- if (ctxt != NULL)
- ctxt->nberrors++;
- __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, node, NULL,
- extra);
-}
-
-/**
- * xmlSchematronPErr:
- * @ctxt: the parsing context
- * @node: the context node
- * @error: the error code
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- *
- * Handle a parser error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchematronPErr(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr node, int error,
- const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
- xmlGenericErrorFunc channel = NULL;
- xmlStructuredErrorFunc schannel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- ctxt->nberrors++;
- channel = ctxt->error;
- data = ctxt->userData;
- schannel = ctxt->serror;
- }
- __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP,
- error, XML_ERR_ERROR, NULL, 0,
- (const char *) str1, (const char *) str2, NULL, 0, 0,
- msg, str1, str2);
-}
-
-/**
- * xmlSchematronVTypeErrMemory:
- * @node: a context node
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchematronVErrMemory(xmlSchematronValidCtxtPtr ctxt,
- const char *extra, xmlNodePtr node)
-{
- if (ctxt != NULL) {
- ctxt->nberrors++;
- ctxt->err = XML_SCHEMAV_INTERNAL;
- }
- __xmlSimpleError(XML_FROM_SCHEMASV, XML_ERR_NO_MEMORY, node, NULL,
- extra);
-}
-
-/************************************************************************
- * *
- * Parsing and compilation of the Schematrontrons *
- * *
- ************************************************************************/
-
-/**
- * xmlSchematronAddTest:
- * @ctxt: the schema parsing context
- * @type: the type of test
- * @rule: the parent rule
- * @node: the node hosting the test
- * @test: the associated test
- * @report: the associated report string
- *
- * Add a test to a schematron
- *
- * Returns the new pointer or NULL in case of error
- */
-static xmlSchematronTestPtr
-xmlSchematronAddTest(xmlSchematronParserCtxtPtr ctxt,
- xmlSchematronTestType type,
- xmlSchematronRulePtr rule,
- xmlNodePtr node, xmlChar *test, xmlChar *report)
-{
- xmlSchematronTestPtr ret;
- xmlXPathCompExprPtr comp;
-
- if ((ctxt == NULL) || (rule == NULL) || (node == NULL) ||
- (test == NULL))
- return(NULL);
-
- /*
- * try first to compile the test expression
- */
- comp = xmlXPathCtxtCompile(ctxt->xctxt, test);
- if (comp == NULL) {
- xmlSchematronPErr(ctxt, node,
- XML_SCHEMAP_NOROOT,
- "Failed to compile test expression %s",
- test, NULL);
- return(NULL);
- }
-
- ret = (xmlSchematronTestPtr) xmlMalloc(sizeof(xmlSchematronTest));
- if (ret == NULL) {
- xmlSchematronPErrMemory(ctxt, "allocating schema test", node);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchematronTest));
- ret->type = type;
- ret->node = node;
- ret->test = test;
- ret->comp = comp;
- ret->report = report;
- ret->next = NULL;
- if (rule->tests == NULL) {
- rule->tests = ret;
- } else {
- xmlSchematronTestPtr prev = rule->tests;
-
- while (prev->next != NULL)
- prev = prev->next;
- prev->next = ret;
- }
- return (ret);
-}
-
-/**
- * xmlSchematronFreeTests:
- * @tests: a list of tests
- *
- * Free a list of tests.
- */
-static void
-xmlSchematronFreeTests(xmlSchematronTestPtr tests) {
- xmlSchematronTestPtr next;
-
- while (tests != NULL) {
- next = tests->next;
- if (tests->test != NULL)
- xmlFree(tests->test);
- if (tests->comp != NULL)
- xmlXPathFreeCompExpr(tests->comp);
- if (tests->report != NULL)
- xmlFree(tests->report);
- xmlFree(tests);
- tests = next;
- }
-}
-
-/**
- * xmlSchematronAddRule:
- * @ctxt: the schema parsing context
- * @schema: a schema structure
- * @node: the node hosting the rule
- * @context: the associated context string
- * @report: the associated report string
- *
- * Add a rule to a schematron
- *
- * Returns the new pointer or NULL in case of error
- */
-static xmlSchematronRulePtr
-xmlSchematronAddRule(xmlSchematronParserCtxtPtr ctxt, xmlSchematronPtr schema,
- xmlSchematronPatternPtr pat, xmlNodePtr node,
- xmlChar *context, xmlChar *report)
-{
- xmlSchematronRulePtr ret;
- xmlPatternPtr pattern;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
- (context == NULL))
- return(NULL);
-
- /*
- * Try first to compile the pattern
- */
- pattern = xmlPatterncompile(context, ctxt->dict, XML_PATTERN_XPATH,
- ctxt->namespaces);
- if (pattern == NULL) {
- xmlSchematronPErr(ctxt, node,
- XML_SCHEMAP_NOROOT,
- "Failed to compile context expression %s",
- context, NULL);
- }
-
- ret = (xmlSchematronRulePtr) xmlMalloc(sizeof(xmlSchematronRule));
- if (ret == NULL) {
- xmlSchematronPErrMemory(ctxt, "allocating schema rule", node);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchematronRule));
- ret->node = node;
- ret->context = context;
- ret->pattern = pattern;
- ret->report = report;
- ret->next = NULL;
- if (schema->rules == NULL) {
- schema->rules = ret;
- } else {
- xmlSchematronRulePtr prev = schema->rules;
-
- while (prev->next != NULL)
- prev = prev->next;
- prev->next = ret;
- }
- ret->patnext = NULL;
- if (pat->rules == NULL) {
- pat->rules = ret;
- } else {
- xmlSchematronRulePtr prev = pat->rules;
-
- while (prev->patnext != NULL)
- prev = prev->patnext;
- prev->patnext = ret;
- }
- return (ret);
-}
-
-/**
- * xmlSchematronFreeRules:
- * @rules: a list of rules
- *
- * Free a list of rules.
- */
-static void
-xmlSchematronFreeRules(xmlSchematronRulePtr rules) {
- xmlSchematronRulePtr next;
-
- while (rules != NULL) {
- next = rules->next;
- if (rules->tests)
- xmlSchematronFreeTests(rules->tests);
- if (rules->context != NULL)
- xmlFree(rules->context);
- if (rules->pattern)
- xmlFreePattern(rules->pattern);
- if (rules->report != NULL)
- xmlFree(rules->report);
- xmlFree(rules);
- rules = next;
- }
-}
-
-/**
- * xmlSchematronAddPattern:
- * @ctxt: the schema parsing context
- * @schema: a schema structure
- * @node: the node hosting the pattern
- * @id: the id or name of the pattern
- *
- * Add a pattern to a schematron
- *
- * Returns the new pointer or NULL in case of error
- */
-static xmlSchematronPatternPtr
-xmlSchematronAddPattern(xmlSchematronParserCtxtPtr ctxt,
- xmlSchematronPtr schema, xmlNodePtr node, xmlChar *name)
-{
- xmlSchematronPatternPtr ret;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL) || (name == NULL))
- return(NULL);
-
- ret = (xmlSchematronPatternPtr) xmlMalloc(sizeof(xmlSchematronPattern));
- if (ret == NULL) {
- xmlSchematronPErrMemory(ctxt, "allocating schema pattern", node);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchematronPattern));
- ret->name = name;
- ret->next = NULL;
- if (schema->patterns == NULL) {
- schema->patterns = ret;
- } else {
- xmlSchematronPatternPtr prev = schema->patterns;
-
- while (prev->next != NULL)
- prev = prev->next;
- prev->next = ret;
- }
- return (ret);
-}
-
-/**
- * xmlSchematronFreePatterns:
- * @patterns: a list of patterns
- *
- * Free a list of patterns.
- */
-static void
-xmlSchematronFreePatterns(xmlSchematronPatternPtr patterns) {
- xmlSchematronPatternPtr next;
-
- while (patterns != NULL) {
- next = patterns->next;
- if (patterns->name != NULL)
- xmlFree(patterns->name);
- xmlFree(patterns);
- patterns = next;
- }
-}
-
-/**
- * xmlSchematronNewSchematron:
- * @ctxt: a schema validation context
- *
- * Allocate a new Schematron structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlSchematronPtr
-xmlSchematronNewSchematron(xmlSchematronParserCtxtPtr ctxt)
-{
- xmlSchematronPtr ret;
-
- ret = (xmlSchematronPtr) xmlMalloc(sizeof(xmlSchematron));
- if (ret == NULL) {
- xmlSchematronPErrMemory(ctxt, "allocating schema", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchematron));
- ret->dict = ctxt->dict;
- xmlDictReference(ret->dict);
-
- return (ret);
-}
-
-/**
- * xmlSchematronFree:
- * @schema: a schema structure
- *
- * Deallocate a Schematron structure.
- */
-void
-xmlSchematronFree(xmlSchematronPtr schema)
-{
- if (schema == NULL)
- return;
-
- if ((schema->doc != NULL) && (!(schema->preserve)))
- xmlFreeDoc(schema->doc);
-
- if (schema->namespaces != NULL)
- xmlFree((char **) schema->namespaces);
-
- xmlSchematronFreeRules(schema->rules);
- xmlSchematronFreePatterns(schema->patterns);
- xmlDictFree(schema->dict);
- xmlFree(schema);
-}
-
-/**
- * xmlSchematronNewParserCtxt:
- * @URL: the location of the schema
- *
- * Create an XML Schematrons parse context for that file/resource expected
- * to contain an XML Schematrons file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchematronParserCtxtPtr
-xmlSchematronNewParserCtxt(const char *URL)
-{
- xmlSchematronParserCtxtPtr ret;
-
- if (URL == NULL)
- return (NULL);
-
- ret =
- (xmlSchematronParserCtxtPtr)
- xmlMalloc(sizeof(xmlSchematronParserCtxt));
- if (ret == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating schema parser context",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchematronParserCtxt));
- ret->type = XML_STRON_CTXT_PARSER;
- ret->dict = xmlDictCreate();
- ret->URL = xmlDictLookup(ret->dict, (const xmlChar *) URL, -1);
- ret->includes = NULL;
- ret->xctxt = xmlXPathNewContext(NULL);
- if (ret->xctxt == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
- NULL);
- xmlSchematronFreeParserCtxt(ret);
- return (NULL);
- }
- ret->xctxt->flags = XML_XPATH_CHECKNS;
- return (ret);
-}
-
-/**
- * xmlSchematronNewMemParserCtxt:
- * @buffer: a pointer to a char array containing the schemas
- * @size: the size of the array
- *
- * Create an XML Schematrons parse context for that memory buffer expected
- * to contain an XML Schematrons file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchematronParserCtxtPtr
-xmlSchematronNewMemParserCtxt(const char *buffer, int size)
-{
- xmlSchematronParserCtxtPtr ret;
-
- if ((buffer == NULL) || (size <= 0))
- return (NULL);
-
- ret =
- (xmlSchematronParserCtxtPtr)
- xmlMalloc(sizeof(xmlSchematronParserCtxt));
- if (ret == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating schema parser context",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchematronParserCtxt));
- ret->buffer = buffer;
- ret->size = size;
- ret->dict = xmlDictCreate();
- ret->xctxt = xmlXPathNewContext(NULL);
- if (ret->xctxt == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
- NULL);
- xmlSchematronFreeParserCtxt(ret);
- return (NULL);
- }
- return (ret);
-}
-
-/**
- * xmlSchematronNewDocParserCtxt:
- * @doc: a preparsed document tree
- *
- * Create an XML Schematrons parse context for that document.
- * NB. The document may be modified during the parsing process.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchematronParserCtxtPtr
-xmlSchematronNewDocParserCtxt(xmlDocPtr doc)
-{
- xmlSchematronParserCtxtPtr ret;
-
- if (doc == NULL)
- return (NULL);
-
- ret =
- (xmlSchematronParserCtxtPtr)
- xmlMalloc(sizeof(xmlSchematronParserCtxt));
- if (ret == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating schema parser context",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchematronParserCtxt));
- ret->doc = doc;
- ret->dict = xmlDictCreate();
- /* The application has responsibility for the document */
- ret->preserve = 1;
- ret->xctxt = xmlXPathNewContext(doc);
- if (ret->xctxt == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
- NULL);
- xmlSchematronFreeParserCtxt(ret);
- return (NULL);
- }
-
- return (ret);
-}
-
-/**
- * xmlSchematronFreeParserCtxt:
- * @ctxt: the schema parser context
- *
- * Free the resources associated to the schema parser context
- */
-void
-xmlSchematronFreeParserCtxt(xmlSchematronParserCtxtPtr ctxt)
-{
- if (ctxt == NULL)
- return;
- if (ctxt->doc != NULL && !ctxt->preserve)
- xmlFreeDoc(ctxt->doc);
- if (ctxt->xctxt != NULL) {
- xmlXPathFreeContext(ctxt->xctxt);
- }
- if (ctxt->namespaces != NULL)
- xmlFree((char **) ctxt->namespaces);
- xmlDictFree(ctxt->dict);
- xmlFree(ctxt);
-}
-
-#if 0
-/**
- * xmlSchematronPushInclude:
- * @ctxt: the schema parser context
- * @doc: the included document
- * @cur: the current include node
- *
- * Add an included document
- */
-static void
-xmlSchematronPushInclude(xmlSchematronParserCtxtPtr ctxt,
- xmlDocPtr doc, xmlNodePtr cur)
-{
- if (ctxt->includes == NULL) {
- ctxt->maxIncludes = 10;
- ctxt->includes = (xmlNodePtr *)
- xmlMalloc(ctxt->maxIncludes * 2 * sizeof(xmlNodePtr));
- if (ctxt->includes == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating parser includes",
- NULL);
- return;
- }
- ctxt->nbIncludes = 0;
- } else if (ctxt->nbIncludes + 2 >= ctxt->maxIncludes) {
- xmlNodePtr *tmp;
-
- tmp = (xmlNodePtr *)
- xmlRealloc(ctxt->includes, ctxt->maxIncludes * 4 *
- sizeof(xmlNodePtr));
- if (tmp == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating parser includes",
- NULL);
- return;
- }
- ctxt->includes = tmp;
- ctxt->maxIncludes *= 2;
- }
- ctxt->includes[2 * ctxt->nbIncludes] = cur;
- ctxt->includes[2 * ctxt->nbIncludes + 1] = (xmlNodePtr) doc;
- ctxt->nbIncludes++;
-}
-
-/**
- * xmlSchematronPopInclude:
- * @ctxt: the schema parser context
- *
- * Pop an include level. The included document is being freed
- *
- * Returns the node immediately following the include or NULL if the
- * include list was empty.
- */
-static xmlNodePtr
-xmlSchematronPopInclude(xmlSchematronParserCtxtPtr ctxt)
-{
- xmlDocPtr doc;
- xmlNodePtr ret;
-
- if (ctxt->nbIncludes <= 0)
- return(NULL);
- ctxt->nbIncludes--;
- doc = (xmlDocPtr) ctxt->includes[2 * ctxt->nbIncludes + 1];
- ret = ctxt->includes[2 * ctxt->nbIncludes];
- xmlFreeDoc(doc);
- if (ret != NULL)
- ret = ret->next;
- if (ret == NULL)
- return(xmlSchematronPopInclude(ctxt));
- return(ret);
-}
-#endif
-
-/**
- * xmlSchematronAddNamespace:
- * @ctxt: the schema parser context
- * @prefix: the namespace prefix
- * @ns: the namespace name
- *
- * Add a namespace definition in the context
- */
-static void
-xmlSchematronAddNamespace(xmlSchematronParserCtxtPtr ctxt,
- const xmlChar *prefix, const xmlChar *ns)
-{
- if (ctxt->namespaces == NULL) {
- ctxt->maxNamespaces = 10;
- ctxt->namespaces = (const xmlChar **)
- xmlMalloc(ctxt->maxNamespaces * 2 * sizeof(const xmlChar *));
- if (ctxt->namespaces == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating parser namespaces",
- NULL);
- return;
- }
- ctxt->nbNamespaces = 0;
- } else if (ctxt->nbNamespaces + 2 >= ctxt->maxNamespaces) {
- const xmlChar **tmp;
-
- tmp = (const xmlChar **)
- xmlRealloc((xmlChar **) ctxt->namespaces, ctxt->maxNamespaces * 4 *
- sizeof(const xmlChar *));
- if (tmp == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating parser namespaces",
- NULL);
- return;
- }
- ctxt->namespaces = tmp;
- ctxt->maxNamespaces *= 2;
- }
- ctxt->namespaces[2 * ctxt->nbNamespaces] =
- xmlDictLookup(ctxt->dict, ns, -1);
- ctxt->namespaces[2 * ctxt->nbNamespaces + 1] =
- xmlDictLookup(ctxt->dict, prefix, -1);
- ctxt->nbNamespaces++;
- ctxt->namespaces[2 * ctxt->nbNamespaces] = NULL;
- ctxt->namespaces[2 * ctxt->nbNamespaces + 1] = NULL;
-
-}
-
-/**
- * xmlSchematronParseRule:
- * @ctxt: a schema validation context
- * @rule: the rule node
- *
- * parse a rule element
- */
-static void
-xmlSchematronParseRule(xmlSchematronParserCtxtPtr ctxt,
- xmlSchematronPatternPtr pattern,
- xmlNodePtr rule)
-{
- xmlNodePtr cur;
- int nbChecks = 0;
- xmlChar *test;
- xmlChar *context;
- xmlChar *report;
- xmlSchematronRulePtr ruleptr;
- xmlSchematronTestPtr testptr;
-
- if ((ctxt == NULL) || (rule == NULL)) return;
-
- context = xmlGetNoNsProp(rule, BAD_CAST "context");
- if (context == NULL) {
- xmlSchematronPErr(ctxt, rule,
- XML_SCHEMAP_NOROOT,
- "rule has no context attribute",
- NULL, NULL);
- return;
- } else if (context[0] == 0) {
- xmlSchematronPErr(ctxt, rule,
- XML_SCHEMAP_NOROOT,
- "rule has an empty context attribute",
- NULL, NULL);
- xmlFree(context);
- return;
- } else {
- ruleptr = xmlSchematronAddRule(ctxt, ctxt->schema, pattern,
- rule, context, NULL);
- if (ruleptr == NULL) {
- xmlFree(context);
- return;
- }
- }
-
- cur = rule->children;
- NEXT_SCHEMATRON(cur);
- while (cur != NULL) {
- if (IS_SCHEMATRON(cur, "assert")) {
- nbChecks++;
- test = xmlGetNoNsProp(cur, BAD_CAST "test");
- if (test == NULL) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "assert has no test attribute",
- NULL, NULL);
- } else if (test[0] == 0) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "assert has an empty test attribute",
- NULL, NULL);
- xmlFree(test);
- } else {
- /* TODO will need dynamic processing instead */
- report = xmlNodeGetContent(cur);
-
- testptr = xmlSchematronAddTest(ctxt, XML_SCHEMATRON_ASSERT,
- ruleptr, cur, test, report);
- if (testptr == NULL)
- xmlFree(test);
- }
- } else if (IS_SCHEMATRON(cur, "report")) {
- nbChecks++;
- test = xmlGetNoNsProp(cur, BAD_CAST "test");
- if (test == NULL) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "assert has no test attribute",
- NULL, NULL);
- } else if (test[0] == 0) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "assert has an empty test attribute",
- NULL, NULL);
- xmlFree(test);
- } else {
- /* TODO will need dynamic processing instead */
- report = xmlNodeGetContent(cur);
-
- testptr = xmlSchematronAddTest(ctxt, XML_SCHEMATRON_REPORT,
- ruleptr, cur, test, report);
- if (testptr == NULL)
- xmlFree(test);
- }
- } else {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "Expecting an assert or a report element instead of %s",
- cur->name, NULL);
- }
- cur = cur->next;
- NEXT_SCHEMATRON(cur);
- }
- if (nbChecks == 0) {
- xmlSchematronPErr(ctxt, rule,
- XML_SCHEMAP_NOROOT,
- "rule has no assert nor report element", NULL, NULL);
- }
-}
-
-/**
- * xmlSchematronParsePattern:
- * @ctxt: a schema validation context
- * @pat: the pattern node
- *
- * parse a pattern element
- */
-static void
-xmlSchematronParsePattern(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr pat)
-{
- xmlNodePtr cur;
- xmlSchematronPatternPtr pattern;
- int nbRules = 0;
- xmlChar *id;
-
- if ((ctxt == NULL) || (pat == NULL)) return;
-
- id = xmlGetNoNsProp(pat, BAD_CAST "id");
- if (id == NULL) {
- id = xmlGetNoNsProp(pat, BAD_CAST "name");
- }
- pattern = xmlSchematronAddPattern(ctxt, ctxt->schema, pat, id);
- if (pattern == NULL) {
- if (id != NULL)
- xmlFree(id);
- return;
- }
- cur = pat->children;
- NEXT_SCHEMATRON(cur);
- while (cur != NULL) {
- if (IS_SCHEMATRON(cur, "rule")) {
- xmlSchematronParseRule(ctxt, pattern, cur);
- nbRules++;
- } else {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "Expecting a rule element instead of %s", cur->name, NULL);
- }
- cur = cur->next;
- NEXT_SCHEMATRON(cur);
- }
- if (nbRules == 0) {
- xmlSchematronPErr(ctxt, pat,
- XML_SCHEMAP_NOROOT,
- "Pattern has no rule element", NULL, NULL);
- }
-}
-
-#if 0
-/**
- * xmlSchematronLoadInclude:
- * @ctxt: a schema validation context
- * @cur: the include element
- *
- * Load the include document, Push the current pointer
- *
- * Returns the updated node pointer
- */
-static xmlNodePtr
-xmlSchematronLoadInclude(xmlSchematronParserCtxtPtr ctxt, xmlNodePtr cur)
-{
- xmlNodePtr ret = NULL;
- xmlDocPtr doc = NULL;
- xmlChar *href = NULL;
- xmlChar *base = NULL;
- xmlChar *URI = NULL;
-
- if ((ctxt == NULL) || (cur == NULL))
- return(NULL);
-
- href = xmlGetNoNsProp(cur, BAD_CAST "href");
- if (href == NULL) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "Include has no href attribute", NULL, NULL);
- return(cur->next);
- }
-
- /* do the URI base composition, load and find the root */
- base = xmlNodeGetBase(cur->doc, cur);
- URI = xmlBuildURI(href, base);
- doc = xmlReadFile((const char *) URI, NULL, SCHEMATRON_PARSE_OPTIONS);
- if (doc == NULL) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_FAILED_LOAD,
- "could not load include '%s'.\n",
- URI, NULL);
- goto done;
- }
- ret = xmlDocGetRootElement(doc);
- if (ret == NULL) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_FAILED_LOAD,
- "could not find root from include '%s'.\n",
- URI, NULL);
- goto done;
- }
-
- /* Success, push the include for rollback on exit */
- xmlSchematronPushInclude(ctxt, doc, cur);
-
-done:
- if (ret == NULL) {
- if (doc != NULL)
- xmlFreeDoc(doc);
- }
- xmlFree(href);
- if (base != NULL)
- xmlFree(base);
- if (URI != NULL)
- xmlFree(URI);
- return(ret);
-}
-#endif
-
-/**
- * xmlSchematronParse:
- * @ctxt: a schema validation context
- *
- * parse a schema definition resource and build an internal
- * XML Shema struture which can be used to validate instances.
- *
- * Returns the internal XML Schematron structure built from the resource or
- * NULL in case of error
- */
-xmlSchematronPtr
-xmlSchematronParse(xmlSchematronParserCtxtPtr ctxt)
-{
- xmlSchematronPtr ret = NULL;
- xmlDocPtr doc;
- xmlNodePtr root, cur;
- int preserve = 0;
-
- if (ctxt == NULL)
- return (NULL);
-
- ctxt->nberrors = 0;
-
- /*
- * First step is to parse the input document into an DOM/Infoset
- */
- if (ctxt->URL != NULL) {
- doc = xmlReadFile((const char *) ctxt->URL, NULL,
- SCHEMATRON_PARSE_OPTIONS);
- if (doc == NULL) {
- xmlSchematronPErr(ctxt, NULL,
- XML_SCHEMAP_FAILED_LOAD,
- "xmlSchematronParse: could not load '%s'.\n",
- ctxt->URL, NULL);
- return (NULL);
- }
- ctxt->preserve = 0;
- } else if (ctxt->buffer != NULL) {
- doc = xmlReadMemory(ctxt->buffer, ctxt->size, NULL, NULL,
- SCHEMATRON_PARSE_OPTIONS);
- if (doc == NULL) {
- xmlSchematronPErr(ctxt, NULL,
- XML_SCHEMAP_FAILED_PARSE,
- "xmlSchematronParse: could not parse.\n",
- NULL, NULL);
- return (NULL);
- }
- doc->URL = xmlStrdup(BAD_CAST "in_memory_buffer");
- ctxt->URL = xmlDictLookup(ctxt->dict, BAD_CAST "in_memory_buffer", -1);
- ctxt->preserve = 0;
- } else if (ctxt->doc != NULL) {
- doc = ctxt->doc;
- preserve = 1;
- ctxt->preserve = 1;
- } else {
- xmlSchematronPErr(ctxt, NULL,
- XML_SCHEMAP_NOTHING_TO_PARSE,
- "xmlSchematronParse: could not parse.\n",
- NULL, NULL);
- return (NULL);
- }
-
- /*
- * Then extract the root and Schematron parse it
- */
- root = xmlDocGetRootElement(doc);
- if (root == NULL) {
- xmlSchematronPErr(ctxt, (xmlNodePtr) doc,
- XML_SCHEMAP_NOROOT,
- "The schema has no document element.\n", NULL, NULL);
- if (!preserve) {
- xmlFreeDoc(doc);
- }
- return (NULL);
- }
-
- if (!IS_SCHEMATRON(root, "schema")) {
- xmlSchematronPErr(ctxt, root,
- XML_SCHEMAP_NOROOT,
- "The XML document '%s' is not a XML schematron document",
- ctxt->URL, NULL);
- goto exit;
- }
- ret = xmlSchematronNewSchematron(ctxt);
- if (ret == NULL)
- goto exit;
- ctxt->schema = ret;
-
- /*
- * scan the schema elements
- */
- cur = root->children;
- NEXT_SCHEMATRON(cur);
- if (IS_SCHEMATRON(cur, "title")) {
- xmlChar *title = xmlNodeGetContent(cur);
- if (title != NULL) {
- ret->title = xmlDictLookup(ret->dict, title, -1);
- xmlFree(title);
- }
- cur = cur->next;
- NEXT_SCHEMATRON(cur);
- }
- while (IS_SCHEMATRON(cur, "ns")) {
- xmlChar *prefix = xmlGetNoNsProp(cur, BAD_CAST "prefix");
- xmlChar *uri = xmlGetNoNsProp(cur, BAD_CAST "uri");
- if ((uri == NULL) || (uri[0] == 0)) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "ns element has no uri", NULL, NULL);
- }
- if ((prefix == NULL) || (prefix[0] == 0)) {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "ns element has no prefix", NULL, NULL);
- }
- if ((prefix) && (uri)) {
- xmlXPathRegisterNs(ctxt->xctxt, prefix, uri);
- xmlSchematronAddNamespace(ctxt, prefix, uri);
- ret->nbNs++;
- }
- if (uri)
- xmlFree(uri);
- if (prefix)
- xmlFree(prefix);
- cur = cur->next;
- NEXT_SCHEMATRON(cur);
- }
- while (cur != NULL) {
- if (IS_SCHEMATRON(cur, "pattern")) {
- xmlSchematronParsePattern(ctxt, cur);
- ret->nbPattern++;
- } else {
- xmlSchematronPErr(ctxt, cur,
- XML_SCHEMAP_NOROOT,
- "Expecting a pattern element instead of %s", cur->name, NULL);
- }
- cur = cur->next;
- NEXT_SCHEMATRON(cur);
- }
- if (ret->nbPattern == 0) {
- xmlSchematronPErr(ctxt, root,
- XML_SCHEMAP_NOROOT,
- "The schematron document '%s' has no pattern",
- ctxt->URL, NULL);
- goto exit;
- }
- /* the original document must be kept for reporting */
- ret->doc = doc;
- if (preserve) {
- ret->preserve = 1;
- }
- preserve = 1;
-
-exit:
- if (!preserve) {
- xmlFreeDoc(doc);
- }
- if (ret != NULL) {
- if (ctxt->nberrors != 0) {
- xmlSchematronFree(ret);
- ret = NULL;
- } else {
- ret->namespaces = ctxt->namespaces;
- ret->nbNamespaces = ctxt->nbNamespaces;
- ctxt->namespaces = NULL;
- }
- }
- return (ret);
-}
-
-/************************************************************************
- * *
- * Schematrontron Reports handler *
- * *
- ************************************************************************/
-
-static xmlNodePtr
-xmlSchematronGetNode(xmlSchematronValidCtxtPtr ctxt,
- xmlNodePtr cur, const xmlChar *xpath) {
- xmlNodePtr node = NULL;
- xmlXPathObjectPtr ret;
-
- if ((ctxt == NULL) || (cur == NULL) || (xpath == NULL))
- return(NULL);
-
- ctxt->xctxt->doc = cur->doc;
- ctxt->xctxt->node = cur;
- ret = xmlXPathEval(xpath, ctxt->xctxt);
- if (ret == NULL)
- return(NULL);
-
- if ((ret->type == XPATH_NODESET) &&
- (ret->nodesetval != NULL) && (ret->nodesetval->nodeNr > 0))
- node = ret->nodesetval->nodeTab[0];
-
- xmlXPathFreeObject(ret);
- return(node);
-}
-
-/**
- * xmlSchematronReportOutput:
- * @ctxt: the validation context
- * @cur: the current node tested
- * @msg: the message output
- *
- * Output part of the report to whatever channel the user selected
- */
-static void
-xmlSchematronReportOutput(xmlSchematronValidCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlNodePtr cur ATTRIBUTE_UNUSED,
- const char *msg) {
- /* TODO */
- fprintf(stderr, "%s", msg);
-}
-
-/**
- * xmlSchematronFormatReport:
- * @ctxt: the validation context
- * @test: the test node
- * @cur: the current node tested
- *
- * Build the string being reported to the user.
- *
- * Returns a report string or NULL in case of error. The string needs
- * to be deallocated by teh caller
- */
-static xmlChar *
-xmlSchematronFormatReport(xmlSchematronValidCtxtPtr ctxt,
- xmlNodePtr test, xmlNodePtr cur) {
- xmlChar *ret = NULL;
- xmlNodePtr child, node;
-
- if ((test == NULL) || (cur == NULL))
- return(ret);
-
- child = test->children;
- while (child != NULL) {
- if ((child->type == XML_TEXT_NODE) ||
- (child->type == XML_CDATA_SECTION_NODE))
- ret = xmlStrcat(ret, child->content);
- else if (IS_SCHEMATRON(child, "name")) {
- xmlChar *path;
-
- path = xmlGetNoNsProp(child, BAD_CAST "path");
-
- node = cur;
- if (path != NULL) {
- node = xmlSchematronGetNode(ctxt, cur, path);
- if (node == NULL)
- node = cur;
- xmlFree(path);
- }
-
- if ((node->ns == NULL) || (node->ns->prefix == NULL))
- ret = xmlStrcat(ret, node->name);
- else {
- ret = xmlStrcat(ret, node->ns->prefix);
- ret = xmlStrcat(ret, BAD_CAST ":");
- ret = xmlStrcat(ret, node->name);
- }
- } else {
- child = child->next;
- continue;
- }
-
- /*
- * remove superfluous \n
- */
- if (ret != NULL) {
- int len = xmlStrlen(ret);
- xmlChar c;
-
- if (len > 0) {
- c = ret[len - 1];
- if ((c == ' ') || (c == '\n') || (c == '\r') || (c == '\t')) {
- while ((c == ' ') || (c == '\n') ||
- (c == '\r') || (c == '\t')) {
- len--;
- if (len == 0)
- break;
- c = ret[len - 1];
- }
- ret[len] = ' ';
- ret[len + 1] = 0;
- }
- }
- }
-
- child = child->next;
- }
- return(ret);
-}
-
-/**
- * xmlSchematronReportSuccess:
- * @ctxt: the validation context
- * @test: the compiled test
- * @cur: the current node tested
- * @success: boolean value for the result
- *
- * called from the validation engine when an assert or report test have
- * been done.
- */
-static void
-xmlSchematronReportSuccess(xmlSchematronValidCtxtPtr ctxt,
- xmlSchematronTestPtr test, xmlNodePtr cur, xmlSchematronPatternPtr pattern, int success) {
- if ((ctxt == NULL) || (cur == NULL) || (test == NULL))
- return;
- /* if quiet and not SVRL report only failures */
- if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) &&
- ((ctxt->flags & XML_SCHEMATRON_OUT_XML) == 0) &&
- (test->type == XML_SCHEMATRON_REPORT))
- return;
- if (ctxt->flags & XML_SCHEMATRON_OUT_XML) {
- TODO
- } else {
- xmlChar *path;
- char msg[1000];
- long line;
- const xmlChar *report = NULL;
-
- if (((test->type == XML_SCHEMATRON_REPORT) & (!success)) ||
- ((test->type == XML_SCHEMATRON_ASSERT) & (success)))
- return;
- line = xmlGetLineNo(cur);
- path = xmlGetNodePath(cur);
- if (path == NULL)
- path = (xmlChar *) cur->name;
-#if 0
- if ((test->report != NULL) && (test->report[0] != 0))
- report = test->report;
-#endif
- if (test->node != NULL)
- report = xmlSchematronFormatReport(ctxt, test->node, cur);
- if (report == NULL) {
- if (test->type == XML_SCHEMATRON_ASSERT) {
- report = xmlStrdup((const xmlChar *) "node failed assert");
- } else {
- report = xmlStrdup((const xmlChar *) "node failed report");
- }
- }
- snprintf(msg, 999, "%s line %ld: %s\n", (const char *) path,
- line, (const char *) report);
-
- if (ctxt->flags & XML_SCHEMATRON_OUT_ERROR) {
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- if (ctxt->serror != NULL)
- schannel = ctxt->serror;
- else
- channel = ctxt->error;
- data = ctxt->userData;
- }
-
- __xmlRaiseError(schannel, channel, data,
- NULL, cur, XML_FROM_SCHEMATRONV,
- (test->type == XML_SCHEMATRON_ASSERT)?XML_SCHEMATRONV_ASSERT:XML_SCHEMATRONV_REPORT,
- XML_ERR_ERROR, NULL, line,
- (pattern == NULL)?NULL:((const char *) pattern->name),
- (const char *) path,
- (const char *) report, 0, 0,
- "%s", msg);
- } else {
- xmlSchematronReportOutput(ctxt, cur, &msg[0]);
- }
-
- xmlFree((char *) report);
-
- if ((path != NULL) && (path != (xmlChar *) cur->name))
- xmlFree(path);
- }
-}
-
-/**
- * xmlSchematronReportPattern:
- * @ctxt: the validation context
- * @pattern: the current pattern
- *
- * called from the validation engine when starting to check a pattern
- */
-static void
-xmlSchematronReportPattern(xmlSchematronValidCtxtPtr ctxt,
- xmlSchematronPatternPtr pattern) {
- if ((ctxt == NULL) || (pattern == NULL))
- return;
- if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) || (ctxt->flags & XML_SCHEMATRON_OUT_ERROR)) /* Error gives pattern name as part of error */
- return;
- if (ctxt->flags & XML_SCHEMATRON_OUT_XML) {
- TODO
- } else {
- char msg[1000];
-
- if (pattern->name == NULL)
- return;
- snprintf(msg, 999, "Pattern: %s\n", (const char *) pattern->name);
- xmlSchematronReportOutput(ctxt, NULL, &msg[0]);
- }
-}
-
-
-/************************************************************************
- * *
- * Validation against a Schematrontron *
- * *
- ************************************************************************/
-
-/**
- * xmlSchematronSetValidStructuredErrors:
- * @ctxt: a Schematron validation context
- * @serror: the structured error function
- * @ctx: the functions context
- *
- * Set the structured error callback
- */
-void
-xmlSchematronSetValidStructuredErrors(xmlSchematronValidCtxtPtr ctxt,
- xmlStructuredErrorFunc serror, void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->serror = serror;
- ctxt->error = NULL;
- ctxt->warning = NULL;
- ctxt->userData = ctx;
-}
-
-/**
- * xmlSchematronNewValidCtxt:
- * @schema: a precompiled XML Schematrons
- * @options: a set of xmlSchematronValidOptions
- *
- * Create an XML Schematrons validation context based on the given schema.
- *
- * Returns the validation context or NULL in case of error
- */
-xmlSchematronValidCtxtPtr
-xmlSchematronNewValidCtxt(xmlSchematronPtr schema, int options)
-{
- int i;
- xmlSchematronValidCtxtPtr ret;
-
- ret = (xmlSchematronValidCtxtPtr) xmlMalloc(sizeof(xmlSchematronValidCtxt));
- if (ret == NULL) {
- xmlSchematronVErrMemory(NULL, "allocating validation context",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchematronValidCtxt));
- ret->type = XML_STRON_CTXT_VALIDATOR;
- ret->schema = schema;
- ret->xctxt = xmlXPathNewContext(NULL);
- ret->flags = options;
- if (ret->xctxt == NULL) {
- xmlSchematronPErrMemory(NULL, "allocating schema parser XPath context",
- NULL);
- xmlSchematronFreeValidCtxt(ret);
- return (NULL);
- }
- for (i = 0;i < schema->nbNamespaces;i++) {
- if ((schema->namespaces[2 * i] == NULL) ||
- (schema->namespaces[2 * i + 1] == NULL))
- break;
- xmlXPathRegisterNs(ret->xctxt, schema->namespaces[2 * i + 1],
- schema->namespaces[2 * i]);
- }
- return (ret);
-}
-
-/**
- * xmlSchematronFreeValidCtxt:
- * @ctxt: the schema validation context
- *
- * Free the resources associated to the schema validation context
- */
-void
-xmlSchematronFreeValidCtxt(xmlSchematronValidCtxtPtr ctxt)
-{
- if (ctxt == NULL)
- return;
- if (ctxt->xctxt != NULL)
- xmlXPathFreeContext(ctxt->xctxt);
- if (ctxt->dict != NULL)
- xmlDictFree(ctxt->dict);
- xmlFree(ctxt);
-}
-
-static xmlNodePtr
-xmlSchematronNextNode(xmlNodePtr cur) {
- if (cur->children != NULL) {
- /*
- * Do not descend on entities declarations
- */
- if (cur->children->type != XML_ENTITY_DECL) {
- cur = cur->children;
- /*
- * Skip DTDs
- */
- if (cur->type != XML_DTD_NODE)
- return(cur);
- }
- }
-
- while (cur->next != NULL) {
- cur = cur->next;
- if ((cur->type != XML_ENTITY_DECL) &&
- (cur->type != XML_DTD_NODE))
- return(cur);
- }
-
- do {
- cur = cur->parent;
- if (cur == NULL) break;
- if (cur->type == XML_DOCUMENT_NODE) return(NULL);
- if (cur->next != NULL) {
- cur = cur->next;
- return(cur);
- }
- } while (cur != NULL);
- return(cur);
-}
-
-/**
- * xmlSchematronRunTest:
- * @ctxt: the schema validation context
- * @test: the current test
- * @instance: the document instace tree
- * @cur: the current node in the instance
- *
- * Validate a rule against a tree instance at a given position
- *
- * Returns 1 in case of success, 0 if error and -1 in case of internal error
- */
-static int
-xmlSchematronRunTest(xmlSchematronValidCtxtPtr ctxt,
- xmlSchematronTestPtr test, xmlDocPtr instance, xmlNodePtr cur, xmlSchematronPatternPtr pattern)
-{
- xmlXPathObjectPtr ret;
- int failed;
-
- failed = 0;
- ctxt->xctxt->doc = instance;
- ctxt->xctxt->node = cur;
- ret = xmlXPathCompiledEval(test->comp, ctxt->xctxt);
- if (ret == NULL) {
- failed = 1;
- } else {
- switch (ret->type) {
- case XPATH_XSLT_TREE:
- case XPATH_NODESET:
- if ((ret->nodesetval == NULL) ||
- (ret->nodesetval->nodeNr == 0))
- failed = 1;
- break;
- case XPATH_BOOLEAN:
- failed = !ret->boolval;
- break;
- case XPATH_NUMBER:
- if ((xmlXPathIsNaN(ret->floatval)) ||
- (ret->floatval == 0.0))
- failed = 1;
- break;
- case XPATH_STRING:
- if ((ret->stringval == NULL) ||
- (ret->stringval[0] == 0))
- failed = 1;
- break;
- case XPATH_UNDEFINED:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- case XPATH_USERS:
- failed = 1;
- break;
- }
- xmlXPathFreeObject(ret);
- }
- if ((failed) && (test->type == XML_SCHEMATRON_ASSERT))
- ctxt->nberrors++;
- else if ((!failed) && (test->type == XML_SCHEMATRON_REPORT))
- ctxt->nberrors++;
-
- xmlSchematronReportSuccess(ctxt, test, cur, pattern, !failed);
-
- return(!failed);
-}
-
-/**
- * xmlSchematronValidateDoc:
- * @ctxt: the schema validation context
- * @instance: the document instace tree
- *
- * Validate a tree instance against the schematron
- *
- * Returns 0 in case of success, -1 in case of internal error
- * and an error count otherwise.
- */
-int
-xmlSchematronValidateDoc(xmlSchematronValidCtxtPtr ctxt, xmlDocPtr instance)
-{
- xmlNodePtr cur, root;
- xmlSchematronPatternPtr pattern;
- xmlSchematronRulePtr rule;
- xmlSchematronTestPtr test;
-
- if ((ctxt == NULL) || (ctxt->schema == NULL) ||
- (ctxt->schema->rules == NULL) || (instance == NULL))
- return(-1);
- ctxt->nberrors = 0;
- root = xmlDocGetRootElement(instance);
- if (root == NULL) {
- TODO
- ctxt->nberrors++;
- return(1);
- }
- if ((ctxt->flags & XML_SCHEMATRON_OUT_QUIET) ||
- (ctxt->flags == 0)) {
- /*
- * we are just trying to assert the validity of the document,
- * speed primes over the output, run in a single pass
- */
- cur = root;
- while (cur != NULL) {
- rule = ctxt->schema->rules;
- while (rule != NULL) {
- if (xmlPatternMatch(rule->pattern, cur) == 1) {
- test = rule->tests;
- while (test != NULL) {
- xmlSchematronRunTest(ctxt, test, instance, cur, (xmlSchematronPatternPtr)rule->pattern);
- test = test->next;
- }
- }
- rule = rule->next;
- }
-
- cur = xmlSchematronNextNode(cur);
- }
- } else {
- /*
- * Process all contexts one at a time
- */
- pattern = ctxt->schema->patterns;
-
- while (pattern != NULL) {
- xmlSchematronReportPattern(ctxt, pattern);
-
- /*
- * TODO convert the pattern rule to a direct XPath and
- * compute directly instead of using the pattern matching
- * over the full document...
- * Check the exact semantic
- */
- cur = root;
- while (cur != NULL) {
- rule = pattern->rules;
- while (rule != NULL) {
- if (xmlPatternMatch(rule->pattern, cur) == 1) {
- test = rule->tests;
- while (test != NULL) {
- xmlSchematronRunTest(ctxt, test, instance, cur, pattern);
- test = test->next;
- }
- }
- rule = rule->patnext;
- }
-
- cur = xmlSchematronNextNode(cur);
- }
- pattern = pattern->next;
- }
- }
- return(ctxt->nberrors);
-}
-
-#ifdef STANDALONE
-int
-main(void)
-{
- int ret;
- xmlDocPtr instance;
- xmlSchematronParserCtxtPtr pctxt;
- xmlSchematronValidCtxtPtr vctxt;
- xmlSchematronPtr schema = NULL;
-
- pctxt = xmlSchematronNewParserCtxt("tst.sct");
- if (pctxt == NULL) {
- fprintf(stderr, "failed to build schematron parser\n");
- } else {
- schema = xmlSchematronParse(pctxt);
- if (schema == NULL) {
- fprintf(stderr, "failed to compile schematron\n");
- }
- xmlSchematronFreeParserCtxt(pctxt);
- }
- instance = xmlReadFile("tst.sct", NULL,
- XML_PARSE_NOENT | XML_PARSE_NOCDATA);
- if (instance == NULL) {
- fprintf(stderr, "failed to parse instance\n");
- }
- if ((schema != NULL) && (instance != NULL)) {
- vctxt = xmlSchematronNewValidCtxt(schema);
- if (vctxt == NULL) {
- fprintf(stderr, "failed to build schematron validator\n");
- } else {
- ret = xmlSchematronValidateDoc(vctxt, instance);
- xmlSchematronFreeValidCtxt(vctxt);
- }
- }
- xmlSchematronFree(schema);
- xmlFreeDoc(instance);
-
- xmlCleanupParser();
- xmlMemoryDump();
-
- return (0);
-}
-#endif
-#define bottom_schematron
-#include "elfgcchack.h"
-#endif /* LIBXML_SCHEMATRON_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testAutomata.c b/external/libxml2_android/jni/libxml2/testAutomata.c
deleted file mode 100644
index 6c4de900..00000000
--- a/external/libxml2_android/jni/libxml2/testAutomata.c
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * testRegexp.c: simple module for testing regular expressions
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-#include "libxml.h"
-#ifdef LIBXML_AUTOMATA_ENABLED
-#include <string.h>
-
-#include <libxml/tree.h>
-#include <libxml/xmlautomata.h>
-
-static int scanNumber(char **ptr) {
- int ret = 0;
- char *cur;
-
- cur = *ptr;
- while ((*cur >= '0') && (*cur <= '9')) {
- ret = ret * 10 + (*cur - '0');
- cur++;
- }
- *ptr = cur;
- return(ret);
-}
-
-static void
-testRegexpFile(const char *filename) {
- FILE *input;
- char expr[5000];
- int len;
- int ret;
- int i;
- xmlAutomataPtr am;
- xmlAutomataStatePtr states[1000];
- xmlRegexpPtr regexp = NULL;
- xmlRegExecCtxtPtr exec = NULL;
-
- for (i = 0;i<1000;i++)
- states[i] = NULL;
-
- input = fopen(filename, "r");
- if (input == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot open %s for reading\n", filename);
- return;
- }
-
- am = xmlNewAutomata();
- if (am == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot create automata\n");
- fclose(input);
- return;
- }
- states[0] = xmlAutomataGetInitState(am);
- if (states[0] == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot get start state\n");
- xmlFreeAutomata(am);
- fclose(input);
- return;
- }
- ret = 0;
-
- while (fgets(expr, 4500, input) != NULL) {
- if (expr[0] == '#')
- continue;
- len = strlen(expr);
- len--;
- while ((len >= 0) &&
- ((expr[len] == '\n') || (expr[len] == '\t') ||
- (expr[len] == '\r') || (expr[len] == ' '))) len--;
- expr[len + 1] = 0;
- if (len >= 0) {
- if ((am != NULL) && (expr[0] == 't') && (expr[1] == ' ')) {
- char *ptr = &expr[2];
- int from, to;
-
- from = scanNumber(&ptr);
- if (*ptr != ' ') {
- xmlGenericError(xmlGenericErrorContext,
- "Bad line %s\n", expr);
- break;
- }
- if (states[from] == NULL)
- states[from] = xmlAutomataNewState(am);
- ptr++;
- to = scanNumber(&ptr);
- if (*ptr != ' ') {
- xmlGenericError(xmlGenericErrorContext,
- "Bad line %s\n", expr);
- break;
- }
- if (states[to] == NULL)
- states[to] = xmlAutomataNewState(am);
- ptr++;
- xmlAutomataNewTransition(am, states[from], states[to],
- BAD_CAST ptr, NULL);
- } else if ((am != NULL) && (expr[0] == 'e') && (expr[1] == ' ')) {
- char *ptr = &expr[2];
- int from, to;
-
- from = scanNumber(&ptr);
- if (*ptr != ' ') {
- xmlGenericError(xmlGenericErrorContext,
- "Bad line %s\n", expr);
- break;
- }
- if (states[from] == NULL)
- states[from] = xmlAutomataNewState(am);
- ptr++;
- to = scanNumber(&ptr);
- if (states[to] == NULL)
- states[to] = xmlAutomataNewState(am);
- xmlAutomataNewEpsilon(am, states[from], states[to]);
- } else if ((am != NULL) && (expr[0] == 'f') && (expr[1] == ' ')) {
- char *ptr = &expr[2];
- int state;
-
- state = scanNumber(&ptr);
- if (states[state] == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Bad state %d : %s\n", state, expr);
- break;
- }
- xmlAutomataSetFinalState(am, states[state]);
- } else if ((am != NULL) && (expr[0] == 'c') && (expr[1] == ' ')) {
- char *ptr = &expr[2];
- int from, to;
- int min, max;
-
- from = scanNumber(&ptr);
- if (*ptr != ' ') {
- xmlGenericError(xmlGenericErrorContext,
- "Bad line %s\n", expr);
- break;
- }
- if (states[from] == NULL)
- states[from] = xmlAutomataNewState(am);
- ptr++;
- to = scanNumber(&ptr);
- if (*ptr != ' ') {
- xmlGenericError(xmlGenericErrorContext,
- "Bad line %s\n", expr);
- break;
- }
- if (states[to] == NULL)
- states[to] = xmlAutomataNewState(am);
- ptr++;
- min = scanNumber(&ptr);
- if (*ptr != ' ') {
- xmlGenericError(xmlGenericErrorContext,
- "Bad line %s\n", expr);
- break;
- }
- ptr++;
- max = scanNumber(&ptr);
- if (*ptr != ' ') {
- xmlGenericError(xmlGenericErrorContext,
- "Bad line %s\n", expr);
- break;
- }
- ptr++;
- xmlAutomataNewCountTrans(am, states[from], states[to],
- BAD_CAST ptr, min, max, NULL);
- } else if ((am != NULL) && (expr[0] == '-') && (expr[1] == '-')) {
- /* end of the automata */
- regexp = xmlAutomataCompile(am);
- xmlFreeAutomata(am);
- am = NULL;
- if (regexp == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Failed to compile the automata");
- break;
- }
- } else if ((expr[0] == '=') && (expr[1] == '>')) {
- if (regexp == NULL) {
- printf("=> failed not compiled\n");
- } else {
- if (exec == NULL)
- exec = xmlRegNewExecCtxt(regexp, NULL, NULL);
- if (ret == 0) {
- ret = xmlRegExecPushString(exec, NULL, NULL);
- }
- if (ret == 1)
- printf("=> Passed\n");
- else if ((ret == 0) || (ret == -1))
- printf("=> Failed\n");
- else if (ret < 0)
- printf("=> Error\n");
- xmlRegFreeExecCtxt(exec);
- exec = NULL;
- }
- ret = 0;
- } else if (regexp != NULL) {
- if (exec == NULL)
- exec = xmlRegNewExecCtxt(regexp, NULL, NULL);
- ret = xmlRegExecPushString(exec, BAD_CAST expr, NULL);
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "Unexpected line %s\n", expr);
- }
- }
- }
- fclose(input);
- if (regexp != NULL)
- xmlRegFreeRegexp(regexp);
- if (exec != NULL)
- xmlRegFreeExecCtxt(exec);
- if (am != NULL)
- xmlFreeAutomata(am);
-}
-
-int main(int argc, char **argv) {
-
- xmlInitMemory();
-
- if (argc == 1) {
- int ret;
- xmlAutomataPtr am;
- xmlAutomataStatePtr start, cur;
- xmlRegexpPtr regexp;
- xmlRegExecCtxtPtr exec;
-
- am = xmlNewAutomata();
- start = xmlAutomataGetInitState(am);
-
- /* generate a[ba]*a */
- cur = xmlAutomataNewTransition(am, start, NULL, BAD_CAST"a", NULL);
- xmlAutomataNewTransition(am, cur, cur, BAD_CAST"b", NULL);
- xmlAutomataNewTransition(am, cur, cur, BAD_CAST"a", NULL);
- cur = xmlAutomataNewCountTrans(am, cur, NULL, BAD_CAST"a", 2, 3, NULL);
- xmlAutomataSetFinalState(am, cur);
-
- /* compile it in a regexp and free the automata */
- regexp = xmlAutomataCompile(am);
- xmlFreeAutomata(am);
-
- /* test the regexp */
- xmlRegexpPrint(stdout, regexp);
- exec = xmlRegNewExecCtxt(regexp, NULL, NULL);
- ret = xmlRegExecPushString(exec, BAD_CAST"a", NULL);
- if (ret == 1)
- printf("final\n");
- else if (ret < 0)
- printf("error\n");
- ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
- if (ret == 1)
- printf("final\n");
- else if (ret < 0)
- printf("error\n");
- ret =xmlRegExecPushString(exec, BAD_CAST"b", NULL);
- if (ret == 1)
- printf("final\n");
- else if (ret < 0)
- printf("error\n");
- ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
- if (ret == 1)
- printf("final\n");
- else if (ret < 0)
- printf("error\n");
- ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
- if (ret == 1)
- printf("final\n");
- else if (ret < 0)
- printf("error\n");
- ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
- if (ret == 1)
- printf("final\n");
- else if (ret < 0)
- printf("error\n");
- ret =xmlRegExecPushString(exec, BAD_CAST"a", NULL);
- if (ret == 1)
- printf("final\n");
- else if (ret < 0)
- printf("error\n");
- if (ret == 0) {
- ret = xmlRegExecPushString(exec, NULL, NULL);
- if (ret == 1)
- printf("final\n");
- else if (ret < 0)
- printf("error\n");
- }
- xmlRegFreeExecCtxt(exec);
-
- /* free the regexp */
- xmlRegFreeRegexp(regexp);
- } else {
- int i;
-
- for (i = 1;i < argc;i++)
- testRegexpFile(argv[i]);
- }
-
- xmlCleanupParser();
- xmlMemoryDump();
- return(0);
-}
-
-#else
-#include <stdio.h>
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : Automata support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_AUTOMATA_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testC14N.c b/external/libxml2_android/jni/libxml2/testC14N.c
deleted file mode 100644
index 86e58f27..00000000
--- a/external/libxml2_android/jni/libxml2/testC14N.c
+++ /dev/null
@@ -1,370 +0,0 @@
-/*
- * Canonical XML implementation test program
- * (http://www.w3.org/TR/2001/REC-xml-c14n-20010315)
- *
- * See Copyright for the status of this software.
- *
- * Author: Aleksey Sanin <aleksey@aleksey.com>
- */
-#include "libxml.h"
-#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-
-#include <stdio.h>
-#include <string.h>
-#ifndef STDOUT_FILENO
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#else
-#define STDOUT_FILENO fileno(stdout)
-#endif /* HAVE_UNISTD_H */
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-
-#include <libxml/c14n.h>
-
-
-static void usage(const char *name) {
- fprintf(stderr,
- "Usage: %s <mode> <xml-file> [<xpath-expr>] [<inclusive-ns-list>]\n",
- name);
- fprintf(stderr, "where <mode> is one of following:\n");
- fprintf(stderr,
- "--with-comments \t XML file canonicalization v1.0 w comments \n");
- fprintf(stderr,
- "--without-comments \t XML file canonicalization v1.0 w/o comments\n");
- fprintf(stderr,
- "--1-1-with-comments \t XML file canonicalization v1.1 w comments\n");
- fprintf(stderr,
- "--1-1-without-comments \t XML file canonicalization v1.1 w/o comments\n");
- fprintf(stderr,
- "--exc-with-comments \t Exclusive XML file canonicalization v1.0 w comments\n");
- fprintf(stderr,
- "--exc-without-comments\t Exclusive XML file canonicalization v1.0 w/o comments\n");
-}
-
-static xmlXPathObjectPtr
-load_xpath_expr (xmlDocPtr parent_doc, const char* filename);
-
-static xmlChar **parse_list(xmlChar *str);
-
-/* static void print_xpath_nodes(xmlNodeSetPtr nodes); */
-
-static int
-test_c14n(const char* xml_filename, int with_comments, int mode,
- const char* xpath_filename, xmlChar **inclusive_namespaces) {
- xmlDocPtr doc;
- xmlXPathObjectPtr xpath = NULL;
- xmlChar *result = NULL;
- int ret;
-
- /*
- * build an XML tree from a the file; we need to add default
- * attributes and resolve all character and entities references
- */
- xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
- xmlSubstituteEntitiesDefault(1);
-
- doc = xmlReadFile(xml_filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "Error: unable to parse file \"%s\"\n", xml_filename);
- return(-1);
- }
-
- /*
- * Check the document is of the right kind
- */
- if(xmlDocGetRootElement(doc) == NULL) {
- fprintf(stderr,"Error: empty document for file \"%s\"\n", xml_filename);
- xmlFreeDoc(doc);
- return(-1);
- }
-
- /*
- * load xpath file if specified
- */
- if(xpath_filename) {
- xpath = load_xpath_expr(doc, xpath_filename);
- if(xpath == NULL) {
- fprintf(stderr,"Error: unable to evaluate xpath expression\n");
- xmlFreeDoc(doc);
- return(-1);
- }
- }
-
- /*
- * Canonical form
- */
- /* fprintf(stderr,"File \"%s\" loaded: start canonization\n", xml_filename); */
- ret = xmlC14NDocDumpMemory(doc,
- (xpath) ? xpath->nodesetval : NULL,
- mode, inclusive_namespaces,
- with_comments, &result);
- if(ret >= 0) {
- if(result != NULL) {
- if (write(STDOUT_FILENO, result, ret) == -1) {
- fprintf(stderr, "Can't write data\n");
- }
- xmlFree(result);
- }
- } else {
- fprintf(stderr,"Error: failed to canonicalize XML file \"%s\" (ret=%d)\n", xml_filename, ret);
- if(result != NULL) xmlFree(result);
- xmlFreeDoc(doc);
- return(-1);
- }
-
- /*
- * Cleanup
- */
- if(xpath != NULL) xmlXPathFreeObject(xpath);
- xmlFreeDoc(doc);
-
- return(ret);
-}
-
-int main(int argc, char **argv) {
- int ret = -1;
-
- /*
- * Init libxml
- */
- xmlInitParser();
- LIBXML_TEST_VERSION
-
- /*
- * Parse command line and process file
- */
- if( argc < 3 ) {
- fprintf(stderr, "Error: wrong number of arguments.\n");
- usage(argv[0]);
- } else if(strcmp(argv[1], "--with-comments") == 0) {
- ret = test_c14n(argv[2], 1, XML_C14N_1_0, (argc > 3) ? argv[3] : NULL, NULL);
- } else if(strcmp(argv[1], "--without-comments") == 0) {
- ret = test_c14n(argv[2], 0, XML_C14N_1_0, (argc > 3) ? argv[3] : NULL, NULL);
- } else if(strcmp(argv[1], "--1-1-with-comments") == 0) {
- ret = test_c14n(argv[2], 1, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, NULL);
- } else if(strcmp(argv[1], "--1-1-without-comments") == 0) {
- ret = test_c14n(argv[2], 0, XML_C14N_1_1, (argc > 3) ? argv[3] : NULL, NULL);
- } else if(strcmp(argv[1], "--exc-with-comments") == 0) {
- xmlChar **list;
-
- /* load exclusive namespace from command line */
- list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL;
- ret = test_c14n(argv[2], 1, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list);
- if(list != NULL) xmlFree(list);
- } else if(strcmp(argv[1], "--exc-without-comments") == 0) {
- xmlChar **list;
-
- /* load exclusive namespace from command line */
- list = (argc > 4) ? parse_list((xmlChar *)argv[4]) : NULL;
- ret = test_c14n(argv[2], 0, XML_C14N_EXCLUSIVE_1_0, (argc > 3) ? argv[3] : NULL, list);
- if(list != NULL) xmlFree(list);
- } else {
- fprintf(stderr, "Error: bad option.\n");
- usage(argv[0]);
- }
-
- /*
- * Shutdown libxml
- */
- xmlCleanupParser();
- xmlMemoryDump();
-
- return((ret >= 0) ? 0 : 1);
-}
-
-/*
- * Macro used to grow the current buffer.
- */
-#define growBufferReentrant() { \
- buffer_size *= 2; \
- buffer = (xmlChar **) \
- xmlRealloc(buffer, buffer_size * sizeof(xmlChar*)); \
- if (buffer == NULL) { \
- perror("realloc failed"); \
- return(NULL); \
- } \
-}
-
-static xmlChar **
-parse_list(xmlChar *str) {
- xmlChar **buffer;
- xmlChar **out = NULL;
- int buffer_size = 0;
- int len;
-
- if(str == NULL) {
- return(NULL);
- }
-
- len = xmlStrlen(str);
- if((str[0] == '\'') && (str[len - 1] == '\'')) {
- str[len - 1] = '\0';
- str++;
- }
- /*
- * allocate an translation buffer.
- */
- buffer_size = 1000;
- buffer = (xmlChar **) xmlMalloc(buffer_size * sizeof(xmlChar*));
- if (buffer == NULL) {
- perror("malloc failed");
- return(NULL);
- }
- out = buffer;
-
- while(*str != '\0') {
- if (out - buffer > buffer_size - 10) {
- int indx = out - buffer;
-
- growBufferReentrant();
- out = &buffer[indx];
- }
- (*out++) = str;
- while(*str != ',' && *str != '\0') ++str;
- if(*str == ',') *(str++) = '\0';
- }
- (*out) = NULL;
- return buffer;
-}
-
-static xmlXPathObjectPtr
-load_xpath_expr (xmlDocPtr parent_doc, const char* filename) {
- xmlXPathObjectPtr xpath;
- xmlDocPtr doc;
- xmlChar *expr;
- xmlXPathContextPtr ctx;
- xmlNodePtr node;
- xmlNsPtr ns;
-
- /*
- * load XPath expr as a file
- */
- xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
- xmlSubstituteEntitiesDefault(1);
-
- doc = xmlReadFile(filename, NULL, XML_PARSE_DTDATTR | XML_PARSE_NOENT);
- if (doc == NULL) {
- fprintf(stderr, "Error: unable to parse file \"%s\"\n", filename);
- return(NULL);
- }
-
- /*
- * Check the document is of the right kind
- */
- if(xmlDocGetRootElement(doc) == NULL) {
- fprintf(stderr,"Error: empty document for file \"%s\"\n", filename);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- node = doc->children;
- while(node != NULL && !xmlStrEqual(node->name, (const xmlChar *)"XPath")) {
- node = node->next;
- }
-
- if(node == NULL) {
- fprintf(stderr,"Error: XPath element expected in the file \"%s\"\n", filename);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- expr = xmlNodeGetContent(node);
- if(expr == NULL) {
- fprintf(stderr,"Error: XPath content element is NULL \"%s\"\n", filename);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- ctx = xmlXPathNewContext(parent_doc);
- if(ctx == NULL) {
- fprintf(stderr,"Error: unable to create new context\n");
- xmlFree(expr);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- /*
- * Register namespaces
- */
- ns = node->nsDef;
- while(ns != NULL) {
- if(xmlXPathRegisterNs(ctx, ns->prefix, ns->href) != 0) {
- fprintf(stderr,"Error: unable to register NS with prefix=\"%s\" and href=\"%s\"\n", ns->prefix, ns->href);
- xmlFree(expr);
- xmlXPathFreeContext(ctx);
- xmlFreeDoc(doc);
- return(NULL);
- }
- ns = ns->next;
- }
-
- /*
- * Evaluate xpath
- */
- xpath = xmlXPathEvalExpression(expr, ctx);
- if(xpath == NULL) {
- fprintf(stderr,"Error: unable to evaluate xpath expression\n");
- xmlFree(expr);
- xmlXPathFreeContext(ctx);
- xmlFreeDoc(doc);
- return(NULL);
- }
-
- /* print_xpath_nodes(xpath->nodesetval); */
-
- xmlFree(expr);
- xmlXPathFreeContext(ctx);
- xmlFreeDoc(doc);
- return(xpath);
-}
-
-/*
-static void
-print_xpath_nodes(xmlNodeSetPtr nodes) {
- xmlNodePtr cur;
- int i;
-
- if(nodes == NULL ){
- fprintf(stderr, "Error: no nodes set defined\n");
- return;
- }
-
- fprintf(stderr, "Nodes Set:\n-----\n");
- for(i = 0; i < nodes->nodeNr; ++i) {
- if(nodes->nodeTab[i]->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns;
-
- ns = (xmlNsPtr)nodes->nodeTab[i];
- cur = (xmlNodePtr)ns->next;
- fprintf(stderr, "namespace \"%s\"=\"%s\" for node %s:%s\n",
- ns->prefix, ns->href,
- (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name);
- } else if(nodes->nodeTab[i]->type == XML_ELEMENT_NODE) {
- cur = nodes->nodeTab[i];
- fprintf(stderr, "element node \"%s:%s\"\n",
- (cur->ns) ? cur->ns->prefix : BAD_CAST "", cur->name);
- } else {
- cur = nodes->nodeTab[i];
- fprintf(stderr, "node \"%s\": type %d\n", cur->name, cur->type);
- }
- }
-}
-*/
-
-#else
-#include <stdio.h>
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : XPath/Canonicalization and output support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_C14N_ENABLED */
-
-
diff --git a/external/libxml2_android/jni/libxml2/testHTML.c b/external/libxml2_android/jni/libxml2/testHTML.c
deleted file mode 100644
index 9b42778c..00000000
--- a/external/libxml2_android/jni/libxml2/testHTML.c
+++ /dev/null
@@ -1,880 +0,0 @@
-/*
- * testHTML.c : a small tester program for HTML input.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-
-#ifdef LIBXML_HTML_ENABLED
-
-#include <string.h>
-#include <stdarg.h>
-
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-
-#ifdef LIBXML_DEBUG_ENABLED
-static int debug = 0;
-#endif
-static int copy = 0;
-static int sax = 0;
-static int repeat = 0;
-static int noout = 0;
-#ifdef LIBXML_PUSH_ENABLED
-static int push = 0;
-#endif /* LIBXML_PUSH_ENABLED */
-static char *encoding = NULL;
-static int options = 0;
-
-static xmlSAXHandler emptySAXHandlerStruct = {
- NULL, /* internalSubset */
- NULL, /* isStandalone */
- NULL, /* hasInternalSubset */
- NULL, /* hasExternalSubset */
- NULL, /* resolveEntity */
- NULL, /* getEntity */
- NULL, /* entityDecl */
- NULL, /* notationDecl */
- NULL, /* attributeDecl */
- NULL, /* elementDecl */
- NULL, /* unparsedEntityDecl */
- NULL, /* setDocumentLocator */
- NULL, /* startDocument */
- NULL, /* endDocument */
- NULL, /* startElement */
- NULL, /* endElement */
- NULL, /* reference */
- NULL, /* characters */
- NULL, /* ignorableWhitespace */
- NULL, /* processingInstruction */
- NULL, /* comment */
- NULL, /* xmlParserWarning */
- NULL, /* xmlParserError */
- NULL, /* xmlParserError */
- NULL, /* getParameterEntity */
- NULL, /* cdataBlock */
- NULL, /* externalSubset */
- 1, /* initialized */
- NULL, /* private */
- NULL, /* startElementNsSAX2Func */
- NULL, /* endElementNsSAX2Func */
- NULL /* xmlStructuredErrorFunc */
-};
-
-static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
-extern xmlSAXHandlerPtr debugSAXHandler;
-
-/************************************************************************
- * *
- * Debug Handlers *
- * *
- ************************************************************************/
-
-/**
- * isStandaloneDebug:
- * @ctxt: An XML parser context
- *
- * Is this document tagged standalone ?
- *
- * Returns 1 if true
- */
-static int
-isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- fprintf(stdout, "SAX.isStandalone()\n");
- return(0);
-}
-
-/**
- * hasInternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- *
- * Returns 1 if true
- */
-static int
-hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- fprintf(stdout, "SAX.hasInternalSubset()\n");
- return(0);
-}
-
-/**
- * hasExternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- *
- * Returns 1 if true
- */
-static int
-hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- fprintf(stdout, "SAX.hasExternalSubset()\n");
- return(0);
-}
-
-/**
- * hasInternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- */
-static void
-internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- fprintf(stdout, "SAX.internalSubset(%s,", name);
- if (ExternalID == NULL)
- fprintf(stdout, " ,");
- else
- fprintf(stdout, " %s,", ExternalID);
- if (SystemID == NULL)
- fprintf(stdout, " )\n");
- else
- fprintf(stdout, " %s)\n", SystemID);
-}
-
-/**
- * resolveEntityDebug:
- * @ctxt: An XML parser context
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * Special entity resolver, better left to the parser, it has
- * more context than the application layer.
- * The default behaviour is to NOT resolve the entities, in that case
- * the ENTITY_REF nodes are built in the structure (and the parameter
- * values).
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlParserInputPtr
-resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
-{
- /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
-
-
- fprintf(stdout, "SAX.resolveEntity(");
- if (publicId != NULL)
- fprintf(stdout, "%s", (char *)publicId);
- else
- fprintf(stdout, " ");
- if (systemId != NULL)
- fprintf(stdout, ", %s)\n", (char *)systemId);
- else
- fprintf(stdout, ", )\n");
-/*********
- if (systemId != NULL) {
- return(xmlNewInputFromFile(ctxt, (char *) systemId));
- }
- *********/
- return(NULL);
-}
-
-/**
- * getEntityDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get an entity by name
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlEntityPtr
-getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- fprintf(stdout, "SAX.getEntity(%s)\n", name);
- return(NULL);
-}
-
-/**
- * getParameterEntityDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get a parameter entity by name
- *
- * Returns the xmlParserInputPtr
- */
-static xmlEntityPtr
-getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
- return(NULL);
-}
-
-
-/**
- * entityDeclDebug:
- * @ctxt: An XML parser context
- * @name: the entity name
- * @type: the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed
- */
-static void
-entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
- const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
-{
- fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
- name, type, publicId, systemId, content);
-}
-
-/**
- * attributeDeclDebug:
- * @ctxt: An XML parser context
- * @name: the attribute name
- * @type: the attribute type
- *
- * An attribute definition has been parsed
- */
-static void
-attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *elem, const xmlChar *name,
- int type, int def, const xmlChar *defaultValue,
- xmlEnumerationPtr tree ATTRIBUTE_UNUSED)
-{
- fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
- elem, name, type, def, defaultValue);
-}
-
-/**
- * elementDeclDebug:
- * @ctxt: An XML parser context
- * @name: the element name
- * @type: the element type
- * @content: the element value (without processing).
- *
- * An element definition has been parsed
- */
-static void
-elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
- xmlElementContentPtr content ATTRIBUTE_UNUSED)
-{
- fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
- name, type);
-}
-
-/**
- * notationDeclDebug:
- * @ctxt: An XML parser context
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- */
-static void
-notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId)
-{
- fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
- (char *) name, (char *) publicId, (char *) systemId);
-}
-
-/**
- * unparsedEntityDeclDebug:
- * @ctxt: An XML parser context
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed
- */
-static void
-unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId,
- const xmlChar *notationName)
-{
- fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
- (char *) name, (char *) publicId, (char *) systemId,
- (char *) notationName);
-}
-
-/**
- * setDocumentLocatorDebug:
- * @ctxt: An XML parser context
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
- * Everything is available on the context, so this is useless in our case.
- */
-static void
-setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
-{
- fprintf(stdout, "SAX.setDocumentLocator()\n");
-}
-
-/**
- * startDocumentDebug:
- * @ctxt: An XML parser context
- *
- * called when the document start being processed.
- */
-static void
-startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- fprintf(stdout, "SAX.startDocument()\n");
-}
-
-/**
- * endDocumentDebug:
- * @ctxt: An XML parser context
- *
- * called when the document end has been detected.
- */
-static void
-endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- fprintf(stdout, "SAX.endDocument()\n");
-}
-
-/**
- * startElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
-{
- int i;
-
- fprintf(stdout, "SAX.startElement(%s", (char *) name);
- if (atts != NULL) {
- for (i = 0;(atts[i] != NULL);i++) {
- fprintf(stdout, ", %s", atts[i++]);
- if (atts[i] != NULL) {
- unsigned char output[40];
- const unsigned char *att = atts[i];
- int outlen, attlen;
- fprintf(stdout, "='");
- while ((attlen = strlen((char*)att)) > 0) {
- outlen = sizeof output - 1;
- htmlEncodeEntities(output, &outlen, att, &attlen, '\'');
- output[outlen] = 0;
- fprintf(stdout, "%s", (char *) output);
- att += attlen;
- }
- fprintf(stdout, "'");
- }
- }
- }
- fprintf(stdout, ")\n");
-}
-
-/**
- * endElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
-}
-
-/**
- * charactersDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- * Question: how much at a time ???
- */
-static void
-charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- unsigned char output[40];
- int inlen = len, outlen = 30;
-
- htmlEncodeEntities(output, &outlen, ch, &inlen, 0);
- output[outlen] = 0;
-
- fprintf(stdout, "SAX.characters(%s, %d)\n", output, len);
-}
-
-/**
- * cdataDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some cdata chars from the parser.
- * Question: how much at a time ???
- */
-static void
-cdataDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- unsigned char output[40];
- int inlen = len, outlen = 30;
-
- htmlEncodeEntities(output, &outlen, ch, &inlen, 0);
- output[outlen] = 0;
-
- fprintf(stdout, "SAX.cdata(%s, %d)\n", output, len);
-}
-
-/**
- * referenceDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * called when an entity reference is detected.
- */
-static void
-referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- fprintf(stdout, "SAX.reference(%s)\n", name);
-}
-
-/**
- * ignorableWhitespaceDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @start: the first char in the string
- * @len: the number of xmlChar
- *
- * receiving some ignorable whitespaces from the parser.
- * Question: how much at a time ???
- */
-static void
-ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- char output[40];
- int i;
-
- for (i = 0;(i<len) && (i < 30);i++)
- output[i] = ch[i];
- output[i] = 0;
-
- fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", output, len);
-}
-
-/**
- * processingInstructionDebug:
- * @ctxt: An XML parser context
- * @target: the target name
- * @data: the PI data's
- * @len: the number of xmlChar
- *
- * A processing instruction has been parsed.
- */
-static void
-processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
- const xmlChar *data)
-{
- fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
- (char *) target, (char *) data);
-}
-
-/**
- * commentDebug:
- * @ctxt: An XML parser context
- * @value: the comment content
- *
- * A comment has been parsed.
- */
-static void
-commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
-{
- fprintf(stdout, "SAX.comment(%s)\n", value);
-}
-
-/**
- * warningDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a warning messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- va_start(args, msg);
- fprintf(stdout, "SAX.warning: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-/**
- * errorDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a error messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- va_start(args, msg);
- fprintf(stdout, "SAX.error: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-/**
- * fatalErrorDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a fatalError messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- va_start(args, msg);
- fprintf(stdout, "SAX.fatalError: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-static xmlSAXHandler debugSAXHandlerStruct = {
- internalSubsetDebug,
- isStandaloneDebug,
- hasInternalSubsetDebug,
- hasExternalSubsetDebug,
- resolveEntityDebug,
- getEntityDebug,
- entityDeclDebug,
- notationDeclDebug,
- attributeDeclDebug,
- elementDeclDebug,
- unparsedEntityDeclDebug,
- setDocumentLocatorDebug,
- startDocumentDebug,
- endDocumentDebug,
- startElementDebug,
- endElementDebug,
- referenceDebug,
- charactersDebug,
- ignorableWhitespaceDebug,
- processingInstructionDebug,
- commentDebug,
- warningDebug,
- errorDebug,
- fatalErrorDebug,
- getParameterEntityDebug,
- cdataDebug,
- NULL,
- 1,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
-/************************************************************************
- * *
- * Debug *
- * *
- ************************************************************************/
-
-static void
-parseSAXFile(char *filename) {
- htmlDocPtr doc = NULL;
-
- /*
- * Empty callbacks for checking
- */
-#ifdef LIBXML_PUSH_ENABLED
- if (push) {
- FILE *f;
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- f = fopen(filename, "rb");
-#else
- f = fopen(filename, "r");
-#endif
- if (f != NULL) {
- int res, size = 3;
- char chars[4096];
- htmlParserCtxtPtr ctxt;
-
- /* if (repeat) */
- size = 4096;
- res = fread(chars, 1, 4, f);
- if (res > 0) {
- ctxt = htmlCreatePushParserCtxt(emptySAXHandler, NULL,
- chars, res, filename, XML_CHAR_ENCODING_NONE);
- while ((res = fread(chars, 1, size, f)) > 0) {
- htmlParseChunk(ctxt, chars, res, 0);
- }
- htmlParseChunk(ctxt, chars, 0, 1);
- doc = ctxt->myDoc;
- htmlFreeParserCtxt(ctxt);
- }
- if (doc != NULL) {
- fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
- xmlFreeDoc(doc);
- }
- fclose(f);
- }
- if (!noout) {
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- f = fopen(filename, "rb");
-#else
- f = fopen(filename, "r");
-#endif
- if (f != NULL) {
- int res, size = 3;
- char chars[4096];
- htmlParserCtxtPtr ctxt;
-
- /* if (repeat) */
- size = 4096;
- res = fread(chars, 1, 4, f);
- if (res > 0) {
- ctxt = htmlCreatePushParserCtxt(debugSAXHandler, NULL,
- chars, res, filename, XML_CHAR_ENCODING_NONE);
- while ((res = fread(chars, 1, size, f)) > 0) {
- htmlParseChunk(ctxt, chars, res, 0);
- }
- htmlParseChunk(ctxt, chars, 0, 1);
- doc = ctxt->myDoc;
- htmlFreeParserCtxt(ctxt);
- }
- if (doc != NULL) {
- fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
- xmlFreeDoc(doc);
- }
- fclose(f);
- }
- }
- } else {
-#endif /* LIBXML_PUSH_ENABLED */
- doc = htmlSAXParseFile(filename, NULL, emptySAXHandler, NULL);
- if (doc != NULL) {
- fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
- xmlFreeDoc(doc);
- }
-
- if (!noout) {
- /*
- * Debug callback
- */
- doc = htmlSAXParseFile(filename, NULL, debugSAXHandler, NULL);
- if (doc != NULL) {
- fprintf(stdout, "htmlSAXParseFile returned non-NULL\n");
- xmlFreeDoc(doc);
- }
- }
-#ifdef LIBXML_PUSH_ENABLED
- }
-#endif /* LIBXML_PUSH_ENABLED */
-}
-
-static void
-parseAndPrintFile(char *filename) {
- htmlDocPtr doc = NULL;
-
- /*
- * build an HTML tree from a string;
- */
-#ifdef LIBXML_PUSH_ENABLED
- if (push) {
- FILE *f;
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- f = fopen(filename, "rb");
-#else
- f = fopen(filename, "r");
-#endif
- if (f != NULL) {
- int res, size = 3;
- char chars[4096];
- htmlParserCtxtPtr ctxt;
-
- /* if (repeat) */
- size = 4096;
- res = fread(chars, 1, 4, f);
- if (res > 0) {
- ctxt = htmlCreatePushParserCtxt(NULL, NULL,
- chars, res, filename, XML_CHAR_ENCODING_NONE);
- while ((res = fread(chars, 1, size, f)) > 0) {
- htmlParseChunk(ctxt, chars, res, 0);
- }
- htmlParseChunk(ctxt, chars, 0, 1);
- doc = ctxt->myDoc;
- htmlFreeParserCtxt(ctxt);
- }
- fclose(f);
- }
- } else {
- doc = htmlReadFile(filename, NULL, options);
- }
-#else
- doc = htmlReadFile(filename,NULL,options);
-#endif
- if (doc == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Could not parse %s\n", filename);
- }
-
-#ifdef LIBXML_TREE_ENABLED
- /*
- * test intermediate copy if needed.
- */
- if (copy) {
- htmlDocPtr tmp;
-
- tmp = doc;
- doc = xmlCopyDoc(doc, 1);
- xmlFreeDoc(tmp);
- }
-#endif
-
-#ifdef LIBXML_OUTPUT_ENABLED
- /*
- * print it.
- */
- if (!noout) {
-#ifdef LIBXML_DEBUG_ENABLED
- if (!debug) {
- if (encoding)
- htmlSaveFileEnc("-", doc, encoding);
- else
- htmlDocDump(stdout, doc);
- } else
- xmlDebugDumpDocument(stdout, doc);
-#else
- if (encoding)
- htmlSaveFileEnc("-", doc, encoding);
- else
- htmlDocDump(stdout, doc);
-#endif
- }
-#endif /* LIBXML_OUTPUT_ENABLED */
-
- /*
- * free it.
- */
- xmlFreeDoc(doc);
-}
-
-int main(int argc, char **argv) {
- int i, count;
- int files = 0;
-
- for (i = 1; i < argc ; i++) {
-#ifdef LIBXML_DEBUG_ENABLED
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
- debug++;
- else
-#endif
- if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
- copy++;
-#ifdef LIBXML_PUSH_ENABLED
- else if ((!strcmp(argv[i], "-push")) || (!strcmp(argv[i], "--push")))
- push++;
-#endif /* LIBXML_PUSH_ENABLED */
- else if ((!strcmp(argv[i], "-sax")) || (!strcmp(argv[i], "--sax")))
- sax++;
- else if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout")))
- noout++;
- else if ((!strcmp(argv[i], "-repeat")) ||
- (!strcmp(argv[i], "--repeat")))
- repeat++;
- else if ((!strcmp(argv[i], "-encode")) ||
- (!strcmp(argv[i], "--encode"))) {
- i++;
- encoding = argv[i];
- }
- }
- for (i = 1; i < argc ; i++) {
- if ((!strcmp(argv[i], "-encode")) ||
- (!strcmp(argv[i], "--encode"))) {
- i++;
- continue;
- }
- if (argv[i][0] != '-') {
- if (repeat) {
- for (count = 0;count < 100 * repeat;count++) {
- if (sax)
- parseSAXFile(argv[i]);
- else
- parseAndPrintFile(argv[i]);
- }
- } else {
- if (sax)
- parseSAXFile(argv[i]);
- else
- parseAndPrintFile(argv[i]);
- }
- files ++;
- }
- }
- if (files == 0) {
- printf("Usage : %s [--debug] [--copy] [--copy] HTMLfiles ...\n",
- argv[0]);
- printf("\tParse the HTML files and output the result of the parsing\n");
-#ifdef LIBXML_DEBUG_ENABLED
- printf("\t--debug : dump a debug tree of the in-memory document\n");
-#endif
- printf("\t--copy : used to test the internal copy implementation\n");
- printf("\t--sax : debug the sequence of SAX callbacks\n");
- printf("\t--repeat : parse the file 100 times, for timing\n");
- printf("\t--noout : do not print the result\n");
-#ifdef LIBXML_PUSH_ENABLED
- printf("\t--push : use the push mode parser\n");
-#endif /* LIBXML_PUSH_ENABLED */
- printf("\t--encode encoding : output in the given encoding\n");
- }
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(0);
-}
-#else /* !LIBXML_HTML_ENABLED */
-#include <stdio.h>
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : HTML support not compiled in\n", argv[0]);
- return(0);
-}
-#endif
diff --git a/external/libxml2_android/jni/libxml2/testModule.c b/external/libxml2_android/jni/libxml2/testModule.c
deleted file mode 100644
index 77b7ba10..00000000
--- a/external/libxml2_android/jni/libxml2/testModule.c
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * testModule.c : a small tester program for xmlModule
- *
- * See Copyright for the status of this software.
- *
- * joelwreed@comcast.net
- */
-
-#include "libxml.h"
-#ifdef LIBXML_MODULES_ENABLED
-#include <libxml/xmlversion.h>
-
-#include <limits.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-
-#include <libxml/xmlmemory.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlmodule.h>
-
-#ifdef _WIN32
-#define MODULE_PATH "."
-#include <stdlib.h> /* for _MAX_PATH */
-#ifndef __MINGW32__
-#define PATH_MAX _MAX_PATH
-#endif
-#else
-#define MODULE_PATH ".libs"
-#endif
-
-/* Used for SCO Openserver*/
-#ifndef PATH_MAX
-#ifdef _POSIX_PATH_MAX
-#define PATH_MAX _POSIX_PATH_MAX
-#else
-#define PATH_MAX 4096
-#endif
-#endif
-
-typedef int (*hello_world_t)(void);
-
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- xmlChar filename[PATH_MAX];
- xmlModulePtr module = NULL;
- hello_world_t hello_world = NULL;
-
- /* build the module filename, and confirm the module exists */
- xmlStrPrintf(filename, sizeof(filename),
- "%s/testdso%s",
- (const xmlChar*)MODULE_PATH,
- (const xmlChar*)LIBXML_MODULE_EXTENSION);
-
- module = xmlModuleOpen((const char*)filename, 0);
- if (module)
- {
- if (xmlModuleSymbol(module, "hello_world", (void **) &hello_world)) {
- fprintf(stderr, "Failure to lookup\n");
- return(1);
- }
- if (hello_world == NULL) {
- fprintf(stderr, "Lookup returned NULL\n");
- return(1);
- }
-
- (*hello_world)();
-
- xmlModuleClose(module);
- }
-
- xmlMemoryDump();
-
- return(0);
-}
-
-#else
-#include <stdio.h>
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : Module support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testOOM.c b/external/libxml2_android/jni/libxml2/testOOM.c
deleted file mode 100644
index 9ff13f2f..00000000
--- a/external/libxml2_android/jni/libxml2/testOOM.c
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * testOOM.c: Test out-of-memory handling
- *
- * See Copyright for the status of this software.
- *
- * hp@redhat.com
- */
-
-#include "libxml.h"
-
-#include <string.h>
-#include <stdarg.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include <libxml/xmlreader.h>
-
-#include "testOOMlib.h"
-
-#ifndef TRUE
-#define TRUE (1)
-#endif
-#ifndef FALSE
-#define FALSE (0)
-#endif
-
-#define EXIT_OOM 2
-
-int error = FALSE;
-int errcount = 0;
-int noent = 0;
-int count = 0;
-int valid = 0;
-int showErrs = 0;
-
-/*
- * Since we are using the xmlTextReader functions, we set up
- * strings for the element types to help in debugging any error
- * output
- */
-const char *elementNames[] = {
- "XML_READER_TYPE_NONE",
- "XML_READER_TYPE_ELEMENT",
- "XML_READER_TYPE_ATTRIBUTE",
- "XML_READER_TYPE_TEXT",
- "XML_READER_TYPE_CDATA",
- "XML_READER_TYPE_ENTITY_REFERENCE",
- "XML_READER_TYPE_ENTITY",
- "XML_READER_TYPE_PROCESSING_INSTRUCTION",
- "XML_READER_TYPE_COMMENT",
- "XML_READER_TYPE_DOCUMENT",
- "XML_READER_TYPE_DOCUMENT_TYPE",
- "XML_READER_TYPE_DOCUMENT_FRAGMENT",
- "XML_READER_TYPE_NOTATION",
- "XML_READER_TYPE_WHITESPACE",
- "XML_READER_TYPE_SIGNIFICANT_WHITESPACE",
- "XML_READER_TYPE_END_ELEMENT",
- "XML_READER_TYPE_END_ENTITY",
- "XML_READER_TYPE_XML_DECLARATION"};
-
-/* not using xmlBuff here because I don't want those
- * mallocs to interfere */
-struct buffer {
- char *str;
- size_t len;
- size_t max;
-};
-
-static struct buffer *buffer_create (size_t init_len)
-{
- struct buffer *b;
- b = malloc (sizeof *b);
- if (b == NULL)
- exit (EXIT_OOM);
- if (init_len) {
- b->str = malloc (init_len);
- if (b->str == NULL)
- exit (EXIT_OOM);
- }
- else
- b->str = NULL;
- b->len = 0;
- b->max = init_len;
- return b;
-}
-
-static void buffer_free (struct buffer *b)
-{
- free (b->str);
- free (b);
-}
-
-static size_t buffer_get_length (struct buffer *b)
-{
- return b->len;
-}
-
-static void buffer_expand (struct buffer *b, size_t min)
-{
- void *new_str;
- size_t new_size = b->max ? b->max : 512;
- while (new_size < b->len + min)
- new_size *= 2;
- if (new_size > b->max) {
- new_str = realloc (b->str, new_size);
- if (new_str == NULL)
- exit (EXIT_OOM);
- b->str = new_str;
- b->max = new_size;
- }
-}
-
-static void buffer_add_char (struct buffer *b, char c)
-{
- buffer_expand (b, 1);
- b->str[b->len] = c;
- b->len += 1;
-}
-
-static void buffer_add_string (struct buffer *b, const char *s)
-{
- size_t size = strlen(s) + 1;
- unsigned int ix;
- for (ix=0; ix<size-1; ix++) {
- if (s[ix] < 0x20)
- printf ("binary data [0x%02x]?\n", (unsigned char)s[ix]);
- }
- buffer_expand (b, size);
- strcpy (b->str + b->len, s);
- b->str[b->len+size-1] = '\n'; /* replace string term with newline */
- b->len += size;
-}
-
-static int buffer_equal (struct buffer *b1, struct buffer *b2)
-{
- return (b1->len == b2->len &&
- (b1->len == 0 || (memcmp (b1->str, b2->str, b1->len) == 0)));
-}
-
-static void buffer_dump (struct buffer *b, const char *fname)
-{
- FILE *f = fopen (fname, "wb");
- if (f != NULL) {
- fwrite (b->str, 1, b->len, f);
- fclose (f);
- }
-}
-
-
-static void usage(const char *progname) {
- printf("Usage : %s [options] XMLfiles ...\n", progname);
- printf("\tParse the XML files using the xmlTextReader API\n");
- printf("\t --count: count the number of attribute and elements\n");
- printf("\t --valid: validate the document\n");
- printf("\t --show: display the error messages encountered\n");
- exit(1);
-}
-static unsigned int elem, attrs, chars;
-
-static int processNode (xmlTextReaderPtr reader, void *data)
-{
- struct buffer *buff = data;
- int type;
-
- type = xmlTextReaderNodeType(reader);
- if (count) {
- if (type == 1) {
- elem++;
- attrs += xmlTextReaderAttributeCount(reader);
- } else if (type == 3) {
- const xmlChar *txt;
- txt = xmlTextReaderConstValue(reader);
- if (txt != NULL)
- chars += xmlStrlen (txt);
- else
- return FALSE;
- }
- }
-
- if (buff != NULL) {
- int ret;
- const char *s;
-
- buffer_add_string (buff, elementNames[type]);
-
- if (type == 1) {
- s = (const char *)xmlTextReaderConstName (reader);
- if (s == NULL) return FALSE;
- buffer_add_string (buff, s);
- while ((ret = xmlTextReaderMoveToNextAttribute (reader)) == 1) {
- s = (const char *)xmlTextReaderConstName (reader);
- if (s == NULL) return FALSE;
- buffer_add_string (buff, s);
- buffer_add_char (buff, '=');
- s = (const char *)xmlTextReaderConstValue (reader);
- if (s == NULL) return FALSE;
- buffer_add_string (buff, s);
- }
- if (ret == -1) return FALSE;
- }
- else if (type == 3) {
- s = (const char *)xmlTextReaderConstValue (reader);
- if (s == NULL) return FALSE;
- buffer_add_string (buff, s);
- }
- }
-
- return TRUE;
-}
-
-
-struct file_params {
- const char *filename;
- struct buffer *verif_buff;
-};
-
-static void
-error_func (void *data ATTRIBUTE_UNUSED, xmlErrorPtr err)
-{
-
- errcount++;
- if (err->level == XML_ERR_ERROR ||
- err->level == XML_ERR_FATAL)
- error = TRUE;
- if (showErrs) {
- printf("%3d line %d: %s\n", error, err->line, err->message);
- }
-}
-
-static int
-check_load_file_memory_func (void *data)
-{
- struct file_params *p = data;
- struct buffer *b;
- xmlTextReaderPtr reader;
- int ret, status, first_run;
-
- if (count) {
- elem = 0;
- attrs = 0;
- chars = 0;
- }
-
- first_run = p->verif_buff == NULL;
- status = TRUE;
- error = FALSE;
- if (first_run)
- b = buffer_create (0);
- else
- b = buffer_create (buffer_get_length (p->verif_buff));
-
- reader = xmlNewTextReaderFilename (p->filename);
- if (reader == NULL)
- goto out;
-
- xmlTextReaderSetStructuredErrorHandler (reader, error_func, NULL);
- xmlSetStructuredErrorFunc(NULL, error_func);
-
- if (valid) {
- if (xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1) == -1)
- goto out;
- }
-
- /*
- * Process all nodes in sequence
- */
- while ((ret = xmlTextReaderRead(reader)) == 1) {
- if (!processNode(reader, b))
- goto out;
- }
- if (ret == -1)
- goto out;
-
- if (error) {
- fprintf (stdout, "error handler was called but parse completed successfully (last error #%d)\n", errcount);
- return FALSE;
- }
-
- /*
- * Done, cleanup and status
- */
- if (! first_run) {
- status = buffer_equal (p->verif_buff, b);
- if (! status) {
- buffer_dump (p->verif_buff, ".OOM.verif_buff");
- buffer_dump (b, ".OOM.buff");
- }
- }
-
- if (count)
- {
- fprintf (stdout, "# %s: %u elems, %u attrs, %u chars %s\n",
- p->filename, elem, attrs, chars,
- status ? "ok" : "wrong");
- }
-
- out:
- if (first_run)
- p->verif_buff = b;
- else
- buffer_free (b);
- if (reader)
- xmlFreeTextReader (reader);
- return status;
-}
-
-int main(int argc, char **argv) {
- int i;
- int files = 0;
-
- if (argc <= 1) {
- usage(argv[0]);
- return(1);
- }
- LIBXML_TEST_VERSION;
-
- xmlMemSetup (test_free,
- test_malloc,
- test_realloc,
- test_strdup);
-
- xmlInitParser();
-
- for (i = 1; i < argc ; i++) {
- if ((!strcmp(argv[i], "-count")) || (!strcmp(argv[i], "--count")))
- count++;
- else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
- valid++;
- else if ((!strcmp(argv[i], "-noent")) ||
- (!strcmp(argv[i], "--noent")))
- noent++;
- else if ((!strcmp(argv[i], "-show")) ||
- (!strcmp(argv[i], "--show")))
- showErrs++;
- }
- if (noent != 0)
- xmlSubstituteEntitiesDefault(1);
- for (i = 1; i < argc ; i++) {
- if (argv[i][0] != '-') {
- struct file_params p;
- p.filename = argv[i];
- p.verif_buff = NULL;
-
- if (!test_oom_handling (check_load_file_memory_func,
- &p)) {
- fprintf (stdout, "Failed!\n");
- return 1;
- }
-
- buffer_free (p.verif_buff);
- xmlCleanupParser();
-
- if (test_get_malloc_blocks_outstanding () > 0) {
- fprintf (stdout, "%d blocks leaked\n",
- test_get_malloc_blocks_outstanding ());
- xmlMemoryDump();
- return 1;
- }
-
- files ++;
- }
- }
- xmlMemoryDump();
-
- return 0;
-}
diff --git a/external/libxml2_android/jni/libxml2/testOOMlib.c b/external/libxml2_android/jni/libxml2/testOOMlib.c
deleted file mode 100644
index 34c4aa0a..00000000
--- a/external/libxml2_android/jni/libxml2/testOOMlib.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * testOOM.c: Test out-of-memory handling
- *
- * See Copyright for the status of this software.
- *
- * Copyright 2003 Red Hat, Inc.
- * Written by: hp@redhat.com
- */
-
-#include "testOOMlib.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include <string.h>
-
-#define _TEST_INT_MAX 2147483647
-#ifndef TRUE
-#define TRUE (1)
-#endif
-#ifndef FALSE
-#define FALSE (0)
-#endif
-#ifndef NULL
-#define NULL ((void*)0)
-#endif
-
-#include <libxml/xmlmemory.h>
-
-static int fail_alloc_counter = _TEST_INT_MAX;
-static int n_failures_per_failure = 1;
-static int n_failures_this_failure = 0;
-static int n_blocks_outstanding = 0;
-
-/**
- * set_fail_alloc_counter:
- * @until_next_fail: number of successful allocs before one fails
- *
- * Sets the number of allocations until we simulate a failed
- * allocation. If set to 0, the next allocation to run
- * fails; if set to 1, one succeeds then the next fails; etc.
- * Set to _TEST_INT_MAX to not fail anything.
- */
-static void
-set_fail_alloc_counter (int until_next_fail)
-{
- fail_alloc_counter = until_next_fail;
-}
-
-/**
- * get_fail_alloc_counter:
- *
- * Returns the number of successful allocs until we'll simulate
- * a failed alloc.
- */
-static int
-get_fail_alloc_counter (void)
-{
- return fail_alloc_counter;
-}
-
-/**
- * set_fail_alloc_failures:
- * @failures_per_failure: number to fail
- *
- * Sets how many mallocs to fail when the fail alloc counter reaches
- * 0.
- *
- */
-static void
-set_fail_alloc_failures (int failures_per_failure)
-{
- n_failures_per_failure = failures_per_failure;
-}
-
-/**
- * decrement_fail_alloc_counter:
- *
- * Called when about to alloc some memory; if
- * it returns #TRUE, then the allocation should
- * fail. If it returns #FALSE, then the allocation
- * should not fail.
- *
- * returns #TRUE if this alloc should fail
- */
-static int
-decrement_fail_alloc_counter (void)
-{
- if (fail_alloc_counter <= 0)
- {
- n_failures_this_failure += 1;
- if (n_failures_this_failure >= n_failures_per_failure)
- {
- fail_alloc_counter = _TEST_INT_MAX;
-
- n_failures_this_failure = 0;
- }
-
- return TRUE;
- }
- else
- {
- fail_alloc_counter -= 1;
- return FALSE;
- }
-}
-
-/**
- * test_get_malloc_blocks_outstanding:
- *
- * Get the number of outstanding malloc()'d blocks.
- *
- * Returns number of blocks
- */
-int
-test_get_malloc_blocks_outstanding (void)
-{
- return n_blocks_outstanding;
-}
-
-void*
-test_malloc (size_t bytes)
-{
- if (decrement_fail_alloc_counter ())
- {
- /* FAIL the malloc */
- return NULL;
- }
-
- if (bytes == 0) /* some system mallocs handle this, some don't */
- return NULL;
- else
- {
- void *mem;
- mem = xmlMemMalloc (bytes);
-
- if (mem)
- n_blocks_outstanding += 1;
-
- return mem;
- }
-}
-
-void*
-test_realloc (void *memory,
- size_t bytes)
-{
- if (decrement_fail_alloc_counter ())
- {
- /* FAIL */
- return NULL;
- }
-
- if (bytes == 0) /* guarantee this is safe */
- {
- test_free (memory);
- return NULL;
- }
- else
- {
- void *mem;
- mem = xmlMemRealloc (memory, bytes);
-
- if (memory == NULL && mem != NULL)
- n_blocks_outstanding += 1;
-
- return mem;
- }
-}
-
-void
-test_free (void *memory)
-{
- if (memory) /* we guarantee it's safe to free (NULL) */
- {
- n_blocks_outstanding -= 1;
-
- xmlMemFree (memory);
- }
-}
-
-char*
-test_strdup (const char *str)
-{
- int len;
- char *copy;
-
- if (str == NULL)
- return NULL;
-
- len = strlen (str);
-
- copy = test_malloc (len + 1);
- if (copy == NULL)
- return NULL;
-
- memcpy (copy, str, len + 1);
-
- return copy;
-}
-
-static int
-run_failing_each_malloc (int n_mallocs,
- TestMemoryFunction func,
- void *data)
-{
- n_mallocs += 10; /* fudge factor to ensure reallocs etc. are covered */
-
- while (n_mallocs >= 0)
- {
- set_fail_alloc_counter (n_mallocs);
-
- if (!(* func) (data))
- return FALSE;
-
- n_mallocs -= 1;
- }
-
- set_fail_alloc_counter (_TEST_INT_MAX);
-
- return TRUE;
-}
-
-/**
- * test_oom_handling:
- * @func: function to call
- * @data: data to pass to function
- *
- * Tests how well the given function responds to out-of-memory
- * situations. Calls the function repeatedly, failing a different
- * call to malloc() each time. If the function ever returns #FALSE,
- * the test fails. The function should return #TRUE whenever something
- * valid (such as returning an error, or succeeding) occurs, and #FALSE
- * if it gets confused in some way.
- *
- * Returns #TRUE if the function never returns FALSE
- */
-int
-test_oom_handling (TestMemoryFunction func,
- void *data)
-{
- int approx_mallocs;
-
- /* Run once to see about how many mallocs are involved */
-
- set_fail_alloc_counter (_TEST_INT_MAX);
-
- if (!(* func) (data))
- return FALSE;
-
- approx_mallocs = _TEST_INT_MAX - get_fail_alloc_counter ();
-
- set_fail_alloc_failures (1);
- if (!run_failing_each_malloc (approx_mallocs, func, data))
- return FALSE;
-
- set_fail_alloc_failures (2);
- if (!run_failing_each_malloc (approx_mallocs, func, data))
- return FALSE;
-
- set_fail_alloc_failures (3);
- if (!run_failing_each_malloc (approx_mallocs, func, data))
- return FALSE;
-
- set_fail_alloc_counter (_TEST_INT_MAX);
-
- return TRUE;
-}
diff --git a/external/libxml2_android/jni/libxml2/testOOMlib.h b/external/libxml2_android/jni/libxml2/testOOMlib.h
deleted file mode 100644
index 751999da..00000000
--- a/external/libxml2_android/jni/libxml2/testOOMlib.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef TEST_OOM_LIB_H
-#define TEST_OOM_LIB_H
-
-#include <config.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-void* test_malloc (size_t bytes);
-void* test_realloc (void *memory,
- size_t bytes);
-void test_free (void *memory);
-char* test_strdup (const char *str);
-
-/* returns true on success */
-typedef int (* TestMemoryFunction) (void *data);
-
-/* returns true on success */
-int test_oom_handling (TestMemoryFunction func,
- void *data);
-
-/* get number of blocks leaked */
-int test_get_malloc_blocks_outstanding (void);
-
-#endif
diff --git a/external/libxml2_android/jni/libxml2/testReader.c b/external/libxml2_android/jni/libxml2/testReader.c
deleted file mode 100644
index 8f8e26d5..00000000
--- a/external/libxml2_android/jni/libxml2/testReader.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * testSAX.c : a small tester program for parsing using the SAX API.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-
-#ifdef LIBXML_READER_ENABLED
-#include <string.h>
-#include <stdarg.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-
-#include <libxml/xmlreader.h>
-
-static int debug = 0;
-static int dump = 0;
-static int noent = 0;
-static int count = 0;
-static int valid = 0;
-static int consumed = 0;
-
-static void usage(const char *progname) {
- printf("Usage : %s [options] XMLfiles ...\n", progname);
- printf("\tParse the XML files using the xmlTextReader API\n");
- printf("\t --count: count the number of attribute and elements\n");
- printf("\t --valid: validate the document\n");
- printf("\t --consumed: count the number of bytes consumed\n");
- exit(1);
-}
-static int elem, attrs;
-
-static void processNode(xmlTextReaderPtr reader) {
- int type;
-
- type = xmlTextReaderNodeType(reader);
- if (count) {
- if (type == 1) {
- elem++;
- attrs += xmlTextReaderAttributeCount(reader);
- }
- }
-}
-
-static void handleFile(const char *filename) {
- xmlTextReaderPtr reader;
- int ret;
-
- if (count) {
- elem = 0;
- attrs = 0;
- }
-
- reader = xmlNewTextReaderFilename(filename);
- if (reader != NULL) {
- if (valid)
- xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
-
- /*
- * Process all nodes in sequence
- */
- ret = xmlTextReaderRead(reader);
- while (ret == 1) {
- processNode(reader);
- ret = xmlTextReaderRead(reader);
- }
-
- /*
- * Done, cleanup and status
- */
- if (consumed)
- printf("%ld bytes consumed by parser\n", xmlTextReaderByteConsumed(reader));
- xmlFreeTextReader(reader);
- if (ret != 0) {
- printf("%s : failed to parse\n", filename);
- } else if (count)
- printf("%s : %d elements, %d attributes\n", filename, elem, attrs);
- } else {
- fprintf(stderr, "Unable to open %s\n", filename);
- }
-}
-
-int main(int argc, char **argv) {
- int i;
- int files = 0;
-
- if (argc <= 1) {
- usage(argv[0]);
- return(1);
- }
- LIBXML_TEST_VERSION
- for (i = 1; i < argc ; i++) {
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
- debug++;
- else if ((!strcmp(argv[i], "-dump")) || (!strcmp(argv[i], "--dump")))
- dump++;
- else if ((!strcmp(argv[i], "-count")) || (!strcmp(argv[i], "--count")))
- count++;
- else if ((!strcmp(argv[i], "-consumed")) || (!strcmp(argv[i], "--consumed")))
- consumed++;
- else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
- valid++;
- else if ((!strcmp(argv[i], "-noent")) ||
- (!strcmp(argv[i], "--noent")))
- noent++;
- }
- if (noent != 0) xmlSubstituteEntitiesDefault(1);
- for (i = 1; i < argc ; i++) {
- if (argv[i][0] != '-') {
- handleFile(argv[i]);
- files ++;
- }
- }
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(0);
-}
-#else
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : xmlReader parser support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_READER_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testRegexp.c b/external/libxml2_android/jni/libxml2/testRegexp.c
deleted file mode 100644
index 21dac945..00000000
--- a/external/libxml2_android/jni/libxml2/testRegexp.c
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * testRegexp.c: simple module for testing regular expressions
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-#include "libxml.h"
-#ifdef LIBXML_REGEXP_ENABLED
-#include <string.h>
-
-#include <libxml/tree.h>
-#include <libxml/xmlregexp.h>
-
-static int repeat = 0;
-static int debug = 0;
-
-static void testRegexp(xmlRegexpPtr comp, const char *value) {
- int ret;
-
- ret = xmlRegexpExec(comp, (const xmlChar *) value);
- if (ret == 1)
- printf("%s: Ok\n", value);
- else if (ret == 0)
- printf("%s: Fail\n", value);
- else
- printf("%s: Error: %d\n", value, ret);
- if (repeat) {
- int j;
- for (j = 0;j < 999999;j++)
- xmlRegexpExec(comp, (const xmlChar *) value);
- }
-}
-
-static void
-testRegexpFile(const char *filename) {
- xmlRegexpPtr comp = NULL;
- FILE *input;
- char expression[5000];
- int len;
-
- input = fopen(filename, "r");
- if (input == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot open %s for reading\n", filename);
- return;
- }
- while (fgets(expression, 4500, input) != NULL) {
- len = strlen(expression);
- len--;
- while ((len >= 0) &&
- ((expression[len] == '\n') || (expression[len] == '\t') ||
- (expression[len] == '\r') || (expression[len] == ' '))) len--;
- expression[len + 1] = 0;
- if (len >= 0) {
- if (expression[0] == '#')
- continue;
- if ((expression[0] == '=') && (expression[1] == '>')) {
- char *pattern = &expression[2];
-
- if (comp != NULL) {
- xmlRegFreeRegexp(comp);
- comp = NULL;
- }
- printf("Regexp: %s\n", pattern) ;
- comp = xmlRegexpCompile((const xmlChar *) pattern);
- if (comp == NULL) {
- printf(" failed to compile\n");
- break;
- }
- } else if (comp == NULL) {
- printf("Regexp: %s\n", expression) ;
- comp = xmlRegexpCompile((const xmlChar *) expression);
- if (comp == NULL) {
- printf(" failed to compile\n");
- break;
- }
- } else if (comp != NULL) {
- testRegexp(comp, expression);
- }
- }
- }
- fclose(input);
- if (comp != NULL)
- xmlRegFreeRegexp(comp);
-}
-
-#ifdef LIBXML_EXPR_ENABLED
-static void
-runFileTest(xmlExpCtxtPtr ctxt, const char *filename) {
- xmlExpNodePtr expr = NULL, sub;
- FILE *input;
- char expression[5000];
- int len;
-
- input = fopen(filename, "r");
- if (input == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot open %s for reading\n", filename);
- return;
- }
- while (fgets(expression, 4500, input) != NULL) {
- len = strlen(expression);
- len--;
- while ((len >= 0) &&
- ((expression[len] == '\n') || (expression[len] == '\t') ||
- (expression[len] == '\r') || (expression[len] == ' '))) len--;
- expression[len + 1] = 0;
- if (len >= 0) {
- if (expression[0] == '#')
- continue;
- if ((expression[0] == '=') && (expression[1] == '>')) {
- char *str = &expression[2];
-
- if (expr != NULL) {
- xmlExpFree(ctxt, expr);
- if (xmlExpCtxtNbNodes(ctxt) != 0)
- printf(" Parse/free of Expression leaked %d\n",
- xmlExpCtxtNbNodes(ctxt));
- expr = NULL;
- }
- printf("Expression: %s\n", str) ;
- expr = xmlExpParse(ctxt, str);
- if (expr == NULL) {
- printf(" parsing Failed\n");
- break;
- }
- } else if (expr != NULL) {
- int expect = -1;
- int nodes1, nodes2;
-
- if (expression[0] == '0')
- expect = 0;
- if (expression[0] == '1')
- expect = 1;
- printf("Subexp: %s", expression + 2) ;
- nodes1 = xmlExpCtxtNbNodes(ctxt);
- sub = xmlExpParse(ctxt, expression + 2);
- if (sub == NULL) {
- printf(" parsing Failed\n");
- break;
- } else {
- int ret;
-
- nodes2 = xmlExpCtxtNbNodes(ctxt);
- ret = xmlExpSubsume(ctxt, expr, sub);
-
- if ((expect == 1) && (ret == 1)) {
- printf(" => accept, Ok\n");
- } else if ((expect == 0) && (ret == 0)) {
- printf(" => reject, Ok\n");
- } else if ((expect == 1) && (ret == 0)) {
- printf(" => reject, Failed\n");
- } else if ((expect == 0) && (ret == 1)) {
- printf(" => accept, Failed\n");
- } else {
- printf(" => fail internally\n");
- }
- if (xmlExpCtxtNbNodes(ctxt) > nodes2) {
- printf(" Subsume leaked %d\n",
- xmlExpCtxtNbNodes(ctxt) - nodes2);
- nodes1 += xmlExpCtxtNbNodes(ctxt) - nodes2;
- }
- xmlExpFree(ctxt, sub);
- if (xmlExpCtxtNbNodes(ctxt) > nodes1) {
- printf(" Parse/free leaked %d\n",
- xmlExpCtxtNbNodes(ctxt) - nodes1);
- }
- }
-
- }
- }
- }
- if (expr != NULL) {
- xmlExpFree(ctxt, expr);
- if (xmlExpCtxtNbNodes(ctxt) != 0)
- printf(" Parse/free of Expression leaked %d\n",
- xmlExpCtxtNbNodes(ctxt));
- }
- fclose(input);
-}
-
-static void
-testReduce(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr, const char *tst) {
- xmlBufferPtr xmlExpBuf;
- xmlExpNodePtr sub, deriv;
- xmlExpBuf = xmlBufferCreate();
-
- sub = xmlExpParse(ctxt, tst);
- if (sub == NULL) {
- printf("Subset %s failed to parse\n", tst);
- return;
- }
- xmlExpDump(xmlExpBuf, sub);
- printf("Subset parsed as: %s\n",
- (const char *) xmlBufferContent(xmlExpBuf));
- deriv = xmlExpExpDerive(ctxt, expr, sub);
- if (deriv == NULL) {
- printf("Derivation led to an internal error, report this !\n");
- return;
- } else {
- xmlBufferEmpty(xmlExpBuf);
- xmlExpDump(xmlExpBuf, deriv);
- if (xmlExpIsNillable(deriv))
- printf("Resulting nillable derivation: %s\n",
- (const char *) xmlBufferContent(xmlExpBuf));
- else
- printf("Resulting derivation: %s\n",
- (const char *) xmlBufferContent(xmlExpBuf));
- xmlExpFree(ctxt, deriv);
- }
- xmlExpFree(ctxt, sub);
-}
-
-static void
-exprDebug(xmlExpCtxtPtr ctxt, xmlExpNodePtr expr) {
- xmlBufferPtr xmlExpBuf;
- xmlExpNodePtr deriv;
- const char *list[40];
- int ret;
-
- xmlExpBuf = xmlBufferCreate();
-
- if (expr == NULL) {
- printf("Failed to parse\n");
- return;
- }
- xmlExpDump(xmlExpBuf, expr);
- printf("Parsed as: %s\n", (const char *) xmlBufferContent(xmlExpBuf));
- printf("Max token input = %d\n", xmlExpMaxToken(expr));
- if (xmlExpIsNillable(expr) == 1)
- printf("Is nillable\n");
- ret = xmlExpGetLanguage(ctxt, expr, (const xmlChar **) &list[0], 40);
- if (ret < 0)
- printf("Failed to get list: %d\n", ret);
- else {
- int i;
-
- printf("Language has %d strings, testing string derivations\n", ret);
- for (i = 0;i < ret;i++) {
- deriv = xmlExpStringDerive(ctxt, expr, BAD_CAST list[i], -1);
- if (deriv == NULL) {
- printf(" %s -> derivation failed\n", list[i]);
- } else {
- xmlBufferEmpty(xmlExpBuf);
- xmlExpDump(xmlExpBuf, deriv);
- printf(" %s -> %s\n", list[i],
- (const char *) xmlBufferContent(xmlExpBuf));
- }
- xmlExpFree(ctxt, deriv);
- }
- }
- xmlBufferFree(xmlExpBuf);
-}
-#endif
-
-static void usage(const char *name) {
- fprintf(stderr, "Usage: %s [flags]\n", name);
- fprintf(stderr, "Testing tool for libxml2 string and pattern regexps\n");
- fprintf(stderr, " --debug: switch on debugging\n");
- fprintf(stderr, " --repeat: loop on the operation\n");
-#ifdef LIBXML_EXPR_ENABLED
- fprintf(stderr, " --expr: test xmlExp and not xmlRegexp\n");
-#endif
- fprintf(stderr, " --input filename: use the given filename for regexp\n");
- fprintf(stderr, " --input filename: use the given filename for exp\n");
-}
-
-int main(int argc, char **argv) {
- xmlRegexpPtr comp = NULL;
-#ifdef LIBXML_EXPR_ENABLED
- xmlExpNodePtr expr = NULL;
- int use_exp = 0;
- xmlExpCtxtPtr ctxt = NULL;
-#endif
- const char *pattern = NULL;
- char *filename = NULL;
- int i;
-
- xmlInitMemory();
-
- if (argc <= 1) {
- usage(argv[0]);
- return(1);
- }
- for (i = 1; i < argc ; i++) {
- if (!strcmp(argv[i], "-"))
- break;
-
- if (argv[i][0] != '-')
- continue;
- if (!strcmp(argv[i], "--"))
- break;
-
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug"))) {
- debug++;
- } else if ((!strcmp(argv[i], "-repeat")) ||
- (!strcmp(argv[i], "--repeat"))) {
- repeat++;
-#ifdef LIBXML_EXPR_ENABLED
- } else if ((!strcmp(argv[i], "-expr")) ||
- (!strcmp(argv[i], "--expr"))) {
- use_exp++;
-#endif
- } else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "-f")) ||
- (!strcmp(argv[i], "--input")))
- filename = argv[++i];
- else {
- fprintf(stderr, "Unknown option %s\n", argv[i]);
- usage(argv[0]);
- }
- }
-
-#ifdef LIBXML_EXPR_ENABLED
- if (use_exp)
- ctxt = xmlExpNewCtxt(0, NULL);
-#endif
-
- if (filename != NULL) {
-#ifdef LIBXML_EXPR_ENABLED
- if (use_exp)
- runFileTest(ctxt, filename);
- else
-#endif
- testRegexpFile(filename);
- } else {
- int data = 0;
-#ifdef LIBXML_EXPR_ENABLED
-
- if (use_exp) {
- for (i = 1; i < argc ; i++) {
- if (strcmp(argv[i], "--") == 0)
- data = 1;
- else if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0) ||
- (data == 1)) {
- if (pattern == NULL) {
- pattern = argv[i];
- printf("Testing expr %s:\n", pattern);
- expr = xmlExpParse(ctxt, pattern);
- if (expr == NULL) {
- printf(" failed to compile\n");
- break;
- }
- if (debug) {
- exprDebug(ctxt, expr);
- }
- } else {
- testReduce(ctxt, expr, argv[i]);
- }
- }
- }
- if (expr != NULL) {
- xmlExpFree(ctxt, expr);
- expr = NULL;
- }
- } else
-#endif
- {
- for (i = 1; i < argc ; i++) {
- if (strcmp(argv[i], "--") == 0)
- data = 1;
- else if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0) ||
- (data == 1)) {
- if (pattern == NULL) {
- pattern = argv[i];
- printf("Testing %s:\n", pattern);
- comp = xmlRegexpCompile((const xmlChar *) pattern);
- if (comp == NULL) {
- printf(" failed to compile\n");
- break;
- }
- if (debug)
- xmlRegexpPrint(stdout, comp);
- } else {
- testRegexp(comp, argv[i]);
- }
- }
- }
- if (comp != NULL)
- xmlRegFreeRegexp(comp);
- }
- }
-#ifdef LIBXML_EXPR_ENABLED
- if (ctxt != NULL) {
- printf("Ops: %d nodes, %d cons\n",
- xmlExpCtxtNbNodes(ctxt), xmlExpCtxtNbCons(ctxt));
- xmlExpFreeCtxt(ctxt);
- }
-#endif
- xmlCleanupParser();
- xmlMemoryDump();
- return(0);
-}
-
-#else
-#include <stdio.h>
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : Regexp support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_REGEXP_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testRelax.c b/external/libxml2_android/jni/libxml2/testRelax.c
deleted file mode 100644
index 8e94a7a8..00000000
--- a/external/libxml2_android/jni/libxml2/testRelax.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/*
- * testRelax.c : a small tester program for RelaxNG validation
- *
- * See Copyright for the status of this software.
- *
- * Daniel.Veillard@w3.org
- */
-
-#include "libxml.h"
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <libxml/xmlversion.h>
-#include <libxml/parser.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-/* seems needed for Solaris */
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void *) -1)
-#endif
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/debugXML.h>
-#include <libxml/relaxng.h>
-
-#ifdef LIBXML_DEBUG_ENABLED
-static int debug = 0;
-#endif
-static int noout = 0;
-static int tree = 0;
-#ifdef HAVE_MMAP
-static int memory = 0;
-#endif
-
-
-int main(int argc, char **argv) {
- int i;
- int files = 0;
- xmlRelaxNGPtr schema = NULL;
-
- for (i = 1; i < argc ; i++) {
-#ifdef LIBXML_DEBUG_ENABLED
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
- debug++;
- else
-#endif
-#ifdef HAVE_MMAP
- if ((!strcmp(argv[i], "-memory")) || (!strcmp(argv[i], "--memory"))) {
- memory++;
- } else
-#endif
- if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) {
- noout++;
- } else
- if ((!strcmp(argv[i], "-tree")) || (!strcmp(argv[i], "--tree"))) {
- tree++;
- }
- }
- xmlLineNumbersDefault(1);
- xmlSubstituteEntitiesDefault(1);
- for (i = 1; i < argc ; i++) {
- if (argv[i][0] != '-') {
- if (schema == NULL) {
- xmlRelaxNGParserCtxtPtr ctxt;
-
-#ifdef HAVE_MMAP
- if (memory) {
- int fd;
- struct stat info;
- const char *base;
- if (stat(argv[i], &info) < 0)
- break;
- if ((fd = open(argv[i], O_RDONLY)) < 0)
- break;
- base = mmap(NULL, info.st_size, PROT_READ,
- MAP_SHARED, fd, 0) ;
- if (base == (void *) MAP_FAILED)
- break;
-
- ctxt = xmlRelaxNGNewMemParserCtxt((char *)base,info.st_size);
-
- xmlRelaxNGSetParserErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) fprintf,
- (xmlRelaxNGValidityWarningFunc) fprintf,
- stderr);
- schema = xmlRelaxNGParse(ctxt);
- xmlRelaxNGFreeParserCtxt(ctxt);
- munmap((char *) base, info.st_size);
- } else
-#endif
- {
- ctxt = xmlRelaxNGNewParserCtxt(argv[i]);
- xmlRelaxNGSetParserErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) fprintf,
- (xmlRelaxNGValidityWarningFunc) fprintf,
- stderr);
- schema = xmlRelaxNGParse(ctxt);
- xmlRelaxNGFreeParserCtxt(ctxt);
- }
- if (schema == NULL) {
- printf("Relax-NG schema %s failed to compile\n", argv[i]);
- files = -1;
- break;
- }
-#ifdef LIBXML_OUTPUT_ENABLED
-#ifdef LIBXML_DEBUG_ENABLED
- if (debug)
- xmlRelaxNGDump(stdout, schema);
-#endif
- if (tree)
- xmlRelaxNGDumpTree(stdout, schema);
-#endif /* LIBXML_OUTPUT_ENABLED */
- } else {
- xmlDocPtr doc;
-
- doc = xmlReadFile(argv[i],NULL,0);
-
- if (doc == NULL) {
- fprintf(stderr, "Could not parse %s\n", argv[i]);
- } else {
- xmlRelaxNGValidCtxtPtr ctxt;
- int ret;
-
- ctxt = xmlRelaxNGNewValidCtxt(schema);
- xmlRelaxNGSetValidErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) fprintf,
- (xmlRelaxNGValidityWarningFunc) fprintf,
- stderr);
- ret = xmlRelaxNGValidateDoc(ctxt, doc);
- if (ret == 0) {
- printf("%s validates\n", argv[i]);
- } else if (ret > 0) {
- printf("%s fails to validate\n", argv[i]);
- } else {
- printf("%s validation generated an internal error\n",
- argv[i]);
- }
- xmlRelaxNGFreeValidCtxt(ctxt);
- xmlFreeDoc(doc);
- }
- }
- files ++;
- }
- }
- if (schema != NULL)
- xmlRelaxNGFree(schema);
- if (files == 0) {
- printf("Usage : %s [--debug] [--noout] schemas XMLfiles ...\n",
- argv[0]);
- printf("\tParse the HTML files and output the result of the parsing\n");
-#ifdef LIBXML_DEBUG_ENABLED
- printf("\t--debug : dump a debug tree of the in-memory document\n");
-#endif
- printf("\t--noout : do not print the result\n");
- printf("\t--tree : print the intermediate Relax-NG document tree\n");
-#ifdef HAVE_MMAP
- printf("\t--memory : test the schemas in memory parsing\n");
-#endif
- }
- xmlRelaxNGCleanupTypes();
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(0);
-}
-
-#else
-#include <stdio.h>
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : RelaxNG support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testSAX.c b/external/libxml2_android/jni/libxml2/testSAX.c
deleted file mode 100644
index 81c4b93d..00000000
--- a/external/libxml2_android/jni/libxml2/testSAX.c
+++ /dev/null
@@ -1,1198 +0,0 @@
-/*
- * testSAX.c : a small tester program for parsing using the SAX API.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_TIMEB_H
-#include <sys/timeb.h>
-#endif
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-
-#ifdef LIBXML_SAX1_ENABLED
-#include <string.h>
-#include <stdarg.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-
-#include <libxml/globals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h> /* only for xmlNewInputFromFile() */
-#include <libxml/tree.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlmemory.h>
-
-static int debug = 0;
-static int copy = 0;
-static int recovery = 0;
-static int push = 0;
-static int speed = 0;
-static int noent = 0;
-static int quiet = 0;
-static int nonull = 0;
-static int sax2 = 0;
-static int repeat = 0;
-static int callbacks = 0;
-static int timing = 0;
-
-/*
- * Timing routines.
- */
-/*
- * Internal timing routines to remove the necessity to have unix-specific
- * function calls
- */
-
-#ifndef HAVE_GETTIMEOFDAY
-#ifdef HAVE_SYS_TIMEB_H
-#ifdef HAVE_SYS_TIME_H
-#ifdef HAVE_FTIME
-
-static int
-my_gettimeofday(struct timeval *tvp, void *tzp)
-{
- struct timeb timebuffer;
-
- ftime(&timebuffer);
- if (tvp) {
- tvp->tv_sec = timebuffer.time;
- tvp->tv_usec = timebuffer.millitm * 1000L;
- }
- return (0);
-}
-#define HAVE_GETTIMEOFDAY 1
-#define gettimeofday my_gettimeofday
-
-#endif /* HAVE_FTIME */
-#endif /* HAVE_SYS_TIME_H */
-#endif /* HAVE_SYS_TIMEB_H */
-#endif /* !HAVE_GETTIMEOFDAY */
-
-#if defined(HAVE_GETTIMEOFDAY)
-static struct timeval begin, end;
-
-/*
- * startTimer: call where you want to start timing
- */
-static void
-startTimer(void)
-{
- gettimeofday(&begin, NULL);
-}
-
-/*
- * endTimer: call where you want to stop timing and to print out a
- * message about the timing performed; format is a printf
- * type argument
- */
-static void XMLCDECL
-endTimer(const char *fmt, ...)
-{
- long msec;
- va_list ap;
-
- gettimeofday(&end, NULL);
- msec = end.tv_sec - begin.tv_sec;
- msec *= 1000;
- msec += (end.tv_usec - begin.tv_usec) / 1000;
-
-#ifndef HAVE_STDARG_H
-#error "endTimer required stdarg functions"
-#endif
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
-
- fprintf(stderr, " took %ld ms\n", msec);
-}
-#elif defined(HAVE_TIME_H)
-/*
- * No gettimeofday function, so we have to make do with calling clock.
- * This is obviously less accurate, but there's little we can do about
- * that.
- */
-#ifndef CLOCKS_PER_SEC
-#define CLOCKS_PER_SEC 100
-#endif
-
-static clock_t begin, end;
-static void
-startTimer(void)
-{
- begin = clock();
-}
-static void XMLCDECL
-endTimer(const char *fmt, ...)
-{
- long msec;
- va_list ap;
-
- end = clock();
- msec = ((end - begin) * 1000) / CLOCKS_PER_SEC;
-
-#ifndef HAVE_STDARG_H
-#error "endTimer required stdarg functions"
-#endif
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
- fprintf(stderr, " took %ld ms\n", msec);
-}
-#else
-
-/*
- * We don't have a gettimeofday or time.h, so we just don't do timing
- */
-static void
-startTimer(void)
-{
- /*
- * Do nothing
- */
-}
-static void XMLCDECL
-endTimer(char *format, ...)
-{
- /*
- * We cannot do anything because we don't have a timing function
- */
-#ifdef HAVE_STDARG_H
- va_start(ap, format);
- vfprintf(stderr, format, ap);
- va_end(ap);
- fprintf(stderr, " was not timed\n", msec);
-#else
- /* We don't have gettimeofday, time or stdarg.h, what crazy world is
- * this ?!
- */
-#endif
-}
-#endif
-
-/*
- * empty SAX block
- */
-static xmlSAXHandler emptySAXHandlerStruct = {
- NULL, /* internalSubset */
- NULL, /* isStandalone */
- NULL, /* hasInternalSubset */
- NULL, /* hasExternalSubset */
- NULL, /* resolveEntity */
- NULL, /* getEntity */
- NULL, /* entityDecl */
- NULL, /* notationDecl */
- NULL, /* attributeDecl */
- NULL, /* elementDecl */
- NULL, /* unparsedEntityDecl */
- NULL, /* setDocumentLocator */
- NULL, /* startDocument */
- NULL, /* endDocument */
- NULL, /* startElement */
- NULL, /* endElement */
- NULL, /* reference */
- NULL, /* characters */
- NULL, /* ignorableWhitespace */
- NULL, /* processingInstruction */
- NULL, /* comment */
- NULL, /* xmlParserWarning */
- NULL, /* xmlParserError */
- NULL, /* xmlParserError */
- NULL, /* getParameterEntity */
- NULL, /* cdataBlock; */
- NULL, /* externalSubset; */
- 1,
- NULL,
- NULL, /* startElementNs */
- NULL, /* endElementNs */
- NULL /* xmlStructuredErrorFunc */
-};
-
-static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
-extern xmlSAXHandlerPtr debugSAXHandler;
-
-/************************************************************************
- * *
- * Debug Handlers *
- * *
- ************************************************************************/
-
-/**
- * isStandaloneDebug:
- * @ctxt: An XML parser context
- *
- * Is this document tagged standalone ?
- *
- * Returns 1 if true
- */
-static int
-isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return(0);
- fprintf(stdout, "SAX.isStandalone()\n");
- return(0);
-}
-
-/**
- * hasInternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- *
- * Returns 1 if true
- */
-static int
-hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return(0);
- fprintf(stdout, "SAX.hasInternalSubset()\n");
- return(0);
-}
-
-/**
- * hasExternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- *
- * Returns 1 if true
- */
-static int
-hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return(0);
- fprintf(stdout, "SAX.hasExternalSubset()\n");
- return(0);
-}
-
-/**
- * internalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- */
-static void
-internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.internalSubset(%s,", name);
- if (ExternalID == NULL)
- fprintf(stdout, " ,");
- else
- fprintf(stdout, " %s,", ExternalID);
- if (SystemID == NULL)
- fprintf(stdout, " )\n");
- else
- fprintf(stdout, " %s)\n", SystemID);
-}
-
-/**
- * externalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- */
-static void
-externalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.externalSubset(%s,", name);
- if (ExternalID == NULL)
- fprintf(stdout, " ,");
- else
- fprintf(stdout, " %s,", ExternalID);
- if (SystemID == NULL)
- fprintf(stdout, " )\n");
- else
- fprintf(stdout, " %s)\n", SystemID);
-}
-
-/**
- * resolveEntityDebug:
- * @ctxt: An XML parser context
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * Special entity resolver, better left to the parser, it has
- * more context than the application layer.
- * The default behaviour is to NOT resolve the entities, in that case
- * the ENTITY_REF nodes are built in the structure (and the parameter
- * values).
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlParserInputPtr
-resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
-{
- callbacks++;
- if (quiet)
- return(NULL);
- /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
-
-
- fprintf(stdout, "SAX.resolveEntity(");
- if (publicId != NULL)
- fprintf(stdout, "%s", (char *)publicId);
- else
- fprintf(stdout, " ");
- if (systemId != NULL)
- fprintf(stdout, ", %s)\n", (char *)systemId);
- else
- fprintf(stdout, ", )\n");
-/*********
- if (systemId != NULL) {
- return(xmlNewInputFromFile(ctxt, (char *) systemId));
- }
- *********/
- return(NULL);
-}
-
-/**
- * getEntityDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get an entity by name
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlEntityPtr
-getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (quiet)
- return(NULL);
- fprintf(stdout, "SAX.getEntity(%s)\n", name);
- return(NULL);
-}
-
-/**
- * getParameterEntityDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get a parameter entity by name
- *
- * Returns the xmlParserInputPtr
- */
-static xmlEntityPtr
-getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (quiet)
- return(NULL);
- fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
- return(NULL);
-}
-
-
-/**
- * entityDeclDebug:
- * @ctxt: An XML parser context
- * @name: the entity name
- * @type: the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed
- */
-static void
-entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
- const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
-{
-const xmlChar *nullstr = BAD_CAST "(null)";
- /* not all libraries handle printing null pointers nicely */
- if (publicId == NULL)
- publicId = nullstr;
- if (systemId == NULL)
- systemId = nullstr;
- if (content == NULL)
- content = (xmlChar *)nullstr;
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
- name, type, publicId, systemId, content);
-}
-
-/**
- * attributeDeclDebug:
- * @ctxt: An XML parser context
- * @name: the attribute name
- * @type: the attribute type
- *
- * An attribute definition has been parsed
- */
-static void
-attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem,
- const xmlChar * name, int type, int def,
- const xmlChar * defaultValue, xmlEnumerationPtr tree)
-{
- callbacks++;
- if (quiet)
- return;
- if (defaultValue == NULL)
- fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n",
- elem, name, type, def);
- else
- fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
- elem, name, type, def, defaultValue);
- xmlFreeEnumeration(tree);
-}
-
-/**
- * elementDeclDebug:
- * @ctxt: An XML parser context
- * @name: the element name
- * @type: the element type
- * @content: the element value (without processing).
- *
- * An element definition has been parsed
- */
-static void
-elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
- xmlElementContentPtr content ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
- name, type);
-}
-
-/**
- * notationDeclDebug:
- * @ctxt: An XML parser context
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- */
-static void
-notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
- (char *) name, (char *) publicId, (char *) systemId);
-}
-
-/**
- * unparsedEntityDeclDebug:
- * @ctxt: An XML parser context
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed
- */
-static void
-unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId,
- const xmlChar *notationName)
-{
-const xmlChar *nullstr = BAD_CAST "(null)";
-
- if (publicId == NULL)
- publicId = nullstr;
- if (systemId == NULL)
- systemId = nullstr;
- if (notationName == NULL)
- notationName = nullstr;
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
- (char *) name, (char *) publicId, (char *) systemId,
- (char *) notationName);
-}
-
-/**
- * setDocumentLocatorDebug:
- * @ctxt: An XML parser context
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
- * Everything is available on the context, so this is useless in our case.
- */
-static void
-setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.setDocumentLocator()\n");
-}
-
-/**
- * startDocumentDebug:
- * @ctxt: An XML parser context
- *
- * called when the document start being processed.
- */
-static void
-startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.startDocument()\n");
-}
-
-/**
- * endDocumentDebug:
- * @ctxt: An XML parser context
- *
- * called when the document end has been detected.
- */
-static void
-endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.endDocument()\n");
-}
-
-/**
- * startElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
-{
- int i;
-
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.startElement(%s", (char *) name);
- if (atts != NULL) {
- for (i = 0;(atts[i] != NULL);i++) {
- fprintf(stdout, ", %s='", atts[i++]);
- if (atts[i] != NULL)
- fprintf(stdout, "%s'", atts[i]);
- }
- }
- fprintf(stdout, ")\n");
-}
-
-/**
- * endElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
-}
-
-/**
- * charactersDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- * Question: how much at a time ???
- */
-static void
-charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- char output[40];
- int i;
-
- callbacks++;
- if (quiet)
- return;
- for (i = 0;(i<len) && (i < 30);i++)
- output[i] = ch[i];
- output[i] = 0;
-
- fprintf(stdout, "SAX.characters(%s, %d)\n", output, len);
-}
-
-/**
- * referenceDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * called when an entity reference is detected.
- */
-static void
-referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.reference(%s)\n", name);
-}
-
-/**
- * ignorableWhitespaceDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @start: the first char in the string
- * @len: the number of xmlChar
- *
- * receiving some ignorable whitespaces from the parser.
- * Question: how much at a time ???
- */
-static void
-ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- char output[40];
- int i;
-
- callbacks++;
- if (quiet)
- return;
- for (i = 0;(i<len) && (i < 30);i++)
- output[i] = ch[i];
- output[i] = 0;
- fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", output, len);
-}
-
-/**
- * processingInstructionDebug:
- * @ctxt: An XML parser context
- * @target: the target name
- * @data: the PI data's
- * @len: the number of xmlChar
- *
- * A processing instruction has been parsed.
- */
-static void
-processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
- const xmlChar *data)
-{
- callbacks++;
- if (quiet)
- return;
- if (data != NULL)
- fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
- (char *) target, (char *) data);
- else
- fprintf(stdout, "SAX.processingInstruction(%s, NULL)\n",
- (char *) target);
-}
-
-/**
- * cdataBlockDebug:
- * @ctx: the user data (XML parser context)
- * @value: The pcdata content
- * @len: the block length
- *
- * called when a pcdata block has been parsed
- */
-static void
-cdataBlockDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.pcdata(%.20s, %d)\n",
- (char *) value, len);
-}
-
-/**
- * commentDebug:
- * @ctxt: An XML parser context
- * @value: the comment content
- *
- * A comment has been parsed.
- */
-static void
-commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.comment(%s)\n", value);
-}
-
-/**
- * warningDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a warning messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (quiet)
- return;
- va_start(args, msg);
- fprintf(stdout, "SAX.warning: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-/**
- * errorDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a error messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (quiet)
- return;
- va_start(args, msg);
- fprintf(stdout, "SAX.error: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-/**
- * fatalErrorDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a fatalError messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (quiet)
- return;
- va_start(args, msg);
- fprintf(stdout, "SAX.fatalError: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-static xmlSAXHandler debugSAXHandlerStruct = {
- internalSubsetDebug,
- isStandaloneDebug,
- hasInternalSubsetDebug,
- hasExternalSubsetDebug,
- resolveEntityDebug,
- getEntityDebug,
- entityDeclDebug,
- notationDeclDebug,
- attributeDeclDebug,
- elementDeclDebug,
- unparsedEntityDeclDebug,
- setDocumentLocatorDebug,
- startDocumentDebug,
- endDocumentDebug,
- startElementDebug,
- endElementDebug,
- referenceDebug,
- charactersDebug,
- ignorableWhitespaceDebug,
- processingInstructionDebug,
- commentDebug,
- warningDebug,
- errorDebug,
- fatalErrorDebug,
- getParameterEntityDebug,
- cdataBlockDebug,
- externalSubsetDebug,
- 1,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
-
-/*
- * SAX2 specific callbacks
- */
-/**
- * startElementNsDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI,
- int nb_namespaces,
- const xmlChar **namespaces,
- int nb_attributes,
- int nb_defaulted,
- const xmlChar **attributes)
-{
- int i;
-
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.startElementNs(%s", (char *) localname);
- if (prefix == NULL)
- fprintf(stdout, ", NULL");
- else
- fprintf(stdout, ", %s", (char *) prefix);
- if (URI == NULL)
- fprintf(stdout, ", NULL");
- else
- fprintf(stdout, ", '%s'", (char *) URI);
- fprintf(stdout, ", %d", nb_namespaces);
-
- if (namespaces != NULL) {
- for (i = 0;i < nb_namespaces * 2;i++) {
- fprintf(stdout, ", xmlns");
- if (namespaces[i] != NULL)
- fprintf(stdout, ":%s", namespaces[i]);
- i++;
- fprintf(stdout, "='%s'", namespaces[i]);
- }
- }
- fprintf(stdout, ", %d, %d", nb_attributes, nb_defaulted);
- if (attributes != NULL) {
- for (i = 0;i < nb_attributes * 5;i += 5) {
- if (attributes[i + 1] != NULL)
- fprintf(stdout, ", %s:%s='", attributes[i + 1], attributes[i]);
- else
- fprintf(stdout, ", %s='", attributes[i]);
- fprintf(stdout, "%.4s...', %d", attributes[i + 3],
- (int)(attributes[i + 4] - attributes[i + 3]));
- }
- }
- fprintf(stdout, ")\n");
-}
-
-/**
- * endElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI)
-{
- callbacks++;
- if (quiet)
- return;
- fprintf(stdout, "SAX.endElementNs(%s", (char *) localname);
- if (prefix == NULL)
- fprintf(stdout, ", NULL");
- else
- fprintf(stdout, ", %s", (char *) prefix);
- if (URI == NULL)
- fprintf(stdout, ", NULL)\n");
- else
- fprintf(stdout, ", '%s')\n", (char *) URI);
-}
-
-static xmlSAXHandler debugSAX2HandlerStruct = {
- internalSubsetDebug,
- isStandaloneDebug,
- hasInternalSubsetDebug,
- hasExternalSubsetDebug,
- resolveEntityDebug,
- getEntityDebug,
- entityDeclDebug,
- notationDeclDebug,
- attributeDeclDebug,
- elementDeclDebug,
- unparsedEntityDeclDebug,
- setDocumentLocatorDebug,
- startDocumentDebug,
- endDocumentDebug,
- NULL,
- NULL,
- referenceDebug,
- charactersDebug,
- ignorableWhitespaceDebug,
- processingInstructionDebug,
- commentDebug,
- warningDebug,
- errorDebug,
- fatalErrorDebug,
- getParameterEntityDebug,
- cdataBlockDebug,
- externalSubsetDebug,
- XML_SAX2_MAGIC,
- NULL,
- startElementNsDebug,
- endElementNsDebug,
- NULL
-};
-
-static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
-
-/************************************************************************
- * *
- * Debug *
- * *
- ************************************************************************/
-
-static void
-parseAndPrintFile(char *filename) {
- int res;
-
-#ifdef LIBXML_PUSH_ENABLED
- if (push) {
- FILE *f;
-
- if ((!quiet) && (!nonull)) {
- /*
- * Empty callbacks for checking
- */
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- f = fopen(filename, "rb");
-#else
- f = fopen(filename, "r");
-#endif
- if (f != NULL) {
- int ret;
- char chars[10];
- xmlParserCtxtPtr ctxt;
-
- ret = fread(chars, 1, 4, f);
- if (ret > 0) {
- ctxt = xmlCreatePushParserCtxt(emptySAXHandler, NULL,
- chars, ret, filename);
- while ((ret = fread(chars, 1, 3, f)) > 0) {
- xmlParseChunk(ctxt, chars, ret, 0);
- }
- xmlParseChunk(ctxt, chars, 0, 1);
- xmlFreeParserCtxt(ctxt);
- }
- fclose(f);
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot read file %s\n", filename);
- }
- }
- /*
- * Debug callback
- */
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- f = fopen(filename, "rb");
-#else
- f = fopen(filename, "r");
-#endif
- if (f != NULL) {
- int ret;
- char chars[10];
- xmlParserCtxtPtr ctxt;
-
- ret = fread(chars, 1, 4, f);
- if (ret > 0) {
- if (sax2)
- ctxt = xmlCreatePushParserCtxt(debugSAX2Handler, NULL,
- chars, ret, filename);
- else
- ctxt = xmlCreatePushParserCtxt(debugSAXHandler, NULL,
- chars, ret, filename);
- while ((ret = fread(chars, 1, 3, f)) > 0) {
- xmlParseChunk(ctxt, chars, ret, 0);
- }
- ret = xmlParseChunk(ctxt, chars, 0, 1);
- xmlFreeParserCtxt(ctxt);
- if (ret != 0) {
- fprintf(stdout,
- "xmlSAXUserParseFile returned error %d\n", ret);
- }
- }
- fclose(f);
- }
- } else {
-#endif /* LIBXML_PUSH_ENABLED */
- if (!speed) {
- /*
- * Empty callbacks for checking
- */
- if ((!quiet) && (!nonull)) {
- res = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
- if (res != 0) {
- fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
- }
- }
-
- /*
- * Debug callback
- */
- callbacks = 0;
- if (repeat) {
- int i;
- for (i = 0;i < 99;i++) {
- if (sax2)
- res = xmlSAXUserParseFile(debugSAX2Handler, NULL,
- filename);
- else
- res = xmlSAXUserParseFile(debugSAXHandler, NULL,
- filename);
- }
- }
- if (sax2)
- res = xmlSAXUserParseFile(debugSAX2Handler, NULL, filename);
- else
- res = xmlSAXUserParseFile(debugSAXHandler, NULL, filename);
- if (res != 0) {
- fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
- }
- if (quiet)
- fprintf(stdout, "%d callbacks generated\n", callbacks);
- } else {
- /*
- * test 100x the SAX parse
- */
- int i;
-
- for (i = 0; i<100;i++)
- res = xmlSAXUserParseFile(emptySAXHandler, NULL, filename);
- if (res != 0) {
- fprintf(stdout, "xmlSAXUserParseFile returned error %d\n", res);
- }
- }
-#ifdef LIBXML_PUSH_ENABLED
- }
-#endif
-}
-
-
-int main(int argc, char **argv) {
- int i;
- int files = 0;
-
- LIBXML_TEST_VERSION /* be safe, plus calls xmlInitParser */
-
- for (i = 1; i < argc ; i++) {
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
- debug++;
- else if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
- copy++;
- else if ((!strcmp(argv[i], "-recover")) ||
- (!strcmp(argv[i], "--recover")))
- recovery++;
- else if ((!strcmp(argv[i], "-push")) ||
- (!strcmp(argv[i], "--push")))
-#ifdef LIBXML_PUSH_ENABLED
- push++;
-#else
- fprintf(stderr,"'push' not enabled in library - ignoring\n");
-#endif /* LIBXML_PUSH_ENABLED */
- else if ((!strcmp(argv[i], "-speed")) ||
- (!strcmp(argv[i], "--speed")))
- speed++;
- else if ((!strcmp(argv[i], "-timing")) ||
- (!strcmp(argv[i], "--timing"))) {
- nonull++;
- timing++;
- quiet++;
- } else if ((!strcmp(argv[i], "-repeat")) ||
- (!strcmp(argv[i], "--repeat"))) {
- repeat++;
- quiet++;
- } else if ((!strcmp(argv[i], "-noent")) ||
- (!strcmp(argv[i], "--noent")))
- noent++;
- else if ((!strcmp(argv[i], "-quiet")) ||
- (!strcmp(argv[i], "--quiet")))
- quiet++;
- else if ((!strcmp(argv[i], "-sax2")) ||
- (!strcmp(argv[i], "--sax2")))
- sax2++;
- else if ((!strcmp(argv[i], "-nonull")) ||
- (!strcmp(argv[i], "--nonull")))
- nonull++;
- }
- if (noent != 0) xmlSubstituteEntitiesDefault(1);
- for (i = 1; i < argc ; i++) {
- if (argv[i][0] != '-') {
- if (timing) {
- startTimer();
- }
- parseAndPrintFile(argv[i]);
- if (timing) {
- endTimer("Parsing");
- }
- files ++;
- }
- }
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(0);
-}
-#else
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : SAX1 parsing support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_SAX1_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testSchemas.c b/external/libxml2_android/jni/libxml2/testSchemas.c
deleted file mode 100644
index b98e6313..00000000
--- a/external/libxml2_android/jni/libxml2/testSchemas.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * testSchemas.c : a small tester program for Schema validation
- *
- * See Copyright for the status of this software.
- *
- * Daniel.Veillard@w3.org
- */
-
-#include "libxml.h"
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <libxml/xmlversion.h>
-#include <libxml/parser.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <stdarg.h>
-
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-/* seems needed for Solaris */
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void *) -1)
-#endif
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlschemas.h>
-#include <libxml/xmlschemastypes.h>
-
-#ifdef LIBXML_DEBUG_ENABLED
-static int debug = 0;
-#endif
-static int noout = 0;
-#ifdef HAVE_MMAP
-static int memory = 0;
-#endif
-
-
-int main(int argc, char **argv) {
- int i;
- int files = 0;
- xmlSchemaPtr schema = NULL;
-
- for (i = 1; i < argc ; i++) {
-#ifdef LIBXML_DEBUG_ENABLED
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
- debug++;
- else
-#endif
-#ifdef HAVE_MMAP
- if ((!strcmp(argv[i], "-memory")) || (!strcmp(argv[i], "--memory"))) {
- memory++;
- } else
-#endif
- if ((!strcmp(argv[i], "-noout")) || (!strcmp(argv[i], "--noout"))) {
- noout++;
- }
- }
- xmlLineNumbersDefault(1);
- for (i = 1; i < argc ; i++) {
- if (argv[i][0] != '-') {
- if (schema == NULL) {
- xmlSchemaParserCtxtPtr ctxt;
-
-#ifdef HAVE_MMAP
- if (memory) {
- int fd;
- struct stat info;
- const char *base;
- if (stat(argv[i], &info) < 0)
- break;
- if ((fd = open(argv[i], O_RDONLY)) < 0)
- break;
- base = mmap(NULL, info.st_size, PROT_READ,
- MAP_SHARED, fd, 0) ;
- if (base == (void *) MAP_FAILED)
- break;
-
- ctxt = xmlSchemaNewMemParserCtxt((char *)base,info.st_size);
-
- xmlSchemaSetParserErrors(ctxt,
- (xmlSchemaValidityErrorFunc) fprintf,
- (xmlSchemaValidityWarningFunc) fprintf,
- stderr);
- schema = xmlSchemaParse(ctxt);
- xmlSchemaFreeParserCtxt(ctxt);
- munmap((char *) base, info.st_size);
- } else
-#endif
- {
- ctxt = xmlSchemaNewParserCtxt(argv[i]);
- xmlSchemaSetParserErrors(ctxt,
- (xmlSchemaValidityErrorFunc) fprintf,
- (xmlSchemaValidityWarningFunc) fprintf,
- stderr);
- schema = xmlSchemaParse(ctxt);
- xmlSchemaFreeParserCtxt(ctxt);
- }
-#ifdef LIBXML_OUTPUT_ENABLED
-#ifdef LIBXML_DEBUG_ENABLED
- if (debug)
- xmlSchemaDump(stdout, schema);
-#endif
-#endif /* LIBXML_OUTPUT_ENABLED */
- if (schema == NULL)
- goto failed_schemas;
- } else {
- xmlDocPtr doc;
-
- doc = xmlReadFile(argv[i],NULL,0);
-
- if (doc == NULL) {
- fprintf(stderr, "Could not parse %s\n", argv[i]);
- } else {
- xmlSchemaValidCtxtPtr ctxt;
- int ret;
-
- ctxt = xmlSchemaNewValidCtxt(schema);
- xmlSchemaSetValidErrors(ctxt,
- (xmlSchemaValidityErrorFunc) fprintf,
- (xmlSchemaValidityWarningFunc) fprintf,
- stderr);
- ret = xmlSchemaValidateDoc(ctxt, doc);
- if (ret == 0) {
- printf("%s validates\n", argv[i]);
- } else if (ret > 0) {
- printf("%s fails to validate\n", argv[i]);
- } else {
- printf("%s validation generated an internal error\n",
- argv[i]);
- }
- xmlSchemaFreeValidCtxt(ctxt);
- xmlFreeDoc(doc);
- }
- }
- files ++;
- }
- }
- if (schema != NULL)
- xmlSchemaFree(schema);
- if (files == 0) {
- printf("Usage : %s [--debug] [--noout] schemas XMLfiles ...\n",
- argv[0]);
- printf("\tParse the HTML files and output the result of the parsing\n");
-#ifdef LIBXML_DEBUG_ENABLED
- printf("\t--debug : dump a debug tree of the in-memory document\n");
-#endif
- printf("\t--noout : do not print the result\n");
-#ifdef HAVE_MMAP
- printf("\t--memory : test the schemas in memory parsing\n");
-#endif
- }
-failed_schemas:
- xmlSchemaCleanupTypes();
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(0);
-}
-
-#else
-#include <stdio.h>
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : Schemas support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testThreads.c b/external/libxml2_android/jni/libxml2/testThreads.c
deleted file mode 100644
index bff53912..00000000
--- a/external/libxml2_android/jni/libxml2/testThreads.c
+++ /dev/null
@@ -1,200 +0,0 @@
-#include "libxml.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_SAX1_ENABLED)
-#include <libxml/globals.h>
-#include <libxml/threads.h>
-#include <libxml/parser.h>
-#include <libxml/catalog.h>
-#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
-#elif defined HAVE_BEOS_THREADS
-#include <OS.h>
-#endif
-#include <string.h>
-#if !defined(_MSC_VER)
-#include <unistd.h>
-#endif
-#include <assert.h>
-
-#define MAX_ARGC 20
-#ifdef HAVE_PTHREAD_H
-static pthread_t tid[MAX_ARGC];
-#elif defined HAVE_BEOS_THREADS
-static thread_id tid[MAX_ARGC];
-#endif
-
-static const char *catalog = "test/threads/complex.xml";
-static const char *testfiles[] = {
- "test/threads/abc.xml",
- "test/threads/acb.xml",
- "test/threads/bac.xml",
- "test/threads/bca.xml",
- "test/threads/cab.xml",
- "test/threads/cba.xml",
- "test/threads/invalid.xml",
-};
-
-static const char *Okay = "OK";
-static const char *Failed = "Failed";
-
-#ifndef xmlDoValidityCheckingDefaultValue
-#error xmlDoValidityCheckingDefaultValue is not a macro
-#endif
-#ifndef xmlGenericErrorContext
-#error xmlGenericErrorContext is not a macro
-#endif
-
-static void *
-thread_specific_data(void *private_data)
-{
- xmlDocPtr myDoc;
- const char *filename = (const char *) private_data;
- int okay = 1;
-
- if (!strcmp(filename, "test/threads/invalid.xml")) {
- xmlDoValidityCheckingDefaultValue = 0;
- xmlGenericErrorContext = stdout;
- } else {
- xmlDoValidityCheckingDefaultValue = 1;
- xmlGenericErrorContext = stderr;
- }
- myDoc = xmlParseFile(filename);
- if (myDoc) {
- xmlFreeDoc(myDoc);
- } else {
- printf("parse failed\n");
- okay = 0;
- }
- if (!strcmp(filename, "test/threads/invalid.xml")) {
- if (xmlDoValidityCheckingDefaultValue != 0) {
- printf("ValidityCheckingDefaultValue override failed\n");
- okay = 0;
- }
- if (xmlGenericErrorContext != stdout) {
- printf("xmlGenericErrorContext override failed\n");
- okay = 0;
- }
- } else {
- if (xmlDoValidityCheckingDefaultValue != 1) {
- printf("ValidityCheckingDefaultValue override failed\n");
- okay = 0;
- }
- if (xmlGenericErrorContext != stderr) {
- printf("xmlGenericErrorContext override failed\n");
- okay = 0;
- }
- }
- if (okay == 0)
- return((void *) Failed);
- return ((void *) Okay);
-}
-
-#ifdef HAVE_PTHREAD_H
-int
-main(void)
-{
- unsigned int i, repeat;
- unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
- void *results[MAX_ARGC];
- int ret;
-
- xmlInitParser();
- for (repeat = 0;repeat < 500;repeat++) {
- xmlLoadCatalog(catalog);
-
- memset(results, 0, sizeof(*results)*num_threads);
- memset(tid, 0xff, sizeof(*tid)*num_threads);
-
- for (i = 0; i < num_threads; i++) {
- ret = pthread_create(&tid[i], NULL, thread_specific_data,
- (void *) testfiles[i]);
- if (ret != 0) {
- perror("pthread_create");
- exit(1);
- }
- }
- for (i = 0; i < num_threads; i++) {
- ret = pthread_join(tid[i], &results[i]);
- if (ret != 0) {
- perror("pthread_join");
- exit(1);
- }
- }
-
- xmlCatalogCleanup();
- for (i = 0; i < num_threads; i++)
- if (results[i] != (void *) Okay)
- printf("Thread %d handling %s failed\n", i, testfiles[i]);
- }
- xmlCleanupParser();
- xmlMemoryDump();
- return (0);
-}
-#elif defined HAVE_BEOS_THREADS
-int
-main(void)
-{
- unsigned int i, repeat;
- unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
- void *results[MAX_ARGC];
- status_t ret;
-
- xmlInitParser();
- printf("Parser initialized\n");
- for (repeat = 0;repeat < 500;repeat++) {
- printf("repeat: %d\n",repeat);
- xmlLoadCatalog(catalog);
- printf("loaded catalog: %s\n", catalog);
- for (i = 0; i < num_threads; i++) {
- results[i] = NULL;
- tid[i] = (thread_id) -1;
- }
- printf("cleaned threads\n");
- for (i = 0; i < num_threads; i++) {
- tid[i] = spawn_thread(thread_specific_data, "xmlTestThread", B_NORMAL_PRIORITY, (void *) testfiles[i]);
- if (tid[i] < B_OK) {
- perror("beos_thread_create");
- exit(1);
- }
- printf("beos_thread_create %d -> %d\n", i, tid[i]);
- }
- for (i = 0; i < num_threads; i++) {
- ret = wait_for_thread(tid[i], &results[i]);
- printf("beos_thread_wait %d -> %d\n", i, ret);
- if (ret != B_OK) {
- perror("beos_thread_wait");
- exit(1);
- }
- }
-
- xmlCatalogCleanup();
- ret = B_OK;
- for (i = 0; i < num_threads; i++)
- if (results[i] != (void *) Okay) {
- printf("Thread %d handling %s failed\n", i, testfiles[i]);
- ret = B_ERROR;
- }
- }
- xmlCleanupParser();
- xmlMemoryDump();
-
- if (ret == B_OK)
- printf("testThread : BeOS : SUCCESS!\n");
- else
- printf("testThread : BeOS : FAILED!\n");
-
- return (0);
-}
-#endif /* pthreads or BeOS threads */
-
-#else /* !LIBXML_THREADS_ENABLED */
-int
-main(void)
-{
- fprintf(stderr, "libxml was not compiled with thread or catalog support\n");
- return (0);
-}
-#endif
diff --git a/external/libxml2_android/jni/libxml2/testThreadsWin32.c b/external/libxml2_android/jni/libxml2/testThreadsWin32.c
deleted file mode 100644
index 3d1a5ba2..00000000
--- a/external/libxml2_android/jni/libxml2/testThreadsWin32.c
+++ /dev/null
@@ -1,150 +0,0 @@
-#include "libxml.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-#if defined(LIBXML_THREAD_ENABLED) && defined(LIBXML_CATALOG_ENABLED)
-#include <libxml/globals.h>
-#include <libxml/threads.h>
-#include <libxml/parser.h>
-#include <libxml/catalog.h>
-#include <windows.h>
-#include <string.h>
-#include <assert.h>
-
-#define MAX_ARGC 20
-#define TEST_REPEAT_COUNT 500
-
-static HANDLE tid[MAX_ARGC];
-
-static const char *catalog = "test/threads/complex.xml";
-static char *testfiles[] = {
- "test/threads/abc.xml",
- "test/threads/acb.xml",
- "test/threads/bac.xml",
- "test/threads/bca.xml",
- "test/threads/cab.xml",
- "test/threads/cba.xml",
- "test/threads/invalid.xml",
-};
-
-const char *Okay = "OK";
-const char *Failed = "Failed";
-
-#ifndef xmlDoValidityCheckingDefaultValue
-#error xmlDoValidityCheckingDefaultValue is not a macro
-#endif
-#ifndef xmlGenericErrorContext
-#error xmlGenericErrorContext is not a macro
-#endif
-
-static DWORD WINAPI
-thread_specific_data(void *private_data)
-{
- xmlDocPtr myDoc;
- const char *filename = (const char *) private_data;
- int okay = 1;
-
- if (!strcmp(filename, "test/threads/invalid.xml")) {
- xmlDoValidityCheckingDefaultValue = 0;
- xmlGenericErrorContext = stdout;
- } else {
- xmlDoValidityCheckingDefaultValue = 1;
- xmlGenericErrorContext = stderr;
- }
- myDoc = xmlParseFile(filename);
- if (myDoc) {
- xmlFreeDoc(myDoc);
- } else {
- printf("parse failed\n");
- okay = 0;
- }
- if (!strcmp(filename, "test/threads/invalid.xml")) {
- if (xmlDoValidityCheckingDefaultValue != 0) {
- printf("ValidityCheckingDefaultValue override failed\n");
- okay = 0;
- }
- if (xmlGenericErrorContext != stdout) {
- printf("xmlGenericErrorContext override failed\n");
- okay = 0;
- }
- } else {
- if (xmlDoValidityCheckingDefaultValue != 1) {
- printf("ValidityCheckingDefaultValue override failed\n");
- okay = 0;
- }
- if (xmlGenericErrorContext != stderr) {
- printf("xmlGenericErrorContext override failed\n");
- okay = 0;
- }
- }
- if (okay == 0)
- return ((DWORD) Failed);
- return ((DWORD) Okay);
-}
-
-int
-main()
-{
- unsigned int i, repeat;
- unsigned int num_threads = sizeof(testfiles) / sizeof(testfiles[0]);
- DWORD results[MAX_ARGC];
- BOOL ret;
-
- xmlInitParser();
- for (repeat = 0;repeat < TEST_REPEAT_COUNT;repeat++)
- {
- xmlLoadCatalog(catalog);
-
- for (i = 0; i < num_threads; i++)
- {
- results[i] = 0;
- tid[i] = (HANDLE) -1;
- }
-
- for (i = 0; i < num_threads; i++)
- {
- DWORD useless;
- tid[i] = CreateThread(NULL, 0,
- thread_specific_data, testfiles[i], 0, &useless);
- if (tid[i] == NULL)
- {
- perror("CreateThread");
- exit(1);
- }
- }
-
- if (WaitForMultipleObjects (num_threads, tid, TRUE, INFINITE) == WAIT_FAILED)
- perror ("WaitForMultipleObjects failed");
-
- for (i = 0; i < num_threads; i++)
- {
- ret = GetExitCodeThread (tid[i], &results[i]);
- if (ret == 0)
- {
- perror("GetExitCodeThread");
- exit(1);
- }
- CloseHandle (tid[i]);
- }
-
- xmlCatalogCleanup();
- for (i = 0; i < num_threads; i++) {
- if (results[i] != (DWORD) Okay)
- printf("Thread %d handling %s failed\n", i, testfiles[i]);
- }
- }
-
- xmlCleanupParser();
- xmlMemoryDump();
-
- return (0);
-}
-
-#else /* !LIBXML_THREADS_ENABLED */
-int
-main()
-{
- fprintf(stderr, "libxml was not compiled with thread or catalog support\n");
- return (0);
-}
-#endif
diff --git a/external/libxml2_android/jni/libxml2/testURI.c b/external/libxml2_android/jni/libxml2/testURI.c
deleted file mode 100644
index d20989d4..00000000
--- a/external/libxml2_android/jni/libxml2/testURI.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * testURI.c : a small tester program for XML input.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#include <libxml/xmlmemory.h>
-#include <libxml/uri.h>
-#include <libxml/globals.h>
-
-static const char *base = NULL;
-static int escape = 0;
-static int debug = 0;
-
-static void handleURI(const char *str) {
- int ret;
- xmlURIPtr uri;
- xmlChar *res = NULL, *parsed = NULL;
-
- uri = xmlCreateURI();
-
- if (base == NULL) {
- ret = xmlParseURIReference(uri, str);
- if (ret != 0)
- printf("%s : error %d\n", str, ret);
- else {
- if (debug) {
- if (uri->scheme) printf("scheme: %s\n", uri->scheme);
- if (uri->opaque) printf("opaque: %s\n", uri->opaque);
- if (uri->authority) printf("authority: %s\n", uri->authority);
- if (uri->server) printf("server: %s\n", uri->server);
- if (uri->user) printf("user: %s\n", uri->user);
- if (uri->port != 0) printf("port: %d\n", uri->port);
- if (uri->path) printf("path: %s\n", uri->path);
- if (uri->query) printf("query: %s\n", uri->query);
- if (uri->fragment) printf("fragment: %s\n", uri->fragment);
- if (uri->query_raw) printf("query_raw: %s\n", uri->query_raw);
- if (uri->cleanup != 0) printf("cleanup\n");
- }
- xmlNormalizeURIPath(uri->path);
- if (escape != 0) {
- parsed = xmlSaveUri(uri);
- res = xmlURIEscape(parsed);
- printf("%s\n", (char *) res);
-
- } else {
- xmlPrintURI(stdout, uri);
- printf("\n");
- }
- }
- } else {
- res = xmlBuildURI((xmlChar *)str, (xmlChar *) base);
- if (res != NULL) {
- printf("%s\n", (char *) res);
- }
- else
- printf("::ERROR::\n");
- }
- if (res != NULL)
- xmlFree(res);
- if (parsed != NULL)
- xmlFree(parsed);
- xmlFreeURI(uri);
-}
-
-int main(int argc, char **argv) {
- int i, arg = 1;
-
- if ((argc > arg) && (argv[arg] != NULL) &&
- ((!strcmp(argv[arg], "-base")) || (!strcmp(argv[arg], "--base")))) {
- arg++;
- base = argv[arg];
- if (base != NULL)
- arg++;
- }
- if ((argc > arg) && (argv[arg] != NULL) &&
- ((!strcmp(argv[arg], "-escape")) || (!strcmp(argv[arg], "--escape")))) {
- arg++;
- escape++;
- }
- if ((argc > arg) && (argv[arg] != NULL) &&
- ((!strcmp(argv[arg], "-debug")) || (!strcmp(argv[arg], "--debug")))) {
- arg++;
- debug++;
- }
- if (argv[arg] == NULL) {
- char str[1024];
-
- while (1) {
- /*
- * read one line in string buffer.
- */
- if (fgets (&str[0], sizeof (str) - 1, stdin) == NULL)
- break;
-
- /*
- * remove the ending spaces
- */
- i = strlen(str);
- while ((i > 0) &&
- ((str[i - 1] == '\n') || (str[i - 1] == '\r') ||
- (str[i - 1] == ' ') || (str[i - 1] == '\t'))) {
- i--;
- str[i] = 0;
- }
- handleURI(str);
- }
- } else {
- while (argv[arg] != NULL) {
- handleURI(argv[arg]);
- arg++;
- }
- }
- xmlMemoryDump();
- return(0);
-}
diff --git a/external/libxml2_android/jni/libxml2/testXPath.c b/external/libxml2_android/jni/libxml2/testXPath.c
deleted file mode 100644
index ebb9ff7b..00000000
--- a/external/libxml2_android/jni/libxml2/testXPath.c
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * testXPath.c : a small tester program for XPath.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED)
-
-#include <string.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-
-#include <libxml/xpath.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-#if defined(LIBXML_XPTR_ENABLED)
-#include <libxml/xpointer.h>
-static int xptr = 0;
-#endif
-static int debug = 0;
-static int valid = 0;
-static int expr = 0;
-static int tree = 0;
-static int nocdata = 0;
-static xmlDocPtr document = NULL;
-
-/*
- * Default document
- */
-static xmlChar buffer[] =
-"<?xml version=\"1.0\"?>\n\
-<EXAMPLE prop1=\"gnome is great\" prop2=\"&amp; linux too\">\n\
- <head>\n\
- <title>Welcome to Gnome</title>\n\
- </head>\n\
- <chapter>\n\
- <title>The Linux adventure</title>\n\
- <p>bla bla bla ...</p>\n\
- <image href=\"linus.gif\"/>\n\
- <p>...</p>\n\
- </chapter>\n\
- <chapter>\n\
- <title>Chapter 2</title>\n\
- <p>this is chapter 2 ...</p>\n\
- </chapter>\n\
- <chapter>\n\
- <title>Chapter 3</title>\n\
- <p>this is chapter 3 ...</p>\n\
- </chapter>\n\
-</EXAMPLE>\n\
-";
-
-
-static void
-testXPath(const char *str) {
- xmlXPathObjectPtr res;
- xmlXPathContextPtr ctxt;
-
-#if defined(LIBXML_XPTR_ENABLED)
- if (xptr) {
- ctxt = xmlXPtrNewContext(document, NULL, NULL);
- res = xmlXPtrEval(BAD_CAST str, ctxt);
- } else {
-#endif
- ctxt = xmlXPathNewContext(document);
- ctxt->node = xmlDocGetRootElement(document);
- if (expr)
- res = xmlXPathEvalExpression(BAD_CAST str, ctxt);
- else {
- /* res = xmlXPathEval(BAD_CAST str, ctxt); */
- xmlXPathCompExprPtr comp;
-
- comp = xmlXPathCompile(BAD_CAST str);
- if (comp != NULL) {
- if (tree)
- xmlXPathDebugDumpCompExpr(stdout, comp, 0);
-
- res = xmlXPathCompiledEval(comp, ctxt);
- xmlXPathFreeCompExpr(comp);
- } else
- res = NULL;
- }
-#if defined(LIBXML_XPTR_ENABLED)
- }
-#endif
- xmlXPathDebugDumpObject(stdout, res, 0);
- xmlXPathFreeObject(res);
- xmlXPathFreeContext(ctxt);
-}
-
-static void
-testXPathFile(const char *filename) {
- FILE *input;
- char expression[5000];
- int len;
-
- input = fopen(filename, "r");
- if (input == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot open %s for reading\n", filename);
- return;
- }
- while (fgets(expression, 4500, input) != NULL) {
- len = strlen(expression);
- len--;
- while ((len >= 0) &&
- ((expression[len] == '\n') || (expression[len] == '\t') ||
- (expression[len] == '\r') || (expression[len] == ' '))) len--;
- expression[len + 1] = 0;
- if (len >= 0) {
- printf("\n========================\nExpression: %s\n", expression) ;
- testXPath(expression);
- }
- }
-
- fclose(input);
-}
-
-int main(int argc, char **argv) {
- int i;
- int strings = 0;
- int usefile = 0;
- char *filename = NULL;
-
- for (i = 1; i < argc ; i++) {
-#if defined(LIBXML_XPTR_ENABLED)
- if ((!strcmp(argv[i], "-xptr")) || (!strcmp(argv[i], "--xptr")))
- xptr++;
- else
-#endif
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
- debug++;
- else if ((!strcmp(argv[i], "-valid")) || (!strcmp(argv[i], "--valid")))
- valid++;
- else if ((!strcmp(argv[i], "-expr")) || (!strcmp(argv[i], "--expr")))
- expr++;
- else if ((!strcmp(argv[i], "-tree")) || (!strcmp(argv[i], "--tree")))
- tree++;
- else if ((!strcmp(argv[i], "-nocdata")) ||
- (!strcmp(argv[i], "--nocdata")))
- nocdata++;
- else if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input")))
- filename = argv[++i];
- else if ((!strcmp(argv[i], "-f")) || (!strcmp(argv[i], "--file")))
- usefile++;
- }
- if (valid != 0) xmlDoValidityCheckingDefaultValue = 1;
- xmlLoadExtDtdDefaultValue |= XML_DETECT_IDS;
- xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS;
- xmlSubstituteEntitiesDefaultValue = 1;
-#ifdef LIBXML_SAX1_ENABLED
- if (nocdata != 0) {
- xmlDefaultSAXHandlerInit();
- xmlDefaultSAXHandler.cdataBlock = NULL;
- }
-#endif
- if (document == NULL) {
- if (filename == NULL)
- document = xmlReadDoc(buffer,NULL,NULL,XML_PARSE_COMPACT);
- else
- document = xmlReadFile(filename,NULL,XML_PARSE_COMPACT);
- }
- for (i = 1; i < argc ; i++) {
- if ((!strcmp(argv[i], "-i")) || (!strcmp(argv[i], "--input"))) {
- i++; continue;
- }
- if (argv[i][0] != '-') {
- if (usefile)
- testXPathFile(argv[i]);
- else
- testXPath(argv[i]);
- strings ++;
- }
- }
- if (strings == 0) {
- printf("Usage : %s [--debug] [--copy] stringsorfiles ...\n",
- argv[0]);
- printf("\tParse the XPath strings and output the result of the parsing\n");
- printf("\t--debug : dump a debug version of the result\n");
- printf("\t--valid : switch on DTD support in the parser\n");
-#if defined(LIBXML_XPTR_ENABLED)
- printf("\t--xptr : expressions are XPointer expressions\n");
-#endif
- printf("\t--expr : debug XPath expressions only\n");
- printf("\t--tree : show the compiled XPath tree\n");
- printf("\t--nocdata : do not generate CDATA nodes\n");
- printf("\t--input filename : or\n");
- printf("\t-i filename : read the document from filename\n");
- printf("\t--file : or\n");
- printf("\t-f : read queries from files, args\n");
- }
- if (document != NULL)
- xmlFreeDoc(document);
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(0);
-}
-#else
-#include <stdio.h>
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- printf("%s : XPath/Debug support not compiled in\n", argv[0]);
- return(0);
-}
-#endif /* LIBXML_XPATH_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/testapi.c b/external/libxml2_android/jni/libxml2/testapi.c
deleted file mode 100644
index b2f6e46b..00000000
--- a/external/libxml2_android/jni/libxml2/testapi.c
+++ /dev/null
@@ -1,52346 +0,0 @@
-/*
- * testapi.c: libxml2 API tester program.
- *
- * Automatically generated by gentest.py from libxml2-api.xml
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-#include <stdio.h>
-
-#include <stdlib.h> /* for putenv() */
-#include <string.h>
-#include <libxml/xmlerror.h>
-#include <libxml/relaxng.h>
-
-
-static int testlibxml2(void);
-static int test_module(const char *module);
-
-static int generic_errors = 0;
-static int call_tests = 0;
-static int function_tests = 0;
-
-static xmlChar chartab[1024];
-static int inttab[1024];
-static unsigned long longtab[1024];
-
-static xmlDocPtr api_doc = NULL;
-static xmlDtdPtr api_dtd = NULL;
-static xmlNodePtr api_root = NULL;
-static xmlAttrPtr api_attr = NULL;
-static xmlNsPtr api_ns = NULL;
-
-static void
-structured_errors(void *userData ATTRIBUTE_UNUSED,
- xmlErrorPtr error ATTRIBUTE_UNUSED) {
- generic_errors++;
-}
-
-static void
-free_api_doc(void) {
- xmlFreeDoc(api_doc);
- api_doc = NULL;
- api_dtd = NULL;
- api_root = NULL;
- api_attr = NULL;
- api_ns = NULL;
-}
-
-static xmlDocPtr
-get_api_doc(void) {
- if (api_doc == NULL) {
- api_doc = xmlReadMemory("<!DOCTYPE root [<!ELEMENT root EMPTY>]><root xmlns:h='http://example.com/' h:foo='bar'/>", 88, "root_test", NULL, 0);
- api_root = NULL;
- api_attr = NULL;
- }
- return(api_doc);
-}
-
-static xmlDtdPtr
-get_api_dtd(void) {
- if ((api_dtd == NULL) || (api_dtd->type != XML_DTD_NODE)) {
- get_api_doc();
- if ((api_doc != NULL) && (api_doc->children != NULL) &&
- (api_doc->children->type == XML_DTD_NODE))
- api_dtd = (xmlDtdPtr) api_doc->children;
- }
- return(api_dtd);
-}
-
-static xmlNodePtr
-get_api_root(void) {
- if ((api_root == NULL) || (api_root->type != XML_ELEMENT_NODE)) {
- get_api_doc();
- if ((api_doc != NULL) && (api_doc->children != NULL) &&
- (api_doc->children->next != NULL) &&
- (api_doc->children->next->type == XML_ELEMENT_NODE))
- api_root = api_doc->children->next;
- }
- return(api_root);
-}
-
-static xmlNsPtr
-get_api_ns(void) {
- get_api_root();
- if (api_root != NULL)
- api_ns = api_root->nsDef;
- return(api_ns);
-}
-
-static xmlAttrPtr
-get_api_attr(void) {
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
- static int nr = 0;
- xmlChar name[20];
-#endif
-
- if ((api_root == NULL) || (api_root->type != XML_ELEMENT_NODE)) {
- get_api_root();
- }
- if (api_root == NULL)
- return(NULL);
- if (api_root->properties != NULL) {
- api_attr = api_root->properties;
- return(api_root->properties);
- }
- api_attr = NULL;
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
- snprintf((char *) name, 20, "foo%d", nr++);
- api_attr = xmlSetProp(api_root, name, (const xmlChar *) "bar");
-#endif
- return(api_attr);
-}
-
-static int quiet = 0;
-
-int main(int argc, char **argv) {
- int ret;
- int blocks, mem;
-
-#ifdef HAVE_PUTENV
- /* access to the proxy can slow up regression tests a lot */
- putenv((char *) "http_proxy=");
-#endif
-
- memset(chartab, 0, sizeof(chartab));
- strncpy((char *) chartab, " chartab\n", 20);
- memset(inttab, 0, sizeof(inttab));
- memset(longtab, 0, sizeof(longtab));
-
- xmlInitParser();
-#ifdef LIBXML_SCHEMAS_ENABLED
- xmlRelaxNGInitTypes();
-#endif
-
- LIBXML_TEST_VERSION
-
- xmlSetStructuredErrorFunc(NULL, structured_errors);
-
- if (argc >= 2) {
- if (!strcmp(argv[1], "-q")) {
- quiet = 1;
- if (argc >= 3)
- ret = test_module(argv[2]);
- else
- ret = testlibxml2();
- } else {
- ret = test_module(argv[1]);
- }
- } else
- ret = testlibxml2();
-
- xmlCleanupParser();
- blocks = xmlMemBlocks();
- mem = xmlMemUsed();
- if ((blocks != 0) || (mem != 0)) {
- printf("testapi leaked %d bytes in %d blocks\n", mem, blocks);
- }
- xmlMemoryDump();
-
- return (ret != 0);
-}
-
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/catalog.h>
-#include <libxml/chvalid.h>
-#include <libxml/dict.h>
-#include <libxml/encoding.h>
-#include <libxml/entities.h>
-#include <libxml/hash.h>
-#include <libxml/list.h>
-#include <libxml/nanoftp.h>
-#include <libxml/nanohttp.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/pattern.h>
-#include <libxml/relaxng.h>
-#include <libxml/schemasInternals.h>
-#include <libxml/schematron.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include <libxml/valid.h>
-#include <libxml/xinclude.h>
-#include <libxml/xmlIO.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xmlreader.h>
-#include <libxml/xmlsave.h>
-#include <libxml/xmlschemas.h>
-#include <libxml/xmlschemastypes.h>
-#include <libxml/xmlstring.h>
-#include <libxml/xmlwriter.h>
-#include <libxml/xpath.h>
-#include <libxml/xpointer.h>
-#include <libxml/debugXML.h>
-
-/*
- We manually define xmlErrMemory because it's normal declaration
- is "hidden" by #ifdef IN_LIBXML
-*/
-void xmlErrMemory(xmlParserCtxtPtr ctxt, const char *extra);
-
-/*
- We need some "remote" addresses, but want to avoid getting into
- name resolution delays, so we use these
-*/
-#define REMOTE1GOOD "http://localhost/"
-#define REMOTE1BAD "http:http://http"
-#define REMOTE2GOOD "ftp://localhost/foo"
-
-#define gen_nb_void_ptr 2
-
-static void *gen_void_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_void_ptr(int no ATTRIBUTE_UNUSED, void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#if 0
-#define gen_nb_const_void_ptr 2
-
-static const void *gen_const_void_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return((const void *) "immutable string");
- return(NULL);
-}
-static void des_const_void_ptr(int no ATTRIBUTE_UNUSED, const void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#define gen_nb_userdata 3
-
-static void *gen_userdata(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return((void *) &call_tests);
- if (no == 1) return((void *) -1);
- return(NULL);
-}
-static void des_userdata(int no ATTRIBUTE_UNUSED, void *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-
-#define gen_nb_int 4
-
-static int gen_int(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(1);
- if (no == 2) return(-1);
- if (no == 3) return(122);
- return(-1);
-}
-
-static void des_int(int no ATTRIBUTE_UNUSED, int val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_parseroptions 5
-
-static int gen_parseroptions(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(XML_PARSE_NOBLANKS | XML_PARSE_RECOVER);
- if (no == 1) return(XML_PARSE_NOENT | XML_PARSE_DTDLOAD | XML_PARSE_DTDATTR | XML_PARSE_DTDVALID | XML_PARSE_NOCDATA);
- if (no == 2) return(XML_PARSE_XINCLUDE | XML_PARSE_NOXINCNODE | XML_PARSE_NSCLEAN);
- if (no == 3) return(XML_PARSE_XINCLUDE | XML_PARSE_NODICT);
- return(XML_PARSE_SAX1);
-}
-
-static void des_parseroptions(int no ATTRIBUTE_UNUSED, int val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#if 0
-#define gen_nb_long 5
-
-static long gen_long(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(1);
- if (no == 2) return(-1);
- if (no == 3) return(122);
- return(-1);
-}
-
-static void des_long(int no ATTRIBUTE_UNUSED, long val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#define gen_nb_xmlChar 4
-
-static xmlChar gen_xmlChar(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return('a');
- if (no == 1) return(' ');
- if (no == 2) return((xmlChar) '\xf8');
- return(0);
-}
-
-static void des_xmlChar(int no ATTRIBUTE_UNUSED, xmlChar val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_unsigned_int 3
-
-static unsigned int gen_unsigned_int(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(1);
- if (no == 2) return(122);
- return((unsigned int) -1);
-}
-
-static void des_unsigned_int(int no ATTRIBUTE_UNUSED, unsigned int val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_unsigned_long 4
-
-static unsigned long gen_unsigned_long(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(1);
- if (no == 2) return(122);
- return((unsigned long) -1);
-}
-
-static void des_unsigned_long(int no ATTRIBUTE_UNUSED, unsigned long val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_double 4
-
-static double gen_double(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(0);
- if (no == 1) return(-1.1);
-#if defined(LIBXML_XPATH_ENABLED)
- if (no == 2) return(xmlXPathNAN);
-#endif
- return(-1);
-}
-
-static void des_double(int no ATTRIBUTE_UNUSED, double val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_unsigned_long_ptr 2
-
-static unsigned long *gen_unsigned_long_ptr(int no, int nr) {
- if (no == 0) return(&longtab[nr]);
- return(NULL);
-}
-
-static void des_unsigned_long_ptr(int no ATTRIBUTE_UNUSED, unsigned long *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_int_ptr 2
-
-static int *gen_int_ptr(int no, int nr) {
- if (no == 0) return(&inttab[nr]);
- return(NULL);
-}
-
-static void des_int_ptr(int no ATTRIBUTE_UNUSED, int *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_const_char_ptr 4
-
-static char *gen_const_char_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return((char *) "foo");
- if (no == 1) return((char *) "<foo/>");
- if (no == 2) return((char *) "test/ent2");
- return(NULL);
-}
-static void des_const_char_ptr(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlChar_ptr 2
-
-static xmlChar *gen_xmlChar_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(&chartab[0]);
- return(NULL);
-}
-static void des_xmlChar_ptr(int no ATTRIBUTE_UNUSED, xmlChar *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_FILE_ptr 2
-
-static FILE *gen_FILE_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(fopen("test.out", "a+"));
- return(NULL);
-}
-static void des_FILE_ptr(int no ATTRIBUTE_UNUSED, FILE *val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) fclose(val);
-}
-
-#define gen_nb_debug_FILE_ptr 2
-static FILE *gen_debug_FILE_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(fopen("test.out", "a+"));
-}
-static void des_debug_FILE_ptr(int no ATTRIBUTE_UNUSED, FILE *val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) fclose(val);
-}
-
-#define gen_nb_const_xmlChar_ptr 5
-
-static xmlChar *gen_const_xmlChar_ptr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return((xmlChar *) "foo");
- if (no == 1) return((xmlChar *) "<foo/>");
- if (no == 2) return((xmlChar *) "n" "\xf8" "ne");
- if (no == 3) return((xmlChar *) " 2ab ");
- return(NULL);
-}
-static void des_const_xmlChar_ptr(int no ATTRIBUTE_UNUSED, const xmlChar *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_filepath 8
-
-static const char *gen_filepath(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return("missing.xml");
- if (no == 1) return("<foo/>");
- if (no == 2) return("test/ent2");
- if (no == 3) return("test/valid/REC-xml-19980210.xml");
- if (no == 4) return("test/valid/dtds/xhtml1-strict.dtd");
- if (no == 5) return(REMOTE1GOOD);
- if (no == 6) return(REMOTE1BAD);
- return(NULL);
-}
-static void des_filepath(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_eaten_name 2
-
-static xmlChar *gen_eaten_name(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlStrdup(BAD_CAST "eaten"));
- return(NULL);
-}
-static void des_eaten_name(int no ATTRIBUTE_UNUSED, xmlChar *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_fileoutput 6
-
-static const char *gen_fileoutput(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return("/missing.xml");
- if (no == 1) return("<foo/>");
- if (no == 2) return(REMOTE2GOOD);
- if (no == 3) return(REMOTE1GOOD);
- if (no == 4) return(REMOTE1BAD);
- return(NULL);
-}
-static void des_fileoutput(int no ATTRIBUTE_UNUSED, const char *val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlParserCtxtPtr 3
-static xmlParserCtxtPtr gen_xmlParserCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewParserCtxt());
- if (no == 1) return(xmlCreateMemoryParserCtxt("<doc/>", 6));
- return(NULL);
-}
-static void des_xmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlParserCtxtPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL)
- xmlFreeParserCtxt(val);
-}
-
-#define gen_nb_xmlSAXHandlerPtr 2
-static xmlSAXHandlerPtr gen_xmlSAXHandlerPtr(int no, int nr ATTRIBUTE_UNUSED) {
-#ifdef LIBXML_SAX1_ENABLED
- if (no == 0) return((xmlSAXHandlerPtr) &xmlDefaultSAXHandler);
-#endif
- return(NULL);
-}
-static void des_xmlSAXHandlerPtr(int no ATTRIBUTE_UNUSED, xmlSAXHandlerPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlValidCtxtPtr 2
-static xmlValidCtxtPtr gen_xmlValidCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
-#ifdef LIBXML_VALID_ENABLED
- if (no == 0) return(xmlNewValidCtxt());
-#endif
- return(NULL);
-}
-static void des_xmlValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlValidCtxtPtr val, int nr ATTRIBUTE_UNUSED) {
-#ifdef LIBXML_VALID_ENABLED
- if (val != NULL)
- xmlFreeValidCtxt(val);
-#endif
-}
-
-#define gen_nb_xmlParserInputBufferPtr 8
-
-static xmlParserInputBufferPtr gen_xmlParserInputBufferPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlParserInputBufferCreateFilename("missing.xml", XML_CHAR_ENCODING_NONE));
- if (no == 1) return(xmlParserInputBufferCreateFilename("<foo/>", XML_CHAR_ENCODING_NONE));
- if (no == 2) return(xmlParserInputBufferCreateFilename("test/ent2", XML_CHAR_ENCODING_NONE));
- if (no == 3) return(xmlParserInputBufferCreateFilename("test/valid/REC-xml-19980210.xml", XML_CHAR_ENCODING_NONE));
- if (no == 4) return(xmlParserInputBufferCreateFilename("test/valid/dtds/xhtml1-strict.dtd", XML_CHAR_ENCODING_NONE));
- if (no == 5) return(xmlParserInputBufferCreateFilename(REMOTE1GOOD, XML_CHAR_ENCODING_NONE));
- if (no == 6) return(xmlParserInputBufferCreateFilename(REMOTE1BAD, XML_CHAR_ENCODING_NONE));
- return(NULL);
-}
-static void des_xmlParserInputBufferPtr(int no ATTRIBUTE_UNUSED, xmlParserInputBufferPtr val, int nr ATTRIBUTE_UNUSED) {
- xmlFreeParserInputBuffer(val);
-}
-
-#define gen_nb_xmlDocPtr 4
-static xmlDocPtr gen_xmlDocPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewDoc(BAD_CAST "1.0"));
- if (no == 1) return(xmlReadMemory("<foo/>", 6, "test", NULL, 0));
- if (no == 2) return(xmlReadMemory("<!DOCTYPE foo []> <foo/>", 24, "test", NULL, 0));
- return(NULL);
-}
-static void des_xmlDocPtr(int no ATTRIBUTE_UNUSED, xmlDocPtr val, int nr ATTRIBUTE_UNUSED) {
- if ((val != NULL) && (val != api_doc) && (val->doc != api_doc))
- xmlFreeDoc(val);
-}
-
-#define gen_nb_xmlAttrPtr 2
-static xmlAttrPtr gen_xmlAttrPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(get_api_attr());
- return(NULL);
-}
-static void des_xmlAttrPtr(int no, xmlAttrPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) free_api_doc();
-}
-
-#define gen_nb_xmlDictPtr 2
-static xmlDictPtr gen_xmlDictPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlDictCreate());
- return(NULL);
-}
-static void des_xmlDictPtr(int no ATTRIBUTE_UNUSED, xmlDictPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL)
- xmlDictFree(val);
-}
-
-#define gen_nb_xmlNodePtr 3
-static xmlNodePtr gen_xmlNodePtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewPI(BAD_CAST "test", NULL));
- if (no == 1) return(get_api_root());
- return(NULL);
-/* if (no == 2) return((xmlNodePtr) get_api_doc()); */
-}
-static void des_xmlNodePtr(int no, xmlNodePtr val, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) {
- free_api_doc();
- } else if (val != NULL) {
- xmlUnlinkNode(val);
- xmlFreeNode(val);
- }
-}
-
-#define gen_nb_xmlDtdPtr 3
-static xmlDtdPtr gen_xmlDtdPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0)
- return(xmlNewDtd(NULL, BAD_CAST "dtd", BAD_CAST"foo", BAD_CAST"bar"));
- if (no == 1) return(get_api_dtd());
- return(NULL);
-}
-static void des_xmlDtdPtr(int no, xmlDtdPtr val, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) free_api_doc();
- else if (val != NULL) {
- xmlUnlinkNode((xmlNodePtr) val);
- xmlFreeNode((xmlNodePtr) val);
- }
-}
-
-#define gen_nb_xmlNsPtr 2
-static xmlNsPtr gen_xmlNsPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(get_api_ns());
- return(NULL);
-}
-static void des_xmlNsPtr(int no, xmlNsPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) free_api_doc();
-}
-
-#define gen_nb_xmlNodePtr_in 3
-static xmlNodePtr gen_xmlNodePtr_in(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewPI(BAD_CAST "test", NULL));
- if (no == 0) return(xmlNewText(BAD_CAST "text"));
- return(NULL);
-}
-static void des_xmlNodePtr_in(int no ATTRIBUTE_UNUSED, xmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#ifdef LIBXML_WRITER_ENABLED
-#define gen_nb_xmlTextWriterPtr 2
-static xmlTextWriterPtr gen_xmlTextWriterPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewTextWriterFilename("test.out", 0));
- return(NULL);
-}
-static void des_xmlTextWriterPtr(int no ATTRIBUTE_UNUSED, xmlTextWriterPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) xmlFreeTextWriter(val);
-}
-#endif
-
-#ifdef LIBXML_READER_ENABLED
-#define gen_nb_xmlTextReaderPtr 4
-static xmlTextReaderPtr gen_xmlTextReaderPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewTextReaderFilename("test/ent2"));
- if (no == 1) return(xmlNewTextReaderFilename("test/valid/REC-xml-19980210.xml"));
- if (no == 2) return(xmlNewTextReaderFilename("test/valid/dtds/xhtml1-strict.dtd"));
- return(NULL);
-}
-static void des_xmlTextReaderPtr(int no ATTRIBUTE_UNUSED, xmlTextReaderPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) xmlFreeTextReader(val);
-}
-#endif
-
-#define gen_nb_xmlBufferPtr 3
-static const xmlChar *static_buf_content = (xmlChar *)"a static buffer";
-static xmlBufferPtr gen_xmlBufferPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlBufferCreate());
- if (no == 1) return(xmlBufferCreateStatic((void *)static_buf_content, 13));
- return(NULL);
-}
-static void des_xmlBufferPtr(int no ATTRIBUTE_UNUSED, xmlBufferPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlBufferFree(val);
- }
-}
-
-#define gen_nb_xmlListPtr 2
-static xmlListPtr gen_xmlListPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlListCreate(NULL, NULL));
- return(NULL);
-}
-static void des_xmlListPtr(int no ATTRIBUTE_UNUSED, xmlListPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlListDelete(val);
- }
-}
-
-#define gen_nb_xmlHashTablePtr 2
-static xmlHashTablePtr gen_xmlHashTablePtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlHashCreate(10));
- return(NULL);
-}
-static void des_xmlHashTablePtr(int no ATTRIBUTE_UNUSED, xmlHashTablePtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlHashFree(val, NULL);
- }
-}
-
-#include <libxml/xpathInternals.h>
-
-#ifdef LIBXML_XPATH_ENABLED
-#define gen_nb_xmlXPathObjectPtr 5
-static xmlXPathObjectPtr gen_xmlXPathObjectPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlXPathNewString(BAD_CAST "string object"));
- if (no == 1) return(xmlXPathNewFloat(1.1));
- if (no == 2) return(xmlXPathNewBoolean(1));
- if (no == 3) return(xmlXPathNewNodeSet(NULL));
- return(NULL);
-}
-static void des_xmlXPathObjectPtr(int no ATTRIBUTE_UNUSED, xmlXPathObjectPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlXPathFreeObject(val);
- }
-}
-#endif
-
-#ifdef LIBXML_OUTPUT_ENABLED
-#define gen_nb_xmlOutputBufferPtr 2
-static xmlOutputBufferPtr gen_xmlOutputBufferPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlOutputBufferCreateFilename("test.out", NULL, 0));
- return(NULL);
-}
-static void des_xmlOutputBufferPtr(int no ATTRIBUTE_UNUSED, xmlOutputBufferPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlOutputBufferClose(val);
- }
-}
-#endif
-
-#ifdef LIBXML_FTP_ENABLED
-#define gen_nb_xmlNanoFTPCtxtPtr 4
-static void *gen_xmlNanoFTPCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNanoFTPNewCtxt(REMOTE2GOOD));
- if (no == 1) return(xmlNanoFTPNewCtxt(REMOTE1GOOD));
- if (no == 2) return(xmlNanoFTPNewCtxt("foo"));
- return(NULL);
-}
-static void des_xmlNanoFTPCtxtPtr(int no ATTRIBUTE_UNUSED, void *val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlNanoFTPFreeCtxt(val);
- }
-}
-#endif
-
-#ifdef LIBXML_HTTP_ENABLED
-#define gen_nb_xmlNanoHTTPCtxtPtr 1
-static void *gen_xmlNanoHTTPCtxtPtr(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNanoHTTPOpen(REMOTE1GOOD, NULL));
- if (no == 1) return(xmlNanoHTTPOpen(REMOTE2GOOD, NULL));
- if (no == 2) return(xmlNanoHTTPOpen(REMOTE1BAD, NULL));
- return(NULL);
-}
-static void des_xmlNanoHTTPCtxtPtr(int no ATTRIBUTE_UNUSED, void *val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL) {
- xmlNanoHTTPClose(val);
- }
-}
-#endif
-
-#define gen_nb_xmlCharEncoding 4
-static xmlCharEncoding gen_xmlCharEncoding(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(XML_CHAR_ENCODING_UTF8);
- if (no == 1) return(XML_CHAR_ENCODING_NONE);
- if (no == 2) return(XML_CHAR_ENCODING_8859_1);
- return(XML_CHAR_ENCODING_ERROR);
-}
-static void des_xmlCharEncoding(int no ATTRIBUTE_UNUSED, xmlCharEncoding val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
-
-#define gen_nb_xmlExpCtxtPtr 1
-static xmlExpCtxtPtr gen_xmlExpCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlExpCtxtPtr(int no ATTRIBUTE_UNUSED, xmlExpCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlExpNodePtr 1
-static xmlExpNodePtr gen_xmlExpNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlExpNodePtr(int no ATTRIBUTE_UNUSED, xmlExpNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#endif
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-#define gen_nb_xmlSchemaPtr 1
-static xmlSchemaPtr gen_xmlSchemaPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaPtr(int no ATTRIBUTE_UNUSED, xmlSchemaPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlSchemaValidCtxtPtr 1
-static xmlSchemaValidCtxtPtr gen_xmlSchemaValidCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchemaValidCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#endif /* LIBXML_SCHEMAS_ENABLED */
-
-#define gen_nb_xmlHashDeallocator 2
-static void
-test_xmlHashDeallocator(void *payload ATTRIBUTE_UNUSED, xmlChar *name ATTRIBUTE_UNUSED) {
-}
-
-static xmlHashDeallocator gen_xmlHashDeallocator(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(test_xmlHashDeallocator);
- return(NULL);
-}
-static void des_xmlHashDeallocator(int no ATTRIBUTE_UNUSED, xmlHashDeallocator val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-
-static void desret_int(int val ATTRIBUTE_UNUSED) {
-}
-static void desret_xmlChar(xmlChar val ATTRIBUTE_UNUSED) {
-}
-static void desret_long(long val ATTRIBUTE_UNUSED) {
-}
-static void desret_unsigned_long(unsigned long val ATTRIBUTE_UNUSED) {
-}
-static void desret_double(double val ATTRIBUTE_UNUSED) {
-}
-static void desret_xmlCharEncoding(xmlCharEncoding val ATTRIBUTE_UNUSED) {
-}
-#if 0
-static void desret_const_void_ptr(void *val ATTRIBUTE_UNUSED) {
-}
-#endif
-static void desret_void_ptr(void *val ATTRIBUTE_UNUSED) {
-}
-static void desret_const_char_ptr(const char *val ATTRIBUTE_UNUSED) {
-}
-static void desret_const_xmlChar_ptr(const xmlChar *val ATTRIBUTE_UNUSED) {
-}
-static void desret_xmlChar_ptr(xmlChar *val) {
- if (val != NULL)
- xmlFree(val);
-}
-static void desret_xmlDocPtr(xmlDocPtr val) {
- if (val != api_doc)
- xmlFreeDoc(val);
-}
-static void desret_xmlDictPtr(xmlDictPtr val) {
- xmlDictFree(val);
-}
-#ifdef LIBXML_OUTPUT_ENABLED
-static void desret_xmlOutputBufferPtr(xmlOutputBufferPtr val) {
- xmlOutputBufferClose(val);
-}
-#endif
-#ifdef LIBXML_READER_ENABLED
-static void desret_xmlTextReaderPtr(xmlTextReaderPtr val) {
- xmlFreeTextReader(val);
-}
-#endif
-static void desret_xmlNodePtr(xmlNodePtr val) {
- if ((val != NULL) && (val != api_root) && (val != (xmlNodePtr) api_doc)) {
- xmlUnlinkNode(val);
- xmlFreeNode(val);
- }
-}
-static void desret_xmlAttrPtr(xmlAttrPtr val) {
- if (val != NULL) {
- xmlUnlinkNode((xmlNodePtr) val);
- xmlFreeNode((xmlNodePtr) val);
- }
-}
-static void desret_xmlEntityPtr(xmlEntityPtr val) {
- if (val != NULL) {
- xmlUnlinkNode((xmlNodePtr) val);
- xmlFreeNode((xmlNodePtr) val);
- }
-}
-static void desret_xmlElementPtr(xmlElementPtr val) {
- if (val != NULL) {
- xmlUnlinkNode((xmlNodePtr) val);
- }
-}
-static void desret_xmlAttributePtr(xmlAttributePtr val) {
- if (val != NULL) {
- xmlUnlinkNode((xmlNodePtr) val);
- }
-}
-static void desret_xmlNsPtr(xmlNsPtr val ATTRIBUTE_UNUSED) {
-}
-static void desret_xmlDtdPtr(xmlDtdPtr val) {
- desret_xmlNodePtr((xmlNodePtr)val);
-}
-#ifdef LIBXML_XPATH_ENABLED
-static void desret_xmlXPathObjectPtr(xmlXPathObjectPtr val) {
- xmlXPathFreeObject(val);
-}
-static void desret_xmlNodeSetPtr(xmlNodeSetPtr val) {
- xmlXPathFreeNodeSet(val);
-}
-#endif
-static void desret_xmlParserCtxtPtr(xmlParserCtxtPtr val) {
- xmlFreeParserCtxt(val);
-}
-static void desret_xmlParserInputBufferPtr(xmlParserInputBufferPtr val) {
- xmlFreeParserInputBuffer(val);
-}
-static void desret_xmlParserInputPtr(xmlParserInputPtr val) {
- xmlFreeInputStream(val);
-}
-#ifdef LIBXML_WRITER_ENABLED
-static void desret_xmlTextWriterPtr(xmlTextWriterPtr val) {
- xmlFreeTextWriter(val);
-}
-#endif
-static void desret_xmlBufferPtr(xmlBufferPtr val) {
- xmlBufferFree(val);
-}
-#ifdef LIBXML_SCHEMAS_ENABLED
-static void desret_xmlSchemaParserCtxtPtr(xmlSchemaParserCtxtPtr val) {
- xmlSchemaFreeParserCtxt(val);
-}
-static void desret_xmlSchemaTypePtr(xmlSchemaTypePtr val ATTRIBUTE_UNUSED) {
-}
-static void desret_xmlRelaxNGParserCtxtPtr(xmlRelaxNGParserCtxtPtr val) {
- xmlRelaxNGFreeParserCtxt(val);
-}
-#endif
-#ifdef LIBXML_HTML_ENABLED
-static void desret_const_htmlEntityDesc_ptr(const htmlEntityDesc * val ATTRIBUTE_UNUSED) {
-}
-#endif
-#ifdef LIBXML_HTTP_ENABLED
-static void desret_xmlNanoHTTPCtxtPtr(void *val) {
- xmlNanoHTTPClose(val);
-}
-#endif
-#ifdef LIBXML_FTP_ENABLED
-static void desret_xmlNanoFTPCtxtPtr(void *val) {
- xmlNanoFTPClose(val);
-}
-#endif
-/* cut and pasted from autogenerated to avoid troubles */
-#define gen_nb_const_xmlChar_ptr_ptr 1
-static xmlChar ** gen_const_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, const xmlChar ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_unsigned_char_ptr 1
-static unsigned char * gen_unsigned_char_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_unsigned_char_ptr(int no ATTRIBUTE_UNUSED, unsigned char * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_const_unsigned_char_ptr 1
-static unsigned char * gen_const_unsigned_char_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_unsigned_char_ptr(int no ATTRIBUTE_UNUSED, const unsigned char * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#ifdef LIBXML_HTML_ENABLED
-#define gen_nb_const_htmlNodePtr 1
-static htmlNodePtr gen_const_htmlNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_htmlNodePtr(int no ATTRIBUTE_UNUSED, const htmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#ifdef LIBXML_HTML_ENABLED
-#define gen_nb_htmlDocPtr 3
-static htmlDocPtr gen_htmlDocPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(htmlNewDoc(NULL, NULL));
- if (no == 1) return(htmlReadMemory("<html/>", 7, "test", NULL, 0));
- return(NULL);
-}
-static void des_htmlDocPtr(int no ATTRIBUTE_UNUSED, htmlDocPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- if ((val != NULL) && (val != api_doc) && (val->doc != api_doc))
- xmlFreeDoc(val);
-}
-static void desret_htmlDocPtr(htmlDocPtr val) {
- if ((val != NULL) && (val != api_doc) && (val->doc != api_doc))
- xmlFreeDoc(val);
-}
-#define gen_nb_htmlParserCtxtPtr 3
-static htmlParserCtxtPtr gen_htmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- if (no == 0) return(xmlNewParserCtxt());
- if (no == 1) return(htmlCreateMemoryParserCtxt("<html/>", 7));
- return(NULL);
-}
-static void des_htmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, htmlParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL)
- htmlFreeParserCtxt(val);
-}
-static void desret_htmlParserCtxtPtr(htmlParserCtxtPtr val) {
- if (val != NULL)
- htmlFreeParserCtxt(val);
-}
-#endif
-
-#ifdef LIBXML_XPATH_ENABLED
-#define gen_nb_xmlNodeSetPtr 1
-static xmlNodeSetPtr gen_xmlNodeSetPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlNodeSetPtr(int no ATTRIBUTE_UNUSED, xmlNodeSetPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#ifdef LIBXML_DEBUG_ENABLED
-#ifdef LIBXML_XPATH_ENABLED
-#define gen_nb_xmlShellCtxtPtr 1
-static xmlShellCtxtPtr gen_xmlShellCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlShellCtxtPtr(int no ATTRIBUTE_UNUSED, xmlShellCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-#endif
-
-#ifdef LIBXML_PATTERN_ENABLED
-#define gen_nb_xmlPatternPtr 1
-static xmlPatternPtr gen_xmlPatternPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlPatternPtr(int no ATTRIBUTE_UNUSED, xmlPatternPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#define gen_nb_xmlElementContentPtr 1
-static xmlElementContentPtr gen_xmlElementContentPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlElementContentPtr(int no ATTRIBUTE_UNUSED, xmlElementContentPtr val, int nr ATTRIBUTE_UNUSED) {
- if (val != NULL)
- xmlFreeElementContent(val);
-}
-static void desret_xmlElementContentPtr(xmlElementContentPtr val) {
- if (val != NULL)
- xmlFreeElementContent(val);
-}
-
-#define gen_nb_xmlParserNodeInfoSeqPtr 1
-static xmlParserNodeInfoSeqPtr gen_xmlParserNodeInfoSeqPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlParserNodeInfoSeqPtr(int no ATTRIBUTE_UNUSED, xmlParserNodeInfoSeqPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static void desret_const_xmlParserNodeInfo_ptr(const xmlParserNodeInfo *val ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_void_ptr_ptr 1
-static void ** gen_void_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_void_ptr_ptr(int no ATTRIBUTE_UNUSED, void ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-/************************************************************************
- * *
- * WARNING: end of the manually maintained part of the test code *
- * do not remove or alter the CUT HERE line *
- * *
- ************************************************************************/
-
-/* CUT HERE: everything below that line is generated */
-#ifdef LIBXML_HTML_ENABLED
-static void desret_htmlStatus(htmlStatus val ATTRIBUTE_UNUSED) {
-}
-
-#endif
-
-#define gen_nb_xmlAttributeDefault 4
-static xmlAttributeDefault gen_xmlAttributeDefault(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_ATTRIBUTE_FIXED);
- if (no == 2) return(XML_ATTRIBUTE_IMPLIED);
- if (no == 3) return(XML_ATTRIBUTE_NONE);
- if (no == 4) return(XML_ATTRIBUTE_REQUIRED);
- return(0);
-}
-
-static void des_xmlAttributeDefault(int no ATTRIBUTE_UNUSED, xmlAttributeDefault val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlAttributeType 4
-static xmlAttributeType gen_xmlAttributeType(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_ATTRIBUTE_CDATA);
- if (no == 2) return(XML_ATTRIBUTE_ENTITIES);
- if (no == 3) return(XML_ATTRIBUTE_ENTITY);
- if (no == 4) return(XML_ATTRIBUTE_ENUMERATION);
- return(0);
-}
-
-static void des_xmlAttributeType(int no ATTRIBUTE_UNUSED, xmlAttributeType val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlBufferAllocationScheme 4
-static xmlBufferAllocationScheme gen_xmlBufferAllocationScheme(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_BUFFER_ALLOC_BOUNDED);
- if (no == 2) return(XML_BUFFER_ALLOC_DOUBLEIT);
- if (no == 3) return(XML_BUFFER_ALLOC_EXACT);
- if (no == 4) return(XML_BUFFER_ALLOC_HYBRID);
- return(0);
-}
-
-static void des_xmlBufferAllocationScheme(int no ATTRIBUTE_UNUSED, xmlBufferAllocationScheme val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static void desret_xmlBufferAllocationScheme(xmlBufferAllocationScheme val ATTRIBUTE_UNUSED) {
-}
-
-#ifdef LIBXML_CATALOG_ENABLED
-#define gen_nb_xmlCatalogAllow 4
-static xmlCatalogAllow gen_xmlCatalogAllow(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_CATA_ALLOW_ALL);
- if (no == 2) return(XML_CATA_ALLOW_DOCUMENT);
- if (no == 3) return(XML_CATA_ALLOW_GLOBAL);
- if (no == 4) return(XML_CATA_ALLOW_NONE);
- return(0);
-}
-
-static void des_xmlCatalogAllow(int no ATTRIBUTE_UNUSED, xmlCatalogAllow val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static void desret_xmlCatalogAllow(xmlCatalogAllow val ATTRIBUTE_UNUSED) {
-}
-
-#endif
-
-#ifdef LIBXML_CATALOG_ENABLED
-#define gen_nb_xmlCatalogPrefer 3
-static xmlCatalogPrefer gen_xmlCatalogPrefer(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_CATA_PREFER_NONE);
- if (no == 2) return(XML_CATA_PREFER_PUBLIC);
- if (no == 3) return(XML_CATA_PREFER_SYSTEM);
- return(0);
-}
-
-static void des_xmlCatalogPrefer(int no ATTRIBUTE_UNUSED, xmlCatalogPrefer val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static void desret_xmlCatalogPrefer(xmlCatalogPrefer val ATTRIBUTE_UNUSED) {
-}
-
-#endif
-
-#define gen_nb_xmlElementContentType 4
-static xmlElementContentType gen_xmlElementContentType(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_ELEMENT_CONTENT_ELEMENT);
- if (no == 2) return(XML_ELEMENT_CONTENT_OR);
- if (no == 3) return(XML_ELEMENT_CONTENT_PCDATA);
- if (no == 4) return(XML_ELEMENT_CONTENT_SEQ);
- return(0);
-}
-
-static void des_xmlElementContentType(int no ATTRIBUTE_UNUSED, xmlElementContentType val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlElementTypeVal 4
-static xmlElementTypeVal gen_xmlElementTypeVal(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_ELEMENT_TYPE_ANY);
- if (no == 2) return(XML_ELEMENT_TYPE_ELEMENT);
- if (no == 3) return(XML_ELEMENT_TYPE_EMPTY);
- if (no == 4) return(XML_ELEMENT_TYPE_MIXED);
- return(0);
-}
-
-static void des_xmlElementTypeVal(int no ATTRIBUTE_UNUSED, xmlElementTypeVal val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_xmlFeature 4
-static xmlFeature gen_xmlFeature(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_WITH_AUTOMATA);
- if (no == 2) return(XML_WITH_C14N);
- if (no == 3) return(XML_WITH_CATALOG);
- if (no == 4) return(XML_WITH_DEBUG);
- return(0);
-}
-
-static void des_xmlFeature(int no ATTRIBUTE_UNUSED, xmlFeature val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static void desret_xmlParserErrors(xmlParserErrors val ATTRIBUTE_UNUSED) {
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-#define gen_nb_xmlSchemaValType 4
-static xmlSchemaValType gen_xmlSchemaValType(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_SCHEMAS_ANYSIMPLETYPE);
- if (no == 2) return(XML_SCHEMAS_ANYTYPE);
- if (no == 3) return(XML_SCHEMAS_ANYURI);
- if (no == 4) return(XML_SCHEMAS_BASE64BINARY);
- return(0);
-}
-
-static void des_xmlSchemaValType(int no ATTRIBUTE_UNUSED, xmlSchemaValType val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static void desret_xmlSchemaValType(xmlSchemaValType val ATTRIBUTE_UNUSED) {
-}
-
-#endif
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-#define gen_nb_xmlSchemaWhitespaceValueType 4
-static xmlSchemaWhitespaceValueType gen_xmlSchemaWhitespaceValueType(int no, int nr ATTRIBUTE_UNUSED) {
- if (no == 1) return(XML_SCHEMA_WHITESPACE_COLLAPSE);
- if (no == 2) return(XML_SCHEMA_WHITESPACE_PRESERVE);
- if (no == 3) return(XML_SCHEMA_WHITESPACE_REPLACE);
- if (no == 4) return(XML_SCHEMA_WHITESPACE_UNKNOWN);
- return(0);
-}
-
-static void des_xmlSchemaWhitespaceValueType(int no ATTRIBUTE_UNUSED, xmlSchemaWhitespaceValueType val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#endif
-
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/SAX2.h>
-#include <libxml/c14n.h>
-#include <libxml/catalog.h>
-#include <libxml/chvalid.h>
-#include <libxml/debugXML.h>
-#include <libxml/dict.h>
-#include <libxml/encoding.h>
-#include <libxml/entities.h>
-#include <libxml/hash.h>
-#include <libxml/list.h>
-#include <libxml/nanoftp.h>
-#include <libxml/nanohttp.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/pattern.h>
-#include <libxml/relaxng.h>
-#include <libxml/schemasInternals.h>
-#include <libxml/schematron.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#include <libxml/valid.h>
-#include <libxml/xinclude.h>
-#include <libxml/xmlIO.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xmlmodule.h>
-#include <libxml/xmlreader.h>
-#include <libxml/xmlregexp.h>
-#include <libxml/xmlsave.h>
-#include <libxml/xmlschemas.h>
-#include <libxml/xmlschemastypes.h>
-#include <libxml/xmlstring.h>
-#include <libxml/xmlunicode.h>
-#include <libxml/xmlwriter.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/xpointer.h>
-static int test_HTMLparser(void);
-static int test_HTMLtree(void);
-static int test_SAX2(void);
-static int test_c14n(void);
-static int test_catalog(void);
-static int test_chvalid(void);
-static int test_debugXML(void);
-static int test_dict(void);
-static int test_encoding(void);
-static int test_entities(void);
-static int test_hash(void);
-static int test_list(void);
-static int test_nanoftp(void);
-static int test_nanohttp(void);
-static int test_parser(void);
-static int test_parserInternals(void);
-static int test_pattern(void);
-static int test_relaxng(void);
-static int test_schemasInternals(void);
-static int test_schematron(void);
-static int test_tree(void);
-static int test_uri(void);
-static int test_valid(void);
-static int test_xinclude(void);
-static int test_xmlIO(void);
-static int test_xmlautomata(void);
-static int test_xmlerror(void);
-static int test_xmlmodule(void);
-static int test_xmlreader(void);
-static int test_xmlregexp(void);
-static int test_xmlsave(void);
-static int test_xmlschemas(void);
-static int test_xmlschemastypes(void);
-static int test_xmlstring(void);
-static int test_xmlunicode(void);
-static int test_xmlwriter(void);
-static int test_xpath(void);
-static int test_xpathInternals(void);
-static int test_xpointer(void);
-
-/**
- * testlibxml2:
- *
- * Main entry point of the tester for the full libxml2 module,
- * it calls all the tester entry point for each module.
- *
- * Returns the number of error found
- */
-static int
-testlibxml2(void)
-{
- int test_ret = 0;
-
- test_ret += test_HTMLparser();
- test_ret += test_HTMLtree();
- test_ret += test_SAX2();
- test_ret += test_c14n();
- test_ret += test_catalog();
- test_ret += test_chvalid();
- test_ret += test_debugXML();
- test_ret += test_dict();
- test_ret += test_encoding();
- test_ret += test_entities();
- test_ret += test_hash();
- test_ret += test_list();
- test_ret += test_nanoftp();
- test_ret += test_nanohttp();
- test_ret += test_parser();
- test_ret += test_parserInternals();
- test_ret += test_pattern();
- test_ret += test_relaxng();
- test_ret += test_schemasInternals();
- test_ret += test_schematron();
- test_ret += test_tree();
- test_ret += test_uri();
- test_ret += test_valid();
- test_ret += test_xinclude();
- test_ret += test_xmlIO();
- test_ret += test_xmlautomata();
- test_ret += test_xmlerror();
- test_ret += test_xmlmodule();
- test_ret += test_xmlreader();
- test_ret += test_xmlregexp();
- test_ret += test_xmlsave();
- test_ret += test_xmlschemas();
- test_ret += test_xmlschemastypes();
- test_ret += test_xmlstring();
- test_ret += test_xmlunicode();
- test_ret += test_xmlwriter();
- test_ret += test_xpath();
- test_ret += test_xpathInternals();
- test_ret += test_xpointer();
-
- printf("Total: %d functions, %d tests, %d errors\n",
- function_tests, call_tests, test_ret);
- return(test_ret);
-}
-
-
-static int
-test_UTF8ToHtml(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- unsigned char * out; /* a pointer to an array of bytes to store the result */
- int n_out;
- int * outlen; /* the length of @out */
- int n_outlen;
- unsigned char * in; /* a pointer to an array of UTF-8 chars */
- int n_in;
- int * inlen; /* the length of @in */
- int n_inlen;
-
- for (n_out = 0;n_out < gen_nb_unsigned_char_ptr;n_out++) {
- for (n_outlen = 0;n_outlen < gen_nb_int_ptr;n_outlen++) {
- for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) {
- for (n_inlen = 0;n_inlen < gen_nb_int_ptr;n_inlen++) {
- mem_base = xmlMemBlocks();
- out = gen_unsigned_char_ptr(n_out, 0);
- outlen = gen_int_ptr(n_outlen, 1);
- in = gen_const_unsigned_char_ptr(n_in, 2);
- inlen = gen_int_ptr(n_inlen, 3);
-
- ret_val = UTF8ToHtml(out, outlen, (const unsigned char *)in, inlen);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_char_ptr(n_out, out, 0);
- des_int_ptr(n_outlen, outlen, 1);
- des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 2);
- des_int_ptr(n_inlen, inlen, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in UTF8ToHtml",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_outlen);
- printf(" %d", n_in);
- printf(" %d", n_inlen);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_HTML_ENABLED
-
-#define gen_nb_const_htmlElemDesc_ptr 1
-static htmlElemDesc * gen_const_htmlElemDesc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_htmlElemDesc_ptr(int no ATTRIBUTE_UNUSED, const htmlElemDesc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_htmlAttrAllowed(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlStatus ret_val;
- htmlElemDesc * elt; /* HTML element */
- int n_elt;
- xmlChar * attr; /* HTML attribute */
- int n_attr;
- int legacy; /* whether to allow deprecated attributes */
- int n_legacy;
-
- for (n_elt = 0;n_elt < gen_nb_const_htmlElemDesc_ptr;n_elt++) {
- for (n_attr = 0;n_attr < gen_nb_const_xmlChar_ptr;n_attr++) {
- for (n_legacy = 0;n_legacy < gen_nb_int;n_legacy++) {
- mem_base = xmlMemBlocks();
- elt = gen_const_htmlElemDesc_ptr(n_elt, 0);
- attr = gen_const_xmlChar_ptr(n_attr, 1);
- legacy = gen_int(n_legacy, 2);
-
- ret_val = htmlAttrAllowed((const htmlElemDesc *)elt, (const xmlChar *)attr, legacy);
- desret_htmlStatus(ret_val);
- call_tests++;
- des_const_htmlElemDesc_ptr(n_elt, (const htmlElemDesc *)elt, 0);
- des_const_xmlChar_ptr(n_attr, (const xmlChar *)attr, 1);
- des_int(n_legacy, legacy, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlAttrAllowed",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_elt);
- printf(" %d", n_attr);
- printf(" %d", n_legacy);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_HTML_ENABLED
-
-#define gen_nb_htmlNodePtr 1
-static htmlNodePtr gen_htmlNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_htmlNodePtr(int no ATTRIBUTE_UNUSED, htmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_htmlAutoCloseTag(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- htmlDocPtr doc; /* the HTML document */
- int n_doc;
- xmlChar * name; /* The tag name */
- int n_name;
- htmlNodePtr elem; /* the HTML element */
- int n_elem;
-
- for (n_doc = 0;n_doc < gen_nb_htmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_elem = 0;n_elem < gen_nb_htmlNodePtr;n_elem++) {
- mem_base = xmlMemBlocks();
- doc = gen_htmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- elem = gen_htmlNodePtr(n_elem, 2);
-
- ret_val = htmlAutoCloseTag(doc, (const xmlChar *)name, elem);
- desret_int(ret_val);
- call_tests++;
- des_htmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_htmlNodePtr(n_elem, elem, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlAutoCloseTag",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlCreateMemoryParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlParserCtxtPtr ret_val;
- char * buffer; /* a pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = htmlCreateMemoryParserCtxt((const char *)buffer, size);
- desret_htmlParserCtxtPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlCreateMemoryParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_HTML_ENABLED
-
-#define gen_nb_htmlSAXHandlerPtr 1
-static htmlSAXHandlerPtr gen_htmlSAXHandlerPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_htmlSAXHandlerPtr(int no ATTRIBUTE_UNUSED, htmlSAXHandlerPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_htmlCreatePushParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED)
- int mem_base;
- htmlParserCtxtPtr ret_val;
- htmlSAXHandlerPtr sax; /* a SAX handler */
- int n_sax;
- void * user_data; /* The user data returned on SAX callbacks */
- int n_user_data;
- char * chunk; /* a pointer to an array of chars */
- int n_chunk;
- int size; /* number of chars in the array */
- int n_size;
- const char * filename; /* an optional file name or URI */
- int n_filename;
- xmlCharEncoding enc; /* an optional encoding */
- int n_enc;
-
- for (n_sax = 0;n_sax < gen_nb_htmlSAXHandlerPtr;n_sax++) {
- for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
- for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- sax = gen_htmlSAXHandlerPtr(n_sax, 0);
- user_data = gen_userdata(n_user_data, 1);
- chunk = gen_const_char_ptr(n_chunk, 2);
- size = gen_int(n_size, 3);
- filename = gen_fileoutput(n_filename, 4);
- enc = gen_xmlCharEncoding(n_enc, 5);
- if ((chunk != NULL) &&
- (size > (int) strlen((const char *) chunk) + 1))
- continue;
-
- ret_val = htmlCreatePushParserCtxt(sax, user_data, (const char *)chunk, size, filename, enc);
- desret_htmlParserCtxtPtr(ret_val);
- call_tests++;
- des_htmlSAXHandlerPtr(n_sax, sax, 0);
- des_userdata(n_user_data, user_data, 1);
- des_const_char_ptr(n_chunk, (const char *)chunk, 2);
- des_int(n_size, size, 3);
- des_fileoutput(n_filename, filename, 4);
- des_xmlCharEncoding(n_enc, enc, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlCreatePushParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_user_data);
- printf(" %d", n_chunk);
- printf(" %d", n_size);
- printf(" %d", n_filename);
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlCtxtReadDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
- xmlChar * cur; /* a pointer to a zero terminated string */
- int n_cur;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of htmlParserOption(s) */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
- cur = gen_const_xmlChar_ptr(n_cur, 1);
- URL = gen_filepath(n_URL, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- options = gen_int(n_options, 4);
-
- ret_val = htmlCtxtReadDoc(ctxt, (const xmlChar *)cur, URL, (const char *)encoding, options);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1);
- des_filepath(n_URL, URL, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_int(n_options, options, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlCtxtReadDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlCtxtReadFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- htmlDocPtr ret_val;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
- const char * filename; /* a file or URL */
- int n_filename;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of htmlParserOption(s) */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
- filename = gen_filepath(n_filename, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- options = gen_int(n_options, 3);
-
- ret_val = htmlCtxtReadFile(ctxt, filename, (const char *)encoding, options);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_filepath(n_filename, filename, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_int(n_options, options, 3);
- xmlResetLastError();
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlCtxtReadMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
- char * buffer; /* a pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of htmlParserOption(s) */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
- buffer = gen_const_char_ptr(n_buffer, 1);
- size = gen_int(n_size, 2);
- URL = gen_filepath(n_URL, 3);
- encoding = gen_const_char_ptr(n_encoding, 4);
- options = gen_int(n_options, 5);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = htmlCtxtReadMemory(ctxt, (const char *)buffer, size, URL, (const char *)encoding, options);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_char_ptr(n_buffer, (const char *)buffer, 1);
- des_int(n_size, size, 2);
- des_filepath(n_URL, URL, 3);
- des_const_char_ptr(n_encoding, (const char *)encoding, 4);
- des_int(n_options, options, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlCtxtReadMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlCtxtReset(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
-
- htmlCtxtReset(ctxt);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlCtxtReset",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlCtxtUseOptions(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
- int options; /* a combination of htmlParserOption(s) */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
- options = gen_int(n_options, 1);
-
- ret_val = htmlCtxtUseOptions(ctxt, options);
- desret_int(ret_val);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_int(n_options, options, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlCtxtUseOptions",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlElementAllowedHere(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- htmlElemDesc * parent; /* HTML parent element */
- int n_parent;
- xmlChar * elt; /* HTML element */
- int n_elt;
-
- for (n_parent = 0;n_parent < gen_nb_const_htmlElemDesc_ptr;n_parent++) {
- for (n_elt = 0;n_elt < gen_nb_const_xmlChar_ptr;n_elt++) {
- mem_base = xmlMemBlocks();
- parent = gen_const_htmlElemDesc_ptr(n_parent, 0);
- elt = gen_const_xmlChar_ptr(n_elt, 1);
-
- ret_val = htmlElementAllowedHere((const htmlElemDesc *)parent, (const xmlChar *)elt);
- desret_int(ret_val);
- call_tests++;
- des_const_htmlElemDesc_ptr(n_parent, (const htmlElemDesc *)parent, 0);
- des_const_xmlChar_ptr(n_elt, (const xmlChar *)elt, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlElementAllowedHere",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf(" %d", n_elt);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlElementStatusHere(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlStatus ret_val;
- htmlElemDesc * parent; /* HTML parent element */
- int n_parent;
- htmlElemDesc * elt; /* HTML element */
- int n_elt;
-
- for (n_parent = 0;n_parent < gen_nb_const_htmlElemDesc_ptr;n_parent++) {
- for (n_elt = 0;n_elt < gen_nb_const_htmlElemDesc_ptr;n_elt++) {
- mem_base = xmlMemBlocks();
- parent = gen_const_htmlElemDesc_ptr(n_parent, 0);
- elt = gen_const_htmlElemDesc_ptr(n_elt, 1);
-
- ret_val = htmlElementStatusHere((const htmlElemDesc *)parent, (const htmlElemDesc *)elt);
- desret_htmlStatus(ret_val);
- call_tests++;
- des_const_htmlElemDesc_ptr(n_parent, (const htmlElemDesc *)parent, 0);
- des_const_htmlElemDesc_ptr(n_elt, (const htmlElemDesc *)elt, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlElementStatusHere",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf(" %d", n_elt);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlEncodeEntities(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- unsigned char * out; /* a pointer to an array of bytes to store the result */
- int n_out;
- int * outlen; /* the length of @out */
- int n_outlen;
- unsigned char * in; /* a pointer to an array of UTF-8 chars */
- int n_in;
- int * inlen; /* the length of @in */
- int n_inlen;
- int quoteChar; /* the quote character to escape (' or ") or zero. */
- int n_quoteChar;
-
- for (n_out = 0;n_out < gen_nb_unsigned_char_ptr;n_out++) {
- for (n_outlen = 0;n_outlen < gen_nb_int_ptr;n_outlen++) {
- for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) {
- for (n_inlen = 0;n_inlen < gen_nb_int_ptr;n_inlen++) {
- for (n_quoteChar = 0;n_quoteChar < gen_nb_int;n_quoteChar++) {
- mem_base = xmlMemBlocks();
- out = gen_unsigned_char_ptr(n_out, 0);
- outlen = gen_int_ptr(n_outlen, 1);
- in = gen_const_unsigned_char_ptr(n_in, 2);
- inlen = gen_int_ptr(n_inlen, 3);
- quoteChar = gen_int(n_quoteChar, 4);
-
- ret_val = htmlEncodeEntities(out, outlen, (const unsigned char *)in, inlen, quoteChar);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_char_ptr(n_out, out, 0);
- des_int_ptr(n_outlen, outlen, 1);
- des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 2);
- des_int_ptr(n_inlen, inlen, 3);
- des_int(n_quoteChar, quoteChar, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlEncodeEntities",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_outlen);
- printf(" %d", n_in);
- printf(" %d", n_inlen);
- printf(" %d", n_quoteChar);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlEntityLookup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- const htmlEntityDesc * ret_val;
- xmlChar * name; /* the entity name */
- int n_name;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
-
- ret_val = htmlEntityLookup((const xmlChar *)name);
- desret_const_htmlEntityDesc_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlEntityLookup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlEntityValueLookup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- const htmlEntityDesc * ret_val;
- unsigned int value; /* the entity's unicode value */
- int n_value;
-
- for (n_value = 0;n_value < gen_nb_unsigned_int;n_value++) {
- mem_base = xmlMemBlocks();
- value = gen_unsigned_int(n_value, 0);
-
- ret_val = htmlEntityValueLookup(value);
- desret_const_htmlEntityDesc_ptr(ret_val);
- call_tests++;
- des_unsigned_int(n_value, value, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlEntityValueLookup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlHandleOmittedElem(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- int val; /* int 0 or 1 */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_int(n_val, 0);
-
- ret_val = htmlHandleOmittedElem(val);
- desret_int(ret_val);
- call_tests++;
- des_int(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlHandleOmittedElem",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlIsAutoClosed(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- htmlDocPtr doc; /* the HTML document */
- int n_doc;
- htmlNodePtr elem; /* the HTML element */
- int n_elem;
-
- for (n_doc = 0;n_doc < gen_nb_htmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_htmlNodePtr;n_elem++) {
- mem_base = xmlMemBlocks();
- doc = gen_htmlDocPtr(n_doc, 0);
- elem = gen_htmlNodePtr(n_elem, 1);
-
- ret_val = htmlIsAutoClosed(doc, elem);
- desret_int(ret_val);
- call_tests++;
- des_htmlDocPtr(n_doc, doc, 0);
- des_htmlNodePtr(n_elem, elem, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlIsAutoClosed",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlIsScriptAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * name; /* an attribute name */
- int n_name;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
-
- ret_val = htmlIsScriptAttribute((const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlIsScriptAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNewParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlParserCtxtPtr ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = htmlNewParserCtxt();
- desret_htmlParserCtxtPtr(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNewParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNodeStatus(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlStatus ret_val;
- htmlNodePtr node; /* an htmlNodePtr in a tree */
- int n_node;
- int legacy; /* whether to allow deprecated elements (YES is faster here for Element nodes) */
- int n_legacy;
-
- for (n_node = 0;n_node < gen_nb_const_htmlNodePtr;n_node++) {
- for (n_legacy = 0;n_legacy < gen_nb_int;n_legacy++) {
- mem_base = xmlMemBlocks();
- node = gen_const_htmlNodePtr(n_node, 0);
- legacy = gen_int(n_legacy, 1);
-
- ret_val = htmlNodeStatus((const htmlNodePtr)node, legacy);
- desret_htmlStatus(ret_val);
- call_tests++;
- des_const_htmlNodePtr(n_node, (const htmlNodePtr)node, 0);
- des_int(n_legacy, legacy, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNodeStatus",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_legacy);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlParseCharRef(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = htmlParseCharRef(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlParseCharRef",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlParseChunk(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_PUSH_ENABLED)
- int mem_base;
- int ret_val;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
- char * chunk; /* an char array */
- int n_chunk;
- int size; /* the size in byte of the chunk */
- int n_size;
- int terminate; /* last chunk indicator */
- int n_terminate;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_terminate = 0;n_terminate < gen_nb_int;n_terminate++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
- chunk = gen_const_char_ptr(n_chunk, 1);
- size = gen_int(n_size, 2);
- terminate = gen_int(n_terminate, 3);
- if ((chunk != NULL) &&
- (size > (int) strlen((const char *) chunk) + 1))
- continue;
-
- ret_val = htmlParseChunk(ctxt, (const char *)chunk, size, terminate);
- if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}
- desret_int(ret_val);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_char_ptr(n_chunk, (const char *)chunk, 1);
- des_int(n_size, size, 2);
- des_int(n_terminate, terminate, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlParseChunk",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_chunk);
- printf(" %d", n_size);
- printf(" %d", n_terminate);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlParseDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- xmlChar * cur; /* a pointer to an array of xmlChar */
- int n_cur;
- char * encoding; /* a free form C string describing the HTML document encoding, or NULL */
- int n_encoding;
-
- for (n_cur = 0;n_cur < gen_nb_xmlChar_ptr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlChar_ptr(n_cur, 0);
- encoding = gen_const_char_ptr(n_encoding, 1);
-
- ret_val = htmlParseDoc(cur, (const char *)encoding);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_xmlChar_ptr(n_cur, cur, 0);
- des_const_char_ptr(n_encoding, (const char *)encoding, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlParseDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlParseDocument(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = htmlParseDocument(ctxt);
- if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}
- desret_int(ret_val);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlParseDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlParseElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
-
- htmlParseElement(ctxt);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlParseElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlParseEntityRef(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- const htmlEntityDesc * ret_val;
- htmlParserCtxtPtr ctxt; /* an HTML parser context */
- int n_ctxt;
- xmlChar ** str; /* location to store the entity name */
- int n_str;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_htmlParserCtxtPtr;n_ctxt++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_htmlParserCtxtPtr(n_ctxt, 0);
- str = gen_const_xmlChar_ptr_ptr(n_str, 1);
-
- ret_val = htmlParseEntityRef(ctxt, (const xmlChar **)str);
- desret_const_htmlEntityDesc_ptr(ret_val);
- call_tests++;
- des_htmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr_ptr(n_str, (const xmlChar **)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlParseEntityRef",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlParseFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- htmlDocPtr ret_val;
- const char * filename; /* the filename */
- int n_filename;
- char * encoding; /* a free form C string describing the HTML document encoding, or NULL */
- int n_encoding;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- filename = gen_filepath(n_filename, 0);
- encoding = gen_const_char_ptr(n_encoding, 1);
-
- ret_val = htmlParseFile(filename, (const char *)encoding);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- des_const_char_ptr(n_encoding, (const char *)encoding, 1);
- xmlResetLastError();
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlReadDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- xmlChar * cur; /* a pointer to a zero terminated string */
- int n_cur;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of htmlParserOption(s) */
- int n_options;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlChar_ptr(n_cur, 0);
- URL = gen_filepath(n_URL, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- options = gen_int(n_options, 3);
-
- ret_val = htmlReadDoc((const xmlChar *)cur, URL, (const char *)encoding, options);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0);
- des_filepath(n_URL, URL, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_int(n_options, options, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlReadDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlReadFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- const char * filename; /* a file or URL */
- int n_filename;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of htmlParserOption(s) */
- int n_options;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
- encoding = gen_const_char_ptr(n_encoding, 1);
- options = gen_int(n_options, 2);
-
- ret_val = htmlReadFile(filename, (const char *)encoding, options);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- des_const_char_ptr(n_encoding, (const char *)encoding, 1);
- des_int(n_options, options, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlReadFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlReadMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- char * buffer; /* a pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of htmlParserOption(s) */
- int n_options;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- URL = gen_filepath(n_URL, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- options = gen_int(n_options, 4);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = htmlReadMemory((const char *)buffer, size, URL, (const char *)encoding, options);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- des_filepath(n_URL, URL, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_int(n_options, options, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlReadMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlSAXParseDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- xmlChar * cur; /* a pointer to an array of xmlChar */
- int n_cur;
- char * encoding; /* a free form C string describing the HTML document encoding, or NULL */
- int n_encoding;
- htmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- void * userData; /* if using SAX, this pointer will be provided on callbacks. */
- int n_userData;
-
- for (n_cur = 0;n_cur < gen_nb_xmlChar_ptr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_sax = 0;n_sax < gen_nb_htmlSAXHandlerPtr;n_sax++) {
- for (n_userData = 0;n_userData < gen_nb_userdata;n_userData++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlChar_ptr(n_cur, 0);
- encoding = gen_const_char_ptr(n_encoding, 1);
- sax = gen_htmlSAXHandlerPtr(n_sax, 2);
- userData = gen_userdata(n_userData, 3);
-
- ret_val = htmlSAXParseDoc(cur, (const char *)encoding, sax, userData);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_xmlChar_ptr(n_cur, cur, 0);
- des_const_char_ptr(n_encoding, (const char *)encoding, 1);
- des_htmlSAXHandlerPtr(n_sax, sax, 2);
- des_userdata(n_userData, userData, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlSAXParseDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf(" %d", n_sax);
- printf(" %d", n_userData);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlSAXParseFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- const char * filename; /* the filename */
- int n_filename;
- char * encoding; /* a free form C string describing the HTML document encoding, or NULL */
- int n_encoding;
- htmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- void * userData; /* if using SAX, this pointer will be provided on callbacks. */
- int n_userData;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_sax = 0;n_sax < gen_nb_htmlSAXHandlerPtr;n_sax++) {
- for (n_userData = 0;n_userData < gen_nb_userdata;n_userData++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
- encoding = gen_const_char_ptr(n_encoding, 1);
- sax = gen_htmlSAXHandlerPtr(n_sax, 2);
- userData = gen_userdata(n_userData, 3);
-
- ret_val = htmlSAXParseFile(filename, (const char *)encoding, sax, userData);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- des_const_char_ptr(n_encoding, (const char *)encoding, 1);
- des_htmlSAXHandlerPtr(n_sax, sax, 2);
- des_userdata(n_userData, userData, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlSAXParseFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_encoding);
- printf(" %d", n_sax);
- printf(" %d", n_userData);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlTagLookup(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-static int
-test_HTMLparser(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing HTMLparser : 32 of 38 functions ...\n");
- test_ret += test_UTF8ToHtml();
- test_ret += test_htmlAttrAllowed();
- test_ret += test_htmlAutoCloseTag();
- test_ret += test_htmlCreateMemoryParserCtxt();
- test_ret += test_htmlCreatePushParserCtxt();
- test_ret += test_htmlCtxtReadDoc();
- test_ret += test_htmlCtxtReadFile();
- test_ret += test_htmlCtxtReadMemory();
- test_ret += test_htmlCtxtReset();
- test_ret += test_htmlCtxtUseOptions();
- test_ret += test_htmlElementAllowedHere();
- test_ret += test_htmlElementStatusHere();
- test_ret += test_htmlEncodeEntities();
- test_ret += test_htmlEntityLookup();
- test_ret += test_htmlEntityValueLookup();
- test_ret += test_htmlHandleOmittedElem();
- test_ret += test_htmlIsAutoClosed();
- test_ret += test_htmlIsScriptAttribute();
- test_ret += test_htmlNewParserCtxt();
- test_ret += test_htmlNodeStatus();
- test_ret += test_htmlParseCharRef();
- test_ret += test_htmlParseChunk();
- test_ret += test_htmlParseDoc();
- test_ret += test_htmlParseDocument();
- test_ret += test_htmlParseElement();
- test_ret += test_htmlParseEntityRef();
- test_ret += test_htmlParseFile();
- test_ret += test_htmlReadDoc();
- test_ret += test_htmlReadFile();
- test_ret += test_htmlReadMemory();
- test_ret += test_htmlSAXParseDoc();
- test_ret += test_htmlSAXParseFile();
- test_ret += test_htmlTagLookup();
-
- if (test_ret != 0)
- printf("Module HTMLparser: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_htmlDocContentDumpFormatOutput(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr buf; /* the HTML buffer output */
- int n_buf;
- xmlDocPtr cur; /* the document */
- int n_cur;
- char * encoding; /* the encoding string */
- int n_encoding;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlOutputBufferPtr(n_buf, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- format = gen_int(n_format, 3);
-
- htmlDocContentDumpFormatOutput(buf, cur, (const char *)encoding, format);
- call_tests++;
- des_xmlOutputBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_int(n_format, format, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlDocContentDumpFormatOutput",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlDocContentDumpOutput(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr buf; /* the HTML buffer output */
- int n_buf;
- xmlDocPtr cur; /* the document */
- int n_cur;
- char * encoding; /* the encoding string */
- int n_encoding;
-
- for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlOutputBufferPtr(n_buf, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
-
- htmlDocContentDumpOutput(buf, cur, (const char *)encoding);
- call_tests++;
- des_xmlOutputBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlDocContentDumpOutput",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlDocDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- FILE * f; /* the FILE* */
- int n_f;
- xmlDocPtr cur; /* the document */
- int n_cur;
-
- for (n_f = 0;n_f < gen_nb_FILE_ptr;n_f++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- f = gen_FILE_ptr(n_f, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
-
- ret_val = htmlDocDump(f, cur);
- desret_int(ret_val);
- call_tests++;
- des_FILE_ptr(n_f, f, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlDocDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_f);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlChar_ptr_ptr 1
-static xmlChar ** gen_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlChar_ptr_ptr(int no ATTRIBUTE_UNUSED, xmlChar ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_htmlDocDumpMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlDocPtr cur; /* the document */
- int n_cur;
- xmlChar ** mem; /* OUT: the memory pointer */
- int n_mem;
- int * size; /* OUT: the memory length */
- int n_size;
-
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_mem = 0;n_mem < gen_nb_xmlChar_ptr_ptr;n_mem++) {
- for (n_size = 0;n_size < gen_nb_int_ptr;n_size++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlDocPtr(n_cur, 0);
- mem = gen_xmlChar_ptr_ptr(n_mem, 1);
- size = gen_int_ptr(n_size, 2);
-
- htmlDocDumpMemory(cur, mem, size);
- call_tests++;
- des_xmlDocPtr(n_cur, cur, 0);
- des_xmlChar_ptr_ptr(n_mem, mem, 1);
- des_int_ptr(n_size, size, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlDocDumpMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_mem);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlDocDumpMemoryFormat(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlDocPtr cur; /* the document */
- int n_cur;
- xmlChar ** mem; /* OUT: the memory pointer */
- int n_mem;
- int * size; /* OUT: the memory length */
- int n_size;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_mem = 0;n_mem < gen_nb_xmlChar_ptr_ptr;n_mem++) {
- for (n_size = 0;n_size < gen_nb_int_ptr;n_size++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlDocPtr(n_cur, 0);
- mem = gen_xmlChar_ptr_ptr(n_mem, 1);
- size = gen_int_ptr(n_size, 2);
- format = gen_int(n_format, 3);
-
- htmlDocDumpMemoryFormat(cur, mem, size, format);
- call_tests++;
- des_xmlDocPtr(n_cur, cur, 0);
- des_xmlChar_ptr_ptr(n_mem, mem, 1);
- des_int_ptr(n_size, size, 2);
- des_int(n_format, format, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlDocDumpMemoryFormat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_mem);
- printf(" %d", n_size);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlGetMetaEncoding(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- htmlDocPtr doc; /* the document */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_htmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_htmlDocPtr(n_doc, 0);
-
- ret_val = htmlGetMetaEncoding(doc);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_htmlDocPtr(n_doc, doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlGetMetaEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlIsBooleanAttr(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * name; /* the name of the attribute to check */
- int n_name;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
-
- ret_val = htmlIsBooleanAttr((const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlIsBooleanAttr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNewDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- xmlChar * URI; /* URI for the dtd, or NULL */
- int n_URI;
- xmlChar * ExternalID; /* the external ID of the DTD, or NULL */
- int n_ExternalID;
-
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- mem_base = xmlMemBlocks();
- URI = gen_const_xmlChar_ptr(n_URI, 0);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 1);
-
- ret_val = htmlNewDoc((const xmlChar *)URI, (const xmlChar *)ExternalID);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNewDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URI);
- printf(" %d", n_ExternalID);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNewDocNoDtD(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlDocPtr ret_val;
- xmlChar * URI; /* URI for the dtd, or NULL */
- int n_URI;
- xmlChar * ExternalID; /* the external ID of the DTD, or NULL */
- int n_ExternalID;
-
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- mem_base = xmlMemBlocks();
- URI = gen_const_xmlChar_ptr(n_URI, 0);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 1);
-
- ret_val = htmlNewDocNoDtD((const xmlChar *)URI, (const xmlChar *)ExternalID);
- desret_htmlDocPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNewDocNoDtD",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URI);
- printf(" %d", n_ExternalID);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNodeDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the HTML buffer output */
- int n_buf;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr cur; /* the current node */
- int n_cur;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- cur = gen_xmlNodePtr(n_cur, 2);
-
- ret_val = htmlNodeDump(buf, doc, cur);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_cur, cur, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNodeDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNodeDumpFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- FILE * out; /* the FILE pointer */
- int n_out;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr cur; /* the current node */
- int n_cur;
-
- for (n_out = 0;n_out < gen_nb_FILE_ptr;n_out++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- out = gen_FILE_ptr(n_out, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- cur = gen_xmlNodePtr(n_cur, 2);
-
- htmlNodeDumpFile(out, doc, cur);
- call_tests++;
- des_FILE_ptr(n_out, out, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_cur, cur, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNodeDumpFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNodeDumpFileFormat(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- FILE * out; /* the FILE pointer */
- int n_out;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr cur; /* the current node */
- int n_cur;
- char * encoding; /* the document encoding */
- int n_encoding;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_out = 0;n_out < gen_nb_FILE_ptr;n_out++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- out = gen_FILE_ptr(n_out, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- cur = gen_xmlNodePtr(n_cur, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- format = gen_int(n_format, 4);
-
- ret_val = htmlNodeDumpFileFormat(out, doc, cur, (const char *)encoding, format);
- desret_int(ret_val);
- call_tests++;
- des_FILE_ptr(n_out, out, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_cur, cur, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_int(n_format, format, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNodeDumpFileFormat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNodeDumpFormatOutput(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr buf; /* the HTML buffer output */
- int n_buf;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr cur; /* the current node */
- int n_cur;
- char * encoding; /* the encoding string */
- int n_encoding;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlOutputBufferPtr(n_buf, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- cur = gen_xmlNodePtr(n_cur, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- format = gen_int(n_format, 4);
-
- htmlNodeDumpFormatOutput(buf, doc, cur, (const char *)encoding, format);
- call_tests++;
- des_xmlOutputBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_cur, cur, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_int(n_format, format, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNodeDumpFormatOutput",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlNodeDumpOutput(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr buf; /* the HTML buffer output */
- int n_buf;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr cur; /* the current node */
- int n_cur;
- char * encoding; /* the encoding string */
- int n_encoding;
-
- for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlOutputBufferPtr(n_buf, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- cur = gen_xmlNodePtr(n_cur, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
-
- htmlNodeDumpOutput(buf, doc, cur, (const char *)encoding);
- call_tests++;
- des_xmlOutputBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_cur, cur, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlNodeDumpOutput",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlSaveFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the filename (or URL) */
- int n_filename;
- xmlDocPtr cur; /* the document */
- int n_cur;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
-
- ret_val = htmlSaveFile(filename, cur);
- desret_int(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlSaveFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlSaveFileEnc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the filename */
- int n_filename;
- xmlDocPtr cur; /* the document */
- int n_cur;
- char * encoding; /* the document encoding */
- int n_encoding;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
-
- ret_val = htmlSaveFileEnc(filename, cur, (const char *)encoding);
- desret_int(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlSaveFileEnc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlSaveFileFormat(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the filename */
- int n_filename;
- xmlDocPtr cur; /* the document */
- int n_cur;
- char * encoding; /* the document encoding */
- int n_encoding;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- format = gen_int(n_format, 3);
-
- ret_val = htmlSaveFileFormat(filename, cur, (const char *)encoding, format);
- desret_int(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_int(n_format, format, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlSaveFileFormat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlSetMetaEncoding(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- int ret_val;
- htmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * encoding; /* the encoding string */
- int n_encoding;
-
- for (n_doc = 0;n_doc < gen_nb_htmlDocPtr;n_doc++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_xmlChar_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- doc = gen_htmlDocPtr(n_doc, 0);
- encoding = gen_const_xmlChar_ptr(n_encoding, 1);
-
- ret_val = htmlSetMetaEncoding(doc, (const xmlChar *)encoding);
- desret_int(ret_val);
- call_tests++;
- des_htmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_encoding, (const xmlChar *)encoding, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlSetMetaEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_HTMLtree(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing HTMLtree : 18 of 18 functions ...\n");
- test_ret += test_htmlDocContentDumpFormatOutput();
- test_ret += test_htmlDocContentDumpOutput();
- test_ret += test_htmlDocDump();
- test_ret += test_htmlDocDumpMemory();
- test_ret += test_htmlDocDumpMemoryFormat();
- test_ret += test_htmlGetMetaEncoding();
- test_ret += test_htmlIsBooleanAttr();
- test_ret += test_htmlNewDoc();
- test_ret += test_htmlNewDocNoDtD();
- test_ret += test_htmlNodeDump();
- test_ret += test_htmlNodeDumpFile();
- test_ret += test_htmlNodeDumpFileFormat();
- test_ret += test_htmlNodeDumpFormatOutput();
- test_ret += test_htmlNodeDumpOutput();
- test_ret += test_htmlSaveFile();
- test_ret += test_htmlSaveFileEnc();
- test_ret += test_htmlSaveFileFormat();
- test_ret += test_htmlSetMetaEncoding();
-
- if (test_ret != 0)
- printf("Module HTMLtree: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_docbDefaultSAXHandlerInit(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DOCB_ENABLED)
-#ifdef LIBXML_DOCB_ENABLED
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- docbDefaultSAXHandlerInit();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in docbDefaultSAXHandlerInit",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlDefaultSAXHandlerInit(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
-#ifdef LIBXML_HTML_ENABLED
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- htmlDefaultSAXHandlerInit();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlDefaultSAXHandlerInit",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDefaultSAXHandlerInit(void) {
- int test_ret = 0;
-
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlDefaultSAXHandlerInit();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDefaultSAXHandlerInit",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlEnumerationPtr 1
-static xmlEnumerationPtr gen_xmlEnumerationPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlEnumerationPtr(int no ATTRIBUTE_UNUSED, xmlEnumerationPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlSAX2AttributeDecl(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * elem; /* the name of the element */
- int n_elem;
- xmlChar * fullname; /* the attribute name */
- int n_fullname;
- int type; /* the attribute type */
- int n_type;
- int def; /* the type of default value */
- int n_def;
- xmlChar * defaultValue; /* the attribute default value */
- int n_defaultValue;
- xmlEnumerationPtr tree; /* the tree of enumerated value set */
- int n_tree;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_elem = 0;n_elem < gen_nb_const_xmlChar_ptr;n_elem++) {
- for (n_fullname = 0;n_fullname < gen_nb_const_xmlChar_ptr;n_fullname++) {
- for (n_type = 0;n_type < gen_nb_int;n_type++) {
- for (n_def = 0;n_def < gen_nb_int;n_def++) {
- for (n_defaultValue = 0;n_defaultValue < gen_nb_const_xmlChar_ptr;n_defaultValue++) {
- for (n_tree = 0;n_tree < gen_nb_xmlEnumerationPtr;n_tree++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- elem = gen_const_xmlChar_ptr(n_elem, 1);
- fullname = gen_const_xmlChar_ptr(n_fullname, 2);
- type = gen_int(n_type, 3);
- def = gen_int(n_def, 4);
- defaultValue = gen_const_xmlChar_ptr(n_defaultValue, 5);
- tree = gen_xmlEnumerationPtr(n_tree, 6);
-
- xmlSAX2AttributeDecl(ctx, (const xmlChar *)elem, (const xmlChar *)fullname, type, def, (const xmlChar *)defaultValue, tree);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_elem, (const xmlChar *)elem, 1);
- des_const_xmlChar_ptr(n_fullname, (const xmlChar *)fullname, 2);
- des_int(n_type, type, 3);
- des_int(n_def, def, 4);
- des_const_xmlChar_ptr(n_defaultValue, (const xmlChar *)defaultValue, 5);
- des_xmlEnumerationPtr(n_tree, tree, 6);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2AttributeDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_elem);
- printf(" %d", n_fullname);
- printf(" %d", n_type);
- printf(" %d", n_def);
- printf(" %d", n_defaultValue);
- printf(" %d", n_tree);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2CDataBlock(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * value; /* The pcdata content */
- int n_value;
- int len; /* the block length */
- int n_len;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
- len = gen_int(n_len, 2);
- if ((value != NULL) &&
- (len > (int) strlen((const char *) value) + 1))
- continue;
-
- xmlSAX2CDataBlock(ctx, (const xmlChar *)value, len);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2CDataBlock",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_value);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2Characters(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * ch; /* a xmlChar string */
- int n_ch;
- int len; /* the number of xmlChar */
- int n_len;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_ch = 0;n_ch < gen_nb_const_xmlChar_ptr;n_ch++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- ch = gen_const_xmlChar_ptr(n_ch, 1);
- len = gen_int(n_len, 2);
- if ((ch != NULL) &&
- (len > (int) strlen((const char *) ch) + 1))
- continue;
-
- xmlSAX2Characters(ctx, (const xmlChar *)ch, len);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_ch, (const xmlChar *)ch, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2Characters",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_ch);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2Comment(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * value; /* the xmlSAX2Comment content */
- int n_value;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
-
- xmlSAX2Comment(ctx, (const xmlChar *)value);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2Comment",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2ElementDecl(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* the element name */
- int n_name;
- int type; /* the element type */
- int n_type;
- xmlElementContentPtr content; /* the element value tree */
- int n_content;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_type = 0;n_type < gen_nb_int;n_type++) {
- for (n_content = 0;n_content < gen_nb_xmlElementContentPtr;n_content++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- type = gen_int(n_type, 2);
- content = gen_xmlElementContentPtr(n_content, 3);
-
- xmlSAX2ElementDecl(ctx, (const xmlChar *)name, type, content);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_int(n_type, type, 2);
- des_xmlElementContentPtr(n_content, content, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2ElementDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf(" %d", n_type);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2EndDocument(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- xmlSAX2EndDocument(ctx);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2EndDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2EndElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* The element name */
- int n_name;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- xmlSAX2EndElement(ctx, (const xmlChar *)name);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2EndElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2EndElementNs(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * localname; /* the local name of the element */
- int n_localname;
- xmlChar * prefix; /* the element namespace prefix if available */
- int n_prefix;
- xmlChar * URI; /* the element namespace name if available */
- int n_URI;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_localname = 0;n_localname < gen_nb_const_xmlChar_ptr;n_localname++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- localname = gen_const_xmlChar_ptr(n_localname, 1);
- prefix = gen_const_xmlChar_ptr(n_prefix, 2);
- URI = gen_const_xmlChar_ptr(n_URI, 3);
-
- xmlSAX2EndElementNs(ctx, (const xmlChar *)localname, (const xmlChar *)prefix, (const xmlChar *)URI);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_localname, (const xmlChar *)localname, 1);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 2);
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2EndElementNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_localname);
- printf(" %d", n_prefix);
- printf(" %d", n_URI);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2EntityDecl(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* the entity name */
- int n_name;
- int type; /* the entity type */
- int n_type;
- xmlChar * publicId; /* The public ID of the entity */
- int n_publicId;
- xmlChar * systemId; /* The system ID of the entity */
- int n_systemId;
- xmlChar * content; /* the entity value (without processing). */
- int n_content;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_type = 0;n_type < gen_nb_int;n_type++) {
- for (n_publicId = 0;n_publicId < gen_nb_const_xmlChar_ptr;n_publicId++) {
- for (n_systemId = 0;n_systemId < gen_nb_const_xmlChar_ptr;n_systemId++) {
- for (n_content = 0;n_content < gen_nb_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- type = gen_int(n_type, 2);
- publicId = gen_const_xmlChar_ptr(n_publicId, 3);
- systemId = gen_const_xmlChar_ptr(n_systemId, 4);
- content = gen_xmlChar_ptr(n_content, 5);
-
- xmlSAX2EntityDecl(ctx, (const xmlChar *)name, type, (const xmlChar *)publicId, (const xmlChar *)systemId, content);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_int(n_type, type, 2);
- des_const_xmlChar_ptr(n_publicId, (const xmlChar *)publicId, 3);
- des_const_xmlChar_ptr(n_systemId, (const xmlChar *)systemId, 4);
- des_xmlChar_ptr(n_content, content, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2EntityDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf(" %d", n_type);
- printf(" %d", n_publicId);
- printf(" %d", n_systemId);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2ExternalSubset(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* the root element name */
- int n_name;
- xmlChar * ExternalID; /* the external ID */
- int n_ExternalID;
- xmlChar * SystemID; /* the SYSTEM ID (e.g. filename or URL) */
- int n_SystemID;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 3);
-
- xmlSAX2ExternalSubset(ctx, (const xmlChar *)name, (const xmlChar *)ExternalID, (const xmlChar *)SystemID);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 2);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2ExternalSubset",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2GetColumnNumber(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- ret_val = xmlSAX2GetColumnNumber(ctx);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2GetColumnNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2GetEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* The entity name */
- int n_name;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlSAX2GetEntity(ctx, (const xmlChar *)name);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2GetEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2GetLineNumber(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- ret_val = xmlSAX2GetLineNumber(ctx);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2GetLineNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2GetParameterEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* The entity name */
- int n_name;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlSAX2GetParameterEntity(ctx, (const xmlChar *)name);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2GetParameterEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2GetPublicId(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- ret_val = xmlSAX2GetPublicId(ctx);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2GetPublicId",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2GetSystemId(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- ret_val = xmlSAX2GetSystemId(ctx);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2GetSystemId",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2HasExternalSubset(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- ret_val = xmlSAX2HasExternalSubset(ctx);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2HasExternalSubset",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2HasInternalSubset(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- ret_val = xmlSAX2HasInternalSubset(ctx);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2HasInternalSubset",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2IgnorableWhitespace(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * ch; /* a xmlChar string */
- int n_ch;
- int len; /* the number of xmlChar */
- int n_len;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_ch = 0;n_ch < gen_nb_const_xmlChar_ptr;n_ch++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- ch = gen_const_xmlChar_ptr(n_ch, 1);
- len = gen_int(n_len, 2);
- if ((ch != NULL) &&
- (len > (int) strlen((const char *) ch) + 1))
- continue;
-
- xmlSAX2IgnorableWhitespace(ctx, (const xmlChar *)ch, len);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_ch, (const xmlChar *)ch, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2IgnorableWhitespace",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_ch);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlSAXHandler_ptr 1
-static xmlSAXHandler * gen_xmlSAXHandler_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSAXHandler_ptr(int no ATTRIBUTE_UNUSED, xmlSAXHandler * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlSAX2InitDefaultSAXHandler(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlSAXHandler * hdlr; /* the SAX handler */
- int n_hdlr;
- int warning; /* flag if non-zero sets the handler warning procedure */
- int n_warning;
-
- for (n_hdlr = 0;n_hdlr < gen_nb_xmlSAXHandler_ptr;n_hdlr++) {
- for (n_warning = 0;n_warning < gen_nb_int;n_warning++) {
- mem_base = xmlMemBlocks();
- hdlr = gen_xmlSAXHandler_ptr(n_hdlr, 0);
- warning = gen_int(n_warning, 1);
-
- xmlSAX2InitDefaultSAXHandler(hdlr, warning);
- call_tests++;
- des_xmlSAXHandler_ptr(n_hdlr, hdlr, 0);
- des_int(n_warning, warning, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2InitDefaultSAXHandler",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_hdlr);
- printf(" %d", n_warning);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2InitDocbDefaultSAXHandler(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DOCB_ENABLED)
- int mem_base;
- xmlSAXHandler * hdlr; /* the SAX handler */
- int n_hdlr;
-
- for (n_hdlr = 0;n_hdlr < gen_nb_xmlSAXHandler_ptr;n_hdlr++) {
- mem_base = xmlMemBlocks();
- hdlr = gen_xmlSAXHandler_ptr(n_hdlr, 0);
-
- xmlSAX2InitDocbDefaultSAXHandler(hdlr);
- call_tests++;
- des_xmlSAXHandler_ptr(n_hdlr, hdlr, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2InitDocbDefaultSAXHandler",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_hdlr);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2InitHtmlDefaultSAXHandler(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- xmlSAXHandler * hdlr; /* the SAX handler */
- int n_hdlr;
-
- for (n_hdlr = 0;n_hdlr < gen_nb_xmlSAXHandler_ptr;n_hdlr++) {
- mem_base = xmlMemBlocks();
- hdlr = gen_xmlSAXHandler_ptr(n_hdlr, 0);
-
- xmlSAX2InitHtmlDefaultSAXHandler(hdlr);
- call_tests++;
- des_xmlSAXHandler_ptr(n_hdlr, hdlr, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2InitHtmlDefaultSAXHandler",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_hdlr);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2InternalSubset(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* the root element name */
- int n_name;
- xmlChar * ExternalID; /* the external ID */
- int n_ExternalID;
- xmlChar * SystemID; /* the SYSTEM ID (e.g. filename or URL) */
- int n_SystemID;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 3);
-
- xmlSAX2InternalSubset(ctx, (const xmlChar *)name, (const xmlChar *)ExternalID, (const xmlChar *)SystemID);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 2);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2InternalSubset",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2IsStandalone(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- ret_val = xmlSAX2IsStandalone(ctx);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2IsStandalone",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2NotationDecl(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* The name of the notation */
- int n_name;
- xmlChar * publicId; /* The public ID of the entity */
- int n_publicId;
- xmlChar * systemId; /* The system ID of the entity */
- int n_systemId;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_publicId = 0;n_publicId < gen_nb_const_xmlChar_ptr;n_publicId++) {
- for (n_systemId = 0;n_systemId < gen_nb_const_xmlChar_ptr;n_systemId++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- publicId = gen_const_xmlChar_ptr(n_publicId, 2);
- systemId = gen_const_xmlChar_ptr(n_systemId, 3);
-
- xmlSAX2NotationDecl(ctx, (const xmlChar *)name, (const xmlChar *)publicId, (const xmlChar *)systemId);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_publicId, (const xmlChar *)publicId, 2);
- des_const_xmlChar_ptr(n_systemId, (const xmlChar *)systemId, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2NotationDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf(" %d", n_publicId);
- printf(" %d", n_systemId);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2ProcessingInstruction(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * target; /* the target name */
- int n_target;
- xmlChar * data; /* the PI data's */
- int n_data;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_target = 0;n_target < gen_nb_const_xmlChar_ptr;n_target++) {
- for (n_data = 0;n_data < gen_nb_const_xmlChar_ptr;n_data++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- target = gen_const_xmlChar_ptr(n_target, 1);
- data = gen_const_xmlChar_ptr(n_data, 2);
-
- xmlSAX2ProcessingInstruction(ctx, (const xmlChar *)target, (const xmlChar *)data);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_target, (const xmlChar *)target, 1);
- des_const_xmlChar_ptr(n_data, (const xmlChar *)data, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2ProcessingInstruction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_target);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2Reference(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* The entity name */
- int n_name;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- xmlSAX2Reference(ctx, (const xmlChar *)name);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2Reference",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2ResolveEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * publicId; /* The public ID of the entity */
- int n_publicId;
- xmlChar * systemId; /* The system ID of the entity */
- int n_systemId;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_publicId = 0;n_publicId < gen_nb_const_xmlChar_ptr;n_publicId++) {
- for (n_systemId = 0;n_systemId < gen_nb_const_xmlChar_ptr;n_systemId++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- publicId = gen_const_xmlChar_ptr(n_publicId, 1);
- systemId = gen_const_xmlChar_ptr(n_systemId, 2);
-
- ret_val = xmlSAX2ResolveEntity(ctx, (const xmlChar *)publicId, (const xmlChar *)systemId);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_publicId, (const xmlChar *)publicId, 1);
- des_const_xmlChar_ptr(n_systemId, (const xmlChar *)systemId, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2ResolveEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_publicId);
- printf(" %d", n_systemId);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlSAXLocatorPtr 1
-static xmlSAXLocatorPtr gen_xmlSAXLocatorPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSAXLocatorPtr(int no ATTRIBUTE_UNUSED, xmlSAXLocatorPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlSAX2SetDocumentLocator(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlSAXLocatorPtr loc; /* A SAX Locator */
- int n_loc;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_loc = 0;n_loc < gen_nb_xmlSAXLocatorPtr;n_loc++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- loc = gen_xmlSAXLocatorPtr(n_loc, 1);
-
- xmlSAX2SetDocumentLocator(ctx, loc);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_xmlSAXLocatorPtr(n_loc, loc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2SetDocumentLocator",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_loc);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2StartDocument(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- xmlSAX2StartDocument(ctx);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2StartDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2StartElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * fullname; /* The element name, including namespace prefix */
- int n_fullname;
- xmlChar ** atts; /* An array of name/value attributes pairs, NULL terminated */
- int n_atts;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_fullname = 0;n_fullname < gen_nb_const_xmlChar_ptr;n_fullname++) {
- for (n_atts = 0;n_atts < gen_nb_const_xmlChar_ptr_ptr;n_atts++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- fullname = gen_const_xmlChar_ptr(n_fullname, 1);
- atts = gen_const_xmlChar_ptr_ptr(n_atts, 2);
-
- xmlSAX2StartElement(ctx, (const xmlChar *)fullname, (const xmlChar **)atts);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_fullname, (const xmlChar *)fullname, 1);
- des_const_xmlChar_ptr_ptr(n_atts, (const xmlChar **)atts, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2StartElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_fullname);
- printf(" %d", n_atts);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2StartElementNs(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * localname; /* the local name of the element */
- int n_localname;
- xmlChar * prefix; /* the element namespace prefix if available */
- int n_prefix;
- xmlChar * URI; /* the element namespace name if available */
- int n_URI;
- int nb_namespaces; /* number of namespace definitions on that node */
- int n_nb_namespaces;
- xmlChar ** namespaces; /* pointer to the array of prefix/URI pairs namespace definitions */
- int n_namespaces;
- int nb_attributes; /* the number of attributes on that node */
- int n_nb_attributes;
- int nb_defaulted; /* the number of defaulted attributes. */
- int n_nb_defaulted;
- xmlChar ** attributes; /* pointer to the array of (localname/prefix/URI/value/end) attribute values. */
- int n_attributes;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_localname = 0;n_localname < gen_nb_const_xmlChar_ptr;n_localname++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- for (n_nb_namespaces = 0;n_nb_namespaces < gen_nb_int;n_nb_namespaces++) {
- for (n_namespaces = 0;n_namespaces < gen_nb_const_xmlChar_ptr_ptr;n_namespaces++) {
- for (n_nb_attributes = 0;n_nb_attributes < gen_nb_int;n_nb_attributes++) {
- for (n_nb_defaulted = 0;n_nb_defaulted < gen_nb_int;n_nb_defaulted++) {
- for (n_attributes = 0;n_attributes < gen_nb_const_xmlChar_ptr_ptr;n_attributes++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- localname = gen_const_xmlChar_ptr(n_localname, 1);
- prefix = gen_const_xmlChar_ptr(n_prefix, 2);
- URI = gen_const_xmlChar_ptr(n_URI, 3);
- nb_namespaces = gen_int(n_nb_namespaces, 4);
- namespaces = gen_const_xmlChar_ptr_ptr(n_namespaces, 5);
- nb_attributes = gen_int(n_nb_attributes, 6);
- nb_defaulted = gen_int(n_nb_defaulted, 7);
- attributes = gen_const_xmlChar_ptr_ptr(n_attributes, 8);
-
- xmlSAX2StartElementNs(ctx, (const xmlChar *)localname, (const xmlChar *)prefix, (const xmlChar *)URI, nb_namespaces, (const xmlChar **)namespaces, nb_attributes, nb_defaulted, (const xmlChar **)attributes);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_localname, (const xmlChar *)localname, 1);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 2);
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 3);
- des_int(n_nb_namespaces, nb_namespaces, 4);
- des_const_xmlChar_ptr_ptr(n_namespaces, (const xmlChar **)namespaces, 5);
- des_int(n_nb_attributes, nb_attributes, 6);
- des_int(n_nb_defaulted, nb_defaulted, 7);
- des_const_xmlChar_ptr_ptr(n_attributes, (const xmlChar **)attributes, 8);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2StartElementNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_localname);
- printf(" %d", n_prefix);
- printf(" %d", n_URI);
- printf(" %d", n_nb_namespaces);
- printf(" %d", n_namespaces);
- printf(" %d", n_nb_attributes);
- printf(" %d", n_nb_defaulted);
- printf(" %d", n_attributes);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAX2UnparsedEntityDecl(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* the user data (XML parser context) */
- int n_ctx;
- xmlChar * name; /* The name of the entity */
- int n_name;
- xmlChar * publicId; /* The public ID of the entity */
- int n_publicId;
- xmlChar * systemId; /* The system ID of the entity */
- int n_systemId;
- xmlChar * notationName; /* the name of the notation */
- int n_notationName;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_publicId = 0;n_publicId < gen_nb_const_xmlChar_ptr;n_publicId++) {
- for (n_systemId = 0;n_systemId < gen_nb_const_xmlChar_ptr;n_systemId++) {
- for (n_notationName = 0;n_notationName < gen_nb_const_xmlChar_ptr;n_notationName++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- publicId = gen_const_xmlChar_ptr(n_publicId, 2);
- systemId = gen_const_xmlChar_ptr(n_systemId, 3);
- notationName = gen_const_xmlChar_ptr(n_notationName, 4);
-
- xmlSAX2UnparsedEntityDecl(ctx, (const xmlChar *)name, (const xmlChar *)publicId, (const xmlChar *)systemId, (const xmlChar *)notationName);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_publicId, (const xmlChar *)publicId, 2);
- des_const_xmlChar_ptr(n_systemId, (const xmlChar *)systemId, 3);
- des_const_xmlChar_ptr(n_notationName, (const xmlChar *)notationName, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAX2UnparsedEntityDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_name);
- printf(" %d", n_publicId);
- printf(" %d", n_systemId);
- printf(" %d", n_notationName);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXDefaultVersion(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- int ret_val;
- int version; /* the version, 1 or 2 */
- int n_version;
-
- for (n_version = 0;n_version < gen_nb_int;n_version++) {
- mem_base = xmlMemBlocks();
- version = gen_int(n_version, 0);
-
- ret_val = xmlSAXDefaultVersion(version);
- desret_int(ret_val);
- call_tests++;
- des_int(n_version, version, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXDefaultVersion",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_version);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXVersion(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlSAXHandler * hdlr; /* the SAX handler */
- int n_hdlr;
- int version; /* the version, 1 or 2 */
- int n_version;
-
- for (n_hdlr = 0;n_hdlr < gen_nb_xmlSAXHandler_ptr;n_hdlr++) {
- for (n_version = 0;n_version < gen_nb_int;n_version++) {
- mem_base = xmlMemBlocks();
- hdlr = gen_xmlSAXHandler_ptr(n_hdlr, 0);
- version = gen_int(n_version, 1);
-
- ret_val = xmlSAXVersion(hdlr, version);
- desret_int(ret_val);
- call_tests++;
- des_xmlSAXHandler_ptr(n_hdlr, hdlr, 0);
- des_int(n_version, version, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXVersion",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_hdlr);
- printf(" %d", n_version);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_SAX2(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing SAX2 : 38 of 38 functions ...\n");
- test_ret += test_docbDefaultSAXHandlerInit();
- test_ret += test_htmlDefaultSAXHandlerInit();
- test_ret += test_xmlDefaultSAXHandlerInit();
- test_ret += test_xmlSAX2AttributeDecl();
- test_ret += test_xmlSAX2CDataBlock();
- test_ret += test_xmlSAX2Characters();
- test_ret += test_xmlSAX2Comment();
- test_ret += test_xmlSAX2ElementDecl();
- test_ret += test_xmlSAX2EndDocument();
- test_ret += test_xmlSAX2EndElement();
- test_ret += test_xmlSAX2EndElementNs();
- test_ret += test_xmlSAX2EntityDecl();
- test_ret += test_xmlSAX2ExternalSubset();
- test_ret += test_xmlSAX2GetColumnNumber();
- test_ret += test_xmlSAX2GetEntity();
- test_ret += test_xmlSAX2GetLineNumber();
- test_ret += test_xmlSAX2GetParameterEntity();
- test_ret += test_xmlSAX2GetPublicId();
- test_ret += test_xmlSAX2GetSystemId();
- test_ret += test_xmlSAX2HasExternalSubset();
- test_ret += test_xmlSAX2HasInternalSubset();
- test_ret += test_xmlSAX2IgnorableWhitespace();
- test_ret += test_xmlSAX2InitDefaultSAXHandler();
- test_ret += test_xmlSAX2InitDocbDefaultSAXHandler();
- test_ret += test_xmlSAX2InitHtmlDefaultSAXHandler();
- test_ret += test_xmlSAX2InternalSubset();
- test_ret += test_xmlSAX2IsStandalone();
- test_ret += test_xmlSAX2NotationDecl();
- test_ret += test_xmlSAX2ProcessingInstruction();
- test_ret += test_xmlSAX2Reference();
- test_ret += test_xmlSAX2ResolveEntity();
- test_ret += test_xmlSAX2SetDocumentLocator();
- test_ret += test_xmlSAX2StartDocument();
- test_ret += test_xmlSAX2StartElement();
- test_ret += test_xmlSAX2StartElementNs();
- test_ret += test_xmlSAX2UnparsedEntityDecl();
- test_ret += test_xmlSAXDefaultVersion();
- test_ret += test_xmlSAXVersion();
-
- if (test_ret != 0)
- printf("Module SAX2: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlC14NDocDumpMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the XML document for canonization */
- int n_doc;
- xmlNodeSetPtr nodes; /* the nodes set to be included in the canonized image or NULL if all document nodes should be included */
- int n_nodes;
- int mode; /* the c14n mode (see @xmlC14NMode) */
- int n_mode;
- xmlChar ** inclusive_ns_prefixes; /* the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise) */
- int n_inclusive_ns_prefixes;
- int with_comments; /* include comments in the result (!=0) or not (==0) */
- int n_with_comments;
- xmlChar ** doc_txt_ptr; /* the memory pointer for allocated canonical XML text; the caller of this functions is responsible for calling xmlFree() to free allocated memory */
- int n_doc_txt_ptr;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- for (n_mode = 0;n_mode < gen_nb_int;n_mode++) {
- for (n_inclusive_ns_prefixes = 0;n_inclusive_ns_prefixes < gen_nb_xmlChar_ptr_ptr;n_inclusive_ns_prefixes++) {
- for (n_with_comments = 0;n_with_comments < gen_nb_int;n_with_comments++) {
- for (n_doc_txt_ptr = 0;n_doc_txt_ptr < gen_nb_xmlChar_ptr_ptr;n_doc_txt_ptr++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- nodes = gen_xmlNodeSetPtr(n_nodes, 1);
- mode = gen_int(n_mode, 2);
- inclusive_ns_prefixes = gen_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, 3);
- with_comments = gen_int(n_with_comments, 4);
- doc_txt_ptr = gen_xmlChar_ptr_ptr(n_doc_txt_ptr, 5);
-
- ret_val = xmlC14NDocDumpMemory(doc, nodes, mode, inclusive_ns_prefixes, with_comments, doc_txt_ptr);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodeSetPtr(n_nodes, nodes, 1);
- des_int(n_mode, mode, 2);
- des_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, inclusive_ns_prefixes, 3);
- des_int(n_with_comments, with_comments, 4);
- des_xmlChar_ptr_ptr(n_doc_txt_ptr, doc_txt_ptr, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlC14NDocDumpMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_nodes);
- printf(" %d", n_mode);
- printf(" %d", n_inclusive_ns_prefixes);
- printf(" %d", n_with_comments);
- printf(" %d", n_doc_txt_ptr);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlC14NDocSave(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the XML document for canonization */
- int n_doc;
- xmlNodeSetPtr nodes; /* the nodes set to be included in the canonized image or NULL if all document nodes should be included */
- int n_nodes;
- int mode; /* the c14n mode (see @xmlC14NMode) */
- int n_mode;
- xmlChar ** inclusive_ns_prefixes; /* the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise) */
- int n_inclusive_ns_prefixes;
- int with_comments; /* include comments in the result (!=0) or not (==0) */
- int n_with_comments;
- const char * filename; /* the filename to store canonical XML image */
- int n_filename;
- int compression; /* the compression level (zlib requred): -1 - libxml default, 0 - uncompressed, >0 - compression level */
- int n_compression;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- for (n_mode = 0;n_mode < gen_nb_int;n_mode++) {
- for (n_inclusive_ns_prefixes = 0;n_inclusive_ns_prefixes < gen_nb_xmlChar_ptr_ptr;n_inclusive_ns_prefixes++) {
- for (n_with_comments = 0;n_with_comments < gen_nb_int;n_with_comments++) {
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_compression = 0;n_compression < gen_nb_int;n_compression++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- nodes = gen_xmlNodeSetPtr(n_nodes, 1);
- mode = gen_int(n_mode, 2);
- inclusive_ns_prefixes = gen_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, 3);
- with_comments = gen_int(n_with_comments, 4);
- filename = gen_fileoutput(n_filename, 5);
- compression = gen_int(n_compression, 6);
-
- ret_val = xmlC14NDocSave(doc, nodes, mode, inclusive_ns_prefixes, with_comments, filename, compression);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodeSetPtr(n_nodes, nodes, 1);
- des_int(n_mode, mode, 2);
- des_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, inclusive_ns_prefixes, 3);
- des_int(n_with_comments, with_comments, 4);
- des_fileoutput(n_filename, filename, 5);
- des_int(n_compression, compression, 6);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlC14NDocSave",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_nodes);
- printf(" %d", n_mode);
- printf(" %d", n_inclusive_ns_prefixes);
- printf(" %d", n_with_comments);
- printf(" %d", n_filename);
- printf(" %d", n_compression);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlC14NDocSaveTo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_C14N_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the XML document for canonization */
- int n_doc;
- xmlNodeSetPtr nodes; /* the nodes set to be included in the canonized image or NULL if all document nodes should be included */
- int n_nodes;
- int mode; /* the c14n mode (see @xmlC14NMode) */
- int n_mode;
- xmlChar ** inclusive_ns_prefixes; /* the list of inclusive namespace prefixes ended with a NULL or NULL if there is no inclusive namespaces (only for exclusive canonicalization, ignored otherwise) */
- int n_inclusive_ns_prefixes;
- int with_comments; /* include comments in the result (!=0) or not (==0) */
- int n_with_comments;
- xmlOutputBufferPtr buf; /* the output buffer to store canonical XML; this buffer MUST have encoder==NULL because C14N requires UTF-8 output */
- int n_buf;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- for (n_mode = 0;n_mode < gen_nb_int;n_mode++) {
- for (n_inclusive_ns_prefixes = 0;n_inclusive_ns_prefixes < gen_nb_xmlChar_ptr_ptr;n_inclusive_ns_prefixes++) {
- for (n_with_comments = 0;n_with_comments < gen_nb_int;n_with_comments++) {
- for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- nodes = gen_xmlNodeSetPtr(n_nodes, 1);
- mode = gen_int(n_mode, 2);
- inclusive_ns_prefixes = gen_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, 3);
- with_comments = gen_int(n_with_comments, 4);
- buf = gen_xmlOutputBufferPtr(n_buf, 5);
-
- ret_val = xmlC14NDocSaveTo(doc, nodes, mode, inclusive_ns_prefixes, with_comments, buf);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodeSetPtr(n_nodes, nodes, 1);
- des_int(n_mode, mode, 2);
- des_xmlChar_ptr_ptr(n_inclusive_ns_prefixes, inclusive_ns_prefixes, 3);
- des_int(n_with_comments, with_comments, 4);
- des_xmlOutputBufferPtr(n_buf, buf, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlC14NDocSaveTo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_nodes);
- printf(" %d", n_mode);
- printf(" %d", n_inclusive_ns_prefixes);
- printf(" %d", n_with_comments);
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlC14NExecute(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-static int
-test_c14n(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing c14n : 3 of 4 functions ...\n");
- test_ret += test_xmlC14NDocDumpMemory();
- test_ret += test_xmlC14NDocSave();
- test_ret += test_xmlC14NDocSaveTo();
- test_ret += test_xmlC14NExecute();
-
- if (test_ret != 0)
- printf("Module c14n: %d errors\n", test_ret);
- return(test_ret);
-}
-#ifdef LIBXML_CATALOG_ENABLED
-
-#define gen_nb_xmlCatalogPtr 1
-static xmlCatalogPtr gen_xmlCatalogPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlCatalogPtr(int no ATTRIBUTE_UNUSED, xmlCatalogPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlACatalogAdd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- int ret_val;
- xmlCatalogPtr catal; /* a Catalog */
- int n_catal;
- xmlChar * type; /* the type of record to add to the catalog */
- int n_type;
- xmlChar * orig; /* the system, public or prefix to match */
- int n_orig;
- xmlChar * replace; /* the replacement value for the match */
- int n_replace;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- for (n_type = 0;n_type < gen_nb_const_xmlChar_ptr;n_type++) {
- for (n_orig = 0;n_orig < gen_nb_const_xmlChar_ptr;n_orig++) {
- for (n_replace = 0;n_replace < gen_nb_const_xmlChar_ptr;n_replace++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
- type = gen_const_xmlChar_ptr(n_type, 1);
- orig = gen_const_xmlChar_ptr(n_orig, 2);
- replace = gen_const_xmlChar_ptr(n_replace, 3);
-
- ret_val = xmlACatalogAdd(catal, (const xmlChar *)type, (const xmlChar *)orig, (const xmlChar *)replace);
- desret_int(ret_val);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- des_const_xmlChar_ptr(n_type, (const xmlChar *)type, 1);
- des_const_xmlChar_ptr(n_orig, (const xmlChar *)orig, 2);
- des_const_xmlChar_ptr(n_replace, (const xmlChar *)replace, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlACatalogAdd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf(" %d", n_type);
- printf(" %d", n_orig);
- printf(" %d", n_replace);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlACatalogDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlCatalogPtr catal; /* a Catalog */
- int n_catal;
- FILE * out; /* the file. */
- int n_out;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- for (n_out = 0;n_out < gen_nb_FILE_ptr;n_out++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
- out = gen_FILE_ptr(n_out, 1);
-
- xmlACatalogDump(catal, out);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- des_FILE_ptr(n_out, out, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlACatalogDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf(" %d", n_out);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlACatalogRemove(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- int ret_val;
- xmlCatalogPtr catal; /* a Catalog */
- int n_catal;
- xmlChar * value; /* the value to remove */
- int n_value;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
-
- ret_val = xmlACatalogRemove(catal, (const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlACatalogRemove",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlACatalogResolve(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlCatalogPtr catal; /* a Catalog */
- int n_catal;
- xmlChar * pubID; /* the public ID string */
- int n_pubID;
- xmlChar * sysID; /* the system ID string */
- int n_sysID;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) {
- for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
- pubID = gen_const_xmlChar_ptr(n_pubID, 1);
- sysID = gen_const_xmlChar_ptr(n_sysID, 2);
-
- ret_val = xmlACatalogResolve(catal, (const xmlChar *)pubID, (const xmlChar *)sysID);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 1);
- des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlACatalogResolve",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf(" %d", n_pubID);
- printf(" %d", n_sysID);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlACatalogResolvePublic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlCatalogPtr catal; /* a Catalog */
- int n_catal;
- xmlChar * pubID; /* the public ID string */
- int n_pubID;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
- pubID = gen_const_xmlChar_ptr(n_pubID, 1);
-
- ret_val = xmlACatalogResolvePublic(catal, (const xmlChar *)pubID);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlACatalogResolvePublic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf(" %d", n_pubID);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlACatalogResolveSystem(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlCatalogPtr catal; /* a Catalog */
- int n_catal;
- xmlChar * sysID; /* the system ID string */
- int n_sysID;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
- sysID = gen_const_xmlChar_ptr(n_sysID, 1);
-
- ret_val = xmlACatalogResolveSystem(catal, (const xmlChar *)sysID);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlACatalogResolveSystem",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf(" %d", n_sysID);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlACatalogResolveURI(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlCatalogPtr catal; /* a Catalog */
- int n_catal;
- xmlChar * URI; /* the URI */
- int n_URI;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
- URI = gen_const_xmlChar_ptr(n_URI, 1);
-
- ret_val = xmlACatalogResolveURI(catal, (const xmlChar *)URI);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlACatalogResolveURI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf(" %d", n_URI);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogAdd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * type; /* the type of record to add to the catalog */
- int n_type;
- xmlChar * orig; /* the system, public or prefix to match */
- int n_orig;
- xmlChar * replace; /* the replacement value for the match */
- int n_replace;
-
- for (n_type = 0;n_type < gen_nb_const_xmlChar_ptr;n_type++) {
- for (n_orig = 0;n_orig < gen_nb_const_xmlChar_ptr;n_orig++) {
- for (n_replace = 0;n_replace < gen_nb_const_xmlChar_ptr;n_replace++) {
- mem_base = xmlMemBlocks();
- type = gen_const_xmlChar_ptr(n_type, 0);
- orig = gen_const_xmlChar_ptr(n_orig, 1);
- replace = gen_const_xmlChar_ptr(n_replace, 2);
-
- ret_val = xmlCatalogAdd((const xmlChar *)type, (const xmlChar *)orig, (const xmlChar *)replace);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_type, (const xmlChar *)type, 0);
- des_const_xmlChar_ptr(n_orig, (const xmlChar *)orig, 1);
- des_const_xmlChar_ptr(n_replace, (const xmlChar *)replace, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogAdd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_type);
- printf(" %d", n_orig);
- printf(" %d", n_replace);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogCleanup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
-
-
- xmlCatalogCleanup();
- call_tests++;
- xmlResetLastError();
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogConvert(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int ret_val;
-
-
- ret_val = xmlCatalogConvert();
- desret_int(ret_val);
- call_tests++;
- xmlResetLastError();
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- FILE * out; /* the file. */
- int n_out;
-
- for (n_out = 0;n_out < gen_nb_FILE_ptr;n_out++) {
- mem_base = xmlMemBlocks();
- out = gen_FILE_ptr(n_out, 0);
-
- xmlCatalogDump(out);
- call_tests++;
- des_FILE_ptr(n_out, out, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogGetDefaults(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlCatalogAllow ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlCatalogGetDefaults();
- desret_xmlCatalogAllow(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogGetDefaults",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogIsEmpty(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- int ret_val;
- xmlCatalogPtr catal; /* should this create an SGML catalog */
- int n_catal;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
-
- ret_val = xmlCatalogIsEmpty(catal);
- desret_int(ret_val);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogIsEmpty",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogLocalResolve(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- void * catalogs; /* a document's list of catalogs */
- int n_catalogs;
- xmlChar * pubID; /* the public ID string */
- int n_pubID;
- xmlChar * sysID; /* the system ID string */
- int n_sysID;
-
- for (n_catalogs = 0;n_catalogs < gen_nb_void_ptr;n_catalogs++) {
- for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) {
- for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) {
- mem_base = xmlMemBlocks();
- catalogs = gen_void_ptr(n_catalogs, 0);
- pubID = gen_const_xmlChar_ptr(n_pubID, 1);
- sysID = gen_const_xmlChar_ptr(n_sysID, 2);
-
- ret_val = xmlCatalogLocalResolve(catalogs, (const xmlChar *)pubID, (const xmlChar *)sysID);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_void_ptr(n_catalogs, catalogs, 0);
- des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 1);
- des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogLocalResolve",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catalogs);
- printf(" %d", n_pubID);
- printf(" %d", n_sysID);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogLocalResolveURI(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- void * catalogs; /* a document's list of catalogs */
- int n_catalogs;
- xmlChar * URI; /* the URI */
- int n_URI;
-
- for (n_catalogs = 0;n_catalogs < gen_nb_void_ptr;n_catalogs++) {
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- mem_base = xmlMemBlocks();
- catalogs = gen_void_ptr(n_catalogs, 0);
- URI = gen_const_xmlChar_ptr(n_URI, 1);
-
- ret_val = xmlCatalogLocalResolveURI(catalogs, (const xmlChar *)URI);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_void_ptr(n_catalogs, catalogs, 0);
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogLocalResolveURI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catalogs);
- printf(" %d", n_URI);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogRemove(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int ret_val;
- xmlChar * value; /* the value to remove */
- int n_value;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- value = gen_const_xmlChar_ptr(n_value, 0);
-
- ret_val = xmlCatalogRemove((const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- xmlResetLastError();
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogResolve(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- xmlChar * ret_val;
- xmlChar * pubID; /* the public ID string */
- int n_pubID;
- xmlChar * sysID; /* the system ID string */
- int n_sysID;
-
- for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) {
- for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) {
- pubID = gen_const_xmlChar_ptr(n_pubID, 0);
- sysID = gen_const_xmlChar_ptr(n_sysID, 1);
-
- ret_val = xmlCatalogResolve((const xmlChar *)pubID, (const xmlChar *)sysID);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 0);
- des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 1);
- xmlResetLastError();
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogResolvePublic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlChar * pubID; /* the public ID string */
- int n_pubID;
-
- for (n_pubID = 0;n_pubID < gen_nb_const_xmlChar_ptr;n_pubID++) {
- mem_base = xmlMemBlocks();
- pubID = gen_const_xmlChar_ptr(n_pubID, 0);
-
- ret_val = xmlCatalogResolvePublic((const xmlChar *)pubID);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_pubID, (const xmlChar *)pubID, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogResolvePublic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_pubID);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogResolveSystem(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlChar * sysID; /* the system ID string */
- int n_sysID;
-
- for (n_sysID = 0;n_sysID < gen_nb_const_xmlChar_ptr;n_sysID++) {
- mem_base = xmlMemBlocks();
- sysID = gen_const_xmlChar_ptr(n_sysID, 0);
-
- ret_val = xmlCatalogResolveSystem((const xmlChar *)sysID);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_sysID, (const xmlChar *)sysID, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogResolveSystem",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sysID);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogResolveURI(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlChar * URI; /* the URI */
- int n_URI;
-
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- mem_base = xmlMemBlocks();
- URI = gen_const_xmlChar_ptr(n_URI, 0);
-
- ret_val = xmlCatalogResolveURI((const xmlChar *)URI);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogResolveURI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URI);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogSetDefaultPrefer(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlCatalogPrefer ret_val;
- xmlCatalogPrefer prefer; /* the default preference for delegation */
- int n_prefer;
-
- for (n_prefer = 0;n_prefer < gen_nb_xmlCatalogPrefer;n_prefer++) {
- mem_base = xmlMemBlocks();
- prefer = gen_xmlCatalogPrefer(n_prefer, 0);
-
- ret_val = xmlCatalogSetDefaultPrefer(prefer);
- desret_xmlCatalogPrefer(ret_val);
- call_tests++;
- des_xmlCatalogPrefer(n_prefer, prefer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogSetDefaultPrefer",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_prefer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCatalogSetDefaults(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlCatalogAllow allow; /* what catalogs should be accepted */
- int n_allow;
-
- for (n_allow = 0;n_allow < gen_nb_xmlCatalogAllow;n_allow++) {
- mem_base = xmlMemBlocks();
- allow = gen_xmlCatalogAllow(n_allow, 0);
-
- xmlCatalogSetDefaults(allow);
- call_tests++;
- des_xmlCatalogAllow(n_allow, allow, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCatalogSetDefaults",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_allow);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlConvertSGMLCatalog(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- int ret_val;
- xmlCatalogPtr catal; /* the catalog */
- int n_catal;
-
- for (n_catal = 0;n_catal < gen_nb_xmlCatalogPtr;n_catal++) {
- mem_base = xmlMemBlocks();
- catal = gen_xmlCatalogPtr(n_catal, 0);
-
- ret_val = xmlConvertSGMLCatalog(catal);
- desret_int(ret_val);
- call_tests++;
- des_xmlCatalogPtr(n_catal, catal, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlConvertSGMLCatalog",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_catal);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlInitializeCatalog(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlInitializeCatalog();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlInitializeCatalog",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlLoadACatalog(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlLoadCatalog(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int ret_val;
- const char * filename; /* a file path */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlLoadCatalog(filename);
- desret_int(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlLoadCatalogs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- char * pathss; /* a list of directories separated by a colon or a space. */
- int n_pathss;
-
- for (n_pathss = 0;n_pathss < gen_nb_const_char_ptr;n_pathss++) {
- pathss = gen_const_char_ptr(n_pathss, 0);
-
- xmlLoadCatalogs((const char *)pathss);
- call_tests++;
- des_const_char_ptr(n_pathss, (const char *)pathss, 0);
- xmlResetLastError();
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlLoadSGMLSuperCatalog(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlNewCatalog(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlParseCatalogFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_CATALOG_ENABLED)
- int mem_base;
- xmlDocPtr ret_val;
- const char * filename; /* the filename */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlParseCatalogFile(filename);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseCatalogFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_catalog(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing catalog : 27 of 36 functions ...\n");
- test_ret += test_xmlACatalogAdd();
- test_ret += test_xmlACatalogDump();
- test_ret += test_xmlACatalogRemove();
- test_ret += test_xmlACatalogResolve();
- test_ret += test_xmlACatalogResolvePublic();
- test_ret += test_xmlACatalogResolveSystem();
- test_ret += test_xmlACatalogResolveURI();
- test_ret += test_xmlCatalogAdd();
- test_ret += test_xmlCatalogCleanup();
- test_ret += test_xmlCatalogConvert();
- test_ret += test_xmlCatalogDump();
- test_ret += test_xmlCatalogGetDefaults();
- test_ret += test_xmlCatalogIsEmpty();
- test_ret += test_xmlCatalogLocalResolve();
- test_ret += test_xmlCatalogLocalResolveURI();
- test_ret += test_xmlCatalogRemove();
- test_ret += test_xmlCatalogResolve();
- test_ret += test_xmlCatalogResolvePublic();
- test_ret += test_xmlCatalogResolveSystem();
- test_ret += test_xmlCatalogResolveURI();
- test_ret += test_xmlCatalogSetDefaultPrefer();
- test_ret += test_xmlCatalogSetDefaults();
- test_ret += test_xmlConvertSGMLCatalog();
- test_ret += test_xmlInitializeCatalog();
- test_ret += test_xmlLoadACatalog();
- test_ret += test_xmlLoadCatalog();
- test_ret += test_xmlLoadCatalogs();
- test_ret += test_xmlLoadSGMLSuperCatalog();
- test_ret += test_xmlNewCatalog();
- test_ret += test_xmlParseCatalogFile();
-
- if (test_ret != 0)
- printf("Module catalog: %d errors\n", test_ret);
- return(test_ret);
-}
-
-#define gen_nb_const_xmlChRangeGroup_ptr 1
-static xmlChRangeGroup * gen_const_xmlChRangeGroup_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlChRangeGroup_ptr(int no ATTRIBUTE_UNUSED, const xmlChRangeGroup * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlCharInRange(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int val; /* character to be validated */
- int n_val;
- xmlChRangeGroup * rptr; /* pointer to range to be used to validate */
- int n_rptr;
-
- for (n_val = 0;n_val < gen_nb_unsigned_int;n_val++) {
- for (n_rptr = 0;n_rptr < gen_nb_const_xmlChRangeGroup_ptr;n_rptr++) {
- mem_base = xmlMemBlocks();
- val = gen_unsigned_int(n_val, 0);
- rptr = gen_const_xmlChRangeGroup_ptr(n_rptr, 1);
-
- ret_val = xmlCharInRange(val, (const xmlChRangeGroup *)rptr);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_val, val, 0);
- des_const_xmlChRangeGroup_ptr(n_rptr, (const xmlChRangeGroup *)rptr, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCharInRange",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf(" %d", n_rptr);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsBaseChar(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int ch; /* character to validate */
- int n_ch;
-
- for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) {
- mem_base = xmlMemBlocks();
- ch = gen_unsigned_int(n_ch, 0);
-
- ret_val = xmlIsBaseChar(ch);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_ch, ch, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsBaseChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ch);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsBlank(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int ch; /* character to validate */
- int n_ch;
-
- for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) {
- mem_base = xmlMemBlocks();
- ch = gen_unsigned_int(n_ch, 0);
-
- ret_val = xmlIsBlank(ch);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_ch, ch, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsBlank",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ch);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsChar(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int ch; /* character to validate */
- int n_ch;
-
- for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) {
- mem_base = xmlMemBlocks();
- ch = gen_unsigned_int(n_ch, 0);
-
- ret_val = xmlIsChar(ch);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_ch, ch, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ch);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsCombining(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int ch; /* character to validate */
- int n_ch;
-
- for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) {
- mem_base = xmlMemBlocks();
- ch = gen_unsigned_int(n_ch, 0);
-
- ret_val = xmlIsCombining(ch);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_ch, ch, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsCombining",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ch);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsDigit(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int ch; /* character to validate */
- int n_ch;
-
- for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) {
- mem_base = xmlMemBlocks();
- ch = gen_unsigned_int(n_ch, 0);
-
- ret_val = xmlIsDigit(ch);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_ch, ch, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsDigit",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ch);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsExtender(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int ch; /* character to validate */
- int n_ch;
-
- for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) {
- mem_base = xmlMemBlocks();
- ch = gen_unsigned_int(n_ch, 0);
-
- ret_val = xmlIsExtender(ch);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_ch, ch, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsExtender",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ch);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsIdeographic(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int ch; /* character to validate */
- int n_ch;
-
- for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) {
- mem_base = xmlMemBlocks();
- ch = gen_unsigned_int(n_ch, 0);
-
- ret_val = xmlIsIdeographic(ch);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_ch, ch, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsIdeographic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ch);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsPubidChar(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned int ch; /* character to validate */
- int n_ch;
-
- for (n_ch = 0;n_ch < gen_nb_unsigned_int;n_ch++) {
- mem_base = xmlMemBlocks();
- ch = gen_unsigned_int(n_ch, 0);
-
- ret_val = xmlIsPubidChar(ch);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_int(n_ch, ch, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsPubidChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ch);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_chvalid(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing chvalid : 9 of 9 functions ...\n");
- test_ret += test_xmlCharInRange();
- test_ret += test_xmlIsBaseChar();
- test_ret += test_xmlIsBlank();
- test_ret += test_xmlIsChar();
- test_ret += test_xmlIsCombining();
- test_ret += test_xmlIsDigit();
- test_ret += test_xmlIsExtender();
- test_ret += test_xmlIsIdeographic();
- test_ret += test_xmlIsPubidChar();
-
- if (test_ret != 0)
- printf("Module chvalid: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlBoolToText(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- const char * ret_val;
- int boolval; /* a bool to turn into text */
- int n_boolval;
-
- for (n_boolval = 0;n_boolval < gen_nb_int;n_boolval++) {
- mem_base = xmlMemBlocks();
- boolval = gen_int(n_boolval, 0);
-
- ret_val = xmlBoolToText(boolval);
- desret_const_char_ptr(ret_val);
- call_tests++;
- des_int(n_boolval, boolval, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBoolToText",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_boolval);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugCheckDocument(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- int ret_val;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlDocPtr doc; /* the document */
- int n_doc;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlDebugCheckDocument(output, doc);
- desret_int(ret_val);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugCheckDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpAttr(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlAttrPtr attr; /* the attribute */
- int n_attr;
- int depth; /* the indentation level. */
- int n_depth;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- attr = gen_xmlAttrPtr(n_attr, 1);
- depth = gen_int(n_depth, 2);
-
- xmlDebugDumpAttr(output, attr, depth);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlAttrPtr(n_attr, attr, 1);
- des_int(n_depth, depth, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpAttr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_attr);
- printf(" %d", n_depth);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpAttrList(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlAttrPtr attr; /* the attribute list */
- int n_attr;
- int depth; /* the indentation level. */
- int n_depth;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- attr = gen_xmlAttrPtr(n_attr, 1);
- depth = gen_int(n_depth, 2);
-
- xmlDebugDumpAttrList(output, attr, depth);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlAttrPtr(n_attr, attr, 1);
- des_int(n_depth, depth, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpAttrList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_attr);
- printf(" %d", n_depth);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpDTD(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlDtdPtr dtd; /* the DTD */
- int n_dtd;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- dtd = gen_xmlDtdPtr(n_dtd, 1);
-
- xmlDebugDumpDTD(output, dtd);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlDtdPtr(n_dtd, dtd, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpDTD",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_dtd);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpDocument(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlDocPtr doc; /* the document */
- int n_doc;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- xmlDebugDumpDocument(output, doc);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpDocumentHead(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlDocPtr doc; /* the document */
- int n_doc;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- xmlDebugDumpDocumentHead(output, doc);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpDocumentHead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpEntities(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlDocPtr doc; /* the document */
- int n_doc;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- xmlDebugDumpEntities(output, doc);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpEntities",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlNodePtr node; /* the node */
- int n_node;
- int depth; /* the indentation level. */
- int n_depth;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- node = gen_xmlNodePtr(n_node, 1);
- depth = gen_int(n_depth, 2);
-
- xmlDebugDumpNode(output, node, depth);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlNodePtr(n_node, node, 1);
- des_int(n_depth, depth, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_node);
- printf(" %d", n_depth);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpNodeList(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlNodePtr node; /* the node list */
- int n_node;
- int depth; /* the indentation level. */
- int n_depth;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- node = gen_xmlNodePtr(n_node, 1);
- depth = gen_int(n_depth, 2);
-
- xmlDebugDumpNodeList(output, node, depth);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlNodePtr(n_node, node, 1);
- des_int(n_depth, depth, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpNodeList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_node);
- printf(" %d", n_depth);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpOneNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlNodePtr node; /* the node */
- int n_node;
- int depth; /* the indentation level. */
- int n_depth;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- node = gen_xmlNodePtr(n_node, 1);
- depth = gen_int(n_depth, 2);
-
- xmlDebugDumpOneNode(output, node, depth);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlNodePtr(n_node, node, 1);
- des_int(n_depth, depth, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpOneNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_node);
- printf(" %d", n_depth);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDebugDumpString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlChar * str; /* the string */
- int n_str;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
-
- xmlDebugDumpString(output, (const xmlChar *)str);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDebugDumpString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlLsCountNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodePtr node; /* the node to count */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
-
- ret_val = xmlLsCountNode(node);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlLsCountNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlLsOneNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlNodePtr node; /* the node to dump */
- int n_node;
-
- for (n_output = 0;n_output < gen_nb_debug_FILE_ptr;n_output++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- output = gen_debug_FILE_ptr(n_output, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- xmlLsOneNode(output, node);
- call_tests++;
- des_debug_FILE_ptr(n_output, output, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlLsOneNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_char_ptr 1
-static char * gen_char_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_char_ptr(int no ATTRIBUTE_UNUSED, char * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlShell(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlShellBase(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * arg; /* unused */
- int n_arg;
- xmlNodePtr node; /* a node */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- arg = gen_char_ptr(n_arg, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellBase(ctxt, arg, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_arg, arg, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellBase",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_arg);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellCat(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * arg; /* unused */
- int n_arg;
- xmlNodePtr node; /* a node */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- arg = gen_char_ptr(n_arg, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellCat(ctxt, arg, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_arg, arg, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellCat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_arg);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellDir(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * arg; /* unused */
- int n_arg;
- xmlNodePtr node; /* a node */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- arg = gen_char_ptr(n_arg, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellDir(ctxt, arg, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_arg, arg, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellDir",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_arg);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellDu(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * arg; /* unused */
- int n_arg;
- xmlNodePtr tree; /* a node defining a subtree */
- int n_tree;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) {
- for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- arg = gen_char_ptr(n_arg, 1);
- tree = gen_xmlNodePtr(n_tree, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellDu(ctxt, arg, tree, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_arg, arg, 1);
- des_xmlNodePtr(n_tree, tree, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellDu",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_arg);
- printf(" %d", n_tree);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellList(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * arg; /* unused */
- int n_arg;
- xmlNodePtr node; /* a node */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_arg = 0;n_arg < gen_nb_char_ptr;n_arg++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- arg = gen_char_ptr(n_arg, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellList(ctxt, arg, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_arg, arg, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_arg);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellLoad(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * filename; /* the file name */
- int n_filename;
- xmlNodePtr node; /* unused */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_filename = 0;n_filename < gen_nb_char_ptr;n_filename++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- filename = gen_char_ptr(n_filename, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellLoad(ctxt, filename, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_filename, filename, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellLoad",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_filename);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellPrintXPathResult(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr list; /* a valid result generated by an xpath evaluation */
- int n_list;
-
- for (n_list = 0;n_list < gen_nb_xmlXPathObjectPtr;n_list++) {
- mem_base = xmlMemBlocks();
- list = gen_xmlXPathObjectPtr(n_list, 0);
-
- xmlShellPrintXPathResult(list);
- call_tests++;
- des_xmlXPathObjectPtr(n_list, list, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellPrintXPathResult",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_list);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellPwd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * buffer; /* the output buffer */
- int n_buffer;
- xmlNodePtr node; /* a node */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_buffer = 0;n_buffer < gen_nb_char_ptr;n_buffer++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- buffer = gen_char_ptr(n_buffer, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellPwd(ctxt, buffer, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_buffer, buffer, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellPwd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_buffer);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellSave(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * filename; /* the file name (optional) */
- int n_filename;
- xmlNodePtr node; /* unused */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_filename = 0;n_filename < gen_nb_char_ptr;n_filename++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- filename = gen_char_ptr(n_filename, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellSave(ctxt, filename, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_filename, filename, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellSave",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_filename);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellValidate(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * dtd; /* the DTD URI (optional) */
- int n_dtd;
- xmlNodePtr node; /* unused */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_dtd = 0;n_dtd < gen_nb_char_ptr;n_dtd++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- dtd = gen_char_ptr(n_dtd, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellValidate(ctxt, dtd, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_dtd, dtd, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellValidate",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_dtd);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlShellWrite(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_DEBUG_ENABLED) && defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlShellCtxtPtr ctxt; /* the shell context */
- int n_ctxt;
- char * filename; /* the file name */
- int n_filename;
- xmlNodePtr node; /* a node in the tree */
- int n_node;
- xmlNodePtr node2; /* unused */
- int n_node2;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlShellCtxtPtr;n_ctxt++) {
- for (n_filename = 0;n_filename < gen_nb_char_ptr;n_filename++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlShellCtxtPtr(n_ctxt, 0);
- filename = gen_char_ptr(n_filename, 1);
- node = gen_xmlNodePtr(n_node, 2);
- node2 = gen_xmlNodePtr(n_node2, 3);
-
- ret_val = xmlShellWrite(ctxt, filename, node, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlShellCtxtPtr(n_ctxt, ctxt, 0);
- des_char_ptr(n_filename, filename, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr(n_node2, node2, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlShellWrite",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_filename);
- printf(" %d", n_node);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_debugXML(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing debugXML : 25 of 28 functions ...\n");
- test_ret += test_xmlBoolToText();
- test_ret += test_xmlDebugCheckDocument();
- test_ret += test_xmlDebugDumpAttr();
- test_ret += test_xmlDebugDumpAttrList();
- test_ret += test_xmlDebugDumpDTD();
- test_ret += test_xmlDebugDumpDocument();
- test_ret += test_xmlDebugDumpDocumentHead();
- test_ret += test_xmlDebugDumpEntities();
- test_ret += test_xmlDebugDumpNode();
- test_ret += test_xmlDebugDumpNodeList();
- test_ret += test_xmlDebugDumpOneNode();
- test_ret += test_xmlDebugDumpString();
- test_ret += test_xmlLsCountNode();
- test_ret += test_xmlLsOneNode();
- test_ret += test_xmlShell();
- test_ret += test_xmlShellBase();
- test_ret += test_xmlShellCat();
- test_ret += test_xmlShellDir();
- test_ret += test_xmlShellDu();
- test_ret += test_xmlShellList();
- test_ret += test_xmlShellLoad();
- test_ret += test_xmlShellPrintXPathResult();
- test_ret += test_xmlShellPwd();
- test_ret += test_xmlShellSave();
- test_ret += test_xmlShellValidate();
- test_ret += test_xmlShellWrite();
-
- if (test_ret != 0)
- printf("Module debugXML: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlDictCleanup(void) {
- int test_ret = 0;
-
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlDictCleanup();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictCleanup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDictCreate(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDictPtr ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlDictCreate();
- desret_xmlDictPtr(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictCreate",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDictCreateSub(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDictPtr ret_val;
- xmlDictPtr sub; /* an existing dictionary */
- int n_sub;
-
- for (n_sub = 0;n_sub < gen_nb_xmlDictPtr;n_sub++) {
- mem_base = xmlMemBlocks();
- sub = gen_xmlDictPtr(n_sub, 0);
-
- ret_val = xmlDictCreateSub(sub);
- desret_xmlDictPtr(ret_val);
- call_tests++;
- des_xmlDictPtr(n_sub, sub, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictCreateSub",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sub);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDictExists(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlDictPtr dict; /* the dictionary */
- int n_dict;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- int len; /* the length of the name, if -1 it is recomputed */
- int n_len;
-
- for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- dict = gen_xmlDictPtr(n_dict, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- len = gen_int(n_len, 2);
- if ((name != NULL) &&
- (len > (int) strlen((const char *) name) + 1))
- continue;
-
- ret_val = xmlDictExists(dict, (const xmlChar *)name, len);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlDictPtr(n_dict, dict, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictExists",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dict);
- printf(" %d", n_name);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDictGetUsage(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlDictLookup(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlDictPtr dict; /* the dictionary */
- int n_dict;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- int len; /* the length of the name, if -1 it is recomputed */
- int n_len;
-
- for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- dict = gen_xmlDictPtr(n_dict, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- len = gen_int(n_len, 2);
- if ((name != NULL) &&
- (len > (int) strlen((const char *) name) + 1))
- continue;
-
- ret_val = xmlDictLookup(dict, (const xmlChar *)name, len);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlDictPtr(n_dict, dict, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictLookup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dict);
- printf(" %d", n_name);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDictOwns(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDictPtr dict; /* the dictionary */
- int n_dict;
- xmlChar * str; /* the string */
- int n_str;
-
- for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- dict = gen_xmlDictPtr(n_dict, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
-
- ret_val = xmlDictOwns(dict, (const xmlChar *)str);
- desret_int(ret_val);
- call_tests++;
- des_xmlDictPtr(n_dict, dict, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictOwns",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dict);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDictQLookup(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlDictPtr dict; /* the dictionary */
- int n_dict;
- xmlChar * prefix; /* the prefix */
- int n_prefix;
- xmlChar * name; /* the name */
- int n_name;
-
- for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- dict = gen_xmlDictPtr(n_dict, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
-
- ret_val = xmlDictQLookup(dict, (const xmlChar *)prefix, (const xmlChar *)name);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlDictPtr(n_dict, dict, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictQLookup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dict);
- printf(" %d", n_prefix);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDictReference(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDictPtr dict; /* the dictionary */
- int n_dict;
-
- for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) {
- mem_base = xmlMemBlocks();
- dict = gen_xmlDictPtr(n_dict, 0);
-
- ret_val = xmlDictReference(dict);
- xmlDictFree(dict);
- desret_int(ret_val);
- call_tests++;
- des_xmlDictPtr(n_dict, dict, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictReference",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dict);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDictSetLimit(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlDictSize(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDictPtr dict; /* the dictionary */
- int n_dict;
-
- for (n_dict = 0;n_dict < gen_nb_xmlDictPtr;n_dict++) {
- mem_base = xmlMemBlocks();
- dict = gen_xmlDictPtr(n_dict, 0);
-
- ret_val = xmlDictSize(dict);
- desret_int(ret_val);
- call_tests++;
- des_xmlDictPtr(n_dict, dict, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDictSize",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dict);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlInitializeDict(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlInitializeDict();
- desret_int(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlInitializeDict",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_dict(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing dict : 10 of 13 functions ...\n");
- test_ret += test_xmlDictCleanup();
- test_ret += test_xmlDictCreate();
- test_ret += test_xmlDictCreateSub();
- test_ret += test_xmlDictExists();
- test_ret += test_xmlDictGetUsage();
- test_ret += test_xmlDictLookup();
- test_ret += test_xmlDictOwns();
- test_ret += test_xmlDictQLookup();
- test_ret += test_xmlDictReference();
- test_ret += test_xmlDictSetLimit();
- test_ret += test_xmlDictSize();
- test_ret += test_xmlInitializeDict();
-
- if (test_ret != 0)
- printf("Module dict: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_UTF8Toisolat1(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef LIBXML_OUTPUT_ENABLED
- int mem_base;
- int ret_val;
- unsigned char * out; /* a pointer to an array of bytes to store the result */
- int n_out;
- int * outlen; /* the length of @out */
- int n_outlen;
- unsigned char * in; /* a pointer to an array of UTF-8 chars */
- int n_in;
- int * inlen; /* the length of @in */
- int n_inlen;
-
- for (n_out = 0;n_out < gen_nb_unsigned_char_ptr;n_out++) {
- for (n_outlen = 0;n_outlen < gen_nb_int_ptr;n_outlen++) {
- for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) {
- for (n_inlen = 0;n_inlen < gen_nb_int_ptr;n_inlen++) {
- mem_base = xmlMemBlocks();
- out = gen_unsigned_char_ptr(n_out, 0);
- outlen = gen_int_ptr(n_outlen, 1);
- in = gen_const_unsigned_char_ptr(n_in, 2);
- inlen = gen_int_ptr(n_inlen, 3);
-
- ret_val = UTF8Toisolat1(out, outlen, (const unsigned char *)in, inlen);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_char_ptr(n_out, out, 0);
- des_int_ptr(n_outlen, outlen, 1);
- des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 2);
- des_int_ptr(n_inlen, inlen, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in UTF8Toisolat1",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_outlen);
- printf(" %d", n_in);
- printf(" %d", n_inlen);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_isolat1ToUTF8(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned char * out; /* a pointer to an array of bytes to store the result */
- int n_out;
- int * outlen; /* the length of @out */
- int n_outlen;
- unsigned char * in; /* a pointer to an array of ISO Latin 1 chars */
- int n_in;
- int * inlen; /* the length of @in */
- int n_inlen;
-
- for (n_out = 0;n_out < gen_nb_unsigned_char_ptr;n_out++) {
- for (n_outlen = 0;n_outlen < gen_nb_int_ptr;n_outlen++) {
- for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) {
- for (n_inlen = 0;n_inlen < gen_nb_int_ptr;n_inlen++) {
- mem_base = xmlMemBlocks();
- out = gen_unsigned_char_ptr(n_out, 0);
- outlen = gen_int_ptr(n_outlen, 1);
- in = gen_const_unsigned_char_ptr(n_in, 2);
- inlen = gen_int_ptr(n_inlen, 3);
-
- ret_val = isolat1ToUTF8(out, outlen, (const unsigned char *)in, inlen);
- desret_int(ret_val);
- call_tests++;
- des_unsigned_char_ptr(n_out, out, 0);
- des_int_ptr(n_outlen, outlen, 1);
- des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 2);
- des_int_ptr(n_inlen, inlen, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in isolat1ToUTF8",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_outlen);
- printf(" %d", n_in);
- printf(" %d", n_inlen);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAddEncodingAlias(void) {
- int test_ret = 0;
-
- int ret_val;
- char * name; /* the encoding name as parsed, in UTF-8 format (ASCII actually) */
- int n_name;
- char * alias; /* the alias name as parsed, in UTF-8 format (ASCII actually) */
- int n_alias;
-
- for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) {
- for (n_alias = 0;n_alias < gen_nb_const_char_ptr;n_alias++) {
- name = gen_const_char_ptr(n_name, 0);
- alias = gen_const_char_ptr(n_alias, 1);
-
- ret_val = xmlAddEncodingAlias((const char *)name, (const char *)alias);
- desret_int(ret_val);
- call_tests++;
- des_const_char_ptr(n_name, (const char *)name, 0);
- des_const_char_ptr(n_alias, (const char *)alias, 1);
- xmlResetLastError();
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlCharEncodingHandler_ptr 1
-static xmlCharEncodingHandler * gen_xmlCharEncodingHandler_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlCharEncodingHandler_ptr(int no ATTRIBUTE_UNUSED, xmlCharEncodingHandler * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlCharEncCloseFunc(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlCharEncodingHandler * handler; /* char enconding transformation data structure */
- int n_handler;
-
- for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandler_ptr;n_handler++) {
- mem_base = xmlMemBlocks();
- handler = gen_xmlCharEncodingHandler_ptr(n_handler, 0);
-
- ret_val = xmlCharEncCloseFunc(handler);
- desret_int(ret_val);
- call_tests++;
- des_xmlCharEncodingHandler_ptr(n_handler, handler, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCharEncCloseFunc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_handler);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCharEncFirstLine(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlCharEncodingHandler * handler; /* char enconding transformation data structure */
- int n_handler;
- xmlBufferPtr out; /* an xmlBuffer for the output. */
- int n_out;
- xmlBufferPtr in; /* an xmlBuffer for the input */
- int n_in;
-
- for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandler_ptr;n_handler++) {
- for (n_out = 0;n_out < gen_nb_xmlBufferPtr;n_out++) {
- for (n_in = 0;n_in < gen_nb_xmlBufferPtr;n_in++) {
- mem_base = xmlMemBlocks();
- handler = gen_xmlCharEncodingHandler_ptr(n_handler, 0);
- out = gen_xmlBufferPtr(n_out, 1);
- in = gen_xmlBufferPtr(n_in, 2);
-
- ret_val = xmlCharEncFirstLine(handler, out, in);
- desret_int(ret_val);
- call_tests++;
- des_xmlCharEncodingHandler_ptr(n_handler, handler, 0);
- des_xmlBufferPtr(n_out, out, 1);
- des_xmlBufferPtr(n_in, in, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCharEncFirstLine",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_handler);
- printf(" %d", n_out);
- printf(" %d", n_in);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCharEncInFunc(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlCharEncodingHandler * handler; /* char encoding transformation data structure */
- int n_handler;
- xmlBufferPtr out; /* an xmlBuffer for the output. */
- int n_out;
- xmlBufferPtr in; /* an xmlBuffer for the input */
- int n_in;
-
- for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandler_ptr;n_handler++) {
- for (n_out = 0;n_out < gen_nb_xmlBufferPtr;n_out++) {
- for (n_in = 0;n_in < gen_nb_xmlBufferPtr;n_in++) {
- mem_base = xmlMemBlocks();
- handler = gen_xmlCharEncodingHandler_ptr(n_handler, 0);
- out = gen_xmlBufferPtr(n_out, 1);
- in = gen_xmlBufferPtr(n_in, 2);
-
- ret_val = xmlCharEncInFunc(handler, out, in);
- desret_int(ret_val);
- call_tests++;
- des_xmlCharEncodingHandler_ptr(n_handler, handler, 0);
- des_xmlBufferPtr(n_out, out, 1);
- des_xmlBufferPtr(n_in, in, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCharEncInFunc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_handler);
- printf(" %d", n_out);
- printf(" %d", n_in);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCharEncOutFunc(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlCharEncodingHandler * handler; /* char enconding transformation data structure */
- int n_handler;
- xmlBufferPtr out; /* an xmlBuffer for the output. */
- int n_out;
- xmlBufferPtr in; /* an xmlBuffer for the input */
- int n_in;
-
- for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandler_ptr;n_handler++) {
- for (n_out = 0;n_out < gen_nb_xmlBufferPtr;n_out++) {
- for (n_in = 0;n_in < gen_nb_xmlBufferPtr;n_in++) {
- mem_base = xmlMemBlocks();
- handler = gen_xmlCharEncodingHandler_ptr(n_handler, 0);
- out = gen_xmlBufferPtr(n_out, 1);
- in = gen_xmlBufferPtr(n_in, 2);
-
- ret_val = xmlCharEncOutFunc(handler, out, in);
- desret_int(ret_val);
- call_tests++;
- des_xmlCharEncodingHandler_ptr(n_handler, handler, 0);
- des_xmlBufferPtr(n_out, out, 1);
- des_xmlBufferPtr(n_in, in, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCharEncOutFunc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_handler);
- printf(" %d", n_out);
- printf(" %d", n_in);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCleanupCharEncodingHandlers(void) {
- int test_ret = 0;
-
-
-
- xmlCleanupCharEncodingHandlers();
- call_tests++;
- xmlResetLastError();
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCleanupEncodingAliases(void) {
- int test_ret = 0;
-
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlCleanupEncodingAliases();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCleanupEncodingAliases",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDelEncodingAlias(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- char * alias; /* the alias name as parsed, in UTF-8 format (ASCII actually) */
- int n_alias;
-
- for (n_alias = 0;n_alias < gen_nb_const_char_ptr;n_alias++) {
- mem_base = xmlMemBlocks();
- alias = gen_const_char_ptr(n_alias, 0);
-
- ret_val = xmlDelEncodingAlias((const char *)alias);
- desret_int(ret_val);
- call_tests++;
- des_const_char_ptr(n_alias, (const char *)alias, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDelEncodingAlias",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_alias);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDetectCharEncoding(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlCharEncoding ret_val;
- unsigned char * in; /* a pointer to the first bytes of the XML entity, must be at least 2 bytes long (at least 4 if encoding is UTF4 variant). */
- int n_in;
- int len; /* pointer to the length of the buffer */
- int n_len;
-
- for (n_in = 0;n_in < gen_nb_const_unsigned_char_ptr;n_in++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- in = gen_const_unsigned_char_ptr(n_in, 0);
- len = gen_int(n_len, 1);
-
- ret_val = xmlDetectCharEncoding((const unsigned char *)in, len);
- desret_xmlCharEncoding(ret_val);
- call_tests++;
- des_const_unsigned_char_ptr(n_in, (const unsigned char *)in, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDetectCharEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_in);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlFindCharEncodingHandler(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlGetCharEncodingHandler(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlGetCharEncodingName(void) {
- int test_ret = 0;
-
- int mem_base;
- const char * ret_val;
- xmlCharEncoding enc; /* the encoding */
- int n_enc;
-
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- enc = gen_xmlCharEncoding(n_enc, 0);
-
- ret_val = xmlGetCharEncodingName(enc);
- desret_const_char_ptr(ret_val);
- call_tests++;
- des_xmlCharEncoding(n_enc, enc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetCharEncodingName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetEncodingAlias(void) {
- int test_ret = 0;
-
- int mem_base;
- const char * ret_val;
- char * alias; /* the alias name as parsed, in UTF-8 format (ASCII actually) */
- int n_alias;
-
- for (n_alias = 0;n_alias < gen_nb_const_char_ptr;n_alias++) {
- mem_base = xmlMemBlocks();
- alias = gen_const_char_ptr(n_alias, 0);
-
- ret_val = xmlGetEncodingAlias((const char *)alias);
- desret_const_char_ptr(ret_val);
- call_tests++;
- des_const_char_ptr(n_alias, (const char *)alias, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetEncodingAlias",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_alias);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlInitCharEncodingHandlers(void) {
- int test_ret = 0;
-
-
-
- xmlInitCharEncodingHandlers();
- call_tests++;
- xmlResetLastError();
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewCharEncodingHandler(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlParseCharEncoding(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlCharEncoding ret_val;
- char * name; /* the encoding name as parsed, in UTF-8 format (ASCII actually) */
- int n_name;
-
- for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- name = gen_const_char_ptr(n_name, 0);
-
- ret_val = xmlParseCharEncoding((const char *)name);
- desret_xmlCharEncoding(ret_val);
- call_tests++;
- des_const_char_ptr(n_name, (const char *)name, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseCharEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlCharEncodingHandlerPtr 1
-static xmlCharEncodingHandlerPtr gen_xmlCharEncodingHandlerPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlCharEncodingHandlerPtr(int no ATTRIBUTE_UNUSED, xmlCharEncodingHandlerPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlRegisterCharEncodingHandler(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlCharEncodingHandlerPtr handler; /* the xmlCharEncodingHandlerPtr handler block */
- int n_handler;
-
- for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandlerPtr;n_handler++) {
- mem_base = xmlMemBlocks();
- handler = gen_xmlCharEncodingHandlerPtr(n_handler, 0);
-
- xmlRegisterCharEncodingHandler(handler);
- call_tests++;
- des_xmlCharEncodingHandlerPtr(n_handler, handler, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegisterCharEncodingHandler",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_handler);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_encoding(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing encoding : 16 of 19 functions ...\n");
- test_ret += test_UTF8Toisolat1();
- test_ret += test_isolat1ToUTF8();
- test_ret += test_xmlAddEncodingAlias();
- test_ret += test_xmlCharEncCloseFunc();
- test_ret += test_xmlCharEncFirstLine();
- test_ret += test_xmlCharEncInFunc();
- test_ret += test_xmlCharEncOutFunc();
- test_ret += test_xmlCleanupCharEncodingHandlers();
- test_ret += test_xmlCleanupEncodingAliases();
- test_ret += test_xmlDelEncodingAlias();
- test_ret += test_xmlDetectCharEncoding();
- test_ret += test_xmlFindCharEncodingHandler();
- test_ret += test_xmlGetCharEncodingHandler();
- test_ret += test_xmlGetCharEncodingName();
- test_ret += test_xmlGetEncodingAlias();
- test_ret += test_xmlInitCharEncodingHandlers();
- test_ret += test_xmlNewCharEncodingHandler();
- test_ret += test_xmlParseCharEncoding();
- test_ret += test_xmlRegisterCharEncodingHandler();
-
- if (test_ret != 0)
- printf("Module encoding: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlAddDocEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * name; /* the entity name */
- int n_name;
- int type; /* the entity type XML_xxx_yyy_ENTITY */
- int n_type;
- xmlChar * ExternalID; /* the entity external ID if available */
- int n_ExternalID;
- xmlChar * SystemID; /* the entity system ID if available */
- int n_SystemID;
- xmlChar * content; /* the entity content */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_type = 0;n_type < gen_nb_int;n_type++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- type = gen_int(n_type, 2);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 3);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 4);
- content = gen_const_xmlChar_ptr(n_content, 5);
-
- ret_val = xmlAddDocEntity(doc, (const xmlChar *)name, type, (const xmlChar *)ExternalID, (const xmlChar *)SystemID, (const xmlChar *)content);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_int(n_type, type, 2);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 3);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 4);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddDocEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_type);
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAddDtdEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * name; /* the entity name */
- int n_name;
- int type; /* the entity type XML_xxx_yyy_ENTITY */
- int n_type;
- xmlChar * ExternalID; /* the entity external ID if available */
- int n_ExternalID;
- xmlChar * SystemID; /* the entity system ID if available */
- int n_SystemID;
- xmlChar * content; /* the entity content */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_type = 0;n_type < gen_nb_int;n_type++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- type = gen_int(n_type, 2);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 3);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 4);
- content = gen_const_xmlChar_ptr(n_content, 5);
-
- ret_val = xmlAddDtdEntity(doc, (const xmlChar *)name, type, (const xmlChar *)ExternalID, (const xmlChar *)SystemID, (const xmlChar *)content);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_int(n_type, type, 2);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 3);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 4);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddDtdEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_type);
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCleanupPredefinedEntities(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_LEGACY_ENABLED
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlCleanupPredefinedEntities();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCleanupPredefinedEntities",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlEntitiesTablePtr 1
-static xmlEntitiesTablePtr gen_xmlEntitiesTablePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlEntitiesTablePtr(int no ATTRIBUTE_UNUSED, xmlEntitiesTablePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlCopyEntitiesTable(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateEntitiesTable(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlDumpEntitiesTable(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* An XML buffer. */
- int n_buf;
- xmlEntitiesTablePtr table; /* An entity table */
- int n_table;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_table = 0;n_table < gen_nb_xmlEntitiesTablePtr;n_table++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- table = gen_xmlEntitiesTablePtr(n_table, 1);
-
- xmlDumpEntitiesTable(buf, table);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlEntitiesTablePtr(n_table, table, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDumpEntitiesTable",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_table);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlEntityPtr 1
-static xmlEntityPtr gen_xmlEntityPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlEntityPtr(int no ATTRIBUTE_UNUSED, xmlEntityPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlDumpEntityDecl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* An XML buffer. */
- int n_buf;
- xmlEntityPtr ent; /* An entity table */
- int n_ent;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_ent = 0;n_ent < gen_nb_xmlEntityPtr;n_ent++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- ent = gen_xmlEntityPtr(n_ent, 1);
-
- xmlDumpEntityDecl(buf, ent);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlEntityPtr(n_ent, ent, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDumpEntityDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_ent);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlEncodeEntitiesReentrant(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlDocPtr doc; /* the document containing the string */
- int n_doc;
- xmlChar * input; /* A string to convert to XML. */
- int n_input;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_input = 0;n_input < gen_nb_const_xmlChar_ptr;n_input++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- input = gen_const_xmlChar_ptr(n_input, 1);
-
- ret_val = xmlEncodeEntitiesReentrant(doc, (const xmlChar *)input);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_input, (const xmlChar *)input, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlEncodeEntitiesReentrant",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_input);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlDoc_ptr 1
-static xmlDoc * gen_const_xmlDoc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlDoc_ptr(int no ATTRIBUTE_UNUSED, const xmlDoc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlEncodeSpecialChars(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlDoc * doc; /* the document containing the string */
- int n_doc;
- xmlChar * input; /* A string to convert to XML. */
- int n_input;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- for (n_input = 0;n_input < gen_nb_const_xmlChar_ptr;n_input++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
- input = gen_const_xmlChar_ptr(n_input, 1);
-
- ret_val = xmlEncodeSpecialChars((const xmlDoc *)doc, (const xmlChar *)input);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- des_const_xmlChar_ptr(n_input, (const xmlChar *)input, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlEncodeSpecialChars",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_input);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetDocEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- xmlDoc * doc; /* the document referencing the entity */
- int n_doc;
- xmlChar * name; /* the entity name */
- int n_name;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlGetDocEntity((const xmlDoc *)doc, (const xmlChar *)name);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetDocEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetDtdEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- xmlDocPtr doc; /* the document referencing the entity */
- int n_doc;
- xmlChar * name; /* the entity name */
- int n_name;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlGetDtdEntity(doc, (const xmlChar *)name);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetDtdEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetParameterEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- xmlDocPtr doc; /* the document referencing the entity */
- int n_doc;
- xmlChar * name; /* the entity name */
- int n_name;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlGetParameterEntity(doc, (const xmlChar *)name);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetParameterEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetPredefinedEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- xmlChar * name; /* the entity name */
- int n_name;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
-
- ret_val = xmlGetPredefinedEntity((const xmlChar *)name);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetPredefinedEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlInitializePredefinedEntities(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_LEGACY_ENABLED
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlInitializePredefinedEntities();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlInitializePredefinedEntities",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlEntityPtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * name; /* the entity name */
- int n_name;
- int type; /* the entity type XML_xxx_yyy_ENTITY */
- int n_type;
- xmlChar * ExternalID; /* the entity external ID if available */
- int n_ExternalID;
- xmlChar * SystemID; /* the entity system ID if available */
- int n_SystemID;
- xmlChar * content; /* the entity content */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_type = 0;n_type < gen_nb_int;n_type++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- type = gen_int(n_type, 2);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 3);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 4);
- content = gen_const_xmlChar_ptr(n_content, 5);
-
- ret_val = xmlNewEntity(doc, (const xmlChar *)name, type, (const xmlChar *)ExternalID, (const xmlChar *)SystemID, (const xmlChar *)content);
- desret_xmlEntityPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_int(n_type, type, 2);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 3);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 4);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_type);
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_entities(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing entities : 13 of 17 functions ...\n");
- test_ret += test_xmlAddDocEntity();
- test_ret += test_xmlAddDtdEntity();
- test_ret += test_xmlCleanupPredefinedEntities();
- test_ret += test_xmlCopyEntitiesTable();
- test_ret += test_xmlCreateEntitiesTable();
- test_ret += test_xmlDumpEntitiesTable();
- test_ret += test_xmlDumpEntityDecl();
- test_ret += test_xmlEncodeEntitiesReentrant();
- test_ret += test_xmlEncodeSpecialChars();
- test_ret += test_xmlGetDocEntity();
- test_ret += test_xmlGetDtdEntity();
- test_ret += test_xmlGetParameterEntity();
- test_ret += test_xmlGetPredefinedEntity();
- test_ret += test_xmlInitializePredefinedEntities();
- test_ret += test_xmlNewEntity();
-
- if (test_ret != 0)
- printf("Module entities: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlHashAddEntry(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- userdata = gen_userdata(n_userdata, 2);
-
- ret_val = xmlHashAddEntry(table, (const xmlChar *)name, userdata);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_userdata(n_userdata, userdata, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashAddEntry",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_userdata);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashAddEntry2(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- userdata = gen_userdata(n_userdata, 3);
-
- ret_val = xmlHashAddEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, userdata);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_userdata(n_userdata, userdata, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashAddEntry2",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_userdata);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashAddEntry3(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- name3 = gen_const_xmlChar_ptr(n_name3, 3);
- userdata = gen_userdata(n_userdata, 4);
-
- ret_val = xmlHashAddEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, userdata);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3);
- des_userdata(n_userdata, userdata, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashAddEntry3",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_name3);
- printf(" %d", n_userdata);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashCopy(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlHashCreate(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlHashCreateDict(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlHashLookup(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlHashLookup(table, (const xmlChar *)name);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashLookup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashLookup2(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
-
- ret_val = xmlHashLookup2(table, (const xmlChar *)name, (const xmlChar *)name2);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashLookup2",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashLookup3(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- name3 = gen_const_xmlChar_ptr(n_name3, 3);
-
- ret_val = xmlHashLookup3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashLookup3",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_name3);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashQLookup(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * prefix; /* the prefix of the userdata */
- int n_prefix;
- xmlChar * name; /* the name of the userdata */
- int n_name;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
-
- ret_val = xmlHashQLookup(table, (const xmlChar *)prefix, (const xmlChar *)name);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashQLookup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_prefix);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashQLookup2(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * prefix; /* the prefix of the userdata */
- int n_prefix;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * prefix2; /* the second prefix of the userdata */
- int n_prefix2;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_prefix2 = 0;n_prefix2 < gen_nb_const_xmlChar_ptr;n_prefix2++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- prefix2 = gen_const_xmlChar_ptr(n_prefix2, 3);
- name2 = gen_const_xmlChar_ptr(n_name2, 4);
-
- ret_val = xmlHashQLookup2(table, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)prefix2, (const xmlChar *)name2);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_prefix2, (const xmlChar *)prefix2, 3);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashQLookup2",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_prefix);
- printf(" %d", n_name);
- printf(" %d", n_prefix2);
- printf(" %d", n_name2);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashQLookup3(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * prefix; /* the prefix of the userdata */
- int n_prefix;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * prefix2; /* the second prefix of the userdata */
- int n_prefix2;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * prefix3; /* the third prefix of the userdata */
- int n_prefix3;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_prefix2 = 0;n_prefix2 < gen_nb_const_xmlChar_ptr;n_prefix2++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_prefix3 = 0;n_prefix3 < gen_nb_const_xmlChar_ptr;n_prefix3++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- prefix2 = gen_const_xmlChar_ptr(n_prefix2, 3);
- name2 = gen_const_xmlChar_ptr(n_name2, 4);
- prefix3 = gen_const_xmlChar_ptr(n_prefix3, 5);
- name3 = gen_const_xmlChar_ptr(n_name3, 6);
-
- ret_val = xmlHashQLookup3(table, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)prefix2, (const xmlChar *)name2, (const xmlChar *)prefix3, (const xmlChar *)name3);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_prefix2, (const xmlChar *)prefix2, 3);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 4);
- des_const_xmlChar_ptr(n_prefix3, (const xmlChar *)prefix3, 5);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 6);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashQLookup3",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_prefix);
- printf(" %d", n_name);
- printf(" %d", n_prefix2);
- printf(" %d", n_name2);
- printf(" %d", n_prefix3);
- printf(" %d", n_name3);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashRemoveEntry(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlHashDeallocator f; /* the deallocator function for removed item (if any) */
- int n_f;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- f = gen_xmlHashDeallocator(n_f, 2);
-
- ret_val = xmlHashRemoveEntry(table, (const xmlChar *)name, f);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_xmlHashDeallocator(n_f, f, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashRemoveEntry",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_f);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashRemoveEntry2(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlHashDeallocator f; /* the deallocator function for removed item (if any) */
- int n_f;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- f = gen_xmlHashDeallocator(n_f, 3);
-
- ret_val = xmlHashRemoveEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, f);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_xmlHashDeallocator(n_f, f, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashRemoveEntry2",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_f);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashRemoveEntry3(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
- xmlHashDeallocator f; /* the deallocator function for removed item (if any) */
- int n_f;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- name3 = gen_const_xmlChar_ptr(n_name3, 3);
- f = gen_xmlHashDeallocator(n_f, 4);
-
- ret_val = xmlHashRemoveEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, f);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3);
- des_xmlHashDeallocator(n_f, f, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashRemoveEntry3",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_name3);
- printf(" %d", n_f);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashScan(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlHashScan3(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlHashScanFull(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlHashScanFull3(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlHashSize(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
-
- ret_val = xmlHashSize(table);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashSize",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashUpdateEntry(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
- xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */
- int n_f;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- userdata = gen_userdata(n_userdata, 2);
- f = gen_xmlHashDeallocator(n_f, 3);
-
- ret_val = xmlHashUpdateEntry(table, (const xmlChar *)name, userdata, f);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_userdata(n_userdata, userdata, 2);
- des_xmlHashDeallocator(n_f, f, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashUpdateEntry",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_userdata);
- printf(" %d", n_f);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashUpdateEntry2(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
- xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */
- int n_f;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- userdata = gen_userdata(n_userdata, 3);
- f = gen_xmlHashDeallocator(n_f, 4);
-
- ret_val = xmlHashUpdateEntry2(table, (const xmlChar *)name, (const xmlChar *)name2, userdata, f);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_userdata(n_userdata, userdata, 3);
- des_xmlHashDeallocator(n_f, f, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashUpdateEntry2",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_userdata);
- printf(" %d", n_f);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHashUpdateEntry3(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlHashTablePtr table; /* the hash table */
- int n_table;
- xmlChar * name; /* the name of the userdata */
- int n_name;
- xmlChar * name2; /* a second name of the userdata */
- int n_name2;
- xmlChar * name3; /* a third name of the userdata */
- int n_name3;
- void * userdata; /* a pointer to the userdata */
- int n_userdata;
- xmlHashDeallocator f; /* the deallocator function for replaced item (if any) */
- int n_f;
-
- for (n_table = 0;n_table < gen_nb_xmlHashTablePtr;n_table++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_name2 = 0;n_name2 < gen_nb_const_xmlChar_ptr;n_name2++) {
- for (n_name3 = 0;n_name3 < gen_nb_const_xmlChar_ptr;n_name3++) {
- for (n_userdata = 0;n_userdata < gen_nb_userdata;n_userdata++) {
- for (n_f = 0;n_f < gen_nb_xmlHashDeallocator;n_f++) {
- mem_base = xmlMemBlocks();
- table = gen_xmlHashTablePtr(n_table, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- name2 = gen_const_xmlChar_ptr(n_name2, 2);
- name3 = gen_const_xmlChar_ptr(n_name3, 3);
- userdata = gen_userdata(n_userdata, 4);
- f = gen_xmlHashDeallocator(n_f, 5);
-
- ret_val = xmlHashUpdateEntry3(table, (const xmlChar *)name, (const xmlChar *)name2, (const xmlChar *)name3, userdata, f);
- desret_int(ret_val);
- call_tests++;
- des_xmlHashTablePtr(n_table, table, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_name2, (const xmlChar *)name2, 2);
- des_const_xmlChar_ptr(n_name3, (const xmlChar *)name3, 3);
- des_userdata(n_userdata, userdata, 4);
- des_xmlHashDeallocator(n_f, f, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHashUpdateEntry3",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_table);
- printf(" %d", n_name);
- printf(" %d", n_name2);
- printf(" %d", n_name3);
- printf(" %d", n_userdata);
- printf(" %d", n_f);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_hash(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing hash : 16 of 24 functions ...\n");
- test_ret += test_xmlHashAddEntry();
- test_ret += test_xmlHashAddEntry2();
- test_ret += test_xmlHashAddEntry3();
- test_ret += test_xmlHashCopy();
- test_ret += test_xmlHashCreate();
- test_ret += test_xmlHashCreateDict();
- test_ret += test_xmlHashLookup();
- test_ret += test_xmlHashLookup2();
- test_ret += test_xmlHashLookup3();
- test_ret += test_xmlHashQLookup();
- test_ret += test_xmlHashQLookup2();
- test_ret += test_xmlHashQLookup3();
- test_ret += test_xmlHashRemoveEntry();
- test_ret += test_xmlHashRemoveEntry2();
- test_ret += test_xmlHashRemoveEntry3();
- test_ret += test_xmlHashScan();
- test_ret += test_xmlHashScan3();
- test_ret += test_xmlHashScanFull();
- test_ret += test_xmlHashScanFull3();
- test_ret += test_xmlHashSize();
- test_ret += test_xmlHashUpdateEntry();
- test_ret += test_xmlHashUpdateEntry2();
- test_ret += test_xmlHashUpdateEntry3();
-
- if (test_ret != 0)
- printf("Module hash: %d errors\n", test_ret);
- return(test_ret);
-}
-
-#define gen_nb_xmlLinkPtr 1
-static xmlLinkPtr gen_xmlLinkPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlLinkPtr(int no ATTRIBUTE_UNUSED, xmlLinkPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlLinkGetData(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlLinkPtr lk; /* a link */
- int n_lk;
-
- for (n_lk = 0;n_lk < gen_nb_xmlLinkPtr;n_lk++) {
- mem_base = xmlMemBlocks();
- lk = gen_xmlLinkPtr(n_lk, 0);
-
- ret_val = xmlLinkGetData(lk);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlLinkPtr(n_lk, lk, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlLinkGetData",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_lk);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListAppend(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* the data */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListAppend(l, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListAppend",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListClear(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlListPtr l; /* a list */
- int n_l;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
-
- xmlListClear(l);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListClear",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlListPtr 1
-static xmlListPtr gen_const_xmlListPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlListPtr(int no ATTRIBUTE_UNUSED, const xmlListPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlListCopy(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr cur; /* the new list */
- int n_cur;
- xmlListPtr old; /* the old list */
- int n_old;
-
- for (n_cur = 0;n_cur < gen_nb_xmlListPtr;n_cur++) {
- for (n_old = 0;n_old < gen_nb_const_xmlListPtr;n_old++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlListPtr(n_cur, 0);
- old = gen_const_xmlListPtr(n_old, 1);
-
- ret_val = xmlListCopy(cur, (const xmlListPtr)old);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_cur, cur, 0);
- des_const_xmlListPtr(n_old, (const xmlListPtr)old, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListCopy",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_old);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListCreate(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlListDup(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlListEmpty(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
-
- ret_val = xmlListEmpty(l);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListEmpty",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListEnd(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlListFront(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlListInsert(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* the data */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListInsert(l, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListInsert",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListMerge(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlListPtr l1; /* the original list */
- int n_l1;
- xmlListPtr l2; /* the new list */
- int n_l2;
-
- for (n_l1 = 0;n_l1 < gen_nb_xmlListPtr;n_l1++) {
- for (n_l2 = 0;n_l2 < gen_nb_xmlListPtr;n_l2++) {
- mem_base = xmlMemBlocks();
- l1 = gen_xmlListPtr(n_l1, 0);
- l2 = gen_xmlListPtr(n_l2, 1);
-
- xmlListMerge(l1, l2);
- call_tests++;
- des_xmlListPtr(n_l1, l1, 0);
- des_xmlListPtr(n_l2, l2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListMerge",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l1);
- printf(" %d", n_l2);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListPopBack(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlListPtr l; /* a list */
- int n_l;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
-
- xmlListPopBack(l);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListPopBack",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListPopFront(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlListPtr l; /* a list */
- int n_l;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
-
- xmlListPopFront(l);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListPopFront",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListPushBack(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* new data */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListPushBack(l, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListPushBack",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListPushFront(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* new data */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListPushFront(l, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListPushFront",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListRemoveAll(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* list data */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListRemoveAll(l, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListRemoveAll",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListRemoveFirst(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* list data */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListRemoveFirst(l, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListRemoveFirst",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListRemoveLast(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* list data */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListRemoveLast(l, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListRemoveLast",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListReverse(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlListPtr l; /* a list */
- int n_l;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
-
- xmlListReverse(l);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListReverse",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListReverseSearch(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* a search value */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListReverseSearch(l, data);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListReverseSearch",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListReverseWalk(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlListSearch(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- xmlListPtr l; /* a list */
- int n_l;
- void * data; /* a search value */
- int n_data;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
- data = gen_userdata(n_data, 1);
-
- ret_val = xmlListSearch(l, data);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- des_userdata(n_data, data, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListSearch",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListSize(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlListPtr l; /* a list */
- int n_l;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
-
- ret_val = xmlListSize(l);
- desret_int(ret_val);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListSize",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListSort(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlListPtr l; /* a list */
- int n_l;
-
- for (n_l = 0;n_l < gen_nb_xmlListPtr;n_l++) {
- mem_base = xmlMemBlocks();
- l = gen_xmlListPtr(n_l, 0);
-
- xmlListSort(l);
- call_tests++;
- des_xmlListPtr(n_l, l, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlListSort",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_l);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlListWalk(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-static int
-test_list(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing list : 19 of 26 functions ...\n");
- test_ret += test_xmlLinkGetData();
- test_ret += test_xmlListAppend();
- test_ret += test_xmlListClear();
- test_ret += test_xmlListCopy();
- test_ret += test_xmlListCreate();
- test_ret += test_xmlListDup();
- test_ret += test_xmlListEmpty();
- test_ret += test_xmlListEnd();
- test_ret += test_xmlListFront();
- test_ret += test_xmlListInsert();
- test_ret += test_xmlListMerge();
- test_ret += test_xmlListPopBack();
- test_ret += test_xmlListPopFront();
- test_ret += test_xmlListPushBack();
- test_ret += test_xmlListPushFront();
- test_ret += test_xmlListRemoveAll();
- test_ret += test_xmlListRemoveFirst();
- test_ret += test_xmlListRemoveLast();
- test_ret += test_xmlListReverse();
- test_ret += test_xmlListReverseSearch();
- test_ret += test_xmlListReverseWalk();
- test_ret += test_xmlListSearch();
- test_ret += test_xmlListSize();
- test_ret += test_xmlListSort();
- test_ret += test_xmlListWalk();
-
- if (test_ret != 0)
- printf("Module list: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlNanoFTPCheckResponse(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* an FTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoFTPCheckResponse(ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPCheckResponse",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPCleanup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlNanoFTPCleanup();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPCleanup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPCloseConnection(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* an FTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoFTPCloseConnection(ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPCloseConnection",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPCwd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* an FTP context */
- int n_ctx;
- char * directory; /* a directory on the server */
- int n_directory;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) {
- for (n_directory = 0;n_directory < gen_nb_const_char_ptr;n_directory++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0);
- directory = gen_const_char_ptr(n_directory, 1);
-
- ret_val = xmlNanoFTPCwd(ctx, (const char *)directory);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0);
- des_const_char_ptr(n_directory, (const char *)directory, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPCwd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_directory);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPDele(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* an FTP context */
- int n_ctx;
- const char * file; /* a file or directory on the server */
- int n_file;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) {
- for (n_file = 0;n_file < gen_nb_filepath;n_file++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0);
- file = gen_filepath(n_file, 1);
-
- ret_val = xmlNanoFTPDele(ctx, file);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0);
- des_filepath(n_file, file, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPDele",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_file);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPGet(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPGetConnection(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPGetResponse(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* an FTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoFTPGetResponse(ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPGetResponse",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPGetSocket(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPInit(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlNanoFTPInit();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPInit",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPList(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPNewCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- void * ret_val;
- const char * URL; /* The URL used to initialize the context */
- int n_URL;
-
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- mem_base = xmlMemBlocks();
- URL = gen_filepath(n_URL, 0);
-
- ret_val = xmlNanoFTPNewCtxt(URL);
- desret_xmlNanoFTPCtxtPtr(ret_val);
- call_tests++;
- des_filepath(n_URL, URL, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPNewCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPOpen(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- void * ret_val;
- const char * URL; /* the URL to the resource */
- int n_URL;
-
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- mem_base = xmlMemBlocks();
- URL = gen_filepath(n_URL, 0);
-
- ret_val = xmlNanoFTPOpen(URL);
- desret_xmlNanoFTPCtxtPtr(ret_val);
- call_tests++;
- des_filepath(n_URL, URL, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPOpen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPProxy(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- char * host; /* the proxy host name */
- int n_host;
- int port; /* the proxy port */
- int n_port;
- char * user; /* the proxy user name */
- int n_user;
- char * passwd; /* the proxy password */
- int n_passwd;
- int type; /* the type of proxy 1 for using SITE, 2 for USER a@b */
- int n_type;
-
- for (n_host = 0;n_host < gen_nb_const_char_ptr;n_host++) {
- for (n_port = 0;n_port < gen_nb_int;n_port++) {
- for (n_user = 0;n_user < gen_nb_const_char_ptr;n_user++) {
- for (n_passwd = 0;n_passwd < gen_nb_const_char_ptr;n_passwd++) {
- for (n_type = 0;n_type < gen_nb_int;n_type++) {
- host = gen_const_char_ptr(n_host, 0);
- port = gen_int(n_port, 1);
- user = gen_const_char_ptr(n_user, 2);
- passwd = gen_const_char_ptr(n_passwd, 3);
- type = gen_int(n_type, 4);
-
- xmlNanoFTPProxy((const char *)host, port, (const char *)user, (const char *)passwd, type);
- call_tests++;
- des_const_char_ptr(n_host, (const char *)host, 0);
- des_int(n_port, port, 1);
- des_const_char_ptr(n_user, (const char *)user, 2);
- des_const_char_ptr(n_passwd, (const char *)passwd, 3);
- des_int(n_type, type, 4);
- xmlResetLastError();
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPQuit(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* an FTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoFTPQuit(ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPQuit",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPRead(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* the FTP context */
- int n_ctx;
- void * dest; /* a buffer */
- int n_dest;
- int len; /* the buffer length */
- int n_len;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) {
- for (n_dest = 0;n_dest < gen_nb_void_ptr;n_dest++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0);
- dest = gen_void_ptr(n_dest, 1);
- len = gen_int(n_len, 2);
-
- ret_val = xmlNanoFTPRead(ctx, dest, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0);
- des_void_ptr(n_dest, dest, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPRead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_dest);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPScanProxy(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- const char * URL; /* The proxy URL used to initialize the proxy context */
- int n_URL;
-
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- URL = gen_filepath(n_URL, 0);
-
- xmlNanoFTPScanProxy(URL);
- call_tests++;
- des_filepath(n_URL, URL, 0);
- xmlResetLastError();
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoFTPUpdateURL(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* an FTP context */
- int n_ctx;
- const char * URL; /* The URL used to update the context */
- int n_URL;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoFTPCtxtPtr;n_ctx++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoFTPCtxtPtr(n_ctx, 0);
- URL = gen_filepath(n_URL, 1);
-
- ret_val = xmlNanoFTPUpdateURL(ctx, URL);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoFTPCtxtPtr(n_ctx, ctx, 0);
- des_filepath(n_URL, URL, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoFTPUpdateURL",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_URL);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_nanoftp(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing nanoftp : 14 of 22 functions ...\n");
- test_ret += test_xmlNanoFTPCheckResponse();
- test_ret += test_xmlNanoFTPCleanup();
- test_ret += test_xmlNanoFTPCloseConnection();
- test_ret += test_xmlNanoFTPCwd();
- test_ret += test_xmlNanoFTPDele();
- test_ret += test_xmlNanoFTPGet();
- test_ret += test_xmlNanoFTPGetConnection();
- test_ret += test_xmlNanoFTPGetResponse();
- test_ret += test_xmlNanoFTPGetSocket();
- test_ret += test_xmlNanoFTPInit();
- test_ret += test_xmlNanoFTPList();
- test_ret += test_xmlNanoFTPNewCtxt();
- test_ret += test_xmlNanoFTPOpen();
- test_ret += test_xmlNanoFTPProxy();
- test_ret += test_xmlNanoFTPQuit();
- test_ret += test_xmlNanoFTPRead();
- test_ret += test_xmlNanoFTPScanProxy();
- test_ret += test_xmlNanoFTPUpdateURL();
-
- if (test_ret != 0)
- printf("Module nanoftp: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlNanoHTTPAuthHeader(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- const char * ret_val;
- void * ctx; /* the HTTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoHTTPAuthHeader(ctx);
- desret_const_char_ptr(ret_val);
- call_tests++;
- des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPAuthHeader",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPCleanup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlNanoHTTPCleanup();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPCleanup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPContentLength(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* the HTTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoHTTPContentLength(ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPContentLength",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPEncoding(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- const char * ret_val;
- void * ctx; /* the HTTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoHTTPEncoding(ctx);
- desret_const_char_ptr(ret_val);
- call_tests++;
- des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_char_ptr_ptr 1
-static char ** gen_char_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_char_ptr_ptr(int no ATTRIBUTE_UNUSED, char ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlNanoHTTPFetch(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- int ret_val;
- const char * URL; /* The URL to load */
- int n_URL;
- const char * filename; /* the filename where the content should be saved */
- int n_filename;
- char ** contentType; /* if available the Content-Type information will be returned at that location */
- int n_contentType;
-
- for (n_URL = 0;n_URL < gen_nb_fileoutput;n_URL++) {
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) {
- mem_base = xmlMemBlocks();
- URL = gen_fileoutput(n_URL, 0);
- filename = gen_fileoutput(n_filename, 1);
- contentType = gen_char_ptr_ptr(n_contentType, 2);
-
- ret_val = xmlNanoHTTPFetch(URL, filename, contentType);
- desret_int(ret_val);
- call_tests++;
- des_fileoutput(n_URL, URL, 0);
- des_fileoutput(n_filename, filename, 1);
- des_char_ptr_ptr(n_contentType, contentType, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPFetch",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf(" %d", n_filename);
- printf(" %d", n_contentType);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPInit(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlNanoHTTPInit();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPInit",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPMimeType(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- const char * ret_val;
- void * ctx; /* the HTTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoHTTPMimeType(ctx);
- desret_const_char_ptr(ret_val);
- call_tests++;
- des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPMimeType",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPOpen(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- void * ret_val;
- const char * URL; /* The URL to load */
- int n_URL;
- char ** contentType; /* if available the Content-Type information will be returned at that location */
- int n_contentType;
-
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) {
- mem_base = xmlMemBlocks();
- URL = gen_filepath(n_URL, 0);
- contentType = gen_char_ptr_ptr(n_contentType, 1);
-
- ret_val = xmlNanoHTTPOpen(URL, contentType);
- desret_xmlNanoHTTPCtxtPtr(ret_val);
- call_tests++;
- des_filepath(n_URL, URL, 0);
- des_char_ptr_ptr(n_contentType, contentType, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPOpen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf(" %d", n_contentType);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPOpenRedir(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- void * ret_val;
- const char * URL; /* The URL to load */
- int n_URL;
- char ** contentType; /* if available the Content-Type information will be returned at that location */
- int n_contentType;
- char ** redir; /* if available the redirected URL will be returned */
- int n_redir;
-
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_contentType = 0;n_contentType < gen_nb_char_ptr_ptr;n_contentType++) {
- for (n_redir = 0;n_redir < gen_nb_char_ptr_ptr;n_redir++) {
- mem_base = xmlMemBlocks();
- URL = gen_filepath(n_URL, 0);
- contentType = gen_char_ptr_ptr(n_contentType, 1);
- redir = gen_char_ptr_ptr(n_redir, 2);
-
- ret_val = xmlNanoHTTPOpenRedir(URL, contentType, redir);
- desret_xmlNanoHTTPCtxtPtr(ret_val);
- call_tests++;
- des_filepath(n_URL, URL, 0);
- des_char_ptr_ptr(n_contentType, contentType, 1);
- des_char_ptr_ptr(n_redir, redir, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPOpenRedir",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf(" %d", n_contentType);
- printf(" %d", n_redir);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPRead(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* the HTTP context */
- int n_ctx;
- void * dest; /* a buffer */
- int n_dest;
- int len; /* the buffer length */
- int n_len;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) {
- for (n_dest = 0;n_dest < gen_nb_void_ptr;n_dest++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0);
- dest = gen_void_ptr(n_dest, 1);
- len = gen_int(n_len, 2);
-
- ret_val = xmlNanoHTTPRead(ctx, dest, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0);
- des_void_ptr(n_dest, dest, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPRead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_dest);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPRedir(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPReturnCode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- int ret_val;
- void * ctx; /* the HTTP context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlNanoHTTPCtxtPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlNanoHTTPCtxtPtr(n_ctx, 0);
-
- ret_val = xmlNanoHTTPReturnCode(ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlNanoHTTPCtxtPtr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPReturnCode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPSave(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- void * ctxt; /* the HTTP context */
- int n_ctxt;
- const char * filename; /* the filename where the content should be saved */
- int n_filename;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_void_ptr;n_ctxt++) {
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_void_ptr(n_ctxt, 0);
- filename = gen_fileoutput(n_filename, 1);
-
- ret_val = xmlNanoHTTPSave(ctxt, filename);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_ctxt, ctxt, 0);
- des_fileoutput(n_filename, filename, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNanoHTTPSave",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNanoHTTPScanProxy(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- const char * URL; /* The proxy URL used to initialize the proxy context */
- int n_URL;
-
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- URL = gen_filepath(n_URL, 0);
-
- xmlNanoHTTPScanProxy(URL);
- call_tests++;
- des_filepath(n_URL, URL, 0);
- xmlResetLastError();
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_nanohttp(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing nanohttp : 13 of 17 functions ...\n");
- test_ret += test_xmlNanoHTTPAuthHeader();
- test_ret += test_xmlNanoHTTPCleanup();
- test_ret += test_xmlNanoHTTPContentLength();
- test_ret += test_xmlNanoHTTPEncoding();
- test_ret += test_xmlNanoHTTPFetch();
- test_ret += test_xmlNanoHTTPInit();
- test_ret += test_xmlNanoHTTPMimeType();
- test_ret += test_xmlNanoHTTPOpen();
- test_ret += test_xmlNanoHTTPOpenRedir();
- test_ret += test_xmlNanoHTTPRead();
- test_ret += test_xmlNanoHTTPRedir();
- test_ret += test_xmlNanoHTTPReturnCode();
- test_ret += test_xmlNanoHTTPSave();
- test_ret += test_xmlNanoHTTPScanProxy();
-
- if (test_ret != 0)
- printf("Module nanohttp: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlByteConsumed(void) {
- int test_ret = 0;
-
- int mem_base;
- long ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlByteConsumed(ctxt);
- desret_long(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlByteConsumed",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlClearNodeInfoSeq(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserNodeInfoSeqPtr seq; /* a node info sequence pointer */
- int n_seq;
-
- for (n_seq = 0;n_seq < gen_nb_xmlParserNodeInfoSeqPtr;n_seq++) {
- mem_base = xmlMemBlocks();
- seq = gen_xmlParserNodeInfoSeqPtr(n_seq, 0);
-
- xmlClearNodeInfoSeq(seq);
- call_tests++;
- des_xmlParserNodeInfoSeqPtr(n_seq, seq, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlClearNodeInfoSeq",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_seq);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlClearParserCtxt(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- xmlClearParserCtxt(ctxt);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlClearParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateDocParserCtxt(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ret_val;
- xmlChar * cur; /* a pointer to an array of xmlChar */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlChar_ptr(n_cur, 0);
-
- ret_val = xmlCreateDocParserCtxt((const xmlChar *)cur);
- desret_xmlParserCtxtPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCreateDocParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCreatePushParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PUSH_ENABLED)
- int mem_base;
- xmlParserCtxtPtr ret_val;
- xmlSAXHandlerPtr sax; /* a SAX handler */
- int n_sax;
- void * user_data; /* The user data returned on SAX callbacks */
- int n_user_data;
- char * chunk; /* a pointer to an array of chars */
- int n_chunk;
- int size; /* number of chars in the array */
- int n_size;
- const char * filename; /* an optional file name or URI */
- int n_filename;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
- for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- user_data = gen_userdata(n_user_data, 1);
- chunk = gen_const_char_ptr(n_chunk, 2);
- size = gen_int(n_size, 3);
- filename = gen_fileoutput(n_filename, 4);
- if ((chunk != NULL) &&
- (size > (int) strlen((const char *) chunk) + 1))
- continue;
-
- ret_val = xmlCreatePushParserCtxt(sax, user_data, (const char *)chunk, size, filename);
- desret_xmlParserCtxtPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_userdata(n_user_data, user_data, 1);
- des_const_char_ptr(n_chunk, (const char *)chunk, 2);
- des_int(n_size, size, 3);
- des_fileoutput(n_filename, filename, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCreatePushParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_user_data);
- printf(" %d", n_chunk);
- printf(" %d", n_size);
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCtxtReadDoc(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDocPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlChar * cur; /* a pointer to a zero terminated string */
- int n_cur;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- cur = gen_const_xmlChar_ptr(n_cur, 1);
- URL = gen_filepath(n_URL, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- options = gen_parseroptions(n_options, 4);
-
- ret_val = xmlCtxtReadDoc(ctxt, (const xmlChar *)cur, URL, (const char *)encoding, options);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1);
- des_filepath(n_URL, URL, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_parseroptions(n_options, options, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCtxtReadDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCtxtReadFile(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDocPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- const char * filename; /* a file or URL */
- int n_filename;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- filename = gen_filepath(n_filename, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- options = gen_parseroptions(n_options, 3);
-
- ret_val = xmlCtxtReadFile(ctxt, filename, (const char *)encoding, options);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_filepath(n_filename, filename, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_parseroptions(n_options, options, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCtxtReadFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_filename);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCtxtReadMemory(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDocPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- char * buffer; /* a pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- buffer = gen_const_char_ptr(n_buffer, 1);
- size = gen_int(n_size, 2);
- URL = gen_filepath(n_URL, 3);
- encoding = gen_const_char_ptr(n_encoding, 4);
- options = gen_parseroptions(n_options, 5);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlCtxtReadMemory(ctxt, (const char *)buffer, size, URL, (const char *)encoding, options);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_char_ptr(n_buffer, (const char *)buffer, 1);
- des_int(n_size, size, 2);
- des_filepath(n_URL, URL, 3);
- des_const_char_ptr(n_encoding, (const char *)encoding, 4);
- des_parseroptions(n_options, options, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCtxtReadMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCtxtReset(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- xmlCtxtReset(ctxt);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCtxtReset",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCtxtResetPush(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- char * chunk; /* a pointer to an array of chars */
- int n_chunk;
- int size; /* number of chars in the array */
- int n_size;
- const char * filename; /* an optional file name or URI */
- int n_filename;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- chunk = gen_const_char_ptr(n_chunk, 1);
- size = gen_int(n_size, 2);
- filename = gen_filepath(n_filename, 3);
- encoding = gen_const_char_ptr(n_encoding, 4);
- if ((chunk != NULL) &&
- (size > (int) strlen((const char *) chunk) + 1))
- continue;
-
- ret_val = xmlCtxtResetPush(ctxt, (const char *)chunk, size, filename, (const char *)encoding);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_char_ptr(n_chunk, (const char *)chunk, 1);
- des_int(n_size, size, 2);
- des_filepath(n_filename, filename, 3);
- des_const_char_ptr(n_encoding, (const char *)encoding, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCtxtResetPush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_chunk);
- printf(" %d", n_size);
- printf(" %d", n_filename);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCtxtUseOptions(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- options = gen_parseroptions(n_options, 1);
-
- ret_val = xmlCtxtUseOptions(ctxt, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_parseroptions(n_options, options, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCtxtUseOptions",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetExternalEntityLoader(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlGetFeature(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_LEGACY_ENABLED
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML/HTML parser context */
- int n_ctxt;
- char * name; /* the feature name */
- int n_name;
- void * result; /* location to store the result */
- int n_result;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) {
- for (n_result = 0;n_result < gen_nb_void_ptr;n_result++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- name = gen_const_char_ptr(n_name, 1);
- result = gen_void_ptr(n_result, 2);
-
- ret_val = xmlGetFeature(ctxt, (const char *)name, result);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_char_ptr(n_name, (const char *)name, 1);
- des_void_ptr(n_result, result, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetFeature",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_name);
- printf(" %d", n_result);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_char_ptr_ptr 1
-static char ** gen_const_char_ptr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_char_ptr_ptr(int no ATTRIBUTE_UNUSED, const char ** val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlGetFeaturesList(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_LEGACY_ENABLED
- int mem_base;
- int ret_val;
- int * len; /* the length of the features name array (input/output) */
- int n_len;
- char ** result; /* an array of string to be filled with the features name. */
- int n_result;
-
- for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) {
- for (n_result = 0;n_result < gen_nb_const_char_ptr_ptr;n_result++) {
- mem_base = xmlMemBlocks();
- len = gen_int_ptr(n_len, 0);
- result = gen_const_char_ptr_ptr(n_result, 1);
-
- ret_val = xmlGetFeaturesList(len, (const char **)result);
- desret_int(ret_val);
- call_tests++;
- des_int_ptr(n_len, len, 0);
- des_const_char_ptr_ptr(n_result, (const char **)result, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetFeaturesList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_len);
- printf(" %d", n_result);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHasFeature(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlFeature feature; /* the feature to be examined */
- int n_feature;
-
- for (n_feature = 0;n_feature < gen_nb_xmlFeature;n_feature++) {
- mem_base = xmlMemBlocks();
- feature = gen_xmlFeature(n_feature, 0);
-
- ret_val = xmlHasFeature(feature);
- desret_int(ret_val);
- call_tests++;
- des_xmlFeature(n_feature, feature, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHasFeature",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_feature);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOParseDTD(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef LIBXML_VALID_ENABLED
- xmlDtdPtr ret_val;
- xmlSAXHandlerPtr sax; /* the SAX handler block or NULL */
- int n_sax;
- xmlParserInputBufferPtr input; /* an Input Buffer */
- int n_input;
- xmlCharEncoding enc; /* the charset encoding if known */
- int n_enc;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- input = gen_xmlParserInputBufferPtr(n_input, 1);
- enc = gen_xmlCharEncoding(n_enc, 2);
-
- ret_val = xmlIOParseDTD(sax, input, enc);
- input = NULL;
- desret_xmlDtdPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_xmlParserInputBufferPtr(n_input, input, 1);
- des_xmlCharEncoding(n_enc, enc, 2);
- xmlResetLastError();
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlInitNodeInfoSeq(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserNodeInfoSeqPtr seq; /* a node info sequence pointer */
- int n_seq;
-
- for (n_seq = 0;n_seq < gen_nb_xmlParserNodeInfoSeqPtr;n_seq++) {
- mem_base = xmlMemBlocks();
- seq = gen_xmlParserNodeInfoSeqPtr(n_seq, 0);
-
- xmlInitNodeInfoSeq(seq);
- call_tests++;
- des_xmlParserNodeInfoSeqPtr(n_seq, seq, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlInitNodeInfoSeq",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_seq);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlInitParser(void) {
- int test_ret = 0;
-
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlInitParser();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlInitParser",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlInitParserCtxt(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlInitParserCtxt(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlInitParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlKeepBlanksDefault(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- int val; /* int 0 or 1 */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_int(n_val, 0);
-
- ret_val = xmlKeepBlanksDefault(val);
- desret_int(ret_val);
- call_tests++;
- des_int(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlKeepBlanksDefault",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlLineNumbersDefault(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- int val; /* int 0 or 1 */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_int(n_val, 0);
-
- ret_val = xmlLineNumbersDefault(val);
- desret_int(ret_val);
- call_tests++;
- des_int(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlLineNumbersDefault",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlLoadExternalEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- const char * URL; /* the URL for the entity to load */
- int n_URL;
- char * ID; /* the Public ID for the entity to load */
- int n_ID;
- xmlParserCtxtPtr ctxt; /* the context in which the entity is called or NULL */
- int n_ctxt;
-
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_ID = 0;n_ID < gen_nb_const_char_ptr;n_ID++) {
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- URL = gen_filepath(n_URL, 0);
- ID = gen_const_char_ptr(n_ID, 1);
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 2);
-
- ret_val = xmlLoadExternalEntity(URL, (const char *)ID, ctxt);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_filepath(n_URL, URL, 0);
- des_const_char_ptr(n_ID, (const char *)ID, 1);
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlLoadExternalEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf(" %d", n_ID);
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewIOInputStream(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlParserInputBufferPtr input; /* an I/O Input */
- int n_input;
- xmlCharEncoding enc; /* the charset encoding if known */
- int n_enc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- input = gen_xmlParserInputBufferPtr(n_input, 1);
- enc = gen_xmlCharEncoding(n_enc, 2);
-
- ret_val = xmlNewIOInputStream(ctxt, input, enc);
- if (ret_val != NULL) input = NULL;
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlParserInputBufferPtr(n_input, input, 1);
- des_xmlCharEncoding(n_enc, enc, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewIOInputStream",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_input);
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewParserCtxt(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlNewParserCtxt();
- desret_xmlParserCtxtPtr(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlNodePtr_ptr 1
-static xmlNodePtr * gen_xmlNodePtr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlNodePtr_ptr(int no ATTRIBUTE_UNUSED, xmlNodePtr * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlParseBalancedChunkMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document the chunk pertains to */
- int n_doc;
- xmlSAXHandlerPtr sax; /* the SAX handler bloc (possibly NULL) */
- int n_sax;
- void * user_data; /* The user data returned on SAX callbacks (possibly NULL) */
- int n_user_data;
- int depth; /* Used for loop detection, use 0 */
- int n_depth;
- xmlChar * string; /* the input string in UTF8 or ISO-Latin (zero terminated) */
- int n_string;
- xmlNodePtr * lst; /* the return value for the set of parsed nodes */
- int n_lst;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) {
- for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- sax = gen_xmlSAXHandlerPtr(n_sax, 1);
- user_data = gen_userdata(n_user_data, 2);
- depth = gen_int(n_depth, 3);
- string = gen_const_xmlChar_ptr(n_string, 4);
- lst = gen_xmlNodePtr_ptr(n_lst, 5);
-
-#ifdef LIBXML_SAX1_ENABLED
- if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL;
-#endif
-
-
- ret_val = xmlParseBalancedChunkMemory(doc, sax, user_data, depth, (const xmlChar *)string, lst);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlSAXHandlerPtr(n_sax, sax, 1);
- des_userdata(n_user_data, user_data, 2);
- des_int(n_depth, depth, 3);
- des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 4);
- des_xmlNodePtr_ptr(n_lst, lst, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseBalancedChunkMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_sax);
- printf(" %d", n_user_data);
- printf(" %d", n_depth);
- printf(" %d", n_string);
- printf(" %d", n_lst);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseBalancedChunkMemoryRecover(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document the chunk pertains to */
- int n_doc;
- xmlSAXHandlerPtr sax; /* the SAX handler bloc (possibly NULL) */
- int n_sax;
- void * user_data; /* The user data returned on SAX callbacks (possibly NULL) */
- int n_user_data;
- int depth; /* Used for loop detection, use 0 */
- int n_depth;
- xmlChar * string; /* the input string in UTF8 or ISO-Latin (zero terminated) */
- int n_string;
- xmlNodePtr * lst; /* the return value for the set of parsed nodes */
- int n_lst;
- int recover; /* return nodes even if the data is broken (use 0) */
- int n_recover;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) {
- for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) {
- for (n_recover = 0;n_recover < gen_nb_int;n_recover++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- sax = gen_xmlSAXHandlerPtr(n_sax, 1);
- user_data = gen_userdata(n_user_data, 2);
- depth = gen_int(n_depth, 3);
- string = gen_const_xmlChar_ptr(n_string, 4);
- lst = gen_xmlNodePtr_ptr(n_lst, 5);
- recover = gen_int(n_recover, 6);
-
-#ifdef LIBXML_SAX1_ENABLED
- if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL;
-#endif
-
-
- ret_val = xmlParseBalancedChunkMemoryRecover(doc, sax, user_data, depth, (const xmlChar *)string, lst, recover);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlSAXHandlerPtr(n_sax, sax, 1);
- des_userdata(n_user_data, user_data, 2);
- des_int(n_depth, depth, 3);
- des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 4);
- des_xmlNodePtr_ptr(n_lst, lst, 5);
- des_int(n_recover, recover, 6);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseBalancedChunkMemoryRecover",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_sax);
- printf(" %d", n_user_data);
- printf(" %d", n_depth);
- printf(" %d", n_string);
- printf(" %d", n_lst);
- printf(" %d", n_recover);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseChunk(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PUSH_ENABLED)
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- char * chunk; /* an char array */
- int n_chunk;
- int size; /* the size in byte of the chunk */
- int n_size;
- int terminate; /* last chunk indicator */
- int n_terminate;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_chunk = 0;n_chunk < gen_nb_const_char_ptr;n_chunk++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_terminate = 0;n_terminate < gen_nb_int;n_terminate++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- chunk = gen_const_char_ptr(n_chunk, 1);
- size = gen_int(n_size, 2);
- terminate = gen_int(n_terminate, 3);
- if ((chunk != NULL) &&
- (size > (int) strlen((const char *) chunk) + 1))
- continue;
-
- ret_val = xmlParseChunk(ctxt, (const char *)chunk, size, terminate);
- if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_char_ptr(n_chunk, (const char *)chunk, 1);
- des_int(n_size, size, 2);
- des_int(n_terminate, terminate, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseChunk",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_chunk);
- printf(" %d", n_size);
- printf(" %d", n_terminate);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseCtxtExternalEntity(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctx; /* the existing parsing context */
- int n_ctx;
- xmlChar * URL; /* the URL for the entity to load */
- int n_URL;
- xmlChar * ID; /* the System ID for the entity to load */
- int n_ID;
- xmlNodePtr * lst; /* the return value for the set of parsed nodes */
- int n_lst;
-
- for (n_ctx = 0;n_ctx < gen_nb_xmlParserCtxtPtr;n_ctx++) {
- for (n_URL = 0;n_URL < gen_nb_const_xmlChar_ptr;n_URL++) {
- for (n_ID = 0;n_ID < gen_nb_const_xmlChar_ptr;n_ID++) {
- for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) {
- mem_base = xmlMemBlocks();
- ctx = gen_xmlParserCtxtPtr(n_ctx, 0);
- URL = gen_const_xmlChar_ptr(n_URL, 1);
- ID = gen_const_xmlChar_ptr(n_ID, 2);
- lst = gen_xmlNodePtr_ptr(n_lst, 3);
-
- ret_val = xmlParseCtxtExternalEntity(ctx, (const xmlChar *)URL, (const xmlChar *)ID, lst);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctx, ctx, 0);
- des_const_xmlChar_ptr(n_URL, (const xmlChar *)URL, 1);
- des_const_xmlChar_ptr(n_ID, (const xmlChar *)ID, 2);
- des_xmlNodePtr_ptr(n_lst, lst, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseCtxtExternalEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_URL);
- printf(" %d", n_ID);
- printf(" %d", n_lst);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseDTD(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef LIBXML_VALID_ENABLED
- int mem_base;
- xmlDtdPtr ret_val;
- xmlChar * ExternalID; /* a NAME* containing the External ID of the DTD */
- int n_ExternalID;
- xmlChar * SystemID; /* a NAME* containing the URL to the DTD */
- int n_SystemID;
-
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- mem_base = xmlMemBlocks();
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 0);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 1);
-
- ret_val = xmlParseDTD((const xmlChar *)ExternalID, (const xmlChar *)SystemID);
- desret_xmlDtdPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 0);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseDTD",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- xmlChar * cur; /* a pointer to an array of xmlChar */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlChar_ptr(n_cur, 0);
-
- ret_val = xmlParseDoc((const xmlChar *)cur);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseDocument(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlParseDocument(ctxt);
- if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseEntity(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- const char * filename; /* the filename */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlParseEntity(filename);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseExtParsedEnt(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlParseExtParsedEnt(ctxt);
- if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;}
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseExtParsedEnt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseExternalEntity(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document the chunk pertains to */
- int n_doc;
- xmlSAXHandlerPtr sax; /* the SAX handler bloc (possibly NULL) */
- int n_sax;
- void * user_data; /* The user data returned on SAX callbacks (possibly NULL) */
- int n_user_data;
- int depth; /* Used for loop detection, use 0 */
- int n_depth;
- xmlChar * URL; /* the URL for the entity to load */
- int n_URL;
- xmlChar * ID; /* the System ID for the entity to load */
- int n_ID;
- xmlNodePtr * lst; /* the return value for the set of parsed nodes */
- int n_lst;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- for (n_URL = 0;n_URL < gen_nb_const_xmlChar_ptr;n_URL++) {
- for (n_ID = 0;n_ID < gen_nb_const_xmlChar_ptr;n_ID++) {
- for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- sax = gen_xmlSAXHandlerPtr(n_sax, 1);
- user_data = gen_userdata(n_user_data, 2);
- depth = gen_int(n_depth, 3);
- URL = gen_const_xmlChar_ptr(n_URL, 4);
- ID = gen_const_xmlChar_ptr(n_ID, 5);
- lst = gen_xmlNodePtr_ptr(n_lst, 6);
-
- ret_val = xmlParseExternalEntity(doc, sax, user_data, depth, (const xmlChar *)URL, (const xmlChar *)ID, lst);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlSAXHandlerPtr(n_sax, sax, 1);
- des_userdata(n_user_data, user_data, 2);
- des_int(n_depth, depth, 3);
- des_const_xmlChar_ptr(n_URL, (const xmlChar *)URL, 4);
- des_const_xmlChar_ptr(n_ID, (const xmlChar *)ID, 5);
- des_xmlNodePtr_ptr(n_lst, lst, 6);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseExternalEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_sax);
- printf(" %d", n_user_data);
- printf(" %d", n_depth);
- printf(" %d", n_URL);
- printf(" %d", n_ID);
- printf(" %d", n_lst);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- const char * filename; /* the filename */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlParseFile(filename);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseInNodeContext(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserErrors ret_val;
- xmlNodePtr node; /* the context node */
- int n_node;
- char * data; /* the input string */
- int n_data;
- int datalen; /* the input string length in bytes */
- int n_datalen;
- int options; /* a combination of xmlParserOption */
- int n_options;
- xmlNodePtr * lst; /* the return value for the set of parsed nodes */
- int n_lst;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_data = 0;n_data < gen_nb_const_char_ptr;n_data++) {
- for (n_datalen = 0;n_datalen < gen_nb_int;n_datalen++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- for (n_lst = 0;n_lst < gen_nb_xmlNodePtr_ptr;n_lst++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- data = gen_const_char_ptr(n_data, 1);
- datalen = gen_int(n_datalen, 2);
- options = gen_parseroptions(n_options, 3);
- lst = gen_xmlNodePtr_ptr(n_lst, 4);
-
- ret_val = xmlParseInNodeContext(node, (const char *)data, datalen, options, lst);
- desret_xmlParserErrors(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_const_char_ptr(n_data, (const char *)data, 1);
- des_int(n_datalen, datalen, 2);
- des_parseroptions(n_options, options, 3);
- des_xmlNodePtr_ptr(n_lst, lst, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseInNodeContext",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_data);
- printf(" %d", n_datalen);
- printf(" %d", n_options);
- printf(" %d", n_lst);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- char * buffer; /* an pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlParseMemory((const char *)buffer, size);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlParserNodeInfoPtr 1
-static xmlParserNodeInfoPtr gen_const_xmlParserNodeInfoPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlParserNodeInfoPtr(int no ATTRIBUTE_UNUSED, const xmlParserNodeInfoPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlParserAddNodeInfo(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlParserNodeInfoPtr info; /* a node info sequence pointer */
- int n_info;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_info = 0;n_info < gen_nb_const_xmlParserNodeInfoPtr;n_info++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- info = gen_const_xmlParserNodeInfoPtr(n_info, 1);
-
- xmlParserAddNodeInfo(ctxt, (const xmlParserNodeInfoPtr)info);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlParserNodeInfoPtr(n_info, (const xmlParserNodeInfoPtr)info, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserAddNodeInfo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_info);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlParserCtxtPtr 1
-static xmlParserCtxtPtr gen_const_xmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlParserCtxtPtr(int no ATTRIBUTE_UNUSED, const xmlParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-#define gen_nb_const_xmlNodePtr 1
-static xmlNodePtr gen_const_xmlNodePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlNodePtr(int no ATTRIBUTE_UNUSED, const xmlNodePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlParserFindNodeInfo(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlParserNodeInfo * ret_val;
- xmlParserCtxtPtr ctx; /* an XML parser context */
- int n_ctx;
- xmlNodePtr node; /* an XML node within the tree */
- int n_node;
-
- for (n_ctx = 0;n_ctx < gen_nb_const_xmlParserCtxtPtr;n_ctx++) {
- for (n_node = 0;n_node < gen_nb_const_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- ctx = gen_const_xmlParserCtxtPtr(n_ctx, 0);
- node = gen_const_xmlNodePtr(n_node, 1);
-
- ret_val = xmlParserFindNodeInfo((const xmlParserCtxtPtr)ctx, (const xmlNodePtr)node);
- desret_const_xmlParserNodeInfo_ptr(ret_val);
- call_tests++;
- des_const_xmlParserCtxtPtr(n_ctx, (const xmlParserCtxtPtr)ctx, 0);
- des_const_xmlNodePtr(n_node, (const xmlNodePtr)node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserFindNodeInfo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlParserNodeInfoSeqPtr 1
-static xmlParserNodeInfoSeqPtr gen_const_xmlParserNodeInfoSeqPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlParserNodeInfoSeqPtr(int no ATTRIBUTE_UNUSED, const xmlParserNodeInfoSeqPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlParserFindNodeInfoIndex(void) {
- int test_ret = 0;
-
- int mem_base;
- unsigned long ret_val;
- xmlParserNodeInfoSeqPtr seq; /* a node info sequence pointer */
- int n_seq;
- xmlNodePtr node; /* an XML node pointer */
- int n_node;
-
- for (n_seq = 0;n_seq < gen_nb_const_xmlParserNodeInfoSeqPtr;n_seq++) {
- for (n_node = 0;n_node < gen_nb_const_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- seq = gen_const_xmlParserNodeInfoSeqPtr(n_seq, 0);
- node = gen_const_xmlNodePtr(n_node, 1);
-
- ret_val = xmlParserFindNodeInfoIndex((const xmlParserNodeInfoSeqPtr)seq, (const xmlNodePtr)node);
- desret_unsigned_long(ret_val);
- call_tests++;
- des_const_xmlParserNodeInfoSeqPtr(n_seq, (const xmlParserNodeInfoSeqPtr)seq, 0);
- des_const_xmlNodePtr(n_node, (const xmlNodePtr)node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserFindNodeInfoIndex",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_seq);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlParserInputPtr 1
-static xmlParserInputPtr gen_xmlParserInputPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlParserInputPtr(int no ATTRIBUTE_UNUSED, xmlParserInputPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlParserInputGrow(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserInputPtr in; /* an XML parser input */
- int n_in;
- int len; /* an indicative size for the lookahead */
- int n_len;
-
- for (n_in = 0;n_in < gen_nb_xmlParserInputPtr;n_in++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- in = gen_xmlParserInputPtr(n_in, 0);
- len = gen_int(n_len, 1);
-
- ret_val = xmlParserInputGrow(in, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserInputPtr(n_in, in, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputGrow",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_in);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputRead(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserInputPtr in; /* an XML parser input */
- int n_in;
- int len; /* an indicative size for the lookahead */
- int n_len;
-
- for (n_in = 0;n_in < gen_nb_xmlParserInputPtr;n_in++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- in = gen_xmlParserInputPtr(n_in, 0);
- len = gen_int(n_len, 1);
-
- ret_val = xmlParserInputRead(in, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserInputPtr(n_in, in, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputRead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_in);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPedanticParserDefault(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- int val; /* int 0 or 1 */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_int(n_val, 0);
-
- ret_val = xmlPedanticParserDefault(val);
- desret_int(ret_val);
- call_tests++;
- des_int(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPedanticParserDefault",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReadDoc(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDocPtr ret_val;
- xmlChar * cur; /* a pointer to a zero terminated string */
- int n_cur;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlChar_ptr(n_cur, 0);
- URL = gen_filepath(n_URL, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- options = gen_parseroptions(n_options, 3);
-
- ret_val = xmlReadDoc((const xmlChar *)cur, URL, (const char *)encoding, options);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0);
- des_filepath(n_URL, URL, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_parseroptions(n_options, options, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReadDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReadFile(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDocPtr ret_val;
- const char * filename; /* a file or URL */
- int n_filename;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
- encoding = gen_const_char_ptr(n_encoding, 1);
- options = gen_parseroptions(n_options, 2);
-
- ret_val = xmlReadFile(filename, (const char *)encoding, options);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- des_const_char_ptr(n_encoding, (const char *)encoding, 1);
- des_parseroptions(n_options, options, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReadFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReadMemory(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDocPtr ret_val;
- char * buffer; /* a pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- URL = gen_filepath(n_URL, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- options = gen_parseroptions(n_options, 4);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlReadMemory((const char *)buffer, size, URL, (const char *)encoding, options);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- des_filepath(n_URL, URL, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_parseroptions(n_options, options, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReadMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRecoverDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- xmlChar * cur; /* a pointer to an array of xmlChar */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlChar_ptr(n_cur, 0);
-
- ret_val = xmlRecoverDoc((const xmlChar *)cur);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRecoverDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRecoverFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- const char * filename; /* the filename */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlRecoverFile(filename);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRecoverFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRecoverMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- char * buffer; /* an pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlRecoverMemory((const char *)buffer, size);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRecoverMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXParseDTD(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDtdPtr ret_val;
- xmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- xmlChar * ExternalID; /* a NAME* containing the External ID of the DTD */
- int n_ExternalID;
- xmlChar * SystemID; /* a NAME* containing the URL to the DTD */
- int n_SystemID;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 1);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 2);
-
- ret_val = xmlSAXParseDTD(sax, (const xmlChar *)ExternalID, (const xmlChar *)SystemID);
- desret_xmlDtdPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 1);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXParseDTD",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXParseDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- xmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- xmlChar * cur; /* a pointer to an array of xmlChar */
- int n_cur;
- int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */
- int n_recovery;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- cur = gen_const_xmlChar_ptr(n_cur, 1);
- recovery = gen_int(n_recovery, 2);
-
- ret_val = xmlSAXParseDoc(sax, (const xmlChar *)cur, recovery);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1);
- des_int(n_recovery, recovery, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXParseDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_cur);
- printf(" %d", n_recovery);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXParseEntity(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- xmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- const char * filename; /* the filename */
- int n_filename;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- filename = gen_filepath(n_filename, 1);
-
- ret_val = xmlSAXParseEntity(sax, filename);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_filepath(n_filename, filename, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXParseEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXParseFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- xmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- const char * filename; /* the filename */
- int n_filename;
- int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */
- int n_recovery;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- filename = gen_filepath(n_filename, 1);
- recovery = gen_int(n_recovery, 2);
-
- ret_val = xmlSAXParseFile(sax, filename, recovery);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_filepath(n_filename, filename, 1);
- des_int(n_recovery, recovery, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXParseFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_filename);
- printf(" %d", n_recovery);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXParseFileWithData(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- xmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- const char * filename; /* the filename */
- int n_filename;
- int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */
- int n_recovery;
- void * data; /* the userdata */
- int n_data;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- filename = gen_filepath(n_filename, 1);
- recovery = gen_int(n_recovery, 2);
- data = gen_userdata(n_data, 3);
-
- ret_val = xmlSAXParseFileWithData(sax, filename, recovery, data);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_filepath(n_filename, filename, 1);
- des_int(n_recovery, recovery, 2);
- des_userdata(n_data, data, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXParseFileWithData",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_filename);
- printf(" %d", n_recovery);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXParseMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- xmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- char * buffer; /* an pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
- int recovery; /* work in recovery mode, i.e. tries to read not Well Formed documents */
- int n_recovery;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- buffer = gen_const_char_ptr(n_buffer, 1);
- size = gen_int(n_size, 2);
- recovery = gen_int(n_recovery, 3);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlSAXParseMemory(sax, (const char *)buffer, size, recovery);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_const_char_ptr(n_buffer, (const char *)buffer, 1);
- des_int(n_size, size, 2);
- des_int(n_recovery, recovery, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXParseMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf(" %d", n_recovery);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXParseMemoryWithData(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlDocPtr ret_val;
- xmlSAXHandlerPtr sax; /* the SAX handler block */
- int n_sax;
- char * buffer; /* an pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
- int recovery; /* work in recovery mode, i.e. tries to read no Well Formed documents */
- int n_recovery;
- void * data; /* the userdata */
- int n_data;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_recovery = 0;n_recovery < gen_nb_int;n_recovery++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- buffer = gen_const_char_ptr(n_buffer, 1);
- size = gen_int(n_size, 2);
- recovery = gen_int(n_recovery, 3);
- data = gen_userdata(n_data, 4);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlSAXParseMemoryWithData(sax, (const char *)buffer, size, recovery, data);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_const_char_ptr(n_buffer, (const char *)buffer, 1);
- des_int(n_size, size, 2);
- des_int(n_recovery, recovery, 3);
- des_userdata(n_data, data, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXParseMemoryWithData",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf(" %d", n_recovery);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXUserParseFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- int ret_val;
- xmlSAXHandlerPtr sax; /* a SAX handler */
- int n_sax;
- void * user_data; /* The user data returned on SAX callbacks */
- int n_user_data;
- const char * filename; /* a file name */
- int n_filename;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- user_data = gen_userdata(n_user_data, 1);
- filename = gen_filepath(n_filename, 2);
-
-#ifdef LIBXML_SAX1_ENABLED
- if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL;
-#endif
-
-
- ret_val = xmlSAXUserParseFile(sax, user_data, filename);
- desret_int(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_userdata(n_user_data, user_data, 1);
- des_filepath(n_filename, filename, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXUserParseFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_user_data);
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSAXUserParseMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- int ret_val;
- xmlSAXHandlerPtr sax; /* a SAX handler */
- int n_sax;
- void * user_data; /* The user data returned on SAX callbacks */
- int n_user_data;
- char * buffer; /* an in-memory XML document input */
- int n_buffer;
- int size; /* the length of the XML document in bytes */
- int n_size;
-
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- mem_base = xmlMemBlocks();
- sax = gen_xmlSAXHandlerPtr(n_sax, 0);
- user_data = gen_userdata(n_user_data, 1);
- buffer = gen_const_char_ptr(n_buffer, 2);
- size = gen_int(n_size, 3);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
-#ifdef LIBXML_SAX1_ENABLED
- if (sax == (xmlSAXHandlerPtr)&xmlDefaultSAXHandler) user_data = NULL;
-#endif
-
-
- ret_val = xmlSAXUserParseMemory(sax, user_data, (const char *)buffer, size);
- desret_int(ret_val);
- call_tests++;
- des_xmlSAXHandlerPtr(n_sax, sax, 0);
- des_userdata(n_user_data, user_data, 1);
- des_const_char_ptr(n_buffer, (const char *)buffer, 2);
- des_int(n_size, size, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSAXUserParseMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_sax);
- printf(" %d", n_user_data);
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetExternalEntityLoader(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSetFeature(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_LEGACY_ENABLED
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML/HTML parser context */
- int n_ctxt;
- char * name; /* the feature name */
- int n_name;
- void * value; /* pointer to the location of the new value */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_void_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- name = gen_const_char_ptr(n_name, 1);
- value = gen_void_ptr(n_value, 2);
-
- ret_val = xmlSetFeature(ctxt, (const char *)name, value);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_char_ptr(n_name, (const char *)name, 1);
- des_void_ptr(n_value, value, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSetFeature",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetupParserForBuffer(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SAX1_ENABLED)
-#ifdef LIBXML_SAX1_ENABLED
- int mem_base;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlChar * buffer; /* a xmlChar * buffer */
- int n_buffer;
- const char * filename; /* a file name */
- int n_filename;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_buffer = 0;n_buffer < gen_nb_const_xmlChar_ptr;n_buffer++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- buffer = gen_const_xmlChar_ptr(n_buffer, 1);
- filename = gen_filepath(n_filename, 2);
-
- xmlSetupParserForBuffer(ctxt, (const xmlChar *)buffer, filename);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_buffer, (const xmlChar *)buffer, 1);
- des_filepath(n_filename, filename, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSetupParserForBuffer",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_buffer);
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStopParser(void) {
- int test_ret = 0;
-
-#ifdef LIBXML_PUSH_ENABLED
- int mem_base;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- xmlStopParser(ctxt);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStopParser",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSubstituteEntitiesDefault(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- int val; /* int 0 or 1 */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_int(n_val, 0);
-
- ret_val = xmlSubstituteEntitiesDefault(val);
- desret_int(ret_val);
- call_tests++;
- des_int(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSubstituteEntitiesDefault",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_parser(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing parser : 61 of 70 functions ...\n");
- test_ret += test_xmlByteConsumed();
- test_ret += test_xmlClearNodeInfoSeq();
- test_ret += test_xmlClearParserCtxt();
- test_ret += test_xmlCreateDocParserCtxt();
- test_ret += test_xmlCreatePushParserCtxt();
- test_ret += test_xmlCtxtReadDoc();
- test_ret += test_xmlCtxtReadFile();
- test_ret += test_xmlCtxtReadMemory();
- test_ret += test_xmlCtxtReset();
- test_ret += test_xmlCtxtResetPush();
- test_ret += test_xmlCtxtUseOptions();
- test_ret += test_xmlGetExternalEntityLoader();
- test_ret += test_xmlGetFeature();
- test_ret += test_xmlGetFeaturesList();
- test_ret += test_xmlHasFeature();
- test_ret += test_xmlIOParseDTD();
- test_ret += test_xmlInitNodeInfoSeq();
- test_ret += test_xmlInitParser();
- test_ret += test_xmlInitParserCtxt();
- test_ret += test_xmlKeepBlanksDefault();
- test_ret += test_xmlLineNumbersDefault();
- test_ret += test_xmlLoadExternalEntity();
- test_ret += test_xmlNewIOInputStream();
- test_ret += test_xmlNewParserCtxt();
- test_ret += test_xmlParseBalancedChunkMemory();
- test_ret += test_xmlParseBalancedChunkMemoryRecover();
- test_ret += test_xmlParseChunk();
- test_ret += test_xmlParseCtxtExternalEntity();
- test_ret += test_xmlParseDTD();
- test_ret += test_xmlParseDoc();
- test_ret += test_xmlParseDocument();
- test_ret += test_xmlParseEntity();
- test_ret += test_xmlParseExtParsedEnt();
- test_ret += test_xmlParseExternalEntity();
- test_ret += test_xmlParseFile();
- test_ret += test_xmlParseInNodeContext();
- test_ret += test_xmlParseMemory();
- test_ret += test_xmlParserAddNodeInfo();
- test_ret += test_xmlParserFindNodeInfo();
- test_ret += test_xmlParserFindNodeInfoIndex();
- test_ret += test_xmlParserInputGrow();
- test_ret += test_xmlParserInputRead();
- test_ret += test_xmlPedanticParserDefault();
- test_ret += test_xmlReadDoc();
- test_ret += test_xmlReadFile();
- test_ret += test_xmlReadMemory();
- test_ret += test_xmlRecoverDoc();
- test_ret += test_xmlRecoverFile();
- test_ret += test_xmlRecoverMemory();
- test_ret += test_xmlSAXParseDTD();
- test_ret += test_xmlSAXParseDoc();
- test_ret += test_xmlSAXParseEntity();
- test_ret += test_xmlSAXParseFile();
- test_ret += test_xmlSAXParseFileWithData();
- test_ret += test_xmlSAXParseMemory();
- test_ret += test_xmlSAXParseMemoryWithData();
- test_ret += test_xmlSAXUserParseFile();
- test_ret += test_xmlSAXUserParseMemory();
- test_ret += test_xmlSetExternalEntityLoader();
- test_ret += test_xmlSetFeature();
- test_ret += test_xmlSetupParserForBuffer();
- test_ret += test_xmlStopParser();
- test_ret += test_xmlSubstituteEntitiesDefault();
-
- if (test_ret != 0)
- printf("Module parser: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_htmlCreateFileParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
- htmlParserCtxtPtr ret_val;
- const char * filename; /* the filename */
- int n_filename;
- char * encoding; /* a free form C string describing the HTML document encoding, or NULL */
- int n_encoding;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- encoding = gen_const_char_ptr(n_encoding, 1);
-
- ret_val = htmlCreateFileParserCtxt(filename, (const char *)encoding);
- desret_htmlParserCtxtPtr(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_const_char_ptr(n_encoding, (const char *)encoding, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlCreateFileParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_htmlInitAutoClose(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTML_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- htmlInitAutoClose();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in htmlInitAutoClose",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_inputPop(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = inputPop(ctxt);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in inputPop",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_inputPush(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlParserInputPtr value; /* the parser input */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_value = 0;n_value < gen_nb_xmlParserInputPtr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- value = gen_xmlParserInputPtr(n_value, 1);
-
- ret_val = inputPush(ctxt, value);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlParserInputPtr(n_value, value, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in inputPush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_namePop(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = namePop(ctxt);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in namePop",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_namePush(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlChar * value; /* the element name */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
-
- ret_val = namePush(ctxt, (const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in namePush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_nodePop(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = nodePop(ctxt);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in nodePop",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_nodePush(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlNodePtr value; /* the element node */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_value = 0;n_value < gen_nb_xmlNodePtr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- value = gen_xmlNodePtr(n_value, 1);
-
- ret_val = nodePush(ctxt, value);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_value, value, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in nodePush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCheckLanguageID(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * lang; /* pointer to the string value */
- int n_lang;
-
- for (n_lang = 0;n_lang < gen_nb_const_xmlChar_ptr;n_lang++) {
- mem_base = xmlMemBlocks();
- lang = gen_const_xmlChar_ptr(n_lang, 0);
-
- ret_val = xmlCheckLanguageID((const xmlChar *)lang);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_lang, (const xmlChar *)lang, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCheckLanguageID",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_lang);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyChar(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- int len; /* Ignored, compatibility */
- int n_len;
- xmlChar * out; /* pointer to an array of xmlChar */
- int n_out;
- int val; /* the char value */
- int n_val;
-
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- for (n_out = 0;n_out < gen_nb_xmlChar_ptr;n_out++) {
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- len = gen_int(n_len, 0);
- out = gen_xmlChar_ptr(n_out, 1);
- val = gen_int(n_val, 2);
-
- ret_val = xmlCopyChar(len, out, val);
- desret_int(ret_val);
- call_tests++;
- des_int(n_len, len, 0);
- des_xmlChar_ptr(n_out, out, 1);
- des_int(n_val, val, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_len);
- printf(" %d", n_out);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyCharMultiByte(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * out; /* pointer to an array of xmlChar */
- int n_out;
- int val; /* the char value */
- int n_val;
-
- for (n_out = 0;n_out < gen_nb_xmlChar_ptr;n_out++) {
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- out = gen_xmlChar_ptr(n_out, 0);
- val = gen_int(n_val, 1);
-
- ret_val = xmlCopyCharMultiByte(out, val);
- desret_int(ret_val);
- call_tests++;
- des_xmlChar_ptr(n_out, out, 0);
- des_int(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyCharMultiByte",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateEntityParserCtxt(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ret_val;
- xmlChar * URL; /* the entity URL */
- int n_URL;
- xmlChar * ID; /* the entity PUBLIC ID */
- int n_ID;
- xmlChar * base; /* a possible base for the target URI */
- int n_base;
-
- for (n_URL = 0;n_URL < gen_nb_const_xmlChar_ptr;n_URL++) {
- for (n_ID = 0;n_ID < gen_nb_const_xmlChar_ptr;n_ID++) {
- for (n_base = 0;n_base < gen_nb_const_xmlChar_ptr;n_base++) {
- mem_base = xmlMemBlocks();
- URL = gen_const_xmlChar_ptr(n_URL, 0);
- ID = gen_const_xmlChar_ptr(n_ID, 1);
- base = gen_const_xmlChar_ptr(n_base, 2);
-
- ret_val = xmlCreateEntityParserCtxt((const xmlChar *)URL, (const xmlChar *)ID, (const xmlChar *)base);
- desret_xmlParserCtxtPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_URL, (const xmlChar *)URL, 0);
- des_const_xmlChar_ptr(n_ID, (const xmlChar *)ID, 1);
- des_const_xmlChar_ptr(n_base, (const xmlChar *)base, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCreateEntityParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf(" %d", n_ID);
- printf(" %d", n_base);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateFileParserCtxt(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ret_val;
- const char * filename; /* the filename */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
-
- ret_val = xmlCreateFileParserCtxt(filename);
- desret_xmlParserCtxtPtr(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCreateFileParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateMemoryParserCtxt(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ret_val;
- char * buffer; /* a pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlCreateMemoryParserCtxt((const char *)buffer, size);
- desret_xmlParserCtxtPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCreateMemoryParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateURLParserCtxt(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ret_val;
- const char * filename; /* the filename or URL */
- int n_filename;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- options = gen_int(n_options, 1);
-
- ret_val = xmlCreateURLParserCtxt(filename, options);
- desret_xmlParserCtxtPtr(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_int(n_options, options, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCreateURLParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCurrentChar(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* the XML parser context */
- int n_ctxt;
- int * len; /* pointer to the length of the char read */
- int n_len;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- len = gen_int_ptr(n_len, 1);
-
- ret_val = xmlCurrentChar(ctxt, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_int_ptr(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCurrentChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlErrMemory(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- char * extra; /* extra informations */
- int n_extra;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_extra = 0;n_extra < gen_nb_const_char_ptr;n_extra++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- extra = gen_const_char_ptr(n_extra, 1);
-
- xmlErrMemory(ctxt, (const char *)extra);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_char_ptr(n_extra, (const char *)extra, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlErrMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_extra);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsLetter(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- int c; /* an unicode character (int) */
- int n_c;
-
- for (n_c = 0;n_c < gen_nb_int;n_c++) {
- mem_base = xmlMemBlocks();
- c = gen_int(n_c, 0);
-
- ret_val = xmlIsLetter(c);
- desret_int(ret_val);
- call_tests++;
- des_int(n_c, c, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsLetter",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_c);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewEntityInputStream(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlEntityPtr entity; /* an Entity pointer */
- int n_entity;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_entity = 0;n_entity < gen_nb_xmlEntityPtr;n_entity++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- entity = gen_xmlEntityPtr(n_entity, 1);
-
- ret_val = xmlNewEntityInputStream(ctxt, entity);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlEntityPtr(n_entity, entity, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewEntityInputStream",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_entity);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewInputFromFile(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- const char * filename; /* the filename to use as entity */
- int n_filename;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- filename = gen_filepath(n_filename, 1);
-
- ret_val = xmlNewInputFromFile(ctxt, filename);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_filepath(n_filename, filename, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewInputFromFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewInputStream(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlNewInputStream(ctxt);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewInputStream",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewStringInputStream(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlChar * buffer; /* an memory buffer */
- int n_buffer;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_buffer = 0;n_buffer < gen_nb_const_xmlChar_ptr;n_buffer++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- buffer = gen_const_xmlChar_ptr(n_buffer, 1);
-
- ret_val = xmlNewStringInputStream(ctxt, (const xmlChar *)buffer);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_buffer, (const xmlChar *)buffer, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewStringInputStream",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_buffer);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNextChar(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserCtxtPtr ctxt; /* the XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- xmlNextChar(ctxt);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNextChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputShrink(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr in; /* an XML parser input */
- int n_in;
-
- for (n_in = 0;n_in < gen_nb_xmlParserInputPtr;n_in++) {
- mem_base = xmlMemBlocks();
- in = gen_xmlParserInputPtr(n_in, 0);
-
- xmlParserInputShrink(in);
- call_tests++;
- des_xmlParserInputPtr(n_in, in, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputShrink",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_in);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPopInput(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlPopInput(ctxt);
- desret_xmlChar(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPopInput",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPushInput(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlParserInputPtr input; /* an XML parser input fragment (entity, XML fragment ...). */
- int n_input;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_input = 0;n_input < gen_nb_xmlParserInputPtr;n_input++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- input = gen_xmlParserInputPtr(n_input, 1);
-
- ret_val = xmlPushInput(ctxt, input);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlParserInputPtr(n_input, input, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPushInput",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_input);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetEntityReferenceFunc(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSplitQName(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlChar * name; /* an XML parser context */
- int n_name;
- xmlChar ** prefix; /* a xmlChar ** */
- int n_prefix;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_prefix = 0;n_prefix < gen_nb_xmlChar_ptr_ptr;n_prefix++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- prefix = gen_xmlChar_ptr_ptr(n_prefix, 2);
-
- ret_val = xmlSplitQName(ctxt, (const xmlChar *)name, prefix);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_xmlChar_ptr_ptr(n_prefix, prefix, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSplitQName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_name);
- printf(" %d", n_prefix);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStringCurrentChar(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* the XML parser context */
- int n_ctxt;
- xmlChar * cur; /* pointer to the beginning of the char */
- int n_cur;
- int * len; /* pointer to the length of the char read */
- int n_len;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- cur = gen_const_xmlChar_ptr(n_cur, 1);
- len = gen_int_ptr(n_len, 2);
-
- ret_val = xmlStringCurrentChar(ctxt, (const xmlChar *)cur, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1);
- des_int_ptr(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStringCurrentChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStringDecodeEntities(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlParserCtxtPtr ctxt; /* the parser context */
- int n_ctxt;
- xmlChar * str; /* the input string */
- int n_str;
- int what; /* combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF */
- int n_what;
- xmlChar end; /* an end marker xmlChar, 0 if none */
- int n_end;
- xmlChar end2; /* an end marker xmlChar, 0 if none */
- int n_end2;
- xmlChar end3; /* an end marker xmlChar, 0 if none */
- int n_end3;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_what = 0;n_what < gen_nb_int;n_what++) {
- for (n_end = 0;n_end < gen_nb_xmlChar;n_end++) {
- for (n_end2 = 0;n_end2 < gen_nb_xmlChar;n_end2++) {
- for (n_end3 = 0;n_end3 < gen_nb_xmlChar;n_end3++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
- what = gen_int(n_what, 2);
- end = gen_xmlChar(n_end, 3);
- end2 = gen_xmlChar(n_end2, 4);
- end3 = gen_xmlChar(n_end3, 5);
-
- ret_val = xmlStringDecodeEntities(ctxt, (const xmlChar *)str, what, end, end2, end3);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- des_int(n_what, what, 2);
- des_xmlChar(n_end, end, 3);
- des_xmlChar(n_end2, end2, 4);
- des_xmlChar(n_end3, end3, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStringDecodeEntities",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_str);
- printf(" %d", n_what);
- printf(" %d", n_end);
- printf(" %d", n_end2);
- printf(" %d", n_end3);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStringLenDecodeEntities(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlParserCtxtPtr ctxt; /* the parser context */
- int n_ctxt;
- xmlChar * str; /* the input string */
- int n_str;
- int len; /* the string length */
- int n_len;
- int what; /* combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF */
- int n_what;
- xmlChar end; /* an end marker xmlChar, 0 if none */
- int n_end;
- xmlChar end2; /* an end marker xmlChar, 0 if none */
- int n_end2;
- xmlChar end3; /* an end marker xmlChar, 0 if none */
- int n_end3;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- for (n_what = 0;n_what < gen_nb_int;n_what++) {
- for (n_end = 0;n_end < gen_nb_xmlChar;n_end++) {
- for (n_end2 = 0;n_end2 < gen_nb_xmlChar;n_end2++) {
- for (n_end3 = 0;n_end3 < gen_nb_xmlChar;n_end3++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
- len = gen_int(n_len, 2);
- what = gen_int(n_what, 3);
- end = gen_xmlChar(n_end, 4);
- end2 = gen_xmlChar(n_end2, 5);
- end3 = gen_xmlChar(n_end3, 6);
- if ((str != NULL) &&
- (len > (int) strlen((const char *) str) + 1))
- continue;
-
- ret_val = xmlStringLenDecodeEntities(ctxt, (const xmlChar *)str, len, what, end, end2, end3);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- des_int(n_len, len, 2);
- des_int(n_what, what, 3);
- des_xmlChar(n_end, end, 4);
- des_xmlChar(n_end2, end2, 5);
- des_xmlChar(n_end3, end3, 6);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStringLenDecodeEntities",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_str);
- printf(" %d", n_len);
- printf(" %d", n_what);
- printf(" %d", n_end);
- printf(" %d", n_end2);
- printf(" %d", n_end3);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSwitchEncoding(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* the parser context */
- int n_ctxt;
- xmlCharEncoding enc; /* the encoding value (number) */
- int n_enc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- enc = gen_xmlCharEncoding(n_enc, 1);
-
- ret_val = xmlSwitchEncoding(ctxt, enc);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlCharEncoding(n_enc, enc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSwitchEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSwitchInputEncoding(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* the parser context */
- int n_ctxt;
- xmlParserInputPtr input; /* the input stream */
- int n_input;
- xmlCharEncodingHandlerPtr handler; /* the encoding handler */
- int n_handler;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_input = 0;n_input < gen_nb_xmlParserInputPtr;n_input++) {
- for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandlerPtr;n_handler++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- input = gen_xmlParserInputPtr(n_input, 1);
- handler = gen_xmlCharEncodingHandlerPtr(n_handler, 2);
-
- ret_val = xmlSwitchInputEncoding(ctxt, input, handler);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlParserInputPtr(n_input, input, 1);
- des_xmlCharEncodingHandlerPtr(n_handler, handler, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSwitchInputEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_input);
- printf(" %d", n_handler);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSwitchToEncoding(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserCtxtPtr ctxt; /* the parser context */
- int n_ctxt;
- xmlCharEncodingHandlerPtr handler; /* the encoding handler */
- int n_handler;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_handler = 0;n_handler < gen_nb_xmlCharEncodingHandlerPtr;n_handler++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- handler = gen_xmlCharEncodingHandlerPtr(n_handler, 1);
-
- ret_val = xmlSwitchToEncoding(ctxt, handler);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlCharEncodingHandlerPtr(n_handler, handler, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSwitchToEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_handler);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_parserInternals(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing parserInternals : 33 of 90 functions ...\n");
- test_ret += test_htmlCreateFileParserCtxt();
- test_ret += test_htmlInitAutoClose();
- test_ret += test_inputPop();
- test_ret += test_inputPush();
- test_ret += test_namePop();
- test_ret += test_namePush();
- test_ret += test_nodePop();
- test_ret += test_nodePush();
- test_ret += test_xmlCheckLanguageID();
- test_ret += test_xmlCopyChar();
- test_ret += test_xmlCopyCharMultiByte();
- test_ret += test_xmlCreateEntityParserCtxt();
- test_ret += test_xmlCreateFileParserCtxt();
- test_ret += test_xmlCreateMemoryParserCtxt();
- test_ret += test_xmlCreateURLParserCtxt();
- test_ret += test_xmlCurrentChar();
- test_ret += test_xmlErrMemory();
- test_ret += test_xmlIsLetter();
- test_ret += test_xmlNewEntityInputStream();
- test_ret += test_xmlNewInputFromFile();
- test_ret += test_xmlNewInputStream();
- test_ret += test_xmlNewStringInputStream();
- test_ret += test_xmlNextChar();
- test_ret += test_xmlParserInputShrink();
- test_ret += test_xmlPopInput();
- test_ret += test_xmlPushInput();
- test_ret += test_xmlSetEntityReferenceFunc();
- test_ret += test_xmlSplitQName();
- test_ret += test_xmlStringCurrentChar();
- test_ret += test_xmlStringDecodeEntities();
- test_ret += test_xmlStringLenDecodeEntities();
- test_ret += test_xmlSwitchEncoding();
- test_ret += test_xmlSwitchInputEncoding();
- test_ret += test_xmlSwitchToEncoding();
-
- if (test_ret != 0)
- printf("Module parserInternals: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlPatternFromRoot(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlPatternPtr comp; /* the precompiled pattern */
- int n_comp;
-
- for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlPatternPtr(n_comp, 0);
-
- ret_val = xmlPatternFromRoot(comp);
- desret_int(ret_val);
- call_tests++;
- des_xmlPatternPtr(n_comp, comp, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPatternFromRoot",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPatternGetStreamCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlPatternMatch(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlPatternPtr comp; /* the precompiled pattern */
- int n_comp;
- xmlNodePtr node; /* a node */
- int n_node;
-
- for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlPatternPtr(n_comp, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- ret_val = xmlPatternMatch(comp, node);
- desret_int(ret_val);
- call_tests++;
- des_xmlPatternPtr(n_comp, comp, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPatternMatch",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPatternMaxDepth(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlPatternPtr comp; /* the precompiled pattern */
- int n_comp;
-
- for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlPatternPtr(n_comp, 0);
-
- ret_val = xmlPatternMaxDepth(comp);
- desret_int(ret_val);
- call_tests++;
- des_xmlPatternPtr(n_comp, comp, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPatternMaxDepth",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPatternMinDepth(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlPatternPtr comp; /* the precompiled pattern */
- int n_comp;
-
- for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlPatternPtr(n_comp, 0);
-
- ret_val = xmlPatternMinDepth(comp);
- desret_int(ret_val);
- call_tests++;
- des_xmlPatternPtr(n_comp, comp, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPatternMinDepth",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPatternStreamable(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlPatternPtr comp; /* the precompiled pattern */
- int n_comp;
-
- for (n_comp = 0;n_comp < gen_nb_xmlPatternPtr;n_comp++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlPatternPtr(n_comp, 0);
-
- ret_val = xmlPatternStreamable(comp);
- desret_int(ret_val);
- call_tests++;
- des_xmlPatternPtr(n_comp, comp, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPatternStreamable",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPatterncompile(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-#ifdef LIBXML_PATTERN_ENABLED
-
-#define gen_nb_xmlStreamCtxtPtr 1
-static xmlStreamCtxtPtr gen_xmlStreamCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlStreamCtxtPtr(int no ATTRIBUTE_UNUSED, xmlStreamCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlStreamPop(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlStreamCtxtPtr stream; /* the stream context */
- int n_stream;
-
- for (n_stream = 0;n_stream < gen_nb_xmlStreamCtxtPtr;n_stream++) {
- mem_base = xmlMemBlocks();
- stream = gen_xmlStreamCtxtPtr(n_stream, 0);
-
- ret_val = xmlStreamPop(stream);
- desret_int(ret_val);
- call_tests++;
- des_xmlStreamCtxtPtr(n_stream, stream, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStreamPop",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_stream);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStreamPush(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlStreamCtxtPtr stream; /* the stream context */
- int n_stream;
- xmlChar * name; /* the current name */
- int n_name;
- xmlChar * ns; /* the namespace name */
- int n_ns;
-
- for (n_stream = 0;n_stream < gen_nb_xmlStreamCtxtPtr;n_stream++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) {
- mem_base = xmlMemBlocks();
- stream = gen_xmlStreamCtxtPtr(n_stream, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ns = gen_const_xmlChar_ptr(n_ns, 2);
-
- ret_val = xmlStreamPush(stream, (const xmlChar *)name, (const xmlChar *)ns);
- desret_int(ret_val);
- call_tests++;
- des_xmlStreamCtxtPtr(n_stream, stream, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStreamPush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_stream);
- printf(" %d", n_name);
- printf(" %d", n_ns);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStreamPushAttr(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlStreamCtxtPtr stream; /* the stream context */
- int n_stream;
- xmlChar * name; /* the current name */
- int n_name;
- xmlChar * ns; /* the namespace name */
- int n_ns;
-
- for (n_stream = 0;n_stream < gen_nb_xmlStreamCtxtPtr;n_stream++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) {
- mem_base = xmlMemBlocks();
- stream = gen_xmlStreamCtxtPtr(n_stream, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ns = gen_const_xmlChar_ptr(n_ns, 2);
-
- ret_val = xmlStreamPushAttr(stream, (const xmlChar *)name, (const xmlChar *)ns);
- desret_int(ret_val);
- call_tests++;
- des_xmlStreamCtxtPtr(n_stream, stream, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStreamPushAttr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_stream);
- printf(" %d", n_name);
- printf(" %d", n_ns);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStreamPushNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlStreamCtxtPtr stream; /* the stream context */
- int n_stream;
- xmlChar * name; /* the current name */
- int n_name;
- xmlChar * ns; /* the namespace name */
- int n_ns;
- int nodeType; /* the type of the node being pushed */
- int n_nodeType;
-
- for (n_stream = 0;n_stream < gen_nb_xmlStreamCtxtPtr;n_stream++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) {
- for (n_nodeType = 0;n_nodeType < gen_nb_int;n_nodeType++) {
- mem_base = xmlMemBlocks();
- stream = gen_xmlStreamCtxtPtr(n_stream, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ns = gen_const_xmlChar_ptr(n_ns, 2);
- nodeType = gen_int(n_nodeType, 3);
-
- ret_val = xmlStreamPushNode(stream, (const xmlChar *)name, (const xmlChar *)ns, nodeType);
- desret_int(ret_val);
- call_tests++;
- des_xmlStreamCtxtPtr(n_stream, stream, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 2);
- des_int(n_nodeType, nodeType, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStreamPushNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_stream);
- printf(" %d", n_name);
- printf(" %d", n_ns);
- printf(" %d", n_nodeType);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStreamWantsAnyNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_PATTERN_ENABLED)
- int mem_base;
- int ret_val;
- xmlStreamCtxtPtr streamCtxt; /* the stream context */
- int n_streamCtxt;
-
- for (n_streamCtxt = 0;n_streamCtxt < gen_nb_xmlStreamCtxtPtr;n_streamCtxt++) {
- mem_base = xmlMemBlocks();
- streamCtxt = gen_xmlStreamCtxtPtr(n_streamCtxt, 0);
-
- ret_val = xmlStreamWantsAnyNode(streamCtxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlStreamCtxtPtr(n_streamCtxt, streamCtxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStreamWantsAnyNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_streamCtxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_pattern(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing pattern : 10 of 15 functions ...\n");
- test_ret += test_xmlPatternFromRoot();
- test_ret += test_xmlPatternGetStreamCtxt();
- test_ret += test_xmlPatternMatch();
- test_ret += test_xmlPatternMaxDepth();
- test_ret += test_xmlPatternMinDepth();
- test_ret += test_xmlPatternStreamable();
- test_ret += test_xmlPatterncompile();
- test_ret += test_xmlStreamPop();
- test_ret += test_xmlStreamPush();
- test_ret += test_xmlStreamPushAttr();
- test_ret += test_xmlStreamPushNode();
- test_ret += test_xmlStreamWantsAnyNode();
-
- if (test_ret != 0)
- printf("Module pattern: %d errors\n", test_ret);
- return(test_ret);
-}
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlRelaxNGPtr 1
-static xmlRelaxNGPtr gen_xmlRelaxNGPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlRelaxNGPtr(int no ATTRIBUTE_UNUSED, xmlRelaxNGPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlRelaxNGDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- FILE * output; /* the file output */
- int n_output;
- xmlRelaxNGPtr schema; /* a schema structure */
- int n_schema;
-
- for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) {
- for (n_schema = 0;n_schema < gen_nb_xmlRelaxNGPtr;n_schema++) {
- mem_base = xmlMemBlocks();
- output = gen_FILE_ptr(n_output, 0);
- schema = gen_xmlRelaxNGPtr(n_schema, 1);
-
- xmlRelaxNGDump(output, schema);
- call_tests++;
- des_FILE_ptr(n_output, output, 0);
- des_xmlRelaxNGPtr(n_schema, schema, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_schema);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGDumpTree(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- FILE * output; /* the file output */
- int n_output;
- xmlRelaxNGPtr schema; /* a schema structure */
- int n_schema;
-
- for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) {
- for (n_schema = 0;n_schema < gen_nb_xmlRelaxNGPtr;n_schema++) {
- mem_base = xmlMemBlocks();
- output = gen_FILE_ptr(n_output, 0);
- schema = gen_xmlRelaxNGPtr(n_schema, 1);
-
- xmlRelaxNGDumpTree(output, schema);
- call_tests++;
- des_FILE_ptr(n_output, output, 0);
- des_xmlRelaxNGPtr(n_schema, schema, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGDumpTree",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_schema);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlRelaxNGParserCtxtPtr 1
-static xmlRelaxNGParserCtxtPtr gen_xmlRelaxNGParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlRelaxNGParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlRelaxNGParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlRelaxNGValidityErrorFunc_ptr 1
-static xmlRelaxNGValidityErrorFunc * gen_xmlRelaxNGValidityErrorFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlRelaxNGValidityErrorFunc_ptr(int no ATTRIBUTE_UNUSED, xmlRelaxNGValidityErrorFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlRelaxNGValidityWarningFunc_ptr 1
-static xmlRelaxNGValidityWarningFunc * gen_xmlRelaxNGValidityWarningFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlRelaxNGValidityWarningFunc_ptr(int no ATTRIBUTE_UNUSED, xmlRelaxNGValidityWarningFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlRelaxNGGetParserErrors(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlRelaxNGParserCtxtPtr ctxt; /* a Relax-NG validation context */
- int n_ctxt;
- xmlRelaxNGValidityErrorFunc * err; /* the error callback result */
- int n_err;
- xmlRelaxNGValidityWarningFunc * warn; /* the warning callback result */
- int n_warn;
- void ** ctx; /* contextual data for the callbacks result */
- int n_ctx;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGParserCtxtPtr;n_ctxt++) {
- for (n_err = 0;n_err < gen_nb_xmlRelaxNGValidityErrorFunc_ptr;n_err++) {
- for (n_warn = 0;n_warn < gen_nb_xmlRelaxNGValidityWarningFunc_ptr;n_warn++) {
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlRelaxNGParserCtxtPtr(n_ctxt, 0);
- err = gen_xmlRelaxNGValidityErrorFunc_ptr(n_err, 1);
- warn = gen_xmlRelaxNGValidityWarningFunc_ptr(n_warn, 2);
- ctx = gen_void_ptr_ptr(n_ctx, 3);
-
- ret_val = xmlRelaxNGGetParserErrors(ctxt, err, warn, ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlRelaxNGParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlRelaxNGValidityErrorFunc_ptr(n_err, err, 1);
- des_xmlRelaxNGValidityWarningFunc_ptr(n_warn, warn, 2);
- des_void_ptr_ptr(n_ctx, ctx, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGGetParserErrors",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_err);
- printf(" %d", n_warn);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlRelaxNGValidCtxtPtr 1
-static xmlRelaxNGValidCtxtPtr gen_xmlRelaxNGValidCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlRelaxNGValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlRelaxNGValidCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlRelaxNGGetValidErrors(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlRelaxNGValidCtxtPtr ctxt; /* a Relax-NG validation context */
- int n_ctxt;
- xmlRelaxNGValidityErrorFunc * err; /* the error function result */
- int n_err;
- xmlRelaxNGValidityWarningFunc * warn; /* the warning function result */
- int n_warn;
- void ** ctx; /* the functions context result */
- int n_ctx;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) {
- for (n_err = 0;n_err < gen_nb_xmlRelaxNGValidityErrorFunc_ptr;n_err++) {
- for (n_warn = 0;n_warn < gen_nb_xmlRelaxNGValidityWarningFunc_ptr;n_warn++) {
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0);
- err = gen_xmlRelaxNGValidityErrorFunc_ptr(n_err, 1);
- warn = gen_xmlRelaxNGValidityWarningFunc_ptr(n_warn, 2);
- ctx = gen_void_ptr_ptr(n_ctx, 3);
-
- ret_val = xmlRelaxNGGetValidErrors(ctxt, err, warn, ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlRelaxNGValidityErrorFunc_ptr(n_err, err, 1);
- des_xmlRelaxNGValidityWarningFunc_ptr(n_warn, warn, 2);
- des_void_ptr_ptr(n_ctx, ctx, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGGetValidErrors",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_err);
- printf(" %d", n_warn);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGInitTypes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlRelaxNGInitTypes();
- desret_int(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGInitTypes",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGNewDocParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlRelaxNGParserCtxtPtr ret_val;
- xmlDocPtr doc; /* a preparsed document tree */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
-
- ret_val = xmlRelaxNGNewDocParserCtxt(doc);
- desret_xmlRelaxNGParserCtxtPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGNewDocParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGNewMemParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlRelaxNGParserCtxtPtr ret_val;
- char * buffer; /* a pointer to a char array containing the schemas */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlRelaxNGNewMemParserCtxt((const char *)buffer, size);
- desret_xmlRelaxNGParserCtxtPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGNewMemParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGNewParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlRelaxNGParserCtxtPtr ret_val;
- char * URL; /* the location of the schema */
- int n_URL;
-
- for (n_URL = 0;n_URL < gen_nb_const_char_ptr;n_URL++) {
- mem_base = xmlMemBlocks();
- URL = gen_const_char_ptr(n_URL, 0);
-
- ret_val = xmlRelaxNGNewParserCtxt((const char *)URL);
- desret_xmlRelaxNGParserCtxtPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_URL, (const char *)URL, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGNewParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGNewValidCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGParse(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGSetParserErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGSetParserStructuredErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGSetValidErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGSetValidStructuredErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGValidateDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlRelaxNGValidCtxtPtr ctxt; /* a Relax-NG validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a parsed document tree */
- int n_doc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlRelaxNGValidateDoc(ctxt, doc);
- desret_int(ret_val);
- call_tests++;
- des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGValidateDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGValidateFullElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlRelaxNGValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
-
- ret_val = xmlRelaxNGValidateFullElement(ctxt, doc, elem);
- desret_int(ret_val);
- call_tests++;
- des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGValidateFullElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGValidatePopElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlRelaxNGValidCtxtPtr ctxt; /* the RelaxNG validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
-
- ret_val = xmlRelaxNGValidatePopElement(ctxt, doc, elem);
- desret_int(ret_val);
- call_tests++;
- des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGValidatePopElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGValidatePushCData(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlRelaxNGValidCtxtPtr ctxt; /* the RelaxNG validation context */
- int n_ctxt;
- xmlChar * data; /* some character data read */
- int n_data;
- int len; /* the length of the data */
- int n_len;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) {
- for (n_data = 0;n_data < gen_nb_const_xmlChar_ptr;n_data++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0);
- data = gen_const_xmlChar_ptr(n_data, 1);
- len = gen_int(n_len, 2);
- if ((data != NULL) &&
- (len > (int) strlen((const char *) data) + 1))
- continue;
-
- ret_val = xmlRelaxNGValidatePushCData(ctxt, (const xmlChar *)data, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_data, (const xmlChar *)data, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGValidatePushCData",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_data);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxNGValidatePushElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlRelaxNGValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
-
- ret_val = xmlRelaxNGValidatePushElement(ctxt, doc, elem);
- desret_int(ret_val);
- call_tests++;
- des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxNGValidatePushElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRelaxParserSetFlag(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlRelaxNGParserCtxtPtr ctxt; /* a RelaxNG parser context */
- int n_ctxt;
- int flags; /* a set of flags values */
- int n_flags;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGParserCtxtPtr;n_ctxt++) {
- for (n_flags = 0;n_flags < gen_nb_int;n_flags++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlRelaxNGParserCtxtPtr(n_ctxt, 0);
- flags = gen_int(n_flags, 1);
-
- ret_val = xmlRelaxParserSetFlag(ctxt, flags);
- desret_int(ret_val);
- call_tests++;
- des_xmlRelaxNGParserCtxtPtr(n_ctxt, ctxt, 0);
- des_int(n_flags, flags, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRelaxParserSetFlag",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_flags);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_relaxng(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing relaxng : 14 of 24 functions ...\n");
- test_ret += test_xmlRelaxNGDump();
- test_ret += test_xmlRelaxNGDumpTree();
- test_ret += test_xmlRelaxNGGetParserErrors();
- test_ret += test_xmlRelaxNGGetValidErrors();
- test_ret += test_xmlRelaxNGInitTypes();
- test_ret += test_xmlRelaxNGNewDocParserCtxt();
- test_ret += test_xmlRelaxNGNewMemParserCtxt();
- test_ret += test_xmlRelaxNGNewParserCtxt();
- test_ret += test_xmlRelaxNGNewValidCtxt();
- test_ret += test_xmlRelaxNGParse();
- test_ret += test_xmlRelaxNGSetParserErrors();
- test_ret += test_xmlRelaxNGSetParserStructuredErrors();
- test_ret += test_xmlRelaxNGSetValidErrors();
- test_ret += test_xmlRelaxNGSetValidStructuredErrors();
- test_ret += test_xmlRelaxNGValidateDoc();
- test_ret += test_xmlRelaxNGValidateFullElement();
- test_ret += test_xmlRelaxNGValidatePopElement();
- test_ret += test_xmlRelaxNGValidatePushCData();
- test_ret += test_xmlRelaxNGValidatePushElement();
- test_ret += test_xmlRelaxParserSetFlag();
-
- if (test_ret != 0)
- printf("Module relaxng: %d errors\n", test_ret);
- return(test_ret);
-}
-static int
-test_schemasInternals(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing schemasInternals : 0 of 2 functions ...\n");
-
- if (test_ret != 0)
- printf("Module schemasInternals: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlSchematronNewDocParserCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchematronNewMemParserCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchematronNewParserCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMATRON_ENABLED
-
-#define gen_nb_xmlSchematronPtr 1
-static xmlSchematronPtr gen_xmlSchematronPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchematronPtr(int no ATTRIBUTE_UNUSED, xmlSchematronPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchematronNewValidCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMATRON_ENABLED
-
-#define gen_nb_xmlSchematronParserCtxtPtr 1
-static xmlSchematronParserCtxtPtr gen_xmlSchematronParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchematronParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchematronParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchematronParse(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMATRON_ENABLED
-
-#define gen_nb_xmlSchematronValidCtxtPtr 1
-static xmlSchematronValidCtxtPtr gen_xmlSchematronValidCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchematronValidCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchematronValidCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchematronSetValidStructuredErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchematronValidateDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMATRON_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchematronValidCtxtPtr ctxt; /* the schema validation context */
- int n_ctxt;
- xmlDocPtr instance; /* the document instace tree */
- int n_instance;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchematronValidCtxtPtr;n_ctxt++) {
- for (n_instance = 0;n_instance < gen_nb_xmlDocPtr;n_instance++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchematronValidCtxtPtr(n_ctxt, 0);
- instance = gen_xmlDocPtr(n_instance, 1);
-
- ret_val = xmlSchematronValidateDoc(ctxt, instance);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchematronValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_instance, instance, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchematronValidateDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_instance);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_schematron(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing schematron : 1 of 10 functions ...\n");
- test_ret += test_xmlSchematronNewDocParserCtxt();
- test_ret += test_xmlSchematronNewMemParserCtxt();
- test_ret += test_xmlSchematronNewParserCtxt();
- test_ret += test_xmlSchematronNewValidCtxt();
- test_ret += test_xmlSchematronParse();
- test_ret += test_xmlSchematronSetValidStructuredErrors();
- test_ret += test_xmlSchematronValidateDoc();
-
- if (test_ret != 0)
- printf("Module schematron: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlAddChild(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr parent; /* the parent node */
- int n_parent;
- xmlNodePtr cur; /* the child node */
- int n_cur;
-
- for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr_in;n_cur++) {
- mem_base = xmlMemBlocks();
- parent = gen_xmlNodePtr(n_parent, 0);
- cur = gen_xmlNodePtr_in(n_cur, 1);
-
- ret_val = xmlAddChild(parent, cur);
- if (ret_val == NULL) { xmlFreeNode(cur) ; cur = NULL ; }
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_parent, parent, 0);
- des_xmlNodePtr_in(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddChild",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAddChildList(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr parent; /* the parent node */
- int n_parent;
- xmlNodePtr cur; /* the first node in the list */
- int n_cur;
-
- for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr_in;n_cur++) {
- mem_base = xmlMemBlocks();
- parent = gen_xmlNodePtr(n_parent, 0);
- cur = gen_xmlNodePtr_in(n_cur, 1);
-
- ret_val = xmlAddChildList(parent, cur);
- if (ret_val == NULL) { xmlFreeNodeList(cur) ; cur = NULL ; }
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_parent, parent, 0);
- des_xmlNodePtr_in(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddChildList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAddNextSibling(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr cur; /* the child node */
- int n_cur;
- xmlNodePtr elem; /* the new node */
- int n_elem;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr_in;n_elem++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- elem = gen_xmlNodePtr_in(n_elem, 1);
-
- ret_val = xmlAddNextSibling(cur, elem);
- if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; }
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_xmlNodePtr_in(n_elem, elem, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddNextSibling",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAddPrevSibling(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr cur; /* the child node */
- int n_cur;
- xmlNodePtr elem; /* the new node */
- int n_elem;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr_in;n_elem++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- elem = gen_xmlNodePtr_in(n_elem, 1);
-
- ret_val = xmlAddPrevSibling(cur, elem);
- if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; }
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_xmlNodePtr_in(n_elem, elem, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddPrevSibling",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAddSibling(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr cur; /* the child node */
- int n_cur;
- xmlNodePtr elem; /* the new node */
- int n_elem;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr_in;n_elem++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- elem = gen_xmlNodePtr_in(n_elem, 1);
-
- ret_val = xmlAddSibling(cur, elem);
- if (ret_val == NULL) { xmlFreeNode(elem) ; elem = NULL ; }
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_xmlNodePtr_in(n_elem, elem, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddSibling",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAttrSerializeTxtContent(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef LIBXML_OUTPUT_ENABLED
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlAttrPtr attr; /* the attribute node */
- int n_attr;
- xmlChar * string; /* the text content */
- int n_string;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) {
- for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- attr = gen_xmlAttrPtr(n_attr, 2);
- string = gen_const_xmlChar_ptr(n_string, 3);
-
- xmlAttrSerializeTxtContent(buf, doc, attr, (const xmlChar *)string);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlAttrPtr(n_attr, attr, 2);
- des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAttrSerializeTxtContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_doc);
- printf(" %d", n_attr);
- printf(" %d", n_string);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlBuf_ptr 1
-static xmlBuf * gen_const_xmlBuf_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlBuf_ptr(int no ATTRIBUTE_UNUSED, const xmlBuf * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlBufContent(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlBuf * buf; /* the buffer */
- int n_buf;
-
- for (n_buf = 0;n_buf < gen_nb_const_xmlBuf_ptr;n_buf++) {
- mem_base = xmlMemBlocks();
- buf = gen_const_xmlBuf_ptr(n_buf, 0);
-
- ret_val = xmlBufContent((const xmlBuf *)buf);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlBuf_ptr(n_buf, (const xmlBuf *)buf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlBufPtr 1
-static xmlBufPtr gen_xmlBufPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlBufPtr(int no ATTRIBUTE_UNUSED, xmlBufPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlBufEnd(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlBufPtr buf; /* the buffer */
- int n_buf;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufPtr;n_buf++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufPtr(n_buf, 0);
-
- ret_val = xmlBufEnd(buf);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlBufPtr(n_buf, buf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufEnd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlNode_ptr 1
-static xmlNode * gen_const_xmlNode_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlNode_ptr(int no ATTRIBUTE_UNUSED, const xmlNode * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlBufGetNodeContent(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufPtr buf; /* a buffer xmlBufPtr */
- int n_buf;
- xmlNode * cur; /* the node being read */
- int n_cur;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufPtr;n_buf++) {
- for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufPtr(n_buf, 0);
- cur = gen_const_xmlNode_ptr(n_cur, 1);
-
- ret_val = xmlBufGetNodeContent(buf, (const xmlNode *)cur);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufPtr(n_buf, buf, 0);
- des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufGetNodeContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufNodeDump(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlBufShrink(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlBufPtr 1
-static xmlBufPtr gen_const_xmlBufPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlBufPtr(int no ATTRIBUTE_UNUSED, const xmlBufPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlBufUse(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferAdd(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the buffer to dump */
- int n_buf;
- xmlChar * str; /* the #xmlChar string */
- int n_str;
- int len; /* the number of #xmlChar to add */
- int n_len;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
- len = gen_int(n_len, 2);
- if ((str != NULL) &&
- (len > (int) strlen((const char *) str) + 1))
- continue;
-
- ret_val = xmlBufferAdd(buf, (const xmlChar *)str, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferAdd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_str);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferAddHead(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the buffer */
- int n_buf;
- xmlChar * str; /* the #xmlChar string */
- int n_str;
- int len; /* the number of #xmlChar to add */
- int n_len;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
- len = gen_int(n_len, 2);
- if ((str != NULL) &&
- (len > (int) strlen((const char *) str) + 1))
- continue;
-
- ret_val = xmlBufferAddHead(buf, (const xmlChar *)str, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferAddHead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_str);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferCCat(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the buffer to dump */
- int n_buf;
- char * str; /* the C char string */
- int n_str;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_str = 0;n_str < gen_nb_const_char_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- str = gen_const_char_ptr(n_str, 1);
-
- ret_val = xmlBufferCCat(buf, (const char *)str);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_const_char_ptr(n_str, (const char *)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferCCat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferCat(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the buffer to add to */
- int n_buf;
- xmlChar * str; /* the #xmlChar string */
- int n_str;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
-
- ret_val = xmlBufferCat(buf, (const xmlChar *)str);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferCat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_const_xmlBuffer_ptr 1
-static xmlBuffer * gen_const_xmlBuffer_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_const_xmlBuffer_ptr(int no ATTRIBUTE_UNUSED, const xmlBuffer * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlBufferContent(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlBuffer * buf; /* the buffer */
- int n_buf;
-
- for (n_buf = 0;n_buf < gen_nb_const_xmlBuffer_ptr;n_buf++) {
- mem_base = xmlMemBlocks();
- buf = gen_const_xmlBuffer_ptr(n_buf, 0);
-
- ret_val = xmlBufferContent((const xmlBuffer *)buf);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlBuffer_ptr(n_buf, (const xmlBuffer *)buf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferCreate(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlBufferPtr ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlBufferCreate();
- desret_xmlBufferPtr(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferCreate",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferCreateSize(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferCreateStatic(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferDetach(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlBufferPtr buf; /* the buffer */
- int n_buf;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
-
- ret_val = xmlBufferDetach(buf);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferDetach",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferEmpty(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlBufferPtr buf; /* the buffer */
- int n_buf;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
-
- xmlBufferEmpty(buf);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferEmpty",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferGrow(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the buffer */
- int n_buf;
- unsigned int len; /* the minimum free size to allocate */
- int n_len;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_len = 0;n_len < gen_nb_unsigned_int;n_len++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- len = gen_unsigned_int(n_len, 1);
-
- ret_val = xmlBufferGrow(buf, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_unsigned_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferGrow",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferLength(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBuffer * buf; /* the buffer */
- int n_buf;
-
- for (n_buf = 0;n_buf < gen_nb_const_xmlBuffer_ptr;n_buf++) {
- mem_base = xmlMemBlocks();
- buf = gen_const_xmlBuffer_ptr(n_buf, 0);
-
- ret_val = xmlBufferLength((const xmlBuffer *)buf);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlBuffer_ptr(n_buf, (const xmlBuffer *)buf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferLength",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferResize(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the buffer to resize */
- int n_buf;
- unsigned int size; /* the desired size */
- int n_size;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_size = 0;n_size < gen_nb_unsigned_int;n_size++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- size = gen_unsigned_int(n_size, 1);
-
- ret_val = xmlBufferResize(buf, size);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_unsigned_int(n_size, size, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferResize",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferSetAllocationScheme(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlBufferPtr buf; /* the buffer to tune */
- int n_buf;
- xmlBufferAllocationScheme scheme; /* allocation scheme to use */
- int n_scheme;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_scheme = 0;n_scheme < gen_nb_xmlBufferAllocationScheme;n_scheme++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- scheme = gen_xmlBufferAllocationScheme(n_scheme, 1);
-
- xmlBufferSetAllocationScheme(buf, scheme);
- if ((buf != NULL) && (scheme == XML_BUFFER_ALLOC_IMMUTABLE) && (buf->content != NULL) && (buf->content != static_buf_content)) { xmlFree(buf->content); buf->content = NULL;}
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlBufferAllocationScheme(n_scheme, scheme, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferSetAllocationScheme",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_scheme);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferShrink(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the buffer to dump */
- int n_buf;
- unsigned int len; /* the number of xmlChar to remove */
- int n_len;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_len = 0;n_len < gen_nb_unsigned_int;n_len++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- len = gen_unsigned_int(n_len, 1);
-
- ret_val = xmlBufferShrink(buf, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_unsigned_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferShrink",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferWriteCHAR(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer */
- int n_buf;
- xmlChar * string; /* the string to add */
- int n_string;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- string = gen_const_xmlChar_ptr(n_string, 1);
-
- xmlBufferWriteCHAR(buf, (const xmlChar *)string);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferWriteCHAR",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_string);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferWriteChar(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- char * string; /* the string to add */
- int n_string;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_string = 0;n_string < gen_nb_const_char_ptr;n_string++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- string = gen_const_char_ptr(n_string, 1);
-
- xmlBufferWriteChar(buf, (const char *)string);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_const_char_ptr(n_string, (const char *)string, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferWriteChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_string);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBufferWriteQuotedString(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlChar * string; /* the string to add */
- int n_string;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr;n_string++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- string = gen_const_xmlChar_ptr(n_string, 1);
-
- xmlBufferWriteQuotedString(buf, (const xmlChar *)string);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_const_xmlChar_ptr(n_string, (const xmlChar *)string, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBufferWriteQuotedString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_string);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBuildQName(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * ncname; /* the Name */
- int n_ncname;
- xmlChar * prefix; /* the prefix */
- int n_prefix;
- xmlChar * memory; /* preallocated memory */
- int n_memory;
- int len; /* preallocated memory length */
- int n_len;
-
- for (n_ncname = 0;n_ncname < gen_nb_const_xmlChar_ptr;n_ncname++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_memory = 0;n_memory < gen_nb_xmlChar_ptr;n_memory++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ncname = gen_const_xmlChar_ptr(n_ncname, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- memory = gen_xmlChar_ptr(n_memory, 2);
- len = gen_int(n_len, 3);
- if ((prefix != NULL) &&
- (len > (int) strlen((const char *) prefix) + 1))
- continue;
-
- ret_val = xmlBuildQName((const xmlChar *)ncname, (const xmlChar *)prefix, memory, len);
- if ((ret_val != NULL) && (ret_val != ncname) &&
- (ret_val != prefix) && (ret_val != memory))
- xmlFree(ret_val);
- ret_val = NULL;
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_ncname, (const xmlChar *)ncname, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_xmlChar_ptr(n_memory, memory, 2);
- des_int(n_len, len, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBuildQName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ncname);
- printf(" %d", n_prefix);
- printf(" %d", n_memory);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlChildElementCount(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- unsigned long ret_val;
- xmlNodePtr parent; /* the parent node */
- int n_parent;
-
- for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) {
- mem_base = xmlMemBlocks();
- parent = gen_xmlNodePtr(n_parent, 0);
-
- ret_val = xmlChildElementCount(parent);
- desret_unsigned_long(ret_val);
- call_tests++;
- des_xmlNodePtr(n_parent, parent, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlChildElementCount",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlDocPtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- int recursive; /* if not zero do a recursive copy. */
- int n_recursive;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_recursive = 0;n_recursive < gen_nb_int;n_recursive++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- recursive = gen_int(n_recursive, 1);
-
- ret_val = xmlCopyDoc(doc, recursive);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_int(n_recursive, recursive, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_recursive);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyDtd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlDtdPtr ret_val;
- xmlDtdPtr dtd; /* the dtd */
- int n_dtd;
-
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- mem_base = xmlMemBlocks();
- dtd = gen_xmlDtdPtr(n_dtd, 0);
-
- ret_val = xmlCopyDtd(dtd);
- desret_xmlDtdPtr(ret_val);
- call_tests++;
- des_xmlDtdPtr(n_dtd, dtd, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyDtd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dtd);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyNamespace(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNsPtr ret_val;
- xmlNsPtr cur; /* the namespace */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNsPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNsPtr(n_cur, 0);
-
- ret_val = xmlCopyNamespace(cur);
- if (ret_val != NULL) xmlFreeNs(ret_val);
- desret_xmlNsPtr(ret_val);
- call_tests++;
- des_xmlNsPtr(n_cur, cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyNamespace",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyNamespaceList(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNsPtr ret_val;
- xmlNsPtr cur; /* the first namespace */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNsPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNsPtr(n_cur, 0);
-
- ret_val = xmlCopyNamespaceList(cur);
- if (ret_val != NULL) xmlFreeNsList(ret_val);
- desret_xmlNsPtr(ret_val);
- call_tests++;
- des_xmlNsPtr(n_cur, cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyNamespaceList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyNode(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr node; /* the node */
- int n_node;
- int extended; /* if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable) */
- int n_extended;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_extended = 0;n_extended < gen_nb_int;n_extended++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- extended = gen_int(n_extended, 1);
-
- ret_val = xmlCopyNode(node, extended);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_int(n_extended, extended, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_extended);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyNodeList(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr node; /* the first node in the list. */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
-
- ret_val = xmlCopyNodeList(node);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyNodeList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyProp(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNodePtr target; /* the element where the attribute will be grafted */
- int n_target;
- xmlAttrPtr cur; /* the attribute */
- int n_cur;
-
- for (n_target = 0;n_target < gen_nb_xmlNodePtr;n_target++) {
- for (n_cur = 0;n_cur < gen_nb_xmlAttrPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- target = gen_xmlNodePtr(n_target, 0);
- cur = gen_xmlAttrPtr(n_cur, 1);
-
- ret_val = xmlCopyProp(target, cur);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_target, target, 0);
- des_xmlAttrPtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_target);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyPropList(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNodePtr target; /* the element where the attributes will be grafted */
- int n_target;
- xmlAttrPtr cur; /* the first attribute */
- int n_cur;
-
- for (n_target = 0;n_target < gen_nb_xmlNodePtr;n_target++) {
- for (n_cur = 0;n_cur < gen_nb_xmlAttrPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- target = gen_xmlNodePtr(n_target, 0);
- cur = gen_xmlAttrPtr(n_cur, 1);
-
- ret_val = xmlCopyPropList(target, cur);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_target, target, 0);
- des_xmlAttrPtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyPropList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_target);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateIntSubset(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDtdPtr ret_val;
- xmlDocPtr doc; /* the document pointer */
- int n_doc;
- xmlChar * name; /* the DTD name */
- int n_name;
- xmlChar * ExternalID; /* the external (PUBLIC) ID */
- int n_ExternalID;
- xmlChar * SystemID; /* the system ID */
- int n_SystemID;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 3);
-
- ret_val = xmlCreateIntSubset(doc, (const xmlChar *)name, (const xmlChar *)ExternalID, (const xmlChar *)SystemID);
- desret_xmlDtdPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 2);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCreateIntSubset",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlDOMWrapCtxtPtr 1
-static xmlDOMWrapCtxtPtr gen_xmlDOMWrapCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlDOMWrapCtxtPtr(int no ATTRIBUTE_UNUSED, xmlDOMWrapCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlDOMWrapAdoptNode(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDOMWrapCtxtPtr ctxt; /* the optional context for custom processing */
- int n_ctxt;
- xmlDocPtr sourceDoc; /* the optional sourceDoc */
- int n_sourceDoc;
- xmlNodePtr node; /* the node to start with */
- int n_node;
- xmlDocPtr destDoc; /* the destination doc */
- int n_destDoc;
- xmlNodePtr destParent; /* the optional new parent of @node in @destDoc */
- int n_destParent;
- int options; /* option flags */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlDOMWrapCtxtPtr;n_ctxt++) {
- for (n_sourceDoc = 0;n_sourceDoc < gen_nb_xmlDocPtr;n_sourceDoc++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_destDoc = 0;n_destDoc < gen_nb_xmlDocPtr;n_destDoc++) {
- for (n_destParent = 0;n_destParent < gen_nb_xmlNodePtr;n_destParent++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlDOMWrapCtxtPtr(n_ctxt, 0);
- sourceDoc = gen_xmlDocPtr(n_sourceDoc, 1);
- node = gen_xmlNodePtr(n_node, 2);
- destDoc = gen_xmlDocPtr(n_destDoc, 3);
- destParent = gen_xmlNodePtr(n_destParent, 4);
- options = gen_int(n_options, 5);
-
- ret_val = xmlDOMWrapAdoptNode(ctxt, sourceDoc, node, destDoc, destParent, options);
- if ((node != NULL) && (node->parent == NULL)) {xmlUnlinkNode(node);xmlFreeNode(node);node = NULL;}
- desret_int(ret_val);
- call_tests++;
- des_xmlDOMWrapCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_sourceDoc, sourceDoc, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlDocPtr(n_destDoc, destDoc, 3);
- des_xmlNodePtr(n_destParent, destParent, 4);
- des_int(n_options, options, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDOMWrapAdoptNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_sourceDoc);
- printf(" %d", n_node);
- printf(" %d", n_destDoc);
- printf(" %d", n_destParent);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDOMWrapCloneNode(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDOMWrapCtxtPtr ctxt; /* the optional context for custom processing */
- int n_ctxt;
- xmlDocPtr sourceDoc; /* the optional sourceDoc */
- int n_sourceDoc;
- xmlNodePtr node; /* the node to start with */
- int n_node;
- xmlNodePtr * resNode; /* the clone of the given @node */
- int n_resNode;
- xmlDocPtr destDoc; /* the destination doc */
- int n_destDoc;
- xmlNodePtr destParent; /* the optional new parent of @node in @destDoc */
- int n_destParent;
- int deep; /* descend into child if set */
- int n_deep;
- int options; /* option flags */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlDOMWrapCtxtPtr;n_ctxt++) {
- for (n_sourceDoc = 0;n_sourceDoc < gen_nb_xmlDocPtr;n_sourceDoc++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_resNode = 0;n_resNode < gen_nb_xmlNodePtr_ptr;n_resNode++) {
- for (n_destDoc = 0;n_destDoc < gen_nb_xmlDocPtr;n_destDoc++) {
- for (n_destParent = 0;n_destParent < gen_nb_xmlNodePtr;n_destParent++) {
- for (n_deep = 0;n_deep < gen_nb_int;n_deep++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlDOMWrapCtxtPtr(n_ctxt, 0);
- sourceDoc = gen_xmlDocPtr(n_sourceDoc, 1);
- node = gen_xmlNodePtr(n_node, 2);
- resNode = gen_xmlNodePtr_ptr(n_resNode, 3);
- destDoc = gen_xmlDocPtr(n_destDoc, 4);
- destParent = gen_xmlNodePtr(n_destParent, 5);
- deep = gen_int(n_deep, 6);
- options = gen_int(n_options, 7);
-
- ret_val = xmlDOMWrapCloneNode(ctxt, sourceDoc, node, resNode, destDoc, destParent, deep, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlDOMWrapCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_sourceDoc, sourceDoc, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_xmlNodePtr_ptr(n_resNode, resNode, 3);
- des_xmlDocPtr(n_destDoc, destDoc, 4);
- des_xmlNodePtr(n_destParent, destParent, 5);
- des_int(n_deep, deep, 6);
- des_int(n_options, options, 7);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDOMWrapCloneNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_sourceDoc);
- printf(" %d", n_node);
- printf(" %d", n_resNode);
- printf(" %d", n_destDoc);
- printf(" %d", n_destParent);
- printf(" %d", n_deep);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDOMWrapNewCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlDOMWrapReconcileNamespaces(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDOMWrapCtxtPtr ctxt; /* DOM wrapper context, unused at the moment */
- int n_ctxt;
- xmlNodePtr elem; /* the element-node */
- int n_elem;
- int options; /* option flags */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlDOMWrapCtxtPtr;n_ctxt++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlDOMWrapCtxtPtr(n_ctxt, 0);
- elem = gen_xmlNodePtr(n_elem, 1);
- options = gen_int(n_options, 2);
-
- ret_val = xmlDOMWrapReconcileNamespaces(ctxt, elem, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlDOMWrapCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_elem, elem, 1);
- des_int(n_options, options, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDOMWrapReconcileNamespaces",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_elem);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDOMWrapRemoveNode(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDOMWrapCtxtPtr ctxt; /* a DOM wrapper context */
- int n_ctxt;
- xmlDocPtr doc; /* the doc */
- int n_doc;
- xmlNodePtr node; /* the node to be removed. */
- int n_node;
- int options; /* set of options, unused at the moment */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlDOMWrapCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlDOMWrapCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- node = gen_xmlNodePtr(n_node, 2);
- options = gen_int(n_options, 3);
-
- ret_val = xmlDOMWrapRemoveNode(ctxt, doc, node, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlDOMWrapCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_node, node, 2);
- des_int(n_options, options, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDOMWrapRemoveNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_node);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocCopyNode(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr node; /* the node */
- int n_node;
- xmlDocPtr doc; /* the document */
- int n_doc;
- int extended; /* if 1 do a recursive copy (properties, namespaces and children when applicable) if 2 copy properties and namespaces (when applicable) */
- int n_extended;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_extended = 0;n_extended < gen_nb_int;n_extended++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- extended = gen_int(n_extended, 2);
-
- ret_val = xmlDocCopyNode(node, doc, extended);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_int(n_extended, extended, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocCopyNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_doc);
- printf(" %d", n_extended);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocCopyNodeList(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the target document */
- int n_doc;
- xmlNodePtr node; /* the first node in the list. */
- int n_node;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- ret_val = xmlDocCopyNodeList(doc, node);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocCopyNodeList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- FILE * f; /* the FILE* */
- int n_f;
- xmlDocPtr cur; /* the document */
- int n_cur;
-
- for (n_f = 0;n_f < gen_nb_FILE_ptr;n_f++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- f = gen_FILE_ptr(n_f, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
-
- ret_val = xmlDocDump(f, cur);
- desret_int(ret_val);
- call_tests++;
- des_FILE_ptr(n_f, f, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_f);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocDumpFormatMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlDocPtr cur; /* the document */
- int n_cur;
- xmlChar ** mem; /* OUT: the memory pointer */
- int n_mem;
- int * size; /* OUT: the memory length */
- int n_size;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_mem = 0;n_mem < gen_nb_xmlChar_ptr_ptr;n_mem++) {
- for (n_size = 0;n_size < gen_nb_int_ptr;n_size++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlDocPtr(n_cur, 0);
- mem = gen_xmlChar_ptr_ptr(n_mem, 1);
- size = gen_int_ptr(n_size, 2);
- format = gen_int(n_format, 3);
-
- xmlDocDumpFormatMemory(cur, mem, size, format);
- call_tests++;
- des_xmlDocPtr(n_cur, cur, 0);
- des_xmlChar_ptr_ptr(n_mem, mem, 1);
- des_int_ptr(n_size, size, 2);
- des_int(n_format, format, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocDumpFormatMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_mem);
- printf(" %d", n_size);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocDumpFormatMemoryEnc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlDocPtr out_doc; /* Document to generate XML text from */
- int n_out_doc;
- xmlChar ** doc_txt_ptr; /* Memory pointer for allocated XML text */
- int n_doc_txt_ptr;
- int * doc_txt_len; /* Length of the generated XML text */
- int n_doc_txt_len;
- char * txt_encoding; /* Character encoding to use when generating XML text */
- int n_txt_encoding;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_out_doc = 0;n_out_doc < gen_nb_xmlDocPtr;n_out_doc++) {
- for (n_doc_txt_ptr = 0;n_doc_txt_ptr < gen_nb_xmlChar_ptr_ptr;n_doc_txt_ptr++) {
- for (n_doc_txt_len = 0;n_doc_txt_len < gen_nb_int_ptr;n_doc_txt_len++) {
- for (n_txt_encoding = 0;n_txt_encoding < gen_nb_const_char_ptr;n_txt_encoding++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- out_doc = gen_xmlDocPtr(n_out_doc, 0);
- doc_txt_ptr = gen_xmlChar_ptr_ptr(n_doc_txt_ptr, 1);
- doc_txt_len = gen_int_ptr(n_doc_txt_len, 2);
- txt_encoding = gen_const_char_ptr(n_txt_encoding, 3);
- format = gen_int(n_format, 4);
-
- xmlDocDumpFormatMemoryEnc(out_doc, doc_txt_ptr, doc_txt_len, (const char *)txt_encoding, format);
- call_tests++;
- des_xmlDocPtr(n_out_doc, out_doc, 0);
- des_xmlChar_ptr_ptr(n_doc_txt_ptr, doc_txt_ptr, 1);
- des_int_ptr(n_doc_txt_len, doc_txt_len, 2);
- des_const_char_ptr(n_txt_encoding, (const char *)txt_encoding, 3);
- des_int(n_format, format, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocDumpFormatMemoryEnc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out_doc);
- printf(" %d", n_doc_txt_ptr);
- printf(" %d", n_doc_txt_len);
- printf(" %d", n_txt_encoding);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocDumpMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlDocPtr cur; /* the document */
- int n_cur;
- xmlChar ** mem; /* OUT: the memory pointer */
- int n_mem;
- int * size; /* OUT: the memory length */
- int n_size;
-
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_mem = 0;n_mem < gen_nb_xmlChar_ptr_ptr;n_mem++) {
- for (n_size = 0;n_size < gen_nb_int_ptr;n_size++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlDocPtr(n_cur, 0);
- mem = gen_xmlChar_ptr_ptr(n_mem, 1);
- size = gen_int_ptr(n_size, 2);
-
- xmlDocDumpMemory(cur, mem, size);
- call_tests++;
- des_xmlDocPtr(n_cur, cur, 0);
- des_xmlChar_ptr_ptr(n_mem, mem, 1);
- des_int_ptr(n_size, size, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocDumpMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_mem);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocDumpMemoryEnc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlDocPtr out_doc; /* Document to generate XML text from */
- int n_out_doc;
- xmlChar ** doc_txt_ptr; /* Memory pointer for allocated XML text */
- int n_doc_txt_ptr;
- int * doc_txt_len; /* Length of the generated XML text */
- int n_doc_txt_len;
- char * txt_encoding; /* Character encoding to use when generating XML text */
- int n_txt_encoding;
-
- for (n_out_doc = 0;n_out_doc < gen_nb_xmlDocPtr;n_out_doc++) {
- for (n_doc_txt_ptr = 0;n_doc_txt_ptr < gen_nb_xmlChar_ptr_ptr;n_doc_txt_ptr++) {
- for (n_doc_txt_len = 0;n_doc_txt_len < gen_nb_int_ptr;n_doc_txt_len++) {
- for (n_txt_encoding = 0;n_txt_encoding < gen_nb_const_char_ptr;n_txt_encoding++) {
- mem_base = xmlMemBlocks();
- out_doc = gen_xmlDocPtr(n_out_doc, 0);
- doc_txt_ptr = gen_xmlChar_ptr_ptr(n_doc_txt_ptr, 1);
- doc_txt_len = gen_int_ptr(n_doc_txt_len, 2);
- txt_encoding = gen_const_char_ptr(n_txt_encoding, 3);
-
- xmlDocDumpMemoryEnc(out_doc, doc_txt_ptr, doc_txt_len, (const char *)txt_encoding);
- call_tests++;
- des_xmlDocPtr(n_out_doc, out_doc, 0);
- des_xmlChar_ptr_ptr(n_doc_txt_ptr, doc_txt_ptr, 1);
- des_int_ptr(n_doc_txt_len, doc_txt_len, 2);
- des_const_char_ptr(n_txt_encoding, (const char *)txt_encoding, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocDumpMemoryEnc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out_doc);
- printf(" %d", n_doc_txt_ptr);
- printf(" %d", n_doc_txt_len);
- printf(" %d", n_txt_encoding);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocFormatDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- FILE * f; /* the FILE* */
- int n_f;
- xmlDocPtr cur; /* the document */
- int n_cur;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_f = 0;n_f < gen_nb_FILE_ptr;n_f++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- f = gen_FILE_ptr(n_f, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- format = gen_int(n_format, 2);
-
- ret_val = xmlDocFormatDump(f, cur, format);
- desret_int(ret_val);
- call_tests++;
- des_FILE_ptr(n_f, f, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_int(n_format, format, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocFormatDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_f);
- printf(" %d", n_cur);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocGetRootElement(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDoc * doc; /* the document */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
-
- ret_val = xmlDocGetRootElement((const xmlDoc *)doc);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocGetRootElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDocSetRootElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr root; /* the new document root element, if root is NULL no action is taken, to remove a node from a document use xmlUnlinkNode(root) instead. */
- int n_root;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_root = 0;n_root < gen_nb_xmlNodePtr_in;n_root++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- root = gen_xmlNodePtr_in(n_root, 1);
-
- ret_val = xmlDocSetRootElement(doc, root);
- if (doc == NULL) { xmlFreeNode(root) ; root = NULL ; }
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr_in(n_root, root, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDocSetRootElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_root);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlElemDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- FILE * f; /* the FILE * for the output */
- int n_f;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr cur; /* the current node */
- int n_cur;
-
- for (n_f = 0;n_f < gen_nb_FILE_ptr;n_f++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- f = gen_FILE_ptr(n_f, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- cur = gen_xmlNodePtr(n_cur, 2);
-
- xmlElemDump(f, doc, cur);
- call_tests++;
- des_FILE_ptr(n_f, f, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_cur, cur, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlElemDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_f);
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlFirstElementChild(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr parent; /* the parent node */
- int n_parent;
-
- for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) {
- mem_base = xmlMemBlocks();
- parent = gen_xmlNodePtr(n_parent, 0);
-
- ret_val = xmlFirstElementChild(parent);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_parent, parent, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlFirstElementChild",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetBufferAllocationScheme(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlBufferAllocationScheme ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlGetBufferAllocationScheme();
- desret_xmlBufferAllocationScheme(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetBufferAllocationScheme",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetCompressMode(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlGetCompressMode();
- desret_int(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetCompressMode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetDocCompressMode(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDoc * doc; /* the document */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
-
- ret_val = xmlGetDocCompressMode((const xmlDoc *)doc);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetDocCompressMode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetIntSubset(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDtdPtr ret_val;
- xmlDoc * doc; /* the document pointer */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
-
- ret_val = xmlGetIntSubset((const xmlDoc *)doc);
- desret_xmlDtdPtr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetIntSubset",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetLastChild(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNode * parent; /* the parent node */
- int n_parent;
-
- for (n_parent = 0;n_parent < gen_nb_const_xmlNode_ptr;n_parent++) {
- mem_base = xmlMemBlocks();
- parent = gen_const_xmlNode_ptr(n_parent, 0);
-
- ret_val = xmlGetLastChild((const xmlNode *)parent);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_parent, (const xmlNode *)parent, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetLastChild",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetLineNo(void) {
- int test_ret = 0;
-
- int mem_base;
- long ret_val;
- xmlNode * node; /* valid node */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
-
- ret_val = xmlGetLineNo((const xmlNode *)node);
- desret_long(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetLineNo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetNoNsProp(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlNode * node; /* the node */
- int n_node;
- xmlChar * name; /* the attribute name */
- int n_name;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlGetNoNsProp((const xmlNode *)node, (const xmlChar *)name);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetNoNsProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetNodePath(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlNode * node; /* a node */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
-
- ret_val = xmlGetNodePath((const xmlNode *)node);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetNodePath",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetNsList(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlGetNsProp(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlNode * node; /* the node */
- int n_node;
- xmlChar * name; /* the attribute name */
- int n_name;
- xmlChar * nameSpace; /* the URI of the namespace */
- int n_nameSpace;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_nameSpace = 0;n_nameSpace < gen_nb_const_xmlChar_ptr;n_nameSpace++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- nameSpace = gen_const_xmlChar_ptr(n_nameSpace, 2);
-
- ret_val = xmlGetNsProp((const xmlNode *)node, (const xmlChar *)name, (const xmlChar *)nameSpace);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_nameSpace, (const xmlChar *)nameSpace, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetNsProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_name);
- printf(" %d", n_nameSpace);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetProp(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlNode * node; /* the node */
- int n_node;
- xmlChar * name; /* the attribute name */
- int n_name;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlGetProp((const xmlNode *)node, (const xmlChar *)name);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHasNsProp(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNode * node; /* the node */
- int n_node;
- xmlChar * name; /* the attribute name */
- int n_name;
- xmlChar * nameSpace; /* the URI of the namespace */
- int n_nameSpace;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_nameSpace = 0;n_nameSpace < gen_nb_const_xmlChar_ptr;n_nameSpace++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- nameSpace = gen_const_xmlChar_ptr(n_nameSpace, 2);
-
- ret_val = xmlHasNsProp((const xmlNode *)node, (const xmlChar *)name, (const xmlChar *)nameSpace);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_nameSpace, (const xmlChar *)nameSpace, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHasNsProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_name);
- printf(" %d", n_nameSpace);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlHasProp(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNode * node; /* the node */
- int n_node;
- xmlChar * name; /* the attribute name */
- int n_name;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlHasProp((const xmlNode *)node, (const xmlChar *)name);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlHasProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsBlankNode(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlNode * node; /* the node */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
-
- ret_val = xmlIsBlankNode((const xmlNode *)node);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsBlankNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsXHTML(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * systemID; /* the system identifier */
- int n_systemID;
- xmlChar * publicID; /* the public identifier */
- int n_publicID;
-
- for (n_systemID = 0;n_systemID < gen_nb_const_xmlChar_ptr;n_systemID++) {
- for (n_publicID = 0;n_publicID < gen_nb_const_xmlChar_ptr;n_publicID++) {
- mem_base = xmlMemBlocks();
- systemID = gen_const_xmlChar_ptr(n_systemID, 0);
- publicID = gen_const_xmlChar_ptr(n_publicID, 1);
-
- ret_val = xmlIsXHTML((const xmlChar *)systemID, (const xmlChar *)publicID);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_systemID, (const xmlChar *)systemID, 0);
- des_const_xmlChar_ptr(n_publicID, (const xmlChar *)publicID, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsXHTML",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_systemID);
- printf(" %d", n_publicID);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlLastElementChild(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr parent; /* the parent node */
- int n_parent;
-
- for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) {
- mem_base = xmlMemBlocks();
- parent = gen_xmlNodePtr(n_parent, 0);
-
- ret_val = xmlLastElementChild(parent);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_parent, parent, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlLastElementChild",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewCDataBlock(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * content; /* the CDATA block content content */
- int n_content;
- int len; /* the length of the block */
- int n_len;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
- len = gen_int(n_len, 2);
- if ((content != NULL) &&
- (len > (int) strlen((const char *) content) + 1))
- continue;
-
- ret_val = xmlNewCDataBlock(doc, (const xmlChar *)content, len);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewCDataBlock",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_content);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewCharRef(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * name; /* the char ref string, starting with # or "&# ... ;" */
- int n_name;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlNewCharRef(doc, (const xmlChar *)name);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewCharRef",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewChild(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr parent; /* the parent node */
- int n_parent;
- xmlNsPtr ns; /* a namespace if any */
- int n_ns;
- xmlChar * name; /* the name of the child */
- int n_name;
- xmlChar * content; /* the XML content of the child if any. */
- int n_content;
-
- for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- parent = gen_xmlNodePtr(n_parent, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- content = gen_const_xmlChar_ptr(n_content, 3);
-
- ret_val = xmlNewChild(parent, ns, (const xmlChar *)name, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_parent, parent, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewChild",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewComment(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlChar * content; /* the comment content */
- int n_content;
-
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- content = gen_const_xmlChar_ptr(n_content, 0);
-
- ret_val = xmlNewComment((const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewComment",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_content);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDoc(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDocPtr ret_val;
- xmlChar * version; /* xmlChar string giving the version of XML "1.0" */
- int n_version;
-
- for (n_version = 0;n_version < gen_nb_const_xmlChar_ptr;n_version++) {
- mem_base = xmlMemBlocks();
- version = gen_const_xmlChar_ptr(n_version, 0);
-
- ret_val = xmlNewDoc((const xmlChar *)version);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_version, (const xmlChar *)version, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_version);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocComment(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * content; /* the comment content */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- ret_val = xmlNewDocComment(doc, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocComment",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocFragment(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document owning the fragment */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
-
- ret_val = xmlNewDocFragment(doc);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocFragment",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocNode(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNsPtr ns; /* namespace if any */
- int n_ns;
- xmlChar * name; /* the node name */
- int n_name;
- xmlChar * content; /* the XML text content if any */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- content = gen_const_xmlChar_ptr(n_content, 3);
-
- ret_val = xmlNewDocNode(doc, ns, (const xmlChar *)name, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocNodeEatName(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNsPtr ns; /* namespace if any */
- int n_ns;
- xmlChar * name; /* the node name */
- int n_name;
- xmlChar * content; /* the XML text content if any */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_eaten_name;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_eaten_name(n_name, 2);
- content = gen_const_xmlChar_ptr(n_content, 3);
-
- ret_val = xmlNewDocNodeEatName(doc, ns, name, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_eaten_name(n_name, name, 2);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocNodeEatName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocPI(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the target document */
- int n_doc;
- xmlChar * name; /* the processing instruction name */
- int n_name;
- xmlChar * content; /* the PI content */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- content = gen_const_xmlChar_ptr(n_content, 2);
-
- ret_val = xmlNewDocPI(doc, (const xmlChar *)name, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocPI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocProp(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttrPtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * name; /* the name of the attribute */
- int n_name;
- xmlChar * value; /* the value of the attribute */
- int n_value;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- value = gen_const_xmlChar_ptr(n_value, 2);
-
- ret_val = xmlNewDocProp(doc, (const xmlChar *)name, (const xmlChar *)value);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocRawNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNsPtr ns; /* namespace if any */
- int n_ns;
- xmlChar * name; /* the node name */
- int n_name;
- xmlChar * content; /* the text content if any */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- content = gen_const_xmlChar_ptr(n_content, 3);
-
- ret_val = xmlNewDocRawNode(doc, ns, (const xmlChar *)name, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocRawNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocText(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDoc * doc; /* the document */
- int n_doc;
- xmlChar * content; /* the text content */
- int n_content;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- ret_val = xmlNewDocText((const xmlDoc *)doc, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocText",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocTextLen(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * content; /* the text content */
- int n_content;
- int len; /* the text len. */
- int n_len;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
- len = gen_int(n_len, 2);
- if ((content != NULL) &&
- (len > (int) strlen((const char *) content) + 1))
- continue;
-
- ret_val = xmlNewDocTextLen(doc, (const xmlChar *)content, len);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocTextLen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_content);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDtd(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDtdPtr ret_val;
- xmlDocPtr doc; /* the document pointer */
- int n_doc;
- xmlChar * name; /* the DTD name */
- int n_name;
- xmlChar * ExternalID; /* the external ID */
- int n_ExternalID;
- xmlChar * SystemID; /* the system ID */
- int n_SystemID;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ExternalID = 0;n_ExternalID < gen_nb_const_xmlChar_ptr;n_ExternalID++) {
- for (n_SystemID = 0;n_SystemID < gen_nb_const_xmlChar_ptr;n_SystemID++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ExternalID = gen_const_xmlChar_ptr(n_ExternalID, 2);
- SystemID = gen_const_xmlChar_ptr(n_SystemID, 3);
-
- ret_val = xmlNewDtd(doc, (const xmlChar *)name, (const xmlChar *)ExternalID, (const xmlChar *)SystemID);
- desret_xmlDtdPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ExternalID, (const xmlChar *)ExternalID, 2);
- des_const_xmlChar_ptr(n_SystemID, (const xmlChar *)SystemID, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDtd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_ExternalID);
- printf(" %d", n_SystemID);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewNode(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNsPtr ns; /* namespace if any */
- int n_ns;
- xmlChar * name; /* the node name */
- int n_name;
-
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- ns = gen_xmlNsPtr(n_ns, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlNewNode(ns, (const xmlChar *)name);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNsPtr(n_ns, ns, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewNodeEatName(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNsPtr ns; /* namespace if any */
- int n_ns;
- xmlChar * name; /* the node name */
- int n_name;
-
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_eaten_name;n_name++) {
- mem_base = xmlMemBlocks();
- ns = gen_xmlNsPtr(n_ns, 0);
- name = gen_eaten_name(n_name, 1);
-
- ret_val = xmlNewNodeEatName(ns, name);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNsPtr(n_ns, ns, 0);
- des_eaten_name(n_name, name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewNodeEatName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewNs(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNsPtr ret_val;
- xmlNodePtr node; /* the element carrying the namespace */
- int n_node;
- xmlChar * href; /* the URI associated */
- int n_href;
- xmlChar * prefix; /* the prefix for the namespace */
- int n_prefix;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_href = 0;n_href < gen_nb_const_xmlChar_ptr;n_href++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- href = gen_const_xmlChar_ptr(n_href, 1);
- prefix = gen_const_xmlChar_ptr(n_prefix, 2);
-
- ret_val = xmlNewNs(node, (const xmlChar *)href, (const xmlChar *)prefix);
- if ((node == NULL) && (ret_val != NULL)) xmlFreeNs(ret_val);
- desret_xmlNsPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_const_xmlChar_ptr(n_href, (const xmlChar *)href, 1);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_href);
- printf(" %d", n_prefix);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewNsProp(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNodePtr node; /* the holding node */
- int n_node;
- xmlNsPtr ns; /* the namespace */
- int n_ns;
- xmlChar * name; /* the name of the attribute */
- int n_name;
- xmlChar * value; /* the value of the attribute */
- int n_value;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- value = gen_const_xmlChar_ptr(n_value, 3);
-
- ret_val = xmlNewNsProp(node, ns, (const xmlChar *)name, (const xmlChar *)value);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewNsProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewNsPropEatName(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNodePtr node; /* the holding node */
- int n_node;
- xmlNsPtr ns; /* the namespace */
- int n_ns;
- xmlChar * name; /* the name of the attribute */
- int n_name;
- xmlChar * value; /* the value of the attribute */
- int n_value;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_eaten_name;n_name++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_eaten_name(n_name, 2);
- value = gen_const_xmlChar_ptr(n_value, 3);
-
- ret_val = xmlNewNsPropEatName(node, ns, name, (const xmlChar *)value);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_eaten_name(n_name, name, 2);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewNsPropEatName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewPI(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlChar * name; /* the processing instruction name */
- int n_name;
- xmlChar * content; /* the PI content */
- int n_content;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- ret_val = xmlNewPI((const xmlChar *)name, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewPI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewProp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNodePtr node; /* the holding node */
- int n_node;
- xmlChar * name; /* the name of the attribute */
- int n_name;
- xmlChar * value; /* the value of the attribute */
- int n_value;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- value = gen_const_xmlChar_ptr(n_value, 2);
-
- ret_val = xmlNewProp(node, (const xmlChar *)name, (const xmlChar *)value);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewReference(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDoc * doc; /* the document */
- int n_doc;
- xmlChar * name; /* the reference name, or the reference string with & and ; */
- int n_name;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlNewReference((const xmlDoc *)doc, (const xmlChar *)name);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewReference",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewText(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlChar * content; /* the text content */
- int n_content;
-
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- content = gen_const_xmlChar_ptr(n_content, 0);
-
- ret_val = xmlNewText((const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewText",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_content);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewTextChild(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr parent; /* the parent node */
- int n_parent;
- xmlNsPtr ns; /* a namespace if any */
- int n_ns;
- xmlChar * name; /* the name of the child */
- int n_name;
- xmlChar * content; /* the text content of the child if any. */
- int n_content;
-
- for (n_parent = 0;n_parent < gen_nb_xmlNodePtr;n_parent++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- parent = gen_xmlNodePtr(n_parent, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- content = gen_const_xmlChar_ptr(n_content, 3);
-
- ret_val = xmlNewTextChild(parent, ns, (const xmlChar *)name, (const xmlChar *)content);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_parent, parent, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextChild",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_parent);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewTextLen(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlChar * content; /* the text content */
- int n_content;
- int len; /* the text len. */
- int n_len;
-
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- content = gen_const_xmlChar_ptr(n_content, 0);
- len = gen_int(n_len, 1);
- if ((content != NULL) &&
- (len > (int) strlen((const char *) content) + 1))
- continue;
-
- ret_val = xmlNewTextLen((const xmlChar *)content, len);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextLen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_content);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNextElementSibling(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr node; /* the current node */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
-
- ret_val = xmlNextElementSibling(node);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNextElementSibling",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeAddContent(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr cur; /* the node being modified */
- int n_cur;
- xmlChar * content; /* extra content */
- int n_content;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- xmlNodeAddContent(cur, (const xmlChar *)content);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeAddContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeAddContentLen(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr cur; /* the node being modified */
- int n_cur;
- xmlChar * content; /* extra content */
- int n_content;
- int len; /* the size of @content */
- int n_len;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
- len = gen_int(n_len, 2);
- if ((content != NULL) &&
- (len > (int) strlen((const char *) content) + 1))
- continue;
-
- xmlNodeAddContentLen(cur, (const xmlChar *)content, len);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeAddContentLen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_content);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeBufGetContent(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlBufferPtr buffer; /* a buffer */
- int n_buffer;
- xmlNode * cur; /* the node being read */
- int n_cur;
-
- for (n_buffer = 0;n_buffer < gen_nb_xmlBufferPtr;n_buffer++) {
- for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- buffer = gen_xmlBufferPtr(n_buffer, 0);
- cur = gen_const_xmlNode_ptr(n_cur, 1);
-
- ret_val = xmlNodeBufGetContent(buffer, (const xmlNode *)cur);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buffer, buffer, 0);
- des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeBufGetContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr cur; /* the current node */
- int n_cur;
- int level; /* the imbrication level for indenting */
- int n_level;
- int format; /* is formatting allowed */
- int n_format;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_level = 0;n_level < gen_nb_int;n_level++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- cur = gen_xmlNodePtr(n_cur, 2);
- level = gen_int(n_level, 3);
- format = gen_int(n_format, 4);
-
- ret_val = xmlNodeDump(buf, doc, cur, level, format);
- desret_int(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_cur, cur, 2);
- des_int(n_level, level, 3);
- des_int(n_format, format, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf(" %d", n_level);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeDumpOutput(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr cur; /* the current node */
- int n_cur;
- int level; /* the imbrication level for indenting */
- int n_level;
- int format; /* is formatting allowed */
- int n_format;
- char * encoding; /* an optional encoding string */
- int n_encoding;
-
- for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_level = 0;n_level < gen_nb_int;n_level++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlOutputBufferPtr(n_buf, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- cur = gen_xmlNodePtr(n_cur, 2);
- level = gen_int(n_level, 3);
- format = gen_int(n_format, 4);
- encoding = gen_const_char_ptr(n_encoding, 5);
-
- xmlNodeDumpOutput(buf, doc, cur, level, format, (const char *)encoding);
- call_tests++;
- des_xmlOutputBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_cur, cur, 2);
- des_int(n_level, level, 3);
- des_int(n_format, format, 4);
- des_const_char_ptr(n_encoding, (const char *)encoding, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeDumpOutput",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf(" %d", n_level);
- printf(" %d", n_format);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeGetBase(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlDoc * doc; /* the document the node pertains to */
- int n_doc;
- xmlNode * cur; /* the node being checked */
- int n_cur;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
- cur = gen_const_xmlNode_ptr(n_cur, 1);
-
- ret_val = xmlNodeGetBase((const xmlDoc *)doc, (const xmlNode *)cur);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeGetBase",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeGetContent(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlNode * cur; /* the node being read */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlNode_ptr(n_cur, 0);
-
- ret_val = xmlNodeGetContent((const xmlNode *)cur);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeGetContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeGetLang(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlNode * cur; /* the node being checked */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlNode_ptr(n_cur, 0);
-
- ret_val = xmlNodeGetLang((const xmlNode *)cur);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeGetLang",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeGetSpacePreserve(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlNode * cur; /* the node being checked */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlNode_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlNode_ptr(n_cur, 0);
-
- ret_val = xmlNodeGetSpacePreserve((const xmlNode *)cur);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_cur, (const xmlNode *)cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeGetSpacePreserve",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeIsText(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlNode * node; /* the node */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_const_xmlNode_ptr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_const_xmlNode_ptr(n_node, 0);
-
- ret_val = xmlNodeIsText((const xmlNode *)node);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlNode_ptr(n_node, (const xmlNode *)node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeIsText",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeListGetRawString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlDoc * doc; /* the document */
- int n_doc;
- xmlNode * list; /* a Node list */
- int n_list;
- int inLine; /* should we replace entity contents or show their external form */
- int n_inLine;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- for (n_list = 0;n_list < gen_nb_const_xmlNode_ptr;n_list++) {
- for (n_inLine = 0;n_inLine < gen_nb_int;n_inLine++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
- list = gen_const_xmlNode_ptr(n_list, 1);
- inLine = gen_int(n_inLine, 2);
-
- ret_val = xmlNodeListGetRawString((const xmlDoc *)doc, (const xmlNode *)list, inLine);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- des_const_xmlNode_ptr(n_list, (const xmlNode *)list, 1);
- des_int(n_inLine, inLine, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeListGetRawString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_list);
- printf(" %d", n_inLine);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeListGetString(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNode * list; /* a Node list */
- int n_list;
- int inLine; /* should we replace entity contents or show their external form */
- int n_inLine;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_list = 0;n_list < gen_nb_const_xmlNode_ptr;n_list++) {
- for (n_inLine = 0;n_inLine < gen_nb_int;n_inLine++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- list = gen_const_xmlNode_ptr(n_list, 1);
- inLine = gen_int(n_inLine, 2);
-
- ret_val = xmlNodeListGetString(doc, (const xmlNode *)list, inLine);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlNode_ptr(n_list, (const xmlNode *)list, 1);
- des_int(n_inLine, inLine, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeListGetString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_list);
- printf(" %d", n_inLine);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeSetBase(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- xmlNodePtr cur; /* the node being changed */
- int n_cur;
- xmlChar * uri; /* the new base URI */
- int n_uri;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_uri = 0;n_uri < gen_nb_const_xmlChar_ptr;n_uri++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- uri = gen_const_xmlChar_ptr(n_uri, 1);
-
- xmlNodeSetBase(cur, (const xmlChar *)uri);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_const_xmlChar_ptr(n_uri, (const xmlChar *)uri, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeSetBase",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_uri);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeSetContent(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr cur; /* the node being modified */
- int n_cur;
- xmlChar * content; /* the new value of the content */
- int n_content;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- xmlNodeSetContent(cur, (const xmlChar *)content);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeSetContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeSetContentLen(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr cur; /* the node being modified */
- int n_cur;
- xmlChar * content; /* the new value of the content */
- int n_content;
- int len; /* the size of @content */
- int n_len;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
- len = gen_int(n_len, 2);
- if ((content != NULL) &&
- (len > (int) strlen((const char *) content) + 1))
- continue;
-
- xmlNodeSetContentLen(cur, (const xmlChar *)content, len);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeSetContentLen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_content);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeSetLang(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr cur; /* the node being changed */
- int n_cur;
- xmlChar * lang; /* the language description */
- int n_lang;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_lang = 0;n_lang < gen_nb_const_xmlChar_ptr;n_lang++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- lang = gen_const_xmlChar_ptr(n_lang, 1);
-
- xmlNodeSetLang(cur, (const xmlChar *)lang);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_const_xmlChar_ptr(n_lang, (const xmlChar *)lang, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeSetLang",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_lang);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeSetName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr cur; /* the node being changed */
- int n_cur;
- xmlChar * name; /* the new tag name */
- int n_name;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- xmlNodeSetName(cur, (const xmlChar *)name);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeSetName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNodeSetSpacePreserve(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr cur; /* the node being changed */
- int n_cur;
- int val; /* the xml:space value ("0": default, 1: "preserve") */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodePtr(n_cur, 0);
- val = gen_int(n_val, 1);
-
- xmlNodeSetSpacePreserve(cur, val);
- call_tests++;
- des_xmlNodePtr(n_cur, cur, 0);
- des_int(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNodeSetSpacePreserve",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPreviousElementSibling(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr node; /* the current node */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
-
- ret_val = xmlPreviousElementSibling(node);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPreviousElementSibling",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReconciliateNs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr tree; /* a node defining the subtree to reconciliate */
- int n_tree;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- tree = gen_xmlNodePtr(n_tree, 1);
-
- ret_val = xmlReconciliateNs(doc, tree);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr(n_tree, tree, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReconciliateNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_tree);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRemoveProp(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlAttrPtr cur; /* an attribute */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_xmlAttrPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlAttrPtr(n_cur, 0);
-
- ret_val = xmlRemoveProp(cur);
- cur = NULL;
- desret_int(ret_val);
- call_tests++;
- des_xmlAttrPtr(n_cur, cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRemoveProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReplaceNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr old; /* the old node */
- int n_old;
- xmlNodePtr cur; /* the node */
- int n_cur;
-
- for (n_old = 0;n_old < gen_nb_xmlNodePtr;n_old++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr_in;n_cur++) {
- mem_base = xmlMemBlocks();
- old = gen_xmlNodePtr(n_old, 0);
- cur = gen_xmlNodePtr_in(n_cur, 1);
-
- ret_val = xmlReplaceNode(old, cur);
- if (cur != NULL) {
- xmlUnlinkNode(cur);
- xmlFreeNode(cur) ; cur = NULL ; }
- if (old != NULL) {
- xmlUnlinkNode(old);
- xmlFreeNode(old) ; old = NULL ; }
- ret_val = NULL;
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_old, old, 0);
- des_xmlNodePtr_in(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReplaceNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_old);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the filename (or URL) */
- int n_filename;
- xmlDocPtr cur; /* the document */
- int n_cur;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
-
- ret_val = xmlSaveFile(filename, cur);
- desret_int(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveFileEnc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the filename (or URL) */
- int n_filename;
- xmlDocPtr cur; /* the document */
- int n_cur;
- char * encoding; /* the name of an encoding (or NULL) */
- int n_encoding;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
-
- ret_val = xmlSaveFileEnc(filename, cur, (const char *)encoding);
- desret_int(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveFileEnc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveFileTo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlOutputBufferPtr buf; /* an output I/O buffer */
- int n_buf;
- xmlDocPtr cur; /* the document */
- int n_cur;
- char * encoding; /* the encoding if any assuming the I/O layer handles the trancoding */
- int n_encoding;
-
- for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlOutputBufferPtr(n_buf, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
-
- ret_val = xmlSaveFileTo(buf, cur, (const char *)encoding);
- buf = NULL;
- desret_int(ret_val);
- call_tests++;
- des_xmlOutputBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveFileTo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveFormatFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the filename (or URL) */
- int n_filename;
- xmlDocPtr cur; /* the document */
- int n_cur;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- format = gen_int(n_format, 2);
-
- ret_val = xmlSaveFormatFile(filename, cur, format);
- desret_int(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_int(n_format, format, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveFormatFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_cur);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveFormatFileEnc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the filename or URL to output */
- int n_filename;
- xmlDocPtr cur; /* the document being saved */
- int n_cur;
- char * encoding; /* the name of the encoding to use or NULL. */
- int n_encoding;
- int format; /* should formatting spaces be added. */
- int n_format;
-
- for (n_filename = 0;n_filename < gen_nb_fileoutput;n_filename++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- filename = gen_fileoutput(n_filename, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- format = gen_int(n_format, 3);
-
- ret_val = xmlSaveFormatFileEnc(filename, cur, (const char *)encoding, format);
- desret_int(ret_val);
- call_tests++;
- des_fileoutput(n_filename, filename, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_int(n_format, format, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveFormatFileEnc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveFormatFileTo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlOutputBufferPtr buf; /* an output I/O buffer */
- int n_buf;
- xmlDocPtr cur; /* the document */
- int n_cur;
- char * encoding; /* the encoding if any assuming the I/O layer handles the trancoding */
- int n_encoding;
- int format; /* should formatting spaces been added */
- int n_format;
-
- for (n_buf = 0;n_buf < gen_nb_xmlOutputBufferPtr;n_buf++) {
- for (n_cur = 0;n_cur < gen_nb_xmlDocPtr;n_cur++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_format = 0;n_format < gen_nb_int;n_format++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlOutputBufferPtr(n_buf, 0);
- cur = gen_xmlDocPtr(n_cur, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- format = gen_int(n_format, 3);
-
- ret_val = xmlSaveFormatFileTo(buf, cur, (const char *)encoding, format);
- buf = NULL;
- desret_int(ret_val);
- call_tests++;
- des_xmlOutputBufferPtr(n_buf, buf, 0);
- des_xmlDocPtr(n_cur, cur, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_int(n_format, format, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveFormatFileTo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_cur);
- printf(" %d", n_encoding);
- printf(" %d", n_format);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSearchNs(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNsPtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr node; /* the current node */
- int n_node;
- xmlChar * nameSpace; /* the namespace prefix */
- int n_nameSpace;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_nameSpace = 0;n_nameSpace < gen_nb_const_xmlChar_ptr;n_nameSpace++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- node = gen_xmlNodePtr(n_node, 1);
- nameSpace = gen_const_xmlChar_ptr(n_nameSpace, 2);
-
- ret_val = xmlSearchNs(doc, node, (const xmlChar *)nameSpace);
- desret_xmlNsPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr(n_node, node, 1);
- des_const_xmlChar_ptr(n_nameSpace, (const xmlChar *)nameSpace, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSearchNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_node);
- printf(" %d", n_nameSpace);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSearchNsByHref(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNsPtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr node; /* the current node */
- int n_node;
- xmlChar * href; /* the namespace value */
- int n_href;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_href = 0;n_href < gen_nb_const_xmlChar_ptr;n_href++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- node = gen_xmlNodePtr(n_node, 1);
- href = gen_const_xmlChar_ptr(n_href, 2);
-
- ret_val = xmlSearchNsByHref(doc, node, (const xmlChar *)href);
- desret_xmlNsPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr(n_node, node, 1);
- des_const_xmlChar_ptr(n_href, (const xmlChar *)href, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSearchNsByHref",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_node);
- printf(" %d", n_href);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetBufferAllocationScheme(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlBufferAllocationScheme scheme; /* allocation method to use */
- int n_scheme;
-
- for (n_scheme = 0;n_scheme < gen_nb_xmlBufferAllocationScheme;n_scheme++) {
- mem_base = xmlMemBlocks();
- scheme = gen_xmlBufferAllocationScheme(n_scheme, 0);
-
- xmlSetBufferAllocationScheme(scheme);
- call_tests++;
- des_xmlBufferAllocationScheme(n_scheme, scheme, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSetBufferAllocationScheme",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_scheme);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetCompressMode(void) {
- int test_ret = 0;
-
- int mem_base;
- int mode; /* the compression ratio */
- int n_mode;
-
- for (n_mode = 0;n_mode < gen_nb_int;n_mode++) {
- mem_base = xmlMemBlocks();
- mode = gen_int(n_mode, 0);
-
- xmlSetCompressMode(mode);
- call_tests++;
- des_int(n_mode, mode, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSetCompressMode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_mode);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetDocCompressMode(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlDocPtr doc; /* the document */
- int n_doc;
- int mode; /* the compression ratio */
- int n_mode;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_mode = 0;n_mode < gen_nb_int;n_mode++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- mode = gen_int(n_mode, 1);
-
- xmlSetDocCompressMode(doc, mode);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_int(n_mode, mode, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSetDocCompressMode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_mode);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetNs(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr node; /* a node in the document */
- int n_node;
- xmlNsPtr ns; /* a namespace pointer */
- int n_ns;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
-
- xmlSetNs(node, ns);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSetNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_ns);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetNsProp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNodePtr node; /* the node */
- int n_node;
- xmlNsPtr ns; /* the namespace definition */
- int n_ns;
- xmlChar * name; /* the attribute name */
- int n_name;
- xmlChar * value; /* the attribute value */
- int n_value;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- value = gen_const_xmlChar_ptr(n_value, 3);
-
- ret_val = xmlSetNsProp(node, ns, (const xmlChar *)name, (const xmlChar *)value);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSetNsProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetProp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
- int mem_base;
- xmlAttrPtr ret_val;
- xmlNodePtr node; /* the node */
- int n_node;
- xmlChar * name; /* the attribute name (a QName) */
- int n_name;
- xmlChar * value; /* the attribute value */
- int n_value;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- value = gen_const_xmlChar_ptr(n_value, 2);
-
- ret_val = xmlSetProp(node, (const xmlChar *)name, (const xmlChar *)value);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSetProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSplitQName2(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * name; /* the full QName */
- int n_name;
- xmlChar ** prefix; /* a xmlChar ** */
- int n_prefix;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_prefix = 0;n_prefix < gen_nb_xmlChar_ptr_ptr;n_prefix++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
- prefix = gen_xmlChar_ptr_ptr(n_prefix, 1);
-
- ret_val = xmlSplitQName2((const xmlChar *)name, prefix);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- des_xmlChar_ptr_ptr(n_prefix, prefix, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSplitQName2",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf(" %d", n_prefix);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSplitQName3(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlChar * name; /* the full QName */
- int n_name;
- int * len; /* an int * */
- int n_len;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
- len = gen_int_ptr(n_len, 1);
-
- ret_val = xmlSplitQName3((const xmlChar *)name, len);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- des_int_ptr(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSplitQName3",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStringGetNodeList(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDoc * doc; /* the document */
- int n_doc;
- xmlChar * value; /* the value of the attribute */
- int n_value;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
-
- ret_val = xmlStringGetNodeList((const xmlDoc *)doc, (const xmlChar *)value);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStringGetNodeList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStringLenGetNodeList(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlDoc * doc; /* the document */
- int n_doc;
- xmlChar * value; /* the value of the text */
- int n_value;
- int len; /* the length of the string value */
- int n_len;
-
- for (n_doc = 0;n_doc < gen_nb_const_xmlDoc_ptr;n_doc++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- doc = gen_const_xmlDoc_ptr(n_doc, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
- len = gen_int(n_len, 2);
- if ((value != NULL) &&
- (len > (int) strlen((const char *) value) + 1))
- continue;
-
- ret_val = xmlStringLenGetNodeList((const xmlDoc *)doc, (const xmlChar *)value, len);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_const_xmlDoc_ptr(n_doc, (const xmlDoc *)doc, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStringLenGetNodeList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_value);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextConcat(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlNodePtr node; /* the node */
- int n_node;
- xmlChar * content; /* the content */
- int n_content;
- int len; /* @content length */
- int n_len;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
- len = gen_int(n_len, 2);
- if ((content != NULL) &&
- (len > (int) strlen((const char *) content) + 1))
- continue;
-
- ret_val = xmlTextConcat(node, (const xmlChar *)content, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextConcat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_content);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextMerge(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlNodePtr ret_val;
- xmlNodePtr first; /* the first text node */
- int n_first;
- xmlNodePtr second; /* the second text node being merged */
- int n_second;
-
- for (n_first = 0;n_first < gen_nb_xmlNodePtr_in;n_first++) {
- for (n_second = 0;n_second < gen_nb_xmlNodePtr_in;n_second++) {
- mem_base = xmlMemBlocks();
- first = gen_xmlNodePtr_in(n_first, 0);
- second = gen_xmlNodePtr_in(n_second, 1);
-
- ret_val = xmlTextMerge(first, second);
- if ((first != NULL) && (first->type != XML_TEXT_NODE)) {
- xmlUnlinkNode(second);
- xmlFreeNode(second) ; second = NULL ; }
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlNodePtr_in(n_first, first, 0);
- des_xmlNodePtr_in(n_second, second, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextMerge",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_first);
- printf(" %d", n_second);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUnsetNsProp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodePtr node; /* the node */
- int n_node;
- xmlNsPtr ns; /* the namespace definition */
- int n_ns;
- xmlChar * name; /* the attribute name */
- int n_name;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- ns = gen_xmlNsPtr(n_ns, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
-
- ret_val = xmlUnsetNsProp(node, ns, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_xmlNsPtr(n_ns, ns, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUnsetNsProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_ns);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUnsetProp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodePtr node; /* the node */
- int n_node;
- xmlChar * name; /* the attribute name */
- int n_name;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlUnsetProp(node, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUnsetProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateNCName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- int ret_val;
- xmlChar * value; /* the value to check */
- int n_value;
- int space; /* allow spaces in front and end of the string */
- int n_space;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_space = 0;n_space < gen_nb_int;n_space++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
- space = gen_int(n_space, 1);
-
- ret_val = xmlValidateNCName((const xmlChar *)value, space);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- des_int(n_space, space, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateNCName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf(" %d", n_space);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateNMToken(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- int ret_val;
- xmlChar * value; /* the value to check */
- int n_value;
- int space; /* allow spaces in front and end of the string */
- int n_space;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_space = 0;n_space < gen_nb_int;n_space++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
- space = gen_int(n_space, 1);
-
- ret_val = xmlValidateNMToken((const xmlChar *)value, space);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- des_int(n_space, space, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateNMToken",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf(" %d", n_space);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- int ret_val;
- xmlChar * value; /* the value to check */
- int n_value;
- int space; /* allow spaces in front and end of the string */
- int n_space;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_space = 0;n_space < gen_nb_int;n_space++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
- space = gen_int(n_space, 1);
-
- ret_val = xmlValidateName((const xmlChar *)value, space);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- des_int(n_space, space, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf(" %d", n_space);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateQName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-#ifdef LIBXML_TREE_ENABLED
- int mem_base;
- int ret_val;
- xmlChar * value; /* the value to check */
- int n_value;
- int space; /* allow spaces in front and end of the string */
- int n_space;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_space = 0;n_space < gen_nb_int;n_space++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
- space = gen_int(n_space, 1);
-
- ret_val = xmlValidateQName((const xmlChar *)value, space);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- des_int(n_space, space, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateQName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf(" %d", n_space);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-static int
-test_tree(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing tree : 142 of 164 functions ...\n");
- test_ret += test_xmlAddChild();
- test_ret += test_xmlAddChildList();
- test_ret += test_xmlAddNextSibling();
- test_ret += test_xmlAddPrevSibling();
- test_ret += test_xmlAddSibling();
- test_ret += test_xmlAttrSerializeTxtContent();
- test_ret += test_xmlBufContent();
- test_ret += test_xmlBufEnd();
- test_ret += test_xmlBufGetNodeContent();
- test_ret += test_xmlBufNodeDump();
- test_ret += test_xmlBufShrink();
- test_ret += test_xmlBufUse();
- test_ret += test_xmlBufferAdd();
- test_ret += test_xmlBufferAddHead();
- test_ret += test_xmlBufferCCat();
- test_ret += test_xmlBufferCat();
- test_ret += test_xmlBufferContent();
- test_ret += test_xmlBufferCreate();
- test_ret += test_xmlBufferCreateSize();
- test_ret += test_xmlBufferCreateStatic();
- test_ret += test_xmlBufferDetach();
- test_ret += test_xmlBufferEmpty();
- test_ret += test_xmlBufferGrow();
- test_ret += test_xmlBufferLength();
- test_ret += test_xmlBufferResize();
- test_ret += test_xmlBufferSetAllocationScheme();
- test_ret += test_xmlBufferShrink();
- test_ret += test_xmlBufferWriteCHAR();
- test_ret += test_xmlBufferWriteChar();
- test_ret += test_xmlBufferWriteQuotedString();
- test_ret += test_xmlBuildQName();
- test_ret += test_xmlChildElementCount();
- test_ret += test_xmlCopyDoc();
- test_ret += test_xmlCopyDtd();
- test_ret += test_xmlCopyNamespace();
- test_ret += test_xmlCopyNamespaceList();
- test_ret += test_xmlCopyNode();
- test_ret += test_xmlCopyNodeList();
- test_ret += test_xmlCopyProp();
- test_ret += test_xmlCopyPropList();
- test_ret += test_xmlCreateIntSubset();
- test_ret += test_xmlDOMWrapAdoptNode();
- test_ret += test_xmlDOMWrapCloneNode();
- test_ret += test_xmlDOMWrapNewCtxt();
- test_ret += test_xmlDOMWrapReconcileNamespaces();
- test_ret += test_xmlDOMWrapRemoveNode();
- test_ret += test_xmlDocCopyNode();
- test_ret += test_xmlDocCopyNodeList();
- test_ret += test_xmlDocDump();
- test_ret += test_xmlDocDumpFormatMemory();
- test_ret += test_xmlDocDumpFormatMemoryEnc();
- test_ret += test_xmlDocDumpMemory();
- test_ret += test_xmlDocDumpMemoryEnc();
- test_ret += test_xmlDocFormatDump();
- test_ret += test_xmlDocGetRootElement();
- test_ret += test_xmlDocSetRootElement();
- test_ret += test_xmlElemDump();
- test_ret += test_xmlFirstElementChild();
- test_ret += test_xmlGetBufferAllocationScheme();
- test_ret += test_xmlGetCompressMode();
- test_ret += test_xmlGetDocCompressMode();
- test_ret += test_xmlGetIntSubset();
- test_ret += test_xmlGetLastChild();
- test_ret += test_xmlGetLineNo();
- test_ret += test_xmlGetNoNsProp();
- test_ret += test_xmlGetNodePath();
- test_ret += test_xmlGetNsList();
- test_ret += test_xmlGetNsProp();
- test_ret += test_xmlGetProp();
- test_ret += test_xmlHasNsProp();
- test_ret += test_xmlHasProp();
- test_ret += test_xmlIsBlankNode();
- test_ret += test_xmlIsXHTML();
- test_ret += test_xmlLastElementChild();
- test_ret += test_xmlNewCDataBlock();
- test_ret += test_xmlNewCharRef();
- test_ret += test_xmlNewChild();
- test_ret += test_xmlNewComment();
- test_ret += test_xmlNewDoc();
- test_ret += test_xmlNewDocComment();
- test_ret += test_xmlNewDocFragment();
- test_ret += test_xmlNewDocNode();
- test_ret += test_xmlNewDocNodeEatName();
- test_ret += test_xmlNewDocPI();
- test_ret += test_xmlNewDocProp();
- test_ret += test_xmlNewDocRawNode();
- test_ret += test_xmlNewDocText();
- test_ret += test_xmlNewDocTextLen();
- test_ret += test_xmlNewDtd();
- test_ret += test_xmlNewNode();
- test_ret += test_xmlNewNodeEatName();
- test_ret += test_xmlNewNs();
- test_ret += test_xmlNewNsProp();
- test_ret += test_xmlNewNsPropEatName();
- test_ret += test_xmlNewPI();
- test_ret += test_xmlNewProp();
- test_ret += test_xmlNewReference();
- test_ret += test_xmlNewText();
- test_ret += test_xmlNewTextChild();
- test_ret += test_xmlNewTextLen();
- test_ret += test_xmlNextElementSibling();
- test_ret += test_xmlNodeAddContent();
- test_ret += test_xmlNodeAddContentLen();
- test_ret += test_xmlNodeBufGetContent();
- test_ret += test_xmlNodeDump();
- test_ret += test_xmlNodeDumpOutput();
- test_ret += test_xmlNodeGetBase();
- test_ret += test_xmlNodeGetContent();
- test_ret += test_xmlNodeGetLang();
- test_ret += test_xmlNodeGetSpacePreserve();
- test_ret += test_xmlNodeIsText();
- test_ret += test_xmlNodeListGetRawString();
- test_ret += test_xmlNodeListGetString();
- test_ret += test_xmlNodeSetBase();
- test_ret += test_xmlNodeSetContent();
- test_ret += test_xmlNodeSetContentLen();
- test_ret += test_xmlNodeSetLang();
- test_ret += test_xmlNodeSetName();
- test_ret += test_xmlNodeSetSpacePreserve();
- test_ret += test_xmlPreviousElementSibling();
- test_ret += test_xmlReconciliateNs();
- test_ret += test_xmlRemoveProp();
- test_ret += test_xmlReplaceNode();
- test_ret += test_xmlSaveFile();
- test_ret += test_xmlSaveFileEnc();
- test_ret += test_xmlSaveFileTo();
- test_ret += test_xmlSaveFormatFile();
- test_ret += test_xmlSaveFormatFileEnc();
- test_ret += test_xmlSaveFormatFileTo();
- test_ret += test_xmlSearchNs();
- test_ret += test_xmlSearchNsByHref();
- test_ret += test_xmlSetBufferAllocationScheme();
- test_ret += test_xmlSetCompressMode();
- test_ret += test_xmlSetDocCompressMode();
- test_ret += test_xmlSetNs();
- test_ret += test_xmlSetNsProp();
- test_ret += test_xmlSetProp();
- test_ret += test_xmlSplitQName2();
- test_ret += test_xmlSplitQName3();
- test_ret += test_xmlStringGetNodeList();
- test_ret += test_xmlStringLenGetNodeList();
- test_ret += test_xmlTextConcat();
- test_ret += test_xmlTextMerge();
- test_ret += test_xmlUnsetNsProp();
- test_ret += test_xmlUnsetProp();
- test_ret += test_xmlValidateNCName();
- test_ret += test_xmlValidateNMToken();
- test_ret += test_xmlValidateName();
- test_ret += test_xmlValidateQName();
-
- if (test_ret != 0)
- printf("Module tree: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlBuildRelativeURI(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * URI; /* the URI reference under consideration */
- int n_URI;
- xmlChar * base; /* the base value */
- int n_base;
-
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- for (n_base = 0;n_base < gen_nb_const_xmlChar_ptr;n_base++) {
- mem_base = xmlMemBlocks();
- URI = gen_const_xmlChar_ptr(n_URI, 0);
- base = gen_const_xmlChar_ptr(n_base, 1);
-
- ret_val = xmlBuildRelativeURI((const xmlChar *)URI, (const xmlChar *)base);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0);
- des_const_xmlChar_ptr(n_base, (const xmlChar *)base, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBuildRelativeURI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URI);
- printf(" %d", n_base);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlBuildURI(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * URI; /* the URI instance found in the document */
- int n_URI;
- xmlChar * base; /* the base value */
- int n_base;
-
- for (n_URI = 0;n_URI < gen_nb_const_xmlChar_ptr;n_URI++) {
- for (n_base = 0;n_base < gen_nb_const_xmlChar_ptr;n_base++) {
- mem_base = xmlMemBlocks();
- URI = gen_const_xmlChar_ptr(n_URI, 0);
- base = gen_const_xmlChar_ptr(n_base, 1);
-
- ret_val = xmlBuildURI((const xmlChar *)URI, (const xmlChar *)base);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_URI, (const xmlChar *)URI, 0);
- des_const_xmlChar_ptr(n_base, (const xmlChar *)base, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlBuildURI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URI);
- printf(" %d", n_base);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCanonicPath(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * path; /* the resource locator in a filesystem notation */
- int n_path;
-
- for (n_path = 0;n_path < gen_nb_const_xmlChar_ptr;n_path++) {
- mem_base = xmlMemBlocks();
- path = gen_const_xmlChar_ptr(n_path, 0);
-
- ret_val = xmlCanonicPath((const xmlChar *)path);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_path, (const xmlChar *)path, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCanonicPath",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_path);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateURI(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlNormalizeURIPath(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- char * path; /* pointer to the path string */
- int n_path;
-
- for (n_path = 0;n_path < gen_nb_char_ptr;n_path++) {
- mem_base = xmlMemBlocks();
- path = gen_char_ptr(n_path, 0);
-
- ret_val = xmlNormalizeURIPath(path);
- desret_int(ret_val);
- call_tests++;
- des_char_ptr(n_path, path, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNormalizeURIPath",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_path);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParseURI(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlParseURIRaw(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-#define gen_nb_xmlURIPtr 1
-static xmlURIPtr gen_xmlURIPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlURIPtr(int no ATTRIBUTE_UNUSED, xmlURIPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlParseURIReference(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlURIPtr uri; /* pointer to an URI structure */
- int n_uri;
- char * str; /* the string to analyze */
- int n_str;
-
- for (n_uri = 0;n_uri < gen_nb_xmlURIPtr;n_uri++) {
- for (n_str = 0;n_str < gen_nb_const_char_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- uri = gen_xmlURIPtr(n_uri, 0);
- str = gen_const_char_ptr(n_str, 1);
-
- ret_val = xmlParseURIReference(uri, (const char *)str);
- desret_int(ret_val);
- call_tests++;
- des_xmlURIPtr(n_uri, uri, 0);
- des_const_char_ptr(n_str, (const char *)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParseURIReference",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_uri);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPathToURI(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * path; /* the resource locator in a filesystem notation */
- int n_path;
-
- for (n_path = 0;n_path < gen_nb_const_xmlChar_ptr;n_path++) {
- mem_base = xmlMemBlocks();
- path = gen_const_xmlChar_ptr(n_path, 0);
-
- ret_val = xmlPathToURI((const xmlChar *)path);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_path, (const xmlChar *)path, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPathToURI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_path);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPrintURI(void) {
- int test_ret = 0;
-
- int mem_base;
- FILE * stream; /* a FILE* for the output */
- int n_stream;
- xmlURIPtr uri; /* pointer to an xmlURI */
- int n_uri;
-
- for (n_stream = 0;n_stream < gen_nb_FILE_ptr;n_stream++) {
- for (n_uri = 0;n_uri < gen_nb_xmlURIPtr;n_uri++) {
- mem_base = xmlMemBlocks();
- stream = gen_FILE_ptr(n_stream, 0);
- uri = gen_xmlURIPtr(n_uri, 1);
-
- xmlPrintURI(stream, uri);
- call_tests++;
- des_FILE_ptr(n_stream, stream, 0);
- des_xmlURIPtr(n_uri, uri, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPrintURI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_stream);
- printf(" %d", n_uri);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveUri(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlURIPtr uri; /* pointer to an xmlURI */
- int n_uri;
-
- for (n_uri = 0;n_uri < gen_nb_xmlURIPtr;n_uri++) {
- mem_base = xmlMemBlocks();
- uri = gen_xmlURIPtr(n_uri, 0);
-
- ret_val = xmlSaveUri(uri);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlURIPtr(n_uri, uri, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveUri",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_uri);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlURIEscape(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * str; /* the string of the URI to escape */
- int n_str;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
-
- ret_val = xmlURIEscape((const xmlChar *)str);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlURIEscape",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlURIEscapeStr(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * str; /* string to escape */
- int n_str;
- xmlChar * list; /* exception list string of chars not to escape */
- int n_list;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_list = 0;n_list < gen_nb_const_xmlChar_ptr;n_list++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
- list = gen_const_xmlChar_ptr(n_list, 1);
-
- ret_val = xmlURIEscapeStr((const xmlChar *)str, (const xmlChar *)list);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- des_const_xmlChar_ptr(n_list, (const xmlChar *)list, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlURIEscapeStr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf(" %d", n_list);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlURIUnescapeString(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-static int
-test_uri(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing uri : 10 of 15 functions ...\n");
- test_ret += test_xmlBuildRelativeURI();
- test_ret += test_xmlBuildURI();
- test_ret += test_xmlCanonicPath();
- test_ret += test_xmlCreateURI();
- test_ret += test_xmlNormalizeURIPath();
- test_ret += test_xmlParseURI();
- test_ret += test_xmlParseURIRaw();
- test_ret += test_xmlParseURIReference();
- test_ret += test_xmlPathToURI();
- test_ret += test_xmlPrintURI();
- test_ret += test_xmlSaveUri();
- test_ret += test_xmlURIEscape();
- test_ret += test_xmlURIEscapeStr();
- test_ret += test_xmlURIUnescapeString();
-
- if (test_ret != 0)
- printf("Module uri: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlAddAttributeDecl(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttributePtr ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDtdPtr dtd; /* pointer to the DTD */
- int n_dtd;
- xmlChar * elem; /* the element name */
- int n_elem;
- xmlChar * name; /* the attribute name */
- int n_name;
- xmlChar * ns; /* the attribute namespace prefix */
- int n_ns;
- xmlAttributeType type; /* the attribute type */
- int n_type;
- xmlAttributeDefault def; /* the attribute default type */
- int n_def;
- xmlChar * defaultValue; /* the attribute default value */
- int n_defaultValue;
- xmlEnumerationPtr tree; /* if it's an enumeration, the associated list */
- int n_tree;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- for (n_elem = 0;n_elem < gen_nb_const_xmlChar_ptr;n_elem++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) {
- for (n_type = 0;n_type < gen_nb_xmlAttributeType;n_type++) {
- for (n_def = 0;n_def < gen_nb_xmlAttributeDefault;n_def++) {
- for (n_defaultValue = 0;n_defaultValue < gen_nb_const_xmlChar_ptr;n_defaultValue++) {
- for (n_tree = 0;n_tree < gen_nb_xmlEnumerationPtr;n_tree++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- dtd = gen_xmlDtdPtr(n_dtd, 1);
- elem = gen_const_xmlChar_ptr(n_elem, 2);
- name = gen_const_xmlChar_ptr(n_name, 3);
- ns = gen_const_xmlChar_ptr(n_ns, 4);
- type = gen_xmlAttributeType(n_type, 5);
- def = gen_xmlAttributeDefault(n_def, 6);
- defaultValue = gen_const_xmlChar_ptr(n_defaultValue, 7);
- tree = gen_xmlEnumerationPtr(n_tree, 8);
-
- ret_val = xmlAddAttributeDecl(ctxt, dtd, (const xmlChar *)elem, (const xmlChar *)name, (const xmlChar *)ns, type, def, (const xmlChar *)defaultValue, tree);
- desret_xmlAttributePtr(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDtdPtr(n_dtd, dtd, 1);
- des_const_xmlChar_ptr(n_elem, (const xmlChar *)elem, 2);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 3);
- des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 4);
- des_xmlAttributeType(n_type, type, 5);
- des_xmlAttributeDefault(n_def, def, 6);
- des_const_xmlChar_ptr(n_defaultValue, (const xmlChar *)defaultValue, 7);
- des_xmlEnumerationPtr(n_tree, tree, 8);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddAttributeDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_dtd);
- printf(" %d", n_elem);
- printf(" %d", n_name);
- printf(" %d", n_ns);
- printf(" %d", n_type);
- printf(" %d", n_def);
- printf(" %d", n_defaultValue);
- printf(" %d", n_tree);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAddElementDecl(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlElementPtr ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDtdPtr dtd; /* pointer to the DTD */
- int n_dtd;
- xmlChar * name; /* the entity name */
- int n_name;
- xmlElementTypeVal type; /* the element type */
- int n_type;
- xmlElementContentPtr content; /* the element content tree or NULL */
- int n_content;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_type = 0;n_type < gen_nb_xmlElementTypeVal;n_type++) {
- for (n_content = 0;n_content < gen_nb_xmlElementContentPtr;n_content++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- dtd = gen_xmlDtdPtr(n_dtd, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- type = gen_xmlElementTypeVal(n_type, 3);
- content = gen_xmlElementContentPtr(n_content, 4);
-
- ret_val = xmlAddElementDecl(ctxt, dtd, (const xmlChar *)name, type, content);
- desret_xmlElementPtr(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDtdPtr(n_dtd, dtd, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_xmlElementTypeVal(n_type, type, 3);
- des_xmlElementContentPtr(n_content, content, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAddElementDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_dtd);
- printf(" %d", n_name);
- printf(" %d", n_type);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAddID(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAddNotationDecl(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAddRef(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-#define gen_nb_xmlAttributeTablePtr 1
-static xmlAttributeTablePtr gen_xmlAttributeTablePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlAttributeTablePtr(int no ATTRIBUTE_UNUSED, xmlAttributeTablePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlCopyAttributeTable(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyDocElementContent(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlElementContentPtr ret_val;
- xmlDocPtr doc; /* the document owning the element declaration */
- int n_doc;
- xmlElementContentPtr cur; /* An element content pointer. */
- int n_cur;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_cur = 0;n_cur < gen_nb_xmlElementContentPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- cur = gen_xmlElementContentPtr(n_cur, 1);
-
- ret_val = xmlCopyDocElementContent(doc, cur);
- desret_xmlElementContentPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlElementContentPtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyDocElementContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyElementContent(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlElementContentPtr ret_val;
- xmlElementContentPtr cur; /* An element content pointer. */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_xmlElementContentPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlElementContentPtr(n_cur, 0);
-
- ret_val = xmlCopyElementContent(cur);
- desret_xmlElementContentPtr(ret_val);
- call_tests++;
- des_xmlElementContentPtr(n_cur, cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyElementContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlElementTablePtr 1
-static xmlElementTablePtr gen_xmlElementTablePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlElementTablePtr(int no ATTRIBUTE_UNUSED, xmlElementTablePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlCopyElementTable(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlCopyEnumeration(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-#define gen_nb_xmlNotationTablePtr 1
-static xmlNotationTablePtr gen_xmlNotationTablePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlNotationTablePtr(int no ATTRIBUTE_UNUSED, xmlNotationTablePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlCopyNotationTable(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlCreateEnumeration(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-#define gen_nb_xmlAttributePtr 1
-static xmlAttributePtr gen_xmlAttributePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlAttributePtr(int no ATTRIBUTE_UNUSED, xmlAttributePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlDumpAttributeDecl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlAttributePtr attr; /* An attribute declaration */
- int n_attr;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttributePtr;n_attr++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- attr = gen_xmlAttributePtr(n_attr, 1);
-
- xmlDumpAttributeDecl(buf, attr);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlAttributePtr(n_attr, attr, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDumpAttributeDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_attr);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDumpAttributeTable(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlAttributeTablePtr table; /* An attribute table */
- int n_table;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_table = 0;n_table < gen_nb_xmlAttributeTablePtr;n_table++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- table = gen_xmlAttributeTablePtr(n_table, 1);
-
- xmlDumpAttributeTable(buf, table);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlAttributeTablePtr(n_table, table, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDumpAttributeTable",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_table);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlElementPtr 1
-static xmlElementPtr gen_xmlElementPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlElementPtr(int no ATTRIBUTE_UNUSED, xmlElementPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlDumpElementDecl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlElementPtr elem; /* An element table */
- int n_elem;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_elem = 0;n_elem < gen_nb_xmlElementPtr;n_elem++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- elem = gen_xmlElementPtr(n_elem, 1);
-
- xmlDumpElementDecl(buf, elem);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlElementPtr(n_elem, elem, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDumpElementDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDumpElementTable(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlElementTablePtr table; /* An element table */
- int n_table;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_table = 0;n_table < gen_nb_xmlElementTablePtr;n_table++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- table = gen_xmlElementTablePtr(n_table, 1);
-
- xmlDumpElementTable(buf, table);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlElementTablePtr(n_table, table, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDumpElementTable",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_table);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlNotationPtr 1
-static xmlNotationPtr gen_xmlNotationPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlNotationPtr(int no ATTRIBUTE_UNUSED, xmlNotationPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlDumpNotationDecl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlNotationPtr nota; /* A notation declaration */
- int n_nota;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_nota = 0;n_nota < gen_nb_xmlNotationPtr;n_nota++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- nota = gen_xmlNotationPtr(n_nota, 1);
-
- xmlDumpNotationDecl(buf, nota);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlNotationPtr(n_nota, nota, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDumpNotationDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_nota);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlDumpNotationTable(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* the XML buffer output */
- int n_buf;
- xmlNotationTablePtr table; /* A notation table */
- int n_table;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_table = 0;n_table < gen_nb_xmlNotationTablePtr;n_table++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- table = gen_xmlNotationTablePtr(n_table, 1);
-
- xmlDumpNotationTable(buf, table);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlNotationTablePtr(n_table, table, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlDumpNotationTable",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_table);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetDtdAttrDesc(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttributePtr ret_val;
- xmlDtdPtr dtd; /* a pointer to the DtD to search */
- int n_dtd;
- xmlChar * elem; /* the element name */
- int n_elem;
- xmlChar * name; /* the attribute name */
- int n_name;
-
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- for (n_elem = 0;n_elem < gen_nb_const_xmlChar_ptr;n_elem++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- dtd = gen_xmlDtdPtr(n_dtd, 0);
- elem = gen_const_xmlChar_ptr(n_elem, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
-
- ret_val = xmlGetDtdAttrDesc(dtd, (const xmlChar *)elem, (const xmlChar *)name);
- desret_xmlAttributePtr(ret_val);
- call_tests++;
- des_xmlDtdPtr(n_dtd, dtd, 0);
- des_const_xmlChar_ptr(n_elem, (const xmlChar *)elem, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetDtdAttrDesc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dtd);
- printf(" %d", n_elem);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetDtdElementDesc(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlElementPtr ret_val;
- xmlDtdPtr dtd; /* a pointer to the DtD to search */
- int n_dtd;
- xmlChar * name; /* the element name */
- int n_name;
-
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- dtd = gen_xmlDtdPtr(n_dtd, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlGetDtdElementDesc(dtd, (const xmlChar *)name);
- desret_xmlElementPtr(ret_val);
- call_tests++;
- des_xmlDtdPtr(n_dtd, dtd, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetDtdElementDesc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dtd);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetDtdNotationDesc(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlGetDtdQAttrDesc(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttributePtr ret_val;
- xmlDtdPtr dtd; /* a pointer to the DtD to search */
- int n_dtd;
- xmlChar * elem; /* the element name */
- int n_elem;
- xmlChar * name; /* the attribute name */
- int n_name;
- xmlChar * prefix; /* the attribute namespace prefix */
- int n_prefix;
-
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- for (n_elem = 0;n_elem < gen_nb_const_xmlChar_ptr;n_elem++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- mem_base = xmlMemBlocks();
- dtd = gen_xmlDtdPtr(n_dtd, 0);
- elem = gen_const_xmlChar_ptr(n_elem, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- prefix = gen_const_xmlChar_ptr(n_prefix, 3);
-
- ret_val = xmlGetDtdQAttrDesc(dtd, (const xmlChar *)elem, (const xmlChar *)name, (const xmlChar *)prefix);
- desret_xmlAttributePtr(ret_val);
- call_tests++;
- des_xmlDtdPtr(n_dtd, dtd, 0);
- des_const_xmlChar_ptr(n_elem, (const xmlChar *)elem, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetDtdQAttrDesc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dtd);
- printf(" %d", n_elem);
- printf(" %d", n_name);
- printf(" %d", n_prefix);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetDtdQElementDesc(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlElementPtr ret_val;
- xmlDtdPtr dtd; /* a pointer to the DtD to search */
- int n_dtd;
- xmlChar * name; /* the element name */
- int n_name;
- xmlChar * prefix; /* the element namespace prefix */
- int n_prefix;
-
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- mem_base = xmlMemBlocks();
- dtd = gen_xmlDtdPtr(n_dtd, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- prefix = gen_const_xmlChar_ptr(n_prefix, 2);
-
- ret_val = xmlGetDtdQElementDesc(dtd, (const xmlChar *)name, (const xmlChar *)prefix);
- desret_xmlElementPtr(ret_val);
- call_tests++;
- des_xmlDtdPtr(n_dtd, dtd, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetDtdQElementDesc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_dtd);
- printf(" %d", n_name);
- printf(" %d", n_prefix);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetID(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlAttrPtr ret_val;
- xmlDocPtr doc; /* pointer to the document */
- int n_doc;
- xmlChar * ID; /* the ID value */
- int n_ID;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_ID = 0;n_ID < gen_nb_const_xmlChar_ptr;n_ID++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- ID = gen_const_xmlChar_ptr(n_ID, 1);
-
- ret_val = xmlGetID(doc, (const xmlChar *)ID);
- desret_xmlAttrPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_ID, (const xmlChar *)ID, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetID",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_ID);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetRefs(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlIsID(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr elem; /* the element carrying the attribute */
- int n_elem;
- xmlAttrPtr attr; /* the attribute */
- int n_attr;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- elem = gen_xmlNodePtr(n_elem, 1);
- attr = gen_xmlAttrPtr(n_attr, 2);
-
- ret_val = xmlIsID(doc, elem, attr);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr(n_elem, elem, 1);
- des_xmlAttrPtr(n_attr, attr, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsID",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf(" %d", n_attr);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsMixedElement(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * name; /* the element name */
- int n_name;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlIsMixedElement(doc, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsMixedElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIsRef(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr elem; /* the element carrying the attribute */
- int n_elem;
- xmlAttrPtr attr; /* the attribute */
- int n_attr;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- elem = gen_xmlNodePtr(n_elem, 1);
- attr = gen_xmlAttrPtr(n_attr, 2);
-
- ret_val = xmlIsRef(doc, elem, attr);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr(n_elem, elem, 1);
- des_xmlAttrPtr(n_attr, attr, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIsRef",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf(" %d", n_attr);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewDocElementContent(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlElementContentPtr ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * name; /* the subelement name or NULL */
- int n_name;
- xmlElementContentType type; /* the type of element content decl */
- int n_type;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_type = 0;n_type < gen_nb_xmlElementContentType;n_type++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- type = gen_xmlElementContentType(n_type, 2);
-
- ret_val = xmlNewDocElementContent(doc, (const xmlChar *)name, type);
- xmlFreeDocElementContent(doc, ret_val); ret_val = NULL;
- desret_xmlElementContentPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_xmlElementContentType(n_type, type, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewDocElementContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_name);
- printf(" %d", n_type);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewElementContent(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlElementContentPtr ret_val;
- xmlChar * name; /* the subelement name or NULL */
- int n_name;
- xmlElementContentType type; /* the type of element content decl */
- int n_type;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_type = 0;n_type < gen_nb_xmlElementContentType;n_type++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
- type = gen_xmlElementContentType(n_type, 1);
-
- ret_val = xmlNewElementContent((const xmlChar *)name, type);
- desret_xmlElementContentPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- des_xmlElementContentType(n_type, type, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewElementContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf(" %d", n_type);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewValidCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRemoveID(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlAttrPtr attr; /* the attribute */
- int n_attr;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- attr = gen_xmlAttrPtr(n_attr, 1);
-
- ret_val = xmlRemoveID(doc, attr);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlAttrPtr(n_attr, attr, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRemoveID",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_attr);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRemoveRef(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlAttrPtr attr; /* the attribute */
- int n_attr;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- attr = gen_xmlAttrPtr(n_attr, 1);
-
- ret_val = xmlRemoveRef(doc, attr);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlAttrPtr(n_attr, attr, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRemoveRef",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_attr);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSnprintfElementContent(void) {
- int test_ret = 0;
-
- int mem_base;
- char * buf; /* an output buffer */
- int n_buf;
- int size; /* the buffer size */
- int n_size;
- xmlElementContentPtr content; /* An element table */
- int n_content;
- int englob; /* 1 if one must print the englobing parenthesis, 0 otherwise */
- int n_englob;
-
- for (n_buf = 0;n_buf < gen_nb_char_ptr;n_buf++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_content = 0;n_content < gen_nb_xmlElementContentPtr;n_content++) {
- for (n_englob = 0;n_englob < gen_nb_int;n_englob++) {
- mem_base = xmlMemBlocks();
- buf = gen_char_ptr(n_buf, 0);
- size = gen_int(n_size, 1);
- content = gen_xmlElementContentPtr(n_content, 2);
- englob = gen_int(n_englob, 3);
-
- xmlSnprintfElementContent(buf, size, content, englob);
- call_tests++;
- des_char_ptr(n_buf, buf, 0);
- des_int(n_size, size, 1);
- des_xmlElementContentPtr(n_content, content, 2);
- des_int(n_englob, englob, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSnprintfElementContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_size);
- printf(" %d", n_content);
- printf(" %d", n_englob);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSprintfElementContent(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
-#ifdef LIBXML_OUTPUT_ENABLED
- int mem_base;
- char * buf; /* an output buffer */
- int n_buf;
- xmlElementContentPtr content; /* An element table */
- int n_content;
- int englob; /* 1 if one must print the englobing parenthesis, 0 otherwise */
- int n_englob;
-
- for (n_buf = 0;n_buf < gen_nb_char_ptr;n_buf++) {
- for (n_content = 0;n_content < gen_nb_xmlElementContentPtr;n_content++) {
- for (n_englob = 0;n_englob < gen_nb_int;n_englob++) {
- mem_base = xmlMemBlocks();
- buf = gen_char_ptr(n_buf, 0);
- content = gen_xmlElementContentPtr(n_content, 1);
- englob = gen_int(n_englob, 2);
-
- xmlSprintfElementContent(buf, content, englob);
- call_tests++;
- des_char_ptr(n_buf, buf, 0);
- des_xmlElementContentPtr(n_content, content, 1);
- des_int(n_englob, englob, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSprintfElementContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_content);
- printf(" %d", n_englob);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidBuildContentModel(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* a validation context */
- int n_ctxt;
- xmlElementPtr elem; /* an element declaration node */
- int n_elem;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_elem = 0;n_elem < gen_nb_xmlElementPtr;n_elem++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- elem = gen_xmlElementPtr(n_elem, 1);
-
- ret_val = xmlValidBuildContentModel(ctxt, elem);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlElementPtr(n_elem, elem, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidBuildContentModel",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidCtxtNormalizeAttributeValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context or NULL */
- int n_ctxt;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr elem; /* the parent */
- int n_elem;
- xmlChar * name; /* the attribute name */
- int n_name;
- xmlChar * value; /* the attribute value */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
- name = gen_const_xmlChar_ptr(n_name, 3);
- value = gen_const_xmlChar_ptr(n_value, 4);
-
- ret_val = xmlValidCtxtNormalizeAttributeValue(ctxt, doc, elem, (const xmlChar *)name, (const xmlChar *)value);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 3);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidCtxtNormalizeAttributeValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlElementContent_ptr 1
-static xmlElementContent * gen_xmlElementContent_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlElementContent_ptr(int no ATTRIBUTE_UNUSED, xmlElementContent * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlValidGetPotentialChildren(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef LIBXML_VALID_ENABLED
- int mem_base;
- int ret_val;
- xmlElementContent * ctree; /* an element content tree */
- int n_ctree;
- xmlChar ** names; /* an array to store the list of child names */
- int n_names;
- int * len; /* a pointer to the number of element in the list */
- int n_len;
- int max; /* the size of the array */
- int n_max;
-
- for (n_ctree = 0;n_ctree < gen_nb_xmlElementContent_ptr;n_ctree++) {
- for (n_names = 0;n_names < gen_nb_const_xmlChar_ptr_ptr;n_names++) {
- for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) {
- for (n_max = 0;n_max < gen_nb_int;n_max++) {
- mem_base = xmlMemBlocks();
- ctree = gen_xmlElementContent_ptr(n_ctree, 0);
- names = gen_const_xmlChar_ptr_ptr(n_names, 1);
- len = gen_int_ptr(n_len, 2);
- max = gen_int(n_max, 3);
-
- ret_val = xmlValidGetPotentialChildren(ctree, (const xmlChar **)names, len, max);
- desret_int(ret_val);
- call_tests++;
- des_xmlElementContent_ptr(n_ctree, ctree, 0);
- des_const_xmlChar_ptr_ptr(n_names, (const xmlChar **)names, 1);
- des_int_ptr(n_len, len, 2);
- des_int(n_max, max, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidGetPotentialChildren",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctree);
- printf(" %d", n_names);
- printf(" %d", n_len);
- printf(" %d", n_max);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidGetValidElements(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
-#ifdef LIBXML_VALID_ENABLED
- int mem_base;
- int ret_val;
- xmlNode * prev; /* an element to insert after */
- int n_prev;
- xmlNode * next; /* an element to insert next */
- int n_next;
- xmlChar ** names; /* an array to store the list of child names */
- int n_names;
- int max; /* the size of the array */
- int n_max;
-
- for (n_prev = 0;n_prev < gen_nb_xmlNodePtr;n_prev++) {
- for (n_next = 0;n_next < gen_nb_xmlNodePtr;n_next++) {
- for (n_names = 0;n_names < gen_nb_const_xmlChar_ptr_ptr;n_names++) {
- for (n_max = 0;n_max < gen_nb_int;n_max++) {
- mem_base = xmlMemBlocks();
- prev = gen_xmlNodePtr(n_prev, 0);
- next = gen_xmlNodePtr(n_next, 1);
- names = gen_const_xmlChar_ptr_ptr(n_names, 2);
- max = gen_int(n_max, 3);
-
- ret_val = xmlValidGetValidElements(prev, next, (const xmlChar **)names, max);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_prev, prev, 0);
- des_xmlNodePtr(n_next, next, 1);
- des_const_xmlChar_ptr_ptr(n_names, (const xmlChar **)names, 2);
- des_int(n_max, max, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidGetValidElements",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_prev);
- printf(" %d", n_next);
- printf(" %d", n_names);
- printf(" %d", n_max);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidNormalizeAttributeValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlNodePtr elem; /* the parent */
- int n_elem;
- xmlChar * name; /* the attribute name */
- int n_name;
- xmlChar * value; /* the attribute value */
- int n_value;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- elem = gen_xmlNodePtr(n_elem, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- value = gen_const_xmlChar_ptr(n_value, 3);
-
- ret_val = xmlValidNormalizeAttributeValue(doc, elem, (const xmlChar *)name, (const xmlChar *)value);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr(n_elem, elem, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidNormalizeAttributeValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateAttributeDecl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlAttributePtr attr; /* an attribute definition */
- int n_attr;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttributePtr;n_attr++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- attr = gen_xmlAttributePtr(n_attr, 2);
-
- ret_val = xmlValidateAttributeDecl(ctxt, doc, attr);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlAttributePtr(n_attr, attr, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateAttributeDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_attr);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateAttributeValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlAttributeType type; /* an attribute type */
- int n_type;
- xmlChar * value; /* an attribute value */
- int n_value;
-
- for (n_type = 0;n_type < gen_nb_xmlAttributeType;n_type++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- type = gen_xmlAttributeType(n_type, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
-
- ret_val = xmlValidateAttributeValue(type, (const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_xmlAttributeType(n_type, type, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateAttributeValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_type);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateDocument(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlValidateDocument(ctxt, doc);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateDocumentFinal(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlValidateDocumentFinal(ctxt, doc);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateDocumentFinal",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateDtd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlDtdPtr dtd; /* a dtd instance */
- int n_dtd;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_dtd = 0;n_dtd < gen_nb_xmlDtdPtr;n_dtd++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- dtd = gen_xmlDtdPtr(n_dtd, 2);
-
- ret_val = xmlValidateDtd(ctxt, doc, dtd);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlDtdPtr(n_dtd, dtd, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateDtd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_dtd);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateDtdFinal(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlValidateDtdFinal(ctxt, doc);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateDtdFinal",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
-
- ret_val = xmlValidateElement(ctxt, doc, elem);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateElementDecl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlElementPtr elem; /* an element definition */
- int n_elem;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlElementPtr;n_elem++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlElementPtr(n_elem, 2);
-
- ret_val = xmlValidateElementDecl(ctxt, doc, elem);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlElementPtr(n_elem, elem, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateElementDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateNameValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * value; /* an Name value */
- int n_value;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
-
- ret_val = xmlValidateNameValue((const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateNameValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateNamesValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * value; /* an Names value */
- int n_value;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
-
- ret_val = xmlValidateNamesValue((const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateNamesValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateNmtokenValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * value; /* an Nmtoken value */
- int n_value;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
-
- ret_val = xmlValidateNmtokenValue((const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateNmtokenValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateNmtokensValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * value; /* an Nmtokens value */
- int n_value;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
-
- ret_val = xmlValidateNmtokensValue((const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateNmtokensValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateNotationDecl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNotationPtr nota; /* a notation definition */
- int n_nota;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_nota = 0;n_nota < gen_nb_xmlNotationPtr;n_nota++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- nota = gen_xmlNotationPtr(n_nota, 2);
-
- ret_val = xmlValidateNotationDecl(ctxt, doc, nota);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNotationPtr(n_nota, nota, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateNotationDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_nota);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateNotationUse(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* the document */
- int n_doc;
- xmlChar * notationName; /* the notation name to check */
- int n_notationName;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_notationName = 0;n_notationName < gen_nb_const_xmlChar_ptr;n_notationName++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- notationName = gen_const_xmlChar_ptr(n_notationName, 2);
-
- ret_val = xmlValidateNotationUse(ctxt, doc, (const xmlChar *)notationName);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_const_xmlChar_ptr(n_notationName, (const xmlChar *)notationName, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateNotationUse",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_notationName);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateOneAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
- xmlAttrPtr attr; /* an attribute instance */
- int n_attr;
- xmlChar * value; /* the attribute value (without entities processing) */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_attr = 0;n_attr < gen_nb_xmlAttrPtr;n_attr++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
- attr = gen_xmlAttrPtr(n_attr, 3);
- value = gen_const_xmlChar_ptr(n_value, 4);
-
- ret_val = xmlValidateOneAttribute(ctxt, doc, elem, attr, (const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- des_xmlAttrPtr(n_attr, attr, 3);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateOneAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf(" %d", n_attr);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateOneElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
-
- ret_val = xmlValidateOneElement(ctxt, doc, elem);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateOneElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateOneNamespace(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
- xmlChar * prefix; /* the namespace prefix */
- int n_prefix;
- xmlNsPtr ns; /* an namespace declaration instance */
- int n_ns;
- xmlChar * value; /* the attribute value (without entities processing) */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
- prefix = gen_const_xmlChar_ptr(n_prefix, 3);
- ns = gen_xmlNsPtr(n_ns, 4);
- value = gen_const_xmlChar_ptr(n_value, 5);
-
- ret_val = xmlValidateOneNamespace(ctxt, doc, elem, (const xmlChar *)prefix, ns, (const xmlChar *)value);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 3);
- des_xmlNsPtr(n_ns, ns, 4);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateOneNamespace",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf(" %d", n_prefix);
- printf(" %d", n_ns);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidatePopElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
- xmlChar * qname; /* the qualified name as appearing in the serialization */
- int n_qname;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_qname = 0;n_qname < gen_nb_const_xmlChar_ptr;n_qname++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
- qname = gen_const_xmlChar_ptr(n_qname, 3);
-
- ret_val = xmlValidatePopElement(ctxt, doc, elem, (const xmlChar *)qname);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- des_const_xmlChar_ptr(n_qname, (const xmlChar *)qname, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidatePopElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf(" %d", n_qname);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidatePushCData(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlChar * data; /* some character data read */
- int n_data;
- int len; /* the length of the data */
- int n_len;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_data = 0;n_data < gen_nb_const_xmlChar_ptr;n_data++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- data = gen_const_xmlChar_ptr(n_data, 1);
- len = gen_int(n_len, 2);
- if ((data != NULL) &&
- (len > (int) strlen((const char *) data) + 1))
- continue;
-
- ret_val = xmlValidatePushCData(ctxt, (const xmlChar *)data, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_data, (const xmlChar *)data, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidatePushCData",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_data);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidatePushElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED) && defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
- xmlNodePtr elem; /* an element instance */
- int n_elem;
- xmlChar * qname; /* the qualified name as appearing in the serialization */
- int n_qname;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- for (n_qname = 0;n_qname < gen_nb_const_xmlChar_ptr;n_qname++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
- elem = gen_xmlNodePtr(n_elem, 2);
- qname = gen_const_xmlChar_ptr(n_qname, 3);
-
- ret_val = xmlValidatePushElement(ctxt, doc, elem, (const xmlChar *)qname);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- des_xmlNodePtr(n_elem, elem, 2);
- des_const_xmlChar_ptr(n_qname, (const xmlChar *)qname, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidatePushElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf(" %d", n_elem);
- printf(" %d", n_qname);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlValidateRoot(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_VALID_ENABLED)
- int mem_base;
- int ret_val;
- xmlValidCtxtPtr ctxt; /* the validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a document instance */
- int n_doc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlValidateRoot(ctxt, doc);
- desret_int(ret_val);
- call_tests++;
- des_xmlValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlValidateRoot",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_valid(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing valid : 50 of 70 functions ...\n");
- test_ret += test_xmlAddAttributeDecl();
- test_ret += test_xmlAddElementDecl();
- test_ret += test_xmlAddID();
- test_ret += test_xmlAddNotationDecl();
- test_ret += test_xmlAddRef();
- test_ret += test_xmlCopyAttributeTable();
- test_ret += test_xmlCopyDocElementContent();
- test_ret += test_xmlCopyElementContent();
- test_ret += test_xmlCopyElementTable();
- test_ret += test_xmlCopyEnumeration();
- test_ret += test_xmlCopyNotationTable();
- test_ret += test_xmlCreateEnumeration();
- test_ret += test_xmlDumpAttributeDecl();
- test_ret += test_xmlDumpAttributeTable();
- test_ret += test_xmlDumpElementDecl();
- test_ret += test_xmlDumpElementTable();
- test_ret += test_xmlDumpNotationDecl();
- test_ret += test_xmlDumpNotationTable();
- test_ret += test_xmlGetDtdAttrDesc();
- test_ret += test_xmlGetDtdElementDesc();
- test_ret += test_xmlGetDtdNotationDesc();
- test_ret += test_xmlGetDtdQAttrDesc();
- test_ret += test_xmlGetDtdQElementDesc();
- test_ret += test_xmlGetID();
- test_ret += test_xmlGetRefs();
- test_ret += test_xmlIsID();
- test_ret += test_xmlIsMixedElement();
- test_ret += test_xmlIsRef();
- test_ret += test_xmlNewDocElementContent();
- test_ret += test_xmlNewElementContent();
- test_ret += test_xmlNewValidCtxt();
- test_ret += test_xmlRemoveID();
- test_ret += test_xmlRemoveRef();
- test_ret += test_xmlSnprintfElementContent();
- test_ret += test_xmlSprintfElementContent();
- test_ret += test_xmlValidBuildContentModel();
- test_ret += test_xmlValidCtxtNormalizeAttributeValue();
- test_ret += test_xmlValidGetPotentialChildren();
- test_ret += test_xmlValidGetValidElements();
- test_ret += test_xmlValidNormalizeAttributeValue();
- test_ret += test_xmlValidateAttributeDecl();
- test_ret += test_xmlValidateAttributeValue();
- test_ret += test_xmlValidateDocument();
- test_ret += test_xmlValidateDocumentFinal();
- test_ret += test_xmlValidateDtd();
- test_ret += test_xmlValidateDtdFinal();
- test_ret += test_xmlValidateElement();
- test_ret += test_xmlValidateElementDecl();
- test_ret += test_xmlValidateNameValue();
- test_ret += test_xmlValidateNamesValue();
- test_ret += test_xmlValidateNmtokenValue();
- test_ret += test_xmlValidateNmtokensValue();
- test_ret += test_xmlValidateNotationDecl();
- test_ret += test_xmlValidateNotationUse();
- test_ret += test_xmlValidateOneAttribute();
- test_ret += test_xmlValidateOneElement();
- test_ret += test_xmlValidateOneNamespace();
- test_ret += test_xmlValidatePopElement();
- test_ret += test_xmlValidatePushCData();
- test_ret += test_xmlValidatePushElement();
- test_ret += test_xmlValidateRoot();
-
- if (test_ret != 0)
- printf("Module valid: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlXIncludeNewContext(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXIncludeProcess(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* an XML document */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
-
- ret_val = xmlXIncludeProcess(doc);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXIncludeProcess",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXIncludeProcessFlags(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* an XML document */
- int n_doc;
- int flags; /* a set of xmlParserOption used for parsing XML includes */
- int n_flags;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_flags = 0;n_flags < gen_nb_int;n_flags++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- flags = gen_int(n_flags, 1);
-
- ret_val = xmlXIncludeProcessFlags(doc, flags);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_int(n_flags, flags, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXIncludeProcessFlags",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_flags);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXIncludeProcessFlagsData(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- int ret_val;
- xmlDocPtr doc; /* an XML document */
- int n_doc;
- int flags; /* a set of xmlParserOption used for parsing XML includes */
- int n_flags;
- void * data; /* application data that will be passed to the parser context in the _private field of the parser context(s) */
- int n_data;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_flags = 0;n_flags < gen_nb_int;n_flags++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- flags = gen_int(n_flags, 1);
- data = gen_userdata(n_data, 2);
-
- ret_val = xmlXIncludeProcessFlagsData(doc, flags, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_int(n_flags, flags, 1);
- des_userdata(n_data, data, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXIncludeProcessFlagsData",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_flags);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_XINCLUDE_ENABLED
-
-#define gen_nb_xmlXIncludeCtxtPtr 1
-static xmlXIncludeCtxtPtr gen_xmlXIncludeCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlXIncludeCtxtPtr(int no ATTRIBUTE_UNUSED, xmlXIncludeCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlXIncludeProcessNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- int ret_val;
- xmlXIncludeCtxtPtr ctxt; /* an existing XInclude context */
- int n_ctxt;
- xmlNodePtr node; /* a node in an XML document */
- int n_node;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXIncludeCtxtPtr;n_ctxt++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXIncludeCtxtPtr(n_ctxt, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- ret_val = xmlXIncludeProcessNode(ctxt, node);
- desret_int(ret_val);
- call_tests++;
- des_xmlXIncludeCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXIncludeProcessNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXIncludeProcessTree(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodePtr tree; /* a node in an XML document */
- int n_tree;
-
- for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) {
- mem_base = xmlMemBlocks();
- tree = gen_xmlNodePtr(n_tree, 0);
-
- ret_val = xmlXIncludeProcessTree(tree);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_tree, tree, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXIncludeProcessTree",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_tree);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXIncludeProcessTreeFlags(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodePtr tree; /* a node in an XML document */
- int n_tree;
- int flags; /* a set of xmlParserOption used for parsing XML includes */
- int n_flags;
-
- for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) {
- for (n_flags = 0;n_flags < gen_nb_int;n_flags++) {
- mem_base = xmlMemBlocks();
- tree = gen_xmlNodePtr(n_tree, 0);
- flags = gen_int(n_flags, 1);
-
- ret_val = xmlXIncludeProcessTreeFlags(tree, flags);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_tree, tree, 0);
- des_int(n_flags, flags, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXIncludeProcessTreeFlags",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_tree);
- printf(" %d", n_flags);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXIncludeProcessTreeFlagsData(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodePtr tree; /* an XML node */
- int n_tree;
- int flags; /* a set of xmlParserOption used for parsing XML includes */
- int n_flags;
- void * data; /* application data that will be passed to the parser context in the _private field of the parser context(s) */
- int n_data;
-
- for (n_tree = 0;n_tree < gen_nb_xmlNodePtr;n_tree++) {
- for (n_flags = 0;n_flags < gen_nb_int;n_flags++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- tree = gen_xmlNodePtr(n_tree, 0);
- flags = gen_int(n_flags, 1);
- data = gen_userdata(n_data, 2);
-
- ret_val = xmlXIncludeProcessTreeFlagsData(tree, flags, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_tree, tree, 0);
- des_int(n_flags, flags, 1);
- des_userdata(n_data, data, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXIncludeProcessTreeFlagsData",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_tree);
- printf(" %d", n_flags);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXIncludeSetFlags(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XINCLUDE_ENABLED)
- int mem_base;
- int ret_val;
- xmlXIncludeCtxtPtr ctxt; /* an XInclude processing context */
- int n_ctxt;
- int flags; /* a set of xmlParserOption used for parsing XML includes */
- int n_flags;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXIncludeCtxtPtr;n_ctxt++) {
- for (n_flags = 0;n_flags < gen_nb_int;n_flags++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXIncludeCtxtPtr(n_ctxt, 0);
- flags = gen_int(n_flags, 1);
-
- ret_val = xmlXIncludeSetFlags(ctxt, flags);
- desret_int(ret_val);
- call_tests++;
- des_xmlXIncludeCtxtPtr(n_ctxt, ctxt, 0);
- des_int(n_flags, flags, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXIncludeSetFlags",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_flags);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xinclude(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xinclude : 8 of 10 functions ...\n");
- test_ret += test_xmlXIncludeNewContext();
- test_ret += test_xmlXIncludeProcess();
- test_ret += test_xmlXIncludeProcessFlags();
- test_ret += test_xmlXIncludeProcessFlagsData();
- test_ret += test_xmlXIncludeProcessNode();
- test_ret += test_xmlXIncludeProcessTree();
- test_ret += test_xmlXIncludeProcessTreeFlags();
- test_ret += test_xmlXIncludeProcessTreeFlagsData();
- test_ret += test_xmlXIncludeSetFlags();
-
- if (test_ret != 0)
- printf("Module xinclude: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlAllocOutputBuffer(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr ret_val;
- xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */
- int n_encoder;
-
- for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) {
- mem_base = xmlMemBlocks();
- encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 0);
-
- ret_val = xmlAllocOutputBuffer(encoder);
- desret_xmlOutputBufferPtr(ret_val);
- call_tests++;
- des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAllocOutputBuffer",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_encoder);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAllocParserInputBuffer(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputBufferPtr ret_val;
- xmlCharEncoding enc; /* the charset encoding if known */
- int n_enc;
-
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- enc = gen_xmlCharEncoding(n_enc, 0);
-
- ret_val = xmlAllocParserInputBuffer(enc);
- desret_xmlParserInputBufferPtr(ret_val);
- call_tests++;
- des_xmlCharEncoding(n_enc, enc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAllocParserInputBuffer",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCheckFilename(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- char * path; /* the path to check */
- int n_path;
-
- for (n_path = 0;n_path < gen_nb_const_char_ptr;n_path++) {
- mem_base = xmlMemBlocks();
- path = gen_const_char_ptr(n_path, 0);
-
- ret_val = xmlCheckFilename((const char *)path);
- desret_int(ret_val);
- call_tests++;
- des_const_char_ptr(n_path, (const char *)path, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCheckFilename",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_path);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCheckHTTPInput(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- xmlParserCtxtPtr ctxt; /* an XML parser context */
- int n_ctxt;
- xmlParserInputPtr ret; /* an XML parser input */
- int n_ret;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_ret = 0;n_ret < gen_nb_xmlParserInputPtr;n_ret++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- ret = gen_xmlParserInputPtr(n_ret, 1);
-
- ret_val = xmlCheckHTTPInput(ctxt, ret);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlParserInputPtr(n_ret, ret, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCheckHTTPInput",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_ret);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCleanupInputCallbacks(void) {
- int test_ret = 0;
-
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlCleanupInputCallbacks();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCleanupInputCallbacks",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCleanupOutputCallbacks(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlCleanupOutputCallbacks();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCleanupOutputCallbacks",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlFileClose(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- void * context; /* the I/O context */
- int n_context;
-
- for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) {
- mem_base = xmlMemBlocks();
- context = gen_void_ptr(n_context, 0);
-
- ret_val = xmlFileClose(context);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_context, context, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlFileClose",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_context);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlFileMatch(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- const char * filename; /* the URI for matching */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlFileMatch(filename);
- desret_int(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlFileMatch",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlFileOpen(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ret_val;
- const char * filename; /* the URI for matching */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlFileOpen(filename);
- desret_void_ptr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlFileOpen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlFileRead(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- void * context; /* the I/O context */
- int n_context;
- char * buffer; /* where to drop data */
- int n_buffer;
- int len; /* number of bytes to write */
- int n_len;
-
- for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) {
- for (n_buffer = 0;n_buffer < gen_nb_char_ptr;n_buffer++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- context = gen_void_ptr(n_context, 0);
- buffer = gen_char_ptr(n_buffer, 1);
- len = gen_int(n_len, 2);
-
- ret_val = xmlFileRead(context, buffer, len);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_context, context, 0);
- des_char_ptr(n_buffer, buffer, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlFileRead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_context);
- printf(" %d", n_buffer);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOFTPClose(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * context; /* the I/O context */
- int n_context;
-
- for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) {
- mem_base = xmlMemBlocks();
- context = gen_void_ptr(n_context, 0);
-
- ret_val = xmlIOFTPClose(context);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_context, context, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIOFTPClose",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_context);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOFTPMatch(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the URI for matching */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlIOFTPMatch(filename);
- desret_int(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIOFTPMatch",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOFTPOpen(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- void * ret_val;
- const char * filename; /* the URI for matching */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlIOFTPOpen(filename);
- desret_void_ptr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIOFTPOpen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOFTPRead(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_FTP_ENABLED)
- int mem_base;
- int ret_val;
- void * context; /* the I/O context */
- int n_context;
- char * buffer; /* where to drop data */
- int n_buffer;
- int len; /* number of bytes to write */
- int n_len;
-
- for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) {
- for (n_buffer = 0;n_buffer < gen_nb_char_ptr;n_buffer++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- context = gen_void_ptr(n_context, 0);
- buffer = gen_char_ptr(n_buffer, 1);
- len = gen_int(n_len, 2);
-
- ret_val = xmlIOFTPRead(context, buffer, len);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_context, context, 0);
- des_char_ptr(n_buffer, buffer, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIOFTPRead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_context);
- printf(" %d", n_buffer);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOHTTPClose(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- int ret_val;
- void * context; /* the I/O context */
- int n_context;
-
- for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) {
- mem_base = xmlMemBlocks();
- context = gen_void_ptr(n_context, 0);
-
- ret_val = xmlIOHTTPClose(context);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_context, context, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIOHTTPClose",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_context);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOHTTPMatch(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- int ret_val;
- const char * filename; /* the URI for matching */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlIOHTTPMatch(filename);
- desret_int(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIOHTTPMatch",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOHTTPOpen(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- void * ret_val;
- const char * filename; /* the URI for matching */
- int n_filename;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
-
- ret_val = xmlIOHTTPOpen(filename);
- desret_xmlNanoHTTPCtxtPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIOHTTPOpen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlIOHTTPRead(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_HTTP_ENABLED)
- int mem_base;
- int ret_val;
- void * context; /* the I/O context */
- int n_context;
- char * buffer; /* where to drop data */
- int n_buffer;
- int len; /* number of bytes to write */
- int n_len;
-
- for (n_context = 0;n_context < gen_nb_void_ptr;n_context++) {
- for (n_buffer = 0;n_buffer < gen_nb_char_ptr;n_buffer++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- context = gen_void_ptr(n_context, 0);
- buffer = gen_char_ptr(n_buffer, 1);
- len = gen_int(n_len, 2);
-
- ret_val = xmlIOHTTPRead(context, buffer, len);
- desret_int(ret_val);
- call_tests++;
- des_void_ptr(n_context, context, 0);
- des_char_ptr(n_buffer, buffer, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlIOHTTPRead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_context);
- printf(" %d", n_buffer);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNoNetExternalEntityLoader(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr ret_val;
- const char * URL; /* the URL for the entity to load */
- int n_URL;
- char * ID; /* the System ID for the entity to load */
- int n_ID;
- xmlParserCtxtPtr ctxt; /* the context in which the entity is called or NULL */
- int n_ctxt;
-
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_ID = 0;n_ID < gen_nb_const_char_ptr;n_ID++) {
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- URL = gen_filepath(n_URL, 0);
- ID = gen_const_char_ptr(n_ID, 1);
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 2);
-
- ret_val = xmlNoNetExternalEntityLoader(URL, (const char *)ID, ctxt);
- desret_xmlParserInputPtr(ret_val);
- call_tests++;
- des_filepath(n_URL, URL, 0);
- des_const_char_ptr(n_ID, (const char *)ID, 1);
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNoNetExternalEntityLoader",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf(" %d", n_ID);
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNormalizeWindowsPath(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * path; /* the input file path */
- int n_path;
-
- for (n_path = 0;n_path < gen_nb_const_xmlChar_ptr;n_path++) {
- mem_base = xmlMemBlocks();
- path = gen_const_xmlChar_ptr(n_path, 0);
-
- ret_val = xmlNormalizeWindowsPath((const xmlChar *)path);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_path, (const xmlChar *)path, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNormalizeWindowsPath",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_path);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferCreateBuffer(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr ret_val;
- xmlBufferPtr buffer; /* a xmlBufferPtr */
- int n_buffer;
- xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */
- int n_encoder;
-
- for (n_buffer = 0;n_buffer < gen_nb_xmlBufferPtr;n_buffer++) {
- for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) {
- mem_base = xmlMemBlocks();
- buffer = gen_xmlBufferPtr(n_buffer, 0);
- encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 1);
-
- ret_val = xmlOutputBufferCreateBuffer(buffer, encoder);
- desret_xmlOutputBufferPtr(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buffer, buffer, 0);
- des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlOutputBufferCreateBuffer",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_encoder);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferCreateFd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr ret_val;
- int fd; /* a file descriptor number */
- int n_fd;
- xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */
- int n_encoder;
-
- for (n_fd = 0;n_fd < gen_nb_int;n_fd++) {
- for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) {
- mem_base = xmlMemBlocks();
- fd = gen_int(n_fd, 0);
- encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 1);
-
- ret_val = xmlOutputBufferCreateFd(fd, encoder);
- desret_xmlOutputBufferPtr(ret_val);
- call_tests++;
- des_int(n_fd, fd, 0);
- des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlOutputBufferCreateFd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_fd);
- printf(" %d", n_encoder);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferCreateFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr ret_val;
- FILE * file; /* a FILE* */
- int n_file;
- xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */
- int n_encoder;
-
- for (n_file = 0;n_file < gen_nb_FILE_ptr;n_file++) {
- for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) {
- mem_base = xmlMemBlocks();
- file = gen_FILE_ptr(n_file, 0);
- encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 1);
-
- ret_val = xmlOutputBufferCreateFile(file, encoder);
- desret_xmlOutputBufferPtr(ret_val);
- call_tests++;
- des_FILE_ptr(n_file, file, 0);
- des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlOutputBufferCreateFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_file);
- printf(" %d", n_encoder);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferCreateFilename(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- xmlOutputBufferPtr ret_val;
- const char * URI; /* a C string containing the URI or filename */
- int n_URI;
- xmlCharEncodingHandlerPtr encoder; /* the encoding converter or NULL */
- int n_encoder;
- int compression; /* the compression ration (0 none, 9 max). */
- int n_compression;
-
- for (n_URI = 0;n_URI < gen_nb_fileoutput;n_URI++) {
- for (n_encoder = 0;n_encoder < gen_nb_xmlCharEncodingHandlerPtr;n_encoder++) {
- for (n_compression = 0;n_compression < gen_nb_int;n_compression++) {
- mem_base = xmlMemBlocks();
- URI = gen_fileoutput(n_URI, 0);
- encoder = gen_xmlCharEncodingHandlerPtr(n_encoder, 1);
- compression = gen_int(n_compression, 2);
-
- ret_val = xmlOutputBufferCreateFilename(URI, encoder, compression);
- desret_xmlOutputBufferPtr(ret_val);
- call_tests++;
- des_fileoutput(n_URI, URI, 0);
- des_xmlCharEncodingHandlerPtr(n_encoder, encoder, 1);
- des_int(n_compression, compression, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlOutputBufferCreateFilename",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URI);
- printf(" %d", n_encoder);
- printf(" %d", n_compression);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferFlush(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlOutputBufferPtr out; /* a buffered output */
- int n_out;
-
- for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) {
- mem_base = xmlMemBlocks();
- out = gen_xmlOutputBufferPtr(n_out, 0);
-
- ret_val = xmlOutputBufferFlush(out);
- desret_int(ret_val);
- call_tests++;
- des_xmlOutputBufferPtr(n_out, out, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlOutputBufferFlush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferGetContent(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlOutputBufferPtr out; /* an xmlOutputBufferPtr */
- int n_out;
-
- for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) {
- mem_base = xmlMemBlocks();
- out = gen_xmlOutputBufferPtr(n_out, 0);
-
- ret_val = xmlOutputBufferGetContent(out);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlOutputBufferPtr(n_out, out, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlOutputBufferGetContent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferGetSize(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferWrite(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlOutputBufferPtr out; /* a buffered parser output */
- int n_out;
- int len; /* the size in bytes of the array. */
- int n_len;
- char * buf; /* an char array */
- int n_buf;
-
- for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- for (n_buf = 0;n_buf < gen_nb_const_char_ptr;n_buf++) {
- mem_base = xmlMemBlocks();
- out = gen_xmlOutputBufferPtr(n_out, 0);
- len = gen_int(n_len, 1);
- buf = gen_const_char_ptr(n_buf, 2);
- if ((buf != NULL) &&
- (len > (int) strlen((const char *) buf) + 1))
- continue;
-
- ret_val = xmlOutputBufferWrite(out, len, (const char *)buf);
- desret_int(ret_val);
- call_tests++;
- des_xmlOutputBufferPtr(n_out, out, 0);
- des_int(n_len, len, 1);
- des_const_char_ptr(n_buf, (const char *)buf, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlOutputBufferWrite",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_len);
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferWriteEscape(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlOutputBufferWriteString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlOutputBufferPtr out; /* a buffered parser output */
- int n_out;
- char * str; /* a zero terminated C string */
- int n_str;
-
- for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) {
- for (n_str = 0;n_str < gen_nb_const_char_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- out = gen_xmlOutputBufferPtr(n_out, 0);
- str = gen_const_char_ptr(n_str, 1);
-
- ret_val = xmlOutputBufferWriteString(out, (const char *)str);
- desret_int(ret_val);
- call_tests++;
- des_xmlOutputBufferPtr(n_out, out, 0);
- des_const_char_ptr(n_str, (const char *)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlOutputBufferWriteString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserGetDirectory(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputBufferCreateFd(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputBufferPtr ret_val;
- int fd; /* a file descriptor number */
- int n_fd;
- xmlCharEncoding enc; /* the charset encoding if known */
- int n_enc;
-
- for (n_fd = 0;n_fd < gen_nb_int;n_fd++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- fd = gen_int(n_fd, 0);
- enc = gen_xmlCharEncoding(n_enc, 1);
- if (fd >= 0) fd = -1;
-
- ret_val = xmlParserInputBufferCreateFd(fd, enc);
- desret_xmlParserInputBufferPtr(ret_val);
- call_tests++;
- des_int(n_fd, fd, 0);
- des_xmlCharEncoding(n_enc, enc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputBufferCreateFd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_fd);
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputBufferCreateFile(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputBufferPtr ret_val;
- FILE * file; /* a FILE* */
- int n_file;
- xmlCharEncoding enc; /* the charset encoding if known */
- int n_enc;
-
- for (n_file = 0;n_file < gen_nb_FILE_ptr;n_file++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- file = gen_FILE_ptr(n_file, 0);
- enc = gen_xmlCharEncoding(n_enc, 1);
-
- ret_val = xmlParserInputBufferCreateFile(file, enc);
- desret_xmlParserInputBufferPtr(ret_val);
- call_tests++;
- des_FILE_ptr(n_file, file, 0);
- des_xmlCharEncoding(n_enc, enc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputBufferCreateFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_file);
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputBufferCreateFilename(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputBufferPtr ret_val;
- const char * URI; /* a C string containing the URI or filename */
- int n_URI;
- xmlCharEncoding enc; /* the charset encoding if known */
- int n_enc;
-
- for (n_URI = 0;n_URI < gen_nb_fileoutput;n_URI++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- URI = gen_fileoutput(n_URI, 0);
- enc = gen_xmlCharEncoding(n_enc, 1);
-
- ret_val = xmlParserInputBufferCreateFilename(URI, enc);
- desret_xmlParserInputBufferPtr(ret_val);
- call_tests++;
- des_fileoutput(n_URI, URI, 0);
- des_xmlCharEncoding(n_enc, enc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputBufferCreateFilename",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URI);
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputBufferCreateMem(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputBufferPtr ret_val;
- char * mem; /* the memory input */
- int n_mem;
- int size; /* the length of the memory block */
- int n_size;
- xmlCharEncoding enc; /* the charset encoding if known */
- int n_enc;
-
- for (n_mem = 0;n_mem < gen_nb_const_char_ptr;n_mem++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- mem = gen_const_char_ptr(n_mem, 0);
- size = gen_int(n_size, 1);
- enc = gen_xmlCharEncoding(n_enc, 2);
- if ((mem != NULL) &&
- (size > (int) strlen((const char *) mem) + 1))
- continue;
-
- ret_val = xmlParserInputBufferCreateMem((const char *)mem, size, enc);
- desret_xmlParserInputBufferPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_mem, (const char *)mem, 0);
- des_int(n_size, size, 1);
- des_xmlCharEncoding(n_enc, enc, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputBufferCreateMem",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_mem);
- printf(" %d", n_size);
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputBufferCreateStatic(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputBufferPtr ret_val;
- char * mem; /* the memory input */
- int n_mem;
- int size; /* the length of the memory block */
- int n_size;
- xmlCharEncoding enc; /* the charset encoding if known */
- int n_enc;
-
- for (n_mem = 0;n_mem < gen_nb_const_char_ptr;n_mem++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- mem_base = xmlMemBlocks();
- mem = gen_const_char_ptr(n_mem, 0);
- size = gen_int(n_size, 1);
- enc = gen_xmlCharEncoding(n_enc, 2);
- if ((mem != NULL) &&
- (size > (int) strlen((const char *) mem) + 1))
- continue;
-
- ret_val = xmlParserInputBufferCreateStatic((const char *)mem, size, enc);
- desret_xmlParserInputBufferPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_mem, (const char *)mem, 0);
- des_int(n_size, size, 1);
- des_xmlCharEncoding(n_enc, enc, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputBufferCreateStatic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_mem);
- printf(" %d", n_size);
- printf(" %d", n_enc);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputBufferGrow(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserInputBufferPtr in; /* a buffered parser input */
- int n_in;
- int len; /* indicative value of the amount of chars to read */
- int n_len;
-
- for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- in = gen_xmlParserInputBufferPtr(n_in, 0);
- len = gen_int(n_len, 1);
-
- ret_val = xmlParserInputBufferGrow(in, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserInputBufferPtr(n_in, in, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputBufferGrow",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_in);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputBufferPush(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserInputBufferPtr in; /* a buffered parser input */
- int n_in;
- int len; /* the size in bytes of the array. */
- int n_len;
- char * buf; /* an char array */
- int n_buf;
-
- for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- for (n_buf = 0;n_buf < gen_nb_const_char_ptr;n_buf++) {
- mem_base = xmlMemBlocks();
- in = gen_xmlParserInputBufferPtr(n_in, 0);
- len = gen_int(n_len, 1);
- buf = gen_const_char_ptr(n_buf, 2);
- if ((buf != NULL) &&
- (len > (int) strlen((const char *) buf) + 1))
- continue;
-
- ret_val = xmlParserInputBufferPush(in, len, (const char *)buf);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserInputBufferPtr(n_in, in, 0);
- des_int(n_len, len, 1);
- des_const_char_ptr(n_buf, (const char *)buf, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputBufferPush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_in);
- printf(" %d", n_len);
- printf(" %d", n_buf);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserInputBufferRead(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlParserInputBufferPtr in; /* a buffered parser input */
- int n_in;
- int len; /* indicative value of the amount of chars to read */
- int n_len;
-
- for (n_in = 0;n_in < gen_nb_xmlParserInputBufferPtr;n_in++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- in = gen_xmlParserInputBufferPtr(n_in, 0);
- len = gen_int(n_len, 1);
-
- ret_val = xmlParserInputBufferRead(in, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlParserInputBufferPtr(n_in, in, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserInputBufferRead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_in);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlPopInputCallbacks(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
-
- mem_base = xmlMemBlocks();
-
- ret_val = xmlPopInputCallbacks();
- desret_int(ret_val);
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlPopInputCallbacks",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRegisterDefaultInputCallbacks(void) {
- int test_ret = 0;
-
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlRegisterDefaultInputCallbacks();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegisterDefaultInputCallbacks",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRegisterDefaultOutputCallbacks(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlRegisterDefaultOutputCallbacks();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegisterDefaultOutputCallbacks",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRegisterHTTPPostCallbacks(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED) && defined(LIBXML_HTTP_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlRegisterHTTPPostCallbacks();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegisterHTTPPostCallbacks",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xmlIO(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlIO : 40 of 50 functions ...\n");
- test_ret += test_xmlAllocOutputBuffer();
- test_ret += test_xmlAllocParserInputBuffer();
- test_ret += test_xmlCheckFilename();
- test_ret += test_xmlCheckHTTPInput();
- test_ret += test_xmlCleanupInputCallbacks();
- test_ret += test_xmlCleanupOutputCallbacks();
- test_ret += test_xmlFileClose();
- test_ret += test_xmlFileMatch();
- test_ret += test_xmlFileOpen();
- test_ret += test_xmlFileRead();
- test_ret += test_xmlIOFTPClose();
- test_ret += test_xmlIOFTPMatch();
- test_ret += test_xmlIOFTPOpen();
- test_ret += test_xmlIOFTPRead();
- test_ret += test_xmlIOHTTPClose();
- test_ret += test_xmlIOHTTPMatch();
- test_ret += test_xmlIOHTTPOpen();
- test_ret += test_xmlIOHTTPRead();
- test_ret += test_xmlNoNetExternalEntityLoader();
- test_ret += test_xmlNormalizeWindowsPath();
- test_ret += test_xmlOutputBufferCreateBuffer();
- test_ret += test_xmlOutputBufferCreateFd();
- test_ret += test_xmlOutputBufferCreateFile();
- test_ret += test_xmlOutputBufferCreateFilename();
- test_ret += test_xmlOutputBufferFlush();
- test_ret += test_xmlOutputBufferGetContent();
- test_ret += test_xmlOutputBufferGetSize();
- test_ret += test_xmlOutputBufferWrite();
- test_ret += test_xmlOutputBufferWriteEscape();
- test_ret += test_xmlOutputBufferWriteString();
- test_ret += test_xmlParserGetDirectory();
- test_ret += test_xmlParserInputBufferCreateFd();
- test_ret += test_xmlParserInputBufferCreateFile();
- test_ret += test_xmlParserInputBufferCreateFilename();
- test_ret += test_xmlParserInputBufferCreateMem();
- test_ret += test_xmlParserInputBufferCreateStatic();
- test_ret += test_xmlParserInputBufferGrow();
- test_ret += test_xmlParserInputBufferPush();
- test_ret += test_xmlParserInputBufferRead();
- test_ret += test_xmlPopInputCallbacks();
- test_ret += test_xmlRegisterDefaultInputCallbacks();
- test_ret += test_xmlRegisterDefaultOutputCallbacks();
- test_ret += test_xmlRegisterHTTPPostCallbacks();
-
- if (test_ret != 0)
- printf("Module xmlIO: %d errors\n", test_ret);
- return(test_ret);
-}
-#ifdef LIBXML_AUTOMATA_ENABLED
-
-#define gen_nb_xmlAutomataPtr 1
-static xmlAutomataPtr gen_xmlAutomataPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlAutomataPtr(int no ATTRIBUTE_UNUSED, xmlAutomataPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlAutomataCompile(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataGetInitState(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataIsDeterminist(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
- int mem_base;
- int ret_val;
- xmlAutomataPtr am; /* an automata */
- int n_am;
-
- for (n_am = 0;n_am < gen_nb_xmlAutomataPtr;n_am++) {
- mem_base = xmlMemBlocks();
- am = gen_xmlAutomataPtr(n_am, 0);
-
- ret_val = xmlAutomataIsDeterminist(am);
- desret_int(ret_val);
- call_tests++;
- des_xmlAutomataPtr(n_am, am, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAutomataIsDeterminist",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_am);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_AUTOMATA_ENABLED
-
-#define gen_nb_xmlAutomataStatePtr 1
-static xmlAutomataStatePtr gen_xmlAutomataStatePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlAutomataStatePtr(int no ATTRIBUTE_UNUSED, xmlAutomataStatePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlAutomataNewAllTrans(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewCountTrans(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewCountTrans2(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewCountedTrans(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewCounter(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
- int mem_base;
- int ret_val;
- xmlAutomataPtr am; /* an automata */
- int n_am;
- int min; /* the minimal value on the counter */
- int n_min;
- int max; /* the maximal value on the counter */
- int n_max;
-
- for (n_am = 0;n_am < gen_nb_xmlAutomataPtr;n_am++) {
- for (n_min = 0;n_min < gen_nb_int;n_min++) {
- for (n_max = 0;n_max < gen_nb_int;n_max++) {
- mem_base = xmlMemBlocks();
- am = gen_xmlAutomataPtr(n_am, 0);
- min = gen_int(n_min, 1);
- max = gen_int(n_max, 2);
-
- ret_val = xmlAutomataNewCounter(am, min, max);
- desret_int(ret_val);
- call_tests++;
- des_xmlAutomataPtr(n_am, am, 0);
- des_int(n_min, min, 1);
- des_int(n_max, max, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAutomataNewCounter",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_am);
- printf(" %d", n_min);
- printf(" %d", n_max);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewCounterTrans(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewEpsilon(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewNegTrans(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewOnceTrans(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewOnceTrans2(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewState(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewTransition(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataNewTransition2(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlAutomataSetFinalState(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_AUTOMATA_ENABLED)
- int mem_base;
- int ret_val;
- xmlAutomataPtr am; /* an automata */
- int n_am;
- xmlAutomataStatePtr state; /* a state in this automata */
- int n_state;
-
- for (n_am = 0;n_am < gen_nb_xmlAutomataPtr;n_am++) {
- for (n_state = 0;n_state < gen_nb_xmlAutomataStatePtr;n_state++) {
- mem_base = xmlMemBlocks();
- am = gen_xmlAutomataPtr(n_am, 0);
- state = gen_xmlAutomataStatePtr(n_state, 1);
-
- ret_val = xmlAutomataSetFinalState(am, state);
- desret_int(ret_val);
- call_tests++;
- des_xmlAutomataPtr(n_am, am, 0);
- des_xmlAutomataStatePtr(n_state, state, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlAutomataSetFinalState",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_am);
- printf(" %d", n_state);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewAutomata(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-static int
-test_xmlautomata(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlautomata : 3 of 19 functions ...\n");
- test_ret += test_xmlAutomataCompile();
- test_ret += test_xmlAutomataGetInitState();
- test_ret += test_xmlAutomataIsDeterminist();
- test_ret += test_xmlAutomataNewAllTrans();
- test_ret += test_xmlAutomataNewCountTrans();
- test_ret += test_xmlAutomataNewCountTrans2();
- test_ret += test_xmlAutomataNewCountedTrans();
- test_ret += test_xmlAutomataNewCounter();
- test_ret += test_xmlAutomataNewCounterTrans();
- test_ret += test_xmlAutomataNewEpsilon();
- test_ret += test_xmlAutomataNewNegTrans();
- test_ret += test_xmlAutomataNewOnceTrans();
- test_ret += test_xmlAutomataNewOnceTrans2();
- test_ret += test_xmlAutomataNewState();
- test_ret += test_xmlAutomataNewTransition();
- test_ret += test_xmlAutomataNewTransition2();
- test_ret += test_xmlAutomataSetFinalState();
- test_ret += test_xmlNewAutomata();
-
- if (test_ret != 0)
- printf("Module xmlautomata: %d errors\n", test_ret);
- return(test_ret);
-}
-
-#define gen_nb_xmlGenericErrorFunc_ptr 1
-static xmlGenericErrorFunc * gen_xmlGenericErrorFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlGenericErrorFunc_ptr(int no ATTRIBUTE_UNUSED, xmlGenericErrorFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_initGenericErrorDefaultFunc(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlGenericErrorFunc * handler; /* the handler */
- int n_handler;
-
- for (n_handler = 0;n_handler < gen_nb_xmlGenericErrorFunc_ptr;n_handler++) {
- mem_base = xmlMemBlocks();
- handler = gen_xmlGenericErrorFunc_ptr(n_handler, 0);
-
- initGenericErrorDefaultFunc(handler);
- call_tests++;
- des_xmlGenericErrorFunc_ptr(n_handler, handler, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in initGenericErrorDefaultFunc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_handler);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-#define gen_nb_xmlErrorPtr 1
-static xmlErrorPtr gen_xmlErrorPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlErrorPtr(int no ATTRIBUTE_UNUSED, xmlErrorPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-
-static int
-test_xmlCopyError(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlErrorPtr from; /* a source error */
- int n_from;
- xmlErrorPtr to; /* a target error */
- int n_to;
-
- for (n_from = 0;n_from < gen_nb_xmlErrorPtr;n_from++) {
- for (n_to = 0;n_to < gen_nb_xmlErrorPtr;n_to++) {
- mem_base = xmlMemBlocks();
- from = gen_xmlErrorPtr(n_from, 0);
- to = gen_xmlErrorPtr(n_to, 1);
-
- ret_val = xmlCopyError(from, to);
- desret_int(ret_val);
- call_tests++;
- des_xmlErrorPtr(n_from, from, 0);
- des_xmlErrorPtr(n_to, to, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCopyError",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_from);
- printf(" %d", n_to);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCtxtGetLastError(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlCtxtResetLastError(void) {
- int test_ret = 0;
-
- int mem_base;
- void * ctx; /* an XML parser context */
- int n_ctx;
-
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctx = gen_void_ptr(n_ctx, 0);
-
- xmlCtxtResetLastError(ctx);
- call_tests++;
- des_void_ptr(n_ctx, ctx, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCtxtResetLastError",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetLastError(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlParserError(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlParserPrintFileContext(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr input; /* an xmlParserInputPtr input */
- int n_input;
-
- for (n_input = 0;n_input < gen_nb_xmlParserInputPtr;n_input++) {
- mem_base = xmlMemBlocks();
- input = gen_xmlParserInputPtr(n_input, 0);
-
- xmlParserPrintFileContext(input);
- call_tests++;
- des_xmlParserInputPtr(n_input, input, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserPrintFileContext",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_input);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserPrintFileInfo(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlParserInputPtr input; /* an xmlParserInputPtr input */
- int n_input;
-
- for (n_input = 0;n_input < gen_nb_xmlParserInputPtr;n_input++) {
- mem_base = xmlMemBlocks();
- input = gen_xmlParserInputPtr(n_input, 0);
-
- xmlParserPrintFileInfo(input);
- call_tests++;
- des_xmlParserInputPtr(n_input, input, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlParserPrintFileInfo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_input);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlParserValidityError(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlParserValidityWarning(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlParserWarning(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlResetError(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlErrorPtr err; /* pointer to the error. */
- int n_err;
-
- for (n_err = 0;n_err < gen_nb_xmlErrorPtr;n_err++) {
- mem_base = xmlMemBlocks();
- err = gen_xmlErrorPtr(n_err, 0);
-
- xmlResetError(err);
- call_tests++;
- des_xmlErrorPtr(n_err, err, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlResetError",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_err);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlResetLastError(void) {
- int test_ret = 0;
-
-
-
- xmlResetLastError();
- call_tests++;
- xmlResetLastError();
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSetGenericErrorFunc(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSetStructuredErrorFunc(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-static int
-test_xmlerror(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlerror : 7 of 15 functions ...\n");
- test_ret += test_initGenericErrorDefaultFunc();
- test_ret += test_xmlCopyError();
- test_ret += test_xmlCtxtGetLastError();
- test_ret += test_xmlCtxtResetLastError();
- test_ret += test_xmlGetLastError();
- test_ret += test_xmlParserError();
- test_ret += test_xmlParserPrintFileContext();
- test_ret += test_xmlParserPrintFileInfo();
- test_ret += test_xmlParserValidityError();
- test_ret += test_xmlParserValidityWarning();
- test_ret += test_xmlParserWarning();
- test_ret += test_xmlResetError();
- test_ret += test_xmlResetLastError();
- test_ret += test_xmlSetGenericErrorFunc();
- test_ret += test_xmlSetStructuredErrorFunc();
-
- if (test_ret != 0)
- printf("Module xmlerror: %d errors\n", test_ret);
- return(test_ret);
-}
-#ifdef LIBXML_MODULES_ENABLED
-
-#define gen_nb_xmlModulePtr 1
-static xmlModulePtr gen_xmlModulePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlModulePtr(int no ATTRIBUTE_UNUSED, xmlModulePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlModuleClose(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_MODULES_ENABLED)
- int mem_base;
- int ret_val;
- xmlModulePtr module; /* the module handle */
- int n_module;
-
- for (n_module = 0;n_module < gen_nb_xmlModulePtr;n_module++) {
- mem_base = xmlMemBlocks();
- module = gen_xmlModulePtr(n_module, 0);
-
- ret_val = xmlModuleClose(module);
- desret_int(ret_val);
- call_tests++;
- des_xmlModulePtr(n_module, module, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlModuleClose",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_module);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlModuleOpen(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlModuleSymbol(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_MODULES_ENABLED)
- int mem_base;
- int ret_val;
- xmlModulePtr module; /* the module */
- int n_module;
- char * name; /* the name of the symbol */
- int n_name;
- void ** symbol; /* the resulting symbol address */
- int n_symbol;
-
- for (n_module = 0;n_module < gen_nb_xmlModulePtr;n_module++) {
- for (n_name = 0;n_name < gen_nb_const_char_ptr;n_name++) {
- for (n_symbol = 0;n_symbol < gen_nb_void_ptr_ptr;n_symbol++) {
- mem_base = xmlMemBlocks();
- module = gen_xmlModulePtr(n_module, 0);
- name = gen_const_char_ptr(n_name, 1);
- symbol = gen_void_ptr_ptr(n_symbol, 2);
-
- ret_val = xmlModuleSymbol(module, (const char *)name, symbol);
- desret_int(ret_val);
- call_tests++;
- des_xmlModulePtr(n_module, module, 0);
- des_const_char_ptr(n_name, (const char *)name, 1);
- des_void_ptr_ptr(n_symbol, symbol, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlModuleSymbol",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_module);
- printf(" %d", n_name);
- printf(" %d", n_symbol);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xmlmodule(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlmodule : 2 of 4 functions ...\n");
- test_ret += test_xmlModuleClose();
- test_ret += test_xmlModuleOpen();
- test_ret += test_xmlModuleSymbol();
-
- if (test_ret != 0)
- printf("Module xmlmodule: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlNewTextReader(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlTextReaderPtr ret_val;
- xmlParserInputBufferPtr input; /* the xmlParserInputBufferPtr used to read data */
- int n_input;
- const char * URI; /* the URI information for the source if available */
- int n_URI;
-
- for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) {
- for (n_URI = 0;n_URI < gen_nb_filepath;n_URI++) {
- mem_base = xmlMemBlocks();
- input = gen_xmlParserInputBufferPtr(n_input, 0);
- URI = gen_filepath(n_URI, 1);
-
- ret_val = xmlNewTextReader(input, URI);
- desret_xmlTextReaderPtr(ret_val);
- call_tests++;
- des_xmlParserInputBufferPtr(n_input, input, 0);
- des_filepath(n_URI, URI, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextReader",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_input);
- printf(" %d", n_URI);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewTextReaderFilename(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlTextReaderPtr ret_val;
- const char * URI; /* the URI of the resource to process */
- int n_URI;
-
- for (n_URI = 0;n_URI < gen_nb_filepath;n_URI++) {
- mem_base = xmlMemBlocks();
- URI = gen_filepath(n_URI, 0);
-
- ret_val = xmlNewTextReaderFilename(URI);
- desret_xmlTextReaderPtr(ret_val);
- call_tests++;
- des_filepath(n_URI, URI, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextReaderFilename",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URI);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReaderForDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlTextReaderPtr ret_val;
- xmlChar * cur; /* a pointer to a zero terminated string */
- int n_cur;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlChar_ptr(n_cur, 0);
- URL = gen_filepath(n_URL, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- options = gen_parseroptions(n_options, 3);
-
- ret_val = xmlReaderForDoc((const xmlChar *)cur, URL, (const char *)encoding, options);
- desret_xmlTextReaderPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0);
- des_filepath(n_URL, URL, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_parseroptions(n_options, options, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReaderForDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReaderForFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlTextReaderPtr ret_val;
- const char * filename; /* a file or URL */
- int n_filename;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- filename = gen_filepath(n_filename, 0);
- encoding = gen_const_char_ptr(n_encoding, 1);
- options = gen_parseroptions(n_options, 2);
-
- ret_val = xmlReaderForFile(filename, (const char *)encoding, options);
- desret_xmlTextReaderPtr(ret_val);
- call_tests++;
- des_filepath(n_filename, filename, 0);
- des_const_char_ptr(n_encoding, (const char *)encoding, 1);
- des_parseroptions(n_options, options, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReaderForFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_filename);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReaderForMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlTextReaderPtr ret_val;
- char * buffer; /* a pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- URL = gen_filepath(n_URL, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- options = gen_parseroptions(n_options, 4);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlReaderForMemory((const char *)buffer, size, URL, (const char *)encoding, options);
- desret_xmlTextReaderPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- des_filepath(n_URL, URL, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_parseroptions(n_options, options, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReaderForMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReaderNewDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* an XML reader */
- int n_reader;
- xmlChar * cur; /* a pointer to a zero terminated string */
- int n_cur;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- cur = gen_const_xmlChar_ptr(n_cur, 1);
- URL = gen_filepath(n_URL, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- options = gen_parseroptions(n_options, 4);
-
- ret_val = xmlReaderNewDoc(reader, (const xmlChar *)cur, URL, (const char *)encoding, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 1);
- des_filepath(n_URL, URL, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_parseroptions(n_options, options, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReaderNewDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_cur);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReaderNewFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* an XML reader */
- int n_reader;
- const char * filename; /* a file or URL */
- int n_filename;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- filename = gen_filepath(n_filename, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- options = gen_parseroptions(n_options, 3);
-
- ret_val = xmlReaderNewFile(reader, filename, (const char *)encoding, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_filepath(n_filename, filename, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_parseroptions(n_options, options, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReaderNewFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_filename);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReaderNewMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* an XML reader */
- int n_reader;
- char * buffer; /* a pointer to a char array */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- buffer = gen_const_char_ptr(n_buffer, 1);
- size = gen_int(n_size, 2);
- URL = gen_filepath(n_URL, 3);
- encoding = gen_const_char_ptr(n_encoding, 4);
- options = gen_parseroptions(n_options, 5);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlReaderNewMemory(reader, (const char *)buffer, size, URL, (const char *)encoding, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_char_ptr(n_buffer, (const char *)buffer, 1);
- des_int(n_size, size, 2);
- des_filepath(n_URL, URL, 3);
- des_const_char_ptr(n_encoding, (const char *)encoding, 4);
- des_parseroptions(n_options, options, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReaderNewMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReaderNewWalker(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* an XML reader */
- int n_reader;
- xmlDocPtr doc; /* a preparsed document */
- int n_doc;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlReaderNewWalker(reader, doc);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReaderNewWalker",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlReaderWalker(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlTextReaderPtr ret_val;
- xmlDocPtr doc; /* a preparsed document */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
-
- ret_val = xmlReaderWalker(doc);
- desret_xmlTextReaderPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlReaderWalker",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderAttributeCount(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderAttributeCount(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderAttributeCount",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderBaseUri(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderBaseUri(reader);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderBaseUri",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderByteConsumed(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- long ret_val;
- xmlTextReaderPtr reader; /* an XML reader */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderByteConsumed(reader);
- desret_long(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderByteConsumed",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderClose(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderClose(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderClose",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstBaseUri(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstBaseUri(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstBaseUri",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstEncoding(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstEncoding(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstEncoding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstLocalName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstLocalName(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstLocalName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstName(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstNamespaceUri(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstNamespaceUri(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstNamespaceUri",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstPrefix(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstPrefix(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstPrefix",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlChar * str; /* the string to intern. */
- int n_str;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
-
- ret_val = xmlTextReaderConstString(reader, (const xmlChar *)str);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstValue(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstXmlLang(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstXmlLang(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstXmlLang",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderConstXmlVersion(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderConstXmlVersion(reader);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderConstXmlVersion",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderCurrentDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlDocPtr ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderCurrentDoc(reader);
- desret_xmlDocPtr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderCurrentDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderCurrentNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderCurrentNode(reader);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderCurrentNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderDepth(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderDepth(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderDepth",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderExpand(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderExpand(reader);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderExpand",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderGetAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlChar * name; /* the qualified name of the attribute. */
- int n_name;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlTextReaderGetAttribute(reader, (const xmlChar *)name);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderGetAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderGetAttributeNo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- int no; /* the zero-based index of the attribute relative to the containing element */
- int n_no;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_no = 0;n_no < gen_nb_int;n_no++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- no = gen_int(n_no, 1);
-
- ret_val = xmlTextReaderGetAttributeNo(reader, no);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_int(n_no, no, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderGetAttributeNo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_no);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderGetAttributeNs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlChar * localName; /* the local name of the attribute. */
- int n_localName;
- xmlChar * namespaceURI; /* the namespace URI of the attribute. */
- int n_namespaceURI;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_localName = 0;n_localName < gen_nb_const_xmlChar_ptr;n_localName++) {
- for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- localName = gen_const_xmlChar_ptr(n_localName, 1);
- namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 2);
-
- ret_val = xmlTextReaderGetAttributeNs(reader, (const xmlChar *)localName, (const xmlChar *)namespaceURI);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_xmlChar_ptr(n_localName, (const xmlChar *)localName, 1);
- des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderGetAttributeNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_localName);
- printf(" %d", n_namespaceURI);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_READER_ENABLED
-
-#define gen_nb_xmlTextReaderErrorFunc_ptr 1
-static xmlTextReaderErrorFunc * gen_xmlTextReaderErrorFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlTextReaderErrorFunc_ptr(int no ATTRIBUTE_UNUSED, xmlTextReaderErrorFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlTextReaderGetErrorHandler(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlTextReaderErrorFunc * f; /* the callback function or NULL is no callback has been registered */
- int n_f;
- void ** arg; /* a user argument */
- int n_arg;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_f = 0;n_f < gen_nb_xmlTextReaderErrorFunc_ptr;n_f++) {
- for (n_arg = 0;n_arg < gen_nb_void_ptr_ptr;n_arg++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- f = gen_xmlTextReaderErrorFunc_ptr(n_f, 1);
- arg = gen_void_ptr_ptr(n_arg, 2);
-
- xmlTextReaderGetErrorHandler(reader, f, arg);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_xmlTextReaderErrorFunc_ptr(n_f, f, 1);
- des_void_ptr_ptr(n_arg, arg, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderGetErrorHandler",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_f);
- printf(" %d", n_arg);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderGetParserColumnNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the user data (XML reader context) */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderGetParserColumnNumber(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderGetParserColumnNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderGetParserLineNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the user data (XML reader context) */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderGetParserLineNumber(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderGetParserLineNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderGetParserProp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- int prop; /* the xmlParserProperties to get */
- int n_prop;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_prop = 0;n_prop < gen_nb_int;n_prop++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- prop = gen_int(n_prop, 1);
-
- ret_val = xmlTextReaderGetParserProp(reader, prop);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_int(n_prop, prop, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderGetParserProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_prop);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderGetRemainder(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlParserInputBufferPtr ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderGetRemainder(reader);
- desret_xmlParserInputBufferPtr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderGetRemainder",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderHasAttributes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderHasAttributes(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderHasAttributes",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderHasValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderHasValue(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderHasValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderIsDefault(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderIsDefault(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderIsDefault",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderIsEmptyElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderIsEmptyElement(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderIsEmptyElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderIsNamespaceDecl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderIsNamespaceDecl(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderIsNamespaceDecl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderIsValid(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderIsValid(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderIsValid",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderLocalName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderLocalName(reader);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderLocalName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_READER_ENABLED
-
-#define gen_nb_xmlTextReaderLocatorPtr 1
-static xmlTextReaderLocatorPtr gen_xmlTextReaderLocatorPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlTextReaderLocatorPtr(int no ATTRIBUTE_UNUSED, xmlTextReaderLocatorPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlTextReaderLocatorBaseURI(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderLocatorPtr locator; /* the xmlTextReaderLocatorPtr used */
- int n_locator;
-
- for (n_locator = 0;n_locator < gen_nb_xmlTextReaderLocatorPtr;n_locator++) {
- mem_base = xmlMemBlocks();
- locator = gen_xmlTextReaderLocatorPtr(n_locator, 0);
-
- ret_val = xmlTextReaderLocatorBaseURI(locator);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderLocatorPtr(n_locator, locator, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderLocatorBaseURI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_locator);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderLocatorLineNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderLocatorPtr locator; /* the xmlTextReaderLocatorPtr used */
- int n_locator;
-
- for (n_locator = 0;n_locator < gen_nb_xmlTextReaderLocatorPtr;n_locator++) {
- mem_base = xmlMemBlocks();
- locator = gen_xmlTextReaderLocatorPtr(n_locator, 0);
-
- ret_val = xmlTextReaderLocatorLineNumber(locator);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderLocatorPtr(n_locator, locator, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderLocatorLineNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_locator);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderLookupNamespace(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlChar * prefix; /* the prefix whose namespace URI is to be resolved. To return the default namespace, specify NULL */
- int n_prefix;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
-
- ret_val = xmlTextReaderLookupNamespace(reader, (const xmlChar *)prefix);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderLookupNamespace",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_prefix);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderMoveToAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlChar * name; /* the qualified name of the attribute. */
- int n_name;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlTextReaderMoveToAttribute(reader, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderMoveToAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderMoveToAttributeNo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- int no; /* the zero-based index of the attribute relative to the containing element. */
- int n_no;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_no = 0;n_no < gen_nb_int;n_no++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- no = gen_int(n_no, 1);
-
- ret_val = xmlTextReaderMoveToAttributeNo(reader, no);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_int(n_no, no, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderMoveToAttributeNo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_no);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderMoveToAttributeNs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlChar * localName; /* the local name of the attribute. */
- int n_localName;
- xmlChar * namespaceURI; /* the namespace URI of the attribute. */
- int n_namespaceURI;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_localName = 0;n_localName < gen_nb_const_xmlChar_ptr;n_localName++) {
- for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- localName = gen_const_xmlChar_ptr(n_localName, 1);
- namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 2);
-
- ret_val = xmlTextReaderMoveToAttributeNs(reader, (const xmlChar *)localName, (const xmlChar *)namespaceURI);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_xmlChar_ptr(n_localName, (const xmlChar *)localName, 1);
- des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderMoveToAttributeNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_localName);
- printf(" %d", n_namespaceURI);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderMoveToElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderMoveToElement(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderMoveToElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderMoveToFirstAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderMoveToFirstAttribute(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderMoveToFirstAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderMoveToNextAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderMoveToNextAttribute(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderMoveToNextAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderName(reader);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderNamespaceUri(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderNamespaceUri(reader);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderNamespaceUri",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderNext(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderNext(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderNext",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderNextSibling(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderNextSibling(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderNextSibling",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderNodeType(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderNodeType(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderNodeType",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderNormalization(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderNormalization(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderNormalization",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderPrefix(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderPrefix(reader);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderPrefix",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderPreserve(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderPreserve(reader);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderPreserve",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderPreservePattern(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_PATTERN_ENABLED)
-#ifdef LIBXML_PATTERN_ENABLED
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlChar * pattern; /* an XPath subset pattern */
- int n_pattern;
- xmlChar ** namespaces; /* the prefix definitions, array of [URI, prefix] or NULL */
- int n_namespaces;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_pattern = 0;n_pattern < gen_nb_const_xmlChar_ptr;n_pattern++) {
- for (n_namespaces = 0;n_namespaces < gen_nb_const_xmlChar_ptr_ptr;n_namespaces++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- pattern = gen_const_xmlChar_ptr(n_pattern, 1);
- namespaces = gen_const_xmlChar_ptr_ptr(n_namespaces, 2);
-
- ret_val = xmlTextReaderPreservePattern(reader, (const xmlChar *)pattern, (const xmlChar **)namespaces);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_xmlChar_ptr(n_pattern, (const xmlChar *)pattern, 1);
- des_const_xmlChar_ptr_ptr(n_namespaces, (const xmlChar **)namespaces, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderPreservePattern",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_pattern);
- printf(" %d", n_namespaces);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderQuoteChar(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderQuoteChar(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderQuoteChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderRead(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderRead(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderRead",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderReadAttributeValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderReadAttributeValue(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderReadAttributeValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderReadState(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderReadState(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderReadState",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderRelaxNGSetSchema(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlRelaxNGPtr schema; /* a precompiled RelaxNG schema */
- int n_schema;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_schema = 0;n_schema < gen_nb_xmlRelaxNGPtr;n_schema++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- schema = gen_xmlRelaxNGPtr(n_schema, 1);
-
- ret_val = xmlTextReaderRelaxNGSetSchema(reader, schema);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_xmlRelaxNGPtr(n_schema, schema, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderRelaxNGSetSchema",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_schema);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderRelaxNGValidate(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- char * rng; /* the path to a RelaxNG schema or NULL */
- int n_rng;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_rng = 0;n_rng < gen_nb_const_char_ptr;n_rng++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- rng = gen_const_char_ptr(n_rng, 1);
-
- ret_val = xmlTextReaderRelaxNGValidate(reader, (const char *)rng);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_char_ptr(n_rng, (const char *)rng, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderRelaxNGValidate",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_rng);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderRelaxNGValidateCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlRelaxNGValidCtxtPtr ctxt; /* the RelaxNG schema validation context or NULL */
- int n_ctxt;
- int options; /* options (not used yet) */
- int n_options;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlRelaxNGValidCtxtPtr;n_ctxt++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- ctxt = gen_xmlRelaxNGValidCtxtPtr(n_ctxt, 1);
- options = gen_parseroptions(n_options, 2);
-
- ret_val = xmlTextReaderRelaxNGValidateCtxt(reader, ctxt, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_xmlRelaxNGValidCtxtPtr(n_ctxt, ctxt, 1);
- des_parseroptions(n_options, options, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderRelaxNGValidateCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_ctxt);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderSchemaValidate(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- char * xsd; /* the path to a W3C XSD schema or NULL */
- int n_xsd;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_xsd = 0;n_xsd < gen_nb_const_char_ptr;n_xsd++) {
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- xsd = gen_const_char_ptr(n_xsd, 1);
-
- ret_val = xmlTextReaderSchemaValidate(reader, (const char *)xsd);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_const_char_ptr(n_xsd, (const char *)xsd, 1);
- xmlResetLastError();
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderSchemaValidateCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlSchemaValidCtxtPtr ctxt; /* the XML Schema validation context or NULL */
- int n_ctxt;
- int options; /* options (not used yet) */
- int n_options;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 1);
- options = gen_parseroptions(n_options, 2);
-
- ret_val = xmlTextReaderSchemaValidateCtxt(reader, ctxt, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 1);
- des_parseroptions(n_options, options, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderSchemaValidateCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_ctxt);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderSetErrorHandler(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderSetParserProp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- int prop; /* the xmlParserProperties to set */
- int n_prop;
- int value; /* usually 0 or 1 to (de)activate it */
- int n_value;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_prop = 0;n_prop < gen_nb_int;n_prop++) {
- for (n_value = 0;n_value < gen_nb_int;n_value++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- prop = gen_int(n_prop, 1);
- value = gen_int(n_value, 2);
-
- ret_val = xmlTextReaderSetParserProp(reader, prop, value);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_int(n_prop, prop, 1);
- des_int(n_value, value, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderSetParserProp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_prop);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderSetSchema(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED) && defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
- xmlSchemaPtr schema; /* a precompiled Schema schema */
- int n_schema;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_schema = 0;n_schema < gen_nb_xmlSchemaPtr;n_schema++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- schema = gen_xmlSchemaPtr(n_schema, 1);
-
- ret_val = xmlTextReaderSetSchema(reader, schema);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_xmlSchemaPtr(n_schema, schema, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderSetSchema",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_schema);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderSetStructuredErrorHandler(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderSetup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* an XML reader */
- int n_reader;
- xmlParserInputBufferPtr input; /* xmlParserInputBufferPtr used to feed the reader, will be destroyed with it. */
- int n_input;
- const char * URL; /* the base URL to use for the document */
- int n_URL;
- char * encoding; /* the document encoding, or NULL */
- int n_encoding;
- int options; /* a combination of xmlParserOption */
- int n_options;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) {
- for (n_URL = 0;n_URL < gen_nb_filepath;n_URL++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_options = 0;n_options < gen_nb_parseroptions;n_options++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
- input = gen_xmlParserInputBufferPtr(n_input, 1);
- URL = gen_filepath(n_URL, 2);
- encoding = gen_const_char_ptr(n_encoding, 3);
- options = gen_parseroptions(n_options, 4);
-
- ret_val = xmlTextReaderSetup(reader, input, URL, (const char *)encoding, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- des_filepath(n_URL, URL, 2);
- des_const_char_ptr(n_encoding, (const char *)encoding, 3);
- des_parseroptions(n_options, options, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderSetup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf(" %d", n_input);
- printf(" %d", n_URL);
- printf(" %d", n_encoding);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderStandalone(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderStandalone(reader);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderStandalone",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderValue(reader);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextReaderXmlLang(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_READER_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlTextReaderPtr reader; /* the xmlTextReaderPtr used */
- int n_reader;
-
- for (n_reader = 0;n_reader < gen_nb_xmlTextReaderPtr;n_reader++) {
- mem_base = xmlMemBlocks();
- reader = gen_xmlTextReaderPtr(n_reader, 0);
-
- ret_val = xmlTextReaderXmlLang(reader);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlTextReaderPtr(n_reader, reader, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextReaderXmlLang",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_reader);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xmlreader(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlreader : 76 of 86 functions ...\n");
- test_ret += test_xmlNewTextReader();
- test_ret += test_xmlNewTextReaderFilename();
- test_ret += test_xmlReaderForDoc();
- test_ret += test_xmlReaderForFile();
- test_ret += test_xmlReaderForMemory();
- test_ret += test_xmlReaderNewDoc();
- test_ret += test_xmlReaderNewFile();
- test_ret += test_xmlReaderNewMemory();
- test_ret += test_xmlReaderNewWalker();
- test_ret += test_xmlReaderWalker();
- test_ret += test_xmlTextReaderAttributeCount();
- test_ret += test_xmlTextReaderBaseUri();
- test_ret += test_xmlTextReaderByteConsumed();
- test_ret += test_xmlTextReaderClose();
- test_ret += test_xmlTextReaderConstBaseUri();
- test_ret += test_xmlTextReaderConstEncoding();
- test_ret += test_xmlTextReaderConstLocalName();
- test_ret += test_xmlTextReaderConstName();
- test_ret += test_xmlTextReaderConstNamespaceUri();
- test_ret += test_xmlTextReaderConstPrefix();
- test_ret += test_xmlTextReaderConstString();
- test_ret += test_xmlTextReaderConstValue();
- test_ret += test_xmlTextReaderConstXmlLang();
- test_ret += test_xmlTextReaderConstXmlVersion();
- test_ret += test_xmlTextReaderCurrentDoc();
- test_ret += test_xmlTextReaderCurrentNode();
- test_ret += test_xmlTextReaderDepth();
- test_ret += test_xmlTextReaderExpand();
- test_ret += test_xmlTextReaderGetAttribute();
- test_ret += test_xmlTextReaderGetAttributeNo();
- test_ret += test_xmlTextReaderGetAttributeNs();
- test_ret += test_xmlTextReaderGetErrorHandler();
- test_ret += test_xmlTextReaderGetParserColumnNumber();
- test_ret += test_xmlTextReaderGetParserLineNumber();
- test_ret += test_xmlTextReaderGetParserProp();
- test_ret += test_xmlTextReaderGetRemainder();
- test_ret += test_xmlTextReaderHasAttributes();
- test_ret += test_xmlTextReaderHasValue();
- test_ret += test_xmlTextReaderIsDefault();
- test_ret += test_xmlTextReaderIsEmptyElement();
- test_ret += test_xmlTextReaderIsNamespaceDecl();
- test_ret += test_xmlTextReaderIsValid();
- test_ret += test_xmlTextReaderLocalName();
- test_ret += test_xmlTextReaderLocatorBaseURI();
- test_ret += test_xmlTextReaderLocatorLineNumber();
- test_ret += test_xmlTextReaderLookupNamespace();
- test_ret += test_xmlTextReaderMoveToAttribute();
- test_ret += test_xmlTextReaderMoveToAttributeNo();
- test_ret += test_xmlTextReaderMoveToAttributeNs();
- test_ret += test_xmlTextReaderMoveToElement();
- test_ret += test_xmlTextReaderMoveToFirstAttribute();
- test_ret += test_xmlTextReaderMoveToNextAttribute();
- test_ret += test_xmlTextReaderName();
- test_ret += test_xmlTextReaderNamespaceUri();
- test_ret += test_xmlTextReaderNext();
- test_ret += test_xmlTextReaderNextSibling();
- test_ret += test_xmlTextReaderNodeType();
- test_ret += test_xmlTextReaderNormalization();
- test_ret += test_xmlTextReaderPrefix();
- test_ret += test_xmlTextReaderPreserve();
- test_ret += test_xmlTextReaderPreservePattern();
- test_ret += test_xmlTextReaderQuoteChar();
- test_ret += test_xmlTextReaderRead();
- test_ret += test_xmlTextReaderReadAttributeValue();
- test_ret += test_xmlTextReaderReadState();
- test_ret += test_xmlTextReaderRelaxNGSetSchema();
- test_ret += test_xmlTextReaderRelaxNGValidate();
- test_ret += test_xmlTextReaderRelaxNGValidateCtxt();
- test_ret += test_xmlTextReaderSchemaValidate();
- test_ret += test_xmlTextReaderSchemaValidateCtxt();
- test_ret += test_xmlTextReaderSetErrorHandler();
- test_ret += test_xmlTextReaderSetParserProp();
- test_ret += test_xmlTextReaderSetSchema();
- test_ret += test_xmlTextReaderSetStructuredErrorHandler();
- test_ret += test_xmlTextReaderSetup();
- test_ret += test_xmlTextReaderStandalone();
- test_ret += test_xmlTextReaderValue();
- test_ret += test_xmlTextReaderXmlLang();
-
- if (test_ret != 0)
- printf("Module xmlreader: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlExpCtxtNbCons(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- int ret_val;
- xmlExpCtxtPtr ctxt; /* an expression context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlExpCtxtNbCons(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpCtxtNbCons",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlExpCtxtNbNodes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- int ret_val;
- xmlExpCtxtPtr ctxt; /* an expression context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlExpCtxtNbNodes(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpCtxtNbNodes",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlExpDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- xmlBufferPtr buf; /* a buffer to receive the output */
- int n_buf;
- xmlExpNodePtr expr; /* the compiled expression */
- int n_expr;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_expr = 0;n_expr < gen_nb_xmlExpNodePtr;n_expr++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- expr = gen_xmlExpNodePtr(n_expr, 1);
-
- xmlExpDump(buf, expr);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_xmlExpNodePtr(n_expr, expr, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_expr);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlExpExpDerive(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlExpGetLanguage(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- int ret_val;
- xmlExpCtxtPtr ctxt; /* the expression context */
- int n_ctxt;
- xmlExpNodePtr exp; /* the expression */
- int n_exp;
- xmlChar ** langList; /* where to store the tokens */
- int n_langList;
- int len; /* the allocated length of @list */
- int n_len;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
- for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
- for (n_langList = 0;n_langList < gen_nb_const_xmlChar_ptr_ptr;n_langList++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
- exp = gen_xmlExpNodePtr(n_exp, 1);
- langList = gen_const_xmlChar_ptr_ptr(n_langList, 2);
- len = gen_int(n_len, 3);
-
- ret_val = xmlExpGetLanguage(ctxt, exp, (const xmlChar **)langList, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlExpNodePtr(n_exp, exp, 1);
- des_const_xmlChar_ptr_ptr(n_langList, (const xmlChar **)langList, 2);
- des_int(n_len, len, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpGetLanguage",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_exp);
- printf(" %d", n_langList);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlExpGetStart(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- int ret_val;
- xmlExpCtxtPtr ctxt; /* the expression context */
- int n_ctxt;
- xmlExpNodePtr exp; /* the expression */
- int n_exp;
- xmlChar ** tokList; /* where to store the tokens */
- int n_tokList;
- int len; /* the allocated length of @list */
- int n_len;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
- for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
- for (n_tokList = 0;n_tokList < gen_nb_const_xmlChar_ptr_ptr;n_tokList++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
- exp = gen_xmlExpNodePtr(n_exp, 1);
- tokList = gen_const_xmlChar_ptr_ptr(n_tokList, 2);
- len = gen_int(n_len, 3);
-
- ret_val = xmlExpGetStart(ctxt, exp, (const xmlChar **)tokList, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlExpNodePtr(n_exp, exp, 1);
- des_const_xmlChar_ptr_ptr(n_tokList, (const xmlChar **)tokList, 2);
- des_int(n_len, len, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpGetStart",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_exp);
- printf(" %d", n_tokList);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlExpIsNillable(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- int ret_val;
- xmlExpNodePtr exp; /* the expression */
- int n_exp;
-
- for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
- mem_base = xmlMemBlocks();
- exp = gen_xmlExpNodePtr(n_exp, 0);
-
- ret_val = xmlExpIsNillable(exp);
- desret_int(ret_val);
- call_tests++;
- des_xmlExpNodePtr(n_exp, exp, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpIsNillable",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_exp);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlExpMaxToken(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- int ret_val;
- xmlExpNodePtr expr; /* a compiled expression */
- int n_expr;
-
- for (n_expr = 0;n_expr < gen_nb_xmlExpNodePtr;n_expr++) {
- mem_base = xmlMemBlocks();
- expr = gen_xmlExpNodePtr(n_expr, 0);
-
- ret_val = xmlExpMaxToken(expr);
- desret_int(ret_val);
- call_tests++;
- des_xmlExpNodePtr(n_expr, expr, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpMaxToken",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_expr);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlExpNewAtom(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlExpNewCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlExpNewOr(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlExpNewRange(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlExpNewSeq(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlExpParse(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlExpRef(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- xmlExpNodePtr exp; /* the expression */
- int n_exp;
-
- for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
- mem_base = xmlMemBlocks();
- exp = gen_xmlExpNodePtr(n_exp, 0);
-
- xmlExpRef(exp);
- call_tests++;
- des_xmlExpNodePtr(n_exp, exp, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpRef",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_exp);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlExpStringDerive(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlExpSubsume(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED) && defined(LIBXML_EXPR_ENABLED)
- int mem_base;
- int ret_val;
- xmlExpCtxtPtr ctxt; /* the expressions context */
- int n_ctxt;
- xmlExpNodePtr exp; /* the englobing expression */
- int n_exp;
- xmlExpNodePtr sub; /* the subexpression */
- int n_sub;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlExpCtxtPtr;n_ctxt++) {
- for (n_exp = 0;n_exp < gen_nb_xmlExpNodePtr;n_exp++) {
- for (n_sub = 0;n_sub < gen_nb_xmlExpNodePtr;n_sub++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlExpCtxtPtr(n_ctxt, 0);
- exp = gen_xmlExpNodePtr(n_exp, 1);
- sub = gen_xmlExpNodePtr(n_sub, 2);
-
- ret_val = xmlExpSubsume(ctxt, exp, sub);
- desret_int(ret_val);
- call_tests++;
- des_xmlExpCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlExpNodePtr(n_exp, exp, 1);
- des_xmlExpNodePtr(n_sub, sub, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlExpSubsume",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_exp);
- printf(" %d", n_sub);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_REGEXP_ENABLED
-
-#define gen_nb_xmlRegExecCtxtPtr 1
-static xmlRegExecCtxtPtr gen_xmlRegExecCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlRegExecCtxtPtr(int no ATTRIBUTE_UNUSED, xmlRegExecCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlRegExecErrInfo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlRegExecCtxtPtr exec; /* a regexp execution context generating an error */
- int n_exec;
- xmlChar ** string; /* return value for the error string */
- int n_string;
- int * nbval; /* pointer to the number of accepted values IN/OUT */
- int n_nbval;
- int * nbneg; /* return number of negative transitions */
- int n_nbneg;
- xmlChar ** values; /* pointer to the array of acceptable values */
- int n_values;
- int * terminal; /* return value if this was a terminal state */
- int n_terminal;
-
- for (n_exec = 0;n_exec < gen_nb_xmlRegExecCtxtPtr;n_exec++) {
- for (n_string = 0;n_string < gen_nb_const_xmlChar_ptr_ptr;n_string++) {
- for (n_nbval = 0;n_nbval < gen_nb_int_ptr;n_nbval++) {
- for (n_nbneg = 0;n_nbneg < gen_nb_int_ptr;n_nbneg++) {
- for (n_values = 0;n_values < gen_nb_xmlChar_ptr_ptr;n_values++) {
- for (n_terminal = 0;n_terminal < gen_nb_int_ptr;n_terminal++) {
- mem_base = xmlMemBlocks();
- exec = gen_xmlRegExecCtxtPtr(n_exec, 0);
- string = gen_const_xmlChar_ptr_ptr(n_string, 1);
- nbval = gen_int_ptr(n_nbval, 2);
- nbneg = gen_int_ptr(n_nbneg, 3);
- values = gen_xmlChar_ptr_ptr(n_values, 4);
- terminal = gen_int_ptr(n_terminal, 5);
-
- ret_val = xmlRegExecErrInfo(exec, (const xmlChar **)string, nbval, nbneg, values, terminal);
- desret_int(ret_val);
- call_tests++;
- des_xmlRegExecCtxtPtr(n_exec, exec, 0);
- des_const_xmlChar_ptr_ptr(n_string, (const xmlChar **)string, 1);
- des_int_ptr(n_nbval, nbval, 2);
- des_int_ptr(n_nbneg, nbneg, 3);
- des_xmlChar_ptr_ptr(n_values, values, 4);
- des_int_ptr(n_terminal, terminal, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegExecErrInfo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_exec);
- printf(" %d", n_string);
- printf(" %d", n_nbval);
- printf(" %d", n_nbneg);
- printf(" %d", n_values);
- printf(" %d", n_terminal);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRegExecNextValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlRegExecCtxtPtr exec; /* a regexp execution context */
- int n_exec;
- int * nbval; /* pointer to the number of accepted values IN/OUT */
- int n_nbval;
- int * nbneg; /* return number of negative transitions */
- int n_nbneg;
- xmlChar ** values; /* pointer to the array of acceptable values */
- int n_values;
- int * terminal; /* return value if this was a terminal state */
- int n_terminal;
-
- for (n_exec = 0;n_exec < gen_nb_xmlRegExecCtxtPtr;n_exec++) {
- for (n_nbval = 0;n_nbval < gen_nb_int_ptr;n_nbval++) {
- for (n_nbneg = 0;n_nbneg < gen_nb_int_ptr;n_nbneg++) {
- for (n_values = 0;n_values < gen_nb_xmlChar_ptr_ptr;n_values++) {
- for (n_terminal = 0;n_terminal < gen_nb_int_ptr;n_terminal++) {
- mem_base = xmlMemBlocks();
- exec = gen_xmlRegExecCtxtPtr(n_exec, 0);
- nbval = gen_int_ptr(n_nbval, 1);
- nbneg = gen_int_ptr(n_nbneg, 2);
- values = gen_xmlChar_ptr_ptr(n_values, 3);
- terminal = gen_int_ptr(n_terminal, 4);
-
- ret_val = xmlRegExecNextValues(exec, nbval, nbneg, values, terminal);
- desret_int(ret_val);
- call_tests++;
- des_xmlRegExecCtxtPtr(n_exec, exec, 0);
- des_int_ptr(n_nbval, nbval, 1);
- des_int_ptr(n_nbneg, nbneg, 2);
- des_xmlChar_ptr_ptr(n_values, values, 3);
- des_int_ptr(n_terminal, terminal, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegExecNextValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_exec);
- printf(" %d", n_nbval);
- printf(" %d", n_nbneg);
- printf(" %d", n_values);
- printf(" %d", n_terminal);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRegExecPushString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlRegExecCtxtPtr exec; /* a regexp execution context or NULL to indicate the end */
- int n_exec;
- xmlChar * value; /* a string token input */
- int n_value;
- void * data; /* data associated to the token to reuse in callbacks */
- int n_data;
-
- for (n_exec = 0;n_exec < gen_nb_xmlRegExecCtxtPtr;n_exec++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- exec = gen_xmlRegExecCtxtPtr(n_exec, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
- data = gen_userdata(n_data, 2);
-
- ret_val = xmlRegExecPushString(exec, (const xmlChar *)value, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlRegExecCtxtPtr(n_exec, exec, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- des_userdata(n_data, data, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegExecPushString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_exec);
- printf(" %d", n_value);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRegExecPushString2(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlRegExecCtxtPtr exec; /* a regexp execution context or NULL to indicate the end */
- int n_exec;
- xmlChar * value; /* the first string token input */
- int n_value;
- xmlChar * value2; /* the second string token input */
- int n_value2;
- void * data; /* data associated to the token to reuse in callbacks */
- int n_data;
-
- for (n_exec = 0;n_exec < gen_nb_xmlRegExecCtxtPtr;n_exec++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_value2 = 0;n_value2 < gen_nb_const_xmlChar_ptr;n_value2++) {
- for (n_data = 0;n_data < gen_nb_userdata;n_data++) {
- mem_base = xmlMemBlocks();
- exec = gen_xmlRegExecCtxtPtr(n_exec, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
- value2 = gen_const_xmlChar_ptr(n_value2, 2);
- data = gen_userdata(n_data, 3);
-
- ret_val = xmlRegExecPushString2(exec, (const xmlChar *)value, (const xmlChar *)value2, data);
- desret_int(ret_val);
- call_tests++;
- des_xmlRegExecCtxtPtr(n_exec, exec, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- des_const_xmlChar_ptr(n_value2, (const xmlChar *)value2, 2);
- des_userdata(n_data, data, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegExecPushString2",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_exec);
- printf(" %d", n_value);
- printf(" %d", n_value2);
- printf(" %d", n_data);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_REGEXP_ENABLED
-
-#define gen_nb_xmlRegexpPtr 1
-static xmlRegexpPtr gen_xmlRegexpPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlRegexpPtr(int no ATTRIBUTE_UNUSED, xmlRegexpPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlRegNewExecCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRegexpCompile(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlRegexpExec(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlRegexpPtr comp; /* the compiled regular expression */
- int n_comp;
- xmlChar * content; /* the value to check against the regular expression */
- int n_content;
-
- for (n_comp = 0;n_comp < gen_nb_xmlRegexpPtr;n_comp++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlRegexpPtr(n_comp, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- ret_val = xmlRegexpExec(comp, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlRegexpPtr(n_comp, comp, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegexpExec",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRegexpIsDeterminist(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- int ret_val;
- xmlRegexpPtr comp; /* the compiled regular expression */
- int n_comp;
-
- for (n_comp = 0;n_comp < gen_nb_xmlRegexpPtr;n_comp++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlRegexpPtr(n_comp, 0);
-
- ret_val = xmlRegexpIsDeterminist(comp);
- desret_int(ret_val);
- call_tests++;
- des_xmlRegexpPtr(n_comp, comp, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegexpIsDeterminist",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlRegexpPrint(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_REGEXP_ENABLED)
- int mem_base;
- FILE * output; /* the file for the output debug */
- int n_output;
- xmlRegexpPtr regexp; /* the compiled regexp */
- int n_regexp;
-
- for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) {
- for (n_regexp = 0;n_regexp < gen_nb_xmlRegexpPtr;n_regexp++) {
- mem_base = xmlMemBlocks();
- output = gen_FILE_ptr(n_output, 0);
- regexp = gen_xmlRegexpPtr(n_regexp, 1);
-
- xmlRegexpPrint(output, regexp);
- call_tests++;
- des_FILE_ptr(n_output, output, 0);
- des_xmlRegexpPtr(n_regexp, regexp, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlRegexpPrint",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_regexp);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xmlregexp(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlregexp : 16 of 30 functions ...\n");
- test_ret += test_xmlExpCtxtNbCons();
- test_ret += test_xmlExpCtxtNbNodes();
- test_ret += test_xmlExpDump();
- test_ret += test_xmlExpExpDerive();
- test_ret += test_xmlExpGetLanguage();
- test_ret += test_xmlExpGetStart();
- test_ret += test_xmlExpIsNillable();
- test_ret += test_xmlExpMaxToken();
- test_ret += test_xmlExpNewAtom();
- test_ret += test_xmlExpNewCtxt();
- test_ret += test_xmlExpNewOr();
- test_ret += test_xmlExpNewRange();
- test_ret += test_xmlExpNewSeq();
- test_ret += test_xmlExpParse();
- test_ret += test_xmlExpRef();
- test_ret += test_xmlExpStringDerive();
- test_ret += test_xmlExpSubsume();
- test_ret += test_xmlRegExecErrInfo();
- test_ret += test_xmlRegExecNextValues();
- test_ret += test_xmlRegExecPushString();
- test_ret += test_xmlRegExecPushString2();
- test_ret += test_xmlRegNewExecCtxt();
- test_ret += test_xmlRegexpCompile();
- test_ret += test_xmlRegexpExec();
- test_ret += test_xmlRegexpIsDeterminist();
- test_ret += test_xmlRegexpPrint();
-
- if (test_ret != 0)
- printf("Module xmlregexp: %d errors\n", test_ret);
- return(test_ret);
-}
-#ifdef LIBXML_OUTPUT_ENABLED
-
-#define gen_nb_xmlSaveCtxtPtr 1
-static xmlSaveCtxtPtr gen_xmlSaveCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSaveCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSaveCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSaveClose(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlSaveCtxtPtr ctxt; /* a document saving context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSaveCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSaveCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlSaveClose(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlSaveCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveClose",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- long ret_val;
- xmlSaveCtxtPtr ctxt; /* a document saving context */
- int n_ctxt;
- xmlDocPtr doc; /* a document */
- int n_doc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSaveCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSaveCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlSaveDoc(ctxt, doc);
- desret_long(ret_val);
- call_tests++;
- des_xmlSaveCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveFlush(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- int ret_val;
- xmlSaveCtxtPtr ctxt; /* a document saving context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSaveCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSaveCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlSaveFlush(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlSaveCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveFlush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveSetAttrEscape(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveSetEscape(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveToBuffer(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveToFd(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveToFilename(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSaveTree(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- long ret_val;
- xmlSaveCtxtPtr ctxt; /* a document saving context */
- int n_ctxt;
- xmlNodePtr node; /* the top node of the subtree to save */
- int n_node;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSaveCtxtPtr;n_ctxt++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSaveCtxtPtr(n_ctxt, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- ret_val = xmlSaveTree(ctxt, node);
- desret_long(ret_val);
- call_tests++;
- des_xmlSaveCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSaveTree",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xmlsave(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlsave : 4 of 10 functions ...\n");
- test_ret += test_xmlSaveClose();
- test_ret += test_xmlSaveDoc();
- test_ret += test_xmlSaveFlush();
- test_ret += test_xmlSaveSetAttrEscape();
- test_ret += test_xmlSaveSetEscape();
- test_ret += test_xmlSaveToBuffer();
- test_ret += test_xmlSaveToFd();
- test_ret += test_xmlSaveToFilename();
- test_ret += test_xmlSaveTree();
-
- if (test_ret != 0)
- printf("Module xmlsave: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlSchemaDump(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
- int mem_base;
- FILE * output; /* the file output */
- int n_output;
- xmlSchemaPtr schema; /* a schema structure */
- int n_schema;
-
- for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) {
- for (n_schema = 0;n_schema < gen_nb_xmlSchemaPtr;n_schema++) {
- mem_base = xmlMemBlocks();
- output = gen_FILE_ptr(n_output, 0);
- schema = gen_xmlSchemaPtr(n_schema, 1);
-
- xmlSchemaDump(output, schema);
- call_tests++;
- des_FILE_ptr(n_output, output, 0);
- des_xmlSchemaPtr(n_schema, schema, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaDump",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_schema);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSchemaParserCtxtPtr 1
-static xmlSchemaParserCtxtPtr gen_xmlSchemaParserCtxtPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaParserCtxtPtr(int no ATTRIBUTE_UNUSED, xmlSchemaParserCtxtPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSchemaValidityErrorFunc_ptr 1
-static xmlSchemaValidityErrorFunc * gen_xmlSchemaValidityErrorFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaValidityErrorFunc_ptr(int no ATTRIBUTE_UNUSED, xmlSchemaValidityErrorFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSchemaValidityWarningFunc_ptr 1
-static xmlSchemaValidityWarningFunc * gen_xmlSchemaValidityWarningFunc_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaValidityWarningFunc_ptr(int no ATTRIBUTE_UNUSED, xmlSchemaValidityWarningFunc * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchemaGetParserErrors(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaParserCtxtPtr ctxt; /* a XMl-Schema parser context */
- int n_ctxt;
- xmlSchemaValidityErrorFunc * err; /* the error callback result */
- int n_err;
- xmlSchemaValidityWarningFunc * warn; /* the warning callback result */
- int n_warn;
- void ** ctx; /* contextual data for the callbacks result */
- int n_ctx;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaParserCtxtPtr;n_ctxt++) {
- for (n_err = 0;n_err < gen_nb_xmlSchemaValidityErrorFunc_ptr;n_err++) {
- for (n_warn = 0;n_warn < gen_nb_xmlSchemaValidityWarningFunc_ptr;n_warn++) {
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaParserCtxtPtr(n_ctxt, 0);
- err = gen_xmlSchemaValidityErrorFunc_ptr(n_err, 1);
- warn = gen_xmlSchemaValidityWarningFunc_ptr(n_warn, 2);
- ctx = gen_void_ptr_ptr(n_ctx, 3);
-
- ret_val = xmlSchemaGetParserErrors(ctxt, err, warn, ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaParserCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlSchemaValidityErrorFunc_ptr(n_err, err, 1);
- des_xmlSchemaValidityWarningFunc_ptr(n_warn, warn, 2);
- des_void_ptr_ptr(n_ctx, ctx, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaGetParserErrors",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_err);
- printf(" %d", n_warn);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaGetValidErrors(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* a XML-Schema validation context */
- int n_ctxt;
- xmlSchemaValidityErrorFunc * err; /* the error function result */
- int n_err;
- xmlSchemaValidityWarningFunc * warn; /* the warning function result */
- int n_warn;
- void ** ctx; /* the functions context result */
- int n_ctx;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- for (n_err = 0;n_err < gen_nb_xmlSchemaValidityErrorFunc_ptr;n_err++) {
- for (n_warn = 0;n_warn < gen_nb_xmlSchemaValidityWarningFunc_ptr;n_warn++) {
- for (n_ctx = 0;n_ctx < gen_nb_void_ptr_ptr;n_ctx++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
- err = gen_xmlSchemaValidityErrorFunc_ptr(n_err, 1);
- warn = gen_xmlSchemaValidityWarningFunc_ptr(n_warn, 2);
- ctx = gen_void_ptr_ptr(n_ctx, 3);
-
- ret_val = xmlSchemaGetValidErrors(ctxt, err, warn, ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlSchemaValidityErrorFunc_ptr(n_err, err, 1);
- des_xmlSchemaValidityWarningFunc_ptr(n_warn, warn, 2);
- des_void_ptr_ptr(n_ctx, ctx, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaGetValidErrors",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_err);
- printf(" %d", n_warn);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaIsValid(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* the schema validation context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlSchemaIsValid(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaIsValid",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaNewDocParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlSchemaParserCtxtPtr ret_val;
- xmlDocPtr doc; /* a preparsed document tree */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
-
- ret_val = xmlSchemaNewDocParserCtxt(doc);
- desret_xmlSchemaParserCtxtPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaNewDocParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaNewMemParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlSchemaParserCtxtPtr ret_val;
- char * buffer; /* a pointer to a char array containing the schemas */
- int n_buffer;
- int size; /* the size of the array */
- int n_size;
-
- for (n_buffer = 0;n_buffer < gen_nb_const_char_ptr;n_buffer++) {
- for (n_size = 0;n_size < gen_nb_int;n_size++) {
- mem_base = xmlMemBlocks();
- buffer = gen_const_char_ptr(n_buffer, 0);
- size = gen_int(n_size, 1);
- if ((buffer != NULL) &&
- (size > (int) strlen((const char *) buffer) + 1))
- continue;
-
- ret_val = xmlSchemaNewMemParserCtxt((const char *)buffer, size);
- desret_xmlSchemaParserCtxtPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_buffer, (const char *)buffer, 0);
- des_int(n_size, size, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaNewMemParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buffer);
- printf(" %d", n_size);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaNewParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlSchemaParserCtxtPtr ret_val;
- char * URL; /* the location of the schema */
- int n_URL;
-
- for (n_URL = 0;n_URL < gen_nb_const_char_ptr;n_URL++) {
- mem_base = xmlMemBlocks();
- URL = gen_const_char_ptr(n_URL, 0);
-
- ret_val = xmlSchemaNewParserCtxt((const char *)URL);
- desret_xmlSchemaParserCtxtPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_URL, (const char *)URL, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaNewParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_URL);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaNewValidCtxt(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaParse(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSAXHandlerPtr_ptr 1
-static xmlSAXHandlerPtr * gen_xmlSAXHandlerPtr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSAXHandlerPtr_ptr(int no ATTRIBUTE_UNUSED, xmlSAXHandlerPtr * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchemaSAXPlug(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSchemaSAXPlugPtr 1
-static xmlSchemaSAXPlugPtr gen_xmlSchemaSAXPlugPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaSAXPlugPtr(int no ATTRIBUTE_UNUSED, xmlSchemaSAXPlugPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchemaSAXUnplug(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaSAXPlugPtr plug; /* a data structure returned by xmlSchemaSAXPlug */
- int n_plug;
-
- for (n_plug = 0;n_plug < gen_nb_xmlSchemaSAXPlugPtr;n_plug++) {
- mem_base = xmlMemBlocks();
- plug = gen_xmlSchemaSAXPlugPtr(n_plug, 0);
-
- ret_val = xmlSchemaSAXUnplug(plug);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaSAXPlugPtr(n_plug, plug, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaSAXUnplug",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_plug);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaSetParserErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaSetParserStructuredErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaSetValidErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaSetValidOptions(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */
- int n_ctxt;
- int options; /* a combination of xmlSchemaValidOption */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
- options = gen_int(n_options, 1);
-
- ret_val = xmlSchemaSetValidOptions(ctxt, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- des_int(n_options, options, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaSetValidOptions",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaSetValidStructuredErrors(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidCtxtGetOptions(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlSchemaValidCtxtGetOptions(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidCtxtGetOptions",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidCtxtGetParserCtxt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlParserCtxtPtr ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
-
- ret_val = xmlSchemaValidCtxtGetParserCtxt(ctxt);
- desret_xmlParserCtxtPtr(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidCtxtGetParserCtxt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateDoc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */
- int n_ctxt;
- xmlDocPtr doc; /* a parsed document tree */
- int n_doc;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
- doc = gen_xmlDocPtr(n_doc, 1);
-
- ret_val = xmlSchemaValidateDoc(ctxt, doc);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlDocPtr(n_doc, doc, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateDoc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateFile(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */
- int n_ctxt;
- const char * filename; /* the URI of the instance */
- int n_filename;
- int options; /* a future set of options, currently unused */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
- filename = gen_filepath(n_filename, 1);
- options = gen_int(n_options, 2);
-
- ret_val = xmlSchemaValidateFile(ctxt, filename, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- des_filepath(n_filename, filename, 1);
- des_int(n_options, options, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateFile",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_filename);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateOneElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */
- int n_ctxt;
- xmlNodePtr elem; /* an element node */
- int n_elem;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- for (n_elem = 0;n_elem < gen_nb_xmlNodePtr;n_elem++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
- elem = gen_xmlNodePtr(n_elem, 1);
-
- ret_val = xmlSchemaValidateOneElement(ctxt, elem);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_elem, elem, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateOneElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_elem);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateSetFilename(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlSchemaValidCtxtPtr vctxt; /* the schema validation context */
- int n_vctxt;
- const char * filename; /* the file name */
- int n_filename;
-
- for (n_vctxt = 0;n_vctxt < gen_nb_xmlSchemaValidCtxtPtr;n_vctxt++) {
- for (n_filename = 0;n_filename < gen_nb_filepath;n_filename++) {
- mem_base = xmlMemBlocks();
- vctxt = gen_xmlSchemaValidCtxtPtr(n_vctxt, 0);
- filename = gen_filepath(n_filename, 1);
-
- xmlSchemaValidateSetFilename(vctxt, filename);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_vctxt, vctxt, 0);
- des_filepath(n_filename, filename, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateSetFilename",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_vctxt);
- printf(" %d", n_filename);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateSetLocator(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateStream(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValidCtxtPtr ctxt; /* a schema validation context */
- int n_ctxt;
- xmlParserInputBufferPtr input; /* the input to use for reading the data */
- int n_input;
- xmlCharEncoding enc; /* an optional encoding information */
- int n_enc;
- xmlSAXHandlerPtr sax; /* a SAX handler for the resulting events */
- int n_sax;
- void * user_data; /* the context to provide to the SAX handler. */
- int n_user_data;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlSchemaValidCtxtPtr;n_ctxt++) {
- for (n_input = 0;n_input < gen_nb_xmlParserInputBufferPtr;n_input++) {
- for (n_enc = 0;n_enc < gen_nb_xmlCharEncoding;n_enc++) {
- for (n_sax = 0;n_sax < gen_nb_xmlSAXHandlerPtr;n_sax++) {
- for (n_user_data = 0;n_user_data < gen_nb_userdata;n_user_data++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlSchemaValidCtxtPtr(n_ctxt, 0);
- input = gen_xmlParserInputBufferPtr(n_input, 1);
- enc = gen_xmlCharEncoding(n_enc, 2);
- sax = gen_xmlSAXHandlerPtr(n_sax, 3);
- user_data = gen_userdata(n_user_data, 4);
-
- ret_val = xmlSchemaValidateStream(ctxt, input, enc, sax, user_data);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValidCtxtPtr(n_ctxt, ctxt, 0);
- des_xmlParserInputBufferPtr(n_input, input, 1);
- des_xmlCharEncoding(n_enc, enc, 2);
- des_xmlSAXHandlerPtr(n_sax, sax, 3);
- des_userdata(n_user_data, user_data, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateStream",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_input);
- printf(" %d", n_enc);
- printf(" %d", n_sax);
- printf(" %d", n_user_data);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xmlschemas(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlschemas : 16 of 27 functions ...\n");
- test_ret += test_xmlSchemaDump();
- test_ret += test_xmlSchemaGetParserErrors();
- test_ret += test_xmlSchemaGetValidErrors();
- test_ret += test_xmlSchemaIsValid();
- test_ret += test_xmlSchemaNewDocParserCtxt();
- test_ret += test_xmlSchemaNewMemParserCtxt();
- test_ret += test_xmlSchemaNewParserCtxt();
- test_ret += test_xmlSchemaNewValidCtxt();
- test_ret += test_xmlSchemaParse();
- test_ret += test_xmlSchemaSAXPlug();
- test_ret += test_xmlSchemaSAXUnplug();
- test_ret += test_xmlSchemaSetParserErrors();
- test_ret += test_xmlSchemaSetParserStructuredErrors();
- test_ret += test_xmlSchemaSetValidErrors();
- test_ret += test_xmlSchemaSetValidOptions();
- test_ret += test_xmlSchemaSetValidStructuredErrors();
- test_ret += test_xmlSchemaValidCtxtGetOptions();
- test_ret += test_xmlSchemaValidCtxtGetParserCtxt();
- test_ret += test_xmlSchemaValidateDoc();
- test_ret += test_xmlSchemaValidateFile();
- test_ret += test_xmlSchemaValidateOneElement();
- test_ret += test_xmlSchemaValidateSetFilename();
- test_ret += test_xmlSchemaValidateSetLocator();
- test_ret += test_xmlSchemaValidateStream();
-
- if (test_ret != 0)
- printf("Module xmlschemas: %d errors\n", test_ret);
- return(test_ret);
-}
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSchemaFacetPtr 1
-static xmlSchemaFacetPtr gen_xmlSchemaFacetPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaFacetPtr(int no ATTRIBUTE_UNUSED, xmlSchemaFacetPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSchemaTypePtr 1
-static xmlSchemaTypePtr gen_xmlSchemaTypePtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaTypePtr(int no ATTRIBUTE_UNUSED, xmlSchemaTypePtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchemaCheckFacet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaFacetPtr facet; /* the facet */
- int n_facet;
- xmlSchemaTypePtr typeDecl; /* the schema type definition */
- int n_typeDecl;
- xmlSchemaParserCtxtPtr pctxt; /* the schema parser context or NULL */
- int n_pctxt;
- xmlChar * name; /* the optional name of the type */
- int n_name;
-
- for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) {
- for (n_typeDecl = 0;n_typeDecl < gen_nb_xmlSchemaTypePtr;n_typeDecl++) {
- for (n_pctxt = 0;n_pctxt < gen_nb_xmlSchemaParserCtxtPtr;n_pctxt++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- facet = gen_xmlSchemaFacetPtr(n_facet, 0);
- typeDecl = gen_xmlSchemaTypePtr(n_typeDecl, 1);
- pctxt = gen_xmlSchemaParserCtxtPtr(n_pctxt, 2);
- name = gen_const_xmlChar_ptr(n_name, 3);
-
- ret_val = xmlSchemaCheckFacet(facet, typeDecl, pctxt, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaFacetPtr(n_facet, facet, 0);
- des_xmlSchemaTypePtr(n_typeDecl, typeDecl, 1);
- des_xmlSchemaParserCtxtPtr(n_pctxt, pctxt, 2);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaCheckFacet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_facet);
- printf(" %d", n_typeDecl);
- printf(" %d", n_pctxt);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaCleanupTypes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-
-
- xmlSchemaCleanupTypes();
- call_tests++;
- xmlResetLastError();
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaCollapseString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlChar * value; /* a value */
- int n_value;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
-
- ret_val = xmlSchemaCollapseString((const xmlChar *)value);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaCollapseString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSchemaValPtr 1
-static xmlSchemaValPtr gen_xmlSchemaValPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaValPtr(int no ATTRIBUTE_UNUSED, xmlSchemaValPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchemaCompareValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValPtr x; /* a first value */
- int n_x;
- xmlSchemaValPtr y; /* a second value */
- int n_y;
-
- for (n_x = 0;n_x < gen_nb_xmlSchemaValPtr;n_x++) {
- for (n_y = 0;n_y < gen_nb_xmlSchemaValPtr;n_y++) {
- mem_base = xmlMemBlocks();
- x = gen_xmlSchemaValPtr(n_x, 0);
- y = gen_xmlSchemaValPtr(n_y, 1);
-
- ret_val = xmlSchemaCompareValues(x, y);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValPtr(n_x, x, 0);
- des_xmlSchemaValPtr(n_y, y, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaCompareValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_x);
- printf(" %d", n_y);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaCompareValuesWhtsp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValPtr x; /* a first value */
- int n_x;
- xmlSchemaWhitespaceValueType xws; /* the whitespace value of x */
- int n_xws;
- xmlSchemaValPtr y; /* a second value */
- int n_y;
- xmlSchemaWhitespaceValueType yws; /* the whitespace value of y */
- int n_yws;
-
- for (n_x = 0;n_x < gen_nb_xmlSchemaValPtr;n_x++) {
- for (n_xws = 0;n_xws < gen_nb_xmlSchemaWhitespaceValueType;n_xws++) {
- for (n_y = 0;n_y < gen_nb_xmlSchemaValPtr;n_y++) {
- for (n_yws = 0;n_yws < gen_nb_xmlSchemaWhitespaceValueType;n_yws++) {
- mem_base = xmlMemBlocks();
- x = gen_xmlSchemaValPtr(n_x, 0);
- xws = gen_xmlSchemaWhitespaceValueType(n_xws, 1);
- y = gen_xmlSchemaValPtr(n_y, 2);
- yws = gen_xmlSchemaWhitespaceValueType(n_yws, 3);
-
- ret_val = xmlSchemaCompareValuesWhtsp(x, xws, y, yws);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValPtr(n_x, x, 0);
- des_xmlSchemaWhitespaceValueType(n_xws, xws, 1);
- des_xmlSchemaValPtr(n_y, y, 2);
- des_xmlSchemaWhitespaceValueType(n_yws, yws, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaCompareValuesWhtsp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_x);
- printf(" %d", n_xws);
- printf(" %d", n_y);
- printf(" %d", n_yws);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaCopyValue(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaGetBuiltInListSimpleTypeItemType(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlSchemaTypePtr ret_val;
- xmlSchemaTypePtr type; /* the built-in simple type. */
- int n_type;
-
- for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) {
- mem_base = xmlMemBlocks();
- type = gen_xmlSchemaTypePtr(n_type, 0);
-
- ret_val = xmlSchemaGetBuiltInListSimpleTypeItemType(type);
- desret_xmlSchemaTypePtr(ret_val);
- call_tests++;
- des_xmlSchemaTypePtr(n_type, type, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaGetBuiltInListSimpleTypeItemType",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_type);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaGetBuiltInType(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- xmlSchemaTypePtr ret_val;
- xmlSchemaValType type; /* the type of the built in type */
- int n_type;
-
- for (n_type = 0;n_type < gen_nb_xmlSchemaValType;n_type++) {
- type = gen_xmlSchemaValType(n_type, 0);
-
- ret_val = xmlSchemaGetBuiltInType(type);
- desret_xmlSchemaTypePtr(ret_val);
- call_tests++;
- des_xmlSchemaValType(n_type, type, 0);
- xmlResetLastError();
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaGetCanonValue(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValPtr val; /* the precomputed value */
- int n_val;
- xmlChar ** retValue; /* the returned value */
- int n_retValue;
-
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- for (n_retValue = 0;n_retValue < gen_nb_const_xmlChar_ptr_ptr;n_retValue++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlSchemaValPtr(n_val, 0);
- retValue = gen_const_xmlChar_ptr_ptr(n_retValue, 1);
-
- ret_val = xmlSchemaGetCanonValue(val, (const xmlChar **)retValue);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValPtr(n_val, val, 0);
- des_const_xmlChar_ptr_ptr(n_retValue, (const xmlChar **)retValue, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaGetCanonValue",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf(" %d", n_retValue);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaGetCanonValueWhtsp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValPtr val; /* the precomputed value */
- int n_val;
- xmlChar ** retValue; /* the returned value */
- int n_retValue;
- xmlSchemaWhitespaceValueType ws; /* the whitespace type of the value */
- int n_ws;
-
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- for (n_retValue = 0;n_retValue < gen_nb_const_xmlChar_ptr_ptr;n_retValue++) {
- for (n_ws = 0;n_ws < gen_nb_xmlSchemaWhitespaceValueType;n_ws++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlSchemaValPtr(n_val, 0);
- retValue = gen_const_xmlChar_ptr_ptr(n_retValue, 1);
- ws = gen_xmlSchemaWhitespaceValueType(n_ws, 2);
-
- ret_val = xmlSchemaGetCanonValueWhtsp(val, (const xmlChar **)retValue, ws);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValPtr(n_val, val, 0);
- des_const_xmlChar_ptr_ptr(n_retValue, (const xmlChar **)retValue, 1);
- des_xmlSchemaWhitespaceValueType(n_ws, ws, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaGetCanonValueWhtsp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf(" %d", n_retValue);
- printf(" %d", n_ws);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaGetFacetValueAsULong(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- unsigned long ret_val;
- xmlSchemaFacetPtr facet; /* an schemas type facet */
- int n_facet;
-
- for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) {
- mem_base = xmlMemBlocks();
- facet = gen_xmlSchemaFacetPtr(n_facet, 0);
-
- ret_val = xmlSchemaGetFacetValueAsULong(facet);
- desret_unsigned_long(ret_val);
- call_tests++;
- des_xmlSchemaFacetPtr(n_facet, facet, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaGetFacetValueAsULong",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_facet);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaGetPredefinedType(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlSchemaTypePtr ret_val;
- xmlChar * name; /* the type name */
- int n_name;
- xmlChar * ns; /* the URI of the namespace usually "http://www.w3.org/2001/XMLSchema" */
- int n_ns;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ns = 0;n_ns < gen_nb_const_xmlChar_ptr;n_ns++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
- ns = gen_const_xmlChar_ptr(n_ns, 1);
-
- ret_val = xmlSchemaGetPredefinedType((const xmlChar *)name, (const xmlChar *)ns);
- desret_xmlSchemaTypePtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- des_const_xmlChar_ptr(n_ns, (const xmlChar *)ns, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaGetPredefinedType",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf(" %d", n_ns);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaGetValType(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlSchemaValType ret_val;
- xmlSchemaValPtr val; /* a schemas value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlSchemaValPtr(n_val, 0);
-
- ret_val = xmlSchemaGetValType(val);
- desret_xmlSchemaValType(ret_val);
- call_tests++;
- des_xmlSchemaValPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaGetValType",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaInitTypes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
-
-
- xmlSchemaInitTypes();
- call_tests++;
- xmlResetLastError();
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaIsBuiltInTypeFacet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaTypePtr type; /* the built-in type */
- int n_type;
- int facetType; /* the facet type */
- int n_facetType;
-
- for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) {
- for (n_facetType = 0;n_facetType < gen_nb_int;n_facetType++) {
- mem_base = xmlMemBlocks();
- type = gen_xmlSchemaTypePtr(n_type, 0);
- facetType = gen_int(n_facetType, 1);
-
- ret_val = xmlSchemaIsBuiltInTypeFacet(type, facetType);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaTypePtr(n_type, type, 0);
- des_int(n_facetType, facetType, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaIsBuiltInTypeFacet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_type);
- printf(" %d", n_facetType);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaNewFacet(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaNewNOTATIONValue(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaNewQNameValue(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaNewStringValue(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#define gen_nb_xmlSchemaValPtr_ptr 1
-static xmlSchemaValPtr * gen_xmlSchemaValPtr_ptr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlSchemaValPtr_ptr(int no ATTRIBUTE_UNUSED, xmlSchemaValPtr * val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlSchemaValPredefTypeNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaTypePtr type; /* the predefined type */
- int n_type;
- xmlChar * value; /* the value to check */
- int n_value;
- xmlSchemaValPtr * val; /* the return computed value */
- int n_val;
- xmlNodePtr node; /* the node containing the value */
- int n_node;
-
- for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr_ptr;n_val++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- type = gen_xmlSchemaTypePtr(n_type, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
- val = gen_xmlSchemaValPtr_ptr(n_val, 2);
- node = gen_xmlNodePtr(n_node, 3);
-
- ret_val = xmlSchemaValPredefTypeNode(type, (const xmlChar *)value, val, node);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaTypePtr(n_type, type, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- des_xmlSchemaValPtr_ptr(n_val, val, 2);
- des_xmlNodePtr(n_node, node, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValPredefTypeNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_type);
- printf(" %d", n_value);
- printf(" %d", n_val);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValPredefTypeNodeNoNorm(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaTypePtr type; /* the predefined type */
- int n_type;
- xmlChar * value; /* the value to check */
- int n_value;
- xmlSchemaValPtr * val; /* the return computed value */
- int n_val;
- xmlNodePtr node; /* the node containing the value */
- int n_node;
-
- for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr_ptr;n_val++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- type = gen_xmlSchemaTypePtr(n_type, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
- val = gen_xmlSchemaValPtr_ptr(n_val, 2);
- node = gen_xmlNodePtr(n_node, 3);
-
- ret_val = xmlSchemaValPredefTypeNodeNoNorm(type, (const xmlChar *)value, val, node);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaTypePtr(n_type, type, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- des_xmlSchemaValPtr_ptr(n_val, val, 2);
- des_xmlNodePtr(n_node, node, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValPredefTypeNodeNoNorm",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_type);
- printf(" %d", n_value);
- printf(" %d", n_val);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateFacet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaTypePtr base; /* the base type */
- int n_base;
- xmlSchemaFacetPtr facet; /* the facet to check */
- int n_facet;
- xmlChar * value; /* the lexical repr of the value to validate */
- int n_value;
- xmlSchemaValPtr val; /* the precomputed value */
- int n_val;
-
- for (n_base = 0;n_base < gen_nb_xmlSchemaTypePtr;n_base++) {
- for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- mem_base = xmlMemBlocks();
- base = gen_xmlSchemaTypePtr(n_base, 0);
- facet = gen_xmlSchemaFacetPtr(n_facet, 1);
- value = gen_const_xmlChar_ptr(n_value, 2);
- val = gen_xmlSchemaValPtr(n_val, 3);
-
- ret_val = xmlSchemaValidateFacet(base, facet, (const xmlChar *)value, val);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaTypePtr(n_base, base, 0);
- des_xmlSchemaFacetPtr(n_facet, facet, 1);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2);
- des_xmlSchemaValPtr(n_val, val, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateFacet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_base);
- printf(" %d", n_facet);
- printf(" %d", n_value);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateFacetWhtsp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaFacetPtr facet; /* the facet to check */
- int n_facet;
- xmlSchemaWhitespaceValueType fws; /* the whitespace type of the facet's value */
- int n_fws;
- xmlSchemaValType valType; /* the built-in type of the value */
- int n_valType;
- xmlChar * value; /* the lexical (or normalized for pattern) repr of the value to validate */
- int n_value;
- xmlSchemaValPtr val; /* the precomputed value */
- int n_val;
- xmlSchemaWhitespaceValueType ws; /* the whitespace type of the value */
- int n_ws;
-
- for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) {
- for (n_fws = 0;n_fws < gen_nb_xmlSchemaWhitespaceValueType;n_fws++) {
- for (n_valType = 0;n_valType < gen_nb_xmlSchemaValType;n_valType++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- for (n_ws = 0;n_ws < gen_nb_xmlSchemaWhitespaceValueType;n_ws++) {
- mem_base = xmlMemBlocks();
- facet = gen_xmlSchemaFacetPtr(n_facet, 0);
- fws = gen_xmlSchemaWhitespaceValueType(n_fws, 1);
- valType = gen_xmlSchemaValType(n_valType, 2);
- value = gen_const_xmlChar_ptr(n_value, 3);
- val = gen_xmlSchemaValPtr(n_val, 4);
- ws = gen_xmlSchemaWhitespaceValueType(n_ws, 5);
-
- ret_val = xmlSchemaValidateFacetWhtsp(facet, fws, valType, (const xmlChar *)value, val, ws);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaFacetPtr(n_facet, facet, 0);
- des_xmlSchemaWhitespaceValueType(n_fws, fws, 1);
- des_xmlSchemaValType(n_valType, valType, 2);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 3);
- des_xmlSchemaValPtr(n_val, val, 4);
- des_xmlSchemaWhitespaceValueType(n_ws, ws, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateFacetWhtsp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_facet);
- printf(" %d", n_fws);
- printf(" %d", n_valType);
- printf(" %d", n_value);
- printf(" %d", n_val);
- printf(" %d", n_ws);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateLengthFacet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaTypePtr type; /* the built-in type */
- int n_type;
- xmlSchemaFacetPtr facet; /* the facet to check */
- int n_facet;
- xmlChar * value; /* the lexical repr. of the value to be validated */
- int n_value;
- xmlSchemaValPtr val; /* the precomputed value */
- int n_val;
- unsigned long * length; /* the actual length of the value */
- int n_length;
-
- for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) {
- for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- for (n_length = 0;n_length < gen_nb_unsigned_long_ptr;n_length++) {
- mem_base = xmlMemBlocks();
- type = gen_xmlSchemaTypePtr(n_type, 0);
- facet = gen_xmlSchemaFacetPtr(n_facet, 1);
- value = gen_const_xmlChar_ptr(n_value, 2);
- val = gen_xmlSchemaValPtr(n_val, 3);
- length = gen_unsigned_long_ptr(n_length, 4);
-
- ret_val = xmlSchemaValidateLengthFacet(type, facet, (const xmlChar *)value, val, length);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaTypePtr(n_type, type, 0);
- des_xmlSchemaFacetPtr(n_facet, facet, 1);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2);
- des_xmlSchemaValPtr(n_val, val, 3);
- des_unsigned_long_ptr(n_length, length, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateLengthFacet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_type);
- printf(" %d", n_facet);
- printf(" %d", n_value);
- printf(" %d", n_val);
- printf(" %d", n_length);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateLengthFacetWhtsp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaFacetPtr facet; /* the facet to check */
- int n_facet;
- xmlSchemaValType valType; /* the built-in type */
- int n_valType;
- xmlChar * value; /* the lexical repr. of the value to be validated */
- int n_value;
- xmlSchemaValPtr val; /* the precomputed value */
- int n_val;
- unsigned long * length; /* the actual length of the value */
- int n_length;
- xmlSchemaWhitespaceValueType ws; /* the whitespace type of the value */
- int n_ws;
-
- for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) {
- for (n_valType = 0;n_valType < gen_nb_xmlSchemaValType;n_valType++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- for (n_length = 0;n_length < gen_nb_unsigned_long_ptr;n_length++) {
- for (n_ws = 0;n_ws < gen_nb_xmlSchemaWhitespaceValueType;n_ws++) {
- mem_base = xmlMemBlocks();
- facet = gen_xmlSchemaFacetPtr(n_facet, 0);
- valType = gen_xmlSchemaValType(n_valType, 1);
- value = gen_const_xmlChar_ptr(n_value, 2);
- val = gen_xmlSchemaValPtr(n_val, 3);
- length = gen_unsigned_long_ptr(n_length, 4);
- ws = gen_xmlSchemaWhitespaceValueType(n_ws, 5);
-
- ret_val = xmlSchemaValidateLengthFacetWhtsp(facet, valType, (const xmlChar *)value, val, length, ws);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaFacetPtr(n_facet, facet, 0);
- des_xmlSchemaValType(n_valType, valType, 1);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 2);
- des_xmlSchemaValPtr(n_val, val, 3);
- des_unsigned_long_ptr(n_length, length, 4);
- des_xmlSchemaWhitespaceValueType(n_ws, ws, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateLengthFacetWhtsp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_facet);
- printf(" %d", n_valType);
- printf(" %d", n_value);
- printf(" %d", n_val);
- printf(" %d", n_length);
- printf(" %d", n_ws);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidateListSimpleTypeFacet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaFacetPtr facet; /* the facet to check */
- int n_facet;
- xmlChar * value; /* the lexical repr of the value to validate */
- int n_value;
- unsigned long actualLen; /* the number of list items */
- int n_actualLen;
- unsigned long * expectedLen; /* the resulting expected number of list items */
- int n_expectedLen;
-
- for (n_facet = 0;n_facet < gen_nb_xmlSchemaFacetPtr;n_facet++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_actualLen = 0;n_actualLen < gen_nb_unsigned_long;n_actualLen++) {
- for (n_expectedLen = 0;n_expectedLen < gen_nb_unsigned_long_ptr;n_expectedLen++) {
- mem_base = xmlMemBlocks();
- facet = gen_xmlSchemaFacetPtr(n_facet, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
- actualLen = gen_unsigned_long(n_actualLen, 2);
- expectedLen = gen_unsigned_long_ptr(n_expectedLen, 3);
-
- ret_val = xmlSchemaValidateListSimpleTypeFacet(facet, (const xmlChar *)value, actualLen, expectedLen);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaFacetPtr(n_facet, facet, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- des_unsigned_long(n_actualLen, actualLen, 2);
- des_unsigned_long_ptr(n_expectedLen, expectedLen, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidateListSimpleTypeFacet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_facet);
- printf(" %d", n_value);
- printf(" %d", n_actualLen);
- printf(" %d", n_expectedLen);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValidatePredefinedType(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaTypePtr type; /* the predefined type */
- int n_type;
- xmlChar * value; /* the value to check */
- int n_value;
- xmlSchemaValPtr * val; /* the return computed value */
- int n_val;
-
- for (n_type = 0;n_type < gen_nb_xmlSchemaTypePtr;n_type++) {
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- type = gen_xmlSchemaTypePtr(n_type, 0);
- value = gen_const_xmlChar_ptr(n_value, 1);
- val = gen_xmlSchemaValPtr_ptr(n_val, 2);
-
- ret_val = xmlSchemaValidatePredefinedType(type, (const xmlChar *)value, val);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaTypePtr(n_type, type, 0);
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 1);
- des_xmlSchemaValPtr_ptr(n_val, val, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValidatePredefinedType",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_type);
- printf(" %d", n_value);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValueAppend(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValPtr prev; /* the value */
- int n_prev;
- xmlSchemaValPtr cur; /* the value to be appended */
- int n_cur;
-
- for (n_prev = 0;n_prev < gen_nb_xmlSchemaValPtr;n_prev++) {
- for (n_cur = 0;n_cur < gen_nb_xmlSchemaValPtr;n_cur++) {
- mem_base = xmlMemBlocks();
- prev = gen_xmlSchemaValPtr(n_prev, 0);
- cur = gen_xmlSchemaValPtr(n_cur, 1);
-
- ret_val = xmlSchemaValueAppend(prev, cur);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValPtr(n_prev, prev, 0);
- des_xmlSchemaValPtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValueAppend",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_prev);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValueGetAsBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- xmlSchemaValPtr val; /* the value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlSchemaValPtr(n_val, 0);
-
- ret_val = xmlSchemaValueGetAsBoolean(val);
- desret_int(ret_val);
- call_tests++;
- des_xmlSchemaValPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValueGetAsBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValueGetAsString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlSchemaValPtr val; /* the value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlSchemaValPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlSchemaValPtr(n_val, 0);
-
- ret_val = xmlSchemaValueGetAsString(val);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlSchemaValPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaValueGetAsString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaValueGetNext(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlSchemaWhiteSpaceReplace(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlChar * value; /* a value */
- int n_value;
-
- for (n_value = 0;n_value < gen_nb_const_xmlChar_ptr;n_value++) {
- mem_base = xmlMemBlocks();
- value = gen_const_xmlChar_ptr(n_value, 0);
-
- ret_val = xmlSchemaWhiteSpaceReplace((const xmlChar *)value);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_value, (const xmlChar *)value, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlSchemaWhiteSpaceReplace",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_value);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xmlschemastypes(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlschemastypes : 26 of 34 functions ...\n");
- test_ret += test_xmlSchemaCheckFacet();
- test_ret += test_xmlSchemaCleanupTypes();
- test_ret += test_xmlSchemaCollapseString();
- test_ret += test_xmlSchemaCompareValues();
- test_ret += test_xmlSchemaCompareValuesWhtsp();
- test_ret += test_xmlSchemaCopyValue();
- test_ret += test_xmlSchemaGetBuiltInListSimpleTypeItemType();
- test_ret += test_xmlSchemaGetBuiltInType();
- test_ret += test_xmlSchemaGetCanonValue();
- test_ret += test_xmlSchemaGetCanonValueWhtsp();
- test_ret += test_xmlSchemaGetFacetValueAsULong();
- test_ret += test_xmlSchemaGetPredefinedType();
- test_ret += test_xmlSchemaGetValType();
- test_ret += test_xmlSchemaInitTypes();
- test_ret += test_xmlSchemaIsBuiltInTypeFacet();
- test_ret += test_xmlSchemaNewFacet();
- test_ret += test_xmlSchemaNewNOTATIONValue();
- test_ret += test_xmlSchemaNewQNameValue();
- test_ret += test_xmlSchemaNewStringValue();
- test_ret += test_xmlSchemaValPredefTypeNode();
- test_ret += test_xmlSchemaValPredefTypeNodeNoNorm();
- test_ret += test_xmlSchemaValidateFacet();
- test_ret += test_xmlSchemaValidateFacetWhtsp();
- test_ret += test_xmlSchemaValidateLengthFacet();
- test_ret += test_xmlSchemaValidateLengthFacetWhtsp();
- test_ret += test_xmlSchemaValidateListSimpleTypeFacet();
- test_ret += test_xmlSchemaValidatePredefinedType();
- test_ret += test_xmlSchemaValueAppend();
- test_ret += test_xmlSchemaValueGetAsBoolean();
- test_ret += test_xmlSchemaValueGetAsString();
- test_ret += test_xmlSchemaValueGetNext();
- test_ret += test_xmlSchemaWhiteSpaceReplace();
-
- if (test_ret != 0)
- printf("Module xmlschemastypes: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlCharStrdup(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- char * cur; /* the input char * */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_const_char_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_char_ptr(n_cur, 0);
-
- ret_val = xmlCharStrdup((const char *)cur);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_char_ptr(n_cur, (const char *)cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCharStrdup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCharStrndup(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- char * cur; /* the input char * */
- int n_cur;
- int len; /* the len of @cur */
- int n_len;
-
- for (n_cur = 0;n_cur < gen_nb_const_char_ptr;n_cur++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_char_ptr(n_cur, 0);
- len = gen_int(n_len, 1);
- if ((cur != NULL) &&
- (len > (int) strlen((const char *) cur) + 1))
- continue;
-
- ret_val = xmlCharStrndup((const char *)cur, len);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_char_ptr(n_cur, (const char *)cur, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCharStrndup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlCheckUTF8(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned char * utf; /* Pointer to putative UTF-8 encoded string. */
- int n_utf;
-
- for (n_utf = 0;n_utf < gen_nb_const_unsigned_char_ptr;n_utf++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_unsigned_char_ptr(n_utf, 0);
-
- ret_val = xmlCheckUTF8((const unsigned char *)utf);
- desret_int(ret_val);
- call_tests++;
- des_const_unsigned_char_ptr(n_utf, (const unsigned char *)utf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlCheckUTF8",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlGetUTF8Char(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- unsigned char * utf; /* a sequence of UTF-8 encoded bytes */
- int n_utf;
- int * len; /* a pointer to the minimum number of bytes present in the sequence. This is used to assure the next character is completely contained within the sequence. */
- int n_len;
-
- for (n_utf = 0;n_utf < gen_nb_const_unsigned_char_ptr;n_utf++) {
- for (n_len = 0;n_len < gen_nb_int_ptr;n_len++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_unsigned_char_ptr(n_utf, 0);
- len = gen_int_ptr(n_len, 1);
-
- ret_val = xmlGetUTF8Char((const unsigned char *)utf, len);
- desret_int(ret_val);
- call_tests++;
- des_const_unsigned_char_ptr(n_utf, (const unsigned char *)utf, 0);
- des_int_ptr(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlGetUTF8Char",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrEqual(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * str1; /* the first xmlChar * */
- int n_str1;
- xmlChar * str2; /* the second xmlChar * */
- int n_str2;
-
- for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) {
- for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) {
- mem_base = xmlMemBlocks();
- str1 = gen_const_xmlChar_ptr(n_str1, 0);
- str2 = gen_const_xmlChar_ptr(n_str2, 1);
-
- ret_val = xmlStrEqual((const xmlChar *)str1, (const xmlChar *)str2);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0);
- des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrEqual",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str1);
- printf(" %d", n_str2);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrPrintf(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlStrQEqual(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * pref; /* the prefix of the QName */
- int n_pref;
- xmlChar * name; /* the localname of the QName */
- int n_name;
- xmlChar * str; /* the second xmlChar * */
- int n_str;
-
- for (n_pref = 0;n_pref < gen_nb_const_xmlChar_ptr;n_pref++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- pref = gen_const_xmlChar_ptr(n_pref, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- str = gen_const_xmlChar_ptr(n_str, 2);
-
- ret_val = xmlStrQEqual((const xmlChar *)pref, (const xmlChar *)name, (const xmlChar *)str);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_pref, (const xmlChar *)pref, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrQEqual",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_pref);
- printf(" %d", n_name);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrVPrintf(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlStrcasecmp(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * str1; /* the first xmlChar * */
- int n_str1;
- xmlChar * str2; /* the second xmlChar * */
- int n_str2;
-
- for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) {
- for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) {
- mem_base = xmlMemBlocks();
- str1 = gen_const_xmlChar_ptr(n_str1, 0);
- str2 = gen_const_xmlChar_ptr(n_str2, 1);
-
- ret_val = xmlStrcasecmp((const xmlChar *)str1, (const xmlChar *)str2);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0);
- des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrcasecmp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str1);
- printf(" %d", n_str2);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrcasestr(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlChar * str; /* the xmlChar * array (haystack) */
- int n_str;
- xmlChar * val; /* the xmlChar to search (needle) */
- int n_val;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
- val = gen_const_xmlChar_ptr(n_val, 1);
-
- ret_val = xmlStrcasestr((const xmlChar *)str, (const xmlChar *)val);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrcasestr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrchr(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlChar * str; /* the xmlChar * array */
- int n_str;
- xmlChar val; /* the xmlChar to search */
- int n_val;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_val = 0;n_val < gen_nb_xmlChar;n_val++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
- val = gen_xmlChar(n_val, 1);
-
- ret_val = xmlStrchr((const xmlChar *)str, val);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- des_xmlChar(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrchr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrcmp(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * str1; /* the first xmlChar * */
- int n_str1;
- xmlChar * str2; /* the second xmlChar * */
- int n_str2;
-
- for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) {
- for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) {
- mem_base = xmlMemBlocks();
- str1 = gen_const_xmlChar_ptr(n_str1, 0);
- str2 = gen_const_xmlChar_ptr(n_str2, 1);
-
- ret_val = xmlStrcmp((const xmlChar *)str1, (const xmlChar *)str2);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0);
- des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrcmp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str1);
- printf(" %d", n_str2);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrdup(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * cur; /* the input xmlChar * */
- int n_cur;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlChar_ptr(n_cur, 0);
-
- ret_val = xmlStrdup((const xmlChar *)cur);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrdup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrlen(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * str; /* the xmlChar * array */
- int n_str;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
-
- ret_val = xmlStrlen((const xmlChar *)str);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrlen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrncasecmp(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * str1; /* the first xmlChar * */
- int n_str1;
- xmlChar * str2; /* the second xmlChar * */
- int n_str2;
- int len; /* the max comparison length */
- int n_len;
-
- for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) {
- for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- str1 = gen_const_xmlChar_ptr(n_str1, 0);
- str2 = gen_const_xmlChar_ptr(n_str2, 1);
- len = gen_int(n_len, 2);
- if ((str2 != NULL) &&
- (len > (int) strlen((const char *) str2) + 1))
- continue;
-
- ret_val = xmlStrncasecmp((const xmlChar *)str1, (const xmlChar *)str2, len);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0);
- des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrncasecmp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str1);
- printf(" %d", n_str2);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrncatNew(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * str1; /* first xmlChar string */
- int n_str1;
- xmlChar * str2; /* second xmlChar string */
- int n_str2;
- int len; /* the len of @str2 or < 0 */
- int n_len;
-
- for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) {
- for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- str1 = gen_const_xmlChar_ptr(n_str1, 0);
- str2 = gen_const_xmlChar_ptr(n_str2, 1);
- len = gen_int(n_len, 2);
- if ((str2 != NULL) &&
- (len > (int) strlen((const char *) str2) + 1))
- continue;
-
- ret_val = xmlStrncatNew((const xmlChar *)str1, (const xmlChar *)str2, len);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0);
- des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrncatNew",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str1);
- printf(" %d", n_str2);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrncmp(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * str1; /* the first xmlChar * */
- int n_str1;
- xmlChar * str2; /* the second xmlChar * */
- int n_str2;
- int len; /* the max comparison length */
- int n_len;
-
- for (n_str1 = 0;n_str1 < gen_nb_const_xmlChar_ptr;n_str1++) {
- for (n_str2 = 0;n_str2 < gen_nb_const_xmlChar_ptr;n_str2++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- str1 = gen_const_xmlChar_ptr(n_str1, 0);
- str2 = gen_const_xmlChar_ptr(n_str2, 1);
- len = gen_int(n_len, 2);
- if ((str2 != NULL) &&
- (len > (int) strlen((const char *) str2) + 1))
- continue;
-
- ret_val = xmlStrncmp((const xmlChar *)str1, (const xmlChar *)str2, len);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str1, (const xmlChar *)str1, 0);
- des_const_xmlChar_ptr(n_str2, (const xmlChar *)str2, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrncmp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str1);
- printf(" %d", n_str2);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrndup(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * cur; /* the input xmlChar * */
- int n_cur;
- int len; /* the len of @cur */
- int n_len;
-
- for (n_cur = 0;n_cur < gen_nb_const_xmlChar_ptr;n_cur++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- cur = gen_const_xmlChar_ptr(n_cur, 0);
- len = gen_int(n_len, 1);
- if ((cur != NULL) &&
- (len > (int) strlen((const char *) cur) + 1))
- continue;
-
- ret_val = xmlStrndup((const xmlChar *)cur, len);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_cur, (const xmlChar *)cur, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrndup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrstr(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlChar * str; /* the xmlChar * array (haystack) */
- int n_str;
- xmlChar * val; /* the xmlChar to search (needle) */
- int n_val;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
- val = gen_const_xmlChar_ptr(n_val, 1);
-
- ret_val = xmlStrstr((const xmlChar *)str, (const xmlChar *)val);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrstr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlStrsub(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * str; /* the xmlChar * array (haystack) */
- int n_str;
- int start; /* the index of the first char (zero based) */
- int n_start;
- int len; /* the length of the substring */
- int n_len;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_start = 0;n_start < gen_nb_int;n_start++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
- start = gen_int(n_start, 1);
- len = gen_int(n_len, 2);
- if ((str != NULL) &&
- (start > (int) strlen((const char *) str) + 1))
- continue;
- if ((str != NULL) &&
- (len > (int) strlen((const char *) str) + 1))
- continue;
-
- ret_val = xmlStrsub((const xmlChar *)str, start, len);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- des_int(n_start, start, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlStrsub",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf(" %d", n_start);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUTF8Charcmp(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * utf1; /* pointer to first UTF8 char */
- int n_utf1;
- xmlChar * utf2; /* pointer to second UTF8 char */
- int n_utf2;
-
- for (n_utf1 = 0;n_utf1 < gen_nb_const_xmlChar_ptr;n_utf1++) {
- for (n_utf2 = 0;n_utf2 < gen_nb_const_xmlChar_ptr;n_utf2++) {
- mem_base = xmlMemBlocks();
- utf1 = gen_const_xmlChar_ptr(n_utf1, 0);
- utf2 = gen_const_xmlChar_ptr(n_utf2, 1);
-
- ret_val = xmlUTF8Charcmp((const xmlChar *)utf1, (const xmlChar *)utf2);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_utf1, (const xmlChar *)utf1, 0);
- des_const_xmlChar_ptr(n_utf2, (const xmlChar *)utf2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUTF8Charcmp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf1);
- printf(" %d", n_utf2);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUTF8Size(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * utf; /* pointer to the UTF8 character */
- int n_utf;
-
- for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_xmlChar_ptr(n_utf, 0);
-
- ret_val = xmlUTF8Size((const xmlChar *)utf);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUTF8Size",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUTF8Strlen(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * utf; /* a sequence of UTF-8 encoded bytes */
- int n_utf;
-
- for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_xmlChar_ptr(n_utf, 0);
-
- ret_val = xmlUTF8Strlen((const xmlChar *)utf);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUTF8Strlen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf("\n");
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUTF8Strloc(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * utf; /* the input UTF8 * */
- int n_utf;
- xmlChar * utfchar; /* the UTF8 character to be found */
- int n_utfchar;
-
- for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) {
- for (n_utfchar = 0;n_utfchar < gen_nb_const_xmlChar_ptr;n_utfchar++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_xmlChar_ptr(n_utf, 0);
- utfchar = gen_const_xmlChar_ptr(n_utfchar, 1);
-
- ret_val = xmlUTF8Strloc((const xmlChar *)utf, (const xmlChar *)utfchar);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0);
- des_const_xmlChar_ptr(n_utfchar, (const xmlChar *)utfchar, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUTF8Strloc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf(" %d", n_utfchar);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUTF8Strndup(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * utf; /* the input UTF8 * */
- int n_utf;
- int len; /* the len of @utf (in chars) */
- int n_len;
-
- for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_xmlChar_ptr(n_utf, 0);
- len = gen_int(n_len, 1);
- if ((utf != NULL) &&
- (len > (int) strlen((const char *) utf) + 1))
- continue;
-
- ret_val = xmlUTF8Strndup((const xmlChar *)utf, len);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUTF8Strndup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUTF8Strpos(void) {
- int test_ret = 0;
-
- int mem_base;
- const xmlChar * ret_val;
- xmlChar * utf; /* the input UTF8 * */
- int n_utf;
- int pos; /* the position of the desired UTF8 char (in chars) */
- int n_pos;
-
- for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) {
- for (n_pos = 0;n_pos < gen_nb_int;n_pos++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_xmlChar_ptr(n_utf, 0);
- pos = gen_int(n_pos, 1);
-
- ret_val = xmlUTF8Strpos((const xmlChar *)utf, pos);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0);
- des_int(n_pos, pos, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUTF8Strpos",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf(" %d", n_pos);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUTF8Strsize(void) {
- int test_ret = 0;
-
- int mem_base;
- int ret_val;
- xmlChar * utf; /* a sequence of UTF-8 encoded bytes */
- int n_utf;
- int len; /* the number of characters in the array */
- int n_len;
-
- for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_xmlChar_ptr(n_utf, 0);
- len = gen_int(n_len, 1);
- if ((utf != NULL) &&
- (len > (int) strlen((const char *) utf) + 1))
- continue;
-
- ret_val = xmlUTF8Strsize((const xmlChar *)utf, len);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0);
- des_int(n_len, len, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUTF8Strsize",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUTF8Strsub(void) {
- int test_ret = 0;
-
- int mem_base;
- xmlChar * ret_val;
- xmlChar * utf; /* a sequence of UTF-8 encoded bytes */
- int n_utf;
- int start; /* relative pos of first char */
- int n_start;
- int len; /* total number to copy */
- int n_len;
-
- for (n_utf = 0;n_utf < gen_nb_const_xmlChar_ptr;n_utf++) {
- for (n_start = 0;n_start < gen_nb_int;n_start++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- utf = gen_const_xmlChar_ptr(n_utf, 0);
- start = gen_int(n_start, 1);
- len = gen_int(n_len, 2);
- if ((utf != NULL) &&
- (start > (int) strlen((const char *) utf) + 1))
- continue;
- if ((utf != NULL) &&
- (len > (int) strlen((const char *) utf) + 1))
- continue;
-
- ret_val = xmlUTF8Strsub((const xmlChar *)utf, start, len);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_utf, (const xmlChar *)utf, 0);
- des_int(n_start, start, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUTF8Strsub",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_utf);
- printf(" %d", n_start);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-
- return(test_ret);
-}
-
-static int
-test_xmlstring(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlstring : 26 of 30 functions ...\n");
- test_ret += test_xmlCharStrdup();
- test_ret += test_xmlCharStrndup();
- test_ret += test_xmlCheckUTF8();
- test_ret += test_xmlGetUTF8Char();
- test_ret += test_xmlStrEqual();
- test_ret += test_xmlStrPrintf();
- test_ret += test_xmlStrQEqual();
- test_ret += test_xmlStrVPrintf();
- test_ret += test_xmlStrcasecmp();
- test_ret += test_xmlStrcasestr();
- test_ret += test_xmlStrchr();
- test_ret += test_xmlStrcmp();
- test_ret += test_xmlStrdup();
- test_ret += test_xmlStrlen();
- test_ret += test_xmlStrncasecmp();
- test_ret += test_xmlStrncatNew();
- test_ret += test_xmlStrncmp();
- test_ret += test_xmlStrndup();
- test_ret += test_xmlStrstr();
- test_ret += test_xmlStrsub();
- test_ret += test_xmlUTF8Charcmp();
- test_ret += test_xmlUTF8Size();
- test_ret += test_xmlUTF8Strlen();
- test_ret += test_xmlUTF8Strloc();
- test_ret += test_xmlUTF8Strndup();
- test_ret += test_xmlUTF8Strpos();
- test_ret += test_xmlUTF8Strsize();
- test_ret += test_xmlUTF8Strsub();
-
- if (test_ret != 0)
- printf("Module xmlstring: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlUCSIsAegeanNumbers(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsAegeanNumbers(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsAegeanNumbers",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsAlphabeticPresentationForms(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsAlphabeticPresentationForms(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsAlphabeticPresentationForms",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsArabic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsArabic(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsArabic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsArabicPresentationFormsA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsArabicPresentationFormsA(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsArabicPresentationFormsA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsArabicPresentationFormsB(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsArabicPresentationFormsB(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsArabicPresentationFormsB",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsArmenian(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsArmenian(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsArmenian",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsArrows(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsArrows(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsArrows",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBasicLatin(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsBasicLatin(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBasicLatin",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBengali(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsBengali(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBengali",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBlock(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
- char * block; /* UCS block name */
- int n_block;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- for (n_block = 0;n_block < gen_nb_const_char_ptr;n_block++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
- block = gen_const_char_ptr(n_block, 1);
-
- ret_val = xmlUCSIsBlock(code, (const char *)block);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- des_const_char_ptr(n_block, (const char *)block, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBlock",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf(" %d", n_block);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBlockElements(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsBlockElements(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBlockElements",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBopomofo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsBopomofo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBopomofo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBopomofoExtended(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsBopomofoExtended(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBopomofoExtended",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBoxDrawing(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsBoxDrawing(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBoxDrawing",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBraillePatterns(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsBraillePatterns(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBraillePatterns",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsBuhid(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsBuhid(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsBuhid",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsByzantineMusicalSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsByzantineMusicalSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsByzantineMusicalSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKCompatibility(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKCompatibility(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKCompatibility",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKCompatibilityForms(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKCompatibilityForms(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKCompatibilityForms",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKCompatibilityIdeographs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKCompatibilityIdeographs(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKCompatibilityIdeographs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKCompatibilityIdeographsSupplement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKCompatibilityIdeographsSupplement(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKCompatibilityIdeographsSupplement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKRadicalsSupplement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKRadicalsSupplement(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKRadicalsSupplement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKSymbolsandPunctuation(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKSymbolsandPunctuation(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKSymbolsandPunctuation",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKUnifiedIdeographs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKUnifiedIdeographs(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKUnifiedIdeographs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKUnifiedIdeographsExtensionA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKUnifiedIdeographsExtensionA(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKUnifiedIdeographsExtensionA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCJKUnifiedIdeographsExtensionB(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCJKUnifiedIdeographsExtensionB(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCJKUnifiedIdeographsExtensionB",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCat(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
- char * cat; /* UCS Category name */
- int n_cat;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- for (n_cat = 0;n_cat < gen_nb_const_char_ptr;n_cat++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
- cat = gen_const_char_ptr(n_cat, 1);
-
- ret_val = xmlUCSIsCat(code, (const char *)cat);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- des_const_char_ptr(n_cat, (const char *)cat, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf(" %d", n_cat);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatC(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatC(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatC",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatCc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatCc(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatCc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatCf(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatCf(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatCf",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatCo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatCo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatCo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatCs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatCs(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatCs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatL(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatL(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatL",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatLl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatLl(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatLl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatLm(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatLm(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatLm",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatLo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatLo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatLo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatLt(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatLt(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatLt",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatLu(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatLu(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatLu",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatM(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatM(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatM",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatMc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatMc(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatMc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatMe(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatMe(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatMe",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatMn(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatMn(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatMn",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatN(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatN(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatN",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatNd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatNd(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatNd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatNl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatNl(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatNl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatNo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatNo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatNo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatP(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatP(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatP",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatPc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatPc(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatPc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatPd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatPd(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatPd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatPe(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatPe(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatPe",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatPf(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatPf(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatPf",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatPi(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatPi(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatPi",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatPo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatPo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatPo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatPs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatPs(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatPs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatS(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatS(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatS",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatSc(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatSc(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatSc",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatSk(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatSk(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatSk",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatSm(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatSm(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatSm",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatSo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatSo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatSo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatZ(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatZ(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatZ",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatZl(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatZl(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatZl",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatZp(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatZp(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatZp",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCatZs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCatZs(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCatZs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCherokee(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCherokee(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCherokee",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCombiningDiacriticalMarks(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCombiningDiacriticalMarks(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCombiningDiacriticalMarks",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCombiningDiacriticalMarksforSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCombiningDiacriticalMarksforSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCombiningDiacriticalMarksforSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCombiningHalfMarks(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCombiningHalfMarks(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCombiningHalfMarks",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCombiningMarksforSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCombiningMarksforSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCombiningMarksforSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsControlPictures(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsControlPictures(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsControlPictures",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCurrencySymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCurrencySymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCurrencySymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCypriotSyllabary(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCypriotSyllabary(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCypriotSyllabary",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCyrillic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCyrillic(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCyrillic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsCyrillicSupplement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsCyrillicSupplement(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsCyrillicSupplement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsDeseret(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsDeseret(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsDeseret",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsDevanagari(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsDevanagari(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsDevanagari",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsDingbats(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsDingbats(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsDingbats",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsEnclosedAlphanumerics(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsEnclosedAlphanumerics(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsEnclosedAlphanumerics",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsEnclosedCJKLettersandMonths(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsEnclosedCJKLettersandMonths(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsEnclosedCJKLettersandMonths",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsEthiopic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsEthiopic(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsEthiopic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGeneralPunctuation(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGeneralPunctuation(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGeneralPunctuation",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGeometricShapes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGeometricShapes(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGeometricShapes",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGeorgian(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGeorgian(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGeorgian",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGothic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGothic(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGothic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGreek(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGreek(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGreek",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGreekExtended(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGreekExtended(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGreekExtended",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGreekandCoptic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGreekandCoptic(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGreekandCoptic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGujarati(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGujarati(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGujarati",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsGurmukhi(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsGurmukhi(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsGurmukhi",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHalfwidthandFullwidthForms(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHalfwidthandFullwidthForms(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHalfwidthandFullwidthForms",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHangulCompatibilityJamo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHangulCompatibilityJamo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHangulCompatibilityJamo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHangulJamo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHangulJamo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHangulJamo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHangulSyllables(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHangulSyllables(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHangulSyllables",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHanunoo(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHanunoo(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHanunoo",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHebrew(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHebrew(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHebrew",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHighPrivateUseSurrogates(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHighPrivateUseSurrogates(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHighPrivateUseSurrogates",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHighSurrogates(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHighSurrogates(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHighSurrogates",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsHiragana(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsHiragana(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsHiragana",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsIPAExtensions(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsIPAExtensions(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsIPAExtensions",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsIdeographicDescriptionCharacters(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsIdeographicDescriptionCharacters(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsIdeographicDescriptionCharacters",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsKanbun(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsKanbun(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsKanbun",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsKangxiRadicals(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsKangxiRadicals(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsKangxiRadicals",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsKannada(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsKannada(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsKannada",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsKatakana(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsKatakana(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsKatakana",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsKatakanaPhoneticExtensions(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsKatakanaPhoneticExtensions(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsKatakanaPhoneticExtensions",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsKhmer(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsKhmer(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsKhmer",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsKhmerSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsKhmerSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsKhmerSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLao(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLao(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLao",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLatin1Supplement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLatin1Supplement(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLatin1Supplement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLatinExtendedA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLatinExtendedA(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLatinExtendedA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLatinExtendedAdditional(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLatinExtendedAdditional(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLatinExtendedAdditional",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLatinExtendedB(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLatinExtendedB(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLatinExtendedB",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLetterlikeSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLetterlikeSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLetterlikeSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLimbu(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLimbu(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLimbu",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLinearBIdeograms(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLinearBIdeograms(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLinearBIdeograms",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLinearBSyllabary(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLinearBSyllabary(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLinearBSyllabary",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsLowSurrogates(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsLowSurrogates(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsLowSurrogates",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMalayalam(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMalayalam(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMalayalam",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMathematicalAlphanumericSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMathematicalAlphanumericSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMathematicalAlphanumericSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMathematicalOperators(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMathematicalOperators(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMathematicalOperators",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMiscellaneousMathematicalSymbolsA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMiscellaneousMathematicalSymbolsA(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMiscellaneousMathematicalSymbolsA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMiscellaneousMathematicalSymbolsB(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMiscellaneousMathematicalSymbolsB(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMiscellaneousMathematicalSymbolsB",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMiscellaneousSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMiscellaneousSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMiscellaneousSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMiscellaneousSymbolsandArrows(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMiscellaneousSymbolsandArrows(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMiscellaneousSymbolsandArrows",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMiscellaneousTechnical(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMiscellaneousTechnical(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMiscellaneousTechnical",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMongolian(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMongolian(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMongolian",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMusicalSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMusicalSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMusicalSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsMyanmar(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsMyanmar(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsMyanmar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsNumberForms(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsNumberForms(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsNumberForms",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsOgham(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsOgham(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsOgham",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsOldItalic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsOldItalic(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsOldItalic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsOpticalCharacterRecognition(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsOpticalCharacterRecognition(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsOpticalCharacterRecognition",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsOriya(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsOriya(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsOriya",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsOsmanya(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsOsmanya(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsOsmanya",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsPhoneticExtensions(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsPhoneticExtensions(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsPhoneticExtensions",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsPrivateUse(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsPrivateUse(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsPrivateUse",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsPrivateUseArea(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsPrivateUseArea(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsPrivateUseArea",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsRunic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsRunic(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsRunic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsShavian(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsShavian(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsShavian",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSinhala(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSinhala(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSinhala",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSmallFormVariants(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSmallFormVariants(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSmallFormVariants",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSpacingModifierLetters(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSpacingModifierLetters(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSpacingModifierLetters",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSpecials(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSpecials(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSpecials",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSuperscriptsandSubscripts(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSuperscriptsandSubscripts(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSuperscriptsandSubscripts",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSupplementalArrowsA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSupplementalArrowsA(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSupplementalArrowsA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSupplementalArrowsB(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSupplementalArrowsB(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSupplementalArrowsB",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSupplementalMathematicalOperators(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSupplementalMathematicalOperators(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSupplementalMathematicalOperators",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSupplementaryPrivateUseAreaA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSupplementaryPrivateUseAreaA(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSupplementaryPrivateUseAreaA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSupplementaryPrivateUseAreaB(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSupplementaryPrivateUseAreaB(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSupplementaryPrivateUseAreaB",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsSyriac(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsSyriac(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsSyriac",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsTagalog(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsTagalog(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsTagalog",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsTagbanwa(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsTagbanwa(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsTagbanwa",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsTags(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsTags(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsTags",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsTaiLe(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsTaiLe(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsTaiLe",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsTaiXuanJingSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsTaiXuanJingSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsTaiXuanJingSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsTamil(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsTamil(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsTamil",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsTelugu(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsTelugu(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsTelugu",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsThaana(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsThaana(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsThaana",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsThai(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsThai(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsThai",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsTibetan(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsTibetan(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsTibetan",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsUgaritic(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsUgaritic(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsUgaritic",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsUnifiedCanadianAboriginalSyllabics(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsUnifiedCanadianAboriginalSyllabics(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsUnifiedCanadianAboriginalSyllabics",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsVariationSelectors(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsVariationSelectors(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsVariationSelectors",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsVariationSelectorsSupplement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsVariationSelectorsSupplement(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsVariationSelectorsSupplement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsYiRadicals(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsYiRadicals(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsYiRadicals",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsYiSyllables(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsYiSyllables(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsYiSyllables",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlUCSIsYijingHexagramSymbols(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_UNICODE_ENABLED)
- int mem_base;
- int ret_val;
- int code; /* UCS code point */
- int n_code;
-
- for (n_code = 0;n_code < gen_nb_int;n_code++) {
- mem_base = xmlMemBlocks();
- code = gen_int(n_code, 0);
-
- ret_val = xmlUCSIsYijingHexagramSymbols(code);
- desret_int(ret_val);
- call_tests++;
- des_int(n_code, code, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlUCSIsYijingHexagramSymbols",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_code);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xmlunicode(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlunicode : 166 of 166 functions ...\n");
- test_ret += test_xmlUCSIsAegeanNumbers();
- test_ret += test_xmlUCSIsAlphabeticPresentationForms();
- test_ret += test_xmlUCSIsArabic();
- test_ret += test_xmlUCSIsArabicPresentationFormsA();
- test_ret += test_xmlUCSIsArabicPresentationFormsB();
- test_ret += test_xmlUCSIsArmenian();
- test_ret += test_xmlUCSIsArrows();
- test_ret += test_xmlUCSIsBasicLatin();
- test_ret += test_xmlUCSIsBengali();
- test_ret += test_xmlUCSIsBlock();
- test_ret += test_xmlUCSIsBlockElements();
- test_ret += test_xmlUCSIsBopomofo();
- test_ret += test_xmlUCSIsBopomofoExtended();
- test_ret += test_xmlUCSIsBoxDrawing();
- test_ret += test_xmlUCSIsBraillePatterns();
- test_ret += test_xmlUCSIsBuhid();
- test_ret += test_xmlUCSIsByzantineMusicalSymbols();
- test_ret += test_xmlUCSIsCJKCompatibility();
- test_ret += test_xmlUCSIsCJKCompatibilityForms();
- test_ret += test_xmlUCSIsCJKCompatibilityIdeographs();
- test_ret += test_xmlUCSIsCJKCompatibilityIdeographsSupplement();
- test_ret += test_xmlUCSIsCJKRadicalsSupplement();
- test_ret += test_xmlUCSIsCJKSymbolsandPunctuation();
- test_ret += test_xmlUCSIsCJKUnifiedIdeographs();
- test_ret += test_xmlUCSIsCJKUnifiedIdeographsExtensionA();
- test_ret += test_xmlUCSIsCJKUnifiedIdeographsExtensionB();
- test_ret += test_xmlUCSIsCat();
- test_ret += test_xmlUCSIsCatC();
- test_ret += test_xmlUCSIsCatCc();
- test_ret += test_xmlUCSIsCatCf();
- test_ret += test_xmlUCSIsCatCo();
- test_ret += test_xmlUCSIsCatCs();
- test_ret += test_xmlUCSIsCatL();
- test_ret += test_xmlUCSIsCatLl();
- test_ret += test_xmlUCSIsCatLm();
- test_ret += test_xmlUCSIsCatLo();
- test_ret += test_xmlUCSIsCatLt();
- test_ret += test_xmlUCSIsCatLu();
- test_ret += test_xmlUCSIsCatM();
- test_ret += test_xmlUCSIsCatMc();
- test_ret += test_xmlUCSIsCatMe();
- test_ret += test_xmlUCSIsCatMn();
- test_ret += test_xmlUCSIsCatN();
- test_ret += test_xmlUCSIsCatNd();
- test_ret += test_xmlUCSIsCatNl();
- test_ret += test_xmlUCSIsCatNo();
- test_ret += test_xmlUCSIsCatP();
- test_ret += test_xmlUCSIsCatPc();
- test_ret += test_xmlUCSIsCatPd();
- test_ret += test_xmlUCSIsCatPe();
- test_ret += test_xmlUCSIsCatPf();
- test_ret += test_xmlUCSIsCatPi();
- test_ret += test_xmlUCSIsCatPo();
- test_ret += test_xmlUCSIsCatPs();
- test_ret += test_xmlUCSIsCatS();
- test_ret += test_xmlUCSIsCatSc();
- test_ret += test_xmlUCSIsCatSk();
- test_ret += test_xmlUCSIsCatSm();
- test_ret += test_xmlUCSIsCatSo();
- test_ret += test_xmlUCSIsCatZ();
- test_ret += test_xmlUCSIsCatZl();
- test_ret += test_xmlUCSIsCatZp();
- test_ret += test_xmlUCSIsCatZs();
- test_ret += test_xmlUCSIsCherokee();
- test_ret += test_xmlUCSIsCombiningDiacriticalMarks();
- test_ret += test_xmlUCSIsCombiningDiacriticalMarksforSymbols();
- test_ret += test_xmlUCSIsCombiningHalfMarks();
- test_ret += test_xmlUCSIsCombiningMarksforSymbols();
- test_ret += test_xmlUCSIsControlPictures();
- test_ret += test_xmlUCSIsCurrencySymbols();
- test_ret += test_xmlUCSIsCypriotSyllabary();
- test_ret += test_xmlUCSIsCyrillic();
- test_ret += test_xmlUCSIsCyrillicSupplement();
- test_ret += test_xmlUCSIsDeseret();
- test_ret += test_xmlUCSIsDevanagari();
- test_ret += test_xmlUCSIsDingbats();
- test_ret += test_xmlUCSIsEnclosedAlphanumerics();
- test_ret += test_xmlUCSIsEnclosedCJKLettersandMonths();
- test_ret += test_xmlUCSIsEthiopic();
- test_ret += test_xmlUCSIsGeneralPunctuation();
- test_ret += test_xmlUCSIsGeometricShapes();
- test_ret += test_xmlUCSIsGeorgian();
- test_ret += test_xmlUCSIsGothic();
- test_ret += test_xmlUCSIsGreek();
- test_ret += test_xmlUCSIsGreekExtended();
- test_ret += test_xmlUCSIsGreekandCoptic();
- test_ret += test_xmlUCSIsGujarati();
- test_ret += test_xmlUCSIsGurmukhi();
- test_ret += test_xmlUCSIsHalfwidthandFullwidthForms();
- test_ret += test_xmlUCSIsHangulCompatibilityJamo();
- test_ret += test_xmlUCSIsHangulJamo();
- test_ret += test_xmlUCSIsHangulSyllables();
- test_ret += test_xmlUCSIsHanunoo();
- test_ret += test_xmlUCSIsHebrew();
- test_ret += test_xmlUCSIsHighPrivateUseSurrogates();
- test_ret += test_xmlUCSIsHighSurrogates();
- test_ret += test_xmlUCSIsHiragana();
- test_ret += test_xmlUCSIsIPAExtensions();
- test_ret += test_xmlUCSIsIdeographicDescriptionCharacters();
- test_ret += test_xmlUCSIsKanbun();
- test_ret += test_xmlUCSIsKangxiRadicals();
- test_ret += test_xmlUCSIsKannada();
- test_ret += test_xmlUCSIsKatakana();
- test_ret += test_xmlUCSIsKatakanaPhoneticExtensions();
- test_ret += test_xmlUCSIsKhmer();
- test_ret += test_xmlUCSIsKhmerSymbols();
- test_ret += test_xmlUCSIsLao();
- test_ret += test_xmlUCSIsLatin1Supplement();
- test_ret += test_xmlUCSIsLatinExtendedA();
- test_ret += test_xmlUCSIsLatinExtendedAdditional();
- test_ret += test_xmlUCSIsLatinExtendedB();
- test_ret += test_xmlUCSIsLetterlikeSymbols();
- test_ret += test_xmlUCSIsLimbu();
- test_ret += test_xmlUCSIsLinearBIdeograms();
- test_ret += test_xmlUCSIsLinearBSyllabary();
- test_ret += test_xmlUCSIsLowSurrogates();
- test_ret += test_xmlUCSIsMalayalam();
- test_ret += test_xmlUCSIsMathematicalAlphanumericSymbols();
- test_ret += test_xmlUCSIsMathematicalOperators();
- test_ret += test_xmlUCSIsMiscellaneousMathematicalSymbolsA();
- test_ret += test_xmlUCSIsMiscellaneousMathematicalSymbolsB();
- test_ret += test_xmlUCSIsMiscellaneousSymbols();
- test_ret += test_xmlUCSIsMiscellaneousSymbolsandArrows();
- test_ret += test_xmlUCSIsMiscellaneousTechnical();
- test_ret += test_xmlUCSIsMongolian();
- test_ret += test_xmlUCSIsMusicalSymbols();
- test_ret += test_xmlUCSIsMyanmar();
- test_ret += test_xmlUCSIsNumberForms();
- test_ret += test_xmlUCSIsOgham();
- test_ret += test_xmlUCSIsOldItalic();
- test_ret += test_xmlUCSIsOpticalCharacterRecognition();
- test_ret += test_xmlUCSIsOriya();
- test_ret += test_xmlUCSIsOsmanya();
- test_ret += test_xmlUCSIsPhoneticExtensions();
- test_ret += test_xmlUCSIsPrivateUse();
- test_ret += test_xmlUCSIsPrivateUseArea();
- test_ret += test_xmlUCSIsRunic();
- test_ret += test_xmlUCSIsShavian();
- test_ret += test_xmlUCSIsSinhala();
- test_ret += test_xmlUCSIsSmallFormVariants();
- test_ret += test_xmlUCSIsSpacingModifierLetters();
- test_ret += test_xmlUCSIsSpecials();
- test_ret += test_xmlUCSIsSuperscriptsandSubscripts();
- test_ret += test_xmlUCSIsSupplementalArrowsA();
- test_ret += test_xmlUCSIsSupplementalArrowsB();
- test_ret += test_xmlUCSIsSupplementalMathematicalOperators();
- test_ret += test_xmlUCSIsSupplementaryPrivateUseAreaA();
- test_ret += test_xmlUCSIsSupplementaryPrivateUseAreaB();
- test_ret += test_xmlUCSIsSyriac();
- test_ret += test_xmlUCSIsTagalog();
- test_ret += test_xmlUCSIsTagbanwa();
- test_ret += test_xmlUCSIsTags();
- test_ret += test_xmlUCSIsTaiLe();
- test_ret += test_xmlUCSIsTaiXuanJingSymbols();
- test_ret += test_xmlUCSIsTamil();
- test_ret += test_xmlUCSIsTelugu();
- test_ret += test_xmlUCSIsThaana();
- test_ret += test_xmlUCSIsThai();
- test_ret += test_xmlUCSIsTibetan();
- test_ret += test_xmlUCSIsUgaritic();
- test_ret += test_xmlUCSIsUnifiedCanadianAboriginalSyllabics();
- test_ret += test_xmlUCSIsVariationSelectors();
- test_ret += test_xmlUCSIsVariationSelectorsSupplement();
- test_ret += test_xmlUCSIsYiRadicals();
- test_ret += test_xmlUCSIsYiSyllables();
- test_ret += test_xmlUCSIsYijingHexagramSymbols();
-
- if (test_ret != 0)
- printf("Module xmlunicode: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlNewTextWriter(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- xmlTextWriterPtr ret_val;
- xmlOutputBufferPtr out; /* an xmlOutputBufferPtr */
- int n_out;
-
- for (n_out = 0;n_out < gen_nb_xmlOutputBufferPtr;n_out++) {
- mem_base = xmlMemBlocks();
- out = gen_xmlOutputBufferPtr(n_out, 0);
-
- ret_val = xmlNewTextWriter(out);
- if (ret_val != NULL) out = NULL;
- desret_xmlTextWriterPtr(ret_val);
- call_tests++;
- des_xmlOutputBufferPtr(n_out, out, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextWriter",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_out);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewTextWriterFilename(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- xmlTextWriterPtr ret_val;
- const char * uri; /* the URI of the resource for the output */
- int n_uri;
- int compression; /* compress the output? */
- int n_compression;
-
- for (n_uri = 0;n_uri < gen_nb_fileoutput;n_uri++) {
- for (n_compression = 0;n_compression < gen_nb_int;n_compression++) {
- mem_base = xmlMemBlocks();
- uri = gen_fileoutput(n_uri, 0);
- compression = gen_int(n_compression, 1);
-
- ret_val = xmlNewTextWriterFilename(uri, compression);
- desret_xmlTextWriterPtr(ret_val);
- call_tests++;
- des_fileoutput(n_uri, uri, 0);
- des_int(n_compression, compression, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextWriterFilename",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_uri);
- printf(" %d", n_compression);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewTextWriterMemory(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- xmlTextWriterPtr ret_val;
- xmlBufferPtr buf; /* xmlBufferPtr */
- int n_buf;
- int compression; /* compress the output? */
- int n_compression;
-
- for (n_buf = 0;n_buf < gen_nb_xmlBufferPtr;n_buf++) {
- for (n_compression = 0;n_compression < gen_nb_int;n_compression++) {
- mem_base = xmlMemBlocks();
- buf = gen_xmlBufferPtr(n_buf, 0);
- compression = gen_int(n_compression, 1);
-
- ret_val = xmlNewTextWriterMemory(buf, compression);
- desret_xmlTextWriterPtr(ret_val);
- call_tests++;
- des_xmlBufferPtr(n_buf, buf, 0);
- des_int(n_compression, compression, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextWriterMemory",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_buf);
- printf(" %d", n_compression);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewTextWriterPushParser(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- xmlTextWriterPtr ret_val;
- xmlParserCtxtPtr ctxt; /* xmlParserCtxtPtr to hold the new XML document tree */
- int n_ctxt;
- int compression; /* compress the output? */
- int n_compression;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlParserCtxtPtr;n_ctxt++) {
- for (n_compression = 0;n_compression < gen_nb_int;n_compression++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlParserCtxtPtr(n_ctxt, 0);
- compression = gen_int(n_compression, 1);
-
- ret_val = xmlNewTextWriterPushParser(ctxt, compression);
- if (ctxt != NULL) {xmlFreeDoc(ctxt->myDoc); ctxt->myDoc = NULL;} if (ret_val != NULL) ctxt = NULL;
- desret_xmlTextWriterPtr(ret_val);
- call_tests++;
- des_xmlParserCtxtPtr(n_ctxt, ctxt, 0);
- des_int(n_compression, compression, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextWriterPushParser",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_compression);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlNewTextWriterTree(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- xmlTextWriterPtr ret_val;
- xmlDocPtr doc; /* xmlDocPtr */
- int n_doc;
- xmlNodePtr node; /* xmlNodePtr or NULL for doc->children */
- int n_node;
- int compression; /* compress the output? */
- int n_compression;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_compression = 0;n_compression < gen_nb_int;n_compression++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
- node = gen_xmlNodePtr(n_node, 1);
- compression = gen_int(n_compression, 2);
-
- ret_val = xmlNewTextWriterTree(doc, node, compression);
- desret_xmlTextWriterPtr(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- des_xmlNodePtr(n_node, node, 1);
- des_int(n_compression, compression, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlNewTextWriterTree",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf(" %d", n_node);
- printf(" %d", n_compression);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndAttribute(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndCDATA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndCDATA(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndCDATA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndComment(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndComment(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndComment",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndDTD(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndDTD(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndDTD",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndDTDAttlist(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndDTDAttlist(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndDTDAttlist",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndDTDElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndDTDElement(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndDTDElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndDTDEntity(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndDTDEntity(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndDTDEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndDocument(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndDocument(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndElement(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterEndPI(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterEndPI(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterEndPI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterFlush(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterFlush(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterFlush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterFullEndElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterFullEndElement(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterFullEndElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterSetIndent(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- int indent; /* do indentation? */
- int n_indent;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_indent = 0;n_indent < gen_nb_int;n_indent++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- indent = gen_int(n_indent, 1);
-
- ret_val = xmlTextWriterSetIndent(writer, indent);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_int(n_indent, indent, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterSetIndent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_indent);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterSetIndentString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * str; /* the xmlChar string */
- int n_str;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
-
- ret_val = xmlTextWriterSetIndentString(writer, (const xmlChar *)str);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterSetIndentString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_str);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterSetQuoteChar(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar quotechar; /* the quote character */
- int n_quotechar;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_quotechar = 0;n_quotechar < gen_nb_xmlChar;n_quotechar++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- quotechar = gen_xmlChar(n_quotechar, 1);
-
- ret_val = xmlTextWriterSetQuoteChar(writer, quotechar);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_xmlChar(n_quotechar, quotechar, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterSetQuoteChar",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_quotechar);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* element name */
- int n_name;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlTextWriterStartAttribute(writer, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartAttributeNS(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * prefix; /* namespace prefix or NULL */
- int n_prefix;
- xmlChar * name; /* element local name */
- int n_name;
- xmlChar * namespaceURI; /* namespace URI or NULL */
- int n_namespaceURI;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 3);
-
- ret_val = xmlTextWriterStartAttributeNS(writer, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)namespaceURI);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartAttributeNS",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_prefix);
- printf(" %d", n_name);
- printf(" %d", n_namespaceURI);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartCDATA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterStartCDATA(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartCDATA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartComment(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
-
- ret_val = xmlTextWriterStartComment(writer);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartComment",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartDTD(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* the name of the DTD */
- int n_name;
- xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */
- int n_pubid;
- xmlChar * sysid; /* the system identifier, which is the URI of the DTD */
- int n_sysid;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) {
- for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- pubid = gen_const_xmlChar_ptr(n_pubid, 2);
- sysid = gen_const_xmlChar_ptr(n_sysid, 3);
-
- ret_val = xmlTextWriterStartDTD(writer, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 2);
- des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartDTD",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf(" %d", n_pubid);
- printf(" %d", n_sysid);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartDTDAttlist(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* the name of the DTD ATTLIST */
- int n_name;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlTextWriterStartDTDAttlist(writer, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartDTDAttlist",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartDTDElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* the name of the DTD element */
- int n_name;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlTextWriterStartDTDElement(writer, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartDTDElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartDTDEntity(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- int pe; /* TRUE if this is a parameter entity, FALSE if not */
- int n_pe;
- xmlChar * name; /* the name of the DTD ATTLIST */
- int n_name;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_pe = 0;n_pe < gen_nb_int;n_pe++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- pe = gen_int(n_pe, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
-
- ret_val = xmlTextWriterStartDTDEntity(writer, pe, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_int(n_pe, pe, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartDTDEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_pe);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartDocument(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- char * version; /* the xml version ("1.0") or NULL for default ("1.0") */
- int n_version;
- char * encoding; /* the encoding or NULL for default */
- int n_encoding;
- char * standalone; /* "yes" or "no" or NULL for default */
- int n_standalone;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_version = 0;n_version < gen_nb_const_char_ptr;n_version++) {
- for (n_encoding = 0;n_encoding < gen_nb_const_char_ptr;n_encoding++) {
- for (n_standalone = 0;n_standalone < gen_nb_const_char_ptr;n_standalone++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- version = gen_const_char_ptr(n_version, 1);
- encoding = gen_const_char_ptr(n_encoding, 2);
- standalone = gen_const_char_ptr(n_standalone, 3);
-
- ret_val = xmlTextWriterStartDocument(writer, (const char *)version, (const char *)encoding, (const char *)standalone);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_char_ptr(n_version, (const char *)version, 1);
- des_const_char_ptr(n_encoding, (const char *)encoding, 2);
- des_const_char_ptr(n_standalone, (const char *)standalone, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartDocument",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_version);
- printf(" %d", n_encoding);
- printf(" %d", n_standalone);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* element name */
- int n_name;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlTextWriterStartElement(writer, (const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartElementNS(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * prefix; /* namespace prefix or NULL */
- int n_prefix;
- xmlChar * name; /* element local name */
- int n_name;
- xmlChar * namespaceURI; /* namespace URI or NULL */
- int n_namespaceURI;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 3);
-
- ret_val = xmlTextWriterStartElementNS(writer, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)namespaceURI);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartElementNS",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_prefix);
- printf(" %d", n_name);
- printf(" %d", n_namespaceURI);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterStartPI(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * target; /* PI target */
- int n_target;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_target = 0;n_target < gen_nb_const_xmlChar_ptr;n_target++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- target = gen_const_xmlChar_ptr(n_target, 1);
-
- ret_val = xmlTextWriterStartPI(writer, (const xmlChar *)target);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_target, (const xmlChar *)target, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterStartPI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_target);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* attribute name */
- int n_name;
- xmlChar * content; /* attribute content */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- content = gen_const_xmlChar_ptr(n_content, 2);
-
- ret_val = xmlTextWriterWriteAttribute(writer, (const xmlChar *)name, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteAttributeNS(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * prefix; /* namespace prefix */
- int n_prefix;
- xmlChar * name; /* attribute local name */
- int n_name;
- xmlChar * namespaceURI; /* namespace URI */
- int n_namespaceURI;
- xmlChar * content; /* attribute content */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 3);
- content = gen_const_xmlChar_ptr(n_content, 4);
-
- ret_val = xmlTextWriterWriteAttributeNS(writer, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)namespaceURI, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 3);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteAttributeNS",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_prefix);
- printf(" %d", n_name);
- printf(" %d", n_namespaceURI);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteBase64(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- char * data; /* binary data */
- int n_data;
- int start; /* the position within the data of the first byte to encode */
- int n_start;
- int len; /* the number of bytes to encode */
- int n_len;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_data = 0;n_data < gen_nb_const_char_ptr;n_data++) {
- for (n_start = 0;n_start < gen_nb_int;n_start++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- data = gen_const_char_ptr(n_data, 1);
- start = gen_int(n_start, 2);
- len = gen_int(n_len, 3);
- if ((data != NULL) &&
- (start > (int) strlen((const char *) data) + 1))
- continue;
- if ((data != NULL) &&
- (len > (int) strlen((const char *) data) + 1))
- continue;
-
- ret_val = xmlTextWriterWriteBase64(writer, (const char *)data, start, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_char_ptr(n_data, (const char *)data, 1);
- des_int(n_start, start, 2);
- des_int(n_len, len, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteBase64",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_data);
- printf(" %d", n_start);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteBinHex(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- char * data; /* binary data */
- int n_data;
- int start; /* the position within the data of the first byte to encode */
- int n_start;
- int len; /* the number of bytes to encode */
- int n_len;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_data = 0;n_data < gen_nb_const_char_ptr;n_data++) {
- for (n_start = 0;n_start < gen_nb_int;n_start++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- data = gen_const_char_ptr(n_data, 1);
- start = gen_int(n_start, 2);
- len = gen_int(n_len, 3);
- if ((data != NULL) &&
- (start > (int) strlen((const char *) data) + 1))
- continue;
- if ((data != NULL) &&
- (len > (int) strlen((const char *) data) + 1))
- continue;
-
- ret_val = xmlTextWriterWriteBinHex(writer, (const char *)data, start, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_char_ptr(n_data, (const char *)data, 1);
- des_int(n_start, start, 2);
- des_int(n_len, len, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteBinHex",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_data);
- printf(" %d", n_start);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteCDATA(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * content; /* CDATA content */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- ret_val = xmlTextWriterWriteCDATA(writer, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteCDATA",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteComment(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * content; /* comment string */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- ret_val = xmlTextWriterWriteComment(writer, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteComment",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteDTD(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* the name of the DTD */
- int n_name;
- xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */
- int n_pubid;
- xmlChar * sysid; /* the system identifier, which is the URI of the DTD */
- int n_sysid;
- xmlChar * subset; /* string content of the DTD */
- int n_subset;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) {
- for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) {
- for (n_subset = 0;n_subset < gen_nb_const_xmlChar_ptr;n_subset++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- pubid = gen_const_xmlChar_ptr(n_pubid, 2);
- sysid = gen_const_xmlChar_ptr(n_sysid, 3);
- subset = gen_const_xmlChar_ptr(n_subset, 4);
-
- ret_val = xmlTextWriterWriteDTD(writer, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid, (const xmlChar *)subset);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 2);
- des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 3);
- des_const_xmlChar_ptr(n_subset, (const xmlChar *)subset, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteDTD",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf(" %d", n_pubid);
- printf(" %d", n_sysid);
- printf(" %d", n_subset);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteDTDAttlist(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* the name of the DTD ATTLIST */
- int n_name;
- xmlChar * content; /* content of the ATTLIST */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- content = gen_const_xmlChar_ptr(n_content, 2);
-
- ret_val = xmlTextWriterWriteDTDAttlist(writer, (const xmlChar *)name, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteDTDAttlist",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteDTDElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* the name of the DTD element */
- int n_name;
- xmlChar * content; /* content of the element */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- content = gen_const_xmlChar_ptr(n_content, 2);
-
- ret_val = xmlTextWriterWriteDTDElement(writer, (const xmlChar *)name, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteDTDElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteDTDEntity(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- int pe; /* TRUE if this is a parameter entity, FALSE if not */
- int n_pe;
- xmlChar * name; /* the name of the DTD entity */
- int n_name;
- xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */
- int n_pubid;
- xmlChar * sysid; /* the system identifier, which is the URI of the DTD */
- int n_sysid;
- xmlChar * ndataid; /* the xml notation name. */
- int n_ndataid;
- xmlChar * content; /* content of the entity */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_pe = 0;n_pe < gen_nb_int;n_pe++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) {
- for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) {
- for (n_ndataid = 0;n_ndataid < gen_nb_const_xmlChar_ptr;n_ndataid++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- pe = gen_int(n_pe, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- pubid = gen_const_xmlChar_ptr(n_pubid, 3);
- sysid = gen_const_xmlChar_ptr(n_sysid, 4);
- ndataid = gen_const_xmlChar_ptr(n_ndataid, 5);
- content = gen_const_xmlChar_ptr(n_content, 6);
-
- ret_val = xmlTextWriterWriteDTDEntity(writer, pe, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid, (const xmlChar *)ndataid, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_int(n_pe, pe, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 3);
- des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 4);
- des_const_xmlChar_ptr(n_ndataid, (const xmlChar *)ndataid, 5);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 6);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteDTDEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_pe);
- printf(" %d", n_name);
- printf(" %d", n_pubid);
- printf(" %d", n_sysid);
- printf(" %d", n_ndataid);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteDTDExternalEntity(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- int pe; /* TRUE if this is a parameter entity, FALSE if not */
- int n_pe;
- xmlChar * name; /* the name of the DTD entity */
- int n_name;
- xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */
- int n_pubid;
- xmlChar * sysid; /* the system identifier, which is the URI of the DTD */
- int n_sysid;
- xmlChar * ndataid; /* the xml notation name. */
- int n_ndataid;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_pe = 0;n_pe < gen_nb_int;n_pe++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) {
- for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) {
- for (n_ndataid = 0;n_ndataid < gen_nb_const_xmlChar_ptr;n_ndataid++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- pe = gen_int(n_pe, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- pubid = gen_const_xmlChar_ptr(n_pubid, 3);
- sysid = gen_const_xmlChar_ptr(n_sysid, 4);
- ndataid = gen_const_xmlChar_ptr(n_ndataid, 5);
-
- ret_val = xmlTextWriterWriteDTDExternalEntity(writer, pe, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid, (const xmlChar *)ndataid);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_int(n_pe, pe, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 3);
- des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 4);
- des_const_xmlChar_ptr(n_ndataid, (const xmlChar *)ndataid, 5);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteDTDExternalEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_pe);
- printf(" %d", n_name);
- printf(" %d", n_pubid);
- printf(" %d", n_sysid);
- printf(" %d", n_ndataid);
- printf("\n");
- }
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteDTDExternalEntityContents(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */
- int n_pubid;
- xmlChar * sysid; /* the system identifier, which is the URI of the DTD */
- int n_sysid;
- xmlChar * ndataid; /* the xml notation name. */
- int n_ndataid;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) {
- for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) {
- for (n_ndataid = 0;n_ndataid < gen_nb_const_xmlChar_ptr;n_ndataid++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- pubid = gen_const_xmlChar_ptr(n_pubid, 1);
- sysid = gen_const_xmlChar_ptr(n_sysid, 2);
- ndataid = gen_const_xmlChar_ptr(n_ndataid, 3);
-
- ret_val = xmlTextWriterWriteDTDExternalEntityContents(writer, (const xmlChar *)pubid, (const xmlChar *)sysid, (const xmlChar *)ndataid);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 1);
- des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 2);
- des_const_xmlChar_ptr(n_ndataid, (const xmlChar *)ndataid, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteDTDExternalEntityContents",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_pubid);
- printf(" %d", n_sysid);
- printf(" %d", n_ndataid);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteDTDInternalEntity(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- int pe; /* TRUE if this is a parameter entity, FALSE if not */
- int n_pe;
- xmlChar * name; /* the name of the DTD entity */
- int n_name;
- xmlChar * content; /* content of the entity */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_pe = 0;n_pe < gen_nb_int;n_pe++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- pe = gen_int(n_pe, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- content = gen_const_xmlChar_ptr(n_content, 3);
-
- ret_val = xmlTextWriterWriteDTDInternalEntity(writer, pe, (const xmlChar *)name, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_int(n_pe, pe, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteDTDInternalEntity",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_pe);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteDTDNotation(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* the name of the xml notation */
- int n_name;
- xmlChar * pubid; /* the public identifier, which is an alternative to the system identifier */
- int n_pubid;
- xmlChar * sysid; /* the system identifier, which is the URI of the DTD */
- int n_sysid;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_pubid = 0;n_pubid < gen_nb_const_xmlChar_ptr;n_pubid++) {
- for (n_sysid = 0;n_sysid < gen_nb_const_xmlChar_ptr;n_sysid++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- pubid = gen_const_xmlChar_ptr(n_pubid, 2);
- sysid = gen_const_xmlChar_ptr(n_sysid, 3);
-
- ret_val = xmlTextWriterWriteDTDNotation(writer, (const xmlChar *)name, (const xmlChar *)pubid, (const xmlChar *)sysid);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_pubid, (const xmlChar *)pubid, 2);
- des_const_xmlChar_ptr(n_sysid, (const xmlChar *)sysid, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteDTDNotation",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf(" %d", n_pubid);
- printf(" %d", n_sysid);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteElement(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * name; /* element name */
- int n_name;
- xmlChar * content; /* element content */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- content = gen_const_xmlChar_ptr(n_content, 2);
-
- ret_val = xmlTextWriterWriteElement(writer, (const xmlChar *)name, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteElement",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_name);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteElementNS(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * prefix; /* namespace prefix */
- int n_prefix;
- xmlChar * name; /* element local name */
- int n_name;
- xmlChar * namespaceURI; /* namespace URI */
- int n_namespaceURI;
- xmlChar * content; /* element content */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_namespaceURI = 0;n_namespaceURI < gen_nb_const_xmlChar_ptr;n_namespaceURI++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- name = gen_const_xmlChar_ptr(n_name, 2);
- namespaceURI = gen_const_xmlChar_ptr(n_namespaceURI, 3);
- content = gen_const_xmlChar_ptr(n_content, 4);
-
- ret_val = xmlTextWriterWriteElementNS(writer, (const xmlChar *)prefix, (const xmlChar *)name, (const xmlChar *)namespaceURI, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 2);
- des_const_xmlChar_ptr(n_namespaceURI, (const xmlChar *)namespaceURI, 3);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 4);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteElementNS",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_prefix);
- printf(" %d", n_name);
- printf(" %d", n_namespaceURI);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatAttribute(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatAttributeNS(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatCDATA(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatComment(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatDTD(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatDTDAttlist(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatDTDElement(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatDTDInternalEntity(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatElement(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatElementNS(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatPI(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatRaw(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteFormatString(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWritePI(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * target; /* PI target */
- int n_target;
- xmlChar * content; /* PI content */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_target = 0;n_target < gen_nb_const_xmlChar_ptr;n_target++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- target = gen_const_xmlChar_ptr(n_target, 1);
- content = gen_const_xmlChar_ptr(n_content, 2);
-
- ret_val = xmlTextWriterWritePI(writer, (const xmlChar *)target, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_target, (const xmlChar *)target, 1);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWritePI",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_target);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteRaw(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * content; /* text string */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- ret_val = xmlTextWriterWriteRaw(writer, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteRaw",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteRawLen(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * content; /* text string */
- int n_content;
- int len; /* length of the text string */
- int n_len;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- for (n_len = 0;n_len < gen_nb_int;n_len++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
- len = gen_int(n_len, 2);
- if ((content != NULL) &&
- (len > (int) strlen((const char *) content) + 1))
- continue;
-
- ret_val = xmlTextWriterWriteRawLen(writer, (const xmlChar *)content, len);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- des_int(n_len, len, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteRawLen",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_content);
- printf(" %d", n_len);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_WRITER_ENABLED)
- int mem_base;
- int ret_val;
- xmlTextWriterPtr writer; /* the xmlTextWriterPtr */
- int n_writer;
- xmlChar * content; /* text string */
- int n_content;
-
- for (n_writer = 0;n_writer < gen_nb_xmlTextWriterPtr;n_writer++) {
- for (n_content = 0;n_content < gen_nb_const_xmlChar_ptr;n_content++) {
- mem_base = xmlMemBlocks();
- writer = gen_xmlTextWriterPtr(n_writer, 0);
- content = gen_const_xmlChar_ptr(n_content, 1);
-
- ret_val = xmlTextWriterWriteString(writer, (const xmlChar *)content);
- desret_int(ret_val);
- call_tests++;
- des_xmlTextWriterPtr(n_writer, writer, 0);
- des_const_xmlChar_ptr(n_content, (const xmlChar *)content, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlTextWriterWriteString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_writer);
- printf(" %d", n_content);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatAttribute(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatAttributeNS(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatCDATA(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatComment(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatDTD(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatDTDAttlist(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatDTDElement(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatDTDInternalEntity(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatElement(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatElementNS(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatPI(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatRaw(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlTextWriterWriteVFormatString(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-static int
-test_xmlwriter(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xmlwriter : 52 of 80 functions ...\n");
- test_ret += test_xmlNewTextWriter();
- test_ret += test_xmlNewTextWriterFilename();
- test_ret += test_xmlNewTextWriterMemory();
- test_ret += test_xmlNewTextWriterPushParser();
- test_ret += test_xmlNewTextWriterTree();
- test_ret += test_xmlTextWriterEndAttribute();
- test_ret += test_xmlTextWriterEndCDATA();
- test_ret += test_xmlTextWriterEndComment();
- test_ret += test_xmlTextWriterEndDTD();
- test_ret += test_xmlTextWriterEndDTDAttlist();
- test_ret += test_xmlTextWriterEndDTDElement();
- test_ret += test_xmlTextWriterEndDTDEntity();
- test_ret += test_xmlTextWriterEndDocument();
- test_ret += test_xmlTextWriterEndElement();
- test_ret += test_xmlTextWriterEndPI();
- test_ret += test_xmlTextWriterFlush();
- test_ret += test_xmlTextWriterFullEndElement();
- test_ret += test_xmlTextWriterSetIndent();
- test_ret += test_xmlTextWriterSetIndentString();
- test_ret += test_xmlTextWriterSetQuoteChar();
- test_ret += test_xmlTextWriterStartAttribute();
- test_ret += test_xmlTextWriterStartAttributeNS();
- test_ret += test_xmlTextWriterStartCDATA();
- test_ret += test_xmlTextWriterStartComment();
- test_ret += test_xmlTextWriterStartDTD();
- test_ret += test_xmlTextWriterStartDTDAttlist();
- test_ret += test_xmlTextWriterStartDTDElement();
- test_ret += test_xmlTextWriterStartDTDEntity();
- test_ret += test_xmlTextWriterStartDocument();
- test_ret += test_xmlTextWriterStartElement();
- test_ret += test_xmlTextWriterStartElementNS();
- test_ret += test_xmlTextWriterStartPI();
- test_ret += test_xmlTextWriterWriteAttribute();
- test_ret += test_xmlTextWriterWriteAttributeNS();
- test_ret += test_xmlTextWriterWriteBase64();
- test_ret += test_xmlTextWriterWriteBinHex();
- test_ret += test_xmlTextWriterWriteCDATA();
- test_ret += test_xmlTextWriterWriteComment();
- test_ret += test_xmlTextWriterWriteDTD();
- test_ret += test_xmlTextWriterWriteDTDAttlist();
- test_ret += test_xmlTextWriterWriteDTDElement();
- test_ret += test_xmlTextWriterWriteDTDEntity();
- test_ret += test_xmlTextWriterWriteDTDExternalEntity();
- test_ret += test_xmlTextWriterWriteDTDExternalEntityContents();
- test_ret += test_xmlTextWriterWriteDTDInternalEntity();
- test_ret += test_xmlTextWriterWriteDTDNotation();
- test_ret += test_xmlTextWriterWriteElement();
- test_ret += test_xmlTextWriterWriteElementNS();
- test_ret += test_xmlTextWriterWriteFormatAttribute();
- test_ret += test_xmlTextWriterWriteFormatAttributeNS();
- test_ret += test_xmlTextWriterWriteFormatCDATA();
- test_ret += test_xmlTextWriterWriteFormatComment();
- test_ret += test_xmlTextWriterWriteFormatDTD();
- test_ret += test_xmlTextWriterWriteFormatDTDAttlist();
- test_ret += test_xmlTextWriterWriteFormatDTDElement();
- test_ret += test_xmlTextWriterWriteFormatDTDInternalEntity();
- test_ret += test_xmlTextWriterWriteFormatElement();
- test_ret += test_xmlTextWriterWriteFormatElementNS();
- test_ret += test_xmlTextWriterWriteFormatPI();
- test_ret += test_xmlTextWriterWriteFormatRaw();
- test_ret += test_xmlTextWriterWriteFormatString();
- test_ret += test_xmlTextWriterWritePI();
- test_ret += test_xmlTextWriterWriteRaw();
- test_ret += test_xmlTextWriterWriteRawLen();
- test_ret += test_xmlTextWriterWriteString();
- test_ret += test_xmlTextWriterWriteVFormatAttribute();
- test_ret += test_xmlTextWriterWriteVFormatAttributeNS();
- test_ret += test_xmlTextWriterWriteVFormatCDATA();
- test_ret += test_xmlTextWriterWriteVFormatComment();
- test_ret += test_xmlTextWriterWriteVFormatDTD();
- test_ret += test_xmlTextWriterWriteVFormatDTDAttlist();
- test_ret += test_xmlTextWriterWriteVFormatDTDElement();
- test_ret += test_xmlTextWriterWriteVFormatDTDInternalEntity();
- test_ret += test_xmlTextWriterWriteVFormatElement();
- test_ret += test_xmlTextWriterWriteVFormatElementNS();
- test_ret += test_xmlTextWriterWriteVFormatPI();
- test_ret += test_xmlTextWriterWriteVFormatRaw();
- test_ret += test_xmlTextWriterWriteVFormatString();
-
- if (test_ret != 0)
- printf("Module xmlwriter: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlXPathCastBooleanToNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- double ret_val;
- int val; /* a boolean */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_int(n_val, 0);
-
- ret_val = xmlXPathCastBooleanToNumber(val);
- desret_double(ret_val);
- call_tests++;
- des_int(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastBooleanToNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastBooleanToString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- int val; /* a boolean */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_int(n_val, 0);
-
- ret_val = xmlXPathCastBooleanToString(val);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_int(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastBooleanToString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastNodeSetToBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodeSetPtr ns; /* a node-set */
- int n_ns;
-
- for (n_ns = 0;n_ns < gen_nb_xmlNodeSetPtr;n_ns++) {
- mem_base = xmlMemBlocks();
- ns = gen_xmlNodeSetPtr(n_ns, 0);
-
- ret_val = xmlXPathCastNodeSetToBoolean(ns);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_ns, ns, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastNodeSetToBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ns);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastNodeSetToNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- double ret_val;
- xmlNodeSetPtr ns; /* a node-set */
- int n_ns;
-
- for (n_ns = 0;n_ns < gen_nb_xmlNodeSetPtr;n_ns++) {
- mem_base = xmlMemBlocks();
- ns = gen_xmlNodeSetPtr(n_ns, 0);
-
- ret_val = xmlXPathCastNodeSetToNumber(ns);
- desret_double(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_ns, ns, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastNodeSetToNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ns);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastNodeSetToString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlNodeSetPtr ns; /* a node-set */
- int n_ns;
-
- for (n_ns = 0;n_ns < gen_nb_xmlNodeSetPtr;n_ns++) {
- mem_base = xmlMemBlocks();
- ns = gen_xmlNodeSetPtr(n_ns, 0);
-
- ret_val = xmlXPathCastNodeSetToString(ns);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_ns, ns, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastNodeSetToString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ns);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastNodeToNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- double ret_val;
- xmlNodePtr node; /* a node */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
-
- ret_val = xmlXPathCastNodeToNumber(node);
- desret_double(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastNodeToNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastNodeToString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlNodePtr node; /* a node */
- int n_node;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
-
- ret_val = xmlXPathCastNodeToString(node);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastNodeToString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastNumberToBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- double val; /* a number */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_double;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_double(n_val, 0);
-
- ret_val = xmlXPathCastNumberToBoolean(val);
- desret_int(ret_val);
- call_tests++;
- des_double(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastNumberToBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastNumberToString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- double val; /* a number */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_double;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_double(n_val, 0);
-
- ret_val = xmlXPathCastNumberToString(val);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_double(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastNumberToString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastStringToBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * val; /* a string */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_const_xmlChar_ptr(n_val, 0);
-
- ret_val = xmlXPathCastStringToBoolean((const xmlChar *)val);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastStringToBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastStringToNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- double ret_val;
- xmlChar * val; /* a string */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_const_xmlChar_ptr(n_val, 0);
-
- ret_val = xmlXPathCastStringToNumber((const xmlChar *)val);
- desret_double(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastStringToNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastToBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathObjectPtr val; /* an XPath object */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlXPathObjectPtr(n_val, 0);
-
- ret_val = xmlXPathCastToBoolean(val);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastToBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastToNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- double ret_val;
- xmlXPathObjectPtr val; /* an XPath object */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlXPathObjectPtr(n_val, 0);
-
- ret_val = xmlXPathCastToNumber(val);
- desret_double(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastToNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCastToString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlXPathObjectPtr val; /* an XPath object */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlXPathObjectPtr(n_val, 0);
-
- ret_val = xmlXPathCastToString(val);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCastToString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCmpNodes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodePtr node1; /* the first node */
- int n_node1;
- xmlNodePtr node2; /* the second node */
- int n_node2;
-
- for (n_node1 = 0;n_node1 < gen_nb_xmlNodePtr;n_node1++) {
- for (n_node2 = 0;n_node2 < gen_nb_xmlNodePtr;n_node2++) {
- mem_base = xmlMemBlocks();
- node1 = gen_xmlNodePtr(n_node1, 0);
- node2 = gen_xmlNodePtr(n_node2, 1);
-
- ret_val = xmlXPathCmpNodes(node1, node2);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node1, node1, 0);
- des_xmlNodePtr(n_node2, node2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCmpNodes",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node1);
- printf(" %d", n_node2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCompile(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-#ifdef LIBXML_XPATH_ENABLED
-
-#define gen_nb_xmlXPathCompExprPtr 1
-static xmlXPathCompExprPtr gen_xmlXPathCompExprPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlXPathCompExprPtr(int no ATTRIBUTE_UNUSED, xmlXPathCompExprPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-#ifdef LIBXML_XPATH_ENABLED
-
-#define gen_nb_xmlXPathContextPtr 1
-static xmlXPathContextPtr gen_xmlXPathContextPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlXPathContextPtr(int no ATTRIBUTE_UNUSED, xmlXPathContextPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlXPathCompiledEval(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathCompExprPtr comp; /* the compiled XPath expression */
- int n_comp;
- xmlXPathContextPtr ctx; /* the XPath context */
- int n_ctx;
-
- for (n_comp = 0;n_comp < gen_nb_xmlXPathCompExprPtr;n_comp++) {
- for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlXPathCompExprPtr(n_comp, 0);
- ctx = gen_xmlXPathContextPtr(n_ctx, 1);
-
- ret_val = xmlXPathCompiledEval(comp, ctx);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathCompExprPtr(n_comp, comp, 0);
- des_xmlXPathContextPtr(n_ctx, ctx, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCompiledEval",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCompiledEvalToBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathCompExprPtr comp; /* the compiled XPath expression */
- int n_comp;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
-
- for (n_comp = 0;n_comp < gen_nb_xmlXPathCompExprPtr;n_comp++) {
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- comp = gen_xmlXPathCompExprPtr(n_comp, 0);
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 1);
-
- ret_val = xmlXPathCompiledEvalToBoolean(comp, ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathCompExprPtr(n_comp, comp, 0);
- des_xmlXPathContextPtr(n_ctxt, ctxt, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCompiledEvalToBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_comp);
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathContextSetCache(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
- int active; /* enables/disables (creates/frees) the cache */
- int n_active;
- int value; /* a value with semantics dependant on @options */
- int n_value;
- int options; /* options (currently only the value 0 is used) */
- int n_options;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- for (n_active = 0;n_active < gen_nb_int;n_active++) {
- for (n_value = 0;n_value < gen_nb_int;n_value++) {
- for (n_options = 0;n_options < gen_nb_int;n_options++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
- active = gen_int(n_active, 1);
- value = gen_int(n_value, 2);
- options = gen_int(n_options, 3);
-
- ret_val = xmlXPathContextSetCache(ctxt, active, value, options);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- des_int(n_active, active, 1);
- des_int(n_value, value, 2);
- des_int(n_options, options, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathContextSetCache",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_active);
- printf(" %d", n_value);
- printf(" %d", n_options);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathConvertBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathObjectPtr val; /* an XPath object */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlXPathObjectPtr(n_val, 0);
-
- ret_val = xmlXPathConvertBoolean(val);
- val = NULL;
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathConvertBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathConvertNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathObjectPtr val; /* an XPath object */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlXPathObjectPtr(n_val, 0);
-
- ret_val = xmlXPathConvertNumber(val);
- val = NULL;
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathConvertNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathConvertString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathObjectPtr val; /* an XPath object */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlXPathObjectPtr(n_val, 0);
-
- ret_val = xmlXPathConvertString(val);
- val = NULL;
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathConvertString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCtxtCompile(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathEval(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlChar * str; /* the XPath expression */
- int n_str;
- xmlXPathContextPtr ctx; /* the XPath context */
- int n_ctx;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
- ctx = gen_xmlXPathContextPtr(n_ctx, 1);
-
- ret_val = xmlXPathEval((const xmlChar *)str, ctx);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- des_xmlXPathContextPtr(n_ctx, ctx, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathEval",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathEvalExpression(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlChar * str; /* the XPath expression */
- int n_str;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 1);
-
- ret_val = xmlXPathEvalExpression((const xmlChar *)str, ctxt);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- des_xmlXPathContextPtr(n_ctxt, ctxt, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathEvalExpression",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathEvalPredicate(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
- xmlXPathObjectPtr res; /* the Predicate Expression evaluation result */
- int n_res;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- for (n_res = 0;n_res < gen_nb_xmlXPathObjectPtr;n_res++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
- res = gen_xmlXPathObjectPtr(n_res, 1);
-
- ret_val = xmlXPathEvalPredicate(ctxt, res);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- des_xmlXPathObjectPtr(n_res, res, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathEvalPredicate",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_res);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathInit(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
-
- mem_base = xmlMemBlocks();
-
- xmlXPathInit();
- call_tests++;
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathInit",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf("\n");
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathIsInf(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- double val; /* a double value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_double;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_double(n_val, 0);
-
- ret_val = xmlXPathIsInf(val);
- desret_int(ret_val);
- call_tests++;
- des_double(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathIsInf",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathIsNaN(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
- int mem_base;
- int ret_val;
- double val; /* a double value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_double;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_double(n_val, 0);
-
- ret_val = xmlXPathIsNaN(val);
- desret_int(ret_val);
- call_tests++;
- des_double(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathIsNaN",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNewContext(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeEval(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodePtr node; /* the node to to use as the context node */
- int n_node;
- xmlChar * str; /* the XPath expression */
- int n_str;
- xmlXPathContextPtr ctx; /* the XPath context */
- int n_ctx;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- str = gen_const_xmlChar_ptr(n_str, 1);
- ctx = gen_xmlXPathContextPtr(n_ctx, 2);
-
- ret_val = xmlXPathNodeEval(node, (const xmlChar *)str, ctx);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 1);
- des_xmlXPathContextPtr(n_ctx, ctx, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeEval",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_str);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetCreate(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodePtr val; /* an initial xmlNodePtr, or NULL */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlNodePtr(n_val, 0);
-
- ret_val = xmlXPathNodeSetCreate(val);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetCreate",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathObjectCopy(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathObjectPtr val; /* the original object */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlXPathObjectPtr(n_val, 0);
-
- ret_val = xmlXPathObjectCopy(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathObjectCopy",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathOrderDocElems(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- long ret_val;
- xmlDocPtr doc; /* an input document */
- int n_doc;
-
- for (n_doc = 0;n_doc < gen_nb_xmlDocPtr;n_doc++) {
- mem_base = xmlMemBlocks();
- doc = gen_xmlDocPtr(n_doc, 0);
-
- ret_val = xmlXPathOrderDocElems(doc);
- desret_long(ret_val);
- call_tests++;
- des_xmlDocPtr(n_doc, doc, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathOrderDocElems",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_doc);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathSetContextNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodePtr node; /* the node to to use as the context node */
- int n_node;
- xmlXPathContextPtr ctx; /* the XPath context */
- int n_ctx;
-
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- node = gen_xmlNodePtr(n_node, 0);
- ctx = gen_xmlXPathContextPtr(n_ctx, 1);
-
- ret_val = xmlXPathSetContextNode(node, ctx);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodePtr(n_node, node, 0);
- des_xmlXPathContextPtr(n_ctx, ctx, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathSetContextNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_node);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xpath(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xpath : 32 of 40 functions ...\n");
- test_ret += test_xmlXPathCastBooleanToNumber();
- test_ret += test_xmlXPathCastBooleanToString();
- test_ret += test_xmlXPathCastNodeSetToBoolean();
- test_ret += test_xmlXPathCastNodeSetToNumber();
- test_ret += test_xmlXPathCastNodeSetToString();
- test_ret += test_xmlXPathCastNodeToNumber();
- test_ret += test_xmlXPathCastNodeToString();
- test_ret += test_xmlXPathCastNumberToBoolean();
- test_ret += test_xmlXPathCastNumberToString();
- test_ret += test_xmlXPathCastStringToBoolean();
- test_ret += test_xmlXPathCastStringToNumber();
- test_ret += test_xmlXPathCastToBoolean();
- test_ret += test_xmlXPathCastToNumber();
- test_ret += test_xmlXPathCastToString();
- test_ret += test_xmlXPathCmpNodes();
- test_ret += test_xmlXPathCompile();
- test_ret += test_xmlXPathCompiledEval();
- test_ret += test_xmlXPathCompiledEvalToBoolean();
- test_ret += test_xmlXPathContextSetCache();
- test_ret += test_xmlXPathConvertBoolean();
- test_ret += test_xmlXPathConvertNumber();
- test_ret += test_xmlXPathConvertString();
- test_ret += test_xmlXPathCtxtCompile();
- test_ret += test_xmlXPathEval();
- test_ret += test_xmlXPathEvalExpression();
- test_ret += test_xmlXPathEvalPredicate();
- test_ret += test_xmlXPathInit();
- test_ret += test_xmlXPathIsInf();
- test_ret += test_xmlXPathIsNaN();
- test_ret += test_xmlXPathNewContext();
- test_ret += test_xmlXPathNodeEval();
- test_ret += test_xmlXPathNodeSetCreate();
- test_ret += test_xmlXPathObjectCopy();
- test_ret += test_xmlXPathOrderDocElems();
- test_ret += test_xmlXPathSetContextNode();
-
- if (test_ret != 0)
- printf("Module xpath: %d errors\n", test_ret);
- return(test_ret);
-}
-#ifdef LIBXML_XPATH_ENABLED
-
-#define gen_nb_xmlXPathParserContextPtr 1
-static xmlXPathParserContextPtr gen_xmlXPathParserContextPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlXPathParserContextPtr(int no ATTRIBUTE_UNUSED, xmlXPathParserContextPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_valuePop(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathParserContextPtr ctxt; /* an XPath evaluation context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = valuePop(ctxt);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in valuePop",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_valuePush(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathParserContextPtr ctxt; /* an XPath evaluation context */
- int n_ctxt;
- xmlXPathObjectPtr value; /* the XPath object */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_value = 0;n_value < gen_nb_xmlXPathObjectPtr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- value = gen_xmlXPathObjectPtr(n_value, 1);
-
- ret_val = valuePush(ctxt, value);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlXPathObjectPtr(n_value, value, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in valuePush",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathAddValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPathAddValues(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathAddValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathBooleanFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathBooleanFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathBooleanFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCeilingFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathCeilingFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCeilingFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCompareValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int inf; /* less than (1) or greater than (0) */
- int n_inf;
- int strict; /* is the comparison strict */
- int n_strict;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_inf = 0;n_inf < gen_nb_int;n_inf++) {
- for (n_strict = 0;n_strict < gen_nb_int;n_strict++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- inf = gen_int(n_inf, 1);
- strict = gen_int(n_strict, 2);
-
- ret_val = xmlXPathCompareValues(ctxt, inf, strict);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_inf, inf, 1);
- des_int(n_strict, strict, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCompareValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_inf);
- printf(" %d", n_strict);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathConcatFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathConcatFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathConcatFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathContainsFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathContainsFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathContainsFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathCountFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathCountFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathCountFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathDebugDumpCompExpr(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * for the output */
- int n_output;
- xmlXPathCompExprPtr comp; /* the precompiled XPath expression */
- int n_comp;
- int depth; /* the indentation level. */
- int n_depth;
-
- for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) {
- for (n_comp = 0;n_comp < gen_nb_xmlXPathCompExprPtr;n_comp++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- mem_base = xmlMemBlocks();
- output = gen_FILE_ptr(n_output, 0);
- comp = gen_xmlXPathCompExprPtr(n_comp, 1);
- depth = gen_int(n_depth, 2);
-
- xmlXPathDebugDumpCompExpr(output, comp, depth);
- call_tests++;
- des_FILE_ptr(n_output, output, 0);
- des_xmlXPathCompExprPtr(n_comp, comp, 1);
- des_int(n_depth, depth, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathDebugDumpCompExpr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_comp);
- printf(" %d", n_depth);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathDebugDumpObject(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED) && defined(LIBXML_DEBUG_ENABLED)
- int mem_base;
- FILE * output; /* the FILE * to dump the output */
- int n_output;
- xmlXPathObjectPtr cur; /* the object to inspect */
- int n_cur;
- int depth; /* indentation level */
- int n_depth;
-
- for (n_output = 0;n_output < gen_nb_FILE_ptr;n_output++) {
- for (n_cur = 0;n_cur < gen_nb_xmlXPathObjectPtr;n_cur++) {
- for (n_depth = 0;n_depth < gen_nb_int;n_depth++) {
- mem_base = xmlMemBlocks();
- output = gen_FILE_ptr(n_output, 0);
- cur = gen_xmlXPathObjectPtr(n_cur, 1);
- depth = gen_int(n_depth, 2);
-
- xmlXPathDebugDumpObject(output, cur, depth);
- call_tests++;
- des_FILE_ptr(n_output, output, 0);
- des_xmlXPathObjectPtr(n_cur, cur, 1);
- des_int(n_depth, depth, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathDebugDumpObject",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_output);
- printf(" %d", n_cur);
- printf(" %d", n_depth);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathDifference(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes1; /* a node-set */
- int n_nodes1;
- xmlNodeSetPtr nodes2; /* a node-set */
- int n_nodes2;
-
- for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) {
- for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) {
- mem_base = xmlMemBlocks();
- nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0);
- nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1);
-
- ret_val = xmlXPathDifference(nodes1, nodes2);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes1, nodes1, 0);
- des_xmlNodeSetPtr(n_nodes2, nodes2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathDifference",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes1);
- printf(" %d", n_nodes2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathDistinct(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes; /* a node-set */
- int n_nodes;
-
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- mem_base = xmlMemBlocks();
- nodes = gen_xmlNodeSetPtr(n_nodes, 0);
-
- ret_val = xmlXPathDistinct(nodes);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes, nodes, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathDistinct",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathDistinctSorted(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes; /* a node-set, sorted by document order */
- int n_nodes;
-
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- mem_base = xmlMemBlocks();
- nodes = gen_xmlNodeSetPtr(n_nodes, 0);
-
- ret_val = xmlXPathDistinctSorted(nodes);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes, nodes, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathDistinctSorted",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathDivValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPathDivValues(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathDivValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathEqualValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathEqualValues(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathEqualValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathErr(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* a XPath parser context */
- int n_ctxt;
- int error; /* the error code */
- int n_error;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_error = 0;n_error < gen_nb_int;n_error++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- error = gen_int(n_error, 1);
-
- xmlXPathErr(ctxt, error);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_error, error, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathErr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_error);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathEvalExpr(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPathEvalExpr(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathEvalExpr",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathEvaluatePredicateResult(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlXPathObjectPtr res; /* the Predicate Expression evaluation result */
- int n_res;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_res = 0;n_res < gen_nb_xmlXPathObjectPtr;n_res++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- res = gen_xmlXPathObjectPtr(n_res, 1);
-
- ret_val = xmlXPathEvaluatePredicateResult(ctxt, res);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlXPathObjectPtr(n_res, res, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathEvaluatePredicateResult",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_res);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathFalseFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathFalseFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathFalseFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathFloorFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathFloorFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathFloorFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathFunctionLookup(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathFunctionLookupNS(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathHasSameNodes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodeSetPtr nodes1; /* a node-set */
- int n_nodes1;
- xmlNodeSetPtr nodes2; /* a node-set */
- int n_nodes2;
-
- for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) {
- for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) {
- mem_base = xmlMemBlocks();
- nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0);
- nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1);
-
- ret_val = xmlXPathHasSameNodes(nodes1, nodes2);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes1, nodes1, 0);
- des_xmlNodeSetPtr(n_nodes2, nodes2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathHasSameNodes",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes1);
- printf(" %d", n_nodes2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathIdFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathIdFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathIdFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathIntersection(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes1; /* a node-set */
- int n_nodes1;
- xmlNodeSetPtr nodes2; /* a node-set */
- int n_nodes2;
-
- for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) {
- for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) {
- mem_base = xmlMemBlocks();
- nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0);
- nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1);
-
- ret_val = xmlXPathIntersection(nodes1, nodes2);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes1, nodes1, 0);
- des_xmlNodeSetPtr(n_nodes2, nodes2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathIntersection",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes1);
- printf(" %d", n_nodes2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathIsNodeType(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlChar * name; /* a name string */
- int n_name;
-
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- name = gen_const_xmlChar_ptr(n_name, 0);
-
- ret_val = xmlXPathIsNodeType((const xmlChar *)name);
- desret_int(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathIsNodeType",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_name);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathLangFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathLangFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathLangFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathLastFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathLastFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathLastFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathLeading(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes1; /* a node-set */
- int n_nodes1;
- xmlNodeSetPtr nodes2; /* a node-set */
- int n_nodes2;
-
- for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) {
- for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) {
- mem_base = xmlMemBlocks();
- nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0);
- nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1);
-
- ret_val = xmlXPathLeading(nodes1, nodes2);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes1, nodes1, 0);
- des_xmlNodeSetPtr(n_nodes2, nodes2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathLeading",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes1);
- printf(" %d", n_nodes2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathLeadingSorted(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes1; /* a node-set, sorted by document order */
- int n_nodes1;
- xmlNodeSetPtr nodes2; /* a node-set, sorted by document order */
- int n_nodes2;
-
- for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) {
- for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) {
- mem_base = xmlMemBlocks();
- nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0);
- nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1);
-
- ret_val = xmlXPathLeadingSorted(nodes1, nodes2);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes1, nodes1, 0);
- des_xmlNodeSetPtr(n_nodes2, nodes2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathLeadingSorted",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes1);
- printf(" %d", n_nodes2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathLocalNameFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathLocalNameFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathLocalNameFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathModValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPathModValues(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathModValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathMultValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPathMultValues(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathMultValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNamespaceURIFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathNamespaceURIFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNamespaceURIFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNewBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- int val; /* the boolean value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_int(n_val, 0);
-
- ret_val = xmlXPathNewBoolean(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_int(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNewBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNewCString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- char * val; /* the char * value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_const_char_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_const_char_ptr(n_val, 0);
-
- ret_val = xmlXPathNewCString((const char *)val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_const_char_ptr(n_val, (const char *)val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNewCString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNewFloat(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- double val; /* the double value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_double;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_double(n_val, 0);
-
- ret_val = xmlXPathNewFloat(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_double(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNewFloat",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNewNodeSet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodePtr val; /* the NodePtr value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlNodePtr(n_val, 0);
-
- ret_val = xmlXPathNewNodeSet(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNewNodeSet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNewNodeSetList(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodeSetPtr val; /* an existing NodeSet */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlNodeSetPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlNodeSetPtr(n_val, 0);
-
- ret_val = xmlXPathNewNodeSetList(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNewNodeSetList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNewParserContext(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNewString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlChar * val; /* the xmlChar * value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_const_xmlChar_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_const_xmlChar_ptr(n_val, 0);
-
- ret_val = xmlXPathNewString((const xmlChar *)val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_val, (const xmlChar *)val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNewString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextAncestor(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextAncestor(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextAncestor",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextAncestorOrSelf(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextAncestorOrSelf(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextAncestorOrSelf",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextAttribute(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current attribute in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextAttribute(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextAttribute",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextChild(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextChild(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextChild",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextDescendant(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextDescendant(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextDescendant",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextDescendantOrSelf(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextDescendantOrSelf(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextDescendantOrSelf",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextFollowing(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextFollowing(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextFollowing",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextFollowingSibling(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextFollowingSibling(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextFollowingSibling",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextNamespace(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current attribute in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextNamespace(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextNamespace",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextParent(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextParent(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextParent",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextPreceding(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextPreceding(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextPreceding",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextPrecedingSibling(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextPrecedingSibling(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextPrecedingSibling",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNextSelf(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- xmlNodePtr cur; /* the current node in the traversal */
- int n_cur;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_cur = 0;n_cur < gen_nb_xmlNodePtr;n_cur++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- cur = gen_xmlNodePtr(n_cur, 1);
-
- ret_val = xmlXPathNextSelf(ctxt, cur);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_xmlNodePtr(n_cur, cur, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNextSelf",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_cur);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeLeading(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes; /* a node-set */
- int n_nodes;
- xmlNodePtr node; /* a node */
- int n_node;
-
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- nodes = gen_xmlNodeSetPtr(n_nodes, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- ret_val = xmlXPathNodeLeading(nodes, node);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes, nodes, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeLeading",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeLeadingSorted(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes; /* a node-set, sorted by document order */
- int n_nodes;
- xmlNodePtr node; /* a node */
- int n_node;
-
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- nodes = gen_xmlNodeSetPtr(n_nodes, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- ret_val = xmlXPathNodeLeadingSorted(nodes, node);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes, nodes, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeLeadingSorted",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetAdd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodeSetPtr cur; /* the initial node set */
- int n_cur;
- xmlNodePtr val; /* a new xmlNodePtr */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodeSetPtr(n_cur, 0);
- val = gen_xmlNodePtr(n_val, 1);
-
- ret_val = xmlXPathNodeSetAdd(cur, val);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_cur, cur, 0);
- des_xmlNodePtr(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetAdd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetAddNs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodeSetPtr cur; /* the initial node set */
- int n_cur;
- xmlNodePtr node; /* the hosting node */
- int n_node;
- xmlNsPtr ns; /* a the namespace node */
- int n_ns;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- for (n_ns = 0;n_ns < gen_nb_xmlNsPtr;n_ns++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodeSetPtr(n_cur, 0);
- node = gen_xmlNodePtr(n_node, 1);
- ns = gen_xmlNsPtr(n_ns, 2);
-
- ret_val = xmlXPathNodeSetAddNs(cur, node, ns);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_cur, cur, 0);
- des_xmlNodePtr(n_node, node, 1);
- des_xmlNsPtr(n_ns, ns, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetAddNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_node);
- printf(" %d", n_ns);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetAddUnique(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodeSetPtr cur; /* the initial node set */
- int n_cur;
- xmlNodePtr val; /* a new xmlNodePtr */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodeSetPtr(n_cur, 0);
- val = gen_xmlNodePtr(n_val, 1);
-
- ret_val = xmlXPathNodeSetAddUnique(cur, val);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_cur, cur, 0);
- des_xmlNodePtr(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetAddUnique",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetContains(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlNodeSetPtr cur; /* the node-set */
- int n_cur;
- xmlNodePtr val; /* the node */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodeSetPtr(n_cur, 0);
- val = gen_xmlNodePtr(n_val, 1);
-
- ret_val = xmlXPathNodeSetContains(cur, val);
- desret_int(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_cur, cur, 0);
- des_xmlNodePtr(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetContains",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetDel(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr cur; /* the initial node set */
- int n_cur;
- xmlNodePtr val; /* an xmlNodePtr */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_xmlNodePtr;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodeSetPtr(n_cur, 0);
- val = gen_xmlNodePtr(n_val, 1);
-
- xmlXPathNodeSetDel(cur, val);
- call_tests++;
- des_xmlNodeSetPtr(n_cur, cur, 0);
- des_xmlNodePtr(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetDel",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetMerge(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr val1; /* the first NodeSet or NULL */
- int n_val1;
- xmlNodeSetPtr val2; /* the second NodeSet */
- int n_val2;
-
- for (n_val1 = 0;n_val1 < gen_nb_xmlNodeSetPtr;n_val1++) {
- for (n_val2 = 0;n_val2 < gen_nb_xmlNodeSetPtr;n_val2++) {
- mem_base = xmlMemBlocks();
- val1 = gen_xmlNodeSetPtr(n_val1, 0);
- val2 = gen_xmlNodeSetPtr(n_val2, 1);
-
- ret_val = xmlXPathNodeSetMerge(val1, val2);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_val1, val1, 0);
- des_xmlNodeSetPtr(n_val2, val2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetMerge",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val1);
- printf(" %d", n_val2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetRemove(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr cur; /* the initial node set */
- int n_cur;
- int val; /* the index to remove */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlNodeSetPtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlNodeSetPtr(n_cur, 0);
- val = gen_int(n_val, 1);
-
- xmlXPathNodeSetRemove(cur, val);
- call_tests++;
- des_xmlNodeSetPtr(n_cur, cur, 0);
- des_int(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetRemove",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeSetSort(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr set; /* the node set */
- int n_set;
-
- for (n_set = 0;n_set < gen_nb_xmlNodeSetPtr;n_set++) {
- mem_base = xmlMemBlocks();
- set = gen_xmlNodeSetPtr(n_set, 0);
-
- xmlXPathNodeSetSort(set);
- call_tests++;
- des_xmlNodeSetPtr(n_set, set, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeSetSort",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_set);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeTrailing(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes; /* a node-set */
- int n_nodes;
- xmlNodePtr node; /* a node */
- int n_node;
-
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- nodes = gen_xmlNodeSetPtr(n_nodes, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- ret_val = xmlXPathNodeTrailing(nodes, node);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes, nodes, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeTrailing",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNodeTrailingSorted(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes; /* a node-set, sorted by document order */
- int n_nodes;
- xmlNodePtr node; /* a node */
- int n_node;
-
- for (n_nodes = 0;n_nodes < gen_nb_xmlNodeSetPtr;n_nodes++) {
- for (n_node = 0;n_node < gen_nb_xmlNodePtr;n_node++) {
- mem_base = xmlMemBlocks();
- nodes = gen_xmlNodeSetPtr(n_nodes, 0);
- node = gen_xmlNodePtr(n_node, 1);
-
- ret_val = xmlXPathNodeTrailingSorted(nodes, node);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes, nodes, 0);
- des_xmlNodePtr(n_node, node, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNodeTrailingSorted",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes);
- printf(" %d", n_node);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNormalizeFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathNormalizeFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNormalizeFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNotEqualValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathNotEqualValues(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNotEqualValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNotFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathNotFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNotFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNsLookup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- const xmlChar * ret_val;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
- xmlChar * prefix; /* the namespace prefix value */
- int n_prefix;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
-
- ret_val = xmlXPathNsLookup(ctxt, (const xmlChar *)prefix);
- desret_const_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNsLookup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_prefix);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathNumberFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathNumberFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathNumberFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathParseNCName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathParseNCName(ctxt);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathParseNCName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathParseName(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathParseName(ctxt);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathParseName",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathPopBoolean(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathParserContextPtr ctxt; /* an XPath parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathPopBoolean(ctxt);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathPopBoolean",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathPopExternal(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- void * ret_val;
- xmlXPathParserContextPtr ctxt; /* an XPath parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathPopExternal(ctxt);
- desret_void_ptr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathPopExternal",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathPopNodeSet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlXPathParserContextPtr ctxt; /* an XPath parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathPopNodeSet(ctxt);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathPopNodeSet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathPopNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- double ret_val;
- xmlXPathParserContextPtr ctxt; /* an XPath parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathPopNumber(ctxt);
- desret_double(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathPopNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathPopString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlChar * ret_val;
- xmlXPathParserContextPtr ctxt; /* an XPath parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- ret_val = xmlXPathPopString(ctxt);
- desret_xmlChar_ptr(ret_val);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathPopString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathPositionFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathPositionFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathPositionFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisterAllFunctions(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
-
- xmlXPathRegisterAllFunctions(ctxt);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRegisterAllFunctions",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisterFunc(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisterFuncLookup(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisterFuncNS(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisterNs(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
- xmlChar * prefix; /* the namespace prefix cannot be NULL or empty string */
- int n_prefix;
- xmlChar * ns_uri; /* the namespace name */
- int n_ns_uri;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- for (n_prefix = 0;n_prefix < gen_nb_const_xmlChar_ptr;n_prefix++) {
- for (n_ns_uri = 0;n_ns_uri < gen_nb_const_xmlChar_ptr;n_ns_uri++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
- prefix = gen_const_xmlChar_ptr(n_prefix, 1);
- ns_uri = gen_const_xmlChar_ptr(n_ns_uri, 2);
-
- ret_val = xmlXPathRegisterNs(ctxt, (const xmlChar *)prefix, (const xmlChar *)ns_uri);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_prefix, (const xmlChar *)prefix, 1);
- des_const_xmlChar_ptr(n_ns_uri, (const xmlChar *)ns_uri, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRegisterNs",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_prefix);
- printf(" %d", n_ns_uri);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisterVariable(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
- xmlChar * name; /* the variable name */
- int n_name;
- xmlXPathObjectPtr value; /* the variable value or NULL */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_value = 0;n_value < gen_nb_xmlXPathObjectPtr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- value = gen_xmlXPathObjectPtr(n_value, 2);
-
- ret_val = xmlXPathRegisterVariable(ctxt, (const xmlChar *)name, value);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_xmlXPathObjectPtr(n_value, value, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRegisterVariable",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_name);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisterVariableLookup(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisterVariableNS(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- int ret_val;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
- xmlChar * name; /* the variable name */
- int n_name;
- xmlChar * ns_uri; /* the variable namespace URI */
- int n_ns_uri;
- xmlXPathObjectPtr value; /* the variable value or NULL */
- int n_value;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ns_uri = 0;n_ns_uri < gen_nb_const_xmlChar_ptr;n_ns_uri++) {
- for (n_value = 0;n_value < gen_nb_xmlXPathObjectPtr;n_value++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ns_uri = gen_const_xmlChar_ptr(n_ns_uri, 2);
- value = gen_xmlXPathObjectPtr(n_value, 3);
-
- ret_val = xmlXPathRegisterVariableNS(ctxt, (const xmlChar *)name, (const xmlChar *)ns_uri, value);
- desret_int(ret_val);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ns_uri, (const xmlChar *)ns_uri, 2);
- des_xmlXPathObjectPtr(n_value, value, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRegisterVariableNS",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_name);
- printf(" %d", n_ns_uri);
- printf(" %d", n_value);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisteredFuncsCleanup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
-
- xmlXPathRegisteredFuncsCleanup(ctxt);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRegisteredFuncsCleanup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisteredNsCleanup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
-
- xmlXPathRegisteredNsCleanup(ctxt);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRegisteredNsCleanup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRegisteredVariablesCleanup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
-
- xmlXPathRegisteredVariablesCleanup(ctxt);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRegisteredVariablesCleanup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRoot(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPathRoot(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRoot",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathRoundFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathRoundFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathRoundFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathStartsWithFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathStartsWithFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathStartsWithFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathStringEvalNumber(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- double ret_val;
- xmlChar * str; /* A string to scan */
- int n_str;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
-
- ret_val = xmlXPathStringEvalNumber((const xmlChar *)str);
- desret_double(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathStringEvalNumber",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathStringFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathStringFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathStringFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathStringLengthFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathStringLengthFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathStringLengthFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathSubValues(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPathSubValues(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathSubValues",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathSubstringAfterFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathSubstringAfterFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathSubstringAfterFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathSubstringBeforeFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathSubstringBeforeFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathSubstringBeforeFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathSubstringFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathSubstringFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathSubstringFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathSumFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathSumFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathSumFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathTrailing(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes1; /* a node-set */
- int n_nodes1;
- xmlNodeSetPtr nodes2; /* a node-set */
- int n_nodes2;
-
- for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) {
- for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) {
- mem_base = xmlMemBlocks();
- nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0);
- nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1);
-
- ret_val = xmlXPathTrailing(nodes1, nodes2);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes1, nodes1, 0);
- des_xmlNodeSetPtr(n_nodes2, nodes2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathTrailing",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes1);
- printf(" %d", n_nodes2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathTrailingSorted(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlNodeSetPtr ret_val;
- xmlNodeSetPtr nodes1; /* a node-set, sorted by document order */
- int n_nodes1;
- xmlNodeSetPtr nodes2; /* a node-set, sorted by document order */
- int n_nodes2;
-
- for (n_nodes1 = 0;n_nodes1 < gen_nb_xmlNodeSetPtr;n_nodes1++) {
- for (n_nodes2 = 0;n_nodes2 < gen_nb_xmlNodeSetPtr;n_nodes2++) {
- mem_base = xmlMemBlocks();
- nodes1 = gen_xmlNodeSetPtr(n_nodes1, 0);
- nodes2 = gen_xmlNodeSetPtr(n_nodes2, 1);
-
- ret_val = xmlXPathTrailingSorted(nodes1, nodes2);
- desret_xmlNodeSetPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_nodes1, nodes1, 0);
- des_xmlNodeSetPtr(n_nodes2, nodes2, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathTrailingSorted",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_nodes1);
- printf(" %d", n_nodes2);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathTranslateFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathTranslateFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathTranslateFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathTrueFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- int nargs; /* the number of arguments */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPathTrueFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathTrueFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathValueFlipSign(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPathValueFlipSign(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathValueFlipSign",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathVariableLookup(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
- xmlChar * name; /* the variable name */
- int n_name;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
-
- ret_val = xmlXPathVariableLookup(ctxt, (const xmlChar *)name);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathVariableLookup",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_name);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathVariableLookupNS(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathContextPtr ctxt; /* the XPath context */
- int n_ctxt;
- xmlChar * name; /* the variable name */
- int n_name;
- xmlChar * ns_uri; /* the variable namespace URI */
- int n_ns_uri;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathContextPtr;n_ctxt++) {
- for (n_name = 0;n_name < gen_nb_const_xmlChar_ptr;n_name++) {
- for (n_ns_uri = 0;n_ns_uri < gen_nb_const_xmlChar_ptr;n_ns_uri++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathContextPtr(n_ctxt, 0);
- name = gen_const_xmlChar_ptr(n_name, 1);
- ns_uri = gen_const_xmlChar_ptr(n_ns_uri, 2);
-
- ret_val = xmlXPathVariableLookupNS(ctxt, (const xmlChar *)name, (const xmlChar *)ns_uri);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathContextPtr(n_ctxt, ctxt, 0);
- des_const_xmlChar_ptr(n_name, (const xmlChar *)name, 1);
- des_const_xmlChar_ptr(n_ns_uri, (const xmlChar *)ns_uri, 2);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathVariableLookupNS",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_name);
- printf(" %d", n_ns_uri);
- printf("\n");
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathWrapCString(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- char * val; /* the char * value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_char_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_char_ptr(n_val, 0);
-
- ret_val = xmlXPathWrapCString(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_char_ptr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathWrapCString",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathWrapExternal(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- void * val; /* the user data */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_void_ptr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_void_ptr(n_val, 0);
-
- ret_val = xmlXPathWrapExternal(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_void_ptr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathWrapExternal",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPathWrapNodeSet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodeSetPtr val; /* the NodePtr value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlNodeSetPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlNodeSetPtr(n_val, 0);
-
- ret_val = xmlXPathWrapNodeSet(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPathWrapNodeSet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPatherror(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPATH_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPath Parser context */
- int n_ctxt;
- const char * file; /* the file name */
- int n_file;
- int line; /* the line number */
- int n_line;
- int no; /* the error number */
- int n_no;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_file = 0;n_file < gen_nb_filepath;n_file++) {
- for (n_line = 0;n_line < gen_nb_int;n_line++) {
- for (n_no = 0;n_no < gen_nb_int;n_no++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- file = gen_filepath(n_file, 1);
- line = gen_int(n_line, 2);
- no = gen_int(n_no, 3);
-
- xmlXPatherror(ctxt, file, line, no);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_filepath(n_file, file, 1);
- des_int(n_line, line, 2);
- des_int(n_no, no, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPatherror",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_file);
- printf(" %d", n_line);
- printf(" %d", n_no);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xpathInternals(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xpathInternals : 106 of 117 functions ...\n");
- test_ret += test_valuePop();
- test_ret += test_valuePush();
- test_ret += test_xmlXPathAddValues();
- test_ret += test_xmlXPathBooleanFunction();
- test_ret += test_xmlXPathCeilingFunction();
- test_ret += test_xmlXPathCompareValues();
- test_ret += test_xmlXPathConcatFunction();
- test_ret += test_xmlXPathContainsFunction();
- test_ret += test_xmlXPathCountFunction();
- test_ret += test_xmlXPathDebugDumpCompExpr();
- test_ret += test_xmlXPathDebugDumpObject();
- test_ret += test_xmlXPathDifference();
- test_ret += test_xmlXPathDistinct();
- test_ret += test_xmlXPathDistinctSorted();
- test_ret += test_xmlXPathDivValues();
- test_ret += test_xmlXPathEqualValues();
- test_ret += test_xmlXPathErr();
- test_ret += test_xmlXPathEvalExpr();
- test_ret += test_xmlXPathEvaluatePredicateResult();
- test_ret += test_xmlXPathFalseFunction();
- test_ret += test_xmlXPathFloorFunction();
- test_ret += test_xmlXPathFunctionLookup();
- test_ret += test_xmlXPathFunctionLookupNS();
- test_ret += test_xmlXPathHasSameNodes();
- test_ret += test_xmlXPathIdFunction();
- test_ret += test_xmlXPathIntersection();
- test_ret += test_xmlXPathIsNodeType();
- test_ret += test_xmlXPathLangFunction();
- test_ret += test_xmlXPathLastFunction();
- test_ret += test_xmlXPathLeading();
- test_ret += test_xmlXPathLeadingSorted();
- test_ret += test_xmlXPathLocalNameFunction();
- test_ret += test_xmlXPathModValues();
- test_ret += test_xmlXPathMultValues();
- test_ret += test_xmlXPathNamespaceURIFunction();
- test_ret += test_xmlXPathNewBoolean();
- test_ret += test_xmlXPathNewCString();
- test_ret += test_xmlXPathNewFloat();
- test_ret += test_xmlXPathNewNodeSet();
- test_ret += test_xmlXPathNewNodeSetList();
- test_ret += test_xmlXPathNewParserContext();
- test_ret += test_xmlXPathNewString();
- test_ret += test_xmlXPathNextAncestor();
- test_ret += test_xmlXPathNextAncestorOrSelf();
- test_ret += test_xmlXPathNextAttribute();
- test_ret += test_xmlXPathNextChild();
- test_ret += test_xmlXPathNextDescendant();
- test_ret += test_xmlXPathNextDescendantOrSelf();
- test_ret += test_xmlXPathNextFollowing();
- test_ret += test_xmlXPathNextFollowingSibling();
- test_ret += test_xmlXPathNextNamespace();
- test_ret += test_xmlXPathNextParent();
- test_ret += test_xmlXPathNextPreceding();
- test_ret += test_xmlXPathNextPrecedingSibling();
- test_ret += test_xmlXPathNextSelf();
- test_ret += test_xmlXPathNodeLeading();
- test_ret += test_xmlXPathNodeLeadingSorted();
- test_ret += test_xmlXPathNodeSetAdd();
- test_ret += test_xmlXPathNodeSetAddNs();
- test_ret += test_xmlXPathNodeSetAddUnique();
- test_ret += test_xmlXPathNodeSetContains();
- test_ret += test_xmlXPathNodeSetDel();
- test_ret += test_xmlXPathNodeSetMerge();
- test_ret += test_xmlXPathNodeSetRemove();
- test_ret += test_xmlXPathNodeSetSort();
- test_ret += test_xmlXPathNodeTrailing();
- test_ret += test_xmlXPathNodeTrailingSorted();
- test_ret += test_xmlXPathNormalizeFunction();
- test_ret += test_xmlXPathNotEqualValues();
- test_ret += test_xmlXPathNotFunction();
- test_ret += test_xmlXPathNsLookup();
- test_ret += test_xmlXPathNumberFunction();
- test_ret += test_xmlXPathParseNCName();
- test_ret += test_xmlXPathParseName();
- test_ret += test_xmlXPathPopBoolean();
- test_ret += test_xmlXPathPopExternal();
- test_ret += test_xmlXPathPopNodeSet();
- test_ret += test_xmlXPathPopNumber();
- test_ret += test_xmlXPathPopString();
- test_ret += test_xmlXPathPositionFunction();
- test_ret += test_xmlXPathRegisterAllFunctions();
- test_ret += test_xmlXPathRegisterFunc();
- test_ret += test_xmlXPathRegisterFuncLookup();
- test_ret += test_xmlXPathRegisterFuncNS();
- test_ret += test_xmlXPathRegisterNs();
- test_ret += test_xmlXPathRegisterVariable();
- test_ret += test_xmlXPathRegisterVariableLookup();
- test_ret += test_xmlXPathRegisterVariableNS();
- test_ret += test_xmlXPathRegisteredFuncsCleanup();
- test_ret += test_xmlXPathRegisteredNsCleanup();
- test_ret += test_xmlXPathRegisteredVariablesCleanup();
- test_ret += test_xmlXPathRoot();
- test_ret += test_xmlXPathRoundFunction();
- test_ret += test_xmlXPathStartsWithFunction();
- test_ret += test_xmlXPathStringEvalNumber();
- test_ret += test_xmlXPathStringFunction();
- test_ret += test_xmlXPathStringLengthFunction();
- test_ret += test_xmlXPathSubValues();
- test_ret += test_xmlXPathSubstringAfterFunction();
- test_ret += test_xmlXPathSubstringBeforeFunction();
- test_ret += test_xmlXPathSubstringFunction();
- test_ret += test_xmlXPathSumFunction();
- test_ret += test_xmlXPathTrailing();
- test_ret += test_xmlXPathTrailingSorted();
- test_ret += test_xmlXPathTranslateFunction();
- test_ret += test_xmlXPathTrueFunction();
- test_ret += test_xmlXPathValueFlipSign();
- test_ret += test_xmlXPathVariableLookup();
- test_ret += test_xmlXPathVariableLookupNS();
- test_ret += test_xmlXPathWrapCString();
- test_ret += test_xmlXPathWrapExternal();
- test_ret += test_xmlXPathWrapNodeSet();
- test_ret += test_xmlXPatherror();
-
- if (test_ret != 0)
- printf("Module xpathInternals: %d errors\n", test_ret);
- return(test_ret);
-}
-
-static int
-test_xmlXPtrBuildNodeList(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlNodePtr ret_val;
- xmlXPathObjectPtr obj; /* the XPointer result from the evaluation. */
- int n_obj;
-
- for (n_obj = 0;n_obj < gen_nb_xmlXPathObjectPtr;n_obj++) {
- mem_base = xmlMemBlocks();
- obj = gen_xmlXPathObjectPtr(n_obj, 0);
-
- ret_val = xmlXPtrBuildNodeList(obj);
- desret_xmlNodePtr(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_obj, obj, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrBuildNodeList",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_obj);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrEval(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlChar * str; /* the XPointer expression */
- int n_str;
- xmlXPathContextPtr ctx; /* the XPointer context */
- int n_ctx;
-
- for (n_str = 0;n_str < gen_nb_const_xmlChar_ptr;n_str++) {
- for (n_ctx = 0;n_ctx < gen_nb_xmlXPathContextPtr;n_ctx++) {
- mem_base = xmlMemBlocks();
- str = gen_const_xmlChar_ptr(n_str, 0);
- ctx = gen_xmlXPathContextPtr(n_ctx, 1);
-
- ret_val = xmlXPtrEval((const xmlChar *)str, ctx);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_const_xmlChar_ptr(n_str, (const xmlChar *)str, 0);
- des_xmlXPathContextPtr(n_ctx, ctx, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrEval",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_str);
- printf(" %d", n_ctx);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrEvalRangePredicate(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPointer Parser context */
- int n_ctxt;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
-
- xmlXPtrEvalRangePredicate(ctxt);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrEvalRangePredicate",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-#ifdef LIBXML_XPTR_ENABLED
-
-#define gen_nb_xmlLocationSetPtr 1
-static xmlLocationSetPtr gen_xmlLocationSetPtr(int no ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
- return(NULL);
-}
-static void des_xmlLocationSetPtr(int no ATTRIBUTE_UNUSED, xmlLocationSetPtr val ATTRIBUTE_UNUSED, int nr ATTRIBUTE_UNUSED) {
-}
-#endif
-
-
-static int
-test_xmlXPtrLocationSetAdd(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlLocationSetPtr cur; /* the initial range set */
- int n_cur;
- xmlXPathObjectPtr val; /* a new xmlXPathObjectPtr */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlLocationSetPtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlLocationSetPtr(n_cur, 0);
- val = gen_xmlXPathObjectPtr(n_val, 1);
-
- xmlXPtrLocationSetAdd(cur, val);
- call_tests++;
- des_xmlLocationSetPtr(n_cur, cur, 0);
- des_xmlXPathObjectPtr(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrLocationSetAdd",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrLocationSetCreate(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrLocationSetDel(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlLocationSetPtr cur; /* the initial range set */
- int n_cur;
- xmlXPathObjectPtr val; /* an xmlXPathObjectPtr */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlLocationSetPtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_xmlXPathObjectPtr;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlLocationSetPtr(n_cur, 0);
- val = gen_xmlXPathObjectPtr(n_val, 1);
-
- xmlXPtrLocationSetDel(cur, val);
- call_tests++;
- des_xmlLocationSetPtr(n_cur, cur, 0);
- des_xmlXPathObjectPtr(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrLocationSetDel",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrLocationSetMerge(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrLocationSetRemove(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlLocationSetPtr cur; /* the initial range set */
- int n_cur;
- int val; /* the index to remove */
- int n_val;
-
- for (n_cur = 0;n_cur < gen_nb_xmlLocationSetPtr;n_cur++) {
- for (n_val = 0;n_val < gen_nb_int;n_val++) {
- mem_base = xmlMemBlocks();
- cur = gen_xmlLocationSetPtr(n_cur, 0);
- val = gen_int(n_val, 1);
-
- xmlXPtrLocationSetRemove(cur, val);
- call_tests++;
- des_xmlLocationSetPtr(n_cur, cur, 0);
- des_int(n_val, val, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrLocationSetRemove",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_cur);
- printf(" %d", n_val);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewCollapsedRange(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodePtr start; /* the starting and ending node */
- int n_start;
-
- for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
- mem_base = xmlMemBlocks();
- start = gen_xmlNodePtr(n_start, 0);
-
- ret_val = xmlXPtrNewCollapsedRange(start);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_start, start, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewCollapsedRange",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_start);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewContext(void) {
- int test_ret = 0;
-
-
- /* missing type support */
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewLocationSetNodeSet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodeSetPtr set; /* a node set */
- int n_set;
-
- for (n_set = 0;n_set < gen_nb_xmlNodeSetPtr;n_set++) {
- mem_base = xmlMemBlocks();
- set = gen_xmlNodeSetPtr(n_set, 0);
-
- ret_val = xmlXPtrNewLocationSetNodeSet(set);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodeSetPtr(n_set, set, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewLocationSetNodeSet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_set);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewLocationSetNodes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodePtr start; /* the start NodePtr value */
- int n_start;
- xmlNodePtr end; /* the end NodePtr value or NULL */
- int n_end;
-
- for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
- for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) {
- mem_base = xmlMemBlocks();
- start = gen_xmlNodePtr(n_start, 0);
- end = gen_xmlNodePtr(n_end, 1);
-
- ret_val = xmlXPtrNewLocationSetNodes(start, end);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_start, start, 0);
- des_xmlNodePtr(n_end, end, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewLocationSetNodes",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_start);
- printf(" %d", n_end);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewRange(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodePtr start; /* the starting node */
- int n_start;
- int startindex; /* the start index */
- int n_startindex;
- xmlNodePtr end; /* the ending point */
- int n_end;
- int endindex; /* the ending index */
- int n_endindex;
-
- for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
- for (n_startindex = 0;n_startindex < gen_nb_int;n_startindex++) {
- for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) {
- for (n_endindex = 0;n_endindex < gen_nb_int;n_endindex++) {
- mem_base = xmlMemBlocks();
- start = gen_xmlNodePtr(n_start, 0);
- startindex = gen_int(n_startindex, 1);
- end = gen_xmlNodePtr(n_end, 2);
- endindex = gen_int(n_endindex, 3);
-
- ret_val = xmlXPtrNewRange(start, startindex, end, endindex);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_start, start, 0);
- des_int(n_startindex, startindex, 1);
- des_xmlNodePtr(n_end, end, 2);
- des_int(n_endindex, endindex, 3);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewRange",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_start);
- printf(" %d", n_startindex);
- printf(" %d", n_end);
- printf(" %d", n_endindex);
- printf("\n");
- }
- }
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewRangeNodeObject(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodePtr start; /* the starting node */
- int n_start;
- xmlXPathObjectPtr end; /* the ending object */
- int n_end;
-
- for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
- for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) {
- mem_base = xmlMemBlocks();
- start = gen_xmlNodePtr(n_start, 0);
- end = gen_xmlXPathObjectPtr(n_end, 1);
-
- ret_val = xmlXPtrNewRangeNodeObject(start, end);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_start, start, 0);
- des_xmlXPathObjectPtr(n_end, end, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewRangeNodeObject",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_start);
- printf(" %d", n_end);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewRangeNodePoint(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodePtr start; /* the starting node */
- int n_start;
- xmlXPathObjectPtr end; /* the ending point */
- int n_end;
-
- for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
- for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) {
- mem_base = xmlMemBlocks();
- start = gen_xmlNodePtr(n_start, 0);
- end = gen_xmlXPathObjectPtr(n_end, 1);
-
- ret_val = xmlXPtrNewRangeNodePoint(start, end);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_start, start, 0);
- des_xmlXPathObjectPtr(n_end, end, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewRangeNodePoint",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_start);
- printf(" %d", n_end);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewRangeNodes(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlNodePtr start; /* the starting node */
- int n_start;
- xmlNodePtr end; /* the ending node */
- int n_end;
-
- for (n_start = 0;n_start < gen_nb_xmlNodePtr;n_start++) {
- for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) {
- mem_base = xmlMemBlocks();
- start = gen_xmlNodePtr(n_start, 0);
- end = gen_xmlNodePtr(n_end, 1);
-
- ret_val = xmlXPtrNewRangeNodes(start, end);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlNodePtr(n_start, start, 0);
- des_xmlNodePtr(n_end, end, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewRangeNodes",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_start);
- printf(" %d", n_end);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewRangePointNode(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathObjectPtr start; /* the starting point */
- int n_start;
- xmlNodePtr end; /* the ending node */
- int n_end;
-
- for (n_start = 0;n_start < gen_nb_xmlXPathObjectPtr;n_start++) {
- for (n_end = 0;n_end < gen_nb_xmlNodePtr;n_end++) {
- mem_base = xmlMemBlocks();
- start = gen_xmlXPathObjectPtr(n_start, 0);
- end = gen_xmlNodePtr(n_end, 1);
-
- ret_val = xmlXPtrNewRangePointNode(start, end);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_start, start, 0);
- des_xmlNodePtr(n_end, end, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewRangePointNode",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_start);
- printf(" %d", n_end);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrNewRangePoints(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlXPathObjectPtr start; /* the starting point */
- int n_start;
- xmlXPathObjectPtr end; /* the ending point */
- int n_end;
-
- for (n_start = 0;n_start < gen_nb_xmlXPathObjectPtr;n_start++) {
- for (n_end = 0;n_end < gen_nb_xmlXPathObjectPtr;n_end++) {
- mem_base = xmlMemBlocks();
- start = gen_xmlXPathObjectPtr(n_start, 0);
- end = gen_xmlXPathObjectPtr(n_end, 1);
-
- ret_val = xmlXPtrNewRangePoints(start, end);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlXPathObjectPtr(n_start, start, 0);
- des_xmlXPathObjectPtr(n_end, end, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrNewRangePoints",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_start);
- printf(" %d", n_end);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrRangeToFunction(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathParserContextPtr ctxt; /* the XPointer Parser context */
- int n_ctxt;
- int nargs; /* the number of args */
- int n_nargs;
-
- for (n_ctxt = 0;n_ctxt < gen_nb_xmlXPathParserContextPtr;n_ctxt++) {
- for (n_nargs = 0;n_nargs < gen_nb_int;n_nargs++) {
- mem_base = xmlMemBlocks();
- ctxt = gen_xmlXPathParserContextPtr(n_ctxt, 0);
- nargs = gen_int(n_nargs, 1);
-
- xmlXPtrRangeToFunction(ctxt, nargs);
- call_tests++;
- des_xmlXPathParserContextPtr(n_ctxt, ctxt, 0);
- des_int(n_nargs, nargs, 1);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrRangeToFunction",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_ctxt);
- printf(" %d", n_nargs);
- printf("\n");
- }
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-
-static int
-test_xmlXPtrWrapLocationSet(void) {
- int test_ret = 0;
-
-#if defined(LIBXML_XPTR_ENABLED)
- int mem_base;
- xmlXPathObjectPtr ret_val;
- xmlLocationSetPtr val; /* the LocationSet value */
- int n_val;
-
- for (n_val = 0;n_val < gen_nb_xmlLocationSetPtr;n_val++) {
- mem_base = xmlMemBlocks();
- val = gen_xmlLocationSetPtr(n_val, 0);
-
- ret_val = xmlXPtrWrapLocationSet(val);
- desret_xmlXPathObjectPtr(ret_val);
- call_tests++;
- des_xmlLocationSetPtr(n_val, val, 0);
- xmlResetLastError();
- if (mem_base != xmlMemBlocks()) {
- printf("Leak of %d blocks found in xmlXPtrWrapLocationSet",
- xmlMemBlocks() - mem_base);
- test_ret++;
- printf(" %d", n_val);
- printf("\n");
- }
- }
- function_tests++;
-#endif
-
- return(test_ret);
-}
-
-static int
-test_xpointer(void) {
- int test_ret = 0;
-
- if (quiet == 0) printf("Testing xpointer : 17 of 21 functions ...\n");
- test_ret += test_xmlXPtrBuildNodeList();
- test_ret += test_xmlXPtrEval();
- test_ret += test_xmlXPtrEvalRangePredicate();
- test_ret += test_xmlXPtrLocationSetAdd();
- test_ret += test_xmlXPtrLocationSetCreate();
- test_ret += test_xmlXPtrLocationSetDel();
- test_ret += test_xmlXPtrLocationSetMerge();
- test_ret += test_xmlXPtrLocationSetRemove();
- test_ret += test_xmlXPtrNewCollapsedRange();
- test_ret += test_xmlXPtrNewContext();
- test_ret += test_xmlXPtrNewLocationSetNodeSet();
- test_ret += test_xmlXPtrNewLocationSetNodes();
- test_ret += test_xmlXPtrNewRange();
- test_ret += test_xmlXPtrNewRangeNodeObject();
- test_ret += test_xmlXPtrNewRangeNodePoint();
- test_ret += test_xmlXPtrNewRangeNodes();
- test_ret += test_xmlXPtrNewRangePointNode();
- test_ret += test_xmlXPtrNewRangePoints();
- test_ret += test_xmlXPtrRangeToFunction();
- test_ret += test_xmlXPtrWrapLocationSet();
-
- if (test_ret != 0)
- printf("Module xpointer: %d errors\n", test_ret);
- return(test_ret);
-}
-static int
-test_module(const char *module) {
- if (!strcmp(module, "HTMLparser")) return(test_HTMLparser());
- if (!strcmp(module, "HTMLtree")) return(test_HTMLtree());
- if (!strcmp(module, "SAX2")) return(test_SAX2());
- if (!strcmp(module, "c14n")) return(test_c14n());
- if (!strcmp(module, "catalog")) return(test_catalog());
- if (!strcmp(module, "chvalid")) return(test_chvalid());
- if (!strcmp(module, "debugXML")) return(test_debugXML());
- if (!strcmp(module, "dict")) return(test_dict());
- if (!strcmp(module, "encoding")) return(test_encoding());
- if (!strcmp(module, "entities")) return(test_entities());
- if (!strcmp(module, "hash")) return(test_hash());
- if (!strcmp(module, "list")) return(test_list());
- if (!strcmp(module, "nanoftp")) return(test_nanoftp());
- if (!strcmp(module, "nanohttp")) return(test_nanohttp());
- if (!strcmp(module, "parser")) return(test_parser());
- if (!strcmp(module, "parserInternals")) return(test_parserInternals());
- if (!strcmp(module, "pattern")) return(test_pattern());
- if (!strcmp(module, "relaxng")) return(test_relaxng());
- if (!strcmp(module, "schemasInternals")) return(test_schemasInternals());
- if (!strcmp(module, "schematron")) return(test_schematron());
- if (!strcmp(module, "tree")) return(test_tree());
- if (!strcmp(module, "uri")) return(test_uri());
- if (!strcmp(module, "valid")) return(test_valid());
- if (!strcmp(module, "xinclude")) return(test_xinclude());
- if (!strcmp(module, "xmlIO")) return(test_xmlIO());
- if (!strcmp(module, "xmlautomata")) return(test_xmlautomata());
- if (!strcmp(module, "xmlerror")) return(test_xmlerror());
- if (!strcmp(module, "xmlmodule")) return(test_xmlmodule());
- if (!strcmp(module, "xmlreader")) return(test_xmlreader());
- if (!strcmp(module, "xmlregexp")) return(test_xmlregexp());
- if (!strcmp(module, "xmlsave")) return(test_xmlsave());
- if (!strcmp(module, "xmlschemas")) return(test_xmlschemas());
- if (!strcmp(module, "xmlschemastypes")) return(test_xmlschemastypes());
- if (!strcmp(module, "xmlstring")) return(test_xmlstring());
- if (!strcmp(module, "xmlunicode")) return(test_xmlunicode());
- if (!strcmp(module, "xmlwriter")) return(test_xmlwriter());
- if (!strcmp(module, "xpath")) return(test_xpath());
- if (!strcmp(module, "xpathInternals")) return(test_xpathInternals());
- if (!strcmp(module, "xpointer")) return(test_xpointer());
- return(0);
-}
diff --git a/external/libxml2_android/jni/libxml2/testchar.c b/external/libxml2_android/jni/libxml2/testchar.c
deleted file mode 100644
index 0d087927..00000000
--- a/external/libxml2_android/jni/libxml2/testchar.c
+++ /dev/null
@@ -1,617 +0,0 @@
-/**
- * Test the UTF-8 decoding routines
- *
- * author: Daniel Veillard
- * copy: see Copyright for the status of this software.
- */
-
-#include <stdio.h>
-#include <string.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-
-#include "buf.h"
-
-int lastError;
-
-static void errorHandler(void *unused, xmlErrorPtr err) {
- if ((unused == NULL) && (err != NULL) && (lastError == 0)) {
- lastError = err->code;
- }
-}
-
-char document1[100] = "<doc>XXXX</doc>";
-char document2[100] = "<doc foo='XXXX'/>";
-
-static void testDocumentRangeByte1(xmlParserCtxtPtr ctxt, char *document,
- int len, char *data, int forbid1, int forbid2) {
- int i;
- xmlDocPtr res;
-
- for (i = 0;i <= 0xFF;i++) {
- lastError = 0;
- xmlCtxtReset(ctxt);
-
- data[0] = i;
-
- res = xmlReadMemory(document, len, "test", NULL, 0);
-
- if ((i == forbid1) || (i == forbid2)) {
- if ((lastError == 0) || (res != NULL))
- fprintf(stderr,
- "Failed to detect invalid char for Byte 0x%02X: %c\n",
- i, i);
- }
-
- else if ((i == '<') || (i == '&')) {
- if ((lastError == 0) || (res != NULL))
- fprintf(stderr,
- "Failed to detect illegal char %c for Byte 0x%02X\n", i, i);
- }
- else if (((i < 0x20) || (i >= 0x80)) &&
- (i != 0x9) && (i != 0xA) && (i != 0xD)) {
- if ((lastError != XML_ERR_INVALID_CHAR) && (res != NULL))
- fprintf(stderr,
- "Failed to detect invalid char for Byte 0x%02X\n", i);
- }
- else if (res == NULL) {
- fprintf(stderr,
- "Failed to parse valid char for Byte 0x%02X : %c\n", i, i);
- }
- if (res != NULL)
- xmlFreeDoc(res);
- }
-}
-
-static void testDocumentRangeByte2(xmlParserCtxtPtr ctxt, char *document,
- int len, char *data) {
- int i, j;
- xmlDocPtr res;
-
- for (i = 0x80;i <= 0xFF;i++) {
- for (j = 0;j <= 0xFF;j++) {
- lastError = 0;
- xmlCtxtReset(ctxt);
-
- data[0] = i;
- data[1] = j;
-
- res = xmlReadMemory(document, len, "test", NULL, 0);
-
- /* if first bit of first char is set, then second bit must too */
- if ((i & 0x80) && ((i & 0x40) == 0)) {
- if ((lastError == 0) || (res != NULL))
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
- i, j);
- }
-
- /*
- * if first bit of first char is set, then second char first
- * bits must be 10
- */
- else if ((i & 0x80) && ((j & 0xC0) != 0x80)) {
- if ((lastError == 0) || (res != NULL))
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
- i, j);
- }
-
- /*
- * if using a 2 byte encoding then the value must be greater
- * than 0x80, i.e. one of bits 5 to 1 of i must be set
- */
- else if ((i & 0x80) && ((i & 0x1E) == 0)) {
- if ((lastError == 0) || (res != NULL))
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
- i, j);
- }
-
- /*
- * if third bit of first char is set, then the sequence would need
- * at least 3 bytes, but we give only 2 !
- */
- else if ((i & 0xE0) == 0xE0) {
- if ((lastError == 0) || (res != NULL))
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x00\n",
- i, j);
- }
-
- /*
- * We should see no error in remaning cases
- */
- else if ((lastError != 0) || (res == NULL)) {
- fprintf(stderr,
- "Failed to parse document for Bytes 0x%02X 0x%02X\n", i, j);
- }
- if (res != NULL)
- xmlFreeDoc(res);
- }
- }
-}
-
-/**
- * testDocumentRanges:
- *
- * Test the correct UTF8 character parsing in context of XML documents
- * Those are in-context injection tests checking the parser behaviour on
- * edge case values at different point in content, beginning and end of
- * CDATA in text or in attribute values.
- */
-
-static void testDocumentRanges(void) {
- xmlParserCtxtPtr ctxt;
- char *data;
-
- /*
- * Set up a parsing context using the first document as
- * the current input source.
- */
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- fprintf(stderr, "Failed to allocate parser context\n");
- return;
- }
-
- printf("testing 1 byte char in document: 1");
- fflush(stdout);
- data = &document1[5];
- data[0] = ' ';
- data[1] = ' ';
- data[2] = ' ';
- data[3] = ' ';
- /* test 1 byte injection at beginning of area */
- testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
- data, -1, -1);
- printf(" 2");
- fflush(stdout);
- data[0] = ' ';
- data[1] = ' ';
- data[2] = ' ';
- data[3] = ' ';
- /* test 1 byte injection at end of area */
- testDocumentRangeByte1(ctxt, &document1[0], strlen(document1),
- data + 3, -1, -1);
-
- printf(" 3");
- fflush(stdout);
- data = &document2[10];
- data[0] = ' ';
- data[1] = ' ';
- data[2] = ' ';
- data[3] = ' ';
- /* test 1 byte injection at beginning of area */
- testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
- data, '\'', -1);
- printf(" 4");
- fflush(stdout);
- data[0] = ' ';
- data[1] = ' ';
- data[2] = ' ';
- data[3] = ' ';
- /* test 1 byte injection at end of area */
- testDocumentRangeByte1(ctxt, &document2[0], strlen(document2),
- data + 3, '\'', -1);
- printf(" done\n");
-
- printf("testing 2 byte char in document: 1");
- fflush(stdout);
- data = &document1[5];
- data[0] = ' ';
- data[1] = ' ';
- data[2] = ' ';
- data[3] = ' ';
- /* test 2 byte injection at beginning of area */
- testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
- data);
- printf(" 2");
- fflush(stdout);
- data[0] = ' ';
- data[1] = ' ';
- data[2] = ' ';
- data[3] = ' ';
- /* test 2 byte injection at end of area */
- testDocumentRangeByte2(ctxt, &document1[0], strlen(document1),
- data + 2);
-
- printf(" 3");
- fflush(stdout);
- data = &document2[10];
- data[0] = ' ';
- data[1] = ' ';
- data[2] = ' ';
- data[3] = ' ';
- /* test 2 byte injection at beginning of area */
- testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
- data);
- printf(" 4");
- fflush(stdout);
- data[0] = ' ';
- data[1] = ' ';
- data[2] = ' ';
- data[3] = ' ';
- /* test 2 byte injection at end of area */
- testDocumentRangeByte2(ctxt, &document2[0], strlen(document2),
- data + 2);
- printf(" done\n");
-
- xmlFreeParserCtxt(ctxt);
-}
-
-static void testCharRangeByte1(xmlParserCtxtPtr ctxt, char *data) {
- int i = 0;
- int len, c;
-
- data[1] = 0;
- data[2] = 0;
- data[3] = 0;
- for (i = 0;i <= 0xFF;i++) {
- data[0] = i;
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
-
- lastError = 0;
- c = xmlCurrentChar(ctxt, &len);
- if ((i == 0) || (i >= 0x80)) {
- /* we must see an error there */
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Byte 0x%02X\n", i);
- } else if (i == 0xD) {
- if ((c != 0xA) || (len != 1))
- fprintf(stderr, "Failed to convert char for Byte 0x%02X\n", i);
- } else if ((c != i) || (len != 1)) {
- fprintf(stderr, "Failed to parse char for Byte 0x%02X\n", i);
- }
- }
-}
-
-static void testCharRangeByte2(xmlParserCtxtPtr ctxt, char *data) {
- int i, j;
- int len, c;
-
- data[2] = 0;
- data[3] = 0;
- for (i = 0x80;i <= 0xFF;i++) {
- for (j = 0;j <= 0xFF;j++) {
- data[0] = i;
- data[1] = j;
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
-
- lastError = 0;
- c = xmlCurrentChar(ctxt, &len);
-
- /* if first bit of first char is set, then second bit must too */
- if ((i & 0x80) && ((i & 0x40) == 0)) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X\n",
- i, j);
- }
-
- /*
- * if first bit of first char is set, then second char first
- * bits must be 10
- */
- else if ((i & 0x80) && ((j & 0xC0) != 0x80)) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X: %d\n",
- i, j, c);
- }
-
- /*
- * if using a 2 byte encoding then the value must be greater
- * than 0x80, i.e. one of bits 5 to 1 of i must be set
- */
- else if ((i & 0x80) && ((i & 0x1E) == 0)) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X: %d\n",
- i, j, c);
- }
-
- /*
- * if third bit of first char is set, then the sequence would need
- * at least 3 bytes, but we give only 2 !
- */
- else if ((i & 0xE0) == 0xE0) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x00\n",
- i, j);
- }
-
- /*
- * We should see no error in remaning cases
- */
- else if ((lastError != 0) || (len != 2)) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X\n", i, j);
- }
-
- /*
- * Finally check the value is right
- */
- else if (c != (j & 0x3F) + ((i & 0x1F) << 6)) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X: expect %d got %d\n",
- i, j, ((j & 0x3F) + ((i & 0x1F) << 6)), c);
- }
- }
- }
-}
-
-static void testCharRangeByte3(xmlParserCtxtPtr ctxt, char *data) {
- int i, j, k, K;
- int len, c;
- unsigned char lows[6] = {0, 0x80, 0x81, 0xC1, 0xFF, 0xBF};
- int value;
-
- data[3] = 0;
- for (i = 0xE0;i <= 0xFF;i++) {
- for (j = 0;j <= 0xFF;j++) {
- for (k = 0;k < 6;k++) {
- data[0] = i;
- data[1] = j;
- K = lows[k];
- data[2] = (char) K;
- value = (K & 0x3F) + ((j & 0x3F) << 6) + ((i & 0xF) << 12);
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
-
- lastError = 0;
- c = xmlCurrentChar(ctxt, &len);
-
- /*
- * if fourth bit of first char is set, then the sequence would need
- * at least 4 bytes, but we give only 3 !
- */
- if ((i & 0xF0) == 0xF0) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- i, j, K, data[3]);
- }
-
- /*
- * The second and the third bytes must start with 10
- */
- else if (((j & 0xC0) != 0x80) || ((K & 0xC0) != 0x80)) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X\n",
- i, j, K);
- }
-
- /*
- * if using a 3 byte encoding then the value must be greater
- * than 0x800, i.e. one of bits 4 to 0 of i must be set or
- * the 6th byte of data[1] must be set
- */
- else if (((i & 0xF) == 0) && ((j & 0x20) == 0)) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X\n",
- i, j, K);
- }
-
- /*
- * There are values in that range that are not allowed in XML-1.0
- */
- else if (((value > 0xD7FF) && (value <0xE000)) ||
- ((value > 0xFFFD) && (value <0x10000))) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X\n",
- value, i, j, K);
- }
-
- /*
- * We should see no error in remaining cases
- */
- else if ((lastError != 0) || (len != 3)) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n",
- i, j, K);
- }
-
- /*
- * Finally check the value is right
- */
- else if (c != value) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n",
- i, j, data[2], value, c);
- }
- }
- }
- }
-}
-
-static void testCharRangeByte4(xmlParserCtxtPtr ctxt, char *data) {
- int i, j, k, K, l, L;
- int len, c;
- unsigned char lows[6] = {0, 0x80, 0x81, 0xC1, 0xFF, 0xBF};
- int value;
-
- data[4] = 0;
- for (i = 0xF0;i <= 0xFF;i++) {
- for (j = 0;j <= 0xFF;j++) {
- for (k = 0;k < 6;k++) {
- for (l = 0;l < 6;l++) {
- data[0] = i;
- data[1] = j;
- K = lows[k];
- data[2] = (char) K;
- L = lows[l];
- data[3] = (char) L;
- value = (L & 0x3F) + ((K & 0x3F) << 6) + ((j & 0x3F) << 12) +
- ((i & 0x7) << 18);
- ctxt->charset = XML_CHAR_ENCODING_UTF8;
-
- lastError = 0;
- c = xmlCurrentChar(ctxt, &len);
-
- /*
- * if fifth bit of first char is set, then the sequence would need
- * at least 5 bytes, but we give only 4 !
- */
- if ((i & 0xF8) == 0xF8) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- i, j, K, data[3]);
- }
-
- /*
- * The second, third and fourth bytes must start with 10
- */
- else if (((j & 0xC0) != 0x80) || ((K & 0xC0) != 0x80) ||
- ((L & 0xC0) != 0x80)) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- i, j, K, L);
- }
-
- /*
- * if using a 3 byte encoding then the value must be greater
- * than 0x10000, i.e. one of bits 3 to 0 of i must be set or
- * the 6 or 5th byte of j must be set
- */
- else if (((i & 0x7) == 0) && ((j & 0x30) == 0)) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
- "Failed to detect invalid char for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- i, j, K, L);
- }
-
- /*
- * There are values in that range that are not allowed in XML-1.0
- */
- else if (((value > 0xD7FF) && (value <0xE000)) ||
- ((value > 0xFFFD) && (value <0x10000)) ||
- (value > 0x10FFFF)) {
- if (lastError != XML_ERR_INVALID_CHAR)
- fprintf(stderr,
-"Failed to detect invalid char 0x%04X for Bytes 0x%02X 0x%02X 0x%02X 0x%02X\n",
- value, i, j, K, L);
- }
-
- /*
- * We should see no error in remaining cases
- */
- else if ((lastError != 0) || (len != 4)) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X\n",
- i, j, K);
- }
-
- /*
- * Finally check the value is right
- */
- else if (c != value) {
- fprintf(stderr,
- "Failed to parse char for Bytes 0x%02X 0x%02X 0x%02X: expect %d got %d\n",
- i, j, data[2], value, c);
- }
- }
- }
- }
- }
-}
-
-/**
- * testCharRanges:
- *
- * Test the correct UTF8 character parsing in isolation i.e.
- * not when parsing a full document, this is less expensive and we can
- * cover the full range of UTF-8 chars accepted by XML-1.0
- */
-
-static void testCharRanges(void) {
- char data[5];
- xmlParserCtxtPtr ctxt;
- xmlParserInputBufferPtr buf;
- xmlParserInputPtr input;
-
- memset(data, 0, 5);
-
- /*
- * Set up a parsing context using the above data buffer as
- * the current input source.
- */
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- fprintf(stderr, "Failed to allocate parser context\n");
- return;
- }
- buf = xmlParserInputBufferCreateStatic(data, sizeof(data),
- XML_CHAR_ENCODING_NONE);
- if (buf == NULL) {
- fprintf(stderr, "Failed to allocate input buffer\n");
- goto error;
- }
- input = xmlNewInputStream(ctxt);
- if (input == NULL) {
- xmlFreeParserInputBuffer(buf);
- goto error;
- }
- input->filename = NULL;
- input->buf = buf;
- input->cur =
- input->base = xmlBufContent(input->buf->buffer);
- input->end = input->base + 4;
- inputPush(ctxt, input);
-
- printf("testing char range: 1");
- fflush(stdout);
- testCharRangeByte1(ctxt, data);
- printf(" 2");
- fflush(stdout);
- testCharRangeByte2(ctxt, data);
- printf(" 3");
- fflush(stdout);
- testCharRangeByte3(ctxt, data);
- printf(" 4");
- fflush(stdout);
- testCharRangeByte4(ctxt, data);
- printf(" done\n");
- fflush(stdout);
-
-error:
- xmlFreeParserCtxt(ctxt);
-}
-
-int main(void) {
-
- /*
- * this initialize the library and check potential ABI mismatches
- * between the version it was compiled for and the actual shared
- * library used.
- */
- LIBXML_TEST_VERSION
-
- /*
- * Catch errors separately
- */
-
- xmlSetStructuredErrorFunc(NULL, errorHandler);
-
- /*
- * Run the tests
- */
- testCharRanges();
- testDocumentRanges();
-
- /*
- * Cleanup function for the XML library.
- */
- xmlCleanupParser();
- /*
- * this is to debug memory for regression tests
- */
- xmlMemoryDump();
- return(0);
-}
diff --git a/external/libxml2_android/jni/libxml2/testdict.c b/external/libxml2_android/jni/libxml2/testdict.c
deleted file mode 100644
index 40bebd05..00000000
--- a/external/libxml2_android/jni/libxml2/testdict.c
+++ /dev/null
@@ -1,444 +0,0 @@
-#include <string.h>
-#include <libxml/parser.h>
-#include <libxml/dict.h>
-
-/* #define WITH_PRINT */
-
-static const char *seeds1[] = {
- "a", "b", "c",
- "d", "e", "f",
- "g", "h", "i",
- "j", "k", "l",
-
- NULL
-};
-
-static const char *seeds2[] = {
- "m", "n", "o",
- "p", "q", "r",
- "s", "t", "u",
- "v", "w", "x",
-
- NULL
-};
-
-#define NB_STRINGS_NS 100
-#define NB_STRINGS_MAX 10000
-#define NB_STRINGS_MIN 10
-
-static xmlChar *strings1[NB_STRINGS_MAX];
-static xmlChar *strings2[NB_STRINGS_MAX];
-static const xmlChar *test1[NB_STRINGS_MAX];
-static const xmlChar *test2[NB_STRINGS_MAX];
-static int nbErrors = 0;
-
-static void fill_strings(void) {
- int i, j, k;
-
- /*
- * That's a bit nasty but the output is fine and it doesn't take hours
- * there is a small but sufficient number of duplicates, and we have
- * ":xxx" and full QNames in the last NB_STRINGS_NS values
- */
- for (i = 0; seeds1[i] != NULL; i++) {
- strings1[i] = xmlStrdup((const xmlChar *) seeds1[i]);
- if (strings1[i] == NULL) {
- fprintf(stderr, "Out of memory while generating strings1\n");
- exit(1);
- }
- }
- for (j = 0, k = 0;i < NB_STRINGS_MAX - NB_STRINGS_NS;i++,j++) {
- strings1[i] = xmlStrncatNew(strings1[j], strings1[k], -1);
- if (strings1[i] == NULL) {
- fprintf(stderr, "Out of memory while generating strings1\n");
- exit(1);
- }
- if (j >= 50) {
- j = 0;
- k++;
- }
- }
- for (j = 0; (j < 50) && (i < NB_STRINGS_MAX); i++, j+=2) {
- strings1[i] = xmlStrncatNew(strings1[j], (const xmlChar *) ":", -1);
- if (strings1[i] == NULL) {
- fprintf(stderr, "Out of memory while generating strings1\n");
- exit(1);
- }
- }
- for (j = NB_STRINGS_MAX - NB_STRINGS_NS, k = 0;
- i < NB_STRINGS_MAX;i++,j++) {
- strings1[i] = xmlStrncatNew(strings1[j], strings1[k], -1);
- if (strings1[i] == NULL) {
- fprintf(stderr, "Out of memory while generating strings1\n");
- exit(1);
- }
- k += 3;
- if (k >= 50) k = 0;
- }
-
- /*
- * Now do the same with the second pool of strings
- */
- for (i = 0; seeds2[i] != NULL; i++) {
- strings2[i] = xmlStrdup((const xmlChar *) seeds2[i]);
- if (strings2[i] == NULL) {
- fprintf(stderr, "Out of memory while generating strings2\n");
- exit(1);
- }
- }
- for (j = 0, k = 0;i < NB_STRINGS_MAX - NB_STRINGS_NS;i++,j++) {
- strings2[i] = xmlStrncatNew(strings2[j], strings2[k], -1);
- if (strings2[i] == NULL) {
- fprintf(stderr, "Out of memory while generating strings2\n");
- exit(1);
- }
- if (j >= 50) {
- j = 0;
- k++;
- }
- }
- for (j = 0; (j < 50) && (i < NB_STRINGS_MAX); i++, j+=2) {
- strings2[i] = xmlStrncatNew(strings2[j], (const xmlChar *) ":", -1);
- if (strings2[i] == NULL) {
- fprintf(stderr, "Out of memory while generating strings2\n");
- exit(1);
- }
- }
- for (j = NB_STRINGS_MAX - NB_STRINGS_NS, k = 0;
- i < NB_STRINGS_MAX;i++,j++) {
- strings2[i] = xmlStrncatNew(strings2[j], strings2[k], -1);
- if (strings2[i] == NULL) {
- fprintf(stderr, "Out of memory while generating strings2\n");
- exit(1);
- }
- k += 3;
- if (k >= 50) k = 0;
- }
-
-}
-
-#ifdef WITH_PRINT
-static void print_strings(void) {
- int i;
-
- for (i = 0; i < NB_STRINGS_MAX;i++) {
- printf("%s\n", strings1[i]);
- }
- for (i = 0; i < NB_STRINGS_MAX;i++) {
- printf("%s\n", strings2[i]);
- }
-}
-#endif
-
-static void clean_strings(void) {
- int i;
-
- for (i = 0; i < NB_STRINGS_MAX; i++) {
- if (strings1[i] != NULL) /* really should not happen */
- xmlFree(strings1[i]);
- }
- for (i = 0; i < NB_STRINGS_MAX; i++) {
- if (strings2[i] != NULL) /* really should not happen */
- xmlFree(strings2[i]);
- }
-}
-
-/*
- * This tests the sub-dictionary support
- */
-static int run_test2(xmlDictPtr parent) {
- int i, j;
- xmlDictPtr dict;
- int ret = 0;
- xmlChar prefix[40];
- xmlChar *cur, *pref;
- const xmlChar *tmp;
-
- dict = xmlDictCreateSub(parent);
- if (dict == NULL) {
- fprintf(stderr, "Out of memory while creating sub-dictionary\n");
- exit(1);
- }
- memset(test2, 0, sizeof(test2));
-
- /*
- * Fill in NB_STRINGS_MIN, at this point the dictionary should not grow
- * and we allocate all those doing the fast key computations
- * All the strings are based on a different seeds subset so we know
- * they are allocated in the main dictionary, not coming from the parent
- */
- for (i = 0;i < NB_STRINGS_MIN;i++) {
- test2[i] = xmlDictLookup(dict, strings2[i], -1);
- if (test2[i] == NULL) {
- fprintf(stderr, "Failed lookup for '%s'\n", strings2[i]);
- ret = 1;
- nbErrors++;
- }
- }
- j = NB_STRINGS_MAX - NB_STRINGS_NS;
- /* ":foo" like strings2 */
- for (i = 0;i < NB_STRINGS_MIN;i++, j++) {
- test2[j] = xmlDictLookup(dict, strings2[j], xmlStrlen(strings2[j]));
- if (test2[j] == NULL) {
- fprintf(stderr, "Failed lookup for '%s'\n", strings2[j]);
- ret = 1;
- nbErrors++;
- }
- }
- /* "a:foo" like strings2 */
- j = NB_STRINGS_MAX - NB_STRINGS_MIN;
- for (i = 0;i < NB_STRINGS_MIN;i++, j++) {
- test2[j] = xmlDictLookup(dict, strings2[j], xmlStrlen(strings2[j]));
- if (test2[j] == NULL) {
- fprintf(stderr, "Failed lookup for '%s'\n", strings2[j]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * At this point allocate all the strings
- * the dictionary will grow in the process, reallocate more string tables
- * and switch to the better key generator
- */
- for (i = 0;i < NB_STRINGS_MAX;i++) {
- if (test2[i] != NULL)
- continue;
- test2[i] = xmlDictLookup(dict, strings2[i], -1);
- if (test2[i] == NULL) {
- fprintf(stderr, "Failed lookup for '%s'\n", strings2[i]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * Now we can start to test things, first that all strings2 belongs to
- * the dict, and that none of them was actually allocated in the parent
- */
- for (i = 0;i < NB_STRINGS_MAX;i++) {
- if (!xmlDictOwns(dict, test2[i])) {
- fprintf(stderr, "Failed ownership failure for '%s'\n",
- strings2[i]);
- ret = 1;
- nbErrors++;
- }
- if (xmlDictOwns(parent, test2[i])) {
- fprintf(stderr, "Failed parent ownership failure for '%s'\n",
- strings2[i]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * Also verify that all strings from the parent are seen from the subdict
- */
- for (i = 0;i < NB_STRINGS_MAX;i++) {
- if (!xmlDictOwns(dict, test1[i])) {
- fprintf(stderr, "Failed sub-ownership failure for '%s'\n",
- strings1[i]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * Then that another lookup to the string in sub will return the same
- */
- for (i = 0;i < NB_STRINGS_MAX;i++) {
- if (xmlDictLookup(dict, strings2[i], -1) != test2[i]) {
- fprintf(stderr, "Failed re-lookup check for %d, '%s'\n",
- i, strings2[i]);
- ret = 1;
- nbErrors++;
- }
- }
- /*
- * But also that any lookup for a string in the parent will be provided
- * as in the parent
- */
- for (i = 0;i < NB_STRINGS_MAX;i++) {
- if (xmlDictLookup(dict, strings1[i], -1) != test1[i]) {
- fprintf(stderr, "Failed parent string lookup check for %d, '%s'\n",
- i, strings1[i]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * check the QName lookups
- */
- for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) {
- cur = strings2[i];
- pref = &prefix[0];
- while (*cur != ':') *pref++ = *cur++;
- cur++;
- *pref = 0;
- tmp = xmlDictQLookup(dict, &prefix[0], cur);
- if (tmp != test2[i]) {
- fprintf(stderr, "Failed lookup check for '%s':'%s'\n",
- &prefix[0], cur);
- ret = 1;
- nbErrors++;
- }
- }
- /*
- * check the QName lookups for strings from the parent
- */
- for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) {
- cur = strings1[i];
- pref = &prefix[0];
- while (*cur != ':') *pref++ = *cur++;
- cur++;
- *pref = 0;
- tmp = xmlDictQLookup(dict, &prefix[0], cur);
- if (xmlDictQLookup(dict, &prefix[0], cur) != test1[i]) {
- fprintf(stderr, "Failed parent lookup check for '%s':'%s'\n",
- &prefix[0], cur);
- ret = 1;
- nbErrors++;
- }
- }
-
- xmlDictFree(dict);
- return(ret);
-}
-
-/*
- * Test a single dictionary
- */
-static int run_test1(void) {
- int i, j;
- xmlDictPtr dict;
- int ret = 0;
- xmlChar prefix[40];
- xmlChar *cur, *pref;
- const xmlChar *tmp;
-
- dict = xmlDictCreate();
- if (dict == NULL) {
- fprintf(stderr, "Out of memory while creating dictionary\n");
- exit(1);
- }
- memset(test1, 0, sizeof(test1));
-
- /*
- * Fill in NB_STRINGS_MIN, at this point the dictionary should not grow
- * and we allocate all those doing the fast key computations
- */
- for (i = 0;i < NB_STRINGS_MIN;i++) {
- test1[i] = xmlDictLookup(dict, strings1[i], -1);
- if (test1[i] == NULL) {
- fprintf(stderr, "Failed lookup for '%s'\n", strings1[i]);
- ret = 1;
- nbErrors++;
- }
- }
- j = NB_STRINGS_MAX - NB_STRINGS_NS;
- /* ":foo" like strings1 */
- for (i = 0;i < NB_STRINGS_MIN;i++, j++) {
- test1[j] = xmlDictLookup(dict, strings1[j], xmlStrlen(strings1[j]));
- if (test1[j] == NULL) {
- fprintf(stderr, "Failed lookup for '%s'\n", strings1[j]);
- ret = 1;
- nbErrors++;
- }
- }
- /* "a:foo" like strings1 */
- j = NB_STRINGS_MAX - NB_STRINGS_MIN;
- for (i = 0;i < NB_STRINGS_MIN;i++, j++) {
- test1[j] = xmlDictLookup(dict, strings1[j], xmlStrlen(strings1[j]));
- if (test1[j] == NULL) {
- fprintf(stderr, "Failed lookup for '%s'\n", strings1[j]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * At this point allocate all the strings
- * the dictionary will grow in the process, reallocate more string tables
- * and switch to the better key generator
- */
- for (i = 0;i < NB_STRINGS_MAX;i++) {
- if (test1[i] != NULL)
- continue;
- test1[i] = xmlDictLookup(dict, strings1[i], -1);
- if (test1[i] == NULL) {
- fprintf(stderr, "Failed lookup for '%s'\n", strings1[i]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * Now we can start to test things, first that all strings1 belongs to
- * the dict
- */
- for (i = 0;i < NB_STRINGS_MAX;i++) {
- if (!xmlDictOwns(dict, test1[i])) {
- fprintf(stderr, "Failed ownership failure for '%s'\n",
- strings1[i]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * Then that another lookup to the string will return the same
- */
- for (i = 0;i < NB_STRINGS_MAX;i++) {
- if (xmlDictLookup(dict, strings1[i], -1) != test1[i]) {
- fprintf(stderr, "Failed re-lookup check for %d, '%s'\n",
- i, strings1[i]);
- ret = 1;
- nbErrors++;
- }
- }
-
- /*
- * More complex, check the QName lookups
- */
- for (i = NB_STRINGS_MAX - NB_STRINGS_NS;i < NB_STRINGS_MAX;i++) {
- cur = strings1[i];
- pref = &prefix[0];
- while (*cur != ':') *pref++ = *cur++;
- cur++;
- *pref = 0;
- tmp = xmlDictQLookup(dict, &prefix[0], cur);
- if (tmp != test1[i]) {
- fprintf(stderr, "Failed lookup check for '%s':'%s'\n",
- &prefix[0], cur);
- ret = 1;
- nbErrors++;
- }
- }
-
- run_test2(dict);
-
- xmlDictFree(dict);
- return(ret);
-}
-
-int main(void)
-{
- int ret;
-
- LIBXML_TEST_VERSION
- fill_strings();
-#ifdef WITH_PRINT
- print_strings();
-#endif
- ret = run_test1();
- if (ret == 0) {
- printf("dictionary tests succeeded %d strings\n", 2 * NB_STRINGS_MAX);
- } else {
- printf("dictionary tests failed with %d errors\n", nbErrors);
- }
- clean_strings();
- xmlCleanupParser();
- xmlMemoryDump();
- return(ret);
-}
diff --git a/external/libxml2_android/jni/libxml2/testdso.c b/external/libxml2_android/jni/libxml2/testdso.c
deleted file mode 100644
index bd4ff086..00000000
--- a/external/libxml2_android/jni/libxml2/testdso.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include <stdio.h>
-
-#define IN_LIBXML
-#include "libxml/xmlexports.h"
-
-XMLPUBFUN int hello_world(void);
-
-int hello_world(void)
-{
- printf("Success!\n");
- return 0;
-}
diff --git a/external/libxml2_android/jni/libxml2/testlimits.c b/external/libxml2_android/jni/libxml2/testlimits.c
deleted file mode 100644
index 68c94dbc..00000000
--- a/external/libxml2_android/jni/libxml2/testlimits.c
+++ /dev/null
@@ -1,1638 +0,0 @@
-/*
- * testlimits.c: C program to run libxml2 regression tests checking various
- * limits in document size. Will consume a lot of RAM and CPU cycles
- *
- * To compile on Unixes:
- * cc -o testlimits `xml2-config --cflags` testlimits.c `xml2-config --libs` -lpthread
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-#include <stdio.h>
-
-#if !defined(_WIN32) || defined(__CYGWIN__)
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <time.h>
-
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#ifdef LIBXML_READER_ENABLED
-#include <libxml/xmlreader.h>
-#endif
-
-static int verbose = 0;
-static int tests_quiet = 0;
-
-/************************************************************************
- * *
- * time handling *
- * *
- ************************************************************************/
-
-/* maximum time for one parsing before declaring a timeout */
-#define MAX_TIME 2 /* seconds */
-
-static clock_t t0;
-int timeout = 0;
-
-static void reset_timout(void) {
- timeout = 0;
- t0 = clock();
-}
-
-static int check_time(void) {
- clock_t tnow = clock();
- if (((tnow - t0) / CLOCKS_PER_SEC) > MAX_TIME) {
- timeout = 1;
- return(0);
- }
- return(1);
-}
-
-/************************************************************************
- * *
- * Huge document generator *
- * *
- ************************************************************************/
-
-#include <libxml/xmlIO.h>
-
-/*
- * Huge documents are built using fixed start and end chunks
- * and filling between the two an unconventional amount of char data
- */
-typedef struct hugeTest hugeTest;
-typedef hugeTest *hugeTestPtr;
-struct hugeTest {
- const char *description;
- const char *name;
- const char *start;
- const char *end;
-};
-
-static struct hugeTest hugeTests[] = {
- { "Huge text node", "huge:textNode", "<foo>", "</foo>" },
- { "Huge attribute node", "huge:attrNode", "<foo bar='", "'/>" },
- { "Huge comment node", "huge:commentNode", "<foo><!--", "--></foo>" },
- { "Huge PI node", "huge:piNode", "<foo><?bar ", "?></foo>" },
-};
-
-static const char *current;
-static int rlen;
-static unsigned int currentTest = 0;
-static int instate = 0;
-
-/**
- * hugeMatch:
- * @URI: an URI to test
- *
- * Check for an huge: query
- *
- * Returns 1 if yes and 0 if another Input module should be used
- */
-static int
-hugeMatch(const char * URI) {
- if ((URI != NULL) && (!strncmp(URI, "huge:", 5)))
- return(1);
- return(0);
-}
-
-/**
- * hugeOpen:
- * @URI: an URI to test
- *
- * Return a pointer to the huge: query handler, in this example simply
- * the current pointer...
- *
- * Returns an Input context or NULL in case or error
- */
-static void *
-hugeOpen(const char * URI) {
- if ((URI == NULL) || (strncmp(URI, "huge:", 5)))
- return(NULL);
-
- for (currentTest = 0;currentTest < sizeof(hugeTests)/sizeof(hugeTests[0]);
- currentTest++)
- if (!strcmp(hugeTests[currentTest].name, URI))
- goto found;
-
- return(NULL);
-
-found:
- rlen = strlen(hugeTests[currentTest].start);
- current = hugeTests[currentTest].start;
- instate = 0;
- return((void *) current);
-}
-
-/**
- * hugeClose:
- * @context: the read context
- *
- * Close the huge: query handler
- *
- * Returns 0 or -1 in case of error
- */
-static int
-hugeClose(void * context) {
- if (context == NULL) return(-1);
- fprintf(stderr, "\n");
- return(0);
-}
-
-#define CHUNK 4096
-
-char filling[CHUNK + 1];
-
-static void fillFilling(void) {
- int i;
-
- for (i = 0;i < CHUNK;i++) {
- filling[i] = 'a';
- }
- filling[CHUNK] = 0;
-}
-
-size_t maxlen = 64 * 1024 * 1024;
-size_t curlen = 0;
-size_t dotlen;
-
-/**
- * hugeRead:
- * @context: the read context
- * @buffer: where to store data
- * @len: number of bytes to read
- *
- * Implement an huge: query read.
- *
- * Returns the number of bytes read or -1 in case of error
- */
-static int
-hugeRead(void *context, char *buffer, int len)
-{
- if ((context == NULL) || (buffer == NULL) || (len < 0))
- return (-1);
-
- if (instate == 0) {
- if (len >= rlen) {
- len = rlen;
- rlen = 0;
- memcpy(buffer, current, len);
- instate = 1;
- curlen = 0;
- dotlen = maxlen / 10;
- } else {
- memcpy(buffer, current, len);
- rlen -= len;
- current += len;
- }
- } else if (instate == 2) {
- if (len >= rlen) {
- len = rlen;
- rlen = 0;
- memcpy(buffer, current, len);
- instate = 3;
- curlen = 0;
- } else {
- memcpy(buffer, current, len);
- rlen -= len;
- current += len;
- }
- } else if (instate == 1) {
- if (len > CHUNK) len = CHUNK;
- memcpy(buffer, &filling[0], len);
- curlen += len;
- if (curlen >= maxlen) {
- rlen = strlen(hugeTests[currentTest].end);
- current = hugeTests[currentTest].end;
- instate = 2;
- } else {
- if (curlen > dotlen) {
- fprintf(stderr, ".");
- dotlen += maxlen / 10;
- }
- }
- } else
- len = 0;
- return (len);
-}
-
-/************************************************************************
- * *
- * Crazy document generator *
- * *
- ************************************************************************/
-
-unsigned int crazy_indx = 0;
-
-const char *crazy = "<?xml version='1.0' encoding='UTF-8'?>\
-<?tst ?>\
-<!-- tst -->\
-<!DOCTYPE foo [\
-<?tst ?>\
-<!-- tst -->\
-<!ELEMENT foo (#PCDATA)>\
-<!ELEMENT p (#PCDATA|emph)* >\
-]>\
-<?tst ?>\
-<!-- tst -->\
-<foo bar='foo'>\
-<?tst ?>\
-<!-- tst -->\
-foo\
-<![CDATA[ ]]>\
-</foo>\
-<?tst ?>\
-<!-- tst -->";
-
-/**
- * crazyMatch:
- * @URI: an URI to test
- *
- * Check for a crazy: query
- *
- * Returns 1 if yes and 0 if another Input module should be used
- */
-static int
-crazyMatch(const char * URI) {
- if ((URI != NULL) && (!strncmp(URI, "crazy:", 6)))
- return(1);
- return(0);
-}
-
-/**
- * crazyOpen:
- * @URI: an URI to test
- *
- * Return a pointer to the crazy: query handler, in this example simply
- * the current pointer...
- *
- * Returns an Input context or NULL in case or error
- */
-static void *
-crazyOpen(const char * URI) {
- if ((URI == NULL) || (strncmp(URI, "crazy:", 6)))
- return(NULL);
-
- if (crazy_indx > strlen(crazy))
- return(NULL);
- reset_timout();
- rlen = crazy_indx;
- current = &crazy[0];
- instate = 0;
- return((void *) current);
-}
-
-/**
- * crazyClose:
- * @context: the read context
- *
- * Close the crazy: query handler
- *
- * Returns 0 or -1 in case of error
- */
-static int
-crazyClose(void * context) {
- if (context == NULL) return(-1);
- return(0);
-}
-
-
-/**
- * crazyRead:
- * @context: the read context
- * @buffer: where to store data
- * @len: number of bytes to read
- *
- * Implement an crazy: query read.
- *
- * Returns the number of bytes read or -1 in case of error
- */
-static int
-crazyRead(void *context, char *buffer, int len)
-{
- if ((context == NULL) || (buffer == NULL) || (len < 0))
- return (-1);
-
- if ((check_time() <= 0) && (instate == 1)) {
- fprintf(stderr, "\ntimeout in crazy(%d)\n", crazy_indx);
- rlen = strlen(crazy) - crazy_indx;
- current = &crazy[crazy_indx];
- instate = 2;
- }
- if (instate == 0) {
- if (len >= rlen) {
- len = rlen;
- rlen = 0;
- memcpy(buffer, current, len);
- instate = 1;
- curlen = 0;
- } else {
- memcpy(buffer, current, len);
- rlen -= len;
- current += len;
- }
- } else if (instate == 2) {
- if (len >= rlen) {
- len = rlen;
- rlen = 0;
- memcpy(buffer, current, len);
- instate = 3;
- curlen = 0;
- } else {
- memcpy(buffer, current, len);
- rlen -= len;
- current += len;
- }
- } else if (instate == 1) {
- if (len > CHUNK) len = CHUNK;
- memcpy(buffer, &filling[0], len);
- curlen += len;
- if (curlen >= maxlen) {
- rlen = strlen(crazy) - crazy_indx;
- current = &crazy[crazy_indx];
- instate = 2;
- }
- } else
- len = 0;
- return (len);
-}
-/************************************************************************
- * *
- * Libxml2 specific routines *
- * *
- ************************************************************************/
-
-static int nb_tests = 0;
-static int nb_errors = 0;
-static int nb_leaks = 0;
-static int extraMemoryFromResolver = 0;
-
-/*
- * We need to trap calls to the resolver to not account memory for the catalog
- * which is shared to the current running test. We also don't want to have
- * network downloads modifying tests.
- */
-static xmlParserInputPtr
-testExternalEntityLoader(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr ret;
- int memused = xmlMemUsed();
-
- ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
- extraMemoryFromResolver += xmlMemUsed() - memused;
-
- return(ret);
-}
-
-/*
- * Trapping the error messages at the generic level to grab the equivalent of
- * stderr messages on CLI tools.
- */
-static char testErrors[32769];
-static int testErrorsSize = 0;
-
-static void XMLCDECL
-channel(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
- va_list args;
- int res;
-
- if (testErrorsSize >= 32768)
- return;
- va_start(args, msg);
- res = vsnprintf(&testErrors[testErrorsSize],
- 32768 - testErrorsSize,
- msg, args);
- va_end(args);
- if (testErrorsSize + res >= 32768) {
- /* buffer is full */
- testErrorsSize = 32768;
- testErrors[testErrorsSize] = 0;
- } else {
- testErrorsSize += res;
- }
- testErrors[testErrorsSize] = 0;
-}
-
-/**
- * xmlParserPrintFileContext:
- * @input: an xmlParserInputPtr input
- *
- * Displays current context within the input content for error tracking
- */
-
-static void
-xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
- xmlGenericErrorFunc chanl, void *data ) {
- const xmlChar *cur, *base;
- unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */
- xmlChar content[81]; /* space for 80 chars + line terminator */
- xmlChar *ctnt;
-
- if (input == NULL) return;
- cur = input->cur;
- base = input->base;
- /* skip backwards over any end-of-lines */
- while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) {
- cur--;
- }
- n = 0;
- /* search backwards for beginning-of-line (to max buff size) */
- while ((n++ < (sizeof(content)-1)) && (cur > base) &&
- (*(cur) != '\n') && (*(cur) != '\r'))
- cur--;
- if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
- /* calculate the error position in terms of the current position */
- col = input->cur - cur;
- /* search forward for end-of-line (to max buff size) */
- n = 0;
- ctnt = content;
- /* copy selected text to our buffer */
- while ((*cur != 0) && (*(cur) != '\n') &&
- (*(cur) != '\r') && (n < sizeof(content)-1)) {
- *ctnt++ = *cur++;
- n++;
- }
- *ctnt = 0;
- /* print out the selected text */
- chanl(data ,"%s\n", content);
- /* create blank line with problem pointer */
- n = 0;
- ctnt = content;
- /* (leave buffer space for pointer + line terminator) */
- while ((n<col) && (n++ < sizeof(content)-2) && (*ctnt != 0)) {
- if (*(ctnt) != '\t')
- *(ctnt) = ' ';
- ctnt++;
- }
- *ctnt++ = '^';
- *ctnt = 0;
- chanl(data ,"%s\n", content);
-}
-
-static void
-testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, xmlErrorPtr err) {
- char *file = NULL;
- int line = 0;
- int code = -1;
- int domain;
- void *data = NULL;
- const char *str;
- const xmlChar *name = NULL;
- xmlNodePtr node;
- xmlErrorLevel level;
- xmlParserInputPtr input = NULL;
- xmlParserInputPtr cur = NULL;
- xmlParserCtxtPtr ctxt = NULL;
-
- if (err == NULL)
- return;
-
- file = err->file;
- line = err->line;
- code = err->code;
- domain = err->domain;
- level = err->level;
- node = err->node;
- if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
- (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
- (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) {
- ctxt = err->ctxt;
- }
- str = err->message;
-
- if (code == XML_ERR_OK)
- return;
-
- if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
- name = node->name;
-
- /*
- * Maintain the compatibility with the legacy error handling
- */
- if (ctxt != NULL) {
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) &&
- (ctxt->inputNr > 1)) {
- cur = input;
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
- if (input != NULL) {
- if (input->filename)
- channel(data, "%s:%d: ", input->filename, input->line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: ", input->line);
- }
- } else {
- if (file != NULL)
- channel(data, "%s:%d: ", file, line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: ", line);
- }
- if (name != NULL) {
- channel(data, "element %s: ", name);
- }
- if (code == XML_ERR_OK)
- return;
- switch (domain) {
- case XML_FROM_PARSER:
- channel(data, "parser ");
- break;
- case XML_FROM_NAMESPACE:
- channel(data, "namespace ");
- break;
- case XML_FROM_DTD:
- case XML_FROM_VALID:
- channel(data, "validity ");
- break;
- case XML_FROM_HTML:
- channel(data, "HTML parser ");
- break;
- case XML_FROM_MEMORY:
- channel(data, "memory ");
- break;
- case XML_FROM_OUTPUT:
- channel(data, "output ");
- break;
- case XML_FROM_IO:
- channel(data, "I/O ");
- break;
- case XML_FROM_XINCLUDE:
- channel(data, "XInclude ");
- break;
- case XML_FROM_XPATH:
- channel(data, "XPath ");
- break;
- case XML_FROM_XPOINTER:
- channel(data, "parser ");
- break;
- case XML_FROM_REGEXP:
- channel(data, "regexp ");
- break;
- case XML_FROM_MODULE:
- channel(data, "module ");
- break;
- case XML_FROM_SCHEMASV:
- channel(data, "Schemas validity ");
- break;
- case XML_FROM_SCHEMASP:
- channel(data, "Schemas parser ");
- break;
- case XML_FROM_RELAXNGP:
- channel(data, "Relax-NG parser ");
- break;
- case XML_FROM_RELAXNGV:
- channel(data, "Relax-NG validity ");
- break;
- case XML_FROM_CATALOG:
- channel(data, "Catalog ");
- break;
- case XML_FROM_C14N:
- channel(data, "C14N ");
- break;
- case XML_FROM_XSLT:
- channel(data, "XSLT ");
- break;
- default:
- break;
- }
- if (code == XML_ERR_OK)
- return;
- switch (level) {
- case XML_ERR_NONE:
- channel(data, ": ");
- break;
- case XML_ERR_WARNING:
- channel(data, "warning : ");
- break;
- case XML_ERR_ERROR:
- channel(data, "error : ");
- break;
- case XML_ERR_FATAL:
- channel(data, "error : ");
- break;
- }
- if (code == XML_ERR_OK)
- return;
- if (str != NULL) {
- int len;
- len = xmlStrlen((const xmlChar *)str);
- if ((len > 0) && (str[len - 1] != '\n'))
- channel(data, "%s\n", str);
- else
- channel(data, "%s", str);
- } else {
- channel(data, "%s\n", "out of memory error");
- }
- if (code == XML_ERR_OK)
- return;
-
- if (ctxt != NULL) {
- xmlParserPrintFileContextInternal(input, channel, data);
- if (cur != NULL) {
- if (cur->filename)
- channel(data, "%s:%d: \n", cur->filename, cur->line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: \n", cur->line);
- xmlParserPrintFileContextInternal(cur, channel, data);
- }
- }
- if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
- (err->int1 < 100) &&
- (err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
- xmlChar buf[150];
- int i;
-
- channel(data, "%s\n", err->str1);
- for (i=0;i < err->int1;i++)
- buf[i] = ' ';
- buf[i++] = '^';
- buf[i] = 0;
- channel(data, "%s\n", buf);
- }
-}
-
-static void
-initializeLibxml2(void) {
- xmlGetWarningsDefaultValue = 0;
- xmlPedanticParserDefault(0);
-
- xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
- xmlInitParser();
- xmlSetExternalEntityLoader(testExternalEntityLoader);
- xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler);
- /*
- * register the new I/O handlers
- */
- if (xmlRegisterInputCallbacks(hugeMatch, hugeOpen,
- hugeRead, hugeClose) < 0) {
- fprintf(stderr, "failed to register Huge handlers\n");
- exit(1);
- }
- if (xmlRegisterInputCallbacks(crazyMatch, crazyOpen,
- crazyRead, crazyClose) < 0) {
- fprintf(stderr, "failed to register Crazy handlers\n");
- exit(1);
- }
-}
-
-/************************************************************************
- * *
- * SAX empty callbacks *
- * *
- ************************************************************************/
-
-unsigned long callbacks = 0;
-
-/**
- * isStandaloneCallback:
- * @ctxt: An XML parser context
- *
- * Is this document tagged standalone ?
- *
- * Returns 1 if true
- */
-static int
-isStandaloneCallback(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return (0);
-}
-
-/**
- * hasInternalSubsetCallback:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- *
- * Returns 1 if true
- */
-static int
-hasInternalSubsetCallback(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return (0);
-}
-
-/**
- * hasExternalSubsetCallback:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- *
- * Returns 1 if true
- */
-static int
-hasExternalSubsetCallback(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return (0);
-}
-
-/**
- * internalSubsetCallback:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- */
-static void
-internalSubsetCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- const xmlChar * ExternalID ATTRIBUTE_UNUSED,
- const xmlChar * SystemID ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * externalSubsetCallback:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- */
-static void
-externalSubsetCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- const xmlChar * ExternalID ATTRIBUTE_UNUSED,
- const xmlChar * SystemID ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * resolveEntityCallback:
- * @ctxt: An XML parser context
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * Special entity resolver, better left to the parser, it has
- * more context than the application layer.
- * The default behaviour is to NOT resolve the entities, in that case
- * the ENTITY_REF nodes are built in the structure (and the parameter
- * values).
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlParserInputPtr
-resolveEntityCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * publicId ATTRIBUTE_UNUSED,
- const xmlChar * systemId ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return (NULL);
-}
-
-/**
- * getEntityCallback:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get an entity by name
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlEntityPtr
-getEntityCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return (NULL);
-}
-
-/**
- * getParameterEntityCallback:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get a parameter entity by name
- *
- * Returns the xmlParserInputPtr
- */
-static xmlEntityPtr
-getParameterEntityCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return (NULL);
-}
-
-
-/**
- * entityDeclCallback:
- * @ctxt: An XML parser context
- * @name: the entity name
- * @type: the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed
- */
-static void
-entityDeclCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- int type ATTRIBUTE_UNUSED,
- const xmlChar * publicId ATTRIBUTE_UNUSED,
- const xmlChar * systemId ATTRIBUTE_UNUSED,
- xmlChar * content ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * attributeDeclCallback:
- * @ctxt: An XML parser context
- * @name: the attribute name
- * @type: the attribute type
- *
- * An attribute definition has been parsed
- */
-static void
-attributeDeclCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * elem ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- int type ATTRIBUTE_UNUSED, int def ATTRIBUTE_UNUSED,
- const xmlChar * defaultValue ATTRIBUTE_UNUSED,
- xmlEnumerationPtr tree ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * elementDeclCallback:
- * @ctxt: An XML parser context
- * @name: the element name
- * @type: the element type
- * @content: the element value (without processing).
- *
- * An element definition has been parsed
- */
-static void
-elementDeclCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- int type ATTRIBUTE_UNUSED,
- xmlElementContentPtr content ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * notationDeclCallback:
- * @ctxt: An XML parser context
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- */
-static void
-notationDeclCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- const xmlChar * publicId ATTRIBUTE_UNUSED,
- const xmlChar * systemId ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * unparsedEntityDeclCallback:
- * @ctxt: An XML parser context
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed
- */
-static void
-unparsedEntityDeclCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- const xmlChar * publicId ATTRIBUTE_UNUSED,
- const xmlChar * systemId ATTRIBUTE_UNUSED,
- const xmlChar * notationName ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * setDocumentLocatorCallback:
- * @ctxt: An XML parser context
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
- * Everything is available on the context, so this is useless in our case.
- */
-static void
-setDocumentLocatorCallback(void *ctx ATTRIBUTE_UNUSED,
- xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * startDocumentCallback:
- * @ctxt: An XML parser context
- *
- * called when the document start being processed.
- */
-static void
-startDocumentCallback(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * endDocumentCallback:
- * @ctxt: An XML parser context
- *
- * called when the document end has been detected.
- */
-static void
-endDocumentCallback(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-#if 0
-/**
- * startElementCallback:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- const xmlChar ** atts ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * endElementCallback:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-#endif
-
-/**
- * charactersCallback:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- * Question: how much at a time ???
- */
-static void
-charactersCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * ch ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * referenceCallback:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * called when an entity reference is detected.
- */
-static void
-referenceCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * ignorableWhitespaceCallback:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @start: the first char in the string
- * @len: the number of xmlChar
- *
- * receiving some ignorable whitespaces from the parser.
- * Question: how much at a time ???
- */
-static void
-ignorableWhitespaceCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * ch ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * processingInstructionCallback:
- * @ctxt: An XML parser context
- * @target: the target name
- * @data: the PI data's
- * @len: the number of xmlChar
- *
- * A processing instruction has been parsed.
- */
-static void
-processingInstructionCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * target ATTRIBUTE_UNUSED,
- const xmlChar * data ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * cdataBlockCallback:
- * @ctx: the user data (XML parser context)
- * @value: The pcdata content
- * @len: the block length
- *
- * called when a pcdata block has been parsed
- */
-static void
-cdataBlockCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * value ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * commentCallback:
- * @ctxt: An XML parser context
- * @value: the comment content
- *
- * A comment has been parsed.
- */
-static void
-commentCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * value ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * warningCallback:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a warning messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-warningCallback(void *ctx ATTRIBUTE_UNUSED,
- const char *msg ATTRIBUTE_UNUSED, ...)
-{
- callbacks++;
- return;
-}
-
-/**
- * errorCallback:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a error messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-errorCallback(void *ctx ATTRIBUTE_UNUSED, const char *msg ATTRIBUTE_UNUSED,
- ...)
-{
- callbacks++;
- return;
-}
-
-/**
- * fatalErrorCallback:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a fatalError messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL
-fatalErrorCallback(void *ctx ATTRIBUTE_UNUSED,
- const char *msg ATTRIBUTE_UNUSED, ...)
-{
- return;
-}
-
-
-/*
- * SAX2 specific callbacks
- */
-
-/**
- * startElementNsCallback:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementNsCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * localname ATTRIBUTE_UNUSED,
- const xmlChar * prefix ATTRIBUTE_UNUSED,
- const xmlChar * URI ATTRIBUTE_UNUSED,
- int nb_namespaces ATTRIBUTE_UNUSED,
- const xmlChar ** namespaces ATTRIBUTE_UNUSED,
- int nb_attributes ATTRIBUTE_UNUSED,
- int nb_defaulted ATTRIBUTE_UNUSED,
- const xmlChar ** attributes ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-/**
- * endElementCallback:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementNsCallback(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * localname ATTRIBUTE_UNUSED,
- const xmlChar * prefix ATTRIBUTE_UNUSED,
- const xmlChar * URI ATTRIBUTE_UNUSED)
-{
- callbacks++;
- return;
-}
-
-static xmlSAXHandler callbackSAX2HandlerStruct = {
- internalSubsetCallback,
- isStandaloneCallback,
- hasInternalSubsetCallback,
- hasExternalSubsetCallback,
- resolveEntityCallback,
- getEntityCallback,
- entityDeclCallback,
- notationDeclCallback,
- attributeDeclCallback,
- elementDeclCallback,
- unparsedEntityDeclCallback,
- setDocumentLocatorCallback,
- startDocumentCallback,
- endDocumentCallback,
- NULL,
- NULL,
- referenceCallback,
- charactersCallback,
- ignorableWhitespaceCallback,
- processingInstructionCallback,
- commentCallback,
- warningCallback,
- errorCallback,
- fatalErrorCallback,
- getParameterEntityCallback,
- cdataBlockCallback,
- externalSubsetCallback,
- XML_SAX2_MAGIC,
- NULL,
- startElementNsCallback,
- endElementNsCallback,
- NULL
-};
-
-static xmlSAXHandlerPtr callbackSAX2Handler = &callbackSAX2HandlerStruct;
-
-/************************************************************************
- * *
- * The tests front-ends *
- * *
- ************************************************************************/
-
-/**
- * readerTest:
- * @filename: the file to parse
- * @max_size: size of the limit to test
- * @options: parsing options
- * @fail: should a failure be reported
- *
- * Parse a memory generated file using SAX
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-saxTest(const char *filename, size_t limit, int options, int fail) {
- int res = 0;
- xmlParserCtxtPtr ctxt;
- xmlDocPtr doc;
- xmlSAXHandlerPtr old_sax;
-
- nb_tests++;
-
- maxlen = limit;
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- fprintf(stderr, "Failed to create parser context\n");
- return(1);
- }
- old_sax = ctxt->sax;
- ctxt->sax = callbackSAX2Handler;
- ctxt->userData = NULL;
- doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
-
- if (doc != NULL) {
- fprintf(stderr, "SAX parsing generated a document !\n");
- xmlFreeDoc(doc);
- res = 0;
- } else if (ctxt->wellFormed == 0) {
- if (fail)
- res = 0;
- else {
- fprintf(stderr, "Failed to parse '%s' %lu\n", filename,
- (unsigned long) limit);
- res = 1;
- }
- } else {
- if (fail) {
- fprintf(stderr, "Failed to get failure for '%s' %lu\n",
- filename, (unsigned long) limit);
- res = 1;
- } else
- res = 0;
- }
- ctxt->sax = old_sax;
- xmlFreeParserCtxt(ctxt);
-
- return(res);
-}
-#ifdef LIBXML_READER_ENABLED
-/**
- * readerTest:
- * @filename: the file to parse
- * @max_size: size of the limit to test
- * @options: parsing options
- * @fail: should a failure be reported
- *
- * Parse a memory generated file using the xmlReader
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-readerTest(const char *filename, size_t limit, int options, int fail) {
- xmlTextReaderPtr reader;
- int res = 0;
- int ret;
-
- nb_tests++;
-
- maxlen = limit;
- reader = xmlReaderForFile(filename , NULL, options);
- if (reader == NULL) {
- fprintf(stderr, "Failed to open '%s' test\n", filename);
- return(1);
- }
- ret = xmlTextReaderRead(reader);
- while (ret == 1) {
- ret = xmlTextReaderRead(reader);
- }
- if (ret != 0) {
- if (fail)
- res = 0;
- else {
- if (strncmp(filename, "crazy:", 6) == 0)
- fprintf(stderr, "Failed to parse '%s' %u\n",
- filename, crazy_indx);
- else
- fprintf(stderr, "Failed to parse '%s' %lu\n",
- filename, (unsigned long) limit);
- res = 1;
- }
- } else {
- if (fail) {
- if (strncmp(filename, "crazy:", 6) == 0)
- fprintf(stderr, "Failed to get failure for '%s' %u\n",
- filename, crazy_indx);
- else
- fprintf(stderr, "Failed to get failure for '%s' %lu\n",
- filename, (unsigned long) limit);
- res = 1;
- } else
- res = 0;
- }
- if (timeout)
- res = 1;
- xmlFreeTextReader(reader);
-
- return(res);
-}
-#endif
-
-/************************************************************************
- * *
- * Tests descriptions *
- * *
- ************************************************************************/
-
-typedef int (*functest) (const char *filename, size_t limit, int options,
- int fail);
-
-typedef struct limitDesc limitDesc;
-typedef limitDesc *limitDescPtr;
-struct limitDesc {
- const char *name; /* the huge generator name */
- size_t limit; /* the limit to test */
- int options; /* extra parser options */
- int fail; /* whether the test should fail */
-};
-
-static limitDesc limitDescriptions[] = {
- /* max length of a text node in content */
- {"huge:textNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0},
- {"huge:textNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1},
- {"huge:textNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0},
- /* max length of a text node in content */
- {"huge:attrNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0},
- {"huge:attrNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1},
- {"huge:attrNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0},
- /* max length of a comment node */
- {"huge:commentNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0},
- {"huge:commentNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1},
- {"huge:commentNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0},
- /* max length of a PI node */
- {"huge:piNode", XML_MAX_TEXT_LENGTH - CHUNK, 0, 0},
- {"huge:piNode", XML_MAX_TEXT_LENGTH + CHUNK, 0, 1},
- {"huge:piNode", XML_MAX_TEXT_LENGTH + CHUNK, XML_PARSE_HUGE, 0},
-};
-
-typedef struct testDesc testDesc;
-typedef testDesc *testDescPtr;
-struct testDesc {
- const char *desc; /* descripton of the test */
- functest func; /* function implementing the test */
-};
-
-static
-testDesc testDescriptions[] = {
- { "Parsing of huge files with the sax parser", saxTest},
-/* { "Parsing of huge files with the tree parser", treeTest}, */
-#ifdef LIBXML_READER_ENABLED
- { "Parsing of huge files with the reader", readerTest},
-#endif
- {NULL, NULL}
-};
-
-typedef struct testException testException;
-typedef testException *testExceptionPtr;
-struct testException {
- unsigned int test; /* the parser test number */
- unsigned int limit; /* the limit test number */
- int fail; /* new fail value or -1*/
- size_t size; /* new limit value or 0 */
-};
-
-static
-testException testExceptions[] = {
- /* the SAX parser doesn't hit a limit of XML_MAX_TEXT_LENGTH text nodes */
- { 0, 1, 0, 0},
-};
-
-static int
-launchTests(testDescPtr tst, unsigned int test) {
- int res = 0, err = 0;
- unsigned int i, j;
- size_t limit;
- int fail;
-
- if (tst == NULL) return(-1);
-
- for (i = 0;i < sizeof(limitDescriptions)/sizeof(limitDescriptions[0]);i++) {
- limit = limitDescriptions[i].limit;
- fail = limitDescriptions[i].fail;
- /*
- * Handle exceptions if any
- */
- for (j = 0;j < sizeof(testExceptions)/sizeof(testExceptions[0]);j++) {
- if ((testExceptions[j].test == test) &&
- (testExceptions[j].limit == i)) {
- if (testExceptions[j].fail != -1)
- fail = testExceptions[j].fail;
- if (testExceptions[j].size != 0)
- limit = testExceptions[j].size;
- break;
- }
- }
- res = tst->func(limitDescriptions[i].name, limit,
- limitDescriptions[i].options, fail);
- if (res != 0) {
- nb_errors++;
- err++;
- }
- }
- return(err);
-}
-
-
-static int
-runtest(unsigned int i) {
- int ret = 0, res;
- int old_errors, old_tests, old_leaks;
-
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL))
- printf("## %s\n", testDescriptions[i].desc);
- res = launchTests(&testDescriptions[i], i);
- if (res != 0)
- ret++;
- if (verbose) {
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
- else
- printf("Ran %d tests, %d errors, %d leaks\n",
- nb_tests - old_tests,
- nb_errors - old_errors,
- nb_leaks - old_leaks);
- }
- return(ret);
-}
-
-static int
-launchCrazySAX(unsigned int test, int fail) {
- int res = 0, err = 0;
-
- crazy_indx = test;
-
- res = saxTest("crazy::test", XML_MAX_LOOKUP_LIMIT - CHUNK, 0, fail);
- if (res != 0) {
- nb_errors++;
- err++;
- }
- if (tests_quiet == 0)
- fprintf(stderr, "%c", crazy[test]);
-
- return(err);
-}
-
-#ifdef LIBXML_READER_ENABLED
-static int
-launchCrazy(unsigned int test, int fail) {
- int res = 0, err = 0;
-
- crazy_indx = test;
-
- res = readerTest("crazy::test", XML_MAX_LOOKUP_LIMIT - CHUNK, 0, fail);
- if (res != 0) {
- nb_errors++;
- err++;
- }
- if (tests_quiet == 0)
- fprintf(stderr, "%c", crazy[test]);
-
- return(err);
-}
-#endif
-
-static int get_crazy_fail(int test) {
- /*
- * adding 1000000 of character 'a' leads to parser failure mostly
- * everywhere except in those special spots. Need to be updated
- * each time crazy is updated
- */
- int fail = 1;
- if ((test == 44) || /* PI in Misc */
- ((test >= 50) && (test <= 55)) || /* Comment in Misc */
- (test == 79) || /* PI in DTD */
- ((test >= 85) && (test <= 90)) || /* Comment in DTD */
- (test == 154) || /* PI in Misc */
- ((test >= 160) && (test <= 165)) || /* Comment in Misc */
- ((test >= 178) && (test <= 181)) || /* attribute value */
- (test == 183) || /* Text */
- (test == 189) || /* PI in Content */
- (test == 191) || /* Text */
- ((test >= 195) && (test <= 200)) || /* Comment in Content */
- ((test >= 203) && (test <= 206)) || /* Text */
- (test == 215) || (test == 216) || /* in CDATA */
- (test == 219) || /* Text */
- (test == 231) || /* PI in Misc */
- ((test >= 237) && (test <= 242))) /* Comment in Misc */
- fail = 0;
- return(fail);
-}
-
-static int
-runcrazy(void) {
- int ret = 0, res = 0;
- int old_errors, old_tests, old_leaks;
- unsigned int i;
-
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
-
-#ifdef LIBXML_READER_ENABLED
- if (tests_quiet == 0) {
- printf("## Crazy tests on reader\n");
- }
- for (i = 0;i < strlen(crazy);i++) {
- res += launchCrazy(i, get_crazy_fail(i));
- if (res != 0)
- ret++;
- }
-#endif
-
- if (tests_quiet == 0) {
- printf("\n## Crazy tests on SAX\n");
- }
- for (i = 0;i < strlen(crazy);i++) {
- res += launchCrazySAX(i, get_crazy_fail(i));
- if (res != 0)
- ret++;
- }
- if (tests_quiet == 0)
- fprintf(stderr, "\n");
- if (verbose) {
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
- else
- printf("Ran %d tests, %d errors, %d leaks\n",
- nb_tests - old_tests,
- nb_errors - old_errors,
- nb_leaks - old_leaks);
- }
- return(ret);
-}
-
-
-int
-main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- int i, a, ret = 0;
- int subset = 0;
-
- fillFilling();
- initializeLibxml2();
-
- for (a = 1; a < argc;a++) {
- if (!strcmp(argv[a], "-v"))
- verbose = 1;
- else if (!strcmp(argv[a], "-quiet"))
- tests_quiet = 1;
- else if (!strcmp(argv[a], "-crazy"))
- subset = 1;
- }
- if (subset == 0) {
- for (i = 0; testDescriptions[i].func != NULL; i++) {
- ret += runtest(i);
- }
- }
- ret += runcrazy();
- if ((nb_errors == 0) && (nb_leaks == 0)) {
- ret = 0;
- printf("Total %d tests, no errors\n",
- nb_tests);
- } else {
- ret = 1;
- printf("Total %d tests, %d errors, %d leaks\n",
- nb_tests, nb_errors, nb_leaks);
- }
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(ret);
-}
diff --git a/external/libxml2_android/jni/libxml2/testrecurse.c b/external/libxml2_android/jni/libxml2/testrecurse.c
deleted file mode 100644
index e5d5d1b3..00000000
--- a/external/libxml2_android/jni/libxml2/testrecurse.c
+++ /dev/null
@@ -1,965 +0,0 @@
-/*
- * testrecurse.c: C program to run libxml2 regression tests checking entities
- * recursions
- *
- * To compile on Unixes:
- * cc -o testrecurse `xml2-config --cflags` testrecurse.c `xml2-config --libs` -lpthread
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-#include <stdio.h>
-
-#if !defined(_WIN32) || defined(__CYGWIN__)
-#include <unistd.h>
-#endif
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <libxml/parser.h>
-#include <libxml/tree.h>
-#include <libxml/uri.h>
-#ifdef LIBXML_READER_ENABLED
-#include <libxml/xmlreader.h>
-#endif
-
-/*
- * O_BINARY is just for Windows compatibility - if it isn't defined
- * on this system, avoid any compilation error
- */
-#ifdef O_BINARY
-#define RD_FLAGS O_RDONLY | O_BINARY
-#else
-#define RD_FLAGS O_RDONLY
-#endif
-
-typedef int (*functest) (const char *filename, const char *result,
- const char *error, int options);
-
-typedef struct testDesc testDesc;
-typedef testDesc *testDescPtr;
-struct testDesc {
- const char *desc; /* descripton of the test */
- functest func; /* function implementing the test */
- const char *in; /* glob to path for input files */
- const char *out; /* output directory */
- const char *suffix;/* suffix for output files */
- const char *err; /* suffix for error output files */
- int options; /* parser options for the test */
-};
-
-static int checkTestFile(const char *filename);
-
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
-
-#include <windows.h>
-#include <io.h>
-
-typedef struct
-{
- size_t gl_pathc; /* Count of paths matched so far */
- char **gl_pathv; /* List of matched pathnames. */
- size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */
-} glob_t;
-
-#define GLOB_DOOFFS 0
-static int glob(const char *pattern, int flags,
- int errfunc(const char *epath, int eerrno),
- glob_t *pglob) {
- glob_t *ret;
- WIN32_FIND_DATA FindFileData;
- HANDLE hFind;
- unsigned int nb_paths = 0;
- char directory[500];
- int len;
-
- if ((pattern == NULL) || (pglob == NULL)) return(-1);
-
- strncpy(directory, pattern, 499);
- for (len = strlen(directory);len >= 0;len--) {
- if (directory[len] == '/') {
- len++;
- directory[len] = 0;
- break;
- }
- }
- if (len <= 0)
- len = 0;
-
-
- ret = pglob;
- memset(ret, 0, sizeof(glob_t));
-
- hFind = FindFirstFileA(pattern, &FindFileData);
- if (hFind == INVALID_HANDLE_VALUE)
- return(0);
- nb_paths = 20;
- ret->gl_pathv = (char **) malloc(nb_paths * sizeof(char *));
- if (ret->gl_pathv == NULL) {
- FindClose(hFind);
- return(-1);
- }
- strncpy(directory + len, FindFileData.cFileName, 499 - len);
- ret->gl_pathv[ret->gl_pathc] = strdup(directory);
- if (ret->gl_pathv[ret->gl_pathc] == NULL)
- goto done;
- ret->gl_pathc++;
- while(FindNextFileA(hFind, &FindFileData)) {
- if (FindFileData.cFileName[0] == '.')
- continue;
- if (ret->gl_pathc + 2 > nb_paths) {
- char **tmp = realloc(ret->gl_pathv, nb_paths * 2 * sizeof(char *));
- if (tmp == NULL)
- break;
- ret->gl_pathv = tmp;
- nb_paths *= 2;
- }
- strncpy(directory + len, FindFileData.cFileName, 499 - len);
- ret->gl_pathv[ret->gl_pathc] = strdup(directory);
- if (ret->gl_pathv[ret->gl_pathc] == NULL)
- break;
- ret->gl_pathc++;
- }
- ret->gl_pathv[ret->gl_pathc] = NULL;
-
-done:
- FindClose(hFind);
- return(0);
-}
-
-
-
-static void globfree(glob_t *pglob) {
- unsigned int i;
- if (pglob == NULL)
- return;
-
- for (i = 0;i < pglob->gl_pathc;i++) {
- if (pglob->gl_pathv[i] != NULL)
- free(pglob->gl_pathv[i]);
- }
-}
-
-#else
-#include <glob.h>
-#endif
-
-/************************************************************************
- * *
- * Huge document generator *
- * *
- ************************************************************************/
-
-#include <libxml/xmlIO.h>
-
-
-static const char *start = "<!DOCTYPE foo [\
-<!ENTITY f 'some internal data'> \
-<!ENTITY e '&f;&f;'> \
-<!ENTITY d '&e;&e;'> \
-]> \
-<foo>";
-
-static const char *segment = " <bar>&e; &f; &d;</bar>\n";
-static const char *finish = "</foo>";
-
-static int curseg = 0;
-static const char *current;
-static int rlen;
-
-/**
- * hugeMatch:
- * @URI: an URI to test
- *
- * Check for an huge: query
- *
- * Returns 1 if yes and 0 if another Input module should be used
- */
-static int
-hugeMatch(const char * URI) {
- if ((URI != NULL) && (!strncmp(URI, "huge:", 4)))
- return(1);
- return(0);
-}
-
-/**
- * hugeOpen:
- * @URI: an URI to test
- *
- * Return a pointer to the huge: query handler, in this example simply
- * the current pointer...
- *
- * Returns an Input context or NULL in case or error
- */
-static void *
-hugeOpen(const char * URI) {
- if ((URI == NULL) || (strncmp(URI, "huge:", 4)))
- return(NULL);
- rlen = strlen(start);
- current = start;
- return((void *) current);
-}
-
-/**
- * hugeClose:
- * @context: the read context
- *
- * Close the huge: query handler
- *
- * Returns 0 or -1 in case of error
- */
-static int
-hugeClose(void * context) {
- if (context == NULL) return(-1);
- return(0);
-}
-
-#define MAX_NODES 1000000
-
-/**
- * hugeRead:
- * @context: the read context
- * @buffer: where to store data
- * @len: number of bytes to read
- *
- * Implement an huge: query read.
- *
- * Returns the number of bytes read or -1 in case of error
- */
-static int
-hugeRead(void *context, char *buffer, int len)
-{
- if ((context == NULL) || (buffer == NULL) || (len < 0))
- return (-1);
-
- if (len >= rlen) {
- if (curseg >= MAX_NODES + 1) {
- rlen = 0;
- return(0);
- }
- len = rlen;
- rlen = 0;
- memcpy(buffer, current, len);
- curseg ++;
- if (curseg == MAX_NODES) {
- fprintf(stderr, "\n");
- rlen = strlen(finish);
- current = finish;
- } else {
- if (curseg % (MAX_NODES / 10) == 0)
- fprintf(stderr, ".");
- rlen = strlen(segment);
- current = segment;
- }
- } else {
- memcpy(buffer, current, len);
- rlen -= len;
- current += len;
- }
- return (len);
-}
-
-/************************************************************************
- * *
- * Libxml2 specific routines *
- * *
- ************************************************************************/
-
-static int nb_tests = 0;
-static int nb_errors = 0;
-static int nb_leaks = 0;
-static int extraMemoryFromResolver = 0;
-
-static int
-fatalError(void) {
- fprintf(stderr, "Exitting tests on fatal error\n");
- exit(1);
-}
-
-/*
- * We need to trap calls to the resolver to not account memory for the catalog
- * which is shared to the current running test. We also don't want to have
- * network downloads modifying tests.
- */
-static xmlParserInputPtr
-testExternalEntityLoader(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr ret;
-
- if (checkTestFile(URL)) {
- ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
- } else {
- int memused = xmlMemUsed();
- ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
- extraMemoryFromResolver += xmlMemUsed() - memused;
- }
-
- return(ret);
-}
-
-/*
- * Trapping the error messages at the generic level to grab the equivalent of
- * stderr messages on CLI tools.
- */
-static char testErrors[32769];
-static int testErrorsSize = 0;
-
-static void XMLCDECL
-channel(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...) {
- va_list args;
- int res;
-
- if (testErrorsSize >= 32768)
- return;
- va_start(args, msg);
- res = vsnprintf(&testErrors[testErrorsSize],
- 32768 - testErrorsSize,
- msg, args);
- va_end(args);
- if (testErrorsSize + res >= 32768) {
- /* buffer is full */
- testErrorsSize = 32768;
- testErrors[testErrorsSize] = 0;
- } else {
- testErrorsSize += res;
- }
- testErrors[testErrorsSize] = 0;
-}
-
-/**
- * xmlParserPrintFileContext:
- * @input: an xmlParserInputPtr input
- *
- * Displays current context within the input content for error tracking
- */
-
-static void
-xmlParserPrintFileContextInternal(xmlParserInputPtr input ,
- xmlGenericErrorFunc chanl, void *data ) {
- const xmlChar *cur, *base;
- unsigned int n, col; /* GCC warns if signed, because compared with sizeof() */
- xmlChar content[81]; /* space for 80 chars + line terminator */
- xmlChar *ctnt;
-
- if (input == NULL) return;
- cur = input->cur;
- base = input->base;
- /* skip backwards over any end-of-lines */
- while ((cur > base) && ((*(cur) == '\n') || (*(cur) == '\r'))) {
- cur--;
- }
- n = 0;
- /* search backwards for beginning-of-line (to max buff size) */
- while ((n++ < (sizeof(content)-1)) && (cur > base) &&
- (*(cur) != '\n') && (*(cur) != '\r'))
- cur--;
- if ((*(cur) == '\n') || (*(cur) == '\r')) cur++;
- /* calculate the error position in terms of the current position */
- col = input->cur - cur;
- /* search forward for end-of-line (to max buff size) */
- n = 0;
- ctnt = content;
- /* copy selected text to our buffer */
- while ((*cur != 0) && (*(cur) != '\n') &&
- (*(cur) != '\r') && (n < sizeof(content)-1)) {
- *ctnt++ = *cur++;
- n++;
- }
- *ctnt = 0;
- /* print out the selected text */
- chanl(data ,"%s\n", content);
- /* create blank line with problem pointer */
- n = 0;
- ctnt = content;
- /* (leave buffer space for pointer + line terminator) */
- while ((n<col) && (n++ < sizeof(content)-2) && (*ctnt != 0)) {
- if (*(ctnt) != '\t')
- *(ctnt) = ' ';
- ctnt++;
- }
- *ctnt++ = '^';
- *ctnt = 0;
- chanl(data ,"%s\n", content);
-}
-
-static void
-testStructuredErrorHandler(void *ctx ATTRIBUTE_UNUSED, xmlErrorPtr err) {
- char *file = NULL;
- int line = 0;
- int code = -1;
- int domain;
- void *data = NULL;
- const char *str;
- const xmlChar *name = NULL;
- xmlNodePtr node;
- xmlErrorLevel level;
- xmlParserInputPtr input = NULL;
- xmlParserInputPtr cur = NULL;
- xmlParserCtxtPtr ctxt = NULL;
-
- if (err == NULL)
- return;
-
- file = err->file;
- line = err->line;
- code = err->code;
- domain = err->domain;
- level = err->level;
- node = err->node;
- if ((domain == XML_FROM_PARSER) || (domain == XML_FROM_HTML) ||
- (domain == XML_FROM_DTD) || (domain == XML_FROM_NAMESPACE) ||
- (domain == XML_FROM_IO) || (domain == XML_FROM_VALID)) {
- ctxt = err->ctxt;
- }
- str = err->message;
-
- if (code == XML_ERR_OK)
- return;
-
- if ((node != NULL) && (node->type == XML_ELEMENT_NODE))
- name = node->name;
-
- /*
- * Maintain the compatibility with the legacy error handling
- */
- if (ctxt != NULL) {
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) &&
- (ctxt->inputNr > 1)) {
- cur = input;
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
- if (input != NULL) {
- if (input->filename)
- channel(data, "%s:%d: ", input->filename, input->line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: ", input->line);
- }
- } else {
- if (file != NULL)
- channel(data, "%s:%d: ", file, line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: ", line);
- }
- if (name != NULL) {
- channel(data, "element %s: ", name);
- }
- if (code == XML_ERR_OK)
- return;
- switch (domain) {
- case XML_FROM_PARSER:
- channel(data, "parser ");
- break;
- case XML_FROM_NAMESPACE:
- channel(data, "namespace ");
- break;
- case XML_FROM_DTD:
- case XML_FROM_VALID:
- channel(data, "validity ");
- break;
- case XML_FROM_HTML:
- channel(data, "HTML parser ");
- break;
- case XML_FROM_MEMORY:
- channel(data, "memory ");
- break;
- case XML_FROM_OUTPUT:
- channel(data, "output ");
- break;
- case XML_FROM_IO:
- channel(data, "I/O ");
- break;
- case XML_FROM_XINCLUDE:
- channel(data, "XInclude ");
- break;
- case XML_FROM_XPATH:
- channel(data, "XPath ");
- break;
- case XML_FROM_XPOINTER:
- channel(data, "parser ");
- break;
- case XML_FROM_REGEXP:
- channel(data, "regexp ");
- break;
- case XML_FROM_MODULE:
- channel(data, "module ");
- break;
- case XML_FROM_SCHEMASV:
- channel(data, "Schemas validity ");
- break;
- case XML_FROM_SCHEMASP:
- channel(data, "Schemas parser ");
- break;
- case XML_FROM_RELAXNGP:
- channel(data, "Relax-NG parser ");
- break;
- case XML_FROM_RELAXNGV:
- channel(data, "Relax-NG validity ");
- break;
- case XML_FROM_CATALOG:
- channel(data, "Catalog ");
- break;
- case XML_FROM_C14N:
- channel(data, "C14N ");
- break;
- case XML_FROM_XSLT:
- channel(data, "XSLT ");
- break;
- default:
- break;
- }
- if (code == XML_ERR_OK)
- return;
- switch (level) {
- case XML_ERR_NONE:
- channel(data, ": ");
- break;
- case XML_ERR_WARNING:
- channel(data, "warning : ");
- break;
- case XML_ERR_ERROR:
- channel(data, "error : ");
- break;
- case XML_ERR_FATAL:
- channel(data, "error : ");
- break;
- }
- if (code == XML_ERR_OK)
- return;
- if (str != NULL) {
- int len;
- len = xmlStrlen((const xmlChar *)str);
- if ((len > 0) && (str[len - 1] != '\n'))
- channel(data, "%s\n", str);
- else
- channel(data, "%s", str);
- } else {
- channel(data, "%s\n", "out of memory error");
- }
- if (code == XML_ERR_OK)
- return;
-
- if (ctxt != NULL) {
- xmlParserPrintFileContextInternal(input, channel, data);
- if (cur != NULL) {
- if (cur->filename)
- channel(data, "%s:%d: \n", cur->filename, cur->line);
- else if ((line != 0) && (domain == XML_FROM_PARSER))
- channel(data, "Entity: line %d: \n", cur->line);
- xmlParserPrintFileContextInternal(cur, channel, data);
- }
- }
- if ((domain == XML_FROM_XPATH) && (err->str1 != NULL) &&
- (err->int1 < 100) &&
- (err->int1 < xmlStrlen((const xmlChar *)err->str1))) {
- xmlChar buf[150];
- int i;
-
- channel(data, "%s\n", err->str1);
- for (i=0;i < err->int1;i++)
- buf[i] = ' ';
- buf[i++] = '^';
- buf[i] = 0;
- channel(data, "%s\n", buf);
- }
-}
-
-static void
-initializeLibxml2(void) {
- xmlGetWarningsDefaultValue = 0;
- xmlPedanticParserDefault(0);
-
- xmlMemSetup(xmlMemFree, xmlMemMalloc, xmlMemRealloc, xmlMemoryStrdup);
- xmlInitParser();
- xmlSetExternalEntityLoader(testExternalEntityLoader);
- xmlSetStructuredErrorFunc(NULL, testStructuredErrorHandler);
- /*
- * register the new I/O handlers
- */
- if (xmlRegisterInputCallbacks(hugeMatch, hugeOpen,
- hugeRead, hugeClose) < 0) {
- fprintf(stderr, "failed to register Huge handler\n");
- exit(1);
- }
-}
-
-/************************************************************************
- * *
- * File name and path utilities *
- * *
- ************************************************************************/
-
-static const char *baseFilename(const char *filename) {
- const char *cur;
- if (filename == NULL)
- return(NULL);
- cur = &filename[strlen(filename)];
- while ((cur > filename) && (*cur != '/'))
- cur--;
- if (*cur == '/')
- return(cur + 1);
- return(cur);
-}
-
-static char *resultFilename(const char *filename, const char *out,
- const char *suffix) {
- const char *base;
- char res[500];
- char suffixbuff[500];
-
-/*************
- if ((filename[0] == 't') && (filename[1] == 'e') &&
- (filename[2] == 's') && (filename[3] == 't') &&
- (filename[4] == '/'))
- filename = &filename[5];
- *************/
-
- base = baseFilename(filename);
- if (suffix == NULL)
- suffix = ".tmp";
- if (out == NULL)
- out = "";
-
- strncpy(suffixbuff,suffix,499);
-#ifdef VMS
- if(strstr(base,".") && suffixbuff[0]=='.')
- suffixbuff[0]='_';
-#endif
-
- snprintf(res, 499, "%s%s%s", out, base, suffixbuff);
- res[499] = 0;
- return(strdup(res));
-}
-
-static int checkTestFile(const char *filename) {
- struct stat buf;
-
- if (stat(filename, &buf) == -1)
- return(0);
-
-#if defined(_WIN32) && !defined(__CYGWIN__)
- if (!(buf.st_mode & _S_IFREG))
- return(0);
-#else
- if (!S_ISREG(buf.st_mode))
- return(0);
-#endif
-
- return(1);
-}
-
-
-
-/************************************************************************
- * *
- * Test to detect or not recursive entities *
- * *
- ************************************************************************/
-/**
- * recursiveDetectTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages: unused
- *
- * Parse a file loading DTD and replacing entities check it fails for
- * lol cases
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-recursiveDetectTest(const char *filename,
- const char *result ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- xmlDocPtr doc;
- xmlParserCtxtPtr ctxt;
- int res = 0;
-
- nb_tests++;
-
- ctxt = xmlNewParserCtxt();
- /*
- * base of the test, parse with the old API
- */
- doc = xmlCtxtReadFile(ctxt, filename, NULL,
- XML_PARSE_NOENT | XML_PARSE_DTDLOAD);
- if ((doc != NULL) || (ctxt->lastError.code != XML_ERR_ENTITY_LOOP)) {
- fprintf(stderr, "Failed to detect recursion in %s\n", filename);
- xmlFreeParserCtxt(ctxt);
- xmlFreeDoc(doc);
- return(1);
- }
- xmlFreeParserCtxt(ctxt);
-
- return(res);
-}
-
-/**
- * notRecursiveDetectTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages: unused
- *
- * Parse a file loading DTD and replacing entities check it works for
- * good cases
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-notRecursiveDetectTest(const char *filename,
- const char *result ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- xmlDocPtr doc;
- xmlParserCtxtPtr ctxt;
- int res = 0;
-
- nb_tests++;
-
- ctxt = xmlNewParserCtxt();
- /*
- * base of the test, parse with the old API
- */
- doc = xmlCtxtReadFile(ctxt, filename, NULL,
- XML_PARSE_NOENT | XML_PARSE_DTDLOAD);
- if (doc == NULL) {
- fprintf(stderr, "Failed to parse correct file %s\n", filename);
- xmlFreeParserCtxt(ctxt);
- return(1);
- }
- xmlFreeDoc(doc);
- xmlFreeParserCtxt(ctxt);
-
- return(res);
-}
-
-#ifdef LIBXML_READER_ENABLED
-/**
- * notRecursiveHugeTest:
- * @filename: the file to parse
- * @result: the file with expected result
- * @err: the file with error messages: unused
- *
- * Parse a memory generated file
- * good cases
- *
- * Returns 0 in case of success, an error code otherwise
- */
-static int
-notRecursiveHugeTest(const char *filename ATTRIBUTE_UNUSED,
- const char *result ATTRIBUTE_UNUSED,
- const char *err ATTRIBUTE_UNUSED,
- int options ATTRIBUTE_UNUSED) {
- xmlTextReaderPtr reader;
- int res = 0;
- int ret;
-
- nb_tests++;
-
- reader = xmlReaderForFile("huge:test" , NULL,
- XML_PARSE_NOENT | XML_PARSE_DTDLOAD);
- if (reader == NULL) {
- fprintf(stderr, "Failed to open huge:test\n");
- return(1);
- }
- ret = xmlTextReaderRead(reader);
- while (ret == 1) {
- ret = xmlTextReaderRead(reader);
- }
- if (ret != 0) {
- fprintf(stderr, "Failed to parser huge:test with entities\n");
- res = 1;
- }
- xmlFreeTextReader(reader);
-
- return(res);
-}
-#endif
-
-/************************************************************************
- * *
- * Tests Descriptions *
- * *
- ************************************************************************/
-
-static
-testDesc testDescriptions[] = {
- { "Parsing recursive test cases" ,
- recursiveDetectTest, "./test/recurse/lol*.xml", NULL, NULL, NULL,
- 0 },
- { "Parsing non-recursive test cases" ,
- notRecursiveDetectTest, "./test/recurse/good*.xml", NULL, NULL, NULL,
- 0 },
-#ifdef LIBXML_READER_ENABLED
- { "Parsing non-recursive huge case" ,
- notRecursiveHugeTest, NULL, NULL, NULL, NULL,
- 0 },
-#endif
- {NULL, NULL, NULL, NULL, NULL, NULL, 0}
-};
-
-/************************************************************************
- * *
- * The main code driving the tests *
- * *
- ************************************************************************/
-
-static int
-launchTests(testDescPtr tst) {
- int res = 0, err = 0;
- size_t i;
- char *result;
- char *error;
- int mem;
-
- if (tst == NULL) return(-1);
- if (tst->in != NULL) {
- glob_t globbuf;
-
- globbuf.gl_offs = 0;
- glob(tst->in, GLOB_DOOFFS, NULL, &globbuf);
- for (i = 0;i < globbuf.gl_pathc;i++) {
- if (!checkTestFile(globbuf.gl_pathv[i]))
- continue;
- if (tst->suffix != NULL) {
- result = resultFilename(globbuf.gl_pathv[i], tst->out,
- tst->suffix);
- if (result == NULL) {
- fprintf(stderr, "Out of memory !\n");
- fatalError();
- }
- } else {
- result = NULL;
- }
- if (tst->err != NULL) {
- error = resultFilename(globbuf.gl_pathv[i], tst->out,
- tst->err);
- if (error == NULL) {
- fprintf(stderr, "Out of memory !\n");
- fatalError();
- }
- } else {
- error = NULL;
- }
- if ((result) &&(!checkTestFile(result))) {
- fprintf(stderr, "Missing result file %s\n", result);
- } else if ((error) &&(!checkTestFile(error))) {
- fprintf(stderr, "Missing error file %s\n", error);
- } else {
- mem = xmlMemUsed();
- extraMemoryFromResolver = 0;
- testErrorsSize = 0;
- testErrors[0] = 0;
- res = tst->func(globbuf.gl_pathv[i], result, error,
- tst->options | XML_PARSE_COMPACT);
- xmlResetLastError();
- if (res != 0) {
- fprintf(stderr, "File %s generated an error\n",
- globbuf.gl_pathv[i]);
- nb_errors++;
- err++;
- }
- else if (xmlMemUsed() != mem) {
- if ((xmlMemUsed() != mem) &&
- (extraMemoryFromResolver == 0)) {
- fprintf(stderr, "File %s leaked %d bytes\n",
- globbuf.gl_pathv[i], xmlMemUsed() - mem);
- nb_leaks++;
- err++;
- }
- }
- testErrorsSize = 0;
- }
- if (result)
- free(result);
- if (error)
- free(error);
- }
- globfree(&globbuf);
- } else {
- testErrorsSize = 0;
- testErrors[0] = 0;
- extraMemoryFromResolver = 0;
- res = tst->func(NULL, NULL, NULL, tst->options);
- if (res != 0) {
- nb_errors++;
- err++;
- }
- }
- return(err);
-}
-
-static int verbose = 0;
-static int tests_quiet = 0;
-
-static int
-runtest(int i) {
- int ret = 0, res;
- int old_errors, old_tests, old_leaks;
-
- old_errors = nb_errors;
- old_tests = nb_tests;
- old_leaks = nb_leaks;
- if ((tests_quiet == 0) && (testDescriptions[i].desc != NULL))
- printf("## %s\n", testDescriptions[i].desc);
- res = launchTests(&testDescriptions[i]);
- if (res != 0)
- ret++;
- if (verbose) {
- if ((nb_errors == old_errors) && (nb_leaks == old_leaks))
- printf("Ran %d tests, no errors\n", nb_tests - old_tests);
- else
- printf("Ran %d tests, %d errors, %d leaks\n",
- nb_tests - old_tests,
- nb_errors - old_errors,
- nb_leaks - old_leaks);
- }
- return(ret);
-}
-
-int
-main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- int i, a, ret = 0;
- int subset = 0;
-
- initializeLibxml2();
-
- for (a = 1; a < argc;a++) {
- if (!strcmp(argv[a], "-v"))
- verbose = 1;
- else if (!strcmp(argv[a], "-quiet"))
- tests_quiet = 1;
- else {
- for (i = 0; testDescriptions[i].func != NULL; i++) {
- if (strstr(testDescriptions[i].desc, argv[a])) {
- ret += runtest(i);
- subset++;
- }
- }
- }
- }
- if (subset == 0) {
- for (i = 0; testDescriptions[i].func != NULL; i++) {
- ret += runtest(i);
- }
- }
- if ((nb_errors == 0) && (nb_leaks == 0)) {
- ret = 0;
- printf("Total %d tests, no errors\n",
- nb_tests);
- } else {
- ret = 1;
- printf("Total %d tests, %d errors, %d leaks\n",
- nb_tests, nb_errors, nb_leaks);
- }
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(ret);
-}
diff --git a/external/libxml2_android/jni/libxml2/threads.c b/external/libxml2_android/jni/libxml2/threads.c
deleted file mode 100644
index b9d6cae3..00000000
--- a/external/libxml2_android/jni/libxml2/threads.c
+++ /dev/null
@@ -1,1039 +0,0 @@
-/**
- * threads.c: set of generic threading related routines
- *
- * See Copyright for the status of this software.
- *
- * Gary Pennington <Gary.Pennington@uk.sun.com>
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-
-#include <libxml/threads.h>
-#include <libxml/globals.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_PTHREAD_H
-#include <pthread.h>
-#elif defined HAVE_WIN32_THREADS
-#include <windows.h>
-#ifndef HAVE_COMPILER_TLS
-#include <process.h>
-#endif
-#endif
-
-#ifdef HAVE_BEOS_THREADS
-#include <OS.h>
-#include <TLS.h>
-#endif
-
-#if defined(SOLARIS)
-#include <note.h>
-#endif
-
-/* #define DEBUG_THREADS */
-
-#ifdef HAVE_PTHREAD_H
-
-static int libxml_is_threaded = -1;
-#if defined(__GNUC__) && defined(__GLIBC__)
-#ifdef linux
-#if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || (__GNUC__ > 3)
-extern int pthread_once (pthread_once_t *__once_control,
- void (*__init_routine) (void))
- __attribute((weak));
-extern void *pthread_getspecific (pthread_key_t __key)
- __attribute((weak));
-extern int pthread_setspecific (pthread_key_t __key,
- __const void *__pointer)
- __attribute((weak));
-extern int pthread_key_create (pthread_key_t *__key,
- void (*__destr_function) (void *))
- __attribute((weak));
-extern int pthread_key_delete (pthread_key_t __key)
- __attribute((weak));
-extern int pthread_mutex_init ()
- __attribute((weak));
-extern int pthread_mutex_destroy ()
- __attribute((weak));
-extern int pthread_mutex_lock ()
- __attribute((weak));
-extern int pthread_mutex_unlock ()
- __attribute((weak));
-extern int pthread_cond_init ()
- __attribute((weak));
-extern int pthread_cond_destroy ()
- __attribute((weak));
-extern int pthread_cond_wait ()
- __attribute((weak));
-extern int pthread_equal ()
- __attribute((weak));
-extern pthread_t pthread_self ()
- __attribute((weak));
-extern int pthread_key_create ()
- __attribute((weak));
-extern int pthread_key_delete ()
- __attribute((weak));
-extern int pthread_cond_signal ()
- __attribute((weak));
-#endif
-#endif /* linux */
-#endif /* defined(__GNUC__) && defined(__GLIBC__) */
-#endif /* HAVE_PTHREAD_H */
-
-/*
- * TODO: this module still uses malloc/free and not xmlMalloc/xmlFree
- * to avoid some crazyness since xmlMalloc/xmlFree may actually
- * be hosted on allocated blocks needing them for the allocation ...
- */
-
-/*
- * xmlMutex are a simple mutual exception locks
- */
-struct _xmlMutex {
-#ifdef HAVE_PTHREAD_H
- pthread_mutex_t lock;
-#elif defined HAVE_WIN32_THREADS
- HANDLE mutex;
-#elif defined HAVE_BEOS_THREADS
- sem_id sem;
- thread_id tid;
-#else
- int empty;
-#endif
-};
-
-/*
- * xmlRMutex are reentrant mutual exception locks
- */
-struct _xmlRMutex {
-#ifdef HAVE_PTHREAD_H
- pthread_mutex_t lock;
- unsigned int held;
- unsigned int waiters;
- pthread_t tid;
- pthread_cond_t cv;
-#elif defined HAVE_WIN32_THREADS
- CRITICAL_SECTION cs;
- unsigned int count;
-#elif defined HAVE_BEOS_THREADS
- xmlMutexPtr lock;
- thread_id tid;
- int32 count;
-#else
- int empty;
-#endif
-};
-
-/*
- * This module still has some internal static data.
- * - xmlLibraryLock a global lock
- * - globalkey used for per-thread data
- */
-
-#ifdef HAVE_PTHREAD_H
-static pthread_key_t globalkey;
-static pthread_t mainthread;
-static pthread_once_t once_control = PTHREAD_ONCE_INIT;
-static pthread_once_t once_control_init = PTHREAD_ONCE_INIT;
-static pthread_mutex_t global_init_lock = PTHREAD_MUTEX_INITIALIZER;
-#elif defined HAVE_WIN32_THREADS
-#if defined(HAVE_COMPILER_TLS)
-static __declspec(thread) xmlGlobalState tlstate;
-static __declspec(thread) int tlstate_inited = 0;
-#else /* HAVE_COMPILER_TLS */
-static DWORD globalkey = TLS_OUT_OF_INDEXES;
-#endif /* HAVE_COMPILER_TLS */
-static DWORD mainthread;
-static struct {
- DWORD done;
- DWORD control;
-} run_once = { 0, 0};
-static volatile LPCRITICAL_SECTION global_init_lock = NULL;
-
-/* endif HAVE_WIN32_THREADS */
-#elif defined HAVE_BEOS_THREADS
-int32 globalkey = 0;
-thread_id mainthread = 0;
-int32 run_once_init = 0;
-static int32 global_init_lock = -1;
-static vint32 global_init_count = 0;
-#endif
-
-static xmlRMutexPtr xmlLibraryLock = NULL;
-
-#ifdef LIBXML_THREAD_ENABLED
-static void xmlOnceInit(void);
-#endif
-
-/**
- * xmlNewMutex:
- *
- * xmlNewMutex() is used to allocate a libxml2 token struct for use in
- * synchronizing access to data.
- *
- * Returns a new simple mutex pointer or NULL in case of error
- */
-xmlMutexPtr
-xmlNewMutex(void)
-{
- xmlMutexPtr tok;
-
- if ((tok = malloc(sizeof(xmlMutex))) == NULL)
- return (NULL);
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded != 0)
- pthread_mutex_init(&tok->lock, NULL);
-#elif defined HAVE_WIN32_THREADS
- tok->mutex = CreateMutex(NULL, FALSE, NULL);
-#elif defined HAVE_BEOS_THREADS
- if ((tok->sem = create_sem(1, "xmlMutex")) < B_OK) {
- free(tok);
- return NULL;
- }
- tok->tid = -1;
-#endif
- return (tok);
-}
-
-/**
- * xmlFreeMutex:
- * @tok: the simple mutex
- *
- * xmlFreeMutex() is used to reclaim resources associated with a libxml2 token
- * struct.
- */
-void
-xmlFreeMutex(xmlMutexPtr tok)
-{
- if (tok == NULL)
- return;
-
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded != 0)
- pthread_mutex_destroy(&tok->lock);
-#elif defined HAVE_WIN32_THREADS
- CloseHandle(tok->mutex);
-#elif defined HAVE_BEOS_THREADS
- delete_sem(tok->sem);
-#endif
- free(tok);
-}
-
-/**
- * xmlMutexLock:
- * @tok: the simple mutex
- *
- * xmlMutexLock() is used to lock a libxml2 token.
- */
-void
-xmlMutexLock(xmlMutexPtr tok)
-{
- if (tok == NULL)
- return;
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded != 0)
- pthread_mutex_lock(&tok->lock);
-#elif defined HAVE_WIN32_THREADS
- WaitForSingleObject(tok->mutex, INFINITE);
-#elif defined HAVE_BEOS_THREADS
- if (acquire_sem(tok->sem) != B_NO_ERROR) {
-#ifdef DEBUG_THREADS
- xmlGenericError(xmlGenericErrorContext,
- "xmlMutexLock():BeOS:Couldn't aquire semaphore\n");
-#endif
- }
- tok->tid = find_thread(NULL);
-#endif
-
-}
-
-/**
- * xmlMutexUnlock:
- * @tok: the simple mutex
- *
- * xmlMutexUnlock() is used to unlock a libxml2 token.
- */
-void
-xmlMutexUnlock(xmlMutexPtr tok)
-{
- if (tok == NULL)
- return;
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded != 0)
- pthread_mutex_unlock(&tok->lock);
-#elif defined HAVE_WIN32_THREADS
- ReleaseMutex(tok->mutex);
-#elif defined HAVE_BEOS_THREADS
- if (tok->tid == find_thread(NULL)) {
- tok->tid = -1;
- release_sem(tok->sem);
- }
-#endif
-}
-
-/**
- * xmlNewRMutex:
- *
- * xmlRNewMutex() is used to allocate a reentrant mutex for use in
- * synchronizing access to data. token_r is a re-entrant lock and thus useful
- * for synchronizing access to data structures that may be manipulated in a
- * recursive fashion.
- *
- * Returns the new reentrant mutex pointer or NULL in case of error
- */
-xmlRMutexPtr
-xmlNewRMutex(void)
-{
- xmlRMutexPtr tok;
-
- if ((tok = malloc(sizeof(xmlRMutex))) == NULL)
- return (NULL);
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded != 0) {
- pthread_mutex_init(&tok->lock, NULL);
- tok->held = 0;
- tok->waiters = 0;
- pthread_cond_init(&tok->cv, NULL);
- }
-#elif defined HAVE_WIN32_THREADS
- InitializeCriticalSection(&tok->cs);
- tok->count = 0;
-#elif defined HAVE_BEOS_THREADS
- if ((tok->lock = xmlNewMutex()) == NULL) {
- free(tok);
- return NULL;
- }
- tok->count = 0;
-#endif
- return (tok);
-}
-
-/**
- * xmlFreeRMutex:
- * @tok: the reentrant mutex
- *
- * xmlRFreeMutex() is used to reclaim resources associated with a
- * reentrant mutex.
- */
-void
-xmlFreeRMutex(xmlRMutexPtr tok ATTRIBUTE_UNUSED)
-{
- if (tok == NULL)
- return;
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded != 0) {
- pthread_mutex_destroy(&tok->lock);
- pthread_cond_destroy(&tok->cv);
- }
-#elif defined HAVE_WIN32_THREADS
- DeleteCriticalSection(&tok->cs);
-#elif defined HAVE_BEOS_THREADS
- xmlFreeMutex(tok->lock);
-#endif
- free(tok);
-}
-
-/**
- * xmlRMutexLock:
- * @tok: the reentrant mutex
- *
- * xmlRMutexLock() is used to lock a libxml2 token_r.
- */
-void
-xmlRMutexLock(xmlRMutexPtr tok)
-{
- if (tok == NULL)
- return;
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded == 0)
- return;
-
- pthread_mutex_lock(&tok->lock);
- if (tok->held) {
- if (pthread_equal(tok->tid, pthread_self())) {
- tok->held++;
- pthread_mutex_unlock(&tok->lock);
- return;
- } else {
- tok->waiters++;
- while (tok->held)
- pthread_cond_wait(&tok->cv, &tok->lock);
- tok->waiters--;
- }
- }
- tok->tid = pthread_self();
- tok->held = 1;
- pthread_mutex_unlock(&tok->lock);
-#elif defined HAVE_WIN32_THREADS
- EnterCriticalSection(&tok->cs);
- tok->count++;
-#elif defined HAVE_BEOS_THREADS
- if (tok->lock->tid == find_thread(NULL)) {
- tok->count++;
- return;
- } else {
- xmlMutexLock(tok->lock);
- tok->count = 1;
- }
-#endif
-}
-
-/**
- * xmlRMutexUnlock:
- * @tok: the reentrant mutex
- *
- * xmlRMutexUnlock() is used to unlock a libxml2 token_r.
- */
-void
-xmlRMutexUnlock(xmlRMutexPtr tok ATTRIBUTE_UNUSED)
-{
- if (tok == NULL)
- return;
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded == 0)
- return;
-
- pthread_mutex_lock(&tok->lock);
- tok->held--;
- if (tok->held == 0) {
- if (tok->waiters)
- pthread_cond_signal(&tok->cv);
- memset(&tok->tid, 0, sizeof(tok->tid));
- }
- pthread_mutex_unlock(&tok->lock);
-#elif defined HAVE_WIN32_THREADS
- if (tok->count > 0) {
- tok->count--;
- LeaveCriticalSection(&tok->cs);
- }
-#elif defined HAVE_BEOS_THREADS
- if (tok->lock->tid == find_thread(NULL)) {
- tok->count--;
- if (tok->count == 0) {
- xmlMutexUnlock(tok->lock);
- }
- return;
- }
-#endif
-}
-
-/**
- * xmlGlobalInitMutexLock
- *
- * Makes sure that the global initialization mutex is initialized and
- * locks it.
- */
-void
-__xmlGlobalInitMutexLock(void)
-{
- /* Make sure the global init lock is initialized and then lock it. */
-#ifdef HAVE_PTHREAD_H
- /* The mutex is statically initialized, so we just lock it. */
- if (pthread_mutex_lock != NULL)
- pthread_mutex_lock(&global_init_lock);
-#elif defined HAVE_WIN32_THREADS
- LPCRITICAL_SECTION cs;
-
- /* Create a new critical section */
- if (global_init_lock == NULL) {
- cs = malloc(sizeof(CRITICAL_SECTION));
- if (cs == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlGlobalInitMutexLock: out of memory\n");
- return;
- }
- InitializeCriticalSection(cs);
-
- /* Swap it into the global_init_lock */
-#ifdef InterlockedCompareExchangePointer
- InterlockedCompareExchangePointer(&global_init_lock, cs, NULL);
-#else /* Use older void* version */
- InterlockedCompareExchange((void **) &global_init_lock,
- (void *) cs, NULL);
-#endif /* InterlockedCompareExchangePointer */
-
- /* If another thread successfully recorded its critical
- * section in the global_init_lock then discard the one
- * allocated by this thread. */
- if (global_init_lock != cs) {
- DeleteCriticalSection(cs);
- free(cs);
- }
- }
-
- /* Lock the chosen critical section */
- EnterCriticalSection(global_init_lock);
-#elif defined HAVE_BEOS_THREADS
- int32 sem;
-
- /* Allocate a new semaphore */
- sem = create_sem(1, "xmlGlobalinitMutex");
-
- while (global_init_lock == -1) {
- if (atomic_add(&global_init_count, 1) == 0) {
- global_init_lock = sem;
- } else {
- snooze(1);
- atomic_add(&global_init_count, -1);
- }
- }
-
- /* If another thread successfully recorded its critical
- * section in the global_init_lock then discard the one
- * allocated by this thread. */
- if (global_init_lock != sem)
- delete_sem(sem);
-
- /* Acquire the chosen semaphore */
- if (acquire_sem(global_init_lock) != B_NO_ERROR) {
-#ifdef DEBUG_THREADS
- xmlGenericError(xmlGenericErrorContext,
- "xmlGlobalInitMutexLock():BeOS:Couldn't acquire semaphore\n");
-#endif
- }
-#endif
-}
-
-void
-__xmlGlobalInitMutexUnlock(void)
-{
-#ifdef HAVE_PTHREAD_H
- if (pthread_mutex_unlock != NULL)
- pthread_mutex_unlock(&global_init_lock);
-#elif defined HAVE_WIN32_THREADS
- if (global_init_lock != NULL) {
- LeaveCriticalSection(global_init_lock);
- }
-#elif defined HAVE_BEOS_THREADS
- release_sem(global_init_lock);
-#endif
-}
-
-/**
- * xmlGlobalInitMutexDestroy
- *
- * Makes sure that the global initialization mutex is destroyed before
- * application termination.
- */
-void
-__xmlGlobalInitMutexDestroy(void)
-{
-#ifdef HAVE_PTHREAD_H
-#elif defined HAVE_WIN32_THREADS
- if (global_init_lock != NULL) {
- DeleteCriticalSection(global_init_lock);
- free(global_init_lock);
- global_init_lock = NULL;
- }
-#endif
-}
-
-/************************************************************************
- * *
- * Per thread global state handling *
- * *
- ************************************************************************/
-
-#ifdef LIBXML_THREAD_ENABLED
-#ifdef xmlLastError
-#undef xmlLastError
-#endif
-
-/**
- * xmlFreeGlobalState:
- * @state: a thread global state
- *
- * xmlFreeGlobalState() is called when a thread terminates with a non-NULL
- * global state. It is is used here to reclaim memory resources.
- */
-static void
-xmlFreeGlobalState(void *state)
-{
- xmlGlobalState *gs = (xmlGlobalState *) state;
-
- /* free any memory allocated in the thread's xmlLastError */
- xmlResetError(&(gs->xmlLastError));
- free(state);
-}
-
-/**
- * xmlNewGlobalState:
- *
- * xmlNewGlobalState() allocates a global state. This structure is used to
- * hold all data for use by a thread when supporting backwards compatibility
- * of libxml2 to pre-thread-safe behaviour.
- *
- * Returns the newly allocated xmlGlobalStatePtr or NULL in case of error
- */
-static xmlGlobalStatePtr
-xmlNewGlobalState(void)
-{
- xmlGlobalState *gs;
-
- gs = malloc(sizeof(xmlGlobalState));
- if (gs == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlGetGlobalState: out of memory\n");
- return (NULL);
- }
-
- memset(gs, 0, sizeof(xmlGlobalState));
- xmlInitializeGlobalState(gs);
- return (gs);
-}
-#endif /* LIBXML_THREAD_ENABLED */
-
-#ifdef HAVE_PTHREAD_H
-#elif defined HAVE_WIN32_THREADS
-#if !defined(HAVE_COMPILER_TLS)
-#if defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
-typedef struct _xmlGlobalStateCleanupHelperParams {
- HANDLE thread;
- void *memory;
-} xmlGlobalStateCleanupHelperParams;
-
-static void XMLCDECL
-xmlGlobalStateCleanupHelper(void *p)
-{
- xmlGlobalStateCleanupHelperParams *params =
- (xmlGlobalStateCleanupHelperParams *) p;
- WaitForSingleObject(params->thread, INFINITE);
- CloseHandle(params->thread);
- xmlFreeGlobalState(params->memory);
- free(params);
- _endthread();
-}
-#else /* LIBXML_STATIC && !LIBXML_STATIC_FOR_DLL */
-
-typedef struct _xmlGlobalStateCleanupHelperParams {
- void *memory;
- struct _xmlGlobalStateCleanupHelperParams *prev;
- struct _xmlGlobalStateCleanupHelperParams *next;
-} xmlGlobalStateCleanupHelperParams;
-
-static xmlGlobalStateCleanupHelperParams *cleanup_helpers_head = NULL;
-static CRITICAL_SECTION cleanup_helpers_cs;
-
-#endif /* LIBXMLSTATIC && !LIBXML_STATIC_FOR_DLL */
-#endif /* HAVE_COMPILER_TLS */
-#endif /* HAVE_WIN32_THREADS */
-
-#if defined HAVE_BEOS_THREADS
-
-/**
- * xmlGlobalStateCleanup:
- * @data: unused parameter
- *
- * Used for Beos only
- */
-void
-xmlGlobalStateCleanup(void *data)
-{
- void *globalval = tls_get(globalkey);
-
- if (globalval != NULL)
- xmlFreeGlobalState(globalval);
-}
-#endif
-
-/**
- * xmlGetGlobalState:
- *
- * xmlGetGlobalState() is called to retrieve the global state for a thread.
- *
- * Returns the thread global state or NULL in case of error
- */
-xmlGlobalStatePtr
-xmlGetGlobalState(void)
-{
-#ifdef HAVE_PTHREAD_H
- xmlGlobalState *globalval;
-
- if (libxml_is_threaded == 0)
- return (NULL);
-
- pthread_once(&once_control, xmlOnceInit);
-
- if ((globalval = (xmlGlobalState *)
- pthread_getspecific(globalkey)) == NULL) {
- xmlGlobalState *tsd = xmlNewGlobalState();
- if (tsd == NULL)
- return(NULL);
-
- pthread_setspecific(globalkey, tsd);
- return (tsd);
- }
- return (globalval);
-#elif defined HAVE_WIN32_THREADS
-#if defined(HAVE_COMPILER_TLS)
- if (!tlstate_inited) {
- tlstate_inited = 1;
- xmlInitializeGlobalState(&tlstate);
- }
- return &tlstate;
-#else /* HAVE_COMPILER_TLS */
- xmlGlobalState *globalval;
- xmlGlobalStateCleanupHelperParams *p;
-
- xmlOnceInit();
-#if defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
- globalval = (xmlGlobalState *) TlsGetValue(globalkey);
-#else
- p = (xmlGlobalStateCleanupHelperParams *) TlsGetValue(globalkey);
- globalval = (xmlGlobalState *) (p ? p->memory : NULL);
-#endif
- if (globalval == NULL) {
- xmlGlobalState *tsd = xmlNewGlobalState();
-
- if (tsd == NULL)
- return(NULL);
- p = (xmlGlobalStateCleanupHelperParams *)
- malloc(sizeof(xmlGlobalStateCleanupHelperParams));
- if (p == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlGetGlobalState: out of memory\n");
- xmlFreeGlobalState(tsd);
- return(NULL);
- }
- p->memory = tsd;
-#if defined(LIBXML_STATIC) && !defined(LIBXML_STATIC_FOR_DLL)
- DuplicateHandle(GetCurrentProcess(), GetCurrentThread(),
- GetCurrentProcess(), &p->thread, 0, TRUE,
- DUPLICATE_SAME_ACCESS);
- TlsSetValue(globalkey, tsd);
- _beginthread(xmlGlobalStateCleanupHelper, 0, p);
-#else
- EnterCriticalSection(&cleanup_helpers_cs);
- if (cleanup_helpers_head != NULL) {
- cleanup_helpers_head->prev = p;
- }
- p->next = cleanup_helpers_head;
- p->prev = NULL;
- cleanup_helpers_head = p;
- TlsSetValue(globalkey, p);
- LeaveCriticalSection(&cleanup_helpers_cs);
-#endif
-
- return (tsd);
- }
- return (globalval);
-#endif /* HAVE_COMPILER_TLS */
-#elif defined HAVE_BEOS_THREADS
- xmlGlobalState *globalval;
-
- xmlOnceInit();
-
- if ((globalval = (xmlGlobalState *) tls_get(globalkey)) == NULL) {
- xmlGlobalState *tsd = xmlNewGlobalState();
- if (tsd == NULL)
- return (NULL);
-
- tls_set(globalkey, tsd);
- on_exit_thread(xmlGlobalStateCleanup, NULL);
- return (tsd);
- }
- return (globalval);
-#else
- return (NULL);
-#endif
-}
-
-/************************************************************************
- * *
- * Library wide thread interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlGetThreadId:
- *
- * xmlGetThreadId() find the current thread ID number
- * Note that this is likely to be broken on some platforms using pthreads
- * as the specification doesn't mandate pthread_t to be an integer type
- *
- * Returns the current thread ID number
- */
-int
-xmlGetThreadId(void)
-{
-#ifdef HAVE_PTHREAD_H
- pthread_t id;
- int ret;
-
- if (libxml_is_threaded == 0)
- return (0);
- id = pthread_self();
- /* horrible but preserves compat, see warning above */
- memcpy(&ret, &id, sizeof(ret));
- return (ret);
-#elif defined HAVE_WIN32_THREADS
- return GetCurrentThreadId();
-#elif defined HAVE_BEOS_THREADS
- return find_thread(NULL);
-#else
- return ((int) 0);
-#endif
-}
-
-/**
- * xmlIsMainThread:
- *
- * xmlIsMainThread() check whether the current thread is the main thread.
- *
- * Returns 1 if the current thread is the main thread, 0 otherwise
- */
-int
-xmlIsMainThread(void)
-{
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded == -1)
- xmlInitThreads();
- if (libxml_is_threaded == 0)
- return (1);
- pthread_once(&once_control, xmlOnceInit);
-#elif defined HAVE_WIN32_THREADS
- xmlOnceInit();
-#elif defined HAVE_BEOS_THREADS
- xmlOnceInit();
-#endif
-
-#ifdef DEBUG_THREADS
- xmlGenericError(xmlGenericErrorContext, "xmlIsMainThread()\n");
-#endif
-#ifdef HAVE_PTHREAD_H
- return (pthread_equal(mainthread,pthread_self()));
-#elif defined HAVE_WIN32_THREADS
- return (mainthread == GetCurrentThreadId());
-#elif defined HAVE_BEOS_THREADS
- return (mainthread == find_thread(NULL));
-#else
- return (1);
-#endif
-}
-
-/**
- * xmlLockLibrary:
- *
- * xmlLockLibrary() is used to take out a re-entrant lock on the libxml2
- * library.
- */
-void
-xmlLockLibrary(void)
-{
-#ifdef DEBUG_THREADS
- xmlGenericError(xmlGenericErrorContext, "xmlLockLibrary()\n");
-#endif
- xmlRMutexLock(xmlLibraryLock);
-}
-
-/**
- * xmlUnlockLibrary:
- *
- * xmlUnlockLibrary() is used to release a re-entrant lock on the libxml2
- * library.
- */
-void
-xmlUnlockLibrary(void)
-{
-#ifdef DEBUG_THREADS
- xmlGenericError(xmlGenericErrorContext, "xmlUnlockLibrary()\n");
-#endif
- xmlRMutexUnlock(xmlLibraryLock);
-}
-
-/**
- * xmlInitThreads:
- *
- * xmlInitThreads() is used to to initialize all the thread related
- * data of the libxml2 library.
- */
-void
-xmlInitThreads(void)
-{
-#ifdef HAVE_PTHREAD_H
- if (libxml_is_threaded == -1) {
- if ((pthread_once != NULL) &&
- (pthread_getspecific != NULL) &&
- (pthread_setspecific != NULL) &&
- (pthread_key_create != NULL) &&
- (pthread_key_delete != NULL) &&
- (pthread_mutex_init != NULL) &&
- (pthread_mutex_destroy != NULL) &&
- (pthread_mutex_lock != NULL) &&
- (pthread_mutex_unlock != NULL) &&
- (pthread_cond_init != NULL) &&
- (pthread_cond_destroy != NULL) &&
- (pthread_cond_wait != NULL) &&
- (pthread_equal != NULL) &&
- (pthread_self != NULL) &&
- (pthread_cond_signal != NULL)) {
- libxml_is_threaded = 1;
-
-/* fprintf(stderr, "Running multithreaded\n"); */
- } else {
-
-/* fprintf(stderr, "Running without multithread\n"); */
- libxml_is_threaded = 0;
- }
- }
-#elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
- InitializeCriticalSection(&cleanup_helpers_cs);
-#endif
-}
-
-/**
- * xmlCleanupThreads:
- *
- * xmlCleanupThreads() is used to to cleanup all the thread related
- * data of the libxml2 library once processing has ended.
- *
- * WARNING: if your application is multithreaded or has plugin support
- * calling this may crash the application if another thread or
- * a plugin is still using libxml2. It's sometimes very hard to
- * guess if libxml2 is in use in the application, some libraries
- * or plugins may use it without notice. In case of doubt abstain
- * from calling this function or do it just before calling exit()
- * to avoid leak reports from valgrind !
- */
-void
-xmlCleanupThreads(void)
-{
-#ifdef DEBUG_THREADS
- xmlGenericError(xmlGenericErrorContext, "xmlCleanupThreads()\n");
-#endif
-#ifdef HAVE_PTHREAD_H
- if ((libxml_is_threaded) && (pthread_key_delete != NULL))
- pthread_key_delete(globalkey);
- once_control = once_control_init;
-#elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
- if (globalkey != TLS_OUT_OF_INDEXES) {
- xmlGlobalStateCleanupHelperParams *p;
-
- EnterCriticalSection(&cleanup_helpers_cs);
- p = cleanup_helpers_head;
- while (p != NULL) {
- xmlGlobalStateCleanupHelperParams *temp = p;
-
- p = p->next;
- xmlFreeGlobalState(temp->memory);
- free(temp);
- }
- cleanup_helpers_head = 0;
- LeaveCriticalSection(&cleanup_helpers_cs);
- TlsFree(globalkey);
- globalkey = TLS_OUT_OF_INDEXES;
- }
- DeleteCriticalSection(&cleanup_helpers_cs);
-#endif
-}
-
-#ifdef LIBXML_THREAD_ENABLED
-
-/**
- * xmlOnceInit
- *
- * xmlOnceInit() is used to initialize the value of mainthread for use
- * in other routines. This function should only be called using
- * pthread_once() in association with the once_control variable to ensure
- * that the function is only called once. See man pthread_once for more
- * details.
- */
-static void
-xmlOnceInit(void)
-{
-#ifdef HAVE_PTHREAD_H
- (void) pthread_key_create(&globalkey, xmlFreeGlobalState);
- mainthread = pthread_self();
- __xmlInitializeDict();
-#elif defined(HAVE_WIN32_THREADS)
- if (!run_once.done) {
- if (InterlockedIncrement(&run_once.control) == 1) {
-#if !defined(HAVE_COMPILER_TLS)
- globalkey = TlsAlloc();
-#endif
- mainthread = GetCurrentThreadId();
- __xmlInitializeDict();
- run_once.done = 1;
- } else {
- /* Another thread is working; give up our slice and
- * wait until they're done. */
- while (!run_once.done)
- Sleep(0);
- }
- }
-#elif defined HAVE_BEOS_THREADS
- if (atomic_add(&run_once_init, 1) == 0) {
- globalkey = tls_allocate();
- tls_set(globalkey, NULL);
- mainthread = find_thread(NULL);
- __xmlInitializeDict();
- } else
- atomic_add(&run_once_init, -1);
-#endif
-}
-#endif
-
-/**
- * DllMain:
- * @hinstDLL: handle to DLL instance
- * @fdwReason: Reason code for entry
- * @lpvReserved: generic pointer (depends upon reason code)
- *
- * Entry point for Windows library. It is being used to free thread-specific
- * storage.
- *
- * Returns TRUE always
- */
-#ifdef HAVE_PTHREAD_H
-#elif defined(HAVE_WIN32_THREADS) && !defined(HAVE_COMPILER_TLS) && (!defined(LIBXML_STATIC) || defined(LIBXML_STATIC_FOR_DLL))
-#if defined(LIBXML_STATIC_FOR_DLL)
-BOOL XMLCALL
-xmlDllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-#else
-BOOL WINAPI
-DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-#endif
-{
- switch (fdwReason) {
- case DLL_THREAD_DETACH:
- if (globalkey != TLS_OUT_OF_INDEXES) {
- xmlGlobalState *globalval = NULL;
- xmlGlobalStateCleanupHelperParams *p =
- (xmlGlobalStateCleanupHelperParams *)
- TlsGetValue(globalkey);
- globalval = (xmlGlobalState *) (p ? p->memory : NULL);
- if (globalval) {
- xmlFreeGlobalState(globalval);
- TlsSetValue(globalkey, NULL);
- }
- if (p) {
- EnterCriticalSection(&cleanup_helpers_cs);
- if (p == cleanup_helpers_head)
- cleanup_helpers_head = p->next;
- else
- p->prev->next = p->next;
- if (p->next != NULL)
- p->next->prev = p->prev;
- LeaveCriticalSection(&cleanup_helpers_cs);
- free(p);
- }
- }
- break;
- }
- return TRUE;
-}
-#endif
-#define bottom_threads
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/timsort.h b/external/libxml2_android/jni/libxml2/timsort.h
deleted file mode 100644
index 19aebf2a..00000000
--- a/external/libxml2_android/jni/libxml2/timsort.h
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
- * taken from https://github.com/swenson/sort
- * Kept as is for the moment to be able to apply upstream patches for that
- * code, currently used only to speed up XPath node sorting, see xpath.c
- */
-
-/*
- * All code in this header, unless otherwise specified, is hereby licensed under the MIT Public License:
-
-Copyright (c) 2010 Christopher Swenson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#else
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#elif defined(WIN32)
-typedef __int64 int64_t;
-typedef unsigned __int64 uint64_t;
-#endif
-#endif
-
-#ifndef MK_UINT64
-#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER < 1300
-#define MK_UINT64(x) ((uint64_t)(x))
-#else
-#define MK_UINT64(x) x##ULL
-#endif
-#endif
-
-#ifndef MAX
-#define MAX(x,y) (((x) > (y) ? (x) : (y)))
-#endif
-#ifndef MIN
-#define MIN(x,y) (((x) < (y) ? (x) : (y)))
-#endif
-
-int compute_minrun(uint64_t);
-
-#ifndef CLZ
-#if defined(__GNUC__) && ((__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || (__GNUC__ > 3))
-#define CLZ __builtin_clzll
-#else
-
-int clzll(uint64_t);
-
-/* adapted from Hacker's Delight */
-int clzll(uint64_t x) /* {{{ */
-{
- int n;
-
- if (x == 0) return(64);
- n = 0;
- if (x <= MK_UINT64(0x00000000FFFFFFFF)) {n = n + 32; x = x << 32;}
- if (x <= MK_UINT64(0x0000FFFFFFFFFFFF)) {n = n + 16; x = x << 16;}
- if (x <= MK_UINT64(0x00FFFFFFFFFFFFFF)) {n = n + 8; x = x << 8;}
- if (x <= MK_UINT64(0x0FFFFFFFFFFFFFFF)) {n = n + 4; x = x << 4;}
- if (x <= MK_UINT64(0x3FFFFFFFFFFFFFFF)) {n = n + 2; x = x << 2;}
- if (x <= MK_UINT64(0x7FFFFFFFFFFFFFFF)) {n = n + 1;}
- return n;
-}
-/* }}} */
-
-#define CLZ clzll
-#endif
-#endif
-
-int compute_minrun(uint64_t size) /* {{{ */
-{
- const int top_bit = 64 - CLZ(size);
- const int shift = MAX(top_bit, 6) - 6;
- const int minrun = size >> shift;
- const uint64_t mask = (MK_UINT64(1) << shift) - 1;
- if (mask & size) return minrun + 1;
- return minrun;
-}
-/* }}} */
-
-#ifndef SORT_NAME
-#error "Must declare SORT_NAME"
-#endif
-
-#ifndef SORT_TYPE
-#error "Must declare SORT_TYPE"
-#endif
-
-#ifndef SORT_CMP
-#define SORT_CMP(x, y) ((x) < (y) ? -1 : ((x) == (y) ? 0 : 1))
-#endif
-
-
-#define SORT_SWAP(x,y) {SORT_TYPE __SORT_SWAP_t = (x); (x) = (y); (y) = __SORT_SWAP_t;}
-
-#define SORT_CONCAT(x, y) x ## _ ## y
-#define SORT_MAKE_STR1(x, y) SORT_CONCAT(x,y)
-#define SORT_MAKE_STR(x) SORT_MAKE_STR1(SORT_NAME,x)
-
-#define BINARY_INSERTION_FIND SORT_MAKE_STR(binary_insertion_find)
-#define BINARY_INSERTION_SORT_START SORT_MAKE_STR(binary_insertion_sort_start)
-#define BINARY_INSERTION_SORT SORT_MAKE_STR(binary_insertion_sort)
-#define REVERSE_ELEMENTS SORT_MAKE_STR(reverse_elements)
-#define COUNT_RUN SORT_MAKE_STR(count_run)
-#define CHECK_INVARIANT SORT_MAKE_STR(check_invariant)
-#define TIM_SORT SORT_MAKE_STR(tim_sort)
-#define TIM_SORT_RESIZE SORT_MAKE_STR(tim_sort_resize)
-#define TIM_SORT_MERGE SORT_MAKE_STR(tim_sort_merge)
-#define TIM_SORT_COLLAPSE SORT_MAKE_STR(tim_sort_collapse)
-
-#define TIM_SORT_RUN_T SORT_MAKE_STR(tim_sort_run_t)
-#define TEMP_STORAGE_T SORT_MAKE_STR(temp_storage_t)
-
-typedef struct {
- int64_t start;
- int64_t length;
-} TIM_SORT_RUN_T;
-
-void BINARY_INSERTION_SORT(SORT_TYPE *dst, const size_t size);
-void TIM_SORT(SORT_TYPE *dst, const size_t size);
-
-/* Function used to do a binary search for binary insertion sort */
-static int64_t BINARY_INSERTION_FIND(SORT_TYPE *dst, const SORT_TYPE x, const size_t size)
-{
- int64_t l, c, r;
- SORT_TYPE lx;
- SORT_TYPE cx;
- l = 0;
- r = size - 1;
- c = r >> 1;
- lx = dst[l];
-
- /* check for beginning conditions */
- if (SORT_CMP(x, lx) < 0)
- return 0;
- else if (SORT_CMP(x, lx) == 0)
- {
- int64_t i = 1;
- while (SORT_CMP(x, dst[i]) == 0) i++;
- return i;
- }
-
- cx = dst[c];
- while (1)
- {
- const int val = SORT_CMP(x, cx);
- if (val < 0)
- {
- if (c - l <= 1) return c;
- r = c;
- }
- else if (val > 0)
- {
- if (r - c <= 1) return c + 1;
- l = c;
- lx = cx;
- }
- else
- {
- do
- {
- cx = dst[++c];
- } while (SORT_CMP(x, cx) == 0);
- return c;
- }
- c = l + ((r - l) >> 1);
- cx = dst[c];
- }
-}
-
-/* Binary insertion sort, but knowing that the first "start" entries are sorted. Used in timsort. */
-static void BINARY_INSERTION_SORT_START(SORT_TYPE *dst, const size_t start, const size_t size)
-{
- int64_t i;
- for (i = start; i < (int64_t) size; i++)
- {
- int64_t j;
- SORT_TYPE x;
- int64_t location;
- /* If this entry is already correct, just move along */
- if (SORT_CMP(dst[i - 1], dst[i]) <= 0) continue;
-
- /* Else we need to find the right place, shift everything over, and squeeze in */
- x = dst[i];
- location = BINARY_INSERTION_FIND(dst, x, i);
- for (j = i - 1; j >= location; j--)
- {
- dst[j + 1] = dst[j];
- }
- dst[location] = x;
- }
-}
-
-/* Binary insertion sort */
-void BINARY_INSERTION_SORT(SORT_TYPE *dst, const size_t size)
-{
- BINARY_INSERTION_SORT_START(dst, 1, size);
-}
-
-/* timsort implementation, based on timsort.txt */
-
-static void REVERSE_ELEMENTS(SORT_TYPE *dst, int64_t start, int64_t end)
-{
- while (1)
- {
- if (start >= end) return;
- SORT_SWAP(dst[start], dst[end]);
- start++;
- end--;
- }
-}
-
-static int64_t COUNT_RUN(SORT_TYPE *dst, const int64_t start, const size_t size)
-{
- int64_t curr;
- if (size - start == 1) return 1;
- if (start >= (int64_t) size - 2)
- {
- if (SORT_CMP(dst[size - 2], dst[size - 1]) > 0)
- SORT_SWAP(dst[size - 2], dst[size - 1]);
- return 2;
- }
-
- curr = start + 2;
-
- if (SORT_CMP(dst[start], dst[start + 1]) <= 0)
- {
- /* increasing run */
- while (1)
- {
- if (curr == (int64_t) size - 1) break;
- if (SORT_CMP(dst[curr - 1], dst[curr]) > 0) break;
- curr++;
- }
- return curr - start;
- }
- else
- {
- /* decreasing run */
- while (1)
- {
- if (curr == (int64_t) size - 1) break;
- if (SORT_CMP(dst[curr - 1], dst[curr]) <= 0) break;
- curr++;
- }
- /* reverse in-place */
- REVERSE_ELEMENTS(dst, start, curr - 1);
- return curr - start;
- }
-}
-
-#define PUSH_NEXT() do {\
-len = COUNT_RUN(dst, curr, size);\
-run = minrun;\
-if (run < minrun) run = minrun;\
-if (run > (int64_t) size - curr) run = size - curr;\
-if (run > len)\
-{\
- BINARY_INSERTION_SORT_START(&dst[curr], len, run);\
- len = run;\
-}\
-{\
-run_stack[stack_curr].start = curr;\
-run_stack[stack_curr].length = len;\
-stack_curr++;\
-}\
-curr += len;\
-if (curr == (int64_t) size)\
-{\
- /* finish up */ \
- while (stack_curr > 1) \
- { \
- TIM_SORT_MERGE(dst, run_stack, stack_curr, store); \
- run_stack[stack_curr - 2].length += run_stack[stack_curr - 1].length; \
- stack_curr--; \
- } \
- if (store->storage != NULL)\
- {\
- free(store->storage);\
- store->storage = NULL;\
- }\
- return;\
-}\
-}\
-while (0)
-
-static int CHECK_INVARIANT(TIM_SORT_RUN_T *stack, const int stack_curr)
-{
- int64_t A, B, C;
- if (stack_curr < 2) return 1;
- if (stack_curr == 2)
- {
- const int64_t A1 = stack[stack_curr - 2].length;
- const int64_t B1 = stack[stack_curr - 1].length;
- if (A1 <= B1) return 0;
- return 1;
- }
- A = stack[stack_curr - 3].length;
- B = stack[stack_curr - 2].length;
- C = stack[stack_curr - 1].length;
- if ((A <= B + C) || (B <= C)) return 0;
- return 1;
-}
-
-typedef struct {
- size_t alloc;
- SORT_TYPE *storage;
-} TEMP_STORAGE_T;
-
-
-static void TIM_SORT_RESIZE(TEMP_STORAGE_T *store, const size_t new_size)
-{
- if (store->alloc < new_size)
- {
- SORT_TYPE *tempstore = (SORT_TYPE *)realloc(store->storage, new_size * sizeof(SORT_TYPE));
- if (tempstore == NULL)
- {
- fprintf(stderr, "Error allocating temporary storage for tim sort: need %lu bytes", (unsigned long) (sizeof(SORT_TYPE) * new_size));
- exit(1);
- }
- store->storage = tempstore;
- store->alloc = new_size;
- }
-}
-
-static void TIM_SORT_MERGE(SORT_TYPE *dst, const TIM_SORT_RUN_T *stack, const int stack_curr, TEMP_STORAGE_T *store)
-{
- const int64_t A = stack[stack_curr - 2].length;
- const int64_t B = stack[stack_curr - 1].length;
- const int64_t curr = stack[stack_curr - 2].start;
- SORT_TYPE *storage;
- int64_t i, j, k;
-
- TIM_SORT_RESIZE(store, MIN(A, B));
- storage = store->storage;
-
- /* left merge */
- if (A < B)
- {
- memcpy(storage, &dst[curr], A * sizeof(SORT_TYPE));
- i = 0;
- j = curr + A;
-
- for (k = curr; k < curr + A + B; k++)
- {
- if ((i < A) && (j < curr + A + B))
- {
- if (SORT_CMP(storage[i], dst[j]) <= 0)
- dst[k] = storage[i++];
- else
- dst[k] = dst[j++];
- }
- else if (i < A)
- {
- dst[k] = storage[i++];
- }
- else
- dst[k] = dst[j++];
- }
- }
- /* right merge */
- else
- {
- memcpy(storage, &dst[curr + A], B * sizeof(SORT_TYPE));
- i = B - 1;
- j = curr + A - 1;
-
- for (k = curr + A + B - 1; k >= curr; k--)
- {
- if ((i >= 0) && (j >= curr))
- {
- if (SORT_CMP(dst[j], storage[i]) > 0)
- dst[k] = dst[j--];
- else
- dst[k] = storage[i--];
- }
- else if (i >= 0)
- dst[k] = storage[i--];
- else
- dst[k] = dst[j--];
- }
- }
-}
-
-static int TIM_SORT_COLLAPSE(SORT_TYPE *dst, TIM_SORT_RUN_T *stack, int stack_curr, TEMP_STORAGE_T *store, const size_t size)
-{
- while (1) {
- int64_t A, B, C, D;
- int ABC, BCD, CD;
-
- /* if the stack only has one thing on it, we are done with the collapse */
- if (stack_curr <= 1) {
- break;
- }
-
- /* if this is the last merge, just do it */
- if ((stack_curr == 2) && (stack[0].length + stack[1].length == size)) {
- TIM_SORT_MERGE(dst, stack, stack_curr, store);
- stack[0].length += stack[1].length;
- stack_curr--;
- break;
- }
- /* check if the invariant is off for a stack of 2 elements */
- else if ((stack_curr == 2) && (stack[0].length <= stack[1].length)) {
- TIM_SORT_MERGE(dst, stack, stack_curr, store);
- stack[0].length += stack[1].length;
- stack_curr--;
- break;
- } else if (stack_curr == 2) {
- break;
- }
-
- B = stack[stack_curr - 3].length;
- C = stack[stack_curr - 2].length;
- D = stack[stack_curr - 1].length;
-
- if (stack_curr >= 4) {
- A = stack[stack_curr - 4].length;
- ABC = (A <= B + C);
- } else {
- ABC = 0;
- }
-
- BCD = (B <= C + D) || ABC;
- CD = (C <= D);
-
- /* Both invariants are good */
- if (!BCD && !CD) {
- break;
- }
-
- /* left merge */
- if (BCD && !CD) {
- TIM_SORT_MERGE(dst, stack, stack_curr - 1, store);
- stack[stack_curr - 3].length += stack[stack_curr - 2].length;
- stack[stack_curr - 2] = stack[stack_curr - 1];
- stack_curr--;
- } else {
- /* right merge */
- TIM_SORT_MERGE(dst, stack, stack_curr, store);
- stack[stack_curr - 2].length += stack[stack_curr - 1].length;
- stack_curr--;
- }
- }
-
- return stack_curr;
-}
-
-void TIM_SORT(SORT_TYPE *dst, const size_t size)
-{
- int minrun;
- TEMP_STORAGE_T _store, *store;
- TIM_SORT_RUN_T run_stack[128];
- int stack_curr = 0;
- int64_t len, run;
- int64_t curr = 0;
-
- if (size < 64)
- {
- BINARY_INSERTION_SORT(dst, size);
- return;
- }
-
- /* compute the minimum run length */
- minrun = compute_minrun(size);
-
- /* temporary storage for merges */
- store = &_store;
- store->alloc = 0;
- store->storage = NULL;
-
- PUSH_NEXT();
- PUSH_NEXT();
- PUSH_NEXT();
-
- while (1)
- {
- if (!CHECK_INVARIANT(run_stack, stack_curr))
- {
- stack_curr = TIM_SORT_COLLAPSE(dst, run_stack, stack_curr, store, size);
- continue;
- }
- PUSH_NEXT();
- }
-}
-
-#undef SORT_CONCAT
-#undef SORT_MAKE_STR1
-#undef SORT_MAKE_STR
-#undef SORT_NAME
-#undef SORT_TYPE
-#undef SORT_CMP
-#undef TEMP_STORAGE_T
-#undef TIM_SORT_RUN_T
-#undef PUSH_NEXT
-#undef SORT_SWAP
-#undef SORT_CONCAT
-#undef SORT_MAKE_STR1
-#undef SORT_MAKE_STR
-#undef BINARY_INSERTION_FIND
-#undef BINARY_INSERTION_SORT_START
-#undef BINARY_INSERTION_SORT
-#undef REVERSE_ELEMENTS
-#undef COUNT_RUN
-#undef TIM_SORT
-#undef TIM_SORT_RESIZE
-#undef TIM_SORT_COLLAPSE
-#undef TIM_SORT_RUN_T
-#undef TEMP_STORAGE_T
diff --git a/external/libxml2_android/jni/libxml2/tree.c b/external/libxml2_android/jni/libxml2/tree.c
deleted file mode 100644
index 9d330b85..00000000
--- a/external/libxml2_android/jni/libxml2/tree.c
+++ /dev/null
@@ -1,10122 +0,0 @@
-/*
- * tree.c : implementation of access function for an XML tree.
- *
- * References:
- * XHTML 1.0 W3C REC: http://www.w3.org/TR/2002/REC-xhtml1-20020801/
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- *
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h> /* for memset() only ! */
-#include <limits.h>
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/uri.h>
-#include <libxml/entities.h>
-#include <libxml/valid.h>
-#include <libxml/xmlerror.h>
-#include <libxml/parserInternals.h>
-#include <libxml/globals.h>
-#ifdef LIBXML_HTML_ENABLED
-#include <libxml/HTMLtree.h>
-#endif
-#ifdef LIBXML_DEBUG_ENABLED
-#include <libxml/debugXML.h>
-#endif
-
-#include "buf.h"
-#include "save.h"
-
-int __xmlRegisterCallbacks = 0;
-
-/************************************************************************
- * *
- * Forward declarations *
- * *
- ************************************************************************/
-
-static xmlNsPtr
-xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns);
-
-static xmlChar* xmlGetPropNodeValueInternal(const xmlAttr *prop);
-
-/************************************************************************
- * *
- * Tree memory error handler *
- * *
- ************************************************************************/
-/**
- * xmlTreeErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlTreeErrMemory(const char *extra)
-{
- __xmlSimpleError(XML_FROM_TREE, XML_ERR_NO_MEMORY, NULL, NULL, extra);
-}
-
-/**
- * xmlTreeErr:
- * @code: the error number
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlTreeErr(int code, xmlNodePtr node, const char *extra)
-{
- const char *msg = NULL;
-
- switch(code) {
- case XML_TREE_INVALID_HEX:
- msg = "invalid hexadecimal character value\n";
- break;
- case XML_TREE_INVALID_DEC:
- msg = "invalid decimal character value\n";
- break;
- case XML_TREE_UNTERMINATED_ENTITY:
- msg = "unterminated entity reference %15s\n";
- break;
- case XML_TREE_NOT_UTF8:
- msg = "string is not in UTF-8\n";
- break;
- default:
- msg = "unexpected error number\n";
- }
- __xmlSimpleError(XML_FROM_TREE, code, node, msg, extra);
-}
-
-/************************************************************************
- * *
- * A few static variables and macros *
- * *
- ************************************************************************/
-/* #undef xmlStringText */
-const xmlChar xmlStringText[] = { 't', 'e', 'x', 't', 0 };
-/* #undef xmlStringTextNoenc */
-const xmlChar xmlStringTextNoenc[] =
- { 't', 'e', 'x', 't', 'n', 'o', 'e', 'n', 'c', 0 };
-/* #undef xmlStringComment */
-const xmlChar xmlStringComment[] = { 'c', 'o', 'm', 'm', 'e', 'n', 't', 0 };
-
-static int xmlCompressMode = 0;
-static int xmlCheckDTD = 1;
-
-#define UPDATE_LAST_CHILD_AND_PARENT(n) if ((n) != NULL) { \
- xmlNodePtr ulccur = (n)->children; \
- if (ulccur == NULL) { \
- (n)->last = NULL; \
- } else { \
- while (ulccur->next != NULL) { \
- ulccur->parent = (n); \
- ulccur = ulccur->next; \
- } \
- ulccur->parent = (n); \
- (n)->last = ulccur; \
-}}
-
-#define IS_STR_XML(str) ((str != NULL) && (str[0] == 'x') && \
- (str[1] == 'm') && (str[2] == 'l') && (str[3] == 0))
-
-/* #define DEBUG_BUFFER */
-/* #define DEBUG_TREE */
-
-/************************************************************************
- * *
- * Functions to move to entities.c once the *
- * API freeze is smoothen and they can be made public. *
- * *
- ************************************************************************/
-#include <libxml/hash.h>
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlGetEntityFromDtd:
- * @dtd: A pointer to the DTD to search
- * @name: The entity name
- *
- * Do an entity lookup in the DTD entity hash table and
- * return the corresponding entity, if found.
- *
- * Returns A pointer to the entity structure or NULL if not found.
- */
-static xmlEntityPtr
-xmlGetEntityFromDtd(const xmlDtd *dtd, const xmlChar *name) {
- xmlEntitiesTablePtr table;
-
- if((dtd != NULL) && (dtd->entities != NULL)) {
- table = (xmlEntitiesTablePtr) dtd->entities;
- return((xmlEntityPtr) xmlHashLookup(table, name));
- /* return(xmlGetEntityFromTable(table, name)); */
- }
- return(NULL);
-}
-/**
- * xmlGetParameterEntityFromDtd:
- * @dtd: A pointer to the DTD to search
- * @name: The entity name
- *
- * Do an entity lookup in the DTD pararmeter entity hash table and
- * return the corresponding entity, if found.
- *
- * Returns A pointer to the entity structure or NULL if not found.
- */
-static xmlEntityPtr
-xmlGetParameterEntityFromDtd(const xmlDtd *dtd, const xmlChar *name) {
- xmlEntitiesTablePtr table;
-
- if ((dtd != NULL) && (dtd->pentities != NULL)) {
- table = (xmlEntitiesTablePtr) dtd->pentities;
- return((xmlEntityPtr) xmlHashLookup(table, name));
- /* return(xmlGetEntityFromTable(table, name)); */
- }
- return(NULL);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/************************************************************************
- * *
- * QName handling helper *
- * *
- ************************************************************************/
-
-/**
- * xmlBuildQName:
- * @ncname: the Name
- * @prefix: the prefix
- * @memory: preallocated memory
- * @len: preallocated memory length
- *
- * Builds the QName @prefix:@ncname in @memory if there is enough space
- * and prefix is not NULL nor empty, otherwise allocate a new string.
- * If prefix is NULL or empty it returns ncname.
- *
- * Returns the new string which must be freed by the caller if different from
- * @memory and @ncname or NULL in case of error
- */
-xmlChar *
-xmlBuildQName(const xmlChar *ncname, const xmlChar *prefix,
- xmlChar *memory, int len) {
- int lenn, lenp;
- xmlChar *ret;
-
- if (ncname == NULL) return(NULL);
- if (prefix == NULL) return((xmlChar *) ncname);
-
- lenn = strlen((char *) ncname);
- lenp = strlen((char *) prefix);
-
- if ((memory == NULL) || (len < lenn + lenp + 2)) {
- ret = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
- if (ret == NULL) {
- xmlTreeErrMemory("building QName");
- return(NULL);
- }
- } else {
- ret = memory;
- }
- memcpy(&ret[0], prefix, lenp);
- ret[lenp] = ':';
- memcpy(&ret[lenp + 1], ncname, lenn);
- ret[lenn + lenp + 1] = 0;
- return(ret);
-}
-
-/**
- * xmlSplitQName2:
- * @name: the full QName
- * @prefix: a xmlChar **
- *
- * parse an XML qualified name string
- *
- * [NS 5] QName ::= (Prefix ':')? LocalPart
- *
- * [NS 6] Prefix ::= NCName
- *
- * [NS 7] LocalPart ::= NCName
- *
- * Returns NULL if not a QName, otherwise the local part, and prefix
- * is updated to get the Prefix if any.
- */
-
-xmlChar *
-xmlSplitQName2(const xmlChar *name, xmlChar **prefix) {
- int len = 0;
- xmlChar *ret = NULL;
-
- if (prefix == NULL) return(NULL);
- *prefix = NULL;
- if (name == NULL) return(NULL);
-
-#ifndef XML_XML_NAMESPACE
- /* xml: prefix is not really a namespace */
- if ((name[0] == 'x') && (name[1] == 'm') &&
- (name[2] == 'l') && (name[3] == ':'))
- return(NULL);
-#endif
-
- /* nasty but valid */
- if (name[0] == ':')
- return(NULL);
-
- /*
- * we are not trying to validate but just to cut, and yes it will
- * work even if this is as set of UTF-8 encoded chars
- */
- while ((name[len] != 0) && (name[len] != ':'))
- len++;
-
- if (name[len] == 0)
- return(NULL);
-
- *prefix = xmlStrndup(name, len);
- if (*prefix == NULL) {
- xmlTreeErrMemory("QName split");
- return(NULL);
- }
- ret = xmlStrdup(&name[len + 1]);
- if (ret == NULL) {
- xmlTreeErrMemory("QName split");
- if (*prefix != NULL) {
- xmlFree(*prefix);
- *prefix = NULL;
- }
- return(NULL);
- }
-
- return(ret);
-}
-
-/**
- * xmlSplitQName3:
- * @name: the full QName
- * @len: an int *
- *
- * parse an XML qualified name string,i
- *
- * returns NULL if it is not a Qualified Name, otherwise, update len
- * with the length in byte of the prefix and return a pointer
- * to the start of the name without the prefix
- */
-
-const xmlChar *
-xmlSplitQName3(const xmlChar *name, int *len) {
- int l = 0;
-
- if (name == NULL) return(NULL);
- if (len == NULL) return(NULL);
-
- /* nasty but valid */
- if (name[0] == ':')
- return(NULL);
-
- /*
- * we are not trying to validate but just to cut, and yes it will
- * work even if this is as set of UTF-8 encoded chars
- */
- while ((name[l] != 0) && (name[l] != ':'))
- l++;
-
- if (name[l] == 0)
- return(NULL);
-
- *len = l;
-
- return(&name[l+1]);
-}
-
-/************************************************************************
- * *
- * Check Name, NCName and QName strings *
- * *
- ************************************************************************/
-
-#define CUR_SCHAR(s, l) xmlStringCurrentChar(NULL, s, &l)
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_DEBUG_ENABLED) || defined (LIBXML_HTML_ENABLED) || defined(LIBXML_SAX1_ENABLED) || defined(LIBXML_HTML_ENABLED) || defined(LIBXML_WRITER_ENABLED) || defined(LIBXML_DOCB_ENABLED) || defined(LIBXML_LEGACY_ENABLED)
-/**
- * xmlValidateNCName:
- * @value: the value to check
- * @space: allow spaces in front and end of the string
- *
- * Check that a value conforms to the lexical space of NCName
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlValidateNCName(const xmlChar *value, int space) {
- const xmlChar *cur = value;
- int c,l;
-
- if (value == NULL)
- return(-1);
-
- /*
- * First quick algorithm for ASCII range
- */
- if (space)
- while (IS_BLANK_CH(*cur)) cur++;
- if (((*cur >= 'a') && (*cur <= 'z')) || ((*cur >= 'A') && (*cur <= 'Z')) ||
- (*cur == '_'))
- cur++;
- else
- goto try_complex;
- while (((*cur >= 'a') && (*cur <= 'z')) ||
- ((*cur >= 'A') && (*cur <= 'Z')) ||
- ((*cur >= '0') && (*cur <= '9')) ||
- (*cur == '_') || (*cur == '-') || (*cur == '.'))
- cur++;
- if (space)
- while (IS_BLANK_CH(*cur)) cur++;
- if (*cur == 0)
- return(0);
-
-try_complex:
- /*
- * Second check for chars outside the ASCII range
- */
- cur = value;
- c = CUR_SCHAR(cur, l);
- if (space) {
- while (IS_BLANK(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if ((!IS_LETTER(c)) && (c != '_'))
- return(1);
- cur += l;
- c = CUR_SCHAR(cur, l);
- while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') ||
- (c == '-') || (c == '_') || IS_COMBINING(c) ||
- IS_EXTENDER(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- if (space) {
- while (IS_BLANK(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if (c != 0)
- return(1);
-
- return(0);
-}
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-/**
- * xmlValidateQName:
- * @value: the value to check
- * @space: allow spaces in front and end of the string
- *
- * Check that a value conforms to the lexical space of QName
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlValidateQName(const xmlChar *value, int space) {
- const xmlChar *cur = value;
- int c,l;
-
- if (value == NULL)
- return(-1);
- /*
- * First quick algorithm for ASCII range
- */
- if (space)
- while (IS_BLANK_CH(*cur)) cur++;
- if (((*cur >= 'a') && (*cur <= 'z')) || ((*cur >= 'A') && (*cur <= 'Z')) ||
- (*cur == '_'))
- cur++;
- else
- goto try_complex;
- while (((*cur >= 'a') && (*cur <= 'z')) ||
- ((*cur >= 'A') && (*cur <= 'Z')) ||
- ((*cur >= '0') && (*cur <= '9')) ||
- (*cur == '_') || (*cur == '-') || (*cur == '.'))
- cur++;
- if (*cur == ':') {
- cur++;
- if (((*cur >= 'a') && (*cur <= 'z')) ||
- ((*cur >= 'A') && (*cur <= 'Z')) ||
- (*cur == '_'))
- cur++;
- else
- goto try_complex;
- while (((*cur >= 'a') && (*cur <= 'z')) ||
- ((*cur >= 'A') && (*cur <= 'Z')) ||
- ((*cur >= '0') && (*cur <= '9')) ||
- (*cur == '_') || (*cur == '-') || (*cur == '.'))
- cur++;
- }
- if (space)
- while (IS_BLANK_CH(*cur)) cur++;
- if (*cur == 0)
- return(0);
-
-try_complex:
- /*
- * Second check for chars outside the ASCII range
- */
- cur = value;
- c = CUR_SCHAR(cur, l);
- if (space) {
- while (IS_BLANK(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if ((!IS_LETTER(c)) && (c != '_'))
- return(1);
- cur += l;
- c = CUR_SCHAR(cur, l);
- while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') ||
- (c == '-') || (c == '_') || IS_COMBINING(c) ||
- IS_EXTENDER(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- if (c == ':') {
- cur += l;
- c = CUR_SCHAR(cur, l);
- if ((!IS_LETTER(c)) && (c != '_'))
- return(1);
- cur += l;
- c = CUR_SCHAR(cur, l);
- while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') ||
- (c == '-') || (c == '_') || IS_COMBINING(c) ||
- IS_EXTENDER(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if (space) {
- while (IS_BLANK(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if (c != 0)
- return(1);
- return(0);
-}
-
-/**
- * xmlValidateName:
- * @value: the value to check
- * @space: allow spaces in front and end of the string
- *
- * Check that a value conforms to the lexical space of Name
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlValidateName(const xmlChar *value, int space) {
- const xmlChar *cur = value;
- int c,l;
-
- if (value == NULL)
- return(-1);
- /*
- * First quick algorithm for ASCII range
- */
- if (space)
- while (IS_BLANK_CH(*cur)) cur++;
- if (((*cur >= 'a') && (*cur <= 'z')) || ((*cur >= 'A') && (*cur <= 'Z')) ||
- (*cur == '_') || (*cur == ':'))
- cur++;
- else
- goto try_complex;
- while (((*cur >= 'a') && (*cur <= 'z')) ||
- ((*cur >= 'A') && (*cur <= 'Z')) ||
- ((*cur >= '0') && (*cur <= '9')) ||
- (*cur == '_') || (*cur == '-') || (*cur == '.') || (*cur == ':'))
- cur++;
- if (space)
- while (IS_BLANK_CH(*cur)) cur++;
- if (*cur == 0)
- return(0);
-
-try_complex:
- /*
- * Second check for chars outside the ASCII range
- */
- cur = value;
- c = CUR_SCHAR(cur, l);
- if (space) {
- while (IS_BLANK(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if ((!IS_LETTER(c)) && (c != '_') && (c != ':'))
- return(1);
- cur += l;
- c = CUR_SCHAR(cur, l);
- while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') || (c == ':') ||
- (c == '-') || (c == '_') || IS_COMBINING(c) || IS_EXTENDER(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- if (space) {
- while (IS_BLANK(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if (c != 0)
- return(1);
- return(0);
-}
-
-/**
- * xmlValidateNMToken:
- * @value: the value to check
- * @space: allow spaces in front and end of the string
- *
- * Check that a value conforms to the lexical space of NMToken
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlValidateNMToken(const xmlChar *value, int space) {
- const xmlChar *cur = value;
- int c,l;
-
- if (value == NULL)
- return(-1);
- /*
- * First quick algorithm for ASCII range
- */
- if (space)
- while (IS_BLANK_CH(*cur)) cur++;
- if (((*cur >= 'a') && (*cur <= 'z')) ||
- ((*cur >= 'A') && (*cur <= 'Z')) ||
- ((*cur >= '0') && (*cur <= '9')) ||
- (*cur == '_') || (*cur == '-') || (*cur == '.') || (*cur == ':'))
- cur++;
- else
- goto try_complex;
- while (((*cur >= 'a') && (*cur <= 'z')) ||
- ((*cur >= 'A') && (*cur <= 'Z')) ||
- ((*cur >= '0') && (*cur <= '9')) ||
- (*cur == '_') || (*cur == '-') || (*cur == '.') || (*cur == ':'))
- cur++;
- if (space)
- while (IS_BLANK_CH(*cur)) cur++;
- if (*cur == 0)
- return(0);
-
-try_complex:
- /*
- * Second check for chars outside the ASCII range
- */
- cur = value;
- c = CUR_SCHAR(cur, l);
- if (space) {
- while (IS_BLANK(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if (!(IS_LETTER(c) || IS_DIGIT(c) || (c == '.') || (c == ':') ||
- (c == '-') || (c == '_') || IS_COMBINING(c) || IS_EXTENDER(c)))
- return(1);
- cur += l;
- c = CUR_SCHAR(cur, l);
- while (IS_LETTER(c) || IS_DIGIT(c) || (c == '.') || (c == ':') ||
- (c == '-') || (c == '_') || IS_COMBINING(c) || IS_EXTENDER(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- if (space) {
- while (IS_BLANK(c)) {
- cur += l;
- c = CUR_SCHAR(cur, l);
- }
- }
- if (c != 0)
- return(1);
- return(0);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/************************************************************************
- * *
- * Allocation and deallocation of basic structures *
- * *
- ************************************************************************/
-
-/**
- * xmlSetBufferAllocationScheme:
- * @scheme: allocation method to use
- *
- * Set the buffer allocation method. Types are
- * XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down
- * XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed,
- * improves performance
- */
-void
-xmlSetBufferAllocationScheme(xmlBufferAllocationScheme scheme) {
- if ((scheme == XML_BUFFER_ALLOC_EXACT) ||
- (scheme == XML_BUFFER_ALLOC_DOUBLEIT) ||
- (scheme == XML_BUFFER_ALLOC_HYBRID))
- xmlBufferAllocScheme = scheme;
-}
-
-/**
- * xmlGetBufferAllocationScheme:
- *
- * Types are
- * XML_BUFFER_ALLOC_EXACT - use exact sizes, keeps memory usage down
- * XML_BUFFER_ALLOC_DOUBLEIT - double buffer when extra needed,
- * improves performance
- * XML_BUFFER_ALLOC_HYBRID - use exact sizes on small strings to keep memory usage tight
- * in normal usage, and doubleit on large strings to avoid
- * pathological performance.
- *
- * Returns the current allocation scheme
- */
-xmlBufferAllocationScheme
-xmlGetBufferAllocationScheme(void) {
- return(xmlBufferAllocScheme);
-}
-
-/**
- * xmlNewNs:
- * @node: the element carrying the namespace
- * @href: the URI associated
- * @prefix: the prefix for the namespace
- *
- * Creation of a new Namespace. This function will refuse to create
- * a namespace with a similar prefix than an existing one present on this
- * node.
- * Note that for a default namespace, @prefix should be NULL.
- *
- * We use href==NULL in the case of an element creation where the namespace
- * was not defined.
- *
- * Returns a new namespace pointer or NULL
- */
-xmlNsPtr
-xmlNewNs(xmlNodePtr node, const xmlChar *href, const xmlChar *prefix) {
- xmlNsPtr cur;
-
- if ((node != NULL) && (node->type != XML_ELEMENT_NODE))
- return(NULL);
-
- if ((prefix != NULL) && (xmlStrEqual(prefix, BAD_CAST "xml"))) {
- /* xml namespace is predefined, no need to add it */
- if (xmlStrEqual(href, XML_XML_NAMESPACE))
- return(NULL);
-
- /*
- * Problem, this is an attempt to bind xml prefix to a wrong
- * namespace, which breaks
- * Namespace constraint: Reserved Prefixes and Namespace Names
- * from XML namespace. But documents authors may not care in
- * their context so let's proceed.
- */
- }
-
- /*
- * Allocate a new Namespace and fill the fields.
- */
- cur = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
- if (cur == NULL) {
- xmlTreeErrMemory("building namespace");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNs));
- cur->type = XML_LOCAL_NAMESPACE;
-
- if (href != NULL)
- cur->href = xmlStrdup(href);
- if (prefix != NULL)
- cur->prefix = xmlStrdup(prefix);
-
- /*
- * Add it at the end to preserve parsing order ...
- * and checks for existing use of the prefix
- */
- if (node != NULL) {
- if (node->nsDef == NULL) {
- node->nsDef = cur;
- } else {
- xmlNsPtr prev = node->nsDef;
-
- if (((prev->prefix == NULL) && (cur->prefix == NULL)) ||
- (xmlStrEqual(prev->prefix, cur->prefix))) {
- xmlFreeNs(cur);
- return(NULL);
- }
- while (prev->next != NULL) {
- prev = prev->next;
- if (((prev->prefix == NULL) && (cur->prefix == NULL)) ||
- (xmlStrEqual(prev->prefix, cur->prefix))) {
- xmlFreeNs(cur);
- return(NULL);
- }
- }
- prev->next = cur;
- }
- }
- return(cur);
-}
-
-/**
- * xmlSetNs:
- * @node: a node in the document
- * @ns: a namespace pointer
- *
- * Associate a namespace to a node, a posteriori.
- */
-void
-xmlSetNs(xmlNodePtr node, xmlNsPtr ns) {
- if (node == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlSetNs: node == NULL\n");
-#endif
- return;
- }
- if ((node->type == XML_ELEMENT_NODE) ||
- (node->type == XML_ATTRIBUTE_NODE))
- node->ns = ns;
-}
-
-/**
- * xmlFreeNs:
- * @cur: the namespace pointer
- *
- * Free up the structures associated to a namespace
- */
-void
-xmlFreeNs(xmlNsPtr cur) {
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlFreeNs : ns == NULL\n");
-#endif
- return;
- }
- if (cur->href != NULL) xmlFree((char *) cur->href);
- if (cur->prefix != NULL) xmlFree((char *) cur->prefix);
- xmlFree(cur);
-}
-
-/**
- * xmlFreeNsList:
- * @cur: the first namespace pointer
- *
- * Free up all the structures associated to the chained namespaces.
- */
-void
-xmlFreeNsList(xmlNsPtr cur) {
- xmlNsPtr next;
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlFreeNsList : ns == NULL\n");
-#endif
- return;
- }
- while (cur != NULL) {
- next = cur->next;
- xmlFreeNs(cur);
- cur = next;
- }
-}
-
-/**
- * xmlNewDtd:
- * @doc: the document pointer
- * @name: the DTD name
- * @ExternalID: the external ID
- * @SystemID: the system ID
- *
- * Creation of a new DTD for the external subset. To create an
- * internal subset, use xmlCreateIntSubset().
- *
- * Returns a pointer to the new DTD structure
- */
-xmlDtdPtr
-xmlNewDtd(xmlDocPtr doc, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID) {
- xmlDtdPtr cur;
-
- if ((doc != NULL) && (doc->extSubset != NULL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewDtd(%s): document %s already have a DTD %s\n",
- /* !!! */ (char *) name, doc->name,
- /* !!! */ (char *)doc->extSubset->name);
-#endif
- return(NULL);
- }
-
- /*
- * Allocate a new DTD and fill the fields.
- */
- cur = (xmlDtdPtr) xmlMalloc(sizeof(xmlDtd));
- if (cur == NULL) {
- xmlTreeErrMemory("building DTD");
- return(NULL);
- }
- memset(cur, 0 , sizeof(xmlDtd));
- cur->type = XML_DTD_NODE;
-
- if (name != NULL)
- cur->name = xmlStrdup(name);
- if (ExternalID != NULL)
- cur->ExternalID = xmlStrdup(ExternalID);
- if (SystemID != NULL)
- cur->SystemID = xmlStrdup(SystemID);
- if (doc != NULL)
- doc->extSubset = cur;
- cur->doc = doc;
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
- return(cur);
-}
-
-/**
- * xmlGetIntSubset:
- * @doc: the document pointer
- *
- * Get the internal subset of a document
- * Returns a pointer to the DTD structure or NULL if not found
- */
-
-xmlDtdPtr
-xmlGetIntSubset(const xmlDoc *doc) {
- xmlNodePtr cur;
-
- if (doc == NULL)
- return(NULL);
- cur = doc->children;
- while (cur != NULL) {
- if (cur->type == XML_DTD_NODE)
- return((xmlDtdPtr) cur);
- cur = cur->next;
- }
- return((xmlDtdPtr) doc->intSubset);
-}
-
-/**
- * xmlCreateIntSubset:
- * @doc: the document pointer
- * @name: the DTD name
- * @ExternalID: the external (PUBLIC) ID
- * @SystemID: the system ID
- *
- * Create the internal subset of a document
- * Returns a pointer to the new DTD structure
- */
-xmlDtdPtr
-xmlCreateIntSubset(xmlDocPtr doc, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID) {
- xmlDtdPtr cur;
-
- if ((doc != NULL) && (xmlGetIntSubset(doc) != NULL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
-
- "xmlCreateIntSubset(): document %s already have an internal subset\n",
- doc->name);
-#endif
- return(NULL);
- }
-
- /*
- * Allocate a new DTD and fill the fields.
- */
- cur = (xmlDtdPtr) xmlMalloc(sizeof(xmlDtd));
- if (cur == NULL) {
- xmlTreeErrMemory("building internal subset");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlDtd));
- cur->type = XML_DTD_NODE;
-
- if (name != NULL) {
- cur->name = xmlStrdup(name);
- if (cur->name == NULL) {
- xmlTreeErrMemory("building internal subset");
- xmlFree(cur);
- return(NULL);
- }
- }
- if (ExternalID != NULL) {
- cur->ExternalID = xmlStrdup(ExternalID);
- if (cur->ExternalID == NULL) {
- xmlTreeErrMemory("building internal subset");
- if (cur->name != NULL)
- xmlFree((char *)cur->name);
- xmlFree(cur);
- return(NULL);
- }
- }
- if (SystemID != NULL) {
- cur->SystemID = xmlStrdup(SystemID);
- if (cur->SystemID == NULL) {
- xmlTreeErrMemory("building internal subset");
- if (cur->name != NULL)
- xmlFree((char *)cur->name);
- if (cur->ExternalID != NULL)
- xmlFree((char *)cur->ExternalID);
- xmlFree(cur);
- return(NULL);
- }
- }
- if (doc != NULL) {
- doc->intSubset = cur;
- cur->parent = doc;
- cur->doc = doc;
- if (doc->children == NULL) {
- doc->children = (xmlNodePtr) cur;
- doc->last = (xmlNodePtr) cur;
- } else {
- if (doc->type == XML_HTML_DOCUMENT_NODE) {
- xmlNodePtr prev;
-
- prev = doc->children;
- prev->prev = (xmlNodePtr) cur;
- cur->next = prev;
- doc->children = (xmlNodePtr) cur;
- } else {
- xmlNodePtr next;
-
- next = doc->children;
- while ((next != NULL) && (next->type != XML_ELEMENT_NODE))
- next = next->next;
- if (next == NULL) {
- cur->prev = doc->last;
- cur->prev->next = (xmlNodePtr) cur;
- cur->next = NULL;
- doc->last = (xmlNodePtr) cur;
- } else {
- cur->next = next;
- cur->prev = next->prev;
- if (cur->prev == NULL)
- doc->children = (xmlNodePtr) cur;
- else
- cur->prev->next = (xmlNodePtr) cur;
- next->prev = (xmlNodePtr) cur;
- }
- }
- }
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
- return(cur);
-}
-
-/**
- * DICT_FREE:
- * @str: a string
- *
- * Free a string if it is not owned by the "dict" dictionary in the
- * current scope
- */
-#define DICT_FREE(str) \
- if ((str) && ((!dict) || \
- (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
- xmlFree((char *)(str));
-
-
-/**
- * DICT_COPY:
- * @str: a string
- *
- * Copy a string using a "dict" dictionary in the current scope,
- * if availabe.
- */
-#define DICT_COPY(str, cpy) \
- if (str) { \
- if (dict) { \
- if (xmlDictOwns(dict, (const xmlChar *)(str))) \
- cpy = (xmlChar *) (str); \
- else \
- cpy = (xmlChar *) xmlDictLookup((dict), (const xmlChar *)(str), -1); \
- } else \
- cpy = xmlStrdup((const xmlChar *)(str)); }
-
-/**
- * DICT_CONST_COPY:
- * @str: a string
- *
- * Copy a string using a "dict" dictionary in the current scope,
- * if availabe.
- */
-#define DICT_CONST_COPY(str, cpy) \
- if (str) { \
- if (dict) { \
- if (xmlDictOwns(dict, (const xmlChar *)(str))) \
- cpy = (const xmlChar *) (str); \
- else \
- cpy = xmlDictLookup((dict), (const xmlChar *)(str), -1); \
- } else \
- cpy = (const xmlChar *) xmlStrdup((const xmlChar *)(str)); }
-
-
-/**
- * xmlFreeDtd:
- * @cur: the DTD structure to free up
- *
- * Free a DTD structure.
- */
-void
-xmlFreeDtd(xmlDtdPtr cur) {
- xmlDictPtr dict = NULL;
-
- if (cur == NULL) {
- return;
- }
- if (cur->doc != NULL) dict = cur->doc->dict;
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
-
- if (cur->children != NULL) {
- xmlNodePtr next, c = cur->children;
-
- /*
- * Cleanup all nodes which are not part of the specific lists
- * of notations, elements, attributes and entities.
- */
- while (c != NULL) {
- next = c->next;
- if ((c->type != XML_NOTATION_NODE) &&
- (c->type != XML_ELEMENT_DECL) &&
- (c->type != XML_ATTRIBUTE_DECL) &&
- (c->type != XML_ENTITY_DECL)) {
- xmlUnlinkNode(c);
- xmlFreeNode(c);
- }
- c = next;
- }
- }
- DICT_FREE(cur->name)
- DICT_FREE(cur->SystemID)
- DICT_FREE(cur->ExternalID)
- /* TODO !!! */
- if (cur->notations != NULL)
- xmlFreeNotationTable((xmlNotationTablePtr) cur->notations);
-
- if (cur->elements != NULL)
- xmlFreeElementTable((xmlElementTablePtr) cur->elements);
- if (cur->attributes != NULL)
- xmlFreeAttributeTable((xmlAttributeTablePtr) cur->attributes);
- if (cur->entities != NULL)
- xmlFreeEntitiesTable((xmlEntitiesTablePtr) cur->entities);
- if (cur->pentities != NULL)
- xmlFreeEntitiesTable((xmlEntitiesTablePtr) cur->pentities);
-
- xmlFree(cur);
-}
-
-/**
- * xmlNewDoc:
- * @version: xmlChar string giving the version of XML "1.0"
- *
- * Creates a new XML document
- *
- * Returns a new document
- */
-xmlDocPtr
-xmlNewDoc(const xmlChar *version) {
- xmlDocPtr cur;
-
- if (version == NULL)
- version = (const xmlChar *) "1.0";
-
- /*
- * Allocate a new document and fill the fields.
- */
- cur = (xmlDocPtr) xmlMalloc(sizeof(xmlDoc));
- if (cur == NULL) {
- xmlTreeErrMemory("building doc");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlDoc));
- cur->type = XML_DOCUMENT_NODE;
-
- cur->version = xmlStrdup(version);
- if (cur->version == NULL) {
- xmlTreeErrMemory("building doc");
- xmlFree(cur);
- return(NULL);
- }
- cur->standalone = -1;
- cur->compression = -1; /* not initialized */
- cur->doc = cur;
- cur->parseFlags = 0;
- cur->properties = XML_DOC_USERBUILT;
- /*
- * The in memory encoding is always UTF8
- * This field will never change and would
- * be obsolete if not for binary compatibility.
- */
- cur->charset = XML_CHAR_ENCODING_UTF8;
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
- return(cur);
-}
-
-/**
- * xmlFreeDoc:
- * @cur: pointer to the document
- *
- * Free up all the structures used by a document, tree included.
- */
-void
-xmlFreeDoc(xmlDocPtr cur) {
- xmlDtdPtr extSubset, intSubset;
- xmlDictPtr dict = NULL;
-
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlFreeDoc : document == NULL\n");
-#endif
- return;
- }
-#ifdef LIBXML_DEBUG_RUNTIME
-#ifdef LIBXML_DEBUG_ENABLED
- xmlDebugCheckDocument(stderr, cur);
-#endif
-#endif
-
- if (cur != NULL) dict = cur->dict;
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
-
- /*
- * Do this before freeing the children list to avoid ID lookups
- */
- if (cur->ids != NULL) xmlFreeIDTable((xmlIDTablePtr) cur->ids);
- cur->ids = NULL;
- if (cur->refs != NULL) xmlFreeRefTable((xmlRefTablePtr) cur->refs);
- cur->refs = NULL;
- extSubset = cur->extSubset;
- intSubset = cur->intSubset;
- if (intSubset == extSubset)
- extSubset = NULL;
- if (extSubset != NULL) {
- xmlUnlinkNode((xmlNodePtr) cur->extSubset);
- cur->extSubset = NULL;
- xmlFreeDtd(extSubset);
- }
- if (intSubset != NULL) {
- xmlUnlinkNode((xmlNodePtr) cur->intSubset);
- cur->intSubset = NULL;
- xmlFreeDtd(intSubset);
- }
-
- if (cur->children != NULL) xmlFreeNodeList(cur->children);
- if (cur->oldNs != NULL) xmlFreeNsList(cur->oldNs);
-
- DICT_FREE(cur->version)
- DICT_FREE(cur->name)
- DICT_FREE(cur->encoding)
- DICT_FREE(cur->URL)
- xmlFree(cur);
- if (dict) xmlDictFree(dict);
-}
-
-/**
- * xmlStringLenGetNodeList:
- * @doc: the document
- * @value: the value of the text
- * @len: the length of the string value
- *
- * Parse the value string and build the node list associated. Should
- * produce a flat tree with only TEXTs and ENTITY_REFs.
- * Returns a pointer to the first child
- */
-xmlNodePtr
-xmlStringLenGetNodeList(const xmlDoc *doc, const xmlChar *value, int len) {
- xmlNodePtr ret = NULL, last = NULL;
- xmlNodePtr node;
- xmlChar *val;
- const xmlChar *cur = value, *end = cur + len;
- const xmlChar *q;
- xmlEntityPtr ent;
- xmlBufPtr buf;
-
- if (value == NULL) return(NULL);
-
- buf = xmlBufCreateSize(0);
- if (buf == NULL) return(NULL);
- xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_HYBRID);
-
- q = cur;
- while ((cur < end) && (*cur != 0)) {
- if (cur[0] == '&') {
- int charval = 0;
- xmlChar tmp;
-
- /*
- * Save the current text.
- */
- if (cur != q) {
- if (xmlBufAdd(buf, q, cur - q))
- goto out;
- }
- q = cur;
- if ((cur + 2 < end) && (cur[1] == '#') && (cur[2] == 'x')) {
- cur += 3;
- if (cur < end)
- tmp = *cur;
- else
- tmp = 0;
- while (tmp != ';') { /* Non input consuming loop */
- if ((tmp >= '0') && (tmp <= '9'))
- charval = charval * 16 + (tmp - '0');
- else if ((tmp >= 'a') && (tmp <= 'f'))
- charval = charval * 16 + (tmp - 'a') + 10;
- else if ((tmp >= 'A') && (tmp <= 'F'))
- charval = charval * 16 + (tmp - 'A') + 10;
- else {
- xmlTreeErr(XML_TREE_INVALID_HEX, (xmlNodePtr) doc,
- NULL);
- charval = 0;
- break;
- }
- cur++;
- if (cur < end)
- tmp = *cur;
- else
- tmp = 0;
- }
- if (tmp == ';')
- cur++;
- q = cur;
- } else if ((cur + 1 < end) && (cur[1] == '#')) {
- cur += 2;
- if (cur < end)
- tmp = *cur;
- else
- tmp = 0;
- while (tmp != ';') { /* Non input consuming loops */
- if ((tmp >= '0') && (tmp <= '9'))
- charval = charval * 10 + (tmp - '0');
- else {
- xmlTreeErr(XML_TREE_INVALID_DEC, (xmlNodePtr) doc,
- NULL);
- charval = 0;
- break;
- }
- cur++;
- if (cur < end)
- tmp = *cur;
- else
- tmp = 0;
- }
- if (tmp == ';')
- cur++;
- q = cur;
- } else {
- /*
- * Read the entity string
- */
- cur++;
- q = cur;
- while ((cur < end) && (*cur != 0) && (*cur != ';')) cur++;
- if ((cur >= end) || (*cur == 0)) {
- xmlTreeErr(XML_TREE_UNTERMINATED_ENTITY, (xmlNodePtr) doc,
- (const char *) q);
- goto out;
- }
- if (cur != q) {
- /*
- * Predefined entities don't generate nodes
- */
- val = xmlStrndup(q, cur - q);
- ent = xmlGetDocEntity(doc, val);
- if ((ent != NULL) &&
- (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
-
- if (xmlBufCat(buf, ent->content))
- goto out;
-
- } else {
- /*
- * Flush buffer so far
- */
- if (!xmlBufIsEmpty(buf)) {
- node = xmlNewDocText(doc, NULL);
- if (node == NULL) {
- if (val != NULL) xmlFree(val);
- goto out;
- }
- node->content = xmlBufDetach(buf);
-
- if (last == NULL) {
- last = ret = node;
- } else {
- last = xmlAddNextSibling(last, node);
- }
- }
-
- /*
- * Create a new REFERENCE_REF node
- */
- node = xmlNewReference(doc, val);
- if (node == NULL) {
- if (val != NULL) xmlFree(val);
- goto out;
- }
- else if ((ent != NULL) && (ent->children == NULL)) {
- xmlNodePtr temp;
-
- ent->children = xmlStringGetNodeList(doc,
- (const xmlChar*)node->content);
- ent->owner = 1;
- temp = ent->children;
- while (temp) {
- temp->parent = (xmlNodePtr)ent;
- ent->last = temp;
- temp = temp->next;
- }
- }
- if (last == NULL) {
- last = ret = node;
- } else {
- last = xmlAddNextSibling(last, node);
- }
- }
- xmlFree(val);
- }
- cur++;
- q = cur;
- }
- if (charval != 0) {
- xmlChar buffer[10];
- int l;
-
- l = xmlCopyCharMultiByte(buffer, charval);
- buffer[l] = 0;
-
- if (xmlBufCat(buf, buffer))
- goto out;
- charval = 0;
- }
- } else
- cur++;
- }
-
- if (cur != q) {
- /*
- * Handle the last piece of text.
- */
- if (xmlBufAdd(buf, q, cur - q))
- goto out;
- }
-
- if (!xmlBufIsEmpty(buf)) {
- node = xmlNewDocText(doc, NULL);
- if (node == NULL) goto out;
- node->content = xmlBufDetach(buf);
-
- if (last == NULL) {
- ret = node;
- } else {
- xmlAddNextSibling(last, node);
- }
- } else if (ret == NULL) {
- ret = xmlNewDocText(doc, BAD_CAST "");
- }
-
-out:
- xmlBufFree(buf);
- return(ret);
-}
-
-/**
- * xmlStringGetNodeList:
- * @doc: the document
- * @value: the value of the attribute
- *
- * Parse the value string and build the node list associated. Should
- * produce a flat tree with only TEXTs and ENTITY_REFs.
- * Returns a pointer to the first child
- */
-xmlNodePtr
-xmlStringGetNodeList(const xmlDoc *doc, const xmlChar *value) {
- xmlNodePtr ret = NULL, last = NULL;
- xmlNodePtr node;
- xmlChar *val;
- const xmlChar *cur = value;
- const xmlChar *q;
- xmlEntityPtr ent;
- xmlBufPtr buf;
-
- if (value == NULL) return(NULL);
-
- buf = xmlBufCreateSize(0);
- if (buf == NULL) return(NULL);
- xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_HYBRID);
-
- q = cur;
- while (*cur != 0) {
- if (cur[0] == '&') {
- int charval = 0;
- xmlChar tmp;
-
- /*
- * Save the current text.
- */
- if (cur != q) {
- if (xmlBufAdd(buf, q, cur - q))
- goto out;
- }
- q = cur;
- if ((cur[1] == '#') && (cur[2] == 'x')) {
- cur += 3;
- tmp = *cur;
- while (tmp != ';') { /* Non input consuming loop */
- if ((tmp >= '0') && (tmp <= '9'))
- charval = charval * 16 + (tmp - '0');
- else if ((tmp >= 'a') && (tmp <= 'f'))
- charval = charval * 16 + (tmp - 'a') + 10;
- else if ((tmp >= 'A') && (tmp <= 'F'))
- charval = charval * 16 + (tmp - 'A') + 10;
- else {
- xmlTreeErr(XML_TREE_INVALID_HEX, (xmlNodePtr) doc,
- NULL);
- charval = 0;
- break;
- }
- cur++;
- tmp = *cur;
- }
- if (tmp == ';')
- cur++;
- q = cur;
- } else if (cur[1] == '#') {
- cur += 2;
- tmp = *cur;
- while (tmp != ';') { /* Non input consuming loops */
- if ((tmp >= '0') && (tmp <= '9'))
- charval = charval * 10 + (tmp - '0');
- else {
- xmlTreeErr(XML_TREE_INVALID_DEC, (xmlNodePtr) doc,
- NULL);
- charval = 0;
- break;
- }
- cur++;
- tmp = *cur;
- }
- if (tmp == ';')
- cur++;
- q = cur;
- } else {
- /*
- * Read the entity string
- */
- cur++;
- q = cur;
- while ((*cur != 0) && (*cur != ';')) cur++;
- if (*cur == 0) {
- xmlTreeErr(XML_TREE_UNTERMINATED_ENTITY,
- (xmlNodePtr) doc, (const char *) q);
- goto out;
- }
- if (cur != q) {
- /*
- * Predefined entities don't generate nodes
- */
- val = xmlStrndup(q, cur - q);
- ent = xmlGetDocEntity(doc, val);
- if ((ent != NULL) &&
- (ent->etype == XML_INTERNAL_PREDEFINED_ENTITY)) {
-
- if (xmlBufCat(buf, ent->content))
- goto out;
-
- } else {
- /*
- * Flush buffer so far
- */
- if (!xmlBufIsEmpty(buf)) {
- node = xmlNewDocText(doc, NULL);
- node->content = xmlBufDetach(buf);
-
- if (last == NULL) {
- last = ret = node;
- } else {
- last = xmlAddNextSibling(last, node);
- }
- }
-
- /*
- * Create a new REFERENCE_REF node
- */
- node = xmlNewReference(doc, val);
- if (node == NULL) {
- if (val != NULL) xmlFree(val);
- goto out;
- }
- else if ((ent != NULL) && (ent->children == NULL)) {
- xmlNodePtr temp;
-
- ent->children = (xmlNodePtr) -1;
- ent->children = xmlStringGetNodeList(doc,
- (const xmlChar*)node->content);
- ent->owner = 1;
- temp = ent->children;
- while (temp) {
- temp->parent = (xmlNodePtr)ent;
- temp = temp->next;
- }
- }
- if (last == NULL) {
- last = ret = node;
- } else {
- last = xmlAddNextSibling(last, node);
- }
- }
- xmlFree(val);
- }
- cur++;
- q = cur;
- }
- if (charval != 0) {
- xmlChar buffer[10];
- int len;
-
- len = xmlCopyCharMultiByte(buffer, charval);
- buffer[len] = 0;
-
- if (xmlBufCat(buf, buffer))
- goto out;
- charval = 0;
- }
- } else
- cur++;
- }
- if ((cur != q) || (ret == NULL)) {
- /*
- * Handle the last piece of text.
- */
- xmlBufAdd(buf, q, cur - q);
- }
-
- if (!xmlBufIsEmpty(buf)) {
- node = xmlNewDocText(doc, NULL);
- node->content = xmlBufDetach(buf);
-
- if (last == NULL) {
- ret = node;
- } else {
- xmlAddNextSibling(last, node);
- }
- }
-
-out:
- xmlBufFree(buf);
- return(ret);
-}
-
-/**
- * xmlNodeListGetString:
- * @doc: the document
- * @list: a Node list
- * @inLine: should we replace entity contents or show their external form
- *
- * Build the string equivalent to the text contained in the Node list
- * made of TEXTs and ENTITY_REFs
- *
- * Returns a pointer to the string copy, the caller must free it with xmlFree().
- */
-xmlChar *
-xmlNodeListGetString(xmlDocPtr doc, const xmlNode *list, int inLine)
-{
- const xmlNode *node = list;
- xmlChar *ret = NULL;
- xmlEntityPtr ent;
- int attr;
-
- if (list == NULL)
- return (NULL);
- if ((list->parent != NULL) && (list->parent->type == XML_ATTRIBUTE_NODE))
- attr = 1;
- else
- attr = 0;
-
- while (node != NULL) {
- if ((node->type == XML_TEXT_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)) {
- if (inLine) {
- ret = xmlStrcat(ret, node->content);
- } else {
- xmlChar *buffer;
-
- if (attr)
- buffer = xmlEncodeAttributeEntities(doc, node->content);
- else
- buffer = xmlEncodeEntitiesReentrant(doc, node->content);
- if (buffer != NULL) {
- ret = xmlStrcat(ret, buffer);
- xmlFree(buffer);
- }
- }
- } else if (node->type == XML_ENTITY_REF_NODE) {
- if (inLine) {
- ent = xmlGetDocEntity(doc, node->name);
- if (ent != NULL) {
- xmlChar *buffer;
-
- /* an entity content can be any "well balanced chunk",
- * i.e. the result of the content [43] production:
- * http://www.w3.org/TR/REC-xml#NT-content.
- * So it can contain text, CDATA section or nested
- * entity reference nodes (among others).
- * -> we recursive call xmlNodeListGetString()
- * which handles these types */
- buffer = xmlNodeListGetString(doc, ent->children, 1);
- if (buffer != NULL) {
- ret = xmlStrcat(ret, buffer);
- xmlFree(buffer);
- }
- } else {
- ret = xmlStrcat(ret, node->content);
- }
- } else {
- xmlChar buf[2];
-
- buf[0] = '&';
- buf[1] = 0;
- ret = xmlStrncat(ret, buf, 1);
- ret = xmlStrcat(ret, node->name);
- buf[0] = ';';
- buf[1] = 0;
- ret = xmlStrncat(ret, buf, 1);
- }
- }
-#if 0
- else {
- xmlGenericError(xmlGenericErrorContext,
- "xmlGetNodeListString : invalid node type %d\n",
- node->type);
- }
-#endif
- node = node->next;
- }
- return (ret);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlNodeListGetRawString:
- * @doc: the document
- * @list: a Node list
- * @inLine: should we replace entity contents or show their external form
- *
- * Builds the string equivalent to the text contained in the Node list
- * made of TEXTs and ENTITY_REFs, contrary to xmlNodeListGetString()
- * this function doesn't do any character encoding handling.
- *
- * Returns a pointer to the string copy, the caller must free it with xmlFree().
- */
-xmlChar *
-xmlNodeListGetRawString(const xmlDoc *doc, const xmlNode *list, int inLine)
-{
- const xmlNode *node = list;
- xmlChar *ret = NULL;
- xmlEntityPtr ent;
-
- if (list == NULL)
- return (NULL);
-
- while (node != NULL) {
- if ((node->type == XML_TEXT_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)) {
- if (inLine) {
- ret = xmlStrcat(ret, node->content);
- } else {
- xmlChar *buffer;
-
- buffer = xmlEncodeSpecialChars(doc, node->content);
- if (buffer != NULL) {
- ret = xmlStrcat(ret, buffer);
- xmlFree(buffer);
- }
- }
- } else if (node->type == XML_ENTITY_REF_NODE) {
- if (inLine) {
- ent = xmlGetDocEntity(doc, node->name);
- if (ent != NULL) {
- xmlChar *buffer;
-
- /* an entity content can be any "well balanced chunk",
- * i.e. the result of the content [43] production:
- * http://www.w3.org/TR/REC-xml#NT-content.
- * So it can contain text, CDATA section or nested
- * entity reference nodes (among others).
- * -> we recursive call xmlNodeListGetRawString()
- * which handles these types */
- buffer =
- xmlNodeListGetRawString(doc, ent->children, 1);
- if (buffer != NULL) {
- ret = xmlStrcat(ret, buffer);
- xmlFree(buffer);
- }
- } else {
- ret = xmlStrcat(ret, node->content);
- }
- } else {
- xmlChar buf[2];
-
- buf[0] = '&';
- buf[1] = 0;
- ret = xmlStrncat(ret, buf, 1);
- ret = xmlStrcat(ret, node->name);
- buf[0] = ';';
- buf[1] = 0;
- ret = xmlStrncat(ret, buf, 1);
- }
- }
-#if 0
- else {
- xmlGenericError(xmlGenericErrorContext,
- "xmlGetNodeListString : invalid node type %d\n",
- node->type);
- }
-#endif
- node = node->next;
- }
- return (ret);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-static xmlAttrPtr
-xmlNewPropInternal(xmlNodePtr node, xmlNsPtr ns,
- const xmlChar * name, const xmlChar * value,
- int eatname)
-{
- xmlAttrPtr cur;
- xmlDocPtr doc = NULL;
-
- if ((node != NULL) && (node->type != XML_ELEMENT_NODE)) {
- if ((eatname == 1) &&
- ((node->doc == NULL) ||
- (!(xmlDictOwns(node->doc->dict, name)))))
- xmlFree((xmlChar *) name);
- return (NULL);
- }
-
- /*
- * Allocate a new property and fill the fields.
- */
- cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr));
- if (cur == NULL) {
- if ((eatname == 1) &&
- ((node == NULL) || (node->doc == NULL) ||
- (!(xmlDictOwns(node->doc->dict, name)))))
- xmlFree((xmlChar *) name);
- xmlTreeErrMemory("building attribute");
- return (NULL);
- }
- memset(cur, 0, sizeof(xmlAttr));
- cur->type = XML_ATTRIBUTE_NODE;
-
- cur->parent = node;
- if (node != NULL) {
- doc = node->doc;
- cur->doc = doc;
- }
- cur->ns = ns;
-
- if (eatname == 0) {
- if ((doc != NULL) && (doc->dict != NULL))
- cur->name = (xmlChar *) xmlDictLookup(doc->dict, name, -1);
- else
- cur->name = xmlStrdup(name);
- } else
- cur->name = name;
-
- if (value != NULL) {
- xmlNodePtr tmp;
-
- if(!xmlCheckUTF8(value)) {
- xmlTreeErr(XML_TREE_NOT_UTF8, (xmlNodePtr) doc,
- NULL);
- if (doc != NULL)
- doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
- }
- cur->children = xmlNewDocText(doc, value);
- cur->last = NULL;
- tmp = cur->children;
- while (tmp != NULL) {
- tmp->parent = (xmlNodePtr) cur;
- if (tmp->next == NULL)
- cur->last = tmp;
- tmp = tmp->next;
- }
- }
-
- /*
- * Add it at the end to preserve parsing order ...
- */
- if (node != NULL) {
- if (node->properties == NULL) {
- node->properties = cur;
- } else {
- xmlAttrPtr prev = node->properties;
-
- while (prev->next != NULL)
- prev = prev->next;
- prev->next = cur;
- cur->prev = prev;
- }
- }
-
- if ((value != NULL) && (node != NULL) &&
- (xmlIsID(node->doc, node, cur) == 1))
- xmlAddID(NULL, node->doc, value, cur);
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr) cur);
- return (cur);
-}
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
- defined(LIBXML_SCHEMAS_ENABLED)
-/**
- * xmlNewProp:
- * @node: the holding node
- * @name: the name of the attribute
- * @value: the value of the attribute
- *
- * Create a new property carried by a node.
- * Returns a pointer to the attribute
- */
-xmlAttrPtr
-xmlNewProp(xmlNodePtr node, const xmlChar *name, const xmlChar *value) {
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewProp : name == NULL\n");
-#endif
- return(NULL);
- }
-
- return xmlNewPropInternal(node, NULL, name, value, 0);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlNewNsProp:
- * @node: the holding node
- * @ns: the namespace
- * @name: the name of the attribute
- * @value: the value of the attribute
- *
- * Create a new property tagged with a namespace and carried by a node.
- * Returns a pointer to the attribute
- */
-xmlAttrPtr
-xmlNewNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name,
- const xmlChar *value) {
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewNsProp : name == NULL\n");
-#endif
- return(NULL);
- }
-
- return xmlNewPropInternal(node, ns, name, value, 0);
-}
-
-/**
- * xmlNewNsPropEatName:
- * @node: the holding node
- * @ns: the namespace
- * @name: the name of the attribute
- * @value: the value of the attribute
- *
- * Create a new property tagged with a namespace and carried by a node.
- * Returns a pointer to the attribute
- */
-xmlAttrPtr
-xmlNewNsPropEatName(xmlNodePtr node, xmlNsPtr ns, xmlChar *name,
- const xmlChar *value) {
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewNsPropEatName : name == NULL\n");
-#endif
- return(NULL);
- }
-
- return xmlNewPropInternal(node, ns, name, value, 1);
-}
-
-/**
- * xmlNewDocProp:
- * @doc: the document
- * @name: the name of the attribute
- * @value: the value of the attribute
- *
- * Create a new property carried by a document.
- * Returns a pointer to the attribute
- */
-xmlAttrPtr
-xmlNewDocProp(xmlDocPtr doc, const xmlChar *name, const xmlChar *value) {
- xmlAttrPtr cur;
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewDocProp : name == NULL\n");
-#endif
- return(NULL);
- }
-
- /*
- * Allocate a new property and fill the fields.
- */
- cur = (xmlAttrPtr) xmlMalloc(sizeof(xmlAttr));
- if (cur == NULL) {
- xmlTreeErrMemory("building attribute");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlAttr));
- cur->type = XML_ATTRIBUTE_NODE;
-
- if ((doc != NULL) && (doc->dict != NULL))
- cur->name = xmlDictLookup(doc->dict, name, -1);
- else
- cur->name = xmlStrdup(name);
- cur->doc = doc;
- if (value != NULL) {
- xmlNodePtr tmp;
-
- cur->children = xmlStringGetNodeList(doc, value);
- cur->last = NULL;
-
- tmp = cur->children;
- while (tmp != NULL) {
- tmp->parent = (xmlNodePtr) cur;
- if (tmp->next == NULL)
- cur->last = tmp;
- tmp = tmp->next;
- }
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
- return(cur);
-}
-
-/**
- * xmlFreePropList:
- * @cur: the first property in the list
- *
- * Free a property and all its siblings, all the children are freed too.
- */
-void
-xmlFreePropList(xmlAttrPtr cur) {
- xmlAttrPtr next;
- if (cur == NULL) return;
- while (cur != NULL) {
- next = cur->next;
- xmlFreeProp(cur);
- cur = next;
- }
-}
-
-/**
- * xmlFreeProp:
- * @cur: an attribute
- *
- * Free one attribute, all the content is freed too
- */
-void
-xmlFreeProp(xmlAttrPtr cur) {
- xmlDictPtr dict = NULL;
- if (cur == NULL) return;
-
- if (cur->doc != NULL) dict = cur->doc->dict;
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue((xmlNodePtr)cur);
-
- /* Check for ID removal -> leading to invalid references ! */
- if ((cur->doc != NULL) && (cur->atype == XML_ATTRIBUTE_ID)) {
- xmlRemoveID(cur->doc, cur);
- }
- if (cur->children != NULL) xmlFreeNodeList(cur->children);
- DICT_FREE(cur->name)
- xmlFree(cur);
-}
-
-/**
- * xmlRemoveProp:
- * @cur: an attribute
- *
- * Unlink and free one attribute, all the content is freed too
- * Note this doesn't work for namespace definition attributes
- *
- * Returns 0 if success and -1 in case of error.
- */
-int
-xmlRemoveProp(xmlAttrPtr cur) {
- xmlAttrPtr tmp;
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlRemoveProp : cur == NULL\n");
-#endif
- return(-1);
- }
- if (cur->parent == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlRemoveProp : cur->parent == NULL\n");
-#endif
- return(-1);
- }
- tmp = cur->parent->properties;
- if (tmp == cur) {
- cur->parent->properties = cur->next;
- if (cur->next != NULL)
- cur->next->prev = NULL;
- xmlFreeProp(cur);
- return(0);
- }
- while (tmp != NULL) {
- if (tmp->next == cur) {
- tmp->next = cur->next;
- if (tmp->next != NULL)
- tmp->next->prev = tmp;
- xmlFreeProp(cur);
- return(0);
- }
- tmp = tmp->next;
- }
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlRemoveProp : attribute not owned by its node\n");
-#endif
- return(-1);
-}
-
-/**
- * xmlNewDocPI:
- * @doc: the target document
- * @name: the processing instruction name
- * @content: the PI content
- *
- * Creation of a processing instruction element.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewDocPI(xmlDocPtr doc, const xmlChar *name, const xmlChar *content) {
- xmlNodePtr cur;
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewPI : name == NULL\n");
-#endif
- return(NULL);
- }
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building PI");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_PI_NODE;
-
- if ((doc != NULL) && (doc->dict != NULL))
- cur->name = xmlDictLookup(doc->dict, name, -1);
- else
- cur->name = xmlStrdup(name);
- if (content != NULL) {
- cur->content = xmlStrdup(content);
- }
- cur->doc = doc;
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
- return(cur);
-}
-
-/**
- * xmlNewPI:
- * @name: the processing instruction name
- * @content: the PI content
- *
- * Creation of a processing instruction element.
- * Use xmlDocNewPI preferably to get string interning
- *
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewPI(const xmlChar *name, const xmlChar *content) {
- return(xmlNewDocPI(NULL, name, content));
-}
-
-/**
- * xmlNewNode:
- * @ns: namespace if any
- * @name: the node name
- *
- * Creation of a new node element. @ns is optional (NULL).
- *
- * Returns a pointer to the new node object. Uses xmlStrdup() to make
- * copy of @name.
- */
-xmlNodePtr
-xmlNewNode(xmlNsPtr ns, const xmlChar *name) {
- xmlNodePtr cur;
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewNode : name == NULL\n");
-#endif
- return(NULL);
- }
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building node");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_ELEMENT_NODE;
-
- cur->name = xmlStrdup(name);
- cur->ns = ns;
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(cur);
- return(cur);
-}
-
-/**
- * xmlNewNodeEatName:
- * @ns: namespace if any
- * @name: the node name
- *
- * Creation of a new node element. @ns is optional (NULL).
- *
- * Returns a pointer to the new node object, with pointer @name as
- * new node's name. Use xmlNewNode() if a copy of @name string is
- * is needed as new node's name.
- */
-xmlNodePtr
-xmlNewNodeEatName(xmlNsPtr ns, xmlChar *name) {
- xmlNodePtr cur;
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewNode : name == NULL\n");
-#endif
- return(NULL);
- }
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building node");
- /* we can't check here that name comes from the doc dictionary */
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_ELEMENT_NODE;
-
- cur->name = name;
- cur->ns = ns;
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)cur);
- return(cur);
-}
-
-/**
- * xmlNewDocNode:
- * @doc: the document
- * @ns: namespace if any
- * @name: the node name
- * @content: the XML text content if any
- *
- * Creation of a new node element within a document. @ns and @content
- * are optional (NULL).
- * NOTE: @content is supposed to be a piece of XML CDATA, so it allow entities
- * references, but XML special chars need to be escaped first by using
- * xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you don't
- * need entities support.
- *
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns,
- const xmlChar *name, const xmlChar *content) {
- xmlNodePtr cur;
-
- if ((doc != NULL) && (doc->dict != NULL))
- cur = xmlNewNodeEatName(ns, (xmlChar *)
- xmlDictLookup(doc->dict, name, -1));
- else
- cur = xmlNewNode(ns, name);
- if (cur != NULL) {
- cur->doc = doc;
- if (content != NULL) {
- cur->children = xmlStringGetNodeList(doc, content);
- UPDATE_LAST_CHILD_AND_PARENT(cur)
- }
- }
-
- return(cur);
-}
-
-/**
- * xmlNewDocNodeEatName:
- * @doc: the document
- * @ns: namespace if any
- * @name: the node name
- * @content: the XML text content if any
- *
- * Creation of a new node element within a document. @ns and @content
- * are optional (NULL).
- * NOTE: @content is supposed to be a piece of XML CDATA, so it allow entities
- * references, but XML special chars need to be escaped first by using
- * xmlEncodeEntitiesReentrant(). Use xmlNewDocRawNode() if you don't
- * need entities support.
- *
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewDocNodeEatName(xmlDocPtr doc, xmlNsPtr ns,
- xmlChar *name, const xmlChar *content) {
- xmlNodePtr cur;
-
- cur = xmlNewNodeEatName(ns, name);
- if (cur != NULL) {
- cur->doc = doc;
- if (content != NULL) {
- cur->children = xmlStringGetNodeList(doc, content);
- UPDATE_LAST_CHILD_AND_PARENT(cur)
- }
- } else {
- /* if name don't come from the doc dictionary free it here */
- if ((name != NULL) && (doc != NULL) &&
- (!(xmlDictOwns(doc->dict, name))))
- xmlFree(name);
- }
- return(cur);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlNewDocRawNode:
- * @doc: the document
- * @ns: namespace if any
- * @name: the node name
- * @content: the text content if any
- *
- * Creation of a new node element within a document. @ns and @content
- * are optional (NULL).
- *
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewDocRawNode(xmlDocPtr doc, xmlNsPtr ns,
- const xmlChar *name, const xmlChar *content) {
- xmlNodePtr cur;
-
- cur = xmlNewDocNode(doc, ns, name, NULL);
- if (cur != NULL) {
- cur->doc = doc;
- if (content != NULL) {
- cur->children = xmlNewDocText(doc, content);
- UPDATE_LAST_CHILD_AND_PARENT(cur)
- }
- }
- return(cur);
-}
-
-/**
- * xmlNewDocFragment:
- * @doc: the document owning the fragment
- *
- * Creation of a new Fragment node.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewDocFragment(xmlDocPtr doc) {
- xmlNodePtr cur;
-
- /*
- * Allocate a new DocumentFragment node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building fragment");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_DOCUMENT_FRAG_NODE;
-
- cur->doc = doc;
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(cur);
- return(cur);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlNewText:
- * @content: the text content
- *
- * Creation of a new text node.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewText(const xmlChar *content) {
- xmlNodePtr cur;
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building text");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_TEXT_NODE;
-
- cur->name = xmlStringText;
- if (content != NULL) {
- cur->content = xmlStrdup(content);
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(cur);
- return(cur);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlNewTextChild:
- * @parent: the parent node
- * @ns: a namespace if any
- * @name: the name of the child
- * @content: the text content of the child if any.
- *
- * Creation of a new child element, added at the end of @parent children list.
- * @ns and @content parameters are optional (NULL). If @ns is NULL, the newly
- * created element inherits the namespace of @parent. If @content is non NULL,
- * a child TEXT node will be created containing the string @content.
- * NOTE: Use xmlNewChild() if @content will contain entities that need to be
- * preserved. Use this function, xmlNewTextChild(), if you need to ensure that
- * reserved XML chars that might appear in @content, such as the ampersand,
- * greater-than or less-than signs, are automatically replaced by their XML
- * escaped entity representations.
- *
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewTextChild(xmlNodePtr parent, xmlNsPtr ns,
- const xmlChar *name, const xmlChar *content) {
- xmlNodePtr cur, prev;
-
- if (parent == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewTextChild : parent == NULL\n");
-#endif
- return(NULL);
- }
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewTextChild : name == NULL\n");
-#endif
- return(NULL);
- }
-
- /*
- * Allocate a new node
- */
- if (parent->type == XML_ELEMENT_NODE) {
- if (ns == NULL)
- cur = xmlNewDocRawNode(parent->doc, parent->ns, name, content);
- else
- cur = xmlNewDocRawNode(parent->doc, ns, name, content);
- } else if ((parent->type == XML_DOCUMENT_NODE) ||
- (parent->type == XML_HTML_DOCUMENT_NODE)) {
- if (ns == NULL)
- cur = xmlNewDocRawNode((xmlDocPtr) parent, NULL, name, content);
- else
- cur = xmlNewDocRawNode((xmlDocPtr) parent, ns, name, content);
- } else if (parent->type == XML_DOCUMENT_FRAG_NODE) {
- cur = xmlNewDocRawNode( parent->doc, ns, name, content);
- } else {
- return(NULL);
- }
- if (cur == NULL) return(NULL);
-
- /*
- * add the new element at the end of the children list.
- */
- cur->type = XML_ELEMENT_NODE;
- cur->parent = parent;
- cur->doc = parent->doc;
- if (parent->children == NULL) {
- parent->children = cur;
- parent->last = cur;
- } else {
- prev = parent->last;
- prev->next = cur;
- cur->prev = prev;
- parent->last = cur;
- }
-
- return(cur);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlNewCharRef:
- * @doc: the document
- * @name: the char ref string, starting with # or "&# ... ;"
- *
- * Creation of a new character reference node.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewCharRef(xmlDocPtr doc, const xmlChar *name) {
- xmlNodePtr cur;
-
- if (name == NULL)
- return(NULL);
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building character reference");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_ENTITY_REF_NODE;
-
- cur->doc = doc;
- if (name[0] == '&') {
- int len;
- name++;
- len = xmlStrlen(name);
- if (name[len - 1] == ';')
- cur->name = xmlStrndup(name, len - 1);
- else
- cur->name = xmlStrndup(name, len);
- } else
- cur->name = xmlStrdup(name);
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(cur);
- return(cur);
-}
-
-/**
- * xmlNewReference:
- * @doc: the document
- * @name: the reference name, or the reference string with & and ;
- *
- * Creation of a new reference node.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewReference(const xmlDoc *doc, const xmlChar *name) {
- xmlNodePtr cur;
- xmlEntityPtr ent;
-
- if (name == NULL)
- return(NULL);
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building reference");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_ENTITY_REF_NODE;
-
- cur->doc = (xmlDoc *)doc;
- if (name[0] == '&') {
- int len;
- name++;
- len = xmlStrlen(name);
- if (name[len - 1] == ';')
- cur->name = xmlStrndup(name, len - 1);
- else
- cur->name = xmlStrndup(name, len);
- } else
- cur->name = xmlStrdup(name);
-
- ent = xmlGetDocEntity(doc, cur->name);
- if (ent != NULL) {
- cur->content = ent->content;
- /*
- * The parent pointer in entity is a DTD pointer and thus is NOT
- * updated. Not sure if this is 100% correct.
- * -George
- */
- cur->children = (xmlNodePtr) ent;
- cur->last = (xmlNodePtr) ent;
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(cur);
- return(cur);
-}
-
-/**
- * xmlNewDocText:
- * @doc: the document
- * @content: the text content
- *
- * Creation of a new text node within a document.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewDocText(const xmlDoc *doc, const xmlChar *content) {
- xmlNodePtr cur;
-
- cur = xmlNewText(content);
- if (cur != NULL) cur->doc = (xmlDoc *)doc;
- return(cur);
-}
-
-/**
- * xmlNewTextLen:
- * @content: the text content
- * @len: the text len.
- *
- * Creation of a new text node with an extra parameter for the content's length
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewTextLen(const xmlChar *content, int len) {
- xmlNodePtr cur;
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building text");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_TEXT_NODE;
-
- cur->name = xmlStringText;
- if (content != NULL) {
- cur->content = xmlStrndup(content, len);
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(cur);
- return(cur);
-}
-
-/**
- * xmlNewDocTextLen:
- * @doc: the document
- * @content: the text content
- * @len: the text len.
- *
- * Creation of a new text node with an extra content length parameter. The
- * text node pertain to a given document.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewDocTextLen(xmlDocPtr doc, const xmlChar *content, int len) {
- xmlNodePtr cur;
-
- cur = xmlNewTextLen(content, len);
- if (cur != NULL) cur->doc = doc;
- return(cur);
-}
-
-/**
- * xmlNewComment:
- * @content: the comment content
- *
- * Creation of a new node containing a comment.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewComment(const xmlChar *content) {
- xmlNodePtr cur;
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building comment");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_COMMENT_NODE;
-
- cur->name = xmlStringComment;
- if (content != NULL) {
- cur->content = xmlStrdup(content);
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(cur);
- return(cur);
-}
-
-/**
- * xmlNewCDataBlock:
- * @doc: the document
- * @content: the CDATA block content content
- * @len: the length of the block
- *
- * Creation of a new node containing a CDATA block.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewCDataBlock(xmlDocPtr doc, const xmlChar *content, int len) {
- xmlNodePtr cur;
-
- /*
- * Allocate a new node and fill the fields.
- */
- cur = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (cur == NULL) {
- xmlTreeErrMemory("building CDATA");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNode));
- cur->type = XML_CDATA_SECTION_NODE;
- cur->doc = doc;
-
- if (content != NULL) {
- cur->content = xmlStrndup(content, len);
- }
-
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue(cur);
- return(cur);
-}
-
-/**
- * xmlNewDocComment:
- * @doc: the document
- * @content: the comment content
- *
- * Creation of a new node containing a comment within a document.
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewDocComment(xmlDocPtr doc, const xmlChar *content) {
- xmlNodePtr cur;
-
- cur = xmlNewComment(content);
- if (cur != NULL) cur->doc = doc;
- return(cur);
-}
-
-/**
- * xmlSetTreeDoc:
- * @tree: the top element
- * @doc: the document
- *
- * update all nodes under the tree to point to the right document
- */
-void
-xmlSetTreeDoc(xmlNodePtr tree, xmlDocPtr doc) {
- xmlAttrPtr prop;
-
- if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL))
- return;
- if (tree->doc != doc) {
- if(tree->type == XML_ELEMENT_NODE) {
- prop = tree->properties;
- while (prop != NULL) {
- if (prop->atype == XML_ATTRIBUTE_ID) {
- xmlRemoveID(tree->doc, prop);
- }
-
- prop->doc = doc;
- xmlSetListDoc(prop->children, doc);
-
- /*
- * TODO: ID attributes should be also added to the new
- * document, but this breaks things like xmlReplaceNode.
- * The underlying problem is that xmlRemoveID is only called
- * if a node is destroyed, not if it's unlinked.
- */
-#if 0
- if (xmlIsID(doc, tree, prop)) {
- xmlChar *idVal = xmlNodeListGetString(doc, prop->children,
- 1);
- xmlAddID(NULL, doc, idVal, prop);
- }
-#endif
-
- prop = prop->next;
- }
- }
- if (tree->children != NULL)
- xmlSetListDoc(tree->children, doc);
- tree->doc = doc;
- }
-}
-
-/**
- * xmlSetListDoc:
- * @list: the first element
- * @doc: the document
- *
- * update all nodes in the list to point to the right document
- */
-void
-xmlSetListDoc(xmlNodePtr list, xmlDocPtr doc) {
- xmlNodePtr cur;
-
- if ((list == NULL) || (list->type == XML_NAMESPACE_DECL))
- return;
- cur = list;
- while (cur != NULL) {
- if (cur->doc != doc)
- xmlSetTreeDoc(cur, doc);
- cur = cur->next;
- }
-}
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-/**
- * xmlNewChild:
- * @parent: the parent node
- * @ns: a namespace if any
- * @name: the name of the child
- * @content: the XML content of the child if any.
- *
- * Creation of a new child element, added at the end of @parent children list.
- * @ns and @content parameters are optional (NULL). If @ns is NULL, the newly
- * created element inherits the namespace of @parent. If @content is non NULL,
- * a child list containing the TEXTs and ENTITY_REFs node will be created.
- * NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity
- * references. XML special chars must be escaped first by using
- * xmlEncodeEntitiesReentrant(), or xmlNewTextChild() should be used.
- *
- * Returns a pointer to the new node object.
- */
-xmlNodePtr
-xmlNewChild(xmlNodePtr parent, xmlNsPtr ns,
- const xmlChar *name, const xmlChar *content) {
- xmlNodePtr cur, prev;
-
- if (parent == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewChild : parent == NULL\n");
-#endif
- return(NULL);
- }
-
- if (name == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewChild : name == NULL\n");
-#endif
- return(NULL);
- }
-
- /*
- * Allocate a new node
- */
- if (parent->type == XML_ELEMENT_NODE) {
- if (ns == NULL)
- cur = xmlNewDocNode(parent->doc, parent->ns, name, content);
- else
- cur = xmlNewDocNode(parent->doc, ns, name, content);
- } else if ((parent->type == XML_DOCUMENT_NODE) ||
- (parent->type == XML_HTML_DOCUMENT_NODE)) {
- if (ns == NULL)
- cur = xmlNewDocNode((xmlDocPtr) parent, NULL, name, content);
- else
- cur = xmlNewDocNode((xmlDocPtr) parent, ns, name, content);
- } else if (parent->type == XML_DOCUMENT_FRAG_NODE) {
- cur = xmlNewDocNode( parent->doc, ns, name, content);
- } else {
- return(NULL);
- }
- if (cur == NULL) return(NULL);
-
- /*
- * add the new element at the end of the children list.
- */
- cur->type = XML_ELEMENT_NODE;
- cur->parent = parent;
- cur->doc = parent->doc;
- if (parent->children == NULL) {
- parent->children = cur;
- parent->last = cur;
- } else {
- prev = parent->last;
- prev->next = cur;
- cur->prev = prev;
- parent->last = cur;
- }
-
- return(cur);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlAddPropSibling:
- * @prev: the attribute to which @prop is added after
- * @cur: the base attribute passed to calling function
- * @prop: the new attribute
- *
- * Add a new attribute after @prev using @cur as base attribute.
- * When inserting before @cur, @prev is passed as @cur->prev.
- * When inserting after @cur, @prev is passed as @cur.
- * If an existing attribute is found it is detroyed prior to adding @prop.
- *
- * Returns the attribute being inserted or NULL in case of error.
- */
-static xmlNodePtr
-xmlAddPropSibling(xmlNodePtr prev, xmlNodePtr cur, xmlNodePtr prop) {
- xmlAttrPtr attr;
-
- if ((cur == NULL) || (cur->type != XML_ATTRIBUTE_NODE) ||
- (prop == NULL) || (prop->type != XML_ATTRIBUTE_NODE) ||
- ((prev != NULL) && (prev->type != XML_ATTRIBUTE_NODE)))
- return(NULL);
-
- /* check if an attribute with the same name exists */
- if (prop->ns == NULL)
- attr = xmlHasNsProp(cur->parent, prop->name, NULL);
- else
- attr = xmlHasNsProp(cur->parent, prop->name, prop->ns->href);
-
- if (prop->doc != cur->doc) {
- xmlSetTreeDoc(prop, cur->doc);
- }
- prop->parent = cur->parent;
- prop->prev = prev;
- if (prev != NULL) {
- prop->next = prev->next;
- prev->next = prop;
- if (prop->next)
- prop->next->prev = prop;
- } else {
- prop->next = cur;
- cur->prev = prop;
- }
- if (prop->prev == NULL && prop->parent != NULL)
- prop->parent->properties = (xmlAttrPtr) prop;
- if ((attr != NULL) && (attr->type != XML_ATTRIBUTE_DECL)) {
- /* different instance, destroy it (attributes must be unique) */
- xmlRemoveProp((xmlAttrPtr) attr);
- }
- return prop;
-}
-
-/**
- * xmlAddNextSibling:
- * @cur: the child node
- * @elem: the new node
- *
- * Add a new node @elem as the next sibling of @cur
- * If the new node was already inserted in a document it is
- * first unlinked from its existing context.
- * As a result of text merging @elem may be freed.
- * If the new node is ATTRIBUTE, it is added into properties instead of children.
- * If there is an attribute with equal name, it is first destroyed.
- *
- * Returns the new node or NULL in case of error.
- */
-xmlNodePtr
-xmlAddNextSibling(xmlNodePtr cur, xmlNodePtr elem) {
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddNextSibling : cur == NULL\n");
-#endif
- return(NULL);
- }
- if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddNextSibling : elem == NULL\n");
-#endif
- return(NULL);
- }
-
- if (cur == elem) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddNextSibling : cur == elem\n");
-#endif
- return(NULL);
- }
-
- xmlUnlinkNode(elem);
-
- if (elem->type == XML_TEXT_NODE) {
- if (cur->type == XML_TEXT_NODE) {
- xmlNodeAddContent(cur, elem->content);
- xmlFreeNode(elem);
- return(cur);
- }
- if ((cur->next != NULL) && (cur->next->type == XML_TEXT_NODE) &&
- (cur->name == cur->next->name)) {
- xmlChar *tmp;
-
- tmp = xmlStrdup(elem->content);
- tmp = xmlStrcat(tmp, cur->next->content);
- xmlNodeSetContent(cur->next, tmp);
- xmlFree(tmp);
- xmlFreeNode(elem);
- return(cur->next);
- }
- } else if (elem->type == XML_ATTRIBUTE_NODE) {
- return xmlAddPropSibling(cur, cur, elem);
- }
-
- if (elem->doc != cur->doc) {
- xmlSetTreeDoc(elem, cur->doc);
- }
- elem->parent = cur->parent;
- elem->prev = cur;
- elem->next = cur->next;
- cur->next = elem;
- if (elem->next != NULL)
- elem->next->prev = elem;
- if ((elem->parent != NULL) && (elem->parent->last == cur))
- elem->parent->last = elem;
- return(elem);
-}
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_HTML_ENABLED) || \
- defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
-/**
- * xmlAddPrevSibling:
- * @cur: the child node
- * @elem: the new node
- *
- * Add a new node @elem as the previous sibling of @cur
- * merging adjacent TEXT nodes (@elem may be freed)
- * If the new node was already inserted in a document it is
- * first unlinked from its existing context.
- * If the new node is ATTRIBUTE, it is added into properties instead of children.
- * If there is an attribute with equal name, it is first destroyed.
- *
- * Returns the new node or NULL in case of error.
- */
-xmlNodePtr
-xmlAddPrevSibling(xmlNodePtr cur, xmlNodePtr elem) {
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddPrevSibling : cur == NULL\n");
-#endif
- return(NULL);
- }
- if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddPrevSibling : elem == NULL\n");
-#endif
- return(NULL);
- }
-
- if (cur == elem) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddPrevSibling : cur == elem\n");
-#endif
- return(NULL);
- }
-
- xmlUnlinkNode(elem);
-
- if (elem->type == XML_TEXT_NODE) {
- if (cur->type == XML_TEXT_NODE) {
- xmlChar *tmp;
-
- tmp = xmlStrdup(elem->content);
- tmp = xmlStrcat(tmp, cur->content);
- xmlNodeSetContent(cur, tmp);
- xmlFree(tmp);
- xmlFreeNode(elem);
- return(cur);
- }
- if ((cur->prev != NULL) && (cur->prev->type == XML_TEXT_NODE) &&
- (cur->name == cur->prev->name)) {
- xmlNodeAddContent(cur->prev, elem->content);
- xmlFreeNode(elem);
- return(cur->prev);
- }
- } else if (elem->type == XML_ATTRIBUTE_NODE) {
- return xmlAddPropSibling(cur->prev, cur, elem);
- }
-
- if (elem->doc != cur->doc) {
- xmlSetTreeDoc(elem, cur->doc);
- }
- elem->parent = cur->parent;
- elem->next = cur;
- elem->prev = cur->prev;
- cur->prev = elem;
- if (elem->prev != NULL)
- elem->prev->next = elem;
- if ((elem->parent != NULL) && (elem->parent->children == cur)) {
- elem->parent->children = elem;
- }
- return(elem);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlAddSibling:
- * @cur: the child node
- * @elem: the new node
- *
- * Add a new element @elem to the list of siblings of @cur
- * merging adjacent TEXT nodes (@elem may be freed)
- * If the new element was already inserted in a document it is
- * first unlinked from its existing context.
- *
- * Returns the new element or NULL in case of error.
- */
-xmlNodePtr
-xmlAddSibling(xmlNodePtr cur, xmlNodePtr elem) {
- xmlNodePtr parent;
-
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddSibling : cur == NULL\n");
-#endif
- return(NULL);
- }
-
- if ((elem == NULL) || (elem->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddSibling : elem == NULL\n");
-#endif
- return(NULL);
- }
-
- if (cur == elem) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddSibling : cur == elem\n");
-#endif
- return(NULL);
- }
-
- /*
- * Constant time is we can rely on the ->parent->last to find
- * the last sibling.
- */
- if ((cur->type != XML_ATTRIBUTE_NODE) && (cur->parent != NULL) &&
- (cur->parent->children != NULL) &&
- (cur->parent->last != NULL) &&
- (cur->parent->last->next == NULL)) {
- cur = cur->parent->last;
- } else {
- while (cur->next != NULL) cur = cur->next;
- }
-
- xmlUnlinkNode(elem);
-
- if ((cur->type == XML_TEXT_NODE) && (elem->type == XML_TEXT_NODE) &&
- (cur->name == elem->name)) {
- xmlNodeAddContent(cur, elem->content);
- xmlFreeNode(elem);
- return(cur);
- } else if (elem->type == XML_ATTRIBUTE_NODE) {
- return xmlAddPropSibling(cur, cur, elem);
- }
-
- if (elem->doc != cur->doc) {
- xmlSetTreeDoc(elem, cur->doc);
- }
- parent = cur->parent;
- elem->prev = cur;
- elem->next = NULL;
- elem->parent = parent;
- cur->next = elem;
- if (parent != NULL)
- parent->last = elem;
-
- return(elem);
-}
-
-/**
- * xmlAddChildList:
- * @parent: the parent node
- * @cur: the first node in the list
- *
- * Add a list of node at the end of the child list of the parent
- * merging adjacent TEXT nodes (@cur may be freed)
- *
- * Returns the last child or NULL in case of error.
- */
-xmlNodePtr
-xmlAddChildList(xmlNodePtr parent, xmlNodePtr cur) {
- xmlNodePtr prev;
-
- if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddChildList : parent == NULL\n");
-#endif
- return(NULL);
- }
-
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddChildList : child == NULL\n");
-#endif
- return(NULL);
- }
-
- if ((cur->doc != NULL) && (parent->doc != NULL) &&
- (cur->doc != parent->doc)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "Elements moved to a different document\n");
-#endif
- }
-
- /*
- * add the first element at the end of the children list.
- */
-
- if (parent->children == NULL) {
- parent->children = cur;
- } else {
- /*
- * If cur and parent->last both are TEXT nodes, then merge them.
- */
- if ((cur->type == XML_TEXT_NODE) &&
- (parent->last->type == XML_TEXT_NODE) &&
- (cur->name == parent->last->name)) {
- xmlNodeAddContent(parent->last, cur->content);
- /*
- * if it's the only child, nothing more to be done.
- */
- if (cur->next == NULL) {
- xmlFreeNode(cur);
- return(parent->last);
- }
- prev = cur;
- cur = cur->next;
- xmlFreeNode(prev);
- }
- prev = parent->last;
- prev->next = cur;
- cur->prev = prev;
- }
- while (cur->next != NULL) {
- cur->parent = parent;
- if (cur->doc != parent->doc) {
- xmlSetTreeDoc(cur, parent->doc);
- }
- cur = cur->next;
- }
- cur->parent = parent;
- /* the parent may not be linked to a doc ! */
- if (cur->doc != parent->doc) {
- xmlSetTreeDoc(cur, parent->doc);
- }
- parent->last = cur;
-
- return(cur);
-}
-
-/**
- * xmlAddChild:
- * @parent: the parent node
- * @cur: the child node
- *
- * Add a new node to @parent, at the end of the child (or property) list
- * merging adjacent TEXT nodes (in which case @cur is freed)
- * If the new node is ATTRIBUTE, it is added into properties instead of children.
- * If there is an attribute with equal name, it is first destroyed.
- *
- * Returns the child or NULL in case of error.
- */
-xmlNodePtr
-xmlAddChild(xmlNodePtr parent, xmlNodePtr cur) {
- xmlNodePtr prev;
-
- if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddChild : parent == NULL\n");
-#endif
- return(NULL);
- }
-
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddChild : child == NULL\n");
-#endif
- return(NULL);
- }
-
- if (parent == cur) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlAddChild : parent == cur\n");
-#endif
- return(NULL);
- }
- /*
- * If cur is a TEXT node, merge its content with adjacent TEXT nodes
- * cur is then freed.
- */
- if (cur->type == XML_TEXT_NODE) {
- if ((parent->type == XML_TEXT_NODE) &&
- (parent->content != NULL) &&
- (parent->name == cur->name)) {
- xmlNodeAddContent(parent, cur->content);
- xmlFreeNode(cur);
- return(parent);
- }
- if ((parent->last != NULL) && (parent->last->type == XML_TEXT_NODE) &&
- (parent->last->name == cur->name) &&
- (parent->last != cur)) {
- xmlNodeAddContent(parent->last, cur->content);
- xmlFreeNode(cur);
- return(parent->last);
- }
- }
-
- /*
- * add the new element at the end of the children list.
- */
- prev = cur->parent;
- cur->parent = parent;
- if (cur->doc != parent->doc) {
- xmlSetTreeDoc(cur, parent->doc);
- }
- /* this check prevents a loop on tree-traversions if a developer
- * tries to add a node to its parent multiple times
- */
- if (prev == parent)
- return(cur);
-
- /*
- * Coalescing
- */
- if ((parent->type == XML_TEXT_NODE) &&
- (parent->content != NULL) &&
- (parent != cur)) {
- xmlNodeAddContent(parent, cur->content);
- xmlFreeNode(cur);
- return(parent);
- }
- if (cur->type == XML_ATTRIBUTE_NODE) {
- if (parent->type != XML_ELEMENT_NODE)
- return(NULL);
- if (parent->properties != NULL) {
- /* check if an attribute with the same name exists */
- xmlAttrPtr lastattr;
-
- if (cur->ns == NULL)
- lastattr = xmlHasNsProp(parent, cur->name, NULL);
- else
- lastattr = xmlHasNsProp(parent, cur->name, cur->ns->href);
- if ((lastattr != NULL) && (lastattr != (xmlAttrPtr) cur) && (lastattr->type != XML_ATTRIBUTE_DECL)) {
- /* different instance, destroy it (attributes must be unique) */
- xmlUnlinkNode((xmlNodePtr) lastattr);
- xmlFreeProp(lastattr);
- }
- if (lastattr == (xmlAttrPtr) cur)
- return(cur);
-
- }
- if (parent->properties == NULL) {
- parent->properties = (xmlAttrPtr) cur;
- } else {
- /* find the end */
- xmlAttrPtr lastattr = parent->properties;
- while (lastattr->next != NULL) {
- lastattr = lastattr->next;
- }
- lastattr->next = (xmlAttrPtr) cur;
- ((xmlAttrPtr) cur)->prev = lastattr;
- }
- } else {
- if (parent->children == NULL) {
- parent->children = cur;
- parent->last = cur;
- } else {
- prev = parent->last;
- prev->next = cur;
- cur->prev = prev;
- parent->last = cur;
- }
- }
- return(cur);
-}
-
-/**
- * xmlGetLastChild:
- * @parent: the parent node
- *
- * Search the last child of a node.
- * Returns the last child or NULL if none.
- */
-xmlNodePtr
-xmlGetLastChild(const xmlNode *parent) {
- if ((parent == NULL) || (parent->type == XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlGetLastChild : parent == NULL\n");
-#endif
- return(NULL);
- }
- return(parent->last);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/*
- * 5 interfaces from DOM ElementTraversal
- */
-
-/**
- * xmlChildElementCount:
- * @parent: the parent node
- *
- * Finds the current number of child nodes of that element which are
- * element nodes.
- * Note the handling of entities references is different than in
- * the W3C DOM element traversal spec since we don't have back reference
- * from entities content to entities references.
- *
- * Returns the count of element child or 0 if not available
- */
-unsigned long
-xmlChildElementCount(xmlNodePtr parent) {
- unsigned long ret = 0;
- xmlNodePtr cur = NULL;
-
- if (parent == NULL)
- return(0);
- switch (parent->type) {
- case XML_ELEMENT_NODE:
- case XML_ENTITY_NODE:
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_HTML_DOCUMENT_NODE:
- cur = parent->children;
- break;
- default:
- return(0);
- }
- while (cur != NULL) {
- if (cur->type == XML_ELEMENT_NODE)
- ret++;
- cur = cur->next;
- }
- return(ret);
-}
-
-/**
- * xmlFirstElementChild:
- * @parent: the parent node
- *
- * Finds the first child node of that element which is a Element node
- * Note the handling of entities references is different than in
- * the W3C DOM element traversal spec since we don't have back reference
- * from entities content to entities references.
- *
- * Returns the first element child or NULL if not available
- */
-xmlNodePtr
-xmlFirstElementChild(xmlNodePtr parent) {
- xmlNodePtr cur = NULL;
-
- if (parent == NULL)
- return(NULL);
- switch (parent->type) {
- case XML_ELEMENT_NODE:
- case XML_ENTITY_NODE:
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_HTML_DOCUMENT_NODE:
- cur = parent->children;
- break;
- default:
- return(NULL);
- }
- while (cur != NULL) {
- if (cur->type == XML_ELEMENT_NODE)
- return(cur);
- cur = cur->next;
- }
- return(NULL);
-}
-
-/**
- * xmlLastElementChild:
- * @parent: the parent node
- *
- * Finds the last child node of that element which is a Element node
- * Note the handling of entities references is different than in
- * the W3C DOM element traversal spec since we don't have back reference
- * from entities content to entities references.
- *
- * Returns the last element child or NULL if not available
- */
-xmlNodePtr
-xmlLastElementChild(xmlNodePtr parent) {
- xmlNodePtr cur = NULL;
-
- if (parent == NULL)
- return(NULL);
- switch (parent->type) {
- case XML_ELEMENT_NODE:
- case XML_ENTITY_NODE:
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_HTML_DOCUMENT_NODE:
- cur = parent->last;
- break;
- default:
- return(NULL);
- }
- while (cur != NULL) {
- if (cur->type == XML_ELEMENT_NODE)
- return(cur);
- cur = cur->prev;
- }
- return(NULL);
-}
-
-/**
- * xmlPreviousElementSibling:
- * @node: the current node
- *
- * Finds the first closest previous sibling of the node which is an
- * element node.
- * Note the handling of entities references is different than in
- * the W3C DOM element traversal spec since we don't have back reference
- * from entities content to entities references.
- *
- * Returns the previous element sibling or NULL if not available
- */
-xmlNodePtr
-xmlPreviousElementSibling(xmlNodePtr node) {
- if (node == NULL)
- return(NULL);
- switch (node->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- node = node->prev;
- break;
- default:
- return(NULL);
- }
- while (node != NULL) {
- if (node->type == XML_ELEMENT_NODE)
- return(node);
- node = node->prev;
- }
- return(NULL);
-}
-
-/**
- * xmlNextElementSibling:
- * @node: the current node
- *
- * Finds the first closest next sibling of the node which is an
- * element node.
- * Note the handling of entities references is different than in
- * the W3C DOM element traversal spec since we don't have back reference
- * from entities content to entities references.
- *
- * Returns the next element sibling or NULL if not available
- */
-xmlNodePtr
-xmlNextElementSibling(xmlNodePtr node) {
- if (node == NULL)
- return(NULL);
- switch (node->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_DTD_NODE:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- node = node->next;
- break;
- default:
- return(NULL);
- }
- while (node != NULL) {
- if (node->type == XML_ELEMENT_NODE)
- return(node);
- node = node->next;
- }
- return(NULL);
-}
-
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlFreeNodeList:
- * @cur: the first node in the list
- *
- * Free a node and all its siblings, this is a recursive behaviour, all
- * the children are freed too.
- */
-void
-xmlFreeNodeList(xmlNodePtr cur) {
- xmlNodePtr next;
- xmlDictPtr dict = NULL;
-
- if (cur == NULL) return;
- if (cur->type == XML_NAMESPACE_DECL) {
- xmlFreeNsList((xmlNsPtr) cur);
- return;
- }
- if ((cur->type == XML_DOCUMENT_NODE) ||
-#ifdef LIBXML_DOCB_ENABLED
- (cur->type == XML_DOCB_DOCUMENT_NODE) ||
-#endif
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- xmlFreeDoc((xmlDocPtr) cur);
- return;
- }
- if (cur->doc != NULL) dict = cur->doc->dict;
- while (cur != NULL) {
- next = cur->next;
- if (cur->type != XML_DTD_NODE) {
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue(cur);
-
- if ((cur->children != NULL) &&
- (cur->type != XML_ENTITY_REF_NODE))
- xmlFreeNodeList(cur->children);
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) &&
- (cur->properties != NULL))
- xmlFreePropList(cur->properties);
- if ((cur->type != XML_ELEMENT_NODE) &&
- (cur->type != XML_XINCLUDE_START) &&
- (cur->type != XML_XINCLUDE_END) &&
- (cur->type != XML_ENTITY_REF_NODE) &&
- (cur->content != (xmlChar *) &(cur->properties))) {
- DICT_FREE(cur->content)
- }
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) &&
- (cur->nsDef != NULL))
- xmlFreeNsList(cur->nsDef);
-
- /*
- * When a node is a text node or a comment, it uses a global static
- * variable for the name of the node.
- * Otherwise the node name might come from the document's
- * dictionary
- */
- if ((cur->name != NULL) &&
- (cur->type != XML_TEXT_NODE) &&
- (cur->type != XML_COMMENT_NODE))
- DICT_FREE(cur->name)
- xmlFree(cur);
- }
- cur = next;
- }
-}
-
-/**
- * xmlFreeNode:
- * @cur: the node
- *
- * Free a node, this is a recursive behaviour, all the children are freed too.
- * This doesn't unlink the child from the list, use xmlUnlinkNode() first.
- */
-void
-xmlFreeNode(xmlNodePtr cur) {
- xmlDictPtr dict = NULL;
-
- if (cur == NULL) return;
-
- /* use xmlFreeDtd for DTD nodes */
- if (cur->type == XML_DTD_NODE) {
- xmlFreeDtd((xmlDtdPtr) cur);
- return;
- }
- if (cur->type == XML_NAMESPACE_DECL) {
- xmlFreeNs((xmlNsPtr) cur);
- return;
- }
- if (cur->type == XML_ATTRIBUTE_NODE) {
- xmlFreeProp((xmlAttrPtr) cur);
- return;
- }
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue(cur);
-
- if (cur->doc != NULL) dict = cur->doc->dict;
-
- if (cur->type == XML_ENTITY_DECL) {
- xmlEntityPtr ent = (xmlEntityPtr) cur;
- DICT_FREE(ent->SystemID);
- DICT_FREE(ent->ExternalID);
- }
- if ((cur->children != NULL) &&
- (cur->type != XML_ENTITY_REF_NODE))
- xmlFreeNodeList(cur->children);
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) &&
- (cur->properties != NULL))
- xmlFreePropList(cur->properties);
- if ((cur->type != XML_ELEMENT_NODE) &&
- (cur->content != NULL) &&
- (cur->type != XML_ENTITY_REF_NODE) &&
- (cur->type != XML_XINCLUDE_END) &&
- (cur->type != XML_XINCLUDE_START) &&
- (cur->content != (xmlChar *) &(cur->properties))) {
- DICT_FREE(cur->content)
- }
-
- /*
- * When a node is a text node or a comment, it uses a global static
- * variable for the name of the node.
- * Otherwise the node name might come from the document's dictionary
- */
- if ((cur->name != NULL) &&
- (cur->type != XML_TEXT_NODE) &&
- (cur->type != XML_COMMENT_NODE))
- DICT_FREE(cur->name)
-
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) &&
- (cur->nsDef != NULL))
- xmlFreeNsList(cur->nsDef);
- xmlFree(cur);
-}
-
-/**
- * xmlUnlinkNode:
- * @cur: the node
- *
- * Unlink a node from it's current context, the node is not freed
- * If one need to free the node, use xmlFreeNode() routine after the
- * unlink to discard it.
- * Note that namespace nodes can't be unlinked as they do not have
- * pointer to their parent.
- */
-void
-xmlUnlinkNode(xmlNodePtr cur) {
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlUnlinkNode : node == NULL\n");
-#endif
- return;
- }
- if (cur->type == XML_NAMESPACE_DECL)
- return;
- if (cur->type == XML_DTD_NODE) {
- xmlDocPtr doc;
- doc = cur->doc;
- if (doc != NULL) {
- if (doc->intSubset == (xmlDtdPtr) cur)
- doc->intSubset = NULL;
- if (doc->extSubset == (xmlDtdPtr) cur)
- doc->extSubset = NULL;
- }
- }
- if (cur->type == XML_ENTITY_DECL) {
- xmlDocPtr doc;
- doc = cur->doc;
- if (doc != NULL) {
- if (doc->intSubset != NULL) {
- if (xmlHashLookup(doc->intSubset->entities, cur->name) == cur)
- xmlHashRemoveEntry(doc->intSubset->entities, cur->name,
- NULL);
- if (xmlHashLookup(doc->intSubset->pentities, cur->name) == cur)
- xmlHashRemoveEntry(doc->intSubset->pentities, cur->name,
- NULL);
- }
- if (doc->extSubset != NULL) {
- if (xmlHashLookup(doc->extSubset->entities, cur->name) == cur)
- xmlHashRemoveEntry(doc->extSubset->entities, cur->name,
- NULL);
- if (xmlHashLookup(doc->extSubset->pentities, cur->name) == cur)
- xmlHashRemoveEntry(doc->extSubset->pentities, cur->name,
- NULL);
- }
- }
- }
- if (cur->parent != NULL) {
- xmlNodePtr parent;
- parent = cur->parent;
- if (cur->type == XML_ATTRIBUTE_NODE) {
- if (parent->properties == (xmlAttrPtr) cur)
- parent->properties = ((xmlAttrPtr) cur)->next;
- } else {
- if (parent->children == cur)
- parent->children = cur->next;
- if (parent->last == cur)
- parent->last = cur->prev;
- }
- cur->parent = NULL;
- }
- if (cur->next != NULL)
- cur->next->prev = cur->prev;
- if (cur->prev != NULL)
- cur->prev->next = cur->next;
- cur->next = cur->prev = NULL;
-}
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
-/**
- * xmlReplaceNode:
- * @old: the old node
- * @cur: the node
- *
- * Unlink the old node from its current context, prune the new one
- * at the same place. If @cur was already inserted in a document it is
- * first unlinked from its existing context.
- *
- * Returns the @old node
- */
-xmlNodePtr
-xmlReplaceNode(xmlNodePtr old, xmlNodePtr cur) {
- if (old == cur) return(NULL);
- if ((old == NULL) || (old->type == XML_NAMESPACE_DECL) ||
- (old->parent == NULL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlReplaceNode : old == NULL or without parent\n");
-#endif
- return(NULL);
- }
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL)) {
- xmlUnlinkNode(old);
- return(old);
- }
- if (cur == old) {
- return(old);
- }
- if ((old->type==XML_ATTRIBUTE_NODE) && (cur->type!=XML_ATTRIBUTE_NODE)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlReplaceNode : Trying to replace attribute node with other node type\n");
-#endif
- return(old);
- }
- if ((cur->type==XML_ATTRIBUTE_NODE) && (old->type!=XML_ATTRIBUTE_NODE)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlReplaceNode : Trying to replace a non-attribute node with attribute node\n");
-#endif
- return(old);
- }
- xmlUnlinkNode(cur);
- xmlSetTreeDoc(cur, old->doc);
- cur->parent = old->parent;
- cur->next = old->next;
- if (cur->next != NULL)
- cur->next->prev = cur;
- cur->prev = old->prev;
- if (cur->prev != NULL)
- cur->prev->next = cur;
- if (cur->parent != NULL) {
- if (cur->type == XML_ATTRIBUTE_NODE) {
- if (cur->parent->properties == (xmlAttrPtr)old)
- cur->parent->properties = ((xmlAttrPtr) cur);
- } else {
- if (cur->parent->children == old)
- cur->parent->children = cur;
- if (cur->parent->last == old)
- cur->parent->last = cur;
- }
- }
- old->next = old->prev = NULL;
- old->parent = NULL;
- return(old);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/************************************************************************
- * *
- * Copy operations *
- * *
- ************************************************************************/
-
-/**
- * xmlCopyNamespace:
- * @cur: the namespace
- *
- * Do a copy of the namespace.
- *
- * Returns: a new #xmlNsPtr, or NULL in case of error.
- */
-xmlNsPtr
-xmlCopyNamespace(xmlNsPtr cur) {
- xmlNsPtr ret;
-
- if (cur == NULL) return(NULL);
- switch (cur->type) {
- case XML_LOCAL_NAMESPACE:
- ret = xmlNewNs(NULL, cur->href, cur->prefix);
- break;
- default:
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlCopyNamespace: invalid type %d\n", cur->type);
-#endif
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlCopyNamespaceList:
- * @cur: the first namespace
- *
- * Do a copy of an namespace list.
- *
- * Returns: a new #xmlNsPtr, or NULL in case of error.
- */
-xmlNsPtr
-xmlCopyNamespaceList(xmlNsPtr cur) {
- xmlNsPtr ret = NULL;
- xmlNsPtr p = NULL,q;
-
- while (cur != NULL) {
- q = xmlCopyNamespace(cur);
- if (p == NULL) {
- ret = p = q;
- } else {
- p->next = q;
- p = q;
- }
- cur = cur->next;
- }
- return(ret);
-}
-
-static xmlNodePtr
-xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent);
-
-static xmlAttrPtr
-xmlCopyPropInternal(xmlDocPtr doc, xmlNodePtr target, xmlAttrPtr cur) {
- xmlAttrPtr ret;
-
- if (cur == NULL) return(NULL);
- if ((target != NULL) && (target->type != XML_ELEMENT_NODE))
- return(NULL);
- if (target != NULL)
- ret = xmlNewDocProp(target->doc, cur->name, NULL);
- else if (doc != NULL)
- ret = xmlNewDocProp(doc, cur->name, NULL);
- else if (cur->parent != NULL)
- ret = xmlNewDocProp(cur->parent->doc, cur->name, NULL);
- else if (cur->children != NULL)
- ret = xmlNewDocProp(cur->children->doc, cur->name, NULL);
- else
- ret = xmlNewDocProp(NULL, cur->name, NULL);
- if (ret == NULL) return(NULL);
- ret->parent = target;
-
- if ((cur->ns != NULL) && (target != NULL)) {
- xmlNsPtr ns;
-
- ns = xmlSearchNs(target->doc, target, cur->ns->prefix);
- if (ns == NULL) {
- /*
- * Humm, we are copying an element whose namespace is defined
- * out of the new tree scope. Search it in the original tree
- * and add it at the top of the new tree
- */
- ns = xmlSearchNs(cur->doc, cur->parent, cur->ns->prefix);
- if (ns != NULL) {
- xmlNodePtr root = target;
- xmlNodePtr pred = NULL;
-
- while (root->parent != NULL) {
- pred = root;
- root = root->parent;
- }
- if (root == (xmlNodePtr) target->doc) {
- /* correct possibly cycling above the document elt */
- root = pred;
- }
- ret->ns = xmlNewNs(root, ns->href, ns->prefix);
- }
- } else {
- /*
- * we have to find something appropriate here since
- * we cant be sure, that the namespce we found is identified
- * by the prefix
- */
- if (xmlStrEqual(ns->href, cur->ns->href)) {
- /* this is the nice case */
- ret->ns = ns;
- } else {
- /*
- * we are in trouble: we need a new reconcilied namespace.
- * This is expensive
- */
- ret->ns = xmlNewReconciliedNs(target->doc, target, cur->ns);
- }
- }
-
- } else
- ret->ns = NULL;
-
- if (cur->children != NULL) {
- xmlNodePtr tmp;
-
- ret->children = xmlStaticCopyNodeList(cur->children, ret->doc, (xmlNodePtr) ret);
- ret->last = NULL;
- tmp = ret->children;
- while (tmp != NULL) {
- /* tmp->parent = (xmlNodePtr)ret; */
- if (tmp->next == NULL)
- ret->last = tmp;
- tmp = tmp->next;
- }
- }
- /*
- * Try to handle IDs
- */
- if ((target!= NULL) && (cur!= NULL) &&
- (target->doc != NULL) && (cur->doc != NULL) &&
- (cur->doc->ids != NULL) && (cur->parent != NULL)) {
- if (xmlIsID(cur->doc, cur->parent, cur)) {
- xmlChar *id;
-
- id = xmlNodeListGetString(cur->doc, cur->children, 1);
- if (id != NULL) {
- xmlAddID(NULL, target->doc, id, ret);
- xmlFree(id);
- }
- }
- }
- return(ret);
-}
-
-/**
- * xmlCopyProp:
- * @target: the element where the attribute will be grafted
- * @cur: the attribute
- *
- * Do a copy of the attribute.
- *
- * Returns: a new #xmlAttrPtr, or NULL in case of error.
- */
-xmlAttrPtr
-xmlCopyProp(xmlNodePtr target, xmlAttrPtr cur) {
- return xmlCopyPropInternal(NULL, target, cur);
-}
-
-/**
- * xmlCopyPropList:
- * @target: the element where the attributes will be grafted
- * @cur: the first attribute
- *
- * Do a copy of an attribute list.
- *
- * Returns: a new #xmlAttrPtr, or NULL in case of error.
- */
-xmlAttrPtr
-xmlCopyPropList(xmlNodePtr target, xmlAttrPtr cur) {
- xmlAttrPtr ret = NULL;
- xmlAttrPtr p = NULL,q;
-
- if ((target != NULL) && (target->type != XML_ELEMENT_NODE))
- return(NULL);
- while (cur != NULL) {
- q = xmlCopyProp(target, cur);
- if (q == NULL)
- return(NULL);
- if (p == NULL) {
- ret = p = q;
- } else {
- p->next = q;
- q->prev = p;
- p = q;
- }
- cur = cur->next;
- }
- return(ret);
-}
-
-/*
- * NOTE about the CopyNode operations !
- *
- * They are split into external and internal parts for one
- * tricky reason: namespaces. Doing a direct copy of a node
- * say RPM:Copyright without changing the namespace pointer to
- * something else can produce stale links. One way to do it is
- * to keep a reference counter but this doesn't work as soon
- * as one move the element or the subtree out of the scope of
- * the existing namespace. The actual solution seems to add
- * a copy of the namespace at the top of the copied tree if
- * not available in the subtree.
- * Hence two functions, the public front-end call the inner ones
- * The argument "recursive" normally indicates a recursive copy
- * of the node with values 0 (no) and 1 (yes). For XInclude,
- * however, we allow a value of 2 to indicate copy properties and
- * namespace info, but don't recurse on children.
- */
-
-static xmlNodePtr
-xmlStaticCopyNode(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent,
- int extended) {
- xmlNodePtr ret;
-
- if (node == NULL) return(NULL);
- switch (node->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ELEMENT_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- break;
- case XML_ATTRIBUTE_NODE:
- return((xmlNodePtr) xmlCopyPropInternal(doc, parent, (xmlAttrPtr) node));
- case XML_NAMESPACE_DECL:
- return((xmlNodePtr) xmlCopyNamespaceList((xmlNsPtr) node));
-
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
-#ifdef LIBXML_TREE_ENABLED
- return((xmlNodePtr) xmlCopyDoc((xmlDocPtr) node, extended));
-#endif /* LIBXML_TREE_ENABLED */
- case XML_DOCUMENT_TYPE_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- return(NULL);
- }
-
- /*
- * Allocate a new node and fill the fields.
- */
- ret = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (ret == NULL) {
- xmlTreeErrMemory("copying node");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlNode));
- ret->type = node->type;
-
- ret->doc = doc;
- ret->parent = parent;
- if (node->name == xmlStringText)
- ret->name = xmlStringText;
- else if (node->name == xmlStringTextNoenc)
- ret->name = xmlStringTextNoenc;
- else if (node->name == xmlStringComment)
- ret->name = xmlStringComment;
- else if (node->name != NULL) {
- if ((doc != NULL) && (doc->dict != NULL))
- ret->name = xmlDictLookup(doc->dict, node->name, -1);
- else
- ret->name = xmlStrdup(node->name);
- }
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->content != NULL) &&
- (node->type != XML_ENTITY_REF_NODE) &&
- (node->type != XML_XINCLUDE_END) &&
- (node->type != XML_XINCLUDE_START)) {
- ret->content = xmlStrdup(node->content);
- }else{
- if (node->type == XML_ELEMENT_NODE)
- ret->line = node->line;
- }
- if (parent != NULL) {
- xmlNodePtr tmp;
-
- /*
- * this is a tricky part for the node register thing:
- * in case ret does get coalesced in xmlAddChild
- * the deregister-node callback is called; so we register ret now already
- */
- if ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue))
- xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
-
- tmp = xmlAddChild(parent, ret);
- /* node could have coalesced */
- if (tmp != ret)
- return(tmp);
- }
-
- if (!extended)
- goto out;
- if (((node->type == XML_ELEMENT_NODE) ||
- (node->type == XML_XINCLUDE_START)) && (node->nsDef != NULL))
- ret->nsDef = xmlCopyNamespaceList(node->nsDef);
-
- if (node->ns != NULL) {
- xmlNsPtr ns;
-
- ns = xmlSearchNs(doc, ret, node->ns->prefix);
- if (ns == NULL) {
- /*
- * Humm, we are copying an element whose namespace is defined
- * out of the new tree scope. Search it in the original tree
- * and add it at the top of the new tree
- */
- ns = xmlSearchNs(node->doc, node, node->ns->prefix);
- if (ns != NULL) {
- xmlNodePtr root = ret;
-
- while (root->parent != NULL) root = root->parent;
- ret->ns = xmlNewNs(root, ns->href, ns->prefix);
- } else {
- ret->ns = xmlNewReconciliedNs(doc, ret, node->ns);
- }
- } else {
- /*
- * reference the existing namespace definition in our own tree.
- */
- ret->ns = ns;
- }
- }
- if (((node->type == XML_ELEMENT_NODE) ||
- (node->type == XML_XINCLUDE_START)) && (node->properties != NULL))
- ret->properties = xmlCopyPropList(ret, node->properties);
- if (node->type == XML_ENTITY_REF_NODE) {
- if ((doc == NULL) || (node->doc != doc)) {
- /*
- * The copied node will go into a separate document, so
- * to avoid dangling references to the ENTITY_DECL node
- * we cannot keep the reference. Try to find it in the
- * target document.
- */
- ret->children = (xmlNodePtr) xmlGetDocEntity(doc, ret->name);
- } else {
- ret->children = node->children;
- }
- ret->last = ret->children;
- } else if ((node->children != NULL) && (extended != 2)) {
- ret->children = xmlStaticCopyNodeList(node->children, doc, ret);
- UPDATE_LAST_CHILD_AND_PARENT(ret)
- }
-
-out:
- /* if parent != NULL we already registered the node above */
- if ((parent == NULL) &&
- ((__xmlRegisterCallbacks) && (xmlRegisterNodeDefaultValue)))
- xmlRegisterNodeDefaultValue((xmlNodePtr)ret);
- return(ret);
-}
-
-static xmlNodePtr
-xmlStaticCopyNodeList(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent) {
- xmlNodePtr ret = NULL;
- xmlNodePtr p = NULL,q;
-
- while (node != NULL) {
-#ifdef LIBXML_TREE_ENABLED
- if (node->type == XML_DTD_NODE ) {
- if (doc == NULL) {
- node = node->next;
- continue;
- }
- if (doc->intSubset == NULL) {
- q = (xmlNodePtr) xmlCopyDtd( (xmlDtdPtr) node );
- if (q == NULL) return(NULL);
- q->doc = doc;
- q->parent = parent;
- doc->intSubset = (xmlDtdPtr) q;
- xmlAddChild(parent, q);
- } else {
- q = (xmlNodePtr) doc->intSubset;
- xmlAddChild(parent, q);
- }
- } else
-#endif /* LIBXML_TREE_ENABLED */
- q = xmlStaticCopyNode(node, doc, parent, 1);
- if (q == NULL) return(NULL);
- if (ret == NULL) {
- q->prev = NULL;
- ret = p = q;
- } else if (p != q) {
- /* the test is required if xmlStaticCopyNode coalesced 2 text nodes */
- p->next = q;
- q->prev = p;
- p = q;
- }
- node = node->next;
- }
- return(ret);
-}
-
-/**
- * xmlCopyNode:
- * @node: the node
- * @extended: if 1 do a recursive copy (properties, namespaces and children
- * when applicable)
- * if 2 copy properties and namespaces (when applicable)
- *
- * Do a copy of the node.
- *
- * Returns: a new #xmlNodePtr, or NULL in case of error.
- */
-xmlNodePtr
-xmlCopyNode(xmlNodePtr node, int extended) {
- xmlNodePtr ret;
-
- ret = xmlStaticCopyNode(node, NULL, NULL, extended);
- return(ret);
-}
-
-/**
- * xmlDocCopyNode:
- * @node: the node
- * @doc: the document
- * @extended: if 1 do a recursive copy (properties, namespaces and children
- * when applicable)
- * if 2 copy properties and namespaces (when applicable)
- *
- * Do a copy of the node to a given document.
- *
- * Returns: a new #xmlNodePtr, or NULL in case of error.
- */
-xmlNodePtr
-xmlDocCopyNode(xmlNodePtr node, xmlDocPtr doc, int extended) {
- xmlNodePtr ret;
-
- ret = xmlStaticCopyNode(node, doc, NULL, extended);
- return(ret);
-}
-
-/**
- * xmlDocCopyNodeList:
- * @doc: the target document
- * @node: the first node in the list.
- *
- * Do a recursive copy of the node list.
- *
- * Returns: a new #xmlNodePtr, or NULL in case of error.
- */
-xmlNodePtr xmlDocCopyNodeList(xmlDocPtr doc, xmlNodePtr node) {
- xmlNodePtr ret = xmlStaticCopyNodeList(node, doc, NULL);
- return(ret);
-}
-
-/**
- * xmlCopyNodeList:
- * @node: the first node in the list.
- *
- * Do a recursive copy of the node list.
- * Use xmlDocCopyNodeList() if possible to ensure string interning.
- *
- * Returns: a new #xmlNodePtr, or NULL in case of error.
- */
-xmlNodePtr xmlCopyNodeList(xmlNodePtr node) {
- xmlNodePtr ret = xmlStaticCopyNodeList(node, NULL, NULL);
- return(ret);
-}
-
-#if defined(LIBXML_TREE_ENABLED)
-/**
- * xmlCopyDtd:
- * @dtd: the dtd
- *
- * Do a copy of the dtd.
- *
- * Returns: a new #xmlDtdPtr, or NULL in case of error.
- */
-xmlDtdPtr
-xmlCopyDtd(xmlDtdPtr dtd) {
- xmlDtdPtr ret;
- xmlNodePtr cur, p = NULL, q;
-
- if (dtd == NULL) return(NULL);
- ret = xmlNewDtd(NULL, dtd->name, dtd->ExternalID, dtd->SystemID);
- if (ret == NULL) return(NULL);
- if (dtd->entities != NULL)
- ret->entities = (void *) xmlCopyEntitiesTable(
- (xmlEntitiesTablePtr) dtd->entities);
- if (dtd->notations != NULL)
- ret->notations = (void *) xmlCopyNotationTable(
- (xmlNotationTablePtr) dtd->notations);
- if (dtd->elements != NULL)
- ret->elements = (void *) xmlCopyElementTable(
- (xmlElementTablePtr) dtd->elements);
- if (dtd->attributes != NULL)
- ret->attributes = (void *) xmlCopyAttributeTable(
- (xmlAttributeTablePtr) dtd->attributes);
- if (dtd->pentities != NULL)
- ret->pentities = (void *) xmlCopyEntitiesTable(
- (xmlEntitiesTablePtr) dtd->pentities);
-
- cur = dtd->children;
- while (cur != NULL) {
- q = NULL;
-
- if (cur->type == XML_ENTITY_DECL) {
- xmlEntityPtr tmp = (xmlEntityPtr) cur;
- switch (tmp->etype) {
- case XML_INTERNAL_GENERAL_ENTITY:
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- q = (xmlNodePtr) xmlGetEntityFromDtd(ret, tmp->name);
- break;
- case XML_INTERNAL_PARAMETER_ENTITY:
- case XML_EXTERNAL_PARAMETER_ENTITY:
- q = (xmlNodePtr)
- xmlGetParameterEntityFromDtd(ret, tmp->name);
- break;
- case XML_INTERNAL_PREDEFINED_ENTITY:
- break;
- }
- } else if (cur->type == XML_ELEMENT_DECL) {
- xmlElementPtr tmp = (xmlElementPtr) cur;
- q = (xmlNodePtr)
- xmlGetDtdQElementDesc(ret, tmp->name, tmp->prefix);
- } else if (cur->type == XML_ATTRIBUTE_DECL) {
- xmlAttributePtr tmp = (xmlAttributePtr) cur;
- q = (xmlNodePtr)
- xmlGetDtdQAttrDesc(ret, tmp->elem, tmp->name, tmp->prefix);
- } else if (cur->type == XML_COMMENT_NODE) {
- q = xmlCopyNode(cur, 0);
- }
-
- if (q == NULL) {
- cur = cur->next;
- continue;
- }
-
- if (p == NULL)
- ret->children = q;
- else
- p->next = q;
-
- q->prev = p;
- q->parent = (xmlNodePtr) ret;
- q->next = NULL;
- ret->last = q;
- p = q;
- cur = cur->next;
- }
-
- return(ret);
-}
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-/**
- * xmlCopyDoc:
- * @doc: the document
- * @recursive: if not zero do a recursive copy.
- *
- * Do a copy of the document info. If recursive, the content tree will
- * be copied too as well as DTD, namespaces and entities.
- *
- * Returns: a new #xmlDocPtr, or NULL in case of error.
- */
-xmlDocPtr
-xmlCopyDoc(xmlDocPtr doc, int recursive) {
- xmlDocPtr ret;
-
- if (doc == NULL) return(NULL);
- ret = xmlNewDoc(doc->version);
- if (ret == NULL) return(NULL);
- if (doc->name != NULL)
- ret->name = xmlMemStrdup(doc->name);
- if (doc->encoding != NULL)
- ret->encoding = xmlStrdup(doc->encoding);
- if (doc->URL != NULL)
- ret->URL = xmlStrdup(doc->URL);
- ret->charset = doc->charset;
- ret->compression = doc->compression;
- ret->standalone = doc->standalone;
- if (!recursive) return(ret);
-
- ret->last = NULL;
- ret->children = NULL;
-#ifdef LIBXML_TREE_ENABLED
- if (doc->intSubset != NULL) {
- ret->intSubset = xmlCopyDtd(doc->intSubset);
- if (ret->intSubset == NULL) {
- xmlFreeDoc(ret);
- return(NULL);
- }
- xmlSetTreeDoc((xmlNodePtr)ret->intSubset, ret);
- ret->intSubset->parent = ret;
- }
-#endif
- if (doc->oldNs != NULL)
- ret->oldNs = xmlCopyNamespaceList(doc->oldNs);
- if (doc->children != NULL) {
- xmlNodePtr tmp;
-
- ret->children = xmlStaticCopyNodeList(doc->children, ret,
- (xmlNodePtr)ret);
- ret->last = NULL;
- tmp = ret->children;
- while (tmp != NULL) {
- if (tmp->next == NULL)
- ret->last = tmp;
- tmp = tmp->next;
- }
- }
- return(ret);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/************************************************************************
- * *
- * Content access functions *
- * *
- ************************************************************************/
-
-/**
- * xmlGetLineNoInternal:
- * @node: valid node
- * @depth: used to limit any risk of recursion
- *
- * Get line number of @node.
- * Try to override the limitation of lines being store in 16 bits ints
- *
- * Returns the line number if successful, -1 otherwise
- */
-static long
-xmlGetLineNoInternal(const xmlNode *node, int depth)
-{
- long result = -1;
-
- if (depth >= 5)
- return(-1);
-
- if (!node)
- return result;
- if ((node->type == XML_ELEMENT_NODE) ||
- (node->type == XML_TEXT_NODE) ||
- (node->type == XML_COMMENT_NODE) ||
- (node->type == XML_PI_NODE)) {
- if (node->line == 65535) {
- if ((node->type == XML_TEXT_NODE) && (node->psvi != NULL))
- result = (long) node->psvi;
- else if ((node->type == XML_ELEMENT_NODE) &&
- (node->children != NULL))
- result = xmlGetLineNoInternal(node->children, depth + 1);
- else if (node->next != NULL)
- result = xmlGetLineNoInternal(node->next, depth + 1);
- else if (node->prev != NULL)
- result = xmlGetLineNoInternal(node->prev, depth + 1);
- }
- if ((result == -1) || (result == 65535))
- result = (long) node->line;
- } else if ((node->prev != NULL) &&
- ((node->prev->type == XML_ELEMENT_NODE) ||
- (node->prev->type == XML_TEXT_NODE) ||
- (node->prev->type == XML_COMMENT_NODE) ||
- (node->prev->type == XML_PI_NODE)))
- result = xmlGetLineNoInternal(node->prev, depth + 1);
- else if ((node->parent != NULL) &&
- (node->parent->type == XML_ELEMENT_NODE))
- result = xmlGetLineNoInternal(node->parent, depth + 1);
-
- return result;
-}
-
-/**
- * xmlGetLineNo:
- * @node: valid node
- *
- * Get line number of @node.
- * Try to override the limitation of lines being store in 16 bits ints
- * if XML_PARSE_BIG_LINES parser option was used
- *
- * Returns the line number if successful, -1 otherwise
- */
-long
-xmlGetLineNo(const xmlNode *node)
-{
- return(xmlGetLineNoInternal(node, 0));
-}
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
-/**
- * xmlGetNodePath:
- * @node: a node
- *
- * Build a structure based Path for the given node
- *
- * Returns the new path or NULL in case of error. The caller must free
- * the returned string
- */
-xmlChar *
-xmlGetNodePath(const xmlNode *node)
-{
- const xmlNode *cur, *tmp, *next;
- xmlChar *buffer = NULL, *temp;
- size_t buf_len;
- xmlChar *buf;
- const char *sep;
- const char *name;
- char nametemp[100];
- int occur = 0, generic;
-
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
- return (NULL);
-
- buf_len = 500;
- buffer = (xmlChar *) xmlMallocAtomic(buf_len * sizeof(xmlChar));
- if (buffer == NULL) {
- xmlTreeErrMemory("getting node path");
- return (NULL);
- }
- buf = (xmlChar *) xmlMallocAtomic(buf_len * sizeof(xmlChar));
- if (buf == NULL) {
- xmlTreeErrMemory("getting node path");
- xmlFree(buffer);
- return (NULL);
- }
-
- buffer[0] = 0;
- cur = node;
- do {
- name = "";
- sep = "?";
- occur = 0;
- if ((cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- if (buffer[0] == '/')
- break;
- sep = "/";
- next = NULL;
- } else if (cur->type == XML_ELEMENT_NODE) {
- generic = 0;
- sep = "/";
- name = (const char *) cur->name;
- if (cur->ns) {
- if (cur->ns->prefix != NULL) {
- snprintf(nametemp, sizeof(nametemp) - 1, "%s:%s",
- (char *)cur->ns->prefix, (char *)cur->name);
- nametemp[sizeof(nametemp) - 1] = 0;
- name = nametemp;
- } else {
- /*
- * We cannot express named elements in the default
- * namespace, so use "*".
- */
- generic = 1;
- name = "*";
- }
- }
- next = cur->parent;
-
- /*
- * Thumbler index computation
- * TODO: the ocurence test seems bogus for namespaced names
- */
- tmp = cur->prev;
- while (tmp != NULL) {
- if ((tmp->type == XML_ELEMENT_NODE) &&
- (generic ||
- (xmlStrEqual(cur->name, tmp->name) &&
- ((tmp->ns == cur->ns) ||
- ((tmp->ns != NULL) && (cur->ns != NULL) &&
- (xmlStrEqual(cur->ns->prefix, tmp->ns->prefix)))))))
- occur++;
- tmp = tmp->prev;
- }
- if (occur == 0) {
- tmp = cur->next;
- while (tmp != NULL && occur == 0) {
- if ((tmp->type == XML_ELEMENT_NODE) &&
- (generic ||
- (xmlStrEqual(cur->name, tmp->name) &&
- ((tmp->ns == cur->ns) ||
- ((tmp->ns != NULL) && (cur->ns != NULL) &&
- (xmlStrEqual(cur->ns->prefix, tmp->ns->prefix)))))))
- occur++;
- tmp = tmp->next;
- }
- if (occur != 0)
- occur = 1;
- } else
- occur++;
- } else if (cur->type == XML_COMMENT_NODE) {
- sep = "/";
- name = "comment()";
- next = cur->parent;
-
- /*
- * Thumbler index computation
- */
- tmp = cur->prev;
- while (tmp != NULL) {
- if (tmp->type == XML_COMMENT_NODE)
- occur++;
- tmp = tmp->prev;
- }
- if (occur == 0) {
- tmp = cur->next;
- while (tmp != NULL && occur == 0) {
- if (tmp->type == XML_COMMENT_NODE)
- occur++;
- tmp = tmp->next;
- }
- if (occur != 0)
- occur = 1;
- } else
- occur++;
- } else if ((cur->type == XML_TEXT_NODE) ||
- (cur->type == XML_CDATA_SECTION_NODE)) {
- sep = "/";
- name = "text()";
- next = cur->parent;
-
- /*
- * Thumbler index computation
- */
- tmp = cur->prev;
- while (tmp != NULL) {
- if ((tmp->type == XML_TEXT_NODE) ||
- (tmp->type == XML_CDATA_SECTION_NODE))
- occur++;
- tmp = tmp->prev;
- }
- /*
- * Evaluate if this is the only text- or CDATA-section-node;
- * if yes, then we'll get "text()", otherwise "text()[1]".
- */
- if (occur == 0) {
- tmp = cur->next;
- while (tmp != NULL) {
- if ((tmp->type == XML_TEXT_NODE) ||
- (tmp->type == XML_CDATA_SECTION_NODE))
- {
- occur = 1;
- break;
- }
- tmp = tmp->next;
- }
- } else
- occur++;
- } else if (cur->type == XML_PI_NODE) {
- sep = "/";
- snprintf(nametemp, sizeof(nametemp) - 1,
- "processing-instruction('%s')", (char *)cur->name);
- nametemp[sizeof(nametemp) - 1] = 0;
- name = nametemp;
-
- next = cur->parent;
-
- /*
- * Thumbler index computation
- */
- tmp = cur->prev;
- while (tmp != NULL) {
- if ((tmp->type == XML_PI_NODE) &&
- (xmlStrEqual(cur->name, tmp->name)))
- occur++;
- tmp = tmp->prev;
- }
- if (occur == 0) {
- tmp = cur->next;
- while (tmp != NULL && occur == 0) {
- if ((tmp->type == XML_PI_NODE) &&
- (xmlStrEqual(cur->name, tmp->name)))
- occur++;
- tmp = tmp->next;
- }
- if (occur != 0)
- occur = 1;
- } else
- occur++;
-
- } else if (cur->type == XML_ATTRIBUTE_NODE) {
- sep = "/@";
- name = (const char *) (((xmlAttrPtr) cur)->name);
- if (cur->ns) {
- if (cur->ns->prefix != NULL)
- snprintf(nametemp, sizeof(nametemp) - 1, "%s:%s",
- (char *)cur->ns->prefix, (char *)cur->name);
- else
- snprintf(nametemp, sizeof(nametemp) - 1, "%s",
- (char *)cur->name);
- nametemp[sizeof(nametemp) - 1] = 0;
- name = nametemp;
- }
- next = ((xmlAttrPtr) cur)->parent;
- } else {
- next = cur->parent;
- }
-
- /*
- * Make sure there is enough room
- */
- if (xmlStrlen(buffer) + sizeof(nametemp) + 20 > buf_len) {
- buf_len =
- 2 * buf_len + xmlStrlen(buffer) + sizeof(nametemp) + 20;
- temp = (xmlChar *) xmlRealloc(buffer, buf_len);
- if (temp == NULL) {
- xmlTreeErrMemory("getting node path");
- xmlFree(buf);
- xmlFree(buffer);
- return (NULL);
- }
- buffer = temp;
- temp = (xmlChar *) xmlRealloc(buf, buf_len);
- if (temp == NULL) {
- xmlTreeErrMemory("getting node path");
- xmlFree(buf);
- xmlFree(buffer);
- return (NULL);
- }
- buf = temp;
- }
- if (occur == 0)
- snprintf((char *) buf, buf_len, "%s%s%s",
- sep, name, (char *) buffer);
- else
- snprintf((char *) buf, buf_len, "%s%s[%d]%s",
- sep, name, occur, (char *) buffer);
- snprintf((char *) buffer, buf_len, "%s", (char *)buf);
- cur = next;
- } while (cur != NULL);
- xmlFree(buf);
- return (buffer);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlDocGetRootElement:
- * @doc: the document
- *
- * Get the root element of the document (doc->children is a list
- * containing possibly comments, PIs, etc ...).
- *
- * Returns the #xmlNodePtr for the root or NULL
- */
-xmlNodePtr
-xmlDocGetRootElement(const xmlDoc *doc) {
- xmlNodePtr ret;
-
- if (doc == NULL) return(NULL);
- ret = doc->children;
- while (ret != NULL) {
- if (ret->type == XML_ELEMENT_NODE)
- return(ret);
- ret = ret->next;
- }
- return(ret);
-}
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_WRITER_ENABLED)
-/**
- * xmlDocSetRootElement:
- * @doc: the document
- * @root: the new document root element, if root is NULL no action is taken,
- * to remove a node from a document use xmlUnlinkNode(root) instead.
- *
- * Set the root element of the document (doc->children is a list
- * containing possibly comments, PIs, etc ...).
- *
- * Returns the old root element if any was found, NULL if root was NULL
- */
-xmlNodePtr
-xmlDocSetRootElement(xmlDocPtr doc, xmlNodePtr root) {
- xmlNodePtr old = NULL;
-
- if (doc == NULL) return(NULL);
- if ((root == NULL) || (root->type == XML_NAMESPACE_DECL))
- return(NULL);
- xmlUnlinkNode(root);
- xmlSetTreeDoc(root, doc);
- root->parent = (xmlNodePtr) doc;
- old = doc->children;
- while (old != NULL) {
- if (old->type == XML_ELEMENT_NODE)
- break;
- old = old->next;
- }
- if (old == NULL) {
- if (doc->children == NULL) {
- doc->children = root;
- doc->last = root;
- } else {
- xmlAddSibling(doc->children, root);
- }
- } else {
- xmlReplaceNode(old, root);
- }
- return(old);
-}
-#endif
-
-#if defined(LIBXML_TREE_ENABLED)
-/**
- * xmlNodeSetLang:
- * @cur: the node being changed
- * @lang: the language description
- *
- * Set the language of a node, i.e. the values of the xml:lang
- * attribute.
- */
-void
-xmlNodeSetLang(xmlNodePtr cur, const xmlChar *lang) {
- xmlNsPtr ns;
-
- if (cur == NULL) return;
- switch(cur->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_HTML_DOCUMENT_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_PI_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_NAMESPACE_DECL:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- return;
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- break;
- }
- ns = xmlSearchNsByHref(cur->doc, cur, XML_XML_NAMESPACE);
- if (ns == NULL)
- return;
- xmlSetNsProp(cur, ns, BAD_CAST "lang", lang);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlNodeGetLang:
- * @cur: the node being checked
- *
- * Searches the language of a node, i.e. the values of the xml:lang
- * attribute or the one carried by the nearest ancestor.
- *
- * Returns a pointer to the lang value, or NULL if not found
- * It's up to the caller to free the memory with xmlFree().
- */
-xmlChar *
-xmlNodeGetLang(const xmlNode *cur) {
- xmlChar *lang;
-
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return(NULL);
- while (cur != NULL) {
- lang = xmlGetNsProp(cur, BAD_CAST "lang", XML_XML_NAMESPACE);
- if (lang != NULL)
- return(lang);
- cur = cur->parent;
- }
- return(NULL);
-}
-
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlNodeSetSpacePreserve:
- * @cur: the node being changed
- * @val: the xml:space value ("0": default, 1: "preserve")
- *
- * Set (or reset) the space preserving behaviour of a node, i.e. the
- * value of the xml:space attribute.
- */
-void
-xmlNodeSetSpacePreserve(xmlNodePtr cur, int val) {
- xmlNsPtr ns;
-
- if (cur == NULL) return;
- switch(cur->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_HTML_DOCUMENT_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_PI_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return;
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- break;
- }
- ns = xmlSearchNsByHref(cur->doc, cur, XML_XML_NAMESPACE);
- if (ns == NULL)
- return;
- switch (val) {
- case 0:
- xmlSetNsProp(cur, ns, BAD_CAST "space", BAD_CAST "default");
- break;
- case 1:
- xmlSetNsProp(cur, ns, BAD_CAST "space", BAD_CAST "preserve");
- break;
- }
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlNodeGetSpacePreserve:
- * @cur: the node being checked
- *
- * Searches the space preserving behaviour of a node, i.e. the values
- * of the xml:space attribute or the one carried by the nearest
- * ancestor.
- *
- * Returns -1 if xml:space is not inherited, 0 if "default", 1 if "preserve"
- */
-int
-xmlNodeGetSpacePreserve(const xmlNode *cur) {
- xmlChar *space;
-
- if ((cur == NULL) || (cur->type != XML_ELEMENT_NODE))
- return(-1);
- while (cur != NULL) {
- space = xmlGetNsProp(cur, BAD_CAST "space", XML_XML_NAMESPACE);
- if (space != NULL) {
- if (xmlStrEqual(space, BAD_CAST "preserve")) {
- xmlFree(space);
- return(1);
- }
- if (xmlStrEqual(space, BAD_CAST "default")) {
- xmlFree(space);
- return(0);
- }
- xmlFree(space);
- }
- cur = cur->parent;
- }
- return(-1);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlNodeSetName:
- * @cur: the node being changed
- * @name: the new tag name
- *
- * Set (or reset) the name of a node.
- */
-void
-xmlNodeSetName(xmlNodePtr cur, const xmlChar *name) {
- xmlDocPtr doc;
- xmlDictPtr dict;
- const xmlChar *freeme = NULL;
-
- if (cur == NULL) return;
- if (name == NULL) return;
- switch(cur->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_HTML_DOCUMENT_NODE:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return;
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- case XML_PI_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_DTD_NODE:
- case XML_DOCUMENT_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- break;
- }
- doc = cur->doc;
- if (doc != NULL)
- dict = doc->dict;
- else
- dict = NULL;
- if (dict != NULL) {
- if ((cur->name != NULL) && (!xmlDictOwns(dict, cur->name)))
- freeme = cur->name;
- cur->name = xmlDictLookup(dict, name, -1);
- } else {
- if (cur->name != NULL)
- freeme = cur->name;
- cur->name = xmlStrdup(name);
- }
-
- if (freeme)
- xmlFree((xmlChar *) freeme);
-}
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED)
-/**
- * xmlNodeSetBase:
- * @cur: the node being changed
- * @uri: the new base URI
- *
- * Set (or reset) the base URI of a node, i.e. the value of the
- * xml:base attribute.
- */
-void
-xmlNodeSetBase(xmlNodePtr cur, const xmlChar* uri) {
- xmlNsPtr ns;
- xmlChar* fixed;
-
- if (cur == NULL) return;
- switch(cur->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_PI_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- return;
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- break;
- case XML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_HTML_DOCUMENT_NODE: {
- xmlDocPtr doc = (xmlDocPtr) cur;
-
- if (doc->URL != NULL)
- xmlFree((xmlChar *) doc->URL);
- if (uri == NULL)
- doc->URL = NULL;
- else
- doc->URL = xmlPathToURI(uri);
- return;
- }
- }
-
- ns = xmlSearchNsByHref(cur->doc, cur, XML_XML_NAMESPACE);
- if (ns == NULL)
- return;
- fixed = xmlPathToURI(uri);
- if (fixed != NULL) {
- xmlSetNsProp(cur, ns, BAD_CAST "base", fixed);
- xmlFree(fixed);
- } else {
- xmlSetNsProp(cur, ns, BAD_CAST "base", uri);
- }
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlNodeGetBase:
- * @doc: the document the node pertains to
- * @cur: the node being checked
- *
- * Searches for the BASE URL. The code should work on both XML
- * and HTML document even if base mechanisms are completely different.
- * It returns the base as defined in RFC 2396 sections
- * 5.1.1. Base URI within Document Content
- * and
- * 5.1.2. Base URI from the Encapsulating Entity
- * However it does not return the document base (5.1.3), use
- * doc->URL in this case
- *
- * Returns a pointer to the base URL, or NULL if not found
- * It's up to the caller to free the memory with xmlFree().
- */
-xmlChar *
-xmlNodeGetBase(const xmlDoc *doc, const xmlNode *cur) {
- xmlChar *oldbase = NULL;
- xmlChar *base, *newbase;
-
- if ((cur == NULL) && (doc == NULL))
- return(NULL);
- if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL))
- return(NULL);
- if (doc == NULL) doc = cur->doc;
- if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
- cur = doc->children;
- while ((cur != NULL) && (cur->name != NULL)) {
- if (cur->type != XML_ELEMENT_NODE) {
- cur = cur->next;
- continue;
- }
- if (!xmlStrcasecmp(cur->name, BAD_CAST "html")) {
- cur = cur->children;
- continue;
- }
- if (!xmlStrcasecmp(cur->name, BAD_CAST "head")) {
- cur = cur->children;
- continue;
- }
- if (!xmlStrcasecmp(cur->name, BAD_CAST "base")) {
- return(xmlGetProp(cur, BAD_CAST "href"));
- }
- cur = cur->next;
- }
- return(NULL);
- }
- while (cur != NULL) {
- if (cur->type == XML_ENTITY_DECL) {
- xmlEntityPtr ent = (xmlEntityPtr) cur;
- return(xmlStrdup(ent->URI));
- }
- if (cur->type == XML_ELEMENT_NODE) {
- base = xmlGetNsProp(cur, BAD_CAST "base", XML_XML_NAMESPACE);
- if (base != NULL) {
- if (oldbase != NULL) {
- newbase = xmlBuildURI(oldbase, base);
- if (newbase != NULL) {
- xmlFree(oldbase);
- xmlFree(base);
- oldbase = newbase;
- } else {
- xmlFree(oldbase);
- xmlFree(base);
- return(NULL);
- }
- } else {
- oldbase = base;
- }
- if ((!xmlStrncmp(oldbase, BAD_CAST "http://", 7)) ||
- (!xmlStrncmp(oldbase, BAD_CAST "ftp://", 6)) ||
- (!xmlStrncmp(oldbase, BAD_CAST "urn:", 4)))
- return(oldbase);
- }
- }
- cur = cur->parent;
- }
- if ((doc != NULL) && (doc->URL != NULL)) {
- if (oldbase == NULL)
- return(xmlStrdup(doc->URL));
- newbase = xmlBuildURI(oldbase, doc->URL);
- xmlFree(oldbase);
- return(newbase);
- }
- return(oldbase);
-}
-
-/**
- * xmlNodeBufGetContent:
- * @buffer: a buffer
- * @cur: the node being read
- *
- * Read the value of a node @cur, this can be either the text carried
- * directly by this node if it's a TEXT node or the aggregate string
- * of the values carried by this node child's (TEXT and ENTITY_REF).
- * Entity references are substituted.
- * Fills up the buffer @buffer with this value
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlNodeBufGetContent(xmlBufferPtr buffer, const xmlNode *cur)
-{
- xmlBufPtr buf;
- int ret;
-
- if ((cur == NULL) || (buffer == NULL)) return(-1);
- buf = xmlBufFromBuffer(buffer);
- ret = xmlBufGetNodeContent(buf, cur);
- buffer = xmlBufBackToBuffer(buf);
- if ((ret < 0) || (buffer == NULL))
- return(-1);
- return(0);
-}
-
-/**
- * xmlBufGetNodeContent:
- * @buf: a buffer xmlBufPtr
- * @cur: the node being read
- *
- * Read the value of a node @cur, this can be either the text carried
- * directly by this node if it's a TEXT node or the aggregate string
- * of the values carried by this node child's (TEXT and ENTITY_REF).
- * Entity references are substituted.
- * Fills up the buffer @buf with this value
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlBufGetNodeContent(xmlBufPtr buf, const xmlNode *cur)
-{
- if ((cur == NULL) || (buf == NULL)) return(-1);
- switch (cur->type) {
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- xmlBufCat(buf, cur->content);
- break;
- case XML_DOCUMENT_FRAG_NODE:
- case XML_ELEMENT_NODE:{
- const xmlNode *tmp = cur;
-
- while (tmp != NULL) {
- switch (tmp->type) {
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- if (tmp->content != NULL)
- xmlBufCat(buf, tmp->content);
- break;
- case XML_ENTITY_REF_NODE:
- xmlBufGetNodeContent(buf, tmp);
- break;
- default:
- break;
- }
- /*
- * Skip to next node
- */
- if (tmp->children != NULL) {
- if (tmp->children->type != XML_ENTITY_DECL) {
- tmp = tmp->children;
- continue;
- }
- }
- if (tmp == cur)
- break;
-
- if (tmp->next != NULL) {
- tmp = tmp->next;
- continue;
- }
-
- do {
- tmp = tmp->parent;
- if (tmp == NULL)
- break;
- if (tmp == cur) {
- tmp = NULL;
- break;
- }
- if (tmp->next != NULL) {
- tmp = tmp->next;
- break;
- }
- } while (tmp != NULL);
- }
- break;
- }
- case XML_ATTRIBUTE_NODE:{
- xmlAttrPtr attr = (xmlAttrPtr) cur;
- xmlNodePtr tmp = attr->children;
-
- while (tmp != NULL) {
- if (tmp->type == XML_TEXT_NODE)
- xmlBufCat(buf, tmp->content);
- else
- xmlBufGetNodeContent(buf, tmp);
- tmp = tmp->next;
- }
- break;
- }
- case XML_COMMENT_NODE:
- case XML_PI_NODE:
- xmlBufCat(buf, cur->content);
- break;
- case XML_ENTITY_REF_NODE:{
- xmlEntityPtr ent;
- xmlNodePtr tmp;
-
- /* lookup entity declaration */
- ent = xmlGetDocEntity(cur->doc, cur->name);
- if (ent == NULL)
- return(-1);
-
- /* an entity content can be any "well balanced chunk",
- * i.e. the result of the content [43] production:
- * http://www.w3.org/TR/REC-xml#NT-content
- * -> we iterate through child nodes and recursive call
- * xmlNodeGetContent() which handles all possible node types */
- tmp = ent->children;
- while (tmp) {
- xmlBufGetNodeContent(buf, tmp);
- tmp = tmp->next;
- }
- break;
- }
- case XML_ENTITY_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- break;
- case XML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_HTML_DOCUMENT_NODE:
- cur = cur->children;
- while (cur!= NULL) {
- if ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_TEXT_NODE) ||
- (cur->type == XML_CDATA_SECTION_NODE)) {
- xmlBufGetNodeContent(buf, cur);
- }
- cur = cur->next;
- }
- break;
- case XML_NAMESPACE_DECL:
- xmlBufCat(buf, ((xmlNsPtr) cur)->href);
- break;
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- break;
- }
- return(0);
-}
-
-/**
- * xmlNodeGetContent:
- * @cur: the node being read
- *
- * Read the value of a node, this can be either the text carried
- * directly by this node if it's a TEXT node or the aggregate string
- * of the values carried by this node child's (TEXT and ENTITY_REF).
- * Entity references are substituted.
- * Returns a new #xmlChar * or NULL if no content is available.
- * It's up to the caller to free the memory with xmlFree().
- */
-xmlChar *
-xmlNodeGetContent(const xmlNode *cur)
-{
- if (cur == NULL)
- return (NULL);
- switch (cur->type) {
- case XML_DOCUMENT_FRAG_NODE:
- case XML_ELEMENT_NODE:{
- xmlBufPtr buf;
- xmlChar *ret;
-
- buf = xmlBufCreateSize(64);
- if (buf == NULL)
- return (NULL);
- xmlBufGetNodeContent(buf, cur);
- ret = xmlBufDetach(buf);
- xmlBufFree(buf);
- return (ret);
- }
- case XML_ATTRIBUTE_NODE:
- return(xmlGetPropNodeValueInternal((xmlAttrPtr) cur));
- case XML_COMMENT_NODE:
- case XML_PI_NODE:
- if (cur->content != NULL)
- return (xmlStrdup(cur->content));
- return (NULL);
- case XML_ENTITY_REF_NODE:{
- xmlEntityPtr ent;
- xmlBufPtr buf;
- xmlChar *ret;
-
- /* lookup entity declaration */
- ent = xmlGetDocEntity(cur->doc, cur->name);
- if (ent == NULL)
- return (NULL);
-
- buf = xmlBufCreate();
- if (buf == NULL)
- return (NULL);
-
- xmlBufGetNodeContent(buf, cur);
-
- ret = xmlBufDetach(buf);
- xmlBufFree(buf);
- return (ret);
- }
- case XML_ENTITY_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- return (NULL);
- case XML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_HTML_DOCUMENT_NODE: {
- xmlBufPtr buf;
- xmlChar *ret;
-
- buf = xmlBufCreate();
- if (buf == NULL)
- return (NULL);
-
- xmlBufGetNodeContent(buf, (xmlNodePtr) cur);
-
- ret = xmlBufDetach(buf);
- xmlBufFree(buf);
- return (ret);
- }
- case XML_NAMESPACE_DECL: {
- xmlChar *tmp;
-
- tmp = xmlStrdup(((xmlNsPtr) cur)->href);
- return (tmp);
- }
- case XML_ELEMENT_DECL:
- /* TODO !!! */
- return (NULL);
- case XML_ATTRIBUTE_DECL:
- /* TODO !!! */
- return (NULL);
- case XML_ENTITY_DECL:
- /* TODO !!! */
- return (NULL);
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- if (cur->content != NULL)
- return (xmlStrdup(cur->content));
- return (NULL);
- }
- return (NULL);
-}
-
-/**
- * xmlNodeSetContent:
- * @cur: the node being modified
- * @content: the new value of the content
- *
- * Replace the content of a node.
- * NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity
- * references, but XML special chars need to be escaped first by using
- * xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars().
- */
-void
-xmlNodeSetContent(xmlNodePtr cur, const xmlChar *content) {
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNodeSetContent : node == NULL\n");
-#endif
- return;
- }
- switch (cur->type) {
- case XML_DOCUMENT_FRAG_NODE:
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- if (cur->children != NULL) xmlFreeNodeList(cur->children);
- cur->children = xmlStringGetNodeList(cur->doc, content);
- UPDATE_LAST_CHILD_AND_PARENT(cur)
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- if ((cur->content != NULL) &&
- (cur->content != (xmlChar *) &(cur->properties))) {
- if (!((cur->doc != NULL) && (cur->doc->dict != NULL) &&
- (xmlDictOwns(cur->doc->dict, cur->content))))
- xmlFree(cur->content);
- }
- if (cur->children != NULL) xmlFreeNodeList(cur->children);
- cur->last = cur->children = NULL;
- if (content != NULL) {
- cur->content = xmlStrdup(content);
- } else
- cur->content = NULL;
- cur->properties = NULL;
- cur->nsDef = NULL;
- break;
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- break;
- case XML_NOTATION_NODE:
- break;
- case XML_DTD_NODE:
- break;
- case XML_NAMESPACE_DECL:
- break;
- case XML_ELEMENT_DECL:
- /* TODO !!! */
- break;
- case XML_ATTRIBUTE_DECL:
- /* TODO !!! */
- break;
- case XML_ENTITY_DECL:
- /* TODO !!! */
- break;
- }
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlNodeSetContentLen:
- * @cur: the node being modified
- * @content: the new value of the content
- * @len: the size of @content
- *
- * Replace the content of a node.
- * NOTE: @content is supposed to be a piece of XML CDATA, so it allows entity
- * references, but XML special chars need to be escaped first by using
- * xmlEncodeEntitiesReentrant() resp. xmlEncodeSpecialChars().
- */
-void
-xmlNodeSetContentLen(xmlNodePtr cur, const xmlChar *content, int len) {
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNodeSetContentLen : node == NULL\n");
-#endif
- return;
- }
- switch (cur->type) {
- case XML_DOCUMENT_FRAG_NODE:
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- if (cur->children != NULL) xmlFreeNodeList(cur->children);
- cur->children = xmlStringLenGetNodeList(cur->doc, content, len);
- UPDATE_LAST_CHILD_AND_PARENT(cur)
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_NOTATION_NODE:
- if ((cur->content != NULL) &&
- (cur->content != (xmlChar *) &(cur->properties))) {
- if (!((cur->doc != NULL) && (cur->doc->dict != NULL) &&
- (xmlDictOwns(cur->doc->dict, cur->content))))
- xmlFree(cur->content);
- }
- if (cur->children != NULL) xmlFreeNodeList(cur->children);
- cur->children = cur->last = NULL;
- if (content != NULL) {
- cur->content = xmlStrndup(content, len);
- } else
- cur->content = NULL;
- cur->properties = NULL;
- cur->nsDef = NULL;
- break;
- case XML_DOCUMENT_NODE:
- case XML_DTD_NODE:
- case XML_HTML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- break;
- case XML_ELEMENT_DECL:
- /* TODO !!! */
- break;
- case XML_ATTRIBUTE_DECL:
- /* TODO !!! */
- break;
- case XML_ENTITY_DECL:
- /* TODO !!! */
- break;
- }
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlNodeAddContentLen:
- * @cur: the node being modified
- * @content: extra content
- * @len: the size of @content
- *
- * Append the extra substring to the node content.
- * NOTE: In contrast to xmlNodeSetContentLen(), @content is supposed to be
- * raw text, so unescaped XML special chars are allowed, entity
- * references are not supported.
- */
-void
-xmlNodeAddContentLen(xmlNodePtr cur, const xmlChar *content, int len) {
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNodeAddContentLen : node == NULL\n");
-#endif
- return;
- }
- if (len <= 0) return;
- switch (cur->type) {
- case XML_DOCUMENT_FRAG_NODE:
- case XML_ELEMENT_NODE: {
- xmlNodePtr last, newNode, tmp;
-
- last = cur->last;
- newNode = xmlNewTextLen(content, len);
- if (newNode != NULL) {
- tmp = xmlAddChild(cur, newNode);
- if (tmp != newNode)
- return;
- if ((last != NULL) && (last->next == newNode)) {
- xmlTextMerge(last, newNode);
- }
- }
- break;
- }
- case XML_ATTRIBUTE_NODE:
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_NOTATION_NODE:
- if (content != NULL) {
- if ((cur->content == (xmlChar *) &(cur->properties)) ||
- ((cur->doc != NULL) && (cur->doc->dict != NULL) &&
- xmlDictOwns(cur->doc->dict, cur->content))) {
- cur->content = xmlStrncatNew(cur->content, content, len);
- cur->properties = NULL;
- cur->nsDef = NULL;
- break;
- }
- cur->content = xmlStrncat(cur->content, content, len);
- }
- case XML_DOCUMENT_NODE:
- case XML_DTD_NODE:
- case XML_HTML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- break;
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- break;
- }
-}
-
-/**
- * xmlNodeAddContent:
- * @cur: the node being modified
- * @content: extra content
- *
- * Append the extra substring to the node content.
- * NOTE: In contrast to xmlNodeSetContent(), @content is supposed to be
- * raw text, so unescaped XML special chars are allowed, entity
- * references are not supported.
- */
-void
-xmlNodeAddContent(xmlNodePtr cur, const xmlChar *content) {
- int len;
-
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNodeAddContent : node == NULL\n");
-#endif
- return;
- }
- if (content == NULL) return;
- len = xmlStrlen(content);
- xmlNodeAddContentLen(cur, content, len);
-}
-
-/**
- * xmlTextMerge:
- * @first: the first text node
- * @second: the second text node being merged
- *
- * Merge two text nodes into one
- * Returns the first text node augmented
- */
-xmlNodePtr
-xmlTextMerge(xmlNodePtr first, xmlNodePtr second) {
- if (first == NULL) return(second);
- if (second == NULL) return(first);
- if (first->type != XML_TEXT_NODE) return(first);
- if (second->type != XML_TEXT_NODE) return(first);
- if (second->name != first->name)
- return(first);
- xmlNodeAddContent(first, second->content);
- xmlUnlinkNode(second);
- xmlFreeNode(second);
- return(first);
-}
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-/**
- * xmlGetNsList:
- * @doc: the document
- * @node: the current node
- *
- * Search all the namespace applying to a given element.
- * Returns an NULL terminated array of all the #xmlNsPtr found
- * that need to be freed by the caller or NULL if no
- * namespace if defined
- */
-xmlNsPtr *
-xmlGetNsList(const xmlDoc *doc ATTRIBUTE_UNUSED, const xmlNode *node)
-{
- xmlNsPtr cur;
- xmlNsPtr *ret = NULL;
- int nbns = 0;
- int maxns = 10;
- int i;
-
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
- return(NULL);
-
- while (node != NULL) {
- if (node->type == XML_ELEMENT_NODE) {
- cur = node->nsDef;
- while (cur != NULL) {
- if (ret == NULL) {
- ret =
- (xmlNsPtr *) xmlMalloc((maxns + 1) *
- sizeof(xmlNsPtr));
- if (ret == NULL) {
- xmlTreeErrMemory("getting namespace list");
- return (NULL);
- }
- ret[nbns] = NULL;
- }
- for (i = 0; i < nbns; i++) {
- if ((cur->prefix == ret[i]->prefix) ||
- (xmlStrEqual(cur->prefix, ret[i]->prefix)))
- break;
- }
- if (i >= nbns) {
- if (nbns >= maxns) {
- maxns *= 2;
- ret = (xmlNsPtr *) xmlRealloc(ret,
- (maxns +
- 1) *
- sizeof(xmlNsPtr));
- if (ret == NULL) {
- xmlTreeErrMemory("getting namespace list");
- return (NULL);
- }
- }
- ret[nbns++] = cur;
- ret[nbns] = NULL;
- }
-
- cur = cur->next;
- }
- }
- node = node->parent;
- }
- return (ret);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-/*
-* xmlTreeEnsureXMLDecl:
-* @doc: the doc
-*
-* Ensures that there is an XML namespace declaration on the doc.
-*
-* Returns the XML ns-struct or NULL on API and internal errors.
-*/
-static xmlNsPtr
-xmlTreeEnsureXMLDecl(xmlDocPtr doc)
-{
- if (doc == NULL)
- return (NULL);
- if (doc->oldNs != NULL)
- return (doc->oldNs);
- {
- xmlNsPtr ns;
- ns = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
- if (ns == NULL) {
- xmlTreeErrMemory(
- "allocating the XML namespace");
- return (NULL);
- }
- memset(ns, 0, sizeof(xmlNs));
- ns->type = XML_LOCAL_NAMESPACE;
- ns->href = xmlStrdup(XML_XML_NAMESPACE);
- ns->prefix = xmlStrdup((const xmlChar *)"xml");
- doc->oldNs = ns;
- return (ns);
- }
-}
-
-/**
- * xmlSearchNs:
- * @doc: the document
- * @node: the current node
- * @nameSpace: the namespace prefix
- *
- * Search a Ns registered under a given name space for a document.
- * recurse on the parents until it finds the defined namespace
- * or return NULL otherwise.
- * @nameSpace can be NULL, this is a search for the default namespace.
- * We don't allow to cross entities boundaries. If you don't declare
- * the namespace within those you will be in troubles !!! A warning
- * is generated to cover this case.
- *
- * Returns the namespace pointer or NULL.
- */
-xmlNsPtr
-xmlSearchNs(xmlDocPtr doc, xmlNodePtr node, const xmlChar *nameSpace) {
-
- xmlNsPtr cur;
- const xmlNode *orig = node;
-
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL)) return(NULL);
- if ((nameSpace != NULL) &&
- (xmlStrEqual(nameSpace, (const xmlChar *)"xml"))) {
- if ((doc == NULL) && (node->type == XML_ELEMENT_NODE)) {
- /*
- * The XML-1.0 namespace is normally held on the root
- * element. In this case exceptionally create it on the
- * node element.
- */
- cur = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
- if (cur == NULL) {
- xmlTreeErrMemory("searching namespace");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNs));
- cur->type = XML_LOCAL_NAMESPACE;
- cur->href = xmlStrdup(XML_XML_NAMESPACE);
- cur->prefix = xmlStrdup((const xmlChar *)"xml");
- cur->next = node->nsDef;
- node->nsDef = cur;
- return(cur);
- }
- if (doc == NULL) {
- doc = node->doc;
- if (doc == NULL)
- return(NULL);
- }
- /*
- * Return the XML namespace declaration held by the doc.
- */
- if (doc->oldNs == NULL)
- return(xmlTreeEnsureXMLDecl(doc));
- else
- return(doc->oldNs);
- }
- while (node != NULL) {
- if ((node->type == XML_ENTITY_REF_NODE) ||
- (node->type == XML_ENTITY_NODE) ||
- (node->type == XML_ENTITY_DECL))
- return(NULL);
- if (node->type == XML_ELEMENT_NODE) {
- cur = node->nsDef;
- while (cur != NULL) {
- if ((cur->prefix == NULL) && (nameSpace == NULL) &&
- (cur->href != NULL))
- return(cur);
- if ((cur->prefix != NULL) && (nameSpace != NULL) &&
- (cur->href != NULL) &&
- (xmlStrEqual(cur->prefix, nameSpace)))
- return(cur);
- cur = cur->next;
- }
- if (orig != node) {
- cur = node->ns;
- if (cur != NULL) {
- if ((cur->prefix == NULL) && (nameSpace == NULL) &&
- (cur->href != NULL))
- return(cur);
- if ((cur->prefix != NULL) && (nameSpace != NULL) &&
- (cur->href != NULL) &&
- (xmlStrEqual(cur->prefix, nameSpace)))
- return(cur);
- }
- }
- }
- node = node->parent;
- }
- return(NULL);
-}
-
-/**
- * xmlNsInScope:
- * @doc: the document
- * @node: the current node
- * @ancestor: the ancestor carrying the namespace
- * @prefix: the namespace prefix
- *
- * Verify that the given namespace held on @ancestor is still in scope
- * on node.
- *
- * Returns 1 if true, 0 if false and -1 in case of error.
- */
-static int
-xmlNsInScope(xmlDocPtr doc ATTRIBUTE_UNUSED, xmlNodePtr node,
- xmlNodePtr ancestor, const xmlChar * prefix)
-{
- xmlNsPtr tst;
-
- while ((node != NULL) && (node != ancestor)) {
- if ((node->type == XML_ENTITY_REF_NODE) ||
- (node->type == XML_ENTITY_NODE) ||
- (node->type == XML_ENTITY_DECL))
- return (-1);
- if (node->type == XML_ELEMENT_NODE) {
- tst = node->nsDef;
- while (tst != NULL) {
- if ((tst->prefix == NULL)
- && (prefix == NULL))
- return (0);
- if ((tst->prefix != NULL)
- && (prefix != NULL)
- && (xmlStrEqual(tst->prefix, prefix)))
- return (0);
- tst = tst->next;
- }
- }
- node = node->parent;
- }
- if (node != ancestor)
- return (-1);
- return (1);
-}
-
-/**
- * xmlSearchNsByHref:
- * @doc: the document
- * @node: the current node
- * @href: the namespace value
- *
- * Search a Ns aliasing a given URI. Recurse on the parents until it finds
- * the defined namespace or return NULL otherwise.
- * Returns the namespace pointer or NULL.
- */
-xmlNsPtr
-xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node, const xmlChar * href)
-{
- xmlNsPtr cur;
- xmlNodePtr orig = node;
- int is_attr;
-
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) || (href == NULL))
- return (NULL);
- if (xmlStrEqual(href, XML_XML_NAMESPACE)) {
- /*
- * Only the document can hold the XML spec namespace.
- */
- if ((doc == NULL) && (node->type == XML_ELEMENT_NODE)) {
- /*
- * The XML-1.0 namespace is normally held on the root
- * element. In this case exceptionally create it on the
- * node element.
- */
- cur = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
- if (cur == NULL) {
- xmlTreeErrMemory("searching namespace");
- return (NULL);
- }
- memset(cur, 0, sizeof(xmlNs));
- cur->type = XML_LOCAL_NAMESPACE;
- cur->href = xmlStrdup(XML_XML_NAMESPACE);
- cur->prefix = xmlStrdup((const xmlChar *) "xml");
- cur->next = node->nsDef;
- node->nsDef = cur;
- return (cur);
- }
- if (doc == NULL) {
- doc = node->doc;
- if (doc == NULL)
- return(NULL);
- }
- /*
- * Return the XML namespace declaration held by the doc.
- */
- if (doc->oldNs == NULL)
- return(xmlTreeEnsureXMLDecl(doc));
- else
- return(doc->oldNs);
- }
- is_attr = (node->type == XML_ATTRIBUTE_NODE);
- while (node != NULL) {
- if ((node->type == XML_ENTITY_REF_NODE) ||
- (node->type == XML_ENTITY_NODE) ||
- (node->type == XML_ENTITY_DECL))
- return (NULL);
- if (node->type == XML_ELEMENT_NODE) {
- cur = node->nsDef;
- while (cur != NULL) {
- if ((cur->href != NULL) && (href != NULL) &&
- (xmlStrEqual(cur->href, href))) {
- if (((!is_attr) || (cur->prefix != NULL)) &&
- (xmlNsInScope(doc, orig, node, cur->prefix) == 1))
- return (cur);
- }
- cur = cur->next;
- }
- if (orig != node) {
- cur = node->ns;
- if (cur != NULL) {
- if ((cur->href != NULL) && (href != NULL) &&
- (xmlStrEqual(cur->href, href))) {
- if (((!is_attr) || (cur->prefix != NULL)) &&
- (xmlNsInScope(doc, orig, node, cur->prefix) == 1))
- return (cur);
- }
- }
- }
- }
- node = node->parent;
- }
- return (NULL);
-}
-
-/**
- * xmlNewReconciliedNs:
- * @doc: the document
- * @tree: a node expected to hold the new namespace
- * @ns: the original namespace
- *
- * This function tries to locate a namespace definition in a tree
- * ancestors, or create a new namespace definition node similar to
- * @ns trying to reuse the same prefix. However if the given prefix is
- * null (default namespace) or reused within the subtree defined by
- * @tree or on one of its ancestors then a new prefix is generated.
- * Returns the (new) namespace definition or NULL in case of error
- */
-static xmlNsPtr
-xmlNewReconciliedNs(xmlDocPtr doc, xmlNodePtr tree, xmlNsPtr ns) {
- xmlNsPtr def;
- xmlChar prefix[50];
- int counter = 1;
-
- if ((tree == NULL) || (tree->type != XML_ELEMENT_NODE)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewReconciliedNs : tree == NULL\n");
-#endif
- return(NULL);
- }
- if ((ns == NULL) || (ns->type != XML_NAMESPACE_DECL)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewReconciliedNs : ns == NULL\n");
-#endif
- return(NULL);
- }
- /*
- * Search an existing namespace definition inherited.
- */
- def = xmlSearchNsByHref(doc, tree, ns->href);
- if (def != NULL)
- return(def);
-
- /*
- * Find a close prefix which is not already in use.
- * Let's strip namespace prefixes longer than 20 chars !
- */
- if (ns->prefix == NULL)
- snprintf((char *) prefix, sizeof(prefix), "default");
- else
- snprintf((char *) prefix, sizeof(prefix), "%.20s", (char *)ns->prefix);
-
- def = xmlSearchNs(doc, tree, prefix);
- while (def != NULL) {
- if (counter > 1000) return(NULL);
- if (ns->prefix == NULL)
- snprintf((char *) prefix, sizeof(prefix), "default%d", counter++);
- else
- snprintf((char *) prefix, sizeof(prefix), "%.20s%d",
- (char *)ns->prefix, counter++);
- def = xmlSearchNs(doc, tree, prefix);
- }
-
- /*
- * OK, now we are ready to create a new one.
- */
- def = xmlNewNs(tree, ns->href, prefix);
- return(def);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlReconciliateNs:
- * @doc: the document
- * @tree: a node defining the subtree to reconciliate
- *
- * This function checks that all the namespaces declared within the given
- * tree are properly declared. This is needed for example after Copy or Cut
- * and then paste operations. The subtree may still hold pointers to
- * namespace declarations outside the subtree or invalid/masked. As much
- * as possible the function try to reuse the existing namespaces found in
- * the new environment. If not possible the new namespaces are redeclared
- * on @tree at the top of the given subtree.
- * Returns the number of namespace declarations created or -1 in case of error.
- */
-int
-xmlReconciliateNs(xmlDocPtr doc, xmlNodePtr tree) {
- xmlNsPtr *oldNs = NULL;
- xmlNsPtr *newNs = NULL;
- int sizeCache = 0;
- int nbCache = 0;
-
- xmlNsPtr n;
- xmlNodePtr node = tree;
- xmlAttrPtr attr;
- int ret = 0, i;
-
- if ((node == NULL) || (node->type != XML_ELEMENT_NODE)) return(-1);
- if ((doc == NULL) || (doc->type != XML_DOCUMENT_NODE)) return(-1);
- if (node->doc != doc) return(-1);
- while (node != NULL) {
- /*
- * Reconciliate the node namespace
- */
- if (node->ns != NULL) {
- /*
- * initialize the cache if needed
- */
- if (sizeCache == 0) {
- sizeCache = 10;
- oldNs = (xmlNsPtr *) xmlMalloc(sizeCache *
- sizeof(xmlNsPtr));
- if (oldNs == NULL) {
- xmlTreeErrMemory("fixing namespaces");
- return(-1);
- }
- newNs = (xmlNsPtr *) xmlMalloc(sizeCache *
- sizeof(xmlNsPtr));
- if (newNs == NULL) {
- xmlTreeErrMemory("fixing namespaces");
- xmlFree(oldNs);
- return(-1);
- }
- }
- for (i = 0;i < nbCache;i++) {
- if (oldNs[i] == node->ns) {
- node->ns = newNs[i];
- break;
- }
- }
- if (i == nbCache) {
- /*
- * OK we need to recreate a new namespace definition
- */
- n = xmlNewReconciliedNs(doc, tree, node->ns);
- if (n != NULL) { /* :-( what if else ??? */
- /*
- * check if we need to grow the cache buffers.
- */
- if (sizeCache <= nbCache) {
- sizeCache *= 2;
- oldNs = (xmlNsPtr *) xmlRealloc(oldNs, sizeCache *
- sizeof(xmlNsPtr));
- if (oldNs == NULL) {
- xmlTreeErrMemory("fixing namespaces");
- xmlFree(newNs);
- return(-1);
- }
- newNs = (xmlNsPtr *) xmlRealloc(newNs, sizeCache *
- sizeof(xmlNsPtr));
- if (newNs == NULL) {
- xmlTreeErrMemory("fixing namespaces");
- xmlFree(oldNs);
- return(-1);
- }
- }
- newNs[nbCache] = n;
- oldNs[nbCache++] = node->ns;
- node->ns = n;
- }
- }
- }
- /*
- * now check for namespace hold by attributes on the node.
- */
- if (node->type == XML_ELEMENT_NODE) {
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns != NULL) {
- /*
- * initialize the cache if needed
- */
- if (sizeCache == 0) {
- sizeCache = 10;
- oldNs = (xmlNsPtr *) xmlMalloc(sizeCache *
- sizeof(xmlNsPtr));
- if (oldNs == NULL) {
- xmlTreeErrMemory("fixing namespaces");
- return(-1);
- }
- newNs = (xmlNsPtr *) xmlMalloc(sizeCache *
- sizeof(xmlNsPtr));
- if (newNs == NULL) {
- xmlTreeErrMemory("fixing namespaces");
- xmlFree(oldNs);
- return(-1);
- }
- }
- for (i = 0;i < nbCache;i++) {
- if (oldNs[i] == attr->ns) {
- attr->ns = newNs[i];
- break;
- }
- }
- if (i == nbCache) {
- /*
- * OK we need to recreate a new namespace definition
- */
- n = xmlNewReconciliedNs(doc, tree, attr->ns);
- if (n != NULL) { /* :-( what if else ??? */
- /*
- * check if we need to grow the cache buffers.
- */
- if (sizeCache <= nbCache) {
- sizeCache *= 2;
- oldNs = (xmlNsPtr *) xmlRealloc(oldNs,
- sizeCache * sizeof(xmlNsPtr));
- if (oldNs == NULL) {
- xmlTreeErrMemory("fixing namespaces");
- xmlFree(newNs);
- return(-1);
- }
- newNs = (xmlNsPtr *) xmlRealloc(newNs,
- sizeCache * sizeof(xmlNsPtr));
- if (newNs == NULL) {
- xmlTreeErrMemory("fixing namespaces");
- xmlFree(oldNs);
- return(-1);
- }
- }
- newNs[nbCache] = n;
- oldNs[nbCache++] = attr->ns;
- attr->ns = n;
- }
- }
- }
- attr = attr->next;
- }
- }
-
- /*
- * Browse the full subtree, deep first
- */
- if ((node->children != NULL) && (node->type != XML_ENTITY_REF_NODE)) {
- /* deep first */
- node = node->children;
- } else if ((node != tree) && (node->next != NULL)) {
- /* then siblings */
- node = node->next;
- } else if (node != tree) {
- /* go up to parents->next if needed */
- while (node != tree) {
- if (node->parent != NULL)
- node = node->parent;
- if ((node != tree) && (node->next != NULL)) {
- node = node->next;
- break;
- }
- if (node->parent == NULL) {
- node = NULL;
- break;
- }
- }
- /* exit condition */
- if (node == tree)
- node = NULL;
- } else
- break;
- }
- if (oldNs != NULL)
- xmlFree(oldNs);
- if (newNs != NULL)
- xmlFree(newNs);
- return(ret);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-static xmlAttrPtr
-xmlGetPropNodeInternal(const xmlNode *node, const xmlChar *name,
- const xmlChar *nsName, int useDTD)
-{
- xmlAttrPtr prop;
-
- if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL))
- return(NULL);
-
- if (node->properties != NULL) {
- prop = node->properties;
- if (nsName == NULL) {
- /*
- * We want the attr to be in no namespace.
- */
- do {
- if ((prop->ns == NULL) && xmlStrEqual(prop->name, name)) {
- return(prop);
- }
- prop = prop->next;
- } while (prop != NULL);
- } else {
- /*
- * We want the attr to be in the specified namespace.
- */
- do {
- if ((prop->ns != NULL) && xmlStrEqual(prop->name, name) &&
- ((prop->ns->href == nsName) ||
- xmlStrEqual(prop->ns->href, nsName)))
- {
- return(prop);
- }
- prop = prop->next;
- } while (prop != NULL);
- }
- }
-
-#ifdef LIBXML_TREE_ENABLED
- if (! useDTD)
- return(NULL);
- /*
- * Check if there is a default/fixed attribute declaration in
- * the internal or external subset.
- */
- if ((node->doc != NULL) && (node->doc->intSubset != NULL)) {
- xmlDocPtr doc = node->doc;
- xmlAttributePtr attrDecl = NULL;
- xmlChar *elemQName, *tmpstr = NULL;
-
- /*
- * We need the QName of the element for the DTD-lookup.
- */
- if ((node->ns != NULL) && (node->ns->prefix != NULL)) {
- tmpstr = xmlStrdup(node->ns->prefix);
- tmpstr = xmlStrcat(tmpstr, BAD_CAST ":");
- tmpstr = xmlStrcat(tmpstr, node->name);
- if (tmpstr == NULL)
- return(NULL);
- elemQName = tmpstr;
- } else
- elemQName = (xmlChar *) node->name;
- if (nsName == NULL) {
- /*
- * The common and nice case: Attr in no namespace.
- */
- attrDecl = xmlGetDtdQAttrDesc(doc->intSubset,
- elemQName, name, NULL);
- if ((attrDecl == NULL) && (doc->extSubset != NULL)) {
- attrDecl = xmlGetDtdQAttrDesc(doc->extSubset,
- elemQName, name, NULL);
- }
- } else {
- xmlNsPtr *nsList, *cur;
-
- /*
- * The ugly case: Search using the prefixes of in-scope
- * ns-decls corresponding to @nsName.
- */
- nsList = xmlGetNsList(node->doc, node);
- if (nsList == NULL) {
- if (tmpstr != NULL)
- xmlFree(tmpstr);
- return(NULL);
- }
- cur = nsList;
- while (*cur != NULL) {
- if (xmlStrEqual((*cur)->href, nsName)) {
- attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, elemQName,
- name, (*cur)->prefix);
- if (attrDecl)
- break;
- if (doc->extSubset != NULL) {
- attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, elemQName,
- name, (*cur)->prefix);
- if (attrDecl)
- break;
- }
- }
- cur++;
- }
- xmlFree(nsList);
- }
- if (tmpstr != NULL)
- xmlFree(tmpstr);
- /*
- * Only default/fixed attrs are relevant.
- */
- if ((attrDecl != NULL) && (attrDecl->defaultValue != NULL))
- return((xmlAttrPtr) attrDecl);
- }
-#endif /* LIBXML_TREE_ENABLED */
- return(NULL);
-}
-
-static xmlChar*
-xmlGetPropNodeValueInternal(const xmlAttr *prop)
-{
- if (prop == NULL)
- return(NULL);
- if (prop->type == XML_ATTRIBUTE_NODE) {
- /*
- * Note that we return at least the empty string.
- * TODO: Do we really always want that?
- */
- if (prop->children != NULL) {
- if ((prop->children->next == NULL) &&
- ((prop->children->type == XML_TEXT_NODE) ||
- (prop->children->type == XML_CDATA_SECTION_NODE)))
- {
- /*
- * Optimization for the common case: only 1 text node.
- */
- return(xmlStrdup(prop->children->content));
- } else {
- xmlChar *ret;
-
- ret = xmlNodeListGetString(prop->doc, prop->children, 1);
- if (ret != NULL)
- return(ret);
- }
- }
- return(xmlStrdup((xmlChar *)""));
- } else if (prop->type == XML_ATTRIBUTE_DECL) {
- return(xmlStrdup(((xmlAttributePtr)prop)->defaultValue));
- }
- return(NULL);
-}
-
-/**
- * xmlHasProp:
- * @node: the node
- * @name: the attribute name
- *
- * Search an attribute associated to a node
- * This function also looks in DTD attribute declaration for #FIXED or
- * default declaration values unless DTD use has been turned off.
- *
- * Returns the attribute or the attribute declaration or NULL if
- * neither was found.
- */
-xmlAttrPtr
-xmlHasProp(const xmlNode *node, const xmlChar *name) {
- xmlAttrPtr prop;
- xmlDocPtr doc;
-
- if ((node == NULL) || (node->type != XML_ELEMENT_NODE) || (name == NULL))
- return(NULL);
- /*
- * Check on the properties attached to the node
- */
- prop = node->properties;
- while (prop != NULL) {
- if (xmlStrEqual(prop->name, name)) {
- return(prop);
- }
- prop = prop->next;
- }
- if (!xmlCheckDTD) return(NULL);
-
- /*
- * Check if there is a default declaration in the internal
- * or external subsets
- */
- doc = node->doc;
- if (doc != NULL) {
- xmlAttributePtr attrDecl;
- if (doc->intSubset != NULL) {
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, node->name, name);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset, node->name, name);
- if ((attrDecl != NULL) && (attrDecl->defaultValue != NULL))
- /* return attribute declaration only if a default value is given
- (that includes #FIXED declarations) */
- return((xmlAttrPtr) attrDecl);
- }
- }
- return(NULL);
-}
-
-/**
- * xmlHasNsProp:
- * @node: the node
- * @name: the attribute name
- * @nameSpace: the URI of the namespace
- *
- * Search for an attribute associated to a node
- * This attribute has to be anchored in the namespace specified.
- * This does the entity substitution.
- * This function looks in DTD attribute declaration for #FIXED or
- * default declaration values unless DTD use has been turned off.
- * Note that a namespace of NULL indicates to use the default namespace.
- *
- * Returns the attribute or the attribute declaration or NULL
- * if neither was found.
- */
-xmlAttrPtr
-xmlHasNsProp(const xmlNode *node, const xmlChar *name, const xmlChar *nameSpace) {
-
- return(xmlGetPropNodeInternal(node, name, nameSpace, xmlCheckDTD));
-}
-
-/**
- * xmlGetProp:
- * @node: the node
- * @name: the attribute name
- *
- * Search and get the value of an attribute associated to a node
- * This does the entity substitution.
- * This function looks in DTD attribute declaration for #FIXED or
- * default declaration values unless DTD use has been turned off.
- * NOTE: this function acts independently of namespaces associated
- * to the attribute. Use xmlGetNsProp() or xmlGetNoNsProp()
- * for namespace aware processing.
- *
- * Returns the attribute value or NULL if not found.
- * It's up to the caller to free the memory with xmlFree().
- */
-xmlChar *
-xmlGetProp(const xmlNode *node, const xmlChar *name) {
- xmlAttrPtr prop;
-
- prop = xmlHasProp(node, name);
- if (prop == NULL)
- return(NULL);
- return(xmlGetPropNodeValueInternal(prop));
-}
-
-/**
- * xmlGetNoNsProp:
- * @node: the node
- * @name: the attribute name
- *
- * Search and get the value of an attribute associated to a node
- * This does the entity substitution.
- * This function looks in DTD attribute declaration for #FIXED or
- * default declaration values unless DTD use has been turned off.
- * This function is similar to xmlGetProp except it will accept only
- * an attribute in no namespace.
- *
- * Returns the attribute value or NULL if not found.
- * It's up to the caller to free the memory with xmlFree().
- */
-xmlChar *
-xmlGetNoNsProp(const xmlNode *node, const xmlChar *name) {
- xmlAttrPtr prop;
-
- prop = xmlGetPropNodeInternal(node, name, NULL, xmlCheckDTD);
- if (prop == NULL)
- return(NULL);
- return(xmlGetPropNodeValueInternal(prop));
-}
-
-/**
- * xmlGetNsProp:
- * @node: the node
- * @name: the attribute name
- * @nameSpace: the URI of the namespace
- *
- * Search and get the value of an attribute associated to a node
- * This attribute has to be anchored in the namespace specified.
- * This does the entity substitution.
- * This function looks in DTD attribute declaration for #FIXED or
- * default declaration values unless DTD use has been turned off.
- *
- * Returns the attribute value or NULL if not found.
- * It's up to the caller to free the memory with xmlFree().
- */
-xmlChar *
-xmlGetNsProp(const xmlNode *node, const xmlChar *name, const xmlChar *nameSpace) {
- xmlAttrPtr prop;
-
- prop = xmlGetPropNodeInternal(node, name, nameSpace, xmlCheckDTD);
- if (prop == NULL)
- return(NULL);
- return(xmlGetPropNodeValueInternal(prop));
-}
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-/**
- * xmlUnsetProp:
- * @node: the node
- * @name: the attribute name
- *
- * Remove an attribute carried by a node.
- * This handles only attributes in no namespace.
- * Returns 0 if successful, -1 if not found
- */
-int
-xmlUnsetProp(xmlNodePtr node, const xmlChar *name) {
- xmlAttrPtr prop;
-
- prop = xmlGetPropNodeInternal(node, name, NULL, 0);
- if (prop == NULL)
- return(-1);
- xmlUnlinkNode((xmlNodePtr) prop);
- xmlFreeProp(prop);
- return(0);
-}
-
-/**
- * xmlUnsetNsProp:
- * @node: the node
- * @ns: the namespace definition
- * @name: the attribute name
- *
- * Remove an attribute carried by a node.
- * Returns 0 if successful, -1 if not found
- */
-int
-xmlUnsetNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name) {
- xmlAttrPtr prop;
-
- prop = xmlGetPropNodeInternal(node, name, (ns != NULL) ? ns->href : NULL, 0);
- if (prop == NULL)
- return(-1);
- xmlUnlinkNode((xmlNodePtr) prop);
- xmlFreeProp(prop);
- return(0);
-}
-#endif
-
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_XINCLUDE_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED) || defined(LIBXML_HTML_ENABLED)
-/**
- * xmlSetProp:
- * @node: the node
- * @name: the attribute name (a QName)
- * @value: the attribute value
- *
- * Set (or reset) an attribute carried by a node.
- * If @name has a prefix, then the corresponding
- * namespace-binding will be used, if in scope; it is an
- * error it there's no such ns-binding for the prefix in
- * scope.
- * Returns the attribute pointer.
- *
- */
-xmlAttrPtr
-xmlSetProp(xmlNodePtr node, const xmlChar *name, const xmlChar *value) {
- int len;
- const xmlChar *nqname;
-
- if ((node == NULL) || (name == NULL) || (node->type != XML_ELEMENT_NODE))
- return(NULL);
-
- /*
- * handle QNames
- */
- nqname = xmlSplitQName3(name, &len);
- if (nqname != NULL) {
- xmlNsPtr ns;
- xmlChar *prefix = xmlStrndup(name, len);
- ns = xmlSearchNs(node->doc, node, prefix);
- if (prefix != NULL)
- xmlFree(prefix);
- if (ns != NULL)
- return(xmlSetNsProp(node, ns, nqname, value));
- }
- return(xmlSetNsProp(node, NULL, name, value));
-}
-
-/**
- * xmlSetNsProp:
- * @node: the node
- * @ns: the namespace definition
- * @name: the attribute name
- * @value: the attribute value
- *
- * Set (or reset) an attribute carried by a node.
- * The ns structure must be in scope, this is not checked
- *
- * Returns the attribute pointer.
- */
-xmlAttrPtr
-xmlSetNsProp(xmlNodePtr node, xmlNsPtr ns, const xmlChar *name,
- const xmlChar *value)
-{
- xmlAttrPtr prop;
-
- if (ns && (ns->href == NULL))
- return(NULL);
- prop = xmlGetPropNodeInternal(node, name, (ns != NULL) ? ns->href : NULL, 0);
- if (prop != NULL) {
- /*
- * Modify the attribute's value.
- */
- if (prop->atype == XML_ATTRIBUTE_ID) {
- xmlRemoveID(node->doc, prop);
- prop->atype = XML_ATTRIBUTE_ID;
- }
- if (prop->children != NULL)
- xmlFreeNodeList(prop->children);
- prop->children = NULL;
- prop->last = NULL;
- prop->ns = ns;
- if (value != NULL) {
- xmlNodePtr tmp;
-
- if(!xmlCheckUTF8(value)) {
- xmlTreeErr(XML_TREE_NOT_UTF8, (xmlNodePtr) node->doc,
- NULL);
- if (node->doc != NULL)
- node->doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
- }
- prop->children = xmlNewDocText(node->doc, value);
- prop->last = NULL;
- tmp = prop->children;
- while (tmp != NULL) {
- tmp->parent = (xmlNodePtr) prop;
- if (tmp->next == NULL)
- prop->last = tmp;
- tmp = tmp->next;
- }
- }
- if (prop->atype == XML_ATTRIBUTE_ID)
- xmlAddID(NULL, node->doc, value, prop);
- return(prop);
- }
- /*
- * No equal attr found; create a new one.
- */
- return(xmlNewPropInternal(node, ns, name, value, 0));
-}
-
-#endif /* LIBXML_TREE_ENABLED */
-
-/**
- * xmlNodeIsText:
- * @node: the node
- *
- * Is this node a Text node ?
- * Returns 1 yes, 0 no
- */
-int
-xmlNodeIsText(const xmlNode *node) {
- if (node == NULL) return(0);
-
- if (node->type == XML_TEXT_NODE) return(1);
- return(0);
-}
-
-/**
- * xmlIsBlankNode:
- * @node: the node
- *
- * Checks whether this node is an empty or whitespace only
- * (and possibly ignorable) text-node.
- *
- * Returns 1 yes, 0 no
- */
-int
-xmlIsBlankNode(const xmlNode *node) {
- const xmlChar *cur;
- if (node == NULL) return(0);
-
- if ((node->type != XML_TEXT_NODE) &&
- (node->type != XML_CDATA_SECTION_NODE))
- return(0);
- if (node->content == NULL) return(1);
- cur = node->content;
- while (*cur != 0) {
- if (!IS_BLANK_CH(*cur)) return(0);
- cur++;
- }
-
- return(1);
-}
-
-/**
- * xmlTextConcat:
- * @node: the node
- * @content: the content
- * @len: @content length
- *
- * Concat the given string at the end of the existing node content
- *
- * Returns -1 in case of error, 0 otherwise
- */
-
-int
-xmlTextConcat(xmlNodePtr node, const xmlChar *content, int len) {
- if (node == NULL) return(-1);
-
- if ((node->type != XML_TEXT_NODE) &&
- (node->type != XML_CDATA_SECTION_NODE) &&
- (node->type != XML_COMMENT_NODE) &&
- (node->type != XML_PI_NODE)) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlTextConcat: node is not text nor CDATA\n");
-#endif
- return(-1);
- }
- /* need to check if content is currently in the dictionary */
- if ((node->content == (xmlChar *) &(node->properties)) ||
- ((node->doc != NULL) && (node->doc->dict != NULL) &&
- xmlDictOwns(node->doc->dict, node->content))) {
- node->content = xmlStrncatNew(node->content, content, len);
- } else {
- node->content = xmlStrncat(node->content, content, len);
- }
- node->properties = NULL;
- if (node->content == NULL)
- return(-1);
- return(0);
-}
-
-/************************************************************************
- * *
- * Output : to a FILE or in memory *
- * *
- ************************************************************************/
-
-/**
- * xmlBufferCreate:
- *
- * routine to create an XML buffer.
- * returns the new structure.
- */
-xmlBufferPtr
-xmlBufferCreate(void) {
- xmlBufferPtr ret;
-
- ret = (xmlBufferPtr) xmlMalloc(sizeof(xmlBuffer));
- if (ret == NULL) {
- xmlTreeErrMemory("creating buffer");
- return(NULL);
- }
- ret->use = 0;
- ret->size = xmlDefaultBufferSize;
- ret->alloc = xmlBufferAllocScheme;
- ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar));
- if (ret->content == NULL) {
- xmlTreeErrMemory("creating buffer");
- xmlFree(ret);
- return(NULL);
- }
- ret->content[0] = 0;
- ret->contentIO = NULL;
- return(ret);
-}
-
-/**
- * xmlBufferCreateSize:
- * @size: initial size of buffer
- *
- * routine to create an XML buffer.
- * returns the new structure.
- */
-xmlBufferPtr
-xmlBufferCreateSize(size_t size) {
- xmlBufferPtr ret;
-
- ret = (xmlBufferPtr) xmlMalloc(sizeof(xmlBuffer));
- if (ret == NULL) {
- xmlTreeErrMemory("creating buffer");
- return(NULL);
- }
- ret->use = 0;
- ret->alloc = xmlBufferAllocScheme;
- ret->size = (size ? size+2 : 0); /* +1 for ending null */
- if (ret->size){
- ret->content = (xmlChar *) xmlMallocAtomic(ret->size * sizeof(xmlChar));
- if (ret->content == NULL) {
- xmlTreeErrMemory("creating buffer");
- xmlFree(ret);
- return(NULL);
- }
- ret->content[0] = 0;
- } else
- ret->content = NULL;
- ret->contentIO = NULL;
- return(ret);
-}
-
-/**
- * xmlBufferDetach:
- * @buf: the buffer
- *
- * Remove the string contained in a buffer and gie it back to the
- * caller. The buffer is reset to an empty content.
- * This doesn't work with immutable buffers as they can't be reset.
- *
- * Returns the previous string contained by the buffer.
- */
-xmlChar *
-xmlBufferDetach(xmlBufferPtr buf) {
- xmlChar *ret;
-
- if (buf == NULL)
- return(NULL);
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE)
- return(NULL);
-
- ret = buf->content;
- buf->content = NULL;
- buf->size = 0;
- buf->use = 0;
-
- return ret;
-}
-
-
-/**
- * xmlBufferCreateStatic:
- * @mem: the memory area
- * @size: the size in byte
- *
- * routine to create an XML buffer from an immutable memory area.
- * The area won't be modified nor copied, and is expected to be
- * present until the end of the buffer lifetime.
- *
- * returns the new structure.
- */
-xmlBufferPtr
-xmlBufferCreateStatic(void *mem, size_t size) {
- xmlBufferPtr ret;
-
- if ((mem == NULL) || (size == 0))
- return(NULL);
-
- ret = (xmlBufferPtr) xmlMalloc(sizeof(xmlBuffer));
- if (ret == NULL) {
- xmlTreeErrMemory("creating buffer");
- return(NULL);
- }
- ret->use = size;
- ret->size = size;
- ret->alloc = XML_BUFFER_ALLOC_IMMUTABLE;
- ret->content = (xmlChar *) mem;
- return(ret);
-}
-
-/**
- * xmlBufferSetAllocationScheme:
- * @buf: the buffer to tune
- * @scheme: allocation scheme to use
- *
- * Sets the allocation scheme for this buffer
- */
-void
-xmlBufferSetAllocationScheme(xmlBufferPtr buf,
- xmlBufferAllocationScheme scheme) {
- if (buf == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferSetAllocationScheme: buf == NULL\n");
-#endif
- return;
- }
- if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) ||
- (buf->alloc == XML_BUFFER_ALLOC_IO)) return;
- if ((scheme == XML_BUFFER_ALLOC_DOUBLEIT) ||
- (scheme == XML_BUFFER_ALLOC_EXACT) ||
- (scheme == XML_BUFFER_ALLOC_HYBRID) ||
- (scheme == XML_BUFFER_ALLOC_IMMUTABLE))
- buf->alloc = scheme;
-}
-
-/**
- * xmlBufferFree:
- * @buf: the buffer to free
- *
- * Frees an XML buffer. It frees both the content and the structure which
- * encapsulate it.
- */
-void
-xmlBufferFree(xmlBufferPtr buf) {
- if (buf == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferFree: buf == NULL\n");
-#endif
- return;
- }
-
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) &&
- (buf->contentIO != NULL)) {
- xmlFree(buf->contentIO);
- } else if ((buf->content != NULL) &&
- (buf->alloc != XML_BUFFER_ALLOC_IMMUTABLE)) {
- xmlFree(buf->content);
- }
- xmlFree(buf);
-}
-
-/**
- * xmlBufferEmpty:
- * @buf: the buffer
- *
- * empty a buffer.
- */
-void
-xmlBufferEmpty(xmlBufferPtr buf) {
- if (buf == NULL) return;
- if (buf->content == NULL) return;
- buf->use = 0;
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) {
- buf->content = BAD_CAST "";
- } else if ((buf->alloc == XML_BUFFER_ALLOC_IO) &&
- (buf->contentIO != NULL)) {
- size_t start_buf = buf->content - buf->contentIO;
-
- buf->size += start_buf;
- buf->content = buf->contentIO;
- buf->content[0] = 0;
- } else {
- buf->content[0] = 0;
- }
-}
-
-/**
- * xmlBufferShrink:
- * @buf: the buffer to dump
- * @len: the number of xmlChar to remove
- *
- * Remove the beginning of an XML buffer.
- *
- * Returns the number of #xmlChar removed, or -1 in case of failure.
- */
-int
-xmlBufferShrink(xmlBufferPtr buf, unsigned int len) {
- if (buf == NULL) return(-1);
- if (len == 0) return(0);
- if (len > buf->use) return(-1);
-
- buf->use -= len;
- if ((buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) ||
- ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL))) {
- /*
- * we just move the content pointer, but also make sure
- * the perceived buffer size has shrinked accordingly
- */
- buf->content += len;
- buf->size -= len;
-
- /*
- * sometimes though it maybe be better to really shrink
- * on IO buffers
- */
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
- size_t start_buf = buf->content - buf->contentIO;
- if (start_buf >= buf->size) {
- memmove(buf->contentIO, &buf->content[0], buf->use);
- buf->content = buf->contentIO;
- buf->content[buf->use] = 0;
- buf->size += start_buf;
- }
- }
- } else {
- memmove(buf->content, &buf->content[len], buf->use);
- buf->content[buf->use] = 0;
- }
- return(len);
-}
-
-/**
- * xmlBufferGrow:
- * @buf: the buffer
- * @len: the minimum free size to allocate
- *
- * Grow the available space of an XML buffer.
- *
- * Returns the new available space or -1 in case of error
- */
-int
-xmlBufferGrow(xmlBufferPtr buf, unsigned int len) {
- int size;
- xmlChar *newbuf;
-
- if (buf == NULL) return(-1);
-
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
- if (len + buf->use < buf->size) return(0);
-
- /*
- * Windows has a BIG problem on realloc timing, so we try to double
- * the buffer size (if that's enough) (bug 146697)
- * Apparently BSD too, and it's probably best for linux too
- * On an embedded system this may be something to change
- */
-#if 1
- if (buf->size > len)
- size = buf->size * 2;
- else
- size = buf->use + len + 100;
-#else
- size = buf->use + len + 100;
-#endif
-
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
- size_t start_buf = buf->content - buf->contentIO;
-
- newbuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + size);
- if (newbuf == NULL) {
- xmlTreeErrMemory("growing buffer");
- return(-1);
- }
- buf->contentIO = newbuf;
- buf->content = newbuf + start_buf;
- } else {
- newbuf = (xmlChar *) xmlRealloc(buf->content, size);
- if (newbuf == NULL) {
- xmlTreeErrMemory("growing buffer");
- return(-1);
- }
- buf->content = newbuf;
- }
- buf->size = size;
- return(buf->size - buf->use);
-}
-
-/**
- * xmlBufferDump:
- * @file: the file output
- * @buf: the buffer to dump
- *
- * Dumps an XML buffer to a FILE *.
- * Returns the number of #xmlChar written
- */
-int
-xmlBufferDump(FILE *file, xmlBufferPtr buf) {
- int ret;
-
- if (buf == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferDump: buf == NULL\n");
-#endif
- return(0);
- }
- if (buf->content == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferDump: buf->content == NULL\n");
-#endif
- return(0);
- }
- if (file == NULL)
- file = stdout;
- ret = fwrite(buf->content, sizeof(xmlChar), buf->use, file);
- return(ret);
-}
-
-/**
- * xmlBufferContent:
- * @buf: the buffer
- *
- * Function to extract the content of a buffer
- *
- * Returns the internal content
- */
-
-const xmlChar *
-xmlBufferContent(const xmlBuffer *buf)
-{
- if(!buf)
- return NULL;
-
- return buf->content;
-}
-
-/**
- * xmlBufferLength:
- * @buf: the buffer
- *
- * Function to get the length of a buffer
- *
- * Returns the length of data in the internal content
- */
-
-int
-xmlBufferLength(const xmlBuffer *buf)
-{
- if(!buf)
- return 0;
-
- return buf->use;
-}
-
-/**
- * xmlBufferResize:
- * @buf: the buffer to resize
- * @size: the desired size
- *
- * Resize a buffer to accommodate minimum size of @size.
- *
- * Returns 0 in case of problems, 1 otherwise
- */
-int
-xmlBufferResize(xmlBufferPtr buf, unsigned int size)
-{
- unsigned int newSize;
- xmlChar* rebuf = NULL;
- size_t start_buf;
-
- if (buf == NULL)
- return(0);
-
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return(0);
-
- /* Don't resize if we don't have to */
- if (size < buf->size)
- return 1;
-
- /* figure out new size */
- switch (buf->alloc){
- case XML_BUFFER_ALLOC_IO:
- case XML_BUFFER_ALLOC_DOUBLEIT:
- /*take care of empty case*/
- newSize = (buf->size ? buf->size*2 : size + 10);
- while (size > newSize) {
- if (newSize > UINT_MAX / 2) {
- xmlTreeErrMemory("growing buffer");
- return 0;
- }
- newSize *= 2;
- }
- break;
- case XML_BUFFER_ALLOC_EXACT:
- newSize = size+10;
- break;
- case XML_BUFFER_ALLOC_HYBRID:
- if (buf->use < BASE_BUFFER_SIZE)
- newSize = size;
- else {
- newSize = buf->size * 2;
- while (size > newSize) {
- if (newSize > UINT_MAX / 2) {
- xmlTreeErrMemory("growing buffer");
- return 0;
- }
- newSize *= 2;
- }
- }
- break;
-
- default:
- newSize = size+10;
- break;
- }
-
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
- start_buf = buf->content - buf->contentIO;
-
- if (start_buf > newSize) {
- /* move data back to start */
- memmove(buf->contentIO, buf->content, buf->use);
- buf->content = buf->contentIO;
- buf->content[buf->use] = 0;
- buf->size += start_buf;
- } else {
- rebuf = (xmlChar *) xmlRealloc(buf->contentIO, start_buf + newSize);
- if (rebuf == NULL) {
- xmlTreeErrMemory("growing buffer");
- return 0;
- }
- buf->contentIO = rebuf;
- buf->content = rebuf + start_buf;
- }
- } else {
- if (buf->content == NULL) {
- rebuf = (xmlChar *) xmlMallocAtomic(newSize);
- } else if (buf->size - buf->use < 100) {
- rebuf = (xmlChar *) xmlRealloc(buf->content, newSize);
- } else {
- /*
- * if we are reallocating a buffer far from being full, it's
- * better to make a new allocation and copy only the used range
- * and free the old one.
- */
- rebuf = (xmlChar *) xmlMallocAtomic(newSize);
- if (rebuf != NULL) {
- memcpy(rebuf, buf->content, buf->use);
- xmlFree(buf->content);
- rebuf[buf->use] = 0;
- }
- }
- if (rebuf == NULL) {
- xmlTreeErrMemory("growing buffer");
- return 0;
- }
- buf->content = rebuf;
- }
- buf->size = newSize;
-
- return 1;
-}
-
-/**
- * xmlBufferAdd:
- * @buf: the buffer to dump
- * @str: the #xmlChar string
- * @len: the number of #xmlChar to add
- *
- * Add a string range to an XML buffer. if len == -1, the length of
- * str is recomputed.
- *
- * Returns 0 successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufferAdd(xmlBufferPtr buf, const xmlChar *str, int len) {
- unsigned int needSize;
-
- if ((str == NULL) || (buf == NULL)) {
- return -1;
- }
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
- if (len < -1) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferAdd: len < 0\n");
-#endif
- return -1;
- }
- if (len == 0) return 0;
-
- if (len < 0)
- len = xmlStrlen(str);
-
- if (len < 0) return -1;
- if (len == 0) return 0;
-
- needSize = buf->use + len + 2;
- if (needSize > buf->size){
- if (!xmlBufferResize(buf, needSize)){
- xmlTreeErrMemory("growing buffer");
- return XML_ERR_NO_MEMORY;
- }
- }
-
- memmove(&buf->content[buf->use], str, len*sizeof(xmlChar));
- buf->use += len;
- buf->content[buf->use] = 0;
- return 0;
-}
-
-/**
- * xmlBufferAddHead:
- * @buf: the buffer
- * @str: the #xmlChar string
- * @len: the number of #xmlChar to add
- *
- * Add a string range to the beginning of an XML buffer.
- * if len == -1, the length of @str is recomputed.
- *
- * Returns 0 successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufferAddHead(xmlBufferPtr buf, const xmlChar *str, int len) {
- unsigned int needSize;
-
- if (buf == NULL)
- return(-1);
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
- if (str == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferAddHead: str == NULL\n");
-#endif
- return -1;
- }
- if (len < -1) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferAddHead: len < 0\n");
-#endif
- return -1;
- }
- if (len == 0) return 0;
-
- if (len < 0)
- len = xmlStrlen(str);
-
- if (len <= 0) return -1;
-
- if ((buf->alloc == XML_BUFFER_ALLOC_IO) && (buf->contentIO != NULL)) {
- size_t start_buf = buf->content - buf->contentIO;
-
- if (start_buf > (unsigned int) len) {
- /*
- * We can add it in the space previously shrinked
- */
- buf->content -= len;
- memmove(&buf->content[0], str, len);
- buf->use += len;
- buf->size += len;
- return(0);
- }
- }
- needSize = buf->use + len + 2;
- if (needSize > buf->size){
- if (!xmlBufferResize(buf, needSize)){
- xmlTreeErrMemory("growing buffer");
- return XML_ERR_NO_MEMORY;
- }
- }
-
- memmove(&buf->content[len], &buf->content[0], buf->use);
- memmove(&buf->content[0], str, len);
- buf->use += len;
- buf->content[buf->use] = 0;
- return 0;
-}
-
-/**
- * xmlBufferCat:
- * @buf: the buffer to add to
- * @str: the #xmlChar string
- *
- * Append a zero terminated string to an XML buffer.
- *
- * Returns 0 successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufferCat(xmlBufferPtr buf, const xmlChar *str) {
- if (buf == NULL)
- return(-1);
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
- if (str == NULL) return -1;
- return xmlBufferAdd(buf, str, -1);
-}
-
-/**
- * xmlBufferCCat:
- * @buf: the buffer to dump
- * @str: the C char string
- *
- * Append a zero terminated C string to an XML buffer.
- *
- * Returns 0 successful, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlBufferCCat(xmlBufferPtr buf, const char *str) {
- const char *cur;
-
- if (buf == NULL)
- return(-1);
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return -1;
- if (str == NULL) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferCCat: str == NULL\n");
-#endif
- return -1;
- }
- for (cur = str;*cur != 0;cur++) {
- if (buf->use + 10 >= buf->size) {
- if (!xmlBufferResize(buf, buf->use+10)){
- xmlTreeErrMemory("growing buffer");
- return XML_ERR_NO_MEMORY;
- }
- }
- buf->content[buf->use++] = *cur;
- }
- buf->content[buf->use] = 0;
- return 0;
-}
-
-/**
- * xmlBufferWriteCHAR:
- * @buf: the XML buffer
- * @string: the string to add
- *
- * routine which manages and grows an output buffer. This one adds
- * xmlChars at the end of the buffer.
- */
-void
-xmlBufferWriteCHAR(xmlBufferPtr buf, const xmlChar *string) {
- if (buf == NULL)
- return;
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
- xmlBufferCat(buf, string);
-}
-
-/**
- * xmlBufferWriteChar:
- * @buf: the XML buffer output
- * @string: the string to add
- *
- * routine which manage and grows an output buffer. This one add
- * C chars at the end of the array.
- */
-void
-xmlBufferWriteChar(xmlBufferPtr buf, const char *string) {
- if (buf == NULL)
- return;
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
- xmlBufferCCat(buf, string);
-}
-
-
-/**
- * xmlBufferWriteQuotedString:
- * @buf: the XML buffer output
- * @string: the string to add
- *
- * routine which manage and grows an output buffer. This one writes
- * a quoted or double quoted #xmlChar string, checking first if it holds
- * quote or double-quotes internally
- */
-void
-xmlBufferWriteQuotedString(xmlBufferPtr buf, const xmlChar *string) {
- const xmlChar *cur, *base;
- if (buf == NULL)
- return;
- if (buf->alloc == XML_BUFFER_ALLOC_IMMUTABLE) return;
- if (xmlStrchr(string, '\"')) {
- if (xmlStrchr(string, '\'')) {
-#ifdef DEBUG_BUFFER
- xmlGenericError(xmlGenericErrorContext,
- "xmlBufferWriteQuotedString: string contains quote and double-quotes !\n");
-#endif
- xmlBufferCCat(buf, "\"");
- base = cur = string;
- while(*cur != 0){
- if(*cur == '"'){
- if (base != cur)
- xmlBufferAdd(buf, base, cur - base);
- xmlBufferAdd(buf, BAD_CAST "&quot;", 6);
- cur++;
- base = cur;
- }
- else {
- cur++;
- }
- }
- if (base != cur)
- xmlBufferAdd(buf, base, cur - base);
- xmlBufferCCat(buf, "\"");
- }
- else{
- xmlBufferCCat(buf, "\'");
- xmlBufferCat(buf, string);
- xmlBufferCCat(buf, "\'");
- }
- } else {
- xmlBufferCCat(buf, "\"");
- xmlBufferCat(buf, string);
- xmlBufferCCat(buf, "\"");
- }
-}
-
-
-/**
- * xmlGetDocCompressMode:
- * @doc: the document
- *
- * get the compression ratio for a document, ZLIB based
- * Returns 0 (uncompressed) to 9 (max compression)
- */
-int
-xmlGetDocCompressMode (const xmlDoc *doc) {
- if (doc == NULL) return(-1);
- return(doc->compression);
-}
-
-/**
- * xmlSetDocCompressMode:
- * @doc: the document
- * @mode: the compression ratio
- *
- * set the compression ratio for a document, ZLIB based
- * Correct values: 0 (uncompressed) to 9 (max compression)
- */
-void
-xmlSetDocCompressMode (xmlDocPtr doc, int mode) {
- if (doc == NULL) return;
- if (mode < 0) doc->compression = 0;
- else if (mode > 9) doc->compression = 9;
- else doc->compression = mode;
-}
-
-/**
- * xmlGetCompressMode:
- *
- * get the default compression mode used, ZLIB based.
- * Returns 0 (uncompressed) to 9 (max compression)
- */
-int
-xmlGetCompressMode(void)
-{
- return (xmlCompressMode);
-}
-
-/**
- * xmlSetCompressMode:
- * @mode: the compression ratio
- *
- * set the default compression mode used, ZLIB based
- * Correct values: 0 (uncompressed) to 9 (max compression)
- */
-void
-xmlSetCompressMode(int mode) {
- if (mode < 0) xmlCompressMode = 0;
- else if (mode > 9) xmlCompressMode = 9;
- else xmlCompressMode = mode;
-}
-
-#define XML_TREE_NSMAP_PARENT -1
-#define XML_TREE_NSMAP_XML -2
-#define XML_TREE_NSMAP_DOC -3
-#define XML_TREE_NSMAP_CUSTOM -4
-
-typedef struct xmlNsMapItem *xmlNsMapItemPtr;
-struct xmlNsMapItem {
- xmlNsMapItemPtr next;
- xmlNsMapItemPtr prev;
- xmlNsPtr oldNs; /* old ns decl reference */
- xmlNsPtr newNs; /* new ns decl reference */
- int shadowDepth; /* Shadowed at this depth */
- /*
- * depth:
- * >= 0 == @node's ns-decls
- * -1 == @parent's ns-decls
- * -2 == the doc->oldNs XML ns-decl
- * -3 == the doc->oldNs storage ns-decls
- * -4 == ns-decls provided via custom ns-handling
- */
- int depth;
-};
-
-typedef struct xmlNsMap *xmlNsMapPtr;
-struct xmlNsMap {
- xmlNsMapItemPtr first;
- xmlNsMapItemPtr last;
- xmlNsMapItemPtr pool;
-};
-
-#define XML_NSMAP_NOTEMPTY(m) (((m) != NULL) && ((m)->first != NULL))
-#define XML_NSMAP_FOREACH(m, i) for (i = (m)->first; i != NULL; i = (i)->next)
-#define XML_NSMAP_POP(m, i) \
- i = (m)->last; \
- (m)->last = (i)->prev; \
- if ((m)->last == NULL) \
- (m)->first = NULL; \
- else \
- (m)->last->next = NULL; \
- (i)->next = (m)->pool; \
- (m)->pool = i;
-
-/*
-* xmlDOMWrapNsMapFree:
-* @map: the ns-map
-*
-* Frees the ns-map
-*/
-static void
-xmlDOMWrapNsMapFree(xmlNsMapPtr nsmap)
-{
- xmlNsMapItemPtr cur, tmp;
-
- if (nsmap == NULL)
- return;
- cur = nsmap->pool;
- while (cur != NULL) {
- tmp = cur;
- cur = cur->next;
- xmlFree(tmp);
- }
- cur = nsmap->first;
- while (cur != NULL) {
- tmp = cur;
- cur = cur->next;
- xmlFree(tmp);
- }
- xmlFree(nsmap);
-}
-
-/*
-* xmlDOMWrapNsMapAddItem:
-* @map: the ns-map
-* @oldNs: the old ns-struct
-* @newNs: the new ns-struct
-* @depth: depth and ns-kind information
-*
-* Adds an ns-mapping item.
-*/
-static xmlNsMapItemPtr
-xmlDOMWrapNsMapAddItem(xmlNsMapPtr *nsmap, int position,
- xmlNsPtr oldNs, xmlNsPtr newNs, int depth)
-{
- xmlNsMapItemPtr ret;
- xmlNsMapPtr map;
-
- if (nsmap == NULL)
- return(NULL);
- if ((position != -1) && (position != 0))
- return(NULL);
- map = *nsmap;
-
- if (map == NULL) {
- /*
- * Create the ns-map.
- */
- map = (xmlNsMapPtr) xmlMalloc(sizeof(struct xmlNsMap));
- if (map == NULL) {
- xmlTreeErrMemory("allocating namespace map");
- return (NULL);
- }
- memset(map, 0, sizeof(struct xmlNsMap));
- *nsmap = map;
- }
-
- if (map->pool != NULL) {
- /*
- * Reuse an item from the pool.
- */
- ret = map->pool;
- map->pool = ret->next;
- memset(ret, 0, sizeof(struct xmlNsMapItem));
- } else {
- /*
- * Create a new item.
- */
- ret = (xmlNsMapItemPtr) xmlMalloc(sizeof(struct xmlNsMapItem));
- if (ret == NULL) {
- xmlTreeErrMemory("allocating namespace map item");
- return (NULL);
- }
- memset(ret, 0, sizeof(struct xmlNsMapItem));
- }
-
- if (map->first == NULL) {
- /*
- * First ever.
- */
- map->first = ret;
- map->last = ret;
- } else if (position == -1) {
- /*
- * Append.
- */
- ret->prev = map->last;
- map->last->next = ret;
- map->last = ret;
- } else if (position == 0) {
- /*
- * Set on first position.
- */
- map->first->prev = ret;
- ret->next = map->first;
- map->first = ret;
- }
-
- ret->oldNs = oldNs;
- ret->newNs = newNs;
- ret->shadowDepth = -1;
- ret->depth = depth;
- return (ret);
-}
-
-/*
-* xmlDOMWrapStoreNs:
-* @doc: the doc
-* @nsName: the namespace name
-* @prefix: the prefix
-*
-* Creates or reuses an xmlNs struct on doc->oldNs with
-* the given prefix and namespace name.
-*
-* Returns the aquired ns struct or NULL in case of an API
-* or internal error.
-*/
-static xmlNsPtr
-xmlDOMWrapStoreNs(xmlDocPtr doc,
- const xmlChar *nsName,
- const xmlChar *prefix)
-{
- xmlNsPtr ns;
-
- if (doc == NULL)
- return (NULL);
- ns = xmlTreeEnsureXMLDecl(doc);
- if (ns == NULL)
- return (NULL);
- if (ns->next != NULL) {
- /* Reuse. */
- ns = ns->next;
- while (ns != NULL) {
- if (((ns->prefix == prefix) ||
- xmlStrEqual(ns->prefix, prefix)) &&
- xmlStrEqual(ns->href, nsName)) {
- return (ns);
- }
- if (ns->next == NULL)
- break;
- ns = ns->next;
- }
- }
- /* Create. */
- if (ns != NULL) {
- ns->next = xmlNewNs(NULL, nsName, prefix);
- return (ns->next);
- }
- return(NULL);
-}
-
-/*
-* xmlDOMWrapNewCtxt:
-*
-* Allocates and initializes a new DOM-wrapper context.
-*
-* Returns the xmlDOMWrapCtxtPtr or NULL in case of an internal error.
-*/
-xmlDOMWrapCtxtPtr
-xmlDOMWrapNewCtxt(void)
-{
- xmlDOMWrapCtxtPtr ret;
-
- ret = xmlMalloc(sizeof(xmlDOMWrapCtxt));
- if (ret == NULL) {
- xmlTreeErrMemory("allocating DOM-wrapper context");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlDOMWrapCtxt));
- return (ret);
-}
-
-/*
-* xmlDOMWrapFreeCtxt:
-* @ctxt: the DOM-wrapper context
-*
-* Frees the DOM-wrapper context.
-*/
-void
-xmlDOMWrapFreeCtxt(xmlDOMWrapCtxtPtr ctxt)
-{
- if (ctxt == NULL)
- return;
- if (ctxt->namespaceMap != NULL)
- xmlDOMWrapNsMapFree((xmlNsMapPtr) ctxt->namespaceMap);
- /*
- * TODO: Store the namespace map in the context.
- */
- xmlFree(ctxt);
-}
-
-/*
-* xmlTreeLookupNsListByPrefix:
-* @nsList: a list of ns-structs
-* @prefix: the searched prefix
-*
-* Searches for a ns-decl with the given prefix in @nsList.
-*
-* Returns the ns-decl if found, NULL if not found and on
-* API errors.
-*/
-static xmlNsPtr
-xmlTreeNSListLookupByPrefix(xmlNsPtr nsList, const xmlChar *prefix)
-{
- if (nsList == NULL)
- return (NULL);
- {
- xmlNsPtr ns;
- ns = nsList;
- do {
- if ((prefix == ns->prefix) ||
- xmlStrEqual(prefix, ns->prefix)) {
- return (ns);
- }
- ns = ns->next;
- } while (ns != NULL);
- }
- return (NULL);
-}
-
-/*
-*
-* xmlDOMWrapNSNormGatherInScopeNs:
-* @map: the namespace map
-* @node: the node to start with
-*
-* Puts in-scope namespaces into the ns-map.
-*
-* Returns 0 on success, -1 on API or internal errors.
-*/
-static int
-xmlDOMWrapNSNormGatherInScopeNs(xmlNsMapPtr *map,
- xmlNodePtr node)
-{
- xmlNodePtr cur;
- xmlNsPtr ns;
- xmlNsMapItemPtr mi;
- int shadowed;
-
- if ((map == NULL) || (*map != NULL))
- return (-1);
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
- return (-1);
- /*
- * Get in-scope ns-decls of @parent.
- */
- cur = node;
- while ((cur != NULL) && (cur != (xmlNodePtr) cur->doc)) {
- if (cur->type == XML_ELEMENT_NODE) {
- if (cur->nsDef != NULL) {
- ns = cur->nsDef;
- do {
- shadowed = 0;
- if (XML_NSMAP_NOTEMPTY(*map)) {
- /*
- * Skip shadowed prefixes.
- */
- XML_NSMAP_FOREACH(*map, mi) {
- if ((ns->prefix == mi->newNs->prefix) ||
- xmlStrEqual(ns->prefix, mi->newNs->prefix)) {
- shadowed = 1;
- break;
- }
- }
- }
- /*
- * Insert mapping.
- */
- mi = xmlDOMWrapNsMapAddItem(map, 0, NULL,
- ns, XML_TREE_NSMAP_PARENT);
- if (mi == NULL)
- return (-1);
- if (shadowed)
- mi->shadowDepth = 0;
- ns = ns->next;
- } while (ns != NULL);
- }
- }
- cur = cur->parent;
- }
- return (0);
-}
-
-/*
-* XML_TREE_ADOPT_STR: If we have a dest-dict, put @str in the dict;
-* otherwise copy it, when it was in the source-dict.
-*/
-#define XML_TREE_ADOPT_STR(str) \
- if (adoptStr && (str != NULL)) { \
- if (destDoc->dict) { \
- const xmlChar *old = str; \
- str = xmlDictLookup(destDoc->dict, str, -1); \
- if ((sourceDoc == NULL) || (sourceDoc->dict == NULL) || \
- (!xmlDictOwns(sourceDoc->dict, old))) \
- xmlFree((char *)old); \
- } else if ((sourceDoc) && (sourceDoc->dict) && \
- xmlDictOwns(sourceDoc->dict, str)) { \
- str = BAD_CAST xmlStrdup(str); \
- } \
- }
-
-/*
-* XML_TREE_ADOPT_STR_2: If @str was in the source-dict, then
-* put it in dest-dict or copy it.
-*/
-#define XML_TREE_ADOPT_STR_2(str) \
- if (adoptStr && (str != NULL) && (sourceDoc != NULL) && \
- (sourceDoc->dict != NULL) && \
- xmlDictOwns(sourceDoc->dict, cur->content)) { \
- if (destDoc->dict) \
- cur->content = (xmlChar *) \
- xmlDictLookup(destDoc->dict, cur->content, -1); \
- else \
- cur->content = xmlStrdup(BAD_CAST cur->content); \
- }
-
-/*
-* xmlDOMWrapNSNormAddNsMapItem2:
-*
-* For internal use. Adds a ns-decl mapping.
-*
-* Returns 0 on success, -1 on internal errors.
-*/
-static int
-xmlDOMWrapNSNormAddNsMapItem2(xmlNsPtr **list, int *size, int *number,
- xmlNsPtr oldNs, xmlNsPtr newNs)
-{
- if (*list == NULL) {
- *list = (xmlNsPtr *) xmlMalloc(6 * sizeof(xmlNsPtr));
- if (*list == NULL) {
- xmlTreeErrMemory("alloc ns map item");
- return(-1);
- }
- *size = 3;
- *number = 0;
- } else if ((*number) >= (*size)) {
- *size *= 2;
- *list = (xmlNsPtr *) xmlRealloc(*list,
- (*size) * 2 * sizeof(xmlNsPtr));
- if (*list == NULL) {
- xmlTreeErrMemory("realloc ns map item");
- return(-1);
- }
- }
- (*list)[2 * (*number)] = oldNs;
- (*list)[2 * (*number) +1] = newNs;
- (*number)++;
- return (0);
-}
-
-/*
-* xmlDOMWrapRemoveNode:
-* @ctxt: a DOM wrapper context
-* @doc: the doc
-* @node: the node to be removed.
-* @options: set of options, unused at the moment
-*
-* Unlinks the given node from its owner.
-* This will substitute ns-references to node->nsDef for
-* ns-references to doc->oldNs, thus ensuring the removed
-* branch to be autark wrt ns-references.
-*
-* NOTE: This function was not intensively tested.
-*
-* Returns 0 on success, 1 if the node is not supported,
-* -1 on API and internal errors.
-*/
-int
-xmlDOMWrapRemoveNode(xmlDOMWrapCtxtPtr ctxt, xmlDocPtr doc,
- xmlNodePtr node, int options ATTRIBUTE_UNUSED)
-{
- xmlNsPtr *list = NULL;
- int sizeList, nbList, i, j;
- xmlNsPtr ns;
-
- if ((node == NULL) || (doc == NULL) || (node->doc != doc))
- return (-1);
-
- /* TODO: 0 or -1 ? */
- if (node->parent == NULL)
- return (0);
-
- switch (node->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- xmlUnlinkNode(node);
- return (0);
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- break;
- default:
- return (1);
- }
- xmlUnlinkNode(node);
- /*
- * Save out-of-scope ns-references in doc->oldNs.
- */
- do {
- switch (node->type) {
- case XML_ELEMENT_NODE:
- if ((ctxt == NULL) && (node->nsDef != NULL)) {
- ns = node->nsDef;
- do {
- if (xmlDOMWrapNSNormAddNsMapItem2(&list, &sizeList,
- &nbList, ns, ns) == -1)
- goto internal_error;
- ns = ns->next;
- } while (ns != NULL);
- }
- /* No break on purpose. */
- case XML_ATTRIBUTE_NODE:
- if (node->ns != NULL) {
- /*
- * Find a mapping.
- */
- if (list != NULL) {
- for (i = 0, j = 0; i < nbList; i++, j += 2) {
- if (node->ns == list[j]) {
- node->ns = list[++j];
- goto next_node;
- }
- }
- }
- ns = NULL;
- if (ctxt != NULL) {
- /*
- * User defined.
- */
- } else {
- /*
- * Add to doc's oldNs.
- */
- ns = xmlDOMWrapStoreNs(doc, node->ns->href,
- node->ns->prefix);
- if (ns == NULL)
- goto internal_error;
- }
- if (ns != NULL) {
- /*
- * Add mapping.
- */
- if (xmlDOMWrapNSNormAddNsMapItem2(&list, &sizeList,
- &nbList, node->ns, ns) == -1)
- goto internal_error;
- }
- node->ns = ns;
- }
- if ((node->type == XML_ELEMENT_NODE) &&
- (node->properties != NULL)) {
- node = (xmlNodePtr) node->properties;
- continue;
- }
- break;
- default:
- goto next_sibling;
- }
-next_node:
- if ((node->type == XML_ELEMENT_NODE) &&
- (node->children != NULL)) {
- node = node->children;
- continue;
- }
-next_sibling:
- if (node == NULL)
- break;
- if (node->next != NULL)
- node = node->next;
- else {
- node = node->parent;
- goto next_sibling;
- }
- } while (node != NULL);
-
- if (list != NULL)
- xmlFree(list);
- return (0);
-
-internal_error:
- if (list != NULL)
- xmlFree(list);
- return (-1);
-}
-
-/*
-* xmlSearchNsByNamespaceStrict:
-* @doc: the document
-* @node: the start node
-* @nsName: the searched namespace name
-* @retNs: the resulting ns-decl
-* @prefixed: if the found ns-decl must have a prefix (for attributes)
-*
-* Dynamically searches for a ns-declaration which matches
-* the given @nsName in the ancestor-or-self axis of @node.
-*
-* Returns 1 if a ns-decl was found, 0 if not and -1 on API
-* and internal errors.
-*/
-static int
-xmlSearchNsByNamespaceStrict(xmlDocPtr doc, xmlNodePtr node,
- const xmlChar* nsName,
- xmlNsPtr *retNs, int prefixed)
-{
- xmlNodePtr cur, prev = NULL, out = NULL;
- xmlNsPtr ns, prevns;
-
- if ((doc == NULL) || (nsName == NULL) || (retNs == NULL))
- return (-1);
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
- return(-1);
-
- *retNs = NULL;
- if (xmlStrEqual(nsName, XML_XML_NAMESPACE)) {
- *retNs = xmlTreeEnsureXMLDecl(doc);
- if (*retNs == NULL)
- return (-1);
- return (1);
- }
- cur = node;
- do {
- if (cur->type == XML_ELEMENT_NODE) {
- if (cur->nsDef != NULL) {
- for (ns = cur->nsDef; ns != NULL; ns = ns->next) {
- if (prefixed && (ns->prefix == NULL))
- continue;
- if (prev != NULL) {
- /*
- * Check the last level of ns-decls for a
- * shadowing prefix.
- */
- prevns = prev->nsDef;
- do {
- if ((prevns->prefix == ns->prefix) ||
- ((prevns->prefix != NULL) &&
- (ns->prefix != NULL) &&
- xmlStrEqual(prevns->prefix, ns->prefix))) {
- /*
- * Shadowed.
- */
- break;
- }
- prevns = prevns->next;
- } while (prevns != NULL);
- if (prevns != NULL)
- continue;
- }
- /*
- * Ns-name comparison.
- */
- if ((nsName == ns->href) ||
- xmlStrEqual(nsName, ns->href)) {
- /*
- * At this point the prefix can only be shadowed,
- * if we are the the (at least) 3rd level of
- * ns-decls.
- */
- if (out) {
- int ret;
-
- ret = xmlNsInScope(doc, node, prev, ns->prefix);
- if (ret < 0)
- return (-1);
- /*
- * TODO: Should we try to find a matching ns-name
- * only once? This here keeps on searching.
- * I think we should try further since, there might
- * be an other matching ns-decl with an unshadowed
- * prefix.
- */
- if (! ret)
- continue;
- }
- *retNs = ns;
- return (1);
- }
- }
- out = prev;
- prev = cur;
- }
- } else if ((cur->type == XML_ENTITY_NODE) ||
- (cur->type == XML_ENTITY_DECL))
- return (0);
- cur = cur->parent;
- } while ((cur != NULL) && (cur->doc != (xmlDocPtr) cur));
- return (0);
-}
-
-/*
-* xmlSearchNsByPrefixStrict:
-* @doc: the document
-* @node: the start node
-* @prefix: the searched namespace prefix
-* @retNs: the resulting ns-decl
-*
-* Dynamically searches for a ns-declaration which matches
-* the given @nsName in the ancestor-or-self axis of @node.
-*
-* Returns 1 if a ns-decl was found, 0 if not and -1 on API
-* and internal errors.
-*/
-static int
-xmlSearchNsByPrefixStrict(xmlDocPtr doc, xmlNodePtr node,
- const xmlChar* prefix,
- xmlNsPtr *retNs)
-{
- xmlNodePtr cur;
- xmlNsPtr ns;
-
- if ((doc == NULL) || (node == NULL) || (node->type == XML_NAMESPACE_DECL))
- return(-1);
-
- if (retNs)
- *retNs = NULL;
- if (IS_STR_XML(prefix)) {
- if (retNs) {
- *retNs = xmlTreeEnsureXMLDecl(doc);
- if (*retNs == NULL)
- return (-1);
- }
- return (1);
- }
- cur = node;
- do {
- if (cur->type == XML_ELEMENT_NODE) {
- if (cur->nsDef != NULL) {
- ns = cur->nsDef;
- do {
- if ((prefix == ns->prefix) ||
- xmlStrEqual(prefix, ns->prefix))
- {
- /*
- * Disabled namespaces, e.g. xmlns:abc="".
- */
- if (ns->href == NULL)
- return(0);
- if (retNs)
- *retNs = ns;
- return (1);
- }
- ns = ns->next;
- } while (ns != NULL);
- }
- } else if ((cur->type == XML_ENTITY_NODE) ||
- (cur->type == XML_ENTITY_DECL))
- return (0);
- cur = cur->parent;
- } while ((cur != NULL) && (cur->doc != (xmlDocPtr) cur));
- return (0);
-}
-
-/*
-* xmlDOMWrapNSNormDeclareNsForced:
-* @doc: the doc
-* @elem: the element-node to declare on
-* @nsName: the namespace-name of the ns-decl
-* @prefix: the preferred prefix of the ns-decl
-* @checkShadow: ensure that the new ns-decl doesn't shadow ancestor ns-decls
-*
-* Declares a new namespace on @elem. It tries to use the
-* given @prefix; if a ns-decl with the given prefix is already existent
-* on @elem, it will generate an other prefix.
-*
-* Returns 1 if a ns-decl was found, 0 if not and -1 on API
-* and internal errors.
-*/
-static xmlNsPtr
-xmlDOMWrapNSNormDeclareNsForced(xmlDocPtr doc,
- xmlNodePtr elem,
- const xmlChar *nsName,
- const xmlChar *prefix,
- int checkShadow)
-{
-
- xmlNsPtr ret;
- char buf[50];
- const xmlChar *pref;
- int counter = 0;
-
- if ((doc == NULL) || (elem == NULL) || (elem->type != XML_ELEMENT_NODE))
- return(NULL);
- /*
- * Create a ns-decl on @anchor.
- */
- pref = prefix;
- while (1) {
- /*
- * Lookup whether the prefix is unused in elem's ns-decls.
- */
- if ((elem->nsDef != NULL) &&
- (xmlTreeNSListLookupByPrefix(elem->nsDef, pref) != NULL))
- goto ns_next_prefix;
- if (checkShadow && elem->parent &&
- ((xmlNodePtr) elem->parent->doc != elem->parent)) {
- /*
- * Does it shadow ancestor ns-decls?
- */
- if (xmlSearchNsByPrefixStrict(doc, elem->parent, pref, NULL) == 1)
- goto ns_next_prefix;
- }
- ret = xmlNewNs(NULL, nsName, pref);
- if (ret == NULL)
- return (NULL);
- if (elem->nsDef == NULL)
- elem->nsDef = ret;
- else {
- xmlNsPtr ns2 = elem->nsDef;
- while (ns2->next != NULL)
- ns2 = ns2->next;
- ns2->next = ret;
- }
- return (ret);
-ns_next_prefix:
- counter++;
- if (counter > 1000)
- return (NULL);
- if (prefix == NULL) {
- snprintf((char *) buf, sizeof(buf),
- "ns_%d", counter);
- } else
- snprintf((char *) buf, sizeof(buf),
- "%.30s_%d", (char *)prefix, counter);
- pref = BAD_CAST buf;
- }
-}
-
-/*
-* xmlDOMWrapNSNormAquireNormalizedNs:
-* @doc: the doc
-* @elem: the element-node to declare namespaces on
-* @ns: the ns-struct to use for the search
-* @retNs: the found/created ns-struct
-* @nsMap: the ns-map
-* @depth: the current tree depth
-* @ancestorsOnly: search in ancestor ns-decls only
-* @prefixed: if the searched ns-decl must have a prefix (for attributes)
-*
-* Searches for a matching ns-name in the ns-decls of @nsMap, if not
-* found it will either declare it on @elem, or store it in doc->oldNs.
-* If a new ns-decl needs to be declared on @elem, it tries to use the
-* @ns->prefix for it, if this prefix is already in use on @elem, it will
-* change the prefix or the new ns-decl.
-*
-* Returns 0 if succeeded, -1 otherwise and on API/internal errors.
-*/
-static int
-xmlDOMWrapNSNormAquireNormalizedNs(xmlDocPtr doc,
- xmlNodePtr elem,
- xmlNsPtr ns,
- xmlNsPtr *retNs,
- xmlNsMapPtr *nsMap,
-
- int depth,
- int ancestorsOnly,
- int prefixed)
-{
- xmlNsMapItemPtr mi;
-
- if ((doc == NULL) || (ns == NULL) || (retNs == NULL) ||
- (nsMap == NULL))
- return (-1);
-
- *retNs = NULL;
- /*
- * Handle XML namespace.
- */
- if (IS_STR_XML(ns->prefix)) {
- /*
- * Insert XML namespace mapping.
- */
- *retNs = xmlTreeEnsureXMLDecl(doc);
- if (*retNs == NULL)
- return (-1);
- return (0);
- }
- /*
- * If the search should be done in ancestors only and no
- * @elem (the first ancestor) was specified, then skip the search.
- */
- if ((XML_NSMAP_NOTEMPTY(*nsMap)) &&
- (! (ancestorsOnly && (elem == NULL))))
- {
- /*
- * Try to find an equal ns-name in in-scope ns-decls.
- */
- XML_NSMAP_FOREACH(*nsMap, mi) {
- if ((mi->depth >= XML_TREE_NSMAP_PARENT) &&
- /*
- * ancestorsOnly: This should be turned on to gain speed,
- * if one knows that the branch itself was already
- * ns-wellformed and no stale references existed.
- * I.e. it searches in the ancestor axis only.
- */
- ((! ancestorsOnly) || (mi->depth == XML_TREE_NSMAP_PARENT)) &&
- /* Skip shadowed prefixes. */
- (mi->shadowDepth == -1) &&
- /* Skip xmlns="" or xmlns:foo="". */
- ((mi->newNs->href != NULL) &&
- (mi->newNs->href[0] != 0)) &&
- /* Ensure a prefix if wanted. */
- ((! prefixed) || (mi->newNs->prefix != NULL)) &&
- /* Equal ns name */
- ((mi->newNs->href == ns->href) ||
- xmlStrEqual(mi->newNs->href, ns->href))) {
- /* Set the mapping. */
- mi->oldNs = ns;
- *retNs = mi->newNs;
- return (0);
- }
- }
- }
- /*
- * No luck, the namespace is out of scope or shadowed.
- */
- if (elem == NULL) {
- xmlNsPtr tmpns;
-
- /*
- * Store ns-decls in "oldNs" of the document-node.
- */
- tmpns = xmlDOMWrapStoreNs(doc, ns->href, ns->prefix);
- if (tmpns == NULL)
- return (-1);
- /*
- * Insert mapping.
- */
- if (xmlDOMWrapNsMapAddItem(nsMap, -1, ns,
- tmpns, XML_TREE_NSMAP_DOC) == NULL) {
- xmlFreeNs(tmpns);
- return (-1);
- }
- *retNs = tmpns;
- } else {
- xmlNsPtr tmpns;
-
- tmpns = xmlDOMWrapNSNormDeclareNsForced(doc, elem, ns->href,
- ns->prefix, 0);
- if (tmpns == NULL)
- return (-1);
-
- if (*nsMap != NULL) {
- /*
- * Does it shadow ancestor ns-decls?
- */
- XML_NSMAP_FOREACH(*nsMap, mi) {
- if ((mi->depth < depth) &&
- (mi->shadowDepth == -1) &&
- ((ns->prefix == mi->newNs->prefix) ||
- xmlStrEqual(ns->prefix, mi->newNs->prefix))) {
- /*
- * Shadows.
- */
- mi->shadowDepth = depth;
- break;
- }
- }
- }
- if (xmlDOMWrapNsMapAddItem(nsMap, -1, ns, tmpns, depth) == NULL) {
- xmlFreeNs(tmpns);
- return (-1);
- }
- *retNs = tmpns;
- }
- return (0);
-}
-
-typedef enum {
- XML_DOM_RECONNS_REMOVEREDUND = 1<<0
-} xmlDOMReconcileNSOptions;
-
-/*
-* xmlDOMWrapReconcileNamespaces:
-* @ctxt: DOM wrapper context, unused at the moment
-* @elem: the element-node
-* @options: option flags
-*
-* Ensures that ns-references point to ns-decls hold on element-nodes.
-* Ensures that the tree is namespace wellformed by creating additional
-* ns-decls where needed. Note that, since prefixes of already existent
-* ns-decls can be shadowed by this process, it could break QNames in
-* attribute values or element content.
-*
-* NOTE: This function was not intensively tested.
-*
-* Returns 0 if succeeded, -1 otherwise and on API/internal errors.
-*/
-
-int
-xmlDOMWrapReconcileNamespaces(xmlDOMWrapCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlNodePtr elem,
- int options)
-{
- int depth = -1, adoptns = 0, parnsdone = 0;
- xmlNsPtr ns, prevns;
- xmlDocPtr doc;
- xmlNodePtr cur, curElem = NULL;
- xmlNsMapPtr nsMap = NULL;
- xmlNsMapItemPtr /* topmi = NULL, */ mi;
- /* @ancestorsOnly should be set by an option flag. */
- int ancestorsOnly = 0;
- int optRemoveRedundantNS =
- ((xmlDOMReconcileNSOptions) options & XML_DOM_RECONNS_REMOVEREDUND) ? 1 : 0;
- xmlNsPtr *listRedund = NULL;
- int sizeRedund = 0, nbRedund = 0, ret, i, j;
-
- if ((elem == NULL) || (elem->doc == NULL) ||
- (elem->type != XML_ELEMENT_NODE))
- return (-1);
-
- doc = elem->doc;
- cur = elem;
- do {
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- adoptns = 1;
- curElem = cur;
- depth++;
- /*
- * Namespace declarations.
- */
- if (cur->nsDef != NULL) {
- prevns = NULL;
- ns = cur->nsDef;
- while (ns != NULL) {
- if (! parnsdone) {
- if ((elem->parent) &&
- ((xmlNodePtr) elem->parent->doc != elem->parent)) {
- /*
- * Gather ancestor in-scope ns-decls.
- */
- if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
- elem->parent) == -1)
- goto internal_error;
- }
- parnsdone = 1;
- }
-
- /*
- * Lookup the ns ancestor-axis for equal ns-decls in scope.
- */
- if (optRemoveRedundantNS && XML_NSMAP_NOTEMPTY(nsMap)) {
- XML_NSMAP_FOREACH(nsMap, mi) {
- if ((mi->depth >= XML_TREE_NSMAP_PARENT) &&
- (mi->shadowDepth == -1) &&
- ((ns->prefix == mi->newNs->prefix) ||
- xmlStrEqual(ns->prefix, mi->newNs->prefix)) &&
- ((ns->href == mi->newNs->href) ||
- xmlStrEqual(ns->href, mi->newNs->href)))
- {
- /*
- * A redundant ns-decl was found.
- * Add it to the list of redundant ns-decls.
- */
- if (xmlDOMWrapNSNormAddNsMapItem2(&listRedund,
- &sizeRedund, &nbRedund, ns, mi->newNs) == -1)
- goto internal_error;
- /*
- * Remove the ns-decl from the element-node.
- */
- if (prevns)
- prevns->next = ns->next;
- else
- cur->nsDef = ns->next;
- goto next_ns_decl;
- }
- }
- }
-
- /*
- * Skip ns-references handling if the referenced
- * ns-decl is declared on the same element.
- */
- if ((cur->ns != NULL) && adoptns && (cur->ns == ns))
- adoptns = 0;
- /*
- * Does it shadow any ns-decl?
- */
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- XML_NSMAP_FOREACH(nsMap, mi) {
- if ((mi->depth >= XML_TREE_NSMAP_PARENT) &&
- (mi->shadowDepth == -1) &&
- ((ns->prefix == mi->newNs->prefix) ||
- xmlStrEqual(ns->prefix, mi->newNs->prefix))) {
-
- mi->shadowDepth = depth;
- }
- }
- }
- /*
- * Push mapping.
- */
- if (xmlDOMWrapNsMapAddItem(&nsMap, -1, ns, ns,
- depth) == NULL)
- goto internal_error;
-
- prevns = ns;
-next_ns_decl:
- ns = ns->next;
- }
- }
- if (! adoptns)
- goto ns_end;
- /* No break on purpose. */
- case XML_ATTRIBUTE_NODE:
- /* No ns, no fun. */
- if (cur->ns == NULL)
- goto ns_end;
-
- if (! parnsdone) {
- if ((elem->parent) &&
- ((xmlNodePtr) elem->parent->doc != elem->parent)) {
- if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
- elem->parent) == -1)
- goto internal_error;
- }
- parnsdone = 1;
- }
- /*
- * Adjust the reference if this was a redundant ns-decl.
- */
- if (listRedund) {
- for (i = 0, j = 0; i < nbRedund; i++, j += 2) {
- if (cur->ns == listRedund[j]) {
- cur->ns = listRedund[++j];
- break;
- }
- }
- }
- /*
- * Adopt ns-references.
- */
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- /*
- * Search for a mapping.
- */
- XML_NSMAP_FOREACH(nsMap, mi) {
- if ((mi->shadowDepth == -1) &&
- (cur->ns == mi->oldNs)) {
-
- cur->ns = mi->newNs;
- goto ns_end;
- }
- }
- }
- /*
- * Aquire a normalized ns-decl and add it to the map.
- */
- if (xmlDOMWrapNSNormAquireNormalizedNs(doc, curElem,
- cur->ns, &ns,
- &nsMap, depth,
- ancestorsOnly,
- (cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1)
- goto internal_error;
- cur->ns = ns;
-
-ns_end:
- if ((cur->type == XML_ELEMENT_NODE) &&
- (cur->properties != NULL)) {
- /*
- * Process attributes.
- */
- cur = (xmlNodePtr) cur->properties;
- continue;
- }
- break;
- default:
- goto next_sibling;
- }
-into_content:
- if ((cur->type == XML_ELEMENT_NODE) &&
- (cur->children != NULL)) {
- /*
- * Process content of element-nodes only.
- */
- cur = cur->children;
- continue;
- }
-next_sibling:
- if (cur == elem)
- break;
- if (cur->type == XML_ELEMENT_NODE) {
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- /*
- * Pop mappings.
- */
- while ((nsMap->last != NULL) &&
- (nsMap->last->depth >= depth))
- {
- XML_NSMAP_POP(nsMap, mi)
- }
- /*
- * Unshadow.
- */
- XML_NSMAP_FOREACH(nsMap, mi) {
- if (mi->shadowDepth >= depth)
- mi->shadowDepth = -1;
- }
- }
- depth--;
- }
- if (cur->next != NULL)
- cur = cur->next;
- else {
- if (cur->type == XML_ATTRIBUTE_NODE) {
- cur = cur->parent;
- goto into_content;
- }
- cur = cur->parent;
- goto next_sibling;
- }
- } while (cur != NULL);
-
- ret = 0;
- goto exit;
-internal_error:
- ret = -1;
-exit:
- if (listRedund) {
- for (i = 0, j = 0; i < nbRedund; i++, j += 2) {
- xmlFreeNs(listRedund[j]);
- }
- xmlFree(listRedund);
- }
- if (nsMap != NULL)
- xmlDOMWrapNsMapFree(nsMap);
- return (ret);
-}
-
-/*
-* xmlDOMWrapAdoptBranch:
-* @ctxt: the optional context for custom processing
-* @sourceDoc: the optional sourceDoc
-* @node: the element-node to start with
-* @destDoc: the destination doc for adoption
-* @destParent: the optional new parent of @node in @destDoc
-* @options: option flags
-*
-* Ensures that ns-references point to @destDoc: either to
-* elements->nsDef entries if @destParent is given, or to
-* @destDoc->oldNs otherwise.
-* If @destParent is given, it ensures that the tree is namespace
-* wellformed by creating additional ns-decls where needed.
-* Note that, since prefixes of already existent ns-decls can be
-* shadowed by this process, it could break QNames in attribute
-* values or element content.
-*
-* NOTE: This function was not intensively tested.
-*
-* Returns 0 if succeeded, -1 otherwise and on API/internal errors.
-*/
-static int
-xmlDOMWrapAdoptBranch(xmlDOMWrapCtxtPtr ctxt,
- xmlDocPtr sourceDoc,
- xmlNodePtr node,
- xmlDocPtr destDoc,
- xmlNodePtr destParent,
- int options ATTRIBUTE_UNUSED)
-{
- int ret = 0;
- xmlNodePtr cur, curElem = NULL;
- xmlNsMapPtr nsMap = NULL;
- xmlNsMapItemPtr mi;
- xmlNsPtr ns = NULL;
- int depth = -1, adoptStr = 1;
- /* gather @parent's ns-decls. */
- int parnsdone;
- /* @ancestorsOnly should be set per option. */
- int ancestorsOnly = 0;
-
- /*
- * Optimize string adoption for equal or none dicts.
- */
- if ((sourceDoc != NULL) &&
- (sourceDoc->dict == destDoc->dict))
- adoptStr = 0;
- else
- adoptStr = 1;
-
- /*
- * Get the ns-map from the context if available.
- */
- if (ctxt)
- nsMap = (xmlNsMapPtr) ctxt->namespaceMap;
- /*
- * Disable search for ns-decls in the parent-axis of the
- * desination element, if:
- * 1) there's no destination parent
- * 2) custom ns-reference handling is used
- */
- if ((destParent == NULL) ||
- (ctxt && ctxt->getNsForNodeFunc))
- {
- parnsdone = 1;
- } else
- parnsdone = 0;
-
- cur = node;
- if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL))
- goto internal_error;
-
- while (cur != NULL) {
- /*
- * Paranoid source-doc sanity check.
- */
- if (cur->doc != sourceDoc) {
- /*
- * We'll assume XIncluded nodes if the doc differs.
- * TODO: Do we need to reconciliate XIncluded nodes?
- * This here skips XIncluded nodes and tries to handle
- * broken sequences.
- */
- if (cur->next == NULL)
- goto leave_node;
- do {
- cur = cur->next;
- if ((cur->type == XML_XINCLUDE_END) ||
- (cur->doc == node->doc))
- break;
- } while (cur->next != NULL);
-
- if (cur->doc != node->doc)
- goto leave_node;
- }
- cur->doc = destDoc;
- switch (cur->type) {
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- /*
- * TODO
- */
- return (-1);
- case XML_ELEMENT_NODE:
- curElem = cur;
- depth++;
- /*
- * Namespace declarations.
- * - ns->href and ns->prefix are never in the dict, so
- * we need not move the values over to the destination dict.
- * - Note that for custom handling of ns-references,
- * the ns-decls need not be stored in the ns-map,
- * since they won't be referenced by node->ns.
- */
- if ((cur->nsDef) &&
- ((ctxt == NULL) || (ctxt->getNsForNodeFunc == NULL)))
- {
- if (! parnsdone) {
- /*
- * Gather @parent's in-scope ns-decls.
- */
- if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
- destParent) == -1)
- goto internal_error;
- parnsdone = 1;
- }
- for (ns = cur->nsDef; ns != NULL; ns = ns->next) {
- /*
- * NOTE: ns->prefix and ns->href are never in the dict.
- * XML_TREE_ADOPT_STR(ns->prefix)
- * XML_TREE_ADOPT_STR(ns->href)
- */
- /*
- * Does it shadow any ns-decl?
- */
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- XML_NSMAP_FOREACH(nsMap, mi) {
- if ((mi->depth >= XML_TREE_NSMAP_PARENT) &&
- (mi->shadowDepth == -1) &&
- ((ns->prefix == mi->newNs->prefix) ||
- xmlStrEqual(ns->prefix,
- mi->newNs->prefix))) {
-
- mi->shadowDepth = depth;
- }
- }
- }
- /*
- * Push mapping.
- */
- if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
- ns, ns, depth) == NULL)
- goto internal_error;
- }
- }
- /* No break on purpose. */
- case XML_ATTRIBUTE_NODE:
- /* No namespace, no fun. */
- if (cur->ns == NULL)
- goto ns_end;
-
- if (! parnsdone) {
- if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
- destParent) == -1)
- goto internal_error;
- parnsdone = 1;
- }
- /*
- * Adopt ns-references.
- */
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- /*
- * Search for a mapping.
- */
- XML_NSMAP_FOREACH(nsMap, mi) {
- if ((mi->shadowDepth == -1) &&
- (cur->ns == mi->oldNs)) {
-
- cur->ns = mi->newNs;
- goto ns_end;
- }
- }
- }
- /*
- * No matching namespace in scope. We need a new one.
- */
- if ((ctxt) && (ctxt->getNsForNodeFunc)) {
- /*
- * User-defined behaviour.
- */
- ns = ctxt->getNsForNodeFunc(ctxt, cur,
- cur->ns->href, cur->ns->prefix);
- /*
- * Insert mapping if ns is available; it's the users fault
- * if not.
- */
- if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
- cur->ns, ns, XML_TREE_NSMAP_CUSTOM) == NULL)
- goto internal_error;
- cur->ns = ns;
- } else {
- /*
- * Aquire a normalized ns-decl and add it to the map.
- */
- if (xmlDOMWrapNSNormAquireNormalizedNs(destDoc,
- /* ns-decls on curElem or on destDoc->oldNs */
- destParent ? curElem : NULL,
- cur->ns, &ns,
- &nsMap, depth,
- ancestorsOnly,
- /* ns-decls must be prefixed for attributes. */
- (cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1)
- goto internal_error;
- cur->ns = ns;
- }
-ns_end:
- /*
- * Further node properties.
- * TODO: Is this all?
- */
- XML_TREE_ADOPT_STR(cur->name)
- if (cur->type == XML_ELEMENT_NODE) {
- cur->psvi = NULL;
- cur->line = 0;
- cur->extra = 0;
- /*
- * Walk attributes.
- */
- if (cur->properties != NULL) {
- /*
- * Process first attribute node.
- */
- cur = (xmlNodePtr) cur->properties;
- continue;
- }
- } else {
- /*
- * Attributes.
- */
- if ((sourceDoc != NULL) &&
- (((xmlAttrPtr) cur)->atype == XML_ATTRIBUTE_ID))
- {
- xmlRemoveID(sourceDoc, (xmlAttrPtr) cur);
- }
- ((xmlAttrPtr) cur)->atype = 0;
- ((xmlAttrPtr) cur)->psvi = NULL;
- }
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- /*
- * This puts the content in the dest dict, only if
- * it was previously in the source dict.
- */
- XML_TREE_ADOPT_STR_2(cur->content)
- goto leave_node;
- case XML_ENTITY_REF_NODE:
- /*
- * Remove reference to the entitity-node.
- */
- cur->content = NULL;
- cur->children = NULL;
- cur->last = NULL;
- if ((destDoc->intSubset) || (destDoc->extSubset)) {
- xmlEntityPtr ent;
- /*
- * Assign new entity-node if available.
- */
- ent = xmlGetDocEntity(destDoc, cur->name);
- if (ent != NULL) {
- cur->content = ent->content;
- cur->children = (xmlNodePtr) ent;
- cur->last = (xmlNodePtr) ent;
- }
- }
- goto leave_node;
- case XML_PI_NODE:
- XML_TREE_ADOPT_STR(cur->name)
- XML_TREE_ADOPT_STR_2(cur->content)
- break;
- case XML_COMMENT_NODE:
- break;
- default:
- goto internal_error;
- }
- /*
- * Walk the tree.
- */
- if (cur->children != NULL) {
- cur = cur->children;
- continue;
- }
-
-leave_node:
- if (cur == node)
- break;
- if ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END))
- {
- /*
- * TODO: Do we expect nsDefs on XML_XINCLUDE_START?
- */
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- /*
- * Pop mappings.
- */
- while ((nsMap->last != NULL) &&
- (nsMap->last->depth >= depth))
- {
- XML_NSMAP_POP(nsMap, mi)
- }
- /*
- * Unshadow.
- */
- XML_NSMAP_FOREACH(nsMap, mi) {
- if (mi->shadowDepth >= depth)
- mi->shadowDepth = -1;
- }
- }
- depth--;
- }
- if (cur->next != NULL)
- cur = cur->next;
- else if ((cur->type == XML_ATTRIBUTE_NODE) &&
- (cur->parent->children != NULL))
- {
- cur = cur->parent->children;
- } else {
- cur = cur->parent;
- goto leave_node;
- }
- }
-
- goto exit;
-
-internal_error:
- ret = -1;
-
-exit:
- /*
- * Cleanup.
- */
- if (nsMap != NULL) {
- if ((ctxt) && (ctxt->namespaceMap == nsMap)) {
- /*
- * Just cleanup the map but don't free.
- */
- if (nsMap->first) {
- if (nsMap->pool)
- nsMap->last->next = nsMap->pool;
- nsMap->pool = nsMap->first;
- nsMap->first = NULL;
- }
- } else
- xmlDOMWrapNsMapFree(nsMap);
- }
- return(ret);
-}
-
-/*
-* xmlDOMWrapCloneNode:
-* @ctxt: the optional context for custom processing
-* @sourceDoc: the optional sourceDoc
-* @node: the node to start with
-* @resNode: the clone of the given @node
-* @destDoc: the destination doc
-* @destParent: the optional new parent of @node in @destDoc
-* @deep: descend into child if set
-* @options: option flags
-*
-* References of out-of scope ns-decls are remapped to point to @destDoc:
-* 1) If @destParent is given, then nsDef entries on element-nodes are used
-* 2) If *no* @destParent is given, then @destDoc->oldNs entries are used.
-* This is the case when you don't know already where the cloned branch
-* will be added to.
-*
-* If @destParent is given, it ensures that the tree is namespace
-* wellformed by creating additional ns-decls where needed.
-* Note that, since prefixes of already existent ns-decls can be
-* shadowed by this process, it could break QNames in attribute
-* values or element content.
-* TODO:
-* 1) What to do with XInclude? Currently this returns an error for XInclude.
-*
-* Returns 0 if the operation succeeded,
-* 1 if a node of unsupported (or not yet supported) type was given,
-* -1 on API/internal errors.
-*/
-
-int
-xmlDOMWrapCloneNode(xmlDOMWrapCtxtPtr ctxt,
- xmlDocPtr sourceDoc,
- xmlNodePtr node,
- xmlNodePtr *resNode,
- xmlDocPtr destDoc,
- xmlNodePtr destParent,
- int deep,
- int options ATTRIBUTE_UNUSED)
-{
- int ret = 0;
- xmlNodePtr cur, curElem = NULL;
- xmlNsMapPtr nsMap = NULL;
- xmlNsMapItemPtr mi;
- xmlNsPtr ns;
- int depth = -1;
- /* int adoptStr = 1; */
- /* gather @parent's ns-decls. */
- int parnsdone = 0;
- /*
- * @ancestorsOnly:
- * TODO: @ancestorsOnly should be set per option.
- *
- */
- int ancestorsOnly = 0;
- xmlNodePtr resultClone = NULL, clone = NULL, parentClone = NULL, prevClone = NULL;
- xmlNsPtr cloneNs = NULL, *cloneNsDefSlot = NULL;
- xmlDictPtr dict; /* The destination dict */
-
- if ((node == NULL) || (resNode == NULL) || (destDoc == NULL))
- return(-1);
- /*
- * TODO: Initially we support only element-nodes.
- */
- if (node->type != XML_ELEMENT_NODE)
- return(1);
- /*
- * Check node->doc sanity.
- */
- if ((node->doc != NULL) && (sourceDoc != NULL) &&
- (node->doc != sourceDoc)) {
- /*
- * Might be an XIncluded node.
- */
- return (-1);
- }
- if (sourceDoc == NULL)
- sourceDoc = node->doc;
- if (sourceDoc == NULL)
- return (-1);
-
- dict = destDoc->dict;
- /*
- * Reuse the namespace map of the context.
- */
- if (ctxt)
- nsMap = (xmlNsMapPtr) ctxt->namespaceMap;
-
- *resNode = NULL;
-
- cur = node;
- if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL))
- return(-1);
-
- while (cur != NULL) {
- if (cur->doc != sourceDoc) {
- /*
- * We'll assume XIncluded nodes if the doc differs.
- * TODO: Do we need to reconciliate XIncluded nodes?
- * TODO: This here returns -1 in this case.
- */
- goto internal_error;
- }
- /*
- * Create a new node.
- */
- switch (cur->type) {
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- /*
- * TODO: What to do with XInclude?
- */
- goto internal_error;
- break;
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_PI_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- /*
- * Nodes of xmlNode structure.
- */
- clone = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (clone == NULL) {
- xmlTreeErrMemory("xmlDOMWrapCloneNode(): allocating a node");
- goto internal_error;
- }
- memset(clone, 0, sizeof(xmlNode));
- /*
- * Set hierachical links.
- */
- if (resultClone != NULL) {
- clone->parent = parentClone;
- if (prevClone) {
- prevClone->next = clone;
- clone->prev = prevClone;
- } else
- parentClone->children = clone;
- } else
- resultClone = clone;
-
- break;
- case XML_ATTRIBUTE_NODE:
- /*
- * Attributes (xmlAttr).
- */
- clone = (xmlNodePtr) xmlMalloc(sizeof(xmlAttr));
- if (clone == NULL) {
- xmlTreeErrMemory("xmlDOMWrapCloneNode(): allocating an attr-node");
- goto internal_error;
- }
- memset(clone, 0, sizeof(xmlAttr));
- /*
- * Set hierachical links.
- * TODO: Change this to add to the end of attributes.
- */
- if (resultClone != NULL) {
- clone->parent = parentClone;
- if (prevClone) {
- prevClone->next = clone;
- clone->prev = prevClone;
- } else
- parentClone->properties = (xmlAttrPtr) clone;
- } else
- resultClone = clone;
- break;
- default:
- /*
- * TODO QUESTION: Any other nodes expected?
- */
- goto internal_error;
- }
-
- clone->type = cur->type;
- clone->doc = destDoc;
-
- /*
- * Clone the name of the node if any.
- */
- if (cur->name == xmlStringText)
- clone->name = xmlStringText;
- else if (cur->name == xmlStringTextNoenc)
- /*
- * NOTE: Although xmlStringTextNoenc is never assigned to a node
- * in tree.c, it might be set in Libxslt via
- * "xsl:disable-output-escaping".
- */
- clone->name = xmlStringTextNoenc;
- else if (cur->name == xmlStringComment)
- clone->name = xmlStringComment;
- else if (cur->name != NULL) {
- DICT_CONST_COPY(cur->name, clone->name);
- }
-
- switch (cur->type) {
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- /*
- * TODO
- */
- return (-1);
- case XML_ELEMENT_NODE:
- curElem = cur;
- depth++;
- /*
- * Namespace declarations.
- */
- if (cur->nsDef != NULL) {
- if (! parnsdone) {
- if (destParent && (ctxt == NULL)) {
- /*
- * Gather @parent's in-scope ns-decls.
- */
- if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap,
- destParent) == -1)
- goto internal_error;
- }
- parnsdone = 1;
- }
- /*
- * Clone namespace declarations.
- */
- cloneNsDefSlot = &(clone->nsDef);
- for (ns = cur->nsDef; ns != NULL; ns = ns->next) {
- /*
- * Create a new xmlNs.
- */
- cloneNs = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
- if (cloneNs == NULL) {
- xmlTreeErrMemory("xmlDOMWrapCloneNode(): "
- "allocating namespace");
- return(-1);
- }
- memset(cloneNs, 0, sizeof(xmlNs));
- cloneNs->type = XML_LOCAL_NAMESPACE;
-
- if (ns->href != NULL)
- cloneNs->href = xmlStrdup(ns->href);
- if (ns->prefix != NULL)
- cloneNs->prefix = xmlStrdup(ns->prefix);
-
- *cloneNsDefSlot = cloneNs;
- cloneNsDefSlot = &(cloneNs->next);
-
- /*
- * Note that for custom handling of ns-references,
- * the ns-decls need not be stored in the ns-map,
- * since they won't be referenced by node->ns.
- */
- if ((ctxt == NULL) ||
- (ctxt->getNsForNodeFunc == NULL))
- {
- /*
- * Does it shadow any ns-decl?
- */
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- XML_NSMAP_FOREACH(nsMap, mi) {
- if ((mi->depth >= XML_TREE_NSMAP_PARENT) &&
- (mi->shadowDepth == -1) &&
- ((ns->prefix == mi->newNs->prefix) ||
- xmlStrEqual(ns->prefix,
- mi->newNs->prefix))) {
- /*
- * Mark as shadowed at the current
- * depth.
- */
- mi->shadowDepth = depth;
- }
- }
- }
- /*
- * Push mapping.
- */
- if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
- ns, cloneNs, depth) == NULL)
- goto internal_error;
- }
- }
- }
- /* cur->ns will be processed further down. */
- break;
- case XML_ATTRIBUTE_NODE:
- /* IDs will be processed further down. */
- /* cur->ns will be processed further down. */
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- /*
- * Note that this will also cover the values of attributes.
- */
- DICT_COPY(cur->content, clone->content);
- goto leave_node;
- case XML_ENTITY_NODE:
- /* TODO: What to do here? */
- goto leave_node;
- case XML_ENTITY_REF_NODE:
- if (sourceDoc != destDoc) {
- if ((destDoc->intSubset) || (destDoc->extSubset)) {
- xmlEntityPtr ent;
- /*
- * Different doc: Assign new entity-node if available.
- */
- ent = xmlGetDocEntity(destDoc, cur->name);
- if (ent != NULL) {
- clone->content = ent->content;
- clone->children = (xmlNodePtr) ent;
- clone->last = (xmlNodePtr) ent;
- }
- }
- } else {
- /*
- * Same doc: Use the current node's entity declaration
- * and value.
- */
- clone->content = cur->content;
- clone->children = cur->children;
- clone->last = cur->last;
- }
- goto leave_node;
- case XML_PI_NODE:
- DICT_COPY(cur->content, clone->content);
- goto leave_node;
- case XML_COMMENT_NODE:
- DICT_COPY(cur->content, clone->content);
- goto leave_node;
- default:
- goto internal_error;
- }
-
- if (cur->ns == NULL)
- goto end_ns_reference;
-
-/* handle_ns_reference: */
- /*
- ** The following will take care of references to ns-decls ********
- ** and is intended only for element- and attribute-nodes.
- **
- */
- if (! parnsdone) {
- if (destParent && (ctxt == NULL)) {
- if (xmlDOMWrapNSNormGatherInScopeNs(&nsMap, destParent) == -1)
- goto internal_error;
- }
- parnsdone = 1;
- }
- /*
- * Adopt ns-references.
- */
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- /*
- * Search for a mapping.
- */
- XML_NSMAP_FOREACH(nsMap, mi) {
- if ((mi->shadowDepth == -1) &&
- (cur->ns == mi->oldNs)) {
- /*
- * This is the nice case: a mapping was found.
- */
- clone->ns = mi->newNs;
- goto end_ns_reference;
- }
- }
- }
- /*
- * No matching namespace in scope. We need a new one.
- */
- if ((ctxt != NULL) && (ctxt->getNsForNodeFunc != NULL)) {
- /*
- * User-defined behaviour.
- */
- ns = ctxt->getNsForNodeFunc(ctxt, cur,
- cur->ns->href, cur->ns->prefix);
- /*
- * Add user's mapping.
- */
- if (xmlDOMWrapNsMapAddItem(&nsMap, -1,
- cur->ns, ns, XML_TREE_NSMAP_CUSTOM) == NULL)
- goto internal_error;
- clone->ns = ns;
- } else {
- /*
- * Aquire a normalized ns-decl and add it to the map.
- */
- if (xmlDOMWrapNSNormAquireNormalizedNs(destDoc,
- /* ns-decls on curElem or on destDoc->oldNs */
- destParent ? curElem : NULL,
- cur->ns, &ns,
- &nsMap, depth,
- /* if we need to search only in the ancestor-axis */
- ancestorsOnly,
- /* ns-decls must be prefixed for attributes. */
- (cur->type == XML_ATTRIBUTE_NODE) ? 1 : 0) == -1)
- goto internal_error;
- clone->ns = ns;
- }
-
-end_ns_reference:
-
- /*
- * Some post-processing.
- *
- * Handle ID attributes.
- */
- if ((clone->type == XML_ATTRIBUTE_NODE) &&
- (clone->parent != NULL))
- {
- if (xmlIsID(destDoc, clone->parent, (xmlAttrPtr) clone)) {
-
- xmlChar *idVal;
-
- idVal = xmlNodeListGetString(cur->doc, cur->children, 1);
- if (idVal != NULL) {
- if (xmlAddID(NULL, destDoc, idVal, (xmlAttrPtr) cur) == NULL) {
- /* TODO: error message. */
- xmlFree(idVal);
- goto internal_error;
- }
- xmlFree(idVal);
- }
- }
- }
- /*
- **
- ** The following will traverse the tree **************************
- **
- *
- * Walk the element's attributes before descending into child-nodes.
- */
- if ((cur->type == XML_ELEMENT_NODE) && (cur->properties != NULL)) {
- prevClone = NULL;
- parentClone = clone;
- cur = (xmlNodePtr) cur->properties;
- continue;
- }
-into_content:
- /*
- * Descend into child-nodes.
- */
- if (cur->children != NULL) {
- if (deep || (cur->type == XML_ATTRIBUTE_NODE)) {
- prevClone = NULL;
- parentClone = clone;
- cur = cur->children;
- continue;
- }
- }
-
-leave_node:
- /*
- * At this point we are done with the node, its content
- * and an element-nodes's attribute-nodes.
- */
- if (cur == node)
- break;
- if ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) {
- /*
- * TODO: Do we expect nsDefs on XML_XINCLUDE_START?
- */
- if (XML_NSMAP_NOTEMPTY(nsMap)) {
- /*
- * Pop mappings.
- */
- while ((nsMap->last != NULL) &&
- (nsMap->last->depth >= depth))
- {
- XML_NSMAP_POP(nsMap, mi)
- }
- /*
- * Unshadow.
- */
- XML_NSMAP_FOREACH(nsMap, mi) {
- if (mi->shadowDepth >= depth)
- mi->shadowDepth = -1;
- }
- }
- depth--;
- }
- if (cur->next != NULL) {
- prevClone = clone;
- cur = cur->next;
- } else if (cur->type != XML_ATTRIBUTE_NODE) {
- /*
- * Set clone->last.
- */
- if (clone->parent != NULL)
- clone->parent->last = clone;
- clone = clone->parent;
- if (clone != NULL)
- parentClone = clone->parent;
- /*
- * Process parent --> next;
- */
- cur = cur->parent;
- goto leave_node;
- } else {
- /* This is for attributes only. */
- clone = clone->parent;
- parentClone = clone->parent;
- /*
- * Process parent-element --> children.
- */
- cur = cur->parent;
- goto into_content;
- }
- }
- goto exit;
-
-internal_error:
- ret = -1;
-
-exit:
- /*
- * Cleanup.
- */
- if (nsMap != NULL) {
- if ((ctxt) && (ctxt->namespaceMap == nsMap)) {
- /*
- * Just cleanup the map but don't free.
- */
- if (nsMap->first) {
- if (nsMap->pool)
- nsMap->last->next = nsMap->pool;
- nsMap->pool = nsMap->first;
- nsMap->first = NULL;
- }
- } else
- xmlDOMWrapNsMapFree(nsMap);
- }
- /*
- * TODO: Should we try a cleanup of the cloned node in case of a
- * fatal error?
- */
- *resNode = resultClone;
- return (ret);
-}
-
-/*
-* xmlDOMWrapAdoptAttr:
-* @ctxt: the optional context for custom processing
-* @sourceDoc: the optional source document of attr
-* @attr: the attribute-node to be adopted
-* @destDoc: the destination doc for adoption
-* @destParent: the optional new parent of @attr in @destDoc
-* @options: option flags
-*
-* @attr is adopted by @destDoc.
-* Ensures that ns-references point to @destDoc: either to
-* elements->nsDef entries if @destParent is given, or to
-* @destDoc->oldNs otherwise.
-*
-* Returns 0 if succeeded, -1 otherwise and on API/internal errors.
-*/
-static int
-xmlDOMWrapAdoptAttr(xmlDOMWrapCtxtPtr ctxt,
- xmlDocPtr sourceDoc,
- xmlAttrPtr attr,
- xmlDocPtr destDoc,
- xmlNodePtr destParent,
- int options ATTRIBUTE_UNUSED)
-{
- xmlNodePtr cur;
- int adoptStr = 1;
-
- if ((attr == NULL) || (destDoc == NULL))
- return (-1);
-
- attr->doc = destDoc;
- if (attr->ns != NULL) {
- xmlNsPtr ns = NULL;
-
- if (ctxt != NULL) {
- /* TODO: User defined. */
- }
- /* XML Namespace. */
- if (IS_STR_XML(attr->ns->prefix)) {
- ns = xmlTreeEnsureXMLDecl(destDoc);
- } else if (destParent == NULL) {
- /*
- * Store in @destDoc->oldNs.
- */
- ns = xmlDOMWrapStoreNs(destDoc, attr->ns->href, attr->ns->prefix);
- } else {
- /*
- * Declare on @destParent.
- */
- if (xmlSearchNsByNamespaceStrict(destDoc, destParent, attr->ns->href,
- &ns, 1) == -1)
- goto internal_error;
- if (ns == NULL) {
- ns = xmlDOMWrapNSNormDeclareNsForced(destDoc, destParent,
- attr->ns->href, attr->ns->prefix, 1);
- }
- }
- if (ns == NULL)
- goto internal_error;
- attr->ns = ns;
- }
-
- XML_TREE_ADOPT_STR(attr->name);
- attr->atype = 0;
- attr->psvi = NULL;
- /*
- * Walk content.
- */
- if (attr->children == NULL)
- return (0);
- cur = attr->children;
- if ((cur != NULL) && (cur->type == XML_NAMESPACE_DECL))
- goto internal_error;
- while (cur != NULL) {
- cur->doc = destDoc;
- switch (cur->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- XML_TREE_ADOPT_STR_2(cur->content)
- break;
- case XML_ENTITY_REF_NODE:
- /*
- * Remove reference to the entitity-node.
- */
- cur->content = NULL;
- cur->children = NULL;
- cur->last = NULL;
- if ((destDoc->intSubset) || (destDoc->extSubset)) {
- xmlEntityPtr ent;
- /*
- * Assign new entity-node if available.
- */
- ent = xmlGetDocEntity(destDoc, cur->name);
- if (ent != NULL) {
- cur->content = ent->content;
- cur->children = (xmlNodePtr) ent;
- cur->last = (xmlNodePtr) ent;
- }
- }
- break;
- default:
- break;
- }
- if (cur->children != NULL) {
- cur = cur->children;
- continue;
- }
-next_sibling:
- if (cur == (xmlNodePtr) attr)
- break;
- if (cur->next != NULL)
- cur = cur->next;
- else {
- cur = cur->parent;
- goto next_sibling;
- }
- }
- return (0);
-internal_error:
- return (-1);
-}
-
-/*
-* xmlDOMWrapAdoptNode:
-* @ctxt: the optional context for custom processing
-* @sourceDoc: the optional sourceDoc
-* @node: the node to start with
-* @destDoc: the destination doc
-* @destParent: the optional new parent of @node in @destDoc
-* @options: option flags
-*
-* References of out-of scope ns-decls are remapped to point to @destDoc:
-* 1) If @destParent is given, then nsDef entries on element-nodes are used
-* 2) If *no* @destParent is given, then @destDoc->oldNs entries are used
-* This is the case when you have an unlinked node and just want to move it
-* to the context of
-*
-* If @destParent is given, it ensures that the tree is namespace
-* wellformed by creating additional ns-decls where needed.
-* Note that, since prefixes of already existent ns-decls can be
-* shadowed by this process, it could break QNames in attribute
-* values or element content.
-* NOTE: This function was not intensively tested.
-*
-* Returns 0 if the operation succeeded,
-* 1 if a node of unsupported type was given,
-* 2 if a node of not yet supported type was given and
-* -1 on API/internal errors.
-*/
-int
-xmlDOMWrapAdoptNode(xmlDOMWrapCtxtPtr ctxt,
- xmlDocPtr sourceDoc,
- xmlNodePtr node,
- xmlDocPtr destDoc,
- xmlNodePtr destParent,
- int options)
-{
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) ||
- (destDoc == NULL) ||
- ((destParent != NULL) && (destParent->doc != destDoc)))
- return(-1);
- /*
- * Check node->doc sanity.
- */
- if ((node->doc != NULL) && (sourceDoc != NULL) &&
- (node->doc != sourceDoc)) {
- /*
- * Might be an XIncluded node.
- */
- return (-1);
- }
- if (sourceDoc == NULL)
- sourceDoc = node->doc;
- if (sourceDoc == destDoc)
- return (-1);
- switch (node->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- break;
- case XML_DOCUMENT_FRAG_NODE:
- /* TODO: Support document-fragment-nodes. */
- return (2);
- default:
- return (1);
- }
- /*
- * Unlink only if @node was not already added to @destParent.
- */
- if ((node->parent != NULL) && (destParent != node->parent))
- xmlUnlinkNode(node);
-
- if (node->type == XML_ELEMENT_NODE) {
- return (xmlDOMWrapAdoptBranch(ctxt, sourceDoc, node,
- destDoc, destParent, options));
- } else if (node->type == XML_ATTRIBUTE_NODE) {
- return (xmlDOMWrapAdoptAttr(ctxt, sourceDoc,
- (xmlAttrPtr) node, destDoc, destParent, options));
- } else {
- xmlNodePtr cur = node;
- int adoptStr = 1;
-
- cur->doc = destDoc;
- /*
- * Optimize string adoption.
- */
- if ((sourceDoc != NULL) &&
- (sourceDoc->dict == destDoc->dict))
- adoptStr = 0;
- switch (node->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- XML_TREE_ADOPT_STR_2(node->content)
- break;
- case XML_ENTITY_REF_NODE:
- /*
- * Remove reference to the entitity-node.
- */
- node->content = NULL;
- node->children = NULL;
- node->last = NULL;
- if ((destDoc->intSubset) || (destDoc->extSubset)) {
- xmlEntityPtr ent;
- /*
- * Assign new entity-node if available.
- */
- ent = xmlGetDocEntity(destDoc, node->name);
- if (ent != NULL) {
- node->content = ent->content;
- node->children = (xmlNodePtr) ent;
- node->last = (xmlNodePtr) ent;
- }
- }
- XML_TREE_ADOPT_STR(node->name)
- break;
- case XML_PI_NODE: {
- XML_TREE_ADOPT_STR(node->name)
- XML_TREE_ADOPT_STR_2(node->content)
- break;
- }
- default:
- break;
- }
- }
- return (0);
-}
-
-#define bottom_tree
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/trio.c b/external/libxml2_android/jni/libxml2/trio.c
deleted file mode 100644
index c8b9c84e..00000000
--- a/external/libxml2_android/jni/libxml2/trio.c
+++ /dev/null
@@ -1,6895 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- *************************************************************************
- *
- * A note to trio contributors:
- *
- * Avoid heap allocation at all costs to ensure that the trio functions
- * are async-safe. The exceptions are the printf/fprintf functions, which
- * uses fputc, and the asprintf functions and the <alloc> modifier, which
- * by design are required to allocate form the heap.
- *
- ************************************************************************/
-
-/*
- * TODO:
- * - Scan is probably too permissive about its modifiers.
- * - C escapes in %#[] ?
- * - Multibyte characters (done for format parsing, except scan groups)
- * - Complex numbers? (C99 _Complex)
- * - Boolean values? (C99 _Bool)
- * - C99 NaN(n-char-sequence) missing. The n-char-sequence can be used
- * to print the mantissa, e.g. NaN(0xc000000000000000)
- * - Should we support the GNU %a alloc modifier? GNU has an ugly hack
- * for %a, because C99 used %a for other purposes. If specified as
- * %as or %a[ it is interpreted as the alloc modifier, otherwise as
- * the C99 hex-float. This means that you cannot scan %as as a hex-float
- * immediately followed by an 's'.
- * - Scanning of collating symbols.
- */
-
-/*************************************************************************
- * Trio include files
- */
-#include "triodef.h"
-#include "trio.h"
-#include "triop.h"
-#include "trionan.h"
-#if !defined(TRIO_MINIMAL)
-# include "triostr.h"
-#endif
-
-/**************************************************************************
- *
- * Definitions
- *
- *************************************************************************/
-
-#include <math.h>
-#include <limits.h>
-#include <float.h>
-
-#if (defined(__STDC_ISO_10646__) || defined(MB_LEN_MAX) \
- || defined(USE_MULTIBYTE) || TRIO_WIDECHAR) \
- && !defined(_WIN32_WCE)
-# define TRIO_COMPILER_SUPPORTS_MULTIBYTE
-# if !defined(MB_LEN_MAX)
-# define MB_LEN_MAX 6
-# endif
-#endif
-
-#if (defined(TRIO_COMPILER_MSVC) && (_MSC_VER >= 1100)) || defined(TRIO_COMPILER_BCB)
-# define TRIO_COMPILER_SUPPORTS_MSVC_INT
-#endif
-
-#if defined(_WIN32_WCE)
-#include <wincecompat.h>
-#endif
-
-/*************************************************************************
- * Generic definitions
- */
-
-#if !(defined(DEBUG) || defined(NDEBUG))
-# define NDEBUG
-#endif
-
-#include <assert.h>
-#include <ctype.h>
-#if !defined(TRIO_COMPILER_SUPPORTS_C99)
-# define isblank(x) (((x)==32) || ((x)==9))
-#endif
-#if defined(TRIO_COMPILER_ANCIENT)
-# include <varargs.h>
-#else
-# include <stdarg.h>
-#endif
-#include <stddef.h>
-
-#if defined( HAVE_ERRNO_H ) || defined( __VMS )
-#include <errno.h>
-#endif
-
-#ifndef NULL
-# define NULL 0
-#endif
-#define NIL ((char)0)
-#ifndef FALSE
-# define FALSE (1 == 0)
-# define TRUE (! FALSE)
-#endif
-#define BOOLEAN_T int
-
-/* mincore() can be used for debugging purposes */
-#define VALID(x) (NULL != (x))
-
-#if TRIO_ERRORS
- /*
- * Encode the error code and the position. This is decoded
- * with TRIO_ERROR_CODE and TRIO_ERROR_POSITION.
- */
-# define TRIO_ERROR_RETURN(x,y) (- ((x) + ((y) << 8)))
-#else
-# define TRIO_ERROR_RETURN(x,y) (-1)
-#endif
-
-#ifndef VA_LIST_IS_ARRAY
-#define TRIO_VA_LIST_PTR va_list *
-#define TRIO_VA_LIST_ADDR(l) (&(l))
-#define TRIO_VA_LIST_DEREF(l) (*(l))
-#else
-#define TRIO_VA_LIST_PTR va_list
-#define TRIO_VA_LIST_ADDR(l) (l)
-#define TRIO_VA_LIST_DEREF(l) (l)
-#endif
-
-typedef unsigned long trio_flags_t;
-
-
-/*************************************************************************
- * Platform specific definitions
- */
-#if defined(TRIO_PLATFORM_UNIX) || defined(TRIO_PLATFORM_OS400)
-# include <unistd.h>
-# include <signal.h>
-# include <locale.h>
-# define USE_LOCALE
-#endif /* TRIO_PLATFORM_UNIX */
-#if defined(TRIO_PLATFORM_VMS)
-# include <unistd.h>
-#endif
-#if defined(TRIO_PLATFORM_WIN32)
-# if defined(_WIN32_WCE)
-# include <wincecompat.h>
-# else
-# include <io.h>
-# define read _read
-# define write _write
-# endif
-#endif /* TRIO_PLATFORM_WIN32 */
-
-#if TRIO_WIDECHAR
-# if defined(TRIO_COMPILER_SUPPORTS_ISO94)
-# include <wchar.h>
-# include <wctype.h>
-typedef wchar_t trio_wchar_t;
-typedef wint_t trio_wint_t;
-# else
-typedef char trio_wchar_t;
-typedef int trio_wint_t;
-# define WCONST(x) L ## x
-# define WEOF EOF
-# define iswalnum(x) isalnum(x)
-# define iswalpha(x) isalpha(x)
-# define iswblank(x) isblank(x)
-# define iswcntrl(x) iscntrl(x)
-# define iswdigit(x) isdigit(x)
-# define iswgraph(x) isgraph(x)
-# define iswlower(x) islower(x)
-# define iswprint(x) isprint(x)
-# define iswpunct(x) ispunct(x)
-# define iswspace(x) isspace(x)
-# define iswupper(x) isupper(x)
-# define iswxdigit(x) isxdigit(x)
-# endif
-#endif
-
-
-/*************************************************************************
- * Compiler dependent definitions
- */
-
-/* Support for long long */
-#ifndef __cplusplus
-# if !defined(USE_LONGLONG)
-# if defined(TRIO_COMPILER_GCC) && !defined(__STRICT_ANSI__)
-# define USE_LONGLONG
-# elif defined(TRIO_COMPILER_SUNPRO)
-# define USE_LONGLONG
-# elif defined(_LONG_LONG) || defined(_LONGLONG)
-# define USE_LONGLONG
-# endif
-# endif
-#endif
-
-/* The extra long numbers */
-#if defined(USE_LONGLONG)
-typedef signed long long int trio_longlong_t;
-typedef unsigned long long int trio_ulonglong_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_MSVC_INT)
-typedef signed __int64 trio_longlong_t;
-typedef unsigned __int64 trio_ulonglong_t;
-#else
-typedef TRIO_SIGNED long int trio_longlong_t;
-typedef unsigned long int trio_ulonglong_t;
-#endif
-
-/* Maximal and fixed integer types */
-#if defined(TRIO_COMPILER_SUPPORTS_C99) && !defined( __VMS )
-# include <stdint.h>
-typedef intmax_t trio_intmax_t;
-typedef uintmax_t trio_uintmax_t;
-typedef int8_t trio_int8_t;
-typedef int16_t trio_int16_t;
-typedef int32_t trio_int32_t;
-typedef int64_t trio_int64_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_UNIX98) || defined( __VMS )
-# include <inttypes.h>
-#ifdef __VMS
-typedef long long int intmax_t;
-typedef unsigned long long int uintmax_t;
-#endif
-typedef intmax_t trio_intmax_t;
-typedef uintmax_t trio_uintmax_t;
-typedef int8_t trio_int8_t;
-typedef int16_t trio_int16_t;
-typedef int32_t trio_int32_t;
-typedef int64_t trio_int64_t;
-#elif defined(TRIO_COMPILER_SUPPORTS_MSVC_INT)
-typedef trio_longlong_t trio_intmax_t;
-typedef trio_ulonglong_t trio_uintmax_t;
-typedef __int8 trio_int8_t;
-typedef __int16 trio_int16_t;
-typedef __int32 trio_int32_t;
-typedef __int64 trio_int64_t;
-#else
-typedef trio_longlong_t trio_intmax_t;
-typedef trio_ulonglong_t trio_uintmax_t;
-# if defined(TRIO_INT8_T)
-typedef TRIO_INT8_T trio_int8_t;
-# else
-typedef TRIO_SIGNED char trio_int8_t;
-# endif
-# if defined(TRIO_INT16_T)
-typedef TRIO_INT16_T trio_int16_t;
-# else
-typedef TRIO_SIGNED short trio_int16_t;
-# endif
-# if defined(TRIO_INT32_T)
-typedef TRIO_INT32_T trio_int32_t;
-# else
-typedef TRIO_SIGNED int trio_int32_t;
-# endif
-# if defined(TRIO_INT64_T)
-typedef TRIO_INT64_T trio_int64_t;
-# else
-typedef trio_longlong_t trio_int64_t;
-# endif
-#endif
-
-#if (!(defined(TRIO_COMPILER_SUPPORTS_C99) \
- || defined(TRIO_COMPILER_SUPPORTS_UNIX01))) \
- && !defined(_WIN32_WCE)
-# define floorl(x) floor((double)(x))
-# define fmodl(x,y) fmod((double)(x),(double)(y))
-# define powl(x,y) pow((double)(x),(double)(y))
-#endif
-
-#define TRIO_FABS(x) (((x) < 0.0) ? -(x) : (x))
-
-/*************************************************************************
- * Internal Definitions
- */
-
-#ifndef DECIMAL_DIG
-# define DECIMAL_DIG DBL_DIG
-#endif
-
-/* Long double sizes */
-#ifdef LDBL_DIG
-# define MAX_MANTISSA_DIGITS LDBL_DIG
-# define MAX_EXPONENT_DIGITS 4
-# define MAX_DOUBLE_DIGITS LDBL_MAX_10_EXP
-#else
-# define MAX_MANTISSA_DIGITS DECIMAL_DIG
-# define MAX_EXPONENT_DIGITS 3
-# define MAX_DOUBLE_DIGITS DBL_MAX_10_EXP
-#endif
-
-#if defined(TRIO_COMPILER_ANCIENT) || !defined(LDBL_DIG)
-# undef LDBL_DIG
-# undef LDBL_MANT_DIG
-# undef LDBL_EPSILON
-# define LDBL_DIG DBL_DIG
-# define LDBL_MANT_DIG DBL_MANT_DIG
-# define LDBL_EPSILON DBL_EPSILON
-#endif
-
-/* The maximal number of digits is for base 2 */
-#define MAX_CHARS_IN(x) (sizeof(x) * CHAR_BIT)
-/* The width of a pointer. The number of bits in a hex digit is 4 */
-#define POINTER_WIDTH ((sizeof("0x") - 1) + sizeof(trio_pointer_t) * CHAR_BIT / 4)
-
-/* Infinite and Not-A-Number for floating-point */
-#define INFINITE_LOWER "inf"
-#define INFINITE_UPPER "INF"
-#define LONG_INFINITE_LOWER "infinite"
-#define LONG_INFINITE_UPPER "INFINITE"
-#define NAN_LOWER "nan"
-#define NAN_UPPER "NAN"
-
-#if !defined(HAVE_ISASCII) && !defined(isascii)
-#ifndef __VMS
-# define isascii(x) ((unsigned int)(x) < 128)
-#endif
-#endif
-
-/* Various constants */
-enum {
- TYPE_PRINT = 1,
- TYPE_SCAN = 2,
-
- /* Flags. FLAGS_LAST must be less than ULONG_MAX */
- FLAGS_NEW = 0,
- FLAGS_STICKY = 1,
- FLAGS_SPACE = 2 * FLAGS_STICKY,
- FLAGS_SHOWSIGN = 2 * FLAGS_SPACE,
- FLAGS_LEFTADJUST = 2 * FLAGS_SHOWSIGN,
- FLAGS_ALTERNATIVE = 2 * FLAGS_LEFTADJUST,
- FLAGS_SHORT = 2 * FLAGS_ALTERNATIVE,
- FLAGS_SHORTSHORT = 2 * FLAGS_SHORT,
- FLAGS_LONG = 2 * FLAGS_SHORTSHORT,
- FLAGS_QUAD = 2 * FLAGS_LONG,
- FLAGS_LONGDOUBLE = 2 * FLAGS_QUAD,
- FLAGS_SIZE_T = 2 * FLAGS_LONGDOUBLE,
- FLAGS_PTRDIFF_T = 2 * FLAGS_SIZE_T,
- FLAGS_INTMAX_T = 2 * FLAGS_PTRDIFF_T,
- FLAGS_NILPADDING = 2 * FLAGS_INTMAX_T,
- FLAGS_UNSIGNED = 2 * FLAGS_NILPADDING,
- FLAGS_UPPER = 2 * FLAGS_UNSIGNED,
- FLAGS_WIDTH = 2 * FLAGS_UPPER,
- FLAGS_WIDTH_PARAMETER = 2 * FLAGS_WIDTH,
- FLAGS_PRECISION = 2 * FLAGS_WIDTH_PARAMETER,
- FLAGS_PRECISION_PARAMETER = 2 * FLAGS_PRECISION,
- FLAGS_BASE = 2 * FLAGS_PRECISION_PARAMETER,
- FLAGS_BASE_PARAMETER = 2 * FLAGS_BASE,
- FLAGS_FLOAT_E = 2 * FLAGS_BASE_PARAMETER,
- FLAGS_FLOAT_G = 2 * FLAGS_FLOAT_E,
- FLAGS_QUOTE = 2 * FLAGS_FLOAT_G,
- FLAGS_WIDECHAR = 2 * FLAGS_QUOTE,
- FLAGS_ALLOC = 2 * FLAGS_WIDECHAR,
- FLAGS_IGNORE = 2 * FLAGS_ALLOC,
- FLAGS_IGNORE_PARAMETER = 2 * FLAGS_IGNORE,
- FLAGS_VARSIZE_PARAMETER = 2 * FLAGS_IGNORE_PARAMETER,
- FLAGS_FIXED_SIZE = 2 * FLAGS_VARSIZE_PARAMETER,
- FLAGS_LAST = FLAGS_FIXED_SIZE,
- /* Reused flags */
- FLAGS_EXCLUDE = FLAGS_SHORT,
- FLAGS_USER_DEFINED = FLAGS_IGNORE,
- FLAGS_ROUNDING = FLAGS_INTMAX_T,
- /* Compounded flags */
- FLAGS_ALL_VARSIZES = FLAGS_LONG | FLAGS_QUAD | FLAGS_INTMAX_T | FLAGS_PTRDIFF_T | FLAGS_SIZE_T,
- FLAGS_ALL_SIZES = FLAGS_ALL_VARSIZES | FLAGS_SHORTSHORT | FLAGS_SHORT,
-
- NO_POSITION = -1,
- NO_WIDTH = 0,
- NO_PRECISION = -1,
- NO_SIZE = -1,
-
- /* Do not change these */
- NO_BASE = -1,
- MIN_BASE = 2,
- MAX_BASE = 36,
- BASE_BINARY = 2,
- BASE_OCTAL = 8,
- BASE_DECIMAL = 10,
- BASE_HEX = 16,
-
- /* Maximal number of allowed parameters */
- MAX_PARAMETERS = 64,
- /* Maximal number of characters in class */
- MAX_CHARACTER_CLASS = UCHAR_MAX + 1,
-
- /* Maximal string lengths for user-defined specifiers */
- MAX_USER_NAME = 64,
- MAX_USER_DATA = 256,
-
- /* Maximal length of locale separator strings */
- MAX_LOCALE_SEPARATOR_LENGTH = MB_LEN_MAX,
- /* Maximal number of integers in grouping */
- MAX_LOCALE_GROUPS = 64,
-
- /* Initial size of asprintf buffer */
- DYNAMIC_START_SIZE = 32
-};
-
-#define NO_GROUPING ((int)CHAR_MAX)
-
-/* Fundamental formatting parameter types */
-#define FORMAT_UNKNOWN 0
-#define FORMAT_INT 1
-#define FORMAT_DOUBLE 2
-#define FORMAT_CHAR 3
-#define FORMAT_STRING 4
-#define FORMAT_POINTER 5
-#define FORMAT_COUNT 6
-#define FORMAT_PARAMETER 7
-#define FORMAT_GROUP 8
-#if TRIO_GNU
-# define FORMAT_ERRNO 9
-#endif
-#if TRIO_EXTENSION
-# define FORMAT_USER_DEFINED 10
-#endif
-
-/* Character constants */
-#define CHAR_IDENTIFIER '%'
-#define CHAR_BACKSLASH '\\'
-#define CHAR_QUOTE '\"'
-#define CHAR_ADJUST ' '
-
-/* Character class expressions */
-#define CLASS_ALNUM "[:alnum:]"
-#define CLASS_ALPHA "[:alpha:]"
-#define CLASS_BLANK "[:blank:]"
-#define CLASS_CNTRL "[:cntrl:]"
-#define CLASS_DIGIT "[:digit:]"
-#define CLASS_GRAPH "[:graph:]"
-#define CLASS_LOWER "[:lower:]"
-#define CLASS_PRINT "[:print:]"
-#define CLASS_PUNCT "[:punct:]"
-#define CLASS_SPACE "[:space:]"
-#define CLASS_UPPER "[:upper:]"
-#define CLASS_XDIGIT "[:xdigit:]"
-
-/*
- * SPECIFIERS:
- *
- *
- * a Hex-float
- * A Hex-float
- * c Character
- * C Widechar character (wint_t)
- * d Decimal
- * e Float
- * E Float
- * F Float
- * F Float
- * g Float
- * G Float
- * i Integer
- * m Error message
- * n Count
- * o Octal
- * p Pointer
- * s String
- * S Widechar string (wchar_t *)
- * u Unsigned
- * x Hex
- * X Hex
- * [] Group
- * <> User-defined
- *
- * Reserved:
- *
- * D Binary Coded Decimal %D(length,precision) (OS/390)
- */
-#define SPECIFIER_CHAR 'c'
-#define SPECIFIER_STRING 's'
-#define SPECIFIER_DECIMAL 'd'
-#define SPECIFIER_INTEGER 'i'
-#define SPECIFIER_UNSIGNED 'u'
-#define SPECIFIER_OCTAL 'o'
-#define SPECIFIER_HEX 'x'
-#define SPECIFIER_HEX_UPPER 'X'
-#define SPECIFIER_FLOAT_E 'e'
-#define SPECIFIER_FLOAT_E_UPPER 'E'
-#define SPECIFIER_FLOAT_F 'f'
-#define SPECIFIER_FLOAT_F_UPPER 'F'
-#define SPECIFIER_FLOAT_G 'g'
-#define SPECIFIER_FLOAT_G_UPPER 'G'
-#define SPECIFIER_POINTER 'p'
-#define SPECIFIER_GROUP '['
-#define SPECIFIER_UNGROUP ']'
-#define SPECIFIER_COUNT 'n'
-#if TRIO_UNIX98
-# define SPECIFIER_CHAR_UPPER 'C'
-# define SPECIFIER_STRING_UPPER 'S'
-#endif
-#if TRIO_C99
-# define SPECIFIER_HEXFLOAT 'a'
-# define SPECIFIER_HEXFLOAT_UPPER 'A'
-#endif
-#if TRIO_GNU
-# define SPECIFIER_ERRNO 'm'
-#endif
-#if TRIO_EXTENSION
-# define SPECIFIER_BINARY 'b'
-# define SPECIFIER_BINARY_UPPER 'B'
-# define SPECIFIER_USER_DEFINED_BEGIN '<'
-# define SPECIFIER_USER_DEFINED_END '>'
-# define SPECIFIER_USER_DEFINED_SEPARATOR ':'
-#endif
-
-/*
- * QUALIFIERS:
- *
- *
- * Numbers = d,i,o,u,x,X
- * Float = a,A,e,E,f,F,g,G
- * String = s
- * Char = c
- *
- *
- * 9$ Position
- * Use the 9th parameter. 9 can be any number between 1 and
- * the maximal argument
- *
- * 9 Width
- * Set width to 9. 9 can be any number, but must not be postfixed
- * by '$'
- *
- * h Short
- * Numbers:
- * (unsigned) short int
- *
- * hh Short short
- * Numbers:
- * (unsigned) char
- *
- * l Long
- * Numbers:
- * (unsigned) long int
- * String:
- * as the S specifier
- * Char:
- * as the C specifier
- *
- * ll Long Long
- * Numbers:
- * (unsigned) long long int
- *
- * L Long Double
- * Float
- * long double
- *
- * # Alternative
- * Float:
- * Decimal-point is always present
- * String:
- * non-printable characters are handled as \number
- *
- * Spacing
- *
- * + Sign
- *
- * - Alignment
- *
- * . Precision
- *
- * * Parameter
- * print: use parameter
- * scan: no parameter (ignore)
- *
- * q Quad
- *
- * Z size_t
- *
- * w Widechar
- *
- * ' Thousands/quote
- * Numbers:
- * Integer part grouped in thousands
- * Binary numbers:
- * Number grouped in nibbles (4 bits)
- * String:
- * Quoted string
- *
- * j intmax_t
- * t prtdiff_t
- * z size_t
- *
- * ! Sticky
- * @ Parameter (for both print and scan)
- *
- * I n-bit Integer
- * Numbers:
- * The following options exists
- * I8 = 8-bit integer
- * I16 = 16-bit integer
- * I32 = 32-bit integer
- * I64 = 64-bit integer
- */
-#define QUALIFIER_POSITION '$'
-#define QUALIFIER_SHORT 'h'
-#define QUALIFIER_LONG 'l'
-#define QUALIFIER_LONG_UPPER 'L'
-#define QUALIFIER_ALTERNATIVE '#'
-#define QUALIFIER_SPACE ' '
-#define QUALIFIER_PLUS '+'
-#define QUALIFIER_MINUS '-'
-#define QUALIFIER_DOT '.'
-#define QUALIFIER_STAR '*'
-#define QUALIFIER_CIRCUMFLEX '^' /* For scanlists */
-#if TRIO_C99
-# define QUALIFIER_SIZE_T 'z'
-# define QUALIFIER_PTRDIFF_T 't'
-# define QUALIFIER_INTMAX_T 'j'
-#endif
-#if TRIO_BSD || TRIO_GNU
-# define QUALIFIER_QUAD 'q'
-#endif
-#if TRIO_GNU
-# define QUALIFIER_SIZE_T_UPPER 'Z'
-#endif
-#if TRIO_MISC
-# define QUALIFIER_WIDECHAR 'w'
-#endif
-#if TRIO_MICROSOFT
-# define QUALIFIER_FIXED_SIZE 'I'
-#endif
-#if TRIO_EXTENSION
-# define QUALIFIER_QUOTE '\''
-# define QUALIFIER_STICKY '!'
-# define QUALIFIER_VARSIZE '&' /* This should remain undocumented */
-# define QUALIFIER_PARAM '@' /* Experimental */
-# define QUALIFIER_COLON ':' /* For scanlists */
-# define QUALIFIER_EQUAL '=' /* For scanlists */
-# define QUALIFIER_ROUNDING_UPPER 'R'
-#endif
-
-
-/*************************************************************************
- *
- * Internal Structures
- *
- *************************************************************************/
-
-/* Parameters */
-typedef struct {
- /* An indication of which entry in the data union is used */
- int type;
- /* The flags */
- trio_flags_t flags;
- /* The width qualifier */
- int width;
- /* The precision qualifier */
- int precision;
- /* The base qualifier */
- int base;
- /* The size for the variable size qualifier */
- int varsize;
- /* The marker of the end of the specifier */
- int indexAfterSpecifier;
- /* The data from the argument list */
- union {
- char *string;
-#if TRIO_WIDECHAR
- trio_wchar_t *wstring;
-#endif
- trio_pointer_t pointer;
- union {
- trio_intmax_t as_signed;
- trio_uintmax_t as_unsigned;
- } number;
- double doubleNumber;
- double *doublePointer;
- trio_long_double_t longdoubleNumber;
- trio_long_double_t *longdoublePointer;
- int errorNumber;
- } data;
- /* For the user-defined specifier */
- char user_name[MAX_USER_NAME];
- char user_data[MAX_USER_DATA];
-} trio_parameter_t;
-
-/* Container for customized functions */
-typedef struct {
- union {
- trio_outstream_t out;
- trio_instream_t in;
- } stream;
- trio_pointer_t closure;
-} trio_custom_t;
-
-/* General trio "class" */
-typedef struct _trio_class_t {
- /*
- * The function to write characters to a stream.
- */
- void (*OutStream) TRIO_PROTO((struct _trio_class_t *, int));
- /*
- * The function to read characters from a stream.
- */
- void (*InStream) TRIO_PROTO((struct _trio_class_t *, int *));
- /*
- * The current location in the stream.
- */
- trio_pointer_t location;
- /*
- * The character currently being processed.
- */
- int current;
- /*
- * The number of characters that would have been written/read
- * if there had been sufficient space.
- */
- int processed;
- /*
- * The number of characters that are actually written/read.
- * Processed and committed will only differ for the *nprintf
- * and *nscanf functions.
- */
- int committed;
- /*
- * The upper limit of characters that may be written/read.
- */
- int max;
- /*
- * The last output error that was detected.
- */
- int error;
-} trio_class_t;
-
-/* References (for user-defined callbacks) */
-typedef struct _trio_reference_t {
- trio_class_t *data;
- trio_parameter_t *parameter;
-} trio_reference_t;
-
-/* Registered entries (for user-defined callbacks) */
-typedef struct _trio_userdef_t {
- struct _trio_userdef_t *next;
- trio_callback_t callback;
- char *name;
-} trio_userdef_t;
-
-/*************************************************************************
- *
- * Internal Variables
- *
- *************************************************************************/
-
-static TRIO_CONST char rcsid[] = "@(#)$Id$";
-
-/*
- * Need this to workaround a parser bug in HP C/iX compiler that fails
- * to resolves macro definitions that includes type 'long double',
- * e.g: va_arg(arg_ptr, long double)
- */
-#if defined(TRIO_PLATFORM_MPEIX)
-static TRIO_CONST trio_long_double_t ___dummy_long_double = 0;
-#endif
-
-static TRIO_CONST char internalNullString[] = "(nil)";
-
-#if defined(USE_LOCALE)
-static struct lconv *internalLocaleValues = NULL;
-#endif
-
-/*
- * UNIX98 says "in a locale where the radix character is not defined,
- * the radix character defaults to a period (.)"
- */
-static int internalDecimalPointLength = 1;
-static int internalThousandSeparatorLength = 1;
-static char internalDecimalPoint = '.';
-static char internalDecimalPointString[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ".";
-static char internalThousandSeparator[MAX_LOCALE_SEPARATOR_LENGTH + 1] = ",";
-static char internalGrouping[MAX_LOCALE_GROUPS] = { (char)NO_GROUPING };
-
-static TRIO_CONST char internalDigitsLower[] = "0123456789abcdefghijklmnopqrstuvwxyz";
-static TRIO_CONST char internalDigitsUpper[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
-static BOOLEAN_T internalDigitsUnconverted = TRUE;
-static int internalDigitArray[128];
-#if TRIO_EXTENSION
-static BOOLEAN_T internalCollationUnconverted = TRUE;
-static char internalCollationArray[MAX_CHARACTER_CLASS][MAX_CHARACTER_CLASS];
-#endif
-
-#if TRIO_EXTENSION
-static TRIO_VOLATILE trio_callback_t internalEnterCriticalRegion = NULL;
-static TRIO_VOLATILE trio_callback_t internalLeaveCriticalRegion = NULL;
-static trio_userdef_t *internalUserDef = NULL;
-#endif
-
-
-/*************************************************************************
- *
- * Internal Functions
- *
- ************************************************************************/
-
-#if defined(TRIO_MINIMAL)
-# define TRIO_STRING_PUBLIC static
-# include "triostr.c"
-#endif /* defined(TRIO_MINIMAL) */
-
-/*************************************************************************
- * TrioIsQualifier
- *
- * Description:
- * Remember to add all new qualifiers to this function.
- * QUALIFIER_POSITION must not be added.
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioIsQualifier
-TRIO_ARGS1((character),
- TRIO_CONST char character)
-{
- /* QUALIFIER_POSITION is not included */
- switch (character)
- {
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case QUALIFIER_PLUS:
- case QUALIFIER_MINUS:
- case QUALIFIER_SPACE:
- case QUALIFIER_DOT:
- case QUALIFIER_STAR:
- case QUALIFIER_ALTERNATIVE:
- case QUALIFIER_SHORT:
- case QUALIFIER_LONG:
- case QUALIFIER_LONG_UPPER:
- case QUALIFIER_CIRCUMFLEX:
-#if defined(QUALIFIER_SIZE_T)
- case QUALIFIER_SIZE_T:
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
- case QUALIFIER_PTRDIFF_T:
-#endif
-#if defined(QUALIFIER_INTMAX_T)
- case QUALIFIER_INTMAX_T:
-#endif
-#if defined(QUALIFIER_QUAD)
- case QUALIFIER_QUAD:
-#endif
-#if defined(QUALIFIER_SIZE_T_UPPER)
- case QUALIFIER_SIZE_T_UPPER:
-#endif
-#if defined(QUALIFIER_WIDECHAR)
- case QUALIFIER_WIDECHAR:
-#endif
-#if defined(QUALIFIER_QUOTE)
- case QUALIFIER_QUOTE:
-#endif
-#if defined(QUALIFIER_STICKY)
- case QUALIFIER_STICKY:
-#endif
-#if defined(QUALIFIER_VARSIZE)
- case QUALIFIER_VARSIZE:
-#endif
-#if defined(QUALIFIER_PARAM)
- case QUALIFIER_PARAM:
-#endif
-#if defined(QUALIFIER_FIXED_SIZE)
- case QUALIFIER_FIXED_SIZE:
-#endif
-#if defined(QUALIFIER_ROUNDING_UPPER)
- case QUALIFIER_ROUNDING_UPPER:
-#endif
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-/*************************************************************************
- * TrioSetLocale
- */
-#if defined(USE_LOCALE)
-TRIO_PRIVATE void
-TrioSetLocale(TRIO_NOARGS)
-{
- internalLocaleValues = (struct lconv *)localeconv();
- if (internalLocaleValues)
- {
- if ((internalLocaleValues->decimal_point) &&
- (internalLocaleValues->decimal_point[0] != NIL))
- {
- internalDecimalPointLength = trio_length(internalLocaleValues->decimal_point);
- if (internalDecimalPointLength == 1)
- {
- internalDecimalPoint = internalLocaleValues->decimal_point[0];
- }
- else
- {
- internalDecimalPoint = NIL;
- trio_copy_max(internalDecimalPointString,
- sizeof(internalDecimalPointString),
- internalLocaleValues->decimal_point);
- }
- }
- if ((internalLocaleValues->thousands_sep) &&
- (internalLocaleValues->thousands_sep[0] != NIL))
- {
- trio_copy_max(internalThousandSeparator,
- sizeof(internalThousandSeparator),
- internalLocaleValues->thousands_sep);
- internalThousandSeparatorLength = trio_length(internalThousandSeparator);
- }
- if ((internalLocaleValues->grouping) &&
- (internalLocaleValues->grouping[0] != NIL))
- {
- trio_copy_max(internalGrouping,
- sizeof(internalGrouping),
- internalLocaleValues->grouping);
- }
- }
-}
-#endif /* defined(USE_LOCALE) */
-
-TRIO_PRIVATE int
-TrioCalcThousandSeparatorLength
-TRIO_ARGS1((digits),
- int digits)
-{
-#if TRIO_EXTENSION
- int count = 0;
- int step = NO_GROUPING;
- char *groupingPointer = internalGrouping;
-
- while (digits > 0)
- {
- if (*groupingPointer == CHAR_MAX)
- {
- /* Disable grouping */
- break; /* while */
- }
- else if (*groupingPointer == 0)
- {
- /* Repeat last group */
- if (step == NO_GROUPING)
- {
- /* Error in locale */
- break; /* while */
- }
- }
- else
- {
- step = *groupingPointer++;
- }
- if (digits > step)
- count += internalThousandSeparatorLength;
- digits -= step;
- }
- return count;
-#else
- return 0;
-#endif
-}
-
-TRIO_PRIVATE BOOLEAN_T
-TrioFollowedBySeparator
-TRIO_ARGS1((position),
- int position)
-{
-#if TRIO_EXTENSION
- int step = 0;
- char *groupingPointer = internalGrouping;
-
- position--;
- if (position == 0)
- return FALSE;
- while (position > 0)
- {
- if (*groupingPointer == CHAR_MAX)
- {
- /* Disable grouping */
- break; /* while */
- }
- else if (*groupingPointer != 0)
- {
- step = *groupingPointer++;
- }
- if (step == 0)
- break;
- position -= step;
- }
- return (position == 0);
-#else
- return FALSE;
-#endif
-}
-
-/*************************************************************************
- * TrioGetPosition
- *
- * Get the %n$ position.
- */
-TRIO_PRIVATE int
-TrioGetPosition
-TRIO_ARGS2((format, indexPointer),
- TRIO_CONST char *format,
- int *indexPointer)
-{
-#if TRIO_UNIX98
- char *tmpformat;
- int number = 0;
- int index = *indexPointer;
-
- number = (int)trio_to_long(&format[index], &tmpformat, BASE_DECIMAL);
- index = (int)(tmpformat - format);
- if ((number != 0) && (QUALIFIER_POSITION == format[index++]))
- {
- *indexPointer = index;
- /*
- * number is decreased by 1, because n$ starts from 1, whereas
- * the array it is indexing starts from 0.
- */
- return number - 1;
- }
-#endif
- return NO_POSITION;
-}
-
-#if TRIO_EXTENSION
-/*************************************************************************
- * TrioFindNamespace
- *
- * Find registered user-defined specifier.
- * The prev argument is used for optimization only.
- */
-TRIO_PRIVATE trio_userdef_t *
-TrioFindNamespace
-TRIO_ARGS2((name, prev),
- TRIO_CONST char *name,
- trio_userdef_t **prev)
-{
- trio_userdef_t *def;
-
- if (internalEnterCriticalRegion)
- (void)internalEnterCriticalRegion(NULL);
-
- for (def = internalUserDef; def; def = def->next)
- {
- /* Case-sensitive string comparison */
- if (trio_equal_case(def->name, name))
- break;
-
- if (prev)
- *prev = def;
- }
-
- if (internalLeaveCriticalRegion)
- (void)internalLeaveCriticalRegion(NULL);
-
- return def;
-}
-#endif
-
-/*************************************************************************
- * TrioPower
- *
- * Description:
- * Calculate pow(base, exponent), where number and exponent are integers.
- */
-TRIO_PRIVATE trio_long_double_t
-TrioPower
-TRIO_ARGS2((number, exponent),
- int number,
- int exponent)
-{
- trio_long_double_t result;
-
- if (number == 10)
- {
- switch (exponent)
- {
- /* Speed up calculation of common cases */
- case 0:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E-1);
- break;
- case 1:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+0);
- break;
- case 2:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+1);
- break;
- case 3:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+2);
- break;
- case 4:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+3);
- break;
- case 5:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+4);
- break;
- case 6:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+5);
- break;
- case 7:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+6);
- break;
- case 8:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+7);
- break;
- case 9:
- result = (trio_long_double_t)number * TRIO_SUFFIX_LONG(1E+8);
- break;
- default:
- result = powl((trio_long_double_t)number,
- (trio_long_double_t)exponent);
- break;
- }
- }
- else
- {
- return powl((trio_long_double_t)number, (trio_long_double_t)exponent);
- }
- return result;
-}
-
-/*************************************************************************
- * TrioLogarithm
- */
-TRIO_PRIVATE double
-TrioLogarithm
-TRIO_ARGS2((number, base),
- double number,
- int base)
-{
- double result;
-
- if (number <= 0.0)
- {
- /* xlC crashes on log(0) */
- result = (number == 0.0) ? trio_ninf() : trio_nan();
- }
- else
- {
- if (base == 10)
- {
- result = log10(number);
- }
- else
- {
- result = log10(number) / log10((double)base);
- }
- }
- return result;
-}
-
-/*************************************************************************
- * TrioLogarithmBase
- */
-TRIO_PRIVATE double
-TrioLogarithmBase
-TRIO_ARGS1((base),
- int base)
-{
- switch (base)
- {
- case BASE_BINARY : return 1.0;
- case BASE_OCTAL : return 3.0;
- case BASE_DECIMAL: return 3.321928094887362345;
- case BASE_HEX : return 4.0;
- default : return TrioLogarithm((double)base, 2);
- }
-}
-
-/*************************************************************************
- * TrioParse
- *
- * Description:
- * Parse the format string
- */
-TRIO_PRIVATE int
-TrioParse
-TRIO_ARGS5((type, format, parameters, arglist, argarray),
- int type,
- TRIO_CONST char *format,
- trio_parameter_t *parameters,
- TRIO_VA_LIST_PTR arglist,
- trio_pointer_t *argarray)
-{
- /* Count the number of times a parameter is referenced */
- unsigned short usedEntries[MAX_PARAMETERS];
- /* Parameter counters */
- int parameterPosition;
- int currentParam;
- int maxParam = -1;
- /* Utility variables */
- trio_flags_t flags;
- int width;
- int precision;
- int varsize;
- int base;
- int index; /* Index into formatting string */
- int dots; /* Count number of dots in modifier part */
- BOOLEAN_T positional; /* Does the specifier have a positional? */
- BOOLEAN_T gotSticky = FALSE; /* Are there any sticky modifiers at all? */
- /*
- * indices specifies the order in which the parameters must be
- * read from the va_args (this is necessary to handle positionals)
- */
- int indices[MAX_PARAMETERS];
- int pos = 0;
- /* Various variables */
- char ch;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- int charlen;
-#endif
- int save_errno;
- int i = -1;
- int num;
- char *tmpformat;
-
- /* One and only one of arglist and argarray must be used */
- assert((arglist != NULL) ^ (argarray != NULL));
-
- /*
- * The 'parameters' array is not initialized, but we need to
- * know which entries we have used.
- */
- memset(usedEntries, 0, sizeof(usedEntries));
-
- save_errno = errno;
- index = 0;
- parameterPosition = 0;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- (void)mblen(NULL, 0);
-#endif
-
- while (format[index])
- {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- if (! isascii(format[index]))
- {
- /*
- * Multibyte characters cannot be legal specifiers or
- * modifiers, so we skip over them.
- */
- charlen = mblen(&format[index], MB_LEN_MAX);
- index += (charlen > 0) ? charlen : 1;
- continue; /* while */
- }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
- if (CHAR_IDENTIFIER == format[index++])
- {
- if (CHAR_IDENTIFIER == format[index])
- {
- index++;
- continue; /* while */
- }
-
- flags = FLAGS_NEW;
- dots = 0;
- currentParam = TrioGetPosition(format, &index);
- positional = (NO_POSITION != currentParam);
- if (!positional)
- {
- /* We have no positional, get the next counter */
- currentParam = parameterPosition;
- }
- if(currentParam >= MAX_PARAMETERS)
- {
- /* Bail out completely to make the error more obvious */
- return TRIO_ERROR_RETURN(TRIO_ETOOMANY, index);
- }
-
- if (currentParam > maxParam)
- maxParam = currentParam;
-
- /* Default values */
- width = NO_WIDTH;
- precision = NO_PRECISION;
- base = NO_BASE;
- varsize = NO_SIZE;
-
- while (TrioIsQualifier(format[index]))
- {
- ch = format[index++];
-
- switch (ch)
- {
- case QUALIFIER_SPACE:
- flags |= FLAGS_SPACE;
- break;
-
- case QUALIFIER_PLUS:
- flags |= FLAGS_SHOWSIGN;
- break;
-
- case QUALIFIER_MINUS:
- flags |= FLAGS_LEFTADJUST;
- flags &= ~FLAGS_NILPADDING;
- break;
-
- case QUALIFIER_ALTERNATIVE:
- flags |= FLAGS_ALTERNATIVE;
- break;
-
- case QUALIFIER_DOT:
- if (dots == 0) /* Precision */
- {
- dots++;
-
- /* Skip if no precision */
- if (QUALIFIER_DOT == format[index])
- break;
-
- /* After the first dot we have the precision */
- flags |= FLAGS_PRECISION;
- if ((QUALIFIER_STAR == format[index])
-#if defined(QUALIFIER_PARAM)
- || (QUALIFIER_PARAM == format[index])
-#endif
- )
- {
- index++;
- flags |= FLAGS_PRECISION_PARAMETER;
-
- precision = TrioGetPosition(format, &index);
- if (precision == NO_POSITION)
- {
- parameterPosition++;
- if (positional)
- precision = parameterPosition;
- else
- {
- precision = currentParam;
- currentParam = precision + 1;
- }
- }
- else
- {
- if (! positional)
- currentParam = precision + 1;
- if (width > maxParam)
- maxParam = precision;
- }
- if (currentParam > maxParam)
- maxParam = currentParam;
- }
- else
- {
- precision = trio_to_long(&format[index],
- &tmpformat,
- BASE_DECIMAL);
- index = (int)(tmpformat - format);
- }
- }
- else if (dots == 1) /* Base */
- {
- dots++;
-
- /* After the second dot we have the base */
- flags |= FLAGS_BASE;
- if ((QUALIFIER_STAR == format[index])
-#if defined(QUALIFIER_PARAM)
- || (QUALIFIER_PARAM == format[index])
-#endif
- )
- {
- index++;
- flags |= FLAGS_BASE_PARAMETER;
- base = TrioGetPosition(format, &index);
- if (base == NO_POSITION)
- {
- parameterPosition++;
- if (positional)
- base = parameterPosition;
- else
- {
- base = currentParam;
- currentParam = base + 1;
- }
- }
- else
- {
- if (! positional)
- currentParam = base + 1;
- if (base > maxParam)
- maxParam = base;
- }
- if (currentParam > maxParam)
- maxParam = currentParam;
- }
- else
- {
- base = trio_to_long(&format[index],
- &tmpformat,
- BASE_DECIMAL);
- if (base > MAX_BASE)
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- index = (int)(tmpformat - format);
- }
- }
- else
- {
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- }
- break; /* QUALIFIER_DOT */
-
-#if defined(QUALIFIER_PARAM)
- case QUALIFIER_PARAM:
- type = TYPE_PRINT;
- /* FALLTHROUGH */
-#endif
- case QUALIFIER_STAR:
- /* This has different meanings for print and scan */
- if (TYPE_PRINT == type)
- {
- /* Read with from parameter */
- flags |= (FLAGS_WIDTH | FLAGS_WIDTH_PARAMETER);
- width = TrioGetPosition(format, &index);
- if (width == NO_POSITION)
- {
- parameterPosition++;
- if (positional)
- width = parameterPosition;
- else
- {
- width = currentParam;
- currentParam = width + 1;
- }
- }
- else
- {
- if (! positional)
- currentParam = width + 1;
- if (width > maxParam)
- maxParam = width;
- }
- if (currentParam > maxParam)
- maxParam = currentParam;
- }
- else
- {
- /* Scan, but do not store result */
- flags |= FLAGS_IGNORE;
- }
-
- break; /* QUALIFIER_STAR */
-
- case '0':
- if (! (flags & FLAGS_LEFTADJUST))
- flags |= FLAGS_NILPADDING;
- /* FALLTHROUGH */
- case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- flags |= FLAGS_WIDTH;
- /* &format[index - 1] is used to "rewind" the read
- * character from format
- */
- width = trio_to_long(&format[index - 1],
- &tmpformat,
- BASE_DECIMAL);
- index = (int)(tmpformat - format);
- break;
-
- case QUALIFIER_SHORT:
- if (flags & FLAGS_SHORTSHORT)
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- else if (flags & FLAGS_SHORT)
- flags |= FLAGS_SHORTSHORT;
- else
- flags |= FLAGS_SHORT;
- break;
-
- case QUALIFIER_LONG:
- if (flags & FLAGS_QUAD)
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- else if (flags & FLAGS_LONG)
- flags |= FLAGS_QUAD;
- else
- flags |= FLAGS_LONG;
- break;
-
- case QUALIFIER_LONG_UPPER:
- flags |= FLAGS_LONGDOUBLE;
- break;
-
-#if defined(QUALIFIER_SIZE_T)
- case QUALIFIER_SIZE_T:
- flags |= FLAGS_SIZE_T;
- /* Modify flags for later truncation of number */
- if (sizeof(size_t) == sizeof(trio_ulonglong_t))
- flags |= FLAGS_QUAD;
- else if (sizeof(size_t) == sizeof(long))
- flags |= FLAGS_LONG;
- break;
-#endif
-
-#if defined(QUALIFIER_PTRDIFF_T)
- case QUALIFIER_PTRDIFF_T:
- flags |= FLAGS_PTRDIFF_T;
- if (sizeof(ptrdiff_t) == sizeof(trio_ulonglong_t))
- flags |= FLAGS_QUAD;
- else if (sizeof(ptrdiff_t) == sizeof(long))
- flags |= FLAGS_LONG;
- break;
-#endif
-
-#if defined(QUALIFIER_INTMAX_T)
- case QUALIFIER_INTMAX_T:
- flags |= FLAGS_INTMAX_T;
- if (sizeof(trio_intmax_t) == sizeof(trio_ulonglong_t))
- flags |= FLAGS_QUAD;
- else if (sizeof(trio_intmax_t) == sizeof(long))
- flags |= FLAGS_LONG;
- break;
-#endif
-
-#if defined(QUALIFIER_QUAD)
- case QUALIFIER_QUAD:
- flags |= FLAGS_QUAD;
- break;
-#endif
-
-#if defined(QUALIFIER_FIXED_SIZE)
- case QUALIFIER_FIXED_SIZE:
- if (flags & FLAGS_FIXED_SIZE)
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
- if (flags & (FLAGS_ALL_SIZES | FLAGS_LONGDOUBLE |
- FLAGS_WIDECHAR | FLAGS_VARSIZE_PARAMETER))
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
- if ((format[index] == '6') &&
- (format[index + 1] == '4'))
- {
- varsize = sizeof(trio_int64_t);
- index += 2;
- }
- else if ((format[index] == '3') &&
- (format[index + 1] == '2'))
- {
- varsize = sizeof(trio_int32_t);
- index += 2;
- }
- else if ((format[index] == '1') &&
- (format[index + 1] == '6'))
- {
- varsize = sizeof(trio_int16_t);
- index += 2;
- }
- else if (format[index] == '8')
- {
- varsize = sizeof(trio_int8_t);
- index++;
- }
- else
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
-
- flags |= FLAGS_FIXED_SIZE;
- break;
-#endif
-
-#if defined(QUALIFIER_WIDECHAR)
- case QUALIFIER_WIDECHAR:
- flags |= FLAGS_WIDECHAR;
- break;
-#endif
-
-#if defined(QUALIFIER_SIZE_T_UPPER)
- case QUALIFIER_SIZE_T_UPPER:
- break;
-#endif
-
-#if defined(QUALIFIER_QUOTE)
- case QUALIFIER_QUOTE:
- flags |= FLAGS_QUOTE;
- break;
-#endif
-
-#if defined(QUALIFIER_STICKY)
- case QUALIFIER_STICKY:
- flags |= FLAGS_STICKY;
- gotSticky = TRUE;
- break;
-#endif
-
-#if defined(QUALIFIER_VARSIZE)
- case QUALIFIER_VARSIZE:
- flags |= FLAGS_VARSIZE_PARAMETER;
- parameterPosition++;
- if (positional)
- varsize = parameterPosition;
- else
- {
- varsize = currentParam;
- currentParam = varsize + 1;
- }
- if (currentParam > maxParam)
- maxParam = currentParam;
- break;
-#endif
-
-#if defined(QUALIFIER_ROUNDING_UPPER)
- case QUALIFIER_ROUNDING_UPPER:
- flags |= FLAGS_ROUNDING;
- break;
-#endif
-
- default:
- /* Bail out completely to make the error more obvious */
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- }
- } /* while qualifier */
-
- /*
- * Parameters only need the type and value. The value is
- * read later.
- */
- if (flags & FLAGS_WIDTH_PARAMETER)
- {
- usedEntries[width] += 1;
- parameters[pos].type = FORMAT_PARAMETER;
- parameters[pos].flags = 0;
- indices[width] = pos;
- width = pos++;
- }
- if (flags & FLAGS_PRECISION_PARAMETER)
- {
- usedEntries[precision] += 1;
- parameters[pos].type = FORMAT_PARAMETER;
- parameters[pos].flags = 0;
- indices[precision] = pos;
- precision = pos++;
- }
- if (flags & FLAGS_BASE_PARAMETER)
- {
- usedEntries[base] += 1;
- parameters[pos].type = FORMAT_PARAMETER;
- parameters[pos].flags = 0;
- indices[base] = pos;
- base = pos++;
- }
- if (flags & FLAGS_VARSIZE_PARAMETER)
- {
- usedEntries[varsize] += 1;
- parameters[pos].type = FORMAT_PARAMETER;
- parameters[pos].flags = 0;
- indices[varsize] = pos;
- varsize = pos++;
- }
-
- indices[currentParam] = pos;
-
- switch (format[index++])
- {
-#if defined(SPECIFIER_CHAR_UPPER)
- case SPECIFIER_CHAR_UPPER:
- flags |= FLAGS_WIDECHAR;
- /* FALLTHROUGH */
-#endif
- case SPECIFIER_CHAR:
- if (flags & FLAGS_LONG)
- flags |= FLAGS_WIDECHAR;
- else if (flags & FLAGS_SHORT)
- flags &= ~FLAGS_WIDECHAR;
- parameters[pos].type = FORMAT_CHAR;
- break;
-
-#if defined(SPECIFIER_STRING_UPPER)
- case SPECIFIER_STRING_UPPER:
- flags |= FLAGS_WIDECHAR;
- /* FALLTHROUGH */
-#endif
- case SPECIFIER_STRING:
- if (flags & FLAGS_LONG)
- flags |= FLAGS_WIDECHAR;
- else if (flags & FLAGS_SHORT)
- flags &= ~FLAGS_WIDECHAR;
- parameters[pos].type = FORMAT_STRING;
- break;
-
- case SPECIFIER_GROUP:
- if (TYPE_SCAN == type)
- {
- int depth = 1;
- parameters[pos].type = FORMAT_GROUP;
- if (format[index] == QUALIFIER_CIRCUMFLEX)
- index++;
- if (format[index] == SPECIFIER_UNGROUP)
- index++;
- if (format[index] == QUALIFIER_MINUS)
- index++;
- /* Skip nested brackets */
- while (format[index] != NIL)
- {
- if (format[index] == SPECIFIER_GROUP)
- {
- depth++;
- }
- else if (format[index] == SPECIFIER_UNGROUP)
- {
- if (--depth <= 0)
- {
- index++;
- break;
- }
- }
- index++;
- }
- }
- break;
-
- case SPECIFIER_INTEGER:
- parameters[pos].type = FORMAT_INT;
- break;
-
- case SPECIFIER_UNSIGNED:
- flags |= FLAGS_UNSIGNED;
- parameters[pos].type = FORMAT_INT;
- break;
-
- case SPECIFIER_DECIMAL:
- /* Disable base modifier */
- flags &= ~FLAGS_BASE_PARAMETER;
- base = BASE_DECIMAL;
- parameters[pos].type = FORMAT_INT;
- break;
-
- case SPECIFIER_OCTAL:
- flags |= FLAGS_UNSIGNED;
- flags &= ~FLAGS_BASE_PARAMETER;
- base = BASE_OCTAL;
- parameters[pos].type = FORMAT_INT;
- break;
-
-#if defined(SPECIFIER_BINARY)
- case SPECIFIER_BINARY_UPPER:
- flags |= FLAGS_UPPER;
- /* FALLTHROUGH */
- case SPECIFIER_BINARY:
- flags |= FLAGS_NILPADDING;
- flags &= ~FLAGS_BASE_PARAMETER;
- base = BASE_BINARY;
- parameters[pos].type = FORMAT_INT;
- break;
-#endif
-
- case SPECIFIER_HEX_UPPER:
- flags |= FLAGS_UPPER;
- /* FALLTHROUGH */
- case SPECIFIER_HEX:
- flags |= FLAGS_UNSIGNED;
- flags &= ~FLAGS_BASE_PARAMETER;
- base = BASE_HEX;
- parameters[pos].type = FORMAT_INT;
- break;
-
- case SPECIFIER_FLOAT_E_UPPER:
- flags |= FLAGS_UPPER;
- /* FALLTHROUGH */
- case SPECIFIER_FLOAT_E:
- flags |= FLAGS_FLOAT_E;
- parameters[pos].type = FORMAT_DOUBLE;
- break;
-
- case SPECIFIER_FLOAT_G_UPPER:
- flags |= FLAGS_UPPER;
- /* FALLTHROUGH */
- case SPECIFIER_FLOAT_G:
- flags |= FLAGS_FLOAT_G;
- parameters[pos].type = FORMAT_DOUBLE;
- break;
-
- case SPECIFIER_FLOAT_F_UPPER:
- flags |= FLAGS_UPPER;
- /* FALLTHROUGH */
- case SPECIFIER_FLOAT_F:
- parameters[pos].type = FORMAT_DOUBLE;
- break;
-
- case SPECIFIER_POINTER:
- if (sizeof(trio_pointer_t) == sizeof(trio_ulonglong_t))
- flags |= FLAGS_QUAD;
- else if (sizeof(trio_pointer_t) == sizeof(long))
- flags |= FLAGS_LONG;
- parameters[pos].type = FORMAT_POINTER;
- break;
-
- case SPECIFIER_COUNT:
- parameters[pos].type = FORMAT_COUNT;
- break;
-
-#if defined(SPECIFIER_HEXFLOAT)
-# if defined(SPECIFIER_HEXFLOAT_UPPER)
- case SPECIFIER_HEXFLOAT_UPPER:
- flags |= FLAGS_UPPER;
- /* FALLTHROUGH */
-# endif
- case SPECIFIER_HEXFLOAT:
- base = BASE_HEX;
- parameters[pos].type = FORMAT_DOUBLE;
- break;
-#endif
-
-#if defined(FORMAT_ERRNO)
- case SPECIFIER_ERRNO:
- parameters[pos].type = FORMAT_ERRNO;
- break;
-#endif
-
-#if defined(SPECIFIER_USER_DEFINED_BEGIN)
- case SPECIFIER_USER_DEFINED_BEGIN:
- {
- unsigned int max;
- int without_namespace = TRUE;
-
- parameters[pos].type = FORMAT_USER_DEFINED;
- parameters[pos].user_name[0] = NIL;
- tmpformat = (char *)&format[index];
-
- while ((ch = format[index]))
- {
- index++;
- if (ch == SPECIFIER_USER_DEFINED_END)
- {
- if (without_namespace)
- {
- /* We must get the handle first */
- parameters[pos].type = FORMAT_PARAMETER;
- parameters[pos].indexAfterSpecifier = index;
- parameters[pos].flags = FLAGS_USER_DEFINED;
- /* Adjust parameters for insertion of new one */
- pos++;
- usedEntries[currentParam] += 1;
- parameters[pos].type = FORMAT_USER_DEFINED;
- currentParam++;
- indices[currentParam] = pos;
- if (currentParam > maxParam)
- maxParam = currentParam;
- }
- /* Copy the user data */
- max = (unsigned int)(&format[index] - tmpformat);
- if (max > MAX_USER_DATA)
- max = MAX_USER_DATA;
- trio_copy_max(parameters[pos].user_data,
- max,
- tmpformat);
- break; /* while */
- }
- if (ch == SPECIFIER_USER_DEFINED_SEPARATOR)
- {
- without_namespace = FALSE;
- /* Copy the namespace for later looking-up */
- max = (int)(&format[index] - tmpformat);
- if (max > MAX_USER_NAME)
- max = MAX_USER_NAME;
- trio_copy_max(parameters[pos].user_name,
- max,
- tmpformat);
- tmpformat = (char *)&format[index];
- }
- }
- if (ch != SPECIFIER_USER_DEFINED_END)
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- }
- break;
-#endif /* defined(SPECIFIER_USER_DEFINED_BEGIN) */
-
- default:
- /* Bail out completely to make the error more obvious */
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- }
-
- /* Count the number of times this entry has been used */
- usedEntries[currentParam] += 1;
-
- /* Find last sticky parameters */
- if (gotSticky && !(flags & FLAGS_STICKY))
- {
- for (i = pos - 1; i >= 0; i--)
- {
- if (parameters[i].type == FORMAT_PARAMETER)
- continue;
- if ((parameters[i].flags & FLAGS_STICKY) &&
- (parameters[i].type == parameters[pos].type))
- {
- /* Do not overwrite current qualifiers */
- flags |= (parameters[i].flags & (unsigned long)~FLAGS_STICKY);
- if (width == NO_WIDTH)
- width = parameters[i].width;
- if (precision == NO_PRECISION)
- precision = parameters[i].precision;
- if (base == NO_BASE)
- base = parameters[i].base;
- break;
- }
- }
- }
-
- parameters[pos].indexAfterSpecifier = index;
- parameters[pos].flags = flags;
- parameters[pos].width = width;
- parameters[pos].precision = precision;
- parameters[pos].base = (base == NO_BASE) ? BASE_DECIMAL : base;
- parameters[pos].varsize = varsize;
- pos++;
-
- if (! positional)
- parameterPosition++;
-
- } /* if identifier */
-
- } /* while format characters left */
-
- for (num = 0; num <= maxParam; num++)
- {
- if (usedEntries[num] != 1)
- {
- if (usedEntries[num] == 0) /* gap detected */
- return TRIO_ERROR_RETURN(TRIO_EGAP, num);
- else /* double references detected */
- return TRIO_ERROR_RETURN(TRIO_EDBLREF, num);
- }
-
- i = indices[num];
-
- /*
- * FORMAT_PARAMETERS are only present if they must be read,
- * so it makes no sense to check the ignore flag (besides,
- * the flags variable is not set for that particular type)
- */
- if ((parameters[i].type != FORMAT_PARAMETER) &&
- (parameters[i].flags & FLAGS_IGNORE))
- continue; /* for all arguments */
-
- /*
- * The stack arguments are read according to ANSI C89
- * default argument promotions:
- *
- * char = int
- * short = int
- * unsigned char = unsigned int
- * unsigned short = unsigned int
- * float = double
- *
- * In addition to the ANSI C89 these types are read (the
- * default argument promotions of C99 has not been
- * considered yet)
- *
- * long long
- * long double
- * size_t
- * ptrdiff_t
- * intmax_t
- */
- switch (parameters[i].type)
- {
- case FORMAT_GROUP:
- case FORMAT_STRING:
-#if TRIO_WIDECHAR
- if (flags & FLAGS_WIDECHAR)
- {
- parameters[i].data.wstring = (argarray == NULL)
- ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_wchar_t *)
- : (trio_wchar_t *)(argarray[num]);
- }
- else
-#endif
- {
- parameters[i].data.string = (argarray == NULL)
- ? va_arg(TRIO_VA_LIST_DEREF(arglist), char *)
- : (char *)(argarray[num]);
- }
- break;
-
-#if defined(FORMAT_USER_DEFINED)
- case FORMAT_USER_DEFINED:
-#endif
- case FORMAT_POINTER:
- case FORMAT_COUNT:
- case FORMAT_UNKNOWN:
- parameters[i].data.pointer = (argarray == NULL)
- ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t )
- : argarray[num];
- break;
-
- case FORMAT_CHAR:
- case FORMAT_INT:
- if (TYPE_SCAN == type)
- {
- if (argarray == NULL)
- parameters[i].data.pointer =
- (trio_pointer_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t);
- else
- {
- if (parameters[i].type == FORMAT_CHAR)
- parameters[i].data.pointer =
- (trio_pointer_t)((char *)argarray[num]);
- else if (parameters[i].flags & FLAGS_SHORT)
- parameters[i].data.pointer =
- (trio_pointer_t)((short *)argarray[num]);
- else
- parameters[i].data.pointer =
- (trio_pointer_t)((int *)argarray[num]);
- }
- }
- else
- {
-#if defined(QUALIFIER_VARSIZE) || defined(QUALIFIER_FIXED_SIZE)
- if (parameters[i].flags
- & (FLAGS_VARSIZE_PARAMETER | FLAGS_FIXED_SIZE))
- {
- if (parameters[i].flags & FLAGS_VARSIZE_PARAMETER)
- {
- /*
- * Variable sizes are mapped onto the fixed sizes, in
- * accordance with integer promotion.
- *
- * Please note that this may not be portable, as we
- * only guess the size, not the layout of the numbers.
- * For example, if int is little-endian, and long is
- * big-endian, then this will fail.
- */
- varsize = (int)parameters[parameters[i].varsize].data.number.as_unsigned;
- }
- else
- {
- /* Used for the I<bits> modifiers */
- varsize = parameters[i].varsize;
- }
- parameters[i].flags &= ~FLAGS_ALL_VARSIZES;
-
- if (varsize <= (int)sizeof(int))
- ;
- else if (varsize <= (int)sizeof(long))
- parameters[i].flags |= FLAGS_LONG;
-#if defined(QUALIFIER_INTMAX_T)
- else if (varsize <= (int)sizeof(trio_longlong_t))
- parameters[i].flags |= FLAGS_QUAD;
- else
- parameters[i].flags |= FLAGS_INTMAX_T;
-#else
- else
- parameters[i].flags |= FLAGS_QUAD;
-#endif
- }
-#endif /* defined(QUALIFIER_VARSIZE) */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
- if (parameters[i].flags & FLAGS_SIZE_T)
- parameters[i].data.number.as_unsigned = (argarray == NULL)
- ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), size_t)
- : (trio_uintmax_t)(*((size_t *)argarray[num]));
- else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
- if (parameters[i].flags & FLAGS_PTRDIFF_T)
- parameters[i].data.number.as_unsigned = (argarray == NULL)
- ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), ptrdiff_t)
- : (trio_uintmax_t)(*((ptrdiff_t *)argarray[num]));
- else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
- if (parameters[i].flags & FLAGS_INTMAX_T)
- parameters[i].data.number.as_unsigned = (argarray == NULL)
- ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_intmax_t)
- : (trio_uintmax_t)(*((trio_intmax_t *)argarray[num]));
- else
-#endif
- if (parameters[i].flags & FLAGS_QUAD)
- parameters[i].data.number.as_unsigned = (argarray == NULL)
- ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), trio_ulonglong_t)
- : (trio_uintmax_t)(*((trio_ulonglong_t *)argarray[num]));
- else if (parameters[i].flags & FLAGS_LONG)
- parameters[i].data.number.as_unsigned = (argarray == NULL)
- ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), long)
- : (trio_uintmax_t)(*((long *)argarray[num]));
- else
- {
- if (argarray == NULL)
- parameters[i].data.number.as_unsigned = (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), int);
- else
- {
- if (parameters[i].type == FORMAT_CHAR)
- parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((char *)argarray[num]));
- else if (parameters[i].flags & FLAGS_SHORT)
- parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((short *)argarray[num]));
- else
- parameters[i].data.number.as_unsigned = (trio_uintmax_t)(*((int *)argarray[num]));
- }
- }
- }
- break;
-
- case FORMAT_PARAMETER:
- /*
- * The parameter for the user-defined specifier is a pointer,
- * whereas the rest (width, precision, base) uses an integer.
- */
- if (parameters[i].flags & FLAGS_USER_DEFINED)
- parameters[i].data.pointer = (argarray == NULL)
- ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_pointer_t )
- : argarray[num];
- else
- parameters[i].data.number.as_unsigned = (argarray == NULL)
- ? (trio_uintmax_t)va_arg(TRIO_VA_LIST_DEREF(arglist), int)
- : (trio_uintmax_t)(*((int *)argarray[num]));
- break;
-
- case FORMAT_DOUBLE:
- if (TYPE_SCAN == type)
- {
- if (parameters[i].flags & FLAGS_LONGDOUBLE)
- parameters[i].data.longdoublePointer = (argarray == NULL)
- ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t *)
- : (trio_long_double_t *)argarray[num];
- else
- {
- if (parameters[i].flags & FLAGS_LONG)
- parameters[i].data.doublePointer = (argarray == NULL)
- ? va_arg(TRIO_VA_LIST_DEREF(arglist), double *)
- : (double *)argarray[num];
- else
- parameters[i].data.doublePointer = (argarray == NULL)
- ? (double *)va_arg(TRIO_VA_LIST_DEREF(arglist), float *)
- : (double *)((float *)argarray[num]);
- }
- }
- else
- {
- if (parameters[i].flags & FLAGS_LONGDOUBLE)
- parameters[i].data.longdoubleNumber = (argarray == NULL)
- ? va_arg(TRIO_VA_LIST_DEREF(arglist), trio_long_double_t)
- : (trio_long_double_t)(*((trio_long_double_t *)argarray[num]));
- else
- {
- if (argarray == NULL)
- parameters[i].data.longdoubleNumber =
- (trio_long_double_t)va_arg(TRIO_VA_LIST_DEREF(arglist), double);
- else
- {
- if (parameters[i].flags & FLAGS_SHORT)
- parameters[i].data.longdoubleNumber =
- (trio_long_double_t)(*((float *)argarray[num]));
- else
- parameters[i].data.longdoubleNumber =
- (trio_long_double_t)(*((double *)argarray[num]));
- }
- }
- }
- break;
-
-#if defined(FORMAT_ERRNO)
- case FORMAT_ERRNO:
- parameters[i].data.errorNumber = save_errno;
- break;
-#endif
-
- default:
- break;
- }
- } /* for all specifiers */
- return num;
-}
-
-
-/*************************************************************************
- *
- * FORMATTING
- *
- ************************************************************************/
-
-
-/*************************************************************************
- * TrioWriteNumber
- *
- * Description:
- * Output a number.
- * The complexity of this function is a result of the complexity
- * of the dependencies of the flags.
- */
-TRIO_PRIVATE void
-TrioWriteNumber
-TRIO_ARGS6((self, number, flags, width, precision, base),
- trio_class_t *self,
- trio_uintmax_t number,
- trio_flags_t flags,
- int width,
- int precision,
- int base)
-{
- BOOLEAN_T isNegative;
- BOOLEAN_T isNumberZero;
- BOOLEAN_T isPrecisionZero;
- BOOLEAN_T ignoreNumber;
- char buffer[MAX_CHARS_IN(trio_uintmax_t) * (1 + MAX_LOCALE_SEPARATOR_LENGTH) + 1];
- char *bufferend;
- char *pointer;
- TRIO_CONST char *digits;
- int i;
- int length;
- char *p;
- int count;
-
- assert(VALID(self));
- assert(VALID(self->OutStream));
- assert(((base >= MIN_BASE) && (base <= MAX_BASE)) || (base == NO_BASE));
-
- digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
- if (base == NO_BASE)
- base = BASE_DECIMAL;
-
- isNumberZero = (number == 0);
- isPrecisionZero = (precision == 0);
- ignoreNumber = (isNumberZero
- && isPrecisionZero
- && !((flags & FLAGS_ALTERNATIVE) && (base == BASE_OCTAL)));
-
- if (flags & FLAGS_UNSIGNED)
- {
- isNegative = FALSE;
- flags &= ~FLAGS_SHOWSIGN;
- }
- else
- {
- isNegative = ((trio_intmax_t)number < 0);
- if (isNegative)
- number = -((trio_intmax_t)number);
- }
-
- if (flags & FLAGS_QUAD)
- number &= (trio_ulonglong_t)-1;
- else if (flags & FLAGS_LONG)
- number &= (unsigned long)-1;
- else
- number &= (unsigned int)-1;
-
- /* Build number */
- pointer = bufferend = &buffer[sizeof(buffer) - 1];
- *pointer-- = NIL;
- for (i = 1; i < (int)sizeof(buffer); i++)
- {
- *pointer-- = digits[number % base];
- number /= base;
- if (number == 0)
- break;
-
- if ((flags & FLAGS_QUOTE) && TrioFollowedBySeparator(i + 1))
- {
- /*
- * We are building the number from the least significant
- * to the most significant digit, so we have to copy the
- * thousand separator backwards
- */
- length = internalThousandSeparatorLength;
- if (((int)(pointer - buffer) - length) > 0)
- {
- p = &internalThousandSeparator[length - 1];
- while (length-- > 0)
- *pointer-- = *p--;
- }
- }
- }
-
- if (! ignoreNumber)
- {
- /* Adjust width */
- width -= (bufferend - pointer) - 1;
- }
-
- /* Adjust precision */
- if (NO_PRECISION != precision)
- {
- precision -= (bufferend - pointer) - 1;
- if (precision < 0)
- precision = 0;
- flags |= FLAGS_NILPADDING;
- }
-
- /* Calculate padding */
- count = (! ((flags & FLAGS_LEFTADJUST) || (precision == NO_PRECISION)))
- ? precision
- : 0;
-
- /* Adjust width further */
- if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
- width--;
- if ((flags & FLAGS_ALTERNATIVE) && !isNumberZero)
- {
- switch (base)
- {
- case BASE_BINARY:
- case BASE_HEX:
- width -= 2;
- break;
- case BASE_OCTAL:
- if (!(flags & FLAGS_NILPADDING) || (count == 0))
- width--;
- break;
- default:
- break;
- }
- }
-
- /* Output prefixes spaces if needed */
- if (! ((flags & FLAGS_LEFTADJUST) ||
- ((flags & FLAGS_NILPADDING) && (precision == NO_PRECISION))))
- {
- while (width-- > count)
- self->OutStream(self, CHAR_ADJUST);
- }
-
- /* width has been adjusted for signs and alternatives */
- if (isNegative)
- self->OutStream(self, '-');
- else if (flags & FLAGS_SHOWSIGN)
- self->OutStream(self, '+');
- else if (flags & FLAGS_SPACE)
- self->OutStream(self, ' ');
-
- /* Prefix is not written when the value is zero */
- if ((flags & FLAGS_ALTERNATIVE) && !isNumberZero)
- {
- switch (base)
- {
- case BASE_BINARY:
- self->OutStream(self, '0');
- self->OutStream(self, (flags & FLAGS_UPPER) ? 'B' : 'b');
- break;
-
- case BASE_OCTAL:
- if (!(flags & FLAGS_NILPADDING) || (count == 0))
- self->OutStream(self, '0');
- break;
-
- case BASE_HEX:
- self->OutStream(self, '0');
- self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
- break;
-
- default:
- break;
- } /* switch base */
- }
-
- /* Output prefixed zero padding if needed */
- if (flags & FLAGS_NILPADDING)
- {
- if (precision == NO_PRECISION)
- precision = width;
- while (precision-- > 0)
- {
- self->OutStream(self, '0');
- width--;
- }
- }
-
- if (! ignoreNumber)
- {
- /* Output the number itself */
- while (*(++pointer))
- {
- self->OutStream(self, *pointer);
- }
- }
-
- /* Output trailing spaces if needed */
- if (flags & FLAGS_LEFTADJUST)
- {
- while (width-- > 0)
- self->OutStream(self, CHAR_ADJUST);
- }
-}
-
-/*************************************************************************
- * TrioWriteStringCharacter
- *
- * Description:
- * Output a single character of a string
- */
-TRIO_PRIVATE void
-TrioWriteStringCharacter
-TRIO_ARGS3((self, ch, flags),
- trio_class_t *self,
- int ch,
- trio_flags_t flags)
-{
- if (flags & FLAGS_ALTERNATIVE)
- {
- if (! isprint(ch))
- {
- /*
- * Non-printable characters are converted to C escapes or
- * \number, if no C escape exists.
- */
- self->OutStream(self, CHAR_BACKSLASH);
- switch (ch)
- {
- case '\007': self->OutStream(self, 'a'); break;
- case '\b': self->OutStream(self, 'b'); break;
- case '\f': self->OutStream(self, 'f'); break;
- case '\n': self->OutStream(self, 'n'); break;
- case '\r': self->OutStream(self, 'r'); break;
- case '\t': self->OutStream(self, 't'); break;
- case '\v': self->OutStream(self, 'v'); break;
- case '\\': self->OutStream(self, '\\'); break;
- default:
- self->OutStream(self, 'x');
- TrioWriteNumber(self, (trio_uintmax_t)ch,
- FLAGS_UNSIGNED | FLAGS_NILPADDING,
- 2, 2, BASE_HEX);
- break;
- }
- }
- else if (ch == CHAR_BACKSLASH)
- {
- self->OutStream(self, CHAR_BACKSLASH);
- self->OutStream(self, CHAR_BACKSLASH);
- }
- else
- {
- self->OutStream(self, ch);
- }
- }
- else
- {
- self->OutStream(self, ch);
- }
-}
-
-/*************************************************************************
- * TrioWriteString
- *
- * Description:
- * Output a string
- */
-TRIO_PRIVATE void
-TrioWriteString
-TRIO_ARGS5((self, string, flags, width, precision),
- trio_class_t *self,
- TRIO_CONST char *string,
- trio_flags_t flags,
- int width,
- int precision)
-{
- int length;
- int ch;
-
- assert(VALID(self));
- assert(VALID(self->OutStream));
-
- if (string == NULL)
- {
- string = internalNullString;
- length = sizeof(internalNullString) - 1;
- /* Disable quoting for the null pointer */
- flags &= (~FLAGS_QUOTE);
- width = 0;
- }
- else
- {
- length = trio_length(string);
- }
- if ((NO_PRECISION != precision) &&
- (precision < length))
- {
- length = precision;
- }
- width -= length;
-
- if (flags & FLAGS_QUOTE)
- self->OutStream(self, CHAR_QUOTE);
-
- if (! (flags & FLAGS_LEFTADJUST))
- {
- while (width-- > 0)
- self->OutStream(self, CHAR_ADJUST);
- }
-
- while (length-- > 0)
- {
- /* The ctype parameters must be an unsigned char (or EOF) */
- ch = (int)((unsigned char)(*string++));
- TrioWriteStringCharacter(self, ch, flags);
- }
-
- if (flags & FLAGS_LEFTADJUST)
- {
- while (width-- > 0)
- self->OutStream(self, CHAR_ADJUST);
- }
- if (flags & FLAGS_QUOTE)
- self->OutStream(self, CHAR_QUOTE);
-}
-
-/*************************************************************************
- * TrioWriteWideStringCharacter
- *
- * Description:
- * Output a wide string as a multi-byte sequence
- */
-#if TRIO_WIDECHAR
-TRIO_PRIVATE int
-TrioWriteWideStringCharacter
-TRIO_ARGS4((self, wch, flags, width),
- trio_class_t *self,
- trio_wchar_t wch,
- trio_flags_t flags,
- int width)
-{
- int size;
- int i;
- int ch;
- char *string;
- char buffer[MB_LEN_MAX + 1];
-
- if (width == NO_WIDTH)
- width = sizeof(buffer);
-
- size = wctomb(buffer, wch);
- if ((size <= 0) || (size > width) || (buffer[0] == NIL))
- return 0;
-
- string = buffer;
- i = size;
- while ((width >= i) && (width-- > 0) && (i-- > 0))
- {
- /* The ctype parameters must be an unsigned char (or EOF) */
- ch = (int)((unsigned char)(*string++));
- TrioWriteStringCharacter(self, ch, flags);
- }
- return size;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioWriteWideString
- *
- * Description:
- * Output a wide character string as a multi-byte string
- */
-#if TRIO_WIDECHAR
-TRIO_PRIVATE void
-TrioWriteWideString
-TRIO_ARGS5((self, wstring, flags, width, precision),
- trio_class_t *self,
- TRIO_CONST trio_wchar_t *wstring,
- trio_flags_t flags,
- int width,
- int precision)
-{
- int length;
- int size;
-
- assert(VALID(self));
- assert(VALID(self->OutStream));
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- (void)mblen(NULL, 0);
-#endif
-
- if (wstring == NULL)
- {
- TrioWriteString(self, NULL, flags, width, precision);
- return;
- }
-
- if (NO_PRECISION == precision)
- {
- length = INT_MAX;
- }
- else
- {
- length = precision;
- width -= length;
- }
-
- if (flags & FLAGS_QUOTE)
- self->OutStream(self, CHAR_QUOTE);
-
- if (! (flags & FLAGS_LEFTADJUST))
- {
- while (width-- > 0)
- self->OutStream(self, CHAR_ADJUST);
- }
-
- while (length > 0)
- {
- size = TrioWriteWideStringCharacter(self, *wstring++, flags, length);
- if (size == 0)
- break; /* while */
- length -= size;
- }
-
- if (flags & FLAGS_LEFTADJUST)
- {
- while (width-- > 0)
- self->OutStream(self, CHAR_ADJUST);
- }
- if (flags & FLAGS_QUOTE)
- self->OutStream(self, CHAR_QUOTE);
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioWriteDouble
- *
- * http://wwwold.dkuug.dk/JTC1/SC22/WG14/www/docs/dr_211.htm
- *
- * "5.2.4.2.2 paragraph #4
- *
- * The accuracy [...] is implementation defined, as is the accuracy
- * of the conversion between floating-point internal representations
- * and string representations performed by the libray routine in
- * <stdio.h>"
- */
-/* FIXME: handle all instances of constant long-double number (L)
- * and *l() math functions.
- */
-TRIO_PRIVATE void
-TrioWriteDouble
-TRIO_ARGS6((self, number, flags, width, precision, base),
- trio_class_t *self,
- trio_long_double_t number,
- trio_flags_t flags,
- int width,
- int precision,
- int base)
-{
- trio_long_double_t integerNumber;
- trio_long_double_t fractionNumber;
- trio_long_double_t workNumber;
- int integerDigits;
- int fractionDigits;
- int exponentDigits;
- int baseDigits;
- int integerThreshold;
- int fractionThreshold;
- int expectedWidth;
- int exponent = 0;
- unsigned int uExponent = 0;
- int exponentBase;
- trio_long_double_t dblBase;
- trio_long_double_t dblIntegerBase;
- trio_long_double_t dblFractionBase;
- trio_long_double_t integerAdjust;
- trio_long_double_t fractionAdjust;
- BOOLEAN_T isNegative;
- BOOLEAN_T isExponentNegative = FALSE;
- BOOLEAN_T requireTwoDigitExponent;
- BOOLEAN_T isHex;
- TRIO_CONST char *digits;
- char *groupingPointer;
- int i;
- int index;
- BOOLEAN_T hasOnlyZeroes;
- int zeroes = 0;
- register int trailingZeroes;
- BOOLEAN_T keepTrailingZeroes;
- BOOLEAN_T keepDecimalPoint;
- trio_long_double_t epsilon;
-
- assert(VALID(self));
- assert(VALID(self->OutStream));
- assert(((base >= MIN_BASE) && (base <= MAX_BASE)) || (base == NO_BASE));
-
- /* Determine sign and look for special quantities */
- switch (trio_fpclassify_and_signbit(number, &isNegative))
- {
- case TRIO_FP_NAN:
- TrioWriteString(self,
- (flags & FLAGS_UPPER)
- ? NAN_UPPER
- : NAN_LOWER,
- flags, width, precision);
- return;
-
- case TRIO_FP_INFINITE:
- if (isNegative)
- {
- /* Negative infinity */
- TrioWriteString(self,
- (flags & FLAGS_UPPER)
- ? "-" INFINITE_UPPER
- : "-" INFINITE_LOWER,
- flags, width, precision);
- return;
- }
- else
- {
- /* Positive infinity */
- TrioWriteString(self,
- (flags & FLAGS_UPPER)
- ? INFINITE_UPPER
- : INFINITE_LOWER,
- flags, width, precision);
- return;
- }
-
- default:
- /* Finitude */
- break;
- }
-
- /* Normal numbers */
- if (flags & FLAGS_LONGDOUBLE)
- {
- baseDigits = (base == 10)
- ? LDBL_DIG
- : (int)floor(LDBL_MANT_DIG / TrioLogarithmBase(base));
- epsilon = LDBL_EPSILON;
- }
- else if (flags & FLAGS_SHORT)
- {
- baseDigits = (base == BASE_DECIMAL)
- ? FLT_DIG
- : (int)floor(FLT_MANT_DIG / TrioLogarithmBase(base));
- epsilon = FLT_EPSILON;
- }
- else
- {
- baseDigits = (base == BASE_DECIMAL)
- ? DBL_DIG
- : (int)floor(DBL_MANT_DIG / TrioLogarithmBase(base));
- epsilon = DBL_EPSILON;
- }
-
- digits = (flags & FLAGS_UPPER) ? internalDigitsUpper : internalDigitsLower;
- isHex = (base == BASE_HEX);
- if (base == NO_BASE)
- base = BASE_DECIMAL;
- dblBase = (trio_long_double_t)base;
- keepTrailingZeroes = !( (flags & FLAGS_ROUNDING) ||
- ( (flags & FLAGS_FLOAT_G) &&
- !(flags & FLAGS_ALTERNATIVE) ) );
-
- if (flags & FLAGS_ROUNDING)
- precision = baseDigits;
-
- if (precision == NO_PRECISION)
- {
- if (isHex)
- {
- keepTrailingZeroes = FALSE;
- precision = FLT_MANT_DIG;
- }
- else
- {
- precision = FLT_DIG;
- }
- }
-
- if (isNegative)
- number = -number;
-
- if (isHex)
- flags |= FLAGS_FLOAT_E;
-
- if (flags & FLAGS_FLOAT_G)
- {
- if (precision == 0)
- precision = 1;
-
- if ((number < 1.0E-4) || (number > powl(base,
- (trio_long_double_t)precision)))
- {
- /* Use scientific notation */
- flags |= FLAGS_FLOAT_E;
- }
- else if (number < 1.0)
- {
- /*
- * Use normal notation. If the integer part of the number is
- * zero, then adjust the precision to include leading fractional
- * zeros.
- */
- workNumber = TrioLogarithm(number, base);
- workNumber = TRIO_FABS(workNumber);
- if (workNumber - floorl(workNumber) < 0.001)
- workNumber--;
- zeroes = (int)floorl(workNumber);
- }
- }
-
- if (flags & FLAGS_FLOAT_E)
- {
- /* Scale the number */
- workNumber = TrioLogarithm(number, base);
- if (trio_isinf(workNumber) == -1)
- {
- exponent = 0;
- /* Undo setting */
- if (flags & FLAGS_FLOAT_G)
- flags &= ~FLAGS_FLOAT_E;
- }
- else
- {
- exponent = (int)floorl(workNumber);
- number /= powl(dblBase, (trio_long_double_t)exponent);
- isExponentNegative = (exponent < 0);
- uExponent = (isExponentNegative) ? -exponent : exponent;
- if (isHex)
- uExponent *= 4; /* log16(2) */
- /* No thousand separators */
- flags &= ~FLAGS_QUOTE;
- }
- }
-
- integerNumber = floorl(number);
- fractionNumber = number - integerNumber;
-
- /*
- * Truncated number.
- *
- * Precision is number of significant digits for FLOAT_G
- * and number of fractional digits for others.
- */
- integerDigits = (integerNumber > epsilon)
- ? 1 + (int)TrioLogarithm(integerNumber, base)
- : 1;
- fractionDigits = ((flags & FLAGS_FLOAT_G) && (zeroes == 0))
- ? precision - integerDigits
- : zeroes + precision;
-
- dblFractionBase = TrioPower(base, fractionDigits);
-
- workNumber = number + 0.5 / dblFractionBase;
- if (floorl(number) != floorl(workNumber))
- {
- if (flags & FLAGS_FLOAT_E)
- {
- /* Adjust if number was rounded up one digit (ie. 0.99 to 1.00) */
- exponent++;
- isExponentNegative = (exponent < 0);
- uExponent = (isExponentNegative) ? -exponent : exponent;
- if (isHex)
- uExponent *= 4; /* log16(2) */
- workNumber = (number + 0.5 / dblFractionBase) / dblBase;
- integerNumber = floorl(workNumber);
- fractionNumber = workNumber - integerNumber;
- }
- else
- {
- /* Adjust if number was rounded up one digit (ie. 99 to 100) */
- integerNumber = floorl(number + 0.5);
- fractionNumber = 0.0;
- integerDigits = (integerNumber > epsilon)
- ? 1 + (int)TrioLogarithm(integerNumber, base)
- : 1;
- }
- }
-
- /* Estimate accuracy */
- integerAdjust = fractionAdjust = 0.5;
- if (flags & FLAGS_ROUNDING)
- {
- if (integerDigits > baseDigits)
- {
- integerThreshold = baseDigits;
- fractionDigits = 0;
- dblFractionBase = 1.0;
- fractionThreshold = 0;
- precision = 0; /* Disable decimal-point */
- integerAdjust = TrioPower(base, integerDigits - integerThreshold - 1);
- fractionAdjust = 0.0;
- }
- else
- {
- integerThreshold = integerDigits;
- fractionThreshold = fractionDigits - integerThreshold;
- fractionAdjust = 1.0;
- }
- }
- else
- {
- integerThreshold = INT_MAX;
- fractionThreshold = INT_MAX;
- }
-
- /*
- * Calculate expected width.
- * sign + integer part + thousands separators + decimal point
- * + fraction + exponent
- */
- fractionAdjust /= dblFractionBase;
- hasOnlyZeroes = (floorl((fractionNumber + fractionAdjust) * dblFractionBase) < epsilon);
- keepDecimalPoint = ( (flags & FLAGS_ALTERNATIVE) ||
- !((precision == 0) ||
- (!keepTrailingZeroes && hasOnlyZeroes)) );
- if (flags & FLAGS_FLOAT_E)
- {
- exponentDigits = (uExponent == 0)
- ? 1
- : (int)ceil(TrioLogarithm((double)(uExponent + 1),
- (isHex) ? 10.0 : base));
- }
- else
- exponentDigits = 0;
- requireTwoDigitExponent = ((base == BASE_DECIMAL) && (exponentDigits == 1));
-
- expectedWidth = integerDigits + fractionDigits
- + (keepDecimalPoint
- ? internalDecimalPointLength
- : 0)
- + ((flags & FLAGS_QUOTE)
- ? TrioCalcThousandSeparatorLength(integerDigits)
- : 0);
- if (isNegative || (flags & FLAGS_SHOWSIGN) || (flags & FLAGS_SPACE))
- expectedWidth += sizeof("-") - 1;
- if (exponentDigits > 0)
- expectedWidth += exponentDigits +
- ((requireTwoDigitExponent ? sizeof("E+0") : sizeof("E+")) - 1);
- if (isHex)
- expectedWidth += sizeof("0X") - 1;
-
- /* Output prefixing */
- if (flags & FLAGS_NILPADDING)
- {
- /* Leading zeros must be after sign */
- if (isNegative)
- self->OutStream(self, '-');
- else if (flags & FLAGS_SHOWSIGN)
- self->OutStream(self, '+');
- else if (flags & FLAGS_SPACE)
- self->OutStream(self, ' ');
- if (isHex)
- {
- self->OutStream(self, '0');
- self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
- }
- if (!(flags & FLAGS_LEFTADJUST))
- {
- for (i = expectedWidth; i < width; i++)
- {
- self->OutStream(self, '0');
- }
- }
- }
- else
- {
- /* Leading spaces must be before sign */
- if (!(flags & FLAGS_LEFTADJUST))
- {
- for (i = expectedWidth; i < width; i++)
- {
- self->OutStream(self, CHAR_ADJUST);
- }
- }
- if (isNegative)
- self->OutStream(self, '-');
- else if (flags & FLAGS_SHOWSIGN)
- self->OutStream(self, '+');
- else if (flags & FLAGS_SPACE)
- self->OutStream(self, ' ');
- if (isHex)
- {
- self->OutStream(self, '0');
- self->OutStream(self, (flags & FLAGS_UPPER) ? 'X' : 'x');
- }
- }
-
- /* Output the integer part and thousand separators */
- dblIntegerBase = 1.0 / TrioPower(base, integerDigits - 1);
- for (i = 0; i < integerDigits; i++)
- {
- workNumber = floorl(((integerNumber + integerAdjust) * dblIntegerBase));
- if (i > integerThreshold)
- {
- /* Beyond accuracy */
- self->OutStream(self, digits[0]);
- }
- else
- {
- self->OutStream(self, digits[(int)fmodl(workNumber, dblBase)]);
- }
- dblIntegerBase *= dblBase;
-
- if (((flags & (FLAGS_FLOAT_E | FLAGS_QUOTE)) == FLAGS_QUOTE)
- && TrioFollowedBySeparator(integerDigits - i))
- {
- for (groupingPointer = internalThousandSeparator;
- *groupingPointer != NIL;
- groupingPointer++)
- {
- self->OutStream(self, *groupingPointer);
- }
- }
- }
-
- /* Insert decimal point and build the fraction part */
- trailingZeroes = 0;
-
- if (keepDecimalPoint)
- {
- if (internalDecimalPoint)
- {
- self->OutStream(self, internalDecimalPoint);
- }
- else
- {
- for (i = 0; i < internalDecimalPointLength; i++)
- {
- self->OutStream(self, internalDecimalPointString[i]);
- }
- }
- }
-
- for (i = 0; i < fractionDigits; i++)
- {
- if ((integerDigits > integerThreshold) || (i > fractionThreshold))
- {
- /* Beyond accuracy */
- trailingZeroes++;
- }
- else
- {
- fractionNumber *= dblBase;
- fractionAdjust *= dblBase;
- workNumber = floorl(fractionNumber + fractionAdjust);
- fractionNumber -= workNumber;
- index = (int)fmodl(workNumber, dblBase);
- if (index == 0)
- {
- trailingZeroes++;
- }
- else
- {
- while (trailingZeroes > 0)
- {
- /* Not trailing zeroes after all */
- self->OutStream(self, digits[0]);
- trailingZeroes--;
- }
- self->OutStream(self, digits[index]);
- }
- }
- }
-
- if (keepTrailingZeroes)
- {
- while (trailingZeroes > 0)
- {
- self->OutStream(self, digits[0]);
- trailingZeroes--;
- }
- }
-
- /* Output exponent */
- if (exponentDigits > 0)
- {
- self->OutStream(self,
- isHex
- ? ((flags & FLAGS_UPPER) ? 'P' : 'p')
- : ((flags & FLAGS_UPPER) ? 'E' : 'e'));
- self->OutStream(self, (isExponentNegative) ? '-' : '+');
-
- /* The exponent must contain at least two digits */
- if (requireTwoDigitExponent)
- self->OutStream(self, '0');
-
- if (isHex)
- base = 10.0;
- exponentBase = (int)TrioPower(base, exponentDigits - 1);
- for (i = 0; i < exponentDigits; i++)
- {
- self->OutStream(self, digits[(uExponent / exponentBase) % base]);
- exponentBase /= base;
- }
- }
- /* Output trailing spaces */
- if (flags & FLAGS_LEFTADJUST)
- {
- for (i = expectedWidth; i < width; i++)
- {
- self->OutStream(self, CHAR_ADJUST);
- }
- }
-}
-
-/*************************************************************************
- * TrioFormatProcess
- *
- * Description:
- * This is the main engine for formatting output
- */
-TRIO_PRIVATE int
-TrioFormatProcess
-TRIO_ARGS3((data, format, parameters),
- trio_class_t *data,
- TRIO_CONST char *format,
- trio_parameter_t *parameters)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- int charlen;
-#endif
- int i;
- TRIO_CONST char *string;
- trio_pointer_t pointer;
- trio_flags_t flags;
- int width;
- int precision;
- int base;
- int index;
-
- index = 0;
- i = 0;
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- (void)mblen(NULL, 0);
-#endif
-
- while (format[index])
- {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- if (! isascii(format[index]))
- {
- charlen = mblen(&format[index], MB_LEN_MAX);
- /*
- * Only valid multibyte characters are handled here. Invalid
- * multibyte characters (charlen == -1) are handled as normal
- * characters.
- */
- if (charlen != -1)
- {
- while (charlen-- > 0)
- {
- data->OutStream(data, format[index++]);
- }
- continue; /* while characters left in formatting string */
- }
- }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
- if (CHAR_IDENTIFIER == format[index])
- {
- if (CHAR_IDENTIFIER == format[index + 1])
- {
- data->OutStream(data, CHAR_IDENTIFIER);
- index += 2;
- }
- else
- {
- /* Skip the parameter entries */
- while (parameters[i].type == FORMAT_PARAMETER)
- i++;
-
- flags = parameters[i].flags;
-
- /* Find width */
- width = parameters[i].width;
- if (flags & FLAGS_WIDTH_PARAMETER)
- {
- /* Get width from parameter list */
- width = (int)parameters[width].data.number.as_signed;
- if (width < 0)
- {
- /*
- * A negative width is the same as the - flag and
- * a positive width.
- */
- flags |= FLAGS_LEFTADJUST;
- flags &= ~FLAGS_NILPADDING;
- width = -width;
- }
- }
-
- /* Find precision */
- if (flags & FLAGS_PRECISION)
- {
- precision = parameters[i].precision;
- if (flags & FLAGS_PRECISION_PARAMETER)
- {
- /* Get precision from parameter list */
- precision = (int)parameters[precision].data.number.as_signed;
- if (precision < 0)
- {
- /*
- * A negative precision is the same as no
- * precision
- */
- precision = NO_PRECISION;
- }
- }
- }
- else
- {
- precision = NO_PRECISION;
- }
-
- /* Find base */
- base = parameters[i].base;
- if (flags & FLAGS_BASE_PARAMETER)
- {
- /* Get base from parameter list */
- base = (int)parameters[base].data.number.as_signed;
- }
-
- switch (parameters[i].type)
- {
- case FORMAT_CHAR:
- if (flags & FLAGS_QUOTE)
- data->OutStream(data, CHAR_QUOTE);
- if (! (flags & FLAGS_LEFTADJUST))
- {
- while (--width > 0)
- data->OutStream(data, CHAR_ADJUST);
- }
-#if TRIO_WIDECHAR
- if (flags & FLAGS_WIDECHAR)
- {
- TrioWriteWideStringCharacter(data,
- (trio_wchar_t)parameters[i].data.number.as_signed,
- flags,
- NO_WIDTH);
- }
- else
-#endif
- {
- TrioWriteStringCharacter(data,
- (int)parameters[i].data.number.as_signed,
- flags);
- }
-
- if (flags & FLAGS_LEFTADJUST)
- {
- while(--width > 0)
- data->OutStream(data, CHAR_ADJUST);
- }
- if (flags & FLAGS_QUOTE)
- data->OutStream(data, CHAR_QUOTE);
-
- break; /* FORMAT_CHAR */
-
- case FORMAT_INT:
- TrioWriteNumber(data,
- parameters[i].data.number.as_unsigned,
- flags,
- width,
- precision,
- base);
-
- break; /* FORMAT_INT */
-
- case FORMAT_DOUBLE:
- TrioWriteDouble(data,
- parameters[i].data.longdoubleNumber,
- flags,
- width,
- precision,
- base);
- break; /* FORMAT_DOUBLE */
-
- case FORMAT_STRING:
-#if TRIO_WIDECHAR
- if (flags & FLAGS_WIDECHAR)
- {
- TrioWriteWideString(data,
- parameters[i].data.wstring,
- flags,
- width,
- precision);
- }
- else
-#endif
- {
- TrioWriteString(data,
- parameters[i].data.string,
- flags,
- width,
- precision);
- }
- break; /* FORMAT_STRING */
-
- case FORMAT_POINTER:
- {
- trio_reference_t reference;
-
- reference.data = data;
- reference.parameter = &parameters[i];
- trio_print_pointer(&reference, parameters[i].data.pointer);
- }
- break; /* FORMAT_POINTER */
-
- case FORMAT_COUNT:
- pointer = parameters[i].data.pointer;
- if (NULL != pointer)
- {
- /*
- * C99 paragraph 7.19.6.1.8 says "the number of
- * characters written to the output stream so far by
- * this call", which is data->committed
- */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
- if (flags & FLAGS_SIZE_T)
- *(size_t *)pointer = (size_t)data->committed;
- else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
- if (flags & FLAGS_PTRDIFF_T)
- *(ptrdiff_t *)pointer = (ptrdiff_t)data->committed;
- else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
- if (flags & FLAGS_INTMAX_T)
- *(trio_intmax_t *)pointer = (trio_intmax_t)data->committed;
- else
-#endif
- if (flags & FLAGS_QUAD)
- {
- *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)data->committed;
- }
- else if (flags & FLAGS_LONG)
- {
- *(long int *)pointer = (long int)data->committed;
- }
- else if (flags & FLAGS_SHORT)
- {
- *(short int *)pointer = (short int)data->committed;
- }
- else
- {
- *(int *)pointer = (int)data->committed;
- }
- }
- break; /* FORMAT_COUNT */
-
- case FORMAT_PARAMETER:
- break; /* FORMAT_PARAMETER */
-
-#if defined(FORMAT_ERRNO)
- case FORMAT_ERRNO:
- string = trio_error(parameters[i].data.errorNumber);
- if (string)
- {
- TrioWriteString(data,
- string,
- flags,
- width,
- precision);
- }
- else
- {
- data->OutStream(data, '#');
- TrioWriteNumber(data,
- (trio_uintmax_t)parameters[i].data.errorNumber,
- flags,
- width,
- precision,
- BASE_DECIMAL);
- }
- break; /* FORMAT_ERRNO */
-#endif /* defined(FORMAT_ERRNO) */
-
-#if defined(FORMAT_USER_DEFINED)
- case FORMAT_USER_DEFINED:
- {
- trio_reference_t reference;
- trio_userdef_t *def = NULL;
-
- if (parameters[i].user_name[0] == NIL)
- {
- /* Use handle */
- if ((i > 0) ||
- (parameters[i - 1].type == FORMAT_PARAMETER))
- def = (trio_userdef_t *)parameters[i - 1].data.pointer;
- }
- else
- {
- /* Look up namespace */
- def = TrioFindNamespace(parameters[i].user_name, NULL);
- }
- if (def) {
- reference.data = data;
- reference.parameter = &parameters[i];
- def->callback(&reference);
- }
- }
- break;
-#endif /* defined(FORMAT_USER_DEFINED) */
-
- default:
- break;
- } /* switch parameter type */
-
- /* Prepare for next */
- index = parameters[i].indexAfterSpecifier;
- i++;
- }
- }
- else /* not identifier */
- {
- data->OutStream(data, format[index++]);
- }
- }
- return data->processed;
-}
-
-/*************************************************************************
- * TrioFormatRef
- */
-TRIO_PRIVATE int
-TrioFormatRef
-TRIO_ARGS4((reference, format, arglist, argarray),
- trio_reference_t *reference,
- TRIO_CONST char *format,
- TRIO_VA_LIST_PTR arglist,
- trio_pointer_t *argarray)
-{
- int status;
- trio_parameter_t parameters[MAX_PARAMETERS];
-
- status = TrioParse(TYPE_PRINT, format, parameters, arglist, argarray);
- if (status < 0)
- return status;
-
- status = TrioFormatProcess(reference->data, format, parameters);
- if (reference->data->error != 0)
- {
- status = reference->data->error;
- }
- return status;
-}
-
-/*************************************************************************
- * TrioFormat
- */
-TRIO_PRIVATE int
-TrioFormat
-TRIO_ARGS6((destination, destinationSize, OutStream, format, arglist, argarray),
- trio_pointer_t destination,
- size_t destinationSize,
- void (*OutStream) TRIO_PROTO((trio_class_t *, int)),
- TRIO_CONST char *format,
- TRIO_VA_LIST_PTR arglist,
- trio_pointer_t *argarray)
-{
- int status;
- trio_class_t data;
- trio_parameter_t parameters[MAX_PARAMETERS];
-
- assert(VALID(OutStream));
- assert(VALID(format));
-
- memset(&data, 0, sizeof(data));
- data.OutStream = OutStream;
- data.location = destination;
- data.max = destinationSize;
- data.error = 0;
-
-#if defined(USE_LOCALE)
- if (NULL == internalLocaleValues)
- {
- TrioSetLocale();
- }
-#endif
-
- status = TrioParse(TYPE_PRINT, format, parameters, arglist, argarray);
- if (status < 0)
- return status;
-
- status = TrioFormatProcess(&data, format, parameters);
- if (data.error != 0)
- {
- status = data.error;
- }
- return status;
-}
-
-/*************************************************************************
- * TrioOutStreamFile
- */
-TRIO_PRIVATE void
-TrioOutStreamFile
-TRIO_ARGS2((self, output),
- trio_class_t *self,
- int output)
-{
- FILE *file;
-
- assert(VALID(self));
- assert(VALID(self->location));
-
- file = (FILE *)self->location;
- self->processed++;
- if (fputc(output, file) == EOF)
- {
- self->error = TRIO_ERROR_RETURN(TRIO_EOF, 0);
- }
- else
- {
- self->committed++;
- }
-}
-
-/*************************************************************************
- * TrioOutStreamFileDescriptor
- */
-TRIO_PRIVATE void
-TrioOutStreamFileDescriptor
-TRIO_ARGS2((self, output),
- trio_class_t *self,
- int output)
-{
- int fd;
- char ch;
-
- assert(VALID(self));
-
- fd = *((int *)self->location);
- ch = (char)output;
- self->processed++;
- if (write(fd, &ch, sizeof(char)) == -1)
- {
- self->error = TRIO_ERROR_RETURN(TRIO_ERRNO, 0);
- }
- else
- {
- self->committed++;
- }
-}
-
-/*************************************************************************
- * TrioOutStreamCustom
- */
-TRIO_PRIVATE void
-TrioOutStreamCustom
-TRIO_ARGS2((self, output),
- trio_class_t *self,
- int output)
-{
- int status;
- trio_custom_t *data;
-
- assert(VALID(self));
- assert(VALID(self->location));
-
- data = (trio_custom_t *)self->location;
- if (data->stream.out)
- {
- status = (data->stream.out)(data->closure, output);
- if (status >= 0)
- {
- self->committed++;
- }
- else
- {
- if (self->error == 0)
- {
- self->error = TRIO_ERROR_RETURN(TRIO_ECUSTOM, -status);
- }
- }
- }
- self->processed++;
-}
-
-/*************************************************************************
- * TrioOutStreamString
- */
-TRIO_PRIVATE void
-TrioOutStreamString
-TRIO_ARGS2((self, output),
- trio_class_t *self,
- int output)
-{
- char **buffer;
-
- assert(VALID(self));
- assert(VALID(self->location));
-
- buffer = (char **)self->location;
- **buffer = (char)output;
- (*buffer)++;
- self->processed++;
- self->committed++;
-}
-
-/*************************************************************************
- * TrioOutStreamStringMax
- */
-TRIO_PRIVATE void
-TrioOutStreamStringMax
-TRIO_ARGS2((self, output),
- trio_class_t *self,
- int output)
-{
- char **buffer;
-
- assert(VALID(self));
- assert(VALID(self->location));
-
- buffer = (char **)self->location;
-
- if (self->processed < self->max)
- {
- **buffer = (char)output;
- (*buffer)++;
- self->committed++;
- }
- self->processed++;
-}
-
-/*************************************************************************
- * TrioOutStreamStringDynamic
- */
-TRIO_PRIVATE void
-TrioOutStreamStringDynamic
-TRIO_ARGS2((self, output),
- trio_class_t *self,
- int output)
-{
- assert(VALID(self));
- assert(VALID(self->location));
-
- if (self->error == 0)
- {
- trio_xstring_append_char((trio_string_t *)self->location,
- (char)output);
- self->committed++;
- }
- /* The processed variable must always be increased */
- self->processed++;
-}
-
-/*************************************************************************
- *
- * Formatted printing functions
- *
- ************************************************************************/
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_printf.h"
-#endif
-/** @addtogroup Printf
- @{
-*/
-
-/*************************************************************************
- * printf
- */
-
-/**
- Print to standard output stream.
-
- @param format Formatting string.
- @param ... Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_printf
-TRIO_VARGS2((format, va_alist),
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioFormat(stdout, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-/**
- Print to standard output stream.
-
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vprintf
-TRIO_ARGS2((format, args),
- TRIO_CONST char *format,
- va_list args)
-{
- assert(VALID(format));
-
- return TrioFormat(stdout, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-/**
- Print to standard output stream.
-
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_printfv
-TRIO_ARGS2((format, args),
- TRIO_CONST char *format,
- trio_pointer_t * args)
-{
- assert(VALID(format));
-
- return TrioFormat(stdout, 0, TrioOutStreamFile, format, NULL, args);
-}
-
-/*************************************************************************
- * fprintf
- */
-
-/**
- Print to file.
-
- @param file File pointer.
- @param format Formatting string.
- @param ... Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_fprintf
-TRIO_VARGS3((file, format, va_alist),
- FILE *file,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(file));
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioFormat(file, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-/**
- Print to file.
-
- @param file File pointer.
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vfprintf
-TRIO_ARGS3((file, format, args),
- FILE *file,
- TRIO_CONST char *format,
- va_list args)
-{
- assert(VALID(file));
- assert(VALID(format));
-
- return TrioFormat(file, 0, TrioOutStreamFile, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-/**
- Print to file.
-
- @param file File pointer.
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_fprintfv
-TRIO_ARGS3((file, format, args),
- FILE *file,
- TRIO_CONST char *format,
- trio_pointer_t * args)
-{
- assert(VALID(file));
- assert(VALID(format));
-
- return TrioFormat(file, 0, TrioOutStreamFile, format, NULL, args);
-}
-
-/*************************************************************************
- * dprintf
- */
-
-/**
- Print to file descriptor.
-
- @param fd File descriptor.
- @param format Formatting string.
- @param ... Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_dprintf
-TRIO_VARGS3((fd, format, va_alist),
- int fd,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-/**
- Print to file descriptor.
-
- @param fd File descriptor.
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vdprintf
-TRIO_ARGS3((fd, format, args),
- int fd,
- TRIO_CONST char *format,
- va_list args)
-{
- assert(VALID(format));
-
- return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-/**
- Print to file descriptor.
-
- @param fd File descriptor.
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_dprintfv
-TRIO_ARGS3((fd, format, args),
- int fd,
- TRIO_CONST char *format,
- trio_pointer_t *args)
-{
- assert(VALID(format));
-
- return TrioFormat(&fd, 0, TrioOutStreamFileDescriptor, format, NULL, args);
-}
-
-/*************************************************************************
- * cprintf
- */
-TRIO_PUBLIC int
-trio_cprintf
-TRIO_VARGS4((stream, closure, format, va_alist),
- trio_outstream_t stream,
- trio_pointer_t closure,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
- trio_custom_t data;
-
- assert(VALID(stream));
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- data.stream.out = stream;
- data.closure = closure;
- status = TrioFormat(&data, 0, TrioOutStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-TRIO_PUBLIC int
-trio_vcprintf
-TRIO_ARGS4((stream, closure, format, args),
- trio_outstream_t stream,
- trio_pointer_t closure,
- TRIO_CONST char *format,
- va_list args)
-{
- trio_custom_t data;
-
- assert(VALID(stream));
- assert(VALID(format));
-
- data.stream.out = stream;
- data.closure = closure;
- return TrioFormat(&data, 0, TrioOutStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_cprintfv
-TRIO_ARGS4((stream, closure, format, args),
- trio_outstream_t stream,
- trio_pointer_t closure,
- TRIO_CONST char *format,
- void **args)
-{
- trio_custom_t data;
-
- assert(VALID(stream));
- assert(VALID(format));
-
- data.stream.out = stream;
- data.closure = closure;
- return TrioFormat(&data, 0, TrioOutStreamCustom, format, NULL, args);
-}
-
-/*************************************************************************
- * sprintf
- */
-
-/**
- Print to string.
-
- @param buffer Output string.
- @param format Formatting string.
- @param ... Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_sprintf
-TRIO_VARGS3((buffer, format, va_alist),
- char *buffer,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioFormat(&buffer, 0, TrioOutStreamString, format, TRIO_VA_LIST_ADDR(args), NULL);
- *buffer = NIL; /* Terminate with NIL character */
- TRIO_VA_END(args);
- return status;
-}
-
-/**
- Print to string.
-
- @param buffer Output string.
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vsprintf
-TRIO_ARGS3((buffer, format, args),
- char *buffer,
- TRIO_CONST char *format,
- va_list args)
-{
- int status;
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- status = TrioFormat(&buffer, 0, TrioOutStreamString, format, TRIO_VA_LIST_ADDR(args), NULL);
- *buffer = NIL;
- return status;
-}
-
-/**
- Print to string.
-
- @param buffer Output string.
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_sprintfv
-TRIO_ARGS3((buffer, format, args),
- char *buffer,
- TRIO_CONST char *format,
- trio_pointer_t *args)
-{
- int status;
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- status = TrioFormat(&buffer, 0, TrioOutStreamString, format, NULL, args);
- *buffer = NIL;
- return status;
-}
-
-/*************************************************************************
- * snprintf
- */
-
-/**
- Print at most @p max characters to string.
-
- @param buffer Output string.
- @param max Maximum number of characters to print.
- @param format Formatting string.
- @param ... Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_snprintf
-TRIO_VARGS4((buffer, max, format, va_alist),
- char *buffer,
- size_t max,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
- TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
- if (max > 0)
- *buffer = NIL;
- TRIO_VA_END(args);
- return status;
-}
-
-/**
- Print at most @p max characters to string.
-
- @param buffer Output string.
- @param max Maximum number of characters to print.
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_vsnprintf
-TRIO_ARGS4((buffer, max, format, args),
- char *buffer,
- size_t max,
- TRIO_CONST char *format,
- va_list args)
-{
- int status;
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
- TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
- if (max > 0)
- *buffer = NIL;
- return status;
-}
-
-/**
- Print at most @p max characters to string.
-
- @param buffer Output string.
- @param max Maximum number of characters to print.
- @param format Formatting string.
- @param args Arguments.
- @return Number of printed characters.
- */
-TRIO_PUBLIC int
-trio_snprintfv
-TRIO_ARGS4((buffer, max, format, args),
- char *buffer,
- size_t max,
- TRIO_CONST char *format,
- trio_pointer_t *args)
-{
- int status;
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- status = TrioFormat(&buffer, max > 0 ? max - 1 : 0,
- TrioOutStreamStringMax, format, NULL, args);
- if (max > 0)
- *buffer = NIL;
- return status;
-}
-
-/*************************************************************************
- * snprintfcat
- * Appends the new string to the buffer string overwriting the '\0'
- * character at the end of buffer.
- */
-TRIO_PUBLIC int
-trio_snprintfcat
-TRIO_VARGS4((buffer, max, format, va_alist),
- char *buffer,
- size_t max,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
- size_t buf_len;
-
- TRIO_VA_START(args, format);
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- buf_len = trio_length(buffer);
- buffer = &buffer[buf_len];
-
- status = TrioFormat(&buffer, max - 1 - buf_len,
- TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- *buffer = NIL;
- return status;
-}
-
-TRIO_PUBLIC int
-trio_vsnprintfcat
-TRIO_ARGS4((buffer, max, format, args),
- char *buffer,
- size_t max,
- TRIO_CONST char *format,
- va_list args)
-{
- int status;
- size_t buf_len;
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- buf_len = trio_length(buffer);
- buffer = &buffer[buf_len];
- status = TrioFormat(&buffer, max - 1 - buf_len,
- TrioOutStreamStringMax, format, TRIO_VA_LIST_ADDR(args), NULL);
- *buffer = NIL;
- return status;
-}
-
-/*************************************************************************
- * trio_aprintf
- */
-
-/* Deprecated */
-TRIO_PUBLIC char *
-trio_aprintf
-TRIO_VARGS2((format, va_alist),
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- va_list args;
- trio_string_t *info;
- char *result = NULL;
-
- assert(VALID(format));
-
- info = trio_xstring_duplicate("");
- if (info)
- {
- TRIO_VA_START(args, format);
- (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
- format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
-
- trio_string_terminate(info);
- result = trio_string_extract(info);
- trio_string_destroy(info);
- }
- return result;
-}
-
-/* Deprecated */
-TRIO_PUBLIC char *
-trio_vaprintf
-TRIO_ARGS2((format, args),
- TRIO_CONST char *format,
- va_list args)
-{
- trio_string_t *info;
- char *result = NULL;
-
- assert(VALID(format));
-
- info = trio_xstring_duplicate("");
- if (info)
- {
- (void)TrioFormat(info, 0, TrioOutStreamStringDynamic,
- format, TRIO_VA_LIST_ADDR(args), NULL);
- trio_string_terminate(info);
- result = trio_string_extract(info);
- trio_string_destroy(info);
- }
- return result;
-}
-
-TRIO_PUBLIC int
-trio_asprintf
-TRIO_VARGS3((result, format, va_alist),
- char **result,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- va_list args;
- int status;
- trio_string_t *info;
-
- assert(VALID(format));
-
- *result = NULL;
-
- info = trio_xstring_duplicate("");
- if (info == NULL)
- {
- status = TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
- }
- else
- {
- TRIO_VA_START(args, format);
- status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
- format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- if (status >= 0)
- {
- trio_string_terminate(info);
- *result = trio_string_extract(info);
- }
- trio_string_destroy(info);
- }
- return status;
-}
-
-TRIO_PUBLIC int
-trio_vasprintf
-TRIO_ARGS3((result, format, args),
- char **result,
- TRIO_CONST char *format,
- va_list args)
-{
- int status;
- trio_string_t *info;
-
- assert(VALID(format));
-
- *result = NULL;
-
- info = trio_xstring_duplicate("");
- if (info == NULL)
- {
- status = TRIO_ERROR_RETURN(TRIO_ENOMEM, 0);
- }
- else
- {
- status = TrioFormat(info, 0, TrioOutStreamStringDynamic,
- format, TRIO_VA_LIST_ADDR(args), NULL);
- if (status >= 0)
- {
- trio_string_terminate(info);
- *result = trio_string_extract(info);
- }
- trio_string_destroy(info);
- }
- return status;
-}
-
-/** @} End of Printf documentation module */
-
-/*************************************************************************
- *
- * CALLBACK
- *
- ************************************************************************/
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_register.h"
-#endif
-/**
- @addtogroup UserDefined
- @{
-*/
-
-#if TRIO_EXTENSION
-
-/*************************************************************************
- * trio_register
- */
-
-/**
- Register new user-defined specifier.
-
- @param callback
- @param name
- @return Handle.
- */
-TRIO_PUBLIC trio_pointer_t
-trio_register
-TRIO_ARGS2((callback, name),
- trio_callback_t callback,
- TRIO_CONST char *name)
-{
- trio_userdef_t *def;
- trio_userdef_t *prev = NULL;
-
- if (callback == NULL)
- return NULL;
-
- if (name)
- {
- /* Handle built-in namespaces */
- if (name[0] == ':')
- {
- if (trio_equal(name, ":enter"))
- {
- internalEnterCriticalRegion = callback;
- }
- else if (trio_equal(name, ":leave"))
- {
- internalLeaveCriticalRegion = callback;
- }
- return NULL;
- }
-
- /* Bail out if namespace is too long */
- if (trio_length(name) >= MAX_USER_NAME)
- return NULL;
-
- /* Bail out if namespace already is registered */
- def = TrioFindNamespace(name, &prev);
- if (def)
- return NULL;
- }
-
- def = (trio_userdef_t *)TRIO_MALLOC(sizeof(trio_userdef_t));
- if (def)
- {
- if (internalEnterCriticalRegion)
- (void)internalEnterCriticalRegion(NULL);
-
- if (name)
- {
- /* Link into internal list */
- if (prev == NULL)
- internalUserDef = def;
- else
- prev->next = def;
- }
- /* Initialize */
- def->callback = callback;
- def->name = (name == NULL)
- ? NULL
- : trio_duplicate(name);
- def->next = NULL;
-
- if (internalLeaveCriticalRegion)
- (void)internalLeaveCriticalRegion(NULL);
- }
- return (trio_pointer_t)def;
-}
-
-/**
- Unregister an existing user-defined specifier.
-
- @param handle
- */
-void
-trio_unregister
-TRIO_ARGS1((handle),
- trio_pointer_t handle)
-{
- trio_userdef_t *self = (trio_userdef_t *)handle;
- trio_userdef_t *def;
- trio_userdef_t *prev = NULL;
-
- assert(VALID(self));
-
- if (self->name)
- {
- def = TrioFindNamespace(self->name, &prev);
- if (def)
- {
- if (internalEnterCriticalRegion)
- (void)internalEnterCriticalRegion(NULL);
-
- if (prev == NULL)
- internalUserDef = NULL;
- else
- prev->next = def->next;
-
- if (internalLeaveCriticalRegion)
- (void)internalLeaveCriticalRegion(NULL);
- }
- trio_destroy(self->name);
- }
- TRIO_FREE(self);
-}
-
-/*************************************************************************
- * trio_get_format [public]
- */
-TRIO_CONST char *
-trio_get_format
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
-#if defined(FORMAT_USER_DEFINED)
- assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED);
-#endif
-
- return (((trio_reference_t *)ref)->parameter->user_data);
-}
-
-/*************************************************************************
- * trio_get_argument [public]
- */
-trio_pointer_t
-trio_get_argument
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
-#if defined(FORMAT_USER_DEFINED)
- assert(((trio_reference_t *)ref)->parameter->type == FORMAT_USER_DEFINED);
-#endif
-
- return ((trio_reference_t *)ref)->parameter->data.pointer;
-}
-
-/*************************************************************************
- * trio_get_width / trio_set_width [public]
- */
-int
-trio_get_width
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return ((trio_reference_t *)ref)->parameter->width;
-}
-
-void
-trio_set_width
-TRIO_ARGS2((ref, width),
- trio_pointer_t ref,
- int width)
-{
- ((trio_reference_t *)ref)->parameter->width = width;
-}
-
-/*************************************************************************
- * trio_get_precision / trio_set_precision [public]
- */
-int
-trio_get_precision
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->precision);
-}
-
-void
-trio_set_precision
-TRIO_ARGS2((ref, precision),
- trio_pointer_t ref,
- int precision)
-{
- ((trio_reference_t *)ref)->parameter->precision = precision;
-}
-
-/*************************************************************************
- * trio_get_base / trio_set_base [public]
- */
-int
-trio_get_base
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->base);
-}
-
-void
-trio_set_base
-TRIO_ARGS2((ref, base),
- trio_pointer_t ref,
- int base)
-{
- ((trio_reference_t *)ref)->parameter->base = base;
-}
-
-/*************************************************************************
- * trio_get_long / trio_set_long [public]
- */
-int
-trio_get_long
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LONG)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_long
-TRIO_ARGS2((ref, is_long),
- trio_pointer_t ref,
- int is_long)
-{
- if (is_long)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LONG;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LONG;
-}
-
-/*************************************************************************
- * trio_get_longlong / trio_set_longlong [public]
- */
-int
-trio_get_longlong
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_QUAD)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_longlong
-TRIO_ARGS2((ref, is_longlong),
- trio_pointer_t ref,
- int is_longlong)
-{
- if (is_longlong)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_QUAD;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_QUAD;
-}
-
-/*************************************************************************
- * trio_get_longdouble / trio_set_longdouble [public]
- */
-int
-trio_get_longdouble
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LONGDOUBLE)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_longdouble
-TRIO_ARGS2((ref, is_longdouble),
- trio_pointer_t ref,
- int is_longdouble)
-{
- if (is_longdouble)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LONGDOUBLE;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LONGDOUBLE;
-}
-
-/*************************************************************************
- * trio_get_short / trio_set_short [public]
- */
-int
-trio_get_short
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHORT)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_short
-TRIO_ARGS2((ref, is_short),
- trio_pointer_t ref,
- int is_short)
-{
- if (is_short)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHORT;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHORT;
-}
-
-/*************************************************************************
- * trio_get_shortshort / trio_set_shortshort [public]
- */
-int
-trio_get_shortshort
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHORTSHORT)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_shortshort
-TRIO_ARGS2((ref, is_shortshort),
- trio_pointer_t ref,
- int is_shortshort)
-{
- if (is_shortshort)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHORTSHORT;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHORTSHORT;
-}
-
-/*************************************************************************
- * trio_get_alternative / trio_set_alternative [public]
- */
-int
-trio_get_alternative
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_ALTERNATIVE)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_alternative
-TRIO_ARGS2((ref, is_alternative),
- trio_pointer_t ref,
- int is_alternative)
-{
- if (is_alternative)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_ALTERNATIVE;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_ALTERNATIVE;
-}
-
-/*************************************************************************
- * trio_get_alignment / trio_set_alignment [public]
- */
-int
-trio_get_alignment
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_LEFTADJUST)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_alignment
-TRIO_ARGS2((ref, is_leftaligned),
- trio_pointer_t ref,
- int is_leftaligned)
-{
- if (is_leftaligned)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_LEFTADJUST;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_LEFTADJUST;
-}
-
-/*************************************************************************
- * trio_get_spacing /trio_set_spacing [public]
- */
-int
-trio_get_spacing
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SPACE)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_spacing
-TRIO_ARGS2((ref, is_space),
- trio_pointer_t ref,
- int is_space)
-{
- if (is_space)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SPACE;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SPACE;
-}
-
-/*************************************************************************
- * trio_get_sign / trio_set_sign [public]
- */
-int
-trio_get_sign
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SHOWSIGN)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_sign
-TRIO_ARGS2((ref, is_sign),
- trio_pointer_t ref,
- int is_sign)
-{
- if (is_sign)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SHOWSIGN;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SHOWSIGN;
-}
-
-/*************************************************************************
- * trio_get_padding / trio_set_padding [public]
- */
-int
-trio_get_padding
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_NILPADDING)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_padding
-TRIO_ARGS2((ref, is_padding),
- trio_pointer_t ref,
- int is_padding)
-{
- if (is_padding)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_NILPADDING;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_NILPADDING;
-}
-
-/*************************************************************************
- * trio_get_quote / trio_set_quote [public]
- */
-int
-trio_get_quote
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_QUOTE)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_quote
-TRIO_ARGS2((ref, is_quote),
- trio_pointer_t ref,
- int is_quote)
-{
- if (is_quote)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_QUOTE;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_QUOTE;
-}
-
-/*************************************************************************
- * trio_get_upper / trio_set_upper [public]
- */
-int
-trio_get_upper
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_UPPER)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_upper
-TRIO_ARGS2((ref, is_upper),
- trio_pointer_t ref,
- int is_upper)
-{
- if (is_upper)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_UPPER;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_UPPER;
-}
-
-/*************************************************************************
- * trio_get_largest / trio_set_largest [public]
- */
-#if TRIO_C99
-int
-trio_get_largest
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_INTMAX_T)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_largest
-TRIO_ARGS2((ref, is_largest),
- trio_pointer_t ref,
- int is_largest)
-{
- if (is_largest)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_INTMAX_T;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_INTMAX_T;
-}
-#endif
-
-/*************************************************************************
- * trio_get_ptrdiff / trio_set_ptrdiff [public]
- */
-int
-trio_get_ptrdiff
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_PTRDIFF_T)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_ptrdiff
-TRIO_ARGS2((ref, is_ptrdiff),
- trio_pointer_t ref,
- int is_ptrdiff)
-{
- if (is_ptrdiff)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_PTRDIFF_T;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_PTRDIFF_T;
-}
-
-/*************************************************************************
- * trio_get_size / trio_set_size [public]
- */
-#if TRIO_C99
-int
-trio_get_size
-TRIO_ARGS1((ref),
- trio_pointer_t ref)
-{
- return (((trio_reference_t *)ref)->parameter->flags & FLAGS_SIZE_T)
- ? TRUE
- : FALSE;
-}
-
-void
-trio_set_size
-TRIO_ARGS2((ref, is_size),
- trio_pointer_t ref,
- int is_size)
-{
- if (is_size)
- ((trio_reference_t *)ref)->parameter->flags |= FLAGS_SIZE_T;
- else
- ((trio_reference_t *)ref)->parameter->flags &= ~FLAGS_SIZE_T;
-}
-#endif
-
-/*************************************************************************
- * trio_print_int [public]
- */
-void
-trio_print_int
-TRIO_ARGS2((ref, number),
- trio_pointer_t ref,
- int number)
-{
- trio_reference_t *self = (trio_reference_t *)ref;
-
- TrioWriteNumber(self->data,
- (trio_uintmax_t)number,
- self->parameter->flags,
- self->parameter->width,
- self->parameter->precision,
- self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_uint [public]
- */
-void
-trio_print_uint
-TRIO_ARGS2((ref, number),
- trio_pointer_t ref,
- unsigned int number)
-{
- trio_reference_t *self = (trio_reference_t *)ref;
-
- TrioWriteNumber(self->data,
- (trio_uintmax_t)number,
- self->parameter->flags | FLAGS_UNSIGNED,
- self->parameter->width,
- self->parameter->precision,
- self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_double [public]
- */
-void
-trio_print_double
-TRIO_ARGS2((ref, number),
- trio_pointer_t ref,
- double number)
-{
- trio_reference_t *self = (trio_reference_t *)ref;
-
- TrioWriteDouble(self->data,
- number,
- self->parameter->flags,
- self->parameter->width,
- self->parameter->precision,
- self->parameter->base);
-}
-
-/*************************************************************************
- * trio_print_string [public]
- */
-void
-trio_print_string
-TRIO_ARGS2((ref, string),
- trio_pointer_t ref,
- char *string)
-{
- trio_reference_t *self = (trio_reference_t *)ref;
-
- TrioWriteString(self->data,
- string,
- self->parameter->flags,
- self->parameter->width,
- self->parameter->precision);
-}
-
-/*************************************************************************
- * trio_print_ref [public]
- */
-int
-trio_print_ref
-TRIO_VARGS3((ref, format, va_alist),
- trio_pointer_t ref,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list arglist;
-
- assert(VALID(format));
-
- TRIO_VA_START(arglist, format);
- status = TrioFormatRef((trio_reference_t *)ref, format, TRIO_VA_LIST_ADDR(arglist), NULL);
- TRIO_VA_END(arglist);
- return status;
-}
-
-/*************************************************************************
- * trio_vprint_ref [public]
- */
-int
-trio_vprint_ref
-TRIO_ARGS3((ref, format, arglist),
- trio_pointer_t ref,
- TRIO_CONST char *format,
- va_list arglist)
-{
- assert(VALID(format));
-
- return TrioFormatRef((trio_reference_t *)ref, format, TRIO_VA_LIST_ADDR(arglist), NULL);
-}
-
-/*************************************************************************
- * trio_printv_ref [public]
- */
-int
-trio_printv_ref
-TRIO_ARGS3((ref, format, argarray),
- trio_pointer_t ref,
- TRIO_CONST char *format,
- trio_pointer_t *argarray)
-{
- assert(VALID(format));
-
- return TrioFormatRef((trio_reference_t *)ref, format, NULL, argarray);
-}
-
-#endif /* TRIO_EXTENSION */
-
-/*************************************************************************
- * trio_print_pointer [public]
- */
-void
-trio_print_pointer
-TRIO_ARGS2((ref, pointer),
- trio_pointer_t ref,
- trio_pointer_t pointer)
-{
- trio_reference_t *self = (trio_reference_t *)ref;
- trio_flags_t flags;
- trio_uintmax_t number;
-
- if (NULL == pointer)
- {
- TRIO_CONST char *string = internalNullString;
- while (*string)
- self->data->OutStream(self->data, *string++);
- }
- else
- {
- /*
- * The subtraction of the null pointer is a workaround
- * to avoid a compiler warning. The performance overhead
- * is negligible (and likely to be removed by an
- * optimizing compiler). The (char *) casting is done
- * to please ANSI C++.
- */
- number = (trio_uintmax_t)((char *)pointer - (char *)0);
- /* Shrink to size of pointer */
- number &= (trio_uintmax_t)-1;
- flags = self->parameter->flags;
- flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE |
- FLAGS_NILPADDING);
- TrioWriteNumber(self->data,
- number,
- flags,
- POINTER_WIDTH,
- NO_PRECISION,
- BASE_HEX);
- }
-}
-
-/** @} End of UserDefined documentation module */
-
-/*************************************************************************
- *
- * LOCALES
- *
- ************************************************************************/
-
-/*************************************************************************
- * trio_locale_set_decimal_point
- *
- * Decimal point can only be one character. The input argument is a
- * string to enable multibyte characters. At most MB_LEN_MAX characters
- * will be used.
- */
-TRIO_PUBLIC void
-trio_locale_set_decimal_point
-TRIO_ARGS1((decimalPoint),
- char *decimalPoint)
-{
-#if defined(USE_LOCALE)
- if (NULL == internalLocaleValues)
- {
- TrioSetLocale();
- }
-#endif
- internalDecimalPointLength = trio_length(decimalPoint);
- if (internalDecimalPointLength == 1)
- {
- internalDecimalPoint = *decimalPoint;
- }
- else
- {
- internalDecimalPoint = NIL;
- trio_copy_max(internalDecimalPointString,
- sizeof(internalDecimalPointString),
- decimalPoint);
- }
-}
-
-/*************************************************************************
- * trio_locale_set_thousand_separator
- *
- * See trio_locale_set_decimal_point
- */
-TRIO_PUBLIC void
-trio_locale_set_thousand_separator
-TRIO_ARGS1((thousandSeparator),
- char *thousandSeparator)
-{
-#if defined(USE_LOCALE)
- if (NULL == internalLocaleValues)
- {
- TrioSetLocale();
- }
-#endif
- trio_copy_max(internalThousandSeparator,
- sizeof(internalThousandSeparator),
- thousandSeparator);
- internalThousandSeparatorLength = trio_length(internalThousandSeparator);
-}
-
-/*************************************************************************
- * trio_locale_set_grouping
- *
- * Array of bytes. Reversed order.
- *
- * CHAR_MAX : No further grouping
- * 0 : Repeat last group for the remaining digits (not necessary
- * as C strings are zero-terminated)
- * n : Set current group to n
- *
- * Same order as the grouping attribute in LC_NUMERIC.
- */
-TRIO_PUBLIC void
-trio_locale_set_grouping
-TRIO_ARGS1((grouping),
- char *grouping)
-{
-#if defined(USE_LOCALE)
- if (NULL == internalLocaleValues)
- {
- TrioSetLocale();
- }
-#endif
- trio_copy_max(internalGrouping,
- sizeof(internalGrouping),
- grouping);
-}
-
-
-/*************************************************************************
- *
- * SCANNING
- *
- ************************************************************************/
-
-/*************************************************************************
- * TrioSkipWhitespaces
- */
-TRIO_PRIVATE int
-TrioSkipWhitespaces
-TRIO_ARGS1((self),
- trio_class_t *self)
-{
- int ch;
-
- ch = self->current;
- while (isspace(ch))
- {
- self->InStream(self, &ch);
- }
- return ch;
-}
-
-/*************************************************************************
- * TrioGetCollation
- */
-#if TRIO_EXTENSION
-TRIO_PRIVATE void
-TrioGetCollation(TRIO_NOARGS)
-{
- int i;
- int j;
- int k;
- char first[2];
- char second[2];
-
- /* This is computationally expensive */
- first[1] = NIL;
- second[1] = NIL;
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- {
- k = 0;
- first[0] = (char)i;
- for (j = 0; j < MAX_CHARACTER_CLASS; j++)
- {
- second[0] = (char)j;
- if (trio_equal_locale(first, second))
- internalCollationArray[i][k++] = (char)j;
- }
- internalCollationArray[i][k] = NIL;
- }
-}
-#endif
-
-/*************************************************************************
- * TrioGetCharacterClass
- *
- * FIXME:
- * multibyte
- */
-TRIO_PRIVATE int
-TrioGetCharacterClass
-TRIO_ARGS4((format, indexPointer, flagsPointer, characterclass),
- TRIO_CONST char *format,
- int *indexPointer,
- trio_flags_t *flagsPointer,
- int *characterclass)
-{
- int index = *indexPointer;
- int i;
- char ch;
- char range_begin;
- char range_end;
-
- *flagsPointer &= ~FLAGS_EXCLUDE;
-
- if (format[index] == QUALIFIER_CIRCUMFLEX)
- {
- *flagsPointer |= FLAGS_EXCLUDE;
- index++;
- }
- /*
- * If the ungroup character is at the beginning of the scanlist,
- * it will be part of the class, and a second ungroup character
- * must follow to end the group.
- */
- if (format[index] == SPECIFIER_UNGROUP)
- {
- characterclass[(int)SPECIFIER_UNGROUP]++;
- index++;
- }
- /*
- * Minus is used to specify ranges. To include minus in the class,
- * it must be at the beginning of the list
- */
- if (format[index] == QUALIFIER_MINUS)
- {
- characterclass[(int)QUALIFIER_MINUS]++;
- index++;
- }
- /* Collect characters */
- for (ch = format[index];
- (ch != SPECIFIER_UNGROUP) && (ch != NIL);
- ch = format[++index])
- {
- switch (ch)
- {
- case QUALIFIER_MINUS: /* Scanlist ranges */
-
- /*
- * Both C99 and UNIX98 describes ranges as implementation-
- * defined.
- *
- * We support the following behaviour (although this may
- * change as we become wiser)
- * - only increasing ranges, ie. [a-b] but not [b-a]
- * - transitive ranges, ie. [a-b-c] == [a-c]
- * - trailing minus, ie. [a-] is interpreted as an 'a'
- * and a '-'
- * - duplicates (although we can easily convert these
- * into errors)
- */
- range_begin = format[index - 1];
- range_end = format[++index];
- if (range_end == SPECIFIER_UNGROUP)
- {
- /* Trailing minus is included */
- characterclass[(int)ch]++;
- ch = range_end;
- break; /* for */
- }
- if (range_end == NIL)
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- if (range_begin > range_end)
- return TRIO_ERROR_RETURN(TRIO_ERANGE, index);
-
- for (i = (int)range_begin; i <= (int)range_end; i++)
- characterclass[i]++;
-
- ch = range_end;
- break;
-
-#if TRIO_EXTENSION
-
- case SPECIFIER_GROUP:
-
- switch (format[index + 1])
- {
- case QUALIFIER_DOT: /* Collating symbol */
- /*
- * FIXME: This will be easier to implement when multibyte
- * characters have been implemented. Until now, we ignore
- * this feature.
- */
- for (i = index + 2; ; i++)
- {
- if (format[i] == NIL)
- /* Error in syntax */
- return -1;
- else if (format[i] == QUALIFIER_DOT)
- break; /* for */
- }
- if (format[++i] != SPECIFIER_UNGROUP)
- return -1;
-
- index = i;
- break;
-
- case QUALIFIER_EQUAL: /* Equivalence class expressions */
- {
- unsigned int j;
- unsigned int k;
-
- if (internalCollationUnconverted)
- {
- /* Lazy evaluation of collation array */
- TrioGetCollation();
- internalCollationUnconverted = FALSE;
- }
- for (i = index + 2; ; i++)
- {
- if (format[i] == NIL)
- /* Error in syntax */
- return -1;
- else if (format[i] == QUALIFIER_EQUAL)
- break; /* for */
- else
- {
- /* Mark any equivalent character */
- k = (unsigned int)format[i];
- for (j = 0; internalCollationArray[k][j] != NIL; j++)
- characterclass[(int)internalCollationArray[k][j]]++;
- }
- }
- if (format[++i] != SPECIFIER_UNGROUP)
- return -1;
-
- index = i;
- }
- break;
-
- case QUALIFIER_COLON: /* Character class expressions */
-
- if (trio_equal_max(CLASS_ALNUM, sizeof(CLASS_ALNUM) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (isalnum(i))
- characterclass[i]++;
- index += sizeof(CLASS_ALNUM) - 1;
- }
- else if (trio_equal_max(CLASS_ALPHA, sizeof(CLASS_ALPHA) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (isalpha(i))
- characterclass[i]++;
- index += sizeof(CLASS_ALPHA) - 1;
- }
- else if (trio_equal_max(CLASS_CNTRL, sizeof(CLASS_CNTRL) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (iscntrl(i))
- characterclass[i]++;
- index += sizeof(CLASS_CNTRL) - 1;
- }
- else if (trio_equal_max(CLASS_DIGIT, sizeof(CLASS_DIGIT) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (isdigit(i))
- characterclass[i]++;
- index += sizeof(CLASS_DIGIT) - 1;
- }
- else if (trio_equal_max(CLASS_GRAPH, sizeof(CLASS_GRAPH) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (isgraph(i))
- characterclass[i]++;
- index += sizeof(CLASS_GRAPH) - 1;
- }
- else if (trio_equal_max(CLASS_LOWER, sizeof(CLASS_LOWER) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (islower(i))
- characterclass[i]++;
- index += sizeof(CLASS_LOWER) - 1;
- }
- else if (trio_equal_max(CLASS_PRINT, sizeof(CLASS_PRINT) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (isprint(i))
- characterclass[i]++;
- index += sizeof(CLASS_PRINT) - 1;
- }
- else if (trio_equal_max(CLASS_PUNCT, sizeof(CLASS_PUNCT) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (ispunct(i))
- characterclass[i]++;
- index += sizeof(CLASS_PUNCT) - 1;
- }
- else if (trio_equal_max(CLASS_SPACE, sizeof(CLASS_SPACE) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (isspace(i))
- characterclass[i]++;
- index += sizeof(CLASS_SPACE) - 1;
- }
- else if (trio_equal_max(CLASS_UPPER, sizeof(CLASS_UPPER) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (isupper(i))
- characterclass[i]++;
- index += sizeof(CLASS_UPPER) - 1;
- }
- else if (trio_equal_max(CLASS_XDIGIT, sizeof(CLASS_XDIGIT) - 1,
- &format[index]))
- {
- for (i = 0; i < MAX_CHARACTER_CLASS; i++)
- if (isxdigit(i))
- characterclass[i]++;
- index += sizeof(CLASS_XDIGIT) - 1;
- }
- else
- {
- characterclass[(int)ch]++;
- }
- break;
-
- default:
- characterclass[(int)ch]++;
- break;
- }
- break;
-
-#endif /* TRIO_EXTENSION */
-
- default:
- characterclass[(int)ch]++;
- break;
- }
- }
- return 0;
-}
-
-/*************************************************************************
- * TrioReadNumber
- *
- * We implement our own number conversion in preference of strtol and
- * strtoul, because we must handle 'long long' and thousand separators.
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadNumber
-TRIO_ARGS5((self, target, flags, width, base),
- trio_class_t *self,
- trio_uintmax_t *target,
- trio_flags_t flags,
- int width,
- int base)
-{
- trio_uintmax_t number = 0;
- int digit;
- int count;
- BOOLEAN_T isNegative = FALSE;
- BOOLEAN_T gotNumber = FALSE;
- int j;
-
- assert(VALID(self));
- assert(VALID(self->InStream));
- assert((base >= MIN_BASE && base <= MAX_BASE) || (base == NO_BASE));
-
- if (internalDigitsUnconverted)
- {
- /* Lazy evaluation of digits array */
- memset(internalDigitArray, -1, sizeof(internalDigitArray));
- for (j = 0; j < (int)sizeof(internalDigitsLower) - 1; j++)
- {
- internalDigitArray[(int)internalDigitsLower[j]] = j;
- internalDigitArray[(int)internalDigitsUpper[j]] = j;
- }
- internalDigitsUnconverted = FALSE;
- }
-
- TrioSkipWhitespaces(self);
-
- if (!(flags & FLAGS_UNSIGNED))
- {
- /* Leading sign */
- if (self->current == '+')
- {
- self->InStream(self, NULL);
- }
- else if (self->current == '-')
- {
- self->InStream(self, NULL);
- isNegative = TRUE;
- }
- }
-
- count = self->processed;
-
- if (flags & FLAGS_ALTERNATIVE)
- {
- switch (base)
- {
- case NO_BASE:
- case BASE_OCTAL:
- case BASE_HEX:
- case BASE_BINARY:
- if (self->current == '0')
- {
- self->InStream(self, NULL);
- if (self->current)
- {
- if ((base == BASE_HEX) &&
- (trio_to_upper(self->current) == 'X'))
- {
- self->InStream(self, NULL);
- }
- else if ((base == BASE_BINARY) &&
- (trio_to_upper(self->current) == 'B'))
- {
- self->InStream(self, NULL);
- }
- }
- }
- else
- return FALSE;
- break;
- default:
- break;
- }
- }
-
- while (((width == NO_WIDTH) || (self->processed - count < width)) &&
- (! ((self->current == EOF) || isspace(self->current))))
- {
- if (isascii(self->current))
- {
- digit = internalDigitArray[self->current];
- /* Abort if digit is not allowed in the specified base */
- if ((digit == -1) || (digit >= base))
- break;
- }
- else if (flags & FLAGS_QUOTE)
- {
- /* Compare with thousands separator */
- for (j = 0; internalThousandSeparator[j] && self->current; j++)
- {
- if (internalThousandSeparator[j] != self->current)
- break;
-
- self->InStream(self, NULL);
- }
- if (internalThousandSeparator[j])
- break; /* Mismatch */
- else
- continue; /* Match */
- }
- else
- break;
-
- number *= base;
- number += digit;
- gotNumber = TRUE; /* we need at least one digit */
-
- self->InStream(self, NULL);
- }
-
- /* Was anything read at all? */
- if (!gotNumber)
- return FALSE;
-
- if (target)
- *target = (isNegative) ? -((trio_intmax_t)number) : number;
- return TRUE;
-}
-
-/*************************************************************************
- * TrioReadChar
- */
-TRIO_PRIVATE int
-TrioReadChar
-TRIO_ARGS4((self, target, flags, width),
- trio_class_t *self,
- char *target,
- trio_flags_t flags,
- int width)
-{
- int i;
- char ch;
- trio_uintmax_t number;
-
- assert(VALID(self));
- assert(VALID(self->InStream));
-
- for (i = 0;
- (self->current != EOF) && (i < width);
- i++)
- {
- ch = (char)self->current;
- self->InStream(self, NULL);
- if ((flags & FLAGS_ALTERNATIVE) && (ch == CHAR_BACKSLASH))
- {
- switch (self->current)
- {
- case '\\': ch = '\\'; break;
- case 'a': ch = '\007'; break;
- case 'b': ch = '\b'; break;
- case 'f': ch = '\f'; break;
- case 'n': ch = '\n'; break;
- case 'r': ch = '\r'; break;
- case 't': ch = '\t'; break;
- case 'v': ch = '\v'; break;
- default:
- if (isdigit(self->current))
- {
- /* Read octal number */
- if (!TrioReadNumber(self, &number, 0, 3, BASE_OCTAL))
- return 0;
- ch = (char)number;
- }
- else if (trio_to_upper(self->current) == 'X')
- {
- /* Read hexadecimal number */
- self->InStream(self, NULL);
- if (!TrioReadNumber(self, &number, 0, 2, BASE_HEX))
- return 0;
- ch = (char)number;
- }
- else
- {
- ch = (char)self->current;
- }
- break;
- }
- }
-
- if (target)
- target[i] = ch;
- }
- return i + 1;
-}
-
-/*************************************************************************
- * TrioReadString
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadString
-TRIO_ARGS4((self, target, flags, width),
- trio_class_t *self,
- char *target,
- trio_flags_t flags,
- int width)
-{
- int i;
-
- assert(VALID(self));
- assert(VALID(self->InStream));
-
- TrioSkipWhitespaces(self);
-
- /*
- * Continue until end of string is reached, a whitespace is encountered,
- * or width is exceeded
- */
- for (i = 0;
- ((width == NO_WIDTH) || (i < width)) &&
- (! ((self->current == EOF) || isspace(self->current)));
- i++)
- {
- if (TrioReadChar(self, (target ? &target[i] : 0), flags, 1) == 0)
- break; /* for */
- }
- if (target)
- target[i] = NIL;
- return TRUE;
-}
-
-/*************************************************************************
- * TrioReadWideChar
- */
-#if TRIO_WIDECHAR
-TRIO_PRIVATE int
-TrioReadWideChar
-TRIO_ARGS4((self, target, flags, width),
- trio_class_t *self,
- trio_wchar_t *target,
- trio_flags_t flags,
- int width)
-{
- int i;
- int j;
- int size;
- int amount = 0;
- trio_wchar_t wch;
- char buffer[MB_LEN_MAX + 1];
-
- assert(VALID(self));
- assert(VALID(self->InStream));
-
- for (i = 0;
- (self->current != EOF) && (i < width);
- i++)
- {
- if (isascii(self->current))
- {
- if (TrioReadChar(self, buffer, flags, 1) == 0)
- return 0;
- buffer[1] = NIL;
- }
- else
- {
- /*
- * Collect a multibyte character, by enlarging buffer until
- * it contains a fully legal multibyte character, or the
- * buffer is full.
- */
- j = 0;
- do
- {
- buffer[j++] = (char)self->current;
- buffer[j] = NIL;
- self->InStream(self, NULL);
- }
- while ((j < (int)sizeof(buffer)) && (mblen(buffer, (size_t)j) != j));
- }
- if (target)
- {
- size = mbtowc(&wch, buffer, sizeof(buffer));
- if (size > 0)
- target[i] = wch;
- }
- amount += size;
- self->InStream(self, NULL);
- }
- return amount;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioReadWideString
- */
-#if TRIO_WIDECHAR
-TRIO_PRIVATE BOOLEAN_T
-TrioReadWideString
-TRIO_ARGS4((self, target, flags, width),
- trio_class_t *self,
- trio_wchar_t *target,
- trio_flags_t flags,
- int width)
-{
- int i;
- int size;
-
- assert(VALID(self));
- assert(VALID(self->InStream));
-
- TrioSkipWhitespaces(self);
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- (void)mblen(NULL, 0);
-#endif
-
- /*
- * Continue until end of string is reached, a whitespace is encountered,
- * or width is exceeded
- */
- for (i = 0;
- ((width == NO_WIDTH) || (i < width)) &&
- (! ((self->current == EOF) || isspace(self->current)));
- )
- {
- size = TrioReadWideChar(self, &target[i], flags, 1);
- if (size == 0)
- break; /* for */
-
- i += size;
- }
- if (target)
- target[i] = WCONST('\0');
- return TRUE;
-}
-#endif /* TRIO_WIDECHAR */
-
-/*************************************************************************
- * TrioReadGroup
- *
- * FIXME: characterclass does not work with multibyte characters
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadGroup
-TRIO_ARGS5((self, target, characterclass, flags, width),
- trio_class_t *self,
- char *target,
- int *characterclass,
- trio_flags_t flags,
- int width)
-{
- int ch;
- int i;
-
- assert(VALID(self));
- assert(VALID(self->InStream));
-
- ch = self->current;
- for (i = 0;
- ((width == NO_WIDTH) || (i < width)) &&
- (! ((ch == EOF) ||
- (((flags & FLAGS_EXCLUDE) != 0) ^ (characterclass[ch] == 0))));
- i++)
- {
- if (target)
- target[i] = (char)ch;
- self->InStream(self, &ch);
- }
-
- if (target)
- target[i] = NIL;
- return TRUE;
-}
-
-/*************************************************************************
- * TrioReadDouble
- *
- * FIXME:
- * add long double
- * handle base
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadDouble
-TRIO_ARGS4((self, target, flags, width),
- trio_class_t *self,
- trio_pointer_t target,
- trio_flags_t flags,
- int width)
-{
- int ch;
- char doubleString[512];
- int index = 0;
- int start;
- int j;
- BOOLEAN_T isHex = FALSE;
-
- doubleString[0] = 0;
-
- if ((width == NO_WIDTH) || (width > (int)sizeof(doubleString) - 1))
- width = sizeof(doubleString) - 1;
-
- TrioSkipWhitespaces(self);
-
- /*
- * Read entire double number from stream. trio_to_double requires
- * a string as input, but InStream can be anything, so we have to
- * collect all characters.
- */
- ch = self->current;
- if ((ch == '+') || (ch == '-'))
- {
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- width--;
- }
-
- start = index;
- switch (ch)
- {
- case 'n':
- case 'N':
- /* Not-a-number */
- if (index != 0)
- break;
- /* FALLTHROUGH */
- case 'i':
- case 'I':
- /* Infinity */
- while (isalpha(ch) && (index - start < width))
- {
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- }
- doubleString[index] = NIL;
-
- /* Case insensitive string comparison */
- if (trio_equal(&doubleString[start], INFINITE_UPPER) ||
- trio_equal(&doubleString[start], LONG_INFINITE_UPPER))
- {
- if (flags & FLAGS_LONGDOUBLE)
- {
- if ((start == 1) && (doubleString[0] == '-'))
- {
- *((trio_long_double_t *)target) = trio_ninf();
- }
- else
- {
- *((trio_long_double_t *)target) = trio_pinf();
- }
- }
- else
- {
- if ((start == 1) && (doubleString[0] == '-'))
- {
- *((double *)target) = trio_ninf();
- }
- else
- {
- *((double *)target) = trio_pinf();
- }
- }
- return TRUE;
- }
- if (trio_equal(doubleString, NAN_UPPER))
- {
- /* NaN must not have a preceeding + nor - */
- if (flags & FLAGS_LONGDOUBLE)
- {
- *((trio_long_double_t *)target) = trio_nan();
- }
- else
- {
- *((double *)target) = trio_nan();
- }
- return TRUE;
- }
- return FALSE;
-
- case '0':
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- if (trio_to_upper(ch) == 'X')
- {
- isHex = TRUE;
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- }
- break;
-
- default:
- break;
- }
-
- while ((ch != EOF) && (index - start < width))
- {
- /* Integer part */
- if (isHex ? isxdigit(ch) : isdigit(ch))
- {
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- }
- else if (flags & FLAGS_QUOTE)
- {
- /* Compare with thousands separator */
- for (j = 0; internalThousandSeparator[j] && self->current; j++)
- {
- if (internalThousandSeparator[j] != self->current)
- break;
-
- self->InStream(self, &ch);
- }
- if (internalThousandSeparator[j])
- break; /* Mismatch */
- else
- continue; /* Match */
- }
- else
- break; /* while */
- }
- if (ch == '.')
- {
- /* Decimal part */
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- while ((isHex ? isxdigit(ch) : isdigit(ch)) &&
- (index - start < width))
- {
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- }
- if (isHex ? (trio_to_upper(ch) == 'P') : (trio_to_upper(ch) == 'E'))
- {
- /* Exponent */
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- if ((ch == '+') || (ch == '-'))
- {
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- }
- while (isdigit(ch) && (index - start < width))
- {
- doubleString[index++] = (char)ch;
- self->InStream(self, &ch);
- }
- }
- }
-
- if ((index == start) || (*doubleString == NIL))
- return FALSE;
-
- doubleString[index] = 0;
-
- if (flags & FLAGS_LONGDOUBLE)
- {
- *((trio_long_double_t *)target) = trio_to_long_double(doubleString, NULL);
- }
- else
- {
- *((double *)target) = trio_to_double(doubleString, NULL);
- }
- return TRUE;
-}
-
-/*************************************************************************
- * TrioReadPointer
- */
-TRIO_PRIVATE BOOLEAN_T
-TrioReadPointer
-TRIO_ARGS3((self, target, flags),
- trio_class_t *self,
- trio_pointer_t *target,
- trio_flags_t flags)
-{
- trio_uintmax_t number;
- char buffer[sizeof(internalNullString)];
-
- flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);
-
- if (TrioReadNumber(self,
- &number,
- flags,
- POINTER_WIDTH,
- BASE_HEX))
- {
- /*
- * The strange assignment of number is a workaround for a compiler
- * warning
- */
- if (target)
- *target = (char *)0 + number;
- return TRUE;
- }
- else if (TrioReadString(self,
- (flags & FLAGS_IGNORE)
- ? NULL
- : buffer,
- 0,
- sizeof(internalNullString) - 1))
- {
- if (trio_equal_case(buffer, internalNullString))
- {
- if (target)
- *target = NULL;
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/*************************************************************************
- * TrioScanProcess
- */
-TRIO_PRIVATE int
-TrioScanProcess
-TRIO_ARGS3((data, format, parameters),
- trio_class_t *data,
- TRIO_CONST char *format,
- trio_parameter_t *parameters)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- int charlen;
- int cnt;
-#endif
- int assignment;
- int ch;
- int index; /* Index of format string */
- int i; /* Index of current parameter */
- trio_flags_t flags;
- int width;
- int base;
- trio_pointer_t pointer;
-
- assignment = 0;
- i = 0;
- index = 0;
- data->InStream(data, &ch);
-
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- (void)mblen(NULL, 0);
-#endif
-
- while (format[index])
- {
-#if defined(TRIO_COMPILER_SUPPORTS_MULTIBYTE)
- if (! isascii(format[index]))
- {
- charlen = mblen(&format[index], MB_LEN_MAX);
- if (charlen != -1)
- {
- /* Compare multibyte characters in format string */
- for (cnt = 0; cnt < charlen - 1; cnt++)
- {
- if (ch != format[index + cnt])
- {
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- }
- data->InStream(data, &ch);
- }
- continue; /* while characters left in formatting string */
- }
- }
-#endif /* TRIO_COMPILER_SUPPORTS_MULTIBYTE */
-
- if ((EOF == ch) && (parameters[i].type != FORMAT_COUNT))
- {
- return (assignment > 0) ? assignment : EOF;
- }
-
- if (CHAR_IDENTIFIER == format[index])
- {
- if (CHAR_IDENTIFIER == format[index + 1])
- {
- /* Two % in format matches one % in input stream */
- if (CHAR_IDENTIFIER == ch)
- {
- data->InStream(data, &ch);
- index += 2;
- continue; /* while format chars left */
- }
- else
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- }
-
- /* Skip the parameter entries */
- while (parameters[i].type == FORMAT_PARAMETER)
- i++;
-
- flags = parameters[i].flags;
- /* Find width */
- width = parameters[i].width;
- if (flags & FLAGS_WIDTH_PARAMETER)
- {
- /* Get width from parameter list */
- width = (int)parameters[width].data.number.as_signed;
- }
- /* Find base */
- base = parameters[i].base;
- if (flags & FLAGS_BASE_PARAMETER)
- {
- /* Get base from parameter list */
- base = (int)parameters[base].data.number.as_signed;
- }
-
- switch (parameters[i].type)
- {
- case FORMAT_INT:
- {
- trio_uintmax_t number;
-
- if (0 == base)
- base = BASE_DECIMAL;
-
- if (!TrioReadNumber(data,
- &number,
- flags,
- width,
- base))
- return assignment;
-
- if (!(flags & FLAGS_IGNORE))
- {
- assignment++;
-
- pointer = parameters[i].data.pointer;
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
- if (flags & FLAGS_SIZE_T)
- *(size_t *)pointer = (size_t)number;
- else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
- if (flags & FLAGS_PTRDIFF_T)
- *(ptrdiff_t *)pointer = (ptrdiff_t)number;
- else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
- if (flags & FLAGS_INTMAX_T)
- *(trio_intmax_t *)pointer = (trio_intmax_t)number;
- else
-#endif
- if (flags & FLAGS_QUAD)
- *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)number;
- else if (flags & FLAGS_LONG)
- *(long int *)pointer = (long int)number;
- else if (flags & FLAGS_SHORT)
- *(short int *)pointer = (short int)number;
- else
- *(int *)pointer = (int)number;
- }
- }
- break; /* FORMAT_INT */
-
- case FORMAT_STRING:
-#if TRIO_WIDECHAR
- if (flags & FLAGS_WIDECHAR)
- {
- if (!TrioReadWideString(data,
- (flags & FLAGS_IGNORE)
- ? NULL
- : parameters[i].data.wstring,
- flags,
- width))
- return assignment;
- }
- else
-#endif
- {
- if (!TrioReadString(data,
- (flags & FLAGS_IGNORE)
- ? NULL
- : parameters[i].data.string,
- flags,
- width))
- return assignment;
- }
- if (!(flags & FLAGS_IGNORE))
- assignment++;
- break; /* FORMAT_STRING */
-
- case FORMAT_DOUBLE:
- {
- trio_pointer_t pointer;
-
- if (flags & FLAGS_IGNORE)
- {
- pointer = NULL;
- }
- else
- {
- pointer = (flags & FLAGS_LONGDOUBLE)
- ? (trio_pointer_t)parameters[i].data.longdoublePointer
- : (trio_pointer_t)parameters[i].data.doublePointer;
- }
- if (!TrioReadDouble(data, pointer, flags, width))
- {
- return assignment;
- }
- if (!(flags & FLAGS_IGNORE))
- {
- assignment++;
- }
- break; /* FORMAT_DOUBLE */
- }
- case FORMAT_GROUP:
- {
- int characterclass[MAX_CHARACTER_CLASS + 1];
- int rc;
-
- /* Skip over modifiers */
- while (format[index] != SPECIFIER_GROUP)
- {
- index++;
- }
- /* Skip over group specifier */
- index++;
-
- memset(characterclass, 0, sizeof(characterclass));
- rc = TrioGetCharacterClass(format,
- &index,
- &flags,
- characterclass);
- if (rc < 0)
- return rc;
-
- if (!TrioReadGroup(data,
- (flags & FLAGS_IGNORE)
- ? NULL
- : parameters[i].data.string,
- characterclass,
- flags,
- parameters[i].width))
- return assignment;
- if (!(flags & FLAGS_IGNORE))
- assignment++;
- }
- break; /* FORMAT_GROUP */
-
- case FORMAT_COUNT:
- pointer = parameters[i].data.pointer;
- if (NULL != pointer)
- {
- int count = data->committed;
- if (ch != EOF)
- count--; /* a character is read, but is not consumed yet */
-#if defined(QUALIFIER_SIZE_T) || defined(QUALIFIER_SIZE_T_UPPER)
- if (flags & FLAGS_SIZE_T)
- *(size_t *)pointer = (size_t)count;
- else
-#endif
-#if defined(QUALIFIER_PTRDIFF_T)
- if (flags & FLAGS_PTRDIFF_T)
- *(ptrdiff_t *)pointer = (ptrdiff_t)count;
- else
-#endif
-#if defined(QUALIFIER_INTMAX_T)
- if (flags & FLAGS_INTMAX_T)
- *(trio_intmax_t *)pointer = (trio_intmax_t)count;
- else
-#endif
- if (flags & FLAGS_QUAD)
- {
- *(trio_ulonglong_t *)pointer = (trio_ulonglong_t)count;
- }
- else if (flags & FLAGS_LONG)
- {
- *(long int *)pointer = (long int)count;
- }
- else if (flags & FLAGS_SHORT)
- {
- *(short int *)pointer = (short int)count;
- }
- else
- {
- *(int *)pointer = (int)count;
- }
- }
- break; /* FORMAT_COUNT */
-
- case FORMAT_CHAR:
-#if TRIO_WIDECHAR
- if (flags & FLAGS_WIDECHAR)
- {
- if (TrioReadWideChar(data,
- (flags & FLAGS_IGNORE)
- ? NULL
- : parameters[i].data.wstring,
- flags,
- (width == NO_WIDTH) ? 1 : width) == 0)
- return assignment;
- }
- else
-#endif
- {
- if (TrioReadChar(data,
- (flags & FLAGS_IGNORE)
- ? NULL
- : parameters[i].data.string,
- flags,
- (width == NO_WIDTH) ? 1 : width) == 0)
- return assignment;
- }
- if (!(flags & FLAGS_IGNORE))
- assignment++;
- break; /* FORMAT_CHAR */
-
- case FORMAT_POINTER:
- if (!TrioReadPointer(data,
- (flags & FLAGS_IGNORE)
- ? NULL
- : (trio_pointer_t *)parameters[i].data.pointer,
- flags))
- return assignment;
- if (!(flags & FLAGS_IGNORE))
- assignment++;
- break; /* FORMAT_POINTER */
-
- case FORMAT_PARAMETER:
- break; /* FORMAT_PARAMETER */
-
- default:
- return TRIO_ERROR_RETURN(TRIO_EINVAL, index);
- }
- ch = data->current;
- index = parameters[i].indexAfterSpecifier;
- i++;
- }
- else /* Not an % identifier */
- {
- if (isspace((int)format[index]))
- {
- /* Whitespaces may match any amount of whitespaces */
- ch = TrioSkipWhitespaces(data);
- }
- else if (ch == format[index])
- {
- data->InStream(data, &ch);
- }
- else
- return assignment;
-
- index++;
- }
- }
- return assignment;
-}
-
-/*************************************************************************
- * TrioScan
- */
-TRIO_PRIVATE int
-TrioScan
-TRIO_ARGS6((source, sourceSize, InStream, format, arglist, argarray),
- trio_pointer_t source,
- size_t sourceSize,
- void (*InStream) TRIO_PROTO((trio_class_t *, int *)),
- TRIO_CONST char *format,
- TRIO_VA_LIST_PTR arglist,
- trio_pointer_t *argarray)
-{
- int status;
- trio_parameter_t parameters[MAX_PARAMETERS];
- trio_class_t data;
-
- assert(VALID(InStream));
- assert(VALID(format));
-
- memset(&data, 0, sizeof(data));
- data.InStream = InStream;
- data.location = (trio_pointer_t)source;
- data.max = sourceSize;
- data.error = 0;
-
-#if defined(USE_LOCALE)
- if (NULL == internalLocaleValues)
- {
- TrioSetLocale();
- }
-#endif
-
- status = TrioParse(TYPE_SCAN, format, parameters, arglist, argarray);
- if (status < 0)
- return status;
-
- status = TrioScanProcess(&data, format, parameters);
- if (data.error != 0)
- {
- status = data.error;
- }
- return status;
-}
-
-/*************************************************************************
- * TrioInStreamFile
- */
-TRIO_PRIVATE void
-TrioInStreamFile
-TRIO_ARGS2((self, intPointer),
- trio_class_t *self,
- int *intPointer)
-{
- FILE *file;
-
- assert(VALID(self));
- assert(VALID(self->location));
- assert(VALID(file));
-
- file = (FILE *)self->location;
-
- self->current = fgetc(file);
- if (self->current == EOF)
- {
- self->error = (ferror(file))
- ? TRIO_ERROR_RETURN(TRIO_ERRNO, 0)
- : TRIO_ERROR_RETURN(TRIO_EOF, 0);
- }
- else
- {
- self->processed++;
- self->committed++;
- }
-
- if (VALID(intPointer))
- {
- *intPointer = self->current;
- }
-}
-
-/*************************************************************************
- * TrioInStreamFileDescriptor
- */
-TRIO_PRIVATE void
-TrioInStreamFileDescriptor
-TRIO_ARGS2((self, intPointer),
- trio_class_t *self,
- int *intPointer)
-{
- int fd;
- int size;
- unsigned char input;
-
- assert(VALID(self));
- assert(VALID(self->location));
-
- fd = *((int *)self->location);
-
- size = read(fd, &input, sizeof(char));
- if (size == -1)
- {
- self->error = TRIO_ERROR_RETURN(TRIO_ERRNO, 0);
- self->current = EOF;
- }
- else
- {
- self->current = (size == 0) ? EOF : input;
- }
- if (self->current != EOF)
- {
- self->committed++;
- self->processed++;
- }
-
- if (VALID(intPointer))
- {
- *intPointer = self->current;
- }
-}
-
-/*************************************************************************
- * TrioInStreamCustom
- */
-TRIO_PRIVATE void
-TrioInStreamCustom
-TRIO_ARGS2((self, intPointer),
- trio_class_t *self,
- int *intPointer)
-{
- trio_custom_t *data;
-
- assert(VALID(self));
- assert(VALID(self->location));
-
- data = (trio_custom_t *)self->location;
-
- self->current = (data->stream.in == NULL)
- ? NIL
- : (data->stream.in)(data->closure);
-
- if (self->current == NIL)
- {
- self->current = EOF;
- }
- else
- {
- self->processed++;
- self->committed++;
- }
-
- if (VALID(intPointer))
- {
- *intPointer = self->current;
- }
-}
-
-/*************************************************************************
- * TrioInStreamString
- */
-TRIO_PRIVATE void
-TrioInStreamString
-TRIO_ARGS2((self, intPointer),
- trio_class_t *self,
- int *intPointer)
-{
- unsigned char **buffer;
-
- assert(VALID(self));
- assert(VALID(self->location));
-
- buffer = (unsigned char **)self->location;
- self->current = (*buffer)[0];
- if (self->current == NIL)
- {
- self->current = EOF;
- }
- else
- {
- (*buffer)++;
- self->processed++;
- self->committed++;
- }
-
- if (VALID(intPointer))
- {
- *intPointer = self->current;
- }
-}
-
-/*************************************************************************
- *
- * Formatted scanning functions
- *
- ************************************************************************/
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_scanf.h"
-#endif
-/** @addtogroup Scanf
- @{
-*/
-
-/*************************************************************************
- * scanf
- */
-
-/**
- Scan characters from standard input stream.
-
- @param format Formatting string.
- @param ... Arguments.
- @return Number of scanned characters.
- */
-TRIO_PUBLIC int
-trio_scanf
-TRIO_VARGS2((format, va_alist),
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioScan((trio_pointer_t)stdin, 0,
- TrioInStreamFile,
- format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-TRIO_PUBLIC int
-trio_vscanf
-TRIO_ARGS2((format, args),
- TRIO_CONST char *format,
- va_list args)
-{
- assert(VALID(format));
-
- return TrioScan((trio_pointer_t)stdin, 0,
- TrioInStreamFile,
- format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_scanfv
-TRIO_ARGS2((format, args),
- TRIO_CONST char *format,
- trio_pointer_t *args)
-{
- assert(VALID(format));
-
- return TrioScan((trio_pointer_t)stdin, 0,
- TrioInStreamFile,
- format, NULL, args);
-}
-
-/*************************************************************************
- * fscanf
- */
-TRIO_PUBLIC int
-trio_fscanf
-TRIO_VARGS3((file, format, va_alist),
- FILE *file,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(file));
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioScan((trio_pointer_t)file, 0,
- TrioInStreamFile,
- format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-TRIO_PUBLIC int
-trio_vfscanf
-TRIO_ARGS3((file, format, args),
- FILE *file,
- TRIO_CONST char *format,
- va_list args)
-{
- assert(VALID(file));
- assert(VALID(format));
-
- return TrioScan((trio_pointer_t)file, 0,
- TrioInStreamFile,
- format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_fscanfv
-TRIO_ARGS3((file, format, args),
- FILE *file,
- TRIO_CONST char *format,
- trio_pointer_t *args)
-{
- assert(VALID(file));
- assert(VALID(format));
-
- return TrioScan((trio_pointer_t)file, 0,
- TrioInStreamFile,
- format, NULL, args);
-}
-
-/*************************************************************************
- * dscanf
- */
-TRIO_PUBLIC int
-trio_dscanf
-TRIO_VARGS3((fd, format, va_alist),
- int fd,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioScan((trio_pointer_t)&fd, 0,
- TrioInStreamFileDescriptor,
- format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-TRIO_PUBLIC int
-trio_vdscanf
-TRIO_ARGS3((fd, format, args),
- int fd,
- TRIO_CONST char *format,
- va_list args)
-{
- assert(VALID(format));
-
- return TrioScan((trio_pointer_t)&fd, 0,
- TrioInStreamFileDescriptor,
- format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_dscanfv
-TRIO_ARGS3((fd, format, args),
- int fd,
- TRIO_CONST char *format,
- trio_pointer_t *args)
-{
- assert(VALID(format));
-
- return TrioScan((trio_pointer_t)&fd, 0,
- TrioInStreamFileDescriptor,
- format, NULL, args);
-}
-
-/*************************************************************************
- * cscanf
- */
-TRIO_PUBLIC int
-trio_cscanf
-TRIO_VARGS4((stream, closure, format, va_alist),
- trio_instream_t stream,
- trio_pointer_t closure,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
- trio_custom_t data;
-
- assert(VALID(stream));
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- data.stream.in = stream;
- data.closure = closure;
- status = TrioScan(&data, 0, TrioInStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-TRIO_PUBLIC int
-trio_vcscanf
-TRIO_ARGS4((stream, closure, format, args),
- trio_instream_t stream,
- trio_pointer_t closure,
- TRIO_CONST char *format,
- va_list args)
-{
- trio_custom_t data;
-
- assert(VALID(stream));
- assert(VALID(format));
-
- data.stream.in = stream;
- data.closure = closure;
- return TrioScan(&data, 0, TrioInStreamCustom, format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_cscanfv
-TRIO_ARGS4((stream, closure, format, args),
- trio_instream_t stream,
- trio_pointer_t closure,
- TRIO_CONST char *format,
- trio_pointer_t *args)
-{
- trio_custom_t data;
-
- assert(VALID(stream));
- assert(VALID(format));
-
- data.stream.in = stream;
- data.closure = closure;
- return TrioScan(&data, 0, TrioInStreamCustom, format, NULL, args);
-}
-
-/*************************************************************************
- * sscanf
- */
-TRIO_PUBLIC int
-trio_sscanf
-TRIO_VARGS3((buffer, format, va_alist),
- TRIO_CONST char *buffer,
- TRIO_CONST char *format,
- TRIO_VA_DECL)
-{
- int status;
- va_list args;
-
- assert(VALID(buffer));
- assert(VALID(format));
-
- TRIO_VA_START(args, format);
- status = TrioScan((trio_pointer_t)&buffer, 0,
- TrioInStreamString,
- format, TRIO_VA_LIST_ADDR(args), NULL);
- TRIO_VA_END(args);
- return status;
-}
-
-TRIO_PUBLIC int
-trio_vsscanf
-TRIO_ARGS3((buffer, format, args),
- TRIO_CONST char *buffer,
- TRIO_CONST char *format,
- va_list args)
-{
- assert(VALID(buffer));
- assert(VALID(format));
-
- return TrioScan((trio_pointer_t)&buffer, 0,
- TrioInStreamString,
- format, TRIO_VA_LIST_ADDR(args), NULL);
-}
-
-TRIO_PUBLIC int
-trio_sscanfv
-TRIO_ARGS3((buffer, format, args),
- TRIO_CONST char *buffer,
- TRIO_CONST char *format,
- trio_pointer_t *args)
-{
- assert(VALID(buffer));
- assert(VALID(format));
-
- return TrioScan((trio_pointer_t)&buffer, 0,
- TrioInStreamString,
- format, NULL, args);
-}
-
-/** @} End of Scanf documentation module */
-
-/*************************************************************************
- * trio_strerror
- */
-TRIO_PUBLIC TRIO_CONST char *
-trio_strerror
-TRIO_ARGS1((errorcode),
- int errorcode)
-{
- /* Textual versions of the error codes */
- switch (TRIO_ERROR_CODE(errorcode))
- {
- case TRIO_EOF:
- return "End of file";
- case TRIO_EINVAL:
- return "Invalid argument";
- case TRIO_ETOOMANY:
- return "Too many arguments";
- case TRIO_EDBLREF:
- return "Double reference";
- case TRIO_EGAP:
- return "Reference gap";
- case TRIO_ENOMEM:
- return "Out of memory";
- case TRIO_ERANGE:
- return "Invalid range";
- case TRIO_ECUSTOM:
- return "Custom error";
- default:
- return "Unknown";
- }
-}
diff --git a/external/libxml2_android/jni/libxml2/trio.h b/external/libxml2_android/jni/libxml2/trio.h
deleted file mode 100644
index 99d21273..00000000
--- a/external/libxml2_android/jni/libxml2/trio.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- *************************************************************************
- *
- * http://ctrio.sourceforge.net/
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIO_H
-#define TRIO_TRIO_H
-
-#if !defined(WITHOUT_TRIO)
-
-/*
- * Use autoconf defines if present. Packages using trio must define
- * HAVE_CONFIG_H as a compiler option themselves.
- */
-#if defined(TRIO_HAVE_CONFIG_H)
-# include "config.h"
-#endif
-
-#include "triodef.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#if defined(TRIO_COMPILER_ANCIENT)
-# include <varargs.h>
-#else
-# include <stdarg.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * Error codes.
- *
- * Remember to add a textual description to trio_strerror.
- */
-enum {
- TRIO_EOF = 1,
- TRIO_EINVAL = 2,
- TRIO_ETOOMANY = 3,
- TRIO_EDBLREF = 4,
- TRIO_EGAP = 5,
- TRIO_ENOMEM = 6,
- TRIO_ERANGE = 7,
- TRIO_ERRNO = 8,
- TRIO_ECUSTOM = 9
-};
-
-/* Error macros */
-#define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF)
-#define TRIO_ERROR_POSITION(x) ((-(x)) >> 8)
-#define TRIO_ERROR_NAME(x) trio_strerror(x)
-
-typedef int (*trio_outstream_t) TRIO_PROTO((trio_pointer_t, int));
-typedef int (*trio_instream_t) TRIO_PROTO((trio_pointer_t));
-
-TRIO_CONST char *trio_strerror TRIO_PROTO((int));
-
-/*************************************************************************
- * Print Functions
- */
-
-int trio_printf TRIO_PROTO((TRIO_CONST char *format, ...));
-int trio_vprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
-int trio_printfv TRIO_PROTO((TRIO_CONST char *format, void **args));
-
-int trio_fprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
-int trio_vfprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
-int trio_fprintfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
-
-int trio_dprintf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
-int trio_vdprintf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
-int trio_dprintfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
-
-int trio_cprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
- TRIO_CONST char *format, ...));
-int trio_vcprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
- TRIO_CONST char *format, va_list args));
-int trio_cprintfv TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
- TRIO_CONST char *format, void **args));
-
-int trio_sprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, ...));
-int trio_vsprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, va_list args));
-int trio_sprintfv TRIO_PROTO((char *buffer, TRIO_CONST char *format, void **args));
-
-int trio_snprintf TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
-int trio_vsnprintf TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
- va_list args));
-int trio_snprintfv TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
- void **args));
-
-int trio_snprintfcat TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
-int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
- va_list args));
-
-char *trio_aprintf TRIO_PROTO((TRIO_CONST char *format, ...));
-char *trio_vaprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
-
-int trio_asprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, ...));
-int trio_vasprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, va_list args));
-
-/*************************************************************************
- * Scan Functions
- */
-int trio_scanf TRIO_PROTO((TRIO_CONST char *format, ...));
-int trio_vscanf TRIO_PROTO((TRIO_CONST char *format, va_list args));
-int trio_scanfv TRIO_PROTO((TRIO_CONST char *format, void **args));
-
-int trio_fscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
-int trio_vfscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
-int trio_fscanfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
-
-int trio_dscanf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
-int trio_vdscanf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
-int trio_dscanfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
-
-int trio_cscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
- TRIO_CONST char *format, ...));
-int trio_vcscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
- TRIO_CONST char *format, va_list args));
-int trio_cscanfv TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
- TRIO_CONST char *format, void **args));
-
-int trio_sscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, ...));
-int trio_vsscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, va_list args));
-int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, void **args));
-
-/*************************************************************************
- * Locale Functions
- */
-void trio_locale_set_decimal_point TRIO_PROTO((char *decimalPoint));
-void trio_locale_set_thousand_separator TRIO_PROTO((char *thousandSeparator));
-void trio_locale_set_grouping TRIO_PROTO((char *grouping));
-
-/*************************************************************************
- * Renaming
- */
-#ifdef TRIO_REPLACE_STDIO
-/* Replace the <stdio.h> functions */
-#ifndef HAVE_PRINTF
-# undef printf
-# define printf trio_printf
-#endif
-#ifndef HAVE_VPRINTF
-# undef vprintf
-# define vprintf trio_vprintf
-#endif
-#ifndef HAVE_FPRINTF
-# undef fprintf
-# define fprintf trio_fprintf
-#endif
-#ifndef HAVE_VFPRINTF
-# undef vfprintf
-# define vfprintf trio_vfprintf
-#endif
-#ifndef HAVE_SPRINTF
-# undef sprintf
-# define sprintf trio_sprintf
-#endif
-#ifndef HAVE_VSPRINTF
-# undef vsprintf
-# define vsprintf trio_vsprintf
-#endif
-#ifndef HAVE_SNPRINTF
-# undef snprintf
-# define snprintf trio_snprintf
-#endif
-#ifndef HAVE_VSNPRINTF
-# undef vsnprintf
-# define vsnprintf trio_vsnprintf
-#endif
-#ifndef HAVE_SCANF
-# undef scanf
-# define scanf trio_scanf
-#endif
-#ifndef HAVE_VSCANF
-# undef vscanf
-# define vscanf trio_vscanf
-#endif
-#ifndef HAVE_FSCANF
-# undef fscanf
-# define fscanf trio_fscanf
-#endif
-#ifndef HAVE_VFSCANF
-# undef vfscanf
-# define vfscanf trio_vfscanf
-#endif
-#ifndef HAVE_SSCANF
-# undef sscanf
-# define sscanf trio_sscanf
-#endif
-#ifndef HAVE_VSSCANF
-# undef vsscanf
-# define vsscanf trio_vsscanf
-#endif
-/* These aren't stdio functions, but we make them look similar */
-#define dprintf trio_dprintf
-#define vdprintf trio_vdprintf
-#define aprintf trio_aprintf
-#define vaprintf trio_vaprintf
-#define asprintf trio_asprintf
-#define vasprintf trio_vasprintf
-#define dscanf trio_dscanf
-#define vdscanf trio_vdscanf
-#endif
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* WITHOUT_TRIO */
-
-#endif /* TRIO_TRIO_H */
diff --git a/external/libxml2_android/jni/libxml2/triodef.h b/external/libxml2_android/jni/libxml2/triodef.h
deleted file mode 100644
index 46772ee2..00000000
--- a/external/libxml2_android/jni/libxml2/triodef.h
+++ /dev/null
@@ -1,228 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIODEF_H
-#define TRIO_TRIODEF_H
-
-/*************************************************************************
- * Platform and compiler support detection
- */
-#if defined(__GNUC__)
-# define TRIO_COMPILER_GCC
-#elif defined(__SUNPRO_C)
-# define TRIO_COMPILER_SUNPRO
-#elif defined(__SUNPRO_CC)
-# define TRIO_COMPILER_SUNPRO
-# define __SUNPRO_C __SUNPRO_CC
-#elif defined(__xlC__) || defined(__IBMC__) || defined(__IBMCPP__)
-# define TRIO_COMPILER_XLC
-#elif defined(_AIX) && !defined(__GNUC__)
-# define TRIO_COMPILER_XLC /* Workaround for old xlc */
-#elif defined(__DECC) || defined(__DECCXX)
-# define TRIO_COMPILER_DECC
-#elif defined(__osf__) && defined(__LANGUAGE_C__)
-# define TRIO_COMPILER_DECC /* Workaround for old DEC C compilers */
-#elif defined(_MSC_VER)
-# define TRIO_COMPILER_MSVC
-#elif defined(__BORLANDC__)
-# define TRIO_COMPILER_BCB
-#endif
-
-#if defined(VMS) || defined(__VMS)
-/*
- * VMS is placed first to avoid identifying the platform as Unix
- * based on the DECC compiler later on.
- */
-# define TRIO_PLATFORM_VMS
-#elif defined(__OS400__)
-# define TRIO_PLATFORM_OS400
-#elif defined(unix) || defined(__unix) || defined(__unix__)
-# define TRIO_PLATFORM_UNIX
-#elif defined(TRIO_COMPILER_XLC) || defined(_AIX)
-# define TRIO_PLATFORM_UNIX
-#elif defined(TRIO_COMPILER_DECC) || defined(__osf___)
-# define TRIO_PLATFORM_UNIX
-#elif defined(__NetBSD__)
-# define TRIO_PLATFORM_UNIX
-#elif defined(__Lynx__)
-# define TRIO_PLATFORM_UNIX
-#elif defined(__QNX__)
-# define TRIO_PLATFORM_UNIX
-# define TRIO_PLATFORM_QNX
-#elif defined(__CYGWIN__)
-# define TRIO_PLATFORM_UNIX
-#elif defined(AMIGA) && defined(TRIO_COMPILER_GCC)
-# define TRIO_PLATFORM_UNIX
-#elif defined(TRIO_COMPILER_MSVC) || defined(WIN32) || defined(_WIN32)
-# define TRIO_PLATFORM_WIN32
-#elif defined(mpeix) || defined(__mpexl)
-# define TRIO_PLATFORM_MPEIX
-#endif
-
-#if defined(_AIX)
-# define TRIO_PLATFORM_AIX
-#elif defined(__hpux)
-# define TRIO_PLATFORM_HPUX
-#elif defined(sun) || defined(__sun__)
-# if defined(__SVR4) || defined(__svr4__)
-# define TRIO_PLATFORM_SOLARIS
-# else
-# define TRIO_PLATFORM_SUNOS
-# endif
-#endif
-
-#if defined(__STDC__) || defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
-# define TRIO_COMPILER_SUPPORTS_C89
-# if defined(__STDC_VERSION__)
-# define TRIO_COMPILER_SUPPORTS_C90
-# if (__STDC_VERSION__ >= 199409L)
-# define TRIO_COMPILER_SUPPORTS_C94
-# endif
-# if (__STDC_VERSION__ >= 199901L)
-# define TRIO_COMPILER_SUPPORTS_C99
-# endif
-# elif defined(TRIO_COMPILER_SUNPRO)
-# if (__SUNPRO_C >= 0x420)
-# define TRIO_COMPILER_SUPPORTS_C94
-# endif
-# endif
-#elif defined(TRIO_COMPILER_XLC) && defined(__EXTENDED__)
-# define TRIO_COMPILER_SUPPORTS_C89
-# define TRIO_COMPILER_SUPPORTS_C90
-# define TRIO_COMPILER_SUPPORTS_C94
-#endif
-
-#if defined(_XOPEN_SOURCE)
-# if defined(_XOPEN_SOURCE_EXTENDED)
-# define TRIO_COMPILER_SUPPORTS_UNIX95
-# endif
-# if (_XOPEN_VERSION >= 500)
-# define TRIO_COMPILER_SUPPORTS_UNIX98
-# endif
-# if (_XOPEN_VERSION >= 600)
-# define TRIO_COMPILER_SUPPORTS_UNIX01
-# endif
-#endif
-
-/*************************************************************************
- * Generic defines
- */
-
-#if !defined(TRIO_PUBLIC)
-# define TRIO_PUBLIC
-#endif
-#if !defined(TRIO_PRIVATE)
-# define TRIO_PRIVATE static
-#endif
-
-#if !(defined(TRIO_COMPILER_SUPPORTS_C89) || defined(__cplusplus))
-# define TRIO_COMPILER_ANCIENT
-#endif
-
-#if defined(TRIO_COMPILER_ANCIENT)
-# define TRIO_CONST
-# define TRIO_VOLATILE
-# define TRIO_SIGNED
-typedef double trio_long_double_t;
-typedef char * trio_pointer_t;
-# define TRIO_SUFFIX_LONG(x) x
-# define TRIO_PROTO(x) ()
-# define TRIO_NOARGS
-# define TRIO_ARGS1(list,a1) list a1;
-# define TRIO_ARGS2(list,a1,a2) list a1; a2;
-# define TRIO_ARGS3(list,a1,a2,a3) list a1; a2; a3;
-# define TRIO_ARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4;
-# define TRIO_ARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5;
-# define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) list a1; a2; a3; a4; a5; a6;
-# define TRIO_VARGS2(list,a1,a2) list a1; a2
-# define TRIO_VARGS3(list,a1,a2,a3) list a1; a2; a3
-# define TRIO_VARGS4(list,a1,a2,a3,a4) list a1; a2; a3; a4
-# define TRIO_VARGS5(list,a1,a2,a3,a4,a5) list a1; a2; a3; a4; a5
-# define TRIO_VA_DECL va_dcl
-# define TRIO_VA_START(x,y) va_start(x)
-# define TRIO_VA_END(x) va_end(x)
-#else /* ANSI C */
-# define TRIO_CONST const
-# define TRIO_VOLATILE volatile
-# define TRIO_SIGNED signed
-typedef long double trio_long_double_t;
-typedef void * trio_pointer_t;
-# define TRIO_SUFFIX_LONG(x) x ## L
-# define TRIO_PROTO(x) x
-# define TRIO_NOARGS void
-# define TRIO_ARGS1(list,a1) (a1)
-# define TRIO_ARGS2(list,a1,a2) (a1,a2)
-# define TRIO_ARGS3(list,a1,a2,a3) (a1,a2,a3)
-# define TRIO_ARGS4(list,a1,a2,a3,a4) (a1,a2,a3,a4)
-# define TRIO_ARGS5(list,a1,a2,a3,a4,a5) (a1,a2,a3,a4,a5)
-# define TRIO_ARGS6(list,a1,a2,a3,a4,a5,a6) (a1,a2,a3,a4,a5,a6)
-# define TRIO_VARGS2 TRIO_ARGS2
-# define TRIO_VARGS3 TRIO_ARGS3
-# define TRIO_VARGS4 TRIO_ARGS4
-# define TRIO_VARGS5 TRIO_ARGS5
-# define TRIO_VA_DECL ...
-# define TRIO_VA_START(x,y) va_start(x,y)
-# define TRIO_VA_END(x) va_end(x)
-#endif
-
-#if defined(TRIO_COMPILER_SUPPORTS_C99) || defined(__cplusplus)
-# define TRIO_INLINE inline
-#elif defined(TRIO_COMPILER_GCC)
-# define TRIO_INLINE __inline__
-#elif defined(TRIO_COMPILER_MSVC)
-# define TRIO_INLINE _inline
-#elif defined(TRIO_COMPILER_BCB)
-# define TRIO_INLINE __inline
-#else
-# define TRIO_INLINE
-#endif
-
-/*************************************************************************
- * Workarounds
- */
-
-#if defined(TRIO_PLATFORM_VMS)
-/*
- * Computations done with constants at compile time can trigger these
- * even when compiling with IEEE enabled.
- */
-# pragma message disable (UNDERFLOW, FLOATOVERFL)
-
-# if (__CRTL_VER < 80000000)
-/*
- * Although the compiler supports C99 language constructs, the C
- * run-time library does not contain all C99 functions.
- *
- * This was the case for 70300022. Update the 80000000 value when
- * it has been accurately determined what version of the library
- * supports C99.
- */
-# if defined(TRIO_COMPILER_SUPPORTS_C99)
-# undef TRIO_COMPILER_SUPPORTS_C99
-# endif
-# endif
-#endif
-
-/*
- * Not all preprocessors supports the LL token.
- */
-#if defined(TRIO_COMPILER_BCB)
-#else
-# define TRIO_COMPILER_SUPPORTS_LL
-#endif
-
-#endif /* TRIO_TRIODEF_H */
diff --git a/external/libxml2_android/jni/libxml2/trionan.c b/external/libxml2_android/jni/libxml2/trionan.c
deleted file mode 100644
index 6fbabb5d..00000000
--- a/external/libxml2_android/jni/libxml2/trionan.c
+++ /dev/null
@@ -1,914 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************
- *
- * Functions to handle special quantities in floating-point numbers
- * (that is, NaNs and infinity). They provide the capability to detect
- * and fabricate special quantities.
- *
- * Although written to be as portable as possible, it can never be
- * guaranteed to work on all platforms, as not all hardware supports
- * special quantities.
- *
- * The approach used here (approximately) is to:
- *
- * 1. Use C99 functionality when available.
- * 2. Use IEEE 754 bit-patterns if possible.
- * 3. Use platform-specific techniques.
- *
- ************************************************************************/
-
-/*
- * TODO:
- * o Put all the magic into trio_fpclassify_and_signbit(), and use this from
- * trio_isnan() etc.
- */
-
-/*************************************************************************
- * Include files
- */
-#include "triodef.h"
-#include "trionan.h"
-
-#include <math.h>
-#include <string.h>
-#include <limits.h>
-#include <float.h>
-#if defined(TRIO_PLATFORM_UNIX)
-# include <signal.h>
-#endif
-#if defined(TRIO_COMPILER_DECC)
-# if defined(__linux__)
-# include <cpml.h>
-# else
-# include <fp_class.h>
-# endif
-#endif
-#include <assert.h>
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_nan.h"
-#endif
-/** @addtogroup SpecialQuantities
- @{
-*/
-
-/*************************************************************************
- * Definitions
- */
-
-#define TRIO_TRUE (1 == 1)
-#define TRIO_FALSE (0 == 1)
-
-/*
- * We must enable IEEE floating-point on Alpha
- */
-#if defined(__alpha) && !defined(_IEEE_FP)
-# if defined(TRIO_COMPILER_DECC)
-# if defined(TRIO_PLATFORM_VMS)
-# error "Must be compiled with option /IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE"
-# else
-# if !defined(_CFE)
-# error "Must be compiled with option -ieee"
-# endif
-# endif
-# elif defined(TRIO_COMPILER_GCC) && (defined(__osf__) || defined(__linux__))
-# error "Must be compiled with option -mieee"
-# endif
-#endif /* __alpha && ! _IEEE_FP */
-
-/*
- * In ANSI/IEEE 754-1985 64-bits double format numbers have the
- * following properties (amoungst others)
- *
- * o FLT_RADIX == 2: binary encoding
- * o DBL_MAX_EXP == 1024: 11 bits exponent, where one bit is used
- * to indicate special numbers (e.g. NaN and Infinity), so the
- * maximum exponent is 10 bits wide (2^10 == 1024).
- * o DBL_MANT_DIG == 53: The mantissa is 52 bits wide, but because
- * numbers are normalized the initial binary 1 is represented
- * implicitly (the so-called "hidden bit"), which leaves us with
- * the ability to represent 53 bits wide mantissa.
- */
-#if (FLT_RADIX == 2) && (DBL_MAX_EXP == 1024) && (DBL_MANT_DIG == 53)
-# define USE_IEEE_754
-#endif
-
-
-/*************************************************************************
- * Constants
- */
-
-static TRIO_CONST char rcsid[] = "@(#)$Id$";
-
-#if defined(USE_IEEE_754)
-
-/*
- * Endian-agnostic indexing macro.
- *
- * The value of internalEndianMagic, when converted into a 64-bit
- * integer, becomes 0x0706050403020100 (we could have used a 64-bit
- * integer value instead of a double, but not all platforms supports
- * that type). The value is automatically encoded with the correct
- * endianess by the compiler, which means that we can support any
- * kind of endianess. The individual bytes are then used as an index
- * for the IEEE 754 bit-patterns and masks.
- */
-#define TRIO_DOUBLE_INDEX(x) (((unsigned char *)&internalEndianMagic)[7-(x)])
-
-#if (defined(__BORLANDC__) && __BORLANDC__ >= 0x0590)
-static TRIO_CONST double internalEndianMagic = 7.949928895127362e-275;
-#else
-static TRIO_CONST double internalEndianMagic = 7.949928895127363e-275;
-#endif
-
-/* Mask for the exponent */
-static TRIO_CONST unsigned char ieee_754_exponent_mask[] = {
- 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-/* Mask for the mantissa */
-static TRIO_CONST unsigned char ieee_754_mantissa_mask[] = {
- 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF
-};
-
-/* Mask for the sign bit */
-static TRIO_CONST unsigned char ieee_754_sign_mask[] = {
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-/* Bit-pattern for negative zero */
-static TRIO_CONST unsigned char ieee_754_negzero_array[] = {
- 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-/* Bit-pattern for infinity */
-static TRIO_CONST unsigned char ieee_754_infinity_array[] = {
- 0x7F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-/* Bit-pattern for quiet NaN */
-static TRIO_CONST unsigned char ieee_754_qnan_array[] = {
- 0x7F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-
-
-/*************************************************************************
- * Functions
- */
-
-/*
- * trio_make_double
- */
-TRIO_PRIVATE double
-trio_make_double
-TRIO_ARGS1((values),
- TRIO_CONST unsigned char *values)
-{
- TRIO_VOLATILE double result;
- int i;
-
- for (i = 0; i < (int)sizeof(double); i++) {
- ((TRIO_VOLATILE unsigned char *)&result)[TRIO_DOUBLE_INDEX(i)] = values[i];
- }
- return result;
-}
-
-/*
- * trio_is_special_quantity
- */
-TRIO_PRIVATE int
-trio_is_special_quantity
-TRIO_ARGS2((number, has_mantissa),
- double number,
- int *has_mantissa)
-{
- unsigned int i;
- unsigned char current;
- int is_special_quantity = TRIO_TRUE;
-
- *has_mantissa = 0;
-
- for (i = 0; i < (unsigned int)sizeof(double); i++) {
- current = ((unsigned char *)&number)[TRIO_DOUBLE_INDEX(i)];
- is_special_quantity
- &= ((current & ieee_754_exponent_mask[i]) == ieee_754_exponent_mask[i]);
- *has_mantissa |= (current & ieee_754_mantissa_mask[i]);
- }
- return is_special_quantity;
-}
-
-/*
- * trio_is_negative
- */
-TRIO_PRIVATE int
-trio_is_negative
-TRIO_ARGS1((number),
- double number)
-{
- unsigned int i;
- int is_negative = TRIO_FALSE;
-
- for (i = 0; i < (unsigned int)sizeof(double); i++) {
- is_negative |= (((unsigned char *)&number)[TRIO_DOUBLE_INDEX(i)]
- & ieee_754_sign_mask[i]);
- }
- return is_negative;
-}
-
-#endif /* USE_IEEE_754 */
-
-
-/**
- Generate negative zero.
-
- @return Floating-point representation of negative zero.
-*/
-TRIO_PUBLIC double
-trio_nzero(TRIO_NOARGS)
-{
-#if defined(USE_IEEE_754)
- return trio_make_double(ieee_754_negzero_array);
-#else
- TRIO_VOLATILE double zero = 0.0;
-
- return -zero;
-#endif
-}
-
-/**
- Generate positive infinity.
-
- @return Floating-point representation of positive infinity.
-*/
-TRIO_PUBLIC double
-trio_pinf(TRIO_NOARGS)
-{
- /* Cache the result */
- static double result = 0.0;
-
- if (result == 0.0) {
-
-#if defined(INFINITY) && defined(__STDC_IEC_559__)
- result = (double)INFINITY;
-
-#elif defined(USE_IEEE_754)
- result = trio_make_double(ieee_754_infinity_array);
-
-#else
- /*
- * If HUGE_VAL is different from DBL_MAX, then HUGE_VAL is used
- * as infinity. Otherwise we have to resort to an overflow
- * operation to generate infinity.
- */
-# if defined(TRIO_PLATFORM_UNIX)
- void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
-# endif
-
- result = HUGE_VAL;
- if (HUGE_VAL == DBL_MAX) {
- /* Force overflow */
- result += HUGE_VAL;
- }
-
-# if defined(TRIO_PLATFORM_UNIX)
- signal(SIGFPE, signal_handler);
-# endif
-
-#endif
- }
- return result;
-}
-
-/**
- Generate negative infinity.
-
- @return Floating-point value of negative infinity.
-*/
-TRIO_PUBLIC double
-trio_ninf(TRIO_NOARGS)
-{
- static double result = 0.0;
-
- if (result == 0.0) {
- /*
- * Negative infinity is calculated by negating positive infinity,
- * which can be done because it is legal to do calculations on
- * infinity (for example, 1 / infinity == 0).
- */
- result = -trio_pinf();
- }
- return result;
-}
-
-/**
- Generate NaN.
-
- @return Floating-point representation of NaN.
-*/
-TRIO_PUBLIC double
-trio_nan(TRIO_NOARGS)
-{
- /* Cache the result */
- static double result = 0.0;
-
- if (result == 0.0) {
-
-#if defined(TRIO_COMPILER_SUPPORTS_C99)
- result = nan("");
-
-#elif defined(NAN) && defined(__STDC_IEC_559__)
- result = (double)NAN;
-
-#elif defined(USE_IEEE_754)
- result = trio_make_double(ieee_754_qnan_array);
-
-#else
- /*
- * There are several ways to generate NaN. The one used here is
- * to divide infinity by infinity. I would have preferred to add
- * negative infinity to positive infinity, but that yields wrong
- * result (infinity) on FreeBSD.
- *
- * This may fail if the hardware does not support NaN, or if
- * the Invalid Operation floating-point exception is unmasked.
- */
-# if defined(TRIO_PLATFORM_UNIX)
- void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
-# endif
-
- result = trio_pinf() / trio_pinf();
-
-# if defined(TRIO_PLATFORM_UNIX)
- signal(SIGFPE, signal_handler);
-# endif
-
-#endif
- }
- return result;
-}
-
-/**
- Check for NaN.
-
- @param number An arbitrary floating-point number.
- @return Boolean value indicating whether or not the number is a NaN.
-*/
-TRIO_PUBLIC int
-trio_isnan
-TRIO_ARGS1((number),
- double number)
-{
-#if (defined(TRIO_COMPILER_SUPPORTS_C99) && defined(isnan)) \
- || defined(TRIO_COMPILER_SUPPORTS_UNIX95)
- /*
- * C99 defines isnan() as a macro. UNIX95 defines isnan() as a
- * function. This function was already present in XPG4, but this
- * is a bit tricky to detect with compiler defines, so we choose
- * the conservative approach and only use it for UNIX95.
- */
- return isnan(number);
-
-#elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
- /*
- * Microsoft Visual C++ and Borland C++ Builder have an _isnan()
- * function.
- */
- return _isnan(number) ? TRIO_TRUE : TRIO_FALSE;
-
-#elif defined(USE_IEEE_754)
- /*
- * Examine IEEE 754 bit-pattern. A NaN must have a special exponent
- * pattern, and a non-empty mantissa.
- */
- int has_mantissa;
- int is_special_quantity;
-
- is_special_quantity = trio_is_special_quantity(number, &has_mantissa);
-
- return (is_special_quantity && has_mantissa);
-
-#else
- /*
- * Fallback solution
- */
- int status;
- double integral, fraction;
-
-# if defined(TRIO_PLATFORM_UNIX)
- void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
-# endif
-
- status = (/*
- * NaN is the only number which does not compare to itself
- */
- ((TRIO_VOLATILE double)number != (TRIO_VOLATILE double)number) ||
- /*
- * Fallback solution if NaN compares to NaN
- */
- ((number != 0.0) &&
- (fraction = modf(number, &integral),
- integral == fraction)));
-
-# if defined(TRIO_PLATFORM_UNIX)
- signal(SIGFPE, signal_handler);
-# endif
-
- return status;
-
-#endif
-}
-
-/**
- Check for infinity.
-
- @param number An arbitrary floating-point number.
- @return 1 if positive infinity, -1 if negative infinity, 0 otherwise.
-*/
-TRIO_PUBLIC int
-trio_isinf
-TRIO_ARGS1((number),
- double number)
-{
-#if defined(TRIO_COMPILER_DECC) && !defined(__linux__)
- /*
- * DECC has an isinf() macro, but it works differently than that
- * of C99, so we use the fp_class() function instead.
- */
- return ((fp_class(number) == FP_POS_INF)
- ? 1
- : ((fp_class(number) == FP_NEG_INF) ? -1 : 0));
-
-#elif defined(isinf)
- /*
- * C99 defines isinf() as a macro.
- */
- return isinf(number)
- ? ((number > 0.0) ? 1 : -1)
- : 0;
-
-#elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
- /*
- * Microsoft Visual C++ and Borland C++ Builder have an _fpclass()
- * function that can be used to detect infinity.
- */
- return ((_fpclass(number) == _FPCLASS_PINF)
- ? 1
- : ((_fpclass(number) == _FPCLASS_NINF) ? -1 : 0));
-
-#elif defined(USE_IEEE_754)
- /*
- * Examine IEEE 754 bit-pattern. Infinity must have a special exponent
- * pattern, and an empty mantissa.
- */
- int has_mantissa;
- int is_special_quantity;
-
- is_special_quantity = trio_is_special_quantity(number, &has_mantissa);
-
- return (is_special_quantity && !has_mantissa)
- ? ((number < 0.0) ? -1 : 1)
- : 0;
-
-#else
- /*
- * Fallback solution.
- */
- int status;
-
-# if defined(TRIO_PLATFORM_UNIX)
- void (*signal_handler)(int) = signal(SIGFPE, SIG_IGN);
-# endif
-
- double infinity = trio_pinf();
-
- status = ((number == infinity)
- ? 1
- : ((number == -infinity) ? -1 : 0));
-
-# if defined(TRIO_PLATFORM_UNIX)
- signal(SIGFPE, signal_handler);
-# endif
-
- return status;
-
-#endif
-}
-
-#if 0
- /* Temporary fix - this routine is not used anywhere */
-/**
- Check for finity.
-
- @param number An arbitrary floating-point number.
- @return Boolean value indicating whether or not the number is a finite.
-*/
-TRIO_PUBLIC int
-trio_isfinite
-TRIO_ARGS1((number),
- double number)
-{
-#if defined(TRIO_COMPILER_SUPPORTS_C99) && defined(isfinite)
- /*
- * C99 defines isfinite() as a macro.
- */
- return isfinite(number);
-
-#elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
- /*
- * Microsoft Visual C++ and Borland C++ Builder use _finite().
- */
- return _finite(number);
-
-#elif defined(USE_IEEE_754)
- /*
- * Examine IEEE 754 bit-pattern. For finity we do not care about the
- * mantissa.
- */
- int dummy;
-
- return (! trio_is_special_quantity(number, &dummy));
-
-#else
- /*
- * Fallback solution.
- */
- return ((trio_isinf(number) == 0) && (trio_isnan(number) == 0));
-
-#endif
-}
-
-#endif
-
-/*
- * The sign of NaN is always false
- */
-TRIO_PUBLIC int
-trio_fpclassify_and_signbit
-TRIO_ARGS2((number, is_negative),
- double number,
- int *is_negative)
-{
-#if defined(fpclassify) && defined(signbit)
- /*
- * C99 defines fpclassify() and signbit() as a macros
- */
- *is_negative = signbit(number);
- switch (fpclassify(number)) {
- case FP_NAN:
- return TRIO_FP_NAN;
- case FP_INFINITE:
- return TRIO_FP_INFINITE;
- case FP_SUBNORMAL:
- return TRIO_FP_SUBNORMAL;
- case FP_ZERO:
- return TRIO_FP_ZERO;
- default:
- return TRIO_FP_NORMAL;
- }
-
-#else
-# if defined(TRIO_COMPILER_DECC)
- /*
- * DECC has an fp_class() function.
- */
-# define TRIO_FPCLASSIFY(n) fp_class(n)
-# define TRIO_QUIET_NAN FP_QNAN
-# define TRIO_SIGNALLING_NAN FP_SNAN
-# define TRIO_POSITIVE_INFINITY FP_POS_INF
-# define TRIO_NEGATIVE_INFINITY FP_NEG_INF
-# define TRIO_POSITIVE_SUBNORMAL FP_POS_DENORM
-# define TRIO_NEGATIVE_SUBNORMAL FP_NEG_DENORM
-# define TRIO_POSITIVE_ZERO FP_POS_ZERO
-# define TRIO_NEGATIVE_ZERO FP_NEG_ZERO
-# define TRIO_POSITIVE_NORMAL FP_POS_NORM
-# define TRIO_NEGATIVE_NORMAL FP_NEG_NORM
-
-# elif defined(TRIO_COMPILER_MSVC) || defined(TRIO_COMPILER_BCB)
- /*
- * Microsoft Visual C++ and Borland C++ Builder have an _fpclass()
- * function.
- */
-# define TRIO_FPCLASSIFY(n) _fpclass(n)
-# define TRIO_QUIET_NAN _FPCLASS_QNAN
-# define TRIO_SIGNALLING_NAN _FPCLASS_SNAN
-# define TRIO_POSITIVE_INFINITY _FPCLASS_PINF
-# define TRIO_NEGATIVE_INFINITY _FPCLASS_NINF
-# define TRIO_POSITIVE_SUBNORMAL _FPCLASS_PD
-# define TRIO_NEGATIVE_SUBNORMAL _FPCLASS_ND
-# define TRIO_POSITIVE_ZERO _FPCLASS_PZ
-# define TRIO_NEGATIVE_ZERO _FPCLASS_NZ
-# define TRIO_POSITIVE_NORMAL _FPCLASS_PN
-# define TRIO_NEGATIVE_NORMAL _FPCLASS_NN
-
-# elif defined(FP_PLUS_NORM)
- /*
- * HP-UX 9.x and 10.x have an fpclassify() function, that is different
- * from the C99 fpclassify() macro supported on HP-UX 11.x.
- *
- * AIX has class() for C, and _class() for C++, which returns the
- * same values as the HP-UX fpclassify() function.
- */
-# if defined(TRIO_PLATFORM_AIX)
-# if defined(__cplusplus)
-# define TRIO_FPCLASSIFY(n) _class(n)
-# else
-# define TRIO_FPCLASSIFY(n) class(n)
-# endif
-# else
-# define TRIO_FPCLASSIFY(n) fpclassify(n)
-# endif
-# define TRIO_QUIET_NAN FP_QNAN
-# define TRIO_SIGNALLING_NAN FP_SNAN
-# define TRIO_POSITIVE_INFINITY FP_PLUS_INF
-# define TRIO_NEGATIVE_INFINITY FP_MINUS_INF
-# define TRIO_POSITIVE_SUBNORMAL FP_PLUS_DENORM
-# define TRIO_NEGATIVE_SUBNORMAL FP_MINUS_DENORM
-# define TRIO_POSITIVE_ZERO FP_PLUS_ZERO
-# define TRIO_NEGATIVE_ZERO FP_MINUS_ZERO
-# define TRIO_POSITIVE_NORMAL FP_PLUS_NORM
-# define TRIO_NEGATIVE_NORMAL FP_MINUS_NORM
-# endif
-
-# if defined(TRIO_FPCLASSIFY)
- switch (TRIO_FPCLASSIFY(number)) {
- case TRIO_QUIET_NAN:
- case TRIO_SIGNALLING_NAN:
- *is_negative = TRIO_FALSE; /* NaN has no sign */
- return TRIO_FP_NAN;
- case TRIO_POSITIVE_INFINITY:
- *is_negative = TRIO_FALSE;
- return TRIO_FP_INFINITE;
- case TRIO_NEGATIVE_INFINITY:
- *is_negative = TRIO_TRUE;
- return TRIO_FP_INFINITE;
- case TRIO_POSITIVE_SUBNORMAL:
- *is_negative = TRIO_FALSE;
- return TRIO_FP_SUBNORMAL;
- case TRIO_NEGATIVE_SUBNORMAL:
- *is_negative = TRIO_TRUE;
- return TRIO_FP_SUBNORMAL;
- case TRIO_POSITIVE_ZERO:
- *is_negative = TRIO_FALSE;
- return TRIO_FP_ZERO;
- case TRIO_NEGATIVE_ZERO:
- *is_negative = TRIO_TRUE;
- return TRIO_FP_ZERO;
- case TRIO_POSITIVE_NORMAL:
- *is_negative = TRIO_FALSE;
- return TRIO_FP_NORMAL;
- case TRIO_NEGATIVE_NORMAL:
- *is_negative = TRIO_TRUE;
- return TRIO_FP_NORMAL;
- default:
- /* Just in case... */
- *is_negative = (number < 0.0);
- return TRIO_FP_NORMAL;
- }
-
-# else
- /*
- * Fallback solution.
- */
- int rc;
-
- if (number == 0.0) {
- /*
- * In IEEE 754 the sign of zero is ignored in comparisons, so we
- * have to handle this as a special case by examining the sign bit
- * directly.
- */
-# if defined(USE_IEEE_754)
- *is_negative = trio_is_negative(number);
-# else
- *is_negative = TRIO_FALSE; /* FIXME */
-# endif
- return TRIO_FP_ZERO;
- }
- if (trio_isnan(number)) {
- *is_negative = TRIO_FALSE;
- return TRIO_FP_NAN;
- }
- if ((rc = trio_isinf(number))) {
- *is_negative = (rc == -1);
- return TRIO_FP_INFINITE;
- }
- if ((number > 0.0) && (number < DBL_MIN)) {
- *is_negative = TRIO_FALSE;
- return TRIO_FP_SUBNORMAL;
- }
- if ((number < 0.0) && (number > -DBL_MIN)) {
- *is_negative = TRIO_TRUE;
- return TRIO_FP_SUBNORMAL;
- }
- *is_negative = (number < 0.0);
- return TRIO_FP_NORMAL;
-
-# endif
-#endif
-}
-
-/**
- Examine the sign of a number.
-
- @param number An arbitrary floating-point number.
- @return Boolean value indicating whether or not the number has the
- sign bit set (i.e. is negative).
-*/
-TRIO_PUBLIC int
-trio_signbit
-TRIO_ARGS1((number),
- double number)
-{
- int is_negative;
-
- (void)trio_fpclassify_and_signbit(number, &is_negative);
- return is_negative;
-}
-
-#if 0
- /* Temporary fix - this routine is not used in libxml */
-/**
- Examine the class of a number.
-
- @param number An arbitrary floating-point number.
- @return Enumerable value indicating the class of @p number
-*/
-TRIO_PUBLIC int
-trio_fpclassify
-TRIO_ARGS1((number),
- double number)
-{
- int dummy;
-
- return trio_fpclassify_and_signbit(number, &dummy);
-}
-
-#endif
-
-/** @} SpecialQuantities */
-
-/*************************************************************************
- * For test purposes.
- *
- * Add the following compiler option to include this test code.
- *
- * Unix : -DSTANDALONE
- * VMS : /DEFINE=(STANDALONE)
- */
-#if defined(STANDALONE)
-# include <stdio.h>
-
-static TRIO_CONST char *
-getClassification
-TRIO_ARGS1((type),
- int type)
-{
- switch (type) {
- case TRIO_FP_INFINITE:
- return "FP_INFINITE";
- case TRIO_FP_NAN:
- return "FP_NAN";
- case TRIO_FP_NORMAL:
- return "FP_NORMAL";
- case TRIO_FP_SUBNORMAL:
- return "FP_SUBNORMAL";
- case TRIO_FP_ZERO:
- return "FP_ZERO";
- default:
- return "FP_UNKNOWN";
- }
-}
-
-static void
-print_class
-TRIO_ARGS2((prefix, number),
- TRIO_CONST char *prefix,
- double number)
-{
- printf("%-6s: %s %-15s %g\n",
- prefix,
- trio_signbit(number) ? "-" : "+",
- getClassification(TRIO_FPCLASSIFY(number)),
- number);
-}
-
-int main(TRIO_NOARGS)
-{
- double my_nan;
- double my_pinf;
- double my_ninf;
-# if defined(TRIO_PLATFORM_UNIX)
- void (*signal_handler) TRIO_PROTO((int));
-# endif
-
- my_nan = trio_nan();
- my_pinf = trio_pinf();
- my_ninf = trio_ninf();
-
- print_class("Nan", my_nan);
- print_class("PInf", my_pinf);
- print_class("NInf", my_ninf);
- print_class("PZero", 0.0);
- print_class("NZero", -0.0);
- print_class("PNorm", 1.0);
- print_class("NNorm", -1.0);
- print_class("PSub", 1.01e-307 - 1.00e-307);
- print_class("NSub", 1.00e-307 - 1.01e-307);
-
- printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
- my_nan,
- ((unsigned char *)&my_nan)[0],
- ((unsigned char *)&my_nan)[1],
- ((unsigned char *)&my_nan)[2],
- ((unsigned char *)&my_nan)[3],
- ((unsigned char *)&my_nan)[4],
- ((unsigned char *)&my_nan)[5],
- ((unsigned char *)&my_nan)[6],
- ((unsigned char *)&my_nan)[7],
- trio_isnan(my_nan), trio_isinf(my_nan));
- printf("PInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
- my_pinf,
- ((unsigned char *)&my_pinf)[0],
- ((unsigned char *)&my_pinf)[1],
- ((unsigned char *)&my_pinf)[2],
- ((unsigned char *)&my_pinf)[3],
- ((unsigned char *)&my_pinf)[4],
- ((unsigned char *)&my_pinf)[5],
- ((unsigned char *)&my_pinf)[6],
- ((unsigned char *)&my_pinf)[7],
- trio_isnan(my_pinf), trio_isinf(my_pinf));
- printf("NInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
- my_ninf,
- ((unsigned char *)&my_ninf)[0],
- ((unsigned char *)&my_ninf)[1],
- ((unsigned char *)&my_ninf)[2],
- ((unsigned char *)&my_ninf)[3],
- ((unsigned char *)&my_ninf)[4],
- ((unsigned char *)&my_ninf)[5],
- ((unsigned char *)&my_ninf)[6],
- ((unsigned char *)&my_ninf)[7],
- trio_isnan(my_ninf), trio_isinf(my_ninf));
-
-# if defined(TRIO_PLATFORM_UNIX)
- signal_handler = signal(SIGFPE, SIG_IGN);
-# endif
-
- my_pinf = DBL_MAX + DBL_MAX;
- my_ninf = -my_pinf;
- my_nan = my_pinf / my_pinf;
-
-# if defined(TRIO_PLATFORM_UNIX)
- signal(SIGFPE, signal_handler);
-# endif
-
- printf("NaN : %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
- my_nan,
- ((unsigned char *)&my_nan)[0],
- ((unsigned char *)&my_nan)[1],
- ((unsigned char *)&my_nan)[2],
- ((unsigned char *)&my_nan)[3],
- ((unsigned char *)&my_nan)[4],
- ((unsigned char *)&my_nan)[5],
- ((unsigned char *)&my_nan)[6],
- ((unsigned char *)&my_nan)[7],
- trio_isnan(my_nan), trio_isinf(my_nan));
- printf("PInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
- my_pinf,
- ((unsigned char *)&my_pinf)[0],
- ((unsigned char *)&my_pinf)[1],
- ((unsigned char *)&my_pinf)[2],
- ((unsigned char *)&my_pinf)[3],
- ((unsigned char *)&my_pinf)[4],
- ((unsigned char *)&my_pinf)[5],
- ((unsigned char *)&my_pinf)[6],
- ((unsigned char *)&my_pinf)[7],
- trio_isnan(my_pinf), trio_isinf(my_pinf));
- printf("NInf: %4g 0x%02x%02x%02x%02x%02x%02x%02x%02x (%2d, %2d)\n",
- my_ninf,
- ((unsigned char *)&my_ninf)[0],
- ((unsigned char *)&my_ninf)[1],
- ((unsigned char *)&my_ninf)[2],
- ((unsigned char *)&my_ninf)[3],
- ((unsigned char *)&my_ninf)[4],
- ((unsigned char *)&my_ninf)[5],
- ((unsigned char *)&my_ninf)[6],
- ((unsigned char *)&my_ninf)[7],
- trio_isnan(my_ninf), trio_isinf(my_ninf));
-
- return 0;
-}
-#endif
diff --git a/external/libxml2_android/jni/libxml2/trionan.h b/external/libxml2_android/jni/libxml2/trionan.h
deleted file mode 100644
index be6e718a..00000000
--- a/external/libxml2_android/jni/libxml2/trionan.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2001 Bjorn Reese <breese@users.sourceforge.net>
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#ifndef TRIO_NAN_H
-#define TRIO_NAN_H
-
-#include "triodef.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum {
- TRIO_FP_INFINITE,
- TRIO_FP_NAN,
- TRIO_FP_NORMAL,
- TRIO_FP_SUBNORMAL,
- TRIO_FP_ZERO
-};
-
-/*
- * Return NaN (Not-a-Number).
- */
-TRIO_PUBLIC double trio_nan TRIO_PROTO((void));
-
-/*
- * Return positive infinity.
- */
-TRIO_PUBLIC double trio_pinf TRIO_PROTO((void));
-
-/*
- * Return negative infinity.
- */
-TRIO_PUBLIC double trio_ninf TRIO_PROTO((void));
-
-/*
- * Return negative zero.
- */
-TRIO_PUBLIC double trio_nzero TRIO_PROTO((TRIO_NOARGS));
-
-/*
- * If number is a NaN return non-zero, otherwise return zero.
- */
-TRIO_PUBLIC int trio_isnan TRIO_PROTO((double number));
-
-/*
- * If number is positive infinity return 1, if number is negative
- * infinity return -1, otherwise return 0.
- */
-TRIO_PUBLIC int trio_isinf TRIO_PROTO((double number));
-
-/*
- * If number is finite return non-zero, otherwise return zero.
- */
-#if 0
- /* Temporary fix - these 2 routines not used in libxml */
-TRIO_PUBLIC int trio_isfinite TRIO_PROTO((double number));
-
-TRIO_PUBLIC int trio_fpclassify TRIO_PROTO((double number));
-#endif
-
-TRIO_PUBLIC int trio_signbit TRIO_PROTO((double number));
-
-TRIO_PUBLIC int trio_fpclassify_and_signbit TRIO_PROTO((double number, int *is_negative));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* TRIO_NAN_H */
diff --git a/external/libxml2_android/jni/libxml2/triop.h b/external/libxml2_android/jni/libxml2/triop.h
deleted file mode 100644
index 8462c56f..00000000
--- a/external/libxml2_android/jni/libxml2/triop.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2000 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************
- *
- * Private functions, types, etc. used for callback functions.
- *
- * The ref pointer is an opaque type and should remain as such.
- * Private data must only be accessible through the getter and
- * setter functions.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIOP_H
-#define TRIO_TRIOP_H
-
-#include "triodef.h"
-
-#include <stdlib.h>
-#if defined(TRIO_COMPILER_ANCIENT)
-# include <varargs.h>
-#else
-# include <stdarg.h>
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef TRIO_C99
-# define TRIO_C99 1
-#endif
-#ifndef TRIO_BSD
-# define TRIO_BSD 1
-#endif
-#ifndef TRIO_GNU
-# define TRIO_GNU 1
-#endif
-#ifndef TRIO_MISC
-# define TRIO_MISC 1
-#endif
-#ifndef TRIO_UNIX98
-# define TRIO_UNIX98 1
-#endif
-#ifndef TRIO_MICROSOFT
-# define TRIO_MICROSOFT 1
-#endif
-#ifndef TRIO_EXTENSION
-# define TRIO_EXTENSION 1
-#endif
-#ifndef TRIO_WIDECHAR /* Does not work yet. Do not enable */
-# define TRIO_WIDECHAR 0
-#endif
-#ifndef TRIO_ERRORS
-# define TRIO_ERRORS 1
-#endif
-
-#ifndef TRIO_MALLOC
-# define TRIO_MALLOC(n) malloc(n)
-#endif
-#ifndef TRIO_REALLOC
-# define TRIO_REALLOC(x,n) realloc((x),(n))
-#endif
-#ifndef TRIO_FREE
-# define TRIO_FREE(x) free(x)
-#endif
-
-
-/*************************************************************************
- * User-defined specifiers
- */
-
-typedef int (*trio_callback_t) TRIO_PROTO((trio_pointer_t));
-
-trio_pointer_t trio_register TRIO_PROTO((trio_callback_t callback, const char *name));
-void trio_unregister TRIO_PROTO((trio_pointer_t handle));
-
-TRIO_CONST char *trio_get_format TRIO_PROTO((trio_pointer_t ref));
-trio_pointer_t trio_get_argument TRIO_PROTO((trio_pointer_t ref));
-
-/* Modifiers */
-int trio_get_width TRIO_PROTO((trio_pointer_t ref));
-void trio_set_width TRIO_PROTO((trio_pointer_t ref, int width));
-int trio_get_precision TRIO_PROTO((trio_pointer_t ref));
-void trio_set_precision TRIO_PROTO((trio_pointer_t ref, int precision));
-int trio_get_base TRIO_PROTO((trio_pointer_t ref));
-void trio_set_base TRIO_PROTO((trio_pointer_t ref, int base));
-int trio_get_padding TRIO_PROTO((trio_pointer_t ref));
-void trio_set_padding TRIO_PROTO((trio_pointer_t ref, int is_padding));
-int trio_get_short TRIO_PROTO((trio_pointer_t ref)); /* h */
-void trio_set_shortshort TRIO_PROTO((trio_pointer_t ref, int is_shortshort));
-int trio_get_shortshort TRIO_PROTO((trio_pointer_t ref)); /* hh */
-void trio_set_short TRIO_PROTO((trio_pointer_t ref, int is_short));
-int trio_get_long TRIO_PROTO((trio_pointer_t ref)); /* l */
-void trio_set_long TRIO_PROTO((trio_pointer_t ref, int is_long));
-int trio_get_longlong TRIO_PROTO((trio_pointer_t ref)); /* ll */
-void trio_set_longlong TRIO_PROTO((trio_pointer_t ref, int is_longlong));
-int trio_get_longdouble TRIO_PROTO((trio_pointer_t ref)); /* L */
-void trio_set_longdouble TRIO_PROTO((trio_pointer_t ref, int is_longdouble));
-int trio_get_alternative TRIO_PROTO((trio_pointer_t ref)); /* # */
-void trio_set_alternative TRIO_PROTO((trio_pointer_t ref, int is_alternative));
-int trio_get_alignment TRIO_PROTO((trio_pointer_t ref)); /* - */
-void trio_set_alignment TRIO_PROTO((trio_pointer_t ref, int is_leftaligned));
-int trio_get_spacing TRIO_PROTO((trio_pointer_t ref)); /* TRIO_PROTO((space) */
-void trio_set_spacing TRIO_PROTO((trio_pointer_t ref, int is_space));
-int trio_get_sign TRIO_PROTO((trio_pointer_t ref)); /* + */
-void trio_set_sign TRIO_PROTO((trio_pointer_t ref, int is_showsign));
-int trio_get_quote TRIO_PROTO((trio_pointer_t ref)); /* ' */
-void trio_set_quote TRIO_PROTO((trio_pointer_t ref, int is_quote));
-int trio_get_upper TRIO_PROTO((trio_pointer_t ref));
-void trio_set_upper TRIO_PROTO((trio_pointer_t ref, int is_upper));
-#if TRIO_C99
-int trio_get_largest TRIO_PROTO((trio_pointer_t ref)); /* j */
-void trio_set_largest TRIO_PROTO((trio_pointer_t ref, int is_largest));
-int trio_get_ptrdiff TRIO_PROTO((trio_pointer_t ref)); /* t */
-void trio_set_ptrdiff TRIO_PROTO((trio_pointer_t ref, int is_ptrdiff));
-int trio_get_size TRIO_PROTO((trio_pointer_t ref)); /* z / Z */
-void trio_set_size TRIO_PROTO((trio_pointer_t ref, int is_size));
-#endif
-
-/* Printing */
-int trio_print_ref TRIO_PROTO((trio_pointer_t ref, const char *format, ...));
-int trio_vprint_ref TRIO_PROTO((trio_pointer_t ref, const char *format, va_list args));
-int trio_printv_ref TRIO_PROTO((trio_pointer_t ref, const char *format, trio_pointer_t *args));
-
-void trio_print_int TRIO_PROTO((trio_pointer_t ref, int number));
-void trio_print_uint TRIO_PROTO((trio_pointer_t ref, unsigned int number));
-/* void trio_print_long TRIO_PROTO((trio_pointer_t ref, long number)); */
-/* void trio_print_ulong TRIO_PROTO((trio_pointer_t ref, unsigned long number)); */
-void trio_print_double TRIO_PROTO((trio_pointer_t ref, double number));
-void trio_print_string TRIO_PROTO((trio_pointer_t ref, char *string));
-void trio_print_pointer TRIO_PROTO((trio_pointer_t ref, trio_pointer_t pointer));
-
-#ifdef __cplusplus
-} /* extern "C" */
-#endif
-
-#endif /* TRIO_TRIOP_H */
diff --git a/external/libxml2_android/jni/libxml2/triostr.c b/external/libxml2_android/jni/libxml2/triostr.c
deleted file mode 100644
index 123bbebe..00000000
--- a/external/libxml2_android/jni/libxml2/triostr.c
+++ /dev/null
@@ -1,2112 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-/*************************************************************************
- * Include files
- */
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <math.h>
-#include "triodef.h"
-#include "triostr.h"
-
-/*************************************************************************
- * Definitions
- */
-
-#if !defined(TRIO_STRING_PUBLIC)
-# define TRIO_STRING_PUBLIC TRIO_PUBLIC
-#endif
-#if !defined(TRIO_STRING_PRIVATE)
-# define TRIO_STRING_PRIVATE TRIO_PRIVATE
-#endif
-
-#if !defined(NULL)
-# define NULL 0
-#endif
-#if !defined(NIL)
-# define NIL ((char)0)
-#endif
-#if !defined(FALSE)
-# define FALSE (1 == 0)
-# define TRUE (! FALSE)
-#endif
-#if !defined(BOOLEAN_T)
-# define BOOLEAN_T int
-#endif
-
-#ifdef __VMS
-# define USE_STRTOD
-#elif defined(TRIO_COMPILER_SUPPORTS_C99)
-# define USE_STRTOD
-# define USE_STRTOF
-#elif defined(TRIO_COMPILER_MSVC)
-# define USE_STRTOD
-#endif
-
-#if defined(TRIO_PLATFORM_UNIX)
-# define USE_STRCASECMP
-# define USE_STRNCASECMP
-# if defined(TRIO_PLATFORM_SUNOS)
-# define USE_SYS_ERRLIST
-# else
-# define USE_STRERROR
-# endif
-# if defined(TRIO_PLATFORM_QNX)
-# define strcasecmp(x,y) stricmp(x,y)
-# define strncasecmp(x,y,n) strnicmp(x,y,n)
-# endif
-#elif defined(TRIO_PLATFORM_WIN32)
-# define USE_STRCASECMP
-# if defined(_WIN32_WCE)
-# define strcasecmp(x,y) _stricmp(x,y)
-# else
-# define strcasecmp(x,y) strcmpi(x,y)
-# endif
-#elif defined(TRIO_PLATFORM_OS400)
-# define USE_STRCASECMP
-# define USE_STRNCASECMP
-# include <strings.h>
-#endif
-
-#if !(defined(TRIO_PLATFORM_SUNOS))
-# define USE_TOLOWER
-# define USE_TOUPPER
-#endif
-
-/*************************************************************************
- * Structures
- */
-
-struct _trio_string_t
-{
- char *content;
- size_t length;
- size_t allocated;
-};
-
-/*************************************************************************
- * Constants
- */
-
-#if !defined(TRIO_MINIMAL)
-static TRIO_CONST char rcsid[] = "@(#)$Id$";
-#endif
-
-/*************************************************************************
- * Static String Functions
- */
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_static.h"
-#endif
-/** @addtogroup StaticStrings
- @{
-*/
-
-/**
- Create new string.
-
- @param size Size of new string.
- @return Pointer to string, or NULL if allocation failed.
-*/
-TRIO_STRING_PUBLIC char *
-trio_create
-TRIO_ARGS1((size),
- size_t size)
-{
- return (char *)TRIO_MALLOC(size);
-}
-
-
-/**
- Destroy string.
-
- @param string String to be freed.
-*/
-TRIO_STRING_PUBLIC void
-trio_destroy
-TRIO_ARGS1((string),
- char *string)
-{
- if (string)
- {
- TRIO_FREE(string);
- }
-}
-
-
-/**
- Count the number of characters in a string.
-
- @param string String to measure.
- @return Number of characters in @string.
-*/
-TRIO_STRING_PUBLIC size_t
-trio_length
-TRIO_ARGS1((string),
- TRIO_CONST char *string)
-{
- return strlen(string);
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Append @p source at the end of @p target.
-
- @param target Target string.
- @param source Source string.
- @return Boolean value indicating success or failure.
-
- @pre @p target must point to a memory chunk with sufficient room to
- contain the @p target string and @p source string.
- @pre No boundary checking is performed, so insufficient memory will
- result in a buffer overrun.
- @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC int
-trio_append
-TRIO_ARGS2((target, source),
- char *target,
- TRIO_CONST char *source)
-{
- assert(target);
- assert(source);
-
- return (strcat(target, source) != NULL);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-#if !defined(TRIO_MINIMAL)
-/**
- Append at most @p max characters from @p source to @p target.
-
- @param target Target string.
- @param max Maximum number of characters to append.
- @param source Source string.
- @return Boolean value indicating success or failure.
-
- @pre @p target must point to a memory chuck with sufficient room to
- contain the @p target string and the @p source string (at most @p max
- characters).
- @pre No boundary checking is performed, so insufficient memory will
- result in a buffer overrun.
- @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC int
-trio_append_max
-TRIO_ARGS3((target, max, source),
- char *target,
- size_t max,
- TRIO_CONST char *source)
-{
- size_t length;
-
- assert(target);
- assert(source);
-
- length = trio_length(target);
-
- if (max > length)
- {
- strncat(target, source, max - length - 1);
- }
- return TRUE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Determine if a string contains a substring.
-
- @param string String to be searched.
- @param substring String to be found.
- @return Boolean value indicating success or failure.
-*/
-TRIO_STRING_PUBLIC int
-trio_contains
-TRIO_ARGS2((string, substring),
- TRIO_CONST char *string,
- TRIO_CONST char *substring)
-{
- assert(string);
- assert(substring);
-
- return (0 != strstr(string, substring));
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Copy @p source to @p target.
-
- @param target Target string.
- @param source Source string.
- @return Boolean value indicating success or failure.
-
- @pre @p target must point to a memory chunk with sufficient room to
- contain the @p source string.
- @pre No boundary checking is performed, so insufficient memory will
- result in a buffer overrun.
- @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC int
-trio_copy
-TRIO_ARGS2((target, source),
- char *target,
- TRIO_CONST char *source)
-{
- assert(target);
- assert(source);
-
- (void)strcpy(target, source);
- return TRUE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
- Copy at most @p max characters from @p source to @p target.
-
- @param target Target string.
- @param max Maximum number of characters to append.
- @param source Source string.
- @return Boolean value indicating success or failure.
-
- @pre @p target must point to a memory chunk with sufficient room to
- contain the @p source string (at most @p max characters).
- @pre No boundary checking is performed, so insufficient memory will
- result in a buffer overrun.
- @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC int
-trio_copy_max
-TRIO_ARGS3((target, max, source),
- char *target,
- size_t max,
- TRIO_CONST char *source)
-{
- assert(target);
- assert(source);
- assert(max > 0); /* Includes != 0 */
-
- (void)strncpy(target, source, max - 1);
- target[max - 1] = (char)0;
- return TRUE;
-}
-
-
-/*
- * TrioDuplicateMax
- */
-TRIO_STRING_PRIVATE char *
-TrioDuplicateMax
-TRIO_ARGS2((source, size),
- TRIO_CONST char *source,
- size_t size)
-{
- char *target;
-
- assert(source);
-
- /* Make room for string plus a terminating zero */
- size++;
- target = trio_create(size);
- if (target)
- {
- trio_copy_max(target, size, source);
- }
- return target;
-}
-
-
-/**
- Duplicate @p source.
-
- @param source Source string.
- @return A copy of the @p source string.
-
- @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC char *
-trio_duplicate
-TRIO_ARGS1((source),
- TRIO_CONST char *source)
-{
- return TrioDuplicateMax(source, trio_length(source));
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Duplicate at most @p max characters of @p source.
-
- @param source Source string.
- @param max Maximum number of characters to duplicate.
- @return A copy of the @p source string.
-
- @post @p target will be zero terminated.
-*/
-TRIO_STRING_PUBLIC char *
-trio_duplicate_max TRIO_ARGS2((source, max),
- TRIO_CONST char *source,
- size_t max)
-{
- size_t length;
-
- assert(source);
- assert(max > 0);
-
- length = trio_length(source);
- if (length > max)
- {
- length = max;
- }
- return TrioDuplicateMax(source, length);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
- Compare if two strings are equal.
-
- @param first First string.
- @param second Second string.
- @return Boolean indicating whether the two strings are equal or not.
-
- Case-insensitive comparison.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal
-TRIO_ARGS2((first, second),
- TRIO_CONST char *first,
- TRIO_CONST char *second)
-{
- assert(first);
- assert(second);
-
- if ((first != NULL) && (second != NULL))
- {
-#if defined(USE_STRCASECMP)
- return (0 == strcasecmp(first, second));
-#else
- while ((*first != NIL) && (*second != NIL))
- {
- if (trio_to_upper(*first) != trio_to_upper(*second))
- {
- break;
- }
- first++;
- second++;
- }
- return ((*first == NIL) && (*second == NIL));
-#endif
- }
- return FALSE;
-}
-
-
-/**
- Compare if two strings are equal.
-
- @param first First string.
- @param second Second string.
- @return Boolean indicating whether the two strings are equal or not.
-
- Case-sensitive comparison.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal_case
-TRIO_ARGS2((first, second),
- TRIO_CONST char *first,
- TRIO_CONST char *second)
-{
- assert(first);
- assert(second);
-
- if ((first != NULL) && (second != NULL))
- {
- return (0 == strcmp(first, second));
- }
- return FALSE;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Compare if two strings up until the first @p max characters are equal.
-
- @param first First string.
- @param max Maximum number of characters to compare.
- @param second Second string.
- @return Boolean indicating whether the two strings are equal or not.
-
- Case-sensitive comparison.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal_case_max
-TRIO_ARGS3((first, max, second),
- TRIO_CONST char *first,
- size_t max,
- TRIO_CONST char *second)
-{
- assert(first);
- assert(second);
-
- if ((first != NULL) && (second != NULL))
- {
- return (0 == strncmp(first, second, max));
- }
- return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
- Compare if two strings are equal.
-
- @param first First string.
- @param second Second string.
- @return Boolean indicating whether the two strings are equal or not.
-
- Collating characters are considered equal.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal_locale
-TRIO_ARGS2((first, second),
- TRIO_CONST char *first,
- TRIO_CONST char *second)
-{
- assert(first);
- assert(second);
-
-#if defined(LC_COLLATE)
- return (strcoll(first, second) == 0);
-#else
- return trio_equal(first, second);
-#endif
-}
-
-
-/**
- Compare if two strings up until the first @p max characters are equal.
-
- @param first First string.
- @param max Maximum number of characters to compare.
- @param second Second string.
- @return Boolean indicating whether the two strings are equal or not.
-
- Case-insensitive comparison.
-*/
-TRIO_STRING_PUBLIC int
-trio_equal_max
-TRIO_ARGS3((first, max, second),
- TRIO_CONST char *first,
- size_t max,
- TRIO_CONST char *second)
-{
- assert(first);
- assert(second);
-
- if ((first != NULL) && (second != NULL))
- {
-#if defined(USE_STRNCASECMP)
- return (0 == strncasecmp(first, second, max));
-#else
- /* Not adequately tested yet */
- size_t cnt = 0;
- while ((*first != NIL) && (*second != NIL) && (cnt <= max))
- {
- if (trio_to_upper(*first) != trio_to_upper(*second))
- {
- break;
- }
- first++;
- second++;
- cnt++;
- }
- return ((cnt == max) || ((*first == NIL) && (*second == NIL)));
-#endif
- }
- return FALSE;
-}
-
-
-/**
- Provide a textual description of an error code (errno).
-
- @param error_number Error number.
- @return Textual description of @p error_number.
-*/
-TRIO_STRING_PUBLIC TRIO_CONST char *
-trio_error
-TRIO_ARGS1((error_number),
- int error_number)
-{
-#if defined(USE_STRERROR)
-
- return strerror(error_number);
-
-#elif defined(USE_SYS_ERRLIST)
-
- extern char *sys_errlist[];
- extern int sys_nerr;
-
- return ((error_number < 0) || (error_number >= sys_nerr))
- ? "unknown"
- : sys_errlist[error_number];
-
-#else
-
- return "unknown";
-
-#endif
-}
-
-
-#if !defined(TRIO_MINIMAL) && !defined(_WIN32_WCE)
-/**
- Format the date/time according to @p format.
-
- @param target Target string.
- @param max Maximum number of characters to format.
- @param format Formatting string.
- @param datetime Date/time structure.
- @return Number of formatted characters.
-
- The formatting string accepts the same specifiers as the standard C
- function strftime.
-*/
-TRIO_STRING_PUBLIC size_t
-trio_format_date_max
-TRIO_ARGS4((target, max, format, datetime),
- char *target,
- size_t max,
- TRIO_CONST char *format,
- TRIO_CONST struct tm *datetime)
-{
- assert(target);
- assert(format);
- assert(datetime);
- assert(max > 0);
-
- return strftime(target, max, format, datetime);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Calculate a hash value for a string.
-
- @param string String to be calculated on.
- @param type Hash function.
- @return Calculated hash value.
-
- @p type can be one of the following
- @li @c TRIO_HASH_PLAIN Plain hash function.
-*/
-TRIO_STRING_PUBLIC unsigned long
-trio_hash
-TRIO_ARGS2((string, type),
- TRIO_CONST char *string,
- int type)
-{
- unsigned long value = 0L;
- char ch;
-
- assert(string);
-
- switch (type)
- {
- case TRIO_HASH_PLAIN:
- while ( (ch = *string++) != NIL )
- {
- value *= 31;
- value += (unsigned long)ch;
- }
- break;
- default:
- assert(FALSE);
- break;
- }
- return value;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Find first occurrence of a character in a string.
-
- @param string String to be searched.
- @param character Character to be found.
- @param A pointer to the found character, or NULL if character was not found.
- */
-TRIO_STRING_PUBLIC char *
-trio_index
-TRIO_ARGS2((string, character),
- TRIO_CONST char *string,
- int character)
-{
- assert(string);
-
- return strchr(string, character);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Find last occurrence of a character in a string.
-
- @param string String to be searched.
- @param character Character to be found.
- @param A pointer to the found character, or NULL if character was not found.
- */
-TRIO_STRING_PUBLIC char *
-trio_index_last
-TRIO_ARGS2((string, character),
- TRIO_CONST char *string,
- int character)
-{
- assert(string);
-
- return strchr(string, character);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Convert the alphabetic letters in the string to lower-case.
-
- @param target String to be converted.
- @return Number of processed characters (converted or not).
-*/
-TRIO_STRING_PUBLIC int
-trio_lower
-TRIO_ARGS1((target),
- char *target)
-{
- assert(target);
-
- return trio_span_function(target, target, trio_to_lower);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Compare two strings using wildcards.
-
- @param string String to be searched.
- @param pattern Pattern, including wildcards, to search for.
- @return Boolean value indicating success or failure.
-
- Case-insensitive comparison.
-
- The following wildcards can be used
- @li @c * Match any number of characters.
- @li @c ? Match a single character.
-*/
-TRIO_STRING_PUBLIC int
-trio_match
-TRIO_ARGS2((string, pattern),
- TRIO_CONST char *string,
- TRIO_CONST char *pattern)
-{
- assert(string);
- assert(pattern);
-
- for (; ('*' != *pattern); ++pattern, ++string)
- {
- if (NIL == *string)
- {
- return (NIL == *pattern);
- }
- if ((trio_to_upper((int)*string) != trio_to_upper((int)*pattern))
- && ('?' != *pattern))
- {
- return FALSE;
- }
- }
- /* two-line patch to prevent *too* much recursiveness: */
- while ('*' == pattern[1])
- pattern++;
-
- do
- {
- if ( trio_match(string, &pattern[1]) )
- {
- return TRUE;
- }
- }
- while (*string++);
-
- return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Compare two strings using wildcards.
-
- @param string String to be searched.
- @param pattern Pattern, including wildcards, to search for.
- @return Boolean value indicating success or failure.
-
- Case-sensitive comparison.
-
- The following wildcards can be used
- @li @c * Match any number of characters.
- @li @c ? Match a single character.
-*/
-TRIO_STRING_PUBLIC int
-trio_match_case
-TRIO_ARGS2((string, pattern),
- TRIO_CONST char *string,
- TRIO_CONST char *pattern)
-{
- assert(string);
- assert(pattern);
-
- for (; ('*' != *pattern); ++pattern, ++string)
- {
- if (NIL == *string)
- {
- return (NIL == *pattern);
- }
- if ((*string != *pattern)
- && ('?' != *pattern))
- {
- return FALSE;
- }
- }
- /* two-line patch to prevent *too* much recursiveness: */
- while ('*' == pattern[1])
- pattern++;
-
- do
- {
- if ( trio_match_case(string, &pattern[1]) )
- {
- return TRUE;
- }
- }
- while (*string++);
-
- return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Execute a function on each character in string.
-
- @param target Target string.
- @param source Source string.
- @param Function Function to be executed.
- @return Number of processed characters.
-*/
-TRIO_STRING_PUBLIC size_t
-trio_span_function
-TRIO_ARGS3((target, source, Function),
- char *target,
- TRIO_CONST char *source,
- int (*Function) TRIO_PROTO((int)))
-{
- size_t count = 0;
-
- assert(target);
- assert(source);
- assert(Function);
-
- while (*source != NIL)
- {
- *target++ = Function(*source++);
- count++;
- }
- return count;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Search for a substring in a string.
-
- @param string String to be searched.
- @param substring String to be found.
- @return Pointer to first occurrence of @p substring in @p string, or NULL
- if no match was found.
-*/
-TRIO_STRING_PUBLIC char *
-trio_substring
-TRIO_ARGS2((string, substring),
- TRIO_CONST char *string,
- TRIO_CONST char *substring)
-{
- assert(string);
- assert(substring);
-
- return strstr(string, substring);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Search for a substring in the first @p max characters of a string.
-
- @param string String to be searched.
- @param max Maximum characters to be searched.
- @param substring String to be found.
- @return Pointer to first occurrence of @p substring in @p string, or NULL
- if no match was found.
-*/
-TRIO_STRING_PUBLIC char *
-trio_substring_max
-TRIO_ARGS3((string, max, substring),
- TRIO_CONST char *string,
- size_t max,
- TRIO_CONST char *substring)
-{
- size_t count;
- size_t size;
- char *result = NULL;
-
- assert(string);
- assert(substring);
-
- size = trio_length(substring);
- if (size <= max)
- {
- for (count = 0; count <= max - size; count++)
- {
- if (trio_equal_max(substring, size, &string[count]))
- {
- result = (char *)&string[count];
- break;
- }
- }
- }
- return result;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Tokenize string.
-
- @param string String to be tokenized.
- @param tokens String containing list of delimiting characters.
- @return Start of new token.
-
- @warning @p string will be destroyed.
-*/
-TRIO_STRING_PUBLIC char *
-trio_tokenize
-TRIO_ARGS2((string, delimiters),
- char *string,
- TRIO_CONST char *delimiters)
-{
- assert(delimiters);
-
- return strtok(string, delimiters);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
- Convert string to floating-point number.
-
- @param source String to be converted.
- @param endp Pointer to end of the converted string.
- @return A floating-point number.
-
- The following Extended Backus-Naur form is used
- @verbatim
- double ::= [ <sign> ]
- ( <number> |
- <number> <decimal_point> <number> |
- <decimal_point> <number> )
- [ <exponential> [ <sign> ] <number> ]
- number ::= 1*( <digit> )
- digit ::= ( '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' )
- exponential ::= ( 'e' | 'E' )
- sign ::= ( '-' | '+' )
- decimal_point ::= '.'
- @endverbatim
-*/
-/* FIXME: Add EBNF for hex-floats */
-TRIO_STRING_PUBLIC trio_long_double_t
-trio_to_long_double
-TRIO_ARGS2((source, endp),
- TRIO_CONST char *source,
- char **endp)
-{
-#if defined(USE_STRTOLD)
- return strtold(source, endp);
-#else
- int isNegative = FALSE;
- int isExponentNegative = FALSE;
- trio_long_double_t integer = 0.0;
- trio_long_double_t fraction = 0.0;
- unsigned long exponent = 0;
- trio_long_double_t base;
- trio_long_double_t fracdiv = 1.0;
- trio_long_double_t value = 0.0;
-
- /* First try hex-floats */
- if ((source[0] == '0') && ((source[1] == 'x') || (source[1] == 'X')))
- {
- base = 16.0;
- source += 2;
- while (isxdigit((int)*source))
- {
- integer *= base;
- integer += (isdigit((int)*source)
- ? (*source - '0')
- : 10 + (trio_to_upper((int)*source) - 'A'));
- source++;
- }
- if (*source == '.')
- {
- source++;
- while (isxdigit((int)*source))
- {
- fracdiv /= base;
- fraction += fracdiv * (isdigit((int)*source)
- ? (*source - '0')
- : 10 + (trio_to_upper((int)*source) - 'A'));
- source++;
- }
- if ((*source == 'p') || (*source == 'P'))
- {
- source++;
- if ((*source == '+') || (*source == '-'))
- {
- isExponentNegative = (*source == '-');
- source++;
- }
- while (isdigit((int)*source))
- {
- exponent *= 10;
- exponent += (*source - '0');
- source++;
- }
- }
- }
- /* For later use with exponent */
- base = 2.0;
- }
- else /* Then try normal decimal floats */
- {
- base = 10.0;
- isNegative = (*source == '-');
- /* Skip sign */
- if ((*source == '+') || (*source == '-'))
- source++;
-
- /* Integer part */
- while (isdigit((int)*source))
- {
- integer *= base;
- integer += (*source - '0');
- source++;
- }
-
- if (*source == '.')
- {
- source++; /* skip decimal point */
- while (isdigit((int)*source))
- {
- fracdiv /= base;
- fraction += (*source - '0') * fracdiv;
- source++;
- }
- }
- if ((*source == 'e')
- || (*source == 'E')
-#if TRIO_MICROSOFT
- || (*source == 'd')
- || (*source == 'D')
-#endif
- )
- {
- source++; /* Skip exponential indicator */
- isExponentNegative = (*source == '-');
- if ((*source == '+') || (*source == '-'))
- source++;
- while (isdigit((int)*source))
- {
- exponent *= (int)base;
- exponent += (*source - '0');
- source++;
- }
- }
- }
-
- value = integer + fraction;
- if (exponent != 0)
- {
- if (isExponentNegative)
- value /= pow(base, (double)exponent);
- else
- value *= pow(base, (double)exponent);
- }
- if (isNegative)
- value = -value;
-
- if (endp)
- *endp = (char *)source;
- return value;
-#endif
-}
-
-
-/**
- Convert string to floating-point number.
-
- @param source String to be converted.
- @param endp Pointer to end of the converted string.
- @return A floating-point number.
-
- See @ref trio_to_long_double.
-*/
-TRIO_STRING_PUBLIC double
-trio_to_double
-TRIO_ARGS2((source, endp),
- TRIO_CONST char *source,
- char **endp)
-{
-#if defined(USE_STRTOD)
- return strtod(source, endp);
-#else
- return (double)trio_to_long_double(source, endp);
-#endif
-}
-
-#if !defined(TRIO_MINIMAL)
-/**
- Convert string to floating-point number.
-
- @param source String to be converted.
- @param endp Pointer to end of the converted string.
- @return A floating-point number.
-
- See @ref trio_to_long_double.
-*/
-TRIO_STRING_PUBLIC float
-trio_to_float
-TRIO_ARGS2((source, endp),
- TRIO_CONST char *source,
- char **endp)
-{
-#if defined(USE_STRTOF)
- return strtof(source, endp);
-#else
- return (float)trio_to_long_double(source, endp);
-#endif
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
- Convert string to signed integer.
-
- @param string String to be converted.
- @param endp Pointer to end of converted string.
- @param base Radix number of number.
-*/
-TRIO_STRING_PUBLIC long
-trio_to_long
-TRIO_ARGS3((string, endp, base),
- TRIO_CONST char *string,
- char **endp,
- int base)
-{
- assert(string);
- assert((base >= 2) && (base <= 36));
-
- return strtol(string, endp, base);
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Convert one alphabetic letter to lower-case.
-
- @param source The letter to be converted.
- @return The converted letter.
-*/
-TRIO_STRING_PUBLIC int
-trio_to_lower
-TRIO_ARGS1((source),
- int source)
-{
-#if defined(USE_TOLOWER)
-
- return tolower(source);
-
-#else
-
- /* Does not handle locales or non-contiguous alphabetic characters */
- return ((source >= (int)'A') && (source <= (int)'Z'))
- ? source - 'A' + 'a'
- : source;
-
-#endif
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-#if !defined(TRIO_MINIMAL)
-/**
- Convert string to unsigned integer.
-
- @param string String to be converted.
- @param endp Pointer to end of converted string.
- @param base Radix number of number.
-*/
-TRIO_STRING_PUBLIC unsigned long
-trio_to_unsigned_long
-TRIO_ARGS3((string, endp, base),
- TRIO_CONST char *string,
- char **endp,
- int base)
-{
- assert(string);
- assert((base >= 2) && (base <= 36));
-
- return strtoul(string, endp, base);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
- Convert one alphabetic letter to upper-case.
-
- @param source The letter to be converted.
- @return The converted letter.
-*/
-TRIO_STRING_PUBLIC int
-trio_to_upper
-TRIO_ARGS1((source),
- int source)
-{
-#if defined(USE_TOUPPER)
-
- return toupper(source);
-
-#else
-
- /* Does not handle locales or non-contiguous alphabetic characters */
- return ((source >= (int)'a') && (source <= (int)'z'))
- ? source - 'a' + 'A'
- : source;
-
-#endif
-}
-
-#if !defined(TRIO_MINIMAL)
-/**
- Convert the alphabetic letters in the string to upper-case.
-
- @param target The string to be converted.
- @return The number of processed characters (converted or not).
-*/
-TRIO_STRING_PUBLIC int
-trio_upper
-TRIO_ARGS1((target),
- char *target)
-{
- assert(target);
-
- return trio_span_function(target, target, trio_to_upper);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/** @} End of StaticStrings */
-
-
-/*************************************************************************
- * Dynamic String Functions
- */
-
-#if defined(TRIO_DOCUMENTATION)
-# include "doc/doc_dynamic.h"
-#endif
-/** @addtogroup DynamicStrings
- @{
-*/
-
-/*
- * TrioStringAlloc
- */
-TRIO_STRING_PRIVATE trio_string_t *
-TrioStringAlloc(TRIO_NOARGS)
-{
- trio_string_t *self;
-
- self = (trio_string_t *)TRIO_MALLOC(sizeof(trio_string_t));
- if (self)
- {
- self->content = NULL;
- self->length = 0;
- self->allocated = 0;
- }
- return self;
-}
-
-
-/*
- * TrioStringGrow
- *
- * The size of the string will be increased by 'delta' characters. If
- * 'delta' is zero, the size will be doubled.
- */
-TRIO_STRING_PRIVATE BOOLEAN_T
-TrioStringGrow
-TRIO_ARGS2((self, delta),
- trio_string_t *self,
- size_t delta)
-{
- BOOLEAN_T status = FALSE;
- char *new_content;
- size_t new_size;
-
- new_size = (delta == 0)
- ? ( (self->allocated == 0) ? 1 : self->allocated * 2 )
- : self->allocated + delta;
-
- new_content = (char *)TRIO_REALLOC(self->content, new_size);
- if (new_content)
- {
- self->content = new_content;
- self->allocated = new_size;
- status = TRUE;
- }
- return status;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * TrioStringGrowTo
- *
- * The size of the string will be increased to 'length' plus one characters.
- * If 'length' is less than the original size, the original size will be
- * used (that is, the size of the string is never decreased).
- */
-TRIO_STRING_PRIVATE BOOLEAN_T
-TrioStringGrowTo
-TRIO_ARGS2((self, length),
- trio_string_t *self,
- size_t length)
-{
- length++; /* Room for terminating zero */
- return (self->allocated < length)
- ? TrioStringGrow(self, length - self->allocated)
- : TRUE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Create a new dynamic string.
-
- @param initial_size Initial size of the buffer.
- @return Newly allocated dynamic string, or NULL if memory allocation failed.
-*/
-TRIO_STRING_PUBLIC trio_string_t *
-trio_string_create
-TRIO_ARGS1((initial_size),
- int initial_size)
-{
- trio_string_t *self;
-
- self = TrioStringAlloc();
- if (self)
- {
- if (TrioStringGrow(self,
- (size_t)((initial_size > 0) ? initial_size : 1)))
- {
- self->content[0] = (char)0;
- self->allocated = initial_size;
- }
- else
- {
- trio_string_destroy(self);
- self = NULL;
- }
- }
- return self;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
- Deallocate the dynamic string and its contents.
-
- @param self Dynamic string
-*/
-TRIO_STRING_PUBLIC void
-trio_string_destroy
-TRIO_ARGS1((self),
- trio_string_t *self)
-{
- assert(self);
-
- if (self)
- {
- trio_destroy(self->content);
- TRIO_FREE(self);
- }
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Get a pointer to the content.
-
- @param self Dynamic string.
- @param offset Offset into content.
- @return Pointer to the content.
-
- @p Offset can be zero, positive, or negative. If @p offset is zero,
- then the start of the content will be returned. If @p offset is positive,
- then a pointer to @p offset number of characters from the beginning of the
- content is returned. If @p offset is negative, then a pointer to @p offset
- number of characters from the ending of the string, starting at the
- terminating zero, is returned.
-*/
-TRIO_STRING_PUBLIC char *
-trio_string_get
-TRIO_ARGS2((self, offset),
- trio_string_t *self,
- int offset)
-{
- char *result = NULL;
-
- assert(self);
-
- if (self->content != NULL)
- {
- if (self->length == 0)
- {
- (void)trio_string_length(self);
- }
- if (offset >= 0)
- {
- if (offset > (int)self->length)
- {
- offset = self->length;
- }
- }
- else
- {
- offset += self->length + 1;
- if (offset < 0)
- {
- offset = 0;
- }
- }
- result = &(self->content[offset]);
- }
- return result;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/**
- Extract the content.
-
- @param self Dynamic String
- @return Content of dynamic string.
-
- The content is removed from the dynamic string. This enables destruction
- of the dynamic string without deallocation of the content.
-*/
-TRIO_STRING_PUBLIC char *
-trio_string_extract
-TRIO_ARGS1((self),
- trio_string_t *self)
-{
- char *result;
-
- assert(self);
-
- result = self->content;
- /* FIXME: Allocate new empty buffer? */
- self->content = NULL;
- self->length = self->allocated = 0;
- return result;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Set the content of the dynamic string.
-
- @param self Dynamic String
- @param buffer The new content.
-
- Sets the content of the dynamic string to a copy @p buffer.
- An existing content will be deallocated first, if necessary.
-
- @remark
- This function will make a copy of @p buffer.
- You are responsible for deallocating @p buffer yourself.
-*/
-TRIO_STRING_PUBLIC void
-trio_xstring_set
-TRIO_ARGS2((self, buffer),
- trio_string_t *self,
- char *buffer)
-{
- assert(self);
-
- trio_destroy(self->content);
- self->content = trio_duplicate(buffer);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/*
- * trio_string_size
- */
-TRIO_STRING_PUBLIC int
-trio_string_size
-TRIO_ARGS1((self),
- trio_string_t *self)
-{
- assert(self);
-
- return self->allocated;
-}
-
-
-/*
- * trio_string_terminate
- */
-TRIO_STRING_PUBLIC void
-trio_string_terminate
-TRIO_ARGS1((self),
- trio_string_t *self)
-{
- trio_xstring_append_char(self, 0);
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Append the second string to the first.
-
- @param self Dynamic string to be modified.
- @param other Dynamic string to copy from.
- @return Boolean value indicating success or failure.
-*/
-TRIO_STRING_PUBLIC int
-trio_string_append
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- trio_string_t *other)
-{
- size_t length;
-
- assert(self);
- assert(other);
-
- length = self->length + other->length;
- if (!TrioStringGrowTo(self, length))
- goto error;
- trio_copy(&self->content[self->length], other->content);
- self->length = length;
- return TRUE;
-
- error:
- return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_append
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_append
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- TRIO_CONST char *other)
-{
- size_t length;
-
- assert(self);
- assert(other);
-
- length = self->length + trio_length(other);
- if (!TrioStringGrowTo(self, length))
- goto error;
- trio_copy(&self->content[self->length], other);
- self->length = length;
- return TRUE;
-
- error:
- return FALSE;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/*
- * trio_xstring_append_char
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_append_char
-TRIO_ARGS2((self, character),
- trio_string_t *self,
- char character)
-{
- assert(self);
-
- if ((int)self->length >= trio_string_size(self))
- {
- if (!TrioStringGrow(self, 0))
- goto error;
- }
- self->content[self->length] = character;
- self->length++;
- return TRUE;
-
- error:
- return FALSE;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/**
- Search for the first occurrence of second parameter in the first.
-
- @param self Dynamic string to be modified.
- @param other Dynamic string to copy from.
- @return Boolean value indicating success or failure.
-*/
-TRIO_STRING_PUBLIC int
-trio_string_contains
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- return trio_contains(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_contains
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_contains
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- return trio_contains(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_copy
- */
-TRIO_STRING_PUBLIC int
-trio_string_copy
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- self->length = 0;
- return trio_string_append(self, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_copy
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_copy
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- self->length = 0;
- return trio_xstring_append(self, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_duplicate
- */
-TRIO_STRING_PUBLIC trio_string_t *
-trio_string_duplicate
-TRIO_ARGS1((other),
- trio_string_t *other)
-{
- trio_string_t *self;
-
- assert(other);
-
- self = TrioStringAlloc();
- if (self)
- {
- self->content = TrioDuplicateMax(other->content, other->length);
- if (self->content)
- {
- self->length = other->length;
- self->allocated = self->length + 1;
- }
- else
- {
- self->length = self->allocated = 0;
- }
- }
- return self;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-/*
- * trio_xstring_duplicate
- */
-TRIO_STRING_PUBLIC trio_string_t *
-trio_xstring_duplicate
-TRIO_ARGS1((other),
- TRIO_CONST char *other)
-{
- trio_string_t *self;
-
- assert(other);
-
- self = TrioStringAlloc();
- if (self)
- {
- self->content = TrioDuplicateMax(other, trio_length(other));
- if (self->content)
- {
- self->length = trio_length(self->content);
- self->allocated = self->length + 1;
- }
- else
- {
- self->length = self->allocated = 0;
- }
- }
- return self;
-}
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_equal
- */
-TRIO_STRING_PUBLIC int
-trio_string_equal
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- return trio_equal(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_equal
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_equal
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- return trio_equal(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_equal_max
- */
-TRIO_STRING_PUBLIC int
-trio_string_equal_max
-TRIO_ARGS3((self, max, other),
- trio_string_t *self,
- size_t max,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- return trio_equal_max(self->content, max, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_equal_max
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_equal_max
-TRIO_ARGS3((self, max, other),
- trio_string_t *self,
- size_t max,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- return trio_equal_max(self->content, max, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_equal_case
- */
-TRIO_STRING_PUBLIC int
-trio_string_equal_case
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- return trio_equal_case(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_equal_case
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_equal_case
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- return trio_equal_case(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_equal_case_max
- */
-TRIO_STRING_PUBLIC int
-trio_string_equal_case_max
-TRIO_ARGS3((self, max, other),
- trio_string_t *self,
- size_t max,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- return trio_equal_case_max(self->content, max, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_equal_case_max
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_equal_case_max
-TRIO_ARGS3((self, max, other),
- trio_string_t *self,
- size_t max,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- return trio_equal_case_max(self->content, max, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL) && !defined(_WIN32_WCE)
-/*
- * trio_string_format_data_max
- */
-TRIO_STRING_PUBLIC size_t
-trio_string_format_date_max
-TRIO_ARGS4((self, max, format, datetime),
- trio_string_t *self,
- size_t max,
- TRIO_CONST char *format,
- TRIO_CONST struct tm *datetime)
-{
- assert(self);
-
- return trio_format_date_max(self->content, max, format, datetime);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_index
- */
-TRIO_STRING_PUBLIC char *
-trio_string_index
-TRIO_ARGS2((self, character),
- trio_string_t *self,
- int character)
-{
- assert(self);
-
- return trio_index(self->content, character);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_index_last
- */
-TRIO_STRING_PUBLIC char *
-trio_string_index_last
-TRIO_ARGS2((self, character),
- trio_string_t *self,
- int character)
-{
- assert(self);
-
- return trio_index_last(self->content, character);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_length
- */
-TRIO_STRING_PUBLIC int
-trio_string_length
-TRIO_ARGS1((self),
- trio_string_t *self)
-{
- assert(self);
-
- if (self->length == 0)
- {
- self->length = trio_length(self->content);
- }
- return self->length;
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_lower
- */
-TRIO_STRING_PUBLIC int
-trio_string_lower
-TRIO_ARGS1((self),
- trio_string_t *self)
-{
- assert(self);
-
- return trio_lower(self->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_match
- */
-TRIO_STRING_PUBLIC int
-trio_string_match
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- return trio_match(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_match
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_match
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- return trio_match(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_match_case
- */
-TRIO_STRING_PUBLIC int
-trio_string_match_case
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- return trio_match_case(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_match_case
- */
-TRIO_STRING_PUBLIC int
-trio_xstring_match_case
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- return trio_match_case(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_substring
- */
-TRIO_STRING_PUBLIC char *
-trio_string_substring
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- trio_string_t *other)
-{
- assert(self);
- assert(other);
-
- return trio_substring(self->content, other->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_xstring_substring
- */
-TRIO_STRING_PUBLIC char *
-trio_xstring_substring
-TRIO_ARGS2((self, other),
- trio_string_t *self,
- TRIO_CONST char *other)
-{
- assert(self);
- assert(other);
-
- return trio_substring(self->content, other);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-
-#if !defined(TRIO_MINIMAL)
-/*
- * trio_string_upper
- */
-TRIO_STRING_PUBLIC int
-trio_string_upper
-TRIO_ARGS1((self),
- trio_string_t *self)
-{
- assert(self);
-
- return trio_upper(self->content);
-}
-#endif /* !defined(TRIO_MINIMAL) */
-
-/** @} End of DynamicStrings */
diff --git a/external/libxml2_android/jni/libxml2/triostr.h b/external/libxml2_android/jni/libxml2/triostr.h
deleted file mode 100644
index 27f4ace2..00000000
--- a/external/libxml2_android/jni/libxml2/triostr.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*************************************************************************
- *
- * $Id$
- *
- * Copyright (C) 2001 Bjorn Reese and Daniel Stenberg.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
- * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
- *
- ************************************************************************/
-
-#ifndef TRIO_TRIOSTR_H
-#define TRIO_TRIOSTR_H
-
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include "triodef.h"
-#include "triop.h"
-
-enum {
- TRIO_HASH_NONE = 0,
- TRIO_HASH_PLAIN,
- TRIO_HASH_TWOSIGNED
-};
-
-#if !defined(TRIO_STRING_PUBLIC)
-# if !defined(TRIO_PUBLIC)
-# define TRIO_PUBLIC
-# endif
-# define TRIO_STRING_PUBLIC TRIO_PUBLIC
-#endif
-
-/*************************************************************************
- * String functions
- */
-
-TRIO_STRING_PUBLIC int trio_copy_max TRIO_PROTO((char *target, size_t max, const char *source));
-TRIO_STRING_PUBLIC char *trio_create TRIO_PROTO((size_t size));
-TRIO_STRING_PUBLIC void trio_destroy TRIO_PROTO((char *string));
-TRIO_STRING_PUBLIC char *trio_duplicate TRIO_PROTO((const char *source));
-TRIO_STRING_PUBLIC int trio_equal TRIO_PROTO((const char *first, const char *second));
-TRIO_STRING_PUBLIC int trio_equal_case TRIO_PROTO((const char *first, const char *second));
-TRIO_STRING_PUBLIC int trio_equal_locale TRIO_PROTO((const char *first, const char *second));
-TRIO_STRING_PUBLIC int trio_equal_max TRIO_PROTO((const char *first, size_t max, const char *second));
-TRIO_STRING_PUBLIC TRIO_CONST char *trio_error TRIO_PROTO((int));
-TRIO_STRING_PUBLIC size_t trio_length TRIO_PROTO((const char *string));
-TRIO_STRING_PUBLIC double trio_to_double TRIO_PROTO((const char *source, char **endp));
-TRIO_STRING_PUBLIC long trio_to_long TRIO_PROTO((const char *source, char **endp, int base));
-TRIO_STRING_PUBLIC trio_long_double_t trio_to_long_double TRIO_PROTO((const char *source, char **endp));
-TRIO_STRING_PUBLIC int trio_to_upper TRIO_PROTO((int source));
-
-#if !defined(TRIO_MINIMAL)
-
-TRIO_STRING_PUBLIC int trio_append TRIO_PROTO((char *target, const char *source));
-TRIO_STRING_PUBLIC int trio_append_max TRIO_PROTO((char *target, size_t max, const char *source));
-TRIO_STRING_PUBLIC int trio_contains TRIO_PROTO((const char *string, const char *substring));
-TRIO_STRING_PUBLIC int trio_copy TRIO_PROTO((char *target, const char *source));
-TRIO_STRING_PUBLIC char *trio_duplicate_max TRIO_PROTO((const char *source, size_t max));
-TRIO_STRING_PUBLIC int trio_equal_case_max TRIO_PROTO((const char *first, size_t max, const char *second));
-#if !defined(_WIN32_WCE)
-TRIO_STRING_PUBLIC size_t trio_format_date_max TRIO_PROTO((char *target, size_t max, const char *format, const struct tm *datetime));
-#endif
-TRIO_STRING_PUBLIC unsigned long trio_hash TRIO_PROTO((const char *string, int type));
-TRIO_STRING_PUBLIC char *trio_index TRIO_PROTO((const char *string, int character));
-TRIO_STRING_PUBLIC char *trio_index_last TRIO_PROTO((const char *string, int character));
-TRIO_STRING_PUBLIC int trio_lower TRIO_PROTO((char *target));
-TRIO_STRING_PUBLIC int trio_match TRIO_PROTO((const char *string, const char *pattern));
-TRIO_STRING_PUBLIC int trio_match_case TRIO_PROTO((const char *string, const char *pattern));
-TRIO_STRING_PUBLIC size_t trio_span_function TRIO_PROTO((char *target, const char *source, int (*Function) TRIO_PROTO((int))));
-TRIO_STRING_PUBLIC char *trio_substring TRIO_PROTO((const char *string, const char *substring));
-TRIO_STRING_PUBLIC char *trio_substring_max TRIO_PROTO((const char *string, size_t max, const char *substring));
-TRIO_STRING_PUBLIC float trio_to_float TRIO_PROTO((const char *source, char **endp));
-TRIO_STRING_PUBLIC int trio_to_lower TRIO_PROTO((int source));
-TRIO_STRING_PUBLIC unsigned long trio_to_unsigned_long TRIO_PROTO((const char *source, char **endp, int base));
-TRIO_STRING_PUBLIC char *trio_tokenize TRIO_PROTO((char *string, const char *delimiters));
-TRIO_STRING_PUBLIC int trio_upper TRIO_PROTO((char *target));
-
-#endif /* !defined(TRIO_MINIMAL) */
-
-/*************************************************************************
- * Dynamic string functions
- */
-
-/*
- * Opaque type for dynamic strings
- */
-
-typedef struct _trio_string_t trio_string_t;
-
-TRIO_STRING_PUBLIC void trio_string_destroy TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC char *trio_string_extract TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC int trio_string_size TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC void trio_string_terminate TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC int trio_xstring_append_char TRIO_PROTO((trio_string_t *self, char character));
-TRIO_STRING_PUBLIC trio_string_t *trio_xstring_duplicate TRIO_PROTO((const char *other));
-
-#if !defined(TRIO_MINIMAL)
-
-TRIO_STRING_PUBLIC trio_string_t *trio_string_create TRIO_PROTO((int initial_size));
-TRIO_STRING_PUBLIC char *trio_string_get TRIO_PROTO((trio_string_t *self, int offset));
-TRIO_STRING_PUBLIC void trio_xstring_set TRIO_PROTO((trio_string_t *self, char *buffer));
-
-TRIO_STRING_PUBLIC int trio_string_append TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_contains TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_copy TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC trio_string_t *trio_string_duplicate TRIO_PROTO((trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_equal TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_equal_max TRIO_PROTO((trio_string_t *self, size_t max, trio_string_t *second));
-TRIO_STRING_PUBLIC int trio_string_equal_case TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_equal_case_max TRIO_PROTO((trio_string_t *self, size_t max, trio_string_t *other));
-#if !defined(_WIN32_WCE)
-TRIO_STRING_PUBLIC size_t trio_string_format_date_max TRIO_PROTO((trio_string_t *self, size_t max, const char *format, const struct tm *datetime));
-#endif
-TRIO_STRING_PUBLIC char *trio_string_index TRIO_PROTO((trio_string_t *self, int character));
-TRIO_STRING_PUBLIC char *trio_string_index_last TRIO_PROTO((trio_string_t *self, int character));
-TRIO_STRING_PUBLIC int trio_string_length TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC int trio_string_lower TRIO_PROTO((trio_string_t *self));
-TRIO_STRING_PUBLIC int trio_string_match TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_match_case TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC char *trio_string_substring TRIO_PROTO((trio_string_t *self, trio_string_t *other));
-TRIO_STRING_PUBLIC int trio_string_upper TRIO_PROTO((trio_string_t *self));
-
-TRIO_STRING_PUBLIC int trio_xstring_append TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_contains TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_copy TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_equal TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_equal_max TRIO_PROTO((trio_string_t *self, size_t max, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_equal_case TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_equal_case_max TRIO_PROTO((trio_string_t *self, size_t max, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_match TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC int trio_xstring_match_case TRIO_PROTO((trio_string_t *self, const char *other));
-TRIO_STRING_PUBLIC char *trio_xstring_substring TRIO_PROTO((trio_string_t *self, const char *other));
-
-#endif /* !defined(TRIO_MINIMAL) */
-
-#endif /* TRIO_TRIOSTR_H */
diff --git a/external/libxml2_android/jni/libxml2/uri.c b/external/libxml2_android/jni/libxml2/uri.c
deleted file mode 100644
index 530ce212..00000000
--- a/external/libxml2_android/jni/libxml2/uri.c
+++ /dev/null
@@ -1,2568 +0,0 @@
-/**
- * uri.c: set of generic URI related routines
- *
- * Reference: RFCs 3986, 2732 and 2373
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-
-#include <libxml/xmlmemory.h>
-#include <libxml/uri.h>
-#include <libxml/globals.h>
-#include <libxml/xmlerror.h>
-
-/**
- * MAX_URI_LENGTH:
- *
- * The definition of the URI regexp in the above RFC has no size limit
- * In practice they are usually relativey short except for the
- * data URI scheme as defined in RFC 2397. Even for data URI the usual
- * maximum size before hitting random practical limits is around 64 KB
- * and 4KB is usually a maximum admitted limit for proper operations.
- * The value below is more a security limit than anything else and
- * really should never be hit by 'normal' operations
- * Set to 1 MByte in 2012, this is only enforced on output
- */
-#define MAX_URI_LENGTH 1024 * 1024
-
-static void
-xmlURIErrMemory(const char *extra)
-{
- if (extra)
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, NULL, XML_FROM_URI,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
- extra, NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
- else
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, NULL, XML_FROM_URI,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
- NULL, NULL, NULL, 0, 0,
- "Memory allocation failed\n");
-}
-
-static void xmlCleanURI(xmlURIPtr uri);
-
-/*
- * Old rule from 2396 used in legacy handling code
- * alpha = lowalpha | upalpha
- */
-#define IS_ALPHA(x) (IS_LOWALPHA(x) || IS_UPALPHA(x))
-
-
-/*
- * lowalpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" |
- * "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" |
- * "u" | "v" | "w" | "x" | "y" | "z"
- */
-
-#define IS_LOWALPHA(x) (((x) >= 'a') && ((x) <= 'z'))
-
-/*
- * upalpha = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" |
- * "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" |
- * "U" | "V" | "W" | "X" | "Y" | "Z"
- */
-#define IS_UPALPHA(x) (((x) >= 'A') && ((x) <= 'Z'))
-
-#ifdef IS_DIGIT
-#undef IS_DIGIT
-#endif
-/*
- * digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
- */
-#define IS_DIGIT(x) (((x) >= '0') && ((x) <= '9'))
-
-/*
- * alphanum = alpha | digit
- */
-
-#define IS_ALPHANUM(x) (IS_ALPHA(x) || IS_DIGIT(x))
-
-/*
- * mark = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
- */
-
-#define IS_MARK(x) (((x) == '-') || ((x) == '_') || ((x) == '.') || \
- ((x) == '!') || ((x) == '~') || ((x) == '*') || ((x) == '\'') || \
- ((x) == '(') || ((x) == ')'))
-
-/*
- * unwise = "{" | "}" | "|" | "\" | "^" | "`"
- */
-
-#define IS_UNWISE(p) \
- (((*(p) == '{')) || ((*(p) == '}')) || ((*(p) == '|')) || \
- ((*(p) == '\\')) || ((*(p) == '^')) || ((*(p) == '[')) || \
- ((*(p) == ']')) || ((*(p) == '`')))
-/*
- * reserved = ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," |
- * "[" | "]"
- */
-
-#define IS_RESERVED(x) (((x) == ';') || ((x) == '/') || ((x) == '?') || \
- ((x) == ':') || ((x) == '@') || ((x) == '&') || ((x) == '=') || \
- ((x) == '+') || ((x) == '$') || ((x) == ',') || ((x) == '[') || \
- ((x) == ']'))
-
-/*
- * unreserved = alphanum | mark
- */
-
-#define IS_UNRESERVED(x) (IS_ALPHANUM(x) || IS_MARK(x))
-
-/*
- * Skip to next pointer char, handle escaped sequences
- */
-
-#define NEXT(p) ((*p == '%')? p += 3 : p++)
-
-/*
- * Productions from the spec.
- *
- * authority = server | reg_name
- * reg_name = 1*( unreserved | escaped | "$" | "," |
- * ";" | ":" | "@" | "&" | "=" | "+" )
- *
- * path = [ abs_path | opaque_part ]
- */
-
-#define STRNDUP(s, n) (char *) xmlStrndup((const xmlChar *)(s), (n))
-
-/************************************************************************
- * *
- * RFC 3986 parser *
- * *
- ************************************************************************/
-
-#define ISA_DIGIT(p) ((*(p) >= '0') && (*(p) <= '9'))
-#define ISA_ALPHA(p) (((*(p) >= 'a') && (*(p) <= 'z')) || \
- ((*(p) >= 'A') && (*(p) <= 'Z')))
-#define ISA_HEXDIG(p) \
- (ISA_DIGIT(p) || ((*(p) >= 'a') && (*(p) <= 'f')) || \
- ((*(p) >= 'A') && (*(p) <= 'F')))
-
-/*
- * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
- * / "*" / "+" / "," / ";" / "="
- */
-#define ISA_SUB_DELIM(p) \
- (((*(p) == '!')) || ((*(p) == '$')) || ((*(p) == '&')) || \
- ((*(p) == '(')) || ((*(p) == ')')) || ((*(p) == '*')) || \
- ((*(p) == '+')) || ((*(p) == ',')) || ((*(p) == ';')) || \
- ((*(p) == '=')) || ((*(p) == '\'')))
-
-/*
- * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
- */
-#define ISA_GEN_DELIM(p) \
- (((*(p) == ':')) || ((*(p) == '/')) || ((*(p) == '?')) || \
- ((*(p) == '#')) || ((*(p) == '[')) || ((*(p) == ']')) || \
- ((*(p) == '@')))
-
-/*
- * reserved = gen-delims / sub-delims
- */
-#define ISA_RESERVED(p) (ISA_GEN_DELIM(p) || (ISA_SUB_DELIM(p)))
-
-/*
- * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
- */
-#define ISA_UNRESERVED(p) \
- ((ISA_ALPHA(p)) || (ISA_DIGIT(p)) || ((*(p) == '-')) || \
- ((*(p) == '.')) || ((*(p) == '_')) || ((*(p) == '~')))
-
-/*
- * pct-encoded = "%" HEXDIG HEXDIG
- */
-#define ISA_PCT_ENCODED(p) \
- ((*(p) == '%') && (ISA_HEXDIG(p + 1)) && (ISA_HEXDIG(p + 2)))
-
-/*
- * pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
- */
-#define ISA_PCHAR(p) \
- (ISA_UNRESERVED(p) || ISA_PCT_ENCODED(p) || ISA_SUB_DELIM(p) || \
- ((*(p) == ':')) || ((*(p) == '@')))
-
-/**
- * xmlParse3986Scheme:
- * @uri: pointer to an URI structure
- * @str: pointer to the string to analyze
- *
- * Parse an URI scheme
- *
- * ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986Scheme(xmlURIPtr uri, const char **str) {
- const char *cur;
-
- if (str == NULL)
- return(-1);
-
- cur = *str;
- if (!ISA_ALPHA(cur))
- return(2);
- cur++;
- while (ISA_ALPHA(cur) || ISA_DIGIT(cur) ||
- (*cur == '+') || (*cur == '-') || (*cur == '.')) cur++;
- if (uri != NULL) {
- if (uri->scheme != NULL) xmlFree(uri->scheme);
- uri->scheme = STRNDUP(*str, cur - *str);
- }
- *str = cur;
- return(0);
-}
-
-/**
- * xmlParse3986Fragment:
- * @uri: pointer to an URI structure
- * @str: pointer to the string to analyze
- *
- * Parse the query part of an URI
- *
- * fragment = *( pchar / "/" / "?" )
- * NOTE: the strict syntax as defined by 3986 does not allow '[' and ']'
- * in the fragment identifier but this is used very broadly for
- * xpointer scheme selection, so we are allowing it here to not break
- * for example all the DocBook processing chains.
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986Fragment(xmlURIPtr uri, const char **str)
-{
- const char *cur;
-
- if (str == NULL)
- return (-1);
-
- cur = *str;
-
- while ((ISA_PCHAR(cur)) || (*cur == '/') || (*cur == '?') ||
- (*cur == '[') || (*cur == ']') ||
- ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))
- NEXT(cur);
- if (uri != NULL) {
- if (uri->fragment != NULL)
- xmlFree(uri->fragment);
- if (uri->cleanup & 2)
- uri->fragment = STRNDUP(*str, cur - *str);
- else
- uri->fragment = xmlURIUnescapeString(*str, cur - *str, NULL);
- }
- *str = cur;
- return (0);
-}
-
-/**
- * xmlParse3986Query:
- * @uri: pointer to an URI structure
- * @str: pointer to the string to analyze
- *
- * Parse the query part of an URI
- *
- * query = *uric
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986Query(xmlURIPtr uri, const char **str)
-{
- const char *cur;
-
- if (str == NULL)
- return (-1);
-
- cur = *str;
-
- while ((ISA_PCHAR(cur)) || (*cur == '/') || (*cur == '?') ||
- ((uri != NULL) && (uri->cleanup & 1) && (IS_UNWISE(cur))))
- NEXT(cur);
- if (uri != NULL) {
- if (uri->query != NULL)
- xmlFree(uri->query);
- if (uri->cleanup & 2)
- uri->query = STRNDUP(*str, cur - *str);
- else
- uri->query = xmlURIUnescapeString(*str, cur - *str, NULL);
-
- /* Save the raw bytes of the query as well.
- * See: http://mail.gnome.org/archives/xml/2007-April/thread.html#00114
- */
- if (uri->query_raw != NULL)
- xmlFree (uri->query_raw);
- uri->query_raw = STRNDUP (*str, cur - *str);
- }
- *str = cur;
- return (0);
-}
-
-/**
- * xmlParse3986Port:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse a port part and fills in the appropriate fields
- * of the @uri structure
- *
- * port = *DIGIT
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986Port(xmlURIPtr uri, const char **str)
-{
- const char *cur = *str;
- unsigned port = 0; /* unsigned for defined overflow behavior */
-
- if (ISA_DIGIT(cur)) {
- while (ISA_DIGIT(cur)) {
- port = port * 10 + (*cur - '0');
-
- cur++;
- }
- if (uri != NULL)
- uri->port = port & INT_MAX; /* port value modulo INT_MAX+1 */
- *str = cur;
- return(0);
- }
- return(1);
-}
-
-/**
- * xmlParse3986Userinfo:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an user informations part and fills in the appropriate fields
- * of the @uri structure
- *
- * userinfo = *( unreserved / pct-encoded / sub-delims / ":" )
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986Userinfo(xmlURIPtr uri, const char **str)
-{
- const char *cur;
-
- cur = *str;
- while (ISA_UNRESERVED(cur) || ISA_PCT_ENCODED(cur) ||
- ISA_SUB_DELIM(cur) || (*cur == ':'))
- NEXT(cur);
- if (*cur == '@') {
- if (uri != NULL) {
- if (uri->user != NULL) xmlFree(uri->user);
- if (uri->cleanup & 2)
- uri->user = STRNDUP(*str, cur - *str);
- else
- uri->user = xmlURIUnescapeString(*str, cur - *str, NULL);
- }
- *str = cur;
- return(0);
- }
- return(1);
-}
-
-/**
- * xmlParse3986DecOctet:
- * @str: the string to analyze
- *
- * dec-octet = DIGIT ; 0-9
- * / %x31-39 DIGIT ; 10-99
- * / "1" 2DIGIT ; 100-199
- * / "2" %x30-34 DIGIT ; 200-249
- * / "25" %x30-35 ; 250-255
- *
- * Skip a dec-octet.
- *
- * Returns 0 if found and skipped, 1 otherwise
- */
-static int
-xmlParse3986DecOctet(const char **str) {
- const char *cur = *str;
-
- if (!(ISA_DIGIT(cur)))
- return(1);
- if (!ISA_DIGIT(cur+1))
- cur++;
- else if ((*cur != '0') && (ISA_DIGIT(cur + 1)) && (!ISA_DIGIT(cur+2)))
- cur += 2;
- else if ((*cur == '1') && (ISA_DIGIT(cur + 1)) && (ISA_DIGIT(cur + 2)))
- cur += 3;
- else if ((*cur == '2') && (*(cur + 1) >= '0') &&
- (*(cur + 1) <= '4') && (ISA_DIGIT(cur + 2)))
- cur += 3;
- else if ((*cur == '2') && (*(cur + 1) == '5') &&
- (*(cur + 2) >= '0') && (*(cur + 1) <= '5'))
- cur += 3;
- else
- return(1);
- *str = cur;
- return(0);
-}
-/**
- * xmlParse3986Host:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an host part and fills in the appropriate fields
- * of the @uri structure
- *
- * host = IP-literal / IPv4address / reg-name
- * IP-literal = "[" ( IPv6address / IPvFuture ) "]"
- * IPv4address = dec-octet "." dec-octet "." dec-octet "." dec-octet
- * reg-name = *( unreserved / pct-encoded / sub-delims )
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986Host(xmlURIPtr uri, const char **str)
-{
- const char *cur = *str;
- const char *host;
-
- host = cur;
- /*
- * IPv6 and future adressing scheme are enclosed between brackets
- */
- if (*cur == '[') {
- cur++;
- while ((*cur != ']') && (*cur != 0))
- cur++;
- if (*cur != ']')
- return(1);
- cur++;
- goto found;
- }
- /*
- * try to parse an IPv4
- */
- if (ISA_DIGIT(cur)) {
- if (xmlParse3986DecOctet(&cur) != 0)
- goto not_ipv4;
- if (*cur != '.')
- goto not_ipv4;
- cur++;
- if (xmlParse3986DecOctet(&cur) != 0)
- goto not_ipv4;
- if (*cur != '.')
- goto not_ipv4;
- if (xmlParse3986DecOctet(&cur) != 0)
- goto not_ipv4;
- if (*cur != '.')
- goto not_ipv4;
- if (xmlParse3986DecOctet(&cur) != 0)
- goto not_ipv4;
- goto found;
-not_ipv4:
- cur = *str;
- }
- /*
- * then this should be a hostname which can be empty
- */
- while (ISA_UNRESERVED(cur) || ISA_PCT_ENCODED(cur) || ISA_SUB_DELIM(cur))
- NEXT(cur);
-found:
- if (uri != NULL) {
- if (uri->authority != NULL) xmlFree(uri->authority);
- uri->authority = NULL;
- if (uri->server != NULL) xmlFree(uri->server);
- if (cur != host) {
- if (uri->cleanup & 2)
- uri->server = STRNDUP(host, cur - host);
- else
- uri->server = xmlURIUnescapeString(host, cur - host, NULL);
- } else
- uri->server = NULL;
- }
- *str = cur;
- return(0);
-}
-
-/**
- * xmlParse3986Authority:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an authority part and fills in the appropriate fields
- * of the @uri structure
- *
- * authority = [ userinfo "@" ] host [ ":" port ]
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986Authority(xmlURIPtr uri, const char **str)
-{
- const char *cur;
- int ret;
-
- cur = *str;
- /*
- * try to parse an userinfo and check for the trailing @
- */
- ret = xmlParse3986Userinfo(uri, &cur);
- if ((ret != 0) || (*cur != '@'))
- cur = *str;
- else
- cur++;
- ret = xmlParse3986Host(uri, &cur);
- if (ret != 0) return(ret);
- if (*cur == ':') {
- cur++;
- ret = xmlParse3986Port(uri, &cur);
- if (ret != 0) return(ret);
- }
- *str = cur;
- return(0);
-}
-
-/**
- * xmlParse3986Segment:
- * @str: the string to analyze
- * @forbid: an optional forbidden character
- * @empty: allow an empty segment
- *
- * Parse a segment and fills in the appropriate fields
- * of the @uri structure
- *
- * segment = *pchar
- * segment-nz = 1*pchar
- * segment-nz-nc = 1*( unreserved / pct-encoded / sub-delims / "@" )
- * ; non-zero-length segment without any colon ":"
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986Segment(const char **str, char forbid, int empty)
-{
- const char *cur;
-
- cur = *str;
- if (!ISA_PCHAR(cur)) {
- if (empty)
- return(0);
- return(1);
- }
- while (ISA_PCHAR(cur) && (*cur != forbid))
- NEXT(cur);
- *str = cur;
- return (0);
-}
-
-/**
- * xmlParse3986PathAbEmpty:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an path absolute or empty and fills in the appropriate fields
- * of the @uri structure
- *
- * path-abempty = *( "/" segment )
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986PathAbEmpty(xmlURIPtr uri, const char **str)
-{
- const char *cur;
- int ret;
-
- cur = *str;
-
- while (*cur == '/') {
- cur++;
- ret = xmlParse3986Segment(&cur, 0, 1);
- if (ret != 0) return(ret);
- }
- if (uri != NULL) {
- if (uri->path != NULL) xmlFree(uri->path);
- if (*str != cur) {
- if (uri->cleanup & 2)
- uri->path = STRNDUP(*str, cur - *str);
- else
- uri->path = xmlURIUnescapeString(*str, cur - *str, NULL);
- } else {
- uri->path = NULL;
- }
- }
- *str = cur;
- return (0);
-}
-
-/**
- * xmlParse3986PathAbsolute:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an path absolute and fills in the appropriate fields
- * of the @uri structure
- *
- * path-absolute = "/" [ segment-nz *( "/" segment ) ]
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986PathAbsolute(xmlURIPtr uri, const char **str)
-{
- const char *cur;
- int ret;
-
- cur = *str;
-
- if (*cur != '/')
- return(1);
- cur++;
- ret = xmlParse3986Segment(&cur, 0, 0);
- if (ret == 0) {
- while (*cur == '/') {
- cur++;
- ret = xmlParse3986Segment(&cur, 0, 1);
- if (ret != 0) return(ret);
- }
- }
- if (uri != NULL) {
- if (uri->path != NULL) xmlFree(uri->path);
- if (cur != *str) {
- if (uri->cleanup & 2)
- uri->path = STRNDUP(*str, cur - *str);
- else
- uri->path = xmlURIUnescapeString(*str, cur - *str, NULL);
- } else {
- uri->path = NULL;
- }
- }
- *str = cur;
- return (0);
-}
-
-/**
- * xmlParse3986PathRootless:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an path without root and fills in the appropriate fields
- * of the @uri structure
- *
- * path-rootless = segment-nz *( "/" segment )
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986PathRootless(xmlURIPtr uri, const char **str)
-{
- const char *cur;
- int ret;
-
- cur = *str;
-
- ret = xmlParse3986Segment(&cur, 0, 0);
- if (ret != 0) return(ret);
- while (*cur == '/') {
- cur++;
- ret = xmlParse3986Segment(&cur, 0, 1);
- if (ret != 0) return(ret);
- }
- if (uri != NULL) {
- if (uri->path != NULL) xmlFree(uri->path);
- if (cur != *str) {
- if (uri->cleanup & 2)
- uri->path = STRNDUP(*str, cur - *str);
- else
- uri->path = xmlURIUnescapeString(*str, cur - *str, NULL);
- } else {
- uri->path = NULL;
- }
- }
- *str = cur;
- return (0);
-}
-
-/**
- * xmlParse3986PathNoScheme:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an path which is not a scheme and fills in the appropriate fields
- * of the @uri structure
- *
- * path-noscheme = segment-nz-nc *( "/" segment )
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986PathNoScheme(xmlURIPtr uri, const char **str)
-{
- const char *cur;
- int ret;
-
- cur = *str;
-
- ret = xmlParse3986Segment(&cur, ':', 0);
- if (ret != 0) return(ret);
- while (*cur == '/') {
- cur++;
- ret = xmlParse3986Segment(&cur, 0, 1);
- if (ret != 0) return(ret);
- }
- if (uri != NULL) {
- if (uri->path != NULL) xmlFree(uri->path);
- if (cur != *str) {
- if (uri->cleanup & 2)
- uri->path = STRNDUP(*str, cur - *str);
- else
- uri->path = xmlURIUnescapeString(*str, cur - *str, NULL);
- } else {
- uri->path = NULL;
- }
- }
- *str = cur;
- return (0);
-}
-
-/**
- * xmlParse3986HierPart:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an hierarchical part and fills in the appropriate fields
- * of the @uri structure
- *
- * hier-part = "//" authority path-abempty
- * / path-absolute
- * / path-rootless
- * / path-empty
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986HierPart(xmlURIPtr uri, const char **str)
-{
- const char *cur;
- int ret;
-
- cur = *str;
-
- if ((*cur == '/') && (*(cur + 1) == '/')) {
- cur += 2;
- ret = xmlParse3986Authority(uri, &cur);
- if (ret != 0) return(ret);
- if (uri->server == NULL)
- uri->port = -1;
- ret = xmlParse3986PathAbEmpty(uri, &cur);
- if (ret != 0) return(ret);
- *str = cur;
- return(0);
- } else if (*cur == '/') {
- ret = xmlParse3986PathAbsolute(uri, &cur);
- if (ret != 0) return(ret);
- } else if (ISA_PCHAR(cur)) {
- ret = xmlParse3986PathRootless(uri, &cur);
- if (ret != 0) return(ret);
- } else {
- /* path-empty is effectively empty */
- if (uri != NULL) {
- if (uri->path != NULL) xmlFree(uri->path);
- uri->path = NULL;
- }
- }
- *str = cur;
- return (0);
-}
-
-/**
- * xmlParse3986RelativeRef:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an URI string and fills in the appropriate fields
- * of the @uri structure
- *
- * relative-ref = relative-part [ "?" query ] [ "#" fragment ]
- * relative-part = "//" authority path-abempty
- * / path-absolute
- * / path-noscheme
- * / path-empty
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986RelativeRef(xmlURIPtr uri, const char *str) {
- int ret;
-
- if ((*str == '/') && (*(str + 1) == '/')) {
- str += 2;
- ret = xmlParse3986Authority(uri, &str);
- if (ret != 0) return(ret);
- ret = xmlParse3986PathAbEmpty(uri, &str);
- if (ret != 0) return(ret);
- } else if (*str == '/') {
- ret = xmlParse3986PathAbsolute(uri, &str);
- if (ret != 0) return(ret);
- } else if (ISA_PCHAR(str)) {
- ret = xmlParse3986PathNoScheme(uri, &str);
- if (ret != 0) return(ret);
- } else {
- /* path-empty is effectively empty */
- if (uri != NULL) {
- if (uri->path != NULL) xmlFree(uri->path);
- uri->path = NULL;
- }
- }
-
- if (*str == '?') {
- str++;
- ret = xmlParse3986Query(uri, &str);
- if (ret != 0) return(ret);
- }
- if (*str == '#') {
- str++;
- ret = xmlParse3986Fragment(uri, &str);
- if (ret != 0) return(ret);
- }
- if (*str != 0) {
- xmlCleanURI(uri);
- return(1);
- }
- return(0);
-}
-
-
-/**
- * xmlParse3986URI:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an URI string and fills in the appropriate fields
- * of the @uri structure
- *
- * scheme ":" hier-part [ "?" query ] [ "#" fragment ]
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986URI(xmlURIPtr uri, const char *str) {
- int ret;
-
- ret = xmlParse3986Scheme(uri, &str);
- if (ret != 0) return(ret);
- if (*str != ':') {
- return(1);
- }
- str++;
- ret = xmlParse3986HierPart(uri, &str);
- if (ret != 0) return(ret);
- if (*str == '?') {
- str++;
- ret = xmlParse3986Query(uri, &str);
- if (ret != 0) return(ret);
- }
- if (*str == '#') {
- str++;
- ret = xmlParse3986Fragment(uri, &str);
- if (ret != 0) return(ret);
- }
- if (*str != 0) {
- xmlCleanURI(uri);
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlParse3986URIReference:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an URI reference string and fills in the appropriate fields
- * of the @uri structure
- *
- * URI-reference = URI / relative-ref
- *
- * Returns 0 or the error code
- */
-static int
-xmlParse3986URIReference(xmlURIPtr uri, const char *str) {
- int ret;
-
- if (str == NULL)
- return(-1);
- xmlCleanURI(uri);
-
- /*
- * Try first to parse absolute refs, then fallback to relative if
- * it fails.
- */
- ret = xmlParse3986URI(uri, str);
- if (ret != 0) {
- xmlCleanURI(uri);
- ret = xmlParse3986RelativeRef(uri, str);
- if (ret != 0) {
- xmlCleanURI(uri);
- return(ret);
- }
- }
- return(0);
-}
-
-/**
- * xmlParseURI:
- * @str: the URI string to analyze
- *
- * Parse an URI based on RFC 3986
- *
- * URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
- *
- * Returns a newly built xmlURIPtr or NULL in case of error
- */
-xmlURIPtr
-xmlParseURI(const char *str) {
- xmlURIPtr uri;
- int ret;
-
- if (str == NULL)
- return(NULL);
- uri = xmlCreateURI();
- if (uri != NULL) {
- ret = xmlParse3986URIReference(uri, str);
- if (ret) {
- xmlFreeURI(uri);
- return(NULL);
- }
- }
- return(uri);
-}
-
-/**
- * xmlParseURIReference:
- * @uri: pointer to an URI structure
- * @str: the string to analyze
- *
- * Parse an URI reference string based on RFC 3986 and fills in the
- * appropriate fields of the @uri structure
- *
- * URI-reference = URI / relative-ref
- *
- * Returns 0 or the error code
- */
-int
-xmlParseURIReference(xmlURIPtr uri, const char *str) {
- return(xmlParse3986URIReference(uri, str));
-}
-
-/**
- * xmlParseURIRaw:
- * @str: the URI string to analyze
- * @raw: if 1 unescaping of URI pieces are disabled
- *
- * Parse an URI but allows to keep intact the original fragments.
- *
- * URI-reference = URI / relative-ref
- *
- * Returns a newly built xmlURIPtr or NULL in case of error
- */
-xmlURIPtr
-xmlParseURIRaw(const char *str, int raw) {
- xmlURIPtr uri;
- int ret;
-
- if (str == NULL)
- return(NULL);
- uri = xmlCreateURI();
- if (uri != NULL) {
- if (raw) {
- uri->cleanup |= 2;
- }
- ret = xmlParseURIReference(uri, str);
- if (ret) {
- xmlFreeURI(uri);
- return(NULL);
- }
- }
- return(uri);
-}
-
-/************************************************************************
- * *
- * Generic URI structure functions *
- * *
- ************************************************************************/
-
-/**
- * xmlCreateURI:
- *
- * Simply creates an empty xmlURI
- *
- * Returns the new structure or NULL in case of error
- */
-xmlURIPtr
-xmlCreateURI(void) {
- xmlURIPtr ret;
-
- ret = (xmlURIPtr) xmlMalloc(sizeof(xmlURI));
- if (ret == NULL) {
- xmlURIErrMemory("creating URI structure\n");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlURI));
- return(ret);
-}
-
-/**
- * xmlSaveUriRealloc:
- *
- * Function to handle properly a reallocation when saving an URI
- * Also imposes some limit on the length of an URI string output
- */
-static xmlChar *
-xmlSaveUriRealloc(xmlChar *ret, int *max) {
- xmlChar *temp;
- int tmp;
-
- if (*max > MAX_URI_LENGTH) {
- xmlURIErrMemory("reaching arbitrary MAX_URI_LENGTH limit\n");
- return(NULL);
- }
- tmp = *max * 2;
- temp = (xmlChar *) xmlRealloc(ret, (tmp + 1));
- if (temp == NULL) {
- xmlURIErrMemory("saving URI\n");
- return(NULL);
- }
- *max = tmp;
- return(temp);
-}
-
-/**
- * xmlSaveUri:
- * @uri: pointer to an xmlURI
- *
- * Save the URI as an escaped string
- *
- * Returns a new string (to be deallocated by caller)
- */
-xmlChar *
-xmlSaveUri(xmlURIPtr uri) {
- xmlChar *ret = NULL;
- xmlChar *temp;
- const char *p;
- int len;
- int max;
-
- if (uri == NULL) return(NULL);
-
-
- max = 80;
- ret = (xmlChar *) xmlMallocAtomic((max + 1) * sizeof(xmlChar));
- if (ret == NULL) {
- xmlURIErrMemory("saving URI\n");
- return(NULL);
- }
- len = 0;
-
- if (uri->scheme != NULL) {
- p = uri->scheme;
- while (*p != 0) {
- if (len >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = *p++;
- }
- if (len >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = ':';
- }
- if (uri->opaque != NULL) {
- p = uri->opaque;
- while (*p != 0) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- if (IS_RESERVED(*(p)) || IS_UNRESERVED(*(p)))
- ret[len++] = *p++;
- else {
- int val = *(unsigned char *)p++;
- int hi = val / 0x10, lo = val % 0x10;
- ret[len++] = '%';
- ret[len++] = hi + (hi > 9? 'A'-10 : '0');
- ret[len++] = lo + (lo > 9? 'A'-10 : '0');
- }
- }
- } else {
- if ((uri->server != NULL) || (uri->port == -1)) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = '/';
- ret[len++] = '/';
- if (uri->user != NULL) {
- p = uri->user;
- while (*p != 0) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- if ((IS_UNRESERVED(*(p))) ||
- ((*(p) == ';')) || ((*(p) == ':')) ||
- ((*(p) == '&')) || ((*(p) == '=')) ||
- ((*(p) == '+')) || ((*(p) == '$')) ||
- ((*(p) == ',')))
- ret[len++] = *p++;
- else {
- int val = *(unsigned char *)p++;
- int hi = val / 0x10, lo = val % 0x10;
- ret[len++] = '%';
- ret[len++] = hi + (hi > 9? 'A'-10 : '0');
- ret[len++] = lo + (lo > 9? 'A'-10 : '0');
- }
- }
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = '@';
- }
- if (uri->server != NULL) {
- p = uri->server;
- while (*p != 0) {
- if (len >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = *p++;
- }
- if (uri->port > 0) {
- if (len + 10 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- len += snprintf((char *) &ret[len], max - len, ":%d", uri->port);
- }
- }
- } else if (uri->authority != NULL) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = '/';
- ret[len++] = '/';
- p = uri->authority;
- while (*p != 0) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- if ((IS_UNRESERVED(*(p))) ||
- ((*(p) == '$')) || ((*(p) == ',')) || ((*(p) == ';')) ||
- ((*(p) == ':')) || ((*(p) == '@')) || ((*(p) == '&')) ||
- ((*(p) == '=')) || ((*(p) == '+')))
- ret[len++] = *p++;
- else {
- int val = *(unsigned char *)p++;
- int hi = val / 0x10, lo = val % 0x10;
- ret[len++] = '%';
- ret[len++] = hi + (hi > 9? 'A'-10 : '0');
- ret[len++] = lo + (lo > 9? 'A'-10 : '0');
- }
- }
- } else if (uri->scheme != NULL) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- }
- if (uri->path != NULL) {
- p = uri->path;
- /*
- * the colon in file:///d: should not be escaped or
- * Windows accesses fail later.
- */
- if ((uri->scheme != NULL) &&
- (p[0] == '/') &&
- (((p[1] >= 'a') && (p[1] <= 'z')) ||
- ((p[1] >= 'A') && (p[1] <= 'Z'))) &&
- (p[2] == ':') &&
- (xmlStrEqual(BAD_CAST uri->scheme, BAD_CAST "file"))) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = *p++;
- ret[len++] = *p++;
- ret[len++] = *p++;
- }
- while (*p != 0) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- if ((IS_UNRESERVED(*(p))) || ((*(p) == '/')) ||
- ((*(p) == ';')) || ((*(p) == '@')) || ((*(p) == '&')) ||
- ((*(p) == '=')) || ((*(p) == '+')) || ((*(p) == '$')) ||
- ((*(p) == ',')))
- ret[len++] = *p++;
- else {
- int val = *(unsigned char *)p++;
- int hi = val / 0x10, lo = val % 0x10;
- ret[len++] = '%';
- ret[len++] = hi + (hi > 9? 'A'-10 : '0');
- ret[len++] = lo + (lo > 9? 'A'-10 : '0');
- }
- }
- }
- if (uri->query_raw != NULL) {
- if (len + 1 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = '?';
- p = uri->query_raw;
- while (*p != 0) {
- if (len + 1 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = *p++;
- }
- } else if (uri->query != NULL) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = '?';
- p = uri->query;
- while (*p != 0) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
- ret[len++] = *p++;
- else {
- int val = *(unsigned char *)p++;
- int hi = val / 0x10, lo = val % 0x10;
- ret[len++] = '%';
- ret[len++] = hi + (hi > 9? 'A'-10 : '0');
- ret[len++] = lo + (lo > 9? 'A'-10 : '0');
- }
- }
- }
- }
- if (uri->fragment != NULL) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len++] = '#';
- p = uri->fragment;
- while (*p != 0) {
- if (len + 3 >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- if ((IS_UNRESERVED(*(p))) || (IS_RESERVED(*(p))))
- ret[len++] = *p++;
- else {
- int val = *(unsigned char *)p++;
- int hi = val / 0x10, lo = val % 0x10;
- ret[len++] = '%';
- ret[len++] = hi + (hi > 9? 'A'-10 : '0');
- ret[len++] = lo + (lo > 9? 'A'-10 : '0');
- }
- }
- }
- if (len >= max) {
- temp = xmlSaveUriRealloc(ret, &max);
- if (temp == NULL) goto mem_error;
- ret = temp;
- }
- ret[len] = 0;
- return(ret);
-
-mem_error:
- xmlFree(ret);
- return(NULL);
-}
-
-/**
- * xmlPrintURI:
- * @stream: a FILE* for the output
- * @uri: pointer to an xmlURI
- *
- * Prints the URI in the stream @stream.
- */
-void
-xmlPrintURI(FILE *stream, xmlURIPtr uri) {
- xmlChar *out;
-
- out = xmlSaveUri(uri);
- if (out != NULL) {
- fprintf(stream, "%s", (char *) out);
- xmlFree(out);
- }
-}
-
-/**
- * xmlCleanURI:
- * @uri: pointer to an xmlURI
- *
- * Make sure the xmlURI struct is free of content
- */
-static void
-xmlCleanURI(xmlURIPtr uri) {
- if (uri == NULL) return;
-
- if (uri->scheme != NULL) xmlFree(uri->scheme);
- uri->scheme = NULL;
- if (uri->server != NULL) xmlFree(uri->server);
- uri->server = NULL;
- if (uri->user != NULL) xmlFree(uri->user);
- uri->user = NULL;
- if (uri->path != NULL) xmlFree(uri->path);
- uri->path = NULL;
- if (uri->fragment != NULL) xmlFree(uri->fragment);
- uri->fragment = NULL;
- if (uri->opaque != NULL) xmlFree(uri->opaque);
- uri->opaque = NULL;
- if (uri->authority != NULL) xmlFree(uri->authority);
- uri->authority = NULL;
- if (uri->query != NULL) xmlFree(uri->query);
- uri->query = NULL;
- if (uri->query_raw != NULL) xmlFree(uri->query_raw);
- uri->query_raw = NULL;
-}
-
-/**
- * xmlFreeURI:
- * @uri: pointer to an xmlURI
- *
- * Free up the xmlURI struct
- */
-void
-xmlFreeURI(xmlURIPtr uri) {
- if (uri == NULL) return;
-
- if (uri->scheme != NULL) xmlFree(uri->scheme);
- if (uri->server != NULL) xmlFree(uri->server);
- if (uri->user != NULL) xmlFree(uri->user);
- if (uri->path != NULL) xmlFree(uri->path);
- if (uri->fragment != NULL) xmlFree(uri->fragment);
- if (uri->opaque != NULL) xmlFree(uri->opaque);
- if (uri->authority != NULL) xmlFree(uri->authority);
- if (uri->query != NULL) xmlFree(uri->query);
- if (uri->query_raw != NULL) xmlFree(uri->query_raw);
- xmlFree(uri);
-}
-
-/************************************************************************
- * *
- * Helper functions *
- * *
- ************************************************************************/
-
-/**
- * xmlNormalizeURIPath:
- * @path: pointer to the path string
- *
- * Applies the 5 normalization steps to a path string--that is, RFC 2396
- * Section 5.2, steps 6.c through 6.g.
- *
- * Normalization occurs directly on the string, no new allocation is done
- *
- * Returns 0 or an error code
- */
-int
-xmlNormalizeURIPath(char *path) {
- char *cur, *out;
-
- if (path == NULL)
- return(-1);
-
- /* Skip all initial "/" chars. We want to get to the beginning of the
- * first non-empty segment.
- */
- cur = path;
- while (cur[0] == '/')
- ++cur;
- if (cur[0] == '\0')
- return(0);
-
- /* Keep everything we've seen so far. */
- out = cur;
-
- /*
- * Analyze each segment in sequence for cases (c) and (d).
- */
- while (cur[0] != '\0') {
- /*
- * c) All occurrences of "./", where "." is a complete path segment,
- * are removed from the buffer string.
- */
- if ((cur[0] == '.') && (cur[1] == '/')) {
- cur += 2;
- /* '//' normalization should be done at this point too */
- while (cur[0] == '/')
- cur++;
- continue;
- }
-
- /*
- * d) If the buffer string ends with "." as a complete path segment,
- * that "." is removed.
- */
- if ((cur[0] == '.') && (cur[1] == '\0'))
- break;
-
- /* Otherwise keep the segment. */
- while (cur[0] != '/') {
- if (cur[0] == '\0')
- goto done_cd;
- (out++)[0] = (cur++)[0];
- }
- /* nomalize // */
- while ((cur[0] == '/') && (cur[1] == '/'))
- cur++;
-
- (out++)[0] = (cur++)[0];
- }
- done_cd:
- out[0] = '\0';
-
- /* Reset to the beginning of the first segment for the next sequence. */
- cur = path;
- while (cur[0] == '/')
- ++cur;
- if (cur[0] == '\0')
- return(0);
-
- /*
- * Analyze each segment in sequence for cases (e) and (f).
- *
- * e) All occurrences of "<segment>/../", where <segment> is a
- * complete path segment not equal to "..", are removed from the
- * buffer string. Removal of these path segments is performed
- * iteratively, removing the leftmost matching pattern on each
- * iteration, until no matching pattern remains.
- *
- * f) If the buffer string ends with "<segment>/..", where <segment>
- * is a complete path segment not equal to "..", that
- * "<segment>/.." is removed.
- *
- * To satisfy the "iterative" clause in (e), we need to collapse the
- * string every time we find something that needs to be removed. Thus,
- * we don't need to keep two pointers into the string: we only need a
- * "current position" pointer.
- */
- while (1) {
- char *segp, *tmp;
-
- /* At the beginning of each iteration of this loop, "cur" points to
- * the first character of the segment we want to examine.
- */
-
- /* Find the end of the current segment. */
- segp = cur;
- while ((segp[0] != '/') && (segp[0] != '\0'))
- ++segp;
-
- /* If this is the last segment, we're done (we need at least two
- * segments to meet the criteria for the (e) and (f) cases).
- */
- if (segp[0] == '\0')
- break;
-
- /* If the first segment is "..", or if the next segment _isn't_ "..",
- * keep this segment and try the next one.
- */
- ++segp;
- if (((cur[0] == '.') && (cur[1] == '.') && (segp == cur+3))
- || ((segp[0] != '.') || (segp[1] != '.')
- || ((segp[2] != '/') && (segp[2] != '\0')))) {
- cur = segp;
- continue;
- }
-
- /* If we get here, remove this segment and the next one and back up
- * to the previous segment (if there is one), to implement the
- * "iteratively" clause. It's pretty much impossible to back up
- * while maintaining two pointers into the buffer, so just compact
- * the whole buffer now.
- */
-
- /* If this is the end of the buffer, we're done. */
- if (segp[2] == '\0') {
- cur[0] = '\0';
- break;
- }
- /* Valgrind complained, strcpy(cur, segp + 3); */
- /* string will overlap, do not use strcpy */
- tmp = cur;
- segp += 3;
- while ((*tmp++ = *segp++) != 0)
- ;
-
- /* If there are no previous segments, then keep going from here. */
- segp = cur;
- while ((segp > path) && ((--segp)[0] == '/'))
- ;
- if (segp == path)
- continue;
-
- /* "segp" is pointing to the end of a previous segment; find it's
- * start. We need to back up to the previous segment and start
- * over with that to handle things like "foo/bar/../..". If we
- * don't do this, then on the first pass we'll remove the "bar/..",
- * but be pointing at the second ".." so we won't realize we can also
- * remove the "foo/..".
- */
- cur = segp;
- while ((cur > path) && (cur[-1] != '/'))
- --cur;
- }
- out[0] = '\0';
-
- /*
- * g) If the resulting buffer string still begins with one or more
- * complete path segments of "..", then the reference is
- * considered to be in error. Implementations may handle this
- * error by retaining these components in the resolved path (i.e.,
- * treating them as part of the final URI), by removing them from
- * the resolved path (i.e., discarding relative levels above the
- * root), or by avoiding traversal of the reference.
- *
- * We discard them from the final path.
- */
- if (path[0] == '/') {
- cur = path;
- while ((cur[0] == '/') && (cur[1] == '.') && (cur[2] == '.')
- && ((cur[3] == '/') || (cur[3] == '\0')))
- cur += 3;
-
- if (cur != path) {
- out = path;
- while (cur[0] != '\0')
- (out++)[0] = (cur++)[0];
- out[0] = 0;
- }
- }
-
- return(0);
-}
-
-static int is_hex(char c) {
- if (((c >= '0') && (c <= '9')) ||
- ((c >= 'a') && (c <= 'f')) ||
- ((c >= 'A') && (c <= 'F')))
- return(1);
- return(0);
-}
-
-/**
- * xmlURIUnescapeString:
- * @str: the string to unescape
- * @len: the length in bytes to unescape (or <= 0 to indicate full string)
- * @target: optional destination buffer
- *
- * Unescaping routine, but does not check that the string is an URI. The
- * output is a direct unsigned char translation of %XX values (no encoding)
- * Note that the length of the result can only be smaller or same size as
- * the input string.
- *
- * Returns a copy of the string, but unescaped, will return NULL only in case
- * of error
- */
-char *
-xmlURIUnescapeString(const char *str, int len, char *target) {
- char *ret, *out;
- const char *in;
-
- if (str == NULL)
- return(NULL);
- if (len <= 0) len = strlen(str);
- if (len < 0) return(NULL);
-
- if (target == NULL) {
- ret = (char *) xmlMallocAtomic(len + 1);
- if (ret == NULL) {
- xmlURIErrMemory("unescaping URI value\n");
- return(NULL);
- }
- } else
- ret = target;
- in = str;
- out = ret;
- while(len > 0) {
- if ((len > 2) && (*in == '%') && (is_hex(in[1])) && (is_hex(in[2]))) {
- in++;
- if ((*in >= '0') && (*in <= '9'))
- *out = (*in - '0');
- else if ((*in >= 'a') && (*in <= 'f'))
- *out = (*in - 'a') + 10;
- else if ((*in >= 'A') && (*in <= 'F'))
- *out = (*in - 'A') + 10;
- in++;
- if ((*in >= '0') && (*in <= '9'))
- *out = *out * 16 + (*in - '0');
- else if ((*in >= 'a') && (*in <= 'f'))
- *out = *out * 16 + (*in - 'a') + 10;
- else if ((*in >= 'A') && (*in <= 'F'))
- *out = *out * 16 + (*in - 'A') + 10;
- in++;
- len -= 3;
- out++;
- } else {
- *out++ = *in++;
- len--;
- }
- }
- *out = 0;
- return(ret);
-}
-
-/**
- * xmlURIEscapeStr:
- * @str: string to escape
- * @list: exception list string of chars not to escape
- *
- * This routine escapes a string to hex, ignoring reserved characters (a-z)
- * and the characters in the exception list.
- *
- * Returns a new escaped string or NULL in case of error.
- */
-xmlChar *
-xmlURIEscapeStr(const xmlChar *str, const xmlChar *list) {
- xmlChar *ret, ch;
- xmlChar *temp;
- const xmlChar *in;
- int len, out;
-
- if (str == NULL)
- return(NULL);
- if (str[0] == 0)
- return(xmlStrdup(str));
- len = xmlStrlen(str);
- if (!(len > 0)) return(NULL);
-
- len += 20;
- ret = (xmlChar *) xmlMallocAtomic(len);
- if (ret == NULL) {
- xmlURIErrMemory("escaping URI value\n");
- return(NULL);
- }
- in = (const xmlChar *) str;
- out = 0;
- while(*in != 0) {
- if (len - out <= 3) {
- temp = xmlSaveUriRealloc(ret, &len);
- if (temp == NULL) {
- xmlURIErrMemory("escaping URI value\n");
- xmlFree(ret);
- return(NULL);
- }
- ret = temp;
- }
-
- ch = *in;
-
- if ((ch != '@') && (!IS_UNRESERVED(ch)) && (!xmlStrchr(list, ch))) {
- unsigned char val;
- ret[out++] = '%';
- val = ch >> 4;
- if (val <= 9)
- ret[out++] = '0' + val;
- else
- ret[out++] = 'A' + val - 0xA;
- val = ch & 0xF;
- if (val <= 9)
- ret[out++] = '0' + val;
- else
- ret[out++] = 'A' + val - 0xA;
- in++;
- } else {
- ret[out++] = *in++;
- }
-
- }
- ret[out] = 0;
- return(ret);
-}
-
-/**
- * xmlURIEscape:
- * @str: the string of the URI to escape
- *
- * Escaping routine, does not do validity checks !
- * It will try to escape the chars needing this, but this is heuristic
- * based it's impossible to be sure.
- *
- * Returns an copy of the string, but escaped
- *
- * 25 May 2001
- * Uses xmlParseURI and xmlURIEscapeStr to try to escape correctly
- * according to RFC2396.
- * - Carl Douglas
- */
-xmlChar *
-xmlURIEscape(const xmlChar * str)
-{
- xmlChar *ret, *segment = NULL;
- xmlURIPtr uri;
- int ret2;
-
-#define NULLCHK(p) if(!p) { \
- xmlURIErrMemory("escaping URI value\n"); \
- xmlFreeURI(uri); \
- return NULL; } \
-
- if (str == NULL)
- return (NULL);
-
- uri = xmlCreateURI();
- if (uri != NULL) {
- /*
- * Allow escaping errors in the unescaped form
- */
- uri->cleanup = 1;
- ret2 = xmlParseURIReference(uri, (const char *)str);
- if (ret2) {
- xmlFreeURI(uri);
- return (NULL);
- }
- }
-
- if (!uri)
- return NULL;
-
- ret = NULL;
-
- if (uri->scheme) {
- segment = xmlURIEscapeStr(BAD_CAST uri->scheme, BAD_CAST "+-.");
- NULLCHK(segment)
- ret = xmlStrcat(ret, segment);
- ret = xmlStrcat(ret, BAD_CAST ":");
- xmlFree(segment);
- }
-
- if (uri->authority) {
- segment =
- xmlURIEscapeStr(BAD_CAST uri->authority, BAD_CAST "/?;:@");
- NULLCHK(segment)
- ret = xmlStrcat(ret, BAD_CAST "//");
- ret = xmlStrcat(ret, segment);
- xmlFree(segment);
- }
-
- if (uri->user) {
- segment = xmlURIEscapeStr(BAD_CAST uri->user, BAD_CAST ";:&=+$,");
- NULLCHK(segment)
- ret = xmlStrcat(ret,BAD_CAST "//");
- ret = xmlStrcat(ret, segment);
- ret = xmlStrcat(ret, BAD_CAST "@");
- xmlFree(segment);
- }
-
- if (uri->server) {
- segment = xmlURIEscapeStr(BAD_CAST uri->server, BAD_CAST "/?;:@");
- NULLCHK(segment)
- if (uri->user == NULL)
- ret = xmlStrcat(ret, BAD_CAST "//");
- ret = xmlStrcat(ret, segment);
- xmlFree(segment);
- }
-
- if (uri->port) {
- xmlChar port[10];
-
- snprintf((char *) port, 10, "%d", uri->port);
- ret = xmlStrcat(ret, BAD_CAST ":");
- ret = xmlStrcat(ret, port);
- }
-
- if (uri->path) {
- segment =
- xmlURIEscapeStr(BAD_CAST uri->path, BAD_CAST ":@&=+$,/?;");
- NULLCHK(segment)
- ret = xmlStrcat(ret, segment);
- xmlFree(segment);
- }
-
- if (uri->query_raw) {
- ret = xmlStrcat(ret, BAD_CAST "?");
- ret = xmlStrcat(ret, BAD_CAST uri->query_raw);
- }
- else if (uri->query) {
- segment =
- xmlURIEscapeStr(BAD_CAST uri->query, BAD_CAST ";/?:@&=+,$");
- NULLCHK(segment)
- ret = xmlStrcat(ret, BAD_CAST "?");
- ret = xmlStrcat(ret, segment);
- xmlFree(segment);
- }
-
- if (uri->opaque) {
- segment = xmlURIEscapeStr(BAD_CAST uri->opaque, BAD_CAST "");
- NULLCHK(segment)
- ret = xmlStrcat(ret, segment);
- xmlFree(segment);
- }
-
- if (uri->fragment) {
- segment = xmlURIEscapeStr(BAD_CAST uri->fragment, BAD_CAST "#");
- NULLCHK(segment)
- ret = xmlStrcat(ret, BAD_CAST "#");
- ret = xmlStrcat(ret, segment);
- xmlFree(segment);
- }
-
- xmlFreeURI(uri);
-#undef NULLCHK
-
- return (ret);
-}
-
-/************************************************************************
- * *
- * Public functions *
- * *
- ************************************************************************/
-
-/**
- * xmlBuildURI:
- * @URI: the URI instance found in the document
- * @base: the base value
- *
- * Computes he final URI of the reference done by checking that
- * the given URI is valid, and building the final URI using the
- * base URI. This is processed according to section 5.2 of the
- * RFC 2396
- *
- * 5.2. Resolving Relative References to Absolute Form
- *
- * Returns a new URI string (to be freed by the caller) or NULL in case
- * of error.
- */
-xmlChar *
-xmlBuildURI(const xmlChar *URI, const xmlChar *base) {
- xmlChar *val = NULL;
- int ret, len, indx, cur, out;
- xmlURIPtr ref = NULL;
- xmlURIPtr bas = NULL;
- xmlURIPtr res = NULL;
-
- /*
- * 1) The URI reference is parsed into the potential four components and
- * fragment identifier, as described in Section 4.3.
- *
- * NOTE that a completely empty URI is treated by modern browsers
- * as a reference to "." rather than as a synonym for the current
- * URI. Should we do that here?
- */
- if (URI == NULL)
- ret = -1;
- else {
- if (*URI) {
- ref = xmlCreateURI();
- if (ref == NULL)
- goto done;
- ret = xmlParseURIReference(ref, (const char *) URI);
- }
- else
- ret = 0;
- }
- if (ret != 0)
- goto done;
- if ((ref != NULL) && (ref->scheme != NULL)) {
- /*
- * The URI is absolute don't modify.
- */
- val = xmlStrdup(URI);
- goto done;
- }
- if (base == NULL)
- ret = -1;
- else {
- bas = xmlCreateURI();
- if (bas == NULL)
- goto done;
- ret = xmlParseURIReference(bas, (const char *) base);
- }
- if (ret != 0) {
- if (ref)
- val = xmlSaveUri(ref);
- goto done;
- }
- if (ref == NULL) {
- /*
- * the base fragment must be ignored
- */
- if (bas->fragment != NULL) {
- xmlFree(bas->fragment);
- bas->fragment = NULL;
- }
- val = xmlSaveUri(bas);
- goto done;
- }
-
- /*
- * 2) If the path component is empty and the scheme, authority, and
- * query components are undefined, then it is a reference to the
- * current document and we are done. Otherwise, the reference URI's
- * query and fragment components are defined as found (or not found)
- * within the URI reference and not inherited from the base URI.
- *
- * NOTE that in modern browsers, the parsing differs from the above
- * in the following aspect: the query component is allowed to be
- * defined while still treating this as a reference to the current
- * document.
- */
- res = xmlCreateURI();
- if (res == NULL)
- goto done;
- if ((ref->scheme == NULL) && (ref->path == NULL) &&
- ((ref->authority == NULL) && (ref->server == NULL))) {
- if (bas->scheme != NULL)
- res->scheme = xmlMemStrdup(bas->scheme);
- if (bas->authority != NULL)
- res->authority = xmlMemStrdup(bas->authority);
- else if (bas->server != NULL) {
- res->server = xmlMemStrdup(bas->server);
- if (bas->user != NULL)
- res->user = xmlMemStrdup(bas->user);
- res->port = bas->port;
- }
- if (bas->path != NULL)
- res->path = xmlMemStrdup(bas->path);
- if (ref->query_raw != NULL)
- res->query_raw = xmlMemStrdup (ref->query_raw);
- else if (ref->query != NULL)
- res->query = xmlMemStrdup(ref->query);
- else if (bas->query_raw != NULL)
- res->query_raw = xmlMemStrdup(bas->query_raw);
- else if (bas->query != NULL)
- res->query = xmlMemStrdup(bas->query);
- if (ref->fragment != NULL)
- res->fragment = xmlMemStrdup(ref->fragment);
- goto step_7;
- }
-
- /*
- * 3) If the scheme component is defined, indicating that the reference
- * starts with a scheme name, then the reference is interpreted as an
- * absolute URI and we are done. Otherwise, the reference URI's
- * scheme is inherited from the base URI's scheme component.
- */
- if (ref->scheme != NULL) {
- val = xmlSaveUri(ref);
- goto done;
- }
- if (bas->scheme != NULL)
- res->scheme = xmlMemStrdup(bas->scheme);
-
- if (ref->query_raw != NULL)
- res->query_raw = xmlMemStrdup(ref->query_raw);
- else if (ref->query != NULL)
- res->query = xmlMemStrdup(ref->query);
- if (ref->fragment != NULL)
- res->fragment = xmlMemStrdup(ref->fragment);
-
- /*
- * 4) If the authority component is defined, then the reference is a
- * network-path and we skip to step 7. Otherwise, the reference
- * URI's authority is inherited from the base URI's authority
- * component, which will also be undefined if the URI scheme does not
- * use an authority component.
- */
- if ((ref->authority != NULL) || (ref->server != NULL)) {
- if (ref->authority != NULL)
- res->authority = xmlMemStrdup(ref->authority);
- else {
- res->server = xmlMemStrdup(ref->server);
- if (ref->user != NULL)
- res->user = xmlMemStrdup(ref->user);
- res->port = ref->port;
- }
- if (ref->path != NULL)
- res->path = xmlMemStrdup(ref->path);
- goto step_7;
- }
- if (bas->authority != NULL)
- res->authority = xmlMemStrdup(bas->authority);
- else if (bas->server != NULL) {
- res->server = xmlMemStrdup(bas->server);
- if (bas->user != NULL)
- res->user = xmlMemStrdup(bas->user);
- res->port = bas->port;
- }
-
- /*
- * 5) If the path component begins with a slash character ("/"), then
- * the reference is an absolute-path and we skip to step 7.
- */
- if ((ref->path != NULL) && (ref->path[0] == '/')) {
- res->path = xmlMemStrdup(ref->path);
- goto step_7;
- }
-
-
- /*
- * 6) If this step is reached, then we are resolving a relative-path
- * reference. The relative path needs to be merged with the base
- * URI's path. Although there are many ways to do this, we will
- * describe a simple method using a separate string buffer.
- *
- * Allocate a buffer large enough for the result string.
- */
- len = 2; /* extra / and 0 */
- if (ref->path != NULL)
- len += strlen(ref->path);
- if (bas->path != NULL)
- len += strlen(bas->path);
- res->path = (char *) xmlMallocAtomic(len);
- if (res->path == NULL) {
- xmlURIErrMemory("resolving URI against base\n");
- goto done;
- }
- res->path[0] = 0;
-
- /*
- * a) All but the last segment of the base URI's path component is
- * copied to the buffer. In other words, any characters after the
- * last (right-most) slash character, if any, are excluded.
- */
- cur = 0;
- out = 0;
- if (bas->path != NULL) {
- while (bas->path[cur] != 0) {
- while ((bas->path[cur] != 0) && (bas->path[cur] != '/'))
- cur++;
- if (bas->path[cur] == 0)
- break;
-
- cur++;
- while (out < cur) {
- res->path[out] = bas->path[out];
- out++;
- }
- }
- }
- res->path[out] = 0;
-
- /*
- * b) The reference's path component is appended to the buffer
- * string.
- */
- if (ref->path != NULL && ref->path[0] != 0) {
- indx = 0;
- /*
- * Ensure the path includes a '/'
- */
- if ((out == 0) && (bas->server != NULL))
- res->path[out++] = '/';
- while (ref->path[indx] != 0) {
- res->path[out++] = ref->path[indx++];
- }
- }
- res->path[out] = 0;
-
- /*
- * Steps c) to h) are really path normalization steps
- */
- xmlNormalizeURIPath(res->path);
-
-step_7:
-
- /*
- * 7) The resulting URI components, including any inherited from the
- * base URI, are recombined to give the absolute form of the URI
- * reference.
- */
- val = xmlSaveUri(res);
-
-done:
- if (ref != NULL)
- xmlFreeURI(ref);
- if (bas != NULL)
- xmlFreeURI(bas);
- if (res != NULL)
- xmlFreeURI(res);
- return(val);
-}
-
-/**
- * xmlBuildRelativeURI:
- * @URI: the URI reference under consideration
- * @base: the base value
- *
- * Expresses the URI of the reference in terms relative to the
- * base. Some examples of this operation include:
- * base = "http://site1.com/docs/book1.html"
- * URI input URI returned
- * docs/pic1.gif pic1.gif
- * docs/img/pic1.gif img/pic1.gif
- * img/pic1.gif ../img/pic1.gif
- * http://site1.com/docs/pic1.gif pic1.gif
- * http://site2.com/docs/pic1.gif http://site2.com/docs/pic1.gif
- *
- * base = "docs/book1.html"
- * URI input URI returned
- * docs/pic1.gif pic1.gif
- * docs/img/pic1.gif img/pic1.gif
- * img/pic1.gif ../img/pic1.gif
- * http://site1.com/docs/pic1.gif http://site1.com/docs/pic1.gif
- *
- *
- * Note: if the URI reference is really wierd or complicated, it may be
- * worthwhile to first convert it into a "nice" one by calling
- * xmlBuildURI (using 'base') before calling this routine,
- * since this routine (for reasonable efficiency) assumes URI has
- * already been through some validation.
- *
- * Returns a new URI string (to be freed by the caller) or NULL in case
- * error.
- */
-xmlChar *
-xmlBuildRelativeURI (const xmlChar * URI, const xmlChar * base)
-{
- xmlChar *val = NULL;
- int ret;
- int ix;
- int pos = 0;
- int nbslash = 0;
- int len;
- xmlURIPtr ref = NULL;
- xmlURIPtr bas = NULL;
- xmlChar *bptr, *uptr, *vptr;
- int remove_path = 0;
-
- if ((URI == NULL) || (*URI == 0))
- return NULL;
-
- /*
- * First parse URI into a standard form
- */
- ref = xmlCreateURI ();
- if (ref == NULL)
- return NULL;
- /* If URI not already in "relative" form */
- if (URI[0] != '.') {
- ret = xmlParseURIReference (ref, (const char *) URI);
- if (ret != 0)
- goto done; /* Error in URI, return NULL */
- } else
- ref->path = (char *)xmlStrdup(URI);
-
- /*
- * Next parse base into the same standard form
- */
- if ((base == NULL) || (*base == 0)) {
- val = xmlStrdup (URI);
- goto done;
- }
- bas = xmlCreateURI ();
- if (bas == NULL)
- goto done;
- if (base[0] != '.') {
- ret = xmlParseURIReference (bas, (const char *) base);
- if (ret != 0)
- goto done; /* Error in base, return NULL */
- } else
- bas->path = (char *)xmlStrdup(base);
-
- /*
- * If the scheme / server on the URI differs from the base,
- * just return the URI
- */
- if ((ref->scheme != NULL) &&
- ((bas->scheme == NULL) ||
- (xmlStrcmp ((xmlChar *)bas->scheme, (xmlChar *)ref->scheme)) ||
- (xmlStrcmp ((xmlChar *)bas->server, (xmlChar *)ref->server)))) {
- val = xmlStrdup (URI);
- goto done;
- }
- if (xmlStrEqual((xmlChar *)bas->path, (xmlChar *)ref->path)) {
- val = xmlStrdup(BAD_CAST "");
- goto done;
- }
- if (bas->path == NULL) {
- val = xmlStrdup((xmlChar *)ref->path);
- goto done;
- }
- if (ref->path == NULL) {
- ref->path = (char *) "/";
- remove_path = 1;
- }
-
- /*
- * At this point (at last!) we can compare the two paths
- *
- * First we take care of the special case where either of the
- * two path components may be missing (bug 316224)
- */
- if (bas->path == NULL) {
- if (ref->path != NULL) {
- uptr = (xmlChar *) ref->path;
- if (*uptr == '/')
- uptr++;
- /* exception characters from xmlSaveUri */
- val = xmlURIEscapeStr(uptr, BAD_CAST "/;&=+$,");
- }
- goto done;
- }
- bptr = (xmlChar *)bas->path;
- if (ref->path == NULL) {
- for (ix = 0; bptr[ix] != 0; ix++) {
- if (bptr[ix] == '/')
- nbslash++;
- }
- uptr = NULL;
- len = 1; /* this is for a string terminator only */
- } else {
- /*
- * Next we compare the two strings and find where they first differ
- */
- if ((ref->path[pos] == '.') && (ref->path[pos+1] == '/'))
- pos += 2;
- if ((*bptr == '.') && (bptr[1] == '/'))
- bptr += 2;
- else if ((*bptr == '/') && (ref->path[pos] != '/'))
- bptr++;
- while ((bptr[pos] == ref->path[pos]) && (bptr[pos] != 0))
- pos++;
-
- if (bptr[pos] == ref->path[pos]) {
- val = xmlStrdup(BAD_CAST "");
- goto done; /* (I can't imagine why anyone would do this) */
- }
-
- /*
- * In URI, "back up" to the last '/' encountered. This will be the
- * beginning of the "unique" suffix of URI
- */
- ix = pos;
- if ((ref->path[ix] == '/') && (ix > 0))
- ix--;
- else if ((ref->path[ix] == 0) && (ix > 1) && (ref->path[ix - 1] == '/'))
- ix -= 2;
- for (; ix > 0; ix--) {
- if (ref->path[ix] == '/')
- break;
- }
- if (ix == 0) {
- uptr = (xmlChar *)ref->path;
- } else {
- ix++;
- uptr = (xmlChar *)&ref->path[ix];
- }
-
- /*
- * In base, count the number of '/' from the differing point
- */
- if (bptr[pos] != ref->path[pos]) {/* check for trivial URI == base */
- for (; bptr[ix] != 0; ix++) {
- if (bptr[ix] == '/')
- nbslash++;
- }
- }
- len = xmlStrlen (uptr) + 1;
- }
-
- if (nbslash == 0) {
- if (uptr != NULL)
- /* exception characters from xmlSaveUri */
- val = xmlURIEscapeStr(uptr, BAD_CAST "/;&=+$,");
- goto done;
- }
-
- /*
- * Allocate just enough space for the returned string -
- * length of the remainder of the URI, plus enough space
- * for the "../" groups, plus one for the terminator
- */
- val = (xmlChar *) xmlMalloc (len + 3 * nbslash);
- if (val == NULL) {
- xmlURIErrMemory("building relative URI\n");
- goto done;
- }
- vptr = val;
- /*
- * Put in as many "../" as needed
- */
- for (; nbslash>0; nbslash--) {
- *vptr++ = '.';
- *vptr++ = '.';
- *vptr++ = '/';
- }
- /*
- * Finish up with the end of the URI
- */
- if (uptr != NULL) {
- if ((vptr > val) && (len > 0) &&
- (uptr[0] == '/') && (vptr[-1] == '/')) {
- memcpy (vptr, uptr + 1, len - 1);
- vptr[len - 2] = 0;
- } else {
- memcpy (vptr, uptr, len);
- vptr[len - 1] = 0;
- }
- } else {
- vptr[len - 1] = 0;
- }
-
- /* escape the freshly-built path */
- vptr = val;
- /* exception characters from xmlSaveUri */
- val = xmlURIEscapeStr(vptr, BAD_CAST "/;&=+$,");
- xmlFree(vptr);
-
-done:
- /*
- * Free the working variables
- */
- if (remove_path != 0)
- ref->path = NULL;
- if (ref != NULL)
- xmlFreeURI (ref);
- if (bas != NULL)
- xmlFreeURI (bas);
-
- return val;
-}
-
-/**
- * xmlCanonicPath:
- * @path: the resource locator in a filesystem notation
- *
- * Constructs a canonic path from the specified path.
- *
- * Returns a new canonic path, or a duplicate of the path parameter if the
- * construction fails. The caller is responsible for freeing the memory occupied
- * by the returned string. If there is insufficient memory available, or the
- * argument is NULL, the function returns NULL.
- */
-#define IS_WINDOWS_PATH(p) \
- ((p != NULL) && \
- (((p[0] >= 'a') && (p[0] <= 'z')) || \
- ((p[0] >= 'A') && (p[0] <= 'Z'))) && \
- (p[1] == ':') && ((p[2] == '/') || (p[2] == '\\')))
-xmlChar *
-xmlCanonicPath(const xmlChar *path)
-{
-/*
- * For Windows implementations, additional work needs to be done to
- * replace backslashes in pathnames with "forward slashes"
- */
-#if defined(_WIN32) && !defined(__CYGWIN__)
- int len = 0;
- int i = 0;
- xmlChar *p = NULL;
-#endif
- xmlURIPtr uri;
- xmlChar *ret;
- const xmlChar *absuri;
-
- if (path == NULL)
- return(NULL);
-
-#if defined(_WIN32)
- /*
- * We must not change the backslashes to slashes if the the path
- * starts with \\?\
- * Those paths can be up to 32k characters long.
- * Was added specifically for OpenOffice, those paths can't be converted
- * to URIs anyway.
- */
- if ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') &&
- (path[3] == '\\') )
- return xmlStrdup((const xmlChar *) path);
-#endif
-
- /* sanitize filename starting with // so it can be used as URI */
- if ((path[0] == '/') && (path[1] == '/') && (path[2] != '/'))
- path++;
-
- if ((uri = xmlParseURI((const char *) path)) != NULL) {
- xmlFreeURI(uri);
- return xmlStrdup(path);
- }
-
- /* Check if this is an "absolute uri" */
- absuri = xmlStrstr(path, BAD_CAST "://");
- if (absuri != NULL) {
- int l, j;
- unsigned char c;
- xmlChar *escURI;
-
- /*
- * this looks like an URI where some parts have not been
- * escaped leading to a parsing problem. Check that the first
- * part matches a protocol.
- */
- l = absuri - path;
- /* Bypass if first part (part before the '://') is > 20 chars */
- if ((l <= 0) || (l > 20))
- goto path_processing;
- /* Bypass if any non-alpha characters are present in first part */
- for (j = 0;j < l;j++) {
- c = path[j];
- if (!(((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'))))
- goto path_processing;
- }
-
- /* Escape all except the characters specified in the supplied path */
- escURI = xmlURIEscapeStr(path, BAD_CAST ":/?_.#&;=");
- if (escURI != NULL) {
- /* Try parsing the escaped path */
- uri = xmlParseURI((const char *) escURI);
- /* If successful, return the escaped string */
- if (uri != NULL) {
- xmlFreeURI(uri);
- return escURI;
- }
- xmlFree(escURI);
- }
- }
-
-path_processing:
-/* For Windows implementations, replace backslashes with 'forward slashes' */
-#if defined(_WIN32) && !defined(__CYGWIN__)
- /*
- * Create a URI structure
- */
- uri = xmlCreateURI();
- if (uri == NULL) { /* Guard against 'out of memory' */
- return(NULL);
- }
-
- len = xmlStrlen(path);
- if ((len > 2) && IS_WINDOWS_PATH(path)) {
- /* make the scheme 'file' */
- uri->scheme = xmlStrdup(BAD_CAST "file");
- /* allocate space for leading '/' + path + string terminator */
- uri->path = xmlMallocAtomic(len + 2);
- if (uri->path == NULL) {
- xmlFreeURI(uri); /* Guard agains 'out of memory' */
- return(NULL);
- }
- /* Put in leading '/' plus path */
- uri->path[0] = '/';
- p = uri->path + 1;
- strncpy(p, path, len + 1);
- } else {
- uri->path = xmlStrdup(path);
- if (uri->path == NULL) {
- xmlFreeURI(uri);
- return(NULL);
- }
- p = uri->path;
- }
- /* Now change all occurences of '\' to '/' */
- while (*p != '\0') {
- if (*p == '\\')
- *p = '/';
- p++;
- }
-
- if (uri->scheme == NULL) {
- ret = xmlStrdup((const xmlChar *) uri->path);
- } else {
- ret = xmlSaveUri(uri);
- }
-
- xmlFreeURI(uri);
-#else
- ret = xmlStrdup((const xmlChar *) path);
-#endif
- return(ret);
-}
-
-/**
- * xmlPathToURI:
- * @path: the resource locator in a filesystem notation
- *
- * Constructs an URI expressing the existing path
- *
- * Returns a new URI, or a duplicate of the path parameter if the
- * construction fails. The caller is responsible for freeing the memory
- * occupied by the returned string. If there is insufficient memory available,
- * or the argument is NULL, the function returns NULL.
- */
-xmlChar *
-xmlPathToURI(const xmlChar *path)
-{
- xmlURIPtr uri;
- xmlURI temp;
- xmlChar *ret, *cal;
-
- if (path == NULL)
- return(NULL);
-
- if ((uri = xmlParseURI((const char *) path)) != NULL) {
- xmlFreeURI(uri);
- return xmlStrdup(path);
- }
- cal = xmlCanonicPath(path);
- if (cal == NULL)
- return(NULL);
-#if defined(_WIN32) && !defined(__CYGWIN__)
- /* xmlCanonicPath can return an URI on Windows (is that the intended behaviour?)
- If 'cal' is a valid URI allready then we are done here, as continuing would make
- it invalid. */
- if ((uri = xmlParseURI((const char *) cal)) != NULL) {
- xmlFreeURI(uri);
- return cal;
- }
- /* 'cal' can contain a relative path with backslashes. If that is processed
- by xmlSaveURI, they will be escaped and the external entity loader machinery
- will fail. So convert them to slashes. Misuse 'ret' for walking. */
- ret = cal;
- while (*ret != '\0') {
- if (*ret == '\\')
- *ret = '/';
- ret++;
- }
-#endif
- memset(&temp, 0, sizeof(temp));
- temp.path = (char *) cal;
- ret = xmlSaveUri(&temp);
- xmlFree(cal);
- return(ret);
-}
-#define bottom_uri
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/valid.c b/external/libxml2_android/jni/libxml2/valid.c
deleted file mode 100644
index 19f84b82..00000000
--- a/external/libxml2_android/jni/libxml2/valid.c
+++ /dev/null
@@ -1,7054 +0,0 @@
-/*
- * valid.c : part of the code use to do the DTD handling and the validity
- * checking
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/hash.h>
-#include <libxml/uri.h>
-#include <libxml/valid.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/list.h>
-#include <libxml/globals.h>
-
-static xmlElementPtr xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name,
- int create);
-/* #define DEBUG_VALID_ALGO */
-/* #define DEBUG_REGEXP_ALGO */
-
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-#ifdef LIBXML_VALID_ENABLED
-static int
-xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type,
- const xmlChar *value);
-#endif
-/************************************************************************
- * *
- * Error handling routines *
- * *
- ************************************************************************/
-
-/**
- * xmlVErrMemory:
- * @ctxt: an XML validation parser context
- * @extra: extra informations
- *
- * Handle an out of memory error
- */
-static void
-xmlVErrMemory(xmlValidCtxtPtr ctxt, const char *extra)
-{
- xmlGenericErrorFunc channel = NULL;
- xmlParserCtxtPtr pctxt = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- channel = ctxt->error;
- data = ctxt->userData;
- /* Use the special values to detect if it is part of a parsing
- context */
- if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
- (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
- long delta = (char *) ctxt - (char *) ctxt->userData;
- if ((delta > 0) && (delta < 250))
- pctxt = ctxt->userData;
- }
- }
- if (extra)
- __xmlRaiseError(NULL, channel, data,
- pctxt, NULL, XML_FROM_VALID, XML_ERR_NO_MEMORY,
- XML_ERR_FATAL, NULL, 0, extra, NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
- else
- __xmlRaiseError(NULL, channel, data,
- pctxt, NULL, XML_FROM_VALID, XML_ERR_NO_MEMORY,
- XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0,
- "Memory allocation failed\n");
-}
-
-/**
- * xmlErrValid:
- * @ctxt: an XML validation parser context
- * @error: the error number
- * @extra: extra informations
- *
- * Handle a validation error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlErrValid(xmlValidCtxtPtr ctxt, xmlParserErrors error,
- const char *msg, const char *extra)
-{
- xmlGenericErrorFunc channel = NULL;
- xmlParserCtxtPtr pctxt = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- channel = ctxt->error;
- data = ctxt->userData;
- /* Use the special values to detect if it is part of a parsing
- context */
- if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
- (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
- long delta = (char *) ctxt - (char *) ctxt->userData;
- if ((delta > 0) && (delta < 250))
- pctxt = ctxt->userData;
- }
- }
- if (extra)
- __xmlRaiseError(NULL, channel, data,
- pctxt, NULL, XML_FROM_VALID, error,
- XML_ERR_ERROR, NULL, 0, extra, NULL, NULL, 0, 0,
- msg, extra);
- else
- __xmlRaiseError(NULL, channel, data,
- pctxt, NULL, XML_FROM_VALID, error,
- XML_ERR_ERROR, NULL, 0, NULL, NULL, NULL, 0, 0,
- "%s", msg);
-}
-
-#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-/**
- * xmlErrValidNode:
- * @ctxt: an XML validation parser context
- * @node: the node raising the error
- * @error: the error number
- * @str1: extra informations
- * @str2: extra informations
- * @str3: extra informations
- *
- * Handle a validation error, provide contextual informations
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlErrValidNode(xmlValidCtxtPtr ctxt,
- xmlNodePtr node, xmlParserErrors error,
- const char *msg, const xmlChar * str1,
- const xmlChar * str2, const xmlChar * str3)
-{
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- xmlParserCtxtPtr pctxt = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- channel = ctxt->error;
- data = ctxt->userData;
- /* Use the special values to detect if it is part of a parsing
- context */
- if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
- (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
- long delta = (char *) ctxt - (char *) ctxt->userData;
- if ((delta > 0) && (delta < 250))
- pctxt = ctxt->userData;
- }
- }
- __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error,
- XML_ERR_ERROR, NULL, 0,
- (const char *) str1,
- (const char *) str1,
- (const char *) str3, 0, 0, msg, str1, str2, str3);
-}
-#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
-
-#ifdef LIBXML_VALID_ENABLED
-/**
- * xmlErrValidNodeNr:
- * @ctxt: an XML validation parser context
- * @node: the node raising the error
- * @error: the error number
- * @str1: extra informations
- * @int2: extra informations
- * @str3: extra informations
- *
- * Handle a validation error, provide contextual informations
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlErrValidNodeNr(xmlValidCtxtPtr ctxt,
- xmlNodePtr node, xmlParserErrors error,
- const char *msg, const xmlChar * str1,
- int int2, const xmlChar * str3)
-{
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- xmlParserCtxtPtr pctxt = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- channel = ctxt->error;
- data = ctxt->userData;
- /* Use the special values to detect if it is part of a parsing
- context */
- if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
- (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
- long delta = (char *) ctxt - (char *) ctxt->userData;
- if ((delta > 0) && (delta < 250))
- pctxt = ctxt->userData;
- }
- }
- __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error,
- XML_ERR_ERROR, NULL, 0,
- (const char *) str1,
- (const char *) str3,
- NULL, int2, 0, msg, str1, int2, str3);
-}
-
-/**
- * xmlErrValidWarning:
- * @ctxt: an XML validation parser context
- * @node: the node raising the error
- * @error: the error number
- * @str1: extra information
- * @str2: extra information
- * @str3: extra information
- *
- * Handle a validation error, provide contextual information
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlErrValidWarning(xmlValidCtxtPtr ctxt,
- xmlNodePtr node, xmlParserErrors error,
- const char *msg, const xmlChar * str1,
- const xmlChar * str2, const xmlChar * str3)
-{
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- xmlParserCtxtPtr pctxt = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- channel = ctxt->warning;
- data = ctxt->userData;
- /* Use the special values to detect if it is part of a parsing
- context */
- if ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
- (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1)) {
- long delta = (char *) ctxt - (char *) ctxt->userData;
- if ((delta > 0) && (delta < 250))
- pctxt = ctxt->userData;
- }
- }
- __xmlRaiseError(schannel, channel, data, pctxt, node, XML_FROM_VALID, error,
- XML_ERR_WARNING, NULL, 0,
- (const char *) str1,
- (const char *) str1,
- (const char *) str3, 0, 0, msg, str1, str2, str3);
-}
-
-
-
-#ifdef LIBXML_REGEXP_ENABLED
-/*
- * If regexp are enabled we can do continuous validation without the
- * need of a tree to validate the content model. this is done in each
- * callbacks.
- * Each xmlValidState represent the validation state associated to the
- * set of nodes currently open from the document root to the current element.
- */
-
-
-typedef struct _xmlValidState {
- xmlElementPtr elemDecl; /* pointer to the content model */
- xmlNodePtr node; /* pointer to the current node */
- xmlRegExecCtxtPtr exec; /* regexp runtime */
-} _xmlValidState;
-
-
-static int
-vstateVPush(xmlValidCtxtPtr ctxt, xmlElementPtr elemDecl, xmlNodePtr node) {
- if ((ctxt->vstateMax == 0) || (ctxt->vstateTab == NULL)) {
- ctxt->vstateMax = 10;
- ctxt->vstateTab = (xmlValidState *) xmlMalloc(ctxt->vstateMax *
- sizeof(ctxt->vstateTab[0]));
- if (ctxt->vstateTab == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- return(-1);
- }
- }
-
- if (ctxt->vstateNr >= ctxt->vstateMax) {
- xmlValidState *tmp;
-
- tmp = (xmlValidState *) xmlRealloc(ctxt->vstateTab,
- 2 * ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
- if (tmp == NULL) {
- xmlVErrMemory(ctxt, "realloc failed");
- return(-1);
- }
- ctxt->vstateMax *= 2;
- ctxt->vstateTab = tmp;
- }
- ctxt->vstate = &ctxt->vstateTab[ctxt->vstateNr];
- ctxt->vstateTab[ctxt->vstateNr].elemDecl = elemDecl;
- ctxt->vstateTab[ctxt->vstateNr].node = node;
- if ((elemDecl != NULL) && (elemDecl->etype == XML_ELEMENT_TYPE_ELEMENT)) {
- if (elemDecl->contModel == NULL)
- xmlValidBuildContentModel(ctxt, elemDecl);
- if (elemDecl->contModel != NULL) {
- ctxt->vstateTab[ctxt->vstateNr].exec =
- xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL);
- } else {
- ctxt->vstateTab[ctxt->vstateNr].exec = NULL;
- xmlErrValidNode(ctxt, (xmlNodePtr) elemDecl,
- XML_ERR_INTERNAL_ERROR,
- "Failed to build content model regexp for %s\n",
- node->name, NULL, NULL);
- }
- }
- return(ctxt->vstateNr++);
-}
-
-static int
-vstateVPop(xmlValidCtxtPtr ctxt) {
- xmlElementPtr elemDecl;
-
- if (ctxt->vstateNr < 1) return(-1);
- ctxt->vstateNr--;
- elemDecl = ctxt->vstateTab[ctxt->vstateNr].elemDecl;
- ctxt->vstateTab[ctxt->vstateNr].elemDecl = NULL;
- ctxt->vstateTab[ctxt->vstateNr].node = NULL;
- if ((elemDecl != NULL) && (elemDecl->etype == XML_ELEMENT_TYPE_ELEMENT)) {
- xmlRegFreeExecCtxt(ctxt->vstateTab[ctxt->vstateNr].exec);
- }
- ctxt->vstateTab[ctxt->vstateNr].exec = NULL;
- if (ctxt->vstateNr >= 1)
- ctxt->vstate = &ctxt->vstateTab[ctxt->vstateNr - 1];
- else
- ctxt->vstate = NULL;
- return(ctxt->vstateNr);
-}
-
-#else /* not LIBXML_REGEXP_ENABLED */
-/*
- * If regexp are not enabled, it uses a home made algorithm less
- * complex and easier to
- * debug/maintain than a generic NFA -> DFA state based algo. The
- * only restriction is on the deepness of the tree limited by the
- * size of the occurs bitfield
- *
- * this is the content of a saved state for rollbacks
- */
-
-#define ROLLBACK_OR 0
-#define ROLLBACK_PARENT 1
-
-typedef struct _xmlValidState {
- xmlElementContentPtr cont; /* pointer to the content model subtree */
- xmlNodePtr node; /* pointer to the current node in the list */
- long occurs;/* bitfield for multiple occurrences */
- unsigned char depth; /* current depth in the overall tree */
- unsigned char state; /* ROLLBACK_XXX */
-} _xmlValidState;
-
-#define MAX_RECURSE 25000
-#define MAX_DEPTH ((sizeof(_xmlValidState.occurs)) * 8)
-#define CONT ctxt->vstate->cont
-#define NODE ctxt->vstate->node
-#define DEPTH ctxt->vstate->depth
-#define OCCURS ctxt->vstate->occurs
-#define STATE ctxt->vstate->state
-
-#define OCCURRENCE (ctxt->vstate->occurs & (1 << DEPTH))
-#define PARENT_OCCURRENCE (ctxt->vstate->occurs & ((1 << DEPTH) - 1))
-
-#define SET_OCCURRENCE ctxt->vstate->occurs |= (1 << DEPTH)
-#define RESET_OCCURRENCE ctxt->vstate->occurs &= ((1 << DEPTH) - 1)
-
-static int
-vstateVPush(xmlValidCtxtPtr ctxt, xmlElementContentPtr cont,
- xmlNodePtr node, unsigned char depth, long occurs,
- unsigned char state) {
- int i = ctxt->vstateNr - 1;
-
- if (ctxt->vstateNr > MAX_RECURSE) {
- return(-1);
- }
- if (ctxt->vstateTab == NULL) {
- ctxt->vstateMax = 8;
- ctxt->vstateTab = (xmlValidState *) xmlMalloc(
- ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
- if (ctxt->vstateTab == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- return(-1);
- }
- }
- if (ctxt->vstateNr >= ctxt->vstateMax) {
- xmlValidState *tmp;
-
- tmp = (xmlValidState *) xmlRealloc(ctxt->vstateTab,
- 2 * ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
- if (tmp == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- return(-1);
- }
- ctxt->vstateMax *= 2;
- ctxt->vstateTab = tmp;
- ctxt->vstate = &ctxt->vstateTab[0];
- }
- /*
- * Don't push on the stack a state already here
- */
- if ((i >= 0) && (ctxt->vstateTab[i].cont == cont) &&
- (ctxt->vstateTab[i].node == node) &&
- (ctxt->vstateTab[i].depth == depth) &&
- (ctxt->vstateTab[i].occurs == occurs) &&
- (ctxt->vstateTab[i].state == state))
- return(ctxt->vstateNr);
- ctxt->vstateTab[ctxt->vstateNr].cont = cont;
- ctxt->vstateTab[ctxt->vstateNr].node = node;
- ctxt->vstateTab[ctxt->vstateNr].depth = depth;
- ctxt->vstateTab[ctxt->vstateNr].occurs = occurs;
- ctxt->vstateTab[ctxt->vstateNr].state = state;
- return(ctxt->vstateNr++);
-}
-
-static int
-vstateVPop(xmlValidCtxtPtr ctxt) {
- if (ctxt->vstateNr <= 1) return(-1);
- ctxt->vstateNr--;
- ctxt->vstate = &ctxt->vstateTab[0];
- ctxt->vstate->cont = ctxt->vstateTab[ctxt->vstateNr].cont;
- ctxt->vstate->node = ctxt->vstateTab[ctxt->vstateNr].node;
- ctxt->vstate->depth = ctxt->vstateTab[ctxt->vstateNr].depth;
- ctxt->vstate->occurs = ctxt->vstateTab[ctxt->vstateNr].occurs;
- ctxt->vstate->state = ctxt->vstateTab[ctxt->vstateNr].state;
- return(ctxt->vstateNr);
-}
-
-#endif /* LIBXML_REGEXP_ENABLED */
-
-static int
-nodeVPush(xmlValidCtxtPtr ctxt, xmlNodePtr value)
-{
- if (ctxt->nodeMax <= 0) {
- ctxt->nodeMax = 4;
- ctxt->nodeTab =
- (xmlNodePtr *) xmlMalloc(ctxt->nodeMax *
- sizeof(ctxt->nodeTab[0]));
- if (ctxt->nodeTab == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- ctxt->nodeMax = 0;
- return (0);
- }
- }
- if (ctxt->nodeNr >= ctxt->nodeMax) {
- xmlNodePtr *tmp;
- tmp = (xmlNodePtr *) xmlRealloc(ctxt->nodeTab,
- ctxt->nodeMax * 2 * sizeof(ctxt->nodeTab[0]));
- if (tmp == NULL) {
- xmlVErrMemory(ctxt, "realloc failed");
- return (0);
- }
- ctxt->nodeMax *= 2;
- ctxt->nodeTab = tmp;
- }
- ctxt->nodeTab[ctxt->nodeNr] = value;
- ctxt->node = value;
- return (ctxt->nodeNr++);
-}
-static xmlNodePtr
-nodeVPop(xmlValidCtxtPtr ctxt)
-{
- xmlNodePtr ret;
-
- if (ctxt->nodeNr <= 0)
- return (NULL);
- ctxt->nodeNr--;
- if (ctxt->nodeNr > 0)
- ctxt->node = ctxt->nodeTab[ctxt->nodeNr - 1];
- else
- ctxt->node = NULL;
- ret = ctxt->nodeTab[ctxt->nodeNr];
- ctxt->nodeTab[ctxt->nodeNr] = NULL;
- return (ret);
-}
-
-#ifdef DEBUG_VALID_ALGO
-static void
-xmlValidPrintNode(xmlNodePtr cur) {
- if (cur == NULL) {
- xmlGenericError(xmlGenericErrorContext, "null");
- return;
- }
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- xmlGenericError(xmlGenericErrorContext, "%s ", cur->name);
- break;
- case XML_TEXT_NODE:
- xmlGenericError(xmlGenericErrorContext, "text ");
- break;
- case XML_CDATA_SECTION_NODE:
- xmlGenericError(xmlGenericErrorContext, "cdata ");
- break;
- case XML_ENTITY_REF_NODE:
- xmlGenericError(xmlGenericErrorContext, "&%s; ", cur->name);
- break;
- case XML_PI_NODE:
- xmlGenericError(xmlGenericErrorContext, "pi(%s) ", cur->name);
- break;
- case XML_COMMENT_NODE:
- xmlGenericError(xmlGenericErrorContext, "comment ");
- break;
- case XML_ATTRIBUTE_NODE:
- xmlGenericError(xmlGenericErrorContext, "?attr? ");
- break;
- case XML_ENTITY_NODE:
- xmlGenericError(xmlGenericErrorContext, "?ent? ");
- break;
- case XML_DOCUMENT_NODE:
- xmlGenericError(xmlGenericErrorContext, "?doc? ");
- break;
- case XML_DOCUMENT_TYPE_NODE:
- xmlGenericError(xmlGenericErrorContext, "?doctype? ");
- break;
- case XML_DOCUMENT_FRAG_NODE:
- xmlGenericError(xmlGenericErrorContext, "?frag? ");
- break;
- case XML_NOTATION_NODE:
- xmlGenericError(xmlGenericErrorContext, "?nota? ");
- break;
- case XML_HTML_DOCUMENT_NODE:
- xmlGenericError(xmlGenericErrorContext, "?html? ");
- break;
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
- xmlGenericError(xmlGenericErrorContext, "?docb? ");
- break;
-#endif
- case XML_DTD_NODE:
- xmlGenericError(xmlGenericErrorContext, "?dtd? ");
- break;
- case XML_ELEMENT_DECL:
- xmlGenericError(xmlGenericErrorContext, "?edecl? ");
- break;
- case XML_ATTRIBUTE_DECL:
- xmlGenericError(xmlGenericErrorContext, "?adecl? ");
- break;
- case XML_ENTITY_DECL:
- xmlGenericError(xmlGenericErrorContext, "?entdecl? ");
- break;
- case XML_NAMESPACE_DECL:
- xmlGenericError(xmlGenericErrorContext, "?nsdecl? ");
- break;
- case XML_XINCLUDE_START:
- xmlGenericError(xmlGenericErrorContext, "incstart ");
- break;
- case XML_XINCLUDE_END:
- xmlGenericError(xmlGenericErrorContext, "incend ");
- break;
- }
-}
-
-static void
-xmlValidPrintNodeList(xmlNodePtr cur) {
- if (cur == NULL)
- xmlGenericError(xmlGenericErrorContext, "null ");
- while (cur != NULL) {
- xmlValidPrintNode(cur);
- cur = cur->next;
- }
-}
-
-static void
-xmlValidDebug(xmlNodePtr cur, xmlElementContentPtr cont) {
- char expr[5000];
-
- expr[0] = 0;
- xmlGenericError(xmlGenericErrorContext, "valid: ");
- xmlValidPrintNodeList(cur);
- xmlGenericError(xmlGenericErrorContext, "against ");
- xmlSnprintfElementContent(expr, 5000, cont, 1);
- xmlGenericError(xmlGenericErrorContext, "%s\n", expr);
-}
-
-static void
-xmlValidDebugState(xmlValidStatePtr state) {
- xmlGenericError(xmlGenericErrorContext, "(");
- if (state->cont == NULL)
- xmlGenericError(xmlGenericErrorContext, "null,");
- else
- switch (state->cont->type) {
- case XML_ELEMENT_CONTENT_PCDATA:
- xmlGenericError(xmlGenericErrorContext, "pcdata,");
- break;
- case XML_ELEMENT_CONTENT_ELEMENT:
- xmlGenericError(xmlGenericErrorContext, "%s,",
- state->cont->name);
- break;
- case XML_ELEMENT_CONTENT_SEQ:
- xmlGenericError(xmlGenericErrorContext, "seq,");
- break;
- case XML_ELEMENT_CONTENT_OR:
- xmlGenericError(xmlGenericErrorContext, "or,");
- break;
- }
- xmlValidPrintNode(state->node);
- xmlGenericError(xmlGenericErrorContext, ",%d,%X,%d)",
- state->depth, state->occurs, state->state);
-}
-
-static void
-xmlValidStateDebug(xmlValidCtxtPtr ctxt) {
- int i, j;
-
- xmlGenericError(xmlGenericErrorContext, "state: ");
- xmlValidDebugState(ctxt->vstate);
- xmlGenericError(xmlGenericErrorContext, " stack: %d ",
- ctxt->vstateNr - 1);
- for (i = 0, j = ctxt->vstateNr - 1;(i < 3) && (j > 0);i++,j--)
- xmlValidDebugState(&ctxt->vstateTab[j]);
- xmlGenericError(xmlGenericErrorContext, "\n");
-}
-
-/*****
-#define DEBUG_VALID_STATE(n,c) xmlValidDebug(n,c);
- *****/
-
-#define DEBUG_VALID_STATE(n,c) xmlValidStateDebug(ctxt);
-#define DEBUG_VALID_MSG(m) \
- xmlGenericError(xmlGenericErrorContext, "%s\n", m);
-
-#else
-#define DEBUG_VALID_STATE(n,c)
-#define DEBUG_VALID_MSG(m)
-#endif
-
-/* TODO: use hash table for accesses to elem and attribute definitions */
-
-
-#define CHECK_DTD \
- if (doc == NULL) return(0); \
- else if ((doc->intSubset == NULL) && \
- (doc->extSubset == NULL)) return(0)
-
-#ifdef LIBXML_REGEXP_ENABLED
-
-/************************************************************************
- * *
- * Content model validation based on the regexps *
- * *
- ************************************************************************/
-
-/**
- * xmlValidBuildAContentModel:
- * @content: the content model
- * @ctxt: the schema parser context
- * @name: the element name whose content is being built
- *
- * Generate the automata sequence needed for that type
- *
- * Returns 1 if successful or 0 in case of error.
- */
-static int
-xmlValidBuildAContentModel(xmlElementContentPtr content,
- xmlValidCtxtPtr ctxt,
- const xmlChar *name) {
- if (content == NULL) {
- xmlErrValidNode(ctxt, NULL, XML_ERR_INTERNAL_ERROR,
- "Found NULL content in content model of %s\n",
- name, NULL, NULL);
- return(0);
- }
- switch (content->type) {
- case XML_ELEMENT_CONTENT_PCDATA:
- xmlErrValidNode(ctxt, NULL, XML_ERR_INTERNAL_ERROR,
- "Found PCDATA in content model of %s\n",
- name, NULL, NULL);
- return(0);
- break;
- case XML_ELEMENT_CONTENT_ELEMENT: {
- xmlAutomataStatePtr oldstate = ctxt->state;
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(content->name, content->prefix, fn, 50);
- if (fullname == NULL) {
- xmlVErrMemory(ctxt, "Building content model");
- return(0);
- }
-
- switch (content->ocur) {
- case XML_ELEMENT_CONTENT_ONCE:
- ctxt->state = xmlAutomataNewTransition(ctxt->am,
- ctxt->state, NULL, fullname, NULL);
- break;
- case XML_ELEMENT_CONTENT_OPT:
- ctxt->state = xmlAutomataNewTransition(ctxt->am,
- ctxt->state, NULL, fullname, NULL);
- xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
- break;
- case XML_ELEMENT_CONTENT_PLUS:
- ctxt->state = xmlAutomataNewTransition(ctxt->am,
- ctxt->state, NULL, fullname, NULL);
- xmlAutomataNewTransition(ctxt->am, ctxt->state,
- ctxt->state, fullname, NULL);
- break;
- case XML_ELEMENT_CONTENT_MULT:
- ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
- ctxt->state, NULL);
- xmlAutomataNewTransition(ctxt->am,
- ctxt->state, ctxt->state, fullname, NULL);
- break;
- }
- if ((fullname != fn) && (fullname != content->name))
- xmlFree(fullname);
- break;
- }
- case XML_ELEMENT_CONTENT_SEQ: {
- xmlAutomataStatePtr oldstate, oldend;
- xmlElementContentOccur ocur;
-
- /*
- * Simply iterate over the content
- */
- oldstate = ctxt->state;
- ocur = content->ocur;
- if (ocur != XML_ELEMENT_CONTENT_ONCE) {
- ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldstate, NULL);
- oldstate = ctxt->state;
- }
- do {
- xmlValidBuildAContentModel(content->c1, ctxt, name);
- content = content->c2;
- } while ((content->type == XML_ELEMENT_CONTENT_SEQ) &&
- (content->ocur == XML_ELEMENT_CONTENT_ONCE));
- xmlValidBuildAContentModel(content, ctxt, name);
- oldend = ctxt->state;
- ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldend, NULL);
- switch (ocur) {
- case XML_ELEMENT_CONTENT_ONCE:
- break;
- case XML_ELEMENT_CONTENT_OPT:
- xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
- break;
- case XML_ELEMENT_CONTENT_MULT:
- xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
- xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
- break;
- case XML_ELEMENT_CONTENT_PLUS:
- xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
- break;
- }
- break;
- }
- case XML_ELEMENT_CONTENT_OR: {
- xmlAutomataStatePtr oldstate, oldend;
- xmlElementContentOccur ocur;
-
- ocur = content->ocur;
- if ((ocur == XML_ELEMENT_CONTENT_PLUS) ||
- (ocur == XML_ELEMENT_CONTENT_MULT)) {
- ctxt->state = xmlAutomataNewEpsilon(ctxt->am,
- ctxt->state, NULL);
- }
- oldstate = ctxt->state;
- oldend = xmlAutomataNewState(ctxt->am);
-
- /*
- * iterate over the subtypes and remerge the end with an
- * epsilon transition
- */
- do {
- ctxt->state = oldstate;
- xmlValidBuildAContentModel(content->c1, ctxt, name);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldend);
- content = content->c2;
- } while ((content->type == XML_ELEMENT_CONTENT_OR) &&
- (content->ocur == XML_ELEMENT_CONTENT_ONCE));
- ctxt->state = oldstate;
- xmlValidBuildAContentModel(content, ctxt, name);
- xmlAutomataNewEpsilon(ctxt->am, ctxt->state, oldend);
- ctxt->state = xmlAutomataNewEpsilon(ctxt->am, oldend, NULL);
- switch (ocur) {
- case XML_ELEMENT_CONTENT_ONCE:
- break;
- case XML_ELEMENT_CONTENT_OPT:
- xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
- break;
- case XML_ELEMENT_CONTENT_MULT:
- xmlAutomataNewEpsilon(ctxt->am, oldstate, ctxt->state);
- xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
- break;
- case XML_ELEMENT_CONTENT_PLUS:
- xmlAutomataNewEpsilon(ctxt->am, oldend, oldstate);
- break;
- }
- break;
- }
- default:
- xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
- "ContentModel broken for element %s\n",
- (const char *) name);
- return(0);
- }
- return(1);
-}
-/**
- * xmlValidBuildContentModel:
- * @ctxt: a validation context
- * @elem: an element declaration node
- *
- * (Re)Build the automata associated to the content model of this
- * element
- *
- * Returns 1 in case of success, 0 in case of error
- */
-int
-xmlValidBuildContentModel(xmlValidCtxtPtr ctxt, xmlElementPtr elem) {
-
- if ((ctxt == NULL) || (elem == NULL))
- return(0);
- if (elem->type != XML_ELEMENT_DECL)
- return(0);
- if (elem->etype != XML_ELEMENT_TYPE_ELEMENT)
- return(1);
- /* TODO: should we rebuild in this case ? */
- if (elem->contModel != NULL) {
- if (!xmlRegexpIsDeterminist(elem->contModel)) {
- ctxt->valid = 0;
- return(0);
- }
- return(1);
- }
-
- ctxt->am = xmlNewAutomata();
- if (ctxt->am == NULL) {
- xmlErrValidNode(ctxt, (xmlNodePtr) elem,
- XML_ERR_INTERNAL_ERROR,
- "Cannot create automata for element %s\n",
- elem->name, NULL, NULL);
- return(0);
- }
- ctxt->state = xmlAutomataGetInitState(ctxt->am);
- xmlValidBuildAContentModel(elem->content, ctxt, elem->name);
- xmlAutomataSetFinalState(ctxt->am, ctxt->state);
- elem->contModel = xmlAutomataCompile(ctxt->am);
- if (xmlRegexpIsDeterminist(elem->contModel) != 1) {
- char expr[5000];
- expr[0] = 0;
- xmlSnprintfElementContent(expr, 5000, elem->content, 1);
- xmlErrValidNode(ctxt, (xmlNodePtr) elem,
- XML_DTD_CONTENT_NOT_DETERMINIST,
- "Content model of %s is not determinist: %s\n",
- elem->name, BAD_CAST expr, NULL);
-#ifdef DEBUG_REGEXP_ALGO
- xmlRegexpPrint(stderr, elem->contModel);
-#endif
- ctxt->valid = 0;
- ctxt->state = NULL;
- xmlFreeAutomata(ctxt->am);
- ctxt->am = NULL;
- return(0);
- }
- ctxt->state = NULL;
- xmlFreeAutomata(ctxt->am);
- ctxt->am = NULL;
- return(1);
-}
-
-#endif /* LIBXML_REGEXP_ENABLED */
-
-/****************************************************************
- * *
- * Util functions for data allocation/deallocation *
- * *
- ****************************************************************/
-
-/**
- * xmlNewValidCtxt:
- *
- * Allocate a validation context structure.
- *
- * Returns NULL if not, otherwise the new validation context structure
- */
-xmlValidCtxtPtr xmlNewValidCtxt(void) {
- xmlValidCtxtPtr ret;
-
- if ((ret = xmlMalloc(sizeof (xmlValidCtxt))) == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return (NULL);
- }
-
- (void) memset(ret, 0, sizeof (xmlValidCtxt));
-
- return (ret);
-}
-
-/**
- * xmlFreeValidCtxt:
- * @cur: the validation context to free
- *
- * Free a validation context structure.
- */
-void
-xmlFreeValidCtxt(xmlValidCtxtPtr cur) {
- if (cur->vstateTab != NULL)
- xmlFree(cur->vstateTab);
- if (cur->nodeTab != NULL)
- xmlFree(cur->nodeTab);
- xmlFree(cur);
-}
-
-#endif /* LIBXML_VALID_ENABLED */
-
-/**
- * xmlNewDocElementContent:
- * @doc: the document
- * @name: the subelement name or NULL
- * @type: the type of element content decl
- *
- * Allocate an element content structure for the document.
- *
- * Returns NULL if not, otherwise the new element content structure
- */
-xmlElementContentPtr
-xmlNewDocElementContent(xmlDocPtr doc, const xmlChar *name,
- xmlElementContentType type) {
- xmlElementContentPtr ret;
- xmlDictPtr dict = NULL;
-
- if (doc != NULL)
- dict = doc->dict;
-
- switch(type) {
- case XML_ELEMENT_CONTENT_ELEMENT:
- if (name == NULL) {
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewElementContent : name == NULL !\n",
- NULL);
- }
- break;
- case XML_ELEMENT_CONTENT_PCDATA:
- case XML_ELEMENT_CONTENT_SEQ:
- case XML_ELEMENT_CONTENT_OR:
- if (name != NULL) {
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewElementContent : name != NULL !\n",
- NULL);
- }
- break;
- default:
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "Internal: ELEMENT content corrupted invalid type\n",
- NULL);
- return(NULL);
- }
- ret = (xmlElementContentPtr) xmlMalloc(sizeof(xmlElementContent));
- if (ret == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlElementContent));
- ret->type = type;
- ret->ocur = XML_ELEMENT_CONTENT_ONCE;
- if (name != NULL) {
- int l;
- const xmlChar *tmp;
-
- tmp = xmlSplitQName3(name, &l);
- if (tmp == NULL) {
- if (dict == NULL)
- ret->name = xmlStrdup(name);
- else
- ret->name = xmlDictLookup(dict, name, -1);
- } else {
- if (dict == NULL) {
- ret->prefix = xmlStrndup(name, l);
- ret->name = xmlStrdup(tmp);
- } else {
- ret->prefix = xmlDictLookup(dict, name, l);
- ret->name = xmlDictLookup(dict, tmp, -1);
- }
- }
- }
- return(ret);
-}
-
-/**
- * xmlNewElementContent:
- * @name: the subelement name or NULL
- * @type: the type of element content decl
- *
- * Allocate an element content structure.
- * Deprecated in favor of xmlNewDocElementContent
- *
- * Returns NULL if not, otherwise the new element content structure
- */
-xmlElementContentPtr
-xmlNewElementContent(const xmlChar *name, xmlElementContentType type) {
- return(xmlNewDocElementContent(NULL, name, type));
-}
-
-/**
- * xmlCopyDocElementContent:
- * @doc: the document owning the element declaration
- * @cur: An element content pointer.
- *
- * Build a copy of an element content description.
- *
- * Returns the new xmlElementContentPtr or NULL in case of error.
- */
-xmlElementContentPtr
-xmlCopyDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
- xmlElementContentPtr ret = NULL, prev = NULL, tmp;
- xmlDictPtr dict = NULL;
-
- if (cur == NULL) return(NULL);
-
- if (doc != NULL)
- dict = doc->dict;
-
- ret = (xmlElementContentPtr) xmlMalloc(sizeof(xmlElementContent));
- if (ret == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlElementContent));
- ret->type = cur->type;
- ret->ocur = cur->ocur;
- if (cur->name != NULL) {
- if (dict)
- ret->name = xmlDictLookup(dict, cur->name, -1);
- else
- ret->name = xmlStrdup(cur->name);
- }
-
- if (cur->prefix != NULL) {
- if (dict)
- ret->prefix = xmlDictLookup(dict, cur->prefix, -1);
- else
- ret->prefix = xmlStrdup(cur->prefix);
- }
- if (cur->c1 != NULL)
- ret->c1 = xmlCopyDocElementContent(doc, cur->c1);
- if (ret->c1 != NULL)
- ret->c1->parent = ret;
- if (cur->c2 != NULL) {
- prev = ret;
- cur = cur->c2;
- while (cur != NULL) {
- tmp = (xmlElementContentPtr) xmlMalloc(sizeof(xmlElementContent));
- if (tmp == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return(ret);
- }
- memset(tmp, 0, sizeof(xmlElementContent));
- tmp->type = cur->type;
- tmp->ocur = cur->ocur;
- prev->c2 = tmp;
- if (cur->name != NULL) {
- if (dict)
- tmp->name = xmlDictLookup(dict, cur->name, -1);
- else
- tmp->name = xmlStrdup(cur->name);
- }
-
- if (cur->prefix != NULL) {
- if (dict)
- tmp->prefix = xmlDictLookup(dict, cur->prefix, -1);
- else
- tmp->prefix = xmlStrdup(cur->prefix);
- }
- if (cur->c1 != NULL)
- tmp->c1 = xmlCopyDocElementContent(doc,cur->c1);
- if (tmp->c1 != NULL)
- tmp->c1->parent = ret;
- prev = tmp;
- cur = cur->c2;
- }
- }
- return(ret);
-}
-
-/**
- * xmlCopyElementContent:
- * @cur: An element content pointer.
- *
- * Build a copy of an element content description.
- * Deprecated, use xmlCopyDocElementContent instead
- *
- * Returns the new xmlElementContentPtr or NULL in case of error.
- */
-xmlElementContentPtr
-xmlCopyElementContent(xmlElementContentPtr cur) {
- return(xmlCopyDocElementContent(NULL, cur));
-}
-
-/**
- * xmlFreeDocElementContent:
- * @doc: the document owning the element declaration
- * @cur: the element content tree to free
- *
- * Free an element content structure. The whole subtree is removed.
- */
-void
-xmlFreeDocElementContent(xmlDocPtr doc, xmlElementContentPtr cur) {
- xmlElementContentPtr next;
- xmlDictPtr dict = NULL;
-
- if (doc != NULL)
- dict = doc->dict;
-
- while (cur != NULL) {
- next = cur->c2;
- switch (cur->type) {
- case XML_ELEMENT_CONTENT_PCDATA:
- case XML_ELEMENT_CONTENT_ELEMENT:
- case XML_ELEMENT_CONTENT_SEQ:
- case XML_ELEMENT_CONTENT_OR:
- break;
- default:
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "Internal: ELEMENT content corrupted invalid type\n",
- NULL);
- return;
- }
- if (cur->c1 != NULL) xmlFreeDocElementContent(doc, cur->c1);
- if (dict) {
- if ((cur->name != NULL) && (!xmlDictOwns(dict, cur->name)))
- xmlFree((xmlChar *) cur->name);
- if ((cur->prefix != NULL) && (!xmlDictOwns(dict, cur->prefix)))
- xmlFree((xmlChar *) cur->prefix);
- } else {
- if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
- if (cur->prefix != NULL) xmlFree((xmlChar *) cur->prefix);
- }
- xmlFree(cur);
- cur = next;
- }
-}
-
-/**
- * xmlFreeElementContent:
- * @cur: the element content tree to free
- *
- * Free an element content structure. The whole subtree is removed.
- * Deprecated, use xmlFreeDocElementContent instead
- */
-void
-xmlFreeElementContent(xmlElementContentPtr cur) {
- xmlFreeDocElementContent(NULL, cur);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlDumpElementContent:
- * @buf: An XML buffer
- * @content: An element table
- * @glob: 1 if one must print the englobing parenthesis, 0 otherwise
- *
- * This will dump the content of the element table as an XML DTD definition
- */
-static void
-xmlDumpElementContent(xmlBufferPtr buf, xmlElementContentPtr content, int glob) {
- if (content == NULL) return;
-
- if (glob) xmlBufferWriteChar(buf, "(");
- switch (content->type) {
- case XML_ELEMENT_CONTENT_PCDATA:
- xmlBufferWriteChar(buf, "#PCDATA");
- break;
- case XML_ELEMENT_CONTENT_ELEMENT:
- if (content->prefix != NULL) {
- xmlBufferWriteCHAR(buf, content->prefix);
- xmlBufferWriteChar(buf, ":");
- }
- xmlBufferWriteCHAR(buf, content->name);
- break;
- case XML_ELEMENT_CONTENT_SEQ:
- if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
- (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
- xmlDumpElementContent(buf, content->c1, 1);
- else
- xmlDumpElementContent(buf, content->c1, 0);
- xmlBufferWriteChar(buf, " , ");
- if ((content->c2->type == XML_ELEMENT_CONTENT_OR) ||
- ((content->c2->type == XML_ELEMENT_CONTENT_SEQ) &&
- (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)))
- xmlDumpElementContent(buf, content->c2, 1);
- else
- xmlDumpElementContent(buf, content->c2, 0);
- break;
- case XML_ELEMENT_CONTENT_OR:
- if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
- (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
- xmlDumpElementContent(buf, content->c1, 1);
- else
- xmlDumpElementContent(buf, content->c1, 0);
- xmlBufferWriteChar(buf, " | ");
- if ((content->c2->type == XML_ELEMENT_CONTENT_SEQ) ||
- ((content->c2->type == XML_ELEMENT_CONTENT_OR) &&
- (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)))
- xmlDumpElementContent(buf, content->c2, 1);
- else
- xmlDumpElementContent(buf, content->c2, 0);
- break;
- default:
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "Internal: ELEMENT content corrupted invalid type\n",
- NULL);
- }
- if (glob)
- xmlBufferWriteChar(buf, ")");
- switch (content->ocur) {
- case XML_ELEMENT_CONTENT_ONCE:
- break;
- case XML_ELEMENT_CONTENT_OPT:
- xmlBufferWriteChar(buf, "?");
- break;
- case XML_ELEMENT_CONTENT_MULT:
- xmlBufferWriteChar(buf, "*");
- break;
- case XML_ELEMENT_CONTENT_PLUS:
- xmlBufferWriteChar(buf, "+");
- break;
- }
-}
-
-/**
- * xmlSprintfElementContent:
- * @buf: an output buffer
- * @content: An element table
- * @englob: 1 if one must print the englobing parenthesis, 0 otherwise
- *
- * Deprecated, unsafe, use xmlSnprintfElementContent
- */
-void
-xmlSprintfElementContent(char *buf ATTRIBUTE_UNUSED,
- xmlElementContentPtr content ATTRIBUTE_UNUSED,
- int englob ATTRIBUTE_UNUSED) {
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlSnprintfElementContent:
- * @buf: an output buffer
- * @size: the buffer size
- * @content: An element table
- * @englob: 1 if one must print the englobing parenthesis, 0 otherwise
- *
- * This will dump the content of the element content definition
- * Intended just for the debug routine
- */
-void
-xmlSnprintfElementContent(char *buf, int size, xmlElementContentPtr content, int englob) {
- int len;
-
- if (content == NULL) return;
- len = strlen(buf);
- if (size - len < 50) {
- if ((size - len > 4) && (buf[len - 1] != '.'))
- strcat(buf, " ...");
- return;
- }
- if (englob) strcat(buf, "(");
- switch (content->type) {
- case XML_ELEMENT_CONTENT_PCDATA:
- strcat(buf, "#PCDATA");
- break;
- case XML_ELEMENT_CONTENT_ELEMENT:
- if (content->prefix != NULL) {
- if (size - len < xmlStrlen(content->prefix) + 10) {
- strcat(buf, " ...");
- return;
- }
- strcat(buf, (char *) content->prefix);
- strcat(buf, ":");
- }
- if (size - len < xmlStrlen(content->name) + 10) {
- strcat(buf, " ...");
- return;
- }
- if (content->name != NULL)
- strcat(buf, (char *) content->name);
- break;
- case XML_ELEMENT_CONTENT_SEQ:
- if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
- (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
- xmlSnprintfElementContent(buf, size, content->c1, 1);
- else
- xmlSnprintfElementContent(buf, size, content->c1, 0);
- len = strlen(buf);
- if (size - len < 50) {
- if ((size - len > 4) && (buf[len - 1] != '.'))
- strcat(buf, " ...");
- return;
- }
- strcat(buf, " , ");
- if (((content->c2->type == XML_ELEMENT_CONTENT_OR) ||
- (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)) &&
- (content->c2->type != XML_ELEMENT_CONTENT_ELEMENT))
- xmlSnprintfElementContent(buf, size, content->c2, 1);
- else
- xmlSnprintfElementContent(buf, size, content->c2, 0);
- break;
- case XML_ELEMENT_CONTENT_OR:
- if ((content->c1->type == XML_ELEMENT_CONTENT_OR) ||
- (content->c1->type == XML_ELEMENT_CONTENT_SEQ))
- xmlSnprintfElementContent(buf, size, content->c1, 1);
- else
- xmlSnprintfElementContent(buf, size, content->c1, 0);
- len = strlen(buf);
- if (size - len < 50) {
- if ((size - len > 4) && (buf[len - 1] != '.'))
- strcat(buf, " ...");
- return;
- }
- strcat(buf, " | ");
- if (((content->c2->type == XML_ELEMENT_CONTENT_SEQ) ||
- (content->c2->ocur != XML_ELEMENT_CONTENT_ONCE)) &&
- (content->c2->type != XML_ELEMENT_CONTENT_ELEMENT))
- xmlSnprintfElementContent(buf, size, content->c2, 1);
- else
- xmlSnprintfElementContent(buf, size, content->c2, 0);
- break;
- }
- if (englob)
- strcat(buf, ")");
- switch (content->ocur) {
- case XML_ELEMENT_CONTENT_ONCE:
- break;
- case XML_ELEMENT_CONTENT_OPT:
- strcat(buf, "?");
- break;
- case XML_ELEMENT_CONTENT_MULT:
- strcat(buf, "*");
- break;
- case XML_ELEMENT_CONTENT_PLUS:
- strcat(buf, "+");
- break;
- }
-}
-
-/****************************************************************
- * *
- * Registration of DTD declarations *
- * *
- ****************************************************************/
-
-/**
- * xmlFreeElement:
- * @elem: An element
- *
- * Deallocate the memory used by an element definition
- */
-static void
-xmlFreeElement(xmlElementPtr elem) {
- if (elem == NULL) return;
- xmlUnlinkNode((xmlNodePtr) elem);
- xmlFreeDocElementContent(elem->doc, elem->content);
- if (elem->name != NULL)
- xmlFree((xmlChar *) elem->name);
- if (elem->prefix != NULL)
- xmlFree((xmlChar *) elem->prefix);
-#ifdef LIBXML_REGEXP_ENABLED
- if (elem->contModel != NULL)
- xmlRegFreeRegexp(elem->contModel);
-#endif
- xmlFree(elem);
-}
-
-
-/**
- * xmlAddElementDecl:
- * @ctxt: the validation context
- * @dtd: pointer to the DTD
- * @name: the entity name
- * @type: the element type
- * @content: the element content tree or NULL
- *
- * Register a new element declaration
- *
- * Returns NULL if not, otherwise the entity
- */
-xmlElementPtr
-xmlAddElementDecl(xmlValidCtxtPtr ctxt,
- xmlDtdPtr dtd, const xmlChar *name,
- xmlElementTypeVal type,
- xmlElementContentPtr content) {
- xmlElementPtr ret;
- xmlElementTablePtr table;
- xmlAttributePtr oldAttributes = NULL;
- xmlChar *ns, *uqname;
-
- if (dtd == NULL) {
- return(NULL);
- }
- if (name == NULL) {
- return(NULL);
- }
-
- switch (type) {
- case XML_ELEMENT_TYPE_EMPTY:
- if (content != NULL) {
- xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlAddElementDecl: content != NULL for EMPTY\n",
- NULL);
- return(NULL);
- }
- break;
- case XML_ELEMENT_TYPE_ANY:
- if (content != NULL) {
- xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlAddElementDecl: content != NULL for ANY\n",
- NULL);
- return(NULL);
- }
- break;
- case XML_ELEMENT_TYPE_MIXED:
- if (content == NULL) {
- xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlAddElementDecl: content == NULL for MIXED\n",
- NULL);
- return(NULL);
- }
- break;
- case XML_ELEMENT_TYPE_ELEMENT:
- if (content == NULL) {
- xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlAddElementDecl: content == NULL for ELEMENT\n",
- NULL);
- return(NULL);
- }
- break;
- default:
- xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
- "Internal: ELEMENT decl corrupted invalid type\n",
- NULL);
- return(NULL);
- }
-
- /*
- * check if name is a QName
- */
- uqname = xmlSplitQName2(name, &ns);
- if (uqname != NULL)
- name = uqname;
-
- /*
- * Create the Element table if needed.
- */
- table = (xmlElementTablePtr) dtd->elements;
- if (table == NULL) {
- xmlDictPtr dict = NULL;
-
- if (dtd->doc != NULL)
- dict = dtd->doc->dict;
- table = xmlHashCreateDict(0, dict);
- dtd->elements = (void *) table;
- }
- if (table == NULL) {
- xmlVErrMemory(ctxt,
- "xmlAddElementDecl: Table creation failed!\n");
- if (uqname != NULL)
- xmlFree(uqname);
- if (ns != NULL)
- xmlFree(ns);
- return(NULL);
- }
-
- /*
- * lookup old attributes inserted on an undefined element in the
- * internal subset.
- */
- if ((dtd->doc != NULL) && (dtd->doc->intSubset != NULL)) {
- ret = xmlHashLookup2(dtd->doc->intSubset->elements, name, ns);
- if ((ret != NULL) && (ret->etype == XML_ELEMENT_TYPE_UNDEFINED)) {
- oldAttributes = ret->attributes;
- ret->attributes = NULL;
- xmlHashRemoveEntry2(dtd->doc->intSubset->elements, name, ns, NULL);
- xmlFreeElement(ret);
- }
- }
-
- /*
- * The element may already be present if one of its attribute
- * was registered first
- */
- ret = xmlHashLookup2(table, name, ns);
- if (ret != NULL) {
- if (ret->etype != XML_ELEMENT_TYPE_UNDEFINED) {
-#ifdef LIBXML_VALID_ENABLED
- /*
- * The element is already defined in this DTD.
- */
- xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ELEM_REDEFINED,
- "Redefinition of element %s\n",
- name, NULL, NULL);
-#endif /* LIBXML_VALID_ENABLED */
- if (uqname != NULL)
- xmlFree(uqname);
- if (ns != NULL)
- xmlFree(ns);
- return(NULL);
- }
- if (ns != NULL) {
- xmlFree(ns);
- ns = NULL;
- }
- } else {
- ret = (xmlElementPtr) xmlMalloc(sizeof(xmlElement));
- if (ret == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- if (uqname != NULL)
- xmlFree(uqname);
- if (ns != NULL)
- xmlFree(ns);
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlElement));
- ret->type = XML_ELEMENT_DECL;
-
- /*
- * fill the structure.
- */
- ret->name = xmlStrdup(name);
- if (ret->name == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- if (uqname != NULL)
- xmlFree(uqname);
- if (ns != NULL)
- xmlFree(ns);
- xmlFree(ret);
- return(NULL);
- }
- ret->prefix = ns;
-
- /*
- * Validity Check:
- * Insertion must not fail
- */
- if (xmlHashAddEntry2(table, name, ns, ret)) {
-#ifdef LIBXML_VALID_ENABLED
- /*
- * The element is already defined in this DTD.
- */
- xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ELEM_REDEFINED,
- "Redefinition of element %s\n",
- name, NULL, NULL);
-#endif /* LIBXML_VALID_ENABLED */
- xmlFreeElement(ret);
- if (uqname != NULL)
- xmlFree(uqname);
- return(NULL);
- }
- /*
- * For new element, may have attributes from earlier
- * definition in internal subset
- */
- ret->attributes = oldAttributes;
- }
-
- /*
- * Finish to fill the structure.
- */
- ret->etype = type;
- /*
- * Avoid a stupid copy when called by the parser
- * and flag it by setting a special parent value
- * so the parser doesn't unallocate it.
- */
- if ((ctxt != NULL) &&
- ((ctxt->finishDtd == XML_CTXT_FINISH_DTD_0) ||
- (ctxt->finishDtd == XML_CTXT_FINISH_DTD_1))) {
- ret->content = content;
- if (content != NULL)
- content->parent = (xmlElementContentPtr) 1;
- } else {
- ret->content = xmlCopyDocElementContent(dtd->doc, content);
- }
-
- /*
- * Link it to the DTD
- */
- ret->parent = dtd;
- ret->doc = dtd->doc;
- if (dtd->last == NULL) {
- dtd->children = dtd->last = (xmlNodePtr) ret;
- } else {
- dtd->last->next = (xmlNodePtr) ret;
- ret->prev = dtd->last;
- dtd->last = (xmlNodePtr) ret;
- }
- if (uqname != NULL)
- xmlFree(uqname);
- return(ret);
-}
-
-/**
- * xmlFreeElementTable:
- * @table: An element table
- *
- * Deallocate the memory used by an element hash table.
- */
-void
-xmlFreeElementTable(xmlElementTablePtr table) {
- xmlHashFree(table, (xmlHashDeallocator) xmlFreeElement);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlCopyElement:
- * @elem: An element
- *
- * Build a copy of an element.
- *
- * Returns the new xmlElementPtr or NULL in case of error.
- */
-static xmlElementPtr
-xmlCopyElement(xmlElementPtr elem) {
- xmlElementPtr cur;
-
- cur = (xmlElementPtr) xmlMalloc(sizeof(xmlElement));
- if (cur == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlElement));
- cur->type = XML_ELEMENT_DECL;
- cur->etype = elem->etype;
- if (elem->name != NULL)
- cur->name = xmlStrdup(elem->name);
- else
- cur->name = NULL;
- if (elem->prefix != NULL)
- cur->prefix = xmlStrdup(elem->prefix);
- else
- cur->prefix = NULL;
- cur->content = xmlCopyElementContent(elem->content);
- /* TODO : rebuild the attribute list on the copy */
- cur->attributes = NULL;
- return(cur);
-}
-
-/**
- * xmlCopyElementTable:
- * @table: An element table
- *
- * Build a copy of an element table.
- *
- * Returns the new xmlElementTablePtr or NULL in case of error.
- */
-xmlElementTablePtr
-xmlCopyElementTable(xmlElementTablePtr table) {
- return((xmlElementTablePtr) xmlHashCopy(table,
- (xmlHashCopier) xmlCopyElement));
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlDumpElementDecl:
- * @buf: the XML buffer output
- * @elem: An element table
- *
- * This will dump the content of the element declaration as an XML
- * DTD definition
- */
-void
-xmlDumpElementDecl(xmlBufferPtr buf, xmlElementPtr elem) {
- if ((buf == NULL) || (elem == NULL))
- return;
- switch (elem->etype) {
- case XML_ELEMENT_TYPE_EMPTY:
- xmlBufferWriteChar(buf, "<!ELEMENT ");
- if (elem->prefix != NULL) {
- xmlBufferWriteCHAR(buf, elem->prefix);
- xmlBufferWriteChar(buf, ":");
- }
- xmlBufferWriteCHAR(buf, elem->name);
- xmlBufferWriteChar(buf, " EMPTY>\n");
- break;
- case XML_ELEMENT_TYPE_ANY:
- xmlBufferWriteChar(buf, "<!ELEMENT ");
- if (elem->prefix != NULL) {
- xmlBufferWriteCHAR(buf, elem->prefix);
- xmlBufferWriteChar(buf, ":");
- }
- xmlBufferWriteCHAR(buf, elem->name);
- xmlBufferWriteChar(buf, " ANY>\n");
- break;
- case XML_ELEMENT_TYPE_MIXED:
- xmlBufferWriteChar(buf, "<!ELEMENT ");
- if (elem->prefix != NULL) {
- xmlBufferWriteCHAR(buf, elem->prefix);
- xmlBufferWriteChar(buf, ":");
- }
- xmlBufferWriteCHAR(buf, elem->name);
- xmlBufferWriteChar(buf, " ");
- xmlDumpElementContent(buf, elem->content, 1);
- xmlBufferWriteChar(buf, ">\n");
- break;
- case XML_ELEMENT_TYPE_ELEMENT:
- xmlBufferWriteChar(buf, "<!ELEMENT ");
- if (elem->prefix != NULL) {
- xmlBufferWriteCHAR(buf, elem->prefix);
- xmlBufferWriteChar(buf, ":");
- }
- xmlBufferWriteCHAR(buf, elem->name);
- xmlBufferWriteChar(buf, " ");
- xmlDumpElementContent(buf, elem->content, 1);
- xmlBufferWriteChar(buf, ">\n");
- break;
- default:
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "Internal: ELEMENT struct corrupted invalid type\n",
- NULL);
- }
-}
-
-/**
- * xmlDumpElementDeclScan:
- * @elem: An element table
- * @buf: the XML buffer output
- *
- * This routine is used by the hash scan function. It just reverses
- * the arguments.
- */
-static void
-xmlDumpElementDeclScan(xmlElementPtr elem, xmlBufferPtr buf) {
- xmlDumpElementDecl(buf, elem);
-}
-
-/**
- * xmlDumpElementTable:
- * @buf: the XML buffer output
- * @table: An element table
- *
- * This will dump the content of the element table as an XML DTD definition
- */
-void
-xmlDumpElementTable(xmlBufferPtr buf, xmlElementTablePtr table) {
- if ((buf == NULL) || (table == NULL))
- return;
- xmlHashScan(table, (xmlHashScanner) xmlDumpElementDeclScan, buf);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlCreateEnumeration:
- * @name: the enumeration name or NULL
- *
- * create and initialize an enumeration attribute node.
- *
- * Returns the xmlEnumerationPtr just created or NULL in case
- * of error.
- */
-xmlEnumerationPtr
-xmlCreateEnumeration(const xmlChar *name) {
- xmlEnumerationPtr ret;
-
- ret = (xmlEnumerationPtr) xmlMalloc(sizeof(xmlEnumeration));
- if (ret == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlEnumeration));
-
- if (name != NULL)
- ret->name = xmlStrdup(name);
- return(ret);
-}
-
-/**
- * xmlFreeEnumeration:
- * @cur: the tree to free.
- *
- * free an enumeration attribute node (recursive).
- */
-void
-xmlFreeEnumeration(xmlEnumerationPtr cur) {
- if (cur == NULL) return;
-
- if (cur->next != NULL) xmlFreeEnumeration(cur->next);
-
- if (cur->name != NULL) xmlFree((xmlChar *) cur->name);
- xmlFree(cur);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlCopyEnumeration:
- * @cur: the tree to copy.
- *
- * Copy an enumeration attribute node (recursive).
- *
- * Returns the xmlEnumerationPtr just created or NULL in case
- * of error.
- */
-xmlEnumerationPtr
-xmlCopyEnumeration(xmlEnumerationPtr cur) {
- xmlEnumerationPtr ret;
-
- if (cur == NULL) return(NULL);
- ret = xmlCreateEnumeration((xmlChar *) cur->name);
- if (ret == NULL) return(NULL);
-
- if (cur->next != NULL) ret->next = xmlCopyEnumeration(cur->next);
- else ret->next = NULL;
-
- return(ret);
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlDumpEnumeration:
- * @buf: the XML buffer output
- * @enum: An enumeration
- *
- * This will dump the content of the enumeration
- */
-static void
-xmlDumpEnumeration(xmlBufferPtr buf, xmlEnumerationPtr cur) {
- if ((buf == NULL) || (cur == NULL))
- return;
-
- xmlBufferWriteCHAR(buf, cur->name);
- if (cur->next == NULL)
- xmlBufferWriteChar(buf, ")");
- else {
- xmlBufferWriteChar(buf, " | ");
- xmlDumpEnumeration(buf, cur->next);
- }
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#ifdef LIBXML_VALID_ENABLED
-/**
- * xmlScanIDAttributeDecl:
- * @ctxt: the validation context
- * @elem: the element name
- * @err: whether to raise errors here
- *
- * Verify that the element don't have too many ID attributes
- * declared.
- *
- * Returns the number of ID attributes found.
- */
-static int
-xmlScanIDAttributeDecl(xmlValidCtxtPtr ctxt, xmlElementPtr elem, int err) {
- xmlAttributePtr cur;
- int ret = 0;
-
- if (elem == NULL) return(0);
- cur = elem->attributes;
- while (cur != NULL) {
- if (cur->atype == XML_ATTRIBUTE_ID) {
- ret ++;
- if ((ret > 1) && (err))
- xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_MULTIPLE_ID,
- "Element %s has too many ID attributes defined : %s\n",
- elem->name, cur->name, NULL);
- }
- cur = cur->nexth;
- }
- return(ret);
-}
-#endif /* LIBXML_VALID_ENABLED */
-
-/**
- * xmlFreeAttribute:
- * @elem: An attribute
- *
- * Deallocate the memory used by an attribute definition
- */
-static void
-xmlFreeAttribute(xmlAttributePtr attr) {
- xmlDictPtr dict;
-
- if (attr == NULL) return;
- if (attr->doc != NULL)
- dict = attr->doc->dict;
- else
- dict = NULL;
- xmlUnlinkNode((xmlNodePtr) attr);
- if (attr->tree != NULL)
- xmlFreeEnumeration(attr->tree);
- if (dict) {
- if ((attr->elem != NULL) && (!xmlDictOwns(dict, attr->elem)))
- xmlFree((xmlChar *) attr->elem);
- if ((attr->name != NULL) && (!xmlDictOwns(dict, attr->name)))
- xmlFree((xmlChar *) attr->name);
- if ((attr->prefix != NULL) && (!xmlDictOwns(dict, attr->prefix)))
- xmlFree((xmlChar *) attr->prefix);
- if ((attr->defaultValue != NULL) &&
- (!xmlDictOwns(dict, attr->defaultValue)))
- xmlFree((xmlChar *) attr->defaultValue);
- } else {
- if (attr->elem != NULL)
- xmlFree((xmlChar *) attr->elem);
- if (attr->name != NULL)
- xmlFree((xmlChar *) attr->name);
- if (attr->defaultValue != NULL)
- xmlFree((xmlChar *) attr->defaultValue);
- if (attr->prefix != NULL)
- xmlFree((xmlChar *) attr->prefix);
- }
- xmlFree(attr);
-}
-
-
-/**
- * xmlAddAttributeDecl:
- * @ctxt: the validation context
- * @dtd: pointer to the DTD
- * @elem: the element name
- * @name: the attribute name
- * @ns: the attribute namespace prefix
- * @type: the attribute type
- * @def: the attribute default type
- * @defaultValue: the attribute default value
- * @tree: if it's an enumeration, the associated list
- *
- * Register a new attribute declaration
- * Note that @tree becomes the ownership of the DTD
- *
- * Returns NULL if not new, otherwise the attribute decl
- */
-xmlAttributePtr
-xmlAddAttributeDecl(xmlValidCtxtPtr ctxt,
- xmlDtdPtr dtd, const xmlChar *elem,
- const xmlChar *name, const xmlChar *ns,
- xmlAttributeType type, xmlAttributeDefault def,
- const xmlChar *defaultValue, xmlEnumerationPtr tree) {
- xmlAttributePtr ret;
- xmlAttributeTablePtr table;
- xmlElementPtr elemDef;
- xmlDictPtr dict = NULL;
-
- if (dtd == NULL) {
- xmlFreeEnumeration(tree);
- return(NULL);
- }
- if (name == NULL) {
- xmlFreeEnumeration(tree);
- return(NULL);
- }
- if (elem == NULL) {
- xmlFreeEnumeration(tree);
- return(NULL);
- }
- if (dtd->doc != NULL)
- dict = dtd->doc->dict;
-
-#ifdef LIBXML_VALID_ENABLED
- /*
- * Check the type and possibly the default value.
- */
- switch (type) {
- case XML_ATTRIBUTE_CDATA:
- break;
- case XML_ATTRIBUTE_ID:
- break;
- case XML_ATTRIBUTE_IDREF:
- break;
- case XML_ATTRIBUTE_IDREFS:
- break;
- case XML_ATTRIBUTE_ENTITY:
- break;
- case XML_ATTRIBUTE_ENTITIES:
- break;
- case XML_ATTRIBUTE_NMTOKEN:
- break;
- case XML_ATTRIBUTE_NMTOKENS:
- break;
- case XML_ATTRIBUTE_ENUMERATION:
- break;
- case XML_ATTRIBUTE_NOTATION:
- break;
- default:
- xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
- "Internal: ATTRIBUTE struct corrupted invalid type\n",
- NULL);
- xmlFreeEnumeration(tree);
- return(NULL);
- }
- if ((defaultValue != NULL) &&
- (!xmlValidateAttributeValueInternal(dtd->doc, type, defaultValue))) {
- xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_DEFAULT,
- "Attribute %s of %s: invalid default value\n",
- elem, name, defaultValue);
- defaultValue = NULL;
- if (ctxt != NULL)
- ctxt->valid = 0;
- }
-#endif /* LIBXML_VALID_ENABLED */
-
- /*
- * Check first that an attribute defined in the external subset wasn't
- * already defined in the internal subset
- */
- if ((dtd->doc != NULL) && (dtd->doc->extSubset == dtd) &&
- (dtd->doc->intSubset != NULL) &&
- (dtd->doc->intSubset->attributes != NULL)) {
- ret = xmlHashLookup3(dtd->doc->intSubset->attributes, name, ns, elem);
- if (ret != NULL) {
- xmlFreeEnumeration(tree);
- return(NULL);
- }
- }
-
- /*
- * Create the Attribute table if needed.
- */
- table = (xmlAttributeTablePtr) dtd->attributes;
- if (table == NULL) {
- table = xmlHashCreateDict(0, dict);
- dtd->attributes = (void *) table;
- }
- if (table == NULL) {
- xmlVErrMemory(ctxt,
- "xmlAddAttributeDecl: Table creation failed!\n");
- xmlFreeEnumeration(tree);
- return(NULL);
- }
-
-
- ret = (xmlAttributePtr) xmlMalloc(sizeof(xmlAttribute));
- if (ret == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- xmlFreeEnumeration(tree);
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlAttribute));
- ret->type = XML_ATTRIBUTE_DECL;
-
- /*
- * fill the structure.
- */
- ret->atype = type;
- /*
- * doc must be set before possible error causes call
- * to xmlFreeAttribute (because it's used to check on
- * dict use)
- */
- ret->doc = dtd->doc;
- if (dict) {
- ret->name = xmlDictLookup(dict, name, -1);
- ret->prefix = xmlDictLookup(dict, ns, -1);
- ret->elem = xmlDictLookup(dict, elem, -1);
- } else {
- ret->name = xmlStrdup(name);
- ret->prefix = xmlStrdup(ns);
- ret->elem = xmlStrdup(elem);
- }
- ret->def = def;
- ret->tree = tree;
- if (defaultValue != NULL) {
- if (dict)
- ret->defaultValue = xmlDictLookup(dict, defaultValue, -1);
- else
- ret->defaultValue = xmlStrdup(defaultValue);
- }
-
- /*
- * Validity Check:
- * Search the DTD for previous declarations of the ATTLIST
- */
- if (xmlHashAddEntry3(table, ret->name, ret->prefix, ret->elem, ret) < 0) {
-#ifdef LIBXML_VALID_ENABLED
- /*
- * The attribute is already defined in this DTD.
- */
- xmlErrValidWarning(ctxt, (xmlNodePtr) dtd, XML_DTD_ATTRIBUTE_REDEFINED,
- "Attribute %s of element %s: already defined\n",
- name, elem, NULL);
-#endif /* LIBXML_VALID_ENABLED */
- xmlFreeAttribute(ret);
- return(NULL);
- }
-
- /*
- * Validity Check:
- * Multiple ID per element
- */
- elemDef = xmlGetDtdElementDesc2(dtd, elem, 1);
- if (elemDef != NULL) {
-
-#ifdef LIBXML_VALID_ENABLED
- if ((type == XML_ATTRIBUTE_ID) &&
- (xmlScanIDAttributeDecl(NULL, elemDef, 1) != 0)) {
- xmlErrValidNode(ctxt, (xmlNodePtr) dtd, XML_DTD_MULTIPLE_ID,
- "Element %s has too may ID attributes defined : %s\n",
- elem, name, NULL);
- if (ctxt != NULL)
- ctxt->valid = 0;
- }
-#endif /* LIBXML_VALID_ENABLED */
-
- /*
- * Insert namespace default def first they need to be
- * processed first.
- */
- if ((xmlStrEqual(ret->name, BAD_CAST "xmlns")) ||
- ((ret->prefix != NULL &&
- (xmlStrEqual(ret->prefix, BAD_CAST "xmlns"))))) {
- ret->nexth = elemDef->attributes;
- elemDef->attributes = ret;
- } else {
- xmlAttributePtr tmp = elemDef->attributes;
-
- while ((tmp != NULL) &&
- ((xmlStrEqual(tmp->name, BAD_CAST "xmlns")) ||
- ((ret->prefix != NULL &&
- (xmlStrEqual(ret->prefix, BAD_CAST "xmlns")))))) {
- if (tmp->nexth == NULL)
- break;
- tmp = tmp->nexth;
- }
- if (tmp != NULL) {
- ret->nexth = tmp->nexth;
- tmp->nexth = ret;
- } else {
- ret->nexth = elemDef->attributes;
- elemDef->attributes = ret;
- }
- }
- }
-
- /*
- * Link it to the DTD
- */
- ret->parent = dtd;
- if (dtd->last == NULL) {
- dtd->children = dtd->last = (xmlNodePtr) ret;
- } else {
- dtd->last->next = (xmlNodePtr) ret;
- ret->prev = dtd->last;
- dtd->last = (xmlNodePtr) ret;
- }
- return(ret);
-}
-
-/**
- * xmlFreeAttributeTable:
- * @table: An attribute table
- *
- * Deallocate the memory used by an entities hash table.
- */
-void
-xmlFreeAttributeTable(xmlAttributeTablePtr table) {
- xmlHashFree(table, (xmlHashDeallocator) xmlFreeAttribute);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlCopyAttribute:
- * @attr: An attribute
- *
- * Build a copy of an attribute.
- *
- * Returns the new xmlAttributePtr or NULL in case of error.
- */
-static xmlAttributePtr
-xmlCopyAttribute(xmlAttributePtr attr) {
- xmlAttributePtr cur;
-
- cur = (xmlAttributePtr) xmlMalloc(sizeof(xmlAttribute));
- if (cur == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlAttribute));
- cur->type = XML_ATTRIBUTE_DECL;
- cur->atype = attr->atype;
- cur->def = attr->def;
- cur->tree = xmlCopyEnumeration(attr->tree);
- if (attr->elem != NULL)
- cur->elem = xmlStrdup(attr->elem);
- if (attr->name != NULL)
- cur->name = xmlStrdup(attr->name);
- if (attr->prefix != NULL)
- cur->prefix = xmlStrdup(attr->prefix);
- if (attr->defaultValue != NULL)
- cur->defaultValue = xmlStrdup(attr->defaultValue);
- return(cur);
-}
-
-/**
- * xmlCopyAttributeTable:
- * @table: An attribute table
- *
- * Build a copy of an attribute table.
- *
- * Returns the new xmlAttributeTablePtr or NULL in case of error.
- */
-xmlAttributeTablePtr
-xmlCopyAttributeTable(xmlAttributeTablePtr table) {
- return((xmlAttributeTablePtr) xmlHashCopy(table,
- (xmlHashCopier) xmlCopyAttribute));
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlDumpAttributeDecl:
- * @buf: the XML buffer output
- * @attr: An attribute declaration
- *
- * This will dump the content of the attribute declaration as an XML
- * DTD definition
- */
-void
-xmlDumpAttributeDecl(xmlBufferPtr buf, xmlAttributePtr attr) {
- if ((buf == NULL) || (attr == NULL))
- return;
- xmlBufferWriteChar(buf, "<!ATTLIST ");
- xmlBufferWriteCHAR(buf, attr->elem);
- xmlBufferWriteChar(buf, " ");
- if (attr->prefix != NULL) {
- xmlBufferWriteCHAR(buf, attr->prefix);
- xmlBufferWriteChar(buf, ":");
- }
- xmlBufferWriteCHAR(buf, attr->name);
- switch (attr->atype) {
- case XML_ATTRIBUTE_CDATA:
- xmlBufferWriteChar(buf, " CDATA");
- break;
- case XML_ATTRIBUTE_ID:
- xmlBufferWriteChar(buf, " ID");
- break;
- case XML_ATTRIBUTE_IDREF:
- xmlBufferWriteChar(buf, " IDREF");
- break;
- case XML_ATTRIBUTE_IDREFS:
- xmlBufferWriteChar(buf, " IDREFS");
- break;
- case XML_ATTRIBUTE_ENTITY:
- xmlBufferWriteChar(buf, " ENTITY");
- break;
- case XML_ATTRIBUTE_ENTITIES:
- xmlBufferWriteChar(buf, " ENTITIES");
- break;
- case XML_ATTRIBUTE_NMTOKEN:
- xmlBufferWriteChar(buf, " NMTOKEN");
- break;
- case XML_ATTRIBUTE_NMTOKENS:
- xmlBufferWriteChar(buf, " NMTOKENS");
- break;
- case XML_ATTRIBUTE_ENUMERATION:
- xmlBufferWriteChar(buf, " (");
- xmlDumpEnumeration(buf, attr->tree);
- break;
- case XML_ATTRIBUTE_NOTATION:
- xmlBufferWriteChar(buf, " NOTATION (");
- xmlDumpEnumeration(buf, attr->tree);
- break;
- default:
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "Internal: ATTRIBUTE struct corrupted invalid type\n",
- NULL);
- }
- switch (attr->def) {
- case XML_ATTRIBUTE_NONE:
- break;
- case XML_ATTRIBUTE_REQUIRED:
- xmlBufferWriteChar(buf, " #REQUIRED");
- break;
- case XML_ATTRIBUTE_IMPLIED:
- xmlBufferWriteChar(buf, " #IMPLIED");
- break;
- case XML_ATTRIBUTE_FIXED:
- xmlBufferWriteChar(buf, " #FIXED");
- break;
- default:
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "Internal: ATTRIBUTE struct corrupted invalid def\n",
- NULL);
- }
- if (attr->defaultValue != NULL) {
- xmlBufferWriteChar(buf, " ");
- xmlBufferWriteQuotedString(buf, attr->defaultValue);
- }
- xmlBufferWriteChar(buf, ">\n");
-}
-
-/**
- * xmlDumpAttributeDeclScan:
- * @attr: An attribute declaration
- * @buf: the XML buffer output
- *
- * This is used with the hash scan function - just reverses arguments
- */
-static void
-xmlDumpAttributeDeclScan(xmlAttributePtr attr, xmlBufferPtr buf) {
- xmlDumpAttributeDecl(buf, attr);
-}
-
-/**
- * xmlDumpAttributeTable:
- * @buf: the XML buffer output
- * @table: An attribute table
- *
- * This will dump the content of the attribute table as an XML DTD definition
- */
-void
-xmlDumpAttributeTable(xmlBufferPtr buf, xmlAttributeTablePtr table) {
- if ((buf == NULL) || (table == NULL))
- return;
- xmlHashScan(table, (xmlHashScanner) xmlDumpAttributeDeclScan, buf);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- * *
- * NOTATIONs *
- * *
- ************************************************************************/
-/**
- * xmlFreeNotation:
- * @not: A notation
- *
- * Deallocate the memory used by an notation definition
- */
-static void
-xmlFreeNotation(xmlNotationPtr nota) {
- if (nota == NULL) return;
- if (nota->name != NULL)
- xmlFree((xmlChar *) nota->name);
- if (nota->PublicID != NULL)
- xmlFree((xmlChar *) nota->PublicID);
- if (nota->SystemID != NULL)
- xmlFree((xmlChar *) nota->SystemID);
- xmlFree(nota);
-}
-
-
-/**
- * xmlAddNotationDecl:
- * @dtd: pointer to the DTD
- * @ctxt: the validation context
- * @name: the entity name
- * @PublicID: the public identifier or NULL
- * @SystemID: the system identifier or NULL
- *
- * Register a new notation declaration
- *
- * Returns NULL if not, otherwise the entity
- */
-xmlNotationPtr
-xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd,
- const xmlChar *name,
- const xmlChar *PublicID, const xmlChar *SystemID) {
- xmlNotationPtr ret;
- xmlNotationTablePtr table;
-
- if (dtd == NULL) {
- return(NULL);
- }
- if (name == NULL) {
- return(NULL);
- }
- if ((PublicID == NULL) && (SystemID == NULL)) {
- return(NULL);
- }
-
- /*
- * Create the Notation table if needed.
- */
- table = (xmlNotationTablePtr) dtd->notations;
- if (table == NULL) {
- xmlDictPtr dict = NULL;
- if (dtd->doc != NULL)
- dict = dtd->doc->dict;
-
- dtd->notations = table = xmlHashCreateDict(0, dict);
- }
- if (table == NULL) {
- xmlVErrMemory(ctxt,
- "xmlAddNotationDecl: Table creation failed!\n");
- return(NULL);
- }
-
- ret = (xmlNotationPtr) xmlMalloc(sizeof(xmlNotation));
- if (ret == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlNotation));
-
- /*
- * fill the structure.
- */
- ret->name = xmlStrdup(name);
- if (SystemID != NULL)
- ret->SystemID = xmlStrdup(SystemID);
- if (PublicID != NULL)
- ret->PublicID = xmlStrdup(PublicID);
-
- /*
- * Validity Check:
- * Check the DTD for previous declarations of the ATTLIST
- */
- if (xmlHashAddEntry(table, name, ret)) {
-#ifdef LIBXML_VALID_ENABLED
- xmlErrValid(NULL, XML_DTD_NOTATION_REDEFINED,
- "xmlAddNotationDecl: %s already defined\n",
- (const char *) name);
-#endif /* LIBXML_VALID_ENABLED */
- xmlFreeNotation(ret);
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlFreeNotationTable:
- * @table: An notation table
- *
- * Deallocate the memory used by an entities hash table.
- */
-void
-xmlFreeNotationTable(xmlNotationTablePtr table) {
- xmlHashFree(table, (xmlHashDeallocator) xmlFreeNotation);
-}
-
-#ifdef LIBXML_TREE_ENABLED
-/**
- * xmlCopyNotation:
- * @nota: A notation
- *
- * Build a copy of a notation.
- *
- * Returns the new xmlNotationPtr or NULL in case of error.
- */
-static xmlNotationPtr
-xmlCopyNotation(xmlNotationPtr nota) {
- xmlNotationPtr cur;
-
- cur = (xmlNotationPtr) xmlMalloc(sizeof(xmlNotation));
- if (cur == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return(NULL);
- }
- if (nota->name != NULL)
- cur->name = xmlStrdup(nota->name);
- else
- cur->name = NULL;
- if (nota->PublicID != NULL)
- cur->PublicID = xmlStrdup(nota->PublicID);
- else
- cur->PublicID = NULL;
- if (nota->SystemID != NULL)
- cur->SystemID = xmlStrdup(nota->SystemID);
- else
- cur->SystemID = NULL;
- return(cur);
-}
-
-/**
- * xmlCopyNotationTable:
- * @table: A notation table
- *
- * Build a copy of a notation table.
- *
- * Returns the new xmlNotationTablePtr or NULL in case of error.
- */
-xmlNotationTablePtr
-xmlCopyNotationTable(xmlNotationTablePtr table) {
- return((xmlNotationTablePtr) xmlHashCopy(table,
- (xmlHashCopier) xmlCopyNotation));
-}
-#endif /* LIBXML_TREE_ENABLED */
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlDumpNotationDecl:
- * @buf: the XML buffer output
- * @nota: A notation declaration
- *
- * This will dump the content the notation declaration as an XML DTD definition
- */
-void
-xmlDumpNotationDecl(xmlBufferPtr buf, xmlNotationPtr nota) {
- if ((buf == NULL) || (nota == NULL))
- return;
- xmlBufferWriteChar(buf, "<!NOTATION ");
- xmlBufferWriteCHAR(buf, nota->name);
- if (nota->PublicID != NULL) {
- xmlBufferWriteChar(buf, " PUBLIC ");
- xmlBufferWriteQuotedString(buf, nota->PublicID);
- if (nota->SystemID != NULL) {
- xmlBufferWriteChar(buf, " ");
- xmlBufferWriteQuotedString(buf, nota->SystemID);
- }
- } else {
- xmlBufferWriteChar(buf, " SYSTEM ");
- xmlBufferWriteQuotedString(buf, nota->SystemID);
- }
- xmlBufferWriteChar(buf, " >\n");
-}
-
-/**
- * xmlDumpNotationDeclScan:
- * @nota: A notation declaration
- * @buf: the XML buffer output
- *
- * This is called with the hash scan function, and just reverses args
- */
-static void
-xmlDumpNotationDeclScan(xmlNotationPtr nota, xmlBufferPtr buf) {
- xmlDumpNotationDecl(buf, nota);
-}
-
-/**
- * xmlDumpNotationTable:
- * @buf: the XML buffer output
- * @table: A notation table
- *
- * This will dump the content of the notation table as an XML DTD definition
- */
-void
-xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table) {
- if ((buf == NULL) || (table == NULL))
- return;
- xmlHashScan(table, (xmlHashScanner) xmlDumpNotationDeclScan, buf);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- * *
- * IDs *
- * *
- ************************************************************************/
-/**
- * DICT_FREE:
- * @str: a string
- *
- * Free a string if it is not owned by the "dict" dictionary in the
- * current scope
- */
-#define DICT_FREE(str) \
- if ((str) && ((!dict) || \
- (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
- xmlFree((char *)(str));
-
-/**
- * xmlFreeID:
- * @not: A id
- *
- * Deallocate the memory used by an id definition
- */
-static void
-xmlFreeID(xmlIDPtr id) {
- xmlDictPtr dict = NULL;
-
- if (id == NULL) return;
-
- if (id->doc != NULL)
- dict = id->doc->dict;
-
- if (id->value != NULL)
- DICT_FREE(id->value)
- if (id->name != NULL)
- DICT_FREE(id->name)
- xmlFree(id);
-}
-
-
-/**
- * xmlAddID:
- * @ctxt: the validation context
- * @doc: pointer to the document
- * @value: the value name
- * @attr: the attribute holding the ID
- *
- * Register a new id declaration
- *
- * Returns NULL if not, otherwise the new xmlIDPtr
- */
-xmlIDPtr
-xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
- xmlAttrPtr attr) {
- xmlIDPtr ret;
- xmlIDTablePtr table;
-
- if (doc == NULL) {
- return(NULL);
- }
- if (value == NULL) {
- return(NULL);
- }
- if (attr == NULL) {
- return(NULL);
- }
-
- /*
- * Create the ID table if needed.
- */
- table = (xmlIDTablePtr) doc->ids;
- if (table == NULL) {
- doc->ids = table = xmlHashCreateDict(0, doc->dict);
- }
- if (table == NULL) {
- xmlVErrMemory(ctxt,
- "xmlAddID: Table creation failed!\n");
- return(NULL);
- }
-
- ret = (xmlIDPtr) xmlMalloc(sizeof(xmlID));
- if (ret == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- return(NULL);
- }
-
- /*
- * fill the structure.
- */
- ret->value = xmlStrdup(value);
- ret->doc = doc;
- if ((ctxt != NULL) && (ctxt->vstateNr != 0)) {
- /*
- * Operating in streaming mode, attr is gonna disapear
- */
- if (doc->dict != NULL)
- ret->name = xmlDictLookup(doc->dict, attr->name, -1);
- else
- ret->name = xmlStrdup(attr->name);
- ret->attr = NULL;
- } else {
- ret->attr = attr;
- ret->name = NULL;
- }
- ret->lineno = xmlGetLineNo(attr->parent);
-
- if (xmlHashAddEntry(table, value, ret) < 0) {
-#ifdef LIBXML_VALID_ENABLED
- /*
- * The id is already defined in this DTD.
- */
- if (ctxt != NULL) {
- xmlErrValidNode(ctxt, attr->parent, XML_DTD_ID_REDEFINED,
- "ID %s already defined\n", value, NULL, NULL);
- }
-#endif /* LIBXML_VALID_ENABLED */
- xmlFreeID(ret);
- return(NULL);
- }
- if (attr != NULL)
- attr->atype = XML_ATTRIBUTE_ID;
- return(ret);
-}
-
-/**
- * xmlFreeIDTable:
- * @table: An id table
- *
- * Deallocate the memory used by an ID hash table.
- */
-void
-xmlFreeIDTable(xmlIDTablePtr table) {
- xmlHashFree(table, (xmlHashDeallocator) xmlFreeID);
-}
-
-/**
- * xmlIsID:
- * @doc: the document
- * @elem: the element carrying the attribute
- * @attr: the attribute
- *
- * Determine whether an attribute is of type ID. In case we have DTD(s)
- * then this is done if DTD loading has been requested. In the case
- * of HTML documents parsed with the HTML parser, then ID detection is
- * done systematically.
- *
- * Returns 0 or 1 depending on the lookup result
- */
-int
-xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
- if ((attr == NULL) || (attr->name == NULL)) return(0);
- if ((attr->ns != NULL) && (attr->ns->prefix != NULL) &&
- (!strcmp((char *) attr->name, "id")) &&
- (!strcmp((char *) attr->ns->prefix, "xml")))
- return(1);
- if (doc == NULL) return(0);
- if ((doc->intSubset == NULL) && (doc->extSubset == NULL) &&
- (doc->type != XML_HTML_DOCUMENT_NODE)) {
- return(0);
- } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
- if ((xmlStrEqual(BAD_CAST "id", attr->name)) ||
- ((xmlStrEqual(BAD_CAST "name", attr->name)) &&
- ((elem == NULL) || (xmlStrEqual(elem->name, BAD_CAST "a")))))
- return(1);
- return(0);
- } else if (elem == NULL) {
- return(0);
- } else {
- xmlAttributePtr attrDecl = NULL;
-
- xmlChar felem[50], fattr[50];
- xmlChar *fullelemname, *fullattrname;
-
- fullelemname = (elem->ns != NULL && elem->ns->prefix != NULL) ?
- xmlBuildQName(elem->name, elem->ns->prefix, felem, 50) :
- (xmlChar *)elem->name;
-
- fullattrname = (attr->ns != NULL && attr->ns->prefix != NULL) ?
- xmlBuildQName(attr->name, attr->ns->prefix, fattr, 50) :
- (xmlChar *)attr->name;
-
- if (fullelemname != NULL && fullattrname != NULL) {
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullelemname,
- fullattrname);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullelemname,
- fullattrname);
- }
-
- if ((fullattrname != fattr) && (fullattrname != attr->name))
- xmlFree(fullattrname);
- if ((fullelemname != felem) && (fullelemname != elem->name))
- xmlFree(fullelemname);
-
- if ((attrDecl != NULL) && (attrDecl->atype == XML_ATTRIBUTE_ID))
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlRemoveID:
- * @doc: the document
- * @attr: the attribute
- *
- * Remove the given attribute from the ID table maintained internally.
- *
- * Returns -1 if the lookup failed and 0 otherwise
- */
-int
-xmlRemoveID(xmlDocPtr doc, xmlAttrPtr attr) {
- xmlIDTablePtr table;
- xmlIDPtr id;
- xmlChar *ID;
-
- if (doc == NULL) return(-1);
- if (attr == NULL) return(-1);
-
- table = (xmlIDTablePtr) doc->ids;
- if (table == NULL)
- return(-1);
-
- ID = xmlNodeListGetString(doc, attr->children, 1);
- if (ID == NULL)
- return(-1);
-
- id = xmlHashLookup(table, ID);
- if (id == NULL || id->attr != attr) {
- xmlFree(ID);
- return(-1);
- }
-
- xmlHashRemoveEntry(table, ID, (xmlHashDeallocator) xmlFreeID);
- xmlFree(ID);
- attr->atype = 0;
- return(0);
-}
-
-/**
- * xmlGetID:
- * @doc: pointer to the document
- * @ID: the ID value
- *
- * Search the attribute declaring the given ID
- *
- * Returns NULL if not found, otherwise the xmlAttrPtr defining the ID
- */
-xmlAttrPtr
-xmlGetID(xmlDocPtr doc, const xmlChar *ID) {
- xmlIDTablePtr table;
- xmlIDPtr id;
-
- if (doc == NULL) {
- return(NULL);
- }
-
- if (ID == NULL) {
- return(NULL);
- }
-
- table = (xmlIDTablePtr) doc->ids;
- if (table == NULL)
- return(NULL);
-
- id = xmlHashLookup(table, ID);
- if (id == NULL)
- return(NULL);
- if (id->attr == NULL) {
- /*
- * We are operating on a stream, return a well known reference
- * since the attribute node doesn't exist anymore
- */
- return((xmlAttrPtr) doc);
- }
- return(id->attr);
-}
-
-/************************************************************************
- * *
- * Refs *
- * *
- ************************************************************************/
-typedef struct xmlRemoveMemo_t
-{
- xmlListPtr l;
- xmlAttrPtr ap;
-} xmlRemoveMemo;
-
-typedef xmlRemoveMemo *xmlRemoveMemoPtr;
-
-typedef struct xmlValidateMemo_t
-{
- xmlValidCtxtPtr ctxt;
- const xmlChar *name;
-} xmlValidateMemo;
-
-typedef xmlValidateMemo *xmlValidateMemoPtr;
-
-/**
- * xmlFreeRef:
- * @lk: A list link
- *
- * Deallocate the memory used by a ref definition
- */
-static void
-xmlFreeRef(xmlLinkPtr lk) {
- xmlRefPtr ref = (xmlRefPtr)xmlLinkGetData(lk);
- if (ref == NULL) return;
- if (ref->value != NULL)
- xmlFree((xmlChar *)ref->value);
- if (ref->name != NULL)
- xmlFree((xmlChar *)ref->name);
- xmlFree(ref);
-}
-
-/**
- * xmlFreeRefList:
- * @list_ref: A list of references.
- *
- * Deallocate the memory used by a list of references
- */
-static void
-xmlFreeRefList(xmlListPtr list_ref) {
- if (list_ref == NULL) return;
- xmlListDelete(list_ref);
-}
-
-/**
- * xmlWalkRemoveRef:
- * @data: Contents of current link
- * @user: Value supplied by the user
- *
- * Returns 0 to abort the walk or 1 to continue
- */
-static int
-xmlWalkRemoveRef(const void *data, const void *user)
-{
- xmlAttrPtr attr0 = ((xmlRefPtr)data)->attr;
- xmlAttrPtr attr1 = ((xmlRemoveMemoPtr)user)->ap;
- xmlListPtr ref_list = ((xmlRemoveMemoPtr)user)->l;
-
- if (attr0 == attr1) { /* Matched: remove and terminate walk */
- xmlListRemoveFirst(ref_list, (void *)data);
- return 0;
- }
- return 1;
-}
-
-/**
- * xmlDummyCompare
- * @data0: Value supplied by the user
- * @data1: Value supplied by the user
- *
- * Do nothing, return 0. Used to create unordered lists.
- */
-static int
-xmlDummyCompare(const void *data0 ATTRIBUTE_UNUSED,
- const void *data1 ATTRIBUTE_UNUSED)
-{
- return (0);
-}
-
-/**
- * xmlAddRef:
- * @ctxt: the validation context
- * @doc: pointer to the document
- * @value: the value name
- * @attr: the attribute holding the Ref
- *
- * Register a new ref declaration
- *
- * Returns NULL if not, otherwise the new xmlRefPtr
- */
-xmlRefPtr
-xmlAddRef(xmlValidCtxtPtr ctxt, xmlDocPtr doc, const xmlChar *value,
- xmlAttrPtr attr) {
- xmlRefPtr ret;
- xmlRefTablePtr table;
- xmlListPtr ref_list;
-
- if (doc == NULL) {
- return(NULL);
- }
- if (value == NULL) {
- return(NULL);
- }
- if (attr == NULL) {
- return(NULL);
- }
-
- /*
- * Create the Ref table if needed.
- */
- table = (xmlRefTablePtr) doc->refs;
- if (table == NULL) {
- doc->refs = table = xmlHashCreateDict(0, doc->dict);
- }
- if (table == NULL) {
- xmlVErrMemory(ctxt,
- "xmlAddRef: Table creation failed!\n");
- return(NULL);
- }
-
- ret = (xmlRefPtr) xmlMalloc(sizeof(xmlRef));
- if (ret == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- return(NULL);
- }
-
- /*
- * fill the structure.
- */
- ret->value = xmlStrdup(value);
- if ((ctxt != NULL) && (ctxt->vstateNr != 0)) {
- /*
- * Operating in streaming mode, attr is gonna disapear
- */
- ret->name = xmlStrdup(attr->name);
- ret->attr = NULL;
- } else {
- ret->name = NULL;
- ret->attr = attr;
- }
- ret->lineno = xmlGetLineNo(attr->parent);
-
- /* To add a reference :-
- * References are maintained as a list of references,
- * Lookup the entry, if no entry create new nodelist
- * Add the owning node to the NodeList
- * Return the ref
- */
-
- if (NULL == (ref_list = xmlHashLookup(table, value))) {
- if (NULL == (ref_list = xmlListCreate(xmlFreeRef, xmlDummyCompare))) {
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlAddRef: Reference list creation failed!\n",
- NULL);
- goto failed;
- }
- if (xmlHashAddEntry(table, value, ref_list) < 0) {
- xmlListDelete(ref_list);
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlAddRef: Reference list insertion failed!\n",
- NULL);
- goto failed;
- }
- }
- if (xmlListAppend(ref_list, ret) != 0) {
- xmlErrValid(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlAddRef: Reference list insertion failed!\n",
- NULL);
- goto failed;
- }
- return(ret);
-failed:
- if (ret != NULL) {
- if (ret->value != NULL)
- xmlFree((char *)ret->value);
- if (ret->name != NULL)
- xmlFree((char *)ret->name);
- xmlFree(ret);
- }
- return(NULL);
-}
-
-/**
- * xmlFreeRefTable:
- * @table: An ref table
- *
- * Deallocate the memory used by an Ref hash table.
- */
-void
-xmlFreeRefTable(xmlRefTablePtr table) {
- xmlHashFree(table, (xmlHashDeallocator) xmlFreeRefList);
-}
-
-/**
- * xmlIsRef:
- * @doc: the document
- * @elem: the element carrying the attribute
- * @attr: the attribute
- *
- * Determine whether an attribute is of type Ref. In case we have DTD(s)
- * then this is simple, otherwise we use an heuristic: name Ref (upper
- * or lowercase).
- *
- * Returns 0 or 1 depending on the lookup result
- */
-int
-xmlIsRef(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) {
- if (attr == NULL)
- return(0);
- if (doc == NULL) {
- doc = attr->doc;
- if (doc == NULL) return(0);
- }
-
- if ((doc->intSubset == NULL) && (doc->extSubset == NULL)) {
- return(0);
- } else if (doc->type == XML_HTML_DOCUMENT_NODE) {
- /* TODO @@@ */
- return(0);
- } else {
- xmlAttributePtr attrDecl;
-
- if (elem == NULL) return(0);
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, elem->name, attr->name);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset,
- elem->name, attr->name);
-
- if ((attrDecl != NULL) &&
- (attrDecl->atype == XML_ATTRIBUTE_IDREF ||
- attrDecl->atype == XML_ATTRIBUTE_IDREFS))
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlRemoveRef:
- * @doc: the document
- * @attr: the attribute
- *
- * Remove the given attribute from the Ref table maintained internally.
- *
- * Returns -1 if the lookup failed and 0 otherwise
- */
-int
-xmlRemoveRef(xmlDocPtr doc, xmlAttrPtr attr) {
- xmlListPtr ref_list;
- xmlRefTablePtr table;
- xmlChar *ID;
- xmlRemoveMemo target;
-
- if (doc == NULL) return(-1);
- if (attr == NULL) return(-1);
-
- table = (xmlRefTablePtr) doc->refs;
- if (table == NULL)
- return(-1);
-
- ID = xmlNodeListGetString(doc, attr->children, 1);
- if (ID == NULL)
- return(-1);
-
- ref_list = xmlHashLookup(table, ID);
- if(ref_list == NULL) {
- xmlFree(ID);
- return (-1);
- }
-
- /* At this point, ref_list refers to a list of references which
- * have the same key as the supplied attr. Our list of references
- * is ordered by reference address and we don't have that information
- * here to use when removing. We'll have to walk the list and
- * check for a matching attribute, when we find one stop the walk
- * and remove the entry.
- * The list is ordered by reference, so that means we don't have the
- * key. Passing the list and the reference to the walker means we
- * will have enough data to be able to remove the entry.
- */
- target.l = ref_list;
- target.ap = attr;
-
- /* Remove the supplied attr from our list */
- xmlListWalk(ref_list, xmlWalkRemoveRef, &target);
-
- /*If the list is empty then remove the list entry in the hash */
- if (xmlListEmpty(ref_list))
- xmlHashUpdateEntry(table, ID, NULL, (xmlHashDeallocator)
- xmlFreeRefList);
- xmlFree(ID);
- return(0);
-}
-
-/**
- * xmlGetRefs:
- * @doc: pointer to the document
- * @ID: the ID value
- *
- * Find the set of references for the supplied ID.
- *
- * Returns NULL if not found, otherwise node set for the ID.
- */
-xmlListPtr
-xmlGetRefs(xmlDocPtr doc, const xmlChar *ID) {
- xmlRefTablePtr table;
-
- if (doc == NULL) {
- return(NULL);
- }
-
- if (ID == NULL) {
- return(NULL);
- }
-
- table = (xmlRefTablePtr) doc->refs;
- if (table == NULL)
- return(NULL);
-
- return (xmlHashLookup(table, ID));
-}
-
-/************************************************************************
- * *
- * Routines for validity checking *
- * *
- ************************************************************************/
-
-/**
- * xmlGetDtdElementDesc:
- * @dtd: a pointer to the DtD to search
- * @name: the element name
- *
- * Search the DTD for the description of this element
- *
- * returns the xmlElementPtr if found or NULL
- */
-
-xmlElementPtr
-xmlGetDtdElementDesc(xmlDtdPtr dtd, const xmlChar *name) {
- xmlElementTablePtr table;
- xmlElementPtr cur;
- xmlChar *uqname = NULL, *prefix = NULL;
-
- if ((dtd == NULL) || (name == NULL)) return(NULL);
- if (dtd->elements == NULL)
- return(NULL);
- table = (xmlElementTablePtr) dtd->elements;
-
- uqname = xmlSplitQName2(name, &prefix);
- if (uqname != NULL)
- name = uqname;
- cur = xmlHashLookup2(table, name, prefix);
- if (prefix != NULL) xmlFree(prefix);
- if (uqname != NULL) xmlFree(uqname);
- return(cur);
-}
-/**
- * xmlGetDtdElementDesc2:
- * @dtd: a pointer to the DtD to search
- * @name: the element name
- * @create: create an empty description if not found
- *
- * Search the DTD for the description of this element
- *
- * returns the xmlElementPtr if found or NULL
- */
-
-static xmlElementPtr
-xmlGetDtdElementDesc2(xmlDtdPtr dtd, const xmlChar *name, int create) {
- xmlElementTablePtr table;
- xmlElementPtr cur;
- xmlChar *uqname = NULL, *prefix = NULL;
-
- if (dtd == NULL) return(NULL);
- if (dtd->elements == NULL) {
- xmlDictPtr dict = NULL;
-
- if (dtd->doc != NULL)
- dict = dtd->doc->dict;
-
- if (!create)
- return(NULL);
- /*
- * Create the Element table if needed.
- */
- table = (xmlElementTablePtr) dtd->elements;
- if (table == NULL) {
- table = xmlHashCreateDict(0, dict);
- dtd->elements = (void *) table;
- }
- if (table == NULL) {
- xmlVErrMemory(NULL, "element table allocation failed");
- return(NULL);
- }
- }
- table = (xmlElementTablePtr) dtd->elements;
-
- uqname = xmlSplitQName2(name, &prefix);
- if (uqname != NULL)
- name = uqname;
- cur = xmlHashLookup2(table, name, prefix);
- if ((cur == NULL) && (create)) {
- cur = (xmlElementPtr) xmlMalloc(sizeof(xmlElement));
- if (cur == NULL) {
- xmlVErrMemory(NULL, "malloc failed");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlElement));
- cur->type = XML_ELEMENT_DECL;
-
- /*
- * fill the structure.
- */
- cur->name = xmlStrdup(name);
- cur->prefix = xmlStrdup(prefix);
- cur->etype = XML_ELEMENT_TYPE_UNDEFINED;
-
- xmlHashAddEntry2(table, name, prefix, cur);
- }
- if (prefix != NULL) xmlFree(prefix);
- if (uqname != NULL) xmlFree(uqname);
- return(cur);
-}
-
-/**
- * xmlGetDtdQElementDesc:
- * @dtd: a pointer to the DtD to search
- * @name: the element name
- * @prefix: the element namespace prefix
- *
- * Search the DTD for the description of this element
- *
- * returns the xmlElementPtr if found or NULL
- */
-
-xmlElementPtr
-xmlGetDtdQElementDesc(xmlDtdPtr dtd, const xmlChar *name,
- const xmlChar *prefix) {
- xmlElementTablePtr table;
-
- if (dtd == NULL) return(NULL);
- if (dtd->elements == NULL) return(NULL);
- table = (xmlElementTablePtr) dtd->elements;
-
- return(xmlHashLookup2(table, name, prefix));
-}
-
-/**
- * xmlGetDtdAttrDesc:
- * @dtd: a pointer to the DtD to search
- * @elem: the element name
- * @name: the attribute name
- *
- * Search the DTD for the description of this attribute on
- * this element.
- *
- * returns the xmlAttributePtr if found or NULL
- */
-
-xmlAttributePtr
-xmlGetDtdAttrDesc(xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name) {
- xmlAttributeTablePtr table;
- xmlAttributePtr cur;
- xmlChar *uqname = NULL, *prefix = NULL;
-
- if (dtd == NULL) return(NULL);
- if (dtd->attributes == NULL) return(NULL);
-
- table = (xmlAttributeTablePtr) dtd->attributes;
- if (table == NULL)
- return(NULL);
-
- uqname = xmlSplitQName2(name, &prefix);
-
- if (uqname != NULL) {
- cur = xmlHashLookup3(table, uqname, prefix, elem);
- if (prefix != NULL) xmlFree(prefix);
- if (uqname != NULL) xmlFree(uqname);
- } else
- cur = xmlHashLookup3(table, name, NULL, elem);
- return(cur);
-}
-
-/**
- * xmlGetDtdQAttrDesc:
- * @dtd: a pointer to the DtD to search
- * @elem: the element name
- * @name: the attribute name
- * @prefix: the attribute namespace prefix
- *
- * Search the DTD for the description of this qualified attribute on
- * this element.
- *
- * returns the xmlAttributePtr if found or NULL
- */
-
-xmlAttributePtr
-xmlGetDtdQAttrDesc(xmlDtdPtr dtd, const xmlChar *elem, const xmlChar *name,
- const xmlChar *prefix) {
- xmlAttributeTablePtr table;
-
- if (dtd == NULL) return(NULL);
- if (dtd->attributes == NULL) return(NULL);
- table = (xmlAttributeTablePtr) dtd->attributes;
-
- return(xmlHashLookup3(table, name, prefix, elem));
-}
-
-/**
- * xmlGetDtdNotationDesc:
- * @dtd: a pointer to the DtD to search
- * @name: the notation name
- *
- * Search the DTD for the description of this notation
- *
- * returns the xmlNotationPtr if found or NULL
- */
-
-xmlNotationPtr
-xmlGetDtdNotationDesc(xmlDtdPtr dtd, const xmlChar *name) {
- xmlNotationTablePtr table;
-
- if (dtd == NULL) return(NULL);
- if (dtd->notations == NULL) return(NULL);
- table = (xmlNotationTablePtr) dtd->notations;
-
- return(xmlHashLookup(table, name));
-}
-
-#if defined(LIBXML_VALID_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-/**
- * xmlValidateNotationUse:
- * @ctxt: the validation context
- * @doc: the document
- * @notationName: the notation name to check
- *
- * Validate that the given name match a notation declaration.
- * - [ VC: Notation Declared ]
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateNotationUse(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- const xmlChar *notationName) {
- xmlNotationPtr notaDecl;
- if ((doc == NULL) || (doc->intSubset == NULL) ||
- (notationName == NULL)) return(-1);
-
- notaDecl = xmlGetDtdNotationDesc(doc->intSubset, notationName);
- if ((notaDecl == NULL) && (doc->extSubset != NULL))
- notaDecl = xmlGetDtdNotationDesc(doc->extSubset, notationName);
-
- if ((notaDecl == NULL) && (ctxt != NULL)) {
- xmlErrValidNode(ctxt, (xmlNodePtr) doc, XML_DTD_UNKNOWN_NOTATION,
- "NOTATION %s is not declared\n",
- notationName, NULL, NULL);
- return(0);
- }
- return(1);
-}
-#endif /* LIBXML_VALID_ENABLED or LIBXML_SCHEMAS_ENABLED */
-
-/**
- * xmlIsMixedElement:
- * @doc: the document
- * @name: the element name
- *
- * Search in the DtDs whether an element accept Mixed content (or ANY)
- * basically if it is supposed to accept text childs
- *
- * returns 0 if no, 1 if yes, and -1 if no element description is available
- */
-
-int
-xmlIsMixedElement(xmlDocPtr doc, const xmlChar *name) {
- xmlElementPtr elemDecl;
-
- if ((doc == NULL) || (doc->intSubset == NULL)) return(-1);
-
- elemDecl = xmlGetDtdElementDesc(doc->intSubset, name);
- if ((elemDecl == NULL) && (doc->extSubset != NULL))
- elemDecl = xmlGetDtdElementDesc(doc->extSubset, name);
- if (elemDecl == NULL) return(-1);
- switch (elemDecl->etype) {
- case XML_ELEMENT_TYPE_UNDEFINED:
- return(-1);
- case XML_ELEMENT_TYPE_ELEMENT:
- return(0);
- case XML_ELEMENT_TYPE_EMPTY:
- /*
- * return 1 for EMPTY since we want VC error to pop up
- * on <empty> </empty> for example
- */
- case XML_ELEMENT_TYPE_ANY:
- case XML_ELEMENT_TYPE_MIXED:
- return(1);
- }
- return(1);
-}
-
-#ifdef LIBXML_VALID_ENABLED
-
-static int
-xmlIsDocNameStartChar(xmlDocPtr doc, int c) {
- if ((doc == NULL) || (doc->properties & XML_DOC_OLD10) == 0) {
- /*
- * Use the new checks of production [4] [4a] amd [5] of the
- * Update 5 of XML-1.0
- */
- if (((c >= 'a') && (c <= 'z')) ||
- ((c >= 'A') && (c <= 'Z')) ||
- (c == '_') || (c == ':') ||
- ((c >= 0xC0) && (c <= 0xD6)) ||
- ((c >= 0xD8) && (c <= 0xF6)) ||
- ((c >= 0xF8) && (c <= 0x2FF)) ||
- ((c >= 0x370) && (c <= 0x37D)) ||
- ((c >= 0x37F) && (c <= 0x1FFF)) ||
- ((c >= 0x200C) && (c <= 0x200D)) ||
- ((c >= 0x2070) && (c <= 0x218F)) ||
- ((c >= 0x2C00) && (c <= 0x2FEF)) ||
- ((c >= 0x3001) && (c <= 0xD7FF)) ||
- ((c >= 0xF900) && (c <= 0xFDCF)) ||
- ((c >= 0xFDF0) && (c <= 0xFFFD)) ||
- ((c >= 0x10000) && (c <= 0xEFFFF)))
- return(1);
- } else {
- if (IS_LETTER(c) || (c == '_') || (c == ':'))
- return(1);
- }
- return(0);
-}
-
-static int
-xmlIsDocNameChar(xmlDocPtr doc, int c) {
- if ((doc == NULL) || (doc->properties & XML_DOC_OLD10) == 0) {
- /*
- * Use the new checks of production [4] [4a] amd [5] of the
- * Update 5 of XML-1.0
- */
- if (((c >= 'a') && (c <= 'z')) ||
- ((c >= 'A') && (c <= 'Z')) ||
- ((c >= '0') && (c <= '9')) || /* !start */
- (c == '_') || (c == ':') ||
- (c == '-') || (c == '.') || (c == 0xB7) || /* !start */
- ((c >= 0xC0) && (c <= 0xD6)) ||
- ((c >= 0xD8) && (c <= 0xF6)) ||
- ((c >= 0xF8) && (c <= 0x2FF)) ||
- ((c >= 0x300) && (c <= 0x36F)) || /* !start */
- ((c >= 0x370) && (c <= 0x37D)) ||
- ((c >= 0x37F) && (c <= 0x1FFF)) ||
- ((c >= 0x200C) && (c <= 0x200D)) ||
- ((c >= 0x203F) && (c <= 0x2040)) || /* !start */
- ((c >= 0x2070) && (c <= 0x218F)) ||
- ((c >= 0x2C00) && (c <= 0x2FEF)) ||
- ((c >= 0x3001) && (c <= 0xD7FF)) ||
- ((c >= 0xF900) && (c <= 0xFDCF)) ||
- ((c >= 0xFDF0) && (c <= 0xFFFD)) ||
- ((c >= 0x10000) && (c <= 0xEFFFF)))
- return(1);
- } else {
- if ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
- (c == '.') || (c == '-') ||
- (c == '_') || (c == ':') ||
- (IS_COMBINING(c)) ||
- (IS_EXTENDER(c)))
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlValidateNameValue:
- * @doc: pointer to the document or NULL
- * @value: an Name value
- *
- * Validate that the given value match Name production
- *
- * returns 1 if valid or 0 otherwise
- */
-
-static int
-xmlValidateNameValueInternal(xmlDocPtr doc, const xmlChar *value) {
- const xmlChar *cur;
- int val, len;
-
- if (value == NULL) return(0);
- cur = value;
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- if (!xmlIsDocNameStartChar(doc, val))
- return(0);
-
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- while (xmlIsDocNameChar(doc, val)) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
-
- if (val != 0) return(0);
-
- return(1);
-}
-
-/**
- * xmlValidateNameValue:
- * @value: an Name value
- *
- * Validate that the given value match Name production
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateNameValue(const xmlChar *value) {
- return(xmlValidateNameValueInternal(NULL, value));
-}
-
-/**
- * xmlValidateNamesValueInternal:
- * @doc: pointer to the document or NULL
- * @value: an Names value
- *
- * Validate that the given value match Names production
- *
- * returns 1 if valid or 0 otherwise
- */
-
-static int
-xmlValidateNamesValueInternal(xmlDocPtr doc, const xmlChar *value) {
- const xmlChar *cur;
- int val, len;
-
- if (value == NULL) return(0);
- cur = value;
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
-
- if (!xmlIsDocNameStartChar(doc, val))
- return(0);
-
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- while (xmlIsDocNameChar(doc, val)) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
-
- /* Should not test IS_BLANK(val) here -- see erratum E20*/
- while (val == 0x20) {
- while (val == 0x20) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
-
- if (!xmlIsDocNameStartChar(doc, val))
- return(0);
-
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
-
- while (xmlIsDocNameChar(doc, val)) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
- }
-
- if (val != 0) return(0);
-
- return(1);
-}
-
-/**
- * xmlValidateNamesValue:
- * @value: an Names value
- *
- * Validate that the given value match Names production
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateNamesValue(const xmlChar *value) {
- return(xmlValidateNamesValueInternal(NULL, value));
-}
-
-/**
- * xmlValidateNmtokenValueInternal:
- * @doc: pointer to the document or NULL
- * @value: an Nmtoken value
- *
- * Validate that the given value match Nmtoken production
- *
- * [ VC: Name Token ]
- *
- * returns 1 if valid or 0 otherwise
- */
-
-static int
-xmlValidateNmtokenValueInternal(xmlDocPtr doc, const xmlChar *value) {
- const xmlChar *cur;
- int val, len;
-
- if (value == NULL) return(0);
- cur = value;
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
-
- if (!xmlIsDocNameChar(doc, val))
- return(0);
-
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- while (xmlIsDocNameChar(doc, val)) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
-
- if (val != 0) return(0);
-
- return(1);
-}
-
-/**
- * xmlValidateNmtokenValue:
- * @value: an Nmtoken value
- *
- * Validate that the given value match Nmtoken production
- *
- * [ VC: Name Token ]
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateNmtokenValue(const xmlChar *value) {
- return(xmlValidateNmtokenValueInternal(NULL, value));
-}
-
-/**
- * xmlValidateNmtokensValueInternal:
- * @doc: pointer to the document or NULL
- * @value: an Nmtokens value
- *
- * Validate that the given value match Nmtokens production
- *
- * [ VC: Name Token ]
- *
- * returns 1 if valid or 0 otherwise
- */
-
-static int
-xmlValidateNmtokensValueInternal(xmlDocPtr doc, const xmlChar *value) {
- const xmlChar *cur;
- int val, len;
-
- if (value == NULL) return(0);
- cur = value;
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
-
- while (IS_BLANK(val)) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
-
- if (!xmlIsDocNameChar(doc, val))
- return(0);
-
- while (xmlIsDocNameChar(doc, val)) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
-
- /* Should not test IS_BLANK(val) here -- see erratum E20*/
- while (val == 0x20) {
- while (val == 0x20) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
- if (val == 0) return(1);
-
- if (!xmlIsDocNameChar(doc, val))
- return(0);
-
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
-
- while (xmlIsDocNameChar(doc, val)) {
- val = xmlStringCurrentChar(NULL, cur, &len);
- cur += len;
- }
- }
-
- if (val != 0) return(0);
-
- return(1);
-}
-
-/**
- * xmlValidateNmtokensValue:
- * @value: an Nmtokens value
- *
- * Validate that the given value match Nmtokens production
- *
- * [ VC: Name Token ]
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateNmtokensValue(const xmlChar *value) {
- return(xmlValidateNmtokensValueInternal(NULL, value));
-}
-
-/**
- * xmlValidateNotationDecl:
- * @ctxt: the validation context
- * @doc: a document instance
- * @nota: a notation definition
- *
- * Try to validate a single notation definition
- * basically it does the following checks as described by the
- * XML-1.0 recommendation:
- * - it seems that no validity constraint exists on notation declarations
- * But this function get called anyway ...
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateNotationDecl(xmlValidCtxtPtr ctxt ATTRIBUTE_UNUSED, xmlDocPtr doc ATTRIBUTE_UNUSED,
- xmlNotationPtr nota ATTRIBUTE_UNUSED) {
- int ret = 1;
-
- return(ret);
-}
-
-/**
- * xmlValidateAttributeValueInternal:
- * @doc: the document
- * @type: an attribute type
- * @value: an attribute value
- *
- * Validate that the given attribute value match the proper production
- *
- * returns 1 if valid or 0 otherwise
- */
-
-static int
-xmlValidateAttributeValueInternal(xmlDocPtr doc, xmlAttributeType type,
- const xmlChar *value) {
- switch (type) {
- case XML_ATTRIBUTE_ENTITIES:
- case XML_ATTRIBUTE_IDREFS:
- return(xmlValidateNamesValueInternal(doc, value));
- case XML_ATTRIBUTE_ENTITY:
- case XML_ATTRIBUTE_IDREF:
- case XML_ATTRIBUTE_ID:
- case XML_ATTRIBUTE_NOTATION:
- return(xmlValidateNameValueInternal(doc, value));
- case XML_ATTRIBUTE_NMTOKENS:
- case XML_ATTRIBUTE_ENUMERATION:
- return(xmlValidateNmtokensValueInternal(doc, value));
- case XML_ATTRIBUTE_NMTOKEN:
- return(xmlValidateNmtokenValueInternal(doc, value));
- case XML_ATTRIBUTE_CDATA:
- break;
- }
- return(1);
-}
-
-/**
- * xmlValidateAttributeValue:
- * @type: an attribute type
- * @value: an attribute value
- *
- * Validate that the given attribute value match the proper production
- *
- * [ VC: ID ]
- * Values of type ID must match the Name production....
- *
- * [ VC: IDREF ]
- * Values of type IDREF must match the Name production, and values
- * of type IDREFS must match Names ...
- *
- * [ VC: Entity Name ]
- * Values of type ENTITY must match the Name production, values
- * of type ENTITIES must match Names ...
- *
- * [ VC: Name Token ]
- * Values of type NMTOKEN must match the Nmtoken production; values
- * of type NMTOKENS must match Nmtokens.
- *
- * returns 1 if valid or 0 otherwise
- */
-int
-xmlValidateAttributeValue(xmlAttributeType type, const xmlChar *value) {
- return(xmlValidateAttributeValueInternal(NULL, type, value));
-}
-
-/**
- * xmlValidateAttributeValue2:
- * @ctxt: the validation context
- * @doc: the document
- * @name: the attribute name (used for error reporting only)
- * @type: the attribute type
- * @value: the attribute value
- *
- * Validate that the given attribute value match a given type.
- * This typically cannot be done before having finished parsing
- * the subsets.
- *
- * [ VC: IDREF ]
- * Values of type IDREF must match one of the declared IDs
- * Values of type IDREFS must match a sequence of the declared IDs
- * each Name must match the value of an ID attribute on some element
- * in the XML document; i.e. IDREF values must match the value of
- * some ID attribute
- *
- * [ VC: Entity Name ]
- * Values of type ENTITY must match one declared entity
- * Values of type ENTITIES must match a sequence of declared entities
- *
- * [ VC: Notation Attributes ]
- * all notation names in the declaration must be declared.
- *
- * returns 1 if valid or 0 otherwise
- */
-
-static int
-xmlValidateAttributeValue2(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- const xmlChar *name, xmlAttributeType type, const xmlChar *value) {
- int ret = 1;
- switch (type) {
- case XML_ATTRIBUTE_IDREFS:
- case XML_ATTRIBUTE_IDREF:
- case XML_ATTRIBUTE_ID:
- case XML_ATTRIBUTE_NMTOKENS:
- case XML_ATTRIBUTE_ENUMERATION:
- case XML_ATTRIBUTE_NMTOKEN:
- case XML_ATTRIBUTE_CDATA:
- break;
- case XML_ATTRIBUTE_ENTITY: {
- xmlEntityPtr ent;
-
- ent = xmlGetDocEntity(doc, value);
- /* yeah it's a bit messy... */
- if ((ent == NULL) && (doc->standalone == 1)) {
- doc->standalone = 0;
- ent = xmlGetDocEntity(doc, value);
- }
- if (ent == NULL) {
- xmlErrValidNode(ctxt, (xmlNodePtr) doc,
- XML_DTD_UNKNOWN_ENTITY,
- "ENTITY attribute %s reference an unknown entity \"%s\"\n",
- name, value, NULL);
- ret = 0;
- } else if (ent->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
- xmlErrValidNode(ctxt, (xmlNodePtr) doc,
- XML_DTD_ENTITY_TYPE,
- "ENTITY attribute %s reference an entity \"%s\" of wrong type\n",
- name, value, NULL);
- ret = 0;
- }
- break;
- }
- case XML_ATTRIBUTE_ENTITIES: {
- xmlChar *dup, *nam = NULL, *cur, save;
- xmlEntityPtr ent;
-
- dup = xmlStrdup(value);
- if (dup == NULL)
- return(0);
- cur = dup;
- while (*cur != 0) {
- nam = cur;
- while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
- save = *cur;
- *cur = 0;
- ent = xmlGetDocEntity(doc, nam);
- if (ent == NULL) {
- xmlErrValidNode(ctxt, (xmlNodePtr) doc,
- XML_DTD_UNKNOWN_ENTITY,
- "ENTITIES attribute %s reference an unknown entity \"%s\"\n",
- name, nam, NULL);
- ret = 0;
- } else if (ent->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
- xmlErrValidNode(ctxt, (xmlNodePtr) doc,
- XML_DTD_ENTITY_TYPE,
- "ENTITIES attribute %s reference an entity \"%s\" of wrong type\n",
- name, nam, NULL);
- ret = 0;
- }
- if (save == 0)
- break;
- *cur = save;
- while (IS_BLANK_CH(*cur)) cur++;
- }
- xmlFree(dup);
- break;
- }
- case XML_ATTRIBUTE_NOTATION: {
- xmlNotationPtr nota;
-
- nota = xmlGetDtdNotationDesc(doc->intSubset, value);
- if ((nota == NULL) && (doc->extSubset != NULL))
- nota = xmlGetDtdNotationDesc(doc->extSubset, value);
-
- if (nota == NULL) {
- xmlErrValidNode(ctxt, (xmlNodePtr) doc,
- XML_DTD_UNKNOWN_NOTATION,
- "NOTATION attribute %s reference an unknown notation \"%s\"\n",
- name, value, NULL);
- ret = 0;
- }
- break;
- }
- }
- return(ret);
-}
-
-/**
- * xmlValidCtxtNormalizeAttributeValue:
- * @ctxt: the validation context
- * @doc: the document
- * @elem: the parent
- * @name: the attribute name
- * @value: the attribute value
- * @ctxt: the validation context or NULL
- *
- * Does the validation related extra step of the normalization of attribute
- * values:
- *
- * If the declared value is not CDATA, then the XML processor must further
- * process the normalized attribute value by discarding any leading and
- * trailing space (#x20) characters, and by replacing sequences of space
- * (#x20) characters by single space (#x20) character.
- *
- * Also check VC: Standalone Document Declaration in P32, and update
- * ctxt->valid accordingly
- *
- * returns a new normalized string if normalization is needed, NULL otherwise
- * the caller must free the returned value.
- */
-
-xmlChar *
-xmlValidCtxtNormalizeAttributeValue(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- xmlNodePtr elem, const xmlChar *name, const xmlChar *value) {
- xmlChar *ret, *dst;
- const xmlChar *src;
- xmlAttributePtr attrDecl = NULL;
- int extsubset = 0;
-
- if (doc == NULL) return(NULL);
- if (elem == NULL) return(NULL);
- if (name == NULL) return(NULL);
- if (value == NULL) return(NULL);
-
- if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) {
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
- if (fullname == NULL)
- return(NULL);
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullname, name);
- if ((attrDecl == NULL) && (doc->extSubset != NULL)) {
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullname, name);
- if (attrDecl != NULL)
- extsubset = 1;
- }
- if ((fullname != fn) && (fullname != elem->name))
- xmlFree(fullname);
- }
- if ((attrDecl == NULL) && (doc->intSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, elem->name, name);
- if ((attrDecl == NULL) && (doc->extSubset != NULL)) {
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset, elem->name, name);
- if (attrDecl != NULL)
- extsubset = 1;
- }
-
- if (attrDecl == NULL)
- return(NULL);
- if (attrDecl->atype == XML_ATTRIBUTE_CDATA)
- return(NULL);
-
- ret = xmlStrdup(value);
- if (ret == NULL)
- return(NULL);
- src = value;
- dst = ret;
- while (*src == 0x20) src++;
- while (*src != 0) {
- if (*src == 0x20) {
- while (*src == 0x20) src++;
- if (*src != 0)
- *dst++ = 0x20;
- } else {
- *dst++ = *src++;
- }
- }
- *dst = 0;
- if ((doc->standalone) && (extsubset == 1) && (!xmlStrEqual(value, ret))) {
- xmlErrValidNode(ctxt, elem, XML_DTD_NOT_STANDALONE,
-"standalone: %s on %s value had to be normalized based on external subset declaration\n",
- name, elem->name, NULL);
- ctxt->valid = 0;
- }
- return(ret);
-}
-
-/**
- * xmlValidNormalizeAttributeValue:
- * @doc: the document
- * @elem: the parent
- * @name: the attribute name
- * @value: the attribute value
- *
- * Does the validation related extra step of the normalization of attribute
- * values:
- *
- * If the declared value is not CDATA, then the XML processor must further
- * process the normalized attribute value by discarding any leading and
- * trailing space (#x20) characters, and by replacing sequences of space
- * (#x20) characters by single space (#x20) character.
- *
- * Returns a new normalized string if normalization is needed, NULL otherwise
- * the caller must free the returned value.
- */
-
-xmlChar *
-xmlValidNormalizeAttributeValue(xmlDocPtr doc, xmlNodePtr elem,
- const xmlChar *name, const xmlChar *value) {
- xmlChar *ret, *dst;
- const xmlChar *src;
- xmlAttributePtr attrDecl = NULL;
-
- if (doc == NULL) return(NULL);
- if (elem == NULL) return(NULL);
- if (name == NULL) return(NULL);
- if (value == NULL) return(NULL);
-
- if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) {
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
- if (fullname == NULL)
- return(NULL);
- if ((fullname != fn) && (fullname != elem->name))
- xmlFree(fullname);
- }
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, elem->name, name);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset, elem->name, name);
-
- if (attrDecl == NULL)
- return(NULL);
- if (attrDecl->atype == XML_ATTRIBUTE_CDATA)
- return(NULL);
-
- ret = xmlStrdup(value);
- if (ret == NULL)
- return(NULL);
- src = value;
- dst = ret;
- while (*src == 0x20) src++;
- while (*src != 0) {
- if (*src == 0x20) {
- while (*src == 0x20) src++;
- if (*src != 0)
- *dst++ = 0x20;
- } else {
- *dst++ = *src++;
- }
- }
- *dst = 0;
- return(ret);
-}
-
-static void
-xmlValidateAttributeIdCallback(xmlAttributePtr attr, int *count,
- const xmlChar* name ATTRIBUTE_UNUSED) {
- if (attr->atype == XML_ATTRIBUTE_ID) (*count)++;
-}
-
-/**
- * xmlValidateAttributeDecl:
- * @ctxt: the validation context
- * @doc: a document instance
- * @attr: an attribute definition
- *
- * Try to validate a single attribute definition
- * basically it does the following checks as described by the
- * XML-1.0 recommendation:
- * - [ VC: Attribute Default Legal ]
- * - [ VC: Enumeration ]
- * - [ VC: ID Attribute Default ]
- *
- * The ID/IDREF uniqueness and matching are done separately
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- xmlAttributePtr attr) {
- int ret = 1;
- int val;
- CHECK_DTD;
- if(attr == NULL) return(1);
-
- /* Attribute Default Legal */
- /* Enumeration */
- if (attr->defaultValue != NULL) {
- val = xmlValidateAttributeValueInternal(doc, attr->atype,
- attr->defaultValue);
- if (val == 0) {
- xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ATTRIBUTE_DEFAULT,
- "Syntax of default value for attribute %s of %s is not valid\n",
- attr->name, attr->elem, NULL);
- }
- ret &= val;
- }
-
- /* ID Attribute Default */
- if ((attr->atype == XML_ATTRIBUTE_ID)&&
- (attr->def != XML_ATTRIBUTE_IMPLIED) &&
- (attr->def != XML_ATTRIBUTE_REQUIRED)) {
- xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ID_FIXED,
- "ID attribute %s of %s is not valid must be #IMPLIED or #REQUIRED\n",
- attr->name, attr->elem, NULL);
- ret = 0;
- }
-
- /* One ID per Element Type */
- if (attr->atype == XML_ATTRIBUTE_ID) {
- int nbId;
-
- /* the trick is that we parse DtD as their own internal subset */
- xmlElementPtr elem = xmlGetDtdElementDesc(doc->intSubset,
- attr->elem);
- if (elem != NULL) {
- nbId = xmlScanIDAttributeDecl(NULL, elem, 0);
- } else {
- xmlAttributeTablePtr table;
-
- /*
- * The attribute may be declared in the internal subset and the
- * element in the external subset.
- */
- nbId = 0;
- if (doc->intSubset != NULL) {
- table = (xmlAttributeTablePtr) doc->intSubset->attributes;
- xmlHashScan3(table, NULL, NULL, attr->elem, (xmlHashScanner)
- xmlValidateAttributeIdCallback, &nbId);
- }
- }
- if (nbId > 1) {
-
- xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
- "Element %s has %d ID attribute defined in the internal subset : %s\n",
- attr->elem, nbId, attr->name);
- } else if (doc->extSubset != NULL) {
- int extId = 0;
- elem = xmlGetDtdElementDesc(doc->extSubset, attr->elem);
- if (elem != NULL) {
- extId = xmlScanIDAttributeDecl(NULL, elem, 0);
- }
- if (extId > 1) {
- xmlErrValidNodeNr(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
- "Element %s has %d ID attribute defined in the external subset : %s\n",
- attr->elem, extId, attr->name);
- } else if (extId + nbId > 1) {
- xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ID_SUBSET,
-"Element %s has ID attributes defined in the internal and external subset : %s\n",
- attr->elem, attr->name, NULL);
- }
- }
- }
-
- /* Validity Constraint: Enumeration */
- if ((attr->defaultValue != NULL) && (attr->tree != NULL)) {
- xmlEnumerationPtr tree = attr->tree;
- while (tree != NULL) {
- if (xmlStrEqual(tree->name, attr->defaultValue)) break;
- tree = tree->next;
- }
- if (tree == NULL) {
- xmlErrValidNode(ctxt, (xmlNodePtr) attr, XML_DTD_ATTRIBUTE_VALUE,
-"Default value \"%s\" for attribute %s of %s is not among the enumerated set\n",
- attr->defaultValue, attr->name, attr->elem);
- ret = 0;
- }
- }
-
- return(ret);
-}
-
-/**
- * xmlValidateElementDecl:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element definition
- *
- * Try to validate a single element definition
- * basically it does the following checks as described by the
- * XML-1.0 recommendation:
- * - [ VC: One ID per Element Type ]
- * - [ VC: No Duplicate Types ]
- * - [ VC: Unique Element Type Declaration ]
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- xmlElementPtr elem) {
- int ret = 1;
- xmlElementPtr tst;
-
- CHECK_DTD;
-
- if (elem == NULL) return(1);
-
-#if 0
-#ifdef LIBXML_REGEXP_ENABLED
- /* Build the regexp associated to the content model */
- ret = xmlValidBuildContentModel(ctxt, elem);
-#endif
-#endif
-
- /* No Duplicate Types */
- if (elem->etype == XML_ELEMENT_TYPE_MIXED) {
- xmlElementContentPtr cur, next;
- const xmlChar *name;
-
- cur = elem->content;
- while (cur != NULL) {
- if (cur->type != XML_ELEMENT_CONTENT_OR) break;
- if (cur->c1 == NULL) break;
- if (cur->c1->type == XML_ELEMENT_CONTENT_ELEMENT) {
- name = cur->c1->name;
- next = cur->c2;
- while (next != NULL) {
- if (next->type == XML_ELEMENT_CONTENT_ELEMENT) {
- if ((xmlStrEqual(next->name, name)) &&
- (xmlStrEqual(next->prefix, cur->c1->prefix))) {
- if (cur->c1->prefix == NULL) {
- xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
- "Definition of %s has duplicate references of %s\n",
- elem->name, name, NULL);
- } else {
- xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
- "Definition of %s has duplicate references of %s:%s\n",
- elem->name, cur->c1->prefix, name);
- }
- ret = 0;
- }
- break;
- }
- if (next->c1 == NULL) break;
- if (next->c1->type != XML_ELEMENT_CONTENT_ELEMENT) break;
- if ((xmlStrEqual(next->c1->name, name)) &&
- (xmlStrEqual(next->c1->prefix, cur->c1->prefix))) {
- if (cur->c1->prefix == NULL) {
- xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
- "Definition of %s has duplicate references to %s\n",
- elem->name, name, NULL);
- } else {
- xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_CONTENT_ERROR,
- "Definition of %s has duplicate references to %s:%s\n",
- elem->name, cur->c1->prefix, name);
- }
- ret = 0;
- }
- next = next->c2;
- }
- }
- cur = cur->c2;
- }
- }
-
- /* VC: Unique Element Type Declaration */
- tst = xmlGetDtdElementDesc(doc->intSubset, elem->name);
- if ((tst != NULL ) && (tst != elem) &&
- ((tst->prefix == elem->prefix) ||
- (xmlStrEqual(tst->prefix, elem->prefix))) &&
- (tst->etype != XML_ELEMENT_TYPE_UNDEFINED)) {
- xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_ELEM_REDEFINED,
- "Redefinition of element %s\n",
- elem->name, NULL, NULL);
- ret = 0;
- }
- tst = xmlGetDtdElementDesc(doc->extSubset, elem->name);
- if ((tst != NULL ) && (tst != elem) &&
- ((tst->prefix == elem->prefix) ||
- (xmlStrEqual(tst->prefix, elem->prefix))) &&
- (tst->etype != XML_ELEMENT_TYPE_UNDEFINED)) {
- xmlErrValidNode(ctxt, (xmlNodePtr) elem, XML_DTD_ELEM_REDEFINED,
- "Redefinition of element %s\n",
- elem->name, NULL, NULL);
- ret = 0;
- }
- /* One ID per Element Type
- * already done when registering the attribute
- if (xmlScanIDAttributeDecl(ctxt, elem) > 1) {
- ret = 0;
- } */
- return(ret);
-}
-
-/**
- * xmlValidateOneAttribute:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- * @attr: an attribute instance
- * @value: the attribute value (without entities processing)
- *
- * Try to validate a single attribute for an element
- * basically it does the following checks as described by the
- * XML-1.0 recommendation:
- * - [ VC: Attribute Value Type ]
- * - [ VC: Fixed Attribute Default ]
- * - [ VC: Entity Name ]
- * - [ VC: Name Token ]
- * - [ VC: ID ]
- * - [ VC: IDREF ]
- * - [ VC: Entity Name ]
- * - [ VC: Notation Attributes ]
- *
- * The ID/IDREF uniqueness and matching are done separately
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- xmlNodePtr elem, xmlAttrPtr attr, const xmlChar *value)
-{
- xmlAttributePtr attrDecl = NULL;
- int val;
- int ret = 1;
-
- CHECK_DTD;
- if ((elem == NULL) || (elem->name == NULL)) return(0);
- if ((attr == NULL) || (attr->name == NULL)) return(0);
-
- if ((elem->ns != NULL) && (elem->ns->prefix != NULL)) {
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(elem->name, elem->ns->prefix, fn, 50);
- if (fullname == NULL)
- return(0);
- if (attr->ns != NULL) {
- attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, fullname,
- attr->name, attr->ns->prefix);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, fullname,
- attr->name, attr->ns->prefix);
- } else {
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullname, attr->name);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset,
- fullname, attr->name);
- }
- if ((fullname != fn) && (fullname != elem->name))
- xmlFree(fullname);
- }
- if (attrDecl == NULL) {
- if (attr->ns != NULL) {
- attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, elem->name,
- attr->name, attr->ns->prefix);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, elem->name,
- attr->name, attr->ns->prefix);
- } else {
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset,
- elem->name, attr->name);
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset,
- elem->name, attr->name);
- }
- }
-
-
- /* Validity Constraint: Attribute Value Type */
- if (attrDecl == NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
- "No declaration for attribute %s of element %s\n",
- attr->name, elem->name, NULL);
- return(0);
- }
- attr->atype = attrDecl->atype;
-
- val = xmlValidateAttributeValueInternal(doc, attrDecl->atype, value);
- if (val == 0) {
- xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
- "Syntax of value for attribute %s of %s is not valid\n",
- attr->name, elem->name, NULL);
- ret = 0;
- }
-
- /* Validity constraint: Fixed Attribute Default */
- if (attrDecl->def == XML_ATTRIBUTE_FIXED) {
- if (!xmlStrEqual(value, attrDecl->defaultValue)) {
- xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
- "Value for attribute %s of %s is different from default \"%s\"\n",
- attr->name, elem->name, attrDecl->defaultValue);
- ret = 0;
- }
- }
-
- /* Validity Constraint: ID uniqueness */
- if (attrDecl->atype == XML_ATTRIBUTE_ID) {
- if (xmlAddID(ctxt, doc, value, attr) == NULL)
- ret = 0;
- }
-
- if ((attrDecl->atype == XML_ATTRIBUTE_IDREF) ||
- (attrDecl->atype == XML_ATTRIBUTE_IDREFS)) {
- if (xmlAddRef(ctxt, doc, value, attr) == NULL)
- ret = 0;
- }
-
- /* Validity Constraint: Notation Attributes */
- if (attrDecl->atype == XML_ATTRIBUTE_NOTATION) {
- xmlEnumerationPtr tree = attrDecl->tree;
- xmlNotationPtr nota;
-
- /* First check that the given NOTATION was declared */
- nota = xmlGetDtdNotationDesc(doc->intSubset, value);
- if (nota == NULL)
- nota = xmlGetDtdNotationDesc(doc->extSubset, value);
-
- if (nota == NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
- "Value \"%s\" for attribute %s of %s is not a declared Notation\n",
- value, attr->name, elem->name);
- ret = 0;
- }
-
- /* Second, verify that it's among the list */
- while (tree != NULL) {
- if (xmlStrEqual(tree->name, value)) break;
- tree = tree->next;
- }
- if (tree == NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
-"Value \"%s\" for attribute %s of %s is not among the enumerated notations\n",
- value, attr->name, elem->name);
- ret = 0;
- }
- }
-
- /* Validity Constraint: Enumeration */
- if (attrDecl->atype == XML_ATTRIBUTE_ENUMERATION) {
- xmlEnumerationPtr tree = attrDecl->tree;
- while (tree != NULL) {
- if (xmlStrEqual(tree->name, value)) break;
- tree = tree->next;
- }
- if (tree == NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
- "Value \"%s\" for attribute %s of %s is not among the enumerated set\n",
- value, attr->name, elem->name);
- ret = 0;
- }
- }
-
- /* Fixed Attribute Default */
- if ((attrDecl->def == XML_ATTRIBUTE_FIXED) &&
- (!xmlStrEqual(attrDecl->defaultValue, value))) {
- xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
- "Value for attribute %s of %s must be \"%s\"\n",
- attr->name, elem->name, attrDecl->defaultValue);
- ret = 0;
- }
-
- /* Extra check for the attribute value */
- ret &= xmlValidateAttributeValue2(ctxt, doc, attr->name,
- attrDecl->atype, value);
-
- return(ret);
-}
-
-/**
- * xmlValidateOneNamespace:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- * @prefix: the namespace prefix
- * @ns: an namespace declaration instance
- * @value: the attribute value (without entities processing)
- *
- * Try to validate a single namespace declaration for an element
- * basically it does the following checks as described by the
- * XML-1.0 recommendation:
- * - [ VC: Attribute Value Type ]
- * - [ VC: Fixed Attribute Default ]
- * - [ VC: Entity Name ]
- * - [ VC: Name Token ]
- * - [ VC: ID ]
- * - [ VC: IDREF ]
- * - [ VC: Entity Name ]
- * - [ VC: Notation Attributes ]
- *
- * The ID/IDREF uniqueness and matching are done separately
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateOneNamespace(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
-xmlNodePtr elem, const xmlChar *prefix, xmlNsPtr ns, const xmlChar *value) {
- /* xmlElementPtr elemDecl; */
- xmlAttributePtr attrDecl = NULL;
- int val;
- int ret = 1;
-
- CHECK_DTD;
- if ((elem == NULL) || (elem->name == NULL)) return(0);
- if ((ns == NULL) || (ns->href == NULL)) return(0);
-
- if (prefix != NULL) {
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(elem->name, prefix, fn, 50);
- if (fullname == NULL) {
- xmlVErrMemory(ctxt, "Validating namespace");
- return(0);
- }
- if (ns->prefix != NULL) {
- attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, fullname,
- ns->prefix, BAD_CAST "xmlns");
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, fullname,
- ns->prefix, BAD_CAST "xmlns");
- } else {
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset, fullname,
- BAD_CAST "xmlns");
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset, fullname,
- BAD_CAST "xmlns");
- }
- if ((fullname != fn) && (fullname != elem->name))
- xmlFree(fullname);
- }
- if (attrDecl == NULL) {
- if (ns->prefix != NULL) {
- attrDecl = xmlGetDtdQAttrDesc(doc->intSubset, elem->name,
- ns->prefix, BAD_CAST "xmlns");
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdQAttrDesc(doc->extSubset, elem->name,
- ns->prefix, BAD_CAST "xmlns");
- } else {
- attrDecl = xmlGetDtdAttrDesc(doc->intSubset,
- elem->name, BAD_CAST "xmlns");
- if ((attrDecl == NULL) && (doc->extSubset != NULL))
- attrDecl = xmlGetDtdAttrDesc(doc->extSubset,
- elem->name, BAD_CAST "xmlns");
- }
- }
-
-
- /* Validity Constraint: Attribute Value Type */
- if (attrDecl == NULL) {
- if (ns->prefix != NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
- "No declaration for attribute xmlns:%s of element %s\n",
- ns->prefix, elem->name, NULL);
- } else {
- xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ATTRIBUTE,
- "No declaration for attribute xmlns of element %s\n",
- elem->name, NULL, NULL);
- }
- return(0);
- }
-
- val = xmlValidateAttributeValueInternal(doc, attrDecl->atype, value);
- if (val == 0) {
- if (ns->prefix != NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_DEFAULT,
- "Syntax of value for attribute xmlns:%s of %s is not valid\n",
- ns->prefix, elem->name, NULL);
- } else {
- xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_DEFAULT,
- "Syntax of value for attribute xmlns of %s is not valid\n",
- elem->name, NULL, NULL);
- }
- ret = 0;
- }
-
- /* Validity constraint: Fixed Attribute Default */
- if (attrDecl->def == XML_ATTRIBUTE_FIXED) {
- if (!xmlStrEqual(value, attrDecl->defaultValue)) {
- if (ns->prefix != NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
- "Value for attribute xmlns:%s of %s is different from default \"%s\"\n",
- ns->prefix, elem->name, attrDecl->defaultValue);
- } else {
- xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_DEFAULT,
- "Value for attribute xmlns of %s is different from default \"%s\"\n",
- elem->name, attrDecl->defaultValue, NULL);
- }
- ret = 0;
- }
- }
-
- /* Validity Constraint: ID uniqueness */
- if (attrDecl->atype == XML_ATTRIBUTE_ID) {
- if (xmlAddID(ctxt, doc, value, (xmlAttrPtr) ns) == NULL)
- ret = 0;
- }
-
- if ((attrDecl->atype == XML_ATTRIBUTE_IDREF) ||
- (attrDecl->atype == XML_ATTRIBUTE_IDREFS)) {
- if (xmlAddRef(ctxt, doc, value, (xmlAttrPtr) ns) == NULL)
- ret = 0;
- }
-
- /* Validity Constraint: Notation Attributes */
- if (attrDecl->atype == XML_ATTRIBUTE_NOTATION) {
- xmlEnumerationPtr tree = attrDecl->tree;
- xmlNotationPtr nota;
-
- /* First check that the given NOTATION was declared */
- nota = xmlGetDtdNotationDesc(doc->intSubset, value);
- if (nota == NULL)
- nota = xmlGetDtdNotationDesc(doc->extSubset, value);
-
- if (nota == NULL) {
- if (ns->prefix != NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
- "Value \"%s\" for attribute xmlns:%s of %s is not a declared Notation\n",
- value, ns->prefix, elem->name);
- } else {
- xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_NOTATION,
- "Value \"%s\" for attribute xmlns of %s is not a declared Notation\n",
- value, elem->name, NULL);
- }
- ret = 0;
- }
-
- /* Second, verify that it's among the list */
- while (tree != NULL) {
- if (xmlStrEqual(tree->name, value)) break;
- tree = tree->next;
- }
- if (tree == NULL) {
- if (ns->prefix != NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
-"Value \"%s\" for attribute xmlns:%s of %s is not among the enumerated notations\n",
- value, ns->prefix, elem->name);
- } else {
- xmlErrValidNode(ctxt, elem, XML_DTD_NOTATION_VALUE,
-"Value \"%s\" for attribute xmlns of %s is not among the enumerated notations\n",
- value, elem->name, NULL);
- }
- ret = 0;
- }
- }
-
- /* Validity Constraint: Enumeration */
- if (attrDecl->atype == XML_ATTRIBUTE_ENUMERATION) {
- xmlEnumerationPtr tree = attrDecl->tree;
- while (tree != NULL) {
- if (xmlStrEqual(tree->name, value)) break;
- tree = tree->next;
- }
- if (tree == NULL) {
- if (ns->prefix != NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
-"Value \"%s\" for attribute xmlns:%s of %s is not among the enumerated set\n",
- value, ns->prefix, elem->name);
- } else {
- xmlErrValidNode(ctxt, elem, XML_DTD_ATTRIBUTE_VALUE,
-"Value \"%s\" for attribute xmlns of %s is not among the enumerated set\n",
- value, elem->name, NULL);
- }
- ret = 0;
- }
- }
-
- /* Fixed Attribute Default */
- if ((attrDecl->def == XML_ATTRIBUTE_FIXED) &&
- (!xmlStrEqual(attrDecl->defaultValue, value))) {
- if (ns->prefix != NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
- "Value for attribute xmlns:%s of %s must be \"%s\"\n",
- ns->prefix, elem->name, attrDecl->defaultValue);
- } else {
- xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
- "Value for attribute xmlns of %s must be \"%s\"\n",
- elem->name, attrDecl->defaultValue, NULL);
- }
- ret = 0;
- }
-
- /* Extra check for the attribute value */
- if (ns->prefix != NULL) {
- ret &= xmlValidateAttributeValue2(ctxt, doc, ns->prefix,
- attrDecl->atype, value);
- } else {
- ret &= xmlValidateAttributeValue2(ctxt, doc, BAD_CAST "xmlns",
- attrDecl->atype, value);
- }
-
- return(ret);
-}
-
-#ifndef LIBXML_REGEXP_ENABLED
-/**
- * xmlValidateSkipIgnorable:
- * @ctxt: the validation context
- * @child: the child list
- *
- * Skip ignorable elements w.r.t. the validation process
- *
- * returns the first element to consider for validation of the content model
- */
-
-static xmlNodePtr
-xmlValidateSkipIgnorable(xmlNodePtr child) {
- while (child != NULL) {
- switch (child->type) {
- /* These things are ignored (skipped) during validation. */
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- child = child->next;
- break;
- case XML_TEXT_NODE:
- if (xmlIsBlankNode(child))
- child = child->next;
- else
- return(child);
- break;
- /* keep current node */
- default:
- return(child);
- }
- }
- return(child);
-}
-
-/**
- * xmlValidateElementType:
- * @ctxt: the validation context
- *
- * Try to validate the content model of an element internal function
- *
- * returns 1 if valid or 0 ,-1 in case of error, -2 if an entity
- * reference is found and -3 if the validation succeeded but
- * the content model is not determinist.
- */
-
-static int
-xmlValidateElementType(xmlValidCtxtPtr ctxt) {
- int ret = -1;
- int determinist = 1;
-
- NODE = xmlValidateSkipIgnorable(NODE);
- if ((NODE == NULL) && (CONT == NULL))
- return(1);
- if ((NODE == NULL) &&
- ((CONT->ocur == XML_ELEMENT_CONTENT_MULT) ||
- (CONT->ocur == XML_ELEMENT_CONTENT_OPT))) {
- return(1);
- }
- if (CONT == NULL) return(-1);
- if ((NODE != NULL) && (NODE->type == XML_ENTITY_REF_NODE))
- return(-2);
-
- /*
- * We arrive here when more states need to be examined
- */
-cont:
-
- /*
- * We just recovered from a rollback generated by a possible
- * epsilon transition, go directly to the analysis phase
- */
- if (STATE == ROLLBACK_PARENT) {
- DEBUG_VALID_MSG("restored parent branch");
- DEBUG_VALID_STATE(NODE, CONT)
- ret = 1;
- goto analyze;
- }
-
- DEBUG_VALID_STATE(NODE, CONT)
- /*
- * we may have to save a backup state here. This is the equivalent
- * of handling epsilon transition in NFAs.
- */
- if ((CONT != NULL) &&
- ((CONT->parent == NULL) ||
- (CONT->parent->type != XML_ELEMENT_CONTENT_OR)) &&
- ((CONT->ocur == XML_ELEMENT_CONTENT_MULT) ||
- (CONT->ocur == XML_ELEMENT_CONTENT_OPT) ||
- ((CONT->ocur == XML_ELEMENT_CONTENT_PLUS) && (OCCURRENCE)))) {
- DEBUG_VALID_MSG("saving parent branch");
- if (vstateVPush(ctxt, CONT, NODE, DEPTH, OCCURS, ROLLBACK_PARENT) < 0)
- return(0);
- }
-
-
- /*
- * Check first if the content matches
- */
- switch (CONT->type) {
- case XML_ELEMENT_CONTENT_PCDATA:
- if (NODE == NULL) {
- DEBUG_VALID_MSG("pcdata failed no node");
- ret = 0;
- break;
- }
- if (NODE->type == XML_TEXT_NODE) {
- DEBUG_VALID_MSG("pcdata found, skip to next");
- /*
- * go to next element in the content model
- * skipping ignorable elems
- */
- do {
- NODE = NODE->next;
- NODE = xmlValidateSkipIgnorable(NODE);
- if ((NODE != NULL) &&
- (NODE->type == XML_ENTITY_REF_NODE))
- return(-2);
- } while ((NODE != NULL) &&
- ((NODE->type != XML_ELEMENT_NODE) &&
- (NODE->type != XML_TEXT_NODE) &&
- (NODE->type != XML_CDATA_SECTION_NODE)));
- ret = 1;
- break;
- } else {
- DEBUG_VALID_MSG("pcdata failed");
- ret = 0;
- break;
- }
- break;
- case XML_ELEMENT_CONTENT_ELEMENT:
- if (NODE == NULL) {
- DEBUG_VALID_MSG("element failed no node");
- ret = 0;
- break;
- }
- ret = ((NODE->type == XML_ELEMENT_NODE) &&
- (xmlStrEqual(NODE->name, CONT->name)));
- if (ret == 1) {
- if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
- ret = (CONT->prefix == NULL);
- } else if (CONT->prefix == NULL) {
- ret = 0;
- } else {
- ret = xmlStrEqual(NODE->ns->prefix, CONT->prefix);
- }
- }
- if (ret == 1) {
- DEBUG_VALID_MSG("element found, skip to next");
- /*
- * go to next element in the content model
- * skipping ignorable elems
- */
- do {
- NODE = NODE->next;
- NODE = xmlValidateSkipIgnorable(NODE);
- if ((NODE != NULL) &&
- (NODE->type == XML_ENTITY_REF_NODE))
- return(-2);
- } while ((NODE != NULL) &&
- ((NODE->type != XML_ELEMENT_NODE) &&
- (NODE->type != XML_TEXT_NODE) &&
- (NODE->type != XML_CDATA_SECTION_NODE)));
- } else {
- DEBUG_VALID_MSG("element failed");
- ret = 0;
- break;
- }
- break;
- case XML_ELEMENT_CONTENT_OR:
- /*
- * Small optimization.
- */
- if (CONT->c1->type == XML_ELEMENT_CONTENT_ELEMENT) {
- if ((NODE == NULL) ||
- (!xmlStrEqual(NODE->name, CONT->c1->name))) {
- DEPTH++;
- CONT = CONT->c2;
- goto cont;
- }
- if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
- ret = (CONT->c1->prefix == NULL);
- } else if (CONT->c1->prefix == NULL) {
- ret = 0;
- } else {
- ret = xmlStrEqual(NODE->ns->prefix, CONT->c1->prefix);
- }
- if (ret == 0) {
- DEPTH++;
- CONT = CONT->c2;
- goto cont;
- }
- }
-
- /*
- * save the second branch 'or' branch
- */
- DEBUG_VALID_MSG("saving 'or' branch");
- if (vstateVPush(ctxt, CONT->c2, NODE, (unsigned char)(DEPTH + 1),
- OCCURS, ROLLBACK_OR) < 0)
- return(-1);
- DEPTH++;
- CONT = CONT->c1;
- goto cont;
- case XML_ELEMENT_CONTENT_SEQ:
- /*
- * Small optimization.
- */
- if ((CONT->c1->type == XML_ELEMENT_CONTENT_ELEMENT) &&
- ((CONT->c1->ocur == XML_ELEMENT_CONTENT_OPT) ||
- (CONT->c1->ocur == XML_ELEMENT_CONTENT_MULT))) {
- if ((NODE == NULL) ||
- (!xmlStrEqual(NODE->name, CONT->c1->name))) {
- DEPTH++;
- CONT = CONT->c2;
- goto cont;
- }
- if ((NODE->ns == NULL) || (NODE->ns->prefix == NULL)) {
- ret = (CONT->c1->prefix == NULL);
- } else if (CONT->c1->prefix == NULL) {
- ret = 0;
- } else {
- ret = xmlStrEqual(NODE->ns->prefix, CONT->c1->prefix);
- }
- if (ret == 0) {
- DEPTH++;
- CONT = CONT->c2;
- goto cont;
- }
- }
- DEPTH++;
- CONT = CONT->c1;
- goto cont;
- }
-
- /*
- * At this point handle going up in the tree
- */
- if (ret == -1) {
- DEBUG_VALID_MSG("error found returning");
- return(ret);
- }
-analyze:
- while (CONT != NULL) {
- /*
- * First do the analysis depending on the occurrence model at
- * this level.
- */
- if (ret == 0) {
- switch (CONT->ocur) {
- xmlNodePtr cur;
-
- case XML_ELEMENT_CONTENT_ONCE:
- cur = ctxt->vstate->node;
- DEBUG_VALID_MSG("Once branch failed, rollback");
- if (vstateVPop(ctxt) < 0 ) {
- DEBUG_VALID_MSG("exhaustion, failed");
- return(0);
- }
- if (cur != ctxt->vstate->node)
- determinist = -3;
- goto cont;
- case XML_ELEMENT_CONTENT_PLUS:
- if (OCCURRENCE == 0) {
- cur = ctxt->vstate->node;
- DEBUG_VALID_MSG("Plus branch failed, rollback");
- if (vstateVPop(ctxt) < 0 ) {
- DEBUG_VALID_MSG("exhaustion, failed");
- return(0);
- }
- if (cur != ctxt->vstate->node)
- determinist = -3;
- goto cont;
- }
- DEBUG_VALID_MSG("Plus branch found");
- ret = 1;
- break;
- case XML_ELEMENT_CONTENT_MULT:
-#ifdef DEBUG_VALID_ALGO
- if (OCCURRENCE == 0) {
- DEBUG_VALID_MSG("Mult branch failed");
- } else {
- DEBUG_VALID_MSG("Mult branch found");
- }
-#endif
- ret = 1;
- break;
- case XML_ELEMENT_CONTENT_OPT:
- DEBUG_VALID_MSG("Option branch failed");
- ret = 1;
- break;
- }
- } else {
- switch (CONT->ocur) {
- case XML_ELEMENT_CONTENT_OPT:
- DEBUG_VALID_MSG("Option branch succeeded");
- ret = 1;
- break;
- case XML_ELEMENT_CONTENT_ONCE:
- DEBUG_VALID_MSG("Once branch succeeded");
- ret = 1;
- break;
- case XML_ELEMENT_CONTENT_PLUS:
- if (STATE == ROLLBACK_PARENT) {
- DEBUG_VALID_MSG("Plus branch rollback");
- ret = 1;
- break;
- }
- if (NODE == NULL) {
- DEBUG_VALID_MSG("Plus branch exhausted");
- ret = 1;
- break;
- }
- DEBUG_VALID_MSG("Plus branch succeeded, continuing");
- SET_OCCURRENCE;
- goto cont;
- case XML_ELEMENT_CONTENT_MULT:
- if (STATE == ROLLBACK_PARENT) {
- DEBUG_VALID_MSG("Mult branch rollback");
- ret = 1;
- break;
- }
- if (NODE == NULL) {
- DEBUG_VALID_MSG("Mult branch exhausted");
- ret = 1;
- break;
- }
- DEBUG_VALID_MSG("Mult branch succeeded, continuing");
- /* SET_OCCURRENCE; */
- goto cont;
- }
- }
- STATE = 0;
-
- /*
- * Then act accordingly at the parent level
- */
- RESET_OCCURRENCE;
- if (CONT->parent == NULL)
- break;
-
- switch (CONT->parent->type) {
- case XML_ELEMENT_CONTENT_PCDATA:
- DEBUG_VALID_MSG("Error: parent pcdata");
- return(-1);
- case XML_ELEMENT_CONTENT_ELEMENT:
- DEBUG_VALID_MSG("Error: parent element");
- return(-1);
- case XML_ELEMENT_CONTENT_OR:
- if (ret == 1) {
- DEBUG_VALID_MSG("Or succeeded");
- CONT = CONT->parent;
- DEPTH--;
- } else {
- DEBUG_VALID_MSG("Or failed");
- CONT = CONT->parent;
- DEPTH--;
- }
- break;
- case XML_ELEMENT_CONTENT_SEQ:
- if (ret == 0) {
- DEBUG_VALID_MSG("Sequence failed");
- CONT = CONT->parent;
- DEPTH--;
- } else if (CONT == CONT->parent->c1) {
- DEBUG_VALID_MSG("Sequence testing 2nd branch");
- CONT = CONT->parent->c2;
- goto cont;
- } else {
- DEBUG_VALID_MSG("Sequence succeeded");
- CONT = CONT->parent;
- DEPTH--;
- }
- }
- }
- if (NODE != NULL) {
- xmlNodePtr cur;
-
- cur = ctxt->vstate->node;
- DEBUG_VALID_MSG("Failed, remaining input, rollback");
- if (vstateVPop(ctxt) < 0 ) {
- DEBUG_VALID_MSG("exhaustion, failed");
- return(0);
- }
- if (cur != ctxt->vstate->node)
- determinist = -3;
- goto cont;
- }
- if (ret == 0) {
- xmlNodePtr cur;
-
- cur = ctxt->vstate->node;
- DEBUG_VALID_MSG("Failure, rollback");
- if (vstateVPop(ctxt) < 0 ) {
- DEBUG_VALID_MSG("exhaustion, failed");
- return(0);
- }
- if (cur != ctxt->vstate->node)
- determinist = -3;
- goto cont;
- }
- return(determinist);
-}
-#endif
-
-/**
- * xmlSnprintfElements:
- * @buf: an output buffer
- * @size: the size of the buffer
- * @content: An element
- * @glob: 1 if one must print the englobing parenthesis, 0 otherwise
- *
- * This will dump the list of elements to the buffer
- * Intended just for the debug routine
- */
-static void
-xmlSnprintfElements(char *buf, int size, xmlNodePtr node, int glob) {
- xmlNodePtr cur;
- int len;
-
- if (node == NULL) return;
- if (glob) strcat(buf, "(");
- cur = node;
- while (cur != NULL) {
- len = strlen(buf);
- if (size - len < 50) {
- if ((size - len > 4) && (buf[len - 1] != '.'))
- strcat(buf, " ...");
- return;
- }
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- if (size - len < xmlStrlen(cur->ns->prefix) + 10) {
- if ((size - len > 4) && (buf[len - 1] != '.'))
- strcat(buf, " ...");
- return;
- }
- strcat(buf, (char *) cur->ns->prefix);
- strcat(buf, ":");
- }
- if (size - len < xmlStrlen(cur->name) + 10) {
- if ((size - len > 4) && (buf[len - 1] != '.'))
- strcat(buf, " ...");
- return;
- }
- strcat(buf, (char *) cur->name);
- if (cur->next != NULL)
- strcat(buf, " ");
- break;
- case XML_TEXT_NODE:
- if (xmlIsBlankNode(cur))
- break;
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- strcat(buf, "CDATA");
- if (cur->next != NULL)
- strcat(buf, " ");
- break;
- case XML_ATTRIBUTE_NODE:
- case XML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_HTML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_NAMESPACE_DECL:
- strcat(buf, "???");
- if (cur->next != NULL)
- strcat(buf, " ");
- break;
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_DTD_NODE:
- case XML_COMMENT_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- break;
- }
- cur = cur->next;
- }
- if (glob) strcat(buf, ")");
-}
-
-/**
- * xmlValidateElementContent:
- * @ctxt: the validation context
- * @child: the child list
- * @elemDecl: pointer to the element declaration
- * @warn: emit the error message
- * @parent: the parent element (for error reporting)
- *
- * Try to validate the content model of an element
- *
- * returns 1 if valid or 0 if not and -1 in case of error
- */
-
-static int
-xmlValidateElementContent(xmlValidCtxtPtr ctxt, xmlNodePtr child,
- xmlElementPtr elemDecl, int warn, xmlNodePtr parent) {
- int ret = 1;
-#ifndef LIBXML_REGEXP_ENABLED
- xmlNodePtr repl = NULL, last = NULL, tmp;
-#endif
- xmlNodePtr cur;
- xmlElementContentPtr cont;
- const xmlChar *name;
-
- if ((elemDecl == NULL) || (parent == NULL) || (ctxt == NULL))
- return(-1);
- cont = elemDecl->content;
- name = elemDecl->name;
-
-#ifdef LIBXML_REGEXP_ENABLED
- /* Build the regexp associated to the content model */
- if (elemDecl->contModel == NULL)
- ret = xmlValidBuildContentModel(ctxt, elemDecl);
- if (elemDecl->contModel == NULL) {
- return(-1);
- } else {
- xmlRegExecCtxtPtr exec;
-
- if (!xmlRegexpIsDeterminist(elemDecl->contModel)) {
- return(-1);
- }
- ctxt->nodeMax = 0;
- ctxt->nodeNr = 0;
- ctxt->nodeTab = NULL;
- exec = xmlRegNewExecCtxt(elemDecl->contModel, NULL, NULL);
- if (exec != NULL) {
- cur = child;
- while (cur != NULL) {
- switch (cur->type) {
- case XML_ENTITY_REF_NODE:
- /*
- * Push the current node to be able to roll back
- * and process within the entity
- */
- if ((cur->children != NULL) &&
- (cur->children->children != NULL)) {
- nodeVPush(ctxt, cur);
- cur = cur->children->children;
- continue;
- }
- break;
- case XML_TEXT_NODE:
- if (xmlIsBlankNode(cur))
- break;
- ret = 0;
- goto fail;
- case XML_CDATA_SECTION_NODE:
- /* TODO */
- ret = 0;
- goto fail;
- case XML_ELEMENT_NODE:
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(cur->name,
- cur->ns->prefix, fn, 50);
- if (fullname == NULL) {
- ret = -1;
- goto fail;
- }
- ret = xmlRegExecPushString(exec, fullname, NULL);
- if ((fullname != fn) && (fullname != cur->name))
- xmlFree(fullname);
- } else {
- ret = xmlRegExecPushString(exec, cur->name, NULL);
- }
- break;
- default:
- break;
- }
- /*
- * Switch to next element
- */
- cur = cur->next;
- while (cur == NULL) {
- cur = nodeVPop(ctxt);
- if (cur == NULL)
- break;
- cur = cur->next;
- }
- }
- ret = xmlRegExecPushString(exec, NULL, NULL);
-fail:
- xmlRegFreeExecCtxt(exec);
- }
- }
-#else /* LIBXML_REGEXP_ENABLED */
- /*
- * Allocate the stack
- */
- ctxt->vstateMax = 8;
- ctxt->vstateTab = (xmlValidState *) xmlMalloc(
- ctxt->vstateMax * sizeof(ctxt->vstateTab[0]));
- if (ctxt->vstateTab == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- return(-1);
- }
- /*
- * The first entry in the stack is reserved to the current state
- */
- ctxt->nodeMax = 0;
- ctxt->nodeNr = 0;
- ctxt->nodeTab = NULL;
- ctxt->vstate = &ctxt->vstateTab[0];
- ctxt->vstateNr = 1;
- CONT = cont;
- NODE = child;
- DEPTH = 0;
- OCCURS = 0;
- STATE = 0;
- ret = xmlValidateElementType(ctxt);
- if ((ret == -3) && (warn)) {
- xmlErrValidWarning(ctxt, child, XML_DTD_CONTENT_NOT_DETERMINIST,
- "Content model for Element %s is ambiguous\n",
- name, NULL, NULL);
- } else if (ret == -2) {
- /*
- * An entities reference appeared at this level.
- * Buid a minimal representation of this node content
- * sufficient to run the validation process on it
- */
- DEBUG_VALID_MSG("Found an entity reference, linearizing");
- cur = child;
- while (cur != NULL) {
- switch (cur->type) {
- case XML_ENTITY_REF_NODE:
- /*
- * Push the current node to be able to roll back
- * and process within the entity
- */
- if ((cur->children != NULL) &&
- (cur->children->children != NULL)) {
- nodeVPush(ctxt, cur);
- cur = cur->children->children;
- continue;
- }
- break;
- case XML_TEXT_NODE:
- if (xmlIsBlankNode(cur))
- break;
- /* no break on purpose */
- case XML_CDATA_SECTION_NODE:
- /* no break on purpose */
- case XML_ELEMENT_NODE:
- /*
- * Allocate a new node and minimally fills in
- * what's required
- */
- tmp = (xmlNodePtr) xmlMalloc(sizeof(xmlNode));
- if (tmp == NULL) {
- xmlVErrMemory(ctxt, "malloc failed");
- xmlFreeNodeList(repl);
- ret = -1;
- goto done;
- }
- tmp->type = cur->type;
- tmp->name = cur->name;
- tmp->ns = cur->ns;
- tmp->next = NULL;
- tmp->content = NULL;
- if (repl == NULL)
- repl = last = tmp;
- else {
- last->next = tmp;
- last = tmp;
- }
- if (cur->type == XML_CDATA_SECTION_NODE) {
- /*
- * E59 spaces in CDATA does not match the
- * nonterminal S
- */
- tmp->content = xmlStrdup(BAD_CAST "CDATA");
- }
- break;
- default:
- break;
- }
- /*
- * Switch to next element
- */
- cur = cur->next;
- while (cur == NULL) {
- cur = nodeVPop(ctxt);
- if (cur == NULL)
- break;
- cur = cur->next;
- }
- }
-
- /*
- * Relaunch the validation
- */
- ctxt->vstate = &ctxt->vstateTab[0];
- ctxt->vstateNr = 1;
- CONT = cont;
- NODE = repl;
- DEPTH = 0;
- OCCURS = 0;
- STATE = 0;
- ret = xmlValidateElementType(ctxt);
- }
-#endif /* LIBXML_REGEXP_ENABLED */
- if ((warn) && ((ret != 1) && (ret != -3))) {
- if (ctxt != NULL) {
- char expr[5000];
- char list[5000];
-
- expr[0] = 0;
- xmlSnprintfElementContent(&expr[0], 5000, cont, 1);
- list[0] = 0;
-#ifndef LIBXML_REGEXP_ENABLED
- if (repl != NULL)
- xmlSnprintfElements(&list[0], 5000, repl, 1);
- else
-#endif /* LIBXML_REGEXP_ENABLED */
- xmlSnprintfElements(&list[0], 5000, child, 1);
-
- if (name != NULL) {
- xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
- "Element %s content does not follow the DTD, expecting %s, got %s\n",
- name, BAD_CAST expr, BAD_CAST list);
- } else {
- xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
- "Element content does not follow the DTD, expecting %s, got %s\n",
- BAD_CAST expr, BAD_CAST list, NULL);
- }
- } else {
- if (name != NULL) {
- xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
- "Element %s content does not follow the DTD\n",
- name, NULL, NULL);
- } else {
- xmlErrValidNode(ctxt, parent, XML_DTD_CONTENT_MODEL,
- "Element content does not follow the DTD\n",
- NULL, NULL, NULL);
- }
- }
- ret = 0;
- }
- if (ret == -3)
- ret = 1;
-
-#ifndef LIBXML_REGEXP_ENABLED
-done:
- /*
- * Deallocate the copy if done, and free up the validation stack
- */
- while (repl != NULL) {
- tmp = repl->next;
- xmlFree(repl);
- repl = tmp;
- }
- ctxt->vstateMax = 0;
- if (ctxt->vstateTab != NULL) {
- xmlFree(ctxt->vstateTab);
- ctxt->vstateTab = NULL;
- }
-#endif
- ctxt->nodeMax = 0;
- ctxt->nodeNr = 0;
- if (ctxt->nodeTab != NULL) {
- xmlFree(ctxt->nodeTab);
- ctxt->nodeTab = NULL;
- }
- return(ret);
-
-}
-
-/**
- * xmlValidateCdataElement:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- *
- * Check that an element follows #CDATA
- *
- * returns 1 if valid or 0 otherwise
- */
-static int
-xmlValidateOneCdataElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- xmlNodePtr elem) {
- int ret = 1;
- xmlNodePtr cur, child;
-
- if ((ctxt == NULL) || (doc == NULL) || (elem == NULL) ||
- (elem->type != XML_ELEMENT_NODE))
- return(0);
-
- child = elem->children;
-
- cur = child;
- while (cur != NULL) {
- switch (cur->type) {
- case XML_ENTITY_REF_NODE:
- /*
- * Push the current node to be able to roll back
- * and process within the entity
- */
- if ((cur->children != NULL) &&
- (cur->children->children != NULL)) {
- nodeVPush(ctxt, cur);
- cur = cur->children->children;
- continue;
- }
- break;
- case XML_COMMENT_NODE:
- case XML_PI_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- break;
- default:
- ret = 0;
- goto done;
- }
- /*
- * Switch to next element
- */
- cur = cur->next;
- while (cur == NULL) {
- cur = nodeVPop(ctxt);
- if (cur == NULL)
- break;
- cur = cur->next;
- }
- }
-done:
- ctxt->nodeMax = 0;
- ctxt->nodeNr = 0;
- if (ctxt->nodeTab != NULL) {
- xmlFree(ctxt->nodeTab);
- ctxt->nodeTab = NULL;
- }
- return(ret);
-}
-
-/**
- * xmlValidateCheckMixed:
- * @ctxt: the validation context
- * @cont: the mixed content model
- * @qname: the qualified name as appearing in the serialization
- *
- * Check if the given node is part of the content model.
- *
- * Returns 1 if yes, 0 if no, -1 in case of error
- */
-static int
-xmlValidateCheckMixed(xmlValidCtxtPtr ctxt,
- xmlElementContentPtr cont, const xmlChar *qname) {
- const xmlChar *name;
- int plen;
- name = xmlSplitQName3(qname, &plen);
-
- if (name == NULL) {
- while (cont != NULL) {
- if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
- if ((cont->prefix == NULL) && (xmlStrEqual(cont->name, qname)))
- return(1);
- } else if ((cont->type == XML_ELEMENT_CONTENT_OR) &&
- (cont->c1 != NULL) &&
- (cont->c1->type == XML_ELEMENT_CONTENT_ELEMENT)){
- if ((cont->c1->prefix == NULL) &&
- (xmlStrEqual(cont->c1->name, qname)))
- return(1);
- } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
- (cont->c1 == NULL) ||
- (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
- xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
- "Internal: MIXED struct corrupted\n",
- NULL);
- break;
- }
- cont = cont->c2;
- }
- } else {
- while (cont != NULL) {
- if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
- if ((cont->prefix != NULL) &&
- (xmlStrncmp(cont->prefix, qname, plen) == 0) &&
- (xmlStrEqual(cont->name, name)))
- return(1);
- } else if ((cont->type == XML_ELEMENT_CONTENT_OR) &&
- (cont->c1 != NULL) &&
- (cont->c1->type == XML_ELEMENT_CONTENT_ELEMENT)){
- if ((cont->c1->prefix != NULL) &&
- (xmlStrncmp(cont->c1->prefix, qname, plen) == 0) &&
- (xmlStrEqual(cont->c1->name, name)))
- return(1);
- } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
- (cont->c1 == NULL) ||
- (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
- xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
- "Internal: MIXED struct corrupted\n",
- NULL);
- break;
- }
- cont = cont->c2;
- }
- }
- return(0);
-}
-
-/**
- * xmlValidGetElemDecl:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- * @extsubset: pointer, (out) indicate if the declaration was found
- * in the external subset.
- *
- * Finds a declaration associated to an element in the document.
- *
- * returns the pointer to the declaration or NULL if not found.
- */
-static xmlElementPtr
-xmlValidGetElemDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- xmlNodePtr elem, int *extsubset) {
- xmlElementPtr elemDecl = NULL;
- const xmlChar *prefix = NULL;
-
- if ((ctxt == NULL) || (doc == NULL) ||
- (elem == NULL) || (elem->name == NULL))
- return(NULL);
- if (extsubset != NULL)
- *extsubset = 0;
-
- /*
- * Fetch the declaration for the qualified name
- */
- if ((elem->ns != NULL) && (elem->ns->prefix != NULL))
- prefix = elem->ns->prefix;
-
- if (prefix != NULL) {
- elemDecl = xmlGetDtdQElementDesc(doc->intSubset,
- elem->name, prefix);
- if ((elemDecl == NULL) && (doc->extSubset != NULL)) {
- elemDecl = xmlGetDtdQElementDesc(doc->extSubset,
- elem->name, prefix);
- if ((elemDecl != NULL) && (extsubset != NULL))
- *extsubset = 1;
- }
- }
-
- /*
- * Fetch the declaration for the non qualified name
- * This is "non-strict" validation should be done on the
- * full QName but in that case being flexible makes sense.
- */
- if (elemDecl == NULL) {
- elemDecl = xmlGetDtdElementDesc(doc->intSubset, elem->name);
- if ((elemDecl == NULL) && (doc->extSubset != NULL)) {
- elemDecl = xmlGetDtdElementDesc(doc->extSubset, elem->name);
- if ((elemDecl != NULL) && (extsubset != NULL))
- *extsubset = 1;
- }
- }
- if (elemDecl == NULL) {
- xmlErrValidNode(ctxt, elem,
- XML_DTD_UNKNOWN_ELEM,
- "No declaration for element %s\n",
- elem->name, NULL, NULL);
- }
- return(elemDecl);
-}
-
-#ifdef LIBXML_REGEXP_ENABLED
-/**
- * xmlValidatePushElement:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- * @qname: the qualified name as appearing in the serialization
- *
- * Push a new element start on the validation stack.
- *
- * returns 1 if no validation problem was found or 0 otherwise
- */
-int
-xmlValidatePushElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- xmlNodePtr elem, const xmlChar *qname) {
- int ret = 1;
- xmlElementPtr eDecl;
- int extsubset = 0;
-
- if (ctxt == NULL)
- return(0);
-/* printf("PushElem %s\n", qname); */
- if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
- xmlValidStatePtr state = ctxt->vstate;
- xmlElementPtr elemDecl;
-
- /*
- * Check the new element agaisnt the content model of the new elem.
- */
- if (state->elemDecl != NULL) {
- elemDecl = state->elemDecl;
-
- switch(elemDecl->etype) {
- case XML_ELEMENT_TYPE_UNDEFINED:
- ret = 0;
- break;
- case XML_ELEMENT_TYPE_EMPTY:
- xmlErrValidNode(ctxt, state->node,
- XML_DTD_NOT_EMPTY,
- "Element %s was declared EMPTY this one has content\n",
- state->node->name, NULL, NULL);
- ret = 0;
- break;
- case XML_ELEMENT_TYPE_ANY:
- /* I don't think anything is required then */
- break;
- case XML_ELEMENT_TYPE_MIXED:
- /* simple case of declared as #PCDATA */
- if ((elemDecl->content != NULL) &&
- (elemDecl->content->type ==
- XML_ELEMENT_CONTENT_PCDATA)) {
- xmlErrValidNode(ctxt, state->node,
- XML_DTD_NOT_PCDATA,
- "Element %s was declared #PCDATA but contains non text nodes\n",
- state->node->name, NULL, NULL);
- ret = 0;
- } else {
- ret = xmlValidateCheckMixed(ctxt, elemDecl->content,
- qname);
- if (ret != 1) {
- xmlErrValidNode(ctxt, state->node,
- XML_DTD_INVALID_CHILD,
- "Element %s is not declared in %s list of possible children\n",
- qname, state->node->name, NULL);
- }
- }
- break;
- case XML_ELEMENT_TYPE_ELEMENT:
- /*
- * TODO:
- * VC: Standalone Document Declaration
- * - element types with element content, if white space
- * occurs directly within any instance of those types.
- */
- if (state->exec != NULL) {
- ret = xmlRegExecPushString(state->exec, qname, NULL);
- if (ret < 0) {
- xmlErrValidNode(ctxt, state->node,
- XML_DTD_CONTENT_MODEL,
- "Element %s content does not follow the DTD, Misplaced %s\n",
- state->node->name, qname, NULL);
- ret = 0;
- } else {
- ret = 1;
- }
- }
- break;
- }
- }
- }
- eDecl = xmlValidGetElemDecl(ctxt, doc, elem, &extsubset);
- vstateVPush(ctxt, eDecl, elem);
- return(ret);
-}
-
-/**
- * xmlValidatePushCData:
- * @ctxt: the validation context
- * @data: some character data read
- * @len: the length of the data
- *
- * check the CData parsed for validation in the current stack
- *
- * returns 1 if no validation problem was found or 0 otherwise
- */
-int
-xmlValidatePushCData(xmlValidCtxtPtr ctxt, const xmlChar *data, int len) {
- int ret = 1;
-
-/* printf("CDATA %s %d\n", data, len); */
- if (ctxt == NULL)
- return(0);
- if (len <= 0)
- return(ret);
- if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
- xmlValidStatePtr state = ctxt->vstate;
- xmlElementPtr elemDecl;
-
- /*
- * Check the new element agaisnt the content model of the new elem.
- */
- if (state->elemDecl != NULL) {
- elemDecl = state->elemDecl;
-
- switch(elemDecl->etype) {
- case XML_ELEMENT_TYPE_UNDEFINED:
- ret = 0;
- break;
- case XML_ELEMENT_TYPE_EMPTY:
- xmlErrValidNode(ctxt, state->node,
- XML_DTD_NOT_EMPTY,
- "Element %s was declared EMPTY this one has content\n",
- state->node->name, NULL, NULL);
- ret = 0;
- break;
- case XML_ELEMENT_TYPE_ANY:
- break;
- case XML_ELEMENT_TYPE_MIXED:
- break;
- case XML_ELEMENT_TYPE_ELEMENT:
- if (len > 0) {
- int i;
-
- for (i = 0;i < len;i++) {
- if (!IS_BLANK_CH(data[i])) {
- xmlErrValidNode(ctxt, state->node,
- XML_DTD_CONTENT_MODEL,
- "Element %s content does not follow the DTD, Text not allowed\n",
- state->node->name, NULL, NULL);
- ret = 0;
- goto done;
- }
- }
- /*
- * TODO:
- * VC: Standalone Document Declaration
- * element types with element content, if white space
- * occurs directly within any instance of those types.
- */
- }
- break;
- }
- }
- }
-done:
- return(ret);
-}
-
-/**
- * xmlValidatePopElement:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- * @qname: the qualified name as appearing in the serialization
- *
- * Pop the element end from the validation stack.
- *
- * returns 1 if no validation problem was found or 0 otherwise
- */
-int
-xmlValidatePopElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc ATTRIBUTE_UNUSED,
- xmlNodePtr elem ATTRIBUTE_UNUSED,
- const xmlChar *qname ATTRIBUTE_UNUSED) {
- int ret = 1;
-
- if (ctxt == NULL)
- return(0);
-/* printf("PopElem %s\n", qname); */
- if ((ctxt->vstateNr > 0) && (ctxt->vstate != NULL)) {
- xmlValidStatePtr state = ctxt->vstate;
- xmlElementPtr elemDecl;
-
- /*
- * Check the new element agaisnt the content model of the new elem.
- */
- if (state->elemDecl != NULL) {
- elemDecl = state->elemDecl;
-
- if (elemDecl->etype == XML_ELEMENT_TYPE_ELEMENT) {
- if (state->exec != NULL) {
- ret = xmlRegExecPushString(state->exec, NULL, NULL);
- if (ret == 0) {
- xmlErrValidNode(ctxt, state->node,
- XML_DTD_CONTENT_MODEL,
- "Element %s content does not follow the DTD, Expecting more child\n",
- state->node->name, NULL,NULL);
- } else {
- /*
- * previous validation errors should not generate
- * a new one here
- */
- ret = 1;
- }
- }
- }
- }
- vstateVPop(ctxt);
- }
- return(ret);
-}
-#endif /* LIBXML_REGEXP_ENABLED */
-
-/**
- * xmlValidateOneElement:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- *
- * Try to validate a single element and it's attributes,
- * basically it does the following checks as described by the
- * XML-1.0 recommendation:
- * - [ VC: Element Valid ]
- * - [ VC: Required Attribute ]
- * Then call xmlValidateOneAttribute() for each attribute present.
- *
- * The ID/IDREF checkings are done separately
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc,
- xmlNodePtr elem) {
- xmlElementPtr elemDecl = NULL;
- xmlElementContentPtr cont;
- xmlAttributePtr attr;
- xmlNodePtr child;
- int ret = 1, tmp;
- const xmlChar *name;
- int extsubset = 0;
-
- CHECK_DTD;
-
- if (elem == NULL) return(0);
- switch (elem->type) {
- case XML_ATTRIBUTE_NODE:
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Attribute element not expected\n", NULL, NULL ,NULL);
- return(0);
- case XML_TEXT_NODE:
- if (elem->children != NULL) {
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Text element has children !\n",
- NULL,NULL,NULL);
- return(0);
- }
- if (elem->ns != NULL) {
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Text element has namespace !\n",
- NULL,NULL,NULL);
- return(0);
- }
- if (elem->content == NULL) {
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Text element has no content !\n",
- NULL,NULL,NULL);
- return(0);
- }
- return(1);
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- return(1);
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- return(1);
- case XML_ENTITY_NODE:
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Entity element not expected\n", NULL, NULL ,NULL);
- return(0);
- case XML_NOTATION_NODE:
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Notation element not expected\n", NULL, NULL ,NULL);
- return(0);
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "Document element not expected\n", NULL, NULL ,NULL);
- return(0);
- case XML_HTML_DOCUMENT_NODE:
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "HTML Document not expected\n", NULL, NULL ,NULL);
- return(0);
- case XML_ELEMENT_NODE:
- break;
- default:
- xmlErrValidNode(ctxt, elem, XML_ERR_INTERNAL_ERROR,
- "unknown element type\n", NULL, NULL ,NULL);
- return(0);
- }
-
- /*
- * Fetch the declaration
- */
- elemDecl = xmlValidGetElemDecl(ctxt, doc, elem, &extsubset);
- if (elemDecl == NULL)
- return(0);
-
- /*
- * If vstateNr is not zero that means continuous validation is
- * activated, do not try to check the content model at that level.
- */
- if (ctxt->vstateNr == 0) {
- /* Check that the element content matches the definition */
- switch (elemDecl->etype) {
- case XML_ELEMENT_TYPE_UNDEFINED:
- xmlErrValidNode(ctxt, elem, XML_DTD_UNKNOWN_ELEM,
- "No declaration for element %s\n",
- elem->name, NULL, NULL);
- return(0);
- case XML_ELEMENT_TYPE_EMPTY:
- if (elem->children != NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_NOT_EMPTY,
- "Element %s was declared EMPTY this one has content\n",
- elem->name, NULL, NULL);
- ret = 0;
- }
- break;
- case XML_ELEMENT_TYPE_ANY:
- /* I don't think anything is required then */
- break;
- case XML_ELEMENT_TYPE_MIXED:
-
- /* simple case of declared as #PCDATA */
- if ((elemDecl->content != NULL) &&
- (elemDecl->content->type == XML_ELEMENT_CONTENT_PCDATA)) {
- ret = xmlValidateOneCdataElement(ctxt, doc, elem);
- if (!ret) {
- xmlErrValidNode(ctxt, elem, XML_DTD_NOT_PCDATA,
- "Element %s was declared #PCDATA but contains non text nodes\n",
- elem->name, NULL, NULL);
- }
- break;
- }
- child = elem->children;
- /* Hum, this start to get messy */
- while (child != NULL) {
- if (child->type == XML_ELEMENT_NODE) {
- name = child->name;
- if ((child->ns != NULL) && (child->ns->prefix != NULL)) {
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(child->name, child->ns->prefix,
- fn, 50);
- if (fullname == NULL)
- return(0);
- cont = elemDecl->content;
- while (cont != NULL) {
- if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
- if (xmlStrEqual(cont->name, fullname))
- break;
- } else if ((cont->type == XML_ELEMENT_CONTENT_OR) &&
- (cont->c1 != NULL) &&
- (cont->c1->type == XML_ELEMENT_CONTENT_ELEMENT)){
- if (xmlStrEqual(cont->c1->name, fullname))
- break;
- } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
- (cont->c1 == NULL) ||
- (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)){
- xmlErrValid(NULL, XML_DTD_MIXED_CORRUPT,
- "Internal: MIXED struct corrupted\n",
- NULL);
- break;
- }
- cont = cont->c2;
- }
- if ((fullname != fn) && (fullname != child->name))
- xmlFree(fullname);
- if (cont != NULL)
- goto child_ok;
- }
- cont = elemDecl->content;
- while (cont != NULL) {
- if (cont->type == XML_ELEMENT_CONTENT_ELEMENT) {
- if (xmlStrEqual(cont->name, name)) break;
- } else if ((cont->type == XML_ELEMENT_CONTENT_OR) &&
- (cont->c1 != NULL) &&
- (cont->c1->type == XML_ELEMENT_CONTENT_ELEMENT)) {
- if (xmlStrEqual(cont->c1->name, name)) break;
- } else if ((cont->type != XML_ELEMENT_CONTENT_OR) ||
- (cont->c1 == NULL) ||
- (cont->c1->type != XML_ELEMENT_CONTENT_PCDATA)) {
- xmlErrValid(ctxt, XML_DTD_MIXED_CORRUPT,
- "Internal: MIXED struct corrupted\n",
- NULL);
- break;
- }
- cont = cont->c2;
- }
- if (cont == NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_INVALID_CHILD,
- "Element %s is not declared in %s list of possible children\n",
- name, elem->name, NULL);
- ret = 0;
- }
- }
-child_ok:
- child = child->next;
- }
- break;
- case XML_ELEMENT_TYPE_ELEMENT:
- if ((doc->standalone == 1) && (extsubset == 1)) {
- /*
- * VC: Standalone Document Declaration
- * - element types with element content, if white space
- * occurs directly within any instance of those types.
- */
- child = elem->children;
- while (child != NULL) {
- if (child->type == XML_TEXT_NODE) {
- const xmlChar *content = child->content;
-
- while (IS_BLANK_CH(*content))
- content++;
- if (*content == 0) {
- xmlErrValidNode(ctxt, elem,
- XML_DTD_STANDALONE_WHITE_SPACE,
-"standalone: %s declared in the external subset contains white spaces nodes\n",
- elem->name, NULL, NULL);
- ret = 0;
- break;
- }
- }
- child =child->next;
- }
- }
- child = elem->children;
- cont = elemDecl->content;
- tmp = xmlValidateElementContent(ctxt, child, elemDecl, 1, elem);
- if (tmp <= 0)
- ret = tmp;
- break;
- }
- } /* not continuous */
-
- /* [ VC: Required Attribute ] */
- attr = elemDecl->attributes;
- while (attr != NULL) {
- if (attr->def == XML_ATTRIBUTE_REQUIRED) {
- int qualified = -1;
-
- if ((attr->prefix == NULL) &&
- (xmlStrEqual(attr->name, BAD_CAST "xmlns"))) {
- xmlNsPtr ns;
-
- ns = elem->nsDef;
- while (ns != NULL) {
- if (ns->prefix == NULL)
- goto found;
- ns = ns->next;
- }
- } else if (xmlStrEqual(attr->prefix, BAD_CAST "xmlns")) {
- xmlNsPtr ns;
-
- ns = elem->nsDef;
- while (ns != NULL) {
- if (xmlStrEqual(attr->name, ns->prefix))
- goto found;
- ns = ns->next;
- }
- } else {
- xmlAttrPtr attrib;
-
- attrib = elem->properties;
- while (attrib != NULL) {
- if (xmlStrEqual(attrib->name, attr->name)) {
- if (attr->prefix != NULL) {
- xmlNsPtr nameSpace = attrib->ns;
-
- if (nameSpace == NULL)
- nameSpace = elem->ns;
- /*
- * qualified names handling is problematic, having a
- * different prefix should be possible but DTDs don't
- * allow to define the URI instead of the prefix :-(
- */
- if (nameSpace == NULL) {
- if (qualified < 0)
- qualified = 0;
- } else if (!xmlStrEqual(nameSpace->prefix,
- attr->prefix)) {
- if (qualified < 1)
- qualified = 1;
- } else
- goto found;
- } else {
- /*
- * We should allow applications to define namespaces
- * for their application even if the DTD doesn't
- * carry one, otherwise, basically we would always
- * break.
- */
- goto found;
- }
- }
- attrib = attrib->next;
- }
- }
- if (qualified == -1) {
- if (attr->prefix == NULL) {
- xmlErrValidNode(ctxt, elem, XML_DTD_MISSING_ATTRIBUTE,
- "Element %s does not carry attribute %s\n",
- elem->name, attr->name, NULL);
- ret = 0;
- } else {
- xmlErrValidNode(ctxt, elem, XML_DTD_MISSING_ATTRIBUTE,
- "Element %s does not carry attribute %s:%s\n",
- elem->name, attr->prefix,attr->name);
- ret = 0;
- }
- } else if (qualified == 0) {
- xmlErrValidWarning(ctxt, elem, XML_DTD_NO_PREFIX,
- "Element %s required attribute %s:%s has no prefix\n",
- elem->name, attr->prefix, attr->name);
- } else if (qualified == 1) {
- xmlErrValidWarning(ctxt, elem, XML_DTD_DIFFERENT_PREFIX,
- "Element %s required attribute %s:%s has different prefix\n",
- elem->name, attr->prefix, attr->name);
- }
- } else if (attr->def == XML_ATTRIBUTE_FIXED) {
- /*
- * Special tests checking #FIXED namespace declarations
- * have the right value since this is not done as an
- * attribute checking
- */
- if ((attr->prefix == NULL) &&
- (xmlStrEqual(attr->name, BAD_CAST "xmlns"))) {
- xmlNsPtr ns;
-
- ns = elem->nsDef;
- while (ns != NULL) {
- if (ns->prefix == NULL) {
- if (!xmlStrEqual(attr->defaultValue, ns->href)) {
- xmlErrValidNode(ctxt, elem,
- XML_DTD_ELEM_DEFAULT_NAMESPACE,
- "Element %s namespace name for default namespace does not match the DTD\n",
- elem->name, NULL, NULL);
- ret = 0;
- }
- goto found;
- }
- ns = ns->next;
- }
- } else if (xmlStrEqual(attr->prefix, BAD_CAST "xmlns")) {
- xmlNsPtr ns;
-
- ns = elem->nsDef;
- while (ns != NULL) {
- if (xmlStrEqual(attr->name, ns->prefix)) {
- if (!xmlStrEqual(attr->defaultValue, ns->href)) {
- xmlErrValidNode(ctxt, elem, XML_DTD_ELEM_NAMESPACE,
- "Element %s namespace name for %s does not match the DTD\n",
- elem->name, ns->prefix, NULL);
- ret = 0;
- }
- goto found;
- }
- ns = ns->next;
- }
- }
- }
-found:
- attr = attr->nexth;
- }
- return(ret);
-}
-
-/**
- * xmlValidateRoot:
- * @ctxt: the validation context
- * @doc: a document instance
- *
- * Try to validate a the root element
- * basically it does the following check as described by the
- * XML-1.0 recommendation:
- * - [ VC: Root Element Type ]
- * it doesn't try to recurse or apply other check to the element
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
- xmlNodePtr root;
- int ret;
-
- if (doc == NULL) return(0);
-
- root = xmlDocGetRootElement(doc);
- if ((root == NULL) || (root->name == NULL)) {
- xmlErrValid(ctxt, XML_DTD_NO_ROOT,
- "no root element\n", NULL);
- return(0);
- }
-
- /*
- * When doing post validation against a separate DTD, those may
- * no internal subset has been generated
- */
- if ((doc->intSubset != NULL) &&
- (doc->intSubset->name != NULL)) {
- /*
- * Check first the document root against the NQName
- */
- if (!xmlStrEqual(doc->intSubset->name, root->name)) {
- if ((root->ns != NULL) && (root->ns->prefix != NULL)) {
- xmlChar fn[50];
- xmlChar *fullname;
-
- fullname = xmlBuildQName(root->name, root->ns->prefix, fn, 50);
- if (fullname == NULL) {
- xmlVErrMemory(ctxt, NULL);
- return(0);
- }
- ret = xmlStrEqual(doc->intSubset->name, fullname);
- if ((fullname != fn) && (fullname != root->name))
- xmlFree(fullname);
- if (ret == 1)
- goto name_ok;
- }
- if ((xmlStrEqual(doc->intSubset->name, BAD_CAST "HTML")) &&
- (xmlStrEqual(root->name, BAD_CAST "html")))
- goto name_ok;
- xmlErrValidNode(ctxt, root, XML_DTD_ROOT_NAME,
- "root and DTD name do not match '%s' and '%s'\n",
- root->name, doc->intSubset->name, NULL);
- return(0);
- }
- }
-name_ok:
- return(1);
-}
-
-
-/**
- * xmlValidateElement:
- * @ctxt: the validation context
- * @doc: a document instance
- * @elem: an element instance
- *
- * Try to validate the subtree under an element
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem) {
- xmlNodePtr child;
- xmlAttrPtr attr;
- xmlNsPtr ns;
- const xmlChar *value;
- int ret = 1;
-
- if (elem == NULL) return(0);
-
- /*
- * XInclude elements were added after parsing in the infoset,
- * they don't really mean anything validation wise.
- */
- if ((elem->type == XML_XINCLUDE_START) ||
- (elem->type == XML_XINCLUDE_END) ||
- (elem->type == XML_NAMESPACE_DECL))
- return(1);
-
- CHECK_DTD;
-
- /*
- * Entities references have to be handled separately
- */
- if (elem->type == XML_ENTITY_REF_NODE) {
- return(1);
- }
-
- ret &= xmlValidateOneElement(ctxt, doc, elem);
- if (elem->type == XML_ELEMENT_NODE) {
- attr = elem->properties;
- while (attr != NULL) {
- value = xmlNodeListGetString(doc, attr->children, 0);
- ret &= xmlValidateOneAttribute(ctxt, doc, elem, attr, value);
- if (value != NULL)
- xmlFree((char *)value);
- attr= attr->next;
- }
- ns = elem->nsDef;
- while (ns != NULL) {
- if (elem->ns == NULL)
- ret &= xmlValidateOneNamespace(ctxt, doc, elem, NULL,
- ns, ns->href);
- else
- ret &= xmlValidateOneNamespace(ctxt, doc, elem,
- elem->ns->prefix, ns, ns->href);
- ns = ns->next;
- }
- }
- child = elem->children;
- while (child != NULL) {
- ret &= xmlValidateElement(ctxt, doc, child);
- child = child->next;
- }
-
- return(ret);
-}
-
-/**
- * xmlValidateRef:
- * @ref: A reference to be validated
- * @ctxt: Validation context
- * @name: Name of ID we are searching for
- *
- */
-static void
-xmlValidateRef(xmlRefPtr ref, xmlValidCtxtPtr ctxt,
- const xmlChar *name) {
- xmlAttrPtr id;
- xmlAttrPtr attr;
-
- if (ref == NULL)
- return;
- if ((ref->attr == NULL) && (ref->name == NULL))
- return;
- attr = ref->attr;
- if (attr == NULL) {
- xmlChar *dup, *str = NULL, *cur, save;
-
- dup = xmlStrdup(name);
- if (dup == NULL) {
- ctxt->valid = 0;
- return;
- }
- cur = dup;
- while (*cur != 0) {
- str = cur;
- while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
- save = *cur;
- *cur = 0;
- id = xmlGetID(ctxt->doc, str);
- if (id == NULL) {
- xmlErrValidNodeNr(ctxt, NULL, XML_DTD_UNKNOWN_ID,
- "attribute %s line %d references an unknown ID \"%s\"\n",
- ref->name, ref->lineno, str);
- ctxt->valid = 0;
- }
- if (save == 0)
- break;
- *cur = save;
- while (IS_BLANK_CH(*cur)) cur++;
- }
- xmlFree(dup);
- } else if (attr->atype == XML_ATTRIBUTE_IDREF) {
- id = xmlGetID(ctxt->doc, name);
- if (id == NULL) {
- xmlErrValidNode(ctxt, attr->parent, XML_DTD_UNKNOWN_ID,
- "IDREF attribute %s references an unknown ID \"%s\"\n",
- attr->name, name, NULL);
- ctxt->valid = 0;
- }
- } else if (attr->atype == XML_ATTRIBUTE_IDREFS) {
- xmlChar *dup, *str = NULL, *cur, save;
-
- dup = xmlStrdup(name);
- if (dup == NULL) {
- xmlVErrMemory(ctxt, "IDREFS split");
- ctxt->valid = 0;
- return;
- }
- cur = dup;
- while (*cur != 0) {
- str = cur;
- while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
- save = *cur;
- *cur = 0;
- id = xmlGetID(ctxt->doc, str);
- if (id == NULL) {
- xmlErrValidNode(ctxt, attr->parent, XML_DTD_UNKNOWN_ID,
- "IDREFS attribute %s references an unknown ID \"%s\"\n",
- attr->name, str, NULL);
- ctxt->valid = 0;
- }
- if (save == 0)
- break;
- *cur = save;
- while (IS_BLANK_CH(*cur)) cur++;
- }
- xmlFree(dup);
- }
-}
-
-/**
- * xmlWalkValidateList:
- * @data: Contents of current link
- * @user: Value supplied by the user
- *
- * Returns 0 to abort the walk or 1 to continue
- */
-static int
-xmlWalkValidateList(const void *data, const void *user)
-{
- xmlValidateMemoPtr memo = (xmlValidateMemoPtr)user;
- xmlValidateRef((xmlRefPtr)data, memo->ctxt, memo->name);
- return 1;
-}
-
-/**
- * xmlValidateCheckRefCallback:
- * @ref_list: List of references
- * @ctxt: Validation context
- * @name: Name of ID we are searching for
- *
- */
-static void
-xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
- const xmlChar *name) {
- xmlValidateMemo memo;
-
- if (ref_list == NULL)
- return;
- memo.ctxt = ctxt;
- memo.name = name;
-
- xmlListWalk(ref_list, xmlWalkValidateList, &memo);
-
-}
-
-/**
- * xmlValidateDocumentFinal:
- * @ctxt: the validation context
- * @doc: a document instance
- *
- * Does the final step for the document validation once all the
- * incremental validation steps have been completed
- *
- * basically it does the following checks described by the XML Rec
- *
- * Check all the IDREF/IDREFS attributes definition for validity
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
- xmlRefTablePtr table;
- unsigned int save;
-
- if (ctxt == NULL)
- return(0);
- if (doc == NULL) {
- xmlErrValid(ctxt, XML_DTD_NO_DOC,
- "xmlValidateDocumentFinal: doc == NULL\n", NULL);
- return(0);
- }
-
- /* trick to get correct line id report */
- save = ctxt->finishDtd;
- ctxt->finishDtd = 0;
-
- /*
- * Check all the NOTATION/NOTATIONS attributes
- */
- /*
- * Check all the ENTITY/ENTITIES attributes definition for validity
- */
- /*
- * Check all the IDREF/IDREFS attributes definition for validity
- */
- table = (xmlRefTablePtr) doc->refs;
- ctxt->doc = doc;
- ctxt->valid = 1;
- xmlHashScan(table, (xmlHashScanner) xmlValidateCheckRefCallback, ctxt);
-
- ctxt->finishDtd = save;
- return(ctxt->valid);
-}
-
-/**
- * xmlValidateDtd:
- * @ctxt: the validation context
- * @doc: a document instance
- * @dtd: a dtd instance
- *
- * Try to validate the document against the dtd instance
- *
- * Basically it does check all the definitions in the DtD.
- * Note the the internal subset (if present) is de-coupled
- * (i.e. not used), which could give problems if ID or IDREF
- * is present.
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd) {
- int ret;
- xmlDtdPtr oldExt, oldInt;
- xmlNodePtr root;
-
- if (dtd == NULL) return(0);
- if (doc == NULL) return(0);
- oldExt = doc->extSubset;
- oldInt = doc->intSubset;
- doc->extSubset = dtd;
- doc->intSubset = NULL;
- ret = xmlValidateRoot(ctxt, doc);
- if (ret == 0) {
- doc->extSubset = oldExt;
- doc->intSubset = oldInt;
- return(ret);
- }
- if (doc->ids != NULL) {
- xmlFreeIDTable(doc->ids);
- doc->ids = NULL;
- }
- if (doc->refs != NULL) {
- xmlFreeRefTable(doc->refs);
- doc->refs = NULL;
- }
- root = xmlDocGetRootElement(doc);
- ret = xmlValidateElement(ctxt, doc, root);
- ret &= xmlValidateDocumentFinal(ctxt, doc);
- doc->extSubset = oldExt;
- doc->intSubset = oldInt;
- return(ret);
-}
-
-static void
-xmlValidateNotationCallback(xmlEntityPtr cur, xmlValidCtxtPtr ctxt,
- const xmlChar *name ATTRIBUTE_UNUSED) {
- if (cur == NULL)
- return;
- if (cur->etype == XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
- xmlChar *notation = cur->content;
-
- if (notation != NULL) {
- int ret;
-
- ret = xmlValidateNotationUse(ctxt, cur->doc, notation);
- if (ret != 1) {
- ctxt->valid = 0;
- }
- }
- }
-}
-
-static void
-xmlValidateAttributeCallback(xmlAttributePtr cur, xmlValidCtxtPtr ctxt,
- const xmlChar *name ATTRIBUTE_UNUSED) {
- int ret;
- xmlDocPtr doc;
- xmlElementPtr elem = NULL;
-
- if (cur == NULL)
- return;
- switch (cur->atype) {
- case XML_ATTRIBUTE_CDATA:
- case XML_ATTRIBUTE_ID:
- case XML_ATTRIBUTE_IDREF :
- case XML_ATTRIBUTE_IDREFS:
- case XML_ATTRIBUTE_NMTOKEN:
- case XML_ATTRIBUTE_NMTOKENS:
- case XML_ATTRIBUTE_ENUMERATION:
- break;
- case XML_ATTRIBUTE_ENTITY:
- case XML_ATTRIBUTE_ENTITIES:
- case XML_ATTRIBUTE_NOTATION:
- if (cur->defaultValue != NULL) {
-
- ret = xmlValidateAttributeValue2(ctxt, ctxt->doc, cur->name,
- cur->atype, cur->defaultValue);
- if ((ret == 0) && (ctxt->valid == 1))
- ctxt->valid = 0;
- }
- if (cur->tree != NULL) {
- xmlEnumerationPtr tree = cur->tree;
- while (tree != NULL) {
- ret = xmlValidateAttributeValue2(ctxt, ctxt->doc,
- cur->name, cur->atype, tree->name);
- if ((ret == 0) && (ctxt->valid == 1))
- ctxt->valid = 0;
- tree = tree->next;
- }
- }
- }
- if (cur->atype == XML_ATTRIBUTE_NOTATION) {
- doc = cur->doc;
- if (cur->elem == NULL) {
- xmlErrValid(ctxt, XML_ERR_INTERNAL_ERROR,
- "xmlValidateAttributeCallback(%s): internal error\n",
- (const char *) cur->name);
- return;
- }
-
- if (doc != NULL)
- elem = xmlGetDtdElementDesc(doc->intSubset, cur->elem);
- if ((elem == NULL) && (doc != NULL))
- elem = xmlGetDtdElementDesc(doc->extSubset, cur->elem);
- if ((elem == NULL) && (cur->parent != NULL) &&
- (cur->parent->type == XML_DTD_NODE))
- elem = xmlGetDtdElementDesc((xmlDtdPtr) cur->parent, cur->elem);
- if (elem == NULL) {
- xmlErrValidNode(ctxt, NULL, XML_DTD_UNKNOWN_ELEM,
- "attribute %s: could not find decl for element %s\n",
- cur->name, cur->elem, NULL);
- return;
- }
- if (elem->etype == XML_ELEMENT_TYPE_EMPTY) {
- xmlErrValidNode(ctxt, NULL, XML_DTD_EMPTY_NOTATION,
- "NOTATION attribute %s declared for EMPTY element %s\n",
- cur->name, cur->elem, NULL);
- ctxt->valid = 0;
- }
- }
-}
-
-/**
- * xmlValidateDtdFinal:
- * @ctxt: the validation context
- * @doc: a document instance
- *
- * Does the final step for the dtds validation once all the
- * subsets have been parsed
- *
- * basically it does the following checks described by the XML Rec
- * - check that ENTITY and ENTITIES type attributes default or
- * possible values matches one of the defined entities.
- * - check that NOTATION type attributes default or
- * possible values matches one of the defined notations.
- *
- * returns 1 if valid or 0 if invalid and -1 if not well-formed
- */
-
-int
-xmlValidateDtdFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
- xmlDtdPtr dtd;
- xmlAttributeTablePtr table;
- xmlEntitiesTablePtr entities;
-
- if ((doc == NULL) || (ctxt == NULL)) return(0);
- if ((doc->intSubset == NULL) && (doc->extSubset == NULL))
- return(0);
- ctxt->doc = doc;
- ctxt->valid = 1;
- dtd = doc->intSubset;
- if ((dtd != NULL) && (dtd->attributes != NULL)) {
- table = (xmlAttributeTablePtr) dtd->attributes;
- xmlHashScan(table, (xmlHashScanner) xmlValidateAttributeCallback, ctxt);
- }
- if ((dtd != NULL) && (dtd->entities != NULL)) {
- entities = (xmlEntitiesTablePtr) dtd->entities;
- xmlHashScan(entities, (xmlHashScanner) xmlValidateNotationCallback,
- ctxt);
- }
- dtd = doc->extSubset;
- if ((dtd != NULL) && (dtd->attributes != NULL)) {
- table = (xmlAttributeTablePtr) dtd->attributes;
- xmlHashScan(table, (xmlHashScanner) xmlValidateAttributeCallback, ctxt);
- }
- if ((dtd != NULL) && (dtd->entities != NULL)) {
- entities = (xmlEntitiesTablePtr) dtd->entities;
- xmlHashScan(entities, (xmlHashScanner) xmlValidateNotationCallback,
- ctxt);
- }
- return(ctxt->valid);
-}
-
-/**
- * xmlValidateDocument:
- * @ctxt: the validation context
- * @doc: a document instance
- *
- * Try to validate the document instance
- *
- * basically it does the all the checks described by the XML Rec
- * i.e. validates the internal and external subset (if present)
- * and validate the document tree.
- *
- * returns 1 if valid or 0 otherwise
- */
-
-int
-xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
- int ret;
- xmlNodePtr root;
-
- if (doc == NULL)
- return(0);
- if ((doc->intSubset == NULL) && (doc->extSubset == NULL)) {
- xmlErrValid(ctxt, XML_DTD_NO_DTD,
- "no DTD found!\n", NULL);
- return(0);
- }
- if ((doc->intSubset != NULL) && ((doc->intSubset->SystemID != NULL) ||
- (doc->intSubset->ExternalID != NULL)) && (doc->extSubset == NULL)) {
- xmlChar *sysID;
- if (doc->intSubset->SystemID != NULL) {
- sysID = xmlBuildURI(doc->intSubset->SystemID,
- doc->URL);
- if (sysID == NULL) {
- xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
- "Could not build URI for external subset \"%s\"\n",
- (const char *) doc->intSubset->SystemID);
- return 0;
- }
- } else
- sysID = NULL;
- doc->extSubset = xmlParseDTD(doc->intSubset->ExternalID,
- (const xmlChar *)sysID);
- if (sysID != NULL)
- xmlFree(sysID);
- if (doc->extSubset == NULL) {
- if (doc->intSubset->SystemID != NULL) {
- xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
- "Could not load the external subset \"%s\"\n",
- (const char *) doc->intSubset->SystemID);
- } else {
- xmlErrValid(ctxt, XML_DTD_LOAD_ERROR,
- "Could not load the external subset \"%s\"\n",
- (const char *) doc->intSubset->ExternalID);
- }
- return(0);
- }
- }
-
- if (doc->ids != NULL) {
- xmlFreeIDTable(doc->ids);
- doc->ids = NULL;
- }
- if (doc->refs != NULL) {
- xmlFreeRefTable(doc->refs);
- doc->refs = NULL;
- }
- ret = xmlValidateDtdFinal(ctxt, doc);
- if (!xmlValidateRoot(ctxt, doc)) return(0);
-
- root = xmlDocGetRootElement(doc);
- ret &= xmlValidateElement(ctxt, doc, root);
- ret &= xmlValidateDocumentFinal(ctxt, doc);
- return(ret);
-}
-
-/************************************************************************
- * *
- * Routines for dynamic validation editing *
- * *
- ************************************************************************/
-
-/**
- * xmlValidGetPotentialChildren:
- * @ctree: an element content tree
- * @names: an array to store the list of child names
- * @len: a pointer to the number of element in the list
- * @max: the size of the array
- *
- * Build/extend a list of potential children allowed by the content tree
- *
- * returns the number of element in the list, or -1 in case of error.
- */
-
-int
-xmlValidGetPotentialChildren(xmlElementContent *ctree,
- const xmlChar **names,
- int *len, int max) {
- int i;
-
- if ((ctree == NULL) || (names == NULL) || (len == NULL))
- return(-1);
- if (*len >= max) return(*len);
-
- switch (ctree->type) {
- case XML_ELEMENT_CONTENT_PCDATA:
- for (i = 0; i < *len;i++)
- if (xmlStrEqual(BAD_CAST "#PCDATA", names[i])) return(*len);
- names[(*len)++] = BAD_CAST "#PCDATA";
- break;
- case XML_ELEMENT_CONTENT_ELEMENT:
- for (i = 0; i < *len;i++)
- if (xmlStrEqual(ctree->name, names[i])) return(*len);
- names[(*len)++] = ctree->name;
- break;
- case XML_ELEMENT_CONTENT_SEQ:
- xmlValidGetPotentialChildren(ctree->c1, names, len, max);
- xmlValidGetPotentialChildren(ctree->c2, names, len, max);
- break;
- case XML_ELEMENT_CONTENT_OR:
- xmlValidGetPotentialChildren(ctree->c1, names, len, max);
- xmlValidGetPotentialChildren(ctree->c2, names, len, max);
- break;
- }
-
- return(*len);
-}
-
-/*
- * Dummy function to suppress messages while we try out valid elements
- */
-static void XMLCDECL xmlNoValidityErr(void *ctx ATTRIBUTE_UNUSED,
- const char *msg ATTRIBUTE_UNUSED, ...) {
- return;
-}
-
-/**
- * xmlValidGetValidElements:
- * @prev: an element to insert after
- * @next: an element to insert next
- * @names: an array to store the list of child names
- * @max: the size of the array
- *
- * This function returns the list of authorized children to insert
- * within an existing tree while respecting the validity constraints
- * forced by the Dtd. The insertion point is defined using @prev and
- * @next in the following ways:
- * to insert before 'node': xmlValidGetValidElements(node->prev, node, ...
- * to insert next 'node': xmlValidGetValidElements(node, node->next, ...
- * to replace 'node': xmlValidGetValidElements(node->prev, node->next, ...
- * to prepend a child to 'node': xmlValidGetValidElements(NULL, node->childs,
- * to append a child to 'node': xmlValidGetValidElements(node->last, NULL, ...
- *
- * pointers to the element names are inserted at the beginning of the array
- * and do not need to be freed.
- *
- * returns the number of element in the list, or -1 in case of error. If
- * the function returns the value @max the caller is invited to grow the
- * receiving array and retry.
- */
-
-int
-xmlValidGetValidElements(xmlNode *prev, xmlNode *next, const xmlChar **names,
- int max) {
- xmlValidCtxt vctxt;
- int nb_valid_elements = 0;
- const xmlChar *elements[256]={0};
- int nb_elements = 0, i;
- const xmlChar *name;
-
- xmlNode *ref_node;
- xmlNode *parent;
- xmlNode *test_node;
-
- xmlNode *prev_next;
- xmlNode *next_prev;
- xmlNode *parent_childs;
- xmlNode *parent_last;
-
- xmlElement *element_desc;
-
- if (prev == NULL && next == NULL)
- return(-1);
-
- if (names == NULL) return(-1);
- if (max <= 0) return(-1);
-
- memset(&vctxt, 0, sizeof (xmlValidCtxt));
- vctxt.error = xmlNoValidityErr; /* this suppresses err/warn output */
-
- nb_valid_elements = 0;
- ref_node = prev ? prev : next;
- parent = ref_node->parent;
-
- /*
- * Retrieves the parent element declaration
- */
- element_desc = xmlGetDtdElementDesc(parent->doc->intSubset,
- parent->name);
- if ((element_desc == NULL) && (parent->doc->extSubset != NULL))
- element_desc = xmlGetDtdElementDesc(parent->doc->extSubset,
- parent->name);
- if (element_desc == NULL) return(-1);
-
- /*
- * Do a backup of the current tree structure
- */
- prev_next = prev ? prev->next : NULL;
- next_prev = next ? next->prev : NULL;
- parent_childs = parent->children;
- parent_last = parent->last;
-
- /*
- * Creates a dummy node and insert it into the tree
- */
- test_node = xmlNewDocNode (ref_node->doc, NULL, BAD_CAST "<!dummy?>", NULL);
- if (test_node == NULL)
- return(-1);
-
- test_node->parent = parent;
- test_node->prev = prev;
- test_node->next = next;
- name = test_node->name;
-
- if (prev) prev->next = test_node;
- else parent->children = test_node;
-
- if (next) next->prev = test_node;
- else parent->last = test_node;
-
- /*
- * Insert each potential child node and check if the parent is
- * still valid
- */
- nb_elements = xmlValidGetPotentialChildren(element_desc->content,
- elements, &nb_elements, 256);
-
- for (i = 0;i < nb_elements;i++) {
- test_node->name = elements[i];
- if (xmlValidateOneElement(&vctxt, parent->doc, parent)) {
- int j;
-
- for (j = 0; j < nb_valid_elements;j++)
- if (xmlStrEqual(elements[i], names[j])) break;
- names[nb_valid_elements++] = elements[i];
- if (nb_valid_elements >= max) break;
- }
- }
-
- /*
- * Restore the tree structure
- */
- if (prev) prev->next = prev_next;
- if (next) next->prev = next_prev;
- parent->children = parent_childs;
- parent->last = parent_last;
-
- /*
- * Free up the dummy node
- */
- test_node->name = name;
- xmlFreeNode(test_node);
-
- return(nb_valid_elements);
-}
-#endif /* LIBXML_VALID_ENABLED */
-
-#define bottom_valid
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/xinclude.c b/external/libxml2_android/jni/libxml2/xinclude.c
deleted file mode 100644
index e3bb43ec..00000000
--- a/external/libxml2_android/jni/libxml2/xinclude.c
+++ /dev/null
@@ -1,2624 +0,0 @@
-/*
- * xinclude.c : Code to implement XInclude processing
- *
- * World Wide Web Consortium W3C Last Call Working Draft 10 November 2003
- * http://www.w3.org/TR/2003/WD-xinclude-20031110
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/uri.h>
-#include <libxml/xpath.h>
-#include <libxml/xpointer.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/encoding.h>
-#include <libxml/globals.h>
-
-#ifdef LIBXML_XINCLUDE_ENABLED
-#include <libxml/xinclude.h>
-
-#include "buf.h"
-
-#define XINCLUDE_MAX_DEPTH 40
-
-/* #define DEBUG_XINCLUDE */
-#ifdef DEBUG_XINCLUDE
-#ifdef LIBXML_DEBUG_ENABLED
-#include <libxml/debugXML.h>
-#endif
-#endif
-
-/************************************************************************
- * *
- * XInclude context handling *
- * *
- ************************************************************************/
-
-/*
- * An XInclude context
- */
-typedef xmlChar *xmlURL;
-
-typedef struct _xmlXIncludeRef xmlXIncludeRef;
-typedef xmlXIncludeRef *xmlXIncludeRefPtr;
-struct _xmlXIncludeRef {
- xmlChar *URI; /* the fully resolved resource URL */
- xmlChar *fragment; /* the fragment in the URI */
- xmlDocPtr doc; /* the parsed document */
- xmlNodePtr ref; /* the node making the reference in the source */
- xmlNodePtr inc; /* the included copy */
- int xml; /* xml or txt */
- int count; /* how many refs use that specific doc */
- xmlXPathObjectPtr xptr; /* the xpointer if needed */
- int emptyFb; /* flag to show fallback empty */
-};
-
-struct _xmlXIncludeCtxt {
- xmlDocPtr doc; /* the source document */
- int incBase; /* the first include for this document */
- int incNr; /* number of includes */
- int incMax; /* size of includes tab */
- xmlXIncludeRefPtr *incTab; /* array of included references */
-
- int txtNr; /* number of unparsed documents */
- int txtMax; /* size of unparsed documents tab */
- xmlNodePtr *txtTab; /* array of unparsed text nodes */
- xmlURL *txturlTab; /* array of unparsed text URLs */
-
- xmlChar * url; /* the current URL processed */
- int urlNr; /* number of URLs stacked */
- int urlMax; /* size of URL stack */
- xmlChar * *urlTab; /* URL stack */
-
- int nbErrors; /* the number of errors detected */
- int legacy; /* using XINCLUDE_OLD_NS */
- int parseFlags; /* the flags used for parsing XML documents */
- xmlChar * base; /* the current xml:base */
-
- void *_private; /* application data */
-};
-
-static int
-xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree);
-
-
-/************************************************************************
- * *
- * XInclude error handler *
- * *
- ************************************************************************/
-
-/**
- * xmlXIncludeErrMemory:
- * @extra: extra information
- *
- * Handle an out of memory condition
- */
-static void
-xmlXIncludeErrMemory(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node,
- const char *extra)
-{
- if (ctxt != NULL)
- ctxt->nbErrors++;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
- XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0,
- extra, NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlXIncludeErr:
- * @ctxt: the XInclude context
- * @node: the context node
- * @msg: the error message
- * @extra: extra information
- *
- * Handle an XInclude error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlXIncludeErr(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node, int error,
- const char *msg, const xmlChar *extra)
-{
- if (ctxt != NULL)
- ctxt->nbErrors++;
- __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
- error, XML_ERR_ERROR, NULL, 0,
- (const char *) extra, NULL, NULL, 0, 0,
- msg, (const char *) extra);
-}
-
-#if 0
-/**
- * xmlXIncludeWarn:
- * @ctxt: the XInclude context
- * @node: the context node
- * @msg: the error message
- * @extra: extra information
- *
- * Emit an XInclude warning.
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlXIncludeWarn(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node, int error,
- const char *msg, const xmlChar *extra)
-{
- __xmlRaiseError(NULL, NULL, NULL, ctxt, node, XML_FROM_XINCLUDE,
- error, XML_ERR_WARNING, NULL, 0,
- (const char *) extra, NULL, NULL, 0, 0,
- msg, (const char *) extra);
-}
-#endif
-
-/**
- * xmlXIncludeGetProp:
- * @ctxt: the XInclude context
- * @cur: the node
- * @name: the attribute name
- *
- * Get an XInclude attribute
- *
- * Returns the value (to be freed) or NULL if not found
- */
-static xmlChar *
-xmlXIncludeGetProp(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur,
- const xmlChar *name) {
- xmlChar *ret;
-
- ret = xmlGetNsProp(cur, XINCLUDE_NS, name);
- if (ret != NULL)
- return(ret);
- if (ctxt->legacy != 0) {
- ret = xmlGetNsProp(cur, XINCLUDE_OLD_NS, name);
- if (ret != NULL)
- return(ret);
- }
- ret = xmlGetProp(cur, name);
- return(ret);
-}
-/**
- * xmlXIncludeFreeRef:
- * @ref: the XInclude reference
- *
- * Free an XInclude reference
- */
-static void
-xmlXIncludeFreeRef(xmlXIncludeRefPtr ref) {
- if (ref == NULL)
- return;
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "Freeing ref\n");
-#endif
- if (ref->doc != NULL) {
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "Freeing doc %s\n", ref->URI);
-#endif
- xmlFreeDoc(ref->doc);
- }
- if (ref->URI != NULL)
- xmlFree(ref->URI);
- if (ref->fragment != NULL)
- xmlFree(ref->fragment);
- if (ref->xptr != NULL)
- xmlXPathFreeObject(ref->xptr);
- xmlFree(ref);
-}
-
-/**
- * xmlXIncludeNewRef:
- * @ctxt: the XInclude context
- * @URI: the resource URI
- *
- * Creates a new reference within an XInclude context
- *
- * Returns the new set
- */
-static xmlXIncludeRefPtr
-xmlXIncludeNewRef(xmlXIncludeCtxtPtr ctxt, const xmlChar *URI,
- xmlNodePtr ref) {
- xmlXIncludeRefPtr ret;
-
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "New ref %s\n", URI);
-#endif
- ret = (xmlXIncludeRefPtr) xmlMalloc(sizeof(xmlXIncludeRef));
- if (ret == NULL) {
- xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlXIncludeRef));
- if (URI == NULL)
- ret->URI = NULL;
- else
- ret->URI = xmlStrdup(URI);
- ret->fragment = NULL;
- ret->ref = ref;
- ret->doc = NULL;
- ret->count = 0;
- ret->xml = 0;
- ret->inc = NULL;
- if (ctxt->incMax == 0) {
- ctxt->incMax = 4;
- ctxt->incTab = (xmlXIncludeRefPtr *) xmlMalloc(ctxt->incMax *
- sizeof(ctxt->incTab[0]));
- if (ctxt->incTab == NULL) {
- xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
- xmlXIncludeFreeRef(ret);
- return(NULL);
- }
- }
- if (ctxt->incNr >= ctxt->incMax) {
- ctxt->incMax *= 2;
- ctxt->incTab = (xmlXIncludeRefPtr *) xmlRealloc(ctxt->incTab,
- ctxt->incMax * sizeof(ctxt->incTab[0]));
- if (ctxt->incTab == NULL) {
- xmlXIncludeErrMemory(ctxt, ref, "growing XInclude context");
- xmlXIncludeFreeRef(ret);
- return(NULL);
- }
- }
- ctxt->incTab[ctxt->incNr++] = ret;
- return(ret);
-}
-
-/**
- * xmlXIncludeNewContext:
- * @doc: an XML Document
- *
- * Creates a new XInclude context
- *
- * Returns the new set
- */
-xmlXIncludeCtxtPtr
-xmlXIncludeNewContext(xmlDocPtr doc) {
- xmlXIncludeCtxtPtr ret;
-
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "New context\n");
-#endif
- if (doc == NULL)
- return(NULL);
- ret = (xmlXIncludeCtxtPtr) xmlMalloc(sizeof(xmlXIncludeCtxt));
- if (ret == NULL) {
- xmlXIncludeErrMemory(NULL, (xmlNodePtr) doc,
- "creating XInclude context");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlXIncludeCtxt));
- ret->doc = doc;
- ret->incNr = 0;
- ret->incBase = 0;
- ret->incMax = 0;
- ret->incTab = NULL;
- ret->nbErrors = 0;
- return(ret);
-}
-
-/**
- * xmlXIncludeURLPush:
- * @ctxt: the parser context
- * @value: the url
- *
- * Pushes a new url on top of the url stack
- *
- * Returns -1 in case of error, the index in the stack otherwise
- */
-static int
-xmlXIncludeURLPush(xmlXIncludeCtxtPtr ctxt,
- const xmlChar *value)
-{
- if (ctxt->urlNr > XINCLUDE_MAX_DEPTH) {
- xmlXIncludeErr(ctxt, NULL, XML_XINCLUDE_RECURSION,
- "detected a recursion in %s\n", value);
- return(-1);
- }
- if (ctxt->urlTab == NULL) {
- ctxt->urlMax = 4;
- ctxt->urlNr = 0;
- ctxt->urlTab = (xmlChar * *) xmlMalloc(
- ctxt->urlMax * sizeof(ctxt->urlTab[0]));
- if (ctxt->urlTab == NULL) {
- xmlXIncludeErrMemory(ctxt, NULL, "adding URL");
- return (-1);
- }
- }
- if (ctxt->urlNr >= ctxt->urlMax) {
- ctxt->urlMax *= 2;
- ctxt->urlTab =
- (xmlChar * *) xmlRealloc(ctxt->urlTab,
- ctxt->urlMax *
- sizeof(ctxt->urlTab[0]));
- if (ctxt->urlTab == NULL) {
- xmlXIncludeErrMemory(ctxt, NULL, "adding URL");
- return (-1);
- }
- }
- ctxt->url = ctxt->urlTab[ctxt->urlNr] = xmlStrdup(value);
- return (ctxt->urlNr++);
-}
-
-/**
- * xmlXIncludeURLPop:
- * @ctxt: the parser context
- *
- * Pops the top URL from the URL stack
- */
-static void
-xmlXIncludeURLPop(xmlXIncludeCtxtPtr ctxt)
-{
- xmlChar * ret;
-
- if (ctxt->urlNr <= 0)
- return;
- ctxt->urlNr--;
- if (ctxt->urlNr > 0)
- ctxt->url = ctxt->urlTab[ctxt->urlNr - 1];
- else
- ctxt->url = NULL;
- ret = ctxt->urlTab[ctxt->urlNr];
- ctxt->urlTab[ctxt->urlNr] = NULL;
- if (ret != NULL)
- xmlFree(ret);
-}
-
-/**
- * xmlXIncludeFreeContext:
- * @ctxt: the XInclude context
- *
- * Free an XInclude context
- */
-void
-xmlXIncludeFreeContext(xmlXIncludeCtxtPtr ctxt) {
- int i;
-
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "Freeing context\n");
-#endif
- if (ctxt == NULL)
- return;
- while (ctxt->urlNr > 0)
- xmlXIncludeURLPop(ctxt);
- if (ctxt->urlTab != NULL)
- xmlFree(ctxt->urlTab);
- for (i = 0;i < ctxt->incNr;i++) {
- if (ctxt->incTab[i] != NULL)
- xmlXIncludeFreeRef(ctxt->incTab[i]);
- }
- if (ctxt->txturlTab != NULL) {
- for (i = 0;i < ctxt->txtNr;i++) {
- if (ctxt->txturlTab[i] != NULL)
- xmlFree(ctxt->txturlTab[i]);
- }
- }
- if (ctxt->incTab != NULL)
- xmlFree(ctxt->incTab);
- if (ctxt->txtTab != NULL)
- xmlFree(ctxt->txtTab);
- if (ctxt->txturlTab != NULL)
- xmlFree(ctxt->txturlTab);
- if (ctxt->base != NULL) {
- xmlFree(ctxt->base);
- }
- xmlFree(ctxt);
-}
-
-/**
- * xmlXIncludeParseFile:
- * @ctxt: the XInclude context
- * @URL: the URL or file path
- *
- * parse a document for XInclude
- */
-static xmlDocPtr
-xmlXIncludeParseFile(xmlXIncludeCtxtPtr ctxt, const char *URL) {
- xmlDocPtr ret;
- xmlParserCtxtPtr pctxt;
- xmlParserInputPtr inputStream;
-
- xmlInitParser();
-
- pctxt = xmlNewParserCtxt();
- if (pctxt == NULL) {
- xmlXIncludeErrMemory(ctxt, NULL, "cannot allocate parser context");
- return(NULL);
- }
-
- /*
- * pass in the application data to the parser context.
- */
- pctxt->_private = ctxt->_private;
-
- /*
- * try to ensure that new documents included are actually
- * built with the same dictionary as the including document.
- */
- if ((ctxt->doc != NULL) && (ctxt->doc->dict != NULL)) {
- if (pctxt->dict != NULL)
- xmlDictFree(pctxt->dict);
- pctxt->dict = ctxt->doc->dict;
- xmlDictReference(pctxt->dict);
- }
-
- xmlCtxtUseOptions(pctxt, ctxt->parseFlags | XML_PARSE_DTDLOAD);
-
- inputStream = xmlLoadExternalEntity(URL, NULL, pctxt);
- if (inputStream == NULL) {
- xmlFreeParserCtxt(pctxt);
- return(NULL);
- }
-
- inputPush(pctxt, inputStream);
-
- if (pctxt->directory == NULL)
- pctxt->directory = xmlParserGetDirectory(URL);
-
- pctxt->loadsubset |= XML_DETECT_IDS;
-
- xmlParseDocument(pctxt);
-
- if (pctxt->wellFormed) {
- ret = pctxt->myDoc;
- }
- else {
- ret = NULL;
- if (pctxt->myDoc != NULL)
- xmlFreeDoc(pctxt->myDoc);
- pctxt->myDoc = NULL;
- }
- xmlFreeParserCtxt(pctxt);
-
- return(ret);
-}
-
-/**
- * xmlXIncludeAddNode:
- * @ctxt: the XInclude context
- * @cur: the new node
- *
- * Add a new node to process to an XInclude context
- */
-static int
-xmlXIncludeAddNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr cur) {
- xmlXIncludeRefPtr ref;
- xmlURIPtr uri;
- xmlChar *URL;
- xmlChar *fragment = NULL;
- xmlChar *href;
- xmlChar *parse;
- xmlChar *base;
- xmlChar *URI;
- int xml = 1, i; /* default Issue 64 */
- int local = 0;
-
-
- if (ctxt == NULL)
- return(-1);
- if (cur == NULL)
- return(-1);
-
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "Add node\n");
-#endif
- /*
- * read the attributes
- */
- href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF);
- if (href == NULL) {
- href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */
- if (href == NULL)
- return(-1);
- }
- if ((href[0] == '#') || (href[0] == 0))
- local = 1;
- parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE);
- if (parse != NULL) {
- if (xmlStrEqual(parse, XINCLUDE_PARSE_XML))
- xml = 1;
- else if (xmlStrEqual(parse, XINCLUDE_PARSE_TEXT))
- xml = 0;
- else {
- xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_PARSE_VALUE,
- "invalid value %s for 'parse'\n", parse);
- if (href != NULL)
- xmlFree(href);
- if (parse != NULL)
- xmlFree(parse);
- return(-1);
- }
- }
-
- /*
- * compute the URI
- */
- base = xmlNodeGetBase(ctxt->doc, cur);
- if (base == NULL) {
- URI = xmlBuildURI(href, ctxt->doc->URL);
- } else {
- URI = xmlBuildURI(href, base);
- }
- if (URI == NULL) {
- xmlChar *escbase;
- xmlChar *eschref;
- /*
- * Some escaping may be needed
- */
- escbase = xmlURIEscape(base);
- eschref = xmlURIEscape(href);
- URI = xmlBuildURI(eschref, escbase);
- if (escbase != NULL)
- xmlFree(escbase);
- if (eschref != NULL)
- xmlFree(eschref);
- }
- if (parse != NULL)
- xmlFree(parse);
- if (href != NULL)
- xmlFree(href);
- if (base != NULL)
- xmlFree(base);
- if (URI == NULL) {
- xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
- "failed build URL\n", NULL);
- return(-1);
- }
- fragment = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE_XPOINTER);
-
- /*
- * Check the URL and remove any fragment identifier
- */
- uri = xmlParseURI((const char *)URI);
- if (uri == NULL) {
- xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
- "invalid value URI %s\n", URI);
- if (fragment != NULL)
- xmlFree(fragment);
- xmlFree(URI);
- return(-1);
- }
-
- if (uri->fragment != NULL) {
- if (ctxt->legacy != 0) {
- if (fragment == NULL) {
- fragment = (xmlChar *) uri->fragment;
- } else {
- xmlFree(uri->fragment);
- }
- } else {
- xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_FRAGMENT_ID,
- "Invalid fragment identifier in URI %s use the xpointer attribute\n",
- URI);
- if (fragment != NULL)
- xmlFree(fragment);
- xmlFreeURI(uri);
- xmlFree(URI);
- return(-1);
- }
- uri->fragment = NULL;
- }
- URL = xmlSaveUri(uri);
- xmlFreeURI(uri);
- xmlFree(URI);
- if (URL == NULL) {
- xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_HREF_URI,
- "invalid value URI %s\n", URI);
- if (fragment != NULL)
- xmlFree(fragment);
- return(-1);
- }
-
- /*
- * If local and xml then we need a fragment
- */
- if ((local == 1) && (xml == 1) &&
- ((fragment == NULL) || (fragment[0] == 0))) {
- xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_RECURSION,
- "detected a local recursion with no xpointer in %s\n",
- URL);
- if (fragment != NULL)
- xmlFree(fragment);
- return(-1);
- }
-
- /*
- * Check the URL against the stack for recursions
- */
- if ((!local) && (xml == 1)) {
- for (i = 0;i < ctxt->urlNr;i++) {
- if (xmlStrEqual(URL, ctxt->urlTab[i])) {
- xmlXIncludeErr(ctxt, cur, XML_XINCLUDE_RECURSION,
- "detected a recursion in %s\n", URL);
- return(-1);
- }
- }
- }
-
- ref = xmlXIncludeNewRef(ctxt, URL, cur);
- if (ref == NULL) {
- return(-1);
- }
- ref->fragment = fragment;
- ref->doc = NULL;
- ref->xml = xml;
- ref->count = 1;
- xmlFree(URL);
- return(0);
-}
-
-/**
- * xmlXIncludeRecurseDoc:
- * @ctxt: the XInclude context
- * @doc: the new document
- * @url: the associated URL
- *
- * The XInclude recursive nature is handled at this point.
- */
-static void
-xmlXIncludeRecurseDoc(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
- const xmlURL url ATTRIBUTE_UNUSED) {
- xmlXIncludeCtxtPtr newctxt;
- int i;
-
- /*
- * Avoid recursion in already substitued resources
- for (i = 0;i < ctxt->urlNr;i++) {
- if (xmlStrEqual(doc->URL, ctxt->urlTab[i]))
- return;
- }
- */
-
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "Recursing in doc %s\n", doc->URL);
-#endif
- /*
- * Handle recursion here.
- */
-
- newctxt = xmlXIncludeNewContext(doc);
- if (newctxt != NULL) {
- /*
- * Copy the private user data
- */
- newctxt->_private = ctxt->_private;
- /*
- * Copy the existing document set
- */
- newctxt->incMax = ctxt->incMax;
- newctxt->incNr = ctxt->incNr;
- newctxt->incTab = (xmlXIncludeRefPtr *) xmlMalloc(newctxt->incMax *
- sizeof(newctxt->incTab[0]));
- if (newctxt->incTab == NULL) {
- xmlXIncludeErrMemory(ctxt, (xmlNodePtr) doc, "processing doc");
- xmlFree(newctxt);
- return;
- }
- /*
- * copy the urlTab
- */
- newctxt->urlMax = ctxt->urlMax;
- newctxt->urlNr = ctxt->urlNr;
- newctxt->urlTab = ctxt->urlTab;
-
- /*
- * Inherit the existing base
- */
- newctxt->base = xmlStrdup(ctxt->base);
-
- /*
- * Inherit the documents already in use by other includes
- */
- newctxt->incBase = ctxt->incNr;
- for (i = 0;i < ctxt->incNr;i++) {
- newctxt->incTab[i] = ctxt->incTab[i];
- newctxt->incTab[i]->count++; /* prevent the recursion from
- freeing it */
- }
- /*
- * The new context should also inherit the Parse Flags
- * (bug 132597)
- */
- newctxt->parseFlags = ctxt->parseFlags;
- xmlXIncludeDoProcess(newctxt, doc, xmlDocGetRootElement(doc));
- for (i = 0;i < ctxt->incNr;i++) {
- newctxt->incTab[i]->count--;
- newctxt->incTab[i] = NULL;
- }
-
- /* urlTab may have been reallocated */
- ctxt->urlTab = newctxt->urlTab;
- ctxt->urlMax = newctxt->urlMax;
-
- newctxt->urlMax = 0;
- newctxt->urlNr = 0;
- newctxt->urlTab = NULL;
-
- xmlXIncludeFreeContext(newctxt);
- }
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "Done recursing in doc %s\n", url);
-#endif
-}
-
-/**
- * xmlXIncludeAddTxt:
- * @ctxt: the XInclude context
- * @txt: the new text node
- * @url: the associated URL
- *
- * Add a new txtument to the list
- */
-static void
-xmlXIncludeAddTxt(xmlXIncludeCtxtPtr ctxt, xmlNodePtr txt, const xmlURL url) {
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "Adding text %s\n", url);
-#endif
- if (ctxt->txtMax == 0) {
- ctxt->txtMax = 4;
- ctxt->txtTab = (xmlNodePtr *) xmlMalloc(ctxt->txtMax *
- sizeof(ctxt->txtTab[0]));
- if (ctxt->txtTab == NULL) {
- xmlXIncludeErrMemory(ctxt, NULL, "processing text");
- return;
- }
- ctxt->txturlTab = (xmlURL *) xmlMalloc(ctxt->txtMax *
- sizeof(ctxt->txturlTab[0]));
- if (ctxt->txturlTab == NULL) {
- xmlXIncludeErrMemory(ctxt, NULL, "processing text");
- return;
- }
- }
- if (ctxt->txtNr >= ctxt->txtMax) {
- ctxt->txtMax *= 2;
- ctxt->txtTab = (xmlNodePtr *) xmlRealloc(ctxt->txtTab,
- ctxt->txtMax * sizeof(ctxt->txtTab[0]));
- if (ctxt->txtTab == NULL) {
- xmlXIncludeErrMemory(ctxt, NULL, "processing text");
- return;
- }
- ctxt->txturlTab = (xmlURL *) xmlRealloc(ctxt->txturlTab,
- ctxt->txtMax * sizeof(ctxt->txturlTab[0]));
- if (ctxt->txturlTab == NULL) {
- xmlXIncludeErrMemory(ctxt, NULL, "processing text");
- return;
- }
- }
- ctxt->txtTab[ctxt->txtNr] = txt;
- ctxt->txturlTab[ctxt->txtNr] = xmlStrdup(url);
- ctxt->txtNr++;
-}
-
-/************************************************************************
- * *
- * Node copy with specific semantic *
- * *
- ************************************************************************/
-
-static xmlNodePtr
-xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
- xmlDocPtr source, xmlNodePtr elem);
-
-/**
- * xmlXIncludeCopyNode:
- * @ctxt: the XInclude context
- * @target: the document target
- * @source: the document source
- * @elem: the element
- *
- * Make a copy of the node while preserving the XInclude semantic
- * of the Infoset copy
- */
-static xmlNodePtr
-xmlXIncludeCopyNode(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
- xmlDocPtr source, xmlNodePtr elem) {
- xmlNodePtr result = NULL;
-
- if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
- (elem == NULL))
- return(NULL);
- if (elem->type == XML_DTD_NODE)
- return(NULL);
- if (elem->type == XML_DOCUMENT_NODE)
- result = xmlXIncludeCopyNodeList(ctxt, target, source, elem->children);
- else
- result = xmlDocCopyNode(elem, target, 1);
- return(result);
-}
-
-/**
- * xmlXIncludeCopyNodeList:
- * @ctxt: the XInclude context
- * @target: the document target
- * @source: the document source
- * @elem: the element list
- *
- * Make a copy of the node list while preserving the XInclude semantic
- * of the Infoset copy
- */
-static xmlNodePtr
-xmlXIncludeCopyNodeList(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
- xmlDocPtr source, xmlNodePtr elem) {
- xmlNodePtr cur, res, result = NULL, last = NULL;
-
- if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
- (elem == NULL))
- return(NULL);
- cur = elem;
- while (cur != NULL) {
- res = xmlXIncludeCopyNode(ctxt, target, source, cur);
- if (res != NULL) {
- if (result == NULL) {
- result = last = res;
- } else {
- last->next = res;
- res->prev = last;
- last = res;
- }
- }
- cur = cur->next;
- }
- return(result);
-}
-
-/**
- * xmlXIncludeGetNthChild:
- * @cur: the node
- * @no: the child number
- *
- * Returns the @n'th element child of @cur or NULL
- */
-static xmlNodePtr
-xmlXIncludeGetNthChild(xmlNodePtr cur, int no) {
- int i;
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return(NULL);
- cur = cur->children;
- for (i = 0;i <= no;cur = cur->next) {
- if (cur == NULL)
- return(cur);
- if ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- i++;
- if (i == no)
- break;
- }
- }
- return(cur);
-}
-
-xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level); /* in xpointer.c */
-/**
- * xmlXIncludeCopyRange:
- * @ctxt: the XInclude context
- * @target: the document target
- * @source: the document source
- * @obj: the XPointer result from the evaluation.
- *
- * Build a node list tree copy of the XPointer result.
- *
- * Returns an xmlNodePtr list or NULL.
- * The caller has to free the node tree.
- */
-static xmlNodePtr
-xmlXIncludeCopyRange(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
- xmlDocPtr source, xmlXPathObjectPtr range) {
- /* pointers to generated nodes */
- xmlNodePtr list = NULL, last = NULL, listParent = NULL;
- xmlNodePtr tmp, tmp2;
- /* pointers to traversal nodes */
- xmlNodePtr start, cur, end;
- int index1, index2;
- int level = 0, lastLevel = 0, endLevel = 0, endFlag = 0;
-
- if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
- (range == NULL))
- return(NULL);
- if (range->type != XPATH_RANGE)
- return(NULL);
- start = (xmlNodePtr) range->user;
-
- if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
- return(NULL);
- end = range->user2;
- if (end == NULL)
- return(xmlDocCopyNode(start, target, 1));
- if (end->type == XML_NAMESPACE_DECL)
- return(NULL);
-
- cur = start;
- index1 = range->index;
- index2 = range->index2;
- /*
- * level is depth of the current node under consideration
- * list is the pointer to the root of the output tree
- * listParent is a pointer to the parent of output tree (within
- the included file) in case we need to add another level
- * last is a pointer to the last node added to the output tree
- * lastLevel is the depth of last (relative to the root)
- */
- while (cur != NULL) {
- /*
- * Check if our output tree needs a parent
- */
- if (level < 0) {
- while (level < 0) {
- /* copy must include namespaces and properties */
- tmp2 = xmlDocCopyNode(listParent, target, 2);
- xmlAddChild(tmp2, list);
- list = tmp2;
- listParent = listParent->parent;
- level++;
- }
- last = list;
- lastLevel = 0;
- }
- /*
- * Check whether we need to change our insertion point
- */
- while (level < lastLevel) {
- last = last->parent;
- lastLevel --;
- }
- if (cur == end) { /* Are we at the end of the range? */
- if (cur->type == XML_TEXT_NODE) {
- const xmlChar *content = cur->content;
- int len;
-
- if (content == NULL) {
- tmp = xmlNewTextLen(NULL, 0);
- } else {
- len = index2;
- if ((cur == start) && (index1 > 1)) {
- content += (index1 - 1);
- len -= (index1 - 1);
- } else {
- len = index2;
- }
- tmp = xmlNewTextLen(content, len);
- }
- /* single sub text node selection */
- if (list == NULL)
- return(tmp);
- /* prune and return full set */
- if (level == lastLevel)
- xmlAddNextSibling(last, tmp);
- else
- xmlAddChild(last, tmp);
- return(list);
- } else { /* ending node not a text node */
- endLevel = level; /* remember the level of the end node */
- endFlag = 1;
- /* last node - need to take care of properties + namespaces */
- tmp = xmlDocCopyNode(cur, target, 2);
- if (list == NULL) {
- list = tmp;
- listParent = cur->parent;
- } else {
- if (level == lastLevel)
- xmlAddNextSibling(last, tmp);
- else {
- xmlAddChild(last, tmp);
- lastLevel = level;
- }
- }
- last = tmp;
-
- if (index2 > 1) {
- end = xmlXIncludeGetNthChild(cur, index2 - 1);
- index2 = 0;
- }
- if ((cur == start) && (index1 > 1)) {
- cur = xmlXIncludeGetNthChild(cur, index1 - 1);
- index1 = 0;
- } else {
- cur = cur->children;
- }
- level++; /* increment level to show change */
- /*
- * Now gather the remaining nodes from cur to end
- */
- continue; /* while */
- }
- } else if (cur == start) { /* Not at the end, are we at start? */
- if ((cur->type == XML_TEXT_NODE) ||
- (cur->type == XML_CDATA_SECTION_NODE)) {
- const xmlChar *content = cur->content;
-
- if (content == NULL) {
- tmp = xmlNewTextLen(NULL, 0);
- } else {
- if (index1 > 1) {
- content += (index1 - 1);
- index1 = 0;
- }
- tmp = xmlNewText(content);
- }
- last = list = tmp;
- listParent = cur->parent;
- } else { /* Not text node */
- /*
- * start of the range - need to take care of
- * properties and namespaces
- */
- tmp = xmlDocCopyNode(cur, target, 2);
- list = last = tmp;
- listParent = cur->parent;
- if (index1 > 1) { /* Do we need to position? */
- cur = xmlXIncludeGetNthChild(cur, index1 - 1);
- level = lastLevel = 1;
- index1 = 0;
- /*
- * Now gather the remaining nodes from cur to end
- */
- continue; /* while */
- }
- }
- } else {
- tmp = NULL;
- switch (cur->type) {
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_NODE:
- /* Do not copy DTD informations */
- break;
- case XML_ENTITY_DECL:
- /* handle crossing entities -> stack needed */
- break;
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- /* don't consider it part of the tree content */
- break;
- case XML_ATTRIBUTE_NODE:
- /* Humm, should not happen ! */
- break;
- default:
- /*
- * Middle of the range - need to take care of
- * properties and namespaces
- */
- tmp = xmlDocCopyNode(cur, target, 2);
- break;
- }
- if (tmp != NULL) {
- if (level == lastLevel)
- xmlAddNextSibling(last, tmp);
- else {
- xmlAddChild(last, tmp);
- lastLevel = level;
- }
- last = tmp;
- }
- }
- /*
- * Skip to next node in document order
- */
- cur = xmlXPtrAdvanceNode(cur, &level);
- if (endFlag && (level >= endLevel))
- break;
- }
- return(list);
-}
-
-/**
- * xmlXIncludeBuildNodeList:
- * @ctxt: the XInclude context
- * @target: the document target
- * @source: the document source
- * @obj: the XPointer result from the evaluation.
- *
- * Build a node list tree copy of the XPointer result.
- * This will drop Attributes and Namespace declarations.
- *
- * Returns an xmlNodePtr list or NULL.
- * the caller has to free the node tree.
- */
-static xmlNodePtr
-xmlXIncludeCopyXPointer(xmlXIncludeCtxtPtr ctxt, xmlDocPtr target,
- xmlDocPtr source, xmlXPathObjectPtr obj) {
- xmlNodePtr list = NULL, last = NULL;
- int i;
-
- if (source == NULL)
- source = ctxt->doc;
- if ((ctxt == NULL) || (target == NULL) || (source == NULL) ||
- (obj == NULL))
- return(NULL);
- switch (obj->type) {
- case XPATH_NODESET: {
- xmlNodeSetPtr set = obj->nodesetval;
- if (set == NULL)
- return(NULL);
- for (i = 0;i < set->nodeNr;i++) {
- if (set->nodeTab[i] == NULL)
- continue;
- switch (set->nodeTab[i]->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ELEMENT_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_XINCLUDE_END:
- break;
- case XML_XINCLUDE_START: {
- xmlNodePtr tmp, cur = set->nodeTab[i];
-
- cur = cur->next;
- while (cur != NULL) {
- switch(cur->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ELEMENT_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- tmp = xmlXIncludeCopyNode(ctxt, target,
- source, cur);
- if (last == NULL) {
- list = last = tmp;
- } else {
- xmlAddNextSibling(last, tmp);
- last = tmp;
- }
- cur = cur->next;
- continue;
- default:
- break;
- }
- break;
- }
- continue;
- }
- case XML_ATTRIBUTE_NODE:
- case XML_NAMESPACE_DECL:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- continue; /* for */
- }
- if (last == NULL)
- list = last = xmlXIncludeCopyNode(ctxt, target, source,
- set->nodeTab[i]);
- else {
- xmlAddNextSibling(last,
- xmlXIncludeCopyNode(ctxt, target, source,
- set->nodeTab[i]));
- if (last->next != NULL)
- last = last->next;
- }
- }
- break;
- }
-#ifdef LIBXML_XPTR_ENABLED
- case XPATH_LOCATIONSET: {
- xmlLocationSetPtr set = (xmlLocationSetPtr) obj->user;
- if (set == NULL)
- return(NULL);
- for (i = 0;i < set->locNr;i++) {
- if (last == NULL)
- list = last = xmlXIncludeCopyXPointer(ctxt, target, source,
- set->locTab[i]);
- else
- xmlAddNextSibling(last,
- xmlXIncludeCopyXPointer(ctxt, target, source,
- set->locTab[i]));
- if (last != NULL) {
- while (last->next != NULL)
- last = last->next;
- }
- }
- break;
- }
- case XPATH_RANGE:
- return(xmlXIncludeCopyRange(ctxt, target, source, obj));
-#endif
- case XPATH_POINT:
- /* points are ignored in XInclude */
- break;
- default:
- break;
- }
- return(list);
-}
-/************************************************************************
- * *
- * XInclude I/O handling *
- * *
- ************************************************************************/
-
-typedef struct _xmlXIncludeMergeData xmlXIncludeMergeData;
-typedef xmlXIncludeMergeData *xmlXIncludeMergeDataPtr;
-struct _xmlXIncludeMergeData {
- xmlDocPtr doc;
- xmlXIncludeCtxtPtr ctxt;
-};
-
-/**
- * xmlXIncludeMergeOneEntity:
- * @ent: the entity
- * @doc: the including doc
- * @nr: the entity name
- *
- * Inplements the merge of one entity
- */
-static void
-xmlXIncludeMergeEntity(xmlEntityPtr ent, xmlXIncludeMergeDataPtr data,
- xmlChar *name ATTRIBUTE_UNUSED) {
- xmlEntityPtr ret, prev;
- xmlDocPtr doc;
- xmlXIncludeCtxtPtr ctxt;
-
- if ((ent == NULL) || (data == NULL))
- return;
- ctxt = data->ctxt;
- doc = data->doc;
- if ((ctxt == NULL) || (doc == NULL))
- return;
- switch (ent->etype) {
- case XML_INTERNAL_PARAMETER_ENTITY:
- case XML_EXTERNAL_PARAMETER_ENTITY:
- case XML_INTERNAL_PREDEFINED_ENTITY:
- return;
- case XML_INTERNAL_GENERAL_ENTITY:
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- break;
- }
- ret = xmlAddDocEntity(doc, ent->name, ent->etype, ent->ExternalID,
- ent->SystemID, ent->content);
- if (ret != NULL) {
- if (ent->URI != NULL)
- ret->URI = xmlStrdup(ent->URI);
- } else {
- prev = xmlGetDocEntity(doc, ent->name);
- if (prev != NULL) {
- if (ent->etype != prev->etype)
- goto error;
-
- if ((ent->SystemID != NULL) && (prev->SystemID != NULL)) {
- if (!xmlStrEqual(ent->SystemID, prev->SystemID))
- goto error;
- } else if ((ent->ExternalID != NULL) &&
- (prev->ExternalID != NULL)) {
- if (!xmlStrEqual(ent->ExternalID, prev->ExternalID))
- goto error;
- } else if ((ent->content != NULL) && (prev->content != NULL)) {
- if (!xmlStrEqual(ent->content, prev->content))
- goto error;
- } else {
- goto error;
- }
-
- }
- }
- return;
-error:
- switch (ent->etype) {
- case XML_INTERNAL_PARAMETER_ENTITY:
- case XML_EXTERNAL_PARAMETER_ENTITY:
- case XML_INTERNAL_PREDEFINED_ENTITY:
- case XML_INTERNAL_GENERAL_ENTITY:
- case XML_EXTERNAL_GENERAL_PARSED_ENTITY:
- return;
- case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY:
- break;
- }
- xmlXIncludeErr(ctxt, (xmlNodePtr) ent, XML_XINCLUDE_ENTITY_DEF_MISMATCH,
- "mismatch in redefinition of entity %s\n",
- ent->name);
-}
-
-/**
- * xmlXIncludeMergeEntities:
- * @ctxt: an XInclude context
- * @doc: the including doc
- * @from: the included doc
- *
- * Inplements the entity merge
- *
- * Returns 0 if merge succeeded, -1 if some processing failed
- */
-static int
-xmlXIncludeMergeEntities(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc,
- xmlDocPtr from) {
- xmlNodePtr cur;
- xmlDtdPtr target, source;
-
- if (ctxt == NULL)
- return(-1);
-
- if ((from == NULL) || (from->intSubset == NULL))
- return(0);
-
- target = doc->intSubset;
- if (target == NULL) {
- cur = xmlDocGetRootElement(doc);
- if (cur == NULL)
- return(-1);
- target = xmlCreateIntSubset(doc, cur->name, NULL, NULL);
- if (target == NULL)
- return(-1);
- }
-
- source = from->intSubset;
- if ((source != NULL) && (source->entities != NULL)) {
- xmlXIncludeMergeData data;
-
- data.ctxt = ctxt;
- data.doc = doc;
-
- xmlHashScan((xmlHashTablePtr) source->entities,
- (xmlHashScanner) xmlXIncludeMergeEntity, &data);
- }
- source = from->extSubset;
- if ((source != NULL) && (source->entities != NULL)) {
- xmlXIncludeMergeData data;
-
- data.ctxt = ctxt;
- data.doc = doc;
-
- /*
- * don't duplicate existing stuff when external subsets are the same
- */
- if ((!xmlStrEqual(target->ExternalID, source->ExternalID)) &&
- (!xmlStrEqual(target->SystemID, source->SystemID))) {
- xmlHashScan((xmlHashTablePtr) source->entities,
- (xmlHashScanner) xmlXIncludeMergeEntity, &data);
- }
- }
- return(0);
-}
-
-/**
- * xmlXIncludeLoadDoc:
- * @ctxt: the XInclude context
- * @url: the associated URL
- * @nr: the xinclude node number
- *
- * Load the document, and store the result in the XInclude context
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlXIncludeLoadDoc(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
- xmlDocPtr doc;
- xmlURIPtr uri;
- xmlChar *URL;
- xmlChar *fragment = NULL;
- int i = 0;
-#ifdef LIBXML_XPTR_ENABLED
- int saveFlags;
-#endif
-
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "Loading doc %s:%d\n", url, nr);
-#endif
- /*
- * Check the URL and remove any fragment identifier
- */
- uri = xmlParseURI((const char *)url);
- if (uri == NULL) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_HREF_URI,
- "invalid value URI %s\n", url);
- return(-1);
- }
- if (uri->fragment != NULL) {
- fragment = (xmlChar *) uri->fragment;
- uri->fragment = NULL;
- }
- if ((ctxt->incTab != NULL) && (ctxt->incTab[nr] != NULL) &&
- (ctxt->incTab[nr]->fragment != NULL)) {
- if (fragment != NULL) xmlFree(fragment);
- fragment = xmlStrdup(ctxt->incTab[nr]->fragment);
- }
- URL = xmlSaveUri(uri);
- xmlFreeURI(uri);
- if (URL == NULL) {
- if (ctxt->incTab != NULL)
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_HREF_URI,
- "invalid value URI %s\n", url);
- else
- xmlXIncludeErr(ctxt, NULL,
- XML_XINCLUDE_HREF_URI,
- "invalid value URI %s\n", url);
- if (fragment != NULL)
- xmlFree(fragment);
- return(-1);
- }
-
- /*
- * Handling of references to the local document are done
- * directly through ctxt->doc.
- */
- if ((URL[0] == 0) || (URL[0] == '#') ||
- ((ctxt->doc != NULL) && (xmlStrEqual(URL, ctxt->doc->URL)))) {
- doc = NULL;
- goto loaded;
- }
-
- /*
- * Prevent reloading twice the document.
- */
- for (i = 0; i < ctxt->incNr; i++) {
- if ((xmlStrEqual(URL, ctxt->incTab[i]->URI)) &&
- (ctxt->incTab[i]->doc != NULL)) {
- doc = ctxt->incTab[i]->doc;
-#ifdef DEBUG_XINCLUDE
- printf("Already loaded %s\n", URL);
-#endif
- goto loaded;
- }
- }
-
- /*
- * Load it.
- */
-#ifdef DEBUG_XINCLUDE
- printf("loading %s\n", URL);
-#endif
-#ifdef LIBXML_XPTR_ENABLED
- /*
- * If this is an XPointer evaluation, we want to assure that
- * all entities have been resolved prior to processing the
- * referenced document
- */
- saveFlags = ctxt->parseFlags;
- if (fragment != NULL) { /* if this is an XPointer eval */
- ctxt->parseFlags |= XML_PARSE_NOENT;
- }
-#endif
-
- doc = xmlXIncludeParseFile(ctxt, (const char *)URL);
-#ifdef LIBXML_XPTR_ENABLED
- ctxt->parseFlags = saveFlags;
-#endif
- if (doc == NULL) {
- xmlFree(URL);
- if (fragment != NULL)
- xmlFree(fragment);
- return(-1);
- }
- ctxt->incTab[nr]->doc = doc;
- /*
- * It's possible that the requested URL has been mapped to a
- * completely different location (e.g. through a catalog entry).
- * To check for this, we compare the URL with that of the doc
- * and change it if they disagree (bug 146988).
- */
- if (!xmlStrEqual(URL, doc->URL)) {
- xmlFree(URL);
- URL = xmlStrdup(doc->URL);
- }
- for (i = nr + 1; i < ctxt->incNr; i++) {
- if (xmlStrEqual(URL, ctxt->incTab[i]->URI)) {
- ctxt->incTab[nr]->count++;
-#ifdef DEBUG_XINCLUDE
- printf("Increasing %s count since reused\n", URL);
-#endif
- break;
- }
- }
-
- /*
- * Make sure we have all entities fixed up
- */
- xmlXIncludeMergeEntities(ctxt, ctxt->doc, doc);
-
- /*
- * We don't need the DTD anymore, free up space
- if (doc->intSubset != NULL) {
- xmlUnlinkNode((xmlNodePtr) doc->intSubset);
- xmlFreeNode((xmlNodePtr) doc->intSubset);
- doc->intSubset = NULL;
- }
- if (doc->extSubset != NULL) {
- xmlUnlinkNode((xmlNodePtr) doc->extSubset);
- xmlFreeNode((xmlNodePtr) doc->extSubset);
- doc->extSubset = NULL;
- }
- */
- xmlXIncludeRecurseDoc(ctxt, doc, URL);
-
-loaded:
- if (fragment == NULL) {
- /*
- * Add the top children list as the replacement copy.
- */
- if (doc == NULL)
- {
- /* Hopefully a DTD declaration won't be copied from
- * the same document */
- ctxt->incTab[nr]->inc = xmlCopyNodeList(ctxt->doc->children);
- } else {
- ctxt->incTab[nr]->inc = xmlXIncludeCopyNodeList(ctxt, ctxt->doc,
- doc, doc->children);
- }
- }
-#ifdef LIBXML_XPTR_ENABLED
- else {
- /*
- * Computes the XPointer expression and make a copy used
- * as the replacement copy.
- */
- xmlXPathObjectPtr xptr;
- xmlXPathContextPtr xptrctxt;
- xmlNodeSetPtr set;
-
- if (doc == NULL) {
- xptrctxt = xmlXPtrNewContext(ctxt->doc, ctxt->incTab[nr]->ref,
- NULL);
- } else {
- xptrctxt = xmlXPtrNewContext(doc, NULL, NULL);
- }
- if (xptrctxt == NULL) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_XPTR_FAILED,
- "could not create XPointer context\n", NULL);
- xmlFree(URL);
- xmlFree(fragment);
- return(-1);
- }
- xptr = xmlXPtrEval(fragment, xptrctxt);
- if (xptr == NULL) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_XPTR_FAILED,
- "XPointer evaluation failed: #%s\n",
- fragment);
- xmlXPathFreeContext(xptrctxt);
- xmlFree(URL);
- xmlFree(fragment);
- return(-1);
- }
- switch (xptr->type) {
- case XPATH_UNDEFINED:
- case XPATH_BOOLEAN:
- case XPATH_NUMBER:
- case XPATH_STRING:
- case XPATH_POINT:
- case XPATH_USERS:
- case XPATH_XSLT_TREE:
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_XPTR_RESULT,
- "XPointer is not a range: #%s\n",
- fragment);
- xmlXPathFreeContext(xptrctxt);
- xmlFree(URL);
- xmlFree(fragment);
- return(-1);
- case XPATH_NODESET:
- if ((xptr->nodesetval == NULL) ||
- (xptr->nodesetval->nodeNr <= 0)) {
- xmlXPathFreeContext(xptrctxt);
- xmlFree(URL);
- xmlFree(fragment);
- return(-1);
- }
-
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- break;
- }
- set = xptr->nodesetval;
- if (set != NULL) {
- for (i = 0;i < set->nodeNr;i++) {
- if (set->nodeTab[i] == NULL)
- continue;
- switch (set->nodeTab[i]->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- continue;
-
- case XML_ATTRIBUTE_NODE:
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_XPTR_RESULT,
- "XPointer selects an attribute: #%s\n",
- fragment);
- set->nodeTab[i] = NULL;
- continue;
- case XML_NAMESPACE_DECL:
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_XPTR_RESULT,
- "XPointer selects a namespace: #%s\n",
- fragment);
- set->nodeTab[i] = NULL;
- continue;
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_XPTR_RESULT,
- "XPointer selects unexpected nodes: #%s\n",
- fragment);
- set->nodeTab[i] = NULL;
- set->nodeTab[i] = NULL;
- continue; /* for */
- }
- }
- }
- if (doc == NULL) {
- ctxt->incTab[nr]->xptr = xptr;
- ctxt->incTab[nr]->inc = NULL;
- } else {
- ctxt->incTab[nr]->inc =
- xmlXIncludeCopyXPointer(ctxt, ctxt->doc, doc, xptr);
- xmlXPathFreeObject(xptr);
- }
- xmlXPathFreeContext(xptrctxt);
- xmlFree(fragment);
- }
-#endif
-
- /*
- * Do the xml:base fixup if needed
- */
- if ((doc != NULL) && (URL != NULL) &&
- (!(ctxt->parseFlags & XML_PARSE_NOBASEFIX)) &&
- (!(doc->parseFlags & XML_PARSE_NOBASEFIX))) {
- xmlNodePtr node;
- xmlChar *base;
- xmlChar *curBase;
-
- /*
- * The base is only adjusted if "necessary", i.e. if the xinclude node
- * has a base specified, or the URL is relative
- */
- base = xmlGetNsProp(ctxt->incTab[nr]->ref, BAD_CAST "base",
- XML_XML_NAMESPACE);
- if (base == NULL) {
- /*
- * No xml:base on the xinclude node, so we check whether the
- * URI base is different than (relative to) the context base
- */
- curBase = xmlBuildRelativeURI(URL, ctxt->base);
- if (curBase == NULL) { /* Error return */
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_HREF_URI,
- "trying to build relative URI from %s\n", URL);
- } else {
- /* If the URI doesn't contain a slash, it's not relative */
- if (!xmlStrchr(curBase, (xmlChar) '/'))
- xmlFree(curBase);
- else
- base = curBase;
- }
- }
- if (base != NULL) { /* Adjustment may be needed */
- node = ctxt->incTab[nr]->inc;
- while (node != NULL) {
- /* Only work on element nodes */
- if (node->type == XML_ELEMENT_NODE) {
- curBase = xmlNodeGetBase(node->doc, node);
- /* If no current base, set it */
- if (curBase == NULL) {
- xmlNodeSetBase(node, base);
- } else {
- /*
- * If the current base is the same as the
- * URL of the document, then reset it to be
- * the specified xml:base or the relative URI
- */
- if (xmlStrEqual(curBase, node->doc->URL)) {
- xmlNodeSetBase(node, base);
- } else {
- /*
- * If the element already has an xml:base
- * set, then relativise it if necessary
- */
- xmlChar *xmlBase;
- xmlBase = xmlGetNsProp(node,
- BAD_CAST "base",
- XML_XML_NAMESPACE);
- if (xmlBase != NULL) {
- xmlChar *relBase;
- relBase = xmlBuildURI(xmlBase, base);
- if (relBase == NULL) { /* error */
- xmlXIncludeErr(ctxt,
- ctxt->incTab[nr]->ref,
- XML_XINCLUDE_HREF_URI,
- "trying to rebuild base from %s\n",
- xmlBase);
- } else {
- xmlNodeSetBase(node, relBase);
- xmlFree(relBase);
- }
- xmlFree(xmlBase);
- }
- }
- xmlFree(curBase);
- }
- }
- node = node->next;
- }
- xmlFree(base);
- }
- }
- if ((nr < ctxt->incNr) && (ctxt->incTab[nr]->doc != NULL) &&
- (ctxt->incTab[nr]->count <= 1)) {
-#ifdef DEBUG_XINCLUDE
- printf("freeing %s\n", ctxt->incTab[nr]->doc->URL);
-#endif
- xmlFreeDoc(ctxt->incTab[nr]->doc);
- ctxt->incTab[nr]->doc = NULL;
- }
- xmlFree(URL);
- return(0);
-}
-
-/**
- * xmlXIncludeLoadTxt:
- * @ctxt: the XInclude context
- * @url: the associated URL
- * @nr: the xinclude node number
- *
- * Load the content, and store the result in the XInclude context
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlXIncludeLoadTxt(xmlXIncludeCtxtPtr ctxt, const xmlChar *url, int nr) {
- xmlParserInputBufferPtr buf;
- xmlNodePtr node;
- xmlURIPtr uri;
- xmlChar *URL;
- int i;
- xmlChar *encoding = NULL;
- xmlCharEncoding enc = (xmlCharEncoding) 0;
- xmlParserCtxtPtr pctxt;
- xmlParserInputPtr inputStream;
- int xinclude_multibyte_fallback_used = 0;
-
- /*
- * Check the URL and remove any fragment identifier
- */
- uri = xmlParseURI((const char *)url);
- if (uri == NULL) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI,
- "invalid value URI %s\n", url);
- return(-1);
- }
- if (uri->fragment != NULL) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_TEXT_FRAGMENT,
- "fragment identifier forbidden for text: %s\n",
- (const xmlChar *) uri->fragment);
- xmlFreeURI(uri);
- return(-1);
- }
- URL = xmlSaveUri(uri);
- xmlFreeURI(uri);
- if (URL == NULL) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref, XML_XINCLUDE_HREF_URI,
- "invalid value URI %s\n", url);
- return(-1);
- }
-
- /*
- * Handling of references to the local document are done
- * directly through ctxt->doc.
- */
- if (URL[0] == 0) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_TEXT_DOCUMENT,
- "text serialization of document not available\n", NULL);
- xmlFree(URL);
- return(-1);
- }
-
- /*
- * Prevent reloading twice the document.
- */
- for (i = 0; i < ctxt->txtNr; i++) {
- if (xmlStrEqual(URL, ctxt->txturlTab[i])) {
- node = xmlCopyNode(ctxt->txtTab[i], 1);
- goto loaded;
- }
- }
- /*
- * Try to get the encoding if available
- */
- if ((ctxt->incTab[nr] != NULL) && (ctxt->incTab[nr]->ref != NULL)) {
- encoding = xmlGetProp(ctxt->incTab[nr]->ref, XINCLUDE_PARSE_ENCODING);
- }
- if (encoding != NULL) {
- /*
- * TODO: we should not have to remap to the xmlCharEncoding
- * predefined set, a better interface than
- * xmlParserInputBufferCreateFilename should allow any
- * encoding supported by iconv
- */
- enc = xmlParseCharEncoding((const char *) encoding);
- if (enc == XML_CHAR_ENCODING_ERROR) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_UNKNOWN_ENCODING,
- "encoding %s not supported\n", encoding);
- xmlFree(encoding);
- xmlFree(URL);
- return(-1);
- }
- xmlFree(encoding);
- }
-
- /*
- * Load it.
- */
- pctxt = xmlNewParserCtxt();
- inputStream = xmlLoadExternalEntity((const char*)URL, NULL, pctxt);
- if(inputStream == NULL) {
- xmlFreeParserCtxt(pctxt);
- xmlFree(URL);
- return(-1);
- }
- buf = inputStream->buf;
- if (buf == NULL) {
- xmlFreeInputStream (inputStream);
- xmlFreeParserCtxt(pctxt);
- xmlFree(URL);
- return(-1);
- }
- if (buf->encoder)
- xmlCharEncCloseFunc(buf->encoder);
- buf->encoder = xmlGetCharEncodingHandler(enc);
- node = xmlNewText(NULL);
-
- /*
- * Scan all chars from the resource and add the to the node
- */
-xinclude_multibyte_fallback:
- while (xmlParserInputBufferRead(buf, 128) > 0) {
- int len;
- const xmlChar *content;
-
- content = xmlBufContent(buf->buffer);
- len = xmlBufLength(buf->buffer);
- for (i = 0;i < len;) {
- int cur;
- int l;
-
- cur = xmlStringCurrentChar(NULL, &content[i], &l);
- if (!IS_CHAR(cur)) {
- /* Handle splitted multibyte char at buffer boundary */
- if (((len - i) < 4) && (!xinclude_multibyte_fallback_used)) {
- xinclude_multibyte_fallback_used = 1;
- xmlBufShrink(buf->buffer, i);
- goto xinclude_multibyte_fallback;
- } else {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_INVALID_CHAR,
- "%s contains invalid char\n", URL);
- xmlFreeParserInputBuffer(buf);
- xmlFree(URL);
- return(-1);
- }
- } else {
- xinclude_multibyte_fallback_used = 0;
- xmlNodeAddContentLen(node, &content[i], l);
- }
- i += l;
- }
- xmlBufShrink(buf->buffer, len);
- }
- xmlFreeParserCtxt(pctxt);
- xmlXIncludeAddTxt(ctxt, node, URL);
- xmlFreeInputStream(inputStream);
-
-loaded:
- /*
- * Add the element as the replacement copy.
- */
- ctxt->incTab[nr]->inc = node;
- xmlFree(URL);
- return(0);
-}
-
-/**
- * xmlXIncludeLoadFallback:
- * @ctxt: the XInclude context
- * @fallback: the fallback node
- * @nr: the xinclude node number
- *
- * Load the content of the fallback node, and store the result
- * in the XInclude context
- *
- * Returns 0 in case of success, -1 in case of failure
- */
-static int
-xmlXIncludeLoadFallback(xmlXIncludeCtxtPtr ctxt, xmlNodePtr fallback, int nr) {
- xmlXIncludeCtxtPtr newctxt;
- int ret = 0;
-
- if ((fallback == NULL) || (fallback->type == XML_NAMESPACE_DECL) ||
- (ctxt == NULL))
- return(-1);
- if (fallback->children != NULL) {
- /*
- * It's possible that the fallback also has 'includes'
- * (Bug 129969), so we re-process the fallback just in case
- */
- newctxt = xmlXIncludeNewContext(ctxt->doc);
- if (newctxt == NULL)
- return (-1);
- newctxt->_private = ctxt->_private;
- newctxt->base = xmlStrdup(ctxt->base); /* Inherit the base from the existing context */
- xmlXIncludeSetFlags(newctxt, ctxt->parseFlags);
- ret = xmlXIncludeDoProcess(newctxt, ctxt->doc, fallback->children);
- if (ctxt->nbErrors > 0)
- ret = -1;
- else if (ret > 0)
- ret = 0; /* xmlXIncludeDoProcess can return +ve number */
- xmlXIncludeFreeContext(newctxt);
-
- ctxt->incTab[nr]->inc = xmlDocCopyNodeList(ctxt->doc,
- fallback->children);
- } else {
- ctxt->incTab[nr]->inc = NULL;
- ctxt->incTab[nr]->emptyFb = 1; /* flag empty callback */
- }
- return(ret);
-}
-
-/************************************************************************
- * *
- * XInclude Processing *
- * *
- ************************************************************************/
-
-/**
- * xmlXIncludePreProcessNode:
- * @ctxt: an XInclude context
- * @node: an XInclude node
- *
- * Implement the XInclude preprocessing, currently just adding the element
- * for further processing.
- *
- * Returns the result list or NULL in case of error
- */
-static xmlNodePtr
-xmlXIncludePreProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
- xmlXIncludeAddNode(ctxt, node);
- return(NULL);
-}
-
-/**
- * xmlXIncludeLoadNode:
- * @ctxt: an XInclude context
- * @nr: the node number
- *
- * Find and load the infoset replacement for the given node.
- *
- * Returns 0 if substitution succeeded, -1 if some processing failed
- */
-static int
-xmlXIncludeLoadNode(xmlXIncludeCtxtPtr ctxt, int nr) {
- xmlNodePtr cur;
- xmlChar *href;
- xmlChar *parse;
- xmlChar *base;
- xmlChar *oldBase;
- xmlChar *URI;
- int xml = 1; /* default Issue 64 */
- int ret;
-
- if (ctxt == NULL)
- return(-1);
- if ((nr < 0) || (nr >= ctxt->incNr))
- return(-1);
- cur = ctxt->incTab[nr]->ref;
- if (cur == NULL)
- return(-1);
-
- /*
- * read the attributes
- */
- href = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_HREF);
- if (href == NULL) {
- href = xmlStrdup(BAD_CAST ""); /* @@@@ href is now optional */
- if (href == NULL)
- return(-1);
- }
- parse = xmlXIncludeGetProp(ctxt, cur, XINCLUDE_PARSE);
- if (parse != NULL) {
- if (xmlStrEqual(parse, XINCLUDE_PARSE_XML))
- xml = 1;
- else if (xmlStrEqual(parse, XINCLUDE_PARSE_TEXT))
- xml = 0;
- else {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_PARSE_VALUE,
- "invalid value %s for 'parse'\n", parse);
- if (href != NULL)
- xmlFree(href);
- if (parse != NULL)
- xmlFree(parse);
- return(-1);
- }
- }
-
- /*
- * compute the URI
- */
- base = xmlNodeGetBase(ctxt->doc, cur);
- if (base == NULL) {
- URI = xmlBuildURI(href, ctxt->doc->URL);
- } else {
- URI = xmlBuildURI(href, base);
- }
- if (URI == NULL) {
- xmlChar *escbase;
- xmlChar *eschref;
- /*
- * Some escaping may be needed
- */
- escbase = xmlURIEscape(base);
- eschref = xmlURIEscape(href);
- URI = xmlBuildURI(eschref, escbase);
- if (escbase != NULL)
- xmlFree(escbase);
- if (eschref != NULL)
- xmlFree(eschref);
- }
- if (URI == NULL) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_HREF_URI, "failed build URL\n", NULL);
- if (parse != NULL)
- xmlFree(parse);
- if (href != NULL)
- xmlFree(href);
- if (base != NULL)
- xmlFree(base);
- return(-1);
- }
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "parse: %s\n",
- xml ? "xml": "text");
- xmlGenericError(xmlGenericErrorContext, "URI: %s\n", URI);
-#endif
-
- /*
- * Save the base for this include (saving the current one)
- */
- oldBase = ctxt->base;
- ctxt->base = base;
-
- if (xml) {
- ret = xmlXIncludeLoadDoc(ctxt, URI, nr);
- /* xmlXIncludeGetFragment(ctxt, cur, URI); */
- } else {
- ret = xmlXIncludeLoadTxt(ctxt, URI, nr);
- }
-
- /*
- * Restore the original base before checking for fallback
- */
- ctxt->base = oldBase;
-
- if (ret < 0) {
- xmlNodePtr children;
-
- /*
- * Time to try a fallback if availble
- */
-#ifdef DEBUG_XINCLUDE
- xmlGenericError(xmlGenericErrorContext, "error looking for fallback\n");
-#endif
- children = cur->children;
- while (children != NULL) {
- if ((children->type == XML_ELEMENT_NODE) &&
- (children->ns != NULL) &&
- (xmlStrEqual(children->name, XINCLUDE_FALLBACK)) &&
- ((xmlStrEqual(children->ns->href, XINCLUDE_NS)) ||
- (xmlStrEqual(children->ns->href, XINCLUDE_OLD_NS)))) {
- ret = xmlXIncludeLoadFallback(ctxt, children, nr);
- if (ret == 0)
- break;
- }
- children = children->next;
- }
- }
- if (ret < 0) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_NO_FALLBACK,
- "could not load %s, and no fallback was found\n",
- URI);
- }
-
- /*
- * Cleanup
- */
- if (URI != NULL)
- xmlFree(URI);
- if (parse != NULL)
- xmlFree(parse);
- if (href != NULL)
- xmlFree(href);
- if (base != NULL)
- xmlFree(base);
- return(0);
-}
-
-/**
- * xmlXIncludeIncludeNode:
- * @ctxt: an XInclude context
- * @nr: the node number
- *
- * Inplement the infoset replacement for the given node
- *
- * Returns 0 if substitution succeeded, -1 if some processing failed
- */
-static int
-xmlXIncludeIncludeNode(xmlXIncludeCtxtPtr ctxt, int nr) {
- xmlNodePtr cur, end, list, tmp;
-
- if (ctxt == NULL)
- return(-1);
- if ((nr < 0) || (nr >= ctxt->incNr))
- return(-1);
- cur = ctxt->incTab[nr]->ref;
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return(-1);
-
- /*
- * If we stored an XPointer a late computation may be needed
- */
- if ((ctxt->incTab[nr]->inc == NULL) &&
- (ctxt->incTab[nr]->xptr != NULL)) {
- ctxt->incTab[nr]->inc =
- xmlXIncludeCopyXPointer(ctxt, ctxt->doc, ctxt->doc,
- ctxt->incTab[nr]->xptr);
- xmlXPathFreeObject(ctxt->incTab[nr]->xptr);
- ctxt->incTab[nr]->xptr = NULL;
- }
- list = ctxt->incTab[nr]->inc;
- ctxt->incTab[nr]->inc = NULL;
-
- /*
- * Check against the risk of generating a multi-rooted document
- */
- if ((cur->parent != NULL) &&
- (cur->parent->type != XML_ELEMENT_NODE)) {
- int nb_elem = 0;
-
- tmp = list;
- while (tmp != NULL) {
- if (tmp->type == XML_ELEMENT_NODE)
- nb_elem++;
- tmp = tmp->next;
- }
- if (nb_elem > 1) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_MULTIPLE_ROOT,
- "XInclude error: would result in multiple root nodes\n",
- NULL);
- return(-1);
- }
- }
-
- if (ctxt->parseFlags & XML_PARSE_NOXINCNODE) {
- /*
- * Add the list of nodes
- */
- while (list != NULL) {
- end = list;
- list = list->next;
-
- xmlAddPrevSibling(cur, end);
- }
- xmlUnlinkNode(cur);
- xmlFreeNode(cur);
- } else {
- /*
- * Change the current node as an XInclude start one, and add an
- * XInclude end one
- */
- cur->type = XML_XINCLUDE_START;
- end = xmlNewDocNode(cur->doc, cur->ns, cur->name, NULL);
- if (end == NULL) {
- xmlXIncludeErr(ctxt, ctxt->incTab[nr]->ref,
- XML_XINCLUDE_BUILD_FAILED,
- "failed to build node\n", NULL);
- return(-1);
- }
- end->type = XML_XINCLUDE_END;
- xmlAddNextSibling(cur, end);
-
- /*
- * Add the list of nodes
- */
- while (list != NULL) {
- cur = list;
- list = list->next;
-
- xmlAddPrevSibling(end, cur);
- }
- }
-
-
- return(0);
-}
-
-/**
- * xmlXIncludeTestNode:
- * @ctxt: the XInclude processing context
- * @node: an XInclude node
- *
- * test if the node is an XInclude node
- *
- * Returns 1 true, 0 otherwise
- */
-static int
-xmlXIncludeTestNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
- if (node == NULL)
- return(0);
- if (node->type != XML_ELEMENT_NODE)
- return(0);
- if (node->ns == NULL)
- return(0);
- if ((xmlStrEqual(node->ns->href, XINCLUDE_NS)) ||
- (xmlStrEqual(node->ns->href, XINCLUDE_OLD_NS))) {
- if (xmlStrEqual(node->ns->href, XINCLUDE_OLD_NS)) {
- if (ctxt->legacy == 0) {
-#if 0 /* wait for the XML Core Working Group to get something stable ! */
- xmlXIncludeWarn(ctxt, node, XML_XINCLUDE_DEPRECATED_NS,
- "Deprecated XInclude namespace found, use %s",
- XINCLUDE_NS);
-#endif
- ctxt->legacy = 1;
- }
- }
- if (xmlStrEqual(node->name, XINCLUDE_NODE)) {
- xmlNodePtr child = node->children;
- int nb_fallback = 0;
-
- while (child != NULL) {
- if ((child->type == XML_ELEMENT_NODE) &&
- (child->ns != NULL) &&
- ((xmlStrEqual(child->ns->href, XINCLUDE_NS)) ||
- (xmlStrEqual(child->ns->href, XINCLUDE_OLD_NS)))) {
- if (xmlStrEqual(child->name, XINCLUDE_NODE)) {
- xmlXIncludeErr(ctxt, node,
- XML_XINCLUDE_INCLUDE_IN_INCLUDE,
- "%s has an 'include' child\n",
- XINCLUDE_NODE);
- return(0);
- }
- if (xmlStrEqual(child->name, XINCLUDE_FALLBACK)) {
- nb_fallback++;
- }
- }
- child = child->next;
- }
- if (nb_fallback > 1) {
- xmlXIncludeErr(ctxt, node, XML_XINCLUDE_FALLBACKS_IN_INCLUDE,
- "%s has multiple fallback children\n",
- XINCLUDE_NODE);
- return(0);
- }
- return(1);
- }
- if (xmlStrEqual(node->name, XINCLUDE_FALLBACK)) {
- if ((node->parent == NULL) ||
- (node->parent->type != XML_ELEMENT_NODE) ||
- (node->parent->ns == NULL) ||
- ((!xmlStrEqual(node->parent->ns->href, XINCLUDE_NS)) &&
- (!xmlStrEqual(node->parent->ns->href, XINCLUDE_OLD_NS))) ||
- (!xmlStrEqual(node->parent->name, XINCLUDE_NODE))) {
- xmlXIncludeErr(ctxt, node,
- XML_XINCLUDE_FALLBACK_NOT_IN_INCLUDE,
- "%s is not the child of an 'include'\n",
- XINCLUDE_FALLBACK);
- }
- }
- }
- return(0);
-}
-
-/**
- * xmlXIncludeDoProcess:
- * @ctxt: the XInclude processing context
- * @doc: an XML document
- * @tree: the top of the tree to process
- *
- * Implement the XInclude substitution on the XML document @doc
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- * or the number of substitutions done.
- */
-static int
-xmlXIncludeDoProcess(xmlXIncludeCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr tree) {
- xmlNodePtr cur;
- int ret = 0;
- int i, start;
-
- if ((doc == NULL) || (tree == NULL) || (tree->type == XML_NAMESPACE_DECL))
- return(-1);
- if (ctxt == NULL)
- return(-1);
-
- if (doc->URL != NULL) {
- ret = xmlXIncludeURLPush(ctxt, doc->URL);
- if (ret < 0)
- return(-1);
- }
- start = ctxt->incNr;
-
- /*
- * First phase: lookup the elements in the document
- */
- cur = tree;
- if (xmlXIncludeTestNode(ctxt, cur) == 1)
- xmlXIncludePreProcessNode(ctxt, cur);
- while ((cur != NULL) && (cur != tree->parent)) {
- /* TODO: need to work on entities -> stack */
- if ((cur->children != NULL) &&
- (cur->children->type != XML_ENTITY_DECL) &&
- (cur->children->type != XML_XINCLUDE_START) &&
- (cur->children->type != XML_XINCLUDE_END)) {
- cur = cur->children;
- if (xmlXIncludeTestNode(ctxt, cur))
- xmlXIncludePreProcessNode(ctxt, cur);
- } else if (cur->next != NULL) {
- cur = cur->next;
- if (xmlXIncludeTestNode(ctxt, cur))
- xmlXIncludePreProcessNode(ctxt, cur);
- } else {
- if (cur == tree)
- break;
- do {
- cur = cur->parent;
- if ((cur == NULL) || (cur == tree->parent))
- break; /* do */
- if (cur->next != NULL) {
- cur = cur->next;
- if (xmlXIncludeTestNode(ctxt, cur))
- xmlXIncludePreProcessNode(ctxt, cur);
- break; /* do */
- }
- } while (cur != NULL);
- }
- }
-
- /*
- * Second Phase : collect the infosets fragments
- */
- for (i = start;i < ctxt->incNr; i++) {
- xmlXIncludeLoadNode(ctxt, i);
- ret++;
- }
-
- /*
- * Third phase: extend the original document infoset.
- *
- * Originally we bypassed the inclusion if there were any errors
- * encountered on any of the XIncludes. A bug was raised (bug
- * 132588) requesting that we output the XIncludes without error,
- * so the check for inc!=NULL || xptr!=NULL was put in. This may
- * give some other problems in the future, but for now it seems to
- * work ok.
- *
- */
- for (i = ctxt->incBase;i < ctxt->incNr; i++) {
- if ((ctxt->incTab[i]->inc != NULL) ||
- (ctxt->incTab[i]->xptr != NULL) ||
- (ctxt->incTab[i]->emptyFb != 0)) /* (empty fallback) */
- xmlXIncludeIncludeNode(ctxt, i);
- }
-
- if (doc->URL != NULL)
- xmlXIncludeURLPop(ctxt);
- return(ret);
-}
-
-/**
- * xmlXIncludeSetFlags:
- * @ctxt: an XInclude processing context
- * @flags: a set of xmlParserOption used for parsing XML includes
- *
- * Set the flags used for further processing of XML resources.
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlXIncludeSetFlags(xmlXIncludeCtxtPtr ctxt, int flags) {
- if (ctxt == NULL)
- return(-1);
- ctxt->parseFlags = flags;
- return(0);
-}
-
-/**
- * xmlXIncludeProcessTreeFlagsData:
- * @tree: an XML node
- * @flags: a set of xmlParserOption used for parsing XML includes
- * @data: application data that will be passed to the parser context
- * in the _private field of the parser context(s)
- *
- * Implement the XInclude substitution on the XML node @tree
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- * or the number of substitutions done.
- */
-
-int
-xmlXIncludeProcessTreeFlagsData(xmlNodePtr tree, int flags, void *data) {
- xmlXIncludeCtxtPtr ctxt;
- int ret = 0;
-
- if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL) ||
- (tree->doc == NULL))
- return(-1);
-
- ctxt = xmlXIncludeNewContext(tree->doc);
- if (ctxt == NULL)
- return(-1);
- ctxt->_private = data;
- ctxt->base = xmlStrdup((xmlChar *)tree->doc->URL);
- xmlXIncludeSetFlags(ctxt, flags);
- ret = xmlXIncludeDoProcess(ctxt, tree->doc, tree);
- if ((ret >= 0) && (ctxt->nbErrors > 0))
- ret = -1;
-
- xmlXIncludeFreeContext(ctxt);
- return(ret);
-}
-
-/**
- * xmlXIncludeProcessFlagsData:
- * @doc: an XML document
- * @flags: a set of xmlParserOption used for parsing XML includes
- * @data: application data that will be passed to the parser context
- * in the _private field of the parser context(s)
- *
- * Implement the XInclude substitution on the XML document @doc
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- * or the number of substitutions done.
- */
-int
-xmlXIncludeProcessFlagsData(xmlDocPtr doc, int flags, void *data) {
- xmlNodePtr tree;
-
- if (doc == NULL)
- return(-1);
- tree = xmlDocGetRootElement(doc);
- if (tree == NULL)
- return(-1);
- return(xmlXIncludeProcessTreeFlagsData(tree, flags, data));
-}
-
-/**
- * xmlXIncludeProcessFlags:
- * @doc: an XML document
- * @flags: a set of xmlParserOption used for parsing XML includes
- *
- * Implement the XInclude substitution on the XML document @doc
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- * or the number of substitutions done.
- */
-int
-xmlXIncludeProcessFlags(xmlDocPtr doc, int flags) {
- return xmlXIncludeProcessFlagsData(doc, flags, NULL);
-}
-
-/**
- * xmlXIncludeProcess:
- * @doc: an XML document
- *
- * Implement the XInclude substitution on the XML document @doc
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- * or the number of substitutions done.
- */
-int
-xmlXIncludeProcess(xmlDocPtr doc) {
- return(xmlXIncludeProcessFlags(doc, 0));
-}
-
-/**
- * xmlXIncludeProcessTreeFlags:
- * @tree: a node in an XML document
- * @flags: a set of xmlParserOption used for parsing XML includes
- *
- * Implement the XInclude substitution for the given subtree
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- * or the number of substitutions done.
- */
-int
-xmlXIncludeProcessTreeFlags(xmlNodePtr tree, int flags) {
- xmlXIncludeCtxtPtr ctxt;
- int ret = 0;
-
- if ((tree == NULL) || (tree->type == XML_NAMESPACE_DECL) ||
- (tree->doc == NULL))
- return(-1);
- ctxt = xmlXIncludeNewContext(tree->doc);
- if (ctxt == NULL)
- return(-1);
- ctxt->base = xmlNodeGetBase(tree->doc, tree);
- xmlXIncludeSetFlags(ctxt, flags);
- ret = xmlXIncludeDoProcess(ctxt, tree->doc, tree);
- if ((ret >= 0) && (ctxt->nbErrors > 0))
- ret = -1;
-
- xmlXIncludeFreeContext(ctxt);
- return(ret);
-}
-
-/**
- * xmlXIncludeProcessTree:
- * @tree: a node in an XML document
- *
- * Implement the XInclude substitution for the given subtree
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- * or the number of substitutions done.
- */
-int
-xmlXIncludeProcessTree(xmlNodePtr tree) {
- return(xmlXIncludeProcessTreeFlags(tree, 0));
-}
-
-/**
- * xmlXIncludeProcessNode:
- * @ctxt: an existing XInclude context
- * @node: a node in an XML document
- *
- * Implement the XInclude substitution for the given subtree reusing
- * the informations and data coming from the given context.
- *
- * Returns 0 if no substitution were done, -1 if some processing failed
- * or the number of substitutions done.
- */
-int
-xmlXIncludeProcessNode(xmlXIncludeCtxtPtr ctxt, xmlNodePtr node) {
- int ret = 0;
-
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL) ||
- (node->doc == NULL) || (ctxt == NULL))
- return(-1);
- ret = xmlXIncludeDoProcess(ctxt, node->doc, node);
- if ((ret >= 0) && (ctxt->nbErrors > 0))
- ret = -1;
- return(ret);
-}
-
-#else /* !LIBXML_XINCLUDE_ENABLED */
-#endif
-#define bottom_xinclude
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/xlink.c b/external/libxml2_android/jni/libxml2/xlink.c
deleted file mode 100644
index c0e4ff32..00000000
--- a/external/libxml2_android/jni/libxml2/xlink.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * xlink.c : implementation of the hyperlinks detection module
- * This version supports both XML XLinks and HTML simple links
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_XPTR_ENABLED
-#include <string.h> /* for memset() only */
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/parser.h>
-#include <libxml/valid.h>
-#include <libxml/xlink.h>
-#include <libxml/globals.h>
-
-#define XLINK_NAMESPACE (BAD_CAST "http://www.w3.org/1999/xlink/namespace/")
-#define XHTML_NAMESPACE (BAD_CAST "http://www.w3.org/1999/xhtml/")
-
-/****************************************************************
- * *
- * Default setting and related functions *
- * *
- ****************************************************************/
-
-static xlinkHandlerPtr xlinkDefaultHandler = NULL;
-static xlinkNodeDetectFunc xlinkDefaultDetect = NULL;
-
-/**
- * xlinkGetDefaultHandler:
- *
- * Get the default xlink handler.
- *
- * Returns the current xlinkHandlerPtr value.
- */
-xlinkHandlerPtr
-xlinkGetDefaultHandler(void) {
- return(xlinkDefaultHandler);
-}
-
-
-/**
- * xlinkSetDefaultHandler:
- * @handler: the new value for the xlink handler block
- *
- * Set the default xlink handlers
- */
-void
-xlinkSetDefaultHandler(xlinkHandlerPtr handler) {
- xlinkDefaultHandler = handler;
-}
-
-/**
- * xlinkGetDefaultDetect:
- *
- * Get the default xlink detection routine
- *
- * Returns the current function or NULL;
- */
-xlinkNodeDetectFunc
-xlinkGetDefaultDetect (void) {
- return(xlinkDefaultDetect);
-}
-
-/**
- * xlinkSetDefaultDetect:
- * @func: pointer to the new detection routine.
- *
- * Set the default xlink detection routine
- */
-void
-xlinkSetDefaultDetect (xlinkNodeDetectFunc func) {
- xlinkDefaultDetect = func;
-}
-
-/****************************************************************
- * *
- * The detection routines *
- * *
- ****************************************************************/
-
-
-/**
- * xlinkIsLink:
- * @doc: the document containing the node
- * @node: the node pointer itself
- *
- * Check whether the given node carries the attributes needed
- * to be a link element (or is one of the linking elements issued
- * from the (X)HTML DtDs).
- * This routine don't try to do full checking of the link validity
- * but tries to detect and return the appropriate link type.
- *
- * Returns the xlinkType of the node (XLINK_TYPE_NONE if there is no
- * link detected.
- */
-xlinkType
-xlinkIsLink (xmlDocPtr doc, xmlNodePtr node) {
- xmlChar *type = NULL, *role = NULL;
- xlinkType ret = XLINK_TYPE_NONE;
-
- if (node == NULL) return(XLINK_TYPE_NONE);
- if (doc == NULL) doc = node->doc;
- if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
- /*
- * This is an HTML document.
- */
- } else if ((node->ns != NULL) &&
- (xmlStrEqual(node->ns->href, XHTML_NAMESPACE))) {
- /*
- * !!!! We really need an IS_XHTML_ELEMENT function from HTMLtree.h @@@
- */
- /*
- * This is an XHTML element within an XML document
- * Check whether it's one of the element able to carry links
- * and in that case if it holds the attributes.
- */
- }
-
- /*
- * We don't prevent a-priori having XML Linking constructs on
- * XHTML elements
- */
- type = xmlGetNsProp(node, BAD_CAST"type", XLINK_NAMESPACE);
- if (type != NULL) {
- if (xmlStrEqual(type, BAD_CAST "simple")) {
- ret = XLINK_TYPE_SIMPLE;
- } else if (xmlStrEqual(type, BAD_CAST "extended")) {
- role = xmlGetNsProp(node, BAD_CAST "role", XLINK_NAMESPACE);
- if (role != NULL) {
- xmlNsPtr xlink;
- xlink = xmlSearchNs(doc, node, XLINK_NAMESPACE);
- if (xlink == NULL) {
- /* Humm, fallback method */
- if (xmlStrEqual(role, BAD_CAST"xlink:external-linkset"))
- ret = XLINK_TYPE_EXTENDED_SET;
- } else {
- xmlChar buf[200];
- snprintf((char *) buf, sizeof(buf), "%s:external-linkset",
- (char *) xlink->prefix);
- buf[sizeof(buf) - 1] = 0;
- if (xmlStrEqual(role, buf))
- ret = XLINK_TYPE_EXTENDED_SET;
-
- }
-
- }
- ret = XLINK_TYPE_EXTENDED;
- }
- }
-
- if (type != NULL) xmlFree(type);
- if (role != NULL) xmlFree(role);
- return(ret);
-}
-#endif /* LIBXML_XPTR_ENABLED */
-#define bottom_xlink
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/xmlIO.c b/external/libxml2_android/jni/libxml2/xmlIO.c
deleted file mode 100644
index e6256128..00000000
--- a/external/libxml2_android/jni/libxml2/xmlIO.c
+++ /dev/null
@@ -1,4216 +0,0 @@
-/*
- * xmlIO.c : implementation of the I/O interfaces used by the parser
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- *
- * 14 Nov 2000 ht - for VMS, truncated name of long functions to under 32 char
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-#ifdef HAVE_LZMA_H
-#include <lzma.h>
-#endif
-
-#if defined(WIN32) || defined(_WIN32)
-#include <windows.h>
-#endif
-
-#if defined(_WIN32_WCE)
-#include <winnls.h> /* for CP_UTF8 */
-#endif
-
-/* Figure a portable way to know if a file is a directory. */
-#ifndef HAVE_STAT
-# ifdef HAVE__STAT
- /* MS C library seems to define stat and _stat. The definition
- is identical. Still, mapping them to each other causes a warning. */
-# ifndef _MSC_VER
-# define stat(x,y) _stat(x,y)
-# endif
-# define HAVE_STAT
-# endif
-#else
-# ifdef HAVE__STAT
-# if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
-# define stat _stat
-# endif
-# endif
-#endif
-#ifdef HAVE_STAT
-# ifndef S_ISDIR
-# ifdef _S_ISDIR
-# define S_ISDIR(x) _S_ISDIR(x)
-# else
-# ifdef S_IFDIR
-# ifndef S_IFMT
-# ifdef _S_IFMT
-# define S_IFMT _S_IFMT
-# endif
-# endif
-# ifdef S_IFMT
-# define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
-# endif
-# endif
-# endif
-# endif
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlIO.h>
-#include <libxml/uri.h>
-#include <libxml/nanohttp.h>
-#include <libxml/nanoftp.h>
-#include <libxml/xmlerror.h>
-#ifdef LIBXML_CATALOG_ENABLED
-#include <libxml/catalog.h>
-#endif
-#include <libxml/globals.h>
-
-#include "buf.h"
-#include "enc.h"
-
-/* #define VERBOSE_FAILURE */
-/* #define DEBUG_EXTERNAL_ENTITIES */
-/* #define DEBUG_INPUT */
-
-#ifdef DEBUG_INPUT
-#define MINLEN 40
-#else
-#define MINLEN 4000
-#endif
-
-/*
- * Input I/O callback sets
- */
-typedef struct _xmlInputCallback {
- xmlInputMatchCallback matchcallback;
- xmlInputOpenCallback opencallback;
- xmlInputReadCallback readcallback;
- xmlInputCloseCallback closecallback;
-} xmlInputCallback;
-
-#define MAX_INPUT_CALLBACK 15
-
-static xmlInputCallback xmlInputCallbackTable[MAX_INPUT_CALLBACK];
-static int xmlInputCallbackNr = 0;
-static int xmlInputCallbackInitialized = 0;
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/*
- * Output I/O callback sets
- */
-typedef struct _xmlOutputCallback {
- xmlOutputMatchCallback matchcallback;
- xmlOutputOpenCallback opencallback;
- xmlOutputWriteCallback writecallback;
- xmlOutputCloseCallback closecallback;
-} xmlOutputCallback;
-
-#define MAX_OUTPUT_CALLBACK 15
-
-static xmlOutputCallback xmlOutputCallbackTable[MAX_OUTPUT_CALLBACK];
-static int xmlOutputCallbackNr = 0;
-static int xmlOutputCallbackInitialized = 0;
-
-xmlOutputBufferPtr
-xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder);
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- * *
- * Tree memory error handler *
- * *
- ************************************************************************/
-
-static const char *IOerr[] = {
- "Unknown IO error", /* UNKNOWN */
- "Permission denied", /* EACCES */
- "Resource temporarily unavailable",/* EAGAIN */
- "Bad file descriptor", /* EBADF */
- "Bad message", /* EBADMSG */
- "Resource busy", /* EBUSY */
- "Operation canceled", /* ECANCELED */
- "No child processes", /* ECHILD */
- "Resource deadlock avoided",/* EDEADLK */
- "Domain error", /* EDOM */
- "File exists", /* EEXIST */
- "Bad address", /* EFAULT */
- "File too large", /* EFBIG */
- "Operation in progress", /* EINPROGRESS */
- "Interrupted function call",/* EINTR */
- "Invalid argument", /* EINVAL */
- "Input/output error", /* EIO */
- "Is a directory", /* EISDIR */
- "Too many open files", /* EMFILE */
- "Too many links", /* EMLINK */
- "Inappropriate message buffer length",/* EMSGSIZE */
- "Filename too long", /* ENAMETOOLONG */
- "Too many open files in system",/* ENFILE */
- "No such device", /* ENODEV */
- "No such file or directory",/* ENOENT */
- "Exec format error", /* ENOEXEC */
- "No locks available", /* ENOLCK */
- "Not enough space", /* ENOMEM */
- "No space left on device", /* ENOSPC */
- "Function not implemented", /* ENOSYS */
- "Not a directory", /* ENOTDIR */
- "Directory not empty", /* ENOTEMPTY */
- "Not supported", /* ENOTSUP */
- "Inappropriate I/O control operation",/* ENOTTY */
- "No such device or address",/* ENXIO */
- "Operation not permitted", /* EPERM */
- "Broken pipe", /* EPIPE */
- "Result too large", /* ERANGE */
- "Read-only file system", /* EROFS */
- "Invalid seek", /* ESPIPE */
- "No such process", /* ESRCH */
- "Operation timed out", /* ETIMEDOUT */
- "Improper link", /* EXDEV */
- "Attempt to load network entity %s", /* XML_IO_NETWORK_ATTEMPT */
- "encoder error", /* XML_IO_ENCODER */
- "flush error",
- "write error",
- "no input",
- "buffer full",
- "loading error",
- "not a socket", /* ENOTSOCK */
- "already connected", /* EISCONN */
- "connection refused", /* ECONNREFUSED */
- "unreachable network", /* ENETUNREACH */
- "adddress in use", /* EADDRINUSE */
- "already in use", /* EALREADY */
- "unknown address familly", /* EAFNOSUPPORT */
- "Attempt to load external entity %s", /* XML_IO_ILLEGAL_XXE */
-};
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
-/**
- * __xmlIOWin32UTF8ToWChar:
- * @u8String: uft-8 string
- *
- * Convert a string from utf-8 to wchar (WINDOWS ONLY!)
- */
-static wchar_t *
-__xmlIOWin32UTF8ToWChar(const char *u8String)
-{
- wchar_t *wString = NULL;
-
- if (u8String) {
- int wLen =
- MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, u8String,
- -1, NULL, 0);
- if (wLen) {
- wString = xmlMalloc(wLen * sizeof(wchar_t));
- if (wString) {
- if (MultiByteToWideChar
- (CP_UTF8, 0, u8String, -1, wString, wLen) == 0) {
- xmlFree(wString);
- wString = NULL;
- }
- }
- }
- }
-
- return wString;
-}
-#endif
-
-/**
- * xmlIOErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlIOErrMemory(const char *extra)
-{
- __xmlSimpleError(XML_FROM_IO, XML_ERR_NO_MEMORY, NULL, NULL, extra);
-}
-
-/**
- * __xmlIOErr:
- * @code: the error number
- * @
- * @extra: extra informations
- *
- * Handle an I/O error
- */
-void
-__xmlIOErr(int domain, int code, const char *extra)
-{
- unsigned int idx;
-
- if (code == 0) {
-#ifdef HAVE_ERRNO_H
- if (errno == 0) code = 0;
-#ifdef EACCES
- else if (errno == EACCES) code = XML_IO_EACCES;
-#endif
-#ifdef EAGAIN
- else if (errno == EAGAIN) code = XML_IO_EAGAIN;
-#endif
-#ifdef EBADF
- else if (errno == EBADF) code = XML_IO_EBADF;
-#endif
-#ifdef EBADMSG
- else if (errno == EBADMSG) code = XML_IO_EBADMSG;
-#endif
-#ifdef EBUSY
- else if (errno == EBUSY) code = XML_IO_EBUSY;
-#endif
-#ifdef ECANCELED
- else if (errno == ECANCELED) code = XML_IO_ECANCELED;
-#endif
-#ifdef ECHILD
- else if (errno == ECHILD) code = XML_IO_ECHILD;
-#endif
-#ifdef EDEADLK
- else if (errno == EDEADLK) code = XML_IO_EDEADLK;
-#endif
-#ifdef EDOM
- else if (errno == EDOM) code = XML_IO_EDOM;
-#endif
-#ifdef EEXIST
- else if (errno == EEXIST) code = XML_IO_EEXIST;
-#endif
-#ifdef EFAULT
- else if (errno == EFAULT) code = XML_IO_EFAULT;
-#endif
-#ifdef EFBIG
- else if (errno == EFBIG) code = XML_IO_EFBIG;
-#endif
-#ifdef EINPROGRESS
- else if (errno == EINPROGRESS) code = XML_IO_EINPROGRESS;
-#endif
-#ifdef EINTR
- else if (errno == EINTR) code = XML_IO_EINTR;
-#endif
-#ifdef EINVAL
- else if (errno == EINVAL) code = XML_IO_EINVAL;
-#endif
-#ifdef EIO
- else if (errno == EIO) code = XML_IO_EIO;
-#endif
-#ifdef EISDIR
- else if (errno == EISDIR) code = XML_IO_EISDIR;
-#endif
-#ifdef EMFILE
- else if (errno == EMFILE) code = XML_IO_EMFILE;
-#endif
-#ifdef EMLINK
- else if (errno == EMLINK) code = XML_IO_EMLINK;
-#endif
-#ifdef EMSGSIZE
- else if (errno == EMSGSIZE) code = XML_IO_EMSGSIZE;
-#endif
-#ifdef ENAMETOOLONG
- else if (errno == ENAMETOOLONG) code = XML_IO_ENAMETOOLONG;
-#endif
-#ifdef ENFILE
- else if (errno == ENFILE) code = XML_IO_ENFILE;
-#endif
-#ifdef ENODEV
- else if (errno == ENODEV) code = XML_IO_ENODEV;
-#endif
-#ifdef ENOENT
- else if (errno == ENOENT) code = XML_IO_ENOENT;
-#endif
-#ifdef ENOEXEC
- else if (errno == ENOEXEC) code = XML_IO_ENOEXEC;
-#endif
-#ifdef ENOLCK
- else if (errno == ENOLCK) code = XML_IO_ENOLCK;
-#endif
-#ifdef ENOMEM
- else if (errno == ENOMEM) code = XML_IO_ENOMEM;
-#endif
-#ifdef ENOSPC
- else if (errno == ENOSPC) code = XML_IO_ENOSPC;
-#endif
-#ifdef ENOSYS
- else if (errno == ENOSYS) code = XML_IO_ENOSYS;
-#endif
-#ifdef ENOTDIR
- else if (errno == ENOTDIR) code = XML_IO_ENOTDIR;
-#endif
-#ifdef ENOTEMPTY
- else if (errno == ENOTEMPTY) code = XML_IO_ENOTEMPTY;
-#endif
-#ifdef ENOTSUP
- else if (errno == ENOTSUP) code = XML_IO_ENOTSUP;
-#endif
-#ifdef ENOTTY
- else if (errno == ENOTTY) code = XML_IO_ENOTTY;
-#endif
-#ifdef ENXIO
- else if (errno == ENXIO) code = XML_IO_ENXIO;
-#endif
-#ifdef EPERM
- else if (errno == EPERM) code = XML_IO_EPERM;
-#endif
-#ifdef EPIPE
- else if (errno == EPIPE) code = XML_IO_EPIPE;
-#endif
-#ifdef ERANGE
- else if (errno == ERANGE) code = XML_IO_ERANGE;
-#endif
-#ifdef EROFS
- else if (errno == EROFS) code = XML_IO_EROFS;
-#endif
-#ifdef ESPIPE
- else if (errno == ESPIPE) code = XML_IO_ESPIPE;
-#endif
-#ifdef ESRCH
- else if (errno == ESRCH) code = XML_IO_ESRCH;
-#endif
-#ifdef ETIMEDOUT
- else if (errno == ETIMEDOUT) code = XML_IO_ETIMEDOUT;
-#endif
-#ifdef EXDEV
- else if (errno == EXDEV) code = XML_IO_EXDEV;
-#endif
-#ifdef ENOTSOCK
- else if (errno == ENOTSOCK) code = XML_IO_ENOTSOCK;
-#endif
-#ifdef EISCONN
- else if (errno == EISCONN) code = XML_IO_EISCONN;
-#endif
-#ifdef ECONNREFUSED
- else if (errno == ECONNREFUSED) code = XML_IO_ECONNREFUSED;
-#endif
-#ifdef ETIMEDOUT
- else if (errno == ETIMEDOUT) code = XML_IO_ETIMEDOUT;
-#endif
-#ifdef ENETUNREACH
- else if (errno == ENETUNREACH) code = XML_IO_ENETUNREACH;
-#endif
-#ifdef EADDRINUSE
- else if (errno == EADDRINUSE) code = XML_IO_EADDRINUSE;
-#endif
-#ifdef EINPROGRESS
- else if (errno == EINPROGRESS) code = XML_IO_EINPROGRESS;
-#endif
-#ifdef EALREADY
- else if (errno == EALREADY) code = XML_IO_EALREADY;
-#endif
-#ifdef EAFNOSUPPORT
- else if (errno == EAFNOSUPPORT) code = XML_IO_EAFNOSUPPORT;
-#endif
- else code = XML_IO_UNKNOWN;
-#endif /* HAVE_ERRNO_H */
- }
- idx = 0;
- if (code >= XML_IO_UNKNOWN) idx = code - XML_IO_UNKNOWN;
- if (idx >= (sizeof(IOerr) / sizeof(IOerr[0]))) idx = 0;
-
- __xmlSimpleError(domain, code, NULL, IOerr[idx], extra);
-}
-
-/**
- * xmlIOErr:
- * @code: the error number
- * @extra: extra informations
- *
- * Handle an I/O error
- */
-static void
-xmlIOErr(int code, const char *extra)
-{
- __xmlIOErr(XML_FROM_IO, code, extra);
-}
-
-/**
- * __xmlLoaderErr:
- * @ctx: the parser context
- * @extra: extra informations
- *
- * Handle a resource access error
- */
-void
-__xmlLoaderErr(void *ctx, const char *msg, const char *filename)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- void *data = NULL;
- xmlErrorLevel level = XML_ERR_ERROR;
-
- if ((ctxt != NULL) && (ctxt->disableSAX != 0) &&
- (ctxt->instate == XML_PARSER_EOF))
- return;
- if ((ctxt != NULL) && (ctxt->sax != NULL)) {
- if (ctxt->validate) {
- channel = ctxt->sax->error;
- level = XML_ERR_ERROR;
- } else {
- channel = ctxt->sax->warning;
- level = XML_ERR_WARNING;
- }
- if (ctxt->sax->initialized == XML_SAX2_MAGIC)
- schannel = ctxt->sax->serror;
- data = ctxt->userData;
- }
- __xmlRaiseError(schannel, channel, data, ctxt, NULL, XML_FROM_IO,
- XML_IO_LOAD_ERROR, level, NULL, 0,
- filename, NULL, NULL, 0, 0,
- msg, filename);
-
-}
-
-/************************************************************************
- * *
- * Tree memory error handler *
- * *
- ************************************************************************/
-/**
- * xmlNormalizeWindowsPath:
- * @path: the input file path
- *
- * This function is obsolete. Please see xmlURIFromPath in uri.c for
- * a better solution.
- *
- * Returns a canonicalized version of the path
- */
-xmlChar *
-xmlNormalizeWindowsPath(const xmlChar *path)
-{
- return xmlCanonicPath(path);
-}
-
-/**
- * xmlCleanupInputCallbacks:
- *
- * clears the entire input callback table. this includes the
- * compiled-in I/O.
- */
-void
-xmlCleanupInputCallbacks(void)
-{
- int i;
-
- if (!xmlInputCallbackInitialized)
- return;
-
- for (i = xmlInputCallbackNr - 1; i >= 0; i--) {
- xmlInputCallbackTable[i].matchcallback = NULL;
- xmlInputCallbackTable[i].opencallback = NULL;
- xmlInputCallbackTable[i].readcallback = NULL;
- xmlInputCallbackTable[i].closecallback = NULL;
- }
-
- xmlInputCallbackNr = 0;
- xmlInputCallbackInitialized = 0;
-}
-
-/**
- * xmlPopInputCallbacks:
- *
- * Clear the top input callback from the input stack. this includes the
- * compiled-in I/O.
- *
- * Returns the number of input callback registered or -1 in case of error.
- */
-int
-xmlPopInputCallbacks(void)
-{
- if (!xmlInputCallbackInitialized)
- return(-1);
-
- if (xmlInputCallbackNr <= 0)
- return(-1);
-
- xmlInputCallbackNr--;
- xmlInputCallbackTable[xmlInputCallbackNr].matchcallback = NULL;
- xmlInputCallbackTable[xmlInputCallbackNr].opencallback = NULL;
- xmlInputCallbackTable[xmlInputCallbackNr].readcallback = NULL;
- xmlInputCallbackTable[xmlInputCallbackNr].closecallback = NULL;
-
- return(xmlInputCallbackNr);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlCleanupOutputCallbacks:
- *
- * clears the entire output callback table. this includes the
- * compiled-in I/O callbacks.
- */
-void
-xmlCleanupOutputCallbacks(void)
-{
- int i;
-
- if (!xmlOutputCallbackInitialized)
- return;
-
- for (i = xmlOutputCallbackNr - 1; i >= 0; i--) {
- xmlOutputCallbackTable[i].matchcallback = NULL;
- xmlOutputCallbackTable[i].opencallback = NULL;
- xmlOutputCallbackTable[i].writecallback = NULL;
- xmlOutputCallbackTable[i].closecallback = NULL;
- }
-
- xmlOutputCallbackNr = 0;
- xmlOutputCallbackInitialized = 0;
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- * *
- * Standard I/O for file accesses *
- * *
- ************************************************************************/
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
-
-/**
- * xmlWrapOpenUtf8:
- * @path: the path in utf-8 encoding
- * @mode: type of access (0 - read, 1 - write)
- *
- * function opens the file specified by @path
- *
- */
-static FILE*
-xmlWrapOpenUtf8(const char *path,int mode)
-{
- FILE *fd = NULL;
- wchar_t *wPath;
-
- wPath = __xmlIOWin32UTF8ToWChar(path);
- if(wPath)
- {
- fd = _wfopen(wPath, mode ? L"wb" : L"rb");
- xmlFree(wPath);
- }
- /* maybe path in native encoding */
- if(fd == NULL)
- fd = fopen(path, mode ? "wb" : "rb");
-
- return fd;
-}
-
-#ifdef HAVE_ZLIB_H
-static gzFile
-xmlWrapGzOpenUtf8(const char *path, const char *mode)
-{
- gzFile fd;
- wchar_t *wPath;
-
- fd = gzopen (path, mode);
- if (fd)
- return fd;
-
- wPath = __xmlIOWin32UTF8ToWChar(path);
- if(wPath)
- {
- int d, m = (strstr(mode, "r") ? O_RDONLY : O_RDWR);
-#ifdef _O_BINARY
- m |= (strstr(mode, "b") ? _O_BINARY : 0);
-#endif
- d = _wopen(wPath, m);
- if (d >= 0)
- fd = gzdopen(d, mode);
- xmlFree(wPath);
- }
-
- return fd;
-}
-#endif
-
-/**
- * xmlWrapStatUtf8:
- * @path: the path in utf-8 encoding
- * @info: structure that stores results
- *
- * function obtains information about the file or directory
- *
- */
-static int
-xmlWrapStatUtf8(const char *path,struct stat *info)
-{
-#ifdef HAVE_STAT
- int retval = -1;
- wchar_t *wPath;
-
- wPath = __xmlIOWin32UTF8ToWChar(path);
- if (wPath)
- {
- retval = _wstat(wPath,info);
- xmlFree(wPath);
- }
- /* maybe path in native encoding */
- if(retval < 0)
- retval = stat(path,info);
- return retval;
-#else
- return -1;
-#endif
-}
-
-/**
- * xmlWrapOpenNative:
- * @path: the path
- * @mode: type of access (0 - read, 1 - write)
- *
- * function opens the file specified by @path
- *
- */
-static FILE*
-xmlWrapOpenNative(const char *path,int mode)
-{
- return fopen(path,mode ? "wb" : "rb");
-}
-
-/**
- * xmlWrapStatNative:
- * @path: the path
- * @info: structure that stores results
- *
- * function obtains information about the file or directory
- *
- */
-static int
-xmlWrapStatNative(const char *path,struct stat *info)
-{
-#ifdef HAVE_STAT
- return stat(path,info);
-#else
- return -1;
-#endif
-}
-
-typedef int (* xmlWrapStatFunc) (const char *f, struct stat *s);
-static xmlWrapStatFunc xmlWrapStat = xmlWrapStatNative;
-typedef FILE* (* xmlWrapOpenFunc)(const char *f,int mode);
-static xmlWrapOpenFunc xmlWrapOpen = xmlWrapOpenNative;
-#ifdef HAVE_ZLIB_H
-typedef gzFile (* xmlWrapGzOpenFunc) (const char *f, const char *mode);
-static xmlWrapGzOpenFunc xmlWrapGzOpen = gzopen;
-#endif
-/**
- * xmlInitPlatformSpecificIo:
- *
- * Initialize platform specific features.
- */
-static void
-xmlInitPlatformSpecificIo(void)
-{
- static int xmlPlatformIoInitialized = 0;
- OSVERSIONINFO osvi;
-
- if(xmlPlatformIoInitialized)
- return;
-
- osvi.dwOSVersionInfoSize = sizeof(osvi);
-
- if(GetVersionEx(&osvi) && (osvi.dwPlatformId == VER_PLATFORM_WIN32_NT)) {
- xmlWrapStat = xmlWrapStatUtf8;
- xmlWrapOpen = xmlWrapOpenUtf8;
-#ifdef HAVE_ZLIB_H
- xmlWrapGzOpen = xmlWrapGzOpenUtf8;
-#endif
- } else {
- xmlWrapStat = xmlWrapStatNative;
- xmlWrapOpen = xmlWrapOpenNative;
-#ifdef HAVE_ZLIB_H
- xmlWrapGzOpen = gzopen;
-#endif
- }
-
- xmlPlatformIoInitialized = 1;
- return;
-}
-
-#endif
-
-/**
- * xmlCheckFilename:
- * @path: the path to check
- *
- * function checks to see if @path is a valid source
- * (file, socket...) for XML.
- *
- * if stat is not available on the target machine,
- * returns 1. if stat fails, returns 0 (if calling
- * stat on the filename fails, it can't be right).
- * if stat succeeds and the file is a directory,
- * returns 2. otherwise returns 1.
- */
-
-int
-xmlCheckFilename (const char *path)
-{
-#ifdef HAVE_STAT
- struct stat stat_buffer;
-#endif
- if (path == NULL)
- return(0);
-
-#ifdef HAVE_STAT
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- /*
- * On Windows stat and wstat do not work with long pathname,
- * which start with '\\?\'
- */
- if ((path[0] == '\\') && (path[1] == '\\') && (path[2] == '?') &&
- (path[3] == '\\') )
- return 1;
-
- if (xmlWrapStat(path, &stat_buffer) == -1)
- return 0;
-#else
- if (stat(path, &stat_buffer) == -1)
- return 0;
-#endif
-#ifdef S_ISDIR
- if (S_ISDIR(stat_buffer.st_mode))
- return 2;
-#endif
-#endif /* HAVE_STAT */
- return 1;
-}
-
-/**
- * xmlNop:
- *
- * No Operation function, does nothing, no input
- *
- * Returns zero
- */
-int
-xmlNop(void) {
- return(0);
-}
-
-/**
- * xmlFdRead:
- * @context: the I/O context
- * @buffer: where to drop data
- * @len: number of bytes to read
- *
- * Read @len bytes to @buffer from the I/O channel.
- *
- * Returns the number of bytes written
- */
-static int
-xmlFdRead (void * context, char * buffer, int len) {
- int ret;
-
- ret = read((int) (long) context, &buffer[0], len);
- if (ret < 0) xmlIOErr(0, "read()");
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlFdWrite:
- * @context: the I/O context
- * @buffer: where to get data
- * @len: number of bytes to write
- *
- * Write @len bytes from @buffer to the I/O channel.
- *
- * Returns the number of bytes written
- */
-static int
-xmlFdWrite (void * context, const char * buffer, int len) {
- int ret = 0;
-
- if (len > 0) {
- ret = write((int) (long) context, &buffer[0], len);
- if (ret < 0) xmlIOErr(0, "write()");
- }
- return(ret);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlFdClose:
- * @context: the I/O context
- *
- * Close an I/O channel
- *
- * Returns 0 in case of success and error code otherwise
- */
-static int
-xmlFdClose (void * context) {
- int ret;
- ret = close((int) (long) context);
- if (ret < 0) xmlIOErr(0, "close()");
- return(ret);
-}
-
-/**
- * xmlFileMatch:
- * @filename: the URI for matching
- *
- * input from FILE *
- *
- * Returns 1 if matches, 0 otherwise
- */
-int
-xmlFileMatch (const char *filename ATTRIBUTE_UNUSED) {
- return(1);
-}
-
-/**
- * xmlFileOpen_real:
- * @filename: the URI for matching
- *
- * input from FILE *, supports compressed input
- * if @filename is " " then the standard input is used
- *
- * Returns an I/O context or NULL in case of error
- */
-static void *
-xmlFileOpen_real (const char *filename) {
- const char *path = filename;
- FILE *fd;
-
- if (filename == NULL)
- return(NULL);
-
- if (!strcmp(filename, "-")) {
- fd = stdin;
- return((void *) fd);
- }
-
- if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17)) {
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[17];
-#else
- path = &filename[16];
-#endif
- } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[8];
-#else
- path = &filename[7];
-#endif
- } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:/", 6)) {
- /* lots of generators seems to lazy to read RFC 1738 */
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[6];
-#else
- path = &filename[5];
-#endif
- }
-
- if (!xmlCheckFilename(path))
- return(NULL);
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- fd = xmlWrapOpen(path, 0);
-#else
- fd = fopen(path, "r");
-#endif /* WIN32 */
- if (fd == NULL) xmlIOErr(0, path);
- return((void *) fd);
-}
-
-/**
- * xmlFileOpen:
- * @filename: the URI for matching
- *
- * Wrapper around xmlFileOpen_real that try it with an unescaped
- * version of @filename, if this fails fallback to @filename
- *
- * Returns a handler or NULL in case or failure
- */
-void *
-xmlFileOpen (const char *filename) {
- char *unescaped;
- void *retval;
-
- retval = xmlFileOpen_real(filename);
- if (retval == NULL) {
- unescaped = xmlURIUnescapeString(filename, 0, NULL);
- if (unescaped != NULL) {
- retval = xmlFileOpen_real(unescaped);
- xmlFree(unescaped);
- }
- }
-
- return retval;
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlFileOpenW:
- * @filename: the URI for matching
- *
- * output to from FILE *,
- * if @filename is "-" then the standard output is used
- *
- * Returns an I/O context or NULL in case of error
- */
-static void *
-xmlFileOpenW (const char *filename) {
- const char *path = NULL;
- FILE *fd;
-
- if (!strcmp(filename, "-")) {
- fd = stdout;
- return((void *) fd);
- }
-
- if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17))
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[17];
-#else
- path = &filename[16];
-#endif
- else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[8];
-#else
- path = &filename[7];
-#endif
- } else
- path = filename;
-
- if (path == NULL)
- return(NULL);
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- fd = xmlWrapOpen(path, 1);
-#else
- fd = fopen(path, "wb");
-#endif /* WIN32 */
-
- if (fd == NULL) xmlIOErr(0, path);
- return((void *) fd);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlFileRead:
- * @context: the I/O context
- * @buffer: where to drop data
- * @len: number of bytes to write
- *
- * Read @len bytes to @buffer from the I/O channel.
- *
- * Returns the number of bytes written or < 0 in case of failure
- */
-int
-xmlFileRead (void * context, char * buffer, int len) {
- int ret;
- if ((context == NULL) || (buffer == NULL))
- return(-1);
- ret = fread(&buffer[0], 1, len, (FILE *) context);
- if (ret < 0) xmlIOErr(0, "fread()");
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlFileWrite:
- * @context: the I/O context
- * @buffer: where to drop data
- * @len: number of bytes to write
- *
- * Write @len bytes from @buffer to the I/O channel.
- *
- * Returns the number of bytes written
- */
-static int
-xmlFileWrite (void * context, const char * buffer, int len) {
- int items;
-
- if ((context == NULL) || (buffer == NULL))
- return(-1);
- items = fwrite(&buffer[0], len, 1, (FILE *) context);
- if ((items == 0) && (ferror((FILE *) context))) {
- xmlIOErr(0, "fwrite()");
- return(-1);
- }
- return(items * len);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlFileClose:
- * @context: the I/O context
- *
- * Close an I/O channel
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlFileClose (void * context) {
- FILE *fil;
- int ret;
-
- if (context == NULL)
- return(-1);
- fil = (FILE *) context;
- if ((fil == stdout) || (fil == stderr)) {
- ret = fflush(fil);
- if (ret < 0)
- xmlIOErr(0, "fflush()");
- return(0);
- }
- if (fil == stdin)
- return(0);
- ret = ( fclose((FILE *) context) == EOF ) ? -1 : 0;
- if (ret < 0)
- xmlIOErr(0, "fclose()");
- return(ret);
-}
-
-/**
- * xmlFileFlush:
- * @context: the I/O context
- *
- * Flush an I/O channel
- */
-static int
-xmlFileFlush (void * context) {
- int ret;
-
- if (context == NULL)
- return(-1);
- ret = ( fflush((FILE *) context) == EOF ) ? -1 : 0;
- if (ret < 0)
- xmlIOErr(0, "fflush()");
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlBufferWrite:
- * @context: the xmlBuffer
- * @buffer: the data to write
- * @len: number of bytes to write
- *
- * Write @len bytes from @buffer to the xml buffer
- *
- * Returns the number of bytes written
- */
-static int
-xmlBufferWrite (void * context, const char * buffer, int len) {
- int ret;
-
- ret = xmlBufferAdd((xmlBufferPtr) context, (const xmlChar *) buffer, len);
- if (ret != 0)
- return(-1);
- return(len);
-}
-#endif
-
-#ifdef HAVE_ZLIB_H
-/************************************************************************
- * *
- * I/O for compressed file accesses *
- * *
- ************************************************************************/
-/**
- * xmlGzfileMatch:
- * @filename: the URI for matching
- *
- * input from compressed file test
- *
- * Returns 1 if matches, 0 otherwise
- */
-static int
-xmlGzfileMatch (const char *filename ATTRIBUTE_UNUSED) {
- return(1);
-}
-
-/**
- * xmlGzfileOpen_real:
- * @filename: the URI for matching
- *
- * input from compressed file open
- * if @filename is " " then the standard input is used
- *
- * Returns an I/O context or NULL in case of error
- */
-static void *
-xmlGzfileOpen_real (const char *filename) {
- const char *path = NULL;
- gzFile fd;
-
- if (!strcmp(filename, "-")) {
- int duped_fd = dup(fileno(stdin));
- fd = gzdopen(duped_fd, "rb");
- if (fd == Z_NULL && duped_fd >= 0) {
- close(duped_fd); /* gzdOpen() does not close on failure */
- }
-
- return((void *) fd);
- }
-
- if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17))
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[17];
-#else
- path = &filename[16];
-#endif
- else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[8];
-#else
- path = &filename[7];
-#endif
- } else
- path = filename;
-
- if (path == NULL)
- return(NULL);
- if (!xmlCheckFilename(path))
- return(NULL);
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- fd = xmlWrapGzOpen(path, "rb");
-#else
- fd = gzopen(path, "rb");
-#endif
- return((void *) fd);
-}
-
-/**
- * xmlGzfileOpen:
- * @filename: the URI for matching
- *
- * Wrapper around xmlGzfileOpen if the open fais, it will
- * try to unescape @filename
- */
-static void *
-xmlGzfileOpen (const char *filename) {
- char *unescaped;
- void *retval;
-
- retval = xmlGzfileOpen_real(filename);
- if (retval == NULL) {
- unescaped = xmlURIUnescapeString(filename, 0, NULL);
- if (unescaped != NULL) {
- retval = xmlGzfileOpen_real(unescaped);
- }
- xmlFree(unescaped);
- }
- return retval;
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlGzfileOpenW:
- * @filename: the URI for matching
- * @compression: the compression factor (0 - 9 included)
- *
- * input from compressed file open
- * if @filename is " " then the standard input is used
- *
- * Returns an I/O context or NULL in case of error
- */
-static void *
-xmlGzfileOpenW (const char *filename, int compression) {
- const char *path = NULL;
- char mode[15];
- gzFile fd;
-
- snprintf(mode, sizeof(mode), "wb%d", compression);
- if (!strcmp(filename, "-")) {
- int duped_fd = dup(fileno(stdout));
- fd = gzdopen(duped_fd, "rb");
- if (fd == Z_NULL && duped_fd >= 0) {
- close(duped_fd); /* gzdOpen() does not close on failure */
- }
-
- return((void *) fd);
- }
-
- if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17))
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[17];
-#else
- path = &filename[16];
-#endif
- else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &filename[8];
-#else
- path = &filename[7];
-#endif
- } else
- path = filename;
-
- if (path == NULL)
- return(NULL);
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- fd = xmlWrapGzOpen(path, mode);
-#else
- fd = gzopen(path, mode);
-#endif
- return((void *) fd);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlGzfileRead:
- * @context: the I/O context
- * @buffer: where to drop data
- * @len: number of bytes to write
- *
- * Read @len bytes to @buffer from the compressed I/O channel.
- *
- * Returns the number of bytes written
- */
-static int
-xmlGzfileRead (void * context, char * buffer, int len) {
- int ret;
-
- ret = gzread((gzFile) context, &buffer[0], len);
- if (ret < 0) xmlIOErr(0, "gzread()");
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlGzfileWrite:
- * @context: the I/O context
- * @buffer: where to drop data
- * @len: number of bytes to write
- *
- * Write @len bytes from @buffer to the compressed I/O channel.
- *
- * Returns the number of bytes written
- */
-static int
-xmlGzfileWrite (void * context, const char * buffer, int len) {
- int ret;
-
- ret = gzwrite((gzFile) context, (char *) &buffer[0], len);
- if (ret < 0) xmlIOErr(0, "gzwrite()");
- return(ret);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlGzfileClose:
- * @context: the I/O context
- *
- * Close a compressed I/O channel
- */
-static int
-xmlGzfileClose (void * context) {
- int ret;
-
- ret = (gzclose((gzFile) context) == Z_OK ) ? 0 : -1;
- if (ret < 0) xmlIOErr(0, "gzclose()");
- return(ret);
-}
-#endif /* HAVE_ZLIB_H */
-
-#ifdef LIBXML_LZMA_ENABLED
-/************************************************************************
- * *
- * I/O for compressed file accesses *
- * *
- ************************************************************************/
-#include "xzlib.h"
-/**
- * xmlXzfileMatch:
- * @filename: the URI for matching
- *
- * input from compressed file test
- *
- * Returns 1 if matches, 0 otherwise
- */
-static int
-xmlXzfileMatch (const char *filename ATTRIBUTE_UNUSED) {
- return(1);
-}
-
-/**
- * xmlXzFileOpen_real:
- * @filename: the URI for matching
- *
- * input from compressed file open
- * if @filename is " " then the standard input is used
- *
- * Returns an I/O context or NULL in case of error
- */
-static void *
-xmlXzfileOpen_real (const char *filename) {
- const char *path = NULL;
- xzFile fd;
-
- if (!strcmp(filename, "-")) {
- fd = __libxml2_xzdopen(dup(fileno(stdin)), "rb");
- return((void *) fd);
- }
-
- if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file://localhost/", 17)) {
- path = &filename[16];
- } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:///", 8)) {
- path = &filename[7];
- } else if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "file:/", 6)) {
- /* lots of generators seems to lazy to read RFC 1738 */
- path = &filename[5];
- } else
- path = filename;
-
- if (path == NULL)
- return(NULL);
- if (!xmlCheckFilename(path))
- return(NULL);
-
- fd = __libxml2_xzopen(path, "rb");
- return((void *) fd);
-}
-
-/**
- * xmlXzfileOpen:
- * @filename: the URI for matching
- *
- * Wrapper around xmlXzfileOpen_real that try it with an unescaped
- * version of @filename, if this fails fallback to @filename
- *
- * Returns a handler or NULL in case or failure
- */
-static void *
-xmlXzfileOpen (const char *filename) {
- char *unescaped;
- void *retval;
-
- retval = xmlXzfileOpen_real(filename);
- if (retval == NULL) {
- unescaped = xmlURIUnescapeString(filename, 0, NULL);
- if (unescaped != NULL) {
- retval = xmlXzfileOpen_real(unescaped);
- }
- xmlFree(unescaped);
- }
-
- return retval;
-}
-
-/**
- * xmlXzfileRead:
- * @context: the I/O context
- * @buffer: where to drop data
- * @len: number of bytes to write
- *
- * Read @len bytes to @buffer from the compressed I/O channel.
- *
- * Returns the number of bytes written
- */
-static int
-xmlXzfileRead (void * context, char * buffer, int len) {
- int ret;
-
- ret = __libxml2_xzread((xzFile) context, &buffer[0], len);
- if (ret < 0) xmlIOErr(0, "xzread()");
- return(ret);
-}
-
-/**
- * xmlXzfileClose:
- * @context: the I/O context
- *
- * Close a compressed I/O channel
- */
-static int
-xmlXzfileClose (void * context) {
- int ret;
-
- ret = (__libxml2_xzclose((xzFile) context) == LZMA_OK ) ? 0 : -1;
- if (ret < 0) xmlIOErr(0, "xzclose()");
- return(ret);
-}
-#endif /* LIBXML_LZMA_ENABLED */
-
-#ifdef LIBXML_HTTP_ENABLED
-/************************************************************************
- * *
- * I/O for HTTP file accesses *
- * *
- ************************************************************************/
-
-#ifdef LIBXML_OUTPUT_ENABLED
-typedef struct xmlIOHTTPWriteCtxt_
-{
- int compression;
-
- char * uri;
-
- void * doc_buff;
-
-} xmlIOHTTPWriteCtxt, *xmlIOHTTPWriteCtxtPtr;
-
-#ifdef HAVE_ZLIB_H
-
-#define DFLT_WBITS ( -15 )
-#define DFLT_MEM_LVL ( 8 )
-#define GZ_MAGIC1 ( 0x1f )
-#define GZ_MAGIC2 ( 0x8b )
-#define LXML_ZLIB_OS_CODE ( 0x03 )
-#define INIT_HTTP_BUFF_SIZE ( 32768 )
-#define DFLT_ZLIB_RATIO ( 5 )
-
-/*
-** Data structure and functions to work with sending compressed data
-** via HTTP.
-*/
-
-typedef struct xmlZMemBuff_
-{
- unsigned long size;
- unsigned long crc;
-
- unsigned char * zbuff;
- z_stream zctrl;
-
-} xmlZMemBuff, *xmlZMemBuffPtr;
-
-/**
- * append_reverse_ulong
- * @buff: Compressed memory buffer
- * @data: Unsigned long to append
- *
- * Append a unsigned long in reverse byte order to the end of the
- * memory buffer.
- */
-static void
-append_reverse_ulong( xmlZMemBuff * buff, unsigned long data ) {
-
- int idx;
-
- if ( buff == NULL )
- return;
-
- /*
- ** This is plagiarized from putLong in gzio.c (zlib source) where
- ** the number "4" is hardcoded. If zlib is ever patched to
- ** support 64 bit file sizes, this code would need to be patched
- ** as well.
- */
-
- for ( idx = 0; idx < 4; idx++ ) {
- *buff->zctrl.next_out = ( data & 0xff );
- data >>= 8;
- buff->zctrl.next_out++;
- }
-
- return;
-}
-
-/**
- *
- * xmlFreeZMemBuff
- * @buff: The memory buffer context to clear
- *
- * Release all the resources associated with the compressed memory buffer.
- */
-static void
-xmlFreeZMemBuff( xmlZMemBuffPtr buff ) {
-
-#ifdef DEBUG_HTTP
- int z_err;
-#endif
-
- if ( buff == NULL )
- return;
-
- xmlFree( buff->zbuff );
-#ifdef DEBUG_HTTP
- z_err = deflateEnd( &buff->zctrl );
- if ( z_err != Z_OK )
- xmlGenericError( xmlGenericErrorContext,
- "xmlFreeZMemBuff: Error releasing zlib context: %d\n",
- z_err );
-#else
- deflateEnd( &buff->zctrl );
-#endif
-
- xmlFree( buff );
- return;
-}
-
-/**
- * xmlCreateZMemBuff
- *@compression: Compression value to use
- *
- * Create a memory buffer to hold the compressed XML document. The
- * compressed document in memory will end up being identical to what
- * would be created if gzopen/gzwrite/gzclose were being used to
- * write the document to disk. The code for the header/trailer data to
- * the compression is plagiarized from the zlib source files.
- */
-static void *
-xmlCreateZMemBuff( int compression ) {
-
- int z_err;
- int hdr_lgth;
- xmlZMemBuffPtr buff = NULL;
-
- if ( ( compression < 1 ) || ( compression > 9 ) )
- return ( NULL );
-
- /* Create the control and data areas */
-
- buff = xmlMalloc( sizeof( xmlZMemBuff ) );
- if ( buff == NULL ) {
- xmlIOErrMemory("creating buffer context");
- return ( NULL );
- }
-
- (void)memset( buff, 0, sizeof( xmlZMemBuff ) );
- buff->size = INIT_HTTP_BUFF_SIZE;
- buff->zbuff = xmlMalloc( buff->size );
- if ( buff->zbuff == NULL ) {
- xmlFreeZMemBuff( buff );
- xmlIOErrMemory("creating buffer");
- return ( NULL );
- }
-
- z_err = deflateInit2( &buff->zctrl, compression, Z_DEFLATED,
- DFLT_WBITS, DFLT_MEM_LVL, Z_DEFAULT_STRATEGY );
- if ( z_err != Z_OK ) {
- xmlChar msg[500];
- xmlFreeZMemBuff( buff );
- buff = NULL;
- xmlStrPrintf(msg, 500,
- "xmlCreateZMemBuff: %s %d\n",
- "Error initializing compression context. ZLIB error:",
- z_err );
- xmlIOErr(XML_IO_WRITE, (const char *) msg);
- return ( NULL );
- }
-
- /* Set the header data. The CRC will be needed for the trailer */
- buff->crc = crc32( 0L, NULL, 0 );
- hdr_lgth = snprintf( (char *)buff->zbuff, buff->size,
- "%c%c%c%c%c%c%c%c%c%c",
- GZ_MAGIC1, GZ_MAGIC2, Z_DEFLATED,
- 0, 0, 0, 0, 0, 0, LXML_ZLIB_OS_CODE );
- buff->zctrl.next_out = buff->zbuff + hdr_lgth;
- buff->zctrl.avail_out = buff->size - hdr_lgth;
-
- return ( buff );
-}
-
-/**
- * xmlZMemBuffExtend
- * @buff: Buffer used to compress and consolidate data.
- * @ext_amt: Number of bytes to extend the buffer.
- *
- * Extend the internal buffer used to store the compressed data by the
- * specified amount.
- *
- * Returns 0 on success or -1 on failure to extend the buffer. On failure
- * the original buffer still exists at the original size.
- */
-static int
-xmlZMemBuffExtend( xmlZMemBuffPtr buff, size_t ext_amt ) {
-
- int rc = -1;
- size_t new_size;
- size_t cur_used;
-
- unsigned char * tmp_ptr = NULL;
-
- if ( buff == NULL )
- return ( -1 );
-
- else if ( ext_amt == 0 )
- return ( 0 );
-
- cur_used = buff->zctrl.next_out - buff->zbuff;
- new_size = buff->size + ext_amt;
-
-#ifdef DEBUG_HTTP
- if ( cur_used > new_size )
- xmlGenericError( xmlGenericErrorContext,
- "xmlZMemBuffExtend: %s\n%s %d bytes.\n",
- "Buffer overwrite detected during compressed memory",
- "buffer extension. Overflowed by",
- (cur_used - new_size ) );
-#endif
-
- tmp_ptr = xmlRealloc( buff->zbuff, new_size );
- if ( tmp_ptr != NULL ) {
- rc = 0;
- buff->size = new_size;
- buff->zbuff = tmp_ptr;
- buff->zctrl.next_out = tmp_ptr + cur_used;
- buff->zctrl.avail_out = new_size - cur_used;
- }
- else {
- xmlChar msg[500];
- xmlStrPrintf(msg, 500,
- "xmlZMemBuffExtend: %s %lu bytes.\n",
- "Allocation failure extending output buffer to",
- (unsigned long) new_size );
- xmlIOErr(XML_IO_WRITE, (const char *) msg);
- }
-
- return ( rc );
-}
-
-/**
- * xmlZMemBuffAppend
- * @buff: Buffer used to compress and consolidate data
- * @src: Uncompressed source content to append to buffer
- * @len: Length of source data to append to buffer
- *
- * Compress and append data to the internal buffer. The data buffer
- * will be expanded if needed to store the additional data.
- *
- * Returns the number of bytes appended to the buffer or -1 on error.
- */
-static int
-xmlZMemBuffAppend( xmlZMemBuffPtr buff, const char * src, int len ) {
-
- int z_err;
- size_t min_accept;
-
- if ( ( buff == NULL ) || ( src == NULL ) )
- return ( -1 );
-
- buff->zctrl.avail_in = len;
- buff->zctrl.next_in = (unsigned char *)src;
- while ( buff->zctrl.avail_in > 0 ) {
- /*
- ** Extend the buffer prior to deflate call if a reasonable amount
- ** of output buffer space is not available.
- */
- min_accept = buff->zctrl.avail_in / DFLT_ZLIB_RATIO;
- if ( buff->zctrl.avail_out <= min_accept ) {
- if ( xmlZMemBuffExtend( buff, buff->size ) == -1 )
- return ( -1 );
- }
-
- z_err = deflate( &buff->zctrl, Z_NO_FLUSH );
- if ( z_err != Z_OK ) {
- xmlChar msg[500];
- xmlStrPrintf(msg, 500,
- "xmlZMemBuffAppend: %s %d %s - %d",
- "Compression error while appending",
- len, "bytes to buffer. ZLIB error", z_err );
- xmlIOErr(XML_IO_WRITE, (const char *) msg);
- return ( -1 );
- }
- }
-
- buff->crc = crc32( buff->crc, (unsigned char *)src, len );
-
- return ( len );
-}
-
-/**
- * xmlZMemBuffGetContent
- * @buff: Compressed memory content buffer
- * @data_ref: Pointer reference to point to compressed content
- *
- * Flushes the compression buffers, appends gzip file trailers and
- * returns the compressed content and length of the compressed data.
- * NOTE: The gzip trailer code here is plagiarized from zlib source.
- *
- * Returns the length of the compressed data or -1 on error.
- */
-static int
-xmlZMemBuffGetContent( xmlZMemBuffPtr buff, char ** data_ref ) {
-
- int zlgth = -1;
- int z_err;
-
- if ( ( buff == NULL ) || ( data_ref == NULL ) )
- return ( -1 );
-
- /* Need to loop until compression output buffers are flushed */
-
- do
- {
- z_err = deflate( &buff->zctrl, Z_FINISH );
- if ( z_err == Z_OK ) {
- /* In this case Z_OK means more buffer space needed */
-
- if ( xmlZMemBuffExtend( buff, buff->size ) == -1 )
- return ( -1 );
- }
- }
- while ( z_err == Z_OK );
-
- /* If the compression state is not Z_STREAM_END, some error occurred */
-
- if ( z_err == Z_STREAM_END ) {
-
- /* Need to append the gzip data trailer */
-
- if ( buff->zctrl.avail_out < ( 2 * sizeof( unsigned long ) ) ) {
- if ( xmlZMemBuffExtend(buff, (2 * sizeof(unsigned long))) == -1 )
- return ( -1 );
- }
-
- /*
- ** For whatever reason, the CRC and length data are pushed out
- ** in reverse byte order. So a memcpy can't be used here.
- */
-
- append_reverse_ulong( buff, buff->crc );
- append_reverse_ulong( buff, buff->zctrl.total_in );
-
- zlgth = buff->zctrl.next_out - buff->zbuff;
- *data_ref = (char *)buff->zbuff;
- }
-
- else {
- xmlChar msg[500];
- xmlStrPrintf(msg, 500,
- "xmlZMemBuffGetContent: %s - %d\n",
- "Error flushing zlib buffers. Error code", z_err );
- xmlIOErr(XML_IO_WRITE, (const char *) msg);
- }
-
- return ( zlgth );
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-#endif /* HAVE_ZLIB_H */
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlFreeHTTPWriteCtxt
- * @ctxt: Context to cleanup
- *
- * Free allocated memory and reclaim system resources.
- *
- * No return value.
- */
-static void
-xmlFreeHTTPWriteCtxt( xmlIOHTTPWriteCtxtPtr ctxt )
-{
- if ( ctxt->uri != NULL )
- xmlFree( ctxt->uri );
-
- if ( ctxt->doc_buff != NULL ) {
-
-#ifdef HAVE_ZLIB_H
- if ( ctxt->compression > 0 ) {
- xmlFreeZMemBuff( ctxt->doc_buff );
- }
- else
-#endif
- {
- xmlOutputBufferClose( ctxt->doc_buff );
- }
- }
-
- xmlFree( ctxt );
- return;
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-
-/**
- * xmlIOHTTPMatch:
- * @filename: the URI for matching
- *
- * check if the URI matches an HTTP one
- *
- * Returns 1 if matches, 0 otherwise
- */
-int
-xmlIOHTTPMatch (const char *filename) {
- if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "http://", 7))
- return(1);
- return(0);
-}
-
-/**
- * xmlIOHTTPOpen:
- * @filename: the URI for matching
- *
- * open an HTTP I/O channel
- *
- * Returns an I/O context or NULL in case of error
- */
-void *
-xmlIOHTTPOpen (const char *filename) {
- return(xmlNanoHTTPOpen(filename, NULL));
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlIOHTTPOpenW:
- * @post_uri: The destination URI for the document
- * @compression: The compression desired for the document.
- *
- * Open a temporary buffer to collect the document for a subsequent HTTP POST
- * request. Non-static as is called from the output buffer creation routine.
- *
- * Returns an I/O context or NULL in case of error.
- */
-
-void *
-xmlIOHTTPOpenW(const char *post_uri, int compression)
-{
-
- xmlIOHTTPWriteCtxtPtr ctxt = NULL;
-
- if (post_uri == NULL)
- return (NULL);
-
- ctxt = xmlMalloc(sizeof(xmlIOHTTPWriteCtxt));
- if (ctxt == NULL) {
- xmlIOErrMemory("creating HTTP output context");
- return (NULL);
- }
-
- (void) memset(ctxt, 0, sizeof(xmlIOHTTPWriteCtxt));
-
- ctxt->uri = (char *) xmlStrdup((const xmlChar *)post_uri);
- if (ctxt->uri == NULL) {
- xmlIOErrMemory("copying URI");
- xmlFreeHTTPWriteCtxt(ctxt);
- return (NULL);
- }
-
- /*
- * ** Since the document length is required for an HTTP post,
- * ** need to put the document into a buffer. A memory buffer
- * ** is being used to avoid pushing the data to disk and back.
- */
-
-#ifdef HAVE_ZLIB_H
- if ((compression > 0) && (compression <= 9)) {
-
- ctxt->compression = compression;
- ctxt->doc_buff = xmlCreateZMemBuff(compression);
- } else
-#endif
- {
- /* Any character conversions should have been done before this */
-
- ctxt->doc_buff = xmlAllocOutputBufferInternal(NULL);
- }
-
- if (ctxt->doc_buff == NULL) {
- xmlFreeHTTPWriteCtxt(ctxt);
- ctxt = NULL;
- }
-
- return (ctxt);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlIOHTTPDfltOpenW
- * @post_uri: The destination URI for this document.
- *
- * Calls xmlIOHTTPOpenW with no compression to set up for a subsequent
- * HTTP post command. This function should generally not be used as
- * the open callback is short circuited in xmlOutputBufferCreateFile.
- *
- * Returns a pointer to the new IO context.
- */
-static void *
-xmlIOHTTPDfltOpenW( const char * post_uri ) {
- return ( xmlIOHTTPOpenW( post_uri, 0 ) );
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlIOHTTPRead:
- * @context: the I/O context
- * @buffer: where to drop data
- * @len: number of bytes to write
- *
- * Read @len bytes to @buffer from the I/O channel.
- *
- * Returns the number of bytes written
- */
-int
-xmlIOHTTPRead(void * context, char * buffer, int len) {
- if ((buffer == NULL) || (len < 0)) return(-1);
- return(xmlNanoHTTPRead(context, &buffer[0], len));
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlIOHTTPWrite
- * @context: previously opened writing context
- * @buffer: data to output to temporary buffer
- * @len: bytes to output
- *
- * Collect data from memory buffer into a temporary file for later
- * processing.
- *
- * Returns number of bytes written.
- */
-
-static int
-xmlIOHTTPWrite( void * context, const char * buffer, int len ) {
-
- xmlIOHTTPWriteCtxtPtr ctxt = context;
-
- if ( ( ctxt == NULL ) || ( ctxt->doc_buff == NULL ) || ( buffer == NULL ) )
- return ( -1 );
-
- if ( len > 0 ) {
-
- /* Use gzwrite or fwrite as previously setup in the open call */
-
-#ifdef HAVE_ZLIB_H
- if ( ctxt->compression > 0 )
- len = xmlZMemBuffAppend( ctxt->doc_buff, buffer, len );
-
- else
-#endif
- len = xmlOutputBufferWrite( ctxt->doc_buff, len, buffer );
-
- if ( len < 0 ) {
- xmlChar msg[500];
- xmlStrPrintf(msg, 500,
- "xmlIOHTTPWrite: %s\n%s '%s'.\n",
- "Error appending to internal buffer.",
- "Error sending document to URI",
- ctxt->uri );
- xmlIOErr(XML_IO_WRITE, (const char *) msg);
- }
- }
-
- return ( len );
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-
-/**
- * xmlIOHTTPClose:
- * @context: the I/O context
- *
- * Close an HTTP I/O channel
- *
- * Returns 0
- */
-int
-xmlIOHTTPClose (void * context) {
- xmlNanoHTTPClose(context);
- return 0;
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlIOHTTCloseWrite
- * @context: The I/O context
- * @http_mthd: The HTTP method to be used when sending the data
- *
- * Close the transmit HTTP I/O channel and actually send the data.
- */
-static int
-xmlIOHTTPCloseWrite( void * context, const char * http_mthd ) {
-
- int close_rc = -1;
- int http_rtn = 0;
- int content_lgth = 0;
- xmlIOHTTPWriteCtxtPtr ctxt = context;
-
- char * http_content = NULL;
- char * content_encoding = NULL;
- char * content_type = (char *) "text/xml";
- void * http_ctxt = NULL;
-
- if ( ( ctxt == NULL ) || ( http_mthd == NULL ) )
- return ( -1 );
-
- /* Retrieve the content from the appropriate buffer */
-
-#ifdef HAVE_ZLIB_H
-
- if ( ctxt->compression > 0 ) {
- content_lgth = xmlZMemBuffGetContent( ctxt->doc_buff, &http_content );
- content_encoding = (char *) "Content-Encoding: gzip";
- }
- else
-#endif
- {
- /* Pull the data out of the memory output buffer */
-
- xmlOutputBufferPtr dctxt = ctxt->doc_buff;
- http_content = (char *) xmlBufContent(dctxt->buffer);
- content_lgth = xmlBufUse(dctxt->buffer);
- }
-
- if ( http_content == NULL ) {
- xmlChar msg[500];
- xmlStrPrintf(msg, 500,
- "xmlIOHTTPCloseWrite: %s '%s' %s '%s'.\n",
- "Error retrieving content.\nUnable to",
- http_mthd, "data to URI", ctxt->uri );
- xmlIOErr(XML_IO_WRITE, (const char *) msg);
- }
-
- else {
-
- http_ctxt = xmlNanoHTTPMethod( ctxt->uri, http_mthd, http_content,
- &content_type, content_encoding,
- content_lgth );
-
- if ( http_ctxt != NULL ) {
-#ifdef DEBUG_HTTP
- /* If testing/debugging - dump reply with request content */
-
- FILE * tst_file = NULL;
- char buffer[ 4096 ];
- char * dump_name = NULL;
- int avail;
-
- xmlGenericError( xmlGenericErrorContext,
- "xmlNanoHTTPCloseWrite: HTTP %s to\n%s returned %d.\n",
- http_mthd, ctxt->uri,
- xmlNanoHTTPReturnCode( http_ctxt ) );
-
- /*
- ** Since either content or reply may be gzipped,
- ** dump them to separate files instead of the
- ** standard error context.
- */
-
- dump_name = tempnam( NULL, "lxml" );
- if ( dump_name != NULL ) {
- (void)snprintf( buffer, sizeof(buffer), "%s.content", dump_name );
-
- tst_file = fopen( buffer, "wb" );
- if ( tst_file != NULL ) {
- xmlGenericError( xmlGenericErrorContext,
- "Transmitted content saved in file: %s\n", buffer );
-
- fwrite( http_content, sizeof( char ),
- content_lgth, tst_file );
- fclose( tst_file );
- }
-
- (void)snprintf( buffer, sizeof(buffer), "%s.reply", dump_name );
- tst_file = fopen( buffer, "wb" );
- if ( tst_file != NULL ) {
- xmlGenericError( xmlGenericErrorContext,
- "Reply content saved in file: %s\n", buffer );
-
-
- while ( (avail = xmlNanoHTTPRead( http_ctxt,
- buffer, sizeof( buffer ) )) > 0 ) {
-
- fwrite( buffer, sizeof( char ), avail, tst_file );
- }
-
- fclose( tst_file );
- }
-
- free( dump_name );
- }
-#endif /* DEBUG_HTTP */
-
- http_rtn = xmlNanoHTTPReturnCode( http_ctxt );
- if ( ( http_rtn >= 200 ) && ( http_rtn < 300 ) )
- close_rc = 0;
- else {
- xmlChar msg[500];
- xmlStrPrintf(msg, 500,
- "xmlIOHTTPCloseWrite: HTTP '%s' of %d %s\n'%s' %s %d\n",
- http_mthd, content_lgth,
- "bytes to URI", ctxt->uri,
- "failed. HTTP return code:", http_rtn );
- xmlIOErr(XML_IO_WRITE, (const char *) msg);
- }
-
- xmlNanoHTTPClose( http_ctxt );
- xmlFree( content_type );
- }
- }
-
- /* Final cleanups */
-
- xmlFreeHTTPWriteCtxt( ctxt );
-
- return ( close_rc );
-}
-
-/**
- * xmlIOHTTPClosePut
- *
- * @context: The I/O context
- *
- * Close the transmit HTTP I/O channel and actually send data using a PUT
- * HTTP method.
- */
-static int
-xmlIOHTTPClosePut( void * ctxt ) {
- return ( xmlIOHTTPCloseWrite( ctxt, "PUT" ) );
-}
-
-
-/**
- * xmlIOHTTPClosePost
- *
- * @context: The I/O context
- *
- * Close the transmit HTTP I/O channel and actually send data using a POST
- * HTTP method.
- */
-static int
-xmlIOHTTPClosePost( void * ctxt ) {
- return ( xmlIOHTTPCloseWrite( ctxt, "POST" ) );
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#endif /* LIBXML_HTTP_ENABLED */
-
-#ifdef LIBXML_FTP_ENABLED
-/************************************************************************
- * *
- * I/O for FTP file accesses *
- * *
- ************************************************************************/
-/**
- * xmlIOFTPMatch:
- * @filename: the URI for matching
- *
- * check if the URI matches an FTP one
- *
- * Returns 1 if matches, 0 otherwise
- */
-int
-xmlIOFTPMatch (const char *filename) {
- if (!xmlStrncasecmp(BAD_CAST filename, BAD_CAST "ftp://", 6))
- return(1);
- return(0);
-}
-
-/**
- * xmlIOFTPOpen:
- * @filename: the URI for matching
- *
- * open an FTP I/O channel
- *
- * Returns an I/O context or NULL in case of error
- */
-void *
-xmlIOFTPOpen (const char *filename) {
- return(xmlNanoFTPOpen(filename));
-}
-
-/**
- * xmlIOFTPRead:
- * @context: the I/O context
- * @buffer: where to drop data
- * @len: number of bytes to write
- *
- * Read @len bytes to @buffer from the I/O channel.
- *
- * Returns the number of bytes written
- */
-int
-xmlIOFTPRead(void * context, char * buffer, int len) {
- if ((buffer == NULL) || (len < 0)) return(-1);
- return(xmlNanoFTPRead(context, &buffer[0], len));
-}
-
-/**
- * xmlIOFTPClose:
- * @context: the I/O context
- *
- * Close an FTP I/O channel
- *
- * Returns 0
- */
-int
-xmlIOFTPClose (void * context) {
- return ( xmlNanoFTPClose(context) );
-}
-#endif /* LIBXML_FTP_ENABLED */
-
-
-/**
- * xmlRegisterInputCallbacks:
- * @matchFunc: the xmlInputMatchCallback
- * @openFunc: the xmlInputOpenCallback
- * @readFunc: the xmlInputReadCallback
- * @closeFunc: the xmlInputCloseCallback
- *
- * Register a new set of I/O callback for handling parser input.
- *
- * Returns the registered handler number or -1 in case of error
- */
-int
-xmlRegisterInputCallbacks(xmlInputMatchCallback matchFunc,
- xmlInputOpenCallback openFunc, xmlInputReadCallback readFunc,
- xmlInputCloseCallback closeFunc) {
- if (xmlInputCallbackNr >= MAX_INPUT_CALLBACK) {
- return(-1);
- }
- xmlInputCallbackTable[xmlInputCallbackNr].matchcallback = matchFunc;
- xmlInputCallbackTable[xmlInputCallbackNr].opencallback = openFunc;
- xmlInputCallbackTable[xmlInputCallbackNr].readcallback = readFunc;
- xmlInputCallbackTable[xmlInputCallbackNr].closecallback = closeFunc;
- xmlInputCallbackInitialized = 1;
- return(xmlInputCallbackNr++);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlRegisterOutputCallbacks:
- * @matchFunc: the xmlOutputMatchCallback
- * @openFunc: the xmlOutputOpenCallback
- * @writeFunc: the xmlOutputWriteCallback
- * @closeFunc: the xmlOutputCloseCallback
- *
- * Register a new set of I/O callback for handling output.
- *
- * Returns the registered handler number or -1 in case of error
- */
-int
-xmlRegisterOutputCallbacks(xmlOutputMatchCallback matchFunc,
- xmlOutputOpenCallback openFunc, xmlOutputWriteCallback writeFunc,
- xmlOutputCloseCallback closeFunc) {
- if (xmlOutputCallbackNr >= MAX_OUTPUT_CALLBACK) {
- return(-1);
- }
- xmlOutputCallbackTable[xmlOutputCallbackNr].matchcallback = matchFunc;
- xmlOutputCallbackTable[xmlOutputCallbackNr].opencallback = openFunc;
- xmlOutputCallbackTable[xmlOutputCallbackNr].writecallback = writeFunc;
- xmlOutputCallbackTable[xmlOutputCallbackNr].closecallback = closeFunc;
- xmlOutputCallbackInitialized = 1;
- return(xmlOutputCallbackNr++);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlRegisterDefaultInputCallbacks:
- *
- * Registers the default compiled-in I/O handlers.
- */
-void
-xmlRegisterDefaultInputCallbacks(void) {
- if (xmlInputCallbackInitialized)
- return;
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- xmlInitPlatformSpecificIo();
-#endif
-
- xmlRegisterInputCallbacks(xmlFileMatch, xmlFileOpen,
- xmlFileRead, xmlFileClose);
-#ifdef HAVE_ZLIB_H
- xmlRegisterInputCallbacks(xmlGzfileMatch, xmlGzfileOpen,
- xmlGzfileRead, xmlGzfileClose);
-#endif /* HAVE_ZLIB_H */
-#ifdef LIBXML_LZMA_ENABLED
- xmlRegisterInputCallbacks(xmlXzfileMatch, xmlXzfileOpen,
- xmlXzfileRead, xmlXzfileClose);
-#endif /* LIBXML_LZMA_ENABLED */
-
-#ifdef LIBXML_HTTP_ENABLED
- xmlRegisterInputCallbacks(xmlIOHTTPMatch, xmlIOHTTPOpen,
- xmlIOHTTPRead, xmlIOHTTPClose);
-#endif /* LIBXML_HTTP_ENABLED */
-
-#ifdef LIBXML_FTP_ENABLED
- xmlRegisterInputCallbacks(xmlIOFTPMatch, xmlIOFTPOpen,
- xmlIOFTPRead, xmlIOFTPClose);
-#endif /* LIBXML_FTP_ENABLED */
- xmlInputCallbackInitialized = 1;
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlRegisterDefaultOutputCallbacks:
- *
- * Registers the default compiled-in I/O handlers.
- */
-void
-xmlRegisterDefaultOutputCallbacks (void) {
- if (xmlOutputCallbackInitialized)
- return;
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- xmlInitPlatformSpecificIo();
-#endif
-
- xmlRegisterOutputCallbacks(xmlFileMatch, xmlFileOpenW,
- xmlFileWrite, xmlFileClose);
-
-#ifdef LIBXML_HTTP_ENABLED
- xmlRegisterOutputCallbacks(xmlIOHTTPMatch, xmlIOHTTPDfltOpenW,
- xmlIOHTTPWrite, xmlIOHTTPClosePut);
-#endif
-
-/*********************************
- No way a-priori to distinguish between gzipped files from
- uncompressed ones except opening if existing then closing
- and saving with same compression ratio ... a pain.
-
-#ifdef HAVE_ZLIB_H
- xmlRegisterOutputCallbacks(xmlGzfileMatch, xmlGzfileOpen,
- xmlGzfileWrite, xmlGzfileClose);
-#endif
-
- Nor FTP PUT ....
-#ifdef LIBXML_FTP_ENABLED
- xmlRegisterOutputCallbacks(xmlIOFTPMatch, xmlIOFTPOpen,
- xmlIOFTPWrite, xmlIOFTPClose);
-#endif
- **********************************/
- xmlOutputCallbackInitialized = 1;
-}
-
-#ifdef LIBXML_HTTP_ENABLED
-/**
- * xmlRegisterHTTPPostCallbacks:
- *
- * By default, libxml submits HTTP output requests using the "PUT" method.
- * Calling this method changes the HTTP output method to use the "POST"
- * method instead.
- *
- */
-void
-xmlRegisterHTTPPostCallbacks( void ) {
-
- /* Register defaults if not done previously */
-
- if ( xmlOutputCallbackInitialized == 0 )
- xmlRegisterDefaultOutputCallbacks( );
-
- xmlRegisterOutputCallbacks(xmlIOHTTPMatch, xmlIOHTTPDfltOpenW,
- xmlIOHTTPWrite, xmlIOHTTPClosePost);
- return;
-}
-#endif
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlAllocParserInputBuffer:
- * @enc: the charset encoding if known
- *
- * Create a buffered parser input for progressive parsing
- *
- * Returns the new parser input or NULL
- */
-xmlParserInputBufferPtr
-xmlAllocParserInputBuffer(xmlCharEncoding enc) {
- xmlParserInputBufferPtr ret;
-
- ret = (xmlParserInputBufferPtr) xmlMalloc(sizeof(xmlParserInputBuffer));
- if (ret == NULL) {
- xmlIOErrMemory("creating input buffer");
- return(NULL);
- }
- memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer));
- ret->buffer = xmlBufCreateSize(2 * xmlDefaultBufferSize);
- if (ret->buffer == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_DOUBLEIT);
- ret->encoder = xmlGetCharEncodingHandler(enc);
- if (ret->encoder != NULL)
- ret->raw = xmlBufCreateSize(2 * xmlDefaultBufferSize);
- else
- ret->raw = NULL;
- ret->readcallback = NULL;
- ret->closecallback = NULL;
- ret->context = NULL;
- ret->compressed = -1;
- ret->rawconsumed = 0;
-
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlAllocOutputBuffer:
- * @encoder: the encoding converter or NULL
- *
- * Create a buffered parser output
- *
- * Returns the new parser output or NULL
- */
-xmlOutputBufferPtr
-xmlAllocOutputBuffer(xmlCharEncodingHandlerPtr encoder) {
- xmlOutputBufferPtr ret;
-
- ret = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer));
- if (ret == NULL) {
- xmlIOErrMemory("creating output buffer");
- return(NULL);
- }
- memset(ret, 0, (size_t) sizeof(xmlOutputBuffer));
- ret->buffer = xmlBufCreate();
- if (ret->buffer == NULL) {
- xmlFree(ret);
- return(NULL);
- }
-
- /* try to avoid a performance problem with Windows realloc() */
- if (xmlBufGetAllocationScheme(ret->buffer) == XML_BUFFER_ALLOC_EXACT)
- xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_DOUBLEIT);
-
- ret->encoder = encoder;
- if (encoder != NULL) {
- ret->conv = xmlBufCreateSize(4000);
- if (ret->conv == NULL) {
- xmlFree(ret);
- return(NULL);
- }
-
- /*
- * This call is designed to initiate the encoder state
- */
- xmlCharEncOutput(ret, 1);
- } else
- ret->conv = NULL;
- ret->writecallback = NULL;
- ret->closecallback = NULL;
- ret->context = NULL;
- ret->written = 0;
-
- return(ret);
-}
-
-/**
- * xmlAllocOutputBufferInternal:
- * @encoder: the encoding converter or NULL
- *
- * Create a buffered parser output
- *
- * Returns the new parser output or NULL
- */
-xmlOutputBufferPtr
-xmlAllocOutputBufferInternal(xmlCharEncodingHandlerPtr encoder) {
- xmlOutputBufferPtr ret;
-
- ret = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer));
- if (ret == NULL) {
- xmlIOErrMemory("creating output buffer");
- return(NULL);
- }
- memset(ret, 0, (size_t) sizeof(xmlOutputBuffer));
- ret->buffer = xmlBufCreate();
- if (ret->buffer == NULL) {
- xmlFree(ret);
- return(NULL);
- }
-
-
- /*
- * For conversion buffers we use the special IO handling
- */
- xmlBufSetAllocationScheme(ret->buffer, XML_BUFFER_ALLOC_IO);
-
- ret->encoder = encoder;
- if (encoder != NULL) {
- ret->conv = xmlBufCreateSize(4000);
- if (ret->conv == NULL) {
- xmlFree(ret);
- return(NULL);
- }
-
- /*
- * This call is designed to initiate the encoder state
- */
- xmlCharEncOutput(ret, 1);
- } else
- ret->conv = NULL;
- ret->writecallback = NULL;
- ret->closecallback = NULL;
- ret->context = NULL;
- ret->written = 0;
-
- return(ret);
-}
-
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlFreeParserInputBuffer:
- * @in: a buffered parser input
- *
- * Free up the memory used by a buffered parser input
- */
-void
-xmlFreeParserInputBuffer(xmlParserInputBufferPtr in) {
- if (in == NULL) return;
-
- if (in->raw) {
- xmlBufFree(in->raw);
- in->raw = NULL;
- }
- if (in->encoder != NULL) {
- xmlCharEncCloseFunc(in->encoder);
- }
- if (in->closecallback != NULL) {
- in->closecallback(in->context);
- }
- if (in->buffer != NULL) {
- xmlBufFree(in->buffer);
- in->buffer = NULL;
- }
-
- xmlFree(in);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlOutputBufferClose:
- * @out: a buffered output
- *
- * flushes and close the output I/O channel
- * and free up all the associated resources
- *
- * Returns the number of byte written or -1 in case of error.
- */
-int
-xmlOutputBufferClose(xmlOutputBufferPtr out)
-{
- int written;
- int err_rc = 0;
-
- if (out == NULL)
- return (-1);
- if (out->writecallback != NULL)
- xmlOutputBufferFlush(out);
- if (out->closecallback != NULL) {
- err_rc = out->closecallback(out->context);
- }
- written = out->written;
- if (out->conv) {
- xmlBufFree(out->conv);
- out->conv = NULL;
- }
- if (out->encoder != NULL) {
- xmlCharEncCloseFunc(out->encoder);
- }
- if (out->buffer != NULL) {
- xmlBufFree(out->buffer);
- out->buffer = NULL;
- }
-
- if (out->error)
- err_rc = -1;
- xmlFree(out);
- return ((err_rc == 0) ? written : err_rc);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-xmlParserInputBufferPtr
-__xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) {
- xmlParserInputBufferPtr ret;
- int i = 0;
- void *context = NULL;
-
- if (xmlInputCallbackInitialized == 0)
- xmlRegisterDefaultInputCallbacks();
-
- if (URI == NULL) return(NULL);
-
- /*
- * Try to find one of the input accept method accepting that scheme
- * Go in reverse to give precedence to user defined handlers.
- */
- if (context == NULL) {
- for (i = xmlInputCallbackNr - 1;i >= 0;i--) {
- if ((xmlInputCallbackTable[i].matchcallback != NULL) &&
- (xmlInputCallbackTable[i].matchcallback(URI) != 0)) {
- context = xmlInputCallbackTable[i].opencallback(URI);
- if (context != NULL) {
- break;
- }
- }
- }
- }
- if (context == NULL) {
- return(NULL);
- }
-
- /*
- * Allocate the Input buffer front-end.
- */
- ret = xmlAllocParserInputBuffer(enc);
- if (ret != NULL) {
- ret->context = context;
- ret->readcallback = xmlInputCallbackTable[i].readcallback;
- ret->closecallback = xmlInputCallbackTable[i].closecallback;
-#ifdef HAVE_ZLIB_H
- if ((xmlInputCallbackTable[i].opencallback == xmlGzfileOpen) &&
- (strcmp(URI, "-") != 0)) {
-#if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1230
- ret->compressed = !gzdirect(context);
-#else
- if (((z_stream *)context)->avail_in > 4) {
- char *cptr, buff4[4];
- cptr = (char *) ((z_stream *)context)->next_in;
- if (gzread(context, buff4, 4) == 4) {
- if (strncmp(buff4, cptr, 4) == 0)
- ret->compressed = 0;
- else
- ret->compressed = 1;
- gzrewind(context);
- }
- }
-#endif
- }
-#endif
-#ifdef LIBXML_LZMA_ENABLED
- if ((xmlInputCallbackTable[i].opencallback == xmlXzfileOpen) &&
- (strcmp(URI, "-") != 0)) {
- ret->compressed = __libxml2_xzcompressed(context);
- }
-#endif
- }
- else
- xmlInputCallbackTable[i].closecallback (context);
-
- return(ret);
-}
-
-/**
- * xmlParserInputBufferCreateFilename:
- * @URI: a C string containing the URI or filename
- * @enc: the charset encoding if known
- *
- * Create a buffered parser input for the progressive parsing of a file
- * If filename is "-' then we use stdin as the input.
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time.
- * Do an encoding check if enc == XML_CHAR_ENCODING_NONE
- *
- * Returns the new parser input or NULL
- */
-xmlParserInputBufferPtr
-xmlParserInputBufferCreateFilename(const char *URI, xmlCharEncoding enc) {
- if ((xmlParserInputBufferCreateFilenameValue)) {
- return xmlParserInputBufferCreateFilenameValue(URI, enc);
- }
- return __xmlParserInputBufferCreateFilename(URI, enc);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-xmlOutputBufferPtr
-__xmlOutputBufferCreateFilename(const char *URI,
- xmlCharEncodingHandlerPtr encoder,
- int compression ATTRIBUTE_UNUSED) {
- xmlOutputBufferPtr ret;
- xmlURIPtr puri;
- int i = 0;
- void *context = NULL;
- char *unescaped = NULL;
-#ifdef HAVE_ZLIB_H
- int is_file_uri = 1;
-#endif
-
- if (xmlOutputCallbackInitialized == 0)
- xmlRegisterDefaultOutputCallbacks();
-
- if (URI == NULL) return(NULL);
-
- puri = xmlParseURI(URI);
- if (puri != NULL) {
-#ifdef HAVE_ZLIB_H
- if ((puri->scheme != NULL) &&
- (!xmlStrEqual(BAD_CAST puri->scheme, BAD_CAST "file")))
- is_file_uri = 0;
-#endif
- /*
- * try to limit the damages of the URI unescaping code.
- */
- if ((puri->scheme == NULL) ||
- (xmlStrEqual(BAD_CAST puri->scheme, BAD_CAST "file")))
- unescaped = xmlURIUnescapeString(URI, 0, NULL);
- xmlFreeURI(puri);
- }
-
- /*
- * Try to find one of the output accept method accepting that scheme
- * Go in reverse to give precedence to user defined handlers.
- * try with an unescaped version of the URI
- */
- if (unescaped != NULL) {
-#ifdef HAVE_ZLIB_H
- if ((compression > 0) && (compression <= 9) && (is_file_uri == 1)) {
- context = xmlGzfileOpenW(unescaped, compression);
- if (context != NULL) {
- ret = xmlAllocOutputBufferInternal(encoder);
- if (ret != NULL) {
- ret->context = context;
- ret->writecallback = xmlGzfileWrite;
- ret->closecallback = xmlGzfileClose;
- }
- xmlFree(unescaped);
- return(ret);
- }
- }
-#endif
- for (i = xmlOutputCallbackNr - 1;i >= 0;i--) {
- if ((xmlOutputCallbackTable[i].matchcallback != NULL) &&
- (xmlOutputCallbackTable[i].matchcallback(unescaped) != 0)) {
-#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H)
- /* Need to pass compression parameter into HTTP open calls */
- if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch)
- context = xmlIOHTTPOpenW(unescaped, compression);
- else
-#endif
- context = xmlOutputCallbackTable[i].opencallback(unescaped);
- if (context != NULL)
- break;
- }
- }
- xmlFree(unescaped);
- }
-
- /*
- * If this failed try with a non-escaped URI this may be a strange
- * filename
- */
- if (context == NULL) {
-#ifdef HAVE_ZLIB_H
- if ((compression > 0) && (compression <= 9) && (is_file_uri == 1)) {
- context = xmlGzfileOpenW(URI, compression);
- if (context != NULL) {
- ret = xmlAllocOutputBufferInternal(encoder);
- if (ret != NULL) {
- ret->context = context;
- ret->writecallback = xmlGzfileWrite;
- ret->closecallback = xmlGzfileClose;
- }
- return(ret);
- }
- }
-#endif
- for (i = xmlOutputCallbackNr - 1;i >= 0;i--) {
- if ((xmlOutputCallbackTable[i].matchcallback != NULL) &&
- (xmlOutputCallbackTable[i].matchcallback(URI) != 0)) {
-#if defined(LIBXML_HTTP_ENABLED) && defined(HAVE_ZLIB_H)
- /* Need to pass compression parameter into HTTP open calls */
- if (xmlOutputCallbackTable[i].matchcallback == xmlIOHTTPMatch)
- context = xmlIOHTTPOpenW(URI, compression);
- else
-#endif
- context = xmlOutputCallbackTable[i].opencallback(URI);
- if (context != NULL)
- break;
- }
- }
- }
-
- if (context == NULL) {
- return(NULL);
- }
-
- /*
- * Allocate the Output buffer front-end.
- */
- ret = xmlAllocOutputBufferInternal(encoder);
- if (ret != NULL) {
- ret->context = context;
- ret->writecallback = xmlOutputCallbackTable[i].writecallback;
- ret->closecallback = xmlOutputCallbackTable[i].closecallback;
- }
- return(ret);
-}
-
-/**
- * xmlOutputBufferCreateFilename:
- * @URI: a C string containing the URI or filename
- * @encoder: the encoding converter or NULL
- * @compression: the compression ration (0 none, 9 max).
- *
- * Create a buffered output for the progressive saving of a file
- * If filename is "-' then we use stdout as the output.
- * Automatic support for ZLIB/Compress compressed document is provided
- * by default if found at compile-time.
- * TODO: currently if compression is set, the library only support
- * writing to a local file.
- *
- * Returns the new output or NULL
- */
-xmlOutputBufferPtr
-xmlOutputBufferCreateFilename(const char *URI,
- xmlCharEncodingHandlerPtr encoder,
- int compression ATTRIBUTE_UNUSED) {
- if ((xmlOutputBufferCreateFilenameValue)) {
- return xmlOutputBufferCreateFilenameValue(URI, encoder, compression);
- }
- return __xmlOutputBufferCreateFilename(URI, encoder, compression);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlParserInputBufferCreateFile:
- * @file: a FILE*
- * @enc: the charset encoding if known
- *
- * Create a buffered parser input for the progressive parsing of a FILE *
- * buffered C I/O
- *
- * Returns the new parser input or NULL
- */
-xmlParserInputBufferPtr
-xmlParserInputBufferCreateFile(FILE *file, xmlCharEncoding enc) {
- xmlParserInputBufferPtr ret;
-
- if (xmlInputCallbackInitialized == 0)
- xmlRegisterDefaultInputCallbacks();
-
- if (file == NULL) return(NULL);
-
- ret = xmlAllocParserInputBuffer(enc);
- if (ret != NULL) {
- ret->context = file;
- ret->readcallback = xmlFileRead;
- ret->closecallback = xmlFileFlush;
- }
-
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlOutputBufferCreateFile:
- * @file: a FILE*
- * @encoder: the encoding converter or NULL
- *
- * Create a buffered output for the progressive saving to a FILE *
- * buffered C I/O
- *
- * Returns the new parser output or NULL
- */
-xmlOutputBufferPtr
-xmlOutputBufferCreateFile(FILE *file, xmlCharEncodingHandlerPtr encoder) {
- xmlOutputBufferPtr ret;
-
- if (xmlOutputCallbackInitialized == 0)
- xmlRegisterDefaultOutputCallbacks();
-
- if (file == NULL) return(NULL);
-
- ret = xmlAllocOutputBufferInternal(encoder);
- if (ret != NULL) {
- ret->context = file;
- ret->writecallback = xmlFileWrite;
- ret->closecallback = xmlFileFlush;
- }
-
- return(ret);
-}
-
-/**
- * xmlOutputBufferCreateBuffer:
- * @buffer: a xmlBufferPtr
- * @encoder: the encoding converter or NULL
- *
- * Create a buffered output for the progressive saving to a xmlBuffer
- *
- * Returns the new parser output or NULL
- */
-xmlOutputBufferPtr
-xmlOutputBufferCreateBuffer(xmlBufferPtr buffer,
- xmlCharEncodingHandlerPtr encoder) {
- xmlOutputBufferPtr ret;
-
- if (buffer == NULL) return(NULL);
-
- ret = xmlOutputBufferCreateIO((xmlOutputWriteCallback)
- xmlBufferWrite,
- (xmlOutputCloseCallback)
- NULL, (void *) buffer, encoder);
-
- return(ret);
-}
-
-/**
- * xmlOutputBufferGetContent:
- * @out: an xmlOutputBufferPtr
- *
- * Gives a pointer to the data currently held in the output buffer
- *
- * Returns a pointer to the data or NULL in case of error
- */
-const xmlChar *
-xmlOutputBufferGetContent(xmlOutputBufferPtr out) {
- if ((out == NULL) || (out->buffer == NULL))
- return(NULL);
-
- return(xmlBufContent(out->buffer));
-}
-
-/**
- * xmlOutputBufferGetSize:
- * @out: an xmlOutputBufferPtr
- *
- * Gives the length of the data currently held in the output buffer
- *
- * Returns 0 in case or error or no data is held, the size otherwise
- */
-size_t
-xmlOutputBufferGetSize(xmlOutputBufferPtr out) {
- if ((out == NULL) || (out->buffer == NULL))
- return(0);
-
- return(xmlBufUse(out->buffer));
-}
-
-
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlParserInputBufferCreateFd:
- * @fd: a file descriptor number
- * @enc: the charset encoding if known
- *
- * Create a buffered parser input for the progressive parsing for the input
- * from a file descriptor
- *
- * Returns the new parser input or NULL
- */
-xmlParserInputBufferPtr
-xmlParserInputBufferCreateFd(int fd, xmlCharEncoding enc) {
- xmlParserInputBufferPtr ret;
-
- if (fd < 0) return(NULL);
-
- ret = xmlAllocParserInputBuffer(enc);
- if (ret != NULL) {
- ret->context = (void *) (long) fd;
- ret->readcallback = xmlFdRead;
- ret->closecallback = xmlFdClose;
- }
-
- return(ret);
-}
-
-/**
- * xmlParserInputBufferCreateMem:
- * @mem: the memory input
- * @size: the length of the memory block
- * @enc: the charset encoding if known
- *
- * Create a buffered parser input for the progressive parsing for the input
- * from a memory area.
- *
- * Returns the new parser input or NULL
- */
-xmlParserInputBufferPtr
-xmlParserInputBufferCreateMem(const char *mem, int size, xmlCharEncoding enc) {
- xmlParserInputBufferPtr ret;
- int errcode;
-
- if (size <= 0) return(NULL);
- if (mem == NULL) return(NULL);
-
- ret = xmlAllocParserInputBuffer(enc);
- if (ret != NULL) {
- ret->context = (void *) mem;
- ret->readcallback = (xmlInputReadCallback) xmlNop;
- ret->closecallback = NULL;
- errcode = xmlBufAdd(ret->buffer, (const xmlChar *) mem, size);
- if (errcode != 0) {
- xmlFree(ret);
- return(NULL);
- }
- }
-
- return(ret);
-}
-
-/**
- * xmlParserInputBufferCreateStatic:
- * @mem: the memory input
- * @size: the length of the memory block
- * @enc: the charset encoding if known
- *
- * Create a buffered parser input for the progressive parsing for the input
- * from an immutable memory area. This will not copy the memory area to
- * the buffer, but the memory is expected to be available until the end of
- * the parsing, this is useful for example when using mmap'ed file.
- *
- * Returns the new parser input or NULL
- */
-xmlParserInputBufferPtr
-xmlParserInputBufferCreateStatic(const char *mem, int size,
- xmlCharEncoding enc) {
- xmlParserInputBufferPtr ret;
-
- if (size <= 0) return(NULL);
- if (mem == NULL) return(NULL);
-
- ret = (xmlParserInputBufferPtr) xmlMalloc(sizeof(xmlParserInputBuffer));
- if (ret == NULL) {
- xmlIOErrMemory("creating input buffer");
- return(NULL);
- }
- memset(ret, 0, (size_t) sizeof(xmlParserInputBuffer));
- ret->buffer = xmlBufCreateStatic((void *)mem, (size_t) size);
- if (ret->buffer == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- ret->encoder = xmlGetCharEncodingHandler(enc);
- if (ret->encoder != NULL)
- ret->raw = xmlBufCreateSize(2 * xmlDefaultBufferSize);
- else
- ret->raw = NULL;
- ret->compressed = -1;
- ret->context = (void *) mem;
- ret->readcallback = NULL;
- ret->closecallback = NULL;
-
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlOutputBufferCreateFd:
- * @fd: a file descriptor number
- * @encoder: the encoding converter or NULL
- *
- * Create a buffered output for the progressive saving
- * to a file descriptor
- *
- * Returns the new parser output or NULL
- */
-xmlOutputBufferPtr
-xmlOutputBufferCreateFd(int fd, xmlCharEncodingHandlerPtr encoder) {
- xmlOutputBufferPtr ret;
-
- if (fd < 0) return(NULL);
-
- ret = xmlAllocOutputBufferInternal(encoder);
- if (ret != NULL) {
- ret->context = (void *) (long) fd;
- ret->writecallback = xmlFdWrite;
- ret->closecallback = NULL;
- }
-
- return(ret);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlParserInputBufferCreateIO:
- * @ioread: an I/O read function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @enc: the charset encoding if known
- *
- * Create a buffered parser input for the progressive parsing for the input
- * from an I/O handler
- *
- * Returns the new parser input or NULL
- */
-xmlParserInputBufferPtr
-xmlParserInputBufferCreateIO(xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose, void *ioctx, xmlCharEncoding enc) {
- xmlParserInputBufferPtr ret;
-
- if (ioread == NULL) return(NULL);
-
- ret = xmlAllocParserInputBuffer(enc);
- if (ret != NULL) {
- ret->context = (void *) ioctx;
- ret->readcallback = ioread;
- ret->closecallback = ioclose;
- }
-
- return(ret);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlOutputBufferCreateIO:
- * @iowrite: an I/O write function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @encoder: the charset encoding if known
- *
- * Create a buffered output for the progressive saving
- * to an I/O handler
- *
- * Returns the new parser output or NULL
- */
-xmlOutputBufferPtr
-xmlOutputBufferCreateIO(xmlOutputWriteCallback iowrite,
- xmlOutputCloseCallback ioclose, void *ioctx,
- xmlCharEncodingHandlerPtr encoder) {
- xmlOutputBufferPtr ret;
-
- if (iowrite == NULL) return(NULL);
-
- ret = xmlAllocOutputBufferInternal(encoder);
- if (ret != NULL) {
- ret->context = (void *) ioctx;
- ret->writecallback = iowrite;
- ret->closecallback = ioclose;
- }
-
- return(ret);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlParserInputBufferCreateFilenameDefault:
- * @func: function pointer to the new ParserInputBufferCreateFilenameFunc
- *
- * Registers a callback for URI input file handling
- *
- * Returns the old value of the registration function
- */
-xmlParserInputBufferCreateFilenameFunc
-xmlParserInputBufferCreateFilenameDefault(xmlParserInputBufferCreateFilenameFunc func)
-{
- xmlParserInputBufferCreateFilenameFunc old = xmlParserInputBufferCreateFilenameValue;
- if (old == NULL) {
- old = __xmlParserInputBufferCreateFilename;
- }
-
- xmlParserInputBufferCreateFilenameValue = func;
- return(old);
-}
-
-/**
- * xmlOutputBufferCreateFilenameDefault:
- * @func: function pointer to the new OutputBufferCreateFilenameFunc
- *
- * Registers a callback for URI output file handling
- *
- * Returns the old value of the registration function
- */
-xmlOutputBufferCreateFilenameFunc
-xmlOutputBufferCreateFilenameDefault(xmlOutputBufferCreateFilenameFunc func)
-{
- xmlOutputBufferCreateFilenameFunc old = xmlOutputBufferCreateFilenameValue;
-#ifdef LIBXML_OUTPUT_ENABLED
- if (old == NULL) {
- old = __xmlOutputBufferCreateFilename;
- }
-#endif
- xmlOutputBufferCreateFilenameValue = func;
- return(old);
-}
-
-/**
- * xmlParserInputBufferPush:
- * @in: a buffered parser input
- * @len: the size in bytes of the array.
- * @buf: an char array
- *
- * Push the content of the arry in the input buffer
- * This routine handle the I18N transcoding to internal UTF-8
- * This is used when operating the parser in progressive (push) mode.
- *
- * Returns the number of chars read and stored in the buffer, or -1
- * in case of error.
- */
-int
-xmlParserInputBufferPush(xmlParserInputBufferPtr in,
- int len, const char *buf) {
- int nbchars = 0;
- int ret;
-
- if (len < 0) return(0);
- if ((in == NULL) || (in->error)) return(-1);
- if (in->encoder != NULL) {
- unsigned int use;
-
- /*
- * Store the data in the incoming raw buffer
- */
- if (in->raw == NULL) {
- in->raw = xmlBufCreate();
- }
- ret = xmlBufAdd(in->raw, (const xmlChar *) buf, len);
- if (ret != 0)
- return(-1);
-
- /*
- * convert as much as possible to the parser reading buffer.
- */
- use = xmlBufUse(in->raw);
- nbchars = xmlCharEncInput(in, 1);
- if (nbchars < 0) {
- xmlIOErr(XML_IO_ENCODER, NULL);
- in->error = XML_IO_ENCODER;
- return(-1);
- }
- in->rawconsumed += (use - xmlBufUse(in->raw));
- } else {
- nbchars = len;
- ret = xmlBufAdd(in->buffer, (xmlChar *) buf, nbchars);
- if (ret != 0)
- return(-1);
- }
-#ifdef DEBUG_INPUT
- xmlGenericError(xmlGenericErrorContext,
- "I/O: pushed %d chars, buffer %d/%d\n",
- nbchars, xmlBufUse(in->buffer), xmlBufLength(in->buffer));
-#endif
- return(nbchars);
-}
-
-/**
- * endOfInput:
- *
- * When reading from an Input channel indicated end of file or error
- * don't reread from it again.
- */
-static int
-endOfInput (void * context ATTRIBUTE_UNUSED,
- char * buffer ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED) {
- return(0);
-}
-
-/**
- * xmlParserInputBufferGrow:
- * @in: a buffered parser input
- * @len: indicative value of the amount of chars to read
- *
- * Grow up the content of the input buffer, the old data are preserved
- * This routine handle the I18N transcoding to internal UTF-8
- * This routine is used when operating the parser in normal (pull) mode
- *
- * TODO: one should be able to remove one extra copy by copying directly
- * onto in->buffer or in->raw
- *
- * Returns the number of chars read and stored in the buffer, or -1
- * in case of error.
- */
-int
-xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) {
- char *buffer = NULL;
- int res = 0;
- int nbchars = 0;
-
- if ((in == NULL) || (in->error)) return(-1);
- if ((len <= MINLEN) && (len != 4))
- len = MINLEN;
-
- if (xmlBufAvail(in->buffer) <= 0) {
- xmlIOErr(XML_IO_BUFFER_FULL, NULL);
- in->error = XML_IO_BUFFER_FULL;
- return(-1);
- }
-
- if (xmlBufGrow(in->buffer, len + 1) < 0) {
- xmlIOErrMemory("growing input buffer");
- in->error = XML_ERR_NO_MEMORY;
- return(-1);
- }
- buffer = (char *)xmlBufEnd(in->buffer);
-
- /*
- * Call the read method for this I/O type.
- */
- if (in->readcallback != NULL) {
- res = in->readcallback(in->context, &buffer[0], len);
- if (res <= 0)
- in->readcallback = endOfInput;
- } else {
- xmlIOErr(XML_IO_NO_INPUT, NULL);
- in->error = XML_IO_NO_INPUT;
- return(-1);
- }
- if (res < 0) {
- return(-1);
- }
-
- /*
- * try to establish compressed status of input if not done already
- */
- if (in->compressed == -1) {
-#ifdef LIBXML_LZMA_ENABLED
- if (in->readcallback == xmlXzfileRead)
- in->compressed = __libxml2_xzcompressed(in->context);
-#endif
- }
-
- len = res;
- if (in->encoder != NULL) {
- unsigned int use;
-
- /*
- * Store the data in the incoming raw buffer
- */
- if (in->raw == NULL) {
- in->raw = xmlBufCreate();
- }
- res = xmlBufAdd(in->raw, (const xmlChar *) buffer, len);
- if (res != 0)
- return(-1);
-
- /*
- * convert as much as possible to the parser reading buffer.
- */
- use = xmlBufUse(in->raw);
- nbchars = xmlCharEncInput(in, 1);
- if (nbchars < 0) {
- xmlIOErr(XML_IO_ENCODER, NULL);
- in->error = XML_IO_ENCODER;
- return(-1);
- }
- in->rawconsumed += (use - xmlBufUse(in->raw));
- } else {
- nbchars = len;
- xmlBufAddLen(in->buffer, nbchars);
- }
-#ifdef DEBUG_INPUT
- xmlGenericError(xmlGenericErrorContext,
- "I/O: read %d chars, buffer %d\n",
- nbchars, xmlBufUse(in->buffer));
-#endif
- return(nbchars);
-}
-
-/**
- * xmlParserInputBufferRead:
- * @in: a buffered parser input
- * @len: indicative value of the amount of chars to read
- *
- * Refresh the content of the input buffer, the old data are considered
- * consumed
- * This routine handle the I18N transcoding to internal UTF-8
- *
- * Returns the number of chars read and stored in the buffer, or -1
- * in case of error.
- */
-int
-xmlParserInputBufferRead(xmlParserInputBufferPtr in, int len) {
- if ((in == NULL) || (in->error)) return(-1);
- if (in->readcallback != NULL)
- return(xmlParserInputBufferGrow(in, len));
- else if (xmlBufGetAllocationScheme(in->buffer) == XML_BUFFER_ALLOC_IMMUTABLE)
- return(0);
- else
- return(-1);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-/**
- * xmlOutputBufferWrite:
- * @out: a buffered parser output
- * @len: the size in bytes of the array.
- * @buf: an char array
- *
- * Write the content of the array in the output I/O buffer
- * This routine handle the I18N transcoding from internal UTF-8
- * The buffer is lossless, i.e. will store in case of partial
- * or delayed writes.
- *
- * Returns the number of chars immediately written, or -1
- * in case of error.
- */
-int
-xmlOutputBufferWrite(xmlOutputBufferPtr out, int len, const char *buf) {
- int nbchars = 0; /* number of chars to output to I/O */
- int ret; /* return from function call */
- int written = 0; /* number of char written to I/O so far */
- int chunk; /* number of byte curreent processed from buf */
-
- if ((out == NULL) || (out->error)) return(-1);
- if (len < 0) return(0);
- if (out->error) return(-1);
-
- do {
- chunk = len;
- if (chunk > 4 * MINLEN)
- chunk = 4 * MINLEN;
-
- /*
- * first handle encoding stuff.
- */
- if (out->encoder != NULL) {
- /*
- * Store the data in the incoming raw buffer
- */
- if (out->conv == NULL) {
- out->conv = xmlBufCreate();
- }
- ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk);
- if (ret != 0)
- return(-1);
-
- if ((xmlBufUse(out->buffer) < MINLEN) && (chunk == len))
- goto done;
-
- /*
- * convert as much as possible to the parser reading buffer.
- */
- ret = xmlCharEncOutput(out, 0);
- if ((ret < 0) && (ret != -3)) {
- xmlIOErr(XML_IO_ENCODER, NULL);
- out->error = XML_IO_ENCODER;
- return(-1);
- }
- nbchars = xmlBufUse(out->conv);
- } else {
- ret = xmlBufAdd(out->buffer, (const xmlChar *) buf, chunk);
- if (ret != 0)
- return(-1);
- nbchars = xmlBufUse(out->buffer);
- }
- buf += chunk;
- len -= chunk;
-
- if ((nbchars < MINLEN) && (len <= 0))
- goto done;
-
- if (out->writecallback) {
- /*
- * second write the stuff to the I/O channel
- */
- if (out->encoder != NULL) {
- ret = out->writecallback(out->context,
- (const char *)xmlBufContent(out->conv), nbchars);
- if (ret >= 0)
- xmlBufShrink(out->conv, ret);
- } else {
- ret = out->writecallback(out->context,
- (const char *)xmlBufContent(out->buffer), nbchars);
- if (ret >= 0)
- xmlBufShrink(out->buffer, ret);
- }
- if (ret < 0) {
- xmlIOErr(XML_IO_WRITE, NULL);
- out->error = XML_IO_WRITE;
- return(ret);
- }
- out->written += ret;
- }
- written += nbchars;
- } while (len > 0);
-
-done:
-#ifdef DEBUG_INPUT
- xmlGenericError(xmlGenericErrorContext,
- "I/O: wrote %d chars\n", written);
-#endif
- return(written);
-}
-
-/**
- * xmlEscapeContent:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of unescaped UTF-8 bytes
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and escape them.
- * Returns 0 if success, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-static int
-xmlEscapeContent(unsigned char* out, int *outlen,
- const xmlChar* in, int *inlen) {
- unsigned char* outstart = out;
- const unsigned char* base = in;
- unsigned char* outend = out + *outlen;
- const unsigned char* inend;
-
- inend = in + (*inlen);
-
- while ((in < inend) && (out < outend)) {
- if (*in == '<') {
- if (outend - out < 4) break;
- *out++ = '&';
- *out++ = 'l';
- *out++ = 't';
- *out++ = ';';
- } else if (*in == '>') {
- if (outend - out < 4) break;
- *out++ = '&';
- *out++ = 'g';
- *out++ = 't';
- *out++ = ';';
- } else if (*in == '&') {
- if (outend - out < 5) break;
- *out++ = '&';
- *out++ = 'a';
- *out++ = 'm';
- *out++ = 'p';
- *out++ = ';';
- } else if (*in == '\r') {
- if (outend - out < 5) break;
- *out++ = '&';
- *out++ = '#';
- *out++ = '1';
- *out++ = '3';
- *out++ = ';';
- } else {
- *out++ = (unsigned char) *in;
- }
- ++in;
- }
- *outlen = out - outstart;
- *inlen = in - base;
- return(0);
-}
-
-/**
- * xmlOutputBufferWriteEscape:
- * @out: a buffered parser output
- * @str: a zero terminated UTF-8 string
- * @escaping: an optional escaping function (or NULL)
- *
- * Write the content of the string in the output I/O buffer
- * This routine escapes the caracters and then handle the I18N
- * transcoding from internal UTF-8
- * The buffer is lossless, i.e. will store in case of partial
- * or delayed writes.
- *
- * Returns the number of chars immediately written, or -1
- * in case of error.
- */
-int
-xmlOutputBufferWriteEscape(xmlOutputBufferPtr out, const xmlChar *str,
- xmlCharEncodingOutputFunc escaping) {
- int nbchars = 0; /* number of chars to output to I/O */
- int ret; /* return from function call */
- int written = 0; /* number of char written to I/O so far */
- int oldwritten=0;/* loop guard */
- int chunk; /* number of byte currently processed from str */
- int len; /* number of bytes in str */
- int cons; /* byte from str consumed */
-
- if ((out == NULL) || (out->error) || (str == NULL) ||
- (out->buffer == NULL) ||
- (xmlBufGetAllocationScheme(out->buffer) == XML_BUFFER_ALLOC_IMMUTABLE))
- return(-1);
- len = strlen((const char *)str);
- if (len < 0) return(0);
- if (out->error) return(-1);
- if (escaping == NULL) escaping = xmlEscapeContent;
-
- do {
- oldwritten = written;
-
- /*
- * how many bytes to consume and how many bytes to store.
- */
- cons = len;
- chunk = xmlBufAvail(out->buffer) - 1;
-
- /*
- * make sure we have enough room to save first, if this is
- * not the case force a flush, but make sure we stay in the loop
- */
- if (chunk < 40) {
- if (xmlBufGrow(out->buffer, 100) < 0)
- return(-1);
- oldwritten = -1;
- continue;
- }
-
- /*
- * first handle encoding stuff.
- */
- if (out->encoder != NULL) {
- /*
- * Store the data in the incoming raw buffer
- */
- if (out->conv == NULL) {
- out->conv = xmlBufCreate();
- }
- ret = escaping(xmlBufEnd(out->buffer) ,
- &chunk, str, &cons);
- if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */
- return(-1);
- xmlBufAddLen(out->buffer, chunk);
-
- if ((xmlBufUse(out->buffer) < MINLEN) && (cons == len))
- goto done;
-
- /*
- * convert as much as possible to the output buffer.
- */
- ret = xmlCharEncOutput(out, 0);
- if ((ret < 0) && (ret != -3)) {
- xmlIOErr(XML_IO_ENCODER, NULL);
- out->error = XML_IO_ENCODER;
- return(-1);
- }
- nbchars = xmlBufUse(out->conv);
- } else {
- ret = escaping(xmlBufEnd(out->buffer), &chunk, str, &cons);
- if ((ret < 0) || (chunk == 0)) /* chunk==0 => nothing done */
- return(-1);
- xmlBufAddLen(out->buffer, chunk);
- nbchars = xmlBufUse(out->buffer);
- }
- str += cons;
- len -= cons;
-
- if ((nbchars < MINLEN) && (len <= 0))
- goto done;
-
- if (out->writecallback) {
- /*
- * second write the stuff to the I/O channel
- */
- if (out->encoder != NULL) {
- ret = out->writecallback(out->context,
- (const char *)xmlBufContent(out->conv), nbchars);
- if (ret >= 0)
- xmlBufShrink(out->conv, ret);
- } else {
- ret = out->writecallback(out->context,
- (const char *)xmlBufContent(out->buffer), nbchars);
- if (ret >= 0)
- xmlBufShrink(out->buffer, ret);
- }
- if (ret < 0) {
- xmlIOErr(XML_IO_WRITE, NULL);
- out->error = XML_IO_WRITE;
- return(ret);
- }
- out->written += ret;
- } else if (xmlBufAvail(out->buffer) < MINLEN) {
- xmlBufGrow(out->buffer, MINLEN);
- }
- written += nbchars;
- } while ((len > 0) && (oldwritten != written));
-
-done:
-#ifdef DEBUG_INPUT
- xmlGenericError(xmlGenericErrorContext,
- "I/O: wrote %d chars\n", written);
-#endif
- return(written);
-}
-
-/**
- * xmlOutputBufferWriteString:
- * @out: a buffered parser output
- * @str: a zero terminated C string
- *
- * Write the content of the string in the output I/O buffer
- * This routine handle the I18N transcoding from internal UTF-8
- * The buffer is lossless, i.e. will store in case of partial
- * or delayed writes.
- *
- * Returns the number of chars immediately written, or -1
- * in case of error.
- */
-int
-xmlOutputBufferWriteString(xmlOutputBufferPtr out, const char *str) {
- int len;
-
- if ((out == NULL) || (out->error)) return(-1);
- if (str == NULL)
- return(-1);
- len = strlen(str);
-
- if (len > 0)
- return(xmlOutputBufferWrite(out, len, str));
- return(len);
-}
-
-/**
- * xmlOutputBufferFlush:
- * @out: a buffered output
- *
- * flushes the output I/O channel
- *
- * Returns the number of byte written or -1 in case of error.
- */
-int
-xmlOutputBufferFlush(xmlOutputBufferPtr out) {
- int nbchars = 0, ret = 0;
-
- if ((out == NULL) || (out->error)) return(-1);
- /*
- * first handle encoding stuff.
- */
- if ((out->conv != NULL) && (out->encoder != NULL)) {
- /*
- * convert as much as possible to the parser output buffer.
- */
- do {
- nbchars = xmlCharEncOutput(out, 0);
- if (nbchars < 0) {
- xmlIOErr(XML_IO_ENCODER, NULL);
- out->error = XML_IO_ENCODER;
- return(-1);
- }
- } while (nbchars);
- }
-
- /*
- * second flush the stuff to the I/O channel
- */
- if ((out->conv != NULL) && (out->encoder != NULL) &&
- (out->writecallback != NULL)) {
- ret = out->writecallback(out->context,
- (const char *)xmlBufContent(out->conv),
- xmlBufUse(out->conv));
- if (ret >= 0)
- xmlBufShrink(out->conv, ret);
- } else if (out->writecallback != NULL) {
- ret = out->writecallback(out->context,
- (const char *)xmlBufContent(out->buffer),
- xmlBufUse(out->buffer));
- if (ret >= 0)
- xmlBufShrink(out->buffer, ret);
- }
- if (ret < 0) {
- xmlIOErr(XML_IO_FLUSH, NULL);
- out->error = XML_IO_FLUSH;
- return(ret);
- }
- out->written += ret;
-
-#ifdef DEBUG_INPUT
- xmlGenericError(xmlGenericErrorContext,
- "I/O: flushed %d chars\n", ret);
-#endif
- return(ret);
-}
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/**
- * xmlParserGetDirectory:
- * @filename: the path to a file
- *
- * lookup the directory for that file
- *
- * Returns a new allocated string containing the directory, or NULL.
- */
-char *
-xmlParserGetDirectory(const char *filename) {
- char *ret = NULL;
- char dir[1024];
- char *cur;
-
-#ifdef _WIN32_WCE /* easy way by now ... wince does not have dirs! */
- return NULL;
-#endif
-
- if (xmlInputCallbackInitialized == 0)
- xmlRegisterDefaultInputCallbacks();
-
- if (filename == NULL) return(NULL);
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-# define IS_XMLPGD_SEP(ch) ((ch=='/')||(ch=='\\'))
-#else
-# define IS_XMLPGD_SEP(ch) (ch=='/')
-#endif
-
- strncpy(dir, filename, 1023);
- dir[1023] = 0;
- cur = &dir[strlen(dir)];
- while (cur > dir) {
- if (IS_XMLPGD_SEP(*cur)) break;
- cur --;
- }
- if (IS_XMLPGD_SEP(*cur)) {
- if (cur == dir) dir[1] = 0;
- else *cur = 0;
- ret = xmlMemStrdup(dir);
- } else {
- if (getcwd(dir, 1024) != NULL) {
- dir[1023] = 0;
- ret = xmlMemStrdup(dir);
- }
- }
- return(ret);
-#undef IS_XMLPGD_SEP
-}
-
-/****************************************************************
- * *
- * External entities loading *
- * *
- ****************************************************************/
-
-/**
- * xmlCheckHTTPInput:
- * @ctxt: an XML parser context
- * @ret: an XML parser input
- *
- * Check an input in case it was created from an HTTP stream, in that
- * case it will handle encoding and update of the base URL in case of
- * redirection. It also checks for HTTP errors in which case the input
- * is cleanly freed up and an appropriate error is raised in context
- *
- * Returns the input or NULL in case of HTTP error.
- */
-xmlParserInputPtr
-xmlCheckHTTPInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr ret) {
-#ifdef LIBXML_HTTP_ENABLED
- if ((ret != NULL) && (ret->buf != NULL) &&
- (ret->buf->readcallback == xmlIOHTTPRead) &&
- (ret->buf->context != NULL)) {
- const char *encoding;
- const char *redir;
- const char *mime;
- int code;
-
- code = xmlNanoHTTPReturnCode(ret->buf->context);
- if (code >= 400) {
- /* fatal error */
- if (ret->filename != NULL)
- __xmlLoaderErr(ctxt, "failed to load HTTP resource \"%s\"\n",
- (const char *) ret->filename);
- else
- __xmlLoaderErr(ctxt, "failed to load HTTP resource\n", NULL);
- xmlFreeInputStream(ret);
- ret = NULL;
- } else {
-
- mime = xmlNanoHTTPMimeType(ret->buf->context);
- if ((xmlStrstr(BAD_CAST mime, BAD_CAST "/xml")) ||
- (xmlStrstr(BAD_CAST mime, BAD_CAST "+xml"))) {
- encoding = xmlNanoHTTPEncoding(ret->buf->context);
- if (encoding != NULL) {
- xmlCharEncodingHandlerPtr handler;
-
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler != NULL) {
- xmlSwitchInputEncoding(ctxt, ret, handler);
- } else {
- __xmlErrEncoding(ctxt, XML_ERR_UNKNOWN_ENCODING,
- "Unknown encoding %s",
- BAD_CAST encoding, NULL);
- }
- if (ret->encoding == NULL)
- ret->encoding = xmlStrdup(BAD_CAST encoding);
- }
-#if 0
- } else if (xmlStrstr(BAD_CAST mime, BAD_CAST "html")) {
-#endif
- }
- redir = xmlNanoHTTPRedir(ret->buf->context);
- if (redir != NULL) {
- if (ret->filename != NULL)
- xmlFree((xmlChar *) ret->filename);
- if (ret->directory != NULL) {
- xmlFree((xmlChar *) ret->directory);
- ret->directory = NULL;
- }
- ret->filename =
- (char *) xmlStrdup((const xmlChar *) redir);
- }
- }
- }
-#endif
- return(ret);
-}
-
-static int xmlNoNetExists(const char *URL) {
- const char *path;
-
- if (URL == NULL)
- return(0);
-
- if (!xmlStrncasecmp(BAD_CAST URL, BAD_CAST "file://localhost/", 17))
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &URL[17];
-#else
- path = &URL[16];
-#endif
- else if (!xmlStrncasecmp(BAD_CAST URL, BAD_CAST "file:///", 8)) {
-#if defined (_WIN32) || defined (__DJGPP__) && !defined(__CYGWIN__)
- path = &URL[8];
-#else
- path = &URL[7];
-#endif
- } else
- path = URL;
-
- return xmlCheckFilename(path);
-}
-
-#ifdef LIBXML_CATALOG_ENABLED
-
-/**
- * xmlResolveResourceFromCatalog:
- * @URL: the URL for the entity to load
- * @ID: the System ID for the entity to load
- * @ctxt: the context in which the entity is called or NULL
- *
- * Resolves the URL and ID against the appropriate catalog.
- * This function is used by xmlDefaultExternalEntityLoader and
- * xmlNoNetExternalEntityLoader.
- *
- * Returns a new allocated URL, or NULL.
- */
-static xmlChar *
-xmlResolveResourceFromCatalog(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- xmlChar *resource = NULL;
- xmlCatalogAllow pref;
-
- /*
- * If the resource doesn't exists as a file,
- * try to load it from the resource pointed in the catalogs
- */
- pref = xmlCatalogGetDefaults();
-
- if ((pref != XML_CATA_ALLOW_NONE) && (!xmlNoNetExists(URL))) {
- /*
- * Do a local lookup
- */
- if ((ctxt != NULL) && (ctxt->catalogs != NULL) &&
- ((pref == XML_CATA_ALLOW_ALL) ||
- (pref == XML_CATA_ALLOW_DOCUMENT))) {
- resource = xmlCatalogLocalResolve(ctxt->catalogs,
- (const xmlChar *)ID,
- (const xmlChar *)URL);
- }
- /*
- * Try a global lookup
- */
- if ((resource == NULL) &&
- ((pref == XML_CATA_ALLOW_ALL) ||
- (pref == XML_CATA_ALLOW_GLOBAL))) {
- resource = xmlCatalogResolve((const xmlChar *)ID,
- (const xmlChar *)URL);
- }
- if ((resource == NULL) && (URL != NULL))
- resource = xmlStrdup((const xmlChar *) URL);
-
- /*
- * TODO: do an URI lookup on the reference
- */
- if ((resource != NULL) && (!xmlNoNetExists((const char *)resource))) {
- xmlChar *tmp = NULL;
-
- if ((ctxt != NULL) && (ctxt->catalogs != NULL) &&
- ((pref == XML_CATA_ALLOW_ALL) ||
- (pref == XML_CATA_ALLOW_DOCUMENT))) {
- tmp = xmlCatalogLocalResolveURI(ctxt->catalogs, resource);
- }
- if ((tmp == NULL) &&
- ((pref == XML_CATA_ALLOW_ALL) ||
- (pref == XML_CATA_ALLOW_GLOBAL))) {
- tmp = xmlCatalogResolveURI(resource);
- }
-
- if (tmp != NULL) {
- xmlFree(resource);
- resource = tmp;
- }
- }
- }
-
- return resource;
-}
-
-#endif
-
-/**
- * xmlDefaultExternalEntityLoader:
- * @URL: the URL for the entity to load
- * @ID: the System ID for the entity to load
- * @ctxt: the context in which the entity is called or NULL
- *
- * By default we don't load external entitites, yet.
- *
- * Returns a new allocated xmlParserInputPtr, or NULL.
- */
-static xmlParserInputPtr
-xmlDefaultExternalEntityLoader(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt)
-{
- xmlParserInputPtr ret = NULL;
- xmlChar *resource = NULL;
-
-#ifdef DEBUG_EXTERNAL_ENTITIES
- xmlGenericError(xmlGenericErrorContext,
- "xmlDefaultExternalEntityLoader(%s, xxx)\n", URL);
-#endif
- if (ctxt != NULL) {
- int options = ctxt->options;
-
- if (options & XML_PARSE_NOXXE) {
- ctxt->options -= XML_PARSE_NOXXE;
- ret = xmlNoXxeExternalEntityLoader(URL, ID, ctxt);
- ctxt->options = options;
- return(ret);
- }
-
- if (options & XML_PARSE_NONET) {
- ctxt->options -= XML_PARSE_NONET;
- ret = xmlNoNetExternalEntityLoader(URL, ID, ctxt);
- ctxt->options = options;
- return(ret);
- }
- }
-#ifdef LIBXML_CATALOG_ENABLED
- resource = xmlResolveResourceFromCatalog(URL, ID, ctxt);
-#endif
-
- if (resource == NULL)
- resource = (xmlChar *) URL;
-
- if (resource == NULL) {
- if (ID == NULL)
- ID = "NULL";
- __xmlLoaderErr(ctxt, "failed to load external entity \"%s\"\n", ID);
- return (NULL);
- }
- ret = xmlNewInputFromFile(ctxt, (const char *) resource);
- if ((resource != NULL) && (resource != (xmlChar *) URL))
- xmlFree(resource);
- return (ret);
-}
-
-static xmlExternalEntityLoader xmlCurrentExternalEntityLoader =
- xmlDefaultExternalEntityLoader;
-
-/**
- * xmlSetExternalEntityLoader:
- * @f: the new entity resolver function
- *
- * Changes the defaultexternal entity resolver function for the application
- */
-void
-xmlSetExternalEntityLoader(xmlExternalEntityLoader f) {
- xmlCurrentExternalEntityLoader = f;
-}
-
-/**
- * xmlGetExternalEntityLoader:
- *
- * Get the default external entity resolver function for the application
- *
- * Returns the xmlExternalEntityLoader function pointer
- */
-xmlExternalEntityLoader
-xmlGetExternalEntityLoader(void) {
- return(xmlCurrentExternalEntityLoader);
-}
-
-/**
- * xmlLoadExternalEntity:
- * @URL: the URL for the entity to load
- * @ID: the Public ID for the entity to load
- * @ctxt: the context in which the entity is called or NULL
- *
- * Load an external entity, note that the use of this function for
- * unparsed entities may generate problems
- *
- * Returns the xmlParserInputPtr or NULL
- */
-xmlParserInputPtr
-xmlLoadExternalEntity(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- if ((URL != NULL) && (xmlNoNetExists(URL) == 0)) {
- char *canonicFilename;
- xmlParserInputPtr ret;
-
- canonicFilename = (char *) xmlCanonicPath((const xmlChar *) URL);
- if (canonicFilename == NULL) {
- xmlIOErrMemory("building canonical path\n");
- return(NULL);
- }
-
- ret = xmlCurrentExternalEntityLoader(canonicFilename, ID, ctxt);
- xmlFree(canonicFilename);
- return(ret);
- }
- return(xmlCurrentExternalEntityLoader(URL, ID, ctxt));
-}
-
-/************************************************************************
- * *
- * Disabling Network access *
- * *
- ************************************************************************/
-
-/**
- * xmlNoNetExternalEntityLoader:
- * @URL: the URL for the entity to load
- * @ID: the System ID for the entity to load
- * @ctxt: the context in which the entity is called or NULL
- *
- * A specific entity loader disabling network accesses, though still
- * allowing local catalog accesses for resolution.
- *
- * Returns a new allocated xmlParserInputPtr, or NULL.
- */
-xmlParserInputPtr
-xmlNoNetExternalEntityLoader(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr input = NULL;
- xmlChar *resource = NULL;
-
- if (ctxt == NULL) {
- return(NULL);
- }
- if (ctxt->input_id == 1) {
- return xmlDefaultExternalEntityLoader((const char *) URL, ID, ctxt);
- }
-
-#ifdef LIBXML_CATALOG_ENABLED
- resource = xmlResolveResourceFromCatalog(URL, ID, ctxt);
-#endif
-
- if (resource == NULL)
- resource = (xmlChar *) URL;
-
- if (resource != NULL) {
- if ((!xmlStrncasecmp(BAD_CAST resource, BAD_CAST "ftp://", 6)) ||
- (!xmlStrncasecmp(BAD_CAST resource, BAD_CAST "http://", 7))) {
- xmlIOErr(XML_IO_NETWORK_ATTEMPT, (const char *) resource);
- if (resource != (xmlChar *) URL)
- xmlFree(resource);
- return(NULL);
- }
- }
- input = xmlDefaultExternalEntityLoader((const char *) resource, ID, ctxt);
- if (resource != (xmlChar *) URL)
- xmlFree(resource);
- return(input);
-}
-
-xmlParserInputPtr
-xmlNoXxeExternalEntityLoader(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- if (ctxt == NULL) {
- return(NULL);
- }
- if (ctxt->input_id == 1) {
- return xmlDefaultExternalEntityLoader((const char *) URL, ID, ctxt);
- }
- xmlIOErr(XML_IO_ILLEGAL_XXE, (const char *) URL);
- return(NULL);
-}
-
-#define bottom_xmlIO
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/xmlcatalog.c b/external/libxml2_android/jni/libxml2/xmlcatalog.c
deleted file mode 100644
index 006f0cc9..00000000
--- a/external/libxml2_android/jni/libxml2/xmlcatalog.c
+++ /dev/null
@@ -1,616 +0,0 @@
-/*
- * xmlcatalog.c : a small utility program to handle XML catalogs
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-
-#include <string.h>
-#include <stdio.h>
-#include <stdarg.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_LIBREADLINE
-#include <readline/readline.h>
-#ifdef HAVE_LIBHISTORY
-#include <readline/history.h>
-#endif
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/uri.h>
-#include <libxml/catalog.h>
-#include <libxml/parser.h>
-#include <libxml/globals.h>
-
-#if defined(LIBXML_CATALOG_ENABLED) && defined(LIBXML_OUTPUT_ENABLED)
-static int shell = 0;
-static int sgml = 0;
-static int noout = 0;
-static int create = 0;
-static int add = 0;
-static int del = 0;
-static int convert = 0;
-static int no_super_update = 0;
-static int verbose = 0;
-static char *filename = NULL;
-
-
-#ifndef XML_SGML_DEFAULT_CATALOG
-#define XML_SGML_DEFAULT_CATALOG "/etc/sgml/catalog"
-#endif
-
-/************************************************************************
- * *
- * Shell Interface *
- * *
- ************************************************************************/
-/**
- * xmlShellReadline:
- * @prompt: the prompt value
- *
- * Read a string
- *
- * Returns a pointer to it or NULL on EOF the caller is expected to
- * free the returned string.
- */
-static char *
-xmlShellReadline(const char *prompt) {
-#ifdef HAVE_LIBREADLINE
- char *line_read;
-
- /* Get a line from the user. */
- line_read = readline (prompt);
-
- /* If the line has any text in it, save it on the history. */
- if (line_read && *line_read)
- add_history (line_read);
-
- return (line_read);
-#else
- char line_read[501];
- char *ret;
- int len;
-
- if (prompt != NULL)
- fprintf(stdout, "%s", prompt);
- fflush(stdout);
- if (!fgets(line_read, 500, stdin))
- return(NULL);
- line_read[500] = 0;
- len = strlen(line_read);
- ret = (char *) malloc(len + 1);
- if (ret != NULL) {
- memcpy (ret, line_read, len + 1);
- }
- return(ret);
-#endif
-}
-
-static void usershell(void) {
- char *cmdline = NULL, *cur;
- int nbargs;
- char command[100];
- char arg[400];
- char *argv[20];
- int i, ret;
- xmlChar *ans;
-
- while (1) {
- cmdline = xmlShellReadline("> ");
- if (cmdline == NULL)
- return;
-
- /*
- * Parse the command itself
- */
- cur = cmdline;
- nbargs = 0;
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- i = 0;
- while ((*cur != ' ') && (*cur != '\t') &&
- (*cur != '\n') && (*cur != '\r')) {
- if (*cur == 0)
- break;
- command[i++] = *cur++;
- }
- command[i] = 0;
- if (i == 0) {
- free(cmdline);
- continue;
- }
-
- /*
- * Parse the argument string
- */
- memset(arg, 0, sizeof(arg));
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- i = 0;
- while ((*cur != '\n') && (*cur != '\r') && (*cur != 0)) {
- if (*cur == 0)
- break;
- arg[i++] = *cur++;
- }
- arg[i] = 0;
-
- /*
- * Parse the arguments
- */
- i = 0;
- nbargs = 0;
- cur = arg;
- memset(argv, 0, sizeof(argv));
- while (*cur != 0) {
- while ((*cur == ' ') || (*cur == '\t')) cur++;
- if (*cur == '\'') {
- cur++;
- argv[i] = cur;
- while ((*cur != 0) && (*cur != '\'')) cur++;
- if (*cur == '\'') {
- *cur = 0;
- nbargs++;
- i++;
- cur++;
- }
- } else if (*cur == '"') {
- cur++;
- argv[i] = cur;
- while ((*cur != 0) && (*cur != '"')) cur++;
- if (*cur == '"') {
- *cur = 0;
- nbargs++;
- i++;
- cur++;
- }
- } else {
- argv[i] = cur;
- while ((*cur != 0) && (*cur != ' ') && (*cur != '\t'))
- cur++;
- *cur = 0;
- nbargs++;
- i++;
- cur++;
- }
- }
-
- /*
- * start interpreting the command
- */
- if (!strcmp(command, "exit") ||
- !strcmp(command, "quit") ||
- !strcmp(command, "bye")) {
- free(cmdline);
- break;
- }
-
- if (!strcmp(command, "public")) {
- if (nbargs != 1) {
- printf("public requires 1 arguments\n");
- } else {
- ans = xmlCatalogResolvePublic((const xmlChar *) argv[0]);
- if (ans == NULL) {
- printf("No entry for PUBLIC %s\n", argv[0]);
- } else {
- printf("%s\n", (char *) ans);
- xmlFree(ans);
- }
- }
- } else if (!strcmp(command, "system")) {
- if (nbargs != 1) {
- printf("system requires 1 arguments\n");
- } else {
- ans = xmlCatalogResolveSystem((const xmlChar *) argv[0]);
- if (ans == NULL) {
- printf("No entry for SYSTEM %s\n", argv[0]);
- } else {
- printf("%s\n", (char *) ans);
- xmlFree(ans);
- }
- }
- } else if (!strcmp(command, "add")) {
- if (sgml) {
- if ((nbargs != 3) && (nbargs != 2)) {
- printf("add requires 2 or 3 arguments\n");
- } else {
- if (argv[2] == NULL)
- ret = xmlCatalogAdd(BAD_CAST argv[0], NULL,
- BAD_CAST argv[1]);
- else
- ret = xmlCatalogAdd(BAD_CAST argv[0], BAD_CAST argv[1],
- BAD_CAST argv[2]);
- if (ret != 0)
- printf("add command failed\n");
- }
- } else {
- if ((nbargs != 3) && (nbargs != 2)) {
- printf("add requires 2 or 3 arguments\n");
- } else {
- if (argv[2] == NULL)
- ret = xmlCatalogAdd(BAD_CAST argv[0], NULL,
- BAD_CAST argv[1]);
- else
- ret = xmlCatalogAdd(BAD_CAST argv[0], BAD_CAST argv[1],
- BAD_CAST argv[2]);
- if (ret != 0)
- printf("add command failed\n");
- }
- }
- } else if (!strcmp(command, "del")) {
- if (nbargs != 1) {
- printf("del requires 1\n");
- } else {
- ret = xmlCatalogRemove(BAD_CAST argv[0]);
- if (ret <= 0)
- printf("del command failed\n");
-
- }
- } else if (!strcmp(command, "resolve")) {
- if (nbargs != 2) {
- printf("resolve requires 2 arguments\n");
- } else {
- ans = xmlCatalogResolve(BAD_CAST argv[0],
- BAD_CAST argv[1]);
- if (ans == NULL) {
- printf("Resolver failed to find an answer\n");
- } else {
- printf("%s\n", (char *) ans);
- xmlFree(ans);
- }
- }
- } else if (!strcmp(command, "dump")) {
- if (nbargs != 0) {
- printf("dump has no arguments\n");
- } else {
- xmlCatalogDump(stdout);
- }
- } else if (!strcmp(command, "debug")) {
- if (nbargs != 0) {
- printf("debug has no arguments\n");
- } else {
- verbose++;
- xmlCatalogSetDebug(verbose);
- }
- } else if (!strcmp(command, "quiet")) {
- if (nbargs != 0) {
- printf("quiet has no arguments\n");
- } else {
- if (verbose > 0)
- verbose--;
- xmlCatalogSetDebug(verbose);
- }
- } else {
- if (strcmp(command, "help")) {
- printf("Unrecognized command %s\n", command);
- }
- printf("Commands available:\n");
- printf("\tpublic PublicID: make a PUBLIC identifier lookup\n");
- printf("\tsystem SystemID: make a SYSTEM identifier lookup\n");
- printf("\tresolve PublicID SystemID: do a full resolver lookup\n");
- printf("\tadd 'type' 'orig' 'replace' : add an entry\n");
- printf("\tdel 'values' : remove values\n");
- printf("\tdump: print the current catalog state\n");
- printf("\tdebug: increase the verbosity level\n");
- printf("\tquiet: decrease the verbosity level\n");
- printf("\texit: quit the shell\n");
- }
- free(cmdline); /* not xmlFree here ! */
- }
-}
-
-/************************************************************************
- * *
- * Main *
- * *
- ************************************************************************/
-static void usage(const char *name) {
- /* split into 2 printf's to avoid overly long string (gcc warning) */
- printf("\
-Usage : %s [options] catalogfile entities...\n\
-\tParse the catalog file and query it for the entities\n\
-\t--sgml : handle SGML Super catalogs for --add and --del\n\
-\t--shell : run a shell allowing interactive queries\n\
-\t--create : create a new catalog\n\
-\t--add 'type' 'orig' 'replace' : add an XML entry\n\
-\t--add 'entry' : add an SGML entry\n", name);
- printf("\
-\t--del 'values' : remove values\n\
-\t--noout: avoid dumping the result on stdout\n\
-\t used with --add or --del, it saves the catalog changes\n\
-\t and with --sgml it automatically updates the super catalog\n\
-\t--no-super-update: do not update the SGML super catalog\n\
-\t-v --verbose : provide debug informations\n");
-}
-int main(int argc, char **argv) {
- int i;
- int ret;
- int exit_value = 0;
-
-
- if (argc <= 1) {
- usage(argv[0]);
- return(1);
- }
-
- LIBXML_TEST_VERSION
- for (i = 1; i < argc ; i++) {
- if (!strcmp(argv[i], "-"))
- break;
-
- if (argv[i][0] != '-')
- break;
- if ((!strcmp(argv[i], "-verbose")) ||
- (!strcmp(argv[i], "-v")) ||
- (!strcmp(argv[i], "--verbose"))) {
- verbose++;
- xmlCatalogSetDebug(verbose);
- } else if ((!strcmp(argv[i], "-noout")) ||
- (!strcmp(argv[i], "--noout"))) {
- noout = 1;
- } else if ((!strcmp(argv[i], "-shell")) ||
- (!strcmp(argv[i], "--shell"))) {
- shell++;
- noout = 1;
- } else if ((!strcmp(argv[i], "-sgml")) ||
- (!strcmp(argv[i], "--sgml"))) {
- sgml++;
- } else if ((!strcmp(argv[i], "-create")) ||
- (!strcmp(argv[i], "--create"))) {
- create++;
- } else if ((!strcmp(argv[i], "-convert")) ||
- (!strcmp(argv[i], "--convert"))) {
- convert++;
- } else if ((!strcmp(argv[i], "-no-super-update")) ||
- (!strcmp(argv[i], "--no-super-update"))) {
- no_super_update++;
- } else if ((!strcmp(argv[i], "-add")) ||
- (!strcmp(argv[i], "--add"))) {
- if (sgml)
- i += 2;
- else
- i += 3;
- add++;
- } else if ((!strcmp(argv[i], "-del")) ||
- (!strcmp(argv[i], "--del"))) {
- i += 1;
- del++;
- } else {
- fprintf(stderr, "Unknown option %s\n", argv[i]);
- usage(argv[0]);
- return(1);
- }
- }
-
- for (i = 1; i < argc; i++) {
- if ((!strcmp(argv[i], "-add")) ||
- (!strcmp(argv[i], "--add"))) {
- if (sgml)
- i += 2;
- else
- i += 3;
- continue;
- } else if ((!strcmp(argv[i], "-del")) ||
- (!strcmp(argv[i], "--del"))) {
- i += 1;
-
- /* No catalog entry specified */
- if (i == argc || (sgml && i + 1 == argc)) {
- fprintf(stderr, "No catalog entry specified to remove from\n");
- usage (argv[0]);
- return(1);
- }
-
- continue;
- } else if (argv[i][0] == '-')
- continue;
- filename = argv[i];
- ret = xmlLoadCatalog(argv[i]);
- if ((ret < 0) && (create)) {
- xmlCatalogAdd(BAD_CAST "catalog", BAD_CAST argv[i], NULL);
- }
- break;
- }
-
- if (convert)
- ret = xmlCatalogConvert();
-
- if ((add) || (del)) {
- for (i = 1; i < argc ; i++) {
- if (!strcmp(argv[i], "-"))
- break;
-
- if (argv[i][0] != '-')
- continue;
- if (strcmp(argv[i], "-add") && strcmp(argv[i], "--add") &&
- strcmp(argv[i], "-del") && strcmp(argv[i], "--del"))
- continue;
-
- if (sgml) {
- /*
- * Maintenance of SGML catalogs.
- */
- xmlCatalogPtr catal = NULL;
- xmlCatalogPtr super = NULL;
-
- catal = xmlLoadSGMLSuperCatalog(argv[i + 1]);
-
- if ((!strcmp(argv[i], "-add")) ||
- (!strcmp(argv[i], "--add"))) {
- if (catal == NULL)
- catal = xmlNewCatalog(1);
- xmlACatalogAdd(catal, BAD_CAST "CATALOG",
- BAD_CAST argv[i + 2], NULL);
-
- if (!no_super_update) {
- super = xmlLoadSGMLSuperCatalog(XML_SGML_DEFAULT_CATALOG);
- if (super == NULL)
- super = xmlNewCatalog(1);
-
- xmlACatalogAdd(super, BAD_CAST "CATALOG",
- BAD_CAST argv[i + 1], NULL);
- }
- } else {
- if (catal != NULL)
- ret = xmlACatalogRemove(catal, BAD_CAST argv[i + 2]);
- else
- ret = -1;
- if (ret < 0) {
- fprintf(stderr, "Failed to remove entry from %s\n",
- argv[i + 1]);
- exit_value = 1;
- }
- if ((!no_super_update) && (noout) && (catal != NULL) &&
- (xmlCatalogIsEmpty(catal))) {
- super = xmlLoadSGMLSuperCatalog(
- XML_SGML_DEFAULT_CATALOG);
- if (super != NULL) {
- ret = xmlACatalogRemove(super,
- BAD_CAST argv[i + 1]);
- if (ret < 0) {
- fprintf(stderr,
- "Failed to remove entry from %s\n",
- XML_SGML_DEFAULT_CATALOG);
- exit_value = 1;
- }
- }
- }
- }
- if (noout) {
- FILE *out;
-
- if (xmlCatalogIsEmpty(catal)) {
- remove(argv[i + 1]);
- } else {
- out = fopen(argv[i + 1], "w");
- if (out == NULL) {
- fprintf(stderr, "could not open %s for saving\n",
- argv[i + 1]);
- exit_value = 2;
- noout = 0;
- } else {
- xmlACatalogDump(catal, out);
- fclose(out);
- }
- }
- if (!no_super_update && super != NULL) {
- if (xmlCatalogIsEmpty(super)) {
- remove(XML_SGML_DEFAULT_CATALOG);
- } else {
- out = fopen(XML_SGML_DEFAULT_CATALOG, "w");
- if (out == NULL) {
- fprintf(stderr,
- "could not open %s for saving\n",
- XML_SGML_DEFAULT_CATALOG);
- exit_value = 2;
- noout = 0;
- } else {
-
- xmlACatalogDump(super, out);
- fclose(out);
- }
- }
- }
- } else {
- xmlACatalogDump(catal, stdout);
- }
- i += 2;
- } else {
- if ((!strcmp(argv[i], "-add")) ||
- (!strcmp(argv[i], "--add"))) {
- if ((argv[i + 3] == NULL) || (argv[i + 3][0] == 0))
- ret = xmlCatalogAdd(BAD_CAST argv[i + 1], NULL,
- BAD_CAST argv[i + 2]);
- else
- ret = xmlCatalogAdd(BAD_CAST argv[i + 1],
- BAD_CAST argv[i + 2],
- BAD_CAST argv[i + 3]);
- if (ret != 0) {
- printf("add command failed\n");
- exit_value = 3;
- }
- i += 3;
- } else if ((!strcmp(argv[i], "-del")) ||
- (!strcmp(argv[i], "--del"))) {
- ret = xmlCatalogRemove(BAD_CAST argv[i + 1]);
- if (ret < 0) {
- fprintf(stderr, "Failed to remove entry %s\n",
- argv[i + 1]);
- exit_value = 1;
- }
- i += 1;
- }
- }
- }
-
- } else if (shell) {
- usershell();
- } else {
- for (i++; i < argc; i++) {
- xmlURIPtr uri;
- xmlChar *ans;
-
- uri = xmlParseURI(argv[i]);
- if (uri == NULL) {
- ans = xmlCatalogResolvePublic((const xmlChar *) argv[i]);
- if (ans == NULL) {
- printf("No entry for PUBLIC %s\n", argv[i]);
- exit_value = 4;
- } else {
- printf("%s\n", (char *) ans);
- xmlFree(ans);
- }
- } else {
- xmlFreeURI(uri);
- ans = xmlCatalogResolveSystem((const xmlChar *) argv[i]);
- if (ans == NULL) {
- printf("No entry for SYSTEM %s\n", argv[i]);
- ans = xmlCatalogResolveURI ((const xmlChar *) argv[i]);
- if (ans == NULL) {
- printf ("No entry for URI %s\n", argv[i]);
- exit_value = 4;
- } else {
- printf("%s\n", (char *) ans);
- xmlFree (ans);
- }
- } else {
- printf("%s\n", (char *) ans);
- xmlFree(ans);
- }
- }
- }
- }
- if ((!sgml) && ((add) || (del) || (create) || (convert))) {
- if (noout && filename && *filename) {
- FILE *out;
-
- out = fopen(filename, "w");
- if (out == NULL) {
- fprintf(stderr, "could not open %s for saving\n", filename);
- exit_value = 2;
- noout = 0;
- } else {
- xmlCatalogDump(out);
- }
- } else {
- xmlCatalogDump(stdout);
- }
- }
-
- /*
- * Cleanup and check for memory leaks
- */
- xmlCleanupParser();
- xmlMemoryDump();
- return(exit_value);
-}
-#else
-int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
- fprintf(stderr, "libxml was not compiled with catalog and output support\n");
- return(1);
-}
-#endif
diff --git a/external/libxml2_android/jni/libxml2/xmllint.c b/external/libxml2_android/jni/libxml2/xmllint.c
deleted file mode 100644
index d9368c1d..00000000
--- a/external/libxml2_android/jni/libxml2/xmllint.c
+++ /dev/null
@@ -1,3814 +0,0 @@
-/*
- * xmllint.c : a small tester program for XML input.
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#include "libxml.h"
-
-#include <string.h>
-#include <stdarg.h>
-#include <assert.h>
-
-#if defined (_WIN32) && !defined(__CYGWIN__)
-#if defined (_MSC_VER) || defined(__BORLANDC__)
-#include <winsock2.h>
-#pragma comment(lib, "ws2_32.lib")
-#define gettimeofday(p1,p2)
-#endif /* _MSC_VER */
-#endif /* _WIN32 */
-
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-
-#ifdef __MINGW32__
-#define _WINSOCKAPI_
-#include <wsockcompat.h>
-#include <winsock2.h>
-#undef XML_SOCKLEN_T
-#define XML_SOCKLEN_T unsigned int
-#endif
-
-#ifdef HAVE_SYS_TIMEB_H
-#include <sys/timeb.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-/* seems needed for Solaris */
-#ifndef MAP_FAILED
-#define MAP_FAILED ((void *) -1)
-#endif
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_LIBREADLINE
-#include <readline/readline.h>
-#ifdef HAVE_LIBHISTORY
-#include <readline/history.h>
-#endif
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/HTMLparser.h>
-#include <libxml/HTMLtree.h>
-#include <libxml/tree.h>
-#include <libxml/xpath.h>
-#include <libxml/debugXML.h>
-#include <libxml/xmlerror.h>
-#ifdef LIBXML_XINCLUDE_ENABLED
-#include <libxml/xinclude.h>
-#endif
-#ifdef LIBXML_CATALOG_ENABLED
-#include <libxml/catalog.h>
-#endif
-#include <libxml/globals.h>
-#include <libxml/xmlreader.h>
-#ifdef LIBXML_SCHEMATRON_ENABLED
-#include <libxml/schematron.h>
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#include <libxml/xmlschemas.h>
-#endif
-#ifdef LIBXML_PATTERN_ENABLED
-#include <libxml/pattern.h>
-#endif
-#ifdef LIBXML_C14N_ENABLED
-#include <libxml/c14n.h>
-#endif
-#ifdef LIBXML_OUTPUT_ENABLED
-#include <libxml/xmlsave.h>
-#endif
-
-#ifndef XML_XML_DEFAULT_CATALOG
-#define XML_XML_DEFAULT_CATALOG "file:///etc/xml/catalog"
-#endif
-
-typedef enum {
- XMLLINT_RETURN_OK = 0, /* No error */
- XMLLINT_ERR_UNCLASS = 1, /* Unclassified */
- XMLLINT_ERR_DTD = 2, /* Error in DTD */
- XMLLINT_ERR_VALID = 3, /* Validation error */
- XMLLINT_ERR_RDFILE = 4, /* CtxtReadFile error */
- XMLLINT_ERR_SCHEMACOMP = 5, /* Schema compilation */
- XMLLINT_ERR_OUT = 6, /* Error writing output */
- XMLLINT_ERR_SCHEMAPAT = 7, /* Error in schema pattern */
- XMLLINT_ERR_RDREGIS = 8, /* Error in Reader registration */
- XMLLINT_ERR_MEM = 9, /* Out of memory error */
- XMLLINT_ERR_XPATH = 10 /* XPath evaluation error */
-} xmllintReturnCode;
-#ifdef LIBXML_DEBUG_ENABLED
-static int shell = 0;
-static int debugent = 0;
-#endif
-static int debug = 0;
-static int maxmem = 0;
-#ifdef LIBXML_TREE_ENABLED
-static int copy = 0;
-#endif /* LIBXML_TREE_ENABLED */
-static int recovery = 0;
-static int noent = 0;
-static int noenc = 0;
-static int noblanks = 0;
-static int noout = 0;
-static int nowrap = 0;
-#ifdef LIBXML_OUTPUT_ENABLED
-static int format = 0;
-static const char *output = NULL;
-static int compress = 0;
-static int oldout = 0;
-#endif /* LIBXML_OUTPUT_ENABLED */
-#ifdef LIBXML_VALID_ENABLED
-static int valid = 0;
-static int postvalid = 0;
-static char * dtdvalid = NULL;
-static char * dtdvalidfpi = NULL;
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
-static char * relaxng = NULL;
-static xmlRelaxNGPtr relaxngschemas = NULL;
-static char * schema = NULL;
-static xmlSchemaPtr wxschemas = NULL;
-#endif
-#ifdef LIBXML_SCHEMATRON_ENABLED
-static char * schematron = NULL;
-static xmlSchematronPtr wxschematron = NULL;
-#endif
-static int repeat = 0;
-static int insert = 0;
-#if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED)
-static int html = 0;
-static int xmlout = 0;
-#endif
-static int htmlout = 0;
-#if defined(LIBXML_HTML_ENABLED)
-static int nodefdtd = 0;
-#endif
-#ifdef LIBXML_PUSH_ENABLED
-static int push = 0;
-static int pushsize = 4096;
-#endif /* LIBXML_PUSH_ENABLED */
-#ifdef HAVE_MMAP
-static int memory = 0;
-#endif
-static int testIO = 0;
-static char *encoding = NULL;
-#ifdef LIBXML_XINCLUDE_ENABLED
-static int xinclude = 0;
-#endif
-static int dtdattrs = 0;
-static int loaddtd = 0;
-static xmllintReturnCode progresult = XMLLINT_RETURN_OK;
-static int timing = 0;
-static int generate = 0;
-static int dropdtd = 0;
-#ifdef LIBXML_CATALOG_ENABLED
-static int catalogs = 0;
-static int nocatalogs = 0;
-#endif
-#ifdef LIBXML_C14N_ENABLED
-static int canonical = 0;
-static int canonical_11 = 0;
-static int exc_canonical = 0;
-#endif
-#ifdef LIBXML_READER_ENABLED
-static int stream = 0;
-static int walker = 0;
-#endif /* LIBXML_READER_ENABLED */
-static int chkregister = 0;
-static int nbregister = 0;
-#ifdef LIBXML_SAX1_ENABLED
-static int sax1 = 0;
-#endif /* LIBXML_SAX1_ENABLED */
-#ifdef LIBXML_PATTERN_ENABLED
-static const char *pattern = NULL;
-static xmlPatternPtr patternc = NULL;
-static xmlStreamCtxtPtr patstream = NULL;
-#endif
-#ifdef LIBXML_XPATH_ENABLED
-static const char *xpathquery = NULL;
-#endif
-static int options = XML_PARSE_COMPACT | XML_PARSE_BIG_LINES;
-static int sax = 0;
-static int oldxml10 = 0;
-
-/************************************************************************
- * *
- * Entity loading control and customization. *
- * *
- ************************************************************************/
-#define MAX_PATHS 64
-#ifdef _WIN32
-# define PATH_SEPARATOR ';'
-#else
-# define PATH_SEPARATOR ':'
-#endif
-static xmlChar *paths[MAX_PATHS + 1];
-static int nbpaths = 0;
-static int load_trace = 0;
-
-static
-void parsePath(const xmlChar *path) {
- const xmlChar *cur;
-
- if (path == NULL)
- return;
- while (*path != 0) {
- if (nbpaths >= MAX_PATHS) {
- fprintf(stderr, "MAX_PATHS reached: too many paths\n");
- return;
- }
- cur = path;
- while ((*cur == ' ') || (*cur == PATH_SEPARATOR))
- cur++;
- path = cur;
- while ((*cur != 0) && (*cur != ' ') && (*cur != PATH_SEPARATOR))
- cur++;
- if (cur != path) {
- paths[nbpaths] = xmlStrndup(path, cur - path);
- if (paths[nbpaths] != NULL)
- nbpaths++;
- path = cur;
- }
- }
-}
-
-static xmlExternalEntityLoader defaultEntityLoader = NULL;
-
-static xmlParserInputPtr
-xmllintExternalEntityLoader(const char *URL, const char *ID,
- xmlParserCtxtPtr ctxt) {
- xmlParserInputPtr ret;
- warningSAXFunc warning = NULL;
- errorSAXFunc err = NULL;
-
- int i;
- const char *lastsegment = URL;
- const char *iter = URL;
-
- if ((nbpaths > 0) && (iter != NULL)) {
- while (*iter != 0) {
- if (*iter == '/')
- lastsegment = iter + 1;
- iter++;
- }
- }
-
- if ((ctxt != NULL) && (ctxt->sax != NULL)) {
- warning = ctxt->sax->warning;
- err = ctxt->sax->error;
- ctxt->sax->warning = NULL;
- ctxt->sax->error = NULL;
- }
-
- if (defaultEntityLoader != NULL) {
- ret = defaultEntityLoader(URL, ID, ctxt);
- if (ret != NULL) {
- if (warning != NULL)
- ctxt->sax->warning = warning;
- if (err != NULL)
- ctxt->sax->error = err;
- if (load_trace) {
- fprintf \
- (stderr,
- "Loaded URL=\"%s\" ID=\"%s\"\n",
- URL ? URL : "(null)",
- ID ? ID : "(null)");
- }
- return(ret);
- }
- }
- for (i = 0;i < nbpaths;i++) {
- xmlChar *newURL;
-
- newURL = xmlStrdup((const xmlChar *) paths[i]);
- newURL = xmlStrcat(newURL, (const xmlChar *) "/");
- newURL = xmlStrcat(newURL, (const xmlChar *) lastsegment);
- if (newURL != NULL) {
- ret = defaultEntityLoader((const char *)newURL, ID, ctxt);
- if (ret != NULL) {
- if (warning != NULL)
- ctxt->sax->warning = warning;
- if (err != NULL)
- ctxt->sax->error = err;
- if (load_trace) {
- fprintf \
- (stderr,
- "Loaded URL=\"%s\" ID=\"%s\"\n",
- newURL,
- ID ? ID : "(null)");
- }
- xmlFree(newURL);
- return(ret);
- }
- xmlFree(newURL);
- }
- }
- if (err != NULL)
- ctxt->sax->error = err;
- if (warning != NULL) {
- ctxt->sax->warning = warning;
- if (URL != NULL)
- warning(ctxt, "failed to load external entity \"%s\"\n", URL);
- else if (ID != NULL)
- warning(ctxt, "failed to load external entity \"%s\"\n", ID);
- }
- return(NULL);
-}
-/************************************************************************
- * *
- * Memory allocation consumption debugging *
- * *
- ************************************************************************/
-
-static void
-OOM(void)
-{
- fprintf(stderr, "Ran out of memory needs > %d bytes\n", maxmem);
- progresult = XMLLINT_ERR_MEM;
-}
-
-static void
-myFreeFunc(void *mem)
-{
- xmlMemFree(mem);
-}
-static void *
-myMallocFunc(size_t size)
-{
- void *ret;
-
- ret = xmlMemMalloc(size);
- if (ret != NULL) {
- if (xmlMemUsed() > maxmem) {
- OOM();
- xmlMemFree(ret);
- return (NULL);
- }
- }
- return (ret);
-}
-static void *
-myReallocFunc(void *mem, size_t size)
-{
- void *ret;
-
- ret = xmlMemRealloc(mem, size);
- if (ret != NULL) {
- if (xmlMemUsed() > maxmem) {
- OOM();
- xmlMemFree(ret);
- return (NULL);
- }
- }
- return (ret);
-}
-static char *
-myStrdupFunc(const char *str)
-{
- char *ret;
-
- ret = xmlMemoryStrdup(str);
- if (ret != NULL) {
- if (xmlMemUsed() > maxmem) {
- OOM();
- xmlFree(ret);
- return (NULL);
- }
- }
- return (ret);
-}
-/************************************************************************
- * *
- * Internal timing routines to remove the necessity to have *
- * unix-specific function calls. *
- * *
- ************************************************************************/
-
-#ifndef HAVE_GETTIMEOFDAY
-#ifdef HAVE_SYS_TIMEB_H
-#ifdef HAVE_SYS_TIME_H
-#ifdef HAVE_FTIME
-
-static int
-my_gettimeofday(struct timeval *tvp, void *tzp)
-{
- struct timeb timebuffer;
-
- ftime(&timebuffer);
- if (tvp) {
- tvp->tv_sec = timebuffer.time;
- tvp->tv_usec = timebuffer.millitm * 1000L;
- }
- return (0);
-}
-#define HAVE_GETTIMEOFDAY 1
-#define gettimeofday my_gettimeofday
-
-#endif /* HAVE_FTIME */
-#endif /* HAVE_SYS_TIME_H */
-#endif /* HAVE_SYS_TIMEB_H */
-#endif /* !HAVE_GETTIMEOFDAY */
-
-#if defined(HAVE_GETTIMEOFDAY)
-static struct timeval begin, end;
-
-/*
- * startTimer: call where you want to start timing
- */
-static void
-startTimer(void)
-{
- gettimeofday(&begin, NULL);
-}
-
-/*
- * endTimer: call where you want to stop timing and to print out a
- * message about the timing performed; format is a printf
- * type argument
- */
-static void XMLCDECL LIBXML_ATTR_FORMAT(1,2)
-endTimer(const char *fmt, ...)
-{
- long msec;
- va_list ap;
-
- gettimeofday(&end, NULL);
- msec = end.tv_sec - begin.tv_sec;
- msec *= 1000;
- msec += (end.tv_usec - begin.tv_usec) / 1000;
-
-#ifndef HAVE_STDARG_H
-#error "endTimer required stdarg functions"
-#endif
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
-
- fprintf(stderr, " took %ld ms\n", msec);
-}
-#elif defined(HAVE_TIME_H)
-/*
- * No gettimeofday function, so we have to make do with calling clock.
- * This is obviously less accurate, but there's little we can do about
- * that.
- */
-#ifndef CLOCKS_PER_SEC
-#define CLOCKS_PER_SEC 100
-#endif
-
-static clock_t begin, end;
-static void
-startTimer(void)
-{
- begin = clock();
-}
-static void XMLCDECL LIBXML_ATTR_FORMAT(1,2)
-endTimer(const char *fmt, ...)
-{
- long msec;
- va_list ap;
-
- end = clock();
- msec = ((end - begin) * 1000) / CLOCKS_PER_SEC;
-
-#ifndef HAVE_STDARG_H
-#error "endTimer required stdarg functions"
-#endif
- va_start(ap, fmt);
- vfprintf(stderr, fmt, ap);
- va_end(ap);
- fprintf(stderr, " took %ld ms\n", msec);
-}
-#else
-
-/*
- * We don't have a gettimeofday or time.h, so we just don't do timing
- */
-static void
-startTimer(void)
-{
- /*
- * Do nothing
- */
-}
-static void XMLCDECL LIBXML_ATTR_FORMAT(1,2)
-endTimer(char *format, ...)
-{
- /*
- * We cannot do anything because we don't have a timing function
- */
-#ifdef HAVE_STDARG_H
- va_list ap;
- va_start(ap, format);
- vfprintf(stderr, format, ap);
- va_end(ap);
- fprintf(stderr, " was not timed\n");
-#else
- /* We don't have gettimeofday, time or stdarg.h, what crazy world is
- * this ?!
- */
-#endif
-}
-#endif
-/************************************************************************
- * *
- * HTML ouput *
- * *
- ************************************************************************/
-static char buffer[50000];
-
-static void
-xmlHTMLEncodeSend(void) {
- char *result;
-
- result = (char *) xmlEncodeEntitiesReentrant(NULL, BAD_CAST buffer);
- if (result) {
- xmlGenericError(xmlGenericErrorContext, "%s", result);
- xmlFree(result);
- }
- buffer[0] = 0;
-}
-
-/**
- * xmlHTMLPrintFileInfo:
- * @input: an xmlParserInputPtr input
- *
- * Displays the associated file and line informations for the current input
- */
-
-static void
-xmlHTMLPrintFileInfo(xmlParserInputPtr input) {
- int len;
- xmlGenericError(xmlGenericErrorContext, "<p>");
-
- len = strlen(buffer);
- if (input != NULL) {
- if (input->filename) {
- snprintf(&buffer[len], sizeof(buffer) - len, "%s:%d: ", input->filename,
- input->line);
- } else {
- snprintf(&buffer[len], sizeof(buffer) - len, "Entity: line %d: ", input->line);
- }
- }
- xmlHTMLEncodeSend();
-}
-
-/**
- * xmlHTMLPrintFileContext:
- * @input: an xmlParserInputPtr input
- *
- * Displays current context within the input content for error tracking
- */
-
-static void
-xmlHTMLPrintFileContext(xmlParserInputPtr input) {
- const xmlChar *cur, *base;
- int len;
- int n;
-
- if (input == NULL) return;
- xmlGenericError(xmlGenericErrorContext, "<pre>\n");
- cur = input->cur;
- base = input->base;
- while ((cur > base) && ((*cur == '\n') || (*cur == '\r'))) {
- cur--;
- }
- n = 0;
- while ((n++ < 80) && (cur > base) && (*cur != '\n') && (*cur != '\r'))
- cur--;
- if ((*cur == '\n') || (*cur == '\r')) cur++;
- base = cur;
- n = 0;
- while ((*cur != 0) && (*cur != '\n') && (*cur != '\r') && (n < 79)) {
- len = strlen(buffer);
- snprintf(&buffer[len], sizeof(buffer) - len, "%c",
- (unsigned char) *cur++);
- n++;
- }
- len = strlen(buffer);
- snprintf(&buffer[len], sizeof(buffer) - len, "\n");
- cur = input->cur;
- while ((*cur == '\n') || (*cur == '\r'))
- cur--;
- n = 0;
- while ((cur != base) && (n++ < 80)) {
- len = strlen(buffer);
- snprintf(&buffer[len], sizeof(buffer) - len, " ");
- base++;
- }
- len = strlen(buffer);
- snprintf(&buffer[len], sizeof(buffer) - len, "^\n");
- xmlHTMLEncodeSend();
- xmlGenericError(xmlGenericErrorContext, "</pre>");
-}
-
-/**
- * xmlHTMLError:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format an error messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-xmlHTMLError(void *ctx, const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr input;
- va_list args;
- int len;
-
- buffer[0] = 0;
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
-
- xmlHTMLPrintFileInfo(input);
-
- xmlGenericError(xmlGenericErrorContext, "<b>error</b>: ");
- va_start(args, msg);
- len = strlen(buffer);
- vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
- va_end(args);
- xmlHTMLEncodeSend();
- xmlGenericError(xmlGenericErrorContext, "</p>\n");
-
- xmlHTMLPrintFileContext(input);
- xmlHTMLEncodeSend();
-}
-
-/**
- * xmlHTMLWarning:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a warning messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-xmlHTMLWarning(void *ctx, const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr input;
- va_list args;
- int len;
-
- buffer[0] = 0;
- input = ctxt->input;
- if ((input != NULL) && (input->filename == NULL) && (ctxt->inputNr > 1)) {
- input = ctxt->inputTab[ctxt->inputNr - 2];
- }
-
-
- xmlHTMLPrintFileInfo(input);
-
- xmlGenericError(xmlGenericErrorContext, "<b>warning</b>: ");
- va_start(args, msg);
- len = strlen(buffer);
- vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
- va_end(args);
- xmlHTMLEncodeSend();
- xmlGenericError(xmlGenericErrorContext, "</p>\n");
-
- xmlHTMLPrintFileContext(input);
- xmlHTMLEncodeSend();
-}
-
-/**
- * xmlHTMLValidityError:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format an validity error messages, gives file,
- * line, position and extra parameters.
- */
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-xmlHTMLValidityError(void *ctx, const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr input;
- va_list args;
- int len;
-
- buffer[0] = 0;
- input = ctxt->input;
- if ((input->filename == NULL) && (ctxt->inputNr > 1))
- input = ctxt->inputTab[ctxt->inputNr - 2];
-
- xmlHTMLPrintFileInfo(input);
-
- xmlGenericError(xmlGenericErrorContext, "<b>validity error</b>: ");
- len = strlen(buffer);
- va_start(args, msg);
- vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
- va_end(args);
- xmlHTMLEncodeSend();
- xmlGenericError(xmlGenericErrorContext, "</p>\n");
-
- xmlHTMLPrintFileContext(input);
- xmlHTMLEncodeSend();
- progresult = XMLLINT_ERR_VALID;
-}
-
-/**
- * xmlHTMLValidityWarning:
- * @ctx: an XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a validity warning messages, gives file, line,
- * position and extra parameters.
- */
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-xmlHTMLValidityWarning(void *ctx, const char *msg, ...)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlParserInputPtr input;
- va_list args;
- int len;
-
- buffer[0] = 0;
- input = ctxt->input;
- if ((input->filename == NULL) && (ctxt->inputNr > 1))
- input = ctxt->inputTab[ctxt->inputNr - 2];
-
- xmlHTMLPrintFileInfo(input);
-
- xmlGenericError(xmlGenericErrorContext, "<b>validity warning</b>: ");
- va_start(args, msg);
- len = strlen(buffer);
- vsnprintf(&buffer[len], sizeof(buffer) - len, msg, args);
- va_end(args);
- xmlHTMLEncodeSend();
- xmlGenericError(xmlGenericErrorContext, "</p>\n");
-
- xmlHTMLPrintFileContext(input);
- xmlHTMLEncodeSend();
-}
-
-/************************************************************************
- * *
- * Shell Interface *
- * *
- ************************************************************************/
-#ifdef LIBXML_DEBUG_ENABLED
-#ifdef LIBXML_XPATH_ENABLED
-/**
- * xmlShellReadline:
- * @prompt: the prompt value
- *
- * Read a string
- *
- * Returns a pointer to it or NULL on EOF the caller is expected to
- * free the returned string.
- */
-static char *
-xmlShellReadline(char *prompt) {
-#ifdef HAVE_LIBREADLINE
- char *line_read;
-
- /* Get a line from the user. */
- line_read = readline (prompt);
-
- /* If the line has any text in it, save it on the history. */
- if (line_read && *line_read)
- add_history (line_read);
-
- return (line_read);
-#else
- char line_read[501];
- char *ret;
- int len;
-
- if (prompt != NULL)
- fprintf(stdout, "%s", prompt);
- fflush(stdout);
- if (!fgets(line_read, 500, stdin))
- return(NULL);
- line_read[500] = 0;
- len = strlen(line_read);
- ret = (char *) malloc(len + 1);
- if (ret != NULL) {
- memcpy (ret, line_read, len + 1);
- }
- return(ret);
-#endif
-}
-#endif /* LIBXML_XPATH_ENABLED */
-#endif /* LIBXML_DEBUG_ENABLED */
-
-/************************************************************************
- * *
- * I/O Interfaces *
- * *
- ************************************************************************/
-
-static int myRead(FILE *f, char * buf, int len) {
- return(fread(buf, 1, len, f));
-}
-static void myClose(FILE *f) {
- if (f != stdin) {
- fclose(f);
- }
-}
-
-/************************************************************************
- * *
- * SAX based tests *
- * *
- ************************************************************************/
-
-/*
- * empty SAX block
- */
-static xmlSAXHandler emptySAXHandlerStruct = {
- NULL, /* internalSubset */
- NULL, /* isStandalone */
- NULL, /* hasInternalSubset */
- NULL, /* hasExternalSubset */
- NULL, /* resolveEntity */
- NULL, /* getEntity */
- NULL, /* entityDecl */
- NULL, /* notationDecl */
- NULL, /* attributeDecl */
- NULL, /* elementDecl */
- NULL, /* unparsedEntityDecl */
- NULL, /* setDocumentLocator */
- NULL, /* startDocument */
- NULL, /* endDocument */
- NULL, /* startElement */
- NULL, /* endElement */
- NULL, /* reference */
- NULL, /* characters */
- NULL, /* ignorableWhitespace */
- NULL, /* processingInstruction */
- NULL, /* comment */
- NULL, /* xmlParserWarning */
- NULL, /* xmlParserError */
- NULL, /* xmlParserError */
- NULL, /* getParameterEntity */
- NULL, /* cdataBlock; */
- NULL, /* externalSubset; */
- XML_SAX2_MAGIC,
- NULL,
- NULL, /* startElementNs */
- NULL, /* endElementNs */
- NULL /* xmlStructuredErrorFunc */
-};
-
-static xmlSAXHandlerPtr emptySAXHandler = &emptySAXHandlerStruct;
-extern xmlSAXHandlerPtr debugSAXHandler;
-static int callbacks;
-
-/**
- * isStandaloneDebug:
- * @ctxt: An XML parser context
- *
- * Is this document tagged standalone ?
- *
- * Returns 1 if true
- */
-static int
-isStandaloneDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (noout)
- return(0);
- fprintf(stdout, "SAX.isStandalone()\n");
- return(0);
-}
-
-/**
- * hasInternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- *
- * Returns 1 if true
- */
-static int
-hasInternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (noout)
- return(0);
- fprintf(stdout, "SAX.hasInternalSubset()\n");
- return(0);
-}
-
-/**
- * hasExternalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- *
- * Returns 1 if true
- */
-static int
-hasExternalSubsetDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (noout)
- return(0);
- fprintf(stdout, "SAX.hasExternalSubset()\n");
- return(0);
-}
-
-/**
- * internalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an internal subset
- */
-static void
-internalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.internalSubset(%s,", name);
- if (ExternalID == NULL)
- fprintf(stdout, " ,");
- else
- fprintf(stdout, " %s,", ExternalID);
- if (SystemID == NULL)
- fprintf(stdout, " )\n");
- else
- fprintf(stdout, " %s)\n", SystemID);
-}
-
-/**
- * externalSubsetDebug:
- * @ctxt: An XML parser context
- *
- * Does this document has an external subset
- */
-static void
-externalSubsetDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.externalSubset(%s,", name);
- if (ExternalID == NULL)
- fprintf(stdout, " ,");
- else
- fprintf(stdout, " %s,", ExternalID);
- if (SystemID == NULL)
- fprintf(stdout, " )\n");
- else
- fprintf(stdout, " %s)\n", SystemID);
-}
-
-/**
- * resolveEntityDebug:
- * @ctxt: An XML parser context
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * Special entity resolver, better left to the parser, it has
- * more context than the application layer.
- * The default behaviour is to NOT resolve the entities, in that case
- * the ENTITY_REF nodes are built in the structure (and the parameter
- * values).
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlParserInputPtr
-resolveEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *publicId, const xmlChar *systemId)
-{
- callbacks++;
- if (noout)
- return(NULL);
- /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */
-
-
- fprintf(stdout, "SAX.resolveEntity(");
- if (publicId != NULL)
- fprintf(stdout, "%s", (char *)publicId);
- else
- fprintf(stdout, " ");
- if (systemId != NULL)
- fprintf(stdout, ", %s)\n", (char *)systemId);
- else
- fprintf(stdout, ", )\n");
- return(NULL);
-}
-
-/**
- * getEntityDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get an entity by name
- *
- * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
- */
-static xmlEntityPtr
-getEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (noout)
- return(NULL);
- fprintf(stdout, "SAX.getEntity(%s)\n", name);
- return(NULL);
-}
-
-/**
- * getParameterEntityDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * Get a parameter entity by name
- *
- * Returns the xmlParserInputPtr
- */
-static xmlEntityPtr
-getParameterEntityDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (noout)
- return(NULL);
- fprintf(stdout, "SAX.getParameterEntity(%s)\n", name);
- return(NULL);
-}
-
-
-/**
- * entityDeclDebug:
- * @ctxt: An XML parser context
- * @name: the entity name
- * @type: the entity type
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @content: the entity value (without processing).
- *
- * An entity definition has been parsed
- */
-static void
-entityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
- const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
-{
-const xmlChar *nullstr = BAD_CAST "(null)";
- /* not all libraries handle printing null pointers nicely */
- if (publicId == NULL)
- publicId = nullstr;
- if (systemId == NULL)
- systemId = nullstr;
- if (content == NULL)
- content = (xmlChar *)nullstr;
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n",
- name, type, publicId, systemId, content);
-}
-
-/**
- * attributeDeclDebug:
- * @ctxt: An XML parser context
- * @name: the attribute name
- * @type: the attribute type
- *
- * An attribute definition has been parsed
- */
-static void
-attributeDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar * elem,
- const xmlChar * name, int type, int def,
- const xmlChar * defaultValue, xmlEnumerationPtr tree)
-{
- callbacks++;
- if (noout)
- return;
- if (defaultValue == NULL)
- fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, NULL, ...)\n",
- elem, name, type, def);
- else
- fprintf(stdout, "SAX.attributeDecl(%s, %s, %d, %d, %s, ...)\n",
- elem, name, type, def, defaultValue);
- xmlFreeEnumeration(tree);
-}
-
-/**
- * elementDeclDebug:
- * @ctxt: An XML parser context
- * @name: the element name
- * @type: the element type
- * @content: the element value (without processing).
- *
- * An element definition has been parsed
- */
-static void
-elementDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, int type,
- xmlElementContentPtr content ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n",
- name, type);
-}
-
-/**
- * notationDeclDebug:
- * @ctxt: An XML parser context
- * @name: The name of the notation
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- *
- * What to do when a notation declaration has been parsed.
- */
-static void
-notationDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n",
- (char *) name, (char *) publicId, (char *) systemId);
-}
-
-/**
- * unparsedEntityDeclDebug:
- * @ctxt: An XML parser context
- * @name: The name of the entity
- * @publicId: The public ID of the entity
- * @systemId: The system ID of the entity
- * @notationName: the name of the notation
- *
- * What to do when an unparsed entity declaration is parsed
- */
-static void
-unparsedEntityDeclDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId,
- const xmlChar *notationName)
-{
-const xmlChar *nullstr = BAD_CAST "(null)";
-
- if (publicId == NULL)
- publicId = nullstr;
- if (systemId == NULL)
- systemId = nullstr;
- if (notationName == NULL)
- notationName = nullstr;
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n",
- (char *) name, (char *) publicId, (char *) systemId,
- (char *) notationName);
-}
-
-/**
- * setDocumentLocatorDebug:
- * @ctxt: An XML parser context
- * @loc: A SAX Locator
- *
- * Receive the document locator at startup, actually xmlDefaultSAXLocator
- * Everything is available on the context, so this is useless in our case.
- */
-static void
-setDocumentLocatorDebug(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.setDocumentLocator()\n");
-}
-
-/**
- * startDocumentDebug:
- * @ctxt: An XML parser context
- *
- * called when the document start being processed.
- */
-static void
-startDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.startDocument()\n");
-}
-
-/**
- * endDocumentDebug:
- * @ctxt: An XML parser context
- *
- * called when the document end has been detected.
- */
-static void
-endDocumentDebug(void *ctx ATTRIBUTE_UNUSED)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.endDocument()\n");
-}
-
-/**
- * startElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name, const xmlChar **atts)
-{
- int i;
-
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.startElement(%s", (char *) name);
- if (atts != NULL) {
- for (i = 0;(atts[i] != NULL);i++) {
- fprintf(stdout, ", %s='", atts[i++]);
- if (atts[i] != NULL)
- fprintf(stdout, "%s'", atts[i]);
- }
- }
- fprintf(stdout, ")\n");
-}
-
-/**
- * endElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.endElement(%s)\n", (char *) name);
-}
-
-/**
- * charactersDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- * Question: how much at a time ???
- */
-static void
-charactersDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- char out[40];
- int i;
-
- callbacks++;
- if (noout)
- return;
- for (i = 0;(i<len) && (i < 30);i++)
- out[i] = ch[i];
- out[i] = 0;
-
- fprintf(stdout, "SAX.characters(%s, %d)\n", out, len);
-}
-
-/**
- * referenceDebug:
- * @ctxt: An XML parser context
- * @name: The entity name
- *
- * called when an entity reference is detected.
- */
-static void
-referenceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.reference(%s)\n", name);
-}
-
-/**
- * ignorableWhitespaceDebug:
- * @ctxt: An XML parser context
- * @ch: a xmlChar string
- * @start: the first char in the string
- * @len: the number of xmlChar
- *
- * receiving some ignorable whitespaces from the parser.
- * Question: how much at a time ???
- */
-static void
-ignorableWhitespaceDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch, int len)
-{
- char out[40];
- int i;
-
- callbacks++;
- if (noout)
- return;
- for (i = 0;(i<len) && (i < 30);i++)
- out[i] = ch[i];
- out[i] = 0;
- fprintf(stdout, "SAX.ignorableWhitespace(%s, %d)\n", out, len);
-}
-
-/**
- * processingInstructionDebug:
- * @ctxt: An XML parser context
- * @target: the target name
- * @data: the PI data's
- * @len: the number of xmlChar
- *
- * A processing instruction has been parsed.
- */
-static void
-processingInstructionDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *target,
- const xmlChar *data)
-{
- callbacks++;
- if (noout)
- return;
- if (data != NULL)
- fprintf(stdout, "SAX.processingInstruction(%s, %s)\n",
- (char *) target, (char *) data);
- else
- fprintf(stdout, "SAX.processingInstruction(%s, NULL)\n",
- (char *) target);
-}
-
-/**
- * cdataBlockDebug:
- * @ctx: the user data (XML parser context)
- * @value: The pcdata content
- * @len: the block length
- *
- * called when a pcdata block has been parsed
- */
-static void
-cdataBlockDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value, int len)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.pcdata(%.20s, %d)\n",
- (char *) value, len);
-}
-
-/**
- * commentDebug:
- * @ctxt: An XML parser context
- * @value: the comment content
- *
- * A comment has been parsed.
- */
-static void
-commentDebug(void *ctx ATTRIBUTE_UNUSED, const xmlChar *value)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.comment(%s)\n", value);
-}
-
-/**
- * warningDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a warning messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-warningDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (noout)
- return;
- va_start(args, msg);
- fprintf(stdout, "SAX.warning: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-/**
- * errorDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a error messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-errorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (noout)
- return;
- va_start(args, msg);
- fprintf(stdout, "SAX.error: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-/**
- * fatalErrorDebug:
- * @ctxt: An XML parser context
- * @msg: the message to display/transmit
- * @...: extra parameters for the message display
- *
- * Display and format a fatalError messages, gives file, line, position and
- * extra parameters.
- */
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-fatalErrorDebug(void *ctx ATTRIBUTE_UNUSED, const char *msg, ...)
-{
- va_list args;
-
- callbacks++;
- if (noout)
- return;
- va_start(args, msg);
- fprintf(stdout, "SAX.fatalError: ");
- vfprintf(stdout, msg, args);
- va_end(args);
-}
-
-static xmlSAXHandler debugSAXHandlerStruct = {
- internalSubsetDebug,
- isStandaloneDebug,
- hasInternalSubsetDebug,
- hasExternalSubsetDebug,
- resolveEntityDebug,
- getEntityDebug,
- entityDeclDebug,
- notationDeclDebug,
- attributeDeclDebug,
- elementDeclDebug,
- unparsedEntityDeclDebug,
- setDocumentLocatorDebug,
- startDocumentDebug,
- endDocumentDebug,
- startElementDebug,
- endElementDebug,
- referenceDebug,
- charactersDebug,
- ignorableWhitespaceDebug,
- processingInstructionDebug,
- commentDebug,
- warningDebug,
- errorDebug,
- fatalErrorDebug,
- getParameterEntityDebug,
- cdataBlockDebug,
- externalSubsetDebug,
- 1,
- NULL,
- NULL,
- NULL,
- NULL
-};
-
-xmlSAXHandlerPtr debugSAXHandler = &debugSAXHandlerStruct;
-
-/*
- * SAX2 specific callbacks
- */
-/**
- * startElementNsDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when an opening tag has been processed.
- */
-static void
-startElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI,
- int nb_namespaces,
- const xmlChar **namespaces,
- int nb_attributes,
- int nb_defaulted,
- const xmlChar **attributes)
-{
- int i;
-
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.startElementNs(%s", (char *) localname);
- if (prefix == NULL)
- fprintf(stdout, ", NULL");
- else
- fprintf(stdout, ", %s", (char *) prefix);
- if (URI == NULL)
- fprintf(stdout, ", NULL");
- else
- fprintf(stdout, ", '%s'", (char *) URI);
- fprintf(stdout, ", %d", nb_namespaces);
-
- if (namespaces != NULL) {
- for (i = 0;i < nb_namespaces * 2;i++) {
- fprintf(stdout, ", xmlns");
- if (namespaces[i] != NULL)
- fprintf(stdout, ":%s", namespaces[i]);
- i++;
- fprintf(stdout, "='%s'", namespaces[i]);
- }
- }
- fprintf(stdout, ", %d, %d", nb_attributes, nb_defaulted);
- if (attributes != NULL) {
- for (i = 0;i < nb_attributes * 5;i += 5) {
- if (attributes[i + 1] != NULL)
- fprintf(stdout, ", %s:%s='", attributes[i + 1], attributes[i]);
- else
- fprintf(stdout, ", %s='", attributes[i]);
- fprintf(stdout, "%.4s...', %d", attributes[i + 3],
- (int)(attributes[i + 4] - attributes[i + 3]));
- }
- }
- fprintf(stdout, ")\n");
-}
-
-/**
- * endElementDebug:
- * @ctxt: An XML parser context
- * @name: The element name
- *
- * called when the end of an element has been detected.
- */
-static void
-endElementNsDebug(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI)
-{
- callbacks++;
- if (noout)
- return;
- fprintf(stdout, "SAX.endElementNs(%s", (char *) localname);
- if (prefix == NULL)
- fprintf(stdout, ", NULL");
- else
- fprintf(stdout, ", %s", (char *) prefix);
- if (URI == NULL)
- fprintf(stdout, ", NULL)\n");
- else
- fprintf(stdout, ", '%s')\n", (char *) URI);
-}
-
-static xmlSAXHandler debugSAX2HandlerStruct = {
- internalSubsetDebug,
- isStandaloneDebug,
- hasInternalSubsetDebug,
- hasExternalSubsetDebug,
- resolveEntityDebug,
- getEntityDebug,
- entityDeclDebug,
- notationDeclDebug,
- attributeDeclDebug,
- elementDeclDebug,
- unparsedEntityDeclDebug,
- setDocumentLocatorDebug,
- startDocumentDebug,
- endDocumentDebug,
- NULL,
- NULL,
- referenceDebug,
- charactersDebug,
- ignorableWhitespaceDebug,
- processingInstructionDebug,
- commentDebug,
- warningDebug,
- errorDebug,
- fatalErrorDebug,
- getParameterEntityDebug,
- cdataBlockDebug,
- externalSubsetDebug,
- XML_SAX2_MAGIC,
- NULL,
- startElementNsDebug,
- endElementNsDebug,
- NULL
-};
-
-static xmlSAXHandlerPtr debugSAX2Handler = &debugSAX2HandlerStruct;
-
-static void
-testSAX(const char *filename) {
- xmlSAXHandlerPtr handler;
- const char *user_data = "user_data"; /* mostly for debugging */
- xmlParserInputBufferPtr buf = NULL;
- xmlParserInputPtr inputStream;
- xmlParserCtxtPtr ctxt = NULL;
- xmlSAXHandlerPtr old_sax = NULL;
-
- callbacks = 0;
-
- if (noout) {
- handler = emptySAXHandler;
-#ifdef LIBXML_SAX1_ENABLED
- } else if (sax1) {
- handler = debugSAXHandler;
-#endif
- } else {
- handler = debugSAX2Handler;
- }
-
- /*
- * it's not the simplest code but the most generic in term of I/O
- */
- buf = xmlParserInputBufferCreateFilename(filename, XML_CHAR_ENCODING_NONE);
- if (buf == NULL) {
- goto error;
- }
-
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (wxschemas != NULL) {
- int ret;
- xmlSchemaValidCtxtPtr vctxt;
-
- vctxt = xmlSchemaNewValidCtxt(wxschemas);
- xmlSchemaSetValidErrors(vctxt,
- (xmlSchemaValidityErrorFunc) fprintf,
- (xmlSchemaValidityWarningFunc) fprintf,
- stderr);
- xmlSchemaValidateSetFilename(vctxt, filename);
-
- ret = xmlSchemaValidateStream(vctxt, buf, 0, handler,
- (void *)user_data);
- if (repeat == 0) {
- if (ret == 0) {
- fprintf(stderr, "%s validates\n", filename);
- } else if (ret > 0) {
- fprintf(stderr, "%s fails to validate\n", filename);
- progresult = XMLLINT_ERR_VALID;
- } else {
- fprintf(stderr, "%s validation generated an internal error\n",
- filename);
- progresult = XMLLINT_ERR_VALID;
- }
- }
- xmlSchemaFreeValidCtxt(vctxt);
- } else
-#endif
- {
- /*
- * Create the parser context amd hook the input
- */
- ctxt = xmlNewParserCtxt();
- if (ctxt == NULL) {
- xmlFreeParserInputBuffer(buf);
- goto error;
- }
- old_sax = ctxt->sax;
- ctxt->sax = handler;
- ctxt->userData = (void *) user_data;
- inputStream = xmlNewIOInputStream(ctxt, buf, XML_CHAR_ENCODING_NONE);
- if (inputStream == NULL) {
- xmlFreeParserInputBuffer(buf);
- goto error;
- }
- inputPush(ctxt, inputStream);
-
- /* do the parsing */
- xmlParseDocument(ctxt);
-
- if (ctxt->myDoc != NULL) {
- fprintf(stderr, "SAX generated a doc !\n");
- xmlFreeDoc(ctxt->myDoc);
- ctxt->myDoc = NULL;
- }
- }
-
-error:
- if (ctxt != NULL) {
- ctxt->sax = old_sax;
- xmlFreeParserCtxt(ctxt);
- }
-}
-
-/************************************************************************
- * *
- * Stream Test processing *
- * *
- ************************************************************************/
-#ifdef LIBXML_READER_ENABLED
-static void processNode(xmlTextReaderPtr reader) {
- const xmlChar *name, *value;
- int type, empty;
-
- type = xmlTextReaderNodeType(reader);
- empty = xmlTextReaderIsEmptyElement(reader);
-
- if (debug) {
- name = xmlTextReaderConstName(reader);
- if (name == NULL)
- name = BAD_CAST "--";
-
- value = xmlTextReaderConstValue(reader);
-
-
- printf("%d %d %s %d %d",
- xmlTextReaderDepth(reader),
- type,
- name,
- empty,
- xmlTextReaderHasValue(reader));
- if (value == NULL)
- printf("\n");
- else {
- printf(" %s\n", value);
- }
- }
-#ifdef LIBXML_PATTERN_ENABLED
- if (patternc) {
- xmlChar *path = NULL;
- int match = -1;
-
- if (type == XML_READER_TYPE_ELEMENT) {
- /* do the check only on element start */
- match = xmlPatternMatch(patternc, xmlTextReaderCurrentNode(reader));
-
- if (match) {
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
- path = xmlGetNodePath(xmlTextReaderCurrentNode(reader));
- printf("Node %s matches pattern %s\n", path, pattern);
-#else
- printf("Node %s matches pattern %s\n",
- xmlTextReaderConstName(reader), pattern);
-#endif
- }
- }
- if (patstream != NULL) {
- int ret;
-
- if (type == XML_READER_TYPE_ELEMENT) {
- ret = xmlStreamPush(patstream,
- xmlTextReaderConstLocalName(reader),
- xmlTextReaderConstNamespaceUri(reader));
- if (ret < 0) {
- fprintf(stderr, "xmlStreamPush() failure\n");
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- } else if (ret != match) {
-#if defined(LIBXML_TREE_ENABLED) || defined(LIBXML_DEBUG_ENABLED)
- if (path == NULL) {
- path = xmlGetNodePath(
- xmlTextReaderCurrentNode(reader));
- }
-#endif
- fprintf(stderr,
- "xmlPatternMatch and xmlStreamPush disagree\n");
- if (path != NULL)
- fprintf(stderr, " pattern %s node %s\n",
- pattern, path);
- else
- fprintf(stderr, " pattern %s node %s\n",
- pattern, xmlTextReaderConstName(reader));
- }
-
- }
- if ((type == XML_READER_TYPE_END_ELEMENT) ||
- ((type == XML_READER_TYPE_ELEMENT) && (empty))) {
- ret = xmlStreamPop(patstream);
- if (ret < 0) {
- fprintf(stderr, "xmlStreamPop() failure\n");
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- }
- }
- }
- if (path != NULL)
- xmlFree(path);
- }
-#endif
-}
-
-static void streamFile(char *filename) {
- xmlTextReaderPtr reader;
- int ret;
-#ifdef HAVE_MMAP
- int fd = -1;
- struct stat info;
- const char *base = NULL;
- xmlParserInputBufferPtr input = NULL;
-
- if (memory) {
- if (stat(filename, &info) < 0)
- return;
- if ((fd = open(filename, O_RDONLY)) < 0)
- return;
- base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
- if (base == (void *) MAP_FAILED) {
- close(fd);
- fprintf(stderr, "mmap failure for file %s\n", filename);
- progresult = XMLLINT_ERR_RDFILE;
- return;
- }
-
- reader = xmlReaderForMemory(base, info.st_size, filename,
- NULL, options);
- } else
-#endif
- reader = xmlReaderForFile(filename, NULL, options);
-#ifdef LIBXML_PATTERN_ENABLED
- if (pattern != NULL) {
- patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL);
- if (patternc == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Pattern %s failed to compile\n", pattern);
- progresult = XMLLINT_ERR_SCHEMAPAT;
- pattern = NULL;
- }
- }
- if (patternc != NULL) {
- patstream = xmlPatternGetStreamCtxt(patternc);
- if (patstream != NULL) {
- ret = xmlStreamPush(patstream, NULL, NULL);
- if (ret < 0) {
- fprintf(stderr, "xmlStreamPush() failure\n");
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- }
- }
- }
-#endif
-
-
- if (reader != NULL) {
-#ifdef LIBXML_VALID_ENABLED
- if (valid)
- xmlTextReaderSetParserProp(reader, XML_PARSER_VALIDATE, 1);
- else
-#endif /* LIBXML_VALID_ENABLED */
- if (loaddtd)
- xmlTextReaderSetParserProp(reader, XML_PARSER_LOADDTD, 1);
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (relaxng != NULL) {
- if ((timing) && (!repeat)) {
- startTimer();
- }
- ret = xmlTextReaderRelaxNGValidate(reader, relaxng);
- if (ret < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "Relax-NG schema %s failed to compile\n", relaxng);
- progresult = XMLLINT_ERR_SCHEMACOMP;
- relaxng = NULL;
- }
- if ((timing) && (!repeat)) {
- endTimer("Compiling the schemas");
- }
- }
- if (schema != NULL) {
- if ((timing) && (!repeat)) {
- startTimer();
- }
- ret = xmlTextReaderSchemaValidate(reader, schema);
- if (ret < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "XSD schema %s failed to compile\n", schema);
- progresult = XMLLINT_ERR_SCHEMACOMP;
- schema = NULL;
- }
- if ((timing) && (!repeat)) {
- endTimer("Compiling the schemas");
- }
- }
-#endif
-
- /*
- * Process all nodes in sequence
- */
- if ((timing) && (!repeat)) {
- startTimer();
- }
- ret = xmlTextReaderRead(reader);
- while (ret == 1) {
- if ((debug)
-#ifdef LIBXML_PATTERN_ENABLED
- || (patternc)
-#endif
- )
- processNode(reader);
- ret = xmlTextReaderRead(reader);
- }
- if ((timing) && (!repeat)) {
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (relaxng != NULL)
- endTimer("Parsing and validating");
- else
-#endif
-#ifdef LIBXML_VALID_ENABLED
- if (valid)
- endTimer("Parsing and validating");
- else
-#endif
- endTimer("Parsing");
- }
-
-#ifdef LIBXML_VALID_ENABLED
- if (valid) {
- if (xmlTextReaderIsValid(reader) != 1) {
- xmlGenericError(xmlGenericErrorContext,
- "Document %s does not validate\n", filename);
- progresult = XMLLINT_ERR_VALID;
- }
- }
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_SCHEMAS_ENABLED
- if ((relaxng != NULL) || (schema != NULL)) {
- if (xmlTextReaderIsValid(reader) != 1) {
- fprintf(stderr, "%s fails to validate\n", filename);
- progresult = XMLLINT_ERR_VALID;
- } else {
- fprintf(stderr, "%s validates\n", filename);
- }
- }
-#endif
- /*
- * Done, cleanup and status
- */
- xmlFreeTextReader(reader);
- if (ret != 0) {
- fprintf(stderr, "%s : failed to parse\n", filename);
- progresult = XMLLINT_ERR_UNCLASS;
- }
- } else {
- fprintf(stderr, "Unable to open %s\n", filename);
- progresult = XMLLINT_ERR_UNCLASS;
- }
-#ifdef LIBXML_PATTERN_ENABLED
- if (patstream != NULL) {
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- }
-#endif
-#ifdef HAVE_MMAP
- if (memory) {
- xmlFreeParserInputBuffer(input);
- munmap((char *) base, info.st_size);
- close(fd);
- }
-#endif
-}
-
-static void walkDoc(xmlDocPtr doc) {
- xmlTextReaderPtr reader;
- int ret;
-
-#ifdef LIBXML_PATTERN_ENABLED
- xmlNodePtr root;
- const xmlChar *namespaces[22];
- int i;
- xmlNsPtr ns;
-
- root = xmlDocGetRootElement(doc);
- if (root == NULL ) {
- xmlGenericError(xmlGenericErrorContext,
- "Document does not have a root element");
- progresult = XMLLINT_ERR_UNCLASS;
- return;
- }
- for (ns = root->nsDef, i = 0;ns != NULL && i < 20;ns=ns->next) {
- namespaces[i++] = ns->href;
- namespaces[i++] = ns->prefix;
- }
- namespaces[i++] = NULL;
- namespaces[i] = NULL;
-
- if (pattern != NULL) {
- patternc = xmlPatterncompile((const xmlChar *) pattern, doc->dict,
- 0, &namespaces[0]);
- if (patternc == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Pattern %s failed to compile\n", pattern);
- progresult = XMLLINT_ERR_SCHEMAPAT;
- pattern = NULL;
- }
- }
- if (patternc != NULL) {
- patstream = xmlPatternGetStreamCtxt(patternc);
- if (patstream != NULL) {
- ret = xmlStreamPush(patstream, NULL, NULL);
- if (ret < 0) {
- fprintf(stderr, "xmlStreamPush() failure\n");
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- }
- }
- }
-#endif /* LIBXML_PATTERN_ENABLED */
- reader = xmlReaderWalker(doc);
- if (reader != NULL) {
- if ((timing) && (!repeat)) {
- startTimer();
- }
- ret = xmlTextReaderRead(reader);
- while (ret == 1) {
- if ((debug)
-#ifdef LIBXML_PATTERN_ENABLED
- || (patternc)
-#endif
- )
- processNode(reader);
- ret = xmlTextReaderRead(reader);
- }
- if ((timing) && (!repeat)) {
- endTimer("walking through the doc");
- }
- xmlFreeTextReader(reader);
- if (ret != 0) {
- fprintf(stderr, "failed to walk through the doc\n");
- progresult = XMLLINT_ERR_UNCLASS;
- }
- } else {
- fprintf(stderr, "Failed to crate a reader from the document\n");
- progresult = XMLLINT_ERR_UNCLASS;
- }
-#ifdef LIBXML_PATTERN_ENABLED
- if (patstream != NULL) {
- xmlFreeStreamCtxt(patstream);
- patstream = NULL;
- }
-#endif
-}
-#endif /* LIBXML_READER_ENABLED */
-
-#ifdef LIBXML_XPATH_ENABLED
-/************************************************************************
- * *
- * XPath Query *
- * *
- ************************************************************************/
-
-static void doXPathDump(xmlXPathObjectPtr cur) {
- switch(cur->type) {
- case XPATH_NODESET: {
- int i;
- xmlNodePtr node;
-#ifdef LIBXML_OUTPUT_ENABLED
- xmlSaveCtxtPtr ctxt;
-
- if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr <= 0)) {
- fprintf(stderr, "XPath set is empty\n");
- progresult = XMLLINT_ERR_XPATH;
- break;
- }
- ctxt = xmlSaveToFd(1, NULL, 0);
- if (ctxt == NULL) {
- fprintf(stderr, "Out of memory for XPath\n");
- progresult = XMLLINT_ERR_MEM;
- return;
- }
- for (i = 0;i < cur->nodesetval->nodeNr;i++) {
- node = cur->nodesetval->nodeTab[i];
- xmlSaveTree(ctxt, node);
- }
- xmlSaveClose(ctxt);
-#else
- printf("xpath returned %d nodes\n", cur->nodesetval->nodeNr);
-#endif
- break;
- }
- case XPATH_BOOLEAN:
- if (cur->boolval) printf("true");
- else printf("false");
- break;
- case XPATH_NUMBER:
- switch (xmlXPathIsInf(cur->floatval)) {
- case 1:
- printf("Infinity");
- break;
- case -1:
- printf("-Infinity");
- break;
- default:
- if (xmlXPathIsNaN(cur->floatval)) {
- printf("NaN");
- } else {
- printf("%0g", cur->floatval);
- }
- }
- break;
- case XPATH_STRING:
- printf("%s", (const char *) cur->stringval);
- break;
- case XPATH_UNDEFINED:
- fprintf(stderr, "XPath Object is uninitialized\n");
- progresult = XMLLINT_ERR_XPATH;
- break;
- default:
- fprintf(stderr, "XPath object of unexpected type\n");
- progresult = XMLLINT_ERR_XPATH;
- break;
- }
-}
-
-static void doXPathQuery(xmlDocPtr doc, const char *query) {
- xmlXPathContextPtr ctxt;
- xmlXPathObjectPtr res;
-
- ctxt = xmlXPathNewContext(doc);
- if (ctxt == NULL) {
- fprintf(stderr, "Out of memory for XPath\n");
- progresult = XMLLINT_ERR_MEM;
- return;
- }
- ctxt->node = (xmlNodePtr) doc;
- res = xmlXPathEval(BAD_CAST query, ctxt);
- xmlXPathFreeContext(ctxt);
-
- if (res == NULL) {
- fprintf(stderr, "XPath evaluation failure\n");
- progresult = XMLLINT_ERR_XPATH;
- return;
- }
- doXPathDump(res);
- xmlXPathFreeObject(res);
-}
-#endif /* LIBXML_XPATH_ENABLED */
-
-/************************************************************************
- * *
- * Tree Test processing *
- * *
- ************************************************************************/
-static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) {
- xmlDocPtr doc = NULL;
-#ifdef LIBXML_TREE_ENABLED
- xmlDocPtr tmp;
-#endif /* LIBXML_TREE_ENABLED */
-
- if ((timing) && (!repeat))
- startTimer();
-
-
-#ifdef LIBXML_TREE_ENABLED
- if (filename == NULL) {
- if (generate) {
- xmlNodePtr n;
-
- doc = xmlNewDoc(BAD_CAST "1.0");
- n = xmlNewDocNode(doc, NULL, BAD_CAST "info", NULL);
- xmlNodeSetContent(n, BAD_CAST "abc");
- xmlDocSetRootElement(doc, n);
- }
- }
-#endif /* LIBXML_TREE_ENABLED */
-#ifdef LIBXML_HTML_ENABLED
-#ifdef LIBXML_PUSH_ENABLED
- else if ((html) && (push)) {
- FILE *f;
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- f = fopen(filename, "rb");
-#elif defined(__OS400__)
- f = fopen(filename, "rb");
-#else
- f = fopen(filename, "r");
-#endif
- if (f != NULL) {
- int res;
- char chars[4096];
- htmlParserCtxtPtr ctxt;
-
- res = fread(chars, 1, 4, f);
- if (res > 0) {
- ctxt = htmlCreatePushParserCtxt(NULL, NULL,
- chars, res, filename, XML_CHAR_ENCODING_NONE);
- xmlCtxtUseOptions(ctxt, options);
- while ((res = fread(chars, 1, pushsize, f)) > 0) {
- htmlParseChunk(ctxt, chars, res, 0);
- }
- htmlParseChunk(ctxt, chars, 0, 1);
- doc = ctxt->myDoc;
- htmlFreeParserCtxt(ctxt);
- }
- fclose(f);
- }
- }
-#endif /* LIBXML_PUSH_ENABLED */
-#ifdef HAVE_MMAP
- else if ((html) && (memory)) {
- int fd;
- struct stat info;
- const char *base;
- if (stat(filename, &info) < 0)
- return;
- if ((fd = open(filename, O_RDONLY)) < 0)
- return;
- base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
- if (base == (void *) MAP_FAILED) {
- close(fd);
- fprintf(stderr, "mmap failure for file %s\n", filename);
- progresult = XMLLINT_ERR_RDFILE;
- return;
- }
-
- doc = htmlReadMemory((char *) base, info.st_size, filename,
- NULL, options);
-
- munmap((char *) base, info.st_size);
- close(fd);
- }
-#endif
- else if (html) {
- doc = htmlReadFile(filename, NULL, options);
- }
-#endif /* LIBXML_HTML_ENABLED */
- else {
-#ifdef LIBXML_PUSH_ENABLED
- /*
- * build an XML tree from a string;
- */
- if (push) {
- FILE *f;
-
- /* '-' Usually means stdin -<sven@zen.org> */
- if ((filename[0] == '-') && (filename[1] == 0)) {
- f = stdin;
- } else {
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- f = fopen(filename, "rb");
-#elif defined(__OS400__)
- f = fopen(filename, "rb");
-#else
- f = fopen(filename, "r");
-#endif
- }
- if (f != NULL) {
- int ret;
- int res, size = 1024;
- char chars[1024];
- xmlParserCtxtPtr ctxt;
-
- /* if (repeat) size = 1024; */
- res = fread(chars, 1, 4, f);
- if (res > 0) {
- ctxt = xmlCreatePushParserCtxt(NULL, NULL,
- chars, res, filename);
- xmlCtxtUseOptions(ctxt, options);
- while ((res = fread(chars, 1, size, f)) > 0) {
- xmlParseChunk(ctxt, chars, res, 0);
- }
- xmlParseChunk(ctxt, chars, 0, 1);
- doc = ctxt->myDoc;
- ret = ctxt->wellFormed;
- xmlFreeParserCtxt(ctxt);
- if (!ret) {
- xmlFreeDoc(doc);
- doc = NULL;
- }
- }
- if (f != stdin)
- fclose(f);
- }
- } else
-#endif /* LIBXML_PUSH_ENABLED */
- if (testIO) {
- if ((filename[0] == '-') && (filename[1] == 0)) {
- doc = xmlReadFd(0, NULL, NULL, options);
- } else {
- FILE *f;
-
-#if defined(_WIN32) || defined (__DJGPP__) && !defined (__CYGWIN__)
- f = fopen(filename, "rb");
-#elif defined(__OS400__)
- f = fopen(filename, "rb");
-#else
- f = fopen(filename, "r");
-#endif
- if (f != NULL) {
- if (rectxt == NULL)
- doc = xmlReadIO((xmlInputReadCallback) myRead,
- (xmlInputCloseCallback) myClose, f,
- filename, NULL, options);
- else
- doc = xmlCtxtReadIO(rectxt,
- (xmlInputReadCallback) myRead,
- (xmlInputCloseCallback) myClose, f,
- filename, NULL, options);
- } else
- doc = NULL;
- }
- } else if (htmlout) {
- xmlParserCtxtPtr ctxt;
-
- if (rectxt == NULL)
- ctxt = xmlNewParserCtxt();
- else
- ctxt = rectxt;
- if (ctxt == NULL) {
- doc = NULL;
- } else {
- ctxt->sax->error = xmlHTMLError;
- ctxt->sax->warning = xmlHTMLWarning;
- ctxt->vctxt.error = xmlHTMLValidityError;
- ctxt->vctxt.warning = xmlHTMLValidityWarning;
-
- doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
-
- if (rectxt == NULL)
- xmlFreeParserCtxt(ctxt);
- }
-#ifdef HAVE_MMAP
- } else if (memory) {
- int fd;
- struct stat info;
- const char *base;
- if (stat(filename, &info) < 0)
- return;
- if ((fd = open(filename, O_RDONLY)) < 0)
- return;
- base = mmap(NULL, info.st_size, PROT_READ, MAP_SHARED, fd, 0) ;
- if (base == (void *) MAP_FAILED) {
- close(fd);
- fprintf(stderr, "mmap failure for file %s\n", filename);
- progresult = XMLLINT_ERR_RDFILE;
- return;
- }
-
- if (rectxt == NULL)
- doc = xmlReadMemory((char *) base, info.st_size,
- filename, NULL, options);
- else
- doc = xmlCtxtReadMemory(rectxt, (char *) base, info.st_size,
- filename, NULL, options);
-
- munmap((char *) base, info.st_size);
- close(fd);
-#endif
-#ifdef LIBXML_VALID_ENABLED
- } else if (valid) {
- xmlParserCtxtPtr ctxt = NULL;
-
- if (rectxt == NULL)
- ctxt = xmlNewParserCtxt();
- else
- ctxt = rectxt;
- if (ctxt == NULL) {
- doc = NULL;
- } else {
- doc = xmlCtxtReadFile(ctxt, filename, NULL, options);
-
- if (ctxt->valid == 0)
- progresult = XMLLINT_ERR_RDFILE;
- if (rectxt == NULL)
- xmlFreeParserCtxt(ctxt);
- }
-#endif /* LIBXML_VALID_ENABLED */
- } else {
- if (rectxt != NULL)
- doc = xmlCtxtReadFile(rectxt, filename, NULL, options);
- else {
-#ifdef LIBXML_SAX1_ENABLED
- if (sax1)
- doc = xmlParseFile(filename);
- else
-#endif /* LIBXML_SAX1_ENABLED */
- doc = xmlReadFile(filename, NULL, options);
- }
- }
- }
-
- /*
- * If we don't have a document we might as well give up. Do we
- * want an error message here? <sven@zen.org> */
- if (doc == NULL) {
- progresult = XMLLINT_ERR_UNCLASS;
- return;
- }
-
- if ((timing) && (!repeat)) {
- endTimer("Parsing");
- }
-
- /*
- * Remove DOCTYPE nodes
- */
- if (dropdtd) {
- xmlDtdPtr dtd;
-
- dtd = xmlGetIntSubset(doc);
- if (dtd != NULL) {
- xmlUnlinkNode((xmlNodePtr)dtd);
- xmlFreeDtd(dtd);
- }
- }
-
-#ifdef LIBXML_XINCLUDE_ENABLED
- if (xinclude) {
- if ((timing) && (!repeat)) {
- startTimer();
- }
- if (xmlXIncludeProcessFlags(doc, options) < 0)
- progresult = XMLLINT_ERR_UNCLASS;
- if ((timing) && (!repeat)) {
- endTimer("Xinclude processing");
- }
- }
-#endif
-
-#ifdef LIBXML_XPATH_ENABLED
- if (xpathquery != NULL) {
- doXPathQuery(doc, xpathquery);
- }
-#endif
-
-#ifdef LIBXML_DEBUG_ENABLED
-#ifdef LIBXML_XPATH_ENABLED
- /*
- * shell interaction
- */
- if (shell) {
- xmlXPathOrderDocElems(doc);
- xmlShell(doc, filename, xmlShellReadline, stdout);
- }
-#endif
-#endif
-
-#ifdef LIBXML_TREE_ENABLED
- /*
- * test intermediate copy if needed.
- */
- if (copy) {
- tmp = doc;
- if (timing) {
- startTimer();
- }
- doc = xmlCopyDoc(doc, 1);
- if (timing) {
- endTimer("Copying");
- }
- if (timing) {
- startTimer();
- }
- xmlFreeDoc(tmp);
- if (timing) {
- endTimer("Freeing original");
- }
- }
-#endif /* LIBXML_TREE_ENABLED */
-
-#ifdef LIBXML_VALID_ENABLED
- if ((insert) && (!html)) {
- const xmlChar* list[256];
- int nb, i;
- xmlNodePtr node;
-
- if (doc->children != NULL) {
- node = doc->children;
- while ((node != NULL) && (node->last == NULL)) node = node->next;
- if (node != NULL) {
- nb = xmlValidGetValidElements(node->last, NULL, list, 256);
- if (nb < 0) {
- fprintf(stderr, "could not get valid list of elements\n");
- } else if (nb == 0) {
- fprintf(stderr, "No element can be inserted under root\n");
- } else {
- fprintf(stderr, "%d element types can be inserted under root:\n",
- nb);
- for (i = 0;i < nb;i++) {
- fprintf(stderr, "%s\n", (char *) list[i]);
- }
- }
- }
- }
- }else
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_READER_ENABLED
- if (walker) {
- walkDoc(doc);
- }
-#endif /* LIBXML_READER_ENABLED */
-#ifdef LIBXML_OUTPUT_ENABLED
- if (noout == 0) {
- int ret;
-
- /*
- * print it.
- */
-#ifdef LIBXML_DEBUG_ENABLED
- if (!debug) {
-#endif
- if ((timing) && (!repeat)) {
- startTimer();
- }
-#ifdef LIBXML_HTML_ENABLED
- if ((html) && (!xmlout)) {
- if (compress) {
- htmlSaveFile(output ? output : "-", doc);
- }
- else if (encoding != NULL) {
- if (format == 1) {
- htmlSaveFileFormat(output ? output : "-", doc, encoding, 1);
- }
- else {
- htmlSaveFileFormat(output ? output : "-", doc, encoding, 0);
- }
- }
- else if (format == 1) {
- htmlSaveFileFormat(output ? output : "-", doc, NULL, 1);
- }
- else {
- FILE *out;
- if (output == NULL)
- out = stdout;
- else {
- out = fopen(output,"wb");
- }
- if (out != NULL) {
- if (htmlDocDump(out, doc) < 0)
- progresult = XMLLINT_ERR_OUT;
-
- if (output != NULL)
- fclose(out);
- } else {
- fprintf(stderr, "failed to open %s\n", output);
- progresult = XMLLINT_ERR_OUT;
- }
- }
- if ((timing) && (!repeat)) {
- endTimer("Saving");
- }
- } else
-#endif
-#ifdef LIBXML_C14N_ENABLED
- if (canonical) {
- xmlChar *result = NULL;
- int size;
-
- size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_0, NULL, 1, &result);
- if (size >= 0) {
- if (write(1, result, size) == -1) {
- fprintf(stderr, "Can't write data\n");
- }
- xmlFree(result);
- } else {
- fprintf(stderr, "Failed to canonicalize\n");
- progresult = XMLLINT_ERR_OUT;
- }
- } else if (canonical_11) {
- xmlChar *result = NULL;
- int size;
-
- size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_1_1, NULL, 1, &result);
- if (size >= 0) {
- if (write(1, result, size) == -1) {
- fprintf(stderr, "Can't write data\n");
- }
- xmlFree(result);
- } else {
- fprintf(stderr, "Failed to canonicalize\n");
- progresult = XMLLINT_ERR_OUT;
- }
- } else
- if (exc_canonical) {
- xmlChar *result = NULL;
- int size;
-
- size = xmlC14NDocDumpMemory(doc, NULL, XML_C14N_EXCLUSIVE_1_0, NULL, 1, &result);
- if (size >= 0) {
- if (write(1, result, size) == -1) {
- fprintf(stderr, "Can't write data\n");
- }
- xmlFree(result);
- } else {
- fprintf(stderr, "Failed to canonicalize\n");
- progresult = XMLLINT_ERR_OUT;
- }
- } else
-#endif
-#ifdef HAVE_MMAP
- if (memory) {
- xmlChar *result;
- int len;
-
- if (encoding != NULL) {
- if (format == 1) {
- xmlDocDumpFormatMemoryEnc(doc, &result, &len, encoding, 1);
- } else {
- xmlDocDumpMemoryEnc(doc, &result, &len, encoding);
- }
- } else {
- if (format == 1)
- xmlDocDumpFormatMemory(doc, &result, &len, 1);
- else
- xmlDocDumpMemory(doc, &result, &len);
- }
- if (result == NULL) {
- fprintf(stderr, "Failed to save\n");
- progresult = XMLLINT_ERR_OUT;
- } else {
- if (write(1, result, len) == -1) {
- fprintf(stderr, "Can't write data\n");
- }
- xmlFree(result);
- }
-
- } else
-#endif /* HAVE_MMAP */
- if (compress) {
- xmlSaveFile(output ? output : "-", doc);
- } else if (oldout) {
- if (encoding != NULL) {
- if (format == 1) {
- ret = xmlSaveFormatFileEnc(output ? output : "-", doc,
- encoding, 1);
- }
- else {
- ret = xmlSaveFileEnc(output ? output : "-", doc,
- encoding);
- }
- if (ret < 0) {
- fprintf(stderr, "failed save to %s\n",
- output ? output : "-");
- progresult = XMLLINT_ERR_OUT;
- }
- } else if (format == 1) {
- ret = xmlSaveFormatFile(output ? output : "-", doc, 1);
- if (ret < 0) {
- fprintf(stderr, "failed save to %s\n",
- output ? output : "-");
- progresult = XMLLINT_ERR_OUT;
- }
- } else {
- FILE *out;
- if (output == NULL)
- out = stdout;
- else {
- out = fopen(output,"wb");
- }
- if (out != NULL) {
- if (xmlDocDump(out, doc) < 0)
- progresult = XMLLINT_ERR_OUT;
-
- if (output != NULL)
- fclose(out);
- } else {
- fprintf(stderr, "failed to open %s\n", output);
- progresult = XMLLINT_ERR_OUT;
- }
- }
- } else {
- xmlSaveCtxtPtr ctxt;
- int saveOpts = 0;
-
- if (format == 1)
- saveOpts |= XML_SAVE_FORMAT;
- else if (format == 2)
- saveOpts |= XML_SAVE_WSNONSIG;
-
-#if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED)
- if (xmlout)
- saveOpts |= XML_SAVE_AS_XML;
-#endif
-
- if (output == NULL)
- ctxt = xmlSaveToFd(1, encoding, saveOpts);
- else
- ctxt = xmlSaveToFilename(output, encoding, saveOpts);
-
- if (ctxt != NULL) {
- if (xmlSaveDoc(ctxt, doc) < 0) {
- fprintf(stderr, "failed save to %s\n",
- output ? output : "-");
- progresult = XMLLINT_ERR_OUT;
- }
- xmlSaveClose(ctxt);
- } else {
- progresult = XMLLINT_ERR_OUT;
- }
- }
- if ((timing) && (!repeat)) {
- endTimer("Saving");
- }
-#ifdef LIBXML_DEBUG_ENABLED
- } else {
- FILE *out;
- if (output == NULL)
- out = stdout;
- else {
- out = fopen(output,"wb");
- }
- if (out != NULL) {
- xmlDebugDumpDocument(out, doc);
-
- if (output != NULL)
- fclose(out);
- } else {
- fprintf(stderr, "failed to open %s\n", output);
- progresult = XMLLINT_ERR_OUT;
- }
- }
-#endif
- }
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#ifdef LIBXML_VALID_ENABLED
- /*
- * A posteriori validation test
- */
- if ((dtdvalid != NULL) || (dtdvalidfpi != NULL)) {
- xmlDtdPtr dtd;
-
- if ((timing) && (!repeat)) {
- startTimer();
- }
- if (dtdvalid != NULL)
- dtd = xmlParseDTD(NULL, (const xmlChar *)dtdvalid);
- else
- dtd = xmlParseDTD((const xmlChar *)dtdvalidfpi, NULL);
- if ((timing) && (!repeat)) {
- endTimer("Parsing DTD");
- }
- if (dtd == NULL) {
- if (dtdvalid != NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Could not parse DTD %s\n", dtdvalid);
- else
- xmlGenericError(xmlGenericErrorContext,
- "Could not parse DTD %s\n", dtdvalidfpi);
- progresult = XMLLINT_ERR_DTD;
- } else {
- xmlValidCtxtPtr cvp;
-
- if ((cvp = xmlNewValidCtxt()) == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Couldn't allocate validation context\n");
- exit(-1);
- }
- cvp->userData = (void *) stderr;
- cvp->error = (xmlValidityErrorFunc) fprintf;
- cvp->warning = (xmlValidityWarningFunc) fprintf;
-
- if ((timing) && (!repeat)) {
- startTimer();
- }
- if (!xmlValidateDtd(cvp, doc, dtd)) {
- if (dtdvalid != NULL)
- xmlGenericError(xmlGenericErrorContext,
- "Document %s does not validate against %s\n",
- filename, dtdvalid);
- else
- xmlGenericError(xmlGenericErrorContext,
- "Document %s does not validate against %s\n",
- filename, dtdvalidfpi);
- progresult = XMLLINT_ERR_VALID;
- }
- if ((timing) && (!repeat)) {
- endTimer("Validating against DTD");
- }
- xmlFreeValidCtxt(cvp);
- xmlFreeDtd(dtd);
- }
- } else if (postvalid) {
- xmlValidCtxtPtr cvp;
-
- if ((cvp = xmlNewValidCtxt()) == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Couldn't allocate validation context\n");
- exit(-1);
- }
-
- if ((timing) && (!repeat)) {
- startTimer();
- }
- cvp->userData = (void *) stderr;
- cvp->error = (xmlValidityErrorFunc) fprintf;
- cvp->warning = (xmlValidityWarningFunc) fprintf;
- if (!xmlValidateDocument(cvp, doc)) {
- xmlGenericError(xmlGenericErrorContext,
- "Document %s does not validate\n", filename);
- progresult = XMLLINT_ERR_VALID;
- }
- if ((timing) && (!repeat)) {
- endTimer("Validating");
- }
- xmlFreeValidCtxt(cvp);
- }
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_SCHEMATRON_ENABLED
- if (wxschematron != NULL) {
- xmlSchematronValidCtxtPtr ctxt;
- int ret;
- int flag;
-
- if ((timing) && (!repeat)) {
- startTimer();
- }
-
- if (debug)
- flag = XML_SCHEMATRON_OUT_XML;
- else
- flag = XML_SCHEMATRON_OUT_TEXT;
- if (noout)
- flag |= XML_SCHEMATRON_OUT_QUIET;
- ctxt = xmlSchematronNewValidCtxt(wxschematron, flag);
-#if 0
- xmlSchematronSetValidErrors(ctxt,
- (xmlSchematronValidityErrorFunc) fprintf,
- (xmlSchematronValidityWarningFunc) fprintf,
- stderr);
-#endif
- ret = xmlSchematronValidateDoc(ctxt, doc);
- if (ret == 0) {
- fprintf(stderr, "%s validates\n", filename);
- } else if (ret > 0) {
- fprintf(stderr, "%s fails to validate\n", filename);
- progresult = XMLLINT_ERR_VALID;
- } else {
- fprintf(stderr, "%s validation generated an internal error\n",
- filename);
- progresult = XMLLINT_ERR_VALID;
- }
- xmlSchematronFreeValidCtxt(ctxt);
- if ((timing) && (!repeat)) {
- endTimer("Validating");
- }
- }
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (relaxngschemas != NULL) {
- xmlRelaxNGValidCtxtPtr ctxt;
- int ret;
-
- if ((timing) && (!repeat)) {
- startTimer();
- }
-
- ctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
- xmlRelaxNGSetValidErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) fprintf,
- (xmlRelaxNGValidityWarningFunc) fprintf,
- stderr);
- ret = xmlRelaxNGValidateDoc(ctxt, doc);
- if (ret == 0) {
- fprintf(stderr, "%s validates\n", filename);
- } else if (ret > 0) {
- fprintf(stderr, "%s fails to validate\n", filename);
- progresult = XMLLINT_ERR_VALID;
- } else {
- fprintf(stderr, "%s validation generated an internal error\n",
- filename);
- progresult = XMLLINT_ERR_VALID;
- }
- xmlRelaxNGFreeValidCtxt(ctxt);
- if ((timing) && (!repeat)) {
- endTimer("Validating");
- }
- } else if (wxschemas != NULL) {
- xmlSchemaValidCtxtPtr ctxt;
- int ret;
-
- if ((timing) && (!repeat)) {
- startTimer();
- }
-
- ctxt = xmlSchemaNewValidCtxt(wxschemas);
- xmlSchemaSetValidErrors(ctxt,
- (xmlSchemaValidityErrorFunc) fprintf,
- (xmlSchemaValidityWarningFunc) fprintf,
- stderr);
- ret = xmlSchemaValidateDoc(ctxt, doc);
- if (ret == 0) {
- fprintf(stderr, "%s validates\n", filename);
- } else if (ret > 0) {
- fprintf(stderr, "%s fails to validate\n", filename);
- progresult = XMLLINT_ERR_VALID;
- } else {
- fprintf(stderr, "%s validation generated an internal error\n",
- filename);
- progresult = XMLLINT_ERR_VALID;
- }
- xmlSchemaFreeValidCtxt(ctxt);
- if ((timing) && (!repeat)) {
- endTimer("Validating");
- }
- }
-#endif
-
-#ifdef LIBXML_DEBUG_ENABLED
-#if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED)
- if ((debugent) && (!html))
- xmlDebugDumpEntities(stderr, doc);
-#endif
-#endif
-
- /*
- * free it.
- */
- if ((timing) && (!repeat)) {
- startTimer();
- }
- xmlFreeDoc(doc);
- if ((timing) && (!repeat)) {
- endTimer("Freeing");
- }
-}
-
-/************************************************************************
- * *
- * Usage and Main *
- * *
- ************************************************************************/
-
-static void showVersion(const char *name) {
- fprintf(stderr, "%s: using libxml version %s\n", name, xmlParserVersion);
- fprintf(stderr, " compiled with: ");
- if (xmlHasFeature(XML_WITH_THREAD)) fprintf(stderr, "Threads ");
- if (xmlHasFeature(XML_WITH_TREE)) fprintf(stderr, "Tree ");
- if (xmlHasFeature(XML_WITH_OUTPUT)) fprintf(stderr, "Output ");
- if (xmlHasFeature(XML_WITH_PUSH)) fprintf(stderr, "Push ");
- if (xmlHasFeature(XML_WITH_READER)) fprintf(stderr, "Reader ");
- if (xmlHasFeature(XML_WITH_PATTERN)) fprintf(stderr, "Patterns ");
- if (xmlHasFeature(XML_WITH_WRITER)) fprintf(stderr, "Writer ");
- if (xmlHasFeature(XML_WITH_SAX1)) fprintf(stderr, "SAXv1 ");
- if (xmlHasFeature(XML_WITH_FTP)) fprintf(stderr, "FTP ");
- if (xmlHasFeature(XML_WITH_HTTP)) fprintf(stderr, "HTTP ");
- if (xmlHasFeature(XML_WITH_VALID)) fprintf(stderr, "DTDValid ");
- if (xmlHasFeature(XML_WITH_HTML)) fprintf(stderr, "HTML ");
- if (xmlHasFeature(XML_WITH_LEGACY)) fprintf(stderr, "Legacy ");
- if (xmlHasFeature(XML_WITH_C14N)) fprintf(stderr, "C14N ");
- if (xmlHasFeature(XML_WITH_CATALOG)) fprintf(stderr, "Catalog ");
- if (xmlHasFeature(XML_WITH_XPATH)) fprintf(stderr, "XPath ");
- if (xmlHasFeature(XML_WITH_XPTR)) fprintf(stderr, "XPointer ");
- if (xmlHasFeature(XML_WITH_XINCLUDE)) fprintf(stderr, "XInclude ");
- if (xmlHasFeature(XML_WITH_ICONV)) fprintf(stderr, "Iconv ");
- if (xmlHasFeature(XML_WITH_ICU)) fprintf(stderr, "ICU ");
- if (xmlHasFeature(XML_WITH_ISO8859X)) fprintf(stderr, "ISO8859X ");
- if (xmlHasFeature(XML_WITH_UNICODE)) fprintf(stderr, "Unicode ");
- if (xmlHasFeature(XML_WITH_REGEXP)) fprintf(stderr, "Regexps ");
- if (xmlHasFeature(XML_WITH_AUTOMATA)) fprintf(stderr, "Automata ");
- if (xmlHasFeature(XML_WITH_EXPR)) fprintf(stderr, "Expr ");
- if (xmlHasFeature(XML_WITH_SCHEMAS)) fprintf(stderr, "Schemas ");
- if (xmlHasFeature(XML_WITH_SCHEMATRON)) fprintf(stderr, "Schematron ");
- if (xmlHasFeature(XML_WITH_MODULES)) fprintf(stderr, "Modules ");
- if (xmlHasFeature(XML_WITH_DEBUG)) fprintf(stderr, "Debug ");
- if (xmlHasFeature(XML_WITH_DEBUG_MEM)) fprintf(stderr, "MemDebug ");
- if (xmlHasFeature(XML_WITH_DEBUG_RUN)) fprintf(stderr, "RunDebug ");
- if (xmlHasFeature(XML_WITH_ZLIB)) fprintf(stderr, "Zlib ");
- if (xmlHasFeature(XML_WITH_LZMA)) fprintf(stderr, "Lzma ");
- fprintf(stderr, "\n");
-}
-
-static void usage(const char *name) {
- printf("Usage : %s [options] XMLfiles ...\n", name);
-#ifdef LIBXML_OUTPUT_ENABLED
- printf("\tParse the XML files and output the result of the parsing\n");
-#else
- printf("\tParse the XML files\n");
-#endif /* LIBXML_OUTPUT_ENABLED */
- printf("\t--version : display the version of the XML library used\n");
-#ifdef LIBXML_DEBUG_ENABLED
- printf("\t--debug : dump a debug tree of the in-memory document\n");
- printf("\t--shell : run a navigating shell\n");
- printf("\t--debugent : debug the entities defined in the document\n");
-#else
-#ifdef LIBXML_READER_ENABLED
- printf("\t--debug : dump the nodes content when using --stream\n");
-#endif /* LIBXML_READER_ENABLED */
-#endif
-#ifdef LIBXML_TREE_ENABLED
- printf("\t--copy : used to test the internal copy implementation\n");
-#endif /* LIBXML_TREE_ENABLED */
- printf("\t--recover : output what was parsable on broken XML documents\n");
- printf("\t--huge : remove any internal arbitrary parser limits\n");
- printf("\t--noent : substitute entity references by their value\n");
- printf("\t--noenc : ignore any encoding specified inside the document\n");
- printf("\t--noout : don't output the result tree\n");
- printf("\t--path 'paths': provide a set of paths for resources\n");
- printf("\t--load-trace : print trace of all external entities loaded\n");
- printf("\t--nonet : refuse to fetch DTDs or entities over network\n");
- printf("\t--noxxe : forbid any external entity loading\n");
- printf("\t--nocompact : do not generate compact text nodes\n");
- printf("\t--htmlout : output results as HTML\n");
- printf("\t--nowrap : do not put HTML doc wrapper\n");
-#ifdef LIBXML_VALID_ENABLED
- printf("\t--valid : validate the document in addition to std well-formed check\n");
- printf("\t--postvalid : do a posteriori validation, i.e after parsing\n");
- printf("\t--dtdvalid URL : do a posteriori validation against a given DTD\n");
- printf("\t--dtdvalidfpi FPI : same but name the DTD with a Public Identifier\n");
-#endif /* LIBXML_VALID_ENABLED */
- printf("\t--timing : print some timings\n");
- printf("\t--output file or -o file: save to a given file\n");
- printf("\t--repeat : repeat 100 times, for timing or profiling\n");
- printf("\t--insert : ad-hoc test for valid insertions\n");
-#ifdef LIBXML_OUTPUT_ENABLED
-#ifdef HAVE_ZLIB_H
- printf("\t--compress : turn on gzip compression of output\n");
-#endif
-#endif /* LIBXML_OUTPUT_ENABLED */
-#ifdef LIBXML_HTML_ENABLED
- printf("\t--html : use the HTML parser\n");
- printf("\t--xmlout : force to use the XML serializer when using --html\n");
- printf("\t--nodefdtd : do not default HTML doctype\n");
-#endif
-#ifdef LIBXML_PUSH_ENABLED
- printf("\t--push : use the push mode of the parser\n");
- printf("\t--pushsmall : use the push mode of the parser using tiny increments\n");
-#endif /* LIBXML_PUSH_ENABLED */
-#ifdef HAVE_MMAP
- printf("\t--memory : parse from memory\n");
-#endif
- printf("\t--maxmem nbbytes : limits memory allocation to nbbytes bytes\n");
- printf("\t--nowarning : do not emit warnings from parser/validator\n");
- printf("\t--noblanks : drop (ignorable?) blanks spaces\n");
- printf("\t--nocdata : replace cdata section with text nodes\n");
-#ifdef LIBXML_OUTPUT_ENABLED
- printf("\t--format : reformat/reindent the output\n");
- printf("\t--encode encoding : output in the given encoding\n");
- printf("\t--dropdtd : remove the DOCTYPE of the input docs\n");
- printf("\t--pretty STYLE : pretty-print in a particular style\n");
- printf("\t 0 Do not pretty print\n");
- printf("\t 1 Format the XML content, as --format\n");
- printf("\t 2 Add whitespace inside tags, preserving content\n");
-#endif /* LIBXML_OUTPUT_ENABLED */
- printf("\t--c14n : save in W3C canonical format v1.0 (with comments)\n");
- printf("\t--c14n11 : save in W3C canonical format v1.1 (with comments)\n");
- printf("\t--exc-c14n : save in W3C exclusive canonical format (with comments)\n");
-#ifdef LIBXML_C14N_ENABLED
-#endif /* LIBXML_C14N_ENABLED */
- printf("\t--nsclean : remove redundant namespace declarations\n");
- printf("\t--testIO : test user I/O support\n");
-#ifdef LIBXML_CATALOG_ENABLED
- printf("\t--catalogs : use SGML catalogs from $SGML_CATALOG_FILES\n");
- printf("\t otherwise XML Catalogs starting from \n");
- printf("\t %s are activated by default\n", XML_XML_DEFAULT_CATALOG);
- printf("\t--nocatalogs: deactivate all catalogs\n");
-#endif
- printf("\t--auto : generate a small doc on the fly\n");
-#ifdef LIBXML_XINCLUDE_ENABLED
- printf("\t--xinclude : do XInclude processing\n");
- printf("\t--noxincludenode : same but do not generate XInclude nodes\n");
- printf("\t--nofixup-base-uris : do not fixup xml:base uris\n");
-#endif
- printf("\t--loaddtd : fetch external DTD\n");
- printf("\t--dtdattr : loaddtd + populate the tree with inherited attributes \n");
-#ifdef LIBXML_READER_ENABLED
- printf("\t--stream : use the streaming interface to process very large files\n");
- printf("\t--walker : create a reader and walk though the resulting doc\n");
-#endif /* LIBXML_READER_ENABLED */
-#ifdef LIBXML_PATTERN_ENABLED
- printf("\t--pattern pattern_value : test the pattern support\n");
-#endif
- printf("\t--chkregister : verify the node registration code\n");
-#ifdef LIBXML_SCHEMAS_ENABLED
- printf("\t--relaxng schema : do RelaxNG validation against the schema\n");
- printf("\t--schema schema : do validation against the WXS schema\n");
-#endif
-#ifdef LIBXML_SCHEMATRON_ENABLED
- printf("\t--schematron schema : do validation against a schematron\n");
-#endif
-#ifdef LIBXML_SAX1_ENABLED
- printf("\t--sax1: use the old SAX1 interfaces for processing\n");
-#endif
- printf("\t--sax: do not build a tree but work just at the SAX level\n");
- printf("\t--oldxml10: use XML-1.0 parsing rules before the 5th edition\n");
-#ifdef LIBXML_XPATH_ENABLED
- printf("\t--xpath expr: evaluate the XPath expression, imply --noout\n");
-#endif
-
- printf("\nLibxml project home page: http://xmlsoft.org/\n");
- printf("To report bugs or get some help check: http://xmlsoft.org/bugs.html\n");
-}
-
-static void registerNode(xmlNodePtr node)
-{
- node->_private = malloc(sizeof(long));
- if (node->_private == NULL) {
- fprintf(stderr, "Out of memory in xmllint:registerNode()\n");
- exit(XMLLINT_ERR_MEM);
- }
- *(long*)node->_private = (long) 0x81726354;
- nbregister++;
-}
-
-static void deregisterNode(xmlNodePtr node)
-{
- assert(node->_private != NULL);
- assert(*(long*)node->_private == (long) 0x81726354);
- free(node->_private);
- nbregister--;
-}
-
-int
-main(int argc, char **argv) {
- int i, acount;
- int files = 0;
- int version = 0;
- const char* indent;
-
- if (argc <= 1) {
- usage(argv[0]);
- return(1);
- }
- LIBXML_TEST_VERSION
- for (i = 1; i < argc ; i++) {
- if (!strcmp(argv[i], "-"))
- break;
-
- if (argv[i][0] != '-')
- continue;
- if ((!strcmp(argv[i], "-debug")) || (!strcmp(argv[i], "--debug")))
- debug++;
- else
-#ifdef LIBXML_DEBUG_ENABLED
- if ((!strcmp(argv[i], "-shell")) ||
- (!strcmp(argv[i], "--shell"))) {
- shell++;
- noout = 1;
- } else
-#endif
-#ifdef LIBXML_TREE_ENABLED
- if ((!strcmp(argv[i], "-copy")) || (!strcmp(argv[i], "--copy")))
- copy++;
- else
-#endif /* LIBXML_TREE_ENABLED */
- if ((!strcmp(argv[i], "-recover")) ||
- (!strcmp(argv[i], "--recover"))) {
- recovery++;
- options |= XML_PARSE_RECOVER;
- } else if ((!strcmp(argv[i], "-huge")) ||
- (!strcmp(argv[i], "--huge"))) {
- options |= XML_PARSE_HUGE;
- } else if ((!strcmp(argv[i], "-noent")) ||
- (!strcmp(argv[i], "--noent"))) {
- noent++;
- options |= XML_PARSE_NOENT;
- } else if ((!strcmp(argv[i], "-noenc")) ||
- (!strcmp(argv[i], "--noenc"))) {
- noenc++;
- options |= XML_PARSE_IGNORE_ENC;
- } else if ((!strcmp(argv[i], "-nsclean")) ||
- (!strcmp(argv[i], "--nsclean"))) {
- options |= XML_PARSE_NSCLEAN;
- } else if ((!strcmp(argv[i], "-nocdata")) ||
- (!strcmp(argv[i], "--nocdata"))) {
- options |= XML_PARSE_NOCDATA;
- } else if ((!strcmp(argv[i], "-nodict")) ||
- (!strcmp(argv[i], "--nodict"))) {
- options |= XML_PARSE_NODICT;
- } else if ((!strcmp(argv[i], "-version")) ||
- (!strcmp(argv[i], "--version"))) {
- showVersion(argv[0]);
- version = 1;
- } else if ((!strcmp(argv[i], "-noout")) ||
- (!strcmp(argv[i], "--noout")))
- noout++;
-#ifdef LIBXML_OUTPUT_ENABLED
- else if ((!strcmp(argv[i], "-o")) ||
- (!strcmp(argv[i], "-output")) ||
- (!strcmp(argv[i], "--output"))) {
- i++;
- output = argv[i];
- }
-#endif /* LIBXML_OUTPUT_ENABLED */
- else if ((!strcmp(argv[i], "-htmlout")) ||
- (!strcmp(argv[i], "--htmlout")))
- htmlout++;
- else if ((!strcmp(argv[i], "-nowrap")) ||
- (!strcmp(argv[i], "--nowrap")))
- nowrap++;
-#ifdef LIBXML_HTML_ENABLED
- else if ((!strcmp(argv[i], "-html")) ||
- (!strcmp(argv[i], "--html"))) {
- html++;
- }
- else if ((!strcmp(argv[i], "-xmlout")) ||
- (!strcmp(argv[i], "--xmlout"))) {
- xmlout++;
- } else if ((!strcmp(argv[i], "-nodefdtd")) ||
- (!strcmp(argv[i], "--nodefdtd"))) {
- nodefdtd++;
- options |= HTML_PARSE_NODEFDTD;
- }
-#endif /* LIBXML_HTML_ENABLED */
- else if ((!strcmp(argv[i], "-loaddtd")) ||
- (!strcmp(argv[i], "--loaddtd"))) {
- loaddtd++;
- options |= XML_PARSE_DTDLOAD;
- } else if ((!strcmp(argv[i], "-dtdattr")) ||
- (!strcmp(argv[i], "--dtdattr"))) {
- loaddtd++;
- dtdattrs++;
- options |= XML_PARSE_DTDATTR;
- }
-#ifdef LIBXML_VALID_ENABLED
- else if ((!strcmp(argv[i], "-valid")) ||
- (!strcmp(argv[i], "--valid"))) {
- valid++;
- options |= XML_PARSE_DTDVALID;
- } else if ((!strcmp(argv[i], "-postvalid")) ||
- (!strcmp(argv[i], "--postvalid"))) {
- postvalid++;
- loaddtd++;
- options |= XML_PARSE_DTDLOAD;
- } else if ((!strcmp(argv[i], "-dtdvalid")) ||
- (!strcmp(argv[i], "--dtdvalid"))) {
- i++;
- dtdvalid = argv[i];
- loaddtd++;
- options |= XML_PARSE_DTDLOAD;
- } else if ((!strcmp(argv[i], "-dtdvalidfpi")) ||
- (!strcmp(argv[i], "--dtdvalidfpi"))) {
- i++;
- dtdvalidfpi = argv[i];
- loaddtd++;
- options |= XML_PARSE_DTDLOAD;
- }
-#endif /* LIBXML_VALID_ENABLED */
- else if ((!strcmp(argv[i], "-dropdtd")) ||
- (!strcmp(argv[i], "--dropdtd")))
- dropdtd++;
- else if ((!strcmp(argv[i], "-insert")) ||
- (!strcmp(argv[i], "--insert")))
- insert++;
- else if ((!strcmp(argv[i], "-timing")) ||
- (!strcmp(argv[i], "--timing")))
- timing++;
- else if ((!strcmp(argv[i], "-auto")) ||
- (!strcmp(argv[i], "--auto")))
- generate++;
- else if ((!strcmp(argv[i], "-repeat")) ||
- (!strcmp(argv[i], "--repeat"))) {
- if (repeat)
- repeat *= 10;
- else
- repeat = 100;
- }
-#ifdef LIBXML_PUSH_ENABLED
- else if ((!strcmp(argv[i], "-push")) ||
- (!strcmp(argv[i], "--push")))
- push++;
- else if ((!strcmp(argv[i], "-pushsmall")) ||
- (!strcmp(argv[i], "--pushsmall"))) {
- push++;
- pushsize = 10;
- }
-#endif /* LIBXML_PUSH_ENABLED */
-#ifdef HAVE_MMAP
- else if ((!strcmp(argv[i], "-memory")) ||
- (!strcmp(argv[i], "--memory")))
- memory++;
-#endif
- else if ((!strcmp(argv[i], "-testIO")) ||
- (!strcmp(argv[i], "--testIO")))
- testIO++;
-#ifdef LIBXML_XINCLUDE_ENABLED
- else if ((!strcmp(argv[i], "-xinclude")) ||
- (!strcmp(argv[i], "--xinclude"))) {
- xinclude++;
- options |= XML_PARSE_XINCLUDE;
- }
- else if ((!strcmp(argv[i], "-noxincludenode")) ||
- (!strcmp(argv[i], "--noxincludenode"))) {
- xinclude++;
- options |= XML_PARSE_XINCLUDE;
- options |= XML_PARSE_NOXINCNODE;
- }
- else if ((!strcmp(argv[i], "-nofixup-base-uris")) ||
- (!strcmp(argv[i], "--nofixup-base-uris"))) {
- xinclude++;
- options |= XML_PARSE_XINCLUDE;
- options |= XML_PARSE_NOBASEFIX;
- }
-#endif
-#ifdef LIBXML_OUTPUT_ENABLED
-#ifdef HAVE_ZLIB_H
- else if ((!strcmp(argv[i], "-compress")) ||
- (!strcmp(argv[i], "--compress"))) {
- compress++;
- xmlSetCompressMode(9);
- }
-#endif
-#endif /* LIBXML_OUTPUT_ENABLED */
- else if ((!strcmp(argv[i], "-nowarning")) ||
- (!strcmp(argv[i], "--nowarning"))) {
- xmlGetWarningsDefaultValue = 0;
- xmlPedanticParserDefault(0);
- options |= XML_PARSE_NOWARNING;
- }
- else if ((!strcmp(argv[i], "-pedantic")) ||
- (!strcmp(argv[i], "--pedantic"))) {
- xmlGetWarningsDefaultValue = 1;
- xmlPedanticParserDefault(1);
- options |= XML_PARSE_PEDANTIC;
- }
-#ifdef LIBXML_DEBUG_ENABLED
- else if ((!strcmp(argv[i], "-debugent")) ||
- (!strcmp(argv[i], "--debugent"))) {
- debugent++;
- xmlParserDebugEntities = 1;
- }
-#endif
-#ifdef LIBXML_C14N_ENABLED
- else if ((!strcmp(argv[i], "-c14n")) ||
- (!strcmp(argv[i], "--c14n"))) {
- canonical++;
- options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD;
- }
- else if ((!strcmp(argv[i], "-c14n11")) ||
- (!strcmp(argv[i], "--c14n11"))) {
- canonical_11++;
- options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD;
- }
- else if ((!strcmp(argv[i], "-exc-c14n")) ||
- (!strcmp(argv[i], "--exc-c14n"))) {
- exc_canonical++;
- options |= XML_PARSE_NOENT | XML_PARSE_DTDATTR | XML_PARSE_DTDLOAD;
- }
-#endif
-#ifdef LIBXML_CATALOG_ENABLED
- else if ((!strcmp(argv[i], "-catalogs")) ||
- (!strcmp(argv[i], "--catalogs"))) {
- catalogs++;
- } else if ((!strcmp(argv[i], "-nocatalogs")) ||
- (!strcmp(argv[i], "--nocatalogs"))) {
- nocatalogs++;
- }
-#endif
- else if ((!strcmp(argv[i], "-encode")) ||
- (!strcmp(argv[i], "--encode"))) {
- i++;
- encoding = argv[i];
- /*
- * OK it's for testing purposes
- */
- xmlAddEncodingAlias("UTF-8", "DVEnc");
- }
- else if ((!strcmp(argv[i], "-noblanks")) ||
- (!strcmp(argv[i], "--noblanks"))) {
- noblanks++;
- xmlKeepBlanksDefault(0);
- options |= XML_PARSE_NOBLANKS;
- }
- else if ((!strcmp(argv[i], "-maxmem")) ||
- (!strcmp(argv[i], "--maxmem"))) {
- i++;
- if (sscanf(argv[i], "%d", &maxmem) == 1) {
- xmlMemSetup(myFreeFunc, myMallocFunc, myReallocFunc,
- myStrdupFunc);
- } else {
- maxmem = 0;
- }
- }
- else if ((!strcmp(argv[i], "-format")) ||
- (!strcmp(argv[i], "--format"))) {
- noblanks++;
-#ifdef LIBXML_OUTPUT_ENABLED
- format = 1;
-#endif /* LIBXML_OUTPUT_ENABLED */
- xmlKeepBlanksDefault(0);
- }
- else if ((!strcmp(argv[i], "-pretty")) ||
- (!strcmp(argv[i], "--pretty"))) {
- i++;
-#ifdef LIBXML_OUTPUT_ENABLED
- if (argv[i] != NULL) {
- format = atoi(argv[i]);
- if (format == 1) {
- noblanks++;
- xmlKeepBlanksDefault(0);
- }
- }
-#endif /* LIBXML_OUTPUT_ENABLED */
- }
-#ifdef LIBXML_READER_ENABLED
- else if ((!strcmp(argv[i], "-stream")) ||
- (!strcmp(argv[i], "--stream"))) {
- stream++;
- }
- else if ((!strcmp(argv[i], "-walker")) ||
- (!strcmp(argv[i], "--walker"))) {
- walker++;
- noout++;
- }
-#endif /* LIBXML_READER_ENABLED */
-#ifdef LIBXML_SAX1_ENABLED
- else if ((!strcmp(argv[i], "-sax1")) ||
- (!strcmp(argv[i], "--sax1"))) {
- sax1++;
- options |= XML_PARSE_SAX1;
- }
-#endif /* LIBXML_SAX1_ENABLED */
- else if ((!strcmp(argv[i], "-sax")) ||
- (!strcmp(argv[i], "--sax"))) {
- sax++;
- }
- else if ((!strcmp(argv[i], "-chkregister")) ||
- (!strcmp(argv[i], "--chkregister"))) {
- chkregister++;
-#ifdef LIBXML_SCHEMAS_ENABLED
- } else if ((!strcmp(argv[i], "-relaxng")) ||
- (!strcmp(argv[i], "--relaxng"))) {
- i++;
- relaxng = argv[i];
- noent++;
- options |= XML_PARSE_NOENT;
- } else if ((!strcmp(argv[i], "-schema")) ||
- (!strcmp(argv[i], "--schema"))) {
- i++;
- schema = argv[i];
- noent++;
-#endif
-#ifdef LIBXML_SCHEMATRON_ENABLED
- } else if ((!strcmp(argv[i], "-schematron")) ||
- (!strcmp(argv[i], "--schematron"))) {
- i++;
- schematron = argv[i];
- noent++;
-#endif
- } else if ((!strcmp(argv[i], "-nonet")) ||
- (!strcmp(argv[i], "--nonet"))) {
- options |= XML_PARSE_NONET;
- xmlSetExternalEntityLoader(xmlNoNetExternalEntityLoader);
- } else if ((!strcmp(argv[i], "-noxxe")) ||
- (!strcmp(argv[i], "--noxxe"))) {
- options |= XML_PARSE_NOXXE;
- xmlSetExternalEntityLoader(xmlNoXxeExternalEntityLoader);
- } else if ((!strcmp(argv[i], "-nocompact")) ||
- (!strcmp(argv[i], "--nocompact"))) {
- options &= ~XML_PARSE_COMPACT;
- } else if ((!strcmp(argv[i], "-load-trace")) ||
- (!strcmp(argv[i], "--load-trace"))) {
- load_trace++;
- } else if ((!strcmp(argv[i], "-path")) ||
- (!strcmp(argv[i], "--path"))) {
- i++;
- parsePath(BAD_CAST argv[i]);
-#ifdef LIBXML_PATTERN_ENABLED
- } else if ((!strcmp(argv[i], "-pattern")) ||
- (!strcmp(argv[i], "--pattern"))) {
- i++;
- pattern = argv[i];
-#endif
-#ifdef LIBXML_XPATH_ENABLED
- } else if ((!strcmp(argv[i], "-xpath")) ||
- (!strcmp(argv[i], "--xpath"))) {
- i++;
- noout++;
- xpathquery = argv[i];
-#endif
- } else if ((!strcmp(argv[i], "-oldxml10")) ||
- (!strcmp(argv[i], "--oldxml10"))) {
- oldxml10++;
- options |= XML_PARSE_OLD10;
- } else {
- fprintf(stderr, "Unknown option %s\n", argv[i]);
- usage(argv[0]);
- return(1);
- }
- }
-
-#ifdef LIBXML_CATALOG_ENABLED
- if (nocatalogs == 0) {
- if (catalogs) {
- const char *catal;
-
- catal = getenv("SGML_CATALOG_FILES");
- if (catal != NULL) {
- xmlLoadCatalogs(catal);
- } else {
- fprintf(stderr, "Variable $SGML_CATALOG_FILES not set\n");
- }
- }
- }
-#endif
-
-#ifdef LIBXML_SAX1_ENABLED
- if (sax1)
- xmlSAXDefaultVersion(1);
- else
- xmlSAXDefaultVersion(2);
-#endif /* LIBXML_SAX1_ENABLED */
-
- if (chkregister) {
- xmlRegisterNodeDefault(registerNode);
- xmlDeregisterNodeDefault(deregisterNode);
- }
-
- indent = getenv("XMLLINT_INDENT");
- if(indent != NULL) {
- xmlTreeIndentString = indent;
- }
-
-
- defaultEntityLoader = xmlGetExternalEntityLoader();
- xmlSetExternalEntityLoader(xmllintExternalEntityLoader);
-
- xmlLineNumbersDefault(1);
- if (loaddtd != 0)
- xmlLoadExtDtdDefaultValue |= XML_DETECT_IDS;
- if (dtdattrs)
- xmlLoadExtDtdDefaultValue |= XML_COMPLETE_ATTRS;
- if (noent != 0) xmlSubstituteEntitiesDefault(1);
-#ifdef LIBXML_VALID_ENABLED
- if (valid != 0) xmlDoValidityCheckingDefaultValue = 1;
-#endif /* LIBXML_VALID_ENABLED */
- if ((htmlout) && (!nowrap)) {
- xmlGenericError(xmlGenericErrorContext,
- "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"\n");
- xmlGenericError(xmlGenericErrorContext,
- "\t\"http://www.w3.org/TR/REC-html40/loose.dtd\">\n");
- xmlGenericError(xmlGenericErrorContext,
- "<html><head><title>%s output</title></head>\n",
- argv[0]);
- xmlGenericError(xmlGenericErrorContext,
- "<body bgcolor=\"#ffffff\"><h1 align=\"center\">%s output</h1>\n",
- argv[0]);
- }
-
-#ifdef LIBXML_SCHEMATRON_ENABLED
- if ((schematron != NULL) && (sax == 0)
-#ifdef LIBXML_READER_ENABLED
- && (stream == 0)
-#endif /* LIBXML_READER_ENABLED */
- ) {
- xmlSchematronParserCtxtPtr ctxt;
-
- /* forces loading the DTDs */
- xmlLoadExtDtdDefaultValue |= 1;
- options |= XML_PARSE_DTDLOAD;
- if (timing) {
- startTimer();
- }
- ctxt = xmlSchematronNewParserCtxt(schematron);
-#if 0
- xmlSchematronSetParserErrors(ctxt,
- (xmlSchematronValidityErrorFunc) fprintf,
- (xmlSchematronValidityWarningFunc) fprintf,
- stderr);
-#endif
- wxschematron = xmlSchematronParse(ctxt);
- if (wxschematron == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Schematron schema %s failed to compile\n", schematron);
- progresult = XMLLINT_ERR_SCHEMACOMP;
- schematron = NULL;
- }
- xmlSchematronFreeParserCtxt(ctxt);
- if (timing) {
- endTimer("Compiling the schemas");
- }
- }
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
- if ((relaxng != NULL) && (sax == 0)
-#ifdef LIBXML_READER_ENABLED
- && (stream == 0)
-#endif /* LIBXML_READER_ENABLED */
- ) {
- xmlRelaxNGParserCtxtPtr ctxt;
-
- /* forces loading the DTDs */
- xmlLoadExtDtdDefaultValue |= 1;
- options |= XML_PARSE_DTDLOAD;
- if (timing) {
- startTimer();
- }
- ctxt = xmlRelaxNGNewParserCtxt(relaxng);
- xmlRelaxNGSetParserErrors(ctxt,
- (xmlRelaxNGValidityErrorFunc) fprintf,
- (xmlRelaxNGValidityWarningFunc) fprintf,
- stderr);
- relaxngschemas = xmlRelaxNGParse(ctxt);
- if (relaxngschemas == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Relax-NG schema %s failed to compile\n", relaxng);
- progresult = XMLLINT_ERR_SCHEMACOMP;
- relaxng = NULL;
- }
- xmlRelaxNGFreeParserCtxt(ctxt);
- if (timing) {
- endTimer("Compiling the schemas");
- }
- } else if ((schema != NULL)
-#ifdef LIBXML_READER_ENABLED
- && (stream == 0)
-#endif
- ) {
- xmlSchemaParserCtxtPtr ctxt;
-
- if (timing) {
- startTimer();
- }
- ctxt = xmlSchemaNewParserCtxt(schema);
- xmlSchemaSetParserErrors(ctxt,
- (xmlSchemaValidityErrorFunc) fprintf,
- (xmlSchemaValidityWarningFunc) fprintf,
- stderr);
- wxschemas = xmlSchemaParse(ctxt);
- if (wxschemas == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "WXS schema %s failed to compile\n", schema);
- progresult = XMLLINT_ERR_SCHEMACOMP;
- schema = NULL;
- }
- xmlSchemaFreeParserCtxt(ctxt);
- if (timing) {
- endTimer("Compiling the schemas");
- }
- }
-#endif /* LIBXML_SCHEMAS_ENABLED */
-#ifdef LIBXML_PATTERN_ENABLED
- if ((pattern != NULL)
-#ifdef LIBXML_READER_ENABLED
- && (walker == 0)
-#endif
- ) {
- patternc = xmlPatterncompile((const xmlChar *) pattern, NULL, 0, NULL);
- if (patternc == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Pattern %s failed to compile\n", pattern);
- progresult = XMLLINT_ERR_SCHEMAPAT;
- pattern = NULL;
- }
- }
-#endif /* LIBXML_PATTERN_ENABLED */
- for (i = 1; i < argc ; i++) {
- if ((!strcmp(argv[i], "-encode")) ||
- (!strcmp(argv[i], "--encode"))) {
- i++;
- continue;
- } else if ((!strcmp(argv[i], "-o")) ||
- (!strcmp(argv[i], "-output")) ||
- (!strcmp(argv[i], "--output"))) {
- i++;
- continue;
- }
-#ifdef LIBXML_VALID_ENABLED
- if ((!strcmp(argv[i], "-dtdvalid")) ||
- (!strcmp(argv[i], "--dtdvalid"))) {
- i++;
- continue;
- }
- if ((!strcmp(argv[i], "-path")) ||
- (!strcmp(argv[i], "--path"))) {
- i++;
- continue;
- }
- if ((!strcmp(argv[i], "-dtdvalidfpi")) ||
- (!strcmp(argv[i], "--dtdvalidfpi"))) {
- i++;
- continue;
- }
-#endif /* LIBXML_VALID_ENABLED */
- if ((!strcmp(argv[i], "-relaxng")) ||
- (!strcmp(argv[i], "--relaxng"))) {
- i++;
- continue;
- }
- if ((!strcmp(argv[i], "-maxmem")) ||
- (!strcmp(argv[i], "--maxmem"))) {
- i++;
- continue;
- }
- if ((!strcmp(argv[i], "-pretty")) ||
- (!strcmp(argv[i], "--pretty"))) {
- i++;
- continue;
- }
- if ((!strcmp(argv[i], "-schema")) ||
- (!strcmp(argv[i], "--schema"))) {
- i++;
- continue;
- }
- if ((!strcmp(argv[i], "-schematron")) ||
- (!strcmp(argv[i], "--schematron"))) {
- i++;
- continue;
- }
-#ifdef LIBXML_PATTERN_ENABLED
- if ((!strcmp(argv[i], "-pattern")) ||
- (!strcmp(argv[i], "--pattern"))) {
- i++;
- continue;
- }
-#endif
-#ifdef LIBXML_XPATH_ENABLED
- if ((!strcmp(argv[i], "-xpath")) ||
- (!strcmp(argv[i], "--xpath"))) {
- i++;
- continue;
- }
-#endif
- if ((timing) && (repeat))
- startTimer();
- /* Remember file names. "-" means stdin. <sven@zen.org> */
- if ((argv[i][0] != '-') || (strcmp(argv[i], "-") == 0)) {
- if (repeat) {
- xmlParserCtxtPtr ctxt = NULL;
-
- for (acount = 0;acount < repeat;acount++) {
-#ifdef LIBXML_READER_ENABLED
- if (stream != 0) {
- streamFile(argv[i]);
- } else {
-#endif /* LIBXML_READER_ENABLED */
- if (sax) {
- testSAX(argv[i]);
- } else {
- if (ctxt == NULL)
- ctxt = xmlNewParserCtxt();
- parseAndPrintFile(argv[i], ctxt);
- }
-#ifdef LIBXML_READER_ENABLED
- }
-#endif /* LIBXML_READER_ENABLED */
- }
- if (ctxt != NULL)
- xmlFreeParserCtxt(ctxt);
- } else {
- nbregister = 0;
-
-#ifdef LIBXML_READER_ENABLED
- if (stream != 0)
- streamFile(argv[i]);
- else
-#endif /* LIBXML_READER_ENABLED */
- if (sax) {
- testSAX(argv[i]);
- } else {
- parseAndPrintFile(argv[i], NULL);
- }
-
- if ((chkregister) && (nbregister != 0)) {
- fprintf(stderr, "Registration count off: %d\n", nbregister);
- progresult = XMLLINT_ERR_RDREGIS;
- }
- }
- files ++;
- if ((timing) && (repeat)) {
- endTimer("%d iterations", repeat);
- }
- }
- }
- if (generate)
- parseAndPrintFile(NULL, NULL);
- if ((htmlout) && (!nowrap)) {
- xmlGenericError(xmlGenericErrorContext, "</body></html>\n");
- }
- if ((files == 0) && (!generate) && (version == 0)) {
- usage(argv[0]);
- }
-#ifdef LIBXML_SCHEMATRON_ENABLED
- if (wxschematron != NULL)
- xmlSchematronFree(wxschematron);
-#endif
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (relaxngschemas != NULL)
- xmlRelaxNGFree(relaxngschemas);
- if (wxschemas != NULL)
- xmlSchemaFree(wxschemas);
- xmlRelaxNGCleanupTypes();
-#endif
-#ifdef LIBXML_PATTERN_ENABLED
- if (patternc != NULL)
- xmlFreePattern(patternc);
-#endif
- xmlCleanupParser();
- xmlMemoryDump();
-
- return(progresult);
-}
-
diff --git a/external/libxml2_android/jni/libxml2/xmlmemory.c b/external/libxml2_android/jni/libxml2/xmlmemory.c
deleted file mode 100644
index f08c8c3d..00000000
--- a/external/libxml2_android/jni/libxml2/xmlmemory.c
+++ /dev/null
@@ -1,1142 +0,0 @@
-/*
- * xmlmemory.c: libxml memory allocator wrapper.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-#endif
-
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-
-/* #define DEBUG_MEMORY */
-
-/**
- * MEM_LIST:
- *
- * keep track of all allocated blocks for error reporting
- * Always build the memory list !
- */
-#ifdef DEBUG_MEMORY_LOCATION
-#ifndef MEM_LIST
-#define MEM_LIST /* keep a list of all the allocated memory blocks */
-#endif
-#endif
-
-#include <libxml/globals.h> /* must come before xmlmemory.h */
-#include <libxml/xmlmemory.h>
-#include <libxml/xmlerror.h>
-#include <libxml/threads.h>
-
-static int xmlMemInitialized = 0;
-static unsigned long debugMemSize = 0;
-static unsigned long debugMemBlocks = 0;
-static unsigned long debugMaxMemSize = 0;
-static xmlMutexPtr xmlMemMutex = NULL;
-
-void xmlMallocBreakpoint(void);
-
-/************************************************************************
- * *
- * Macros, variables and associated types *
- * *
- ************************************************************************/
-
-#if !defined(LIBXML_THREAD_ENABLED) && !defined(LIBXML_THREAD_ALLOC_ENABLED)
-#ifdef xmlMalloc
-#undef xmlMalloc
-#endif
-#ifdef xmlRealloc
-#undef xmlRealloc
-#endif
-#ifdef xmlMemStrdup
-#undef xmlMemStrdup
-#endif
-#endif
-
-/*
- * Each of the blocks allocated begin with a header containing informations
- */
-
-#define MEMTAG 0x5aa5
-
-#define MALLOC_TYPE 1
-#define REALLOC_TYPE 2
-#define STRDUP_TYPE 3
-#define MALLOC_ATOMIC_TYPE 4
-#define REALLOC_ATOMIC_TYPE 5
-
-typedef struct memnod {
- unsigned int mh_tag;
- unsigned int mh_type;
- unsigned long mh_number;
- size_t mh_size;
-#ifdef MEM_LIST
- struct memnod *mh_next;
- struct memnod *mh_prev;
-#endif
- const char *mh_file;
- unsigned int mh_line;
-} MEMHDR;
-
-
-#ifdef SUN4
-#define ALIGN_SIZE 16
-#else
-#define ALIGN_SIZE sizeof(double)
-#endif
-#define HDR_SIZE sizeof(MEMHDR)
-#define RESERVE_SIZE (((HDR_SIZE + (ALIGN_SIZE-1)) \
- / ALIGN_SIZE ) * ALIGN_SIZE)
-
-#define MAX_SIZE_T ((size_t)-1)
-
-#define CLIENT_2_HDR(a) ((MEMHDR *) (((char *) (a)) - RESERVE_SIZE))
-#define HDR_2_CLIENT(a) ((void *) (((char *) (a)) + RESERVE_SIZE))
-
-
-static unsigned int block=0;
-static unsigned int xmlMemStopAtBlock = 0;
-static void *xmlMemTraceBlockAt = NULL;
-#ifdef MEM_LIST
-static MEMHDR *memlist = NULL;
-#endif
-
-static void debugmem_tag_error(void *addr);
-#ifdef MEM_LIST
-static void debugmem_list_add(MEMHDR *);
-static void debugmem_list_delete(MEMHDR *);
-#endif
-#define Mem_Tag_Err(a) debugmem_tag_error(a);
-
-#ifndef TEST_POINT
-#define TEST_POINT
-#endif
-
-/**
- * xmlMallocBreakpoint:
- *
- * Breakpoint to use in conjunction with xmlMemStopAtBlock. When the block
- * number reaches the specified value this function is called. One need to add a breakpoint
- * to it to get the context in which the given block is allocated.
- */
-
-void
-xmlMallocBreakpoint(void) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlMallocBreakpoint reached on block %d\n", xmlMemStopAtBlock);
-}
-
-/**
- * xmlMallocLoc:
- * @size: an int specifying the size in byte to allocate.
- * @file: the file name or NULL
- * @line: the line number
- *
- * a malloc() equivalent, with logging of the allocation info.
- *
- * Returns a pointer to the allocated area or NULL in case of lack of memory.
- */
-
-void *
-xmlMallocLoc(size_t size, const char * file, int line)
-{
- MEMHDR *p;
- void *ret;
-
- if (!xmlMemInitialized) xmlInitMemory();
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "Malloc(%d)\n",size);
-#endif
-
- TEST_POINT
-
- p = (MEMHDR *) malloc(RESERVE_SIZE+size);
-
- if (!p) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlMallocLoc : Out of free space\n");
- xmlMemoryDump();
- return(NULL);
- }
- p->mh_tag = MEMTAG;
- p->mh_size = size;
- p->mh_type = MALLOC_TYPE;
- p->mh_file = file;
- p->mh_line = line;
- xmlMutexLock(xmlMemMutex);
- p->mh_number = ++block;
- debugMemSize += size;
- debugMemBlocks++;
- if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
-#ifdef MEM_LIST
- debugmem_list_add(p);
-#endif
- xmlMutexUnlock(xmlMemMutex);
-
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "Malloc(%d) Ok\n",size);
-#endif
-
- if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
-
- ret = HDR_2_CLIENT(p);
-
- if (xmlMemTraceBlockAt == ret) {
- xmlGenericError(xmlGenericErrorContext,
- "%p : Malloc(%lu) Ok\n", xmlMemTraceBlockAt,
- (long unsigned)size);
- xmlMallocBreakpoint();
- }
-
- TEST_POINT
-
- return(ret);
-}
-
-/**
- * xmlMallocAtomicLoc:
- * @size: an unsigned int specifying the size in byte to allocate.
- * @file: the file name or NULL
- * @line: the line number
- *
- * a malloc() equivalent, with logging of the allocation info.
- *
- * Returns a pointer to the allocated area or NULL in case of lack of memory.
- */
-
-void *
-xmlMallocAtomicLoc(size_t size, const char * file, int line)
-{
- MEMHDR *p;
- void *ret;
-
- if (!xmlMemInitialized) xmlInitMemory();
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "Malloc(%d)\n",size);
-#endif
-
- TEST_POINT
-
- if (size > (MAX_SIZE_T - RESERVE_SIZE)) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlMallocAtomicLoc : Unsigned overflow prevented\n");
- xmlMemoryDump();
- return(NULL);
- }
-
- p = (MEMHDR *) malloc(RESERVE_SIZE+size);
-
- if (!p) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlMallocAtomicLoc : Out of free space\n");
- xmlMemoryDump();
- return(NULL);
- }
- p->mh_tag = MEMTAG;
- p->mh_size = size;
- p->mh_type = MALLOC_ATOMIC_TYPE;
- p->mh_file = file;
- p->mh_line = line;
- xmlMutexLock(xmlMemMutex);
- p->mh_number = ++block;
- debugMemSize += size;
- debugMemBlocks++;
- if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
-#ifdef MEM_LIST
- debugmem_list_add(p);
-#endif
- xmlMutexUnlock(xmlMemMutex);
-
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "Malloc(%d) Ok\n",size);
-#endif
-
- if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
-
- ret = HDR_2_CLIENT(p);
-
- if (xmlMemTraceBlockAt == ret) {
- xmlGenericError(xmlGenericErrorContext,
- "%p : Malloc(%lu) Ok\n", xmlMemTraceBlockAt,
- (long unsigned)size);
- xmlMallocBreakpoint();
- }
-
- TEST_POINT
-
- return(ret);
-}
-/**
- * xmlMemMalloc:
- * @size: an int specifying the size in byte to allocate.
- *
- * a malloc() equivalent, with logging of the allocation info.
- *
- * Returns a pointer to the allocated area or NULL in case of lack of memory.
- */
-
-void *
-xmlMemMalloc(size_t size)
-{
- return(xmlMallocLoc(size, "none", 0));
-}
-
-/**
- * xmlReallocLoc:
- * @ptr: the initial memory block pointer
- * @size: an int specifying the size in byte to allocate.
- * @file: the file name or NULL
- * @line: the line number
- *
- * a realloc() equivalent, with logging of the allocation info.
- *
- * Returns a pointer to the allocated area or NULL in case of lack of memory.
- */
-
-void *
-xmlReallocLoc(void *ptr,size_t size, const char * file, int line)
-{
- MEMHDR *p, *tmp;
- unsigned long number;
-#ifdef DEBUG_MEMORY
- size_t oldsize;
-#endif
-
- if (ptr == NULL)
- return(xmlMallocLoc(size, file, line));
-
- if (!xmlMemInitialized) xmlInitMemory();
- TEST_POINT
-
- p = CLIENT_2_HDR(ptr);
- number = p->mh_number;
- if (xmlMemStopAtBlock == number) xmlMallocBreakpoint();
- if (p->mh_tag != MEMTAG) {
- Mem_Tag_Err(p);
- goto error;
- }
- p->mh_tag = ~MEMTAG;
- xmlMutexLock(xmlMemMutex);
- debugMemSize -= p->mh_size;
- debugMemBlocks--;
-#ifdef DEBUG_MEMORY
- oldsize = p->mh_size;
-#endif
-#ifdef MEM_LIST
- debugmem_list_delete(p);
-#endif
- xmlMutexUnlock(xmlMemMutex);
-
- tmp = (MEMHDR *) realloc(p,RESERVE_SIZE+size);
- if (!tmp) {
- free(p);
- goto error;
- }
- p = tmp;
- if (xmlMemTraceBlockAt == ptr) {
- xmlGenericError(xmlGenericErrorContext,
- "%p : Realloced(%lu -> %lu) Ok\n",
- xmlMemTraceBlockAt, (long unsigned)p->mh_size,
- (long unsigned)size);
- xmlMallocBreakpoint();
- }
- p->mh_tag = MEMTAG;
- p->mh_number = number;
- p->mh_type = REALLOC_TYPE;
- p->mh_size = size;
- p->mh_file = file;
- p->mh_line = line;
- xmlMutexLock(xmlMemMutex);
- debugMemSize += size;
- debugMemBlocks++;
- if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
-#ifdef MEM_LIST
- debugmem_list_add(p);
-#endif
- xmlMutexUnlock(xmlMemMutex);
-
- TEST_POINT
-
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "Realloced(%d to %d) Ok\n", oldsize, size);
-#endif
- return(HDR_2_CLIENT(p));
-
-error:
- return(NULL);
-}
-
-/**
- * xmlMemRealloc:
- * @ptr: the initial memory block pointer
- * @size: an int specifying the size in byte to allocate.
- *
- * a realloc() equivalent, with logging of the allocation info.
- *
- * Returns a pointer to the allocated area or NULL in case of lack of memory.
- */
-
-void *
-xmlMemRealloc(void *ptr,size_t size) {
- return(xmlReallocLoc(ptr, size, "none", 0));
-}
-
-/**
- * xmlMemFree:
- * @ptr: the memory block pointer
- *
- * a free() equivalent, with error checking.
- */
-void
-xmlMemFree(void *ptr)
-{
- MEMHDR *p;
- char *target;
-#ifdef DEBUG_MEMORY
- size_t size;
-#endif
-
- if (ptr == NULL)
- return;
-
- if (ptr == (void *) -1) {
- xmlGenericError(xmlGenericErrorContext,
- "trying to free pointer from freed area\n");
- goto error;
- }
-
- if (xmlMemTraceBlockAt == ptr) {
- xmlGenericError(xmlGenericErrorContext,
- "%p : Freed()\n", xmlMemTraceBlockAt);
- xmlMallocBreakpoint();
- }
-
- TEST_POINT
-
- target = (char *) ptr;
-
- p = CLIENT_2_HDR(ptr);
- if (p->mh_tag != MEMTAG) {
- Mem_Tag_Err(p);
- goto error;
- }
- if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
- p->mh_tag = ~MEMTAG;
- memset(target, -1, p->mh_size);
- xmlMutexLock(xmlMemMutex);
- debugMemSize -= p->mh_size;
- debugMemBlocks--;
-#ifdef DEBUG_MEMORY
- size = p->mh_size;
-#endif
-#ifdef MEM_LIST
- debugmem_list_delete(p);
-#endif
- xmlMutexUnlock(xmlMemMutex);
-
- free(p);
-
- TEST_POINT
-
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "Freed(%d) Ok\n", size);
-#endif
-
- return;
-
-error:
- xmlGenericError(xmlGenericErrorContext,
- "xmlMemFree(%lX) error\n", (unsigned long) ptr);
- xmlMallocBreakpoint();
- return;
-}
-
-/**
- * xmlMemStrdupLoc:
- * @str: the initial string pointer
- * @file: the file name or NULL
- * @line: the line number
- *
- * a strdup() equivalent, with logging of the allocation info.
- *
- * Returns a pointer to the new string or NULL if allocation error occurred.
- */
-
-char *
-xmlMemStrdupLoc(const char *str, const char *file, int line)
-{
- char *s;
- size_t size = strlen(str) + 1;
- MEMHDR *p;
-
- if (!xmlMemInitialized) xmlInitMemory();
- TEST_POINT
-
- p = (MEMHDR *) malloc(RESERVE_SIZE+size);
- if (!p) {
- goto error;
- }
- p->mh_tag = MEMTAG;
- p->mh_size = size;
- p->mh_type = STRDUP_TYPE;
- p->mh_file = file;
- p->mh_line = line;
- xmlMutexLock(xmlMemMutex);
- p->mh_number = ++block;
- debugMemSize += size;
- debugMemBlocks++;
- if (debugMemSize > debugMaxMemSize) debugMaxMemSize = debugMemSize;
-#ifdef MEM_LIST
- debugmem_list_add(p);
-#endif
- xmlMutexUnlock(xmlMemMutex);
-
- s = (char *) HDR_2_CLIENT(p);
-
- if (xmlMemStopAtBlock == p->mh_number) xmlMallocBreakpoint();
-
- strcpy(s,str);
-
- TEST_POINT
-
- if (xmlMemTraceBlockAt == s) {
- xmlGenericError(xmlGenericErrorContext,
- "%p : Strdup() Ok\n", xmlMemTraceBlockAt);
- xmlMallocBreakpoint();
- }
-
- return(s);
-
-error:
- return(NULL);
-}
-
-/**
- * xmlMemoryStrdup:
- * @str: the initial string pointer
- *
- * a strdup() equivalent, with logging of the allocation info.
- *
- * Returns a pointer to the new string or NULL if allocation error occurred.
- */
-
-char *
-xmlMemoryStrdup(const char *str) {
- return(xmlMemStrdupLoc(str, "none", 0));
-}
-
-/**
- * xmlMemUsed:
- *
- * Provides the amount of memory currently allocated
- *
- * Returns an int representing the amount of memory allocated.
- */
-
-int
-xmlMemUsed(void) {
- int res;
-
- xmlMutexLock(xmlMemMutex);
- res = debugMemSize;
- xmlMutexUnlock(xmlMemMutex);
- return(res);
-}
-
-/**
- * xmlMemBlocks:
- *
- * Provides the number of memory areas currently allocated
- *
- * Returns an int representing the number of blocks
- */
-
-int
-xmlMemBlocks(void) {
- int res;
-
- xmlMutexLock(xmlMemMutex);
- res = debugMemBlocks;
- xmlMutexUnlock(xmlMemMutex);
- return(res);
-}
-
-#ifdef MEM_LIST
-/**
- * xmlMemContentShow:
- * @fp: a FILE descriptor used as the output file
- * @p: a memory block header
- *
- * tries to show some content from the memory block
- */
-
-static void
-xmlMemContentShow(FILE *fp, MEMHDR *p)
-{
- int i,j,k,len;
- const char *buf;
-
- if (p == NULL) {
- fprintf(fp, " NULL");
- return;
- }
- len = p->mh_size;
- buf = (const char *) HDR_2_CLIENT(p);
-
- for (i = 0;i < len;i++) {
- if (buf[i] == 0) break;
- if (!isprint((unsigned char) buf[i])) break;
- }
- if ((i < 4) && ((buf[i] != 0) || (i == 0))) {
- if (len >= 4) {
- MEMHDR *q;
- void *cur;
-
- for (j = 0;(j < len -3) && (j < 40);j += 4) {
- cur = *((void **) &buf[j]);
- q = CLIENT_2_HDR(cur);
- p = memlist;
- k = 0;
- while (p != NULL) {
- if (p == q) break;
- p = p->mh_next;
- if (k++ > 100) break;
- }
- if ((p != NULL) && (p == q)) {
- fprintf(fp, " pointer to #%lu at index %d",
- p->mh_number, j);
- return;
- }
- }
- }
- } else if ((i == 0) && (buf[i] == 0)) {
- fprintf(fp," null");
- } else {
- if (buf[i] == 0) fprintf(fp," \"%.25s\"", buf);
- else {
- fprintf(fp," [");
- for (j = 0;j < i;j++)
- fprintf(fp,"%c", buf[j]);
- fprintf(fp,"]");
- }
- }
-}
-#endif
-
-/**
- * xmlMemDisplayLast:
- * @fp: a FILE descriptor used as the output file, if NULL, the result is
- * written to the file .memorylist
- * @nbBytes: the amount of memory to dump
- *
- * the last nbBytes of memory allocated and not freed, useful for dumping
- * the memory left allocated between two places at runtime.
- */
-
-void
-xmlMemDisplayLast(FILE *fp, long nbBytes)
-{
-#ifdef MEM_LIST
- MEMHDR *p;
- unsigned idx;
- int nb = 0;
-#endif
- FILE *old_fp = fp;
-
- if (nbBytes <= 0)
- return;
-
- if (fp == NULL) {
- fp = fopen(".memorylist", "w");
- if (fp == NULL)
- return;
- }
-
-#ifdef MEM_LIST
- fprintf(fp," Last %li MEMORY ALLOCATED : %lu, MAX was %lu\n",
- nbBytes, debugMemSize, debugMaxMemSize);
- fprintf(fp,"BLOCK NUMBER SIZE TYPE\n");
- idx = 0;
- xmlMutexLock(xmlMemMutex);
- p = memlist;
- while ((p) && (nbBytes > 0)) {
- fprintf(fp,"%-5u %6lu %6lu ",idx++,p->mh_number,
- (unsigned long)p->mh_size);
- switch (p->mh_type) {
- case STRDUP_TYPE:fprintf(fp,"strdup() in ");break;
- case MALLOC_TYPE:fprintf(fp,"malloc() in ");break;
- case REALLOC_TYPE:fprintf(fp,"realloc() in ");break;
- case MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
- case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
- default:
- fprintf(fp,"Unknown memory block, may be corrupted");
- xmlMutexUnlock(xmlMemMutex);
- if (old_fp == NULL)
- fclose(fp);
- return;
- }
- if (p->mh_file != NULL) fprintf(fp,"%s(%u)", p->mh_file, p->mh_line);
- if (p->mh_tag != MEMTAG)
- fprintf(fp," INVALID");
- nb++;
- if (nb < 100)
- xmlMemContentShow(fp, p);
- else
- fprintf(fp," skip");
-
- fprintf(fp,"\n");
- nbBytes -= (unsigned long)p->mh_size;
- p = p->mh_next;
- }
- xmlMutexUnlock(xmlMemMutex);
-#else
- fprintf(fp,"Memory list not compiled (MEM_LIST not defined !)\n");
-#endif
- if (old_fp == NULL)
- fclose(fp);
-}
-
-/**
- * xmlMemDisplay:
- * @fp: a FILE descriptor used as the output file, if NULL, the result is
- * written to the file .memorylist
- *
- * show in-extenso the memory blocks allocated
- */
-
-void
-xmlMemDisplay(FILE *fp)
-{
-#ifdef MEM_LIST
- MEMHDR *p;
- unsigned idx;
- int nb = 0;
-#if defined(HAVE_LOCALTIME) && defined(HAVE_STRFTIME)
- time_t currentTime;
- char buf[500];
- struct tm * tstruct;
-#endif
-#endif
- FILE *old_fp = fp;
-
- if (fp == NULL) {
- fp = fopen(".memorylist", "w");
- if (fp == NULL)
- return;
- }
-
-#ifdef MEM_LIST
-#if defined(HAVE_LOCALTIME) && defined(HAVE_STRFTIME)
- currentTime = time(NULL);
- tstruct = localtime(&currentTime);
- strftime(buf, sizeof(buf) - 1, "%I:%M:%S %p", tstruct);
- fprintf(fp," %s\n\n", buf);
-#endif
-
-
- fprintf(fp," MEMORY ALLOCATED : %lu, MAX was %lu\n",
- debugMemSize, debugMaxMemSize);
- fprintf(fp,"BLOCK NUMBER SIZE TYPE\n");
- idx = 0;
- xmlMutexLock(xmlMemMutex);
- p = memlist;
- while (p) {
- fprintf(fp,"%-5u %6lu %6lu ",idx++,p->mh_number,
- (unsigned long)p->mh_size);
- switch (p->mh_type) {
- case STRDUP_TYPE:fprintf(fp,"strdup() in ");break;
- case MALLOC_TYPE:fprintf(fp,"malloc() in ");break;
- case REALLOC_TYPE:fprintf(fp,"realloc() in ");break;
- case MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
- case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
- default:
- fprintf(fp,"Unknown memory block, may be corrupted");
- xmlMutexUnlock(xmlMemMutex);
- if (old_fp == NULL)
- fclose(fp);
- return;
- }
- if (p->mh_file != NULL) fprintf(fp,"%s(%u)", p->mh_file, p->mh_line);
- if (p->mh_tag != MEMTAG)
- fprintf(fp," INVALID");
- nb++;
- if (nb < 100)
- xmlMemContentShow(fp, p);
- else
- fprintf(fp," skip");
-
- fprintf(fp,"\n");
- p = p->mh_next;
- }
- xmlMutexUnlock(xmlMemMutex);
-#else
- fprintf(fp,"Memory list not compiled (MEM_LIST not defined !)\n");
-#endif
- if (old_fp == NULL)
- fclose(fp);
-}
-
-#ifdef MEM_LIST
-
-static void debugmem_list_add(MEMHDR *p)
-{
- p->mh_next = memlist;
- p->mh_prev = NULL;
- if (memlist) memlist->mh_prev = p;
- memlist = p;
-#ifdef MEM_LIST_DEBUG
- if (stderr)
- Mem_Display(stderr);
-#endif
-}
-
-static void debugmem_list_delete(MEMHDR *p)
-{
- if (p->mh_next)
- p->mh_next->mh_prev = p->mh_prev;
- if (p->mh_prev)
- p->mh_prev->mh_next = p->mh_next;
- else memlist = p->mh_next;
-#ifdef MEM_LIST_DEBUG
- if (stderr)
- Mem_Display(stderr);
-#endif
-}
-
-#endif
-
-/*
- * debugmem_tag_error:
- *
- * internal error function.
- */
-
-static void debugmem_tag_error(void *p)
-{
- xmlGenericError(xmlGenericErrorContext,
- "Memory tag error occurs :%p \n\t bye\n", p);
-#ifdef MEM_LIST
- if (stderr)
- xmlMemDisplay(stderr);
-#endif
-}
-
-#ifdef MEM_LIST
-static FILE *xmlMemoryDumpFile = NULL;
-#endif
-
-/**
- * xmlMemShow:
- * @fp: a FILE descriptor used as the output file
- * @nr: number of entries to dump
- *
- * show a show display of the memory allocated, and dump
- * the @nr last allocated areas which were not freed
- */
-
-void
-xmlMemShow(FILE *fp, int nr ATTRIBUTE_UNUSED)
-{
-#ifdef MEM_LIST
- MEMHDR *p;
-#endif
-
- if (fp != NULL)
- fprintf(fp," MEMORY ALLOCATED : %lu, MAX was %lu\n",
- debugMemSize, debugMaxMemSize);
-#ifdef MEM_LIST
- xmlMutexLock(xmlMemMutex);
- if (nr > 0) {
- fprintf(fp,"NUMBER SIZE TYPE WHERE\n");
- p = memlist;
- while ((p) && nr > 0) {
- fprintf(fp,"%6lu %6lu ",p->mh_number,(unsigned long)p->mh_size);
- switch (p->mh_type) {
- case STRDUP_TYPE:fprintf(fp,"strdup() in ");break;
- case MALLOC_TYPE:fprintf(fp,"malloc() in ");break;
- case MALLOC_ATOMIC_TYPE:fprintf(fp,"atomicmalloc() in ");break;
- case REALLOC_TYPE:fprintf(fp,"realloc() in ");break;
- case REALLOC_ATOMIC_TYPE:fprintf(fp,"atomicrealloc() in ");break;
- default:fprintf(fp," ??? in ");break;
- }
- if (p->mh_file != NULL)
- fprintf(fp,"%s(%u)", p->mh_file, p->mh_line);
- if (p->mh_tag != MEMTAG)
- fprintf(fp," INVALID");
- xmlMemContentShow(fp, p);
- fprintf(fp,"\n");
- nr--;
- p = p->mh_next;
- }
- }
- xmlMutexUnlock(xmlMemMutex);
-#endif /* MEM_LIST */
-}
-
-/**
- * xmlMemoryDump:
- *
- * Dump in-extenso the memory blocks allocated to the file .memorylist
- */
-
-void
-xmlMemoryDump(void)
-{
-#ifdef MEM_LIST
- FILE *dump;
-
- if (debugMaxMemSize == 0)
- return;
- dump = fopen(".memdump", "w");
- if (dump == NULL)
- xmlMemoryDumpFile = stderr;
- else xmlMemoryDumpFile = dump;
-
- xmlMemDisplay(xmlMemoryDumpFile);
-
- if (dump != NULL) fclose(dump);
-#endif /* MEM_LIST */
-}
-
-
-/****************************************************************
- * *
- * Initialization Routines *
- * *
- ****************************************************************/
-
-/**
- * xmlInitMemory:
- *
- * Initialize the memory layer.
- *
- * Returns 0 on success
- */
-int
-xmlInitMemory(void)
-{
-#ifdef HAVE_STDLIB_H
- char *breakpoint;
-#endif
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "xmlInitMemory()\n");
-#endif
- /*
- This is really not good code (see Bug 130419). Suggestions for
- improvement will be welcome!
- */
- if (xmlMemInitialized) return(-1);
- xmlMemInitialized = 1;
- xmlMemMutex = xmlNewMutex();
-
-#ifdef HAVE_STDLIB_H
- breakpoint = getenv("XML_MEM_BREAKPOINT");
- if (breakpoint != NULL) {
- sscanf(breakpoint, "%ud", &xmlMemStopAtBlock);
- }
-#endif
-#ifdef HAVE_STDLIB_H
- breakpoint = getenv("XML_MEM_TRACE");
- if (breakpoint != NULL) {
- sscanf(breakpoint, "%p", &xmlMemTraceBlockAt);
- }
-#endif
-
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "xmlInitMemory() Ok\n");
-#endif
- return(0);
-}
-
-/**
- * xmlCleanupMemory:
- *
- * Free up all the memory allocated by the library for its own
- * use. This should not be called by user level code.
- */
-void
-xmlCleanupMemory(void) {
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "xmlCleanupMemory()\n");
-#endif
- if (xmlMemInitialized == 0)
- return;
-
- xmlFreeMutex(xmlMemMutex);
- xmlMemMutex = NULL;
- xmlMemInitialized = 0;
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "xmlCleanupMemory() Ok\n");
-#endif
-}
-
-/**
- * xmlMemSetup:
- * @freeFunc: the free() function to use
- * @mallocFunc: the malloc() function to use
- * @reallocFunc: the realloc() function to use
- * @strdupFunc: the strdup() function to use
- *
- * Override the default memory access functions with a new set
- * This has to be called before any other libxml routines !
- *
- * Should this be blocked if there was already some allocations
- * done ?
- *
- * Returns 0 on success
- */
-int
-xmlMemSetup(xmlFreeFunc freeFunc, xmlMallocFunc mallocFunc,
- xmlReallocFunc reallocFunc, xmlStrdupFunc strdupFunc) {
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "xmlMemSetup()\n");
-#endif
- if (freeFunc == NULL)
- return(-1);
- if (mallocFunc == NULL)
- return(-1);
- if (reallocFunc == NULL)
- return(-1);
- if (strdupFunc == NULL)
- return(-1);
- xmlFree = freeFunc;
- xmlMalloc = mallocFunc;
- xmlMallocAtomic = mallocFunc;
- xmlRealloc = reallocFunc;
- xmlMemStrdup = strdupFunc;
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "xmlMemSetup() Ok\n");
-#endif
- return(0);
-}
-
-/**
- * xmlMemGet:
- * @freeFunc: place to save the free() function in use
- * @mallocFunc: place to save the malloc() function in use
- * @reallocFunc: place to save the realloc() function in use
- * @strdupFunc: place to save the strdup() function in use
- *
- * Provides the memory access functions set currently in use
- *
- * Returns 0 on success
- */
-int
-xmlMemGet(xmlFreeFunc *freeFunc, xmlMallocFunc *mallocFunc,
- xmlReallocFunc *reallocFunc, xmlStrdupFunc *strdupFunc) {
- if (freeFunc != NULL) *freeFunc = xmlFree;
- if (mallocFunc != NULL) *mallocFunc = xmlMalloc;
- if (reallocFunc != NULL) *reallocFunc = xmlRealloc;
- if (strdupFunc != NULL) *strdupFunc = xmlMemStrdup;
- return(0);
-}
-
-/**
- * xmlGcMemSetup:
- * @freeFunc: the free() function to use
- * @mallocFunc: the malloc() function to use
- * @mallocAtomicFunc: the malloc() function to use for atomic allocations
- * @reallocFunc: the realloc() function to use
- * @strdupFunc: the strdup() function to use
- *
- * Override the default memory access functions with a new set
- * This has to be called before any other libxml routines !
- * The mallocAtomicFunc is specialized for atomic block
- * allocations (i.e. of areas useful for garbage collected memory allocators
- *
- * Should this be blocked if there was already some allocations
- * done ?
- *
- * Returns 0 on success
- */
-int
-xmlGcMemSetup(xmlFreeFunc freeFunc, xmlMallocFunc mallocFunc,
- xmlMallocFunc mallocAtomicFunc, xmlReallocFunc reallocFunc,
- xmlStrdupFunc strdupFunc) {
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "xmlGcMemSetup()\n");
-#endif
- if (freeFunc == NULL)
- return(-1);
- if (mallocFunc == NULL)
- return(-1);
- if (mallocAtomicFunc == NULL)
- return(-1);
- if (reallocFunc == NULL)
- return(-1);
- if (strdupFunc == NULL)
- return(-1);
- xmlFree = freeFunc;
- xmlMalloc = mallocFunc;
- xmlMallocAtomic = mallocAtomicFunc;
- xmlRealloc = reallocFunc;
- xmlMemStrdup = strdupFunc;
-#ifdef DEBUG_MEMORY
- xmlGenericError(xmlGenericErrorContext,
- "xmlGcMemSetup() Ok\n");
-#endif
- return(0);
-}
-
-/**
- * xmlGcMemGet:
- * @freeFunc: place to save the free() function in use
- * @mallocFunc: place to save the malloc() function in use
- * @mallocAtomicFunc: place to save the atomic malloc() function in use
- * @reallocFunc: place to save the realloc() function in use
- * @strdupFunc: place to save the strdup() function in use
- *
- * Provides the memory access functions set currently in use
- * The mallocAtomicFunc is specialized for atomic block
- * allocations (i.e. of areas useful for garbage collected memory allocators
- *
- * Returns 0 on success
- */
-int
-xmlGcMemGet(xmlFreeFunc *freeFunc, xmlMallocFunc *mallocFunc,
- xmlMallocFunc *mallocAtomicFunc, xmlReallocFunc *reallocFunc,
- xmlStrdupFunc *strdupFunc) {
- if (freeFunc != NULL) *freeFunc = xmlFree;
- if (mallocFunc != NULL) *mallocFunc = xmlMalloc;
- if (mallocAtomicFunc != NULL) *mallocAtomicFunc = xmlMallocAtomic;
- if (reallocFunc != NULL) *reallocFunc = xmlRealloc;
- if (strdupFunc != NULL) *strdupFunc = xmlMemStrdup;
- return(0);
-}
-
-#define bottom_xmlmemory
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/xmlmodule.c b/external/libxml2_android/jni/libxml2/xmlmodule.c
deleted file mode 100644
index 50ed666a..00000000
--- a/external/libxml2_android/jni/libxml2/xmlmodule.c
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * xmlmodule.c : basic API for dynamic module loading added 2.6.17
- *
- * See Copyright for the status of this software.
- *
- * joelwreed@comcast.net
- *
- * http://www.fortran-2000.com/ArnaudRecipes/sharedlib.html
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/xmlerror.h>
-#include <libxml/xmlmodule.h>
-#include <libxml/globals.h>
-
-#ifdef LIBXML_MODULES_ENABLED
-
-struct _xmlModule {
- unsigned char *name;
- void *handle;
-};
-
-static void *xmlModulePlatformOpen(const char *name);
-static int xmlModulePlatformClose(void *handle);
-static int xmlModulePlatformSymbol(void *handle, const char *name, void **result);
-
-/************************************************************************
- * *
- * module memory error handler *
- * *
- ************************************************************************/
-
-/**
- * xmlModuleErrMemory:
- * @extra: extra information
- *
- * Handle an out of memory condition
- */
-static void
-xmlModuleErrMemory(xmlModulePtr module, const char *extra)
-{
- const char *name = NULL;
-
- if (module != NULL) {
- name = (const char *) module->name;
- }
-
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
- name, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlModuleOpen:
- * @name: the module name
- * @options: a set of xmlModuleOption
- *
- * Opens a module/shared library given its name or path
- * NOTE: that due to portability issues, behaviour can only be
- * guaranteed with @name using ASCII. We canot guarantee that
- * an UTF-8 string would work, which is why name is a const char *
- * and not a const xmlChar * .
- * TODO: options are not yet implemented.
- *
- * Returns a handle for the module or NULL in case of error
- */
-xmlModulePtr
-xmlModuleOpen(const char *name, int options ATTRIBUTE_UNUSED)
-{
- xmlModulePtr module;
-
- module = (xmlModulePtr) xmlMalloc(sizeof(xmlModule));
- if (module == NULL) {
- xmlModuleErrMemory(NULL, "creating module");
- return (NULL);
- }
-
- memset(module, 0, sizeof(xmlModule));
-
- module->handle = xmlModulePlatformOpen(name);
-
- if (module->handle == NULL) {
- xmlFree(module);
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
- XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0,
- name, NULL, 0, 0, "failed to open %s\n", name);
- return(NULL);
- }
-
- module->name = xmlStrdup((const xmlChar *) name);
- return (module);
-}
-
-/**
- * xmlModuleSymbol:
- * @module: the module
- * @name: the name of the symbol
- * @symbol: the resulting symbol address
- *
- * Lookup for a symbol address in the given module
- * NOTE: that due to portability issues, behaviour can only be
- * guaranteed with @name using ASCII. We canot guarantee that
- * an UTF-8 string would work, which is why name is a const char *
- * and not a const xmlChar * .
- *
- * Returns 0 if the symbol was found, or -1 in case of error
- */
-int
-xmlModuleSymbol(xmlModulePtr module, const char *name, void **symbol)
-{
- int rc = -1;
-
- if ((NULL == module) || (symbol == NULL) || (name == NULL)) {
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
- XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0,
- NULL, NULL, 0, 0, "null parameter\n");
- return rc;
- }
-
- rc = xmlModulePlatformSymbol(module->handle, name, symbol);
-
- if (rc == -1) {
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
- XML_MODULE_OPEN, XML_ERR_FATAL, NULL, 0, 0,
- name, NULL, 0, 0,
- "failed to find symbol: %s\n",
- (name == NULL ? "NULL" : name));
- return rc;
- }
-
- return rc;
-}
-
-/**
- * xmlModuleClose:
- * @module: the module handle
- *
- * The close operations unload the associated module and free the
- * data associated to the module.
- *
- * Returns 0 in case of success, -1 in case of argument error and -2
- * if the module could not be closed/unloaded.
- */
-int
-xmlModuleClose(xmlModulePtr module)
-{
- int rc;
-
- if (NULL == module) {
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
- XML_MODULE_CLOSE, XML_ERR_FATAL, NULL, 0, 0,
- NULL, NULL, 0, 0, "null module pointer\n");
- return -1;
- }
-
- rc = xmlModulePlatformClose(module->handle);
-
- if (rc != 0) {
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
- XML_MODULE_CLOSE, XML_ERR_FATAL, NULL, 0, 0,
- (const char *) module->name, NULL, 0, 0,
- "failed to close: %s\n", module->name);
- return -2;
- }
-
- rc = xmlModuleFree(module);
- return (rc);
-}
-
-/**
- * xmlModuleFree:
- * @module: the module handle
- *
- * The free operations free the data associated to the module
- * but does not unload the associated shared library which may still
- * be in use.
- *
- * Returns 0 in case of success, -1 in case of argument error
- */
-int
-xmlModuleFree(xmlModulePtr module)
-{
- if (NULL == module) {
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_MODULE,
- XML_MODULE_CLOSE, XML_ERR_FATAL, NULL, 0, NULL,
- NULL, NULL, 0, 0, "null module pointer\n");
- return -1;
- }
-
- xmlFree(module->name);
- xmlFree(module);
-
- return (0);
-}
-
-#if defined(HAVE_DLOPEN) && !defined(_WIN32)
-#ifdef HAVE_DLFCN_H
-#include <dlfcn.h>
-#endif
-
-#ifndef RTLD_GLOBAL /* For Tru64 UNIX 4.0 */
-#define RTLD_GLOBAL 0
-#endif
-
-/**
- * xmlModulePlatformOpen:
- * @name: path to the module
- *
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
- return dlopen(name, RTLD_GLOBAL | RTLD_NOW);
-}
-
-/*
- * xmlModulePlatformClose:
- * @handle: handle to the module
- *
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
- return dlclose(handle);
-}
-
-/*
- * xmlModulePlatformSymbol:
- * http://www.opengroup.org/onlinepubs/009695399/functions/dlsym.html
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
- *symbol = dlsym(handle, name);
- if (dlerror() != NULL) {
- return -1;
- }
- return 0;
-}
-
-#else /* ! HAVE_DLOPEN */
-
-#ifdef HAVE_SHLLOAD /* HAVE_SHLLOAD */
-#ifdef HAVE_DL_H
-#include <dl.h>
-#endif
-/*
- * xmlModulePlatformOpen:
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
- return shl_load(name, BIND_IMMEDIATE, 0L);
-}
-
-/*
- * xmlModulePlatformClose:
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
- return shl_unload(handle);
-}
-
-/*
- * xmlModulePlatformSymbol:
- * http://docs.hp.com/en/B2355-90683/shl_load.3X.html
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
- int rc;
-
- errno = 0;
- rc = shl_findsym(&handle, name, TYPE_UNDEFINED, symbol);
- return rc;
-}
-
-#endif /* HAVE_SHLLOAD */
-#endif /* ! HAVE_DLOPEN */
-
-#ifdef _WIN32
-
-#include <windows.h>
-
-/*
- * xmlModulePlatformOpen:
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
- return LoadLibraryA(name);
-}
-
-/*
- * xmlModulePlatformClose:
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
- int rc;
-
- rc = FreeLibrary(handle);
- return (0 == rc);
-}
-
-/*
- * xmlModulePlatformSymbol:
- * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getprocaddress.asp
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
-#ifdef _WIN32_WCE
- /*
- * GetProcAddressA seems only available on WinCE
- */
- *symbol = GetProcAddressA(handle, name);
-#else
- *symbol = GetProcAddress(handle, name);
-#endif
- return (NULL == *symbol) ? -1 : 0;
-}
-
-#endif /* _WIN32 */
-
-#ifdef HAVE_BEOS
-
-#include <kernel/image.h>
-
-/*
- * xmlModulePlatformOpen:
- * beos api info: http://www.beunited.org/bebook/The%20Kernel%20Kit/Images.html
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
- return (void *) load_add_on(name);
-}
-
-/*
- * xmlModulePlatformClose:
- * beos api info: http://www.beunited.org/bebook/The%20Kernel%20Kit/Images.html
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
- status_t rc;
-
- rc = unload_add_on((image_id) handle);
-
- if (rc == B_OK)
- return 0;
- else
- return -1;
-}
-
-/*
- * xmlModulePlatformSymbol:
- * beos api info: http://www.beunited.org/bebook/The%20Kernel%20Kit/Images.html
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
- status_t rc;
-
- rc = get_image_symbol((image_id) handle, name, B_SYMBOL_TYPE_ANY, symbol);
-
- return (rc == B_OK) ? 0 : -1;
-}
-
-#endif /* HAVE_BEOS */
-
-#ifdef HAVE_OS2
-
-#include <os2.h>
-
-/*
- * xmlModulePlatformOpen:
- * os2 api info: http://www.edm2.com/os2api/Dos/DosLoadModule.html
- * returns a handle on success, and zero on error.
- */
-
-static void *
-xmlModulePlatformOpen(const char *name)
-{
- char errbuf[256];
- void *handle;
- int rc;
-
- rc = DosLoadModule(errbuf, sizeof(errbuf) - 1, name, &handle);
-
- if (rc)
- return 0;
- else
- return (handle);
-}
-
-/*
- * xmlModulePlatformClose:
- * os2 api info: http://www.edm2.com/os2api/Dos/DosFreeModule.html
- * returns 0 on success, and non-zero on error.
- */
-
-static int
-xmlModulePlatformClose(void *handle)
-{
- return DosFreeModule(handle);
-}
-
-/*
- * xmlModulePlatformSymbol:
- * os2 api info: http://www.edm2.com/os2api/Dos/DosQueryProcAddr.html
- * returns 0 on success and the loaded symbol in result, and -1 on error.
- */
-
-static int
-xmlModulePlatformSymbol(void *handle, const char *name, void **symbol)
-{
- int rc;
-
- rc = DosQueryProcAddr(handle, 0, name, symbol);
-
- return (rc == NO_ERROR) ? 0 : -1;
-}
-
-#endif /* HAVE_OS2 */
-
-#define bottom_xmlmodule
-#include "elfgcchack.h"
-#endif /* LIBXML_MODULES_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/xmlreader.c b/external/libxml2_android/jni/libxml2/xmlreader.c
deleted file mode 100644
index f285790b..00000000
--- a/external/libxml2_android/jni/libxml2/xmlreader.c
+++ /dev/null
@@ -1,5956 +0,0 @@
-/*
- * xmlreader.c: implements the xmlTextReader streaming node API
- *
- * NOTE:
- * XmlTextReader.Normalization Property won't be supported, since
- * it makes the parser non compliant to the XML recommendation
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-/*
- * TODOs:
- * - XML Schemas validation
- */
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_READER_ENABLED
-#include <string.h> /* for memset() only ! */
-#include <stdarg.h>
-
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/xmlIO.h>
-#include <libxml/xmlreader.h>
-#include <libxml/parserInternals.h>
-#ifdef LIBXML_SCHEMAS_ENABLED
-#include <libxml/relaxng.h>
-#include <libxml/xmlschemas.h>
-#endif
-#include <libxml/uri.h>
-#ifdef LIBXML_XINCLUDE_ENABLED
-#include <libxml/xinclude.h>
-#endif
-#ifdef LIBXML_PATTERN_ENABLED
-#include <libxml/pattern.h>
-#endif
-
-#include "buf.h"
-
-#define MAX_ERR_MSG_SIZE 64000
-
-/*
- * The following VA_COPY was coded following an example in
- * the Samba project. It may not be sufficient for some
- * esoteric implementations of va_list but (hopefully) will
- * be sufficient for libxml2.
- */
-#ifndef VA_COPY
- #ifdef HAVE_VA_COPY
- #define VA_COPY(dest, src) va_copy(dest, src)
- #else
- #ifdef HAVE___VA_COPY
- #define VA_COPY(dest,src) __va_copy(dest, src)
- #else
- #ifndef VA_LIST_IS_ARRAY
- #define VA_COPY(dest,src) (dest) = (src)
- #else
- #include <string.h>
- #define VA_COPY(dest,src) memcpy((char *)(dest),(char *)(src),sizeof(va_list))
- #endif
- #endif
- #endif
-#endif
-
-/* #define DEBUG_CALLBACKS */
-/* #define DEBUG_READER */
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- */
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-#ifdef DEBUG_READER
-#define DUMP_READER xmlTextReaderDebug(reader);
-#else
-#define DUMP_READER
-#endif
-
-#define CHUNK_SIZE 512
-/************************************************************************
- * *
- * The parser: maps the Text Reader API on top of the existing *
- * parsing routines building a tree *
- * *
- ************************************************************************/
-
-#define XML_TEXTREADER_INPUT 1
-#define XML_TEXTREADER_CTXT 2
-
-typedef enum {
- XML_TEXTREADER_NONE = -1,
- XML_TEXTREADER_START= 0,
- XML_TEXTREADER_ELEMENT= 1,
- XML_TEXTREADER_END= 2,
- XML_TEXTREADER_EMPTY= 3,
- XML_TEXTREADER_BACKTRACK= 4,
- XML_TEXTREADER_DONE= 5,
- XML_TEXTREADER_ERROR= 6
-} xmlTextReaderState;
-
-typedef enum {
- XML_TEXTREADER_NOT_VALIDATE = 0,
- XML_TEXTREADER_VALIDATE_DTD = 1,
- XML_TEXTREADER_VALIDATE_RNG = 2,
- XML_TEXTREADER_VALIDATE_XSD = 4
-} xmlTextReaderValidate;
-
-struct _xmlTextReader {
- int mode; /* the parsing mode */
- xmlDocPtr doc; /* when walking an existing doc */
- xmlTextReaderValidate validate;/* is there any validation */
- int allocs; /* what structure were deallocated */
- xmlTextReaderState state;
- xmlParserCtxtPtr ctxt; /* the parser context */
- xmlSAXHandlerPtr sax; /* the parser SAX callbacks */
- xmlParserInputBufferPtr input; /* the input */
- startElementSAXFunc startElement;/* initial SAX callbacks */
- endElementSAXFunc endElement; /* idem */
- startElementNsSAX2Func startElementNs;/* idem */
- endElementNsSAX2Func endElementNs; /* idem */
- charactersSAXFunc characters;
- cdataBlockSAXFunc cdataBlock;
- unsigned int base; /* base of the segment in the input */
- unsigned int cur; /* current position in the input */
- xmlNodePtr node; /* current node */
- xmlNodePtr curnode;/* current attribute node */
- int depth; /* depth of the current node */
- xmlNodePtr faketext;/* fake xmlNs chld */
- int preserve;/* preserve the resulting document */
- xmlBufPtr buffer; /* used to return const xmlChar * */
- xmlDictPtr dict; /* the context dictionary */
-
- /* entity stack when traversing entities content */
- xmlNodePtr ent; /* Current Entity Ref Node */
- int entNr; /* Depth of the entities stack */
- int entMax; /* Max depth of the entities stack */
- xmlNodePtr *entTab; /* array of entities */
-
- /* error handling */
- xmlTextReaderErrorFunc errorFunc; /* callback function */
- void *errorFuncArg; /* callback function user argument */
-
-#ifdef LIBXML_SCHEMAS_ENABLED
- /* Handling of RelaxNG validation */
- xmlRelaxNGPtr rngSchemas; /* The Relax NG schemas */
- xmlRelaxNGValidCtxtPtr rngValidCtxt;/* The Relax NG validation context */
- int rngPreserveCtxt; /* 1 if the context was provided by the user */
- int rngValidErrors;/* The number of errors detected */
- xmlNodePtr rngFullNode; /* the node if RNG not progressive */
- /* Handling of Schemas validation */
- xmlSchemaPtr xsdSchemas; /* The Schemas schemas */
- xmlSchemaValidCtxtPtr xsdValidCtxt;/* The Schemas validation context */
- int xsdPreserveCtxt; /* 1 if the context was provided by the user */
- int xsdValidErrors;/* The number of errors detected */
- xmlSchemaSAXPlugPtr xsdPlug; /* the schemas plug in SAX pipeline */
-#endif
-#ifdef LIBXML_XINCLUDE_ENABLED
- /* Handling of XInclude processing */
- int xinclude; /* is xinclude asked for */
- const xmlChar * xinclude_name; /* the xinclude name from dict */
- xmlXIncludeCtxtPtr xincctxt; /* the xinclude context */
- int in_xinclude; /* counts for xinclude */
-#endif
-#ifdef LIBXML_PATTERN_ENABLED
- int patternNr; /* number of preserve patterns */
- int patternMax; /* max preserve patterns */
- xmlPatternPtr *patternTab; /* array of preserve patterns */
-#endif
- int preserves; /* level of preserves */
- int parserFlags; /* the set of options set */
- /* Structured error handling */
- xmlStructuredErrorFunc sErrorFunc; /* callback function */
-};
-
-#define NODE_IS_EMPTY 0x1
-#define NODE_IS_PRESERVED 0x2
-#define NODE_IS_SPRESERVED 0x4
-
-/**
- * CONSTSTR:
- *
- * Macro used to return an interned string
- */
-#define CONSTSTR(str) xmlDictLookup(reader->dict, (str), -1)
-#define CONSTQSTR(p, str) xmlDictQLookup(reader->dict, (p), (str))
-
-static int xmlTextReaderReadTree(xmlTextReaderPtr reader);
-static int xmlTextReaderNextTree(xmlTextReaderPtr reader);
-
-/************************************************************************
- * *
- * Our own version of the freeing routines as we recycle nodes *
- * *
- ************************************************************************/
-/**
- * DICT_FREE:
- * @str: a string
- *
- * Free a string if it is not owned by the "dict" dictionary in the
- * current scope
- */
-#define DICT_FREE(str) \
- if ((str) && ((!dict) || \
- (xmlDictOwns(dict, (const xmlChar *)(str)) == 0))) \
- xmlFree((char *)(str));
-
-static void xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur);
-static void xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur);
-
-/**
- * xmlFreeID:
- * @not: A id
- *
- * Deallocate the memory used by an id definition
- */
-static void
-xmlFreeID(xmlIDPtr id) {
- xmlDictPtr dict = NULL;
-
- if (id == NULL) return;
-
- if (id->doc != NULL)
- dict = id->doc->dict;
-
- if (id->value != NULL)
- DICT_FREE(id->value)
- xmlFree(id);
-}
-
-/**
- * xmlTextReaderRemoveID:
- * @doc: the document
- * @attr: the attribute
- *
- * Remove the given attribute from the ID table maintained internally.
- *
- * Returns -1 if the lookup failed and 0 otherwise
- */
-static int
-xmlTextReaderRemoveID(xmlDocPtr doc, xmlAttrPtr attr) {
- xmlIDTablePtr table;
- xmlIDPtr id;
- xmlChar *ID;
-
- if (doc == NULL) return(-1);
- if (attr == NULL) return(-1);
- table = (xmlIDTablePtr) doc->ids;
- if (table == NULL)
- return(-1);
-
- ID = xmlNodeListGetString(doc, attr->children, 1);
- if (ID == NULL)
- return(-1);
- id = xmlHashLookup(table, ID);
- xmlFree(ID);
- if (id == NULL || id->attr != attr) {
- return(-1);
- }
- id->name = attr->name;
- id->attr = NULL;
- return(0);
-}
-
-/**
- * xmlTextReaderFreeProp:
- * @reader: the xmlTextReaderPtr used
- * @cur: the node
- *
- * Free a node.
- */
-static void
-xmlTextReaderFreeProp(xmlTextReaderPtr reader, xmlAttrPtr cur) {
- xmlDictPtr dict;
-
- if ((reader != NULL) && (reader->ctxt != NULL))
- dict = reader->ctxt->dict;
- else
- dict = NULL;
- if (cur == NULL) return;
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue((xmlNodePtr) cur);
-
- /* Check for ID removal -> leading to invalid references ! */
- if ((cur->parent != NULL) && (cur->parent->doc != NULL) &&
- ((cur->parent->doc->intSubset != NULL) ||
- (cur->parent->doc->extSubset != NULL))) {
- if (xmlIsID(cur->parent->doc, cur->parent, cur))
- xmlTextReaderRemoveID(cur->parent->doc, cur);
- }
- if (cur->children != NULL)
- xmlTextReaderFreeNodeList(reader, cur->children);
-
- DICT_FREE(cur->name);
- if ((reader != NULL) && (reader->ctxt != NULL) &&
- (reader->ctxt->freeAttrsNr < 100)) {
- cur->next = reader->ctxt->freeAttrs;
- reader->ctxt->freeAttrs = cur;
- reader->ctxt->freeAttrsNr++;
- } else {
- xmlFree(cur);
- }
-}
-
-/**
- * xmlTextReaderFreePropList:
- * @reader: the xmlTextReaderPtr used
- * @cur: the first property in the list
- *
- * Free a property and all its siblings, all the children are freed too.
- */
-static void
-xmlTextReaderFreePropList(xmlTextReaderPtr reader, xmlAttrPtr cur) {
- xmlAttrPtr next;
-
- while (cur != NULL) {
- next = cur->next;
- xmlTextReaderFreeProp(reader, cur);
- cur = next;
- }
-}
-
-/**
- * xmlTextReaderFreeNodeList:
- * @reader: the xmlTextReaderPtr used
- * @cur: the first node in the list
- *
- * Free a node and all its siblings, this is a recursive behaviour, all
- * the children are freed too.
- */
-static void
-xmlTextReaderFreeNodeList(xmlTextReaderPtr reader, xmlNodePtr cur) {
- xmlNodePtr next;
- xmlDictPtr dict;
-
- if ((reader != NULL) && (reader->ctxt != NULL))
- dict = reader->ctxt->dict;
- else
- dict = NULL;
- if (cur == NULL) return;
- if (cur->type == XML_NAMESPACE_DECL) {
- xmlFreeNsList((xmlNsPtr) cur);
- return;
- }
- if ((cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- xmlFreeDoc((xmlDocPtr) cur);
- return;
- }
- while (cur != NULL) {
- next = cur->next;
- /* unroll to speed up freeing the document */
- if (cur->type != XML_DTD_NODE) {
-
- if ((cur->children != NULL) &&
- (cur->type != XML_ENTITY_REF_NODE)) {
- if (cur->children->parent == cur)
- xmlTextReaderFreeNodeList(reader, cur->children);
- cur->children = NULL;
- }
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue(cur);
-
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) &&
- (cur->properties != NULL))
- xmlTextReaderFreePropList(reader, cur->properties);
- if ((cur->content != (xmlChar *) &(cur->properties)) &&
- (cur->type != XML_ELEMENT_NODE) &&
- (cur->type != XML_XINCLUDE_START) &&
- (cur->type != XML_XINCLUDE_END) &&
- (cur->type != XML_ENTITY_REF_NODE)) {
- DICT_FREE(cur->content);
- }
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) &&
- (cur->nsDef != NULL))
- xmlFreeNsList(cur->nsDef);
-
- /*
- * we don't free element names here they are interned now
- */
- if ((cur->type != XML_TEXT_NODE) &&
- (cur->type != XML_COMMENT_NODE))
- DICT_FREE(cur->name);
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_TEXT_NODE)) &&
- (reader != NULL) && (reader->ctxt != NULL) &&
- (reader->ctxt->freeElemsNr < 100)) {
- cur->next = reader->ctxt->freeElems;
- reader->ctxt->freeElems = cur;
- reader->ctxt->freeElemsNr++;
- } else {
- xmlFree(cur);
- }
- }
- cur = next;
- }
-}
-
-/**
- * xmlTextReaderFreeNode:
- * @reader: the xmlTextReaderPtr used
- * @cur: the node
- *
- * Free a node, this is a recursive behaviour, all the children are freed too.
- * This doesn't unlink the child from the list, use xmlUnlinkNode() first.
- */
-static void
-xmlTextReaderFreeNode(xmlTextReaderPtr reader, xmlNodePtr cur) {
- xmlDictPtr dict;
-
- if ((reader != NULL) && (reader->ctxt != NULL))
- dict = reader->ctxt->dict;
- else
- dict = NULL;
- if (cur->type == XML_DTD_NODE) {
- xmlFreeDtd((xmlDtdPtr) cur);
- return;
- }
- if (cur->type == XML_NAMESPACE_DECL) {
- xmlFreeNs((xmlNsPtr) cur);
- return;
- }
- if (cur->type == XML_ATTRIBUTE_NODE) {
- xmlTextReaderFreeProp(reader, (xmlAttrPtr) cur);
- return;
- }
-
- if ((cur->children != NULL) &&
- (cur->type != XML_ENTITY_REF_NODE)) {
- if (cur->children->parent == cur)
- xmlTextReaderFreeNodeList(reader, cur->children);
- cur->children = NULL;
- }
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue(cur);
-
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) &&
- (cur->properties != NULL))
- xmlTextReaderFreePropList(reader, cur->properties);
- if ((cur->content != (xmlChar *) &(cur->properties)) &&
- (cur->type != XML_ELEMENT_NODE) &&
- (cur->type != XML_XINCLUDE_START) &&
- (cur->type != XML_XINCLUDE_END) &&
- (cur->type != XML_ENTITY_REF_NODE)) {
- DICT_FREE(cur->content);
- }
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_XINCLUDE_START) ||
- (cur->type == XML_XINCLUDE_END)) &&
- (cur->nsDef != NULL))
- xmlFreeNsList(cur->nsDef);
-
- /*
- * we don't free names here they are interned now
- */
- if ((cur->type != XML_TEXT_NODE) &&
- (cur->type != XML_COMMENT_NODE))
- DICT_FREE(cur->name);
-
- if (((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_TEXT_NODE)) &&
- (reader != NULL) && (reader->ctxt != NULL) &&
- (reader->ctxt->freeElemsNr < 100)) {
- cur->next = reader->ctxt->freeElems;
- reader->ctxt->freeElems = cur;
- reader->ctxt->freeElemsNr++;
- } else {
- xmlFree(cur);
- }
-}
-
-/**
- * xmlTextReaderFreeIDTable:
- * @table: An id table
- *
- * Deallocate the memory used by an ID hash table.
- */
-static void
-xmlTextReaderFreeIDTable(xmlIDTablePtr table) {
- xmlHashFree(table, (xmlHashDeallocator) xmlFreeID);
-}
-
-/**
- * xmlTextReaderFreeDoc:
- * @reader: the xmlTextReaderPtr used
- * @cur: pointer to the document
- *
- * Free up all the structures used by a document, tree included.
- */
-static void
-xmlTextReaderFreeDoc(xmlTextReaderPtr reader, xmlDocPtr cur) {
- xmlDtdPtr extSubset, intSubset;
-
- if (cur == NULL) return;
-
- if ((__xmlRegisterCallbacks) && (xmlDeregisterNodeDefaultValue))
- xmlDeregisterNodeDefaultValue((xmlNodePtr) cur);
-
- /*
- * Do this before freeing the children list to avoid ID lookups
- */
- if (cur->ids != NULL) xmlTextReaderFreeIDTable((xmlIDTablePtr) cur->ids);
- cur->ids = NULL;
- if (cur->refs != NULL) xmlFreeRefTable((xmlRefTablePtr) cur->refs);
- cur->refs = NULL;
- extSubset = cur->extSubset;
- intSubset = cur->intSubset;
- if (intSubset == extSubset)
- extSubset = NULL;
- if (extSubset != NULL) {
- xmlUnlinkNode((xmlNodePtr) cur->extSubset);
- cur->extSubset = NULL;
- xmlFreeDtd(extSubset);
- }
- if (intSubset != NULL) {
- xmlUnlinkNode((xmlNodePtr) cur->intSubset);
- cur->intSubset = NULL;
- xmlFreeDtd(intSubset);
- }
-
- if (cur->children != NULL) xmlTextReaderFreeNodeList(reader, cur->children);
-
- if (cur->version != NULL) xmlFree((char *) cur->version);
- if (cur->name != NULL) xmlFree((char *) cur->name);
- if (cur->encoding != NULL) xmlFree((char *) cur->encoding);
- if (cur->oldNs != NULL) xmlFreeNsList(cur->oldNs);
- if (cur->URL != NULL) xmlFree((char *) cur->URL);
- if (cur->dict != NULL) xmlDictFree(cur->dict);
-
- xmlFree(cur);
-}
-
-/************************************************************************
- * *
- * The reader core parser *
- * *
- ************************************************************************/
-#ifdef DEBUG_READER
-static void
-xmlTextReaderDebug(xmlTextReaderPtr reader) {
- if ((reader == NULL) || (reader->ctxt == NULL)) {
- fprintf(stderr, "xmlTextReader NULL\n");
- return;
- }
- fprintf(stderr, "xmlTextReader: state %d depth %d ",
- reader->state, reader->depth);
- if (reader->node == NULL) {
- fprintf(stderr, "node = NULL\n");
- } else {
- fprintf(stderr, "node %s\n", reader->node->name);
- }
- fprintf(stderr, " input: base %d, cur %d, depth %d: ",
- reader->base, reader->cur, reader->ctxt->nodeNr);
- if (reader->input->buffer == NULL) {
- fprintf(stderr, "buffer is NULL\n");
- } else {
-#ifdef LIBXML_DEBUG_ENABLED
- xmlDebugDumpString(stderr,
- &reader->input->buffer->content[reader->cur]);
-#endif
- fprintf(stderr, "\n");
- }
-}
-#endif
-
-/**
- * xmlTextReaderEntPush:
- * @reader: the xmlTextReaderPtr used
- * @value: the entity reference node
- *
- * Pushes a new entity reference node on top of the entities stack
- *
- * Returns 0 in case of error, the index in the stack otherwise
- */
-static int
-xmlTextReaderEntPush(xmlTextReaderPtr reader, xmlNodePtr value)
-{
- if (reader->entMax <= 0) {
- reader->entMax = 10;
- reader->entTab = (xmlNodePtr *) xmlMalloc(reader->entMax *
- sizeof(reader->entTab[0]));
- if (reader->entTab == NULL) {
- xmlGenericError(xmlGenericErrorContext, "xmlMalloc failed !\n");
- return (0);
- }
- }
- if (reader->entNr >= reader->entMax) {
- reader->entMax *= 2;
- reader->entTab =
- (xmlNodePtr *) xmlRealloc(reader->entTab,
- reader->entMax *
- sizeof(reader->entTab[0]));
- if (reader->entTab == NULL) {
- xmlGenericError(xmlGenericErrorContext, "xmlRealloc failed !\n");
- return (0);
- }
- }
- reader->entTab[reader->entNr] = value;
- reader->ent = value;
- return (reader->entNr++);
-}
-
-/**
- * xmlTextReaderEntPop:
- * @reader: the xmlTextReaderPtr used
- *
- * Pops the top element entity from the entities stack
- *
- * Returns the entity just removed
- */
-static xmlNodePtr
-xmlTextReaderEntPop(xmlTextReaderPtr reader)
-{
- xmlNodePtr ret;
-
- if (reader->entNr <= 0)
- return (NULL);
- reader->entNr--;
- if (reader->entNr > 0)
- reader->ent = reader->entTab[reader->entNr - 1];
- else
- reader->ent = NULL;
- ret = reader->entTab[reader->entNr];
- reader->entTab[reader->entNr] = NULL;
- return (ret);
-}
-
-/**
- * xmlTextReaderStartElement:
- * @ctx: the user data (XML parser context)
- * @fullname: The element name, including namespace prefix
- * @atts: An array of name/value attributes pairs, NULL terminated
- *
- * called when an opening tag has been processed.
- */
-static void
-xmlTextReaderStartElement(void *ctx, const xmlChar *fullname,
- const xmlChar **atts) {
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlTextReaderPtr reader = ctxt->_private;
-
-#ifdef DEBUG_CALLBACKS
- printf("xmlTextReaderStartElement(%s)\n", fullname);
-#endif
- if ((reader != NULL) && (reader->startElement != NULL)) {
- reader->startElement(ctx, fullname, atts);
- if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
- (ctxt->input->cur[1] == '>'))
- ctxt->node->extra = NODE_IS_EMPTY;
- }
- if (reader != NULL)
- reader->state = XML_TEXTREADER_ELEMENT;
-}
-
-/**
- * xmlTextReaderEndElement:
- * @ctx: the user data (XML parser context)
- * @fullname: The element name, including namespace prefix
- *
- * called when an ending tag has been processed.
- */
-static void
-xmlTextReaderEndElement(void *ctx, const xmlChar *fullname) {
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlTextReaderPtr reader = ctxt->_private;
-
-#ifdef DEBUG_CALLBACKS
- printf("xmlTextReaderEndElement(%s)\n", fullname);
-#endif
- if ((reader != NULL) && (reader->endElement != NULL)) {
- reader->endElement(ctx, fullname);
- }
-}
-
-/**
- * xmlTextReaderStartElementNs:
- * @ctx: the user data (XML parser context)
- * @localname: the local name of the element
- * @prefix: the element namespace prefix if available
- * @URI: the element namespace name if available
- * @nb_namespaces: number of namespace definitions on that node
- * @namespaces: pointer to the array of prefix/URI pairs namespace definitions
- * @nb_attributes: the number of attributes on that node
- * nb_defaulted: the number of defaulted attributes.
- * @attributes: pointer to the array of (localname/prefix/URI/value/end)
- * attribute values.
- *
- * called when an opening tag has been processed.
- */
-static void
-xmlTextReaderStartElementNs(void *ctx,
- const xmlChar *localname,
- const xmlChar *prefix,
- const xmlChar *URI,
- int nb_namespaces,
- const xmlChar **namespaces,
- int nb_attributes,
- int nb_defaulted,
- const xmlChar **attributes)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlTextReaderPtr reader = ctxt->_private;
-
-#ifdef DEBUG_CALLBACKS
- printf("xmlTextReaderStartElementNs(%s)\n", localname);
-#endif
- if ((reader != NULL) && (reader->startElementNs != NULL)) {
- reader->startElementNs(ctx, localname, prefix, URI, nb_namespaces,
- namespaces, nb_attributes, nb_defaulted,
- attributes);
- if ((ctxt->node != NULL) && (ctxt->input != NULL) &&
- (ctxt->input->cur != NULL) && (ctxt->input->cur[0] == '/') &&
- (ctxt->input->cur[1] == '>'))
- ctxt->node->extra = NODE_IS_EMPTY;
- }
- if (reader != NULL)
- reader->state = XML_TEXTREADER_ELEMENT;
-}
-
-/**
- * xmlTextReaderEndElementNs:
- * @ctx: the user data (XML parser context)
- * @localname: the local name of the element
- * @prefix: the element namespace prefix if available
- * @URI: the element namespace name if available
- *
- * called when an ending tag has been processed.
- */
-static void
-xmlTextReaderEndElementNs(void *ctx,
- const xmlChar * localname,
- const xmlChar * prefix,
- const xmlChar * URI)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlTextReaderPtr reader = ctxt->_private;
-
-#ifdef DEBUG_CALLBACKS
- printf("xmlTextReaderEndElementNs(%s)\n", localname);
-#endif
- if ((reader != NULL) && (reader->endElementNs != NULL)) {
- reader->endElementNs(ctx, localname, prefix, URI);
- }
-}
-
-
-/**
- * xmlTextReaderCharacters:
- * @ctx: the user data (XML parser context)
- * @ch: a xmlChar string
- * @len: the number of xmlChar
- *
- * receiving some chars from the parser.
- */
-static void
-xmlTextReaderCharacters(void *ctx, const xmlChar *ch, int len)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlTextReaderPtr reader = ctxt->_private;
-
-#ifdef DEBUG_CALLBACKS
- printf("xmlTextReaderCharacters()\n");
-#endif
- if ((reader != NULL) && (reader->characters != NULL)) {
- reader->characters(ctx, ch, len);
- }
-}
-
-/**
- * xmlTextReaderCDataBlock:
- * @ctx: the user data (XML parser context)
- * @value: The pcdata content
- * @len: the block length
- *
- * called when a pcdata block has been parsed
- */
-static void
-xmlTextReaderCDataBlock(void *ctx, const xmlChar *ch, int len)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlTextReaderPtr reader = ctxt->_private;
-
-#ifdef DEBUG_CALLBACKS
- printf("xmlTextReaderCDataBlock()\n");
-#endif
- if ((reader != NULL) && (reader->cdataBlock != NULL)) {
- reader->cdataBlock(ctx, ch, len);
- }
-}
-
-/**
- * xmlTextReaderPushData:
- * @reader: the xmlTextReaderPtr used
- *
- * Push data down the progressive parser until a significant callback
- * got raised.
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlTextReaderPushData(xmlTextReaderPtr reader) {
- xmlBufPtr inbuf;
- int val, s;
- xmlTextReaderState oldstate;
- int alloc;
-
- if ((reader->input == NULL) || (reader->input->buffer == NULL))
- return(-1);
-
- oldstate = reader->state;
- reader->state = XML_TEXTREADER_NONE;
- inbuf = reader->input->buffer;
- alloc = xmlBufGetAllocationScheme(inbuf);
-
- while (reader->state == XML_TEXTREADER_NONE) {
- if (xmlBufUse(inbuf) < reader->cur + CHUNK_SIZE) {
- /*
- * Refill the buffer unless we are at the end of the stream
- */
- if (reader->mode != XML_TEXTREADER_MODE_EOF) {
- val = xmlParserInputBufferRead(reader->input, 4096);
- if ((val == 0) &&
- (alloc == XML_BUFFER_ALLOC_IMMUTABLE)) {
- if (xmlBufUse(inbuf) == reader->cur) {
- reader->mode = XML_TEXTREADER_MODE_EOF;
- reader->state = oldstate;
- }
- } else if (val < 0) {
- reader->mode = XML_TEXTREADER_MODE_EOF;
- reader->state = oldstate;
- if ((oldstate != XML_TEXTREADER_START) ||
- (reader->ctxt->myDoc != NULL))
- return(val);
- } else if (val == 0) {
- /* mark the end of the stream and process the remains */
- reader->mode = XML_TEXTREADER_MODE_EOF;
- break;
- }
-
- } else
- break;
- }
- /*
- * parse by block of CHUNK_SIZE bytes, various tests show that
- * it's the best tradeoff at least on a 1.2GH Duron
- */
- if (xmlBufUse(inbuf) >= reader->cur + CHUNK_SIZE) {
- val = xmlParseChunk(reader->ctxt,
- (const char *) xmlBufContent(inbuf) + reader->cur,
- CHUNK_SIZE, 0);
- reader->cur += CHUNK_SIZE;
- if (val != 0)
- reader->ctxt->wellFormed = 0;
- if (reader->ctxt->wellFormed == 0)
- break;
- } else {
- s = xmlBufUse(inbuf) - reader->cur;
- val = xmlParseChunk(reader->ctxt,
- (const char *) xmlBufContent(inbuf) + reader->cur,
- s, 0);
- reader->cur += s;
- if (val != 0)
- reader->ctxt->wellFormed = 0;
- break;
- }
- }
-
- /*
- * Discard the consumed input when needed and possible
- */
- if (reader->mode == XML_TEXTREADER_MODE_INTERACTIVE) {
- if (alloc != XML_BUFFER_ALLOC_IMMUTABLE) {
- if ((reader->cur >= 4096) &&
- (xmlBufUse(inbuf) - reader->cur <= CHUNK_SIZE)) {
- val = xmlBufShrink(inbuf, reader->cur);
- if (val >= 0) {
- reader->cur -= val;
- }
- }
- }
- }
-
- /*
- * At the end of the stream signal that the work is done to the Push
- * parser.
- */
- else if (reader->mode == XML_TEXTREADER_MODE_EOF) {
- if (reader->state != XML_TEXTREADER_DONE) {
- s = xmlBufUse(inbuf) - reader->cur;
- val = xmlParseChunk(reader->ctxt,
- (const char *) xmlBufContent(inbuf) + reader->cur,
- s, 1);
- reader->cur = xmlBufUse(inbuf);
- reader->state = XML_TEXTREADER_DONE;
- if (val != 0) {
- if (reader->ctxt->wellFormed)
- reader->ctxt->wellFormed = 0;
- else
- return(-1);
- }
- }
- }
- reader->state = oldstate;
- if (reader->ctxt->wellFormed == 0) {
- reader->mode = XML_TEXTREADER_MODE_EOF;
- return(-1);
- }
-
- return(0);
-}
-
-#ifdef LIBXML_REGEXP_ENABLED
-/**
- * xmlTextReaderValidatePush:
- * @reader: the xmlTextReaderPtr used
- *
- * Push the current node for validation
- */
-static void
-xmlTextReaderValidatePush(xmlTextReaderPtr reader ATTRIBUTE_UNUSED) {
- xmlNodePtr node = reader->node;
-
-#ifdef LIBXML_VALID_ENABLED
- if ((reader->validate == XML_TEXTREADER_VALIDATE_DTD) &&
- (reader->ctxt != NULL) && (reader->ctxt->validate == 1)) {
- if ((node->ns == NULL) || (node->ns->prefix == NULL)) {
- reader->ctxt->valid &= xmlValidatePushElement(&reader->ctxt->vctxt,
- reader->ctxt->myDoc, node, node->name);
- } else {
- /* TODO use the BuildQName interface */
- xmlChar *qname;
-
- qname = xmlStrdup(node->ns->prefix);
- qname = xmlStrcat(qname, BAD_CAST ":");
- qname = xmlStrcat(qname, node->name);
- reader->ctxt->valid &= xmlValidatePushElement(&reader->ctxt->vctxt,
- reader->ctxt->myDoc, node, qname);
- if (qname != NULL)
- xmlFree(qname);
- }
- }
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_SCHEMAS_ENABLED
- if ((reader->validate == XML_TEXTREADER_VALIDATE_RNG) &&
- (reader->rngValidCtxt != NULL)) {
- int ret;
-
- if (reader->rngFullNode != NULL) return;
- ret = xmlRelaxNGValidatePushElement(reader->rngValidCtxt,
- reader->ctxt->myDoc,
- node);
- if (ret == 0) {
- /*
- * this element requires a full tree
- */
- node = xmlTextReaderExpand(reader);
- if (node == NULL) {
-printf("Expand failed !\n");
- ret = -1;
- } else {
- ret = xmlRelaxNGValidateFullElement(reader->rngValidCtxt,
- reader->ctxt->myDoc,
- node);
- reader->rngFullNode = node;
- }
- }
- if (ret != 1)
- reader->rngValidErrors++;
- }
-#endif
-}
-
-/**
- * xmlTextReaderValidateCData:
- * @reader: the xmlTextReaderPtr used
- * @data: pointer to the CData
- * @len: length of the CData block in bytes.
- *
- * Push some CData for validation
- */
-static void
-xmlTextReaderValidateCData(xmlTextReaderPtr reader,
- const xmlChar *data, int len) {
-#ifdef LIBXML_VALID_ENABLED
- if ((reader->validate == XML_TEXTREADER_VALIDATE_DTD) &&
- (reader->ctxt != NULL) && (reader->ctxt->validate == 1)) {
- reader->ctxt->valid &= xmlValidatePushCData(&reader->ctxt->vctxt,
- data, len);
- }
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_SCHEMAS_ENABLED
- if ((reader->validate == XML_TEXTREADER_VALIDATE_RNG) &&
- (reader->rngValidCtxt != NULL)) {
- int ret;
-
- if (reader->rngFullNode != NULL) return;
- ret = xmlRelaxNGValidatePushCData(reader->rngValidCtxt, data, len);
- if (ret != 1)
- reader->rngValidErrors++;
- }
-#endif
-}
-
-/**
- * xmlTextReaderValidatePop:
- * @reader: the xmlTextReaderPtr used
- *
- * Pop the current node from validation
- */
-static void
-xmlTextReaderValidatePop(xmlTextReaderPtr reader) {
- xmlNodePtr node = reader->node;
-
-#ifdef LIBXML_VALID_ENABLED
- if ((reader->validate == XML_TEXTREADER_VALIDATE_DTD) &&
- (reader->ctxt != NULL) && (reader->ctxt->validate == 1)) {
- if ((node->ns == NULL) || (node->ns->prefix == NULL)) {
- reader->ctxt->valid &= xmlValidatePopElement(&reader->ctxt->vctxt,
- reader->ctxt->myDoc, node, node->name);
- } else {
- /* TODO use the BuildQName interface */
- xmlChar *qname;
-
- qname = xmlStrdup(node->ns->prefix);
- qname = xmlStrcat(qname, BAD_CAST ":");
- qname = xmlStrcat(qname, node->name);
- reader->ctxt->valid &= xmlValidatePopElement(&reader->ctxt->vctxt,
- reader->ctxt->myDoc, node, qname);
- if (qname != NULL)
- xmlFree(qname);
- }
- }
-#endif /* LIBXML_VALID_ENABLED */
-#ifdef LIBXML_SCHEMAS_ENABLED
- if ((reader->validate == XML_TEXTREADER_VALIDATE_RNG) &&
- (reader->rngValidCtxt != NULL)) {
- int ret;
-
- if (reader->rngFullNode != NULL) {
- if (node == reader->rngFullNode)
- reader->rngFullNode = NULL;
- return;
- }
- ret = xmlRelaxNGValidatePopElement(reader->rngValidCtxt,
- reader->ctxt->myDoc,
- node);
- if (ret != 1)
- reader->rngValidErrors++;
- }
-#endif
-}
-
-/**
- * xmlTextReaderValidateEntity:
- * @reader: the xmlTextReaderPtr used
- *
- * Handle the validation when an entity reference is encountered and
- * entity substitution is not activated. As a result the parser interface
- * must walk through the entity and do the validation calls
- */
-static void
-xmlTextReaderValidateEntity(xmlTextReaderPtr reader) {
- xmlNodePtr oldnode = reader->node;
- xmlNodePtr node = reader->node;
- xmlParserCtxtPtr ctxt = reader->ctxt;
-
- do {
- if (node->type == XML_ENTITY_REF_NODE) {
- /*
- * Case where the underlying tree is not availble, lookup the entity
- * and walk it.
- */
- if ((node->children == NULL) && (ctxt->sax != NULL) &&
- (ctxt->sax->getEntity != NULL)) {
- node->children = (xmlNodePtr)
- ctxt->sax->getEntity(ctxt, node->name);
- }
-
- if ((node->children != NULL) &&
- (node->children->type == XML_ENTITY_DECL) &&
- (node->children->children != NULL)) {
- xmlTextReaderEntPush(reader, node);
- node = node->children->children;
- continue;
- } else {
- /*
- * The error has probably be raised already.
- */
- if (node == oldnode)
- break;
- node = node->next;
- }
-#ifdef LIBXML_REGEXP_ENABLED
- } else if (node->type == XML_ELEMENT_NODE) {
- reader->node = node;
- xmlTextReaderValidatePush(reader);
- } else if ((node->type == XML_TEXT_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)) {
- xmlTextReaderValidateCData(reader, node->content,
- xmlStrlen(node->content));
-#endif
- }
-
- /*
- * go to next node
- */
- if (node->children != NULL) {
- node = node->children;
- continue;
- } else if (node->type == XML_ELEMENT_NODE) {
- xmlTextReaderValidatePop(reader);
- }
- if (node->next != NULL) {
- node = node->next;
- continue;
- }
- do {
- node = node->parent;
- if (node->type == XML_ELEMENT_NODE) {
- xmlNodePtr tmp;
- if (reader->entNr == 0) {
- while ((tmp = node->last) != NULL) {
- if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
- xmlUnlinkNode(tmp);
- xmlTextReaderFreeNode(reader, tmp);
- } else
- break;
- }
- }
- reader->node = node;
- xmlTextReaderValidatePop(reader);
- }
- if ((node->type == XML_ENTITY_DECL) &&
- (reader->ent != NULL) && (reader->ent->children == node)) {
- node = xmlTextReaderEntPop(reader);
- }
- if (node == oldnode)
- break;
- if (node->next != NULL) {
- node = node->next;
- break;
- }
- } while ((node != NULL) && (node != oldnode));
- } while ((node != NULL) && (node != oldnode));
- reader->node = oldnode;
-}
-#endif /* LIBXML_REGEXP_ENABLED */
-
-
-/**
- * xmlTextReaderGetSuccessor:
- * @cur: the current node
- *
- * Get the successor of a node if available.
- *
- * Returns the successor node or NULL
- */
-static xmlNodePtr
-xmlTextReaderGetSuccessor(xmlNodePtr cur) {
- if (cur == NULL) return(NULL) ; /* ERROR */
- if (cur->next != NULL) return(cur->next) ;
- do {
- cur = cur->parent;
- if (cur == NULL) break;
- if (cur->next != NULL) return(cur->next);
- } while (cur != NULL);
- return(cur);
-}
-
-/**
- * xmlTextReaderDoExpand:
- * @reader: the xmlTextReaderPtr used
- *
- * Makes sure that the current node is fully read as well as all its
- * descendant. It means the full DOM subtree must be available at the
- * end of the call.
- *
- * Returns 1 if the node was expanded successfully, 0 if there is no more
- * nodes to read, or -1 in case of error
- */
-static int
-xmlTextReaderDoExpand(xmlTextReaderPtr reader) {
- int val;
-
- if ((reader == NULL) || (reader->node == NULL) || (reader->ctxt == NULL))
- return(-1);
- do {
- if (reader->ctxt->instate == XML_PARSER_EOF) return(1);
-
- if (xmlTextReaderGetSuccessor(reader->node) != NULL)
- return(1);
- if (reader->ctxt->nodeNr < reader->depth)
- return(1);
- if (reader->mode == XML_TEXTREADER_MODE_EOF)
- return(1);
- val = xmlTextReaderPushData(reader);
- if (val < 0){
- reader->mode = XML_TEXTREADER_MODE_ERROR;
- return(-1);
- }
- } while(reader->mode != XML_TEXTREADER_MODE_EOF);
- return(1);
-}
-
-/**
- * xmlTextReaderCollectSiblings:
- * @node: the first child
- *
- * Traverse depth-first through all sibling nodes and their children
- * nodes and concatenate their content. This is an auxiliary function
- * to xmlTextReaderReadString.
- *
- * Returns a string containing the content, or NULL in case of error.
- */
-static xmlChar *
-xmlTextReaderCollectSiblings(xmlNodePtr node)
-{
- xmlBufferPtr buffer;
- xmlChar *ret;
-
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
- return(NULL);
-
- buffer = xmlBufferCreate();
- if (buffer == NULL)
- return NULL;
-
- for ( ; node != NULL; node = node->next) {
- switch (node->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- xmlBufferCat(buffer, node->content);
- break;
- case XML_ELEMENT_NODE: {
- xmlChar *tmp;
-
- tmp = xmlTextReaderCollectSiblings(node->children);
- xmlBufferCat(buffer, tmp);
- xmlFree(tmp);
- break;
- }
- default:
- break;
- }
- }
- ret = buffer->content;
- buffer->content = NULL;
- xmlBufferFree(buffer);
- return(ret);
-}
-
-/**
- * xmlTextReaderRead:
- * @reader: the xmlTextReaderPtr used
- *
- * Moves the position of the current instance to the next node in
- * the stream, exposing its properties.
- *
- * Returns 1 if the node was read successfully, 0 if there is no more
- * nodes to read, or -1 in case of error
- */
-int
-xmlTextReaderRead(xmlTextReaderPtr reader) {
- int val, olddepth = 0;
- xmlTextReaderState oldstate = XML_TEXTREADER_START;
- xmlNodePtr oldnode = NULL;
-
-
- if (reader == NULL)
- return(-1);
- reader->curnode = NULL;
- if (reader->doc != NULL)
- return(xmlTextReaderReadTree(reader));
- if (reader->ctxt == NULL)
- return(-1);
-
-#ifdef DEBUG_READER
- fprintf(stderr, "\nREAD ");
- DUMP_READER
-#endif
- if (reader->mode == XML_TEXTREADER_MODE_INITIAL) {
- reader->mode = XML_TEXTREADER_MODE_INTERACTIVE;
- /*
- * Initial state
- */
- do {
- val = xmlTextReaderPushData(reader);
- if (val < 0){
- reader->mode = XML_TEXTREADER_MODE_ERROR;
- reader->state = XML_TEXTREADER_ERROR;
- return(-1);
- }
- } while ((reader->ctxt->node == NULL) &&
- ((reader->mode != XML_TEXTREADER_MODE_EOF) &&
- (reader->state != XML_TEXTREADER_DONE)));
- if (reader->ctxt->node == NULL) {
- if (reader->ctxt->myDoc != NULL) {
- reader->node = reader->ctxt->myDoc->children;
- }
- if (reader->node == NULL){
- reader->mode = XML_TEXTREADER_MODE_ERROR;
- reader->state = XML_TEXTREADER_ERROR;
- return(-1);
- }
- reader->state = XML_TEXTREADER_ELEMENT;
- } else {
- if (reader->ctxt->myDoc != NULL) {
- reader->node = reader->ctxt->myDoc->children;
- }
- if (reader->node == NULL)
- reader->node = reader->ctxt->nodeTab[0];
- reader->state = XML_TEXTREADER_ELEMENT;
- }
- reader->depth = 0;
- reader->ctxt->parseMode = XML_PARSE_READER;
- goto node_found;
- }
- oldstate = reader->state;
- olddepth = reader->ctxt->nodeNr;
- oldnode = reader->node;
-
-get_next_node:
- if (reader->node == NULL) {
- if (reader->mode == XML_TEXTREADER_MODE_EOF)
- return(0);
- else
- return(-1);
- }
-
- /*
- * If we are not backtracking on ancestors or examined nodes,
- * that the parser didn't finished or that we arent at the end
- * of stream, continue processing.
- */
- while ((reader->node != NULL) && (reader->node->next == NULL) &&
- (reader->ctxt->nodeNr == olddepth) &&
- ((oldstate == XML_TEXTREADER_BACKTRACK) ||
- (reader->node->children == NULL) ||
- (reader->node->type == XML_ENTITY_REF_NODE) ||
- ((reader->node->children != NULL) &&
- (reader->node->children->type == XML_TEXT_NODE) &&
- (reader->node->children->next == NULL)) ||
- (reader->node->type == XML_DTD_NODE) ||
- (reader->node->type == XML_DOCUMENT_NODE) ||
- (reader->node->type == XML_HTML_DOCUMENT_NODE)) &&
- ((reader->ctxt->node == NULL) ||
- (reader->ctxt->node == reader->node) ||
- (reader->ctxt->node == reader->node->parent)) &&
- (reader->ctxt->instate != XML_PARSER_EOF)) {
- val = xmlTextReaderPushData(reader);
- if (val < 0){
- reader->mode = XML_TEXTREADER_MODE_ERROR;
- reader->state = XML_TEXTREADER_ERROR;
- return(-1);
- }
- if (reader->node == NULL)
- goto node_end;
- }
- if (oldstate != XML_TEXTREADER_BACKTRACK) {
- if ((reader->node->children != NULL) &&
- (reader->node->type != XML_ENTITY_REF_NODE) &&
- (reader->node->type != XML_XINCLUDE_START) &&
- (reader->node->type != XML_DTD_NODE)) {
- reader->node = reader->node->children;
- reader->depth++;
- reader->state = XML_TEXTREADER_ELEMENT;
- goto node_found;
- }
- }
- if (reader->node->next != NULL) {
- if ((oldstate == XML_TEXTREADER_ELEMENT) &&
- (reader->node->type == XML_ELEMENT_NODE) &&
- (reader->node->children == NULL) &&
- ((reader->node->extra & NODE_IS_EMPTY) == 0)
-#ifdef LIBXML_XINCLUDE_ENABLED
- && (reader->in_xinclude <= 0)
-#endif
- ) {
- reader->state = XML_TEXTREADER_END;
- goto node_found;
- }
-#ifdef LIBXML_REGEXP_ENABLED
- if ((reader->validate) &&
- (reader->node->type == XML_ELEMENT_NODE))
- xmlTextReaderValidatePop(reader);
-#endif /* LIBXML_REGEXP_ENABLED */
- if ((reader->preserves > 0) &&
- (reader->node->extra & NODE_IS_SPRESERVED))
- reader->preserves--;
- reader->node = reader->node->next;
- reader->state = XML_TEXTREADER_ELEMENT;
-
- /*
- * Cleanup of the old node
- */
- if ((reader->preserves == 0) &&
-#ifdef LIBXML_XINCLUDE_ENABLED
- (reader->in_xinclude == 0) &&
-#endif
- (reader->entNr == 0) &&
- (reader->node->prev != NULL) &&
- (reader->node->prev->type != XML_DTD_NODE)) {
- xmlNodePtr tmp = reader->node->prev;
- if ((tmp->extra & NODE_IS_PRESERVED) == 0) {
- xmlUnlinkNode(tmp);
- xmlTextReaderFreeNode(reader, tmp);
- }
- }
-
- goto node_found;
- }
- if ((oldstate == XML_TEXTREADER_ELEMENT) &&
- (reader->node->type == XML_ELEMENT_NODE) &&
- (reader->node->children == NULL) &&
- ((reader->node->extra & NODE_IS_EMPTY) == 0)) {;
- reader->state = XML_TEXTREADER_END;
- goto node_found;
- }
-#ifdef LIBXML_REGEXP_ENABLED
- if ((reader->validate != XML_TEXTREADER_NOT_VALIDATE) && (reader->node->type == XML_ELEMENT_NODE))
- xmlTextReaderValidatePop(reader);
-#endif /* LIBXML_REGEXP_ENABLED */
- if ((reader->preserves > 0) &&
- (reader->node->extra & NODE_IS_SPRESERVED))
- reader->preserves--;
- reader->node = reader->node->parent;
- if ((reader->node == NULL) ||
- (reader->node->type == XML_DOCUMENT_NODE) ||
-#ifdef LIBXML_DOCB_ENABLED
- (reader->node->type == XML_DOCB_DOCUMENT_NODE) ||
-#endif
- (reader->node->type == XML_HTML_DOCUMENT_NODE)) {
- if (reader->mode != XML_TEXTREADER_MODE_EOF) {
- val = xmlParseChunk(reader->ctxt, "", 0, 1);
- reader->state = XML_TEXTREADER_DONE;
- if (val != 0)
- return(-1);
- }
- reader->node = NULL;
- reader->depth = -1;
-
- /*
- * Cleanup of the old node
- */
- if ((oldnode != NULL) && (reader->preserves == 0) &&
-#ifdef LIBXML_XINCLUDE_ENABLED
- (reader->in_xinclude == 0) &&
-#endif
- (reader->entNr == 0) &&
- (oldnode->type != XML_DTD_NODE) &&
- ((oldnode->extra & NODE_IS_PRESERVED) == 0)) {
- xmlUnlinkNode(oldnode);
- xmlTextReaderFreeNode(reader, oldnode);
- }
-
- goto node_end;
- }
- if ((reader->preserves == 0) &&
-#ifdef LIBXML_XINCLUDE_ENABLED
- (reader->in_xinclude == 0) &&
-#endif
- (reader->entNr == 0) &&
- (reader->node->last != NULL) &&
- ((reader->node->last->extra & NODE_IS_PRESERVED) == 0)) {
- xmlNodePtr tmp = reader->node->last;
- xmlUnlinkNode(tmp);
- xmlTextReaderFreeNode(reader, tmp);
- }
- reader->depth--;
- reader->state = XML_TEXTREADER_BACKTRACK;
-
-node_found:
- DUMP_READER
-
- /*
- * If we are in the middle of a piece of CDATA make sure it's finished
- */
- if ((reader->node != NULL) &&
- (reader->node->next == NULL) &&
- ((reader->node->type == XML_TEXT_NODE) ||
- (reader->node->type == XML_CDATA_SECTION_NODE))) {
- if (xmlTextReaderExpand(reader) == NULL)
- return -1;
- }
-
-#ifdef LIBXML_XINCLUDE_ENABLED
- /*
- * Handle XInclude if asked for
- */
- if ((reader->xinclude) && (reader->node != NULL) &&
- (reader->node->type == XML_ELEMENT_NODE) &&
- (reader->node->ns != NULL) &&
- ((xmlStrEqual(reader->node->ns->href, XINCLUDE_NS)) ||
- (xmlStrEqual(reader->node->ns->href, XINCLUDE_OLD_NS)))) {
- if (reader->xincctxt == NULL) {
- reader->xincctxt = xmlXIncludeNewContext(reader->ctxt->myDoc);
- xmlXIncludeSetFlags(reader->xincctxt,
- reader->parserFlags & (~XML_PARSE_NOXINCNODE));
- }
- /*
- * expand that node and process it
- */
- if (xmlTextReaderExpand(reader) == NULL)
- return -1;
- xmlXIncludeProcessNode(reader->xincctxt, reader->node);
- }
- if ((reader->node != NULL) && (reader->node->type == XML_XINCLUDE_START)) {
- reader->in_xinclude++;
- goto get_next_node;
- }
- if ((reader->node != NULL) && (reader->node->type == XML_XINCLUDE_END)) {
- reader->in_xinclude--;
- goto get_next_node;
- }
-#endif
- /*
- * Handle entities enter and exit when in entity replacement mode
- */
- if ((reader->node != NULL) &&
- (reader->node->type == XML_ENTITY_REF_NODE) &&
- (reader->ctxt != NULL) && (reader->ctxt->replaceEntities == 1)) {
- /*
- * Case where the underlying tree is not availble, lookup the entity
- * and walk it.
- */
- if ((reader->node->children == NULL) && (reader->ctxt->sax != NULL) &&
- (reader->ctxt->sax->getEntity != NULL)) {
- reader->node->children = (xmlNodePtr)
- reader->ctxt->sax->getEntity(reader->ctxt, reader->node->name);
- }
-
- if ((reader->node->children != NULL) &&
- (reader->node->children->type == XML_ENTITY_DECL) &&
- (reader->node->children->children != NULL)) {
- xmlTextReaderEntPush(reader, reader->node);
- reader->node = reader->node->children->children;
- }
-#ifdef LIBXML_REGEXP_ENABLED
- } else if ((reader->node != NULL) &&
- (reader->node->type == XML_ENTITY_REF_NODE) &&
- (reader->ctxt != NULL) && (reader->validate)) {
- xmlTextReaderValidateEntity(reader);
-#endif /* LIBXML_REGEXP_ENABLED */
- }
- if ((reader->node != NULL) &&
- (reader->node->type == XML_ENTITY_DECL) &&
- (reader->ent != NULL) && (reader->ent->children == reader->node)) {
- reader->node = xmlTextReaderEntPop(reader);
- reader->depth++;
- goto get_next_node;
- }
-#ifdef LIBXML_REGEXP_ENABLED
- if ((reader->validate != XML_TEXTREADER_NOT_VALIDATE) && (reader->node != NULL)) {
- xmlNodePtr node = reader->node;
-
- if ((node->type == XML_ELEMENT_NODE) &&
- ((reader->state != XML_TEXTREADER_END) &&
- (reader->state != XML_TEXTREADER_BACKTRACK))) {
- xmlTextReaderValidatePush(reader);
- } else if ((node->type == XML_TEXT_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)) {
- xmlTextReaderValidateCData(reader, node->content,
- xmlStrlen(node->content));
- }
- }
-#endif /* LIBXML_REGEXP_ENABLED */
-#ifdef LIBXML_PATTERN_ENABLED
- if ((reader->patternNr > 0) && (reader->state != XML_TEXTREADER_END) &&
- (reader->state != XML_TEXTREADER_BACKTRACK)) {
- int i;
- for (i = 0;i < reader->patternNr;i++) {
- if (xmlPatternMatch(reader->patternTab[i], reader->node) == 1) {
- xmlTextReaderPreserve(reader);
- break;
- }
- }
- }
-#endif /* LIBXML_PATTERN_ENABLED */
-#ifdef LIBXML_SCHEMAS_ENABLED
- if ((reader->validate == XML_TEXTREADER_VALIDATE_XSD) &&
- (reader->xsdValidErrors == 0) &&
- (reader->xsdValidCtxt != NULL)) {
- reader->xsdValidErrors = !xmlSchemaIsValid(reader->xsdValidCtxt);
- }
-#endif /* LIBXML_PATTERN_ENABLED */
- return(1);
-node_end:
- reader->state = XML_TEXTREADER_DONE;
- return(0);
-}
-
-/**
- * xmlTextReaderReadState:
- * @reader: the xmlTextReaderPtr used
- *
- * Gets the read state of the reader.
- *
- * Returns the state value, or -1 in case of error
- */
-int
-xmlTextReaderReadState(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- return(reader->mode);
-}
-
-/**
- * xmlTextReaderExpand:
- * @reader: the xmlTextReaderPtr used
- *
- * Reads the contents of the current node and the full subtree. It then makes
- * the subtree available until the next xmlTextReaderRead() call
- *
- * Returns a node pointer valid until the next xmlTextReaderRead() call
- * or NULL in case of error.
- */
-xmlNodePtr
-xmlTextReaderExpand(xmlTextReaderPtr reader) {
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->doc != NULL)
- return(reader->node);
- if (reader->ctxt == NULL)
- return(NULL);
- if (xmlTextReaderDoExpand(reader) < 0)
- return(NULL);
- return(reader->node);
-}
-
-/**
- * xmlTextReaderNext:
- * @reader: the xmlTextReaderPtr used
- *
- * Skip to the node following the current one in document order while
- * avoiding the subtree if any.
- *
- * Returns 1 if the node was read successfully, 0 if there is no more
- * nodes to read, or -1 in case of error
- */
-int
-xmlTextReaderNext(xmlTextReaderPtr reader) {
- int ret;
- xmlNodePtr cur;
-
- if (reader == NULL)
- return(-1);
- if (reader->doc != NULL)
- return(xmlTextReaderNextTree(reader));
- cur = reader->node;
- if ((cur == NULL) || (cur->type != XML_ELEMENT_NODE))
- return(xmlTextReaderRead(reader));
- if (reader->state == XML_TEXTREADER_END || reader->state == XML_TEXTREADER_BACKTRACK)
- return(xmlTextReaderRead(reader));
- if (cur->extra & NODE_IS_EMPTY)
- return(xmlTextReaderRead(reader));
- do {
- ret = xmlTextReaderRead(reader);
- if (ret != 1)
- return(ret);
- } while (reader->node != cur);
- return(xmlTextReaderRead(reader));
-}
-
-#ifdef LIBXML_WRITER_ENABLED
-/**
- * xmlTextReaderReadInnerXml:
- * @reader: the xmlTextReaderPtr used
- *
- * Reads the contents of the current node, including child nodes and markup.
- *
- * Returns a string containing the XML content, or NULL if the current node
- * is neither an element nor attribute, or has no child nodes. The
- * string must be deallocated by the caller.
- */
-xmlChar *
-xmlTextReaderReadInnerXml(xmlTextReaderPtr reader ATTRIBUTE_UNUSED)
-{
- xmlChar *resbuf;
- xmlNodePtr node, cur_node;
- xmlBufferPtr buff, buff2;
- xmlDocPtr doc;
-
- if (xmlTextReaderExpand(reader) == NULL) {
- return NULL;
- }
- doc = reader->doc;
- buff = xmlBufferCreate();
- for (cur_node = reader->node->children; cur_node != NULL;
- cur_node = cur_node->next) {
- node = xmlDocCopyNode(cur_node, doc, 1);
- buff2 = xmlBufferCreate();
- if (xmlNodeDump(buff2, doc, node, 0, 0) == -1) {
- xmlFreeNode(node);
- xmlBufferFree(buff2);
- xmlBufferFree(buff);
- return NULL;
- }
- xmlBufferCat(buff, buff2->content);
- xmlFreeNode(node);
- xmlBufferFree(buff2);
- }
- resbuf = buff->content;
- buff->content = NULL;
-
- xmlBufferFree(buff);
- return resbuf;
-}
-#endif
-
-#ifdef LIBXML_WRITER_ENABLED
-/**
- * xmlTextReaderReadOuterXml:
- * @reader: the xmlTextReaderPtr used
- *
- * Reads the contents of the current node, including child nodes and markup.
- *
- * Returns a string containing the node and any XML content, or NULL if the
- * current node cannot be serialized. The string must be deallocated
- * by the caller.
- */
-xmlChar *
-xmlTextReaderReadOuterXml(xmlTextReaderPtr reader ATTRIBUTE_UNUSED)
-{
- xmlChar *resbuf;
- xmlNodePtr node;
- xmlBufferPtr buff;
- xmlDocPtr doc;
-
- node = reader->node;
- doc = reader->doc;
- if (xmlTextReaderExpand(reader) == NULL) {
- return NULL;
- }
- if (node->type == XML_DTD_NODE) {
- node = (xmlNodePtr) xmlCopyDtd((xmlDtdPtr) node);
- } else {
- node = xmlDocCopyNode(node, doc, 1);
- }
- buff = xmlBufferCreate();
- if (xmlNodeDump(buff, doc, node, 0, 0) == -1) {
- xmlFreeNode(node);
- xmlBufferFree(buff);
- return NULL;
- }
-
- resbuf = buff->content;
- buff->content = NULL;
-
- xmlFreeNode(node);
- xmlBufferFree(buff);
- return resbuf;
-}
-#endif
-
-/**
- * xmlTextReaderReadString:
- * @reader: the xmlTextReaderPtr used
- *
- * Reads the contents of an element or a text node as a string.
- *
- * Returns a string containing the contents of the Element or Text node,
- * or NULL if the reader is positioned on any other type of node.
- * The string must be deallocated by the caller.
- */
-xmlChar *
-xmlTextReaderReadString(xmlTextReaderPtr reader)
-{
- xmlNodePtr node;
-
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
-
- node = (reader->curnode != NULL) ? reader->curnode : reader->node;
- switch (node->type) {
- case XML_TEXT_NODE:
- if (node->content != NULL)
- return(xmlStrdup(node->content));
- break;
- case XML_ELEMENT_NODE:
- if (xmlTextReaderDoExpand(reader) != -1) {
- return xmlTextReaderCollectSiblings(node->children);
- }
- break;
- case XML_ATTRIBUTE_NODE:
- TODO
- break;
- default:
- break;
- }
- return(NULL);
-}
-
-#if 0
-/**
- * xmlTextReaderReadBase64:
- * @reader: the xmlTextReaderPtr used
- * @array: a byte array to store the content.
- * @offset: the zero-based index into array where the method should
- * begin to write.
- * @len: the number of bytes to write.
- *
- * Reads and decodes the Base64 encoded contents of an element and
- * stores the result in a byte buffer.
- *
- * Returns the number of bytes written to array, or zero if the current
- * instance is not positioned on an element or -1 in case of error.
- */
-int
-xmlTextReaderReadBase64(xmlTextReaderPtr reader,
- unsigned char *array ATTRIBUTE_UNUSED,
- int offset ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED) {
- if ((reader == NULL) || (reader->ctxt == NULL))
- return(-1);
- if (reader->ctxt->wellFormed != 1)
- return(-1);
-
- if ((reader->node == NULL) || (reader->node->type == XML_ELEMENT_NODE))
- return(0);
- TODO
- return(0);
-}
-
-/**
- * xmlTextReaderReadBinHex:
- * @reader: the xmlTextReaderPtr used
- * @array: a byte array to store the content.
- * @offset: the zero-based index into array where the method should
- * begin to write.
- * @len: the number of bytes to write.
- *
- * Reads and decodes the BinHex encoded contents of an element and
- * stores the result in a byte buffer.
- *
- * Returns the number of bytes written to array, or zero if the current
- * instance is not positioned on an element or -1 in case of error.
- */
-int
-xmlTextReaderReadBinHex(xmlTextReaderPtr reader,
- unsigned char *array ATTRIBUTE_UNUSED,
- int offset ATTRIBUTE_UNUSED,
- int len ATTRIBUTE_UNUSED) {
- if ((reader == NULL) || (reader->ctxt == NULL))
- return(-1);
- if (reader->ctxt->wellFormed != 1)
- return(-1);
-
- if ((reader->node == NULL) || (reader->node->type == XML_ELEMENT_NODE))
- return(0);
- TODO
- return(0);
-}
-#endif
-
-/************************************************************************
- * *
- * Operating on a preparsed tree *
- * *
- ************************************************************************/
-static int
-xmlTextReaderNextTree(xmlTextReaderPtr reader)
-{
- if (reader == NULL)
- return(-1);
-
- if (reader->state == XML_TEXTREADER_END)
- return(0);
-
- if (reader->node == NULL) {
- if (reader->doc->children == NULL) {
- reader->state = XML_TEXTREADER_END;
- return(0);
- }
-
- reader->node = reader->doc->children;
- reader->state = XML_TEXTREADER_START;
- return(1);
- }
-
- if (reader->state != XML_TEXTREADER_BACKTRACK) {
- /* Here removed traversal to child, because we want to skip the subtree,
- replace with traversal to sibling to skip subtree */
- if (reader->node->next != 0) {
- /* Move to sibling if present,skipping sub-tree */
- reader->node = reader->node->next;
- reader->state = XML_TEXTREADER_START;
- return(1);
- }
-
- /* if reader->node->next is NULL mean no subtree for current node,
- so need to move to sibling of parent node if present */
- if ((reader->node->type == XML_ELEMENT_NODE) ||
- (reader->node->type == XML_ATTRIBUTE_NODE)) {
- reader->state = XML_TEXTREADER_BACKTRACK;
- /* This will move to parent if present */
- xmlTextReaderRead(reader);
- }
- }
-
- if (reader->node->next != 0) {
- reader->node = reader->node->next;
- reader->state = XML_TEXTREADER_START;
- return(1);
- }
-
- if (reader->node->parent != 0) {
- if (reader->node->parent->type == XML_DOCUMENT_NODE) {
- reader->state = XML_TEXTREADER_END;
- return(0);
- }
-
- reader->node = reader->node->parent;
- reader->depth--;
- reader->state = XML_TEXTREADER_BACKTRACK;
- /* Repeat process to move to sibling of parent node if present */
- xmlTextReaderNextTree(reader);
- }
-
- reader->state = XML_TEXTREADER_END;
-
- return(1);
-}
-
-/**
- * xmlTextReaderReadTree:
- * @reader: the xmlTextReaderPtr used
- *
- * Moves the position of the current instance to the next node in
- * the stream, exposing its properties.
- *
- * Returns 1 if the node was read successfully, 0 if there is no more
- * nodes to read, or -1 in case of error
- */
-static int
-xmlTextReaderReadTree(xmlTextReaderPtr reader) {
- if (reader->state == XML_TEXTREADER_END)
- return(0);
-
-next_node:
- if (reader->node == NULL) {
- if (reader->doc->children == NULL) {
- reader->state = XML_TEXTREADER_END;
- return(0);
- }
-
- reader->node = reader->doc->children;
- reader->state = XML_TEXTREADER_START;
- goto found_node;
- }
-
- if ((reader->state != XML_TEXTREADER_BACKTRACK) &&
- (reader->node->type != XML_DTD_NODE) &&
- (reader->node->type != XML_XINCLUDE_START) &&
- (reader->node->type != XML_ENTITY_REF_NODE)) {
- if (reader->node->children != NULL) {
- reader->node = reader->node->children;
- reader->depth++;
- reader->state = XML_TEXTREADER_START;
- goto found_node;
- }
-
- if (reader->node->type == XML_ATTRIBUTE_NODE) {
- reader->state = XML_TEXTREADER_BACKTRACK;
- goto found_node;
- }
- }
-
- if (reader->node->next != NULL) {
- reader->node = reader->node->next;
- reader->state = XML_TEXTREADER_START;
- goto found_node;
- }
-
- if (reader->node->parent != NULL) {
- if ((reader->node->parent->type == XML_DOCUMENT_NODE) ||
- (reader->node->parent->type == XML_HTML_DOCUMENT_NODE)) {
- reader->state = XML_TEXTREADER_END;
- return(0);
- }
-
- reader->node = reader->node->parent;
- reader->depth--;
- reader->state = XML_TEXTREADER_BACKTRACK;
- goto found_node;
- }
-
- reader->state = XML_TEXTREADER_END;
-
-found_node:
- if ((reader->node->type == XML_XINCLUDE_START) ||
- (reader->node->type == XML_XINCLUDE_END))
- goto next_node;
-
- return(1);
-}
-
-/**
- * xmlTextReaderNextSibling:
- * @reader: the xmlTextReaderPtr used
- *
- * Skip to the node following the current one in document order while
- * avoiding the subtree if any.
- * Currently implemented only for Readers built on a document
- *
- * Returns 1 if the node was read successfully, 0 if there is no more
- * nodes to read, or -1 in case of error
- */
-int
-xmlTextReaderNextSibling(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- if (reader->doc == NULL) {
- /* TODO */
- return(-1);
- }
-
- if (reader->state == XML_TEXTREADER_END)
- return(0);
-
- if (reader->node == NULL)
- return(xmlTextReaderNextTree(reader));
-
- if (reader->node->next != NULL) {
- reader->node = reader->node->next;
- reader->state = XML_TEXTREADER_START;
- return(1);
- }
-
- return(0);
-}
-
-/************************************************************************
- * *
- * Constructor and destructors *
- * *
- ************************************************************************/
-/**
- * xmlNewTextReader:
- * @input: the xmlParserInputBufferPtr used to read data
- * @URI: the URI information for the source if available
- *
- * Create an xmlTextReader structure fed with @input
- *
- * Returns the new xmlTextReaderPtr or NULL in case of error
- */
-xmlTextReaderPtr
-xmlNewTextReader(xmlParserInputBufferPtr input, const char *URI) {
- xmlTextReaderPtr ret;
-
- if (input == NULL)
- return(NULL);
- ret = xmlMalloc(sizeof(xmlTextReader));
- if (ret == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewTextReader : malloc failed\n");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlTextReader));
- ret->doc = NULL;
- ret->entTab = NULL;
- ret->entMax = 0;
- ret->entNr = 0;
- ret->input = input;
- ret->buffer = xmlBufCreateSize(100);
- if (ret->buffer == NULL) {
- xmlFree(ret);
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewTextReader : malloc failed\n");
- return(NULL);
- }
- /* no operation on a reader should require a huge buffer */
- xmlBufSetAllocationScheme(ret->buffer,
- XML_BUFFER_ALLOC_BOUNDED);
- ret->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
- if (ret->sax == NULL) {
- xmlBufFree(ret->buffer);
- xmlFree(ret);
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewTextReader : malloc failed\n");
- return(NULL);
- }
- xmlSAXVersion(ret->sax, 2);
- ret->startElement = ret->sax->startElement;
- ret->sax->startElement = xmlTextReaderStartElement;
- ret->endElement = ret->sax->endElement;
- ret->sax->endElement = xmlTextReaderEndElement;
-#ifdef LIBXML_SAX1_ENABLED
- if (ret->sax->initialized == XML_SAX2_MAGIC) {
-#endif /* LIBXML_SAX1_ENABLED */
- ret->startElementNs = ret->sax->startElementNs;
- ret->sax->startElementNs = xmlTextReaderStartElementNs;
- ret->endElementNs = ret->sax->endElementNs;
- ret->sax->endElementNs = xmlTextReaderEndElementNs;
-#ifdef LIBXML_SAX1_ENABLED
- } else {
- ret->startElementNs = NULL;
- ret->endElementNs = NULL;
- }
-#endif /* LIBXML_SAX1_ENABLED */
- ret->characters = ret->sax->characters;
- ret->sax->characters = xmlTextReaderCharacters;
- ret->sax->ignorableWhitespace = xmlTextReaderCharacters;
- ret->cdataBlock = ret->sax->cdataBlock;
- ret->sax->cdataBlock = xmlTextReaderCDataBlock;
-
- ret->mode = XML_TEXTREADER_MODE_INITIAL;
- ret->node = NULL;
- ret->curnode = NULL;
- if (xmlBufUse(ret->input->buffer) < 4) {
- xmlParserInputBufferRead(input, 4);
- }
- if (xmlBufUse(ret->input->buffer) >= 4) {
- ret->ctxt = xmlCreatePushParserCtxt(ret->sax, NULL,
- (const char *) xmlBufContent(ret->input->buffer),
- 4, URI);
- ret->base = 0;
- ret->cur = 4;
- } else {
- ret->ctxt = xmlCreatePushParserCtxt(ret->sax, NULL, NULL, 0, URI);
- ret->base = 0;
- ret->cur = 0;
- }
-
- if (ret->ctxt == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewTextReader : malloc failed\n");
- xmlBufFree(ret->buffer);
- xmlFree(ret->sax);
- xmlFree(ret);
- return(NULL);
- }
- ret->ctxt->parseMode = XML_PARSE_READER;
- ret->ctxt->_private = ret;
- ret->ctxt->linenumbers = 1;
- ret->ctxt->dictNames = 1;
- ret->allocs = XML_TEXTREADER_CTXT;
- /*
- * use the parser dictionary to allocate all elements and attributes names
- */
- ret->ctxt->docdict = 1;
- ret->dict = ret->ctxt->dict;
-#ifdef LIBXML_XINCLUDE_ENABLED
- ret->xinclude = 0;
-#endif
-#ifdef LIBXML_PATTERN_ENABLED
- ret->patternMax = 0;
- ret->patternTab = NULL;
-#endif
- return(ret);
-}
-
-/**
- * xmlNewTextReaderFilename:
- * @URI: the URI of the resource to process
- *
- * Create an xmlTextReader structure fed with the resource at @URI
- *
- * Returns the new xmlTextReaderPtr or NULL in case of error
- */
-xmlTextReaderPtr
-xmlNewTextReaderFilename(const char *URI) {
- xmlParserInputBufferPtr input;
- xmlTextReaderPtr ret;
- char *directory = NULL;
-
- input = xmlParserInputBufferCreateFilename(URI, XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return(NULL);
- ret = xmlNewTextReader(input, URI);
- if (ret == NULL) {
- xmlFreeParserInputBuffer(input);
- return(NULL);
- }
- ret->allocs |= XML_TEXTREADER_INPUT;
- if (ret->ctxt->directory == NULL)
- directory = xmlParserGetDirectory(URI);
- if ((ret->ctxt->directory == NULL) && (directory != NULL))
- ret->ctxt->directory = (char *) xmlStrdup((xmlChar *) directory);
- if (directory != NULL)
- xmlFree(directory);
- return(ret);
-}
-
-/**
- * xmlFreeTextReader:
- * @reader: the xmlTextReaderPtr
- *
- * Deallocate all the resources associated to the reader
- */
-void
-xmlFreeTextReader(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return;
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (reader->rngSchemas != NULL) {
- xmlRelaxNGFree(reader->rngSchemas);
- reader->rngSchemas = NULL;
- }
- if (reader->rngValidCtxt != NULL) {
- if (! reader->rngPreserveCtxt)
- xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
- reader->rngValidCtxt = NULL;
- }
- if (reader->xsdPlug != NULL) {
- xmlSchemaSAXUnplug(reader->xsdPlug);
- reader->xsdPlug = NULL;
- }
- if (reader->xsdValidCtxt != NULL) {
- if (! reader->xsdPreserveCtxt)
- xmlSchemaFreeValidCtxt(reader->xsdValidCtxt);
- reader->xsdValidCtxt = NULL;
- }
- if (reader->xsdSchemas != NULL) {
- xmlSchemaFree(reader->xsdSchemas);
- reader->xsdSchemas = NULL;
- }
-#endif
-#ifdef LIBXML_XINCLUDE_ENABLED
- if (reader->xincctxt != NULL)
- xmlXIncludeFreeContext(reader->xincctxt);
-#endif
-#ifdef LIBXML_PATTERN_ENABLED
- if (reader->patternTab != NULL) {
- int i;
- for (i = 0;i < reader->patternNr;i++) {
- if (reader->patternTab[i] != NULL)
- xmlFreePattern(reader->patternTab[i]);
- }
- xmlFree(reader->patternTab);
- }
-#endif
- if (reader->faketext != NULL) {
- xmlFreeNode(reader->faketext);
- }
- if (reader->ctxt != NULL) {
- if (reader->dict == reader->ctxt->dict)
- reader->dict = NULL;
- if (reader->ctxt->myDoc != NULL) {
- if (reader->preserve == 0)
- xmlTextReaderFreeDoc(reader, reader->ctxt->myDoc);
- reader->ctxt->myDoc = NULL;
- }
- if ((reader->ctxt->vctxt.vstateTab != NULL) &&
- (reader->ctxt->vctxt.vstateMax > 0)){
- xmlFree(reader->ctxt->vctxt.vstateTab);
- reader->ctxt->vctxt.vstateTab = NULL;
- reader->ctxt->vctxt.vstateMax = 0;
- }
- if (reader->allocs & XML_TEXTREADER_CTXT)
- xmlFreeParserCtxt(reader->ctxt);
- }
- if (reader->sax != NULL)
- xmlFree(reader->sax);
- if ((reader->input != NULL) && (reader->allocs & XML_TEXTREADER_INPUT))
- xmlFreeParserInputBuffer(reader->input);
- if (reader->buffer != NULL)
- xmlBufFree(reader->buffer);
- if (reader->entTab != NULL)
- xmlFree(reader->entTab);
- if (reader->dict != NULL)
- xmlDictFree(reader->dict);
- xmlFree(reader);
-}
-
-/************************************************************************
- * *
- * Methods for XmlTextReader *
- * *
- ************************************************************************/
-/**
- * xmlTextReaderClose:
- * @reader: the xmlTextReaderPtr used
- *
- * This method releases any resources allocated by the current instance
- * changes the state to Closed and close any underlying input.
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlTextReaderClose(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- reader->node = NULL;
- reader->curnode = NULL;
- reader->mode = XML_TEXTREADER_MODE_CLOSED;
- if (reader->ctxt != NULL) {
- xmlStopParser(reader->ctxt);
- if (reader->ctxt->myDoc != NULL) {
- if (reader->preserve == 0)
- xmlTextReaderFreeDoc(reader, reader->ctxt->myDoc);
- reader->ctxt->myDoc = NULL;
- }
- }
- if ((reader->input != NULL) && (reader->allocs & XML_TEXTREADER_INPUT)) {
- xmlFreeParserInputBuffer(reader->input);
- reader->allocs -= XML_TEXTREADER_INPUT;
- }
- return(0);
-}
-
-/**
- * xmlTextReaderGetAttributeNo:
- * @reader: the xmlTextReaderPtr used
- * @no: the zero-based index of the attribute relative to the containing element
- *
- * Provides the value of the attribute with the specified index relative
- * to the containing element.
- *
- * Returns a string containing the value of the specified attribute, or NULL
- * in case of error. The string must be deallocated by the caller.
- */
-xmlChar *
-xmlTextReaderGetAttributeNo(xmlTextReaderPtr reader, int no) {
- xmlChar *ret;
- int i;
- xmlAttrPtr cur;
- xmlNsPtr ns;
-
- if (reader == NULL)
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
- if (reader->curnode != NULL)
- return(NULL);
- /* TODO: handle the xmlDecl */
- if (reader->node->type != XML_ELEMENT_NODE)
- return(NULL);
-
- ns = reader->node->nsDef;
- for (i = 0;(i < no) && (ns != NULL);i++) {
- ns = ns->next;
- }
- if (ns != NULL)
- return(xmlStrdup(ns->href));
-
- cur = reader->node->properties;
- if (cur == NULL)
- return(NULL);
- for (;i < no;i++) {
- cur = cur->next;
- if (cur == NULL)
- return(NULL);
- }
- /* TODO walk the DTD if present */
-
- ret = xmlNodeListGetString(reader->node->doc, cur->children, 1);
- if (ret == NULL) return(xmlStrdup((xmlChar *)""));
- return(ret);
-}
-
-/**
- * xmlTextReaderGetAttribute:
- * @reader: the xmlTextReaderPtr used
- * @name: the qualified name of the attribute.
- *
- * Provides the value of the attribute with the specified qualified name.
- *
- * Returns a string containing the value of the specified attribute, or NULL
- * in case of error. The string must be deallocated by the caller.
- */
-xmlChar *
-xmlTextReaderGetAttribute(xmlTextReaderPtr reader, const xmlChar *name) {
- xmlChar *prefix = NULL;
- xmlChar *localname;
- xmlNsPtr ns;
- xmlChar *ret = NULL;
-
- if ((reader == NULL) || (name == NULL))
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
- if (reader->curnode != NULL)
- return(NULL);
-
- /* TODO: handle the xmlDecl */
- if (reader->node->type != XML_ELEMENT_NODE)
- return(NULL);
-
- localname = xmlSplitQName2(name, &prefix);
- if (localname == NULL) {
- /*
- * Namespace default decl
- */
- if (xmlStrEqual(name, BAD_CAST "xmlns")) {
- ns = reader->node->nsDef;
- while (ns != NULL) {
- if (ns->prefix == NULL) {
- return(xmlStrdup(ns->href));
- }
- ns = ns->next;
- }
- return NULL;
- }
- return(xmlGetNoNsProp(reader->node, name));
- }
-
- /*
- * Namespace default decl
- */
- if (xmlStrEqual(prefix, BAD_CAST "xmlns")) {
- ns = reader->node->nsDef;
- while (ns != NULL) {
- if ((ns->prefix != NULL) && (xmlStrEqual(ns->prefix, localname))) {
- ret = xmlStrdup(ns->href);
- break;
- }
- ns = ns->next;
- }
- } else {
- ns = xmlSearchNs(reader->node->doc, reader->node, prefix);
- if (ns != NULL)
- ret = xmlGetNsProp(reader->node, localname, ns->href);
- }
-
- xmlFree(localname);
- if (prefix != NULL)
- xmlFree(prefix);
- return(ret);
-}
-
-
-/**
- * xmlTextReaderGetAttributeNs:
- * @reader: the xmlTextReaderPtr used
- * @localName: the local name of the attribute.
- * @namespaceURI: the namespace URI of the attribute.
- *
- * Provides the value of the specified attribute
- *
- * Returns a string containing the value of the specified attribute, or NULL
- * in case of error. The string must be deallocated by the caller.
- */
-xmlChar *
-xmlTextReaderGetAttributeNs(xmlTextReaderPtr reader, const xmlChar *localName,
- const xmlChar *namespaceURI) {
- xmlChar *prefix = NULL;
- xmlNsPtr ns;
-
- if ((reader == NULL) || (localName == NULL))
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
- if (reader->curnode != NULL)
- return(NULL);
-
- /* TODO: handle the xmlDecl */
- if (reader->node->type != XML_ELEMENT_NODE)
- return(NULL);
-
- if (xmlStrEqual(namespaceURI, BAD_CAST "http://www.w3.org/2000/xmlns/")) {
- if (! xmlStrEqual(localName, BAD_CAST "xmlns")) {
- prefix = BAD_CAST localName;
- }
- ns = reader->node->nsDef;
- while (ns != NULL) {
- if ((prefix == NULL && ns->prefix == NULL) ||
- ((ns->prefix != NULL) && (xmlStrEqual(ns->prefix, localName)))) {
- return xmlStrdup(ns->href);
- }
- ns = ns->next;
- }
- return NULL;
- }
-
- return(xmlGetNsProp(reader->node, localName, namespaceURI));
-}
-
-/**
- * xmlTextReaderGetRemainder:
- * @reader: the xmlTextReaderPtr used
- *
- * Method to get the remainder of the buffered XML. this method stops the
- * parser, set its state to End Of File and return the input stream with
- * what is left that the parser did not use.
- *
- * The implementation is not good, the parser certainly procgressed past
- * what's left in reader->input, and there is an allocation problem. Best
- * would be to rewrite it differently.
- *
- * Returns the xmlParserInputBufferPtr attached to the XML or NULL
- * in case of error.
- */
-xmlParserInputBufferPtr
-xmlTextReaderGetRemainder(xmlTextReaderPtr reader) {
- xmlParserInputBufferPtr ret = NULL;
-
- if (reader == NULL)
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
-
- reader->node = NULL;
- reader->curnode = NULL;
- reader->mode = XML_TEXTREADER_MODE_EOF;
- if (reader->ctxt != NULL) {
- xmlStopParser(reader->ctxt);
- if (reader->ctxt->myDoc != NULL) {
- if (reader->preserve == 0)
- xmlTextReaderFreeDoc(reader, reader->ctxt->myDoc);
- reader->ctxt->myDoc = NULL;
- }
- }
- if (reader->allocs & XML_TEXTREADER_INPUT) {
- ret = reader->input;
- reader->input = NULL;
- reader->allocs -= XML_TEXTREADER_INPUT;
- } else {
- /*
- * Hum, one may need to duplicate the data structure because
- * without reference counting the input may be freed twice:
- * - by the layer which allocated it.
- * - by the layer to which would have been returned to.
- */
- TODO
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlTextReaderLookupNamespace:
- * @reader: the xmlTextReaderPtr used
- * @prefix: the prefix whose namespace URI is to be resolved. To return
- * the default namespace, specify NULL
- *
- * Resolves a namespace prefix in the scope of the current element.
- *
- * Returns a string containing the namespace URI to which the prefix maps
- * or NULL in case of error. The string must be deallocated by the caller.
- */
-xmlChar *
-xmlTextReaderLookupNamespace(xmlTextReaderPtr reader, const xmlChar *prefix) {
- xmlNsPtr ns;
-
- if (reader == NULL)
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
-
- ns = xmlSearchNs(reader->node->doc, reader->node, prefix);
- if (ns == NULL)
- return(NULL);
- return(xmlStrdup(ns->href));
-}
-
-/**
- * xmlTextReaderMoveToAttributeNo:
- * @reader: the xmlTextReaderPtr used
- * @no: the zero-based index of the attribute relative to the containing
- * element.
- *
- * Moves the position of the current instance to the attribute with
- * the specified index relative to the containing element.
- *
- * Returns 1 in case of success, -1 in case of error, 0 if not found
- */
-int
-xmlTextReaderMoveToAttributeNo(xmlTextReaderPtr reader, int no) {
- int i;
- xmlAttrPtr cur;
- xmlNsPtr ns;
-
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(-1);
- /* TODO: handle the xmlDecl */
- if (reader->node->type != XML_ELEMENT_NODE)
- return(-1);
-
- reader->curnode = NULL;
-
- ns = reader->node->nsDef;
- for (i = 0;(i < no) && (ns != NULL);i++) {
- ns = ns->next;
- }
- if (ns != NULL) {
- reader->curnode = (xmlNodePtr) ns;
- return(1);
- }
-
- cur = reader->node->properties;
- if (cur == NULL)
- return(0);
- for (;i < no;i++) {
- cur = cur->next;
- if (cur == NULL)
- return(0);
- }
- /* TODO walk the DTD if present */
-
- reader->curnode = (xmlNodePtr) cur;
- return(1);
-}
-
-/**
- * xmlTextReaderMoveToAttribute:
- * @reader: the xmlTextReaderPtr used
- * @name: the qualified name of the attribute.
- *
- * Moves the position of the current instance to the attribute with
- * the specified qualified name.
- *
- * Returns 1 in case of success, -1 in case of error, 0 if not found
- */
-int
-xmlTextReaderMoveToAttribute(xmlTextReaderPtr reader, const xmlChar *name) {
- xmlChar *prefix = NULL;
- xmlChar *localname;
- xmlNsPtr ns;
- xmlAttrPtr prop;
-
- if ((reader == NULL) || (name == NULL))
- return(-1);
- if (reader->node == NULL)
- return(-1);
-
- /* TODO: handle the xmlDecl */
- if (reader->node->type != XML_ELEMENT_NODE)
- return(0);
-
- localname = xmlSplitQName2(name, &prefix);
- if (localname == NULL) {
- /*
- * Namespace default decl
- */
- if (xmlStrEqual(name, BAD_CAST "xmlns")) {
- ns = reader->node->nsDef;
- while (ns != NULL) {
- if (ns->prefix == NULL) {
- reader->curnode = (xmlNodePtr) ns;
- return(1);
- }
- ns = ns->next;
- }
- return(0);
- }
-
- prop = reader->node->properties;
- while (prop != NULL) {
- /*
- * One need to have
- * - same attribute names
- * - and the attribute carrying that namespace
- */
- if ((xmlStrEqual(prop->name, name)) &&
- ((prop->ns == NULL) || (prop->ns->prefix == NULL))) {
- reader->curnode = (xmlNodePtr) prop;
- return(1);
- }
- prop = prop->next;
- }
- return(0);
- }
-
- /*
- * Namespace default decl
- */
- if (xmlStrEqual(prefix, BAD_CAST "xmlns")) {
- ns = reader->node->nsDef;
- while (ns != NULL) {
- if ((ns->prefix != NULL) && (xmlStrEqual(ns->prefix, localname))) {
- reader->curnode = (xmlNodePtr) ns;
- goto found;
- }
- ns = ns->next;
- }
- goto not_found;
- }
- prop = reader->node->properties;
- while (prop != NULL) {
- /*
- * One need to have
- * - same attribute names
- * - and the attribute carrying that namespace
- */
- if ((xmlStrEqual(prop->name, localname)) &&
- (prop->ns != NULL) && (xmlStrEqual(prop->ns->prefix, prefix))) {
- reader->curnode = (xmlNodePtr) prop;
- goto found;
- }
- prop = prop->next;
- }
-not_found:
- if (localname != NULL)
- xmlFree(localname);
- if (prefix != NULL)
- xmlFree(prefix);
- return(0);
-
-found:
- if (localname != NULL)
- xmlFree(localname);
- if (prefix != NULL)
- xmlFree(prefix);
- return(1);
-}
-
-/**
- * xmlTextReaderMoveToAttributeNs:
- * @reader: the xmlTextReaderPtr used
- * @localName: the local name of the attribute.
- * @namespaceURI: the namespace URI of the attribute.
- *
- * Moves the position of the current instance to the attribute with the
- * specified local name and namespace URI.
- *
- * Returns 1 in case of success, -1 in case of error, 0 if not found
- */
-int
-xmlTextReaderMoveToAttributeNs(xmlTextReaderPtr reader,
- const xmlChar *localName, const xmlChar *namespaceURI) {
- xmlAttrPtr prop;
- xmlNodePtr node;
- xmlNsPtr ns;
- xmlChar *prefix = NULL;
-
- if ((reader == NULL) || (localName == NULL) || (namespaceURI == NULL))
- return(-1);
- if (reader->node == NULL)
- return(-1);
- if (reader->node->type != XML_ELEMENT_NODE)
- return(0);
- node = reader->node;
-
- if (xmlStrEqual(namespaceURI, BAD_CAST "http://www.w3.org/2000/xmlns/")) {
- if (! xmlStrEqual(localName, BAD_CAST "xmlns")) {
- prefix = BAD_CAST localName;
- }
- ns = reader->node->nsDef;
- while (ns != NULL) {
- if ((prefix == NULL && ns->prefix == NULL) ||
- ((ns->prefix != NULL) && (xmlStrEqual(ns->prefix, localName)))) {
- reader->curnode = (xmlNodePtr) ns;
- return(1);
- }
- ns = ns->next;
- }
- return(0);
- }
-
- prop = node->properties;
- while (prop != NULL) {
- /*
- * One need to have
- * - same attribute names
- * - and the attribute carrying that namespace
- */
- if (xmlStrEqual(prop->name, localName) &&
- ((prop->ns != NULL) &&
- (xmlStrEqual(prop->ns->href, namespaceURI)))) {
- reader->curnode = (xmlNodePtr) prop;
- return(1);
- }
- prop = prop->next;
- }
- return(0);
-}
-
-/**
- * xmlTextReaderMoveToFirstAttribute:
- * @reader: the xmlTextReaderPtr used
- *
- * Moves the position of the current instance to the first attribute
- * associated with the current node.
- *
- * Returns 1 in case of success, -1 in case of error, 0 if not found
- */
-int
-xmlTextReaderMoveToFirstAttribute(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(-1);
- if (reader->node->type != XML_ELEMENT_NODE)
- return(0);
-
- if (reader->node->nsDef != NULL) {
- reader->curnode = (xmlNodePtr) reader->node->nsDef;
- return(1);
- }
- if (reader->node->properties != NULL) {
- reader->curnode = (xmlNodePtr) reader->node->properties;
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlTextReaderMoveToNextAttribute:
- * @reader: the xmlTextReaderPtr used
- *
- * Moves the position of the current instance to the next attribute
- * associated with the current node.
- *
- * Returns 1 in case of success, -1 in case of error, 0 if not found
- */
-int
-xmlTextReaderMoveToNextAttribute(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(-1);
- if (reader->node->type != XML_ELEMENT_NODE)
- return(0);
- if (reader->curnode == NULL)
- return(xmlTextReaderMoveToFirstAttribute(reader));
-
- if (reader->curnode->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) reader->curnode;
- if (ns->next != NULL) {
- reader->curnode = (xmlNodePtr) ns->next;
- return(1);
- }
- if (reader->node->properties != NULL) {
- reader->curnode = (xmlNodePtr) reader->node->properties;
- return(1);
- }
- return(0);
- } else if ((reader->curnode->type == XML_ATTRIBUTE_NODE) &&
- (reader->curnode->next != NULL)) {
- reader->curnode = reader->curnode->next;
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlTextReaderMoveToElement:
- * @reader: the xmlTextReaderPtr used
- *
- * Moves the position of the current instance to the node that
- * contains the current Attribute node.
- *
- * Returns 1 in case of success, -1 in case of error, 0 if not moved
- */
-int
-xmlTextReaderMoveToElement(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(-1);
- if (reader->node->type != XML_ELEMENT_NODE)
- return(0);
- if (reader->curnode != NULL) {
- reader->curnode = NULL;
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlTextReaderReadAttributeValue:
- * @reader: the xmlTextReaderPtr used
- *
- * Parses an attribute value into one or more Text and EntityReference nodes.
- *
- * Returns 1 in case of success, 0 if the reader was not positionned on an
- * ttribute node or all the attribute values have been read, or -1
- * in case of error.
- */
-int
-xmlTextReaderReadAttributeValue(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(-1);
- if (reader->curnode == NULL)
- return(0);
- if (reader->curnode->type == XML_ATTRIBUTE_NODE) {
- if (reader->curnode->children == NULL)
- return(0);
- reader->curnode = reader->curnode->children;
- } else if (reader->curnode->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) reader->curnode;
-
- if (reader->faketext == NULL) {
- reader->faketext = xmlNewDocText(reader->node->doc,
- ns->href);
- } else {
- if ((reader->faketext->content != NULL) &&
- (reader->faketext->content !=
- (xmlChar *) &(reader->faketext->properties)))
- xmlFree(reader->faketext->content);
- reader->faketext->content = xmlStrdup(ns->href);
- }
- reader->curnode = reader->faketext;
- } else {
- if (reader->curnode->next == NULL)
- return(0);
- reader->curnode = reader->curnode->next;
- }
- return(1);
-}
-
-/**
- * xmlTextReaderConstEncoding:
- * @reader: the xmlTextReaderPtr used
- *
- * Determine the encoding of the document being read.
- *
- * Returns a string containing the encoding of the document or NULL in
- * case of error. The string is deallocated with the reader.
- */
-const xmlChar *
-xmlTextReaderConstEncoding(xmlTextReaderPtr reader) {
- xmlDocPtr doc = NULL;
- if (reader == NULL)
- return(NULL);
- if (reader->doc != NULL)
- doc = reader->doc;
- else if (reader->ctxt != NULL)
- doc = reader->ctxt->myDoc;
- if (doc == NULL)
- return(NULL);
-
- if (doc->encoding == NULL)
- return(NULL);
- else
- return(CONSTSTR(doc->encoding));
-}
-
-
-/************************************************************************
- * *
- * Acces API to the current node *
- * *
- ************************************************************************/
-/**
- * xmlTextReaderAttributeCount:
- * @reader: the xmlTextReaderPtr used
- *
- * Provides the number of attributes of the current node
- *
- * Returns 0 i no attributes, -1 in case of error or the attribute count
- */
-int
-xmlTextReaderAttributeCount(xmlTextReaderPtr reader) {
- int ret;
- xmlAttrPtr attr;
- xmlNsPtr ns;
- xmlNodePtr node;
-
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(0);
-
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
-
- if (node->type != XML_ELEMENT_NODE)
- return(0);
- if ((reader->state == XML_TEXTREADER_END) ||
- (reader->state == XML_TEXTREADER_BACKTRACK))
- return(0);
- ret = 0;
- attr = node->properties;
- while (attr != NULL) {
- ret++;
- attr = attr->next;
- }
- ns = node->nsDef;
- while (ns != NULL) {
- ret++;
- ns = ns->next;
- }
- return(ret);
-}
-
-/**
- * xmlTextReaderNodeType:
- * @reader: the xmlTextReaderPtr used
- *
- * Get the node type of the current node
- * Reference:
- * http://www.gnu.org/software/dotgnu/pnetlib-doc/System/Xml/XmlNodeType.html
- *
- * Returns the xmlNodeType of the current node or -1 in case of error
- */
-int
-xmlTextReaderNodeType(xmlTextReaderPtr reader) {
- xmlNodePtr node;
-
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(XML_READER_TYPE_NONE);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- switch (node->type) {
- case XML_ELEMENT_NODE:
- if ((reader->state == XML_TEXTREADER_END) ||
- (reader->state == XML_TEXTREADER_BACKTRACK))
- return(XML_READER_TYPE_END_ELEMENT);
- return(XML_READER_TYPE_ELEMENT);
- case XML_NAMESPACE_DECL:
- case XML_ATTRIBUTE_NODE:
- return(XML_READER_TYPE_ATTRIBUTE);
- case XML_TEXT_NODE:
- if (xmlIsBlankNode(reader->node)) {
- if (xmlNodeGetSpacePreserve(reader->node))
- return(XML_READER_TYPE_SIGNIFICANT_WHITESPACE);
- else
- return(XML_READER_TYPE_WHITESPACE);
- } else {
- return(XML_READER_TYPE_TEXT);
- }
- case XML_CDATA_SECTION_NODE:
- return(XML_READER_TYPE_CDATA);
- case XML_ENTITY_REF_NODE:
- return(XML_READER_TYPE_ENTITY_REFERENCE);
- case XML_ENTITY_NODE:
- return(XML_READER_TYPE_ENTITY);
- case XML_PI_NODE:
- return(XML_READER_TYPE_PROCESSING_INSTRUCTION);
- case XML_COMMENT_NODE:
- return(XML_READER_TYPE_COMMENT);
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return(XML_READER_TYPE_DOCUMENT);
- case XML_DOCUMENT_FRAG_NODE:
- return(XML_READER_TYPE_DOCUMENT_FRAGMENT);
- case XML_NOTATION_NODE:
- return(XML_READER_TYPE_NOTATION);
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DTD_NODE:
- return(XML_READER_TYPE_DOCUMENT_TYPE);
-
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- return(XML_READER_TYPE_NONE);
- }
- return(-1);
-}
-
-/**
- * xmlTextReaderIsEmptyElement:
- * @reader: the xmlTextReaderPtr used
- *
- * Check if the current node is empty
- *
- * Returns 1 if empty, 0 if not and -1 in case of error
- */
-int
-xmlTextReaderIsEmptyElement(xmlTextReaderPtr reader) {
- if ((reader == NULL) || (reader->node == NULL))
- return(-1);
- if (reader->node->type != XML_ELEMENT_NODE)
- return(0);
- if (reader->curnode != NULL)
- return(0);
- if (reader->node->children != NULL)
- return(0);
- if (reader->state == XML_TEXTREADER_END)
- return(0);
- if (reader->doc != NULL)
- return(1);
-#ifdef LIBXML_XINCLUDE_ENABLED
- if (reader->in_xinclude > 0)
- return(1);
-#endif
- return((reader->node->extra & NODE_IS_EMPTY) != 0);
-}
-
-/**
- * xmlTextReaderLocalName:
- * @reader: the xmlTextReaderPtr used
- *
- * The local name of the node.
- *
- * Returns the local name or NULL if not available,
- * if non NULL it need to be freed by the caller.
- */
-xmlChar *
-xmlTextReaderLocalName(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- if (node->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) node;
- if (ns->prefix == NULL)
- return(xmlStrdup(BAD_CAST "xmlns"));
- else
- return(xmlStrdup(ns->prefix));
- }
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE))
- return(xmlTextReaderName(reader));
- return(xmlStrdup(node->name));
-}
-
-/**
- * xmlTextReaderConstLocalName:
- * @reader: the xmlTextReaderPtr used
- *
- * The local name of the node.
- *
- * Returns the local name or NULL if not available, the
- * string will be deallocated with the reader.
- */
-const xmlChar *
-xmlTextReaderConstLocalName(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- if (node->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) node;
- if (ns->prefix == NULL)
- return(CONSTSTR(BAD_CAST "xmlns"));
- else
- return(ns->prefix);
- }
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE))
- return(xmlTextReaderConstName(reader));
- return(node->name);
-}
-
-/**
- * xmlTextReaderName:
- * @reader: the xmlTextReaderPtr used
- *
- * The qualified name of the node, equal to Prefix :LocalName.
- *
- * Returns the local name or NULL if not available,
- * if non NULL it need to be freed by the caller.
- */
-xmlChar *
-xmlTextReaderName(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- xmlChar *ret;
-
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- switch (node->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- if ((node->ns == NULL) ||
- (node->ns->prefix == NULL))
- return(xmlStrdup(node->name));
-
- ret = xmlStrdup(node->ns->prefix);
- ret = xmlStrcat(ret, BAD_CAST ":");
- ret = xmlStrcat(ret, node->name);
- return(ret);
- case XML_TEXT_NODE:
- return(xmlStrdup(BAD_CAST "#text"));
- case XML_CDATA_SECTION_NODE:
- return(xmlStrdup(BAD_CAST "#cdata-section"));
- case XML_ENTITY_NODE:
- case XML_ENTITY_REF_NODE:
- return(xmlStrdup(node->name));
- case XML_PI_NODE:
- return(xmlStrdup(node->name));
- case XML_COMMENT_NODE:
- return(xmlStrdup(BAD_CAST "#comment"));
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return(xmlStrdup(BAD_CAST "#document"));
- case XML_DOCUMENT_FRAG_NODE:
- return(xmlStrdup(BAD_CAST "#document-fragment"));
- case XML_NOTATION_NODE:
- return(xmlStrdup(node->name));
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DTD_NODE:
- return(xmlStrdup(node->name));
- case XML_NAMESPACE_DECL: {
- xmlNsPtr ns = (xmlNsPtr) node;
-
- ret = xmlStrdup(BAD_CAST "xmlns");
- if (ns->prefix == NULL)
- return(ret);
- ret = xmlStrcat(ret, BAD_CAST ":");
- ret = xmlStrcat(ret, ns->prefix);
- return(ret);
- }
-
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- return(NULL);
- }
- return(NULL);
-}
-
-/**
- * xmlTextReaderConstName:
- * @reader: the xmlTextReaderPtr used
- *
- * The qualified name of the node, equal to Prefix :LocalName.
- *
- * Returns the local name or NULL if not available, the string is
- * deallocated with the reader.
- */
-const xmlChar *
-xmlTextReaderConstName(xmlTextReaderPtr reader) {
- xmlNodePtr node;
-
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- switch (node->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- if ((node->ns == NULL) ||
- (node->ns->prefix == NULL))
- return(node->name);
- return(CONSTQSTR(node->ns->prefix, node->name));
- case XML_TEXT_NODE:
- return(CONSTSTR(BAD_CAST "#text"));
- case XML_CDATA_SECTION_NODE:
- return(CONSTSTR(BAD_CAST "#cdata-section"));
- case XML_ENTITY_NODE:
- case XML_ENTITY_REF_NODE:
- return(CONSTSTR(node->name));
- case XML_PI_NODE:
- return(CONSTSTR(node->name));
- case XML_COMMENT_NODE:
- return(CONSTSTR(BAD_CAST "#comment"));
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return(CONSTSTR(BAD_CAST "#document"));
- case XML_DOCUMENT_FRAG_NODE:
- return(CONSTSTR(BAD_CAST "#document-fragment"));
- case XML_NOTATION_NODE:
- return(CONSTSTR(node->name));
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DTD_NODE:
- return(CONSTSTR(node->name));
- case XML_NAMESPACE_DECL: {
- xmlNsPtr ns = (xmlNsPtr) node;
-
- if (ns->prefix == NULL)
- return(CONSTSTR(BAD_CAST "xmlns"));
- return(CONSTQSTR(BAD_CAST "xmlns", ns->prefix));
- }
-
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- return(NULL);
- }
- return(NULL);
-}
-
-/**
- * xmlTextReaderPrefix:
- * @reader: the xmlTextReaderPtr used
- *
- * A shorthand reference to the namespace associated with the node.
- *
- * Returns the prefix or NULL if not available,
- * if non NULL it need to be freed by the caller.
- */
-xmlChar *
-xmlTextReaderPrefix(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- if (node->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) node;
- if (ns->prefix == NULL)
- return(NULL);
- return(xmlStrdup(BAD_CAST "xmlns"));
- }
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE))
- return(NULL);
- if ((node->ns != NULL) && (node->ns->prefix != NULL))
- return(xmlStrdup(node->ns->prefix));
- return(NULL);
-}
-
-/**
- * xmlTextReaderConstPrefix:
- * @reader: the xmlTextReaderPtr used
- *
- * A shorthand reference to the namespace associated with the node.
- *
- * Returns the prefix or NULL if not available, the string is deallocated
- * with the reader.
- */
-const xmlChar *
-xmlTextReaderConstPrefix(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- if (node->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) node;
- if (ns->prefix == NULL)
- return(NULL);
- return(CONSTSTR(BAD_CAST "xmlns"));
- }
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE))
- return(NULL);
- if ((node->ns != NULL) && (node->ns->prefix != NULL))
- return(CONSTSTR(node->ns->prefix));
- return(NULL);
-}
-
-/**
- * xmlTextReaderNamespaceUri:
- * @reader: the xmlTextReaderPtr used
- *
- * The URI defining the namespace associated with the node.
- *
- * Returns the namespace URI or NULL if not available,
- * if non NULL it need to be freed by the caller.
- */
-xmlChar *
-xmlTextReaderNamespaceUri(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- if (node->type == XML_NAMESPACE_DECL)
- return(xmlStrdup(BAD_CAST "http://www.w3.org/2000/xmlns/"));
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE))
- return(NULL);
- if (node->ns != NULL)
- return(xmlStrdup(node->ns->href));
- return(NULL);
-}
-
-/**
- * xmlTextReaderConstNamespaceUri:
- * @reader: the xmlTextReaderPtr used
- *
- * The URI defining the namespace associated with the node.
- *
- * Returns the namespace URI or NULL if not available, the string
- * will be deallocated with the reader
- */
-const xmlChar *
-xmlTextReaderConstNamespaceUri(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
- if (node->type == XML_NAMESPACE_DECL)
- return(CONSTSTR(BAD_CAST "http://www.w3.org/2000/xmlns/"));
- if ((node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE))
- return(NULL);
- if (node->ns != NULL)
- return(CONSTSTR(node->ns->href));
- return(NULL);
-}
-
-/**
- * xmlTextReaderBaseUri:
- * @reader: the xmlTextReaderPtr used
- *
- * The base URI of the node.
- *
- * Returns the base URI or NULL if not available,
- * if non NULL it need to be freed by the caller.
- */
-xmlChar *
-xmlTextReaderBaseUri(xmlTextReaderPtr reader) {
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- return(xmlNodeGetBase(NULL, reader->node));
-}
-
-/**
- * xmlTextReaderConstBaseUri:
- * @reader: the xmlTextReaderPtr used
- *
- * The base URI of the node.
- *
- * Returns the base URI or NULL if not available, the string
- * will be deallocated with the reader
- */
-const xmlChar *
-xmlTextReaderConstBaseUri(xmlTextReaderPtr reader) {
- xmlChar *tmp;
- const xmlChar *ret;
-
- if ((reader == NULL) || (reader->node == NULL))
- return(NULL);
- tmp = xmlNodeGetBase(NULL, reader->node);
- if (tmp == NULL)
- return(NULL);
- ret = CONSTSTR(tmp);
- xmlFree(tmp);
- return(ret);
-}
-
-/**
- * xmlTextReaderDepth:
- * @reader: the xmlTextReaderPtr used
- *
- * The depth of the node in the tree.
- *
- * Returns the depth or -1 in case of error
- */
-int
-xmlTextReaderDepth(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(0);
-
- if (reader->curnode != NULL) {
- if ((reader->curnode->type == XML_ATTRIBUTE_NODE) ||
- (reader->curnode->type == XML_NAMESPACE_DECL))
- return(reader->depth + 1);
- return(reader->depth + 2);
- }
- return(reader->depth);
-}
-
-/**
- * xmlTextReaderHasAttributes:
- * @reader: the xmlTextReaderPtr used
- *
- * Whether the node has attributes.
- *
- * Returns 1 if true, 0 if false, and -1 in case or error
- */
-int
-xmlTextReaderHasAttributes(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(0);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
-
- if ((node->type == XML_ELEMENT_NODE) &&
- ((node->properties != NULL) || (node->nsDef != NULL)))
- return(1);
- /* TODO: handle the xmlDecl */
- return(0);
-}
-
-/**
- * xmlTextReaderHasValue:
- * @reader: the xmlTextReaderPtr used
- *
- * Whether the node can have a text value.
- *
- * Returns 1 if true, 0 if false, and -1 in case or error
- */
-int
-xmlTextReaderHasValue(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(0);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
-
- switch (node->type) {
- case XML_ATTRIBUTE_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_NAMESPACE_DECL:
- return(1);
- default:
- break;
- }
- return(0);
-}
-
-/**
- * xmlTextReaderValue:
- * @reader: the xmlTextReaderPtr used
- *
- * Provides the text value of the node if present
- *
- * Returns the string or NULL if not available. The result must be deallocated
- * with xmlFree()
- */
-xmlChar *
-xmlTextReaderValue(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if (reader == NULL)
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
-
- switch (node->type) {
- case XML_NAMESPACE_DECL:
- return(xmlStrdup(((xmlNsPtr) node)->href));
- case XML_ATTRIBUTE_NODE:{
- xmlAttrPtr attr = (xmlAttrPtr) node;
-
- if (attr->parent != NULL)
- return (xmlNodeListGetString
- (attr->parent->doc, attr->children, 1));
- else
- return (xmlNodeListGetString(NULL, attr->children, 1));
- break;
- }
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- if (node->content != NULL)
- return (xmlStrdup(node->content));
- default:
- break;
- }
- return(NULL);
-}
-
-/**
- * xmlTextReaderConstValue:
- * @reader: the xmlTextReaderPtr used
- *
- * Provides the text value of the node if present
- *
- * Returns the string or NULL if not available. The result will be
- * deallocated on the next Read() operation.
- */
-const xmlChar *
-xmlTextReaderConstValue(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if (reader == NULL)
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
-
- switch (node->type) {
- case XML_NAMESPACE_DECL:
- return(((xmlNsPtr) node)->href);
- case XML_ATTRIBUTE_NODE:{
- xmlAttrPtr attr = (xmlAttrPtr) node;
- const xmlChar *ret;
-
- if ((attr->children != NULL) &&
- (attr->children->type == XML_TEXT_NODE) &&
- (attr->children->next == NULL))
- return(attr->children->content);
- else {
- if (reader->buffer == NULL) {
- reader->buffer = xmlBufCreateSize(100);
- if (reader->buffer == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlTextReaderSetup : malloc failed\n");
- return (NULL);
- }
- xmlBufSetAllocationScheme(reader->buffer,
- XML_BUFFER_ALLOC_BOUNDED);
- } else
- xmlBufEmpty(reader->buffer);
- xmlBufGetNodeContent(reader->buffer, node);
- ret = xmlBufContent(reader->buffer);
- if (ret == NULL) {
- /* error on the buffer best to reallocate */
- xmlBufFree(reader->buffer);
- reader->buffer = xmlBufCreateSize(100);
- xmlBufSetAllocationScheme(reader->buffer,
- XML_BUFFER_ALLOC_BOUNDED);
- ret = BAD_CAST "";
- }
- return(ret);
- }
- break;
- }
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- return(node->content);
- default:
- break;
- }
- return(NULL);
-}
-
-/**
- * xmlTextReaderIsDefault:
- * @reader: the xmlTextReaderPtr used
- *
- * Whether an Attribute node was generated from the default value
- * defined in the DTD or schema.
- *
- * Returns 0 if not defaulted, 1 if defaulted, and -1 in case of error
- */
-int
-xmlTextReaderIsDefault(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- return(0);
-}
-
-/**
- * xmlTextReaderQuoteChar:
- * @reader: the xmlTextReaderPtr used
- *
- * The quotation mark character used to enclose the value of an attribute.
- *
- * Returns " or ' and -1 in case of error
- */
-int
-xmlTextReaderQuoteChar(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- /* TODO maybe lookup the attribute value for " first */
- return((int) '"');
-}
-
-/**
- * xmlTextReaderXmlLang:
- * @reader: the xmlTextReaderPtr used
- *
- * The xml:lang scope within which the node resides.
- *
- * Returns the xml:lang value or NULL if none exists.,
- * if non NULL it need to be freed by the caller.
- */
-xmlChar *
-xmlTextReaderXmlLang(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
- return(xmlNodeGetLang(reader->node));
-}
-
-/**
- * xmlTextReaderConstXmlLang:
- * @reader: the xmlTextReaderPtr used
- *
- * The xml:lang scope within which the node resides.
- *
- * Returns the xml:lang value or NULL if none exists.
- */
-const xmlChar *
-xmlTextReaderConstXmlLang(xmlTextReaderPtr reader) {
- xmlChar *tmp;
- const xmlChar *ret;
-
- if (reader == NULL)
- return(NULL);
- if (reader->node == NULL)
- return(NULL);
- tmp = xmlNodeGetLang(reader->node);
- if (tmp == NULL)
- return(NULL);
- ret = CONSTSTR(tmp);
- xmlFree(tmp);
- return(ret);
-}
-
-/**
- * xmlTextReaderConstString:
- * @reader: the xmlTextReaderPtr used
- * @str: the string to intern.
- *
- * Get an interned string from the reader, allows for example to
- * speedup string name comparisons
- *
- * Returns an interned copy of the string or NULL in case of error. The
- * string will be deallocated with the reader.
- */
-const xmlChar *
-xmlTextReaderConstString(xmlTextReaderPtr reader, const xmlChar *str) {
- if (reader == NULL)
- return(NULL);
- return(CONSTSTR(str));
-}
-
-/**
- * xmlTextReaderNormalization:
- * @reader: the xmlTextReaderPtr used
- *
- * The value indicating whether to normalize white space and attribute values.
- * Since attribute value and end of line normalizations are a MUST in the XML
- * specification only the value true is accepted. The broken bahaviour of
- * accepting out of range character entities like &#0; is of course not
- * supported either.
- *
- * Returns 1 or -1 in case of error.
- */
-int
-xmlTextReaderNormalization(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(-1);
- return(1);
-}
-
-/************************************************************************
- * *
- * Extensions to the base APIs *
- * *
- ************************************************************************/
-
-/**
- * xmlTextReaderSetParserProp:
- * @reader: the xmlTextReaderPtr used
- * @prop: the xmlParserProperties to set
- * @value: usually 0 or 1 to (de)activate it
- *
- * Change the parser processing behaviour by changing some of its internal
- * properties. Note that some properties can only be changed before any
- * read has been done.
- *
- * Returns 0 if the call was successful, or -1 in case of error
- */
-int
-xmlTextReaderSetParserProp(xmlTextReaderPtr reader, int prop, int value) {
- xmlParserProperties p = (xmlParserProperties) prop;
- xmlParserCtxtPtr ctxt;
-
- if ((reader == NULL) || (reader->ctxt == NULL))
- return(-1);
- ctxt = reader->ctxt;
-
- switch (p) {
- case XML_PARSER_LOADDTD:
- if (value != 0) {
- if (ctxt->loadsubset == 0) {
- if (reader->mode != XML_TEXTREADER_MODE_INITIAL)
- return(-1);
- ctxt->loadsubset = XML_DETECT_IDS;
- }
- } else {
- ctxt->loadsubset = 0;
- }
- return(0);
- case XML_PARSER_DEFAULTATTRS:
- if (value != 0) {
- ctxt->loadsubset |= XML_COMPLETE_ATTRS;
- } else {
- if (ctxt->loadsubset & XML_COMPLETE_ATTRS)
- ctxt->loadsubset -= XML_COMPLETE_ATTRS;
- }
- return(0);
- case XML_PARSER_VALIDATE:
- if (value != 0) {
- ctxt->validate = 1;
- reader->validate = XML_TEXTREADER_VALIDATE_DTD;
- } else {
- ctxt->validate = 0;
- }
- return(0);
- case XML_PARSER_SUBST_ENTITIES:
- if (value != 0) {
- ctxt->replaceEntities = 1;
- } else {
- ctxt->replaceEntities = 0;
- }
- return(0);
- }
- return(-1);
-}
-
-/**
- * xmlTextReaderGetParserProp:
- * @reader: the xmlTextReaderPtr used
- * @prop: the xmlParserProperties to get
- *
- * Read the parser internal property.
- *
- * Returns the value, usually 0 or 1, or -1 in case of error.
- */
-int
-xmlTextReaderGetParserProp(xmlTextReaderPtr reader, int prop) {
- xmlParserProperties p = (xmlParserProperties) prop;
- xmlParserCtxtPtr ctxt;
-
- if ((reader == NULL) || (reader->ctxt == NULL))
- return(-1);
- ctxt = reader->ctxt;
-
- switch (p) {
- case XML_PARSER_LOADDTD:
- if ((ctxt->loadsubset != 0) || (ctxt->validate != 0))
- return(1);
- return(0);
- case XML_PARSER_DEFAULTATTRS:
- if (ctxt->loadsubset & XML_COMPLETE_ATTRS)
- return(1);
- return(0);
- case XML_PARSER_VALIDATE:
- return(reader->validate);
- case XML_PARSER_SUBST_ENTITIES:
- return(ctxt->replaceEntities);
- }
- return(-1);
-}
-
-
-/**
- * xmlTextReaderGetParserLineNumber:
- * @reader: the user data (XML reader context)
- *
- * Provide the line number of the current parsing point.
- *
- * Returns an int or 0 if not available
- */
-int
-xmlTextReaderGetParserLineNumber(xmlTextReaderPtr reader)
-{
- if ((reader == NULL) || (reader->ctxt == NULL) ||
- (reader->ctxt->input == NULL)) {
- return (0);
- }
- return (reader->ctxt->input->line);
-}
-
-/**
- * xmlTextReaderGetParserColumnNumber:
- * @reader: the user data (XML reader context)
- *
- * Provide the column number of the current parsing point.
- *
- * Returns an int or 0 if not available
- */
-int
-xmlTextReaderGetParserColumnNumber(xmlTextReaderPtr reader)
-{
- if ((reader == NULL) || (reader->ctxt == NULL) ||
- (reader->ctxt->input == NULL)) {
- return (0);
- }
- return (reader->ctxt->input->col);
-}
-
-/**
- * xmlTextReaderCurrentNode:
- * @reader: the xmlTextReaderPtr used
- *
- * Hacking interface allowing to get the xmlNodePtr correponding to the
- * current node being accessed by the xmlTextReader. This is dangerous
- * because the underlying node may be destroyed on the next Reads.
- *
- * Returns the xmlNodePtr or NULL in case of error.
- */
-xmlNodePtr
-xmlTextReaderCurrentNode(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(NULL);
-
- if (reader->curnode != NULL)
- return(reader->curnode);
- return(reader->node);
-}
-
-/**
- * xmlTextReaderPreserve:
- * @reader: the xmlTextReaderPtr used
- *
- * This tells the XML Reader to preserve the current node.
- * The caller must also use xmlTextReaderCurrentDoc() to
- * keep an handle on the resulting document once parsing has finished
- *
- * Returns the xmlNodePtr or NULL in case of error.
- */
-xmlNodePtr
-xmlTextReaderPreserve(xmlTextReaderPtr reader) {
- xmlNodePtr cur, parent;
-
- if (reader == NULL)
- return(NULL);
-
- if (reader->curnode != NULL)
- cur = reader->curnode;
- else
- cur = reader->node;
- if (cur == NULL)
- return(NULL);
-
- if ((cur->type != XML_DOCUMENT_NODE) && (cur->type != XML_DTD_NODE)) {
- cur->extra |= NODE_IS_PRESERVED;
- cur->extra |= NODE_IS_SPRESERVED;
- }
- reader->preserves++;
-
- parent = cur->parent;;
- while (parent != NULL) {
- if (parent->type == XML_ELEMENT_NODE)
- parent->extra |= NODE_IS_PRESERVED;
- parent = parent->parent;
- }
- return(cur);
-}
-
-#ifdef LIBXML_PATTERN_ENABLED
-/**
- * xmlTextReaderPreservePattern:
- * @reader: the xmlTextReaderPtr used
- * @pattern: an XPath subset pattern
- * @namespaces: the prefix definitions, array of [URI, prefix] or NULL
- *
- * This tells the XML Reader to preserve all nodes matched by the
- * pattern. The caller must also use xmlTextReaderCurrentDoc() to
- * keep an handle on the resulting document once parsing has finished
- *
- * Returns a positive number in case of success and -1 in case of error
- */
-int
-xmlTextReaderPreservePattern(xmlTextReaderPtr reader, const xmlChar *pattern,
- const xmlChar **namespaces)
-{
- xmlPatternPtr comp;
-
- if ((reader == NULL) || (pattern == NULL))
- return(-1);
-
- comp = xmlPatterncompile(pattern, reader->dict, 0, namespaces);
- if (comp == NULL)
- return(-1);
-
- if (reader->patternMax <= 0) {
- reader->patternMax = 4;
- reader->patternTab = (xmlPatternPtr *) xmlMalloc(reader->patternMax *
- sizeof(reader->patternTab[0]));
- if (reader->patternTab == NULL) {
- xmlGenericError(xmlGenericErrorContext, "xmlMalloc failed !\n");
- return (-1);
- }
- }
- if (reader->patternNr >= reader->patternMax) {
- xmlPatternPtr *tmp;
- reader->patternMax *= 2;
- tmp = (xmlPatternPtr *) xmlRealloc(reader->patternTab,
- reader->patternMax *
- sizeof(reader->patternTab[0]));
- if (tmp == NULL) {
- xmlGenericError(xmlGenericErrorContext, "xmlRealloc failed !\n");
- reader->patternMax /= 2;
- return (-1);
- }
- reader->patternTab = tmp;
- }
- reader->patternTab[reader->patternNr] = comp;
- return(reader->patternNr++);
-}
-#endif
-
-/**
- * xmlTextReaderCurrentDoc:
- * @reader: the xmlTextReaderPtr used
- *
- * Hacking interface allowing to get the xmlDocPtr correponding to the
- * current document being accessed by the xmlTextReader.
- * NOTE: as a result of this call, the reader will not destroy the
- * associated XML document and calling xmlFreeDoc() on the result
- * is needed once the reader parsing has finished.
- *
- * Returns the xmlDocPtr or NULL in case of error.
- */
-xmlDocPtr
-xmlTextReaderCurrentDoc(xmlTextReaderPtr reader) {
- if (reader == NULL)
- return(NULL);
- if (reader->doc != NULL)
- return(reader->doc);
- if ((reader->ctxt == NULL) || (reader->ctxt->myDoc == NULL))
- return(NULL);
-
- reader->preserve = 1;
- return(reader->ctxt->myDoc);
-}
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-static char *xmlTextReaderBuildMessage(const char *msg, va_list ap) LIBXML_ATTR_FORMAT(1,0);
-
-static void XMLCDECL
-xmlTextReaderValidityError(void *ctxt, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-
-static void XMLCDECL
-xmlTextReaderValidityWarning(void *ctxt, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-
-static void XMLCDECL
-xmlTextReaderValidityErrorRelay(void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-
-static void XMLCDECL
-xmlTextReaderValidityWarningRelay(void *ctx, const char *msg, ...) LIBXML_ATTR_FORMAT(2,3);
-
-static void XMLCDECL
-xmlTextReaderValidityErrorRelay(void *ctx, const char *msg, ...)
-{
- xmlTextReaderPtr reader = (xmlTextReaderPtr) ctx;
-
- char *str;
-
- va_list ap;
-
- va_start(ap, msg);
- str = xmlTextReaderBuildMessage(msg, ap);
- if (!reader->errorFunc) {
- xmlTextReaderValidityError(ctx, "%s", str);
- } else {
- reader->errorFunc(reader->errorFuncArg, str,
- XML_PARSER_SEVERITY_VALIDITY_ERROR,
- NULL /* locator */ );
- }
- if (str != NULL)
- xmlFree(str);
- va_end(ap);
-}
-
-static void XMLCDECL
-xmlTextReaderValidityWarningRelay(void *ctx, const char *msg, ...)
-{
- xmlTextReaderPtr reader = (xmlTextReaderPtr) ctx;
-
- char *str;
-
- va_list ap;
-
- va_start(ap, msg);
- str = xmlTextReaderBuildMessage(msg, ap);
- if (!reader->errorFunc) {
- xmlTextReaderValidityWarning(ctx, "%s", str);
- } else {
- reader->errorFunc(reader->errorFuncArg, str,
- XML_PARSER_SEVERITY_VALIDITY_WARNING,
- NULL /* locator */ );
- }
- if (str != NULL)
- xmlFree(str);
- va_end(ap);
-}
-
-static void
- xmlTextReaderStructuredError(void *ctxt, xmlErrorPtr error);
-
-static void
-xmlTextReaderValidityStructuredRelay(void *userData, xmlErrorPtr error)
-{
- xmlTextReaderPtr reader = (xmlTextReaderPtr) userData;
-
- if (reader->sErrorFunc) {
- reader->sErrorFunc(reader->errorFuncArg, error);
- } else {
- xmlTextReaderStructuredError(reader, error);
- }
-}
-/**
- * xmlTextReaderRelaxNGSetSchema:
- * @reader: the xmlTextReaderPtr used
- * @schema: a precompiled RelaxNG schema
- *
- * Use RelaxNG to validate the document as it is processed.
- * Activation is only possible before the first Read().
- * if @schema is NULL, then RelaxNG validation is desactivated.
- @ The @schema should not be freed until the reader is deallocated
- * or its use has been deactivated.
- *
- * Returns 0 in case the RelaxNG validation could be (des)activated and
- * -1 in case of error.
- */
-int
-xmlTextReaderRelaxNGSetSchema(xmlTextReaderPtr reader, xmlRelaxNGPtr schema) {
- if (reader == NULL)
- return(-1);
- if (schema == NULL) {
- if (reader->rngSchemas != NULL) {
- xmlRelaxNGFree(reader->rngSchemas);
- reader->rngSchemas = NULL;
- }
- if (reader->rngValidCtxt != NULL) {
- if (! reader->rngPreserveCtxt)
- xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
- reader->rngValidCtxt = NULL;
- }
- reader->rngPreserveCtxt = 0;
- return(0);
- }
- if (reader->mode != XML_TEXTREADER_MODE_INITIAL)
- return(-1);
- if (reader->rngSchemas != NULL) {
- xmlRelaxNGFree(reader->rngSchemas);
- reader->rngSchemas = NULL;
- }
- if (reader->rngValidCtxt != NULL) {
- if (! reader->rngPreserveCtxt)
- xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
- reader->rngValidCtxt = NULL;
- }
- reader->rngPreserveCtxt = 0;
- reader->rngValidCtxt = xmlRelaxNGNewValidCtxt(schema);
- if (reader->rngValidCtxt == NULL)
- return(-1);
- if (reader->errorFunc != NULL) {
- xmlRelaxNGSetValidErrors(reader->rngValidCtxt,
- xmlTextReaderValidityErrorRelay,
- xmlTextReaderValidityWarningRelay,
- reader);
- }
- if (reader->sErrorFunc != NULL) {
- xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt,
- xmlTextReaderValidityStructuredRelay,
- reader);
- }
- reader->rngValidErrors = 0;
- reader->rngFullNode = NULL;
- reader->validate = XML_TEXTREADER_VALIDATE_RNG;
- return(0);
-}
-
-/**
- * xmlTextReaderLocator:
- * @ctx: the xmlTextReaderPtr used
- * @file: returned file information
- * @line: returned line information
- *
- * Internal locator function for the readers
- *
- * Returns 0 in case the Schema validation could be (des)activated and
- * -1 in case of error.
- */
-static int
-xmlTextReaderLocator(void *ctx, const char **file, unsigned long *line) {
- xmlTextReaderPtr reader;
-
- if ((ctx == NULL) || ((file == NULL) && (line == NULL)))
- return(-1);
-
- if (file != NULL)
- *file = NULL;
- if (line != NULL)
- *line = 0;
-
- reader = (xmlTextReaderPtr) ctx;
- if ((reader->ctxt != NULL) && (reader->ctxt->input != NULL)) {
- if (file != NULL)
- *file = reader->ctxt->input->filename;
- if (line != NULL)
- *line = reader->ctxt->input->line;
- return(0);
- }
- if (reader->node != NULL) {
- long res;
- int ret = 0;
-
- if (line != NULL) {
- res = xmlGetLineNo(reader->node);
- if (res > 0)
- *line = (unsigned long) res;
- else
- ret = -1;
- }
- if (file != NULL) {
- xmlDocPtr doc = reader->node->doc;
- if ((doc != NULL) && (doc->URL != NULL))
- *file = (const char *) doc->URL;
- else
- ret = -1;
- }
- return(ret);
- }
- return(-1);
-}
-
-/**
- * xmlTextReaderSetSchema:
- * @reader: the xmlTextReaderPtr used
- * @schema: a precompiled Schema schema
- *
- * Use XSD Schema to validate the document as it is processed.
- * Activation is only possible before the first Read().
- * if @schema is NULL, then Schema validation is desactivated.
- @ The @schema should not be freed until the reader is deallocated
- * or its use has been deactivated.
- *
- * Returns 0 in case the Schema validation could be (des)activated and
- * -1 in case of error.
- */
-int
-xmlTextReaderSetSchema(xmlTextReaderPtr reader, xmlSchemaPtr schema) {
- if (reader == NULL)
- return(-1);
- if (schema == NULL) {
- if (reader->xsdPlug != NULL) {
- xmlSchemaSAXUnplug(reader->xsdPlug);
- reader->xsdPlug = NULL;
- }
- if (reader->xsdValidCtxt != NULL) {
- if (! reader->xsdPreserveCtxt)
- xmlSchemaFreeValidCtxt(reader->xsdValidCtxt);
- reader->xsdValidCtxt = NULL;
- }
- reader->xsdPreserveCtxt = 0;
- if (reader->xsdSchemas != NULL) {
- xmlSchemaFree(reader->xsdSchemas);
- reader->xsdSchemas = NULL;
- }
- return(0);
- }
- if (reader->mode != XML_TEXTREADER_MODE_INITIAL)
- return(-1);
- if (reader->xsdPlug != NULL) {
- xmlSchemaSAXUnplug(reader->xsdPlug);
- reader->xsdPlug = NULL;
- }
- if (reader->xsdValidCtxt != NULL) {
- if (! reader->xsdPreserveCtxt)
- xmlSchemaFreeValidCtxt(reader->xsdValidCtxt);
- reader->xsdValidCtxt = NULL;
- }
- reader->xsdPreserveCtxt = 0;
- if (reader->xsdSchemas != NULL) {
- xmlSchemaFree(reader->xsdSchemas);
- reader->xsdSchemas = NULL;
- }
- reader->xsdValidCtxt = xmlSchemaNewValidCtxt(schema);
- if (reader->xsdValidCtxt == NULL) {
- xmlSchemaFree(reader->xsdSchemas);
- reader->xsdSchemas = NULL;
- return(-1);
- }
- reader->xsdPlug = xmlSchemaSAXPlug(reader->xsdValidCtxt,
- &(reader->ctxt->sax),
- &(reader->ctxt->userData));
- if (reader->xsdPlug == NULL) {
- xmlSchemaFree(reader->xsdSchemas);
- reader->xsdSchemas = NULL;
- xmlSchemaFreeValidCtxt(reader->xsdValidCtxt);
- reader->xsdValidCtxt = NULL;
- return(-1);
- }
- xmlSchemaValidateSetLocator(reader->xsdValidCtxt,
- xmlTextReaderLocator,
- (void *) reader);
-
- if (reader->errorFunc != NULL) {
- xmlSchemaSetValidErrors(reader->xsdValidCtxt,
- xmlTextReaderValidityErrorRelay,
- xmlTextReaderValidityWarningRelay,
- reader);
- }
- if (reader->sErrorFunc != NULL) {
- xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt,
- xmlTextReaderValidityStructuredRelay,
- reader);
- }
- reader->xsdValidErrors = 0;
- reader->validate = XML_TEXTREADER_VALIDATE_XSD;
- return(0);
-}
-
-/**
- * xmlTextReaderRelaxNGValidateInternal:
- * @reader: the xmlTextReaderPtr used
- * @rng: the path to a RelaxNG schema or NULL
- * @ctxt: the RelaxNG schema validation context or NULL
- * @options: options (not yet used)
- *
- * Use RelaxNG to validate the document as it is processed.
- * Activation is only possible before the first Read().
- * If both @rng and @ctxt are NULL, then RelaxNG validation is deactivated.
- *
- * Returns 0 in case the RelaxNG validation could be (de)activated and
- * -1 in case of error.
- */
-static int
-xmlTextReaderRelaxNGValidateInternal(xmlTextReaderPtr reader,
- const char *rng,
- xmlRelaxNGValidCtxtPtr ctxt,
- int options ATTRIBUTE_UNUSED)
-{
- if (reader == NULL)
- return(-1);
-
- if ((rng != NULL) && (ctxt != NULL))
- return (-1);
-
- if (((rng != NULL) || (ctxt != NULL)) &&
- ((reader->mode != XML_TEXTREADER_MODE_INITIAL) ||
- (reader->ctxt == NULL)))
- return(-1);
-
- /* Cleanup previous validation stuff. */
- if (reader->rngValidCtxt != NULL) {
- if ( !reader->rngPreserveCtxt)
- xmlRelaxNGFreeValidCtxt(reader->rngValidCtxt);
- reader->rngValidCtxt = NULL;
- }
- reader->rngPreserveCtxt = 0;
- if (reader->rngSchemas != NULL) {
- xmlRelaxNGFree(reader->rngSchemas);
- reader->rngSchemas = NULL;
- }
-
- if ((rng == NULL) && (ctxt == NULL)) {
- /* We just want to deactivate the validation, so get out. */
- return(0);
- }
-
-
- if (rng != NULL) {
- xmlRelaxNGParserCtxtPtr pctxt;
- /* Parse the schema and create validation environment. */
-
- pctxt = xmlRelaxNGNewParserCtxt(rng);
- if (reader->errorFunc != NULL) {
- xmlRelaxNGSetParserErrors(pctxt,
- xmlTextReaderValidityErrorRelay,
- xmlTextReaderValidityWarningRelay,
- reader);
- }
- if (reader->sErrorFunc != NULL) {
- xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt,
- xmlTextReaderValidityStructuredRelay,
- reader);
- }
- reader->rngSchemas = xmlRelaxNGParse(pctxt);
- xmlRelaxNGFreeParserCtxt(pctxt);
- if (reader->rngSchemas == NULL)
- return(-1);
- reader->rngValidCtxt = xmlRelaxNGNewValidCtxt(reader->rngSchemas);
- if (reader->rngValidCtxt == NULL) {
- xmlRelaxNGFree(reader->rngSchemas);
- reader->rngSchemas = NULL;
- return(-1);
- }
- } else {
- /* Use the given validation context. */
- reader->rngValidCtxt = ctxt;
- reader->rngPreserveCtxt = 1;
- }
- /*
- * Redirect the validation context's error channels to use
- * the reader channels.
- * TODO: In case the user provides the validation context we
- * could make this redirection optional.
- */
- if (reader->errorFunc != NULL) {
- xmlRelaxNGSetValidErrors(reader->rngValidCtxt,
- xmlTextReaderValidityErrorRelay,
- xmlTextReaderValidityWarningRelay,
- reader);
- }
- if (reader->sErrorFunc != NULL) {
- xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt,
- xmlTextReaderValidityStructuredRelay,
- reader);
- }
- reader->rngValidErrors = 0;
- reader->rngFullNode = NULL;
- reader->validate = XML_TEXTREADER_VALIDATE_RNG;
- return(0);
-}
-
-/**
- * xmlTextReaderSchemaValidateInternal:
- * @reader: the xmlTextReaderPtr used
- * @xsd: the path to a W3C XSD schema or NULL
- * @ctxt: the XML Schema validation context or NULL
- * @options: options (not used yet)
- *
- * Validate the document as it is processed using XML Schema.
- * Activation is only possible before the first Read().
- * If both @xsd and @ctxt are NULL then XML Schema validation is deactivated.
- *
- * Returns 0 in case the schemas validation could be (de)activated and
- * -1 in case of error.
- */
-static int
-xmlTextReaderSchemaValidateInternal(xmlTextReaderPtr reader,
- const char *xsd,
- xmlSchemaValidCtxtPtr ctxt,
- int options ATTRIBUTE_UNUSED)
-{
- if (reader == NULL)
- return(-1);
-
- if ((xsd != NULL) && (ctxt != NULL))
- return(-1);
-
- if (((xsd != NULL) || (ctxt != NULL)) &&
- ((reader->mode != XML_TEXTREADER_MODE_INITIAL) ||
- (reader->ctxt == NULL)))
- return(-1);
-
- /* Cleanup previous validation stuff. */
- if (reader->xsdPlug != NULL) {
- xmlSchemaSAXUnplug(reader->xsdPlug);
- reader->xsdPlug = NULL;
- }
- if (reader->xsdValidCtxt != NULL) {
- if (! reader->xsdPreserveCtxt)
- xmlSchemaFreeValidCtxt(reader->xsdValidCtxt);
- reader->xsdValidCtxt = NULL;
- }
- reader->xsdPreserveCtxt = 0;
- if (reader->xsdSchemas != NULL) {
- xmlSchemaFree(reader->xsdSchemas);
- reader->xsdSchemas = NULL;
- }
-
- if ((xsd == NULL) && (ctxt == NULL)) {
- /* We just want to deactivate the validation, so get out. */
- return(0);
- }
-
- if (xsd != NULL) {
- xmlSchemaParserCtxtPtr pctxt;
- /* Parse the schema and create validation environment. */
- pctxt = xmlSchemaNewParserCtxt(xsd);
- if (reader->errorFunc != NULL) {
- xmlSchemaSetParserErrors(pctxt,
- xmlTextReaderValidityErrorRelay,
- xmlTextReaderValidityWarningRelay,
- reader);
- }
- reader->xsdSchemas = xmlSchemaParse(pctxt);
- xmlSchemaFreeParserCtxt(pctxt);
- if (reader->xsdSchemas == NULL)
- return(-1);
- reader->xsdValidCtxt = xmlSchemaNewValidCtxt(reader->xsdSchemas);
- if (reader->xsdValidCtxt == NULL) {
- xmlSchemaFree(reader->xsdSchemas);
- reader->xsdSchemas = NULL;
- return(-1);
- }
- reader->xsdPlug = xmlSchemaSAXPlug(reader->xsdValidCtxt,
- &(reader->ctxt->sax),
- &(reader->ctxt->userData));
- if (reader->xsdPlug == NULL) {
- xmlSchemaFree(reader->xsdSchemas);
- reader->xsdSchemas = NULL;
- xmlSchemaFreeValidCtxt(reader->xsdValidCtxt);
- reader->xsdValidCtxt = NULL;
- return(-1);
- }
- } else {
- /* Use the given validation context. */
- reader->xsdValidCtxt = ctxt;
- reader->xsdPreserveCtxt = 1;
- reader->xsdPlug = xmlSchemaSAXPlug(reader->xsdValidCtxt,
- &(reader->ctxt->sax),
- &(reader->ctxt->userData));
- if (reader->xsdPlug == NULL) {
- reader->xsdValidCtxt = NULL;
- reader->xsdPreserveCtxt = 0;
- return(-1);
- }
- }
- xmlSchemaValidateSetLocator(reader->xsdValidCtxt,
- xmlTextReaderLocator,
- (void *) reader);
- /*
- * Redirect the validation context's error channels to use
- * the reader channels.
- * TODO: In case the user provides the validation context we
- * could make this redirection optional.
- */
- if (reader->errorFunc != NULL) {
- xmlSchemaSetValidErrors(reader->xsdValidCtxt,
- xmlTextReaderValidityErrorRelay,
- xmlTextReaderValidityWarningRelay,
- reader);
- }
- if (reader->sErrorFunc != NULL) {
- xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt,
- xmlTextReaderValidityStructuredRelay,
- reader);
- }
- reader->xsdValidErrors = 0;
- reader->validate = XML_TEXTREADER_VALIDATE_XSD;
- return(0);
-}
-
-/**
- * xmlTextReaderSchemaValidateCtxt:
- * @reader: the xmlTextReaderPtr used
- * @ctxt: the XML Schema validation context or NULL
- * @options: options (not used yet)
- *
- * Use W3C XSD schema context to validate the document as it is processed.
- * Activation is only possible before the first Read().
- * If @ctxt is NULL, then XML Schema validation is deactivated.
- *
- * Returns 0 in case the schemas validation could be (de)activated and
- * -1 in case of error.
- */
-int
-xmlTextReaderSchemaValidateCtxt(xmlTextReaderPtr reader,
- xmlSchemaValidCtxtPtr ctxt,
- int options)
-{
- return(xmlTextReaderSchemaValidateInternal(reader, NULL, ctxt, options));
-}
-
-/**
- * xmlTextReaderSchemaValidate:
- * @reader: the xmlTextReaderPtr used
- * @xsd: the path to a W3C XSD schema or NULL
- *
- * Use W3C XSD schema to validate the document as it is processed.
- * Activation is only possible before the first Read().
- * If @xsd is NULL, then XML Schema validation is deactivated.
- *
- * Returns 0 in case the schemas validation could be (de)activated and
- * -1 in case of error.
- */
-int
-xmlTextReaderSchemaValidate(xmlTextReaderPtr reader, const char *xsd)
-{
- return(xmlTextReaderSchemaValidateInternal(reader, xsd, NULL, 0));
-}
-
-/**
- * xmlTextReaderRelaxNGValidateCtxt:
- * @reader: the xmlTextReaderPtr used
- * @ctxt: the RelaxNG schema validation context or NULL
- * @options: options (not used yet)
- *
- * Use RelaxNG schema context to validate the document as it is processed.
- * Activation is only possible before the first Read().
- * If @ctxt is NULL, then RelaxNG schema validation is deactivated.
- *
- * Returns 0 in case the schemas validation could be (de)activated and
- * -1 in case of error.
- */
-int
-xmlTextReaderRelaxNGValidateCtxt(xmlTextReaderPtr reader,
- xmlRelaxNGValidCtxtPtr ctxt,
- int options)
-{
- return(xmlTextReaderRelaxNGValidateInternal(reader, NULL, ctxt, options));
-}
-
-/**
- * xmlTextReaderRelaxNGValidate:
- * @reader: the xmlTextReaderPtr used
- * @rng: the path to a RelaxNG schema or NULL
- *
- * Use RelaxNG schema to validate the document as it is processed.
- * Activation is only possible before the first Read().
- * If @rng is NULL, then RelaxNG schema validation is deactivated.
- *
- * Returns 0 in case the schemas validation could be (de)activated and
- * -1 in case of error.
- */
-int
-xmlTextReaderRelaxNGValidate(xmlTextReaderPtr reader, const char *rng)
-{
- return(xmlTextReaderRelaxNGValidateInternal(reader, rng, NULL, 0));
-}
-
-#endif
-
-/**
- * xmlTextReaderIsNamespaceDecl:
- * @reader: the xmlTextReaderPtr used
- *
- * Determine whether the current node is a namespace declaration
- * rather than a regular attribute.
- *
- * Returns 1 if the current node is a namespace declaration, 0 if it
- * is a regular attribute or other type of node, or -1 in case of
- * error.
- */
-int
-xmlTextReaderIsNamespaceDecl(xmlTextReaderPtr reader) {
- xmlNodePtr node;
- if (reader == NULL)
- return(-1);
- if (reader->node == NULL)
- return(-1);
- if (reader->curnode != NULL)
- node = reader->curnode;
- else
- node = reader->node;
-
- if (XML_NAMESPACE_DECL == node->type)
- return(1);
- else
- return(0);
-}
-
-/**
- * xmlTextReaderConstXmlVersion:
- * @reader: the xmlTextReaderPtr used
- *
- * Determine the XML version of the document being read.
- *
- * Returns a string containing the XML version of the document or NULL
- * in case of error. The string is deallocated with the reader.
- */
-const xmlChar *
-xmlTextReaderConstXmlVersion(xmlTextReaderPtr reader) {
- xmlDocPtr doc = NULL;
- if (reader == NULL)
- return(NULL);
- if (reader->doc != NULL)
- doc = reader->doc;
- else if (reader->ctxt != NULL)
- doc = reader->ctxt->myDoc;
- if (doc == NULL)
- return(NULL);
-
- if (doc->version == NULL)
- return(NULL);
- else
- return(CONSTSTR(doc->version));
-}
-
-/**
- * xmlTextReaderStandalone:
- * @reader: the xmlTextReaderPtr used
- *
- * Determine the standalone status of the document being read.
- *
- * Returns 1 if the document was declared to be standalone, 0 if it
- * was declared to be not standalone, or -1 if the document did not
- * specify its standalone status or in case of error.
- */
-int
-xmlTextReaderStandalone(xmlTextReaderPtr reader) {
- xmlDocPtr doc = NULL;
- if (reader == NULL)
- return(-1);
- if (reader->doc != NULL)
- doc = reader->doc;
- else if (reader->ctxt != NULL)
- doc = reader->ctxt->myDoc;
- if (doc == NULL)
- return(-1);
-
- return(doc->standalone);
-}
-
-/************************************************************************
- * *
- * Error Handling Extensions *
- * *
- ************************************************************************/
-
-/* helper to build a xmlMalloc'ed string from a format and va_list */
-static char *
-xmlTextReaderBuildMessage(const char *msg, va_list ap) {
- int size = 0;
- int chars;
- char *larger;
- char *str = NULL;
- va_list aq;
-
- while (1) {
- VA_COPY(aq, ap);
- chars = vsnprintf(str, size, msg, aq);
- va_end(aq);
- if (chars < 0) {
- xmlGenericError(xmlGenericErrorContext, "vsnprintf failed !\n");
- if (str)
- xmlFree(str);
- return NULL;
- }
- if ((chars < size) || (size == MAX_ERR_MSG_SIZE))
- break;
- if (chars < MAX_ERR_MSG_SIZE)
- size = chars + 1;
- else
- size = MAX_ERR_MSG_SIZE;
- if ((larger = (char *) xmlRealloc(str, size)) == NULL) {
- xmlGenericError(xmlGenericErrorContext, "xmlRealloc failed !\n");
- if (str)
- xmlFree(str);
- return NULL;
- }
- str = larger;
- }
-
- return str;
-}
-
-/**
- * xmlTextReaderLocatorLineNumber:
- * @locator: the xmlTextReaderLocatorPtr used
- *
- * Obtain the line number for the given locator.
- *
- * Returns the line number or -1 in case of error.
- */
-int
-xmlTextReaderLocatorLineNumber(xmlTextReaderLocatorPtr locator) {
- /* we know that locator is a xmlParserCtxtPtr */
- xmlParserCtxtPtr ctx = (xmlParserCtxtPtr)locator;
- int ret = -1;
-
- if (locator == NULL)
- return(-1);
- if (ctx->node != NULL) {
- ret = xmlGetLineNo(ctx->node);
- }
- else {
- /* inspired from error.c */
- xmlParserInputPtr input;
- input = ctx->input;
- if ((input->filename == NULL) && (ctx->inputNr > 1))
- input = ctx->inputTab[ctx->inputNr - 2];
- if (input != NULL) {
- ret = input->line;
- }
- else {
- ret = -1;
- }
- }
-
- return ret;
-}
-
-/**
- * xmlTextReaderLocatorBaseURI:
- * @locator: the xmlTextReaderLocatorPtr used
- *
- * Obtain the base URI for the given locator.
- *
- * Returns the base URI or NULL in case of error,
- * if non NULL it need to be freed by the caller.
- */
-xmlChar *
-xmlTextReaderLocatorBaseURI(xmlTextReaderLocatorPtr locator) {
- /* we know that locator is a xmlParserCtxtPtr */
- xmlParserCtxtPtr ctx = (xmlParserCtxtPtr)locator;
- xmlChar *ret = NULL;
-
- if (locator == NULL)
- return(NULL);
- if (ctx->node != NULL) {
- ret = xmlNodeGetBase(NULL,ctx->node);
- }
- else {
- /* inspired from error.c */
- xmlParserInputPtr input;
- input = ctx->input;
- if ((input->filename == NULL) && (ctx->inputNr > 1))
- input = ctx->inputTab[ctx->inputNr - 2];
- if (input != NULL) {
- ret = xmlStrdup(BAD_CAST input->filename);
- }
- else {
- ret = NULL;
- }
- }
-
- return ret;
-}
-
-static void
-xmlTextReaderGenericError(void *ctxt, xmlParserSeverities severity,
- char *str)
-{
- xmlParserCtxtPtr ctx = (xmlParserCtxtPtr) ctxt;
-
- xmlTextReaderPtr reader = (xmlTextReaderPtr) ctx->_private;
-
- if (str != NULL) {
- if (reader->errorFunc)
- reader->errorFunc(reader->errorFuncArg, str, severity,
- (xmlTextReaderLocatorPtr) ctx);
- xmlFree(str);
- }
-}
-
-static void
-xmlTextReaderStructuredError(void *ctxt, xmlErrorPtr error)
-{
- xmlParserCtxtPtr ctx = (xmlParserCtxtPtr) ctxt;
-
- xmlTextReaderPtr reader = (xmlTextReaderPtr) ctx->_private;
-
- if (error && reader->sErrorFunc) {
- reader->sErrorFunc(reader->errorFuncArg, (xmlErrorPtr) error);
- }
-}
-
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-xmlTextReaderError(void *ctxt, const char *msg, ...)
-{
- va_list ap;
-
- va_start(ap, msg);
- xmlTextReaderGenericError(ctxt,
- XML_PARSER_SEVERITY_ERROR,
- xmlTextReaderBuildMessage(msg, ap));
- va_end(ap);
-
-}
-
-static void XMLCDECL LIBXML_ATTR_FORMAT(2,3)
-xmlTextReaderWarning(void *ctxt, const char *msg, ...)
-{
- va_list ap;
-
- va_start(ap, msg);
- xmlTextReaderGenericError(ctxt,
- XML_PARSER_SEVERITY_WARNING,
- xmlTextReaderBuildMessage(msg, ap));
- va_end(ap);
-}
-
-static void XMLCDECL
-xmlTextReaderValidityError(void *ctxt, const char *msg, ...)
-{
- va_list ap;
-
- int len = xmlStrlen((const xmlChar *) msg);
-
- if ((len > 1) && (msg[len - 2] != ':')) {
- /*
- * some callbacks only report locator information:
- * skip them (mimicking behaviour in error.c)
- */
- va_start(ap, msg);
- xmlTextReaderGenericError(ctxt,
- XML_PARSER_SEVERITY_VALIDITY_ERROR,
- xmlTextReaderBuildMessage(msg, ap));
- va_end(ap);
- }
-}
-
-static void XMLCDECL
-xmlTextReaderValidityWarning(void *ctxt, const char *msg, ...)
-{
- va_list ap;
-
- int len = xmlStrlen((const xmlChar *) msg);
-
- if ((len != 0) && (msg[len - 1] != ':')) {
- /*
- * some callbacks only report locator information:
- * skip them (mimicking behaviour in error.c)
- */
- va_start(ap, msg);
- xmlTextReaderGenericError(ctxt,
- XML_PARSER_SEVERITY_VALIDITY_WARNING,
- xmlTextReaderBuildMessage(msg, ap));
- va_end(ap);
- }
-}
-
-/**
- * xmlTextReaderSetErrorHandler:
- * @reader: the xmlTextReaderPtr used
- * @f: the callback function to call on error and warnings
- * @arg: a user argument to pass to the callback function
- *
- * Register a callback function that will be called on error and warnings.
- *
- * If @f is NULL, the default error and warning handlers are restored.
- */
-void
-xmlTextReaderSetErrorHandler(xmlTextReaderPtr reader,
- xmlTextReaderErrorFunc f, void *arg)
-{
- if (f != NULL) {
- reader->ctxt->sax->error = xmlTextReaderError;
- reader->ctxt->sax->serror = NULL;
- reader->ctxt->vctxt.error = xmlTextReaderValidityError;
- reader->ctxt->sax->warning = xmlTextReaderWarning;
- reader->ctxt->vctxt.warning = xmlTextReaderValidityWarning;
- reader->errorFunc = f;
- reader->sErrorFunc = NULL;
- reader->errorFuncArg = arg;
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (reader->rngValidCtxt) {
- xmlRelaxNGSetValidErrors(reader->rngValidCtxt,
- xmlTextReaderValidityErrorRelay,
- xmlTextReaderValidityWarningRelay,
- reader);
- xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt, NULL,
- reader);
- }
- if (reader->xsdValidCtxt) {
- xmlSchemaSetValidErrors(reader->xsdValidCtxt,
- xmlTextReaderValidityErrorRelay,
- xmlTextReaderValidityWarningRelay,
- reader);
- xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt, NULL,
- reader);
- }
-#endif
- } else {
- /* restore defaults */
- reader->ctxt->sax->error = xmlParserError;
- reader->ctxt->vctxt.error = xmlParserValidityError;
- reader->ctxt->sax->warning = xmlParserWarning;
- reader->ctxt->vctxt.warning = xmlParserValidityWarning;
- reader->errorFunc = NULL;
- reader->sErrorFunc = NULL;
- reader->errorFuncArg = NULL;
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (reader->rngValidCtxt) {
- xmlRelaxNGSetValidErrors(reader->rngValidCtxt, NULL, NULL,
- reader);
- xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt, NULL,
- reader);
- }
- if (reader->xsdValidCtxt) {
- xmlSchemaSetValidErrors(reader->xsdValidCtxt, NULL, NULL,
- reader);
- xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt, NULL,
- reader);
- }
-#endif
- }
-}
-
-/**
-* xmlTextReaderSetStructuredErrorHandler:
- * @reader: the xmlTextReaderPtr used
- * @f: the callback function to call on error and warnings
- * @arg: a user argument to pass to the callback function
- *
- * Register a callback function that will be called on error and warnings.
- *
- * If @f is NULL, the default error and warning handlers are restored.
- */
-void
-xmlTextReaderSetStructuredErrorHandler(xmlTextReaderPtr reader,
- xmlStructuredErrorFunc f, void *arg)
-{
- if (f != NULL) {
- reader->ctxt->sax->error = NULL;
- reader->ctxt->sax->serror = xmlTextReaderStructuredError;
- reader->ctxt->vctxt.error = xmlTextReaderValidityError;
- reader->ctxt->sax->warning = xmlTextReaderWarning;
- reader->ctxt->vctxt.warning = xmlTextReaderValidityWarning;
- reader->sErrorFunc = f;
- reader->errorFunc = NULL;
- reader->errorFuncArg = arg;
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (reader->rngValidCtxt) {
- xmlRelaxNGSetValidErrors(reader->rngValidCtxt, NULL, NULL,
- reader);
- xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt,
- xmlTextReaderValidityStructuredRelay,
- reader);
- }
- if (reader->xsdValidCtxt) {
- xmlSchemaSetValidErrors(reader->xsdValidCtxt, NULL, NULL,
- reader);
- xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt,
- xmlTextReaderValidityStructuredRelay,
- reader);
- }
-#endif
- } else {
- /* restore defaults */
- reader->ctxt->sax->error = xmlParserError;
- reader->ctxt->sax->serror = NULL;
- reader->ctxt->vctxt.error = xmlParserValidityError;
- reader->ctxt->sax->warning = xmlParserWarning;
- reader->ctxt->vctxt.warning = xmlParserValidityWarning;
- reader->errorFunc = NULL;
- reader->sErrorFunc = NULL;
- reader->errorFuncArg = NULL;
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (reader->rngValidCtxt) {
- xmlRelaxNGSetValidErrors(reader->rngValidCtxt, NULL, NULL,
- reader);
- xmlRelaxNGSetValidStructuredErrors(reader->rngValidCtxt, NULL,
- reader);
- }
- if (reader->xsdValidCtxt) {
- xmlSchemaSetValidErrors(reader->xsdValidCtxt, NULL, NULL,
- reader);
- xmlSchemaSetValidStructuredErrors(reader->xsdValidCtxt, NULL,
- reader);
- }
-#endif
- }
-}
-
-/**
- * xmlTextReaderIsValid:
- * @reader: the xmlTextReaderPtr used
- *
- * Retrieve the validity status from the parser context
- *
- * Returns the flag value 1 if valid, 0 if no, and -1 in case of error
- */
-int
-xmlTextReaderIsValid(xmlTextReaderPtr reader)
-{
- if (reader == NULL)
- return (-1);
-#ifdef LIBXML_SCHEMAS_ENABLED
- if (reader->validate == XML_TEXTREADER_VALIDATE_RNG)
- return (reader->rngValidErrors == 0);
- if (reader->validate == XML_TEXTREADER_VALIDATE_XSD)
- return (reader->xsdValidErrors == 0);
-#endif
- if ((reader->ctxt != NULL) && (reader->ctxt->validate == 1))
- return (reader->ctxt->valid);
- return (0);
-}
-
-/**
- * xmlTextReaderGetErrorHandler:
- * @reader: the xmlTextReaderPtr used
- * @f: the callback function or NULL is no callback has been registered
- * @arg: a user argument
- *
- * Retrieve the error callback function and user argument.
- */
-void
-xmlTextReaderGetErrorHandler(xmlTextReaderPtr reader,
- xmlTextReaderErrorFunc * f, void **arg)
-{
- if (f != NULL)
- *f = reader->errorFunc;
- if (arg != NULL)
- *arg = reader->errorFuncArg;
-}
-/************************************************************************
- * *
- * New set (2.6.0) of simpler and more flexible APIs *
- * *
- ************************************************************************/
-
-/**
- * xmlTextReaderSetup:
- * @reader: an XML reader
- * @input: xmlParserInputBufferPtr used to feed the reader, will
- * be destroyed with it.
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Setup an XML reader with new options
- *
- * Returns 0 in case of success and -1 in case of error.
- */
-int
-xmlTextReaderSetup(xmlTextReaderPtr reader,
- xmlParserInputBufferPtr input, const char *URL,
- const char *encoding, int options)
-{
- if (reader == NULL) {
- if (input != NULL)
- xmlFreeParserInputBuffer(input);
- return (-1);
- }
-
- /*
- * we force the generation of compact text nodes on the reader
- * since usr applications should never modify the tree
- */
- options |= XML_PARSE_COMPACT;
-
- reader->doc = NULL;
- reader->entNr = 0;
- reader->parserFlags = options;
- reader->validate = XML_TEXTREADER_NOT_VALIDATE;
- if ((input != NULL) && (reader->input != NULL) &&
- (reader->allocs & XML_TEXTREADER_INPUT)) {
- xmlFreeParserInputBuffer(reader->input);
- reader->input = NULL;
- reader->allocs -= XML_TEXTREADER_INPUT;
- }
- if (input != NULL) {
- reader->input = input;
- reader->allocs |= XML_TEXTREADER_INPUT;
- }
- if (reader->buffer == NULL)
- reader->buffer = xmlBufCreateSize(100);
- if (reader->buffer == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlTextReaderSetup : malloc failed\n");
- return (-1);
- }
- /* no operation on a reader should require a huge buffer */
- xmlBufSetAllocationScheme(reader->buffer,
- XML_BUFFER_ALLOC_BOUNDED);
- if (reader->sax == NULL)
- reader->sax = (xmlSAXHandler *) xmlMalloc(sizeof(xmlSAXHandler));
- if (reader->sax == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlTextReaderSetup : malloc failed\n");
- return (-1);
- }
- xmlSAXVersion(reader->sax, 2);
- reader->startElement = reader->sax->startElement;
- reader->sax->startElement = xmlTextReaderStartElement;
- reader->endElement = reader->sax->endElement;
- reader->sax->endElement = xmlTextReaderEndElement;
-#ifdef LIBXML_SAX1_ENABLED
- if (reader->sax->initialized == XML_SAX2_MAGIC) {
-#endif /* LIBXML_SAX1_ENABLED */
- reader->startElementNs = reader->sax->startElementNs;
- reader->sax->startElementNs = xmlTextReaderStartElementNs;
- reader->endElementNs = reader->sax->endElementNs;
- reader->sax->endElementNs = xmlTextReaderEndElementNs;
-#ifdef LIBXML_SAX1_ENABLED
- } else {
- reader->startElementNs = NULL;
- reader->endElementNs = NULL;
- }
-#endif /* LIBXML_SAX1_ENABLED */
- reader->characters = reader->sax->characters;
- reader->sax->characters = xmlTextReaderCharacters;
- reader->sax->ignorableWhitespace = xmlTextReaderCharacters;
- reader->cdataBlock = reader->sax->cdataBlock;
- reader->sax->cdataBlock = xmlTextReaderCDataBlock;
-
- reader->mode = XML_TEXTREADER_MODE_INITIAL;
- reader->node = NULL;
- reader->curnode = NULL;
- if (input != NULL) {
- if (xmlBufUse(reader->input->buffer) < 4) {
- xmlParserInputBufferRead(input, 4);
- }
- if (reader->ctxt == NULL) {
- if (xmlBufUse(reader->input->buffer) >= 4) {
- reader->ctxt = xmlCreatePushParserCtxt(reader->sax, NULL,
- (const char *) xmlBufContent(reader->input->buffer),
- 4, URL);
- reader->base = 0;
- reader->cur = 4;
- } else {
- reader->ctxt =
- xmlCreatePushParserCtxt(reader->sax, NULL, NULL, 0, URL);
- reader->base = 0;
- reader->cur = 0;
- }
- } else {
- xmlParserInputPtr inputStream;
- xmlParserInputBufferPtr buf;
- xmlCharEncoding enc = XML_CHAR_ENCODING_NONE;
-
- xmlCtxtReset(reader->ctxt);
- buf = xmlAllocParserInputBuffer(enc);
- if (buf == NULL) return(-1);
- inputStream = xmlNewInputStream(reader->ctxt);
- if (inputStream == NULL) {
- xmlFreeParserInputBuffer(buf);
- return(-1);
- }
-
- if (URL == NULL)
- inputStream->filename = NULL;
- else
- inputStream->filename = (char *)
- xmlCanonicPath((const xmlChar *) URL);
- inputStream->buf = buf;
- xmlBufResetInput(buf->buffer, inputStream);
-
- inputPush(reader->ctxt, inputStream);
- reader->cur = 0;
- }
- if (reader->ctxt == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlTextReaderSetup : malloc failed\n");
- return (-1);
- }
- }
- if (reader->dict != NULL) {
- if (reader->ctxt->dict != NULL) {
- if (reader->dict != reader->ctxt->dict) {
- xmlDictFree(reader->dict);
- reader->dict = reader->ctxt->dict;
- }
- } else {
- reader->ctxt->dict = reader->dict;
- }
- } else {
- if (reader->ctxt->dict == NULL)
- reader->ctxt->dict = xmlDictCreate();
- reader->dict = reader->ctxt->dict;
- }
- reader->ctxt->_private = reader;
- reader->ctxt->linenumbers = 1;
- reader->ctxt->dictNames = 1;
- /*
- * use the parser dictionary to allocate all elements and attributes names
- */
- reader->ctxt->docdict = 1;
- reader->ctxt->parseMode = XML_PARSE_READER;
-
-#ifdef LIBXML_XINCLUDE_ENABLED
- if (reader->xincctxt != NULL) {
- xmlXIncludeFreeContext(reader->xincctxt);
- reader->xincctxt = NULL;
- }
- if (options & XML_PARSE_XINCLUDE) {
- reader->xinclude = 1;
- reader->xinclude_name = xmlDictLookup(reader->dict, XINCLUDE_NODE, -1);
- options -= XML_PARSE_XINCLUDE;
- } else
- reader->xinclude = 0;
- reader->in_xinclude = 0;
-#endif
-#ifdef LIBXML_PATTERN_ENABLED
- if (reader->patternTab == NULL) {
- reader->patternNr = 0;
- reader->patternMax = 0;
- }
- while (reader->patternNr > 0) {
- reader->patternNr--;
- if (reader->patternTab[reader->patternNr] != NULL) {
- xmlFreePattern(reader->patternTab[reader->patternNr]);
- reader->patternTab[reader->patternNr] = NULL;
- }
- }
-#endif
-
- if (options & XML_PARSE_DTDVALID)
- reader->validate = XML_TEXTREADER_VALIDATE_DTD;
-
- xmlCtxtUseOptions(reader->ctxt, options);
- if (encoding != NULL) {
- xmlCharEncodingHandlerPtr hdlr;
-
- hdlr = xmlFindCharEncodingHandler(encoding);
- if (hdlr != NULL)
- xmlSwitchToEncoding(reader->ctxt, hdlr);
- }
- if ((URL != NULL) && (reader->ctxt->input != NULL) &&
- (reader->ctxt->input->filename == NULL))
- reader->ctxt->input->filename = (char *)
- xmlStrdup((const xmlChar *) URL);
-
- reader->doc = NULL;
-
- return (0);
-}
-
-/**
- * xmlTextReaderByteConsumed:
- * @reader: an XML reader
- *
- * This function provides the current index of the parser used
- * by the reader, relative to the start of the current entity.
- * This function actually just wraps a call to xmlBytesConsumed()
- * for the parser context associated with the reader.
- * See xmlBytesConsumed() for more information.
- *
- * Returns the index in bytes from the beginning of the entity or -1
- * in case the index could not be computed.
- */
-long
-xmlTextReaderByteConsumed(xmlTextReaderPtr reader) {
- if ((reader == NULL) || (reader->ctxt == NULL))
- return(-1);
- return(xmlByteConsumed(reader->ctxt));
-}
-
-
-/**
- * xmlReaderWalker:
- * @doc: a preparsed document
- *
- * Create an xmltextReader for a preparsed document.
- *
- * Returns the new reader or NULL in case of error.
- */
-xmlTextReaderPtr
-xmlReaderWalker(xmlDocPtr doc)
-{
- xmlTextReaderPtr ret;
-
- if (doc == NULL)
- return(NULL);
-
- ret = xmlMalloc(sizeof(xmlTextReader));
- if (ret == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlNewTextReader : malloc failed\n");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlTextReader));
- ret->entNr = 0;
- ret->input = NULL;
- ret->mode = XML_TEXTREADER_MODE_INITIAL;
- ret->node = NULL;
- ret->curnode = NULL;
- ret->base = 0;
- ret->cur = 0;
- ret->allocs = XML_TEXTREADER_CTXT;
- ret->doc = doc;
- ret->state = XML_TEXTREADER_START;
- ret->dict = xmlDictCreate();
- return(ret);
-}
-
-/**
- * xmlReaderForDoc:
- * @cur: a pointer to a zero terminated string
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Create an xmltextReader for an XML in-memory document.
- * The parsing flags @options are a combination of xmlParserOption.
- *
- * Returns the new reader or NULL in case of error.
- */
-xmlTextReaderPtr
-xmlReaderForDoc(const xmlChar * cur, const char *URL, const char *encoding,
- int options)
-{
- int len;
-
- if (cur == NULL)
- return (NULL);
- len = xmlStrlen(cur);
-
- return (xmlReaderForMemory
- ((const char *) cur, len, URL, encoding, options));
-}
-
-/**
- * xmlReaderForFile:
- * @filename: a file or URL
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML file from the filesystem or the network.
- * The parsing flags @options are a combination of xmlParserOption.
- *
- * Returns the new reader or NULL in case of error.
- */
-xmlTextReaderPtr
-xmlReaderForFile(const char *filename, const char *encoding, int options)
-{
- xmlTextReaderPtr reader;
-
- reader = xmlNewTextReaderFilename(filename);
- if (reader == NULL)
- return (NULL);
- xmlTextReaderSetup(reader, NULL, NULL, encoding, options);
- return (reader);
-}
-
-/**
- * xmlReaderForMemory:
- * @buffer: a pointer to a char array
- * @size: the size of the array
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Create an xmltextReader for an XML in-memory document.
- * The parsing flags @options are a combination of xmlParserOption.
- *
- * Returns the new reader or NULL in case of error.
- */
-xmlTextReaderPtr
-xmlReaderForMemory(const char *buffer, int size, const char *URL,
- const char *encoding, int options)
-{
- xmlTextReaderPtr reader;
- xmlParserInputBufferPtr buf;
-
- buf = xmlParserInputBufferCreateStatic(buffer, size,
- XML_CHAR_ENCODING_NONE);
- if (buf == NULL) {
- return (NULL);
- }
- reader = xmlNewTextReader(buf, URL);
- if (reader == NULL) {
- xmlFreeParserInputBuffer(buf);
- return (NULL);
- }
- reader->allocs |= XML_TEXTREADER_INPUT;
- xmlTextReaderSetup(reader, NULL, URL, encoding, options);
- return (reader);
-}
-
-/**
- * xmlReaderForFd:
- * @fd: an open file descriptor
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Create an xmltextReader for an XML from a file descriptor.
- * The parsing flags @options are a combination of xmlParserOption.
- * NOTE that the file descriptor will not be closed when the
- * reader is closed or reset.
- *
- * Returns the new reader or NULL in case of error.
- */
-xmlTextReaderPtr
-xmlReaderForFd(int fd, const char *URL, const char *encoding, int options)
-{
- xmlTextReaderPtr reader;
- xmlParserInputBufferPtr input;
-
- if (fd < 0)
- return (NULL);
-
- input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return (NULL);
- input->closecallback = NULL;
- reader = xmlNewTextReader(input, URL);
- if (reader == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- reader->allocs |= XML_TEXTREADER_INPUT;
- xmlTextReaderSetup(reader, NULL, URL, encoding, options);
- return (reader);
-}
-
-/**
- * xmlReaderForIO:
- * @ioread: an I/O read function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Create an xmltextReader for an XML document from I/O functions and source.
- * The parsing flags @options are a combination of xmlParserOption.
- *
- * Returns the new reader or NULL in case of error.
- */
-xmlTextReaderPtr
-xmlReaderForIO(xmlInputReadCallback ioread, xmlInputCloseCallback ioclose,
- void *ioctx, const char *URL, const char *encoding,
- int options)
-{
- xmlTextReaderPtr reader;
- xmlParserInputBufferPtr input;
-
- if (ioread == NULL)
- return (NULL);
-
- input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- if (ioclose != NULL)
- ioclose(ioctx);
- return (NULL);
- }
- reader = xmlNewTextReader(input, URL);
- if (reader == NULL) {
- xmlFreeParserInputBuffer(input);
- return (NULL);
- }
- reader->allocs |= XML_TEXTREADER_INPUT;
- xmlTextReaderSetup(reader, NULL, URL, encoding, options);
- return (reader);
-}
-
-/**
- * xmlReaderNewWalker:
- * @reader: an XML reader
- * @doc: a preparsed document
- *
- * Setup an xmltextReader to parse a preparsed XML document.
- * This reuses the existing @reader xmlTextReader.
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-xmlReaderNewWalker(xmlTextReaderPtr reader, xmlDocPtr doc)
-{
- if (doc == NULL)
- return (-1);
- if (reader == NULL)
- return (-1);
-
- if (reader->input != NULL) {
- xmlFreeParserInputBuffer(reader->input);
- }
- if (reader->ctxt != NULL) {
- xmlCtxtReset(reader->ctxt);
- }
-
- reader->entNr = 0;
- reader->input = NULL;
- reader->mode = XML_TEXTREADER_MODE_INITIAL;
- reader->node = NULL;
- reader->curnode = NULL;
- reader->base = 0;
- reader->cur = 0;
- reader->allocs = XML_TEXTREADER_CTXT;
- reader->doc = doc;
- reader->state = XML_TEXTREADER_START;
- if (reader->dict == NULL) {
- if ((reader->ctxt != NULL) && (reader->ctxt->dict != NULL))
- reader->dict = reader->ctxt->dict;
- else
- reader->dict = xmlDictCreate();
- }
- return(0);
-}
-
-/**
- * xmlReaderNewDoc:
- * @reader: an XML reader
- * @cur: a pointer to a zero terminated string
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Setup an xmltextReader to parse an XML in-memory document.
- * The parsing flags @options are a combination of xmlParserOption.
- * This reuses the existing @reader xmlTextReader.
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-xmlReaderNewDoc(xmlTextReaderPtr reader, const xmlChar * cur,
- const char *URL, const char *encoding, int options)
-{
-
- int len;
-
- if (cur == NULL)
- return (-1);
- if (reader == NULL)
- return (-1);
-
- len = xmlStrlen(cur);
- return (xmlReaderNewMemory(reader, (const char *)cur, len,
- URL, encoding, options));
-}
-
-/**
- * xmlReaderNewFile:
- * @reader: an XML reader
- * @filename: a file or URL
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * parse an XML file from the filesystem or the network.
- * The parsing flags @options are a combination of xmlParserOption.
- * This reuses the existing @reader xmlTextReader.
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-xmlReaderNewFile(xmlTextReaderPtr reader, const char *filename,
- const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
-
- if (filename == NULL)
- return (-1);
- if (reader == NULL)
- return (-1);
-
- input =
- xmlParserInputBufferCreateFilename(filename,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return (-1);
- return (xmlTextReaderSetup(reader, input, filename, encoding, options));
-}
-
-/**
- * xmlReaderNewMemory:
- * @reader: an XML reader
- * @buffer: a pointer to a char array
- * @size: the size of the array
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Setup an xmltextReader to parse an XML in-memory document.
- * The parsing flags @options are a combination of xmlParserOption.
- * This reuses the existing @reader xmlTextReader.
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-xmlReaderNewMemory(xmlTextReaderPtr reader, const char *buffer, int size,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
-
- if (reader == NULL)
- return (-1);
- if (buffer == NULL)
- return (-1);
-
- input = xmlParserInputBufferCreateStatic(buffer, size,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- return (-1);
- }
- return (xmlTextReaderSetup(reader, input, URL, encoding, options));
-}
-
-/**
- * xmlReaderNewFd:
- * @reader: an XML reader
- * @fd: an open file descriptor
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Setup an xmltextReader to parse an XML from a file descriptor.
- * NOTE that the file descriptor will not be closed when the
- * reader is closed or reset.
- * The parsing flags @options are a combination of xmlParserOption.
- * This reuses the existing @reader xmlTextReader.
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-xmlReaderNewFd(xmlTextReaderPtr reader, int fd,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
-
- if (fd < 0)
- return (-1);
- if (reader == NULL)
- return (-1);
-
- input = xmlParserInputBufferCreateFd(fd, XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return (-1);
- input->closecallback = NULL;
- return (xmlTextReaderSetup(reader, input, URL, encoding, options));
-}
-
-/**
- * xmlReaderNewIO:
- * @reader: an XML reader
- * @ioread: an I/O read function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @URL: the base URL to use for the document
- * @encoding: the document encoding, or NULL
- * @options: a combination of xmlParserOption
- *
- * Setup an xmltextReader to parse an XML document from I/O functions
- * and source.
- * The parsing flags @options are a combination of xmlParserOption.
- * This reuses the existing @reader xmlTextReader.
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-xmlReaderNewIO(xmlTextReaderPtr reader, xmlInputReadCallback ioread,
- xmlInputCloseCallback ioclose, void *ioctx,
- const char *URL, const char *encoding, int options)
-{
- xmlParserInputBufferPtr input;
-
- if (ioread == NULL)
- return (-1);
- if (reader == NULL)
- return (-1);
-
- input = xmlParserInputBufferCreateIO(ioread, ioclose, ioctx,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL) {
- if (ioclose != NULL)
- ioclose(ioctx);
- return (-1);
- }
- return (xmlTextReaderSetup(reader, input, URL, encoding, options));
-}
-
-/************************************************************************
- * *
- * Utilities *
- * *
- ************************************************************************/
-#ifdef NOT_USED_YET
-
-/**
- * xmlBase64Decode:
- * @in: the input buffer
- * @inlen: the size of the input (in), the size read from it (out)
- * @to: the output buffer
- * @tolen: the size of the output (in), the size written to (out)
- *
- * Base64 decoder, reads from @in and save in @to
- * TODO: tell jody when this is actually exported
- *
- * Returns 0 if all the input was consumer, 1 if the Base64 end was reached,
- * 2 if there wasn't enough space on the output or -1 in case of error.
- */
-static int
-xmlBase64Decode(const unsigned char *in, unsigned long *inlen,
- unsigned char *to, unsigned long *tolen)
-{
- unsigned long incur; /* current index in in[] */
-
- unsigned long inblk; /* last block index in in[] */
-
- unsigned long outcur; /* current index in out[] */
-
- unsigned long inmax; /* size of in[] */
-
- unsigned long outmax; /* size of out[] */
-
- unsigned char cur; /* the current value read from in[] */
-
- unsigned char intmp[4], outtmp[4]; /* temporary buffers for the convert */
-
- int nbintmp; /* number of byte in intmp[] */
-
- int is_ignore; /* cur should be ignored */
-
- int is_end = 0; /* the end of the base64 was found */
-
- int retval = 1;
-
- int i;
-
- if ((in == NULL) || (inlen == NULL) || (to == NULL) || (tolen == NULL))
- return (-1);
-
- incur = 0;
- inblk = 0;
- outcur = 0;
- inmax = *inlen;
- outmax = *tolen;
- nbintmp = 0;
-
- while (1) {
- if (incur >= inmax)
- break;
- cur = in[incur++];
- is_ignore = 0;
- if ((cur >= 'A') && (cur <= 'Z'))
- cur = cur - 'A';
- else if ((cur >= 'a') && (cur <= 'z'))
- cur = cur - 'a' + 26;
- else if ((cur >= '0') && (cur <= '9'))
- cur = cur - '0' + 52;
- else if (cur == '+')
- cur = 62;
- else if (cur == '/')
- cur = 63;
- else if (cur == '.')
- cur = 0;
- else if (cur == '=') /*no op , end of the base64 stream */
- is_end = 1;
- else {
- is_ignore = 1;
- if (nbintmp == 0)
- inblk = incur;
- }
-
- if (!is_ignore) {
- int nbouttmp = 3;
-
- int is_break = 0;
-
- if (is_end) {
- if (nbintmp == 0)
- break;
- if ((nbintmp == 1) || (nbintmp == 2))
- nbouttmp = 1;
- else
- nbouttmp = 2;
- nbintmp = 3;
- is_break = 1;
- }
- intmp[nbintmp++] = cur;
- /*
- * if intmp is full, push the 4byte sequence as a 3 byte
- * sequence out
- */
- if (nbintmp == 4) {
- nbintmp = 0;
- outtmp[0] = (intmp[0] << 2) | ((intmp[1] & 0x30) >> 4);
- outtmp[1] =
- ((intmp[1] & 0x0F) << 4) | ((intmp[2] & 0x3C) >> 2);
- outtmp[2] = ((intmp[2] & 0x03) << 6) | (intmp[3] & 0x3F);
- if (outcur + 3 >= outmax) {
- retval = 2;
- break;
- }
-
- for (i = 0; i < nbouttmp; i++)
- to[outcur++] = outtmp[i];
- inblk = incur;
- }
-
- if (is_break) {
- retval = 0;
- break;
- }
- }
- }
-
- *tolen = outcur;
- *inlen = inblk;
- return (retval);
-}
-
-/*
- * Test routine for the xmlBase64Decode function
- */
-#if 0
-int
-main(int argc, char **argv)
-{
- char *input = " VW4 gcGV0 \n aXQgdGVzdCAuCg== ";
-
- char output[100];
-
- char output2[100];
-
- char output3[100];
-
- unsigned long inlen = strlen(input);
-
- unsigned long outlen = 100;
-
- int ret;
-
- unsigned long cons, tmp, tmp2, prod;
-
- /*
- * Direct
- */
- ret = xmlBase64Decode(input, &inlen, output, &outlen);
-
- output[outlen] = 0;
- printf("ret: %d, inlen: %ld , outlen: %ld, output: '%s'\n", ret, inlen,
- outlen, output)indent: Standard input:179: Error:Unmatched #endif
-;
-
- /*
- * output chunking
- */
- cons = 0;
- prod = 0;
- while (cons < inlen) {
- tmp = 5;
- tmp2 = inlen - cons;
-
- printf("%ld %ld\n", cons, prod);
- ret = xmlBase64Decode(&input[cons], &tmp2, &output2[prod], &tmp);
- cons += tmp2;
- prod += tmp;
- printf("%ld %ld\n", cons, prod);
- }
- output2[outlen] = 0;
- printf("ret: %d, cons: %ld , prod: %ld, output: '%s'\n", ret, cons,
- prod, output2);
-
- /*
- * input chunking
- */
- cons = 0;
- prod = 0;
- while (cons < inlen) {
- tmp = 100 - prod;
- tmp2 = inlen - cons;
- if (tmp2 > 5)
- tmp2 = 5;
-
- printf("%ld %ld\n", cons, prod);
- ret = xmlBase64Decode(&input[cons], &tmp2, &output3[prod], &tmp);
- cons += tmp2;
- prod += tmp;
- printf("%ld %ld\n", cons, prod);
- }
- output3[outlen] = 0;
- printf("ret: %d, cons: %ld , prod: %ld, output: '%s'\n", ret, cons,
- prod, output3);
- return (0);
-
-}
-#endif
-#endif /* NOT_USED_YET */
-#define bottom_xmlreader
-#include "elfgcchack.h"
-#endif /* LIBXML_READER_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/xmlregexp.c b/external/libxml2_android/jni/libxml2/xmlregexp.c
deleted file mode 100644
index 7dc6eeaf..00000000
--- a/external/libxml2_android/jni/libxml2/xmlregexp.c
+++ /dev/null
@@ -1,8174 +0,0 @@
-/*
- * regexp.c: generic and extensible Regular Expression engine
- *
- * Basically designed with the purpose of compiling regexps for
- * the variety of validation/shemas mechanisms now available in
- * XML related specifications these include:
- * - XML-1.0 DTD validation
- * - XML Schemas structure part 1
- * - XML Schemas Datatypes part 2 especially Appendix F
- * - RELAX-NG/TREX i.e. the counter proposal
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_REGEXP_ENABLED
-
-/* #define DEBUG_ERR */
-
-#include <stdio.h>
-#include <string.h>
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include <libxml/tree.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlregexp.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlunicode.h>
-
-#ifndef INT_MAX
-#define INT_MAX 123456789 /* easy to flag and big enough for our needs */
-#endif
-
-/* #define DEBUG_REGEXP_GRAPH */
-/* #define DEBUG_REGEXP_EXEC */
-/* #define DEBUG_PUSH */
-/* #define DEBUG_COMPACTION */
-
-#define MAX_PUSH 10000000
-
-#ifdef ERROR
-#undef ERROR
-#endif
-#define ERROR(str) \
- ctxt->error = XML_REGEXP_COMPILE_ERROR; \
- xmlRegexpErrCompile(ctxt, str);
-#define NEXT ctxt->cur++
-#define CUR (*(ctxt->cur))
-#define NXT(index) (ctxt->cur[index])
-
-#define CUR_SCHAR(s, l) xmlStringCurrentChar(NULL, s, &l)
-#define NEXTL(l) ctxt->cur += l;
-#define XML_REG_STRING_SEPARATOR '|'
-/*
- * Need PREV to check on a '-' within a Character Group. May only be used
- * when it's guaranteed that cur is not at the beginning of ctxt->string!
- */
-#define PREV (ctxt->cur[-1])
-
-/**
- * TODO:
- *
- * macro to flag unimplemented blocks
- */
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-/************************************************************************
- * *
- * Datatypes and structures *
- * *
- ************************************************************************/
-
-/*
- * Note: the order of the enums below is significant, do not shuffle
- */
-typedef enum {
- XML_REGEXP_EPSILON = 1,
- XML_REGEXP_CHARVAL,
- XML_REGEXP_RANGES,
- XML_REGEXP_SUBREG, /* used for () sub regexps */
- XML_REGEXP_STRING,
- XML_REGEXP_ANYCHAR, /* . */
- XML_REGEXP_ANYSPACE, /* \s */
- XML_REGEXP_NOTSPACE, /* \S */
- XML_REGEXP_INITNAME, /* \l */
- XML_REGEXP_NOTINITNAME, /* \L */
- XML_REGEXP_NAMECHAR, /* \c */
- XML_REGEXP_NOTNAMECHAR, /* \C */
- XML_REGEXP_DECIMAL, /* \d */
- XML_REGEXP_NOTDECIMAL, /* \D */
- XML_REGEXP_REALCHAR, /* \w */
- XML_REGEXP_NOTREALCHAR, /* \W */
- XML_REGEXP_LETTER = 100,
- XML_REGEXP_LETTER_UPPERCASE,
- XML_REGEXP_LETTER_LOWERCASE,
- XML_REGEXP_LETTER_TITLECASE,
- XML_REGEXP_LETTER_MODIFIER,
- XML_REGEXP_LETTER_OTHERS,
- XML_REGEXP_MARK,
- XML_REGEXP_MARK_NONSPACING,
- XML_REGEXP_MARK_SPACECOMBINING,
- XML_REGEXP_MARK_ENCLOSING,
- XML_REGEXP_NUMBER,
- XML_REGEXP_NUMBER_DECIMAL,
- XML_REGEXP_NUMBER_LETTER,
- XML_REGEXP_NUMBER_OTHERS,
- XML_REGEXP_PUNCT,
- XML_REGEXP_PUNCT_CONNECTOR,
- XML_REGEXP_PUNCT_DASH,
- XML_REGEXP_PUNCT_OPEN,
- XML_REGEXP_PUNCT_CLOSE,
- XML_REGEXP_PUNCT_INITQUOTE,
- XML_REGEXP_PUNCT_FINQUOTE,
- XML_REGEXP_PUNCT_OTHERS,
- XML_REGEXP_SEPAR,
- XML_REGEXP_SEPAR_SPACE,
- XML_REGEXP_SEPAR_LINE,
- XML_REGEXP_SEPAR_PARA,
- XML_REGEXP_SYMBOL,
- XML_REGEXP_SYMBOL_MATH,
- XML_REGEXP_SYMBOL_CURRENCY,
- XML_REGEXP_SYMBOL_MODIFIER,
- XML_REGEXP_SYMBOL_OTHERS,
- XML_REGEXP_OTHER,
- XML_REGEXP_OTHER_CONTROL,
- XML_REGEXP_OTHER_FORMAT,
- XML_REGEXP_OTHER_PRIVATE,
- XML_REGEXP_OTHER_NA,
- XML_REGEXP_BLOCK_NAME
-} xmlRegAtomType;
-
-typedef enum {
- XML_REGEXP_QUANT_EPSILON = 1,
- XML_REGEXP_QUANT_ONCE,
- XML_REGEXP_QUANT_OPT,
- XML_REGEXP_QUANT_MULT,
- XML_REGEXP_QUANT_PLUS,
- XML_REGEXP_QUANT_ONCEONLY,
- XML_REGEXP_QUANT_ALL,
- XML_REGEXP_QUANT_RANGE
-} xmlRegQuantType;
-
-typedef enum {
- XML_REGEXP_START_STATE = 1,
- XML_REGEXP_FINAL_STATE,
- XML_REGEXP_TRANS_STATE,
- XML_REGEXP_SINK_STATE,
- XML_REGEXP_UNREACH_STATE
-} xmlRegStateType;
-
-typedef enum {
- XML_REGEXP_MARK_NORMAL = 0,
- XML_REGEXP_MARK_START,
- XML_REGEXP_MARK_VISITED
-} xmlRegMarkedType;
-
-typedef struct _xmlRegRange xmlRegRange;
-typedef xmlRegRange *xmlRegRangePtr;
-
-struct _xmlRegRange {
- int neg; /* 0 normal, 1 not, 2 exclude */
- xmlRegAtomType type;
- int start;
- int end;
- xmlChar *blockName;
-};
-
-typedef struct _xmlRegAtom xmlRegAtom;
-typedef xmlRegAtom *xmlRegAtomPtr;
-
-typedef struct _xmlAutomataState xmlRegState;
-typedef xmlRegState *xmlRegStatePtr;
-
-struct _xmlRegAtom {
- int no;
- xmlRegAtomType type;
- xmlRegQuantType quant;
- int min;
- int max;
-
- void *valuep;
- void *valuep2;
- int neg;
- int codepoint;
- xmlRegStatePtr start;
- xmlRegStatePtr start0;
- xmlRegStatePtr stop;
- int maxRanges;
- int nbRanges;
- xmlRegRangePtr *ranges;
- void *data;
-};
-
-typedef struct _xmlRegCounter xmlRegCounter;
-typedef xmlRegCounter *xmlRegCounterPtr;
-
-struct _xmlRegCounter {
- int min;
- int max;
-};
-
-typedef struct _xmlRegTrans xmlRegTrans;
-typedef xmlRegTrans *xmlRegTransPtr;
-
-struct _xmlRegTrans {
- xmlRegAtomPtr atom;
- int to;
- int counter;
- int count;
- int nd;
-};
-
-struct _xmlAutomataState {
- xmlRegStateType type;
- xmlRegMarkedType mark;
- xmlRegMarkedType markd;
- xmlRegMarkedType reached;
- int no;
- int maxTrans;
- int nbTrans;
- xmlRegTrans *trans;
- /* knowing states ponting to us can speed things up */
- int maxTransTo;
- int nbTransTo;
- int *transTo;
-};
-
-typedef struct _xmlAutomata xmlRegParserCtxt;
-typedef xmlRegParserCtxt *xmlRegParserCtxtPtr;
-
-#define AM_AUTOMATA_RNG 1
-
-struct _xmlAutomata {
- xmlChar *string;
- xmlChar *cur;
-
- int error;
- int neg;
-
- xmlRegStatePtr start;
- xmlRegStatePtr end;
- xmlRegStatePtr state;
-
- xmlRegAtomPtr atom;
-
- int maxAtoms;
- int nbAtoms;
- xmlRegAtomPtr *atoms;
-
- int maxStates;
- int nbStates;
- xmlRegStatePtr *states;
-
- int maxCounters;
- int nbCounters;
- xmlRegCounter *counters;
-
- int determinist;
- int negs;
- int flags;
-};
-
-struct _xmlRegexp {
- xmlChar *string;
- int nbStates;
- xmlRegStatePtr *states;
- int nbAtoms;
- xmlRegAtomPtr *atoms;
- int nbCounters;
- xmlRegCounter *counters;
- int determinist;
- int flags;
- /*
- * That's the compact form for determinists automatas
- */
- int nbstates;
- int *compact;
- void **transdata;
- int nbstrings;
- xmlChar **stringMap;
-};
-
-typedef struct _xmlRegExecRollback xmlRegExecRollback;
-typedef xmlRegExecRollback *xmlRegExecRollbackPtr;
-
-struct _xmlRegExecRollback {
- xmlRegStatePtr state;/* the current state */
- int index; /* the index in the input stack */
- int nextbranch; /* the next transition to explore in that state */
- int *counts; /* save the automata state if it has some */
-};
-
-typedef struct _xmlRegInputToken xmlRegInputToken;
-typedef xmlRegInputToken *xmlRegInputTokenPtr;
-
-struct _xmlRegInputToken {
- xmlChar *value;
- void *data;
-};
-
-struct _xmlRegExecCtxt {
- int status; /* execution status != 0 indicate an error */
- int determinist; /* did we find an indeterministic behaviour */
- xmlRegexpPtr comp; /* the compiled regexp */
- xmlRegExecCallbacks callback;
- void *data;
-
- xmlRegStatePtr state;/* the current state */
- int transno; /* the current transition on that state */
- int transcount; /* the number of chars in char counted transitions */
-
- /*
- * A stack of rollback states
- */
- int maxRollbacks;
- int nbRollbacks;
- xmlRegExecRollback *rollbacks;
-
- /*
- * The state of the automata if any
- */
- int *counts;
-
- /*
- * The input stack
- */
- int inputStackMax;
- int inputStackNr;
- int index;
- int *charStack;
- const xmlChar *inputString; /* when operating on characters */
- xmlRegInputTokenPtr inputStack;/* when operating on strings */
-
- /*
- * error handling
- */
- int errStateNo; /* the error state number */
- xmlRegStatePtr errState; /* the error state */
- xmlChar *errString; /* the string raising the error */
- int *errCounts; /* counters at the error state */
- int nbPush;
-};
-
-#define REGEXP_ALL_COUNTER 0x123456
-#define REGEXP_ALL_LAX_COUNTER 0x123457
-
-static void xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top);
-static void xmlRegFreeState(xmlRegStatePtr state);
-static void xmlRegFreeAtom(xmlRegAtomPtr atom);
-static int xmlRegStrEqualWildcard(const xmlChar *expStr, const xmlChar *valStr);
-static int xmlRegCheckCharacter(xmlRegAtomPtr atom, int codepoint);
-static int xmlRegCheckCharacterRange(xmlRegAtomType type, int codepoint,
- int neg, int start, int end, const xmlChar *blockName);
-
-void xmlAutomataSetFlags(xmlAutomataPtr am, int flags);
-
-/************************************************************************
- * *
- * Regexp memory error handler *
- * *
- ************************************************************************/
-/**
- * xmlRegexpErrMemory:
- * @extra: extra information
- *
- * Handle an out of memory condition
- */
-static void
-xmlRegexpErrMemory(xmlRegParserCtxtPtr ctxt, const char *extra)
-{
- const char *regexp = NULL;
- if (ctxt != NULL) {
- regexp = (const char *) ctxt->string;
- ctxt->error = XML_ERR_NO_MEMORY;
- }
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0, extra,
- regexp, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlRegexpErrCompile:
- * @extra: extra information
- *
- * Handle a compilation failure
- */
-static void
-xmlRegexpErrCompile(xmlRegParserCtxtPtr ctxt, const char *extra)
-{
- const char *regexp = NULL;
- int idx = 0;
-
- if (ctxt != NULL) {
- regexp = (const char *) ctxt->string;
- idx = ctxt->cur - ctxt->string;
- ctxt->error = XML_REGEXP_COMPILE_ERROR;
- }
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_REGEXP,
- XML_REGEXP_COMPILE_ERROR, XML_ERR_FATAL, NULL, 0, extra,
- regexp, NULL, idx, 0,
- "failed to compile: %s\n", extra);
-}
-
-/************************************************************************
- * *
- * Allocation/Deallocation *
- * *
- ************************************************************************/
-
-static int xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt);
-/**
- * xmlRegEpxFromParse:
- * @ctxt: the parser context used to build it
- *
- * Allocate a new regexp and fill it with the result from the parser
- *
- * Returns the new regexp or NULL in case of error
- */
-static xmlRegexpPtr
-xmlRegEpxFromParse(xmlRegParserCtxtPtr ctxt) {
- xmlRegexpPtr ret;
-
- ret = (xmlRegexpPtr) xmlMalloc(sizeof(xmlRegexp));
- if (ret == NULL) {
- xmlRegexpErrMemory(ctxt, "compiling regexp");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlRegexp));
- ret->string = ctxt->string;
- ret->nbStates = ctxt->nbStates;
- ret->states = ctxt->states;
- ret->nbAtoms = ctxt->nbAtoms;
- ret->atoms = ctxt->atoms;
- ret->nbCounters = ctxt->nbCounters;
- ret->counters = ctxt->counters;
- ret->determinist = ctxt->determinist;
- ret->flags = ctxt->flags;
- if (ret->determinist == -1) {
- xmlRegexpIsDeterminist(ret);
- }
-
- if ((ret->determinist != 0) &&
- (ret->nbCounters == 0) &&
- (ctxt->negs == 0) &&
- (ret->atoms != NULL) &&
- (ret->atoms[0] != NULL) &&
- (ret->atoms[0]->type == XML_REGEXP_STRING)) {
- int i, j, nbstates = 0, nbatoms = 0;
- int *stateRemap;
- int *stringRemap;
- int *transitions;
- void **transdata;
- xmlChar **stringMap;
- xmlChar *value;
-
- /*
- * Switch to a compact representation
- * 1/ counting the effective number of states left
- * 2/ counting the unique number of atoms, and check that
- * they are all of the string type
- * 3/ build a table state x atom for the transitions
- */
-
- stateRemap = xmlMalloc(ret->nbStates * sizeof(int));
- if (stateRemap == NULL) {
- xmlRegexpErrMemory(ctxt, "compiling regexp");
- xmlFree(ret);
- return(NULL);
- }
- for (i = 0;i < ret->nbStates;i++) {
- if (ret->states[i] != NULL) {
- stateRemap[i] = nbstates;
- nbstates++;
- } else {
- stateRemap[i] = -1;
- }
- }
-#ifdef DEBUG_COMPACTION
- printf("Final: %d states\n", nbstates);
-#endif
- stringMap = xmlMalloc(ret->nbAtoms * sizeof(char *));
- if (stringMap == NULL) {
- xmlRegexpErrMemory(ctxt, "compiling regexp");
- xmlFree(stateRemap);
- xmlFree(ret);
- return(NULL);
- }
- stringRemap = xmlMalloc(ret->nbAtoms * sizeof(int));
- if (stringRemap == NULL) {
- xmlRegexpErrMemory(ctxt, "compiling regexp");
- xmlFree(stringMap);
- xmlFree(stateRemap);
- xmlFree(ret);
- return(NULL);
- }
- for (i = 0;i < ret->nbAtoms;i++) {
- if ((ret->atoms[i]->type == XML_REGEXP_STRING) &&
- (ret->atoms[i]->quant == XML_REGEXP_QUANT_ONCE)) {
- value = ret->atoms[i]->valuep;
- for (j = 0;j < nbatoms;j++) {
- if (xmlStrEqual(stringMap[j], value)) {
- stringRemap[i] = j;
- break;
- }
- }
- if (j >= nbatoms) {
- stringRemap[i] = nbatoms;
- stringMap[nbatoms] = xmlStrdup(value);
- if (stringMap[nbatoms] == NULL) {
- for (i = 0;i < nbatoms;i++)
- xmlFree(stringMap[i]);
- xmlFree(stringRemap);
- xmlFree(stringMap);
- xmlFree(stateRemap);
- xmlFree(ret);
- return(NULL);
- }
- nbatoms++;
- }
- } else {
- xmlFree(stateRemap);
- xmlFree(stringRemap);
- for (i = 0;i < nbatoms;i++)
- xmlFree(stringMap[i]);
- xmlFree(stringMap);
- xmlFree(ret);
- return(NULL);
- }
- }
-#ifdef DEBUG_COMPACTION
- printf("Final: %d atoms\n", nbatoms);
-#endif
- transitions = (int *) xmlMalloc((nbstates + 1) *
- (nbatoms + 1) * sizeof(int));
- if (transitions == NULL) {
- xmlFree(stateRemap);
- xmlFree(stringRemap);
- xmlFree(stringMap);
- xmlFree(ret);
- return(NULL);
- }
- memset(transitions, 0, (nbstates + 1) * (nbatoms + 1) * sizeof(int));
-
- /*
- * Allocate the transition table. The first entry for each
- * state corresponds to the state type.
- */
- transdata = NULL;
-
- for (i = 0;i < ret->nbStates;i++) {
- int stateno, atomno, targetno, prev;
- xmlRegStatePtr state;
- xmlRegTransPtr trans;
-
- stateno = stateRemap[i];
- if (stateno == -1)
- continue;
- state = ret->states[i];
-
- transitions[stateno * (nbatoms + 1)] = state->type;
-
- for (j = 0;j < state->nbTrans;j++) {
- trans = &(state->trans[j]);
- if ((trans->to == -1) || (trans->atom == NULL))
- continue;
- atomno = stringRemap[trans->atom->no];
- if ((trans->atom->data != NULL) && (transdata == NULL)) {
- transdata = (void **) xmlMalloc(nbstates * nbatoms *
- sizeof(void *));
- if (transdata != NULL)
- memset(transdata, 0,
- nbstates * nbatoms * sizeof(void *));
- else {
- xmlRegexpErrMemory(ctxt, "compiling regexp");
- break;
- }
- }
- targetno = stateRemap[trans->to];
- /*
- * if the same atom can generate transitions to 2 different
- * states then it means the automata is not determinist and
- * the compact form can't be used !
- */
- prev = transitions[stateno * (nbatoms + 1) + atomno + 1];
- if (prev != 0) {
- if (prev != targetno + 1) {
- ret->determinist = 0;
-#ifdef DEBUG_COMPACTION
- printf("Indet: state %d trans %d, atom %d to %d : %d to %d\n",
- i, j, trans->atom->no, trans->to, atomno, targetno);
- printf(" previous to is %d\n", prev);
-#endif
- if (transdata != NULL)
- xmlFree(transdata);
- xmlFree(transitions);
- xmlFree(stateRemap);
- xmlFree(stringRemap);
- for (i = 0;i < nbatoms;i++)
- xmlFree(stringMap[i]);
- xmlFree(stringMap);
- goto not_determ;
- }
- } else {
-#if 0
- printf("State %d trans %d: atom %d to %d : %d to %d\n",
- i, j, trans->atom->no, trans->to, atomno, targetno);
-#endif
- transitions[stateno * (nbatoms + 1) + atomno + 1] =
- targetno + 1; /* to avoid 0 */
- if (transdata != NULL)
- transdata[stateno * nbatoms + atomno] =
- trans->atom->data;
- }
- }
- }
- ret->determinist = 1;
-#ifdef DEBUG_COMPACTION
- /*
- * Debug
- */
- for (i = 0;i < nbstates;i++) {
- for (j = 0;j < nbatoms + 1;j++) {
- printf("%02d ", transitions[i * (nbatoms + 1) + j]);
- }
- printf("\n");
- }
- printf("\n");
-#endif
- /*
- * Cleanup of the old data
- */
- if (ret->states != NULL) {
- for (i = 0;i < ret->nbStates;i++)
- xmlRegFreeState(ret->states[i]);
- xmlFree(ret->states);
- }
- ret->states = NULL;
- ret->nbStates = 0;
- if (ret->atoms != NULL) {
- for (i = 0;i < ret->nbAtoms;i++)
- xmlRegFreeAtom(ret->atoms[i]);
- xmlFree(ret->atoms);
- }
- ret->atoms = NULL;
- ret->nbAtoms = 0;
-
- ret->compact = transitions;
- ret->transdata = transdata;
- ret->stringMap = stringMap;
- ret->nbstrings = nbatoms;
- ret->nbstates = nbstates;
- xmlFree(stateRemap);
- xmlFree(stringRemap);
- }
-not_determ:
- ctxt->string = NULL;
- ctxt->nbStates = 0;
- ctxt->states = NULL;
- ctxt->nbAtoms = 0;
- ctxt->atoms = NULL;
- ctxt->nbCounters = 0;
- ctxt->counters = NULL;
- return(ret);
-}
-
-/**
- * xmlRegNewParserCtxt:
- * @string: the string to parse
- *
- * Allocate a new regexp parser context
- *
- * Returns the new context or NULL in case of error
- */
-static xmlRegParserCtxtPtr
-xmlRegNewParserCtxt(const xmlChar *string) {
- xmlRegParserCtxtPtr ret;
-
- ret = (xmlRegParserCtxtPtr) xmlMalloc(sizeof(xmlRegParserCtxt));
- if (ret == NULL)
- return(NULL);
- memset(ret, 0, sizeof(xmlRegParserCtxt));
- if (string != NULL)
- ret->string = xmlStrdup(string);
- ret->cur = ret->string;
- ret->neg = 0;
- ret->negs = 0;
- ret->error = 0;
- ret->determinist = -1;
- return(ret);
-}
-
-/**
- * xmlRegNewRange:
- * @ctxt: the regexp parser context
- * @neg: is that negative
- * @type: the type of range
- * @start: the start codepoint
- * @end: the end codepoint
- *
- * Allocate a new regexp range
- *
- * Returns the new range or NULL in case of error
- */
-static xmlRegRangePtr
-xmlRegNewRange(xmlRegParserCtxtPtr ctxt,
- int neg, xmlRegAtomType type, int start, int end) {
- xmlRegRangePtr ret;
-
- ret = (xmlRegRangePtr) xmlMalloc(sizeof(xmlRegRange));
- if (ret == NULL) {
- xmlRegexpErrMemory(ctxt, "allocating range");
- return(NULL);
- }
- ret->neg = neg;
- ret->type = type;
- ret->start = start;
- ret->end = end;
- return(ret);
-}
-
-/**
- * xmlRegFreeRange:
- * @range: the regexp range
- *
- * Free a regexp range
- */
-static void
-xmlRegFreeRange(xmlRegRangePtr range) {
- if (range == NULL)
- return;
-
- if (range->blockName != NULL)
- xmlFree(range->blockName);
- xmlFree(range);
-}
-
-/**
- * xmlRegCopyRange:
- * @range: the regexp range
- *
- * Copy a regexp range
- *
- * Returns the new copy or NULL in case of error.
- */
-static xmlRegRangePtr
-xmlRegCopyRange(xmlRegParserCtxtPtr ctxt, xmlRegRangePtr range) {
- xmlRegRangePtr ret;
-
- if (range == NULL)
- return(NULL);
-
- ret = xmlRegNewRange(ctxt, range->neg, range->type, range->start,
- range->end);
- if (ret == NULL)
- return(NULL);
- if (range->blockName != NULL) {
- ret->blockName = xmlStrdup(range->blockName);
- if (ret->blockName == NULL) {
- xmlRegexpErrMemory(ctxt, "allocating range");
- xmlRegFreeRange(ret);
- return(NULL);
- }
- }
- return(ret);
-}
-
-/**
- * xmlRegNewAtom:
- * @ctxt: the regexp parser context
- * @type: the type of atom
- *
- * Allocate a new atom
- *
- * Returns the new atom or NULL in case of error
- */
-static xmlRegAtomPtr
-xmlRegNewAtom(xmlRegParserCtxtPtr ctxt, xmlRegAtomType type) {
- xmlRegAtomPtr ret;
-
- ret = (xmlRegAtomPtr) xmlMalloc(sizeof(xmlRegAtom));
- if (ret == NULL) {
- xmlRegexpErrMemory(ctxt, "allocating atom");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlRegAtom));
- ret->type = type;
- ret->quant = XML_REGEXP_QUANT_ONCE;
- ret->min = 0;
- ret->max = 0;
- return(ret);
-}
-
-/**
- * xmlRegFreeAtom:
- * @atom: the regexp atom
- *
- * Free a regexp atom
- */
-static void
-xmlRegFreeAtom(xmlRegAtomPtr atom) {
- int i;
-
- if (atom == NULL)
- return;
-
- for (i = 0;i < atom->nbRanges;i++)
- xmlRegFreeRange(atom->ranges[i]);
- if (atom->ranges != NULL)
- xmlFree(atom->ranges);
- if ((atom->type == XML_REGEXP_STRING) && (atom->valuep != NULL))
- xmlFree(atom->valuep);
- if ((atom->type == XML_REGEXP_STRING) && (atom->valuep2 != NULL))
- xmlFree(atom->valuep2);
- if ((atom->type == XML_REGEXP_BLOCK_NAME) && (atom->valuep != NULL))
- xmlFree(atom->valuep);
- xmlFree(atom);
-}
-
-/**
- * xmlRegCopyAtom:
- * @ctxt: the regexp parser context
- * @atom: the oiginal atom
- *
- * Allocate a new regexp range
- *
- * Returns the new atom or NULL in case of error
- */
-static xmlRegAtomPtr
-xmlRegCopyAtom(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) {
- xmlRegAtomPtr ret;
-
- ret = (xmlRegAtomPtr) xmlMalloc(sizeof(xmlRegAtom));
- if (ret == NULL) {
- xmlRegexpErrMemory(ctxt, "copying atom");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlRegAtom));
- ret->type = atom->type;
- ret->quant = atom->quant;
- ret->min = atom->min;
- ret->max = atom->max;
- if (atom->nbRanges > 0) {
- int i;
-
- ret->ranges = (xmlRegRangePtr *) xmlMalloc(sizeof(xmlRegRangePtr) *
- atom->nbRanges);
- if (ret->ranges == NULL) {
- xmlRegexpErrMemory(ctxt, "copying atom");
- goto error;
- }
- for (i = 0;i < atom->nbRanges;i++) {
- ret->ranges[i] = xmlRegCopyRange(ctxt, atom->ranges[i]);
- if (ret->ranges[i] == NULL)
- goto error;
- ret->nbRanges = i + 1;
- }
- }
- return(ret);
-
-error:
- xmlRegFreeAtom(ret);
- return(NULL);
-}
-
-static xmlRegStatePtr
-xmlRegNewState(xmlRegParserCtxtPtr ctxt) {
- xmlRegStatePtr ret;
-
- ret = (xmlRegStatePtr) xmlMalloc(sizeof(xmlRegState));
- if (ret == NULL) {
- xmlRegexpErrMemory(ctxt, "allocating state");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlRegState));
- ret->type = XML_REGEXP_TRANS_STATE;
- ret->mark = XML_REGEXP_MARK_NORMAL;
- return(ret);
-}
-
-/**
- * xmlRegFreeState:
- * @state: the regexp state
- *
- * Free a regexp state
- */
-static void
-xmlRegFreeState(xmlRegStatePtr state) {
- if (state == NULL)
- return;
-
- if (state->trans != NULL)
- xmlFree(state->trans);
- if (state->transTo != NULL)
- xmlFree(state->transTo);
- xmlFree(state);
-}
-
-/**
- * xmlRegFreeParserCtxt:
- * @ctxt: the regexp parser context
- *
- * Free a regexp parser context
- */
-static void
-xmlRegFreeParserCtxt(xmlRegParserCtxtPtr ctxt) {
- int i;
- if (ctxt == NULL)
- return;
-
- if (ctxt->string != NULL)
- xmlFree(ctxt->string);
- if (ctxt->states != NULL) {
- for (i = 0;i < ctxt->nbStates;i++)
- xmlRegFreeState(ctxt->states[i]);
- xmlFree(ctxt->states);
- }
- if (ctxt->atoms != NULL) {
- for (i = 0;i < ctxt->nbAtoms;i++)
- xmlRegFreeAtom(ctxt->atoms[i]);
- xmlFree(ctxt->atoms);
- }
- if (ctxt->counters != NULL)
- xmlFree(ctxt->counters);
- xmlFree(ctxt);
-}
-
-/************************************************************************
- * *
- * Display of Data structures *
- * *
- ************************************************************************/
-
-static void
-xmlRegPrintAtomType(FILE *output, xmlRegAtomType type) {
- switch (type) {
- case XML_REGEXP_EPSILON:
- fprintf(output, "epsilon "); break;
- case XML_REGEXP_CHARVAL:
- fprintf(output, "charval "); break;
- case XML_REGEXP_RANGES:
- fprintf(output, "ranges "); break;
- case XML_REGEXP_SUBREG:
- fprintf(output, "subexpr "); break;
- case XML_REGEXP_STRING:
- fprintf(output, "string "); break;
- case XML_REGEXP_ANYCHAR:
- fprintf(output, "anychar "); break;
- case XML_REGEXP_ANYSPACE:
- fprintf(output, "anyspace "); break;
- case XML_REGEXP_NOTSPACE:
- fprintf(output, "notspace "); break;
- case XML_REGEXP_INITNAME:
- fprintf(output, "initname "); break;
- case XML_REGEXP_NOTINITNAME:
- fprintf(output, "notinitname "); break;
- case XML_REGEXP_NAMECHAR:
- fprintf(output, "namechar "); break;
- case XML_REGEXP_NOTNAMECHAR:
- fprintf(output, "notnamechar "); break;
- case XML_REGEXP_DECIMAL:
- fprintf(output, "decimal "); break;
- case XML_REGEXP_NOTDECIMAL:
- fprintf(output, "notdecimal "); break;
- case XML_REGEXP_REALCHAR:
- fprintf(output, "realchar "); break;
- case XML_REGEXP_NOTREALCHAR:
- fprintf(output, "notrealchar "); break;
- case XML_REGEXP_LETTER:
- fprintf(output, "LETTER "); break;
- case XML_REGEXP_LETTER_UPPERCASE:
- fprintf(output, "LETTER_UPPERCASE "); break;
- case XML_REGEXP_LETTER_LOWERCASE:
- fprintf(output, "LETTER_LOWERCASE "); break;
- case XML_REGEXP_LETTER_TITLECASE:
- fprintf(output, "LETTER_TITLECASE "); break;
- case XML_REGEXP_LETTER_MODIFIER:
- fprintf(output, "LETTER_MODIFIER "); break;
- case XML_REGEXP_LETTER_OTHERS:
- fprintf(output, "LETTER_OTHERS "); break;
- case XML_REGEXP_MARK:
- fprintf(output, "MARK "); break;
- case XML_REGEXP_MARK_NONSPACING:
- fprintf(output, "MARK_NONSPACING "); break;
- case XML_REGEXP_MARK_SPACECOMBINING:
- fprintf(output, "MARK_SPACECOMBINING "); break;
- case XML_REGEXP_MARK_ENCLOSING:
- fprintf(output, "MARK_ENCLOSING "); break;
- case XML_REGEXP_NUMBER:
- fprintf(output, "NUMBER "); break;
- case XML_REGEXP_NUMBER_DECIMAL:
- fprintf(output, "NUMBER_DECIMAL "); break;
- case XML_REGEXP_NUMBER_LETTER:
- fprintf(output, "NUMBER_LETTER "); break;
- case XML_REGEXP_NUMBER_OTHERS:
- fprintf(output, "NUMBER_OTHERS "); break;
- case XML_REGEXP_PUNCT:
- fprintf(output, "PUNCT "); break;
- case XML_REGEXP_PUNCT_CONNECTOR:
- fprintf(output, "PUNCT_CONNECTOR "); break;
- case XML_REGEXP_PUNCT_DASH:
- fprintf(output, "PUNCT_DASH "); break;
- case XML_REGEXP_PUNCT_OPEN:
- fprintf(output, "PUNCT_OPEN "); break;
- case XML_REGEXP_PUNCT_CLOSE:
- fprintf(output, "PUNCT_CLOSE "); break;
- case XML_REGEXP_PUNCT_INITQUOTE:
- fprintf(output, "PUNCT_INITQUOTE "); break;
- case XML_REGEXP_PUNCT_FINQUOTE:
- fprintf(output, "PUNCT_FINQUOTE "); break;
- case XML_REGEXP_PUNCT_OTHERS:
- fprintf(output, "PUNCT_OTHERS "); break;
- case XML_REGEXP_SEPAR:
- fprintf(output, "SEPAR "); break;
- case XML_REGEXP_SEPAR_SPACE:
- fprintf(output, "SEPAR_SPACE "); break;
- case XML_REGEXP_SEPAR_LINE:
- fprintf(output, "SEPAR_LINE "); break;
- case XML_REGEXP_SEPAR_PARA:
- fprintf(output, "SEPAR_PARA "); break;
- case XML_REGEXP_SYMBOL:
- fprintf(output, "SYMBOL "); break;
- case XML_REGEXP_SYMBOL_MATH:
- fprintf(output, "SYMBOL_MATH "); break;
- case XML_REGEXP_SYMBOL_CURRENCY:
- fprintf(output, "SYMBOL_CURRENCY "); break;
- case XML_REGEXP_SYMBOL_MODIFIER:
- fprintf(output, "SYMBOL_MODIFIER "); break;
- case XML_REGEXP_SYMBOL_OTHERS:
- fprintf(output, "SYMBOL_OTHERS "); break;
- case XML_REGEXP_OTHER:
- fprintf(output, "OTHER "); break;
- case XML_REGEXP_OTHER_CONTROL:
- fprintf(output, "OTHER_CONTROL "); break;
- case XML_REGEXP_OTHER_FORMAT:
- fprintf(output, "OTHER_FORMAT "); break;
- case XML_REGEXP_OTHER_PRIVATE:
- fprintf(output, "OTHER_PRIVATE "); break;
- case XML_REGEXP_OTHER_NA:
- fprintf(output, "OTHER_NA "); break;
- case XML_REGEXP_BLOCK_NAME:
- fprintf(output, "BLOCK "); break;
- }
-}
-
-static void
-xmlRegPrintQuantType(FILE *output, xmlRegQuantType type) {
- switch (type) {
- case XML_REGEXP_QUANT_EPSILON:
- fprintf(output, "epsilon "); break;
- case XML_REGEXP_QUANT_ONCE:
- fprintf(output, "once "); break;
- case XML_REGEXP_QUANT_OPT:
- fprintf(output, "? "); break;
- case XML_REGEXP_QUANT_MULT:
- fprintf(output, "* "); break;
- case XML_REGEXP_QUANT_PLUS:
- fprintf(output, "+ "); break;
- case XML_REGEXP_QUANT_RANGE:
- fprintf(output, "range "); break;
- case XML_REGEXP_QUANT_ONCEONLY:
- fprintf(output, "onceonly "); break;
- case XML_REGEXP_QUANT_ALL:
- fprintf(output, "all "); break;
- }
-}
-static void
-xmlRegPrintRange(FILE *output, xmlRegRangePtr range) {
- fprintf(output, " range: ");
- if (range->neg)
- fprintf(output, "negative ");
- xmlRegPrintAtomType(output, range->type);
- fprintf(output, "%c - %c\n", range->start, range->end);
-}
-
-static void
-xmlRegPrintAtom(FILE *output, xmlRegAtomPtr atom) {
- fprintf(output, " atom: ");
- if (atom == NULL) {
- fprintf(output, "NULL\n");
- return;
- }
- if (atom->neg)
- fprintf(output, "not ");
- xmlRegPrintAtomType(output, atom->type);
- xmlRegPrintQuantType(output, atom->quant);
- if (atom->quant == XML_REGEXP_QUANT_RANGE)
- fprintf(output, "%d-%d ", atom->min, atom->max);
- if (atom->type == XML_REGEXP_STRING)
- fprintf(output, "'%s' ", (char *) atom->valuep);
- if (atom->type == XML_REGEXP_CHARVAL)
- fprintf(output, "char %c\n", atom->codepoint);
- else if (atom->type == XML_REGEXP_RANGES) {
- int i;
- fprintf(output, "%d entries\n", atom->nbRanges);
- for (i = 0; i < atom->nbRanges;i++)
- xmlRegPrintRange(output, atom->ranges[i]);
- } else if (atom->type == XML_REGEXP_SUBREG) {
- fprintf(output, "start %d end %d\n", atom->start->no, atom->stop->no);
- } else {
- fprintf(output, "\n");
- }
-}
-
-static void
-xmlRegPrintTrans(FILE *output, xmlRegTransPtr trans) {
- fprintf(output, " trans: ");
- if (trans == NULL) {
- fprintf(output, "NULL\n");
- return;
- }
- if (trans->to < 0) {
- fprintf(output, "removed\n");
- return;
- }
- if (trans->nd != 0) {
- if (trans->nd == 2)
- fprintf(output, "last not determinist, ");
- else
- fprintf(output, "not determinist, ");
- }
- if (trans->counter >= 0) {
- fprintf(output, "counted %d, ", trans->counter);
- }
- if (trans->count == REGEXP_ALL_COUNTER) {
- fprintf(output, "all transition, ");
- } else if (trans->count >= 0) {
- fprintf(output, "count based %d, ", trans->count);
- }
- if (trans->atom == NULL) {
- fprintf(output, "epsilon to %d\n", trans->to);
- return;
- }
- if (trans->atom->type == XML_REGEXP_CHARVAL)
- fprintf(output, "char %c ", trans->atom->codepoint);
- fprintf(output, "atom %d, to %d\n", trans->atom->no, trans->to);
-}
-
-static void
-xmlRegPrintState(FILE *output, xmlRegStatePtr state) {
- int i;
-
- fprintf(output, " state: ");
- if (state == NULL) {
- fprintf(output, "NULL\n");
- return;
- }
- if (state->type == XML_REGEXP_START_STATE)
- fprintf(output, "START ");
- if (state->type == XML_REGEXP_FINAL_STATE)
- fprintf(output, "FINAL ");
-
- fprintf(output, "%d, %d transitions:\n", state->no, state->nbTrans);
- for (i = 0;i < state->nbTrans; i++) {
- xmlRegPrintTrans(output, &(state->trans[i]));
- }
-}
-
-#ifdef DEBUG_REGEXP_GRAPH
-static void
-xmlRegPrintCtxt(FILE *output, xmlRegParserCtxtPtr ctxt) {
- int i;
-
- fprintf(output, " ctxt: ");
- if (ctxt == NULL) {
- fprintf(output, "NULL\n");
- return;
- }
- fprintf(output, "'%s' ", ctxt->string);
- if (ctxt->error)
- fprintf(output, "error ");
- if (ctxt->neg)
- fprintf(output, "neg ");
- fprintf(output, "\n");
- fprintf(output, "%d atoms:\n", ctxt->nbAtoms);
- for (i = 0;i < ctxt->nbAtoms; i++) {
- fprintf(output, " %02d ", i);
- xmlRegPrintAtom(output, ctxt->atoms[i]);
- }
- if (ctxt->atom != NULL) {
- fprintf(output, "current atom:\n");
- xmlRegPrintAtom(output, ctxt->atom);
- }
- fprintf(output, "%d states:", ctxt->nbStates);
- if (ctxt->start != NULL)
- fprintf(output, " start: %d", ctxt->start->no);
- if (ctxt->end != NULL)
- fprintf(output, " end: %d", ctxt->end->no);
- fprintf(output, "\n");
- for (i = 0;i < ctxt->nbStates; i++) {
- xmlRegPrintState(output, ctxt->states[i]);
- }
- fprintf(output, "%d counters:\n", ctxt->nbCounters);
- for (i = 0;i < ctxt->nbCounters; i++) {
- fprintf(output, " %d: min %d max %d\n", i, ctxt->counters[i].min,
- ctxt->counters[i].max);
- }
-}
-#endif
-
-/************************************************************************
- * *
- * Finite Automata structures manipulations *
- * *
- ************************************************************************/
-
-static void
-xmlRegAtomAddRange(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom,
- int neg, xmlRegAtomType type, int start, int end,
- xmlChar *blockName) {
- xmlRegRangePtr range;
-
- if (atom == NULL) {
- ERROR("add range: atom is NULL");
- return;
- }
- if (atom->type != XML_REGEXP_RANGES) {
- ERROR("add range: atom is not ranges");
- return;
- }
- if (atom->maxRanges == 0) {
- atom->maxRanges = 4;
- atom->ranges = (xmlRegRangePtr *) xmlMalloc(atom->maxRanges *
- sizeof(xmlRegRangePtr));
- if (atom->ranges == NULL) {
- xmlRegexpErrMemory(ctxt, "adding ranges");
- atom->maxRanges = 0;
- return;
- }
- } else if (atom->nbRanges >= atom->maxRanges) {
- xmlRegRangePtr *tmp;
- atom->maxRanges *= 2;
- tmp = (xmlRegRangePtr *) xmlRealloc(atom->ranges, atom->maxRanges *
- sizeof(xmlRegRangePtr));
- if (tmp == NULL) {
- xmlRegexpErrMemory(ctxt, "adding ranges");
- atom->maxRanges /= 2;
- return;
- }
- atom->ranges = tmp;
- }
- range = xmlRegNewRange(ctxt, neg, type, start, end);
- if (range == NULL)
- return;
- range->blockName = blockName;
- atom->ranges[atom->nbRanges++] = range;
-
-}
-
-static int
-xmlRegGetCounter(xmlRegParserCtxtPtr ctxt) {
- if (ctxt->maxCounters == 0) {
- ctxt->maxCounters = 4;
- ctxt->counters = (xmlRegCounter *) xmlMalloc(ctxt->maxCounters *
- sizeof(xmlRegCounter));
- if (ctxt->counters == NULL) {
- xmlRegexpErrMemory(ctxt, "allocating counter");
- ctxt->maxCounters = 0;
- return(-1);
- }
- } else if (ctxt->nbCounters >= ctxt->maxCounters) {
- xmlRegCounter *tmp;
- ctxt->maxCounters *= 2;
- tmp = (xmlRegCounter *) xmlRealloc(ctxt->counters, ctxt->maxCounters *
- sizeof(xmlRegCounter));
- if (tmp == NULL) {
- xmlRegexpErrMemory(ctxt, "allocating counter");
- ctxt->maxCounters /= 2;
- return(-1);
- }
- ctxt->counters = tmp;
- }
- ctxt->counters[ctxt->nbCounters].min = -1;
- ctxt->counters[ctxt->nbCounters].max = -1;
- return(ctxt->nbCounters++);
-}
-
-static int
-xmlRegAtomPush(xmlRegParserCtxtPtr ctxt, xmlRegAtomPtr atom) {
- if (atom == NULL) {
- ERROR("atom push: atom is NULL");
- return(-1);
- }
- if (ctxt->maxAtoms == 0) {
- ctxt->maxAtoms = 4;
- ctxt->atoms = (xmlRegAtomPtr *) xmlMalloc(ctxt->maxAtoms *
- sizeof(xmlRegAtomPtr));
- if (ctxt->atoms == NULL) {
- xmlRegexpErrMemory(ctxt, "pushing atom");
- ctxt->maxAtoms = 0;
- return(-1);
- }
- } else if (ctxt->nbAtoms >= ctxt->maxAtoms) {
- xmlRegAtomPtr *tmp;
- ctxt->maxAtoms *= 2;
- tmp = (xmlRegAtomPtr *) xmlRealloc(ctxt->atoms, ctxt->maxAtoms *
- sizeof(xmlRegAtomPtr));
- if (tmp == NULL) {
- xmlRegexpErrMemory(ctxt, "allocating counter");
- ctxt->maxAtoms /= 2;
- return(-1);
- }
- ctxt->atoms = tmp;
- }
- atom->no = ctxt->nbAtoms;
- ctxt->atoms[ctxt->nbAtoms++] = atom;
- return(0);
-}
-
-static void
-xmlRegStateAddTransTo(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr target,
- int from) {
- if (target->maxTransTo == 0) {
- target->maxTransTo = 8;
- target->transTo = (int *) xmlMalloc(target->maxTransTo *
- sizeof(int));
- if (target->transTo == NULL) {
- xmlRegexpErrMemory(ctxt, "adding transition");
- target->maxTransTo = 0;
- return;
- }
- } else if (target->nbTransTo >= target->maxTransTo) {
- int *tmp;
- target->maxTransTo *= 2;
- tmp = (int *) xmlRealloc(target->transTo, target->maxTransTo *
- sizeof(int));
- if (tmp == NULL) {
- xmlRegexpErrMemory(ctxt, "adding transition");
- target->maxTransTo /= 2;
- return;
- }
- target->transTo = tmp;
- }
- target->transTo[target->nbTransTo] = from;
- target->nbTransTo++;
-}
-
-static void
-xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
- xmlRegAtomPtr atom, xmlRegStatePtr target,
- int counter, int count) {
-
- int nrtrans;
-
- if (state == NULL) {
- ERROR("add state: state is NULL");
- return;
- }
- if (target == NULL) {
- ERROR("add state: target is NULL");
- return;
- }
- /*
- * Other routines follow the philosophy 'When in doubt, add a transition'
- * so we check here whether such a transition is already present and, if
- * so, silently ignore this request.
- */
-
- for (nrtrans = state->nbTrans - 1; nrtrans >= 0; nrtrans--) {
- xmlRegTransPtr trans = &(state->trans[nrtrans]);
- if ((trans->atom == atom) &&
- (trans->to == target->no) &&
- (trans->counter == counter) &&
- (trans->count == count)) {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Ignoring duplicate transition from %d to %d\n",
- state->no, target->no);
-#endif
- return;
- }
- }
-
- if (state->maxTrans == 0) {
- state->maxTrans = 8;
- state->trans = (xmlRegTrans *) xmlMalloc(state->maxTrans *
- sizeof(xmlRegTrans));
- if (state->trans == NULL) {
- xmlRegexpErrMemory(ctxt, "adding transition");
- state->maxTrans = 0;
- return;
- }
- } else if (state->nbTrans >= state->maxTrans) {
- xmlRegTrans *tmp;
- state->maxTrans *= 2;
- tmp = (xmlRegTrans *) xmlRealloc(state->trans, state->maxTrans *
- sizeof(xmlRegTrans));
- if (tmp == NULL) {
- xmlRegexpErrMemory(ctxt, "adding transition");
- state->maxTrans /= 2;
- return;
- }
- state->trans = tmp;
- }
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Add trans from %d to %d ", state->no, target->no);
- if (count == REGEXP_ALL_COUNTER)
- printf("all transition\n");
- else if (count >= 0)
- printf("count based %d\n", count);
- else if (counter >= 0)
- printf("counted %d\n", counter);
- else if (atom == NULL)
- printf("epsilon transition\n");
- else if (atom != NULL)
- xmlRegPrintAtom(stdout, atom);
-#endif
-
- state->trans[state->nbTrans].atom = atom;
- state->trans[state->nbTrans].to = target->no;
- state->trans[state->nbTrans].counter = counter;
- state->trans[state->nbTrans].count = count;
- state->trans[state->nbTrans].nd = 0;
- state->nbTrans++;
- xmlRegStateAddTransTo(ctxt, target, state->no);
-}
-
-static int
-xmlRegStatePush(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state) {
- if (state == NULL) return(-1);
- if (ctxt->maxStates == 0) {
- ctxt->maxStates = 4;
- ctxt->states = (xmlRegStatePtr *) xmlMalloc(ctxt->maxStates *
- sizeof(xmlRegStatePtr));
- if (ctxt->states == NULL) {
- xmlRegexpErrMemory(ctxt, "adding state");
- ctxt->maxStates = 0;
- return(-1);
- }
- } else if (ctxt->nbStates >= ctxt->maxStates) {
- xmlRegStatePtr *tmp;
- ctxt->maxStates *= 2;
- tmp = (xmlRegStatePtr *) xmlRealloc(ctxt->states, ctxt->maxStates *
- sizeof(xmlRegStatePtr));
- if (tmp == NULL) {
- xmlRegexpErrMemory(ctxt, "adding state");
- ctxt->maxStates /= 2;
- return(-1);
- }
- ctxt->states = tmp;
- }
- state->no = ctxt->nbStates;
- ctxt->states[ctxt->nbStates++] = state;
- return(0);
-}
-
-/**
- * xmlFAGenerateAllTransition:
- * @ctxt: a regexp parser context
- * @from: the from state
- * @to: the target state or NULL for building a new one
- * @lax:
- *
- */
-static void
-xmlFAGenerateAllTransition(xmlRegParserCtxtPtr ctxt,
- xmlRegStatePtr from, xmlRegStatePtr to,
- int lax) {
- if (to == NULL) {
- to = xmlRegNewState(ctxt);
- xmlRegStatePush(ctxt, to);
- ctxt->state = to;
- }
- if (lax)
- xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_LAX_COUNTER);
- else
- xmlRegStateAddTrans(ctxt, from, NULL, to, -1, REGEXP_ALL_COUNTER);
-}
-
-/**
- * xmlFAGenerateEpsilonTransition:
- * @ctxt: a regexp parser context
- * @from: the from state
- * @to: the target state or NULL for building a new one
- *
- */
-static void
-xmlFAGenerateEpsilonTransition(xmlRegParserCtxtPtr ctxt,
- xmlRegStatePtr from, xmlRegStatePtr to) {
- if (to == NULL) {
- to = xmlRegNewState(ctxt);
- xmlRegStatePush(ctxt, to);
- ctxt->state = to;
- }
- xmlRegStateAddTrans(ctxt, from, NULL, to, -1, -1);
-}
-
-/**
- * xmlFAGenerateCountedEpsilonTransition:
- * @ctxt: a regexp parser context
- * @from: the from state
- * @to: the target state or NULL for building a new one
- * counter: the counter for that transition
- *
- */
-static void
-xmlFAGenerateCountedEpsilonTransition(xmlRegParserCtxtPtr ctxt,
- xmlRegStatePtr from, xmlRegStatePtr to, int counter) {
- if (to == NULL) {
- to = xmlRegNewState(ctxt);
- xmlRegStatePush(ctxt, to);
- ctxt->state = to;
- }
- xmlRegStateAddTrans(ctxt, from, NULL, to, counter, -1);
-}
-
-/**
- * xmlFAGenerateCountedTransition:
- * @ctxt: a regexp parser context
- * @from: the from state
- * @to: the target state or NULL for building a new one
- * counter: the counter for that transition
- *
- */
-static void
-xmlFAGenerateCountedTransition(xmlRegParserCtxtPtr ctxt,
- xmlRegStatePtr from, xmlRegStatePtr to, int counter) {
- if (to == NULL) {
- to = xmlRegNewState(ctxt);
- xmlRegStatePush(ctxt, to);
- ctxt->state = to;
- }
- xmlRegStateAddTrans(ctxt, from, NULL, to, -1, counter);
-}
-
-/**
- * xmlFAGenerateTransitions:
- * @ctxt: a regexp parser context
- * @from: the from state
- * @to: the target state or NULL for building a new one
- * @atom: the atom generating the transition
- *
- * Returns 0 if success and -1 in case of error.
- */
-static int
-xmlFAGenerateTransitions(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr from,
- xmlRegStatePtr to, xmlRegAtomPtr atom) {
- xmlRegStatePtr end;
- int nullable = 0;
-
- if (atom == NULL) {
- ERROR("genrate transition: atom == NULL");
- return(-1);
- }
- if (atom->type == XML_REGEXP_SUBREG) {
- /*
- * this is a subexpression handling one should not need to
- * create a new node except for XML_REGEXP_QUANT_RANGE.
- */
- if (xmlRegAtomPush(ctxt, atom) < 0) {
- return(-1);
- }
- if ((to != NULL) && (atom->stop != to) &&
- (atom->quant != XML_REGEXP_QUANT_RANGE)) {
- /*
- * Generate an epsilon transition to link to the target
- */
- xmlFAGenerateEpsilonTransition(ctxt, atom->stop, to);
-#ifdef DV
- } else if ((to == NULL) && (atom->quant != XML_REGEXP_QUANT_RANGE) &&
- (atom->quant != XML_REGEXP_QUANT_ONCE)) {
- to = xmlRegNewState(ctxt);
- xmlRegStatePush(ctxt, to);
- ctxt->state = to;
- xmlFAGenerateEpsilonTransition(ctxt, atom->stop, to);
-#endif
- }
- switch (atom->quant) {
- case XML_REGEXP_QUANT_OPT:
- atom->quant = XML_REGEXP_QUANT_ONCE;
- /*
- * transition done to the state after end of atom.
- * 1. set transition from atom start to new state
- * 2. set transition from atom end to this state.
- */
- if (to == NULL) {
- xmlFAGenerateEpsilonTransition(ctxt, atom->start, 0);
- xmlFAGenerateEpsilonTransition(ctxt, atom->stop,
- ctxt->state);
- } else {
- xmlFAGenerateEpsilonTransition(ctxt, atom->start, to);
- }
- break;
- case XML_REGEXP_QUANT_MULT:
- atom->quant = XML_REGEXP_QUANT_ONCE;
- xmlFAGenerateEpsilonTransition(ctxt, atom->start, atom->stop);
- xmlFAGenerateEpsilonTransition(ctxt, atom->stop, atom->start);
- break;
- case XML_REGEXP_QUANT_PLUS:
- atom->quant = XML_REGEXP_QUANT_ONCE;
- xmlFAGenerateEpsilonTransition(ctxt, atom->stop, atom->start);
- break;
- case XML_REGEXP_QUANT_RANGE: {
- int counter;
- xmlRegStatePtr inter, newstate;
-
- /*
- * create the final state now if needed
- */
- if (to != NULL) {
- newstate = to;
- } else {
- newstate = xmlRegNewState(ctxt);
- xmlRegStatePush(ctxt, newstate);
- }
-
- /*
- * The principle here is to use counted transition
- * to avoid explosion in the number of states in the
- * graph. This is clearly more complex but should not
- * be exploitable at runtime.
- */
- if ((atom->min == 0) && (atom->start0 == NULL)) {
- xmlRegAtomPtr copy;
- /*
- * duplicate a transition based on atom to count next
- * occurences after 1. We cannot loop to atom->start
- * directly because we need an epsilon transition to
- * newstate.
- */
- /* ???? For some reason it seems we never reach that
- case, I suppose this got optimized out before when
- building the automata */
- copy = xmlRegCopyAtom(ctxt, atom);
- if (copy == NULL)
- return(-1);
- copy->quant = XML_REGEXP_QUANT_ONCE;
- copy->min = 0;
- copy->max = 0;
-
- if (xmlFAGenerateTransitions(ctxt, atom->start, NULL, copy)
- < 0)
- return(-1);
- inter = ctxt->state;
- counter = xmlRegGetCounter(ctxt);
- ctxt->counters[counter].min = atom->min - 1;
- ctxt->counters[counter].max = atom->max - 1;
- /* count the number of times we see it again */
- xmlFAGenerateCountedEpsilonTransition(ctxt, inter,
- atom->stop, counter);
- /* allow a way out based on the count */
- xmlFAGenerateCountedTransition(ctxt, inter,
- newstate, counter);
- /* and also allow a direct exit for 0 */
- xmlFAGenerateEpsilonTransition(ctxt, atom->start,
- newstate);
- } else {
- /*
- * either we need the atom at least once or there
- * is an atom->start0 allowing to easilly plug the
- * epsilon transition.
- */
- counter = xmlRegGetCounter(ctxt);
- ctxt->counters[counter].min = atom->min - 1;
- ctxt->counters[counter].max = atom->max - 1;
- /* count the number of times we see it again */
- xmlFAGenerateCountedEpsilonTransition(ctxt, atom->stop,
- atom->start, counter);
- /* allow a way out based on the count */
- xmlFAGenerateCountedTransition(ctxt, atom->stop,
- newstate, counter);
- /* and if needed allow a direct exit for 0 */
- if (atom->min == 0)
- xmlFAGenerateEpsilonTransition(ctxt, atom->start0,
- newstate);
-
- }
- atom->min = 0;
- atom->max = 0;
- atom->quant = XML_REGEXP_QUANT_ONCE;
- ctxt->state = newstate;
- }
- default:
- break;
- }
- return(0);
- }
- if ((atom->min == 0) && (atom->max == 0) &&
- (atom->quant == XML_REGEXP_QUANT_RANGE)) {
- /*
- * we can discard the atom and generate an epsilon transition instead
- */
- if (to == NULL) {
- to = xmlRegNewState(ctxt);
- if (to != NULL)
- xmlRegStatePush(ctxt, to);
- else {
- return(-1);
- }
- }
- xmlFAGenerateEpsilonTransition(ctxt, from, to);
- ctxt->state = to;
- xmlRegFreeAtom(atom);
- return(0);
- }
- if (to == NULL) {
- to = xmlRegNewState(ctxt);
- if (to != NULL)
- xmlRegStatePush(ctxt, to);
- else {
- return(-1);
- }
- }
- end = to;
- if ((atom->quant == XML_REGEXP_QUANT_MULT) ||
- (atom->quant == XML_REGEXP_QUANT_PLUS)) {
- /*
- * Do not pollute the target state by adding transitions from
- * it as it is likely to be the shared target of multiple branches.
- * So isolate with an epsilon transition.
- */
- xmlRegStatePtr tmp;
-
- tmp = xmlRegNewState(ctxt);
- if (tmp != NULL)
- xmlRegStatePush(ctxt, tmp);
- else {
- return(-1);
- }
- xmlFAGenerateEpsilonTransition(ctxt, tmp, to);
- to = tmp;
- }
- if (xmlRegAtomPush(ctxt, atom) < 0) {
- return(-1);
- }
- if ((atom->quant == XML_REGEXP_QUANT_RANGE) &&
- (atom->min == 0) && (atom->max > 0)) {
- nullable = 1;
- atom->min = 1;
- if (atom->max == 1)
- atom->quant = XML_REGEXP_QUANT_OPT;
- }
- xmlRegStateAddTrans(ctxt, from, atom, to, -1, -1);
- ctxt->state = end;
- switch (atom->quant) {
- case XML_REGEXP_QUANT_OPT:
- atom->quant = XML_REGEXP_QUANT_ONCE;
- xmlFAGenerateEpsilonTransition(ctxt, from, to);
- break;
- case XML_REGEXP_QUANT_MULT:
- atom->quant = XML_REGEXP_QUANT_ONCE;
- xmlFAGenerateEpsilonTransition(ctxt, from, to);
- xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
- break;
- case XML_REGEXP_QUANT_PLUS:
- atom->quant = XML_REGEXP_QUANT_ONCE;
- xmlRegStateAddTrans(ctxt, to, atom, to, -1, -1);
- break;
- case XML_REGEXP_QUANT_RANGE:
- if (nullable)
- xmlFAGenerateEpsilonTransition(ctxt, from, to);
- break;
- default:
- break;
- }
- return(0);
-}
-
-/**
- * xmlFAReduceEpsilonTransitions:
- * @ctxt: a regexp parser context
- * @fromnr: the from state
- * @tonr: the to state
- * @counter: should that transition be associated to a counted
- *
- */
-static void
-xmlFAReduceEpsilonTransitions(xmlRegParserCtxtPtr ctxt, int fromnr,
- int tonr, int counter) {
- int transnr;
- xmlRegStatePtr from;
- xmlRegStatePtr to;
-
-#ifdef DEBUG_REGEXP_GRAPH
- printf("xmlFAReduceEpsilonTransitions(%d, %d)\n", fromnr, tonr);
-#endif
- from = ctxt->states[fromnr];
- if (from == NULL)
- return;
- to = ctxt->states[tonr];
- if (to == NULL)
- return;
- if ((to->mark == XML_REGEXP_MARK_START) ||
- (to->mark == XML_REGEXP_MARK_VISITED))
- return;
-
- to->mark = XML_REGEXP_MARK_VISITED;
- if (to->type == XML_REGEXP_FINAL_STATE) {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("State %d is final, so %d becomes final\n", tonr, fromnr);
-#endif
- from->type = XML_REGEXP_FINAL_STATE;
- }
- for (transnr = 0;transnr < to->nbTrans;transnr++) {
- if (to->trans[transnr].to < 0)
- continue;
- if (to->trans[transnr].atom == NULL) {
- /*
- * Don't remove counted transitions
- * Don't loop either
- */
- if (to->trans[transnr].to != fromnr) {
- if (to->trans[transnr].count >= 0) {
- int newto = to->trans[transnr].to;
-
- xmlRegStateAddTrans(ctxt, from, NULL,
- ctxt->states[newto],
- -1, to->trans[transnr].count);
- } else {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Found epsilon trans %d from %d to %d\n",
- transnr, tonr, to->trans[transnr].to);
-#endif
- if (to->trans[transnr].counter >= 0) {
- xmlFAReduceEpsilonTransitions(ctxt, fromnr,
- to->trans[transnr].to,
- to->trans[transnr].counter);
- } else {
- xmlFAReduceEpsilonTransitions(ctxt, fromnr,
- to->trans[transnr].to,
- counter);
- }
- }
- }
- } else {
- int newto = to->trans[transnr].to;
-
- if (to->trans[transnr].counter >= 0) {
- xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
- ctxt->states[newto],
- to->trans[transnr].counter, -1);
- } else {
- xmlRegStateAddTrans(ctxt, from, to->trans[transnr].atom,
- ctxt->states[newto], counter, -1);
- }
- }
- }
- to->mark = XML_REGEXP_MARK_NORMAL;
-}
-
-/**
- * xmlFAEliminateSimpleEpsilonTransitions:
- * @ctxt: a regexp parser context
- *
- * Eliminating general epsilon transitions can get costly in the general
- * algorithm due to the large amount of generated new transitions and
- * associated comparisons. However for simple epsilon transition used just
- * to separate building blocks when generating the automata this can be
- * reduced to state elimination:
- * - if there exists an epsilon from X to Y
- * - if there is no other transition from X
- * then X and Y are semantically equivalent and X can be eliminated
- * If X is the start state then make Y the start state, else replace the
- * target of all transitions to X by transitions to Y.
- */
-static void
-xmlFAEliminateSimpleEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
- int statenr, i, j, newto;
- xmlRegStatePtr state, tmp;
-
- for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if (state == NULL)
- continue;
- if (state->nbTrans != 1)
- continue;
- if (state->type == XML_REGEXP_UNREACH_STATE)
- continue;
- /* is the only transition out a basic transition */
- if ((state->trans[0].atom == NULL) &&
- (state->trans[0].to >= 0) &&
- (state->trans[0].to != statenr) &&
- (state->trans[0].counter < 0) &&
- (state->trans[0].count < 0)) {
- newto = state->trans[0].to;
-
- if (state->type == XML_REGEXP_START_STATE) {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Found simple epsilon trans from start %d to %d\n",
- statenr, newto);
-#endif
- } else {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Found simple epsilon trans from %d to %d\n",
- statenr, newto);
-#endif
- for (i = 0;i < state->nbTransTo;i++) {
- tmp = ctxt->states[state->transTo[i]];
- for (j = 0;j < tmp->nbTrans;j++) {
- if (tmp->trans[j].to == statenr) {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Changed transition %d on %d to go to %d\n",
- j, tmp->no, newto);
-#endif
- tmp->trans[j].to = -1;
- xmlRegStateAddTrans(ctxt, tmp, tmp->trans[j].atom,
- ctxt->states[newto],
- tmp->trans[j].counter,
- tmp->trans[j].count);
- }
- }
- }
- if (state->type == XML_REGEXP_FINAL_STATE)
- ctxt->states[newto]->type = XML_REGEXP_FINAL_STATE;
- /* eliminate the transition completely */
- state->nbTrans = 0;
-
- state->type = XML_REGEXP_UNREACH_STATE;
-
- }
-
- }
- }
-}
-/**
- * xmlFAEliminateEpsilonTransitions:
- * @ctxt: a regexp parser context
- *
- */
-static void
-xmlFAEliminateEpsilonTransitions(xmlRegParserCtxtPtr ctxt) {
- int statenr, transnr;
- xmlRegStatePtr state;
- int has_epsilon;
-
- if (ctxt->states == NULL) return;
-
- /*
- * Eliminate simple epsilon transition and the associated unreachable
- * states.
- */
- xmlFAEliminateSimpleEpsilonTransitions(ctxt);
- for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if ((state != NULL) && (state->type == XML_REGEXP_UNREACH_STATE)) {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Removed unreachable state %d\n", statenr);
-#endif
- xmlRegFreeState(state);
- ctxt->states[statenr] = NULL;
- }
- }
-
- has_epsilon = 0;
-
- /*
- * Build the completed transitions bypassing the epsilons
- * Use a marking algorithm to avoid loops
- * Mark sink states too.
- * Process from the latests states backward to the start when
- * there is long cascading epsilon chains this minimize the
- * recursions and transition compares when adding the new ones
- */
- for (statenr = ctxt->nbStates - 1;statenr >= 0;statenr--) {
- state = ctxt->states[statenr];
- if (state == NULL)
- continue;
- if ((state->nbTrans == 0) &&
- (state->type != XML_REGEXP_FINAL_STATE)) {
- state->type = XML_REGEXP_SINK_STATE;
- }
- for (transnr = 0;transnr < state->nbTrans;transnr++) {
- if ((state->trans[transnr].atom == NULL) &&
- (state->trans[transnr].to >= 0)) {
- if (state->trans[transnr].to == statenr) {
- state->trans[transnr].to = -1;
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Removed loopback epsilon trans %d on %d\n",
- transnr, statenr);
-#endif
- } else if (state->trans[transnr].count < 0) {
- int newto = state->trans[transnr].to;
-
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Found epsilon trans %d from %d to %d\n",
- transnr, statenr, newto);
-#endif
- has_epsilon = 1;
- state->trans[transnr].to = -2;
- state->mark = XML_REGEXP_MARK_START;
- xmlFAReduceEpsilonTransitions(ctxt, statenr,
- newto, state->trans[transnr].counter);
- state->mark = XML_REGEXP_MARK_NORMAL;
-#ifdef DEBUG_REGEXP_GRAPH
- } else {
- printf("Found counted transition %d on %d\n",
- transnr, statenr);
-#endif
- }
- }
- }
- }
- /*
- * Eliminate the epsilon transitions
- */
- if (has_epsilon) {
- for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if (state == NULL)
- continue;
- for (transnr = 0;transnr < state->nbTrans;transnr++) {
- xmlRegTransPtr trans = &(state->trans[transnr]);
- if ((trans->atom == NULL) &&
- (trans->count < 0) &&
- (trans->to >= 0)) {
- trans->to = -1;
- }
- }
- }
- }
-
- /*
- * Use this pass to detect unreachable states too
- */
- for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if (state != NULL)
- state->reached = XML_REGEXP_MARK_NORMAL;
- }
- state = ctxt->states[0];
- if (state != NULL)
- state->reached = XML_REGEXP_MARK_START;
- while (state != NULL) {
- xmlRegStatePtr target = NULL;
- state->reached = XML_REGEXP_MARK_VISITED;
- /*
- * Mark all states reachable from the current reachable state
- */
- for (transnr = 0;transnr < state->nbTrans;transnr++) {
- if ((state->trans[transnr].to >= 0) &&
- ((state->trans[transnr].atom != NULL) ||
- (state->trans[transnr].count >= 0))) {
- int newto = state->trans[transnr].to;
-
- if (ctxt->states[newto] == NULL)
- continue;
- if (ctxt->states[newto]->reached == XML_REGEXP_MARK_NORMAL) {
- ctxt->states[newto]->reached = XML_REGEXP_MARK_START;
- target = ctxt->states[newto];
- }
- }
- }
-
- /*
- * find the next accessible state not explored
- */
- if (target == NULL) {
- for (statenr = 1;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if ((state != NULL) && (state->reached ==
- XML_REGEXP_MARK_START)) {
- target = state;
- break;
- }
- }
- }
- state = target;
- }
- for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if ((state != NULL) && (state->reached == XML_REGEXP_MARK_NORMAL)) {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("Removed unreachable state %d\n", statenr);
-#endif
- xmlRegFreeState(state);
- ctxt->states[statenr] = NULL;
- }
- }
-
-}
-
-static int
-xmlFACompareRanges(xmlRegRangePtr range1, xmlRegRangePtr range2) {
- int ret = 0;
-
- if ((range1->type == XML_REGEXP_RANGES) ||
- (range2->type == XML_REGEXP_RANGES) ||
- (range2->type == XML_REGEXP_SUBREG) ||
- (range1->type == XML_REGEXP_SUBREG) ||
- (range1->type == XML_REGEXP_STRING) ||
- (range2->type == XML_REGEXP_STRING))
- return(-1);
-
- /* put them in order */
- if (range1->type > range2->type) {
- xmlRegRangePtr tmp;
-
- tmp = range1;
- range1 = range2;
- range2 = tmp;
- }
- if ((range1->type == XML_REGEXP_ANYCHAR) ||
- (range2->type == XML_REGEXP_ANYCHAR)) {
- ret = 1;
- } else if ((range1->type == XML_REGEXP_EPSILON) ||
- (range2->type == XML_REGEXP_EPSILON)) {
- return(0);
- } else if (range1->type == range2->type) {
- if (range1->type != XML_REGEXP_CHARVAL)
- ret = 1;
- else if ((range1->end < range2->start) ||
- (range2->end < range1->start))
- ret = 0;
- else
- ret = 1;
- } else if (range1->type == XML_REGEXP_CHARVAL) {
- int codepoint;
- int neg = 0;
-
- /*
- * just check all codepoints in the range for acceptance,
- * this is usually way cheaper since done only once at
- * compilation than testing over and over at runtime or
- * pushing too many states when evaluating.
- */
- if (((range1->neg == 0) && (range2->neg != 0)) ||
- ((range1->neg != 0) && (range2->neg == 0)))
- neg = 1;
-
- for (codepoint = range1->start;codepoint <= range1->end ;codepoint++) {
- ret = xmlRegCheckCharacterRange(range2->type, codepoint,
- 0, range2->start, range2->end,
- range2->blockName);
- if (ret < 0)
- return(-1);
- if (((neg == 1) && (ret == 0)) ||
- ((neg == 0) && (ret == 1)))
- return(1);
- }
- return(0);
- } else if ((range1->type == XML_REGEXP_BLOCK_NAME) ||
- (range2->type == XML_REGEXP_BLOCK_NAME)) {
- if (range1->type == range2->type) {
- ret = xmlStrEqual(range1->blockName, range2->blockName);
- } else {
- /*
- * comparing a block range with anything else is way
- * too costly, and maintining the table is like too much
- * memory too, so let's force the automata to save state
- * here.
- */
- return(1);
- }
- } else if ((range1->type < XML_REGEXP_LETTER) ||
- (range2->type < XML_REGEXP_LETTER)) {
- if ((range1->type == XML_REGEXP_ANYSPACE) &&
- (range2->type == XML_REGEXP_NOTSPACE))
- ret = 0;
- else if ((range1->type == XML_REGEXP_INITNAME) &&
- (range2->type == XML_REGEXP_NOTINITNAME))
- ret = 0;
- else if ((range1->type == XML_REGEXP_NAMECHAR) &&
- (range2->type == XML_REGEXP_NOTNAMECHAR))
- ret = 0;
- else if ((range1->type == XML_REGEXP_DECIMAL) &&
- (range2->type == XML_REGEXP_NOTDECIMAL))
- ret = 0;
- else if ((range1->type == XML_REGEXP_REALCHAR) &&
- (range2->type == XML_REGEXP_NOTREALCHAR))
- ret = 0;
- else {
- /* same thing to limit complexity */
- return(1);
- }
- } else {
- ret = 0;
- /* range1->type < range2->type here */
- switch (range1->type) {
- case XML_REGEXP_LETTER:
- /* all disjoint except in the subgroups */
- if ((range2->type == XML_REGEXP_LETTER_UPPERCASE) ||
- (range2->type == XML_REGEXP_LETTER_LOWERCASE) ||
- (range2->type == XML_REGEXP_LETTER_TITLECASE) ||
- (range2->type == XML_REGEXP_LETTER_MODIFIER) ||
- (range2->type == XML_REGEXP_LETTER_OTHERS))
- ret = 1;
- break;
- case XML_REGEXP_MARK:
- if ((range2->type == XML_REGEXP_MARK_NONSPACING) ||
- (range2->type == XML_REGEXP_MARK_SPACECOMBINING) ||
- (range2->type == XML_REGEXP_MARK_ENCLOSING))
- ret = 1;
- break;
- case XML_REGEXP_NUMBER:
- if ((range2->type == XML_REGEXP_NUMBER_DECIMAL) ||
- (range2->type == XML_REGEXP_NUMBER_LETTER) ||
- (range2->type == XML_REGEXP_NUMBER_OTHERS))
- ret = 1;
- break;
- case XML_REGEXP_PUNCT:
- if ((range2->type == XML_REGEXP_PUNCT_CONNECTOR) ||
- (range2->type == XML_REGEXP_PUNCT_DASH) ||
- (range2->type == XML_REGEXP_PUNCT_OPEN) ||
- (range2->type == XML_REGEXP_PUNCT_CLOSE) ||
- (range2->type == XML_REGEXP_PUNCT_INITQUOTE) ||
- (range2->type == XML_REGEXP_PUNCT_FINQUOTE) ||
- (range2->type == XML_REGEXP_PUNCT_OTHERS))
- ret = 1;
- break;
- case XML_REGEXP_SEPAR:
- if ((range2->type == XML_REGEXP_SEPAR_SPACE) ||
- (range2->type == XML_REGEXP_SEPAR_LINE) ||
- (range2->type == XML_REGEXP_SEPAR_PARA))
- ret = 1;
- break;
- case XML_REGEXP_SYMBOL:
- if ((range2->type == XML_REGEXP_SYMBOL_MATH) ||
- (range2->type == XML_REGEXP_SYMBOL_CURRENCY) ||
- (range2->type == XML_REGEXP_SYMBOL_MODIFIER) ||
- (range2->type == XML_REGEXP_SYMBOL_OTHERS))
- ret = 1;
- break;
- case XML_REGEXP_OTHER:
- if ((range2->type == XML_REGEXP_OTHER_CONTROL) ||
- (range2->type == XML_REGEXP_OTHER_FORMAT) ||
- (range2->type == XML_REGEXP_OTHER_PRIVATE))
- ret = 1;
- break;
- default:
- if ((range2->type >= XML_REGEXP_LETTER) &&
- (range2->type < XML_REGEXP_BLOCK_NAME))
- ret = 0;
- else {
- /* safety net ! */
- return(1);
- }
- }
- }
- if (((range1->neg == 0) && (range2->neg != 0)) ||
- ((range1->neg != 0) && (range2->neg == 0)))
- ret = !ret;
- return(ret);
-}
-
-/**
- * xmlFACompareAtomTypes:
- * @type1: an atom type
- * @type2: an atom type
- *
- * Compares two atoms type to check whether they intersect in some ways,
- * this is used by xmlFACompareAtoms only
- *
- * Returns 1 if they may intersect and 0 otherwise
- */
-static int
-xmlFACompareAtomTypes(xmlRegAtomType type1, xmlRegAtomType type2) {
- if ((type1 == XML_REGEXP_EPSILON) ||
- (type1 == XML_REGEXP_CHARVAL) ||
- (type1 == XML_REGEXP_RANGES) ||
- (type1 == XML_REGEXP_SUBREG) ||
- (type1 == XML_REGEXP_STRING) ||
- (type1 == XML_REGEXP_ANYCHAR))
- return(1);
- if ((type2 == XML_REGEXP_EPSILON) ||
- (type2 == XML_REGEXP_CHARVAL) ||
- (type2 == XML_REGEXP_RANGES) ||
- (type2 == XML_REGEXP_SUBREG) ||
- (type2 == XML_REGEXP_STRING) ||
- (type2 == XML_REGEXP_ANYCHAR))
- return(1);
-
- if (type1 == type2) return(1);
-
- /* simplify subsequent compares by making sure type1 < type2 */
- if (type1 > type2) {
- xmlRegAtomType tmp = type1;
- type1 = type2;
- type2 = tmp;
- }
- switch (type1) {
- case XML_REGEXP_ANYSPACE: /* \s */
- /* can't be a letter, number, mark, pontuation, symbol */
- if ((type2 == XML_REGEXP_NOTSPACE) ||
- ((type2 >= XML_REGEXP_LETTER) &&
- (type2 <= XML_REGEXP_LETTER_OTHERS)) ||
- ((type2 >= XML_REGEXP_NUMBER) &&
- (type2 <= XML_REGEXP_NUMBER_OTHERS)) ||
- ((type2 >= XML_REGEXP_MARK) &&
- (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
- ((type2 >= XML_REGEXP_PUNCT) &&
- (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
- ((type2 >= XML_REGEXP_SYMBOL) &&
- (type2 <= XML_REGEXP_SYMBOL_OTHERS))
- ) return(0);
- break;
- case XML_REGEXP_NOTSPACE: /* \S */
- break;
- case XML_REGEXP_INITNAME: /* \l */
- /* can't be a number, mark, separator, pontuation, symbol or other */
- if ((type2 == XML_REGEXP_NOTINITNAME) ||
- ((type2 >= XML_REGEXP_NUMBER) &&
- (type2 <= XML_REGEXP_NUMBER_OTHERS)) ||
- ((type2 >= XML_REGEXP_MARK) &&
- (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
- ((type2 >= XML_REGEXP_SEPAR) &&
- (type2 <= XML_REGEXP_SEPAR_PARA)) ||
- ((type2 >= XML_REGEXP_PUNCT) &&
- (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
- ((type2 >= XML_REGEXP_SYMBOL) &&
- (type2 <= XML_REGEXP_SYMBOL_OTHERS)) ||
- ((type2 >= XML_REGEXP_OTHER) &&
- (type2 <= XML_REGEXP_OTHER_NA))
- ) return(0);
- break;
- case XML_REGEXP_NOTINITNAME: /* \L */
- break;
- case XML_REGEXP_NAMECHAR: /* \c */
- /* can't be a mark, separator, pontuation, symbol or other */
- if ((type2 == XML_REGEXP_NOTNAMECHAR) ||
- ((type2 >= XML_REGEXP_MARK) &&
- (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
- ((type2 >= XML_REGEXP_PUNCT) &&
- (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
- ((type2 >= XML_REGEXP_SEPAR) &&
- (type2 <= XML_REGEXP_SEPAR_PARA)) ||
- ((type2 >= XML_REGEXP_SYMBOL) &&
- (type2 <= XML_REGEXP_SYMBOL_OTHERS)) ||
- ((type2 >= XML_REGEXP_OTHER) &&
- (type2 <= XML_REGEXP_OTHER_NA))
- ) return(0);
- break;
- case XML_REGEXP_NOTNAMECHAR: /* \C */
- break;
- case XML_REGEXP_DECIMAL: /* \d */
- /* can't be a letter, mark, separator, pontuation, symbol or other */
- if ((type2 == XML_REGEXP_NOTDECIMAL) ||
- (type2 == XML_REGEXP_REALCHAR) ||
- ((type2 >= XML_REGEXP_LETTER) &&
- (type2 <= XML_REGEXP_LETTER_OTHERS)) ||
- ((type2 >= XML_REGEXP_MARK) &&
- (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
- ((type2 >= XML_REGEXP_PUNCT) &&
- (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
- ((type2 >= XML_REGEXP_SEPAR) &&
- (type2 <= XML_REGEXP_SEPAR_PARA)) ||
- ((type2 >= XML_REGEXP_SYMBOL) &&
- (type2 <= XML_REGEXP_SYMBOL_OTHERS)) ||
- ((type2 >= XML_REGEXP_OTHER) &&
- (type2 <= XML_REGEXP_OTHER_NA))
- )return(0);
- break;
- case XML_REGEXP_NOTDECIMAL: /* \D */
- break;
- case XML_REGEXP_REALCHAR: /* \w */
- /* can't be a mark, separator, pontuation, symbol or other */
- if ((type2 == XML_REGEXP_NOTDECIMAL) ||
- ((type2 >= XML_REGEXP_MARK) &&
- (type2 <= XML_REGEXP_MARK_ENCLOSING)) ||
- ((type2 >= XML_REGEXP_PUNCT) &&
- (type2 <= XML_REGEXP_PUNCT_OTHERS)) ||
- ((type2 >= XML_REGEXP_SEPAR) &&
- (type2 <= XML_REGEXP_SEPAR_PARA)) ||
- ((type2 >= XML_REGEXP_SYMBOL) &&
- (type2 <= XML_REGEXP_SYMBOL_OTHERS)) ||
- ((type2 >= XML_REGEXP_OTHER) &&
- (type2 <= XML_REGEXP_OTHER_NA))
- )return(0);
- break;
- case XML_REGEXP_NOTREALCHAR: /* \W */
- break;
- /*
- * at that point we know both type 1 and type2 are from
- * character categories are ordered and are different,
- * it becomes simple because this is a partition
- */
- case XML_REGEXP_LETTER:
- if (type2 <= XML_REGEXP_LETTER_OTHERS)
- return(1);
- return(0);
- case XML_REGEXP_LETTER_UPPERCASE:
- case XML_REGEXP_LETTER_LOWERCASE:
- case XML_REGEXP_LETTER_TITLECASE:
- case XML_REGEXP_LETTER_MODIFIER:
- case XML_REGEXP_LETTER_OTHERS:
- return(0);
- case XML_REGEXP_MARK:
- if (type2 <= XML_REGEXP_MARK_ENCLOSING)
- return(1);
- return(0);
- case XML_REGEXP_MARK_NONSPACING:
- case XML_REGEXP_MARK_SPACECOMBINING:
- case XML_REGEXP_MARK_ENCLOSING:
- return(0);
- case XML_REGEXP_NUMBER:
- if (type2 <= XML_REGEXP_NUMBER_OTHERS)
- return(1);
- return(0);
- case XML_REGEXP_NUMBER_DECIMAL:
- case XML_REGEXP_NUMBER_LETTER:
- case XML_REGEXP_NUMBER_OTHERS:
- return(0);
- case XML_REGEXP_PUNCT:
- if (type2 <= XML_REGEXP_PUNCT_OTHERS)
- return(1);
- return(0);
- case XML_REGEXP_PUNCT_CONNECTOR:
- case XML_REGEXP_PUNCT_DASH:
- case XML_REGEXP_PUNCT_OPEN:
- case XML_REGEXP_PUNCT_CLOSE:
- case XML_REGEXP_PUNCT_INITQUOTE:
- case XML_REGEXP_PUNCT_FINQUOTE:
- case XML_REGEXP_PUNCT_OTHERS:
- return(0);
- case XML_REGEXP_SEPAR:
- if (type2 <= XML_REGEXP_SEPAR_PARA)
- return(1);
- return(0);
- case XML_REGEXP_SEPAR_SPACE:
- case XML_REGEXP_SEPAR_LINE:
- case XML_REGEXP_SEPAR_PARA:
- return(0);
- case XML_REGEXP_SYMBOL:
- if (type2 <= XML_REGEXP_SYMBOL_OTHERS)
- return(1);
- return(0);
- case XML_REGEXP_SYMBOL_MATH:
- case XML_REGEXP_SYMBOL_CURRENCY:
- case XML_REGEXP_SYMBOL_MODIFIER:
- case XML_REGEXP_SYMBOL_OTHERS:
- return(0);
- case XML_REGEXP_OTHER:
- if (type2 <= XML_REGEXP_OTHER_NA)
- return(1);
- return(0);
- case XML_REGEXP_OTHER_CONTROL:
- case XML_REGEXP_OTHER_FORMAT:
- case XML_REGEXP_OTHER_PRIVATE:
- case XML_REGEXP_OTHER_NA:
- return(0);
- default:
- break;
- }
- return(1);
-}
-
-/**
- * xmlFAEqualAtoms:
- * @atom1: an atom
- * @atom2: an atom
- * @deep: if not set only compare string pointers
- *
- * Compares two atoms to check whether they are the same exactly
- * this is used to remove equivalent transitions
- *
- * Returns 1 if same and 0 otherwise
- */
-static int
-xmlFAEqualAtoms(xmlRegAtomPtr atom1, xmlRegAtomPtr atom2, int deep) {
- int ret = 0;
-
- if (atom1 == atom2)
- return(1);
- if ((atom1 == NULL) || (atom2 == NULL))
- return(0);
-
- if (atom1->type != atom2->type)
- return(0);
- switch (atom1->type) {
- case XML_REGEXP_EPSILON:
- ret = 0;
- break;
- case XML_REGEXP_STRING:
- if (!deep)
- ret = (atom1->valuep == atom2->valuep);
- else
- ret = xmlStrEqual((xmlChar *)atom1->valuep,
- (xmlChar *)atom2->valuep);
- break;
- case XML_REGEXP_CHARVAL:
- ret = (atom1->codepoint == atom2->codepoint);
- break;
- case XML_REGEXP_RANGES:
- /* too hard to do in the general case */
- ret = 0;
- default:
- break;
- }
- return(ret);
-}
-
-/**
- * xmlFACompareAtoms:
- * @atom1: an atom
- * @atom2: an atom
- * @deep: if not set only compare string pointers
- *
- * Compares two atoms to check whether they intersect in some ways,
- * this is used by xmlFAComputesDeterminism and xmlFARecurseDeterminism only
- *
- * Returns 1 if yes and 0 otherwise
- */
-static int
-xmlFACompareAtoms(xmlRegAtomPtr atom1, xmlRegAtomPtr atom2, int deep) {
- int ret = 1;
-
- if (atom1 == atom2)
- return(1);
- if ((atom1 == NULL) || (atom2 == NULL))
- return(0);
-
- if ((atom1->type == XML_REGEXP_ANYCHAR) ||
- (atom2->type == XML_REGEXP_ANYCHAR))
- return(1);
-
- if (atom1->type > atom2->type) {
- xmlRegAtomPtr tmp;
- tmp = atom1;
- atom1 = atom2;
- atom2 = tmp;
- }
- if (atom1->type != atom2->type) {
- ret = xmlFACompareAtomTypes(atom1->type, atom2->type);
- /* if they can't intersect at the type level break now */
- if (ret == 0)
- return(0);
- }
- switch (atom1->type) {
- case XML_REGEXP_STRING:
- if (!deep)
- ret = (atom1->valuep != atom2->valuep);
- else
- ret = xmlRegStrEqualWildcard((xmlChar *)atom1->valuep,
- (xmlChar *)atom2->valuep);
- break;
- case XML_REGEXP_EPSILON:
- goto not_determinist;
- case XML_REGEXP_CHARVAL:
- if (atom2->type == XML_REGEXP_CHARVAL) {
- ret = (atom1->codepoint == atom2->codepoint);
- } else {
- ret = xmlRegCheckCharacter(atom2, atom1->codepoint);
- if (ret < 0)
- ret = 1;
- }
- break;
- case XML_REGEXP_RANGES:
- if (atom2->type == XML_REGEXP_RANGES) {
- int i, j, res;
- xmlRegRangePtr r1, r2;
-
- /*
- * need to check that none of the ranges eventually matches
- */
- for (i = 0;i < atom1->nbRanges;i++) {
- for (j = 0;j < atom2->nbRanges;j++) {
- r1 = atom1->ranges[i];
- r2 = atom2->ranges[j];
- res = xmlFACompareRanges(r1, r2);
- if (res == 1) {
- ret = 1;
- goto done;
- }
- }
- }
- ret = 0;
- }
- break;
- default:
- goto not_determinist;
- }
-done:
- if (atom1->neg != atom2->neg) {
- ret = !ret;
- }
- if (ret == 0)
- return(0);
-not_determinist:
- return(1);
-}
-
-/**
- * xmlFARecurseDeterminism:
- * @ctxt: a regexp parser context
- *
- * Check whether the associated regexp is determinist,
- * should be called after xmlFAEliminateEpsilonTransitions()
- *
- */
-static int
-xmlFARecurseDeterminism(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
- int to, xmlRegAtomPtr atom) {
- int ret = 1;
- int res;
- int transnr, nbTrans;
- xmlRegTransPtr t1;
- int deep = 1;
-
- if (state == NULL)
- return(ret);
- if (state->markd == XML_REGEXP_MARK_VISITED)
- return(ret);
-
- if (ctxt->flags & AM_AUTOMATA_RNG)
- deep = 0;
-
- /*
- * don't recurse on transitions potentially added in the course of
- * the elimination.
- */
- nbTrans = state->nbTrans;
- for (transnr = 0;transnr < nbTrans;transnr++) {
- t1 = &(state->trans[transnr]);
- /*
- * check transitions conflicting with the one looked at
- */
- if (t1->atom == NULL) {
- if (t1->to < 0)
- continue;
- state->markd = XML_REGEXP_MARK_VISITED;
- res = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to],
- to, atom);
- state->markd = 0;
- if (res == 0) {
- ret = 0;
- /* t1->nd = 1; */
- }
- continue;
- }
- if (t1->to != to)
- continue;
- if (xmlFACompareAtoms(t1->atom, atom, deep)) {
- ret = 0;
- /* mark the transition as non-deterministic */
- t1->nd = 1;
- }
- }
- return(ret);
-}
-
-/**
- * xmlFAComputesDeterminism:
- * @ctxt: a regexp parser context
- *
- * Check whether the associated regexp is determinist,
- * should be called after xmlFAEliminateEpsilonTransitions()
- *
- */
-static int
-xmlFAComputesDeterminism(xmlRegParserCtxtPtr ctxt) {
- int statenr, transnr;
- xmlRegStatePtr state;
- xmlRegTransPtr t1, t2, last;
- int i;
- int ret = 1;
- int deep = 1;
-
-#ifdef DEBUG_REGEXP_GRAPH
- printf("xmlFAComputesDeterminism\n");
- xmlRegPrintCtxt(stdout, ctxt);
-#endif
- if (ctxt->determinist != -1)
- return(ctxt->determinist);
-
- if (ctxt->flags & AM_AUTOMATA_RNG)
- deep = 0;
-
- /*
- * First cleanup the automata removing cancelled transitions
- */
- for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if (state == NULL)
- continue;
- if (state->nbTrans < 2)
- continue;
- for (transnr = 0;transnr < state->nbTrans;transnr++) {
- t1 = &(state->trans[transnr]);
- /*
- * Determinism checks in case of counted or all transitions
- * will have to be handled separately
- */
- if (t1->atom == NULL) {
- /* t1->nd = 1; */
- continue;
- }
- if (t1->to == -1) /* eliminated */
- continue;
- for (i = 0;i < transnr;i++) {
- t2 = &(state->trans[i]);
- if (t2->to == -1) /* eliminated */
- continue;
- if (t2->atom != NULL) {
- if (t1->to == t2->to) {
- /*
- * Here we use deep because we want to keep the
- * transitions which indicate a conflict
- */
- if (xmlFAEqualAtoms(t1->atom, t2->atom, deep) &&
- (t1->counter == t2->counter) &&
- (t1->count == t2->count))
- t2->to = -1; /* eliminated */
- }
- }
- }
- }
- }
-
- /*
- * Check for all states that there aren't 2 transitions
- * with the same atom and a different target.
- */
- for (statenr = 0;statenr < ctxt->nbStates;statenr++) {
- state = ctxt->states[statenr];
- if (state == NULL)
- continue;
- if (state->nbTrans < 2)
- continue;
- last = NULL;
- for (transnr = 0;transnr < state->nbTrans;transnr++) {
- t1 = &(state->trans[transnr]);
- /*
- * Determinism checks in case of counted or all transitions
- * will have to be handled separately
- */
- if (t1->atom == NULL) {
- continue;
- }
- if (t1->to == -1) /* eliminated */
- continue;
- for (i = 0;i < transnr;i++) {
- t2 = &(state->trans[i]);
- if (t2->to == -1) /* eliminated */
- continue;
- if (t2->atom != NULL) {
- /*
- * But here we don't use deep because we want to
- * find transitions which indicate a conflict
- */
- if (xmlFACompareAtoms(t1->atom, t2->atom, 1)) {
- ret = 0;
- /* mark the transitions as non-deterministic ones */
- t1->nd = 1;
- t2->nd = 1;
- last = t1;
- }
- } else if (t1->to != -1) {
- /*
- * do the closure in case of remaining specific
- * epsilon transitions like choices or all
- */
- ret = xmlFARecurseDeterminism(ctxt, ctxt->states[t1->to],
- t2->to, t2->atom);
- /* don't shortcut the computation so all non deterministic
- transition get marked down
- if (ret == 0)
- return(0);
- */
- if (ret == 0) {
- t1->nd = 1;
- /* t2->nd = 1; */
- last = t1;
- }
- }
- }
- /* don't shortcut the computation so all non deterministic
- transition get marked down
- if (ret == 0)
- break; */
- }
-
- /*
- * mark specifically the last non-deterministic transition
- * from a state since there is no need to set-up rollback
- * from it
- */
- if (last != NULL) {
- last->nd = 2;
- }
-
- /* don't shortcut the computation so all non deterministic
- transition get marked down
- if (ret == 0)
- break; */
- }
-
- ctxt->determinist = ret;
- return(ret);
-}
-
-/************************************************************************
- * *
- * Routines to check input against transition atoms *
- * *
- ************************************************************************/
-
-static int
-xmlRegCheckCharacterRange(xmlRegAtomType type, int codepoint, int neg,
- int start, int end, const xmlChar *blockName) {
- int ret = 0;
-
- switch (type) {
- case XML_REGEXP_STRING:
- case XML_REGEXP_SUBREG:
- case XML_REGEXP_RANGES:
- case XML_REGEXP_EPSILON:
- return(-1);
- case XML_REGEXP_ANYCHAR:
- ret = ((codepoint != '\n') && (codepoint != '\r'));
- break;
- case XML_REGEXP_CHARVAL:
- ret = ((codepoint >= start) && (codepoint <= end));
- break;
- case XML_REGEXP_NOTSPACE:
- neg = !neg;
- case XML_REGEXP_ANYSPACE:
- ret = ((codepoint == '\n') || (codepoint == '\r') ||
- (codepoint == '\t') || (codepoint == ' '));
- break;
- case XML_REGEXP_NOTINITNAME:
- neg = !neg;
- case XML_REGEXP_INITNAME:
- ret = (IS_LETTER(codepoint) ||
- (codepoint == '_') || (codepoint == ':'));
- break;
- case XML_REGEXP_NOTNAMECHAR:
- neg = !neg;
- case XML_REGEXP_NAMECHAR:
- ret = (IS_LETTER(codepoint) || IS_DIGIT(codepoint) ||
- (codepoint == '.') || (codepoint == '-') ||
- (codepoint == '_') || (codepoint == ':') ||
- IS_COMBINING(codepoint) || IS_EXTENDER(codepoint));
- break;
- case XML_REGEXP_NOTDECIMAL:
- neg = !neg;
- case XML_REGEXP_DECIMAL:
- ret = xmlUCSIsCatNd(codepoint);
- break;
- case XML_REGEXP_REALCHAR:
- neg = !neg;
- case XML_REGEXP_NOTREALCHAR:
- ret = xmlUCSIsCatP(codepoint);
- if (ret == 0)
- ret = xmlUCSIsCatZ(codepoint);
- if (ret == 0)
- ret = xmlUCSIsCatC(codepoint);
- break;
- case XML_REGEXP_LETTER:
- ret = xmlUCSIsCatL(codepoint);
- break;
- case XML_REGEXP_LETTER_UPPERCASE:
- ret = xmlUCSIsCatLu(codepoint);
- break;
- case XML_REGEXP_LETTER_LOWERCASE:
- ret = xmlUCSIsCatLl(codepoint);
- break;
- case XML_REGEXP_LETTER_TITLECASE:
- ret = xmlUCSIsCatLt(codepoint);
- break;
- case XML_REGEXP_LETTER_MODIFIER:
- ret = xmlUCSIsCatLm(codepoint);
- break;
- case XML_REGEXP_LETTER_OTHERS:
- ret = xmlUCSIsCatLo(codepoint);
- break;
- case XML_REGEXP_MARK:
- ret = xmlUCSIsCatM(codepoint);
- break;
- case XML_REGEXP_MARK_NONSPACING:
- ret = xmlUCSIsCatMn(codepoint);
- break;
- case XML_REGEXP_MARK_SPACECOMBINING:
- ret = xmlUCSIsCatMc(codepoint);
- break;
- case XML_REGEXP_MARK_ENCLOSING:
- ret = xmlUCSIsCatMe(codepoint);
- break;
- case XML_REGEXP_NUMBER:
- ret = xmlUCSIsCatN(codepoint);
- break;
- case XML_REGEXP_NUMBER_DECIMAL:
- ret = xmlUCSIsCatNd(codepoint);
- break;
- case XML_REGEXP_NUMBER_LETTER:
- ret = xmlUCSIsCatNl(codepoint);
- break;
- case XML_REGEXP_NUMBER_OTHERS:
- ret = xmlUCSIsCatNo(codepoint);
- break;
- case XML_REGEXP_PUNCT:
- ret = xmlUCSIsCatP(codepoint);
- break;
- case XML_REGEXP_PUNCT_CONNECTOR:
- ret = xmlUCSIsCatPc(codepoint);
- break;
- case XML_REGEXP_PUNCT_DASH:
- ret = xmlUCSIsCatPd(codepoint);
- break;
- case XML_REGEXP_PUNCT_OPEN:
- ret = xmlUCSIsCatPs(codepoint);
- break;
- case XML_REGEXP_PUNCT_CLOSE:
- ret = xmlUCSIsCatPe(codepoint);
- break;
- case XML_REGEXP_PUNCT_INITQUOTE:
- ret = xmlUCSIsCatPi(codepoint);
- break;
- case XML_REGEXP_PUNCT_FINQUOTE:
- ret = xmlUCSIsCatPf(codepoint);
- break;
- case XML_REGEXP_PUNCT_OTHERS:
- ret = xmlUCSIsCatPo(codepoint);
- break;
- case XML_REGEXP_SEPAR:
- ret = xmlUCSIsCatZ(codepoint);
- break;
- case XML_REGEXP_SEPAR_SPACE:
- ret = xmlUCSIsCatZs(codepoint);
- break;
- case XML_REGEXP_SEPAR_LINE:
- ret = xmlUCSIsCatZl(codepoint);
- break;
- case XML_REGEXP_SEPAR_PARA:
- ret = xmlUCSIsCatZp(codepoint);
- break;
- case XML_REGEXP_SYMBOL:
- ret = xmlUCSIsCatS(codepoint);
- break;
- case XML_REGEXP_SYMBOL_MATH:
- ret = xmlUCSIsCatSm(codepoint);
- break;
- case XML_REGEXP_SYMBOL_CURRENCY:
- ret = xmlUCSIsCatSc(codepoint);
- break;
- case XML_REGEXP_SYMBOL_MODIFIER:
- ret = xmlUCSIsCatSk(codepoint);
- break;
- case XML_REGEXP_SYMBOL_OTHERS:
- ret = xmlUCSIsCatSo(codepoint);
- break;
- case XML_REGEXP_OTHER:
- ret = xmlUCSIsCatC(codepoint);
- break;
- case XML_REGEXP_OTHER_CONTROL:
- ret = xmlUCSIsCatCc(codepoint);
- break;
- case XML_REGEXP_OTHER_FORMAT:
- ret = xmlUCSIsCatCf(codepoint);
- break;
- case XML_REGEXP_OTHER_PRIVATE:
- ret = xmlUCSIsCatCo(codepoint);
- break;
- case XML_REGEXP_OTHER_NA:
- /* ret = xmlUCSIsCatCn(codepoint); */
- /* Seems it doesn't exist anymore in recent Unicode releases */
- ret = 0;
- break;
- case XML_REGEXP_BLOCK_NAME:
- ret = xmlUCSIsBlock(codepoint, (const char *) blockName);
- break;
- }
- if (neg)
- return(!ret);
- return(ret);
-}
-
-static int
-xmlRegCheckCharacter(xmlRegAtomPtr atom, int codepoint) {
- int i, ret = 0;
- xmlRegRangePtr range;
-
- if ((atom == NULL) || (!IS_CHAR(codepoint)))
- return(-1);
-
- switch (atom->type) {
- case XML_REGEXP_SUBREG:
- case XML_REGEXP_EPSILON:
- return(-1);
- case XML_REGEXP_CHARVAL:
- return(codepoint == atom->codepoint);
- case XML_REGEXP_RANGES: {
- int accept = 0;
-
- for (i = 0;i < atom->nbRanges;i++) {
- range = atom->ranges[i];
- if (range->neg == 2) {
- ret = xmlRegCheckCharacterRange(range->type, codepoint,
- 0, range->start, range->end,
- range->blockName);
- if (ret != 0)
- return(0); /* excluded char */
- } else if (range->neg) {
- ret = xmlRegCheckCharacterRange(range->type, codepoint,
- 0, range->start, range->end,
- range->blockName);
- if (ret == 0)
- accept = 1;
- else
- return(0);
- } else {
- ret = xmlRegCheckCharacterRange(range->type, codepoint,
- 0, range->start, range->end,
- range->blockName);
- if (ret != 0)
- accept = 1; /* might still be excluded */
- }
- }
- return(accept);
- }
- case XML_REGEXP_STRING:
- printf("TODO: XML_REGEXP_STRING\n");
- return(-1);
- case XML_REGEXP_ANYCHAR:
- case XML_REGEXP_ANYSPACE:
- case XML_REGEXP_NOTSPACE:
- case XML_REGEXP_INITNAME:
- case XML_REGEXP_NOTINITNAME:
- case XML_REGEXP_NAMECHAR:
- case XML_REGEXP_NOTNAMECHAR:
- case XML_REGEXP_DECIMAL:
- case XML_REGEXP_NOTDECIMAL:
- case XML_REGEXP_REALCHAR:
- case XML_REGEXP_NOTREALCHAR:
- case XML_REGEXP_LETTER:
- case XML_REGEXP_LETTER_UPPERCASE:
- case XML_REGEXP_LETTER_LOWERCASE:
- case XML_REGEXP_LETTER_TITLECASE:
- case XML_REGEXP_LETTER_MODIFIER:
- case XML_REGEXP_LETTER_OTHERS:
- case XML_REGEXP_MARK:
- case XML_REGEXP_MARK_NONSPACING:
- case XML_REGEXP_MARK_SPACECOMBINING:
- case XML_REGEXP_MARK_ENCLOSING:
- case XML_REGEXP_NUMBER:
- case XML_REGEXP_NUMBER_DECIMAL:
- case XML_REGEXP_NUMBER_LETTER:
- case XML_REGEXP_NUMBER_OTHERS:
- case XML_REGEXP_PUNCT:
- case XML_REGEXP_PUNCT_CONNECTOR:
- case XML_REGEXP_PUNCT_DASH:
- case XML_REGEXP_PUNCT_OPEN:
- case XML_REGEXP_PUNCT_CLOSE:
- case XML_REGEXP_PUNCT_INITQUOTE:
- case XML_REGEXP_PUNCT_FINQUOTE:
- case XML_REGEXP_PUNCT_OTHERS:
- case XML_REGEXP_SEPAR:
- case XML_REGEXP_SEPAR_SPACE:
- case XML_REGEXP_SEPAR_LINE:
- case XML_REGEXP_SEPAR_PARA:
- case XML_REGEXP_SYMBOL:
- case XML_REGEXP_SYMBOL_MATH:
- case XML_REGEXP_SYMBOL_CURRENCY:
- case XML_REGEXP_SYMBOL_MODIFIER:
- case XML_REGEXP_SYMBOL_OTHERS:
- case XML_REGEXP_OTHER:
- case XML_REGEXP_OTHER_CONTROL:
- case XML_REGEXP_OTHER_FORMAT:
- case XML_REGEXP_OTHER_PRIVATE:
- case XML_REGEXP_OTHER_NA:
- case XML_REGEXP_BLOCK_NAME:
- ret = xmlRegCheckCharacterRange(atom->type, codepoint, 0, 0, 0,
- (const xmlChar *)atom->valuep);
- if (atom->neg)
- ret = !ret;
- break;
- }
- return(ret);
-}
-
-/************************************************************************
- * *
- * Saving and restoring state of an execution context *
- * *
- ************************************************************************/
-
-#ifdef DEBUG_REGEXP_EXEC
-static void
-xmlFARegDebugExec(xmlRegExecCtxtPtr exec) {
- printf("state: %d:%d:idx %d", exec->state->no, exec->transno, exec->index);
- if (exec->inputStack != NULL) {
- int i;
- printf(": ");
- for (i = 0;(i < 3) && (i < exec->inputStackNr);i++)
- printf("%s ", (const char *)
- exec->inputStack[exec->inputStackNr - (i + 1)].value);
- } else {
- printf(": %s", &(exec->inputString[exec->index]));
- }
- printf("\n");
-}
-#endif
-
-static void
-xmlFARegExecSave(xmlRegExecCtxtPtr exec) {
-#ifdef DEBUG_REGEXP_EXEC
- printf("saving ");
- exec->transno++;
- xmlFARegDebugExec(exec);
- exec->transno--;
-#endif
-#ifdef MAX_PUSH
- if (exec->nbPush > MAX_PUSH) {
- return;
- }
- exec->nbPush++;
-#endif
-
- if (exec->maxRollbacks == 0) {
- exec->maxRollbacks = 4;
- exec->rollbacks = (xmlRegExecRollback *) xmlMalloc(exec->maxRollbacks *
- sizeof(xmlRegExecRollback));
- if (exec->rollbacks == NULL) {
- xmlRegexpErrMemory(NULL, "saving regexp");
- exec->maxRollbacks = 0;
- return;
- }
- memset(exec->rollbacks, 0,
- exec->maxRollbacks * sizeof(xmlRegExecRollback));
- } else if (exec->nbRollbacks >= exec->maxRollbacks) {
- xmlRegExecRollback *tmp;
- int len = exec->maxRollbacks;
-
- exec->maxRollbacks *= 2;
- tmp = (xmlRegExecRollback *) xmlRealloc(exec->rollbacks,
- exec->maxRollbacks * sizeof(xmlRegExecRollback));
- if (tmp == NULL) {
- xmlRegexpErrMemory(NULL, "saving regexp");
- exec->maxRollbacks /= 2;
- return;
- }
- exec->rollbacks = tmp;
- tmp = &exec->rollbacks[len];
- memset(tmp, 0, (exec->maxRollbacks - len) * sizeof(xmlRegExecRollback));
- }
- exec->rollbacks[exec->nbRollbacks].state = exec->state;
- exec->rollbacks[exec->nbRollbacks].index = exec->index;
- exec->rollbacks[exec->nbRollbacks].nextbranch = exec->transno + 1;
- if (exec->comp->nbCounters > 0) {
- if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
- exec->rollbacks[exec->nbRollbacks].counts = (int *)
- xmlMalloc(exec->comp->nbCounters * sizeof(int));
- if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
- xmlRegexpErrMemory(NULL, "saving regexp");
- exec->status = -5;
- return;
- }
- }
- memcpy(exec->rollbacks[exec->nbRollbacks].counts, exec->counts,
- exec->comp->nbCounters * sizeof(int));
- }
- exec->nbRollbacks++;
-}
-
-static void
-xmlFARegExecRollBack(xmlRegExecCtxtPtr exec) {
- if (exec->nbRollbacks <= 0) {
- exec->status = -1;
-#ifdef DEBUG_REGEXP_EXEC
- printf("rollback failed on empty stack\n");
-#endif
- return;
- }
- exec->nbRollbacks--;
- exec->state = exec->rollbacks[exec->nbRollbacks].state;
- exec->index = exec->rollbacks[exec->nbRollbacks].index;
- exec->transno = exec->rollbacks[exec->nbRollbacks].nextbranch;
- if (exec->comp->nbCounters > 0) {
- if (exec->rollbacks[exec->nbRollbacks].counts == NULL) {
- fprintf(stderr, "exec save: allocation failed");
- exec->status = -6;
- return;
- }
- if (exec->counts) {
- memcpy(exec->counts, exec->rollbacks[exec->nbRollbacks].counts,
- exec->comp->nbCounters * sizeof(int));
- }
- }
-
-#ifdef DEBUG_REGEXP_EXEC
- printf("restored ");
- xmlFARegDebugExec(exec);
-#endif
-}
-
-/************************************************************************
- * *
- * Verifier, running an input against a compiled regexp *
- * *
- ************************************************************************/
-
-static int
-xmlFARegExec(xmlRegexpPtr comp, const xmlChar *content) {
- xmlRegExecCtxt execval;
- xmlRegExecCtxtPtr exec = &execval;
- int ret, codepoint = 0, len, deter;
-
- exec->inputString = content;
- exec->index = 0;
- exec->nbPush = 0;
- exec->determinist = 1;
- exec->maxRollbacks = 0;
- exec->nbRollbacks = 0;
- exec->rollbacks = NULL;
- exec->status = 0;
- exec->comp = comp;
- exec->state = comp->states[0];
- exec->transno = 0;
- exec->transcount = 0;
- exec->inputStack = NULL;
- exec->inputStackMax = 0;
- if (comp->nbCounters > 0) {
- exec->counts = (int *) xmlMalloc(comp->nbCounters * sizeof(int));
- if (exec->counts == NULL) {
- xmlRegexpErrMemory(NULL, "running regexp");
- return(-1);
- }
- memset(exec->counts, 0, comp->nbCounters * sizeof(int));
- } else
- exec->counts = NULL;
- while ((exec->status == 0) && (exec->state != NULL) &&
- ((exec->inputString[exec->index] != 0) ||
- ((exec->state != NULL) &&
- (exec->state->type != XML_REGEXP_FINAL_STATE)))) {
- xmlRegTransPtr trans;
- xmlRegAtomPtr atom;
-
- /*
- * If end of input on non-terminal state, rollback, however we may
- * still have epsilon like transition for counted transitions
- * on counters, in that case don't break too early. Additionally,
- * if we are working on a range like "AB{0,2}", where B is not present,
- * we don't want to break.
- */
- len = 1;
- if ((exec->inputString[exec->index] == 0) && (exec->counts == NULL)) {
- /*
- * if there is a transition, we must check if
- * atom allows minOccurs of 0
- */
- if (exec->transno < exec->state->nbTrans) {
- trans = &exec->state->trans[exec->transno];
- if (trans->to >=0) {
- atom = trans->atom;
- if (!((atom->min == 0) && (atom->max > 0)))
- goto rollback;
- }
- } else
- goto rollback;
- }
-
- exec->transcount = 0;
- for (;exec->transno < exec->state->nbTrans;exec->transno++) {
- trans = &exec->state->trans[exec->transno];
- if (trans->to < 0)
- continue;
- atom = trans->atom;
- ret = 0;
- deter = 1;
- if (trans->count >= 0) {
- int count;
- xmlRegCounterPtr counter;
-
- if (exec->counts == NULL) {
- exec->status = -1;
- goto error;
- }
- /*
- * A counted transition.
- */
-
- count = exec->counts[trans->count];
- counter = &exec->comp->counters[trans->count];
-#ifdef DEBUG_REGEXP_EXEC
- printf("testing count %d: val %d, min %d, max %d\n",
- trans->count, count, counter->min, counter->max);
-#endif
- ret = ((count >= counter->min) && (count <= counter->max));
- if ((ret) && (counter->min != counter->max))
- deter = 0;
- } else if (atom == NULL) {
- fprintf(stderr, "epsilon transition left at runtime\n");
- exec->status = -2;
- break;
- } else if (exec->inputString[exec->index] != 0) {
- codepoint = CUR_SCHAR(&(exec->inputString[exec->index]), len);
- ret = xmlRegCheckCharacter(atom, codepoint);
- if ((ret == 1) && (atom->min >= 0) && (atom->max > 0)) {
- xmlRegStatePtr to = comp->states[trans->to];
-
- /*
- * this is a multiple input sequence
- * If there is a counter associated increment it now.
- * before potentially saving and rollback
- * do not increment if the counter is already over the
- * maximum limit in which case get to next transition
- */
- if (trans->counter >= 0) {
- xmlRegCounterPtr counter;
-
- if ((exec->counts == NULL) ||
- (exec->comp == NULL) ||
- (exec->comp->counters == NULL)) {
- exec->status = -1;
- goto error;
- }
- counter = &exec->comp->counters[trans->counter];
- if (exec->counts[trans->counter] >= counter->max)
- continue; /* for loop on transitions */
-
-#ifdef DEBUG_REGEXP_EXEC
- printf("Increasing count %d\n", trans->counter);
-#endif
- exec->counts[trans->counter]++;
- }
- if (exec->state->nbTrans > exec->transno + 1) {
- xmlFARegExecSave(exec);
- }
- exec->transcount = 1;
- do {
- /*
- * Try to progress as much as possible on the input
- */
- if (exec->transcount == atom->max) {
- break;
- }
- exec->index += len;
- /*
- * End of input: stop here
- */
- if (exec->inputString[exec->index] == 0) {
- exec->index -= len;
- break;
- }
- if (exec->transcount >= atom->min) {
- int transno = exec->transno;
- xmlRegStatePtr state = exec->state;
-
- /*
- * The transition is acceptable save it
- */
- exec->transno = -1; /* trick */
- exec->state = to;
- xmlFARegExecSave(exec);
- exec->transno = transno;
- exec->state = state;
- }
- codepoint = CUR_SCHAR(&(exec->inputString[exec->index]),
- len);
- ret = xmlRegCheckCharacter(atom, codepoint);
- exec->transcount++;
- } while (ret == 1);
- if (exec->transcount < atom->min)
- ret = 0;
-
- /*
- * If the last check failed but one transition was found
- * possible, rollback
- */
- if (ret < 0)
- ret = 0;
- if (ret == 0) {
- goto rollback;
- }
- if (trans->counter >= 0) {
- if (exec->counts == NULL) {
- exec->status = -1;
- goto error;
- }
-#ifdef DEBUG_REGEXP_EXEC
- printf("Decreasing count %d\n", trans->counter);
-#endif
- exec->counts[trans->counter]--;
- }
- } else if ((ret == 0) && (atom->min == 0) && (atom->max > 0)) {
- /*
- * we don't match on the codepoint, but minOccurs of 0
- * says that's ok. Setting len to 0 inhibits stepping
- * over the codepoint.
- */
- exec->transcount = 1;
- len = 0;
- ret = 1;
- }
- } else if ((atom->min == 0) && (atom->max > 0)) {
- /* another spot to match when minOccurs is 0 */
- exec->transcount = 1;
- len = 0;
- ret = 1;
- }
- if (ret == 1) {
- if ((trans->nd == 1) ||
- ((trans->count >= 0) && (deter == 0) &&
- (exec->state->nbTrans > exec->transno + 1))) {
-#ifdef DEBUG_REGEXP_EXEC
- if (trans->nd == 1)
- printf("Saving on nd transition atom %d for %c at %d\n",
- trans->atom->no, codepoint, exec->index);
- else
- printf("Saving on counted transition count %d for %c at %d\n",
- trans->count, codepoint, exec->index);
-#endif
- xmlFARegExecSave(exec);
- }
- if (trans->counter >= 0) {
- xmlRegCounterPtr counter;
-
- /* make sure we don't go over the counter maximum value */
- if ((exec->counts == NULL) ||
- (exec->comp == NULL) ||
- (exec->comp->counters == NULL)) {
- exec->status = -1;
- goto error;
- }
- counter = &exec->comp->counters[trans->counter];
- if (exec->counts[trans->counter] >= counter->max)
- continue; /* for loop on transitions */
-#ifdef DEBUG_REGEXP_EXEC
- printf("Increasing count %d\n", trans->counter);
-#endif
- exec->counts[trans->counter]++;
- }
- if ((trans->count >= 0) &&
- (trans->count < REGEXP_ALL_COUNTER)) {
- if (exec->counts == NULL) {
- exec->status = -1;
- goto error;
- }
-#ifdef DEBUG_REGEXP_EXEC
- printf("resetting count %d on transition\n",
- trans->count);
-#endif
- exec->counts[trans->count] = 0;
- }
-#ifdef DEBUG_REGEXP_EXEC
- printf("entering state %d\n", trans->to);
-#endif
- exec->state = comp->states[trans->to];
- exec->transno = 0;
- if (trans->atom != NULL) {
- exec->index += len;
- }
- goto progress;
- } else if (ret < 0) {
- exec->status = -4;
- break;
- }
- }
- if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
-rollback:
- /*
- * Failed to find a way out
- */
- exec->determinist = 0;
-#ifdef DEBUG_REGEXP_EXEC
- printf("rollback from state %d on %d:%c\n", exec->state->no,
- codepoint,codepoint);
-#endif
- xmlFARegExecRollBack(exec);
- }
-progress:
- continue;
- }
-error:
- if (exec->rollbacks != NULL) {
- if (exec->counts != NULL) {
- int i;
-
- for (i = 0;i < exec->maxRollbacks;i++)
- if (exec->rollbacks[i].counts != NULL)
- xmlFree(exec->rollbacks[i].counts);
- }
- xmlFree(exec->rollbacks);
- }
- if (exec->state == NULL)
- return(-1);
- if (exec->counts != NULL)
- xmlFree(exec->counts);
- if (exec->status == 0)
- return(1);
- if (exec->status == -1) {
- if (exec->nbPush > MAX_PUSH)
- return(-1);
- return(0);
- }
- return(exec->status);
-}
-
-/************************************************************************
- * *
- * Progressive interface to the verifier one atom at a time *
- * *
- ************************************************************************/
-#ifdef DEBUG_ERR
-static void testerr(xmlRegExecCtxtPtr exec);
-#endif
-
-/**
- * xmlRegNewExecCtxt:
- * @comp: a precompiled regular expression
- * @callback: a callback function used for handling progresses in the
- * automata matching phase
- * @data: the context data associated to the callback in this context
- *
- * Build a context used for progressive evaluation of a regexp.
- *
- * Returns the new context
- */
-xmlRegExecCtxtPtr
-xmlRegNewExecCtxt(xmlRegexpPtr comp, xmlRegExecCallbacks callback, void *data) {
- xmlRegExecCtxtPtr exec;
-
- if (comp == NULL)
- return(NULL);
- if ((comp->compact == NULL) && (comp->states == NULL))
- return(NULL);
- exec = (xmlRegExecCtxtPtr) xmlMalloc(sizeof(xmlRegExecCtxt));
- if (exec == NULL) {
- xmlRegexpErrMemory(NULL, "creating execution context");
- return(NULL);
- }
- memset(exec, 0, sizeof(xmlRegExecCtxt));
- exec->inputString = NULL;
- exec->index = 0;
- exec->determinist = 1;
- exec->maxRollbacks = 0;
- exec->nbRollbacks = 0;
- exec->rollbacks = NULL;
- exec->status = 0;
- exec->comp = comp;
- if (comp->compact == NULL)
- exec->state = comp->states[0];
- exec->transno = 0;
- exec->transcount = 0;
- exec->callback = callback;
- exec->data = data;
- if (comp->nbCounters > 0) {
- /*
- * For error handling, exec->counts is allocated twice the size
- * the second half is used to store the data in case of rollback
- */
- exec->counts = (int *) xmlMalloc(comp->nbCounters * sizeof(int)
- * 2);
- if (exec->counts == NULL) {
- xmlRegexpErrMemory(NULL, "creating execution context");
- xmlFree(exec);
- return(NULL);
- }
- memset(exec->counts, 0, comp->nbCounters * sizeof(int) * 2);
- exec->errCounts = &exec->counts[comp->nbCounters];
- } else {
- exec->counts = NULL;
- exec->errCounts = NULL;
- }
- exec->inputStackMax = 0;
- exec->inputStackNr = 0;
- exec->inputStack = NULL;
- exec->errStateNo = -1;
- exec->errString = NULL;
- exec->nbPush = 0;
- return(exec);
-}
-
-/**
- * xmlRegFreeExecCtxt:
- * @exec: a regular expression evaulation context
- *
- * Free the structures associated to a regular expression evaulation context.
- */
-void
-xmlRegFreeExecCtxt(xmlRegExecCtxtPtr exec) {
- if (exec == NULL)
- return;
-
- if (exec->rollbacks != NULL) {
- if (exec->counts != NULL) {
- int i;
-
- for (i = 0;i < exec->maxRollbacks;i++)
- if (exec->rollbacks[i].counts != NULL)
- xmlFree(exec->rollbacks[i].counts);
- }
- xmlFree(exec->rollbacks);
- }
- if (exec->counts != NULL)
- xmlFree(exec->counts);
- if (exec->inputStack != NULL) {
- int i;
-
- for (i = 0;i < exec->inputStackNr;i++) {
- if (exec->inputStack[i].value != NULL)
- xmlFree(exec->inputStack[i].value);
- }
- xmlFree(exec->inputStack);
- }
- if (exec->errString != NULL)
- xmlFree(exec->errString);
- xmlFree(exec);
-}
-
-static void
-xmlFARegExecSaveInputString(xmlRegExecCtxtPtr exec, const xmlChar *value,
- void *data) {
-#ifdef DEBUG_PUSH
- printf("saving value: %d:%s\n", exec->inputStackNr, value);
-#endif
- if (exec->inputStackMax == 0) {
- exec->inputStackMax = 4;
- exec->inputStack = (xmlRegInputTokenPtr)
- xmlMalloc(exec->inputStackMax * sizeof(xmlRegInputToken));
- if (exec->inputStack == NULL) {
- xmlRegexpErrMemory(NULL, "pushing input string");
- exec->inputStackMax = 0;
- return;
- }
- } else if (exec->inputStackNr + 1 >= exec->inputStackMax) {
- xmlRegInputTokenPtr tmp;
-
- exec->inputStackMax *= 2;
- tmp = (xmlRegInputTokenPtr) xmlRealloc(exec->inputStack,
- exec->inputStackMax * sizeof(xmlRegInputToken));
- if (tmp == NULL) {
- xmlRegexpErrMemory(NULL, "pushing input string");
- exec->inputStackMax /= 2;
- return;
- }
- exec->inputStack = tmp;
- }
- exec->inputStack[exec->inputStackNr].value = xmlStrdup(value);
- exec->inputStack[exec->inputStackNr].data = data;
- exec->inputStackNr++;
- exec->inputStack[exec->inputStackNr].value = NULL;
- exec->inputStack[exec->inputStackNr].data = NULL;
-}
-
-/**
- * xmlRegStrEqualWildcard:
- * @expStr: the string to be evaluated
- * @valStr: the validation string
- *
- * Checks if both strings are equal or have the same content. "*"
- * can be used as a wildcard in @valStr; "|" is used as a seperator of
- * substrings in both @expStr and @valStr.
- *
- * Returns 1 if the comparison is satisfied and the number of substrings
- * is equal, 0 otherwise.
- */
-
-static int
-xmlRegStrEqualWildcard(const xmlChar *expStr, const xmlChar *valStr) {
- if (expStr == valStr) return(1);
- if (expStr == NULL) return(0);
- if (valStr == NULL) return(0);
- do {
- /*
- * Eval if we have a wildcard for the current item.
- */
- if (*expStr != *valStr) {
- /* if one of them starts with a wildcard make valStr be it */
- if (*valStr == '*') {
- const xmlChar *tmp;
-
- tmp = valStr;
- valStr = expStr;
- expStr = tmp;
- }
- if ((*valStr != 0) && (*expStr != 0) && (*expStr++ == '*')) {
- do {
- if (*valStr == XML_REG_STRING_SEPARATOR)
- break;
- valStr++;
- } while (*valStr != 0);
- continue;
- } else
- return(0);
- }
- expStr++;
- valStr++;
- } while (*valStr != 0);
- if (*expStr != 0)
- return (0);
- else
- return (1);
-}
-
-/**
- * xmlRegCompactPushString:
- * @exec: a regexp execution context
- * @comp: the precompiled exec with a compact table
- * @value: a string token input
- * @data: data associated to the token to reuse in callbacks
- *
- * Push one input token in the execution context
- *
- * Returns: 1 if the regexp reached a final state, 0 if non-final, and
- * a negative value in case of error.
- */
-static int
-xmlRegCompactPushString(xmlRegExecCtxtPtr exec,
- xmlRegexpPtr comp,
- const xmlChar *value,
- void *data) {
- int state = exec->index;
- int i, target;
-
- if ((comp == NULL) || (comp->compact == NULL) || (comp->stringMap == NULL))
- return(-1);
-
- if (value == NULL) {
- /*
- * are we at a final state ?
- */
- if (comp->compact[state * (comp->nbstrings + 1)] ==
- XML_REGEXP_FINAL_STATE)
- return(1);
- return(0);
- }
-
-#ifdef DEBUG_PUSH
- printf("value pushed: %s\n", value);
-#endif
-
- /*
- * Examine all outside transitions from current state
- */
- for (i = 0;i < comp->nbstrings;i++) {
- target = comp->compact[state * (comp->nbstrings + 1) + i + 1];
- if ((target > 0) && (target <= comp->nbstates)) {
- target--; /* to avoid 0 */
- if (xmlRegStrEqualWildcard(comp->stringMap[i], value)) {
- exec->index = target;
- if ((exec->callback != NULL) && (comp->transdata != NULL)) {
- exec->callback(exec->data, value,
- comp->transdata[state * comp->nbstrings + i], data);
- }
-#ifdef DEBUG_PUSH
- printf("entering state %d\n", target);
-#endif
- if (comp->compact[target * (comp->nbstrings + 1)] ==
- XML_REGEXP_SINK_STATE)
- goto error;
-
- if (comp->compact[target * (comp->nbstrings + 1)] ==
- XML_REGEXP_FINAL_STATE)
- return(1);
- return(0);
- }
- }
- }
- /*
- * Failed to find an exit transition out from current state for the
- * current token
- */
-#ifdef DEBUG_PUSH
- printf("failed to find a transition for %s on state %d\n", value, state);
-#endif
-error:
- if (exec->errString != NULL)
- xmlFree(exec->errString);
- exec->errString = xmlStrdup(value);
- exec->errStateNo = state;
- exec->status = -1;
-#ifdef DEBUG_ERR
- testerr(exec);
-#endif
- return(-1);
-}
-
-/**
- * xmlRegExecPushStringInternal:
- * @exec: a regexp execution context or NULL to indicate the end
- * @value: a string token input
- * @data: data associated to the token to reuse in callbacks
- * @compound: value was assembled from 2 strings
- *
- * Push one input token in the execution context
- *
- * Returns: 1 if the regexp reached a final state, 0 if non-final, and
- * a negative value in case of error.
- */
-static int
-xmlRegExecPushStringInternal(xmlRegExecCtxtPtr exec, const xmlChar *value,
- void *data, int compound) {
- xmlRegTransPtr trans;
- xmlRegAtomPtr atom;
- int ret;
- int final = 0;
- int progress = 1;
-
- if (exec == NULL)
- return(-1);
- if (exec->comp == NULL)
- return(-1);
- if (exec->status != 0)
- return(exec->status);
-
- if (exec->comp->compact != NULL)
- return(xmlRegCompactPushString(exec, exec->comp, value, data));
-
- if (value == NULL) {
- if (exec->state->type == XML_REGEXP_FINAL_STATE)
- return(1);
- final = 1;
- }
-
-#ifdef DEBUG_PUSH
- printf("value pushed: %s\n", value);
-#endif
- /*
- * If we have an active rollback stack push the new value there
- * and get back to where we were left
- */
- if ((value != NULL) && (exec->inputStackNr > 0)) {
- xmlFARegExecSaveInputString(exec, value, data);
- value = exec->inputStack[exec->index].value;
- data = exec->inputStack[exec->index].data;
-#ifdef DEBUG_PUSH
- printf("value loaded: %s\n", value);
-#endif
- }
-
- while ((exec->status == 0) &&
- ((value != NULL) ||
- ((final == 1) &&
- (exec->state->type != XML_REGEXP_FINAL_STATE)))) {
-
- /*
- * End of input on non-terminal state, rollback, however we may
- * still have epsilon like transition for counted transitions
- * on counters, in that case don't break too early.
- */
- if ((value == NULL) && (exec->counts == NULL))
- goto rollback;
-
- exec->transcount = 0;
- for (;exec->transno < exec->state->nbTrans;exec->transno++) {
- trans = &exec->state->trans[exec->transno];
- if (trans->to < 0)
- continue;
- atom = trans->atom;
- ret = 0;
- if (trans->count == REGEXP_ALL_LAX_COUNTER) {
- int i;
- int count;
- xmlRegTransPtr t;
- xmlRegCounterPtr counter;
-
- ret = 0;
-
-#ifdef DEBUG_PUSH
- printf("testing all lax %d\n", trans->count);
-#endif
- /*
- * Check all counted transitions from the current state
- */
- if ((value == NULL) && (final)) {
- ret = 1;
- } else if (value != NULL) {
- for (i = 0;i < exec->state->nbTrans;i++) {
- t = &exec->state->trans[i];
- if ((t->counter < 0) || (t == trans))
- continue;
- counter = &exec->comp->counters[t->counter];
- count = exec->counts[t->counter];
- if ((count < counter->max) &&
- (t->atom != NULL) &&
- (xmlStrEqual(value, t->atom->valuep))) {
- ret = 0;
- break;
- }
- if ((count >= counter->min) &&
- (count < counter->max) &&
- (t->atom != NULL) &&
- (xmlStrEqual(value, t->atom->valuep))) {
- ret = 1;
- break;
- }
- }
- }
- } else if (trans->count == REGEXP_ALL_COUNTER) {
- int i;
- int count;
- xmlRegTransPtr t;
- xmlRegCounterPtr counter;
-
- ret = 1;
-
-#ifdef DEBUG_PUSH
- printf("testing all %d\n", trans->count);
-#endif
- /*
- * Check all counted transitions from the current state
- */
- for (i = 0;i < exec->state->nbTrans;i++) {
- t = &exec->state->trans[i];
- if ((t->counter < 0) || (t == trans))
- continue;
- counter = &exec->comp->counters[t->counter];
- count = exec->counts[t->counter];
- if ((count < counter->min) || (count > counter->max)) {
- ret = 0;
- break;
- }
- }
- } else if (trans->count >= 0) {
- int count;
- xmlRegCounterPtr counter;
-
- /*
- * A counted transition.
- */
-
- count = exec->counts[trans->count];
- counter = &exec->comp->counters[trans->count];
-#ifdef DEBUG_PUSH
- printf("testing count %d: val %d, min %d, max %d\n",
- trans->count, count, counter->min, counter->max);
-#endif
- ret = ((count >= counter->min) && (count <= counter->max));
- } else if (atom == NULL) {
- fprintf(stderr, "epsilon transition left at runtime\n");
- exec->status = -2;
- break;
- } else if (value != NULL) {
- ret = xmlRegStrEqualWildcard(atom->valuep, value);
- if (atom->neg) {
- ret = !ret;
- if (!compound)
- ret = 0;
- }
- if ((ret == 1) && (trans->counter >= 0)) {
- xmlRegCounterPtr counter;
- int count;
-
- count = exec->counts[trans->counter];
- counter = &exec->comp->counters[trans->counter];
- if (count >= counter->max)
- ret = 0;
- }
-
- if ((ret == 1) && (atom->min > 0) && (atom->max > 0)) {
- xmlRegStatePtr to = exec->comp->states[trans->to];
-
- /*
- * this is a multiple input sequence
- */
- if (exec->state->nbTrans > exec->transno + 1) {
- if (exec->inputStackNr <= 0) {
- xmlFARegExecSaveInputString(exec, value, data);
- }
- xmlFARegExecSave(exec);
- }
- exec->transcount = 1;
- do {
- /*
- * Try to progress as much as possible on the input
- */
- if (exec->transcount == atom->max) {
- break;
- }
- exec->index++;
- value = exec->inputStack[exec->index].value;
- data = exec->inputStack[exec->index].data;
-#ifdef DEBUG_PUSH
- printf("value loaded: %s\n", value);
-#endif
-
- /*
- * End of input: stop here
- */
- if (value == NULL) {
- exec->index --;
- break;
- }
- if (exec->transcount >= atom->min) {
- int transno = exec->transno;
- xmlRegStatePtr state = exec->state;
-
- /*
- * The transition is acceptable save it
- */
- exec->transno = -1; /* trick */
- exec->state = to;
- if (exec->inputStackNr <= 0) {
- xmlFARegExecSaveInputString(exec, value, data);
- }
- xmlFARegExecSave(exec);
- exec->transno = transno;
- exec->state = state;
- }
- ret = xmlStrEqual(value, atom->valuep);
- exec->transcount++;
- } while (ret == 1);
- if (exec->transcount < atom->min)
- ret = 0;
-
- /*
- * If the last check failed but one transition was found
- * possible, rollback
- */
- if (ret < 0)
- ret = 0;
- if (ret == 0) {
- goto rollback;
- }
- }
- }
- if (ret == 1) {
- if ((exec->callback != NULL) && (atom != NULL) &&
- (data != NULL)) {
- exec->callback(exec->data, atom->valuep,
- atom->data, data);
- }
- if (exec->state->nbTrans > exec->transno + 1) {
- if (exec->inputStackNr <= 0) {
- xmlFARegExecSaveInputString(exec, value, data);
- }
- xmlFARegExecSave(exec);
- }
- if (trans->counter >= 0) {
-#ifdef DEBUG_PUSH
- printf("Increasing count %d\n", trans->counter);
-#endif
- exec->counts[trans->counter]++;
- }
- if ((trans->count >= 0) &&
- (trans->count < REGEXP_ALL_COUNTER)) {
-#ifdef DEBUG_REGEXP_EXEC
- printf("resetting count %d on transition\n",
- trans->count);
-#endif
- exec->counts[trans->count] = 0;
- }
-#ifdef DEBUG_PUSH
- printf("entering state %d\n", trans->to);
-#endif
- if ((exec->comp->states[trans->to] != NULL) &&
- (exec->comp->states[trans->to]->type ==
- XML_REGEXP_SINK_STATE)) {
- /*
- * entering a sink state, save the current state as error
- * state.
- */
- if (exec->errString != NULL)
- xmlFree(exec->errString);
- exec->errString = xmlStrdup(value);
- exec->errState = exec->state;
- memcpy(exec->errCounts, exec->counts,
- exec->comp->nbCounters * sizeof(int));
- }
- exec->state = exec->comp->states[trans->to];
- exec->transno = 0;
- if (trans->atom != NULL) {
- if (exec->inputStack != NULL) {
- exec->index++;
- if (exec->index < exec->inputStackNr) {
- value = exec->inputStack[exec->index].value;
- data = exec->inputStack[exec->index].data;
-#ifdef DEBUG_PUSH
- printf("value loaded: %s\n", value);
-#endif
- } else {
- value = NULL;
- data = NULL;
-#ifdef DEBUG_PUSH
- printf("end of input\n");
-#endif
- }
- } else {
- value = NULL;
- data = NULL;
-#ifdef DEBUG_PUSH
- printf("end of input\n");
-#endif
- }
- }
- goto progress;
- } else if (ret < 0) {
- exec->status = -4;
- break;
- }
- }
- if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
-rollback:
- /*
- * if we didn't yet rollback on the current input
- * store the current state as the error state.
- */
- if ((progress) && (exec->state != NULL) &&
- (exec->state->type != XML_REGEXP_SINK_STATE)) {
- progress = 0;
- if (exec->errString != NULL)
- xmlFree(exec->errString);
- exec->errString = xmlStrdup(value);
- exec->errState = exec->state;
- if (exec->comp->nbCounters)
- memcpy(exec->errCounts, exec->counts,
- exec->comp->nbCounters * sizeof(int));
- }
-
- /*
- * Failed to find a way out
- */
- exec->determinist = 0;
- xmlFARegExecRollBack(exec);
- if ((exec->inputStack != NULL ) && (exec->status == 0)) {
- value = exec->inputStack[exec->index].value;
- data = exec->inputStack[exec->index].data;
-#ifdef DEBUG_PUSH
- printf("value loaded: %s\n", value);
-#endif
- }
- }
- continue;
-progress:
- progress = 1;
- continue;
- }
- if (exec->status == 0) {
- return(exec->state->type == XML_REGEXP_FINAL_STATE);
- }
-#ifdef DEBUG_ERR
- if (exec->status < 0) {
- testerr(exec);
- }
-#endif
- return(exec->status);
-}
-
-/**
- * xmlRegExecPushString:
- * @exec: a regexp execution context or NULL to indicate the end
- * @value: a string token input
- * @data: data associated to the token to reuse in callbacks
- *
- * Push one input token in the execution context
- *
- * Returns: 1 if the regexp reached a final state, 0 if non-final, and
- * a negative value in case of error.
- */
-int
-xmlRegExecPushString(xmlRegExecCtxtPtr exec, const xmlChar *value,
- void *data) {
- return(xmlRegExecPushStringInternal(exec, value, data, 0));
-}
-
-/**
- * xmlRegExecPushString2:
- * @exec: a regexp execution context or NULL to indicate the end
- * @value: the first string token input
- * @value2: the second string token input
- * @data: data associated to the token to reuse in callbacks
- *
- * Push one input token in the execution context
- *
- * Returns: 1 if the regexp reached a final state, 0 if non-final, and
- * a negative value in case of error.
- */
-int
-xmlRegExecPushString2(xmlRegExecCtxtPtr exec, const xmlChar *value,
- const xmlChar *value2, void *data) {
- xmlChar buf[150];
- int lenn, lenp, ret;
- xmlChar *str;
-
- if (exec == NULL)
- return(-1);
- if (exec->comp == NULL)
- return(-1);
- if (exec->status != 0)
- return(exec->status);
-
- if (value2 == NULL)
- return(xmlRegExecPushString(exec, value, data));
-
- lenn = strlen((char *) value2);
- lenp = strlen((char *) value);
-
- if (150 < lenn + lenp + 2) {
- str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
- if (str == NULL) {
- exec->status = -1;
- return(-1);
- }
- } else {
- str = buf;
- }
- memcpy(&str[0], value, lenp);
- str[lenp] = XML_REG_STRING_SEPARATOR;
- memcpy(&str[lenp + 1], value2, lenn);
- str[lenn + lenp + 1] = 0;
-
- if (exec->comp->compact != NULL)
- ret = xmlRegCompactPushString(exec, exec->comp, str, data);
- else
- ret = xmlRegExecPushStringInternal(exec, str, data, 1);
-
- if (str != buf)
- xmlFree(str);
- return(ret);
-}
-
-/**
- * xmlRegExecGetValues:
- * @exec: a regexp execution context
- * @err: error extraction or normal one
- * @nbval: pointer to the number of accepted values IN/OUT
- * @nbneg: return number of negative transitions
- * @values: pointer to the array of acceptable values
- * @terminal: return value if this was a terminal state
- *
- * Extract informations from the regexp execution, internal routine to
- * implement xmlRegExecNextValues() and xmlRegExecErrInfo()
- *
- * Returns: 0 in case of success or -1 in case of error.
- */
-static int
-xmlRegExecGetValues(xmlRegExecCtxtPtr exec, int err,
- int *nbval, int *nbneg,
- xmlChar **values, int *terminal) {
- int maxval;
- int nb = 0;
-
- if ((exec == NULL) || (nbval == NULL) || (nbneg == NULL) ||
- (values == NULL) || (*nbval <= 0))
- return(-1);
-
- maxval = *nbval;
- *nbval = 0;
- *nbneg = 0;
- if ((exec->comp != NULL) && (exec->comp->compact != NULL)) {
- xmlRegexpPtr comp;
- int target, i, state;
-
- comp = exec->comp;
-
- if (err) {
- if (exec->errStateNo == -1) return(-1);
- state = exec->errStateNo;
- } else {
- state = exec->index;
- }
- if (terminal != NULL) {
- if (comp->compact[state * (comp->nbstrings + 1)] ==
- XML_REGEXP_FINAL_STATE)
- *terminal = 1;
- else
- *terminal = 0;
- }
- for (i = 0;(i < comp->nbstrings) && (nb < maxval);i++) {
- target = comp->compact[state * (comp->nbstrings + 1) + i + 1];
- if ((target > 0) && (target <= comp->nbstates) &&
- (comp->compact[(target - 1) * (comp->nbstrings + 1)] !=
- XML_REGEXP_SINK_STATE)) {
- values[nb++] = comp->stringMap[i];
- (*nbval)++;
- }
- }
- for (i = 0;(i < comp->nbstrings) && (nb < maxval);i++) {
- target = comp->compact[state * (comp->nbstrings + 1) + i + 1];
- if ((target > 0) && (target <= comp->nbstates) &&
- (comp->compact[(target - 1) * (comp->nbstrings + 1)] ==
- XML_REGEXP_SINK_STATE)) {
- values[nb++] = comp->stringMap[i];
- (*nbneg)++;
- }
- }
- } else {
- int transno;
- xmlRegTransPtr trans;
- xmlRegAtomPtr atom;
- xmlRegStatePtr state;
-
- if (terminal != NULL) {
- if (exec->state->type == XML_REGEXP_FINAL_STATE)
- *terminal = 1;
- else
- *terminal = 0;
- }
-
- if (err) {
- if (exec->errState == NULL) return(-1);
- state = exec->errState;
- } else {
- if (exec->state == NULL) return(-1);
- state = exec->state;
- }
- for (transno = 0;
- (transno < state->nbTrans) && (nb < maxval);
- transno++) {
- trans = &state->trans[transno];
- if (trans->to < 0)
- continue;
- atom = trans->atom;
- if ((atom == NULL) || (atom->valuep == NULL))
- continue;
- if (trans->count == REGEXP_ALL_LAX_COUNTER) {
- /* this should not be reached but ... */
- TODO;
- } else if (trans->count == REGEXP_ALL_COUNTER) {
- /* this should not be reached but ... */
- TODO;
- } else if (trans->counter >= 0) {
- xmlRegCounterPtr counter = NULL;
- int count;
-
- if (err)
- count = exec->errCounts[trans->counter];
- else
- count = exec->counts[trans->counter];
- if (exec->comp != NULL)
- counter = &exec->comp->counters[trans->counter];
- if ((counter == NULL) || (count < counter->max)) {
- if (atom->neg)
- values[nb++] = (xmlChar *) atom->valuep2;
- else
- values[nb++] = (xmlChar *) atom->valuep;
- (*nbval)++;
- }
- } else {
- if ((exec->comp != NULL) && (exec->comp->states[trans->to] != NULL) &&
- (exec->comp->states[trans->to]->type !=
- XML_REGEXP_SINK_STATE)) {
- if (atom->neg)
- values[nb++] = (xmlChar *) atom->valuep2;
- else
- values[nb++] = (xmlChar *) atom->valuep;
- (*nbval)++;
- }
- }
- }
- for (transno = 0;
- (transno < state->nbTrans) && (nb < maxval);
- transno++) {
- trans = &state->trans[transno];
- if (trans->to < 0)
- continue;
- atom = trans->atom;
- if ((atom == NULL) || (atom->valuep == NULL))
- continue;
- if (trans->count == REGEXP_ALL_LAX_COUNTER) {
- continue;
- } else if (trans->count == REGEXP_ALL_COUNTER) {
- continue;
- } else if (trans->counter >= 0) {
- continue;
- } else {
- if ((exec->comp->states[trans->to] != NULL) &&
- (exec->comp->states[trans->to]->type ==
- XML_REGEXP_SINK_STATE)) {
- if (atom->neg)
- values[nb++] = (xmlChar *) atom->valuep2;
- else
- values[nb++] = (xmlChar *) atom->valuep;
- (*nbneg)++;
- }
- }
- }
- }
- return(0);
-}
-
-/**
- * xmlRegExecNextValues:
- * @exec: a regexp execution context
- * @nbval: pointer to the number of accepted values IN/OUT
- * @nbneg: return number of negative transitions
- * @values: pointer to the array of acceptable values
- * @terminal: return value if this was a terminal state
- *
- * Extract informations from the regexp execution,
- * the parameter @values must point to an array of @nbval string pointers
- * on return nbval will contain the number of possible strings in that
- * state and the @values array will be updated with them. The string values
- * returned will be freed with the @exec context and don't need to be
- * deallocated.
- *
- * Returns: 0 in case of success or -1 in case of error.
- */
-int
-xmlRegExecNextValues(xmlRegExecCtxtPtr exec, int *nbval, int *nbneg,
- xmlChar **values, int *terminal) {
- return(xmlRegExecGetValues(exec, 0, nbval, nbneg, values, terminal));
-}
-
-/**
- * xmlRegExecErrInfo:
- * @exec: a regexp execution context generating an error
- * @string: return value for the error string
- * @nbval: pointer to the number of accepted values IN/OUT
- * @nbneg: return number of negative transitions
- * @values: pointer to the array of acceptable values
- * @terminal: return value if this was a terminal state
- *
- * Extract error informations from the regexp execution, the parameter
- * @string will be updated with the value pushed and not accepted,
- * the parameter @values must point to an array of @nbval string pointers
- * on return nbval will contain the number of possible strings in that
- * state and the @values array will be updated with them. The string values
- * returned will be freed with the @exec context and don't need to be
- * deallocated.
- *
- * Returns: 0 in case of success or -1 in case of error.
- */
-int
-xmlRegExecErrInfo(xmlRegExecCtxtPtr exec, const xmlChar **string,
- int *nbval, int *nbneg, xmlChar **values, int *terminal) {
- if (exec == NULL)
- return(-1);
- if (string != NULL) {
- if (exec->status != 0)
- *string = exec->errString;
- else
- *string = NULL;
- }
- return(xmlRegExecGetValues(exec, 1, nbval, nbneg, values, terminal));
-}
-
-#ifdef DEBUG_ERR
-static void testerr(xmlRegExecCtxtPtr exec) {
- const xmlChar *string;
- xmlChar *values[5];
- int nb = 5;
- int nbneg;
- int terminal;
- xmlRegExecErrInfo(exec, &string, &nb, &nbneg, &values[0], &terminal);
-}
-#endif
-
-#if 0
-static int
-xmlRegExecPushChar(xmlRegExecCtxtPtr exec, int UCS) {
- xmlRegTransPtr trans;
- xmlRegAtomPtr atom;
- int ret;
- int codepoint, len;
-
- if (exec == NULL)
- return(-1);
- if (exec->status != 0)
- return(exec->status);
-
- while ((exec->status == 0) &&
- ((exec->inputString[exec->index] != 0) ||
- (exec->state->type != XML_REGEXP_FINAL_STATE))) {
-
- /*
- * End of input on non-terminal state, rollback, however we may
- * still have epsilon like transition for counted transitions
- * on counters, in that case don't break too early.
- */
- if ((exec->inputString[exec->index] == 0) && (exec->counts == NULL))
- goto rollback;
-
- exec->transcount = 0;
- for (;exec->transno < exec->state->nbTrans;exec->transno++) {
- trans = &exec->state->trans[exec->transno];
- if (trans->to < 0)
- continue;
- atom = trans->atom;
- ret = 0;
- if (trans->count >= 0) {
- int count;
- xmlRegCounterPtr counter;
-
- /*
- * A counted transition.
- */
-
- count = exec->counts[trans->count];
- counter = &exec->comp->counters[trans->count];
-#ifdef DEBUG_REGEXP_EXEC
- printf("testing count %d: val %d, min %d, max %d\n",
- trans->count, count, counter->min, counter->max);
-#endif
- ret = ((count >= counter->min) && (count <= counter->max));
- } else if (atom == NULL) {
- fprintf(stderr, "epsilon transition left at runtime\n");
- exec->status = -2;
- break;
- } else if (exec->inputString[exec->index] != 0) {
- codepoint = CUR_SCHAR(&(exec->inputString[exec->index]), len);
- ret = xmlRegCheckCharacter(atom, codepoint);
- if ((ret == 1) && (atom->min > 0) && (atom->max > 0)) {
- xmlRegStatePtr to = exec->comp->states[trans->to];
-
- /*
- * this is a multiple input sequence
- */
- if (exec->state->nbTrans > exec->transno + 1) {
- xmlFARegExecSave(exec);
- }
- exec->transcount = 1;
- do {
- /*
- * Try to progress as much as possible on the input
- */
- if (exec->transcount == atom->max) {
- break;
- }
- exec->index += len;
- /*
- * End of input: stop here
- */
- if (exec->inputString[exec->index] == 0) {
- exec->index -= len;
- break;
- }
- if (exec->transcount >= atom->min) {
- int transno = exec->transno;
- xmlRegStatePtr state = exec->state;
-
- /*
- * The transition is acceptable save it
- */
- exec->transno = -1; /* trick */
- exec->state = to;
- xmlFARegExecSave(exec);
- exec->transno = transno;
- exec->state = state;
- }
- codepoint = CUR_SCHAR(&(exec->inputString[exec->index]),
- len);
- ret = xmlRegCheckCharacter(atom, codepoint);
- exec->transcount++;
- } while (ret == 1);
- if (exec->transcount < atom->min)
- ret = 0;
-
- /*
- * If the last check failed but one transition was found
- * possible, rollback
- */
- if (ret < 0)
- ret = 0;
- if (ret == 0) {
- goto rollback;
- }
- }
- }
- if (ret == 1) {
- if (exec->state->nbTrans > exec->transno + 1) {
- xmlFARegExecSave(exec);
- }
- /*
- * restart count for expressions like this ((abc){2})*
- */
- if (trans->count >= 0) {
-#ifdef DEBUG_REGEXP_EXEC
- printf("Reset count %d\n", trans->count);
-#endif
- exec->counts[trans->count] = 0;
- }
- if (trans->counter >= 0) {
-#ifdef DEBUG_REGEXP_EXEC
- printf("Increasing count %d\n", trans->counter);
-#endif
- exec->counts[trans->counter]++;
- }
-#ifdef DEBUG_REGEXP_EXEC
- printf("entering state %d\n", trans->to);
-#endif
- exec->state = exec->comp->states[trans->to];
- exec->transno = 0;
- if (trans->atom != NULL) {
- exec->index += len;
- }
- goto progress;
- } else if (ret < 0) {
- exec->status = -4;
- break;
- }
- }
- if ((exec->transno != 0) || (exec->state->nbTrans == 0)) {
-rollback:
- /*
- * Failed to find a way out
- */
- exec->determinist = 0;
- xmlFARegExecRollBack(exec);
- }
-progress:
- continue;
- }
-}
-#endif
-/************************************************************************
- * *
- * Parser for the Schemas Datatype Regular Expressions *
- * http://www.w3.org/TR/2001/REC-xmlschema-2-20010502/#regexs *
- * *
- ************************************************************************/
-
-/**
- * xmlFAIsChar:
- * @ctxt: a regexp parser context
- *
- * [10] Char ::= [^.\?*+()|#x5B#x5D]
- */
-static int
-xmlFAIsChar(xmlRegParserCtxtPtr ctxt) {
- int cur;
- int len;
-
- cur = CUR_SCHAR(ctxt->cur, len);
- if ((cur == '.') || (cur == '\\') || (cur == '?') ||
- (cur == '*') || (cur == '+') || (cur == '(') ||
- (cur == ')') || (cur == '|') || (cur == 0x5B) ||
- (cur == 0x5D) || (cur == 0))
- return(-1);
- return(cur);
-}
-
-/**
- * xmlFAParseCharProp:
- * @ctxt: a regexp parser context
- *
- * [27] charProp ::= IsCategory | IsBlock
- * [28] IsCategory ::= Letters | Marks | Numbers | Punctuation |
- * Separators | Symbols | Others
- * [29] Letters ::= 'L' [ultmo]?
- * [30] Marks ::= 'M' [nce]?
- * [31] Numbers ::= 'N' [dlo]?
- * [32] Punctuation ::= 'P' [cdseifo]?
- * [33] Separators ::= 'Z' [slp]?
- * [34] Symbols ::= 'S' [mcko]?
- * [35] Others ::= 'C' [cfon]?
- * [36] IsBlock ::= 'Is' [a-zA-Z0-9#x2D]+
- */
-static void
-xmlFAParseCharProp(xmlRegParserCtxtPtr ctxt) {
- int cur;
- xmlRegAtomType type = (xmlRegAtomType) 0;
- xmlChar *blockName = NULL;
-
- cur = CUR;
- if (cur == 'L') {
- NEXT;
- cur = CUR;
- if (cur == 'u') {
- NEXT;
- type = XML_REGEXP_LETTER_UPPERCASE;
- } else if (cur == 'l') {
- NEXT;
- type = XML_REGEXP_LETTER_LOWERCASE;
- } else if (cur == 't') {
- NEXT;
- type = XML_REGEXP_LETTER_TITLECASE;
- } else if (cur == 'm') {
- NEXT;
- type = XML_REGEXP_LETTER_MODIFIER;
- } else if (cur == 'o') {
- NEXT;
- type = XML_REGEXP_LETTER_OTHERS;
- } else {
- type = XML_REGEXP_LETTER;
- }
- } else if (cur == 'M') {
- NEXT;
- cur = CUR;
- if (cur == 'n') {
- NEXT;
- /* nonspacing */
- type = XML_REGEXP_MARK_NONSPACING;
- } else if (cur == 'c') {
- NEXT;
- /* spacing combining */
- type = XML_REGEXP_MARK_SPACECOMBINING;
- } else if (cur == 'e') {
- NEXT;
- /* enclosing */
- type = XML_REGEXP_MARK_ENCLOSING;
- } else {
- /* all marks */
- type = XML_REGEXP_MARK;
- }
- } else if (cur == 'N') {
- NEXT;
- cur = CUR;
- if (cur == 'd') {
- NEXT;
- /* digital */
- type = XML_REGEXP_NUMBER_DECIMAL;
- } else if (cur == 'l') {
- NEXT;
- /* letter */
- type = XML_REGEXP_NUMBER_LETTER;
- } else if (cur == 'o') {
- NEXT;
- /* other */
- type = XML_REGEXP_NUMBER_OTHERS;
- } else {
- /* all numbers */
- type = XML_REGEXP_NUMBER;
- }
- } else if (cur == 'P') {
- NEXT;
- cur = CUR;
- if (cur == 'c') {
- NEXT;
- /* connector */
- type = XML_REGEXP_PUNCT_CONNECTOR;
- } else if (cur == 'd') {
- NEXT;
- /* dash */
- type = XML_REGEXP_PUNCT_DASH;
- } else if (cur == 's') {
- NEXT;
- /* open */
- type = XML_REGEXP_PUNCT_OPEN;
- } else if (cur == 'e') {
- NEXT;
- /* close */
- type = XML_REGEXP_PUNCT_CLOSE;
- } else if (cur == 'i') {
- NEXT;
- /* initial quote */
- type = XML_REGEXP_PUNCT_INITQUOTE;
- } else if (cur == 'f') {
- NEXT;
- /* final quote */
- type = XML_REGEXP_PUNCT_FINQUOTE;
- } else if (cur == 'o') {
- NEXT;
- /* other */
- type = XML_REGEXP_PUNCT_OTHERS;
- } else {
- /* all punctuation */
- type = XML_REGEXP_PUNCT;
- }
- } else if (cur == 'Z') {
- NEXT;
- cur = CUR;
- if (cur == 's') {
- NEXT;
- /* space */
- type = XML_REGEXP_SEPAR_SPACE;
- } else if (cur == 'l') {
- NEXT;
- /* line */
- type = XML_REGEXP_SEPAR_LINE;
- } else if (cur == 'p') {
- NEXT;
- /* paragraph */
- type = XML_REGEXP_SEPAR_PARA;
- } else {
- /* all separators */
- type = XML_REGEXP_SEPAR;
- }
- } else if (cur == 'S') {
- NEXT;
- cur = CUR;
- if (cur == 'm') {
- NEXT;
- type = XML_REGEXP_SYMBOL_MATH;
- /* math */
- } else if (cur == 'c') {
- NEXT;
- type = XML_REGEXP_SYMBOL_CURRENCY;
- /* currency */
- } else if (cur == 'k') {
- NEXT;
- type = XML_REGEXP_SYMBOL_MODIFIER;
- /* modifiers */
- } else if (cur == 'o') {
- NEXT;
- type = XML_REGEXP_SYMBOL_OTHERS;
- /* other */
- } else {
- /* all symbols */
- type = XML_REGEXP_SYMBOL;
- }
- } else if (cur == 'C') {
- NEXT;
- cur = CUR;
- if (cur == 'c') {
- NEXT;
- /* control */
- type = XML_REGEXP_OTHER_CONTROL;
- } else if (cur == 'f') {
- NEXT;
- /* format */
- type = XML_REGEXP_OTHER_FORMAT;
- } else if (cur == 'o') {
- NEXT;
- /* private use */
- type = XML_REGEXP_OTHER_PRIVATE;
- } else if (cur == 'n') {
- NEXT;
- /* not assigned */
- type = XML_REGEXP_OTHER_NA;
- } else {
- /* all others */
- type = XML_REGEXP_OTHER;
- }
- } else if (cur == 'I') {
- const xmlChar *start;
- NEXT;
- cur = CUR;
- if (cur != 's') {
- ERROR("IsXXXX expected");
- return;
- }
- NEXT;
- start = ctxt->cur;
- cur = CUR;
- if (((cur >= 'a') && (cur <= 'z')) ||
- ((cur >= 'A') && (cur <= 'Z')) ||
- ((cur >= '0') && (cur <= '9')) ||
- (cur == 0x2D)) {
- NEXT;
- cur = CUR;
- while (((cur >= 'a') && (cur <= 'z')) ||
- ((cur >= 'A') && (cur <= 'Z')) ||
- ((cur >= '0') && (cur <= '9')) ||
- (cur == 0x2D)) {
- NEXT;
- cur = CUR;
- }
- }
- type = XML_REGEXP_BLOCK_NAME;
- blockName = xmlStrndup(start, ctxt->cur - start);
- } else {
- ERROR("Unknown char property");
- return;
- }
- if (ctxt->atom == NULL) {
- ctxt->atom = xmlRegNewAtom(ctxt, type);
- if (ctxt->atom != NULL)
- ctxt->atom->valuep = blockName;
- } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
- xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
- type, 0, 0, blockName);
- }
-}
-
-/**
- * xmlFAParseCharClassEsc:
- * @ctxt: a regexp parser context
- *
- * [23] charClassEsc ::= ( SingleCharEsc | MultiCharEsc | catEsc | complEsc )
- * [24] SingleCharEsc ::= '\' [nrt\|.?*+(){}#x2D#x5B#x5D#x5E]
- * [25] catEsc ::= '\p{' charProp '}'
- * [26] complEsc ::= '\P{' charProp '}'
- * [37] MultiCharEsc ::= '.' | ('\' [sSiIcCdDwW])
- */
-static void
-xmlFAParseCharClassEsc(xmlRegParserCtxtPtr ctxt) {
- int cur;
-
- if (CUR == '.') {
- if (ctxt->atom == NULL) {
- ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_ANYCHAR);
- } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
- xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
- XML_REGEXP_ANYCHAR, 0, 0, NULL);
- }
- NEXT;
- return;
- }
- if (CUR != '\\') {
- ERROR("Escaped sequence: expecting \\");
- return;
- }
- NEXT;
- cur = CUR;
- if (cur == 'p') {
- NEXT;
- if (CUR != '{') {
- ERROR("Expecting '{'");
- return;
- }
- NEXT;
- xmlFAParseCharProp(ctxt);
- if (CUR != '}') {
- ERROR("Expecting '}'");
- return;
- }
- NEXT;
- } else if (cur == 'P') {
- NEXT;
- if (CUR != '{') {
- ERROR("Expecting '{'");
- return;
- }
- NEXT;
- xmlFAParseCharProp(ctxt);
- ctxt->atom->neg = 1;
- if (CUR != '}') {
- ERROR("Expecting '}'");
- return;
- }
- NEXT;
- } else if ((cur == 'n') || (cur == 'r') || (cur == 't') || (cur == '\\') ||
- (cur == '|') || (cur == '.') || (cur == '?') || (cur == '*') ||
- (cur == '+') || (cur == '(') || (cur == ')') || (cur == '{') ||
- (cur == '}') || (cur == 0x2D) || (cur == 0x5B) || (cur == 0x5D) ||
- (cur == 0x5E)) {
- if (ctxt->atom == NULL) {
- ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_CHARVAL);
- if (ctxt->atom != NULL) {
- switch (cur) {
- case 'n':
- ctxt->atom->codepoint = '\n';
- break;
- case 'r':
- ctxt->atom->codepoint = '\r';
- break;
- case 't':
- ctxt->atom->codepoint = '\t';
- break;
- default:
- ctxt->atom->codepoint = cur;
- }
- }
- } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
- switch (cur) {
- case 'n':
- cur = '\n';
- break;
- case 'r':
- cur = '\r';
- break;
- case 't':
- cur = '\t';
- break;
- }
- xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
- XML_REGEXP_CHARVAL, cur, cur, NULL);
- }
- NEXT;
- } else if ((cur == 's') || (cur == 'S') || (cur == 'i') || (cur == 'I') ||
- (cur == 'c') || (cur == 'C') || (cur == 'd') || (cur == 'D') ||
- (cur == 'w') || (cur == 'W')) {
- xmlRegAtomType type = XML_REGEXP_ANYSPACE;
-
- switch (cur) {
- case 's':
- type = XML_REGEXP_ANYSPACE;
- break;
- case 'S':
- type = XML_REGEXP_NOTSPACE;
- break;
- case 'i':
- type = XML_REGEXP_INITNAME;
- break;
- case 'I':
- type = XML_REGEXP_NOTINITNAME;
- break;
- case 'c':
- type = XML_REGEXP_NAMECHAR;
- break;
- case 'C':
- type = XML_REGEXP_NOTNAMECHAR;
- break;
- case 'd':
- type = XML_REGEXP_DECIMAL;
- break;
- case 'D':
- type = XML_REGEXP_NOTDECIMAL;
- break;
- case 'w':
- type = XML_REGEXP_REALCHAR;
- break;
- case 'W':
- type = XML_REGEXP_NOTREALCHAR;
- break;
- }
- NEXT;
- if (ctxt->atom == NULL) {
- ctxt->atom = xmlRegNewAtom(ctxt, type);
- } else if (ctxt->atom->type == XML_REGEXP_RANGES) {
- xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
- type, 0, 0, NULL);
- }
- } else {
- ERROR("Wrong escape sequence, misuse of character '\\'");
- }
-}
-
-/**
- * xmlFAParseCharRange:
- * @ctxt: a regexp parser context
- *
- * [17] charRange ::= seRange | XmlCharRef | XmlCharIncDash
- * [18] seRange ::= charOrEsc '-' charOrEsc
- * [20] charOrEsc ::= XmlChar | SingleCharEsc
- * [21] XmlChar ::= [^\#x2D#x5B#x5D]
- * [22] XmlCharIncDash ::= [^\#x5B#x5D]
- */
-static void
-xmlFAParseCharRange(xmlRegParserCtxtPtr ctxt) {
- int cur, len;
- int start = -1;
- int end = -1;
-
- if (CUR == '\0') {
- ERROR("Expecting ']'");
- return;
- }
-
- cur = CUR;
- if (cur == '\\') {
- NEXT;
- cur = CUR;
- switch (cur) {
- case 'n': start = 0xA; break;
- case 'r': start = 0xD; break;
- case 't': start = 0x9; break;
- case '\\': case '|': case '.': case '-': case '^': case '?':
- case '*': case '+': case '{': case '}': case '(': case ')':
- case '[': case ']':
- start = cur; break;
- default:
- ERROR("Invalid escape value");
- return;
- }
- end = start;
- len = 1;
- } else if ((cur != 0x5B) && (cur != 0x5D)) {
- end = start = CUR_SCHAR(ctxt->cur, len);
- } else {
- ERROR("Expecting a char range");
- return;
- }
- /*
- * Since we are "inside" a range, we can assume ctxt->cur is past
- * the start of ctxt->string, and PREV should be safe
- */
- if ((start == '-') && (NXT(1) != ']') && (PREV != '[') && (PREV != '^')) {
- NEXTL(len);
- return;
- }
- NEXTL(len);
- cur = CUR;
- if ((cur != '-') || (NXT(1) == ']')) {
- xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
- XML_REGEXP_CHARVAL, start, end, NULL);
- return;
- }
- NEXT;
- cur = CUR;
- if (cur == '\\') {
- NEXT;
- cur = CUR;
- switch (cur) {
- case 'n': end = 0xA; break;
- case 'r': end = 0xD; break;
- case 't': end = 0x9; break;
- case '\\': case '|': case '.': case '-': case '^': case '?':
- case '*': case '+': case '{': case '}': case '(': case ')':
- case '[': case ']':
- end = cur; break;
- default:
- ERROR("Invalid escape value");
- return;
- }
- len = 1;
- } else if ((cur != 0x5B) && (cur != 0x5D)) {
- end = CUR_SCHAR(ctxt->cur, len);
- } else {
- ERROR("Expecting the end of a char range");
- return;
- }
-
- /* TODO check that the values are acceptable character ranges for XML */
- if (end < start) {
- ERROR("End of range is before start of range");
- } else {
- NEXTL(len);
- xmlRegAtomAddRange(ctxt, ctxt->atom, ctxt->neg,
- XML_REGEXP_CHARVAL, start, end, NULL);
- }
- return;
-}
-
-/**
- * xmlFAParsePosCharGroup:
- * @ctxt: a regexp parser context
- *
- * [14] posCharGroup ::= ( charRange | charClassEsc )+
- */
-static void
-xmlFAParsePosCharGroup(xmlRegParserCtxtPtr ctxt) {
- do {
- if (CUR == '\\') {
- xmlFAParseCharClassEsc(ctxt);
- } else {
- xmlFAParseCharRange(ctxt);
- }
- } while ((CUR != ']') && (CUR != '^') && (CUR != '-') &&
- (CUR != 0) && (ctxt->error == 0));
-}
-
-/**
- * xmlFAParseCharGroup:
- * @ctxt: a regexp parser context
- *
- * [13] charGroup ::= posCharGroup | negCharGroup | charClassSub
- * [15] negCharGroup ::= '^' posCharGroup
- * [16] charClassSub ::= ( posCharGroup | negCharGroup ) '-' charClassExpr
- * [12] charClassExpr ::= '[' charGroup ']'
- */
-static void
-xmlFAParseCharGroup(xmlRegParserCtxtPtr ctxt) {
- int n = ctxt->neg;
- while ((CUR != ']') && (ctxt->error == 0)) {
- if (CUR == '^') {
- int neg = ctxt->neg;
-
- NEXT;
- ctxt->neg = !ctxt->neg;
- xmlFAParsePosCharGroup(ctxt);
- ctxt->neg = neg;
- } else if ((CUR == '-') && (NXT(1) == '[')) {
- int neg = ctxt->neg;
- ctxt->neg = 2;
- NEXT; /* eat the '-' */
- NEXT; /* eat the '[' */
- xmlFAParseCharGroup(ctxt);
- if (CUR == ']') {
- NEXT;
- } else {
- ERROR("charClassExpr: ']' expected");
- break;
- }
- ctxt->neg = neg;
- break;
- } else if (CUR != ']') {
- xmlFAParsePosCharGroup(ctxt);
- }
- }
- ctxt->neg = n;
-}
-
-/**
- * xmlFAParseCharClass:
- * @ctxt: a regexp parser context
- *
- * [11] charClass ::= charClassEsc | charClassExpr
- * [12] charClassExpr ::= '[' charGroup ']'
- */
-static void
-xmlFAParseCharClass(xmlRegParserCtxtPtr ctxt) {
- if (CUR == '[') {
- NEXT;
- ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_RANGES);
- if (ctxt->atom == NULL)
- return;
- xmlFAParseCharGroup(ctxt);
- if (CUR == ']') {
- NEXT;
- } else {
- ERROR("xmlFAParseCharClass: ']' expected");
- }
- } else {
- xmlFAParseCharClassEsc(ctxt);
- }
-}
-
-/**
- * xmlFAParseQuantExact:
- * @ctxt: a regexp parser context
- *
- * [8] QuantExact ::= [0-9]+
- *
- * Returns 0 if success or -1 in case of error
- */
-static int
-xmlFAParseQuantExact(xmlRegParserCtxtPtr ctxt) {
- int ret = 0;
- int ok = 0;
-
- while ((CUR >= '0') && (CUR <= '9')) {
- ret = ret * 10 + (CUR - '0');
- ok = 1;
- NEXT;
- }
- if (ok != 1) {
- return(-1);
- }
- return(ret);
-}
-
-/**
- * xmlFAParseQuantifier:
- * @ctxt: a regexp parser context
- *
- * [4] quantifier ::= [?*+] | ( '{' quantity '}' )
- * [5] quantity ::= quantRange | quantMin | QuantExact
- * [6] quantRange ::= QuantExact ',' QuantExact
- * [7] quantMin ::= QuantExact ','
- * [8] QuantExact ::= [0-9]+
- */
-static int
-xmlFAParseQuantifier(xmlRegParserCtxtPtr ctxt) {
- int cur;
-
- cur = CUR;
- if ((cur == '?') || (cur == '*') || (cur == '+')) {
- if (ctxt->atom != NULL) {
- if (cur == '?')
- ctxt->atom->quant = XML_REGEXP_QUANT_OPT;
- else if (cur == '*')
- ctxt->atom->quant = XML_REGEXP_QUANT_MULT;
- else if (cur == '+')
- ctxt->atom->quant = XML_REGEXP_QUANT_PLUS;
- }
- NEXT;
- return(1);
- }
- if (cur == '{') {
- int min = 0, max = 0;
-
- NEXT;
- cur = xmlFAParseQuantExact(ctxt);
- if (cur >= 0)
- min = cur;
- if (CUR == ',') {
- NEXT;
- if (CUR == '}')
- max = INT_MAX;
- else {
- cur = xmlFAParseQuantExact(ctxt);
- if (cur >= 0)
- max = cur;
- else {
- ERROR("Improper quantifier");
- }
- }
- }
- if (CUR == '}') {
- NEXT;
- } else {
- ERROR("Unterminated quantifier");
- }
- if (max == 0)
- max = min;
- if (ctxt->atom != NULL) {
- ctxt->atom->quant = XML_REGEXP_QUANT_RANGE;
- ctxt->atom->min = min;
- ctxt->atom->max = max;
- }
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlFAParseAtom:
- * @ctxt: a regexp parser context
- *
- * [9] atom ::= Char | charClass | ( '(' regExp ')' )
- */
-static int
-xmlFAParseAtom(xmlRegParserCtxtPtr ctxt) {
- int codepoint, len;
-
- codepoint = xmlFAIsChar(ctxt);
- if (codepoint > 0) {
- ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_CHARVAL);
- if (ctxt->atom == NULL)
- return(-1);
- codepoint = CUR_SCHAR(ctxt->cur, len);
- ctxt->atom->codepoint = codepoint;
- NEXTL(len);
- return(1);
- } else if (CUR == '|') {
- return(0);
- } else if (CUR == 0) {
- return(0);
- } else if (CUR == ')') {
- return(0);
- } else if (CUR == '(') {
- xmlRegStatePtr start, oldend, start0;
-
- NEXT;
- /*
- * this extra Epsilon transition is needed if we count with 0 allowed
- * unfortunately this can't be known at that point
- */
- xmlFAGenerateEpsilonTransition(ctxt, ctxt->state, NULL);
- start0 = ctxt->state;
- xmlFAGenerateEpsilonTransition(ctxt, ctxt->state, NULL);
- start = ctxt->state;
- oldend = ctxt->end;
- ctxt->end = NULL;
- ctxt->atom = NULL;
- xmlFAParseRegExp(ctxt, 0);
- if (CUR == ')') {
- NEXT;
- } else {
- ERROR("xmlFAParseAtom: expecting ')'");
- }
- ctxt->atom = xmlRegNewAtom(ctxt, XML_REGEXP_SUBREG);
- if (ctxt->atom == NULL)
- return(-1);
- ctxt->atom->start = start;
- ctxt->atom->start0 = start0;
- ctxt->atom->stop = ctxt->state;
- ctxt->end = oldend;
- return(1);
- } else if ((CUR == '[') || (CUR == '\\') || (CUR == '.')) {
- xmlFAParseCharClass(ctxt);
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlFAParsePiece:
- * @ctxt: a regexp parser context
- *
- * [3] piece ::= atom quantifier?
- */
-static int
-xmlFAParsePiece(xmlRegParserCtxtPtr ctxt) {
- int ret;
-
- ctxt->atom = NULL;
- ret = xmlFAParseAtom(ctxt);
- if (ret == 0)
- return(0);
- if (ctxt->atom == NULL) {
- ERROR("internal: no atom generated");
- }
- xmlFAParseQuantifier(ctxt);
- return(1);
-}
-
-/**
- * xmlFAParseBranch:
- * @ctxt: a regexp parser context
- * @to: optional target to the end of the branch
- *
- * @to is used to optimize by removing duplicate path in automata
- * in expressions like (a|b)(c|d)
- *
- * [2] branch ::= piece*
- */
-static int
-xmlFAParseBranch(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr to) {
- xmlRegStatePtr previous;
- int ret;
-
- previous = ctxt->state;
- ret = xmlFAParsePiece(ctxt);
- if (ret != 0) {
- if (xmlFAGenerateTransitions(ctxt, previous,
- (CUR=='|' || CUR==')') ? to : NULL, ctxt->atom) < 0)
- return(-1);
- previous = ctxt->state;
- ctxt->atom = NULL;
- }
- while ((ret != 0) && (ctxt->error == 0)) {
- ret = xmlFAParsePiece(ctxt);
- if (ret != 0) {
- if (xmlFAGenerateTransitions(ctxt, previous,
- (CUR=='|' || CUR==')') ? to : NULL, ctxt->atom) < 0)
- return(-1);
- previous = ctxt->state;
- ctxt->atom = NULL;
- }
- }
- return(0);
-}
-
-/**
- * xmlFAParseRegExp:
- * @ctxt: a regexp parser context
- * @top: is this the top-level expression ?
- *
- * [1] regExp ::= branch ( '|' branch )*
- */
-static void
-xmlFAParseRegExp(xmlRegParserCtxtPtr ctxt, int top) {
- xmlRegStatePtr start, end;
-
- /* if not top start should have been generated by an epsilon trans */
- start = ctxt->state;
- ctxt->end = NULL;
- xmlFAParseBranch(ctxt, NULL);
- if (top) {
-#ifdef DEBUG_REGEXP_GRAPH
- printf("State %d is final\n", ctxt->state->no);
-#endif
- ctxt->state->type = XML_REGEXP_FINAL_STATE;
- }
- if (CUR != '|') {
- ctxt->end = ctxt->state;
- return;
- }
- end = ctxt->state;
- while ((CUR == '|') && (ctxt->error == 0)) {
- NEXT;
- if (CUR == 0) {
- ERROR("expecting a branch after |")
- return;
- }
- ctxt->state = start;
- ctxt->end = NULL;
- xmlFAParseBranch(ctxt, end);
- }
- if (!top) {
- ctxt->state = end;
- ctxt->end = end;
- }
-}
-
-/************************************************************************
- * *
- * The basic API *
- * *
- ************************************************************************/
-
-/**
- * xmlRegexpPrint:
- * @output: the file for the output debug
- * @regexp: the compiled regexp
- *
- * Print the content of the compiled regular expression
- */
-void
-xmlRegexpPrint(FILE *output, xmlRegexpPtr regexp) {
- int i;
-
- if (output == NULL)
- return;
- fprintf(output, " regexp: ");
- if (regexp == NULL) {
- fprintf(output, "NULL\n");
- return;
- }
- fprintf(output, "'%s' ", regexp->string);
- fprintf(output, "\n");
- fprintf(output, "%d atoms:\n", regexp->nbAtoms);
- for (i = 0;i < regexp->nbAtoms; i++) {
- fprintf(output, " %02d ", i);
- xmlRegPrintAtom(output, regexp->atoms[i]);
- }
- fprintf(output, "%d states:", regexp->nbStates);
- fprintf(output, "\n");
- for (i = 0;i < regexp->nbStates; i++) {
- xmlRegPrintState(output, regexp->states[i]);
- }
- fprintf(output, "%d counters:\n", regexp->nbCounters);
- for (i = 0;i < regexp->nbCounters; i++) {
- fprintf(output, " %d: min %d max %d\n", i, regexp->counters[i].min,
- regexp->counters[i].max);
- }
-}
-
-/**
- * xmlRegexpCompile:
- * @regexp: a regular expression string
- *
- * Parses a regular expression conforming to XML Schemas Part 2 Datatype
- * Appendix F and builds an automata suitable for testing strings against
- * that regular expression
- *
- * Returns the compiled expression or NULL in case of error
- */
-xmlRegexpPtr
-xmlRegexpCompile(const xmlChar *regexp) {
- xmlRegexpPtr ret;
- xmlRegParserCtxtPtr ctxt;
-
- ctxt = xmlRegNewParserCtxt(regexp);
- if (ctxt == NULL)
- return(NULL);
-
- /* initialize the parser */
- ctxt->end = NULL;
- ctxt->start = ctxt->state = xmlRegNewState(ctxt);
- xmlRegStatePush(ctxt, ctxt->start);
-
- /* parse the expression building an automata */
- xmlFAParseRegExp(ctxt, 1);
- if (CUR != 0) {
- ERROR("xmlFAParseRegExp: extra characters");
- }
- if (ctxt->error != 0) {
- xmlRegFreeParserCtxt(ctxt);
- return(NULL);
- }
- ctxt->end = ctxt->state;
- ctxt->start->type = XML_REGEXP_START_STATE;
- ctxt->end->type = XML_REGEXP_FINAL_STATE;
-
- /* remove the Epsilon except for counted transitions */
- xmlFAEliminateEpsilonTransitions(ctxt);
-
-
- if (ctxt->error != 0) {
- xmlRegFreeParserCtxt(ctxt);
- return(NULL);
- }
- ret = xmlRegEpxFromParse(ctxt);
- xmlRegFreeParserCtxt(ctxt);
- return(ret);
-}
-
-/**
- * xmlRegexpExec:
- * @comp: the compiled regular expression
- * @content: the value to check against the regular expression
- *
- * Check if the regular expression generates the value
- *
- * Returns 1 if it matches, 0 if not and a negative value in case of error
- */
-int
-xmlRegexpExec(xmlRegexpPtr comp, const xmlChar *content) {
- if ((comp == NULL) || (content == NULL))
- return(-1);
- return(xmlFARegExec(comp, content));
-}
-
-/**
- * xmlRegexpIsDeterminist:
- * @comp: the compiled regular expression
- *
- * Check if the regular expression is determinist
- *
- * Returns 1 if it yes, 0 if not and a negative value in case of error
- */
-int
-xmlRegexpIsDeterminist(xmlRegexpPtr comp) {
- xmlAutomataPtr am;
- int ret;
-
- if (comp == NULL)
- return(-1);
- if (comp->determinist != -1)
- return(comp->determinist);
-
- am = xmlNewAutomata();
- if (am->states != NULL) {
- int i;
-
- for (i = 0;i < am->nbStates;i++)
- xmlRegFreeState(am->states[i]);
- xmlFree(am->states);
- }
- am->nbAtoms = comp->nbAtoms;
- am->atoms = comp->atoms;
- am->nbStates = comp->nbStates;
- am->states = comp->states;
- am->determinist = -1;
- am->flags = comp->flags;
- ret = xmlFAComputesDeterminism(am);
- am->atoms = NULL;
- am->states = NULL;
- xmlFreeAutomata(am);
- comp->determinist = ret;
- return(ret);
-}
-
-/**
- * xmlRegFreeRegexp:
- * @regexp: the regexp
- *
- * Free a regexp
- */
-void
-xmlRegFreeRegexp(xmlRegexpPtr regexp) {
- int i;
- if (regexp == NULL)
- return;
-
- if (regexp->string != NULL)
- xmlFree(regexp->string);
- if (regexp->states != NULL) {
- for (i = 0;i < regexp->nbStates;i++)
- xmlRegFreeState(regexp->states[i]);
- xmlFree(regexp->states);
- }
- if (regexp->atoms != NULL) {
- for (i = 0;i < regexp->nbAtoms;i++)
- xmlRegFreeAtom(regexp->atoms[i]);
- xmlFree(regexp->atoms);
- }
- if (regexp->counters != NULL)
- xmlFree(regexp->counters);
- if (regexp->compact != NULL)
- xmlFree(regexp->compact);
- if (regexp->transdata != NULL)
- xmlFree(regexp->transdata);
- if (regexp->stringMap != NULL) {
- for (i = 0; i < regexp->nbstrings;i++)
- xmlFree(regexp->stringMap[i]);
- xmlFree(regexp->stringMap);
- }
-
- xmlFree(regexp);
-}
-
-#ifdef LIBXML_AUTOMATA_ENABLED
-/************************************************************************
- * *
- * The Automata interface *
- * *
- ************************************************************************/
-
-/**
- * xmlNewAutomata:
- *
- * Create a new automata
- *
- * Returns the new object or NULL in case of failure
- */
-xmlAutomataPtr
-xmlNewAutomata(void) {
- xmlAutomataPtr ctxt;
-
- ctxt = xmlRegNewParserCtxt(NULL);
- if (ctxt == NULL)
- return(NULL);
-
- /* initialize the parser */
- ctxt->end = NULL;
- ctxt->start = ctxt->state = xmlRegNewState(ctxt);
- if (ctxt->start == NULL) {
- xmlFreeAutomata(ctxt);
- return(NULL);
- }
- ctxt->start->type = XML_REGEXP_START_STATE;
- if (xmlRegStatePush(ctxt, ctxt->start) < 0) {
- xmlRegFreeState(ctxt->start);
- xmlFreeAutomata(ctxt);
- return(NULL);
- }
- ctxt->flags = 0;
-
- return(ctxt);
-}
-
-/**
- * xmlFreeAutomata:
- * @am: an automata
- *
- * Free an automata
- */
-void
-xmlFreeAutomata(xmlAutomataPtr am) {
- if (am == NULL)
- return;
- xmlRegFreeParserCtxt(am);
-}
-
-/**
- * xmlAutomataSetFlags:
- * @am: an automata
- * @flags: a set of internal flags
- *
- * Set some flags on the automata
- */
-void
-xmlAutomataSetFlags(xmlAutomataPtr am, int flags) {
- if (am == NULL)
- return;
- am->flags |= flags;
-}
-
-/**
- * xmlAutomataGetInitState:
- * @am: an automata
- *
- * Initial state lookup
- *
- * Returns the initial state of the automata
- */
-xmlAutomataStatePtr
-xmlAutomataGetInitState(xmlAutomataPtr am) {
- if (am == NULL)
- return(NULL);
- return(am->start);
-}
-
-/**
- * xmlAutomataSetFinalState:
- * @am: an automata
- * @state: a state in this automata
- *
- * Makes that state a final state
- *
- * Returns 0 or -1 in case of error
- */
-int
-xmlAutomataSetFinalState(xmlAutomataPtr am, xmlAutomataStatePtr state) {
- if ((am == NULL) || (state == NULL))
- return(-1);
- state->type = XML_REGEXP_FINAL_STATE;
- return(0);
-}
-
-/**
- * xmlAutomataNewTransition:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @data: data passed to the callback function if the transition is activated
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by the value of @token
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewTransition(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, const xmlChar *token,
- void *data) {
- xmlRegAtomPtr atom;
-
- if ((am == NULL) || (from == NULL) || (token == NULL))
- return(NULL);
- atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
- if (atom == NULL)
- return(NULL);
- atom->data = data;
- atom->valuep = xmlStrdup(token);
-
- if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
- xmlRegFreeAtom(atom);
- return(NULL);
- }
- if (to == NULL)
- return(am->state);
- return(to);
-}
-
-/**
- * xmlAutomataNewTransition2:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the first input string associated to that transition
- * @token2: the second input string associated to that transition
- * @data: data passed to the callback function if the transition is activated
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by the value of @token
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewTransition2(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, const xmlChar *token,
- const xmlChar *token2, void *data) {
- xmlRegAtomPtr atom;
-
- if ((am == NULL) || (from == NULL) || (token == NULL))
- return(NULL);
- atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
- if (atom == NULL)
- return(NULL);
- atom->data = data;
- if ((token2 == NULL) || (*token2 == 0)) {
- atom->valuep = xmlStrdup(token);
- } else {
- int lenn, lenp;
- xmlChar *str;
-
- lenn = strlen((char *) token2);
- lenp = strlen((char *) token);
-
- str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
- if (str == NULL) {
- xmlRegFreeAtom(atom);
- return(NULL);
- }
- memcpy(&str[0], token, lenp);
- str[lenp] = '|';
- memcpy(&str[lenp + 1], token2, lenn);
- str[lenn + lenp + 1] = 0;
-
- atom->valuep = str;
- }
-
- if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
- xmlRegFreeAtom(atom);
- return(NULL);
- }
- if (to == NULL)
- return(am->state);
- return(to);
-}
-
-/**
- * xmlAutomataNewNegTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the first input string associated to that transition
- * @token2: the second input string associated to that transition
- * @data: data passed to the callback function if the transition is activated
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by any value except (@token,@token2)
- * Note that if @token2 is not NULL, then (X, NULL) won't match to follow
- # the semantic of XSD ##other
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewNegTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, const xmlChar *token,
- const xmlChar *token2, void *data) {
- xmlRegAtomPtr atom;
- xmlChar err_msg[200];
-
- if ((am == NULL) || (from == NULL) || (token == NULL))
- return(NULL);
- atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
- if (atom == NULL)
- return(NULL);
- atom->data = data;
- atom->neg = 1;
- if ((token2 == NULL) || (*token2 == 0)) {
- atom->valuep = xmlStrdup(token);
- } else {
- int lenn, lenp;
- xmlChar *str;
-
- lenn = strlen((char *) token2);
- lenp = strlen((char *) token);
-
- str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
- if (str == NULL) {
- xmlRegFreeAtom(atom);
- return(NULL);
- }
- memcpy(&str[0], token, lenp);
- str[lenp] = '|';
- memcpy(&str[lenp + 1], token2, lenn);
- str[lenn + lenp + 1] = 0;
-
- atom->valuep = str;
- }
- snprintf((char *) err_msg, 199, "not %s", (const char *) atom->valuep);
- err_msg[199] = 0;
- atom->valuep2 = xmlStrdup(err_msg);
-
- if (xmlFAGenerateTransitions(am, from, to, atom) < 0) {
- xmlRegFreeAtom(atom);
- return(NULL);
- }
- am->negs++;
- if (to == NULL)
- return(am->state);
- return(to);
-}
-
-/**
- * xmlAutomataNewCountTrans2:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @token2: the second input string associated to that transition
- * @min: the minimum successive occurences of token
- * @max: the maximum successive occurences of token
- * @data: data associated to the transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and @token2 and
- * whose number is between @min and @max
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewCountTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, const xmlChar *token,
- const xmlChar *token2,
- int min, int max, void *data) {
- xmlRegAtomPtr atom;
- int counter;
-
- if ((am == NULL) || (from == NULL) || (token == NULL))
- return(NULL);
- if (min < 0)
- return(NULL);
- if ((max < min) || (max < 1))
- return(NULL);
- atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
- if (atom == NULL)
- return(NULL);
- if ((token2 == NULL) || (*token2 == 0)) {
- atom->valuep = xmlStrdup(token);
- } else {
- int lenn, lenp;
- xmlChar *str;
-
- lenn = strlen((char *) token2);
- lenp = strlen((char *) token);
-
- str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
- if (str == NULL) {
- xmlRegFreeAtom(atom);
- return(NULL);
- }
- memcpy(&str[0], token, lenp);
- str[lenp] = '|';
- memcpy(&str[lenp + 1], token2, lenn);
- str[lenn + lenp + 1] = 0;
-
- atom->valuep = str;
- }
- atom->data = data;
- if (min == 0)
- atom->min = 1;
- else
- atom->min = min;
- atom->max = max;
-
- /*
- * associate a counter to the transition.
- */
- counter = xmlRegGetCounter(am);
- am->counters[counter].min = min;
- am->counters[counter].max = max;
-
- /* xmlFAGenerateTransitions(am, from, to, atom); */
- if (to == NULL) {
- to = xmlRegNewState(am);
- xmlRegStatePush(am, to);
- }
- xmlRegStateAddTrans(am, from, atom, to, counter, -1);
- xmlRegAtomPush(am, atom);
- am->state = to;
-
- if (to == NULL)
- to = am->state;
- if (to == NULL)
- return(NULL);
- if (min == 0)
- xmlFAGenerateEpsilonTransition(am, from, to);
- return(to);
-}
-
-/**
- * xmlAutomataNewCountTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @min: the minimum successive occurences of token
- * @max: the maximum successive occurences of token
- * @data: data associated to the transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and whose number
- * is between @min and @max
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewCountTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, const xmlChar *token,
- int min, int max, void *data) {
- xmlRegAtomPtr atom;
- int counter;
-
- if ((am == NULL) || (from == NULL) || (token == NULL))
- return(NULL);
- if (min < 0)
- return(NULL);
- if ((max < min) || (max < 1))
- return(NULL);
- atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
- if (atom == NULL)
- return(NULL);
- atom->valuep = xmlStrdup(token);
- atom->data = data;
- if (min == 0)
- atom->min = 1;
- else
- atom->min = min;
- atom->max = max;
-
- /*
- * associate a counter to the transition.
- */
- counter = xmlRegGetCounter(am);
- am->counters[counter].min = min;
- am->counters[counter].max = max;
-
- /* xmlFAGenerateTransitions(am, from, to, atom); */
- if (to == NULL) {
- to = xmlRegNewState(am);
- xmlRegStatePush(am, to);
- }
- xmlRegStateAddTrans(am, from, atom, to, counter, -1);
- xmlRegAtomPush(am, atom);
- am->state = to;
-
- if (to == NULL)
- to = am->state;
- if (to == NULL)
- return(NULL);
- if (min == 0)
- xmlFAGenerateEpsilonTransition(am, from, to);
- return(to);
-}
-
-/**
- * xmlAutomataNewOnceTrans2:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @token2: the second input string associated to that transition
- * @min: the minimum successive occurences of token
- * @max: the maximum successive occurences of token
- * @data: data associated to the transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and @token2 and whose
- * number is between @min and @max, moreover that transition can only be
- * crossed once.
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewOnceTrans2(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, const xmlChar *token,
- const xmlChar *token2,
- int min, int max, void *data) {
- xmlRegAtomPtr atom;
- int counter;
-
- if ((am == NULL) || (from == NULL) || (token == NULL))
- return(NULL);
- if (min < 1)
- return(NULL);
- if ((max < min) || (max < 1))
- return(NULL);
- atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
- if (atom == NULL)
- return(NULL);
- if ((token2 == NULL) || (*token2 == 0)) {
- atom->valuep = xmlStrdup(token);
- } else {
- int lenn, lenp;
- xmlChar *str;
-
- lenn = strlen((char *) token2);
- lenp = strlen((char *) token);
-
- str = (xmlChar *) xmlMallocAtomic(lenn + lenp + 2);
- if (str == NULL) {
- xmlRegFreeAtom(atom);
- return(NULL);
- }
- memcpy(&str[0], token, lenp);
- str[lenp] = '|';
- memcpy(&str[lenp + 1], token2, lenn);
- str[lenn + lenp + 1] = 0;
-
- atom->valuep = str;
- }
- atom->data = data;
- atom->quant = XML_REGEXP_QUANT_ONCEONLY;
- atom->min = min;
- atom->max = max;
- /*
- * associate a counter to the transition.
- */
- counter = xmlRegGetCounter(am);
- am->counters[counter].min = 1;
- am->counters[counter].max = 1;
-
- /* xmlFAGenerateTransitions(am, from, to, atom); */
- if (to == NULL) {
- to = xmlRegNewState(am);
- xmlRegStatePush(am, to);
- }
- xmlRegStateAddTrans(am, from, atom, to, counter, -1);
- xmlRegAtomPush(am, atom);
- am->state = to;
- return(to);
-}
-
-
-
-/**
- * xmlAutomataNewOnceTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @token: the input string associated to that transition
- * @min: the minimum successive occurences of token
- * @max: the maximum successive occurences of token
- * @data: data associated to the transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a transition from the @from state to the target state
- * activated by a succession of input of value @token and whose number
- * is between @min and @max, moreover that transition can only be crossed
- * once.
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewOnceTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, const xmlChar *token,
- int min, int max, void *data) {
- xmlRegAtomPtr atom;
- int counter;
-
- if ((am == NULL) || (from == NULL) || (token == NULL))
- return(NULL);
- if (min < 1)
- return(NULL);
- if ((max < min) || (max < 1))
- return(NULL);
- atom = xmlRegNewAtom(am, XML_REGEXP_STRING);
- if (atom == NULL)
- return(NULL);
- atom->valuep = xmlStrdup(token);
- atom->data = data;
- atom->quant = XML_REGEXP_QUANT_ONCEONLY;
- atom->min = min;
- atom->max = max;
- /*
- * associate a counter to the transition.
- */
- counter = xmlRegGetCounter(am);
- am->counters[counter].min = 1;
- am->counters[counter].max = 1;
-
- /* xmlFAGenerateTransitions(am, from, to, atom); */
- if (to == NULL) {
- to = xmlRegNewState(am);
- xmlRegStatePush(am, to);
- }
- xmlRegStateAddTrans(am, from, atom, to, counter, -1);
- xmlRegAtomPush(am, atom);
- am->state = to;
- return(to);
-}
-
-/**
- * xmlAutomataNewState:
- * @am: an automata
- *
- * Create a new disconnected state in the automata
- *
- * Returns the new state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewState(xmlAutomataPtr am) {
- xmlAutomataStatePtr to;
-
- if (am == NULL)
- return(NULL);
- to = xmlRegNewState(am);
- xmlRegStatePush(am, to);
- return(to);
-}
-
-/**
- * xmlAutomataNewEpsilon:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds an epsilon transition from the @from state to the
- * target state
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewEpsilon(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to) {
- if ((am == NULL) || (from == NULL))
- return(NULL);
- xmlFAGenerateEpsilonTransition(am, from, to);
- if (to == NULL)
- return(am->state);
- return(to);
-}
-
-/**
- * xmlAutomataNewAllTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @lax: allow to transition if not all all transitions have been activated
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds a an ALL transition from the @from state to the
- * target state. That transition is an epsilon transition allowed only when
- * all transitions from the @from node have been activated.
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewAllTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, int lax) {
- if ((am == NULL) || (from == NULL))
- return(NULL);
- xmlFAGenerateAllTransition(am, from, to, lax);
- if (to == NULL)
- return(am->state);
- return(to);
-}
-
-/**
- * xmlAutomataNewCounter:
- * @am: an automata
- * @min: the minimal value on the counter
- * @max: the maximal value on the counter
- *
- * Create a new counter
- *
- * Returns the counter number or -1 in case of error
- */
-int
-xmlAutomataNewCounter(xmlAutomataPtr am, int min, int max) {
- int ret;
-
- if (am == NULL)
- return(-1);
-
- ret = xmlRegGetCounter(am);
- if (ret < 0)
- return(-1);
- am->counters[ret].min = min;
- am->counters[ret].max = max;
- return(ret);
-}
-
-/**
- * xmlAutomataNewCountedTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @counter: the counter associated to that transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds an epsilon transition from the @from state to the target state
- * which will increment the counter provided
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewCountedTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, int counter) {
- if ((am == NULL) || (from == NULL) || (counter < 0))
- return(NULL);
- xmlFAGenerateCountedEpsilonTransition(am, from, to, counter);
- if (to == NULL)
- return(am->state);
- return(to);
-}
-
-/**
- * xmlAutomataNewCounterTrans:
- * @am: an automata
- * @from: the starting point of the transition
- * @to: the target point of the transition or NULL
- * @counter: the counter associated to that transition
- *
- * If @to is NULL, this creates first a new target state in the automata
- * and then adds an epsilon transition from the @from state to the target state
- * which will be allowed only if the counter is within the right range.
- *
- * Returns the target state or NULL in case of error
- */
-xmlAutomataStatePtr
-xmlAutomataNewCounterTrans(xmlAutomataPtr am, xmlAutomataStatePtr from,
- xmlAutomataStatePtr to, int counter) {
- if ((am == NULL) || (from == NULL) || (counter < 0))
- return(NULL);
- xmlFAGenerateCountedTransition(am, from, to, counter);
- if (to == NULL)
- return(am->state);
- return(to);
-}
-
-/**
- * xmlAutomataCompile:
- * @am: an automata
- *
- * Compile the automata into a Reg Exp ready for being executed.
- * The automata should be free after this point.
- *
- * Returns the compiled regexp or NULL in case of error
- */
-xmlRegexpPtr
-xmlAutomataCompile(xmlAutomataPtr am) {
- xmlRegexpPtr ret;
-
- if ((am == NULL) || (am->error != 0)) return(NULL);
- xmlFAEliminateEpsilonTransitions(am);
- /* xmlFAComputesDeterminism(am); */
- ret = xmlRegEpxFromParse(am);
-
- return(ret);
-}
-
-/**
- * xmlAutomataIsDeterminist:
- * @am: an automata
- *
- * Checks if an automata is determinist.
- *
- * Returns 1 if true, 0 if not, and -1 in case of error
- */
-int
-xmlAutomataIsDeterminist(xmlAutomataPtr am) {
- int ret;
-
- if (am == NULL)
- return(-1);
-
- ret = xmlFAComputesDeterminism(am);
- return(ret);
-}
-#endif /* LIBXML_AUTOMATA_ENABLED */
-
-#ifdef LIBXML_EXPR_ENABLED
-/************************************************************************
- * *
- * Formal Expression handling code *
- * *
- ************************************************************************/
-/************************************************************************
- * *
- * Expression handling context *
- * *
- ************************************************************************/
-
-struct _xmlExpCtxt {
- xmlDictPtr dict;
- xmlExpNodePtr *table;
- int size;
- int nbElems;
- int nb_nodes;
- int maxNodes;
- const char *expr;
- const char *cur;
- int nb_cons;
- int tabSize;
-};
-
-/**
- * xmlExpNewCtxt:
- * @maxNodes: the maximum number of nodes
- * @dict: optional dictionary to use internally
- *
- * Creates a new context for manipulating expressions
- *
- * Returns the context or NULL in case of error
- */
-xmlExpCtxtPtr
-xmlExpNewCtxt(int maxNodes, xmlDictPtr dict) {
- xmlExpCtxtPtr ret;
- int size = 256;
-
- if (maxNodes <= 4096)
- maxNodes = 4096;
-
- ret = (xmlExpCtxtPtr) xmlMalloc(sizeof(xmlExpCtxt));
- if (ret == NULL)
- return(NULL);
- memset(ret, 0, sizeof(xmlExpCtxt));
- ret->size = size;
- ret->nbElems = 0;
- ret->maxNodes = maxNodes;
- ret->table = xmlMalloc(size * sizeof(xmlExpNodePtr));
- if (ret->table == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- memset(ret->table, 0, size * sizeof(xmlExpNodePtr));
- if (dict == NULL) {
- ret->dict = xmlDictCreate();
- if (ret->dict == NULL) {
- xmlFree(ret->table);
- xmlFree(ret);
- return(NULL);
- }
- } else {
- ret->dict = dict;
- xmlDictReference(ret->dict);
- }
- return(ret);
-}
-
-/**
- * xmlExpFreeCtxt:
- * @ctxt: an expression context
- *
- * Free an expression context
- */
-void
-xmlExpFreeCtxt(xmlExpCtxtPtr ctxt) {
- if (ctxt == NULL)
- return;
- xmlDictFree(ctxt->dict);
- if (ctxt->table != NULL)
- xmlFree(ctxt->table);
- xmlFree(ctxt);
-}
-
-/************************************************************************
- * *
- * Structure associated to an expression node *
- * *
- ************************************************************************/
-#define MAX_NODES 10000
-
-/* #define DEBUG_DERIV */
-
-/*
- * TODO:
- * - Wildcards
- * - public API for creation
- *
- * Started
- * - regression testing
- *
- * Done
- * - split into module and test tool
- * - memleaks
- */
-
-typedef enum {
- XML_EXP_NILABLE = (1 << 0)
-} xmlExpNodeInfo;
-
-#define IS_NILLABLE(node) ((node)->info & XML_EXP_NILABLE)
-
-struct _xmlExpNode {
- unsigned char type;/* xmlExpNodeType */
- unsigned char info;/* OR of xmlExpNodeInfo */
- unsigned short key; /* the hash key */
- unsigned int ref; /* The number of references */
- int c_max; /* the maximum length it can consume */
- xmlExpNodePtr exp_left;
- xmlExpNodePtr next;/* the next node in the hash table or free list */
- union {
- struct {
- int f_min;
- int f_max;
- } count;
- struct {
- xmlExpNodePtr f_right;
- } children;
- const xmlChar *f_str;
- } field;
-};
-
-#define exp_min field.count.f_min
-#define exp_max field.count.f_max
-/* #define exp_left field.children.f_left */
-#define exp_right field.children.f_right
-#define exp_str field.f_str
-
-static xmlExpNodePtr xmlExpNewNode(xmlExpCtxtPtr ctxt, xmlExpNodeType type);
-static xmlExpNode forbiddenExpNode = {
- XML_EXP_FORBID, 0, 0, 0, 0, NULL, NULL, {{ 0, 0}}
-};
-xmlExpNodePtr forbiddenExp = &forbiddenExpNode;
-static xmlExpNode emptyExpNode = {
- XML_EXP_EMPTY, 1, 0, 0, 0, NULL, NULL, {{ 0, 0}}
-};
-xmlExpNodePtr emptyExp = &emptyExpNode;
-
-/************************************************************************
- * *
- * The custom hash table for unicity and canonicalization *
- * of sub-expressions pointers *
- * *
- ************************************************************************/
-/*
- * xmlExpHashNameComputeKey:
- * Calculate the hash key for a token
- */
-static unsigned short
-xmlExpHashNameComputeKey(const xmlChar *name) {
- unsigned short value = 0L;
- char ch;
-
- if (name != NULL) {
- value += 30 * (*name);
- while ((ch = *name++) != 0) {
- value = value ^ ((value << 5) + (value >> 3) + (unsigned long)ch);
- }
- }
- return (value);
-}
-
-/*
- * xmlExpHashComputeKey:
- * Calculate the hash key for a compound expression
- */
-static unsigned short
-xmlExpHashComputeKey(xmlExpNodeType type, xmlExpNodePtr left,
- xmlExpNodePtr right) {
- unsigned long value;
- unsigned short ret;
-
- switch (type) {
- case XML_EXP_SEQ:
- value = left->key;
- value += right->key;
- value *= 3;
- ret = (unsigned short) value;
- break;
- case XML_EXP_OR:
- value = left->key;
- value += right->key;
- value *= 7;
- ret = (unsigned short) value;
- break;
- case XML_EXP_COUNT:
- value = left->key;
- value += right->key;
- ret = (unsigned short) value;
- break;
- default:
- ret = 0;
- }
- return(ret);
-}
-
-
-static xmlExpNodePtr
-xmlExpNewNode(xmlExpCtxtPtr ctxt, xmlExpNodeType type) {
- xmlExpNodePtr ret;
-
- if (ctxt->nb_nodes >= MAX_NODES)
- return(NULL);
- ret = (xmlExpNodePtr) xmlMalloc(sizeof(xmlExpNode));
- if (ret == NULL)
- return(NULL);
- memset(ret, 0, sizeof(xmlExpNode));
- ret->type = type;
- ret->next = NULL;
- ctxt->nb_nodes++;
- ctxt->nb_cons++;
- return(ret);
-}
-
-/**
- * xmlExpHashGetEntry:
- * @table: the hash table
- *
- * Get the unique entry from the hash table. The entry is created if
- * needed. @left and @right are consumed, i.e. their ref count will
- * be decremented by the operation.
- *
- * Returns the pointer or NULL in case of error
- */
-static xmlExpNodePtr
-xmlExpHashGetEntry(xmlExpCtxtPtr ctxt, xmlExpNodeType type,
- xmlExpNodePtr left, xmlExpNodePtr right,
- const xmlChar *name, int min, int max) {
- unsigned short kbase, key;
- xmlExpNodePtr entry;
- xmlExpNodePtr insert;
-
- if (ctxt == NULL)
- return(NULL);
-
- /*
- * Check for duplicate and insertion location.
- */
- if (type == XML_EXP_ATOM) {
- kbase = xmlExpHashNameComputeKey(name);
- } else if (type == XML_EXP_COUNT) {
- /* COUNT reduction rule 1 */
- /* a{1} -> a */
- if (min == max) {
- if (min == 1) {
- return(left);
- }
- if (min == 0) {
- xmlExpFree(ctxt, left);
- return(emptyExp);
- }
- }
- if (min < 0) {
- xmlExpFree(ctxt, left);
- return(forbiddenExp);
- }
- if (max == -1)
- kbase = min + 79;
- else
- kbase = max - min;
- kbase += left->key;
- } else if (type == XML_EXP_OR) {
- /* Forbid reduction rules */
- if (left->type == XML_EXP_FORBID) {
- xmlExpFree(ctxt, left);
- return(right);
- }
- if (right->type == XML_EXP_FORBID) {
- xmlExpFree(ctxt, right);
- return(left);
- }
-
- /* OR reduction rule 1 */
- /* a | a reduced to a */
- if (left == right) {
- left->ref--;
- return(left);
- }
- /* OR canonicalization rule 1 */
- /* linearize (a | b) | c into a | (b | c) */
- if ((left->type == XML_EXP_OR) && (right->type != XML_EXP_OR)) {
- xmlExpNodePtr tmp = left;
- left = right;
- right = tmp;
- }
- /* OR reduction rule 2 */
- /* a | (a | b) and b | (a | b) are reduced to a | b */
- if (right->type == XML_EXP_OR) {
- if ((left == right->exp_left) ||
- (left == right->exp_right)) {
- xmlExpFree(ctxt, left);
- return(right);
- }
- }
- /* OR canonicalization rule 2 */
- /* linearize (a | b) | c into a | (b | c) */
- if (left->type == XML_EXP_OR) {
- xmlExpNodePtr tmp;
-
- /* OR canonicalization rule 2 */
- if ((left->exp_right->type != XML_EXP_OR) &&
- (left->exp_right->key < left->exp_left->key)) {
- tmp = left->exp_right;
- left->exp_right = left->exp_left;
- left->exp_left = tmp;
- }
- left->exp_right->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left->exp_right, right,
- NULL, 0, 0);
- left->exp_left->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left->exp_left, tmp,
- NULL, 0, 0);
-
- xmlExpFree(ctxt, left);
- return(tmp);
- }
- if (right->type == XML_EXP_OR) {
- /* Ordering in the tree */
- /* C | (A | B) -> A | (B | C) */
- if (left->key > right->exp_right->key) {
- xmlExpNodePtr tmp;
- right->exp_right->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_right,
- left, NULL, 0, 0);
- right->exp_left->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_left,
- tmp, NULL, 0, 0);
- xmlExpFree(ctxt, right);
- return(tmp);
- }
- /* Ordering in the tree */
- /* B | (A | C) -> A | (B | C) */
- if (left->key > right->exp_left->key) {
- xmlExpNodePtr tmp;
- right->exp_right->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, left,
- right->exp_right, NULL, 0, 0);
- right->exp_left->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_OR, right->exp_left,
- tmp, NULL, 0, 0);
- xmlExpFree(ctxt, right);
- return(tmp);
- }
- }
- /* we know both types are != XML_EXP_OR here */
- else if (left->key > right->key) {
- xmlExpNodePtr tmp = left;
- left = right;
- right = tmp;
- }
- kbase = xmlExpHashComputeKey(type, left, right);
- } else if (type == XML_EXP_SEQ) {
- /* Forbid reduction rules */
- if (left->type == XML_EXP_FORBID) {
- xmlExpFree(ctxt, right);
- return(left);
- }
- if (right->type == XML_EXP_FORBID) {
- xmlExpFree(ctxt, left);
- return(right);
- }
- /* Empty reduction rules */
- if (right->type == XML_EXP_EMPTY) {
- return(left);
- }
- if (left->type == XML_EXP_EMPTY) {
- return(right);
- }
- kbase = xmlExpHashComputeKey(type, left, right);
- } else
- return(NULL);
-
- key = kbase % ctxt->size;
- if (ctxt->table[key] != NULL) {
- for (insert = ctxt->table[key]; insert != NULL;
- insert = insert->next) {
- if ((insert->key == kbase) &&
- (insert->type == type)) {
- if (type == XML_EXP_ATOM) {
- if (name == insert->exp_str) {
- insert->ref++;
- return(insert);
- }
- } else if (type == XML_EXP_COUNT) {
- if ((insert->exp_min == min) && (insert->exp_max == max) &&
- (insert->exp_left == left)) {
- insert->ref++;
- left->ref--;
- return(insert);
- }
- } else if ((insert->exp_left == left) &&
- (insert->exp_right == right)) {
- insert->ref++;
- left->ref--;
- right->ref--;
- return(insert);
- }
- }
- }
- }
-
- entry = xmlExpNewNode(ctxt, type);
- if (entry == NULL)
- return(NULL);
- entry->key = kbase;
- if (type == XML_EXP_ATOM) {
- entry->exp_str = name;
- entry->c_max = 1;
- } else if (type == XML_EXP_COUNT) {
- entry->exp_min = min;
- entry->exp_max = max;
- entry->exp_left = left;
- if ((min == 0) || (IS_NILLABLE(left)))
- entry->info |= XML_EXP_NILABLE;
- if (max < 0)
- entry->c_max = -1;
- else
- entry->c_max = max * entry->exp_left->c_max;
- } else {
- entry->exp_left = left;
- entry->exp_right = right;
- if (type == XML_EXP_OR) {
- if ((IS_NILLABLE(left)) || (IS_NILLABLE(right)))
- entry->info |= XML_EXP_NILABLE;
- if ((entry->exp_left->c_max == -1) ||
- (entry->exp_right->c_max == -1))
- entry->c_max = -1;
- else if (entry->exp_left->c_max > entry->exp_right->c_max)
- entry->c_max = entry->exp_left->c_max;
- else
- entry->c_max = entry->exp_right->c_max;
- } else {
- if ((IS_NILLABLE(left)) && (IS_NILLABLE(right)))
- entry->info |= XML_EXP_NILABLE;
- if ((entry->exp_left->c_max == -1) ||
- (entry->exp_right->c_max == -1))
- entry->c_max = -1;
- else
- entry->c_max = entry->exp_left->c_max + entry->exp_right->c_max;
- }
- }
- entry->ref = 1;
- if (ctxt->table[key] != NULL)
- entry->next = ctxt->table[key];
-
- ctxt->table[key] = entry;
- ctxt->nbElems++;
-
- return(entry);
-}
-
-/**
- * xmlExpFree:
- * @ctxt: the expression context
- * @exp: the expression
- *
- * Dereference the expression
- */
-void
-xmlExpFree(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp) {
- if ((exp == NULL) || (exp == forbiddenExp) || (exp == emptyExp))
- return;
- exp->ref--;
- if (exp->ref == 0) {
- unsigned short key;
-
- /* Unlink it first from the hash table */
- key = exp->key % ctxt->size;
- if (ctxt->table[key] == exp) {
- ctxt->table[key] = exp->next;
- } else {
- xmlExpNodePtr tmp;
-
- tmp = ctxt->table[key];
- while (tmp != NULL) {
- if (tmp->next == exp) {
- tmp->next = exp->next;
- break;
- }
- tmp = tmp->next;
- }
- }
-
- if ((exp->type == XML_EXP_SEQ) || (exp->type == XML_EXP_OR)) {
- xmlExpFree(ctxt, exp->exp_left);
- xmlExpFree(ctxt, exp->exp_right);
- } else if (exp->type == XML_EXP_COUNT) {
- xmlExpFree(ctxt, exp->exp_left);
- }
- xmlFree(exp);
- ctxt->nb_nodes--;
- }
-}
-
-/**
- * xmlExpRef:
- * @exp: the expression
- *
- * Increase the reference count of the expression
- */
-void
-xmlExpRef(xmlExpNodePtr exp) {
- if (exp != NULL)
- exp->ref++;
-}
-
-/**
- * xmlExpNewAtom:
- * @ctxt: the expression context
- * @name: the atom name
- * @len: the atom name length in byte (or -1);
- *
- * Get the atom associated to this name from that context
- *
- * Returns the node or NULL in case of error
- */
-xmlExpNodePtr
-xmlExpNewAtom(xmlExpCtxtPtr ctxt, const xmlChar *name, int len) {
- if ((ctxt == NULL) || (name == NULL))
- return(NULL);
- name = xmlDictLookup(ctxt->dict, name, len);
- if (name == NULL)
- return(NULL);
- return(xmlExpHashGetEntry(ctxt, XML_EXP_ATOM, NULL, NULL, name, 0, 0));
-}
-
-/**
- * xmlExpNewOr:
- * @ctxt: the expression context
- * @left: left expression
- * @right: right expression
- *
- * Get the atom associated to the choice @left | @right
- * Note that @left and @right are consumed in the operation, to keep
- * an handle on them use xmlExpRef() and use xmlExpFree() to release them,
- * this is true even in case of failure (unless ctxt == NULL).
- *
- * Returns the node or NULL in case of error
- */
-xmlExpNodePtr
-xmlExpNewOr(xmlExpCtxtPtr ctxt, xmlExpNodePtr left, xmlExpNodePtr right) {
- if (ctxt == NULL)
- return(NULL);
- if ((left == NULL) || (right == NULL)) {
- xmlExpFree(ctxt, left);
- xmlExpFree(ctxt, right);
- return(NULL);
- }
- return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, left, right, NULL, 0, 0));
-}
-
-/**
- * xmlExpNewSeq:
- * @ctxt: the expression context
- * @left: left expression
- * @right: right expression
- *
- * Get the atom associated to the sequence @left , @right
- * Note that @left and @right are consumed in the operation, to keep
- * an handle on them use xmlExpRef() and use xmlExpFree() to release them,
- * this is true even in case of failure (unless ctxt == NULL).
- *
- * Returns the node or NULL in case of error
- */
-xmlExpNodePtr
-xmlExpNewSeq(xmlExpCtxtPtr ctxt, xmlExpNodePtr left, xmlExpNodePtr right) {
- if (ctxt == NULL)
- return(NULL);
- if ((left == NULL) || (right == NULL)) {
- xmlExpFree(ctxt, left);
- xmlExpFree(ctxt, right);
- return(NULL);
- }
- return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, left, right, NULL, 0, 0));
-}
-
-/**
- * xmlExpNewRange:
- * @ctxt: the expression context
- * @subset: the expression to be repeated
- * @min: the lower bound for the repetition
- * @max: the upper bound for the repetition, -1 means infinite
- *
- * Get the atom associated to the range (@subset){@min, @max}
- * Note that @subset is consumed in the operation, to keep
- * an handle on it use xmlExpRef() and use xmlExpFree() to release it,
- * this is true even in case of failure (unless ctxt == NULL).
- *
- * Returns the node or NULL in case of error
- */
-xmlExpNodePtr
-xmlExpNewRange(xmlExpCtxtPtr ctxt, xmlExpNodePtr subset, int min, int max) {
- if (ctxt == NULL)
- return(NULL);
- if ((subset == NULL) || (min < 0) || (max < -1) ||
- ((max >= 0) && (min > max))) {
- xmlExpFree(ctxt, subset);
- return(NULL);
- }
- return(xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, subset,
- NULL, NULL, min, max));
-}
-
-/************************************************************************
- * *
- * Public API for operations on expressions *
- * *
- ************************************************************************/
-
-static int
-xmlExpGetLanguageInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
- const xmlChar**list, int len, int nb) {
- int tmp, tmp2;
-tail:
- switch (exp->type) {
- case XML_EXP_EMPTY:
- return(0);
- case XML_EXP_ATOM:
- for (tmp = 0;tmp < nb;tmp++)
- if (list[tmp] == exp->exp_str)
- return(0);
- if (nb >= len)
- return(-2);
- list[nb] = exp->exp_str;
- return(1);
- case XML_EXP_COUNT:
- exp = exp->exp_left;
- goto tail;
- case XML_EXP_SEQ:
- case XML_EXP_OR:
- tmp = xmlExpGetLanguageInt(ctxt, exp->exp_left, list, len, nb);
- if (tmp < 0)
- return(tmp);
- tmp2 = xmlExpGetLanguageInt(ctxt, exp->exp_right, list, len,
- nb + tmp);
- if (tmp2 < 0)
- return(tmp2);
- return(tmp + tmp2);
- }
- return(-1);
-}
-
-/**
- * xmlExpGetLanguage:
- * @ctxt: the expression context
- * @exp: the expression
- * @langList: where to store the tokens
- * @len: the allocated length of @list
- *
- * Find all the strings used in @exp and store them in @list
- *
- * Returns the number of unique strings found, -1 in case of errors and
- * -2 if there is more than @len strings
- */
-int
-xmlExpGetLanguage(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
- const xmlChar**langList, int len) {
- if ((ctxt == NULL) || (exp == NULL) || (langList == NULL) || (len <= 0))
- return(-1);
- return(xmlExpGetLanguageInt(ctxt, exp, langList, len, 0));
-}
-
-static int
-xmlExpGetStartInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
- const xmlChar**list, int len, int nb) {
- int tmp, tmp2;
-tail:
- switch (exp->type) {
- case XML_EXP_FORBID:
- return(0);
- case XML_EXP_EMPTY:
- return(0);
- case XML_EXP_ATOM:
- for (tmp = 0;tmp < nb;tmp++)
- if (list[tmp] == exp->exp_str)
- return(0);
- if (nb >= len)
- return(-2);
- list[nb] = exp->exp_str;
- return(1);
- case XML_EXP_COUNT:
- exp = exp->exp_left;
- goto tail;
- case XML_EXP_SEQ:
- tmp = xmlExpGetStartInt(ctxt, exp->exp_left, list, len, nb);
- if (tmp < 0)
- return(tmp);
- if (IS_NILLABLE(exp->exp_left)) {
- tmp2 = xmlExpGetStartInt(ctxt, exp->exp_right, list, len,
- nb + tmp);
- if (tmp2 < 0)
- return(tmp2);
- tmp += tmp2;
- }
- return(tmp);
- case XML_EXP_OR:
- tmp = xmlExpGetStartInt(ctxt, exp->exp_left, list, len, nb);
- if (tmp < 0)
- return(tmp);
- tmp2 = xmlExpGetStartInt(ctxt, exp->exp_right, list, len,
- nb + tmp);
- if (tmp2 < 0)
- return(tmp2);
- return(tmp + tmp2);
- }
- return(-1);
-}
-
-/**
- * xmlExpGetStart:
- * @ctxt: the expression context
- * @exp: the expression
- * @tokList: where to store the tokens
- * @len: the allocated length of @list
- *
- * Find all the strings that appears at the start of the languages
- * accepted by @exp and store them in @list. E.g. for (a, b) | c
- * it will return the list [a, c]
- *
- * Returns the number of unique strings found, -1 in case of errors and
- * -2 if there is more than @len strings
- */
-int
-xmlExpGetStart(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
- const xmlChar**tokList, int len) {
- if ((ctxt == NULL) || (exp == NULL) || (tokList == NULL) || (len <= 0))
- return(-1);
- return(xmlExpGetStartInt(ctxt, exp, tokList, len, 0));
-}
-
-/**
- * xmlExpIsNillable:
- * @exp: the expression
- *
- * Finds if the expression is nillable, i.e. if it accepts the empty sequqnce
- *
- * Returns 1 if nillable, 0 if not and -1 in case of error
- */
-int
-xmlExpIsNillable(xmlExpNodePtr exp) {
- if (exp == NULL)
- return(-1);
- return(IS_NILLABLE(exp) != 0);
-}
-
-static xmlExpNodePtr
-xmlExpStringDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, const xmlChar *str)
-{
- xmlExpNodePtr ret;
-
- switch (exp->type) {
- case XML_EXP_EMPTY:
- return(forbiddenExp);
- case XML_EXP_FORBID:
- return(forbiddenExp);
- case XML_EXP_ATOM:
- if (exp->exp_str == str) {
-#ifdef DEBUG_DERIV
- printf("deriv atom: equal => Empty\n");
-#endif
- ret = emptyExp;
- } else {
-#ifdef DEBUG_DERIV
- printf("deriv atom: mismatch => forbid\n");
-#endif
- /* TODO wildcards here */
- ret = forbiddenExp;
- }
- return(ret);
- case XML_EXP_OR: {
- xmlExpNodePtr tmp;
-
-#ifdef DEBUG_DERIV
- printf("deriv or: => or(derivs)\n");
-#endif
- tmp = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
- if (tmp == NULL) {
- return(NULL);
- }
- ret = xmlExpStringDeriveInt(ctxt, exp->exp_right, str);
- if (ret == NULL) {
- xmlExpFree(ctxt, tmp);
- return(NULL);
- }
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, tmp, ret,
- NULL, 0, 0);
- return(ret);
- }
- case XML_EXP_SEQ:
-#ifdef DEBUG_DERIV
- printf("deriv seq: starting with left\n");
-#endif
- ret = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
- if (ret == NULL) {
- return(NULL);
- } else if (ret == forbiddenExp) {
- if (IS_NILLABLE(exp->exp_left)) {
-#ifdef DEBUG_DERIV
- printf("deriv seq: left failed but nillable\n");
-#endif
- ret = xmlExpStringDeriveInt(ctxt, exp->exp_right, str);
- }
- } else {
-#ifdef DEBUG_DERIV
- printf("deriv seq: left match => sequence\n");
-#endif
- exp->exp_right->ref++;
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, exp->exp_right,
- NULL, 0, 0);
- }
- return(ret);
- case XML_EXP_COUNT: {
- int min, max;
- xmlExpNodePtr tmp;
-
- if (exp->exp_max == 0)
- return(forbiddenExp);
- ret = xmlExpStringDeriveInt(ctxt, exp->exp_left, str);
- if (ret == NULL)
- return(NULL);
- if (ret == forbiddenExp) {
-#ifdef DEBUG_DERIV
- printf("deriv count: pattern mismatch => forbid\n");
-#endif
- return(ret);
- }
- if (exp->exp_max == 1)
- return(ret);
- if (exp->exp_max < 0) /* unbounded */
- max = -1;
- else
- max = exp->exp_max - 1;
- if (exp->exp_min > 0)
- min = exp->exp_min - 1;
- else
- min = 0;
- exp->exp_left->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left, NULL,
- NULL, min, max);
- if (ret == emptyExp) {
-#ifdef DEBUG_DERIV
- printf("deriv count: match to empty => new count\n");
-#endif
- return(tmp);
- }
-#ifdef DEBUG_DERIV
- printf("deriv count: match => sequence with new count\n");
-#endif
- return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, tmp,
- NULL, 0, 0));
- }
- }
- return(NULL);
-}
-
-/**
- * xmlExpStringDerive:
- * @ctxt: the expression context
- * @exp: the expression
- * @str: the string
- * @len: the string len in bytes if available
- *
- * Do one step of Brzozowski derivation of the expression @exp with
- * respect to the input string
- *
- * Returns the resulting expression or NULL in case of internal error
- */
-xmlExpNodePtr
-xmlExpStringDerive(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
- const xmlChar *str, int len) {
- const xmlChar *input;
-
- if ((exp == NULL) || (ctxt == NULL) || (str == NULL)) {
- return(NULL);
- }
- /*
- * check the string is in the dictionary, if yes use an interned
- * copy, otherwise we know it's not an acceptable input
- */
- input = xmlDictExists(ctxt->dict, str, len);
- if (input == NULL) {
- return(forbiddenExp);
- }
- return(xmlExpStringDeriveInt(ctxt, exp, input));
-}
-
-static int
-xmlExpCheckCard(xmlExpNodePtr exp, xmlExpNodePtr sub) {
- int ret = 1;
-
- if (sub->c_max == -1) {
- if (exp->c_max != -1)
- ret = 0;
- } else if ((exp->c_max >= 0) && (exp->c_max < sub->c_max)) {
- ret = 0;
- }
-#if 0
- if ((IS_NILLABLE(sub)) && (!IS_NILLABLE(exp)))
- ret = 0;
-#endif
- return(ret);
-}
-
-static xmlExpNodePtr xmlExpExpDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp,
- xmlExpNodePtr sub);
-/**
- * xmlExpDivide:
- * @ctxt: the expressions context
- * @exp: the englobing expression
- * @sub: the subexpression
- * @mult: the multiple expression
- * @remain: the remain from the derivation of the multiple
- *
- * Check if exp is a multiple of sub, i.e. if there is a finite number n
- * so that sub{n} subsume exp
- *
- * Returns the multiple value if successful, 0 if it is not a multiple
- * and -1 in case of internel error.
- */
-
-static int
-xmlExpDivide(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub,
- xmlExpNodePtr *mult, xmlExpNodePtr *remain) {
- int i;
- xmlExpNodePtr tmp, tmp2;
-
- if (mult != NULL) *mult = NULL;
- if (remain != NULL) *remain = NULL;
- if (exp->c_max == -1) return(0);
- if (IS_NILLABLE(exp) && (!IS_NILLABLE(sub))) return(0);
-
- for (i = 1;i <= exp->c_max;i++) {
- sub->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT,
- sub, NULL, NULL, i, i);
- if (tmp == NULL) {
- return(-1);
- }
- if (!xmlExpCheckCard(tmp, exp)) {
- xmlExpFree(ctxt, tmp);
- continue;
- }
- tmp2 = xmlExpExpDeriveInt(ctxt, tmp, exp);
- if (tmp2 == NULL) {
- xmlExpFree(ctxt, tmp);
- return(-1);
- }
- if ((tmp2 != forbiddenExp) && (IS_NILLABLE(tmp2))) {
- if (remain != NULL)
- *remain = tmp2;
- else
- xmlExpFree(ctxt, tmp2);
- if (mult != NULL)
- *mult = tmp;
- else
- xmlExpFree(ctxt, tmp);
-#ifdef DEBUG_DERIV
- printf("Divide succeeded %d\n", i);
-#endif
- return(i);
- }
- xmlExpFree(ctxt, tmp);
- xmlExpFree(ctxt, tmp2);
- }
-#ifdef DEBUG_DERIV
- printf("Divide failed\n");
-#endif
- return(0);
-}
-
-/**
- * xmlExpExpDeriveInt:
- * @ctxt: the expressions context
- * @exp: the englobing expression
- * @sub: the subexpression
- *
- * Try to do a step of Brzozowski derivation but at a higher level
- * the input being a subexpression.
- *
- * Returns the resulting expression or NULL in case of internal error
- */
-static xmlExpNodePtr
-xmlExpExpDeriveInt(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
- xmlExpNodePtr ret, tmp, tmp2, tmp3;
- const xmlChar **tab;
- int len, i;
-
- /*
- * In case of equality and if the expression can only consume a finite
- * amount, then the derivation is empty
- */
- if ((exp == sub) && (exp->c_max >= 0)) {
-#ifdef DEBUG_DERIV
- printf("Equal(exp, sub) and finite -> Empty\n");
-#endif
- return(emptyExp);
- }
- /*
- * decompose sub sequence first
- */
- if (sub->type == XML_EXP_EMPTY) {
-#ifdef DEBUG_DERIV
- printf("Empty(sub) -> Empty\n");
-#endif
- exp->ref++;
- return(exp);
- }
- if (sub->type == XML_EXP_SEQ) {
-#ifdef DEBUG_DERIV
- printf("Seq(sub) -> decompose\n");
-#endif
- tmp = xmlExpExpDeriveInt(ctxt, exp, sub->exp_left);
- if (tmp == NULL)
- return(NULL);
- if (tmp == forbiddenExp)
- return(tmp);
- ret = xmlExpExpDeriveInt(ctxt, tmp, sub->exp_right);
- xmlExpFree(ctxt, tmp);
- return(ret);
- }
- if (sub->type == XML_EXP_OR) {
-#ifdef DEBUG_DERIV
- printf("Or(sub) -> decompose\n");
-#endif
- tmp = xmlExpExpDeriveInt(ctxt, exp, sub->exp_left);
- if (tmp == forbiddenExp)
- return(tmp);
- if (tmp == NULL)
- return(NULL);
- ret = xmlExpExpDeriveInt(ctxt, exp, sub->exp_right);
- if ((ret == NULL) || (ret == forbiddenExp)) {
- xmlExpFree(ctxt, tmp);
- return(ret);
- }
- return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, tmp, ret, NULL, 0, 0));
- }
- if (!xmlExpCheckCard(exp, sub)) {
-#ifdef DEBUG_DERIV
- printf("CheckCard(exp, sub) failed -> Forbid\n");
-#endif
- return(forbiddenExp);
- }
- switch (exp->type) {
- case XML_EXP_EMPTY:
- if (sub == emptyExp)
- return(emptyExp);
-#ifdef DEBUG_DERIV
- printf("Empty(exp) -> Forbid\n");
-#endif
- return(forbiddenExp);
- case XML_EXP_FORBID:
-#ifdef DEBUG_DERIV
- printf("Forbid(exp) -> Forbid\n");
-#endif
- return(forbiddenExp);
- case XML_EXP_ATOM:
- if (sub->type == XML_EXP_ATOM) {
- /* TODO: handle wildcards */
- if (exp->exp_str == sub->exp_str) {
-#ifdef DEBUG_DERIV
- printf("Atom match -> Empty\n");
-#endif
- return(emptyExp);
- }
-#ifdef DEBUG_DERIV
- printf("Atom mismatch -> Forbid\n");
-#endif
- return(forbiddenExp);
- }
- if ((sub->type == XML_EXP_COUNT) &&
- (sub->exp_max == 1) &&
- (sub->exp_left->type == XML_EXP_ATOM)) {
- /* TODO: handle wildcards */
- if (exp->exp_str == sub->exp_left->exp_str) {
-#ifdef DEBUG_DERIV
- printf("Atom match -> Empty\n");
-#endif
- return(emptyExp);
- }
-#ifdef DEBUG_DERIV
- printf("Atom mismatch -> Forbid\n");
-#endif
- return(forbiddenExp);
- }
-#ifdef DEBUG_DERIV
- printf("Compex exp vs Atom -> Forbid\n");
-#endif
- return(forbiddenExp);
- case XML_EXP_SEQ:
- /* try to get the sequence consumed only if possible */
- if (xmlExpCheckCard(exp->exp_left, sub)) {
- /* See if the sequence can be consumed directly */
-#ifdef DEBUG_DERIV
- printf("Seq trying left only\n");
-#endif
- ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
- if ((ret != forbiddenExp) && (ret != NULL)) {
-#ifdef DEBUG_DERIV
- printf("Seq trying left only worked\n");
-#endif
- /*
- * TODO: assumption here that we are determinist
- * i.e. we won't get to a nillable exp left
- * subset which could be matched by the right
- * part too.
- * e.g.: (a | b)+,(a | c) and 'a+,a'
- */
- exp->exp_right->ref++;
- return(xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret,
- exp->exp_right, NULL, 0, 0));
- }
-#ifdef DEBUG_DERIV
- } else {
- printf("Seq: left too short\n");
-#endif
- }
- /* Try instead to decompose */
- if (sub->type == XML_EXP_COUNT) {
- int min, max;
-
-#ifdef DEBUG_DERIV
- printf("Seq: sub is a count\n");
-#endif
- ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub->exp_left);
- if (ret == NULL)
- return(NULL);
- if (ret != forbiddenExp) {
-#ifdef DEBUG_DERIV
- printf("Seq , Count match on left\n");
-#endif
- if (sub->exp_max < 0)
- max = -1;
- else
- max = sub->exp_max -1;
- if (sub->exp_min > 0)
- min = sub->exp_min -1;
- else
- min = 0;
- exp->exp_right->ref++;
- tmp = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret,
- exp->exp_right, NULL, 0, 0);
- if (tmp == NULL)
- return(NULL);
-
- sub->exp_left->ref++;
- tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT,
- sub->exp_left, NULL, NULL, min, max);
- if (tmp2 == NULL) {
- xmlExpFree(ctxt, tmp);
- return(NULL);
- }
- ret = xmlExpExpDeriveInt(ctxt, tmp, tmp2);
- xmlExpFree(ctxt, tmp);
- xmlExpFree(ctxt, tmp2);
- return(ret);
- }
- }
- /* we made no progress on structured operations */
- break;
- case XML_EXP_OR:
-#ifdef DEBUG_DERIV
- printf("Or , trying both side\n");
-#endif
- ret = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
- if (ret == NULL)
- return(NULL);
- tmp = xmlExpExpDeriveInt(ctxt, exp->exp_right, sub);
- if (tmp == NULL) {
- xmlExpFree(ctxt, ret);
- return(NULL);
- }
- return(xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, tmp, NULL, 0, 0));
- case XML_EXP_COUNT: {
- int min, max;
-
- if (sub->type == XML_EXP_COUNT) {
- /*
- * Try to see if the loop is completely subsumed
- */
- tmp = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub->exp_left);
- if (tmp == NULL)
- return(NULL);
- if (tmp == forbiddenExp) {
- int mult;
-
-#ifdef DEBUG_DERIV
- printf("Count, Count inner don't subsume\n");
-#endif
- mult = xmlExpDivide(ctxt, sub->exp_left, exp->exp_left,
- NULL, &tmp);
- if (mult <= 0) {
-#ifdef DEBUG_DERIV
- printf("Count, Count not multiple => forbidden\n");
-#endif
- return(forbiddenExp);
- }
- if (sub->exp_max == -1) {
- max = -1;
- if (exp->exp_max == -1) {
- if (exp->exp_min <= sub->exp_min * mult)
- min = 0;
- else
- min = exp->exp_min - sub->exp_min * mult;
- } else {
-#ifdef DEBUG_DERIV
- printf("Count, Count finite can't subsume infinite\n");
-#endif
- xmlExpFree(ctxt, tmp);
- return(forbiddenExp);
- }
- } else {
- if (exp->exp_max == -1) {
-#ifdef DEBUG_DERIV
- printf("Infinite loop consume mult finite loop\n");
-#endif
- if (exp->exp_min > sub->exp_min * mult) {
- max = -1;
- min = exp->exp_min - sub->exp_min * mult;
- } else {
- max = -1;
- min = 0;
- }
- } else {
- if (exp->exp_max < sub->exp_max * mult) {
-#ifdef DEBUG_DERIV
- printf("loops max mult mismatch => forbidden\n");
-#endif
- xmlExpFree(ctxt, tmp);
- return(forbiddenExp);
- }
- if (sub->exp_max * mult > exp->exp_min)
- min = 0;
- else
- min = exp->exp_min - sub->exp_max * mult;
- max = exp->exp_max - sub->exp_max * mult;
- }
- }
- } else if (!IS_NILLABLE(tmp)) {
- /*
- * TODO: loop here to try to grow if working on finite
- * blocks.
- */
-#ifdef DEBUG_DERIV
- printf("Count, Count remain not nillable => forbidden\n");
-#endif
- xmlExpFree(ctxt, tmp);
- return(forbiddenExp);
- } else if (sub->exp_max == -1) {
- if (exp->exp_max == -1) {
- if (exp->exp_min <= sub->exp_min) {
-#ifdef DEBUG_DERIV
- printf("Infinite loops Okay => COUNT(0,Inf)\n");
-#endif
- max = -1;
- min = 0;
- } else {
-#ifdef DEBUG_DERIV
- printf("Infinite loops min => Count(X,Inf)\n");
-#endif
- max = -1;
- min = exp->exp_min - sub->exp_min;
- }
- } else if (exp->exp_min > sub->exp_min) {
-#ifdef DEBUG_DERIV
- printf("loops min mismatch 1 => forbidden ???\n");
-#endif
- xmlExpFree(ctxt, tmp);
- return(forbiddenExp);
- } else {
- max = -1;
- min = 0;
- }
- } else {
- if (exp->exp_max == -1) {
-#ifdef DEBUG_DERIV
- printf("Infinite loop consume finite loop\n");
-#endif
- if (exp->exp_min > sub->exp_min) {
- max = -1;
- min = exp->exp_min - sub->exp_min;
- } else {
- max = -1;
- min = 0;
- }
- } else {
- if (exp->exp_max < sub->exp_max) {
-#ifdef DEBUG_DERIV
- printf("loops max mismatch => forbidden\n");
-#endif
- xmlExpFree(ctxt, tmp);
- return(forbiddenExp);
- }
- if (sub->exp_max > exp->exp_min)
- min = 0;
- else
- min = exp->exp_min - sub->exp_max;
- max = exp->exp_max - sub->exp_max;
- }
- }
-#ifdef DEBUG_DERIV
- printf("loops match => SEQ(COUNT())\n");
-#endif
- exp->exp_left->ref++;
- tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left,
- NULL, NULL, min, max);
- if (tmp2 == NULL) {
- return(NULL);
- }
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, tmp, tmp2,
- NULL, 0, 0);
- return(ret);
- }
- tmp = xmlExpExpDeriveInt(ctxt, exp->exp_left, sub);
- if (tmp == NULL)
- return(NULL);
- if (tmp == forbiddenExp) {
-#ifdef DEBUG_DERIV
- printf("loop mismatch => forbidden\n");
-#endif
- return(forbiddenExp);
- }
- if (exp->exp_min > 0)
- min = exp->exp_min - 1;
- else
- min = 0;
- if (exp->exp_max < 0)
- max = -1;
- else
- max = exp->exp_max - 1;
-
-#ifdef DEBUG_DERIV
- printf("loop match => SEQ(COUNT())\n");
-#endif
- exp->exp_left->ref++;
- tmp2 = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, exp->exp_left,
- NULL, NULL, min, max);
- if (tmp2 == NULL)
- return(NULL);
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, tmp, tmp2,
- NULL, 0, 0);
- return(ret);
- }
- }
-
-#ifdef DEBUG_DERIV
- printf("Fallback to derivative\n");
-#endif
- if (IS_NILLABLE(sub)) {
- if (!(IS_NILLABLE(exp)))
- return(forbiddenExp);
- else
- ret = emptyExp;
- } else
- ret = NULL;
- /*
- * here the structured derivation made no progress so
- * we use the default token based derivation to force one more step
- */
- if (ctxt->tabSize == 0)
- ctxt->tabSize = 40;
-
- tab = (const xmlChar **) xmlMalloc(ctxt->tabSize *
- sizeof(const xmlChar *));
- if (tab == NULL) {
- return(NULL);
- }
-
- /*
- * collect all the strings accepted by the subexpression on input
- */
- len = xmlExpGetStartInt(ctxt, sub, tab, ctxt->tabSize, 0);
- while (len < 0) {
- const xmlChar **temp;
- temp = (const xmlChar **) xmlRealloc((xmlChar **) tab, ctxt->tabSize * 2 *
- sizeof(const xmlChar *));
- if (temp == NULL) {
- xmlFree((xmlChar **) tab);
- return(NULL);
- }
- tab = temp;
- ctxt->tabSize *= 2;
- len = xmlExpGetStartInt(ctxt, sub, tab, ctxt->tabSize, 0);
- }
- for (i = 0;i < len;i++) {
- tmp = xmlExpStringDeriveInt(ctxt, exp, tab[i]);
- if ((tmp == NULL) || (tmp == forbiddenExp)) {
- xmlExpFree(ctxt, ret);
- xmlFree((xmlChar **) tab);
- return(tmp);
- }
- tmp2 = xmlExpStringDeriveInt(ctxt, sub, tab[i]);
- if ((tmp2 == NULL) || (tmp2 == forbiddenExp)) {
- xmlExpFree(ctxt, tmp);
- xmlExpFree(ctxt, ret);
- xmlFree((xmlChar **) tab);
- return(tmp);
- }
- tmp3 = xmlExpExpDeriveInt(ctxt, tmp, tmp2);
- xmlExpFree(ctxt, tmp);
- xmlExpFree(ctxt, tmp2);
-
- if ((tmp3 == NULL) || (tmp3 == forbiddenExp)) {
- xmlExpFree(ctxt, ret);
- xmlFree((xmlChar **) tab);
- return(tmp3);
- }
-
- if (ret == NULL)
- ret = tmp3;
- else {
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, tmp3, NULL, 0, 0);
- if (ret == NULL) {
- xmlFree((xmlChar **) tab);
- return(NULL);
- }
- }
- }
- xmlFree((xmlChar **) tab);
- return(ret);
-}
-
-/**
- * xmlExpExpDerive:
- * @ctxt: the expressions context
- * @exp: the englobing expression
- * @sub: the subexpression
- *
- * Evaluates the expression resulting from @exp consuming a sub expression @sub
- * Based on algebraic derivation and sometimes direct Brzozowski derivation
- * it usually tatkes less than linear time and can handle expressions generating
- * infinite languages.
- *
- * Returns the resulting expression or NULL in case of internal error, the
- * result must be freed
- */
-xmlExpNodePtr
-xmlExpExpDerive(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
- if ((exp == NULL) || (ctxt == NULL) || (sub == NULL))
- return(NULL);
-
- /*
- * O(1) speedups
- */
- if (IS_NILLABLE(sub) && (!IS_NILLABLE(exp))) {
-#ifdef DEBUG_DERIV
- printf("Sub nillable and not exp : can't subsume\n");
-#endif
- return(forbiddenExp);
- }
- if (xmlExpCheckCard(exp, sub) == 0) {
-#ifdef DEBUG_DERIV
- printf("sub generate longuer sequances than exp : can't subsume\n");
-#endif
- return(forbiddenExp);
- }
- return(xmlExpExpDeriveInt(ctxt, exp, sub));
-}
-
-/**
- * xmlExpSubsume:
- * @ctxt: the expressions context
- * @exp: the englobing expression
- * @sub: the subexpression
- *
- * Check whether @exp accepts all the languages accexpted by @sub
- * the input being a subexpression.
- *
- * Returns 1 if true 0 if false and -1 in case of failure.
- */
-int
-xmlExpSubsume(xmlExpCtxtPtr ctxt, xmlExpNodePtr exp, xmlExpNodePtr sub) {
- xmlExpNodePtr tmp;
-
- if ((exp == NULL) || (ctxt == NULL) || (sub == NULL))
- return(-1);
-
- /*
- * TODO: speedup by checking the language of sub is a subset of the
- * language of exp
- */
- /*
- * O(1) speedups
- */
- if (IS_NILLABLE(sub) && (!IS_NILLABLE(exp))) {
-#ifdef DEBUG_DERIV
- printf("Sub nillable and not exp : can't subsume\n");
-#endif
- return(0);
- }
- if (xmlExpCheckCard(exp, sub) == 0) {
-#ifdef DEBUG_DERIV
- printf("sub generate longuer sequances than exp : can't subsume\n");
-#endif
- return(0);
- }
- tmp = xmlExpExpDeriveInt(ctxt, exp, sub);
-#ifdef DEBUG_DERIV
- printf("Result derivation :\n");
- PRINT_EXP(tmp);
-#endif
- if (tmp == NULL)
- return(-1);
- if (tmp == forbiddenExp)
- return(0);
- if (tmp == emptyExp)
- return(1);
- if ((tmp != NULL) && (IS_NILLABLE(tmp))) {
- xmlExpFree(ctxt, tmp);
- return(1);
- }
- xmlExpFree(ctxt, tmp);
- return(0);
-}
-
-/************************************************************************
- * *
- * Parsing expression *
- * *
- ************************************************************************/
-
-static xmlExpNodePtr xmlExpParseExpr(xmlExpCtxtPtr ctxt);
-
-#undef CUR
-#define CUR (*ctxt->cur)
-#undef NEXT
-#define NEXT ctxt->cur++;
-#undef IS_BLANK
-#define IS_BLANK(c) ((c == ' ') || (c == '\n') || (c == '\r') || (c == '\t'))
-#define SKIP_BLANKS while (IS_BLANK(*ctxt->cur)) ctxt->cur++;
-
-static int
-xmlExpParseNumber(xmlExpCtxtPtr ctxt) {
- int ret = 0;
-
- SKIP_BLANKS
- if (CUR == '*') {
- NEXT
- return(-1);
- }
- if ((CUR < '0') || (CUR > '9'))
- return(-1);
- while ((CUR >= '0') && (CUR <= '9')) {
- ret = ret * 10 + (CUR - '0');
- NEXT
- }
- return(ret);
-}
-
-static xmlExpNodePtr
-xmlExpParseOr(xmlExpCtxtPtr ctxt) {
- const char *base;
- xmlExpNodePtr ret;
- const xmlChar *val;
-
- SKIP_BLANKS
- base = ctxt->cur;
- if (*ctxt->cur == '(') {
- NEXT
- ret = xmlExpParseExpr(ctxt);
- SKIP_BLANKS
- if (*ctxt->cur != ')') {
- fprintf(stderr, "unbalanced '(' : %s\n", base);
- xmlExpFree(ctxt, ret);
- return(NULL);
- }
- NEXT;
- SKIP_BLANKS
- goto parse_quantifier;
- }
- while ((CUR != 0) && (!(IS_BLANK(CUR))) && (CUR != '(') &&
- (CUR != ')') && (CUR != '|') && (CUR != ',') && (CUR != '{') &&
- (CUR != '*') && (CUR != '+') && (CUR != '?') && (CUR != '}'))
- NEXT;
- val = xmlDictLookup(ctxt->dict, BAD_CAST base, ctxt->cur - base);
- if (val == NULL)
- return(NULL);
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_ATOM, NULL, NULL, val, 0, 0);
- if (ret == NULL)
- return(NULL);
- SKIP_BLANKS
-parse_quantifier:
- if (CUR == '{') {
- int min, max;
-
- NEXT
- min = xmlExpParseNumber(ctxt);
- if (min < 0) {
- xmlExpFree(ctxt, ret);
- return(NULL);
- }
- SKIP_BLANKS
- if (CUR == ',') {
- NEXT
- max = xmlExpParseNumber(ctxt);
- SKIP_BLANKS
- } else
- max = min;
- if (CUR != '}') {
- xmlExpFree(ctxt, ret);
- return(NULL);
- }
- NEXT
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
- min, max);
- SKIP_BLANKS
- } else if (CUR == '?') {
- NEXT
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
- 0, 1);
- SKIP_BLANKS
- } else if (CUR == '+') {
- NEXT
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
- 1, -1);
- SKIP_BLANKS
- } else if (CUR == '*') {
- NEXT
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_COUNT, ret, NULL, NULL,
- 0, -1);
- SKIP_BLANKS
- }
- return(ret);
-}
-
-
-static xmlExpNodePtr
-xmlExpParseSeq(xmlExpCtxtPtr ctxt) {
- xmlExpNodePtr ret, right;
-
- ret = xmlExpParseOr(ctxt);
- SKIP_BLANKS
- while (CUR == '|') {
- NEXT
- right = xmlExpParseOr(ctxt);
- if (right == NULL) {
- xmlExpFree(ctxt, ret);
- return(NULL);
- }
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_OR, ret, right, NULL, 0, 0);
- if (ret == NULL)
- return(NULL);
- }
- return(ret);
-}
-
-static xmlExpNodePtr
-xmlExpParseExpr(xmlExpCtxtPtr ctxt) {
- xmlExpNodePtr ret, right;
-
- ret = xmlExpParseSeq(ctxt);
- SKIP_BLANKS
- while (CUR == ',') {
- NEXT
- right = xmlExpParseSeq(ctxt);
- if (right == NULL) {
- xmlExpFree(ctxt, ret);
- return(NULL);
- }
- ret = xmlExpHashGetEntry(ctxt, XML_EXP_SEQ, ret, right, NULL, 0, 0);
- if (ret == NULL)
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlExpParse:
- * @ctxt: the expressions context
- * @expr: the 0 terminated string
- *
- * Minimal parser for regexps, it understand the following constructs
- * - string terminals
- * - choice operator |
- * - sequence operator ,
- * - subexpressions (...)
- * - usual cardinality operators + * and ?
- * - finite sequences { min, max }
- * - infinite sequences { min, * }
- * There is minimal checkings made especially no checking on strings values
- *
- * Returns a new expression or NULL in case of failure
- */
-xmlExpNodePtr
-xmlExpParse(xmlExpCtxtPtr ctxt, const char *expr) {
- xmlExpNodePtr ret;
-
- ctxt->expr = expr;
- ctxt->cur = expr;
-
- ret = xmlExpParseExpr(ctxt);
- SKIP_BLANKS
- if (*ctxt->cur != 0) {
- xmlExpFree(ctxt, ret);
- return(NULL);
- }
- return(ret);
-}
-
-static void
-xmlExpDumpInt(xmlBufferPtr buf, xmlExpNodePtr expr, int glob) {
- xmlExpNodePtr c;
-
- if (expr == NULL) return;
- if (glob) xmlBufferWriteChar(buf, "(");
- switch (expr->type) {
- case XML_EXP_EMPTY:
- xmlBufferWriteChar(buf, "empty");
- break;
- case XML_EXP_FORBID:
- xmlBufferWriteChar(buf, "forbidden");
- break;
- case XML_EXP_ATOM:
- xmlBufferWriteCHAR(buf, expr->exp_str);
- break;
- case XML_EXP_SEQ:
- c = expr->exp_left;
- if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
- xmlExpDumpInt(buf, c, 1);
- else
- xmlExpDumpInt(buf, c, 0);
- xmlBufferWriteChar(buf, " , ");
- c = expr->exp_right;
- if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
- xmlExpDumpInt(buf, c, 1);
- else
- xmlExpDumpInt(buf, c, 0);
- break;
- case XML_EXP_OR:
- c = expr->exp_left;
- if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
- xmlExpDumpInt(buf, c, 1);
- else
- xmlExpDumpInt(buf, c, 0);
- xmlBufferWriteChar(buf, " | ");
- c = expr->exp_right;
- if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
- xmlExpDumpInt(buf, c, 1);
- else
- xmlExpDumpInt(buf, c, 0);
- break;
- case XML_EXP_COUNT: {
- char rep[40];
-
- c = expr->exp_left;
- if ((c->type == XML_EXP_SEQ) || (c->type == XML_EXP_OR))
- xmlExpDumpInt(buf, c, 1);
- else
- xmlExpDumpInt(buf, c, 0);
- if ((expr->exp_min == 0) && (expr->exp_max == 1)) {
- rep[0] = '?';
- rep[1] = 0;
- } else if ((expr->exp_min == 0) && (expr->exp_max == -1)) {
- rep[0] = '*';
- rep[1] = 0;
- } else if ((expr->exp_min == 1) && (expr->exp_max == -1)) {
- rep[0] = '+';
- rep[1] = 0;
- } else if (expr->exp_max == expr->exp_min) {
- snprintf(rep, 39, "{%d}", expr->exp_min);
- } else if (expr->exp_max < 0) {
- snprintf(rep, 39, "{%d,inf}", expr->exp_min);
- } else {
- snprintf(rep, 39, "{%d,%d}", expr->exp_min, expr->exp_max);
- }
- rep[39] = 0;
- xmlBufferWriteChar(buf, rep);
- break;
- }
- default:
- fprintf(stderr, "Error in tree\n");
- }
- if (glob)
- xmlBufferWriteChar(buf, ")");
-}
-/**
- * xmlExpDump:
- * @buf: a buffer to receive the output
- * @expr: the compiled expression
- *
- * Serialize the expression as compiled to the buffer
- */
-void
-xmlExpDump(xmlBufferPtr buf, xmlExpNodePtr expr) {
- if ((buf == NULL) || (expr == NULL))
- return;
- xmlExpDumpInt(buf, expr, 0);
-}
-
-/**
- * xmlExpMaxToken:
- * @expr: a compiled expression
- *
- * Indicate the maximum number of input a expression can accept
- *
- * Returns the maximum length or -1 in case of error
- */
-int
-xmlExpMaxToken(xmlExpNodePtr expr) {
- if (expr == NULL)
- return(-1);
- return(expr->c_max);
-}
-
-/**
- * xmlExpCtxtNbNodes:
- * @ctxt: an expression context
- *
- * Debugging facility provides the number of allocated nodes at a that point
- *
- * Returns the number of nodes in use or -1 in case of error
- */
-int
-xmlExpCtxtNbNodes(xmlExpCtxtPtr ctxt) {
- if (ctxt == NULL)
- return(-1);
- return(ctxt->nb_nodes);
-}
-
-/**
- * xmlExpCtxtNbCons:
- * @ctxt: an expression context
- *
- * Debugging facility provides the number of allocated nodes over lifetime
- *
- * Returns the number of nodes ever allocated or -1 in case of error
- */
-int
-xmlExpCtxtNbCons(xmlExpCtxtPtr ctxt) {
- if (ctxt == NULL)
- return(-1);
- return(ctxt->nb_cons);
-}
-
-#endif /* LIBXML_EXPR_ENABLED */
-#define bottom_xmlregexp
-#include "elfgcchack.h"
-#endif /* LIBXML_REGEXP_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/xmlsave.c b/external/libxml2_android/jni/libxml2/xmlsave.c
deleted file mode 100644
index 4a8e3f39..00000000
--- a/external/libxml2_android/jni/libxml2/xmlsave.c
+++ /dev/null
@@ -1,2788 +0,0 @@
-/*
- * xmlsave.c: Implemetation of the document serializer
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parserInternals.h>
-#include <libxml/tree.h>
-#include <libxml/xmlsave.h>
-
-#define MAX_INDENT 60
-
-#include <libxml/HTMLtree.h>
-
-#include "buf.h"
-#include "enc.h"
-#include "save.h"
-
-/************************************************************************
- * *
- * XHTML detection *
- * *
- ************************************************************************/
-#define XHTML_STRICT_PUBLIC_ID BAD_CAST \
- "-//W3C//DTD XHTML 1.0 Strict//EN"
-#define XHTML_STRICT_SYSTEM_ID BAD_CAST \
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
-#define XHTML_FRAME_PUBLIC_ID BAD_CAST \
- "-//W3C//DTD XHTML 1.0 Frameset//EN"
-#define XHTML_FRAME_SYSTEM_ID BAD_CAST \
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"
-#define XHTML_TRANS_PUBLIC_ID BAD_CAST \
- "-//W3C//DTD XHTML 1.0 Transitional//EN"
-#define XHTML_TRANS_SYSTEM_ID BAD_CAST \
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
-
-#define XHTML_NS_NAME BAD_CAST "http://www.w3.org/1999/xhtml"
-/**
- * xmlIsXHTML:
- * @systemID: the system identifier
- * @publicID: the public identifier
- *
- * Try to find if the document correspond to an XHTML DTD
- *
- * Returns 1 if true, 0 if not and -1 in case of error
- */
-int
-xmlIsXHTML(const xmlChar *systemID, const xmlChar *publicID) {
- if ((systemID == NULL) && (publicID == NULL))
- return(-1);
- if (publicID != NULL) {
- if (xmlStrEqual(publicID, XHTML_STRICT_PUBLIC_ID)) return(1);
- if (xmlStrEqual(publicID, XHTML_FRAME_PUBLIC_ID)) return(1);
- if (xmlStrEqual(publicID, XHTML_TRANS_PUBLIC_ID)) return(1);
- }
- if (systemID != NULL) {
- if (xmlStrEqual(systemID, XHTML_STRICT_SYSTEM_ID)) return(1);
- if (xmlStrEqual(systemID, XHTML_FRAME_SYSTEM_ID)) return(1);
- if (xmlStrEqual(systemID, XHTML_TRANS_SYSTEM_ID)) return(1);
- }
- return(0);
-}
-
-#ifdef LIBXML_OUTPUT_ENABLED
-
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-struct _xmlSaveCtxt {
- void *_private;
- int type;
- int fd;
- const xmlChar *filename;
- const xmlChar *encoding;
- xmlCharEncodingHandlerPtr handler;
- xmlOutputBufferPtr buf;
- xmlDocPtr doc;
- int options;
- int level;
- int format;
- char indent[MAX_INDENT + 1]; /* array for indenting output */
- int indent_nr;
- int indent_size;
- xmlCharEncodingOutputFunc escape; /* used for element content */
- xmlCharEncodingOutputFunc escapeAttr;/* used for attribute content */
-};
-
-/************************************************************************
- * *
- * Output error handlers *
- * *
- ************************************************************************/
-/**
- * xmlSaveErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSaveErrMemory(const char *extra)
-{
- __xmlSimpleError(XML_FROM_OUTPUT, XML_ERR_NO_MEMORY, NULL, NULL, extra);
-}
-
-/**
- * xmlSaveErr:
- * @code: the error number
- * @node: the location of the error.
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSaveErr(int code, xmlNodePtr node, const char *extra)
-{
- const char *msg = NULL;
-
- switch(code) {
- case XML_SAVE_NOT_UTF8:
- msg = "string is not in UTF-8\n";
- break;
- case XML_SAVE_CHAR_INVALID:
- msg = "invalid character value\n";
- break;
- case XML_SAVE_UNKNOWN_ENCODING:
- msg = "unknown encoding %s\n";
- break;
- case XML_SAVE_NO_DOCTYPE:
- msg = "document has no DOCTYPE\n";
- break;
- default:
- msg = "unexpected error number\n";
- }
- __xmlSimpleError(XML_FROM_OUTPUT, code, node, msg, extra);
-}
-
-/************************************************************************
- * *
- * Special escaping routines *
- * *
- ************************************************************************/
-static unsigned char *
-xmlSerializeHexCharRef(unsigned char *out, int val) {
- unsigned char *ptr;
-
- *out++ = '&';
- *out++ = '#';
- *out++ = 'x';
- if (val < 0x10) ptr = out;
- else if (val < 0x100) ptr = out + 1;
- else if (val < 0x1000) ptr = out + 2;
- else if (val < 0x10000) ptr = out + 3;
- else if (val < 0x100000) ptr = out + 4;
- else ptr = out + 5;
- out = ptr + 1;
- while (val > 0) {
- switch (val & 0xF) {
- case 0: *ptr-- = '0'; break;
- case 1: *ptr-- = '1'; break;
- case 2: *ptr-- = '2'; break;
- case 3: *ptr-- = '3'; break;
- case 4: *ptr-- = '4'; break;
- case 5: *ptr-- = '5'; break;
- case 6: *ptr-- = '6'; break;
- case 7: *ptr-- = '7'; break;
- case 8: *ptr-- = '8'; break;
- case 9: *ptr-- = '9'; break;
- case 0xA: *ptr-- = 'A'; break;
- case 0xB: *ptr-- = 'B'; break;
- case 0xC: *ptr-- = 'C'; break;
- case 0xD: *ptr-- = 'D'; break;
- case 0xE: *ptr-- = 'E'; break;
- case 0xF: *ptr-- = 'F'; break;
- default: *ptr-- = '0'; break;
- }
- val >>= 4;
- }
- *out++ = ';';
- *out = 0;
- return(out);
-}
-
-/**
- * xmlEscapeEntities:
- * @out: a pointer to an array of bytes to store the result
- * @outlen: the length of @out
- * @in: a pointer to an array of unescaped UTF-8 bytes
- * @inlen: the length of @in
- *
- * Take a block of UTF-8 chars in and escape them. Used when there is no
- * encoding specified.
- *
- * Returns 0 if success, or -1 otherwise
- * The value of @inlen after return is the number of octets consumed
- * if the return value is positive, else unpredictable.
- * The value of @outlen after return is the number of octets consumed.
- */
-static int
-xmlEscapeEntities(unsigned char* out, int *outlen,
- const xmlChar* in, int *inlen) {
- unsigned char* outstart = out;
- const unsigned char* base = in;
- unsigned char* outend = out + *outlen;
- const unsigned char* inend;
- int val;
-
- inend = in + (*inlen);
-
- while ((in < inend) && (out < outend)) {
- if (*in == '<') {
- if (outend - out < 4) break;
- *out++ = '&';
- *out++ = 'l';
- *out++ = 't';
- *out++ = ';';
- in++;
- continue;
- } else if (*in == '>') {
- if (outend - out < 4) break;
- *out++ = '&';
- *out++ = 'g';
- *out++ = 't';
- *out++ = ';';
- in++;
- continue;
- } else if (*in == '&') {
- if (outend - out < 5) break;
- *out++ = '&';
- *out++ = 'a';
- *out++ = 'm';
- *out++ = 'p';
- *out++ = ';';
- in++;
- continue;
- } else if (((*in >= 0x20) && (*in < 0x80)) ||
- (*in == '\n') || (*in == '\t')) {
- /*
- * default case, just copy !
- */
- *out++ = *in++;
- continue;
- } else if (*in >= 0x80) {
- /*
- * We assume we have UTF-8 input.
- */
- if (outend - out < 11) break;
-
- if (*in < 0xC0) {
- xmlSaveErr(XML_SAVE_NOT_UTF8, NULL, NULL);
- in++;
- goto error;
- } else if (*in < 0xE0) {
- if (inend - in < 2) break;
- val = (in[0]) & 0x1F;
- val <<= 6;
- val |= (in[1]) & 0x3F;
- in += 2;
- } else if (*in < 0xF0) {
- if (inend - in < 3) break;
- val = (in[0]) & 0x0F;
- val <<= 6;
- val |= (in[1]) & 0x3F;
- val <<= 6;
- val |= (in[2]) & 0x3F;
- in += 3;
- } else if (*in < 0xF8) {
- if (inend - in < 4) break;
- val = (in[0]) & 0x07;
- val <<= 6;
- val |= (in[1]) & 0x3F;
- val <<= 6;
- val |= (in[2]) & 0x3F;
- val <<= 6;
- val |= (in[3]) & 0x3F;
- in += 4;
- } else {
- xmlSaveErr(XML_SAVE_CHAR_INVALID, NULL, NULL);
- in++;
- goto error;
- }
- if (!IS_CHAR(val)) {
- xmlSaveErr(XML_SAVE_CHAR_INVALID, NULL, NULL);
- in++;
- goto error;
- }
-
- /*
- * We could do multiple things here. Just save as a char ref
- */
- out = xmlSerializeHexCharRef(out, val);
- } else if (IS_BYTE_CHAR(*in)) {
- if (outend - out < 6) break;
- out = xmlSerializeHexCharRef(out, *in++);
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "xmlEscapeEntities : char out of range\n");
- in++;
- goto error;
- }
- }
- *outlen = out - outstart;
- *inlen = in - base;
- return(0);
-error:
- *outlen = out - outstart;
- *inlen = in - base;
- return(-1);
-}
-
-/************************************************************************
- * *
- * Allocation and deallocation *
- * *
- ************************************************************************/
-/**
- * xmlSaveCtxtInit:
- * @ctxt: the saving context
- *
- * Initialize a saving context
- */
-static void
-xmlSaveCtxtInit(xmlSaveCtxtPtr ctxt)
-{
- int i;
- int len;
-
- if (ctxt == NULL) return;
- if ((ctxt->encoding == NULL) && (ctxt->escape == NULL))
- ctxt->escape = xmlEscapeEntities;
- len = xmlStrlen((xmlChar *)xmlTreeIndentString);
- if ((xmlTreeIndentString == NULL) || (len == 0)) {
- memset(&ctxt->indent[0], 0, MAX_INDENT + 1);
- } else {
- ctxt->indent_size = len;
- ctxt->indent_nr = MAX_INDENT / ctxt->indent_size;
- for (i = 0;i < ctxt->indent_nr;i++)
- memcpy(&ctxt->indent[i * ctxt->indent_size], xmlTreeIndentString,
- ctxt->indent_size);
- ctxt->indent[ctxt->indent_nr * ctxt->indent_size] = 0;
- }
-
- if (xmlSaveNoEmptyTags) {
- ctxt->options |= XML_SAVE_NO_EMPTY;
- }
-}
-
-/**
- * xmlFreeSaveCtxt:
- *
- * Free a saving context, destroying the ouptut in any remaining buffer
- */
-static void
-xmlFreeSaveCtxt(xmlSaveCtxtPtr ctxt)
-{
- if (ctxt == NULL) return;
- if (ctxt->encoding != NULL)
- xmlFree((char *) ctxt->encoding);
- if (ctxt->buf != NULL)
- xmlOutputBufferClose(ctxt->buf);
- xmlFree(ctxt);
-}
-
-/**
- * xmlNewSaveCtxt:
- *
- * Create a new saving context
- *
- * Returns the new structure or NULL in case of error
- */
-static xmlSaveCtxtPtr
-xmlNewSaveCtxt(const char *encoding, int options)
-{
- xmlSaveCtxtPtr ret;
-
- ret = (xmlSaveCtxtPtr) xmlMalloc(sizeof(xmlSaveCtxt));
- if (ret == NULL) {
- xmlSaveErrMemory("creating saving context");
- return ( NULL );
- }
- memset(ret, 0, sizeof(xmlSaveCtxt));
-
- if (encoding != NULL) {
- ret->handler = xmlFindCharEncodingHandler(encoding);
- if (ret->handler == NULL) {
- xmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL, encoding);
- xmlFreeSaveCtxt(ret);
- return(NULL);
- }
- ret->encoding = xmlStrdup((const xmlChar *)encoding);
- ret->escape = NULL;
- }
- xmlSaveCtxtInit(ret);
-
- /*
- * Use the options
- */
-
- /* Re-check this option as it may already have been set */
- if ((ret->options & XML_SAVE_NO_EMPTY) && ! (options & XML_SAVE_NO_EMPTY)) {
- options |= XML_SAVE_NO_EMPTY;
- }
-
- ret->options = options;
- if (options & XML_SAVE_FORMAT)
- ret->format = 1;
- else if (options & XML_SAVE_WSNONSIG)
- ret->format = 2;
-
- return(ret);
-}
-
-/************************************************************************
- * *
- * Dumping XML tree content to a simple buffer *
- * *
- ************************************************************************/
-/**
- * xmlAttrSerializeContent:
- * @buf: the XML buffer output
- * @doc: the document
- * @attr: the attribute pointer
- *
- * Serialize the attribute in the buffer
- */
-static void
-xmlAttrSerializeContent(xmlOutputBufferPtr buf, xmlAttrPtr attr)
-{
- xmlNodePtr children;
-
- children = attr->children;
- while (children != NULL) {
- switch (children->type) {
- case XML_TEXT_NODE:
- xmlBufAttrSerializeTxtContent(buf->buffer, attr->doc,
- attr, children->content);
- break;
- case XML_ENTITY_REF_NODE:
- xmlBufAdd(buf->buffer, BAD_CAST "&", 1);
- xmlBufAdd(buf->buffer, children->name,
- xmlStrlen(children->name));
- xmlBufAdd(buf->buffer, BAD_CAST ";", 1);
- break;
- default:
- /* should not happen unless we have a badly built tree */
- break;
- }
- children = children->next;
- }
-}
-
-/**
- * xmlBufDumpNotationTable:
- * @buf: an xmlBufPtr output
- * @table: A notation table
- *
- * This will dump the content of the notation table as an XML DTD definition
- */
-void
-xmlBufDumpNotationTable(xmlBufPtr buf, xmlNotationTablePtr table) {
- xmlBufferPtr buffer;
-
- buffer = xmlBufferCreate();
- if (buffer == NULL) {
- /*
- * TODO set the error in buf
- */
- return;
- }
- xmlDumpNotationTable(buffer, table);
- xmlBufMergeBuffer(buf, buffer);
-}
-
-/**
- * xmlBufDumpElementDecl:
- * @buf: an xmlBufPtr output
- * @elem: An element table
- *
- * This will dump the content of the element declaration as an XML
- * DTD definition
- */
-void
-xmlBufDumpElementDecl(xmlBufPtr buf, xmlElementPtr elem) {
- xmlBufferPtr buffer;
-
- buffer = xmlBufferCreate();
- if (buffer == NULL) {
- /*
- * TODO set the error in buf
- */
- return;
- }
- xmlDumpElementDecl(buffer, elem);
- xmlBufMergeBuffer(buf, buffer);
-}
-
-/**
- * xmlBufDumpAttributeDecl:
- * @buf: an xmlBufPtr output
- * @attr: An attribute declaration
- *
- * This will dump the content of the attribute declaration as an XML
- * DTD definition
- */
-void
-xmlBufDumpAttributeDecl(xmlBufPtr buf, xmlAttributePtr attr) {
- xmlBufferPtr buffer;
-
- buffer = xmlBufferCreate();
- if (buffer == NULL) {
- /*
- * TODO set the error in buf
- */
- return;
- }
- xmlDumpAttributeDecl(buffer, attr);
- xmlBufMergeBuffer(buf, buffer);
-}
-
-/**
- * xmlBufDumpEntityDecl:
- * @buf: an xmlBufPtr output
- * @ent: An entity table
- *
- * This will dump the content of the entity table as an XML DTD definition
- */
-void
-xmlBufDumpEntityDecl(xmlBufPtr buf, xmlEntityPtr ent) {
- xmlBufferPtr buffer;
-
- buffer = xmlBufferCreate();
- if (buffer == NULL) {
- /*
- * TODO set the error in buf
- */
- return;
- }
- xmlDumpEntityDecl(buffer, ent);
- xmlBufMergeBuffer(buf, buffer);
-}
-
-/************************************************************************
- * *
- * Dumping XML tree content to an I/O output buffer *
- * *
- ************************************************************************/
-
-static int xmlSaveSwitchEncoding(xmlSaveCtxtPtr ctxt, const char *encoding) {
- xmlOutputBufferPtr buf = ctxt->buf;
-
- if ((encoding != NULL) && (buf->encoder == NULL) && (buf->conv == NULL)) {
- buf->encoder = xmlFindCharEncodingHandler((const char *)encoding);
- if (buf->encoder == NULL) {
- xmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, NULL,
- (const char *)encoding);
- return(-1);
- }
- buf->conv = xmlBufCreate();
- if (buf->conv == NULL) {
- xmlCharEncCloseFunc(buf->encoder);
- xmlSaveErrMemory("creating encoding buffer");
- return(-1);
- }
- /*
- * initialize the state, e.g. if outputting a BOM
- */
- xmlCharEncOutput(buf, 1);
- }
- return(0);
-}
-
-static int xmlSaveClearEncoding(xmlSaveCtxtPtr ctxt) {
- xmlOutputBufferPtr buf = ctxt->buf;
- xmlOutputBufferFlush(buf);
- xmlCharEncCloseFunc(buf->encoder);
- xmlBufFree(buf->conv);
- buf->encoder = NULL;
- buf->conv = NULL;
- return(0);
-}
-
-#ifdef LIBXML_HTML_ENABLED
-static void
-xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur);
-#endif
-static void xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur);
-static void xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur);
-void xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur);
-static int xmlDocContentDumpOutput(xmlSaveCtxtPtr ctxt, xmlDocPtr cur);
-
-/**
- * xmlOutputBufferWriteWSNonSig:
- * @ctxt: The save context
- * @extra: Number of extra indents to apply to ctxt->level
- *
- * Write out formatting for non-significant whitespace output.
- */
-static void
-xmlOutputBufferWriteWSNonSig(xmlSaveCtxtPtr ctxt, int extra)
-{
- int i;
- if ((ctxt == NULL) || (ctxt->buf == NULL))
- return;
- xmlOutputBufferWrite(ctxt->buf, 1, "\n");
- for (i = 0; i < (ctxt->level + extra); i += ctxt->indent_nr) {
- xmlOutputBufferWrite(ctxt->buf, ctxt->indent_size *
- ((ctxt->level + extra - i) > ctxt->indent_nr ?
- ctxt->indent_nr : (ctxt->level + extra - i)),
- ctxt->indent);
- }
-}
-
-/**
- * xmlNsDumpOutput:
- * @buf: the XML buffer output
- * @cur: a namespace
- * @ctxt: the output save context. Optional.
- *
- * Dump a local Namespace definition.
- * Should be called in the context of attributes dumps.
- * If @ctxt is supplied, @buf should be its buffer.
- */
-static void
-xmlNsDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur, xmlSaveCtxtPtr ctxt) {
- if ((cur == NULL) || (buf == NULL)) return;
- if ((cur->type == XML_LOCAL_NAMESPACE) && (cur->href != NULL)) {
- if (xmlStrEqual(cur->prefix, BAD_CAST "xml"))
- return;
-
- if (ctxt != NULL && ctxt->format == 2)
- xmlOutputBufferWriteWSNonSig(ctxt, 2);
- else
- xmlOutputBufferWrite(buf, 1, " ");
-
- /* Within the context of an element attributes */
- if (cur->prefix != NULL) {
- xmlOutputBufferWrite(buf, 6, "xmlns:");
- xmlOutputBufferWriteString(buf, (const char *)cur->prefix);
- } else
- xmlOutputBufferWrite(buf, 5, "xmlns");
- xmlOutputBufferWrite(buf, 1, "=");
- xmlBufWriteQuotedString(buf->buffer, cur->href);
- }
-}
-
-/**
- * xmlNsDumpOutputCtxt
- * @ctxt: the save context
- * @cur: a namespace
- *
- * Dump a local Namespace definition to a save context.
- * Should be called in the context of attribute dumps.
- */
-static void
-xmlNsDumpOutputCtxt(xmlSaveCtxtPtr ctxt, xmlNsPtr cur) {
- xmlNsDumpOutput(ctxt->buf, cur, ctxt);
-}
-
-/**
- * xmlNsListDumpOutputCtxt
- * @ctxt: the save context
- * @cur: the first namespace
- *
- * Dump a list of local namespace definitions to a save context.
- * Should be called in the context of attribute dumps.
- */
-static void
-xmlNsListDumpOutputCtxt(xmlSaveCtxtPtr ctxt, xmlNsPtr cur) {
- while (cur != NULL) {
- xmlNsDumpOutput(ctxt->buf, cur, ctxt);
- cur = cur->next;
- }
-}
-
-/**
- * xmlNsListDumpOutput:
- * @buf: the XML buffer output
- * @cur: the first namespace
- *
- * Dump a list of local Namespace definitions.
- * Should be called in the context of attributes dumps.
- */
-void
-xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur) {
- while (cur != NULL) {
- xmlNsDumpOutput(buf, cur, NULL);
- cur = cur->next;
- }
-}
-
-/**
- * xmlDtdDumpOutput:
- * @buf: the XML buffer output
- * @dtd: the pointer to the DTD
- *
- * Dump the XML document DTD, if any.
- */
-static void
-xmlDtdDumpOutput(xmlSaveCtxtPtr ctxt, xmlDtdPtr dtd) {
- xmlOutputBufferPtr buf;
- int format, level;
- xmlDocPtr doc;
-
- if (dtd == NULL) return;
- if ((ctxt == NULL) || (ctxt->buf == NULL))
- return;
- buf = ctxt->buf;
- xmlOutputBufferWrite(buf, 10, "<!DOCTYPE ");
- xmlOutputBufferWriteString(buf, (const char *)dtd->name);
- if (dtd->ExternalID != NULL) {
- xmlOutputBufferWrite(buf, 8, " PUBLIC ");
- xmlBufWriteQuotedString(buf->buffer, dtd->ExternalID);
- xmlOutputBufferWrite(buf, 1, " ");
- xmlBufWriteQuotedString(buf->buffer, dtd->SystemID);
- } else if (dtd->SystemID != NULL) {
- xmlOutputBufferWrite(buf, 8, " SYSTEM ");
- xmlBufWriteQuotedString(buf->buffer, dtd->SystemID);
- }
- if ((dtd->entities == NULL) && (dtd->elements == NULL) &&
- (dtd->attributes == NULL) && (dtd->notations == NULL) &&
- (dtd->pentities == NULL)) {
- xmlOutputBufferWrite(buf, 1, ">");
- return;
- }
- xmlOutputBufferWrite(buf, 3, " [\n");
- /*
- * Dump the notations first they are not in the DTD children list
- * Do this only on a standalone DTD or on the internal subset though.
- */
- if ((dtd->notations != NULL) && ((dtd->doc == NULL) ||
- (dtd->doc->intSubset == dtd))) {
- xmlBufDumpNotationTable(buf->buffer,
- (xmlNotationTablePtr) dtd->notations);
- }
- format = ctxt->format;
- level = ctxt->level;
- doc = ctxt->doc;
- ctxt->format = 0;
- ctxt->level = -1;
- ctxt->doc = dtd->doc;
- xmlNodeListDumpOutput(ctxt, dtd->children);
- ctxt->format = format;
- ctxt->level = level;
- ctxt->doc = doc;
- xmlOutputBufferWrite(buf, 2, "]>");
-}
-
-/**
- * xmlAttrDumpOutput:
- * @buf: the XML buffer output
- * @cur: the attribute pointer
- *
- * Dump an XML attribute
- */
-static void
-xmlAttrDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) {
- xmlOutputBufferPtr buf;
-
- if (cur == NULL) return;
- buf = ctxt->buf;
- if (buf == NULL) return;
- if (ctxt->format == 2)
- xmlOutputBufferWriteWSNonSig(ctxt, 2);
- else
- xmlOutputBufferWrite(buf, 1, " ");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWrite(buf, 1, ":");
- }
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWrite(buf, 2, "=\"");
- xmlAttrSerializeContent(buf, cur);
- xmlOutputBufferWrite(buf, 1, "\"");
-}
-
-/**
- * xmlAttrListDumpOutput:
- * @buf: the XML buffer output
- * @doc: the document
- * @cur: the first attribute pointer
- * @encoding: an optional encoding string
- *
- * Dump a list of XML attributes
- */
-static void
-xmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) {
- if (cur == NULL) return;
- while (cur != NULL) {
- xmlAttrDumpOutput(ctxt, cur);
- cur = cur->next;
- }
-}
-
-
-
-/**
- * xmlNodeListDumpOutput:
- * @cur: the first node
- *
- * Dump an XML node list, recursive behaviour, children are printed too.
- */
-static void
-xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
- xmlOutputBufferPtr buf;
-
- if (cur == NULL) return;
- buf = ctxt->buf;
- while (cur != NULL) {
- if ((ctxt->format == 1) && (xmlIndentTreeOutput) &&
- ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_COMMENT_NODE) ||
- (cur->type == XML_PI_NODE)))
- xmlOutputBufferWrite(buf, ctxt->indent_size *
- (ctxt->level > ctxt->indent_nr ?
- ctxt->indent_nr : ctxt->level),
- ctxt->indent);
- xmlNodeDumpOutputInternal(ctxt, cur);
- if (ctxt->format == 1) {
- xmlOutputBufferWrite(buf, 1, "\n");
- }
- cur = cur->next;
- }
-}
-
-#ifdef LIBXML_HTML_ENABLED
-/**
- * xmlNodeDumpOutputInternal:
- * @cur: the current node
- *
- * Dump an HTML node, recursive behaviour, children are printed too.
- */
-static int
-htmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
- const xmlChar *oldenc = NULL;
- const xmlChar *oldctxtenc = ctxt->encoding;
- const xmlChar *encoding = ctxt->encoding;
- xmlOutputBufferPtr buf = ctxt->buf;
- int switched_encoding = 0;
- xmlDocPtr doc;
-
- xmlInitParser();
-
- doc = cur->doc;
- if (doc != NULL) {
- oldenc = doc->encoding;
- if (ctxt->encoding != NULL) {
- doc->encoding = BAD_CAST ctxt->encoding;
- } else if (doc->encoding != NULL) {
- encoding = doc->encoding;
- }
- }
-
- if ((encoding != NULL) && (doc != NULL))
- htmlSetMetaEncoding(doc, (const xmlChar *) encoding);
- if ((encoding == NULL) && (doc != NULL))
- encoding = htmlGetMetaEncoding(doc);
- if (encoding == NULL)
- encoding = BAD_CAST "HTML";
- if ((encoding != NULL) && (oldctxtenc == NULL) &&
- (buf->encoder == NULL) && (buf->conv == NULL)) {
- if (xmlSaveSwitchEncoding(ctxt, (const char*) encoding) < 0) {
- doc->encoding = oldenc;
- return(-1);
- }
- switched_encoding = 1;
- }
- if (ctxt->options & XML_SAVE_FORMAT)
- htmlNodeDumpFormatOutput(buf, doc, cur,
- (const char *)encoding, 1);
- else
- htmlNodeDumpFormatOutput(buf, doc, cur,
- (const char *)encoding, 0);
- /*
- * Restore the state of the saving context at the end of the document
- */
- if ((switched_encoding) && (oldctxtenc == NULL)) {
- xmlSaveClearEncoding(ctxt);
- }
- if (doc != NULL)
- doc->encoding = oldenc;
- return(0);
-}
-#endif
-
-/**
- * xmlNodeDumpOutputInternal:
- * @cur: the current node
- *
- * Dump an XML node, recursive behaviour, children are printed too.
- */
-static void
-xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
- int format;
- xmlNodePtr tmp;
- xmlChar *start, *end;
- xmlOutputBufferPtr buf;
-
- if (cur == NULL) return;
- buf = ctxt->buf;
- if (cur->type == XML_XINCLUDE_START)
- return;
- if (cur->type == XML_XINCLUDE_END)
- return;
- if ((cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- xmlDocContentDumpOutput(ctxt, (xmlDocPtr) cur);
- return;
- }
-#ifdef LIBXML_HTML_ENABLED
- if (ctxt->options & XML_SAVE_XHTML) {
- xhtmlNodeDumpOutput(ctxt, cur);
- return;
- }
- if (((cur->type != XML_NAMESPACE_DECL) && (cur->doc != NULL) &&
- (cur->doc->type == XML_HTML_DOCUMENT_NODE) &&
- ((ctxt->options & XML_SAVE_AS_XML) == 0)) ||
- (ctxt->options & XML_SAVE_AS_HTML)) {
- htmlNodeDumpOutputInternal(ctxt, cur);
- return;
- }
-#endif
- if (cur->type == XML_DTD_NODE) {
- xmlDtdDumpOutput(ctxt, (xmlDtdPtr) cur);
- return;
- }
- if (cur->type == XML_DOCUMENT_FRAG_NODE) {
- xmlNodeListDumpOutput(ctxt, cur->children);
- return;
- }
- if (cur->type == XML_ELEMENT_DECL) {
- xmlBufDumpElementDecl(buf->buffer, (xmlElementPtr) cur);
- return;
- }
- if (cur->type == XML_ATTRIBUTE_DECL) {
- xmlBufDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur);
- return;
- }
- if (cur->type == XML_ENTITY_DECL) {
- xmlBufDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur);
- return;
- }
- if (cur->type == XML_TEXT_NODE) {
- if (cur->content != NULL) {
- if (cur->name != xmlStringTextNoenc) {
- xmlOutputBufferWriteEscape(buf, cur->content, ctxt->escape);
- } else {
- /*
- * Disable escaping, needed for XSLT
- */
- xmlOutputBufferWriteString(buf, (const char *) cur->content);
- }
- }
-
- return;
- }
- if (cur->type == XML_PI_NODE) {
- if (cur->content != NULL) {
- xmlOutputBufferWrite(buf, 2, "<?");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (cur->content != NULL) {
- if (ctxt->format == 2)
- xmlOutputBufferWriteWSNonSig(ctxt, 0);
- else
- xmlOutputBufferWrite(buf, 1, " ");
- xmlOutputBufferWriteString(buf, (const char *)cur->content);
- }
- xmlOutputBufferWrite(buf, 2, "?>");
- } else {
- xmlOutputBufferWrite(buf, 2, "<?");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (ctxt->format == 2)
- xmlOutputBufferWriteWSNonSig(ctxt, 0);
- xmlOutputBufferWrite(buf, 2, "?>");
- }
- return;
- }
- if (cur->type == XML_COMMENT_NODE) {
- if (cur->content != NULL) {
- xmlOutputBufferWrite(buf, 4, "<!--");
- xmlOutputBufferWriteString(buf, (const char *)cur->content);
- xmlOutputBufferWrite(buf, 3, "-->");
- }
- return;
- }
- if (cur->type == XML_ENTITY_REF_NODE) {
- xmlOutputBufferWrite(buf, 1, "&");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWrite(buf, 1, ";");
- return;
- }
- if (cur->type == XML_CDATA_SECTION_NODE) {
- if (cur->content == NULL || *cur->content == '\0') {
- xmlOutputBufferWrite(buf, 12, "<![CDATA[]]>");
- } else {
- start = end = cur->content;
- while (*end != '\0') {
- if ((*end == ']') && (*(end + 1) == ']') &&
- (*(end + 2) == '>')) {
- end = end + 2;
- xmlOutputBufferWrite(buf, 9, "<![CDATA[");
- xmlOutputBufferWrite(buf, end - start, (const char *)start);
- xmlOutputBufferWrite(buf, 3, "]]>");
- start = end;
- }
- end++;
- }
- if (start != end) {
- xmlOutputBufferWrite(buf, 9, "<![CDATA[");
- xmlOutputBufferWriteString(buf, (const char *)start);
- xmlOutputBufferWrite(buf, 3, "]]>");
- }
- }
- return;
- }
- if (cur->type == XML_ATTRIBUTE_NODE) {
- xmlAttrDumpOutput(ctxt, (xmlAttrPtr) cur);
- return;
- }
- if (cur->type == XML_NAMESPACE_DECL) {
- xmlNsDumpOutputCtxt(ctxt, (xmlNsPtr) cur);
- return;
- }
-
- format = ctxt->format;
- if (format == 1) {
- tmp = cur->children;
- while (tmp != NULL) {
- if ((tmp->type == XML_TEXT_NODE) ||
- (tmp->type == XML_CDATA_SECTION_NODE) ||
- (tmp->type == XML_ENTITY_REF_NODE)) {
- ctxt->format = 0;
- break;
- }
- tmp = tmp->next;
- }
- }
- xmlOutputBufferWrite(buf, 1, "<");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWrite(buf, 1, ":");
- }
-
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (cur->nsDef)
- xmlNsListDumpOutputCtxt(ctxt, cur->nsDef);
- if (cur->properties != NULL)
- xmlAttrListDumpOutput(ctxt, cur->properties);
-
- if (((cur->type == XML_ELEMENT_NODE) || (cur->content == NULL)) &&
- (cur->children == NULL) && ((ctxt->options & XML_SAVE_NO_EMPTY) == 0)) {
- if (ctxt->format == 2)
- xmlOutputBufferWriteWSNonSig(ctxt, 0);
- xmlOutputBufferWrite(buf, 2, "/>");
- ctxt->format = format;
- return;
- }
- if (ctxt->format == 2)
- xmlOutputBufferWriteWSNonSig(ctxt, 1);
- xmlOutputBufferWrite(buf, 1, ">");
- if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
- xmlOutputBufferWriteEscape(buf, cur->content, ctxt->escape);
- }
- if (cur->children != NULL) {
- if (ctxt->format == 1) xmlOutputBufferWrite(buf, 1, "\n");
- if (ctxt->level >= 0) ctxt->level++;
- xmlNodeListDumpOutput(ctxt, cur->children);
- if (ctxt->level > 0) ctxt->level--;
- if ((xmlIndentTreeOutput) && (ctxt->format == 1))
- xmlOutputBufferWrite(buf, ctxt->indent_size *
- (ctxt->level > ctxt->indent_nr ?
- ctxt->indent_nr : ctxt->level),
- ctxt->indent);
- }
- xmlOutputBufferWrite(buf, 2, "</");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWrite(buf, 1, ":");
- }
-
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (ctxt->format == 2)
- xmlOutputBufferWriteWSNonSig(ctxt, 0);
- xmlOutputBufferWrite(buf, 1, ">");
- ctxt->format = format;
-}
-
-/**
- * xmlDocContentDumpOutput:
- * @cur: the document
- *
- * Dump an XML document.
- */
-static int
-xmlDocContentDumpOutput(xmlSaveCtxtPtr ctxt, xmlDocPtr cur) {
-#ifdef LIBXML_HTML_ENABLED
- xmlDtdPtr dtd;
- int is_xhtml = 0;
-#endif
- const xmlChar *oldenc = cur->encoding;
- const xmlChar *oldctxtenc = ctxt->encoding;
- const xmlChar *encoding = ctxt->encoding;
- xmlCharEncodingOutputFunc oldescape = ctxt->escape;
- xmlCharEncodingOutputFunc oldescapeAttr = ctxt->escapeAttr;
- xmlOutputBufferPtr buf = ctxt->buf;
- xmlCharEncoding enc;
- int switched_encoding = 0;
-
- xmlInitParser();
-
- if ((cur->type != XML_HTML_DOCUMENT_NODE) &&
- (cur->type != XML_DOCUMENT_NODE))
- return(-1);
-
- if (ctxt->encoding != NULL) {
- cur->encoding = BAD_CAST ctxt->encoding;
- } else if (cur->encoding != NULL) {
- encoding = cur->encoding;
- } else if (cur->charset != XML_CHAR_ENCODING_UTF8) {
- encoding = (const xmlChar *)
- xmlGetCharEncodingName((xmlCharEncoding) cur->charset);
- }
-
- if (((cur->type == XML_HTML_DOCUMENT_NODE) &&
- ((ctxt->options & XML_SAVE_AS_XML) == 0) &&
- ((ctxt->options & XML_SAVE_XHTML) == 0)) ||
- (ctxt->options & XML_SAVE_AS_HTML)) {
-#ifdef LIBXML_HTML_ENABLED
- if (encoding != NULL)
- htmlSetMetaEncoding(cur, (const xmlChar *) encoding);
- if (encoding == NULL)
- encoding = htmlGetMetaEncoding(cur);
- if (encoding == NULL)
- encoding = BAD_CAST "HTML";
- if ((encoding != NULL) && (oldctxtenc == NULL) &&
- (buf->encoder == NULL) && (buf->conv == NULL)) {
- if (xmlSaveSwitchEncoding(ctxt, (const char*) encoding) < 0) {
- cur->encoding = oldenc;
- return(-1);
- }
- }
- if (ctxt->options & XML_SAVE_FORMAT)
- htmlDocContentDumpFormatOutput(buf, cur,
- (const char *)encoding, 1);
- else
- htmlDocContentDumpFormatOutput(buf, cur,
- (const char *)encoding, 0);
- if (ctxt->encoding != NULL)
- cur->encoding = oldenc;
- return(0);
-#else
- return(-1);
-#endif
- } else if ((cur->type == XML_DOCUMENT_NODE) ||
- (ctxt->options & XML_SAVE_AS_XML) ||
- (ctxt->options & XML_SAVE_XHTML)) {
- enc = xmlParseCharEncoding((const char*) encoding);
- if ((encoding != NULL) && (oldctxtenc == NULL) &&
- (buf->encoder == NULL) && (buf->conv == NULL) &&
- ((ctxt->options & XML_SAVE_NO_DECL) == 0)) {
- if ((enc != XML_CHAR_ENCODING_UTF8) &&
- (enc != XML_CHAR_ENCODING_NONE) &&
- (enc != XML_CHAR_ENCODING_ASCII)) {
- /*
- * we need to switch to this encoding but just for this
- * document since we output the XMLDecl the conversion
- * must be done to not generate not well formed documents.
- */
- if (xmlSaveSwitchEncoding(ctxt, (const char*) encoding) < 0) {
- cur->encoding = oldenc;
- return(-1);
- }
- switched_encoding = 1;
- }
- if (ctxt->escape == xmlEscapeEntities)
- ctxt->escape = NULL;
- if (ctxt->escapeAttr == xmlEscapeEntities)
- ctxt->escapeAttr = NULL;
- }
-
-
- /*
- * Save the XML declaration
- */
- if ((ctxt->options & XML_SAVE_NO_DECL) == 0) {
- xmlOutputBufferWrite(buf, 14, "<?xml version=");
- if (cur->version != NULL)
- xmlBufWriteQuotedString(buf->buffer, cur->version);
- else
- xmlOutputBufferWrite(buf, 5, "\"1.0\"");
- if (encoding != NULL) {
- xmlOutputBufferWrite(buf, 10, " encoding=");
- xmlBufWriteQuotedString(buf->buffer, (xmlChar *) encoding);
- }
- switch (cur->standalone) {
- case 0:
- xmlOutputBufferWrite(buf, 16, " standalone=\"no\"");
- break;
- case 1:
- xmlOutputBufferWrite(buf, 17, " standalone=\"yes\"");
- break;
- }
- xmlOutputBufferWrite(buf, 3, "?>\n");
- }
-
-#ifdef LIBXML_HTML_ENABLED
- if (ctxt->options & XML_SAVE_XHTML)
- is_xhtml = 1;
- if ((ctxt->options & XML_SAVE_NO_XHTML) == 0) {
- dtd = xmlGetIntSubset(cur);
- if (dtd != NULL) {
- is_xhtml = xmlIsXHTML(dtd->SystemID, dtd->ExternalID);
- if (is_xhtml < 0) is_xhtml = 0;
- }
- }
-#endif
- if (cur->children != NULL) {
- xmlNodePtr child = cur->children;
-
- while (child != NULL) {
- ctxt->level = 0;
-#ifdef LIBXML_HTML_ENABLED
- if (is_xhtml)
- xhtmlNodeDumpOutput(ctxt, child);
- else
-#endif
- xmlNodeDumpOutputInternal(ctxt, child);
- xmlOutputBufferWrite(buf, 1, "\n");
- child = child->next;
- }
- }
- }
-
- /*
- * Restore the state of the saving context at the end of the document
- */
- if ((switched_encoding) && (oldctxtenc == NULL)) {
- xmlSaveClearEncoding(ctxt);
- ctxt->escape = oldescape;
- ctxt->escapeAttr = oldescapeAttr;
- }
- cur->encoding = oldenc;
- return(0);
-}
-
-#ifdef LIBXML_HTML_ENABLED
-/************************************************************************
- * *
- * Functions specific to XHTML serialization *
- * *
- ************************************************************************/
-
-/**
- * xhtmlIsEmpty:
- * @node: the node
- *
- * Check if a node is an empty xhtml node
- *
- * Returns 1 if the node is an empty node, 0 if not and -1 in case of error
- */
-static int
-xhtmlIsEmpty(xmlNodePtr node) {
- if (node == NULL)
- return(-1);
- if (node->type != XML_ELEMENT_NODE)
- return(0);
- if ((node->ns != NULL) && (!xmlStrEqual(node->ns->href, XHTML_NS_NAME)))
- return(0);
- if (node->children != NULL)
- return(0);
- switch (node->name[0]) {
- case 'a':
- if (xmlStrEqual(node->name, BAD_CAST "area"))
- return(1);
- return(0);
- case 'b':
- if (xmlStrEqual(node->name, BAD_CAST "br"))
- return(1);
- if (xmlStrEqual(node->name, BAD_CAST "base"))
- return(1);
- if (xmlStrEqual(node->name, BAD_CAST "basefont"))
- return(1);
- return(0);
- case 'c':
- if (xmlStrEqual(node->name, BAD_CAST "col"))
- return(1);
- return(0);
- case 'f':
- if (xmlStrEqual(node->name, BAD_CAST "frame"))
- return(1);
- return(0);
- case 'h':
- if (xmlStrEqual(node->name, BAD_CAST "hr"))
- return(1);
- return(0);
- case 'i':
- if (xmlStrEqual(node->name, BAD_CAST "img"))
- return(1);
- if (xmlStrEqual(node->name, BAD_CAST "input"))
- return(1);
- if (xmlStrEqual(node->name, BAD_CAST "isindex"))
- return(1);
- return(0);
- case 'l':
- if (xmlStrEqual(node->name, BAD_CAST "link"))
- return(1);
- return(0);
- case 'm':
- if (xmlStrEqual(node->name, BAD_CAST "meta"))
- return(1);
- return(0);
- case 'p':
- if (xmlStrEqual(node->name, BAD_CAST "param"))
- return(1);
- return(0);
- }
- return(0);
-}
-
-/**
- * xhtmlAttrListDumpOutput:
- * @cur: the first attribute pointer
- *
- * Dump a list of XML attributes
- */
-static void
-xhtmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) {
- xmlAttrPtr xml_lang = NULL;
- xmlAttrPtr lang = NULL;
- xmlAttrPtr name = NULL;
- xmlAttrPtr id = NULL;
- xmlNodePtr parent;
- xmlOutputBufferPtr buf;
-
- if (cur == NULL) return;
- buf = ctxt->buf;
- parent = cur->parent;
- while (cur != NULL) {
- if ((cur->ns == NULL) && (xmlStrEqual(cur->name, BAD_CAST "id")))
- id = cur;
- else
- if ((cur->ns == NULL) && (xmlStrEqual(cur->name, BAD_CAST "name")))
- name = cur;
- else
- if ((cur->ns == NULL) && (xmlStrEqual(cur->name, BAD_CAST "lang")))
- lang = cur;
- else
- if ((cur->ns != NULL) && (xmlStrEqual(cur->name, BAD_CAST "lang")) &&
- (xmlStrEqual(cur->ns->prefix, BAD_CAST "xml")))
- xml_lang = cur;
- else if ((cur->ns == NULL) &&
- ((cur->children == NULL) ||
- (cur->children->content == NULL) ||
- (cur->children->content[0] == 0)) &&
- (htmlIsBooleanAttr(cur->name))) {
- if (cur->children != NULL)
- xmlFreeNode(cur->children);
- cur->children = xmlNewText(cur->name);
- if (cur->children != NULL)
- cur->children->parent = (xmlNodePtr) cur;
- }
- xmlAttrDumpOutput(ctxt, cur);
- cur = cur->next;
- }
- /*
- * C.8
- */
- if ((name != NULL) && (id == NULL)) {
- if ((parent != NULL) && (parent->name != NULL) &&
- ((xmlStrEqual(parent->name, BAD_CAST "a")) ||
- (xmlStrEqual(parent->name, BAD_CAST "p")) ||
- (xmlStrEqual(parent->name, BAD_CAST "div")) ||
- (xmlStrEqual(parent->name, BAD_CAST "img")) ||
- (xmlStrEqual(parent->name, BAD_CAST "map")) ||
- (xmlStrEqual(parent->name, BAD_CAST "applet")) ||
- (xmlStrEqual(parent->name, BAD_CAST "form")) ||
- (xmlStrEqual(parent->name, BAD_CAST "frame")) ||
- (xmlStrEqual(parent->name, BAD_CAST "iframe")))) {
- xmlOutputBufferWrite(buf, 5, " id=\"");
- xmlAttrSerializeContent(buf, name);
- xmlOutputBufferWrite(buf, 1, "\"");
- }
- }
- /*
- * C.7.
- */
- if ((lang != NULL) && (xml_lang == NULL)) {
- xmlOutputBufferWrite(buf, 11, " xml:lang=\"");
- xmlAttrSerializeContent(buf, lang);
- xmlOutputBufferWrite(buf, 1, "\"");
- } else
- if ((xml_lang != NULL) && (lang == NULL)) {
- xmlOutputBufferWrite(buf, 7, " lang=\"");
- xmlAttrSerializeContent(buf, xml_lang);
- xmlOutputBufferWrite(buf, 1, "\"");
- }
-}
-
-/**
- * xhtmlNodeListDumpOutput:
- * @buf: the XML buffer output
- * @doc: the XHTML document
- * @cur: the first node
- * @level: the imbrication level for indenting
- * @format: is formatting allowed
- * @encoding: an optional encoding string
- *
- * Dump an XML node list, recursive behaviour, children are printed too.
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- */
-static void
-xhtmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
- xmlOutputBufferPtr buf;
-
- if (cur == NULL) return;
- buf = ctxt->buf;
- while (cur != NULL) {
- if ((ctxt->format == 1) && (xmlIndentTreeOutput) &&
- (cur->type == XML_ELEMENT_NODE))
- xmlOutputBufferWrite(buf, ctxt->indent_size *
- (ctxt->level > ctxt->indent_nr ?
- ctxt->indent_nr : ctxt->level),
- ctxt->indent);
- xhtmlNodeDumpOutput(ctxt, cur);
- if (ctxt->format == 1) {
- xmlOutputBufferWrite(buf, 1, "\n");
- }
- cur = cur->next;
- }
-}
-
-/**
- * xhtmlNodeDumpOutput:
- * @buf: the XML buffer output
- * @doc: the XHTML document
- * @cur: the current node
- * @level: the imbrication level for indenting
- * @format: is formatting allowed
- * @encoding: an optional encoding string
- *
- * Dump an XHTML node, recursive behaviour, children are printed too.
- */
-static void
-xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) {
- int format, addmeta = 0;
- xmlNodePtr tmp;
- xmlChar *start, *end;
- xmlOutputBufferPtr buf;
-
- if (cur == NULL) return;
- if ((cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- xmlDocContentDumpOutput(ctxt, (xmlDocPtr) cur);
- return;
- }
- if (cur->type == XML_XINCLUDE_START)
- return;
- if (cur->type == XML_XINCLUDE_END)
- return;
- if (cur->type == XML_NAMESPACE_DECL) {
- xmlNsDumpOutputCtxt(ctxt, (xmlNsPtr) cur);
- return;
- }
- if (cur->type == XML_DTD_NODE) {
- xmlDtdDumpOutput(ctxt, (xmlDtdPtr) cur);
- return;
- }
- if (cur->type == XML_DOCUMENT_FRAG_NODE) {
- xhtmlNodeListDumpOutput(ctxt, cur->children);
- return;
- }
- buf = ctxt->buf;
- if (cur->type == XML_ELEMENT_DECL) {
- xmlBufDumpElementDecl(buf->buffer, (xmlElementPtr) cur);
- return;
- }
- if (cur->type == XML_ATTRIBUTE_DECL) {
- xmlBufDumpAttributeDecl(buf->buffer, (xmlAttributePtr) cur);
- return;
- }
- if (cur->type == XML_ENTITY_DECL) {
- xmlBufDumpEntityDecl(buf->buffer, (xmlEntityPtr) cur);
- return;
- }
- if (cur->type == XML_TEXT_NODE) {
- if (cur->content != NULL) {
- if ((cur->name == xmlStringText) ||
- (cur->name != xmlStringTextNoenc)) {
- xmlOutputBufferWriteEscape(buf, cur->content, ctxt->escape);
- } else {
- /*
- * Disable escaping, needed for XSLT
- */
- xmlOutputBufferWriteString(buf, (const char *) cur->content);
- }
- }
-
- return;
- }
- if (cur->type == XML_PI_NODE) {
- if (cur->content != NULL) {
- xmlOutputBufferWrite(buf, 2, "<?");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (cur->content != NULL) {
- xmlOutputBufferWrite(buf, 1, " ");
- xmlOutputBufferWriteString(buf, (const char *)cur->content);
- }
- xmlOutputBufferWrite(buf, 2, "?>");
- } else {
- xmlOutputBufferWrite(buf, 2, "<?");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWrite(buf, 2, "?>");
- }
- return;
- }
- if (cur->type == XML_COMMENT_NODE) {
- if (cur->content != NULL) {
- xmlOutputBufferWrite(buf, 4, "<!--");
- xmlOutputBufferWriteString(buf, (const char *)cur->content);
- xmlOutputBufferWrite(buf, 3, "-->");
- }
- return;
- }
- if (cur->type == XML_ENTITY_REF_NODE) {
- xmlOutputBufferWrite(buf, 1, "&");
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWrite(buf, 1, ";");
- return;
- }
- if (cur->type == XML_CDATA_SECTION_NODE) {
- if (cur->content == NULL || *cur->content == '\0') {
- xmlOutputBufferWrite(buf, 12, "<![CDATA[]]>");
- } else {
- start = end = cur->content;
- while (*end != '\0') {
- if (*end == ']' && *(end + 1) == ']' && *(end + 2) == '>') {
- end = end + 2;
- xmlOutputBufferWrite(buf, 9, "<![CDATA[");
- xmlOutputBufferWrite(buf, end - start, (const char *)start);
- xmlOutputBufferWrite(buf, 3, "]]>");
- start = end;
- }
- end++;
- }
- if (start != end) {
- xmlOutputBufferWrite(buf, 9, "<![CDATA[");
- xmlOutputBufferWriteString(buf, (const char *)start);
- xmlOutputBufferWrite(buf, 3, "]]>");
- }
- }
- return;
- }
- if (cur->type == XML_ATTRIBUTE_NODE) {
- xmlAttrDumpOutput(ctxt, (xmlAttrPtr) cur);
- return;
- }
-
- format = ctxt->format;
- if (format == 1) {
- tmp = cur->children;
- while (tmp != NULL) {
- if ((tmp->type == XML_TEXT_NODE) ||
- (tmp->type == XML_ENTITY_REF_NODE)) {
- format = 0;
- break;
- }
- tmp = tmp->next;
- }
- }
- xmlOutputBufferWrite(buf, 1, "<");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWrite(buf, 1, ":");
- }
-
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- if (cur->nsDef)
- xmlNsListDumpOutputCtxt(ctxt, cur->nsDef);
- if ((xmlStrEqual(cur->name, BAD_CAST "html") &&
- (cur->ns == NULL) && (cur->nsDef == NULL))) {
- /*
- * 3.1.1. Strictly Conforming Documents A.3.1.1 3/
- */
- xmlOutputBufferWriteString(buf,
- " xmlns=\"http://www.w3.org/1999/xhtml\"");
- }
- if (cur->properties != NULL)
- xhtmlAttrListDumpOutput(ctxt, cur->properties);
-
- if ((cur->type == XML_ELEMENT_NODE) &&
- (cur->parent != NULL) &&
- (cur->parent->parent == (xmlNodePtr) cur->doc) &&
- xmlStrEqual(cur->name, BAD_CAST"head") &&
- xmlStrEqual(cur->parent->name, BAD_CAST"html")) {
-
- tmp = cur->children;
- while (tmp != NULL) {
- if (xmlStrEqual(tmp->name, BAD_CAST"meta")) {
- xmlChar *httpequiv;
-
- httpequiv = xmlGetProp(tmp, BAD_CAST"http-equiv");
- if (httpequiv != NULL) {
- if (xmlStrcasecmp(httpequiv, BAD_CAST"Content-Type") == 0) {
- xmlFree(httpequiv);
- break;
- }
- xmlFree(httpequiv);
- }
- }
- tmp = tmp->next;
- }
- if (tmp == NULL)
- addmeta = 1;
- }
-
- if ((cur->type == XML_ELEMENT_NODE) && (cur->children == NULL)) {
- if (((cur->ns == NULL) || (cur->ns->prefix == NULL)) &&
- ((xhtmlIsEmpty(cur) == 1) && (addmeta == 0))) {
- /*
- * C.2. Empty Elements
- */
- xmlOutputBufferWrite(buf, 3, " />");
- } else {
- if (addmeta == 1) {
- xmlOutputBufferWrite(buf, 1, ">");
- if (ctxt->format == 1) {
- xmlOutputBufferWrite(buf, 1, "\n");
- if (xmlIndentTreeOutput)
- xmlOutputBufferWrite(buf, ctxt->indent_size *
- (ctxt->level + 1 > ctxt->indent_nr ?
- ctxt->indent_nr : ctxt->level + 1), ctxt->indent);
- }
- xmlOutputBufferWriteString(buf,
- "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=");
- if (ctxt->encoding) {
- xmlOutputBufferWriteString(buf, (const char *)ctxt->encoding);
- } else {
- xmlOutputBufferWrite(buf, 5, "UTF-8");
- }
- xmlOutputBufferWrite(buf, 4, "\" />");
- if (ctxt->format == 1)
- xmlOutputBufferWrite(buf, 1, "\n");
- } else {
- xmlOutputBufferWrite(buf, 1, ">");
- }
- /*
- * C.3. Element Minimization and Empty Element Content
- */
- xmlOutputBufferWrite(buf, 2, "</");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWrite(buf, 1, ":");
- }
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWrite(buf, 1, ">");
- }
- return;
- }
- xmlOutputBufferWrite(buf, 1, ">");
- if (addmeta == 1) {
- if (ctxt->format == 1) {
- xmlOutputBufferWrite(buf, 1, "\n");
- if (xmlIndentTreeOutput)
- xmlOutputBufferWrite(buf, ctxt->indent_size *
- (ctxt->level + 1 > ctxt->indent_nr ?
- ctxt->indent_nr : ctxt->level + 1), ctxt->indent);
- }
- xmlOutputBufferWriteString(buf,
- "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=");
- if (ctxt->encoding) {
- xmlOutputBufferWriteString(buf, (const char *)ctxt->encoding);
- } else {
- xmlOutputBufferWrite(buf, 5, "UTF-8");
- }
- xmlOutputBufferWrite(buf, 4, "\" />");
- }
- if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
- xmlOutputBufferWriteEscape(buf, cur->content, ctxt->escape);
- }
-
-#if 0
- /*
- * This was removed due to problems with HTML processors.
- * See bug #345147.
- */
- /*
- * 4.8. Script and Style elements
- */
- if ((cur->type == XML_ELEMENT_NODE) &&
- ((xmlStrEqual(cur->name, BAD_CAST "script")) ||
- (xmlStrEqual(cur->name, BAD_CAST "style"))) &&
- ((cur->ns == NULL) ||
- (xmlStrEqual(cur->ns->href, XHTML_NS_NAME)))) {
- xmlNodePtr child = cur->children;
-
- while (child != NULL) {
- if (child->type == XML_TEXT_NODE) {
- if ((xmlStrchr(child->content, '<') == NULL) &&
- (xmlStrchr(child->content, '&') == NULL) &&
- (xmlStrstr(child->content, BAD_CAST "]]>") == NULL)) {
- /* Nothing to escape, so just output as is... */
- /* FIXME: Should we do something about "--" also? */
- int level = ctxt->level;
- int indent = ctxt->format;
-
- ctxt->level = 0;
- ctxt->format = 0;
- xmlOutputBufferWriteString(buf, (const char *) child->content);
- /* (We cannot use xhtmlNodeDumpOutput() here because
- * we wish to leave '>' unescaped!) */
- ctxt->level = level;
- ctxt->format = indent;
- } else {
- /* We must use a CDATA section. Unfortunately,
- * this will break CSS and JavaScript when read by
- * a browser in HTML4-compliant mode. :-( */
- start = end = child->content;
- while (*end != '\0') {
- if (*end == ']' &&
- *(end + 1) == ']' &&
- *(end + 2) == '>') {
- end = end + 2;
- xmlOutputBufferWrite(buf, 9, "<![CDATA[");
- xmlOutputBufferWrite(buf, end - start,
- (const char *)start);
- xmlOutputBufferWrite(buf, 3, "]]>");
- start = end;
- }
- end++;
- }
- if (start != end) {
- xmlOutputBufferWrite(buf, 9, "<![CDATA[");
- xmlOutputBufferWrite(buf, end - start,
- (const char *)start);
- xmlOutputBufferWrite(buf, 3, "]]>");
- }
- }
- } else {
- int level = ctxt->level;
- int indent = ctxt->format;
-
- ctxt->level = 0;
- ctxt->format = 0;
- xhtmlNodeDumpOutput(ctxt, child);
- ctxt->level = level;
- ctxt->format = indent;
- }
- child = child->next;
- }
- }
-#endif
-
- if (cur->children != NULL) {
- int indent = ctxt->format;
-
- if (format == 1) xmlOutputBufferWrite(buf, 1, "\n");
- if (ctxt->level >= 0) ctxt->level++;
- ctxt->format = format;
- xhtmlNodeListDumpOutput(ctxt, cur->children);
- if (ctxt->level > 0) ctxt->level--;
- ctxt->format = indent;
- if ((xmlIndentTreeOutput) && (format == 1))
- xmlOutputBufferWrite(buf, ctxt->indent_size *
- (ctxt->level > ctxt->indent_nr ?
- ctxt->indent_nr : ctxt->level),
- ctxt->indent);
- }
- xmlOutputBufferWrite(buf, 2, "</");
- if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) {
- xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix);
- xmlOutputBufferWrite(buf, 1, ":");
- }
-
- xmlOutputBufferWriteString(buf, (const char *)cur->name);
- xmlOutputBufferWrite(buf, 1, ">");
-}
-#endif
-
-/************************************************************************
- * *
- * Public entry points *
- * *
- ************************************************************************/
-
-/**
- * xmlSaveToFd:
- * @fd: a file descriptor number
- * @encoding: the encoding name to use or NULL
- * @options: a set of xmlSaveOptions
- *
- * Create a document saving context serializing to a file descriptor
- * with the encoding and the options given.
- *
- * Returns a new serialization context or NULL in case of error.
- */
-xmlSaveCtxtPtr
-xmlSaveToFd(int fd, const char *encoding, int options)
-{
- xmlSaveCtxtPtr ret;
-
- ret = xmlNewSaveCtxt(encoding, options);
- if (ret == NULL) return(NULL);
- ret->buf = xmlOutputBufferCreateFd(fd, ret->handler);
- if (ret->buf == NULL) {
- xmlFreeSaveCtxt(ret);
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlSaveToFilename:
- * @filename: a file name or an URL
- * @encoding: the encoding name to use or NULL
- * @options: a set of xmlSaveOptions
- *
- * Create a document saving context serializing to a filename or possibly
- * to an URL (but this is less reliable) with the encoding and the options
- * given.
- *
- * Returns a new serialization context or NULL in case of error.
- */
-xmlSaveCtxtPtr
-xmlSaveToFilename(const char *filename, const char *encoding, int options)
-{
- xmlSaveCtxtPtr ret;
- int compression = 0; /* TODO handle compression option */
-
- ret = xmlNewSaveCtxt(encoding, options);
- if (ret == NULL) return(NULL);
- ret->buf = xmlOutputBufferCreateFilename(filename, ret->handler,
- compression);
- if (ret->buf == NULL) {
- xmlFreeSaveCtxt(ret);
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlSaveToBuffer:
- * @buffer: a buffer
- * @encoding: the encoding name to use or NULL
- * @options: a set of xmlSaveOptions
- *
- * Create a document saving context serializing to a buffer
- * with the encoding and the options given
- *
- * Returns a new serialization context or NULL in case of error.
- */
-
-xmlSaveCtxtPtr
-xmlSaveToBuffer(xmlBufferPtr buffer, const char *encoding, int options)
-{
- xmlSaveCtxtPtr ret;
- xmlOutputBufferPtr out_buff;
- xmlCharEncodingHandlerPtr handler;
-
- ret = xmlNewSaveCtxt(encoding, options);
- if (ret == NULL) return(NULL);
-
- if (encoding != NULL) {
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- } else
- handler = NULL;
- out_buff = xmlOutputBufferCreateBuffer(buffer, handler);
- if (out_buff == NULL) {
- xmlFree(ret);
- if (handler) xmlCharEncCloseFunc(handler);
- return(NULL);
- }
-
- ret->buf = out_buff;
- return(ret);
-}
-
-/**
- * xmlSaveToIO:
- * @iowrite: an I/O write function
- * @ioclose: an I/O close function
- * @ioctx: an I/O handler
- * @encoding: the encoding name to use or NULL
- * @options: a set of xmlSaveOptions
- *
- * Create a document saving context serializing to a file descriptor
- * with the encoding and the options given
- *
- * Returns a new serialization context or NULL in case of error.
- */
-xmlSaveCtxtPtr
-xmlSaveToIO(xmlOutputWriteCallback iowrite,
- xmlOutputCloseCallback ioclose,
- void *ioctx, const char *encoding, int options)
-{
- xmlSaveCtxtPtr ret;
-
- ret = xmlNewSaveCtxt(encoding, options);
- if (ret == NULL) return(NULL);
- ret->buf = xmlOutputBufferCreateIO(iowrite, ioclose, ioctx, ret->handler);
- if (ret->buf == NULL) {
- xmlFreeSaveCtxt(ret);
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlSaveDoc:
- * @ctxt: a document saving context
- * @doc: a document
- *
- * Save a full document to a saving context
- * TODO: The function is not fully implemented yet as it does not return the
- * byte count but 0 instead
- *
- * Returns the number of byte written or -1 in case of error
- */
-long
-xmlSaveDoc(xmlSaveCtxtPtr ctxt, xmlDocPtr doc)
-{
- long ret = 0;
-
- if ((ctxt == NULL) || (doc == NULL)) return(-1);
- if (xmlDocContentDumpOutput(ctxt, doc) < 0)
- return(-1);
- return(ret);
-}
-
-/**
- * xmlSaveTree:
- * @ctxt: a document saving context
- * @node: the top node of the subtree to save
- *
- * Save a subtree starting at the node parameter to a saving context
- * TODO: The function is not fully implemented yet as it does not return the
- * byte count but 0 instead
- *
- * Returns the number of byte written or -1 in case of error
- */
-long
-xmlSaveTree(xmlSaveCtxtPtr ctxt, xmlNodePtr node)
-{
- long ret = 0;
-
- if ((ctxt == NULL) || (node == NULL)) return(-1);
- xmlNodeDumpOutputInternal(ctxt, node);
- return(ret);
-}
-
-/**
- * xmlSaveFlush:
- * @ctxt: a document saving context
- *
- * Flush a document saving context, i.e. make sure that all bytes have
- * been output.
- *
- * Returns the number of byte written or -1 in case of error.
- */
-int
-xmlSaveFlush(xmlSaveCtxtPtr ctxt)
-{
- if (ctxt == NULL) return(-1);
- if (ctxt->buf == NULL) return(-1);
- return(xmlOutputBufferFlush(ctxt->buf));
-}
-
-/**
- * xmlSaveClose:
- * @ctxt: a document saving context
- *
- * Close a document saving context, i.e. make sure that all bytes have
- * been output and free the associated data.
- *
- * Returns the number of byte written or -1 in case of error.
- */
-int
-xmlSaveClose(xmlSaveCtxtPtr ctxt)
-{
- int ret;
-
- if (ctxt == NULL) return(-1);
- ret = xmlSaveFlush(ctxt);
- xmlFreeSaveCtxt(ctxt);
- return(ret);
-}
-
-/**
- * xmlSaveSetEscape:
- * @ctxt: a document saving context
- * @escape: the escaping function
- *
- * Set a custom escaping function to be used for text in element content
- *
- * Returns 0 if successful or -1 in case of error.
- */
-int
-xmlSaveSetEscape(xmlSaveCtxtPtr ctxt, xmlCharEncodingOutputFunc escape)
-{
- if (ctxt == NULL) return(-1);
- ctxt->escape = escape;
- return(0);
-}
-
-/**
- * xmlSaveSetAttrEscape:
- * @ctxt: a document saving context
- * @escape: the escaping function
- *
- * Set a custom escaping function to be used for text in attribute content
- *
- * Returns 0 if successful or -1 in case of error.
- */
-int
-xmlSaveSetAttrEscape(xmlSaveCtxtPtr ctxt, xmlCharEncodingOutputFunc escape)
-{
- if (ctxt == NULL) return(-1);
- ctxt->escapeAttr = escape;
- return(0);
-}
-
-/************************************************************************
- * *
- * Public entry points based on buffers *
- * *
- ************************************************************************/
-
-/**
- * xmlBufAttrSerializeTxtContent:
- * @buf: and xmlBufPtr output
- * @doc: the document
- * @attr: the attribute node
- * @string: the text content
- *
- * Serialize text attribute values to an xmlBufPtr
- */
-void
-xmlBufAttrSerializeTxtContent(xmlBufPtr buf, xmlDocPtr doc,
- xmlAttrPtr attr, const xmlChar * string)
-{
- xmlChar *base, *cur;
-
- if (string == NULL)
- return;
- base = cur = (xmlChar *) string;
- while (*cur != 0) {
- if (*cur == '\n') {
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufAdd(buf, BAD_CAST "&#10;", 5);
- cur++;
- base = cur;
- } else if (*cur == '\r') {
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufAdd(buf, BAD_CAST "&#13;", 5);
- cur++;
- base = cur;
- } else if (*cur == '\t') {
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufAdd(buf, BAD_CAST "&#9;", 4);
- cur++;
- base = cur;
- } else if (*cur == '"') {
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufAdd(buf, BAD_CAST "&quot;", 6);
- cur++;
- base = cur;
- } else if (*cur == '<') {
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufAdd(buf, BAD_CAST "&lt;", 4);
- cur++;
- base = cur;
- } else if (*cur == '>') {
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufAdd(buf, BAD_CAST "&gt;", 4);
- cur++;
- base = cur;
- } else if (*cur == '&') {
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- xmlBufAdd(buf, BAD_CAST "&amp;", 5);
- cur++;
- base = cur;
- } else if ((*cur >= 0x80) && (cur[1] != 0) &&
- ((doc == NULL) || (doc->encoding == NULL))) {
- /*
- * We assume we have UTF-8 content.
- */
- unsigned char tmp[12];
- int val = 0, l = 1;
-
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
- if (*cur < 0xC0) {
- xmlSaveErr(XML_SAVE_NOT_UTF8, (xmlNodePtr) attr, NULL);
- if (doc != NULL)
- doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
- xmlSerializeHexCharRef(tmp, *cur);
- xmlBufAdd(buf, (xmlChar *) tmp, -1);
- cur++;
- base = cur;
- continue;
- } else if (*cur < 0xE0) {
- val = (cur[0]) & 0x1F;
- val <<= 6;
- val |= (cur[1]) & 0x3F;
- l = 2;
- } else if ((*cur < 0xF0) && (cur [2] != 0)) {
- val = (cur[0]) & 0x0F;
- val <<= 6;
- val |= (cur[1]) & 0x3F;
- val <<= 6;
- val |= (cur[2]) & 0x3F;
- l = 3;
- } else if ((*cur < 0xF8) && (cur [2] != 0) && (cur[3] != 0)) {
- val = (cur[0]) & 0x07;
- val <<= 6;
- val |= (cur[1]) & 0x3F;
- val <<= 6;
- val |= (cur[2]) & 0x3F;
- val <<= 6;
- val |= (cur[3]) & 0x3F;
- l = 4;
- }
- if ((l == 1) || (!IS_CHAR(val))) {
- xmlSaveErr(XML_SAVE_CHAR_INVALID, (xmlNodePtr) attr, NULL);
- if (doc != NULL)
- doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1");
-
- xmlSerializeHexCharRef(tmp, *cur);
- xmlBufAdd(buf, (xmlChar *) tmp, -1);
- cur++;
- base = cur;
- continue;
- }
- /*
- * We could do multiple things here. Just save
- * as a char ref
- */
- xmlSerializeHexCharRef(tmp, val);
- xmlBufAdd(buf, (xmlChar *) tmp, -1);
- cur += l;
- base = cur;
- } else {
- cur++;
- }
- }
- if (base != cur)
- xmlBufAdd(buf, base, cur - base);
-}
-
-/**
- * xmlAttrSerializeTxtContent:
- * @buf: the XML buffer output
- * @doc: the document
- * @attr: the attribute node
- * @string: the text content
- *
- * Serialize text attribute values to an xml simple buffer
- */
-void
-xmlAttrSerializeTxtContent(xmlBufferPtr buf, xmlDocPtr doc,
- xmlAttrPtr attr, const xmlChar * string)
-{
- xmlBufPtr buffer;
-
- if ((buf == NULL) || (string == NULL))
- return;
- buffer = xmlBufFromBuffer(buf);
- if (buffer == NULL)
- return;
- xmlBufAttrSerializeTxtContent(buffer, doc, attr, string);
- xmlBufBackToBuffer(buffer);
-}
-
-/**
- * xmlNodeDump:
- * @buf: the XML buffer output
- * @doc: the document
- * @cur: the current node
- * @level: the imbrication level for indenting
- * @format: is formatting allowed
- *
- * Dump an XML node, recursive behaviour,children are printed too.
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- * Since this is using xmlBuffer structures it is limited to 2GB and somehow
- * deprecated, use xmlBufNodeDump() instead.
- *
- * Returns the number of bytes written to the buffer or -1 in case of error
- */
-int
-xmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level,
- int format)
-{
- xmlBufPtr buffer;
- int ret;
-
- if ((buf == NULL) || (cur == NULL))
- return(-1);
- buffer = xmlBufFromBuffer(buf);
- if (buffer == NULL)
- return(-1);
- ret = xmlBufNodeDump(buffer, doc, cur, level, format);
- xmlBufBackToBuffer(buffer);
- if (ret > INT_MAX)
- return(-1);
- return((int) ret);
-}
-
-/**
- * xmlBufNodeDump:
- * @buf: the XML buffer output
- * @doc: the document
- * @cur: the current node
- * @level: the imbrication level for indenting
- * @format: is formatting allowed
- *
- * Dump an XML node, recursive behaviour,children are printed too.
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- *
- * Returns the number of bytes written to the buffer, in case of error 0
- * is returned or @buf stores the error
- */
-
-size_t
-xmlBufNodeDump(xmlBufPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level,
- int format)
-{
- size_t use;
- int ret;
- xmlOutputBufferPtr outbuf;
- int oldalloc;
-
- xmlInitParser();
-
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNodeDump : node == NULL\n");
-#endif
- return (-1);
- }
- if (buf == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlNodeDump : buf == NULL\n");
-#endif
- return (-1);
- }
- outbuf = (xmlOutputBufferPtr) xmlMalloc(sizeof(xmlOutputBuffer));
- if (outbuf == NULL) {
- xmlSaveErrMemory("creating buffer");
- return (-1);
- }
- memset(outbuf, 0, (size_t) sizeof(xmlOutputBuffer));
- outbuf->buffer = buf;
- outbuf->encoder = NULL;
- outbuf->writecallback = NULL;
- outbuf->closecallback = NULL;
- outbuf->context = NULL;
- outbuf->written = 0;
-
- use = xmlBufUse(buf);
- oldalloc = xmlBufGetAllocationScheme(buf);
- xmlBufSetAllocationScheme(buf, XML_BUFFER_ALLOC_DOUBLEIT);
- xmlNodeDumpOutput(outbuf, doc, cur, level, format, NULL);
- xmlBufSetAllocationScheme(buf, oldalloc);
- xmlFree(outbuf);
- ret = xmlBufUse(buf) - use;
- return (ret);
-}
-
-/**
- * xmlElemDump:
- * @f: the FILE * for the output
- * @doc: the document
- * @cur: the current node
- *
- * Dump an XML/HTML node, recursive behaviour, children are printed too.
- */
-void
-xmlElemDump(FILE * f, xmlDocPtr doc, xmlNodePtr cur)
-{
- xmlOutputBufferPtr outbuf;
-
- xmlInitParser();
-
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlElemDump : cur == NULL\n");
-#endif
- return;
- }
-#ifdef DEBUG_TREE
- if (doc == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlElemDump : doc == NULL\n");
- }
-#endif
-
- outbuf = xmlOutputBufferCreateFile(f, NULL);
- if (outbuf == NULL)
- return;
- if ((doc != NULL) && (doc->type == XML_HTML_DOCUMENT_NODE)) {
-#ifdef LIBXML_HTML_ENABLED
- htmlNodeDumpOutput(outbuf, doc, cur, NULL);
-#else
- xmlSaveErr(XML_ERR_INTERNAL_ERROR, cur, "HTML support not compiled in\n");
-#endif /* LIBXML_HTML_ENABLED */
- } else
- xmlNodeDumpOutput(outbuf, doc, cur, 0, 1, NULL);
- xmlOutputBufferClose(outbuf);
-}
-
-/************************************************************************
- * *
- * Saving functions front-ends *
- * *
- ************************************************************************/
-
-/**
- * xmlNodeDumpOutput:
- * @buf: the XML buffer output
- * @doc: the document
- * @cur: the current node
- * @level: the imbrication level for indenting
- * @format: is formatting allowed
- * @encoding: an optional encoding string
- *
- * Dump an XML node, recursive behaviour, children are printed too.
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- */
-void
-xmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur,
- int level, int format, const char *encoding)
-{
- xmlSaveCtxt ctxt;
-#ifdef LIBXML_HTML_ENABLED
- xmlDtdPtr dtd;
- int is_xhtml = 0;
-#endif
-
- xmlInitParser();
-
- if ((buf == NULL) || (cur == NULL)) return;
-
- if (encoding == NULL)
- encoding = "UTF-8";
-
- memset(&ctxt, 0, sizeof(ctxt));
- ctxt.doc = doc;
- ctxt.buf = buf;
- ctxt.level = level;
- ctxt.format = format ? 1 : 0;
- ctxt.encoding = (const xmlChar *) encoding;
- xmlSaveCtxtInit(&ctxt);
- ctxt.options |= XML_SAVE_AS_XML;
-
-#ifdef LIBXML_HTML_ENABLED
- dtd = xmlGetIntSubset(doc);
- if (dtd != NULL) {
- is_xhtml = xmlIsXHTML(dtd->SystemID, dtd->ExternalID);
- if (is_xhtml < 0)
- is_xhtml = 0;
- }
-
- if (is_xhtml)
- xhtmlNodeDumpOutput(&ctxt, cur);
- else
-#endif
- xmlNodeDumpOutputInternal(&ctxt, cur);
-}
-
-/**
- * xmlDocDumpFormatMemoryEnc:
- * @out_doc: Document to generate XML text from
- * @doc_txt_ptr: Memory pointer for allocated XML text
- * @doc_txt_len: Length of the generated XML text
- * @txt_encoding: Character encoding to use when generating XML text
- * @format: should formatting spaces been added
- *
- * Dump the current DOM tree into memory using the character encoding specified
- * by the caller. Note it is up to the caller of this function to free the
- * allocated memory with xmlFree().
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- */
-
-void
-xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, xmlChar **doc_txt_ptr,
- int * doc_txt_len, const char * txt_encoding,
- int format) {
- xmlSaveCtxt ctxt;
- int dummy = 0;
- xmlOutputBufferPtr out_buff = NULL;
- xmlCharEncodingHandlerPtr conv_hdlr = NULL;
-
- if (doc_txt_len == NULL) {
- doc_txt_len = &dummy; /* Continue, caller just won't get length */
- }
-
- if (doc_txt_ptr == NULL) {
- *doc_txt_len = 0;
- return;
- }
-
- *doc_txt_ptr = NULL;
- *doc_txt_len = 0;
-
- if (out_doc == NULL) {
- /* No document, no output */
- return;
- }
-
- /*
- * Validate the encoding value, if provided.
- * This logic is copied from xmlSaveFileEnc.
- */
-
- if (txt_encoding == NULL)
- txt_encoding = (const char *) out_doc->encoding;
- if (txt_encoding != NULL) {
- conv_hdlr = xmlFindCharEncodingHandler(txt_encoding);
- if ( conv_hdlr == NULL ) {
- xmlSaveErr(XML_SAVE_UNKNOWN_ENCODING, (xmlNodePtr) out_doc,
- txt_encoding);
- return;
- }
- }
-
- if ((out_buff = xmlAllocOutputBuffer(conv_hdlr)) == NULL ) {
- xmlSaveErrMemory("creating buffer");
- return;
- }
-
- memset(&ctxt, 0, sizeof(ctxt));
- ctxt.doc = out_doc;
- ctxt.buf = out_buff;
- ctxt.level = 0;
- ctxt.format = format ? 1 : 0;
- ctxt.encoding = (const xmlChar *) txt_encoding;
- xmlSaveCtxtInit(&ctxt);
- ctxt.options |= XML_SAVE_AS_XML;
- xmlDocContentDumpOutput(&ctxt, out_doc);
- xmlOutputBufferFlush(out_buff);
- if (out_buff->conv != NULL) {
- *doc_txt_len = xmlBufUse(out_buff->conv);
- *doc_txt_ptr = xmlStrndup(xmlBufContent(out_buff->conv), *doc_txt_len);
- } else {
- *doc_txt_len = xmlBufUse(out_buff->buffer);
- *doc_txt_ptr = xmlStrndup(xmlBufContent(out_buff->buffer),*doc_txt_len);
- }
- (void)xmlOutputBufferClose(out_buff);
-
- if ((*doc_txt_ptr == NULL) && (*doc_txt_len > 0)) {
- *doc_txt_len = 0;
- xmlSaveErrMemory("creating output");
- }
-
- return;
-}
-
-/**
- * xmlDocDumpMemory:
- * @cur: the document
- * @mem: OUT: the memory pointer
- * @size: OUT: the memory length
- *
- * Dump an XML document in memory and return the #xmlChar * and it's size
- * in bytes. It's up to the caller to free the memory with xmlFree().
- * The resulting byte array is zero terminated, though the last 0 is not
- * included in the returned size.
- */
-void
-xmlDocDumpMemory(xmlDocPtr cur, xmlChar**mem, int *size) {
- xmlDocDumpFormatMemoryEnc(cur, mem, size, NULL, 0);
-}
-
-/**
- * xmlDocDumpFormatMemory:
- * @cur: the document
- * @mem: OUT: the memory pointer
- * @size: OUT: the memory length
- * @format: should formatting spaces been added
- *
- *
- * Dump an XML document in memory and return the #xmlChar * and it's size.
- * It's up to the caller to free the memory with xmlFree().
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- */
-void
-xmlDocDumpFormatMemory(xmlDocPtr cur, xmlChar**mem, int *size, int format) {
- xmlDocDumpFormatMemoryEnc(cur, mem, size, NULL, format);
-}
-
-/**
- * xmlDocDumpMemoryEnc:
- * @out_doc: Document to generate XML text from
- * @doc_txt_ptr: Memory pointer for allocated XML text
- * @doc_txt_len: Length of the generated XML text
- * @txt_encoding: Character encoding to use when generating XML text
- *
- * Dump the current DOM tree into memory using the character encoding specified
- * by the caller. Note it is up to the caller of this function to free the
- * allocated memory with xmlFree().
- */
-
-void
-xmlDocDumpMemoryEnc(xmlDocPtr out_doc, xmlChar **doc_txt_ptr,
- int * doc_txt_len, const char * txt_encoding) {
- xmlDocDumpFormatMemoryEnc(out_doc, doc_txt_ptr, doc_txt_len,
- txt_encoding, 0);
-}
-
-/**
- * xmlDocFormatDump:
- * @f: the FILE*
- * @cur: the document
- * @format: should formatting spaces been added
- *
- * Dump an XML document to an open FILE.
- *
- * returns: the number of bytes written or -1 in case of failure.
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- */
-int
-xmlDocFormatDump(FILE *f, xmlDocPtr cur, int format) {
- xmlSaveCtxt ctxt;
- xmlOutputBufferPtr buf;
- const char * encoding;
- xmlCharEncodingHandlerPtr handler = NULL;
- int ret;
-
- if (cur == NULL) {
-#ifdef DEBUG_TREE
- xmlGenericError(xmlGenericErrorContext,
- "xmlDocDump : document == NULL\n");
-#endif
- return(-1);
- }
- encoding = (const char *) cur->encoding;
-
- if (encoding != NULL) {
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler == NULL) {
- xmlFree((char *) cur->encoding);
- cur->encoding = NULL;
- encoding = NULL;
- }
- }
- buf = xmlOutputBufferCreateFile(f, handler);
- if (buf == NULL) return(-1);
- memset(&ctxt, 0, sizeof(ctxt));
- ctxt.doc = cur;
- ctxt.buf = buf;
- ctxt.level = 0;
- ctxt.format = format ? 1 : 0;
- ctxt.encoding = (const xmlChar *) encoding;
- xmlSaveCtxtInit(&ctxt);
- ctxt.options |= XML_SAVE_AS_XML;
- xmlDocContentDumpOutput(&ctxt, cur);
-
- ret = xmlOutputBufferClose(buf);
- return(ret);
-}
-
-/**
- * xmlDocDump:
- * @f: the FILE*
- * @cur: the document
- *
- * Dump an XML document to an open FILE.
- *
- * returns: the number of bytes written or -1 in case of failure.
- */
-int
-xmlDocDump(FILE *f, xmlDocPtr cur) {
- return(xmlDocFormatDump (f, cur, 0));
-}
-
-/**
- * xmlSaveFileTo:
- * @buf: an output I/O buffer
- * @cur: the document
- * @encoding: the encoding if any assuming the I/O layer handles the trancoding
- *
- * Dump an XML document to an I/O buffer.
- * Warning ! This call xmlOutputBufferClose() on buf which is not available
- * after this call.
- *
- * returns: the number of bytes written or -1 in case of failure.
- */
-int
-xmlSaveFileTo(xmlOutputBufferPtr buf, xmlDocPtr cur, const char *encoding) {
- xmlSaveCtxt ctxt;
- int ret;
-
- if (buf == NULL) return(-1);
- if (cur == NULL) {
- xmlOutputBufferClose(buf);
- return(-1);
- }
- memset(&ctxt, 0, sizeof(ctxt));
- ctxt.doc = cur;
- ctxt.buf = buf;
- ctxt.level = 0;
- ctxt.format = 0;
- ctxt.encoding = (const xmlChar *) encoding;
- xmlSaveCtxtInit(&ctxt);
- ctxt.options |= XML_SAVE_AS_XML;
- xmlDocContentDumpOutput(&ctxt, cur);
- ret = xmlOutputBufferClose(buf);
- return(ret);
-}
-
-/**
- * xmlSaveFormatFileTo:
- * @buf: an output I/O buffer
- * @cur: the document
- * @encoding: the encoding if any assuming the I/O layer handles the trancoding
- * @format: should formatting spaces been added
- *
- * Dump an XML document to an I/O buffer.
- * Warning ! This call xmlOutputBufferClose() on buf which is not available
- * after this call.
- *
- * returns: the number of bytes written or -1 in case of failure.
- */
-int
-xmlSaveFormatFileTo(xmlOutputBufferPtr buf, xmlDocPtr cur,
- const char *encoding, int format)
-{
- xmlSaveCtxt ctxt;
- int ret;
-
- if (buf == NULL) return(-1);
- if ((cur == NULL) ||
- ((cur->type != XML_DOCUMENT_NODE) &&
- (cur->type != XML_HTML_DOCUMENT_NODE))) {
- xmlOutputBufferClose(buf);
- return(-1);
- }
- memset(&ctxt, 0, sizeof(ctxt));
- ctxt.doc = cur;
- ctxt.buf = buf;
- ctxt.level = 0;
- ctxt.format = format ? 1 : 0;
- ctxt.encoding = (const xmlChar *) encoding;
- xmlSaveCtxtInit(&ctxt);
- ctxt.options |= XML_SAVE_AS_XML;
- xmlDocContentDumpOutput(&ctxt, cur);
- ret = xmlOutputBufferClose(buf);
- return (ret);
-}
-
-/**
- * xmlSaveFormatFileEnc:
- * @filename: the filename or URL to output
- * @cur: the document being saved
- * @encoding: the name of the encoding to use or NULL.
- * @format: should formatting spaces be added.
- *
- * Dump an XML document to a file or an URL.
- *
- * Returns the number of bytes written or -1 in case of error.
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- */
-int
-xmlSaveFormatFileEnc( const char * filename, xmlDocPtr cur,
- const char * encoding, int format ) {
- xmlSaveCtxt ctxt;
- xmlOutputBufferPtr buf;
- xmlCharEncodingHandlerPtr handler = NULL;
- int ret;
-
- if (cur == NULL)
- return(-1);
-
- if (encoding == NULL)
- encoding = (const char *) cur->encoding;
-
- if (encoding != NULL) {
-
- handler = xmlFindCharEncodingHandler(encoding);
- if (handler == NULL)
- return(-1);
- }
-
-#ifdef HAVE_ZLIB_H
- if (cur->compression < 0) cur->compression = xmlGetCompressMode();
-#endif
- /*
- * save the content to a temp buffer.
- */
- buf = xmlOutputBufferCreateFilename(filename, handler, cur->compression);
- if (buf == NULL) return(-1);
- memset(&ctxt, 0, sizeof(ctxt));
- ctxt.doc = cur;
- ctxt.buf = buf;
- ctxt.level = 0;
- ctxt.format = format ? 1 : 0;
- ctxt.encoding = (const xmlChar *) encoding;
- xmlSaveCtxtInit(&ctxt);
- ctxt.options |= XML_SAVE_AS_XML;
-
- xmlDocContentDumpOutput(&ctxt, cur);
-
- ret = xmlOutputBufferClose(buf);
- return(ret);
-}
-
-
-/**
- * xmlSaveFileEnc:
- * @filename: the filename (or URL)
- * @cur: the document
- * @encoding: the name of an encoding (or NULL)
- *
- * Dump an XML document, converting it to the given encoding
- *
- * returns: the number of bytes written or -1 in case of failure.
- */
-int
-xmlSaveFileEnc(const char *filename, xmlDocPtr cur, const char *encoding) {
- return ( xmlSaveFormatFileEnc( filename, cur, encoding, 0 ) );
-}
-
-/**
- * xmlSaveFormatFile:
- * @filename: the filename (or URL)
- * @cur: the document
- * @format: should formatting spaces been added
- *
- * Dump an XML document to a file. Will use compression if
- * compiled in and enabled. If @filename is "-" the stdout file is
- * used. If @format is set then the document will be indented on output.
- * Note that @format = 1 provide node indenting only if xmlIndentTreeOutput = 1
- * or xmlKeepBlanksDefault(0) was called
- *
- * returns: the number of bytes written or -1 in case of failure.
- */
-int
-xmlSaveFormatFile(const char *filename, xmlDocPtr cur, int format) {
- return ( xmlSaveFormatFileEnc( filename, cur, NULL, format ) );
-}
-
-/**
- * xmlSaveFile:
- * @filename: the filename (or URL)
- * @cur: the document
- *
- * Dump an XML document to a file. Will use compression if
- * compiled in and enabled. If @filename is "-" the stdout file is
- * used.
- * returns: the number of bytes written or -1 in case of failure.
- */
-int
-xmlSaveFile(const char *filename, xmlDocPtr cur) {
- return(xmlSaveFormatFileEnc(filename, cur, NULL, 0));
-}
-
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-#define bottom_xmlsave
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/xmlschemas.c b/external/libxml2_android/jni/libxml2/xmlschemas.c
deleted file mode 100644
index d42afb77..00000000
--- a/external/libxml2_android/jni/libxml2/xmlschemas.c
+++ /dev/null
@@ -1,28947 +0,0 @@
-/*
- * schemas.c : implementation of the XML Schema handling and
- * schema validity checking
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-/*
- * TODO:
- * - when types are redefined in includes, check that all
- * types in the redef list are equal
- * -> need a type equality operation.
- * - if we don't intend to use the schema for schemas, we
- * need to validate all schema attributes (ref, type, name)
- * against their types.
- * - Eliminate item creation for: ??
- *
- * URGENT TODO:
- * - For xsi-driven schema acquisition, augment the IDCs after every
- * acquisition episode (xmlSchemaAugmentIDC).
- *
- * NOTES:
- * - Elimated item creation for: <restriction>, <extension>,
- * <simpleContent>, <complexContent>, <list>, <union>
- *
- * PROBLEMS:
- * - http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005JulSep/0337.html
- * IDC XPath expression and chameleon includes: the targetNamespace is changed, so
- * XPath will have trouble to resolve to this namespace, since not known.
- *
- *
- * CONSTRAINTS:
- *
- * Schema Component Constraint:
- * All Group Limited (cos-all-limited)
- * Status: complete
- * (1.2)
- * In xmlSchemaGroupDefReferenceTermFixup() and
- * (2)
- * In xmlSchemaParseModelGroup()
- * TODO: Actually this should go to component-level checks,
- * but is done here due to performance. Move it to an other layer
- * is schema construction via an API is implemented.
- */
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/hash.h>
-#include <libxml/uri.h>
-#include <libxml/xmlschemas.h>
-#include <libxml/schemasInternals.h>
-#include <libxml/xmlschemastypes.h>
-#include <libxml/xmlautomata.h>
-#include <libxml/xmlregexp.h>
-#include <libxml/dict.h>
-#include <libxml/encoding.h>
-#include <libxml/xmlIO.h>
-#ifdef LIBXML_PATTERN_ENABLED
-#include <libxml/pattern.h>
-#endif
-#ifdef LIBXML_READER_ENABLED
-#include <libxml/xmlreader.h>
-#endif
-
-/* #define DEBUG 1 */
-
-/* #define DEBUG_CONTENT 1 */
-
-/* #define DEBUG_TYPE 1 */
-
-/* #define DEBUG_CONTENT_REGEXP 1 */
-
-/* #define DEBUG_AUTOMATA 1 */
-
-/* #define DEBUG_IDC */
-
-/* #define DEBUG_IDC_NODE_TABLE */
-
-/* #define WXS_ELEM_DECL_CONS_ENABLED */
-
-#ifdef DEBUG_IDC
- #ifndef DEBUG_IDC_NODE_TABLE
- #define DEBUG_IDC_NODE_TABLE
- #endif
-#endif
-
-/* #define ENABLE_PARTICLE_RESTRICTION 1 */
-
-#define ENABLE_REDEFINE
-
-/* #define ENABLE_NAMED_LOCALS */
-
-/* #define ENABLE_IDC_NODE_TABLES_TEST */
-
-#define DUMP_CONTENT_MODEL
-
-#ifdef LIBXML_READER_ENABLED
-/* #define XML_SCHEMA_READER_ENABLED */
-#endif
-
-#define UNBOUNDED (1 << 30)
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-#define XML_SCHEMAS_NO_NAMESPACE (const xmlChar *) "##"
-
-/*
- * The XML Schemas namespaces
- */
-static const xmlChar *xmlSchemaNs = (const xmlChar *)
- "http://www.w3.org/2001/XMLSchema";
-
-static const xmlChar *xmlSchemaInstanceNs = (const xmlChar *)
- "http://www.w3.org/2001/XMLSchema-instance";
-
-static const xmlChar *xmlNamespaceNs = (const xmlChar *)
- "http://www.w3.org/2000/xmlns/";
-
-/*
-* Come casting macros.
-*/
-#define ACTXT_CAST (xmlSchemaAbstractCtxtPtr)
-#define PCTXT_CAST (xmlSchemaParserCtxtPtr)
-#define VCTXT_CAST (xmlSchemaValidCtxtPtr)
-#define WXS_BASIC_CAST (xmlSchemaBasicItemPtr)
-#define WXS_TREE_CAST (xmlSchemaTreeItemPtr)
-#define WXS_PTC_CAST (xmlSchemaParticlePtr)
-#define WXS_TYPE_CAST (xmlSchemaTypePtr)
-#define WXS_ELEM_CAST (xmlSchemaElementPtr)
-#define WXS_ATTR_GROUP_CAST (xmlSchemaAttributeGroupPtr)
-#define WXS_ATTR_CAST (xmlSchemaAttributePtr)
-#define WXS_ATTR_USE_CAST (xmlSchemaAttributeUsePtr)
-#define WXS_ATTR_PROHIB_CAST (xmlSchemaAttributeUseProhibPtr)
-#define WXS_MODEL_GROUPDEF_CAST (xmlSchemaModelGroupDefPtr)
-#define WXS_MODEL_GROUP_CAST (xmlSchemaModelGroupPtr)
-#define WXS_IDC_CAST (xmlSchemaIDCPtr)
-#define WXS_QNAME_CAST (xmlSchemaQNameRefPtr)
-#define WXS_LIST_CAST (xmlSchemaItemListPtr)
-
-/*
-* Macros to query common properties of components.
-*/
-#define WXS_ITEM_NODE(i) xmlSchemaGetComponentNode(WXS_BASIC_CAST (i))
-
-#define WXS_ITEM_TYPE_NAME(i) xmlSchemaGetComponentTypeStr(WXS_BASIC_CAST (i))
-/*
-* Macros for element declarations.
-*/
-#define WXS_ELEM_TYPEDEF(e) (e)->subtypes
-
-#define WXS_SUBST_HEAD(item) (item)->refDecl
-/*
-* Macros for attribute declarations.
-*/
-#define WXS_ATTR_TYPEDEF(a) (a)->subtypes
-/*
-* Macros for attribute uses.
-*/
-#define WXS_ATTRUSE_DECL(au) WXS_ATTR_CAST (WXS_ATTR_USE_CAST (au))->attrDecl
-
-#define WXS_ATTRUSE_TYPEDEF(au) WXS_ATTR_TYPEDEF(WXS_ATTRUSE_DECL( WXS_ATTR_USE_CAST au))
-
-#define WXS_ATTRUSE_DECL_NAME(au) (WXS_ATTRUSE_DECL(au))->name
-
-#define WXS_ATTRUSE_DECL_TNS(au) (WXS_ATTRUSE_DECL(au))->targetNamespace
-/*
-* Macros for attribute groups.
-*/
-#define WXS_ATTR_GROUP_HAS_REFS(ag) ((WXS_ATTR_GROUP_CAST (ag))->flags & XML_SCHEMAS_ATTRGROUP_HAS_REFS)
-#define WXS_ATTR_GROUP_EXPANDED(ag) ((WXS_ATTR_GROUP_CAST (ag))->flags & XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED)
-/*
-* Macros for particles.
-*/
-#define WXS_PARTICLE(p) WXS_PTC_CAST (p)
-
-#define WXS_PARTICLE_TERM(p) (WXS_PARTICLE(p))->children
-
-#define WXS_PARTICLE_TERM_AS_ELEM(p) (WXS_ELEM_CAST WXS_PARTICLE_TERM(p))
-
-#define WXS_PARTICLE_MODEL(p) WXS_MODEL_GROUP_CAST WXS_PARTICLE(p)->children
-/*
-* Macros for model groups definitions.
-*/
-#define WXS_MODELGROUPDEF_MODEL(mgd) (WXS_MODEL_GROUP_CAST (mgd))->children
-/*
-* Macros for model groups.
-*/
-#define WXS_IS_MODEL_GROUP(i) \
- (((i)->type == XML_SCHEMA_TYPE_SEQUENCE) || \
- ((i)->type == XML_SCHEMA_TYPE_CHOICE) || \
- ((i)->type == XML_SCHEMA_TYPE_ALL))
-
-#define WXS_MODELGROUP_PARTICLE(mg) WXS_PTC_CAST (mg)->children
-/*
-* Macros for schema buckets.
-*/
-#define WXS_IS_BUCKET_INCREDEF(t) (((t) == XML_SCHEMA_SCHEMA_INCLUDE) || \
- ((t) == XML_SCHEMA_SCHEMA_REDEFINE))
-
-#define WXS_IS_BUCKET_IMPMAIN(t) (((t) == XML_SCHEMA_SCHEMA_MAIN) || \
- ((t) == XML_SCHEMA_SCHEMA_IMPORT))
-
-#define WXS_IMPBUCKET(b) ((xmlSchemaImportPtr) (b))
-
-#define WXS_INCBUCKET(b) ((xmlSchemaIncludePtr) (b))
-/*
-* Macros for complex/simple types.
-*/
-#define WXS_IS_ANYTYPE(i) \
- (( (i)->type == XML_SCHEMA_TYPE_BASIC) && \
- ( (WXS_TYPE_CAST (i))->builtInType == XML_SCHEMAS_ANYTYPE))
-
-#define WXS_IS_COMPLEX(i) \
- (((i)->type == XML_SCHEMA_TYPE_COMPLEX) || \
- ((i)->builtInType == XML_SCHEMAS_ANYTYPE))
-
-#define WXS_IS_SIMPLE(item) \
- ((item->type == XML_SCHEMA_TYPE_SIMPLE) || \
- ((item->type == XML_SCHEMA_TYPE_BASIC) && \
- (item->builtInType != XML_SCHEMAS_ANYTYPE)))
-
-#define WXS_IS_ANY_SIMPLE_TYPE(i) \
- (((i)->type == XML_SCHEMA_TYPE_BASIC) && \
- ((i)->builtInType == XML_SCHEMAS_ANYSIMPLETYPE))
-
-#define WXS_IS_RESTRICTION(t) \
- ((t)->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION)
-
-#define WXS_IS_EXTENSION(t) \
- ((t)->flags & XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION)
-
-#define WXS_IS_TYPE_NOT_FIXED(i) \
- (((i)->type != XML_SCHEMA_TYPE_BASIC) && \
- (((i)->flags & XML_SCHEMAS_TYPE_INTERNAL_RESOLVED) == 0))
-
-#define WXS_IS_TYPE_NOT_FIXED_1(item) \
- (((item)->type != XML_SCHEMA_TYPE_BASIC) && \
- (((item)->flags & XML_SCHEMAS_TYPE_FIXUP_1) == 0))
-
-#define WXS_TYPE_IS_GLOBAL(t) ((t)->flags & XML_SCHEMAS_TYPE_GLOBAL)
-
-#define WXS_TYPE_IS_LOCAL(t) (((t)->flags & XML_SCHEMAS_TYPE_GLOBAL) == 0)
-/*
-* Macros for exclusively for complex types.
-*/
-#define WXS_HAS_COMPLEX_CONTENT(item) \
- ((item->contentType == XML_SCHEMA_CONTENT_MIXED) || \
- (item->contentType == XML_SCHEMA_CONTENT_EMPTY) || \
- (item->contentType == XML_SCHEMA_CONTENT_ELEMENTS))
-
-#define WXS_HAS_SIMPLE_CONTENT(item) \
- ((item->contentType == XML_SCHEMA_CONTENT_SIMPLE) || \
- (item->contentType == XML_SCHEMA_CONTENT_BASIC))
-
-#define WXS_HAS_MIXED_CONTENT(item) \
- (item->contentType == XML_SCHEMA_CONTENT_MIXED)
-
-#define WXS_EMPTIABLE(t) \
- (xmlSchemaIsParticleEmptiable(WXS_PTC_CAST (t)->subtypes))
-
-#define WXS_TYPE_CONTENTTYPE(t) (t)->subtypes
-
-#define WXS_TYPE_PARTICLE(t) WXS_PTC_CAST (t)->subtypes
-
-#define WXS_TYPE_PARTICLE_TERM(t) WXS_PARTICLE_TERM(WXS_TYPE_PARTICLE(t))
-/*
-* Macros for exclusively for simple types.
-*/
-#define WXS_LIST_ITEMTYPE(t) (t)->subtypes
-
-#define WXS_IS_ATOMIC(t) (t->flags & XML_SCHEMAS_TYPE_VARIETY_ATOMIC)
-
-#define WXS_IS_LIST(t) (t->flags & XML_SCHEMAS_TYPE_VARIETY_LIST)
-
-#define WXS_IS_UNION(t) (t->flags & XML_SCHEMAS_TYPE_VARIETY_UNION)
-/*
-* Misc parser context macros.
-*/
-#define WXS_CONSTRUCTOR(ctx) (ctx)->constructor
-
-#define WXS_HAS_BUCKETS(ctx) \
-( (WXS_CONSTRUCTOR((ctx))->buckets != NULL) && \
-(WXS_CONSTRUCTOR((ctx))->buckets->nbItems > 0) )
-
-#define WXS_SUBST_GROUPS(ctx) WXS_CONSTRUCTOR((ctx))->substGroups
-
-#define WXS_BUCKET(ctx) WXS_CONSTRUCTOR((ctx))->bucket
-
-#define WXS_SCHEMA(ctx) (ctx)->schema
-
-#define WXS_ADD_LOCAL(ctx, item) \
- xmlSchemaAddItemSize(&(WXS_BUCKET(ctx)->locals), 10, item)
-
-#define WXS_ADD_GLOBAL(ctx, item) \
- xmlSchemaAddItemSize(&(WXS_BUCKET(ctx)->globals), 5, item)
-
-#define WXS_ADD_PENDING(ctx, item) \
- xmlSchemaAddItemSize(&((ctx)->constructor->pending), 10, item)
-/*
-* xmlSchemaItemList macros.
-*/
-#define WXS_ILIST_IS_EMPTY(l) ((l == NULL) || ((l)->nbItems == 0))
-/*
-* Misc macros.
-*/
-#define IS_SCHEMA(node, type) \
- ((node != NULL) && (node->ns != NULL) && \
- (xmlStrEqual(node->name, (const xmlChar *) type)) && \
- (xmlStrEqual(node->ns->href, xmlSchemaNs)))
-
-#define FREE_AND_NULL(str) if ((str) != NULL) { xmlFree((xmlChar *) (str)); str = NULL; }
-
-/*
-* Since we put the default/fixed values into the dict, we can
-* use pointer comparison for those values.
-* REMOVED: (xmlStrEqual((v1), (v2)))
-*/
-#define WXS_ARE_DEFAULT_STR_EQUAL(v1, v2) ((v1) == (v2))
-
-#define INODE_NILLED(item) (item->flags & XML_SCHEMA_ELEM_INFO_NILLED)
-
-#define CAN_PARSE_SCHEMA(b) (((b)->doc != NULL) && ((b)->parsed == 0))
-
-#define HFAILURE if (res == -1) goto exit_failure;
-
-#define HERROR if (res != 0) goto exit_error;
-
-#define HSTOP(ctx) if ((ctx)->stop) goto exit;
-/*
-* Some flags used for various schema constraints.
-*/
-#define SUBSET_RESTRICTION 1<<0
-#define SUBSET_EXTENSION 1<<1
-#define SUBSET_SUBSTITUTION 1<<2
-#define SUBSET_LIST 1<<3
-#define SUBSET_UNION 1<<4
-
-typedef struct _xmlSchemaNodeInfo xmlSchemaNodeInfo;
-typedef xmlSchemaNodeInfo *xmlSchemaNodeInfoPtr;
-
-typedef struct _xmlSchemaItemList xmlSchemaItemList;
-typedef xmlSchemaItemList *xmlSchemaItemListPtr;
-struct _xmlSchemaItemList {
- void **items; /* used for dynamic addition of schemata */
- int nbItems; /* used for dynamic addition of schemata */
- int sizeItems; /* used for dynamic addition of schemata */
-};
-
-#define XML_SCHEMA_CTXT_PARSER 1
-#define XML_SCHEMA_CTXT_VALIDATOR 2
-
-typedef struct _xmlSchemaAbstractCtxt xmlSchemaAbstractCtxt;
-typedef xmlSchemaAbstractCtxt *xmlSchemaAbstractCtxtPtr;
-struct _xmlSchemaAbstractCtxt {
- int type; /* E.g. XML_SCHEMA_CTXT_VALIDATOR */
-};
-
-typedef struct _xmlSchemaBucket xmlSchemaBucket;
-typedef xmlSchemaBucket *xmlSchemaBucketPtr;
-
-#define XML_SCHEMA_SCHEMA_MAIN 0
-#define XML_SCHEMA_SCHEMA_IMPORT 1
-#define XML_SCHEMA_SCHEMA_INCLUDE 2
-#define XML_SCHEMA_SCHEMA_REDEFINE 3
-
-/**
- * xmlSchemaSchemaRelation:
- *
- * Used to create a graph of schema relationships.
- */
-typedef struct _xmlSchemaSchemaRelation xmlSchemaSchemaRelation;
-typedef xmlSchemaSchemaRelation *xmlSchemaSchemaRelationPtr;
-struct _xmlSchemaSchemaRelation {
- xmlSchemaSchemaRelationPtr next;
- int type; /* E.g. XML_SCHEMA_SCHEMA_IMPORT */
- const xmlChar *importNamespace;
- xmlSchemaBucketPtr bucket;
-};
-
-#define XML_SCHEMA_BUCKET_MARKED 1<<0
-#define XML_SCHEMA_BUCKET_COMPS_ADDED 1<<1
-
-struct _xmlSchemaBucket {
- int type;
- int flags;
- const xmlChar *schemaLocation;
- const xmlChar *origTargetNamespace;
- const xmlChar *targetNamespace;
- xmlDocPtr doc;
- xmlSchemaSchemaRelationPtr relations;
- int located;
- int parsed;
- int imported;
- int preserveDoc;
- xmlSchemaItemListPtr globals; /* Global components. */
- xmlSchemaItemListPtr locals; /* Local components. */
-};
-
-/**
- * xmlSchemaImport:
- * (extends xmlSchemaBucket)
- *
- * Reflects a schema. Holds some information
- * about the schema and its toplevel components. Duplicate
- * toplevel components are not checked at this level.
- */
-typedef struct _xmlSchemaImport xmlSchemaImport;
-typedef xmlSchemaImport *xmlSchemaImportPtr;
-struct _xmlSchemaImport {
- int type; /* Main OR import OR include. */
- int flags;
- const xmlChar *schemaLocation; /* The URI of the schema document. */
- /* For chameleon includes, @origTargetNamespace will be NULL */
- const xmlChar *origTargetNamespace;
- /*
- * For chameleon includes, @targetNamespace will be the
- * targetNamespace of the including schema.
- */
- const xmlChar *targetNamespace;
- xmlDocPtr doc; /* The schema node-tree. */
- /* @relations will hold any included/imported/redefined schemas. */
- xmlSchemaSchemaRelationPtr relations;
- int located;
- int parsed;
- int imported;
- int preserveDoc;
- xmlSchemaItemListPtr globals;
- xmlSchemaItemListPtr locals;
- /* The imported schema. */
- xmlSchemaPtr schema;
-};
-
-/*
-* (extends xmlSchemaBucket)
-*/
-typedef struct _xmlSchemaInclude xmlSchemaInclude;
-typedef xmlSchemaInclude *xmlSchemaIncludePtr;
-struct _xmlSchemaInclude {
- int type;
- int flags;
- const xmlChar *schemaLocation;
- const xmlChar *origTargetNamespace;
- const xmlChar *targetNamespace;
- xmlDocPtr doc;
- xmlSchemaSchemaRelationPtr relations;
- int located;
- int parsed;
- int imported;
- int preserveDoc;
- xmlSchemaItemListPtr globals; /* Global components. */
- xmlSchemaItemListPtr locals; /* Local components. */
-
- /* The owning main or import schema bucket. */
- xmlSchemaImportPtr ownerImport;
-};
-
-/**
- * xmlSchemaBasicItem:
- *
- * The abstract base type for schema components.
- */
-typedef struct _xmlSchemaBasicItem xmlSchemaBasicItem;
-typedef xmlSchemaBasicItem *xmlSchemaBasicItemPtr;
-struct _xmlSchemaBasicItem {
- xmlSchemaTypeType type;
-};
-
-/**
- * xmlSchemaAnnotItem:
- *
- * The abstract base type for annotated schema components.
- * (Extends xmlSchemaBasicItem)
- */
-typedef struct _xmlSchemaAnnotItem xmlSchemaAnnotItem;
-typedef xmlSchemaAnnotItem *xmlSchemaAnnotItemPtr;
-struct _xmlSchemaAnnotItem {
- xmlSchemaTypeType type;
- xmlSchemaAnnotPtr annot;
-};
-
-/**
- * xmlSchemaTreeItem:
- *
- * The abstract base type for tree-like structured schema components.
- * (Extends xmlSchemaAnnotItem)
- */
-typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem;
-typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr;
-struct _xmlSchemaTreeItem {
- xmlSchemaTypeType type;
- xmlSchemaAnnotPtr annot;
- xmlSchemaTreeItemPtr next;
- xmlSchemaTreeItemPtr children;
-};
-
-
-#define XML_SCHEMA_ATTR_USE_FIXED 1<<0
-/**
- * xmlSchemaAttributeUsePtr:
- *
- * The abstract base type for tree-like structured schema components.
- * (Extends xmlSchemaTreeItem)
- */
-typedef struct _xmlSchemaAttributeUse xmlSchemaAttributeUse;
-typedef xmlSchemaAttributeUse *xmlSchemaAttributeUsePtr;
-struct _xmlSchemaAttributeUse {
- xmlSchemaTypeType type;
- xmlSchemaAnnotPtr annot;
- xmlSchemaAttributeUsePtr next; /* The next attr. use. */
- /*
- * The attr. decl. OR a QName-ref. to an attr. decl. OR
- * a QName-ref. to an attribute group definition.
- */
- xmlSchemaAttributePtr attrDecl;
-
- int flags;
- xmlNodePtr node;
- int occurs; /* required, optional */
- const xmlChar * defValue;
- xmlSchemaValPtr defVal;
-};
-
-/**
- * xmlSchemaAttributeUseProhibPtr:
- *
- * A helper component to reflect attribute prohibitions.
- * (Extends xmlSchemaBasicItem)
- */
-typedef struct _xmlSchemaAttributeUseProhib xmlSchemaAttributeUseProhib;
-typedef xmlSchemaAttributeUseProhib *xmlSchemaAttributeUseProhibPtr;
-struct _xmlSchemaAttributeUseProhib {
- xmlSchemaTypeType type; /* == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB */
- xmlNodePtr node;
- const xmlChar *name;
- const xmlChar *targetNamespace;
- int isRef;
-};
-
-/**
- * xmlSchemaRedef:
- */
-typedef struct _xmlSchemaRedef xmlSchemaRedef;
-typedef xmlSchemaRedef *xmlSchemaRedefPtr;
-struct _xmlSchemaRedef {
- xmlSchemaRedefPtr next;
- xmlSchemaBasicItemPtr item; /* The redefining component. */
- xmlSchemaBasicItemPtr reference; /* The referencing component. */
- xmlSchemaBasicItemPtr target; /* The to-be-redefined component. */
- const xmlChar *refName; /* The name of the to-be-redefined component. */
- const xmlChar *refTargetNs; /* The target namespace of the
- to-be-redefined comp. */
- xmlSchemaBucketPtr targetBucket; /* The redefined schema. */
-};
-
-/**
- * xmlSchemaConstructionCtxt:
- */
-typedef struct _xmlSchemaConstructionCtxt xmlSchemaConstructionCtxt;
-typedef xmlSchemaConstructionCtxt *xmlSchemaConstructionCtxtPtr;
-struct _xmlSchemaConstructionCtxt {
- xmlSchemaPtr mainSchema; /* The main schema. */
- xmlSchemaBucketPtr mainBucket; /* The main schema bucket */
- xmlDictPtr dict;
- xmlSchemaItemListPtr buckets; /* List of schema buckets. */
- /* xmlSchemaItemListPtr relations; */ /* List of schema relations. */
- xmlSchemaBucketPtr bucket; /* The current schema bucket */
- xmlSchemaItemListPtr pending; /* All Components of all schemas that
- need to be fixed. */
- xmlHashTablePtr substGroups;
- xmlSchemaRedefPtr redefs;
- xmlSchemaRedefPtr lastRedef;
-};
-
-#define XML_SCHEMAS_PARSE_ERROR 1
-#define SCHEMAS_PARSE_OPTIONS XML_PARSE_NOENT
-
-struct _xmlSchemaParserCtxt {
- int type;
- void *errCtxt; /* user specific error context */
- xmlSchemaValidityErrorFunc error; /* the callback in case of errors */
- xmlSchemaValidityWarningFunc warning; /* the callback in case of warning */
- int err;
- int nberrors;
- xmlStructuredErrorFunc serror;
-
- xmlSchemaConstructionCtxtPtr constructor;
- int ownsConstructor; /* TODO: Move this to parser *flags*. */
-
- /* xmlSchemaPtr topschema; */
- /* xmlHashTablePtr namespaces; */
-
- xmlSchemaPtr schema; /* The main schema in use */
- int counter;
-
- const xmlChar *URL;
- xmlDocPtr doc;
- int preserve; /* Whether the doc should be freed */
-
- const char *buffer;
- int size;
-
- /*
- * Used to build complex element content models
- */
- xmlAutomataPtr am;
- xmlAutomataStatePtr start;
- xmlAutomataStatePtr end;
- xmlAutomataStatePtr state;
-
- xmlDictPtr dict; /* dictionary for interned string names */
- xmlSchemaTypePtr ctxtType; /* The current context simple/complex type */
- int options;
- xmlSchemaValidCtxtPtr vctxt;
- int isS4S;
- int isRedefine;
- int xsiAssemble;
- int stop; /* If the parser should stop; i.e. a critical error. */
- const xmlChar *targetNamespace;
- xmlSchemaBucketPtr redefined; /* The schema to be redefined. */
-
- xmlSchemaRedefPtr redef; /* Used for redefinitions. */
- int redefCounter; /* Used for redefinitions. */
- xmlSchemaItemListPtr attrProhibs;
-};
-
-/**
- * xmlSchemaQNameRef:
- *
- * A component reference item (not a schema component)
- * (Extends xmlSchemaBasicItem)
- */
-typedef struct _xmlSchemaQNameRef xmlSchemaQNameRef;
-typedef xmlSchemaQNameRef *xmlSchemaQNameRefPtr;
-struct _xmlSchemaQNameRef {
- xmlSchemaTypeType type;
- xmlSchemaBasicItemPtr item; /* The resolved referenced item. */
- xmlSchemaTypeType itemType;
- const xmlChar *name;
- const xmlChar *targetNamespace;
- xmlNodePtr node;
-};
-
-/**
- * xmlSchemaParticle:
- *
- * A particle component.
- * (Extends xmlSchemaTreeItem)
- */
-typedef struct _xmlSchemaParticle xmlSchemaParticle;
-typedef xmlSchemaParticle *xmlSchemaParticlePtr;
-struct _xmlSchemaParticle {
- xmlSchemaTypeType type;
- xmlSchemaAnnotPtr annot;
- xmlSchemaTreeItemPtr next; /* next particle */
- xmlSchemaTreeItemPtr children; /* the "term" (e.g. a model group,
- a group definition, a XML_SCHEMA_EXTRA_QNAMEREF (if a reference),
- etc.) */
- int minOccurs;
- int maxOccurs;
- xmlNodePtr node;
-};
-
-/**
- * xmlSchemaModelGroup:
- *
- * A model group component.
- * (Extends xmlSchemaTreeItem)
- */
-typedef struct _xmlSchemaModelGroup xmlSchemaModelGroup;
-typedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr;
-struct _xmlSchemaModelGroup {
- xmlSchemaTypeType type; /* XML_SCHEMA_TYPE_SEQUENCE, XML_SCHEMA_TYPE_CHOICE, XML_SCHEMA_TYPE_ALL */
- xmlSchemaAnnotPtr annot;
- xmlSchemaTreeItemPtr next; /* not used */
- xmlSchemaTreeItemPtr children; /* first particle (OR "element decl" OR "wildcard") */
- xmlNodePtr node;
-};
-
-#define XML_SCHEMA_MODEL_GROUP_DEF_MARKED 1<<0
-#define XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED 1<<1
-/**
- * xmlSchemaModelGroupDef:
- *
- * A model group definition component.
- * (Extends xmlSchemaTreeItem)
- */
-typedef struct _xmlSchemaModelGroupDef xmlSchemaModelGroupDef;
-typedef xmlSchemaModelGroupDef *xmlSchemaModelGroupDefPtr;
-struct _xmlSchemaModelGroupDef {
- xmlSchemaTypeType type; /* XML_SCHEMA_TYPE_GROUP */
- xmlSchemaAnnotPtr annot;
- xmlSchemaTreeItemPtr next; /* not used */
- xmlSchemaTreeItemPtr children; /* the "model group" */
- const xmlChar *name;
- const xmlChar *targetNamespace;
- xmlNodePtr node;
- int flags;
-};
-
-typedef struct _xmlSchemaIDC xmlSchemaIDC;
-typedef xmlSchemaIDC *xmlSchemaIDCPtr;
-
-/**
- * xmlSchemaIDCSelect:
- *
- * The identity-constraint "field" and "selector" item, holding the
- * XPath expression.
- */
-typedef struct _xmlSchemaIDCSelect xmlSchemaIDCSelect;
-typedef xmlSchemaIDCSelect *xmlSchemaIDCSelectPtr;
-struct _xmlSchemaIDCSelect {
- xmlSchemaIDCSelectPtr next;
- xmlSchemaIDCPtr idc;
- int index; /* an index position if significant for IDC key-sequences */
- const xmlChar *xpath; /* the XPath expression */
- void *xpathComp; /* the compiled XPath expression */
-};
-
-/**
- * xmlSchemaIDC:
- *
- * The identity-constraint definition component.
- * (Extends xmlSchemaAnnotItem)
- */
-
-struct _xmlSchemaIDC {
- xmlSchemaTypeType type;
- xmlSchemaAnnotPtr annot;
- xmlSchemaIDCPtr next;
- xmlNodePtr node;
- const xmlChar *name;
- const xmlChar *targetNamespace;
- xmlSchemaIDCSelectPtr selector;
- xmlSchemaIDCSelectPtr fields;
- int nbFields;
- xmlSchemaQNameRefPtr ref;
-};
-
-/**
- * xmlSchemaIDCAug:
- *
- * The augmented IDC information used for validation.
- */
-typedef struct _xmlSchemaIDCAug xmlSchemaIDCAug;
-typedef xmlSchemaIDCAug *xmlSchemaIDCAugPtr;
-struct _xmlSchemaIDCAug {
- xmlSchemaIDCAugPtr next; /* next in a list */
- xmlSchemaIDCPtr def; /* the IDC definition */
- int keyrefDepth; /* the lowest tree level to which IDC
- tables need to be bubbled upwards */
-};
-
-/**
- * xmlSchemaPSVIIDCKeySequence:
- *
- * The key sequence of a node table item.
- */
-typedef struct _xmlSchemaPSVIIDCKey xmlSchemaPSVIIDCKey;
-typedef xmlSchemaPSVIIDCKey *xmlSchemaPSVIIDCKeyPtr;
-struct _xmlSchemaPSVIIDCKey {
- xmlSchemaTypePtr type;
- xmlSchemaValPtr val;
-};
-
-/**
- * xmlSchemaPSVIIDCNode:
- *
- * The node table item of a node table.
- */
-typedef struct _xmlSchemaPSVIIDCNode xmlSchemaPSVIIDCNode;
-typedef xmlSchemaPSVIIDCNode *xmlSchemaPSVIIDCNodePtr;
-struct _xmlSchemaPSVIIDCNode {
- xmlNodePtr node;
- xmlSchemaPSVIIDCKeyPtr *keys;
- int nodeLine;
- int nodeQNameID;
-
-};
-
-/**
- * xmlSchemaPSVIIDCBinding:
- *
- * The identity-constraint binding item of the [identity-constraint table].
- */
-typedef struct _xmlSchemaPSVIIDCBinding xmlSchemaPSVIIDCBinding;
-typedef xmlSchemaPSVIIDCBinding *xmlSchemaPSVIIDCBindingPtr;
-struct _xmlSchemaPSVIIDCBinding {
- xmlSchemaPSVIIDCBindingPtr next; /* next binding of a specific node */
- xmlSchemaIDCPtr definition; /* the IDC definition */
- xmlSchemaPSVIIDCNodePtr *nodeTable; /* array of key-sequences */
- int nbNodes; /* number of entries in the node table */
- int sizeNodes; /* size of the node table */
- xmlSchemaItemListPtr dupls;
-};
-
-
-#define XPATH_STATE_OBJ_TYPE_IDC_SELECTOR 1
-#define XPATH_STATE_OBJ_TYPE_IDC_FIELD 2
-
-#define XPATH_STATE_OBJ_MATCHES -2
-#define XPATH_STATE_OBJ_BLOCKED -3
-
-typedef struct _xmlSchemaIDCMatcher xmlSchemaIDCMatcher;
-typedef xmlSchemaIDCMatcher *xmlSchemaIDCMatcherPtr;
-
-/**
- * xmlSchemaIDCStateObj:
- *
- * The state object used to evaluate XPath expressions.
- */
-typedef struct _xmlSchemaIDCStateObj xmlSchemaIDCStateObj;
-typedef xmlSchemaIDCStateObj *xmlSchemaIDCStateObjPtr;
-struct _xmlSchemaIDCStateObj {
- int type;
- xmlSchemaIDCStateObjPtr next; /* next if in a list */
- int depth; /* depth of creation */
- int *history; /* list of (depth, state-id) tuples */
- int nbHistory;
- int sizeHistory;
- xmlSchemaIDCMatcherPtr matcher; /* the correspondent field/selector
- matcher */
- xmlSchemaIDCSelectPtr sel;
- void *xpathCtxt;
-};
-
-#define IDC_MATCHER 0
-
-/**
- * xmlSchemaIDCMatcher:
- *
- * Used to evaluate IDC selectors (and fields).
- */
-struct _xmlSchemaIDCMatcher {
- int type;
- int depth; /* the tree depth at creation time */
- xmlSchemaIDCMatcherPtr next; /* next in the list */
- xmlSchemaIDCMatcherPtr nextCached; /* next in the cache list */
- xmlSchemaIDCAugPtr aidc; /* the augmented IDC item */
- int idcType;
- xmlSchemaPSVIIDCKeyPtr **keySeqs; /* the key-sequences of the target
- elements */
- int sizeKeySeqs;
- xmlSchemaItemListPtr targets; /* list of target-node
- (xmlSchemaPSVIIDCNodePtr) entries */
-};
-
-/*
-* Element info flags.
-*/
-#define XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES 1<<0
-#define XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES 1<<1
-#define XML_SCHEMA_ELEM_INFO_NILLED 1<<2
-#define XML_SCHEMA_ELEM_INFO_LOCAL_TYPE 1<<3
-
-#define XML_SCHEMA_NODE_INFO_VALUE_NEEDED 1<<4
-#define XML_SCHEMA_ELEM_INFO_EMPTY 1<<5
-#define XML_SCHEMA_ELEM_INFO_HAS_CONTENT 1<<6
-
-#define XML_SCHEMA_ELEM_INFO_HAS_ELEM_CONTENT 1<<7
-#define XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT 1<<8
-#define XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED 1<<9
-#define XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE 1<<10
-
-/**
- * xmlSchemaNodeInfo:
- *
- * Holds information of an element node.
- */
-struct _xmlSchemaNodeInfo {
- int nodeType;
- xmlNodePtr node;
- int nodeLine;
- const xmlChar *localName;
- const xmlChar *nsName;
- const xmlChar *value;
- xmlSchemaValPtr val; /* the pre-computed value if any */
- xmlSchemaTypePtr typeDef; /* the complex/simple type definition if any */
-
- int flags; /* combination of node info flags */
-
- int valNeeded;
- int normVal;
-
- xmlSchemaElementPtr decl; /* the element/attribute declaration */
- int depth;
- xmlSchemaPSVIIDCBindingPtr idcTable; /* the table of PSVI IDC bindings
- for the scope element*/
- xmlSchemaIDCMatcherPtr idcMatchers; /* the IDC matchers for the scope
- element */
- xmlRegExecCtxtPtr regexCtxt;
-
- const xmlChar **nsBindings; /* Namespace bindings on this element */
- int nbNsBindings;
- int sizeNsBindings;
-
- int hasKeyrefs;
- int appliedXPath; /* Indicates that an XPath has been applied. */
-};
-
-#define XML_SCHEMAS_ATTR_UNKNOWN 1
-#define XML_SCHEMAS_ATTR_ASSESSED 2
-#define XML_SCHEMAS_ATTR_PROHIBITED 3
-#define XML_SCHEMAS_ATTR_ERR_MISSING 4
-#define XML_SCHEMAS_ATTR_INVALID_VALUE 5
-#define XML_SCHEMAS_ATTR_ERR_NO_TYPE 6
-#define XML_SCHEMAS_ATTR_ERR_FIXED_VALUE 7
-#define XML_SCHEMAS_ATTR_DEFAULT 8
-#define XML_SCHEMAS_ATTR_VALIDATE_VALUE 9
-#define XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL 10
-#define XML_SCHEMAS_ATTR_HAS_ATTR_USE 11
-#define XML_SCHEMAS_ATTR_HAS_ATTR_DECL 12
-#define XML_SCHEMAS_ATTR_WILD_SKIP 13
-#define XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL 14
-#define XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_ID 15
-#define XML_SCHEMAS_ATTR_ERR_WILD_AND_USE_ID 16
-#define XML_SCHEMAS_ATTR_META 17
-/*
-* @metaType values of xmlSchemaAttrInfo.
-*/
-#define XML_SCHEMA_ATTR_INFO_META_XSI_TYPE 1
-#define XML_SCHEMA_ATTR_INFO_META_XSI_NIL 2
-#define XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC 3
-#define XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC 4
-#define XML_SCHEMA_ATTR_INFO_META_XMLNS 5
-
-typedef struct _xmlSchemaAttrInfo xmlSchemaAttrInfo;
-typedef xmlSchemaAttrInfo *xmlSchemaAttrInfoPtr;
-struct _xmlSchemaAttrInfo {
- int nodeType;
- xmlNodePtr node;
- int nodeLine;
- const xmlChar *localName;
- const xmlChar *nsName;
- const xmlChar *value;
- xmlSchemaValPtr val; /* the pre-computed value if any */
- xmlSchemaTypePtr typeDef; /* the complex/simple type definition if any */
- int flags; /* combination of node info flags */
-
- xmlSchemaAttributePtr decl; /* the attribute declaration */
- xmlSchemaAttributeUsePtr use; /* the attribute use */
- int state;
- int metaType;
- const xmlChar *vcValue; /* the value constraint value */
- xmlSchemaNodeInfoPtr parent;
-};
-
-
-#define XML_SCHEMA_VALID_CTXT_FLAG_STREAM 1
-/**
- * xmlSchemaValidCtxt:
- *
- * A Schemas validation context
- */
-struct _xmlSchemaValidCtxt {
- int type;
- void *errCtxt; /* user specific data block */
- xmlSchemaValidityErrorFunc error; /* the callback in case of errors */
- xmlSchemaValidityWarningFunc warning; /* the callback in case of warning */
- xmlStructuredErrorFunc serror;
-
- xmlSchemaPtr schema; /* The schema in use */
- xmlDocPtr doc;
- xmlParserInputBufferPtr input;
- xmlCharEncoding enc;
- xmlSAXHandlerPtr sax;
- xmlParserCtxtPtr parserCtxt;
- void *user_data; /* TODO: What is this for? */
- char *filename;
-
- int err;
- int nberrors;
-
- xmlNodePtr node;
- xmlNodePtr cur;
- /* xmlSchemaTypePtr type; */
-
- xmlRegExecCtxtPtr regexp;
- xmlSchemaValPtr value;
-
- int valueWS;
- int options;
- xmlNodePtr validationRoot;
- xmlSchemaParserCtxtPtr pctxt;
- int xsiAssemble;
-
- int depth;
- xmlSchemaNodeInfoPtr *elemInfos; /* array of element informations */
- int sizeElemInfos;
- xmlSchemaNodeInfoPtr inode; /* the current element information */
-
- xmlSchemaIDCAugPtr aidcs; /* a list of augmented IDC informations */
-
- xmlSchemaIDCStateObjPtr xpathStates; /* first active state object. */
- xmlSchemaIDCStateObjPtr xpathStatePool; /* first stored state object. */
- xmlSchemaIDCMatcherPtr idcMatcherCache; /* Cache for IDC matcher objects. */
-
- xmlSchemaPSVIIDCNodePtr *idcNodes; /* list of all IDC node-table entries*/
- int nbIdcNodes;
- int sizeIdcNodes;
-
- xmlSchemaPSVIIDCKeyPtr *idcKeys; /* list of all IDC node-table entries */
- int nbIdcKeys;
- int sizeIdcKeys;
-
- int flags;
-
- xmlDictPtr dict;
-
-#ifdef LIBXML_READER_ENABLED
- xmlTextReaderPtr reader;
-#endif
-
- xmlSchemaAttrInfoPtr *attrInfos;
- int nbAttrInfos;
- int sizeAttrInfos;
-
- int skipDepth;
- xmlSchemaItemListPtr nodeQNames;
- int hasKeyrefs;
- int createIDCNodeTables;
- int psviExposeIDCNodeTables;
-
- /* Locator for error reporting in streaming mode */
- xmlSchemaValidityLocatorFunc locFunc;
- void *locCtxt;
-};
-
-/**
- * xmlSchemaSubstGroup:
- *
- *
- */
-typedef struct _xmlSchemaSubstGroup xmlSchemaSubstGroup;
-typedef xmlSchemaSubstGroup *xmlSchemaSubstGroupPtr;
-struct _xmlSchemaSubstGroup {
- xmlSchemaElementPtr head;
- xmlSchemaItemListPtr members;
-};
-
-/************************************************************************
- * *
- * Some predeclarations *
- * *
- ************************************************************************/
-
-static int xmlSchemaParseInclude(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node);
-static int xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node);
-static int
-xmlSchemaTypeFixup(xmlSchemaTypePtr type,
- xmlSchemaAbstractCtxtPtr ctxt);
-static const xmlChar *
-xmlSchemaFacetTypeToString(xmlSchemaTypeType type);
-static int
-xmlSchemaParseImport(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node);
-static int
-xmlSchemaCheckFacetValues(xmlSchemaTypePtr typeDecl,
- xmlSchemaParserCtxtPtr ctxt);
-static void
-xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt);
-static xmlSchemaWhitespaceValueType
-xmlSchemaGetWhiteSpaceFacetValue(xmlSchemaTypePtr type);
-static xmlSchemaTreeItemPtr
-xmlSchemaParseModelGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node, xmlSchemaTypeType type,
- int withParticle);
-static const xmlChar *
-xmlSchemaGetComponentTypeStr(xmlSchemaBasicItemPtr item);
-static xmlSchemaTypeLinkPtr
-xmlSchemaGetUnionSimpleTypeMemberTypes(xmlSchemaTypePtr type);
-static void
-xmlSchemaInternalErr(xmlSchemaAbstractCtxtPtr actxt,
- const char *funcName,
- const char *message) LIBXML_ATTR_FORMAT(3,0);
-static int
-xmlSchemaCheckCOSSTDerivedOK(xmlSchemaAbstractCtxtPtr ctxt,
- xmlSchemaTypePtr type,
- xmlSchemaTypePtr baseType,
- int subset);
-static void
-xmlSchemaCheckElementDeclComponent(xmlSchemaElementPtr elemDecl,
- xmlSchemaParserCtxtPtr ctxt);
-static void
-xmlSchemaComponentListFree(xmlSchemaItemListPtr list);
-static xmlSchemaQNameRefPtr
-xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node);
-
-/************************************************************************
- * *
- * Helper functions *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaItemTypeToStr:
- * @type: the type of the schema item
- *
- * Returns the component name of a schema item.
- */
-static const xmlChar *
-xmlSchemaItemTypeToStr(xmlSchemaTypeType type)
-{
- switch (type) {
- case XML_SCHEMA_TYPE_BASIC:
- return(BAD_CAST "simple type definition");
- case XML_SCHEMA_TYPE_SIMPLE:
- return(BAD_CAST "simple type definition");
- case XML_SCHEMA_TYPE_COMPLEX:
- return(BAD_CAST "complex type definition");
- case XML_SCHEMA_TYPE_ELEMENT:
- return(BAD_CAST "element declaration");
- case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
- return(BAD_CAST "attribute use");
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- return(BAD_CAST "attribute declaration");
- case XML_SCHEMA_TYPE_GROUP:
- return(BAD_CAST "model group definition");
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- return(BAD_CAST "attribute group definition");
- case XML_SCHEMA_TYPE_NOTATION:
- return(BAD_CAST "notation declaration");
- case XML_SCHEMA_TYPE_SEQUENCE:
- return(BAD_CAST "model group (sequence)");
- case XML_SCHEMA_TYPE_CHOICE:
- return(BAD_CAST "model group (choice)");
- case XML_SCHEMA_TYPE_ALL:
- return(BAD_CAST "model group (all)");
- case XML_SCHEMA_TYPE_PARTICLE:
- return(BAD_CAST "particle");
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- return(BAD_CAST "unique identity-constraint");
- /* return(BAD_CAST "IDC (unique)"); */
- case XML_SCHEMA_TYPE_IDC_KEY:
- return(BAD_CAST "key identity-constraint");
- /* return(BAD_CAST "IDC (key)"); */
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- return(BAD_CAST "keyref identity-constraint");
- /* return(BAD_CAST "IDC (keyref)"); */
- case XML_SCHEMA_TYPE_ANY:
- return(BAD_CAST "wildcard (any)");
- case XML_SCHEMA_EXTRA_QNAMEREF:
- return(BAD_CAST "[helper component] QName reference");
- case XML_SCHEMA_EXTRA_ATTR_USE_PROHIB:
- return(BAD_CAST "[helper component] attribute use prohibition");
- default:
- return(BAD_CAST "Not a schema component");
- }
-}
-
-/**
- * xmlSchemaGetComponentTypeStr:
- * @type: the type of the schema item
- *
- * Returns the component name of a schema item.
- */
-static const xmlChar *
-xmlSchemaGetComponentTypeStr(xmlSchemaBasicItemPtr item)
-{
- switch (item->type) {
- case XML_SCHEMA_TYPE_BASIC:
- if (WXS_IS_COMPLEX(WXS_TYPE_CAST item))
- return(BAD_CAST "complex type definition");
- else
- return(BAD_CAST "simple type definition");
- default:
- return(xmlSchemaItemTypeToStr(item->type));
- }
-}
-
-/**
- * xmlSchemaGetComponentNode:
- * @item: a schema component
- *
- * Returns node associated with the schema component.
- * NOTE that such a node need not be available; plus, a component's
- * node need not to reflect the component directly, since there is no
- * one-to-one relationship between the XML Schema representation and
- * the component representation.
- */
-static xmlNodePtr
-xmlSchemaGetComponentNode(xmlSchemaBasicItemPtr item)
-{
- switch (item->type) {
- case XML_SCHEMA_TYPE_ELEMENT:
- return (((xmlSchemaElementPtr) item)->node);
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- return (((xmlSchemaAttributePtr) item)->node);
- case XML_SCHEMA_TYPE_COMPLEX:
- case XML_SCHEMA_TYPE_SIMPLE:
- return (((xmlSchemaTypePtr) item)->node);
- case XML_SCHEMA_TYPE_ANY:
- case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
- return (((xmlSchemaWildcardPtr) item)->node);
- case XML_SCHEMA_TYPE_PARTICLE:
- return (((xmlSchemaParticlePtr) item)->node);
- case XML_SCHEMA_TYPE_SEQUENCE:
- case XML_SCHEMA_TYPE_CHOICE:
- case XML_SCHEMA_TYPE_ALL:
- return (((xmlSchemaModelGroupPtr) item)->node);
- case XML_SCHEMA_TYPE_GROUP:
- return (((xmlSchemaModelGroupDefPtr) item)->node);
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- return (((xmlSchemaAttributeGroupPtr) item)->node);
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- return (((xmlSchemaIDCPtr) item)->node);
- case XML_SCHEMA_EXTRA_QNAMEREF:
- return(((xmlSchemaQNameRefPtr) item)->node);
- /* TODO: What to do with NOTATIONs?
- case XML_SCHEMA_TYPE_NOTATION:
- return (((xmlSchemaNotationPtr) item)->node);
- */
- case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
- return (((xmlSchemaAttributeUsePtr) item)->node);
- default:
- return (NULL);
- }
-}
-
-#if 0
-/**
- * xmlSchemaGetNextComponent:
- * @item: a schema component
- *
- * Returns the next sibling of the schema component.
- */
-static xmlSchemaBasicItemPtr
-xmlSchemaGetNextComponent(xmlSchemaBasicItemPtr item)
-{
- switch (item->type) {
- case XML_SCHEMA_TYPE_ELEMENT:
- return ((xmlSchemaBasicItemPtr) ((xmlSchemaElementPtr) item)->next);
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- return ((xmlSchemaBasicItemPtr) ((xmlSchemaAttributePtr) item)->next);
- case XML_SCHEMA_TYPE_COMPLEX:
- case XML_SCHEMA_TYPE_SIMPLE:
- return ((xmlSchemaBasicItemPtr) ((xmlSchemaTypePtr) item)->next);
- case XML_SCHEMA_TYPE_ANY:
- case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
- return (NULL);
- case XML_SCHEMA_TYPE_PARTICLE:
- return ((xmlSchemaBasicItemPtr) ((xmlSchemaParticlePtr) item)->next);
- case XML_SCHEMA_TYPE_SEQUENCE:
- case XML_SCHEMA_TYPE_CHOICE:
- case XML_SCHEMA_TYPE_ALL:
- return (NULL);
- case XML_SCHEMA_TYPE_GROUP:
- return (NULL);
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- return ((xmlSchemaBasicItemPtr) ((xmlSchemaAttributeGroupPtr) item)->next);
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- return ((xmlSchemaBasicItemPtr) ((xmlSchemaIDCPtr) item)->next);
- default:
- return (NULL);
- }
-}
-#endif
-
-
-/**
- * xmlSchemaFormatQName:
- * @buf: the string buffer
- * @namespaceName: the namespace name
- * @localName: the local name
- *
- * Returns the given QName in the format "{namespaceName}localName" or
- * just "localName" if @namespaceName is NULL.
- *
- * Returns the localName if @namespaceName is NULL, a formatted
- * string otherwise.
- */
-static const xmlChar*
-xmlSchemaFormatQName(xmlChar **buf,
- const xmlChar *namespaceName,
- const xmlChar *localName)
-{
- FREE_AND_NULL(*buf)
- if (namespaceName != NULL) {
- *buf = xmlStrdup(BAD_CAST "{");
- *buf = xmlStrcat(*buf, namespaceName);
- *buf = xmlStrcat(*buf, BAD_CAST "}");
- }
- if (localName != NULL) {
- if (namespaceName == NULL)
- return(localName);
- *buf = xmlStrcat(*buf, localName);
- } else {
- *buf = xmlStrcat(*buf, BAD_CAST "(NULL)");
- }
- return ((const xmlChar *) *buf);
-}
-
-static const xmlChar*
-xmlSchemaFormatQNameNs(xmlChar **buf, xmlNsPtr ns, const xmlChar *localName)
-{
- if (ns != NULL)
- return (xmlSchemaFormatQName(buf, ns->href, localName));
- else
- return (xmlSchemaFormatQName(buf, NULL, localName));
-}
-
-static const xmlChar *
-xmlSchemaGetComponentName(xmlSchemaBasicItemPtr item)
-{
- switch (item->type) {
- case XML_SCHEMA_TYPE_ELEMENT:
- return (((xmlSchemaElementPtr) item)->name);
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- return (((xmlSchemaAttributePtr) item)->name);
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- return (((xmlSchemaAttributeGroupPtr) item)->name);
- case XML_SCHEMA_TYPE_BASIC:
- case XML_SCHEMA_TYPE_SIMPLE:
- case XML_SCHEMA_TYPE_COMPLEX:
- return (((xmlSchemaTypePtr) item)->name);
- case XML_SCHEMA_TYPE_GROUP:
- return (((xmlSchemaModelGroupDefPtr) item)->name);
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- return (((xmlSchemaIDCPtr) item)->name);
- case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
- if (WXS_ATTRUSE_DECL(item) != NULL) {
- return(xmlSchemaGetComponentName(
- WXS_BASIC_CAST WXS_ATTRUSE_DECL(item)));
- } else
- return(NULL);
- case XML_SCHEMA_EXTRA_QNAMEREF:
- return (((xmlSchemaQNameRefPtr) item)->name);
- case XML_SCHEMA_TYPE_NOTATION:
- return (((xmlSchemaNotationPtr) item)->name);
- default:
- /*
- * Other components cannot have names.
- */
- break;
- }
- return (NULL);
-}
-
-#define xmlSchemaGetQNameRefName(r) (WXS_QNAME_CAST (r))->name
-#define xmlSchemaGetQNameRefTargetNs(r) (WXS_QNAME_CAST (r))->targetNamespace
-/*
-static const xmlChar *
-xmlSchemaGetQNameRefName(void *ref)
-{
- return(((xmlSchemaQNameRefPtr) ref)->name);
-}
-
-static const xmlChar *
-xmlSchemaGetQNameRefTargetNs(void *ref)
-{
- return(((xmlSchemaQNameRefPtr) ref)->targetNamespace);
-}
-*/
-
-static const xmlChar *
-xmlSchemaGetComponentTargetNs(xmlSchemaBasicItemPtr item)
-{
- switch (item->type) {
- case XML_SCHEMA_TYPE_ELEMENT:
- return (((xmlSchemaElementPtr) item)->targetNamespace);
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- return (((xmlSchemaAttributePtr) item)->targetNamespace);
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- return (((xmlSchemaAttributeGroupPtr) item)->targetNamespace);
- case XML_SCHEMA_TYPE_BASIC:
- return (BAD_CAST "http://www.w3.org/2001/XMLSchema");
- case XML_SCHEMA_TYPE_SIMPLE:
- case XML_SCHEMA_TYPE_COMPLEX:
- return (((xmlSchemaTypePtr) item)->targetNamespace);
- case XML_SCHEMA_TYPE_GROUP:
- return (((xmlSchemaModelGroupDefPtr) item)->targetNamespace);
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- return (((xmlSchemaIDCPtr) item)->targetNamespace);
- case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
- if (WXS_ATTRUSE_DECL(item) != NULL) {
- return(xmlSchemaGetComponentTargetNs(
- WXS_BASIC_CAST WXS_ATTRUSE_DECL(item)));
- }
- /* TODO: Will returning NULL break something? */
- break;
- case XML_SCHEMA_EXTRA_QNAMEREF:
- return (((xmlSchemaQNameRefPtr) item)->targetNamespace);
- case XML_SCHEMA_TYPE_NOTATION:
- return (((xmlSchemaNotationPtr) item)->targetNamespace);
- default:
- /*
- * Other components cannot have names.
- */
- break;
- }
- return (NULL);
-}
-
-static const xmlChar*
-xmlSchemaGetComponentQName(xmlChar **buf,
- void *item)
-{
- return (xmlSchemaFormatQName(buf,
- xmlSchemaGetComponentTargetNs((xmlSchemaBasicItemPtr) item),
- xmlSchemaGetComponentName((xmlSchemaBasicItemPtr) item)));
-}
-
-static const xmlChar*
-xmlSchemaGetComponentDesignation(xmlChar **buf, void *item)
-{
- xmlChar *str = NULL;
-
- *buf = xmlStrcat(*buf, WXS_ITEM_TYPE_NAME(item));
- *buf = xmlStrcat(*buf, BAD_CAST " '");
- *buf = xmlStrcat(*buf, xmlSchemaGetComponentQName(&str,
- (xmlSchemaBasicItemPtr) item));
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- FREE_AND_NULL(str);
- return(*buf);
-}
-
-static const xmlChar*
-xmlSchemaGetIDCDesignation(xmlChar **buf, xmlSchemaIDCPtr idc)
-{
- return(xmlSchemaGetComponentDesignation(buf, idc));
-}
-
-/**
- * xmlSchemaWildcardPCToString:
- * @pc: the type of processContents
- *
- * Returns a string representation of the type of
- * processContents.
- */
-static const xmlChar *
-xmlSchemaWildcardPCToString(int pc)
-{
- switch (pc) {
- case XML_SCHEMAS_ANY_SKIP:
- return (BAD_CAST "skip");
- case XML_SCHEMAS_ANY_LAX:
- return (BAD_CAST "lax");
- case XML_SCHEMAS_ANY_STRICT:
- return (BAD_CAST "strict");
- default:
- return (BAD_CAST "invalid process contents");
- }
-}
-
-/**
- * xmlSchemaGetCanonValueWhtspExt:
- * @val: the precomputed value
- * @retValue: the returned value
- * @ws: the whitespace type of the value
- *
- * Get a the canonical representation of the value.
- * The caller has to free the returned retValue.
- *
- * Returns 0 if the value could be built and -1 in case of
- * API errors or if the value type is not supported yet.
- */
-static int
-xmlSchemaGetCanonValueWhtspExt(xmlSchemaValPtr val,
- xmlSchemaWhitespaceValueType ws,
- xmlChar **retValue)
-{
- int list;
- xmlSchemaValType valType;
- const xmlChar *value, *value2 = NULL;
-
-
- if ((retValue == NULL) || (val == NULL))
- return (-1);
- list = xmlSchemaValueGetNext(val) ? 1 : 0;
- *retValue = NULL;
- do {
- value = NULL;
- valType = xmlSchemaGetValType(val);
- switch (valType) {
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_NORMSTRING:
- case XML_SCHEMAS_ANYSIMPLETYPE:
- value = xmlSchemaValueGetAsString(val);
- if (value != NULL) {
- if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- value2 = xmlSchemaCollapseString(value);
- else if (ws == XML_SCHEMA_WHITESPACE_REPLACE)
- value2 = xmlSchemaWhiteSpaceReplace(value);
- if (value2 != NULL)
- value = value2;
- }
- break;
- default:
- if (xmlSchemaGetCanonValue(val, &value2) == -1) {
- if (value2 != NULL)
- xmlFree((xmlChar *) value2);
- goto internal_error;
- }
- value = value2;
- }
- if (*retValue == NULL)
- if (value == NULL) {
- if (! list)
- *retValue = xmlStrdup(BAD_CAST "");
- } else
- *retValue = xmlStrdup(value);
- else if (value != NULL) {
- /* List. */
- *retValue = xmlStrcat((xmlChar *) *retValue, BAD_CAST " ");
- *retValue = xmlStrcat((xmlChar *) *retValue, value);
- }
- FREE_AND_NULL(value2)
- val = xmlSchemaValueGetNext(val);
- } while (val != NULL);
-
- return (0);
-internal_error:
- if (*retValue != NULL)
- xmlFree((xmlChar *) (*retValue));
- if (value2 != NULL)
- xmlFree((xmlChar *) value2);
- return (-1);
-}
-
-/**
- * xmlSchemaFormatItemForReport:
- * @buf: the string buffer
- * @itemDes: the designation of the item
- * @itemName: the name of the item
- * @item: the item as an object
- * @itemNode: the node of the item
- * @local: the local name
- * @parsing: if the function is used during the parse
- *
- * Returns a representation of the given item used
- * for error reports.
- *
- * The following order is used to build the resulting
- * designation if the arguments are not NULL:
- * 1a. If itemDes not NULL -> itemDes
- * 1b. If (itemDes not NULL) and (itemName not NULL)
- * -> itemDes + itemName
- * 2. If the preceding was NULL and (item not NULL) -> item
- * 3. If the preceding was NULL and (itemNode not NULL) -> itemNode
- *
- * If the itemNode is an attribute node, the name of the attribute
- * will be appended to the result.
- *
- * Returns the formatted string and sets @buf to the resulting value.
- */
-static xmlChar*
-xmlSchemaFormatItemForReport(xmlChar **buf,
- const xmlChar *itemDes,
- xmlSchemaBasicItemPtr item,
- xmlNodePtr itemNode)
-{
- xmlChar *str = NULL;
- int named = 1;
-
- if (*buf != NULL) {
- xmlFree(*buf);
- *buf = NULL;
- }
-
- if (itemDes != NULL) {
- *buf = xmlStrdup(itemDes);
- } else if (item != NULL) {
- switch (item->type) {
- case XML_SCHEMA_TYPE_BASIC: {
- xmlSchemaTypePtr type = WXS_TYPE_CAST item;
-
- if (WXS_IS_ATOMIC(type))
- *buf = xmlStrdup(BAD_CAST "atomic type 'xs:");
- else if (WXS_IS_LIST(type))
- *buf = xmlStrdup(BAD_CAST "list type 'xs:");
- else if (WXS_IS_UNION(type))
- *buf = xmlStrdup(BAD_CAST "union type 'xs:");
- else
- *buf = xmlStrdup(BAD_CAST "simple type 'xs:");
- *buf = xmlStrcat(*buf, type->name);
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- }
- break;
- case XML_SCHEMA_TYPE_SIMPLE: {
- xmlSchemaTypePtr type = WXS_TYPE_CAST item;
-
- if (type->flags & XML_SCHEMAS_TYPE_GLOBAL) {
- *buf = xmlStrdup(BAD_CAST"");
- } else {
- *buf = xmlStrdup(BAD_CAST "local ");
- }
- if (WXS_IS_ATOMIC(type))
- *buf = xmlStrcat(*buf, BAD_CAST "atomic type");
- else if (WXS_IS_LIST(type))
- *buf = xmlStrcat(*buf, BAD_CAST "list type");
- else if (WXS_IS_UNION(type))
- *buf = xmlStrcat(*buf, BAD_CAST "union type");
- else
- *buf = xmlStrcat(*buf, BAD_CAST "simple type");
- if (type->flags & XML_SCHEMAS_TYPE_GLOBAL) {
- *buf = xmlStrcat(*buf, BAD_CAST " '");
- *buf = xmlStrcat(*buf, type->name);
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- }
- }
- break;
- case XML_SCHEMA_TYPE_COMPLEX: {
- xmlSchemaTypePtr type = WXS_TYPE_CAST item;
-
- if (type->flags & XML_SCHEMAS_TYPE_GLOBAL)
- *buf = xmlStrdup(BAD_CAST "");
- else
- *buf = xmlStrdup(BAD_CAST "local ");
- *buf = xmlStrcat(*buf, BAD_CAST "complex type");
- if (type->flags & XML_SCHEMAS_TYPE_GLOBAL) {
- *buf = xmlStrcat(*buf, BAD_CAST " '");
- *buf = xmlStrcat(*buf, type->name);
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- }
- }
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE_USE: {
- xmlSchemaAttributeUsePtr ause;
-
- ause = WXS_ATTR_USE_CAST item;
- *buf = xmlStrdup(BAD_CAST "attribute use ");
- if (WXS_ATTRUSE_DECL(ause) != NULL) {
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- *buf = xmlStrcat(*buf,
- xmlSchemaGetComponentQName(&str, WXS_ATTRUSE_DECL(ause)));
- FREE_AND_NULL(str)
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- } else {
- *buf = xmlStrcat(*buf, BAD_CAST "(unknown)");
- }
- }
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE: {
- xmlSchemaAttributePtr attr;
-
- attr = (xmlSchemaAttributePtr) item;
- *buf = xmlStrdup(BAD_CAST "attribute decl.");
- *buf = xmlStrcat(*buf, BAD_CAST " '");
- *buf = xmlStrcat(*buf, xmlSchemaFormatQName(&str,
- attr->targetNamespace, attr->name));
- FREE_AND_NULL(str)
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- }
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- xmlSchemaGetComponentDesignation(buf, item);
- break;
- case XML_SCHEMA_TYPE_ELEMENT: {
- xmlSchemaElementPtr elem;
-
- elem = (xmlSchemaElementPtr) item;
- *buf = xmlStrdup(BAD_CAST "element decl.");
- *buf = xmlStrcat(*buf, BAD_CAST " '");
- *buf = xmlStrcat(*buf, xmlSchemaFormatQName(&str,
- elem->targetNamespace, elem->name));
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- }
- break;
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- if (item->type == XML_SCHEMA_TYPE_IDC_UNIQUE)
- *buf = xmlStrdup(BAD_CAST "unique '");
- else if (item->type == XML_SCHEMA_TYPE_IDC_KEY)
- *buf = xmlStrdup(BAD_CAST "key '");
- else
- *buf = xmlStrdup(BAD_CAST "keyRef '");
- *buf = xmlStrcat(*buf, ((xmlSchemaIDCPtr) item)->name);
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- break;
- case XML_SCHEMA_TYPE_ANY:
- case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
- *buf = xmlStrdup(xmlSchemaWildcardPCToString(
- ((xmlSchemaWildcardPtr) item)->processContents));
- *buf = xmlStrcat(*buf, BAD_CAST " wildcard");
- break;
- case XML_SCHEMA_FACET_MININCLUSIVE:
- case XML_SCHEMA_FACET_MINEXCLUSIVE:
- case XML_SCHEMA_FACET_MAXINCLUSIVE:
- case XML_SCHEMA_FACET_MAXEXCLUSIVE:
- case XML_SCHEMA_FACET_TOTALDIGITS:
- case XML_SCHEMA_FACET_FRACTIONDIGITS:
- case XML_SCHEMA_FACET_PATTERN:
- case XML_SCHEMA_FACET_ENUMERATION:
- case XML_SCHEMA_FACET_WHITESPACE:
- case XML_SCHEMA_FACET_LENGTH:
- case XML_SCHEMA_FACET_MAXLENGTH:
- case XML_SCHEMA_FACET_MINLENGTH:
- *buf = xmlStrdup(BAD_CAST "facet '");
- *buf = xmlStrcat(*buf, xmlSchemaFacetTypeToString(item->type));
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- break;
- case XML_SCHEMA_TYPE_GROUP: {
- *buf = xmlStrdup(BAD_CAST "model group def.");
- *buf = xmlStrcat(*buf, BAD_CAST " '");
- *buf = xmlStrcat(*buf, xmlSchemaGetComponentQName(&str, item));
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- FREE_AND_NULL(str)
- }
- break;
- case XML_SCHEMA_TYPE_SEQUENCE:
- case XML_SCHEMA_TYPE_CHOICE:
- case XML_SCHEMA_TYPE_ALL:
- case XML_SCHEMA_TYPE_PARTICLE:
- *buf = xmlStrdup(WXS_ITEM_TYPE_NAME(item));
- break;
- case XML_SCHEMA_TYPE_NOTATION: {
- *buf = xmlStrdup(WXS_ITEM_TYPE_NAME(item));
- *buf = xmlStrcat(*buf, BAD_CAST " '");
- *buf = xmlStrcat(*buf, xmlSchemaGetComponentQName(&str, item));
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- FREE_AND_NULL(str);
- }
- default:
- named = 0;
- }
- } else
- named = 0;
-
- if ((named == 0) && (itemNode != NULL)) {
- xmlNodePtr elem;
-
- if (itemNode->type == XML_ATTRIBUTE_NODE)
- elem = itemNode->parent;
- else
- elem = itemNode;
- *buf = xmlStrdup(BAD_CAST "Element '");
- if (elem->ns != NULL) {
- *buf = xmlStrcat(*buf,
- xmlSchemaFormatQName(&str, elem->ns->href, elem->name));
- FREE_AND_NULL(str)
- } else
- *buf = xmlStrcat(*buf, elem->name);
- *buf = xmlStrcat(*buf, BAD_CAST "'");
-
- }
- if ((itemNode != NULL) && (itemNode->type == XML_ATTRIBUTE_NODE)) {
- *buf = xmlStrcat(*buf, BAD_CAST ", attribute '");
- if (itemNode->ns != NULL) {
- *buf = xmlStrcat(*buf, xmlSchemaFormatQName(&str,
- itemNode->ns->href, itemNode->name));
- FREE_AND_NULL(str)
- } else
- *buf = xmlStrcat(*buf, itemNode->name);
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- }
- FREE_AND_NULL(str)
-
- return (xmlEscapeFormatString(buf));
-}
-
-/**
- * xmlSchemaFormatFacetEnumSet:
- * @buf: the string buffer
- * @type: the type holding the enumeration facets
- *
- * Builds a string consisting of all enumeration elements.
- *
- * Returns a string of all enumeration elements.
- */
-static const xmlChar *
-xmlSchemaFormatFacetEnumSet(xmlSchemaAbstractCtxtPtr actxt,
- xmlChar **buf, xmlSchemaTypePtr type)
-{
- xmlSchemaFacetPtr facet;
- xmlSchemaWhitespaceValueType ws;
- xmlChar *value = NULL;
- int res, found = 0;
-
- if (*buf != NULL)
- xmlFree(*buf);
- *buf = NULL;
-
- do {
- /*
- * Use the whitespace type of the base type.
- */
- ws = xmlSchemaGetWhiteSpaceFacetValue(type->baseType);
- for (facet = type->facets; facet != NULL; facet = facet->next) {
- if (facet->type != XML_SCHEMA_FACET_ENUMERATION)
- continue;
- found = 1;
- res = xmlSchemaGetCanonValueWhtspExt(facet->val,
- ws, &value);
- if (res == -1) {
- xmlSchemaInternalErr(actxt,
- "xmlSchemaFormatFacetEnumSet",
- "compute the canonical lexical representation");
- if (*buf != NULL)
- xmlFree(*buf);
- *buf = NULL;
- return (NULL);
- }
- if (*buf == NULL)
- *buf = xmlStrdup(BAD_CAST "'");
- else
- *buf = xmlStrcat(*buf, BAD_CAST ", '");
- *buf = xmlStrcat(*buf, BAD_CAST value);
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- if (value != NULL) {
- xmlFree((xmlChar *)value);
- value = NULL;
- }
- }
- /*
- * The enumeration facet of a type restricts the enumeration
- * facet of the ancestor type; i.e., such restricted enumerations
- * do not belong to the set of the given type. Thus we break
- * on the first found enumeration.
- */
- if (found)
- break;
- type = type->baseType;
- } while ((type != NULL) && (type->type != XML_SCHEMA_TYPE_BASIC));
-
- return ((const xmlChar *) *buf);
-}
-
-/************************************************************************
- * *
- * Error functions *
- * *
- ************************************************************************/
-
-#if 0
-static void
-xmlSchemaErrMemory(const char *msg)
-{
- __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, NULL, NULL,
- msg);
-}
-#endif
-
-static void
-xmlSchemaPSimpleErr(const char *msg)
-{
- __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, NULL, NULL,
- msg);
-}
-
-/**
- * xmlSchemaPErrMemory:
- * @node: a context node
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchemaPErrMemory(xmlSchemaParserCtxtPtr ctxt,
- const char *extra, xmlNodePtr node)
-{
- if (ctxt != NULL)
- ctxt->nberrors++;
- __xmlSimpleError(XML_FROM_SCHEMASP, XML_ERR_NO_MEMORY, node, NULL,
- extra);
-}
-
-/**
- * xmlSchemaPErr:
- * @ctxt: the parsing context
- * @node: the context node
- * @error: the error code
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- *
- * Handle a parser error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchemaPErr(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, int error,
- const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
- xmlGenericErrorFunc channel = NULL;
- xmlStructuredErrorFunc schannel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- ctxt->nberrors++;
- ctxt->err = error;
- channel = ctxt->error;
- data = ctxt->errCtxt;
- schannel = ctxt->serror;
- }
- __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP,
- error, XML_ERR_ERROR, NULL, 0,
- (const char *) str1, (const char *) str2, NULL, 0, 0,
- msg, str1, str2);
-}
-
-/**
- * xmlSchemaPErr2:
- * @ctxt: the parsing context
- * @node: the context node
- * @node: the current child
- * @error: the error code
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- *
- * Handle a parser error
- */
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaPErr2(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
- xmlNodePtr child, int error,
- const char *msg, const xmlChar * str1, const xmlChar * str2)
-{
- if (child != NULL)
- xmlSchemaPErr(ctxt, child, error, msg, str1, str2);
- else
- xmlSchemaPErr(ctxt, node, error, msg, str1, str2);
-}
-
-
-/**
- * xmlSchemaPErrExt:
- * @ctxt: the parsing context
- * @node: the context node
- * @error: the error code
- * @strData1: extra data
- * @strData2: extra data
- * @strData3: extra data
- * @msg: the message
- * @str1: extra parameter for the message display
- * @str2: extra parameter for the message display
- * @str3: extra parameter for the message display
- * @str4: extra parameter for the message display
- * @str5: extra parameter for the message display
- *
- * Handle a parser error
- */
-static void LIBXML_ATTR_FORMAT(7,0)
-xmlSchemaPErrExt(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, int error,
- const xmlChar * strData1, const xmlChar * strData2,
- const xmlChar * strData3, const char *msg, const xmlChar * str1,
- const xmlChar * str2, const xmlChar * str3, const xmlChar * str4,
- const xmlChar * str5)
-{
-
- xmlGenericErrorFunc channel = NULL;
- xmlStructuredErrorFunc schannel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- ctxt->nberrors++;
- ctxt->err = error;
- channel = ctxt->error;
- data = ctxt->errCtxt;
- schannel = ctxt->serror;
- }
- __xmlRaiseError(schannel, channel, data, ctxt, node, XML_FROM_SCHEMASP,
- error, XML_ERR_ERROR, NULL, 0,
- (const char *) strData1, (const char *) strData2,
- (const char *) strData3, 0, 0, msg, str1, str2,
- str3, str4, str5);
-}
-
-/************************************************************************
- * *
- * Allround error functions *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaVTypeErrMemory:
- * @node: a context node
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchemaVErrMemory(xmlSchemaValidCtxtPtr ctxt,
- const char *extra, xmlNodePtr node)
-{
- if (ctxt != NULL) {
- ctxt->nberrors++;
- ctxt->err = XML_SCHEMAV_INTERNAL;
- }
- __xmlSimpleError(XML_FROM_SCHEMASV, XML_ERR_NO_MEMORY, node, NULL,
- extra);
-}
-
-static void LIBXML_ATTR_FORMAT(2,0)
-xmlSchemaPSimpleInternalErr(xmlNodePtr node,
- const char *msg, const xmlChar *str)
-{
- __xmlSimpleError(XML_FROM_SCHEMASP, XML_SCHEMAP_INTERNAL, node,
- msg, (const char *) str);
-}
-
-#define WXS_ERROR_TYPE_ERROR 1
-#define WXS_ERROR_TYPE_WARNING 2
-/**
- * xmlSchemaErr4Line:
- * @ctxt: the validation context
- * @errorLevel: the error level
- * @error: the error code
- * @node: the context node
- * @line: the line number
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- * @str3: extra data
- * @str4: extra data
- *
- * Handle a validation error
- */
-static void LIBXML_ATTR_FORMAT(6,0)
-xmlSchemaErr4Line(xmlSchemaAbstractCtxtPtr ctxt,
- xmlErrorLevel errorLevel,
- int error, xmlNodePtr node, int line, const char *msg,
- const xmlChar *str1, const xmlChar *str2,
- const xmlChar *str3, const xmlChar *str4)
-{
- xmlStructuredErrorFunc schannel = NULL;
- xmlGenericErrorFunc channel = NULL;
- void *data = NULL;
-
- if (ctxt != NULL) {
- if (ctxt->type == XML_SCHEMA_CTXT_VALIDATOR) {
- xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctxt;
- const char *file = NULL;
- int col = 0;
- if (errorLevel != XML_ERR_WARNING) {
- vctxt->nberrors++;
- vctxt->err = error;
- channel = vctxt->error;
- } else {
- channel = vctxt->warning;
- }
- schannel = vctxt->serror;
- data = vctxt->errCtxt;
-
- /*
- * Error node. If we specify a line number, then
- * do not channel any node to the error function.
- */
- if (line == 0) {
- if ((node == NULL) &&
- (vctxt->depth >= 0) &&
- (vctxt->inode != NULL)) {
- node = vctxt->inode->node;
- }
- /*
- * Get filename and line if no node-tree.
- */
- if ((node == NULL) &&
- (vctxt->parserCtxt != NULL) &&
- (vctxt->parserCtxt->input != NULL)) {
- file = vctxt->parserCtxt->input->filename;
- line = vctxt->parserCtxt->input->line;
- col = vctxt->parserCtxt->input->col;
- }
- } else {
- /*
- * Override the given node's (if any) position
- * and channel only the given line number.
- */
- node = NULL;
- /*
- * Get filename.
- */
- if (vctxt->doc != NULL)
- file = (const char *) vctxt->doc->URL;
- else if ((vctxt->parserCtxt != NULL) &&
- (vctxt->parserCtxt->input != NULL))
- file = vctxt->parserCtxt->input->filename;
- }
- if (vctxt->locFunc != NULL) {
- if ((file == NULL) || (line == 0)) {
- unsigned long l;
- const char *f;
- vctxt->locFunc(vctxt->locCtxt, &f, &l);
- if (file == NULL)
- file = f;
- if (line == 0)
- line = (int) l;
- }
- }
- if ((file == NULL) && (vctxt->filename != NULL))
- file = vctxt->filename;
-
- __xmlRaiseError(schannel, channel, data, ctxt,
- node, XML_FROM_SCHEMASV,
- error, errorLevel, file, line,
- (const char *) str1, (const char *) str2,
- (const char *) str3, 0, col, msg, str1, str2, str3, str4);
-
- } else if (ctxt->type == XML_SCHEMA_CTXT_PARSER) {
- xmlSchemaParserCtxtPtr pctxt = (xmlSchemaParserCtxtPtr) ctxt;
- if (errorLevel != XML_ERR_WARNING) {
- pctxt->nberrors++;
- pctxt->err = error;
- channel = pctxt->error;
- } else {
- channel = pctxt->warning;
- }
- schannel = pctxt->serror;
- data = pctxt->errCtxt;
- __xmlRaiseError(schannel, channel, data, ctxt,
- node, XML_FROM_SCHEMASP, error,
- errorLevel, NULL, 0,
- (const char *) str1, (const char *) str2,
- (const char *) str3, 0, 0, msg, str1, str2, str3, str4);
- } else {
- TODO
- }
- }
-}
-
-/**
- * xmlSchemaErr3:
- * @ctxt: the validation context
- * @node: the context node
- * @error: the error code
- * @msg: the error message
- * @str1: extra data
- * @str2: extra data
- * @str3: extra data
- *
- * Handle a validation error
- */
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchemaErr3(xmlSchemaAbstractCtxtPtr actxt,
- int error, xmlNodePtr node, const char *msg,
- const xmlChar *str1, const xmlChar *str2, const xmlChar *str3)
-{
- xmlSchemaErr4Line(actxt, XML_ERR_ERROR, error, node, 0,
- msg, str1, str2, str3, NULL);
-}
-
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchemaErr4(xmlSchemaAbstractCtxtPtr actxt,
- int error, xmlNodePtr node, const char *msg,
- const xmlChar *str1, const xmlChar *str2,
- const xmlChar *str3, const xmlChar *str4)
-{
- xmlSchemaErr4Line(actxt, XML_ERR_ERROR, error, node, 0,
- msg, str1, str2, str3, str4);
-}
-
-static void LIBXML_ATTR_FORMAT(4,0)
-xmlSchemaErr(xmlSchemaAbstractCtxtPtr actxt,
- int error, xmlNodePtr node, const char *msg,
- const xmlChar *str1, const xmlChar *str2)
-{
- xmlSchemaErr4(actxt, error, node, msg, str1, str2, NULL, NULL);
-}
-
-static xmlChar *
-xmlSchemaFormatNodeForError(xmlChar ** msg,
- xmlSchemaAbstractCtxtPtr actxt,
- xmlNodePtr node)
-{
- xmlChar *str = NULL;
-
- *msg = NULL;
- if ((node != NULL) &&
- (node->type != XML_ELEMENT_NODE) &&
- (node->type != XML_ATTRIBUTE_NODE))
- {
- /*
- * Don't try to format other nodes than element and
- * attribute nodes.
- * Play safe and return an empty string.
- */
- *msg = xmlStrdup(BAD_CAST "");
- return(*msg);
- }
- if (node != NULL) {
- /*
- * Work on tree nodes.
- */
- if (node->type == XML_ATTRIBUTE_NODE) {
- xmlNodePtr elem = node->parent;
-
- *msg = xmlStrdup(BAD_CAST "Element '");
- if (elem->ns != NULL)
- *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
- elem->ns->href, elem->name));
- else
- *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
- NULL, elem->name));
- FREE_AND_NULL(str);
- *msg = xmlStrcat(*msg, BAD_CAST "', ");
- *msg = xmlStrcat(*msg, BAD_CAST "attribute '");
- } else {
- *msg = xmlStrdup(BAD_CAST "Element '");
- }
- if (node->ns != NULL)
- *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
- node->ns->href, node->name));
- else
- *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
- NULL, node->name));
- FREE_AND_NULL(str);
- *msg = xmlStrcat(*msg, BAD_CAST "': ");
- } else if (actxt->type == XML_SCHEMA_CTXT_VALIDATOR) {
- xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) actxt;
- /*
- * Work on node infos.
- */
- if (vctxt->inode->nodeType == XML_ATTRIBUTE_NODE) {
- xmlSchemaNodeInfoPtr ielem =
- vctxt->elemInfos[vctxt->depth];
-
- *msg = xmlStrdup(BAD_CAST "Element '");
- *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
- ielem->nsName, ielem->localName));
- FREE_AND_NULL(str);
- *msg = xmlStrcat(*msg, BAD_CAST "', ");
- *msg = xmlStrcat(*msg, BAD_CAST "attribute '");
- } else {
- *msg = xmlStrdup(BAD_CAST "Element '");
- }
- *msg = xmlStrcat(*msg, xmlSchemaFormatQName(&str,
- vctxt->inode->nsName, vctxt->inode->localName));
- FREE_AND_NULL(str);
- *msg = xmlStrcat(*msg, BAD_CAST "': ");
- } else if (actxt->type == XML_SCHEMA_CTXT_PARSER) {
- /*
- * Hmm, no node while parsing?
- * Return an empty string, in case NULL will break something.
- */
- *msg = xmlStrdup(BAD_CAST "");
- } else {
- TODO
- return (NULL);
- }
-
- /*
- * xmlSchemaFormatItemForReport() also returns an escaped format
- * string, so do this before calling it below (in the future).
- */
- xmlEscapeFormatString(msg);
-
- /*
- * VAL TODO: The output of the given schema component is currently
- * disabled.
- */
-#if 0
- if ((type != NULL) && (xmlSchemaIsGlobalItem(type))) {
- *msg = xmlStrcat(*msg, BAD_CAST " [");
- *msg = xmlStrcat(*msg, xmlSchemaFormatItemForReport(&str,
- NULL, type, NULL, 0));
- FREE_AND_NULL(str)
- *msg = xmlStrcat(*msg, BAD_CAST "]");
- }
-#endif
- return (*msg);
-}
-
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlSchemaInternalErr2(xmlSchemaAbstractCtxtPtr actxt,
- const char *funcName,
- const char *message,
- const xmlChar *str1,
- const xmlChar *str2)
-{
- xmlChar *msg = NULL;
-
- if (actxt == NULL)
- return;
- msg = xmlStrdup(BAD_CAST "Internal error: %s, ");
- msg = xmlStrcat(msg, BAD_CAST message);
- msg = xmlStrcat(msg, BAD_CAST ".\n");
-
- if (actxt->type == XML_SCHEMA_CTXT_VALIDATOR)
- xmlSchemaErr3(actxt, XML_SCHEMAV_INTERNAL, NULL,
- (const char *) msg, (const xmlChar *) funcName, str1, str2);
- else if (actxt->type == XML_SCHEMA_CTXT_PARSER)
- xmlSchemaErr3(actxt, XML_SCHEMAP_INTERNAL, NULL,
- (const char *) msg, (const xmlChar *) funcName, str1, str2);
-
- FREE_AND_NULL(msg)
-}
-
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlSchemaInternalErr(xmlSchemaAbstractCtxtPtr actxt,
- const char *funcName,
- const char *message)
-{
- xmlSchemaInternalErr2(actxt, funcName, message, NULL, NULL);
-}
-
-#if 0
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlSchemaPInternalErr(xmlSchemaParserCtxtPtr pctxt,
- const char *funcName,
- const char *message,
- const xmlChar *str1,
- const xmlChar *str2)
-{
- xmlSchemaInternalErr2(ACTXT_CAST pctxt, funcName, message,
- str1, str2);
-}
-#endif
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaCustomErr4(xmlSchemaAbstractCtxtPtr actxt,
- xmlParserErrors error,
- xmlNodePtr node,
- xmlSchemaBasicItemPtr item,
- const char *message,
- const xmlChar *str1, const xmlChar *str2,
- const xmlChar *str3, const xmlChar *str4)
-{
- xmlChar *msg = NULL;
-
- if ((node == NULL) && (item != NULL) &&
- (actxt->type == XML_SCHEMA_CTXT_PARSER)) {
- node = WXS_ITEM_NODE(item);
- xmlSchemaFormatItemForReport(&msg, NULL, item, NULL);
- msg = xmlStrcat(msg, BAD_CAST ": ");
- } else
- xmlSchemaFormatNodeForError(&msg, actxt, node);
- msg = xmlStrcat(msg, (const xmlChar *) message);
- msg = xmlStrcat(msg, BAD_CAST ".\n");
- xmlSchemaErr4(actxt, error, node,
- (const char *) msg, str1, str2, str3, str4);
- FREE_AND_NULL(msg)
-}
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaCustomErr(xmlSchemaAbstractCtxtPtr actxt,
- xmlParserErrors error,
- xmlNodePtr node,
- xmlSchemaBasicItemPtr item,
- const char *message,
- const xmlChar *str1,
- const xmlChar *str2)
-{
- xmlSchemaCustomErr4(actxt, error, node, item,
- message, str1, str2, NULL, NULL);
-}
-
-
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaCustomWarning(xmlSchemaAbstractCtxtPtr actxt,
- xmlParserErrors error,
- xmlNodePtr node,
- xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
- const char *message,
- const xmlChar *str1,
- const xmlChar *str2,
- const xmlChar *str3)
-{
- xmlChar *msg = NULL;
-
- xmlSchemaFormatNodeForError(&msg, actxt, node);
- msg = xmlStrcat(msg, (const xmlChar *) message);
- msg = xmlStrcat(msg, BAD_CAST ".\n");
-
- /* URGENT TODO: Set the error code to something sane. */
- xmlSchemaErr4Line(actxt, XML_ERR_WARNING, error, node, 0,
- (const char *) msg, str1, str2, str3, NULL);
-
- FREE_AND_NULL(msg)
-}
-
-
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaKeyrefErr(xmlSchemaValidCtxtPtr vctxt,
- xmlParserErrors error,
- xmlSchemaPSVIIDCNodePtr idcNode,
- xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
- const char *message,
- const xmlChar *str1,
- const xmlChar *str2)
-{
- xmlChar *msg = NULL, *qname = NULL;
-
- msg = xmlStrdup(BAD_CAST "Element '%s': ");
- msg = xmlStrcat(msg, (const xmlChar *) message);
- msg = xmlStrcat(msg, BAD_CAST ".\n");
- xmlSchemaErr4Line(ACTXT_CAST vctxt, XML_ERR_ERROR,
- error, NULL, idcNode->nodeLine, (const char *) msg,
- xmlSchemaFormatQName(&qname,
- vctxt->nodeQNames->items[idcNode->nodeQNameID +1],
- vctxt->nodeQNames->items[idcNode->nodeQNameID]),
- str1, str2, NULL);
- FREE_AND_NULL(qname);
- FREE_AND_NULL(msg);
-}
-
-static int
-xmlSchemaEvalErrorNodeType(xmlSchemaAbstractCtxtPtr actxt,
- xmlNodePtr node)
-{
- if (node != NULL)
- return (node->type);
- if ((actxt->type == XML_SCHEMA_CTXT_VALIDATOR) &&
- (((xmlSchemaValidCtxtPtr) actxt)->inode != NULL))
- return ( ((xmlSchemaValidCtxtPtr) actxt)->inode->nodeType);
- return (-1);
-}
-
-static int
-xmlSchemaIsGlobalItem(xmlSchemaTypePtr item)
-{
- switch (item->type) {
- case XML_SCHEMA_TYPE_COMPLEX:
- case XML_SCHEMA_TYPE_SIMPLE:
- if (item->flags & XML_SCHEMAS_TYPE_GLOBAL)
- return(1);
- break;
- case XML_SCHEMA_TYPE_GROUP:
- return (1);
- case XML_SCHEMA_TYPE_ELEMENT:
- if ( ((xmlSchemaElementPtr) item)->flags &
- XML_SCHEMAS_ELEM_GLOBAL)
- return(1);
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- if ( ((xmlSchemaAttributePtr) item)->flags &
- XML_SCHEMAS_ATTR_GLOBAL)
- return(1);
- break;
- /* Note that attribute groups are always global. */
- default:
- return(1);
- }
- return (0);
-}
-
-static void
-xmlSchemaSimpleTypeErr(xmlSchemaAbstractCtxtPtr actxt,
- xmlParserErrors error,
- xmlNodePtr node,
- const xmlChar *value,
- xmlSchemaTypePtr type,
- int displayValue)
-{
- xmlChar *msg = NULL;
-
- xmlSchemaFormatNodeForError(&msg, actxt, node);
-
- if (displayValue || (xmlSchemaEvalErrorNodeType(actxt, node) ==
- XML_ATTRIBUTE_NODE))
- msg = xmlStrcat(msg, BAD_CAST "'%s' is not a valid value of ");
- else
- msg = xmlStrcat(msg, BAD_CAST "The character content is not a valid "
- "value of ");
-
- if (! xmlSchemaIsGlobalItem(type))
- msg = xmlStrcat(msg, BAD_CAST "the local ");
- else
- msg = xmlStrcat(msg, BAD_CAST "the ");
-
- if (WXS_IS_ATOMIC(type))
- msg = xmlStrcat(msg, BAD_CAST "atomic type");
- else if (WXS_IS_LIST(type))
- msg = xmlStrcat(msg, BAD_CAST "list type");
- else if (WXS_IS_UNION(type))
- msg = xmlStrcat(msg, BAD_CAST "union type");
-
- if (xmlSchemaIsGlobalItem(type)) {
- xmlChar *str = NULL;
- msg = xmlStrcat(msg, BAD_CAST " '");
- if (type->builtInType != 0) {
- msg = xmlStrcat(msg, BAD_CAST "xs:");
- str = xmlStrdup(type->name);
- } else {
- const xmlChar *qName = xmlSchemaFormatQName(&str, type->targetNamespace, type->name);
- if (!str)
- str = xmlStrdup(qName);
- }
- msg = xmlStrcat(msg, xmlEscapeFormatString(&str));
- msg = xmlStrcat(msg, BAD_CAST "'");
- FREE_AND_NULL(str);
- }
- msg = xmlStrcat(msg, BAD_CAST ".\n");
- if (displayValue || (xmlSchemaEvalErrorNodeType(actxt, node) ==
- XML_ATTRIBUTE_NODE))
- xmlSchemaErr(actxt, error, node, (const char *) msg, value, NULL);
- else
- xmlSchemaErr(actxt, error, node, (const char *) msg, NULL, NULL);
- FREE_AND_NULL(msg)
-}
-
-static const xmlChar *
-xmlSchemaFormatErrorNodeQName(xmlChar ** str,
- xmlSchemaNodeInfoPtr ni,
- xmlNodePtr node)
-{
- if (node != NULL) {
- if (node->ns != NULL)
- return (xmlSchemaFormatQName(str, node->ns->href, node->name));
- else
- return (xmlSchemaFormatQName(str, NULL, node->name));
- } else if (ni != NULL)
- return (xmlSchemaFormatQName(str, ni->nsName, ni->localName));
- return (NULL);
-}
-
-static void
-xmlSchemaIllegalAttrErr(xmlSchemaAbstractCtxtPtr actxt,
- xmlParserErrors error,
- xmlSchemaAttrInfoPtr ni,
- xmlNodePtr node)
-{
- xmlChar *msg = NULL, *str = NULL;
-
- xmlSchemaFormatNodeForError(&msg, actxt, node);
- msg = xmlStrcat(msg, BAD_CAST "The attribute '%s' is not allowed.\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg,
- xmlSchemaFormatErrorNodeQName(&str, (xmlSchemaNodeInfoPtr) ni, node),
- NULL);
- FREE_AND_NULL(str)
- FREE_AND_NULL(msg)
-}
-
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaComplexTypeErr(xmlSchemaAbstractCtxtPtr actxt,
- xmlParserErrors error,
- xmlNodePtr node,
- xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
- const char *message,
- int nbval,
- int nbneg,
- xmlChar **values)
-{
- xmlChar *str = NULL, *msg = NULL;
- xmlChar *localName, *nsName;
- const xmlChar *cur, *end;
- int i;
-
- xmlSchemaFormatNodeForError(&msg, actxt, node);
- msg = xmlStrcat(msg, (const xmlChar *) message);
- msg = xmlStrcat(msg, BAD_CAST ".");
- /*
- * Note that is does not make sense to report that we have a
- * wildcard here, since the wildcard might be unfolded into
- * multiple transitions.
- */
- if (nbval + nbneg > 0) {
- if (nbval + nbneg > 1) {
- str = xmlStrdup(BAD_CAST " Expected is one of ( ");
- } else
- str = xmlStrdup(BAD_CAST " Expected is ( ");
- nsName = NULL;
-
- for (i = 0; i < nbval + nbneg; i++) {
- cur = values[i];
- if (cur == NULL)
- continue;
- if ((cur[0] == 'n') && (cur[1] == 'o') && (cur[2] == 't') &&
- (cur[3] == ' ')) {
- cur += 4;
- str = xmlStrcat(str, BAD_CAST "##other");
- }
- /*
- * Get the local name.
- */
- localName = NULL;
-
- end = cur;
- if (*end == '*') {
- localName = xmlStrdup(BAD_CAST "*");
- end++;
- } else {
- while ((*end != 0) && (*end != '|'))
- end++;
- localName = xmlStrncat(localName, BAD_CAST cur, end - cur);
- }
- if (*end != 0) {
- end++;
- /*
- * Skip "*|*" if they come with negated expressions, since
- * they represent the same negated wildcard.
- */
- if ((nbneg == 0) || (*end != '*') || (*localName != '*')) {
- /*
- * Get the namespace name.
- */
- cur = end;
- if (*end == '*') {
- nsName = xmlStrdup(BAD_CAST "{*}");
- } else {
- while (*end != 0)
- end++;
-
- if (i >= nbval)
- nsName = xmlStrdup(BAD_CAST "{##other:");
- else
- nsName = xmlStrdup(BAD_CAST "{");
-
- nsName = xmlStrncat(nsName, BAD_CAST cur, end - cur);
- nsName = xmlStrcat(nsName, BAD_CAST "}");
- }
- str = xmlStrcat(str, BAD_CAST nsName);
- FREE_AND_NULL(nsName)
- } else {
- FREE_AND_NULL(localName);
- continue;
- }
- }
- str = xmlStrcat(str, BAD_CAST localName);
- FREE_AND_NULL(localName);
-
- if (i < nbval + nbneg -1)
- str = xmlStrcat(str, BAD_CAST ", ");
- }
- str = xmlStrcat(str, BAD_CAST " ).\n");
- msg = xmlStrcat(msg, xmlEscapeFormatString(&str));
- FREE_AND_NULL(str)
- } else
- msg = xmlStrcat(msg, BAD_CAST "\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, NULL, NULL);
- xmlFree(msg);
-}
-
-static void LIBXML_ATTR_FORMAT(8,0)
-xmlSchemaFacetErr(xmlSchemaAbstractCtxtPtr actxt,
- xmlParserErrors error,
- xmlNodePtr node,
- const xmlChar *value,
- unsigned long length,
- xmlSchemaTypePtr type,
- xmlSchemaFacetPtr facet,
- const char *message,
- const xmlChar *str1,
- const xmlChar *str2)
-{
- xmlChar *str = NULL, *msg = NULL;
- xmlSchemaTypeType facetType;
- int nodeType = xmlSchemaEvalErrorNodeType(actxt, node);
-
- xmlSchemaFormatNodeForError(&msg, actxt, node);
- if (error == XML_SCHEMAV_CVC_ENUMERATION_VALID) {
- facetType = XML_SCHEMA_FACET_ENUMERATION;
- /*
- * If enumerations are validated, one must not expect the
- * facet to be given.
- */
- } else
- facetType = facet->type;
- msg = xmlStrcat(msg, BAD_CAST "[");
- msg = xmlStrcat(msg, BAD_CAST "facet '");
- msg = xmlStrcat(msg, xmlSchemaFacetTypeToString(facetType));
- msg = xmlStrcat(msg, BAD_CAST "'] ");
- if (message == NULL) {
- /*
- * Use a default message.
- */
- if ((facetType == XML_SCHEMA_FACET_LENGTH) ||
- (facetType == XML_SCHEMA_FACET_MINLENGTH) ||
- (facetType == XML_SCHEMA_FACET_MAXLENGTH)) {
-
- char len[25], actLen[25];
-
- /* FIXME, TODO: What is the max expected string length of the
- * this value?
- */
- if (nodeType == XML_ATTRIBUTE_NODE)
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' has a length of '%s'; ");
- else
- msg = xmlStrcat(msg, BAD_CAST "The value has a length of '%s'; ");
-
- snprintf(len, 24, "%lu", xmlSchemaGetFacetValueAsULong(facet));
- snprintf(actLen, 24, "%lu", length);
-
- if (facetType == XML_SCHEMA_FACET_LENGTH)
- msg = xmlStrcat(msg,
- BAD_CAST "this differs from the allowed length of '%s'.\n");
- else if (facetType == XML_SCHEMA_FACET_MAXLENGTH)
- msg = xmlStrcat(msg,
- BAD_CAST "this exceeds the allowed maximum length of '%s'.\n");
- else if (facetType == XML_SCHEMA_FACET_MINLENGTH)
- msg = xmlStrcat(msg,
- BAD_CAST "this underruns the allowed minimum length of '%s'.\n");
-
- if (nodeType == XML_ATTRIBUTE_NODE)
- xmlSchemaErr3(actxt, error, node, (const char *) msg,
- value, (const xmlChar *) actLen, (const xmlChar *) len);
- else
- xmlSchemaErr(actxt, error, node, (const char *) msg,
- (const xmlChar *) actLen, (const xmlChar *) len);
-
- } else if (facetType == XML_SCHEMA_FACET_ENUMERATION) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' is not an element "
- "of the set {%s}.\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, value,
- xmlSchemaFormatFacetEnumSet(actxt, &str, type));
- } else if (facetType == XML_SCHEMA_FACET_PATTERN) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' is not accepted "
- "by the pattern '%s'.\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, value,
- facet->value);
- } else if (facetType == XML_SCHEMA_FACET_MININCLUSIVE) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' is less than the "
- "minimum value allowed ('%s').\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, value,
- facet->value);
- } else if (facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' is greater than the "
- "maximum value allowed ('%s').\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, value,
- facet->value);
- } else if (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' must be greater than "
- "'%s'.\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, value,
- facet->value);
- } else if (facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' must be less than "
- "'%s'.\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, value,
- facet->value);
- } else if (facetType == XML_SCHEMA_FACET_TOTALDIGITS) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' has more "
- "digits than are allowed ('%s').\n");
- xmlSchemaErr(actxt, error, node, (const char*) msg, value,
- facet->value);
- } else if (facetType == XML_SCHEMA_FACET_FRACTIONDIGITS) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' has more fractional "
- "digits than are allowed ('%s').\n");
- xmlSchemaErr(actxt, error, node, (const char*) msg, value,
- facet->value);
- } else if (nodeType == XML_ATTRIBUTE_NODE) {
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' is not facet-valid.\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, value, NULL);
- } else {
- msg = xmlStrcat(msg, BAD_CAST "The value is not facet-valid.\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, NULL, NULL);
- }
- } else {
- msg = xmlStrcat(msg, (const xmlChar *) message);
- msg = xmlStrcat(msg, BAD_CAST ".\n");
- xmlSchemaErr(actxt, error, node, (const char *) msg, str1, str2);
- }
- FREE_AND_NULL(str)
- xmlFree(msg);
-}
-
-#define VERROR(err, type, msg) \
- xmlSchemaCustomErr(ACTXT_CAST vctxt, err, NULL, type, msg, NULL, NULL);
-
-#define VERROR_INT(func, msg) xmlSchemaInternalErr(ACTXT_CAST vctxt, func, msg);
-
-#define PERROR_INT(func, msg) xmlSchemaInternalErr(ACTXT_CAST pctxt, func, msg);
-#define PERROR_INT2(func, msg) xmlSchemaInternalErr(ACTXT_CAST ctxt, func, msg);
-
-#define AERROR_INT(func, msg) xmlSchemaInternalErr(actxt, func, msg);
-
-
-/**
- * xmlSchemaPMissingAttrErr:
- * @ctxt: the schema validation context
- * @ownerDes: the designation of the owner
- * @ownerName: the name of the owner
- * @ownerItem: the owner as a schema object
- * @ownerElem: the owner as an element node
- * @node: the parent element node of the missing attribute node
- * @type: the corresponding type of the attribute node
- *
- * Reports an illegal attribute.
- */
-static void
-xmlSchemaPMissingAttrErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaBasicItemPtr ownerItem,
- xmlNodePtr ownerElem,
- const char *name,
- const char *message)
-{
- xmlChar *des = NULL;
-
- xmlSchemaFormatItemForReport(&des, NULL, ownerItem, ownerElem);
-
- if (message != NULL)
- xmlSchemaPErr(ctxt, ownerElem, error, "%s: %s.\n", BAD_CAST des, BAD_CAST message);
- else
- xmlSchemaPErr(ctxt, ownerElem, error,
- "%s: The attribute '%s' is required but missing.\n",
- BAD_CAST des, BAD_CAST name);
- FREE_AND_NULL(des);
-}
-
-
-/**
- * xmlSchemaPResCompAttrErr:
- * @ctxt: the schema validation context
- * @error: the error code
- * @ownerDes: the designation of the owner
- * @ownerItem: the owner as a schema object
- * @ownerElem: the owner as an element node
- * @name: the name of the attribute holding the QName
- * @refName: the referenced local name
- * @refURI: the referenced namespace URI
- * @message: optional message
- *
- * Used to report QName attribute values that failed to resolve
- * to schema components.
- */
-static void
-xmlSchemaPResCompAttrErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaBasicItemPtr ownerItem,
- xmlNodePtr ownerElem,
- const char *name,
- const xmlChar *refName,
- const xmlChar *refURI,
- xmlSchemaTypeType refType,
- const char *refTypeStr)
-{
- xmlChar *des = NULL, *strA = NULL;
-
- xmlSchemaFormatItemForReport(&des, NULL, ownerItem, ownerElem);
- if (refTypeStr == NULL)
- refTypeStr = (const char *) xmlSchemaItemTypeToStr(refType);
- xmlSchemaPErrExt(ctxt, ownerElem, error,
- NULL, NULL, NULL,
- "%s, attribute '%s': The QName value '%s' does not resolve to a(n) "
- "%s.\n", BAD_CAST des, BAD_CAST name,
- xmlSchemaFormatQName(&strA, refURI, refName),
- BAD_CAST refTypeStr, NULL);
- FREE_AND_NULL(des)
- FREE_AND_NULL(strA)
-}
-
-/**
- * xmlSchemaPCustomAttrErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @ownerDes: the designation of the owner
- * @ownerItem: the owner as a schema object
- * @attr: the illegal attribute node
- *
- * Reports an illegal attribute during the parse.
- */
-static void
-xmlSchemaPCustomAttrErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlChar **ownerDes,
- xmlSchemaBasicItemPtr ownerItem,
- xmlAttrPtr attr,
- const char *msg)
-{
- xmlChar *des = NULL;
-
- if (ownerDes == NULL)
- xmlSchemaFormatItemForReport(&des, NULL, ownerItem, attr->parent);
- else if (*ownerDes == NULL) {
- xmlSchemaFormatItemForReport(ownerDes, NULL, ownerItem, attr->parent);
- des = *ownerDes;
- } else
- des = *ownerDes;
- if (attr == NULL) {
- xmlSchemaPErrExt(ctxt, NULL, error, NULL, NULL, NULL,
- "%s, attribute '%s': %s.\n",
- BAD_CAST des, (const xmlChar *) "Unknown",
- (const xmlChar *) msg, NULL, NULL);
- } else {
- xmlSchemaPErrExt(ctxt, (xmlNodePtr) attr, error, NULL, NULL, NULL,
- "%s, attribute '%s': %s.\n",
- BAD_CAST des, attr->name, (const xmlChar *) msg, NULL, NULL);
- }
- if (ownerDes == NULL)
- FREE_AND_NULL(des);
-}
-
-/**
- * xmlSchemaPIllegalAttrErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @ownerDes: the designation of the attribute's owner
- * @ownerItem: the attribute's owner item
- * @attr: the illegal attribute node
- *
- * Reports an illegal attribute during the parse.
- */
-static void
-xmlSchemaPIllegalAttrErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaBasicItemPtr ownerComp ATTRIBUTE_UNUSED,
- xmlAttrPtr attr)
-{
- xmlChar *strA = NULL, *strB = NULL;
-
- xmlSchemaFormatNodeForError(&strA, ACTXT_CAST ctxt, attr->parent);
- xmlSchemaErr4(ACTXT_CAST ctxt, error, (xmlNodePtr) attr,
- "%sThe attribute '%s' is not allowed.\n", BAD_CAST strA,
- xmlSchemaFormatQNameNs(&strB, attr->ns, attr->name),
- NULL, NULL);
- FREE_AND_NULL(strA);
- FREE_AND_NULL(strB);
-}
-
-/**
- * xmlSchemaPCustomErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @itemDes: the designation of the schema item
- * @item: the schema item
- * @itemElem: the node of the schema item
- * @message: the error message
- * @str1: an optional param for the error message
- * @str2: an optional param for the error message
- * @str3: an optional param for the error message
- *
- * Reports an error during parsing.
- */
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaPCustomErrExt(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaBasicItemPtr item,
- xmlNodePtr itemElem,
- const char *message,
- const xmlChar *str1,
- const xmlChar *str2,
- const xmlChar *str3)
-{
- xmlChar *des = NULL, *msg = NULL;
-
- xmlSchemaFormatItemForReport(&des, NULL, item, itemElem);
- msg = xmlStrdup(BAD_CAST "%s: ");
- msg = xmlStrcat(msg, (const xmlChar *) message);
- msg = xmlStrcat(msg, BAD_CAST ".\n");
- if ((itemElem == NULL) && (item != NULL))
- itemElem = WXS_ITEM_NODE(item);
- xmlSchemaPErrExt(ctxt, itemElem, error, NULL, NULL, NULL,
- (const char *) msg, BAD_CAST des, str1, str2, str3, NULL);
- FREE_AND_NULL(des);
- FREE_AND_NULL(msg);
-}
-
-/**
- * xmlSchemaPCustomErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @itemDes: the designation of the schema item
- * @item: the schema item
- * @itemElem: the node of the schema item
- * @message: the error message
- * @str1: the optional param for the error message
- *
- * Reports an error during parsing.
- */
-static void LIBXML_ATTR_FORMAT(5,0)
-xmlSchemaPCustomErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaBasicItemPtr item,
- xmlNodePtr itemElem,
- const char *message,
- const xmlChar *str1)
-{
- xmlSchemaPCustomErrExt(ctxt, error, item, itemElem, message,
- str1, NULL, NULL);
-}
-
-/**
- * xmlSchemaPAttrUseErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @itemDes: the designation of the schema type
- * @item: the schema type
- * @itemElem: the node of the schema type
- * @attr: the invalid schema attribute
- * @message: the error message
- * @str1: the optional param for the error message
- *
- * Reports an attribute use error during parsing.
- */
-static void LIBXML_ATTR_FORMAT(6,0)
-xmlSchemaPAttrUseErr4(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlNodePtr node,
- xmlSchemaBasicItemPtr ownerItem,
- const xmlSchemaAttributeUsePtr attruse,
- const char *message,
- const xmlChar *str1, const xmlChar *str2,
- const xmlChar *str3,const xmlChar *str4)
-{
- xmlChar *str = NULL, *msg = NULL;
-
- xmlSchemaFormatItemForReport(&msg, NULL, ownerItem, NULL);
- msg = xmlStrcat(msg, BAD_CAST ", ");
- msg = xmlStrcat(msg,
- BAD_CAST xmlSchemaFormatItemForReport(&str, NULL,
- WXS_BASIC_CAST attruse, NULL));
- FREE_AND_NULL(str);
- msg = xmlStrcat(msg, BAD_CAST ": ");
- msg = xmlStrcat(msg, (const xmlChar *) message);
- msg = xmlStrcat(msg, BAD_CAST ".\n");
- xmlSchemaErr4(ACTXT_CAST ctxt, error, node,
- (const char *) msg, str1, str2, str3, str4);
- xmlFree(msg);
-}
-
-/**
- * xmlSchemaPIllegalFacetAtomicErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @type: the schema type
- * @baseType: the base type of type
- * @facet: the illegal facet
- *
- * Reports an illegal facet for atomic simple types.
- */
-static void
-xmlSchemaPIllegalFacetAtomicErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaTypePtr type,
- xmlSchemaTypePtr baseType,
- xmlSchemaFacetPtr facet)
-{
- xmlChar *des = NULL, *strT = NULL;
-
- xmlSchemaFormatItemForReport(&des, NULL, WXS_BASIC_CAST type, type->node);
- xmlSchemaPErrExt(ctxt, type->node, error, NULL, NULL, NULL,
- "%s: The facet '%s' is not allowed on types derived from the "
- "type %s.\n",
- BAD_CAST des, xmlSchemaFacetTypeToString(facet->type),
- xmlSchemaFormatItemForReport(&strT, NULL, WXS_BASIC_CAST baseType, NULL),
- NULL, NULL);
- FREE_AND_NULL(des);
- FREE_AND_NULL(strT);
-}
-
-/**
- * xmlSchemaPIllegalFacetListUnionErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @itemDes: the designation of the schema item involved
- * @item: the schema item involved
- * @facet: the illegal facet
- *
- * Reports an illegal facet for <list> and <union>.
- */
-static void
-xmlSchemaPIllegalFacetListUnionErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaTypePtr type,
- xmlSchemaFacetPtr facet)
-{
- xmlChar *des = NULL;
-
- xmlSchemaFormatItemForReport(&des, NULL, WXS_BASIC_CAST type,
- type->node);
- xmlSchemaPErr(ctxt, type->node, error,
- "%s: The facet '%s' is not allowed.\n",
- BAD_CAST des, xmlSchemaFacetTypeToString(facet->type));
- FREE_AND_NULL(des);
-}
-
-/**
- * xmlSchemaPMutualExclAttrErr:
- * @ctxt: the schema validation context
- * @error: the error code
- * @elemDes: the designation of the parent element node
- * @attr: the bad attribute node
- * @type: the corresponding type of the attribute node
- *
- * Reports an illegal attribute.
- */
-static void
-xmlSchemaPMutualExclAttrErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaBasicItemPtr ownerItem,
- xmlAttrPtr attr,
- const char *name1,
- const char *name2)
-{
- xmlChar *des = NULL;
-
- xmlSchemaFormatItemForReport(&des, NULL, WXS_BASIC_CAST ownerItem, attr->parent);
- xmlSchemaPErrExt(ctxt, (xmlNodePtr) attr, error, NULL, NULL, NULL,
- "%s: The attributes '%s' and '%s' are mutually exclusive.\n",
- BAD_CAST des, BAD_CAST name1, BAD_CAST name2, NULL, NULL);
- FREE_AND_NULL(des);
-}
-
-/**
- * xmlSchemaPSimpleTypeErr:
- * @ctxt: the schema validation context
- * @error: the error code
- * @type: the type specifier
- * @ownerDes: the designation of the owner
- * @ownerItem: the schema object if existent
- * @node: the validated node
- * @value: the validated value
- *
- * Reports a simple type validation error.
- * TODO: Should this report the value of an element as well?
- */
-static void LIBXML_ATTR_FORMAT(8,0)
-xmlSchemaPSimpleTypeErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaBasicItemPtr ownerItem ATTRIBUTE_UNUSED,
- xmlNodePtr node,
- xmlSchemaTypePtr type,
- const char *expected,
- const xmlChar *value,
- const char *message,
- const xmlChar *str1,
- const xmlChar *str2)
-{
- xmlChar *msg = NULL;
-
- xmlSchemaFormatNodeForError(&msg, ACTXT_CAST ctxt, node);
- if (message == NULL) {
- /*
- * Use default messages.
- */
- if (type != NULL) {
- if (node->type == XML_ATTRIBUTE_NODE)
- msg = xmlStrcat(msg, BAD_CAST "'%s' is not a valid value of ");
- else
- msg = xmlStrcat(msg, BAD_CAST "The character content is not a "
- "valid value of ");
- if (! xmlSchemaIsGlobalItem(type))
- msg = xmlStrcat(msg, BAD_CAST "the local ");
- else
- msg = xmlStrcat(msg, BAD_CAST "the ");
-
- if (WXS_IS_ATOMIC(type))
- msg = xmlStrcat(msg, BAD_CAST "atomic type");
- else if (WXS_IS_LIST(type))
- msg = xmlStrcat(msg, BAD_CAST "list type");
- else if (WXS_IS_UNION(type))
- msg = xmlStrcat(msg, BAD_CAST "union type");
-
- if (xmlSchemaIsGlobalItem(type)) {
- xmlChar *str = NULL;
- msg = xmlStrcat(msg, BAD_CAST " '");
- if (type->builtInType != 0) {
- msg = xmlStrcat(msg, BAD_CAST "xs:");
- str = xmlStrdup(type->name);
- } else {
- const xmlChar *qName = xmlSchemaFormatQName(&str, type->targetNamespace, type->name);
- if (!str)
- str = xmlStrdup(qName);
- }
- msg = xmlStrcat(msg, xmlEscapeFormatString(&str));
- msg = xmlStrcat(msg, BAD_CAST "'.");
- FREE_AND_NULL(str);
- }
- } else {
- if (node->type == XML_ATTRIBUTE_NODE)
- msg = xmlStrcat(msg, BAD_CAST "The value '%s' is not valid.");
- else
- msg = xmlStrcat(msg, BAD_CAST "The character content is not "
- "valid.");
- }
- if (expected) {
- xmlChar *expectedEscaped = xmlCharStrdup(expected);
- msg = xmlStrcat(msg, BAD_CAST " Expected is '");
- msg = xmlStrcat(msg, xmlEscapeFormatString(&expectedEscaped));
- FREE_AND_NULL(expectedEscaped);
- msg = xmlStrcat(msg, BAD_CAST "'.\n");
- } else
- msg = xmlStrcat(msg, BAD_CAST "\n");
- if (node->type == XML_ATTRIBUTE_NODE)
- xmlSchemaPErr(ctxt, node, error, (const char *) msg, value, NULL);
- else
- xmlSchemaPErr(ctxt, node, error, (const char *) msg, NULL, NULL);
- } else {
- msg = xmlStrcat(msg, BAD_CAST message);
- msg = xmlStrcat(msg, BAD_CAST ".\n");
- xmlSchemaPErrExt(ctxt, node, error, NULL, NULL, NULL,
- (const char*) msg, str1, str2, NULL, NULL, NULL);
- }
- /* Cleanup. */
- FREE_AND_NULL(msg)
-}
-
-/**
- * xmlSchemaPContentErr:
- * @ctxt: the schema parser context
- * @error: the error code
- * @onwerDes: the designation of the holder of the content
- * @ownerItem: the owner item of the holder of the content
- * @ownerElem: the node of the holder of the content
- * @child: the invalid child node
- * @message: the optional error message
- * @content: the optional string describing the correct content
- *
- * Reports an error concerning the content of a schema element.
- */
-static void
-xmlSchemaPContentErr(xmlSchemaParserCtxtPtr ctxt,
- xmlParserErrors error,
- xmlSchemaBasicItemPtr ownerItem,
- xmlNodePtr ownerElem,
- xmlNodePtr child,
- const char *message,
- const char *content)
-{
- xmlChar *des = NULL;
-
- xmlSchemaFormatItemForReport(&des, NULL, ownerItem, ownerElem);
- if (message != NULL)
- xmlSchemaPErr2(ctxt, ownerElem, child, error,
- "%s: %s.\n",
- BAD_CAST des, BAD_CAST message);
- else {
- if (content != NULL) {
- xmlSchemaPErr2(ctxt, ownerElem, child, error,
- "%s: The content is not valid. Expected is %s.\n",
- BAD_CAST des, BAD_CAST content);
- } else {
- xmlSchemaPErr2(ctxt, ownerElem, child, error,
- "%s: The content is not valid.\n",
- BAD_CAST des, NULL);
- }
- }
- FREE_AND_NULL(des)
-}
-
-/************************************************************************
- * *
- * Streamable error functions *
- * *
- ************************************************************************/
-
-
-
-
-/************************************************************************
- * *
- * Validation helper functions *
- * *
- ************************************************************************/
-
-
-/************************************************************************
- * *
- * Allocation functions *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaNewSchemaForParserCtxt:
- * @ctxt: a schema validation context
- *
- * Allocate a new Schema structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlSchemaPtr
-xmlSchemaNewSchema(xmlSchemaParserCtxtPtr ctxt)
-{
- xmlSchemaPtr ret;
-
- ret = (xmlSchemaPtr) xmlMalloc(sizeof(xmlSchema));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating schema", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchema));
- ret->dict = ctxt->dict;
- xmlDictReference(ret->dict);
-
- return (ret);
-}
-
-/**
- * xmlSchemaNewFacet:
- *
- * Allocate a new Facet structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-xmlSchemaFacetPtr
-xmlSchemaNewFacet(void)
-{
- xmlSchemaFacetPtr ret;
-
- ret = (xmlSchemaFacetPtr) xmlMalloc(sizeof(xmlSchemaFacet));
- if (ret == NULL) {
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaFacet));
-
- return (ret);
-}
-
-/**
- * xmlSchemaNewAnnot:
- * @ctxt: a schema validation context
- * @node: a node
- *
- * Allocate a new annotation structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static xmlSchemaAnnotPtr
-xmlSchemaNewAnnot(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlSchemaAnnotPtr ret;
-
- ret = (xmlSchemaAnnotPtr) xmlMalloc(sizeof(xmlSchemaAnnot));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating annotation", node);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaAnnot));
- ret->content = node;
- return (ret);
-}
-
-static xmlSchemaItemListPtr
-xmlSchemaItemListCreate(void)
-{
- xmlSchemaItemListPtr ret;
-
- ret = xmlMalloc(sizeof(xmlSchemaItemList));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL,
- "allocating an item list structure", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaItemList));
- return (ret);
-}
-
-static void
-xmlSchemaItemListClear(xmlSchemaItemListPtr list)
-{
- if (list->items != NULL) {
- xmlFree(list->items);
- list->items = NULL;
- }
- list->nbItems = 0;
- list->sizeItems = 0;
-}
-
-static int
-xmlSchemaItemListAdd(xmlSchemaItemListPtr list, void *item)
-{
- if (list->items == NULL) {
- list->items = (void **) xmlMalloc(
- 20 * sizeof(void *));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
- return(-1);
- }
- list->sizeItems = 20;
- } else if (list->sizeItems <= list->nbItems) {
- list->sizeItems *= 2;
- list->items = (void **) xmlRealloc(list->items,
- list->sizeItems * sizeof(void *));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL, "growing item list", NULL);
- list->sizeItems = 0;
- return(-1);
- }
- }
- list->items[list->nbItems++] = item;
- return(0);
-}
-
-static int
-xmlSchemaItemListAddSize(xmlSchemaItemListPtr list,
- int initialSize,
- void *item)
-{
- if (list->items == NULL) {
- if (initialSize <= 0)
- initialSize = 1;
- list->items = (void **) xmlMalloc(
- initialSize * sizeof(void *));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
- return(-1);
- }
- list->sizeItems = initialSize;
- } else if (list->sizeItems <= list->nbItems) {
- list->sizeItems *= 2;
- list->items = (void **) xmlRealloc(list->items,
- list->sizeItems * sizeof(void *));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL, "growing item list", NULL);
- list->sizeItems = 0;
- return(-1);
- }
- }
- list->items[list->nbItems++] = item;
- return(0);
-}
-
-static int
-xmlSchemaItemListInsert(xmlSchemaItemListPtr list, void *item, int idx)
-{
- if (list->items == NULL) {
- list->items = (void **) xmlMalloc(
- 20 * sizeof(void *));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
- return(-1);
- }
- list->sizeItems = 20;
- } else if (list->sizeItems <= list->nbItems) {
- list->sizeItems *= 2;
- list->items = (void **) xmlRealloc(list->items,
- list->sizeItems * sizeof(void *));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL, "growing item list", NULL);
- list->sizeItems = 0;
- return(-1);
- }
- }
- /*
- * Just append if the index is greater/equal than the item count.
- */
- if (idx >= list->nbItems) {
- list->items[list->nbItems++] = item;
- } else {
- int i;
- for (i = list->nbItems; i > idx; i--)
- list->items[i] = list->items[i-1];
- list->items[idx] = item;
- list->nbItems++;
- }
- return(0);
-}
-
-#if 0 /* enable if ever needed */
-static int
-xmlSchemaItemListInsertSize(xmlSchemaItemListPtr list,
- int initialSize,
- void *item,
- int idx)
-{
- if (list->items == NULL) {
- if (initialSize <= 0)
- initialSize = 1;
- list->items = (void **) xmlMalloc(
- initialSize * sizeof(void *));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating new item list", NULL);
- return(-1);
- }
- list->sizeItems = initialSize;
- } else if (list->sizeItems <= list->nbItems) {
- list->sizeItems *= 2;
- list->items = (void **) xmlRealloc(list->items,
- list->sizeItems * sizeof(void *));
- if (list->items == NULL) {
- xmlSchemaPErrMemory(NULL, "growing item list", NULL);
- list->sizeItems = 0;
- return(-1);
- }
- }
- /*
- * Just append if the index is greater/equal than the item count.
- */
- if (idx >= list->nbItems) {
- list->items[list->nbItems++] = item;
- } else {
- int i;
- for (i = list->nbItems; i > idx; i--)
- list->items[i] = list->items[i-1];
- list->items[idx] = item;
- list->nbItems++;
- }
- return(0);
-}
-#endif
-
-static int
-xmlSchemaItemListRemove(xmlSchemaItemListPtr list, int idx)
-{
- int i;
- if ((list->items == NULL) || (idx >= list->nbItems)) {
- xmlSchemaPSimpleErr("Internal error: xmlSchemaItemListRemove, "
- "index error.\n");
- return(-1);
- }
-
- if (list->nbItems == 1) {
- /* TODO: Really free the list? */
- xmlFree(list->items);
- list->items = NULL;
- list->nbItems = 0;
- list->sizeItems = 0;
- } else if (list->nbItems -1 == idx) {
- list->nbItems--;
- } else {
- for (i = idx; i < list->nbItems -1; i++)
- list->items[i] = list->items[i+1];
- list->nbItems--;
- }
- return(0);
-}
-
-/**
- * xmlSchemaItemListFree:
- * @annot: a schema type structure
- *
- * Deallocate a annotation structure
- */
-static void
-xmlSchemaItemListFree(xmlSchemaItemListPtr list)
-{
- if (list == NULL)
- return;
- if (list->items != NULL)
- xmlFree(list->items);
- xmlFree(list);
-}
-
-static void
-xmlSchemaBucketFree(xmlSchemaBucketPtr bucket)
-{
- if (bucket == NULL)
- return;
- if (bucket->globals != NULL) {
- xmlSchemaComponentListFree(bucket->globals);
- xmlSchemaItemListFree(bucket->globals);
- }
- if (bucket->locals != NULL) {
- xmlSchemaComponentListFree(bucket->locals);
- xmlSchemaItemListFree(bucket->locals);
- }
- if (bucket->relations != NULL) {
- xmlSchemaSchemaRelationPtr prev, cur = bucket->relations;
- do {
- prev = cur;
- cur = cur->next;
- xmlFree(prev);
- } while (cur != NULL);
- }
- if ((! bucket->preserveDoc) && (bucket->doc != NULL)) {
- xmlFreeDoc(bucket->doc);
- }
- if (bucket->type == XML_SCHEMA_SCHEMA_IMPORT) {
- if (WXS_IMPBUCKET(bucket)->schema != NULL)
- xmlSchemaFree(WXS_IMPBUCKET(bucket)->schema);
- }
- xmlFree(bucket);
-}
-
-static xmlSchemaBucketPtr
-xmlSchemaBucketCreate(xmlSchemaParserCtxtPtr pctxt,
- int type, const xmlChar *targetNamespace)
-{
- xmlSchemaBucketPtr ret;
- int size;
- xmlSchemaPtr mainSchema;
-
- if (WXS_CONSTRUCTOR(pctxt)->mainSchema == NULL) {
- PERROR_INT("xmlSchemaBucketCreate",
- "no main schema on constructor");
- return(NULL);
- }
- mainSchema = WXS_CONSTRUCTOR(pctxt)->mainSchema;
- /* Create the schema bucket. */
- if (WXS_IS_BUCKET_INCREDEF(type))
- size = sizeof(xmlSchemaInclude);
- else
- size = sizeof(xmlSchemaImport);
- ret = (xmlSchemaBucketPtr) xmlMalloc(size);
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating schema bucket", NULL);
- return(NULL);
- }
- memset(ret, 0, size);
- ret->targetNamespace = targetNamespace;
- ret->type = type;
- ret->globals = xmlSchemaItemListCreate();
- if (ret->globals == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- ret->locals = xmlSchemaItemListCreate();
- if (ret->locals == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- /*
- * The following will assure that only the first bucket is marked as
- * XML_SCHEMA_SCHEMA_MAIN and it points to the *main* schema.
- * For each following import buckets an xmlSchema will be created.
- * An xmlSchema will be created for every distinct targetNamespace.
- * We assign the targetNamespace to the schemata here.
- */
- if (! WXS_HAS_BUCKETS(pctxt)) {
- if (WXS_IS_BUCKET_INCREDEF(type)) {
- PERROR_INT("xmlSchemaBucketCreate",
- "first bucket but it's an include or redefine");
- xmlSchemaBucketFree(ret);
- return(NULL);
- }
- /* Force the type to be XML_SCHEMA_SCHEMA_MAIN. */
- ret->type = XML_SCHEMA_SCHEMA_MAIN;
- /* Point to the *main* schema. */
- WXS_CONSTRUCTOR(pctxt)->mainBucket = ret;
- WXS_IMPBUCKET(ret)->schema = mainSchema;
- /*
- * Ensure that the main schema gets a targetNamespace.
- */
- mainSchema->targetNamespace = targetNamespace;
- } else {
- if (type == XML_SCHEMA_SCHEMA_MAIN) {
- PERROR_INT("xmlSchemaBucketCreate",
- "main bucket but it's not the first one");
- xmlSchemaBucketFree(ret);
- return(NULL);
- } else if (type == XML_SCHEMA_SCHEMA_IMPORT) {
- /*
- * Create a schema for imports and assign the
- * targetNamespace.
- */
- WXS_IMPBUCKET(ret)->schema = xmlSchemaNewSchema(pctxt);
- if (WXS_IMPBUCKET(ret)->schema == NULL) {
- xmlSchemaBucketFree(ret);
- return(NULL);
- }
- WXS_IMPBUCKET(ret)->schema->targetNamespace = targetNamespace;
- }
- }
- if (WXS_IS_BUCKET_IMPMAIN(type)) {
- int res;
- /*
- * Imports go into the "schemasImports" slot of the main *schema*.
- * Note that we create an import entry for the main schema as well; i.e.,
- * even if there's only one schema, we'll get an import.
- */
- if (mainSchema->schemasImports == NULL) {
- mainSchema->schemasImports = xmlHashCreateDict(5,
- WXS_CONSTRUCTOR(pctxt)->dict);
- if (mainSchema->schemasImports == NULL) {
- xmlSchemaBucketFree(ret);
- return(NULL);
- }
- }
- if (targetNamespace == NULL)
- res = xmlHashAddEntry(mainSchema->schemasImports,
- XML_SCHEMAS_NO_NAMESPACE, ret);
- else
- res = xmlHashAddEntry(mainSchema->schemasImports,
- targetNamespace, ret);
- if (res != 0) {
- PERROR_INT("xmlSchemaBucketCreate",
- "failed to add the schema bucket to the hash");
- xmlSchemaBucketFree(ret);
- return(NULL);
- }
- } else {
- /* Set the @ownerImport of an include bucket. */
- if (WXS_IS_BUCKET_IMPMAIN(WXS_CONSTRUCTOR(pctxt)->bucket->type))
- WXS_INCBUCKET(ret)->ownerImport =
- WXS_IMPBUCKET(WXS_CONSTRUCTOR(pctxt)->bucket);
- else
- WXS_INCBUCKET(ret)->ownerImport =
- WXS_INCBUCKET(WXS_CONSTRUCTOR(pctxt)->bucket)->ownerImport;
-
- /* Includes got into the "includes" slot of the *main* schema. */
- if (mainSchema->includes == NULL) {
- mainSchema->includes = xmlSchemaItemListCreate();
- if (mainSchema->includes == NULL) {
- xmlSchemaBucketFree(ret);
- return(NULL);
- }
- }
- xmlSchemaItemListAdd(mainSchema->includes, ret);
- }
- /*
- * Add to list of all buckets; this is used for lookup
- * during schema construction time only.
- */
- if (xmlSchemaItemListAdd(WXS_CONSTRUCTOR(pctxt)->buckets, ret) == -1)
- return(NULL);
- return(ret);
-}
-
-static int
-xmlSchemaAddItemSize(xmlSchemaItemListPtr *list, int initialSize, void *item)
-{
- if (*list == NULL) {
- *list = xmlSchemaItemListCreate();
- if (*list == NULL)
- return(-1);
- }
- xmlSchemaItemListAddSize(*list, initialSize, item);
- return(0);
-}
-
-/**
- * xmlSchemaFreeAnnot:
- * @annot: a schema type structure
- *
- * Deallocate a annotation structure
- */
-static void
-xmlSchemaFreeAnnot(xmlSchemaAnnotPtr annot)
-{
- if (annot == NULL)
- return;
- if (annot->next == NULL) {
- xmlFree(annot);
- } else {
- xmlSchemaAnnotPtr prev;
-
- do {
- prev = annot;
- annot = annot->next;
- xmlFree(prev);
- } while (annot != NULL);
- }
-}
-
-/**
- * xmlSchemaFreeNotation:
- * @schema: a schema notation structure
- *
- * Deallocate a Schema Notation structure.
- */
-static void
-xmlSchemaFreeNotation(xmlSchemaNotationPtr nota)
-{
- if (nota == NULL)
- return;
- xmlFree(nota);
-}
-
-/**
- * xmlSchemaFreeAttribute:
- * @attr: an attribute declaration
- *
- * Deallocates an attribute declaration structure.
- */
-static void
-xmlSchemaFreeAttribute(xmlSchemaAttributePtr attr)
-{
- if (attr == NULL)
- return;
- if (attr->annot != NULL)
- xmlSchemaFreeAnnot(attr->annot);
- if (attr->defVal != NULL)
- xmlSchemaFreeValue(attr->defVal);
- xmlFree(attr);
-}
-
-/**
- * xmlSchemaFreeAttributeUse:
- * @use: an attribute use
- *
- * Deallocates an attribute use structure.
- */
-static void
-xmlSchemaFreeAttributeUse(xmlSchemaAttributeUsePtr use)
-{
- if (use == NULL)
- return;
- if (use->annot != NULL)
- xmlSchemaFreeAnnot(use->annot);
- if (use->defVal != NULL)
- xmlSchemaFreeValue(use->defVal);
- xmlFree(use);
-}
-
-/**
- * xmlSchemaFreeAttributeUseProhib:
- * @prohib: an attribute use prohibition
- *
- * Deallocates an attribute use structure.
- */
-static void
-xmlSchemaFreeAttributeUseProhib(xmlSchemaAttributeUseProhibPtr prohib)
-{
- if (prohib == NULL)
- return;
- xmlFree(prohib);
-}
-
-/**
- * xmlSchemaFreeWildcardNsSet:
- * set: a schema wildcard namespace
- *
- * Deallocates a list of wildcard constraint structures.
- */
-static void
-xmlSchemaFreeWildcardNsSet(xmlSchemaWildcardNsPtr set)
-{
- xmlSchemaWildcardNsPtr next;
-
- while (set != NULL) {
- next = set->next;
- xmlFree(set);
- set = next;
- }
-}
-
-/**
- * xmlSchemaFreeWildcard:
- * @wildcard: a wildcard structure
- *
- * Deallocates a wildcard structure.
- */
-void
-xmlSchemaFreeWildcard(xmlSchemaWildcardPtr wildcard)
-{
- if (wildcard == NULL)
- return;
- if (wildcard->annot != NULL)
- xmlSchemaFreeAnnot(wildcard->annot);
- if (wildcard->nsSet != NULL)
- xmlSchemaFreeWildcardNsSet(wildcard->nsSet);
- if (wildcard->negNsSet != NULL)
- xmlFree(wildcard->negNsSet);
- xmlFree(wildcard);
-}
-
-/**
- * xmlSchemaFreeAttributeGroup:
- * @schema: a schema attribute group structure
- *
- * Deallocate a Schema Attribute Group structure.
- */
-static void
-xmlSchemaFreeAttributeGroup(xmlSchemaAttributeGroupPtr attrGr)
-{
- if (attrGr == NULL)
- return;
- if (attrGr->annot != NULL)
- xmlSchemaFreeAnnot(attrGr->annot);
- if (attrGr->attrUses != NULL)
- xmlSchemaItemListFree(WXS_LIST_CAST attrGr->attrUses);
- xmlFree(attrGr);
-}
-
-/**
- * xmlSchemaFreeQNameRef:
- * @item: a QName reference structure
- *
- * Deallocatea a QName reference structure.
- */
-static void
-xmlSchemaFreeQNameRef(xmlSchemaQNameRefPtr item)
-{
- xmlFree(item);
-}
-
-/**
- * xmlSchemaFreeTypeLinkList:
- * @alink: a type link
- *
- * Deallocate a list of types.
- */
-static void
-xmlSchemaFreeTypeLinkList(xmlSchemaTypeLinkPtr link)
-{
- xmlSchemaTypeLinkPtr next;
-
- while (link != NULL) {
- next = link->next;
- xmlFree(link);
- link = next;
- }
-}
-
-static void
-xmlSchemaFreeIDCStateObjList(xmlSchemaIDCStateObjPtr sto)
-{
- xmlSchemaIDCStateObjPtr next;
- while (sto != NULL) {
- next = sto->next;
- if (sto->history != NULL)
- xmlFree(sto->history);
- if (sto->xpathCtxt != NULL)
- xmlFreeStreamCtxt((xmlStreamCtxtPtr) sto->xpathCtxt);
- xmlFree(sto);
- sto = next;
- }
-}
-
-/**
- * xmlSchemaFreeIDC:
- * @idc: a identity-constraint definition
- *
- * Deallocates an identity-constraint definition.
- */
-static void
-xmlSchemaFreeIDC(xmlSchemaIDCPtr idcDef)
-{
- xmlSchemaIDCSelectPtr cur, prev;
-
- if (idcDef == NULL)
- return;
- if (idcDef->annot != NULL)
- xmlSchemaFreeAnnot(idcDef->annot);
- /* Selector */
- if (idcDef->selector != NULL) {
- if (idcDef->selector->xpathComp != NULL)
- xmlFreePattern((xmlPatternPtr) idcDef->selector->xpathComp);
- xmlFree(idcDef->selector);
- }
- /* Fields */
- if (idcDef->fields != NULL) {
- cur = idcDef->fields;
- do {
- prev = cur;
- cur = cur->next;
- if (prev->xpathComp != NULL)
- xmlFreePattern((xmlPatternPtr) prev->xpathComp);
- xmlFree(prev);
- } while (cur != NULL);
- }
- xmlFree(idcDef);
-}
-
-/**
- * xmlSchemaFreeElement:
- * @schema: a schema element structure
- *
- * Deallocate a Schema Element structure.
- */
-static void
-xmlSchemaFreeElement(xmlSchemaElementPtr elem)
-{
- if (elem == NULL)
- return;
- if (elem->annot != NULL)
- xmlSchemaFreeAnnot(elem->annot);
- if (elem->contModel != NULL)
- xmlRegFreeRegexp(elem->contModel);
- if (elem->defVal != NULL)
- xmlSchemaFreeValue(elem->defVal);
- xmlFree(elem);
-}
-
-/**
- * xmlSchemaFreeFacet:
- * @facet: a schema facet structure
- *
- * Deallocate a Schema Facet structure.
- */
-void
-xmlSchemaFreeFacet(xmlSchemaFacetPtr facet)
-{
- if (facet == NULL)
- return;
- if (facet->val != NULL)
- xmlSchemaFreeValue(facet->val);
- if (facet->regexp != NULL)
- xmlRegFreeRegexp(facet->regexp);
- if (facet->annot != NULL)
- xmlSchemaFreeAnnot(facet->annot);
- xmlFree(facet);
-}
-
-/**
- * xmlSchemaFreeType:
- * @type: a schema type structure
- *
- * Deallocate a Schema Type structure.
- */
-void
-xmlSchemaFreeType(xmlSchemaTypePtr type)
-{
- if (type == NULL)
- return;
- if (type->annot != NULL)
- xmlSchemaFreeAnnot(type->annot);
- if (type->facets != NULL) {
- xmlSchemaFacetPtr facet, next;
-
- facet = type->facets;
- while (facet != NULL) {
- next = facet->next;
- xmlSchemaFreeFacet(facet);
- facet = next;
- }
- }
- if (type->attrUses != NULL)
- xmlSchemaItemListFree((xmlSchemaItemListPtr) type->attrUses);
- if (type->memberTypes != NULL)
- xmlSchemaFreeTypeLinkList(type->memberTypes);
- if (type->facetSet != NULL) {
- xmlSchemaFacetLinkPtr next, link;
-
- link = type->facetSet;
- do {
- next = link->next;
- xmlFree(link);
- link = next;
- } while (link != NULL);
- }
- if (type->contModel != NULL)
- xmlRegFreeRegexp(type->contModel);
- xmlFree(type);
-}
-
-/**
- * xmlSchemaFreeModelGroupDef:
- * @item: a schema model group definition
- *
- * Deallocates a schema model group definition.
- */
-static void
-xmlSchemaFreeModelGroupDef(xmlSchemaModelGroupDefPtr item)
-{
- if (item->annot != NULL)
- xmlSchemaFreeAnnot(item->annot);
- xmlFree(item);
-}
-
-/**
- * xmlSchemaFreeModelGroup:
- * @item: a schema model group
- *
- * Deallocates a schema model group structure.
- */
-static void
-xmlSchemaFreeModelGroup(xmlSchemaModelGroupPtr item)
-{
- if (item->annot != NULL)
- xmlSchemaFreeAnnot(item->annot);
- xmlFree(item);
-}
-
-static void
-xmlSchemaComponentListFree(xmlSchemaItemListPtr list)
-{
- if ((list == NULL) || (list->nbItems == 0))
- return;
- {
- xmlSchemaTreeItemPtr item;
- xmlSchemaTreeItemPtr *items = (xmlSchemaTreeItemPtr *) list->items;
- int i;
-
- for (i = 0; i < list->nbItems; i++) {
- item = items[i];
- if (item == NULL)
- continue;
- switch (item->type) {
- case XML_SCHEMA_TYPE_SIMPLE:
- case XML_SCHEMA_TYPE_COMPLEX:
- xmlSchemaFreeType((xmlSchemaTypePtr) item);
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- xmlSchemaFreeAttribute((xmlSchemaAttributePtr) item);
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
- xmlSchemaFreeAttributeUse((xmlSchemaAttributeUsePtr) item);
- break;
- case XML_SCHEMA_EXTRA_ATTR_USE_PROHIB:
- xmlSchemaFreeAttributeUseProhib(
- (xmlSchemaAttributeUseProhibPtr) item);
- break;
- case XML_SCHEMA_TYPE_ELEMENT:
- xmlSchemaFreeElement((xmlSchemaElementPtr) item);
- break;
- case XML_SCHEMA_TYPE_PARTICLE:
- if (item->annot != NULL)
- xmlSchemaFreeAnnot(item->annot);
- xmlFree(item);
- break;
- case XML_SCHEMA_TYPE_SEQUENCE:
- case XML_SCHEMA_TYPE_CHOICE:
- case XML_SCHEMA_TYPE_ALL:
- xmlSchemaFreeModelGroup((xmlSchemaModelGroupPtr) item);
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- xmlSchemaFreeAttributeGroup(
- (xmlSchemaAttributeGroupPtr) item);
- break;
- case XML_SCHEMA_TYPE_GROUP:
- xmlSchemaFreeModelGroupDef(
- (xmlSchemaModelGroupDefPtr) item);
- break;
- case XML_SCHEMA_TYPE_ANY:
- case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
- xmlSchemaFreeWildcard((xmlSchemaWildcardPtr) item);
- break;
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- xmlSchemaFreeIDC((xmlSchemaIDCPtr) item);
- break;
- case XML_SCHEMA_TYPE_NOTATION:
- xmlSchemaFreeNotation((xmlSchemaNotationPtr) item);
- break;
- case XML_SCHEMA_EXTRA_QNAMEREF:
- xmlSchemaFreeQNameRef((xmlSchemaQNameRefPtr) item);
- break;
- default: {
- /* TODO: This should never be hit. */
- xmlSchemaPSimpleInternalErr(NULL,
- "Internal error: xmlSchemaComponentListFree, "
- "unexpected component type '%s'\n",
- (const xmlChar *) WXS_ITEM_TYPE_NAME(item));
- }
- break;
- }
- }
- list->nbItems = 0;
- }
-}
-
-/**
- * xmlSchemaFree:
- * @schema: a schema structure
- *
- * Deallocate a Schema structure.
- */
-void
-xmlSchemaFree(xmlSchemaPtr schema)
-{
- if (schema == NULL)
- return;
- /* @volatiles is not used anymore :-/ */
- if (schema->volatiles != NULL)
- TODO
- /*
- * Note that those slots are not responsible for freeing
- * schema components anymore; this will now be done by
- * the schema buckets.
- */
- if (schema->notaDecl != NULL)
- xmlHashFree(schema->notaDecl, NULL);
- if (schema->attrDecl != NULL)
- xmlHashFree(schema->attrDecl, NULL);
- if (schema->attrgrpDecl != NULL)
- xmlHashFree(schema->attrgrpDecl, NULL);
- if (schema->elemDecl != NULL)
- xmlHashFree(schema->elemDecl, NULL);
- if (schema->typeDecl != NULL)
- xmlHashFree(schema->typeDecl, NULL);
- if (schema->groupDecl != NULL)
- xmlHashFree(schema->groupDecl, NULL);
- if (schema->idcDef != NULL)
- xmlHashFree(schema->idcDef, NULL);
-
- if (schema->schemasImports != NULL)
- xmlHashFree(schema->schemasImports,
- (xmlHashDeallocator) xmlSchemaBucketFree);
- if (schema->includes != NULL) {
- xmlSchemaItemListPtr list = (xmlSchemaItemListPtr) schema->includes;
- int i;
- for (i = 0; i < list->nbItems; i++) {
- xmlSchemaBucketFree((xmlSchemaBucketPtr) list->items[i]);
- }
- xmlSchemaItemListFree(list);
- }
- if (schema->annot != NULL)
- xmlSchemaFreeAnnot(schema->annot);
- /* Never free the doc here, since this will be done by the buckets. */
-
- xmlDictFree(schema->dict);
- xmlFree(schema);
-}
-
-/************************************************************************
- * *
- * Debug functions *
- * *
- ************************************************************************/
-
-#ifdef LIBXML_OUTPUT_ENABLED
-
-static void
-xmlSchemaTypeDump(xmlSchemaTypePtr type, FILE * output); /* forward */
-
-/**
- * xmlSchemaElementDump:
- * @elem: an element
- * @output: the file output
- *
- * Dump the element
- */
-static void
-xmlSchemaElementDump(xmlSchemaElementPtr elem, FILE * output,
- const xmlChar * name ATTRIBUTE_UNUSED,
- const xmlChar * namespace ATTRIBUTE_UNUSED,
- const xmlChar * context ATTRIBUTE_UNUSED)
-{
- if (elem == NULL)
- return;
-
-
- fprintf(output, "Element");
- if (elem->flags & XML_SCHEMAS_ELEM_GLOBAL)
- fprintf(output, " (global)");
- fprintf(output, ": '%s' ", elem->name);
- if (namespace != NULL)
- fprintf(output, "ns '%s'", namespace);
- fprintf(output, "\n");
-#if 0
- if ((elem->minOccurs != 1) || (elem->maxOccurs != 1)) {
- fprintf(output, " min %d ", elem->minOccurs);
- if (elem->maxOccurs >= UNBOUNDED)
- fprintf(output, "max: unbounded\n");
- else if (elem->maxOccurs != 1)
- fprintf(output, "max: %d\n", elem->maxOccurs);
- else
- fprintf(output, "\n");
- }
-#endif
- /*
- * Misc other properties.
- */
- if ((elem->flags & XML_SCHEMAS_ELEM_NILLABLE) ||
- (elem->flags & XML_SCHEMAS_ELEM_ABSTRACT) ||
- (elem->flags & XML_SCHEMAS_ELEM_FIXED) ||
- (elem->flags & XML_SCHEMAS_ELEM_DEFAULT)) {
- fprintf(output, " props: ");
- if (elem->flags & XML_SCHEMAS_ELEM_FIXED)
- fprintf(output, "[fixed] ");
- if (elem->flags & XML_SCHEMAS_ELEM_DEFAULT)
- fprintf(output, "[default] ");
- if (elem->flags & XML_SCHEMAS_ELEM_ABSTRACT)
- fprintf(output, "[abstract] ");
- if (elem->flags & XML_SCHEMAS_ELEM_NILLABLE)
- fprintf(output, "[nillable] ");
- fprintf(output, "\n");
- }
- /*
- * Default/fixed value.
- */
- if (elem->value != NULL)
- fprintf(output, " value: '%s'\n", elem->value);
- /*
- * Type.
- */
- if (elem->namedType != NULL) {
- fprintf(output, " type: '%s' ", elem->namedType);
- if (elem->namedTypeNs != NULL)
- fprintf(output, "ns '%s'\n", elem->namedTypeNs);
- else
- fprintf(output, "\n");
- } else if (elem->subtypes != NULL) {
- /*
- * Dump local types.
- */
- xmlSchemaTypeDump(elem->subtypes, output);
- }
- /*
- * Substitution group.
- */
- if (elem->substGroup != NULL) {
- fprintf(output, " substitutionGroup: '%s' ", elem->substGroup);
- if (elem->substGroupNs != NULL)
- fprintf(output, "ns '%s'\n", elem->substGroupNs);
- else
- fprintf(output, "\n");
- }
-}
-
-/**
- * xmlSchemaAnnotDump:
- * @output: the file output
- * @annot: a annotation
- *
- * Dump the annotation
- */
-static void
-xmlSchemaAnnotDump(FILE * output, xmlSchemaAnnotPtr annot)
-{
- xmlChar *content;
-
- if (annot == NULL)
- return;
-
- content = xmlNodeGetContent(annot->content);
- if (content != NULL) {
- fprintf(output, " Annot: %s\n", content);
- xmlFree(content);
- } else
- fprintf(output, " Annot: empty\n");
-}
-
-/**
- * xmlSchemaContentModelDump:
- * @particle: the schema particle
- * @output: the file output
- * @depth: the depth used for intentation
- *
- * Dump a SchemaType structure
- */
-static void
-xmlSchemaContentModelDump(xmlSchemaParticlePtr particle, FILE * output, int depth)
-{
- xmlChar *str = NULL;
- xmlSchemaTreeItemPtr term;
- char shift[100];
- int i;
-
- if (particle == NULL)
- return;
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
- fprintf(output, "%s", shift);
- if (particle->children == NULL) {
- fprintf(output, "MISSING particle term\n");
- return;
- }
- term = particle->children;
- if (term == NULL) {
- fprintf(output, "(NULL)");
- } else {
- switch (term->type) {
- case XML_SCHEMA_TYPE_ELEMENT:
- fprintf(output, "ELEM '%s'", xmlSchemaFormatQName(&str,
- ((xmlSchemaElementPtr)term)->targetNamespace,
- ((xmlSchemaElementPtr)term)->name));
- FREE_AND_NULL(str);
- break;
- case XML_SCHEMA_TYPE_SEQUENCE:
- fprintf(output, "SEQUENCE");
- break;
- case XML_SCHEMA_TYPE_CHOICE:
- fprintf(output, "CHOICE");
- break;
- case XML_SCHEMA_TYPE_ALL:
- fprintf(output, "ALL");
- break;
- case XML_SCHEMA_TYPE_ANY:
- fprintf(output, "ANY");
- break;
- default:
- fprintf(output, "UNKNOWN\n");
- return;
- }
- }
- if (particle->minOccurs != 1)
- fprintf(output, " min: %d", particle->minOccurs);
- if (particle->maxOccurs >= UNBOUNDED)
- fprintf(output, " max: unbounded");
- else if (particle->maxOccurs != 1)
- fprintf(output, " max: %d", particle->maxOccurs);
- fprintf(output, "\n");
- if (term &&
- ((term->type == XML_SCHEMA_TYPE_SEQUENCE) ||
- (term->type == XML_SCHEMA_TYPE_CHOICE) ||
- (term->type == XML_SCHEMA_TYPE_ALL)) &&
- (term->children != NULL)) {
- xmlSchemaContentModelDump((xmlSchemaParticlePtr) term->children,
- output, depth +1);
- }
- if (particle->next != NULL)
- xmlSchemaContentModelDump((xmlSchemaParticlePtr) particle->next,
- output, depth);
-}
-
-/**
- * xmlSchemaAttrUsesDump:
- * @uses: attribute uses list
- * @output: the file output
- *
- * Dumps a list of attribute use components.
- */
-static void
-xmlSchemaAttrUsesDump(xmlSchemaItemListPtr uses, FILE * output)
-{
- xmlSchemaAttributeUsePtr use;
- xmlSchemaAttributeUseProhibPtr prohib;
- xmlSchemaQNameRefPtr ref;
- const xmlChar *name, *tns;
- xmlChar *str = NULL;
- int i;
-
- if ((uses == NULL) || (uses->nbItems == 0))
- return;
-
- fprintf(output, " attributes:\n");
- for (i = 0; i < uses->nbItems; i++) {
- use = uses->items[i];
- if (use->type == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB) {
- fprintf(output, " [prohibition] ");
- prohib = (xmlSchemaAttributeUseProhibPtr) use;
- name = prohib->name;
- tns = prohib->targetNamespace;
- } else if (use->type == XML_SCHEMA_EXTRA_QNAMEREF) {
- fprintf(output, " [reference] ");
- ref = (xmlSchemaQNameRefPtr) use;
- name = ref->name;
- tns = ref->targetNamespace;
- } else {
- fprintf(output, " [use] ");
- name = WXS_ATTRUSE_DECL_NAME(use);
- tns = WXS_ATTRUSE_DECL_TNS(use);
- }
- fprintf(output, "'%s'\n",
- (const char *) xmlSchemaFormatQName(&str, tns, name));
- FREE_AND_NULL(str);
- }
-}
-
-/**
- * xmlSchemaTypeDump:
- * @output: the file output
- * @type: a type structure
- *
- * Dump a SchemaType structure
- */
-static void
-xmlSchemaTypeDump(xmlSchemaTypePtr type, FILE * output)
-{
- if (type == NULL) {
- fprintf(output, "Type: NULL\n");
- return;
- }
- fprintf(output, "Type: ");
- if (type->name != NULL)
- fprintf(output, "'%s' ", type->name);
- else
- fprintf(output, "(no name) ");
- if (type->targetNamespace != NULL)
- fprintf(output, "ns '%s' ", type->targetNamespace);
- switch (type->type) {
- case XML_SCHEMA_TYPE_BASIC:
- fprintf(output, "[basic] ");
- break;
- case XML_SCHEMA_TYPE_SIMPLE:
- fprintf(output, "[simple] ");
- break;
- case XML_SCHEMA_TYPE_COMPLEX:
- fprintf(output, "[complex] ");
- break;
- case XML_SCHEMA_TYPE_SEQUENCE:
- fprintf(output, "[sequence] ");
- break;
- case XML_SCHEMA_TYPE_CHOICE:
- fprintf(output, "[choice] ");
- break;
- case XML_SCHEMA_TYPE_ALL:
- fprintf(output, "[all] ");
- break;
- case XML_SCHEMA_TYPE_UR:
- fprintf(output, "[ur] ");
- break;
- case XML_SCHEMA_TYPE_RESTRICTION:
- fprintf(output, "[restriction] ");
- break;
- case XML_SCHEMA_TYPE_EXTENSION:
- fprintf(output, "[extension] ");
- break;
- default:
- fprintf(output, "[unknown type %d] ", type->type);
- break;
- }
- fprintf(output, "content: ");
- switch (type->contentType) {
- case XML_SCHEMA_CONTENT_UNKNOWN:
- fprintf(output, "[unknown] ");
- break;
- case XML_SCHEMA_CONTENT_EMPTY:
- fprintf(output, "[empty] ");
- break;
- case XML_SCHEMA_CONTENT_ELEMENTS:
- fprintf(output, "[element] ");
- break;
- case XML_SCHEMA_CONTENT_MIXED:
- fprintf(output, "[mixed] ");
- break;
- case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
- /* not used. */
- break;
- case XML_SCHEMA_CONTENT_BASIC:
- fprintf(output, "[basic] ");
- break;
- case XML_SCHEMA_CONTENT_SIMPLE:
- fprintf(output, "[simple] ");
- break;
- case XML_SCHEMA_CONTENT_ANY:
- fprintf(output, "[any] ");
- break;
- }
- fprintf(output, "\n");
- if (type->base != NULL) {
- fprintf(output, " base type: '%s'", type->base);
- if (type->baseNs != NULL)
- fprintf(output, " ns '%s'\n", type->baseNs);
- else
- fprintf(output, "\n");
- }
- if (type->attrUses != NULL)
- xmlSchemaAttrUsesDump(type->attrUses, output);
- if (type->annot != NULL)
- xmlSchemaAnnotDump(output, type->annot);
-#ifdef DUMP_CONTENT_MODEL
- if ((type->type == XML_SCHEMA_TYPE_COMPLEX) &&
- (type->subtypes != NULL)) {
- xmlSchemaContentModelDump((xmlSchemaParticlePtr) type->subtypes,
- output, 1);
- }
-#endif
-}
-
-/**
- * xmlSchemaDump:
- * @output: the file output
- * @schema: a schema structure
- *
- * Dump a Schema structure.
- */
-void
-xmlSchemaDump(FILE * output, xmlSchemaPtr schema)
-{
- if (output == NULL)
- return;
- if (schema == NULL) {
- fprintf(output, "Schemas: NULL\n");
- return;
- }
- fprintf(output, "Schemas: ");
- if (schema->name != NULL)
- fprintf(output, "%s, ", schema->name);
- else
- fprintf(output, "no name, ");
- if (schema->targetNamespace != NULL)
- fprintf(output, "%s", (const char *) schema->targetNamespace);
- else
- fprintf(output, "no target namespace");
- fprintf(output, "\n");
- if (schema->annot != NULL)
- xmlSchemaAnnotDump(output, schema->annot);
- xmlHashScan(schema->typeDecl, (xmlHashScanner) xmlSchemaTypeDump,
- output);
- xmlHashScanFull(schema->elemDecl,
- (xmlHashScannerFull) xmlSchemaElementDump, output);
-}
-
-#ifdef DEBUG_IDC_NODE_TABLE
-/**
- * xmlSchemaDebugDumpIDCTable:
- * @vctxt: the WXS validation context
- *
- * Displays the current IDC table for debug purposes.
- */
-static void
-xmlSchemaDebugDumpIDCTable(FILE * output,
- const xmlChar *namespaceName,
- const xmlChar *localName,
- xmlSchemaPSVIIDCBindingPtr bind)
-{
- xmlChar *str = NULL;
- const xmlChar *value;
- xmlSchemaPSVIIDCNodePtr tab;
- xmlSchemaPSVIIDCKeyPtr key;
- int i, j, res;
-
- fprintf(output, "IDC: TABLES on '%s'\n",
- xmlSchemaFormatQName(&str, namespaceName, localName));
- FREE_AND_NULL(str)
-
- if (bind == NULL)
- return;
- do {
- fprintf(output, "IDC: BINDING '%s' (%d)\n",
- xmlSchemaGetComponentQName(&str,
- bind->definition), bind->nbNodes);
- FREE_AND_NULL(str)
- for (i = 0; i < bind->nbNodes; i++) {
- tab = bind->nodeTable[i];
- fprintf(output, " ( ");
- for (j = 0; j < bind->definition->nbFields; j++) {
- key = tab->keys[j];
- if ((key != NULL) && (key->val != NULL)) {
- res = xmlSchemaGetCanonValue(key->val, &value);
- if (res >= 0)
- fprintf(output, "'%s' ", value);
- else
- fprintf(output, "CANON-VALUE-FAILED ");
- if (res == 0)
- FREE_AND_NULL(value)
- } else if (key != NULL)
- fprintf(output, "(no val), ");
- else
- fprintf(output, "(key missing), ");
- }
- fprintf(output, ")\n");
- }
- if (bind->dupls && bind->dupls->nbItems) {
- fprintf(output, "IDC: dupls (%d):\n", bind->dupls->nbItems);
- for (i = 0; i < bind->dupls->nbItems; i++) {
- tab = bind->dupls->items[i];
- fprintf(output, " ( ");
- for (j = 0; j < bind->definition->nbFields; j++) {
- key = tab->keys[j];
- if ((key != NULL) && (key->val != NULL)) {
- res = xmlSchemaGetCanonValue(key->val, &value);
- if (res >= 0)
- fprintf(output, "'%s' ", value);
- else
- fprintf(output, "CANON-VALUE-FAILED ");
- if (res == 0)
- FREE_AND_NULL(value)
- } else if (key != NULL)
- fprintf(output, "(no val), ");
- else
- fprintf(output, "(key missing), ");
- }
- fprintf(output, ")\n");
- }
- }
- bind = bind->next;
- } while (bind != NULL);
-}
-#endif /* DEBUG_IDC */
-#endif /* LIBXML_OUTPUT_ENABLED */
-
-/************************************************************************
- * *
- * Utilities *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaGetPropNode:
- * @node: the element node
- * @name: the name of the attribute
- *
- * Seeks an attribute with a name of @name in
- * no namespace.
- *
- * Returns the attribute or NULL if not present.
- */
-static xmlAttrPtr
-xmlSchemaGetPropNode(xmlNodePtr node, const char *name)
-{
- xmlAttrPtr prop;
-
- if ((node == NULL) || (name == NULL))
- return(NULL);
- prop = node->properties;
- while (prop != NULL) {
- if ((prop->ns == NULL) && xmlStrEqual(prop->name, BAD_CAST name))
- return(prop);
- prop = prop->next;
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaGetPropNodeNs:
- * @node: the element node
- * @uri: the uri
- * @name: the name of the attribute
- *
- * Seeks an attribute with a local name of @name and
- * a namespace URI of @uri.
- *
- * Returns the attribute or NULL if not present.
- */
-static xmlAttrPtr
-xmlSchemaGetPropNodeNs(xmlNodePtr node, const char *uri, const char *name)
-{
- xmlAttrPtr prop;
-
- if ((node == NULL) || (name == NULL))
- return(NULL);
- prop = node->properties;
- while (prop != NULL) {
- if ((prop->ns != NULL) &&
- xmlStrEqual(prop->name, BAD_CAST name) &&
- xmlStrEqual(prop->ns->href, BAD_CAST uri))
- return(prop);
- prop = prop->next;
- }
- return (NULL);
-}
-
-static const xmlChar *
-xmlSchemaGetNodeContent(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
-{
- xmlChar *val;
- const xmlChar *ret;
-
- val = xmlNodeGetContent(node);
- if (val == NULL)
- val = xmlStrdup((xmlChar *)"");
- ret = xmlDictLookup(ctxt->dict, val, -1);
- xmlFree(val);
- return(ret);
-}
-
-static const xmlChar *
-xmlSchemaGetNodeContentNoDict(xmlNodePtr node)
-{
- return((const xmlChar*) xmlNodeGetContent(node));
-}
-
-/**
- * xmlSchemaGetProp:
- * @ctxt: the parser context
- * @node: the node
- * @name: the property name
- *
- * Read a attribute value and internalize the string
- *
- * Returns the string or NULL if not present.
- */
-static const xmlChar *
-xmlSchemaGetProp(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
- const char *name)
-{
- xmlChar *val;
- const xmlChar *ret;
-
- val = xmlGetNoNsProp(node, BAD_CAST name);
- if (val == NULL)
- return(NULL);
- ret = xmlDictLookup(ctxt->dict, val, -1);
- xmlFree(val);
- return(ret);
-}
-
-/************************************************************************
- * *
- * Parsing functions *
- * *
- ************************************************************************/
-
-#define WXS_FIND_GLOBAL_ITEM(slot) \
- if (xmlStrEqual(nsName, schema->targetNamespace)) { \
- ret = xmlHashLookup(schema->slot, name); \
- if (ret != NULL) goto exit; \
- } \
- if (xmlHashSize(schema->schemasImports) > 1) { \
- xmlSchemaImportPtr import; \
- if (nsName == NULL) \
- import = xmlHashLookup(schema->schemasImports, \
- XML_SCHEMAS_NO_NAMESPACE); \
- else \
- import = xmlHashLookup(schema->schemasImports, nsName); \
- if (import == NULL) \
- goto exit; \
- ret = xmlHashLookup(import->schema->slot, name); \
- }
-
-/**
- * xmlSchemaGetElem:
- * @schema: the schema context
- * @name: the element name
- * @ns: the element namespace
- *
- * Lookup a global element declaration in the schema.
- *
- * Returns the element declaration or NULL if not found.
- */
-static xmlSchemaElementPtr
-xmlSchemaGetElem(xmlSchemaPtr schema, const xmlChar * name,
- const xmlChar * nsName)
-{
- xmlSchemaElementPtr ret = NULL;
-
- if ((name == NULL) || (schema == NULL))
- return(NULL);
- if (schema != NULL) {
- WXS_FIND_GLOBAL_ITEM(elemDecl)
- }
-exit:
-#ifdef DEBUG
- if (ret == NULL) {
- if (nsName == NULL)
- fprintf(stderr, "Unable to lookup element decl. %s", name);
- else
- fprintf(stderr, "Unable to lookup element decl. %s:%s", name,
- nsName);
- }
-#endif
- return (ret);
-}
-
-/**
- * xmlSchemaGetType:
- * @schema: the main schema
- * @name: the type's name
- * nsName: the type's namespace
- *
- * Lookup a type in the schemas or the predefined types
- *
- * Returns the group definition or NULL if not found.
- */
-static xmlSchemaTypePtr
-xmlSchemaGetType(xmlSchemaPtr schema, const xmlChar * name,
- const xmlChar * nsName)
-{
- xmlSchemaTypePtr ret = NULL;
-
- if (name == NULL)
- return (NULL);
- /* First try the built-in types. */
- if ((nsName != NULL) && xmlStrEqual(nsName, xmlSchemaNs)) {
- ret = xmlSchemaGetPredefinedType(name, nsName);
- if (ret != NULL)
- goto exit;
- /*
- * Note that we try the parsed schemas as well here
- * since one might have parsed the S4S, which contain more
- * than the built-in types.
- * TODO: Can we optimize this?
- */
- }
- if (schema != NULL) {
- WXS_FIND_GLOBAL_ITEM(typeDecl)
- }
-exit:
-
-#ifdef DEBUG
- if (ret == NULL) {
- if (nsName == NULL)
- fprintf(stderr, "Unable to lookup type %s", name);
- else
- fprintf(stderr, "Unable to lookup type %s:%s", name,
- nsName);
- }
-#endif
- return (ret);
-}
-
-/**
- * xmlSchemaGetAttributeDecl:
- * @schema: the context of the schema
- * @name: the name of the attribute
- * @ns: the target namespace of the attribute
- *
- * Lookup a an attribute in the schema or imported schemas
- *
- * Returns the attribute declaration or NULL if not found.
- */
-static xmlSchemaAttributePtr
-xmlSchemaGetAttributeDecl(xmlSchemaPtr schema, const xmlChar * name,
- const xmlChar * nsName)
-{
- xmlSchemaAttributePtr ret = NULL;
-
- if ((name == NULL) || (schema == NULL))
- return (NULL);
- if (schema != NULL) {
- WXS_FIND_GLOBAL_ITEM(attrDecl)
- }
-exit:
-#ifdef DEBUG
- if (ret == NULL) {
- if (nsName == NULL)
- fprintf(stderr, "Unable to lookup attribute %s", name);
- else
- fprintf(stderr, "Unable to lookup attribute %s:%s", name,
- nsName);
- }
-#endif
- return (ret);
-}
-
-/**
- * xmlSchemaGetAttributeGroup:
- * @schema: the context of the schema
- * @name: the name of the attribute group
- * @ns: the target namespace of the attribute group
- *
- * Lookup a an attribute group in the schema or imported schemas
- *
- * Returns the attribute group definition or NULL if not found.
- */
-static xmlSchemaAttributeGroupPtr
-xmlSchemaGetAttributeGroup(xmlSchemaPtr schema, const xmlChar * name,
- const xmlChar * nsName)
-{
- xmlSchemaAttributeGroupPtr ret = NULL;
-
- if ((name == NULL) || (schema == NULL))
- return (NULL);
- if (schema != NULL) {
- WXS_FIND_GLOBAL_ITEM(attrgrpDecl)
- }
-exit:
- /* TODO:
- if ((ret != NULL) && (ret->redef != NULL)) {
- * Return the last redefinition. *
- ret = ret->redef;
- }
- */
-#ifdef DEBUG
- if (ret == NULL) {
- if (nsName == NULL)
- fprintf(stderr, "Unable to lookup attribute group %s", name);
- else
- fprintf(stderr, "Unable to lookup attribute group %s:%s", name,
- nsName);
- }
-#endif
- return (ret);
-}
-
-/**
- * xmlSchemaGetGroup:
- * @schema: the context of the schema
- * @name: the name of the group
- * @ns: the target namespace of the group
- *
- * Lookup a group in the schema or imported schemas
- *
- * Returns the group definition or NULL if not found.
- */
-static xmlSchemaModelGroupDefPtr
-xmlSchemaGetGroup(xmlSchemaPtr schema, const xmlChar * name,
- const xmlChar * nsName)
-{
- xmlSchemaModelGroupDefPtr ret = NULL;
-
- if ((name == NULL) || (schema == NULL))
- return (NULL);
- if (schema != NULL) {
- WXS_FIND_GLOBAL_ITEM(groupDecl)
- }
-exit:
-
-#ifdef DEBUG
- if (ret == NULL) {
- if (nsName == NULL)
- fprintf(stderr, "Unable to lookup group %s", name);
- else
- fprintf(stderr, "Unable to lookup group %s:%s", name,
- nsName);
- }
-#endif
- return (ret);
-}
-
-static xmlSchemaNotationPtr
-xmlSchemaGetNotation(xmlSchemaPtr schema,
- const xmlChar *name,
- const xmlChar *nsName)
-{
- xmlSchemaNotationPtr ret = NULL;
-
- if ((name == NULL) || (schema == NULL))
- return (NULL);
- if (schema != NULL) {
- WXS_FIND_GLOBAL_ITEM(notaDecl)
- }
-exit:
- return (ret);
-}
-
-static xmlSchemaIDCPtr
-xmlSchemaGetIDC(xmlSchemaPtr schema,
- const xmlChar *name,
- const xmlChar *nsName)
-{
- xmlSchemaIDCPtr ret = NULL;
-
- if ((name == NULL) || (schema == NULL))
- return (NULL);
- if (schema != NULL) {
- WXS_FIND_GLOBAL_ITEM(idcDef)
- }
-exit:
- return (ret);
-}
-
-/**
- * xmlSchemaGetNamedComponent:
- * @schema: the schema
- * @name: the name of the group
- * @ns: the target namespace of the group
- *
- * Lookup a group in the schema or imported schemas
- *
- * Returns the group definition or NULL if not found.
- */
-static xmlSchemaBasicItemPtr
-xmlSchemaGetNamedComponent(xmlSchemaPtr schema,
- xmlSchemaTypeType itemType,
- const xmlChar *name,
- const xmlChar *targetNs)
-{
- switch (itemType) {
- case XML_SCHEMA_TYPE_GROUP:
- return ((xmlSchemaBasicItemPtr) xmlSchemaGetGroup(schema,
- name, targetNs));
- case XML_SCHEMA_TYPE_ELEMENT:
- return ((xmlSchemaBasicItemPtr) xmlSchemaGetElem(schema,
- name, targetNs));
- default:
- TODO
- return (NULL);
- }
-}
-
-/************************************************************************
- * *
- * Parsing functions *
- * *
- ************************************************************************/
-
-#define IS_BLANK_NODE(n) \
- (((n)->type == XML_TEXT_NODE) && (xmlSchemaIsBlank((n)->content, -1)))
-
-/**
- * xmlSchemaIsBlank:
- * @str: a string
- * @len: the length of the string or -1
- *
- * Check if a string is ignorable
- *
- * Returns 1 if the string is NULL or made of blanks chars, 0 otherwise
- */
-static int
-xmlSchemaIsBlank(xmlChar * str, int len)
-{
- if (str == NULL)
- return (1);
- if (len < 0) {
- while (*str != 0) {
- if (!(IS_BLANK_CH(*str)))
- return (0);
- str++;
- }
- } else while ((*str != 0) && (len != 0)) {
- if (!(IS_BLANK_CH(*str)))
- return (0);
- str++;
- len--;
- }
-
- return (1);
-}
-
-#define WXS_COMP_NAME(c, t) ((t) (c))->name
-#define WXS_COMP_TNS(c, t) ((t) (c))->targetNamespace
-/*
-* xmlSchemaFindRedefCompInGraph:
-* ATTENTION TODO: This uses pointer comp. for strings.
-*/
-static xmlSchemaBasicItemPtr
-xmlSchemaFindRedefCompInGraph(xmlSchemaBucketPtr bucket,
- xmlSchemaTypeType type,
- const xmlChar *name,
- const xmlChar *nsName)
-{
- xmlSchemaBasicItemPtr ret;
- int i;
-
- if ((bucket == NULL) || (name == NULL))
- return(NULL);
- if ((bucket->globals == NULL) ||
- (bucket->globals->nbItems == 0))
- goto subschemas;
- /*
- * Search in global components.
- */
- for (i = 0; i < bucket->globals->nbItems; i++) {
- ret = bucket->globals->items[i];
- if (ret->type == type) {
- switch (type) {
- case XML_SCHEMA_TYPE_COMPLEX:
- case XML_SCHEMA_TYPE_SIMPLE:
- if ((WXS_COMP_NAME(ret, xmlSchemaTypePtr) == name) &&
- (WXS_COMP_TNS(ret, xmlSchemaTypePtr) ==
- nsName))
- {
- return(ret);
- }
- break;
- case XML_SCHEMA_TYPE_GROUP:
- if ((WXS_COMP_NAME(ret,
- xmlSchemaModelGroupDefPtr) == name) &&
- (WXS_COMP_TNS(ret,
- xmlSchemaModelGroupDefPtr) == nsName))
- {
- return(ret);
- }
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- if ((WXS_COMP_NAME(ret,
- xmlSchemaAttributeGroupPtr) == name) &&
- (WXS_COMP_TNS(ret,
- xmlSchemaAttributeGroupPtr) == nsName))
- {
- return(ret);
- }
- break;
- default:
- /* Should not be hit. */
- return(NULL);
- }
- }
- }
-subschemas:
- /*
- * Process imported/included schemas.
- */
- if (bucket->relations != NULL) {
- xmlSchemaSchemaRelationPtr rel = bucket->relations;
-
- /*
- * TODO: Marking the bucket will not avoid multiple searches
- * in the same schema, but avoids at least circularity.
- */
- bucket->flags |= XML_SCHEMA_BUCKET_MARKED;
- do {
- if ((rel->bucket != NULL) &&
- ((rel->bucket->flags & XML_SCHEMA_BUCKET_MARKED) == 0)) {
- ret = xmlSchemaFindRedefCompInGraph(rel->bucket,
- type, name, nsName);
- if (ret != NULL)
- return(ret);
- }
- rel = rel->next;
- } while (rel != NULL);
- bucket->flags ^= XML_SCHEMA_BUCKET_MARKED;
- }
- return(NULL);
-}
-
-/**
- * xmlSchemaAddNotation:
- * @ctxt: a schema parser context
- * @schema: the schema being built
- * @name: the item name
- *
- * Add an XML schema annotation declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaNotationPtr
-xmlSchemaAddNotation(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- const xmlChar *name, const xmlChar *nsName,
- xmlNodePtr node ATTRIBUTE_UNUSED)
-{
- xmlSchemaNotationPtr ret = NULL;
-
- if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
- return (NULL);
-
- ret = (xmlSchemaNotationPtr) xmlMalloc(sizeof(xmlSchemaNotation));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "add annotation", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaNotation));
- ret->type = XML_SCHEMA_TYPE_NOTATION;
- ret->name = name;
- ret->targetNamespace = nsName;
- /* TODO: do we need the node to be set?
- * ret->node = node;*/
- WXS_ADD_GLOBAL(ctxt, ret);
- return (ret);
-}
-
-/**
- * xmlSchemaAddAttribute:
- * @ctxt: a schema parser context
- * @schema: the schema being built
- * @name: the item name
- * @namespace: the namespace
- *
- * Add an XML schema Attrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaAttributePtr
-xmlSchemaAddAttribute(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- const xmlChar * name, const xmlChar * nsName,
- xmlNodePtr node, int topLevel)
-{
- xmlSchemaAttributePtr ret = NULL;
-
- if ((ctxt == NULL) || (schema == NULL))
- return (NULL);
-
- ret = (xmlSchemaAttributePtr) xmlMalloc(sizeof(xmlSchemaAttribute));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating attribute", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaAttribute));
- ret->type = XML_SCHEMA_TYPE_ATTRIBUTE;
- ret->node = node;
- ret->name = name;
- ret->targetNamespace = nsName;
-
- if (topLevel)
- WXS_ADD_GLOBAL(ctxt, ret);
- else
- WXS_ADD_LOCAL(ctxt, ret);
- WXS_ADD_PENDING(ctxt, ret);
- return (ret);
-}
-
-/**
- * xmlSchemaAddAttributeUse:
- * @ctxt: a schema parser context
- * @schema: the schema being built
- * @name: the item name
- * @namespace: the namespace
- *
- * Add an XML schema Attrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaAttributeUsePtr
-xmlSchemaAddAttributeUse(xmlSchemaParserCtxtPtr pctxt,
- xmlNodePtr node)
-{
- xmlSchemaAttributeUsePtr ret = NULL;
-
- if (pctxt == NULL)
- return (NULL);
-
- ret = (xmlSchemaAttributeUsePtr) xmlMalloc(sizeof(xmlSchemaAttributeUse));
- if (ret == NULL) {
- xmlSchemaPErrMemory(pctxt, "allocating attribute", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaAttributeUse));
- ret->type = XML_SCHEMA_TYPE_ATTRIBUTE_USE;
- ret->node = node;
-
- WXS_ADD_LOCAL(pctxt, ret);
- return (ret);
-}
-
-/*
-* xmlSchemaAddRedef:
-*
-* Adds a redefinition information. This is used at a later stage to:
-* resolve references to the redefined components and to check constraints.
-*/
-static xmlSchemaRedefPtr
-xmlSchemaAddRedef(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaBucketPtr targetBucket,
- void *item,
- const xmlChar *refName,
- const xmlChar *refTargetNs)
-{
- xmlSchemaRedefPtr ret;
-
- ret = (xmlSchemaRedefPtr)
- xmlMalloc(sizeof(xmlSchemaRedef));
- if (ret == NULL) {
- xmlSchemaPErrMemory(pctxt,
- "allocating redefinition info", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaRedef));
- ret->item = item;
- ret->targetBucket = targetBucket;
- ret->refName = refName;
- ret->refTargetNs = refTargetNs;
- if (WXS_CONSTRUCTOR(pctxt)->redefs == NULL)
- WXS_CONSTRUCTOR(pctxt)->redefs = ret;
- else
- WXS_CONSTRUCTOR(pctxt)->lastRedef->next = ret;
- WXS_CONSTRUCTOR(pctxt)->lastRedef = ret;
-
- return (ret);
-}
-
-/**
- * xmlSchemaAddAttributeGroupDefinition:
- * @ctxt: a schema parser context
- * @schema: the schema being built
- * @name: the item name
- * @nsName: the target namespace
- * @node: the corresponding node
- *
- * Add an XML schema Attrribute Group definition.
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaAttributeGroupPtr
-xmlSchemaAddAttributeGroupDefinition(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema ATTRIBUTE_UNUSED,
- const xmlChar *name,
- const xmlChar *nsName,
- xmlNodePtr node)
-{
- xmlSchemaAttributeGroupPtr ret = NULL;
-
- if ((pctxt == NULL) || (name == NULL))
- return (NULL);
-
- ret = (xmlSchemaAttributeGroupPtr)
- xmlMalloc(sizeof(xmlSchemaAttributeGroup));
- if (ret == NULL) {
- xmlSchemaPErrMemory(pctxt, "allocating attribute group", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaAttributeGroup));
- ret->type = XML_SCHEMA_TYPE_ATTRIBUTEGROUP;
- ret->name = name;
- ret->targetNamespace = nsName;
- ret->node = node;
-
- /* TODO: Remove the flag. */
- ret->flags |= XML_SCHEMAS_ATTRGROUP_GLOBAL;
- if (pctxt->isRedefine) {
- pctxt->redef = xmlSchemaAddRedef(pctxt, pctxt->redefined,
- ret, name, nsName);
- if (pctxt->redef == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- pctxt->redefCounter = 0;
- }
- WXS_ADD_GLOBAL(pctxt, ret);
- WXS_ADD_PENDING(pctxt, ret);
- return (ret);
-}
-
-/**
- * xmlSchemaAddElement:
- * @ctxt: a schema parser context
- * @schema: the schema being built
- * @name: the type name
- * @namespace: the type namespace
- *
- * Add an XML schema Element declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaElementPtr
-xmlSchemaAddElement(xmlSchemaParserCtxtPtr ctxt,
- const xmlChar * name, const xmlChar * nsName,
- xmlNodePtr node, int topLevel)
-{
- xmlSchemaElementPtr ret = NULL;
-
- if ((ctxt == NULL) || (name == NULL))
- return (NULL);
-
- ret = (xmlSchemaElementPtr) xmlMalloc(sizeof(xmlSchemaElement));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating element", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaElement));
- ret->type = XML_SCHEMA_TYPE_ELEMENT;
- ret->name = name;
- ret->targetNamespace = nsName;
- ret->node = node;
-
- if (topLevel)
- WXS_ADD_GLOBAL(ctxt, ret);
- else
- WXS_ADD_LOCAL(ctxt, ret);
- WXS_ADD_PENDING(ctxt, ret);
- return (ret);
-}
-
-/**
- * xmlSchemaAddType:
- * @ctxt: a schema parser context
- * @schema: the schema being built
- * @name: the item name
- * @namespace: the namespace
- *
- * Add an XML schema item
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaTypePtr
-xmlSchemaAddType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlSchemaTypeType type,
- const xmlChar * name, const xmlChar * nsName,
- xmlNodePtr node, int topLevel)
-{
- xmlSchemaTypePtr ret = NULL;
-
- if ((ctxt == NULL) || (schema == NULL))
- return (NULL);
-
- ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating type", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaType));
- ret->type = type;
- ret->name = name;
- ret->targetNamespace = nsName;
- ret->node = node;
- if (topLevel) {
- if (ctxt->isRedefine) {
- ctxt->redef = xmlSchemaAddRedef(ctxt, ctxt->redefined,
- ret, name, nsName);
- if (ctxt->redef == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- ctxt->redefCounter = 0;
- }
- WXS_ADD_GLOBAL(ctxt, ret);
- } else
- WXS_ADD_LOCAL(ctxt, ret);
- WXS_ADD_PENDING(ctxt, ret);
- return (ret);
-}
-
-static xmlSchemaQNameRefPtr
-xmlSchemaNewQNameRef(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypeType refType,
- const xmlChar *refName,
- const xmlChar *refNs)
-{
- xmlSchemaQNameRefPtr ret;
-
- ret = (xmlSchemaQNameRefPtr)
- xmlMalloc(sizeof(xmlSchemaQNameRef));
- if (ret == NULL) {
- xmlSchemaPErrMemory(pctxt,
- "allocating QName reference item", NULL);
- return (NULL);
- }
- ret->node = NULL;
- ret->type = XML_SCHEMA_EXTRA_QNAMEREF;
- ret->name = refName;
- ret->targetNamespace = refNs;
- ret->item = NULL;
- ret->itemType = refType;
- /*
- * Store the reference item in the schema.
- */
- WXS_ADD_LOCAL(pctxt, ret);
- return (ret);
-}
-
-static xmlSchemaAttributeUseProhibPtr
-xmlSchemaAddAttributeUseProhib(xmlSchemaParserCtxtPtr pctxt)
-{
- xmlSchemaAttributeUseProhibPtr ret;
-
- ret = (xmlSchemaAttributeUseProhibPtr)
- xmlMalloc(sizeof(xmlSchemaAttributeUseProhib));
- if (ret == NULL) {
- xmlSchemaPErrMemory(pctxt,
- "allocating attribute use prohibition", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaAttributeUseProhib));
- ret->type = XML_SCHEMA_EXTRA_ATTR_USE_PROHIB;
- WXS_ADD_LOCAL(pctxt, ret);
- return (ret);
-}
-
-
-/**
- * xmlSchemaAddModelGroup:
- * @ctxt: a schema parser context
- * @schema: the schema being built
- * @type: the "compositor" type of the model group
- * @node: the node in the schema doc
- *
- * Adds a schema model group
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaModelGroupPtr
-xmlSchemaAddModelGroup(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlSchemaTypeType type,
- xmlNodePtr node)
-{
- xmlSchemaModelGroupPtr ret = NULL;
-
- if ((ctxt == NULL) || (schema == NULL))
- return (NULL);
-
- ret = (xmlSchemaModelGroupPtr)
- xmlMalloc(sizeof(xmlSchemaModelGroup));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating model group component",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaModelGroup));
- ret->type = type;
- ret->node = node;
- WXS_ADD_LOCAL(ctxt, ret);
- if ((type == XML_SCHEMA_TYPE_SEQUENCE) ||
- (type == XML_SCHEMA_TYPE_CHOICE))
- WXS_ADD_PENDING(ctxt, ret);
- return (ret);
-}
-
-
-/**
- * xmlSchemaAddParticle:
- * @ctxt: a schema parser context
- * @schema: the schema being built
- * @node: the corresponding node in the schema doc
- * @min: the minOccurs
- * @max: the maxOccurs
- *
- * Adds an XML schema particle component.
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaParticlePtr
-xmlSchemaAddParticle(xmlSchemaParserCtxtPtr ctxt,
- xmlNodePtr node, int min, int max)
-{
- xmlSchemaParticlePtr ret = NULL;
- if (ctxt == NULL)
- return (NULL);
-
-#ifdef DEBUG
- fprintf(stderr, "Adding particle component\n");
-#endif
- ret = (xmlSchemaParticlePtr)
- xmlMalloc(sizeof(xmlSchemaParticle));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating particle component",
- NULL);
- return (NULL);
- }
- ret->type = XML_SCHEMA_TYPE_PARTICLE;
- ret->annot = NULL;
- ret->node = node;
- ret->minOccurs = min;
- ret->maxOccurs = max;
- ret->next = NULL;
- ret->children = NULL;
-
- WXS_ADD_LOCAL(ctxt, ret);
- /*
- * Note that addition to pending components will be done locally
- * to the specific parsing function, since the most particles
- * need not to be fixed up (i.e. the reference to be resolved).
- * REMOVED: WXS_ADD_PENDING(ctxt, ret);
- */
- return (ret);
-}
-
-/**
- * xmlSchemaAddModelGroupDefinition:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @name: the group name
- *
- * Add an XML schema Group definition
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaModelGroupDefPtr
-xmlSchemaAddModelGroupDefinition(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- const xmlChar *name,
- const xmlChar *nsName,
- xmlNodePtr node)
-{
- xmlSchemaModelGroupDefPtr ret = NULL;
-
- if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
- return (NULL);
-
- ret = (xmlSchemaModelGroupDefPtr)
- xmlMalloc(sizeof(xmlSchemaModelGroupDef));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "adding group", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaModelGroupDef));
- ret->name = name;
- ret->type = XML_SCHEMA_TYPE_GROUP;
- ret->node = node;
- ret->targetNamespace = nsName;
-
- if (ctxt->isRedefine) {
- ctxt->redef = xmlSchemaAddRedef(ctxt, ctxt->redefined,
- ret, name, nsName);
- if (ctxt->redef == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- ctxt->redefCounter = 0;
- }
- WXS_ADD_GLOBAL(ctxt, ret);
- WXS_ADD_PENDING(ctxt, ret);
- return (ret);
-}
-
-/**
- * xmlSchemaNewWildcardNs:
- * @ctxt: a schema validation context
- *
- * Creates a new wildcard namespace constraint.
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaWildcardNsPtr
-xmlSchemaNewWildcardNsConstraint(xmlSchemaParserCtxtPtr ctxt)
-{
- xmlSchemaWildcardNsPtr ret;
-
- ret = (xmlSchemaWildcardNsPtr)
- xmlMalloc(sizeof(xmlSchemaWildcardNs));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "creating wildcard namespace constraint", NULL);
- return (NULL);
- }
- ret->value = NULL;
- ret->next = NULL;
- return (ret);
-}
-
-static xmlSchemaIDCPtr
-xmlSchemaAddIDC(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- const xmlChar *name, const xmlChar *nsName,
- int category, xmlNodePtr node)
-{
- xmlSchemaIDCPtr ret = NULL;
-
- if ((ctxt == NULL) || (schema == NULL) || (name == NULL))
- return (NULL);
-
- ret = (xmlSchemaIDCPtr) xmlMalloc(sizeof(xmlSchemaIDC));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt,
- "allocating an identity-constraint definition", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaIDC));
- /* The target namespace of the parent element declaration. */
- ret->targetNamespace = nsName;
- ret->name = name;
- ret->type = category;
- ret->node = node;
-
- WXS_ADD_GLOBAL(ctxt, ret);
- /*
- * Only keyrefs need to be fixup up.
- */
- if (category == XML_SCHEMA_TYPE_IDC_KEYREF)
- WXS_ADD_PENDING(ctxt, ret);
- return (ret);
-}
-
-/**
- * xmlSchemaAddWildcard:
- * @ctxt: a schema validation context
- * @schema: a schema
- *
- * Adds a wildcard.
- * It corresponds to a xsd:anyAttribute and xsd:any.
- *
- * Returns the new struture or NULL in case of error
- */
-static xmlSchemaWildcardPtr
-xmlSchemaAddWildcard(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlSchemaTypeType type, xmlNodePtr node)
-{
- xmlSchemaWildcardPtr ret = NULL;
-
- if ((ctxt == NULL) || (schema == NULL))
- return (NULL);
-
- ret = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard));
- if (ret == NULL) {
- xmlSchemaPErrMemory(ctxt, "adding wildcard", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaWildcard));
- ret->type = type;
- ret->node = node;
- WXS_ADD_LOCAL(ctxt, ret);
- return (ret);
-}
-
-static void
-xmlSchemaSubstGroupFree(xmlSchemaSubstGroupPtr group)
-{
- if (group == NULL)
- return;
- if (group->members != NULL)
- xmlSchemaItemListFree(group->members);
- xmlFree(group);
-}
-
-static xmlSchemaSubstGroupPtr
-xmlSchemaSubstGroupAdd(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaElementPtr head)
-{
- xmlSchemaSubstGroupPtr ret;
-
- /* Init subst group hash. */
- if (WXS_SUBST_GROUPS(pctxt) == NULL) {
- WXS_SUBST_GROUPS(pctxt) = xmlHashCreateDict(10, pctxt->dict);
- if (WXS_SUBST_GROUPS(pctxt) == NULL)
- return(NULL);
- }
- /* Create a new substitution group. */
- ret = (xmlSchemaSubstGroupPtr) xmlMalloc(sizeof(xmlSchemaSubstGroup));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL,
- "allocating a substitution group container", NULL);
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaSubstGroup));
- ret->head = head;
- /* Create list of members. */
- ret->members = xmlSchemaItemListCreate();
- if (ret->members == NULL) {
- xmlSchemaSubstGroupFree(ret);
- return(NULL);
- }
- /* Add subst group to hash. */
- if (xmlHashAddEntry2(WXS_SUBST_GROUPS(pctxt),
- head->name, head->targetNamespace, ret) != 0) {
- PERROR_INT("xmlSchemaSubstGroupAdd",
- "failed to add a new substitution container");
- xmlSchemaSubstGroupFree(ret);
- return(NULL);
- }
- return(ret);
-}
-
-static xmlSchemaSubstGroupPtr
-xmlSchemaSubstGroupGet(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaElementPtr head)
-{
- if (WXS_SUBST_GROUPS(pctxt) == NULL)
- return(NULL);
- return(xmlHashLookup2(WXS_SUBST_GROUPS(pctxt),
- head->name, head->targetNamespace));
-
-}
-
-/**
- * xmlSchemaAddElementSubstitutionMember:
- * @pctxt: a schema parser context
- * @head: the head of the substitution group
- * @member: the new member of the substitution group
- *
- * Allocate a new annotation structure.
- *
- * Returns the newly allocated structure or NULL in case or error
- */
-static int
-xmlSchemaAddElementSubstitutionMember(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaElementPtr head,
- xmlSchemaElementPtr member)
-{
- xmlSchemaSubstGroupPtr substGroup = NULL;
-
- if ((pctxt == NULL) || (head == NULL) || (member == NULL))
- return (-1);
-
- substGroup = xmlSchemaSubstGroupGet(pctxt, head);
- if (substGroup == NULL)
- substGroup = xmlSchemaSubstGroupAdd(pctxt, head);
- if (substGroup == NULL)
- return(-1);
- if (xmlSchemaItemListAdd(substGroup->members, member) == -1)
- return(-1);
- return(0);
-}
-
-/************************************************************************
- * *
- * Utilities for parsing *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaPValAttrNodeQNameValue:
- * @ctxt: a schema parser context
- * @schema: the schema context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the parent as a schema object
- * @value: the QName value
- * @local: the resulting local part if found, the attribute value otherwise
- * @uri: the resulting namespace URI if found
- *
- * Extracts the local name and the URI of a QName value and validates it.
- * This one is intended to be used on attribute values that
- * should resolve to schema components.
- *
- * Returns 0, in case the QName is valid, a positive error code
- * if not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaPValAttrNodeQNameValue(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlSchemaBasicItemPtr ownerItem,
- xmlAttrPtr attr,
- const xmlChar *value,
- const xmlChar **uri,
- const xmlChar **local)
-{
- const xmlChar *pref;
- xmlNsPtr ns;
- int len, ret;
-
- *uri = NULL;
- *local = NULL;
- ret = xmlValidateQName(value, 1);
- if (ret > 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- ownerItem, (xmlNodePtr) attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME),
- NULL, value, NULL, NULL, NULL);
- *local = value;
- return (ctxt->err);
- } else if (ret < 0)
- return (-1);
-
- if (!strchr((char *) value, ':')) {
- ns = xmlSearchNs(attr->doc, attr->parent, NULL);
- if (ns)
- *uri = xmlDictLookup(ctxt->dict, ns->href, -1);
- else if (schema->flags & XML_SCHEMAS_INCLUDING_CONVERT_NS) {
- /* TODO: move XML_SCHEMAS_INCLUDING_CONVERT_NS to the
- * parser context. */
- /*
- * This one takes care of included schemas with no
- * target namespace.
- */
- *uri = ctxt->targetNamespace;
- }
- *local = xmlDictLookup(ctxt->dict, value, -1);
- return (0);
- }
- /*
- * At this point xmlSplitQName3 has to return a local name.
- */
- *local = xmlSplitQName3(value, &len);
- *local = xmlDictLookup(ctxt->dict, *local, -1);
- pref = xmlDictLookup(ctxt->dict, value, len);
- ns = xmlSearchNs(attr->doc, attr->parent, pref);
- if (ns == NULL) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- ownerItem, (xmlNodePtr) attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME), NULL, value,
- "The value '%s' of simple type 'xs:QName' has no "
- "corresponding namespace declaration in scope", value, NULL);
- return (ctxt->err);
- } else {
- *uri = xmlDictLookup(ctxt->dict, ns->href, -1);
- }
- return (0);
-}
-
-/**
- * xmlSchemaPValAttrNodeQName:
- * @ctxt: a schema parser context
- * @schema: the schema context
- * @ownerDes: the designation of the owner element
- * @ownerItem: the owner as a schema object
- * @attr: the attribute node
- * @local: the resulting local part if found, the attribute value otherwise
- * @uri: the resulting namespace URI if found
- *
- * Extracts and validates the QName of an attribute value.
- * This one is intended to be used on attribute values that
- * should resolve to schema components.
- *
- * Returns 0, in case the QName is valid, a positive error code
- * if not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaPValAttrNodeQName(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlSchemaBasicItemPtr ownerItem,
- xmlAttrPtr attr,
- const xmlChar **uri,
- const xmlChar **local)
-{
- const xmlChar *value;
-
- value = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- return (xmlSchemaPValAttrNodeQNameValue(ctxt, schema,
- ownerItem, attr, value, uri, local));
-}
-
-/**
- * xmlSchemaPValAttrQName:
- * @ctxt: a schema parser context
- * @schema: the schema context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the owner as a schema object
- * @ownerElem: the parent node of the attribute
- * @name: the name of the attribute
- * @local: the resulting local part if found, the attribute value otherwise
- * @uri: the resulting namespace URI if found
- *
- * Extracts and validates the QName of an attribute value.
- *
- * Returns 0, in case the QName is valid, a positive error code
- * if not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaPValAttrQName(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlSchemaBasicItemPtr ownerItem,
- xmlNodePtr ownerElem,
- const char *name,
- const xmlChar **uri,
- const xmlChar **local)
-{
- xmlAttrPtr attr;
-
- attr = xmlSchemaGetPropNode(ownerElem, name);
- if (attr == NULL) {
- *local = NULL;
- *uri = NULL;
- return (0);
- }
- return (xmlSchemaPValAttrNodeQName(ctxt, schema,
- ownerItem, attr, uri, local));
-}
-
-/**
- * xmlSchemaPValAttrID:
- * @ctxt: a schema parser context
- * @schema: the schema context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the owner as a schema object
- * @ownerElem: the parent node of the attribute
- * @name: the name of the attribute
- *
- * Extracts and validates the ID of an attribute value.
- *
- * Returns 0, in case the ID is valid, a positive error code
- * if not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaPValAttrNodeID(xmlSchemaParserCtxtPtr ctxt, xmlAttrPtr attr)
-{
- int ret;
- const xmlChar *value;
-
- if (attr == NULL)
- return(0);
- value = xmlSchemaGetNodeContentNoDict((xmlNodePtr) attr);
- ret = xmlValidateNCName(value, 1);
- if (ret == 0) {
- /*
- * NOTE: the IDness might have already be declared in the DTD
- */
- if (attr->atype != XML_ATTRIBUTE_ID) {
- xmlIDPtr res;
- xmlChar *strip;
-
- /*
- * TODO: Use xmlSchemaStrip here; it's not exported at this
- * moment.
- */
- strip = xmlSchemaCollapseString(value);
- if (strip != NULL) {
- xmlFree((xmlChar *) value);
- value = strip;
- }
- res = xmlAddID(NULL, attr->doc, value, attr);
- if (res == NULL) {
- ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ID),
- NULL, NULL, "Duplicate value '%s' of simple "
- "type 'xs:ID'", value, NULL);
- } else
- attr->atype = XML_ATTRIBUTE_ID;
- }
- } else if (ret > 0) {
- ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ID),
- NULL, NULL, "The value '%s' of simple type 'xs:ID' is "
- "not a valid 'xs:NCName'",
- value, NULL);
- }
- if (value != NULL)
- xmlFree((xmlChar *)value);
-
- return (ret);
-}
-
-static int
-xmlSchemaPValAttrID(xmlSchemaParserCtxtPtr ctxt,
- xmlNodePtr ownerElem,
- const xmlChar *name)
-{
- xmlAttrPtr attr;
-
- attr = xmlSchemaGetPropNode(ownerElem, (const char *) name);
- if (attr == NULL)
- return(0);
- return(xmlSchemaPValAttrNodeID(ctxt, attr));
-
-}
-
-/**
- * xmlGetMaxOccurs:
- * @ctxt: a schema validation context
- * @node: a subtree containing XML Schema informations
- *
- * Get the maxOccurs property
- *
- * Returns the default if not found, or the value
- */
-static int
-xmlGetMaxOccurs(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
- int min, int max, int def, const char *expected)
-{
- const xmlChar *val, *cur;
- int ret = 0;
- xmlAttrPtr attr;
-
- attr = xmlSchemaGetPropNode(node, "maxOccurs");
- if (attr == NULL)
- return (def);
- val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
-
- if (xmlStrEqual(val, (const xmlChar *) "unbounded")) {
- if (max != UNBOUNDED) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- /* XML_SCHEMAP_INVALID_MINOCCURS, */
- NULL, (xmlNodePtr) attr, NULL, expected,
- val, NULL, NULL, NULL);
- return (def);
- } else
- return (UNBOUNDED); /* encoding it with -1 might be another option */
- }
-
- cur = val;
- while (IS_BLANK_CH(*cur))
- cur++;
- if (*cur == 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- /* XML_SCHEMAP_INVALID_MINOCCURS, */
- NULL, (xmlNodePtr) attr, NULL, expected,
- val, NULL, NULL, NULL);
- return (def);
- }
- while ((*cur >= '0') && (*cur <= '9')) {
- ret = ret * 10 + (*cur - '0');
- cur++;
- }
- while (IS_BLANK_CH(*cur))
- cur++;
- /*
- * TODO: Restrict the maximal value to Integer.
- */
- if ((*cur != 0) || (ret < min) || ((max != -1) && (ret > max))) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- /* XML_SCHEMAP_INVALID_MINOCCURS, */
- NULL, (xmlNodePtr) attr, NULL, expected,
- val, NULL, NULL, NULL);
- return (def);
- }
- return (ret);
-}
-
-/**
- * xmlGetMinOccurs:
- * @ctxt: a schema validation context
- * @node: a subtree containing XML Schema informations
- *
- * Get the minOccurs property
- *
- * Returns the default if not found, or the value
- */
-static int
-xmlGetMinOccurs(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
- int min, int max, int def, const char *expected)
-{
- const xmlChar *val, *cur;
- int ret = 0;
- xmlAttrPtr attr;
-
- attr = xmlSchemaGetPropNode(node, "minOccurs");
- if (attr == NULL)
- return (def);
- val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- cur = val;
- while (IS_BLANK_CH(*cur))
- cur++;
- if (*cur == 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- /* XML_SCHEMAP_INVALID_MINOCCURS, */
- NULL, (xmlNodePtr) attr, NULL, expected,
- val, NULL, NULL, NULL);
- return (def);
- }
- while ((*cur >= '0') && (*cur <= '9')) {
- ret = ret * 10 + (*cur - '0');
- cur++;
- }
- while (IS_BLANK_CH(*cur))
- cur++;
- /*
- * TODO: Restrict the maximal value to Integer.
- */
- if ((*cur != 0) || (ret < min) || ((max != -1) && (ret > max))) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- /* XML_SCHEMAP_INVALID_MINOCCURS, */
- NULL, (xmlNodePtr) attr, NULL, expected,
- val, NULL, NULL, NULL);
- return (def);
- }
- return (ret);
-}
-
-/**
- * xmlSchemaPGetBoolNodeValue:
- * @ctxt: a schema validation context
- * @ownerDes: owner designation
- * @ownerItem: the owner as a schema item
- * @node: the node holding the value
- *
- * Converts a boolean string value into 1 or 0.
- *
- * Returns 0 or 1.
- */
-static int
-xmlSchemaPGetBoolNodeValue(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaBasicItemPtr ownerItem,
- xmlNodePtr node)
-{
- xmlChar *value = NULL;
- int res = 0;
-
- value = xmlNodeGetContent(node);
- /*
- * 3.2.2.1 Lexical representation
- * An instance of a datatype that is defined as `boolean`
- * can have the following legal literals {true, false, 1, 0}.
- */
- if (xmlStrEqual(BAD_CAST value, BAD_CAST "true"))
- res = 1;
- else if (xmlStrEqual(BAD_CAST value, BAD_CAST "false"))
- res = 0;
- else if (xmlStrEqual(BAD_CAST value, BAD_CAST "1"))
- res = 1;
- else if (xmlStrEqual(BAD_CAST value, BAD_CAST "0"))
- res = 0;
- else {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_INVALID_BOOLEAN,
- ownerItem, node,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_BOOLEAN),
- NULL, BAD_CAST value,
- NULL, NULL, NULL);
- }
- if (value != NULL)
- xmlFree(value);
- return (res);
-}
-
-/**
- * xmlGetBooleanProp:
- * @ctxt: a schema validation context
- * @node: a subtree containing XML Schema informations
- * @name: the attribute name
- * @def: the default value
- *
- * Evaluate if a boolean property is set
- *
- * Returns the default if not found, 0 if found to be false,
- * 1 if found to be true
- */
-static int
-xmlGetBooleanProp(xmlSchemaParserCtxtPtr ctxt,
- xmlNodePtr node,
- const char *name, int def)
-{
- const xmlChar *val;
-
- val = xmlSchemaGetProp(ctxt, node, name);
- if (val == NULL)
- return (def);
- /*
- * 3.2.2.1 Lexical representation
- * An instance of a datatype that is defined as `boolean`
- * can have the following legal literals {true, false, 1, 0}.
- */
- if (xmlStrEqual(val, BAD_CAST "true"))
- def = 1;
- else if (xmlStrEqual(val, BAD_CAST "false"))
- def = 0;
- else if (xmlStrEqual(val, BAD_CAST "1"))
- def = 1;
- else if (xmlStrEqual(val, BAD_CAST "0"))
- def = 0;
- else {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_INVALID_BOOLEAN,
- NULL,
- (xmlNodePtr) xmlSchemaGetPropNode(node, name),
- xmlSchemaGetBuiltInType(XML_SCHEMAS_BOOLEAN),
- NULL, val, NULL, NULL, NULL);
- }
- return (def);
-}
-
-/************************************************************************
- * *
- * Shema extraction from an Infoset *
- * *
- ************************************************************************/
-static xmlSchemaTypePtr xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr
- ctxt, xmlSchemaPtr schema,
- xmlNodePtr node,
- int topLevel);
-static xmlSchemaTypePtr xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr
- ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- int topLevel);
-static xmlSchemaTypePtr xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr
- ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- xmlSchemaTypeType parentType);
-static xmlSchemaBasicItemPtr
-xmlSchemaParseLocalAttribute(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- xmlSchemaItemListPtr uses,
- int parentType);
-static xmlSchemaTypePtr xmlSchemaParseList(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node);
-static xmlSchemaWildcardPtr
-xmlSchemaParseAnyAttribute(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema, xmlNodePtr node);
-
-/**
- * xmlSchemaPValAttrNodeValue:
- *
- * @ctxt: a schema parser context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the schema object owner if existent
- * @attr: the schema attribute node being validated
- * @value: the value
- * @type: the built-in type to be validated against
- *
- * Validates a value against the given built-in type.
- * This one is intended to be used internally for validation
- * of schema attribute values during parsing of the schema.
- *
- * Returns 0 if the value is valid, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaPValAttrNodeValue(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaBasicItemPtr ownerItem,
- xmlAttrPtr attr,
- const xmlChar *value,
- xmlSchemaTypePtr type)
-{
-
- int ret = 0;
-
- /*
- * NOTE: Should we move this to xmlschematypes.c? Hmm, but this
- * one is really meant to be used internally, so better not.
- */
- if ((pctxt == NULL) || (type == NULL) || (attr == NULL))
- return (-1);
- if (type->type != XML_SCHEMA_TYPE_BASIC) {
- PERROR_INT("xmlSchemaPValAttrNodeValue",
- "the given type is not a built-in type");
- return (-1);
- }
- switch (type->builtInType) {
- case XML_SCHEMAS_NCNAME:
- case XML_SCHEMAS_QNAME:
- case XML_SCHEMAS_ANYURI:
- case XML_SCHEMAS_TOKEN:
- case XML_SCHEMAS_LANGUAGE:
- ret = xmlSchemaValPredefTypeNode(type, value, NULL,
- (xmlNodePtr) attr);
- break;
- default: {
- PERROR_INT("xmlSchemaPValAttrNodeValue",
- "validation using the given type is not supported while "
- "parsing a schema");
- return (-1);
- }
- }
- /*
- * TODO: Should we use the S4S error codes instead?
- */
- if (ret < 0) {
- PERROR_INT("xmlSchemaPValAttrNodeValue",
- "failed to validate a schema attribute value");
- return (-1);
- } else if (ret > 0) {
- if (WXS_IS_LIST(type))
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
- else
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1;
- xmlSchemaPSimpleTypeErr(pctxt,
- ret, ownerItem, (xmlNodePtr) attr,
- type, NULL, value, NULL, NULL, NULL);
- }
- return (ret);
-}
-
-/**
- * xmlSchemaPValAttrNode:
- *
- * @ctxt: a schema parser context
- * @ownerDes: the designation of the parent element
- * @ownerItem: the schema object owner if existent
- * @attr: the schema attribute node being validated
- * @type: the built-in type to be validated against
- * @value: the resulting value if any
- *
- * Extracts and validates a value against the given built-in type.
- * This one is intended to be used internally for validation
- * of schema attribute values during parsing of the schema.
- *
- * Returns 0 if the value is valid, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaPValAttrNode(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaBasicItemPtr ownerItem,
- xmlAttrPtr attr,
- xmlSchemaTypePtr type,
- const xmlChar **value)
-{
- const xmlChar *val;
-
- if ((ctxt == NULL) || (type == NULL) || (attr == NULL))
- return (-1);
-
- val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- if (value != NULL)
- *value = val;
-
- return (xmlSchemaPValAttrNodeValue(ctxt, ownerItem, attr,
- val, type));
-}
-
-/**
- * xmlSchemaPValAttr:
- *
- * @ctxt: a schema parser context
- * @node: the element node of the attribute
- * @ownerDes: the designation of the parent element
- * @ownerItem: the schema object owner if existent
- * @ownerElem: the owner element node
- * @name: the name of the schema attribute node
- * @type: the built-in type to be validated against
- * @value: the resulting value if any
- *
- * Extracts and validates a value against the given built-in type.
- * This one is intended to be used internally for validation
- * of schema attribute values during parsing of the schema.
- *
- * Returns 0 if the value is valid, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaPValAttr(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaBasicItemPtr ownerItem,
- xmlNodePtr ownerElem,
- const char *name,
- xmlSchemaTypePtr type,
- const xmlChar **value)
-{
- xmlAttrPtr attr;
-
- if ((ctxt == NULL) || (type == NULL)) {
- if (value != NULL)
- *value = NULL;
- return (-1);
- }
- if (type->type != XML_SCHEMA_TYPE_BASIC) {
- if (value != NULL)
- *value = NULL;
- xmlSchemaPErr(ctxt, ownerElem,
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaPValAttr, the given "
- "type '%s' is not a built-in type.\n",
- type->name, NULL);
- return (-1);
- }
- attr = xmlSchemaGetPropNode(ownerElem, name);
- if (attr == NULL) {
- if (value != NULL)
- *value = NULL;
- return (0);
- }
- return (xmlSchemaPValAttrNode(ctxt, ownerItem, attr,
- type, value));
-}
-
-static int
-xmlSchemaCheckReference(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema ATTRIBUTE_UNUSED,
- xmlNodePtr node,
- xmlAttrPtr attr,
- const xmlChar *namespaceName)
-{
- /* TODO: Pointer comparison instead? */
- if (xmlStrEqual(pctxt->targetNamespace, namespaceName))
- return (0);
- if (xmlStrEqual(xmlSchemaNs, namespaceName))
- return (0);
- /*
- * Check if the referenced namespace was <import>ed.
- */
- if (WXS_BUCKET(pctxt)->relations != NULL) {
- xmlSchemaSchemaRelationPtr rel;
-
- rel = WXS_BUCKET(pctxt)->relations;
- do {
- if (WXS_IS_BUCKET_IMPMAIN(rel->type) &&
- xmlStrEqual(namespaceName, rel->importNamespace))
- return (0);
- rel = rel->next;
- } while (rel != NULL);
- }
- /*
- * No matching <import>ed namespace found.
- */
- {
- xmlNodePtr n = (attr != NULL) ? (xmlNodePtr) attr : node;
-
- if (namespaceName == NULL)
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_SRC_RESOLVE, n, NULL,
- "References from this schema to components in no "
- "namespace are not allowed, since not indicated by an "
- "import statement", NULL, NULL);
- else
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_SRC_RESOLVE, n, NULL,
- "References from this schema to components in the "
- "namespace '%s' are not allowed, since not indicated by an "
- "import statement", namespaceName, NULL);
- }
- return (XML_SCHEMAP_SRC_RESOLVE);
-}
-
-/**
- * xmlSchemaParseLocalAttributes:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- * @type: the hosting type where the attributes will be anchored
- *
- * Parses attribute uses and attribute declarations and
- * attribute group references.
- */
-static int
-xmlSchemaParseLocalAttributes(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr *child, xmlSchemaItemListPtr *list,
- int parentType, int *hasRefs)
-{
- void *item;
-
- while ((IS_SCHEMA((*child), "attribute")) ||
- (IS_SCHEMA((*child), "attributeGroup"))) {
- if (IS_SCHEMA((*child), "attribute")) {
- item = xmlSchemaParseLocalAttribute(ctxt, schema, *child,
- *list, parentType);
- } else {
- item = xmlSchemaParseAttributeGroupRef(ctxt, schema, *child);
- if ((item != NULL) && (hasRefs != NULL))
- *hasRefs = 1;
- }
- if (item != NULL) {
- if (*list == NULL) {
- /* TODO: Customize grow factor. */
- *list = xmlSchemaItemListCreate();
- if (*list == NULL)
- return(-1);
- }
- if (xmlSchemaItemListAddSize(*list, 2, item) == -1)
- return(-1);
- }
- *child = (*child)->next;
- }
- return (0);
-}
-
-/**
- * xmlSchemaParseAnnotation:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Attrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- * 1 in case of success.
- */
-static xmlSchemaAnnotPtr
-xmlSchemaParseAnnotation(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node, int needed)
-{
- xmlSchemaAnnotPtr ret;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- int barked = 0;
-
- /*
- * INFO: S4S completed.
- */
- /*
- * id = ID
- * {any attributes with non-schema namespace . . .}>
- * Content: (appinfo | documentation)*
- */
- if ((ctxt == NULL) || (node == NULL))
- return (NULL);
- if (needed)
- ret = xmlSchemaNewAnnot(ctxt, node);
- else
- ret = NULL;
- attr = node->properties;
- while (attr != NULL) {
- if (((attr->ns == NULL) &&
- (!xmlStrEqual(attr->name, BAD_CAST "id"))) ||
- ((attr->ns != NULL) &&
- xmlStrEqual(attr->ns->href, xmlSchemaNs))) {
-
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * And now for the children...
- */
- child = node->children;
- while (child != NULL) {
- if (IS_SCHEMA(child, "appinfo")) {
- /* TODO: make available the content of "appinfo". */
- /*
- * source = anyURI
- * {any attributes with non-schema namespace . . .}>
- * Content: ({any})*
- */
- attr = child->properties;
- while (attr != NULL) {
- if (((attr->ns == NULL) &&
- (!xmlStrEqual(attr->name, BAD_CAST "source"))) ||
- ((attr->ns != NULL) &&
- xmlStrEqual(attr->ns->href, xmlSchemaNs))) {
-
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttr(ctxt, NULL, child, "source",
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), NULL);
- child = child->next;
- } else if (IS_SCHEMA(child, "documentation")) {
- /* TODO: make available the content of "documentation". */
- /*
- * source = anyURI
- * {any attributes with non-schema namespace . . .}>
- * Content: ({any})*
- */
- attr = child->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if (!xmlStrEqual(attr->name, BAD_CAST "source")) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else {
- if (xmlStrEqual(attr->ns->href, xmlSchemaNs) ||
- (xmlStrEqual(attr->name, BAD_CAST "lang") &&
- (!xmlStrEqual(attr->ns->href, XML_XML_NAMESPACE)))) {
-
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- }
- attr = attr->next;
- }
- /*
- * Attribute "xml:lang".
- */
- attr = xmlSchemaGetPropNodeNs(child, (const char *) XML_XML_NAMESPACE, "lang");
- if (attr != NULL)
- xmlSchemaPValAttrNode(ctxt, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_LANGUAGE), NULL);
- child = child->next;
- } else {
- if (!barked)
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL, "(appinfo | documentation)*");
- barked = 1;
- child = child->next;
- }
- }
-
- return (ret);
-}
-
-/**
- * xmlSchemaParseFacet:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Facet declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the new type structure or NULL in case of error
- */
-static xmlSchemaFacetPtr
-xmlSchemaParseFacet(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlSchemaFacetPtr facet;
- xmlNodePtr child = NULL;
- const xmlChar *value;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- facet = xmlSchemaNewFacet();
- if (facet == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating facet", node);
- return (NULL);
- }
- facet->node = node;
- value = xmlSchemaGetProp(ctxt, node, "value");
- if (value == NULL) {
- xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_FACET_NO_VALUE,
- "Facet %s has no value\n", node->name, NULL);
- xmlSchemaFreeFacet(facet);
- return (NULL);
- }
- if (IS_SCHEMA(node, "minInclusive")) {
- facet->type = XML_SCHEMA_FACET_MININCLUSIVE;
- } else if (IS_SCHEMA(node, "minExclusive")) {
- facet->type = XML_SCHEMA_FACET_MINEXCLUSIVE;
- } else if (IS_SCHEMA(node, "maxInclusive")) {
- facet->type = XML_SCHEMA_FACET_MAXINCLUSIVE;
- } else if (IS_SCHEMA(node, "maxExclusive")) {
- facet->type = XML_SCHEMA_FACET_MAXEXCLUSIVE;
- } else if (IS_SCHEMA(node, "totalDigits")) {
- facet->type = XML_SCHEMA_FACET_TOTALDIGITS;
- } else if (IS_SCHEMA(node, "fractionDigits")) {
- facet->type = XML_SCHEMA_FACET_FRACTIONDIGITS;
- } else if (IS_SCHEMA(node, "pattern")) {
- facet->type = XML_SCHEMA_FACET_PATTERN;
- } else if (IS_SCHEMA(node, "enumeration")) {
- facet->type = XML_SCHEMA_FACET_ENUMERATION;
- } else if (IS_SCHEMA(node, "whiteSpace")) {
- facet->type = XML_SCHEMA_FACET_WHITESPACE;
- } else if (IS_SCHEMA(node, "length")) {
- facet->type = XML_SCHEMA_FACET_LENGTH;
- } else if (IS_SCHEMA(node, "maxLength")) {
- facet->type = XML_SCHEMA_FACET_MAXLENGTH;
- } else if (IS_SCHEMA(node, "minLength")) {
- facet->type = XML_SCHEMA_FACET_MINLENGTH;
- } else {
- xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_FACET_TYPE,
- "Unknown facet type %s\n", node->name, NULL);
- xmlSchemaFreeFacet(facet);
- return (NULL);
- }
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- facet->value = value;
- if ((facet->type != XML_SCHEMA_FACET_PATTERN) &&
- (facet->type != XML_SCHEMA_FACET_ENUMERATION)) {
- const xmlChar *fixed;
-
- fixed = xmlSchemaGetProp(ctxt, node, "fixed");
- if (fixed != NULL) {
- if (xmlStrEqual(fixed, BAD_CAST "true"))
- facet->fixed = 1;
- }
- }
- child = node->children;
-
- if (IS_SCHEMA(child, "annotation")) {
- facet->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_UNKNOWN_FACET_CHILD,
- "Facet %s has unexpected child content\n",
- node->name, NULL);
- }
- return (facet);
-}
-
-/**
- * xmlSchemaParseWildcardNs:
- * @ctxt: a schema parser context
- * @wildc: the wildcard, already created
- * @node: a subtree containing XML Schema informations
- *
- * Parses the attribute "processContents" and "namespace"
- * of a xsd:anyAttribute and xsd:any.
- * *WARNING* this interface is highly subject to change
- *
- * Returns 0 if everything goes fine, a positive error code
- * if something is not valid and -1 if an internal error occurs.
- */
-static int
-xmlSchemaParseWildcardNs(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema ATTRIBUTE_UNUSED,
- xmlSchemaWildcardPtr wildc,
- xmlNodePtr node)
-{
- const xmlChar *pc, *ns, *dictnsItem;
- int ret = 0;
- xmlChar *nsItem;
- xmlSchemaWildcardNsPtr tmp, lastNs = NULL;
- xmlAttrPtr attr;
-
- pc = xmlSchemaGetProp(ctxt, node, "processContents");
- if ((pc == NULL)
- || (xmlStrEqual(pc, (const xmlChar *) "strict"))) {
- wildc->processContents = XML_SCHEMAS_ANY_STRICT;
- } else if (xmlStrEqual(pc, (const xmlChar *) "skip")) {
- wildc->processContents = XML_SCHEMAS_ANY_SKIP;
- } else if (xmlStrEqual(pc, (const xmlChar *) "lax")) {
- wildc->processContents = XML_SCHEMAS_ANY_LAX;
- } else {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, node,
- NULL, "(strict | skip | lax)", pc,
- NULL, NULL, NULL);
- wildc->processContents = XML_SCHEMAS_ANY_STRICT;
- ret = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
- }
- /*
- * Build the namespace constraints.
- */
- attr = xmlSchemaGetPropNode(node, "namespace");
- ns = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- if ((attr == NULL) || (xmlStrEqual(ns, BAD_CAST "##any")))
- wildc->any = 1;
- else if (xmlStrEqual(ns, BAD_CAST "##other")) {
- wildc->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
- if (wildc->negNsSet == NULL) {
- return (-1);
- }
- wildc->negNsSet->value = ctxt->targetNamespace;
- } else {
- const xmlChar *end, *cur;
-
- cur = ns;
- do {
- while (IS_BLANK_CH(*cur))
- cur++;
- end = cur;
- while ((*end != 0) && (!(IS_BLANK_CH(*end))))
- end++;
- if (end == cur)
- break;
- nsItem = xmlStrndup(cur, end - cur);
- if ((xmlStrEqual(nsItem, BAD_CAST "##other")) ||
- (xmlStrEqual(nsItem, BAD_CAST "##any"))) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER,
- NULL, (xmlNodePtr) attr,
- NULL,
- "((##any | ##other) | List of (xs:anyURI | "
- "(##targetNamespace | ##local)))",
- nsItem, NULL, NULL, NULL);
- ret = XML_SCHEMAP_WILDCARD_INVALID_NS_MEMBER;
- } else {
- if (xmlStrEqual(nsItem, BAD_CAST "##targetNamespace")) {
- dictnsItem = ctxt->targetNamespace;
- } else if (xmlStrEqual(nsItem, BAD_CAST "##local")) {
- dictnsItem = NULL;
- } else {
- /*
- * Validate the item (anyURI).
- */
- xmlSchemaPValAttrNodeValue(ctxt, NULL, attr,
- nsItem, xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI));
- dictnsItem = xmlDictLookup(ctxt->dict, nsItem, -1);
- }
- /*
- * Avoid dublicate namespaces.
- */
- tmp = wildc->nsSet;
- while (tmp != NULL) {
- if (dictnsItem == tmp->value)
- break;
- tmp = tmp->next;
- }
- if (tmp == NULL) {
- tmp = xmlSchemaNewWildcardNsConstraint(ctxt);
- if (tmp == NULL) {
- xmlFree(nsItem);
- return (-1);
- }
- tmp->value = dictnsItem;
- tmp->next = NULL;
- if (wildc->nsSet == NULL)
- wildc->nsSet = tmp;
- else if (lastNs != NULL)
- lastNs->next = tmp;
- lastNs = tmp;
- }
-
- }
- xmlFree(nsItem);
- cur = end;
- } while (*cur != 0);
- }
- return (ret);
-}
-
-static int
-xmlSchemaPCheckParticleCorrect_2(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr item ATTRIBUTE_UNUSED,
- xmlNodePtr node,
- int minOccurs,
- int maxOccurs) {
-
- if ((maxOccurs == 0) && ( minOccurs == 0))
- return (0);
- if (maxOccurs != UNBOUNDED) {
- /*
- * TODO: Maybe we should better not create the particle,
- * if min/max is invalid, since it could confuse the build of the
- * content model.
- */
- /*
- * 3.9.6 Schema Component Constraint: Particle Correct
- *
- */
- if (maxOccurs < 1) {
- /*
- * 2.2 {max occurs} must be greater than or equal to 1.
- */
- xmlSchemaPCustomAttrErr(ctxt,
- XML_SCHEMAP_P_PROPS_CORRECT_2_2,
- NULL, NULL,
- xmlSchemaGetPropNode(node, "maxOccurs"),
- "The value must be greater than or equal to 1");
- return (XML_SCHEMAP_P_PROPS_CORRECT_2_2);
- } else if (minOccurs > maxOccurs) {
- /*
- * 2.1 {min occurs} must not be greater than {max occurs}.
- */
- xmlSchemaPCustomAttrErr(ctxt,
- XML_SCHEMAP_P_PROPS_CORRECT_2_1,
- NULL, NULL,
- xmlSchemaGetPropNode(node, "minOccurs"),
- "The value must not be greater than the value of 'maxOccurs'");
- return (XML_SCHEMAP_P_PROPS_CORRECT_2_1);
- }
- }
- return (0);
-}
-
-/**
- * xmlSchemaParseAny:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * Parsea a XML schema <any> element. A particle and wildcard
- * will be created (except if minOccurs==maxOccurs==0, in this case
- * nothing will be created).
- * *WARNING* this interface is highly subject to change
- *
- * Returns the particle or NULL in case of error or if minOccurs==maxOccurs==0
- */
-static xmlSchemaParticlePtr
-xmlSchemaParseAny(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlSchemaParticlePtr particle;
- xmlNodePtr child = NULL;
- xmlSchemaWildcardPtr wild;
- int min, max;
- xmlAttrPtr attr;
- xmlSchemaAnnotPtr annot = NULL;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "minOccurs")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "maxOccurs")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "namespace")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "processContents"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * minOccurs/maxOccurs.
- */
- max = xmlGetMaxOccurs(ctxt, node, 0, UNBOUNDED, 1,
- "(xs:nonNegativeInteger | unbounded)");
- min = xmlGetMinOccurs(ctxt, node, 0, -1, 1,
- "xs:nonNegativeInteger");
- xmlSchemaPCheckParticleCorrect_2(ctxt, NULL, node, min, max);
- /*
- * Create & parse the wildcard.
- */
- wild = xmlSchemaAddWildcard(ctxt, schema, XML_SCHEMA_TYPE_ANY, node);
- if (wild == NULL)
- return (NULL);
- xmlSchemaParseWildcardNs(ctxt, schema, wild, node);
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?)");
- }
- /*
- * No component if minOccurs==maxOccurs==0.
- */
- if ((min == 0) && (max == 0)) {
- /* Don't free the wildcard, since it's already on the list. */
- return (NULL);
- }
- /*
- * Create the particle.
- */
- particle = xmlSchemaAddParticle(ctxt, node, min, max);
- if (particle == NULL)
- return (NULL);
- particle->annot = annot;
- particle->children = (xmlSchemaTreeItemPtr) wild;
-
- return (particle);
-}
-
-/**
- * xmlSchemaParseNotation:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Notation declaration
- *
- * Returns the new structure or NULL in case of error
- */
-static xmlSchemaNotationPtr
-xmlSchemaParseNotation(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- const xmlChar *name;
- xmlSchemaNotationPtr ret;
- xmlNodePtr child = NULL;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
- name = xmlSchemaGetProp(ctxt, node, "name");
- if (name == NULL) {
- xmlSchemaPErr2(ctxt, node, child, XML_SCHEMAP_NOTATION_NO_NAME,
- "Notation has no name\n", NULL, NULL);
- return (NULL);
- }
- ret = xmlSchemaAddNotation(ctxt, schema, name,
- ctxt->targetNamespace, node);
- if (ret == NULL)
- return (NULL);
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- ret->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?)");
- }
-
- return (ret);
-}
-
-/**
- * xmlSchemaParseAnyAttribute:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema AnyAttrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns a wildcard or NULL.
- */
-static xmlSchemaWildcardPtr
-xmlSchemaParseAnyAttribute(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema, xmlNodePtr node)
-{
- xmlSchemaWildcardPtr ret;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- ret = xmlSchemaAddWildcard(ctxt, schema, XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
- node);
- if (ret == NULL) {
- return (NULL);
- }
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "namespace")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "processContents"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * Parse the namespace list.
- */
- if (xmlSchemaParseWildcardNs(ctxt, schema, ret, node) != 0)
- return (NULL);
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- ret->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?)");
- }
-
- return (ret);
-}
-
-
-/**
- * xmlSchemaParseAttribute:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Attrribute declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the attribute declaration.
- */
-static xmlSchemaBasicItemPtr
-xmlSchemaParseLocalAttribute(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- xmlSchemaItemListPtr uses,
- int parentType)
-{
- const xmlChar *attrValue, *name = NULL, *ns = NULL;
- xmlSchemaAttributeUsePtr use = NULL;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- const xmlChar *tmpNs = NULL, *tmpName = NULL, *defValue = NULL;
- int isRef = 0, occurs = XML_SCHEMAS_ATTR_USE_OPTIONAL;
- int nberrors, hasForm = 0, defValueType = 0;
-
-#define WXS_ATTR_DEF_VAL_DEFAULT 1
-#define WXS_ATTR_DEF_VAL_FIXED 2
-
- /*
- * 3.2.3 Constraints on XML Representations of Attribute Declarations
- */
-
- if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
- attr = xmlSchemaGetPropNode(node, "ref");
- if (attr != NULL) {
- if (xmlSchemaPValAttrNodeQName(pctxt, schema,
- NULL, attr, &tmpNs, &tmpName) != 0) {
- return (NULL);
- }
- if (xmlSchemaCheckReference(pctxt, schema, node, attr, tmpNs) != 0)
- return(NULL);
- isRef = 1;
- }
- nberrors = pctxt->nberrors;
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if (isRef) {
- if (xmlStrEqual(attr->name, BAD_CAST "id")) {
- xmlSchemaPValAttrNodeID(pctxt, attr);
- goto attr_next;
- } else if (xmlStrEqual(attr->name, BAD_CAST "ref")) {
- goto attr_next;
- }
- } else {
- if (xmlStrEqual(attr->name, BAD_CAST "name")) {
- goto attr_next;
- } else if (xmlStrEqual(attr->name, BAD_CAST "id")) {
- xmlSchemaPValAttrNodeID(pctxt, attr);
- goto attr_next;
- } else if (xmlStrEqual(attr->name, BAD_CAST "type")) {
- xmlSchemaPValAttrNodeQName(pctxt, schema, NULL,
- attr, &tmpNs, &tmpName);
- goto attr_next;
- } else if (xmlStrEqual(attr->name, BAD_CAST "form")) {
- /*
- * Evaluate the target namespace
- */
- hasForm = 1;
- attrValue = xmlSchemaGetNodeContent(pctxt,
- (xmlNodePtr) attr);
- if (xmlStrEqual(attrValue, BAD_CAST "qualified")) {
- ns = pctxt->targetNamespace;
- } else if (!xmlStrEqual(attrValue, BAD_CAST "unqualified"))
- {
- xmlSchemaPSimpleTypeErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr,
- NULL, "(qualified | unqualified)",
- attrValue, NULL, NULL, NULL);
- }
- goto attr_next;
- }
- }
- if (xmlStrEqual(attr->name, BAD_CAST "use")) {
-
- attrValue = xmlSchemaGetNodeContent(pctxt, (xmlNodePtr) attr);
- /* TODO: Maybe we need to normalize the value beforehand. */
- if (xmlStrEqual(attrValue, BAD_CAST "optional"))
- occurs = XML_SCHEMAS_ATTR_USE_OPTIONAL;
- else if (xmlStrEqual(attrValue, BAD_CAST "prohibited"))
- occurs = XML_SCHEMAS_ATTR_USE_PROHIBITED;
- else if (xmlStrEqual(attrValue, BAD_CAST "required"))
- occurs = XML_SCHEMAS_ATTR_USE_REQUIRED;
- else {
- xmlSchemaPSimpleTypeErr(pctxt,
- XML_SCHEMAP_INVALID_ATTR_USE,
- NULL, (xmlNodePtr) attr,
- NULL, "(optional | prohibited | required)",
- attrValue, NULL, NULL, NULL);
- }
- goto attr_next;
- } else if (xmlStrEqual(attr->name, BAD_CAST "default")) {
- /*
- * 3.2.3 : 1
- * default and fixed must not both be present.
- */
- if (defValue) {
- xmlSchemaPMutualExclAttrErr(pctxt,
- XML_SCHEMAP_SRC_ATTRIBUTE_1,
- NULL, attr, "default", "fixed");
- } else {
- defValue = xmlSchemaGetNodeContent(pctxt, (xmlNodePtr) attr);
- defValueType = WXS_ATTR_DEF_VAL_DEFAULT;
- }
- goto attr_next;
- } else if (xmlStrEqual(attr->name, BAD_CAST "fixed")) {
- /*
- * 3.2.3 : 1
- * default and fixed must not both be present.
- */
- if (defValue) {
- xmlSchemaPMutualExclAttrErr(pctxt,
- XML_SCHEMAP_SRC_ATTRIBUTE_1,
- NULL, attr, "default", "fixed");
- } else {
- defValue = xmlSchemaGetNodeContent(pctxt, (xmlNodePtr) attr);
- defValueType = WXS_ATTR_DEF_VAL_FIXED;
- }
- goto attr_next;
- }
- } else if (! xmlStrEqual(attr->ns->href, xmlSchemaNs))
- goto attr_next;
-
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
-
-attr_next:
- attr = attr->next;
- }
- /*
- * 3.2.3 : 2
- * If default and use are both present, use must have
- * the actual value optional.
- */
- if ((defValueType == WXS_ATTR_DEF_VAL_DEFAULT) &&
- (occurs != XML_SCHEMAS_ATTR_USE_OPTIONAL)) {
- xmlSchemaPSimpleTypeErr(pctxt,
- XML_SCHEMAP_SRC_ATTRIBUTE_2,
- NULL, node, NULL,
- "(optional | prohibited | required)", NULL,
- "The value of the attribute 'use' must be 'optional' "
- "if the attribute 'default' is present",
- NULL, NULL);
- }
- /*
- * We want correct attributes.
- */
- if (nberrors != pctxt->nberrors)
- return(NULL);
- if (! isRef) {
- xmlSchemaAttributePtr attrDecl;
-
- /* TODO: move XML_SCHEMAS_QUALIF_ATTR to the parser. */
- if ((! hasForm) && (schema->flags & XML_SCHEMAS_QUALIF_ATTR))
- ns = pctxt->targetNamespace;
- /*
- * 3.2.6 Schema Component Constraint: xsi: Not Allowed
- * TODO: Move this to the component layer.
- */
- if (xmlStrEqual(ns, xmlSchemaInstanceNs)) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_NO_XSI,
- node, NULL,
- "The target namespace must not match '%s'",
- xmlSchemaInstanceNs, NULL);
- }
- attr = xmlSchemaGetPropNode(node, "name");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(pctxt, XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "name", NULL);
- return (NULL);
- }
- if (xmlSchemaPValAttrNode(pctxt, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
- return (NULL);
- }
- /*
- * 3.2.6 Schema Component Constraint: xmlns Not Allowed
- * TODO: Move this to the component layer.
- */
- if (xmlStrEqual(name, BAD_CAST "xmlns")) {
- xmlSchemaPSimpleTypeErr(pctxt,
- XML_SCHEMAP_NO_XMLNS,
- NULL, (xmlNodePtr) attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), NULL, NULL,
- "The value of the attribute must not match 'xmlns'",
- NULL, NULL);
- return (NULL);
- }
- if (occurs == XML_SCHEMAS_ATTR_USE_PROHIBITED)
- goto check_children;
- /*
- * Create the attribute use component.
- */
- use = xmlSchemaAddAttributeUse(pctxt, node);
- if (use == NULL)
- return(NULL);
- use->occurs = occurs;
- /*
- * Create the attribute declaration.
- */
- attrDecl = xmlSchemaAddAttribute(pctxt, schema, name, ns, node, 0);
- if (attrDecl == NULL)
- return (NULL);
- if (tmpName != NULL) {
- attrDecl->typeName = tmpName;
- attrDecl->typeNs = tmpNs;
- }
- use->attrDecl = attrDecl;
- /*
- * Value constraint.
- */
- if (defValue != NULL) {
- attrDecl->defValue = defValue;
- if (defValueType == WXS_ATTR_DEF_VAL_FIXED)
- attrDecl->flags |= XML_SCHEMAS_ATTR_FIXED;
- }
- } else if (occurs != XML_SCHEMAS_ATTR_USE_PROHIBITED) {
- xmlSchemaQNameRefPtr ref;
-
- /*
- * Create the attribute use component.
- */
- use = xmlSchemaAddAttributeUse(pctxt, node);
- if (use == NULL)
- return(NULL);
- /*
- * We need to resolve the reference at later stage.
- */
- WXS_ADD_PENDING(pctxt, use);
- use->occurs = occurs;
- /*
- * Create a QName reference to the attribute declaration.
- */
- ref = xmlSchemaNewQNameRef(pctxt, XML_SCHEMA_TYPE_ATTRIBUTE,
- tmpName, tmpNs);
- if (ref == NULL)
- return(NULL);
- /*
- * Assign the reference. This will be substituted for the
- * referenced attribute declaration when the QName is resolved.
- */
- use->attrDecl = WXS_ATTR_CAST ref;
- /*
- * Value constraint.
- */
- if (defValue != NULL)
- use->defValue = defValue;
- if (defValueType == WXS_ATTR_DEF_VAL_FIXED)
- use->flags |= XML_SCHEMA_ATTR_USE_FIXED;
- }
-
-check_children:
- /*
- * And now for the children...
- */
- child = node->children;
- if (occurs == XML_SCHEMAS_ATTR_USE_PROHIBITED) {
- xmlSchemaAttributeUseProhibPtr prohib;
-
- if (IS_SCHEMA(child, "annotation")) {
- xmlSchemaParseAnnotation(pctxt, child, 0);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(pctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?)");
- }
- /*
- * Check for pointlessness of attribute prohibitions.
- */
- if (parentType == XML_SCHEMA_TYPE_ATTRIBUTEGROUP) {
- xmlSchemaCustomWarning(ACTXT_CAST pctxt,
- XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH,
- node, NULL,
- "Skipping attribute use prohibition, since it is "
- "pointless inside an <attributeGroup>",
- NULL, NULL, NULL);
- return(NULL);
- } else if (parentType == XML_SCHEMA_TYPE_EXTENSION) {
- xmlSchemaCustomWarning(ACTXT_CAST pctxt,
- XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH,
- node, NULL,
- "Skipping attribute use prohibition, since it is "
- "pointless when extending a type",
- NULL, NULL, NULL);
- return(NULL);
- }
- if (! isRef) {
- tmpName = name;
- tmpNs = ns;
- }
- /*
- * Check for duplicate attribute prohibitions.
- */
- if (uses) {
- int i;
-
- for (i = 0; i < uses->nbItems; i++) {
- use = uses->items[i];
- if ((use->type == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB) &&
- (tmpName == (WXS_ATTR_PROHIB_CAST use)->name) &&
- (tmpNs == (WXS_ATTR_PROHIB_CAST use)->targetNamespace))
- {
- xmlChar *str = NULL;
-
- xmlSchemaCustomWarning(ACTXT_CAST pctxt,
- XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH,
- node, NULL,
- "Skipping duplicate attribute use prohibition '%s'",
- xmlSchemaFormatQName(&str, tmpNs, tmpName),
- NULL, NULL);
- FREE_AND_NULL(str)
- return(NULL);
- }
- }
- }
- /*
- * Create the attribute prohibition helper component.
- */
- prohib = xmlSchemaAddAttributeUseProhib(pctxt);
- if (prohib == NULL)
- return(NULL);
- prohib->node = node;
- prohib->name = tmpName;
- prohib->targetNamespace = tmpNs;
- if (isRef) {
- /*
- * We need at least to resolve to the attribute declaration.
- */
- WXS_ADD_PENDING(pctxt, prohib);
- }
- return(WXS_BASIC_CAST prohib);
- } else {
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * TODO: Should this go into the attr decl?
- */
- use->annot = xmlSchemaParseAnnotation(pctxt, child, 1);
- child = child->next;
- }
- if (isRef) {
- if (child != NULL) {
- if (IS_SCHEMA(child, "simpleType"))
- /*
- * 3.2.3 : 3.2
- * If ref is present, then all of <simpleType>,
- * form and type must be absent.
- */
- xmlSchemaPContentErr(pctxt,
- XML_SCHEMAP_SRC_ATTRIBUTE_3_2,
- NULL, node, child, NULL,
- "(annotation?)");
- else
- xmlSchemaPContentErr(pctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?)");
- }
- } else {
- if (IS_SCHEMA(child, "simpleType")) {
- if (WXS_ATTRUSE_DECL(use)->typeName != NULL) {
- /*
- * 3.2.3 : 4
- * type and <simpleType> must not both be present.
- */
- xmlSchemaPContentErr(pctxt, XML_SCHEMAP_SRC_ATTRIBUTE_4,
- NULL, node, child,
- "The attribute 'type' and the <simpleType> child "
- "are mutually exclusive", NULL);
- } else
- WXS_ATTRUSE_TYPEDEF(use) =
- xmlSchemaParseSimpleType(pctxt, schema, child, 0);
- child = child->next;
- }
- if (child != NULL)
- xmlSchemaPContentErr(pctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, simpleType?)");
- }
- }
- return (WXS_BASIC_CAST use);
-}
-
-
-static xmlSchemaAttributePtr
-xmlSchemaParseGlobalAttribute(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- const xmlChar *attrValue;
- xmlSchemaAttributePtr ret;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
-
- /*
- * Note that the w3c spec assumes the schema to be validated with schema
- * for schemas beforehand.
- *
- * 3.2.3 Constraints on XML Representations of Attribute Declarations
- */
- if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
- /*
- * 3.2.3 : 3.1
- * One of ref or name must be present, but not both
- */
- attr = xmlSchemaGetPropNode(node, "name");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(pctxt, XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "name", NULL);
- return (NULL);
- }
- if (xmlSchemaPValAttrNode(pctxt, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &attrValue) != 0) {
- return (NULL);
- }
- /*
- * 3.2.6 Schema Component Constraint: xmlns Not Allowed
- * TODO: Move this to the component layer.
- */
- if (xmlStrEqual(attrValue, BAD_CAST "xmlns")) {
- xmlSchemaPSimpleTypeErr(pctxt,
- XML_SCHEMAP_NO_XMLNS,
- NULL, (xmlNodePtr) attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), NULL, NULL,
- "The value of the attribute must not match 'xmlns'",
- NULL, NULL);
- return (NULL);
- }
- /*
- * 3.2.6 Schema Component Constraint: xsi: Not Allowed
- * TODO: Move this to the component layer.
- * Or better leave it here and add it to the component layer
- * if we have a schema construction API.
- */
- if (xmlStrEqual(pctxt->targetNamespace, xmlSchemaInstanceNs)) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_NO_XSI, node, NULL,
- "The target namespace must not match '%s'",
- xmlSchemaInstanceNs, NULL);
- }
-
- ret = xmlSchemaAddAttribute(pctxt, schema, attrValue,
- pctxt->targetNamespace, node, 1);
- if (ret == NULL)
- return (NULL);
- ret->flags |= XML_SCHEMAS_ATTR_GLOBAL;
-
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "default")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "fixed")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "name")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "type")))
- {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttrQName(pctxt, schema, NULL,
- node, "type", &ret->typeNs, &ret->typeName);
-
- xmlSchemaPValAttrID(pctxt, node, BAD_CAST "id");
- /*
- * Attribute "fixed".
- */
- ret->defValue = xmlSchemaGetProp(pctxt, node, "fixed");
- if (ret->defValue != NULL)
- ret->flags |= XML_SCHEMAS_ATTR_FIXED;
- /*
- * Attribute "default".
- */
- attr = xmlSchemaGetPropNode(node, "default");
- if (attr != NULL) {
- /*
- * 3.2.3 : 1
- * default and fixed must not both be present.
- */
- if (ret->flags & XML_SCHEMAS_ATTR_FIXED) {
- xmlSchemaPMutualExclAttrErr(pctxt, XML_SCHEMAP_SRC_ATTRIBUTE_1,
- WXS_BASIC_CAST ret, attr, "default", "fixed");
- } else
- ret->defValue = xmlSchemaGetNodeContent(pctxt, (xmlNodePtr) attr);
- }
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- ret->annot = xmlSchemaParseAnnotation(pctxt, child, 1);
- child = child->next;
- }
- if (IS_SCHEMA(child, "simpleType")) {
- if (ret->typeName != NULL) {
- /*
- * 3.2.3 : 4
- * type and <simpleType> must not both be present.
- */
- xmlSchemaPContentErr(pctxt, XML_SCHEMAP_SRC_ATTRIBUTE_4,
- NULL, node, child,
- "The attribute 'type' and the <simpleType> child "
- "are mutually exclusive", NULL);
- } else
- ret->subtypes = xmlSchemaParseSimpleType(pctxt, schema, child, 0);
- child = child->next;
- }
- if (child != NULL)
- xmlSchemaPContentErr(pctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, simpleType?)");
-
- return (ret);
-}
-
-/**
- * xmlSchemaParseAttributeGroupRef:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * Parse an attribute group definition reference.
- * Note that a reference to an attribute group does not
- * correspond to any component at all.
- * *WARNING* this interface is highly subject to change
- *
- * Returns the attribute group or NULL in case of error.
- */
-static xmlSchemaQNameRefPtr
-xmlSchemaParseAttributeGroupRef(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlSchemaQNameRefPtr ret;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- const xmlChar *refNs = NULL, *ref = NULL;
-
- if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- attr = xmlSchemaGetPropNode(node, "ref");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "ref", NULL);
- return (NULL);
- }
- xmlSchemaPValAttrNodeQName(pctxt, schema,
- NULL, attr, &refNs, &ref);
- if (xmlSchemaCheckReference(pctxt, schema, node, attr, refNs) != 0)
- return(NULL);
-
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "ref")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "id")))
- {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /* Attribute ID */
- xmlSchemaPValAttrID(pctxt, node, BAD_CAST "id");
-
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * TODO: We do not have a place to store the annotation, do we?
- */
- xmlSchemaParseAnnotation(pctxt, child, 0);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(pctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?)");
- }
-
- /*
- * Handle attribute group redefinitions.
- */
- if (pctxt->isRedefine && pctxt->redef &&
- (pctxt->redef->item->type ==
- XML_SCHEMA_TYPE_ATTRIBUTEGROUP) &&
- (ref == pctxt->redef->refName) &&
- (refNs == pctxt->redef->refTargetNs))
- {
- /*
- * SPEC src-redefine:
- * (7.1) "If it has an <attributeGroup> among its contents
- * the `actual value` of whose ref [attribute] is the same
- * as the `actual value` of its own name attribute plus
- * target namespace, then it must have exactly one such group."
- */
- if (pctxt->redefCounter != 0) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_SRC_REDEFINE, node, NULL,
- "The redefining attribute group definition "
- "'%s' must not contain more than one "
- "reference to the redefined definition",
- xmlSchemaFormatQName(&str, refNs, ref), NULL);
- FREE_AND_NULL(str);
- return(NULL);
- }
- pctxt->redefCounter++;
- /*
- * URGENT TODO: How to ensure that the reference will not be
- * handled by the normal component resolution mechanism?
- */
- ret = xmlSchemaNewQNameRef(pctxt,
- XML_SCHEMA_TYPE_ATTRIBUTEGROUP, ref, refNs);
- if (ret == NULL)
- return(NULL);
- ret->node = node;
- pctxt->redef->reference = WXS_BASIC_CAST ret;
- } else {
- /*
- * Create a QName-reference helper component. We will substitute this
- * component for the attribute uses of the referenced attribute group
- * definition.
- */
- ret = xmlSchemaNewQNameRef(pctxt,
- XML_SCHEMA_TYPE_ATTRIBUTEGROUP, ref, refNs);
- if (ret == NULL)
- return(NULL);
- ret->node = node;
- /* Add to pending items, to be able to resolve the reference. */
- WXS_ADD_PENDING(pctxt, ret);
- }
- return (ret);
-}
-
-/**
- * xmlSchemaParseAttributeGroupDefinition:
- * @pctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Attribute Group declaration
- * *WARNING* this interface is highly subject to change
- *
- * Returns the attribute group definition or NULL in case of error.
- */
-static xmlSchemaAttributeGroupPtr
-xmlSchemaParseAttributeGroupDefinition(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- const xmlChar *name;
- xmlSchemaAttributeGroupPtr ret;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- int hasRefs = 0;
-
- if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- attr = xmlSchemaGetPropNode(node, "name");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "name", NULL);
- return (NULL);
- }
- /*
- * The name is crucial, exit if invalid.
- */
- if (xmlSchemaPValAttrNode(pctxt,
- NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
- return (NULL);
- }
- ret = xmlSchemaAddAttributeGroupDefinition(pctxt, schema,
- name, pctxt->targetNamespace, node);
- if (ret == NULL)
- return (NULL);
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "name")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "id")))
- {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /* Attribute ID */
- xmlSchemaPValAttrID(pctxt, node, BAD_CAST "id");
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- ret->annot = xmlSchemaParseAnnotation(pctxt, child, 1);
- child = child->next;
- }
- /*
- * Parse contained attribute decls/refs.
- */
- if (xmlSchemaParseLocalAttributes(pctxt, schema, &child,
- (xmlSchemaItemListPtr *) &(ret->attrUses),
- XML_SCHEMA_TYPE_ATTRIBUTEGROUP, &hasRefs) == -1)
- return(NULL);
- if (hasRefs)
- ret->flags |= XML_SCHEMAS_ATTRGROUP_HAS_REFS;
- /*
- * Parse the attribute wildcard.
- */
- if (IS_SCHEMA(child, "anyAttribute")) {
- ret->attributeWildcard = xmlSchemaParseAnyAttribute(pctxt,
- schema, child);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(pctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, ((attribute | attributeGroup)*, anyAttribute?))");
- }
- return (ret);
-}
-
-/**
- * xmlSchemaPValAttrFormDefault:
- * @value: the value
- * @flags: the flags to be modified
- * @flagQualified: the specific flag for "qualified"
- *
- * Returns 0 if the value is valid, 1 otherwise.
- */
-static int
-xmlSchemaPValAttrFormDefault(const xmlChar *value,
- int *flags,
- int flagQualified)
-{
- if (xmlStrEqual(value, BAD_CAST "qualified")) {
- if ((*flags & flagQualified) == 0)
- *flags |= flagQualified;
- } else if (!xmlStrEqual(value, BAD_CAST "unqualified"))
- return (1);
-
- return (0);
-}
-
-/**
- * xmlSchemaPValAttrBlockFinal:
- * @value: the value
- * @flags: the flags to be modified
- * @flagAll: the specific flag for "#all"
- * @flagExtension: the specific flag for "extension"
- * @flagRestriction: the specific flag for "restriction"
- * @flagSubstitution: the specific flag for "substitution"
- * @flagList: the specific flag for "list"
- * @flagUnion: the specific flag for "union"
- *
- * Validates the value of the attribute "final" and "block". The value
- * is converted into the specified flag values and returned in @flags.
- *
- * Returns 0 if the value is valid, 1 otherwise.
- */
-
-static int
-xmlSchemaPValAttrBlockFinal(const xmlChar *value,
- int *flags,
- int flagAll,
- int flagExtension,
- int flagRestriction,
- int flagSubstitution,
- int flagList,
- int flagUnion)
-{
- int ret = 0;
-
- /*
- * TODO: This does not check for dublicate entries.
- */
- if ((flags == NULL) || (value == NULL))
- return (-1);
- if (value[0] == 0)
- return (0);
- if (xmlStrEqual(value, BAD_CAST "#all")) {
- if (flagAll != -1)
- *flags |= flagAll;
- else {
- if (flagExtension != -1)
- *flags |= flagExtension;
- if (flagRestriction != -1)
- *flags |= flagRestriction;
- if (flagSubstitution != -1)
- *flags |= flagSubstitution;
- if (flagList != -1)
- *flags |= flagList;
- if (flagUnion != -1)
- *flags |= flagUnion;
- }
- } else {
- const xmlChar *end, *cur = value;
- xmlChar *item;
-
- do {
- while (IS_BLANK_CH(*cur))
- cur++;
- end = cur;
- while ((*end != 0) && (!(IS_BLANK_CH(*end))))
- end++;
- if (end == cur)
- break;
- item = xmlStrndup(cur, end - cur);
- if (xmlStrEqual(item, BAD_CAST "extension")) {
- if (flagExtension != -1) {
- if ((*flags & flagExtension) == 0)
- *flags |= flagExtension;
- } else
- ret = 1;
- } else if (xmlStrEqual(item, BAD_CAST "restriction")) {
- if (flagRestriction != -1) {
- if ((*flags & flagRestriction) == 0)
- *flags |= flagRestriction;
- } else
- ret = 1;
- } else if (xmlStrEqual(item, BAD_CAST "substitution")) {
- if (flagSubstitution != -1) {
- if ((*flags & flagSubstitution) == 0)
- *flags |= flagSubstitution;
- } else
- ret = 1;
- } else if (xmlStrEqual(item, BAD_CAST "list")) {
- if (flagList != -1) {
- if ((*flags & flagList) == 0)
- *flags |= flagList;
- } else
- ret = 1;
- } else if (xmlStrEqual(item, BAD_CAST "union")) {
- if (flagUnion != -1) {
- if ((*flags & flagUnion) == 0)
- *flags |= flagUnion;
- } else
- ret = 1;
- } else
- ret = 1;
- if (item != NULL)
- xmlFree(item);
- cur = end;
- } while ((ret == 0) && (*cur != 0));
- }
-
- return (ret);
-}
-
-static int
-xmlSchemaCheckCSelectorXPath(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaIDCPtr idc,
- xmlSchemaIDCSelectPtr selector,
- xmlAttrPtr attr,
- int isField)
-{
- xmlNodePtr node;
-
- /*
- * c-selector-xpath:
- * Schema Component Constraint: Selector Value OK
- *
- * TODO: 1 The {selector} must be a valid XPath expression, as defined
- * in [XPath].
- */
- if (selector == NULL) {
- xmlSchemaPErr(ctxt, idc->node,
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaCheckCSelectorXPath, "
- "the selector is not specified.\n", NULL, NULL);
- return (-1);
- }
- if (attr == NULL)
- node = idc->node;
- else
- node = (xmlNodePtr) attr;
- if (selector->xpath == NULL) {
- xmlSchemaPCustomErr(ctxt,
- /* TODO: Adjust error code. */
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, node,
- "The XPath expression of the selector is not valid", NULL);
- return (XML_SCHEMAP_S4S_ATTR_INVALID_VALUE);
- } else {
- const xmlChar **nsArray = NULL;
- xmlNsPtr *nsList = NULL;
- /*
- * Compile the XPath expression.
- */
- /*
- * TODO: We need the array of in-scope namespaces for compilation.
- * TODO: Call xmlPatterncompile with different options for selector/
- * field.
- */
- if (attr == NULL)
- nsList = NULL;
- else
- nsList = xmlGetNsList(attr->doc, attr->parent);
- /*
- * Build an array of prefixes and namespaces.
- */
- if (nsList != NULL) {
- int i, count = 0;
-
- for (i = 0; nsList[i] != NULL; i++)
- count++;
-
- nsArray = (const xmlChar **) xmlMalloc(
- (count * 2 + 1) * sizeof(const xmlChar *));
- if (nsArray == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating a namespace array",
- NULL);
- xmlFree(nsList);
- return (-1);
- }
- for (i = 0; i < count; i++) {
- nsArray[2 * i] = nsList[i]->href;
- nsArray[2 * i + 1] = nsList[i]->prefix;
- }
- nsArray[count * 2] = NULL;
- xmlFree(nsList);
- }
- /*
- * TODO: Differentiate between "selector" and "field".
- */
- if (isField)
- selector->xpathComp = (void *) xmlPatterncompile(selector->xpath,
- NULL, XML_PATTERN_XSFIELD, nsArray);
- else
- selector->xpathComp = (void *) xmlPatterncompile(selector->xpath,
- NULL, XML_PATTERN_XSSEL, nsArray);
- if (nsArray != NULL)
- xmlFree((xmlChar **) nsArray);
-
- if (selector->xpathComp == NULL) {
- xmlSchemaPCustomErr(ctxt,
- /* TODO: Adjust error code? */
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, node,
- "The XPath expression '%s' could not be "
- "compiled", selector->xpath);
- return (XML_SCHEMAP_S4S_ATTR_INVALID_VALUE);
- }
- }
- return (0);
-}
-
-#define ADD_ANNOTATION(annot) \
- xmlSchemaAnnotPtr cur = item->annot; \
- if (item->annot == NULL) { \
- item->annot = annot; \
- return (annot); \
- } \
- cur = item->annot; \
- if (cur->next != NULL) { \
- cur = cur->next; \
- } \
- cur->next = annot;
-
-/**
- * xmlSchemaAssignAnnotation:
- * @item: the schema component
- * @annot: the annotation
- *
- * Adds the annotation to the given schema component.
- *
- * Returns the given annotaion.
- */
-static xmlSchemaAnnotPtr
-xmlSchemaAddAnnotation(xmlSchemaAnnotItemPtr annItem,
- xmlSchemaAnnotPtr annot)
-{
- if ((annItem == NULL) || (annot == NULL))
- return (NULL);
- switch (annItem->type) {
- case XML_SCHEMA_TYPE_ELEMENT: {
- xmlSchemaElementPtr item = (xmlSchemaElementPtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE: {
- xmlSchemaAttributePtr item = (xmlSchemaAttributePtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_TYPE_ANY_ATTRIBUTE:
- case XML_SCHEMA_TYPE_ANY: {
- xmlSchemaWildcardPtr item = (xmlSchemaWildcardPtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_TYPE_PARTICLE:
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- case XML_SCHEMA_TYPE_IDC_UNIQUE: {
- xmlSchemaAnnotItemPtr item = (xmlSchemaAnnotItemPtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP: {
- xmlSchemaAttributeGroupPtr item =
- (xmlSchemaAttributeGroupPtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_TYPE_NOTATION: {
- xmlSchemaNotationPtr item = (xmlSchemaNotationPtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_FACET_MININCLUSIVE:
- case XML_SCHEMA_FACET_MINEXCLUSIVE:
- case XML_SCHEMA_FACET_MAXINCLUSIVE:
- case XML_SCHEMA_FACET_MAXEXCLUSIVE:
- case XML_SCHEMA_FACET_TOTALDIGITS:
- case XML_SCHEMA_FACET_FRACTIONDIGITS:
- case XML_SCHEMA_FACET_PATTERN:
- case XML_SCHEMA_FACET_ENUMERATION:
- case XML_SCHEMA_FACET_WHITESPACE:
- case XML_SCHEMA_FACET_LENGTH:
- case XML_SCHEMA_FACET_MAXLENGTH:
- case XML_SCHEMA_FACET_MINLENGTH: {
- xmlSchemaFacetPtr item = (xmlSchemaFacetPtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_TYPE_SIMPLE:
- case XML_SCHEMA_TYPE_COMPLEX: {
- xmlSchemaTypePtr item = (xmlSchemaTypePtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_TYPE_GROUP: {
- xmlSchemaModelGroupDefPtr item = (xmlSchemaModelGroupDefPtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- case XML_SCHEMA_TYPE_SEQUENCE:
- case XML_SCHEMA_TYPE_CHOICE:
- case XML_SCHEMA_TYPE_ALL: {
- xmlSchemaModelGroupPtr item = (xmlSchemaModelGroupPtr) annItem;
- ADD_ANNOTATION(annot)
- }
- break;
- default:
- xmlSchemaPCustomErr(NULL,
- XML_SCHEMAP_INTERNAL,
- NULL, NULL,
- "Internal error: xmlSchemaAddAnnotation, "
- "The item is not a annotated schema component", NULL);
- break;
- }
- return (annot);
-}
-
-/**
- * xmlSchemaParseIDCSelectorAndField:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * Parses a XML Schema identity-contraint definition's
- * <selector> and <field> elements.
- *
- * Returns the parsed identity-constraint definition.
- */
-static xmlSchemaIDCSelectPtr
-xmlSchemaParseIDCSelectorAndField(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaIDCPtr idc,
- xmlNodePtr node,
- int isField)
-{
- xmlSchemaIDCSelectPtr item;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
-
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "xpath"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /*
- * Create the item.
- */
- item = (xmlSchemaIDCSelectPtr) xmlMalloc(sizeof(xmlSchemaIDCSelect));
- if (item == NULL) {
- xmlSchemaPErrMemory(ctxt,
- "allocating a 'selector' of an identity-constraint definition",
- NULL);
- return (NULL);
- }
- memset(item, 0, sizeof(xmlSchemaIDCSelect));
- /*
- * Attribute "xpath" (mandatory).
- */
- attr = xmlSchemaGetPropNode(node, "xpath");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node,
- "name", NULL);
- } else {
- item->xpath = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- /*
- * URGENT TODO: "field"s have an other syntax than "selector"s.
- */
-
- if (xmlSchemaCheckCSelectorXPath(ctxt, idc, item, attr,
- isField) == -1) {
- xmlSchemaPErr(ctxt,
- (xmlNodePtr) attr,
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaParseIDCSelectorAndField, "
- "validating the XPath expression of a IDC selector.\n",
- NULL, NULL);
- }
-
- }
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * Add the annotation to the parent IDC.
- */
- xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) idc,
- xmlSchemaParseAnnotation(ctxt, child, 1));
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?)");
- }
-
- return (item);
-}
-
-/**
- * xmlSchemaParseIDC:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * Parses a XML Schema identity-contraint definition.
- *
- * Returns the parsed identity-constraint definition.
- */
-static xmlSchemaIDCPtr
-xmlSchemaParseIDC(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- xmlSchemaTypeType idcCategory,
- const xmlChar *targetNamespace)
-{
- xmlSchemaIDCPtr item = NULL;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- const xmlChar *name = NULL;
- xmlSchemaIDCSelectPtr field = NULL, lastField = NULL;
-
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "name")) &&
- ((idcCategory != XML_SCHEMA_TYPE_IDC_KEYREF) ||
- (!xmlStrEqual(attr->name, BAD_CAST "refer")))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /*
- * Attribute "name" (mandatory).
- */
- attr = xmlSchemaGetPropNode(node, "name");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node,
- "name", NULL);
- return (NULL);
- } else if (xmlSchemaPValAttrNode(ctxt,
- NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
- return (NULL);
- }
- /* Create the component. */
- item = xmlSchemaAddIDC(ctxt, schema, name, targetNamespace,
- idcCategory, node);
- if (item == NULL)
- return(NULL);
-
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- if (idcCategory == XML_SCHEMA_TYPE_IDC_KEYREF) {
- /*
- * Attribute "refer" (mandatory).
- */
- attr = xmlSchemaGetPropNode(node, "refer");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node,
- "refer", NULL);
- } else {
- /*
- * Create a reference item.
- */
- item->ref = xmlSchemaNewQNameRef(ctxt, XML_SCHEMA_TYPE_IDC_KEY,
- NULL, NULL);
- if (item->ref == NULL)
- return (NULL);
- xmlSchemaPValAttrNodeQName(ctxt, schema,
- NULL, attr,
- &(item->ref->targetNamespace),
- &(item->ref->name));
- xmlSchemaCheckReference(ctxt, schema, node, attr,
- item->ref->targetNamespace);
- }
- }
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- item->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (child == NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_MISSING,
- NULL, node, child,
- "A child element is missing",
- "(annotation?, (selector, field+))");
- }
- /*
- * Child element <selector>.
- */
- if (IS_SCHEMA(child, "selector")) {
- item->selector = xmlSchemaParseIDCSelectorAndField(ctxt,
- item, child, 0);
- child = child->next;
- /*
- * Child elements <field>.
- */
- if (IS_SCHEMA(child, "field")) {
- do {
- field = xmlSchemaParseIDCSelectorAndField(ctxt,
- item, child, 1);
- if (field != NULL) {
- field->index = item->nbFields;
- item->nbFields++;
- if (lastField != NULL)
- lastField->next = field;
- else
- item->fields = field;
- lastField = field;
- }
- child = child->next;
- } while (IS_SCHEMA(child, "field"));
- } else {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?, (selector, field+))");
- }
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?, (selector, field+))");
- }
-
- return (item);
-}
-
-/**
- * xmlSchemaParseElement:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- * @topLevel: indicates if this is global declaration
- *
- * Parses a XML schema element declaration.
- * *WARNING* this interface is highly subject to change
- *
- * Returns the element declaration or a particle; NULL in case
- * of an error or if the particle has minOccurs==maxOccurs==0.
- */
-static xmlSchemaBasicItemPtr
-xmlSchemaParseElement(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node, int *isElemRef, int topLevel)
-{
- xmlSchemaElementPtr decl = NULL;
- xmlSchemaParticlePtr particle = NULL;
- xmlSchemaAnnotPtr annot = NULL;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr, nameAttr;
- int min, max, isRef = 0;
- xmlChar *des = NULL;
-
- /* 3.3.3 Constraints on XML Representations of Element Declarations */
- /* TODO: Complete implementation of 3.3.6 */
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- if (isElemRef != NULL)
- *isElemRef = 0;
- /*
- * If we get a "ref" attribute on a local <element> we will assume it's
- * a reference - even if there's a "name" attribute; this seems to be more
- * robust.
- */
- nameAttr = xmlSchemaGetPropNode(node, "name");
- attr = xmlSchemaGetPropNode(node, "ref");
- if ((topLevel) || (attr == NULL)) {
- if (nameAttr == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "name", NULL);
- return (NULL);
- }
- } else
- isRef = 1;
-
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- /*
- * Skip particle part if a global declaration.
- */
- if (topLevel)
- goto declaration_part;
- /*
- * The particle part ==================================================
- */
- min = xmlGetMinOccurs(ctxt, node, 0, -1, 1, "xs:nonNegativeInteger");
- max = xmlGetMaxOccurs(ctxt, node, 0, UNBOUNDED, 1, "(xs:nonNegativeInteger | unbounded)");
- xmlSchemaPCheckParticleCorrect_2(ctxt, NULL, node, min, max);
- particle = xmlSchemaAddParticle(ctxt, node, min, max);
- if (particle == NULL)
- goto return_null;
-
- /* ret->flags |= XML_SCHEMAS_ELEM_REF; */
-
- if (isRef) {
- const xmlChar *refNs = NULL, *ref = NULL;
- xmlSchemaQNameRefPtr refer = NULL;
- /*
- * The reference part =============================================
- */
- if (isElemRef != NULL)
- *isElemRef = 1;
-
- xmlSchemaPValAttrNodeQName(ctxt, schema,
- NULL, attr, &refNs, &ref);
- xmlSchemaCheckReference(ctxt, schema, node, attr, refNs);
- /*
- * SPEC (3.3.3 : 2.1) "One of ref or name must be present, but not both"
- */
- if (nameAttr != NULL) {
- xmlSchemaPMutualExclAttrErr(ctxt,
- XML_SCHEMAP_SRC_ELEMENT_2_1, NULL, nameAttr, "ref", "name");
- }
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if (xmlStrEqual(attr->name, BAD_CAST "ref") ||
- xmlStrEqual(attr->name, BAD_CAST "name") ||
- xmlStrEqual(attr->name, BAD_CAST "id") ||
- xmlStrEqual(attr->name, BAD_CAST "maxOccurs") ||
- xmlStrEqual(attr->name, BAD_CAST "minOccurs"))
- {
- attr = attr->next;
- continue;
- } else {
- /* SPEC (3.3.3 : 2.2) */
- xmlSchemaPCustomAttrErr(ctxt,
- XML_SCHEMAP_SRC_ELEMENT_2_2,
- NULL, NULL, attr,
- "Only the attributes 'minOccurs', 'maxOccurs' and "
- "'id' are allowed in addition to 'ref'");
- break;
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /*
- * No children except <annotation> expected.
- */
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL, "(annotation?)");
- }
- if ((min == 0) && (max == 0))
- goto return_null;
- /*
- * Create the reference item and attach it to the particle.
- */
- refer = xmlSchemaNewQNameRef(ctxt, XML_SCHEMA_TYPE_ELEMENT,
- ref, refNs);
- if (refer == NULL)
- goto return_null;
- particle->children = (xmlSchemaTreeItemPtr) refer;
- particle->annot = annot;
- /*
- * Add the particle to pending components, since the reference
- * need to be resolved.
- */
- WXS_ADD_PENDING(ctxt, particle);
- return ((xmlSchemaBasicItemPtr) particle);
- }
- /*
- * The declaration part ===============================================
- */
-declaration_part:
- {
- const xmlChar *ns = NULL, *fixed, *name, *attrValue;
- xmlSchemaIDCPtr curIDC = NULL, lastIDC = NULL;
-
- if (xmlSchemaPValAttrNode(ctxt, NULL, nameAttr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0)
- goto return_null;
- /*
- * Evaluate the target namespace.
- */
- if (topLevel) {
- ns = ctxt->targetNamespace;
- } else {
- attr = xmlSchemaGetPropNode(node, "form");
- if (attr != NULL) {
- attrValue = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- if (xmlStrEqual(attrValue, BAD_CAST "qualified")) {
- ns = ctxt->targetNamespace;
- } else if (!xmlStrEqual(attrValue, BAD_CAST "unqualified")) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr,
- NULL, "(qualified | unqualified)",
- attrValue, NULL, NULL, NULL);
- }
- } else if (schema->flags & XML_SCHEMAS_QUALIF_ELEM)
- ns = ctxt->targetNamespace;
- }
- decl = xmlSchemaAddElement(ctxt, name, ns, node, topLevel);
- if (decl == NULL) {
- goto return_null;
- }
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "name")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "type")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "default")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "fixed")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "block")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "nillable")))
- {
- if (topLevel == 0) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "maxOccurs")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "minOccurs")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "form")))
- {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if ((!xmlStrEqual(attr->name, BAD_CAST "final")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "abstract")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "substitutionGroup"))) {
-
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
-
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /*
- * Extract/validate attributes.
- */
- if (topLevel) {
- /*
- * Process top attributes of global element declarations here.
- */
- decl->flags |= XML_SCHEMAS_ELEM_GLOBAL;
- decl->flags |= XML_SCHEMAS_ELEM_TOPLEVEL;
- xmlSchemaPValAttrQName(ctxt, schema,
- NULL, node, "substitutionGroup",
- &(decl->substGroupNs), &(decl->substGroup));
- if (xmlGetBooleanProp(ctxt, node, "abstract", 0))
- decl->flags |= XML_SCHEMAS_ELEM_ABSTRACT;
- /*
- * Attribute "final".
- */
- attr = xmlSchemaGetPropNode(node, "final");
- if (attr == NULL) {
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_EXTENSION)
- decl->flags |= XML_SCHEMAS_ELEM_FINAL_EXTENSION;
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION)
- decl->flags |= XML_SCHEMAS_ELEM_FINAL_RESTRICTION;
- } else {
- attrValue = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- if (xmlSchemaPValAttrBlockFinal(attrValue, &(decl->flags),
- -1,
- XML_SCHEMAS_ELEM_FINAL_EXTENSION,
- XML_SCHEMAS_ELEM_FINAL_RESTRICTION, -1, -1, -1) != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr,
- NULL, "(#all | List of (extension | restriction))",
- attrValue, NULL, NULL, NULL);
- }
- }
- }
- /*
- * Attribute "block".
- */
- attr = xmlSchemaGetPropNode(node, "block");
- if (attr == NULL) {
- /*
- * Apply default "block" values.
- */
- if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION)
- decl->flags |= XML_SCHEMAS_ELEM_BLOCK_RESTRICTION;
- if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION)
- decl->flags |= XML_SCHEMAS_ELEM_BLOCK_EXTENSION;
- if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION)
- decl->flags |= XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION;
- } else {
- attrValue = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- if (xmlSchemaPValAttrBlockFinal(attrValue, &(decl->flags),
- -1,
- XML_SCHEMAS_ELEM_BLOCK_EXTENSION,
- XML_SCHEMAS_ELEM_BLOCK_RESTRICTION,
- XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION, -1, -1) != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr,
- NULL, "(#all | List of (extension | "
- "restriction | substitution))", attrValue,
- NULL, NULL, NULL);
- }
- }
- if (xmlGetBooleanProp(ctxt, node, "nillable", 0))
- decl->flags |= XML_SCHEMAS_ELEM_NILLABLE;
-
- attr = xmlSchemaGetPropNode(node, "type");
- if (attr != NULL) {
- xmlSchemaPValAttrNodeQName(ctxt, schema,
- NULL, attr,
- &(decl->namedTypeNs), &(decl->namedType));
- xmlSchemaCheckReference(ctxt, schema, node,
- attr, decl->namedTypeNs);
- }
- decl->value = xmlSchemaGetProp(ctxt, node, "default");
- attr = xmlSchemaGetPropNode(node, "fixed");
- if (attr != NULL) {
- fixed = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- if (decl->value != NULL) {
- /*
- * 3.3.3 : 1
- * default and fixed must not both be present.
- */
- xmlSchemaPMutualExclAttrErr(ctxt,
- XML_SCHEMAP_SRC_ELEMENT_1,
- NULL, attr, "default", "fixed");
- } else {
- decl->flags |= XML_SCHEMAS_ELEM_FIXED;
- decl->value = fixed;
- }
- }
- /*
- * And now for the children...
- */
- if (IS_SCHEMA(child, "complexType")) {
- /*
- * 3.3.3 : 3
- * "type" and either <simpleType> or <complexType> are mutually
- * exclusive
- */
- if (decl->namedType != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_SRC_ELEMENT_3,
- NULL, node, child,
- "The attribute 'type' and the <complexType> child are "
- "mutually exclusive", NULL);
- } else
- WXS_ELEM_TYPEDEF(decl) = xmlSchemaParseComplexType(ctxt, schema, child, 0);
- child = child->next;
- } else if (IS_SCHEMA(child, "simpleType")) {
- /*
- * 3.3.3 : 3
- * "type" and either <simpleType> or <complexType> are
- * mutually exclusive
- */
- if (decl->namedType != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_SRC_ELEMENT_3,
- NULL, node, child,
- "The attribute 'type' and the <simpleType> child are "
- "mutually exclusive", NULL);
- } else
- WXS_ELEM_TYPEDEF(decl) = xmlSchemaParseSimpleType(ctxt, schema, child, 0);
- child = child->next;
- }
- while ((IS_SCHEMA(child, "unique")) ||
- (IS_SCHEMA(child, "key")) || (IS_SCHEMA(child, "keyref"))) {
- if (IS_SCHEMA(child, "unique")) {
- curIDC = xmlSchemaParseIDC(ctxt, schema, child,
- XML_SCHEMA_TYPE_IDC_UNIQUE, decl->targetNamespace);
- } else if (IS_SCHEMA(child, "key")) {
- curIDC = xmlSchemaParseIDC(ctxt, schema, child,
- XML_SCHEMA_TYPE_IDC_KEY, decl->targetNamespace);
- } else if (IS_SCHEMA(child, "keyref")) {
- curIDC = xmlSchemaParseIDC(ctxt, schema, child,
- XML_SCHEMA_TYPE_IDC_KEYREF, decl->targetNamespace);
- }
- if (lastIDC != NULL)
- lastIDC->next = curIDC;
- else
- decl->idcs = (void *) curIDC;
- lastIDC = curIDC;
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?, ((simpleType | complexType)?, "
- "(unique | key | keyref)*))");
- }
- decl->annot = annot;
- }
- /*
- * NOTE: Element Declaration Representation OK 4. will be checked at a
- * different layer.
- */
- FREE_AND_NULL(des)
- if (topLevel)
- return ((xmlSchemaBasicItemPtr) decl);
- else {
- particle->children = (xmlSchemaTreeItemPtr) decl;
- return ((xmlSchemaBasicItemPtr) particle);
- }
-
-return_null:
- FREE_AND_NULL(des);
- if (annot != NULL) {
- if (particle != NULL)
- particle->annot = NULL;
- if (decl != NULL)
- decl->annot = NULL;
- xmlSchemaFreeAnnot(annot);
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaParseUnion:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Union definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of internal error, 0 in case of success and a positive
- * error code otherwise.
- */
-static int
-xmlSchemaParseUnion(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlSchemaTypePtr type;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- const xmlChar *cur = NULL;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (-1);
- /* Not a component, don't create it. */
- type = ctxt->ctxtType;
- /*
- * Mark the simple type as being of variety "union".
- */
- type->flags |= XML_SCHEMAS_TYPE_VARIETY_UNION;
- /*
- * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen,
- * then the `simple ur-type definition`."
- */
- type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE);
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "memberTypes"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * Attribute "memberTypes". This is a list of QNames.
- * TODO: Check the value to contain anything.
- */
- attr = xmlSchemaGetPropNode(node, "memberTypes");
- if (attr != NULL) {
- const xmlChar *end;
- xmlChar *tmp;
- const xmlChar *localName, *nsName;
- xmlSchemaTypeLinkPtr link, lastLink = NULL;
- xmlSchemaQNameRefPtr ref;
-
- cur = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- type->base = cur;
- do {
- while (IS_BLANK_CH(*cur))
- cur++;
- end = cur;
- while ((*end != 0) && (!(IS_BLANK_CH(*end))))
- end++;
- if (end == cur)
- break;
- tmp = xmlStrndup(cur, end - cur);
- if (xmlSchemaPValAttrNodeQNameValue(ctxt, schema,
- NULL, attr, BAD_CAST tmp, &nsName, &localName) == 0) {
- /*
- * Create the member type link.
- */
- link = (xmlSchemaTypeLinkPtr)
- xmlMalloc(sizeof(xmlSchemaTypeLink));
- if (link == NULL) {
- xmlSchemaPErrMemory(ctxt, "xmlSchemaParseUnion, "
- "allocating a type link", NULL);
- return (-1);
- }
- link->type = NULL;
- link->next = NULL;
- if (lastLink == NULL)
- type->memberTypes = link;
- else
- lastLink->next = link;
- lastLink = link;
- /*
- * Create a reference item.
- */
- ref = xmlSchemaNewQNameRef(ctxt, XML_SCHEMA_TYPE_SIMPLE,
- localName, nsName);
- if (ref == NULL) {
- FREE_AND_NULL(tmp)
- return (-1);
- }
- /*
- * Assign the reference to the link, it will be resolved
- * later during fixup of the union simple type.
- */
- link->type = (xmlSchemaTypePtr) ref;
- }
- FREE_AND_NULL(tmp)
- cur = end;
- } while (*cur != 0);
-
- }
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * Add the annotation to the simple type ancestor.
- */
- xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
- xmlSchemaParseAnnotation(ctxt, child, 1));
- child = child->next;
- }
- if (IS_SCHEMA(child, "simpleType")) {
- xmlSchemaTypePtr subtype, last = NULL;
-
- /*
- * Anchor the member types in the "subtypes" field of the
- * simple type.
- */
- while (IS_SCHEMA(child, "simpleType")) {
- subtype = (xmlSchemaTypePtr)
- xmlSchemaParseSimpleType(ctxt, schema, child, 0);
- if (subtype != NULL) {
- if (last == NULL) {
- type->subtypes = subtype;
- last = subtype;
- } else {
- last->next = subtype;
- last = subtype;
- }
- last->next = NULL;
- }
- child = child->next;
- }
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL, "(annotation?, simpleType*)");
- }
- if ((attr == NULL) && (type->subtypes == NULL)) {
- /*
- * src-union-memberTypes-or-simpleTypes
- * Either the memberTypes [attribute] of the <union> element must
- * be non-empty or there must be at least one simpleType [child].
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_UNION_MEMBERTYPES_OR_SIMPLETYPES,
- NULL, node,
- "Either the attribute 'memberTypes' or "
- "at least one <simpleType> child must be present", NULL);
- }
- return (0);
-}
-
-/**
- * xmlSchemaParseList:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema List definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- * 1 in case of success.
- */
-static xmlSchemaTypePtr
-xmlSchemaParseList(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlSchemaTypePtr type;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
- /* Not a component, don't create it. */
- type = ctxt->ctxtType;
- /*
- * Mark the type as being of variety "list".
- */
- type->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
- /*
- * SPEC (Base type) (2) "If the <list> or <union> alternative is chosen,
- * then the `simple ur-type definition`."
- */
- type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE);
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "itemType"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
-
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
- /*
- * Attribute "itemType". NOTE that we will use the "ref" and "refNs"
- * fields for holding the reference to the itemType.
- *
- * REVAMP TODO: Use the "base" and "baseNs" fields, since we will remove
- * the "ref" fields.
- */
- xmlSchemaPValAttrQName(ctxt, schema, NULL,
- node, "itemType", &(type->baseNs), &(type->base));
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
- xmlSchemaParseAnnotation(ctxt, child, 1));
- child = child->next;
- }
- if (IS_SCHEMA(child, "simpleType")) {
- /*
- * src-list-itemType-or-simpleType
- * Either the itemType [attribute] or the <simpleType> [child] of
- * the <list> element must be present, but not both.
- */
- if (type->base != NULL) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_SIMPLE_TYPE_1,
- NULL, node,
- "The attribute 'itemType' and the <simpleType> child "
- "are mutually exclusive", NULL);
- } else {
- type->subtypes = xmlSchemaParseSimpleType(ctxt, schema, child, 0);
- }
- child = child->next;
- } else if (type->base == NULL) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_SIMPLE_TYPE_1,
- NULL, node,
- "Either the attribute 'itemType' or the <simpleType> child "
- "must be present", NULL);
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL, "(annotation?, simpleType?)");
- }
- if ((type->base == NULL) &&
- (type->subtypes == NULL) &&
- (xmlSchemaGetPropNode(node, "itemType") == NULL)) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_SIMPLE_TYPE_1,
- NULL, node,
- "Either the attribute 'itemType' or the <simpleType> child "
- "must be present", NULL);
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaParseSimpleType:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Simple Type definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- * 1 in case of success.
- */
-static xmlSchemaTypePtr
-xmlSchemaParseSimpleType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node, int topLevel)
-{
- xmlSchemaTypePtr type, oldCtxtType;
- xmlNodePtr child = NULL;
- const xmlChar *attrValue = NULL;
- xmlAttrPtr attr;
- int hasRestriction = 0;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- if (topLevel) {
- attr = xmlSchemaGetPropNode(node, "name");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node,
- "name", NULL);
- return (NULL);
- } else {
- if (xmlSchemaPValAttrNode(ctxt,
- NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &attrValue) != 0)
- return (NULL);
- /*
- * Skip built-in types.
- */
- if (ctxt->isS4S) {
- xmlSchemaTypePtr biType;
-
- if (ctxt->isRedefine) {
- /*
- * REDEFINE: Disallow redefinition of built-in-types.
- * TODO: It seems that the spec does not say anything
- * about this case.
- */
- xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
- NULL, node,
- "Redefinition of built-in simple types is not "
- "supported", NULL);
- return(NULL);
- }
- biType = xmlSchemaGetPredefinedType(attrValue, xmlSchemaNs);
- if (biType != NULL)
- return (biType);
- }
- }
- }
- /*
- * TargetNamespace:
- * SPEC "The `actual value` of the targetNamespace [attribute]
- * of the <schema> ancestor element information item if present,
- * otherwise `absent`.
- */
- if (topLevel == 0) {
-#ifdef ENABLE_NAMED_LOCALS
- char buf[40];
-#endif
- /*
- * Parse as local simple type definition.
- */
-#ifdef ENABLE_NAMED_LOCALS
- snprintf(buf, 39, "#ST%d", ctxt->counter++ + 1);
- type = xmlSchemaAddType(ctxt, schema,
- XML_SCHEMA_TYPE_SIMPLE,
- xmlDictLookup(ctxt->dict, (const xmlChar *)buf, -1),
- ctxt->targetNamespace, node, 0);
-#else
- type = xmlSchemaAddType(ctxt, schema,
- XML_SCHEMA_TYPE_SIMPLE,
- NULL, ctxt->targetNamespace, node, 0);
-#endif
- if (type == NULL)
- return (NULL);
- type->type = XML_SCHEMA_TYPE_SIMPLE;
- type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if (!xmlStrEqual(attr->name, BAD_CAST "id")) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- } else {
- /*
- * Parse as global simple type definition.
- *
- * Note that attrValue is the value of the attribute "name" here.
- */
- type = xmlSchemaAddType(ctxt, schema, XML_SCHEMA_TYPE_SIMPLE,
- attrValue, ctxt->targetNamespace, node, 1);
- if (type == NULL)
- return (NULL);
- type->type = XML_SCHEMA_TYPE_SIMPLE;
- type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
- type->flags |= XML_SCHEMAS_TYPE_GLOBAL;
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "name")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "final"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /*
- * Attribute "final".
- */
- attr = xmlSchemaGetPropNode(node, "final");
- if (attr == NULL) {
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION)
- type->flags |= XML_SCHEMAS_TYPE_FINAL_RESTRICTION;
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_LIST)
- type->flags |= XML_SCHEMAS_TYPE_FINAL_LIST;
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_UNION)
- type->flags |= XML_SCHEMAS_TYPE_FINAL_UNION;
- } else {
- attrValue = xmlSchemaGetProp(ctxt, node, "final");
- if (xmlSchemaPValAttrBlockFinal(attrValue, &(type->flags),
- -1, -1, XML_SCHEMAS_TYPE_FINAL_RESTRICTION, -1,
- XML_SCHEMAS_TYPE_FINAL_LIST,
- XML_SCHEMAS_TYPE_FINAL_UNION) != 0) {
-
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- WXS_BASIC_CAST type, (xmlNodePtr) attr,
- NULL, "(#all | List of (list | union | restriction)",
- attrValue, NULL, NULL, NULL);
- }
- }
- }
- type->targetNamespace = ctxt->targetNamespace;
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * And now for the children...
- */
- oldCtxtType = ctxt->ctxtType;
-
- ctxt->ctxtType = type;
-
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- type->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (child == NULL) {
- xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_MISSING,
- NULL, node, child, NULL,
- "(annotation?, (restriction | list | union))");
- } else if (IS_SCHEMA(child, "restriction")) {
- xmlSchemaParseRestriction(ctxt, schema, child,
- XML_SCHEMA_TYPE_SIMPLE);
- hasRestriction = 1;
- child = child->next;
- } else if (IS_SCHEMA(child, "list")) {
- xmlSchemaParseList(ctxt, schema, child);
- child = child->next;
- } else if (IS_SCHEMA(child, "union")) {
- xmlSchemaParseUnion(ctxt, schema, child);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt, XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, (restriction | list | union))");
- }
- /*
- * REDEFINE: SPEC src-redefine (5)
- * "Within the [children], each <simpleType> must have a
- * <restriction> among its [children] ... the `actual value` of whose
- * base [attribute] must be the same as the `actual value` of its own
- * name attribute plus target namespace;"
- */
- if (topLevel && ctxt->isRedefine && (! hasRestriction)) {
- xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
- NULL, node, "This is a redefinition, thus the "
- "<simpleType> must have a <restriction> child", NULL);
- }
-
- ctxt->ctxtType = oldCtxtType;
- return (type);
-}
-
-/**
- * xmlSchemaParseModelGroupDefRef:
- * @ctxt: the parser context
- * @schema: the schema being built
- * @node: the node
- *
- * Parses a reference to a model group definition.
- *
- * We will return a particle component with a qname-component or
- * NULL in case of an error.
- */
-static xmlSchemaTreeItemPtr
-xmlSchemaParseModelGroupDefRef(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlSchemaParticlePtr item;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- const xmlChar *ref = NULL, *refNs = NULL;
- int min, max;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- attr = xmlSchemaGetPropNode(node, "ref");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "ref", NULL);
- return (NULL);
- } else if (xmlSchemaPValAttrNodeQName(ctxt, schema, NULL,
- attr, &refNs, &ref) != 0) {
- return (NULL);
- }
- xmlSchemaCheckReference(ctxt, schema, node, attr, refNs);
- min = xmlGetMinOccurs(ctxt, node, 0, -1, 1, "xs:nonNegativeInteger");
- max = xmlGetMaxOccurs(ctxt, node, 0, UNBOUNDED, 1,
- "(xs:nonNegativeInteger | unbounded)");
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "ref")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "minOccurs")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "maxOccurs"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- item = xmlSchemaAddParticle(ctxt, node, min, max);
- if (item == NULL)
- return (NULL);
- /*
- * Create a qname-reference and set as the term; it will be substituted
- * for the model group after the reference has been resolved.
- */
- item->children = (xmlSchemaTreeItemPtr)
- xmlSchemaNewQNameRef(ctxt, XML_SCHEMA_TYPE_GROUP, ref, refNs);
- xmlSchemaPCheckParticleCorrect_2(ctxt, item, node, min, max);
- /*
- * And now for the children...
- */
- child = node->children;
- /* TODO: Is annotation even allowed for a model group reference? */
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * TODO: What to do exactly with the annotation?
- */
- item->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?)");
- }
- /*
- * Corresponds to no component at all if minOccurs==maxOccurs==0.
- */
- if ((min == 0) && (max == 0))
- return (NULL);
-
- return ((xmlSchemaTreeItemPtr) item);
-}
-
-/**
- * xmlSchemaParseModelGroupDefinition:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * Parses a XML schema model group definition.
- *
- * Note that the contraint src-redefine (6.2) can't be applied until
- * references have been resolved. So we will do this at the
- * component fixup level.
- *
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- * 1 in case of success.
- */
-static xmlSchemaModelGroupDefPtr
-xmlSchemaParseModelGroupDefinition(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlSchemaModelGroupDefPtr item;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- const xmlChar *name;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- attr = xmlSchemaGetPropNode(node, "name");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node,
- "name", NULL);
- return (NULL);
- } else if (xmlSchemaPValAttrNode(ctxt, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
- return (NULL);
- }
- item = xmlSchemaAddModelGroupDefinition(ctxt, schema, name,
- ctxt->targetNamespace, node);
- if (item == NULL)
- return (NULL);
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "name")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "id"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- item->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (IS_SCHEMA(child, "all")) {
- item->children = xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_ALL, 0);
- child = child->next;
- } else if (IS_SCHEMA(child, "choice")) {
- item->children = xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_CHOICE, 0);
- child = child->next;
- } else if (IS_SCHEMA(child, "sequence")) {
- item->children = xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_SEQUENCE, 0);
- child = child->next;
- }
-
-
-
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, (all | choice | sequence)?)");
- }
- return (item);
-}
-
-/**
- * xmlSchemaCleanupDoc:
- * @ctxt: a schema validation context
- * @node: the root of the document.
- *
- * removes unwanted nodes in a schemas document tree
- */
-static void
-xmlSchemaCleanupDoc(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr root)
-{
- xmlNodePtr delete, cur;
-
- if ((ctxt == NULL) || (root == NULL)) return;
-
- /*
- * Remove all the blank text nodes
- */
- delete = NULL;
- cur = root;
- while (cur != NULL) {
- if (delete != NULL) {
- xmlUnlinkNode(delete);
- xmlFreeNode(delete);
- delete = NULL;
- }
- if (cur->type == XML_TEXT_NODE) {
- if (IS_BLANK_NODE(cur)) {
- if (xmlNodeGetSpacePreserve(cur) != 1) {
- delete = cur;
- }
- }
- } else if ((cur->type != XML_ELEMENT_NODE) &&
- (cur->type != XML_CDATA_SECTION_NODE)) {
- delete = cur;
- goto skip_children;
- }
-
- /*
- * Skip to next node
- */
- if (cur->children != NULL) {
- if ((cur->children->type != XML_ENTITY_DECL) &&
- (cur->children->type != XML_ENTITY_REF_NODE) &&
- (cur->children->type != XML_ENTITY_NODE)) {
- cur = cur->children;
- continue;
- }
- }
- skip_children:
- if (cur->next != NULL) {
- cur = cur->next;
- continue;
- }
-
- do {
- cur = cur->parent;
- if (cur == NULL)
- break;
- if (cur == root) {
- cur = NULL;
- break;
- }
- if (cur->next != NULL) {
- cur = cur->next;
- break;
- }
- } while (cur != NULL);
- }
- if (delete != NULL) {
- xmlUnlinkNode(delete);
- xmlFreeNode(delete);
- delete = NULL;
- }
-}
-
-
-static void
-xmlSchemaClearSchemaDefaults(xmlSchemaPtr schema)
-{
- if (schema->flags & XML_SCHEMAS_QUALIF_ELEM)
- schema->flags ^= XML_SCHEMAS_QUALIF_ELEM;
-
- if (schema->flags & XML_SCHEMAS_QUALIF_ATTR)
- schema->flags ^= XML_SCHEMAS_QUALIF_ATTR;
-
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_EXTENSION)
- schema->flags ^= XML_SCHEMAS_FINAL_DEFAULT_EXTENSION;
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION)
- schema->flags ^= XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION;
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_LIST)
- schema->flags ^= XML_SCHEMAS_FINAL_DEFAULT_LIST;
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_UNION)
- schema->flags ^= XML_SCHEMAS_FINAL_DEFAULT_UNION;
-
- if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION)
- schema->flags ^= XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION;
- if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION)
- schema->flags ^= XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION;
- if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION)
- schema->flags ^= XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION;
-}
-
-static int
-xmlSchemaParseSchemaElement(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlAttrPtr attr;
- const xmlChar *val;
- int res = 0, oldErrs = ctxt->nberrors;
-
- /*
- * Those flags should be moved to the parser context flags,
- * since they are not visible at the component level. I.e.
- * they are used if processing schema *documents* only.
- */
- res = xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- HFAILURE;
-
- /*
- * Since the version is of type xs:token, we won't bother to
- * check it.
- */
- /* REMOVED:
- attr = xmlSchemaGetPropNode(node, "version");
- if (attr != NULL) {
- res = xmlSchemaPValAttrNode(ctxt, NULL, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_TOKEN), &val);
- HFAILURE;
- }
- */
- attr = xmlSchemaGetPropNode(node, "targetNamespace");
- if (attr != NULL) {
- res = xmlSchemaPValAttrNode(ctxt, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI), NULL);
- HFAILURE;
- if (res != 0) {
- ctxt->stop = XML_SCHEMAP_S4S_ATTR_INVALID_VALUE;
- goto exit;
- }
- }
- attr = xmlSchemaGetPropNode(node, "elementFormDefault");
- if (attr != NULL) {
- val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- res = xmlSchemaPValAttrFormDefault(val, &schema->flags,
- XML_SCHEMAS_QUALIF_ELEM);
- HFAILURE;
- if (res != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_ELEMFORMDEFAULT_VALUE,
- NULL, (xmlNodePtr) attr, NULL,
- "(qualified | unqualified)", val, NULL, NULL, NULL);
- }
- }
- attr = xmlSchemaGetPropNode(node, "attributeFormDefault");
- if (attr != NULL) {
- val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- res = xmlSchemaPValAttrFormDefault(val, &schema->flags,
- XML_SCHEMAS_QUALIF_ATTR);
- HFAILURE;
- if (res != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_ATTRFORMDEFAULT_VALUE,
- NULL, (xmlNodePtr) attr, NULL,
- "(qualified | unqualified)", val, NULL, NULL, NULL);
- }
- }
- attr = xmlSchemaGetPropNode(node, "finalDefault");
- if (attr != NULL) {
- val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- res = xmlSchemaPValAttrBlockFinal(val, &(schema->flags), -1,
- XML_SCHEMAS_FINAL_DEFAULT_EXTENSION,
- XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION,
- -1,
- XML_SCHEMAS_FINAL_DEFAULT_LIST,
- XML_SCHEMAS_FINAL_DEFAULT_UNION);
- HFAILURE;
- if (res != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr, NULL,
- "(#all | List of (extension | restriction | list | union))",
- val, NULL, NULL, NULL);
- }
- }
- attr = xmlSchemaGetPropNode(node, "blockDefault");
- if (attr != NULL) {
- val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
- res = xmlSchemaPValAttrBlockFinal(val, &(schema->flags), -1,
- XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION,
- XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION,
- XML_SCHEMAS_BLOCK_DEFAULT_SUBSTITUTION, -1, -1);
- HFAILURE;
- if (res != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr, NULL,
- "(#all | List of (extension | restriction | substitution))",
- val, NULL, NULL, NULL);
- }
- }
-
-exit:
- if (oldErrs != ctxt->nberrors)
- res = ctxt->err;
- return(res);
-exit_failure:
- return(-1);
-}
-
-/**
- * xmlSchemaParseSchemaTopLevel:
- * @ctxt: a schema validation context
- * @schema: the schemas
- * @nodes: the list of top level nodes
- *
- * Returns the internal XML Schema structure built from the resource or
- * NULL in case of error
- */
-static int
-xmlSchemaParseSchemaTopLevel(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema, xmlNodePtr nodes)
-{
- xmlNodePtr child;
- xmlSchemaAnnotPtr annot;
- int res = 0, oldErrs, tmpOldErrs;
-
- if ((ctxt == NULL) || (schema == NULL) || (nodes == NULL))
- return(-1);
-
- oldErrs = ctxt->nberrors;
- child = nodes;
- while ((IS_SCHEMA(child, "include")) ||
- (IS_SCHEMA(child, "import")) ||
- (IS_SCHEMA(child, "redefine")) ||
- (IS_SCHEMA(child, "annotation"))) {
- if (IS_SCHEMA(child, "annotation")) {
- annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- if (schema->annot == NULL)
- schema->annot = annot;
- else
- xmlSchemaFreeAnnot(annot);
- } else if (IS_SCHEMA(child, "import")) {
- tmpOldErrs = ctxt->nberrors;
- res = xmlSchemaParseImport(ctxt, schema, child);
- HFAILURE;
- HSTOP(ctxt);
- if (tmpOldErrs != ctxt->nberrors)
- goto exit;
- } else if (IS_SCHEMA(child, "include")) {
- tmpOldErrs = ctxt->nberrors;
- res = xmlSchemaParseInclude(ctxt, schema, child);
- HFAILURE;
- HSTOP(ctxt);
- if (tmpOldErrs != ctxt->nberrors)
- goto exit;
- } else if (IS_SCHEMA(child, "redefine")) {
- tmpOldErrs = ctxt->nberrors;
- res = xmlSchemaParseRedefine(ctxt, schema, child);
- HFAILURE;
- HSTOP(ctxt);
- if (tmpOldErrs != ctxt->nberrors)
- goto exit;
- }
- child = child->next;
- }
- /*
- * URGENT TODO: Change the functions to return int results.
- * We need especially to catch internal errors.
- */
- while (child != NULL) {
- if (IS_SCHEMA(child, "complexType")) {
- xmlSchemaParseComplexType(ctxt, schema, child, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "simpleType")) {
- xmlSchemaParseSimpleType(ctxt, schema, child, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "element")) {
- xmlSchemaParseElement(ctxt, schema, child, NULL, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "attribute")) {
- xmlSchemaParseGlobalAttribute(ctxt, schema, child);
- child = child->next;
- } else if (IS_SCHEMA(child, "attributeGroup")) {
- xmlSchemaParseAttributeGroupDefinition(ctxt, schema, child);
- child = child->next;
- } else if (IS_SCHEMA(child, "group")) {
- xmlSchemaParseModelGroupDefinition(ctxt, schema, child);
- child = child->next;
- } else if (IS_SCHEMA(child, "notation")) {
- xmlSchemaParseNotation(ctxt, schema, child);
- child = child->next;
- } else {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, child->parent, child,
- NULL, "((include | import | redefine | annotation)*, "
- "(((simpleType | complexType | group | attributeGroup) "
- "| element | attribute | notation), annotation*)*)");
- child = child->next;
- }
- while (IS_SCHEMA(child, "annotation")) {
- /*
- * TODO: We should add all annotations.
- */
- annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- if (schema->annot == NULL)
- schema->annot = annot;
- else
- xmlSchemaFreeAnnot(annot);
- child = child->next;
- }
- }
-exit:
- ctxt->ctxtType = NULL;
- if (oldErrs != ctxt->nberrors)
- res = ctxt->err;
- return(res);
-exit_failure:
- return(-1);
-}
-
-static xmlSchemaSchemaRelationPtr
-xmlSchemaSchemaRelationCreate(void)
-{
- xmlSchemaSchemaRelationPtr ret;
-
- ret = (xmlSchemaSchemaRelationPtr)
- xmlMalloc(sizeof(xmlSchemaSchemaRelation));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating schema relation", NULL);
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaSchemaRelation));
- return(ret);
-}
-
-#if 0
-static void
-xmlSchemaSchemaRelationFree(xmlSchemaSchemaRelationPtr rel)
-{
- xmlFree(rel);
-}
-#endif
-
-static void
-xmlSchemaRedefListFree(xmlSchemaRedefPtr redef)
-{
- xmlSchemaRedefPtr prev;
-
- while (redef != NULL) {
- prev = redef;
- redef = redef->next;
- xmlFree(prev);
- }
-}
-
-static void
-xmlSchemaConstructionCtxtFree(xmlSchemaConstructionCtxtPtr con)
-{
- /*
- * After the construction context has been freed, there will be
- * no schema graph available any more. Only the schema buckets
- * will stay alive, which are put into the "schemasImports" and
- * "includes" slots of the xmlSchema.
- */
- if (con->buckets != NULL)
- xmlSchemaItemListFree(con->buckets);
- if (con->pending != NULL)
- xmlSchemaItemListFree(con->pending);
- if (con->substGroups != NULL)
- xmlHashFree(con->substGroups,
- (xmlHashDeallocator) xmlSchemaSubstGroupFree);
- if (con->redefs != NULL)
- xmlSchemaRedefListFree(con->redefs);
- if (con->dict != NULL)
- xmlDictFree(con->dict);
- xmlFree(con);
-}
-
-static xmlSchemaConstructionCtxtPtr
-xmlSchemaConstructionCtxtCreate(xmlDictPtr dict)
-{
- xmlSchemaConstructionCtxtPtr ret;
-
- ret = (xmlSchemaConstructionCtxtPtr)
- xmlMalloc(sizeof(xmlSchemaConstructionCtxt));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL,
- "allocating schema construction context", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaConstructionCtxt));
-
- ret->buckets = xmlSchemaItemListCreate();
- if (ret->buckets == NULL) {
- xmlSchemaPErrMemory(NULL,
- "allocating list of schema buckets", NULL);
- xmlFree(ret);
- return (NULL);
- }
- ret->pending = xmlSchemaItemListCreate();
- if (ret->pending == NULL) {
- xmlSchemaPErrMemory(NULL,
- "allocating list of pending global components", NULL);
- xmlSchemaConstructionCtxtFree(ret);
- return (NULL);
- }
- ret->dict = dict;
- xmlDictReference(dict);
- return(ret);
-}
-
-static xmlSchemaParserCtxtPtr
-xmlSchemaParserCtxtCreate(void)
-{
- xmlSchemaParserCtxtPtr ret;
-
- ret = (xmlSchemaParserCtxtPtr) xmlMalloc(sizeof(xmlSchemaParserCtxt));
- if (ret == NULL) {
- xmlSchemaPErrMemory(NULL, "allocating schema parser context",
- NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaParserCtxt));
- ret->type = XML_SCHEMA_CTXT_PARSER;
- ret->attrProhibs = xmlSchemaItemListCreate();
- if (ret->attrProhibs == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- return(ret);
-}
-
-/**
- * xmlSchemaNewParserCtxtUseDict:
- * @URL: the location of the schema
- * @dict: the dictionary to be used
- *
- * Create an XML Schemas parse context for that file/resource expected
- * to contain an XML Schemas file.
- *
- * Returns the parser context or NULL in case of error
- */
-static xmlSchemaParserCtxtPtr
-xmlSchemaNewParserCtxtUseDict(const char *URL, xmlDictPtr dict)
-{
- xmlSchemaParserCtxtPtr ret;
-
- ret = xmlSchemaParserCtxtCreate();
- if (ret == NULL)
- return (NULL);
- ret->dict = dict;
- xmlDictReference(dict);
- if (URL != NULL)
- ret->URL = xmlDictLookup(dict, (const xmlChar *) URL, -1);
- return (ret);
-}
-
-static int
-xmlSchemaCreatePCtxtOnVCtxt(xmlSchemaValidCtxtPtr vctxt)
-{
- if (vctxt->pctxt == NULL) {
- if (vctxt->schema != NULL)
- vctxt->pctxt =
- xmlSchemaNewParserCtxtUseDict("*", vctxt->schema->dict);
- else
- vctxt->pctxt = xmlSchemaNewParserCtxt("*");
- if (vctxt->pctxt == NULL) {
- VERROR_INT("xmlSchemaCreatePCtxtOnVCtxt",
- "failed to create a temp. parser context");
- return (-1);
- }
- /* TODO: Pass user data. */
- xmlSchemaSetParserErrors(vctxt->pctxt, vctxt->error,
- vctxt->warning, vctxt->errCtxt);
- xmlSchemaSetParserStructuredErrors(vctxt->pctxt, vctxt->serror,
- vctxt->errCtxt);
- }
- return (0);
-}
-
-/**
- * xmlSchemaGetSchemaBucket:
- * @pctxt: the schema parser context
- * @schemaLocation: the URI of the schema document
- *
- * Returns a schema bucket if it was already parsed.
- *
- * Returns a schema bucket if it was already parsed from
- * @schemaLocation, NULL otherwise.
- */
-static xmlSchemaBucketPtr
-xmlSchemaGetSchemaBucket(xmlSchemaParserCtxtPtr pctxt,
- const xmlChar *schemaLocation)
-{
- xmlSchemaBucketPtr cur;
- xmlSchemaItemListPtr list;
-
- list = pctxt->constructor->buckets;
- if (list->nbItems == 0)
- return(NULL);
- else {
- int i;
- for (i = 0; i < list->nbItems; i++) {
- cur = (xmlSchemaBucketPtr) list->items[i];
- /* Pointer comparison! */
- if (cur->schemaLocation == schemaLocation)
- return(cur);
- }
- }
- return(NULL);
-}
-
-static xmlSchemaBucketPtr
-xmlSchemaGetChameleonSchemaBucket(xmlSchemaParserCtxtPtr pctxt,
- const xmlChar *schemaLocation,
- const xmlChar *targetNamespace)
-{
- xmlSchemaBucketPtr cur;
- xmlSchemaItemListPtr list;
-
- list = pctxt->constructor->buckets;
- if (list->nbItems == 0)
- return(NULL);
- else {
- int i;
- for (i = 0; i < list->nbItems; i++) {
- cur = (xmlSchemaBucketPtr) list->items[i];
- /* Pointer comparison! */
- if ((cur->origTargetNamespace == NULL) &&
- (cur->schemaLocation == schemaLocation) &&
- (cur->targetNamespace == targetNamespace))
- return(cur);
- }
- }
- return(NULL);
-}
-
-
-#define IS_BAD_SCHEMA_DOC(b) \
- (((b)->doc == NULL) && ((b)->schemaLocation != NULL))
-
-static xmlSchemaBucketPtr
-xmlSchemaGetSchemaBucketByTNS(xmlSchemaParserCtxtPtr pctxt,
- const xmlChar *targetNamespace,
- int imported)
-{
- xmlSchemaBucketPtr cur;
- xmlSchemaItemListPtr list;
-
- list = pctxt->constructor->buckets;
- if (list->nbItems == 0)
- return(NULL);
- else {
- int i;
- for (i = 0; i < list->nbItems; i++) {
- cur = (xmlSchemaBucketPtr) list->items[i];
- if ((! IS_BAD_SCHEMA_DOC(cur)) &&
- (cur->origTargetNamespace == targetNamespace) &&
- ((imported && cur->imported) ||
- ((!imported) && (!cur->imported))))
- return(cur);
- }
- }
- return(NULL);
-}
-
-static int
-xmlSchemaParseNewDocWithContext(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlSchemaBucketPtr bucket)
-{
- int oldFlags;
- xmlDocPtr oldDoc;
- xmlNodePtr node;
- int ret, oldErrs;
- xmlSchemaBucketPtr oldbucket = pctxt->constructor->bucket;
-
- /*
- * Save old values; reset the *main* schema.
- * URGENT TODO: This is not good; move the per-document information
- * to the parser. Get rid of passing the main schema to the
- * parsing functions.
- */
- oldFlags = schema->flags;
- oldDoc = schema->doc;
- if (schema->flags != 0)
- xmlSchemaClearSchemaDefaults(schema);
- schema->doc = bucket->doc;
- pctxt->schema = schema;
- /*
- * Keep the current target namespace on the parser *not* on the
- * main schema.
- */
- pctxt->targetNamespace = bucket->targetNamespace;
- WXS_CONSTRUCTOR(pctxt)->bucket = bucket;
-
- if ((bucket->targetNamespace != NULL) &&
- xmlStrEqual(bucket->targetNamespace, xmlSchemaNs)) {
- /*
- * We are parsing the schema for schemas!
- */
- pctxt->isS4S = 1;
- }
- /* Mark it as parsed, even if parsing fails. */
- bucket->parsed++;
- /* Compile the schema doc. */
- node = xmlDocGetRootElement(bucket->doc);
- ret = xmlSchemaParseSchemaElement(pctxt, schema, node);
- if (ret != 0)
- goto exit;
- /* An empty schema; just get out. */
- if (node->children == NULL)
- goto exit;
- oldErrs = pctxt->nberrors;
- ret = xmlSchemaParseSchemaTopLevel(pctxt, schema, node->children);
- if (ret != 0)
- goto exit;
- /*
- * TODO: Not nice, but I'm not 100% sure we will get always an error
- * as a result of the obove functions; so better rely on pctxt->err
- * as well.
- */
- if ((ret == 0) && (oldErrs != pctxt->nberrors)) {
- ret = pctxt->err;
- goto exit;
- }
-
-exit:
- WXS_CONSTRUCTOR(pctxt)->bucket = oldbucket;
- /* Restore schema values. */
- schema->doc = oldDoc;
- schema->flags = oldFlags;
- return(ret);
-}
-
-static int
-xmlSchemaParseNewDoc(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlSchemaBucketPtr bucket)
-{
- xmlSchemaParserCtxtPtr newpctxt;
- int res = 0;
-
- if (bucket == NULL)
- return(0);
- if (bucket->parsed) {
- PERROR_INT("xmlSchemaParseNewDoc",
- "reparsing a schema doc");
- return(-1);
- }
- if (bucket->doc == NULL) {
- PERROR_INT("xmlSchemaParseNewDoc",
- "parsing a schema doc, but there's no doc");
- return(-1);
- }
- if (pctxt->constructor == NULL) {
- PERROR_INT("xmlSchemaParseNewDoc",
- "no constructor");
- return(-1);
- }
- /* Create and init the temporary parser context. */
- newpctxt = xmlSchemaNewParserCtxtUseDict(
- (const char *) bucket->schemaLocation, pctxt->dict);
- if (newpctxt == NULL)
- return(-1);
- newpctxt->constructor = pctxt->constructor;
- /*
- * TODO: Can we avoid that the parser knows about the main schema?
- * It would be better if he knows about the current schema bucket
- * only.
- */
- newpctxt->schema = schema;
- xmlSchemaSetParserErrors(newpctxt, pctxt->error, pctxt->warning,
- pctxt->errCtxt);
- xmlSchemaSetParserStructuredErrors(newpctxt, pctxt->serror,
- pctxt->errCtxt);
- newpctxt->counter = pctxt->counter;
-
-
- res = xmlSchemaParseNewDocWithContext(newpctxt, schema, bucket);
-
- /* Channel back errors and cleanup the temporary parser context. */
- if (res != 0)
- pctxt->err = res;
- pctxt->nberrors += newpctxt->nberrors;
- pctxt->counter = newpctxt->counter;
- newpctxt->constructor = NULL;
- /* Free the parser context. */
- xmlSchemaFreeParserCtxt(newpctxt);
- return(res);
-}
-
-static void
-xmlSchemaSchemaRelationAddChild(xmlSchemaBucketPtr bucket,
- xmlSchemaSchemaRelationPtr rel)
-{
- xmlSchemaSchemaRelationPtr cur = bucket->relations;
-
- if (cur == NULL) {
- bucket->relations = rel;
- return;
- }
- while (cur->next != NULL)
- cur = cur->next;
- cur->next = rel;
-}
-
-
-static const xmlChar *
-xmlSchemaBuildAbsoluteURI(xmlDictPtr dict, const xmlChar* location,
- xmlNodePtr ctxtNode)
-{
- /*
- * Build an absolue location URI.
- */
- if (location != NULL) {
- if (ctxtNode == NULL)
- return(location);
- else {
- xmlChar *base, *URI;
- const xmlChar *ret = NULL;
-
- base = xmlNodeGetBase(ctxtNode->doc, ctxtNode);
- if (base == NULL) {
- URI = xmlBuildURI(location, ctxtNode->doc->URL);
- } else {
- URI = xmlBuildURI(location, base);
- xmlFree(base);
- }
- if (URI != NULL) {
- ret = xmlDictLookup(dict, URI, -1);
- xmlFree(URI);
- return(ret);
- }
- }
- }
- return(NULL);
-}
-
-
-
-/**
- * xmlSchemaAddSchemaDoc:
- * @pctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * Parse an included (and to-be-redefined) XML schema document.
- *
- * Returns 0 on success, a positive error code on errors and
- * -1 in case of an internal or API error.
- */
-
-static int
-xmlSchemaAddSchemaDoc(xmlSchemaParserCtxtPtr pctxt,
- int type, /* import or include or redefine */
- const xmlChar *schemaLocation,
- xmlDocPtr schemaDoc,
- const char *schemaBuffer,
- int schemaBufferLen,
- xmlNodePtr invokingNode,
- const xmlChar *sourceTargetNamespace,
- const xmlChar *importNamespace,
- xmlSchemaBucketPtr *bucket)
-{
- const xmlChar *targetNamespace = NULL;
- xmlSchemaSchemaRelationPtr relation = NULL;
- xmlDocPtr doc = NULL;
- int res = 0, err = 0, located = 0, preserveDoc = 0;
- xmlSchemaBucketPtr bkt = NULL;
-
- if (bucket != NULL)
- *bucket = NULL;
-
- switch (type) {
- case XML_SCHEMA_SCHEMA_IMPORT:
- case XML_SCHEMA_SCHEMA_MAIN:
- err = XML_SCHEMAP_SRC_IMPORT;
- break;
- case XML_SCHEMA_SCHEMA_INCLUDE:
- err = XML_SCHEMAP_SRC_INCLUDE;
- break;
- case XML_SCHEMA_SCHEMA_REDEFINE:
- err = XML_SCHEMAP_SRC_REDEFINE;
- break;
- }
-
-
- /* Special handling for the main schema:
- * skip the location and relation logic and just parse the doc.
- * We need just a bucket to be returned in this case.
- */
- if ((type == XML_SCHEMA_SCHEMA_MAIN) || (! WXS_HAS_BUCKETS(pctxt)))
- goto doc_load;
-
- /* Note that we expect the location to be an absulute URI. */
- if (schemaLocation != NULL) {
- bkt = xmlSchemaGetSchemaBucket(pctxt, schemaLocation);
- if ((bkt != NULL) &&
- (pctxt->constructor->bucket == bkt)) {
- /* Report self-imports/inclusions/redefinitions. */
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt, err,
- invokingNode, NULL,
- "The schema must not import/include/redefine itself",
- NULL, NULL);
- goto exit;
- }
- }
- /*
- * Create a relation for the graph of schemas.
- */
- relation = xmlSchemaSchemaRelationCreate();
- if (relation == NULL)
- return(-1);
- xmlSchemaSchemaRelationAddChild(pctxt->constructor->bucket,
- relation);
- relation->type = type;
-
- /*
- * Save the namespace import information.
- */
- if (WXS_IS_BUCKET_IMPMAIN(type)) {
- relation->importNamespace = importNamespace;
- if (schemaLocation == NULL) {
- /*
- * No location; this is just an import of the namespace.
- * Note that we don't assign a bucket to the relation
- * in this case.
- */
- goto exit;
- }
- targetNamespace = importNamespace;
- }
-
- /* Did we already fetch the doc? */
- if (bkt != NULL) {
- if ((WXS_IS_BUCKET_IMPMAIN(type)) && (! bkt->imported)) {
- /*
- * We included/redefined and then try to import a schema,
- * but the new location provided for import was different.
- */
- if (schemaLocation == NULL)
- schemaLocation = BAD_CAST "in_memory_buffer";
- if (!xmlStrEqual(schemaLocation,
- bkt->schemaLocation)) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt, err,
- invokingNode, NULL,
- "The schema document '%s' cannot be imported, since "
- "it was already included or redefined",
- schemaLocation, NULL);
- goto exit;
- }
- } else if ((! WXS_IS_BUCKET_IMPMAIN(type)) && (bkt->imported)) {
- /*
- * We imported and then try to include/redefine a schema,
- * but the new location provided for the include/redefine
- * was different.
- */
- if (schemaLocation == NULL)
- schemaLocation = BAD_CAST "in_memory_buffer";
- if (!xmlStrEqual(schemaLocation,
- bkt->schemaLocation)) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt, err,
- invokingNode, NULL,
- "The schema document '%s' cannot be included or "
- "redefined, since it was already imported",
- schemaLocation, NULL);
- goto exit;
- }
- }
- }
-
- if (WXS_IS_BUCKET_IMPMAIN(type)) {
- /*
- * Given that the schemaLocation [attribute] is only a hint, it is open
- * to applications to ignore all but the first <import> for a given
- * namespace, regardless of the `actual value` of schemaLocation, but
- * such a strategy risks missing useful information when new
- * schemaLocations are offered.
- *
- * We will use the first <import> that comes with a location.
- * Further <import>s *with* a location, will result in an error.
- * TODO: Better would be to just report a warning here, but
- * we'll try it this way until someone complains.
- *
- * Schema Document Location Strategy:
- * 3 Based on the namespace name, identify an existing schema document,
- * either as a resource which is an XML document or a <schema> element
- * information item, in some local schema repository;
- * 5 Attempt to resolve the namespace name to locate such a resource.
- *
- * NOTE: (3) and (5) are not supported.
- */
- if (bkt != NULL) {
- relation->bucket = bkt;
- goto exit;
- }
- bkt = xmlSchemaGetSchemaBucketByTNS(pctxt,
- importNamespace, 1);
-
- if (bkt != NULL) {
- relation->bucket = bkt;
- if (bkt->schemaLocation == NULL) {
- /* First given location of the schema; load the doc. */
- bkt->schemaLocation = schemaLocation;
- } else {
- if (!xmlStrEqual(schemaLocation,
- bkt->schemaLocation)) {
- /*
- * Additional location given; just skip it.
- * URGENT TODO: We should report a warning here.
- * res = XML_SCHEMAP_SRC_IMPORT;
- */
- if (schemaLocation == NULL)
- schemaLocation = BAD_CAST "in_memory_buffer";
-
- xmlSchemaCustomWarning(ACTXT_CAST pctxt,
- XML_SCHEMAP_WARN_SKIP_SCHEMA,
- invokingNode, NULL,
- "Skipping import of schema located at '%s' for the "
- "namespace '%s', since this namespace was already "
- "imported with the schema located at '%s'",
- schemaLocation, importNamespace, bkt->schemaLocation);
- }
- goto exit;
- }
- }
- /*
- * No bucket + first location: load the doc and create a
- * bucket.
- */
- } else {
- /* <include> and <redefine> */
- if (bkt != NULL) {
-
- if ((bkt->origTargetNamespace == NULL) &&
- (bkt->targetNamespace != sourceTargetNamespace)) {
- xmlSchemaBucketPtr chamel;
-
- /*
- * Chameleon include/redefine: skip loading only if it was
- * aleady build for the targetNamespace of the including
- * schema.
- */
- /*
- * URGENT TODO: If the schema is a chameleon-include then copy
- * the components into the including schema and modify the
- * targetNamespace of those components, do nothing otherwise.
- * NOTE: This is currently worked-around by compiling the
- * chameleon for every destinct including targetNamespace; thus
- * not performant at the moment.
- * TODO: Check when the namespace in wildcards for chameleons
- * needs to be converted: before we built wildcard intersections
- * or after.
- * Answer: after!
- */
- chamel = xmlSchemaGetChameleonSchemaBucket(pctxt,
- schemaLocation, sourceTargetNamespace);
- if (chamel != NULL) {
- /* A fitting chameleon was already parsed; NOP. */
- relation->bucket = chamel;
- goto exit;
- }
- /*
- * We need to parse the chameleon again for a different
- * targetNamespace.
- * CHAMELEON TODO: Optimize this by only parsing the
- * chameleon once, and then copying the components to
- * the new targetNamespace.
- */
- bkt = NULL;
- } else {
- relation->bucket = bkt;
- goto exit;
- }
- }
- }
- if ((bkt != NULL) && (bkt->doc != NULL)) {
- PERROR_INT("xmlSchemaAddSchemaDoc",
- "trying to load a schema doc, but a doc is already "
- "assigned to the schema bucket");
- goto exit_failure;
- }
-
-doc_load:
- /*
- * Load the document.
- */
- if (schemaDoc != NULL) {
- doc = schemaDoc;
- /* Don' free this one, since it was provided by the caller. */
- preserveDoc = 1;
- /* TODO: Does the context or the doc hold the location? */
- if (schemaDoc->URL != NULL)
- schemaLocation = xmlDictLookup(pctxt->dict,
- schemaDoc->URL, -1);
- else
- schemaLocation = BAD_CAST "in_memory_buffer";
- } else if ((schemaLocation != NULL) || (schemaBuffer != NULL)) {
- xmlParserCtxtPtr parserCtxt;
-
- parserCtxt = xmlNewParserCtxt();
- if (parserCtxt == NULL) {
- xmlSchemaPErrMemory(NULL, "xmlSchemaGetDoc, "
- "allocating a parser context", NULL);
- goto exit_failure;
- }
- if ((pctxt->dict != NULL) && (parserCtxt->dict != NULL)) {
- /*
- * TODO: Do we have to burden the schema parser dict with all
- * the content of the schema doc?
- */
- xmlDictFree(parserCtxt->dict);
- parserCtxt->dict = pctxt->dict;
- xmlDictReference(parserCtxt->dict);
- }
- if (schemaLocation != NULL) {
- /* Parse from file. */
- doc = xmlCtxtReadFile(parserCtxt, (const char *) schemaLocation,
- NULL, SCHEMAS_PARSE_OPTIONS);
- } else if (schemaBuffer != NULL) {
- /* Parse from memory buffer. */
- doc = xmlCtxtReadMemory(parserCtxt, schemaBuffer, schemaBufferLen,
- NULL, NULL, SCHEMAS_PARSE_OPTIONS);
- schemaLocation = BAD_CAST "in_memory_buffer";
- if (doc != NULL)
- doc->URL = xmlStrdup(schemaLocation);
- }
- /*
- * For <import>:
- * 2.1 The referent is (a fragment of) a resource which is an
- * XML document (see clause 1.1), which in turn corresponds to
- * a <schema> element information item in a well-formed information
- * set, which in turn corresponds to a valid schema.
- * TODO: (2.1) fragments of XML documents are not supported.
- *
- * 2.2 The referent is a <schema> element information item in
- * a well-formed information set, which in turn corresponds
- * to a valid schema.
- * TODO: (2.2) is not supported.
- */
- if (doc == NULL) {
- xmlErrorPtr lerr;
- lerr = xmlGetLastError();
- /*
- * Check if this a parser error, or if the document could
- * just not be located.
- * TODO: Try to find specific error codes to react only on
- * localisation failures.
- */
- if ((lerr == NULL) || (lerr->domain != XML_FROM_IO)) {
- /*
- * We assume a parser error here.
- */
- located = 1;
- /* TODO: Error code ?? */
- res = XML_SCHEMAP_SRC_IMPORT_2_1;
- xmlSchemaCustomErr(ACTXT_CAST pctxt, res,
- invokingNode, NULL,
- "Failed to parse the XML resource '%s'",
- schemaLocation, NULL);
- }
- }
- xmlFreeParserCtxt(parserCtxt);
- if ((doc == NULL) && located)
- goto exit_error;
- } else {
- xmlSchemaPErr(pctxt, NULL,
- XML_SCHEMAP_NOTHING_TO_PARSE,
- "No information for parsing was provided with the "
- "given schema parser context.\n",
- NULL, NULL);
- goto exit_failure;
- }
- /*
- * Preprocess the document.
- */
- if (doc != NULL) {
- xmlNodePtr docElem = NULL;
-
- located = 1;
- docElem = xmlDocGetRootElement(doc);
- if (docElem == NULL) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt, XML_SCHEMAP_NOROOT,
- invokingNode, NULL,
- "The document '%s' has no document element",
- schemaLocation, NULL);
- goto exit_error;
- }
- /*
- * Remove all the blank text nodes.
- */
- xmlSchemaCleanupDoc(pctxt, docElem);
- /*
- * Check the schema's top level element.
- */
- if (!IS_SCHEMA(docElem, "schema")) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt, XML_SCHEMAP_NOT_SCHEMA,
- invokingNode, NULL,
- "The XML document '%s' is not a schema document",
- schemaLocation, NULL);
- goto exit_error;
- }
- /*
- * Note that we don't apply a type check for the
- * targetNamespace value here.
- */
- targetNamespace = xmlSchemaGetProp(pctxt, docElem,
- "targetNamespace");
- }
-
-/* after_doc_loading: */
- if ((bkt == NULL) && located) {
- /* Only create a bucket if the schema was located. */
- bkt = xmlSchemaBucketCreate(pctxt, type,
- targetNamespace);
- if (bkt == NULL)
- goto exit_failure;
- }
- if (bkt != NULL) {
- bkt->schemaLocation = schemaLocation;
- bkt->located = located;
- if (doc != NULL) {
- bkt->doc = doc;
- bkt->targetNamespace = targetNamespace;
- bkt->origTargetNamespace = targetNamespace;
- if (preserveDoc)
- bkt->preserveDoc = 1;
- }
- if (WXS_IS_BUCKET_IMPMAIN(type))
- bkt->imported++;
- /*
- * Add it to the graph of schemas.
- */
- if (relation != NULL)
- relation->bucket = bkt;
- }
-
-exit:
- /*
- * Return the bucket explicitely; this is needed for the
- * main schema.
- */
- if (bucket != NULL)
- *bucket = bkt;
- return (0);
-
-exit_error:
- if ((doc != NULL) && (! preserveDoc)) {
- xmlFreeDoc(doc);
- if (bkt != NULL)
- bkt->doc = NULL;
- }
- return(pctxt->err);
-
-exit_failure:
- if ((doc != NULL) && (! preserveDoc)) {
- xmlFreeDoc(doc);
- if (bkt != NULL)
- bkt->doc = NULL;
- }
- return (-1);
-}
-
-/**
- * xmlSchemaParseImport:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Import definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns 0 in case of success, a positive error code if
- * not valid and -1 in case of an internal error.
- */
-static int
-xmlSchemaParseImport(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- xmlNodePtr child;
- const xmlChar *namespaceName = NULL, *schemaLocation = NULL;
- const xmlChar *thisTargetNamespace;
- xmlAttrPtr attr;
- int ret = 0;
- xmlSchemaBucketPtr bucket = NULL;
-
- if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
- return (-1);
-
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "namespace")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "schemaLocation"))) {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /*
- * Extract and validate attributes.
- */
- if (xmlSchemaPValAttr(pctxt, NULL, node,
- "namespace", xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
- &namespaceName) != 0) {
- xmlSchemaPSimpleTypeErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, node,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
- NULL, namespaceName, NULL, NULL, NULL);
- return (pctxt->err);
- }
-
- if (xmlSchemaPValAttr(pctxt, NULL, node,
- "schemaLocation", xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
- &schemaLocation) != 0) {
- xmlSchemaPSimpleTypeErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, node,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
- NULL, schemaLocation, NULL, NULL, NULL);
- return (pctxt->err);
- }
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * the annotation here is simply discarded ...
- * TODO: really?
- */
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(pctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?)");
- }
- /*
- * Apply additional constraints.
- *
- * Note that it is important to use the original @targetNamespace
- * (or none at all), to rule out imports of schemas _with_ a
- * @targetNamespace if the importing schema is a chameleon schema
- * (with no @targetNamespace).
- */
- thisTargetNamespace = WXS_BUCKET(pctxt)->origTargetNamespace;
- if (namespaceName != NULL) {
- /*
- * 1.1 If the namespace [attribute] is present, then its `actual value`
- * must not match the `actual value` of the enclosing <schema>'s
- * targetNamespace [attribute].
- */
- if (xmlStrEqual(thisTargetNamespace, namespaceName)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_SRC_IMPORT_1_1,
- NULL, node,
- "The value of the attribute 'namespace' must not match "
- "the target namespace '%s' of the importing schema",
- thisTargetNamespace);
- return (pctxt->err);
- }
- } else {
- /*
- * 1.2 If the namespace [attribute] is not present, then the enclosing
- * <schema> must have a targetNamespace [attribute].
- */
- if (thisTargetNamespace == NULL) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_SRC_IMPORT_1_2,
- NULL, node,
- "The attribute 'namespace' must be existent if "
- "the importing schema has no target namespace",
- NULL);
- return (pctxt->err);
- }
- }
- /*
- * Locate and acquire the schema document.
- */
- if (schemaLocation != NULL)
- schemaLocation = xmlSchemaBuildAbsoluteURI(pctxt->dict,
- schemaLocation, node);
- ret = xmlSchemaAddSchemaDoc(pctxt, XML_SCHEMA_SCHEMA_IMPORT,
- schemaLocation, NULL, NULL, 0, node, thisTargetNamespace,
- namespaceName, &bucket);
-
- if (ret != 0)
- return(ret);
-
- /*
- * For <import>: "It is *not* an error for the application
- * schema reference strategy to fail."
- * So just don't parse if no schema document was found.
- * Note that we will get no bucket if the schema could not be
- * located or if there was no schemaLocation.
- */
- if ((bucket == NULL) && (schemaLocation != NULL)) {
- xmlSchemaCustomWarning(ACTXT_CAST pctxt,
- XML_SCHEMAP_WARN_UNLOCATED_SCHEMA,
- node, NULL,
- "Failed to locate a schema at location '%s'. "
- "Skipping the import", schemaLocation, NULL, NULL);
- }
-
- if ((bucket != NULL) && CAN_PARSE_SCHEMA(bucket)) {
- ret = xmlSchemaParseNewDoc(pctxt, schema, bucket);
- }
-
- return (ret);
-}
-
-static int
-xmlSchemaParseIncludeOrRedefineAttrs(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- xmlChar **schemaLocation,
- int type)
-{
- xmlAttrPtr attr;
-
- if ((pctxt == NULL) || (schema == NULL) || (node == NULL) ||
- (schemaLocation == NULL))
- return (-1);
-
- *schemaLocation = NULL;
- /*
- * Check for illegal attributes.
- * Applies for both <include> and <redefine>.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "schemaLocation"))) {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- xmlSchemaPValAttrID(pctxt, node, BAD_CAST "id");
- /*
- * Preliminary step, extract the URI-Reference and make an URI
- * from the base.
- */
- /*
- * Attribute "schemaLocation" is mandatory.
- */
- attr = xmlSchemaGetPropNode(node, "schemaLocation");
- if (attr != NULL) {
- xmlChar *base = NULL;
- xmlChar *uri = NULL;
-
- if (xmlSchemaPValAttrNode(pctxt, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYURI),
- (const xmlChar **) schemaLocation) != 0)
- goto exit_error;
- base = xmlNodeGetBase(node->doc, node);
- if (base == NULL) {
- uri = xmlBuildURI(*schemaLocation, node->doc->URL);
- } else {
- uri = xmlBuildURI(*schemaLocation, base);
- xmlFree(base);
- }
- if (uri == NULL) {
- PERROR_INT("xmlSchemaParseIncludeOrRedefine",
- "could not build an URI from the schemaLocation")
- goto exit_failure;
- }
- (*schemaLocation) = (xmlChar *) xmlDictLookup(pctxt->dict, uri, -1);
- xmlFree(uri);
- } else {
- xmlSchemaPMissingAttrErr(pctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "schemaLocation", NULL);
- goto exit_error;
- }
- /*
- * Report self-inclusion and self-redefinition.
- */
- if (xmlStrEqual(*schemaLocation, pctxt->URL)) {
- if (type == XML_SCHEMA_SCHEMA_REDEFINE) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_SRC_REDEFINE,
- NULL, node,
- "The schema document '%s' cannot redefine itself.",
- *schemaLocation);
- } else {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_SRC_INCLUDE,
- NULL, node,
- "The schema document '%s' cannot include itself.",
- *schemaLocation);
- }
- goto exit_error;
- }
-
- return(0);
-exit_error:
- return(pctxt->err);
-exit_failure:
- return(-1);
-}
-
-static int
-xmlSchemaParseIncludeOrRedefine(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- int type)
-{
- xmlNodePtr child = NULL;
- const xmlChar *schemaLocation = NULL;
- int res = 0; /* hasRedefinitions = 0 */
- int isChameleon = 0, wasChameleon = 0;
- xmlSchemaBucketPtr bucket = NULL;
-
- if ((pctxt == NULL) || (schema == NULL) || (node == NULL))
- return (-1);
-
- /*
- * Parse attributes. Note that the returned schemaLocation will
- * be already converted to an absolute URI.
- */
- res = xmlSchemaParseIncludeOrRedefineAttrs(pctxt, schema,
- node, (xmlChar **) (&schemaLocation), type);
- if (res != 0)
- return(res);
- /*
- * Load and add the schema document.
- */
- res = xmlSchemaAddSchemaDoc(pctxt, type, schemaLocation, NULL,
- NULL, 0, node, pctxt->targetNamespace, NULL, &bucket);
- if (res != 0)
- return(res);
- /*
- * If we get no schema bucket back, then this means that the schema
- * document could not be located or was broken XML or was not
- * a schema document.
- */
- if ((bucket == NULL) || (bucket->doc == NULL)) {
- if (type == XML_SCHEMA_SCHEMA_INCLUDE) {
- /*
- * WARNING for <include>:
- * We will raise an error if the schema cannot be located
- * for inclusions, since the that was the feedback from the
- * schema people. I.e. the following spec piece will *not* be
- * satisfied:
- * SPEC src-include: "It is not an error for the `actual value` of the
- * schemaLocation [attribute] to fail to resolve it all, in which
- * case no corresponding inclusion is performed.
- * So do we need a warning report here?"
- */
- res = XML_SCHEMAP_SRC_INCLUDE;
- xmlSchemaCustomErr(ACTXT_CAST pctxt, res,
- node, NULL,
- "Failed to load the document '%s' for inclusion",
- schemaLocation, NULL);
- } else {
- /*
- * NOTE: This was changed to raise an error even if no redefinitions
- * are specified.
- *
- * SPEC src-redefine (1)
- * "If there are any element information items among the [children]
- * other than <annotation> then the `actual value` of the
- * schemaLocation [attribute] must successfully resolve."
- * TODO: Ask the WG if a the location has always to resolve
- * here as well!
- */
- res = XML_SCHEMAP_SRC_REDEFINE;
- xmlSchemaCustomErr(ACTXT_CAST pctxt, res,
- node, NULL,
- "Failed to load the document '%s' for redefinition",
- schemaLocation, NULL);
- }
- } else {
- /*
- * Check targetNamespace sanity before parsing the new schema.
- * TODO: Note that we won't check further content if the
- * targetNamespace was bad.
- */
- if (bucket->origTargetNamespace != NULL) {
- /*
- * SPEC src-include (2.1)
- * "SII has a targetNamespace [attribute], and its `actual
- * value` is identical to the `actual value` of the targetNamespace
- * [attribute] of SII' (which must have such an [attribute])."
- */
- if (pctxt->targetNamespace == NULL) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_SRC_INCLUDE,
- node, NULL,
- "The target namespace of the included/redefined schema "
- "'%s' has to be absent, since the including/redefining "
- "schema has no target namespace",
- schemaLocation, NULL);
- goto exit_error;
- } else if (!xmlStrEqual(bucket->origTargetNamespace,
- pctxt->targetNamespace)) {
- /* TODO: Change error function. */
- xmlSchemaPCustomErrExt(pctxt,
- XML_SCHEMAP_SRC_INCLUDE,
- NULL, node,
- "The target namespace '%s' of the included/redefined "
- "schema '%s' differs from '%s' of the "
- "including/redefining schema",
- bucket->origTargetNamespace, schemaLocation,
- pctxt->targetNamespace);
- goto exit_error;
- }
- } else if (pctxt->targetNamespace != NULL) {
- /*
- * Chameleons: the original target namespace will
- * differ from the resulting namespace.
- */
- isChameleon = 1;
- if (bucket->parsed &&
- bucket->origTargetNamespace != NULL) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_SRC_INCLUDE,
- node, NULL,
- "The target namespace of the included/redefined schema "
- "'%s' has to be absent or the same as the "
- "including/redefining schema's target namespace",
- schemaLocation, NULL);
- goto exit_error;
- }
- bucket->targetNamespace = pctxt->targetNamespace;
- }
- }
- /*
- * Parse the schema.
- */
- if (bucket && (!bucket->parsed) && (bucket->doc != NULL)) {
- if (isChameleon) {
- /* TODO: Get rid of this flag on the schema itself. */
- if ((schema->flags & XML_SCHEMAS_INCLUDING_CONVERT_NS) == 0) {
- schema->flags |= XML_SCHEMAS_INCLUDING_CONVERT_NS;
- } else
- wasChameleon = 1;
- }
- xmlSchemaParseNewDoc(pctxt, schema, bucket);
- /* Restore chameleon flag. */
- if (isChameleon && (!wasChameleon))
- schema->flags ^= XML_SCHEMAS_INCLUDING_CONVERT_NS;
- }
- /*
- * And now for the children...
- */
- child = node->children;
- if (type == XML_SCHEMA_SCHEMA_REDEFINE) {
- /*
- * Parse (simpleType | complexType | group | attributeGroup))*
- */
- pctxt->redefined = bucket;
- /*
- * How to proceed if the redefined schema was not located?
- */
- pctxt->isRedefine = 1;
- while (IS_SCHEMA(child, "annotation") ||
- IS_SCHEMA(child, "simpleType") ||
- IS_SCHEMA(child, "complexType") ||
- IS_SCHEMA(child, "group") ||
- IS_SCHEMA(child, "attributeGroup")) {
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * TODO: discard or not?
- */
- } else if (IS_SCHEMA(child, "simpleType")) {
- xmlSchemaParseSimpleType(pctxt, schema, child, 1);
- } else if (IS_SCHEMA(child, "complexType")) {
- xmlSchemaParseComplexType(pctxt, schema, child, 1);
- /* hasRedefinitions = 1; */
- } else if (IS_SCHEMA(child, "group")) {
- /* hasRedefinitions = 1; */
- xmlSchemaParseModelGroupDefinition(pctxt,
- schema, child);
- } else if (IS_SCHEMA(child, "attributeGroup")) {
- /* hasRedefinitions = 1; */
- xmlSchemaParseAttributeGroupDefinition(pctxt, schema,
- child);
- }
- child = child->next;
- }
- pctxt->redefined = NULL;
- pctxt->isRedefine = 0;
- } else {
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * TODO: discard or not?
- */
- child = child->next;
- }
- }
- if (child != NULL) {
- res = XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED;
- if (type == XML_SCHEMA_SCHEMA_REDEFINE) {
- xmlSchemaPContentErr(pctxt, res,
- NULL, node, child, NULL,
- "(annotation | (simpleType | complexType | group | attributeGroup))*");
- } else {
- xmlSchemaPContentErr(pctxt, res,
- NULL, node, child, NULL,
- "(annotation?)");
- }
- }
- return(res);
-
-exit_error:
- return(pctxt->err);
-}
-
-static int
-xmlSchemaParseRedefine(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- int res;
-#ifndef ENABLE_REDEFINE
- TODO
- return(0);
-#endif
- res = xmlSchemaParseIncludeOrRedefine(pctxt, schema, node,
- XML_SCHEMA_SCHEMA_REDEFINE);
- if (res != 0)
- return(res);
- return(0);
-}
-
-static int
-xmlSchemaParseInclude(xmlSchemaParserCtxtPtr pctxt, xmlSchemaPtr schema,
- xmlNodePtr node)
-{
- int res;
-
- res = xmlSchemaParseIncludeOrRedefine(pctxt, schema, node,
- XML_SCHEMA_SCHEMA_INCLUDE);
- if (res != 0)
- return(res);
- return(0);
-}
-
-/**
- * xmlSchemaParseModelGroup:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- * @type: the "compositor" type
- * @particleNeeded: if a a model group with a particle
- *
- * parse a XML schema Sequence definition.
- * Applies parts of:
- * Schema Representation Constraint:
- * Redefinition Constraints and Semantics (src-redefine)
- * (6.1), (6.1.1), (6.1.2)
- *
- * Schema Component Constraint:
- * All Group Limited (cos-all-limited) (2)
- * TODO: Actually this should go to component-level checks,
- * but is done here due to performance. Move it to an other layer
- * is schema construction via an API is implemented.
- *
- * *WARNING* this interface is highly subject to change
- *
- * Returns -1 in case of error, 0 if the declaration is improper and
- * 1 in case of success.
- */
-static xmlSchemaTreeItemPtr
-xmlSchemaParseModelGroup(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node, xmlSchemaTypeType type,
- int withParticle)
-{
- xmlSchemaModelGroupPtr item;
- xmlSchemaParticlePtr particle = NULL;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
- int min = 1, max = 1, isElemRef, hasRefs = 0;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
- /*
- * Create a model group with the given compositor.
- */
- item = xmlSchemaAddModelGroup(ctxt, schema, type, node);
- if (item == NULL)
- return (NULL);
-
- if (withParticle) {
- if (type == XML_SCHEMA_TYPE_ALL) {
- min = xmlGetMinOccurs(ctxt, node, 0, 1, 1, "(0 | 1)");
- max = xmlGetMaxOccurs(ctxt, node, 1, 1, 1, "1");
- } else {
- /* choice + sequence */
- min = xmlGetMinOccurs(ctxt, node, 0, -1, 1, "xs:nonNegativeInteger");
- max = xmlGetMaxOccurs(ctxt, node, 0, UNBOUNDED, 1,
- "(xs:nonNegativeInteger | unbounded)");
- }
- xmlSchemaPCheckParticleCorrect_2(ctxt, NULL, node, min, max);
- /*
- * Create a particle
- */
- particle = xmlSchemaAddParticle(ctxt, node, min, max);
- if (particle == NULL)
- return (NULL);
- particle->children = (xmlSchemaTreeItemPtr) item;
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "maxOccurs")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "minOccurs"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- } else {
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if (!xmlStrEqual(attr->name, BAD_CAST "id")) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- }
-
- /*
- * Extract and validate attributes.
- */
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- item->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- if (type == XML_SCHEMA_TYPE_ALL) {
- xmlSchemaParticlePtr part, last = NULL;
-
- while (IS_SCHEMA(child, "element")) {
- part = (xmlSchemaParticlePtr) xmlSchemaParseElement(ctxt,
- schema, child, &isElemRef, 0);
- /*
- * SPEC cos-all-limited (2)
- * "The {max occurs} of all the particles in the {particles}
- * of the ('all') group must be 0 or 1.
- */
- if (part != NULL) {
- if (isElemRef)
- hasRefs++;
- if (part->minOccurs > 1) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_COS_ALL_LIMITED,
- NULL, child,
- "Invalid value for minOccurs (must be 0 or 1)",
- NULL);
- /* Reset to 1. */
- part->minOccurs = 1;
- }
- if (part->maxOccurs > 1) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_COS_ALL_LIMITED,
- NULL, child,
- "Invalid value for maxOccurs (must be 0 or 1)",
- NULL);
- /* Reset to 1. */
- part->maxOccurs = 1;
- }
- if (last == NULL)
- item->children = (xmlSchemaTreeItemPtr) part;
- else
- last->next = (xmlSchemaTreeItemPtr) part;
- last = part;
- }
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, (annotation?, element*)");
- }
- } else {
- /* choice + sequence */
- xmlSchemaTreeItemPtr part = NULL, last = NULL;
-
- while ((IS_SCHEMA(child, "element")) ||
- (IS_SCHEMA(child, "group")) ||
- (IS_SCHEMA(child, "any")) ||
- (IS_SCHEMA(child, "choice")) ||
- (IS_SCHEMA(child, "sequence"))) {
-
- if (IS_SCHEMA(child, "element")) {
- part = (xmlSchemaTreeItemPtr)
- xmlSchemaParseElement(ctxt, schema, child, &isElemRef, 0);
- if (part && isElemRef)
- hasRefs++;
- } else if (IS_SCHEMA(child, "group")) {
- part =
- xmlSchemaParseModelGroupDefRef(ctxt, schema, child);
- if (part != NULL)
- hasRefs++;
- /*
- * Handle redefinitions.
- */
- if (ctxt->isRedefine && ctxt->redef &&
- (ctxt->redef->item->type == XML_SCHEMA_TYPE_GROUP) &&
- part && part->children)
- {
- if ((xmlSchemaGetQNameRefName(part->children) ==
- ctxt->redef->refName) &&
- (xmlSchemaGetQNameRefTargetNs(part->children) ==
- ctxt->redef->refTargetNs))
- {
- /*
- * SPEC src-redefine:
- * (6.1) "If it has a <group> among its contents at
- * some level the `actual value` of whose ref
- * [attribute] is the same as the `actual value` of
- * its own name attribute plus target namespace, then
- * all of the following must be true:"
- * (6.1.1) "It must have exactly one such group."
- */
- if (ctxt->redefCounter != 0) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAP_SRC_REDEFINE, child, NULL,
- "The redefining model group definition "
- "'%s' must not contain more than one "
- "reference to the redefined definition",
- xmlSchemaFormatQName(&str,
- ctxt->redef->refTargetNs,
- ctxt->redef->refName),
- NULL);
- FREE_AND_NULL(str)
- part = NULL;
- } else if (((WXS_PARTICLE(part))->minOccurs != 1) ||
- ((WXS_PARTICLE(part))->maxOccurs != 1))
- {
- xmlChar *str = NULL;
- /*
- * SPEC src-redefine:
- * (6.1.2) "The `actual value` of both that
- * group's minOccurs and maxOccurs [attribute]
- * must be 1 (or `absent`).
- */
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAP_SRC_REDEFINE, child, NULL,
- "The redefining model group definition "
- "'%s' must not contain a reference to the "
- "redefined definition with a "
- "maxOccurs/minOccurs other than 1",
- xmlSchemaFormatQName(&str,
- ctxt->redef->refTargetNs,
- ctxt->redef->refName),
- NULL);
- FREE_AND_NULL(str)
- part = NULL;
- }
- ctxt->redef->reference = WXS_BASIC_CAST part;
- ctxt->redefCounter++;
- }
- }
- } else if (IS_SCHEMA(child, "any")) {
- part = (xmlSchemaTreeItemPtr)
- xmlSchemaParseAny(ctxt, schema, child);
- } else if (IS_SCHEMA(child, "choice")) {
- part = xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_CHOICE, 1);
- } else if (IS_SCHEMA(child, "sequence")) {
- part = xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_SEQUENCE, 1);
- }
- if (part != NULL) {
- if (last == NULL)
- item->children = part;
- else
- last->next = part;
- last = part;
- }
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, (element | group | choice | sequence | any)*)");
- }
- }
- if ((max == 0) && (min == 0))
- return (NULL);
- if (hasRefs) {
- /*
- * We need to resolve references.
- */
- WXS_ADD_PENDING(ctxt, item);
- }
- if (withParticle)
- return ((xmlSchemaTreeItemPtr) particle);
- else
- return ((xmlSchemaTreeItemPtr) item);
-}
-
-/**
- * xmlSchemaParseRestriction:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Restriction definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns the type definition or NULL in case of error
- */
-static xmlSchemaTypePtr
-xmlSchemaParseRestriction(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node, xmlSchemaTypeType parentType)
-{
- xmlSchemaTypePtr type;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
- /* Not a component, don't create it. */
- type = ctxt->ctxtType;
- type->flags |= XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION;
-
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "base"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- /*
- * Extract and validate attributes.
- */
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- /*
- * Attribute
- */
- /*
- * Extract the base type. The "base" attribute is mandatory if inside
- * a complex type or if redefining.
- *
- * SPEC (1.2) "...otherwise (<restriction> has no <simpleType> "
- * among its [children]), the simple type definition which is
- * the {content type} of the type definition `resolved` to by
- * the `actual value` of the base [attribute]"
- */
- if (xmlSchemaPValAttrQName(ctxt, schema, NULL, node, "base",
- &(type->baseNs), &(type->base)) == 0)
- {
- if ((type->base == NULL) && (type->type == XML_SCHEMA_TYPE_COMPLEX)) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "base", NULL);
- } else if ((ctxt->isRedefine) &&
- (type->flags & XML_SCHEMAS_TYPE_GLOBAL))
- {
- if (type->base == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "base", NULL);
- } else if ((! xmlStrEqual(type->base, type->name)) ||
- (! xmlStrEqual(type->baseNs, type->targetNamespace)))
- {
- xmlChar *str1 = NULL, *str2 = NULL;
- /*
- * REDEFINE: SPEC src-redefine (5)
- * "Within the [children], each <simpleType> must have a
- * <restriction> among its [children] ... the `actual value` of
- * whose base [attribute] must be the same as the `actual value`
- * of its own name attribute plus target namespace;"
- */
- xmlSchemaPCustomErrExt(ctxt, XML_SCHEMAP_SRC_REDEFINE,
- NULL, node, "This is a redefinition, but the QName "
- "value '%s' of the 'base' attribute does not match the "
- "type's designation '%s'",
- xmlSchemaFormatQName(&str1, type->baseNs, type->base),
- xmlSchemaFormatQName(&str2, type->targetNamespace,
- type->name), NULL);
- FREE_AND_NULL(str1);
- FREE_AND_NULL(str2);
- /* Avoid confusion and erase the values. */
- type->base = NULL;
- type->baseNs = NULL;
- }
- }
- }
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * Add the annotation to the simple type ancestor.
- */
- xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
- xmlSchemaParseAnnotation(ctxt, child, 1));
- child = child->next;
- }
- if (parentType == XML_SCHEMA_TYPE_SIMPLE) {
- /*
- * Corresponds to <simpleType><restriction><simpleType>.
- */
- if (IS_SCHEMA(child, "simpleType")) {
- if (type->base != NULL) {
- /*
- * src-restriction-base-or-simpleType
- * Either the base [attribute] or the simpleType [child] of the
- * <restriction> element must be present, but not both.
- */
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE,
- NULL, node, child,
- "The attribute 'base' and the <simpleType> child are "
- "mutually exclusive", NULL);
- } else {
- type->baseType = (xmlSchemaTypePtr)
- xmlSchemaParseSimpleType(ctxt, schema, child, 0);
- }
- child = child->next;
- } else if (type->base == NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_SRC_RESTRICTION_BASE_OR_SIMPLETYPE,
- NULL, node, child,
- "Either the attribute 'base' or a <simpleType> child "
- "must be present", NULL);
- }
- } else if (parentType == XML_SCHEMA_TYPE_COMPLEX_CONTENT) {
- /*
- * Corresponds to <complexType><complexContent><restriction>...
- * followed by:
- *
- * Model groups <all>, <choice> and <sequence>.
- */
- if (IS_SCHEMA(child, "all")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_ALL, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "choice")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt,
- schema, child, XML_SCHEMA_TYPE_CHOICE, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "sequence")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_SEQUENCE, 1);
- child = child->next;
- /*
- * Model group reference <group>.
- */
- } else if (IS_SCHEMA(child, "group")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroupDefRef(ctxt, schema, child);
- /*
- * Note that the reference will be resolved in
- * xmlSchemaResolveTypeReferences();
- */
- child = child->next;
- }
- } else if (parentType == XML_SCHEMA_TYPE_SIMPLE_CONTENT) {
- /*
- * Corresponds to <complexType><simpleContent><restriction>...
- *
- * "1.1 the simple type definition corresponding to the <simpleType>
- * among the [children] of <restriction> if there is one;"
- */
- if (IS_SCHEMA(child, "simpleType")) {
- /*
- * We will store the to-be-restricted simple type in
- * type->contentTypeDef *temporarily*.
- */
- type->contentTypeDef = (xmlSchemaTypePtr)
- xmlSchemaParseSimpleType(ctxt, schema, child, 0);
- if ( type->contentTypeDef == NULL)
- return (NULL);
- child = child->next;
- }
- }
-
- if ((parentType == XML_SCHEMA_TYPE_SIMPLE) ||
- (parentType == XML_SCHEMA_TYPE_SIMPLE_CONTENT)) {
- xmlSchemaFacetPtr facet, lastfacet = NULL;
- /*
- * Corresponds to <complexType><simpleContent><restriction>...
- * <simpleType><restriction>...
- */
-
- /*
- * Add the facets to the simple type ancestor.
- */
- /*
- * TODO: Datatypes: 4.1.3 Constraints on XML Representation of
- * Simple Type Definition Schema Representation Constraint:
- * *Single Facet Value*
- */
- while ((IS_SCHEMA(child, "minInclusive")) ||
- (IS_SCHEMA(child, "minExclusive")) ||
- (IS_SCHEMA(child, "maxInclusive")) ||
- (IS_SCHEMA(child, "maxExclusive")) ||
- (IS_SCHEMA(child, "totalDigits")) ||
- (IS_SCHEMA(child, "fractionDigits")) ||
- (IS_SCHEMA(child, "pattern")) ||
- (IS_SCHEMA(child, "enumeration")) ||
- (IS_SCHEMA(child, "whiteSpace")) ||
- (IS_SCHEMA(child, "length")) ||
- (IS_SCHEMA(child, "maxLength")) ||
- (IS_SCHEMA(child, "minLength"))) {
- facet = xmlSchemaParseFacet(ctxt, schema, child);
- if (facet != NULL) {
- if (lastfacet == NULL)
- type->facets = facet;
- else
- lastfacet->next = facet;
- lastfacet = facet;
- lastfacet->next = NULL;
- }
- child = child->next;
- }
- /*
- * Create links for derivation and validation.
- */
- if (type->facets != NULL) {
- xmlSchemaFacetLinkPtr facetLink, lastFacetLink = NULL;
-
- facet = type->facets;
- do {
- facetLink = (xmlSchemaFacetLinkPtr)
- xmlMalloc(sizeof(xmlSchemaFacetLink));
- if (facetLink == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating a facet link", NULL);
- xmlFree(facetLink);
- return (NULL);
- }
- facetLink->facet = facet;
- facetLink->next = NULL;
- if (lastFacetLink == NULL)
- type->facetSet = facetLink;
- else
- lastFacetLink->next = facetLink;
- lastFacetLink = facetLink;
- facet = facet->next;
- } while (facet != NULL);
- }
- }
- if (type->type == XML_SCHEMA_TYPE_COMPLEX) {
- /*
- * Attribute uses/declarations.
- */
- if (xmlSchemaParseLocalAttributes(ctxt, schema, &child,
- (xmlSchemaItemListPtr *) &(type->attrUses),
- XML_SCHEMA_TYPE_RESTRICTION, NULL) == -1)
- return(NULL);
- /*
- * Attribute wildcard.
- */
- if (IS_SCHEMA(child, "anyAttribute")) {
- type->attributeWildcard =
- xmlSchemaParseAnyAttribute(ctxt, schema, child);
- child = child->next;
- }
- }
- if (child != NULL) {
- if (parentType == XML_SCHEMA_TYPE_COMPLEX_CONTENT) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "annotation?, (group | all | choice | sequence)?, "
- "((attribute | attributeGroup)*, anyAttribute?))");
- } else if (parentType == XML_SCHEMA_TYPE_SIMPLE_CONTENT) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, (simpleType?, (minExclusive | minInclusive | "
- "maxExclusive | maxInclusive | totalDigits | fractionDigits | "
- "length | minLength | maxLength | enumeration | whiteSpace | "
- "pattern)*)?, ((attribute | attributeGroup)*, anyAttribute?))");
- } else {
- /* Simple type */
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, (simpleType?, (minExclusive | minInclusive | "
- "maxExclusive | maxInclusive | totalDigits | fractionDigits | "
- "length | minLength | maxLength | enumeration | whiteSpace | "
- "pattern)*))");
- }
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaParseExtension:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * Parses an <extension>, which is found inside a
- * <simpleContent> or <complexContent>.
- * *WARNING* this interface is highly subject to change.
- *
- * TODO: Returns the type definition or NULL in case of error
- */
-static xmlSchemaTypePtr
-xmlSchemaParseExtension(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node, xmlSchemaTypeType parentType)
-{
- xmlSchemaTypePtr type;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
- /* Not a component, don't create it. */
- type = ctxt->ctxtType;
- type->flags |= XML_SCHEMAS_TYPE_DERIVATION_METHOD_EXTENSION;
-
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "base"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
-
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
- /*
- * Attribute "base" - mandatory.
- */
- if ((xmlSchemaPValAttrQName(ctxt, schema, NULL, node,
- "base", &(type->baseNs), &(type->base)) == 0) &&
- (type->base == NULL)) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING,
- NULL, node, "base", NULL);
- }
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * Add the annotation to the type ancestor.
- */
- xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
- xmlSchemaParseAnnotation(ctxt, child, 1));
- child = child->next;
- }
- if (parentType == XML_SCHEMA_TYPE_COMPLEX_CONTENT) {
- /*
- * Corresponds to <complexType><complexContent><extension>... and:
- *
- * Model groups <all>, <choice>, <sequence> and <group>.
- */
- if (IS_SCHEMA(child, "all")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt, schema,
- child, XML_SCHEMA_TYPE_ALL, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "choice")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt, schema,
- child, XML_SCHEMA_TYPE_CHOICE, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "sequence")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt, schema,
- child, XML_SCHEMA_TYPE_SEQUENCE, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "group")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroupDefRef(ctxt, schema, child);
- /*
- * Note that the reference will be resolved in
- * xmlSchemaResolveTypeReferences();
- */
- child = child->next;
- }
- }
- if (child != NULL) {
- /*
- * Attribute uses/declarations.
- */
- if (xmlSchemaParseLocalAttributes(ctxt, schema, &child,
- (xmlSchemaItemListPtr *) &(type->attrUses),
- XML_SCHEMA_TYPE_EXTENSION, NULL) == -1)
- return(NULL);
- /*
- * Attribute wildcard.
- */
- if (IS_SCHEMA(child, "anyAttribute")) {
- ctxt->ctxtType->attributeWildcard =
- xmlSchemaParseAnyAttribute(ctxt, schema, child);
- child = child->next;
- }
- }
- if (child != NULL) {
- if (parentType == XML_SCHEMA_TYPE_COMPLEX_CONTENT) {
- /* Complex content extension. */
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, ((group | all | choice | sequence)?, "
- "((attribute | attributeGroup)*, anyAttribute?)))");
- } else {
- /* Simple content extension. */
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, ((attribute | attributeGroup)*, "
- "anyAttribute?))");
- }
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaParseSimpleContent:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema SimpleContent definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns the type definition or NULL in case of error
- */
-static int
-xmlSchemaParseSimpleContent(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema, xmlNodePtr node,
- int *hasRestrictionOrExtension)
-{
- xmlSchemaTypePtr type;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
- (hasRestrictionOrExtension == NULL))
- return (-1);
- *hasRestrictionOrExtension = 0;
- /* Not a component, don't create it. */
- type = ctxt->ctxtType;
- type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id"))) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
-
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * Add the annotation to the complex type ancestor.
- */
- xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
- xmlSchemaParseAnnotation(ctxt, child, 1));
- child = child->next;
- }
- if (child == NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_MISSING,
- NULL, node, NULL, NULL,
- "(annotation?, (restriction | extension))");
- }
- if (child == NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_MISSING,
- NULL, node, NULL, NULL,
- "(annotation?, (restriction | extension))");
- }
- if (IS_SCHEMA(child, "restriction")) {
- xmlSchemaParseRestriction(ctxt, schema, child,
- XML_SCHEMA_TYPE_SIMPLE_CONTENT);
- (*hasRestrictionOrExtension) = 1;
- child = child->next;
- } else if (IS_SCHEMA(child, "extension")) {
- xmlSchemaParseExtension(ctxt, schema, child,
- XML_SCHEMA_TYPE_SIMPLE_CONTENT);
- (*hasRestrictionOrExtension) = 1;
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child, NULL,
- "(annotation?, (restriction | extension))");
- }
- return (0);
-}
-
-/**
- * xmlSchemaParseComplexContent:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema ComplexContent definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns the type definition or NULL in case of error
- */
-static int
-xmlSchemaParseComplexContent(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaPtr schema, xmlNodePtr node,
- int *hasRestrictionOrExtension)
-{
- xmlSchemaTypePtr type;
- xmlNodePtr child = NULL;
- xmlAttrPtr attr;
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL) ||
- (hasRestrictionOrExtension == NULL))
- return (-1);
- *hasRestrictionOrExtension = 0;
- /* Not a component, don't create it. */
- type = ctxt->ctxtType;
- /*
- * Check for illegal attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if ((!xmlStrEqual(attr->name, BAD_CAST "id")) &&
- (!xmlStrEqual(attr->name, BAD_CAST "mixed")))
- {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
-
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
-
- /*
- * Set the 'mixed' on the complex type ancestor.
- */
- if (xmlGetBooleanProp(ctxt, node, "mixed", 0)) {
- if ((type->flags & XML_SCHEMAS_TYPE_MIXED) == 0)
- type->flags |= XML_SCHEMAS_TYPE_MIXED;
- }
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- /*
- * Add the annotation to the complex type ancestor.
- */
- xmlSchemaAddAnnotation((xmlSchemaAnnotItemPtr) type,
- xmlSchemaParseAnnotation(ctxt, child, 1));
- child = child->next;
- }
- if (child == NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_MISSING,
- NULL, node, NULL,
- NULL, "(annotation?, (restriction | extension))");
- }
- if (child == NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_MISSING,
- NULL, node, NULL,
- NULL, "(annotation?, (restriction | extension))");
- }
- if (IS_SCHEMA(child, "restriction")) {
- xmlSchemaParseRestriction(ctxt, schema, child,
- XML_SCHEMA_TYPE_COMPLEX_CONTENT);
- (*hasRestrictionOrExtension) = 1;
- child = child->next;
- } else if (IS_SCHEMA(child, "extension")) {
- xmlSchemaParseExtension(ctxt, schema, child,
- XML_SCHEMA_TYPE_COMPLEX_CONTENT);
- (*hasRestrictionOrExtension) = 1;
- child = child->next;
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?, (restriction | extension))");
- }
- return (0);
-}
-
-/**
- * xmlSchemaParseComplexType:
- * @ctxt: a schema validation context
- * @schema: the schema being built
- * @node: a subtree containing XML Schema informations
- *
- * parse a XML schema Complex Type definition
- * *WARNING* this interface is highly subject to change
- *
- * Returns the type definition or NULL in case of error
- */
-static xmlSchemaTypePtr
-xmlSchemaParseComplexType(xmlSchemaParserCtxtPtr ctxt, xmlSchemaPtr schema,
- xmlNodePtr node, int topLevel)
-{
- xmlSchemaTypePtr type, ctxtType;
- xmlNodePtr child = NULL;
- const xmlChar *name = NULL;
- xmlAttrPtr attr;
- const xmlChar *attrValue;
-#ifdef ENABLE_NAMED_LOCALS
- char buf[40];
-#endif
- int final = 0, block = 0, hasRestrictionOrExtension = 0;
-
-
- if ((ctxt == NULL) || (schema == NULL) || (node == NULL))
- return (NULL);
-
- ctxtType = ctxt->ctxtType;
-
- if (topLevel) {
- attr = xmlSchemaGetPropNode(node, "name");
- if (attr == NULL) {
- xmlSchemaPMissingAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_MISSING, NULL, node, "name", NULL);
- return (NULL);
- } else if (xmlSchemaPValAttrNode(ctxt, NULL, attr,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NCNAME), &name) != 0) {
- return (NULL);
- }
- }
-
- if (topLevel == 0) {
- /*
- * Parse as local complex type definition.
- */
-#ifdef ENABLE_NAMED_LOCALS
- snprintf(buf, 39, "#CT%d", ctxt->counter++ + 1);
- type = xmlSchemaAddType(ctxt, schema,
- XML_SCHEMA_TYPE_COMPLEX,
- xmlDictLookup(ctxt->dict, (const xmlChar *)buf, -1),
- ctxt->targetNamespace, node, 0);
-#else
- type = xmlSchemaAddType(ctxt, schema,
- XML_SCHEMA_TYPE_COMPLEX,
- NULL, ctxt->targetNamespace, node, 0);
-#endif
- if (type == NULL)
- return (NULL);
- name = type->name;
- type->node = node;
- type->type = XML_SCHEMA_TYPE_COMPLEX;
- /*
- * TODO: We need the target namespace.
- */
- } else {
- /*
- * Parse as global complex type definition.
- */
- type = xmlSchemaAddType(ctxt, schema,
- XML_SCHEMA_TYPE_COMPLEX,
- name, ctxt->targetNamespace, node, 1);
- if (type == NULL)
- return (NULL);
- type->node = node;
- type->type = XML_SCHEMA_TYPE_COMPLEX;
- type->flags |= XML_SCHEMAS_TYPE_GLOBAL;
- }
- type->targetNamespace = ctxt->targetNamespace;
- /*
- * Handle attributes.
- */
- attr = node->properties;
- while (attr != NULL) {
- if (attr->ns == NULL) {
- if (xmlStrEqual(attr->name, BAD_CAST "id")) {
- /*
- * Attribute "id".
- */
- xmlSchemaPValAttrID(ctxt, node, BAD_CAST "id");
- } else if (xmlStrEqual(attr->name, BAD_CAST "mixed")) {
- /*
- * Attribute "mixed".
- */
- if (xmlSchemaPGetBoolNodeValue(ctxt,
- NULL, (xmlNodePtr) attr))
- type->flags |= XML_SCHEMAS_TYPE_MIXED;
- } else if (topLevel) {
- /*
- * Attributes of global complex type definitions.
- */
- if (xmlStrEqual(attr->name, BAD_CAST "name")) {
- /* Pass. */
- } else if (xmlStrEqual(attr->name, BAD_CAST "abstract")) {
- /*
- * Attribute "abstract".
- */
- if (xmlSchemaPGetBoolNodeValue(ctxt,
- NULL, (xmlNodePtr) attr))
- type->flags |= XML_SCHEMAS_TYPE_ABSTRACT;
- } else if (xmlStrEqual(attr->name, BAD_CAST "final")) {
- /*
- * Attribute "final".
- */
- attrValue = xmlSchemaGetNodeContent(ctxt,
- (xmlNodePtr) attr);
- if (xmlSchemaPValAttrBlockFinal(attrValue,
- &(type->flags),
- -1,
- XML_SCHEMAS_TYPE_FINAL_EXTENSION,
- XML_SCHEMAS_TYPE_FINAL_RESTRICTION,
- -1, -1, -1) != 0)
- {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr, NULL,
- "(#all | List of (extension | restriction))",
- attrValue, NULL, NULL, NULL);
- } else
- final = 1;
- } else if (xmlStrEqual(attr->name, BAD_CAST "block")) {
- /*
- * Attribute "block".
- */
- attrValue = xmlSchemaGetNodeContent(ctxt,
- (xmlNodePtr) attr);
- if (xmlSchemaPValAttrBlockFinal(attrValue, &(type->flags),
- -1,
- XML_SCHEMAS_TYPE_BLOCK_EXTENSION,
- XML_SCHEMAS_TYPE_BLOCK_RESTRICTION,
- -1, -1, -1) != 0) {
- xmlSchemaPSimpleTypeErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_INVALID_VALUE,
- NULL, (xmlNodePtr) attr, NULL,
- "(#all | List of (extension | restriction)) ",
- attrValue, NULL, NULL, NULL);
- } else
- block = 1;
- } else {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- } else if (xmlStrEqual(attr->ns->href, xmlSchemaNs)) {
- xmlSchemaPIllegalAttrErr(ctxt,
- XML_SCHEMAP_S4S_ATTR_NOT_ALLOWED, NULL, attr);
- }
- attr = attr->next;
- }
- if (! block) {
- /*
- * Apply default "block" values.
- */
- if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_RESTRICTION)
- type->flags |= XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
- if (schema->flags & XML_SCHEMAS_BLOCK_DEFAULT_EXTENSION)
- type->flags |= XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
- }
- if (! final) {
- /*
- * Apply default "block" values.
- */
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_RESTRICTION)
- type->flags |= XML_SCHEMAS_TYPE_FINAL_RESTRICTION;
- if (schema->flags & XML_SCHEMAS_FINAL_DEFAULT_EXTENSION)
- type->flags |= XML_SCHEMAS_TYPE_FINAL_EXTENSION;
- }
- /*
- * And now for the children...
- */
- child = node->children;
- if (IS_SCHEMA(child, "annotation")) {
- type->annot = xmlSchemaParseAnnotation(ctxt, child, 1);
- child = child->next;
- }
- ctxt->ctxtType = type;
- if (IS_SCHEMA(child, "simpleContent")) {
- /*
- * <complexType><simpleContent>...
- * 3.4.3 : 2.2
- * Specifying mixed='true' when the <simpleContent>
- * alternative is chosen has no effect
- */
- if (type->flags & XML_SCHEMAS_TYPE_MIXED)
- type->flags ^= XML_SCHEMAS_TYPE_MIXED;
- xmlSchemaParseSimpleContent(ctxt, schema, child,
- &hasRestrictionOrExtension);
- child = child->next;
- } else if (IS_SCHEMA(child, "complexContent")) {
- /*
- * <complexType><complexContent>...
- */
- type->contentType = XML_SCHEMA_CONTENT_EMPTY;
- xmlSchemaParseComplexContent(ctxt, schema, child,
- &hasRestrictionOrExtension);
- child = child->next;
- } else {
- /*
- * E.g <complexType><sequence>... or <complexType><attribute>... etc.
- *
- * SPEC
- * "...the third alternative (neither <simpleContent> nor
- * <complexContent>) is chosen. This case is understood as shorthand
- * for complex content restricting the `ur-type definition`, and the
- * details of the mappings should be modified as necessary.
- */
- type->baseType = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
- type->flags |= XML_SCHEMAS_TYPE_DERIVATION_METHOD_RESTRICTION;
- /*
- * Parse model groups.
- */
- if (IS_SCHEMA(child, "all")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_ALL, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "choice")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_CHOICE, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "sequence")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroup(ctxt, schema, child,
- XML_SCHEMA_TYPE_SEQUENCE, 1);
- child = child->next;
- } else if (IS_SCHEMA(child, "group")) {
- type->subtypes = (xmlSchemaTypePtr)
- xmlSchemaParseModelGroupDefRef(ctxt, schema, child);
- /*
- * Note that the reference will be resolved in
- * xmlSchemaResolveTypeReferences();
- */
- child = child->next;
- }
- /*
- * Parse attribute decls/refs.
- */
- if (xmlSchemaParseLocalAttributes(ctxt, schema, &child,
- (xmlSchemaItemListPtr *) &(type->attrUses),
- XML_SCHEMA_TYPE_RESTRICTION, NULL) == -1)
- return(NULL);
- /*
- * Parse attribute wildcard.
- */
- if (IS_SCHEMA(child, "anyAttribute")) {
- type->attributeWildcard = xmlSchemaParseAnyAttribute(ctxt, schema, child);
- child = child->next;
- }
- }
- if (child != NULL) {
- xmlSchemaPContentErr(ctxt,
- XML_SCHEMAP_S4S_ELEM_NOT_ALLOWED,
- NULL, node, child,
- NULL, "(annotation?, (simpleContent | complexContent | "
- "((group | all | choice | sequence)?, ((attribute | "
- "attributeGroup)*, anyAttribute?))))");
- }
- /*
- * REDEFINE: SPEC src-redefine (5)
- */
- if (topLevel && ctxt->isRedefine && (! hasRestrictionOrExtension)) {
- xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_SRC_REDEFINE,
- NULL, node, "This is a redefinition, thus the "
- "<complexType> must have a <restriction> or <extension> "
- "grand-child", NULL);
- }
- ctxt->ctxtType = ctxtType;
- return (type);
-}
-
-/************************************************************************
- * *
- * Validating using Schemas *
- * *
- ************************************************************************/
-
-/************************************************************************
- * *
- * Reading/Writing Schemas *
- * *
- ************************************************************************/
-
-#if 0 /* Will be enabled if it is clear what options are needed. */
-/**
- * xmlSchemaParserCtxtSetOptions:
- * @ctxt: a schema parser context
- * @options: a combination of xmlSchemaParserOption
- *
- * Sets the options to be used during the parse.
- *
- * Returns 0 in case of success, -1 in case of an
- * API error.
- */
-static int
-xmlSchemaParserCtxtSetOptions(xmlSchemaParserCtxtPtr ctxt,
- int options)
-
-{
- int i;
-
- if (ctxt == NULL)
- return (-1);
- /*
- * WARNING: Change the start value if adding to the
- * xmlSchemaParseOption.
- */
- for (i = 1; i < (int) sizeof(int) * 8; i++) {
- if (options & 1<<i) {
- return (-1);
- }
- }
- ctxt->options = options;
- return (0);
-}
-
-/**
- * xmlSchemaValidCtxtGetOptions:
- * @ctxt: a schema parser context
- *
- * Returns the option combination of the parser context.
- */
-static int
-xmlSchemaParserCtxtGetOptions(xmlSchemaParserCtxtPtr ctxt)
-
-{
- if (ctxt == NULL)
- return (-1);
- else
- return (ctxt->options);
-}
-#endif
-
-/**
- * xmlSchemaNewParserCtxt:
- * @URL: the location of the schema
- *
- * Create an XML Schemas parse context for that file/resource expected
- * to contain an XML Schemas file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchemaParserCtxtPtr
-xmlSchemaNewParserCtxt(const char *URL)
-{
- xmlSchemaParserCtxtPtr ret;
-
- if (URL == NULL)
- return (NULL);
-
- ret = xmlSchemaParserCtxtCreate();
- if (ret == NULL)
- return(NULL);
- ret->dict = xmlDictCreate();
- ret->URL = xmlDictLookup(ret->dict, (const xmlChar *) URL, -1);
- return (ret);
-}
-
-/**
- * xmlSchemaNewMemParserCtxt:
- * @buffer: a pointer to a char array containing the schemas
- * @size: the size of the array
- *
- * Create an XML Schemas parse context for that memory buffer expected
- * to contain an XML Schemas file.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchemaParserCtxtPtr
-xmlSchemaNewMemParserCtxt(const char *buffer, int size)
-{
- xmlSchemaParserCtxtPtr ret;
-
- if ((buffer == NULL) || (size <= 0))
- return (NULL);
- ret = xmlSchemaParserCtxtCreate();
- if (ret == NULL)
- return(NULL);
- ret->buffer = buffer;
- ret->size = size;
- ret->dict = xmlDictCreate();
- return (ret);
-}
-
-/**
- * xmlSchemaNewDocParserCtxt:
- * @doc: a preparsed document tree
- *
- * Create an XML Schemas parse context for that document.
- * NB. The document may be modified during the parsing process.
- *
- * Returns the parser context or NULL in case of error
- */
-xmlSchemaParserCtxtPtr
-xmlSchemaNewDocParserCtxt(xmlDocPtr doc)
-{
- xmlSchemaParserCtxtPtr ret;
-
- if (doc == NULL)
- return (NULL);
- ret = xmlSchemaParserCtxtCreate();
- if (ret == NULL)
- return(NULL);
- ret->doc = doc;
- ret->dict = xmlDictCreate();
- /* The application has responsibility for the document */
- ret->preserve = 1;
-
- return (ret);
-}
-
-/**
- * xmlSchemaFreeParserCtxt:
- * @ctxt: the schema parser context
- *
- * Free the resources associated to the schema parser context
- */
-void
-xmlSchemaFreeParserCtxt(xmlSchemaParserCtxtPtr ctxt)
-{
- if (ctxt == NULL)
- return;
- if (ctxt->doc != NULL && !ctxt->preserve)
- xmlFreeDoc(ctxt->doc);
- if (ctxt->vctxt != NULL) {
- xmlSchemaFreeValidCtxt(ctxt->vctxt);
- }
- if (ctxt->ownsConstructor && (ctxt->constructor != NULL)) {
- xmlSchemaConstructionCtxtFree(ctxt->constructor);
- ctxt->constructor = NULL;
- ctxt->ownsConstructor = 0;
- }
- if (ctxt->attrProhibs != NULL)
- xmlSchemaItemListFree(ctxt->attrProhibs);
- xmlDictFree(ctxt->dict);
- xmlFree(ctxt);
-}
-
-/************************************************************************
- * *
- * Building the content models *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaBuildContentModelForSubstGroup:
- *
- * Returns 1 if nillable, 0 otherwise
- */
-static int
-xmlSchemaBuildContentModelForSubstGroup(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaParticlePtr particle, int counter, xmlAutomataStatePtr end)
-{
- xmlAutomataStatePtr start, tmp;
- xmlSchemaElementPtr elemDecl, member;
- xmlSchemaSubstGroupPtr substGroup;
- int i;
- int ret = 0;
-
- elemDecl = (xmlSchemaElementPtr) particle->children;
- /*
- * Wrap the substitution group with a CHOICE.
- */
- start = pctxt->state;
- if (end == NULL)
- end = xmlAutomataNewState(pctxt->am);
- substGroup = xmlSchemaSubstGroupGet(pctxt, elemDecl);
- if (substGroup == NULL) {
- xmlSchemaPErr(pctxt, WXS_ITEM_NODE(particle),
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaBuildContentModelForSubstGroup, "
- "declaration is marked having a subst. group but none "
- "available.\n", elemDecl->name, NULL);
- return(0);
- }
- if (counter >= 0) {
- /*
- * NOTE that we put the declaration in, even if it's abstract.
- * However, an error will be raised during *validation* if an element
- * information item shall be validated against an abstract element
- * declaration.
- */
- tmp = xmlAutomataNewCountedTrans(pctxt->am, start, NULL, counter);
- xmlAutomataNewTransition2(pctxt->am, tmp, end,
- elemDecl->name, elemDecl->targetNamespace, elemDecl);
- /*
- * Add subst. group members.
- */
- for (i = 0; i < substGroup->members->nbItems; i++) {
- member = (xmlSchemaElementPtr) substGroup->members->items[i];
- xmlAutomataNewTransition2(pctxt->am, tmp, end,
- member->name, member->targetNamespace, member);
- }
- } else if (particle->maxOccurs == 1) {
- /*
- * NOTE that we put the declaration in, even if it's abstract,
- */
- xmlAutomataNewEpsilon(pctxt->am,
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL,
- elemDecl->name, elemDecl->targetNamespace, elemDecl), end);
- /*
- * Add subst. group members.
- */
- for (i = 0; i < substGroup->members->nbItems; i++) {
- member = (xmlSchemaElementPtr) substGroup->members->items[i];
- /*
- * NOTE: This fixes bug #341150. xmlAutomataNewOnceTrans2()
- * was incorrectly used instead of xmlAutomataNewTransition2()
- * (seems like a copy&paste bug from the XML_SCHEMA_TYPE_ALL
- * section in xmlSchemaBuildAContentModel() ).
- * TODO: Check if xmlAutomataNewOnceTrans2() was instead
- * intended for the above "counter" section originally. I.e.,
- * check xs:all with subst-groups.
- *
- * tmp = xmlAutomataNewOnceTrans2(pctxt->am, start, NULL,
- * member->name, member->targetNamespace,
- * 1, 1, member);
- */
- tmp = xmlAutomataNewTransition2(pctxt->am, start, NULL,
- member->name, member->targetNamespace, member);
- xmlAutomataNewEpsilon(pctxt->am, tmp, end);
- }
- } else {
- xmlAutomataStatePtr hop;
- int maxOccurs = particle->maxOccurs == UNBOUNDED ?
- UNBOUNDED : particle->maxOccurs - 1;
- int minOccurs = particle->minOccurs < 1 ? 0 : particle->minOccurs - 1;
-
- counter =
- xmlAutomataNewCounter(pctxt->am, minOccurs,
- maxOccurs);
- hop = xmlAutomataNewState(pctxt->am);
-
- xmlAutomataNewEpsilon(pctxt->am,
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL,
- elemDecl->name, elemDecl->targetNamespace, elemDecl),
- hop);
- /*
- * Add subst. group members.
- */
- for (i = 0; i < substGroup->members->nbItems; i++) {
- member = (xmlSchemaElementPtr) substGroup->members->items[i];
- xmlAutomataNewEpsilon(pctxt->am,
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL,
- member->name, member->targetNamespace, member),
- hop);
- }
- xmlAutomataNewCountedTrans(pctxt->am, hop, start, counter);
- xmlAutomataNewCounterTrans(pctxt->am, hop, end, counter);
- }
- if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(pctxt->am, start, end);
- ret = 1;
- }
- pctxt->state = end;
- return(ret);
-}
-
-/**
- * xmlSchemaBuildContentModelForElement:
- *
- * Returns 1 if nillable, 0 otherwise
- */
-static int
-xmlSchemaBuildContentModelForElement(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr particle)
-{
- int ret = 0;
-
- if (((xmlSchemaElementPtr) particle->children)->flags &
- XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD) {
- /*
- * Substitution groups.
- */
- ret = xmlSchemaBuildContentModelForSubstGroup(ctxt, particle, -1, NULL);
- } else {
- xmlSchemaElementPtr elemDecl;
- xmlAutomataStatePtr start;
-
- elemDecl = (xmlSchemaElementPtr) particle->children;
-
- if (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT)
- return(0);
- if (particle->maxOccurs == 1) {
- start = ctxt->state;
- ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
- elemDecl->name, elemDecl->targetNamespace, elemDecl);
- } else if ((particle->maxOccurs >= UNBOUNDED) &&
- (particle->minOccurs < 2)) {
- /* Special case. */
- start = ctxt->state;
- ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
- elemDecl->name, elemDecl->targetNamespace, elemDecl);
- ctxt->state = xmlAutomataNewTransition2(ctxt->am, ctxt->state, ctxt->state,
- elemDecl->name, elemDecl->targetNamespace, elemDecl);
- } else {
- int counter;
- int maxOccurs = particle->maxOccurs == UNBOUNDED ?
- UNBOUNDED : particle->maxOccurs - 1;
- int minOccurs = particle->minOccurs < 1 ?
- 0 : particle->minOccurs - 1;
-
- start = xmlAutomataNewEpsilon(ctxt->am, ctxt->state, NULL);
- counter = xmlAutomataNewCounter(ctxt->am, minOccurs, maxOccurs);
- ctxt->state = xmlAutomataNewTransition2(ctxt->am, start, NULL,
- elemDecl->name, elemDecl->targetNamespace, elemDecl);
- xmlAutomataNewCountedTrans(ctxt->am, ctxt->state, start, counter);
- ctxt->state = xmlAutomataNewCounterTrans(ctxt->am, ctxt->state,
- NULL, counter);
- }
- if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(ctxt->am, start, ctxt->state);
- ret = 1;
- }
- }
- return(ret);
-}
-
-/**
- * xmlSchemaBuildAContentModel:
- * @ctxt: the schema parser context
- * @particle: the particle component
- * @name: the complex type's name whose content is being built
- *
- * Create the automaton for the {content type} of a complex type.
- *
- * Returns 1 if the content is nillable, 0 otherwise
- */
-static int
-xmlSchemaBuildAContentModel(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaParticlePtr particle)
-{
- int ret = 0, tmp2;
-
- if (particle == NULL) {
- PERROR_INT("xmlSchemaBuildAContentModel", "particle is NULL");
- return(1);
- }
- if (particle->children == NULL) {
- /*
- * Just return in this case. A missing "term" of the particle
- * might arise due to an invalid "term" component.
- */
- return(1);
- }
-
- switch (particle->children->type) {
- case XML_SCHEMA_TYPE_ANY: {
- xmlAutomataStatePtr start, end;
- xmlSchemaWildcardPtr wild;
- xmlSchemaWildcardNsPtr ns;
-
- wild = (xmlSchemaWildcardPtr) particle->children;
-
- start = pctxt->state;
- end = xmlAutomataNewState(pctxt->am);
-
- if (particle->maxOccurs == 1) {
- if (wild->any == 1) {
- /*
- * We need to add both transitions:
- *
- * 1. the {"*", "*"} for elements in a namespace.
- */
- pctxt->state =
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
- /*
- * 2. the {"*"} for elements in no namespace.
- */
- pctxt->state =
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL, BAD_CAST "*", NULL, wild);
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
-
- } else if (wild->nsSet != NULL) {
- ns = wild->nsSet;
- do {
- pctxt->state = start;
- pctxt->state = xmlAutomataNewTransition2(pctxt->am,
- pctxt->state, NULL, BAD_CAST "*", ns->value, wild);
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
- ns = ns->next;
- } while (ns != NULL);
-
- } else if (wild->negNsSet != NULL) {
- pctxt->state = xmlAutomataNewNegTrans(pctxt->am,
- start, end, BAD_CAST "*", wild->negNsSet->value,
- wild);
- }
- } else {
- int counter;
- xmlAutomataStatePtr hop;
- int maxOccurs =
- particle->maxOccurs == UNBOUNDED ? UNBOUNDED :
- particle->maxOccurs - 1;
- int minOccurs =
- particle->minOccurs < 1 ? 0 : particle->minOccurs - 1;
-
- counter = xmlAutomataNewCounter(pctxt->am, minOccurs, maxOccurs);
- hop = xmlAutomataNewState(pctxt->am);
- if (wild->any == 1) {
- pctxt->state =
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL, BAD_CAST "*", BAD_CAST "*", wild);
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
- pctxt->state =
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL, BAD_CAST "*", NULL, wild);
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
- } else if (wild->nsSet != NULL) {
- ns = wild->nsSet;
- do {
- pctxt->state =
- xmlAutomataNewTransition2(pctxt->am,
- start, NULL, BAD_CAST "*", ns->value, wild);
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
- ns = ns->next;
- } while (ns != NULL);
-
- } else if (wild->negNsSet != NULL) {
- pctxt->state = xmlAutomataNewNegTrans(pctxt->am,
- start, hop, BAD_CAST "*", wild->negNsSet->value,
- wild);
- }
- xmlAutomataNewCountedTrans(pctxt->am, hop, start, counter);
- xmlAutomataNewCounterTrans(pctxt->am, hop, end, counter);
- }
- if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(pctxt->am, start, end);
- ret = 1;
- }
- pctxt->state = end;
- break;
- }
- case XML_SCHEMA_TYPE_ELEMENT:
- ret = xmlSchemaBuildContentModelForElement(pctxt, particle);
- break;
- case XML_SCHEMA_TYPE_SEQUENCE:{
- xmlSchemaTreeItemPtr sub;
-
- ret = 1;
- /*
- * If max and min occurances are default (1) then
- * simply iterate over the particles of the <sequence>.
- */
- if ((particle->minOccurs == 1) && (particle->maxOccurs == 1)) {
- sub = particle->children->children;
-
- while (sub != NULL) {
- tmp2 = xmlSchemaBuildAContentModel(pctxt,
- (xmlSchemaParticlePtr) sub);
- if (tmp2 != 1) ret = 0;
- sub = sub->next;
- }
- } else {
- xmlAutomataStatePtr oldstate = pctxt->state;
-
- if (particle->maxOccurs >= UNBOUNDED) {
- if (particle->minOccurs > 1) {
- xmlAutomataStatePtr tmp;
- int counter;
-
- pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
- oldstate, NULL);
- oldstate = pctxt->state;
-
- counter = xmlAutomataNewCounter(pctxt->am,
- particle->minOccurs - 1, UNBOUNDED);
-
- sub = particle->children->children;
- while (sub != NULL) {
- tmp2 = xmlSchemaBuildAContentModel(pctxt,
- (xmlSchemaParticlePtr) sub);
- if (tmp2 != 1) ret = 0;
- sub = sub->next;
- }
- tmp = pctxt->state;
- xmlAutomataNewCountedTrans(pctxt->am, tmp,
- oldstate, counter);
- pctxt->state =
- xmlAutomataNewCounterTrans(pctxt->am, tmp,
- NULL, counter);
- if (ret == 1)
- xmlAutomataNewEpsilon(pctxt->am,
- oldstate, pctxt->state);
-
- } else {
- pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
- oldstate, NULL);
- oldstate = pctxt->state;
-
- sub = particle->children->children;
- while (sub != NULL) {
- tmp2 = xmlSchemaBuildAContentModel(pctxt,
- (xmlSchemaParticlePtr) sub);
- if (tmp2 != 1) ret = 0;
- sub = sub->next;
- }
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state,
- oldstate);
- /*
- * epsilon needed to block previous trans from
- * being allowed to enter back from another
- * construct
- */
- pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
- pctxt->state, NULL);
- if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(pctxt->am,
- oldstate, pctxt->state);
- ret = 1;
- }
- }
- } else if ((particle->maxOccurs > 1)
- || (particle->minOccurs > 1)) {
- xmlAutomataStatePtr tmp;
- int counter;
-
- pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
- oldstate, NULL);
- oldstate = pctxt->state;
-
- counter = xmlAutomataNewCounter(pctxt->am,
- particle->minOccurs - 1,
- particle->maxOccurs - 1);
-
- sub = particle->children->children;
- while (sub != NULL) {
- tmp2 = xmlSchemaBuildAContentModel(pctxt,
- (xmlSchemaParticlePtr) sub);
- if (tmp2 != 1) ret = 0;
- sub = sub->next;
- }
- tmp = pctxt->state;
- xmlAutomataNewCountedTrans(pctxt->am,
- tmp, oldstate, counter);
- pctxt->state =
- xmlAutomataNewCounterTrans(pctxt->am, tmp, NULL,
- counter);
- if ((particle->minOccurs == 0) || (ret == 1)) {
- xmlAutomataNewEpsilon(pctxt->am,
- oldstate, pctxt->state);
- ret = 1;
- }
- } else {
- sub = particle->children->children;
- while (sub != NULL) {
- tmp2 = xmlSchemaBuildAContentModel(pctxt,
- (xmlSchemaParticlePtr) sub);
- if (tmp2 != 1) ret = 0;
- sub = sub->next;
- }
-
- /*
- * epsilon needed to block previous trans from
- * being allowed to enter back from another
- * construct
- */
- pctxt->state = xmlAutomataNewEpsilon(pctxt->am,
- pctxt->state, NULL);
-
- if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(pctxt->am, oldstate,
- pctxt->state);
- ret = 1;
- }
- }
- }
- break;
- }
- case XML_SCHEMA_TYPE_CHOICE:{
- xmlSchemaTreeItemPtr sub;
- xmlAutomataStatePtr start, end;
-
- ret = 0;
- start = pctxt->state;
- end = xmlAutomataNewState(pctxt->am);
-
- /*
- * iterate over the subtypes and remerge the end with an
- * epsilon transition
- */
- if (particle->maxOccurs == 1) {
- sub = particle->children->children;
- while (sub != NULL) {
- pctxt->state = start;
- tmp2 = xmlSchemaBuildAContentModel(pctxt,
- (xmlSchemaParticlePtr) sub);
- if (tmp2 == 1) ret = 1;
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, end);
- sub = sub->next;
- }
- } else {
- int counter;
- xmlAutomataStatePtr hop, base;
- int maxOccurs = particle->maxOccurs == UNBOUNDED ?
- UNBOUNDED : particle->maxOccurs - 1;
- int minOccurs =
- particle->minOccurs < 1 ? 0 : particle->minOccurs - 1;
-
- /*
- * use a counter to keep track of the number of transtions
- * which went through the choice.
- */
- counter =
- xmlAutomataNewCounter(pctxt->am, minOccurs, maxOccurs);
- hop = xmlAutomataNewState(pctxt->am);
- base = xmlAutomataNewState(pctxt->am);
-
- sub = particle->children->children;
- while (sub != NULL) {
- pctxt->state = base;
- tmp2 = xmlSchemaBuildAContentModel(pctxt,
- (xmlSchemaParticlePtr) sub);
- if (tmp2 == 1) ret = 1;
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, hop);
- sub = sub->next;
- }
- xmlAutomataNewEpsilon(pctxt->am, start, base);
- xmlAutomataNewCountedTrans(pctxt->am, hop, base, counter);
- xmlAutomataNewCounterTrans(pctxt->am, hop, end, counter);
- if (ret == 1)
- xmlAutomataNewEpsilon(pctxt->am, base, end);
- }
- if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(pctxt->am, start, end);
- ret = 1;
- }
- pctxt->state = end;
- break;
- }
- case XML_SCHEMA_TYPE_ALL:{
- xmlAutomataStatePtr start, tmp;
- xmlSchemaParticlePtr sub;
- xmlSchemaElementPtr elemDecl;
-
- ret = 1;
-
- sub = (xmlSchemaParticlePtr) particle->children->children;
- if (sub == NULL)
- break;
-
- ret = 0;
-
- start = pctxt->state;
- tmp = xmlAutomataNewState(pctxt->am);
- xmlAutomataNewEpsilon(pctxt->am, pctxt->state, tmp);
- pctxt->state = tmp;
- while (sub != NULL) {
- pctxt->state = tmp;
-
- elemDecl = (xmlSchemaElementPtr) sub->children;
- if (elemDecl == NULL) {
- PERROR_INT("xmlSchemaBuildAContentModel",
- "<element> particle has no term");
- return(ret);
- };
- /*
- * NOTE: The {max occurs} of all the particles in the
- * {particles} of the group must be 0 or 1; this is
- * already ensured during the parse of the content of
- * <all>.
- */
- if (elemDecl->flags & XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD) {
- int counter;
-
- /*
- * This is an abstract group, we need to share
- * the same counter for all the element transitions
- * derived from the group
- */
- counter = xmlAutomataNewCounter(pctxt->am,
- sub->minOccurs, sub->maxOccurs);
- xmlSchemaBuildContentModelForSubstGroup(pctxt,
- sub, counter, pctxt->state);
- } else {
- if ((sub->minOccurs == 1) &&
- (sub->maxOccurs == 1)) {
- xmlAutomataNewOnceTrans2(pctxt->am, pctxt->state,
- pctxt->state,
- elemDecl->name,
- elemDecl->targetNamespace,
- 1, 1, elemDecl);
- } else if ((sub->minOccurs == 0) &&
- (sub->maxOccurs == 1)) {
-
- xmlAutomataNewCountTrans2(pctxt->am, pctxt->state,
- pctxt->state,
- elemDecl->name,
- elemDecl->targetNamespace,
- 0,
- 1,
- elemDecl);
- }
- }
- sub = (xmlSchemaParticlePtr) sub->next;
- }
- pctxt->state =
- xmlAutomataNewAllTrans(pctxt->am, pctxt->state, NULL, 0);
- if (particle->minOccurs == 0) {
- xmlAutomataNewEpsilon(pctxt->am, start, pctxt->state);
- ret = 1;
- }
- break;
- }
- case XML_SCHEMA_TYPE_GROUP:
- /*
- * If we hit a model group definition, then this means that
- * it was empty, thus was not substituted for the containing
- * model group. Just do nothing in this case.
- * TODO: But the group should be substituted and not occur at
- * all in the content model at this point. Fix this.
- */
- ret = 1;
- break;
- default:
- xmlSchemaInternalErr2(ACTXT_CAST pctxt,
- "xmlSchemaBuildAContentModel",
- "found unexpected term of type '%s' in content model",
- WXS_ITEM_TYPE_NAME(particle->children), NULL);
- return(ret);
- }
- return(ret);
-}
-
-/**
- * xmlSchemaBuildContentModel:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- * @name: the element name
- *
- * Builds the content model of the complex type.
- */
-static void
-xmlSchemaBuildContentModel(xmlSchemaTypePtr type,
- xmlSchemaParserCtxtPtr ctxt)
-{
- if ((type->type != XML_SCHEMA_TYPE_COMPLEX) ||
- (type->contModel != NULL) ||
- ((type->contentType != XML_SCHEMA_CONTENT_ELEMENTS) &&
- (type->contentType != XML_SCHEMA_CONTENT_MIXED)))
- return;
-
-#ifdef DEBUG_CONTENT
- xmlGenericError(xmlGenericErrorContext,
- "Building content model for %s\n", name);
-#endif
- ctxt->am = NULL;
- ctxt->am = xmlNewAutomata();
- if (ctxt->am == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Cannot create automata for complex type %s\n", type->name);
- return;
- }
- ctxt->state = xmlAutomataGetInitState(ctxt->am);
- /*
- * Build the automaton.
- */
- xmlSchemaBuildAContentModel(ctxt, WXS_TYPE_PARTICLE(type));
- xmlAutomataSetFinalState(ctxt->am, ctxt->state);
- type->contModel = xmlAutomataCompile(ctxt->am);
- if (type->contModel == NULL) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_INTERNAL,
- WXS_BASIC_CAST type, type->node,
- "Failed to compile the content model", NULL);
- } else if (xmlRegexpIsDeterminist(type->contModel) != 1) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_NOT_DETERMINISTIC,
- /* XML_SCHEMAS_ERR_NOTDETERMINIST, */
- WXS_BASIC_CAST type, type->node,
- "The content model is not determinist", NULL);
- } else {
-#ifdef DEBUG_CONTENT_REGEXP
- xmlGenericError(xmlGenericErrorContext,
- "Content model of %s:\n", type->name);
- xmlRegexpPrint(stderr, type->contModel);
-#endif
- }
- ctxt->state = NULL;
- xmlFreeAutomata(ctxt->am);
- ctxt->am = NULL;
-}
-
-/**
- * xmlSchemaResolveElementReferences:
- * @elem: the schema element context
- * @ctxt: the schema parser context
- *
- * Resolves the references of an element declaration
- * or particle, which has an element declaration as it's
- * term.
- */
-static void
-xmlSchemaResolveElementReferences(xmlSchemaElementPtr elemDecl,
- xmlSchemaParserCtxtPtr ctxt)
-{
- if ((ctxt == NULL) || (elemDecl == NULL) ||
- ((elemDecl != NULL) &&
- (elemDecl->flags & XML_SCHEMAS_ELEM_INTERNAL_RESOLVED)))
- return;
- elemDecl->flags |= XML_SCHEMAS_ELEM_INTERNAL_RESOLVED;
-
- if ((elemDecl->subtypes == NULL) && (elemDecl->namedType != NULL)) {
- xmlSchemaTypePtr type;
-
- /* (type definition) ... otherwise the type definition `resolved`
- * to by the `actual value` of the type [attribute] ...
- */
- type = xmlSchemaGetType(ctxt->schema, elemDecl->namedType,
- elemDecl->namedTypeNs);
- if (type == NULL) {
- xmlSchemaPResCompAttrErr(ctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- WXS_BASIC_CAST elemDecl, elemDecl->node,
- "type", elemDecl->namedType, elemDecl->namedTypeNs,
- XML_SCHEMA_TYPE_BASIC, "type definition");
- } else
- elemDecl->subtypes = type;
- }
- if (elemDecl->substGroup != NULL) {
- xmlSchemaElementPtr substHead;
-
- /*
- * FIXME TODO: Do we need a new field in _xmlSchemaElement for
- * substitutionGroup?
- */
- substHead = xmlSchemaGetElem(ctxt->schema, elemDecl->substGroup,
- elemDecl->substGroupNs);
- if (substHead == NULL) {
- xmlSchemaPResCompAttrErr(ctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- WXS_BASIC_CAST elemDecl, NULL,
- "substitutionGroup", elemDecl->substGroup,
- elemDecl->substGroupNs, XML_SCHEMA_TYPE_ELEMENT, NULL);
- } else {
- xmlSchemaResolveElementReferences(substHead, ctxt);
- /*
- * Set the "substitution group affiliation".
- * NOTE that now we use the "refDecl" field for this.
- */
- WXS_SUBST_HEAD(elemDecl) = substHead;
- /*
- * The type definitions is set to:
- * SPEC "...the {type definition} of the element
- * declaration `resolved` to by the `actual value`
- * of the substitutionGroup [attribute], if present"
- */
- if (elemDecl->subtypes == NULL)
- elemDecl->subtypes = substHead->subtypes;
- }
- }
- /*
- * SPEC "The definition of anyType serves as the default type definition
- * for element declarations whose XML representation does not specify one."
- */
- if ((elemDecl->subtypes == NULL) &&
- (elemDecl->namedType == NULL) &&
- (elemDecl->substGroup == NULL))
- elemDecl->subtypes = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
-}
-
-/**
- * xmlSchemaResolveUnionMemberTypes:
- * @ctxt: the schema parser context
- * @type: the schema simple type definition
- *
- * Checks and builds the "member type definitions" property of the union
- * simple type. This handles part (1), part (2) is done in
- * xmlSchemaFinishMemberTypeDefinitionsProperty()
- *
- * Returns -1 in case of an internal error, 0 otherwise.
- */
-static int
-xmlSchemaResolveUnionMemberTypes(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaTypePtr type)
-{
-
- xmlSchemaTypeLinkPtr link, lastLink, newLink;
- xmlSchemaTypePtr memberType;
-
- /*
- * SPEC (1) "If the <union> alternative is chosen, then [Definition:]
- * define the explicit members as the type definitions `resolved`
- * to by the items in the `actual value` of the memberTypes [attribute],
- * if any, followed by the type definitions corresponding to the
- * <simpleType>s among the [children] of <union>, if any."
- */
- /*
- * Resolve references.
- */
- link = type->memberTypes;
- lastLink = NULL;
- while (link != NULL) {
- const xmlChar *name, *nsName;
-
- name = ((xmlSchemaQNameRefPtr) link->type)->name;
- nsName = ((xmlSchemaQNameRefPtr) link->type)->targetNamespace;
-
- memberType = xmlSchemaGetType(ctxt->schema, name, nsName);
- if ((memberType == NULL) || (! WXS_IS_SIMPLE(memberType))) {
- xmlSchemaPResCompAttrErr(ctxt, XML_SCHEMAP_SRC_RESOLVE,
- WXS_BASIC_CAST type, type->node, "memberTypes",
- name, nsName, XML_SCHEMA_TYPE_SIMPLE, NULL);
- /*
- * Remove the member type link.
- */
- if (lastLink == NULL)
- type->memberTypes = link->next;
- else
- lastLink->next = link->next;
- newLink = link;
- link = link->next;
- xmlFree(newLink);
- } else {
- link->type = memberType;
- lastLink = link;
- link = link->next;
- }
- }
- /*
- * Add local simple types,
- */
- memberType = type->subtypes;
- while (memberType != NULL) {
- link = (xmlSchemaTypeLinkPtr) xmlMalloc(sizeof(xmlSchemaTypeLink));
- if (link == NULL) {
- xmlSchemaPErrMemory(ctxt, "allocating a type link", NULL);
- return (-1);
- }
- link->type = memberType;
- link->next = NULL;
- if (lastLink == NULL)
- type->memberTypes = link;
- else
- lastLink->next = link;
- lastLink = link;
- memberType = memberType->next;
- }
- return (0);
-}
-
-/**
- * xmlSchemaIsDerivedFromBuiltInType:
- * @ctxt: the schema parser context
- * @type: the type definition
- * @valType: the value type
- *
- *
- * Returns 1 if the type has the given value type, or
- * is derived from such a type.
- */
-static int
-xmlSchemaIsDerivedFromBuiltInType(xmlSchemaTypePtr type, int valType)
-{
- if (type == NULL)
- return (0);
- if (WXS_IS_COMPLEX(type))
- return (0);
- if (type->type == XML_SCHEMA_TYPE_BASIC) {
- if (type->builtInType == valType)
- return(1);
- if ((type->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) ||
- (type->builtInType == XML_SCHEMAS_ANYTYPE))
- return (0);
- return(xmlSchemaIsDerivedFromBuiltInType(type->subtypes, valType));
- }
- return(xmlSchemaIsDerivedFromBuiltInType(type->subtypes, valType));
-}
-
-#if 0
-/**
- * xmlSchemaIsDerivedFromBuiltInType:
- * @ctxt: the schema parser context
- * @type: the type definition
- * @valType: the value type
- *
- *
- * Returns 1 if the type has the given value type, or
- * is derived from such a type.
- */
-static int
-xmlSchemaIsUserDerivedFromBuiltInType(xmlSchemaTypePtr type, int valType)
-{
- if (type == NULL)
- return (0);
- if (WXS_IS_COMPLEX(type))
- return (0);
- if (type->type == XML_SCHEMA_TYPE_BASIC) {
- if (type->builtInType == valType)
- return(1);
- return (0);
- } else
- return(xmlSchemaIsDerivedFromBuiltInType(type->subtypes, valType));
-
- return (0);
-}
-
-static xmlSchemaTypePtr
-xmlSchemaQueryBuiltInType(xmlSchemaTypePtr type)
-{
- if (type == NULL)
- return (NULL);
- if (WXS_IS_COMPLEX(type))
- return (NULL);
- if (type->type == XML_SCHEMA_TYPE_BASIC)
- return(type);
- return(xmlSchemaQueryBuiltInType(type->subtypes));
-}
-#endif
-
-/**
- * xmlSchemaGetPrimitiveType:
- * @type: the simpleType definition
- *
- * Returns the primitive type of the given type or
- * NULL in case of error.
- */
-static xmlSchemaTypePtr
-xmlSchemaGetPrimitiveType(xmlSchemaTypePtr type)
-{
-
- while (type != NULL) {
- /*
- * Note that anySimpleType is actually not a primitive type
- * but we need that here.
- */
- if ((type->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) ||
- (type->flags & XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE))
- return (type);
- type = type->baseType;
- }
-
- return (NULL);
-}
-
-#if 0
-/**
- * xmlSchemaGetBuiltInTypeAncestor:
- * @type: the simpleType definition
- *
- * Returns the primitive type of the given type or
- * NULL in case of error.
- */
-static xmlSchemaTypePtr
-xmlSchemaGetBuiltInTypeAncestor(xmlSchemaTypePtr type)
-{
- if (WXS_IS_LIST(type) || WXS_IS_UNION(type))
- return (0);
- while (type != NULL) {
- if (type->type == XML_SCHEMA_TYPE_BASIC)
- return (type);
- type = type->baseType;
- }
-
- return (NULL);
-}
-#endif
-
-/**
- * xmlSchemaCloneWildcardNsConstraints:
- * @ctxt: the schema parser context
- * @dest: the destination wildcard
- * @source: the source wildcard
- *
- * Clones the namespace constraints of source
- * and assignes them to dest.
- * Returns -1 on internal error, 0 otherwise.
- */
-static int
-xmlSchemaCloneWildcardNsConstraints(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaWildcardPtr dest,
- xmlSchemaWildcardPtr source)
-{
- xmlSchemaWildcardNsPtr cur, tmp, last;
-
- if ((source == NULL) || (dest == NULL))
- return(-1);
- dest->any = source->any;
- cur = source->nsSet;
- last = NULL;
- while (cur != NULL) {
- tmp = xmlSchemaNewWildcardNsConstraint(ctxt);
- if (tmp == NULL)
- return(-1);
- tmp->value = cur->value;
- if (last == NULL)
- dest->nsSet = tmp;
- else
- last->next = tmp;
- last = tmp;
- cur = cur->next;
- }
- if (dest->negNsSet != NULL)
- xmlSchemaFreeWildcardNsSet(dest->negNsSet);
- if (source->negNsSet != NULL) {
- dest->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
- if (dest->negNsSet == NULL)
- return(-1);
- dest->negNsSet->value = source->negNsSet->value;
- } else
- dest->negNsSet = NULL;
- return(0);
-}
-
-/**
- * xmlSchemaUnionWildcards:
- * @ctxt: the schema parser context
- * @completeWild: the first wildcard
- * @curWild: the second wildcard
- *
- * Unions the namespace constraints of the given wildcards.
- * @completeWild will hold the resulting union.
- * Returns a positive error code on failure, -1 in case of an
- * internal error, 0 otherwise.
- */
-static int
-xmlSchemaUnionWildcards(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaWildcardPtr completeWild,
- xmlSchemaWildcardPtr curWild)
-{
- xmlSchemaWildcardNsPtr cur, curB, tmp;
-
- /*
- * 1 If O1 and O2 are the same value, then that value must be the
- * value.
- */
- if ((completeWild->any == curWild->any) &&
- ((completeWild->nsSet == NULL) == (curWild->nsSet == NULL)) &&
- ((completeWild->negNsSet == NULL) == (curWild->negNsSet == NULL))) {
-
- if ((completeWild->negNsSet == NULL) ||
- (completeWild->negNsSet->value == curWild->negNsSet->value)) {
-
- if (completeWild->nsSet != NULL) {
- int found = 0;
-
- /*
- * Check equality of sets.
- */
- cur = completeWild->nsSet;
- while (cur != NULL) {
- found = 0;
- curB = curWild->nsSet;
- while (curB != NULL) {
- if (cur->value == curB->value) {
- found = 1;
- break;
- }
- curB = curB->next;
- }
- if (!found)
- break;
- cur = cur->next;
- }
- if (found)
- return(0);
- } else
- return(0);
- }
- }
- /*
- * 2 If either O1 or O2 is any, then any must be the value
- */
- if (completeWild->any != curWild->any) {
- if (completeWild->any == 0) {
- completeWild->any = 1;
- if (completeWild->nsSet != NULL) {
- xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
- completeWild->nsSet = NULL;
- }
- if (completeWild->negNsSet != NULL) {
- xmlFree(completeWild->negNsSet);
- completeWild->negNsSet = NULL;
- }
- }
- return (0);
- }
- /*
- * 3 If both O1 and O2 are sets of (namespace names or `absent`),
- * then the union of those sets must be the value.
- */
- if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) {
- int found;
- xmlSchemaWildcardNsPtr start;
-
- cur = curWild->nsSet;
- start = completeWild->nsSet;
- while (cur != NULL) {
- found = 0;
- curB = start;
- while (curB != NULL) {
- if (cur->value == curB->value) {
- found = 1;
- break;
- }
- curB = curB->next;
- }
- if (!found) {
- tmp = xmlSchemaNewWildcardNsConstraint(ctxt);
- if (tmp == NULL)
- return (-1);
- tmp->value = cur->value;
- tmp->next = completeWild->nsSet;
- completeWild->nsSet = tmp;
- }
- cur = cur->next;
- }
-
- return(0);
- }
- /*
- * 4 If the two are negations of different values (namespace names
- * or `absent`), then a pair of not and `absent` must be the value.
- */
- if ((completeWild->negNsSet != NULL) &&
- (curWild->negNsSet != NULL) &&
- (completeWild->negNsSet->value != curWild->negNsSet->value)) {
- completeWild->negNsSet->value = NULL;
-
- return(0);
- }
- /*
- * 5.
- */
- if (((completeWild->negNsSet != NULL) &&
- (completeWild->negNsSet->value != NULL) &&
- (curWild->nsSet != NULL)) ||
- ((curWild->negNsSet != NULL) &&
- (curWild->negNsSet->value != NULL) &&
- (completeWild->nsSet != NULL))) {
-
- int nsFound, absentFound = 0;
-
- if (completeWild->nsSet != NULL) {
- cur = completeWild->nsSet;
- curB = curWild->negNsSet;
- } else {
- cur = curWild->nsSet;
- curB = completeWild->negNsSet;
- }
- nsFound = 0;
- while (cur != NULL) {
- if (cur->value == NULL)
- absentFound = 1;
- else if (cur->value == curB->value)
- nsFound = 1;
- if (nsFound && absentFound)
- break;
- cur = cur->next;
- }
-
- if (nsFound && absentFound) {
- /*
- * 5.1 If the set S includes both the negated namespace
- * name and `absent`, then any must be the value.
- */
- completeWild->any = 1;
- if (completeWild->nsSet != NULL) {
- xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
- completeWild->nsSet = NULL;
- }
- if (completeWild->negNsSet != NULL) {
- xmlFree(completeWild->negNsSet);
- completeWild->negNsSet = NULL;
- }
- } else if (nsFound && (!absentFound)) {
- /*
- * 5.2 If the set S includes the negated namespace name
- * but not `absent`, then a pair of not and `absent` must
- * be the value.
- */
- if (completeWild->nsSet != NULL) {
- xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
- completeWild->nsSet = NULL;
- }
- if (completeWild->negNsSet == NULL) {
- completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
- if (completeWild->negNsSet == NULL)
- return (-1);
- }
- completeWild->negNsSet->value = NULL;
- } else if ((!nsFound) && absentFound) {
- /*
- * 5.3 If the set S includes `absent` but not the negated
- * namespace name, then the union is not expressible.
- */
- xmlSchemaPErr(ctxt, completeWild->node,
- XML_SCHEMAP_UNION_NOT_EXPRESSIBLE,
- "The union of the wilcard is not expressible.\n",
- NULL, NULL);
- return(XML_SCHEMAP_UNION_NOT_EXPRESSIBLE);
- } else if ((!nsFound) && (!absentFound)) {
- /*
- * 5.4 If the set S does not include either the negated namespace
- * name or `absent`, then whichever of O1 or O2 is a pair of not
- * and a namespace name must be the value.
- */
- if (completeWild->negNsSet == NULL) {
- if (completeWild->nsSet != NULL) {
- xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
- completeWild->nsSet = NULL;
- }
- completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
- if (completeWild->negNsSet == NULL)
- return (-1);
- completeWild->negNsSet->value = curWild->negNsSet->value;
- }
- }
- return (0);
- }
- /*
- * 6.
- */
- if (((completeWild->negNsSet != NULL) &&
- (completeWild->negNsSet->value == NULL) &&
- (curWild->nsSet != NULL)) ||
- ((curWild->negNsSet != NULL) &&
- (curWild->negNsSet->value == NULL) &&
- (completeWild->nsSet != NULL))) {
-
- if (completeWild->nsSet != NULL) {
- cur = completeWild->nsSet;
- } else {
- cur = curWild->nsSet;
- }
- while (cur != NULL) {
- if (cur->value == NULL) {
- /*
- * 6.1 If the set S includes `absent`, then any must be the
- * value.
- */
- completeWild->any = 1;
- if (completeWild->nsSet != NULL) {
- xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
- completeWild->nsSet = NULL;
- }
- if (completeWild->negNsSet != NULL) {
- xmlFree(completeWild->negNsSet);
- completeWild->negNsSet = NULL;
- }
- return (0);
- }
- cur = cur->next;
- }
- if (completeWild->negNsSet == NULL) {
- /*
- * 6.2 If the set S does not include `absent`, then a pair of not
- * and `absent` must be the value.
- */
- if (completeWild->nsSet != NULL) {
- xmlSchemaFreeWildcardNsSet(completeWild->nsSet);
- completeWild->nsSet = NULL;
- }
- completeWild->negNsSet = xmlSchemaNewWildcardNsConstraint(ctxt);
- if (completeWild->negNsSet == NULL)
- return (-1);
- completeWild->negNsSet->value = NULL;
- }
- return (0);
- }
- return (0);
-
-}
-
-/**
- * xmlSchemaIntersectWildcards:
- * @ctxt: the schema parser context
- * @completeWild: the first wildcard
- * @curWild: the second wildcard
- *
- * Intersects the namespace constraints of the given wildcards.
- * @completeWild will hold the resulting intersection.
- * Returns a positive error code on failure, -1 in case of an
- * internal error, 0 otherwise.
- */
-static int
-xmlSchemaIntersectWildcards(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaWildcardPtr completeWild,
- xmlSchemaWildcardPtr curWild)
-{
- xmlSchemaWildcardNsPtr cur, curB, prev, tmp;
-
- /*
- * 1 If O1 and O2 are the same value, then that value must be the
- * value.
- */
- if ((completeWild->any == curWild->any) &&
- ((completeWild->nsSet == NULL) == (curWild->nsSet == NULL)) &&
- ((completeWild->negNsSet == NULL) == (curWild->negNsSet == NULL))) {
-
- if ((completeWild->negNsSet == NULL) ||
- (completeWild->negNsSet->value == curWild->negNsSet->value)) {
-
- if (completeWild->nsSet != NULL) {
- int found = 0;
-
- /*
- * Check equality of sets.
- */
- cur = completeWild->nsSet;
- while (cur != NULL) {
- found = 0;
- curB = curWild->nsSet;
- while (curB != NULL) {
- if (cur->value == curB->value) {
- found = 1;
- break;
- }
- curB = curB->next;
- }
- if (!found)
- break;
- cur = cur->next;
- }
- if (found)
- return(0);
- } else
- return(0);
- }
- }
- /*
- * 2 If either O1 or O2 is any, then the other must be the value.
- */
- if ((completeWild->any != curWild->any) && (completeWild->any)) {
- if (xmlSchemaCloneWildcardNsConstraints(ctxt, completeWild, curWild) == -1)
- return(-1);
- return(0);
- }
- /*
- * 3 If either O1 or O2 is a pair of not and a value (a namespace
- * name or `absent`) and the other is a set of (namespace names or
- * `absent`), then that set, minus the negated value if it was in
- * the set, minus `absent` if it was in the set, must be the value.
- */
- if (((completeWild->negNsSet != NULL) && (curWild->nsSet != NULL)) ||
- ((curWild->negNsSet != NULL) && (completeWild->nsSet != NULL))) {
- const xmlChar *neg;
-
- if (completeWild->nsSet == NULL) {
- neg = completeWild->negNsSet->value;
- if (xmlSchemaCloneWildcardNsConstraints(ctxt, completeWild, curWild) == -1)
- return(-1);
- } else
- neg = curWild->negNsSet->value;
- /*
- * Remove absent and negated.
- */
- prev = NULL;
- cur = completeWild->nsSet;
- while (cur != NULL) {
- if (cur->value == NULL) {
- if (prev == NULL)
- completeWild->nsSet = cur->next;
- else
- prev->next = cur->next;
- xmlFree(cur);
- break;
- }
- prev = cur;
- cur = cur->next;
- }
- if (neg != NULL) {
- prev = NULL;
- cur = completeWild->nsSet;
- while (cur != NULL) {
- if (cur->value == neg) {
- if (prev == NULL)
- completeWild->nsSet = cur->next;
- else
- prev->next = cur->next;
- xmlFree(cur);
- break;
- }
- prev = cur;
- cur = cur->next;
- }
- }
-
- return(0);
- }
- /*
- * 4 If both O1 and O2 are sets of (namespace names or `absent`),
- * then the intersection of those sets must be the value.
- */
- if ((completeWild->nsSet != NULL) && (curWild->nsSet != NULL)) {
- int found;
-
- cur = completeWild->nsSet;
- prev = NULL;
- while (cur != NULL) {
- found = 0;
- curB = curWild->nsSet;
- while (curB != NULL) {
- if (cur->value == curB->value) {
- found = 1;
- break;
- }
- curB = curB->next;
- }
- if (!found) {
- if (prev == NULL)
- completeWild->nsSet = cur->next;
- else
- prev->next = cur->next;
- tmp = cur->next;
- xmlFree(cur);
- cur = tmp;
- continue;
- }
- prev = cur;
- cur = cur->next;
- }
-
- return(0);
- }
- /* 5 If the two are negations of different namespace names,
- * then the intersection is not expressible
- */
- if ((completeWild->negNsSet != NULL) &&
- (curWild->negNsSet != NULL) &&
- (completeWild->negNsSet->value != curWild->negNsSet->value) &&
- (completeWild->negNsSet->value != NULL) &&
- (curWild->negNsSet->value != NULL)) {
-
- xmlSchemaPErr(ctxt, completeWild->node, XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE,
- "The intersection of the wilcard is not expressible.\n",
- NULL, NULL);
- return(XML_SCHEMAP_INTERSECTION_NOT_EXPRESSIBLE);
- }
- /*
- * 6 If the one is a negation of a namespace name and the other
- * is a negation of `absent`, then the one which is the negation
- * of a namespace name must be the value.
- */
- if ((completeWild->negNsSet != NULL) && (curWild->negNsSet != NULL) &&
- (completeWild->negNsSet->value != curWild->negNsSet->value) &&
- (completeWild->negNsSet->value == NULL)) {
- completeWild->negNsSet->value = curWild->negNsSet->value;
- }
- return(0);
-}
-
-/**
- * xmlSchemaIsWildcardNsConstraintSubset:
- * @ctxt: the schema parser context
- * @sub: the first wildcard
- * @super: the second wildcard
- *
- * Schema Component Constraint: Wildcard Subset (cos-ns-subset)
- *
- * Returns 0 if the namespace constraint of @sub is an intensional
- * subset of @super, 1 otherwise.
- */
-static int
-xmlSchemaCheckCOSNSSubset(xmlSchemaWildcardPtr sub,
- xmlSchemaWildcardPtr super)
-{
- /*
- * 1 super must be any.
- */
- if (super->any)
- return (0);
- /*
- * 2.1 sub must be a pair of not and a namespace name or `absent`.
- * 2.2 super must be a pair of not and the same value.
- */
- if ((sub->negNsSet != NULL) &&
- (super->negNsSet != NULL) &&
- (sub->negNsSet->value == super->negNsSet->value))
- return (0);
- /*
- * 3.1 sub must be a set whose members are either namespace names or `absent`.
- */
- if (sub->nsSet != NULL) {
- /*
- * 3.2.1 super must be the same set or a superset thereof.
- */
- if (super->nsSet != NULL) {
- xmlSchemaWildcardNsPtr cur, curB;
- int found = 0;
-
- cur = sub->nsSet;
- while (cur != NULL) {
- found = 0;
- curB = super->nsSet;
- while (curB != NULL) {
- if (cur->value == curB->value) {
- found = 1;
- break;
- }
- curB = curB->next;
- }
- if (!found)
- return (1);
- cur = cur->next;
- }
- if (found)
- return (0);
- } else if (super->negNsSet != NULL) {
- xmlSchemaWildcardNsPtr cur;
- /*
- * 3.2.2 super must be a pair of not and a namespace name or
- * `absent` and that value must not be in sub's set.
- */
- cur = sub->nsSet;
- while (cur != NULL) {
- if (cur->value == super->negNsSet->value)
- return (1);
- cur = cur->next;
- }
- return (0);
- }
- }
- return (1);
-}
-
-static int
-xmlSchemaGetEffectiveValueConstraint(xmlSchemaAttributeUsePtr attruse,
- int *fixed,
- const xmlChar **value,
- xmlSchemaValPtr *val)
-{
- *fixed = 0;
- *value = NULL;
- if (val != 0)
- *val = NULL;
-
- if (attruse->defValue != NULL) {
- *value = attruse->defValue;
- if (val != NULL)
- *val = attruse->defVal;
- if (attruse->flags & XML_SCHEMA_ATTR_USE_FIXED)
- *fixed = 1;
- return(1);
- } else if ((attruse->attrDecl != NULL) &&
- (attruse->attrDecl->defValue != NULL)) {
- *value = attruse->attrDecl->defValue;
- if (val != NULL)
- *val = attruse->attrDecl->defVal;
- if (attruse->attrDecl->flags & XML_SCHEMAS_ATTR_FIXED)
- *fixed = 1;
- return(1);
- }
- return(0);
-}
-/**
- * xmlSchemaCheckCVCWildcardNamespace:
- * @wild: the wildcard
- * @ns: the namespace
- *
- * Validation Rule: Wildcard allows Namespace Name
- * (cvc-wildcard-namespace)
- *
- * Returns 0 if the given namespace matches the wildcard,
- * 1 otherwise and -1 on API errors.
- */
-static int
-xmlSchemaCheckCVCWildcardNamespace(xmlSchemaWildcardPtr wild,
- const xmlChar* ns)
-{
- if (wild == NULL)
- return(-1);
-
- if (wild->any)
- return(0);
- else if (wild->nsSet != NULL) {
- xmlSchemaWildcardNsPtr cur;
-
- cur = wild->nsSet;
- while (cur != NULL) {
- if (xmlStrEqual(cur->value, ns))
- return(0);
- cur = cur->next;
- }
- } else if ((wild->negNsSet != NULL) && (ns != NULL) &&
- (!xmlStrEqual(wild->negNsSet->value, ns)))
- return(0);
-
- return(1);
-}
-
-#define XML_SCHEMA_ACTION_DERIVE 0
-#define XML_SCHEMA_ACTION_REDEFINE 1
-
-#define WXS_ACTION_STR(a) \
-((a) == XML_SCHEMA_ACTION_DERIVE) ? (const xmlChar *) "base" : (const xmlChar *) "redefined"
-
-/*
-* Schema Component Constraint:
-* Derivation Valid (Restriction, Complex)
-* derivation-ok-restriction (2) - (4)
-*
-* ATTENTION:
-* In XML Schema 1.1 this will be:
-* Validation Rule:
-* Checking complex type subsumption (practicalSubsumption) (1, 2 and 3)
-*
-*/
-static int
-xmlSchemaCheckDerivationOKRestriction2to4(xmlSchemaParserCtxtPtr pctxt,
- int action,
- xmlSchemaBasicItemPtr item,
- xmlSchemaBasicItemPtr baseItem,
- xmlSchemaItemListPtr uses,
- xmlSchemaItemListPtr baseUses,
- xmlSchemaWildcardPtr wild,
- xmlSchemaWildcardPtr baseWild)
-{
- xmlSchemaAttributeUsePtr cur = NULL, bcur;
- int i, j, found; /* err = 0; */
- const xmlChar *bEffValue;
- int effFixed;
-
- if (uses != NULL) {
- for (i = 0; i < uses->nbItems; i++) {
- cur = uses->items[i];
- found = 0;
- if (baseUses == NULL)
- goto not_found;
- for (j = 0; j < baseUses->nbItems; j++) {
- bcur = baseUses->items[j];
- if ((WXS_ATTRUSE_DECL_NAME(cur) ==
- WXS_ATTRUSE_DECL_NAME(bcur)) &&
- (WXS_ATTRUSE_DECL_TNS(cur) ==
- WXS_ATTRUSE_DECL_TNS(bcur)))
- {
- /*
- * (2.1) "If there is an attribute use in the {attribute
- * uses} of the {base type definition} (call this B) whose
- * {attribute declaration} has the same {name} and {target
- * namespace}, then all of the following must be true:"
- */
- found = 1;
-
- if ((cur->occurs == XML_SCHEMAS_ATTR_USE_OPTIONAL) &&
- (bcur->occurs == XML_SCHEMAS_ATTR_USE_REQUIRED))
- {
- xmlChar *str = NULL;
- /*
- * (2.1.1) "one of the following must be true:"
- * (2.1.1.1) "B's {required} is false."
- * (2.1.1.2) "R's {required} is true."
- */
- xmlSchemaPAttrUseErr4(pctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_1,
- WXS_ITEM_NODE(item), item, cur,
- "The 'optional' attribute use is inconsistent "
- "with the corresponding 'required' attribute use of "
- "the %s %s",
- WXS_ACTION_STR(action),
- xmlSchemaGetComponentDesignation(&str, baseItem),
- NULL, NULL);
- FREE_AND_NULL(str);
- /* err = pctxt->err; */
- } else if (xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST pctxt,
- WXS_ATTRUSE_TYPEDEF(cur),
- WXS_ATTRUSE_TYPEDEF(bcur), 0) != 0)
- {
- xmlChar *strA = NULL, *strB = NULL, *strC = NULL;
-
- /*
- * SPEC (2.1.2) "R's {attribute declaration}'s
- * {type definition} must be validly derived from
- * B's {type definition} given the empty set as
- * defined in Type Derivation OK (Simple) ($3.14.6)."
- */
- xmlSchemaPAttrUseErr4(pctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_2,
- WXS_ITEM_NODE(item), item, cur,
- "The attribute declaration's %s "
- "is not validly derived from "
- "the corresponding %s of the "
- "attribute declaration in the %s %s",
- xmlSchemaGetComponentDesignation(&strA,
- WXS_ATTRUSE_TYPEDEF(cur)),
- xmlSchemaGetComponentDesignation(&strB,
- WXS_ATTRUSE_TYPEDEF(bcur)),
- WXS_ACTION_STR(action),
- xmlSchemaGetComponentDesignation(&strC, baseItem));
- /* xmlSchemaGetComponentDesignation(&str, baseItem), */
- FREE_AND_NULL(strA);
- FREE_AND_NULL(strB);
- FREE_AND_NULL(strC);
- /* err = pctxt->err; */
- } else {
- /*
- * 2.1.3 [Definition:] Let the effective value
- * constraint of an attribute use be its {value
- * constraint}, if present, otherwise its {attribute
- * declaration}'s {value constraint} .
- */
- xmlSchemaGetEffectiveValueConstraint(bcur,
- &effFixed, &bEffValue, NULL);
- /*
- * 2.1.3 ... one of the following must be true
- *
- * 2.1.3.1 B's `effective value constraint` is
- * `absent` or default.
- */
- if ((bEffValue != NULL) &&
- (effFixed == 1)) {
- const xmlChar *rEffValue = NULL;
-
- xmlSchemaGetEffectiveValueConstraint(bcur,
- &effFixed, &rEffValue, NULL);
- /*
- * 2.1.3.2 R's `effective value constraint` is
- * fixed with the same string as B's.
- * MAYBE TODO: Compare the computed values.
- * Hmm, it says "same string" so
- * string-equality might really be sufficient.
- */
- if ((effFixed == 0) ||
- (! WXS_ARE_DEFAULT_STR_EQUAL(rEffValue, bEffValue)))
- {
- xmlChar *str = NULL;
-
- xmlSchemaPAttrUseErr4(pctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_1_3,
- WXS_ITEM_NODE(item), item, cur,
- "The effective value constraint of the "
- "attribute use is inconsistent with "
- "its correspondent in the %s %s",
- WXS_ACTION_STR(action),
- xmlSchemaGetComponentDesignation(&str,
- baseItem),
- NULL, NULL);
- FREE_AND_NULL(str);
- /* err = pctxt->err; */
- }
- }
- }
- break;
- }
- }
-not_found:
- if (!found) {
- /*
- * (2.2) "otherwise the {base type definition} must have an
- * {attribute wildcard} and the {target namespace} of the
- * R's {attribute declaration} must be `valid` with respect
- * to that wildcard, as defined in Wildcard allows Namespace
- * Name ($3.10.4)."
- */
- if ((baseWild == NULL) ||
- (xmlSchemaCheckCVCWildcardNamespace(baseWild,
- (WXS_ATTRUSE_DECL(cur))->targetNamespace) != 0))
- {
- xmlChar *str = NULL;
-
- xmlSchemaPAttrUseErr4(pctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_2_2,
- WXS_ITEM_NODE(item), item, cur,
- "Neither a matching attribute use, "
- "nor a matching wildcard exists in the %s %s",
- WXS_ACTION_STR(action),
- xmlSchemaGetComponentDesignation(&str, baseItem),
- NULL, NULL);
- FREE_AND_NULL(str);
- /* err = pctxt->err; */
- }
- }
- }
- }
- /*
- * SPEC derivation-ok-restriction (3):
- * (3) "For each attribute use in the {attribute uses} of the {base type
- * definition} whose {required} is true, there must be an attribute
- * use with an {attribute declaration} with the same {name} and
- * {target namespace} as its {attribute declaration} in the {attribute
- * uses} of the complex type definition itself whose {required} is true.
- */
- if (baseUses != NULL) {
- for (j = 0; j < baseUses->nbItems; j++) {
- bcur = baseUses->items[j];
- if (bcur->occurs != XML_SCHEMAS_ATTR_USE_REQUIRED)
- continue;
- found = 0;
- if (uses != NULL) {
- for (i = 0; i < uses->nbItems; i++) {
- cur = uses->items[i];
- if ((WXS_ATTRUSE_DECL_NAME(cur) ==
- WXS_ATTRUSE_DECL_NAME(bcur)) &&
- (WXS_ATTRUSE_DECL_TNS(cur) ==
- WXS_ATTRUSE_DECL_TNS(bcur))) {
- found = 1;
- break;
- }
- }
- }
- if (!found) {
- xmlChar *strA = NULL, *strB = NULL;
-
- xmlSchemaCustomErr4(ACTXT_CAST pctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_3,
- NULL, item,
- "A matching attribute use for the "
- "'required' %s of the %s %s is missing",
- xmlSchemaGetComponentDesignation(&strA, bcur),
- WXS_ACTION_STR(action),
- xmlSchemaGetComponentDesignation(&strB, baseItem),
- NULL);
- FREE_AND_NULL(strA);
- FREE_AND_NULL(strB);
- }
- }
- }
- /*
- * derivation-ok-restriction (4)
- */
- if (wild != NULL) {
- /*
- * (4) "If there is an {attribute wildcard}, all of the
- * following must be true:"
- */
- if (baseWild == NULL) {
- xmlChar *str = NULL;
-
- /*
- * (4.1) "The {base type definition} must also have one."
- */
- xmlSchemaCustomErr4(ACTXT_CAST pctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_1,
- NULL, item,
- "The %s has an attribute wildcard, "
- "but the %s %s '%s' does not have one",
- WXS_ITEM_TYPE_NAME(item),
- WXS_ACTION_STR(action),
- WXS_ITEM_TYPE_NAME(baseItem),
- xmlSchemaGetComponentQName(&str, baseItem));
- FREE_AND_NULL(str);
- return(pctxt->err);
- } else if ((baseWild->any == 0) &&
- xmlSchemaCheckCOSNSSubset(wild, baseWild))
- {
- xmlChar *str = NULL;
- /*
- * (4.2) "The complex type definition's {attribute wildcard}'s
- * {namespace constraint} must be a subset of the {base type
- * definition}'s {attribute wildcard}'s {namespace constraint},
- * as defined by Wildcard Subset ($3.10.6)."
- */
- xmlSchemaCustomErr4(ACTXT_CAST pctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_2,
- NULL, item,
- "The attribute wildcard is not a valid "
- "subset of the wildcard in the %s %s '%s'",
- WXS_ACTION_STR(action),
- WXS_ITEM_TYPE_NAME(baseItem),
- xmlSchemaGetComponentQName(&str, baseItem),
- NULL);
- FREE_AND_NULL(str);
- return(pctxt->err);
- }
- /* 4.3 Unless the {base type definition} is the `ur-type
- * definition`, the complex type definition's {attribute
- * wildcard}'s {process contents} must be identical to or
- * stronger than the {base type definition}'s {attribute
- * wildcard}'s {process contents}, where strict is stronger
- * than lax is stronger than skip.
- */
- if ((! WXS_IS_ANYTYPE(baseItem)) &&
- (wild->processContents < baseWild->processContents)) {
- xmlChar *str = NULL;
- xmlSchemaCustomErr4(ACTXT_CAST pctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_4_3,
- NULL, baseItem,
- "The {process contents} of the attribute wildcard is "
- "weaker than the one in the %s %s '%s'",
- WXS_ACTION_STR(action),
- WXS_ITEM_TYPE_NAME(baseItem),
- xmlSchemaGetComponentQName(&str, baseItem),
- NULL);
- FREE_AND_NULL(str)
- return(pctxt->err);
- }
- }
- return(0);
-}
-
-
-static int
-xmlSchemaExpandAttributeGroupRefs(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaBasicItemPtr item,
- xmlSchemaWildcardPtr *completeWild,
- xmlSchemaItemListPtr list,
- xmlSchemaItemListPtr prohibs);
-/**
- * xmlSchemaFixupTypeAttributeUses:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- *
- *
- * Builds the wildcard and the attribute uses on the given complex type.
- * Returns -1 if an internal error occurs, 0 otherwise.
- *
- * ATTENTION TODO: Experimantally this uses pointer comparisons for
- * strings, so recheck this if we start to hardcode some schemata, since
- * they might not be in the same dict.
- * NOTE: It is allowed to "extend" the xs:anyType type.
- */
-static int
-xmlSchemaFixupTypeAttributeUses(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- xmlSchemaTypePtr baseType = NULL;
- xmlSchemaAttributeUsePtr use;
- xmlSchemaItemListPtr uses, baseUses, prohibs = NULL;
-
- if (type->baseType == NULL) {
- PERROR_INT("xmlSchemaFixupTypeAttributeUses",
- "no base type");
- return (-1);
- }
- baseType = type->baseType;
- if (WXS_IS_TYPE_NOT_FIXED(baseType))
- if (xmlSchemaTypeFixup(baseType, ACTXT_CAST pctxt) == -1)
- return(-1);
-
- uses = type->attrUses;
- baseUses = baseType->attrUses;
- /*
- * Expand attribute group references. And build the 'complete'
- * wildcard, i.e. intersect multiple wildcards.
- * Move attribute prohibitions into a separate list.
- */
- if (uses != NULL) {
- if (WXS_IS_RESTRICTION(type)) {
- /*
- * This one will transfer all attr. prohibitions
- * into pctxt->attrProhibs.
- */
- if (xmlSchemaExpandAttributeGroupRefs(pctxt,
- WXS_BASIC_CAST type, &(type->attributeWildcard), uses,
- pctxt->attrProhibs) == -1)
- {
- PERROR_INT("xmlSchemaFixupTypeAttributeUses",
- "failed to expand attributes");
- }
- if (pctxt->attrProhibs->nbItems != 0)
- prohibs = pctxt->attrProhibs;
- } else {
- if (xmlSchemaExpandAttributeGroupRefs(pctxt,
- WXS_BASIC_CAST type, &(type->attributeWildcard), uses,
- NULL) == -1)
- {
- PERROR_INT("xmlSchemaFixupTypeAttributeUses",
- "failed to expand attributes");
- }
- }
- }
- /*
- * Inherit the attribute uses of the base type.
- */
- if (baseUses != NULL) {
- int i, j;
- xmlSchemaAttributeUseProhibPtr pro;
-
- if (WXS_IS_RESTRICTION(type)) {
- int usesCount;
- xmlSchemaAttributeUsePtr tmp;
-
- if (uses != NULL)
- usesCount = uses->nbItems;
- else
- usesCount = 0;
-
- /* Restriction. */
- for (i = 0; i < baseUses->nbItems; i++) {
- use = baseUses->items[i];
- if (prohibs) {
- /*
- * Filter out prohibited uses.
- */
- for (j = 0; j < prohibs->nbItems; j++) {
- pro = prohibs->items[j];
- if ((WXS_ATTRUSE_DECL_NAME(use) == pro->name) &&
- (WXS_ATTRUSE_DECL_TNS(use) ==
- pro->targetNamespace))
- {
- goto inherit_next;
- }
- }
- }
- if (usesCount) {
- /*
- * Filter out existing uses.
- */
- for (j = 0; j < usesCount; j++) {
- tmp = uses->items[j];
- if ((WXS_ATTRUSE_DECL_NAME(use) ==
- WXS_ATTRUSE_DECL_NAME(tmp)) &&
- (WXS_ATTRUSE_DECL_TNS(use) ==
- WXS_ATTRUSE_DECL_TNS(tmp)))
- {
- goto inherit_next;
- }
- }
- }
- if (uses == NULL) {
- type->attrUses = xmlSchemaItemListCreate();
- if (type->attrUses == NULL)
- goto exit_failure;
- uses = type->attrUses;
- }
- xmlSchemaItemListAddSize(uses, 2, use);
-inherit_next: {}
- }
- } else {
- /* Extension. */
- for (i = 0; i < baseUses->nbItems; i++) {
- use = baseUses->items[i];
- if (uses == NULL) {
- type->attrUses = xmlSchemaItemListCreate();
- if (type->attrUses == NULL)
- goto exit_failure;
- uses = type->attrUses;
- }
- xmlSchemaItemListAddSize(uses, baseUses->nbItems, use);
- }
- }
- }
- /*
- * Shrink attr. uses.
- */
- if (uses) {
- if (uses->nbItems == 0) {
- xmlSchemaItemListFree(uses);
- type->attrUses = NULL;
- }
- /*
- * TODO: We could shrink the size of the array
- * to fit the actual number of items.
- */
- }
- /*
- * Compute the complete wildcard.
- */
- if (WXS_IS_EXTENSION(type)) {
- if (baseType->attributeWildcard != NULL) {
- /*
- * (3.2.2.1) "If the `base wildcard` is non-`absent`, then
- * the appropriate case among the following:"
- */
- if (type->attributeWildcard != NULL) {
- /*
- * Union the complete wildcard with the base wildcard.
- * SPEC {attribute wildcard}
- * (3.2.2.1.2) "otherwise a wildcard whose {process contents}
- * and {annotation} are those of the `complete wildcard`,
- * and whose {namespace constraint} is the intensional union
- * of the {namespace constraint} of the `complete wildcard`
- * and of the `base wildcard`, as defined in Attribute
- * Wildcard Union ($3.10.6)."
- */
- if (xmlSchemaUnionWildcards(pctxt, type->attributeWildcard,
- baseType->attributeWildcard) == -1)
- goto exit_failure;
- } else {
- /*
- * (3.2.2.1.1) "If the `complete wildcard` is `absent`,
- * then the `base wildcard`."
- */
- type->attributeWildcard = baseType->attributeWildcard;
- }
- } else {
- /*
- * (3.2.2.2) "otherwise (the `base wildcard` is `absent`) the
- * `complete wildcard`"
- * NOOP
- */
- }
- } else {
- /*
- * SPEC {attribute wildcard}
- * (3.1) "If the <restriction> alternative is chosen, then the
- * `complete wildcard`;"
- * NOOP
- */
- }
-
- return (0);
-
-exit_failure:
- return(-1);
-}
-
-/**
- * xmlSchemaTypeFinalContains:
- * @schema: the schema
- * @type: the type definition
- * @final: the final
- *
- * Evaluates if a type definition contains the given "final".
- * This does take "finalDefault" into account as well.
- *
- * Returns 1 if the type does containt the given "final",
- * 0 otherwise.
- */
-static int
-xmlSchemaTypeFinalContains(xmlSchemaTypePtr type, int final)
-{
- if (type == NULL)
- return (0);
- if (type->flags & final)
- return (1);
- else
- return (0);
-}
-
-/**
- * xmlSchemaGetUnionSimpleTypeMemberTypes:
- * @type: the Union Simple Type
- *
- * Returns a list of member types of @type if existing,
- * returns NULL otherwise.
- */
-static xmlSchemaTypeLinkPtr
-xmlSchemaGetUnionSimpleTypeMemberTypes(xmlSchemaTypePtr type)
-{
- while ((type != NULL) && (type->type == XML_SCHEMA_TYPE_SIMPLE)) {
- if (type->memberTypes != NULL)
- return (type->memberTypes);
- else
- type = type->baseType;
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaGetParticleTotalRangeMin:
- * @particle: the particle
- *
- * Schema Component Constraint: Effective Total Range
- * (all and sequence) + (choice)
- *
- * Returns the minimun Effective Total Range.
- */
-static int
-xmlSchemaGetParticleTotalRangeMin(xmlSchemaParticlePtr particle)
-{
- if ((particle->children == NULL) ||
- (particle->minOccurs == 0))
- return (0);
- if (particle->children->type == XML_SCHEMA_TYPE_CHOICE) {
- int min = -1, cur;
- xmlSchemaParticlePtr part =
- (xmlSchemaParticlePtr) particle->children->children;
-
- if (part == NULL)
- return (0);
- while (part != NULL) {
- if ((part->children->type == XML_SCHEMA_TYPE_ELEMENT) ||
- (part->children->type == XML_SCHEMA_TYPE_ANY))
- cur = part->minOccurs;
- else
- cur = xmlSchemaGetParticleTotalRangeMin(part);
- if (cur == 0)
- return (0);
- if ((min > cur) || (min == -1))
- min = cur;
- part = (xmlSchemaParticlePtr) part->next;
- }
- return (particle->minOccurs * min);
- } else {
- /* <all> and <sequence> */
- int sum = 0;
- xmlSchemaParticlePtr part =
- (xmlSchemaParticlePtr) particle->children->children;
-
- if (part == NULL)
- return (0);
- do {
- if ((part->children->type == XML_SCHEMA_TYPE_ELEMENT) ||
- (part->children->type == XML_SCHEMA_TYPE_ANY))
- sum += part->minOccurs;
- else
- sum += xmlSchemaGetParticleTotalRangeMin(part);
- part = (xmlSchemaParticlePtr) part->next;
- } while (part != NULL);
- return (particle->minOccurs * sum);
- }
-}
-
-#if 0
-/**
- * xmlSchemaGetParticleTotalRangeMax:
- * @particle: the particle
- *
- * Schema Component Constraint: Effective Total Range
- * (all and sequence) + (choice)
- *
- * Returns the maximum Effective Total Range.
- */
-static int
-xmlSchemaGetParticleTotalRangeMax(xmlSchemaParticlePtr particle)
-{
- if ((particle->children == NULL) ||
- (particle->children->children == NULL))
- return (0);
- if (particle->children->type == XML_SCHEMA_TYPE_CHOICE) {
- int max = -1, cur;
- xmlSchemaParticlePtr part =
- (xmlSchemaParticlePtr) particle->children->children;
-
- for (; part != NULL; part = (xmlSchemaParticlePtr) part->next) {
- if (part->children == NULL)
- continue;
- if ((part->children->type == XML_SCHEMA_TYPE_ELEMENT) ||
- (part->children->type == XML_SCHEMA_TYPE_ANY))
- cur = part->maxOccurs;
- else
- cur = xmlSchemaGetParticleTotalRangeMax(part);
- if (cur == UNBOUNDED)
- return (UNBOUNDED);
- if ((max < cur) || (max == -1))
- max = cur;
- }
- /* TODO: Handle overflows? */
- return (particle->maxOccurs * max);
- } else {
- /* <all> and <sequence> */
- int sum = 0, cur;
- xmlSchemaParticlePtr part =
- (xmlSchemaParticlePtr) particle->children->children;
-
- for (; part != NULL; part = (xmlSchemaParticlePtr) part->next) {
- if (part->children == NULL)
- continue;
- if ((part->children->type == XML_SCHEMA_TYPE_ELEMENT) ||
- (part->children->type == XML_SCHEMA_TYPE_ANY))
- cur = part->maxOccurs;
- else
- cur = xmlSchemaGetParticleTotalRangeMax(part);
- if (cur == UNBOUNDED)
- return (UNBOUNDED);
- if ((cur > 0) && (particle->maxOccurs == UNBOUNDED))
- return (UNBOUNDED);
- sum += cur;
- }
- /* TODO: Handle overflows? */
- return (particle->maxOccurs * sum);
- }
-}
-#endif
-
-/**
- * xmlSchemaIsParticleEmptiable:
- * @particle: the particle
- *
- * Schema Component Constraint: Particle Emptiable
- * Checks whether the given particle is emptiable.
- *
- * Returns 1 if emptiable, 0 otherwise.
- */
-static int
-xmlSchemaIsParticleEmptiable(xmlSchemaParticlePtr particle)
-{
- /*
- * SPEC (1) "Its {min occurs} is 0."
- */
- if ((particle == NULL) || (particle->minOccurs == 0) ||
- (particle->children == NULL))
- return (1);
- /*
- * SPEC (2) "Its {term} is a group and the minimum part of the
- * effective total range of that group, [...] is 0."
- */
- if (WXS_IS_MODEL_GROUP(particle->children)) {
- if (xmlSchemaGetParticleTotalRangeMin(particle) == 0)
- return (1);
- }
- return (0);
-}
-
-/**
- * xmlSchemaCheckCOSSTDerivedOK:
- * @actxt: a context
- * @type: the derived simple type definition
- * @baseType: the base type definition
- * @subset: the subset of ('restriction', ect.)
- *
- * Schema Component Constraint:
- * Type Derivation OK (Simple) (cos-st-derived-OK)
- *
- * Checks wheter @type can be validly
- * derived from @baseType.
- *
- * Returns 0 on success, an positive error code otherwise.
- */
-static int
-xmlSchemaCheckCOSSTDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
- xmlSchemaTypePtr type,
- xmlSchemaTypePtr baseType,
- int subset)
-{
- /*
- * 1 They are the same type definition.
- * TODO: The identy check might have to be more complex than this.
- */
- if (type == baseType)
- return (0);
- /*
- * 2.1 restriction is not in the subset, or in the {final}
- * of its own {base type definition};
- *
- * NOTE that this will be used also via "xsi:type".
- *
- * TODO: Revise this, it looks strange. How can the "type"
- * not be fixed or *in* fixing?
- */
- if (WXS_IS_TYPE_NOT_FIXED(type))
- if (xmlSchemaTypeFixup(type, actxt) == -1)
- return(-1);
- if (WXS_IS_TYPE_NOT_FIXED(baseType))
- if (xmlSchemaTypeFixup(baseType, actxt) == -1)
- return(-1);
- if ((subset & SUBSET_RESTRICTION) ||
- (xmlSchemaTypeFinalContains(type->baseType,
- XML_SCHEMAS_TYPE_FINAL_RESTRICTION))) {
- return (XML_SCHEMAP_COS_ST_DERIVED_OK_2_1);
- }
- /* 2.2 */
- if (type->baseType == baseType) {
- /*
- * 2.2.1 D's `base type definition` is B.
- */
- return (0);
- }
- /*
- * 2.2.2 D's `base type definition` is not the `ur-type definition`
- * and is validly derived from B given the subset, as defined by this
- * constraint.
- */
- if ((! WXS_IS_ANYTYPE(type->baseType)) &&
- (xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType,
- baseType, subset) == 0)) {
- return (0);
- }
- /*
- * 2.2.3 D's {variety} is list or union and B is the `simple ur-type
- * definition`.
- */
- if (WXS_IS_ANY_SIMPLE_TYPE(baseType) &&
- (WXS_IS_LIST(type) || WXS_IS_UNION(type))) {
- return (0);
- }
- /*
- * 2.2.4 B's {variety} is union and D is validly derived from a type
- * definition in B's {member type definitions} given the subset, as
- * defined by this constraint.
- *
- * NOTE: This seems not to involve built-in types, since there is no
- * built-in Union Simple Type.
- */
- if (WXS_IS_UNION(baseType)) {
- xmlSchemaTypeLinkPtr cur;
-
- cur = baseType->memberTypes;
- while (cur != NULL) {
- if (WXS_IS_TYPE_NOT_FIXED(cur->type))
- if (xmlSchemaTypeFixup(cur->type, actxt) == -1)
- return(-1);
- if (xmlSchemaCheckCOSSTDerivedOK(actxt,
- type, cur->type, subset) == 0)
- {
- /*
- * It just has to be validly derived from at least one
- * member-type.
- */
- return (0);
- }
- cur = cur->next;
- }
- }
- return (XML_SCHEMAP_COS_ST_DERIVED_OK_2_2);
-}
-
-/**
- * xmlSchemaCheckTypeDefCircularInternal:
- * @pctxt: the schema parser context
- * @ctxtType: the type definition
- * @ancestor: an ancestor of @ctxtType
- *
- * Checks st-props-correct (2) + ct-props-correct (3).
- * Circular type definitions are not allowed.
- *
- * Returns XML_SCHEMAP_ST_PROPS_CORRECT_2 if the given type is
- * circular, 0 otherwise.
- */
-static int
-xmlSchemaCheckTypeDefCircularInternal(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr ctxtType,
- xmlSchemaTypePtr ancestor)
-{
- int ret;
-
- if ((ancestor == NULL) || (ancestor->type == XML_SCHEMA_TYPE_BASIC))
- return (0);
-
- if (ctxtType == ancestor) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_ST_PROPS_CORRECT_2,
- WXS_BASIC_CAST ctxtType, WXS_ITEM_NODE(ctxtType),
- "The definition is circular", NULL);
- return (XML_SCHEMAP_ST_PROPS_CORRECT_2);
- }
- if (ancestor->flags & XML_SCHEMAS_TYPE_MARKED) {
- /*
- * Avoid inifinite recursion on circular types not yet checked.
- */
- return (0);
- }
- ancestor->flags |= XML_SCHEMAS_TYPE_MARKED;
- ret = xmlSchemaCheckTypeDefCircularInternal(pctxt, ctxtType,
- ancestor->baseType);
- ancestor->flags ^= XML_SCHEMAS_TYPE_MARKED;
- return (ret);
-}
-
-/**
- * xmlSchemaCheckTypeDefCircular:
- * @item: the complex/simple type definition
- * @ctxt: the parser context
- * @name: the name
- *
- * Checks for circular type definitions.
- */
-static void
-xmlSchemaCheckTypeDefCircular(xmlSchemaTypePtr item,
- xmlSchemaParserCtxtPtr ctxt)
-{
- if ((item == NULL) ||
- (item->type == XML_SCHEMA_TYPE_BASIC) ||
- (item->baseType == NULL))
- return;
- xmlSchemaCheckTypeDefCircularInternal(ctxt, item,
- item->baseType);
-}
-
-/*
-* Simple Type Definition Representation OK (src-simple-type) 4
-*
-* "4 Circular union type definition is disallowed. That is, if the
-* <union> alternative is chosen, there must not be any entries in the
-* memberTypes [attribute] at any depth which resolve to the component
-* corresponding to the <simpleType>."
-*
-* Note that this should work on the *representation* of a component,
-* thus assumes any union types in the member types not being yet
-* substituted. At this stage we need the variety of the types
-* to be already computed.
-*/
-static int
-xmlSchemaCheckUnionTypeDefCircularRecur(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr ctxType,
- xmlSchemaTypeLinkPtr members)
-{
- xmlSchemaTypeLinkPtr member;
- xmlSchemaTypePtr memberType;
-
- member = members;
- while (member != NULL) {
- memberType = member->type;
- while ((memberType != NULL) &&
- (memberType->type != XML_SCHEMA_TYPE_BASIC)) {
- if (memberType == ctxType) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_SRC_SIMPLE_TYPE_4,
- WXS_BASIC_CAST ctxType, NULL,
- "The union type definition is circular", NULL);
- return (XML_SCHEMAP_SRC_SIMPLE_TYPE_4);
- }
- if ((WXS_IS_UNION(memberType)) &&
- ((memberType->flags & XML_SCHEMAS_TYPE_MARKED) == 0))
- {
- int res;
- memberType->flags |= XML_SCHEMAS_TYPE_MARKED;
- res = xmlSchemaCheckUnionTypeDefCircularRecur(pctxt,
- ctxType,
- xmlSchemaGetUnionSimpleTypeMemberTypes(memberType));
- memberType->flags ^= XML_SCHEMAS_TYPE_MARKED;
- if (res != 0)
- return(res);
- }
- memberType = memberType->baseType;
- }
- member = member->next;
- }
- return(0);
-}
-
-static int
-xmlSchemaCheckUnionTypeDefCircular(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- if (! WXS_IS_UNION(type))
- return(0);
- return(xmlSchemaCheckUnionTypeDefCircularRecur(pctxt, type,
- type->memberTypes));
-}
-
-/**
- * xmlSchemaResolveTypeReferences:
- * @item: the complex/simple type definition
- * @ctxt: the parser context
- * @name: the name
- *
- * Resolvese type definition references
- */
-static void
-xmlSchemaResolveTypeReferences(xmlSchemaTypePtr typeDef,
- xmlSchemaParserCtxtPtr ctxt)
-{
- if (typeDef == NULL)
- return;
-
- /*
- * Resolve the base type.
- */
- if (typeDef->baseType == NULL) {
- typeDef->baseType = xmlSchemaGetType(ctxt->schema,
- typeDef->base, typeDef->baseNs);
- if (typeDef->baseType == NULL) {
- xmlSchemaPResCompAttrErr(ctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- WXS_BASIC_CAST typeDef, typeDef->node,
- "base", typeDef->base, typeDef->baseNs,
- XML_SCHEMA_TYPE_SIMPLE, NULL);
- return;
- }
- }
- if (WXS_IS_SIMPLE(typeDef)) {
- if (WXS_IS_UNION(typeDef)) {
- /*
- * Resolve the memberTypes.
- */
- xmlSchemaResolveUnionMemberTypes(ctxt, typeDef);
- return;
- } else if (WXS_IS_LIST(typeDef)) {
- /*
- * Resolve the itemType.
- */
- if ((typeDef->subtypes == NULL) && (typeDef->base != NULL)) {
-
- typeDef->subtypes = xmlSchemaGetType(ctxt->schema,
- typeDef->base, typeDef->baseNs);
-
- if ((typeDef->subtypes == NULL) ||
- (! WXS_IS_SIMPLE(typeDef->subtypes)))
- {
- typeDef->subtypes = NULL;
- xmlSchemaPResCompAttrErr(ctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- WXS_BASIC_CAST typeDef, typeDef->node,
- "itemType", typeDef->base, typeDef->baseNs,
- XML_SCHEMA_TYPE_SIMPLE, NULL);
- }
- }
- return;
- }
- }
- /*
- * The ball of letters below means, that if we have a particle
- * which has a QName-helper component as its {term}, we want
- * to resolve it...
- */
- else if ((WXS_TYPE_CONTENTTYPE(typeDef) != NULL) &&
- ((WXS_TYPE_CONTENTTYPE(typeDef))->type ==
- XML_SCHEMA_TYPE_PARTICLE) &&
- (WXS_TYPE_PARTICLE_TERM(typeDef) != NULL) &&
- ((WXS_TYPE_PARTICLE_TERM(typeDef))->type ==
- XML_SCHEMA_EXTRA_QNAMEREF))
- {
- xmlSchemaQNameRefPtr ref =
- WXS_QNAME_CAST WXS_TYPE_PARTICLE_TERM(typeDef);
- xmlSchemaModelGroupDefPtr groupDef;
-
- /*
- * URGENT TODO: Test this.
- */
- WXS_TYPE_PARTICLE_TERM(typeDef) = NULL;
- /*
- * Resolve the MG definition reference.
- */
- groupDef =
- WXS_MODEL_GROUPDEF_CAST xmlSchemaGetNamedComponent(ctxt->schema,
- ref->itemType, ref->name, ref->targetNamespace);
- if (groupDef == NULL) {
- xmlSchemaPResCompAttrErr(ctxt, XML_SCHEMAP_SRC_RESOLVE,
- NULL, WXS_ITEM_NODE(WXS_TYPE_PARTICLE(typeDef)),
- "ref", ref->name, ref->targetNamespace, ref->itemType,
- NULL);
- /* Remove the particle. */
- WXS_TYPE_CONTENTTYPE(typeDef) = NULL;
- } else if (WXS_MODELGROUPDEF_MODEL(groupDef) == NULL)
- /* Remove the particle. */
- WXS_TYPE_CONTENTTYPE(typeDef) = NULL;
- else {
- /*
- * Assign the MG definition's {model group} to the
- * particle's {term}.
- */
- WXS_TYPE_PARTICLE_TERM(typeDef) = WXS_MODELGROUPDEF_MODEL(groupDef);
-
- if (WXS_MODELGROUPDEF_MODEL(groupDef)->type == XML_SCHEMA_TYPE_ALL) {
- /*
- * SPEC cos-all-limited (1.2)
- * "1.2 the {term} property of a particle with
- * {max occurs}=1 which is part of a pair which constitutes
- * the {content type} of a complex type definition."
- */
- if ((WXS_TYPE_PARTICLE(typeDef))->maxOccurs != 1) {
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- /* TODO: error code */
- XML_SCHEMAP_COS_ALL_LIMITED,
- WXS_ITEM_NODE(WXS_TYPE_PARTICLE(typeDef)), NULL,
- "The particle's {max occurs} must be 1, since the "
- "reference resolves to an 'all' model group",
- NULL, NULL);
- }
- }
- }
- }
-}
-
-
-
-/**
- * xmlSchemaCheckSTPropsCorrect:
- * @ctxt: the schema parser context
- * @type: the simple type definition
- *
- * Checks st-props-correct.
- *
- * Returns 0 if the properties are correct,
- * if not, a positive error code and -1 on internal
- * errors.
- */
-static int
-xmlSchemaCheckSTPropsCorrect(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaTypePtr type)
-{
- xmlSchemaTypePtr baseType = type->baseType;
- xmlChar *str = NULL;
-
- /* STATE: error funcs converted. */
- /*
- * Schema Component Constraint: Simple Type Definition Properties Correct
- *
- * NOTE: This is somehow redundant, since we actually built a simple type
- * to have all the needed information; this acts as an self test.
- */
- /* Base type: If the datatype has been `derived` by `restriction`
- * then the Simple Type Definition component from which it is `derived`,
- * otherwise the Simple Type Definition for anySimpleType ($4.1.6).
- */
- if (baseType == NULL) {
- /*
- * TODO: Think about: "modulo the impact of Missing
- * Sub-components ($5.3)."
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_ST_PROPS_CORRECT_1,
- WXS_BASIC_CAST type, NULL,
- "No base type existent", NULL);
- return (XML_SCHEMAP_ST_PROPS_CORRECT_1);
-
- }
- if (! WXS_IS_SIMPLE(baseType)) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_ST_PROPS_CORRECT_1,
- WXS_BASIC_CAST type, NULL,
- "The base type '%s' is not a simple type",
- xmlSchemaGetComponentQName(&str, baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_ST_PROPS_CORRECT_1);
- }
- if ((WXS_IS_LIST(type) || WXS_IS_UNION(type)) &&
- (WXS_IS_RESTRICTION(type) == 0) &&
- ((! WXS_IS_ANY_SIMPLE_TYPE(baseType)) &&
- (baseType->type != XML_SCHEMA_TYPE_SIMPLE))) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_ST_PROPS_CORRECT_1,
- WXS_BASIC_CAST type, NULL,
- "A type, derived by list or union, must have "
- "the simple ur-type definition as base type, not '%s'",
- xmlSchemaGetComponentQName(&str, baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_ST_PROPS_CORRECT_1);
- }
- /*
- * Variety: One of {atomic, list, union}.
- */
- if ((! WXS_IS_ATOMIC(type)) && (! WXS_IS_UNION(type)) &&
- (! WXS_IS_LIST(type))) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_ST_PROPS_CORRECT_1,
- WXS_BASIC_CAST type, NULL,
- "The variety is absent", NULL);
- return (XML_SCHEMAP_ST_PROPS_CORRECT_1);
- }
- /* TODO: Finish this. Hmm, is this finished? */
-
- /*
- * 3 The {final} of the {base type definition} must not contain restriction.
- */
- if (xmlSchemaTypeFinalContains(baseType,
- XML_SCHEMAS_TYPE_FINAL_RESTRICTION)) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_ST_PROPS_CORRECT_3,
- WXS_BASIC_CAST type, NULL,
- "The 'final' of its base type '%s' must not contain "
- "'restriction'",
- xmlSchemaGetComponentQName(&str, baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_ST_PROPS_CORRECT_3);
- }
-
- /*
- * 2 All simple type definitions must be derived ultimately from the `simple
- * ur-type definition` (so circular definitions are disallowed). That is, it
- * must be possible to reach a built-in primitive datatype or the `simple
- * ur-type definition` by repeatedly following the {base type definition}.
- *
- * NOTE: this is done in xmlSchemaCheckTypeDefCircular().
- */
- return (0);
-}
-
-/**
- * xmlSchemaCheckCOSSTRestricts:
- * @ctxt: the schema parser context
- * @type: the simple type definition
- *
- * Schema Component Constraint:
- * Derivation Valid (Restriction, Simple) (cos-st-restricts)
-
- * Checks if the given @type (simpleType) is derived validly by restriction.
- * STATUS:
- *
- * Returns -1 on internal errors, 0 if the type is validly derived,
- * a positive error code otherwise.
- */
-static int
-xmlSchemaCheckCOSSTRestricts(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- xmlChar *str = NULL;
-
- if (type->type != XML_SCHEMA_TYPE_SIMPLE) {
- PERROR_INT("xmlSchemaCheckCOSSTRestricts",
- "given type is not a user-derived simpleType");
- return (-1);
- }
-
- if (WXS_IS_ATOMIC(type)) {
- xmlSchemaTypePtr primitive;
- /*
- * 1.1 The {base type definition} must be an atomic simple
- * type definition or a built-in primitive datatype.
- */
- if (! WXS_IS_ATOMIC(type->baseType)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_1_1,
- WXS_BASIC_CAST type, NULL,
- "The base type '%s' is not an atomic simple type",
- xmlSchemaGetComponentQName(&str, type->baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_1_1);
- }
- /* 1.2 The {final} of the {base type definition} must not contain
- * restriction.
- */
- /* OPTIMIZE TODO : This is already done in xmlSchemaCheckStPropsCorrect */
- if (xmlSchemaTypeFinalContains(type->baseType,
- XML_SCHEMAS_TYPE_FINAL_RESTRICTION)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_1_2,
- WXS_BASIC_CAST type, NULL,
- "The final of its base type '%s' must not contain 'restriction'",
- xmlSchemaGetComponentQName(&str, type->baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_1_2);
- }
-
- /*
- * 1.3.1 DF must be an allowed constraining facet for the {primitive
- * type definition}, as specified in the appropriate subsection of 3.2
- * Primitive datatypes.
- */
- if (type->facets != NULL) {
- xmlSchemaFacetPtr facet;
- int ok = 1;
-
- primitive = xmlSchemaGetPrimitiveType(type);
- if (primitive == NULL) {
- PERROR_INT("xmlSchemaCheckCOSSTRestricts",
- "failed to get primitive type");
- return (-1);
- }
- facet = type->facets;
- do {
- if (xmlSchemaIsBuiltInTypeFacet(primitive, facet->type) == 0) {
- ok = 0;
- xmlSchemaPIllegalFacetAtomicErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1,
- type, primitive, facet);
- }
- facet = facet->next;
- } while (facet != NULL);
- if (ok == 0)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_1_3_1);
- }
- /*
- * SPEC (1.3.2) "If there is a facet of the same kind in the {facets}
- * of the {base type definition} (call this BF),then the DF's {value}
- * must be a valid restriction of BF's {value} as defined in
- * [XML Schemas: Datatypes]."
- *
- * NOTE (1.3.2) Facet derivation constraints are currently handled in
- * xmlSchemaDeriveAndValidateFacets()
- */
- } else if (WXS_IS_LIST(type)) {
- xmlSchemaTypePtr itemType = NULL;
-
- itemType = type->subtypes;
- if ((itemType == NULL) || (! WXS_IS_SIMPLE(itemType))) {
- PERROR_INT("xmlSchemaCheckCOSSTRestricts",
- "failed to evaluate the item type");
- return (-1);
- }
- if (WXS_IS_TYPE_NOT_FIXED(itemType))
- xmlSchemaTypeFixup(itemType, ACTXT_CAST pctxt);
- /*
- * 2.1 The {item type definition} must have a {variety} of atomic or
- * union (in which case all the {member type definitions}
- * must be atomic).
- */
- if ((! WXS_IS_ATOMIC(itemType)) &&
- (! WXS_IS_UNION(itemType))) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_2_1,
- WXS_BASIC_CAST type, NULL,
- "The item type '%s' does not have a variety of atomic or union",
- xmlSchemaGetComponentQName(&str, itemType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_2_1);
- } else if (WXS_IS_UNION(itemType)) {
- xmlSchemaTypeLinkPtr member;
-
- member = itemType->memberTypes;
- while (member != NULL) {
- if (! WXS_IS_ATOMIC(member->type)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_2_1,
- WXS_BASIC_CAST type, NULL,
- "The item type is a union type, but the "
- "member type '%s' of this item type is not atomic",
- xmlSchemaGetComponentQName(&str, member->type));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_2_1);
- }
- member = member->next;
- }
- }
-
- if (WXS_IS_ANY_SIMPLE_TYPE(type->baseType)) {
- xmlSchemaFacetPtr facet;
- /*
- * This is the case if we have: <simpleType><list ..
- */
- /*
- * 2.3.1
- * 2.3.1.1 The {final} of the {item type definition} must not
- * contain list.
- */
- if (xmlSchemaTypeFinalContains(itemType,
- XML_SCHEMAS_TYPE_FINAL_LIST)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1,
- WXS_BASIC_CAST type, NULL,
- "The final of its item type '%s' must not contain 'list'",
- xmlSchemaGetComponentQName(&str, itemType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_1);
- }
- /*
- * 2.3.1.2 The {facets} must only contain the whiteSpace
- * facet component.
- * OPTIMIZE TODO: the S4S already disallows any facet
- * to be specified.
- */
- if (type->facets != NULL) {
- facet = type->facets;
- do {
- if (facet->type != XML_SCHEMA_FACET_WHITESPACE) {
- xmlSchemaPIllegalFacetListUnionErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2,
- type, facet);
- return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_1_2);
- }
- facet = facet->next;
- } while (facet != NULL);
- }
- /*
- * MAYBE TODO: (Hmm, not really) Datatypes states:
- * A `list` datatype can be `derived` from an `atomic` datatype
- * whose `lexical space` allows space (such as string or anyURI)or
- * a `union` datatype any of whose {member type definitions}'s
- * `lexical space` allows space.
- */
- } else {
- /*
- * This is the case if we have: <simpleType><restriction ...
- * I.e. the variety of "list" is inherited.
- */
- /*
- * 2.3.2
- * 2.3.2.1 The {base type definition} must have a {variety} of list.
- */
- if (! WXS_IS_LIST(type->baseType)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1,
- WXS_BASIC_CAST type, NULL,
- "The base type '%s' must be a list type",
- xmlSchemaGetComponentQName(&str, type->baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_1);
- }
- /*
- * 2.3.2.2 The {final} of the {base type definition} must not
- * contain restriction.
- */
- if (xmlSchemaTypeFinalContains(type->baseType,
- XML_SCHEMAS_TYPE_FINAL_RESTRICTION)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2,
- WXS_BASIC_CAST type, NULL,
- "The 'final' of the base type '%s' must not contain 'restriction'",
- xmlSchemaGetComponentQName(&str, type->baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_2);
- }
- /*
- * 2.3.2.3 The {item type definition} must be validly derived
- * from the {base type definition}'s {item type definition} given
- * the empty set, as defined in Type Derivation OK (Simple) ($3.14.6).
- */
- {
- xmlSchemaTypePtr baseItemType;
-
- baseItemType = type->baseType->subtypes;
- if ((baseItemType == NULL) || (! WXS_IS_SIMPLE(baseItemType))) {
- PERROR_INT("xmlSchemaCheckCOSSTRestricts",
- "failed to eval the item type of a base type");
- return (-1);
- }
- if ((itemType != baseItemType) &&
- (xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST pctxt, itemType,
- baseItemType, 0) != 0)) {
- xmlChar *strBIT = NULL, *strBT = NULL;
- xmlSchemaPCustomErrExt(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3,
- WXS_BASIC_CAST type, NULL,
- "The item type '%s' is not validly derived from "
- "the item type '%s' of the base type '%s'",
- xmlSchemaGetComponentQName(&str, itemType),
- xmlSchemaGetComponentQName(&strBIT, baseItemType),
- xmlSchemaGetComponentQName(&strBT, type->baseType));
-
- FREE_AND_NULL(str)
- FREE_AND_NULL(strBIT)
- FREE_AND_NULL(strBT)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_3);
- }
- }
-
- if (type->facets != NULL) {
- xmlSchemaFacetPtr facet;
- int ok = 1;
- /*
- * 2.3.2.4 Only length, minLength, maxLength, whiteSpace, pattern
- * and enumeration facet components are allowed among the {facets}.
- */
- facet = type->facets;
- do {
- switch (facet->type) {
- case XML_SCHEMA_FACET_LENGTH:
- case XML_SCHEMA_FACET_MINLENGTH:
- case XML_SCHEMA_FACET_MAXLENGTH:
- case XML_SCHEMA_FACET_WHITESPACE:
- /*
- * TODO: 2.5.1.2 List datatypes
- * The value of `whiteSpace` is fixed to the value collapse.
- */
- case XML_SCHEMA_FACET_PATTERN:
- case XML_SCHEMA_FACET_ENUMERATION:
- break;
- default: {
- xmlSchemaPIllegalFacetListUnionErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4,
- type, facet);
- /*
- * We could return, but it's nicer to report all
- * invalid facets.
- */
- ok = 0;
- }
- }
- facet = facet->next;
- } while (facet != NULL);
- if (ok == 0)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_2_3_2_4);
- /*
- * SPEC (2.3.2.5) (same as 1.3.2)
- *
- * NOTE (2.3.2.5) This is currently done in
- * xmlSchemaDeriveAndValidateFacets()
- */
- }
- }
- } else if (WXS_IS_UNION(type)) {
- /*
- * 3.1 The {member type definitions} must all have {variety} of
- * atomic or list.
- */
- xmlSchemaTypeLinkPtr member;
-
- member = type->memberTypes;
- while (member != NULL) {
- if (WXS_IS_TYPE_NOT_FIXED(member->type))
- xmlSchemaTypeFixup(member->type, ACTXT_CAST pctxt);
-
- if ((! WXS_IS_ATOMIC(member->type)) &&
- (! WXS_IS_LIST(member->type))) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_3_1,
- WXS_BASIC_CAST type, NULL,
- "The member type '%s' is neither an atomic, nor a list type",
- xmlSchemaGetComponentQName(&str, member->type));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_3_1);
- }
- member = member->next;
- }
- /*
- * 3.3.1 If the {base type definition} is the `simple ur-type
- * definition`
- */
- if (type->baseType->builtInType == XML_SCHEMAS_ANYSIMPLETYPE) {
- /*
- * 3.3.1.1 All of the {member type definitions} must have a
- * {final} which does not contain union.
- */
- member = type->memberTypes;
- while (member != NULL) {
- if (xmlSchemaTypeFinalContains(member->type,
- XML_SCHEMAS_TYPE_FINAL_UNION)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1,
- WXS_BASIC_CAST type, NULL,
- "The 'final' of member type '%s' contains 'union'",
- xmlSchemaGetComponentQName(&str, member->type));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1);
- }
- member = member->next;
- }
- /*
- * 3.3.1.2 The {facets} must be empty.
- */
- if (type->facetSet != NULL) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2,
- WXS_BASIC_CAST type, NULL,
- "No facets allowed", NULL);
- return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_1_2);
- }
- } else {
- /*
- * 3.3.2.1 The {base type definition} must have a {variety} of union.
- * I.e. the variety of "list" is inherited.
- */
- if (! WXS_IS_UNION(type->baseType)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1,
- WXS_BASIC_CAST type, NULL,
- "The base type '%s' is not a union type",
- xmlSchemaGetComponentQName(&str, type->baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_1);
- }
- /*
- * 3.3.2.2 The {final} of the {base type definition} must not contain restriction.
- */
- if (xmlSchemaTypeFinalContains(type->baseType,
- XML_SCHEMAS_TYPE_FINAL_RESTRICTION)) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2,
- WXS_BASIC_CAST type, NULL,
- "The 'final' of its base type '%s' must not contain 'restriction'",
- xmlSchemaGetComponentQName(&str, type->baseType));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_2);
- }
- /*
- * 3.3.2.3 The {member type definitions}, in order, must be validly
- * derived from the corresponding type definitions in the {base
- * type definition}'s {member type definitions} given the empty set,
- * as defined in Type Derivation OK (Simple) ($3.14.6).
- */
- {
- xmlSchemaTypeLinkPtr baseMember;
-
- /*
- * OPTIMIZE: if the type is restricting, it has no local defined
- * member types and inherits the member types of the base type;
- * thus a check for equality can be skipped.
- */
- /*
- * Even worse: I cannot see a scenario where a restricting
- * union simple type can have other member types as the member
- * types of it's base type. This check seems not necessary with
- * respect to the derivation process in libxml2.
- * But necessary if constructing types with an API.
- */
- if (type->memberTypes != NULL) {
- member = type->memberTypes;
- baseMember = xmlSchemaGetUnionSimpleTypeMemberTypes(type->baseType);
- if ((member == NULL) && (baseMember != NULL)) {
- PERROR_INT("xmlSchemaCheckCOSSTRestricts",
- "different number of member types in base");
- }
- while (member != NULL) {
- if (baseMember == NULL) {
- PERROR_INT("xmlSchemaCheckCOSSTRestricts",
- "different number of member types in base");
- } else if ((member->type != baseMember->type) &&
- (xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST pctxt,
- member->type, baseMember->type, 0) != 0)) {
- xmlChar *strBMT = NULL, *strBT = NULL;
-
- xmlSchemaPCustomErrExt(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3,
- WXS_BASIC_CAST type, NULL,
- "The member type %s is not validly "
- "derived from its corresponding member "
- "type %s of the base type %s",
- xmlSchemaGetComponentQName(&str, member->type),
- xmlSchemaGetComponentQName(&strBMT, baseMember->type),
- xmlSchemaGetComponentQName(&strBT, type->baseType));
- FREE_AND_NULL(str)
- FREE_AND_NULL(strBMT)
- FREE_AND_NULL(strBT)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_3);
- }
- member = member->next;
- if (baseMember != NULL)
- baseMember = baseMember->next;
- }
- }
- }
- /*
- * 3.3.2.4 Only pattern and enumeration facet components are
- * allowed among the {facets}.
- */
- if (type->facets != NULL) {
- xmlSchemaFacetPtr facet;
- int ok = 1;
-
- facet = type->facets;
- do {
- if ((facet->type != XML_SCHEMA_FACET_PATTERN) &&
- (facet->type != XML_SCHEMA_FACET_ENUMERATION)) {
- xmlSchemaPIllegalFacetListUnionErr(pctxt,
- XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4,
- type, facet);
- ok = 0;
- }
- facet = facet->next;
- } while (facet != NULL);
- if (ok == 0)
- return (XML_SCHEMAP_COS_ST_RESTRICTS_3_3_2_4);
-
- }
- /*
- * SPEC (3.3.2.5) (same as 1.3.2)
- *
- * NOTE (3.3.2.5) This is currently done in
- * xmlSchemaDeriveAndValidateFacets()
- */
- }
- }
-
- return (0);
-}
-
-/**
- * xmlSchemaCheckSRCSimpleType:
- * @ctxt: the schema parser context
- * @type: the simple type definition
- *
- * Checks crc-simple-type constraints.
- *
- * Returns 0 if the constraints are satisfied,
- * if not a positive error code and -1 on internal
- * errors.
- */
-#if 0
-static int
-xmlSchemaCheckSRCSimpleType(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaTypePtr type)
-{
- /*
- * src-simple-type.1 The corresponding simple type definition, if any,
- * must satisfy the conditions set out in Constraints on Simple Type
- * Definition Schema Components ($3.14.6).
- */
- if (WXS_IS_RESTRICTION(type)) {
- /*
- * src-simple-type.2 "If the <restriction> alternative is chosen,
- * either it must have a base [attribute] or a <simpleType> among its
- * [children], but not both."
- * NOTE: This is checked in the parse function of <restriction>.
- */
- /*
- *
- */
- } else if (WXS_IS_LIST(type)) {
- /* src-simple-type.3 "If the <list> alternative is chosen, either it must have
- * an itemType [attribute] or a <simpleType> among its [children],
- * but not both."
- *
- * NOTE: This is checked in the parse function of <list>.
- */
- } else if (WXS_IS_UNION(type)) {
- /*
- * src-simple-type.4 is checked in xmlSchemaCheckUnionTypeDefCircular().
- */
- }
- return (0);
-}
-#endif
-
-static int
-xmlSchemaCreateVCtxtOnPCtxt(xmlSchemaParserCtxtPtr ctxt)
-{
- if (ctxt->vctxt == NULL) {
- ctxt->vctxt = xmlSchemaNewValidCtxt(NULL);
- if (ctxt->vctxt == NULL) {
- xmlSchemaPErr(ctxt, NULL,
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaCreateVCtxtOnPCtxt, "
- "failed to create a temp. validation context.\n",
- NULL, NULL);
- return (-1);
- }
- /* TODO: Pass user data. */
- xmlSchemaSetValidErrors(ctxt->vctxt,
- ctxt->error, ctxt->warning, ctxt->errCtxt);
- xmlSchemaSetValidStructuredErrors(ctxt->vctxt,
- ctxt->serror, ctxt->errCtxt);
- }
- return (0);
-}
-
-static int
-xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
- xmlNodePtr node,
- xmlSchemaTypePtr type,
- const xmlChar *value,
- xmlSchemaValPtr *retVal,
- int fireErrors,
- int normalize,
- int isNormalized);
-
-/**
- * xmlSchemaParseCheckCOSValidDefault:
- * @pctxt: the schema parser context
- * @type: the simple type definition
- * @value: the default value
- * @node: an optional node (the holder of the value)
- *
- * Schema Component Constraint: Element Default Valid (Immediate)
- * (cos-valid-default)
- * This will be used by the parser only. For the validator there's
- * an other version.
- *
- * Returns 0 if the constraints are satisfied,
- * if not, a positive error code and -1 on internal
- * errors.
- */
-static int
-xmlSchemaParseCheckCOSValidDefault(xmlSchemaParserCtxtPtr pctxt,
- xmlNodePtr node,
- xmlSchemaTypePtr type,
- const xmlChar *value,
- xmlSchemaValPtr *val)
-{
- int ret = 0;
-
- /*
- * cos-valid-default:
- * Schema Component Constraint: Element Default Valid (Immediate)
- * For a string to be a valid default with respect to a type
- * definition the appropriate case among the following must be true:
- */
- if WXS_IS_COMPLEX(type) {
- /*
- * Complex type.
- *
- * SPEC (2.1) "its {content type} must be a simple type definition
- * or mixed."
- * SPEC (2.2.2) "If the {content type} is mixed, then the {content
- * type}'s particle must be `emptiable` as defined by
- * Particle Emptiable ($3.9.6)."
- */
- if ((! WXS_HAS_SIMPLE_CONTENT(type)) &&
- ((! WXS_HAS_MIXED_CONTENT(type)) || (! WXS_EMPTIABLE(type)))) {
- /* NOTE that this covers (2.2.2) as well. */
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_COS_VALID_DEFAULT_2_1,
- WXS_BASIC_CAST type, type->node,
- "For a string to be a valid default, the type definition "
- "must be a simple type or a complex type with mixed content "
- "and a particle emptiable", NULL);
- return(XML_SCHEMAP_COS_VALID_DEFAULT_2_1);
- }
- }
- /*
- * 1 If the type definition is a simple type definition, then the string
- * must be `valid` with respect to that definition as defined by String
- * Valid ($3.14.4).
- *
- * AND
- *
- * 2.2.1 If the {content type} is a simple type definition, then the
- * string must be `valid` with respect to that simple type definition
- * as defined by String Valid ($3.14.4).
- */
- if (WXS_IS_SIMPLE(type))
- ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node,
- type, value, val, 1, 1, 0);
- else if (WXS_HAS_SIMPLE_CONTENT(type))
- ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt, node,
- type->contentTypeDef, value, val, 1, 1, 0);
- else
- return (ret);
-
- if (ret < 0) {
- PERROR_INT("xmlSchemaParseCheckCOSValidDefault",
- "calling xmlSchemaVCheckCVCSimpleType()");
- }
-
- return (ret);
-}
-
-/**
- * xmlSchemaCheckCTPropsCorrect:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- *
- *.(4.6) Constraints on Complex Type Definition Schema Components
- * Schema Component Constraint:
- * Complex Type Definition Properties Correct (ct-props-correct)
- * STATUS: (seems) complete
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckCTPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- /*
- * TODO: Correct the error code; XML_SCHEMAP_SRC_CT_1 is used temporarily.
- *
- * SPEC (1) "The values of the properties of a complex type definition must
- * be as described in the property tableau in The Complex Type Definition
- * Schema Component ($3.4.1), modulo the impact of Missing
- * Sub-components ($5.3)."
- */
- if ((type->baseType != NULL) &&
- (WXS_IS_SIMPLE(type->baseType)) &&
- (WXS_IS_EXTENSION(type) == 0)) {
- /*
- * SPEC (2) "If the {base type definition} is a simple type definition,
- * the {derivation method} must be extension."
- */
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_SRC_CT_1,
- NULL, WXS_BASIC_CAST type,
- "If the base type is a simple type, the derivation method must be "
- "'extension'", NULL, NULL);
- return (XML_SCHEMAP_SRC_CT_1);
- }
- /*
- * SPEC (3) "Circular definitions are disallowed, except for the `ur-type
- * definition`. That is, it must be possible to reach the `ur-type
- * definition` by repeatedly following the {base type definition}."
- *
- * NOTE (3) is done in xmlSchemaCheckTypeDefCircular().
- */
- /*
- * NOTE that (4) and (5) need the following:
- * - attribute uses need to be already inherited (apply attr. prohibitions)
- * - attribute group references need to be expanded already
- * - simple types need to be typefixed already
- */
- if (type->attrUses &&
- (((xmlSchemaItemListPtr) type->attrUses)->nbItems > 1))
- {
- xmlSchemaItemListPtr uses = (xmlSchemaItemListPtr) type->attrUses;
- xmlSchemaAttributeUsePtr use, tmp;
- int i, j, hasId = 0;
-
- for (i = uses->nbItems -1; i >= 0; i--) {
- use = uses->items[i];
-
- /*
- * SPEC ct-props-correct
- * (4) "Two distinct attribute declarations in the
- * {attribute uses} must not have identical {name}s and
- * {target namespace}s."
- */
- if (i > 0) {
- for (j = i -1; j >= 0; j--) {
- tmp = uses->items[j];
- if ((WXS_ATTRUSE_DECL_NAME(use) ==
- WXS_ATTRUSE_DECL_NAME(tmp)) &&
- (WXS_ATTRUSE_DECL_TNS(use) ==
- WXS_ATTRUSE_DECL_TNS(tmp)))
- {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_AG_PROPS_CORRECT,
- NULL, WXS_BASIC_CAST type,
- "Duplicate %s",
- xmlSchemaGetComponentDesignation(&str, use),
- NULL);
- FREE_AND_NULL(str);
- /*
- * Remove the duplicate.
- */
- if (xmlSchemaItemListRemove(uses, i) == -1)
- goto exit_failure;
- goto next_use;
- }
- }
- }
- /*
- * SPEC ct-props-correct
- * (5) "Two distinct attribute declarations in the
- * {attribute uses} must not have {type definition}s which
- * are or are derived from ID."
- */
- if (WXS_ATTRUSE_TYPEDEF(use) != NULL) {
- if (xmlSchemaIsDerivedFromBuiltInType(
- WXS_ATTRUSE_TYPEDEF(use), XML_SCHEMAS_ID))
- {
- if (hasId) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_AG_PROPS_CORRECT,
- NULL, WXS_BASIC_CAST type,
- "There must not exist more than one attribute "
- "declaration of type 'xs:ID' "
- "(or derived from 'xs:ID'). The %s violates this "
- "constraint",
- xmlSchemaGetComponentDesignation(&str, use),
- NULL);
- FREE_AND_NULL(str);
- if (xmlSchemaItemListRemove(uses, i) == -1)
- goto exit_failure;
- }
-
- hasId = 1;
- }
- }
-next_use: {}
- }
- }
- return (0);
-exit_failure:
- return(-1);
-}
-
-static int
-xmlSchemaAreEqualTypes(xmlSchemaTypePtr typeA,
- xmlSchemaTypePtr typeB)
-{
- /*
- * TODO: This should implement component-identity
- * in the future.
- */
- if ((typeA == NULL) || (typeB == NULL))
- return (0);
- return (typeA == typeB);
-}
-
-/**
- * xmlSchemaCheckCOSCTDerivedOK:
- * @ctxt: the schema parser context
- * @type: the to-be derived complex type definition
- * @baseType: the base complex type definition
- * @set: the given set
- *
- * Schema Component Constraint:
- * Type Derivation OK (Complex) (cos-ct-derived-ok)
- *
- * STATUS: completed
- *
- * Returns 0 if the constraints are satisfied, or 1
- * if not.
- */
-static int
-xmlSchemaCheckCOSCTDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
- xmlSchemaTypePtr type,
- xmlSchemaTypePtr baseType,
- int set)
-{
- int equal = xmlSchemaAreEqualTypes(type, baseType);
- /* TODO: Error codes. */
- /*
- * SPEC "For a complex type definition (call it D, for derived)
- * to be validly derived from a type definition (call this
- * B, for base) given a subset of {extension, restriction}
- * all of the following must be true:"
- */
- if (! equal) {
- /*
- * SPEC (1) "If B and D are not the same type definition, then the
- * {derivation method} of D must not be in the subset."
- */
- if (((set & SUBSET_EXTENSION) && (WXS_IS_EXTENSION(type))) ||
- ((set & SUBSET_RESTRICTION) && (WXS_IS_RESTRICTION(type))))
- return (1);
- } else {
- /*
- * SPEC (2.1) "B and D must be the same type definition."
- */
- return (0);
- }
- /*
- * SPEC (2.2) "B must be D's {base type definition}."
- */
- if (type->baseType == baseType)
- return (0);
- /*
- * SPEC (2.3.1) "D's {base type definition} must not be the `ur-type
- * definition`."
- */
- if (WXS_IS_ANYTYPE(type->baseType))
- return (1);
-
- if (WXS_IS_COMPLEX(type->baseType)) {
- /*
- * SPEC (2.3.2.1) "If D's {base type definition} is complex, then it
- * must be validly derived from B given the subset as defined by this
- * constraint."
- */
- return (xmlSchemaCheckCOSCTDerivedOK(actxt, type->baseType,
- baseType, set));
- } else {
- /*
- * SPEC (2.3.2.2) "If D's {base type definition} is simple, then it
- * must be validly derived from B given the subset as defined in Type
- * Derivation OK (Simple) ($3.14.6).
- */
- return (xmlSchemaCheckCOSSTDerivedOK(actxt, type->baseType,
- baseType, set));
- }
-}
-
-/**
- * xmlSchemaCheckCOSDerivedOK:
- * @type: the derived simple type definition
- * @baseType: the base type definition
- *
- * Calls:
- * Type Derivation OK (Simple) AND Type Derivation OK (Complex)
- *
- * Checks wheter @type can be validly derived from @baseType.
- *
- * Returns 0 on success, an positive error code otherwise.
- */
-static int
-xmlSchemaCheckCOSDerivedOK(xmlSchemaAbstractCtxtPtr actxt,
- xmlSchemaTypePtr type,
- xmlSchemaTypePtr baseType,
- int set)
-{
- if (WXS_IS_SIMPLE(type))
- return (xmlSchemaCheckCOSSTDerivedOK(actxt, type, baseType, set));
- else
- return (xmlSchemaCheckCOSCTDerivedOK(actxt, type, baseType, set));
-}
-
-/**
- * xmlSchemaCheckCOSCTExtends:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- *
- * (3.4.6) Constraints on Complex Type Definition Schema Components
- * Schema Component Constraint:
- * Derivation Valid (Extension) (cos-ct-extends)
- *
- * STATUS:
- * missing:
- * (1.5)
- * (1.4.3.2.2.2) "Particle Valid (Extension)"
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckCOSCTExtends(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaTypePtr type)
-{
- xmlSchemaTypePtr base = type->baseType;
- /*
- * TODO: Correct the error code; XML_SCHEMAP_COS_CT_EXTENDS_1_1 is used
- * temporarily only.
- */
- /*
- * SPEC (1) "If the {base type definition} is a complex type definition,
- * then all of the following must be true:"
- */
- if (WXS_IS_COMPLEX(base)) {
- /*
- * SPEC (1.1) "The {final} of the {base type definition} must not
- * contain extension."
- */
- if (base->flags & XML_SCHEMAS_TYPE_FINAL_EXTENSION) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_COS_CT_EXTENDS_1_1,
- WXS_BASIC_CAST type, NULL,
- "The 'final' of the base type definition "
- "contains 'extension'", NULL);
- return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
- }
-
- /*
- * ATTENTION: The constrains (1.2) and (1.3) are not applied,
- * since they are automatically satisfied through the
- * inheriting mechanism.
- * Note that even if redefining components, the inheriting mechanism
- * is used.
- */
-#if 0
- /*
- * SPEC (1.2) "Its {attribute uses} must be a subset of the {attribute
- * uses}
- * of the complex type definition itself, that is, for every attribute
- * use in the {attribute uses} of the {base type definition}, there
- * must be an attribute use in the {attribute uses} of the complex
- * type definition itself whose {attribute declaration} has the same
- * {name}, {target namespace} and {type definition} as its attribute
- * declaration"
- */
- if (base->attrUses != NULL) {
- int i, j, found;
- xmlSchemaAttributeUsePtr use, buse;
-
- for (i = 0; i < (WXS_LIST_CAST base->attrUses)->nbItems; i ++) {
- buse = (WXS_LIST_CAST base->attrUses)->items[i];
- found = 0;
- if (type->attrUses != NULL) {
- use = (WXS_LIST_CAST type->attrUses)->items[j];
- for (j = 0; j < (WXS_LIST_CAST type->attrUses)->nbItems; j ++)
- {
- if ((WXS_ATTRUSE_DECL_NAME(use) ==
- WXS_ATTRUSE_DECL_NAME(buse)) &&
- (WXS_ATTRUSE_DECL_TNS(use) ==
- WXS_ATTRUSE_DECL_TNS(buse)) &&
- (WXS_ATTRUSE_TYPEDEF(use) ==
- WXS_ATTRUSE_TYPEDEF(buse))
- {
- found = 1;
- break;
- }
- }
- }
- if (! found) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAP_COS_CT_EXTENDS_1_2,
- NULL, WXS_BASIC_CAST type,
- /*
- * TODO: The report does not indicate that also the
- * type needs to be the same.
- */
- "This type is missing a matching correspondent "
- "for its {base type}'s %s in its {attribute uses}",
- xmlSchemaGetComponentDesignation(&str,
- buse->children),
- NULL);
- FREE_AND_NULL(str)
- }
- }
- }
- /*
- * SPEC (1.3) "If it has an {attribute wildcard}, the complex type
- * definition must also have one, and the base type definition's
- * {attribute wildcard}'s {namespace constraint} must be a subset
- * of the complex type definition's {attribute wildcard}'s {namespace
- * constraint}, as defined by Wildcard Subset ($3.10.6)."
- */
-
- /*
- * MAYBE TODO: Enable if ever needed. But this will be needed only
- * if created the type via a schema construction API.
- */
- if (base->attributeWildcard != NULL) {
- if (type->attributeWilcard == NULL) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_COS_CT_EXTENDS_1_3,
- NULL, type,
- "The base %s has an attribute wildcard, "
- "but this type is missing an attribute wildcard",
- xmlSchemaGetComponentDesignation(&str, base));
- FREE_AND_NULL(str)
-
- } else if (xmlSchemaCheckCOSNSSubset(
- base->attributeWildcard, type->attributeWildcard))
- {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_COS_CT_EXTENDS_1_3,
- NULL, type,
- "The attribute wildcard is not a valid "
- "superset of the one in the base %s",
- xmlSchemaGetComponentDesignation(&str, base));
- FREE_AND_NULL(str)
- }
- }
-#endif
- /*
- * SPEC (1.4) "One of the following must be true:"
- */
- if ((type->contentTypeDef != NULL) &&
- (type->contentTypeDef == base->contentTypeDef)) {
- /*
- * SPEC (1.4.1) "The {content type} of the {base type definition}
- * and the {content type} of the complex type definition itself
- * must be the same simple type definition"
- * PASS
- */
- } else if ((type->contentType == XML_SCHEMA_CONTENT_EMPTY) &&
- (base->contentType == XML_SCHEMA_CONTENT_EMPTY) ) {
- /*
- * SPEC (1.4.2) "The {content type} of both the {base type
- * definition} and the complex type definition itself must
- * be empty."
- * PASS
- */
- } else {
- /*
- * SPEC (1.4.3) "All of the following must be true:"
- */
- if (type->subtypes == NULL) {
- /*
- * SPEC 1.4.3.1 The {content type} of the complex type
- * definition itself must specify a particle.
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_COS_CT_EXTENDS_1_1,
- WXS_BASIC_CAST type, NULL,
- "The content type must specify a particle", NULL);
- return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
- }
- /*
- * SPEC (1.4.3.2) "One of the following must be true:"
- */
- if (base->contentType == XML_SCHEMA_CONTENT_EMPTY) {
- /*
- * SPEC (1.4.3.2.1) "The {content type} of the {base type
- * definition} must be empty.
- * PASS
- */
- } else {
- /*
- * SPEC (1.4.3.2.2) "All of the following must be true:"
- */
- if ((type->contentType != base->contentType) ||
- ((type->contentType != XML_SCHEMA_CONTENT_MIXED) &&
- (type->contentType != XML_SCHEMA_CONTENT_ELEMENTS))) {
- /*
- * SPEC (1.4.3.2.2.1) "Both {content type}s must be mixed
- * or both must be element-only."
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_COS_CT_EXTENDS_1_1,
- WXS_BASIC_CAST type, NULL,
- "The content type of both, the type and its base "
- "type, must either 'mixed' or 'element-only'", NULL);
- return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
- }
- /*
- * URGENT TODO SPEC (1.4.3.2.2.2) "The particle of the
- * complex type definition must be a `valid extension`
- * of the {base type definition}'s particle, as defined
- * in Particle Valid (Extension) ($3.9.6)."
- *
- * NOTE that we won't check "Particle Valid (Extension)",
- * since it is ensured by the derivation process in
- * xmlSchemaTypeFixup(). We need to implement this when heading
- * for a construction API
- * TODO: !! This is needed to be checked if redefining a type !!
- */
- }
- /*
- * URGENT TODO (1.5)
- */
- }
- } else {
- /*
- * SPEC (2) "If the {base type definition} is a simple type definition,
- * then all of the following must be true:"
- */
- if (type->contentTypeDef != base) {
- /*
- * SPEC (2.1) "The {content type} must be the same simple type
- * definition."
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_COS_CT_EXTENDS_1_1,
- WXS_BASIC_CAST type, NULL,
- "The content type must be the simple base type", NULL);
- return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
- }
- if (base->flags & XML_SCHEMAS_TYPE_FINAL_EXTENSION) {
- /*
- * SPEC (2.2) "The {final} of the {base type definition} must not
- * contain extension"
- * NOTE that this is the same as (1.1).
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_COS_CT_EXTENDS_1_1,
- WXS_BASIC_CAST type, NULL,
- "The 'final' of the base type definition "
- "contains 'extension'", NULL);
- return (XML_SCHEMAP_COS_CT_EXTENDS_1_1);
- }
- }
- return (0);
-}
-
-/**
- * xmlSchemaCheckDerivationOKRestriction:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- *
- * (3.4.6) Constraints on Complex Type Definition Schema Components
- * Schema Component Constraint:
- * Derivation Valid (Restriction, Complex) (derivation-ok-restriction)
- *
- * STATUS:
- * missing:
- * (5.4.2) ???
- *
- * ATTENTION:
- * In XML Schema 1.1 this will be:
- * Validation Rule: Checking complex type subsumption
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckDerivationOKRestriction(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaTypePtr type)
-{
- xmlSchemaTypePtr base;
-
- /*
- * TODO: Correct the error code; XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1 is used
- * temporarily only.
- */
- base = type->baseType;
- if (! WXS_IS_COMPLEX(base)) {
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
- type->node, WXS_BASIC_CAST type,
- "The base type must be a complex type", NULL, NULL);
- return(ctxt->err);
- }
- if (base->flags & XML_SCHEMAS_TYPE_FINAL_RESTRICTION) {
- /*
- * SPEC (1) "The {base type definition} must be a complex type
- * definition whose {final} does not contain restriction."
- */
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
- type->node, WXS_BASIC_CAST type,
- "The 'final' of the base type definition "
- "contains 'restriction'", NULL, NULL);
- return (ctxt->err);
- }
- /*
- * SPEC (2), (3) and (4)
- * Those are handled in a separate function, since the
- * same constraints are needed for redefinition of
- * attribute groups as well.
- */
- if (xmlSchemaCheckDerivationOKRestriction2to4(ctxt,
- XML_SCHEMA_ACTION_DERIVE,
- WXS_BASIC_CAST type, WXS_BASIC_CAST base,
- type->attrUses, base->attrUses,
- type->attributeWildcard,
- base->attributeWildcard) == -1)
- {
- return(-1);
- }
- /*
- * SPEC (5) "One of the following must be true:"
- */
- if (base->builtInType == XML_SCHEMAS_ANYTYPE) {
- /*
- * SPEC (5.1) "The {base type definition} must be the
- * `ur-type definition`."
- * PASS
- */
- } else if ((type->contentType == XML_SCHEMA_CONTENT_SIMPLE) ||
- (type->contentType == XML_SCHEMA_CONTENT_BASIC)) {
- /*
- * SPEC (5.2.1) "The {content type} of the complex type definition
- * must be a simple type definition"
- *
- * SPEC (5.2.2) "One of the following must be true:"
- */
- if ((base->contentType == XML_SCHEMA_CONTENT_SIMPLE) ||
- (base->contentType == XML_SCHEMA_CONTENT_BASIC))
- {
- int err;
- /*
- * SPEC (5.2.2.1) "The {content type} of the {base type
- * definition} must be a simple type definition from which
- * the {content type} is validly derived given the empty
- * set as defined in Type Derivation OK (Simple) ($3.14.6)."
- *
- * ATTENTION TODO: This seems not needed if the type implicitely
- * derived from the base type.
- *
- */
- err = xmlSchemaCheckCOSSTDerivedOK(ACTXT_CAST ctxt,
- type->contentTypeDef, base->contentTypeDef, 0);
- if (err != 0) {
- xmlChar *strA = NULL, *strB = NULL;
-
- if (err == -1)
- return(-1);
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
- NULL, WXS_BASIC_CAST type,
- "The {content type} %s is not validly derived from the "
- "base type's {content type} %s",
- xmlSchemaGetComponentDesignation(&strA,
- type->contentTypeDef),
- xmlSchemaGetComponentDesignation(&strB,
- base->contentTypeDef));
- FREE_AND_NULL(strA);
- FREE_AND_NULL(strB);
- return(ctxt->err);
- }
- } else if ((base->contentType == XML_SCHEMA_CONTENT_MIXED) &&
- (xmlSchemaIsParticleEmptiable(
- (xmlSchemaParticlePtr) base->subtypes))) {
- /*
- * SPEC (5.2.2.2) "The {base type definition} must be mixed
- * and have a particle which is `emptiable` as defined in
- * Particle Emptiable ($3.9.6)."
- * PASS
- */
- } else {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
- WXS_BASIC_CAST type, NULL,
- "The content type of the base type must be either "
- "a simple type or 'mixed' and an emptiable particle", NULL);
- return (ctxt->err);
- }
- } else if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) {
- /*
- * SPEC (5.3.1) "The {content type} of the complex type itself must
- * be empty"
- */
- if (base->contentType == XML_SCHEMA_CONTENT_EMPTY) {
- /*
- * SPEC (5.3.2.1) "The {content type} of the {base type
- * definition} must also be empty."
- * PASS
- */
- } else if (((base->contentType == XML_SCHEMA_CONTENT_ELEMENTS) ||
- (base->contentType == XML_SCHEMA_CONTENT_MIXED)) &&
- xmlSchemaIsParticleEmptiable(
- (xmlSchemaParticlePtr) base->subtypes)) {
- /*
- * SPEC (5.3.2.2) "The {content type} of the {base type
- * definition} must be elementOnly or mixed and have a particle
- * which is `emptiable` as defined in Particle Emptiable ($3.9.6)."
- * PASS
- */
- } else {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
- WXS_BASIC_CAST type, NULL,
- "The content type of the base type must be either "
- "empty or 'mixed' (or 'elements-only') and an emptiable "
- "particle", NULL);
- return (ctxt->err);
- }
- } else if ((type->contentType == XML_SCHEMA_CONTENT_ELEMENTS) ||
- WXS_HAS_MIXED_CONTENT(type)) {
- /*
- * SPEC (5.4.1.1) "The {content type} of the complex type definition
- * itself must be element-only"
- */
- if (WXS_HAS_MIXED_CONTENT(type) && (! WXS_HAS_MIXED_CONTENT(base))) {
- /*
- * SPEC (5.4.1.2) "The {content type} of the complex type
- * definition itself and of the {base type definition} must be
- * mixed"
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
- WXS_BASIC_CAST type, NULL,
- "If the content type is 'mixed', then the content type of the "
- "base type must also be 'mixed'", NULL);
- return (ctxt->err);
- }
- /*
- * SPEC (5.4.2) "The particle of the complex type definition itself
- * must be a `valid restriction` of the particle of the {content
- * type} of the {base type definition} as defined in Particle Valid
- * (Restriction) ($3.9.6).
- *
- * URGENT TODO: (5.4.2)
- */
- } else {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_DERIVATION_OK_RESTRICTION_1,
- WXS_BASIC_CAST type, NULL,
- "The type is not a valid restriction of its base type", NULL);
- return (ctxt->err);
- }
- return (0);
-}
-
-/**
- * xmlSchemaCheckCTComponent:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- *
- * (3.4.6) Constraints on Complex Type Definition Schema Components
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckCTComponent(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaTypePtr type)
-{
- int ret;
- /*
- * Complex Type Definition Properties Correct
- */
- ret = xmlSchemaCheckCTPropsCorrect(ctxt, type);
- if (ret != 0)
- return (ret);
- if (WXS_IS_EXTENSION(type))
- ret = xmlSchemaCheckCOSCTExtends(ctxt, type);
- else
- ret = xmlSchemaCheckDerivationOKRestriction(ctxt, type);
- return (ret);
-}
-
-/**
- * xmlSchemaCheckSRCCT:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- *
- * (3.4.3) Constraints on XML Representations of Complex Type Definitions:
- * Schema Representation Constraint:
- * Complex Type Definition Representation OK (src-ct)
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckSRCCT(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaTypePtr type)
-{
- xmlSchemaTypePtr base;
- int ret = 0;
-
- /*
- * TODO: Adjust the error codes here, as I used
- * XML_SCHEMAP_SRC_CT_1 only yet.
- */
- base = type->baseType;
- if (! WXS_HAS_SIMPLE_CONTENT(type)) {
- /*
- * 1 If the <complexContent> alternative is chosen, the type definition
- * `resolved` to by the `actual value` of the base [attribute]
- * must be a complex type definition;
- */
- if (! WXS_IS_COMPLEX(base)) {
- xmlChar *str = NULL;
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_CT_1,
- WXS_BASIC_CAST type, type->node,
- "If using <complexContent>, the base type is expected to be "
- "a complex type. The base type '%s' is a simple type",
- xmlSchemaFormatQName(&str, base->targetNamespace,
- base->name));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_SRC_CT_1);
- }
- } else {
- /*
- * SPEC
- * 2 If the <simpleContent> alternative is chosen, all of the
- * following must be true:
- * 2.1 The type definition `resolved` to by the `actual value` of the
- * base [attribute] must be one of the following:
- */
- if (WXS_IS_SIMPLE(base)) {
- if (WXS_IS_EXTENSION(type) == 0) {
- xmlChar *str = NULL;
- /*
- * 2.1.3 only if the <extension> alternative is also
- * chosen, a simple type definition.
- */
- /* TODO: Change error code to ..._SRC_CT_2_1_3. */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_CT_1,
- WXS_BASIC_CAST type, NULL,
- "If using <simpleContent> and <restriction>, the base "
- "type must be a complex type. The base type '%s' is "
- "a simple type",
- xmlSchemaFormatQName(&str, base->targetNamespace,
- base->name));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_SRC_CT_1);
- }
- } else {
- /* Base type is a complex type. */
- if ((base->contentType == XML_SCHEMA_CONTENT_SIMPLE) ||
- (base->contentType == XML_SCHEMA_CONTENT_BASIC)) {
- /*
- * 2.1.1 a complex type definition whose {content type} is a
- * simple type definition;
- * PASS
- */
- if (base->contentTypeDef == NULL) {
- xmlSchemaPCustomErr(ctxt, XML_SCHEMAP_INTERNAL,
- WXS_BASIC_CAST type, NULL,
- "Internal error: xmlSchemaCheckSRCCT, "
- "'%s', base type has no content type",
- type->name);
- return (-1);
- }
- } else if ((base->contentType == XML_SCHEMA_CONTENT_MIXED) &&
- (WXS_IS_RESTRICTION(type))) {
-
- /*
- * 2.1.2 only if the <restriction> alternative is also
- * chosen, a complex type definition whose {content type}
- * is mixed and a particle emptiable.
- */
- if (! xmlSchemaIsParticleEmptiable(
- (xmlSchemaParticlePtr) base->subtypes)) {
- ret = XML_SCHEMAP_SRC_CT_1;
- } else
- /*
- * Attention: at this point the <simpleType> child is in
- * ->contentTypeDef (put there during parsing).
- */
- if (type->contentTypeDef == NULL) {
- xmlChar *str = NULL;
- /*
- * 2.2 If clause 2.1.2 above is satisfied, then there
- * must be a <simpleType> among the [children] of
- * <restriction>.
- */
- /* TODO: Change error code to ..._SRC_CT_2_2. */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_CT_1,
- WXS_BASIC_CAST type, NULL,
- "A <simpleType> is expected among the children "
- "of <restriction>, if <simpleContent> is used and "
- "the base type '%s' is a complex type",
- xmlSchemaFormatQName(&str, base->targetNamespace,
- base->name));
- FREE_AND_NULL(str)
- return (XML_SCHEMAP_SRC_CT_1);
- }
- } else {
- ret = XML_SCHEMAP_SRC_CT_1;
- }
- }
- if (ret > 0) {
- xmlChar *str = NULL;
- if (WXS_IS_RESTRICTION(type)) {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_CT_1,
- WXS_BASIC_CAST type, NULL,
- "If <simpleContent> and <restriction> is used, the "
- "base type must be a simple type or a complex type with "
- "mixed content and particle emptiable. The base type "
- "'%s' is none of those",
- xmlSchemaFormatQName(&str, base->targetNamespace,
- base->name));
- } else {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_CT_1,
- WXS_BASIC_CAST type, NULL,
- "If <simpleContent> and <extension> is used, the "
- "base type must be a simple type. The base type '%s' "
- "is a complex type",
- xmlSchemaFormatQName(&str, base->targetNamespace,
- base->name));
- }
- FREE_AND_NULL(str)
- }
- }
- /*
- * SPEC (3) "The corresponding complex type definition component must
- * satisfy the conditions set out in Constraints on Complex Type
- * Definition Schema Components ($3.4.6);"
- * NOTE (3) will be done in xmlSchemaTypeFixup().
- */
- /*
- * SPEC (4) If clause 2.2.1 or clause 2.2.2 in the correspondence specification
- * above for {attribute wildcard} is satisfied, the intensional
- * intersection must be expressible, as defined in Attribute Wildcard
- * Intersection ($3.10.6).
- * NOTE (4) is done in xmlSchemaFixupTypeAttributeUses().
- */
- return (ret);
-}
-
-#ifdef ENABLE_PARTICLE_RESTRICTION
-/**
- * xmlSchemaCheckParticleRangeOK:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Occurrence Range OK (range-ok)
- *
- * STATUS: complete
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckParticleRangeOK(int rmin, int rmax,
- int bmin, int bmax)
-{
- if (rmin < bmin)
- return (1);
- if ((bmax != UNBOUNDED) &&
- (rmax > bmax))
- return (1);
- return (0);
-}
-
-/**
- * xmlSchemaCheckRCaseNameAndTypeOK:
- * @ctxt: the schema parser context
- * @r: the restricting element declaration particle
- * @b: the base element declaration particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Restriction OK (Elt:Elt -- NameAndTypeOK)
- * (rcase-NameAndTypeOK)
- *
- * STATUS:
- * MISSING (3.2.3)
- * CLARIFY: (3.2.2)
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseNameAndTypeOK(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr r,
- xmlSchemaParticlePtr b)
-{
- xmlSchemaElementPtr elemR, elemB;
-
- /* TODO: Error codes (rcase-NameAndTypeOK). */
- elemR = (xmlSchemaElementPtr) r->children;
- elemB = (xmlSchemaElementPtr) b->children;
- /*
- * SPEC (1) "The declarations' {name}s and {target namespace}s are
- * the same."
- */
- if ((elemR != elemB) &&
- ((! xmlStrEqual(elemR->name, elemB->name)) ||
- (! xmlStrEqual(elemR->targetNamespace, elemB->targetNamespace))))
- return (1);
- /*
- * SPEC (2) "R's occurrence range is a valid restriction of B's
- * occurrence range as defined by Occurrence Range OK ($3.9.6)."
- */
- if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
- b->minOccurs, b->maxOccurs) != 0)
- return (1);
- /*
- * SPEC (3.1) "Both B's declaration's {scope} and R's declaration's
- * {scope} are global."
- */
- if (elemR == elemB)
- return (0);
- /*
- * SPEC (3.2.1) "Either B's {nillable} is true or R's {nillable} is false."
- */
- if (((elemB->flags & XML_SCHEMAS_ELEM_NILLABLE) == 0) &&
- (elemR->flags & XML_SCHEMAS_ELEM_NILLABLE))
- return (1);
- /*
- * SPEC (3.2.2) "either B's declaration's {value constraint} is absent,
- * or is not fixed, or R's declaration's {value constraint} is fixed
- * with the same value."
- */
- if ((elemB->value != NULL) && (elemB->flags & XML_SCHEMAS_ELEM_FIXED) &&
- ((elemR->value == NULL) ||
- ((elemR->flags & XML_SCHEMAS_ELEM_FIXED) == 0) ||
- /* TODO: Equality of the initial value or normalized or canonical? */
- (! xmlStrEqual(elemR->value, elemB->value))))
- return (1);
- /*
- * TODO: SPEC (3.2.3) "R's declaration's {identity-constraint
- * definitions} is a subset of B's declaration's {identity-constraint
- * definitions}, if any."
- */
- if (elemB->idcs != NULL) {
- /* TODO */
- }
- /*
- * SPEC (3.2.4) "R's declaration's {disallowed substitutions} is a
- * superset of B's declaration's {disallowed substitutions}."
- */
- if (((elemB->flags & XML_SCHEMAS_ELEM_BLOCK_EXTENSION) &&
- ((elemR->flags & XML_SCHEMAS_ELEM_BLOCK_EXTENSION) == 0)) ||
- ((elemB->flags & XML_SCHEMAS_ELEM_BLOCK_RESTRICTION) &&
- ((elemR->flags & XML_SCHEMAS_ELEM_BLOCK_RESTRICTION) == 0)) ||
- ((elemB->flags & XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION) &&
- ((elemR->flags & XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION) == 0)))
- return (1);
- /*
- * SPEC (3.2.5) "R's {type definition} is validly derived given
- * {extension, list, union} from B's {type definition}"
- *
- * BADSPEC TODO: What's the point of adding "list" and "union" to the
- * set, if the corresponding constraints handle "restriction" and
- * "extension" only?
- *
- */
- {
- int set = 0;
-
- set |= SUBSET_EXTENSION;
- set |= SUBSET_LIST;
- set |= SUBSET_UNION;
- if (xmlSchemaCheckCOSDerivedOK(ACTXT_CAST ctxt, elemR->subtypes,
- elemB->subtypes, set) != 0)
- return (1);
- }
- return (0);
-}
-
-/**
- * xmlSchemaCheckRCaseNSCompat:
- * @ctxt: the schema parser context
- * @r: the restricting element declaration particle
- * @b: the base wildcard particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (Elt:Any -- NSCompat)
- * (rcase-NSCompat)
- *
- * STATUS: complete
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseNSCompat(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr r,
- xmlSchemaParticlePtr b)
-{
- /* TODO:Error codes (rcase-NSCompat). */
- /*
- * SPEC "For an element declaration particle to be a `valid restriction`
- * of a wildcard particle all of the following must be true:"
- *
- * SPEC (1) "The element declaration's {target namespace} is `valid`
- * with respect to the wildcard's {namespace constraint} as defined by
- * Wildcard allows Namespace Name ($3.10.4)."
- */
- if (xmlSchemaCheckCVCWildcardNamespace((xmlSchemaWildcardPtr) b->children,
- ((xmlSchemaElementPtr) r->children)->targetNamespace) != 0)
- return (1);
- /*
- * SPEC (2) "R's occurrence range is a valid restriction of B's
- * occurrence range as defined by Occurrence Range OK ($3.9.6)."
- */
- if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
- b->minOccurs, b->maxOccurs) != 0)
- return (1);
-
- return (0);
-}
-
-/**
- * xmlSchemaCheckRCaseRecurseAsIfGroup:
- * @ctxt: the schema parser context
- * @r: the restricting element declaration particle
- * @b: the base model group particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (Elt:All/Choice/Sequence -- RecurseAsIfGroup)
- * (rcase-RecurseAsIfGroup)
- *
- * STATUS: TODO
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseRecurseAsIfGroup(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr r,
- xmlSchemaParticlePtr b)
-{
- /* TODO: Error codes (rcase-RecurseAsIfGroup). */
- TODO
- return (0);
-}
-
-/**
- * xmlSchemaCheckRCaseNSSubset:
- * @ctxt: the schema parser context
- * @r: the restricting wildcard particle
- * @b: the base wildcard particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (Any:Any -- NSSubset)
- * (rcase-NSSubset)
- *
- * STATUS: complete
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseNSSubset(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr r,
- xmlSchemaParticlePtr b,
- int isAnyTypeBase)
-{
- /* TODO: Error codes (rcase-NSSubset). */
- /*
- * SPEC (1) "R's occurrence range is a valid restriction of B's
- * occurrence range as defined by Occurrence Range OK ($3.9.6)."
- */
- if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
- b->minOccurs, b->maxOccurs))
- return (1);
- /*
- * SPEC (2) "R's {namespace constraint} must be an intensional subset
- * of B's {namespace constraint} as defined by Wildcard Subset ($3.10.6)."
- */
- if (xmlSchemaCheckCOSNSSubset((xmlSchemaWildcardPtr) r->children,
- (xmlSchemaWildcardPtr) b->children))
- return (1);
- /*
- * SPEC (3) "Unless B is the content model wildcard of the `ur-type
- * definition`, R's {process contents} must be identical to or stronger
- * than B's {process contents}, where strict is stronger than lax is
- * stronger than skip."
- */
- if (! isAnyTypeBase) {
- if ( ((xmlSchemaWildcardPtr) r->children)->processContents <
- ((xmlSchemaWildcardPtr) b->children)->processContents)
- return (1);
- }
-
- return (0);
-}
-
-/**
- * xmlSchemaCheckCOSParticleRestrict:
- * @ctxt: the schema parser context
- * @type: the complex type definition
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Valid (Restriction) (cos-particle-restrict)
- *
- * STATUS: TODO
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckCOSParticleRestrict(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr r,
- xmlSchemaParticlePtr b)
-{
- int ret = 0;
-
- /*part = WXS_TYPE_PARTICLE(type);
- basePart = WXS_TYPE_PARTICLE(base);
- */
-
- TODO
-
- /*
- * SPEC (1) "They are the same particle."
- */
- if (r == b)
- return (0);
-
-
- return (0);
-}
-
-#if 0
-/**
- * xmlSchemaCheckRCaseNSRecurseCheckCardinality:
- * @ctxt: the schema parser context
- * @r: the model group particle
- * @b: the base wildcard particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (All/Choice/Sequence:Any --
- * NSRecurseCheckCardinality)
- * (rcase-NSRecurseCheckCardinality)
- *
- * STATUS: TODO: subst-groups
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseNSRecurseCheckCardinality(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr r,
- xmlSchemaParticlePtr b)
-{
- xmlSchemaParticlePtr part;
- /* TODO: Error codes (rcase-NSRecurseCheckCardinality). */
- if ((r->children == NULL) || (r->children->children == NULL))
- return (-1);
- /*
- * SPEC "For a group particle to be a `valid restriction` of a
- * wildcard particle..."
- *
- * SPEC (1) "Every member of the {particles} of the group is a `valid
- * restriction` of the wildcard as defined by
- * Particle Valid (Restriction) ($3.9.6)."
- */
- part = (xmlSchemaParticlePtr) r->children->children;
- do {
- if (xmlSchemaCheckCOSParticleRestrict(ctxt, part, b))
- return (1);
- part = (xmlSchemaParticlePtr) part->next;
- } while (part != NULL);
- /*
- * SPEC (2) "The effective total range of the group [...] is a
- * valid restriction of B's occurrence range as defined by
- * Occurrence Range OK ($3.9.6)."
- */
- if (xmlSchemaCheckParticleRangeOK(
- xmlSchemaGetParticleTotalRangeMin(r),
- xmlSchemaGetParticleTotalRangeMax(r),
- b->minOccurs, b->maxOccurs) != 0)
- return (1);
- return (0);
-}
-#endif
-
-/**
- * xmlSchemaCheckRCaseRecurse:
- * @ctxt: the schema parser context
- * @r: the <all> or <sequence> model group particle
- * @b: the base <all> or <sequence> model group particle
- *
- * (3.9.6) Constraints on Particle Schema Components
- * Schema Component Constraint:
- * Particle Derivation OK (All:All,Sequence:Sequence --
- Recurse)
- * (rcase-Recurse)
- *
- * STATUS: ?
- * TODO: subst-groups
- *
- * Returns 0 if the constraints are satisfied, a positive
- * error code if not and -1 if an internal error occured.
- */
-static int
-xmlSchemaCheckRCaseRecurse(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaParticlePtr r,
- xmlSchemaParticlePtr b)
-{
- /* xmlSchemaParticlePtr part; */
- /* TODO: Error codes (rcase-Recurse). */
- if ((r->children == NULL) || (b->children == NULL) ||
- (r->children->type != b->children->type))
- return (-1);
- /*
- * SPEC "For an all or sequence group particle to be a `valid
- * restriction` of another group particle with the same {compositor}..."
- *
- * SPEC (1) "R's occurrence range is a valid restriction of B's
- * occurrence range as defined by Occurrence Range OK ($3.9.6)."
- */
- if (xmlSchemaCheckParticleRangeOK(r->minOccurs, r->maxOccurs,
- b->minOccurs, b->maxOccurs))
- return (1);
-
-
- return (0);
-}
-
-#endif
-
-#define FACET_RESTR_MUTUAL_ERR(fac1, fac2) \
- xmlSchemaPCustomErrExt(pctxt, \
- XML_SCHEMAP_INVALID_FACET_VALUE, \
- WXS_BASIC_CAST fac1, fac1->node, \
- "It is an error for both '%s' and '%s' to be specified on the "\
- "same type definition", \
- BAD_CAST xmlSchemaFacetTypeToString(fac1->type), \
- BAD_CAST xmlSchemaFacetTypeToString(fac2->type), NULL);
-
-#define FACET_RESTR_ERR(fac1, msg) \
- xmlSchemaPCustomErr(pctxt, \
- XML_SCHEMAP_INVALID_FACET_VALUE, \
- WXS_BASIC_CAST fac1, fac1->node, \
- msg, NULL);
-
-#define FACET_RESTR_FIXED_ERR(fac) \
- xmlSchemaPCustomErr(pctxt, \
- XML_SCHEMAP_INVALID_FACET_VALUE, \
- WXS_BASIC_CAST fac, fac->node, \
- "The base type's facet is 'fixed', thus the value must not " \
- "differ", NULL);
-
-static void
-xmlSchemaDeriveFacetErr(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaFacetPtr facet1,
- xmlSchemaFacetPtr facet2,
- int lessGreater,
- int orEqual,
- int ofBase)
-{
- xmlChar *msg = NULL;
-
- msg = xmlStrdup(BAD_CAST "'");
- msg = xmlStrcat(msg, xmlSchemaFacetTypeToString(facet1->type));
- msg = xmlStrcat(msg, BAD_CAST "' has to be");
- if (lessGreater == 0)
- msg = xmlStrcat(msg, BAD_CAST " equal to");
- if (lessGreater == 1)
- msg = xmlStrcat(msg, BAD_CAST " greater than");
- else
- msg = xmlStrcat(msg, BAD_CAST " less than");
-
- if (orEqual)
- msg = xmlStrcat(msg, BAD_CAST " or equal to");
- msg = xmlStrcat(msg, BAD_CAST " '");
- msg = xmlStrcat(msg, xmlSchemaFacetTypeToString(facet2->type));
- if (ofBase)
- msg = xmlStrcat(msg, BAD_CAST "' of the base type");
- else
- msg = xmlStrcat(msg, BAD_CAST "'");
-
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_INVALID_FACET_VALUE,
- WXS_BASIC_CAST facet1, NULL,
- (const char *) msg, NULL);
-
- if (msg != NULL)
- xmlFree(msg);
-}
-
-/*
-* xmlSchemaDeriveAndValidateFacets:
-*
-* Schema Component Constraint: Simple Type Restriction (Facets)
-* (st-restrict-facets)
-*/
-static int
-xmlSchemaDeriveAndValidateFacets(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- xmlSchemaTypePtr base = type->baseType;
- xmlSchemaFacetLinkPtr link, cur, last = NULL;
- xmlSchemaFacetPtr facet, bfacet,
- flength = NULL, ftotdig = NULL, ffracdig = NULL,
- fmaxlen = NULL, fminlen = NULL, /* facets of the current type */
- fmininc = NULL, fmaxinc = NULL,
- fminexc = NULL, fmaxexc = NULL,
- bflength = NULL, bftotdig = NULL, bffracdig = NULL,
- bfmaxlen = NULL, bfminlen = NULL, /* facets of the base type */
- bfmininc = NULL, bfmaxinc = NULL,
- bfminexc = NULL, bfmaxexc = NULL;
- int res; /* err = 0, fixedErr; */
-
- /*
- * SPEC st-restrict-facets 1:
- * "The {variety} of R is the same as that of B."
- */
- /*
- * SPEC st-restrict-facets 2:
- * "If {variety} is atomic, the {primitive type definition}
- * of R is the same as that of B."
- *
- * NOTE: we leave 1 & 2 out for now, since this will be
- * satisfied by the derivation process.
- * CONSTRUCTION TODO: Maybe needed if using a construction API.
- */
- /*
- * SPEC st-restrict-facets 3:
- * "The {facets} of R are the union of S and the {facets}
- * of B, eliminating duplicates. To eliminate duplicates,
- * when a facet of the same kind occurs in both S and the
- * {facets} of B, the one in the {facets} of B is not
- * included, with the exception of enumeration and pattern
- * facets, for which multiple occurrences with distinct values
- * are allowed."
- */
-
- if ((type->facetSet == NULL) && (base->facetSet == NULL))
- return (0);
-
- last = type->facetSet;
- if (last != NULL)
- while (last->next != NULL)
- last = last->next;
-
- for (cur = type->facetSet; cur != NULL; cur = cur->next) {
- facet = cur->facet;
- switch (facet->type) {
- case XML_SCHEMA_FACET_LENGTH:
- flength = facet; break;
- case XML_SCHEMA_FACET_MINLENGTH:
- fminlen = facet; break;
- case XML_SCHEMA_FACET_MININCLUSIVE:
- fmininc = facet; break;
- case XML_SCHEMA_FACET_MINEXCLUSIVE:
- fminexc = facet; break;
- case XML_SCHEMA_FACET_MAXLENGTH:
- fmaxlen = facet; break;
- case XML_SCHEMA_FACET_MAXINCLUSIVE:
- fmaxinc = facet; break;
- case XML_SCHEMA_FACET_MAXEXCLUSIVE:
- fmaxexc = facet; break;
- case XML_SCHEMA_FACET_TOTALDIGITS:
- ftotdig = facet; break;
- case XML_SCHEMA_FACET_FRACTIONDIGITS:
- ffracdig = facet; break;
- default:
- break;
- }
- }
- for (cur = base->facetSet; cur != NULL; cur = cur->next) {
- facet = cur->facet;
- switch (facet->type) {
- case XML_SCHEMA_FACET_LENGTH:
- bflength = facet; break;
- case XML_SCHEMA_FACET_MINLENGTH:
- bfminlen = facet; break;
- case XML_SCHEMA_FACET_MININCLUSIVE:
- bfmininc = facet; break;
- case XML_SCHEMA_FACET_MINEXCLUSIVE:
- bfminexc = facet; break;
- case XML_SCHEMA_FACET_MAXLENGTH:
- bfmaxlen = facet; break;
- case XML_SCHEMA_FACET_MAXINCLUSIVE:
- bfmaxinc = facet; break;
- case XML_SCHEMA_FACET_MAXEXCLUSIVE:
- bfmaxexc = facet; break;
- case XML_SCHEMA_FACET_TOTALDIGITS:
- bftotdig = facet; break;
- case XML_SCHEMA_FACET_FRACTIONDIGITS:
- bffracdig = facet; break;
- default:
- break;
- }
- }
- /*
- * length and minLength or maxLength (2.2) + (3.2)
- */
- if (flength && (fminlen || fmaxlen)) {
- FACET_RESTR_ERR(flength, "It is an error for both 'length' and "
- "either of 'minLength' or 'maxLength' to be specified on "
- "the same type definition")
- }
- /*
- * Mutual exclusions in the same derivation step.
- */
- if ((fmaxinc) && (fmaxexc)) {
- /*
- * SCC "maxInclusive and maxExclusive"
- */
- FACET_RESTR_MUTUAL_ERR(fmaxinc, fmaxexc)
- }
- if ((fmininc) && (fminexc)) {
- /*
- * SCC "minInclusive and minExclusive"
- */
- FACET_RESTR_MUTUAL_ERR(fmininc, fminexc)
- }
-
- if (flength && bflength) {
- /*
- * SCC "length valid restriction"
- * The values have to be equal.
- */
- res = xmlSchemaCompareValues(flength->val, bflength->val);
- if (res == -2)
- goto internal_error;
- if (res != 0)
- xmlSchemaDeriveFacetErr(pctxt, flength, bflength, 0, 0, 1);
- if ((res != 0) && (bflength->fixed)) {
- FACET_RESTR_FIXED_ERR(flength)
- }
-
- }
- if (fminlen && bfminlen) {
- /*
- * SCC "minLength valid restriction"
- * minLength >= BASE minLength
- */
- res = xmlSchemaCompareValues(fminlen->val, bfminlen->val);
- if (res == -2)
- goto internal_error;
- if (res == -1)
- xmlSchemaDeriveFacetErr(pctxt, fminlen, bfminlen, 1, 1, 1);
- if ((res != 0) && (bfminlen->fixed)) {
- FACET_RESTR_FIXED_ERR(fminlen)
- }
- }
- if (fmaxlen && bfmaxlen) {
- /*
- * SCC "maxLength valid restriction"
- * maxLength <= BASE minLength
- */
- res = xmlSchemaCompareValues(fmaxlen->val, bfmaxlen->val);
- if (res == -2)
- goto internal_error;
- if (res == 1)
- xmlSchemaDeriveFacetErr(pctxt, fmaxlen, bfmaxlen, -1, 1, 1);
- if ((res != 0) && (bfmaxlen->fixed)) {
- FACET_RESTR_FIXED_ERR(fmaxlen)
- }
- }
- /*
- * SCC "length and minLength or maxLength"
- */
- if (! flength)
- flength = bflength;
- if (flength) {
- if (! fminlen)
- fminlen = bfminlen;
- if (fminlen) {
- /* (1.1) length >= minLength */
- res = xmlSchemaCompareValues(flength->val, fminlen->val);
- if (res == -2)
- goto internal_error;
- if (res == -1)
- xmlSchemaDeriveFacetErr(pctxt, flength, fminlen, 1, 1, 0);
- }
- if (! fmaxlen)
- fmaxlen = bfmaxlen;
- if (fmaxlen) {
- /* (2.1) length <= maxLength */
- res = xmlSchemaCompareValues(flength->val, fmaxlen->val);
- if (res == -2)
- goto internal_error;
- if (res == 1)
- xmlSchemaDeriveFacetErr(pctxt, flength, fmaxlen, -1, 1, 0);
- }
- }
- if (fmaxinc) {
- /*
- * "maxInclusive"
- */
- if (fmininc) {
- /* SCC "maxInclusive >= minInclusive" */
- res = xmlSchemaCompareValues(fmaxinc->val, fmininc->val);
- if (res == -2)
- goto internal_error;
- if (res == -1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxinc, fmininc, 1, 1, 0);
- }
- }
- /*
- * SCC "maxInclusive valid restriction"
- */
- if (bfmaxinc) {
- /* maxInclusive <= BASE maxInclusive */
- res = xmlSchemaCompareValues(fmaxinc->val, bfmaxinc->val);
- if (res == -2)
- goto internal_error;
- if (res == 1)
- xmlSchemaDeriveFacetErr(pctxt, fmaxinc, bfmaxinc, -1, 1, 1);
- if ((res != 0) && (bfmaxinc->fixed)) {
- FACET_RESTR_FIXED_ERR(fmaxinc)
- }
- }
- if (bfmaxexc) {
- /* maxInclusive < BASE maxExclusive */
- res = xmlSchemaCompareValues(fmaxinc->val, bfmaxexc->val);
- if (res == -2)
- goto internal_error;
- if (res != -1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxinc, bfmaxexc, -1, 0, 1);
- }
- }
- if (bfmininc) {
- /* maxInclusive >= BASE minInclusive */
- res = xmlSchemaCompareValues(fmaxinc->val, bfmininc->val);
- if (res == -2)
- goto internal_error;
- if (res == -1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxinc, bfmininc, 1, 1, 1);
- }
- }
- if (bfminexc) {
- /* maxInclusive > BASE minExclusive */
- res = xmlSchemaCompareValues(fmaxinc->val, bfminexc->val);
- if (res == -2)
- goto internal_error;
- if (res != 1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxinc, bfminexc, 1, 0, 1);
- }
- }
- }
- if (fmaxexc) {
- /*
- * "maxExclusive >= minExclusive"
- */
- if (fminexc) {
- res = xmlSchemaCompareValues(fmaxexc->val, fminexc->val);
- if (res == -2)
- goto internal_error;
- if (res == -1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxexc, fminexc, 1, 1, 0);
- }
- }
- /*
- * "maxExclusive valid restriction"
- */
- if (bfmaxexc) {
- /* maxExclusive <= BASE maxExclusive */
- res = xmlSchemaCompareValues(fmaxexc->val, bfmaxexc->val);
- if (res == -2)
- goto internal_error;
- if (res == 1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxexc, bfmaxexc, -1, 1, 1);
- }
- if ((res != 0) && (bfmaxexc->fixed)) {
- FACET_RESTR_FIXED_ERR(fmaxexc)
- }
- }
- if (bfmaxinc) {
- /* maxExclusive <= BASE maxInclusive */
- res = xmlSchemaCompareValues(fmaxexc->val, bfmaxinc->val);
- if (res == -2)
- goto internal_error;
- if (res == 1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxexc, bfmaxinc, -1, 1, 1);
- }
- }
- if (bfmininc) {
- /* maxExclusive > BASE minInclusive */
- res = xmlSchemaCompareValues(fmaxexc->val, bfmininc->val);
- if (res == -2)
- goto internal_error;
- if (res != 1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxexc, bfmininc, 1, 0, 1);
- }
- }
- if (bfminexc) {
- /* maxExclusive > BASE minExclusive */
- res = xmlSchemaCompareValues(fmaxexc->val, bfminexc->val);
- if (res == -2)
- goto internal_error;
- if (res != 1) {
- xmlSchemaDeriveFacetErr(pctxt, fmaxexc, bfminexc, 1, 0, 1);
- }
- }
- }
- if (fminexc) {
- /*
- * "minExclusive < maxInclusive"
- */
- if (fmaxinc) {
- res = xmlSchemaCompareValues(fminexc->val, fmaxinc->val);
- if (res == -2)
- goto internal_error;
- if (res != -1) {
- xmlSchemaDeriveFacetErr(pctxt, fminexc, fmaxinc, -1, 0, 0);
- }
- }
- /*
- * "minExclusive valid restriction"
- */
- if (bfminexc) {
- /* minExclusive >= BASE minExclusive */
- res = xmlSchemaCompareValues(fminexc->val, bfminexc->val);
- if (res == -2)
- goto internal_error;
- if (res == -1) {
- xmlSchemaDeriveFacetErr(pctxt, fminexc, bfminexc, 1, 1, 1);
- }
- if ((res != 0) && (bfminexc->fixed)) {
- FACET_RESTR_FIXED_ERR(fminexc)
- }
- }
- if (bfmaxinc) {
- /* minExclusive <= BASE maxInclusive */
- res = xmlSchemaCompareValues(fminexc->val, bfmaxinc->val);
- if (res == -2)
- goto internal_error;
- if (res == 1) {
- xmlSchemaDeriveFacetErr(pctxt, fminexc, bfmaxinc, -1, 1, 1);
- }
- }
- if (bfmininc) {
- /* minExclusive >= BASE minInclusive */
- res = xmlSchemaCompareValues(fminexc->val, bfmininc->val);
- if (res == -2)
- goto internal_error;
- if (res == -1) {
- xmlSchemaDeriveFacetErr(pctxt, fminexc, bfmininc, 1, 1, 1);
- }
- }
- if (bfmaxexc) {
- /* minExclusive < BASE maxExclusive */
- res = xmlSchemaCompareValues(fminexc->val, bfmaxexc->val);
- if (res == -2)
- goto internal_error;
- if (res != -1) {
- xmlSchemaDeriveFacetErr(pctxt, fminexc, bfmaxexc, -1, 0, 1);
- }
- }
- }
- if (fmininc) {
- /*
- * "minInclusive < maxExclusive"
- */
- if (fmaxexc) {
- res = xmlSchemaCompareValues(fmininc->val, fmaxexc->val);
- if (res == -2)
- goto internal_error;
- if (res != -1) {
- xmlSchemaDeriveFacetErr(pctxt, fmininc, fmaxexc, -1, 0, 0);
- }
- }
- /*
- * "minExclusive valid restriction"
- */
- if (bfmininc) {
- /* minInclusive >= BASE minInclusive */
- res = xmlSchemaCompareValues(fmininc->val, bfmininc->val);
- if (res == -2)
- goto internal_error;
- if (res == -1) {
- xmlSchemaDeriveFacetErr(pctxt, fmininc, bfmininc, 1, 1, 1);
- }
- if ((res != 0) && (bfmininc->fixed)) {
- FACET_RESTR_FIXED_ERR(fmininc)
- }
- }
- if (bfmaxinc) {
- /* minInclusive <= BASE maxInclusive */
- res = xmlSchemaCompareValues(fmininc->val, bfmaxinc->val);
- if (res == -2)
- goto internal_error;
- if (res == 1) {
- xmlSchemaDeriveFacetErr(pctxt, fmininc, bfmaxinc, -1, 1, 1);
- }
- }
- if (bfminexc) {
- /* minInclusive > BASE minExclusive */
- res = xmlSchemaCompareValues(fmininc->val, bfminexc->val);
- if (res == -2)
- goto internal_error;
- if (res != 1)
- xmlSchemaDeriveFacetErr(pctxt, fmininc, bfminexc, 1, 0, 1);
- }
- if (bfmaxexc) {
- /* minInclusive < BASE maxExclusive */
- res = xmlSchemaCompareValues(fmininc->val, bfmaxexc->val);
- if (res == -2)
- goto internal_error;
- if (res != -1)
- xmlSchemaDeriveFacetErr(pctxt, fmininc, bfmaxexc, -1, 0, 1);
- }
- }
- if (ftotdig && bftotdig) {
- /*
- * SCC " totalDigits valid restriction"
- * totalDigits <= BASE totalDigits
- */
- res = xmlSchemaCompareValues(ftotdig->val, bftotdig->val);
- if (res == -2)
- goto internal_error;
- if (res == 1)
- xmlSchemaDeriveFacetErr(pctxt, ftotdig, bftotdig,
- -1, 1, 1);
- if ((res != 0) && (bftotdig->fixed)) {
- FACET_RESTR_FIXED_ERR(ftotdig)
- }
- }
- if (ffracdig && bffracdig) {
- /*
- * SCC "fractionDigits valid restriction"
- * fractionDigits <= BASE fractionDigits
- */
- res = xmlSchemaCompareValues(ffracdig->val, bffracdig->val);
- if (res == -2)
- goto internal_error;
- if (res == 1)
- xmlSchemaDeriveFacetErr(pctxt, ffracdig, bffracdig,
- -1, 1, 1);
- if ((res != 0) && (bffracdig->fixed)) {
- FACET_RESTR_FIXED_ERR(ffracdig)
- }
- }
- /*
- * SCC "fractionDigits less than or equal to totalDigits"
- */
- if (! ftotdig)
- ftotdig = bftotdig;
- if (! ffracdig)
- ffracdig = bffracdig;
- if (ftotdig && ffracdig) {
- res = xmlSchemaCompareValues(ffracdig->val, ftotdig->val);
- if (res == -2)
- goto internal_error;
- if (res == 1)
- xmlSchemaDeriveFacetErr(pctxt, ffracdig, ftotdig,
- -1, 1, 0);
- }
- /*
- * *Enumerations* won' be added here, since only the first set
- * of enumerations in the ancestor-or-self axis is used
- * for validation, plus we need to use the base type of those
- * enumerations for whitespace.
- *
- * *Patterns*: won't be add here, since they are ORed at
- * type level and ANDed at ancestor level. This will
- * happed during validation by walking the base axis
- * of the type.
- */
- for (cur = base->facetSet; cur != NULL; cur = cur->next) {
- bfacet = cur->facet;
- /*
- * Special handling of enumerations and patterns.
- * TODO: hmm, they should not appear in the set, so remove this.
- */
- if ((bfacet->type == XML_SCHEMA_FACET_PATTERN) ||
- (bfacet->type == XML_SCHEMA_FACET_ENUMERATION))
- continue;
- /*
- * Search for a duplicate facet in the current type.
- */
- link = type->facetSet;
- /* err = 0; */
- /* fixedErr = 0; */
- while (link != NULL) {
- facet = link->facet;
- if (facet->type == bfacet->type) {
- switch (facet->type) {
- case XML_SCHEMA_FACET_WHITESPACE:
- /*
- * The whitespace must be stronger.
- */
- if (facet->whitespace < bfacet->whitespace) {
- FACET_RESTR_ERR(facet,
- "The 'whitespace' value has to be equal to "
- "or stronger than the 'whitespace' value of "
- "the base type")
- }
- if ((bfacet->fixed) &&
- (facet->whitespace != bfacet->whitespace)) {
- FACET_RESTR_FIXED_ERR(facet)
- }
- break;
- default:
- break;
- }
- /* Duplicate found. */
- break;
- }
- link = link->next;
- }
- /*
- * If no duplicate was found: add the base types's facet
- * to the set.
- */
- if (link == NULL) {
- link = (xmlSchemaFacetLinkPtr)
- xmlMalloc(sizeof(xmlSchemaFacetLink));
- if (link == NULL) {
- xmlSchemaPErrMemory(pctxt,
- "deriving facets, creating a facet link", NULL);
- return (-1);
- }
- link->facet = cur->facet;
- link->next = NULL;
- if (last == NULL)
- type->facetSet = link;
- else
- last->next = link;
- last = link;
- }
-
- }
-
- return (0);
-internal_error:
- PERROR_INT("xmlSchemaDeriveAndValidateFacets",
- "an error occured");
- return (-1);
-}
-
-static int
-xmlSchemaFinishMemberTypeDefinitionsProperty(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- xmlSchemaTypeLinkPtr link, lastLink, prevLink, subLink, newLink;
- /*
- * The actual value is then formed by replacing any union type
- * definition in the `explicit members` with the members of their
- * {member type definitions}, in order.
- *
- * TODO: There's a bug entry at
- * "http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005JulSep/0287.html"
- * which indicates that we'll keep the union types the future.
- */
- link = type->memberTypes;
- while (link != NULL) {
-
- if (WXS_IS_TYPE_NOT_FIXED(link->type))
- xmlSchemaTypeFixup(link->type, ACTXT_CAST pctxt);
-
- if (WXS_IS_UNION(link->type)) {
- subLink = xmlSchemaGetUnionSimpleTypeMemberTypes(link->type);
- if (subLink != NULL) {
- link->type = subLink->type;
- if (subLink->next != NULL) {
- lastLink = link->next;
- subLink = subLink->next;
- prevLink = link;
- while (subLink != NULL) {
- newLink = (xmlSchemaTypeLinkPtr)
- xmlMalloc(sizeof(xmlSchemaTypeLink));
- if (newLink == NULL) {
- xmlSchemaPErrMemory(pctxt, "allocating a type link",
- NULL);
- return (-1);
- }
- newLink->type = subLink->type;
- prevLink->next = newLink;
- prevLink = newLink;
- newLink->next = lastLink;
-
- subLink = subLink->next;
- }
- }
- }
- }
- link = link->next;
- }
- return (0);
-}
-
-static void
-xmlSchemaTypeFixupOptimFacets(xmlSchemaTypePtr type)
-{
- int has = 0, needVal = 0, normVal = 0;
-
- has = (type->baseType->flags & XML_SCHEMAS_TYPE_HAS_FACETS) ? 1 : 0;
- if (has) {
- needVal = (type->baseType->flags &
- XML_SCHEMAS_TYPE_FACETSNEEDVALUE) ? 1 : 0;
- normVal = (type->baseType->flags &
- XML_SCHEMAS_TYPE_NORMVALUENEEDED) ? 1 : 0;
- }
- if (type->facets != NULL) {
- xmlSchemaFacetPtr fac;
-
- for (fac = type->facets; fac != NULL; fac = fac->next) {
- switch (fac->type) {
- case XML_SCHEMA_FACET_WHITESPACE:
- break;
- case XML_SCHEMA_FACET_PATTERN:
- normVal = 1;
- has = 1;
- break;
- case XML_SCHEMA_FACET_ENUMERATION:
- needVal = 1;
- normVal = 1;
- has = 1;
- break;
- default:
- has = 1;
- break;
- }
- }
- }
- if (normVal)
- type->flags |= XML_SCHEMAS_TYPE_NORMVALUENEEDED;
- if (needVal)
- type->flags |= XML_SCHEMAS_TYPE_FACETSNEEDVALUE;
- if (has)
- type->flags |= XML_SCHEMAS_TYPE_HAS_FACETS;
-
- if (has && (! needVal) && WXS_IS_ATOMIC(type)) {
- xmlSchemaTypePtr prim = xmlSchemaGetPrimitiveType(type);
- /*
- * OPTIMIZE VAL TODO: Some facets need a computed value.
- */
- if ((prim->builtInType != XML_SCHEMAS_ANYSIMPLETYPE) &&
- (prim->builtInType != XML_SCHEMAS_STRING)) {
- type->flags |= XML_SCHEMAS_TYPE_FACETSNEEDVALUE;
- }
- }
-}
-
-static int
-xmlSchemaTypeFixupWhitespace(xmlSchemaTypePtr type)
-{
-
-
- /*
- * Evaluate the whitespace-facet value.
- */
- if (WXS_IS_LIST(type)) {
- type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE;
- return (0);
- } else if (WXS_IS_UNION(type))
- return (0);
-
- if (type->facetSet != NULL) {
- xmlSchemaFacetLinkPtr lin;
-
- for (lin = type->facetSet; lin != NULL; lin = lin->next) {
- if (lin->facet->type == XML_SCHEMA_FACET_WHITESPACE) {
- switch (lin->facet->whitespace) {
- case XML_SCHEMAS_FACET_PRESERVE:
- type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE;
- break;
- case XML_SCHEMAS_FACET_REPLACE:
- type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_REPLACE;
- break;
- case XML_SCHEMAS_FACET_COLLAPSE:
- type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE;
- break;
- default:
- return (-1);
- }
- return (0);
- }
- }
- }
- /*
- * For all `atomic` datatypes other than string (and types `derived`
- * by `restriction` from it) the value of whiteSpace is fixed to
- * collapse
- */
- {
- xmlSchemaTypePtr anc;
-
- for (anc = type->baseType; anc != NULL &&
- anc->builtInType != XML_SCHEMAS_ANYTYPE;
- anc = anc->baseType) {
-
- if (anc->type == XML_SCHEMA_TYPE_BASIC) {
- if (anc->builtInType == XML_SCHEMAS_NORMSTRING) {
- type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_REPLACE;
-
- } else if ((anc->builtInType == XML_SCHEMAS_STRING) ||
- (anc->builtInType == XML_SCHEMAS_ANYSIMPLETYPE)) {
- type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE;
-
- } else
- type->flags |= XML_SCHEMAS_TYPE_WHITESPACE_COLLAPSE;
- break;
- }
- }
- }
- return (0);
-}
-
-static int
-xmlSchemaFixupSimpleTypeStageOne(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- if (type->type != XML_SCHEMA_TYPE_SIMPLE)
- return(0);
- if (! WXS_IS_TYPE_NOT_FIXED_1(type))
- return(0);
- type->flags |= XML_SCHEMAS_TYPE_FIXUP_1;
-
- if (WXS_IS_LIST(type)) {
- /*
- * Corresponds to <simpleType><list>...
- */
- if (type->subtypes == NULL) {
- /*
- * This one is really needed, so get out.
- */
- PERROR_INT("xmlSchemaFixupSimpleTypeStageOne",
- "list type has no item-type assigned");
- return(-1);
- }
- } else if (WXS_IS_UNION(type)) {
- /*
- * Corresponds to <simpleType><union>...
- */
- if (type->memberTypes == NULL) {
- /*
- * This one is really needed, so get out.
- */
- PERROR_INT("xmlSchemaFixupSimpleTypeStageOne",
- "union type has no member-types assigned");
- return(-1);
- }
- } else {
- /*
- * Corresponds to <simpleType><restriction>...
- */
- if (type->baseType == NULL) {
- PERROR_INT("xmlSchemaFixupSimpleTypeStageOne",
- "type has no base-type assigned");
- return(-1);
- }
- if (WXS_IS_TYPE_NOT_FIXED_1(type->baseType))
- if (xmlSchemaFixupSimpleTypeStageOne(pctxt, type->baseType) == -1)
- return(-1);
- /*
- * Variety
- * If the <restriction> alternative is chosen, then the
- * {variety} of the {base type definition}.
- */
- if (WXS_IS_ATOMIC(type->baseType))
- type->flags |= XML_SCHEMAS_TYPE_VARIETY_ATOMIC;
- else if (WXS_IS_LIST(type->baseType)) {
- type->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
- /*
- * Inherit the itemType.
- */
- type->subtypes = type->baseType->subtypes;
- } else if (WXS_IS_UNION(type->baseType)) {
- type->flags |= XML_SCHEMAS_TYPE_VARIETY_UNION;
- /*
- * NOTE that we won't assign the memberTypes of the base,
- * since this will make trouble when freeing them; we will
- * use a lookup function to access them instead.
- */
- }
- }
- return(0);
-}
-
-#ifdef DEBUG_TYPE
-static void
-xmlSchemaDebugFixedType(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- if (type->node != NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "Type of %s : %s:%d :", name,
- type->node->doc->URL,
- xmlGetLineNo(type->node));
- } else {
- xmlGenericError(xmlGenericErrorContext, "Type of %s :", name);
- }
- if ((WXS_IS_SIMPLE(type)) || (WXS_IS_COMPLEX(type))) {
- switch (type->contentType) {
- case XML_SCHEMA_CONTENT_SIMPLE:
- xmlGenericError(xmlGenericErrorContext, "simple\n");
- break;
- case XML_SCHEMA_CONTENT_ELEMENTS:
- xmlGenericError(xmlGenericErrorContext, "elements\n");
- break;
- case XML_SCHEMA_CONTENT_UNKNOWN:
- xmlGenericError(xmlGenericErrorContext, "unknown !!!\n");
- break;
- case XML_SCHEMA_CONTENT_EMPTY:
- xmlGenericError(xmlGenericErrorContext, "empty\n");
- break;
- case XML_SCHEMA_CONTENT_MIXED:
- if (xmlSchemaIsParticleEmptiable((xmlSchemaParticlePtr)
- type->subtypes))
- xmlGenericError(xmlGenericErrorContext,
- "mixed as emptiable particle\n");
- else
- xmlGenericError(xmlGenericErrorContext, "mixed\n");
- break;
- /* Removed, since not used. */
- /*
- case XML_SCHEMA_CONTENT_MIXED_OR_ELEMENTS:
- xmlGenericError(xmlGenericErrorContext, "mixed or elems\n");
- break;
- */
- case XML_SCHEMA_CONTENT_BASIC:
- xmlGenericError(xmlGenericErrorContext, "basic\n");
- break;
- default:
- xmlGenericError(xmlGenericErrorContext,
- "not registered !!!\n");
- break;
- }
- }
-}
-#endif
-
-/*
-* 3.14.6 Constraints on Simple Type Definition Schema Components
-*/
-static int
-xmlSchemaFixupSimpleTypeStageTwo(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- int res, olderrs = pctxt->nberrors;
-
- if (type->type != XML_SCHEMA_TYPE_SIMPLE)
- return(-1);
-
- if (! WXS_IS_TYPE_NOT_FIXED(type))
- return(0);
-
- type->flags |= XML_SCHEMAS_TYPE_INTERNAL_RESOLVED;
- type->contentType = XML_SCHEMA_CONTENT_SIMPLE;
-
- if (type->baseType == NULL) {
- PERROR_INT("xmlSchemaFixupSimpleTypeStageTwo",
- "missing baseType");
- goto exit_failure;
- }
- if (WXS_IS_TYPE_NOT_FIXED(type->baseType))
- xmlSchemaTypeFixup(type->baseType, ACTXT_CAST pctxt);
- /*
- * If a member type of a union is a union itself, we need to substitute
- * that member type for its member types.
- * NOTE that this might change in WXS 1.1; i.e. we will keep the union
- * types in WXS 1.1.
- */
- if ((type->memberTypes != NULL) &&
- (xmlSchemaFinishMemberTypeDefinitionsProperty(pctxt, type) == -1))
- return(-1);
- /*
- * SPEC src-simple-type 1
- * "The corresponding simple type definition, if any, must satisfy
- * the conditions set out in Constraints on Simple Type Definition
- * Schema Components ($3.14.6)."
- */
- /*
- * Schema Component Constraint: Simple Type Definition Properties Correct
- * (st-props-correct)
- */
- res = xmlSchemaCheckSTPropsCorrect(pctxt, type);
- HFAILURE HERROR
- /*
- * Schema Component Constraint: Derivation Valid (Restriction, Simple)
- * (cos-st-restricts)
- */
- res = xmlSchemaCheckCOSSTRestricts(pctxt, type);
- HFAILURE HERROR
- /*
- * TODO: Removed the error report, since it got annoying to get an
- * extra error report, if anything failed until now.
- * Enable this if needed.
- *
- * xmlSchemaPErr(ctxt, type->node,
- * XML_SCHEMAP_SRC_SIMPLE_TYPE_1,
- * "Simple type '%s' does not satisfy the constraints "
- * "on simple type definitions.\n",
- * type->name, NULL);
- */
- /*
- * Schema Component Constraint: Simple Type Restriction (Facets)
- * (st-restrict-facets)
- */
- res = xmlSchemaCheckFacetValues(type, pctxt);
- HFAILURE HERROR
- if ((type->facetSet != NULL) ||
- (type->baseType->facetSet != NULL)) {
- res = xmlSchemaDeriveAndValidateFacets(pctxt, type);
- HFAILURE HERROR
- }
- /*
- * Whitespace value.
- */
- res = xmlSchemaTypeFixupWhitespace(type);
- HFAILURE HERROR
- xmlSchemaTypeFixupOptimFacets(type);
-
-exit_error:
-#ifdef DEBUG_TYPE
- xmlSchemaDebugFixedType(pctxt, type);
-#endif
- if (olderrs != pctxt->nberrors)
- return(pctxt->err);
- return(0);
-
-exit_failure:
-#ifdef DEBUG_TYPE
- xmlSchemaDebugFixedType(pctxt, type);
-#endif
- return(-1);
-}
-
-static int
-xmlSchemaFixupComplexType(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaTypePtr type)
-{
- int res = 0, olderrs = pctxt->nberrors;
- xmlSchemaTypePtr baseType = type->baseType;
-
- if (! WXS_IS_TYPE_NOT_FIXED(type))
- return(0);
- type->flags |= XML_SCHEMAS_TYPE_INTERNAL_RESOLVED;
- if (baseType == NULL) {
- PERROR_INT("xmlSchemaFixupComplexType",
- "missing baseType");
- goto exit_failure;
- }
- /*
- * Fixup the base type.
- */
- if (WXS_IS_TYPE_NOT_FIXED(baseType))
- xmlSchemaTypeFixup(baseType, ACTXT_CAST pctxt);
- if (baseType->flags & XML_SCHEMAS_TYPE_INTERNAL_INVALID) {
- /*
- * Skip fixup if the base type is invalid.
- * TODO: Generate a warning!
- */
- return(0);
- }
- /*
- * This basically checks if the base type can be derived.
- */
- res = xmlSchemaCheckSRCCT(pctxt, type);
- HFAILURE HERROR
- /*
- * Fixup the content type.
- */
- if (type->contentType == XML_SCHEMA_CONTENT_SIMPLE) {
- /*
- * Corresponds to <complexType><simpleContent>...
- */
- if ((WXS_IS_COMPLEX(baseType)) &&
- (baseType->contentTypeDef != NULL) &&
- (WXS_IS_RESTRICTION(type))) {
- xmlSchemaTypePtr contentBase, content;
-#ifdef ENABLE_NAMED_LOCALS
- char buf[30];
- const xmlChar *tmpname;
-#endif
- /*
- * SPEC (1) If <restriction> + base type is <complexType>,
- * "whose own {content type} is a simple type..."
- */
- if (type->contentTypeDef != NULL) {
- /*
- * SPEC (1.1) "the simple type definition corresponding to the
- * <simpleType> among the [children] of <restriction> if there
- * is one;"
- * Note that this "<simpleType> among the [children]" was put
- * into ->contentTypeDef during parsing.
- */
- contentBase = type->contentTypeDef;
- type->contentTypeDef = NULL;
- } else {
- /*
- * (1.2) "...otherwise (<restriction> has no <simpleType>
- * among its [children]), the simple type definition which
- * is the {content type} of the ... base type."
- */
- contentBase = baseType->contentTypeDef;
- }
- /*
- * SPEC
- * "... a simple type definition which restricts the simple
- * type definition identified in clause 1.1 or clause 1.2
- * with a set of facet components"
- *
- * Create the anonymous simple type, which will be the content
- * type of the complex type.
- */
-#ifdef ENABLE_NAMED_LOCALS
- snprintf(buf, 29, "#scST%d", ++(pctxt->counter));
- tmpname = xmlDictLookup(pctxt->dict, BAD_CAST buf, -1);
- content = xmlSchemaAddType(pctxt, pctxt->schema,
- XML_SCHEMA_TYPE_SIMPLE, tmpname, type->targetNamespace,
- type->node, 0);
-#else
- content = xmlSchemaAddType(pctxt, pctxt->schema,
- XML_SCHEMA_TYPE_SIMPLE, NULL, type->targetNamespace,
- type->node, 0);
-#endif
- if (content == NULL)
- goto exit_failure;
- /*
- * We will use the same node as for the <complexType>
- * to have it somehow anchored in the schema doc.
- */
- content->type = XML_SCHEMA_TYPE_SIMPLE;
- content->baseType = contentBase;
- /*
- * Move the facets, previously anchored on the
- * complexType during parsing.
- */
- content->facets = type->facets;
- type->facets = NULL;
- content->facetSet = type->facetSet;
- type->facetSet = NULL;
-
- type->contentTypeDef = content;
- if (WXS_IS_TYPE_NOT_FIXED(contentBase))
- xmlSchemaTypeFixup(contentBase, ACTXT_CAST pctxt);
- /*
- * Fixup the newly created type. We don't need to check
- * for circularity here.
- */
- res = xmlSchemaFixupSimpleTypeStageOne(pctxt, content);
- HFAILURE HERROR
- res = xmlSchemaFixupSimpleTypeStageTwo(pctxt, content);
- HFAILURE HERROR
-
- } else if ((WXS_IS_COMPLEX(baseType)) &&
- (baseType->contentType == XML_SCHEMA_CONTENT_MIXED) &&
- (WXS_IS_RESTRICTION(type))) {
- /*
- * SPEC (2) If <restriction> + base is a mixed <complexType> with
- * an emptiable particle, then a simple type definition which
- * restricts the <restriction>'s <simpleType> child.
- */
- if ((type->contentTypeDef == NULL) ||
- (type->contentTypeDef->baseType == NULL)) {
- /*
- * TODO: Check if this ever happens.
- */
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_INTERNAL,
- WXS_BASIC_CAST type, NULL,
- "Internal error: xmlSchemaTypeFixup, "
- "complex type '%s': the <simpleContent><restriction> "
- "is missing a <simpleType> child, but was not catched "
- "by xmlSchemaCheckSRCCT()", type->name);
- goto exit_failure;
- }
- } else if ((WXS_IS_COMPLEX(baseType)) && WXS_IS_EXTENSION(type)) {
- /*
- * SPEC (3) If <extension> + base is <complexType> with
- * <simpleType> content, "...then the {content type} of that
- * complex type definition"
- */
- if (baseType->contentTypeDef == NULL) {
- /*
- * TODO: Check if this ever happens. xmlSchemaCheckSRCCT
- * should have catched this already.
- */
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_INTERNAL,
- WXS_BASIC_CAST type, NULL,
- "Internal error: xmlSchemaTypeFixup, "
- "complex type '%s': the <extension>ed base type is "
- "a complex type with no simple content type",
- type->name);
- goto exit_failure;
- }
- type->contentTypeDef = baseType->contentTypeDef;
- } else if ((WXS_IS_SIMPLE(baseType)) && WXS_IS_EXTENSION(type)) {
- /*
- * SPEC (4) <extension> + base is <simpleType>
- * "... then that simple type definition"
- */
- type->contentTypeDef = baseType;
- } else {
- /*
- * TODO: Check if this ever happens.
- */
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_INTERNAL,
- WXS_BASIC_CAST type, NULL,
- "Internal error: xmlSchemaTypeFixup, "
- "complex type '%s' with <simpleContent>: unhandled "
- "derivation case", type->name);
- goto exit_failure;
- }
- } else {
- int dummySequence = 0;
- xmlSchemaParticlePtr particle =
- (xmlSchemaParticlePtr) type->subtypes;
- /*
- * Corresponds to <complexType><complexContent>...
- *
- * NOTE that the effective mixed was already set during parsing of
- * <complexType> and <complexContent>; its flag value is
- * XML_SCHEMAS_TYPE_MIXED.
- *
- * Compute the "effective content":
- * (2.1.1) + (2.1.2) + (2.1.3)
- */
- if ((particle == NULL) ||
- ((particle->type == XML_SCHEMA_TYPE_PARTICLE) &&
- ((particle->children->type == XML_SCHEMA_TYPE_ALL) ||
- (particle->children->type == XML_SCHEMA_TYPE_SEQUENCE) ||
- ((particle->children->type == XML_SCHEMA_TYPE_CHOICE) &&
- (particle->minOccurs == 0))) &&
- ( ((xmlSchemaTreeItemPtr) particle->children)->children == NULL))) {
- if (type->flags & XML_SCHEMAS_TYPE_MIXED) {
- /*
- * SPEC (2.1.4) "If the `effective mixed` is true, then
- * a particle whose properties are as follows:..."
- *
- * Empty sequence model group with
- * minOccurs/maxOccurs = 1 (i.e. a "particle emptiable").
- * NOTE that we sill assign it the <complexType> node to
- * somehow anchor it in the doc.
- */
- if ((particle == NULL) ||
- (particle->children->type != XML_SCHEMA_TYPE_SEQUENCE)) {
- /*
- * Create the particle.
- */
- particle = xmlSchemaAddParticle(pctxt,
- type->node, 1, 1);
- if (particle == NULL)
- goto exit_failure;
- /*
- * Create the model group.
- */ /* URGENT TODO: avoid adding to pending items. */
- particle->children = (xmlSchemaTreeItemPtr)
- xmlSchemaAddModelGroup(pctxt, pctxt->schema,
- XML_SCHEMA_TYPE_SEQUENCE, type->node);
- if (particle->children == NULL)
- goto exit_failure;
-
- type->subtypes = (xmlSchemaTypePtr) particle;
- }
- dummySequence = 1;
- type->contentType = XML_SCHEMA_CONTENT_ELEMENTS;
- } else {
- /*
- * SPEC (2.1.5) "otherwise empty"
- */
- type->contentType = XML_SCHEMA_CONTENT_EMPTY;
- }
- } else {
- /*
- * SPEC (2.2) "otherwise the particle corresponding to the
- * <all>, <choice>, <group> or <sequence> among the
- * [children]."
- */
- type->contentType = XML_SCHEMA_CONTENT_ELEMENTS;
- }
- /*
- * Compute the "content type".
- */
- if (WXS_IS_RESTRICTION(type)) {
- /*
- * SPEC (3.1) "If <restriction>..."
- * (3.1.1) + (3.1.2) */
- if (type->contentType != XML_SCHEMA_CONTENT_EMPTY) {
- if (type->flags & XML_SCHEMAS_TYPE_MIXED)
- type->contentType = XML_SCHEMA_CONTENT_MIXED;
- }
- } else {
- /*
- * SPEC (3.2) "If <extension>..."
- */
- if (type->contentType == XML_SCHEMA_CONTENT_EMPTY) {
- /*
- * SPEC (3.2.1)
- * "If the `effective content` is empty, then the
- * {content type} of the [...] base ..."
- */
- type->contentType = baseType->contentType;
- type->subtypes = baseType->subtypes;
- /*
- * Fixes bug #347316:
- * This is the case when the base type has a simple
- * type definition as content.
- */
- type->contentTypeDef = baseType->contentTypeDef;
- /*
- * NOTE that the effective mixed is ignored here.
- */
- } else if (baseType->contentType == XML_SCHEMA_CONTENT_EMPTY) {
- /*
- * SPEC (3.2.2)
- */
- if (type->flags & XML_SCHEMAS_TYPE_MIXED)
- type->contentType = XML_SCHEMA_CONTENT_MIXED;
- } else {
- /*
- * SPEC (3.2.3)
- */
- if (type->flags & XML_SCHEMAS_TYPE_MIXED)
- type->contentType = XML_SCHEMA_CONTENT_MIXED;
- /*
- * "A model group whose {compositor} is sequence and whose
- * {particles} are..."
- */
- if ((WXS_TYPE_PARTICLE(type) != NULL) &&
- (WXS_TYPE_PARTICLE_TERM(type) != NULL) &&
- ((WXS_TYPE_PARTICLE_TERM(type))->type ==
- XML_SCHEMA_TYPE_ALL))
- {
- /*
- * SPEC cos-all-limited (1)
- */
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- /* TODO: error code */
- XML_SCHEMAP_COS_ALL_LIMITED,
- WXS_ITEM_NODE(type), NULL,
- "The type has an 'all' model group in its "
- "{content type} and thus cannot be derived from "
- "a non-empty type, since this would produce a "
- "'sequence' model group containing the 'all' "
- "model group; 'all' model groups are not "
- "allowed to appear inside other model groups",
- NULL, NULL);
-
- } else if ((WXS_TYPE_PARTICLE(baseType) != NULL) &&
- (WXS_TYPE_PARTICLE_TERM(baseType) != NULL) &&
- ((WXS_TYPE_PARTICLE_TERM(baseType))->type ==
- XML_SCHEMA_TYPE_ALL))
- {
- /*
- * SPEC cos-all-limited (1)
- */
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- /* TODO: error code */
- XML_SCHEMAP_COS_ALL_LIMITED,
- WXS_ITEM_NODE(type), NULL,
- "A type cannot be derived by extension from a type "
- "which has an 'all' model group in its "
- "{content type}, since this would produce a "
- "'sequence' model group containing the 'all' "
- "model group; 'all' model groups are not "
- "allowed to appear inside other model groups",
- NULL, NULL);
-
- } else if (! dummySequence) {
- xmlSchemaTreeItemPtr effectiveContent =
- (xmlSchemaTreeItemPtr) type->subtypes;
- /*
- * Create the particle.
- */
- particle = xmlSchemaAddParticle(pctxt,
- type->node, 1, 1);
- if (particle == NULL)
- goto exit_failure;
- /*
- * Create the "sequence" model group.
- */
- particle->children = (xmlSchemaTreeItemPtr)
- xmlSchemaAddModelGroup(pctxt, pctxt->schema,
- XML_SCHEMA_TYPE_SEQUENCE, type->node);
- if (particle->children == NULL)
- goto exit_failure;
- WXS_TYPE_CONTENTTYPE(type) = (xmlSchemaTypePtr) particle;
- /*
- * SPEC "the particle of the {content type} of
- * the ... base ..."
- * Create a duplicate of the base type's particle
- * and assign its "term" to it.
- */
- particle->children->children =
- (xmlSchemaTreeItemPtr) xmlSchemaAddParticle(pctxt,
- type->node,
- ((xmlSchemaParticlePtr) baseType->subtypes)->minOccurs,
- ((xmlSchemaParticlePtr) baseType->subtypes)->maxOccurs);
- if (particle->children->children == NULL)
- goto exit_failure;
- particle = (xmlSchemaParticlePtr)
- particle->children->children;
- particle->children =
- ((xmlSchemaParticlePtr) baseType->subtypes)->children;
- /*
- * SPEC "followed by the `effective content`."
- */
- particle->next = effectiveContent;
- /*
- * This all will result in:
- * new-particle
- * --> new-sequence(
- * new-particle
- * --> base-model,
- * this-particle
- * --> this-model
- * )
- */
- } else {
- /*
- * This is the case when there is already an empty
- * <sequence> with minOccurs==maxOccurs==1.
- * Just add the base types's content type.
- * NOTE that, although we miss to add an intermediate
- * <sequence>, this should produce no difference to
- * neither the regex compilation of the content model,
- * nor to the complex type contraints.
- */
- particle->children->children =
- (xmlSchemaTreeItemPtr) baseType->subtypes;
- }
- }
- }
- }
- /*
- * Now fixup attribute uses:
- * - expand attr. group references
- * - intersect attribute wildcards
- * - inherit attribute uses of the base type
- * - inherit or union attr. wildcards if extending
- * - apply attr. use prohibitions if restricting
- */
- res = xmlSchemaFixupTypeAttributeUses(pctxt, type);
- HFAILURE HERROR
- /*
- * Apply the complex type component constraints; this will not
- * check attributes, since this is done in
- * xmlSchemaFixupTypeAttributeUses().
- */
- res = xmlSchemaCheckCTComponent(pctxt, type);
- HFAILURE HERROR
-
-#ifdef DEBUG_TYPE
- xmlSchemaDebugFixedType(pctxt, type);
-#endif
- if (olderrs != pctxt->nberrors)
- return(pctxt->err);
- else
- return(0);
-
-exit_error:
- type->flags |= XML_SCHEMAS_TYPE_INTERNAL_INVALID;
-#ifdef DEBUG_TYPE
- xmlSchemaDebugFixedType(pctxt, type);
-#endif
- return(pctxt->err);
-
-exit_failure:
- type->flags |= XML_SCHEMAS_TYPE_INTERNAL_INVALID;
-#ifdef DEBUG_TYPE
- xmlSchemaDebugFixedType(pctxt, type);
-#endif
- return(-1);
-}
-
-
-/**
- * xmlSchemaTypeFixup:
- * @typeDecl: the schema type definition
- * @ctxt: the schema parser context
- *
- * Fixes the content model of the type.
- * URGENT TODO: We need an int result!
- */
-static int
-xmlSchemaTypeFixup(xmlSchemaTypePtr type,
- xmlSchemaAbstractCtxtPtr actxt)
-{
- if (type == NULL)
- return(0);
- if (actxt->type != XML_SCHEMA_CTXT_PARSER) {
- AERROR_INT("xmlSchemaTypeFixup",
- "this function needs a parser context");
- return(-1);
- }
- if (! WXS_IS_TYPE_NOT_FIXED(type))
- return(0);
- if (type->type == XML_SCHEMA_TYPE_COMPLEX)
- return(xmlSchemaFixupComplexType(PCTXT_CAST actxt, type));
- else if (type->type == XML_SCHEMA_TYPE_SIMPLE)
- return(xmlSchemaFixupSimpleTypeStageTwo(PCTXT_CAST actxt, type));
- return(0);
-}
-
-/**
- * xmlSchemaCheckFacet:
- * @facet: the facet
- * @typeDecl: the schema type definition
- * @pctxt: the schema parser context or NULL
- * @name: the optional name of the type
- *
- * Checks and computes the values of facets.
- *
- * Returns 0 if valid, a positive error code if not valid and
- * -1 in case of an internal or API error.
- */
-int
-xmlSchemaCheckFacet(xmlSchemaFacetPtr facet,
- xmlSchemaTypePtr typeDecl,
- xmlSchemaParserCtxtPtr pctxt,
- const xmlChar * name ATTRIBUTE_UNUSED)
-{
- int ret = 0, ctxtGiven;
-
- if ((facet == NULL) || (typeDecl == NULL))
- return(-1);
- /*
- * TODO: will the parser context be given if used from
- * the relaxNG module?
- */
- if (pctxt == NULL)
- ctxtGiven = 0;
- else
- ctxtGiven = 1;
-
- switch (facet->type) {
- case XML_SCHEMA_FACET_MININCLUSIVE:
- case XML_SCHEMA_FACET_MINEXCLUSIVE:
- case XML_SCHEMA_FACET_MAXINCLUSIVE:
- case XML_SCHEMA_FACET_MAXEXCLUSIVE:
- case XML_SCHEMA_FACET_ENUMERATION: {
- /*
- * Okay we need to validate the value
- * at that point.
- */
- xmlSchemaTypePtr base;
-
- /* 4.3.5.5 Constraints on enumeration Schema Components
- * Schema Component Constraint: enumeration valid restriction
- * It is an `error` if any member of {value} is not in the
- * `value space` of {base type definition}.
- *
- * minInclusive, maxInclusive, minExclusive, maxExclusive:
- * The value `must` be in the
- * `value space` of the `base type`.
- */
- /*
- * This function is intended to deliver a compiled value
- * on the facet. In this implementation of XML Schemata the
- * type holding a facet, won't be a built-in type.
- * Thus to ensure that other API
- * calls (relaxng) do work, if the given type is a built-in
- * type, we will assume that the given built-in type *is
- * already* the base type.
- */
- if (typeDecl->type != XML_SCHEMA_TYPE_BASIC) {
- base = typeDecl->baseType;
- if (base == NULL) {
- PERROR_INT("xmlSchemaCheckFacet",
- "a type user derived type has no base type");
- return (-1);
- }
- } else
- base = typeDecl;
-
- if (! ctxtGiven) {
- /*
- * A context is needed if called from RelaxNG.
- */
- pctxt = xmlSchemaNewParserCtxt("*");
- if (pctxt == NULL)
- return (-1);
- }
- /*
- * NOTE: This call does not check the content nodes,
- * since they are not available:
- * facet->node is just the node holding the facet
- * definition, *not* the attribute holding the *value*
- * of the facet.
- */
- ret = xmlSchemaVCheckCVCSimpleType(
- ACTXT_CAST pctxt, facet->node, base,
- facet->value, &(facet->val), 1, 1, 0);
- if (ret != 0) {
- if (ret < 0) {
- /* No error message for RelaxNG. */
- if (ctxtGiven) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_INTERNAL, facet->node, NULL,
- "Internal error: xmlSchemaCheckFacet, "
- "failed to validate the value '%s' of the "
- "facet '%s' against the base type",
- facet->value, xmlSchemaFacetTypeToString(facet->type));
- }
- goto internal_error;
- }
- ret = XML_SCHEMAP_INVALID_FACET_VALUE;
- /* No error message for RelaxNG. */
- if (ctxtGiven) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- ret, facet->node, WXS_BASIC_CAST facet,
- "The value '%s' of the facet does not validate "
- "against the base type '%s'",
- facet->value,
- xmlSchemaFormatQName(&str,
- base->targetNamespace, base->name));
- FREE_AND_NULL(str);
- }
- goto exit;
- } else if (facet->val == NULL) {
- if (ctxtGiven) {
- PERROR_INT("xmlSchemaCheckFacet",
- "value was not computed");
- }
- TODO
- }
- break;
- }
- case XML_SCHEMA_FACET_PATTERN:
- facet->regexp = xmlRegexpCompile(facet->value);
- if (facet->regexp == NULL) {
- ret = XML_SCHEMAP_REGEXP_INVALID;
- /* No error message for RelaxNG. */
- if (ctxtGiven) {
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- ret, facet->node, WXS_BASIC_CAST typeDecl,
- "The value '%s' of the facet 'pattern' is not a "
- "valid regular expression",
- facet->value, NULL);
- }
- }
- break;
- case XML_SCHEMA_FACET_TOTALDIGITS:
- case XML_SCHEMA_FACET_FRACTIONDIGITS:
- case XML_SCHEMA_FACET_LENGTH:
- case XML_SCHEMA_FACET_MAXLENGTH:
- case XML_SCHEMA_FACET_MINLENGTH:
-
- if (facet->type == XML_SCHEMA_FACET_TOTALDIGITS) {
- ret = xmlSchemaValidatePredefinedType(
- xmlSchemaGetBuiltInType(XML_SCHEMAS_PINTEGER),
- facet->value, &(facet->val));
- } else {
- ret = xmlSchemaValidatePredefinedType(
- xmlSchemaGetBuiltInType(XML_SCHEMAS_NNINTEGER),
- facet->value, &(facet->val));
- }
- if (ret != 0) {
- if (ret < 0) {
- /* No error message for RelaxNG. */
- if (ctxtGiven) {
- PERROR_INT("xmlSchemaCheckFacet",
- "validating facet value");
- }
- goto internal_error;
- }
- ret = XML_SCHEMAP_INVALID_FACET_VALUE;
- /* No error message for RelaxNG. */
- if (ctxtGiven) {
- /* error code */
- xmlSchemaCustomErr4(ACTXT_CAST pctxt,
- ret, facet->node, WXS_BASIC_CAST typeDecl,
- "The value '%s' of the facet '%s' is not a valid '%s'",
- facet->value,
- xmlSchemaFacetTypeToString(facet->type),
- (facet->type != XML_SCHEMA_FACET_TOTALDIGITS) ?
- BAD_CAST "nonNegativeInteger" :
- BAD_CAST "positiveInteger",
- NULL);
- }
- }
- break;
-
- case XML_SCHEMA_FACET_WHITESPACE:{
- if (xmlStrEqual(facet->value, BAD_CAST "preserve")) {
- facet->whitespace = XML_SCHEMAS_FACET_PRESERVE;
- } else if (xmlStrEqual(facet->value, BAD_CAST "replace")) {
- facet->whitespace = XML_SCHEMAS_FACET_REPLACE;
- } else if (xmlStrEqual(facet->value, BAD_CAST "collapse")) {
- facet->whitespace = XML_SCHEMAS_FACET_COLLAPSE;
- } else {
- ret = XML_SCHEMAP_INVALID_FACET_VALUE;
- /* No error message for RelaxNG. */
- if (ctxtGiven) {
- /* error was previously: XML_SCHEMAP_INVALID_WHITE_SPACE */
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- ret, facet->node, WXS_BASIC_CAST typeDecl,
- "The value '%s' of the facet 'whitespace' is not "
- "valid", facet->value, NULL);
- }
- }
- }
- default:
- break;
- }
-exit:
- if ((! ctxtGiven) && (pctxt != NULL))
- xmlSchemaFreeParserCtxt(pctxt);
- return (ret);
-internal_error:
- if ((! ctxtGiven) && (pctxt != NULL))
- xmlSchemaFreeParserCtxt(pctxt);
- return (-1);
-}
-
-/**
- * xmlSchemaCheckFacetValues:
- * @typeDecl: the schema type definition
- * @ctxt: the schema parser context
- *
- * Checks the default values types, especially for facets
- */
-static int
-xmlSchemaCheckFacetValues(xmlSchemaTypePtr typeDecl,
- xmlSchemaParserCtxtPtr pctxt)
-{
- int res, olderrs = pctxt->nberrors;
- const xmlChar *name = typeDecl->name;
- /*
- * NOTE: It is intended to use the facets list, instead
- * of facetSet.
- */
- if (typeDecl->facets != NULL) {
- xmlSchemaFacetPtr facet = typeDecl->facets;
-
- /*
- * Temporarily assign the "schema" to the validation context
- * of the parser context. This is needed for NOTATION validation.
- */
- if (pctxt->vctxt == NULL) {
- if (xmlSchemaCreateVCtxtOnPCtxt(pctxt) == -1)
- return(-1);
- }
- pctxt->vctxt->schema = pctxt->schema;
- while (facet != NULL) {
- res = xmlSchemaCheckFacet(facet, typeDecl, pctxt, name);
- HFAILURE
- facet = facet->next;
- }
- pctxt->vctxt->schema = NULL;
- }
- if (olderrs != pctxt->nberrors)
- return(pctxt->err);
- return(0);
-exit_failure:
- return(-1);
-}
-
-/**
- * xmlSchemaGetCircModelGrDefRef:
- * @ctxtMGroup: the searched model group
- * @selfMGroup: the second searched model group
- * @particle: the first particle
- *
- * This one is intended to be used by
- * xmlSchemaCheckGroupDefCircular only.
- *
- * Returns the particle with the circular model group definition reference,
- * otherwise NULL.
- */
-static xmlSchemaTreeItemPtr
-xmlSchemaGetCircModelGrDefRef(xmlSchemaModelGroupDefPtr groupDef,
- xmlSchemaTreeItemPtr particle)
-{
- xmlSchemaTreeItemPtr circ = NULL;
- xmlSchemaTreeItemPtr term;
- xmlSchemaModelGroupDefPtr gdef;
-
- for (; particle != NULL; particle = particle->next) {
- term = particle->children;
- if (term == NULL)
- continue;
- switch (term->type) {
- case XML_SCHEMA_TYPE_GROUP:
- gdef = (xmlSchemaModelGroupDefPtr) term;
- if (gdef == groupDef)
- return (particle);
- /*
- * Mark this model group definition to avoid infinite
- * recursion on circular references not yet examined.
- */
- if (gdef->flags & XML_SCHEMA_MODEL_GROUP_DEF_MARKED)
- continue;
- if (gdef->children != NULL) {
- gdef->flags |= XML_SCHEMA_MODEL_GROUP_DEF_MARKED;
- circ = xmlSchemaGetCircModelGrDefRef(groupDef,
- gdef->children->children);
- gdef->flags ^= XML_SCHEMA_MODEL_GROUP_DEF_MARKED;
- if (circ != NULL)
- return (circ);
- }
- break;
- case XML_SCHEMA_TYPE_SEQUENCE:
- case XML_SCHEMA_TYPE_CHOICE:
- case XML_SCHEMA_TYPE_ALL:
- circ = xmlSchemaGetCircModelGrDefRef(groupDef, term->children);
- if (circ != NULL)
- return (circ);
- break;
- default:
- break;
- }
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaCheckGroupDefCircular:
- * @item: the model group definition
- * @ctxt: the parser context
- * @name: the name
- *
- * Checks for circular references to model group definitions.
- */
-static void
-xmlSchemaCheckGroupDefCircular(xmlSchemaModelGroupDefPtr item,
- xmlSchemaParserCtxtPtr ctxt)
-{
- /*
- * Schema Component Constraint: Model Group Correct
- * 2 Circular groups are disallowed. That is, within the {particles}
- * of a group there must not be at any depth a particle whose {term}
- * is the group itself.
- */
- if ((item == NULL) ||
- (item->type != XML_SCHEMA_TYPE_GROUP) ||
- (item->children == NULL))
- return;
- {
- xmlSchemaTreeItemPtr circ;
-
- circ = xmlSchemaGetCircModelGrDefRef(item, item->children->children);
- if (circ != NULL) {
- xmlChar *str = NULL;
- /*
- * TODO: The error report is not adequate: this constraint
- * is defined for model groups but not definitions, but since
- * there cannot be any circular model groups without a model group
- * definition (if not using a construction API), we check those
- * defintions only.
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_MG_PROPS_CORRECT_2,
- NULL, WXS_ITEM_NODE(circ),
- "Circular reference to the model group definition '%s' "
- "defined", xmlSchemaFormatQName(&str,
- item->targetNamespace, item->name));
- FREE_AND_NULL(str)
- /*
- * NOTE: We will cut the reference to avoid further
- * confusion of the processor. This is a fatal error.
- */
- circ->children = NULL;
- }
- }
-}
-
-/**
- * xmlSchemaModelGroupToModelGroupDefFixup:
- * @ctxt: the parser context
- * @mg: the model group
- *
- * Assigns the model group of model group definitions to the "term"
- * of the referencing particle.
- * In xmlSchemaResolveModelGroupParticleReferences the model group
- * definitions were assigned to the "term", since needed for the
- * circularity check.
- *
- * Schema Component Constraint:
- * All Group Limited (cos-all-limited) (1.2)
- */
-static void
-xmlSchemaModelGroupToModelGroupDefFixup(
- xmlSchemaParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
- xmlSchemaModelGroupPtr mg)
-{
- xmlSchemaParticlePtr particle = WXS_MODELGROUP_PARTICLE(mg);
-
- while (particle != NULL) {
- if ((WXS_PARTICLE_TERM(particle) == NULL) ||
- ((WXS_PARTICLE_TERM(particle))->type !=
- XML_SCHEMA_TYPE_GROUP))
- {
- particle = WXS_PTC_CAST particle->next;
- continue;
- }
- if (WXS_MODELGROUPDEF_MODEL(WXS_PARTICLE_TERM(particle)) == NULL) {
- /*
- * TODO: Remove the particle.
- */
- WXS_PARTICLE_TERM(particle) = NULL;
- particle = WXS_PTC_CAST particle->next;
- continue;
- }
- /*
- * Assign the model group to the {term} of the particle.
- */
- WXS_PARTICLE_TERM(particle) =
- WXS_TREE_CAST WXS_MODELGROUPDEF_MODEL(WXS_PARTICLE_TERM(particle));
-
- particle = WXS_PTC_CAST particle->next;
- }
-}
-
-/**
- * xmlSchemaCheckAttrGroupCircularRecur:
- * @ctxtGr: the searched attribute group
- * @attr: the current attribute list to be processed
- *
- * This one is intended to be used by
- * xmlSchemaCheckAttrGroupCircular only.
- *
- * Returns the circular attribute grou reference, otherwise NULL.
- */
-static xmlSchemaQNameRefPtr
-xmlSchemaCheckAttrGroupCircularRecur(xmlSchemaAttributeGroupPtr ctxtGr,
- xmlSchemaItemListPtr list)
-{
- xmlSchemaAttributeGroupPtr gr;
- xmlSchemaQNameRefPtr ref, circ;
- int i;
- /*
- * We will search for an attribute group reference which
- * references the context attribute group.
- */
- for (i = 0; i < list->nbItems; i++) {
- ref = list->items[i];
- if ((ref->type == XML_SCHEMA_EXTRA_QNAMEREF) &&
- (ref->itemType == XML_SCHEMA_TYPE_ATTRIBUTEGROUP) &&
- (ref->item != NULL))
- {
- gr = WXS_ATTR_GROUP_CAST ref->item;
- if (gr == ctxtGr)
- return(ref);
- if (gr->flags & XML_SCHEMAS_ATTRGROUP_MARKED)
- continue;
- /*
- * Mark as visited to avoid infinite recursion on
- * circular references not yet examined.
- */
- if ((gr->attrUses) &&
- (gr->flags & XML_SCHEMAS_ATTRGROUP_HAS_REFS))
- {
- gr->flags |= XML_SCHEMAS_ATTRGROUP_MARKED;
- circ = xmlSchemaCheckAttrGroupCircularRecur(ctxtGr,
- (xmlSchemaItemListPtr) gr->attrUses);
- gr->flags ^= XML_SCHEMAS_ATTRGROUP_MARKED;
- if (circ != NULL)
- return (circ);
- }
-
- }
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaCheckAttrGroupCircular:
- * attrGr: the attribute group definition
- * @ctxt: the parser context
- * @name: the name
- *
- * Checks for circular references of attribute groups.
- */
-static int
-xmlSchemaCheckAttrGroupCircular(xmlSchemaAttributeGroupPtr attrGr,
- xmlSchemaParserCtxtPtr ctxt)
-{
- /*
- * Schema Representation Constraint:
- * Attribute Group Definition Representation OK
- * 3 Circular group reference is disallowed outside <redefine>.
- * That is, unless this element information item's parent is
- * <redefine>, then among the [children], if any, there must
- * not be an <attributeGroup> with ref [attribute] which resolves
- * to the component corresponding to this <attributeGroup>. Indirect
- * circularity is also ruled out. That is, when QName resolution
- * (Schema Document) ($3.15.3) is applied to a `QName` arising from
- * any <attributeGroup>s with a ref [attribute] among the [children],
- * it must not be the case that a `QName` is encountered at any depth
- * which resolves to the component corresponding to this <attributeGroup>.
- */
- if (attrGr->attrUses == NULL)
- return(0);
- else if ((attrGr->flags & XML_SCHEMAS_ATTRGROUP_HAS_REFS) == 0)
- return(0);
- else {
- xmlSchemaQNameRefPtr circ;
-
- circ = xmlSchemaCheckAttrGroupCircularRecur(attrGr,
- (xmlSchemaItemListPtr) attrGr->attrUses);
- if (circ != NULL) {
- xmlChar *str = NULL;
- /*
- * TODO: Report the referenced attr group as QName.
- */
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_SRC_ATTRIBUTE_GROUP_3,
- NULL, WXS_ITEM_NODE(WXS_BASIC_CAST circ),
- "Circular reference to the attribute group '%s' "
- "defined", xmlSchemaGetComponentQName(&str, attrGr));
- FREE_AND_NULL(str);
- /*
- * NOTE: We will cut the reference to avoid further
- * confusion of the processor.
- * BADSPEC TODO: The spec should define how to process in this case.
- */
- circ->item = NULL;
- return(ctxt->err);
- }
- }
- return(0);
-}
-
-static int
-xmlSchemaAttributeGroupExpandRefs(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaAttributeGroupPtr attrGr);
-
-/**
- * xmlSchemaExpandAttributeGroupRefs:
- * @pctxt: the parser context
- * @node: the node of the component holding the attribute uses
- * @completeWild: the intersected wildcard to be returned
- * @list: the attribute uses
- *
- * Substitutes contained attribute group references
- * for their attribute uses. Wilcards are intersected.
- * Attribute use prohibitions are removed from the list
- * and returned via the @prohibs list.
- * Pointlessness of attr. prohibs, if a matching attr. decl
- * is existent a well, are checked.
- */
-static int
-xmlSchemaExpandAttributeGroupRefs(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaBasicItemPtr item,
- xmlSchemaWildcardPtr *completeWild,
- xmlSchemaItemListPtr list,
- xmlSchemaItemListPtr prohibs)
-{
- xmlSchemaAttributeGroupPtr gr;
- xmlSchemaAttributeUsePtr use;
- xmlSchemaItemListPtr sublist;
- int i, j;
- int created = (*completeWild == NULL) ? 0 : 1;
-
- if (prohibs)
- prohibs->nbItems = 0;
-
- for (i = 0; i < list->nbItems; i++) {
- use = list->items[i];
-
- if (use->type == XML_SCHEMA_EXTRA_ATTR_USE_PROHIB) {
- if (prohibs == NULL) {
- PERROR_INT("xmlSchemaExpandAttributeGroupRefs",
- "unexpected attr prohibition found");
- return(-1);
- }
- /*
- * Remove from attribute uses.
- */
- if (xmlSchemaItemListRemove(list, i) == -1)
- return(-1);
- i--;
- /*
- * Note that duplicate prohibitions were already
- * handled at parsing time.
- */
- /*
- * Add to list of prohibitions.
- */
- xmlSchemaItemListAddSize(prohibs, 2, use);
- continue;
- }
- if ((use->type == XML_SCHEMA_EXTRA_QNAMEREF) &&
- ((WXS_QNAME_CAST use)->itemType == XML_SCHEMA_TYPE_ATTRIBUTEGROUP))
- {
- if ((WXS_QNAME_CAST use)->item == NULL)
- return(-1);
- gr = WXS_ATTR_GROUP_CAST (WXS_QNAME_CAST use)->item;
- /*
- * Expand the referenced attr. group.
- * TODO: remove this, this is done in a previous step, so
- * already done here.
- */
- if ((gr->flags & XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED) == 0) {
- if (xmlSchemaAttributeGroupExpandRefs(pctxt, gr) == -1)
- return(-1);
- }
- /*
- * Build the 'complete' wildcard; i.e. intersect multiple
- * wildcards.
- */
- if (gr->attributeWildcard != NULL) {
- if (*completeWild == NULL) {
- *completeWild = gr->attributeWildcard;
- } else {
- if (! created) {
- xmlSchemaWildcardPtr tmpWild;
-
- /*
- * Copy the first encountered wildcard as context,
- * except for the annotation.
- *
- * Although the complete wildcard might not correspond
- * to any node in the schema, we will anchor it on
- * the node of the owner component.
- */
- tmpWild = xmlSchemaAddWildcard(pctxt, pctxt->schema,
- XML_SCHEMA_TYPE_ANY_ATTRIBUTE,
- WXS_ITEM_NODE(item));
- if (tmpWild == NULL)
- return(-1);
- if (xmlSchemaCloneWildcardNsConstraints(pctxt,
- tmpWild, *completeWild) == -1)
- return (-1);
- tmpWild->processContents = (*completeWild)->processContents;
- *completeWild = tmpWild;
- created = 1;
- }
-
- if (xmlSchemaIntersectWildcards(pctxt, *completeWild,
- gr->attributeWildcard) == -1)
- return(-1);
- }
- }
- /*
- * Just remove the reference if the referenced group does not
- * contain any attribute uses.
- */
- sublist = ((xmlSchemaItemListPtr) gr->attrUses);
- if ((sublist == NULL) || sublist->nbItems == 0) {
- if (xmlSchemaItemListRemove(list, i) == -1)
- return(-1);
- i--;
- continue;
- }
- /*
- * Add the attribute uses.
- */
- list->items[i] = sublist->items[0];
- if (sublist->nbItems != 1) {
- for (j = 1; j < sublist->nbItems; j++) {
- i++;
- if (xmlSchemaItemListInsert(list,
- sublist->items[j], i) == -1)
- return(-1);
- }
- }
- }
-
- }
- /*
- * Handle pointless prohibitions of declared attributes.
- */
- if (prohibs && (prohibs->nbItems != 0) && (list->nbItems != 0)) {
- xmlSchemaAttributeUseProhibPtr prohib;
-
- for (i = prohibs->nbItems -1; i >= 0; i--) {
- prohib = prohibs->items[i];
- for (j = 0; j < list->nbItems; j++) {
- use = list->items[j];
-
- if ((prohib->name == WXS_ATTRUSE_DECL_NAME(use)) &&
- (prohib->targetNamespace == WXS_ATTRUSE_DECL_TNS(use)))
- {
- xmlChar *str = NULL;
-
- xmlSchemaCustomWarning(ACTXT_CAST pctxt,
- XML_SCHEMAP_WARN_ATTR_POINTLESS_PROH,
- prohib->node, NULL,
- "Skipping pointless attribute use prohibition "
- "'%s', since a corresponding attribute use "
- "exists already in the type definition",
- xmlSchemaFormatQName(&str,
- prohib->targetNamespace, prohib->name),
- NULL, NULL);
- FREE_AND_NULL(str);
- /*
- * Remove the prohibition.
- */
- if (xmlSchemaItemListRemove(prohibs, i) == -1)
- return(-1);
- break;
- }
- }
- }
- }
- return(0);
-}
-
-/**
- * xmlSchemaAttributeGroupExpandRefs:
- * @pctxt: the parser context
- * @attrGr: the attribute group definition
- *
- * Computation of:
- * {attribute uses} property
- * {attribute wildcard} property
- *
- * Substitutes contained attribute group references
- * for their attribute uses. Wilcards are intersected.
- */
-static int
-xmlSchemaAttributeGroupExpandRefs(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaAttributeGroupPtr attrGr)
-{
- if ((attrGr->attrUses == NULL) ||
- (attrGr->flags & XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED))
- return(0);
-
- attrGr->flags |= XML_SCHEMAS_ATTRGROUP_WILDCARD_BUILDED;
- if (xmlSchemaExpandAttributeGroupRefs(pctxt, WXS_BASIC_CAST attrGr,
- &(attrGr->attributeWildcard), attrGr->attrUses, NULL) == -1)
- return(-1);
- return(0);
-}
-
-/**
- * xmlSchemaAttributeGroupExpandRefs:
- * @pctxt: the parser context
- * @attrGr: the attribute group definition
- *
- * Substitutes contained attribute group references
- * for their attribute uses. Wilcards are intersected.
- *
- * Schema Component Constraint:
- * Attribute Group Definition Properties Correct (ag-props-correct)
- */
-static int
-xmlSchemaCheckAGPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaAttributeGroupPtr attrGr)
-{
- /*
- * SPEC ag-props-correct
- * (1) "The values of the properties of an attribute group definition
- * must be as described in the property tableau in The Attribute
- * Group Definition Schema Component ($3.6.1), modulo the impact of
- * Missing Sub-components ($5.3);"
- */
-
- if ((attrGr->attrUses != NULL) &&
- (WXS_LIST_CAST attrGr->attrUses)->nbItems > 1)
- {
- xmlSchemaItemListPtr uses = WXS_LIST_CAST attrGr->attrUses;
- xmlSchemaAttributeUsePtr use, tmp;
- int i, j, hasId = 0;
-
- for (i = uses->nbItems -1; i >= 0; i--) {
- use = uses->items[i];
- /*
- * SPEC ag-props-correct
- * (2) "Two distinct members of the {attribute uses} must not have
- * {attribute declaration}s both of whose {name}s match and whose
- * {target namespace}s are identical."
- */
- if (i > 0) {
- for (j = i -1; j >= 0; j--) {
- tmp = uses->items[j];
- if ((WXS_ATTRUSE_DECL_NAME(use) ==
- WXS_ATTRUSE_DECL_NAME(tmp)) &&
- (WXS_ATTRUSE_DECL_TNS(use) ==
- WXS_ATTRUSE_DECL_TNS(tmp)))
- {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_AG_PROPS_CORRECT,
- attrGr->node, WXS_BASIC_CAST attrGr,
- "Duplicate %s",
- xmlSchemaGetComponentDesignation(&str, use),
- NULL);
- FREE_AND_NULL(str);
- /*
- * Remove the duplicate.
- */
- if (xmlSchemaItemListRemove(uses, i) == -1)
- return(-1);
- goto next_use;
- }
- }
- }
- /*
- * SPEC ag-props-correct
- * (3) "Two distinct members of the {attribute uses} must not have
- * {attribute declaration}s both of whose {type definition}s are or
- * are derived from ID."
- * TODO: Does 'derived' include member-types of unions?
- */
- if (WXS_ATTRUSE_TYPEDEF(use) != NULL) {
- if (xmlSchemaIsDerivedFromBuiltInType(
- WXS_ATTRUSE_TYPEDEF(use), XML_SCHEMAS_ID))
- {
- if (hasId) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_AG_PROPS_CORRECT,
- attrGr->node, WXS_BASIC_CAST attrGr,
- "There must not exist more than one attribute "
- "declaration of type 'xs:ID' "
- "(or derived from 'xs:ID'). The %s violates this "
- "constraint",
- xmlSchemaGetComponentDesignation(&str, use),
- NULL);
- FREE_AND_NULL(str);
- if (xmlSchemaItemListRemove(uses, i) == -1)
- return(-1);
- }
- hasId = 1;
- }
- }
-next_use: {}
- }
- }
- return(0);
-}
-
-/**
- * xmlSchemaResolveAttrGroupReferences:
- * @attrgrpDecl: the schema attribute definition
- * @ctxt: the schema parser context
- * @name: the attribute name
- *
- * Resolves references to attribute group definitions.
- */
-static int
-xmlSchemaResolveAttrGroupReferences(xmlSchemaQNameRefPtr ref,
- xmlSchemaParserCtxtPtr ctxt)
-{
- xmlSchemaAttributeGroupPtr group;
-
- if (ref->item != NULL)
- return(0);
- group = xmlSchemaGetAttributeGroup(ctxt->schema,
- ref->name,
- ref->targetNamespace);
- if (group == NULL) {
- xmlSchemaPResCompAttrErr(ctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- NULL, ref->node,
- "ref", ref->name, ref->targetNamespace,
- ref->itemType, NULL);
- return(ctxt->err);
- }
- ref->item = WXS_BASIC_CAST group;
- return(0);
-}
-
-/**
- * xmlSchemaCheckAttrPropsCorrect:
- * @item: an schema attribute declaration/use
- * @ctxt: a schema parser context
- * @name: the name of the attribute
- *
- *
- * Schema Component Constraint:
- * Attribute Declaration Properties Correct (a-props-correct)
- *
- * Validates the value constraints of an attribute declaration/use.
- * NOTE that this needs the simle type definitions to be already
- * builded and checked.
- */
-static int
-xmlSchemaCheckAttrPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaAttributePtr attr)
-{
-
- /*
- * SPEC a-props-correct (1)
- * "The values of the properties of an attribute declaration must
- * be as described in the property tableau in The Attribute
- * Declaration Schema Component ($3.2.1), modulo the impact of
- * Missing Sub-components ($5.3)."
- */
-
- if (WXS_ATTR_TYPEDEF(attr) == NULL)
- return(0);
-
- if (attr->defValue != NULL) {
- int ret;
-
- /*
- * SPEC a-props-correct (3)
- * "If the {type definition} is or is derived from ID then there
- * must not be a {value constraint}."
- */
- if (xmlSchemaIsDerivedFromBuiltInType(
- WXS_ATTR_TYPEDEF(attr), XML_SCHEMAS_ID))
- {
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_A_PROPS_CORRECT_3,
- NULL, WXS_BASIC_CAST attr,
- "Value constraints are not allowed if the type definition "
- "is or is derived from xs:ID",
- NULL, NULL);
- return(pctxt->err);
- }
- /*
- * SPEC a-props-correct (2)
- * "if there is a {value constraint}, the canonical lexical
- * representation of its value must be `valid` with respect
- * to the {type definition} as defined in String Valid ($3.14.4)."
- * TODO: Don't care about the *canonical* stuff here, this requirement
- * will be removed in WXS 1.1 anyway.
- */
- ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST pctxt,
- attr->node, WXS_ATTR_TYPEDEF(attr),
- attr->defValue, &(attr->defVal),
- 1, 1, 0);
- if (ret != 0) {
- if (ret < 0) {
- PERROR_INT("xmlSchemaCheckAttrPropsCorrect",
- "calling xmlSchemaVCheckCVCSimpleType()");
- return(-1);
- }
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_A_PROPS_CORRECT_2,
- NULL, WXS_BASIC_CAST attr,
- "The value of the value constraint is not valid",
- NULL, NULL);
- return(pctxt->err);
- }
- }
-
- return(0);
-}
-
-static xmlSchemaElementPtr
-xmlSchemaCheckSubstGroupCircular(xmlSchemaElementPtr elemDecl,
- xmlSchemaElementPtr ancestor)
-{
- xmlSchemaElementPtr ret;
-
- if (WXS_SUBST_HEAD(ancestor) == NULL)
- return (NULL);
- if (WXS_SUBST_HEAD(ancestor) == elemDecl)
- return (ancestor);
-
- if (WXS_SUBST_HEAD(ancestor)->flags & XML_SCHEMAS_ELEM_CIRCULAR)
- return (NULL);
- WXS_SUBST_HEAD(ancestor)->flags |= XML_SCHEMAS_ELEM_CIRCULAR;
- ret = xmlSchemaCheckSubstGroupCircular(elemDecl,
- WXS_SUBST_HEAD(ancestor));
- WXS_SUBST_HEAD(ancestor)->flags ^= XML_SCHEMAS_ELEM_CIRCULAR;
-
- return (ret);
-}
-
-/**
- * xmlSchemaCheckElemPropsCorrect:
- * @ctxt: a schema parser context
- * @decl: the element declaration
- * @name: the name of the attribute
- *
- * Schema Component Constraint:
- * Element Declaration Properties Correct (e-props-correct)
- *
- * STATUS:
- * missing: (6)
- */
-static int
-xmlSchemaCheckElemPropsCorrect(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaElementPtr elemDecl)
-{
- int ret = 0;
- xmlSchemaTypePtr typeDef = WXS_ELEM_TYPEDEF(elemDecl);
- /*
- * SPEC (1) "The values of the properties of an element declaration
- * must be as described in the property tableau in The Element
- * Declaration Schema Component ($3.3.1), modulo the impact of Missing
- * Sub-components ($5.3)."
- */
- if (WXS_SUBST_HEAD(elemDecl) != NULL) {
- xmlSchemaElementPtr head = WXS_SUBST_HEAD(elemDecl), circ;
-
- xmlSchemaCheckElementDeclComponent(head, pctxt);
- /*
- * SPEC (3) "If there is a non-`absent` {substitution group
- * affiliation}, then {scope} must be global."
- */
- if ((elemDecl->flags & XML_SCHEMAS_ELEM_GLOBAL) == 0) {
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_E_PROPS_CORRECT_3,
- WXS_BASIC_CAST elemDecl, NULL,
- "Only global element declarations can have a "
- "substitution group affiliation", NULL);
- ret = XML_SCHEMAP_E_PROPS_CORRECT_3;
- }
- /*
- * TODO: SPEC (6) "Circular substitution groups are disallowed.
- * That is, it must not be possible to return to an element declaration
- * by repeatedly following the {substitution group affiliation}
- * property."
- */
- if (head == elemDecl)
- circ = head;
- else if (WXS_SUBST_HEAD(head) != NULL)
- circ = xmlSchemaCheckSubstGroupCircular(head, head);
- else
- circ = NULL;
- if (circ != NULL) {
- xmlChar *strA = NULL, *strB = NULL;
-
- xmlSchemaPCustomErrExt(pctxt,
- XML_SCHEMAP_E_PROPS_CORRECT_6,
- WXS_BASIC_CAST circ, NULL,
- "The element declaration '%s' defines a circular "
- "substitution group to element declaration '%s'",
- xmlSchemaGetComponentQName(&strA, circ),
- xmlSchemaGetComponentQName(&strB, head),
- NULL);
- FREE_AND_NULL(strA)
- FREE_AND_NULL(strB)
- ret = XML_SCHEMAP_E_PROPS_CORRECT_6;
- }
- /*
- * SPEC (4) "If there is a {substitution group affiliation},
- * the {type definition}
- * of the element declaration must be validly derived from the {type
- * definition} of the {substitution group affiliation}, given the value
- * of the {substitution group exclusions} of the {substitution group
- * affiliation}, as defined in Type Derivation OK (Complex) ($3.4.6)
- * (if the {type definition} is complex) or as defined in
- * Type Derivation OK (Simple) ($3.14.6) (if the {type definition} is
- * simple)."
- *
- * NOTE: {substitution group exclusions} means the values of the
- * attribute "final".
- */
-
- if (typeDef != WXS_ELEM_TYPEDEF(WXS_SUBST_HEAD(elemDecl))) {
- int set = 0;
-
- if (head->flags & XML_SCHEMAS_ELEM_FINAL_EXTENSION)
- set |= SUBSET_EXTENSION;
- if (head->flags & XML_SCHEMAS_ELEM_FINAL_RESTRICTION)
- set |= SUBSET_RESTRICTION;
-
- if (xmlSchemaCheckCOSDerivedOK(ACTXT_CAST pctxt, typeDef,
- WXS_ELEM_TYPEDEF(head), set) != 0) {
- xmlChar *strA = NULL, *strB = NULL, *strC = NULL;
-
- ret = XML_SCHEMAP_E_PROPS_CORRECT_4;
- xmlSchemaPCustomErrExt(pctxt,
- XML_SCHEMAP_E_PROPS_CORRECT_4,
- WXS_BASIC_CAST elemDecl, NULL,
- "The type definition '%s' was "
- "either rejected by the substitution group "
- "affiliation '%s', or not validly derived from its type "
- "definition '%s'",
- xmlSchemaGetComponentQName(&strA, typeDef),
- xmlSchemaGetComponentQName(&strB, head),
- xmlSchemaGetComponentQName(&strC, WXS_ELEM_TYPEDEF(head)));
- FREE_AND_NULL(strA)
- FREE_AND_NULL(strB)
- FREE_AND_NULL(strC)
- }
- }
- }
- /*
- * SPEC (5) "If the {type definition} or {type definition}'s
- * {content type}
- * is or is derived from ID then there must not be a {value constraint}.
- * Note: The use of ID as a type definition for elements goes beyond
- * XML 1.0, and should be avoided if backwards compatibility is desired"
- */
- if ((elemDecl->value != NULL) &&
- ((WXS_IS_SIMPLE(typeDef) &&
- xmlSchemaIsDerivedFromBuiltInType(typeDef, XML_SCHEMAS_ID)) ||
- (WXS_IS_COMPLEX(typeDef) &&
- WXS_HAS_SIMPLE_CONTENT(typeDef) &&
- xmlSchemaIsDerivedFromBuiltInType(typeDef->contentTypeDef,
- XML_SCHEMAS_ID)))) {
-
- ret = XML_SCHEMAP_E_PROPS_CORRECT_5;
- xmlSchemaPCustomErr(pctxt,
- XML_SCHEMAP_E_PROPS_CORRECT_5,
- WXS_BASIC_CAST elemDecl, NULL,
- "The type definition (or type definition's content type) is or "
- "is derived from ID; value constraints are not allowed in "
- "conjunction with such a type definition", NULL);
- } else if (elemDecl->value != NULL) {
- int vcret;
- xmlNodePtr node = NULL;
-
- /*
- * SPEC (2) "If there is a {value constraint}, the canonical lexical
- * representation of its value must be `valid` with respect to the
- * {type definition} as defined in Element Default Valid (Immediate)
- * ($3.3.6)."
- */
- if (typeDef == NULL) {
- xmlSchemaPErr(pctxt, elemDecl->node,
- XML_SCHEMAP_INTERNAL,
- "Internal error: xmlSchemaCheckElemPropsCorrect, "
- "type is missing... skipping validation of "
- "the value constraint", NULL, NULL);
- return (-1);
- }
- if (elemDecl->node != NULL) {
- if (elemDecl->flags & XML_SCHEMAS_ELEM_FIXED)
- node = (xmlNodePtr) xmlHasProp(elemDecl->node,
- BAD_CAST "fixed");
- else
- node = (xmlNodePtr) xmlHasProp(elemDecl->node,
- BAD_CAST "default");
- }
- vcret = xmlSchemaParseCheckCOSValidDefault(pctxt, node,
- typeDef, elemDecl->value, &(elemDecl->defVal));
- if (vcret != 0) {
- if (vcret < 0) {
- PERROR_INT("xmlSchemaElemCheckValConstr",
- "failed to validate the value constraint of an "
- "element declaration");
- return (-1);
- }
- return (vcret);
- }
- }
-
- return (ret);
-}
-
-/**
- * xmlSchemaCheckElemSubstGroup:
- * @ctxt: a schema parser context
- * @decl: the element declaration
- * @name: the name of the attribute
- *
- * Schema Component Constraint:
- * Substitution Group (cos-equiv-class)
- *
- * In Libxml2 the subst. groups will be precomputed, in terms of that
- * a list will be built for each subst. group head, holding all direct
- * referents to this head.
- * NOTE that this function needs:
- * 1. circular subst. groups to be checked beforehand
- * 2. the declaration's type to be derived from the head's type
- *
- * STATUS:
- *
- */
-static void
-xmlSchemaCheckElemSubstGroup(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaElementPtr elemDecl)
-{
- if ((WXS_SUBST_HEAD(elemDecl) == NULL) ||
- /* SPEC (1) "Its {abstract} is false." */
- (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT))
- return;
- {
- xmlSchemaElementPtr head;
- xmlSchemaTypePtr headType, type;
- int set, methSet;
- /*
- * SPEC (2) "It is validly substitutable for HEAD subject to HEAD's
- * {disallowed substitutions} as the blocking constraint, as defined in
- * Substitution Group OK (Transitive) ($3.3.6)."
- */
- for (head = WXS_SUBST_HEAD(elemDecl); head != NULL;
- head = WXS_SUBST_HEAD(head)) {
- set = 0;
- methSet = 0;
- /*
- * The blocking constraints.
- */
- if (head->flags & XML_SCHEMAS_ELEM_BLOCK_SUBSTITUTION)
- continue;
- headType = head->subtypes;
- type = elemDecl->subtypes;
- if (headType == type)
- goto add_member;
- if (head->flags & XML_SCHEMAS_ELEM_BLOCK_RESTRICTION)
- set |= XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
- if (head->flags & XML_SCHEMAS_ELEM_BLOCK_EXTENSION)
- set |= XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
- /*
- * SPEC: Substitution Group OK (Transitive) (2.3)
- * "The set of all {derivation method}s involved in the
- * derivation of D's {type definition} from C's {type definition}
- * does not intersect with the union of the blocking constraint,
- * C's {prohibited substitutions} (if C is complex, otherwise the
- * empty set) and the {prohibited substitutions} (respectively the
- * empty set) of any intermediate {type definition}s in the
- * derivation of D's {type definition} from C's {type definition}."
- */
- /*
- * OPTIMIZE TODO: Optimize this a bit, since, if traversing the
- * subst.head axis, the methSet does not need to be computed for
- * the full depth over and over.
- */
- /*
- * The set of all {derivation method}s involved in the derivation
- */
- while ((type != NULL) && (type != headType)) {
- if ((WXS_IS_EXTENSION(type)) &&
- ((methSet & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) == 0))
- methSet |= XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
-
- if (WXS_IS_RESTRICTION(type) &&
- ((methSet & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) == 0))
- methSet |= XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
-
- type = type->baseType;
- }
- /*
- * The {prohibited substitutions} of all intermediate types +
- * the head's type.
- */
- type = elemDecl->subtypes->baseType;
- while (type != NULL) {
- if (WXS_IS_COMPLEX(type)) {
- if ((type->flags &
- XML_SCHEMAS_TYPE_BLOCK_EXTENSION) &&
- ((set & XML_SCHEMAS_TYPE_BLOCK_EXTENSION) == 0))
- set |= XML_SCHEMAS_TYPE_BLOCK_EXTENSION;
- if ((type->flags &
- XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) &&
- ((set & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) == 0))
- set |= XML_SCHEMAS_TYPE_BLOCK_RESTRICTION;
- } else
- break;
- if (type == headType)
- break;
- type = type->baseType;
- }
- if ((set != 0) &&
- (((set & XML_SCHEMAS_TYPE_BLOCK_EXTENSION) &&
- (methSet & XML_SCHEMAS_TYPE_BLOCK_EXTENSION)) ||
- ((set & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION) &&
- (methSet & XML_SCHEMAS_TYPE_BLOCK_RESTRICTION)))) {
- continue;
- }
-add_member:
- xmlSchemaAddElementSubstitutionMember(ctxt, head, elemDecl);
- if ((head->flags & XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD) == 0)
- head->flags |= XML_SCHEMAS_ELEM_SUBST_GROUP_HEAD;
- }
- }
-}
-
-#ifdef WXS_ELEM_DECL_CONS_ENABLED /* enable when finished */
-/**
- * xmlSchemaCheckElementDeclComponent
- * @pctxt: the schema parser context
- * @ctxtComponent: the context component (an element declaration)
- * @ctxtParticle: the first particle of the context component
- * @searchParticle: the element declaration particle to be analysed
- *
- * Schema Component Constraint: Element Declarations Consistent
- */
-static int
-xmlSchemaCheckElementDeclConsistent(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaBasicItemPtr ctxtComponent,
- xmlSchemaParticlePtr ctxtParticle,
- xmlSchemaParticlePtr searchParticle,
- xmlSchemaParticlePtr curParticle,
- int search)
-{
- return(0);
-
- int ret = 0;
- xmlSchemaParticlePtr cur = curParticle;
- if (curParticle == NULL) {
- return(0);
- }
- if (WXS_PARTICLE_TERM(curParticle) == NULL) {
- /*
- * Just return in this case. A missing "term" of the particle
- * might arise due to an invalid "term" component.
- */
- return(0);
- }
- while (cur != NULL) {
- switch (WXS_PARTICLE_TERM(cur)->type) {
- case XML_SCHEMA_TYPE_ANY:
- break;
- case XML_SCHEMA_TYPE_ELEMENT:
- if (search == 0) {
- ret = xmlSchemaCheckElementDeclConsistent(pctxt,
- ctxtComponent, ctxtParticle, cur, ctxtParticle, 1);
- if (ret != 0)
- return(ret);
- } else {
- xmlSchemaElementPtr elem =
- WXS_ELEM_CAST(WXS_PARTICLE_TERM(cur));
- /*
- * SPEC Element Declarations Consistent:
- * "If the {particles} contains, either directly,
- * indirectly (that is, within the {particles} of a
- * contained model group, recursively) or `implicitly`
- * two or more element declaration particles with
- * the same {name} and {target namespace}, then
- * all their type definitions must be the same
- * top-level definition [...]"
- */
- if (xmlStrEqual(WXS_PARTICLE_TERM_AS_ELEM(cur)->name,
- WXS_PARTICLE_TERM_AS_ELEM(searchParticle)->name) &&
- xmlStrEqual(WXS_PARTICLE_TERM_AS_ELEM(cur)->targetNamespace,
- WXS_PARTICLE_TERM_AS_ELEM(searchParticle)->targetNamespace))
- {
- xmlChar *strA = NULL, *strB = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- /* TODO: error code */
- XML_SCHEMAP_COS_NONAMBIG,
- WXS_ITEM_NODE(cur), NULL,
- "In the content model of %s, there are multiple "
- "element declarations for '%s' with different "
- "type definitions",
- xmlSchemaGetComponentDesignation(&strA,
- ctxtComponent),
- xmlSchemaFormatQName(&strB,
- WXS_PARTICLE_TERM_AS_ELEM(cur)->targetNamespace,
- WXS_PARTICLE_TERM_AS_ELEM(cur)->name));
- FREE_AND_NULL(strA);
- FREE_AND_NULL(strB);
- return(XML_SCHEMAP_COS_NONAMBIG);
- }
- }
- break;
- case XML_SCHEMA_TYPE_SEQUENCE: {
- break;
- }
- case XML_SCHEMA_TYPE_CHOICE:{
- /*
- xmlSchemaTreeItemPtr sub;
-
- sub = WXS_PARTICLE_TERM(particle)->children; (xmlSchemaParticlePtr)
- while (sub != NULL) {
- ret = xmlSchemaCheckElementDeclConsistent(pctxt, ctxtComponent,
- ctxtParticle, ctxtElem);
- if (ret != 0)
- return(ret);
- sub = sub->next;
- }
- */
- break;
- }
- case XML_SCHEMA_TYPE_ALL:
- break;
- case XML_SCHEMA_TYPE_GROUP:
- break;
- default:
- xmlSchemaInternalErr2(ACTXT_CAST pctxt,
- "xmlSchemaCheckElementDeclConsistent",
- "found unexpected term of type '%s' in content model",
- WXS_ITEM_TYPE_NAME(WXS_PARTICLE_TERM(cur)), NULL);
- return(-1);
- }
- cur = (xmlSchemaParticlePtr) cur->next;
- }
-
-exit:
- return(ret);
-}
-#endif
-
-/**
- * xmlSchemaCheckElementDeclComponent
- * @item: an schema element declaration/particle
- * @ctxt: a schema parser context
- * @name: the name of the attribute
- *
- * Validates the value constraints of an element declaration.
- * Adds substitution group members.
- */
-static void
-xmlSchemaCheckElementDeclComponent(xmlSchemaElementPtr elemDecl,
- xmlSchemaParserCtxtPtr ctxt)
-{
- if (elemDecl == NULL)
- return;
- if (elemDecl->flags & XML_SCHEMAS_ELEM_INTERNAL_CHECKED)
- return;
- elemDecl->flags |= XML_SCHEMAS_ELEM_INTERNAL_CHECKED;
- if (xmlSchemaCheckElemPropsCorrect(ctxt, elemDecl) == 0) {
- /*
- * Adds substitution group members.
- */
- xmlSchemaCheckElemSubstGroup(ctxt, elemDecl);
- }
-}
-
-/**
- * xmlSchemaResolveModelGroupParticleReferences:
- * @particle: a particle component
- * @ctxt: a parser context
- *
- * Resolves references of a model group's {particles} to
- * model group definitions and to element declarations.
- */
-static void
-xmlSchemaResolveModelGroupParticleReferences(
- xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaModelGroupPtr mg)
-{
- xmlSchemaParticlePtr particle = WXS_MODELGROUP_PARTICLE(mg);
- xmlSchemaQNameRefPtr ref;
- xmlSchemaBasicItemPtr refItem;
-
- /*
- * URGENT TODO: Test this.
- */
- while (particle != NULL) {
- if ((WXS_PARTICLE_TERM(particle) == NULL) ||
- ((WXS_PARTICLE_TERM(particle))->type !=
- XML_SCHEMA_EXTRA_QNAMEREF))
- {
- goto next_particle;
- }
- ref = WXS_QNAME_CAST WXS_PARTICLE_TERM(particle);
- /*
- * Resolve the reference.
- * NULL the {term} by default.
- */
- particle->children = NULL;
-
- refItem = xmlSchemaGetNamedComponent(ctxt->schema,
- ref->itemType, ref->name, ref->targetNamespace);
- if (refItem == NULL) {
- xmlSchemaPResCompAttrErr(ctxt, XML_SCHEMAP_SRC_RESOLVE,
- NULL, WXS_ITEM_NODE(particle), "ref", ref->name,
- ref->targetNamespace, ref->itemType, NULL);
- /* TODO: remove the particle. */
- goto next_particle;
- }
- if (refItem->type == XML_SCHEMA_TYPE_GROUP) {
- if (WXS_MODELGROUPDEF_MODEL(refItem) == NULL)
- /* TODO: remove the particle. */
- goto next_particle;
- /*
- * NOTE that we will assign the model group definition
- * itself to the "term" of the particle. This will ease
- * the check for circular model group definitions. After
- * that the "term" will be assigned the model group of the
- * model group definition.
- */
- if ((WXS_MODELGROUPDEF_MODEL(refItem))->type ==
- XML_SCHEMA_TYPE_ALL) {
- /*
- * SPEC cos-all-limited (1)
- * SPEC cos-all-limited (1.2)
- * "It appears only as the value of one or both of the
- * following properties:"
- * (1.1) "the {model group} property of a model group
- * definition."
- * (1.2) "the {term} property of a particle [... of] the "
- * {content type} of a complex type definition."
- */
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- /* TODO: error code */
- XML_SCHEMAP_COS_ALL_LIMITED,
- WXS_ITEM_NODE(particle), NULL,
- "A model group definition is referenced, but "
- "it contains an 'all' model group, which "
- "cannot be contained by model groups",
- NULL, NULL);
- /* TODO: remove the particle. */
- goto next_particle;
- }
- particle->children = (xmlSchemaTreeItemPtr) refItem;
- } else {
- /*
- * TODO: Are referenced element declarations the only
- * other components we expect here?
- */
- particle->children = (xmlSchemaTreeItemPtr) refItem;
- }
-next_particle:
- particle = WXS_PTC_CAST particle->next;
- }
-}
-
-static int
-xmlSchemaAreValuesEqual(xmlSchemaValPtr x,
- xmlSchemaValPtr y)
-{
- xmlSchemaTypePtr tx, ty, ptx, pty;
- int ret;
-
- while (x != NULL) {
- /* Same types. */
- tx = xmlSchemaGetBuiltInType(xmlSchemaGetValType(x));
- ty = xmlSchemaGetBuiltInType(xmlSchemaGetValType(y));
- ptx = xmlSchemaGetPrimitiveType(tx);
- pty = xmlSchemaGetPrimitiveType(ty);
- /*
- * (1) if a datatype T' is `derived` by `restriction` from an
- * atomic datatype T then the `value space` of T' is a subset of
- * the `value space` of T. */
- /*
- * (2) if datatypes T' and T'' are `derived` by `restriction`
- * from a common atomic ancestor T then the `value space`s of T'
- * and T'' may overlap.
- */
- if (ptx != pty)
- return(0);
- /*
- * We assume computed values to be normalized, so do a fast
- * string comparison for string based types.
- */
- if ((ptx->builtInType == XML_SCHEMAS_STRING) ||
- WXS_IS_ANY_SIMPLE_TYPE(ptx)) {
- if (! xmlStrEqual(
- xmlSchemaValueGetAsString(x),
- xmlSchemaValueGetAsString(y)))
- return (0);
- } else {
- ret = xmlSchemaCompareValuesWhtsp(
- x, XML_SCHEMA_WHITESPACE_PRESERVE,
- y, XML_SCHEMA_WHITESPACE_PRESERVE);
- if (ret == -2)
- return(-1);
- if (ret != 0)
- return(0);
- }
- /*
- * Lists.
- */
- x = xmlSchemaValueGetNext(x);
- if (x != NULL) {
- y = xmlSchemaValueGetNext(y);
- if (y == NULL)
- return (0);
- } else if (xmlSchemaValueGetNext(y) != NULL)
- return (0);
- else
- return (1);
- }
- return (0);
-}
-
-/**
- * xmlSchemaResolveAttrUseReferences:
- * @item: an attribute use
- * @ctxt: a parser context
- *
- * Resolves the referenced attribute declaration.
- */
-static int
-xmlSchemaResolveAttrUseReferences(xmlSchemaAttributeUsePtr ause,
- xmlSchemaParserCtxtPtr ctxt)
-{
- if ((ctxt == NULL) || (ause == NULL))
- return(-1);
- if ((ause->attrDecl == NULL) ||
- (ause->attrDecl->type != XML_SCHEMA_EXTRA_QNAMEREF))
- return(0);
-
- {
- xmlSchemaQNameRefPtr ref = WXS_QNAME_CAST ause->attrDecl;
-
- /*
- * TODO: Evaluate, what errors could occur if the declaration is not
- * found.
- */
- ause->attrDecl = xmlSchemaGetAttributeDecl(ctxt->schema,
- ref->name, ref->targetNamespace);
- if (ause->attrDecl == NULL) {
- xmlSchemaPResCompAttrErr(ctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- WXS_BASIC_CAST ause, ause->node,
- "ref", ref->name, ref->targetNamespace,
- XML_SCHEMA_TYPE_ATTRIBUTE, NULL);
- return(ctxt->err);;
- }
- }
- return(0);
-}
-
-/**
- * xmlSchemaCheckAttrUsePropsCorrect:
- * @ctxt: a parser context
- * @use: an attribute use
- *
- * Schema Component Constraint:
- * Attribute Use Correct (au-props-correct)
- *
- */
-static int
-xmlSchemaCheckAttrUsePropsCorrect(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaAttributeUsePtr use)
-{
- if ((ctxt == NULL) || (use == NULL))
- return(-1);
- if ((use->defValue == NULL) || (WXS_ATTRUSE_DECL(use) == NULL) ||
- ((WXS_ATTRUSE_DECL(use))->type != XML_SCHEMA_TYPE_ATTRIBUTE))
- return(0);
-
- /*
- * SPEC au-props-correct (1)
- * "The values of the properties of an attribute use must be as
- * described in the property tableau in The Attribute Use Schema
- * Component ($3.5.1), modulo the impact of Missing
- * Sub-components ($5.3)."
- */
-
- if (((WXS_ATTRUSE_DECL(use))->defValue != NULL) &&
- ((WXS_ATTRUSE_DECL(use))->flags & XML_SCHEMAS_ATTR_FIXED) &&
- ((use->flags & XML_SCHEMA_ATTR_USE_FIXED) == 0))
- {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_AU_PROPS_CORRECT_2,
- WXS_BASIC_CAST use, NULL,
- "The attribute declaration has a 'fixed' value constraint "
- ", thus the attribute use must also have a 'fixed' value "
- "constraint",
- NULL);
- return(ctxt->err);
- }
- /*
- * Compute and check the value constraint's value.
- */
- if ((use->defVal != NULL) && (WXS_ATTRUSE_TYPEDEF(use) != NULL)) {
- int ret;
- /*
- * TODO: The spec seems to be missing a check of the
- * value constraint of the attribute use. We will do it here.
- */
- /*
- * SPEC a-props-correct (3)
- */
- if (xmlSchemaIsDerivedFromBuiltInType(
- WXS_ATTRUSE_TYPEDEF(use), XML_SCHEMAS_ID))
- {
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAP_AU_PROPS_CORRECT,
- NULL, WXS_BASIC_CAST use,
- "Value constraints are not allowed if the type definition "
- "is or is derived from xs:ID",
- NULL, NULL);
- return(ctxt->err);
- }
-
- ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST ctxt,
- use->node, WXS_ATTRUSE_TYPEDEF(use),
- use->defValue, &(use->defVal),
- 1, 1, 0);
- if (ret != 0) {
- if (ret < 0) {
- PERROR_INT2("xmlSchemaCheckAttrUsePropsCorrect",
- "calling xmlSchemaVCheckCVCSimpleType()");
- return(-1);
- }
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAP_AU_PROPS_CORRECT,
- NULL, WXS_BASIC_CAST use,
- "The value of the value constraint is not valid",
- NULL, NULL);
- return(ctxt->err);
- }
- }
- /*
- * SPEC au-props-correct (2)
- * "If the {attribute declaration} has a fixed
- * {value constraint}, then if the attribute use itself has a
- * {value constraint}, it must also be fixed and its value must match
- * that of the {attribute declaration}'s {value constraint}."
- */
- if (((WXS_ATTRUSE_DECL(use))->defVal != NULL) &&
- (((WXS_ATTRUSE_DECL(use))->flags & XML_SCHEMA_ATTR_USE_FIXED) == 0))
- {
- if (! xmlSchemaAreValuesEqual(use->defVal,
- (WXS_ATTRUSE_DECL(use))->defVal))
- {
- xmlSchemaPCustomErr(ctxt,
- XML_SCHEMAP_AU_PROPS_CORRECT_2,
- WXS_BASIC_CAST use, NULL,
- "The 'fixed' value constraint of the attribute use "
- "must match the attribute declaration's value "
- "constraint '%s'",
- (WXS_ATTRUSE_DECL(use))->defValue);
- }
- return(ctxt->err);
- }
- return(0);
-}
-
-
-
-
-/**
- * xmlSchemaResolveAttrTypeReferences:
- * @item: an attribute declaration
- * @ctxt: a parser context
- *
- * Resolves the referenced type definition component.
- */
-static int
-xmlSchemaResolveAttrTypeReferences(xmlSchemaAttributePtr item,
- xmlSchemaParserCtxtPtr ctxt)
-{
- /*
- * The simple type definition corresponding to the <simpleType> element
- * information item in the [children], if present, otherwise the simple
- * type definition `resolved` to by the `actual value` of the type
- * [attribute], if present, otherwise the `simple ur-type definition`.
- */
- if (item->flags & XML_SCHEMAS_ATTR_INTERNAL_RESOLVED)
- return(0);
- item->flags |= XML_SCHEMAS_ATTR_INTERNAL_RESOLVED;
- if (item->subtypes != NULL)
- return(0);
- if (item->typeName != NULL) {
- xmlSchemaTypePtr type;
-
- type = xmlSchemaGetType(ctxt->schema, item->typeName,
- item->typeNs);
- if ((type == NULL) || (! WXS_IS_SIMPLE(type))) {
- xmlSchemaPResCompAttrErr(ctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- WXS_BASIC_CAST item, item->node,
- "type", item->typeName, item->typeNs,
- XML_SCHEMA_TYPE_SIMPLE, NULL);
- return(ctxt->err);
- } else
- item->subtypes = type;
-
- } else {
- /*
- * The type defaults to the xs:anySimpleType.
- */
- item->subtypes = xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYSIMPLETYPE);
- }
- return(0);
-}
-
-/**
- * xmlSchemaResolveIDCKeyReferences:
- * @idc: the identity-constraint definition
- * @ctxt: the schema parser context
- * @name: the attribute name
- *
- * Resolve keyRef references to key/unique IDCs.
- * Schema Component Constraint:
- * Identity-constraint Definition Properties Correct (c-props-correct)
- */
-static int
-xmlSchemaResolveIDCKeyReferences(xmlSchemaIDCPtr idc,
- xmlSchemaParserCtxtPtr pctxt)
-{
- if (idc->type != XML_SCHEMA_TYPE_IDC_KEYREF)
- return(0);
- if (idc->ref->name != NULL) {
- idc->ref->item = (xmlSchemaBasicItemPtr)
- xmlSchemaGetIDC(pctxt->schema, idc->ref->name,
- idc->ref->targetNamespace);
- if (idc->ref->item == NULL) {
- /*
- * TODO: It is actually not an error to fail to resolve
- * at this stage. BUT we need to be that strict!
- */
- xmlSchemaPResCompAttrErr(pctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- WXS_BASIC_CAST idc, idc->node,
- "refer", idc->ref->name,
- idc->ref->targetNamespace,
- XML_SCHEMA_TYPE_IDC_KEY, NULL);
- return(pctxt->err);
- } else if (idc->ref->item->type == XML_SCHEMA_TYPE_IDC_KEYREF) {
- /*
- * SPEC c-props-correct (1)
- */
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_C_PROPS_CORRECT,
- NULL, WXS_BASIC_CAST idc,
- "The keyref references a keyref",
- NULL, NULL);
- idc->ref->item = NULL;
- return(pctxt->err);
- } else {
- if (idc->nbFields !=
- ((xmlSchemaIDCPtr) idc->ref->item)->nbFields) {
- xmlChar *str = NULL;
- xmlSchemaIDCPtr refer;
-
- refer = (xmlSchemaIDCPtr) idc->ref->item;
- /*
- * SPEC c-props-correct(2)
- * "If the {identity-constraint category} is keyref,
- * the cardinality of the {fields} must equal that of
- * the {fields} of the {referenced key}.
- */
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_C_PROPS_CORRECT,
- NULL, WXS_BASIC_CAST idc,
- "The cardinality of the keyref differs from the "
- "cardinality of the referenced key/unique '%s'",
- xmlSchemaFormatQName(&str, refer->targetNamespace,
- refer->name),
- NULL);
- FREE_AND_NULL(str)
- return(pctxt->err);
- }
- }
- }
- return(0);
-}
-
-static int
-xmlSchemaResolveAttrUseProhibReferences(xmlSchemaAttributeUseProhibPtr prohib,
- xmlSchemaParserCtxtPtr pctxt)
-{
- if (xmlSchemaGetAttributeDecl(pctxt->schema, prohib->name,
- prohib->targetNamespace) == NULL) {
-
- xmlSchemaPResCompAttrErr(pctxt,
- XML_SCHEMAP_SRC_RESOLVE,
- NULL, prohib->node,
- "ref", prohib->name, prohib->targetNamespace,
- XML_SCHEMA_TYPE_ATTRIBUTE, NULL);
- return(XML_SCHEMAP_SRC_RESOLVE);
- }
- return(0);
-}
-
-#define WXS_REDEFINED_TYPE(c) \
-(((xmlSchemaTypePtr) item)->flags & XML_SCHEMAS_TYPE_REDEFINED)
-
-#define WXS_REDEFINED_MODEL_GROUP_DEF(c) \
-(((xmlSchemaModelGroupDefPtr) item)->flags & XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED)
-
-#define WXS_REDEFINED_ATTR_GROUP(c) \
-(((xmlSchemaAttributeGroupPtr) item)->flags & XML_SCHEMAS_ATTRGROUP_REDEFINED)
-
-static int
-xmlSchemaCheckSRCRedefineFirst(xmlSchemaParserCtxtPtr pctxt)
-{
- int err = 0;
- xmlSchemaRedefPtr redef = WXS_CONSTRUCTOR(pctxt)->redefs;
- xmlSchemaBasicItemPtr prev, item;
- int wasRedefined;
-
- if (redef == NULL)
- return(0);
-
- do {
- item = redef->item;
- /*
- * First try to locate the redefined component in the
- * schema graph starting with the redefined schema.
- * NOTE: According to this schema bug entry:
- * http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005OctDec/0019.html
- * it's not clear if the referenced component needs to originate
- * from the <redefine>d schema _document_ or the schema; the latter
- * would include all imported and included sub-schemas of the
- * <redefine>d schema. Currenlty we latter approach is used.
- * SUPPLEMENT: It seems that the WG moves towards the latter
- * approach, so we are doing it right.
- *
- */
- prev = xmlSchemaFindRedefCompInGraph(
- redef->targetBucket, item->type,
- redef->refName, redef->refTargetNs);
- if (prev == NULL) {
- xmlChar *str = NULL;
- xmlNodePtr node;
-
- /*
- * SPEC src-redefine:
- * (6.2.1) "The `actual value` of its own name attribute plus
- * target namespace must successfully `resolve` to a model
- * group definition in I."
- * (7.2.1) "The `actual value` of its own name attribute plus
- * target namespace must successfully `resolve` to an attribute
- * group definition in I."
-
- *
- * Note that, if we are redefining with the use of references
- * to components, the spec assumes the src-resolve to be used;
- * but this won't assure that we search only *inside* the
- * redefined schema.
- */
- if (redef->reference)
- node = WXS_ITEM_NODE(redef->reference);
- else
- node = WXS_ITEM_NODE(item);
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- /*
- * TODO: error code.
- * Probably XML_SCHEMAP_SRC_RESOLVE, if this is using the
- * reference kind.
- */
- XML_SCHEMAP_SRC_REDEFINE, node, NULL,
- "The %s '%s' to be redefined could not be found in "
- "the redefined schema",
- WXS_ITEM_TYPE_NAME(item),
- xmlSchemaFormatQName(&str, redef->refTargetNs,
- redef->refName));
- FREE_AND_NULL(str);
- err = pctxt->err;
- redef = redef->next;
- continue;
- }
- /*
- * TODO: Obtaining and setting the redefinition state is really
- * clumsy.
- */
- wasRedefined = 0;
- switch (item->type) {
- case XML_SCHEMA_TYPE_COMPLEX:
- case XML_SCHEMA_TYPE_SIMPLE:
- if ((WXS_TYPE_CAST prev)->flags &
- XML_SCHEMAS_TYPE_REDEFINED)
- {
- wasRedefined = 1;
- break;
- }
- /* Mark it as redefined. */
- (WXS_TYPE_CAST prev)->flags |= XML_SCHEMAS_TYPE_REDEFINED;
- /*
- * Assign the redefined type to the
- * base type of the redefining type.
- * TODO: How
- */
- ((xmlSchemaTypePtr) item)->baseType =
- (xmlSchemaTypePtr) prev;
- break;
- case XML_SCHEMA_TYPE_GROUP:
- if ((WXS_MODEL_GROUPDEF_CAST prev)->flags &
- XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED)
- {
- wasRedefined = 1;
- break;
- }
- /* Mark it as redefined. */
- (WXS_MODEL_GROUPDEF_CAST prev)->flags |=
- XML_SCHEMA_MODEL_GROUP_DEF_REDEFINED;
- if (redef->reference != NULL) {
- /*
- * Overwrite the QName-reference with the
- * referenced model group def.
- */
- (WXS_PTC_CAST redef->reference)->children =
- WXS_TREE_CAST prev;
- }
- redef->target = prev;
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- if ((WXS_ATTR_GROUP_CAST prev)->flags &
- XML_SCHEMAS_ATTRGROUP_REDEFINED)
- {
- wasRedefined = 1;
- break;
- }
- (WXS_ATTR_GROUP_CAST prev)->flags |=
- XML_SCHEMAS_ATTRGROUP_REDEFINED;
- if (redef->reference != NULL) {
- /*
- * Assign the redefined attribute group to the
- * QName-reference component.
- * This is the easy case, since we will just
- * expand the redefined group.
- */
- (WXS_QNAME_CAST redef->reference)->item = prev;
- redef->target = NULL;
- } else {
- /*
- * This is the complicated case: we need
- * to apply src-redefine (7.2.2) at a later
- * stage, i.e. when attribute group references
- * have beed expanded and simple types have
- * beed fixed.
- */
- redef->target = prev;
- }
- break;
- default:
- PERROR_INT("xmlSchemaResolveRedefReferences",
- "Unexpected redefined component type");
- return(-1);
- }
- if (wasRedefined) {
- xmlChar *str = NULL;
- xmlNodePtr node;
-
- if (redef->reference)
- node = WXS_ITEM_NODE(redef->reference);
- else
- node = WXS_ITEM_NODE(redef->item);
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- /* TODO: error code. */
- XML_SCHEMAP_SRC_REDEFINE,
- node, NULL,
- "The referenced %s was already redefined. Multiple "
- "redefinition of the same component is not supported",
- xmlSchemaGetComponentDesignation(&str, prev),
- NULL);
- FREE_AND_NULL(str)
- err = pctxt->err;
- redef = redef->next;
- continue;
- }
- redef = redef->next;
- } while (redef != NULL);
-
- return(err);
-}
-
-static int
-xmlSchemaCheckSRCRedefineSecond(xmlSchemaParserCtxtPtr pctxt)
-{
- int err = 0;
- xmlSchemaRedefPtr redef = WXS_CONSTRUCTOR(pctxt)->redefs;
- xmlSchemaBasicItemPtr item;
-
- if (redef == NULL)
- return(0);
-
- do {
- if (redef->target == NULL) {
- redef = redef->next;
- continue;
- }
- item = redef->item;
-
- switch (item->type) {
- case XML_SCHEMA_TYPE_SIMPLE:
- case XML_SCHEMA_TYPE_COMPLEX:
- /*
- * Since the spec wants the {name} of the redefined
- * type to be 'absent', we'll NULL it.
- */
- (WXS_TYPE_CAST redef->target)->name = NULL;
-
- /*
- * TODO: Seems like there's nothing more to do. The normal
- * inheritance mechanism is used. But not 100% sure.
- */
- break;
- case XML_SCHEMA_TYPE_GROUP:
- /*
- * URGENT TODO:
- * SPEC src-redefine:
- * (6.2.2) "The {model group} of the model group definition
- * which corresponds to it per XML Representation of Model
- * Group Definition Schema Components ($3.7.2) must be a
- * `valid restriction` of the {model group} of that model
- * group definition in I, as defined in Particle Valid
- * (Restriction) ($3.9.6)."
- */
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- /*
- * SPEC src-redefine:
- * (7.2.2) "The {attribute uses} and {attribute wildcard} of
- * the attribute group definition which corresponds to it
- * per XML Representation of Attribute Group Definition Schema
- * Components ($3.6.2) must be `valid restrictions` of the
- * {attribute uses} and {attribute wildcard} of that attribute
- * group definition in I, as defined in clause 2, clause 3 and
- * clause 4 of Derivation Valid (Restriction, Complex)
- * ($3.4.6) (where references to the base type definition are
- * understood as references to the attribute group definition
- * in I)."
- */
- err = xmlSchemaCheckDerivationOKRestriction2to4(pctxt,
- XML_SCHEMA_ACTION_REDEFINE,
- item, redef->target,
- (WXS_ATTR_GROUP_CAST item)->attrUses,
- (WXS_ATTR_GROUP_CAST redef->target)->attrUses,
- (WXS_ATTR_GROUP_CAST item)->attributeWildcard,
- (WXS_ATTR_GROUP_CAST redef->target)->attributeWildcard);
- if (err == -1)
- return(-1);
- break;
- default:
- break;
- }
- redef = redef->next;
- } while (redef != NULL);
- return(0);
-}
-
-
-static int
-xmlSchemaAddComponents(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaBucketPtr bucket)
-{
- xmlSchemaBasicItemPtr item;
- int err;
- xmlHashTablePtr *table;
- const xmlChar *name;
- int i;
-
-#define WXS_GET_GLOBAL_HASH(c, slot) { \
- if (WXS_IS_BUCKET_IMPMAIN((c)->type)) \
- table = &(WXS_IMPBUCKET((c))->schema->slot); \
- else \
- table = &(WXS_INCBUCKET((c))->ownerImport->schema->slot); }
-
- /*
- * Add global components to the schema's hash tables.
- * This is the place where duplicate components will be
- * detected.
- * TODO: I think normally we should support imports of the
- * same namespace from multiple locations. We don't do currently,
- * but if we do then according to:
- * http://www.w3.org/Bugs/Public/show_bug.cgi?id=2224
- * we would need, if imported directly, to import redefined
- * components as well to be able to catch clashing components.
- * (I hope I'll still know what this means after some months :-()
- */
- if (bucket == NULL)
- return(-1);
- if (bucket->flags & XML_SCHEMA_BUCKET_COMPS_ADDED)
- return(0);
- bucket->flags |= XML_SCHEMA_BUCKET_COMPS_ADDED;
-
- for (i = 0; i < bucket->globals->nbItems; i++) {
- item = bucket->globals->items[i];
- table = NULL;
- switch (item->type) {
- case XML_SCHEMA_TYPE_COMPLEX:
- case XML_SCHEMA_TYPE_SIMPLE:
- if (WXS_REDEFINED_TYPE(item))
- continue;
- name = (WXS_TYPE_CAST item)->name;
- WXS_GET_GLOBAL_HASH(bucket, typeDecl)
- break;
- case XML_SCHEMA_TYPE_ELEMENT:
- name = (WXS_ELEM_CAST item)->name;
- WXS_GET_GLOBAL_HASH(bucket, elemDecl)
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- name = (WXS_ATTR_CAST item)->name;
- WXS_GET_GLOBAL_HASH(bucket, attrDecl)
- break;
- case XML_SCHEMA_TYPE_GROUP:
- if (WXS_REDEFINED_MODEL_GROUP_DEF(item))
- continue;
- name = (WXS_MODEL_GROUPDEF_CAST item)->name;
- WXS_GET_GLOBAL_HASH(bucket, groupDecl)
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- if (WXS_REDEFINED_ATTR_GROUP(item))
- continue;
- name = (WXS_ATTR_GROUP_CAST item)->name;
- WXS_GET_GLOBAL_HASH(bucket, attrgrpDecl)
- break;
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- name = (WXS_IDC_CAST item)->name;
- WXS_GET_GLOBAL_HASH(bucket, idcDef)
- break;
- case XML_SCHEMA_TYPE_NOTATION:
- name = ((xmlSchemaNotationPtr) item)->name;
- WXS_GET_GLOBAL_HASH(bucket, notaDecl)
- break;
- default:
- PERROR_INT("xmlSchemaAddComponents",
- "Unexpected global component type");
- continue;
- }
- if (*table == NULL) {
- *table = xmlHashCreateDict(10, pctxt->dict);
- if (*table == NULL) {
- PERROR_INT("xmlSchemaAddComponents",
- "failed to create a component hash table");
- return(-1);
- }
- }
- err = xmlHashAddEntry(*table, name, item);
- if (err != 0) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST pctxt,
- XML_SCHEMAP_REDEFINED_TYPE,
- WXS_ITEM_NODE(item),
- WXS_BASIC_CAST item,
- "A global %s '%s' does already exist",
- WXS_ITEM_TYPE_NAME(item),
- xmlSchemaGetComponentQName(&str, item));
- FREE_AND_NULL(str);
- }
- }
- /*
- * Process imported/included schemas.
- */
- if (bucket->relations != NULL) {
- xmlSchemaSchemaRelationPtr rel = bucket->relations;
- do {
- if ((rel->bucket != NULL) &&
- ((rel->bucket->flags & XML_SCHEMA_BUCKET_COMPS_ADDED) == 0)) {
- if (xmlSchemaAddComponents(pctxt, rel->bucket) == -1)
- return(-1);
- }
- rel = rel->next;
- } while (rel != NULL);
- }
- return(0);
-}
-
-static int
-xmlSchemaFixupComponents(xmlSchemaParserCtxtPtr pctxt,
- xmlSchemaBucketPtr rootBucket)
-{
- xmlSchemaConstructionCtxtPtr con = pctxt->constructor;
- xmlSchemaTreeItemPtr item, *items;
- int nbItems, i, ret = 0;
- xmlSchemaBucketPtr oldbucket = con->bucket;
- xmlSchemaElementPtr elemDecl;
-
-#define FIXHFAILURE if (pctxt->err == XML_SCHEMAP_INTERNAL) goto exit_failure;
-
- if ((con->pending == NULL) ||
- (con->pending->nbItems == 0))
- return(0);
-
- /*
- * Since xmlSchemaFixupComplexType() will create new particles
- * (local components), and those particle components need a bucket
- * on the constructor, we'll assure here that the constructor has
- * a bucket.
- * TODO: Think about storing locals _only_ on the main bucket.
- */
- if (con->bucket == NULL)
- con->bucket = rootBucket;
-
- /* TODO:
- * SPEC (src-redefine):
- * (6.2) "If it has no such self-reference, then all of the
- * following must be true:"
-
- * (6.2.2) The {model group} of the model group definition which
- * corresponds to it per XML Representation of Model Group
- * Definition Schema Components ($3.7.2) must be a `valid
- * restriction` of the {model group} of that model group definition
- * in I, as defined in Particle Valid (Restriction) ($3.9.6)."
- */
- xmlSchemaCheckSRCRedefineFirst(pctxt);
-
- /*
- * Add global components to the schemata's hash tables.
- */
- xmlSchemaAddComponents(pctxt, rootBucket);
-
- pctxt->ctxtType = NULL;
- items = (xmlSchemaTreeItemPtr *) con->pending->items;
- nbItems = con->pending->nbItems;
- /*
- * Now that we have parsed *all* the schema document(s) and converted
- * them to schema components, we can resolve references, apply component
- * constraints, create the FSA from the content model, etc.
- */
- /*
- * Resolve references of..
- *
- * 1. element declarations:
- * - the type definition
- * - the substitution group affiliation
- * 2. simple/complex types:
- * - the base type definition
- * - the memberTypes of union types
- * - the itemType of list types
- * 3. attributes declarations and attribute uses:
- * - the type definition
- * - if an attribute use, then the attribute declaration
- * 4. attribute group references:
- * - the attribute group definition
- * 5. particles:
- * - the term of the particle (e.g. a model group)
- * 6. IDC key-references:
- * - the referenced IDC 'key' or 'unique' definition
- * 7. Attribute prohibitions which had a "ref" attribute.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_ELEMENT:
- xmlSchemaResolveElementReferences(
- (xmlSchemaElementPtr) item, pctxt);
- FIXHFAILURE;
- break;
- case XML_SCHEMA_TYPE_COMPLEX:
- case XML_SCHEMA_TYPE_SIMPLE:
- xmlSchemaResolveTypeReferences(
- (xmlSchemaTypePtr) item, pctxt);
- FIXHFAILURE;
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- xmlSchemaResolveAttrTypeReferences(
- (xmlSchemaAttributePtr) item, pctxt);
- FIXHFAILURE;
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
- xmlSchemaResolveAttrUseReferences(
- (xmlSchemaAttributeUsePtr) item, pctxt);
- FIXHFAILURE;
- break;
- case XML_SCHEMA_EXTRA_QNAMEREF:
- if ((WXS_QNAME_CAST item)->itemType ==
- XML_SCHEMA_TYPE_ATTRIBUTEGROUP)
- {
- xmlSchemaResolveAttrGroupReferences(
- WXS_QNAME_CAST item, pctxt);
- }
- FIXHFAILURE;
- break;
- case XML_SCHEMA_TYPE_SEQUENCE:
- case XML_SCHEMA_TYPE_CHOICE:
- case XML_SCHEMA_TYPE_ALL:
- xmlSchemaResolveModelGroupParticleReferences(pctxt,
- WXS_MODEL_GROUP_CAST item);
- FIXHFAILURE;
- break;
- case XML_SCHEMA_TYPE_IDC_KEY:
- case XML_SCHEMA_TYPE_IDC_UNIQUE:
- case XML_SCHEMA_TYPE_IDC_KEYREF:
- xmlSchemaResolveIDCKeyReferences(
- (xmlSchemaIDCPtr) item, pctxt);
- FIXHFAILURE;
- break;
- case XML_SCHEMA_EXTRA_ATTR_USE_PROHIB:
- /*
- * Handle attribue prohibition which had a
- * "ref" attribute.
- */
- xmlSchemaResolveAttrUseProhibReferences(
- WXS_ATTR_PROHIB_CAST item, pctxt);
- FIXHFAILURE;
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
-
- /*
- * Now that all references are resolved we
- * can check for circularity of...
- * 1. the base axis of type definitions
- * 2. nested model group definitions
- * 3. nested attribute group definitions
- * TODO: check for circual substitution groups.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- /*
- * Let's better stop on the first error here.
- */
- switch (item->type) {
- case XML_SCHEMA_TYPE_COMPLEX:
- case XML_SCHEMA_TYPE_SIMPLE:
- xmlSchemaCheckTypeDefCircular(
- (xmlSchemaTypePtr) item, pctxt);
- FIXHFAILURE;
- if (pctxt->nberrors != 0)
- goto exit_error;
- break;
- case XML_SCHEMA_TYPE_GROUP:
- xmlSchemaCheckGroupDefCircular(
- (xmlSchemaModelGroupDefPtr) item, pctxt);
- FIXHFAILURE;
- if (pctxt->nberrors != 0)
- goto exit_error;
- break;
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- xmlSchemaCheckAttrGroupCircular(
- (xmlSchemaAttributeGroupPtr) item, pctxt);
- FIXHFAILURE;
- if (pctxt->nberrors != 0)
- goto exit_error;
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
- /*
- * Model group definition references:
- * Such a reference is reflected by a particle at the component
- * level. Until now the 'term' of such particles pointed
- * to the model group definition; this was done, in order to
- * ease circularity checks. Now we need to set the 'term' of
- * such particles to the model group of the model group definition.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_SEQUENCE:
- case XML_SCHEMA_TYPE_CHOICE:
- xmlSchemaModelGroupToModelGroupDefFixup(pctxt,
- WXS_MODEL_GROUP_CAST item);
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
- /*
- * Expand attribute group references of attribute group definitions.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- if ((! WXS_ATTR_GROUP_EXPANDED(item)) &&
- WXS_ATTR_GROUP_HAS_REFS(item))
- {
- xmlSchemaAttributeGroupExpandRefs(pctxt,
- WXS_ATTR_GROUP_CAST item);
- FIXHFAILURE;
- }
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
- /*
- * First compute the variety of simple types. This is needed as
- * a seperate step, since otherwise we won't be able to detect
- * circular union types in all cases.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_SIMPLE:
- if (WXS_IS_TYPE_NOT_FIXED_1((xmlSchemaTypePtr) item)) {
- xmlSchemaFixupSimpleTypeStageOne(pctxt,
- (xmlSchemaTypePtr) item);
- FIXHFAILURE;
- }
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
- /*
- * Detect circular union types. Note that this needs the variety to
- * be already computed.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_SIMPLE:
- if (((xmlSchemaTypePtr) item)->memberTypes != NULL) {
- xmlSchemaCheckUnionTypeDefCircular(pctxt,
- (xmlSchemaTypePtr) item);
- FIXHFAILURE;
- }
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
-
- /*
- * Do the complete type fixup for simple types.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_SIMPLE:
- if (WXS_IS_TYPE_NOT_FIXED(WXS_TYPE_CAST item)) {
- xmlSchemaFixupSimpleTypeStageTwo(pctxt, WXS_TYPE_CAST item);
- FIXHFAILURE;
- }
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
- /*
- * At this point we need build and check all simple types.
- */
- /*
- * Apply contraints for attribute declarations.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_ATTRIBUTE:
- xmlSchemaCheckAttrPropsCorrect(pctxt, WXS_ATTR_CAST item);
- FIXHFAILURE;
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
- /*
- * Apply constraints for attribute uses.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_ATTRIBUTE_USE:
- if (((xmlSchemaAttributeUsePtr)item)->defValue != NULL) {
- xmlSchemaCheckAttrUsePropsCorrect(pctxt,
- WXS_ATTR_USE_CAST item);
- FIXHFAILURE;
- }
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
-
- /*
- * Apply constraints for attribute group definitions.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_ATTRIBUTEGROUP:
- if (( (WXS_ATTR_GROUP_CAST item)->attrUses != NULL) &&
- ( (WXS_LIST_CAST (WXS_ATTR_GROUP_CAST item)->attrUses)->nbItems > 1))
- {
- xmlSchemaCheckAGPropsCorrect(pctxt, WXS_ATTR_GROUP_CAST item);
- FIXHFAILURE;
- }
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
-
- /*
- * Apply constraints for redefinitions.
- */
- if (WXS_CONSTRUCTOR(pctxt)->redefs != NULL)
- xmlSchemaCheckSRCRedefineSecond(pctxt);
- if (pctxt->nberrors != 0)
- goto exit_error;
-
- /*
- * Complex types are builded and checked.
- */
- for (i = 0; i < nbItems; i++) {
- item = con->pending->items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_COMPLEX:
- if (WXS_IS_TYPE_NOT_FIXED(WXS_TYPE_CAST item)) {
- xmlSchemaFixupComplexType(pctxt, WXS_TYPE_CAST item);
- FIXHFAILURE;
- }
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
-
- /*
- * The list could have changed, since xmlSchemaFixupComplexType()
- * will create particles and model groups in some cases.
- */
- items = (xmlSchemaTreeItemPtr *) con->pending->items;
- nbItems = con->pending->nbItems;
-
- /*
- * Apply some constraints for element declarations.
- */
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_ELEMENT:
- elemDecl = (xmlSchemaElementPtr) item;
-
- if ((elemDecl->flags & XML_SCHEMAS_ELEM_INTERNAL_CHECKED) == 0)
- {
- xmlSchemaCheckElementDeclComponent(
- (xmlSchemaElementPtr) elemDecl, pctxt);
- FIXHFAILURE;
- }
-
-#ifdef WXS_ELEM_DECL_CONS_ENABLED
- /*
- * Schema Component Constraint: Element Declarations Consistent
- * Apply this constraint to local types of element declarations.
- */
- if ((WXS_ELEM_TYPEDEF(elemDecl) != NULL) &&
- (WXS_IS_COMPLEX(WXS_ELEM_TYPEDEF(elemDecl))) &&
- (WXS_TYPE_IS_LOCAL(WXS_ELEM_TYPEDEF(elemDecl))))
- {
- xmlSchemaCheckElementDeclConsistent(pctxt,
- WXS_BASIC_CAST elemDecl,
- WXS_TYPE_PARTICLE(WXS_ELEM_TYPEDEF(elemDecl)),
- NULL, NULL, 0);
- }
-#endif
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
-
- /*
- * Finally we can build the automaton from the content model of
- * complex types.
- */
-
- for (i = 0; i < nbItems; i++) {
- item = items[i];
- switch (item->type) {
- case XML_SCHEMA_TYPE_COMPLEX:
- xmlSchemaBuildContentModel((xmlSchemaTypePtr) item, pctxt);
- /* FIXHFAILURE; */
- break;
- default:
- break;
- }
- }
- if (pctxt->nberrors != 0)
- goto exit_error;
- /*
- * URGENT TODO: cos-element-consistent
- */
- goto exit;
-
-exit_error:
- ret = pctxt->err;
- goto exit;
-
-exit_failure:
- ret = -1;
-
-exit:
- /*
- * Reset the constructor. This is needed for XSI acquisition, since
- * those items will be processed over and over again for every XSI
- * if not cleared here.
- */
- con->bucket = oldbucket;
- con->pending->nbItems = 0;
- if (con->substGroups != NULL) {
- xmlHashFree(con->substGroups,
- (xmlHashDeallocator) xmlSchemaSubstGroupFree);
- con->substGroups = NULL;
- }
- if (con->redefs != NULL) {
- xmlSchemaRedefListFree(con->redefs);
- con->redefs = NULL;
- }
- return(ret);
-}
-/**
- * xmlSchemaParse:
- * @ctxt: a schema validation context
- *
- * parse a schema definition resource and build an internal
- * XML Shema struture which can be used to validate instances.
- *
- * Returns the internal XML Schema structure built from the resource or
- * NULL in case of error
- */
-xmlSchemaPtr
-xmlSchemaParse(xmlSchemaParserCtxtPtr ctxt)
-{
- xmlSchemaPtr mainSchema = NULL;
- xmlSchemaBucketPtr bucket = NULL;
- int res;
-
- /*
- * This one is used if the schema to be parsed was specified via
- * the API; i.e. not automatically by the validated instance document.
- */
-
- xmlSchemaInitTypes();
-
- if (ctxt == NULL)
- return (NULL);
-
- /* TODO: Init the context. Is this all we need?*/
- ctxt->nberrors = 0;
- ctxt->err = 0;
- ctxt->counter = 0;
-
- /* Create the *main* schema. */
- mainSchema = xmlSchemaNewSchema(ctxt);
- if (mainSchema == NULL)
- goto exit_failure;
- /*
- * Create the schema constructor.
- */
- if (ctxt->constructor == NULL) {
- ctxt->constructor = xmlSchemaConstructionCtxtCreate(ctxt->dict);
- if (ctxt->constructor == NULL)
- return(NULL);
- /* Take ownership of the constructor to be able to free it. */
- ctxt->ownsConstructor = 1;
- }
- ctxt->constructor->mainSchema = mainSchema;
- /*
- * Locate and add the schema document.
- */
- res = xmlSchemaAddSchemaDoc(ctxt, XML_SCHEMA_SCHEMA_MAIN,
- ctxt->URL, ctxt->doc, ctxt->buffer, ctxt->size, NULL,
- NULL, NULL, &bucket);
- if (res == -1)
- goto exit_failure;
- if (res != 0)
- goto exit;
-
- if (bucket == NULL) {
- /* TODO: Error code, actually we failed to *locate* the schema. */
- if (ctxt->URL)
- xmlSchemaCustomErr(ACTXT_CAST ctxt, XML_SCHEMAP_FAILED_LOAD,
- NULL, NULL,
- "Failed to locate the main schema resource at '%s'",
- ctxt->URL, NULL);
- else
- xmlSchemaCustomErr(ACTXT_CAST ctxt, XML_SCHEMAP_FAILED_LOAD,
- NULL, NULL,
- "Failed to locate the main schema resource",
- NULL, NULL);
- goto exit;
- }
- /* Then do the parsing for good. */
- if (xmlSchemaParseNewDocWithContext(ctxt, mainSchema, bucket) == -1)
- goto exit_failure;
- if (ctxt->nberrors != 0)
- goto exit;
-
- mainSchema->doc = bucket->doc;
- mainSchema->preserve = ctxt->preserve;
-
- ctxt->schema = mainSchema;
-
- if (xmlSchemaFixupComponents(ctxt, WXS_CONSTRUCTOR(ctxt)->mainBucket) == -1)
- goto exit_failure;
-
- /*
- * TODO: This is not nice, since we cannot distinguish from the
- * result if there was an internal error or not.
- */
-exit:
- if (ctxt->nberrors != 0) {
- if (mainSchema) {
- xmlSchemaFree(mainSchema);
- mainSchema = NULL;
- }
- if (ctxt->constructor) {
- xmlSchemaConstructionCtxtFree(ctxt->constructor);
- ctxt->constructor = NULL;
- ctxt->ownsConstructor = 0;
- }
- }
- ctxt->schema = NULL;
- return(mainSchema);
-exit_failure:
- /*
- * Quite verbose, but should catch internal errors, which were
- * not communitated.
- */
- if (mainSchema) {
- xmlSchemaFree(mainSchema);
- mainSchema = NULL;
- }
- if (ctxt->constructor) {
- xmlSchemaConstructionCtxtFree(ctxt->constructor);
- ctxt->constructor = NULL;
- ctxt->ownsConstructor = 0;
- }
- PERROR_INT2("xmlSchemaParse",
- "An internal error occured");
- ctxt->schema = NULL;
- return(NULL);
-}
-
-/**
- * xmlSchemaSetParserErrors:
- * @ctxt: a schema validation context
- * @err: the error callback
- * @warn: the warning callback
- * @ctx: contextual data for the callbacks
- *
- * Set the callback functions used to handle errors for a validation context
- */
-void
-xmlSchemaSetParserErrors(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaValidityErrorFunc err,
- xmlSchemaValidityWarningFunc warn, void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->error = err;
- ctxt->warning = warn;
- ctxt->errCtxt = ctx;
- if (ctxt->vctxt != NULL)
- xmlSchemaSetValidErrors(ctxt->vctxt, err, warn, ctx);
-}
-
-/**
- * xmlSchemaSetParserStructuredErrors:
- * @ctxt: a schema parser context
- * @serror: the structured error function
- * @ctx: the functions context
- *
- * Set the structured error callback
- */
-void
-xmlSchemaSetParserStructuredErrors(xmlSchemaParserCtxtPtr ctxt,
- xmlStructuredErrorFunc serror,
- void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->serror = serror;
- ctxt->errCtxt = ctx;
- if (ctxt->vctxt != NULL)
- xmlSchemaSetValidStructuredErrors(ctxt->vctxt, serror, ctx);
-}
-
-/**
- * xmlSchemaGetParserErrors:
- * @ctxt: a XMl-Schema parser context
- * @err: the error callback result
- * @warn: the warning callback result
- * @ctx: contextual data for the callbacks result
- *
- * Get the callback information used to handle errors for a parser context
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-int
-xmlSchemaGetParserErrors(xmlSchemaParserCtxtPtr ctxt,
- xmlSchemaValidityErrorFunc * err,
- xmlSchemaValidityWarningFunc * warn, void **ctx)
-{
- if (ctxt == NULL)
- return(-1);
- if (err != NULL)
- *err = ctxt->error;
- if (warn != NULL)
- *warn = ctxt->warning;
- if (ctx != NULL)
- *ctx = ctxt->errCtxt;
- return(0);
-}
-
-/**
- * xmlSchemaFacetTypeToString:
- * @type: the facet type
- *
- * Convert the xmlSchemaTypeType to a char string.
- *
- * Returns the char string representation of the facet type if the
- * type is a facet and an "Internal Error" string otherwise.
- */
-static const xmlChar *
-xmlSchemaFacetTypeToString(xmlSchemaTypeType type)
-{
- switch (type) {
- case XML_SCHEMA_FACET_PATTERN:
- return (BAD_CAST "pattern");
- case XML_SCHEMA_FACET_MAXEXCLUSIVE:
- return (BAD_CAST "maxExclusive");
- case XML_SCHEMA_FACET_MAXINCLUSIVE:
- return (BAD_CAST "maxInclusive");
- case XML_SCHEMA_FACET_MINEXCLUSIVE:
- return (BAD_CAST "minExclusive");
- case XML_SCHEMA_FACET_MININCLUSIVE:
- return (BAD_CAST "minInclusive");
- case XML_SCHEMA_FACET_WHITESPACE:
- return (BAD_CAST "whiteSpace");
- case XML_SCHEMA_FACET_ENUMERATION:
- return (BAD_CAST "enumeration");
- case XML_SCHEMA_FACET_LENGTH:
- return (BAD_CAST "length");
- case XML_SCHEMA_FACET_MAXLENGTH:
- return (BAD_CAST "maxLength");
- case XML_SCHEMA_FACET_MINLENGTH:
- return (BAD_CAST "minLength");
- case XML_SCHEMA_FACET_TOTALDIGITS:
- return (BAD_CAST "totalDigits");
- case XML_SCHEMA_FACET_FRACTIONDIGITS:
- return (BAD_CAST "fractionDigits");
- default:
- break;
- }
- return (BAD_CAST "Internal Error");
-}
-
-static xmlSchemaWhitespaceValueType
-xmlSchemaGetWhiteSpaceFacetValue(xmlSchemaTypePtr type)
-{
- /*
- * The normalization type can be changed only for types which are derived
- * from xsd:string.
- */
- if (type->type == XML_SCHEMA_TYPE_BASIC) {
- /*
- * Note that we assume a whitespace of preserve for anySimpleType.
- */
- if ((type->builtInType == XML_SCHEMAS_STRING) ||
- (type->builtInType == XML_SCHEMAS_ANYSIMPLETYPE))
- return(XML_SCHEMA_WHITESPACE_PRESERVE);
- else if (type->builtInType == XML_SCHEMAS_NORMSTRING)
- return(XML_SCHEMA_WHITESPACE_REPLACE);
- else {
- /*
- * For all `atomic` datatypes other than string (and types `derived`
- * by `restriction` from it) the value of whiteSpace is fixed to
- * collapse
- * Note that this includes built-in list datatypes.
- */
- return(XML_SCHEMA_WHITESPACE_COLLAPSE);
- }
- } else if (WXS_IS_LIST(type)) {
- /*
- * For list types the facet "whiteSpace" is fixed to "collapse".
- */
- return (XML_SCHEMA_WHITESPACE_COLLAPSE);
- } else if (WXS_IS_UNION(type)) {
- return (XML_SCHEMA_WHITESPACE_UNKNOWN);
- } else if (WXS_IS_ATOMIC(type)) {
- if (type->flags & XML_SCHEMAS_TYPE_WHITESPACE_PRESERVE)
- return (XML_SCHEMA_WHITESPACE_PRESERVE);
- else if (type->flags & XML_SCHEMAS_TYPE_WHITESPACE_REPLACE)
- return (XML_SCHEMA_WHITESPACE_REPLACE);
- else
- return (XML_SCHEMA_WHITESPACE_COLLAPSE);
- }
- return (-1);
-}
-
-/************************************************************************
- * *
- * Simple type validation *
- * *
- ************************************************************************/
-
-
-/************************************************************************
- * *
- * DOM Validation code *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaAssembleByLocation:
- * @pctxt: a schema parser context
- * @vctxt: a schema validation context
- * @schema: the existing schema
- * @node: the node that fired the assembling
- * @nsName: the namespace name of the new schema
- * @location: the location of the schema
- *
- * Expands an existing schema by an additional schema.
- *
- * Returns 0 if the new schema is correct, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaAssembleByLocation(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- const xmlChar *nsName,
- const xmlChar *location)
-{
- int ret = 0;
- xmlSchemaParserCtxtPtr pctxt;
- xmlSchemaBucketPtr bucket = NULL;
-
- if ((vctxt == NULL) || (schema == NULL))
- return (-1);
-
- if (vctxt->pctxt == NULL) {
- VERROR_INT("xmlSchemaAssembleByLocation",
- "no parser context available");
- return(-1);
- }
- pctxt = vctxt->pctxt;
- if (pctxt->constructor == NULL) {
- PERROR_INT("xmlSchemaAssembleByLocation",
- "no constructor");
- return(-1);
- }
- /*
- * Acquire the schema document.
- */
- location = xmlSchemaBuildAbsoluteURI(pctxt->dict,
- location, node);
- /*
- * Note that we pass XML_SCHEMA_SCHEMA_IMPORT here;
- * the process will automatically change this to
- * XML_SCHEMA_SCHEMA_MAIN if it is the first schema document.
- */
- ret = xmlSchemaAddSchemaDoc(pctxt, XML_SCHEMA_SCHEMA_IMPORT,
- location, NULL, NULL, 0, node, NULL, nsName,
- &bucket);
- if (ret != 0)
- return(ret);
- if (bucket == NULL) {
- /*
- * Generate a warning that the document could not be located.
- */
- xmlSchemaCustomWarning(ACTXT_CAST vctxt, XML_SCHEMAV_MISC,
- node, NULL,
- "The document at location '%s' could not be acquired",
- location, NULL, NULL);
- return(ret);
- }
- /*
- * The first located schema will be handled as if all other
- * schemas imported by XSI were imported by this first schema.
- */
- if ((bucket != NULL) &&
- (WXS_CONSTRUCTOR(pctxt)->bucket == NULL))
- WXS_CONSTRUCTOR(pctxt)->bucket = bucket;
- /*
- * TODO: Is this handled like an import? I.e. is it not an error
- * if the schema cannot be located?
- */
- if ((bucket == NULL) || (! CAN_PARSE_SCHEMA(bucket)))
- return(0);
- /*
- * We will reuse the parser context for every schema imported
- * directly via XSI. So reset the context.
- */
- pctxt->nberrors = 0;
- pctxt->err = 0;
- pctxt->doc = bucket->doc;
-
- ret = xmlSchemaParseNewDocWithContext(pctxt, schema, bucket);
- if (ret == -1) {
- pctxt->doc = NULL;
- goto exit_failure;
- }
- /* Paranoid error channelling. */
- if ((ret == 0) && (pctxt->nberrors != 0))
- ret = pctxt->err;
- if (pctxt->nberrors == 0) {
- /*
- * Only bother to fixup pending components, if there was
- * no error yet.
- * For every XSI acquired schema (and its sub-schemata) we will
- * fixup the components.
- */
- xmlSchemaFixupComponents(pctxt, bucket);
- ret = pctxt->err;
- /*
- * Not nice, but we need somehow to channel the schema parser
- * error to the validation context.
- */
- if ((ret != 0) && (vctxt->err == 0))
- vctxt->err = ret;
- vctxt->nberrors += pctxt->nberrors;
- } else {
- /* Add to validation error sum. */
- vctxt->nberrors += pctxt->nberrors;
- }
- pctxt->doc = NULL;
- return(ret);
-exit_failure:
- pctxt->doc = NULL;
- return (-1);
-}
-
-static xmlSchemaAttrInfoPtr
-xmlSchemaGetMetaAttrInfo(xmlSchemaValidCtxtPtr vctxt,
- int metaType)
-{
- if (vctxt->nbAttrInfos == 0)
- return (NULL);
- {
- int i;
- xmlSchemaAttrInfoPtr iattr;
-
- for (i = 0; i < vctxt->nbAttrInfos; i++) {
- iattr = vctxt->attrInfos[i];
- if (iattr->metaType == metaType)
- return (iattr);
- }
-
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaAssembleByXSI:
- * @vctxt: a schema validation context
- *
- * Expands an existing schema by an additional schema using
- * the xsi:schemaLocation or xsi:noNamespaceSchemaLocation attribute
- * of an instance. If xsi:noNamespaceSchemaLocation is used, @noNamespace
- * must be set to 1.
- *
- * Returns 0 if the new schema is correct, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaAssembleByXSI(xmlSchemaValidCtxtPtr vctxt)
-{
- const xmlChar *cur, *end;
- const xmlChar *nsname = NULL, *location;
- int count = 0;
- int ret = 0;
- xmlSchemaAttrInfoPtr iattr;
-
- /*
- * Parse the value; we will assume an even number of values
- * to be given (this is how Xerces and XSV work).
- *
- * URGENT TODO: !! This needs to work for both
- * @noNamespaceSchemaLocation AND @schemaLocation on the same
- * element !!
- */
- iattr = xmlSchemaGetMetaAttrInfo(vctxt,
- XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC);
- if (iattr == NULL)
- iattr = xmlSchemaGetMetaAttrInfo(vctxt,
- XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC);
- if (iattr == NULL)
- return (0);
- cur = iattr->value;
- do {
- /*
- * TODO: Move the string parsing mechanism away from here.
- */
- if (iattr->metaType == XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC) {
- /*
- * Get the namespace name.
- */
- while (IS_BLANK_CH(*cur))
- cur++;
- end = cur;
- while ((*end != 0) && (!(IS_BLANK_CH(*end))))
- end++;
- if (end == cur)
- break;
- count++; /* TODO: Don't use the schema's dict. */
- nsname = xmlDictLookup(vctxt->schema->dict, cur, end - cur);
- cur = end;
- }
- /*
- * Get the URI.
- */
- while (IS_BLANK_CH(*cur))
- cur++;
- end = cur;
- while ((*end != 0) && (!(IS_BLANK_CH(*end))))
- end++;
- if (end == cur) {
- if (iattr->metaType ==
- XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC)
- {
- /*
- * If using @schemaLocation then tuples are expected.
- * I.e. the namespace name *and* the document's URI.
- */
- xmlSchemaCustomWarning(ACTXT_CAST vctxt, XML_SCHEMAV_MISC,
- iattr->node, NULL,
- "The value must consist of tuples: the target namespace "
- "name and the document's URI", NULL, NULL, NULL);
- }
- break;
- }
- count++; /* TODO: Don't use the schema's dict. */
- location = xmlDictLookup(vctxt->schema->dict, cur, end - cur);
- cur = end;
- ret = xmlSchemaAssembleByLocation(vctxt, vctxt->schema,
- iattr->node, nsname, location);
- if (ret == -1) {
- VERROR_INT("xmlSchemaAssembleByXSI",
- "assembling schemata");
- return (-1);
- }
- } while (*cur != 0);
- return (ret);
-}
-
-static const xmlChar *
-xmlSchemaLookupNamespace(xmlSchemaValidCtxtPtr vctxt,
- const xmlChar *prefix)
-{
- if (vctxt->sax != NULL) {
- int i, j;
- xmlSchemaNodeInfoPtr inode;
-
- for (i = vctxt->depth; i >= 0; i--) {
- if (vctxt->elemInfos[i]->nbNsBindings != 0) {
- inode = vctxt->elemInfos[i];
- for (j = 0; j < inode->nbNsBindings * 2; j += 2) {
- if (((prefix == NULL) &&
- (inode->nsBindings[j] == NULL)) ||
- ((prefix != NULL) && xmlStrEqual(prefix,
- inode->nsBindings[j]))) {
-
- /*
- * Note that the namespace bindings are already
- * in a string dict.
- */
- return (inode->nsBindings[j+1]);
- }
- }
- }
- }
- return (NULL);
-#ifdef LIBXML_READER_ENABLED
- } else if (vctxt->reader != NULL) {
- xmlChar *nsName;
-
- nsName = xmlTextReaderLookupNamespace(vctxt->reader, prefix);
- if (nsName != NULL) {
- const xmlChar *ret;
-
- ret = xmlDictLookup(vctxt->dict, nsName, -1);
- xmlFree(nsName);
- return (ret);
- } else
- return (NULL);
-#endif
- } else {
- xmlNsPtr ns;
-
- if ((vctxt->inode->node == NULL) ||
- (vctxt->inode->node->doc == NULL)) {
- VERROR_INT("xmlSchemaLookupNamespace",
- "no node or node's doc avaliable");
- return (NULL);
- }
- ns = xmlSearchNs(vctxt->inode->node->doc,
- vctxt->inode->node, prefix);
- if (ns != NULL)
- return (ns->href);
- return (NULL);
- }
-}
-
-/*
-* This one works on the schema of the validation context.
-*/
-static int
-xmlSchemaValidateNotation(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaPtr schema,
- xmlNodePtr node,
- const xmlChar *value,
- xmlSchemaValPtr *val,
- int valNeeded)
-{
- int ret;
-
- if (vctxt && (vctxt->schema == NULL)) {
- VERROR_INT("xmlSchemaValidateNotation",
- "a schema is needed on the validation context");
- return (-1);
- }
- ret = xmlValidateQName(value, 1);
- if (ret != 0)
- return (ret);
- {
- xmlChar *localName = NULL;
- xmlChar *prefix = NULL;
-
- localName = xmlSplitQName2(value, &prefix);
- if (prefix != NULL) {
- const xmlChar *nsName = NULL;
-
- if (vctxt != NULL)
- nsName = xmlSchemaLookupNamespace(vctxt, BAD_CAST prefix);
- else if (node != NULL) {
- xmlNsPtr ns = xmlSearchNs(node->doc, node, prefix);
- if (ns != NULL)
- nsName = ns->href;
- } else {
- xmlFree(prefix);
- xmlFree(localName);
- return (1);
- }
- if (nsName == NULL) {
- xmlFree(prefix);
- xmlFree(localName);
- return (1);
- }
- if (xmlSchemaGetNotation(schema, localName, nsName) != NULL) {
- if ((valNeeded) && (val != NULL)) {
- (*val) = xmlSchemaNewNOTATIONValue(xmlStrdup(localName),
- xmlStrdup(nsName));
- if (*val == NULL)
- ret = -1;
- }
- } else
- ret = 1;
- xmlFree(prefix);
- xmlFree(localName);
- } else {
- if (xmlSchemaGetNotation(schema, value, NULL) != NULL) {
- if (valNeeded && (val != NULL)) {
- (*val) = xmlSchemaNewNOTATIONValue(
- BAD_CAST xmlStrdup(value), NULL);
- if (*val == NULL)
- ret = -1;
- }
- } else
- return (1);
- }
- }
- return (ret);
-}
-
-static int
-xmlSchemaVAddNodeQName(xmlSchemaValidCtxtPtr vctxt,
- const xmlChar* lname,
- const xmlChar* nsname)
-{
- int i;
-
- lname = xmlDictLookup(vctxt->dict, lname, -1);
- if (lname == NULL)
- return(-1);
- if (nsname != NULL) {
- nsname = xmlDictLookup(vctxt->dict, nsname, -1);
- if (nsname == NULL)
- return(-1);
- }
- for (i = 0; i < vctxt->nodeQNames->nbItems; i += 2) {
- if ((vctxt->nodeQNames->items [i] == lname) &&
- (vctxt->nodeQNames->items[i +1] == nsname))
- /* Already there */
- return(i);
- }
- /* Add new entry. */
- i = vctxt->nodeQNames->nbItems;
- xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) lname);
- xmlSchemaItemListAdd(vctxt->nodeQNames, (void *) nsname);
- return(i);
-}
-
-/************************************************************************
- * *
- * Validation of identity-constraints (IDC) *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaAugmentIDC:
- * @idcDef: the IDC definition
- *
- * Creates an augmented IDC definition item.
- *
- * Returns the item, or NULL on internal errors.
- */
-static void
-xmlSchemaAugmentIDC(xmlSchemaIDCPtr idcDef,
- xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaIDCAugPtr aidc;
-
- aidc = (xmlSchemaIDCAugPtr) xmlMalloc(sizeof(xmlSchemaIDCAug));
- if (aidc == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "xmlSchemaAugmentIDC: allocating an augmented IDC definition",
- NULL);
- return;
- }
- aidc->keyrefDepth = -1;
- aidc->def = idcDef;
- aidc->next = NULL;
- if (vctxt->aidcs == NULL)
- vctxt->aidcs = aidc;
- else {
- aidc->next = vctxt->aidcs;
- vctxt->aidcs = aidc;
- }
- /*
- * Save if we have keyrefs at all.
- */
- if ((vctxt->hasKeyrefs == 0) &&
- (idcDef->type == XML_SCHEMA_TYPE_IDC_KEYREF))
- vctxt->hasKeyrefs = 1;
-}
-
-/**
- * xmlSchemaAugmentImportedIDC:
- * @imported: the imported schema
- *
- * Creates an augmented IDC definition for the imported schema.
- */
-static void
-xmlSchemaAugmentImportedIDC(xmlSchemaImportPtr imported, xmlSchemaValidCtxtPtr vctxt) {
- if (imported->schema->idcDef != NULL) {
- xmlHashScan(imported->schema->idcDef ,
- (xmlHashScanner) xmlSchemaAugmentIDC, vctxt);
- }
-}
-
-/**
- * xmlSchemaIDCNewBinding:
- * @idcDef: the IDC definition of this binding
- *
- * Creates a new IDC binding.
- *
- * Returns the new IDC binding, NULL on internal errors.
- */
-static xmlSchemaPSVIIDCBindingPtr
-xmlSchemaIDCNewBinding(xmlSchemaIDCPtr idcDef)
-{
- xmlSchemaPSVIIDCBindingPtr ret;
-
- ret = (xmlSchemaPSVIIDCBindingPtr) xmlMalloc(
- sizeof(xmlSchemaPSVIIDCBinding));
- if (ret == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating a PSVI IDC binding item", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaPSVIIDCBinding));
- ret->definition = idcDef;
- return (ret);
-}
-
-/**
- * xmlSchemaIDCStoreNodeTableItem:
- * @vctxt: the WXS validation context
- * @item: the IDC node table item
- *
- * The validation context is used to store IDC node table items.
- * They are stored to avoid copying them if IDC node-tables are merged
- * with corresponding parent IDC node-tables (bubbling).
- *
- * Returns 0 if succeeded, -1 on internal errors.
- */
-static int
-xmlSchemaIDCStoreNodeTableItem(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaPSVIIDCNodePtr item)
-{
- /*
- * Add to gobal list.
- */
- if (vctxt->idcNodes == NULL) {
- vctxt->idcNodes = (xmlSchemaPSVIIDCNodePtr *)
- xmlMalloc(20 * sizeof(xmlSchemaPSVIIDCNodePtr));
- if (vctxt->idcNodes == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "allocating the IDC node table item list", NULL);
- return (-1);
- }
- vctxt->sizeIdcNodes = 20;
- } else if (vctxt->sizeIdcNodes <= vctxt->nbIdcNodes) {
- vctxt->sizeIdcNodes *= 2;
- vctxt->idcNodes = (xmlSchemaPSVIIDCNodePtr *)
- xmlRealloc(vctxt->idcNodes, vctxt->sizeIdcNodes *
- sizeof(xmlSchemaPSVIIDCNodePtr));
- if (vctxt->idcNodes == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "re-allocating the IDC node table item list", NULL);
- return (-1);
- }
- }
- vctxt->idcNodes[vctxt->nbIdcNodes++] = item;
-
- return (0);
-}
-
-/**
- * xmlSchemaIDCStoreKey:
- * @vctxt: the WXS validation context
- * @item: the IDC key
- *
- * The validation context is used to store an IDC key.
- *
- * Returns 0 if succeeded, -1 on internal errors.
- */
-static int
-xmlSchemaIDCStoreKey(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaPSVIIDCKeyPtr key)
-{
- /*
- * Add to gobal list.
- */
- if (vctxt->idcKeys == NULL) {
- vctxt->idcKeys = (xmlSchemaPSVIIDCKeyPtr *)
- xmlMalloc(40 * sizeof(xmlSchemaPSVIIDCKeyPtr));
- if (vctxt->idcKeys == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "allocating the IDC key storage list", NULL);
- return (-1);
- }
- vctxt->sizeIdcKeys = 40;
- } else if (vctxt->sizeIdcKeys <= vctxt->nbIdcKeys) {
- vctxt->sizeIdcKeys *= 2;
- vctxt->idcKeys = (xmlSchemaPSVIIDCKeyPtr *)
- xmlRealloc(vctxt->idcKeys, vctxt->sizeIdcKeys *
- sizeof(xmlSchemaPSVIIDCKeyPtr));
- if (vctxt->idcKeys == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "re-allocating the IDC key storage list", NULL);
- return (-1);
- }
- }
- vctxt->idcKeys[vctxt->nbIdcKeys++] = key;
-
- return (0);
-}
-
-/**
- * xmlSchemaIDCAppendNodeTableItem:
- * @bind: the IDC binding
- * @ntItem: the node-table item
- *
- * Appends the IDC node-table item to the binding.
- *
- * Returns 0 on success and -1 on internal errors.
- */
-static int
-xmlSchemaIDCAppendNodeTableItem(xmlSchemaPSVIIDCBindingPtr bind,
- xmlSchemaPSVIIDCNodePtr ntItem)
-{
- if (bind->nodeTable == NULL) {
- bind->sizeNodes = 10;
- bind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
- xmlMalloc(10 * sizeof(xmlSchemaPSVIIDCNodePtr));
- if (bind->nodeTable == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating an array of IDC node-table items", NULL);
- return(-1);
- }
- } else if (bind->sizeNodes <= bind->nbNodes) {
- bind->sizeNodes *= 2;
- bind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
- xmlRealloc(bind->nodeTable, bind->sizeNodes *
- sizeof(xmlSchemaPSVIIDCNodePtr));
- if (bind->nodeTable == NULL) {
- xmlSchemaVErrMemory(NULL,
- "re-allocating an array of IDC node-table items", NULL);
- return(-1);
- }
- }
- bind->nodeTable[bind->nbNodes++] = ntItem;
- return(0);
-}
-
-/**
- * xmlSchemaIDCAcquireBinding:
- * @vctxt: the WXS validation context
- * @matcher: the IDC matcher
- *
- * Looks up an PSVI IDC binding, for the IDC definition and
- * of the given matcher. If none found, a new one is created
- * and added to the IDC table.
- *
- * Returns an IDC binding or NULL on internal errors.
- */
-static xmlSchemaPSVIIDCBindingPtr
-xmlSchemaIDCAcquireBinding(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaIDCMatcherPtr matcher)
-{
- xmlSchemaNodeInfoPtr ielem;
-
- ielem = vctxt->elemInfos[matcher->depth];
-
- if (ielem->idcTable == NULL) {
- ielem->idcTable = xmlSchemaIDCNewBinding(matcher->aidc->def);
- if (ielem->idcTable == NULL)
- return (NULL);
- return(ielem->idcTable);
- } else {
- xmlSchemaPSVIIDCBindingPtr bind = NULL;
-
- bind = ielem->idcTable;
- do {
- if (bind->definition == matcher->aidc->def)
- return(bind);
- if (bind->next == NULL) {
- bind->next = xmlSchemaIDCNewBinding(matcher->aidc->def);
- if (bind->next == NULL)
- return (NULL);
- return(bind->next);
- }
- bind = bind->next;
- } while (bind != NULL);
- }
- return (NULL);
-}
-
-static xmlSchemaItemListPtr
-xmlSchemaIDCAcquireTargetList(xmlSchemaValidCtxtPtr vctxt ATTRIBUTE_UNUSED,
- xmlSchemaIDCMatcherPtr matcher)
-{
- if (matcher->targets == NULL)
- matcher->targets = xmlSchemaItemListCreate();
- return(matcher->targets);
-}
-
-/**
- * xmlSchemaIDCFreeKey:
- * @key: the IDC key
- *
- * Frees an IDC key together with its compiled value.
- */
-static void
-xmlSchemaIDCFreeKey(xmlSchemaPSVIIDCKeyPtr key)
-{
- if (key->val != NULL)
- xmlSchemaFreeValue(key->val);
- xmlFree(key);
-}
-
-/**
- * xmlSchemaIDCFreeBinding:
- *
- * Frees an IDC binding. Note that the node table-items
- * are not freed.
- */
-static void
-xmlSchemaIDCFreeBinding(xmlSchemaPSVIIDCBindingPtr bind)
-{
- if (bind->nodeTable != NULL)
- xmlFree(bind->nodeTable);
- if (bind->dupls != NULL)
- xmlSchemaItemListFree(bind->dupls);
- xmlFree(bind);
-}
-
-/**
- * xmlSchemaIDCFreeIDCTable:
- * @bind: the first IDC binding in the list
- *
- * Frees an IDC table, i.e. all the IDC bindings in the list.
- */
-static void
-xmlSchemaIDCFreeIDCTable(xmlSchemaPSVIIDCBindingPtr bind)
-{
- xmlSchemaPSVIIDCBindingPtr prev;
-
- while (bind != NULL) {
- prev = bind;
- bind = bind->next;
- xmlSchemaIDCFreeBinding(prev);
- }
-}
-
-/**
- * xmlSchemaIDCFreeMatcherList:
- * @matcher: the first IDC matcher in the list
- *
- * Frees a list of IDC matchers.
- */
-static void
-xmlSchemaIDCFreeMatcherList(xmlSchemaIDCMatcherPtr matcher)
-{
- xmlSchemaIDCMatcherPtr next;
-
- while (matcher != NULL) {
- next = matcher->next;
- if (matcher->keySeqs != NULL) {
- int i;
- for (i = 0; i < matcher->sizeKeySeqs; i++)
- if (matcher->keySeqs[i] != NULL)
- xmlFree(matcher->keySeqs[i]);
- xmlFree(matcher->keySeqs);
- }
- if (matcher->targets != NULL) {
- if (matcher->idcType == XML_SCHEMA_TYPE_IDC_KEYREF) {
- int i;
- xmlSchemaPSVIIDCNodePtr idcNode;
- /*
- * Node-table items for keyrefs are not stored globally
- * to the validation context, since they are not bubbled.
- * We need to free them here.
- */
- for (i = 0; i < matcher->targets->nbItems; i++) {
- idcNode =
- (xmlSchemaPSVIIDCNodePtr) matcher->targets->items[i];
- xmlFree(idcNode->keys);
- xmlFree(idcNode);
- }
- }
- xmlSchemaItemListFree(matcher->targets);
- }
- xmlFree(matcher);
- matcher = next;
- }
-}
-
-/**
- * xmlSchemaIDCReleaseMatcherList:
- * @vctxt: the WXS validation context
- * @matcher: the first IDC matcher in the list
- *
- * Caches a list of IDC matchers for reuse.
- */
-static void
-xmlSchemaIDCReleaseMatcherList(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaIDCMatcherPtr matcher)
-{
- xmlSchemaIDCMatcherPtr next;
-
- while (matcher != NULL) {
- next = matcher->next;
- if (matcher->keySeqs != NULL) {
- int i;
- /*
- * Don't free the array, but only the content.
- */
- for (i = 0; i < matcher->sizeKeySeqs; i++)
- if (matcher->keySeqs[i] != NULL) {
- xmlFree(matcher->keySeqs[i]);
- matcher->keySeqs[i] = NULL;
- }
- }
- if (matcher->targets) {
- if (matcher->idcType == XML_SCHEMA_TYPE_IDC_KEYREF) {
- int i;
- xmlSchemaPSVIIDCNodePtr idcNode;
- /*
- * Node-table items for keyrefs are not stored globally
- * to the validation context, since they are not bubbled.
- * We need to free them here.
- */
- for (i = 0; i < matcher->targets->nbItems; i++) {
- idcNode =
- (xmlSchemaPSVIIDCNodePtr) matcher->targets->items[i];
- xmlFree(idcNode->keys);
- xmlFree(idcNode);
- }
- }
- xmlSchemaItemListFree(matcher->targets);
- matcher->targets = NULL;
- }
- matcher->next = NULL;
- /*
- * Cache the matcher.
- */
- if (vctxt->idcMatcherCache != NULL)
- matcher->nextCached = vctxt->idcMatcherCache;
- vctxt->idcMatcherCache = matcher;
-
- matcher = next;
- }
-}
-
-/**
- * xmlSchemaIDCAddStateObject:
- * @vctxt: the WXS validation context
- * @matcher: the IDC matcher
- * @sel: the XPath information
- * @parent: the parent "selector" state object if any
- * @type: "selector" or "field"
- *
- * Creates/reuses and activates state objects for the given
- * XPath information; if the XPath expression consists of unions,
- * multiple state objects are created for every unioned expression.
- *
- * Returns 0 on success and -1 on internal errors.
- */
-static int
-xmlSchemaIDCAddStateObject(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaIDCMatcherPtr matcher,
- xmlSchemaIDCSelectPtr sel,
- int type)
-{
- xmlSchemaIDCStateObjPtr sto;
-
- /*
- * Reuse the state objects from the pool.
- */
- if (vctxt->xpathStatePool != NULL) {
- sto = vctxt->xpathStatePool;
- vctxt->xpathStatePool = sto->next;
- sto->next = NULL;
- } else {
- /*
- * Create a new state object.
- */
- sto = (xmlSchemaIDCStateObjPtr) xmlMalloc(sizeof(xmlSchemaIDCStateObj));
- if (sto == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating an IDC state object", NULL);
- return (-1);
- }
- memset(sto, 0, sizeof(xmlSchemaIDCStateObj));
- }
- /*
- * Add to global list.
- */
- if (vctxt->xpathStates != NULL)
- sto->next = vctxt->xpathStates;
- vctxt->xpathStates = sto;
-
- /*
- * Free the old xpath validation context.
- */
- if (sto->xpathCtxt != NULL)
- xmlFreeStreamCtxt((xmlStreamCtxtPtr) sto->xpathCtxt);
-
- /*
- * Create a new XPath (pattern) validation context.
- */
- sto->xpathCtxt = (void *) xmlPatternGetStreamCtxt(
- (xmlPatternPtr) sel->xpathComp);
- if (sto->xpathCtxt == NULL) {
- VERROR_INT("xmlSchemaIDCAddStateObject",
- "failed to create an XPath validation context");
- return (-1);
- }
- sto->type = type;
- sto->depth = vctxt->depth;
- sto->matcher = matcher;
- sto->sel = sel;
- sto->nbHistory = 0;
-
-#ifdef DEBUG_IDC
- xmlGenericError(xmlGenericErrorContext, "IDC: STO push '%s'\n",
- sto->sel->xpath);
-#endif
- return (0);
-}
-
-/**
- * xmlSchemaXPathEvaluate:
- * @vctxt: the WXS validation context
- * @nodeType: the nodeType of the current node
- *
- * Evaluates all active XPath state objects.
- *
- * Returns the number of IC "field" state objects which resolved to
- * this node, 0 if none resolved and -1 on internal errors.
- */
-static int
-xmlSchemaXPathEvaluate(xmlSchemaValidCtxtPtr vctxt,
- xmlElementType nodeType)
-{
- xmlSchemaIDCStateObjPtr sto, head = NULL, first;
- int res, resolved = 0, depth = vctxt->depth;
-
- if (vctxt->xpathStates == NULL)
- return (0);
-
- if (nodeType == XML_ATTRIBUTE_NODE)
- depth++;
-#ifdef DEBUG_IDC
- {
- xmlChar *str = NULL;
- xmlGenericError(xmlGenericErrorContext,
- "IDC: EVAL on %s, depth %d, type %d\n",
- xmlSchemaFormatQName(&str, vctxt->inode->nsName,
- vctxt->inode->localName), depth, nodeType);
- FREE_AND_NULL(str)
- }
-#endif
- /*
- * Process all active XPath state objects.
- */
- first = vctxt->xpathStates;
- sto = first;
- while (sto != head) {
-#ifdef DEBUG_IDC
- if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_SELECTOR)
- xmlGenericError(xmlGenericErrorContext, "IDC: ['%s'] selector '%s'\n",
- sto->matcher->aidc->def->name, sto->sel->xpath);
- else
- xmlGenericError(xmlGenericErrorContext, "IDC: ['%s'] field '%s'\n",
- sto->matcher->aidc->def->name, sto->sel->xpath);
-#endif
- if (nodeType == XML_ELEMENT_NODE)
- res = xmlStreamPush((xmlStreamCtxtPtr) sto->xpathCtxt,
- vctxt->inode->localName, vctxt->inode->nsName);
- else
- res = xmlStreamPushAttr((xmlStreamCtxtPtr) sto->xpathCtxt,
- vctxt->inode->localName, vctxt->inode->nsName);
-
- if (res == -1) {
- VERROR_INT("xmlSchemaXPathEvaluate",
- "calling xmlStreamPush()");
- return (-1);
- }
- if (res == 0)
- goto next_sto;
- /*
- * Full match.
- */
-#ifdef DEBUG_IDC
- xmlGenericError(xmlGenericErrorContext, "IDC: "
- "MATCH\n");
-#endif
- /*
- * Register a match in the state object history.
- */
- if (sto->history == NULL) {
- sto->history = (int *) xmlMalloc(5 * sizeof(int));
- if (sto->history == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating the state object history", NULL);
- return(-1);
- }
- sto->sizeHistory = 5;
- } else if (sto->sizeHistory <= sto->nbHistory) {
- sto->sizeHistory *= 2;
- sto->history = (int *) xmlRealloc(sto->history,
- sto->sizeHistory * sizeof(int));
- if (sto->history == NULL) {
- xmlSchemaVErrMemory(NULL,
- "re-allocating the state object history", NULL);
- return(-1);
- }
- }
- sto->history[sto->nbHistory++] = depth;
-
-#ifdef DEBUG_IDC
- xmlGenericError(xmlGenericErrorContext, "IDC: push match '%d'\n",
- vctxt->depth);
-#endif
-
- if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_SELECTOR) {
- xmlSchemaIDCSelectPtr sel;
- /*
- * Activate state objects for the IDC fields of
- * the IDC selector.
- */
-#ifdef DEBUG_IDC
- xmlGenericError(xmlGenericErrorContext, "IDC: "
- "activating field states\n");
-#endif
- sel = sto->matcher->aidc->def->fields;
- while (sel != NULL) {
- if (xmlSchemaIDCAddStateObject(vctxt, sto->matcher,
- sel, XPATH_STATE_OBJ_TYPE_IDC_FIELD) == -1)
- return (-1);
- sel = sel->next;
- }
- } else if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_FIELD) {
- /*
- * An IDC key node was found by the IDC field.
- */
-#ifdef DEBUG_IDC
- xmlGenericError(xmlGenericErrorContext,
- "IDC: key found\n");
-#endif
- /*
- * Notify that the character value of this node is
- * needed.
- */
- if (resolved == 0) {
- if ((vctxt->inode->flags &
- XML_SCHEMA_NODE_INFO_VALUE_NEEDED) == 0)
- vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_VALUE_NEEDED;
- }
- resolved++;
- }
-next_sto:
- if (sto->next == NULL) {
- /*
- * Evaluate field state objects created on this node as well.
- */
- head = first;
- sto = vctxt->xpathStates;
- } else
- sto = sto->next;
- }
- return (resolved);
-}
-
-static const xmlChar *
-xmlSchemaFormatIDCKeySequence(xmlSchemaValidCtxtPtr vctxt,
- xmlChar **buf,
- xmlSchemaPSVIIDCKeyPtr *seq,
- int count)
-{
- int i, res;
- xmlChar *value = NULL;
-
- *buf = xmlStrdup(BAD_CAST "[");
- for (i = 0; i < count; i++) {
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- res = xmlSchemaGetCanonValueWhtspExt(seq[i]->val,
- xmlSchemaGetWhiteSpaceFacetValue(seq[i]->type),
- &value);
- if (res == 0)
- *buf = xmlStrcat(*buf, BAD_CAST value);
- else {
- VERROR_INT("xmlSchemaFormatIDCKeySequence",
- "failed to compute a canonical value");
- *buf = xmlStrcat(*buf, BAD_CAST "???");
- }
- if (i < count -1)
- *buf = xmlStrcat(*buf, BAD_CAST "', ");
- else
- *buf = xmlStrcat(*buf, BAD_CAST "'");
- if (value != NULL) {
- xmlFree(value);
- value = NULL;
- }
- }
- *buf = xmlStrcat(*buf, BAD_CAST "]");
-
- return (BAD_CAST *buf);
-}
-
-/**
- * xmlSchemaXPathPop:
- * @vctxt: the WXS validation context
- *
- * Pops all XPath states.
- *
- * Returns 0 on success and -1 on internal errors.
- */
-static int
-xmlSchemaXPathPop(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaIDCStateObjPtr sto;
- int res;
-
- if (vctxt->xpathStates == NULL)
- return(0);
- sto = vctxt->xpathStates;
- do {
- res = xmlStreamPop((xmlStreamCtxtPtr) sto->xpathCtxt);
- if (res == -1)
- return (-1);
- sto = sto->next;
- } while (sto != NULL);
- return(0);
-}
-
-/**
- * xmlSchemaXPathProcessHistory:
- * @vctxt: the WXS validation context
- * @type: the simple/complex type of the current node if any at all
- * @val: the precompiled value
- *
- * Processes and pops the history items of the IDC state objects.
- * IDC key-sequences are validated/created on IDC bindings.
- *
- * Returns 0 on success and -1 on internal errors.
- */
-static int
-xmlSchemaXPathProcessHistory(xmlSchemaValidCtxtPtr vctxt,
- int depth)
-{
- xmlSchemaIDCStateObjPtr sto, nextsto;
- int res, matchDepth;
- xmlSchemaPSVIIDCKeyPtr key = NULL;
- xmlSchemaTypePtr type = vctxt->inode->typeDef, simpleType = NULL;
-
- if (vctxt->xpathStates == NULL)
- return (0);
- sto = vctxt->xpathStates;
-
-#ifdef DEBUG_IDC
- {
- xmlChar *str = NULL;
- xmlGenericError(xmlGenericErrorContext,
- "IDC: BACK on %s, depth %d\n",
- xmlSchemaFormatQName(&str, vctxt->inode->nsName,
- vctxt->inode->localName), vctxt->depth);
- FREE_AND_NULL(str)
- }
-#endif
- /*
- * Evaluate the state objects.
- */
- while (sto != NULL) {
- res = xmlStreamPop((xmlStreamCtxtPtr) sto->xpathCtxt);
- if (res == -1) {
- VERROR_INT("xmlSchemaXPathProcessHistory",
- "calling xmlStreamPop()");
- return (-1);
- }
-#ifdef DEBUG_IDC
- xmlGenericError(xmlGenericErrorContext, "IDC: stream pop '%s'\n",
- sto->sel->xpath);
-#endif
- if (sto->nbHistory == 0)
- goto deregister_check;
-
- matchDepth = sto->history[sto->nbHistory -1];
-
- /*
- * Only matches at the current depth are of interest.
- */
- if (matchDepth != depth) {
- sto = sto->next;
- continue;
- }
- if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_FIELD) {
- /*
- * NOTE: According to
- * http://www.w3.org/Bugs/Public/show_bug.cgi?id=2198
- * ... the simple-content of complex types is also allowed.
- */
-
- if (WXS_IS_COMPLEX(type)) {
- if (WXS_HAS_SIMPLE_CONTENT(type)) {
- /*
- * Sanity check for complex types with simple content.
- */
- simpleType = type->contentTypeDef;
- if (simpleType == NULL) {
- VERROR_INT("xmlSchemaXPathProcessHistory",
- "field resolves to a CT with simple content "
- "but the CT is missing the ST definition");
- return (-1);
- }
- } else
- simpleType = NULL;
- } else
- simpleType = type;
- if (simpleType == NULL) {
- xmlChar *str = NULL;
-
- /*
- * Not qualified if the field resolves to a node of non
- * simple type.
- */
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_IDC, NULL,
- WXS_BASIC_CAST sto->matcher->aidc->def,
- "The XPath '%s' of a field of %s does evaluate to a node of "
- "non-simple type",
- sto->sel->xpath,
- xmlSchemaGetIDCDesignation(&str, sto->matcher->aidc->def));
- FREE_AND_NULL(str);
- sto->nbHistory--;
- goto deregister_check;
- }
-
- if ((key == NULL) && (vctxt->inode->val == NULL)) {
- /*
- * Failed to provide the normalized value; maybe
- * the value was invalid.
- */
- VERROR(XML_SCHEMAV_CVC_IDC,
- WXS_BASIC_CAST sto->matcher->aidc->def,
- "Warning: No precomputed value available, the value "
- "was either invalid or something strange happend");
- sto->nbHistory--;
- goto deregister_check;
- } else {
- xmlSchemaIDCMatcherPtr matcher = sto->matcher;
- xmlSchemaPSVIIDCKeyPtr *keySeq;
- int pos, idx;
-
- /*
- * The key will be anchored on the matcher's list of
- * key-sequences. The position in this list is determined
- * by the target node's depth relative to the matcher's
- * depth of creation (i.e. the depth of the scope element).
- *
- * Element Depth Pos List-entries
- * <scope> 0 NULL
- * <bar> 1 NULL
- * <target/> 2 2 target
- * <bar>
- * </scope>
- *
- * The size of the list is only dependant on the depth of
- * the tree.
- * An entry will be NULLed in selector_leave, i.e. when
- * we hit the target's
- */
- pos = sto->depth - matcher->depth;
- idx = sto->sel->index;
-
- /*
- * Create/grow the array of key-sequences.
- */
- if (matcher->keySeqs == NULL) {
- if (pos > 9)
- matcher->sizeKeySeqs = pos * 2;
- else
- matcher->sizeKeySeqs = 10;
- matcher->keySeqs = (xmlSchemaPSVIIDCKeyPtr **)
- xmlMalloc(matcher->sizeKeySeqs *
- sizeof(xmlSchemaPSVIIDCKeyPtr *));
- if (matcher->keySeqs == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating an array of key-sequences",
- NULL);
- return(-1);
- }
- memset(matcher->keySeqs, 0,
- matcher->sizeKeySeqs *
- sizeof(xmlSchemaPSVIIDCKeyPtr *));
- } else if (pos >= matcher->sizeKeySeqs) {
- int i = matcher->sizeKeySeqs;
-
- matcher->sizeKeySeqs *= 2;
- matcher->keySeqs = (xmlSchemaPSVIIDCKeyPtr **)
- xmlRealloc(matcher->keySeqs,
- matcher->sizeKeySeqs *
- sizeof(xmlSchemaPSVIIDCKeyPtr *));
- if (matcher->keySeqs == NULL) {
- xmlSchemaVErrMemory(NULL,
- "reallocating an array of key-sequences",
- NULL);
- return (-1);
- }
- /*
- * The array needs to be NULLed.
- * TODO: Use memset?
- */
- for (; i < matcher->sizeKeySeqs; i++)
- matcher->keySeqs[i] = NULL;
- }
-
- /*
- * Get/create the key-sequence.
- */
- keySeq = matcher->keySeqs[pos];
- if (keySeq == NULL) {
- goto create_sequence;
- } else if (keySeq[idx] != NULL) {
- xmlChar *str = NULL;
- /*
- * cvc-identity-constraint:
- * 3 For each node in the `target node set` all
- * of the {fields}, with that node as the context
- * node, evaluate to either an empty node-set or
- * a node-set with exactly one member, which must
- * have a simple type.
- *
- * The key was already set; report an error.
- */
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_IDC, NULL,
- WXS_BASIC_CAST matcher->aidc->def,
- "The XPath '%s' of a field of %s evaluates to a "
- "node-set with more than one member",
- sto->sel->xpath,
- xmlSchemaGetIDCDesignation(&str, matcher->aidc->def));
- FREE_AND_NULL(str);
- sto->nbHistory--;
- goto deregister_check;
- } else
- goto create_key;
-
-create_sequence:
- /*
- * Create a key-sequence.
- */
- keySeq = (xmlSchemaPSVIIDCKeyPtr *) xmlMalloc(
- matcher->aidc->def->nbFields *
- sizeof(xmlSchemaPSVIIDCKeyPtr));
- if (keySeq == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating an IDC key-sequence", NULL);
- return(-1);
- }
- memset(keySeq, 0, matcher->aidc->def->nbFields *
- sizeof(xmlSchemaPSVIIDCKeyPtr));
- matcher->keySeqs[pos] = keySeq;
-create_key:
- /*
- * Create a key once per node only.
- */
- if (key == NULL) {
- key = (xmlSchemaPSVIIDCKeyPtr) xmlMalloc(
- sizeof(xmlSchemaPSVIIDCKey));
- if (key == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating a IDC key", NULL);
- xmlFree(keySeq);
- matcher->keySeqs[pos] = NULL;
- return(-1);
- }
- /*
- * Consume the compiled value.
- */
- key->type = simpleType;
- key->val = vctxt->inode->val;
- vctxt->inode->val = NULL;
- /*
- * Store the key in a global list.
- */
- if (xmlSchemaIDCStoreKey(vctxt, key) == -1) {
- xmlSchemaIDCFreeKey(key);
- return (-1);
- }
- }
- keySeq[idx] = key;
- }
- } else if (sto->type == XPATH_STATE_OBJ_TYPE_IDC_SELECTOR) {
-
- xmlSchemaPSVIIDCKeyPtr **keySeq = NULL;
- /* xmlSchemaPSVIIDCBindingPtr bind; */
- xmlSchemaPSVIIDCNodePtr ntItem;
- xmlSchemaIDCMatcherPtr matcher;
- xmlSchemaIDCPtr idc;
- xmlSchemaItemListPtr targets;
- int pos, i, j, nbKeys;
- /*
- * Here we have the following scenario:
- * An IDC 'selector' state object resolved to a target node,
- * during the time this target node was in the
- * ancestor-or-self axis, the 'field' state object(s) looked
- * out for matching nodes to create a key-sequence for this
- * target node. Now we are back to this target node and need
- * to put the key-sequence, together with the target node
- * itself, into the node-table of the corresponding IDC
- * binding.
- */
- matcher = sto->matcher;
- idc = matcher->aidc->def;
- nbKeys = idc->nbFields;
- pos = depth - matcher->depth;
- /*
- * Check if the matcher has any key-sequences at all, plus
- * if it has a key-sequence for the current target node.
- */
- if ((matcher->keySeqs == NULL) ||
- (matcher->sizeKeySeqs <= pos)) {
- if (idc->type == XML_SCHEMA_TYPE_IDC_KEY)
- goto selector_key_error;
- else
- goto selector_leave;
- }
-
- keySeq = &(matcher->keySeqs[pos]);
- if (*keySeq == NULL) {
- if (idc->type == XML_SCHEMA_TYPE_IDC_KEY)
- goto selector_key_error;
- else
- goto selector_leave;
- }
-
- for (i = 0; i < nbKeys; i++) {
- if ((*keySeq)[i] == NULL) {
- /*
- * Not qualified, if not all fields did resolve.
- */
- if (idc->type == XML_SCHEMA_TYPE_IDC_KEY) {
- /*
- * All fields of a "key" IDC must resolve.
- */
- goto selector_key_error;
- }
- goto selector_leave;
- }
- }
- /*
- * All fields did resolve.
- */
-
- /*
- * 4.1 If the {identity-constraint category} is unique(/key),
- * then no two members of the `qualified node set` have
- * `key-sequences` whose members are pairwise equal, as
- * defined by Equal in [XML Schemas: Datatypes].
- *
- * Get the IDC binding from the matcher and check for
- * duplicate key-sequences.
- */
-#if 0
- bind = xmlSchemaIDCAcquireBinding(vctxt, matcher);
-#endif
- targets = xmlSchemaIDCAcquireTargetList(vctxt, matcher);
- if ((idc->type != XML_SCHEMA_TYPE_IDC_KEYREF) &&
- (targets->nbItems != 0)) {
- xmlSchemaPSVIIDCKeyPtr ckey, bkey, *bkeySeq;
-
- i = 0;
- res = 0;
- /*
- * Compare the key-sequences, key by key.
- */
- do {
- bkeySeq =
- ((xmlSchemaPSVIIDCNodePtr) targets->items[i])->keys;
- for (j = 0; j < nbKeys; j++) {
- ckey = (*keySeq)[j];
- bkey = bkeySeq[j];
- res = xmlSchemaAreValuesEqual(ckey->val, bkey->val);
- if (res == -1) {
- return (-1);
- } else if (res == 0) {
- /*
- * One of the keys differs, so the key-sequence
- * won't be equal; get out.
- */
- break;
- }
- }
- if (res == 1) {
- /*
- * Duplicate key-sequence found.
- */
- break;
- }
- i++;
- } while (i < targets->nbItems);
- if (i != targets->nbItems) {
- xmlChar *str = NULL, *strB = NULL;
- /*
- * TODO: Try to report the key-sequence.
- */
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_IDC, NULL,
- WXS_BASIC_CAST idc,
- "Duplicate key-sequence %s in %s",
- xmlSchemaFormatIDCKeySequence(vctxt, &str,
- (*keySeq), nbKeys),
- xmlSchemaGetIDCDesignation(&strB, idc));
- FREE_AND_NULL(str);
- FREE_AND_NULL(strB);
- goto selector_leave;
- }
- }
- /*
- * Add a node-table item to the IDC binding.
- */
- ntItem = (xmlSchemaPSVIIDCNodePtr) xmlMalloc(
- sizeof(xmlSchemaPSVIIDCNode));
- if (ntItem == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating an IDC node-table item", NULL);
- xmlFree(*keySeq);
- *keySeq = NULL;
- return(-1);
- }
- memset(ntItem, 0, sizeof(xmlSchemaPSVIIDCNode));
-
- /*
- * Store the node-table item in a global list.
- */
- if (idc->type != XML_SCHEMA_TYPE_IDC_KEYREF) {
- if (xmlSchemaIDCStoreNodeTableItem(vctxt, ntItem) == -1) {
- xmlFree(ntItem);
- xmlFree(*keySeq);
- *keySeq = NULL;
- return (-1);
- }
- ntItem->nodeQNameID = -1;
- } else {
- /*
- * Save a cached QName for this node on the IDC node, to be
- * able to report it, even if the node is not saved.
- */
- ntItem->nodeQNameID = xmlSchemaVAddNodeQName(vctxt,
- vctxt->inode->localName, vctxt->inode->nsName);
- if (ntItem->nodeQNameID == -1) {
- xmlFree(ntItem);
- xmlFree(*keySeq);
- *keySeq = NULL;
- return (-1);
- }
- }
- /*
- * Init the node-table item: Save the node, position and
- * consume the key-sequence.
- */
- ntItem->node = vctxt->node;
- ntItem->nodeLine = vctxt->inode->nodeLine;
- ntItem->keys = *keySeq;
- *keySeq = NULL;
-#if 0
- if (xmlSchemaIDCAppendNodeTableItem(bind, ntItem) == -1)
-#endif
- if (xmlSchemaItemListAdd(targets, ntItem) == -1) {
- if (idc->type == XML_SCHEMA_TYPE_IDC_KEYREF) {
- /*
- * Free the item, since keyref items won't be
- * put on a global list.
- */
- xmlFree(ntItem->keys);
- xmlFree(ntItem);
- }
- return (-1);
- }
-
- goto selector_leave;
-selector_key_error:
- {
- xmlChar *str = NULL;
- /*
- * 4.2.1 (KEY) The `target node set` and the
- * `qualified node set` are equal, that is, every
- * member of the `target node set` is also a member
- * of the `qualified node set` and vice versa.
- */
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_IDC, NULL,
- WXS_BASIC_CAST idc,
- "Not all fields of %s evaluate to a node",
- xmlSchemaGetIDCDesignation(&str, idc), NULL);
- FREE_AND_NULL(str);
- }
-selector_leave:
- /*
- * Free the key-sequence if not added to the IDC table.
- */
- if ((keySeq != NULL) && (*keySeq != NULL)) {
- xmlFree(*keySeq);
- *keySeq = NULL;
- }
- } /* if selector */
-
- sto->nbHistory--;
-
-deregister_check:
- /*
- * Deregister state objects if they reach the depth of creation.
- */
- if ((sto->nbHistory == 0) && (sto->depth == depth)) {
-#ifdef DEBUG_IDC
- xmlGenericError(xmlGenericErrorContext, "IDC: STO pop '%s'\n",
- sto->sel->xpath);
-#endif
- if (vctxt->xpathStates != sto) {
- VERROR_INT("xmlSchemaXPathProcessHistory",
- "The state object to be removed is not the first "
- "in the list");
- }
- nextsto = sto->next;
- /*
- * Unlink from the list of active XPath state objects.
- */
- vctxt->xpathStates = sto->next;
- sto->next = vctxt->xpathStatePool;
- /*
- * Link it to the pool of reusable state objects.
- */
- vctxt->xpathStatePool = sto;
- sto = nextsto;
- } else
- sto = sto->next;
- } /* while (sto != NULL) */
- return (0);
-}
-
-/**
- * xmlSchemaIDCRegisterMatchers:
- * @vctxt: the WXS validation context
- * @elemDecl: the element declaration
- *
- * Creates helper objects to evaluate IDC selectors/fields
- * successively.
- *
- * Returns 0 if OK and -1 on internal errors.
- */
-static int
-xmlSchemaIDCRegisterMatchers(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaElementPtr elemDecl)
-{
- xmlSchemaIDCMatcherPtr matcher, last = NULL;
- xmlSchemaIDCPtr idc, refIdc;
- xmlSchemaIDCAugPtr aidc;
-
- idc = (xmlSchemaIDCPtr) elemDecl->idcs;
- if (idc == NULL)
- return (0);
-
-#ifdef DEBUG_IDC
- {
- xmlChar *str = NULL;
- xmlGenericError(xmlGenericErrorContext,
- "IDC: REGISTER on %s, depth %d\n",
- (char *) xmlSchemaFormatQName(&str, vctxt->inode->nsName,
- vctxt->inode->localName), vctxt->depth);
- FREE_AND_NULL(str)
- }
-#endif
- if (vctxt->inode->idcMatchers != NULL) {
- VERROR_INT("xmlSchemaIDCRegisterMatchers",
- "The chain of IDC matchers is expected to be empty");
- return (-1);
- }
- do {
- if (idc->type == XML_SCHEMA_TYPE_IDC_KEYREF) {
- /*
- * Since IDCs bubbles are expensive we need to know the
- * depth at which the bubbles should stop; this will be
- * the depth of the top-most keyref IDC. If no keyref
- * references a key/unique IDC, the keyrefDepth will
- * be -1, indicating that no bubbles are needed.
- */
- refIdc = (xmlSchemaIDCPtr) idc->ref->item;
- if (refIdc != NULL) {
- /*
- * Remember that we have keyrefs on this node.
- */
- vctxt->inode->hasKeyrefs = 1;
- /*
- * Lookup the referenced augmented IDC info.
- */
- aidc = vctxt->aidcs;
- while (aidc != NULL) {
- if (aidc->def == refIdc)
- break;
- aidc = aidc->next;
- }
- if (aidc == NULL) {
- VERROR_INT("xmlSchemaIDCRegisterMatchers",
- "Could not find an augmented IDC item for an IDC "
- "definition");
- return (-1);
- }
- if ((aidc->keyrefDepth == -1) ||
- (vctxt->depth < aidc->keyrefDepth))
- aidc->keyrefDepth = vctxt->depth;
- }
- }
- /*
- * Lookup the augmented IDC item for the IDC definition.
- */
- aidc = vctxt->aidcs;
- while (aidc != NULL) {
- if (aidc->def == idc)
- break;
- aidc = aidc->next;
- }
- if (aidc == NULL) {
- VERROR_INT("xmlSchemaIDCRegisterMatchers",
- "Could not find an augmented IDC item for an IDC definition");
- return (-1);
- }
- /*
- * Create an IDC matcher for every IDC definition.
- */
- if (vctxt->idcMatcherCache != NULL) {
- /*
- * Reuse a cached matcher.
- */
- matcher = vctxt->idcMatcherCache;
- vctxt->idcMatcherCache = matcher->nextCached;
- matcher->nextCached = NULL;
- } else {
- matcher = (xmlSchemaIDCMatcherPtr)
- xmlMalloc(sizeof(xmlSchemaIDCMatcher));
- if (matcher == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "allocating an IDC matcher", NULL);
- return (-1);
- }
- memset(matcher, 0, sizeof(xmlSchemaIDCMatcher));
- }
- if (last == NULL)
- vctxt->inode->idcMatchers = matcher;
- else
- last->next = matcher;
- last = matcher;
-
- matcher->type = IDC_MATCHER;
- matcher->depth = vctxt->depth;
- matcher->aidc = aidc;
- matcher->idcType = aidc->def->type;
-#ifdef DEBUG_IDC
- xmlGenericError(xmlGenericErrorContext, "IDC: register matcher\n");
-#endif
- /*
- * Init the automaton state object.
- */
- if (xmlSchemaIDCAddStateObject(vctxt, matcher,
- idc->selector, XPATH_STATE_OBJ_TYPE_IDC_SELECTOR) == -1)
- return (-1);
-
- idc = idc->next;
- } while (idc != NULL);
- return (0);
-}
-
-static int
-xmlSchemaIDCFillNodeTables(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaNodeInfoPtr ielem)
-{
- xmlSchemaPSVIIDCBindingPtr bind;
- int res, i, j, k, nbTargets, nbFields, nbDupls, nbNodeTable;
- xmlSchemaPSVIIDCKeyPtr *keys, *ntkeys;
- xmlSchemaPSVIIDCNodePtr *targets, *dupls;
-
- xmlSchemaIDCMatcherPtr matcher = ielem->idcMatchers;
- /* vctxt->createIDCNodeTables */
- while (matcher != NULL) {
- /*
- * Skip keyref IDCs and empty IDC target-lists.
- */
- if ((matcher->aidc->def->type == XML_SCHEMA_TYPE_IDC_KEYREF) ||
- WXS_ILIST_IS_EMPTY(matcher->targets))
- {
- matcher = matcher->next;
- continue;
- }
- /*
- * If we _want_ the IDC node-table to be created in any case
- * then do so. Otherwise create them only if keyrefs need them.
- */
- if ((! vctxt->createIDCNodeTables) &&
- ((matcher->aidc->keyrefDepth == -1) ||
- (matcher->aidc->keyrefDepth > vctxt->depth)))
- {
- matcher = matcher->next;
- continue;
- }
- /*
- * Get/create the IDC binding on this element for the IDC definition.
- */
- bind = xmlSchemaIDCAcquireBinding(vctxt, matcher);
-
- if (! WXS_ILIST_IS_EMPTY(bind->dupls)) {
- dupls = (xmlSchemaPSVIIDCNodePtr *) bind->dupls->items;
- nbDupls = bind->dupls->nbItems;
- } else {
- dupls = NULL;
- nbDupls = 0;
- }
- if (bind->nodeTable != NULL) {
- nbNodeTable = bind->nbNodes;
- } else {
- nbNodeTable = 0;
- }
-
- if ((nbNodeTable == 0) && (nbDupls == 0)) {
- /*
- * Transfer all IDC target-nodes to the IDC node-table.
- */
- bind->nodeTable =
- (xmlSchemaPSVIIDCNodePtr *) matcher->targets->items;
- bind->sizeNodes = matcher->targets->sizeItems;
- bind->nbNodes = matcher->targets->nbItems;
-
- matcher->targets->items = NULL;
- matcher->targets->sizeItems = 0;
- matcher->targets->nbItems = 0;
- } else {
- /*
- * Compare the key-sequences and add to the IDC node-table.
- */
- nbTargets = matcher->targets->nbItems;
- targets = (xmlSchemaPSVIIDCNodePtr *) matcher->targets->items;
- nbFields = matcher->aidc->def->nbFields;
- i = 0;
- do {
- keys = targets[i]->keys;
- if (nbDupls) {
- /*
- * Search in already found duplicates first.
- */
- j = 0;
- do {
- if (nbFields == 1) {
- res = xmlSchemaAreValuesEqual(keys[0]->val,
- dupls[j]->keys[0]->val);
- if (res == -1)
- goto internal_error;
- if (res == 1) {
- /*
- * Equal key-sequence.
- */
- goto next_target;
- }
- } else {
- res = 0;
- ntkeys = dupls[j]->keys;
- for (k = 0; k < nbFields; k++) {
- res = xmlSchemaAreValuesEqual(keys[k]->val,
- ntkeys[k]->val);
- if (res == -1)
- goto internal_error;
- if (res == 0) {
- /*
- * One of the keys differs.
- */
- break;
- }
- }
- if (res == 1) {
- /*
- * Equal key-sequence found.
- */
- goto next_target;
- }
- }
- j++;
- } while (j < nbDupls);
- }
- if (nbNodeTable) {
- j = 0;
- do {
- if (nbFields == 1) {
- res = xmlSchemaAreValuesEqual(keys[0]->val,
- bind->nodeTable[j]->keys[0]->val);
- if (res == -1)
- goto internal_error;
- if (res == 0) {
- /*
- * The key-sequence differs.
- */
- goto next_node_table_entry;
- }
- } else {
- res = 0;
- ntkeys = bind->nodeTable[j]->keys;
- for (k = 0; k < nbFields; k++) {
- res = xmlSchemaAreValuesEqual(keys[k]->val,
- ntkeys[k]->val);
- if (res == -1)
- goto internal_error;
- if (res == 0) {
- /*
- * One of the keys differs.
- */
- goto next_node_table_entry;
- }
- }
- }
- /*
- * Add the duplicate to the list of duplicates.
- */
- if (bind->dupls == NULL) {
- bind->dupls = xmlSchemaItemListCreate();
- if (bind->dupls == NULL)
- goto internal_error;
- }
- if (xmlSchemaItemListAdd(bind->dupls, bind->nodeTable[j]) == -1)
- goto internal_error;
- /*
- * Remove the duplicate entry from the IDC node-table.
- */
- bind->nodeTable[j] = bind->nodeTable[bind->nbNodes -1];
- bind->nbNodes--;
-
- goto next_target;
-
-next_node_table_entry:
- j++;
- } while (j < nbNodeTable);
- }
- /*
- * If everything is fine, then add the IDC target-node to
- * the IDC node-table.
- */
- if (xmlSchemaIDCAppendNodeTableItem(bind, targets[i]) == -1)
- goto internal_error;
-
-next_target:
- i++;
- } while (i < nbTargets);
- }
- matcher = matcher->next;
- }
- return(0);
-
-internal_error:
- return(-1);
-}
-
-/**
- * xmlSchemaBubbleIDCNodeTables:
- * @depth: the current tree depth
- *
- * Merges IDC bindings of an element at @depth into the corresponding IDC
- * bindings of its parent element. If a duplicate note-table entry is found,
- * both, the parent node-table entry and child entry are discarded from the
- * node-table of the parent.
- *
- * Returns 0 if OK and -1 on internal errors.
- */
-static int
-xmlSchemaBubbleIDCNodeTables(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaPSVIIDCBindingPtr bind; /* IDC bindings of the current node. */
- xmlSchemaPSVIIDCBindingPtr *parTable, parBind = NULL; /* parent IDC bindings. */
- xmlSchemaPSVIIDCNodePtr node, parNode = NULL, *dupls, *parNodes; /* node-table entries. */
- xmlSchemaIDCAugPtr aidc;
- int i, j, k, ret = 0, nbFields, oldNum, oldDupls;
-
- bind = vctxt->inode->idcTable;
- if (bind == NULL) {
- /* Fine, no table, no bubbles. */
- return (0);
- }
-
- parTable = &(vctxt->elemInfos[vctxt->depth -1]->idcTable);
- /*
- * Walk all bindings; create new or add to existing bindings.
- * Remove duplicate key-sequences.
- */
- while (bind != NULL) {
-
- if ((bind->nbNodes == 0) && WXS_ILIST_IS_EMPTY(bind->dupls))
- goto next_binding;
- /*
- * Check if the key/unique IDC table needs to be bubbled.
- */
- if (! vctxt->createIDCNodeTables) {
- aidc = vctxt->aidcs;
- do {
- if (aidc->def == bind->definition) {
- if ((aidc->keyrefDepth == -1) ||
- (aidc->keyrefDepth >= vctxt->depth)) {
- goto next_binding;
- }
- break;
- }
- aidc = aidc->next;
- } while (aidc != NULL);
- }
-
- if (parTable != NULL)
- parBind = *parTable;
- /*
- * Search a matching parent binding for the
- * IDC definition.
- */
- while (parBind != NULL) {
- if (parBind->definition == bind->definition)
- break;
- parBind = parBind->next;
- }
-
- if (parBind != NULL) {
- /*
- * Compare every node-table entry of the child node,
- * i.e. the key-sequence within, ...
- */
- oldNum = parBind->nbNodes; /* Skip newly added items. */
-
- if (! WXS_ILIST_IS_EMPTY(parBind->dupls)) {
- oldDupls = parBind->dupls->nbItems;
- dupls = (xmlSchemaPSVIIDCNodePtr *) parBind->dupls->items;
- } else {
- dupls = NULL;
- oldDupls = 0;
- }
-
- parNodes = parBind->nodeTable;
- nbFields = bind->definition->nbFields;
-
- for (i = 0; i < bind->nbNodes; i++) {
- node = bind->nodeTable[i];
- if (node == NULL)
- continue;
- /*
- * ...with every key-sequence of the parent node, already
- * evaluated to be a duplicate key-sequence.
- */
- if (oldDupls) {
- j = 0;
- while (j < oldDupls) {
- if (nbFields == 1) {
- ret = xmlSchemaAreValuesEqual(
- node->keys[0]->val,
- dupls[j]->keys[0]->val);
- if (ret == -1)
- goto internal_error;
- if (ret == 0) {
- j++;
- continue;
- }
- } else {
- parNode = dupls[j];
- for (k = 0; k < nbFields; k++) {
- ret = xmlSchemaAreValuesEqual(
- node->keys[k]->val,
- parNode->keys[k]->val);
- if (ret == -1)
- goto internal_error;
- if (ret == 0)
- break;
- }
- }
- if (ret == 1)
- /* Duplicate found. */
- break;
- j++;
- }
- if (j != oldDupls) {
- /* Duplicate found. Skip this entry. */
- continue;
- }
- }
- /*
- * ... and with every key-sequence of the parent node.
- */
- if (oldNum) {
- j = 0;
- while (j < oldNum) {
- parNode = parNodes[j];
- if (nbFields == 1) {
- ret = xmlSchemaAreValuesEqual(
- node->keys[0]->val,
- parNode->keys[0]->val);
- if (ret == -1)
- goto internal_error;
- if (ret == 0) {
- j++;
- continue;
- }
- } else {
- for (k = 0; k < nbFields; k++) {
- ret = xmlSchemaAreValuesEqual(
- node->keys[k]->val,
- parNode->keys[k]->val);
- if (ret == -1)
- goto internal_error;
- if (ret == 0)
- break;
- }
- }
- if (ret == 1)
- /* Duplicate found. */
- break;
- j++;
- }
- if (j != oldNum) {
- /*
- * Handle duplicates. Move the duplicate in
- * the parent's node-table to the list of
- * duplicates.
- */
- oldNum--;
- parBind->nbNodes--;
- /*
- * Move last old item to pos of duplicate.
- */
- parNodes[j] = parNodes[oldNum];
-
- if (parBind->nbNodes != oldNum) {
- /*
- * If new items exist, move last new item to
- * last of old items.
- */
- parNodes[oldNum] =
- parNodes[parBind->nbNodes];
- }
- if (parBind->dupls == NULL) {
- parBind->dupls = xmlSchemaItemListCreate();
- if (parBind->dupls == NULL)
- goto internal_error;
- }
- xmlSchemaItemListAdd(parBind->dupls, parNode);
- } else {
- /*
- * Add the node-table entry (node and key-sequence) of
- * the child node to the node table of the parent node.
- */
- if (parBind->nodeTable == NULL) {
- parBind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
- xmlMalloc(10 * sizeof(xmlSchemaPSVIIDCNodePtr));
- if (parBind->nodeTable == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating IDC list of node-table items", NULL);
- goto internal_error;
- }
- parBind->sizeNodes = 1;
- } else if (parBind->nbNodes >= parBind->sizeNodes) {
- parBind->sizeNodes *= 2;
- parBind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
- xmlRealloc(parBind->nodeTable, parBind->sizeNodes *
- sizeof(xmlSchemaPSVIIDCNodePtr));
- if (parBind->nodeTable == NULL) {
- xmlSchemaVErrMemory(NULL,
- "re-allocating IDC list of node-table items", NULL);
- goto internal_error;
- }
- }
- parNodes = parBind->nodeTable;
- /*
- * Append the new node-table entry to the 'new node-table
- * entries' section.
- */
- parNodes[parBind->nbNodes++] = node;
- }
-
- }
-
- }
- } else {
- /*
- * No binding for the IDC was found: create a new one and
- * copy all node-tables.
- */
- parBind = xmlSchemaIDCNewBinding(bind->definition);
- if (parBind == NULL)
- goto internal_error;
-
- /*
- * TODO: Hmm, how to optimize the initial number of
- * allocated entries?
- */
- if (bind->nbNodes != 0) {
- /*
- * Add all IDC node-table entries.
- */
- if (! vctxt->psviExposeIDCNodeTables) {
- /*
- * Just move the entries.
- * NOTE: this is quite save here, since
- * all the keyref lookups have already been
- * performed.
- */
- parBind->nodeTable = bind->nodeTable;
- bind->nodeTable = NULL;
- parBind->sizeNodes = bind->sizeNodes;
- bind->sizeNodes = 0;
- parBind->nbNodes = bind->nbNodes;
- bind->nbNodes = 0;
- } else {
- /*
- * Copy the entries.
- */
- parBind->nodeTable = (xmlSchemaPSVIIDCNodePtr *)
- xmlMalloc(bind->nbNodes *
- sizeof(xmlSchemaPSVIIDCNodePtr));
- if (parBind->nodeTable == NULL) {
- xmlSchemaVErrMemory(NULL,
- "allocating an array of IDC node-table "
- "items", NULL);
- xmlSchemaIDCFreeBinding(parBind);
- goto internal_error;
- }
- parBind->sizeNodes = bind->nbNodes;
- parBind->nbNodes = bind->nbNodes;
- memcpy(parBind->nodeTable, bind->nodeTable,
- bind->nbNodes * sizeof(xmlSchemaPSVIIDCNodePtr));
- }
- }
- if (bind->dupls) {
- /*
- * Move the duplicates.
- */
- if (parBind->dupls != NULL)
- xmlSchemaItemListFree(parBind->dupls);
- parBind->dupls = bind->dupls;
- bind->dupls = NULL;
- }
- if (parTable != NULL) {
- if (*parTable == NULL)
- *parTable = parBind;
- else {
- parBind->next = *parTable;
- *parTable = parBind;
- }
- }
- }
-
-next_binding:
- bind = bind->next;
- }
- return (0);
-
-internal_error:
- return(-1);
-}
-
-/**
- * xmlSchemaCheckCVCIDCKeyRef:
- * @vctxt: the WXS validation context
- * @elemDecl: the element declaration
- *
- * Check the cvc-idc-keyref constraints.
- */
-static int
-xmlSchemaCheckCVCIDCKeyRef(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaIDCMatcherPtr matcher;
- xmlSchemaPSVIIDCBindingPtr bind;
-
- matcher = vctxt->inode->idcMatchers;
- /*
- * Find a keyref.
- */
- while (matcher != NULL) {
- if ((matcher->idcType == XML_SCHEMA_TYPE_IDC_KEYREF) &&
- matcher->targets &&
- matcher->targets->nbItems)
- {
- int i, j, k, res, nbFields, hasDupls;
- xmlSchemaPSVIIDCKeyPtr *refKeys, *keys;
- xmlSchemaPSVIIDCNodePtr refNode = NULL;
-
- nbFields = matcher->aidc->def->nbFields;
-
- /*
- * Find the IDC node-table for the referenced IDC key/unique.
- */
- bind = vctxt->inode->idcTable;
- while (bind != NULL) {
- if ((xmlSchemaIDCPtr) matcher->aidc->def->ref->item ==
- bind->definition)
- break;
- bind = bind->next;
- }
- hasDupls = (bind && bind->dupls && bind->dupls->nbItems) ? 1 : 0;
- /*
- * Search for a matching key-sequences.
- */
- for (i = 0; i < matcher->targets->nbItems; i++) {
- res = 0;
- refNode = matcher->targets->items[i];
- if (bind != NULL) {
- refKeys = refNode->keys;
- for (j = 0; j < bind->nbNodes; j++) {
- keys = bind->nodeTable[j]->keys;
- for (k = 0; k < nbFields; k++) {
- res = xmlSchemaAreValuesEqual(keys[k]->val,
- refKeys[k]->val);
- if (res == 0)
- break;
- else if (res == -1) {
- return (-1);
- }
- }
- if (res == 1) {
- /*
- * Match found.
- */
- break;
- }
- }
- if ((res == 0) && hasDupls) {
- /*
- * Search in duplicates
- */
- for (j = 0; j < bind->dupls->nbItems; j++) {
- keys = ((xmlSchemaPSVIIDCNodePtr)
- bind->dupls->items[j])->keys;
- for (k = 0; k < nbFields; k++) {
- res = xmlSchemaAreValuesEqual(keys[k]->val,
- refKeys[k]->val);
- if (res == 0)
- break;
- else if (res == -1) {
- return (-1);
- }
- }
- if (res == 1) {
- /*
- * Match in duplicates found.
- */
- xmlChar *str = NULL, *strB = NULL;
- xmlSchemaKeyrefErr(vctxt,
- XML_SCHEMAV_CVC_IDC, refNode,
- (xmlSchemaTypePtr) matcher->aidc->def,
- "More than one match found for "
- "key-sequence %s of keyref '%s'",
- xmlSchemaFormatIDCKeySequence(vctxt, &str,
- refNode->keys, nbFields),
- xmlSchemaGetComponentQName(&strB,
- matcher->aidc->def));
- FREE_AND_NULL(str);
- FREE_AND_NULL(strB);
- break;
- }
- }
- }
- }
-
- if (res == 0) {
- xmlChar *str = NULL, *strB = NULL;
- xmlSchemaKeyrefErr(vctxt,
- XML_SCHEMAV_CVC_IDC, refNode,
- (xmlSchemaTypePtr) matcher->aidc->def,
- "No match found for key-sequence %s of keyref '%s'",
- xmlSchemaFormatIDCKeySequence(vctxt, &str,
- refNode->keys, nbFields),
- xmlSchemaGetComponentQName(&strB, matcher->aidc->def));
- FREE_AND_NULL(str);
- FREE_AND_NULL(strB);
- }
- }
- }
- matcher = matcher->next;
- }
- /* TODO: Return an error if any error encountered. */
- return (0);
-}
-
-/************************************************************************
- * *
- * XML Reader validation code *
- * *
- ************************************************************************/
-
-static xmlSchemaAttrInfoPtr
-xmlSchemaGetFreshAttrInfo(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaAttrInfoPtr iattr;
- /*
- * Grow/create list of attribute infos.
- */
- if (vctxt->attrInfos == NULL) {
- vctxt->attrInfos = (xmlSchemaAttrInfoPtr *)
- xmlMalloc(sizeof(xmlSchemaAttrInfoPtr));
- vctxt->sizeAttrInfos = 1;
- if (vctxt->attrInfos == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "allocating attribute info list", NULL);
- return (NULL);
- }
- } else if (vctxt->sizeAttrInfos <= vctxt->nbAttrInfos) {
- vctxt->sizeAttrInfos++;
- vctxt->attrInfos = (xmlSchemaAttrInfoPtr *)
- xmlRealloc(vctxt->attrInfos,
- vctxt->sizeAttrInfos * sizeof(xmlSchemaAttrInfoPtr));
- if (vctxt->attrInfos == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "re-allocating attribute info list", NULL);
- return (NULL);
- }
- } else {
- iattr = vctxt->attrInfos[vctxt->nbAttrInfos++];
- if (iattr->localName != NULL) {
- VERROR_INT("xmlSchemaGetFreshAttrInfo",
- "attr info not cleared");
- return (NULL);
- }
- iattr->nodeType = XML_ATTRIBUTE_NODE;
- return (iattr);
- }
- /*
- * Create an attribute info.
- */
- iattr = (xmlSchemaAttrInfoPtr)
- xmlMalloc(sizeof(xmlSchemaAttrInfo));
- if (iattr == NULL) {
- xmlSchemaVErrMemory(vctxt, "creating new attribute info", NULL);
- return (NULL);
- }
- memset(iattr, 0, sizeof(xmlSchemaAttrInfo));
- iattr->nodeType = XML_ATTRIBUTE_NODE;
- vctxt->attrInfos[vctxt->nbAttrInfos++] = iattr;
-
- return (iattr);
-}
-
-static int
-xmlSchemaValidatorPushAttribute(xmlSchemaValidCtxtPtr vctxt,
- xmlNodePtr attrNode,
- int nodeLine,
- const xmlChar *localName,
- const xmlChar *nsName,
- int ownedNames,
- xmlChar *value,
- int ownedValue)
-{
- xmlSchemaAttrInfoPtr attr;
-
- attr = xmlSchemaGetFreshAttrInfo(vctxt);
- if (attr == NULL) {
- VERROR_INT("xmlSchemaPushAttribute",
- "calling xmlSchemaGetFreshAttrInfo()");
- return (-1);
- }
- attr->node = attrNode;
- attr->nodeLine = nodeLine;
- attr->state = XML_SCHEMAS_ATTR_UNKNOWN;
- attr->localName = localName;
- attr->nsName = nsName;
- if (ownedNames)
- attr->flags |= XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES;
- /*
- * Evaluate if it's an XSI attribute.
- */
- if (nsName != NULL) {
- if (xmlStrEqual(localName, BAD_CAST "nil")) {
- if (xmlStrEqual(attr->nsName, xmlSchemaInstanceNs)) {
- attr->metaType = XML_SCHEMA_ATTR_INFO_META_XSI_NIL;
- }
- } else if (xmlStrEqual(localName, BAD_CAST "type")) {
- if (xmlStrEqual(attr->nsName, xmlSchemaInstanceNs)) {
- attr->metaType = XML_SCHEMA_ATTR_INFO_META_XSI_TYPE;
- }
- } else if (xmlStrEqual(localName, BAD_CAST "schemaLocation")) {
- if (xmlStrEqual(attr->nsName, xmlSchemaInstanceNs)) {
- attr->metaType = XML_SCHEMA_ATTR_INFO_META_XSI_SCHEMA_LOC;
- }
- } else if (xmlStrEqual(localName, BAD_CAST "noNamespaceSchemaLocation")) {
- if (xmlStrEqual(attr->nsName, xmlSchemaInstanceNs)) {
- attr->metaType = XML_SCHEMA_ATTR_INFO_META_XSI_NO_NS_SCHEMA_LOC;
- }
- } else if (xmlStrEqual(attr->nsName, xmlNamespaceNs)) {
- attr->metaType = XML_SCHEMA_ATTR_INFO_META_XMLNS;
- }
- }
- attr->value = value;
- if (ownedValue)
- attr->flags |= XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES;
- if (attr->metaType != 0)
- attr->state = XML_SCHEMAS_ATTR_META;
- return (0);
-}
-
-/**
- * xmlSchemaClearElemInfo:
- * @vctxt: the WXS validation context
- * @ielem: the element information item
- */
-static void
-xmlSchemaClearElemInfo(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaNodeInfoPtr ielem)
-{
- ielem->hasKeyrefs = 0;
- ielem->appliedXPath = 0;
- if (ielem->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES) {
- FREE_AND_NULL(ielem->localName);
- FREE_AND_NULL(ielem->nsName);
- } else {
- ielem->localName = NULL;
- ielem->nsName = NULL;
- }
- if (ielem->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES) {
- FREE_AND_NULL(ielem->value);
- } else {
- ielem->value = NULL;
- }
- if (ielem->val != NULL) {
- /*
- * PSVI TODO: Be careful not to free it when the value is
- * exposed via PSVI.
- */
- xmlSchemaFreeValue(ielem->val);
- ielem->val = NULL;
- }
- if (ielem->idcMatchers != NULL) {
- /*
- * REVISIT OPTIMIZE TODO: Use a pool of IDC matchers.
- * Does it work?
- */
- xmlSchemaIDCReleaseMatcherList(vctxt, ielem->idcMatchers);
-#if 0
- xmlSchemaIDCFreeMatcherList(ielem->idcMatchers);
-#endif
- ielem->idcMatchers = NULL;
- }
- if (ielem->idcTable != NULL) {
- /*
- * OPTIMIZE TODO: Use a pool of IDC tables??.
- */
- xmlSchemaIDCFreeIDCTable(ielem->idcTable);
- ielem->idcTable = NULL;
- }
- if (ielem->regexCtxt != NULL) {
- xmlRegFreeExecCtxt(ielem->regexCtxt);
- ielem->regexCtxt = NULL;
- }
- if (ielem->nsBindings != NULL) {
- xmlFree((xmlChar **)ielem->nsBindings);
- ielem->nsBindings = NULL;
- ielem->nbNsBindings = 0;
- ielem->sizeNsBindings = 0;
- }
-}
-
-/**
- * xmlSchemaGetFreshElemInfo:
- * @vctxt: the schema validation context
- *
- * Creates/reuses and initializes the element info item for
- * the currect tree depth.
- *
- * Returns the element info item or NULL on API or internal errors.
- */
-static xmlSchemaNodeInfoPtr
-xmlSchemaGetFreshElemInfo(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaNodeInfoPtr info = NULL;
-
- if (vctxt->depth > vctxt->sizeElemInfos) {
- VERROR_INT("xmlSchemaGetFreshElemInfo",
- "inconsistent depth encountered");
- return (NULL);
- }
- if (vctxt->elemInfos == NULL) {
- vctxt->elemInfos = (xmlSchemaNodeInfoPtr *)
- xmlMalloc(10 * sizeof(xmlSchemaNodeInfoPtr));
- if (vctxt->elemInfos == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "allocating the element info array", NULL);
- return (NULL);
- }
- memset(vctxt->elemInfos, 0, 10 * sizeof(xmlSchemaNodeInfoPtr));
- vctxt->sizeElemInfos = 10;
- } else if (vctxt->sizeElemInfos <= vctxt->depth) {
- int i = vctxt->sizeElemInfos;
-
- vctxt->sizeElemInfos *= 2;
- vctxt->elemInfos = (xmlSchemaNodeInfoPtr *)
- xmlRealloc(vctxt->elemInfos, vctxt->sizeElemInfos *
- sizeof(xmlSchemaNodeInfoPtr));
- if (vctxt->elemInfos == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "re-allocating the element info array", NULL);
- return (NULL);
- }
- /*
- * We need the new memory to be NULLed.
- * TODO: Use memset instead?
- */
- for (; i < vctxt->sizeElemInfos; i++)
- vctxt->elemInfos[i] = NULL;
- } else
- info = vctxt->elemInfos[vctxt->depth];
-
- if (info == NULL) {
- info = (xmlSchemaNodeInfoPtr)
- xmlMalloc(sizeof(xmlSchemaNodeInfo));
- if (info == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "allocating an element info", NULL);
- return (NULL);
- }
- vctxt->elemInfos[vctxt->depth] = info;
- } else {
- if (info->localName != NULL) {
- VERROR_INT("xmlSchemaGetFreshElemInfo",
- "elem info has not been cleared");
- return (NULL);
- }
- }
- memset(info, 0, sizeof(xmlSchemaNodeInfo));
- info->nodeType = XML_ELEMENT_NODE;
- info->depth = vctxt->depth;
-
- return (info);
-}
-
-#define ACTIVATE_ATTRIBUTE(item) vctxt->inode = (xmlSchemaNodeInfoPtr) item;
-#define ACTIVATE_ELEM vctxt->inode = vctxt->elemInfos[vctxt->depth];
-#define ACTIVATE_PARENT_ELEM vctxt->inode = vctxt->elemInfos[vctxt->depth -1];
-
-static int
-xmlSchemaValidateFacets(xmlSchemaAbstractCtxtPtr actxt,
- xmlNodePtr node,
- xmlSchemaTypePtr type,
- xmlSchemaValType valType,
- const xmlChar * value,
- xmlSchemaValPtr val,
- unsigned long length,
- int fireErrors)
-{
- int ret, error = 0;
-
- xmlSchemaTypePtr tmpType;
- xmlSchemaFacetLinkPtr facetLink;
- xmlSchemaFacetPtr facet;
- unsigned long len = 0;
- xmlSchemaWhitespaceValueType ws;
-
- /*
- * In Libxml2, derived built-in types have currently no explicit facets.
- */
- if (type->type == XML_SCHEMA_TYPE_BASIC)
- return (0);
-
- /*
- * NOTE: Do not jump away, if the facetSet of the given type is
- * empty: until now, "pattern" and "enumeration" facets of the
- * *base types* need to be checked as well.
- */
- if (type->facetSet == NULL)
- goto pattern_and_enum;
-
- if (! WXS_IS_ATOMIC(type)) {
- if (WXS_IS_LIST(type))
- goto WXS_IS_LIST;
- else
- goto pattern_and_enum;
- }
-
- /*
- * Whitespace handling is only of importance for string-based
- * types.
- */
- tmpType = xmlSchemaGetPrimitiveType(type);
- if ((tmpType->builtInType == XML_SCHEMAS_STRING) ||
- WXS_IS_ANY_SIMPLE_TYPE(tmpType)) {
- ws = xmlSchemaGetWhiteSpaceFacetValue(type);
- } else
- ws = XML_SCHEMA_WHITESPACE_COLLAPSE;
-
- /*
- * If the value was not computed (for string or
- * anySimpleType based types), then use the provided
- * type.
- */
- if (val != NULL)
- valType = xmlSchemaGetValType(val);
-
- ret = 0;
- for (facetLink = type->facetSet; facetLink != NULL;
- facetLink = facetLink->next) {
- /*
- * Skip the pattern "whiteSpace": it is used to
- * format the character content beforehand.
- */
- switch (facetLink->facet->type) {
- case XML_SCHEMA_FACET_WHITESPACE:
- case XML_SCHEMA_FACET_PATTERN:
- case XML_SCHEMA_FACET_ENUMERATION:
- continue;
- case XML_SCHEMA_FACET_LENGTH:
- case XML_SCHEMA_FACET_MINLENGTH:
- case XML_SCHEMA_FACET_MAXLENGTH:
- ret = xmlSchemaValidateLengthFacetWhtsp(facetLink->facet,
- valType, value, val, &len, ws);
- break;
- default:
- ret = xmlSchemaValidateFacetWhtsp(facetLink->facet, ws,
- valType, value, val, ws);
- break;
- }
- if (ret < 0) {
- AERROR_INT("xmlSchemaValidateFacets",
- "validating against a atomic type facet");
- return (-1);
- } else if (ret > 0) {
- if (fireErrors)
- xmlSchemaFacetErr(actxt, ret, node,
- value, len, type, facetLink->facet, NULL, NULL, NULL);
- else
- return (ret);
- if (error == 0)
- error = ret;
- }
- ret = 0;
- }
-
-WXS_IS_LIST:
- if (! WXS_IS_LIST(type))
- goto pattern_and_enum;
- /*
- * "length", "minLength" and "maxLength" of list types.
- */
- ret = 0;
- for (facetLink = type->facetSet; facetLink != NULL;
- facetLink = facetLink->next) {
-
- switch (facetLink->facet->type) {
- case XML_SCHEMA_FACET_LENGTH:
- case XML_SCHEMA_FACET_MINLENGTH:
- case XML_SCHEMA_FACET_MAXLENGTH:
- ret = xmlSchemaValidateListSimpleTypeFacet(facetLink->facet,
- value, length, NULL);
- break;
- default:
- continue;
- }
- if (ret < 0) {
- AERROR_INT("xmlSchemaValidateFacets",
- "validating against a list type facet");
- return (-1);
- } else if (ret > 0) {
- if (fireErrors)
- xmlSchemaFacetErr(actxt, ret, node,
- value, length, type, facetLink->facet, NULL, NULL, NULL);
- else
- return (ret);
- if (error == 0)
- error = ret;
- }
- ret = 0;
- }
-
-pattern_and_enum:
- if (error >= 0) {
- int found = 0;
- /*
- * Process enumerations. Facet values are in the value space
- * of the defining type's base type. This seems to be a bug in the
- * XML Schema 1.0 spec. Use the whitespace type of the base type.
- * Only the first set of enumerations in the ancestor-or-self axis
- * is used for validation.
- */
- ret = 0;
- tmpType = type;
- do {
- for (facet = tmpType->facets; facet != NULL; facet = facet->next) {
- if (facet->type != XML_SCHEMA_FACET_ENUMERATION)
- continue;
- found = 1;
- ret = xmlSchemaAreValuesEqual(facet->val, val);
- if (ret == 1)
- break;
- else if (ret < 0) {
- AERROR_INT("xmlSchemaValidateFacets",
- "validating against an enumeration facet");
- return (-1);
- }
- }
- if (ret != 0)
- break;
- /*
- * Break on the first set of enumerations. Any additional
- * enumerations which might be existent on the ancestors
- * of the current type are restricted by this set; thus
- * *must* *not* be taken into account.
- */
- if (found)
- break;
- tmpType = tmpType->baseType;
- } while ((tmpType != NULL) &&
- (tmpType->type != XML_SCHEMA_TYPE_BASIC));
- if (found && (ret == 0)) {
- ret = XML_SCHEMAV_CVC_ENUMERATION_VALID;
- if (fireErrors) {
- xmlSchemaFacetErr(actxt, ret, node,
- value, 0, type, NULL, NULL, NULL, NULL);
- } else
- return (ret);
- if (error == 0)
- error = ret;
- }
- }
-
- if (error >= 0) {
- int found;
- /*
- * Process patters. Pattern facets are ORed at type level
- * and ANDed if derived. Walk the base type axis.
- */
- tmpType = type;
- facet = NULL;
- do {
- found = 0;
- for (facetLink = tmpType->facetSet; facetLink != NULL;
- facetLink = facetLink->next) {
- if (facetLink->facet->type != XML_SCHEMA_FACET_PATTERN)
- continue;
- found = 1;
- /*
- * NOTE that for patterns, @value needs to be the
- * normalized vaule.
- */
- ret = xmlRegexpExec(facetLink->facet->regexp, value);
- if (ret == 1)
- break;
- else if (ret < 0) {
- AERROR_INT("xmlSchemaValidateFacets",
- "validating against a pattern facet");
- return (-1);
- } else {
- /*
- * Save the last non-validating facet.
- */
- facet = facetLink->facet;
- }
- }
- if (found && (ret != 1)) {
- ret = XML_SCHEMAV_CVC_PATTERN_VALID;
- if (fireErrors) {
- xmlSchemaFacetErr(actxt, ret, node,
- value, 0, type, facet, NULL, NULL, NULL);
- } else
- return (ret);
- if (error == 0)
- error = ret;
- break;
- }
- tmpType = tmpType->baseType;
- } while ((tmpType != NULL) && (tmpType->type != XML_SCHEMA_TYPE_BASIC));
- }
-
- return (error);
-}
-
-static xmlChar *
-xmlSchemaNormalizeValue(xmlSchemaTypePtr type,
- const xmlChar *value)
-{
- switch (xmlSchemaGetWhiteSpaceFacetValue(type)) {
- case XML_SCHEMA_WHITESPACE_COLLAPSE:
- return (xmlSchemaCollapseString(value));
- case XML_SCHEMA_WHITESPACE_REPLACE:
- return (xmlSchemaWhiteSpaceReplace(value));
- default:
- return (NULL);
- }
-}
-
-static int
-xmlSchemaValidateQName(xmlSchemaValidCtxtPtr vctxt,
- const xmlChar *value,
- xmlSchemaValPtr *val,
- int valNeeded)
-{
- int ret;
- const xmlChar *nsName;
- xmlChar *local, *prefix = NULL;
-
- ret = xmlValidateQName(value, 1);
- if (ret != 0) {
- if (ret == -1) {
- VERROR_INT("xmlSchemaValidateQName",
- "calling xmlValidateQName()");
- return (-1);
- }
- return( XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1);
- }
- /*
- * NOTE: xmlSplitQName2 will always return a duplicated
- * strings.
- */
- local = xmlSplitQName2(value, &prefix);
- if (local == NULL)
- local = xmlStrdup(value);
- /*
- * OPTIMIZE TODO: Use flags for:
- * - is there any namespace binding?
- * - is there a default namespace?
- */
- nsName = xmlSchemaLookupNamespace(vctxt, prefix);
-
- if (prefix != NULL) {
- xmlFree(prefix);
- /*
- * A namespace must be found if the prefix is
- * NOT NULL.
- */
- if (nsName == NULL) {
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1;
- xmlSchemaCustomErr(ACTXT_CAST vctxt, ret, NULL,
- WXS_BASIC_CAST xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME),
- "The QName value '%s' has no "
- "corresponding namespace declaration in "
- "scope", value, NULL);
- if (local != NULL)
- xmlFree(local);
- return (ret);
- }
- }
- if (valNeeded && val) {
- if (nsName != NULL)
- *val = xmlSchemaNewQNameValue(
- BAD_CAST xmlStrdup(nsName), BAD_CAST local);
- else
- *val = xmlSchemaNewQNameValue(NULL,
- BAD_CAST local);
- } else
- xmlFree(local);
- return (0);
-}
-
-/*
-* cvc-simple-type
-*/
-static int
-xmlSchemaVCheckCVCSimpleType(xmlSchemaAbstractCtxtPtr actxt,
- xmlNodePtr node,
- xmlSchemaTypePtr type,
- const xmlChar *value,
- xmlSchemaValPtr *retVal,
- int fireErrors,
- int normalize,
- int isNormalized)
-{
- int ret = 0, valNeeded = (retVal) ? 1 : 0;
- xmlSchemaValPtr val = NULL;
- /* xmlSchemaWhitespaceValueType ws; */
- xmlChar *normValue = NULL;
-
-#define NORMALIZE(atype) \
- if ((! isNormalized) && \
- (normalize || (type->flags & XML_SCHEMAS_TYPE_NORMVALUENEEDED))) { \
- normValue = xmlSchemaNormalizeValue(atype, value); \
- if (normValue != NULL) \
- value = normValue; \
- isNormalized = 1; \
- }
-
- if ((retVal != NULL) && (*retVal != NULL)) {
- xmlSchemaFreeValue(*retVal);
- *retVal = NULL;
- }
- /*
- * 3.14.4 Simple Type Definition Validation Rules
- * Validation Rule: String Valid
- */
- /*
- * 1 It is schema-valid with respect to that definition as defined
- * by Datatype Valid in [XML Schemas: Datatypes].
- */
- /*
- * 2.1 If The definition is ENTITY or is validly derived from ENTITY given
- * the empty set, as defined in Type Derivation OK (Simple) ($3.14.6), then
- * the string must be a `declared entity name`.
- */
- /*
- * 2.2 If The definition is ENTITIES or is validly derived from ENTITIES
- * given the empty set, as defined in Type Derivation OK (Simple) ($3.14.6),
- * then every whitespace-delimited substring of the string must be a `declared
- * entity name`.
- */
- /*
- * 2.3 otherwise no further condition applies.
- */
- if ((! valNeeded) && (type->flags & XML_SCHEMAS_TYPE_FACETSNEEDVALUE))
- valNeeded = 1;
- if (value == NULL)
- value = BAD_CAST "";
- if (WXS_IS_ANY_SIMPLE_TYPE(type) || WXS_IS_ATOMIC(type)) {
- xmlSchemaTypePtr biType; /* The built-in type. */
- /*
- * SPEC (1.2.1) "if {variety} is `atomic` then the string must `match`
- * a literal in the `lexical space` of {base type definition}"
- */
- /*
- * Whitespace-normalize.
- */
- NORMALIZE(type);
- if (type->type != XML_SCHEMA_TYPE_BASIC) {
- /*
- * Get the built-in type.
- */
- biType = type->baseType;
- while ((biType != NULL) &&
- (biType->type != XML_SCHEMA_TYPE_BASIC))
- biType = biType->baseType;
-
- if (biType == NULL) {
- AERROR_INT("xmlSchemaVCheckCVCSimpleType",
- "could not get the built-in type");
- goto internal_error;
- }
- } else
- biType = type;
- /*
- * NOTATIONs need to be processed here, since they need
- * to lookup in the hashtable of NOTATION declarations of the schema.
- */
- if (actxt->type == XML_SCHEMA_CTXT_VALIDATOR) {
- switch (biType->builtInType) {
- case XML_SCHEMAS_NOTATION:
- ret = xmlSchemaValidateNotation(
- (xmlSchemaValidCtxtPtr) actxt,
- ((xmlSchemaValidCtxtPtr) actxt)->schema,
- NULL, value, &val, valNeeded);
- break;
- case XML_SCHEMAS_QNAME:
- ret = xmlSchemaValidateQName((xmlSchemaValidCtxtPtr) actxt,
- value, &val, valNeeded);
- break;
- default:
- /* ws = xmlSchemaGetWhiteSpaceFacetValue(type); */
- if (valNeeded)
- ret = xmlSchemaValPredefTypeNodeNoNorm(biType,
- value, &val, node);
- else
- ret = xmlSchemaValPredefTypeNodeNoNorm(biType,
- value, NULL, node);
- break;
- }
- } else if (actxt->type == XML_SCHEMA_CTXT_PARSER) {
- switch (biType->builtInType) {
- case XML_SCHEMAS_NOTATION:
- ret = xmlSchemaValidateNotation(NULL,
- ((xmlSchemaParserCtxtPtr) actxt)->schema, node,
- value, &val, valNeeded);
- break;
- default:
- /* ws = xmlSchemaGetWhiteSpaceFacetValue(type); */
- if (valNeeded)
- ret = xmlSchemaValPredefTypeNodeNoNorm(biType,
- value, &val, node);
- else
- ret = xmlSchemaValPredefTypeNodeNoNorm(biType,
- value, NULL, node);
- break;
- }
- } else {
- /*
- * Validation via a public API is not implemented yet.
- */
- TODO
- goto internal_error;
- }
- if (ret != 0) {
- if (ret < 0) {
- AERROR_INT("xmlSchemaVCheckCVCSimpleType",
- "validating against a built-in type");
- goto internal_error;
- }
- if (WXS_IS_LIST(type))
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
- else
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1;
- }
- if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) {
- /*
- * Check facets.
- */
- ret = xmlSchemaValidateFacets(actxt, node, type,
- (xmlSchemaValType) biType->builtInType, value, val,
- 0, fireErrors);
- if (ret != 0) {
- if (ret < 0) {
- AERROR_INT("xmlSchemaVCheckCVCSimpleType",
- "validating facets of atomic simple type");
- goto internal_error;
- }
- if (WXS_IS_LIST(type))
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
- else
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1;
- }
- }
- if (fireErrors && (ret > 0))
- xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1);
- } else if (WXS_IS_LIST(type)) {
-
- xmlSchemaTypePtr itemType;
- const xmlChar *cur, *end;
- xmlChar *tmpValue = NULL;
- unsigned long len = 0;
- xmlSchemaValPtr prevVal = NULL, curVal = NULL;
- /* 1.2.2 if {variety} is `list` then the string must be a sequence
- * of white space separated tokens, each of which `match`es a literal
- * in the `lexical space` of {item type definition}
- */
- /*
- * Note that XML_SCHEMAS_TYPE_NORMVALUENEEDED will be set if
- * the list type has an enum or pattern facet.
- */
- NORMALIZE(type);
- /*
- * VAL TODO: Optimize validation of empty values.
- * VAL TODO: We do not have computed values for lists.
- */
- itemType = WXS_LIST_ITEMTYPE(type);
- cur = value;
- do {
- while (IS_BLANK_CH(*cur))
- cur++;
- end = cur;
- while ((*end != 0) && (!(IS_BLANK_CH(*end))))
- end++;
- if (end == cur)
- break;
- tmpValue = xmlStrndup(cur, end - cur);
- len++;
-
- if (valNeeded)
- ret = xmlSchemaVCheckCVCSimpleType(actxt, node, itemType,
- tmpValue, &curVal, fireErrors, 0, 1);
- else
- ret = xmlSchemaVCheckCVCSimpleType(actxt, node, itemType,
- tmpValue, NULL, fireErrors, 0, 1);
- FREE_AND_NULL(tmpValue);
- if (curVal != NULL) {
- /*
- * Add to list of computed values.
- */
- if (val == NULL)
- val = curVal;
- else
- xmlSchemaValueAppend(prevVal, curVal);
- prevVal = curVal;
- curVal = NULL;
- }
- if (ret != 0) {
- if (ret < 0) {
- AERROR_INT("xmlSchemaVCheckCVCSimpleType",
- "validating an item of list simple type");
- goto internal_error;
- }
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
- break;
- }
- cur = end;
- } while (*cur != 0);
- FREE_AND_NULL(tmpValue);
- if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) {
- /*
- * Apply facets (pattern, enumeration).
- */
- ret = xmlSchemaValidateFacets(actxt, node, type,
- XML_SCHEMAS_UNKNOWN, value, val,
- len, fireErrors);
- if (ret != 0) {
- if (ret < 0) {
- AERROR_INT("xmlSchemaVCheckCVCSimpleType",
- "validating facets of list simple type");
- goto internal_error;
- }
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_2;
- }
- }
- if (fireErrors && (ret > 0)) {
- /*
- * Report the normalized value.
- */
- normalize = 1;
- NORMALIZE(type);
- xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1);
- }
- } else if (WXS_IS_UNION(type)) {
- xmlSchemaTypeLinkPtr memberLink;
- /*
- * TODO: For all datatypes `derived` by `union` whiteSpace does
- * not apply directly; however, the normalization behavior of `union`
- * types is controlled by the value of whiteSpace on that one of the
- * `memberTypes` against which the `union` is successfully validated.
- *
- * This means that the value is normalized by the first validating
- * member type, then the facets of the union type are applied. This
- * needs changing of the value!
- */
-
- /*
- * 1.2.3 if {variety} is `union` then the string must `match` a
- * literal in the `lexical space` of at least one member of
- * {member type definitions}
- */
- memberLink = xmlSchemaGetUnionSimpleTypeMemberTypes(type);
- if (memberLink == NULL) {
- AERROR_INT("xmlSchemaVCheckCVCSimpleType",
- "union simple type has no member types");
- goto internal_error;
- }
- /*
- * Always normalize union type values, since we currently
- * cannot store the whitespace information with the value
- * itself; otherwise a later value-comparison would be
- * not possible.
- */
- while (memberLink != NULL) {
- if (valNeeded)
- ret = xmlSchemaVCheckCVCSimpleType(actxt, node,
- memberLink->type, value, &val, 0, 1, 0);
- else
- ret = xmlSchemaVCheckCVCSimpleType(actxt, node,
- memberLink->type, value, NULL, 0, 1, 0);
- if (ret <= 0)
- break;
- memberLink = memberLink->next;
- }
- if (ret != 0) {
- if (ret < 0) {
- AERROR_INT("xmlSchemaVCheckCVCSimpleType",
- "validating members of union simple type");
- goto internal_error;
- }
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3;
- }
- /*
- * Apply facets (pattern, enumeration).
- */
- if ((ret == 0) && (type->flags & XML_SCHEMAS_TYPE_HAS_FACETS)) {
- /*
- * The normalization behavior of `union` types is controlled by
- * the value of whiteSpace on that one of the `memberTypes`
- * against which the `union` is successfully validated.
- */
- NORMALIZE(memberLink->type);
- ret = xmlSchemaValidateFacets(actxt, node, type,
- XML_SCHEMAS_UNKNOWN, value, val,
- 0, fireErrors);
- if (ret != 0) {
- if (ret < 0) {
- AERROR_INT("xmlSchemaVCheckCVCSimpleType",
- "validating facets of union simple type");
- goto internal_error;
- }
- ret = XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_3;
- }
- }
- if (fireErrors && (ret > 0))
- xmlSchemaSimpleTypeErr(actxt, ret, node, value, type, 1);
- }
-
- if (normValue != NULL)
- xmlFree(normValue);
- if (ret == 0) {
- if (retVal != NULL)
- *retVal = val;
- else if (val != NULL)
- xmlSchemaFreeValue(val);
- } else if (val != NULL)
- xmlSchemaFreeValue(val);
- return (ret);
-internal_error:
- if (normValue != NULL)
- xmlFree(normValue);
- if (val != NULL)
- xmlSchemaFreeValue(val);
- return (-1);
-}
-
-static int
-xmlSchemaVExpandQName(xmlSchemaValidCtxtPtr vctxt,
- const xmlChar *value,
- const xmlChar **nsName,
- const xmlChar **localName)
-{
- int ret = 0;
-
- if ((nsName == NULL) || (localName == NULL))
- return (-1);
- *nsName = NULL;
- *localName = NULL;
-
- ret = xmlValidateQName(value, 1);
- if (ret == -1)
- return (-1);
- if (ret > 0) {
- xmlSchemaSimpleTypeErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, NULL,
- value, xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME), 1);
- return (1);
- }
- {
- xmlChar *local = NULL;
- xmlChar *prefix;
-
- /*
- * NOTE: xmlSplitQName2 will return a duplicated
- * string.
- */
- local = xmlSplitQName2(value, &prefix);
- if (local == NULL)
- *localName = xmlDictLookup(vctxt->dict, value, -1);
- else {
- *localName = xmlDictLookup(vctxt->dict, local, -1);
- xmlFree(local);
- }
-
- *nsName = xmlSchemaLookupNamespace(vctxt, prefix);
-
- if (prefix != NULL) {
- xmlFree(prefix);
- /*
- * A namespace must be found if the prefix is NOT NULL.
- */
- if (*nsName == NULL) {
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_DATATYPE_VALID_1_2_1, NULL,
- WXS_BASIC_CAST xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME),
- "The QName value '%s' has no "
- "corresponding namespace declaration in scope",
- value, NULL);
- return (2);
- }
- }
- }
- return (0);
-}
-
-static int
-xmlSchemaProcessXSIType(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaAttrInfoPtr iattr,
- xmlSchemaTypePtr *localType,
- xmlSchemaElementPtr elemDecl)
-{
- int ret = 0;
- /*
- * cvc-elt (3.3.4) : (4)
- * AND
- * Schema-Validity Assessment (Element) (cvc-assess-elt)
- * (1.2.1.2.1) - (1.2.1.2.4)
- * Handle 'xsi:type'.
- */
- if (localType == NULL)
- return (-1);
- *localType = NULL;
- if (iattr == NULL)
- return (0);
- else {
- const xmlChar *nsName = NULL, *local = NULL;
- /*
- * TODO: We should report a *warning* that the type was overriden
- * by the instance.
- */
- ACTIVATE_ATTRIBUTE(iattr);
- /*
- * (cvc-elt) (3.3.4) : (4.1)
- * (cvc-assess-elt) (1.2.1.2.2)
- */
- ret = xmlSchemaVExpandQName(vctxt, iattr->value,
- &nsName, &local);
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidateElementByDeclaration",
- "calling xmlSchemaQNameExpand() to validate the "
- "attribute 'xsi:type'");
- goto internal_error;
- }
- goto exit;
- }
- /*
- * (cvc-elt) (3.3.4) : (4.2)
- * (cvc-assess-elt) (1.2.1.2.3)
- */
- *localType = xmlSchemaGetType(vctxt->schema, local, nsName);
- if (*localType == NULL) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_ELT_4_2, NULL,
- WXS_BASIC_CAST xmlSchemaGetBuiltInType(XML_SCHEMAS_QNAME),
- "The QName value '%s' of the xsi:type attribute does not "
- "resolve to a type definition",
- xmlSchemaFormatQName(&str, nsName, local), NULL);
- FREE_AND_NULL(str);
- ret = vctxt->err;
- goto exit;
- }
- if (elemDecl != NULL) {
- int set = 0;
-
- /*
- * SPEC cvc-elt (3.3.4) : (4.3) (Type Derivation OK)
- * "The `local type definition` must be validly
- * derived from the {type definition} given the union of
- * the {disallowed substitutions} and the {type definition}'s
- * {prohibited substitutions}, as defined in
- * Type Derivation OK (Complex) ($3.4.6)
- * (if it is a complex type definition),
- * or given {disallowed substitutions} as defined in Type
- * Derivation OK (Simple) ($3.14.6) (if it is a simple type
- * definition)."
- *
- * {disallowed substitutions}: the "block" on the element decl.
- * {prohibited substitutions}: the "block" on the type def.
- */
- /*
- * OPTIMIZE TODO: We could map types already evaluated
- * to be validly derived from other types to avoid checking
- * this over and over for the same types.
- */
- if ((elemDecl->flags & XML_SCHEMAS_ELEM_BLOCK_EXTENSION) ||
- (elemDecl->subtypes->flags &
- XML_SCHEMAS_TYPE_BLOCK_EXTENSION))
- set |= SUBSET_EXTENSION;
-
- if ((elemDecl->flags & XML_SCHEMAS_ELEM_BLOCK_RESTRICTION) ||
- (elemDecl->subtypes->flags &
- XML_SCHEMAS_TYPE_BLOCK_RESTRICTION))
- set |= SUBSET_RESTRICTION;
-
- /*
- * REMOVED and CHANGED since this produced a parser context
- * which adds to the string dict of the schema. So this would
- * change the schema and we don't want this. We don't need
- * the parser context anymore.
- *
- * if ((vctxt->pctxt == NULL) &&
- * (xmlSchemaCreatePCtxtOnVCtxt(vctxt) == -1))
- * return (-1);
- */
-
- if (xmlSchemaCheckCOSDerivedOK(ACTXT_CAST vctxt, *localType,
- elemDecl->subtypes, set) != 0) {
- xmlChar *str = NULL;
-
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_ELT_4_3, NULL, NULL,
- "The type definition '%s', specified by xsi:type, is "
- "blocked or not validly derived from the type definition "
- "of the element declaration",
- xmlSchemaFormatQName(&str,
- (*localType)->targetNamespace,
- (*localType)->name),
- NULL);
- FREE_AND_NULL(str);
- ret = vctxt->err;
- *localType = NULL;
- }
- }
- }
-exit:
- ACTIVATE_ELEM;
- return (ret);
-internal_error:
- ACTIVATE_ELEM;
- return (-1);
-}
-
-static int
-xmlSchemaValidateElemDecl(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaElementPtr elemDecl = vctxt->inode->decl;
- xmlSchemaTypePtr actualType;
-
- /*
- * cvc-elt (3.3.4) : 1
- */
- if (elemDecl == NULL) {
- VERROR(XML_SCHEMAV_CVC_ELT_1, NULL,
- "No matching declaration available");
- return (vctxt->err);
- }
- actualType = WXS_ELEM_TYPEDEF(elemDecl);
- /*
- * cvc-elt (3.3.4) : 2
- */
- if (elemDecl->flags & XML_SCHEMAS_ELEM_ABSTRACT) {
- VERROR(XML_SCHEMAV_CVC_ELT_2, NULL,
- "The element declaration is abstract");
- return (vctxt->err);
- }
- if (actualType == NULL) {
- VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL,
- "The type definition is absent");
- return (XML_SCHEMAV_CVC_TYPE_1);
- }
- if (vctxt->nbAttrInfos != 0) {
- int ret;
- xmlSchemaAttrInfoPtr iattr;
- /*
- * cvc-elt (3.3.4) : 3
- * Handle 'xsi:nil'.
- */
- iattr = xmlSchemaGetMetaAttrInfo(vctxt,
- XML_SCHEMA_ATTR_INFO_META_XSI_NIL);
- if (iattr) {
- ACTIVATE_ATTRIBUTE(iattr);
- /*
- * Validate the value.
- */
- ret = xmlSchemaVCheckCVCSimpleType(
- ACTXT_CAST vctxt, NULL,
- xmlSchemaGetBuiltInType(XML_SCHEMAS_BOOLEAN),
- iattr->value, &(iattr->val), 1, 0, 0);
- ACTIVATE_ELEM;
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidateElemDecl",
- "calling xmlSchemaVCheckCVCSimpleType() to "
- "validate the attribute 'xsi:nil'");
- return (-1);
- }
- if (ret == 0) {
- if ((elemDecl->flags & XML_SCHEMAS_ELEM_NILLABLE) == 0) {
- /*
- * cvc-elt (3.3.4) : 3.1
- */
- VERROR(XML_SCHEMAV_CVC_ELT_3_1, NULL,
- "The element is not 'nillable'");
- /* Does not return an error on purpose. */
- } else {
- if (xmlSchemaValueGetAsBoolean(iattr->val)) {
- /*
- * cvc-elt (3.3.4) : 3.2.2
- */
- if ((elemDecl->flags & XML_SCHEMAS_ELEM_FIXED) &&
- (elemDecl->value != NULL)) {
- VERROR(XML_SCHEMAV_CVC_ELT_3_2_2, NULL,
- "The element cannot be 'nilled' because "
- "there is a fixed value constraint defined "
- "for it");
- /* Does not return an error on purpose. */
- } else
- vctxt->inode->flags |=
- XML_SCHEMA_ELEM_INFO_NILLED;
- }
- }
- }
- }
- /*
- * cvc-elt (3.3.4) : 4
- * Handle 'xsi:type'.
- */
- iattr = xmlSchemaGetMetaAttrInfo(vctxt,
- XML_SCHEMA_ATTR_INFO_META_XSI_TYPE);
- if (iattr) {
- xmlSchemaTypePtr localType = NULL;
-
- ret = xmlSchemaProcessXSIType(vctxt, iattr, &localType,
- elemDecl);
- if (ret != 0) {
- if (ret == -1) {
- VERROR_INT("xmlSchemaValidateElemDecl",
- "calling xmlSchemaProcessXSIType() to "
- "process the attribute 'xsi:type'");
- return (-1);
- }
- /* Does not return an error on purpose. */
- }
- if (localType != NULL) {
- vctxt->inode->flags |= XML_SCHEMA_ELEM_INFO_LOCAL_TYPE;
- actualType = localType;
- }
- }
- }
- /*
- * IDC: Register identity-constraint XPath matchers.
- */
- if ((elemDecl->idcs != NULL) &&
- (xmlSchemaIDCRegisterMatchers(vctxt, elemDecl) == -1))
- return (-1);
- /*
- * No actual type definition.
- */
- if (actualType == NULL) {
- VERROR(XML_SCHEMAV_CVC_TYPE_1, NULL,
- "The type definition is absent");
- return (XML_SCHEMAV_CVC_TYPE_1);
- }
- /*
- * Remember the actual type definition.
- */
- vctxt->inode->typeDef = actualType;
-
- return (0);
-}
-
-static int
-xmlSchemaVAttributesSimple(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaAttrInfoPtr iattr;
- int ret = 0, i;
-
- /*
- * SPEC cvc-type (3.1.1)
- * "The attributes of must be empty, excepting those whose namespace
- * name is identical to http://www.w3.org/2001/XMLSchema-instance and
- * whose local name is one of type, nil, schemaLocation or
- * noNamespaceSchemaLocation."
- */
- if (vctxt->nbAttrInfos == 0)
- return (0);
- for (i = 0; i < vctxt->nbAttrInfos; i++) {
- iattr = vctxt->attrInfos[i];
- if (! iattr->metaType) {
- ACTIVATE_ATTRIBUTE(iattr)
- xmlSchemaIllegalAttrErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_TYPE_3_1_1, iattr, NULL);
- ret = XML_SCHEMAV_CVC_TYPE_3_1_1;
- }
- }
- ACTIVATE_ELEM
- return (ret);
-}
-
-/*
-* Cleanup currently used attribute infos.
-*/
-static void
-xmlSchemaClearAttrInfos(xmlSchemaValidCtxtPtr vctxt)
-{
- int i;
- xmlSchemaAttrInfoPtr attr;
-
- if (vctxt->nbAttrInfos == 0)
- return;
- for (i = 0; i < vctxt->nbAttrInfos; i++) {
- attr = vctxt->attrInfos[i];
- if (attr->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES) {
- if (attr->localName != NULL)
- xmlFree((xmlChar *) attr->localName);
- if (attr->nsName != NULL)
- xmlFree((xmlChar *) attr->nsName);
- }
- if (attr->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES) {
- if (attr->value != NULL)
- xmlFree((xmlChar *) attr->value);
- }
- if (attr->val != NULL) {
- xmlSchemaFreeValue(attr->val);
- attr->val = NULL;
- }
- memset(attr, 0, sizeof(xmlSchemaAttrInfo));
- }
- vctxt->nbAttrInfos = 0;
-}
-
-/*
-* 3.4.4 Complex Type Definition Validation Rules
-* Element Locally Valid (Complex Type) (cvc-complex-type)
-* 3.2.4 Attribute Declaration Validation Rules
-* Validation Rule: Attribute Locally Valid (cvc-attribute)
-* Attribute Locally Valid (Use) (cvc-au)
-*
-* Only "assessed" attribute information items will be visible to
-* IDCs. I.e. not "lax" (without declaration) and "skip" wild attributes.
-*/
-static int
-xmlSchemaVAttributesComplex(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaTypePtr type = vctxt->inode->typeDef;
- xmlSchemaItemListPtr attrUseList;
- xmlSchemaAttributeUsePtr attrUse = NULL;
- xmlSchemaAttributePtr attrDecl = NULL;
- xmlSchemaAttrInfoPtr iattr, tmpiattr;
- int i, j, found, nbAttrs, nbUses;
- int xpathRes = 0, res, wildIDs = 0, fixed;
- xmlNodePtr defAttrOwnerElem = NULL;
-
- /*
- * SPEC (cvc-attribute)
- * (1) "The declaration must not be `absent` (see Missing
- * Sub-components ($5.3) for how this can fail to be
- * the case)."
- * (2) "Its {type definition} must not be absent."
- *
- * NOTE (1) + (2): This is not handled here, since we currently do not
- * allow validation against schemas which have missing sub-components.
- *
- * SPEC (cvc-complex-type)
- * (3) "For each attribute information item in the element information
- * item's [attributes] excepting those whose [namespace name] is
- * identical to http://www.w3.org/2001/XMLSchema-instance and whose
- * [local name] is one of type, nil, schemaLocation or
- * noNamespaceSchemaLocation, the appropriate case among the following
- * must be true:
- *
- */
- attrUseList = (xmlSchemaItemListPtr) type->attrUses;
- /*
- * @nbAttrs is the number of attributes present in the instance.
- */
- nbAttrs = vctxt->nbAttrInfos;
- if (attrUseList != NULL)
- nbUses = attrUseList->nbItems;
- else
- nbUses = 0;
- for (i = 0; i < nbUses; i++) {
- found = 0;
- attrUse = attrUseList->items[i];
- attrDecl = WXS_ATTRUSE_DECL(attrUse);
- for (j = 0; j < nbAttrs; j++) {
- iattr = vctxt->attrInfos[j];
- /*
- * SPEC (cvc-complex-type) (3)
- * Skip meta attributes.
- */
- if (iattr->metaType)
- continue;
- if (iattr->localName[0] != attrDecl->name[0])
- continue;
- if (!xmlStrEqual(iattr->localName, attrDecl->name))
- continue;
- if (!xmlStrEqual(iattr->nsName, attrDecl->targetNamespace))
- continue;
- found = 1;
- /*
- * SPEC (cvc-complex-type)
- * (3.1) "If there is among the {attribute uses} an attribute
- * use with an {attribute declaration} whose {name} matches
- * the attribute information item's [local name] and whose
- * {target namespace} is identical to the attribute information
- * item's [namespace name] (where an `absent` {target namespace}
- * is taken to be identical to a [namespace name] with no value),
- * then the attribute information must be `valid` with respect
- * to that attribute use as per Attribute Locally Valid (Use)
- * ($3.5.4). In this case the {attribute declaration} of that
- * attribute use is the `context-determined declaration` for the
- * attribute information item with respect to Schema-Validity
- * Assessment (Attribute) ($3.2.4) and
- * Assessment Outcome (Attribute) ($3.2.5).
- */
- iattr->state = XML_SCHEMAS_ATTR_ASSESSED;
- iattr->use = attrUse;
- /*
- * Context-determined declaration.
- */
- iattr->decl = attrDecl;
- iattr->typeDef = attrDecl->subtypes;
- break;
- }
-
- if (found)
- continue;
-
- if (attrUse->occurs == XML_SCHEMAS_ATTR_USE_REQUIRED) {
- /*
- * Handle non-existent, required attributes.
- *
- * SPEC (cvc-complex-type)
- * (4) "The {attribute declaration} of each attribute use in
- * the {attribute uses} whose {required} is true matches one
- * of the attribute information items in the element information
- * item's [attributes] as per clause 3.1 above."
- */
- tmpiattr = xmlSchemaGetFreshAttrInfo(vctxt);
- if (tmpiattr == NULL) {
- VERROR_INT(
- "xmlSchemaVAttributesComplex",
- "calling xmlSchemaGetFreshAttrInfo()");
- return (-1);
- }
- tmpiattr->state = XML_SCHEMAS_ATTR_ERR_MISSING;
- tmpiattr->use = attrUse;
- tmpiattr->decl = attrDecl;
- } else if ((attrUse->occurs == XML_SCHEMAS_ATTR_USE_OPTIONAL) &&
- ((attrUse->defValue != NULL) ||
- (attrDecl->defValue != NULL))) {
- /*
- * Handle non-existent, optional, default/fixed attributes.
- */
- tmpiattr = xmlSchemaGetFreshAttrInfo(vctxt);
- if (tmpiattr == NULL) {
- VERROR_INT(
- "xmlSchemaVAttributesComplex",
- "calling xmlSchemaGetFreshAttrInfo()");
- return (-1);
- }
- tmpiattr->state = XML_SCHEMAS_ATTR_DEFAULT;
- tmpiattr->use = attrUse;
- tmpiattr->decl = attrDecl;
- tmpiattr->typeDef = attrDecl->subtypes;
- tmpiattr->localName = attrDecl->name;
- tmpiattr->nsName = attrDecl->targetNamespace;
- }
- }
-
- if (vctxt->nbAttrInfos == 0)
- return (0);
- /*
- * Validate against the wildcard.
- */
- if (type->attributeWildcard != NULL) {
- /*
- * SPEC (cvc-complex-type)
- * (3.2.1) "There must be an {attribute wildcard}."
- */
- for (i = 0; i < nbAttrs; i++) {
- iattr = vctxt->attrInfos[i];
- /*
- * SPEC (cvc-complex-type) (3)
- * Skip meta attributes.
- */
- if (iattr->state != XML_SCHEMAS_ATTR_UNKNOWN)
- continue;
- /*
- * SPEC (cvc-complex-type)
- * (3.2.2) "The attribute information item must be `valid` with
- * respect to it as defined in Item Valid (Wildcard) ($3.10.4)."
- *
- * SPEC Item Valid (Wildcard) (cvc-wildcard)
- * "... its [namespace name] must be `valid` with respect to
- * the wildcard constraint, as defined in Wildcard allows
- * Namespace Name ($3.10.4)."
- */
- if (xmlSchemaCheckCVCWildcardNamespace(type->attributeWildcard,
- iattr->nsName) == 0) {
- /*
- * Handle processContents.
- *
- * SPEC (cvc-wildcard):
- * processContents | context-determined declaration:
- * "strict" "mustFind"
- * "lax" "none"
- * "skip" "skip"
- */
- if (type->attributeWildcard->processContents ==
- XML_SCHEMAS_ANY_SKIP) {
- /*
- * context-determined declaration = "skip"
- *
- * SPEC PSVI Assessment Outcome (Attribute)
- * [validity] = "notKnown"
- * [validation attempted] = "none"
- */
- iattr->state = XML_SCHEMAS_ATTR_WILD_SKIP;
- continue;
- }
- /*
- * Find an attribute declaration.
- */
- iattr->decl = xmlSchemaGetAttributeDecl(vctxt->schema,
- iattr->localName, iattr->nsName);
- if (iattr->decl != NULL) {
- iattr->state = XML_SCHEMAS_ATTR_ASSESSED;
- /*
- * SPEC (cvc-complex-type)
- * (5) "Let [Definition:] the wild IDs be the set of
- * all attribute information item to which clause 3.2
- * applied and whose `validation` resulted in a
- * `context-determined declaration` of mustFind or no
- * `context-determined declaration` at all, and whose
- * [local name] and [namespace name] resolve (as
- * defined by QName resolution (Instance) ($3.15.4)) to
- * an attribute declaration whose {type definition} is
- * or is derived from ID. Then all of the following
- * must be true:"
- */
- iattr->typeDef = WXS_ATTR_TYPEDEF(iattr->decl);
- if (xmlSchemaIsDerivedFromBuiltInType(
- iattr->typeDef, XML_SCHEMAS_ID)) {
- /*
- * SPEC (5.1) "There must be no more than one
- * item in `wild IDs`."
- */
- if (wildIDs != 0) {
- /* VAL TODO */
- iattr->state = XML_SCHEMAS_ATTR_ERR_WILD_DUPLICATE_ID;
- TODO
- continue;
- }
- wildIDs++;
- /*
- * SPEC (cvc-complex-type)
- * (5.2) "If `wild IDs` is non-empty, there must not
- * be any attribute uses among the {attribute uses}
- * whose {attribute declaration}'s {type definition}
- * is or is derived from ID."
- */
- if (attrUseList != NULL) {
- for (j = 0; j < attrUseList->nbItems; j++) {
- if (xmlSchemaIsDerivedFromBuiltInType(
- WXS_ATTRUSE_TYPEDEF(attrUseList->items[j]),
- XML_SCHEMAS_ID)) {
- /* URGENT VAL TODO: implement */
- iattr->state = XML_SCHEMAS_ATTR_ERR_WILD_AND_USE_ID;
- TODO
- break;
- }
- }
- }
- }
- } else if (type->attributeWildcard->processContents ==
- XML_SCHEMAS_ANY_LAX) {
- iattr->state = XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL;
- /*
- * SPEC PSVI Assessment Outcome (Attribute)
- * [validity] = "notKnown"
- * [validation attempted] = "none"
- */
- } else {
- iattr->state = XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL;
- }
- }
- }
- }
-
- if (vctxt->nbAttrInfos == 0)
- return (0);
-
- /*
- * Get the owner element; needed for creation of default attributes.
- * This fixes bug #341337, reported by David Grohmann.
- */
- if (vctxt->options & XML_SCHEMA_VAL_VC_I_CREATE) {
- xmlSchemaNodeInfoPtr ielem = vctxt->elemInfos[vctxt->depth];
- if (ielem && ielem->node && ielem->node->doc)
- defAttrOwnerElem = ielem->node;
- }
- /*
- * Validate values, create default attributes, evaluate IDCs.
- */
- for (i = 0; i < vctxt->nbAttrInfos; i++) {
- iattr = vctxt->attrInfos[i];
- /*
- * VAL TODO: Note that we won't try to resolve IDCs to
- * "lax" and "skip" validated attributes. Check what to
- * do in this case.
- */
- if ((iattr->state != XML_SCHEMAS_ATTR_ASSESSED) &&
- (iattr->state != XML_SCHEMAS_ATTR_DEFAULT))
- continue;
- /*
- * VAL TODO: What to do if the type definition is missing?
- */
- if (iattr->typeDef == NULL) {
- iattr->state = XML_SCHEMAS_ATTR_ERR_NO_TYPE;
- continue;
- }
-
- ACTIVATE_ATTRIBUTE(iattr);
- fixed = 0;
- xpathRes = 0;
-
- if (vctxt->xpathStates != NULL) {
- /*
- * Evaluate IDCs.
- */
- xpathRes = xmlSchemaXPathEvaluate(vctxt,
- XML_ATTRIBUTE_NODE);
- if (xpathRes == -1) {
- VERROR_INT("xmlSchemaVAttributesComplex",
- "calling xmlSchemaXPathEvaluate()");
- goto internal_error;
- }
- }
-
- if (iattr->state == XML_SCHEMAS_ATTR_DEFAULT) {
- /*
- * Default/fixed attributes.
- * We need the value only if we need to resolve IDCs or
- * will create default attributes.
- */
- if ((xpathRes) || (defAttrOwnerElem)) {
- if (iattr->use->defValue != NULL) {
- iattr->value = (xmlChar *) iattr->use->defValue;
- iattr->val = iattr->use->defVal;
- } else {
- iattr->value = (xmlChar *) iattr->decl->defValue;
- iattr->val = iattr->decl->defVal;
- }
- /*
- * IDCs will consume the precomputed default value,
- * so we need to clone it.
- */
- if (iattr->val == NULL) {
- VERROR_INT("xmlSchemaVAttributesComplex",
- "default/fixed value on an attribute use was "
- "not precomputed");
- goto internal_error;
- }
- iattr->val = xmlSchemaCopyValue(iattr->val);
- if (iattr->val == NULL) {
- VERROR_INT("xmlSchemaVAttributesComplex",
- "calling xmlSchemaCopyValue()");
- goto internal_error;
- }
- }
- /*
- * PSVI: Add the default attribute to the current element.
- * VAL TODO: Should we use the *normalized* value? This currently
- * uses the *initial* value.
- */
-
- if (defAttrOwnerElem) {
- xmlChar *normValue;
- const xmlChar *value;
-
- value = iattr->value;
- /*
- * Normalize the value.
- */
- normValue = xmlSchemaNormalizeValue(iattr->typeDef,
- iattr->value);
- if (normValue != NULL)
- value = BAD_CAST normValue;
-
- if (iattr->nsName == NULL) {
- if (xmlNewProp(defAttrOwnerElem,
- iattr->localName, value) == NULL) {
- VERROR_INT("xmlSchemaVAttributesComplex",
- "calling xmlNewProp()");
- if (normValue != NULL)
- xmlFree(normValue);
- goto internal_error;
- }
- } else {
- xmlNsPtr ns;
-
- ns = xmlSearchNsByHref(defAttrOwnerElem->doc,
- defAttrOwnerElem, iattr->nsName);
- if (ns == NULL) {
- xmlChar prefix[12];
- int counter = 0;
-
- /*
- * Create a namespace declaration on the validation
- * root node if no namespace declaration is in scope.
- */
- do {
- snprintf((char *) prefix, 12, "p%d", counter++);
- ns = xmlSearchNs(defAttrOwnerElem->doc,
- defAttrOwnerElem, BAD_CAST prefix);
- if (counter > 1000) {
- VERROR_INT(
- "xmlSchemaVAttributesComplex",
- "could not compute a ns prefix for a "
- "default/fixed attribute");
- if (normValue != NULL)
- xmlFree(normValue);
- goto internal_error;
- }
- } while (ns != NULL);
- ns = xmlNewNs(vctxt->validationRoot,
- iattr->nsName, BAD_CAST prefix);
- }
- /*
- * TODO:
- * http://lists.w3.org/Archives/Public/www-xml-schema-comments/2005JulSep/0406.html
- * If we have QNames: do we need to ensure there's a
- * prefix defined for the QName?
- */
- xmlNewNsProp(defAttrOwnerElem, ns, iattr->localName, value);
- }
- if (normValue != NULL)
- xmlFree(normValue);
- }
- /*
- * Go directly to IDC evaluation.
- */
- goto eval_idcs;
- }
- /*
- * Validate the value.
- */
- if (vctxt->value != NULL) {
- /*
- * Free last computed value; just for safety reasons.
- */
- xmlSchemaFreeValue(vctxt->value);
- vctxt->value = NULL;
- }
- /*
- * Note that the attribute *use* can be unavailable, if
- * the attribute was a wild attribute.
- */
- if ((iattr->decl->flags & XML_SCHEMAS_ATTR_FIXED) ||
- ((iattr->use != NULL) &&
- (iattr->use->flags & XML_SCHEMAS_ATTR_FIXED)))
- fixed = 1;
- else
- fixed = 0;
- /*
- * SPEC (cvc-attribute)
- * (3) "The item's `normalized value` must be locally `valid`
- * with respect to that {type definition} as per
- * String Valid ($3.14.4)."
- *
- * VAL TODO: Do we already have the
- * "normalized attribute value" here?
- */
- if (xpathRes || fixed) {
- iattr->flags |= XML_SCHEMA_NODE_INFO_VALUE_NEEDED;
- /*
- * Request a computed value.
- */
- res = xmlSchemaVCheckCVCSimpleType(
- ACTXT_CAST vctxt,
- iattr->node, iattr->typeDef, iattr->value, &(iattr->val),
- 1, 1, 0);
- } else {
- res = xmlSchemaVCheckCVCSimpleType(
- ACTXT_CAST vctxt,
- iattr->node, iattr->typeDef, iattr->value, NULL,
- 1, 0, 0);
- }
-
- if (res != 0) {
- if (res == -1) {
- VERROR_INT("xmlSchemaVAttributesComplex",
- "calling xmlSchemaStreamValidateSimpleTypeValue()");
- goto internal_error;
- }
- iattr->state = XML_SCHEMAS_ATTR_INVALID_VALUE;
- /*
- * SPEC PSVI Assessment Outcome (Attribute)
- * [validity] = "invalid"
- */
- goto eval_idcs;
- }
-
- if (fixed) {
- /*
- * SPEC Attribute Locally Valid (Use) (cvc-au)
- * "For an attribute information item to be `valid`
- * with respect to an attribute use its *normalized*
- * value must match the *canonical* lexical
- * representation of the attribute use's {value
- * constraint}value, if it is present and fixed."
- *
- * VAL TODO: The requirement for the *canonical* value
- * will be removed in XML Schema 1.1.
- */
- /*
- * SPEC Attribute Locally Valid (cvc-attribute)
- * (4) "The item's *actual* value must match the *value* of
- * the {value constraint}, if it is present and fixed."
- */
- if (iattr->val == NULL) {
- /* VAL TODO: A value was not precomputed. */
- TODO
- goto eval_idcs;
- }
- if ((iattr->use != NULL) &&
- (iattr->use->defValue != NULL)) {
- if (iattr->use->defVal == NULL) {
- /* VAL TODO: A default value was not precomputed. */
- TODO
- goto eval_idcs;
- }
- iattr->vcValue = iattr->use->defValue;
- /*
- if (xmlSchemaCompareValuesWhtsp(attr->val,
- (xmlSchemaWhitespaceValueType) ws,
- attr->use->defVal,
- (xmlSchemaWhitespaceValueType) ws) != 0) {
- */
- if (! xmlSchemaAreValuesEqual(iattr->val, iattr->use->defVal))
- iattr->state = XML_SCHEMAS_ATTR_ERR_FIXED_VALUE;
- } else {
- if (iattr->decl->defVal == NULL) {
- /* VAL TODO: A default value was not precomputed. */
- TODO
- goto eval_idcs;
- }
- iattr->vcValue = iattr->decl->defValue;
- /*
- if (xmlSchemaCompareValuesWhtsp(attr->val,
- (xmlSchemaWhitespaceValueType) ws,
- attrDecl->defVal,
- (xmlSchemaWhitespaceValueType) ws) != 0) {
- */
- if (! xmlSchemaAreValuesEqual(iattr->val, iattr->decl->defVal))
- iattr->state = XML_SCHEMAS_ATTR_ERR_FIXED_VALUE;
- }
- /*
- * [validity] = "valid"
- */
- }
-eval_idcs:
- /*
- * Evaluate IDCs.
- */
- if (xpathRes) {
- if (xmlSchemaXPathProcessHistory(vctxt,
- vctxt->depth +1) == -1) {
- VERROR_INT("xmlSchemaVAttributesComplex",
- "calling xmlSchemaXPathEvaluate()");
- goto internal_error;
- }
- } else if (vctxt->xpathStates != NULL)
- xmlSchemaXPathPop(vctxt);
- }
-
- /*
- * Report errors.
- */
- for (i = 0; i < vctxt->nbAttrInfos; i++) {
- iattr = vctxt->attrInfos[i];
- if ((iattr->state == XML_SCHEMAS_ATTR_META) ||
- (iattr->state == XML_SCHEMAS_ATTR_ASSESSED) ||
- (iattr->state == XML_SCHEMAS_ATTR_WILD_SKIP) ||
- (iattr->state == XML_SCHEMAS_ATTR_WILD_LAX_NO_DECL))
- continue;
- ACTIVATE_ATTRIBUTE(iattr);
- switch (iattr->state) {
- case XML_SCHEMAS_ATTR_ERR_MISSING: {
- xmlChar *str = NULL;
- ACTIVATE_ELEM;
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_COMPLEX_TYPE_4, NULL, NULL,
- "The attribute '%s' is required but missing",
- xmlSchemaFormatQName(&str,
- iattr->decl->targetNamespace,
- iattr->decl->name),
- NULL);
- FREE_AND_NULL(str)
- break;
- }
- case XML_SCHEMAS_ATTR_ERR_NO_TYPE:
- VERROR(XML_SCHEMAV_CVC_ATTRIBUTE_2, NULL,
- "The type definition is absent");
- break;
- case XML_SCHEMAS_ATTR_ERR_FIXED_VALUE:
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_AU, NULL, NULL,
- "The value '%s' does not match the fixed "
- "value constraint '%s'",
- iattr->value, iattr->vcValue);
- break;
- case XML_SCHEMAS_ATTR_ERR_WILD_STRICT_NO_DECL:
- VERROR(XML_SCHEMAV_CVC_WILDCARD, NULL,
- "No matching global attribute declaration available, but "
- "demanded by the strict wildcard");
- break;
- case XML_SCHEMAS_ATTR_UNKNOWN:
- if (iattr->metaType)
- break;
- /*
- * MAYBE VAL TODO: One might report different error messages
- * for the following errors.
- */
- if (type->attributeWildcard == NULL) {
- xmlSchemaIllegalAttrErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_1, iattr, NULL);
- } else {
- xmlSchemaIllegalAttrErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_CVC_COMPLEX_TYPE_3_2_2, iattr, NULL);
- }
- break;
- default:
- break;
- }
- }
-
- ACTIVATE_ELEM;
- return (0);
-internal_error:
- ACTIVATE_ELEM;
- return (-1);
-}
-
-static int
-xmlSchemaValidateElemWildcard(xmlSchemaValidCtxtPtr vctxt,
- int *skip)
-{
- xmlSchemaWildcardPtr wild = (xmlSchemaWildcardPtr) vctxt->inode->decl;
- /*
- * The namespace of the element was already identified to be
- * matching the wildcard.
- */
- if ((skip == NULL) || (wild == NULL) ||
- (wild->type != XML_SCHEMA_TYPE_ANY)) {
- VERROR_INT("xmlSchemaValidateElemWildcard",
- "bad arguments");
- return (-1);
- }
- *skip = 0;
- if (wild->processContents == XML_SCHEMAS_ANY_SKIP) {
- /*
- * URGENT VAL TODO: Either we need to position the stream to the
- * next sibling, or walk the whole subtree.
- */
- *skip = 1;
- return (0);
- }
- {
- xmlSchemaElementPtr decl = NULL;
-
- decl = xmlSchemaGetElem(vctxt->schema,
- vctxt->inode->localName, vctxt->inode->nsName);
- if (decl != NULL) {
- vctxt->inode->decl = decl;
- return (0);
- }
- }
- if (wild->processContents == XML_SCHEMAS_ANY_STRICT) {
- /* VAL TODO: Change to proper error code. */
- VERROR(XML_SCHEMAV_CVC_ELT_1, NULL, /* WXS_BASIC_CAST wild */
- "No matching global element declaration available, but "
- "demanded by the strict wildcard");
- return (vctxt->err);
- }
- if (vctxt->nbAttrInfos != 0) {
- xmlSchemaAttrInfoPtr iattr;
- /*
- * SPEC Validation Rule: Schema-Validity Assessment (Element)
- * (1.2.1.2.1) - (1.2.1.2.3 )
- *
- * Use the xsi:type attribute for the type definition.
- */
- iattr = xmlSchemaGetMetaAttrInfo(vctxt,
- XML_SCHEMA_ATTR_INFO_META_XSI_TYPE);
- if (iattr != NULL) {
- if (xmlSchemaProcessXSIType(vctxt, iattr,
- &(vctxt->inode->typeDef), NULL) == -1) {
- VERROR_INT("xmlSchemaValidateElemWildcard",
- "calling xmlSchemaProcessXSIType() to "
- "process the attribute 'xsi:nil'");
- return (-1);
- }
- /*
- * Don't return an error on purpose.
- */
- return (0);
- }
- }
- /*
- * SPEC Validation Rule: Schema-Validity Assessment (Element)
- *
- * Fallback to "anyType".
- */
- vctxt->inode->typeDef =
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
- return (0);
-}
-
-/*
-* xmlSchemaCheckCOSValidDefault:
-*
-* This will be called if: not nilled, no content and a default/fixed
-* value is provided.
-*/
-
-static int
-xmlSchemaCheckCOSValidDefault(xmlSchemaValidCtxtPtr vctxt,
- const xmlChar *value,
- xmlSchemaValPtr *val)
-{
- int ret = 0;
- xmlSchemaNodeInfoPtr inode = vctxt->inode;
-
- /*
- * cos-valid-default:
- * Schema Component Constraint: Element Default Valid (Immediate)
- * For a string to be a valid default with respect to a type
- * definition the appropriate case among the following must be true:
- */
- if WXS_IS_COMPLEX(inode->typeDef) {
- /*
- * Complex type.
- *
- * SPEC (2.1) "its {content type} must be a simple type definition
- * or mixed."
- * SPEC (2.2.2) "If the {content type} is mixed, then the {content
- * type}'s particle must be `emptiable` as defined by
- * Particle Emptiable ($3.9.6)."
- */
- if ((! WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) &&
- ((! WXS_HAS_MIXED_CONTENT(inode->typeDef)) ||
- (! WXS_EMPTIABLE(inode->typeDef)))) {
- ret = XML_SCHEMAP_COS_VALID_DEFAULT_2_1;
- /* NOTE that this covers (2.2.2) as well. */
- VERROR(ret, NULL,
- "For a string to be a valid default, the type definition "
- "must be a simple type or a complex type with simple content "
- "or mixed content and a particle emptiable");
- return(ret);
- }
- }
- /*
- * 1 If the type definition is a simple type definition, then the string
- * must be `valid` with respect to that definition as defined by String
- * Valid ($3.14.4).
- *
- * AND
- *
- * 2.2.1 If the {content type} is a simple type definition, then the
- * string must be `valid` with respect to that simple type definition
- * as defined by String Valid ($3.14.4).
- */
- if (WXS_IS_SIMPLE(inode->typeDef)) {
-
- ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST vctxt,
- NULL, inode->typeDef, value, val, 1, 1, 0);
-
- } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
-
- ret = xmlSchemaVCheckCVCSimpleType(ACTXT_CAST vctxt,
- NULL, inode->typeDef->contentTypeDef, value, val, 1, 1, 0);
- }
- if (ret < 0) {
- VERROR_INT("xmlSchemaCheckCOSValidDefault",
- "calling xmlSchemaVCheckCVCSimpleType()");
- }
- return (ret);
-}
-
-static void
-xmlSchemaVContentModelCallback(xmlSchemaValidCtxtPtr vctxt ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED,
- xmlSchemaElementPtr item,
- xmlSchemaNodeInfoPtr inode)
-{
- inode->decl = item;
-#ifdef DEBUG_CONTENT
- {
- xmlChar *str = NULL;
-
- if (item->type == XML_SCHEMA_TYPE_ELEMENT) {
- xmlGenericError(xmlGenericErrorContext,
- "AUTOMATON callback for '%s' [declaration]\n",
- xmlSchemaFormatQName(&str,
- inode->localName, inode->nsName));
- } else {
- xmlGenericError(xmlGenericErrorContext,
- "AUTOMATON callback for '%s' [wildcard]\n",
- xmlSchemaFormatQName(&str,
- inode->localName, inode->nsName));
-
- }
- FREE_AND_NULL(str)
- }
-#endif
-}
-
-static int
-xmlSchemaValidatorPushElem(xmlSchemaValidCtxtPtr vctxt)
-{
- vctxt->inode = xmlSchemaGetFreshElemInfo(vctxt);
- if (vctxt->inode == NULL) {
- VERROR_INT("xmlSchemaValidatorPushElem",
- "calling xmlSchemaGetFreshElemInfo()");
- return (-1);
- }
- vctxt->nbAttrInfos = 0;
- return (0);
-}
-
-static int
-xmlSchemaVCheckINodeDataType(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaNodeInfoPtr inode,
- xmlSchemaTypePtr type,
- const xmlChar *value)
-{
- if (inode->flags & XML_SCHEMA_NODE_INFO_VALUE_NEEDED)
- return (xmlSchemaVCheckCVCSimpleType(
- ACTXT_CAST vctxt, NULL,
- type, value, &(inode->val), 1, 1, 0));
- else
- return (xmlSchemaVCheckCVCSimpleType(
- ACTXT_CAST vctxt, NULL,
- type, value, NULL, 1, 0, 0));
-}
-
-
-
-/*
-* Process END of element.
-*/
-static int
-xmlSchemaValidatorPopElem(xmlSchemaValidCtxtPtr vctxt)
-{
- int ret = 0;
- xmlSchemaNodeInfoPtr inode = vctxt->inode;
-
- if (vctxt->nbAttrInfos != 0)
- xmlSchemaClearAttrInfos(vctxt);
- if (inode->flags & XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED) {
- /*
- * This element was not expected;
- * we will not validate child elements of broken parents.
- * Skip validation of all content of the parent.
- */
- vctxt->skipDepth = vctxt->depth -1;
- goto end_elem;
- }
- if ((inode->typeDef == NULL) ||
- (inode->flags & XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE)) {
- /*
- * 1. the type definition might be missing if the element was
- * error prone
- * 2. it might be abstract.
- */
- goto end_elem;
- }
- /*
- * Check the content model.
- */
- if ((inode->typeDef->contentType == XML_SCHEMA_CONTENT_MIXED) ||
- (inode->typeDef->contentType == XML_SCHEMA_CONTENT_ELEMENTS)) {
-
- /*
- * Workaround for "anyType".
- */
- if (inode->typeDef->builtInType == XML_SCHEMAS_ANYTYPE)
- goto character_content;
-
- if ((inode->flags & XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT) == 0) {
- xmlChar *values[10];
- int terminal, nbval = 10, nbneg;
-
- if (inode->regexCtxt == NULL) {
- /*
- * Create the regex context.
- */
- inode->regexCtxt =
- xmlRegNewExecCtxt(inode->typeDef->contModel,
- (xmlRegExecCallbacks) xmlSchemaVContentModelCallback,
- vctxt);
- if (inode->regexCtxt == NULL) {
- VERROR_INT("xmlSchemaValidatorPopElem",
- "failed to create a regex context");
- goto internal_error;
- }
-#ifdef DEBUG_AUTOMATA
- xmlGenericError(xmlGenericErrorContext,
- "AUTOMATON create on '%s'\n", inode->localName);
-#endif
- }
-
- /*
- * Do not check further content if the node has been nilled
- */
- if (INODE_NILLED(inode)) {
- ret = 0;
-#ifdef DEBUG_AUTOMATA
- xmlGenericError(xmlGenericErrorContext,
- "AUTOMATON succeeded on nilled '%s'\n",
- inode->localName);
-#endif
- goto skip_nilled;
- }
-
- /*
- * Get hold of the still expected content, since a further
- * call to xmlRegExecPushString() will loose this information.
- */
- xmlRegExecNextValues(inode->regexCtxt,
- &nbval, &nbneg, &values[0], &terminal);
- ret = xmlRegExecPushString(inode->regexCtxt, NULL, NULL);
- if ((ret<0) || ((ret==0) && (!INODE_NILLED(inode)))) {
- /*
- * Still missing something.
- */
- ret = 1;
- inode->flags |=
- XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT;
- xmlSchemaComplexTypeErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_ELEMENT_CONTENT, NULL, NULL,
- "Missing child element(s)",
- nbval, nbneg, values);
-#ifdef DEBUG_AUTOMATA
- xmlGenericError(xmlGenericErrorContext,
- "AUTOMATON missing ERROR on '%s'\n",
- inode->localName);
-#endif
- } else {
- /*
- * Content model is satisfied.
- */
- ret = 0;
-#ifdef DEBUG_AUTOMATA
- xmlGenericError(xmlGenericErrorContext,
- "AUTOMATON succeeded on '%s'\n",
- inode->localName);
-#endif
- }
-
- }
- }
-
-skip_nilled:
-
- if (inode->typeDef->contentType == XML_SCHEMA_CONTENT_ELEMENTS)
- goto end_elem;
-
-character_content:
-
- if (vctxt->value != NULL) {
- xmlSchemaFreeValue(vctxt->value);
- vctxt->value = NULL;
- }
- /*
- * Check character content.
- */
- if (inode->decl == NULL) {
- /*
- * Speedup if no declaration exists.
- */
- if (WXS_IS_SIMPLE(inode->typeDef)) {
- ret = xmlSchemaVCheckINodeDataType(vctxt,
- inode, inode->typeDef, inode->value);
- } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
- ret = xmlSchemaVCheckINodeDataType(vctxt,
- inode, inode->typeDef->contentTypeDef,
- inode->value);
- }
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidatorPopElem",
- "calling xmlSchemaVCheckCVCSimpleType()");
- goto internal_error;
- }
- goto end_elem;
- }
- /*
- * cvc-elt (3.3.4) : 5
- * The appropriate case among the following must be true:
- */
- /*
- * cvc-elt (3.3.4) : 5.1
- * If the declaration has a {value constraint},
- * the item has neither element nor character [children] and
- * clause 3.2 has not applied, then all of the following must be true:
- */
- if ((inode->decl->value != NULL) &&
- (inode->flags & XML_SCHEMA_ELEM_INFO_EMPTY) &&
- (! INODE_NILLED(inode))) {
- /*
- * cvc-elt (3.3.4) : 5.1.1
- * If the `actual type definition` is a `local type definition`
- * then the canonical lexical representation of the {value constraint}
- * value must be a valid default for the `actual type definition` as
- * defined in Element Default Valid (Immediate) ($3.3.6).
- */
- /*
- * NOTE: 'local' above means types acquired by xsi:type.
- * NOTE: Although the *canonical* value is stated, it is not
- * relevant if canonical or not. Additionally XML Schema 1.1
- * will removed this requirement as well.
- */
- if (inode->flags & XML_SCHEMA_ELEM_INFO_LOCAL_TYPE) {
-
- ret = xmlSchemaCheckCOSValidDefault(vctxt,
- inode->decl->value, &(inode->val));
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidatorPopElem",
- "calling xmlSchemaCheckCOSValidDefault()");
- goto internal_error;
- }
- goto end_elem;
- }
- /*
- * Stop here, to avoid redundant validation of the value
- * (see following).
- */
- goto default_psvi;
- }
- /*
- * cvc-elt (3.3.4) : 5.1.2
- * The element information item with the canonical lexical
- * representation of the {value constraint} value used as its
- * `normalized value` must be `valid` with respect to the
- * `actual type definition` as defined by Element Locally Valid (Type)
- * ($3.3.4).
- */
- if (WXS_IS_SIMPLE(inode->typeDef)) {
- ret = xmlSchemaVCheckINodeDataType(vctxt,
- inode, inode->typeDef, inode->decl->value);
- } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
- ret = xmlSchemaVCheckINodeDataType(vctxt,
- inode, inode->typeDef->contentTypeDef,
- inode->decl->value);
- }
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidatorPopElem",
- "calling xmlSchemaVCheckCVCSimpleType()");
- goto internal_error;
- }
- goto end_elem;
- }
-
-default_psvi:
- /*
- * PSVI: Create a text node on the instance element.
- */
- if ((vctxt->options & XML_SCHEMA_VAL_VC_I_CREATE) &&
- (inode->node != NULL)) {
- xmlNodePtr textChild;
- xmlChar *normValue;
- /*
- * VAL TODO: Normalize the value.
- */
- normValue = xmlSchemaNormalizeValue(inode->typeDef,
- inode->decl->value);
- if (normValue != NULL) {
- textChild = xmlNewText(BAD_CAST normValue);
- xmlFree(normValue);
- } else
- textChild = xmlNewText(inode->decl->value);
- if (textChild == NULL) {
- VERROR_INT("xmlSchemaValidatorPopElem",
- "calling xmlNewText()");
- goto internal_error;
- } else
- xmlAddChild(inode->node, textChild);
- }
-
- } else if (! INODE_NILLED(inode)) {
- /*
- * 5.2.1 The element information item must be `valid` with respect
- * to the `actual type definition` as defined by Element Locally
- * Valid (Type) ($3.3.4).
- */
- if (WXS_IS_SIMPLE(inode->typeDef)) {
- /*
- * SPEC (cvc-type) (3.1)
- * "If the type definition is a simple type definition, ..."
- * (3.1.3) "If clause 3.2 of Element Locally Valid
- * (Element) ($3.3.4) did not apply, then the `normalized value`
- * must be `valid` with respect to the type definition as defined
- * by String Valid ($3.14.4).
- */
- ret = xmlSchemaVCheckINodeDataType(vctxt,
- inode, inode->typeDef, inode->value);
- } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
- /*
- * SPEC (cvc-type) (3.2) "If the type definition is a complex type
- * definition, then the element information item must be
- * `valid` with respect to the type definition as per
- * Element Locally Valid (Complex Type) ($3.4.4);"
- *
- * SPEC (cvc-complex-type) (2.2)
- * "If the {content type} is a simple type definition, ...
- * the `normalized value` of the element information item is
- * `valid` with respect to that simple type definition as
- * defined by String Valid ($3.14.4)."
- */
- ret = xmlSchemaVCheckINodeDataType(vctxt,
- inode, inode->typeDef->contentTypeDef, inode->value);
- }
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidatorPopElem",
- "calling xmlSchemaVCheckCVCSimpleType()");
- goto internal_error;
- }
- goto end_elem;
- }
- /*
- * 5.2.2 If there is a fixed {value constraint} and clause 3.2 has
- * not applied, all of the following must be true:
- */
- if ((inode->decl->value != NULL) &&
- (inode->decl->flags & XML_SCHEMAS_ELEM_FIXED)) {
-
- /*
- * TODO: We will need a computed value, when comparison is
- * done on computed values.
- */
- /*
- * 5.2.2.1 The element information item must have no element
- * information item [children].
- */
- if (inode->flags &
- XML_SCHEMA_ELEM_INFO_HAS_ELEM_CONTENT) {
- ret = XML_SCHEMAV_CVC_ELT_5_2_2_1;
- VERROR(ret, NULL,
- "The content must not containt element nodes since "
- "there is a fixed value constraint");
- goto end_elem;
- } else {
- /*
- * 5.2.2.2 The appropriate case among the following must
- * be true:
- */
- if (WXS_HAS_MIXED_CONTENT(inode->typeDef)) {
- /*
- * 5.2.2.2.1 If the {content type} of the `actual type
- * definition` is mixed, then the *initial value* of the
- * item must match the canonical lexical representation
- * of the {value constraint} value.
- *
- * ... the *initial value* of an element information
- * item is the string composed of, in order, the
- * [character code] of each character information item in
- * the [children] of that element information item.
- */
- if (! xmlStrEqual(inode->value, inode->decl->value)){
- /*
- * VAL TODO: Report invalid & expected values as well.
- * VAL TODO: Implement the canonical stuff.
- */
- ret = XML_SCHEMAV_CVC_ELT_5_2_2_2_1;
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- ret, NULL, NULL,
- "The initial value '%s' does not match the fixed "
- "value constraint '%s'",
- inode->value, inode->decl->value);
- goto end_elem;
- }
- } else if (WXS_HAS_SIMPLE_CONTENT(inode->typeDef)) {
- /*
- * 5.2.2.2.2 If the {content type} of the `actual type
- * definition` is a simple type definition, then the
- * *actual value* of the item must match the canonical
- * lexical representation of the {value constraint} value.
- */
- /*
- * VAL TODO: *actual value* is the normalized value, impl.
- * this.
- * VAL TODO: Report invalid & expected values as well.
- * VAL TODO: Implement a comparison with the computed values.
- */
- if (! xmlStrEqual(inode->value,
- inode->decl->value)) {
- ret = XML_SCHEMAV_CVC_ELT_5_2_2_2_2;
- xmlSchemaCustomErr(ACTXT_CAST vctxt,
- ret, NULL, NULL,
- "The actual value '%s' does not match the fixed "
- "value constraint '%s'",
- inode->value,
- inode->decl->value);
- goto end_elem;
- }
- }
- }
- }
- }
-
-end_elem:
- if (vctxt->depth < 0) {
- /* TODO: raise error? */
- return (0);
- }
- if (vctxt->depth == vctxt->skipDepth)
- vctxt->skipDepth = -1;
- /*
- * Evaluate the history of XPath state objects.
- */
- if (inode->appliedXPath &&
- (xmlSchemaXPathProcessHistory(vctxt, vctxt->depth) == -1))
- goto internal_error;
- /*
- * MAYBE TODO:
- * SPEC (6) "The element information item must be `valid` with
- * respect to each of the {identity-constraint definitions} as per
- * Identity-constraint Satisfied ($3.11.4)."
- */
- /*
- * PSVI TODO: If we expose IDC node-tables via PSVI then the tables
- * need to be built in any case.
- * We will currently build IDC node-tables and bubble them only if
- * keyrefs do exist.
- */
-
- /*
- * Add the current IDC target-nodes to the IDC node-tables.
- */
- if ((inode->idcMatchers != NULL) &&
- (vctxt->hasKeyrefs || vctxt->createIDCNodeTables))
- {
- if (xmlSchemaIDCFillNodeTables(vctxt, inode) == -1)
- goto internal_error;
- }
- /*
- * Validate IDC keyrefs.
- */
- if (vctxt->inode->hasKeyrefs)
- if (xmlSchemaCheckCVCIDCKeyRef(vctxt) == -1)
- goto internal_error;
- /*
- * Merge/free the IDC table.
- */
- if (inode->idcTable != NULL) {
-#ifdef DEBUG_IDC_NODE_TABLE
- xmlSchemaDebugDumpIDCTable(stdout,
- inode->nsName,
- inode->localName,
- inode->idcTable);
-#endif
- if ((vctxt->depth > 0) &&
- (vctxt->hasKeyrefs || vctxt->createIDCNodeTables))
- {
- /*
- * Merge the IDC node table with the table of the parent node.
- */
- if (xmlSchemaBubbleIDCNodeTables(vctxt) == -1)
- goto internal_error;
- }
- }
- /*
- * Clear the current ielem.
- * VAL TODO: Don't free the PSVI IDC tables if they are
- * requested for the PSVI.
- */
- xmlSchemaClearElemInfo(vctxt, inode);
- /*
- * Skip further processing if we are on the validation root.
- */
- if (vctxt->depth == 0) {
- vctxt->depth--;
- vctxt->inode = NULL;
- return (0);
- }
- /*
- * Reset the keyrefDepth if needed.
- */
- if (vctxt->aidcs != NULL) {
- xmlSchemaIDCAugPtr aidc = vctxt->aidcs;
- do {
- if (aidc->keyrefDepth == vctxt->depth) {
- /*
- * A 'keyrefDepth' of a key/unique IDC matches the current
- * depth, this means that we are leaving the scope of the
- * top-most keyref IDC which refers to this IDC.
- */
- aidc->keyrefDepth = -1;
- }
- aidc = aidc->next;
- } while (aidc != NULL);
- }
- vctxt->depth--;
- vctxt->inode = vctxt->elemInfos[vctxt->depth];
- /*
- * VAL TODO: 7 If the element information item is the `validation root`, it must be
- * `valid` per Validation Root Valid (ID/IDREF) ($3.3.4).
- */
- return (ret);
-
-internal_error:
- vctxt->err = -1;
- return (-1);
-}
-
-/*
-* 3.4.4 Complex Type Definition Validation Rules
-* Validation Rule: Element Locally Valid (Complex Type) (cvc-complex-type)
-*/
-static int
-xmlSchemaValidateChildElem(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlSchemaNodeInfoPtr pielem;
- xmlSchemaTypePtr ptype;
- int ret = 0;
-
- if (vctxt->depth <= 0) {
- VERROR_INT("xmlSchemaValidateChildElem",
- "not intended for the validation root");
- return (-1);
- }
- pielem = vctxt->elemInfos[vctxt->depth -1];
- if (pielem->flags & XML_SCHEMA_ELEM_INFO_EMPTY)
- pielem->flags ^= XML_SCHEMA_ELEM_INFO_EMPTY;
- /*
- * Handle 'nilled' elements.
- */
- if (INODE_NILLED(pielem)) {
- /*
- * SPEC (cvc-elt) (3.3.4) : (3.2.1)
- */
- ACTIVATE_PARENT_ELEM;
- ret = XML_SCHEMAV_CVC_ELT_3_2_1;
- VERROR(ret, NULL,
- "Neither character nor element content is allowed, "
- "because the element was 'nilled'");
- ACTIVATE_ELEM;
- goto unexpected_elem;
- }
-
- ptype = pielem->typeDef;
-
- if (ptype->builtInType == XML_SCHEMAS_ANYTYPE) {
- /*
- * Workaround for "anyType": we have currently no content model
- * assigned for "anyType", so handle it explicitely.
- * "anyType" has an unbounded, lax "any" wildcard.
- */
- vctxt->inode->decl = xmlSchemaGetElem(vctxt->schema,
- vctxt->inode->localName,
- vctxt->inode->nsName);
-
- if (vctxt->inode->decl == NULL) {
- xmlSchemaAttrInfoPtr iattr;
- /*
- * Process "xsi:type".
- * SPEC (cvc-assess-elt) (1.2.1.2.1) - (1.2.1.2.3)
- */
- iattr = xmlSchemaGetMetaAttrInfo(vctxt,
- XML_SCHEMA_ATTR_INFO_META_XSI_TYPE);
- if (iattr != NULL) {
- ret = xmlSchemaProcessXSIType(vctxt, iattr,
- &(vctxt->inode->typeDef), NULL);
- if (ret != 0) {
- if (ret == -1) {
- VERROR_INT("xmlSchemaValidateChildElem",
- "calling xmlSchemaProcessXSIType() to "
- "process the attribute 'xsi:nil'");
- return (-1);
- }
- return (ret);
- }
- } else {
- /*
- * Fallback to "anyType".
- *
- * SPEC (cvc-assess-elt)
- * "If the item cannot be `strictly assessed`, [...]
- * an element information item's schema validity may be laxly
- * assessed if its `context-determined declaration` is not
- * skip by `validating` with respect to the `ur-type
- * definition` as per Element Locally Valid (Type) ($3.3.4)."
- */
- vctxt->inode->typeDef =
- xmlSchemaGetBuiltInType(XML_SCHEMAS_ANYTYPE);
- }
- }
- return (0);
- }
-
- switch (ptype->contentType) {
- case XML_SCHEMA_CONTENT_EMPTY:
- /*
- * SPEC (2.1) "If the {content type} is empty, then the
- * element information item has no character or element
- * information item [children]."
- */
- ACTIVATE_PARENT_ELEM
- ret = XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1;
- VERROR(ret, NULL,
- "Element content is not allowed, "
- "because the content type is empty");
- ACTIVATE_ELEM
- goto unexpected_elem;
- break;
-
- case XML_SCHEMA_CONTENT_MIXED:
- case XML_SCHEMA_CONTENT_ELEMENTS: {
- xmlRegExecCtxtPtr regexCtxt;
- xmlChar *values[10];
- int terminal, nbval = 10, nbneg;
-
- /* VAL TODO: Optimized "anyType" validation.*/
-
- if (ptype->contModel == NULL) {
- VERROR_INT("xmlSchemaValidateChildElem",
- "type has elem content but no content model");
- return (-1);
- }
- /*
- * Safety belf for evaluation if the cont. model was already
- * examined to be invalid.
- */
- if (pielem->flags & XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT) {
- VERROR_INT("xmlSchemaValidateChildElem",
- "validating elem, but elem content is already invalid");
- return (-1);
- }
-
- regexCtxt = pielem->regexCtxt;
- if (regexCtxt == NULL) {
- /*
- * Create the regex context.
- */
- regexCtxt = xmlRegNewExecCtxt(ptype->contModel,
- (xmlRegExecCallbacks) xmlSchemaVContentModelCallback,
- vctxt);
- if (regexCtxt == NULL) {
- VERROR_INT("xmlSchemaValidateChildElem",
- "failed to create a regex context");
- return (-1);
- }
- pielem->regexCtxt = regexCtxt;
-#ifdef DEBUG_AUTOMATA
- xmlGenericError(xmlGenericErrorContext, "AUTOMATA create on '%s'\n",
- pielem->localName);
-#endif
- }
-
- /*
- * SPEC (2.4) "If the {content type} is element-only or mixed,
- * then the sequence of the element information item's
- * element information item [children], if any, taken in
- * order, is `valid` with respect to the {content type}'s
- * particle, as defined in Element Sequence Locally Valid
- * (Particle) ($3.9.4)."
- */
- ret = xmlRegExecPushString2(regexCtxt,
- vctxt->inode->localName,
- vctxt->inode->nsName,
- vctxt->inode);
-#ifdef DEBUG_AUTOMATA
- if (ret < 0)
- xmlGenericError(xmlGenericErrorContext,
- "AUTOMATON push ERROR for '%s' on '%s'\n",
- vctxt->inode->localName, pielem->localName);
- else
- xmlGenericError(xmlGenericErrorContext,
- "AUTOMATON push OK for '%s' on '%s'\n",
- vctxt->inode->localName, pielem->localName);
-#endif
- if (vctxt->err == XML_SCHEMAV_INTERNAL) {
- VERROR_INT("xmlSchemaValidateChildElem",
- "calling xmlRegExecPushString2()");
- return (-1);
- }
- if (ret < 0) {
- xmlRegExecErrInfo(regexCtxt, NULL, &nbval, &nbneg,
- &values[0], &terminal);
- xmlSchemaComplexTypeErr(ACTXT_CAST vctxt,
- XML_SCHEMAV_ELEMENT_CONTENT, NULL,NULL,
- "This element is not expected",
- nbval, nbneg, values);
- ret = vctxt->err;
- goto unexpected_elem;
- } else
- ret = 0;
- }
- break;
- case XML_SCHEMA_CONTENT_SIMPLE:
- case XML_SCHEMA_CONTENT_BASIC:
- ACTIVATE_PARENT_ELEM
- if (WXS_IS_COMPLEX(ptype)) {
- /*
- * SPEC (cvc-complex-type) (2.2)
- * "If the {content type} is a simple type definition, then
- * the element information item has no element information
- * item [children], ..."
- */
- ret = XML_SCHEMAV_CVC_COMPLEX_TYPE_2_2;
- VERROR(ret, NULL, "Element content is not allowed, "
- "because the content type is a simple type definition");
- } else {
- /*
- * SPEC (cvc-type) (3.1.2) "The element information item must
- * have no element information item [children]."
- */
- ret = XML_SCHEMAV_CVC_TYPE_3_1_2;
- VERROR(ret, NULL, "Element content is not allowed, "
- "because the type definition is simple");
- }
- ACTIVATE_ELEM
- ret = vctxt->err;
- goto unexpected_elem;
- break;
-
- default:
- break;
- }
- return (ret);
-unexpected_elem:
- /*
- * Pop this element and set the skipDepth to skip
- * all further content of the parent element.
- */
- vctxt->skipDepth = vctxt->depth;
- vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_NOT_EXPECTED;
- pielem->flags |= XML_SCHEMA_ELEM_INFO_ERR_BAD_CONTENT;
- return (ret);
-}
-
-#define XML_SCHEMA_PUSH_TEXT_PERSIST 1
-#define XML_SCHEMA_PUSH_TEXT_CREATED 2
-#define XML_SCHEMA_PUSH_TEXT_VOLATILE 3
-
-static int
-xmlSchemaVPushText(xmlSchemaValidCtxtPtr vctxt,
- int nodeType, const xmlChar *value, int len,
- int mode, int *consumed)
-{
- /*
- * Unfortunately we have to duplicate the text sometimes.
- * OPTIMIZE: Maybe we could skip it, if:
- * 1. content type is simple
- * 2. whitespace is "collapse"
- * 3. it consists of whitespace only
- *
- * Process character content.
- */
- if (consumed != NULL)
- *consumed = 0;
- if (INODE_NILLED(vctxt->inode)) {
- /*
- * SPEC cvc-elt (3.3.4 - 3.2.1)
- * "The element information item must have no character or
- * element information item [children]."
- */
- VERROR(XML_SCHEMAV_CVC_ELT_3_2_1, NULL,
- "Neither character nor element content is allowed "
- "because the element is 'nilled'");
- return (vctxt->err);
- }
- /*
- * SPEC (2.1) "If the {content type} is empty, then the
- * element information item has no character or element
- * information item [children]."
- */
- if (vctxt->inode->typeDef->contentType ==
- XML_SCHEMA_CONTENT_EMPTY) {
- VERROR(XML_SCHEMAV_CVC_COMPLEX_TYPE_2_1, NULL,
- "Character content is not allowed, "
- "because the content type is empty");
- return (vctxt->err);
- }
-
- if (vctxt->inode->typeDef->contentType ==
- XML_SCHEMA_CONTENT_ELEMENTS) {
- if ((nodeType != XML_TEXT_NODE) ||
- (! xmlSchemaIsBlank((xmlChar *) value, len))) {
- /*
- * SPEC cvc-complex-type (2.3)
- * "If the {content type} is element-only, then the
- * element information item has no character information
- * item [children] other than those whose [character
- * code] is defined as a white space in [XML 1.0 (Second
- * Edition)]."
- */
- VERROR(XML_SCHEMAV_CVC_COMPLEX_TYPE_2_3, NULL,
- "Character content other than whitespace is not allowed "
- "because the content type is 'element-only'");
- return (vctxt->err);
- }
- return (0);
- }
-
- if ((value == NULL) || (value[0] == 0))
- return (0);
- /*
- * Save the value.
- * NOTE that even if the content type is *mixed*, we need the
- * *initial value* for default/fixed value constraints.
- */
- if ((vctxt->inode->typeDef->contentType == XML_SCHEMA_CONTENT_MIXED) &&
- ((vctxt->inode->decl == NULL) ||
- (vctxt->inode->decl->value == NULL)))
- return (0);
-
- if (vctxt->inode->value == NULL) {
- /*
- * Set the value.
- */
- switch (mode) {
- case XML_SCHEMA_PUSH_TEXT_PERSIST:
- /*
- * When working on a tree.
- */
- vctxt->inode->value = value;
- break;
- case XML_SCHEMA_PUSH_TEXT_CREATED:
- /*
- * When working with the reader.
- * The value will be freed by the element info.
- */
- vctxt->inode->value = value;
- if (consumed != NULL)
- *consumed = 1;
- vctxt->inode->flags |=
- XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES;
- break;
- case XML_SCHEMA_PUSH_TEXT_VOLATILE:
- /*
- * When working with SAX.
- * The value will be freed by the element info.
- */
- if (len != -1)
- vctxt->inode->value = BAD_CAST xmlStrndup(value, len);
- else
- vctxt->inode->value = BAD_CAST xmlStrdup(value);
- vctxt->inode->flags |=
- XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES;
- break;
- default:
- break;
- }
- } else {
- if (len < 0)
- len = xmlStrlen(value);
- /*
- * Concat the value.
- */
- if (vctxt->inode->flags & XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES) {
- vctxt->inode->value = BAD_CAST xmlStrncat(
- (xmlChar *) vctxt->inode->value, value, len);
- } else {
- vctxt->inode->value =
- BAD_CAST xmlStrncatNew(vctxt->inode->value, value, len);
- vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_FLAG_OWNED_VALUES;
- }
- }
-
- return (0);
-}
-
-static int
-xmlSchemaValidateElem(xmlSchemaValidCtxtPtr vctxt)
-{
- int ret = 0;
-
- if ((vctxt->skipDepth != -1) &&
- (vctxt->depth >= vctxt->skipDepth)) {
- VERROR_INT("xmlSchemaValidateElem",
- "in skip-state");
- goto internal_error;
- }
- if (vctxt->xsiAssemble) {
- /*
- * We will stop validation if there was an error during
- * dynamic schema construction.
- * Note that we simply set @skipDepth to 0, this could
- * mean that a streaming document via SAX would be
- * still read to the end but it won't be validated any more.
- * TODO: If we are sure how to stop the validation at once
- * for all input scenarios, then this should be changed to
- * instantly stop the validation.
- */
- ret = xmlSchemaAssembleByXSI(vctxt);
- if (ret != 0) {
- if (ret == -1)
- goto internal_error;
- vctxt->skipDepth = 0;
- return(ret);
- }
- /*
- * Augment the IDC definitions for the main schema and all imported ones
- * NOTE: main schema is the first in the imported list
- */
- xmlHashScan(vctxt->schema->schemasImports,(xmlHashScanner)xmlSchemaAugmentImportedIDC, vctxt);
- }
- if (vctxt->depth > 0) {
- /*
- * Validate this element against the content model
- * of the parent.
- */
- ret = xmlSchemaValidateChildElem(vctxt);
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidateElem",
- "calling xmlSchemaStreamValidateChildElement()");
- goto internal_error;
- }
- goto exit;
- }
- if (vctxt->depth == vctxt->skipDepth)
- goto exit;
- if ((vctxt->inode->decl == NULL) &&
- (vctxt->inode->typeDef == NULL)) {
- VERROR_INT("xmlSchemaValidateElem",
- "the child element was valid but neither the "
- "declaration nor the type was set");
- goto internal_error;
- }
- } else {
- /*
- * Get the declaration of the validation root.
- */
- vctxt->inode->decl = xmlSchemaGetElem(vctxt->schema,
- vctxt->inode->localName,
- vctxt->inode->nsName);
- if (vctxt->inode->decl == NULL) {
- ret = XML_SCHEMAV_CVC_ELT_1;
- VERROR(ret, NULL,
- "No matching global declaration available "
- "for the validation root");
- goto exit;
- }
- }
-
- if (vctxt->inode->decl == NULL)
- goto type_validation;
-
- if (vctxt->inode->decl->type == XML_SCHEMA_TYPE_ANY) {
- int skip;
- /*
- * Wildcards.
- */
- ret = xmlSchemaValidateElemWildcard(vctxt, &skip);
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidateElem",
- "calling xmlSchemaValidateElemWildcard()");
- goto internal_error;
- }
- goto exit;
- }
- if (skip) {
- vctxt->skipDepth = vctxt->depth;
- goto exit;
- }
- /*
- * The declaration might be set by the wildcard validation,
- * when the processContents is "lax" or "strict".
- */
- if (vctxt->inode->decl->type != XML_SCHEMA_TYPE_ELEMENT) {
- /*
- * Clear the "decl" field to not confuse further processing.
- */
- vctxt->inode->decl = NULL;
- goto type_validation;
- }
- }
- /*
- * Validate against the declaration.
- */
- ret = xmlSchemaValidateElemDecl(vctxt);
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaValidateElem",
- "calling xmlSchemaValidateElemDecl()");
- goto internal_error;
- }
- goto exit;
- }
- /*
- * Validate against the type definition.
- */
-type_validation:
-
- if (vctxt->inode->typeDef == NULL) {
- vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE;
- ret = XML_SCHEMAV_CVC_TYPE_1;
- VERROR(ret, NULL,
- "The type definition is absent");
- goto exit;
- }
- if (vctxt->inode->typeDef->flags & XML_SCHEMAS_TYPE_ABSTRACT) {
- vctxt->inode->flags |= XML_SCHEMA_NODE_INFO_ERR_BAD_TYPE;
- ret = XML_SCHEMAV_CVC_TYPE_2;
- VERROR(ret, NULL,
- "The type definition is abstract");
- goto exit;
- }
- /*
- * Evaluate IDCs. Do it here, since new IDC matchers are registered
- * during validation against the declaration. This must be done
- * _before_ attribute validation.
- */
- if (vctxt->xpathStates != NULL) {
- ret = xmlSchemaXPathEvaluate(vctxt, XML_ELEMENT_NODE);
- vctxt->inode->appliedXPath = 1;
- if (ret == -1) {
- VERROR_INT("xmlSchemaValidateElem",
- "calling xmlSchemaXPathEvaluate()");
- goto internal_error;
- }
- }
- /*
- * Validate attributes.
- */
- if (WXS_IS_COMPLEX(vctxt->inode->typeDef)) {
- if ((vctxt->nbAttrInfos != 0) ||
- (vctxt->inode->typeDef->attrUses != NULL)) {
-
- ret = xmlSchemaVAttributesComplex(vctxt);
- }
- } else if (vctxt->nbAttrInfos != 0) {
-
- ret = xmlSchemaVAttributesSimple(vctxt);
- }
- /*
- * Clear registered attributes.
- */
- if (vctxt->nbAttrInfos != 0)
- xmlSchemaClearAttrInfos(vctxt);
- if (ret == -1) {
- VERROR_INT("xmlSchemaValidateElem",
- "calling attributes validation");
- goto internal_error;
- }
- /*
- * Don't return an error if attributes are invalid on purpose.
- */
- ret = 0;
-
-exit:
- if (ret != 0)
- vctxt->skipDepth = vctxt->depth;
- return (ret);
-internal_error:
- return (-1);
-}
-
-#ifdef XML_SCHEMA_READER_ENABLED
-static int
-xmlSchemaVReaderWalk(xmlSchemaValidCtxtPtr vctxt)
-{
- const int WHTSP = 13, SIGN_WHTSP = 14, END_ELEM = 15;
- int depth, nodeType, ret = 0, consumed;
- xmlSchemaNodeInfoPtr ielem;
-
- vctxt->depth = -1;
- ret = xmlTextReaderRead(vctxt->reader);
- /*
- * Move to the document element.
- */
- while (ret == 1) {
- nodeType = xmlTextReaderNodeType(vctxt->reader);
- if (nodeType == XML_ELEMENT_NODE)
- goto root_found;
- ret = xmlTextReaderRead(vctxt->reader);
- }
- goto exit;
-
-root_found:
-
- do {
- depth = xmlTextReaderDepth(vctxt->reader);
- nodeType = xmlTextReaderNodeType(vctxt->reader);
-
- if (nodeType == XML_ELEMENT_NODE) {
-
- vctxt->depth++;
- if (xmlSchemaValidatorPushElem(vctxt) == -1) {
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlSchemaValidatorPushElem()");
- goto internal_error;
- }
- ielem = vctxt->inode;
- ielem->localName = xmlTextReaderLocalName(vctxt->reader);
- ielem->nsName = xmlTextReaderNamespaceUri(vctxt->reader);
- ielem->flags |= XML_SCHEMA_NODE_INFO_FLAG_OWNED_NAMES;
- /*
- * Is the element empty?
- */
- ret = xmlTextReaderIsEmptyElement(vctxt->reader);
- if (ret == -1) {
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlTextReaderIsEmptyElement()");
- goto internal_error;
- }
- if (ret) {
- ielem->flags |= XML_SCHEMA_ELEM_INFO_EMPTY;
- }
- /*
- * Register attributes.
- */
- vctxt->nbAttrInfos = 0;
- ret = xmlTextReaderMoveToFirstAttribute(vctxt->reader);
- if (ret == -1) {
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlTextReaderMoveToFirstAttribute()");
- goto internal_error;
- }
- if (ret == 1) {
- do {
- /*
- * VAL TODO: How do we know that the reader works on a
- * node tree, to be able to pass a node here?
- */
- if (xmlSchemaValidatorPushAttribute(vctxt, NULL,
- (const xmlChar *) xmlTextReaderLocalName(vctxt->reader),
- xmlTextReaderNamespaceUri(vctxt->reader), 1,
- xmlTextReaderValue(vctxt->reader), 1) == -1) {
-
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlSchemaValidatorPushAttribute()");
- goto internal_error;
- }
- ret = xmlTextReaderMoveToNextAttribute(vctxt->reader);
- if (ret == -1) {
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlTextReaderMoveToFirstAttribute()");
- goto internal_error;
- }
- } while (ret == 1);
- /*
- * Back to element position.
- */
- ret = xmlTextReaderMoveToElement(vctxt->reader);
- if (ret == -1) {
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlTextReaderMoveToElement()");
- goto internal_error;
- }
- }
- /*
- * Validate the element.
- */
- ret= xmlSchemaValidateElem(vctxt);
- if (ret != 0) {
- if (ret == -1) {
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlSchemaValidateElem()");
- goto internal_error;
- }
- goto exit;
- }
- if (vctxt->depth == vctxt->skipDepth) {
- int curDepth;
- /*
- * Skip all content.
- */
- if ((ielem->flags & XML_SCHEMA_ELEM_INFO_EMPTY) == 0) {
- ret = xmlTextReaderRead(vctxt->reader);
- curDepth = xmlTextReaderDepth(vctxt->reader);
- while ((ret == 1) && (curDepth != depth)) {
- ret = xmlTextReaderRead(vctxt->reader);
- curDepth = xmlTextReaderDepth(vctxt->reader);
- }
- if (ret < 0) {
- /*
- * VAL TODO: A reader error occured; what to do here?
- */
- ret = 1;
- goto exit;
- }
- }
- goto leave_elem;
- }
- /*
- * READER VAL TODO: Is an END_ELEM really never called
- * if the elem is empty?
- */
- if (ielem->flags & XML_SCHEMA_ELEM_INFO_EMPTY)
- goto leave_elem;
- } else if (nodeType == END_ELEM) {
- /*
- * Process END of element.
- */
-leave_elem:
- ret = xmlSchemaValidatorPopElem(vctxt);
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlSchemaValidatorPopElem()");
- goto internal_error;
- }
- goto exit;
- }
- if (vctxt->depth >= 0)
- ielem = vctxt->inode;
- else
- ielem = NULL;
- } else if ((nodeType == XML_TEXT_NODE) ||
- (nodeType == XML_CDATA_SECTION_NODE) ||
- (nodeType == WHTSP) ||
- (nodeType == SIGN_WHTSP)) {
- /*
- * Process character content.
- */
- xmlChar *value;
-
- if ((nodeType == WHTSP) || (nodeType == SIGN_WHTSP))
- nodeType = XML_TEXT_NODE;
-
- value = xmlTextReaderValue(vctxt->reader);
- ret = xmlSchemaVPushText(vctxt, nodeType, BAD_CAST value,
- -1, XML_SCHEMA_PUSH_TEXT_CREATED, &consumed);
- if (! consumed)
- xmlFree(value);
- if (ret == -1) {
- VERROR_INT("xmlSchemaVReaderWalk",
- "calling xmlSchemaVPushText()");
- goto internal_error;
- }
- } else if ((nodeType == XML_ENTITY_NODE) ||
- (nodeType == XML_ENTITY_REF_NODE)) {
- /*
- * VAL TODO: What to do with entities?
- */
- TODO
- }
- /*
- * Read next node.
- */
- ret = xmlTextReaderRead(vctxt->reader);
- } while (ret == 1);
-
-exit:
- return (ret);
-internal_error:
- return (-1);
-}
-#endif
-
-/************************************************************************
- * *
- * SAX validation handlers *
- * *
- ************************************************************************/
-
-/*
-* Process text content.
-*/
-static void
-xmlSchemaSAXHandleText(void *ctx,
- const xmlChar * ch,
- int len)
-{
- xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
-
- if (vctxt->depth < 0)
- return;
- if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
- return;
- if (vctxt->inode->flags & XML_SCHEMA_ELEM_INFO_EMPTY)
- vctxt->inode->flags ^= XML_SCHEMA_ELEM_INFO_EMPTY;
- if (xmlSchemaVPushText(vctxt, XML_TEXT_NODE, ch, len,
- XML_SCHEMA_PUSH_TEXT_VOLATILE, NULL) == -1) {
- VERROR_INT("xmlSchemaSAXHandleCDataSection",
- "calling xmlSchemaVPushText()");
- vctxt->err = -1;
- xmlStopParser(vctxt->parserCtxt);
- }
-}
-
-/*
-* Process CDATA content.
-*/
-static void
-xmlSchemaSAXHandleCDataSection(void *ctx,
- const xmlChar * ch,
- int len)
-{
- xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
-
- if (vctxt->depth < 0)
- return;
- if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
- return;
- if (vctxt->inode->flags & XML_SCHEMA_ELEM_INFO_EMPTY)
- vctxt->inode->flags ^= XML_SCHEMA_ELEM_INFO_EMPTY;
- if (xmlSchemaVPushText(vctxt, XML_CDATA_SECTION_NODE, ch, len,
- XML_SCHEMA_PUSH_TEXT_VOLATILE, NULL) == -1) {
- VERROR_INT("xmlSchemaSAXHandleCDataSection",
- "calling xmlSchemaVPushText()");
- vctxt->err = -1;
- xmlStopParser(vctxt->parserCtxt);
- }
-}
-
-static void
-xmlSchemaSAXHandleReference(void *ctx ATTRIBUTE_UNUSED,
- const xmlChar * name ATTRIBUTE_UNUSED)
-{
- xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
-
- if (vctxt->depth < 0)
- return;
- if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
- return;
- /* SAX VAL TODO: What to do here? */
- TODO
-}
-
-static void
-xmlSchemaSAXHandleStartElementNs(void *ctx,
- const xmlChar * localname,
- const xmlChar * prefix ATTRIBUTE_UNUSED,
- const xmlChar * URI,
- int nb_namespaces,
- const xmlChar ** namespaces,
- int nb_attributes,
- int nb_defaulted ATTRIBUTE_UNUSED,
- const xmlChar ** attributes)
-{
- xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
- int ret;
- xmlSchemaNodeInfoPtr ielem;
- int i, j;
-
- /*
- * SAX VAL TODO: What to do with nb_defaulted?
- */
- /*
- * Skip elements if inside a "skip" wildcard or invalid.
- */
- vctxt->depth++;
- if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
- return;
- /*
- * Push the element.
- */
- if (xmlSchemaValidatorPushElem(vctxt) == -1) {
- VERROR_INT("xmlSchemaSAXHandleStartElementNs",
- "calling xmlSchemaValidatorPushElem()");
- goto internal_error;
- }
- ielem = vctxt->inode;
- /*
- * TODO: Is this OK?
- */
- ielem->nodeLine = xmlSAX2GetLineNumber(vctxt->parserCtxt);
- ielem->localName = localname;
- ielem->nsName = URI;
- ielem->flags |= XML_SCHEMA_ELEM_INFO_EMPTY;
- /*
- * Register namespaces on the elem info.
- */
- if (nb_namespaces != 0) {
- /*
- * Although the parser builds its own namespace list,
- * we have no access to it, so we'll use an own one.
- */
- for (i = 0, j = 0; i < nb_namespaces; i++, j += 2) {
- /*
- * Store prefix and namespace name.
- */
- if (ielem->nsBindings == NULL) {
- ielem->nsBindings =
- (const xmlChar **) xmlMalloc(10 *
- sizeof(const xmlChar *));
- if (ielem->nsBindings == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "allocating namespace bindings for SAX validation",
- NULL);
- goto internal_error;
- }
- ielem->nbNsBindings = 0;
- ielem->sizeNsBindings = 5;
- } else if (ielem->sizeNsBindings <= ielem->nbNsBindings) {
- ielem->sizeNsBindings *= 2;
- ielem->nsBindings =
- (const xmlChar **) xmlRealloc(
- (void *) ielem->nsBindings,
- ielem->sizeNsBindings * 2 * sizeof(const xmlChar *));
- if (ielem->nsBindings == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "re-allocating namespace bindings for SAX validation",
- NULL);
- goto internal_error;
- }
- }
-
- ielem->nsBindings[ielem->nbNsBindings * 2] = namespaces[j];
- if (namespaces[j+1][0] == 0) {
- /*
- * Handle xmlns="".
- */
- ielem->nsBindings[ielem->nbNsBindings * 2 + 1] = NULL;
- } else
- ielem->nsBindings[ielem->nbNsBindings * 2 + 1] =
- namespaces[j+1];
- ielem->nbNsBindings++;
- }
- }
- /*
- * Register attributes.
- * SAX VAL TODO: We are not adding namespace declaration
- * attributes yet.
- */
- if (nb_attributes != 0) {
- int valueLen, k, l;
- xmlChar *value;
-
- for (j = 0, i = 0; i < nb_attributes; i++, j += 5) {
- /*
- * Duplicate the value, changing any &#38; to a literal ampersand.
- *
- * libxml2 differs from normal SAX here in that it escapes all ampersands
- * as &#38; instead of delivering the raw converted string. Changing the
- * behavior at this point would break applications that use this API, so
- * we are forced to work around it.
- */
- valueLen = attributes[j+4] - attributes[j+3];
- value = xmlMallocAtomic(valueLen + 1);
- if (value == NULL) {
- xmlSchemaVErrMemory(vctxt,
- "allocating string for decoded attribute",
- NULL);
- goto internal_error;
- }
- for (k = 0, l = 0; k < valueLen; l++) {
- if (k < valueLen - 4 &&
- attributes[j+3][k+0] == '&' &&
- attributes[j+3][k+1] == '#' &&
- attributes[j+3][k+2] == '3' &&
- attributes[j+3][k+3] == '8' &&
- attributes[j+3][k+4] == ';') {
- value[l] = '&';
- k += 5;
- } else {
- value[l] = attributes[j+3][k];
- k++;
- }
- }
- value[l] = '\0';
- /*
- * TODO: Set the node line.
- */
- ret = xmlSchemaValidatorPushAttribute(vctxt,
- NULL, ielem->nodeLine, attributes[j], attributes[j+2], 0,
- value, 1);
- if (ret == -1) {
- VERROR_INT("xmlSchemaSAXHandleStartElementNs",
- "calling xmlSchemaValidatorPushAttribute()");
- goto internal_error;
- }
- }
- }
- /*
- * Validate the element.
- */
- ret = xmlSchemaValidateElem(vctxt);
- if (ret != 0) {
- if (ret == -1) {
- VERROR_INT("xmlSchemaSAXHandleStartElementNs",
- "calling xmlSchemaValidateElem()");
- goto internal_error;
- }
- goto exit;
- }
-
-exit:
- return;
-internal_error:
- vctxt->err = -1;
- xmlStopParser(vctxt->parserCtxt);
- return;
-}
-
-static void
-xmlSchemaSAXHandleEndElementNs(void *ctx,
- const xmlChar * localname ATTRIBUTE_UNUSED,
- const xmlChar * prefix ATTRIBUTE_UNUSED,
- const xmlChar * URI ATTRIBUTE_UNUSED)
-{
- xmlSchemaValidCtxtPtr vctxt = (xmlSchemaValidCtxtPtr) ctx;
- int res;
-
- /*
- * Skip elements if inside a "skip" wildcard or if invalid.
- */
- if (vctxt->skipDepth != -1) {
- if (vctxt->depth > vctxt->skipDepth) {
- vctxt->depth--;
- return;
- } else
- vctxt->skipDepth = -1;
- }
- /*
- * SAX VAL TODO: Just a temporary check.
- */
- if ((!xmlStrEqual(vctxt->inode->localName, localname)) ||
- (!xmlStrEqual(vctxt->inode->nsName, URI))) {
- VERROR_INT("xmlSchemaSAXHandleEndElementNs",
- "elem pop mismatch");
- }
- res = xmlSchemaValidatorPopElem(vctxt);
- if (res != 0) {
- if (res < 0) {
- VERROR_INT("xmlSchemaSAXHandleEndElementNs",
- "calling xmlSchemaValidatorPopElem()");
- goto internal_error;
- }
- goto exit;
- }
-exit:
- return;
-internal_error:
- vctxt->err = -1;
- xmlStopParser(vctxt->parserCtxt);
- return;
-}
-
-/************************************************************************
- * *
- * Validation interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaNewValidCtxt:
- * @schema: a precompiled XML Schemas
- *
- * Create an XML Schemas validation context based on the given schema.
- *
- * Returns the validation context or NULL in case of error
- */
-xmlSchemaValidCtxtPtr
-xmlSchemaNewValidCtxt(xmlSchemaPtr schema)
-{
- xmlSchemaValidCtxtPtr ret;
-
- ret = (xmlSchemaValidCtxtPtr) xmlMalloc(sizeof(xmlSchemaValidCtxt));
- if (ret == NULL) {
- xmlSchemaVErrMemory(NULL, "allocating validation context", NULL);
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaValidCtxt));
- ret->type = XML_SCHEMA_CTXT_VALIDATOR;
- ret->dict = xmlDictCreate();
- ret->nodeQNames = xmlSchemaItemListCreate();
- ret->schema = schema;
- return (ret);
-}
-
-/**
- * xmlSchemaValidateSetFilename:
- * @vctxt: the schema validation context
- * @filename: the file name
- *
- * Workaround to provide file error reporting information when this is
- * not provided by current APIs
- */
-void
-xmlSchemaValidateSetFilename(xmlSchemaValidCtxtPtr vctxt, const char *filename) {
- if (vctxt == NULL)
- return;
- if (vctxt->filename != NULL)
- xmlFree(vctxt->filename);
- if (filename != NULL)
- vctxt->filename = (char *) xmlStrdup((const xmlChar *) filename);
- else
- vctxt->filename = NULL;
-}
-
-/**
- * xmlSchemaClearValidCtxt:
- * @vctxt: the schema validation context
- *
- * Free the resources associated to the schema validation context;
- * leaves some fields alive intended for reuse of the context.
- */
-static void
-xmlSchemaClearValidCtxt(xmlSchemaValidCtxtPtr vctxt)
-{
- if (vctxt == NULL)
- return;
-
- /*
- * TODO: Should we clear the flags?
- * Might be problematic if one reuses the context
- * and assumes that the options remain the same.
- */
- vctxt->flags = 0;
- vctxt->validationRoot = NULL;
- vctxt->doc = NULL;
-#ifdef LIBXML_READER_ENABLED
- vctxt->reader = NULL;
-#endif
- vctxt->hasKeyrefs = 0;
-
- if (vctxt->value != NULL) {
- xmlSchemaFreeValue(vctxt->value);
- vctxt->value = NULL;
- }
- /*
- * Augmented IDC information.
- */
- if (vctxt->aidcs != NULL) {
- xmlSchemaIDCAugPtr cur = vctxt->aidcs, next;
- do {
- next = cur->next;
- xmlFree(cur);
- cur = next;
- } while (cur != NULL);
- vctxt->aidcs = NULL;
- }
- if (vctxt->idcMatcherCache != NULL) {
- xmlSchemaIDCMatcherPtr matcher = vctxt->idcMatcherCache, tmp;
-
- while (matcher) {
- tmp = matcher;
- matcher = matcher->nextCached;
- xmlSchemaIDCFreeMatcherList(tmp);
- }
- vctxt->idcMatcherCache = NULL;
- }
-
-
- if (vctxt->idcNodes != NULL) {
- int i;
- xmlSchemaPSVIIDCNodePtr item;
-
- for (i = 0; i < vctxt->nbIdcNodes; i++) {
- item = vctxt->idcNodes[i];
- xmlFree(item->keys);
- xmlFree(item);
- }
- xmlFree(vctxt->idcNodes);
- vctxt->idcNodes = NULL;
- vctxt->nbIdcNodes = 0;
- vctxt->sizeIdcNodes = 0;
- }
- /*
- * Note that we won't delete the XPath state pool here.
- */
- if (vctxt->xpathStates != NULL) {
- xmlSchemaFreeIDCStateObjList(vctxt->xpathStates);
- vctxt->xpathStates = NULL;
- }
- /*
- * Attribute info.
- */
- if (vctxt->nbAttrInfos != 0) {
- xmlSchemaClearAttrInfos(vctxt);
- }
- /*
- * Element info.
- */
- if (vctxt->elemInfos != NULL) {
- int i;
- xmlSchemaNodeInfoPtr ei;
-
- for (i = 0; i < vctxt->sizeElemInfos; i++) {
- ei = vctxt->elemInfos[i];
- if (ei == NULL)
- break;
- xmlSchemaClearElemInfo(vctxt, ei);
- }
- }
- xmlSchemaItemListClear(vctxt->nodeQNames);
- /* Recreate the dict. */
- xmlDictFree(vctxt->dict);
- /*
- * TODO: Is is save to recreate it? Do we have a scenario
- * where the user provides the dict?
- */
- vctxt->dict = xmlDictCreate();
-
- if (vctxt->filename != NULL) {
- xmlFree(vctxt->filename);
- vctxt->filename = NULL;
- }
-}
-
-/**
- * xmlSchemaFreeValidCtxt:
- * @ctxt: the schema validation context
- *
- * Free the resources associated to the schema validation context
- */
-void
-xmlSchemaFreeValidCtxt(xmlSchemaValidCtxtPtr ctxt)
-{
- if (ctxt == NULL)
- return;
- if (ctxt->value != NULL)
- xmlSchemaFreeValue(ctxt->value);
- if (ctxt->pctxt != NULL)
- xmlSchemaFreeParserCtxt(ctxt->pctxt);
- if (ctxt->idcNodes != NULL) {
- int i;
- xmlSchemaPSVIIDCNodePtr item;
-
- for (i = 0; i < ctxt->nbIdcNodes; i++) {
- item = ctxt->idcNodes[i];
- xmlFree(item->keys);
- xmlFree(item);
- }
- xmlFree(ctxt->idcNodes);
- }
- if (ctxt->idcKeys != NULL) {
- int i;
- for (i = 0; i < ctxt->nbIdcKeys; i++)
- xmlSchemaIDCFreeKey(ctxt->idcKeys[i]);
- xmlFree(ctxt->idcKeys);
- }
-
- if (ctxt->xpathStates != NULL) {
- xmlSchemaFreeIDCStateObjList(ctxt->xpathStates);
- ctxt->xpathStates = NULL;
- }
- if (ctxt->xpathStatePool != NULL) {
- xmlSchemaFreeIDCStateObjList(ctxt->xpathStatePool);
- ctxt->xpathStatePool = NULL;
- }
-
- /*
- * Augmented IDC information.
- */
- if (ctxt->aidcs != NULL) {
- xmlSchemaIDCAugPtr cur = ctxt->aidcs, next;
- do {
- next = cur->next;
- xmlFree(cur);
- cur = next;
- } while (cur != NULL);
- }
- if (ctxt->attrInfos != NULL) {
- int i;
- xmlSchemaAttrInfoPtr attr;
-
- /* Just a paranoid call to the cleanup. */
- if (ctxt->nbAttrInfos != 0)
- xmlSchemaClearAttrInfos(ctxt);
- for (i = 0; i < ctxt->sizeAttrInfos; i++) {
- attr = ctxt->attrInfos[i];
- xmlFree(attr);
- }
- xmlFree(ctxt->attrInfos);
- }
- if (ctxt->elemInfos != NULL) {
- int i;
- xmlSchemaNodeInfoPtr ei;
-
- for (i = 0; i < ctxt->sizeElemInfos; i++) {
- ei = ctxt->elemInfos[i];
- if (ei == NULL)
- break;
- xmlSchemaClearElemInfo(ctxt, ei);
- xmlFree(ei);
- }
- xmlFree(ctxt->elemInfos);
- }
- if (ctxt->nodeQNames != NULL)
- xmlSchemaItemListFree(ctxt->nodeQNames);
- if (ctxt->dict != NULL)
- xmlDictFree(ctxt->dict);
- if (ctxt->filename != NULL)
- xmlFree(ctxt->filename);
- xmlFree(ctxt);
-}
-
-/**
- * xmlSchemaIsValid:
- * @ctxt: the schema validation context
- *
- * Check if any error was detected during validation.
- *
- * Returns 1 if valid so far, 0 if errors were detected, and -1 in case
- * of internal error.
- */
-int
-xmlSchemaIsValid(xmlSchemaValidCtxtPtr ctxt)
-{
- if (ctxt == NULL)
- return(-1);
- return(ctxt->err == 0);
-}
-
-/**
- * xmlSchemaSetValidErrors:
- * @ctxt: a schema validation context
- * @err: the error function
- * @warn: the warning function
- * @ctx: the functions context
- *
- * Set the error and warning callback informations
- */
-void
-xmlSchemaSetValidErrors(xmlSchemaValidCtxtPtr ctxt,
- xmlSchemaValidityErrorFunc err,
- xmlSchemaValidityWarningFunc warn, void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->error = err;
- ctxt->warning = warn;
- ctxt->errCtxt = ctx;
- if (ctxt->pctxt != NULL)
- xmlSchemaSetParserErrors(ctxt->pctxt, err, warn, ctx);
-}
-
-/**
- * xmlSchemaSetValidStructuredErrors:
- * @ctxt: a schema validation context
- * @serror: the structured error function
- * @ctx: the functions context
- *
- * Set the structured error callback
- */
-void
-xmlSchemaSetValidStructuredErrors(xmlSchemaValidCtxtPtr ctxt,
- xmlStructuredErrorFunc serror, void *ctx)
-{
- if (ctxt == NULL)
- return;
- ctxt->serror = serror;
- ctxt->error = NULL;
- ctxt->warning = NULL;
- ctxt->errCtxt = ctx;
- if (ctxt->pctxt != NULL)
- xmlSchemaSetParserStructuredErrors(ctxt->pctxt, serror, ctx);
-}
-
-/**
- * xmlSchemaGetValidErrors:
- * @ctxt: a XML-Schema validation context
- * @err: the error function result
- * @warn: the warning function result
- * @ctx: the functions context result
- *
- * Get the error and warning callback informations
- *
- * Returns -1 in case of error and 0 otherwise
- */
-int
-xmlSchemaGetValidErrors(xmlSchemaValidCtxtPtr ctxt,
- xmlSchemaValidityErrorFunc * err,
- xmlSchemaValidityWarningFunc * warn, void **ctx)
-{
- if (ctxt == NULL)
- return (-1);
- if (err != NULL)
- *err = ctxt->error;
- if (warn != NULL)
- *warn = ctxt->warning;
- if (ctx != NULL)
- *ctx = ctxt->errCtxt;
- return (0);
-}
-
-
-/**
- * xmlSchemaSetValidOptions:
- * @ctxt: a schema validation context
- * @options: a combination of xmlSchemaValidOption
- *
- * Sets the options to be used during the validation.
- *
- * Returns 0 in case of success, -1 in case of an
- * API error.
- */
-int
-xmlSchemaSetValidOptions(xmlSchemaValidCtxtPtr ctxt,
- int options)
-
-{
- int i;
-
- if (ctxt == NULL)
- return (-1);
- /*
- * WARNING: Change the start value if adding to the
- * xmlSchemaValidOption.
- * TODO: Is there an other, more easy to maintain,
- * way?
- */
- for (i = 1; i < (int) sizeof(int) * 8; i++) {
- if (options & 1<<i)
- return (-1);
- }
- ctxt->options = options;
- return (0);
-}
-
-/**
- * xmlSchemaValidCtxtGetOptions:
- * @ctxt: a schema validation context
- *
- * Get the validation context options.
- *
- * Returns the option combination or -1 on error.
- */
-int
-xmlSchemaValidCtxtGetOptions(xmlSchemaValidCtxtPtr ctxt)
-
-{
- if (ctxt == NULL)
- return (-1);
- else
- return (ctxt->options);
-}
-
-static int
-xmlSchemaVDocWalk(xmlSchemaValidCtxtPtr vctxt)
-{
- xmlAttrPtr attr;
- int ret = 0;
- xmlSchemaNodeInfoPtr ielem = NULL;
- xmlNodePtr node, valRoot;
- const xmlChar *nsName;
-
- /* DOC VAL TODO: Move this to the start function. */
- if (vctxt->validationRoot != NULL)
- valRoot = vctxt->validationRoot;
- else
- valRoot = xmlDocGetRootElement(vctxt->doc);
- if (valRoot == NULL) {
- /* VAL TODO: Error code? */
- VERROR(1, NULL, "The document has no document element");
- return (1);
- }
- vctxt->depth = -1;
- vctxt->validationRoot = valRoot;
- node = valRoot;
- while (node != NULL) {
- if ((vctxt->skipDepth != -1) && (vctxt->depth >= vctxt->skipDepth))
- goto next_sibling;
- if (node->type == XML_ELEMENT_NODE) {
-
- /*
- * Init the node-info.
- */
- vctxt->depth++;
- if (xmlSchemaValidatorPushElem(vctxt) == -1)
- goto internal_error;
- ielem = vctxt->inode;
- ielem->node = node;
- ielem->nodeLine = node->line;
- ielem->localName = node->name;
- if (node->ns != NULL)
- ielem->nsName = node->ns->href;
- ielem->flags |= XML_SCHEMA_ELEM_INFO_EMPTY;
- /*
- * Register attributes.
- * DOC VAL TODO: We do not register namespace declaration
- * attributes yet.
- */
- vctxt->nbAttrInfos = 0;
- if (node->properties != NULL) {
- attr = node->properties;
- do {
- if (attr->ns != NULL)
- nsName = attr->ns->href;
- else
- nsName = NULL;
- ret = xmlSchemaValidatorPushAttribute(vctxt,
- (xmlNodePtr) attr,
- /*
- * Note that we give it the line number of the
- * parent element.
- */
- ielem->nodeLine,
- attr->name, nsName, 0,
- xmlNodeListGetString(attr->doc, attr->children, 1), 1);
- if (ret == -1) {
- VERROR_INT("xmlSchemaDocWalk",
- "calling xmlSchemaValidatorPushAttribute()");
- goto internal_error;
- }
- attr = attr->next;
- } while (attr);
- }
- /*
- * Validate the element.
- */
- ret = xmlSchemaValidateElem(vctxt);
- if (ret != 0) {
- if (ret == -1) {
- VERROR_INT("xmlSchemaDocWalk",
- "calling xmlSchemaValidateElem()");
- goto internal_error;
- }
- /*
- * Don't stop validation; just skip the content
- * of this element.
- */
- goto leave_node;
- }
- if ((vctxt->skipDepth != -1) &&
- (vctxt->depth >= vctxt->skipDepth))
- goto leave_node;
- } else if ((node->type == XML_TEXT_NODE) ||
- (node->type == XML_CDATA_SECTION_NODE)) {
- /*
- * Process character content.
- */
- if ((ielem != NULL) && (ielem->flags & XML_SCHEMA_ELEM_INFO_EMPTY))
- ielem->flags ^= XML_SCHEMA_ELEM_INFO_EMPTY;
- ret = xmlSchemaVPushText(vctxt, node->type, node->content,
- -1, XML_SCHEMA_PUSH_TEXT_PERSIST, NULL);
- if (ret < 0) {
- VERROR_INT("xmlSchemaVDocWalk",
- "calling xmlSchemaVPushText()");
- goto internal_error;
- }
- /*
- * DOC VAL TODO: Should we skip further validation of the
- * element content here?
- */
- } else if ((node->type == XML_ENTITY_NODE) ||
- (node->type == XML_ENTITY_REF_NODE)) {
- /*
- * DOC VAL TODO: What to do with entities?
- */
- VERROR_INT("xmlSchemaVDocWalk",
- "there is at least one entity reference in the node-tree "
- "currently being validated. Processing of entities with "
- "this XML Schema processor is not supported (yet). Please "
- "substitute entities before validation.");
- goto internal_error;
- } else {
- goto leave_node;
- /*
- * DOC VAL TODO: XInclude nodes, etc.
- */
- }
- /*
- * Walk the doc.
- */
- if (node->children != NULL) {
- node = node->children;
- continue;
- }
-leave_node:
- if (node->type == XML_ELEMENT_NODE) {
- /*
- * Leaving the scope of an element.
- */
- if (node != vctxt->inode->node) {
- VERROR_INT("xmlSchemaVDocWalk",
- "element position mismatch");
- goto internal_error;
- }
- ret = xmlSchemaValidatorPopElem(vctxt);
- if (ret != 0) {
- if (ret < 0) {
- VERROR_INT("xmlSchemaVDocWalk",
- "calling xmlSchemaValidatorPopElem()");
- goto internal_error;
- }
- }
- if (node == valRoot)
- goto exit;
- }
-next_sibling:
- if (node->next != NULL)
- node = node->next;
- else {
- node = node->parent;
- goto leave_node;
- }
- }
-
-exit:
- return (ret);
-internal_error:
- return (-1);
-}
-
-static int
-xmlSchemaPreRun(xmlSchemaValidCtxtPtr vctxt) {
- /*
- * Some initialization.
- */
- vctxt->err = 0;
- vctxt->nberrors = 0;
- vctxt->depth = -1;
- vctxt->skipDepth = -1;
- vctxt->xsiAssemble = 0;
- vctxt->hasKeyrefs = 0;
-#ifdef ENABLE_IDC_NODE_TABLES_TEST
- vctxt->createIDCNodeTables = 1;
-#else
- vctxt->createIDCNodeTables = 0;
-#endif
- /*
- * Create a schema + parser if necessary.
- */
- if (vctxt->schema == NULL) {
- xmlSchemaParserCtxtPtr pctxt;
-
- vctxt->xsiAssemble = 1;
- /*
- * If not schema was given then we will create a schema
- * dynamically using XSI schema locations.
- *
- * Create the schema parser context.
- */
- if ((vctxt->pctxt == NULL) &&
- (xmlSchemaCreatePCtxtOnVCtxt(vctxt) == -1))
- return (-1);
- pctxt = vctxt->pctxt;
- pctxt->xsiAssemble = 1;
- /*
- * Create the schema.
- */
- vctxt->schema = xmlSchemaNewSchema(pctxt);
- if (vctxt->schema == NULL)
- return (-1);
- /*
- * Create the schema construction context.
- */
- pctxt->constructor = xmlSchemaConstructionCtxtCreate(pctxt->dict);
- if (pctxt->constructor == NULL)
- return(-1);
- pctxt->constructor->mainSchema = vctxt->schema;
- /*
- * Take ownership of the constructor to be able to free it.
- */
- pctxt->ownsConstructor = 1;
- }
- /*
- * Augment the IDC definitions for the main schema and all imported ones
- * NOTE: main schema if the first in the imported list
- */
- xmlHashScan(vctxt->schema->schemasImports,(xmlHashScanner)xmlSchemaAugmentImportedIDC, vctxt);
-
- return(0);
-}
-
-static void
-xmlSchemaPostRun(xmlSchemaValidCtxtPtr vctxt) {
- if (vctxt->xsiAssemble) {
- if (vctxt->schema != NULL) {
- xmlSchemaFree(vctxt->schema);
- vctxt->schema = NULL;
- }
- }
- xmlSchemaClearValidCtxt(vctxt);
-}
-
-static int
-xmlSchemaVStart(xmlSchemaValidCtxtPtr vctxt)
-{
- int ret = 0;
-
- if (xmlSchemaPreRun(vctxt) < 0)
- return(-1);
-
- if (vctxt->doc != NULL) {
- /*
- * Tree validation.
- */
- ret = xmlSchemaVDocWalk(vctxt);
-#ifdef LIBXML_READER_ENABLED
- } else if (vctxt->reader != NULL) {
- /*
- * XML Reader validation.
- */
-#ifdef XML_SCHEMA_READER_ENABLED
- ret = xmlSchemaVReaderWalk(vctxt);
-#endif
-#endif
- } else if ((vctxt->sax != NULL) && (vctxt->parserCtxt != NULL)) {
- /*
- * SAX validation.
- */
- ret = xmlParseDocument(vctxt->parserCtxt);
- } else {
- VERROR_INT("xmlSchemaVStart",
- "no instance to validate");
- ret = -1;
- }
-
- xmlSchemaPostRun(vctxt);
- if (ret == 0)
- ret = vctxt->err;
- return (ret);
-}
-
-/**
- * xmlSchemaValidateOneElement:
- * @ctxt: a schema validation context
- * @elem: an element node
- *
- * Validate a branch of a tree, starting with the given @elem.
- *
- * Returns 0 if the element and its subtree is valid, a positive error
- * code number otherwise and -1 in case of an internal or API error.
- */
-int
-xmlSchemaValidateOneElement(xmlSchemaValidCtxtPtr ctxt, xmlNodePtr elem)
-{
- if ((ctxt == NULL) || (elem == NULL) || (elem->type != XML_ELEMENT_NODE))
- return (-1);
-
- if (ctxt->schema == NULL)
- return (-1);
-
- ctxt->doc = elem->doc;
- ctxt->node = elem;
- ctxt->validationRoot = elem;
- return(xmlSchemaVStart(ctxt));
-}
-
-/**
- * xmlSchemaValidateDoc:
- * @ctxt: a schema validation context
- * @doc: a parsed document tree
- *
- * Validate a document tree in memory.
- *
- * Returns 0 if the document is schemas valid, a positive error code
- * number otherwise and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidateDoc(xmlSchemaValidCtxtPtr ctxt, xmlDocPtr doc)
-{
- if ((ctxt == NULL) || (doc == NULL))
- return (-1);
-
- ctxt->doc = doc;
- ctxt->node = xmlDocGetRootElement(doc);
- if (ctxt->node == NULL) {
- xmlSchemaCustomErr(ACTXT_CAST ctxt,
- XML_SCHEMAV_DOCUMENT_ELEMENT_MISSING,
- (xmlNodePtr) doc, NULL,
- "The document has no document element", NULL, NULL);
- return (ctxt->err);
- }
- ctxt->validationRoot = ctxt->node;
- return (xmlSchemaVStart(ctxt));
-}
-
-
-/************************************************************************
- * *
- * Function and data for SAX streaming API *
- * *
- ************************************************************************/
-typedef struct _xmlSchemaSplitSAXData xmlSchemaSplitSAXData;
-typedef xmlSchemaSplitSAXData *xmlSchemaSplitSAXDataPtr;
-
-struct _xmlSchemaSplitSAXData {
- xmlSAXHandlerPtr user_sax;
- void *user_data;
- xmlSchemaValidCtxtPtr ctxt;
- xmlSAXHandlerPtr schemas_sax;
-};
-
-#define XML_SAX_PLUG_MAGIC 0xdc43ba21
-
-struct _xmlSchemaSAXPlug {
- unsigned int magic;
-
- /* the original callbacks informations */
- xmlSAXHandlerPtr *user_sax_ptr;
- xmlSAXHandlerPtr user_sax;
- void **user_data_ptr;
- void *user_data;
-
- /* the block plugged back and validation informations */
- xmlSAXHandler schemas_sax;
- xmlSchemaValidCtxtPtr ctxt;
-};
-
-/* All those functions just bounces to the user provided SAX handlers */
-static void
-internalSubsetSplit(void *ctx, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->internalSubset != NULL))
- ctxt->user_sax->internalSubset(ctxt->user_data, name, ExternalID,
- SystemID);
-}
-
-static int
-isStandaloneSplit(void *ctx)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->isStandalone != NULL))
- return(ctxt->user_sax->isStandalone(ctxt->user_data));
- return(0);
-}
-
-static int
-hasInternalSubsetSplit(void *ctx)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->hasInternalSubset != NULL))
- return(ctxt->user_sax->hasInternalSubset(ctxt->user_data));
- return(0);
-}
-
-static int
-hasExternalSubsetSplit(void *ctx)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->hasExternalSubset != NULL))
- return(ctxt->user_sax->hasExternalSubset(ctxt->user_data));
- return(0);
-}
-
-static void
-externalSubsetSplit(void *ctx, const xmlChar *name,
- const xmlChar *ExternalID, const xmlChar *SystemID)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->externalSubset != NULL))
- ctxt->user_sax->externalSubset(ctxt->user_data, name, ExternalID,
- SystemID);
-}
-
-static xmlParserInputPtr
-resolveEntitySplit(void *ctx, const xmlChar *publicId, const xmlChar *systemId)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->resolveEntity != NULL))
- return(ctxt->user_sax->resolveEntity(ctxt->user_data, publicId,
- systemId));
- return(NULL);
-}
-
-static xmlEntityPtr
-getEntitySplit(void *ctx, const xmlChar *name)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->getEntity != NULL))
- return(ctxt->user_sax->getEntity(ctxt->user_data, name));
- return(NULL);
-}
-
-static xmlEntityPtr
-getParameterEntitySplit(void *ctx, const xmlChar *name)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->getParameterEntity != NULL))
- return(ctxt->user_sax->getParameterEntity(ctxt->user_data, name));
- return(NULL);
-}
-
-
-static void
-entityDeclSplit(void *ctx, const xmlChar *name, int type,
- const xmlChar *publicId, const xmlChar *systemId, xmlChar *content)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->entityDecl != NULL))
- ctxt->user_sax->entityDecl(ctxt->user_data, name, type, publicId,
- systemId, content);
-}
-
-static void
-attributeDeclSplit(void *ctx, const xmlChar * elem,
- const xmlChar * name, int type, int def,
- const xmlChar * defaultValue, xmlEnumerationPtr tree)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->attributeDecl != NULL)) {
- ctxt->user_sax->attributeDecl(ctxt->user_data, elem, name, type,
- def, defaultValue, tree);
- } else {
- xmlFreeEnumeration(tree);
- }
-}
-
-static void
-elementDeclSplit(void *ctx, const xmlChar *name, int type,
- xmlElementContentPtr content)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->elementDecl != NULL))
- ctxt->user_sax->elementDecl(ctxt->user_data, name, type, content);
-}
-
-static void
-notationDeclSplit(void *ctx, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->notationDecl != NULL))
- ctxt->user_sax->notationDecl(ctxt->user_data, name, publicId,
- systemId);
-}
-
-static void
-unparsedEntityDeclSplit(void *ctx, const xmlChar *name,
- const xmlChar *publicId, const xmlChar *systemId,
- const xmlChar *notationName)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->unparsedEntityDecl != NULL))
- ctxt->user_sax->unparsedEntityDecl(ctxt->user_data, name, publicId,
- systemId, notationName);
-}
-
-static void
-setDocumentLocatorSplit(void *ctx, xmlSAXLocatorPtr loc)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->setDocumentLocator != NULL))
- ctxt->user_sax->setDocumentLocator(ctxt->user_data, loc);
-}
-
-static void
-startDocumentSplit(void *ctx)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->startDocument != NULL))
- ctxt->user_sax->startDocument(ctxt->user_data);
-}
-
-static void
-endDocumentSplit(void *ctx)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->endDocument != NULL))
- ctxt->user_sax->endDocument(ctxt->user_data);
-}
-
-static void
-processingInstructionSplit(void *ctx, const xmlChar *target,
- const xmlChar *data)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->processingInstruction != NULL))
- ctxt->user_sax->processingInstruction(ctxt->user_data, target, data);
-}
-
-static void
-commentSplit(void *ctx, const xmlChar *value)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->comment != NULL))
- ctxt->user_sax->comment(ctxt->user_data, value);
-}
-
-/*
- * Varargs error callbacks to the user application, harder ...
- */
-
-static void XMLCDECL
-warningSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->warning != NULL)) {
- TODO
- }
-}
-static void XMLCDECL
-errorSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->error != NULL)) {
- TODO
- }
-}
-static void XMLCDECL
-fatalErrorSplit(void *ctx, const char *msg ATTRIBUTE_UNUSED, ...) {
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->fatalError != NULL)) {
- TODO
- }
-}
-
-/*
- * Those are function where both the user handler and the schemas handler
- * need to be called.
- */
-static void
-charactersSplit(void *ctx, const xmlChar *ch, int len)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if (ctxt == NULL)
- return;
- if ((ctxt->user_sax != NULL) && (ctxt->user_sax->characters != NULL))
- ctxt->user_sax->characters(ctxt->user_data, ch, len);
- if (ctxt->ctxt != NULL)
- xmlSchemaSAXHandleText(ctxt->ctxt, ch, len);
-}
-
-static void
-ignorableWhitespaceSplit(void *ctx, const xmlChar *ch, int len)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if (ctxt == NULL)
- return;
- if ((ctxt->user_sax != NULL) &&
- (ctxt->user_sax->ignorableWhitespace != NULL))
- ctxt->user_sax->ignorableWhitespace(ctxt->user_data, ch, len);
- if (ctxt->ctxt != NULL)
- xmlSchemaSAXHandleText(ctxt->ctxt, ch, len);
-}
-
-static void
-cdataBlockSplit(void *ctx, const xmlChar *value, int len)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if (ctxt == NULL)
- return;
- if ((ctxt->user_sax != NULL) &&
- (ctxt->user_sax->cdataBlock != NULL))
- ctxt->user_sax->cdataBlock(ctxt->user_data, value, len);
- if (ctxt->ctxt != NULL)
- xmlSchemaSAXHandleCDataSection(ctxt->ctxt, value, len);
-}
-
-static void
-referenceSplit(void *ctx, const xmlChar *name)
-{
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if (ctxt == NULL)
- return;
- if ((ctxt != NULL) && (ctxt->user_sax != NULL) &&
- (ctxt->user_sax->reference != NULL))
- ctxt->user_sax->reference(ctxt->user_data, name);
- if (ctxt->ctxt != NULL)
- xmlSchemaSAXHandleReference(ctxt->user_data, name);
-}
-
-static void
-startElementNsSplit(void *ctx, const xmlChar * localname,
- const xmlChar * prefix, const xmlChar * URI,
- int nb_namespaces, const xmlChar ** namespaces,
- int nb_attributes, int nb_defaulted,
- const xmlChar ** attributes) {
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if (ctxt == NULL)
- return;
- if ((ctxt->user_sax != NULL) &&
- (ctxt->user_sax->startElementNs != NULL))
- ctxt->user_sax->startElementNs(ctxt->user_data, localname, prefix,
- URI, nb_namespaces, namespaces,
- nb_attributes, nb_defaulted,
- attributes);
- if (ctxt->ctxt != NULL)
- xmlSchemaSAXHandleStartElementNs(ctxt->ctxt, localname, prefix,
- URI, nb_namespaces, namespaces,
- nb_attributes, nb_defaulted,
- attributes);
-}
-
-static void
-endElementNsSplit(void *ctx, const xmlChar * localname,
- const xmlChar * prefix, const xmlChar * URI) {
- xmlSchemaSAXPlugPtr ctxt = (xmlSchemaSAXPlugPtr) ctx;
- if (ctxt == NULL)
- return;
- if ((ctxt->user_sax != NULL) &&
- (ctxt->user_sax->endElementNs != NULL))
- ctxt->user_sax->endElementNs(ctxt->user_data, localname, prefix, URI);
- if (ctxt->ctxt != NULL)
- xmlSchemaSAXHandleEndElementNs(ctxt->ctxt, localname, prefix, URI);
-}
-
-/**
- * xmlSchemaSAXPlug:
- * @ctxt: a schema validation context
- * @sax: a pointer to the original xmlSAXHandlerPtr
- * @user_data: a pointer to the original SAX user data pointer
- *
- * Plug a SAX based validation layer in a SAX parsing event flow.
- * The original @saxptr and @dataptr data are replaced by new pointers
- * but the calls to the original will be maintained.
- *
- * Returns a pointer to a data structure needed to unplug the validation layer
- * or NULL in case of errors.
- */
-xmlSchemaSAXPlugPtr
-xmlSchemaSAXPlug(xmlSchemaValidCtxtPtr ctxt,
- xmlSAXHandlerPtr *sax, void **user_data)
-{
- xmlSchemaSAXPlugPtr ret;
- xmlSAXHandlerPtr old_sax;
-
- if ((ctxt == NULL) || (sax == NULL) || (user_data == NULL))
- return(NULL);
-
- /*
- * We only allow to plug into SAX2 event streams
- */
- old_sax = *sax;
- if ((old_sax != NULL) && (old_sax->initialized != XML_SAX2_MAGIC))
- return(NULL);
- if ((old_sax != NULL) &&
- (old_sax->startElementNs == NULL) && (old_sax->endElementNs == NULL) &&
- ((old_sax->startElement != NULL) || (old_sax->endElement != NULL)))
- return(NULL);
-
- /*
- * everything seems right allocate the local data needed for that layer
- */
- ret = (xmlSchemaSAXPlugPtr) xmlMalloc(sizeof(xmlSchemaSAXPlugStruct));
- if (ret == NULL) {
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaSAXPlugStruct));
- ret->magic = XML_SAX_PLUG_MAGIC;
- ret->schemas_sax.initialized = XML_SAX2_MAGIC;
- ret->ctxt = ctxt;
- ret->user_sax_ptr = sax;
- ret->user_sax = old_sax;
- if (old_sax == NULL) {
- /*
- * go direct, no need for the split block and functions.
- */
- ret->schemas_sax.startElementNs = xmlSchemaSAXHandleStartElementNs;
- ret->schemas_sax.endElementNs = xmlSchemaSAXHandleEndElementNs;
- /*
- * Note that we use the same text-function for both, to prevent
- * the parser from testing for ignorable whitespace.
- */
- ret->schemas_sax.ignorableWhitespace = xmlSchemaSAXHandleText;
- ret->schemas_sax.characters = xmlSchemaSAXHandleText;
-
- ret->schemas_sax.cdataBlock = xmlSchemaSAXHandleCDataSection;
- ret->schemas_sax.reference = xmlSchemaSAXHandleReference;
-
- ret->user_data = ctxt;
- *user_data = ctxt;
- } else {
- /*
- * for each callback unused by Schemas initialize it to the Split
- * routine only if non NULL in the user block, this can speed up
- * things at the SAX level.
- */
- if (old_sax->internalSubset != NULL)
- ret->schemas_sax.internalSubset = internalSubsetSplit;
- if (old_sax->isStandalone != NULL)
- ret->schemas_sax.isStandalone = isStandaloneSplit;
- if (old_sax->hasInternalSubset != NULL)
- ret->schemas_sax.hasInternalSubset = hasInternalSubsetSplit;
- if (old_sax->hasExternalSubset != NULL)
- ret->schemas_sax.hasExternalSubset = hasExternalSubsetSplit;
- if (old_sax->resolveEntity != NULL)
- ret->schemas_sax.resolveEntity = resolveEntitySplit;
- if (old_sax->getEntity != NULL)
- ret->schemas_sax.getEntity = getEntitySplit;
- if (old_sax->entityDecl != NULL)
- ret->schemas_sax.entityDecl = entityDeclSplit;
- if (old_sax->notationDecl != NULL)
- ret->schemas_sax.notationDecl = notationDeclSplit;
- if (old_sax->attributeDecl != NULL)
- ret->schemas_sax.attributeDecl = attributeDeclSplit;
- if (old_sax->elementDecl != NULL)
- ret->schemas_sax.elementDecl = elementDeclSplit;
- if (old_sax->unparsedEntityDecl != NULL)
- ret->schemas_sax.unparsedEntityDecl = unparsedEntityDeclSplit;
- if (old_sax->setDocumentLocator != NULL)
- ret->schemas_sax.setDocumentLocator = setDocumentLocatorSplit;
- if (old_sax->startDocument != NULL)
- ret->schemas_sax.startDocument = startDocumentSplit;
- if (old_sax->endDocument != NULL)
- ret->schemas_sax.endDocument = endDocumentSplit;
- if (old_sax->processingInstruction != NULL)
- ret->schemas_sax.processingInstruction = processingInstructionSplit;
- if (old_sax->comment != NULL)
- ret->schemas_sax.comment = commentSplit;
- if (old_sax->warning != NULL)
- ret->schemas_sax.warning = warningSplit;
- if (old_sax->error != NULL)
- ret->schemas_sax.error = errorSplit;
- if (old_sax->fatalError != NULL)
- ret->schemas_sax.fatalError = fatalErrorSplit;
- if (old_sax->getParameterEntity != NULL)
- ret->schemas_sax.getParameterEntity = getParameterEntitySplit;
- if (old_sax->externalSubset != NULL)
- ret->schemas_sax.externalSubset = externalSubsetSplit;
-
- /*
- * the 6 schemas callback have to go to the splitter functions
- * Note that we use the same text-function for ignorableWhitespace
- * if possible, to prevent the parser from testing for ignorable
- * whitespace.
- */
- ret->schemas_sax.characters = charactersSplit;
- if ((old_sax->ignorableWhitespace != NULL) &&
- (old_sax->ignorableWhitespace != old_sax->characters))
- ret->schemas_sax.ignorableWhitespace = ignorableWhitespaceSplit;
- else
- ret->schemas_sax.ignorableWhitespace = charactersSplit;
- ret->schemas_sax.cdataBlock = cdataBlockSplit;
- ret->schemas_sax.reference = referenceSplit;
- ret->schemas_sax.startElementNs = startElementNsSplit;
- ret->schemas_sax.endElementNs = endElementNsSplit;
-
- ret->user_data_ptr = user_data;
- ret->user_data = *user_data;
- *user_data = ret;
- }
-
- /*
- * plug the pointers back.
- */
- *sax = &(ret->schemas_sax);
- ctxt->sax = *sax;
- ctxt->flags |= XML_SCHEMA_VALID_CTXT_FLAG_STREAM;
- xmlSchemaPreRun(ctxt);
- return(ret);
-}
-
-/**
- * xmlSchemaSAXUnplug:
- * @plug: a data structure returned by xmlSchemaSAXPlug
- *
- * Unplug a SAX based validation layer in a SAX parsing event flow.
- * The original pointers used in the call are restored.
- *
- * Returns 0 in case of success and -1 in case of failure.
- */
-int
-xmlSchemaSAXUnplug(xmlSchemaSAXPlugPtr plug)
-{
- xmlSAXHandlerPtr *sax;
- void **user_data;
-
- if ((plug == NULL) || (plug->magic != XML_SAX_PLUG_MAGIC))
- return(-1);
- plug->magic = 0;
-
- xmlSchemaPostRun(plug->ctxt);
- /* restore the data */
- sax = plug->user_sax_ptr;
- *sax = plug->user_sax;
- if (plug->user_sax != NULL) {
- user_data = plug->user_data_ptr;
- *user_data = plug->user_data;
- }
-
- /* free and return */
- xmlFree(plug);
- return(0);
-}
-
-/**
- * xmlSchemaValidateSetLocator:
- * @vctxt: a schema validation context
- * @f: the locator function pointer
- * @ctxt: the locator context
- *
- * Allows to set a locator function to the validation context,
- * which will be used to provide file and line information since
- * those are not provided as part of the SAX validation flow
- * Setting @f to NULL disable the locator.
- */
-
-void
-xmlSchemaValidateSetLocator(xmlSchemaValidCtxtPtr vctxt,
- xmlSchemaValidityLocatorFunc f,
- void *ctxt)
-{
- if (vctxt == NULL) return;
- vctxt->locFunc = f;
- vctxt->locCtxt = ctxt;
-}
-
-/**
- * xmlSchemaValidateStreamLocator:
- * @ctx: the xmlTextReaderPtr used
- * @file: returned file information
- * @line: returned line information
- *
- * Internal locator function for the readers
- *
- * Returns 0 in case the Schema validation could be (des)activated and
- * -1 in case of error.
- */
-static int
-xmlSchemaValidateStreamLocator(void *ctx, const char **file,
- unsigned long *line) {
- xmlParserCtxtPtr ctxt;
-
- if ((ctx == NULL) || ((file == NULL) && (line == NULL)))
- return(-1);
-
- if (file != NULL)
- *file = NULL;
- if (line != NULL)
- *line = 0;
-
- ctxt = (xmlParserCtxtPtr) ctx;
- if (ctxt->input != NULL) {
- if (file != NULL)
- *file = ctxt->input->filename;
- if (line != NULL)
- *line = ctxt->input->line;
- return(0);
- }
- return(-1);
-}
-
-/**
- * xmlSchemaValidateStream:
- * @ctxt: a schema validation context
- * @input: the input to use for reading the data
- * @enc: an optional encoding information
- * @sax: a SAX handler for the resulting events
- * @user_data: the context to provide to the SAX handler.
- *
- * Validate an input based on a flow of SAX event from the parser
- * and forward the events to the @sax handler with the provided @user_data
- * the user provided @sax handler must be a SAX2 one.
- *
- * Returns 0 if the document is schemas valid, a positive error code
- * number otherwise and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidateStream(xmlSchemaValidCtxtPtr ctxt,
- xmlParserInputBufferPtr input, xmlCharEncoding enc,
- xmlSAXHandlerPtr sax, void *user_data)
-{
- xmlSchemaSAXPlugPtr plug = NULL;
- xmlSAXHandlerPtr old_sax = NULL;
- xmlParserCtxtPtr pctxt = NULL;
- xmlParserInputPtr inputStream = NULL;
- int ret;
-
- if ((ctxt == NULL) || (input == NULL))
- return (-1);
-
- /*
- * prepare the parser
- */
- pctxt = xmlNewParserCtxt();
- if (pctxt == NULL)
- return (-1);
- old_sax = pctxt->sax;
- pctxt->sax = sax;
- pctxt->userData = user_data;
-#if 0
- if (options)
- xmlCtxtUseOptions(pctxt, options);
-#endif
- pctxt->linenumbers = 1;
- xmlSchemaValidateSetLocator(ctxt, xmlSchemaValidateStreamLocator, pctxt);
-
- inputStream = xmlNewIOInputStream(pctxt, input, enc);;
- if (inputStream == NULL) {
- ret = -1;
- goto done;
- }
- inputPush(pctxt, inputStream);
- ctxt->parserCtxt = pctxt;
- ctxt->input = input;
-
- /*
- * Plug the validation and launch the parsing
- */
- plug = xmlSchemaSAXPlug(ctxt, &(pctxt->sax), &(pctxt->userData));
- if (plug == NULL) {
- ret = -1;
- goto done;
- }
- ctxt->input = input;
- ctxt->enc = enc;
- ctxt->sax = pctxt->sax;
- ctxt->flags |= XML_SCHEMA_VALID_CTXT_FLAG_STREAM;
- ret = xmlSchemaVStart(ctxt);
-
- if ((ret == 0) && (! ctxt->parserCtxt->wellFormed)) {
- ret = ctxt->parserCtxt->errNo;
- if (ret == 0)
- ret = 1;
- }
-
-done:
- ctxt->parserCtxt = NULL;
- ctxt->sax = NULL;
- ctxt->input = NULL;
- if (plug != NULL) {
- xmlSchemaSAXUnplug(plug);
- }
- /* cleanup */
- if (pctxt != NULL) {
- pctxt->sax = old_sax;
- xmlFreeParserCtxt(pctxt);
- }
- return (ret);
-}
-
-/**
- * xmlSchemaValidateFile:
- * @ctxt: a schema validation context
- * @filename: the URI of the instance
- * @options: a future set of options, currently unused
- *
- * Do a schemas validation of the given resource, it will use the
- * SAX streamable validation internally.
- *
- * Returns 0 if the document is valid, a positive error code
- * number otherwise and -1 in case of an internal or API error.
- */
-int
-xmlSchemaValidateFile(xmlSchemaValidCtxtPtr ctxt,
- const char * filename,
- int options ATTRIBUTE_UNUSED)
-{
- int ret;
- xmlParserInputBufferPtr input;
-
- if ((ctxt == NULL) || (filename == NULL))
- return (-1);
-
- input = xmlParserInputBufferCreateFilename(filename,
- XML_CHAR_ENCODING_NONE);
- if (input == NULL)
- return (-1);
- ret = xmlSchemaValidateStream(ctxt, input, XML_CHAR_ENCODING_NONE,
- NULL, NULL);
- return (ret);
-}
-
-/**
- * xmlSchemaValidCtxtGetParserCtxt:
- * @ctxt: a schema validation context
- *
- * allow access to the parser context of the schema validation context
- *
- * Returns the parser context of the schema validation context or NULL
- * in case of error.
- */
-xmlParserCtxtPtr
-xmlSchemaValidCtxtGetParserCtxt(xmlSchemaValidCtxtPtr ctxt)
-{
- if (ctxt == NULL)
- return(NULL);
- return (ctxt->parserCtxt);
-}
-
-#define bottom_xmlschemas
-#include "elfgcchack.h"
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/xmlschemastypes.c b/external/libxml2_android/jni/libxml2/xmlschemastypes.c
deleted file mode 100644
index 5f385990..00000000
--- a/external/libxml2_android/jni/libxml2/xmlschemastypes.c
+++ /dev/null
@@ -1,6152 +0,0 @@
-/*
- * schemastypes.c : implementation of the XML Schema Datatypes
- * definition and validity checking
- *
- * See Copyright for the status of this software.
- *
- * Daniel Veillard <veillard@redhat.com>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_SCHEMAS_ENABLED
-
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/parserInternals.h>
-#include <libxml/hash.h>
-#include <libxml/valid.h>
-#include <libxml/xpath.h>
-#include <libxml/uri.h>
-
-#include <libxml/xmlschemas.h>
-#include <libxml/schemasInternals.h>
-#include <libxml/xmlschemastypes.h>
-
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-#ifdef HAVE_FLOAT_H
-#include <float.h>
-#endif
-
-#define DEBUG
-
-#ifndef LIBXML_XPATH_ENABLED
-extern double xmlXPathNAN;
-extern double xmlXPathPINF;
-extern double xmlXPathNINF;
-#endif
-
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-#define XML_SCHEMAS_NAMESPACE_NAME \
- (const xmlChar *)"http://www.w3.org/2001/XMLSchema"
-
-#define IS_WSP_REPLACE_CH(c) ((((c) == 0x9) || ((c) == 0xa)) || \
- ((c) == 0xd))
-
-#define IS_WSP_SPACE_CH(c) ((c) == 0x20)
-
-#define IS_WSP_BLANK_CH(c) IS_BLANK_CH(c)
-
-/* Date value */
-typedef struct _xmlSchemaValDate xmlSchemaValDate;
-typedef xmlSchemaValDate *xmlSchemaValDatePtr;
-struct _xmlSchemaValDate {
- long year;
- unsigned int mon :4; /* 1 <= mon <= 12 */
- unsigned int day :5; /* 1 <= day <= 31 */
- unsigned int hour :5; /* 0 <= hour <= 24 */
- unsigned int min :6; /* 0 <= min <= 59 */
- double sec;
- unsigned int tz_flag :1; /* is tzo explicitely set? */
- signed int tzo :12; /* -1440 <= tzo <= 1440;
- currently only -840 to +840 are needed */
-};
-
-/* Duration value */
-typedef struct _xmlSchemaValDuration xmlSchemaValDuration;
-typedef xmlSchemaValDuration *xmlSchemaValDurationPtr;
-struct _xmlSchemaValDuration {
- long mon; /* mon stores years also */
- long day;
- double sec; /* sec stores min and hour also */
-};
-
-typedef struct _xmlSchemaValDecimal xmlSchemaValDecimal;
-typedef xmlSchemaValDecimal *xmlSchemaValDecimalPtr;
-struct _xmlSchemaValDecimal {
- /* would use long long but not portable */
- unsigned long lo;
- unsigned long mi;
- unsigned long hi;
- unsigned int extra;
- unsigned int sign:1;
- unsigned int frac:7;
- unsigned int total:8;
-};
-
-typedef struct _xmlSchemaValQName xmlSchemaValQName;
-typedef xmlSchemaValQName *xmlSchemaValQNamePtr;
-struct _xmlSchemaValQName {
- xmlChar *name;
- xmlChar *uri;
-};
-
-typedef struct _xmlSchemaValHex xmlSchemaValHex;
-typedef xmlSchemaValHex *xmlSchemaValHexPtr;
-struct _xmlSchemaValHex {
- xmlChar *str;
- unsigned int total;
-};
-
-typedef struct _xmlSchemaValBase64 xmlSchemaValBase64;
-typedef xmlSchemaValBase64 *xmlSchemaValBase64Ptr;
-struct _xmlSchemaValBase64 {
- xmlChar *str;
- unsigned int total;
-};
-
-struct _xmlSchemaVal {
- xmlSchemaValType type;
- struct _xmlSchemaVal *next;
- union {
- xmlSchemaValDecimal decimal;
- xmlSchemaValDate date;
- xmlSchemaValDuration dur;
- xmlSchemaValQName qname;
- xmlSchemaValHex hex;
- xmlSchemaValBase64 base64;
- float f;
- double d;
- int b;
- xmlChar *str;
- } value;
-};
-
-static int xmlSchemaTypesInitialized = 0;
-static xmlHashTablePtr xmlSchemaTypesBank = NULL;
-
-/*
- * Basic types
- */
-static xmlSchemaTypePtr xmlSchemaTypeStringDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeAnyTypeDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeAnySimpleTypeDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDecimalDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDatetimeDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDateDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeTimeDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGYearDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGYearMonthDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGDayDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGMonthDayDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeGMonthDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDurationDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeFloatDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeBooleanDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeDoubleDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeHexBinaryDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeBase64BinaryDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeAnyURIDef = NULL;
-
-/*
- * Derived types
- */
-static xmlSchemaTypePtr xmlSchemaTypePositiveIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNonPositiveIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNegativeIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNonNegativeIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIntegerDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeLongDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIntDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeShortDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeByteDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeUnsignedLongDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeUnsignedIntDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeUnsignedShortDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeUnsignedByteDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNormStringDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeTokenDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeLanguageDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNameDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeQNameDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNCNameDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIdDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIdrefDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeIdrefsDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeEntityDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeEntitiesDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNotationDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNmtokenDef = NULL;
-static xmlSchemaTypePtr xmlSchemaTypeNmtokensDef = NULL;
-
-/************************************************************************
- * *
- * Datatype error handlers *
- * *
- ************************************************************************/
-/**
- * xmlSchemaTypeErrMemory:
- * @extra: extra informations
- *
- * Handle an out of memory condition
- */
-static void
-xmlSchemaTypeErrMemory(xmlNodePtr node, const char *extra)
-{
- __xmlSimpleError(XML_FROM_DATATYPE, XML_ERR_NO_MEMORY, node, NULL, extra);
-}
-
-/************************************************************************
- * *
- * Base types support *
- * *
- ************************************************************************/
-
-/**
- * xmlSchemaNewValue:
- * @type: the value type
- *
- * Allocate a new simple type value
- *
- * Returns a pointer to the new value or NULL in case of error
- */
-static xmlSchemaValPtr
-xmlSchemaNewValue(xmlSchemaValType type) {
- xmlSchemaValPtr value;
-
- value = (xmlSchemaValPtr) xmlMalloc(sizeof(xmlSchemaVal));
- if (value == NULL) {
- return(NULL);
- }
- memset(value, 0, sizeof(xmlSchemaVal));
- value->type = type;
- return(value);
-}
-
-static xmlSchemaFacetPtr
-xmlSchemaNewMinLengthFacet(int value)
-{
- xmlSchemaFacetPtr ret;
-
- ret = xmlSchemaNewFacet();
- if (ret == NULL) {
- return(NULL);
- }
- ret->type = XML_SCHEMA_FACET_MINLENGTH;
- ret->val = xmlSchemaNewValue(XML_SCHEMAS_NNINTEGER);
- if (ret->val == NULL) {
- xmlFree(ret);
- return(NULL);
- }
- ret->val->value.decimal.lo = value;
- return (ret);
-}
-
-/*
- * xmlSchemaInitBasicType:
- * @name: the type name
- * @type: the value type associated
- *
- * Initialize one primitive built-in type
- */
-static xmlSchemaTypePtr
-xmlSchemaInitBasicType(const char *name, xmlSchemaValType type,
- xmlSchemaTypePtr baseType) {
- xmlSchemaTypePtr ret;
-
- ret = (xmlSchemaTypePtr) xmlMalloc(sizeof(xmlSchemaType));
- if (ret == NULL) {
- xmlSchemaTypeErrMemory(NULL, "could not initialize basic types");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaType));
- ret->name = (const xmlChar *)name;
- ret->targetNamespace = XML_SCHEMAS_NAMESPACE_NAME;
- ret->type = XML_SCHEMA_TYPE_BASIC;
- ret->baseType = baseType;
- ret->contentType = XML_SCHEMA_CONTENT_BASIC;
- /*
- * Primitive types.
- */
- switch (type) {
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_DECIMAL:
- case XML_SCHEMAS_DATE:
- case XML_SCHEMAS_DATETIME:
- case XML_SCHEMAS_TIME:
- case XML_SCHEMAS_GYEAR:
- case XML_SCHEMAS_GYEARMONTH:
- case XML_SCHEMAS_GMONTH:
- case XML_SCHEMAS_GMONTHDAY:
- case XML_SCHEMAS_GDAY:
- case XML_SCHEMAS_DURATION:
- case XML_SCHEMAS_FLOAT:
- case XML_SCHEMAS_DOUBLE:
- case XML_SCHEMAS_BOOLEAN:
- case XML_SCHEMAS_ANYURI:
- case XML_SCHEMAS_HEXBINARY:
- case XML_SCHEMAS_BASE64BINARY:
- case XML_SCHEMAS_QNAME:
- case XML_SCHEMAS_NOTATION:
- ret->flags |= XML_SCHEMAS_TYPE_BUILTIN_PRIMITIVE;
- break;
- default:
- break;
- }
- /*
- * Set variety.
- */
- switch (type) {
- case XML_SCHEMAS_ANYTYPE:
- case XML_SCHEMAS_ANYSIMPLETYPE:
- break;
- case XML_SCHEMAS_IDREFS:
- case XML_SCHEMAS_NMTOKENS:
- case XML_SCHEMAS_ENTITIES:
- ret->flags |= XML_SCHEMAS_TYPE_VARIETY_LIST;
- ret->facets = xmlSchemaNewMinLengthFacet(1);
- ret->flags |= XML_SCHEMAS_TYPE_HAS_FACETS;
- break;
- default:
- ret->flags |= XML_SCHEMAS_TYPE_VARIETY_ATOMIC;
- break;
- }
- xmlHashAddEntry2(xmlSchemaTypesBank, ret->name,
- XML_SCHEMAS_NAMESPACE_NAME, ret);
- ret->builtInType = type;
- return(ret);
-}
-
-/*
-* WARNING: Those type reside normally in xmlschemas.c but are
-* redefined here locally in oder of being able to use them for xs:anyType-
-* TODO: Remove those definition if we move the types to a header file.
-* TODO: Always keep those structs up-to-date with the originals.
-*/
-#define UNBOUNDED (1 << 30)
-
-typedef struct _xmlSchemaTreeItem xmlSchemaTreeItem;
-typedef xmlSchemaTreeItem *xmlSchemaTreeItemPtr;
-struct _xmlSchemaTreeItem {
- xmlSchemaTypeType type;
- xmlSchemaAnnotPtr annot;
- xmlSchemaTreeItemPtr next;
- xmlSchemaTreeItemPtr children;
-};
-
-typedef struct _xmlSchemaParticle xmlSchemaParticle;
-typedef xmlSchemaParticle *xmlSchemaParticlePtr;
-struct _xmlSchemaParticle {
- xmlSchemaTypeType type;
- xmlSchemaAnnotPtr annot;
- xmlSchemaTreeItemPtr next;
- xmlSchemaTreeItemPtr children;
- int minOccurs;
- int maxOccurs;
- xmlNodePtr node;
-};
-
-typedef struct _xmlSchemaModelGroup xmlSchemaModelGroup;
-typedef xmlSchemaModelGroup *xmlSchemaModelGroupPtr;
-struct _xmlSchemaModelGroup {
- xmlSchemaTypeType type;
- xmlSchemaAnnotPtr annot;
- xmlSchemaTreeItemPtr next;
- xmlSchemaTreeItemPtr children;
- xmlNodePtr node;
-};
-
-static xmlSchemaParticlePtr
-xmlSchemaAddParticle(void)
-{
- xmlSchemaParticlePtr ret = NULL;
-
- ret = (xmlSchemaParticlePtr)
- xmlMalloc(sizeof(xmlSchemaParticle));
- if (ret == NULL) {
- xmlSchemaTypeErrMemory(NULL, "allocating particle component");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlSchemaParticle));
- ret->type = XML_SCHEMA_TYPE_PARTICLE;
- ret->minOccurs = 1;
- ret->maxOccurs = 1;
- return (ret);
-}
-
-/*
- * xmlSchemaInitTypes:
- *
- * Initialize the default XML Schemas type library
- */
-void
-xmlSchemaInitTypes(void)
-{
- if (xmlSchemaTypesInitialized != 0)
- return;
- xmlSchemaTypesBank = xmlHashCreate(40);
-
-
- /*
- * 3.4.7 Built-in Complex Type Definition
- */
- xmlSchemaTypeAnyTypeDef = xmlSchemaInitBasicType("anyType",
- XML_SCHEMAS_ANYTYPE,
- NULL);
- xmlSchemaTypeAnyTypeDef->baseType = xmlSchemaTypeAnyTypeDef;
- xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
- /*
- * Init the content type.
- */
- xmlSchemaTypeAnyTypeDef->contentType = XML_SCHEMA_CONTENT_MIXED;
- {
- xmlSchemaParticlePtr particle;
- xmlSchemaModelGroupPtr sequence;
- xmlSchemaWildcardPtr wild;
- /* First particle. */
- particle = xmlSchemaAddParticle();
- if (particle == NULL)
- return;
- xmlSchemaTypeAnyTypeDef->subtypes = (xmlSchemaTypePtr) particle;
- /* Sequence model group. */
- sequence = (xmlSchemaModelGroupPtr)
- xmlMalloc(sizeof(xmlSchemaModelGroup));
- if (sequence == NULL) {
- xmlSchemaTypeErrMemory(NULL, "allocating model group component");
- return;
- }
- memset(sequence, 0, sizeof(xmlSchemaModelGroup));
- sequence->type = XML_SCHEMA_TYPE_SEQUENCE;
- particle->children = (xmlSchemaTreeItemPtr) sequence;
- /* Second particle. */
- particle = xmlSchemaAddParticle();
- if (particle == NULL)
- return;
- particle->minOccurs = 0;
- particle->maxOccurs = UNBOUNDED;
- sequence->children = (xmlSchemaTreeItemPtr) particle;
- /* The wildcard */
- wild = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard));
- if (wild == NULL) {
- xmlSchemaTypeErrMemory(NULL, "allocating wildcard component");
- return;
- }
- memset(wild, 0, sizeof(xmlSchemaWildcard));
- wild->type = XML_SCHEMA_TYPE_ANY;
- wild->any = 1;
- wild->processContents = XML_SCHEMAS_ANY_LAX;
- particle->children = (xmlSchemaTreeItemPtr) wild;
- /*
- * Create the attribute wildcard.
- */
- wild = (xmlSchemaWildcardPtr) xmlMalloc(sizeof(xmlSchemaWildcard));
- if (wild == NULL) {
- xmlSchemaTypeErrMemory(NULL, "could not create an attribute "
- "wildcard on anyType");
- return;
- }
- memset(wild, 0, sizeof(xmlSchemaWildcard));
- wild->any = 1;
- wild->processContents = XML_SCHEMAS_ANY_LAX;
- xmlSchemaTypeAnyTypeDef->attributeWildcard = wild;
- }
- xmlSchemaTypeAnySimpleTypeDef = xmlSchemaInitBasicType("anySimpleType",
- XML_SCHEMAS_ANYSIMPLETYPE,
- xmlSchemaTypeAnyTypeDef);
- /*
- * primitive datatypes
- */
- xmlSchemaTypeStringDef = xmlSchemaInitBasicType("string",
- XML_SCHEMAS_STRING,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeDecimalDef = xmlSchemaInitBasicType("decimal",
- XML_SCHEMAS_DECIMAL,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeDateDef = xmlSchemaInitBasicType("date",
- XML_SCHEMAS_DATE,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeDatetimeDef = xmlSchemaInitBasicType("dateTime",
- XML_SCHEMAS_DATETIME,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeTimeDef = xmlSchemaInitBasicType("time",
- XML_SCHEMAS_TIME,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeGYearDef = xmlSchemaInitBasicType("gYear",
- XML_SCHEMAS_GYEAR,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeGYearMonthDef = xmlSchemaInitBasicType("gYearMonth",
- XML_SCHEMAS_GYEARMONTH,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeGMonthDef = xmlSchemaInitBasicType("gMonth",
- XML_SCHEMAS_GMONTH,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeGMonthDayDef = xmlSchemaInitBasicType("gMonthDay",
- XML_SCHEMAS_GMONTHDAY,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeGDayDef = xmlSchemaInitBasicType("gDay",
- XML_SCHEMAS_GDAY,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeDurationDef = xmlSchemaInitBasicType("duration",
- XML_SCHEMAS_DURATION,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeFloatDef = xmlSchemaInitBasicType("float",
- XML_SCHEMAS_FLOAT,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeDoubleDef = xmlSchemaInitBasicType("double",
- XML_SCHEMAS_DOUBLE,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeBooleanDef = xmlSchemaInitBasicType("boolean",
- XML_SCHEMAS_BOOLEAN,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeAnyURIDef = xmlSchemaInitBasicType("anyURI",
- XML_SCHEMAS_ANYURI,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeHexBinaryDef = xmlSchemaInitBasicType("hexBinary",
- XML_SCHEMAS_HEXBINARY,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeBase64BinaryDef
- = xmlSchemaInitBasicType("base64Binary", XML_SCHEMAS_BASE64BINARY,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeNotationDef = xmlSchemaInitBasicType("NOTATION",
- XML_SCHEMAS_NOTATION,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeQNameDef = xmlSchemaInitBasicType("QName",
- XML_SCHEMAS_QNAME,
- xmlSchemaTypeAnySimpleTypeDef);
-
- /*
- * derived datatypes
- */
- xmlSchemaTypeIntegerDef = xmlSchemaInitBasicType("integer",
- XML_SCHEMAS_INTEGER,
- xmlSchemaTypeDecimalDef);
- xmlSchemaTypeNonPositiveIntegerDef =
- xmlSchemaInitBasicType("nonPositiveInteger",
- XML_SCHEMAS_NPINTEGER,
- xmlSchemaTypeIntegerDef);
- xmlSchemaTypeNegativeIntegerDef =
- xmlSchemaInitBasicType("negativeInteger", XML_SCHEMAS_NINTEGER,
- xmlSchemaTypeNonPositiveIntegerDef);
- xmlSchemaTypeLongDef =
- xmlSchemaInitBasicType("long", XML_SCHEMAS_LONG,
- xmlSchemaTypeIntegerDef);
- xmlSchemaTypeIntDef = xmlSchemaInitBasicType("int", XML_SCHEMAS_INT,
- xmlSchemaTypeLongDef);
- xmlSchemaTypeShortDef = xmlSchemaInitBasicType("short",
- XML_SCHEMAS_SHORT,
- xmlSchemaTypeIntDef);
- xmlSchemaTypeByteDef = xmlSchemaInitBasicType("byte",
- XML_SCHEMAS_BYTE,
- xmlSchemaTypeShortDef);
- xmlSchemaTypeNonNegativeIntegerDef =
- xmlSchemaInitBasicType("nonNegativeInteger",
- XML_SCHEMAS_NNINTEGER,
- xmlSchemaTypeIntegerDef);
- xmlSchemaTypeUnsignedLongDef =
- xmlSchemaInitBasicType("unsignedLong", XML_SCHEMAS_ULONG,
- xmlSchemaTypeNonNegativeIntegerDef);
- xmlSchemaTypeUnsignedIntDef =
- xmlSchemaInitBasicType("unsignedInt", XML_SCHEMAS_UINT,
- xmlSchemaTypeUnsignedLongDef);
- xmlSchemaTypeUnsignedShortDef =
- xmlSchemaInitBasicType("unsignedShort", XML_SCHEMAS_USHORT,
- xmlSchemaTypeUnsignedIntDef);
- xmlSchemaTypeUnsignedByteDef =
- xmlSchemaInitBasicType("unsignedByte", XML_SCHEMAS_UBYTE,
- xmlSchemaTypeUnsignedShortDef);
- xmlSchemaTypePositiveIntegerDef =
- xmlSchemaInitBasicType("positiveInteger", XML_SCHEMAS_PINTEGER,
- xmlSchemaTypeNonNegativeIntegerDef);
- xmlSchemaTypeNormStringDef = xmlSchemaInitBasicType("normalizedString",
- XML_SCHEMAS_NORMSTRING,
- xmlSchemaTypeStringDef);
- xmlSchemaTypeTokenDef = xmlSchemaInitBasicType("token",
- XML_SCHEMAS_TOKEN,
- xmlSchemaTypeNormStringDef);
- xmlSchemaTypeLanguageDef = xmlSchemaInitBasicType("language",
- XML_SCHEMAS_LANGUAGE,
- xmlSchemaTypeTokenDef);
- xmlSchemaTypeNameDef = xmlSchemaInitBasicType("Name",
- XML_SCHEMAS_NAME,
- xmlSchemaTypeTokenDef);
- xmlSchemaTypeNmtokenDef = xmlSchemaInitBasicType("NMTOKEN",
- XML_SCHEMAS_NMTOKEN,
- xmlSchemaTypeTokenDef);
- xmlSchemaTypeNCNameDef = xmlSchemaInitBasicType("NCName",
- XML_SCHEMAS_NCNAME,
- xmlSchemaTypeNameDef);
- xmlSchemaTypeIdDef = xmlSchemaInitBasicType("ID", XML_SCHEMAS_ID,
- xmlSchemaTypeNCNameDef);
- xmlSchemaTypeIdrefDef = xmlSchemaInitBasicType("IDREF",
- XML_SCHEMAS_IDREF,
- xmlSchemaTypeNCNameDef);
- xmlSchemaTypeEntityDef = xmlSchemaInitBasicType("ENTITY",
- XML_SCHEMAS_ENTITY,
- xmlSchemaTypeNCNameDef);
- /*
- * Derived list types.
- */
- /* ENTITIES */
- xmlSchemaTypeEntitiesDef = xmlSchemaInitBasicType("ENTITIES",
- XML_SCHEMAS_ENTITIES,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeEntitiesDef->subtypes = xmlSchemaTypeEntityDef;
- /* IDREFS */
- xmlSchemaTypeIdrefsDef = xmlSchemaInitBasicType("IDREFS",
- XML_SCHEMAS_IDREFS,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeIdrefsDef->subtypes = xmlSchemaTypeIdrefDef;
-
- /* NMTOKENS */
- xmlSchemaTypeNmtokensDef = xmlSchemaInitBasicType("NMTOKENS",
- XML_SCHEMAS_NMTOKENS,
- xmlSchemaTypeAnySimpleTypeDef);
- xmlSchemaTypeNmtokensDef->subtypes = xmlSchemaTypeNmtokenDef;
-
- xmlSchemaTypesInitialized = 1;
-}
-
-/**
- * xmlSchemaCleanupTypes:
- *
- * Cleanup the default XML Schemas type library
- */
-void
-xmlSchemaCleanupTypes(void) {
- if (xmlSchemaTypesInitialized == 0)
- return;
- /*
- * Free xs:anyType.
- */
- {
- xmlSchemaParticlePtr particle;
- /* Attribute wildcard. */
- xmlSchemaFreeWildcard(xmlSchemaTypeAnyTypeDef->attributeWildcard);
- /* Content type. */
- particle = (xmlSchemaParticlePtr) xmlSchemaTypeAnyTypeDef->subtypes;
- /* Wildcard. */
- xmlSchemaFreeWildcard((xmlSchemaWildcardPtr)
- particle->children->children->children);
- xmlFree((xmlSchemaParticlePtr) particle->children->children);
- /* Sequence model group. */
- xmlFree((xmlSchemaModelGroupPtr) particle->children);
- xmlFree((xmlSchemaParticlePtr) particle);
- xmlSchemaTypeAnyTypeDef->subtypes = NULL;
- }
- xmlHashFree(xmlSchemaTypesBank, (xmlHashDeallocator) xmlSchemaFreeType);
- xmlSchemaTypesInitialized = 0;
-}
-
-/**
- * xmlSchemaIsBuiltInTypeFacet:
- * @type: the built-in type
- * @facetType: the facet type
- *
- * Evaluates if a specific facet can be
- * used in conjunction with a type.
- *
- * Returns 1 if the facet can be used with the given built-in type,
- * 0 otherwise and -1 in case the type is not a built-in type.
- */
-int
-xmlSchemaIsBuiltInTypeFacet(xmlSchemaTypePtr type, int facetType)
-{
- if (type == NULL)
- return (-1);
- if (type->type != XML_SCHEMA_TYPE_BASIC)
- return (-1);
- switch (type->builtInType) {
- case XML_SCHEMAS_BOOLEAN:
- if ((facetType == XML_SCHEMA_FACET_PATTERN) ||
- (facetType == XML_SCHEMA_FACET_WHITESPACE))
- return (1);
- else
- return (0);
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_NOTATION:
- case XML_SCHEMAS_QNAME:
- case XML_SCHEMAS_ANYURI:
- case XML_SCHEMAS_BASE64BINARY:
- case XML_SCHEMAS_HEXBINARY:
- if ((facetType == XML_SCHEMA_FACET_LENGTH) ||
- (facetType == XML_SCHEMA_FACET_MINLENGTH) ||
- (facetType == XML_SCHEMA_FACET_MAXLENGTH) ||
- (facetType == XML_SCHEMA_FACET_PATTERN) ||
- (facetType == XML_SCHEMA_FACET_ENUMERATION) ||
- (facetType == XML_SCHEMA_FACET_WHITESPACE))
- return (1);
- else
- return (0);
- case XML_SCHEMAS_DECIMAL:
- if ((facetType == XML_SCHEMA_FACET_TOTALDIGITS) ||
- (facetType == XML_SCHEMA_FACET_FRACTIONDIGITS) ||
- (facetType == XML_SCHEMA_FACET_PATTERN) ||
- (facetType == XML_SCHEMA_FACET_WHITESPACE) ||
- (facetType == XML_SCHEMA_FACET_ENUMERATION) ||
- (facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) ||
- (facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) ||
- (facetType == XML_SCHEMA_FACET_MININCLUSIVE) ||
- (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE))
- return (1);
- else
- return (0);
- case XML_SCHEMAS_TIME:
- case XML_SCHEMAS_GDAY:
- case XML_SCHEMAS_GMONTH:
- case XML_SCHEMAS_GMONTHDAY:
- case XML_SCHEMAS_GYEAR:
- case XML_SCHEMAS_GYEARMONTH:
- case XML_SCHEMAS_DATE:
- case XML_SCHEMAS_DATETIME:
- case XML_SCHEMAS_DURATION:
- case XML_SCHEMAS_FLOAT:
- case XML_SCHEMAS_DOUBLE:
- if ((facetType == XML_SCHEMA_FACET_PATTERN) ||
- (facetType == XML_SCHEMA_FACET_ENUMERATION) ||
- (facetType == XML_SCHEMA_FACET_WHITESPACE) ||
- (facetType == XML_SCHEMA_FACET_MAXINCLUSIVE) ||
- (facetType == XML_SCHEMA_FACET_MAXEXCLUSIVE) ||
- (facetType == XML_SCHEMA_FACET_MININCLUSIVE) ||
- (facetType == XML_SCHEMA_FACET_MINEXCLUSIVE))
- return (1);
- else
- return (0);
- default:
- break;
- }
- return (0);
-}
-
-/**
- * xmlSchemaGetBuiltInType:
- * @type: the type of the built in type
- *
- * Gives you the type struct for a built-in
- * type by its type id.
- *
- * Returns the type if found, NULL otherwise.
- */
-xmlSchemaTypePtr
-xmlSchemaGetBuiltInType(xmlSchemaValType type)
-{
- if (xmlSchemaTypesInitialized == 0)
- xmlSchemaInitTypes();
- switch (type) {
-
- case XML_SCHEMAS_ANYSIMPLETYPE:
- return (xmlSchemaTypeAnySimpleTypeDef);
- case XML_SCHEMAS_STRING:
- return (xmlSchemaTypeStringDef);
- case XML_SCHEMAS_NORMSTRING:
- return (xmlSchemaTypeNormStringDef);
- case XML_SCHEMAS_DECIMAL:
- return (xmlSchemaTypeDecimalDef);
- case XML_SCHEMAS_TIME:
- return (xmlSchemaTypeTimeDef);
- case XML_SCHEMAS_GDAY:
- return (xmlSchemaTypeGDayDef);
- case XML_SCHEMAS_GMONTH:
- return (xmlSchemaTypeGMonthDef);
- case XML_SCHEMAS_GMONTHDAY:
- return (xmlSchemaTypeGMonthDayDef);
- case XML_SCHEMAS_GYEAR:
- return (xmlSchemaTypeGYearDef);
- case XML_SCHEMAS_GYEARMONTH:
- return (xmlSchemaTypeGYearMonthDef);
- case XML_SCHEMAS_DATE:
- return (xmlSchemaTypeDateDef);
- case XML_SCHEMAS_DATETIME:
- return (xmlSchemaTypeDatetimeDef);
- case XML_SCHEMAS_DURATION:
- return (xmlSchemaTypeDurationDef);
- case XML_SCHEMAS_FLOAT:
- return (xmlSchemaTypeFloatDef);
- case XML_SCHEMAS_DOUBLE:
- return (xmlSchemaTypeDoubleDef);
- case XML_SCHEMAS_BOOLEAN:
- return (xmlSchemaTypeBooleanDef);
- case XML_SCHEMAS_TOKEN:
- return (xmlSchemaTypeTokenDef);
- case XML_SCHEMAS_LANGUAGE:
- return (xmlSchemaTypeLanguageDef);
- case XML_SCHEMAS_NMTOKEN:
- return (xmlSchemaTypeNmtokenDef);
- case XML_SCHEMAS_NMTOKENS:
- return (xmlSchemaTypeNmtokensDef);
- case XML_SCHEMAS_NAME:
- return (xmlSchemaTypeNameDef);
- case XML_SCHEMAS_QNAME:
- return (xmlSchemaTypeQNameDef);
- case XML_SCHEMAS_NCNAME:
- return (xmlSchemaTypeNCNameDef);
- case XML_SCHEMAS_ID:
- return (xmlSchemaTypeIdDef);
- case XML_SCHEMAS_IDREF:
- return (xmlSchemaTypeIdrefDef);
- case XML_SCHEMAS_IDREFS:
- return (xmlSchemaTypeIdrefsDef);
- case XML_SCHEMAS_ENTITY:
- return (xmlSchemaTypeEntityDef);
- case XML_SCHEMAS_ENTITIES:
- return (xmlSchemaTypeEntitiesDef);
- case XML_SCHEMAS_NOTATION:
- return (xmlSchemaTypeNotationDef);
- case XML_SCHEMAS_ANYURI:
- return (xmlSchemaTypeAnyURIDef);
- case XML_SCHEMAS_INTEGER:
- return (xmlSchemaTypeIntegerDef);
- case XML_SCHEMAS_NPINTEGER:
- return (xmlSchemaTypeNonPositiveIntegerDef);
- case XML_SCHEMAS_NINTEGER:
- return (xmlSchemaTypeNegativeIntegerDef);
- case XML_SCHEMAS_NNINTEGER:
- return (xmlSchemaTypeNonNegativeIntegerDef);
- case XML_SCHEMAS_PINTEGER:
- return (xmlSchemaTypePositiveIntegerDef);
- case XML_SCHEMAS_INT:
- return (xmlSchemaTypeIntDef);
- case XML_SCHEMAS_UINT:
- return (xmlSchemaTypeUnsignedIntDef);
- case XML_SCHEMAS_LONG:
- return (xmlSchemaTypeLongDef);
- case XML_SCHEMAS_ULONG:
- return (xmlSchemaTypeUnsignedLongDef);
- case XML_SCHEMAS_SHORT:
- return (xmlSchemaTypeShortDef);
- case XML_SCHEMAS_USHORT:
- return (xmlSchemaTypeUnsignedShortDef);
- case XML_SCHEMAS_BYTE:
- return (xmlSchemaTypeByteDef);
- case XML_SCHEMAS_UBYTE:
- return (xmlSchemaTypeUnsignedByteDef);
- case XML_SCHEMAS_HEXBINARY:
- return (xmlSchemaTypeHexBinaryDef);
- case XML_SCHEMAS_BASE64BINARY:
- return (xmlSchemaTypeBase64BinaryDef);
- case XML_SCHEMAS_ANYTYPE:
- return (xmlSchemaTypeAnyTypeDef);
- default:
- return (NULL);
- }
-}
-
-/**
- * xmlSchemaValueAppend:
- * @prev: the value
- * @cur: the value to be appended
- *
- * Appends a next sibling to a list of computed values.
- *
- * Returns 0 if succeeded and -1 on API errors.
- */
-int
-xmlSchemaValueAppend(xmlSchemaValPtr prev, xmlSchemaValPtr cur) {
-
- if ((prev == NULL) || (cur == NULL))
- return (-1);
- prev->next = cur;
- return (0);
-}
-
-/**
- * xmlSchemaValueGetNext:
- * @cur: the value
- *
- * Accessor for the next sibling of a list of computed values.
- *
- * Returns the next value or NULL if there was none, or on
- * API errors.
- */
-xmlSchemaValPtr
-xmlSchemaValueGetNext(xmlSchemaValPtr cur) {
-
- if (cur == NULL)
- return (NULL);
- return (cur->next);
-}
-
-/**
- * xmlSchemaValueGetAsString:
- * @val: the value
- *
- * Accessor for the string value of a computed value.
- *
- * Returns the string value or NULL if there was none, or on
- * API errors.
- */
-const xmlChar *
-xmlSchemaValueGetAsString(xmlSchemaValPtr val)
-{
- if (val == NULL)
- return (NULL);
- switch (val->type) {
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_NORMSTRING:
- case XML_SCHEMAS_ANYSIMPLETYPE:
- case XML_SCHEMAS_TOKEN:
- case XML_SCHEMAS_LANGUAGE:
- case XML_SCHEMAS_NMTOKEN:
- case XML_SCHEMAS_NAME:
- case XML_SCHEMAS_NCNAME:
- case XML_SCHEMAS_ID:
- case XML_SCHEMAS_IDREF:
- case XML_SCHEMAS_ENTITY:
- case XML_SCHEMAS_ANYURI:
- return (BAD_CAST val->value.str);
- default:
- break;
- }
- return (NULL);
-}
-
-/**
- * xmlSchemaValueGetAsBoolean:
- * @val: the value
- *
- * Accessor for the boolean value of a computed value.
- *
- * Returns 1 if true and 0 if false, or in case of an error. Hmm.
- */
-int
-xmlSchemaValueGetAsBoolean(xmlSchemaValPtr val)
-{
- if ((val == NULL) || (val->type != XML_SCHEMAS_BOOLEAN))
- return (0);
- return (val->value.b);
-}
-
-/**
- * xmlSchemaNewStringValue:
- * @type: the value type
- * @value: the value
- *
- * Allocate a new simple type value. The type can be
- * of XML_SCHEMAS_STRING.
- * WARNING: This one is intended to be expanded for other
- * string based types. We need this for anySimpleType as well.
- * The given value is consumed and freed with the struct.
- *
- * Returns a pointer to the new value or NULL in case of error
- */
-xmlSchemaValPtr
-xmlSchemaNewStringValue(xmlSchemaValType type,
- const xmlChar *value)
-{
- xmlSchemaValPtr val;
-
- if (type != XML_SCHEMAS_STRING)
- return(NULL);
- val = (xmlSchemaValPtr) xmlMalloc(sizeof(xmlSchemaVal));
- if (val == NULL) {
- return(NULL);
- }
- memset(val, 0, sizeof(xmlSchemaVal));
- val->type = type;
- val->value.str = (xmlChar *) value;
- return(val);
-}
-
-/**
- * xmlSchemaNewNOTATIONValue:
- * @name: the notation name
- * @ns: the notation namespace name or NULL
- *
- * Allocate a new NOTATION value.
- * The given values are consumed and freed with the struct.
- *
- * Returns a pointer to the new value or NULL in case of error
- */
-xmlSchemaValPtr
-xmlSchemaNewNOTATIONValue(const xmlChar *name,
- const xmlChar *ns)
-{
- xmlSchemaValPtr val;
-
- val = xmlSchemaNewValue(XML_SCHEMAS_NOTATION);
- if (val == NULL)
- return (NULL);
-
- val->value.qname.name = (xmlChar *)name;
- if (ns != NULL)
- val->value.qname.uri = (xmlChar *)ns;
- return(val);
-}
-
-/**
- * xmlSchemaNewQNameValue:
- * @namespaceName: the namespace name
- * @localName: the local name
- *
- * Allocate a new QName value.
- * The given values are consumed and freed with the struct.
- *
- * Returns a pointer to the new value or NULL in case of an error.
- */
-xmlSchemaValPtr
-xmlSchemaNewQNameValue(const xmlChar *namespaceName,
- const xmlChar *localName)
-{
- xmlSchemaValPtr val;
-
- val = xmlSchemaNewValue(XML_SCHEMAS_QNAME);
- if (val == NULL)
- return (NULL);
-
- val->value.qname.name = (xmlChar *) localName;
- val->value.qname.uri = (xmlChar *) namespaceName;
- return(val);
-}
-
-/**
- * xmlSchemaFreeValue:
- * @value: the value to free
- *
- * Cleanup the default XML Schemas type library
- */
-void
-xmlSchemaFreeValue(xmlSchemaValPtr value) {
- xmlSchemaValPtr prev;
-
- while (value != NULL) {
- switch (value->type) {
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_NORMSTRING:
- case XML_SCHEMAS_TOKEN:
- case XML_SCHEMAS_LANGUAGE:
- case XML_SCHEMAS_NMTOKEN:
- case XML_SCHEMAS_NMTOKENS:
- case XML_SCHEMAS_NAME:
- case XML_SCHEMAS_NCNAME:
- case XML_SCHEMAS_ID:
- case XML_SCHEMAS_IDREF:
- case XML_SCHEMAS_IDREFS:
- case XML_SCHEMAS_ENTITY:
- case XML_SCHEMAS_ENTITIES:
- case XML_SCHEMAS_ANYURI:
- case XML_SCHEMAS_ANYSIMPLETYPE:
- if (value->value.str != NULL)
- xmlFree(value->value.str);
- break;
- case XML_SCHEMAS_NOTATION:
- case XML_SCHEMAS_QNAME:
- if (value->value.qname.uri != NULL)
- xmlFree(value->value.qname.uri);
- if (value->value.qname.name != NULL)
- xmlFree(value->value.qname.name);
- break;
- case XML_SCHEMAS_HEXBINARY:
- if (value->value.hex.str != NULL)
- xmlFree(value->value.hex.str);
- break;
- case XML_SCHEMAS_BASE64BINARY:
- if (value->value.base64.str != NULL)
- xmlFree(value->value.base64.str);
- break;
- default:
- break;
- }
- prev = value;
- value = value->next;
- xmlFree(prev);
- }
-}
-
-/**
- * xmlSchemaGetPredefinedType:
- * @name: the type name
- * @ns: the URI of the namespace usually "http://www.w3.org/2001/XMLSchema"
- *
- * Lookup a type in the default XML Schemas type library
- *
- * Returns the type if found, NULL otherwise
- */
-xmlSchemaTypePtr
-xmlSchemaGetPredefinedType(const xmlChar *name, const xmlChar *ns) {
- if (xmlSchemaTypesInitialized == 0)
- xmlSchemaInitTypes();
- if (name == NULL)
- return(NULL);
- return((xmlSchemaTypePtr) xmlHashLookup2(xmlSchemaTypesBank, name, ns));
-}
-
-/**
- * xmlSchemaGetBuiltInListSimpleTypeItemType:
- * @type: the built-in simple type.
- *
- * Lookup function
- *
- * Returns the item type of @type as defined by the built-in datatype
- * hierarchy of XML Schema Part 2: Datatypes, or NULL in case of an error.
- */
-xmlSchemaTypePtr
-xmlSchemaGetBuiltInListSimpleTypeItemType(xmlSchemaTypePtr type)
-{
- if ((type == NULL) || (type->type != XML_SCHEMA_TYPE_BASIC))
- return (NULL);
- switch (type->builtInType) {
- case XML_SCHEMAS_NMTOKENS:
- return (xmlSchemaTypeNmtokenDef );
- case XML_SCHEMAS_IDREFS:
- return (xmlSchemaTypeIdrefDef);
- case XML_SCHEMAS_ENTITIES:
- return (xmlSchemaTypeEntityDef);
- default:
- return (NULL);
- }
-}
-
-/****************************************************************
- * *
- * Convenience macros and functions *
- * *
- ****************************************************************/
-
-#define IS_TZO_CHAR(c) \
- ((c == 0) || (c == 'Z') || (c == '+') || (c == '-'))
-
-#define VALID_YEAR(yr) (yr != 0)
-#define VALID_MONTH(mon) ((mon >= 1) && (mon <= 12))
-/* VALID_DAY should only be used when month is unknown */
-#define VALID_DAY(day) ((day >= 1) && (day <= 31))
-#define VALID_HOUR(hr) ((hr >= 0) && (hr <= 23))
-#define VALID_MIN(min) ((min >= 0) && (min <= 59))
-#define VALID_SEC(sec) ((sec >= 0) && (sec < 60))
-#define VALID_TZO(tzo) ((tzo > -840) && (tzo < 840))
-#define IS_LEAP(y) \
- (((y % 4 == 0) && (y % 100 != 0)) || (y % 400 == 0))
-
-static const unsigned int daysInMonth[12] =
- { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-static const unsigned int daysInMonthLeap[12] =
- { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-
-#define MAX_DAYINMONTH(yr,mon) \
- (IS_LEAP(yr) ? daysInMonthLeap[mon - 1] : daysInMonth[mon - 1])
-
-#define VALID_MDAY(dt) \
- (IS_LEAP(dt->year) ? \
- (dt->day <= daysInMonthLeap[dt->mon - 1]) : \
- (dt->day <= daysInMonth[dt->mon - 1]))
-
-#define VALID_DATE(dt) \
- (VALID_YEAR(dt->year) && VALID_MONTH(dt->mon) && VALID_MDAY(dt))
-
-#define VALID_END_OF_DAY(dt) \
- ((dt)->hour == 24 && (dt)->min == 0 && (dt)->sec == 0)
-
-#define VALID_TIME(dt) \
- (((VALID_HOUR(dt->hour) && VALID_MIN(dt->min) && \
- VALID_SEC(dt->sec)) || VALID_END_OF_DAY(dt)) && \
- VALID_TZO(dt->tzo))
-
-#define VALID_DATETIME(dt) \
- (VALID_DATE(dt) && VALID_TIME(dt))
-
-#define SECS_PER_MIN (60)
-#define SECS_PER_HOUR (60 * SECS_PER_MIN)
-#define SECS_PER_DAY (24 * SECS_PER_HOUR)
-
-static const long dayInYearByMonth[12] =
- { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
-static const long dayInLeapYearByMonth[12] =
- { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335 };
-
-#define DAY_IN_YEAR(day, month, year) \
- ((IS_LEAP(year) ? \
- dayInLeapYearByMonth[month - 1] : \
- dayInYearByMonth[month - 1]) + day)
-
-#ifdef DEBUG
-#define DEBUG_DATE(dt) \
- xmlGenericError(xmlGenericErrorContext, \
- "type=%o %04ld-%02u-%02uT%02u:%02u:%03f", \
- dt->type,dt->value.date.year,dt->value.date.mon, \
- dt->value.date.day,dt->value.date.hour,dt->value.date.min, \
- dt->value.date.sec); \
- if (dt->value.date.tz_flag) \
- if (dt->value.date.tzo != 0) \
- xmlGenericError(xmlGenericErrorContext, \
- "%+05d\n",dt->value.date.tzo); \
- else \
- xmlGenericError(xmlGenericErrorContext, "Z\n"); \
- else \
- xmlGenericError(xmlGenericErrorContext,"\n")
-#else
-#define DEBUG_DATE(dt)
-#endif
-
-/**
- * _xmlSchemaParseGYear:
- * @dt: pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a xs:gYear without time zone and fills in the appropriate
- * field of the @dt structure. @str is updated to point just after the
- * xs:gYear. It is supposed that @dt->year is big enough to contain
- * the year.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseGYear (xmlSchemaValDatePtr dt, const xmlChar **str) {
- const xmlChar *cur = *str, *firstChar;
- int isneg = 0, digcnt = 0;
-
- if (((*cur < '0') || (*cur > '9')) &&
- (*cur != '-') && (*cur != '+'))
- return -1;
-
- if (*cur == '-') {
- isneg = 1;
- cur++;
- }
-
- firstChar = cur;
-
- while ((*cur >= '0') && (*cur <= '9')) {
- dt->year = dt->year * 10 + (*cur - '0');
- cur++;
- digcnt++;
- }
-
- /* year must be at least 4 digits (CCYY); over 4
- * digits cannot have a leading zero. */
- if ((digcnt < 4) || ((digcnt > 4) && (*firstChar == '0')))
- return 1;
-
- if (isneg)
- dt->year = - dt->year;
-
- if (!VALID_YEAR(dt->year))
- return 2;
-
- *str = cur;
- return 0;
-}
-
-/**
- * PARSE_2_DIGITS:
- * @num: the integer to fill in
- * @cur: an #xmlChar *
- * @invalid: an integer
- *
- * Parses a 2-digits integer and updates @num with the value. @cur is
- * updated to point just after the integer.
- * In case of error, @invalid is set to %TRUE, values of @num and
- * @cur are undefined.
- */
-#define PARSE_2_DIGITS(num, cur, invalid) \
- if ((cur[0] < '0') || (cur[0] > '9') || \
- (cur[1] < '0') || (cur[1] > '9')) \
- invalid = 1; \
- else \
- num = (cur[0] - '0') * 10 + (cur[1] - '0'); \
- cur += 2;
-
-/**
- * PARSE_FLOAT:
- * @num: the double to fill in
- * @cur: an #xmlChar *
- * @invalid: an integer
- *
- * Parses a float and updates @num with the value. @cur is
- * updated to point just after the float. The float must have a
- * 2-digits integer part and may or may not have a decimal part.
- * In case of error, @invalid is set to %TRUE, values of @num and
- * @cur are undefined.
- */
-#define PARSE_FLOAT(num, cur, invalid) \
- PARSE_2_DIGITS(num, cur, invalid); \
- if (!invalid && (*cur == '.')) { \
- double mult = 1; \
- cur++; \
- if ((*cur < '0') || (*cur > '9')) \
- invalid = 1; \
- while ((*cur >= '0') && (*cur <= '9')) { \
- mult /= 10; \
- num += (*cur - '0') * mult; \
- cur++; \
- } \
- }
-
-/**
- * _xmlSchemaParseGMonth:
- * @dt: pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a xs:gMonth without time zone and fills in the appropriate
- * field of the @dt structure. @str is updated to point just after the
- * xs:gMonth.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseGMonth (xmlSchemaValDatePtr dt, const xmlChar **str) {
- const xmlChar *cur = *str;
- int ret = 0;
- unsigned int value = 0;
-
- PARSE_2_DIGITS(value, cur, ret);
- if (ret != 0)
- return ret;
-
- if (!VALID_MONTH(value))
- return 2;
-
- dt->mon = value;
-
- *str = cur;
- return 0;
-}
-
-/**
- * _xmlSchemaParseGDay:
- * @dt: pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a xs:gDay without time zone and fills in the appropriate
- * field of the @dt structure. @str is updated to point just after the
- * xs:gDay.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseGDay (xmlSchemaValDatePtr dt, const xmlChar **str) {
- const xmlChar *cur = *str;
- int ret = 0;
- unsigned int value = 0;
-
- PARSE_2_DIGITS(value, cur, ret);
- if (ret != 0)
- return ret;
-
- if (!VALID_DAY(value))
- return 2;
-
- dt->day = value;
- *str = cur;
- return 0;
-}
-
-/**
- * _xmlSchemaParseTime:
- * @dt: pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a xs:time without time zone and fills in the appropriate
- * fields of the @dt structure. @str is updated to point just after the
- * xs:time.
- * In case of error, values of @dt fields are undefined.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseTime (xmlSchemaValDatePtr dt, const xmlChar **str) {
- const xmlChar *cur = *str;
- int ret = 0;
- int value = 0;
-
- PARSE_2_DIGITS(value, cur, ret);
- if (ret != 0)
- return ret;
- if (*cur != ':')
- return 1;
- if (!VALID_HOUR(value) && value != 24 /* Allow end-of-day hour */)
- return 2;
- cur++;
-
- /* the ':' insures this string is xs:time */
- dt->hour = value;
-
- PARSE_2_DIGITS(value, cur, ret);
- if (ret != 0)
- return ret;
- if (!VALID_MIN(value))
- return 2;
- dt->min = value;
-
- if (*cur != ':')
- return 1;
- cur++;
-
- PARSE_FLOAT(dt->sec, cur, ret);
- if (ret != 0)
- return ret;
-
- if (!VALID_TIME(dt))
- return 2;
-
- *str = cur;
- return 0;
-}
-
-/**
- * _xmlSchemaParseTimeZone:
- * @dt: pointer to a date structure
- * @str: pointer to the string to analyze
- *
- * Parses a time zone without time zone and fills in the appropriate
- * field of the @dt structure. @str is updated to point just after the
- * time zone.
- *
- * Returns 0 or the error code
- */
-static int
-_xmlSchemaParseTimeZone (xmlSchemaValDatePtr dt, const xmlChar **str) {
- const xmlChar *cur;
- int ret = 0;
-
- if (str == NULL)
- return -1;
- cur = *str;
-
- switch (*cur) {
- case 0:
- dt->tz_flag = 0;
- dt->tzo = 0;
- break;
-
- case 'Z':
- dt->tz_flag = 1;
- dt->tzo = 0;
- cur++;
- break;
-
- case '+':
- case '-': {
- int isneg = 0, tmp = 0;
- isneg = (*cur == '-');
-
- cur++;
-
- PARSE_2_DIGITS(tmp, cur, ret);
- if (ret != 0)
- return ret;
- if (!VALID_HOUR(tmp))
- return 2;
-
- if (*cur != ':')
- return 1;
- cur++;
-
- dt->tzo = tmp * 60;
-
- PARSE_2_DIGITS(tmp, cur, ret);
- if (ret != 0)
- return ret;
- if (!VALID_MIN(tmp))
- return 2;
-
- dt->tzo += tmp;
- if (isneg)
- dt->tzo = - dt->tzo;
-
- if (!VALID_TZO(dt->tzo))
- return 2;
-
- dt->tz_flag = 1;
- break;
- }
- default:
- return 1;
- }
-
- *str = cur;
- return 0;
-}
-
-/**
- * _xmlSchemaBase64Decode:
- * @ch: a character
- *
- * Converts a base64 encoded character to its base 64 value.
- *
- * Returns 0-63 (value), 64 (pad), or -1 (not recognized)
- */
-static int
-_xmlSchemaBase64Decode (const xmlChar ch) {
- if (('A' <= ch) && (ch <= 'Z')) return ch - 'A';
- if (('a' <= ch) && (ch <= 'z')) return ch - 'a' + 26;
- if (('0' <= ch) && (ch <= '9')) return ch - '0' + 52;
- if ('+' == ch) return 62;
- if ('/' == ch) return 63;
- if ('=' == ch) return 64;
- return -1;
-}
-
-/****************************************************************
- * *
- * XML Schema Dates/Times Datatypes Handling *
- * *
- ****************************************************************/
-
-/**
- * PARSE_DIGITS:
- * @num: the integer to fill in
- * @cur: an #xmlChar *
- * @num_type: an integer flag
- *
- * Parses a digits integer and updates @num with the value. @cur is
- * updated to point just after the integer.
- * In case of error, @num_type is set to -1, values of @num and
- * @cur are undefined.
- */
-#define PARSE_DIGITS(num, cur, num_type) \
- if ((*cur < '0') || (*cur > '9')) \
- num_type = -1; \
- else \
- while ((*cur >= '0') && (*cur <= '9')) { \
- num = num * 10 + (*cur - '0'); \
- cur++; \
- }
-
-/**
- * PARSE_NUM:
- * @num: the double to fill in
- * @cur: an #xmlChar *
- * @num_type: an integer flag
- *
- * Parses a float or integer and updates @num with the value. @cur is
- * updated to point just after the number. If the number is a float,
- * then it must have an integer part and a decimal part; @num_type will
- * be set to 1. If there is no decimal part, @num_type is set to zero.
- * In case of error, @num_type is set to -1, values of @num and
- * @cur are undefined.
- */
-#define PARSE_NUM(num, cur, num_type) \
- num = 0; \
- PARSE_DIGITS(num, cur, num_type); \
- if (!num_type && (*cur == '.')) { \
- double mult = 1; \
- cur++; \
- if ((*cur < '0') || (*cur > '9')) \
- num_type = -1; \
- else \
- num_type = 1; \
- while ((*cur >= '0') && (*cur <= '9')) { \
- mult /= 10; \
- num += (*cur - '0') * mult; \
- cur++; \
- } \
- }
-
-/**
- * xmlSchemaValidateDates:
- * @type: the expected type or XML_SCHEMAS_UNKNOWN
- * @dateTime: string to analyze
- * @val: the return computed value
- *
- * Check that @dateTime conforms to the lexical space of one of the date types.
- * if true a value is computed and returned in @val.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValidateDates (xmlSchemaValType type,
- const xmlChar *dateTime, xmlSchemaValPtr *val,
- int collapse) {
- xmlSchemaValPtr dt;
- int ret;
- const xmlChar *cur = dateTime;
-
-#define RETURN_TYPE_IF_VALID(t) \
- if (IS_TZO_CHAR(*cur)) { \
- ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur); \
- if (ret == 0) { \
- if (*cur != 0) \
- goto error; \
- dt->type = t; \
- goto done; \
- } \
- }
-
- if (dateTime == NULL)
- return -1;
-
- if (collapse)
- while IS_WSP_BLANK_CH(*cur) cur++;
-
- if ((*cur != '-') && (*cur < '0') && (*cur > '9'))
- return 1;
-
- dt = xmlSchemaNewValue(XML_SCHEMAS_UNKNOWN);
- if (dt == NULL)
- return -1;
-
- if ((cur[0] == '-') && (cur[1] == '-')) {
- /*
- * It's an incomplete date (xs:gMonthDay, xs:gMonth or
- * xs:gDay)
- */
- cur += 2;
-
- /* is it an xs:gDay? */
- if (*cur == '-') {
- if (type == XML_SCHEMAS_GMONTH)
- goto error;
- ++cur;
- ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
- if (ret != 0)
- goto error;
-
- RETURN_TYPE_IF_VALID(XML_SCHEMAS_GDAY);
-
- goto error;
- }
-
- /*
- * it should be an xs:gMonthDay or xs:gMonth
- */
- ret = _xmlSchemaParseGMonth(&(dt->value.date), &cur);
- if (ret != 0)
- goto error;
-
- /*
- * a '-' char could indicate this type is xs:gMonthDay or
- * a negative time zone offset. Check for xs:gMonthDay first.
- * Also the first three char's of a negative tzo (-MM:SS) can
- * appear to be a valid day; so even if the day portion
- * of the xs:gMonthDay verifies, we must insure it was not
- * a tzo.
- */
- if (*cur == '-') {
- const xmlChar *rewnd = cur;
- cur++;
-
- ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
- if ((ret == 0) && ((*cur == 0) || (*cur != ':'))) {
-
- /*
- * we can use the VALID_MDAY macro to validate the month
- * and day because the leap year test will flag year zero
- * as a leap year (even though zero is an invalid year).
- * FUTURE TODO: Zero will become valid in XML Schema 1.1
- * probably.
- */
- if (VALID_MDAY((&(dt->value.date)))) {
-
- RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTHDAY);
-
- goto error;
- }
- }
-
- /*
- * not xs:gMonthDay so rewind and check if just xs:gMonth
- * with an optional time zone.
- */
- cur = rewnd;
- }
-
- RETURN_TYPE_IF_VALID(XML_SCHEMAS_GMONTH);
-
- goto error;
- }
-
- /*
- * It's a right-truncated date or an xs:time.
- * Try to parse an xs:time then fallback on right-truncated dates.
- */
- if ((*cur >= '0') && (*cur <= '9')) {
- ret = _xmlSchemaParseTime(&(dt->value.date), &cur);
- if (ret == 0) {
- /* it's an xs:time */
- RETURN_TYPE_IF_VALID(XML_SCHEMAS_TIME);
- }
- }
-
- /* fallback on date parsing */
- cur = dateTime;
-
- ret = _xmlSchemaParseGYear(&(dt->value.date), &cur);
- if (ret != 0)
- goto error;
-
- /* is it an xs:gYear? */
- RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEAR);
-
- if (*cur != '-')
- goto error;
- cur++;
-
- ret = _xmlSchemaParseGMonth(&(dt->value.date), &cur);
- if (ret != 0)
- goto error;
-
- /* is it an xs:gYearMonth? */
- RETURN_TYPE_IF_VALID(XML_SCHEMAS_GYEARMONTH);
-
- if (*cur != '-')
- goto error;
- cur++;
-
- ret = _xmlSchemaParseGDay(&(dt->value.date), &cur);
- if ((ret != 0) || !VALID_DATE((&(dt->value.date))))
- goto error;
-
- /* is it an xs:date? */
- RETURN_TYPE_IF_VALID(XML_SCHEMAS_DATE);
-
- if (*cur != 'T')
- goto error;
- cur++;
-
- /* it should be an xs:dateTime */
- ret = _xmlSchemaParseTime(&(dt->value.date), &cur);
- if (ret != 0)
- goto error;
-
- ret = _xmlSchemaParseTimeZone(&(dt->value.date), &cur);
- if (collapse)
- while IS_WSP_BLANK_CH(*cur) cur++;
- if ((ret != 0) || (*cur != 0) || (!(VALID_DATETIME((&(dt->value.date))))))
- goto error;
-
-
- dt->type = XML_SCHEMAS_DATETIME;
-
-done:
-#if 1
- if ((type != XML_SCHEMAS_UNKNOWN) && (type != dt->type))
- goto error;
-#else
- /*
- * insure the parsed type is equal to or less significant (right
- * truncated) than the desired type.
- */
- if ((type != XML_SCHEMAS_UNKNOWN) && (type != dt->type)) {
-
- /* time only matches time */
- if ((type == XML_SCHEMAS_TIME) && (dt->type == XML_SCHEMAS_TIME))
- goto error;
-
- if ((type == XML_SCHEMAS_DATETIME) &&
- ((dt->type != XML_SCHEMAS_DATE) ||
- (dt->type != XML_SCHEMAS_GYEARMONTH) ||
- (dt->type != XML_SCHEMAS_GYEAR)))
- goto error;
-
- if ((type == XML_SCHEMAS_DATE) &&
- ((dt->type != XML_SCHEMAS_GYEAR) ||
- (dt->type != XML_SCHEMAS_GYEARMONTH)))
- goto error;
-
- if ((type == XML_SCHEMAS_GYEARMONTH) && (dt->type != XML_SCHEMAS_GYEAR))
- goto error;
-
- if ((type == XML_SCHEMAS_GMONTHDAY) && (dt->type != XML_SCHEMAS_GMONTH))
- goto error;
- }
-#endif
-
- if (val != NULL)
- *val = dt;
- else
- xmlSchemaFreeValue(dt);
-
- return 0;
-
-error:
- if (dt != NULL)
- xmlSchemaFreeValue(dt);
- return 1;
-}
-
-/**
- * xmlSchemaValidateDuration:
- * @type: the predefined type
- * @duration: string to analyze
- * @val: the return computed value
- *
- * Check that @duration conforms to the lexical space of the duration type.
- * if true a value is computed and returned in @val.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValidateDuration (xmlSchemaTypePtr type ATTRIBUTE_UNUSED,
- const xmlChar *duration, xmlSchemaValPtr *val,
- int collapse) {
- const xmlChar *cur = duration;
- xmlSchemaValPtr dur;
- int isneg = 0;
- unsigned int seq = 0;
- double num;
- int num_type = 0; /* -1 = invalid, 0 = int, 1 = floating */
- const xmlChar desig[] = {'Y', 'M', 'D', 'H', 'M', 'S'};
- const double multi[] = { 0.0, 0.0, 86400.0, 3600.0, 60.0, 1.0, 0.0};
-
- if (duration == NULL)
- return -1;
-
- if (collapse)
- while IS_WSP_BLANK_CH(*cur) cur++;
-
- if (*cur == '-') {
- isneg = 1;
- cur++;
- }
-
- /* duration must start with 'P' (after sign) */
- if (*cur++ != 'P')
- return 1;
-
- if (*cur == 0)
- return 1;
-
- dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION);
- if (dur == NULL)
- return -1;
-
- while (*cur != 0) {
-
- /* input string should be empty or invalid date/time item */
- if (seq >= sizeof(desig))
- goto error;
-
- /* T designator must be present for time items */
- if (*cur == 'T') {
- if (seq <= 3) {
- seq = 3;
- cur++;
- } else
- return 1;
- } else if (seq == 3)
- goto error;
-
- /* parse the number portion of the item */
- PARSE_NUM(num, cur, num_type);
-
- if ((num_type == -1) || (*cur == 0))
- goto error;
-
- /* update duration based on item type */
- while (seq < sizeof(desig)) {
- if (*cur == desig[seq]) {
-
- /* verify numeric type; only seconds can be float */
- if ((num_type != 0) && (seq < (sizeof(desig)-1)))
- goto error;
-
- switch (seq) {
- case 0:
- dur->value.dur.mon = (long)num * 12;
- break;
- case 1:
- dur->value.dur.mon += (long)num;
- break;
- default:
- /* convert to seconds using multiplier */
- dur->value.dur.sec += num * multi[seq];
- seq++;
- break;
- }
-
- break; /* exit loop */
- }
- /* no date designators found? */
- if ((++seq == 3) || (seq == 6))
- goto error;
- }
- cur++;
- if (collapse)
- while IS_WSP_BLANK_CH(*cur) cur++;
- }
-
- if (isneg) {
- dur->value.dur.mon = -dur->value.dur.mon;
- dur->value.dur.day = -dur->value.dur.day;
- dur->value.dur.sec = -dur->value.dur.sec;
- }
-
- if (val != NULL)
- *val = dur;
- else
- xmlSchemaFreeValue(dur);
-
- return 0;
-
-error:
- if (dur != NULL)
- xmlSchemaFreeValue(dur);
- return 1;
-}
-
-/**
- * xmlSchemaStrip:
- * @value: a value
- *
- * Removes the leading and ending spaces of a string
- *
- * Returns the new string or NULL if no change was required.
- */
-static xmlChar *
-xmlSchemaStrip(const xmlChar *value) {
- const xmlChar *start = value, *end, *f;
-
- if (value == NULL) return(NULL);
- while ((*start != 0) && (IS_BLANK_CH(*start))) start++;
- end = start;
- while (*end != 0) end++;
- f = end;
- end--;
- while ((end > start) && (IS_BLANK_CH(*end))) end--;
- end++;
- if ((start == value) && (f == end)) return(NULL);
- return(xmlStrndup(start, end - start));
-}
-
-/**
- * xmlSchemaWhiteSpaceReplace:
- * @value: a value
- *
- * Replaces 0xd, 0x9 and 0xa with a space.
- *
- * Returns the new string or NULL if no change was required.
- */
-xmlChar *
-xmlSchemaWhiteSpaceReplace(const xmlChar *value) {
- const xmlChar *cur = value;
- xmlChar *ret = NULL, *mcur;
-
- if (value == NULL)
- return(NULL);
-
- while ((*cur != 0) &&
- (((*cur) != 0xd) && ((*cur) != 0x9) && ((*cur) != 0xa))) {
- cur++;
- }
- if (*cur == 0)
- return (NULL);
- ret = xmlStrdup(value);
- /* TODO FIXME: I guess gcc will bark at this. */
- mcur = (xmlChar *) (ret + (cur - value));
- do {
- if ( ((*mcur) == 0xd) || ((*mcur) == 0x9) || ((*mcur) == 0xa) )
- *mcur = ' ';
- mcur++;
- } while (*mcur != 0);
- return(ret);
-}
-
-/**
- * xmlSchemaCollapseString:
- * @value: a value
- *
- * Removes and normalize white spaces in the string
- *
- * Returns the new string or NULL if no change was required.
- */
-xmlChar *
-xmlSchemaCollapseString(const xmlChar *value) {
- const xmlChar *start = value, *end, *f;
- xmlChar *g;
- int col = 0;
-
- if (value == NULL) return(NULL);
- while ((*start != 0) && (IS_BLANK_CH(*start))) start++;
- end = start;
- while (*end != 0) {
- if ((*end == ' ') && (IS_BLANK_CH(end[1]))) {
- col = end - start;
- break;
- } else if ((*end == 0xa) || (*end == 0x9) || (*end == 0xd)) {
- col = end - start;
- break;
- }
- end++;
- }
- if (col == 0) {
- f = end;
- end--;
- while ((end > start) && (IS_BLANK_CH(*end))) end--;
- end++;
- if ((start == value) && (f == end)) return(NULL);
- return(xmlStrndup(start, end - start));
- }
- start = xmlStrdup(start);
- if (start == NULL) return(NULL);
- g = (xmlChar *) (start + col);
- end = g;
- while (*end != 0) {
- if (IS_BLANK_CH(*end)) {
- end++;
- while (IS_BLANK_CH(*end)) end++;
- if (*end != 0)
- *g++ = ' ';
- } else
- *g++ = *end++;
- }
- *g = 0;
- return((xmlChar *) start);
-}
-
-/**
- * xmlSchemaValAtomicListNode:
- * @type: the predefined atomic type for a token in the list
- * @value: the list value to check
- * @ret: the return computed value
- * @node: the node containing the value
- *
- * Check that a value conforms to the lexical space of the predefined
- * list type. if true a value is computed and returned in @ret.
- *
- * Returns the number of items if this validates, a negative error code
- * number otherwise
- */
-static int
-xmlSchemaValAtomicListNode(xmlSchemaTypePtr type, const xmlChar *value,
- xmlSchemaValPtr *ret, xmlNodePtr node) {
- xmlChar *val, *cur, *endval;
- int nb_values = 0;
- int tmp = 0;
-
- if (value == NULL) {
- return(-1);
- }
- val = xmlStrdup(value);
- if (val == NULL) {
- return(-1);
- }
- if (ret != NULL) {
- *ret = NULL;
- }
- cur = val;
- /*
- * Split the list
- */
- while (IS_BLANK_CH(*cur)) *cur++ = 0;
- while (*cur != 0) {
- if (IS_BLANK_CH(*cur)) {
- *cur = 0;
- cur++;
- while (IS_BLANK_CH(*cur)) *cur++ = 0;
- } else {
- nb_values++;
- cur++;
- while ((*cur != 0) && (!IS_BLANK_CH(*cur))) cur++;
- }
- }
- if (nb_values == 0) {
- xmlFree(val);
- return(nb_values);
- }
- endval = cur;
- cur = val;
- while ((*cur == 0) && (cur != endval)) cur++;
- while (cur != endval) {
- tmp = xmlSchemaValPredefTypeNode(type, cur, NULL, node);
- if (tmp != 0)
- break;
- while (*cur != 0) cur++;
- while ((*cur == 0) && (cur != endval)) cur++;
- }
- /* TODO what return value ? c.f. bug #158628
- if (ret != NULL) {
- TODO
- } */
- xmlFree(val);
- if (tmp == 0)
- return(nb_values);
- return(-1);
-}
-
-/**
- * xmlSchemaParseUInt:
- * @str: pointer to the string R/W
- * @llo: pointer to the low result
- * @lmi: pointer to the mid result
- * @lhi: pointer to the high result
- *
- * Parse an unsigned long into 3 fields.
- *
- * Returns the number of significant digits in the number or
- * -1 if overflow of the capacity and -2 if it's not a number.
- */
-static int
-xmlSchemaParseUInt(const xmlChar **str, unsigned long *llo,
- unsigned long *lmi, unsigned long *lhi) {
- unsigned long lo = 0, mi = 0, hi = 0;
- const xmlChar *tmp, *cur = *str;
- int ret = 0, i = 0;
-
- if (!((*cur >= '0') && (*cur <= '9')))
- return(-2);
-
- while (*cur == '0') { /* ignore leading zeroes */
- cur++;
- }
- tmp = cur;
- while ((*tmp != 0) && (*tmp >= '0') && (*tmp <= '9')) {
- i++;tmp++;ret++;
- }
- if (i > 24) {
- *str = tmp;
- return(-1);
- }
- while (i > 16) {
- hi = hi * 10 + (*cur++ - '0');
- i--;
- }
- while (i > 8) {
- mi = mi * 10 + (*cur++ - '0');
- i--;
- }
- while (i > 0) {
- lo = lo * 10 + (*cur++ - '0');
- i--;
- }
-
- *str = cur;
- *llo = lo;
- *lmi = mi;
- *lhi = hi;
- return(ret);
-}
-
-/**
- * xmlSchemaValAtomicType:
- * @type: the predefined type
- * @value: the value to check
- * @val: the return computed value
- * @node: the node containing the value
- * flags: flags to control the vlidation
- *
- * Check that a value conforms to the lexical space of the atomic type.
- * if true a value is computed and returned in @val.
- * This checks the value space for list types as well (IDREFS, NMTOKENS).
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value,
- xmlSchemaValPtr * val, xmlNodePtr node, int flags,
- xmlSchemaWhitespaceValueType ws,
- int normOnTheFly, int applyNorm, int createStringValue)
-{
- xmlSchemaValPtr v;
- xmlChar *norm = NULL;
- int ret = 0;
-
- if (xmlSchemaTypesInitialized == 0)
- xmlSchemaInitTypes();
- if (type == NULL)
- return (-1);
-
- /*
- * validating a non existant text node is similar to validating
- * an empty one.
- */
- if (value == NULL)
- value = BAD_CAST "";
-
- if (val != NULL)
- *val = NULL;
- if ((flags == 0) && (value != NULL)) {
-
- if ((type->builtInType != XML_SCHEMAS_STRING) &&
- (type->builtInType != XML_SCHEMAS_ANYTYPE) &&
- (type->builtInType != XML_SCHEMAS_ANYSIMPLETYPE)) {
- if (type->builtInType == XML_SCHEMAS_NORMSTRING)
- norm = xmlSchemaWhiteSpaceReplace(value);
- else
- norm = xmlSchemaCollapseString(value);
- if (norm != NULL)
- value = norm;
- }
- }
-
- switch (type->builtInType) {
- case XML_SCHEMAS_UNKNOWN:
- goto error;
- case XML_SCHEMAS_ANYTYPE:
- case XML_SCHEMAS_ANYSIMPLETYPE:
- if ((createStringValue) && (val != NULL)) {
- v = xmlSchemaNewValue(XML_SCHEMAS_ANYSIMPLETYPE);
- if (v != NULL) {
- v->value.str = xmlStrdup(value);
- *val = v;
- } else {
- goto error;
- }
- }
- goto return0;
- case XML_SCHEMAS_STRING:
- if (! normOnTheFly) {
- const xmlChar *cur = value;
-
- if (ws == XML_SCHEMA_WHITESPACE_REPLACE) {
- while (*cur != 0) {
- if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
- goto return1;
- } else {
- cur++;
- }
- }
- } else if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE) {
- while (*cur != 0) {
- if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
- goto return1;
- } else if IS_WSP_SPACE_CH(*cur) {
- cur++;
- if IS_WSP_SPACE_CH(*cur)
- goto return1;
- } else {
- cur++;
- }
- }
- }
- }
- if (createStringValue && (val != NULL)) {
- if (applyNorm) {
- if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- norm = xmlSchemaCollapseString(value);
- else if (ws == XML_SCHEMA_WHITESPACE_REPLACE)
- norm = xmlSchemaWhiteSpaceReplace(value);
- if (norm != NULL)
- value = norm;
- }
- v = xmlSchemaNewValue(XML_SCHEMAS_STRING);
- if (v != NULL) {
- v->value.str = xmlStrdup(value);
- *val = v;
- } else {
- goto error;
- }
- }
- goto return0;
- case XML_SCHEMAS_NORMSTRING:{
- if (normOnTheFly) {
- if (applyNorm) {
- if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- norm = xmlSchemaCollapseString(value);
- else
- norm = xmlSchemaWhiteSpaceReplace(value);
- if (norm != NULL)
- value = norm;
- }
- } else {
- const xmlChar *cur = value;
- while (*cur != 0) {
- if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
- goto return1;
- } else {
- cur++;
- }
- }
- }
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_NORMSTRING);
- if (v != NULL) {
- v->value.str = xmlStrdup(value);
- *val = v;
- } else {
- goto error;
- }
- }
- goto return0;
- }
- case XML_SCHEMAS_DECIMAL:{
- const xmlChar *cur = value;
- unsigned int len, neg, integ, hasLeadingZeroes;
- xmlChar cval[25];
- xmlChar *cptr = cval;
-
- if ((cur == NULL) || (*cur == 0))
- goto return1;
-
- /*
- * xs:decimal has a whitespace-facet value of 'collapse'.
- */
- if (normOnTheFly)
- while IS_WSP_BLANK_CH(*cur) cur++;
-
- /*
- * First we handle an optional sign.
- */
- neg = 0;
- if (*cur == '-') {
- neg = 1;
- cur++;
- } else if (*cur == '+')
- cur++;
- /*
- * Disallow: "", "-", "- "
- */
- if (*cur == 0)
- goto return1;
- /*
- * Next we "pre-parse" the number, in preparation for calling
- * the common routine xmlSchemaParseUInt. We get rid of any
- * leading zeroes (because we have reserved only 25 chars),
- * and note the position of a decimal point.
- */
- len = 0;
- integ = ~0u;
- hasLeadingZeroes = 0;
- /*
- * Skip leading zeroes.
- */
- while (*cur == '0') {
- cur++;
- hasLeadingZeroes = 1;
- }
- if (*cur != 0) {
- do {
- if ((*cur >= '0') && (*cur <= '9')) {
- *cptr++ = *cur++;
- len++;
- } else if (*cur == '.') {
- cur++;
- integ = len;
- do {
- if ((*cur >= '0') && (*cur <= '9')) {
- *cptr++ = *cur++;
- len++;
- } else
- break;
- } while (len < 24);
- /*
- * Disallow "." but allow "00."
- */
- if ((len == 0) && (!hasLeadingZeroes))
- goto return1;
- break;
- } else
- break;
- } while (len < 24);
- }
- if (normOnTheFly)
- while IS_WSP_BLANK_CH(*cur) cur++;
- if (*cur != 0)
- goto return1; /* error if any extraneous chars */
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_DECIMAL);
- if (v != NULL) {
- /*
- * Now evaluate the significant digits of the number
- */
- if (len != 0) {
-
- if (integ != ~0u) {
- /*
- * Get rid of trailing zeroes in the
- * fractional part.
- */
- while ((len != integ) && (*(cptr-1) == '0')) {
- cptr--;
- len--;
- }
- }
- /*
- * Terminate the (preparsed) string.
- */
- if (len != 0) {
- *cptr = 0;
- cptr = cval;
-
- xmlSchemaParseUInt((const xmlChar **)&cptr,
- &v->value.decimal.lo,
- &v->value.decimal.mi,
- &v->value.decimal.hi);
- }
- }
- /*
- * Set the total digits to 1 if a zero value.
- */
- v->value.decimal.sign = neg;
- if (len == 0) {
- /* Speedup for zero values. */
- v->value.decimal.total = 1;
- } else {
- v->value.decimal.total = len;
- if (integ == ~0u)
- v->value.decimal.frac = 0;
- else
- v->value.decimal.frac = len - integ;
- }
- *val = v;
- }
- }
- goto return0;
- }
- case XML_SCHEMAS_TIME:
- case XML_SCHEMAS_GDAY:
- case XML_SCHEMAS_GMONTH:
- case XML_SCHEMAS_GMONTHDAY:
- case XML_SCHEMAS_GYEAR:
- case XML_SCHEMAS_GYEARMONTH:
- case XML_SCHEMAS_DATE:
- case XML_SCHEMAS_DATETIME:
- ret = xmlSchemaValidateDates(type->builtInType, value, val,
- normOnTheFly);
- break;
- case XML_SCHEMAS_DURATION:
- ret = xmlSchemaValidateDuration(type, value, val,
- normOnTheFly);
- break;
- case XML_SCHEMAS_FLOAT:
- case XML_SCHEMAS_DOUBLE: {
- const xmlChar *cur = value;
- int neg = 0;
- int digits_before = 0;
- int digits_after = 0;
-
- if (normOnTheFly)
- while IS_WSP_BLANK_CH(*cur) cur++;
-
- if ((cur[0] == 'N') && (cur[1] == 'a') && (cur[2] == 'N')) {
- cur += 3;
- if (*cur != 0)
- goto return1;
- if (val != NULL) {
- if (type == xmlSchemaTypeFloatDef) {
- v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
- if (v != NULL) {
- v->value.f = (float) xmlXPathNAN;
- } else {
- xmlSchemaFreeValue(v);
- goto error;
- }
- } else {
- v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
- if (v != NULL) {
- v->value.d = xmlXPathNAN;
- } else {
- xmlSchemaFreeValue(v);
- goto error;
- }
- }
- *val = v;
- }
- goto return0;
- }
- if (*cur == '-') {
- neg = 1;
- cur++;
- }
- if ((cur[0] == 'I') && (cur[1] == 'N') && (cur[2] == 'F')) {
- cur += 3;
- if (*cur != 0)
- goto return1;
- if (val != NULL) {
- if (type == xmlSchemaTypeFloatDef) {
- v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
- if (v != NULL) {
- if (neg)
- v->value.f = (float) xmlXPathNINF;
- else
- v->value.f = (float) xmlXPathPINF;
- } else {
- xmlSchemaFreeValue(v);
- goto error;
- }
- } else {
- v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
- if (v != NULL) {
- if (neg)
- v->value.d = xmlXPathNINF;
- else
- v->value.d = xmlXPathPINF;
- } else {
- xmlSchemaFreeValue(v);
- goto error;
- }
- }
- *val = v;
- }
- goto return0;
- }
- if ((neg == 0) && (*cur == '+'))
- cur++;
- if ((cur[0] == 0) || (cur[0] == '+') || (cur[0] == '-'))
- goto return1;
- while ((*cur >= '0') && (*cur <= '9')) {
- cur++;
- digits_before++;
- }
- if (*cur == '.') {
- cur++;
- while ((*cur >= '0') && (*cur <= '9')) {
- cur++;
- digits_after++;
- }
- }
- if ((digits_before == 0) && (digits_after == 0))
- goto return1;
- if ((*cur == 'e') || (*cur == 'E')) {
- cur++;
- if ((*cur == '-') || (*cur == '+'))
- cur++;
- while ((*cur >= '0') && (*cur <= '9'))
- cur++;
- }
- if (normOnTheFly)
- while IS_WSP_BLANK_CH(*cur) cur++;
-
- if (*cur != 0)
- goto return1;
- if (val != NULL) {
- if (type == xmlSchemaTypeFloatDef) {
- v = xmlSchemaNewValue(XML_SCHEMAS_FLOAT);
- if (v != NULL) {
- /*
- * TODO: sscanf seems not to give the correct
- * value for extremely high/low values.
- * E.g. "1E-149" results in zero.
- */
- if (sscanf((const char *) value, "%f",
- &(v->value.f)) == 1) {
- *val = v;
- } else {
- xmlSchemaFreeValue(v);
- goto return1;
- }
- } else {
- goto error;
- }
- } else {
- v = xmlSchemaNewValue(XML_SCHEMAS_DOUBLE);
- if (v != NULL) {
- /*
- * TODO: sscanf seems not to give the correct
- * value for extremely high/low values.
- */
- if (sscanf((const char *) value, "%lf",
- &(v->value.d)) == 1) {
- *val = v;
- } else {
- xmlSchemaFreeValue(v);
- goto return1;
- }
- } else {
- goto error;
- }
- }
- }
- goto return0;
- }
- case XML_SCHEMAS_BOOLEAN:{
- const xmlChar *cur = value;
-
- if (normOnTheFly) {
- while IS_WSP_BLANK_CH(*cur) cur++;
- if (*cur == '0') {
- ret = 0;
- cur++;
- } else if (*cur == '1') {
- ret = 1;
- cur++;
- } else if (*cur == 't') {
- cur++;
- if ((*cur++ == 'r') && (*cur++ == 'u') &&
- (*cur++ == 'e')) {
- ret = 1;
- } else
- goto return1;
- } else if (*cur == 'f') {
- cur++;
- if ((*cur++ == 'a') && (*cur++ == 'l') &&
- (*cur++ == 's') && (*cur++ == 'e')) {
- ret = 0;
- } else
- goto return1;
- } else
- goto return1;
- if (*cur != 0) {
- while IS_WSP_BLANK_CH(*cur) cur++;
- if (*cur != 0)
- goto return1;
- }
- } else {
- if ((cur[0] == '0') && (cur[1] == 0))
- ret = 0;
- else if ((cur[0] == '1') && (cur[1] == 0))
- ret = 1;
- else if ((cur[0] == 't') && (cur[1] == 'r')
- && (cur[2] == 'u') && (cur[3] == 'e')
- && (cur[4] == 0))
- ret = 1;
- else if ((cur[0] == 'f') && (cur[1] == 'a')
- && (cur[2] == 'l') && (cur[3] == 's')
- && (cur[4] == 'e') && (cur[5] == 0))
- ret = 0;
- else
- goto return1;
- }
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_BOOLEAN);
- if (v != NULL) {
- v->value.b = ret;
- *val = v;
- } else {
- goto error;
- }
- }
- goto return0;
- }
- case XML_SCHEMAS_TOKEN:{
- const xmlChar *cur = value;
-
- if (! normOnTheFly) {
- while (*cur != 0) {
- if ((*cur == 0xd) || (*cur == 0xa) || (*cur == 0x9)) {
- goto return1;
- } else if (*cur == ' ') {
- cur++;
- if (*cur == 0)
- goto return1;
- if (*cur == ' ')
- goto return1;
- } else {
- cur++;
- }
- }
- }
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_TOKEN);
- if (v != NULL) {
- v->value.str = xmlStrdup(value);
- *val = v;
- } else {
- goto error;
- }
- }
- goto return0;
- }
- case XML_SCHEMAS_LANGUAGE:
- if (normOnTheFly) {
- norm = xmlSchemaCollapseString(value);
- if (norm != NULL)
- value = norm;
- }
- if (xmlCheckLanguageID(value) == 1) {
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_LANGUAGE);
- if (v != NULL) {
- v->value.str = xmlStrdup(value);
- *val = v;
- } else {
- goto error;
- }
- }
- goto return0;
- }
- goto return1;
- case XML_SCHEMAS_NMTOKEN:
- if (xmlValidateNMToken(value, 1) == 0) {
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_NMTOKEN);
- if (v != NULL) {
- v->value.str = xmlStrdup(value);
- *val = v;
- } else {
- goto error;
- }
- }
- goto return0;
- }
- goto return1;
- case XML_SCHEMAS_NMTOKENS:
- ret = xmlSchemaValAtomicListNode(xmlSchemaTypeNmtokenDef,
- value, val, node);
- if (ret > 0)
- ret = 0;
- else
- ret = 1;
- goto done;
- case XML_SCHEMAS_NAME:
- ret = xmlValidateName(value, 1);
- if ((ret == 0) && (val != NULL) && (value != NULL)) {
- v = xmlSchemaNewValue(XML_SCHEMAS_NAME);
- if (v != NULL) {
- const xmlChar *start = value, *end;
- while (IS_BLANK_CH(*start)) start++;
- end = start;
- while ((*end != 0) && (!IS_BLANK_CH(*end))) end++;
- v->value.str = xmlStrndup(start, end - start);
- *val = v;
- } else {
- goto error;
- }
- }
- goto done;
- case XML_SCHEMAS_QNAME:{
- const xmlChar *uri = NULL;
- xmlChar *local = NULL;
-
- ret = xmlValidateQName(value, 1);
- if (ret != 0)
- goto done;
- if (node != NULL) {
- xmlChar *prefix;
- xmlNsPtr ns;
-
- local = xmlSplitQName2(value, &prefix);
- ns = xmlSearchNs(node->doc, node, prefix);
- if ((ns == NULL) && (prefix != NULL)) {
- xmlFree(prefix);
- if (local != NULL)
- xmlFree(local);
- goto return1;
- }
- if (ns != NULL)
- uri = ns->href;
- if (prefix != NULL)
- xmlFree(prefix);
- }
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_QNAME);
- if (v == NULL) {
- if (local != NULL)
- xmlFree(local);
- goto error;
- }
- if (local != NULL)
- v->value.qname.name = local;
- else
- v->value.qname.name = xmlStrdup(value);
- if (uri != NULL)
- v->value.qname.uri = xmlStrdup(uri);
- *val = v;
- } else
- if (local != NULL)
- xmlFree(local);
- goto done;
- }
- case XML_SCHEMAS_NCNAME:
- ret = xmlValidateNCName(value, 1);
- if ((ret == 0) && (val != NULL)) {
- v = xmlSchemaNewValue(XML_SCHEMAS_NCNAME);
- if (v != NULL) {
- v->value.str = xmlStrdup(value);
- *val = v;
- } else {
- goto error;
- }
- }
- goto done;
- case XML_SCHEMAS_ID:
- ret = xmlValidateNCName(value, 1);
- if ((ret == 0) && (val != NULL)) {
- v = xmlSchemaNewValue(XML_SCHEMAS_ID);
- if (v != NULL) {
- v->value.str = xmlStrdup(value);
- *val = v;
- } else {
- goto error;
- }
- }
- if ((ret == 0) && (node != NULL) &&
- (node->type == XML_ATTRIBUTE_NODE)) {
- xmlAttrPtr attr = (xmlAttrPtr) node;
-
- /*
- * NOTE: the IDness might have already be declared in the DTD
- */
- if (attr->atype != XML_ATTRIBUTE_ID) {
- xmlIDPtr res;
- xmlChar *strip;
-
- strip = xmlSchemaStrip(value);
- if (strip != NULL) {
- res = xmlAddID(NULL, node->doc, strip, attr);
- xmlFree(strip);
- } else
- res = xmlAddID(NULL, node->doc, value, attr);
- if (res == NULL) {
- ret = 2;
- } else {
- attr->atype = XML_ATTRIBUTE_ID;
- }
- }
- }
- goto done;
- case XML_SCHEMAS_IDREF:
- ret = xmlValidateNCName(value, 1);
- if ((ret == 0) && (val != NULL)) {
- v = xmlSchemaNewValue(XML_SCHEMAS_IDREF);
- if (v == NULL)
- goto error;
- v->value.str = xmlStrdup(value);
- *val = v;
- }
- if ((ret == 0) && (node != NULL) &&
- (node->type == XML_ATTRIBUTE_NODE)) {
- xmlAttrPtr attr = (xmlAttrPtr) node;
- xmlChar *strip;
-
- strip = xmlSchemaStrip(value);
- if (strip != NULL) {
- xmlAddRef(NULL, node->doc, strip, attr);
- xmlFree(strip);
- } else
- xmlAddRef(NULL, node->doc, value, attr);
- attr->atype = XML_ATTRIBUTE_IDREF;
- }
- goto done;
- case XML_SCHEMAS_IDREFS:
- ret = xmlSchemaValAtomicListNode(xmlSchemaTypeIdrefDef,
- value, val, node);
- if (ret < 0)
- ret = 2;
- else
- ret = 0;
- if ((ret == 0) && (node != NULL) &&
- (node->type == XML_ATTRIBUTE_NODE)) {
- xmlAttrPtr attr = (xmlAttrPtr) node;
-
- attr->atype = XML_ATTRIBUTE_IDREFS;
- }
- goto done;
- case XML_SCHEMAS_ENTITY:{
- xmlChar *strip;
-
- ret = xmlValidateNCName(value, 1);
- if ((node == NULL) || (node->doc == NULL))
- ret = 3;
- if (ret == 0) {
- xmlEntityPtr ent;
-
- strip = xmlSchemaStrip(value);
- if (strip != NULL) {
- ent = xmlGetDocEntity(node->doc, strip);
- xmlFree(strip);
- } else {
- ent = xmlGetDocEntity(node->doc, value);
- }
- if ((ent == NULL) ||
- (ent->etype !=
- XML_EXTERNAL_GENERAL_UNPARSED_ENTITY))
- ret = 4;
- }
- if ((ret == 0) && (val != NULL)) {
- TODO;
- }
- if ((ret == 0) && (node != NULL) &&
- (node->type == XML_ATTRIBUTE_NODE)) {
- xmlAttrPtr attr = (xmlAttrPtr) node;
-
- attr->atype = XML_ATTRIBUTE_ENTITY;
- }
- goto done;
- }
- case XML_SCHEMAS_ENTITIES:
- if ((node == NULL) || (node->doc == NULL))
- goto return3;
- ret = xmlSchemaValAtomicListNode(xmlSchemaTypeEntityDef,
- value, val, node);
- if (ret <= 0)
- ret = 1;
- else
- ret = 0;
- if ((ret == 0) && (node != NULL) &&
- (node->type == XML_ATTRIBUTE_NODE)) {
- xmlAttrPtr attr = (xmlAttrPtr) node;
-
- attr->atype = XML_ATTRIBUTE_ENTITIES;
- }
- goto done;
- case XML_SCHEMAS_NOTATION:{
- xmlChar *uri = NULL;
- xmlChar *local = NULL;
-
- ret = xmlValidateQName(value, 1);
- if ((ret == 0) && (node != NULL)) {
- xmlChar *prefix;
-
- local = xmlSplitQName2(value, &prefix);
- if (prefix != NULL) {
- xmlNsPtr ns;
-
- ns = xmlSearchNs(node->doc, node, prefix);
- if (ns == NULL)
- ret = 1;
- else if (val != NULL)
- uri = xmlStrdup(ns->href);
- }
- if ((local != NULL) && ((val == NULL) || (ret != 0)))
- xmlFree(local);
- if (prefix != NULL)
- xmlFree(prefix);
- }
- if ((node == NULL) || (node->doc == NULL))
- ret = 3;
- if (ret == 0) {
- ret = xmlValidateNotationUse(NULL, node->doc, value);
- if (ret == 1)
- ret = 0;
- else
- ret = 1;
- }
- if ((ret == 0) && (val != NULL)) {
- v = xmlSchemaNewValue(XML_SCHEMAS_NOTATION);
- if (v != NULL) {
- if (local != NULL)
- v->value.qname.name = local;
- else
- v->value.qname.name = xmlStrdup(value);
- if (uri != NULL)
- v->value.qname.uri = uri;
-
- *val = v;
- } else {
- if (local != NULL)
- xmlFree(local);
- if (uri != NULL)
- xmlFree(uri);
- goto error;
- }
- }
- goto done;
- }
- case XML_SCHEMAS_ANYURI:{
- if (*value != 0) {
- xmlURIPtr uri;
- xmlChar *tmpval, *cur;
- if (normOnTheFly) {
- norm = xmlSchemaCollapseString(value);
- if (norm != NULL)
- value = norm;
- }
- tmpval = xmlStrdup(value);
- for (cur = tmpval; *cur; ++cur) {
- if (*cur < 32 || *cur >= 127 || *cur == ' ' ||
- *cur == '<' || *cur == '>' || *cur == '"' ||
- *cur == '{' || *cur == '}' || *cur == '|' ||
- *cur == '\\' || *cur == '^' || *cur == '`' ||
- *cur == '\'')
- *cur = '_';
- }
- uri = xmlParseURI((const char *) tmpval);
- xmlFree(tmpval);
- if (uri == NULL)
- goto return1;
- xmlFreeURI(uri);
- }
-
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_ANYURI);
- if (v == NULL)
- goto error;
- v->value.str = xmlStrdup(value);
- *val = v;
- }
- goto return0;
- }
- case XML_SCHEMAS_HEXBINARY:{
- const xmlChar *cur = value, *start;
- xmlChar *base;
- int total, i = 0;
-
- if (cur == NULL)
- goto return1;
-
- if (normOnTheFly)
- while IS_WSP_BLANK_CH(*cur) cur++;
-
- start = cur;
- while (((*cur >= '0') && (*cur <= '9')) ||
- ((*cur >= 'A') && (*cur <= 'F')) ||
- ((*cur >= 'a') && (*cur <= 'f'))) {
- i++;
- cur++;
- }
- if (normOnTheFly)
- while IS_WSP_BLANK_CH(*cur) cur++;
-
- if (*cur != 0)
- goto return1;
- if ((i % 2) != 0)
- goto return1;
-
- if (val != NULL) {
-
- v = xmlSchemaNewValue(XML_SCHEMAS_HEXBINARY);
- if (v == NULL)
- goto error;
- /*
- * Copy only the normalized piece.
- * CRITICAL TODO: Check this.
- */
- cur = xmlStrndup(start, i);
- if (cur == NULL) {
- xmlSchemaTypeErrMemory(node, "allocating hexbin data");
- xmlFree(v);
- goto return1;
- }
-
- total = i / 2; /* number of octets */
-
- base = (xmlChar *) cur;
- while (i-- > 0) {
- if (*base >= 'a')
- *base = *base - ('a' - 'A');
- base++;
- }
-
- v->value.hex.str = (xmlChar *) cur;
- v->value.hex.total = total;
- *val = v;
- }
- goto return0;
- }
- case XML_SCHEMAS_BASE64BINARY:{
- /* ISSUE:
- *
- * Ignore all stray characters? (yes, currently)
- * Worry about long lines? (no, currently)
- *
- * rfc2045.txt:
- *
- * "The encoded output stream must be represented in lines of
- * no more than 76 characters each. All line breaks or other
- * characters not found in Table 1 must be ignored by decoding
- * software. In base64 data, characters other than those in
- * Table 1, line breaks, and other white space probably
- * indicate a transmission error, about which a warning
- * message or even a message rejection might be appropriate
- * under some circumstances." */
- const xmlChar *cur = value;
- xmlChar *base;
- int total, i = 0, pad = 0;
-
- if (cur == NULL)
- goto return1;
-
- for (; *cur; ++cur) {
- int decc;
-
- decc = _xmlSchemaBase64Decode(*cur);
- if (decc < 0) ;
- else if (decc < 64)
- i++;
- else
- break;
- }
- for (; *cur; ++cur) {
- int decc;
-
- decc = _xmlSchemaBase64Decode(*cur);
- if (decc < 0) ;
- else if (decc < 64)
- goto return1;
- if (decc == 64)
- pad++;
- }
-
- /* rfc2045.txt: "Special processing is performed if fewer than
- * 24 bits are available at the end of the data being encoded.
- * A full encoding quantum is always completed at the end of a
- * body. When fewer than 24 input bits are available in an
- * input group, zero bits are added (on the right) to form an
- * integral number of 6-bit groups. Padding at the end of the
- * data is performed using the "=" character. Since all
- * base64 input is an integral number of octets, only the
- * following cases can arise: (1) the final quantum of
- * encoding input is an integral multiple of 24 bits; here,
- * the final unit of encoded output will be an integral
- * multiple ofindent: Standard input:701: Warning:old style
- * assignment ambiguity in "=*". Assuming "= *" 4 characters
- * with no "=" padding, (2) the final
- * quantum of encoding input is exactly 8 bits; here, the
- * final unit of encoded output will be two characters
- * followed by two "=" padding characters, or (3) the final
- * quantum of encoding input is exactly 16 bits; here, the
- * final unit of encoded output will be three characters
- * followed by one "=" padding character." */
-
- total = 3 * (i / 4);
- if (pad == 0) {
- if (i % 4 != 0)
- goto return1;
- } else if (pad == 1) {
- int decc;
-
- if (i % 4 != 3)
- goto return1;
- for (decc = _xmlSchemaBase64Decode(*cur);
- (decc < 0) || (decc > 63);
- decc = _xmlSchemaBase64Decode(*cur))
- --cur;
- /* 16bits in 24bits means 2 pad bits: nnnnnn nnmmmm mmmm00*/
- /* 00111100 -> 0x3c */
- if (decc & ~0x3c)
- goto return1;
- total += 2;
- } else if (pad == 2) {
- int decc;
-
- if (i % 4 != 2)
- goto return1;
- for (decc = _xmlSchemaBase64Decode(*cur);
- (decc < 0) || (decc > 63);
- decc = _xmlSchemaBase64Decode(*cur))
- --cur;
- /* 8bits in 12bits means 4 pad bits: nnnnnn nn0000 */
- /* 00110000 -> 0x30 */
- if (decc & ~0x30)
- goto return1;
- total += 1;
- } else
- goto return1;
-
- if (val != NULL) {
- v = xmlSchemaNewValue(XML_SCHEMAS_BASE64BINARY);
- if (v == NULL)
- goto error;
- base =
- (xmlChar *) xmlMallocAtomic((i + pad + 1) *
- sizeof(xmlChar));
- if (base == NULL) {
- xmlSchemaTypeErrMemory(node, "allocating base64 data");
- xmlFree(v);
- goto return1;
- }
- v->value.base64.str = base;
- for (cur = value; *cur; ++cur)
- if (_xmlSchemaBase64Decode(*cur) >= 0) {
- *base = *cur;
- ++base;
- }
- *base = 0;
- v->value.base64.total = total;
- *val = v;
- }
- goto return0;
- }
- case XML_SCHEMAS_INTEGER:
- case XML_SCHEMAS_PINTEGER:
- case XML_SCHEMAS_NPINTEGER:
- case XML_SCHEMAS_NINTEGER:
- case XML_SCHEMAS_NNINTEGER:{
- const xmlChar *cur = value;
- unsigned long lo, mi, hi;
- int sign = 0;
-
- if (cur == NULL)
- goto return1;
- if (normOnTheFly)
- while IS_WSP_BLANK_CH(*cur) cur++;
- if (*cur == '-') {
- sign = 1;
- cur++;
- } else if (*cur == '+')
- cur++;
- ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
- if (ret < 0)
- goto return1;
- if (normOnTheFly)
- while IS_WSP_BLANK_CH(*cur) cur++;
- if (*cur != 0)
- goto return1;
- if (type->builtInType == XML_SCHEMAS_NPINTEGER) {
- if ((sign == 0) &&
- ((hi != 0) || (mi != 0) || (lo != 0)))
- goto return1;
- } else if (type->builtInType == XML_SCHEMAS_PINTEGER) {
- if (sign == 1)
- goto return1;
- if ((hi == 0) && (mi == 0) && (lo == 0))
- goto return1;
- } else if (type->builtInType == XML_SCHEMAS_NINTEGER) {
- if (sign == 0)
- goto return1;
- if ((hi == 0) && (mi == 0) && (lo == 0))
- goto return1;
- } else if (type->builtInType == XML_SCHEMAS_NNINTEGER) {
- if ((sign == 1) &&
- ((hi != 0) || (mi != 0) || (lo != 0)))
- goto return1;
- }
- if (val != NULL) {
- v = xmlSchemaNewValue(type->builtInType);
- if (v != NULL) {
- if (ret == 0)
- ret++;
- v->value.decimal.lo = lo;
- v->value.decimal.mi = mi;
- v->value.decimal.hi = hi;
- v->value.decimal.sign = sign;
- v->value.decimal.frac = 0;
- v->value.decimal.total = ret;
- *val = v;
- }
- }
- goto return0;
- }
- case XML_SCHEMAS_LONG:
- case XML_SCHEMAS_BYTE:
- case XML_SCHEMAS_SHORT:
- case XML_SCHEMAS_INT:{
- const xmlChar *cur = value;
- unsigned long lo, mi, hi;
- int sign = 0;
-
- if (cur == NULL)
- goto return1;
- if (*cur == '-') {
- sign = 1;
- cur++;
- } else if (*cur == '+')
- cur++;
- ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
- if (ret < 0)
- goto return1;
- if (*cur != 0)
- goto return1;
- if (type->builtInType == XML_SCHEMAS_LONG) {
- if (hi >= 922) {
- if (hi > 922)
- goto return1;
- if (mi >= 33720368) {
- if (mi > 33720368)
- goto return1;
- if ((sign == 0) && (lo > 54775807))
- goto return1;
- if ((sign == 1) && (lo > 54775808))
- goto return1;
- }
- }
- } else if (type->builtInType == XML_SCHEMAS_INT) {
- if (hi != 0)
- goto return1;
- if (mi >= 21) {
- if (mi > 21)
- goto return1;
- if ((sign == 0) && (lo > 47483647))
- goto return1;
- if ((sign == 1) && (lo > 47483648))
- goto return1;
- }
- } else if (type->builtInType == XML_SCHEMAS_SHORT) {
- if ((mi != 0) || (hi != 0))
- goto return1;
- if ((sign == 1) && (lo > 32768))
- goto return1;
- if ((sign == 0) && (lo > 32767))
- goto return1;
- } else if (type->builtInType == XML_SCHEMAS_BYTE) {
- if ((mi != 0) || (hi != 0))
- goto return1;
- if ((sign == 1) && (lo > 128))
- goto return1;
- if ((sign == 0) && (lo > 127))
- goto return1;
- }
- if (val != NULL) {
- v = xmlSchemaNewValue(type->builtInType);
- if (v != NULL) {
- v->value.decimal.lo = lo;
- v->value.decimal.mi = mi;
- v->value.decimal.hi = hi;
- v->value.decimal.sign = sign;
- v->value.decimal.frac = 0;
- v->value.decimal.total = ret;
- *val = v;
- }
- }
- goto return0;
- }
- case XML_SCHEMAS_UINT:
- case XML_SCHEMAS_ULONG:
- case XML_SCHEMAS_USHORT:
- case XML_SCHEMAS_UBYTE:{
- const xmlChar *cur = value;
- unsigned long lo, mi, hi;
-
- if (cur == NULL)
- goto return1;
- ret = xmlSchemaParseUInt(&cur, &lo, &mi, &hi);
- if (ret < 0)
- goto return1;
- if (*cur != 0)
- goto return1;
- if (type->builtInType == XML_SCHEMAS_ULONG) {
- if (hi >= 1844) {
- if (hi > 1844)
- goto return1;
- if (mi >= 67440737) {
- if (mi > 67440737)
- goto return1;
- if (lo > 9551615)
- goto return1;
- }
- }
- } else if (type->builtInType == XML_SCHEMAS_UINT) {
- if (hi != 0)
- goto return1;
- if (mi >= 42) {
- if (mi > 42)
- goto return1;
- if (lo > 94967295)
- goto return1;
- }
- } else if (type->builtInType == XML_SCHEMAS_USHORT) {
- if ((mi != 0) || (hi != 0))
- goto return1;
- if (lo > 65535)
- goto return1;
- } else if (type->builtInType == XML_SCHEMAS_UBYTE) {
- if ((mi != 0) || (hi != 0))
- goto return1;
- if (lo > 255)
- goto return1;
- }
- if (val != NULL) {
- v = xmlSchemaNewValue(type->builtInType);
- if (v != NULL) {
- v->value.decimal.lo = lo;
- v->value.decimal.mi = mi;
- v->value.decimal.hi = hi;
- v->value.decimal.sign = 0;
- v->value.decimal.frac = 0;
- v->value.decimal.total = ret;
- *val = v;
- }
- }
- goto return0;
- }
- }
-
- done:
- if (norm != NULL)
- xmlFree(norm);
- return (ret);
- return3:
- if (norm != NULL)
- xmlFree(norm);
- return (3);
- return1:
- if (norm != NULL)
- xmlFree(norm);
- return (1);
- return0:
- if (norm != NULL)
- xmlFree(norm);
- return (0);
- error:
- if (norm != NULL)
- xmlFree(norm);
- return (-1);
-}
-
-/**
- * xmlSchemaValPredefTypeNode:
- * @type: the predefined type
- * @value: the value to check
- * @val: the return computed value
- * @node: the node containing the value
- *
- * Check that a value conforms to the lexical space of the predefined type.
- * if true a value is computed and returned in @val.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlSchemaValPredefTypeNode(xmlSchemaTypePtr type, const xmlChar *value,
- xmlSchemaValPtr *val, xmlNodePtr node) {
- return(xmlSchemaValAtomicType(type, value, val, node, 0,
- XML_SCHEMA_WHITESPACE_UNKNOWN, 1, 1, 0));
-}
-
-/**
- * xmlSchemaValPredefTypeNodeNoNorm:
- * @type: the predefined type
- * @value: the value to check
- * @val: the return computed value
- * @node: the node containing the value
- *
- * Check that a value conforms to the lexical space of the predefined type.
- * if true a value is computed and returned in @val.
- * This one does apply any normalization to the value.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlSchemaValPredefTypeNodeNoNorm(xmlSchemaTypePtr type, const xmlChar *value,
- xmlSchemaValPtr *val, xmlNodePtr node) {
- return(xmlSchemaValAtomicType(type, value, val, node, 1,
- XML_SCHEMA_WHITESPACE_UNKNOWN, 1, 0, 1));
-}
-
-/**
- * xmlSchemaValidatePredefinedType:
- * @type: the predefined type
- * @value: the value to check
- * @val: the return computed value
- *
- * Check that a value conforms to the lexical space of the predefined type.
- * if true a value is computed and returned in @val.
- *
- * Returns 0 if this validates, a positive error code number otherwise
- * and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidatePredefinedType(xmlSchemaTypePtr type, const xmlChar *value,
- xmlSchemaValPtr *val) {
- return(xmlSchemaValPredefTypeNode(type, value, val, NULL));
-}
-
-/**
- * xmlSchemaCompareDecimals:
- * @x: a first decimal value
- * @y: a second decimal value
- *
- * Compare 2 decimals
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y and -2 in case of error
- */
-static int
-xmlSchemaCompareDecimals(xmlSchemaValPtr x, xmlSchemaValPtr y)
-{
- xmlSchemaValPtr swp;
- int order = 1, integx, integy, dlen;
- unsigned long hi, mi, lo;
-
- /*
- * First test: If x is -ve and not zero
- */
- if ((x->value.decimal.sign) &&
- ((x->value.decimal.lo != 0) ||
- (x->value.decimal.mi != 0) ||
- (x->value.decimal.hi != 0))) {
- /*
- * Then if y is -ve and not zero reverse the compare
- */
- if ((y->value.decimal.sign) &&
- ((y->value.decimal.lo != 0) ||
- (y->value.decimal.mi != 0) ||
- (y->value.decimal.hi != 0)))
- order = -1;
- /*
- * Otherwise (y >= 0) we have the answer
- */
- else
- return (-1);
- /*
- * If x is not -ve and y is -ve we have the answer
- */
- } else if ((y->value.decimal.sign) &&
- ((y->value.decimal.lo != 0) ||
- (y->value.decimal.mi != 0) ||
- (y->value.decimal.hi != 0))) {
- return (1);
- }
- /*
- * If it's not simply determined by a difference in sign,
- * then we need to compare the actual values of the two nums.
- * To do this, we start by looking at the integral parts.
- * If the number of integral digits differ, then we have our
- * answer.
- */
- integx = x->value.decimal.total - x->value.decimal.frac;
- integy = y->value.decimal.total - y->value.decimal.frac;
- /*
- * NOTE: We changed the "total" for values like "0.1"
- * (or "-0.1" or ".1") to be 1, which was 2 previously.
- * Therefore the special case, when such values are
- * compared with 0, needs to be handled separately;
- * otherwise a zero would be recognized incorrectly as
- * greater than those values. This has the nice side effect
- * that we gain an overall optimized comparison with zeroes.
- * Note that a "0" has a "total" of 1 already.
- */
- if (integx == 1) {
- if (x->value.decimal.lo == 0) {
- if (integy != 1)
- return -order;
- else if (y->value.decimal.lo != 0)
- return -order;
- else
- return(0);
- }
- }
- if (integy == 1) {
- if (y->value.decimal.lo == 0) {
- if (integx != 1)
- return order;
- else if (x->value.decimal.lo != 0)
- return order;
- else
- return(0);
- }
- }
-
- if (integx > integy)
- return order;
- else if (integy > integx)
- return -order;
-
- /*
- * If the number of integral digits is the same for both numbers,
- * then things get a little more complicated. We need to "normalize"
- * the numbers in order to properly compare them. To do this, we
- * look at the total length of each number (length => number of
- * significant digits), and divide the "shorter" by 10 (decreasing
- * the length) until they are of equal length.
- */
- dlen = x->value.decimal.total - y->value.decimal.total;
- if (dlen < 0) { /* y has more digits than x */
- swp = x;
- hi = y->value.decimal.hi;
- mi = y->value.decimal.mi;
- lo = y->value.decimal.lo;
- dlen = -dlen;
- order = -order;
- } else { /* x has more digits than y */
- swp = y;
- hi = x->value.decimal.hi;
- mi = x->value.decimal.mi;
- lo = x->value.decimal.lo;
- }
- while (dlen > 8) { /* in effect, right shift by 10**8 */
- lo = mi;
- mi = hi;
- hi = 0;
- dlen -= 8;
- }
- while (dlen > 0) {
- unsigned long rem1, rem2;
- rem1 = (hi % 10) * 100000000L;
- hi = hi / 10;
- rem2 = (mi % 10) * 100000000L;
- mi = (mi + rem1) / 10;
- lo = (lo + rem2) / 10;
- dlen--;
- }
- if (hi > swp->value.decimal.hi) {
- return order;
- } else if (hi == swp->value.decimal.hi) {
- if (mi > swp->value.decimal.mi) {
- return order;
- } else if (mi == swp->value.decimal.mi) {
- if (lo > swp->value.decimal.lo) {
- return order;
- } else if (lo == swp->value.decimal.lo) {
- if (x->value.decimal.total == y->value.decimal.total) {
- return 0;
- } else {
- return order;
- }
- }
- }
- }
- return -order;
-}
-
-/**
- * xmlSchemaCompareDurations:
- * @x: a first duration value
- * @y: a second duration value
- *
- * Compare 2 durations
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareDurations(xmlSchemaValPtr x, xmlSchemaValPtr y)
-{
- long carry, mon, day;
- double sec;
- int invert = 1;
- long xmon, xday, myear, minday, maxday;
- static const long dayRange [2][12] = {
- { 0, 28, 59, 89, 120, 150, 181, 212, 242, 273, 303, 334, },
- { 0, 31, 62, 92, 123, 153, 184, 215, 245, 276, 306, 337} };
-
- if ((x == NULL) || (y == NULL))
- return -2;
-
- /* months */
- mon = x->value.dur.mon - y->value.dur.mon;
-
- /* seconds */
- sec = x->value.dur.sec - y->value.dur.sec;
- carry = (long)(sec / SECS_PER_DAY);
- sec -= ((double)carry) * SECS_PER_DAY;
-
- /* days */
- day = x->value.dur.day - y->value.dur.day + carry;
-
- /* easy test */
- if (mon == 0) {
- if (day == 0)
- if (sec == 0.0)
- return 0;
- else if (sec < 0.0)
- return -1;
- else
- return 1;
- else if (day < 0)
- return -1;
- else
- return 1;
- }
-
- if (mon > 0) {
- if ((day >= 0) && (sec >= 0.0))
- return 1;
- else {
- xmon = mon;
- xday = -day;
- }
- } else if ((day <= 0) && (sec <= 0.0)) {
- return -1;
- } else {
- invert = -1;
- xmon = -mon;
- xday = day;
- }
-
- myear = xmon / 12;
- if (myear == 0) {
- minday = 0;
- maxday = 0;
- } else {
- maxday = 366 * ((myear + 3) / 4) +
- 365 * ((myear - 1) % 4);
- minday = maxday - 1;
- }
-
- xmon = xmon % 12;
- minday += dayRange[0][xmon];
- maxday += dayRange[1][xmon];
-
- if ((maxday == minday) && (maxday == xday))
- return(0); /* can this really happen ? */
- if (maxday < xday)
- return(-invert);
- if (minday > xday)
- return(invert);
-
- /* indeterminate */
- return 2;
-}
-
-/*
- * macros for adding date/times and durations
- */
-#define FQUOTIENT(a,b) (floor(((double)a/(double)b)))
-#define MODULO(a,b) (a - FQUOTIENT(a,b) * b)
-#define FQUOTIENT_RANGE(a,low,high) (FQUOTIENT((a-low),(high-low)))
-#define MODULO_RANGE(a,low,high) ((MODULO((a-low),(high-low)))+low)
-
-/**
- * xmlSchemaDupVal:
- * @v: the #xmlSchemaValPtr value to duplicate
- *
- * Makes a copy of @v. The calling program is responsible for freeing
- * the returned value.
- *
- * returns a pointer to a duplicated #xmlSchemaValPtr or NULL if error.
- */
-static xmlSchemaValPtr
-xmlSchemaDupVal (xmlSchemaValPtr v)
-{
- xmlSchemaValPtr ret = xmlSchemaNewValue(v->type);
- if (ret == NULL)
- return NULL;
-
- memcpy(ret, v, sizeof(xmlSchemaVal));
- ret->next = NULL;
- return ret;
-}
-
-/**
- * xmlSchemaCopyValue:
- * @val: the precomputed value to be copied
- *
- * Copies the precomputed value. This duplicates any string within.
- *
- * Returns the copy or NULL if a copy for a data-type is not implemented.
- */
-xmlSchemaValPtr
-xmlSchemaCopyValue(xmlSchemaValPtr val)
-{
- xmlSchemaValPtr ret = NULL, prev = NULL, cur;
-
- /*
- * Copy the string values.
- */
- while (val != NULL) {
- switch (val->type) {
- case XML_SCHEMAS_ANYTYPE:
- case XML_SCHEMAS_IDREFS:
- case XML_SCHEMAS_ENTITIES:
- case XML_SCHEMAS_NMTOKENS:
- xmlSchemaFreeValue(ret);
- return (NULL);
- case XML_SCHEMAS_ANYSIMPLETYPE:
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_NORMSTRING:
- case XML_SCHEMAS_TOKEN:
- case XML_SCHEMAS_LANGUAGE:
- case XML_SCHEMAS_NAME:
- case XML_SCHEMAS_NCNAME:
- case XML_SCHEMAS_ID:
- case XML_SCHEMAS_IDREF:
- case XML_SCHEMAS_ENTITY:
- case XML_SCHEMAS_NMTOKEN:
- case XML_SCHEMAS_ANYURI:
- cur = xmlSchemaDupVal(val);
- if (val->value.str != NULL)
- cur->value.str = xmlStrdup(BAD_CAST val->value.str);
- break;
- case XML_SCHEMAS_QNAME:
- case XML_SCHEMAS_NOTATION:
- cur = xmlSchemaDupVal(val);
- if (val->value.qname.name != NULL)
- cur->value.qname.name =
- xmlStrdup(BAD_CAST val->value.qname.name);
- if (val->value.qname.uri != NULL)
- cur->value.qname.uri =
- xmlStrdup(BAD_CAST val->value.qname.uri);
- break;
- case XML_SCHEMAS_HEXBINARY:
- cur = xmlSchemaDupVal(val);
- if (val->value.hex.str != NULL)
- cur->value.hex.str = xmlStrdup(BAD_CAST val->value.hex.str);
- break;
- case XML_SCHEMAS_BASE64BINARY:
- cur = xmlSchemaDupVal(val);
- if (val->value.base64.str != NULL)
- cur->value.base64.str =
- xmlStrdup(BAD_CAST val->value.base64.str);
- break;
- default:
- cur = xmlSchemaDupVal(val);
- break;
- }
- if (ret == NULL)
- ret = cur;
- else
- prev->next = cur;
- prev = cur;
- val = val->next;
- }
- return (ret);
-}
-
-/**
- * _xmlSchemaDateAdd:
- * @dt: an #xmlSchemaValPtr
- * @dur: an #xmlSchemaValPtr of type #XS_DURATION
- *
- * Compute a new date/time from @dt and @dur. This function assumes @dt
- * is either #XML_SCHEMAS_DATETIME, #XML_SCHEMAS_DATE, #XML_SCHEMAS_GYEARMONTH,
- * or #XML_SCHEMAS_GYEAR. The returned #xmlSchemaVal is the same type as
- * @dt. The calling program is responsible for freeing the returned value.
- *
- * Returns a pointer to a new #xmlSchemaVal or NULL if error.
- */
-static xmlSchemaValPtr
-_xmlSchemaDateAdd (xmlSchemaValPtr dt, xmlSchemaValPtr dur)
-{
- xmlSchemaValPtr ret, tmp;
- long carry, tempdays, temp;
- xmlSchemaValDatePtr r, d;
- xmlSchemaValDurationPtr u;
-
- if ((dt == NULL) || (dur == NULL))
- return NULL;
-
- ret = xmlSchemaNewValue(dt->type);
- if (ret == NULL)
- return NULL;
-
- /* make a copy so we don't alter the original value */
- tmp = xmlSchemaDupVal(dt);
- if (tmp == NULL) {
- xmlSchemaFreeValue(ret);
- return NULL;
- }
-
- r = &(ret->value.date);
- d = &(tmp->value.date);
- u = &(dur->value.dur);
-
- /* normalization */
- if (d->mon == 0)
- d->mon = 1;
-
- /* normalize for time zone offset */
- u->sec -= (d->tzo * 60);
- d->tzo = 0;
-
- /* normalization */
- if (d->day == 0)
- d->day = 1;
-
- /* month */
- carry = d->mon + u->mon;
- r->mon = (unsigned int) MODULO_RANGE(carry, 1, 13);
- carry = (long) FQUOTIENT_RANGE(carry, 1, 13);
-
- /* year (may be modified later) */
- r->year = d->year + carry;
- if (r->year == 0) {
- if (d->year > 0)
- r->year--;
- else
- r->year++;
- }
-
- /* time zone */
- r->tzo = d->tzo;
- r->tz_flag = d->tz_flag;
-
- /* seconds */
- r->sec = d->sec + u->sec;
- carry = (long) FQUOTIENT((long)r->sec, 60);
- if (r->sec != 0.0) {
- r->sec = MODULO(r->sec, 60.0);
- }
-
- /* minute */
- carry += d->min;
- r->min = (unsigned int) MODULO(carry, 60);
- carry = (long) FQUOTIENT(carry, 60);
-
- /* hours */
- carry += d->hour;
- r->hour = (unsigned int) MODULO(carry, 24);
- carry = (long)FQUOTIENT(carry, 24);
-
- /*
- * days
- * Note we use tempdays because the temporary values may need more
- * than 5 bits
- */
- if ((VALID_YEAR(r->year)) && (VALID_MONTH(r->mon)) &&
- (d->day > MAX_DAYINMONTH(r->year, r->mon)))
- tempdays = MAX_DAYINMONTH(r->year, r->mon);
- else if (d->day < 1)
- tempdays = 1;
- else
- tempdays = d->day;
-
- tempdays += u->day + carry;
-
- while (1) {
- if (tempdays < 1) {
- long tmon = (long) MODULO_RANGE((int)r->mon-1, 1, 13);
- long tyr = r->year + (long)FQUOTIENT_RANGE((int)r->mon-1, 1, 13);
- if (tyr == 0)
- tyr--;
- /*
- * Coverity detected an overrun in daysInMonth
- * of size 12 at position 12 with index variable "((r)->mon - 1)"
- */
- if (tmon < 1)
- tmon = 1;
- if (tmon > 12)
- tmon = 12;
- tempdays += MAX_DAYINMONTH(tyr, tmon);
- carry = -1;
- } else if (VALID_YEAR(r->year) && VALID_MONTH(r->mon) &&
- tempdays > (long) MAX_DAYINMONTH(r->year, r->mon)) {
- tempdays = tempdays - MAX_DAYINMONTH(r->year, r->mon);
- carry = 1;
- } else
- break;
-
- temp = r->mon + carry;
- r->mon = (unsigned int) MODULO_RANGE(temp, 1, 13);
- r->year = r->year + (unsigned int) FQUOTIENT_RANGE(temp, 1, 13);
- if (r->year == 0) {
- if (temp < 1)
- r->year--;
- else
- r->year++;
- }
- }
-
- r->day = tempdays;
-
- /*
- * adjust the date/time type to the date values
- */
- if (ret->type != XML_SCHEMAS_DATETIME) {
- if ((r->hour) || (r->min) || (r->sec))
- ret->type = XML_SCHEMAS_DATETIME;
- else if (ret->type != XML_SCHEMAS_DATE) {
- if ((r->mon != 1) && (r->day != 1))
- ret->type = XML_SCHEMAS_DATE;
- else if ((ret->type != XML_SCHEMAS_GYEARMONTH) && (r->mon != 1))
- ret->type = XML_SCHEMAS_GYEARMONTH;
- }
- }
-
- xmlSchemaFreeValue(tmp);
-
- return ret;
-}
-
-/**
- * xmlSchemaDateNormalize:
- * @dt: an #xmlSchemaValPtr of a date/time type value.
- * @offset: number of seconds to adjust @dt by.
- *
- * Normalize @dt to GMT time. The @offset parameter is subtracted from
- * the return value is a time-zone offset is present on @dt.
- *
- * Returns a normalized copy of @dt or NULL if error.
- */
-static xmlSchemaValPtr
-xmlSchemaDateNormalize (xmlSchemaValPtr dt, double offset)
-{
- xmlSchemaValPtr dur, ret;
-
- if (dt == NULL)
- return NULL;
-
- if (((dt->type != XML_SCHEMAS_TIME) &&
- (dt->type != XML_SCHEMAS_DATETIME) &&
- (dt->type != XML_SCHEMAS_DATE)) || (dt->value.date.tzo == 0))
- return xmlSchemaDupVal(dt);
-
- dur = xmlSchemaNewValue(XML_SCHEMAS_DURATION);
- if (dur == NULL)
- return NULL;
-
- dur->value.date.sec -= offset;
-
- ret = _xmlSchemaDateAdd(dt, dur);
- if (ret == NULL)
- return NULL;
-
- xmlSchemaFreeValue(dur);
-
- /* ret->value.date.tzo = 0; */
- return ret;
-}
-
-/**
- * _xmlSchemaDateCastYMToDays:
- * @dt: an #xmlSchemaValPtr
- *
- * Convert mon and year of @dt to total number of days. Take the
- * number of years since (or before) 1 AD and add the number of leap
- * years. This is a function because negative
- * years must be handled a little differently and there is no zero year.
- *
- * Returns number of days.
- */
-static long
-_xmlSchemaDateCastYMToDays (const xmlSchemaValPtr dt)
-{
- long ret;
- int mon;
-
- mon = dt->value.date.mon;
- if (mon <= 0) mon = 1; /* normalization */
-
- if (dt->value.date.year <= 0)
- ret = (dt->value.date.year * 365) +
- (((dt->value.date.year+1)/4)-((dt->value.date.year+1)/100)+
- ((dt->value.date.year+1)/400)) +
- DAY_IN_YEAR(0, mon, dt->value.date.year);
- else
- ret = ((dt->value.date.year-1) * 365) +
- (((dt->value.date.year-1)/4)-((dt->value.date.year-1)/100)+
- ((dt->value.date.year-1)/400)) +
- DAY_IN_YEAR(0, mon, dt->value.date.year);
-
- return ret;
-}
-
-/**
- * TIME_TO_NUMBER:
- * @dt: an #xmlSchemaValPtr
- *
- * Calculates the number of seconds in the time portion of @dt.
- *
- * Returns seconds.
- */
-#define TIME_TO_NUMBER(dt) \
- ((double)((dt->value.date.hour * SECS_PER_HOUR) + \
- (dt->value.date.min * SECS_PER_MIN) + \
- (dt->value.date.tzo * SECS_PER_MIN)) + \
- dt->value.date.sec)
-
-/**
- * xmlSchemaCompareDates:
- * @x: a first date/time value
- * @y: a second date/time value
- *
- * Compare 2 date/times
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareDates (xmlSchemaValPtr x, xmlSchemaValPtr y)
-{
- unsigned char xmask, ymask, xor_mask, and_mask;
- xmlSchemaValPtr p1, p2, q1, q2;
- long p1d, p2d, q1d, q2d;
-
- if ((x == NULL) || (y == NULL))
- return -2;
-
- if (x->value.date.tz_flag) {
-
- if (!y->value.date.tz_flag) {
- p1 = xmlSchemaDateNormalize(x, 0);
- p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
- /* normalize y + 14:00 */
- q1 = xmlSchemaDateNormalize(y, (14 * SECS_PER_HOUR));
-
- q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
- if (p1d < q1d) {
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- return -1;
- } else if (p1d == q1d) {
- double sec;
-
- sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
- if (sec < 0.0) {
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- return -1;
- } else {
- int ret = 0;
- /* normalize y - 14:00 */
- q2 = xmlSchemaDateNormalize(y, -(14 * SECS_PER_HOUR));
- q2d = _xmlSchemaDateCastYMToDays(q2) + q2->value.date.day;
- if (p1d > q2d)
- ret = 1;
- else if (p1d == q2d) {
- sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q2);
- if (sec > 0.0)
- ret = 1;
- else
- ret = 2; /* indeterminate */
- }
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- xmlSchemaFreeValue(q2);
- if (ret != 0)
- return(ret);
- }
- } else {
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- }
- }
- } else if (y->value.date.tz_flag) {
- q1 = xmlSchemaDateNormalize(y, 0);
- q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
-
- /* normalize x - 14:00 */
- p1 = xmlSchemaDateNormalize(x, -(14 * SECS_PER_HOUR));
- p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
-
- if (p1d < q1d) {
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- return -1;
- } else if (p1d == q1d) {
- double sec;
-
- sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
- if (sec < 0.0) {
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- return -1;
- } else {
- int ret = 0;
- /* normalize x + 14:00 */
- p2 = xmlSchemaDateNormalize(x, (14 * SECS_PER_HOUR));
- p2d = _xmlSchemaDateCastYMToDays(p2) + p2->value.date.day;
-
- if (p2d > q1d) {
- ret = 1;
- } else if (p2d == q1d) {
- sec = TIME_TO_NUMBER(p2) - TIME_TO_NUMBER(q1);
- if (sec > 0.0)
- ret = 1;
- else
- ret = 2; /* indeterminate */
- }
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- xmlSchemaFreeValue(p2);
- if (ret != 0)
- return(ret);
- }
- } else {
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- }
- }
-
- /*
- * if the same type then calculate the difference
- */
- if (x->type == y->type) {
- int ret = 0;
- q1 = xmlSchemaDateNormalize(y, 0);
- q1d = _xmlSchemaDateCastYMToDays(q1) + q1->value.date.day;
-
- p1 = xmlSchemaDateNormalize(x, 0);
- p1d = _xmlSchemaDateCastYMToDays(p1) + p1->value.date.day;
-
- if (p1d < q1d) {
- ret = -1;
- } else if (p1d > q1d) {
- ret = 1;
- } else {
- double sec;
-
- sec = TIME_TO_NUMBER(p1) - TIME_TO_NUMBER(q1);
- if (sec < 0.0)
- ret = -1;
- else if (sec > 0.0)
- ret = 1;
-
- }
- xmlSchemaFreeValue(p1);
- xmlSchemaFreeValue(q1);
- return(ret);
- }
-
- switch (x->type) {
- case XML_SCHEMAS_DATETIME:
- xmask = 0xf;
- break;
- case XML_SCHEMAS_DATE:
- xmask = 0x7;
- break;
- case XML_SCHEMAS_GYEAR:
- xmask = 0x1;
- break;
- case XML_SCHEMAS_GMONTH:
- xmask = 0x2;
- break;
- case XML_SCHEMAS_GDAY:
- xmask = 0x3;
- break;
- case XML_SCHEMAS_GYEARMONTH:
- xmask = 0x3;
- break;
- case XML_SCHEMAS_GMONTHDAY:
- xmask = 0x6;
- break;
- case XML_SCHEMAS_TIME:
- xmask = 0x8;
- break;
- default:
- xmask = 0;
- break;
- }
-
- switch (y->type) {
- case XML_SCHEMAS_DATETIME:
- ymask = 0xf;
- break;
- case XML_SCHEMAS_DATE:
- ymask = 0x7;
- break;
- case XML_SCHEMAS_GYEAR:
- ymask = 0x1;
- break;
- case XML_SCHEMAS_GMONTH:
- ymask = 0x2;
- break;
- case XML_SCHEMAS_GDAY:
- ymask = 0x3;
- break;
- case XML_SCHEMAS_GYEARMONTH:
- ymask = 0x3;
- break;
- case XML_SCHEMAS_GMONTHDAY:
- ymask = 0x6;
- break;
- case XML_SCHEMAS_TIME:
- ymask = 0x8;
- break;
- default:
- ymask = 0;
- break;
- }
-
- xor_mask = xmask ^ ymask; /* mark type differences */
- and_mask = xmask & ymask; /* mark field specification */
-
- /* year */
- if (xor_mask & 1)
- return 2; /* indeterminate */
- else if (and_mask & 1) {
- if (x->value.date.year < y->value.date.year)
- return -1;
- else if (x->value.date.year > y->value.date.year)
- return 1;
- }
-
- /* month */
- if (xor_mask & 2)
- return 2; /* indeterminate */
- else if (and_mask & 2) {
- if (x->value.date.mon < y->value.date.mon)
- return -1;
- else if (x->value.date.mon > y->value.date.mon)
- return 1;
- }
-
- /* day */
- if (xor_mask & 4)
- return 2; /* indeterminate */
- else if (and_mask & 4) {
- if (x->value.date.day < y->value.date.day)
- return -1;
- else if (x->value.date.day > y->value.date.day)
- return 1;
- }
-
- /* time */
- if (xor_mask & 8)
- return 2; /* indeterminate */
- else if (and_mask & 8) {
- if (x->value.date.hour < y->value.date.hour)
- return -1;
- else if (x->value.date.hour > y->value.date.hour)
- return 1;
- else if (x->value.date.min < y->value.date.min)
- return -1;
- else if (x->value.date.min > y->value.date.min)
- return 1;
- else if (x->value.date.sec < y->value.date.sec)
- return -1;
- else if (x->value.date.sec > y->value.date.sec)
- return 1;
- }
-
- return 0;
-}
-
-/**
- * xmlSchemaComparePreserveReplaceStrings:
- * @x: a first string value
- * @y: a second string value
- * @invert: inverts the result if x < y or x > y.
- *
- * Compare 2 string for their normalized values.
- * @x is a string with whitespace of "preserve", @y is
- * a string with a whitespace of "replace". I.e. @x could
- * be an "xsd:string" and @y an "xsd:normalizedString".
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaComparePreserveReplaceStrings(const xmlChar *x,
- const xmlChar *y,
- int invert)
-{
- int tmp;
-
- while ((*x != 0) && (*y != 0)) {
- if (IS_WSP_REPLACE_CH(*y)) {
- if (! IS_WSP_SPACE_CH(*x)) {
- if ((*x - 0x20) < 0) {
- if (invert)
- return(1);
- else
- return(-1);
- } else {
- if (invert)
- return(-1);
- else
- return(1);
- }
- }
- } else {
- tmp = *x - *y;
- if (tmp < 0) {
- if (invert)
- return(1);
- else
- return(-1);
- }
- if (tmp > 0) {
- if (invert)
- return(-1);
- else
- return(1);
- }
- }
- x++;
- y++;
- }
- if (*x != 0) {
- if (invert)
- return(-1);
- else
- return(1);
- }
- if (*y != 0) {
- if (invert)
- return(1);
- else
- return(-1);
- }
- return(0);
-}
-
-/**
- * xmlSchemaComparePreserveCollapseStrings:
- * @x: a first string value
- * @y: a second string value
- *
- * Compare 2 string for their normalized values.
- * @x is a string with whitespace of "preserve", @y is
- * a string with a whitespace of "collapse". I.e. @x could
- * be an "xsd:string" and @y an "xsd:normalizedString".
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaComparePreserveCollapseStrings(const xmlChar *x,
- const xmlChar *y,
- int invert)
-{
- int tmp;
-
- /*
- * Skip leading blank chars of the collapsed string.
- */
- while IS_WSP_BLANK_CH(*y)
- y++;
-
- while ((*x != 0) && (*y != 0)) {
- if IS_WSP_BLANK_CH(*y) {
- if (! IS_WSP_SPACE_CH(*x)) {
- /*
- * The yv character would have been replaced to 0x20.
- */
- if ((*x - 0x20) < 0) {
- if (invert)
- return(1);
- else
- return(-1);
- } else {
- if (invert)
- return(-1);
- else
- return(1);
- }
- }
- x++;
- y++;
- /*
- * Skip contiguous blank chars of the collapsed string.
- */
- while IS_WSP_BLANK_CH(*y)
- y++;
- } else {
- tmp = *x++ - *y++;
- if (tmp < 0) {
- if (invert)
- return(1);
- else
- return(-1);
- }
- if (tmp > 0) {
- if (invert)
- return(-1);
- else
- return(1);
- }
- }
- }
- if (*x != 0) {
- if (invert)
- return(-1);
- else
- return(1);
- }
- if (*y != 0) {
- /*
- * Skip trailing blank chars of the collapsed string.
- */
- while IS_WSP_BLANK_CH(*y)
- y++;
- if (*y != 0) {
- if (invert)
- return(1);
- else
- return(-1);
- }
- }
- return(0);
-}
-
-/**
- * xmlSchemaComparePreserveCollapseStrings:
- * @x: a first string value
- * @y: a second string value
- *
- * Compare 2 string for their normalized values.
- * @x is a string with whitespace of "preserve", @y is
- * a string with a whitespace of "collapse". I.e. @x could
- * be an "xsd:string" and @y an "xsd:normalizedString".
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareReplaceCollapseStrings(const xmlChar *x,
- const xmlChar *y,
- int invert)
-{
- int tmp;
-
- /*
- * Skip leading blank chars of the collapsed string.
- */
- while IS_WSP_BLANK_CH(*y)
- y++;
-
- while ((*x != 0) && (*y != 0)) {
- if IS_WSP_BLANK_CH(*y) {
- if (! IS_WSP_BLANK_CH(*x)) {
- /*
- * The yv character would have been replaced to 0x20.
- */
- if ((*x - 0x20) < 0) {
- if (invert)
- return(1);
- else
- return(-1);
- } else {
- if (invert)
- return(-1);
- else
- return(1);
- }
- }
- x++;
- y++;
- /*
- * Skip contiguous blank chars of the collapsed string.
- */
- while IS_WSP_BLANK_CH(*y)
- y++;
- } else {
- if IS_WSP_BLANK_CH(*x) {
- /*
- * The xv character would have been replaced to 0x20.
- */
- if ((0x20 - *y) < 0) {
- if (invert)
- return(1);
- else
- return(-1);
- } else {
- if (invert)
- return(-1);
- else
- return(1);
- }
- }
- tmp = *x++ - *y++;
- if (tmp < 0)
- return(-1);
- if (tmp > 0)
- return(1);
- }
- }
- if (*x != 0) {
- if (invert)
- return(-1);
- else
- return(1);
- }
- if (*y != 0) {
- /*
- * Skip trailing blank chars of the collapsed string.
- */
- while IS_WSP_BLANK_CH(*y)
- y++;
- if (*y != 0) {
- if (invert)
- return(1);
- else
- return(-1);
- }
- }
- return(0);
-}
-
-
-/**
- * xmlSchemaCompareReplacedStrings:
- * @x: a first string value
- * @y: a second string value
- *
- * Compare 2 string for their normalized values.
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareReplacedStrings(const xmlChar *x,
- const xmlChar *y)
-{
- int tmp;
-
- while ((*x != 0) && (*y != 0)) {
- if IS_WSP_BLANK_CH(*y) {
- if (! IS_WSP_BLANK_CH(*x)) {
- if ((*x - 0x20) < 0)
- return(-1);
- else
- return(1);
- }
- } else {
- if IS_WSP_BLANK_CH(*x) {
- if ((0x20 - *y) < 0)
- return(-1);
- else
- return(1);
- }
- tmp = *x - *y;
- if (tmp < 0)
- return(-1);
- if (tmp > 0)
- return(1);
- }
- x++;
- y++;
- }
- if (*x != 0)
- return(1);
- if (*y != 0)
- return(-1);
- return(0);
-}
-
-/**
- * xmlSchemaCompareNormStrings:
- * @x: a first string value
- * @y: a second string value
- *
- * Compare 2 string for their normalized values.
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareNormStrings(const xmlChar *x,
- const xmlChar *y) {
- int tmp;
-
- while (IS_BLANK_CH(*x)) x++;
- while (IS_BLANK_CH(*y)) y++;
- while ((*x != 0) && (*y != 0)) {
- if (IS_BLANK_CH(*x)) {
- if (!IS_BLANK_CH(*y)) {
- tmp = *x - *y;
- return(tmp);
- }
- while (IS_BLANK_CH(*x)) x++;
- while (IS_BLANK_CH(*y)) y++;
- } else {
- tmp = *x++ - *y++;
- if (tmp < 0)
- return(-1);
- if (tmp > 0)
- return(1);
- }
- }
- if (*x != 0) {
- while (IS_BLANK_CH(*x)) x++;
- if (*x != 0)
- return(1);
- }
- if (*y != 0) {
- while (IS_BLANK_CH(*y)) y++;
- if (*y != 0)
- return(-1);
- }
- return(0);
-}
-
-/**
- * xmlSchemaCompareFloats:
- * @x: a first float or double value
- * @y: a second float or double value
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareFloats(xmlSchemaValPtr x, xmlSchemaValPtr y) {
- double d1, d2;
-
- if ((x == NULL) || (y == NULL))
- return(-2);
-
- /*
- * Cast everything to doubles.
- */
- if (x->type == XML_SCHEMAS_DOUBLE)
- d1 = x->value.d;
- else if (x->type == XML_SCHEMAS_FLOAT)
- d1 = x->value.f;
- else
- return(-2);
-
- if (y->type == XML_SCHEMAS_DOUBLE)
- d2 = y->value.d;
- else if (y->type == XML_SCHEMAS_FLOAT)
- d2 = y->value.f;
- else
- return(-2);
-
- /*
- * Check for special cases.
- */
- if (xmlXPathIsNaN(d1)) {
- if (xmlXPathIsNaN(d2))
- return(0);
- return(1);
- }
- if (xmlXPathIsNaN(d2))
- return(-1);
- if (d1 == xmlXPathPINF) {
- if (d2 == xmlXPathPINF)
- return(0);
- return(1);
- }
- if (d2 == xmlXPathPINF)
- return(-1);
- if (d1 == xmlXPathNINF) {
- if (d2 == xmlXPathNINF)
- return(0);
- return(-1);
- }
- if (d2 == xmlXPathNINF)
- return(1);
-
- /*
- * basic tests, the last one we should have equality, but
- * portability is more important than speed and handling
- * NaN or Inf in a portable way is always a challenge, so ...
- */
- if (d1 < d2)
- return(-1);
- if (d1 > d2)
- return(1);
- if (d1 == d2)
- return(0);
- return(2);
-}
-
-/**
- * xmlSchemaCompareValues:
- * @x: a first value
- * @xvalue: the first value as a string (optional)
- * @xwtsp: the whitespace type
- * @y: a second value
- * @xvalue: the second value as a string (optional)
- * @ywtsp: the whitespace type
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, 3 if not
- * comparable and -2 in case of error
- */
-static int
-xmlSchemaCompareValuesInternal(xmlSchemaValType xtype,
- xmlSchemaValPtr x,
- const xmlChar *xvalue,
- xmlSchemaWhitespaceValueType xws,
- xmlSchemaValType ytype,
- xmlSchemaValPtr y,
- const xmlChar *yvalue,
- xmlSchemaWhitespaceValueType yws)
-{
- switch (xtype) {
- case XML_SCHEMAS_UNKNOWN:
- case XML_SCHEMAS_ANYTYPE:
- return(-2);
- case XML_SCHEMAS_INTEGER:
- case XML_SCHEMAS_NPINTEGER:
- case XML_SCHEMAS_NINTEGER:
- case XML_SCHEMAS_NNINTEGER:
- case XML_SCHEMAS_PINTEGER:
- case XML_SCHEMAS_INT:
- case XML_SCHEMAS_UINT:
- case XML_SCHEMAS_LONG:
- case XML_SCHEMAS_ULONG:
- case XML_SCHEMAS_SHORT:
- case XML_SCHEMAS_USHORT:
- case XML_SCHEMAS_BYTE:
- case XML_SCHEMAS_UBYTE:
- case XML_SCHEMAS_DECIMAL:
- if ((x == NULL) || (y == NULL))
- return(-2);
- if (ytype == xtype)
- return(xmlSchemaCompareDecimals(x, y));
- if ((ytype == XML_SCHEMAS_DECIMAL) ||
- (ytype == XML_SCHEMAS_INTEGER) ||
- (ytype == XML_SCHEMAS_NPINTEGER) ||
- (ytype == XML_SCHEMAS_NINTEGER) ||
- (ytype == XML_SCHEMAS_NNINTEGER) ||
- (ytype == XML_SCHEMAS_PINTEGER) ||
- (ytype == XML_SCHEMAS_INT) ||
- (ytype == XML_SCHEMAS_UINT) ||
- (ytype == XML_SCHEMAS_LONG) ||
- (ytype == XML_SCHEMAS_ULONG) ||
- (ytype == XML_SCHEMAS_SHORT) ||
- (ytype == XML_SCHEMAS_USHORT) ||
- (ytype == XML_SCHEMAS_BYTE) ||
- (ytype == XML_SCHEMAS_UBYTE))
- return(xmlSchemaCompareDecimals(x, y));
- return(-2);
- case XML_SCHEMAS_DURATION:
- if ((x == NULL) || (y == NULL))
- return(-2);
- if (ytype == XML_SCHEMAS_DURATION)
- return(xmlSchemaCompareDurations(x, y));
- return(-2);
- case XML_SCHEMAS_TIME:
- case XML_SCHEMAS_GDAY:
- case XML_SCHEMAS_GMONTH:
- case XML_SCHEMAS_GMONTHDAY:
- case XML_SCHEMAS_GYEAR:
- case XML_SCHEMAS_GYEARMONTH:
- case XML_SCHEMAS_DATE:
- case XML_SCHEMAS_DATETIME:
- if ((x == NULL) || (y == NULL))
- return(-2);
- if ((ytype == XML_SCHEMAS_DATETIME) ||
- (ytype == XML_SCHEMAS_TIME) ||
- (ytype == XML_SCHEMAS_GDAY) ||
- (ytype == XML_SCHEMAS_GMONTH) ||
- (ytype == XML_SCHEMAS_GMONTHDAY) ||
- (ytype == XML_SCHEMAS_GYEAR) ||
- (ytype == XML_SCHEMAS_DATE) ||
- (ytype == XML_SCHEMAS_GYEARMONTH))
- return (xmlSchemaCompareDates(x, y));
- return (-2);
- /*
- * Note that we will support comparison of string types against
- * anySimpleType as well.
- */
- case XML_SCHEMAS_ANYSIMPLETYPE:
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_NORMSTRING:
- case XML_SCHEMAS_TOKEN:
- case XML_SCHEMAS_LANGUAGE:
- case XML_SCHEMAS_NMTOKEN:
- case XML_SCHEMAS_NAME:
- case XML_SCHEMAS_NCNAME:
- case XML_SCHEMAS_ID:
- case XML_SCHEMAS_IDREF:
- case XML_SCHEMAS_ENTITY:
- case XML_SCHEMAS_ANYURI:
- {
- const xmlChar *xv, *yv;
-
- if (x == NULL)
- xv = xvalue;
- else
- xv = x->value.str;
- if (y == NULL)
- yv = yvalue;
- else
- yv = y->value.str;
- /*
- * TODO: Compare those against QName.
- */
- if (ytype == XML_SCHEMAS_QNAME) {
- TODO
- if (y == NULL)
- return(-2);
- return (-2);
- }
- if ((ytype == XML_SCHEMAS_ANYSIMPLETYPE) ||
- (ytype == XML_SCHEMAS_STRING) ||
- (ytype == XML_SCHEMAS_NORMSTRING) ||
- (ytype == XML_SCHEMAS_TOKEN) ||
- (ytype == XML_SCHEMAS_LANGUAGE) ||
- (ytype == XML_SCHEMAS_NMTOKEN) ||
- (ytype == XML_SCHEMAS_NAME) ||
- (ytype == XML_SCHEMAS_NCNAME) ||
- (ytype == XML_SCHEMAS_ID) ||
- (ytype == XML_SCHEMAS_IDREF) ||
- (ytype == XML_SCHEMAS_ENTITY) ||
- (ytype == XML_SCHEMAS_ANYURI)) {
-
- if (xws == XML_SCHEMA_WHITESPACE_PRESERVE) {
-
- if (yws == XML_SCHEMA_WHITESPACE_PRESERVE) {
- /* TODO: What about x < y or x > y. */
- if (xmlStrEqual(xv, yv))
- return (0);
- else
- return (2);
- } else if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
- return (xmlSchemaComparePreserveReplaceStrings(xv, yv, 0));
- else if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- return (xmlSchemaComparePreserveCollapseStrings(xv, yv, 0));
-
- } else if (xws == XML_SCHEMA_WHITESPACE_REPLACE) {
-
- if (yws == XML_SCHEMA_WHITESPACE_PRESERVE)
- return (xmlSchemaComparePreserveReplaceStrings(yv, xv, 1));
- if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
- return (xmlSchemaCompareReplacedStrings(xv, yv));
- if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- return (xmlSchemaCompareReplaceCollapseStrings(xv, yv, 0));
-
- } else if (xws == XML_SCHEMA_WHITESPACE_COLLAPSE) {
-
- if (yws == XML_SCHEMA_WHITESPACE_PRESERVE)
- return (xmlSchemaComparePreserveCollapseStrings(yv, xv, 1));
- if (yws == XML_SCHEMA_WHITESPACE_REPLACE)
- return (xmlSchemaCompareReplaceCollapseStrings(yv, xv, 1));
- if (yws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- return (xmlSchemaCompareNormStrings(xv, yv));
- } else
- return (-2);
-
- }
- return (-2);
- }
- case XML_SCHEMAS_QNAME:
- case XML_SCHEMAS_NOTATION:
- if ((x == NULL) || (y == NULL))
- return(-2);
- if ((ytype == XML_SCHEMAS_QNAME) ||
- (ytype == XML_SCHEMAS_NOTATION)) {
- if ((xmlStrEqual(x->value.qname.name, y->value.qname.name)) &&
- (xmlStrEqual(x->value.qname.uri, y->value.qname.uri)))
- return(0);
- return(2);
- }
- return (-2);
- case XML_SCHEMAS_FLOAT:
- case XML_SCHEMAS_DOUBLE:
- if ((x == NULL) || (y == NULL))
- return(-2);
- if ((ytype == XML_SCHEMAS_FLOAT) ||
- (ytype == XML_SCHEMAS_DOUBLE))
- return (xmlSchemaCompareFloats(x, y));
- return (-2);
- case XML_SCHEMAS_BOOLEAN:
- if ((x == NULL) || (y == NULL))
- return(-2);
- if (ytype == XML_SCHEMAS_BOOLEAN) {
- if (x->value.b == y->value.b)
- return(0);
- if (x->value.b == 0)
- return(-1);
- return(1);
- }
- return (-2);
- case XML_SCHEMAS_HEXBINARY:
- if ((x == NULL) || (y == NULL))
- return(-2);
- if (ytype == XML_SCHEMAS_HEXBINARY) {
- if (x->value.hex.total == y->value.hex.total) {
- int ret = xmlStrcmp(x->value.hex.str, y->value.hex.str);
- if (ret > 0)
- return(1);
- else if (ret == 0)
- return(0);
- }
- else if (x->value.hex.total > y->value.hex.total)
- return(1);
-
- return(-1);
- }
- return (-2);
- case XML_SCHEMAS_BASE64BINARY:
- if ((x == NULL) || (y == NULL))
- return(-2);
- if (ytype == XML_SCHEMAS_BASE64BINARY) {
- if (x->value.base64.total == y->value.base64.total) {
- int ret = xmlStrcmp(x->value.base64.str,
- y->value.base64.str);
- if (ret > 0)
- return(1);
- else if (ret == 0)
- return(0);
- else
- return(-1);
- }
- else if (x->value.base64.total > y->value.base64.total)
- return(1);
- else
- return(-1);
- }
- return (-2);
- case XML_SCHEMAS_IDREFS:
- case XML_SCHEMAS_ENTITIES:
- case XML_SCHEMAS_NMTOKENS:
- TODO
- break;
- }
- return -2;
-}
-
-/**
- * xmlSchemaCompareValues:
- * @x: a first value
- * @y: a second value
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-int
-xmlSchemaCompareValues(xmlSchemaValPtr x, xmlSchemaValPtr y) {
- xmlSchemaWhitespaceValueType xws, yws;
-
- if ((x == NULL) || (y == NULL))
- return(-2);
- if (x->type == XML_SCHEMAS_STRING)
- xws = XML_SCHEMA_WHITESPACE_PRESERVE;
- else if (x->type == XML_SCHEMAS_NORMSTRING)
- xws = XML_SCHEMA_WHITESPACE_REPLACE;
- else
- xws = XML_SCHEMA_WHITESPACE_COLLAPSE;
-
- if (y->type == XML_SCHEMAS_STRING)
- yws = XML_SCHEMA_WHITESPACE_PRESERVE;
- else if (y->type == XML_SCHEMAS_NORMSTRING)
- yws = XML_SCHEMA_WHITESPACE_REPLACE;
- else
- yws = XML_SCHEMA_WHITESPACE_COLLAPSE;
-
- return(xmlSchemaCompareValuesInternal(x->type, x, NULL, xws, y->type,
- y, NULL, yws));
-}
-
-/**
- * xmlSchemaCompareValuesWhtsp:
- * @x: a first value
- * @xws: the whitespace value of x
- * @y: a second value
- * @yws: the whitespace value of y
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-int
-xmlSchemaCompareValuesWhtsp(xmlSchemaValPtr x,
- xmlSchemaWhitespaceValueType xws,
- xmlSchemaValPtr y,
- xmlSchemaWhitespaceValueType yws)
-{
- if ((x == NULL) || (y == NULL))
- return(-2);
- return(xmlSchemaCompareValuesInternal(x->type, x, NULL, xws, y->type,
- y, NULL, yws));
-}
-
-/**
- * xmlSchemaCompareValuesWhtspExt:
- * @x: a first value
- * @xws: the whitespace value of x
- * @y: a second value
- * @yws: the whitespace value of y
- *
- * Compare 2 values
- *
- * Returns -1 if x < y, 0 if x == y, 1 if x > y, 2 if x <> y, and -2 in
- * case of error
- */
-static int
-xmlSchemaCompareValuesWhtspExt(xmlSchemaValType xtype,
- xmlSchemaValPtr x,
- const xmlChar *xvalue,
- xmlSchemaWhitespaceValueType xws,
- xmlSchemaValType ytype,
- xmlSchemaValPtr y,
- const xmlChar *yvalue,
- xmlSchemaWhitespaceValueType yws)
-{
- return(xmlSchemaCompareValuesInternal(xtype, x, xvalue, xws, ytype, y,
- yvalue, yws));
-}
-
-/**
- * xmlSchemaNormLen:
- * @value: a string
- *
- * Computes the UTF8 length of the normalized value of the string
- *
- * Returns the length or -1 in case of error.
- */
-static int
-xmlSchemaNormLen(const xmlChar *value) {
- const xmlChar *utf;
- int ret = 0;
-
- if (value == NULL)
- return(-1);
- utf = value;
- while (IS_BLANK_CH(*utf)) utf++;
- while (*utf != 0) {
- if (utf[0] & 0x80) {
- if ((utf[1] & 0xc0) != 0x80)
- return(-1);
- if ((utf[0] & 0xe0) == 0xe0) {
- if ((utf[2] & 0xc0) != 0x80)
- return(-1);
- if ((utf[0] & 0xf0) == 0xf0) {
- if ((utf[0] & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
- return(-1);
- utf += 4;
- } else {
- utf += 3;
- }
- } else {
- utf += 2;
- }
- } else if (IS_BLANK_CH(*utf)) {
- while (IS_BLANK_CH(*utf)) utf++;
- if (*utf == 0)
- break;
- } else {
- utf++;
- }
- ret++;
- }
- return(ret);
-}
-
-/**
- * xmlSchemaGetFacetValueAsULong:
- * @facet: an schemas type facet
- *
- * Extract the value of a facet
- *
- * Returns the value as a long
- */
-unsigned long
-xmlSchemaGetFacetValueAsULong(xmlSchemaFacetPtr facet)
-{
- /*
- * TODO: Check if this is a decimal.
- */
- if (facet == NULL)
- return 0;
- return ((unsigned long) facet->val->value.decimal.lo);
-}
-
-/**
- * xmlSchemaValidateListSimpleTypeFacet:
- * @facet: the facet to check
- * @value: the lexical repr of the value to validate
- * @actualLen: the number of list items
- * @expectedLen: the resulting expected number of list items
- *
- * Checks the value of a list simple type against a facet.
- *
- * Returns 0 if the value is valid, a positive error code
- * number otherwise and -1 in case of an internal error.
- */
-int
-xmlSchemaValidateListSimpleTypeFacet(xmlSchemaFacetPtr facet,
- const xmlChar *value,
- unsigned long actualLen,
- unsigned long *expectedLen)
-{
- if (facet == NULL)
- return(-1);
- /*
- * TODO: Check if this will work with large numbers.
- * (compare value.decimal.mi and value.decimal.hi as well?).
- */
- if (facet->type == XML_SCHEMA_FACET_LENGTH) {
- if (actualLen != facet->val->value.decimal.lo) {
- if (expectedLen != NULL)
- *expectedLen = facet->val->value.decimal.lo;
- return (XML_SCHEMAV_CVC_LENGTH_VALID);
- }
- } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
- if (actualLen < facet->val->value.decimal.lo) {
- if (expectedLen != NULL)
- *expectedLen = facet->val->value.decimal.lo;
- return (XML_SCHEMAV_CVC_MINLENGTH_VALID);
- }
- } else if (facet->type == XML_SCHEMA_FACET_MAXLENGTH) {
- if (actualLen > facet->val->value.decimal.lo) {
- if (expectedLen != NULL)
- *expectedLen = facet->val->value.decimal.lo;
- return (XML_SCHEMAV_CVC_MAXLENGTH_VALID);
- }
- } else
- /*
- * NOTE: That we can pass NULL as xmlSchemaValPtr to
- * xmlSchemaValidateFacet, since the remaining facet types
- * are: XML_SCHEMA_FACET_PATTERN, XML_SCHEMA_FACET_ENUMERATION.
- */
- return(xmlSchemaValidateFacet(NULL, facet, value, NULL));
- return (0);
-}
-
-/**
- * xmlSchemaValidateLengthFacet:
- * @type: the built-in type
- * @facet: the facet to check
- * @value: the lexical repr. of the value to be validated
- * @val: the precomputed value
- * @ws: the whitespace type of the value
- * @length: the actual length of the value
- *
- * Checka a value against a "length", "minLength" and "maxLength"
- * facet; sets @length to the computed length of @value.
- *
- * Returns 0 if the value is valid, a positive error code
- * otherwise and -1 in case of an internal or API error.
- */
-static int
-xmlSchemaValidateLengthFacetInternal(xmlSchemaFacetPtr facet,
- xmlSchemaValType valType,
- const xmlChar *value,
- xmlSchemaValPtr val,
- unsigned long *length,
- xmlSchemaWhitespaceValueType ws)
-{
- unsigned int len = 0;
-
- if ((length == NULL) || (facet == NULL))
- return (-1);
- *length = 0;
- if ((facet->type != XML_SCHEMA_FACET_LENGTH) &&
- (facet->type != XML_SCHEMA_FACET_MAXLENGTH) &&
- (facet->type != XML_SCHEMA_FACET_MINLENGTH))
- return (-1);
-
- /*
- * TODO: length, maxLength and minLength must be of type
- * nonNegativeInteger only. Check if decimal is used somehow.
- */
- if ((facet->val == NULL) ||
- ((facet->val->type != XML_SCHEMAS_DECIMAL) &&
- (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
- (facet->val->value.decimal.frac != 0)) {
- return(-1);
- }
- if ((val != NULL) && (val->type == XML_SCHEMAS_HEXBINARY))
- len = val->value.hex.total;
- else if ((val != NULL) && (val->type == XML_SCHEMAS_BASE64BINARY))
- len = val->value.base64.total;
- else {
- switch (valType) {
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_NORMSTRING:
- if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
- /*
- * This is to ensure API compatibility with the old
- * xmlSchemaValidateLengthFacet(). Anyway, this was and
- * is not the correct handling.
- * TODO: Get rid of this case somehow.
- */
- if (valType == XML_SCHEMAS_STRING)
- len = xmlUTF8Strlen(value);
- else
- len = xmlSchemaNormLen(value);
- } else if (value != NULL) {
- if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- len = xmlSchemaNormLen(value);
- else
- /*
- * Should be OK for "preserve" as well.
- */
- len = xmlUTF8Strlen(value);
- }
- break;
- case XML_SCHEMAS_IDREF:
- case XML_SCHEMAS_TOKEN:
- case XML_SCHEMAS_LANGUAGE:
- case XML_SCHEMAS_NMTOKEN:
- case XML_SCHEMAS_NAME:
- case XML_SCHEMAS_NCNAME:
- case XML_SCHEMAS_ID:
- /*
- * FIXME: What exactly to do with anyURI?
- */
- case XML_SCHEMAS_ANYURI:
- if (value != NULL)
- len = xmlSchemaNormLen(value);
- break;
- case XML_SCHEMAS_QNAME:
- case XML_SCHEMAS_NOTATION:
- /*
- * For QName and NOTATION, those facets are
- * deprecated and should be ignored.
- */
- return (0);
- default:
- TODO
- }
- }
- *length = (unsigned long) len;
- /*
- * TODO: Return the whole expected value, i.e. "lo", "mi" and "hi".
- */
- if (facet->type == XML_SCHEMA_FACET_LENGTH) {
- if (len != facet->val->value.decimal.lo)
- return(XML_SCHEMAV_CVC_LENGTH_VALID);
- } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
- if (len < facet->val->value.decimal.lo)
- return(XML_SCHEMAV_CVC_MINLENGTH_VALID);
- } else {
- if (len > facet->val->value.decimal.lo)
- return(XML_SCHEMAV_CVC_MAXLENGTH_VALID);
- }
-
- return (0);
-}
-
-/**
- * xmlSchemaValidateLengthFacet:
- * @type: the built-in type
- * @facet: the facet to check
- * @value: the lexical repr. of the value to be validated
- * @val: the precomputed value
- * @length: the actual length of the value
- *
- * Checka a value against a "length", "minLength" and "maxLength"
- * facet; sets @length to the computed length of @value.
- *
- * Returns 0 if the value is valid, a positive error code
- * otherwise and -1 in case of an internal or API error.
- */
-int
-xmlSchemaValidateLengthFacet(xmlSchemaTypePtr type,
- xmlSchemaFacetPtr facet,
- const xmlChar *value,
- xmlSchemaValPtr val,
- unsigned long *length)
-{
- if (type == NULL)
- return(-1);
- return (xmlSchemaValidateLengthFacetInternal(facet,
- type->builtInType, value, val, length,
- XML_SCHEMA_WHITESPACE_UNKNOWN));
-}
-
-/**
- * xmlSchemaValidateLengthFacetWhtsp:
- * @facet: the facet to check
- * @valType: the built-in type
- * @value: the lexical repr. of the value to be validated
- * @val: the precomputed value
- * @ws: the whitespace type of the value
- * @length: the actual length of the value
- *
- * Checka a value against a "length", "minLength" and "maxLength"
- * facet; sets @length to the computed length of @value.
- *
- * Returns 0 if the value is valid, a positive error code
- * otherwise and -1 in case of an internal or API error.
- */
-int
-xmlSchemaValidateLengthFacetWhtsp(xmlSchemaFacetPtr facet,
- xmlSchemaValType valType,
- const xmlChar *value,
- xmlSchemaValPtr val,
- unsigned long *length,
- xmlSchemaWhitespaceValueType ws)
-{
- return (xmlSchemaValidateLengthFacetInternal(facet, valType, value, val,
- length, ws));
-}
-
-/**
- * xmlSchemaValidateFacetInternal:
- * @facet: the facet to check
- * @fws: the whitespace type of the facet's value
- * @valType: the built-in type of the value
- * @value: the lexical repr of the value to validate
- * @val: the precomputed value
- * @ws: the whitespace type of the value
- *
- * Check a value against a facet condition
- *
- * Returns 0 if the element is schemas valid, a positive error code
- * number otherwise and -1 in case of internal or API error.
- */
-static int
-xmlSchemaValidateFacetInternal(xmlSchemaFacetPtr facet,
- xmlSchemaWhitespaceValueType fws,
- xmlSchemaValType valType,
- const xmlChar *value,
- xmlSchemaValPtr val,
- xmlSchemaWhitespaceValueType ws)
-{
- int ret;
- int stringType;
-
- if (facet == NULL)
- return(-1);
-
- switch (facet->type) {
- case XML_SCHEMA_FACET_PATTERN:
- /*
- * NOTE that for patterns, the @value needs to be the normalized
- * value, *not* the lexical initial value or the canonical value.
- */
- if (value == NULL)
- return(-1);
- /*
- * If string-derived type, regexp must be tested on the value space of
- * the datatype.
- * See https://www.w3.org/TR/xmlschema-2/#rf-pattern
- */
- stringType = val && ((val->type >= XML_SCHEMAS_STRING && val->type <= XML_SCHEMAS_NORMSTRING)
- || (val->type >= XML_SCHEMAS_TOKEN && val->type <= XML_SCHEMAS_NCNAME));
- ret = xmlRegexpExec(facet->regexp,
- (stringType && val->value.str) ? val->value.str : value);
- if (ret == 1)
- return(0);
- if (ret == 0)
- return(XML_SCHEMAV_CVC_PATTERN_VALID);
- return(ret);
- case XML_SCHEMA_FACET_MAXEXCLUSIVE:
- ret = xmlSchemaCompareValues(val, facet->val);
- if (ret == -2)
- return(-1);
- if (ret == -1)
- return(0);
- return(XML_SCHEMAV_CVC_MAXEXCLUSIVE_VALID);
- case XML_SCHEMA_FACET_MAXINCLUSIVE:
- ret = xmlSchemaCompareValues(val, facet->val);
- if (ret == -2)
- return(-1);
- if ((ret == -1) || (ret == 0))
- return(0);
- return(XML_SCHEMAV_CVC_MAXINCLUSIVE_VALID);
- case XML_SCHEMA_FACET_MINEXCLUSIVE:
- ret = xmlSchemaCompareValues(val, facet->val);
- if (ret == -2)
- return(-1);
- if (ret == 1)
- return(0);
- return(XML_SCHEMAV_CVC_MINEXCLUSIVE_VALID);
- case XML_SCHEMA_FACET_MININCLUSIVE:
- ret = xmlSchemaCompareValues(val, facet->val);
- if (ret == -2)
- return(-1);
- if ((ret == 1) || (ret == 0))
- return(0);
- return(XML_SCHEMAV_CVC_MININCLUSIVE_VALID);
- case XML_SCHEMA_FACET_WHITESPACE:
- /* TODO whitespaces */
- /*
- * NOTE: Whitespace should be handled to normalize
- * the value to be validated against a the facets;
- * not to normalize the value in-between.
- */
- return(0);
- case XML_SCHEMA_FACET_ENUMERATION:
- if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
- /*
- * This is to ensure API compatibility with the old
- * xmlSchemaValidateFacet().
- * TODO: Get rid of this case.
- */
- if ((facet->value != NULL) &&
- (xmlStrEqual(facet->value, value)))
- return(0);
- } else {
- ret = xmlSchemaCompareValuesWhtspExt(facet->val->type,
- facet->val, facet->value, fws, valType, val,
- value, ws);
- if (ret == -2)
- return(-1);
- if (ret == 0)
- return(0);
- }
- return(XML_SCHEMAV_CVC_ENUMERATION_VALID);
- case XML_SCHEMA_FACET_LENGTH:
- /*
- * SPEC (1.3) "if {primitive type definition} is QName or NOTATION,
- * then any {value} is facet-valid."
- */
- if ((valType == XML_SCHEMAS_QNAME) ||
- (valType == XML_SCHEMAS_NOTATION))
- return (0);
- /* No break on purpose. */
- case XML_SCHEMA_FACET_MAXLENGTH:
- case XML_SCHEMA_FACET_MINLENGTH: {
- unsigned int len = 0;
-
- if ((valType == XML_SCHEMAS_QNAME) ||
- (valType == XML_SCHEMAS_NOTATION))
- return (0);
- /*
- * TODO: length, maxLength and minLength must be of type
- * nonNegativeInteger only. Check if decimal is used somehow.
- */
- if ((facet->val == NULL) ||
- ((facet->val->type != XML_SCHEMAS_DECIMAL) &&
- (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
- (facet->val->value.decimal.frac != 0)) {
- return(-1);
- }
- if ((val != NULL) && (val->type == XML_SCHEMAS_HEXBINARY))
- len = val->value.hex.total;
- else if ((val != NULL) && (val->type == XML_SCHEMAS_BASE64BINARY))
- len = val->value.base64.total;
- else {
- switch (valType) {
- case XML_SCHEMAS_STRING:
- case XML_SCHEMAS_NORMSTRING:
- if (ws == XML_SCHEMA_WHITESPACE_UNKNOWN) {
- /*
- * This is to ensure API compatibility with the old
- * xmlSchemaValidateFacet(). Anyway, this was and
- * is not the correct handling.
- * TODO: Get rid of this case somehow.
- */
- if (valType == XML_SCHEMAS_STRING)
- len = xmlUTF8Strlen(value);
- else
- len = xmlSchemaNormLen(value);
- } else if (value != NULL) {
- if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- len = xmlSchemaNormLen(value);
- else
- /*
- * Should be OK for "preserve" as well.
- */
- len = xmlUTF8Strlen(value);
- }
- break;
- case XML_SCHEMAS_IDREF:
- case XML_SCHEMAS_TOKEN:
- case XML_SCHEMAS_LANGUAGE:
- case XML_SCHEMAS_NMTOKEN:
- case XML_SCHEMAS_NAME:
- case XML_SCHEMAS_NCNAME:
- case XML_SCHEMAS_ID:
- case XML_SCHEMAS_ANYURI:
- if (value != NULL)
- len = xmlSchemaNormLen(value);
- break;
- default:
- TODO
- }
- }
- if (facet->type == XML_SCHEMA_FACET_LENGTH) {
- if (len != facet->val->value.decimal.lo)
- return(XML_SCHEMAV_CVC_LENGTH_VALID);
- } else if (facet->type == XML_SCHEMA_FACET_MINLENGTH) {
- if (len < facet->val->value.decimal.lo)
- return(XML_SCHEMAV_CVC_MINLENGTH_VALID);
- } else {
- if (len > facet->val->value.decimal.lo)
- return(XML_SCHEMAV_CVC_MAXLENGTH_VALID);
- }
- break;
- }
- case XML_SCHEMA_FACET_TOTALDIGITS:
- case XML_SCHEMA_FACET_FRACTIONDIGITS:
-
- if ((facet->val == NULL) ||
- ((facet->val->type != XML_SCHEMAS_PINTEGER) &&
- (facet->val->type != XML_SCHEMAS_NNINTEGER)) ||
- (facet->val->value.decimal.frac != 0)) {
- return(-1);
- }
- if ((val == NULL) ||
- ((val->type != XML_SCHEMAS_DECIMAL) &&
- (val->type != XML_SCHEMAS_INTEGER) &&
- (val->type != XML_SCHEMAS_NPINTEGER) &&
- (val->type != XML_SCHEMAS_NINTEGER) &&
- (val->type != XML_SCHEMAS_NNINTEGER) &&
- (val->type != XML_SCHEMAS_PINTEGER) &&
- (val->type != XML_SCHEMAS_INT) &&
- (val->type != XML_SCHEMAS_UINT) &&
- (val->type != XML_SCHEMAS_LONG) &&
- (val->type != XML_SCHEMAS_ULONG) &&
- (val->type != XML_SCHEMAS_SHORT) &&
- (val->type != XML_SCHEMAS_USHORT) &&
- (val->type != XML_SCHEMAS_BYTE) &&
- (val->type != XML_SCHEMAS_UBYTE))) {
- return(-1);
- }
- if (facet->type == XML_SCHEMA_FACET_TOTALDIGITS) {
- if (val->value.decimal.total > facet->val->value.decimal.lo)
- return(XML_SCHEMAV_CVC_TOTALDIGITS_VALID);
-
- } else if (facet->type == XML_SCHEMA_FACET_FRACTIONDIGITS) {
- if (val->value.decimal.frac > facet->val->value.decimal.lo)
- return(XML_SCHEMAV_CVC_FRACTIONDIGITS_VALID);
- }
- break;
- default:
- TODO
- }
- return(0);
-
-}
-
-/**
- * xmlSchemaValidateFacet:
- * @base: the base type
- * @facet: the facet to check
- * @value: the lexical repr of the value to validate
- * @val: the precomputed value
- *
- * Check a value against a facet condition
- *
- * Returns 0 if the element is schemas valid, a positive error code
- * number otherwise and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidateFacet(xmlSchemaTypePtr base,
- xmlSchemaFacetPtr facet,
- const xmlChar *value,
- xmlSchemaValPtr val)
-{
- /*
- * This tries to ensure API compatibility regarding the old
- * xmlSchemaValidateFacet() and the new xmlSchemaValidateFacetInternal() and
- * xmlSchemaValidateFacetWhtsp().
- */
- if (val != NULL)
- return(xmlSchemaValidateFacetInternal(facet,
- XML_SCHEMA_WHITESPACE_UNKNOWN, val->type, value, val,
- XML_SCHEMA_WHITESPACE_UNKNOWN));
- else if (base != NULL)
- return(xmlSchemaValidateFacetInternal(facet,
- XML_SCHEMA_WHITESPACE_UNKNOWN, base->builtInType, value, val,
- XML_SCHEMA_WHITESPACE_UNKNOWN));
- return(-1);
-}
-
-/**
- * xmlSchemaValidateFacetWhtsp:
- * @facet: the facet to check
- * @fws: the whitespace type of the facet's value
- * @valType: the built-in type of the value
- * @value: the lexical (or normalized for pattern) repr of the value to validate
- * @val: the precomputed value
- * @ws: the whitespace type of the value
- *
- * Check a value against a facet condition. This takes value normalization
- * according to the specified whitespace types into account.
- * Note that @value needs to be the *normalized* value if the facet
- * is of type "pattern".
- *
- * Returns 0 if the element is schemas valid, a positive error code
- * number otherwise and -1 in case of internal or API error.
- */
-int
-xmlSchemaValidateFacetWhtsp(xmlSchemaFacetPtr facet,
- xmlSchemaWhitespaceValueType fws,
- xmlSchemaValType valType,
- const xmlChar *value,
- xmlSchemaValPtr val,
- xmlSchemaWhitespaceValueType ws)
-{
- return(xmlSchemaValidateFacetInternal(facet, fws, valType,
- value, val, ws));
-}
-
-#if 0
-#ifndef DBL_DIG
-#define DBL_DIG 16
-#endif
-#ifndef DBL_EPSILON
-#define DBL_EPSILON 1E-9
-#endif
-
-#define INTEGER_DIGITS DBL_DIG
-#define FRACTION_DIGITS (DBL_DIG + 1)
-#define EXPONENT_DIGITS (3 + 2)
-
-/**
- * xmlXPathFormatNumber:
- * @number: number to format
- * @buffer: output buffer
- * @buffersize: size of output buffer
- *
- * Convert the number into a string representation.
- */
-static void
-xmlSchemaFormatFloat(double number, char buffer[], int buffersize)
-{
- switch (xmlXPathIsInf(number)) {
- case 1:
- if (buffersize > (int)sizeof("INF"))
- snprintf(buffer, buffersize, "INF");
- break;
- case -1:
- if (buffersize > (int)sizeof("-INF"))
- snprintf(buffer, buffersize, "-INF");
- break;
- default:
- if (xmlXPathIsNaN(number)) {
- if (buffersize > (int)sizeof("NaN"))
- snprintf(buffer, buffersize, "NaN");
- } else if (number == 0) {
- snprintf(buffer, buffersize, "0.0E0");
- } else {
- /* 3 is sign, decimal point, and terminating zero */
- char work[DBL_DIG + EXPONENT_DIGITS + 3];
- int integer_place, fraction_place;
- char *ptr;
- char *after_fraction;
- double absolute_value;
- int size;
-
- absolute_value = fabs(number);
-
- /*
- * Result is in work, and after_fraction points
- * just past the fractional part.
- * Use scientific notation
- */
- integer_place = DBL_DIG + EXPONENT_DIGITS + 1;
- fraction_place = DBL_DIG - 1;
- snprintf(work, sizeof(work),"%*.*e",
- integer_place, fraction_place, number);
- after_fraction = strchr(work + DBL_DIG, 'e');
- /* Remove fractional trailing zeroes */
- ptr = after_fraction;
- while (*(--ptr) == '0')
- ;
- if (*ptr != '.')
- ptr++;
- while ((*ptr++ = *after_fraction++) != 0);
-
- /* Finally copy result back to caller */
- size = strlen(work) + 1;
- if (size > buffersize) {
- work[buffersize - 1] = 0;
- size = buffersize;
- }
- memmove(buffer, work, size);
- }
- break;
- }
-}
-#endif
-
-/**
- * xmlSchemaGetCanonValue:
- * @val: the precomputed value
- * @retValue: the returned value
- *
- * Get the canonical lexical representation of the value.
- * The caller has to FREE the returned retValue.
- *
- * WARNING: Some value types are not supported yet, resulting
- * in a @retValue of "???".
- *
- * TODO: XML Schema 1.0 does not define canonical representations
- * for: duration, gYearMonth, gYear, gMonthDay, gMonth, gDay,
- * anyURI, QName, NOTATION. This will be fixed in XML Schema 1.1.
- *
- *
- * Returns 0 if the value could be built, 1 if the value type is
- * not supported yet and -1 in case of API errors.
- */
-int
-xmlSchemaGetCanonValue(xmlSchemaValPtr val, const xmlChar **retValue)
-{
- if ((retValue == NULL) || (val == NULL))
- return (-1);
- *retValue = NULL;
- switch (val->type) {
- case XML_SCHEMAS_STRING:
- if (val->value.str == NULL)
- *retValue = BAD_CAST xmlStrdup(BAD_CAST "");
- else
- *retValue =
- BAD_CAST xmlStrdup((const xmlChar *) val->value.str);
- break;
- case XML_SCHEMAS_NORMSTRING:
- if (val->value.str == NULL)
- *retValue = BAD_CAST xmlStrdup(BAD_CAST "");
- else {
- *retValue = xmlSchemaWhiteSpaceReplace(
- (const xmlChar *) val->value.str);
- if ((*retValue) == NULL)
- *retValue = BAD_CAST xmlStrdup(
- (const xmlChar *) val->value.str);
- }
- break;
- case XML_SCHEMAS_TOKEN:
- case XML_SCHEMAS_LANGUAGE:
- case XML_SCHEMAS_NMTOKEN:
- case XML_SCHEMAS_NAME:
- case XML_SCHEMAS_NCNAME:
- case XML_SCHEMAS_ID:
- case XML_SCHEMAS_IDREF:
- case XML_SCHEMAS_ENTITY:
- case XML_SCHEMAS_NOTATION: /* Unclear */
- case XML_SCHEMAS_ANYURI: /* Unclear */
- if (val->value.str == NULL)
- return (-1);
- *retValue =
- BAD_CAST xmlSchemaCollapseString(BAD_CAST val->value.str);
- if (*retValue == NULL)
- *retValue =
- BAD_CAST xmlStrdup((const xmlChar *) val->value.str);
- break;
- case XML_SCHEMAS_QNAME:
- /* TODO: Unclear in XML Schema 1.0. */
- if (val->value.qname.uri == NULL) {
- *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.qname.name);
- return (0);
- } else {
- *retValue = BAD_CAST xmlStrdup(BAD_CAST "{");
- *retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue),
- BAD_CAST val->value.qname.uri);
- *retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue),
- BAD_CAST "}");
- *retValue = BAD_CAST xmlStrcat((xmlChar *) (*retValue),
- BAD_CAST val->value.qname.uri);
- }
- break;
- case XML_SCHEMAS_DECIMAL:
- /*
- * TODO: Lookout for a more simple implementation.
- */
- if ((val->value.decimal.total == 1) &&
- (val->value.decimal.lo == 0)) {
- *retValue = xmlStrdup(BAD_CAST "0.0");
- } else {
- xmlSchemaValDecimal dec = val->value.decimal;
- int bufsize;
- char *buf = NULL, *offs;
-
- /* Add room for the decimal point as well. */
- bufsize = dec.total + 2;
- if (dec.sign)
- bufsize++;
- /* Add room for leading/trailing zero. */
- if ((dec.frac == 0) || (dec.frac == dec.total))
- bufsize++;
- buf = xmlMalloc(bufsize);
- if (buf == NULL)
- return(-1);
- offs = buf;
- if (dec.sign)
- *offs++ = '-';
- if (dec.frac == dec.total) {
- *offs++ = '0';
- *offs++ = '.';
- }
- if (dec.hi != 0)
- snprintf(offs, bufsize - (offs - buf),
- "%lu%lu%lu", dec.hi, dec.mi, dec.lo);
- else if (dec.mi != 0)
- snprintf(offs, bufsize - (offs - buf),
- "%lu%lu", dec.mi, dec.lo);
- else
- snprintf(offs, bufsize - (offs - buf),
- "%lu", dec.lo);
-
- if (dec.frac != 0) {
- if (dec.frac != dec.total) {
- int diff = dec.total - dec.frac;
- /*
- * Insert the decimal point.
- */
- memmove(offs + diff + 1, offs + diff, dec.frac +1);
- offs[diff] = '.';
- } else {
- unsigned int i = 0;
- /*
- * Insert missing zeroes behind the decimal point.
- */
- while (*(offs + i) != 0)
- i++;
- if (i < dec.total) {
- memmove(offs + (dec.total - i), offs, i +1);
- memset(offs, '0', dec.total - i);
- }
- }
- } else {
- /*
- * Append decimal point and zero.
- */
- offs = buf + bufsize - 1;
- *offs-- = 0;
- *offs-- = '0';
- *offs-- = '.';
- }
- *retValue = BAD_CAST buf;
- }
- break;
- case XML_SCHEMAS_INTEGER:
- case XML_SCHEMAS_PINTEGER:
- case XML_SCHEMAS_NPINTEGER:
- case XML_SCHEMAS_NINTEGER:
- case XML_SCHEMAS_NNINTEGER:
- case XML_SCHEMAS_LONG:
- case XML_SCHEMAS_BYTE:
- case XML_SCHEMAS_SHORT:
- case XML_SCHEMAS_INT:
- case XML_SCHEMAS_UINT:
- case XML_SCHEMAS_ULONG:
- case XML_SCHEMAS_USHORT:
- case XML_SCHEMAS_UBYTE:
- if ((val->value.decimal.total == 1) &&
- (val->value.decimal.lo == 0))
- *retValue = xmlStrdup(BAD_CAST "0");
- else {
- xmlSchemaValDecimal dec = val->value.decimal;
- int bufsize = dec.total + 1;
-
- /* Add room for the decimal point as well. */
- if (dec.sign)
- bufsize++;
- *retValue = xmlMalloc(bufsize);
- if (*retValue == NULL)
- return(-1);
- if (dec.hi != 0) {
- if (dec.sign)
- snprintf((char *) *retValue, bufsize,
- "-%lu%lu%lu", dec.hi, dec.mi, dec.lo);
- else
- snprintf((char *) *retValue, bufsize,
- "%lu%lu%lu", dec.hi, dec.mi, dec.lo);
- } else if (dec.mi != 0) {
- if (dec.sign)
- snprintf((char *) *retValue, bufsize,
- "-%lu%lu", dec.mi, dec.lo);
- else
- snprintf((char *) *retValue, bufsize,
- "%lu%lu", dec.mi, dec.lo);
- } else {
- if (dec.sign)
- snprintf((char *) *retValue, bufsize, "-%lu", dec.lo);
- else
- snprintf((char *) *retValue, bufsize, "%lu", dec.lo);
- }
- }
- break;
- case XML_SCHEMAS_BOOLEAN:
- if (val->value.b)
- *retValue = BAD_CAST xmlStrdup(BAD_CAST "true");
- else
- *retValue = BAD_CAST xmlStrdup(BAD_CAST "false");
- break;
- case XML_SCHEMAS_DURATION: {
- char buf[100];
- unsigned long year;
- unsigned long mon, day, hour = 0, min = 0;
- double sec = 0, left;
-
- /* TODO: Unclear in XML Schema 1.0 */
- /*
- * TODO: This results in a normalized output of the value
- * - which is NOT conformant to the spec -
- * since the exact values of each property are not
- * recoverable. Think about extending the structure to
- * provide a field for every property.
- */
- year = (unsigned long) FQUOTIENT(labs(val->value.dur.mon), 12);
- mon = labs(val->value.dur.mon) - 12 * year;
-
- day = (unsigned long) FQUOTIENT(fabs(val->value.dur.sec), 86400);
- left = fabs(val->value.dur.sec) - day * 86400;
- if (left > 0) {
- hour = (unsigned long) FQUOTIENT(left, 3600);
- left = left - (hour * 3600);
- if (left > 0) {
- min = (unsigned long) FQUOTIENT(left, 60);
- sec = left - (min * 60);
- }
- }
- if ((val->value.dur.mon < 0) || (val->value.dur.sec < 0))
- snprintf(buf, 100, "P%luY%luM%luDT%luH%luM%.14gS",
- year, mon, day, hour, min, sec);
- else
- snprintf(buf, 100, "-P%luY%luM%luDT%luH%luM%.14gS",
- year, mon, day, hour, min, sec);
- *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
- }
- break;
- case XML_SCHEMAS_GYEAR: {
- char buf[30];
- /* TODO: Unclear in XML Schema 1.0 */
- /* TODO: What to do with the timezone? */
- snprintf(buf, 30, "%04ld", val->value.date.year);
- *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
- }
- break;
- case XML_SCHEMAS_GMONTH: {
- /* TODO: Unclear in XML Schema 1.0 */
- /* TODO: What to do with the timezone? */
- *retValue = xmlMalloc(6);
- if (*retValue == NULL)
- return(-1);
- snprintf((char *) *retValue, 6, "--%02u",
- val->value.date.mon);
- }
- break;
- case XML_SCHEMAS_GDAY: {
- /* TODO: Unclear in XML Schema 1.0 */
- /* TODO: What to do with the timezone? */
- *retValue = xmlMalloc(6);
- if (*retValue == NULL)
- return(-1);
- snprintf((char *) *retValue, 6, "---%02u",
- val->value.date.day);
- }
- break;
- case XML_SCHEMAS_GMONTHDAY: {
- /* TODO: Unclear in XML Schema 1.0 */
- /* TODO: What to do with the timezone? */
- *retValue = xmlMalloc(8);
- if (*retValue == NULL)
- return(-1);
- snprintf((char *) *retValue, 8, "--%02u-%02u",
- val->value.date.mon, val->value.date.day);
- }
- break;
- case XML_SCHEMAS_GYEARMONTH: {
- char buf[35];
- /* TODO: Unclear in XML Schema 1.0 */
- /* TODO: What to do with the timezone? */
- if (val->value.date.year < 0)
- snprintf(buf, 35, "-%04ld-%02u",
- labs(val->value.date.year),
- val->value.date.mon);
- else
- snprintf(buf, 35, "%04ld-%02u",
- val->value.date.year, val->value.date.mon);
- *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
- }
- break;
- case XML_SCHEMAS_TIME:
- {
- char buf[30];
-
- if (val->value.date.tz_flag) {
- xmlSchemaValPtr norm;
-
- norm = xmlSchemaDateNormalize(val, 0);
- if (norm == NULL)
- return (-1);
- /*
- * TODO: Check if "%.14g" is portable.
- */
- snprintf(buf, 30,
- "%02u:%02u:%02.14gZ",
- norm->value.date.hour,
- norm->value.date.min,
- norm->value.date.sec);
- xmlSchemaFreeValue(norm);
- } else {
- snprintf(buf, 30,
- "%02u:%02u:%02.14g",
- val->value.date.hour,
- val->value.date.min,
- val->value.date.sec);
- }
- *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
- }
- break;
- case XML_SCHEMAS_DATE:
- {
- char buf[30];
-
- if (val->value.date.tz_flag) {
- xmlSchemaValPtr norm;
-
- norm = xmlSchemaDateNormalize(val, 0);
- if (norm == NULL)
- return (-1);
- /*
- * TODO: Append the canonical value of the
- * recoverable timezone and not "Z".
- */
- snprintf(buf, 30,
- "%04ld:%02u:%02uZ",
- norm->value.date.year, norm->value.date.mon,
- norm->value.date.day);
- xmlSchemaFreeValue(norm);
- } else {
- snprintf(buf, 30,
- "%04ld:%02u:%02u",
- val->value.date.year, val->value.date.mon,
- val->value.date.day);
- }
- *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
- }
- break;
- case XML_SCHEMAS_DATETIME:
- {
- char buf[50];
-
- if (val->value.date.tz_flag) {
- xmlSchemaValPtr norm;
-
- norm = xmlSchemaDateNormalize(val, 0);
- if (norm == NULL)
- return (-1);
- /*
- * TODO: Check if "%.14g" is portable.
- */
- snprintf(buf, 50,
- "%04ld:%02u:%02uT%02u:%02u:%02.14gZ",
- norm->value.date.year, norm->value.date.mon,
- norm->value.date.day, norm->value.date.hour,
- norm->value.date.min, norm->value.date.sec);
- xmlSchemaFreeValue(norm);
- } else {
- snprintf(buf, 50,
- "%04ld:%02u:%02uT%02u:%02u:%02.14g",
- val->value.date.year, val->value.date.mon,
- val->value.date.day, val->value.date.hour,
- val->value.date.min, val->value.date.sec);
- }
- *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
- }
- break;
- case XML_SCHEMAS_HEXBINARY:
- *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.hex.str);
- break;
- case XML_SCHEMAS_BASE64BINARY:
- /*
- * TODO: Is the following spec piece implemented?:
- * SPEC: "Note: For some values the canonical form defined
- * above does not conform to [RFC 2045], which requires breaking
- * with linefeeds at appropriate intervals."
- */
- *retValue = BAD_CAST xmlStrdup(BAD_CAST val->value.base64.str);
- break;
- case XML_SCHEMAS_FLOAT: {
- char buf[30];
- /*
- * |m| < 16777216, -149 <= e <= 104.
- * TODO: Handle, NaN, INF, -INF. The format is not
- * yet conformant. The c type float does not cover
- * the whole range.
- */
- snprintf(buf, 30, "%01.14e", val->value.f);
- *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
- }
- break;
- case XML_SCHEMAS_DOUBLE: {
- char buf[40];
- /* |m| < 9007199254740992, -1075 <= e <= 970 */
- /*
- * TODO: Handle, NaN, INF, -INF. The format is not
- * yet conformant. The c type float does not cover
- * the whole range.
- */
- snprintf(buf, 40, "%01.14e", val->value.d);
- *retValue = BAD_CAST xmlStrdup(BAD_CAST buf);
- }
- break;
- default:
- *retValue = BAD_CAST xmlStrdup(BAD_CAST "???");
- return (1);
- }
- if (*retValue == NULL)
- return(-1);
- return (0);
-}
-
-/**
- * xmlSchemaGetCanonValueWhtsp:
- * @val: the precomputed value
- * @retValue: the returned value
- * @ws: the whitespace type of the value
- *
- * Get the canonical representation of the value.
- * The caller has to free the returned @retValue.
- *
- * Returns 0 if the value could be built, 1 if the value type is
- * not supported yet and -1 in case of API errors.
- */
-int
-xmlSchemaGetCanonValueWhtsp(xmlSchemaValPtr val,
- const xmlChar **retValue,
- xmlSchemaWhitespaceValueType ws)
-{
- if ((retValue == NULL) || (val == NULL))
- return (-1);
- if ((ws == XML_SCHEMA_WHITESPACE_UNKNOWN) ||
- (ws > XML_SCHEMA_WHITESPACE_COLLAPSE))
- return (-1);
-
- *retValue = NULL;
- switch (val->type) {
- case XML_SCHEMAS_STRING:
- if (val->value.str == NULL)
- *retValue = BAD_CAST xmlStrdup(BAD_CAST "");
- else if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- *retValue = xmlSchemaCollapseString(val->value.str);
- else if (ws == XML_SCHEMA_WHITESPACE_REPLACE)
- *retValue = xmlSchemaWhiteSpaceReplace(val->value.str);
- if ((*retValue) == NULL)
- *retValue = BAD_CAST xmlStrdup(val->value.str);
- break;
- case XML_SCHEMAS_NORMSTRING:
- if (val->value.str == NULL)
- *retValue = BAD_CAST xmlStrdup(BAD_CAST "");
- else {
- if (ws == XML_SCHEMA_WHITESPACE_COLLAPSE)
- *retValue = xmlSchemaCollapseString(val->value.str);
- else
- *retValue = xmlSchemaWhiteSpaceReplace(val->value.str);
- if ((*retValue) == NULL)
- *retValue = BAD_CAST xmlStrdup(val->value.str);
- }
- break;
- default:
- return (xmlSchemaGetCanonValue(val, retValue));
- }
- return (0);
-}
-
-/**
- * xmlSchemaGetValType:
- * @val: a schemas value
- *
- * Accessor for the type of a value
- *
- * Returns the xmlSchemaValType of the value
- */
-xmlSchemaValType
-xmlSchemaGetValType(xmlSchemaValPtr val)
-{
- if (val == NULL)
- return(XML_SCHEMAS_UNKNOWN);
- return (val->type);
-}
-
-#define bottom_xmlschemastypes
-#include "elfgcchack.h"
-#endif /* LIBXML_SCHEMAS_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/xmlstring.c b/external/libxml2_android/jni/libxml2/xmlstring.c
deleted file mode 100644
index cc85777e..00000000
--- a/external/libxml2_android/jni/libxml2/xmlstring.c
+++ /dev/null
@@ -1,1046 +0,0 @@
-/*
- * string.c : an XML string utilities module
- *
- * This module provides various utility functions for manipulating
- * the xmlChar* type. All functions named xmlStr* have been moved here
- * from the parser.c file (their original home).
- *
- * See Copyright for the status of this software.
- *
- * UTF8 string routines from:
- * William Brack <wbrack@mmm.com.hk>
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parserInternals.h>
-#include <libxml/xmlstring.h>
-
-/************************************************************************
- * *
- * Commodity functions to handle xmlChars *
- * *
- ************************************************************************/
-
-/**
- * xmlStrndup:
- * @cur: the input xmlChar *
- * @len: the len of @cur
- *
- * a strndup for array of xmlChar's
- *
- * Returns a new xmlChar * or NULL
- */
-xmlChar *
-xmlStrndup(const xmlChar *cur, int len) {
- xmlChar *ret;
-
- if ((cur == NULL) || (len < 0)) return(NULL);
- ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
- if (ret == NULL) {
- xmlErrMemory(NULL, NULL);
- return(NULL);
- }
- memcpy(ret, cur, len * sizeof(xmlChar));
- ret[len] = 0;
- return(ret);
-}
-
-/**
- * xmlStrdup:
- * @cur: the input xmlChar *
- *
- * a strdup for array of xmlChar's. Since they are supposed to be
- * encoded in UTF-8 or an encoding with 8bit based chars, we assume
- * a termination mark of '0'.
- *
- * Returns a new xmlChar * or NULL
- */
-xmlChar *
-xmlStrdup(const xmlChar *cur) {
- const xmlChar *p = cur;
-
- if (cur == NULL) return(NULL);
- while (*p != 0) p++; /* non input consuming */
- return(xmlStrndup(cur, p - cur));
-}
-
-/**
- * xmlCharStrndup:
- * @cur: the input char *
- * @len: the len of @cur
- *
- * a strndup for char's to xmlChar's
- *
- * Returns a new xmlChar * or NULL
- */
-
-xmlChar *
-xmlCharStrndup(const char *cur, int len) {
- int i;
- xmlChar *ret;
-
- if ((cur == NULL) || (len < 0)) return(NULL);
- ret = (xmlChar *) xmlMallocAtomic((len + 1) * sizeof(xmlChar));
- if (ret == NULL) {
- xmlErrMemory(NULL, NULL);
- return(NULL);
- }
- for (i = 0;i < len;i++) {
- ret[i] = (xmlChar) cur[i];
- if (ret[i] == 0) return(ret);
- }
- ret[len] = 0;
- return(ret);
-}
-
-/**
- * xmlCharStrdup:
- * @cur: the input char *
- *
- * a strdup for char's to xmlChar's
- *
- * Returns a new xmlChar * or NULL
- */
-
-xmlChar *
-xmlCharStrdup(const char *cur) {
- const char *p = cur;
-
- if (cur == NULL) return(NULL);
- while (*p != '\0') p++; /* non input consuming */
- return(xmlCharStrndup(cur, p - cur));
-}
-
-/**
- * xmlStrcmp:
- * @str1: the first xmlChar *
- * @str2: the second xmlChar *
- *
- * a strcmp for xmlChar's
- *
- * Returns the integer result of the comparison
- */
-
-int
-xmlStrcmp(const xmlChar *str1, const xmlChar *str2) {
- register int tmp;
-
- if (str1 == str2) return(0);
- if (str1 == NULL) return(-1);
- if (str2 == NULL) return(1);
- do {
- tmp = *str1++ - *str2;
- if (tmp != 0) return(tmp);
- } while (*str2++ != 0);
- return 0;
-}
-
-/**
- * xmlStrEqual:
- * @str1: the first xmlChar *
- * @str2: the second xmlChar *
- *
- * Check if both strings are equal of have same content.
- * Should be a bit more readable and faster than xmlStrcmp()
- *
- * Returns 1 if they are equal, 0 if they are different
- */
-
-int
-xmlStrEqual(const xmlChar *str1, const xmlChar *str2) {
- if (str1 == str2) return(1);
- if (str1 == NULL) return(0);
- if (str2 == NULL) return(0);
- do {
- if (*str1++ != *str2) return(0);
- } while (*str2++);
- return(1);
-}
-
-/**
- * xmlStrQEqual:
- * @pref: the prefix of the QName
- * @name: the localname of the QName
- * @str: the second xmlChar *
- *
- * Check if a QName is Equal to a given string
- *
- * Returns 1 if they are equal, 0 if they are different
- */
-
-int
-xmlStrQEqual(const xmlChar *pref, const xmlChar *name, const xmlChar *str) {
- if (pref == NULL) return(xmlStrEqual(name, str));
- if (name == NULL) return(0);
- if (str == NULL) return(0);
-
- do {
- if (*pref++ != *str) return(0);
- } while ((*str++) && (*pref));
- if (*str++ != ':') return(0);
- do {
- if (*name++ != *str) return(0);
- } while (*str++);
- return(1);
-}
-
-/**
- * xmlStrncmp:
- * @str1: the first xmlChar *
- * @str2: the second xmlChar *
- * @len: the max comparison length
- *
- * a strncmp for xmlChar's
- *
- * Returns the integer result of the comparison
- */
-
-int
-xmlStrncmp(const xmlChar *str1, const xmlChar *str2, int len) {
- register int tmp;
-
- if (len <= 0) return(0);
- if (str1 == str2) return(0);
- if (str1 == NULL) return(-1);
- if (str2 == NULL) return(1);
-#ifdef __GNUC__
- tmp = strncmp((const char *)str1, (const char *)str2, len);
- return tmp;
-#else
- do {
- tmp = *str1++ - *str2;
- if (tmp != 0 || --len == 0) return(tmp);
- } while (*str2++ != 0);
- return 0;
-#endif
-}
-
-static const xmlChar casemap[256] = {
- 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
- 0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
- 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,
- 0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
- 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
- 0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
- 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,
- 0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
- 0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
- 0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
- 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
- 0x78,0x79,0x7A,0x7B,0x5C,0x5D,0x5E,0x5F,
- 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,
- 0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
- 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
- 0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
- 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
- 0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
- 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
- 0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
- 0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
- 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
- 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
- 0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
- 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,
- 0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
- 0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,
- 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
- 0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,
- 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
- 0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,
- 0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF
-};
-
-/**
- * xmlStrcasecmp:
- * @str1: the first xmlChar *
- * @str2: the second xmlChar *
- *
- * a strcasecmp for xmlChar's
- *
- * Returns the integer result of the comparison
- */
-
-int
-xmlStrcasecmp(const xmlChar *str1, const xmlChar *str2) {
- register int tmp;
-
- if (str1 == str2) return(0);
- if (str1 == NULL) return(-1);
- if (str2 == NULL) return(1);
- do {
- tmp = casemap[*str1++] - casemap[*str2];
- if (tmp != 0) return(tmp);
- } while (*str2++ != 0);
- return 0;
-}
-
-/**
- * xmlStrncasecmp:
- * @str1: the first xmlChar *
- * @str2: the second xmlChar *
- * @len: the max comparison length
- *
- * a strncasecmp for xmlChar's
- *
- * Returns the integer result of the comparison
- */
-
-int
-xmlStrncasecmp(const xmlChar *str1, const xmlChar *str2, int len) {
- register int tmp;
-
- if (len <= 0) return(0);
- if (str1 == str2) return(0);
- if (str1 == NULL) return(-1);
- if (str2 == NULL) return(1);
- do {
- tmp = casemap[*str1++] - casemap[*str2];
- if (tmp != 0 || --len == 0) return(tmp);
- } while (*str2++ != 0);
- return 0;
-}
-
-/**
- * xmlStrchr:
- * @str: the xmlChar * array
- * @val: the xmlChar to search
- *
- * a strchr for xmlChar's
- *
- * Returns the xmlChar * for the first occurrence or NULL.
- */
-
-const xmlChar *
-xmlStrchr(const xmlChar *str, xmlChar val) {
- if (str == NULL) return(NULL);
- while (*str != 0) { /* non input consuming */
- if (*str == val) return((xmlChar *) str);
- str++;
- }
- return(NULL);
-}
-
-/**
- * xmlStrstr:
- * @str: the xmlChar * array (haystack)
- * @val: the xmlChar to search (needle)
- *
- * a strstr for xmlChar's
- *
- * Returns the xmlChar * for the first occurrence or NULL.
- */
-
-const xmlChar *
-xmlStrstr(const xmlChar *str, const xmlChar *val) {
- int n;
-
- if (str == NULL) return(NULL);
- if (val == NULL) return(NULL);
- n = xmlStrlen(val);
-
- if (n == 0) return(str);
- while (*str != 0) { /* non input consuming */
- if (*str == *val) {
- if (!xmlStrncmp(str, val, n)) return((const xmlChar *) str);
- }
- str++;
- }
- return(NULL);
-}
-
-/**
- * xmlStrcasestr:
- * @str: the xmlChar * array (haystack)
- * @val: the xmlChar to search (needle)
- *
- * a case-ignoring strstr for xmlChar's
- *
- * Returns the xmlChar * for the first occurrence or NULL.
- */
-
-const xmlChar *
-xmlStrcasestr(const xmlChar *str, const xmlChar *val) {
- int n;
-
- if (str == NULL) return(NULL);
- if (val == NULL) return(NULL);
- n = xmlStrlen(val);
-
- if (n == 0) return(str);
- while (*str != 0) { /* non input consuming */
- if (casemap[*str] == casemap[*val])
- if (!xmlStrncasecmp(str, val, n)) return(str);
- str++;
- }
- return(NULL);
-}
-
-/**
- * xmlStrsub:
- * @str: the xmlChar * array (haystack)
- * @start: the index of the first char (zero based)
- * @len: the length of the substring
- *
- * Extract a substring of a given string
- *
- * Returns the xmlChar * for the first occurrence or NULL.
- */
-
-xmlChar *
-xmlStrsub(const xmlChar *str, int start, int len) {
- int i;
-
- if (str == NULL) return(NULL);
- if (start < 0) return(NULL);
- if (len < 0) return(NULL);
-
- for (i = 0;i < start;i++) {
- if (*str == 0) return(NULL);
- str++;
- }
- if (*str == 0) return(NULL);
- return(xmlStrndup(str, len));
-}
-
-/**
- * xmlStrlen:
- * @str: the xmlChar * array
- *
- * length of a xmlChar's string
- *
- * Returns the number of xmlChar contained in the ARRAY.
- */
-
-int
-xmlStrlen(const xmlChar *str) {
- int len = 0;
-
- if (str == NULL) return(0);
- while (*str != 0) { /* non input consuming */
- str++;
- len++;
- }
- return(len);
-}
-
-/**
- * xmlStrncat:
- * @cur: the original xmlChar * array
- * @add: the xmlChar * array added
- * @len: the length of @add
- *
- * a strncat for array of xmlChar's, it will extend @cur with the len
- * first bytes of @add. Note that if @len < 0 then this is an API error
- * and NULL will be returned.
- *
- * Returns a new xmlChar *, the original @cur is reallocated if needed
- * and should not be freed
- */
-
-xmlChar *
-xmlStrncat(xmlChar *cur, const xmlChar *add, int len) {
- int size;
- xmlChar *ret;
-
- if ((add == NULL) || (len == 0))
- return(cur);
- if (len < 0)
- return(NULL);
- if (cur == NULL)
- return(xmlStrndup(add, len));
-
- size = xmlStrlen(cur);
- if (size < 0)
- return(NULL);
- ret = (xmlChar *) xmlRealloc(cur, (size + len + 1) * sizeof(xmlChar));
- if (ret == NULL) {
- xmlErrMemory(NULL, NULL);
- return(cur);
- }
- memcpy(&ret[size], add, len * sizeof(xmlChar));
- ret[size + len] = 0;
- return(ret);
-}
-
-/**
- * xmlStrncatNew:
- * @str1: first xmlChar string
- * @str2: second xmlChar string
- * @len: the len of @str2 or < 0
- *
- * same as xmlStrncat, but creates a new string. The original
- * two strings are not freed. If @len is < 0 then the length
- * will be calculated automatically.
- *
- * Returns a new xmlChar * or NULL
- */
-xmlChar *
-xmlStrncatNew(const xmlChar *str1, const xmlChar *str2, int len) {
- int size;
- xmlChar *ret;
-
- if (len < 0) {
- len = xmlStrlen(str2);
- if (len < 0)
- return(NULL);
- }
- if ((str2 == NULL) || (len == 0))
- return(xmlStrdup(str1));
- if (str1 == NULL)
- return(xmlStrndup(str2, len));
-
- size = xmlStrlen(str1);
- if (size < 0)
- return(NULL);
- ret = (xmlChar *) xmlMalloc((size + len + 1) * sizeof(xmlChar));
- if (ret == NULL) {
- xmlErrMemory(NULL, NULL);
- return(xmlStrndup(str1, size));
- }
- memcpy(ret, str1, size * sizeof(xmlChar));
- memcpy(&ret[size], str2, len * sizeof(xmlChar));
- ret[size + len] = 0;
- return(ret);
-}
-
-/**
- * xmlStrcat:
- * @cur: the original xmlChar * array
- * @add: the xmlChar * array added
- *
- * a strcat for array of xmlChar's. Since they are supposed to be
- * encoded in UTF-8 or an encoding with 8bit based chars, we assume
- * a termination mark of '0'.
- *
- * Returns a new xmlChar * containing the concatenated string.
- */
-xmlChar *
-xmlStrcat(xmlChar *cur, const xmlChar *add) {
- const xmlChar *p = add;
-
- if (add == NULL) return(cur);
- if (cur == NULL)
- return(xmlStrdup(add));
-
- while (*p != 0) p++; /* non input consuming */
- return(xmlStrncat(cur, add, p - add));
-}
-
-/**
- * xmlStrPrintf:
- * @buf: the result buffer.
- * @len: the result buffer length.
- * @msg: the message with printf formatting.
- * @...: extra parameters for the message.
- *
- * Formats @msg and places result into @buf.
- *
- * Returns the number of characters written to @buf or -1 if an error occurs.
- */
-int XMLCDECL
-xmlStrPrintf(xmlChar *buf, int len, const char *msg, ...) {
- va_list args;
- int ret;
-
- if((buf == NULL) || (msg == NULL)) {
- return(-1);
- }
-
- va_start(args, msg);
- ret = vsnprintf((char *) buf, len, (const char *) msg, args);
- va_end(args);
- buf[len - 1] = 0; /* be safe ! */
-
- return(ret);
-}
-
-/**
- * xmlStrVPrintf:
- * @buf: the result buffer.
- * @len: the result buffer length.
- * @msg: the message with printf formatting.
- * @ap: extra parameters for the message.
- *
- * Formats @msg and places result into @buf.
- *
- * Returns the number of characters written to @buf or -1 if an error occurs.
- */
-int
-xmlStrVPrintf(xmlChar *buf, int len, const char *msg, va_list ap) {
- int ret;
-
- if((buf == NULL) || (msg == NULL)) {
- return(-1);
- }
-
- ret = vsnprintf((char *) buf, len, (const char *) msg, ap);
- buf[len - 1] = 0; /* be safe ! */
-
- return(ret);
-}
-
-/************************************************************************
- * *
- * Generic UTF8 handling routines *
- * *
- * From rfc2044: encoding of the Unicode values on UTF-8: *
- * *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary) *
- * 0000 0000-0000 007F 0xxxxxxx *
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx *
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx *
- * *
- * I hope we won't use values > 0xFFFF anytime soon ! *
- * *
- ************************************************************************/
-
-
-/**
- * xmlUTF8Size:
- * @utf: pointer to the UTF8 character
- *
- * calculates the internal size of a UTF8 character
- *
- * returns the numbers of bytes in the character, -1 on format error
- */
-int
-xmlUTF8Size(const xmlChar *utf) {
- xmlChar mask;
- int len;
-
- if (utf == NULL)
- return -1;
- if (*utf < 0x80)
- return 1;
- /* check valid UTF8 character */
- if (!(*utf & 0x40))
- return -1;
- /* determine number of bytes in char */
- len = 2;
- for (mask=0x20; mask != 0; mask>>=1) {
- if (!(*utf & mask))
- return len;
- len++;
- }
- return -1;
-}
-
-/**
- * xmlUTF8Charcmp:
- * @utf1: pointer to first UTF8 char
- * @utf2: pointer to second UTF8 char
- *
- * compares the two UCS4 values
- *
- * returns result of the compare as with xmlStrncmp
- */
-int
-xmlUTF8Charcmp(const xmlChar *utf1, const xmlChar *utf2) {
-
- if (utf1 == NULL ) {
- if (utf2 == NULL)
- return 0;
- return -1;
- }
- return xmlStrncmp(utf1, utf2, xmlUTF8Size(utf1));
-}
-
-/**
- * xmlUTF8Strlen:
- * @utf: a sequence of UTF-8 encoded bytes
- *
- * compute the length of an UTF8 string, it doesn't do a full UTF8
- * checking of the content of the string.
- *
- * Returns the number of characters in the string or -1 in case of error
- */
-int
-xmlUTF8Strlen(const xmlChar *utf) {
- int ret = 0;
-
- if (utf == NULL)
- return(-1);
-
- while (*utf != 0) {
- if (utf[0] & 0x80) {
- if ((utf[1] & 0xc0) != 0x80)
- return(-1);
- if ((utf[0] & 0xe0) == 0xe0) {
- if ((utf[2] & 0xc0) != 0x80)
- return(-1);
- if ((utf[0] & 0xf0) == 0xf0) {
- if ((utf[0] & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
- return(-1);
- utf += 4;
- } else {
- utf += 3;
- }
- } else {
- utf += 2;
- }
- } else {
- utf++;
- }
- ret++;
- }
- return(ret);
-}
-
-/**
- * xmlGetUTF8Char:
- * @utf: a sequence of UTF-8 encoded bytes
- * @len: a pointer to the minimum number of bytes present in
- * the sequence. This is used to assure the next character
- * is completely contained within the sequence.
- *
- * Read the first UTF8 character from @utf
- *
- * Returns the char value or -1 in case of error, and sets *len to
- * the actual number of bytes consumed (0 in case of error)
- */
-int
-xmlGetUTF8Char(const unsigned char *utf, int *len) {
- unsigned int c;
-
- if (utf == NULL)
- goto error;
- if (len == NULL)
- goto error;
- if (*len < 1)
- goto error;
-
- c = utf[0];
- if (c & 0x80) {
- if (*len < 2)
- goto error;
- if ((utf[1] & 0xc0) != 0x80)
- goto error;
- if ((c & 0xe0) == 0xe0) {
- if (*len < 3)
- goto error;
- if ((utf[2] & 0xc0) != 0x80)
- goto error;
- if ((c & 0xf0) == 0xf0) {
- if (*len < 4)
- goto error;
- if ((c & 0xf8) != 0xf0 || (utf[3] & 0xc0) != 0x80)
- goto error;
- *len = 4;
- /* 4-byte code */
- c = (utf[0] & 0x7) << 18;
- c |= (utf[1] & 0x3f) << 12;
- c |= (utf[2] & 0x3f) << 6;
- c |= utf[3] & 0x3f;
- } else {
- /* 3-byte code */
- *len = 3;
- c = (utf[0] & 0xf) << 12;
- c |= (utf[1] & 0x3f) << 6;
- c |= utf[2] & 0x3f;
- }
- } else {
- /* 2-byte code */
- *len = 2;
- c = (utf[0] & 0x1f) << 6;
- c |= utf[1] & 0x3f;
- }
- } else {
- /* 1-byte code */
- *len = 1;
- }
- return(c);
-
-error:
- if (len != NULL)
- *len = 0;
- return(-1);
-}
-
-/**
- * xmlCheckUTF8:
- * @utf: Pointer to putative UTF-8 encoded string.
- *
- * Checks @utf for being valid UTF-8. @utf is assumed to be
- * null-terminated. This function is not super-strict, as it will
- * allow longer UTF-8 sequences than necessary. Note that Java is
- * capable of producing these sequences if provoked. Also note, this
- * routine checks for the 4-byte maximum size, but does not check for
- * 0x10ffff maximum value.
- *
- * Return value: true if @utf is valid.
- **/
-int
-xmlCheckUTF8(const unsigned char *utf)
-{
- int ix;
- unsigned char c;
-
- if (utf == NULL)
- return(0);
- /*
- * utf is a string of 1, 2, 3 or 4 bytes. The valid strings
- * are as follows (in "bit format"):
- * 0xxxxxxx valid 1-byte
- * 110xxxxx 10xxxxxx valid 2-byte
- * 1110xxxx 10xxxxxx 10xxxxxx valid 3-byte
- * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx valid 4-byte
- */
- for (ix = 0; (c = utf[ix]);) { /* string is 0-terminated */
- if ((c & 0x80) == 0x00) { /* 1-byte code, starts with 10 */
- ix++;
- } else if ((c & 0xe0) == 0xc0) {/* 2-byte code, starts with 110 */
- if ((utf[ix+1] & 0xc0 ) != 0x80)
- return 0;
- ix += 2;
- } else if ((c & 0xf0) == 0xe0) {/* 3-byte code, starts with 1110 */
- if (((utf[ix+1] & 0xc0) != 0x80) ||
- ((utf[ix+2] & 0xc0) != 0x80))
- return 0;
- ix += 3;
- } else if ((c & 0xf8) == 0xf0) {/* 4-byte code, starts with 11110 */
- if (((utf[ix+1] & 0xc0) != 0x80) ||
- ((utf[ix+2] & 0xc0) != 0x80) ||
- ((utf[ix+3] & 0xc0) != 0x80))
- return 0;
- ix += 4;
- } else /* unknown encoding */
- return 0;
- }
- return(1);
-}
-
-/**
- * xmlUTF8Strsize:
- * @utf: a sequence of UTF-8 encoded bytes
- * @len: the number of characters in the array
- *
- * storage size of an UTF8 string
- * the behaviour is not garanteed if the input string is not UTF-8
- *
- * Returns the storage size of
- * the first 'len' characters of ARRAY
- */
-
-int
-xmlUTF8Strsize(const xmlChar *utf, int len) {
- const xmlChar *ptr=utf;
- xmlChar ch;
-
- if (utf == NULL)
- return(0);
-
- if (len <= 0)
- return(0);
-
- while ( len-- > 0) {
- if ( !*ptr )
- break;
- if ( (ch = *ptr++) & 0x80)
- while ((ch<<=1) & 0x80 ) {
- if (*ptr == 0) break;
- ptr++;
- }
- }
- return (ptr - utf);
-}
-
-
-/**
- * xmlUTF8Strndup:
- * @utf: the input UTF8 *
- * @len: the len of @utf (in chars)
- *
- * a strndup for array of UTF8's
- *
- * Returns a new UTF8 * or NULL
- */
-xmlChar *
-xmlUTF8Strndup(const xmlChar *utf, int len) {
- xmlChar *ret;
- int i;
-
- if ((utf == NULL) || (len < 0)) return(NULL);
- i = xmlUTF8Strsize(utf, len);
- ret = (xmlChar *) xmlMallocAtomic((i + 1) * sizeof(xmlChar));
- if (ret == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "malloc of %ld byte failed\n",
- (len + 1) * (long)sizeof(xmlChar));
- return(NULL);
- }
- memcpy(ret, utf, i * sizeof(xmlChar));
- ret[i] = 0;
- return(ret);
-}
-
-/**
- * xmlUTF8Strpos:
- * @utf: the input UTF8 *
- * @pos: the position of the desired UTF8 char (in chars)
- *
- * a function to provide the equivalent of fetching a
- * character from a string array
- *
- * Returns a pointer to the UTF8 character or NULL
- */
-const xmlChar *
-xmlUTF8Strpos(const xmlChar *utf, int pos) {
- xmlChar ch;
-
- if (utf == NULL) return(NULL);
- if (pos < 0)
- return(NULL);
- while (pos--) {
- if ((ch=*utf++) == 0) return(NULL);
- if ( ch & 0x80 ) {
- /* if not simple ascii, verify proper format */
- if ( (ch & 0xc0) != 0xc0 )
- return(NULL);
- /* then skip over remaining bytes for this char */
- while ( (ch <<= 1) & 0x80 )
- if ( (*utf++ & 0xc0) != 0x80 )
- return(NULL);
- }
- }
- return((xmlChar *)utf);
-}
-
-/**
- * xmlUTF8Strloc:
- * @utf: the input UTF8 *
- * @utfchar: the UTF8 character to be found
- *
- * a function to provide the relative location of a UTF8 char
- *
- * Returns the relative character position of the desired char
- * or -1 if not found
- */
-int
-xmlUTF8Strloc(const xmlChar *utf, const xmlChar *utfchar) {
- int i, size;
- xmlChar ch;
-
- if (utf==NULL || utfchar==NULL) return -1;
- size = xmlUTF8Strsize(utfchar, 1);
- for(i=0; (ch=*utf) != 0; i++) {
- if (xmlStrncmp(utf, utfchar, size)==0)
- return(i);
- utf++;
- if ( ch & 0x80 ) {
- /* if not simple ascii, verify proper format */
- if ( (ch & 0xc0) != 0xc0 )
- return(-1);
- /* then skip over remaining bytes for this char */
- while ( (ch <<= 1) & 0x80 )
- if ( (*utf++ & 0xc0) != 0x80 )
- return(-1);
- }
- }
-
- return(-1);
-}
-/**
- * xmlUTF8Strsub:
- * @utf: a sequence of UTF-8 encoded bytes
- * @start: relative pos of first char
- * @len: total number to copy
- *
- * Create a substring from a given UTF-8 string
- * Note: positions are given in units of UTF-8 chars
- *
- * Returns a pointer to a newly created string
- * or NULL if any problem
- */
-
-xmlChar *
-xmlUTF8Strsub(const xmlChar *utf, int start, int len) {
- int i;
- xmlChar ch;
-
- if (utf == NULL) return(NULL);
- if (start < 0) return(NULL);
- if (len < 0) return(NULL);
-
- /*
- * Skip over any leading chars
- */
- for (i = 0;i < start;i++) {
- if ((ch=*utf++) == 0) return(NULL);
- if ( ch & 0x80 ) {
- /* if not simple ascii, verify proper format */
- if ( (ch & 0xc0) != 0xc0 )
- return(NULL);
- /* then skip over remaining bytes for this char */
- while ( (ch <<= 1) & 0x80 )
- if ( (*utf++ & 0xc0) != 0x80 )
- return(NULL);
- }
- }
-
- return(xmlUTF8Strndup(utf, len));
-}
-
-/**
- * xmlEscapeFormatString:
- * @msg: a pointer to the string in which to escape '%' characters.
- * Must be a heap-allocated buffer created by libxml2 that may be
- * returned, or that may be freed and replaced.
- *
- * Replaces the string pointed to by 'msg' with an escaped string.
- * Returns the same string with all '%' characters escaped.
- */
-xmlChar *
-xmlEscapeFormatString(xmlChar **msg)
-{
- xmlChar *msgPtr = NULL;
- xmlChar *result = NULL;
- xmlChar *resultPtr = NULL;
- size_t count = 0;
- size_t msgLen = 0;
- size_t resultLen = 0;
-
- if (!msg || !*msg)
- return(NULL);
-
- for (msgPtr = *msg; *msgPtr != '\0'; ++msgPtr) {
- ++msgLen;
- if (*msgPtr == '%')
- ++count;
- }
-
- if (count == 0)
- return(*msg);
-
- resultLen = msgLen + count + 1;
- result = (xmlChar *) xmlMallocAtomic(resultLen * sizeof(xmlChar));
- if (result == NULL) {
- /* Clear *msg to prevent format string vulnerabilities in
- out-of-memory situations. */
- xmlFree(*msg);
- *msg = NULL;
- xmlErrMemory(NULL, NULL);
- return(NULL);
- }
-
- for (msgPtr = *msg, resultPtr = result; *msgPtr != '\0'; ++msgPtr, ++resultPtr) {
- *resultPtr = *msgPtr;
- if (*msgPtr == '%')
- *(++resultPtr) = '%';
- }
- result[resultLen - 1] = '\0';
-
- xmlFree(*msg);
- *msg = result;
-
- return *msg;
-}
-
-#define bottom_xmlstring
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/xmlunicode.c b/external/libxml2_android/jni/libxml2/xmlunicode.c
deleted file mode 100644
index ce6e9a4f..00000000
--- a/external/libxml2_android/jni/libxml2/xmlunicode.c
+++ /dev/null
@@ -1,3179 +0,0 @@
-/*
- * xmlunicode.c: this module implements the Unicode character APIs
- *
- * This file is automatically generated from the
- * UCS description files of the Unicode Character Database
- * http://www.unicode.org/Public/4.0-Update1/UCD-4.0.1.html
- * using the genUnicode.py Python script.
- *
- * Generation date: Mon Mar 27 11:09:52 2006
- * Sources: Blocks-4.0.1.txt UnicodeData-4.0.1.txt
- * Daniel Veillard <veillard@redhat.com>
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#ifdef LIBXML_UNICODE_ENABLED
-
-#include <string.h>
-#include <libxml/xmlversion.h>
-#include <libxml/xmlunicode.h>
-#include <libxml/chvalid.h>
-
-typedef int (xmlIntFunc)(int); /* just to keep one's mind untwisted */
-
-typedef struct {
- const char *rangename;
- xmlIntFunc *func;
-} xmlUnicodeRange;
-
-typedef struct {
- xmlUnicodeRange *table;
- int numentries;
-} xmlUnicodeNameTable;
-
-
-static xmlIntFunc *xmlUnicodeLookup(xmlUnicodeNameTable *tptr, const char *tname);
-
-static xmlUnicodeRange xmlUnicodeBlocks[] = {
- {"AegeanNumbers", xmlUCSIsAegeanNumbers},
- {"AlphabeticPresentationForms", xmlUCSIsAlphabeticPresentationForms},
- {"Arabic", xmlUCSIsArabic},
- {"ArabicPresentationForms-A", xmlUCSIsArabicPresentationFormsA},
- {"ArabicPresentationForms-B", xmlUCSIsArabicPresentationFormsB},
- {"Armenian", xmlUCSIsArmenian},
- {"Arrows", xmlUCSIsArrows},
- {"BasicLatin", xmlUCSIsBasicLatin},
- {"Bengali", xmlUCSIsBengali},
- {"BlockElements", xmlUCSIsBlockElements},
- {"Bopomofo", xmlUCSIsBopomofo},
- {"BopomofoExtended", xmlUCSIsBopomofoExtended},
- {"BoxDrawing", xmlUCSIsBoxDrawing},
- {"BraillePatterns", xmlUCSIsBraillePatterns},
- {"Buhid", xmlUCSIsBuhid},
- {"ByzantineMusicalSymbols", xmlUCSIsByzantineMusicalSymbols},
- {"CJKCompatibility", xmlUCSIsCJKCompatibility},
- {"CJKCompatibilityForms", xmlUCSIsCJKCompatibilityForms},
- {"CJKCompatibilityIdeographs", xmlUCSIsCJKCompatibilityIdeographs},
- {"CJKCompatibilityIdeographsSupplement", xmlUCSIsCJKCompatibilityIdeographsSupplement},
- {"CJKRadicalsSupplement", xmlUCSIsCJKRadicalsSupplement},
- {"CJKSymbolsandPunctuation", xmlUCSIsCJKSymbolsandPunctuation},
- {"CJKUnifiedIdeographs", xmlUCSIsCJKUnifiedIdeographs},
- {"CJKUnifiedIdeographsExtensionA", xmlUCSIsCJKUnifiedIdeographsExtensionA},
- {"CJKUnifiedIdeographsExtensionB", xmlUCSIsCJKUnifiedIdeographsExtensionB},
- {"Cherokee", xmlUCSIsCherokee},
- {"CombiningDiacriticalMarks", xmlUCSIsCombiningDiacriticalMarks},
- {"CombiningDiacriticalMarksforSymbols", xmlUCSIsCombiningDiacriticalMarksforSymbols},
- {"CombiningHalfMarks", xmlUCSIsCombiningHalfMarks},
- {"CombiningMarksforSymbols", xmlUCSIsCombiningMarksforSymbols},
- {"ControlPictures", xmlUCSIsControlPictures},
- {"CurrencySymbols", xmlUCSIsCurrencySymbols},
- {"CypriotSyllabary", xmlUCSIsCypriotSyllabary},
- {"Cyrillic", xmlUCSIsCyrillic},
- {"CyrillicSupplement", xmlUCSIsCyrillicSupplement},
- {"Deseret", xmlUCSIsDeseret},
- {"Devanagari", xmlUCSIsDevanagari},
- {"Dingbats", xmlUCSIsDingbats},
- {"EnclosedAlphanumerics", xmlUCSIsEnclosedAlphanumerics},
- {"EnclosedCJKLettersandMonths", xmlUCSIsEnclosedCJKLettersandMonths},
- {"Ethiopic", xmlUCSIsEthiopic},
- {"GeneralPunctuation", xmlUCSIsGeneralPunctuation},
- {"GeometricShapes", xmlUCSIsGeometricShapes},
- {"Georgian", xmlUCSIsGeorgian},
- {"Gothic", xmlUCSIsGothic},
- {"Greek", xmlUCSIsGreek},
- {"GreekExtended", xmlUCSIsGreekExtended},
- {"GreekandCoptic", xmlUCSIsGreekandCoptic},
- {"Gujarati", xmlUCSIsGujarati},
- {"Gurmukhi", xmlUCSIsGurmukhi},
- {"HalfwidthandFullwidthForms", xmlUCSIsHalfwidthandFullwidthForms},
- {"HangulCompatibilityJamo", xmlUCSIsHangulCompatibilityJamo},
- {"HangulJamo", xmlUCSIsHangulJamo},
- {"HangulSyllables", xmlUCSIsHangulSyllables},
- {"Hanunoo", xmlUCSIsHanunoo},
- {"Hebrew", xmlUCSIsHebrew},
- {"HighPrivateUseSurrogates", xmlUCSIsHighPrivateUseSurrogates},
- {"HighSurrogates", xmlUCSIsHighSurrogates},
- {"Hiragana", xmlUCSIsHiragana},
- {"IPAExtensions", xmlUCSIsIPAExtensions},
- {"IdeographicDescriptionCharacters", xmlUCSIsIdeographicDescriptionCharacters},
- {"Kanbun", xmlUCSIsKanbun},
- {"KangxiRadicals", xmlUCSIsKangxiRadicals},
- {"Kannada", xmlUCSIsKannada},
- {"Katakana", xmlUCSIsKatakana},
- {"KatakanaPhoneticExtensions", xmlUCSIsKatakanaPhoneticExtensions},
- {"Khmer", xmlUCSIsKhmer},
- {"KhmerSymbols", xmlUCSIsKhmerSymbols},
- {"Lao", xmlUCSIsLao},
- {"Latin-1Supplement", xmlUCSIsLatin1Supplement},
- {"LatinExtended-A", xmlUCSIsLatinExtendedA},
- {"LatinExtended-B", xmlUCSIsLatinExtendedB},
- {"LatinExtendedAdditional", xmlUCSIsLatinExtendedAdditional},
- {"LetterlikeSymbols", xmlUCSIsLetterlikeSymbols},
- {"Limbu", xmlUCSIsLimbu},
- {"LinearBIdeograms", xmlUCSIsLinearBIdeograms},
- {"LinearBSyllabary", xmlUCSIsLinearBSyllabary},
- {"LowSurrogates", xmlUCSIsLowSurrogates},
- {"Malayalam", xmlUCSIsMalayalam},
- {"MathematicalAlphanumericSymbols", xmlUCSIsMathematicalAlphanumericSymbols},
- {"MathematicalOperators", xmlUCSIsMathematicalOperators},
- {"MiscellaneousMathematicalSymbols-A", xmlUCSIsMiscellaneousMathematicalSymbolsA},
- {"MiscellaneousMathematicalSymbols-B", xmlUCSIsMiscellaneousMathematicalSymbolsB},
- {"MiscellaneousSymbols", xmlUCSIsMiscellaneousSymbols},
- {"MiscellaneousSymbolsandArrows", xmlUCSIsMiscellaneousSymbolsandArrows},
- {"MiscellaneousTechnical", xmlUCSIsMiscellaneousTechnical},
- {"Mongolian", xmlUCSIsMongolian},
- {"MusicalSymbols", xmlUCSIsMusicalSymbols},
- {"Myanmar", xmlUCSIsMyanmar},
- {"NumberForms", xmlUCSIsNumberForms},
- {"Ogham", xmlUCSIsOgham},
- {"OldItalic", xmlUCSIsOldItalic},
- {"OpticalCharacterRecognition", xmlUCSIsOpticalCharacterRecognition},
- {"Oriya", xmlUCSIsOriya},
- {"Osmanya", xmlUCSIsOsmanya},
- {"PhoneticExtensions", xmlUCSIsPhoneticExtensions},
- {"PrivateUse", xmlUCSIsPrivateUse},
- {"PrivateUseArea", xmlUCSIsPrivateUseArea},
- {"Runic", xmlUCSIsRunic},
- {"Shavian", xmlUCSIsShavian},
- {"Sinhala", xmlUCSIsSinhala},
- {"SmallFormVariants", xmlUCSIsSmallFormVariants},
- {"SpacingModifierLetters", xmlUCSIsSpacingModifierLetters},
- {"Specials", xmlUCSIsSpecials},
- {"SuperscriptsandSubscripts", xmlUCSIsSuperscriptsandSubscripts},
- {"SupplementalArrows-A", xmlUCSIsSupplementalArrowsA},
- {"SupplementalArrows-B", xmlUCSIsSupplementalArrowsB},
- {"SupplementalMathematicalOperators", xmlUCSIsSupplementalMathematicalOperators},
- {"SupplementaryPrivateUseArea-A", xmlUCSIsSupplementaryPrivateUseAreaA},
- {"SupplementaryPrivateUseArea-B", xmlUCSIsSupplementaryPrivateUseAreaB},
- {"Syriac", xmlUCSIsSyriac},
- {"Tagalog", xmlUCSIsTagalog},
- {"Tagbanwa", xmlUCSIsTagbanwa},
- {"Tags", xmlUCSIsTags},
- {"TaiLe", xmlUCSIsTaiLe},
- {"TaiXuanJingSymbols", xmlUCSIsTaiXuanJingSymbols},
- {"Tamil", xmlUCSIsTamil},
- {"Telugu", xmlUCSIsTelugu},
- {"Thaana", xmlUCSIsThaana},
- {"Thai", xmlUCSIsThai},
- {"Tibetan", xmlUCSIsTibetan},
- {"Ugaritic", xmlUCSIsUgaritic},
- {"UnifiedCanadianAboriginalSyllabics", xmlUCSIsUnifiedCanadianAboriginalSyllabics},
- {"VariationSelectors", xmlUCSIsVariationSelectors},
- {"VariationSelectorsSupplement", xmlUCSIsVariationSelectorsSupplement},
- {"YiRadicals", xmlUCSIsYiRadicals},
- {"YiSyllables", xmlUCSIsYiSyllables},
- {"YijingHexagramSymbols", xmlUCSIsYijingHexagramSymbols}};
-
-static xmlUnicodeRange xmlUnicodeCats[] = {
- {"C", xmlUCSIsCatC},
- {"Cc", xmlUCSIsCatCc},
- {"Cf", xmlUCSIsCatCf},
- {"Co", xmlUCSIsCatCo},
- {"Cs", xmlUCSIsCatCs},
- {"L", xmlUCSIsCatL},
- {"Ll", xmlUCSIsCatLl},
- {"Lm", xmlUCSIsCatLm},
- {"Lo", xmlUCSIsCatLo},
- {"Lt", xmlUCSIsCatLt},
- {"Lu", xmlUCSIsCatLu},
- {"M", xmlUCSIsCatM},
- {"Mc", xmlUCSIsCatMc},
- {"Me", xmlUCSIsCatMe},
- {"Mn", xmlUCSIsCatMn},
- {"N", xmlUCSIsCatN},
- {"Nd", xmlUCSIsCatNd},
- {"Nl", xmlUCSIsCatNl},
- {"No", xmlUCSIsCatNo},
- {"P", xmlUCSIsCatP},
- {"Pc", xmlUCSIsCatPc},
- {"Pd", xmlUCSIsCatPd},
- {"Pe", xmlUCSIsCatPe},
- {"Pf", xmlUCSIsCatPf},
- {"Pi", xmlUCSIsCatPi},
- {"Po", xmlUCSIsCatPo},
- {"Ps", xmlUCSIsCatPs},
- {"S", xmlUCSIsCatS},
- {"Sc", xmlUCSIsCatSc},
- {"Sk", xmlUCSIsCatSk},
- {"Sm", xmlUCSIsCatSm},
- {"So", xmlUCSIsCatSo},
- {"Z", xmlUCSIsCatZ},
- {"Zl", xmlUCSIsCatZl},
- {"Zp", xmlUCSIsCatZp},
- {"Zs", xmlUCSIsCatZs}};
-
-static const xmlChSRange xmlCS[] = {{0x0, 0x1f}, {0x7f, 0x9f},
- {0xad, 0xad}, {0x600, 0x603}, {0x6dd, 0x6dd}, {0x70f, 0x70f},
- {0x17b4, 0x17b5}, {0x200b, 0x200f}, {0x202a, 0x202e}, {0x2060, 0x2063},
- {0x206a, 0x206f}, {0xd800, 0xd800}, {0xdb7f, 0xdb80}, {0xdbff, 0xdc00},
- {0xdfff, 0xe000}, {0xf8ff, 0xf8ff}, {0xfeff, 0xfeff}, {0xfff9, 0xfffb} };
-static const xmlChLRange xmlCL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001},
- {0xe0020, 0xe007f}, {0xf0000, 0xf0000}, {0xffffd, 0xffffd},
- {0x100000, 0x100000}, {0x10fffd, 0x10fffd} };
-static xmlChRangeGroup xmlCG = {18,7,xmlCS,xmlCL};
-
-static const xmlChSRange xmlCfS[] = {{0xad, 0xad}, {0x600, 0x603},
- {0x6dd, 0x6dd}, {0x70f, 0x70f}, {0x17b4, 0x17b5}, {0x200b, 0x200f},
- {0x202a, 0x202e}, {0x2060, 0x2063}, {0x206a, 0x206f}, {0xfeff, 0xfeff},
- {0xfff9, 0xfffb} };
-static const xmlChLRange xmlCfL[] = {{0x1d173, 0x1d17a}, {0xe0001, 0xe0001},
- {0xe0020, 0xe007f} };
-static xmlChRangeGroup xmlCfG = {11,3,xmlCfS,xmlCfL};
-
-static const xmlChSRange xmlLS[] = {{0x41, 0x5a}, {0x61, 0x7a},
- {0xaa, 0xaa}, {0xb5, 0xb5}, {0xba, 0xba}, {0xc0, 0xd6}, {0xd8, 0xf6},
- {0xf8, 0x236}, {0x250, 0x2c1}, {0x2c6, 0x2d1}, {0x2e0, 0x2e4},
- {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x386, 0x386}, {0x388, 0x38a},
- {0x38c, 0x38c}, {0x38e, 0x3a1}, {0x3a3, 0x3ce}, {0x3d0, 0x3f5},
- {0x3f7, 0x3fb}, {0x400, 0x481}, {0x48a, 0x4ce}, {0x4d0, 0x4f5},
- {0x4f8, 0x4f9}, {0x500, 0x50f}, {0x531, 0x556}, {0x559, 0x559},
- {0x561, 0x587}, {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a},
- {0x640, 0x64a}, {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5},
- {0x6e5, 0x6e6}, {0x6ee, 0x6ef}, {0x6fa, 0x6fc}, {0x6ff, 0x6ff},
- {0x710, 0x710}, {0x712, 0x72f}, {0x74d, 0x74f}, {0x780, 0x7a5},
- {0x7b1, 0x7b1}, {0x904, 0x939}, {0x93d, 0x93d}, {0x950, 0x950},
- {0x958, 0x961}, {0x985, 0x98c}, {0x98f, 0x990}, {0x993, 0x9a8},
- {0x9aa, 0x9b0}, {0x9b2, 0x9b2}, {0x9b6, 0x9b9}, {0x9bd, 0x9bd},
- {0x9dc, 0x9dd}, {0x9df, 0x9e1}, {0x9f0, 0x9f1}, {0xa05, 0xa0a},
- {0xa0f, 0xa10}, {0xa13, 0xa28}, {0xa2a, 0xa30}, {0xa32, 0xa33},
- {0xa35, 0xa36}, {0xa38, 0xa39}, {0xa59, 0xa5c}, {0xa5e, 0xa5e},
- {0xa72, 0xa74}, {0xa85, 0xa8d}, {0xa8f, 0xa91}, {0xa93, 0xaa8},
- {0xaaa, 0xab0}, {0xab2, 0xab3}, {0xab5, 0xab9}, {0xabd, 0xabd},
- {0xad0, 0xad0}, {0xae0, 0xae1}, {0xb05, 0xb0c}, {0xb0f, 0xb10},
- {0xb13, 0xb28}, {0xb2a, 0xb30}, {0xb32, 0xb33}, {0xb35, 0xb39},
- {0xb3d, 0xb3d}, {0xb5c, 0xb5d}, {0xb5f, 0xb61}, {0xb71, 0xb71},
- {0xb83, 0xb83}, {0xb85, 0xb8a}, {0xb8e, 0xb90}, {0xb92, 0xb95},
- {0xb99, 0xb9a}, {0xb9c, 0xb9c}, {0xb9e, 0xb9f}, {0xba3, 0xba4},
- {0xba8, 0xbaa}, {0xbae, 0xbb5}, {0xbb7, 0xbb9}, {0xc05, 0xc0c},
- {0xc0e, 0xc10}, {0xc12, 0xc28}, {0xc2a, 0xc33}, {0xc35, 0xc39},
- {0xc60, 0xc61}, {0xc85, 0xc8c}, {0xc8e, 0xc90}, {0xc92, 0xca8},
- {0xcaa, 0xcb3}, {0xcb5, 0xcb9}, {0xcbd, 0xcbd}, {0xcde, 0xcde},
- {0xce0, 0xce1}, {0xd05, 0xd0c}, {0xd0e, 0xd10}, {0xd12, 0xd28},
- {0xd2a, 0xd39}, {0xd60, 0xd61}, {0xd85, 0xd96}, {0xd9a, 0xdb1},
- {0xdb3, 0xdbb}, {0xdbd, 0xdbd}, {0xdc0, 0xdc6}, {0xe01, 0xe30},
- {0xe32, 0xe33}, {0xe40, 0xe46}, {0xe81, 0xe82}, {0xe84, 0xe84},
- {0xe87, 0xe88}, {0xe8a, 0xe8a}, {0xe8d, 0xe8d}, {0xe94, 0xe97},
- {0xe99, 0xe9f}, {0xea1, 0xea3}, {0xea5, 0xea5}, {0xea7, 0xea7},
- {0xeaa, 0xeab}, {0xead, 0xeb0}, {0xeb2, 0xeb3}, {0xebd, 0xebd},
- {0xec0, 0xec4}, {0xec6, 0xec6}, {0xedc, 0xedd}, {0xf00, 0xf00},
- {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b}, {0x1000, 0x1021},
- {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055}, {0x10a0, 0x10c5},
- {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9},
- {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d},
- {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286},
- {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0},
- {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5},
- {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e},
- {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346},
- {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676},
- {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711},
- {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770},
- {0x1780, 0x17b3}, {0x17d7, 0x17d7}, {0x17dc, 0x17dc}, {0x1820, 0x1877},
- {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974},
- {0x1d00, 0x1d6b}, {0x1e00, 0x1e9b}, {0x1ea0, 0x1ef9}, {0x1f00, 0x1f15},
- {0x1f18, 0x1f1d}, {0x1f20, 0x1f45}, {0x1f48, 0x1f4d}, {0x1f50, 0x1f57},
- {0x1f59, 0x1f59}, {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f7d},
- {0x1f80, 0x1fb4}, {0x1fb6, 0x1fbc}, {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4},
- {0x1fc6, 0x1fcc}, {0x1fd0, 0x1fd3}, {0x1fd6, 0x1fdb}, {0x1fe0, 0x1fec},
- {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ffc}, {0x2071, 0x2071}, {0x207f, 0x207f},
- {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210a, 0x2113}, {0x2115, 0x2115},
- {0x2119, 0x211d}, {0x2124, 0x2124}, {0x2126, 0x2126}, {0x2128, 0x2128},
- {0x212a, 0x212d}, {0x212f, 0x2131}, {0x2133, 0x2139}, {0x213d, 0x213f},
- {0x2145, 0x2149}, {0x3005, 0x3006}, {0x3031, 0x3035}, {0x303b, 0x303c},
- {0x3041, 0x3096}, {0x309d, 0x309f}, {0x30a1, 0x30fa}, {0x30fc, 0x30ff},
- {0x3105, 0x312c}, {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff},
- {0x3400, 0x3400}, {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5},
- {0xa000, 0xa48c}, {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d},
- {0xfa30, 0xfa6a}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17}, {0xfb1d, 0xfb1d},
- {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c}, {0xfb3e, 0xfb3e},
- {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1}, {0xfbd3, 0xfd3d},
- {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb}, {0xfe70, 0xfe74},
- {0xfe76, 0xfefc}, {0xff21, 0xff3a}, {0xff41, 0xff5a}, {0xff66, 0xffbe},
- {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7}, {0xffda, 0xffdc} };
-static const xmlChLRange xmlLL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026},
- {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d},
- {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e},
- {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10400, 0x1049d},
- {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835},
- {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f},
- {0x1d400, 0x1d454}, {0x1d456, 0x1d49c}, {0x1d49e, 0x1d49f},
- {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6}, {0x1d4a9, 0x1d4ac},
- {0x1d4ae, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3},
- {0x1d4c5, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
- {0x1d516, 0x1d51c}, {0x1d51e, 0x1d539}, {0x1d53b, 0x1d53e},
- {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550},
- {0x1d552, 0x1d6a3}, {0x1d6a8, 0x1d6c0}, {0x1d6c2, 0x1d6da},
- {0x1d6dc, 0x1d6fa}, {0x1d6fc, 0x1d714}, {0x1d716, 0x1d734},
- {0x1d736, 0x1d74e}, {0x1d750, 0x1d76e}, {0x1d770, 0x1d788},
- {0x1d78a, 0x1d7a8}, {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9},
- {0x20000, 0x20000}, {0x2a6d6, 0x2a6d6}, {0x2f800, 0x2fa1d} };
-static xmlChRangeGroup xmlLG = {279,50,xmlLS,xmlLL};
-
-static const xmlChSRange xmlLlS[] = {{0x61, 0x7a}, {0xaa, 0xaa},
- {0xb5, 0xb5}, {0xba, 0xba}, {0xdf, 0xf6}, {0xf8, 0xff}, {0x101, 0x101},
- {0x103, 0x103}, {0x105, 0x105}, {0x107, 0x107}, {0x109, 0x109},
- {0x10b, 0x10b}, {0x10d, 0x10d}, {0x10f, 0x10f}, {0x111, 0x111},
- {0x113, 0x113}, {0x115, 0x115}, {0x117, 0x117}, {0x119, 0x119},
- {0x11b, 0x11b}, {0x11d, 0x11d}, {0x11f, 0x11f}, {0x121, 0x121},
- {0x123, 0x123}, {0x125, 0x125}, {0x127, 0x127}, {0x129, 0x129},
- {0x12b, 0x12b}, {0x12d, 0x12d}, {0x12f, 0x12f}, {0x131, 0x131},
- {0x133, 0x133}, {0x135, 0x135}, {0x137, 0x138}, {0x13a, 0x13a},
- {0x13c, 0x13c}, {0x13e, 0x13e}, {0x140, 0x140}, {0x142, 0x142},
- {0x144, 0x144}, {0x146, 0x146}, {0x148, 0x149}, {0x14b, 0x14b},
- {0x14d, 0x14d}, {0x14f, 0x14f}, {0x151, 0x151}, {0x153, 0x153},
- {0x155, 0x155}, {0x157, 0x157}, {0x159, 0x159}, {0x15b, 0x15b},
- {0x15d, 0x15d}, {0x15f, 0x15f}, {0x161, 0x161}, {0x163, 0x163},
- {0x165, 0x165}, {0x167, 0x167}, {0x169, 0x169}, {0x16b, 0x16b},
- {0x16d, 0x16d}, {0x16f, 0x16f}, {0x171, 0x171}, {0x173, 0x173},
- {0x175, 0x175}, {0x177, 0x177}, {0x17a, 0x17a}, {0x17c, 0x17c},
- {0x17e, 0x180}, {0x183, 0x183}, {0x185, 0x185}, {0x188, 0x188},
- {0x18c, 0x18d}, {0x192, 0x192}, {0x195, 0x195}, {0x199, 0x19b},
- {0x19e, 0x19e}, {0x1a1, 0x1a1}, {0x1a3, 0x1a3}, {0x1a5, 0x1a5},
- {0x1a8, 0x1a8}, {0x1aa, 0x1ab}, {0x1ad, 0x1ad}, {0x1b0, 0x1b0},
- {0x1b4, 0x1b4}, {0x1b6, 0x1b6}, {0x1b9, 0x1ba}, {0x1bd, 0x1bf},
- {0x1c6, 0x1c6}, {0x1c9, 0x1c9}, {0x1cc, 0x1cc}, {0x1ce, 0x1ce},
- {0x1d0, 0x1d0}, {0x1d2, 0x1d2}, {0x1d4, 0x1d4}, {0x1d6, 0x1d6},
- {0x1d8, 0x1d8}, {0x1da, 0x1da}, {0x1dc, 0x1dd}, {0x1df, 0x1df},
- {0x1e1, 0x1e1}, {0x1e3, 0x1e3}, {0x1e5, 0x1e5}, {0x1e7, 0x1e7},
- {0x1e9, 0x1e9}, {0x1eb, 0x1eb}, {0x1ed, 0x1ed}, {0x1ef, 0x1f0},
- {0x1f3, 0x1f3}, {0x1f5, 0x1f5}, {0x1f9, 0x1f9}, {0x1fb, 0x1fb},
- {0x1fd, 0x1fd}, {0x1ff, 0x1ff}, {0x201, 0x201}, {0x203, 0x203},
- {0x205, 0x205}, {0x207, 0x207}, {0x209, 0x209}, {0x20b, 0x20b},
- {0x20d, 0x20d}, {0x20f, 0x20f}, {0x211, 0x211}, {0x213, 0x213},
- {0x215, 0x215}, {0x217, 0x217}, {0x219, 0x219}, {0x21b, 0x21b},
- {0x21d, 0x21d}, {0x21f, 0x21f}, {0x221, 0x221}, {0x223, 0x223},
- {0x225, 0x225}, {0x227, 0x227}, {0x229, 0x229}, {0x22b, 0x22b},
- {0x22d, 0x22d}, {0x22f, 0x22f}, {0x231, 0x231}, {0x233, 0x236},
- {0x250, 0x2af}, {0x390, 0x390}, {0x3ac, 0x3ce}, {0x3d0, 0x3d1},
- {0x3d5, 0x3d7}, {0x3d9, 0x3d9}, {0x3db, 0x3db}, {0x3dd, 0x3dd},
- {0x3df, 0x3df}, {0x3e1, 0x3e1}, {0x3e3, 0x3e3}, {0x3e5, 0x3e5},
- {0x3e7, 0x3e7}, {0x3e9, 0x3e9}, {0x3eb, 0x3eb}, {0x3ed, 0x3ed},
- {0x3ef, 0x3f3}, {0x3f5, 0x3f5}, {0x3f8, 0x3f8}, {0x3fb, 0x3fb},
- {0x430, 0x45f}, {0x461, 0x461}, {0x463, 0x463}, {0x465, 0x465},
- {0x467, 0x467}, {0x469, 0x469}, {0x46b, 0x46b}, {0x46d, 0x46d},
- {0x46f, 0x46f}, {0x471, 0x471}, {0x473, 0x473}, {0x475, 0x475},
- {0x477, 0x477}, {0x479, 0x479}, {0x47b, 0x47b}, {0x47d, 0x47d},
- {0x47f, 0x47f}, {0x481, 0x481}, {0x48b, 0x48b}, {0x48d, 0x48d},
- {0x48f, 0x48f}, {0x491, 0x491}, {0x493, 0x493}, {0x495, 0x495},
- {0x497, 0x497}, {0x499, 0x499}, {0x49b, 0x49b}, {0x49d, 0x49d},
- {0x49f, 0x49f}, {0x4a1, 0x4a1}, {0x4a3, 0x4a3}, {0x4a5, 0x4a5},
- {0x4a7, 0x4a7}, {0x4a9, 0x4a9}, {0x4ab, 0x4ab}, {0x4ad, 0x4ad},
- {0x4af, 0x4af}, {0x4b1, 0x4b1}, {0x4b3, 0x4b3}, {0x4b5, 0x4b5},
- {0x4b7, 0x4b7}, {0x4b9, 0x4b9}, {0x4bb, 0x4bb}, {0x4bd, 0x4bd},
- {0x4bf, 0x4bf}, {0x4c2, 0x4c2}, {0x4c4, 0x4c4}, {0x4c6, 0x4c6},
- {0x4c8, 0x4c8}, {0x4ca, 0x4ca}, {0x4cc, 0x4cc}, {0x4ce, 0x4ce},
- {0x4d1, 0x4d1}, {0x4d3, 0x4d3}, {0x4d5, 0x4d5}, {0x4d7, 0x4d7},
- {0x4d9, 0x4d9}, {0x4db, 0x4db}, {0x4dd, 0x4dd}, {0x4df, 0x4df},
- {0x4e1, 0x4e1}, {0x4e3, 0x4e3}, {0x4e5, 0x4e5}, {0x4e7, 0x4e7},
- {0x4e9, 0x4e9}, {0x4eb, 0x4eb}, {0x4ed, 0x4ed}, {0x4ef, 0x4ef},
- {0x4f1, 0x4f1}, {0x4f3, 0x4f3}, {0x4f5, 0x4f5}, {0x4f9, 0x4f9},
- {0x501, 0x501}, {0x503, 0x503}, {0x505, 0x505}, {0x507, 0x507},
- {0x509, 0x509}, {0x50b, 0x50b}, {0x50d, 0x50d}, {0x50f, 0x50f},
- {0x561, 0x587}, {0x1d00, 0x1d2b}, {0x1d62, 0x1d6b}, {0x1e01, 0x1e01},
- {0x1e03, 0x1e03}, {0x1e05, 0x1e05}, {0x1e07, 0x1e07}, {0x1e09, 0x1e09},
- {0x1e0b, 0x1e0b}, {0x1e0d, 0x1e0d}, {0x1e0f, 0x1e0f}, {0x1e11, 0x1e11},
- {0x1e13, 0x1e13}, {0x1e15, 0x1e15}, {0x1e17, 0x1e17}, {0x1e19, 0x1e19},
- {0x1e1b, 0x1e1b}, {0x1e1d, 0x1e1d}, {0x1e1f, 0x1e1f}, {0x1e21, 0x1e21},
- {0x1e23, 0x1e23}, {0x1e25, 0x1e25}, {0x1e27, 0x1e27}, {0x1e29, 0x1e29},
- {0x1e2b, 0x1e2b}, {0x1e2d, 0x1e2d}, {0x1e2f, 0x1e2f}, {0x1e31, 0x1e31},
- {0x1e33, 0x1e33}, {0x1e35, 0x1e35}, {0x1e37, 0x1e37}, {0x1e39, 0x1e39},
- {0x1e3b, 0x1e3b}, {0x1e3d, 0x1e3d}, {0x1e3f, 0x1e3f}, {0x1e41, 0x1e41},
- {0x1e43, 0x1e43}, {0x1e45, 0x1e45}, {0x1e47, 0x1e47}, {0x1e49, 0x1e49},
- {0x1e4b, 0x1e4b}, {0x1e4d, 0x1e4d}, {0x1e4f, 0x1e4f}, {0x1e51, 0x1e51},
- {0x1e53, 0x1e53}, {0x1e55, 0x1e55}, {0x1e57, 0x1e57}, {0x1e59, 0x1e59},
- {0x1e5b, 0x1e5b}, {0x1e5d, 0x1e5d}, {0x1e5f, 0x1e5f}, {0x1e61, 0x1e61},
- {0x1e63, 0x1e63}, {0x1e65, 0x1e65}, {0x1e67, 0x1e67}, {0x1e69, 0x1e69},
- {0x1e6b, 0x1e6b}, {0x1e6d, 0x1e6d}, {0x1e6f, 0x1e6f}, {0x1e71, 0x1e71},
- {0x1e73, 0x1e73}, {0x1e75, 0x1e75}, {0x1e77, 0x1e77}, {0x1e79, 0x1e79},
- {0x1e7b, 0x1e7b}, {0x1e7d, 0x1e7d}, {0x1e7f, 0x1e7f}, {0x1e81, 0x1e81},
- {0x1e83, 0x1e83}, {0x1e85, 0x1e85}, {0x1e87, 0x1e87}, {0x1e89, 0x1e89},
- {0x1e8b, 0x1e8b}, {0x1e8d, 0x1e8d}, {0x1e8f, 0x1e8f}, {0x1e91, 0x1e91},
- {0x1e93, 0x1e93}, {0x1e95, 0x1e9b}, {0x1ea1, 0x1ea1}, {0x1ea3, 0x1ea3},
- {0x1ea5, 0x1ea5}, {0x1ea7, 0x1ea7}, {0x1ea9, 0x1ea9}, {0x1eab, 0x1eab},
- {0x1ead, 0x1ead}, {0x1eaf, 0x1eaf}, {0x1eb1, 0x1eb1}, {0x1eb3, 0x1eb3},
- {0x1eb5, 0x1eb5}, {0x1eb7, 0x1eb7}, {0x1eb9, 0x1eb9}, {0x1ebb, 0x1ebb},
- {0x1ebd, 0x1ebd}, {0x1ebf, 0x1ebf}, {0x1ec1, 0x1ec1}, {0x1ec3, 0x1ec3},
- {0x1ec5, 0x1ec5}, {0x1ec7, 0x1ec7}, {0x1ec9, 0x1ec9}, {0x1ecb, 0x1ecb},
- {0x1ecd, 0x1ecd}, {0x1ecf, 0x1ecf}, {0x1ed1, 0x1ed1}, {0x1ed3, 0x1ed3},
- {0x1ed5, 0x1ed5}, {0x1ed7, 0x1ed7}, {0x1ed9, 0x1ed9}, {0x1edb, 0x1edb},
- {0x1edd, 0x1edd}, {0x1edf, 0x1edf}, {0x1ee1, 0x1ee1}, {0x1ee3, 0x1ee3},
- {0x1ee5, 0x1ee5}, {0x1ee7, 0x1ee7}, {0x1ee9, 0x1ee9}, {0x1eeb, 0x1eeb},
- {0x1eed, 0x1eed}, {0x1eef, 0x1eef}, {0x1ef1, 0x1ef1}, {0x1ef3, 0x1ef3},
- {0x1ef5, 0x1ef5}, {0x1ef7, 0x1ef7}, {0x1ef9, 0x1ef9}, {0x1f00, 0x1f07},
- {0x1f10, 0x1f15}, {0x1f20, 0x1f27}, {0x1f30, 0x1f37}, {0x1f40, 0x1f45},
- {0x1f50, 0x1f57}, {0x1f60, 0x1f67}, {0x1f70, 0x1f7d}, {0x1f80, 0x1f87},
- {0x1f90, 0x1f97}, {0x1fa0, 0x1fa7}, {0x1fb0, 0x1fb4}, {0x1fb6, 0x1fb7},
- {0x1fbe, 0x1fbe}, {0x1fc2, 0x1fc4}, {0x1fc6, 0x1fc7}, {0x1fd0, 0x1fd3},
- {0x1fd6, 0x1fd7}, {0x1fe0, 0x1fe7}, {0x1ff2, 0x1ff4}, {0x1ff6, 0x1ff7},
- {0x2071, 0x2071}, {0x207f, 0x207f}, {0x210a, 0x210a}, {0x210e, 0x210f},
- {0x2113, 0x2113}, {0x212f, 0x212f}, {0x2134, 0x2134}, {0x2139, 0x2139},
- {0x213d, 0x213d}, {0x2146, 0x2149}, {0xfb00, 0xfb06}, {0xfb13, 0xfb17},
- {0xff41, 0xff5a} };
-static const xmlChLRange xmlLlL[] = {{0x10428, 0x1044f}, {0x1d41a, 0x1d433},
- {0x1d44e, 0x1d454}, {0x1d456, 0x1d467}, {0x1d482, 0x1d49b},
- {0x1d4b6, 0x1d4b9}, {0x1d4bb, 0x1d4bb}, {0x1d4bd, 0x1d4c3},
- {0x1d4c5, 0x1d4cf}, {0x1d4ea, 0x1d503}, {0x1d51e, 0x1d537},
- {0x1d552, 0x1d56b}, {0x1d586, 0x1d59f}, {0x1d5ba, 0x1d5d3},
- {0x1d5ee, 0x1d607}, {0x1d622, 0x1d63b}, {0x1d656, 0x1d66f},
- {0x1d68a, 0x1d6a3}, {0x1d6c2, 0x1d6da}, {0x1d6dc, 0x1d6e1},
- {0x1d6fc, 0x1d714}, {0x1d716, 0x1d71b}, {0x1d736, 0x1d74e},
- {0x1d750, 0x1d755}, {0x1d770, 0x1d788}, {0x1d78a, 0x1d78f},
- {0x1d7aa, 0x1d7c2}, {0x1d7c4, 0x1d7c9} };
-static xmlChRangeGroup xmlLlG = {396,28,xmlLlS,xmlLlL};
-
-static const xmlChSRange xmlLmS[] = {{0x2b0, 0x2c1}, {0x2c6, 0x2d1},
- {0x2e0, 0x2e4}, {0x2ee, 0x2ee}, {0x37a, 0x37a}, {0x559, 0x559},
- {0x640, 0x640}, {0x6e5, 0x6e6}, {0xe46, 0xe46}, {0xec6, 0xec6},
- {0x17d7, 0x17d7}, {0x1843, 0x1843}, {0x1d2c, 0x1d61}, {0x3005, 0x3005},
- {0x3031, 0x3035}, {0x303b, 0x303b}, {0x309d, 0x309e}, {0x30fc, 0x30fe},
- {0xff70, 0xff70}, {0xff9e, 0xff9f} };
-static xmlChRangeGroup xmlLmG = {20,0,xmlLmS,NULL};
-
-static const xmlChSRange xmlLoS[] = {{0x1bb, 0x1bb}, {0x1c0, 0x1c3},
- {0x5d0, 0x5ea}, {0x5f0, 0x5f2}, {0x621, 0x63a}, {0x641, 0x64a},
- {0x66e, 0x66f}, {0x671, 0x6d3}, {0x6d5, 0x6d5}, {0x6ee, 0x6ef},
- {0x6fa, 0x6fc}, {0x6ff, 0x6ff}, {0x710, 0x710}, {0x712, 0x72f},
- {0x74d, 0x74f}, {0x780, 0x7a5}, {0x7b1, 0x7b1}, {0x904, 0x939},
- {0x93d, 0x93d}, {0x950, 0x950}, {0x958, 0x961}, {0x985, 0x98c},
- {0x98f, 0x990}, {0x993, 0x9a8}, {0x9aa, 0x9b0}, {0x9b2, 0x9b2},
- {0x9b6, 0x9b9}, {0x9bd, 0x9bd}, {0x9dc, 0x9dd}, {0x9df, 0x9e1},
- {0x9f0, 0x9f1}, {0xa05, 0xa0a}, {0xa0f, 0xa10}, {0xa13, 0xa28},
- {0xa2a, 0xa30}, {0xa32, 0xa33}, {0xa35, 0xa36}, {0xa38, 0xa39},
- {0xa59, 0xa5c}, {0xa5e, 0xa5e}, {0xa72, 0xa74}, {0xa85, 0xa8d},
- {0xa8f, 0xa91}, {0xa93, 0xaa8}, {0xaaa, 0xab0}, {0xab2, 0xab3},
- {0xab5, 0xab9}, {0xabd, 0xabd}, {0xad0, 0xad0}, {0xae0, 0xae1},
- {0xb05, 0xb0c}, {0xb0f, 0xb10}, {0xb13, 0xb28}, {0xb2a, 0xb30},
- {0xb32, 0xb33}, {0xb35, 0xb39}, {0xb3d, 0xb3d}, {0xb5c, 0xb5d},
- {0xb5f, 0xb61}, {0xb71, 0xb71}, {0xb83, 0xb83}, {0xb85, 0xb8a},
- {0xb8e, 0xb90}, {0xb92, 0xb95}, {0xb99, 0xb9a}, {0xb9c, 0xb9c},
- {0xb9e, 0xb9f}, {0xba3, 0xba4}, {0xba8, 0xbaa}, {0xbae, 0xbb5},
- {0xbb7, 0xbb9}, {0xc05, 0xc0c}, {0xc0e, 0xc10}, {0xc12, 0xc28},
- {0xc2a, 0xc33}, {0xc35, 0xc39}, {0xc60, 0xc61}, {0xc85, 0xc8c},
- {0xc8e, 0xc90}, {0xc92, 0xca8}, {0xcaa, 0xcb3}, {0xcb5, 0xcb9},
- {0xcbd, 0xcbd}, {0xcde, 0xcde}, {0xce0, 0xce1}, {0xd05, 0xd0c},
- {0xd0e, 0xd10}, {0xd12, 0xd28}, {0xd2a, 0xd39}, {0xd60, 0xd61},
- {0xd85, 0xd96}, {0xd9a, 0xdb1}, {0xdb3, 0xdbb}, {0xdbd, 0xdbd},
- {0xdc0, 0xdc6}, {0xe01, 0xe30}, {0xe32, 0xe33}, {0xe40, 0xe45},
- {0xe81, 0xe82}, {0xe84, 0xe84}, {0xe87, 0xe88}, {0xe8a, 0xe8a},
- {0xe8d, 0xe8d}, {0xe94, 0xe97}, {0xe99, 0xe9f}, {0xea1, 0xea3},
- {0xea5, 0xea5}, {0xea7, 0xea7}, {0xeaa, 0xeab}, {0xead, 0xeb0},
- {0xeb2, 0xeb3}, {0xebd, 0xebd}, {0xec0, 0xec4}, {0xedc, 0xedd},
- {0xf00, 0xf00}, {0xf40, 0xf47}, {0xf49, 0xf6a}, {0xf88, 0xf8b},
- {0x1000, 0x1021}, {0x1023, 0x1027}, {0x1029, 0x102a}, {0x1050, 0x1055},
- {0x10d0, 0x10f8}, {0x1100, 0x1159}, {0x115f, 0x11a2}, {0x11a8, 0x11f9},
- {0x1200, 0x1206}, {0x1208, 0x1246}, {0x1248, 0x1248}, {0x124a, 0x124d},
- {0x1250, 0x1256}, {0x1258, 0x1258}, {0x125a, 0x125d}, {0x1260, 0x1286},
- {0x1288, 0x1288}, {0x128a, 0x128d}, {0x1290, 0x12ae}, {0x12b0, 0x12b0},
- {0x12b2, 0x12b5}, {0x12b8, 0x12be}, {0x12c0, 0x12c0}, {0x12c2, 0x12c5},
- {0x12c8, 0x12ce}, {0x12d0, 0x12d6}, {0x12d8, 0x12ee}, {0x12f0, 0x130e},
- {0x1310, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x131e}, {0x1320, 0x1346},
- {0x1348, 0x135a}, {0x13a0, 0x13f4}, {0x1401, 0x166c}, {0x166f, 0x1676},
- {0x1681, 0x169a}, {0x16a0, 0x16ea}, {0x1700, 0x170c}, {0x170e, 0x1711},
- {0x1720, 0x1731}, {0x1740, 0x1751}, {0x1760, 0x176c}, {0x176e, 0x1770},
- {0x1780, 0x17b3}, {0x17dc, 0x17dc}, {0x1820, 0x1842}, {0x1844, 0x1877},
- {0x1880, 0x18a8}, {0x1900, 0x191c}, {0x1950, 0x196d}, {0x1970, 0x1974},
- {0x2135, 0x2138}, {0x3006, 0x3006}, {0x303c, 0x303c}, {0x3041, 0x3096},
- {0x309f, 0x309f}, {0x30a1, 0x30fa}, {0x30ff, 0x30ff}, {0x3105, 0x312c},
- {0x3131, 0x318e}, {0x31a0, 0x31b7}, {0x31f0, 0x31ff}, {0x3400, 0x3400},
- {0x4db5, 0x4db5}, {0x4e00, 0x4e00}, {0x9fa5, 0x9fa5}, {0xa000, 0xa48c},
- {0xac00, 0xac00}, {0xd7a3, 0xd7a3}, {0xf900, 0xfa2d}, {0xfa30, 0xfa6a},
- {0xfb1d, 0xfb1d}, {0xfb1f, 0xfb28}, {0xfb2a, 0xfb36}, {0xfb38, 0xfb3c},
- {0xfb3e, 0xfb3e}, {0xfb40, 0xfb41}, {0xfb43, 0xfb44}, {0xfb46, 0xfbb1},
- {0xfbd3, 0xfd3d}, {0xfd50, 0xfd8f}, {0xfd92, 0xfdc7}, {0xfdf0, 0xfdfb},
- {0xfe70, 0xfe74}, {0xfe76, 0xfefc}, {0xff66, 0xff6f}, {0xff71, 0xff9d},
- {0xffa0, 0xffbe}, {0xffc2, 0xffc7}, {0xffca, 0xffcf}, {0xffd2, 0xffd7},
- {0xffda, 0xffdc} };
-static const xmlChLRange xmlLoL[] = {{0x10000, 0x1000b}, {0x1000d, 0x10026},
- {0x10028, 0x1003a}, {0x1003c, 0x1003d}, {0x1003f, 0x1004d},
- {0x10050, 0x1005d}, {0x10080, 0x100fa}, {0x10300, 0x1031e},
- {0x10330, 0x10349}, {0x10380, 0x1039d}, {0x10450, 0x1049d},
- {0x10800, 0x10805}, {0x10808, 0x10808}, {0x1080a, 0x10835},
- {0x10837, 0x10838}, {0x1083c, 0x1083c}, {0x1083f, 0x1083f},
- {0x20000, 0x20000}, {0x2a6d6, 0x2a6d6}, {0x2f800, 0x2fa1d} };
-static xmlChRangeGroup xmlLoG = {211,20,xmlLoS,xmlLoL};
-
-static const xmlChSRange xmlLtS[] = {{0x1c5, 0x1c5}, {0x1c8, 0x1c8},
- {0x1cb, 0x1cb}, {0x1f2, 0x1f2}, {0x1f88, 0x1f8f}, {0x1f98, 0x1f9f},
- {0x1fa8, 0x1faf}, {0x1fbc, 0x1fbc}, {0x1fcc, 0x1fcc}, {0x1ffc, 0x1ffc} };
-static xmlChRangeGroup xmlLtG = {10,0,xmlLtS,NULL};
-
-static const xmlChSRange xmlLuS[] = {{0x41, 0x5a}, {0xc0, 0xd6},
- {0xd8, 0xde}, {0x100, 0x100}, {0x102, 0x102}, {0x104, 0x104},
- {0x106, 0x106}, {0x108, 0x108}, {0x10a, 0x10a}, {0x10c, 0x10c},
- {0x10e, 0x10e}, {0x110, 0x110}, {0x112, 0x112}, {0x114, 0x114},
- {0x116, 0x116}, {0x118, 0x118}, {0x11a, 0x11a}, {0x11c, 0x11c},
- {0x11e, 0x11e}, {0x120, 0x120}, {0x122, 0x122}, {0x124, 0x124},
- {0x126, 0x126}, {0x128, 0x128}, {0x12a, 0x12a}, {0x12c, 0x12c},
- {0x12e, 0x12e}, {0x130, 0x130}, {0x132, 0x132}, {0x134, 0x134},
- {0x136, 0x136}, {0x139, 0x139}, {0x13b, 0x13b}, {0x13d, 0x13d},
- {0x13f, 0x13f}, {0x141, 0x141}, {0x143, 0x143}, {0x145, 0x145},
- {0x147, 0x147}, {0x14a, 0x14a}, {0x14c, 0x14c}, {0x14e, 0x14e},
- {0x150, 0x150}, {0x152, 0x152}, {0x154, 0x154}, {0x156, 0x156},
- {0x158, 0x158}, {0x15a, 0x15a}, {0x15c, 0x15c}, {0x15e, 0x15e},
- {0x160, 0x160}, {0x162, 0x162}, {0x164, 0x164}, {0x166, 0x166},
- {0x168, 0x168}, {0x16a, 0x16a}, {0x16c, 0x16c}, {0x16e, 0x16e},
- {0x170, 0x170}, {0x172, 0x172}, {0x174, 0x174}, {0x176, 0x176},
- {0x178, 0x179}, {0x17b, 0x17b}, {0x17d, 0x17d}, {0x181, 0x182},
- {0x184, 0x184}, {0x186, 0x187}, {0x189, 0x18b}, {0x18e, 0x191},
- {0x193, 0x194}, {0x196, 0x198}, {0x19c, 0x19d}, {0x19f, 0x1a0},
- {0x1a2, 0x1a2}, {0x1a4, 0x1a4}, {0x1a6, 0x1a7}, {0x1a9, 0x1a9},
- {0x1ac, 0x1ac}, {0x1ae, 0x1af}, {0x1b1, 0x1b3}, {0x1b5, 0x1b5},
- {0x1b7, 0x1b8}, {0x1bc, 0x1bc}, {0x1c4, 0x1c4}, {0x1c7, 0x1c7},
- {0x1ca, 0x1ca}, {0x1cd, 0x1cd}, {0x1cf, 0x1cf}, {0x1d1, 0x1d1},
- {0x1d3, 0x1d3}, {0x1d5, 0x1d5}, {0x1d7, 0x1d7}, {0x1d9, 0x1d9},
- {0x1db, 0x1db}, {0x1de, 0x1de}, {0x1e0, 0x1e0}, {0x1e2, 0x1e2},
- {0x1e4, 0x1e4}, {0x1e6, 0x1e6}, {0x1e8, 0x1e8}, {0x1ea, 0x1ea},
- {0x1ec, 0x1ec}, {0x1ee, 0x1ee}, {0x1f1, 0x1f1}, {0x1f4, 0x1f4},
- {0x1f6, 0x1f8}, {0x1fa, 0x1fa}, {0x1fc, 0x1fc}, {0x1fe, 0x1fe},
- {0x200, 0x200}, {0x202, 0x202}, {0x204, 0x204}, {0x206, 0x206},
- {0x208, 0x208}, {0x20a, 0x20a}, {0x20c, 0x20c}, {0x20e, 0x20e},
- {0x210, 0x210}, {0x212, 0x212}, {0x214, 0x214}, {0x216, 0x216},
- {0x218, 0x218}, {0x21a, 0x21a}, {0x21c, 0x21c}, {0x21e, 0x21e},
- {0x220, 0x220}, {0x222, 0x222}, {0x224, 0x224}, {0x226, 0x226},
- {0x228, 0x228}, {0x22a, 0x22a}, {0x22c, 0x22c}, {0x22e, 0x22e},
- {0x230, 0x230}, {0x232, 0x232}, {0x386, 0x386}, {0x388, 0x38a},
- {0x38c, 0x38c}, {0x38e, 0x38f}, {0x391, 0x3a1}, {0x3a3, 0x3ab},
- {0x3d2, 0x3d4}, {0x3d8, 0x3d8}, {0x3da, 0x3da}, {0x3dc, 0x3dc},
- {0x3de, 0x3de}, {0x3e0, 0x3e0}, {0x3e2, 0x3e2}, {0x3e4, 0x3e4},
- {0x3e6, 0x3e6}, {0x3e8, 0x3e8}, {0x3ea, 0x3ea}, {0x3ec, 0x3ec},
- {0x3ee, 0x3ee}, {0x3f4, 0x3f4}, {0x3f7, 0x3f7}, {0x3f9, 0x3fa},
- {0x400, 0x42f}, {0x460, 0x460}, {0x462, 0x462}, {0x464, 0x464},
- {0x466, 0x466}, {0x468, 0x468}, {0x46a, 0x46a}, {0x46c, 0x46c},
- {0x46e, 0x46e}, {0x470, 0x470}, {0x472, 0x472}, {0x474, 0x474},
- {0x476, 0x476}, {0x478, 0x478}, {0x47a, 0x47a}, {0x47c, 0x47c},
- {0x47e, 0x47e}, {0x480, 0x480}, {0x48a, 0x48a}, {0x48c, 0x48c},
- {0x48e, 0x48e}, {0x490, 0x490}, {0x492, 0x492}, {0x494, 0x494},
- {0x496, 0x496}, {0x498, 0x498}, {0x49a, 0x49a}, {0x49c, 0x49c},
- {0x49e, 0x49e}, {0x4a0, 0x4a0}, {0x4a2, 0x4a2}, {0x4a4, 0x4a4},
- {0x4a6, 0x4a6}, {0x4a8, 0x4a8}, {0x4aa, 0x4aa}, {0x4ac, 0x4ac},
- {0x4ae, 0x4ae}, {0x4b0, 0x4b0}, {0x4b2, 0x4b2}, {0x4b4, 0x4b4},
- {0x4b6, 0x4b6}, {0x4b8, 0x4b8}, {0x4ba, 0x4ba}, {0x4bc, 0x4bc},
- {0x4be, 0x4be}, {0x4c0, 0x4c1}, {0x4c3, 0x4c3}, {0x4c5, 0x4c5},
- {0x4c7, 0x4c7}, {0x4c9, 0x4c9}, {0x4cb, 0x4cb}, {0x4cd, 0x4cd},
- {0x4d0, 0x4d0}, {0x4d2, 0x4d2}, {0x4d4, 0x4d4}, {0x4d6, 0x4d6},
- {0x4d8, 0x4d8}, {0x4da, 0x4da}, {0x4dc, 0x4dc}, {0x4de, 0x4de},
- {0x4e0, 0x4e0}, {0x4e2, 0x4e2}, {0x4e4, 0x4e4}, {0x4e6, 0x4e6},
- {0x4e8, 0x4e8}, {0x4ea, 0x4ea}, {0x4ec, 0x4ec}, {0x4ee, 0x4ee},
- {0x4f0, 0x4f0}, {0x4f2, 0x4f2}, {0x4f4, 0x4f4}, {0x4f8, 0x4f8},
- {0x500, 0x500}, {0x502, 0x502}, {0x504, 0x504}, {0x506, 0x506},
- {0x508, 0x508}, {0x50a, 0x50a}, {0x50c, 0x50c}, {0x50e, 0x50e},
- {0x531, 0x556}, {0x10a0, 0x10c5}, {0x1e00, 0x1e00}, {0x1e02, 0x1e02},
- {0x1e04, 0x1e04}, {0x1e06, 0x1e06}, {0x1e08, 0x1e08}, {0x1e0a, 0x1e0a},
- {0x1e0c, 0x1e0c}, {0x1e0e, 0x1e0e}, {0x1e10, 0x1e10}, {0x1e12, 0x1e12},
- {0x1e14, 0x1e14}, {0x1e16, 0x1e16}, {0x1e18, 0x1e18}, {0x1e1a, 0x1e1a},
- {0x1e1c, 0x1e1c}, {0x1e1e, 0x1e1e}, {0x1e20, 0x1e20}, {0x1e22, 0x1e22},
- {0x1e24, 0x1e24}, {0x1e26, 0x1e26}, {0x1e28, 0x1e28}, {0x1e2a, 0x1e2a},
- {0x1e2c, 0x1e2c}, {0x1e2e, 0x1e2e}, {0x1e30, 0x1e30}, {0x1e32, 0x1e32},
- {0x1e34, 0x1e34}, {0x1e36, 0x1e36}, {0x1e38, 0x1e38}, {0x1e3a, 0x1e3a},
- {0x1e3c, 0x1e3c}, {0x1e3e, 0x1e3e}, {0x1e40, 0x1e40}, {0x1e42, 0x1e42},
- {0x1e44, 0x1e44}, {0x1e46, 0x1e46}, {0x1e48, 0x1e48}, {0x1e4a, 0x1e4a},
- {0x1e4c, 0x1e4c}, {0x1e4e, 0x1e4e}, {0x1e50, 0x1e50}, {0x1e52, 0x1e52},
- {0x1e54, 0x1e54}, {0x1e56, 0x1e56}, {0x1e58, 0x1e58}, {0x1e5a, 0x1e5a},
- {0x1e5c, 0x1e5c}, {0x1e5e, 0x1e5e}, {0x1e60, 0x1e60}, {0x1e62, 0x1e62},
- {0x1e64, 0x1e64}, {0x1e66, 0x1e66}, {0x1e68, 0x1e68}, {0x1e6a, 0x1e6a},
- {0x1e6c, 0x1e6c}, {0x1e6e, 0x1e6e}, {0x1e70, 0x1e70}, {0x1e72, 0x1e72},
- {0x1e74, 0x1e74}, {0x1e76, 0x1e76}, {0x1e78, 0x1e78}, {0x1e7a, 0x1e7a},
- {0x1e7c, 0x1e7c}, {0x1e7e, 0x1e7e}, {0x1e80, 0x1e80}, {0x1e82, 0x1e82},
- {0x1e84, 0x1e84}, {0x1e86, 0x1e86}, {0x1e88, 0x1e88}, {0x1e8a, 0x1e8a},
- {0x1e8c, 0x1e8c}, {0x1e8e, 0x1e8e}, {0x1e90, 0x1e90}, {0x1e92, 0x1e92},
- {0x1e94, 0x1e94}, {0x1ea0, 0x1ea0}, {0x1ea2, 0x1ea2}, {0x1ea4, 0x1ea4},
- {0x1ea6, 0x1ea6}, {0x1ea8, 0x1ea8}, {0x1eaa, 0x1eaa}, {0x1eac, 0x1eac},
- {0x1eae, 0x1eae}, {0x1eb0, 0x1eb0}, {0x1eb2, 0x1eb2}, {0x1eb4, 0x1eb4},
- {0x1eb6, 0x1eb6}, {0x1eb8, 0x1eb8}, {0x1eba, 0x1eba}, {0x1ebc, 0x1ebc},
- {0x1ebe, 0x1ebe}, {0x1ec0, 0x1ec0}, {0x1ec2, 0x1ec2}, {0x1ec4, 0x1ec4},
- {0x1ec6, 0x1ec6}, {0x1ec8, 0x1ec8}, {0x1eca, 0x1eca}, {0x1ecc, 0x1ecc},
- {0x1ece, 0x1ece}, {0x1ed0, 0x1ed0}, {0x1ed2, 0x1ed2}, {0x1ed4, 0x1ed4},
- {0x1ed6, 0x1ed6}, {0x1ed8, 0x1ed8}, {0x1eda, 0x1eda}, {0x1edc, 0x1edc},
- {0x1ede, 0x1ede}, {0x1ee0, 0x1ee0}, {0x1ee2, 0x1ee2}, {0x1ee4, 0x1ee4},
- {0x1ee6, 0x1ee6}, {0x1ee8, 0x1ee8}, {0x1eea, 0x1eea}, {0x1eec, 0x1eec},
- {0x1eee, 0x1eee}, {0x1ef0, 0x1ef0}, {0x1ef2, 0x1ef2}, {0x1ef4, 0x1ef4},
- {0x1ef6, 0x1ef6}, {0x1ef8, 0x1ef8}, {0x1f08, 0x1f0f}, {0x1f18, 0x1f1d},
- {0x1f28, 0x1f2f}, {0x1f38, 0x1f3f}, {0x1f48, 0x1f4d}, {0x1f59, 0x1f59},
- {0x1f5b, 0x1f5b}, {0x1f5d, 0x1f5d}, {0x1f5f, 0x1f5f}, {0x1f68, 0x1f6f},
- {0x1fb8, 0x1fbb}, {0x1fc8, 0x1fcb}, {0x1fd8, 0x1fdb}, {0x1fe8, 0x1fec},
- {0x1ff8, 0x1ffb}, {0x2102, 0x2102}, {0x2107, 0x2107}, {0x210b, 0x210d},
- {0x2110, 0x2112}, {0x2115, 0x2115}, {0x2119, 0x211d}, {0x2124, 0x2124},
- {0x2126, 0x2126}, {0x2128, 0x2128}, {0x212a, 0x212d}, {0x2130, 0x2131},
- {0x2133, 0x2133}, {0x213e, 0x213f}, {0x2145, 0x2145}, {0xff21, 0xff3a} };
-static const xmlChLRange xmlLuL[] = {{0x10400, 0x10427}, {0x1d400, 0x1d419},
- {0x1d434, 0x1d44d}, {0x1d468, 0x1d481}, {0x1d49c, 0x1d49c},
- {0x1d49e, 0x1d49f}, {0x1d4a2, 0x1d4a2}, {0x1d4a5, 0x1d4a6},
- {0x1d4a9, 0x1d4ac}, {0x1d4ae, 0x1d4b5}, {0x1d4d0, 0x1d4e9},
- {0x1d504, 0x1d505}, {0x1d507, 0x1d50a}, {0x1d50d, 0x1d514},
- {0x1d516, 0x1d51c}, {0x1d538, 0x1d539}, {0x1d53b, 0x1d53e},
- {0x1d540, 0x1d544}, {0x1d546, 0x1d546}, {0x1d54a, 0x1d550},
- {0x1d56c, 0x1d585}, {0x1d5a0, 0x1d5b9}, {0x1d5d4, 0x1d5ed},
- {0x1d608, 0x1d621}, {0x1d63c, 0x1d655}, {0x1d670, 0x1d689},
- {0x1d6a8, 0x1d6c0}, {0x1d6e2, 0x1d6fa}, {0x1d71c, 0x1d734},
- {0x1d756, 0x1d76e}, {0x1d790, 0x1d7a8} };
-static xmlChRangeGroup xmlLuG = {390,31,xmlLuS,xmlLuL};
-
-static const xmlChSRange xmlMS[] = {{0x300, 0x357}, {0x35d, 0x36f},
- {0x483, 0x486}, {0x488, 0x489}, {0x591, 0x5a1}, {0x5a3, 0x5b9},
- {0x5bb, 0x5bd}, {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4},
- {0x610, 0x615}, {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc},
- {0x6de, 0x6e4}, {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711},
- {0x730, 0x74a}, {0x7a6, 0x7b0}, {0x901, 0x903}, {0x93c, 0x93c},
- {0x93e, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x983},
- {0x9bc, 0x9bc}, {0x9be, 0x9c4}, {0x9c7, 0x9c8}, {0x9cb, 0x9cd},
- {0x9d7, 0x9d7}, {0x9e2, 0x9e3}, {0xa01, 0xa03}, {0xa3c, 0xa3c},
- {0xa3e, 0xa42}, {0xa47, 0xa48}, {0xa4b, 0xa4d}, {0xa70, 0xa71},
- {0xa81, 0xa83}, {0xabc, 0xabc}, {0xabe, 0xac5}, {0xac7, 0xac9},
- {0xacb, 0xacd}, {0xae2, 0xae3}, {0xb01, 0xb03}, {0xb3c, 0xb3c},
- {0xb3e, 0xb43}, {0xb47, 0xb48}, {0xb4b, 0xb4d}, {0xb56, 0xb57},
- {0xb82, 0xb82}, {0xbbe, 0xbc2}, {0xbc6, 0xbc8}, {0xbca, 0xbcd},
- {0xbd7, 0xbd7}, {0xc01, 0xc03}, {0xc3e, 0xc44}, {0xc46, 0xc48},
- {0xc4a, 0xc4d}, {0xc55, 0xc56}, {0xc82, 0xc83}, {0xcbc, 0xcbc},
- {0xcbe, 0xcc4}, {0xcc6, 0xcc8}, {0xcca, 0xccd}, {0xcd5, 0xcd6},
- {0xd02, 0xd03}, {0xd3e, 0xd43}, {0xd46, 0xd48}, {0xd4a, 0xd4d},
- {0xd57, 0xd57}, {0xd82, 0xd83}, {0xdca, 0xdca}, {0xdcf, 0xdd4},
- {0xdd6, 0xdd6}, {0xdd8, 0xddf}, {0xdf2, 0xdf3}, {0xe31, 0xe31},
- {0xe34, 0xe3a}, {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9},
- {0xebb, 0xebc}, {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35},
- {0xf37, 0xf37}, {0xf39, 0xf39}, {0xf3e, 0xf3f}, {0xf71, 0xf84},
- {0xf86, 0xf87}, {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6},
- {0x102c, 0x1032}, {0x1036, 0x1039}, {0x1056, 0x1059}, {0x1712, 0x1714},
- {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773}, {0x17b6, 0x17d3},
- {0x17dd, 0x17dd}, {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x192b},
- {0x1930, 0x193b}, {0x20d0, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a},
- {0xfb1e, 0xfb1e}, {0xfe00, 0xfe0f}, {0xfe20, 0xfe23} };
-static const xmlChLRange xmlML[] = {{0x1d165, 0x1d169}, {0x1d16d, 0x1d172},
- {0x1d17b, 0x1d182}, {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad},
- {0xe0100, 0xe01ef} };
-static xmlChRangeGroup xmlMG = {113,6,xmlMS,xmlML};
-
-static const xmlChSRange xmlMcS[] = {{0x903, 0x903}, {0x93e, 0x940},
- {0x949, 0x94c}, {0x982, 0x983}, {0x9be, 0x9c0}, {0x9c7, 0x9c8},
- {0x9cb, 0x9cc}, {0x9d7, 0x9d7}, {0xa03, 0xa03}, {0xa3e, 0xa40},
- {0xa83, 0xa83}, {0xabe, 0xac0}, {0xac9, 0xac9}, {0xacb, 0xacc},
- {0xb02, 0xb03}, {0xb3e, 0xb3e}, {0xb40, 0xb40}, {0xb47, 0xb48},
- {0xb4b, 0xb4c}, {0xb57, 0xb57}, {0xbbe, 0xbbf}, {0xbc1, 0xbc2},
- {0xbc6, 0xbc8}, {0xbca, 0xbcc}, {0xbd7, 0xbd7}, {0xc01, 0xc03},
- {0xc41, 0xc44}, {0xc82, 0xc83}, {0xcbe, 0xcbe}, {0xcc0, 0xcc4},
- {0xcc7, 0xcc8}, {0xcca, 0xccb}, {0xcd5, 0xcd6}, {0xd02, 0xd03},
- {0xd3e, 0xd40}, {0xd46, 0xd48}, {0xd4a, 0xd4c}, {0xd57, 0xd57},
- {0xd82, 0xd83}, {0xdcf, 0xdd1}, {0xdd8, 0xddf}, {0xdf2, 0xdf3},
- {0xf3e, 0xf3f}, {0xf7f, 0xf7f}, {0x102c, 0x102c}, {0x1031, 0x1031},
- {0x1038, 0x1038}, {0x1056, 0x1057}, {0x17b6, 0x17b6}, {0x17be, 0x17c5},
- {0x17c7, 0x17c8}, {0x1923, 0x1926}, {0x1929, 0x192b}, {0x1930, 0x1931},
- {0x1933, 0x1938} };
-static const xmlChLRange xmlMcL[] = {{0x1d165, 0x1d166}, {0x1d16d, 0x1d172} };
-static xmlChRangeGroup xmlMcG = {55,2,xmlMcS,xmlMcL};
-
-static const xmlChSRange xmlMnS[] = {{0x300, 0x357}, {0x35d, 0x36f},
- {0x483, 0x486}, {0x591, 0x5a1}, {0x5a3, 0x5b9}, {0x5bb, 0x5bd},
- {0x5bf, 0x5bf}, {0x5c1, 0x5c2}, {0x5c4, 0x5c4}, {0x610, 0x615},
- {0x64b, 0x658}, {0x670, 0x670}, {0x6d6, 0x6dc}, {0x6df, 0x6e4},
- {0x6e7, 0x6e8}, {0x6ea, 0x6ed}, {0x711, 0x711}, {0x730, 0x74a},
- {0x7a6, 0x7b0}, {0x901, 0x902}, {0x93c, 0x93c}, {0x941, 0x948},
- {0x94d, 0x94d}, {0x951, 0x954}, {0x962, 0x963}, {0x981, 0x981},
- {0x9bc, 0x9bc}, {0x9c1, 0x9c4}, {0x9cd, 0x9cd}, {0x9e2, 0x9e3},
- {0xa01, 0xa02}, {0xa3c, 0xa3c}, {0xa41, 0xa42}, {0xa47, 0xa48},
- {0xa4b, 0xa4d}, {0xa70, 0xa71}, {0xa81, 0xa82}, {0xabc, 0xabc},
- {0xac1, 0xac5}, {0xac7, 0xac8}, {0xacd, 0xacd}, {0xae2, 0xae3},
- {0xb01, 0xb01}, {0xb3c, 0xb3c}, {0xb3f, 0xb3f}, {0xb41, 0xb43},
- {0xb4d, 0xb4d}, {0xb56, 0xb56}, {0xb82, 0xb82}, {0xbc0, 0xbc0},
- {0xbcd, 0xbcd}, {0xc3e, 0xc40}, {0xc46, 0xc48}, {0xc4a, 0xc4d},
- {0xc55, 0xc56}, {0xcbc, 0xcbc}, {0xcbf, 0xcbf}, {0xcc6, 0xcc6},
- {0xccc, 0xccd}, {0xd41, 0xd43}, {0xd4d, 0xd4d}, {0xdca, 0xdca},
- {0xdd2, 0xdd4}, {0xdd6, 0xdd6}, {0xe31, 0xe31}, {0xe34, 0xe3a},
- {0xe47, 0xe4e}, {0xeb1, 0xeb1}, {0xeb4, 0xeb9}, {0xebb, 0xebc},
- {0xec8, 0xecd}, {0xf18, 0xf19}, {0xf35, 0xf35}, {0xf37, 0xf37},
- {0xf39, 0xf39}, {0xf71, 0xf7e}, {0xf80, 0xf84}, {0xf86, 0xf87},
- {0xf90, 0xf97}, {0xf99, 0xfbc}, {0xfc6, 0xfc6}, {0x102d, 0x1030},
- {0x1032, 0x1032}, {0x1036, 0x1037}, {0x1039, 0x1039}, {0x1058, 0x1059},
- {0x1712, 0x1714}, {0x1732, 0x1734}, {0x1752, 0x1753}, {0x1772, 0x1773},
- {0x17b7, 0x17bd}, {0x17c6, 0x17c6}, {0x17c9, 0x17d3}, {0x17dd, 0x17dd},
- {0x180b, 0x180d}, {0x18a9, 0x18a9}, {0x1920, 0x1922}, {0x1927, 0x1928},
- {0x1932, 0x1932}, {0x1939, 0x193b}, {0x20d0, 0x20dc}, {0x20e1, 0x20e1},
- {0x20e5, 0x20ea}, {0x302a, 0x302f}, {0x3099, 0x309a}, {0xfb1e, 0xfb1e},
- {0xfe00, 0xfe0f}, {0xfe20, 0xfe23} };
-static const xmlChLRange xmlMnL[] = {{0x1d167, 0x1d169}, {0x1d17b, 0x1d182},
- {0x1d185, 0x1d18b}, {0x1d1aa, 0x1d1ad}, {0xe0100, 0xe01ef} };
-static xmlChRangeGroup xmlMnG = {108,5,xmlMnS,xmlMnL};
-
-static const xmlChSRange xmlNS[] = {{0x30, 0x39}, {0xb2, 0xb3},
- {0xb9, 0xb9}, {0xbc, 0xbe}, {0x660, 0x669}, {0x6f0, 0x6f9},
- {0x966, 0x96f}, {0x9e6, 0x9ef}, {0x9f4, 0x9f9}, {0xa66, 0xa6f},
- {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbf2}, {0xc66, 0xc6f},
- {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9},
- {0xf20, 0xf33}, {0x1040, 0x1049}, {0x1369, 0x137c}, {0x16ee, 0x16f0},
- {0x17e0, 0x17e9}, {0x17f0, 0x17f9}, {0x1810, 0x1819}, {0x1946, 0x194f},
- {0x2070, 0x2070}, {0x2074, 0x2079}, {0x2080, 0x2089}, {0x2153, 0x2183},
- {0x2460, 0x249b}, {0x24ea, 0x24ff}, {0x2776, 0x2793}, {0x3007, 0x3007},
- {0x3021, 0x3029}, {0x3038, 0x303a}, {0x3192, 0x3195}, {0x3220, 0x3229},
- {0x3251, 0x325f}, {0x3280, 0x3289}, {0x32b1, 0x32bf}, {0xff10, 0xff19} };
-static const xmlChLRange xmlNL[] = {{0x10107, 0x10133}, {0x10320, 0x10323},
- {0x1034a, 0x1034a}, {0x104a0, 0x104a9}, {0x1d7ce, 0x1d7ff} };
-static xmlChRangeGroup xmlNG = {42,5,xmlNS,xmlNL};
-
-static const xmlChSRange xmlNdS[] = {{0x30, 0x39}, {0x660, 0x669},
- {0x6f0, 0x6f9}, {0x966, 0x96f}, {0x9e6, 0x9ef}, {0xa66, 0xa6f},
- {0xae6, 0xaef}, {0xb66, 0xb6f}, {0xbe7, 0xbef}, {0xc66, 0xc6f},
- {0xce6, 0xcef}, {0xd66, 0xd6f}, {0xe50, 0xe59}, {0xed0, 0xed9},
- {0xf20, 0xf29}, {0x1040, 0x1049}, {0x1369, 0x1371}, {0x17e0, 0x17e9},
- {0x1810, 0x1819}, {0x1946, 0x194f}, {0xff10, 0xff19} };
-static const xmlChLRange xmlNdL[] = {{0x104a0, 0x104a9}, {0x1d7ce, 0x1d7ff} };
-static xmlChRangeGroup xmlNdG = {21,2,xmlNdS,xmlNdL};
-
-static const xmlChSRange xmlNoS[] = {{0xb2, 0xb3}, {0xb9, 0xb9},
- {0xbc, 0xbe}, {0x9f4, 0x9f9}, {0xbf0, 0xbf2}, {0xf2a, 0xf33},
- {0x1372, 0x137c}, {0x17f0, 0x17f9}, {0x2070, 0x2070}, {0x2074, 0x2079},
- {0x2080, 0x2089}, {0x2153, 0x215f}, {0x2460, 0x249b}, {0x24ea, 0x24ff},
- {0x2776, 0x2793}, {0x3192, 0x3195}, {0x3220, 0x3229}, {0x3251, 0x325f},
- {0x3280, 0x3289}, {0x32b1, 0x32bf} };
-static const xmlChLRange xmlNoL[] = {{0x10107, 0x10133}, {0x10320, 0x10323} };
-static xmlChRangeGroup xmlNoG = {20,2,xmlNoS,xmlNoL};
-
-static const xmlChSRange xmlPS[] = {{0x21, 0x23}, {0x25, 0x2a},
- {0x2c, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40}, {0x5b, 0x5d}, {0x5f, 0x5f},
- {0x7b, 0x7b}, {0x7d, 0x7d}, {0xa1, 0xa1}, {0xab, 0xab}, {0xb7, 0xb7},
- {0xbb, 0xbb}, {0xbf, 0xbf}, {0x37e, 0x37e}, {0x387, 0x387},
- {0x55a, 0x55f}, {0x589, 0x58a}, {0x5be, 0x5be}, {0x5c0, 0x5c0},
- {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d}, {0x61b, 0x61b},
- {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4}, {0x700, 0x70d},
- {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4}, {0xe4f, 0xe4f},
- {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf3a, 0xf3d}, {0xf85, 0xf85},
- {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e},
- {0x169b, 0x169c}, {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6},
- {0x17d8, 0x17da}, {0x1800, 0x180a}, {0x1944, 0x1945}, {0x2010, 0x2027},
- {0x2030, 0x2043}, {0x2045, 0x2051}, {0x2053, 0x2054}, {0x2057, 0x2057},
- {0x207d, 0x207e}, {0x208d, 0x208e}, {0x2329, 0x232a}, {0x23b4, 0x23b6},
- {0x2768, 0x2775}, {0x27e6, 0x27eb}, {0x2983, 0x2998}, {0x29d8, 0x29db},
- {0x29fc, 0x29fd}, {0x3001, 0x3003}, {0x3008, 0x3011}, {0x3014, 0x301f},
- {0x3030, 0x3030}, {0x303d, 0x303d}, {0x30a0, 0x30a0}, {0x30fb, 0x30fb},
- {0xfd3e, 0xfd3f}, {0xfe30, 0xfe52}, {0xfe54, 0xfe61}, {0xfe63, 0xfe63},
- {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff0a},
- {0xff0c, 0xff0f}, {0xff1a, 0xff1b}, {0xff1f, 0xff20}, {0xff3b, 0xff3d},
- {0xff3f, 0xff3f}, {0xff5b, 0xff5b}, {0xff5d, 0xff5d}, {0xff5f, 0xff65} };
-static const xmlChLRange xmlPL[] = {{0x10100, 0x10101}, {0x1039f, 0x1039f} };
-static xmlChRangeGroup xmlPG = {84,2,xmlPS,xmlPL};
-
-static const xmlChSRange xmlPdS[] = {{0x2d, 0x2d}, {0x58a, 0x58a},
- {0x1806, 0x1806}, {0x2010, 0x2015}, {0x301c, 0x301c}, {0x3030, 0x3030},
- {0x30a0, 0x30a0}, {0xfe31, 0xfe32}, {0xfe58, 0xfe58}, {0xfe63, 0xfe63},
- {0xff0d, 0xff0d} };
-static xmlChRangeGroup xmlPdG = {11,0,xmlPdS,NULL};
-
-static const xmlChSRange xmlPeS[] = {{0x29, 0x29}, {0x5d, 0x5d},
- {0x7d, 0x7d}, {0xf3b, 0xf3b}, {0xf3d, 0xf3d}, {0x169c, 0x169c},
- {0x2046, 0x2046}, {0x207e, 0x207e}, {0x208e, 0x208e}, {0x232a, 0x232a},
- {0x23b5, 0x23b5}, {0x2769, 0x2769}, {0x276b, 0x276b}, {0x276d, 0x276d},
- {0x276f, 0x276f}, {0x2771, 0x2771}, {0x2773, 0x2773}, {0x2775, 0x2775},
- {0x27e7, 0x27e7}, {0x27e9, 0x27e9}, {0x27eb, 0x27eb}, {0x2984, 0x2984},
- {0x2986, 0x2986}, {0x2988, 0x2988}, {0x298a, 0x298a}, {0x298c, 0x298c},
- {0x298e, 0x298e}, {0x2990, 0x2990}, {0x2992, 0x2992}, {0x2994, 0x2994},
- {0x2996, 0x2996}, {0x2998, 0x2998}, {0x29d9, 0x29d9}, {0x29db, 0x29db},
- {0x29fd, 0x29fd}, {0x3009, 0x3009}, {0x300b, 0x300b}, {0x300d, 0x300d},
- {0x300f, 0x300f}, {0x3011, 0x3011}, {0x3015, 0x3015}, {0x3017, 0x3017},
- {0x3019, 0x3019}, {0x301b, 0x301b}, {0x301e, 0x301f}, {0xfd3f, 0xfd3f},
- {0xfe36, 0xfe36}, {0xfe38, 0xfe38}, {0xfe3a, 0xfe3a}, {0xfe3c, 0xfe3c},
- {0xfe3e, 0xfe3e}, {0xfe40, 0xfe40}, {0xfe42, 0xfe42}, {0xfe44, 0xfe44},
- {0xfe48, 0xfe48}, {0xfe5a, 0xfe5a}, {0xfe5c, 0xfe5c}, {0xfe5e, 0xfe5e},
- {0xff09, 0xff09}, {0xff3d, 0xff3d}, {0xff5d, 0xff5d}, {0xff60, 0xff60},
- {0xff63, 0xff63} };
-static xmlChRangeGroup xmlPeG = {63,0,xmlPeS,NULL};
-
-static const xmlChSRange xmlPoS[] = {{0x21, 0x23}, {0x25, 0x27},
- {0x2a, 0x2a}, {0x2c, 0x2c}, {0x2e, 0x2f}, {0x3a, 0x3b}, {0x3f, 0x40},
- {0x5c, 0x5c}, {0xa1, 0xa1}, {0xb7, 0xb7}, {0xbf, 0xbf}, {0x37e, 0x37e},
- {0x387, 0x387}, {0x55a, 0x55f}, {0x589, 0x589}, {0x5be, 0x5be},
- {0x5c0, 0x5c0}, {0x5c3, 0x5c3}, {0x5f3, 0x5f4}, {0x60c, 0x60d},
- {0x61b, 0x61b}, {0x61f, 0x61f}, {0x66a, 0x66d}, {0x6d4, 0x6d4},
- {0x700, 0x70d}, {0x964, 0x965}, {0x970, 0x970}, {0xdf4, 0xdf4},
- {0xe4f, 0xe4f}, {0xe5a, 0xe5b}, {0xf04, 0xf12}, {0xf85, 0xf85},
- {0x104a, 0x104f}, {0x10fb, 0x10fb}, {0x1361, 0x1368}, {0x166d, 0x166e},
- {0x16eb, 0x16ed}, {0x1735, 0x1736}, {0x17d4, 0x17d6}, {0x17d8, 0x17da},
- {0x1800, 0x1805}, {0x1807, 0x180a}, {0x1944, 0x1945}, {0x2016, 0x2017},
- {0x2020, 0x2027}, {0x2030, 0x2038}, {0x203b, 0x203e}, {0x2041, 0x2043},
- {0x2047, 0x2051}, {0x2053, 0x2053}, {0x2057, 0x2057}, {0x23b6, 0x23b6},
- {0x3001, 0x3003}, {0x303d, 0x303d}, {0xfe30, 0xfe30}, {0xfe45, 0xfe46},
- {0xfe49, 0xfe4c}, {0xfe50, 0xfe52}, {0xfe54, 0xfe57}, {0xfe5f, 0xfe61},
- {0xfe68, 0xfe68}, {0xfe6a, 0xfe6b}, {0xff01, 0xff03}, {0xff05, 0xff07},
- {0xff0a, 0xff0a}, {0xff0c, 0xff0c}, {0xff0e, 0xff0f}, {0xff1a, 0xff1b},
- {0xff1f, 0xff20}, {0xff3c, 0xff3c}, {0xff61, 0xff61}, {0xff64, 0xff64} };
-static const xmlChLRange xmlPoL[] = {{0x10100, 0x10101}, {0x1039f, 0x1039f} };
-static xmlChRangeGroup xmlPoG = {72,2,xmlPoS,xmlPoL};
-
-static const xmlChSRange xmlPsS[] = {{0x28, 0x28}, {0x5b, 0x5b},
- {0x7b, 0x7b}, {0xf3a, 0xf3a}, {0xf3c, 0xf3c}, {0x169b, 0x169b},
- {0x201a, 0x201a}, {0x201e, 0x201e}, {0x2045, 0x2045}, {0x207d, 0x207d},
- {0x208d, 0x208d}, {0x2329, 0x2329}, {0x23b4, 0x23b4}, {0x2768, 0x2768},
- {0x276a, 0x276a}, {0x276c, 0x276c}, {0x276e, 0x276e}, {0x2770, 0x2770},
- {0x2772, 0x2772}, {0x2774, 0x2774}, {0x27e6, 0x27e6}, {0x27e8, 0x27e8},
- {0x27ea, 0x27ea}, {0x2983, 0x2983}, {0x2985, 0x2985}, {0x2987, 0x2987},
- {0x2989, 0x2989}, {0x298b, 0x298b}, {0x298d, 0x298d}, {0x298f, 0x298f},
- {0x2991, 0x2991}, {0x2993, 0x2993}, {0x2995, 0x2995}, {0x2997, 0x2997},
- {0x29d8, 0x29d8}, {0x29da, 0x29da}, {0x29fc, 0x29fc}, {0x3008, 0x3008},
- {0x300a, 0x300a}, {0x300c, 0x300c}, {0x300e, 0x300e}, {0x3010, 0x3010},
- {0x3014, 0x3014}, {0x3016, 0x3016}, {0x3018, 0x3018}, {0x301a, 0x301a},
- {0x301d, 0x301d}, {0xfd3e, 0xfd3e}, {0xfe35, 0xfe35}, {0xfe37, 0xfe37},
- {0xfe39, 0xfe39}, {0xfe3b, 0xfe3b}, {0xfe3d, 0xfe3d}, {0xfe3f, 0xfe3f},
- {0xfe41, 0xfe41}, {0xfe43, 0xfe43}, {0xfe47, 0xfe47}, {0xfe59, 0xfe59},
- {0xfe5b, 0xfe5b}, {0xfe5d, 0xfe5d}, {0xff08, 0xff08}, {0xff3b, 0xff3b},
- {0xff5b, 0xff5b}, {0xff5f, 0xff5f}, {0xff62, 0xff62} };
-static xmlChRangeGroup xmlPsG = {65,0,xmlPsS,NULL};
-
-static const xmlChSRange xmlSS[] = {{0x24, 0x24}, {0x2b, 0x2b},
- {0x3c, 0x3e}, {0x5e, 0x5e}, {0x60, 0x60}, {0x7c, 0x7c}, {0x7e, 0x7e},
- {0xa2, 0xa9}, {0xac, 0xac}, {0xae, 0xb1}, {0xb4, 0xb4}, {0xb6, 0xb6},
- {0xb8, 0xb8}, {0xd7, 0xd7}, {0xf7, 0xf7}, {0x2c2, 0x2c5},
- {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375},
- {0x384, 0x385}, {0x3f6, 0x3f6}, {0x482, 0x482}, {0x60e, 0x60f},
- {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9f2, 0x9f3}, {0x9fa, 0x9fa},
- {0xaf1, 0xaf1}, {0xb70, 0xb70}, {0xbf3, 0xbfa}, {0xe3f, 0xe3f},
- {0xf01, 0xf03}, {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34},
- {0xf36, 0xf36}, {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc},
- {0xfcf, 0xfcf}, {0x17db, 0x17db}, {0x1940, 0x1940}, {0x19e0, 0x19ff},
- {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf}, {0x1fdd, 0x1fdf},
- {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x2044, 0x2044}, {0x2052, 0x2052},
- {0x207a, 0x207c}, {0x208a, 0x208c}, {0x20a0, 0x20b1}, {0x2100, 0x2101},
- {0x2103, 0x2106}, {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118},
- {0x211e, 0x2123}, {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129},
- {0x212e, 0x212e}, {0x2132, 0x2132}, {0x213a, 0x213b}, {0x2140, 0x2144},
- {0x214a, 0x214b}, {0x2190, 0x2328}, {0x232b, 0x23b3}, {0x23b7, 0x23d0},
- {0x2400, 0x2426}, {0x2440, 0x244a}, {0x249c, 0x24e9}, {0x2500, 0x2617},
- {0x2619, 0x267d}, {0x2680, 0x2691}, {0x26a0, 0x26a1}, {0x2701, 0x2704},
- {0x2706, 0x2709}, {0x270c, 0x2727}, {0x2729, 0x274b}, {0x274d, 0x274d},
- {0x274f, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x275e}, {0x2761, 0x2767},
- {0x2794, 0x2794}, {0x2798, 0x27af}, {0x27b1, 0x27be}, {0x27d0, 0x27e5},
- {0x27f0, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2b0d},
- {0x2e80, 0x2e99}, {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb},
- {0x3004, 0x3004}, {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037},
- {0x303e, 0x303f}, {0x309b, 0x309c}, {0x3190, 0x3191}, {0x3196, 0x319f},
- {0x3200, 0x321e}, {0x322a, 0x3243}, {0x3250, 0x3250}, {0x3260, 0x327d},
- {0x327f, 0x327f}, {0x328a, 0x32b0}, {0x32c0, 0x32fe}, {0x3300, 0x33ff},
- {0x4dc0, 0x4dff}, {0xa490, 0xa4c6}, {0xfb29, 0xfb29}, {0xfdfc, 0xfdfd},
- {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xfe69, 0xfe69}, {0xff04, 0xff04},
- {0xff0b, 0xff0b}, {0xff1c, 0xff1e}, {0xff3e, 0xff3e}, {0xff40, 0xff40},
- {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe0, 0xffe6}, {0xffe8, 0xffee},
- {0xfffc, 0xfffd} };
-static const xmlChLRange xmlSL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f},
- {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164},
- {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9},
- {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356}, {0x1d6c1, 0x1d6c1},
- {0x1d6db, 0x1d6db}, {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715},
- {0x1d735, 0x1d735}, {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f},
- {0x1d789, 0x1d789}, {0x1d7a9, 0x1d7a9}, {0x1d7c3, 0x1d7c3} };
-static xmlChRangeGroup xmlSG = {133,20,xmlSS,xmlSL};
-
-static const xmlChSRange xmlScS[] = {{0x24, 0x24}, {0xa2, 0xa5},
- {0x9f2, 0x9f3}, {0xaf1, 0xaf1}, {0xbf9, 0xbf9}, {0xe3f, 0xe3f},
- {0x17db, 0x17db}, {0x20a0, 0x20b1}, {0xfdfc, 0xfdfc}, {0xfe69, 0xfe69},
- {0xff04, 0xff04}, {0xffe0, 0xffe1}, {0xffe5, 0xffe6} };
-static xmlChRangeGroup xmlScG = {13,0,xmlScS,NULL};
-
-static const xmlChSRange xmlSkS[] = {{0x5e, 0x5e}, {0x60, 0x60},
- {0xa8, 0xa8}, {0xaf, 0xaf}, {0xb4, 0xb4}, {0xb8, 0xb8}, {0x2c2, 0x2c5},
- {0x2d2, 0x2df}, {0x2e5, 0x2ed}, {0x2ef, 0x2ff}, {0x374, 0x375},
- {0x384, 0x385}, {0x1fbd, 0x1fbd}, {0x1fbf, 0x1fc1}, {0x1fcd, 0x1fcf},
- {0x1fdd, 0x1fdf}, {0x1fed, 0x1fef}, {0x1ffd, 0x1ffe}, {0x309b, 0x309c},
- {0xff3e, 0xff3e}, {0xff40, 0xff40}, {0xffe3, 0xffe3} };
-static xmlChRangeGroup xmlSkG = {22,0,xmlSkS,NULL};
-
-static const xmlChSRange xmlSmS[] = {{0x2b, 0x2b}, {0x3c, 0x3e},
- {0x7c, 0x7c}, {0x7e, 0x7e}, {0xac, 0xac}, {0xb1, 0xb1}, {0xd7, 0xd7},
- {0xf7, 0xf7}, {0x3f6, 0x3f6}, {0x2044, 0x2044}, {0x2052, 0x2052},
- {0x207a, 0x207c}, {0x208a, 0x208c}, {0x2140, 0x2144}, {0x214b, 0x214b},
- {0x2190, 0x2194}, {0x219a, 0x219b}, {0x21a0, 0x21a0}, {0x21a3, 0x21a3},
- {0x21a6, 0x21a6}, {0x21ae, 0x21ae}, {0x21ce, 0x21cf}, {0x21d2, 0x21d2},
- {0x21d4, 0x21d4}, {0x21f4, 0x22ff}, {0x2308, 0x230b}, {0x2320, 0x2321},
- {0x237c, 0x237c}, {0x239b, 0x23b3}, {0x25b7, 0x25b7}, {0x25c1, 0x25c1},
- {0x25f8, 0x25ff}, {0x266f, 0x266f}, {0x27d0, 0x27e5}, {0x27f0, 0x27ff},
- {0x2900, 0x2982}, {0x2999, 0x29d7}, {0x29dc, 0x29fb}, {0x29fe, 0x2aff},
- {0xfb29, 0xfb29}, {0xfe62, 0xfe62}, {0xfe64, 0xfe66}, {0xff0b, 0xff0b},
- {0xff1c, 0xff1e}, {0xff5c, 0xff5c}, {0xff5e, 0xff5e}, {0xffe2, 0xffe2},
- {0xffe9, 0xffec} };
-static const xmlChLRange xmlSmL[] = {{0x1d6c1, 0x1d6c1}, {0x1d6db, 0x1d6db},
- {0x1d6fb, 0x1d6fb}, {0x1d715, 0x1d715}, {0x1d735, 0x1d735},
- {0x1d74f, 0x1d74f}, {0x1d76f, 0x1d76f}, {0x1d789, 0x1d789},
- {0x1d7a9, 0x1d7a9}, {0x1d7c3, 0x1d7c3} };
-static xmlChRangeGroup xmlSmG = {48,10,xmlSmS,xmlSmL};
-
-static const xmlChSRange xmlSoS[] = {{0xa6, 0xa7}, {0xa9, 0xa9},
- {0xae, 0xae}, {0xb0, 0xb0}, {0xb6, 0xb6}, {0x482, 0x482},
- {0x60e, 0x60f}, {0x6e9, 0x6e9}, {0x6fd, 0x6fe}, {0x9fa, 0x9fa},
- {0xb70, 0xb70}, {0xbf3, 0xbf8}, {0xbfa, 0xbfa}, {0xf01, 0xf03},
- {0xf13, 0xf17}, {0xf1a, 0xf1f}, {0xf34, 0xf34}, {0xf36, 0xf36},
- {0xf38, 0xf38}, {0xfbe, 0xfc5}, {0xfc7, 0xfcc}, {0xfcf, 0xfcf},
- {0x1940, 0x1940}, {0x19e0, 0x19ff}, {0x2100, 0x2101}, {0x2103, 0x2106},
- {0x2108, 0x2109}, {0x2114, 0x2114}, {0x2116, 0x2118}, {0x211e, 0x2123},
- {0x2125, 0x2125}, {0x2127, 0x2127}, {0x2129, 0x2129}, {0x212e, 0x212e},
- {0x2132, 0x2132}, {0x213a, 0x213b}, {0x214a, 0x214a}, {0x2195, 0x2199},
- {0x219c, 0x219f}, {0x21a1, 0x21a2}, {0x21a4, 0x21a5}, {0x21a7, 0x21ad},
- {0x21af, 0x21cd}, {0x21d0, 0x21d1}, {0x21d3, 0x21d3}, {0x21d5, 0x21f3},
- {0x2300, 0x2307}, {0x230c, 0x231f}, {0x2322, 0x2328}, {0x232b, 0x237b},
- {0x237d, 0x239a}, {0x23b7, 0x23d0}, {0x2400, 0x2426}, {0x2440, 0x244a},
- {0x249c, 0x24e9}, {0x2500, 0x25b6}, {0x25b8, 0x25c0}, {0x25c2, 0x25f7},
- {0x2600, 0x2617}, {0x2619, 0x266e}, {0x2670, 0x267d}, {0x2680, 0x2691},
- {0x26a0, 0x26a1}, {0x2701, 0x2704}, {0x2706, 0x2709}, {0x270c, 0x2727},
- {0x2729, 0x274b}, {0x274d, 0x274d}, {0x274f, 0x2752}, {0x2756, 0x2756},
- {0x2758, 0x275e}, {0x2761, 0x2767}, {0x2794, 0x2794}, {0x2798, 0x27af},
- {0x27b1, 0x27be}, {0x2800, 0x28ff}, {0x2b00, 0x2b0d}, {0x2e80, 0x2e99},
- {0x2e9b, 0x2ef3}, {0x2f00, 0x2fd5}, {0x2ff0, 0x2ffb}, {0x3004, 0x3004},
- {0x3012, 0x3013}, {0x3020, 0x3020}, {0x3036, 0x3037}, {0x303e, 0x303f},
- {0x3190, 0x3191}, {0x3196, 0x319f}, {0x3200, 0x321e}, {0x322a, 0x3243},
- {0x3250, 0x3250}, {0x3260, 0x327d}, {0x327f, 0x327f}, {0x328a, 0x32b0},
- {0x32c0, 0x32fe}, {0x3300, 0x33ff}, {0x4dc0, 0x4dff}, {0xa490, 0xa4c6},
- {0xfdfd, 0xfdfd}, {0xffe4, 0xffe4}, {0xffe8, 0xffe8}, {0xffed, 0xffee},
- {0xfffc, 0xfffd} };
-static const xmlChLRange xmlSoL[] = {{0x10102, 0x10102}, {0x10137, 0x1013f},
- {0x1d000, 0x1d0f5}, {0x1d100, 0x1d126}, {0x1d12a, 0x1d164},
- {0x1d16a, 0x1d16c}, {0x1d183, 0x1d184}, {0x1d18c, 0x1d1a9},
- {0x1d1ae, 0x1d1dd}, {0x1d300, 0x1d356} };
-static xmlChRangeGroup xmlSoG = {103,10,xmlSoS,xmlSoL};
-
-static const xmlChSRange xmlZS[] = {{0x20, 0x20}, {0xa0, 0xa0},
- {0x1680, 0x1680}, {0x180e, 0x180e}, {0x2000, 0x200a}, {0x2028, 0x2029},
- {0x202f, 0x202f}, {0x205f, 0x205f}, {0x3000, 0x3000} };
-static xmlChRangeGroup xmlZG = {9,0,xmlZS,NULL};
-
-static xmlUnicodeNameTable xmlUnicodeBlockTbl = {xmlUnicodeBlocks, 128};
-static xmlUnicodeNameTable xmlUnicodeCatTbl = {xmlUnicodeCats, 36};
-
-/**
- * xmlUnicodeLookup:
- * @tptr: pointer to the name table
- * @name: name to be found
- *
- * binary table lookup for user-supplied name
- *
- * Returns pointer to range function if found, otherwise NULL
- */
-static xmlIntFunc
-*xmlUnicodeLookup(xmlUnicodeNameTable *tptr, const char *tname) {
- int low, high, mid, cmp;
- xmlUnicodeRange *sptr;
-
- if ((tptr == NULL) || (tname == NULL)) return(NULL);
-
- low = 0;
- high = tptr->numentries - 1;
- sptr = tptr->table;
- while (low <= high) {
- mid = (low + high) / 2;
- if ((cmp=strcmp(tname, sptr[mid].rangename)) == 0)
- return (sptr[mid].func);
- if (cmp < 0)
- high = mid - 1;
- else
- low = mid + 1;
- }
- return (NULL);
-}
-
-/**
- * xmlUCSIsAegeanNumbers:
- * @code: UCS code point
- *
- * Check whether the character is part of AegeanNumbers UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsAegeanNumbers(int code) {
- return(((code >= 0x10100) && (code <= 0x1013F)));
-}
-
-/**
- * xmlUCSIsAlphabeticPresentationForms:
- * @code: UCS code point
- *
- * Check whether the character is part of AlphabeticPresentationForms UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsAlphabeticPresentationForms(int code) {
- return(((code >= 0xFB00) && (code <= 0xFB4F)));
-}
-
-/**
- * xmlUCSIsArabic:
- * @code: UCS code point
- *
- * Check whether the character is part of Arabic UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsArabic(int code) {
- return(((code >= 0x0600) && (code <= 0x06FF)));
-}
-
-/**
- * xmlUCSIsArabicPresentationFormsA:
- * @code: UCS code point
- *
- * Check whether the character is part of ArabicPresentationForms-A UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsArabicPresentationFormsA(int code) {
- return(((code >= 0xFB50) && (code <= 0xFDFF)));
-}
-
-/**
- * xmlUCSIsArabicPresentationFormsB:
- * @code: UCS code point
- *
- * Check whether the character is part of ArabicPresentationForms-B UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsArabicPresentationFormsB(int code) {
- return(((code >= 0xFE70) && (code <= 0xFEFF)));
-}
-
-/**
- * xmlUCSIsArmenian:
- * @code: UCS code point
- *
- * Check whether the character is part of Armenian UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsArmenian(int code) {
- return(((code >= 0x0530) && (code <= 0x058F)));
-}
-
-/**
- * xmlUCSIsArrows:
- * @code: UCS code point
- *
- * Check whether the character is part of Arrows UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsArrows(int code) {
- return(((code >= 0x2190) && (code <= 0x21FF)));
-}
-
-/**
- * xmlUCSIsBasicLatin:
- * @code: UCS code point
- *
- * Check whether the character is part of BasicLatin UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsBasicLatin(int code) {
- return(((code >= 0x0000) && (code <= 0x007F)));
-}
-
-/**
- * xmlUCSIsBengali:
- * @code: UCS code point
- *
- * Check whether the character is part of Bengali UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsBengali(int code) {
- return(((code >= 0x0980) && (code <= 0x09FF)));
-}
-
-/**
- * xmlUCSIsBlockElements:
- * @code: UCS code point
- *
- * Check whether the character is part of BlockElements UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsBlockElements(int code) {
- return(((code >= 0x2580) && (code <= 0x259F)));
-}
-
-/**
- * xmlUCSIsBopomofo:
- * @code: UCS code point
- *
- * Check whether the character is part of Bopomofo UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsBopomofo(int code) {
- return(((code >= 0x3100) && (code <= 0x312F)));
-}
-
-/**
- * xmlUCSIsBopomofoExtended:
- * @code: UCS code point
- *
- * Check whether the character is part of BopomofoExtended UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsBopomofoExtended(int code) {
- return(((code >= 0x31A0) && (code <= 0x31BF)));
-}
-
-/**
- * xmlUCSIsBoxDrawing:
- * @code: UCS code point
- *
- * Check whether the character is part of BoxDrawing UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsBoxDrawing(int code) {
- return(((code >= 0x2500) && (code <= 0x257F)));
-}
-
-/**
- * xmlUCSIsBraillePatterns:
- * @code: UCS code point
- *
- * Check whether the character is part of BraillePatterns UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsBraillePatterns(int code) {
- return(((code >= 0x2800) && (code <= 0x28FF)));
-}
-
-/**
- * xmlUCSIsBuhid:
- * @code: UCS code point
- *
- * Check whether the character is part of Buhid UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsBuhid(int code) {
- return(((code >= 0x1740) && (code <= 0x175F)));
-}
-
-/**
- * xmlUCSIsByzantineMusicalSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of ByzantineMusicalSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsByzantineMusicalSymbols(int code) {
- return(((code >= 0x1D000) && (code <= 0x1D0FF)));
-}
-
-/**
- * xmlUCSIsCJKCompatibility:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKCompatibility UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKCompatibility(int code) {
- return(((code >= 0x3300) && (code <= 0x33FF)));
-}
-
-/**
- * xmlUCSIsCJKCompatibilityForms:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKCompatibilityForms UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKCompatibilityForms(int code) {
- return(((code >= 0xFE30) && (code <= 0xFE4F)));
-}
-
-/**
- * xmlUCSIsCJKCompatibilityIdeographs:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKCompatibilityIdeographs UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKCompatibilityIdeographs(int code) {
- return(((code >= 0xF900) && (code <= 0xFAFF)));
-}
-
-/**
- * xmlUCSIsCJKCompatibilityIdeographsSupplement:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKCompatibilityIdeographsSupplement UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKCompatibilityIdeographsSupplement(int code) {
- return(((code >= 0x2F800) && (code <= 0x2FA1F)));
-}
-
-/**
- * xmlUCSIsCJKRadicalsSupplement:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKRadicalsSupplement UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKRadicalsSupplement(int code) {
- return(((code >= 0x2E80) && (code <= 0x2EFF)));
-}
-
-/**
- * xmlUCSIsCJKSymbolsandPunctuation:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKSymbolsandPunctuation UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKSymbolsandPunctuation(int code) {
- return(((code >= 0x3000) && (code <= 0x303F)));
-}
-
-/**
- * xmlUCSIsCJKUnifiedIdeographs:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKUnifiedIdeographs UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKUnifiedIdeographs(int code) {
- return(((code >= 0x4E00) && (code <= 0x9FFF)));
-}
-
-/**
- * xmlUCSIsCJKUnifiedIdeographsExtensionA:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKUnifiedIdeographsExtensionA UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKUnifiedIdeographsExtensionA(int code) {
- return(((code >= 0x3400) && (code <= 0x4DBF)));
-}
-
-/**
- * xmlUCSIsCJKUnifiedIdeographsExtensionB:
- * @code: UCS code point
- *
- * Check whether the character is part of CJKUnifiedIdeographsExtensionB UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCJKUnifiedIdeographsExtensionB(int code) {
- return(((code >= 0x20000) && (code <= 0x2A6DF)));
-}
-
-/**
- * xmlUCSIsCherokee:
- * @code: UCS code point
- *
- * Check whether the character is part of Cherokee UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCherokee(int code) {
- return(((code >= 0x13A0) && (code <= 0x13FF)));
-}
-
-/**
- * xmlUCSIsCombiningDiacriticalMarks:
- * @code: UCS code point
- *
- * Check whether the character is part of CombiningDiacriticalMarks UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCombiningDiacriticalMarks(int code) {
- return(((code >= 0x0300) && (code <= 0x036F)));
-}
-
-/**
- * xmlUCSIsCombiningDiacriticalMarksforSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of CombiningDiacriticalMarksforSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCombiningDiacriticalMarksforSymbols(int code) {
- return(((code >= 0x20D0) && (code <= 0x20FF)));
-}
-
-/**
- * xmlUCSIsCombiningHalfMarks:
- * @code: UCS code point
- *
- * Check whether the character is part of CombiningHalfMarks UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCombiningHalfMarks(int code) {
- return(((code >= 0xFE20) && (code <= 0xFE2F)));
-}
-
-/**
- * xmlUCSIsCombiningMarksforSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of CombiningMarksforSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCombiningMarksforSymbols(int code) {
- return(((code >= 0x20D0) && (code <= 0x20FF)));
-}
-
-/**
- * xmlUCSIsControlPictures:
- * @code: UCS code point
- *
- * Check whether the character is part of ControlPictures UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsControlPictures(int code) {
- return(((code >= 0x2400) && (code <= 0x243F)));
-}
-
-/**
- * xmlUCSIsCurrencySymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of CurrencySymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCurrencySymbols(int code) {
- return(((code >= 0x20A0) && (code <= 0x20CF)));
-}
-
-/**
- * xmlUCSIsCypriotSyllabary:
- * @code: UCS code point
- *
- * Check whether the character is part of CypriotSyllabary UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCypriotSyllabary(int code) {
- return(((code >= 0x10800) && (code <= 0x1083F)));
-}
-
-/**
- * xmlUCSIsCyrillic:
- * @code: UCS code point
- *
- * Check whether the character is part of Cyrillic UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCyrillic(int code) {
- return(((code >= 0x0400) && (code <= 0x04FF)));
-}
-
-/**
- * xmlUCSIsCyrillicSupplement:
- * @code: UCS code point
- *
- * Check whether the character is part of CyrillicSupplement UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCyrillicSupplement(int code) {
- return(((code >= 0x0500) && (code <= 0x052F)));
-}
-
-/**
- * xmlUCSIsDeseret:
- * @code: UCS code point
- *
- * Check whether the character is part of Deseret UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsDeseret(int code) {
- return(((code >= 0x10400) && (code <= 0x1044F)));
-}
-
-/**
- * xmlUCSIsDevanagari:
- * @code: UCS code point
- *
- * Check whether the character is part of Devanagari UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsDevanagari(int code) {
- return(((code >= 0x0900) && (code <= 0x097F)));
-}
-
-/**
- * xmlUCSIsDingbats:
- * @code: UCS code point
- *
- * Check whether the character is part of Dingbats UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsDingbats(int code) {
- return(((code >= 0x2700) && (code <= 0x27BF)));
-}
-
-/**
- * xmlUCSIsEnclosedAlphanumerics:
- * @code: UCS code point
- *
- * Check whether the character is part of EnclosedAlphanumerics UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsEnclosedAlphanumerics(int code) {
- return(((code >= 0x2460) && (code <= 0x24FF)));
-}
-
-/**
- * xmlUCSIsEnclosedCJKLettersandMonths:
- * @code: UCS code point
- *
- * Check whether the character is part of EnclosedCJKLettersandMonths UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsEnclosedCJKLettersandMonths(int code) {
- return(((code >= 0x3200) && (code <= 0x32FF)));
-}
-
-/**
- * xmlUCSIsEthiopic:
- * @code: UCS code point
- *
- * Check whether the character is part of Ethiopic UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsEthiopic(int code) {
- return(((code >= 0x1200) && (code <= 0x137F)));
-}
-
-/**
- * xmlUCSIsGeneralPunctuation:
- * @code: UCS code point
- *
- * Check whether the character is part of GeneralPunctuation UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGeneralPunctuation(int code) {
- return(((code >= 0x2000) && (code <= 0x206F)));
-}
-
-/**
- * xmlUCSIsGeometricShapes:
- * @code: UCS code point
- *
- * Check whether the character is part of GeometricShapes UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGeometricShapes(int code) {
- return(((code >= 0x25A0) && (code <= 0x25FF)));
-}
-
-/**
- * xmlUCSIsGeorgian:
- * @code: UCS code point
- *
- * Check whether the character is part of Georgian UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGeorgian(int code) {
- return(((code >= 0x10A0) && (code <= 0x10FF)));
-}
-
-/**
- * xmlUCSIsGothic:
- * @code: UCS code point
- *
- * Check whether the character is part of Gothic UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGothic(int code) {
- return(((code >= 0x10330) && (code <= 0x1034F)));
-}
-
-/**
- * xmlUCSIsGreek:
- * @code: UCS code point
- *
- * Check whether the character is part of Greek UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGreek(int code) {
- return(((code >= 0x0370) && (code <= 0x03FF)));
-}
-
-/**
- * xmlUCSIsGreekExtended:
- * @code: UCS code point
- *
- * Check whether the character is part of GreekExtended UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGreekExtended(int code) {
- return(((code >= 0x1F00) && (code <= 0x1FFF)));
-}
-
-/**
- * xmlUCSIsGreekandCoptic:
- * @code: UCS code point
- *
- * Check whether the character is part of GreekandCoptic UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGreekandCoptic(int code) {
- return(((code >= 0x0370) && (code <= 0x03FF)));
-}
-
-/**
- * xmlUCSIsGujarati:
- * @code: UCS code point
- *
- * Check whether the character is part of Gujarati UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGujarati(int code) {
- return(((code >= 0x0A80) && (code <= 0x0AFF)));
-}
-
-/**
- * xmlUCSIsGurmukhi:
- * @code: UCS code point
- *
- * Check whether the character is part of Gurmukhi UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsGurmukhi(int code) {
- return(((code >= 0x0A00) && (code <= 0x0A7F)));
-}
-
-/**
- * xmlUCSIsHalfwidthandFullwidthForms:
- * @code: UCS code point
- *
- * Check whether the character is part of HalfwidthandFullwidthForms UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHalfwidthandFullwidthForms(int code) {
- return(((code >= 0xFF00) && (code <= 0xFFEF)));
-}
-
-/**
- * xmlUCSIsHangulCompatibilityJamo:
- * @code: UCS code point
- *
- * Check whether the character is part of HangulCompatibilityJamo UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHangulCompatibilityJamo(int code) {
- return(((code >= 0x3130) && (code <= 0x318F)));
-}
-
-/**
- * xmlUCSIsHangulJamo:
- * @code: UCS code point
- *
- * Check whether the character is part of HangulJamo UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHangulJamo(int code) {
- return(((code >= 0x1100) && (code <= 0x11FF)));
-}
-
-/**
- * xmlUCSIsHangulSyllables:
- * @code: UCS code point
- *
- * Check whether the character is part of HangulSyllables UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHangulSyllables(int code) {
- return(((code >= 0xAC00) && (code <= 0xD7AF)));
-}
-
-/**
- * xmlUCSIsHanunoo:
- * @code: UCS code point
- *
- * Check whether the character is part of Hanunoo UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHanunoo(int code) {
- return(((code >= 0x1720) && (code <= 0x173F)));
-}
-
-/**
- * xmlUCSIsHebrew:
- * @code: UCS code point
- *
- * Check whether the character is part of Hebrew UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHebrew(int code) {
- return(((code >= 0x0590) && (code <= 0x05FF)));
-}
-
-/**
- * xmlUCSIsHighPrivateUseSurrogates:
- * @code: UCS code point
- *
- * Check whether the character is part of HighPrivateUseSurrogates UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHighPrivateUseSurrogates(int code) {
- return(((code >= 0xDB80) && (code <= 0xDBFF)));
-}
-
-/**
- * xmlUCSIsHighSurrogates:
- * @code: UCS code point
- *
- * Check whether the character is part of HighSurrogates UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHighSurrogates(int code) {
- return(((code >= 0xD800) && (code <= 0xDB7F)));
-}
-
-/**
- * xmlUCSIsHiragana:
- * @code: UCS code point
- *
- * Check whether the character is part of Hiragana UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsHiragana(int code) {
- return(((code >= 0x3040) && (code <= 0x309F)));
-}
-
-/**
- * xmlUCSIsIPAExtensions:
- * @code: UCS code point
- *
- * Check whether the character is part of IPAExtensions UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsIPAExtensions(int code) {
- return(((code >= 0x0250) && (code <= 0x02AF)));
-}
-
-/**
- * xmlUCSIsIdeographicDescriptionCharacters:
- * @code: UCS code point
- *
- * Check whether the character is part of IdeographicDescriptionCharacters UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsIdeographicDescriptionCharacters(int code) {
- return(((code >= 0x2FF0) && (code <= 0x2FFF)));
-}
-
-/**
- * xmlUCSIsKanbun:
- * @code: UCS code point
- *
- * Check whether the character is part of Kanbun UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsKanbun(int code) {
- return(((code >= 0x3190) && (code <= 0x319F)));
-}
-
-/**
- * xmlUCSIsKangxiRadicals:
- * @code: UCS code point
- *
- * Check whether the character is part of KangxiRadicals UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsKangxiRadicals(int code) {
- return(((code >= 0x2F00) && (code <= 0x2FDF)));
-}
-
-/**
- * xmlUCSIsKannada:
- * @code: UCS code point
- *
- * Check whether the character is part of Kannada UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsKannada(int code) {
- return(((code >= 0x0C80) && (code <= 0x0CFF)));
-}
-
-/**
- * xmlUCSIsKatakana:
- * @code: UCS code point
- *
- * Check whether the character is part of Katakana UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsKatakana(int code) {
- return(((code >= 0x30A0) && (code <= 0x30FF)));
-}
-
-/**
- * xmlUCSIsKatakanaPhoneticExtensions:
- * @code: UCS code point
- *
- * Check whether the character is part of KatakanaPhoneticExtensions UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsKatakanaPhoneticExtensions(int code) {
- return(((code >= 0x31F0) && (code <= 0x31FF)));
-}
-
-/**
- * xmlUCSIsKhmer:
- * @code: UCS code point
- *
- * Check whether the character is part of Khmer UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsKhmer(int code) {
- return(((code >= 0x1780) && (code <= 0x17FF)));
-}
-
-/**
- * xmlUCSIsKhmerSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of KhmerSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsKhmerSymbols(int code) {
- return(((code >= 0x19E0) && (code <= 0x19FF)));
-}
-
-/**
- * xmlUCSIsLao:
- * @code: UCS code point
- *
- * Check whether the character is part of Lao UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLao(int code) {
- return(((code >= 0x0E80) && (code <= 0x0EFF)));
-}
-
-/**
- * xmlUCSIsLatin1Supplement:
- * @code: UCS code point
- *
- * Check whether the character is part of Latin-1Supplement UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLatin1Supplement(int code) {
- return(((code >= 0x0080) && (code <= 0x00FF)));
-}
-
-/**
- * xmlUCSIsLatinExtendedA:
- * @code: UCS code point
- *
- * Check whether the character is part of LatinExtended-A UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLatinExtendedA(int code) {
- return(((code >= 0x0100) && (code <= 0x017F)));
-}
-
-/**
- * xmlUCSIsLatinExtendedB:
- * @code: UCS code point
- *
- * Check whether the character is part of LatinExtended-B UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLatinExtendedB(int code) {
- return(((code >= 0x0180) && (code <= 0x024F)));
-}
-
-/**
- * xmlUCSIsLatinExtendedAdditional:
- * @code: UCS code point
- *
- * Check whether the character is part of LatinExtendedAdditional UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLatinExtendedAdditional(int code) {
- return(((code >= 0x1E00) && (code <= 0x1EFF)));
-}
-
-/**
- * xmlUCSIsLetterlikeSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of LetterlikeSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLetterlikeSymbols(int code) {
- return(((code >= 0x2100) && (code <= 0x214F)));
-}
-
-/**
- * xmlUCSIsLimbu:
- * @code: UCS code point
- *
- * Check whether the character is part of Limbu UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLimbu(int code) {
- return(((code >= 0x1900) && (code <= 0x194F)));
-}
-
-/**
- * xmlUCSIsLinearBIdeograms:
- * @code: UCS code point
- *
- * Check whether the character is part of LinearBIdeograms UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLinearBIdeograms(int code) {
- return(((code >= 0x10080) && (code <= 0x100FF)));
-}
-
-/**
- * xmlUCSIsLinearBSyllabary:
- * @code: UCS code point
- *
- * Check whether the character is part of LinearBSyllabary UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLinearBSyllabary(int code) {
- return(((code >= 0x10000) && (code <= 0x1007F)));
-}
-
-/**
- * xmlUCSIsLowSurrogates:
- * @code: UCS code point
- *
- * Check whether the character is part of LowSurrogates UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsLowSurrogates(int code) {
- return(((code >= 0xDC00) && (code <= 0xDFFF)));
-}
-
-/**
- * xmlUCSIsMalayalam:
- * @code: UCS code point
- *
- * Check whether the character is part of Malayalam UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMalayalam(int code) {
- return(((code >= 0x0D00) && (code <= 0x0D7F)));
-}
-
-/**
- * xmlUCSIsMathematicalAlphanumericSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of MathematicalAlphanumericSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMathematicalAlphanumericSymbols(int code) {
- return(((code >= 0x1D400) && (code <= 0x1D7FF)));
-}
-
-/**
- * xmlUCSIsMathematicalOperators:
- * @code: UCS code point
- *
- * Check whether the character is part of MathematicalOperators UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMathematicalOperators(int code) {
- return(((code >= 0x2200) && (code <= 0x22FF)));
-}
-
-/**
- * xmlUCSIsMiscellaneousMathematicalSymbolsA:
- * @code: UCS code point
- *
- * Check whether the character is part of MiscellaneousMathematicalSymbols-A UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMiscellaneousMathematicalSymbolsA(int code) {
- return(((code >= 0x27C0) && (code <= 0x27EF)));
-}
-
-/**
- * xmlUCSIsMiscellaneousMathematicalSymbolsB:
- * @code: UCS code point
- *
- * Check whether the character is part of MiscellaneousMathematicalSymbols-B UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMiscellaneousMathematicalSymbolsB(int code) {
- return(((code >= 0x2980) && (code <= 0x29FF)));
-}
-
-/**
- * xmlUCSIsMiscellaneousSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of MiscellaneousSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMiscellaneousSymbols(int code) {
- return(((code >= 0x2600) && (code <= 0x26FF)));
-}
-
-/**
- * xmlUCSIsMiscellaneousSymbolsandArrows:
- * @code: UCS code point
- *
- * Check whether the character is part of MiscellaneousSymbolsandArrows UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMiscellaneousSymbolsandArrows(int code) {
- return(((code >= 0x2B00) && (code <= 0x2BFF)));
-}
-
-/**
- * xmlUCSIsMiscellaneousTechnical:
- * @code: UCS code point
- *
- * Check whether the character is part of MiscellaneousTechnical UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMiscellaneousTechnical(int code) {
- return(((code >= 0x2300) && (code <= 0x23FF)));
-}
-
-/**
- * xmlUCSIsMongolian:
- * @code: UCS code point
- *
- * Check whether the character is part of Mongolian UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMongolian(int code) {
- return(((code >= 0x1800) && (code <= 0x18AF)));
-}
-
-/**
- * xmlUCSIsMusicalSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of MusicalSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMusicalSymbols(int code) {
- return(((code >= 0x1D100) && (code <= 0x1D1FF)));
-}
-
-/**
- * xmlUCSIsMyanmar:
- * @code: UCS code point
- *
- * Check whether the character is part of Myanmar UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsMyanmar(int code) {
- return(((code >= 0x1000) && (code <= 0x109F)));
-}
-
-/**
- * xmlUCSIsNumberForms:
- * @code: UCS code point
- *
- * Check whether the character is part of NumberForms UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsNumberForms(int code) {
- return(((code >= 0x2150) && (code <= 0x218F)));
-}
-
-/**
- * xmlUCSIsOgham:
- * @code: UCS code point
- *
- * Check whether the character is part of Ogham UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsOgham(int code) {
- return(((code >= 0x1680) && (code <= 0x169F)));
-}
-
-/**
- * xmlUCSIsOldItalic:
- * @code: UCS code point
- *
- * Check whether the character is part of OldItalic UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsOldItalic(int code) {
- return(((code >= 0x10300) && (code <= 0x1032F)));
-}
-
-/**
- * xmlUCSIsOpticalCharacterRecognition:
- * @code: UCS code point
- *
- * Check whether the character is part of OpticalCharacterRecognition UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsOpticalCharacterRecognition(int code) {
- return(((code >= 0x2440) && (code <= 0x245F)));
-}
-
-/**
- * xmlUCSIsOriya:
- * @code: UCS code point
- *
- * Check whether the character is part of Oriya UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsOriya(int code) {
- return(((code >= 0x0B00) && (code <= 0x0B7F)));
-}
-
-/**
- * xmlUCSIsOsmanya:
- * @code: UCS code point
- *
- * Check whether the character is part of Osmanya UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsOsmanya(int code) {
- return(((code >= 0x10480) && (code <= 0x104AF)));
-}
-
-/**
- * xmlUCSIsPhoneticExtensions:
- * @code: UCS code point
- *
- * Check whether the character is part of PhoneticExtensions UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsPhoneticExtensions(int code) {
- return(((code >= 0x1D00) && (code <= 0x1D7F)));
-}
-
-/**
- * xmlUCSIsPrivateUse:
- * @code: UCS code point
- *
- * Check whether the character is part of PrivateUse UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsPrivateUse(int code) {
- return(((code >= 0xE000) && (code <= 0xF8FF)) ||
- ((code >= 0xF0000) && (code <= 0xFFFFF)) ||
- ((code >= 0x100000) && (code <= 0x10FFFF)));
-}
-
-/**
- * xmlUCSIsPrivateUseArea:
- * @code: UCS code point
- *
- * Check whether the character is part of PrivateUseArea UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsPrivateUseArea(int code) {
- return(((code >= 0xE000) && (code <= 0xF8FF)));
-}
-
-/**
- * xmlUCSIsRunic:
- * @code: UCS code point
- *
- * Check whether the character is part of Runic UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsRunic(int code) {
- return(((code >= 0x16A0) && (code <= 0x16FF)));
-}
-
-/**
- * xmlUCSIsShavian:
- * @code: UCS code point
- *
- * Check whether the character is part of Shavian UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsShavian(int code) {
- return(((code >= 0x10450) && (code <= 0x1047F)));
-}
-
-/**
- * xmlUCSIsSinhala:
- * @code: UCS code point
- *
- * Check whether the character is part of Sinhala UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSinhala(int code) {
- return(((code >= 0x0D80) && (code <= 0x0DFF)));
-}
-
-/**
- * xmlUCSIsSmallFormVariants:
- * @code: UCS code point
- *
- * Check whether the character is part of SmallFormVariants UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSmallFormVariants(int code) {
- return(((code >= 0xFE50) && (code <= 0xFE6F)));
-}
-
-/**
- * xmlUCSIsSpacingModifierLetters:
- * @code: UCS code point
- *
- * Check whether the character is part of SpacingModifierLetters UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSpacingModifierLetters(int code) {
- return(((code >= 0x02B0) && (code <= 0x02FF)));
-}
-
-/**
- * xmlUCSIsSpecials:
- * @code: UCS code point
- *
- * Check whether the character is part of Specials UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSpecials(int code) {
- return(((code >= 0xFFF0) && (code <= 0xFFFF)));
-}
-
-/**
- * xmlUCSIsSuperscriptsandSubscripts:
- * @code: UCS code point
- *
- * Check whether the character is part of SuperscriptsandSubscripts UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSuperscriptsandSubscripts(int code) {
- return(((code >= 0x2070) && (code <= 0x209F)));
-}
-
-/**
- * xmlUCSIsSupplementalArrowsA:
- * @code: UCS code point
- *
- * Check whether the character is part of SupplementalArrows-A UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSupplementalArrowsA(int code) {
- return(((code >= 0x27F0) && (code <= 0x27FF)));
-}
-
-/**
- * xmlUCSIsSupplementalArrowsB:
- * @code: UCS code point
- *
- * Check whether the character is part of SupplementalArrows-B UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSupplementalArrowsB(int code) {
- return(((code >= 0x2900) && (code <= 0x297F)));
-}
-
-/**
- * xmlUCSIsSupplementalMathematicalOperators:
- * @code: UCS code point
- *
- * Check whether the character is part of SupplementalMathematicalOperators UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSupplementalMathematicalOperators(int code) {
- return(((code >= 0x2A00) && (code <= 0x2AFF)));
-}
-
-/**
- * xmlUCSIsSupplementaryPrivateUseAreaA:
- * @code: UCS code point
- *
- * Check whether the character is part of SupplementaryPrivateUseArea-A UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSupplementaryPrivateUseAreaA(int code) {
- return(((code >= 0xF0000) && (code <= 0xFFFFF)));
-}
-
-/**
- * xmlUCSIsSupplementaryPrivateUseAreaB:
- * @code: UCS code point
- *
- * Check whether the character is part of SupplementaryPrivateUseArea-B UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSupplementaryPrivateUseAreaB(int code) {
- return(((code >= 0x100000) && (code <= 0x10FFFF)));
-}
-
-/**
- * xmlUCSIsSyriac:
- * @code: UCS code point
- *
- * Check whether the character is part of Syriac UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsSyriac(int code) {
- return(((code >= 0x0700) && (code <= 0x074F)));
-}
-
-/**
- * xmlUCSIsTagalog:
- * @code: UCS code point
- *
- * Check whether the character is part of Tagalog UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsTagalog(int code) {
- return(((code >= 0x1700) && (code <= 0x171F)));
-}
-
-/**
- * xmlUCSIsTagbanwa:
- * @code: UCS code point
- *
- * Check whether the character is part of Tagbanwa UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsTagbanwa(int code) {
- return(((code >= 0x1760) && (code <= 0x177F)));
-}
-
-/**
- * xmlUCSIsTags:
- * @code: UCS code point
- *
- * Check whether the character is part of Tags UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsTags(int code) {
- return(((code >= 0xE0000) && (code <= 0xE007F)));
-}
-
-/**
- * xmlUCSIsTaiLe:
- * @code: UCS code point
- *
- * Check whether the character is part of TaiLe UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsTaiLe(int code) {
- return(((code >= 0x1950) && (code <= 0x197F)));
-}
-
-/**
- * xmlUCSIsTaiXuanJingSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of TaiXuanJingSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsTaiXuanJingSymbols(int code) {
- return(((code >= 0x1D300) && (code <= 0x1D35F)));
-}
-
-/**
- * xmlUCSIsTamil:
- * @code: UCS code point
- *
- * Check whether the character is part of Tamil UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsTamil(int code) {
- return(((code >= 0x0B80) && (code <= 0x0BFF)));
-}
-
-/**
- * xmlUCSIsTelugu:
- * @code: UCS code point
- *
- * Check whether the character is part of Telugu UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsTelugu(int code) {
- return(((code >= 0x0C00) && (code <= 0x0C7F)));
-}
-
-/**
- * xmlUCSIsThaana:
- * @code: UCS code point
- *
- * Check whether the character is part of Thaana UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsThaana(int code) {
- return(((code >= 0x0780) && (code <= 0x07BF)));
-}
-
-/**
- * xmlUCSIsThai:
- * @code: UCS code point
- *
- * Check whether the character is part of Thai UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsThai(int code) {
- return(((code >= 0x0E00) && (code <= 0x0E7F)));
-}
-
-/**
- * xmlUCSIsTibetan:
- * @code: UCS code point
- *
- * Check whether the character is part of Tibetan UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsTibetan(int code) {
- return(((code >= 0x0F00) && (code <= 0x0FFF)));
-}
-
-/**
- * xmlUCSIsUgaritic:
- * @code: UCS code point
- *
- * Check whether the character is part of Ugaritic UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsUgaritic(int code) {
- return(((code >= 0x10380) && (code <= 0x1039F)));
-}
-
-/**
- * xmlUCSIsUnifiedCanadianAboriginalSyllabics:
- * @code: UCS code point
- *
- * Check whether the character is part of UnifiedCanadianAboriginalSyllabics UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsUnifiedCanadianAboriginalSyllabics(int code) {
- return(((code >= 0x1400) && (code <= 0x167F)));
-}
-
-/**
- * xmlUCSIsVariationSelectors:
- * @code: UCS code point
- *
- * Check whether the character is part of VariationSelectors UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsVariationSelectors(int code) {
- return(((code >= 0xFE00) && (code <= 0xFE0F)));
-}
-
-/**
- * xmlUCSIsVariationSelectorsSupplement:
- * @code: UCS code point
- *
- * Check whether the character is part of VariationSelectorsSupplement UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsVariationSelectorsSupplement(int code) {
- return(((code >= 0xE0100) && (code <= 0xE01EF)));
-}
-
-/**
- * xmlUCSIsYiRadicals:
- * @code: UCS code point
- *
- * Check whether the character is part of YiRadicals UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsYiRadicals(int code) {
- return(((code >= 0xA490) && (code <= 0xA4CF)));
-}
-
-/**
- * xmlUCSIsYiSyllables:
- * @code: UCS code point
- *
- * Check whether the character is part of YiSyllables UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsYiSyllables(int code) {
- return(((code >= 0xA000) && (code <= 0xA48F)));
-}
-
-/**
- * xmlUCSIsYijingHexagramSymbols:
- * @code: UCS code point
- *
- * Check whether the character is part of YijingHexagramSymbols UCS Block
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsYijingHexagramSymbols(int code) {
- return(((code >= 0x4DC0) && (code <= 0x4DFF)));
-}
-
-/**
- * xmlUCSIsBlock:
- * @code: UCS code point
- * @block: UCS block name
- *
- * Check whether the character is part of the UCS Block
- *
- * Returns 1 if true, 0 if false and -1 on unknown block
- */
-int
-xmlUCSIsBlock(int code, const char *block) {
- xmlIntFunc *func;
-
- func = xmlUnicodeLookup(&xmlUnicodeBlockTbl, block);
- if (func == NULL)
- return (-1);
- return (func(code));
-}
-
-/**
- * xmlUCSIsCatC:
- * @code: UCS code point
- *
- * Check whether the character is part of C UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatC(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlCG));
-}
-
-/**
- * xmlUCSIsCatCc:
- * @code: UCS code point
- *
- * Check whether the character is part of Cc UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatCc(int code) {
- return(((code >= 0x0) && (code <= 0x1f)) ||
- ((code >= 0x7f) && (code <= 0x9f)));
-}
-
-/**
- * xmlUCSIsCatCf:
- * @code: UCS code point
- *
- * Check whether the character is part of Cf UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatCf(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlCfG));
-}
-
-/**
- * xmlUCSIsCatCo:
- * @code: UCS code point
- *
- * Check whether the character is part of Co UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatCo(int code) {
- return((code == 0xe000) ||
- (code == 0xf8ff) ||
- (code == 0xf0000) ||
- (code == 0xffffd) ||
- (code == 0x100000) ||
- (code == 0x10fffd));
-}
-
-/**
- * xmlUCSIsCatCs:
- * @code: UCS code point
- *
- * Check whether the character is part of Cs UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatCs(int code) {
- return((code == 0xd800) ||
- ((code >= 0xdb7f) && (code <= 0xdb80)) ||
- ((code >= 0xdbff) && (code <= 0xdc00)) ||
- (code == 0xdfff));
-}
-
-/**
- * xmlUCSIsCatL:
- * @code: UCS code point
- *
- * Check whether the character is part of L UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatL(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlLG));
-}
-
-/**
- * xmlUCSIsCatLl:
- * @code: UCS code point
- *
- * Check whether the character is part of Ll UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatLl(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlLlG));
-}
-
-/**
- * xmlUCSIsCatLm:
- * @code: UCS code point
- *
- * Check whether the character is part of Lm UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatLm(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlLmG));
-}
-
-/**
- * xmlUCSIsCatLo:
- * @code: UCS code point
- *
- * Check whether the character is part of Lo UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatLo(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlLoG));
-}
-
-/**
- * xmlUCSIsCatLt:
- * @code: UCS code point
- *
- * Check whether the character is part of Lt UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatLt(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlLtG));
-}
-
-/**
- * xmlUCSIsCatLu:
- * @code: UCS code point
- *
- * Check whether the character is part of Lu UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatLu(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlLuG));
-}
-
-/**
- * xmlUCSIsCatM:
- * @code: UCS code point
- *
- * Check whether the character is part of M UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatM(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlMG));
-}
-
-/**
- * xmlUCSIsCatMc:
- * @code: UCS code point
- *
- * Check whether the character is part of Mc UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatMc(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlMcG));
-}
-
-/**
- * xmlUCSIsCatMe:
- * @code: UCS code point
- *
- * Check whether the character is part of Me UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatMe(int code) {
- return(((code >= 0x488) && (code <= 0x489)) ||
- (code == 0x6de) ||
- ((code >= 0x20dd) && (code <= 0x20e0)) ||
- ((code >= 0x20e2) && (code <= 0x20e4)));
-}
-
-/**
- * xmlUCSIsCatMn:
- * @code: UCS code point
- *
- * Check whether the character is part of Mn UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatMn(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlMnG));
-}
-
-/**
- * xmlUCSIsCatN:
- * @code: UCS code point
- *
- * Check whether the character is part of N UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatN(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlNG));
-}
-
-/**
- * xmlUCSIsCatNd:
- * @code: UCS code point
- *
- * Check whether the character is part of Nd UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatNd(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlNdG));
-}
-
-/**
- * xmlUCSIsCatNl:
- * @code: UCS code point
- *
- * Check whether the character is part of Nl UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatNl(int code) {
- return(((code >= 0x16ee) && (code <= 0x16f0)) ||
- ((code >= 0x2160) && (code <= 0x2183)) ||
- (code == 0x3007) ||
- ((code >= 0x3021) && (code <= 0x3029)) ||
- ((code >= 0x3038) && (code <= 0x303a)) ||
- (code == 0x1034a));
-}
-
-/**
- * xmlUCSIsCatNo:
- * @code: UCS code point
- *
- * Check whether the character is part of No UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatNo(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlNoG));
-}
-
-/**
- * xmlUCSIsCatP:
- * @code: UCS code point
- *
- * Check whether the character is part of P UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatP(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlPG));
-}
-
-/**
- * xmlUCSIsCatPc:
- * @code: UCS code point
- *
- * Check whether the character is part of Pc UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatPc(int code) {
- return((code == 0x5f) ||
- ((code >= 0x203f) && (code <= 0x2040)) ||
- (code == 0x2054) ||
- (code == 0x30fb) ||
- ((code >= 0xfe33) && (code <= 0xfe34)) ||
- ((code >= 0xfe4d) && (code <= 0xfe4f)) ||
- (code == 0xff3f) ||
- (code == 0xff65));
-}
-
-/**
- * xmlUCSIsCatPd:
- * @code: UCS code point
- *
- * Check whether the character is part of Pd UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatPd(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlPdG));
-}
-
-/**
- * xmlUCSIsCatPe:
- * @code: UCS code point
- *
- * Check whether the character is part of Pe UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatPe(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlPeG));
-}
-
-/**
- * xmlUCSIsCatPf:
- * @code: UCS code point
- *
- * Check whether the character is part of Pf UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatPf(int code) {
- return((code == 0xbb) ||
- (code == 0x2019) ||
- (code == 0x201d) ||
- (code == 0x203a));
-}
-
-/**
- * xmlUCSIsCatPi:
- * @code: UCS code point
- *
- * Check whether the character is part of Pi UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatPi(int code) {
- return((code == 0xab) ||
- (code == 0x2018) ||
- ((code >= 0x201b) && (code <= 0x201c)) ||
- (code == 0x201f) ||
- (code == 0x2039));
-}
-
-/**
- * xmlUCSIsCatPo:
- * @code: UCS code point
- *
- * Check whether the character is part of Po UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatPo(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlPoG));
-}
-
-/**
- * xmlUCSIsCatPs:
- * @code: UCS code point
- *
- * Check whether the character is part of Ps UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatPs(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlPsG));
-}
-
-/**
- * xmlUCSIsCatS:
- * @code: UCS code point
- *
- * Check whether the character is part of S UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatS(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlSG));
-}
-
-/**
- * xmlUCSIsCatSc:
- * @code: UCS code point
- *
- * Check whether the character is part of Sc UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatSc(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlScG));
-}
-
-/**
- * xmlUCSIsCatSk:
- * @code: UCS code point
- *
- * Check whether the character is part of Sk UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatSk(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlSkG));
-}
-
-/**
- * xmlUCSIsCatSm:
- * @code: UCS code point
- *
- * Check whether the character is part of Sm UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatSm(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlSmG));
-}
-
-/**
- * xmlUCSIsCatSo:
- * @code: UCS code point
- *
- * Check whether the character is part of So UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatSo(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlSoG));
-}
-
-/**
- * xmlUCSIsCatZ:
- * @code: UCS code point
- *
- * Check whether the character is part of Z UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatZ(int code) {
- return(xmlCharInRange((unsigned int)code, &xmlZG));
-}
-
-/**
- * xmlUCSIsCatZl:
- * @code: UCS code point
- *
- * Check whether the character is part of Zl UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatZl(int code) {
- return((code == 0x2028));
-}
-
-/**
- * xmlUCSIsCatZp:
- * @code: UCS code point
- *
- * Check whether the character is part of Zp UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatZp(int code) {
- return((code == 0x2029));
-}
-
-/**
- * xmlUCSIsCatZs:
- * @code: UCS code point
- *
- * Check whether the character is part of Zs UCS Category
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlUCSIsCatZs(int code) {
- return((code == 0x20) ||
- (code == 0xa0) ||
- (code == 0x1680) ||
- (code == 0x180e) ||
- ((code >= 0x2000) && (code <= 0x200a)) ||
- (code == 0x202f) ||
- (code == 0x205f) ||
- (code == 0x3000));
-}
-
-/**
- * xmlUCSIsCat:
- * @code: UCS code point
- * @cat: UCS Category name
- *
- * Check whether the character is part of the UCS Category
- *
- * Returns 1 if true, 0 if false and -1 on unknown category
- */
-int
-xmlUCSIsCat(int code, const char *cat) {
- xmlIntFunc *func;
-
- func = xmlUnicodeLookup(&xmlUnicodeCatTbl, cat);
- if (func == NULL)
- return (-1);
- return (func(code));
-}
-
-#define bottom_xmlunicode
-#include "elfgcchack.h"
-#endif /* LIBXML_UNICODE_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/xmlwriter.c b/external/libxml2_android/jni/libxml2/xmlwriter.c
deleted file mode 100644
index 69541b89..00000000
--- a/external/libxml2_android/jni/libxml2/xmlwriter.c
+++ /dev/null
@@ -1,4743 +0,0 @@
-
-/*
- * xmlwriter.c: XML text writer implementation
- *
- * For license and disclaimer see the license and disclaimer of
- * libxml2.
- *
- * alfred@mickautsch.de
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-#include <string.h>
-
-#include <libxml/xmlmemory.h>
-#include <libxml/parser.h>
-#include <libxml/uri.h>
-#include <libxml/HTMLtree.h>
-
-#ifdef LIBXML_WRITER_ENABLED
-
-#include <libxml/xmlwriter.h>
-
-#include "buf.h"
-#include "enc.h"
-#include "save.h"
-
-#define B64LINELEN 72
-#define B64CRLF "\r\n"
-
-/*
- * The following VA_COPY was coded following an example in
- * the Samba project. It may not be sufficient for some
- * esoteric implementations of va_list but (hopefully) will
- * be sufficient for libxml2.
- */
-#ifndef VA_COPY
- #ifdef HAVE_VA_COPY
- #define VA_COPY(dest, src) va_copy(dest, src)
- #else
- #ifdef HAVE___VA_COPY
- #define VA_COPY(dest,src) __va_copy(dest, src)
- #else
- #ifndef VA_LIST_IS_ARRAY
- #define VA_COPY(dest,src) (dest) = (src)
- #else
- #include <string.h>
- #define VA_COPY(dest,src) memcpy((char *)(dest),(char *)(src),sizeof(va_list))
- #endif
- #endif
- #endif
-#endif
-
-/*
- * Types are kept private
- */
-typedef enum {
- XML_TEXTWRITER_NONE = 0,
- XML_TEXTWRITER_NAME,
- XML_TEXTWRITER_ATTRIBUTE,
- XML_TEXTWRITER_TEXT,
- XML_TEXTWRITER_PI,
- XML_TEXTWRITER_PI_TEXT,
- XML_TEXTWRITER_CDATA,
- XML_TEXTWRITER_DTD,
- XML_TEXTWRITER_DTD_TEXT,
- XML_TEXTWRITER_DTD_ELEM,
- XML_TEXTWRITER_DTD_ELEM_TEXT,
- XML_TEXTWRITER_DTD_ATTL,
- XML_TEXTWRITER_DTD_ATTL_TEXT,
- XML_TEXTWRITER_DTD_ENTY, /* entity */
- XML_TEXTWRITER_DTD_ENTY_TEXT,
- XML_TEXTWRITER_DTD_PENT, /* parameter entity */
- XML_TEXTWRITER_COMMENT
-} xmlTextWriterState;
-
-typedef struct _xmlTextWriterStackEntry xmlTextWriterStackEntry;
-
-struct _xmlTextWriterStackEntry {
- xmlChar *name;
- xmlTextWriterState state;
-};
-
-typedef struct _xmlTextWriterNsStackEntry xmlTextWriterNsStackEntry;
-struct _xmlTextWriterNsStackEntry {
- xmlChar *prefix;
- xmlChar *uri;
- xmlLinkPtr elem;
-};
-
-struct _xmlTextWriter {
- xmlOutputBufferPtr out; /* output buffer */
- xmlListPtr nodes; /* element name stack */
- xmlListPtr nsstack; /* name spaces stack */
- int level;
- int indent; /* enable indent */
- int doindent; /* internal indent flag */
- xmlChar *ichar; /* indent character */
- char qchar; /* character used for quoting attribute values */
- xmlParserCtxtPtr ctxt;
- int no_doc_free;
- xmlDocPtr doc;
-};
-
-static void xmlFreeTextWriterStackEntry(xmlLinkPtr lk);
-static int xmlCmpTextWriterStackEntry(const void *data0,
- const void *data1);
-static int xmlTextWriterOutputNSDecl(xmlTextWriterPtr writer);
-static void xmlFreeTextWriterNsStackEntry(xmlLinkPtr lk);
-static int xmlCmpTextWriterNsStackEntry(const void *data0,
- const void *data1);
-static int xmlTextWriterWriteDocCallback(void *context,
- const xmlChar * str, int len);
-static int xmlTextWriterCloseDocCallback(void *context);
-
-static xmlChar *xmlTextWriterVSprintf(const char *format, va_list argptr) LIBXML_ATTR_FORMAT(1,0);
-static int xmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len,
- const unsigned char *data);
-static void xmlTextWriterStartDocumentCallback(void *ctx);
-static int xmlTextWriterWriteIndent(xmlTextWriterPtr writer);
-static int
- xmlTextWriterHandleStateDependencies(xmlTextWriterPtr writer,
- xmlTextWriterStackEntry * p);
-
-/**
- * xmlWriterErrMsg:
- * @ctxt: a writer context
- * @error: the error number
- * @msg: the error message
- *
- * Handle a writer error
- */
-static void
-xmlWriterErrMsg(xmlTextWriterPtr ctxt, xmlParserErrors error,
- const char *msg)
-{
- if (ctxt != NULL) {
- __xmlRaiseError(NULL, NULL, NULL, ctxt->ctxt,
- NULL, XML_FROM_WRITER, error, XML_ERR_FATAL,
- NULL, 0, NULL, NULL, NULL, 0, 0, "%s", msg);
- } else {
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_WRITER, error,
- XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0, "%s", msg);
- }
-}
-
-/**
- * xmlWriterErrMsgInt:
- * @ctxt: a writer context
- * @error: the error number
- * @msg: the error message
- * @val: an int
- *
- * Handle a writer error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlWriterErrMsgInt(xmlTextWriterPtr ctxt, xmlParserErrors error,
- const char *msg, int val)
-{
- if (ctxt != NULL) {
- __xmlRaiseError(NULL, NULL, NULL, ctxt->ctxt,
- NULL, XML_FROM_WRITER, error, XML_ERR_FATAL,
- NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
- } else {
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_WRITER, error,
- XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, val, 0, msg, val);
- }
-}
-
-/**
- * xmlNewTextWriter:
- * @out: an xmlOutputBufferPtr
- *
- * Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr
- * NOTE: the @out parameter will be deallocated when the writer is closed
- * (if the call succeed.)
- *
- * Returns the new xmlTextWriterPtr or NULL in case of error
- */
-xmlTextWriterPtr
-xmlNewTextWriter(xmlOutputBufferPtr out)
-{
- xmlTextWriterPtr ret;
-
- ret = (xmlTextWriterPtr) xmlMalloc(sizeof(xmlTextWriter));
- if (ret == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlNewTextWriter : out of memory!\n");
- return NULL;
- }
- memset(ret, 0, (size_t) sizeof(xmlTextWriter));
-
- ret->nodes = xmlListCreate((xmlListDeallocator)
- xmlFreeTextWriterStackEntry,
- (xmlListDataCompare)
- xmlCmpTextWriterStackEntry);
- if (ret->nodes == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlNewTextWriter : out of memory!\n");
- xmlFree(ret);
- return NULL;
- }
-
- ret->nsstack = xmlListCreate((xmlListDeallocator)
- xmlFreeTextWriterNsStackEntry,
- (xmlListDataCompare)
- xmlCmpTextWriterNsStackEntry);
- if (ret->nsstack == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlNewTextWriter : out of memory!\n");
- xmlListDelete(ret->nodes);
- xmlFree(ret);
- return NULL;
- }
-
- ret->out = out;
- ret->ichar = xmlStrdup(BAD_CAST " ");
- ret->qchar = '"';
-
- if (!ret->ichar) {
- xmlListDelete(ret->nodes);
- xmlListDelete(ret->nsstack);
- xmlFree(ret);
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlNewTextWriter : out of memory!\n");
- return NULL;
- }
-
- ret->doc = xmlNewDoc(NULL);
-
- ret->no_doc_free = 0;
-
- return ret;
-}
-
-/**
- * xmlNewTextWriterFilename:
- * @uri: the URI of the resource for the output
- * @compression: compress the output?
- *
- * Create a new xmlNewTextWriter structure with @uri as output
- *
- * Returns the new xmlTextWriterPtr or NULL in case of error
- */
-xmlTextWriterPtr
-xmlNewTextWriterFilename(const char *uri, int compression)
-{
- xmlTextWriterPtr ret;
- xmlOutputBufferPtr out;
-
- out = xmlOutputBufferCreateFilename(uri, NULL, compression);
- if (out == NULL) {
- xmlWriterErrMsg(NULL, XML_IO_EIO,
- "xmlNewTextWriterFilename : cannot open uri\n");
- return NULL;
- }
-
- ret = xmlNewTextWriter(out);
- if (ret == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlNewTextWriterFilename : out of memory!\n");
- xmlOutputBufferClose(out);
- return NULL;
- }
-
- ret->indent = 0;
- ret->doindent = 0;
- return ret;
-}
-
-/**
- * xmlNewTextWriterMemory:
- * @buf: xmlBufferPtr
- * @compression: compress the output?
- *
- * Create a new xmlNewTextWriter structure with @buf as output
- * TODO: handle compression
- *
- * Returns the new xmlTextWriterPtr or NULL in case of error
- */
-xmlTextWriterPtr
-xmlNewTextWriterMemory(xmlBufferPtr buf, int compression ATTRIBUTE_UNUSED)
-{
- xmlTextWriterPtr ret;
- xmlOutputBufferPtr out;
-
-/*::todo handle compression */
- out = xmlOutputBufferCreateBuffer(buf, NULL);
-
- if (out == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlNewTextWriterMemory : out of memory!\n");
- return NULL;
- }
-
- ret = xmlNewTextWriter(out);
- if (ret == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlNewTextWriterMemory : out of memory!\n");
- xmlOutputBufferClose(out);
- return NULL;
- }
-
- return ret;
-}
-
-/**
- * xmlNewTextWriterPushParser:
- * @ctxt: xmlParserCtxtPtr to hold the new XML document tree
- * @compression: compress the output?
- *
- * Create a new xmlNewTextWriter structure with @ctxt as output
- * NOTE: the @ctxt context will be freed with the resulting writer
- * (if the call succeeds).
- * TODO: handle compression
- *
- * Returns the new xmlTextWriterPtr or NULL in case of error
- */
-xmlTextWriterPtr
-xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt,
- int compression ATTRIBUTE_UNUSED)
-{
- xmlTextWriterPtr ret;
- xmlOutputBufferPtr out;
-
- if (ctxt == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterPushParser : invalid context!\n");
- return NULL;
- }
-
- out = xmlOutputBufferCreateIO((xmlOutputWriteCallback)
- xmlTextWriterWriteDocCallback,
- (xmlOutputCloseCallback)
- xmlTextWriterCloseDocCallback,
- (void *) ctxt, NULL);
- if (out == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterPushParser : error at xmlOutputBufferCreateIO!\n");
- return NULL;
- }
-
- ret = xmlNewTextWriter(out);
- if (ret == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterPushParser : error at xmlNewTextWriter!\n");
- xmlOutputBufferClose(out);
- return NULL;
- }
-
- ret->ctxt = ctxt;
-
- return ret;
-}
-
-/**
- * xmlNewTextWriterDoc:
- * @doc: address of a xmlDocPtr to hold the new XML document tree
- * @compression: compress the output?
- *
- * Create a new xmlNewTextWriter structure with @*doc as output
- *
- * Returns the new xmlTextWriterPtr or NULL in case of error
- */
-xmlTextWriterPtr
-xmlNewTextWriterDoc(xmlDocPtr * doc, int compression)
-{
- xmlTextWriterPtr ret;
- xmlSAXHandler saxHandler;
- xmlParserCtxtPtr ctxt;
-
- memset(&saxHandler, '\0', sizeof(saxHandler));
- xmlSAX2InitDefaultSAXHandler(&saxHandler, 1);
- saxHandler.startDocument = xmlTextWriterStartDocumentCallback;
- saxHandler.startElement = xmlSAX2StartElement;
- saxHandler.endElement = xmlSAX2EndElement;
-
- ctxt = xmlCreatePushParserCtxt(&saxHandler, NULL, NULL, 0, NULL);
- if (ctxt == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterDoc : error at xmlCreatePushParserCtxt!\n");
- return NULL;
- }
- /*
- * For some reason this seems to completely break if node names
- * are interned.
- */
- ctxt->dictNames = 0;
-
- ctxt->myDoc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION);
- if (ctxt->myDoc == NULL) {
- xmlFreeParserCtxt(ctxt);
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterDoc : error at xmlNewDoc!\n");
- return NULL;
- }
-
- ret = xmlNewTextWriterPushParser(ctxt, compression);
- if (ret == NULL) {
- xmlFreeDoc(ctxt->myDoc);
- xmlFreeParserCtxt(ctxt);
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterDoc : error at xmlNewTextWriterPushParser!\n");
- return NULL;
- }
-
- xmlSetDocCompressMode(ctxt->myDoc, compression);
-
- if (doc != NULL) {
- *doc = ctxt->myDoc;
- ret->no_doc_free = 1;
- }
-
- return ret;
-}
-
-/**
- * xmlNewTextWriterTree:
- * @doc: xmlDocPtr
- * @node: xmlNodePtr or NULL for doc->children
- * @compression: compress the output?
- *
- * Create a new xmlNewTextWriter structure with @doc as output
- * starting at @node
- *
- * Returns the new xmlTextWriterPtr or NULL in case of error
- */
-xmlTextWriterPtr
-xmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node, int compression)
-{
- xmlTextWriterPtr ret;
- xmlSAXHandler saxHandler;
- xmlParserCtxtPtr ctxt;
-
- if (doc == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterTree : invalid document tree!\n");
- return NULL;
- }
-
- memset(&saxHandler, '\0', sizeof(saxHandler));
- xmlSAX2InitDefaultSAXHandler(&saxHandler, 1);
- saxHandler.startDocument = xmlTextWriterStartDocumentCallback;
- saxHandler.startElement = xmlSAX2StartElement;
- saxHandler.endElement = xmlSAX2EndElement;
-
- ctxt = xmlCreatePushParserCtxt(&saxHandler, NULL, NULL, 0, NULL);
- if (ctxt == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterDoc : error at xmlCreatePushParserCtxt!\n");
- return NULL;
- }
- /*
- * For some reason this seems to completely break if node names
- * are interned.
- */
- ctxt->dictNames = 0;
-
- ret = xmlNewTextWriterPushParser(ctxt, compression);
- if (ret == NULL) {
- xmlFreeParserCtxt(ctxt);
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlNewTextWriterDoc : error at xmlNewTextWriterPushParser!\n");
- return NULL;
- }
-
- ctxt->myDoc = doc;
- ctxt->node = node;
- ret->no_doc_free = 1;
-
- xmlSetDocCompressMode(doc, compression);
-
- return ret;
-}
-
-/**
- * xmlFreeTextWriter:
- * @writer: the xmlTextWriterPtr
- *
- * Deallocate all the resources associated to the writer
- */
-void
-xmlFreeTextWriter(xmlTextWriterPtr writer)
-{
- if (writer == NULL)
- return;
-
- if (writer->out != NULL)
- xmlOutputBufferClose(writer->out);
-
- if (writer->nodes != NULL)
- xmlListDelete(writer->nodes);
-
- if (writer->nsstack != NULL)
- xmlListDelete(writer->nsstack);
-
- if (writer->ctxt != NULL) {
- if ((writer->ctxt->myDoc != NULL) && (writer->no_doc_free == 0)) {
- xmlFreeDoc(writer->ctxt->myDoc);
- writer->ctxt->myDoc = NULL;
- }
- xmlFreeParserCtxt(writer->ctxt);
- }
-
- if (writer->doc != NULL)
- xmlFreeDoc(writer->doc);
-
- if (writer->ichar != NULL)
- xmlFree(writer->ichar);
- xmlFree(writer);
-}
-
-/**
- * xmlTextWriterStartDocument:
- * @writer: the xmlTextWriterPtr
- * @version: the xml version ("1.0") or NULL for default ("1.0")
- * @encoding: the encoding or NULL for default
- * @standalone: "yes" or "no" or NULL for default
- *
- * Start a new xml document
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartDocument(xmlTextWriterPtr writer, const char *version,
- const char *encoding, const char *standalone)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlCharEncodingHandlerPtr encoder;
-
- if ((writer == NULL) || (writer->out == NULL)) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterStartDocument : invalid writer!\n");
- return -1;
- }
-
- lk = xmlListFront(writer->nodes);
- if ((lk != NULL) && (xmlLinkGetData(lk) != NULL)) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterStartDocument : not allowed in this context!\n");
- return -1;
- }
-
- encoder = NULL;
- if (encoding != NULL) {
- encoder = xmlFindCharEncodingHandler(encoding);
- if (encoder == NULL) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDocument : out of memory!\n");
- return -1;
- }
- }
-
- writer->out->encoder = encoder;
- if (encoder != NULL) {
- if (writer->out->conv == NULL) {
- writer->out->conv = xmlBufCreateSize(4000);
- }
- xmlCharEncOutput(writer->out, 1);
- if ((writer->doc != NULL) && (writer->doc->encoding == NULL))
- writer->doc->encoding = xmlStrdup((xmlChar *)writer->out->encoder->name);
- } else
- writer->out->conv = NULL;
-
- sum = 0;
- count = xmlOutputBufferWriteString(writer->out, "<?xml version=");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- if (version != 0)
- count = xmlOutputBufferWriteString(writer->out, version);
- else
- count = xmlOutputBufferWriteString(writer->out, "1.0");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- if (writer->out->encoder != 0) {
- count = xmlOutputBufferWriteString(writer->out, " encoding=");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- count =
- xmlOutputBufferWriteString(writer->out,
- writer->out->encoder->name);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- if (standalone != 0) {
- count = xmlOutputBufferWriteString(writer->out, " standalone=");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, standalone);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, "?>\n");
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndDocument:
- * @writer: the xmlTextWriterPtr
- *
- * End an xml document. All open elements are closed, and
- * the content is flushed to the output.
- *
- * Returns the bytes written or -1 in case of error
- */
-int
-xmlTextWriterEndDocument(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterEndDocument : invalid writer!\n");
- return -1;
- }
-
- sum = 0;
- while ((lk = xmlListFront(writer->nodes)) != NULL) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- break;
- switch (p->state) {
- case XML_TEXTWRITER_NAME:
- case XML_TEXTWRITER_ATTRIBUTE:
- case XML_TEXTWRITER_TEXT:
- count = xmlTextWriterEndElement(writer);
- if (count < 0)
- return -1;
- sum += count;
- break;
- case XML_TEXTWRITER_PI:
- case XML_TEXTWRITER_PI_TEXT:
- count = xmlTextWriterEndPI(writer);
- if (count < 0)
- return -1;
- sum += count;
- break;
- case XML_TEXTWRITER_CDATA:
- count = xmlTextWriterEndCDATA(writer);
- if (count < 0)
- return -1;
- sum += count;
- break;
- case XML_TEXTWRITER_DTD:
- case XML_TEXTWRITER_DTD_TEXT:
- case XML_TEXTWRITER_DTD_ELEM:
- case XML_TEXTWRITER_DTD_ELEM_TEXT:
- case XML_TEXTWRITER_DTD_ATTL:
- case XML_TEXTWRITER_DTD_ATTL_TEXT:
- case XML_TEXTWRITER_DTD_ENTY:
- case XML_TEXTWRITER_DTD_ENTY_TEXT:
- case XML_TEXTWRITER_DTD_PENT:
- count = xmlTextWriterEndDTD(writer);
- if (count < 0)
- return -1;
- sum += count;
- break;
- case XML_TEXTWRITER_COMMENT:
- count = xmlTextWriterEndComment(writer);
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- break;
- }
- }
-
- if (!writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- sum += xmlTextWriterFlush(writer);
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartComment:
- * @writer: the xmlTextWriterPtr
- *
- * Start an xml comment.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartComment(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterStartComment : invalid writer!\n");
- return -1;
- }
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_TEXT:
- case XML_TEXTWRITER_NONE:
- break;
- case XML_TEXTWRITER_NAME:
- /* Output namespace declarations */
- count = xmlTextWriterOutputNSDecl(writer);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- if (writer->indent) {
- count =
- xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
- p->state = XML_TEXTWRITER_TEXT;
- break;
- default:
- return -1;
- }
- }
- }
-
- p = (xmlTextWriterStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartElement : out of memory!\n");
- return -1;
- }
-
- p->name = NULL;
- p->state = XML_TEXTWRITER_COMMENT;
-
- xmlListPushFront(writer->nodes, p);
-
- if (writer->indent) {
- count = xmlTextWriterWriteIndent(writer);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, "<!--");
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndComment:
- * @writer: the xmlTextWriterPtr
- *
- * End the current xml coment.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndComment(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterEndComment : invalid writer!\n");
- return -1;
- }
-
- lk = xmlListFront(writer->nodes);
- if (lk == 0) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterEndComment : not allowed in this context!\n");
- return -1;
- }
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return -1;
-
- sum = 0;
- switch (p->state) {
- case XML_TEXTWRITER_COMMENT:
- count = xmlOutputBufferWriteString(writer->out, "-->");
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- return -1;
- }
-
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- xmlListPopFront(writer->nodes);
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatComment:
- * @writer: the xmlTextWriterPtr
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write an xml comment.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatComment(xmlTextWriterPtr writer,
- const char *format, ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatComment(writer, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatComment:
- * @writer: the xmlTextWriterPtr
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write an xml comment.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,
- const char *format, va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteVFormatComment : invalid writer!\n");
- return -1;
- }
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteComment(writer, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteComment:
- * @writer: the xmlTextWriterPtr
- * @content: comment string
- *
- * Write an xml comment.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteComment(xmlTextWriterPtr writer, const xmlChar * content)
-{
- int count;
- int sum;
-
- sum = 0;
- count = xmlTextWriterStartComment(writer);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlTextWriterWriteString(writer, content);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlTextWriterEndComment(writer);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartElement:
- * @writer: the xmlTextWriterPtr
- * @name: element name
- *
- * Start an xml element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartElement(xmlTextWriterPtr writer, const xmlChar * name)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if ((writer == NULL) || (name == NULL) || (*name == '\0'))
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_PI:
- case XML_TEXTWRITER_PI_TEXT:
- return -1;
- case XML_TEXTWRITER_NONE:
- break;
- case XML_TEXTWRITER_ATTRIBUTE:
- count = xmlTextWriterEndAttribute(writer);
- if (count < 0)
- return -1;
- sum += count;
- /* fallthrough */
- case XML_TEXTWRITER_NAME:
- /* Output namespace declarations */
- count = xmlTextWriterOutputNSDecl(writer);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- if (writer->indent)
- count =
- xmlOutputBufferWriteString(writer->out, "\n");
- p->state = XML_TEXTWRITER_TEXT;
- break;
- default:
- break;
- }
- }
- }
-
- p = (xmlTextWriterStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartElement : out of memory!\n");
- return -1;
- }
-
- p->name = xmlStrdup(name);
- if (p->name == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartElement : out of memory!\n");
- xmlFree(p);
- return -1;
- }
- p->state = XML_TEXTWRITER_NAME;
-
- xmlListPushFront(writer->nodes, p);
-
- if (writer->indent) {
- count = xmlTextWriterWriteIndent(writer);
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, "<");
- if (count < 0)
- return -1;
- sum += count;
- count =
- xmlOutputBufferWriteString(writer->out, (const char *) p->name);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartElementNS:
- * @writer: the xmlTextWriterPtr
- * @prefix: namespace prefix or NULL
- * @name: element local name
- * @namespaceURI: namespace URI or NULL
- *
- * Start an xml element with namespace support.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartElementNS(xmlTextWriterPtr writer,
- const xmlChar * prefix, const xmlChar * name,
- const xmlChar * namespaceURI)
-{
- int count;
- int sum;
- xmlChar *buf;
-
- if ((writer == NULL) || (name == NULL) || (*name == '\0'))
- return -1;
-
- buf = NULL;
- if (prefix != 0) {
- buf = xmlStrdup(prefix);
- buf = xmlStrcat(buf, BAD_CAST ":");
- }
- buf = xmlStrcat(buf, name);
-
- sum = 0;
- count = xmlTextWriterStartElement(writer, buf);
- xmlFree(buf);
- if (count < 0)
- return -1;
- sum += count;
-
- if (namespaceURI != 0) {
- xmlTextWriterNsStackEntry *p = (xmlTextWriterNsStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterNsStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartElementNS : out of memory!\n");
- return -1;
- }
-
- buf = xmlStrdup(BAD_CAST "xmlns");
- if (prefix != 0) {
- buf = xmlStrcat(buf, BAD_CAST ":");
- buf = xmlStrcat(buf, prefix);
- }
-
- p->prefix = buf;
- p->uri = xmlStrdup(namespaceURI);
- if (p->uri == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartElementNS : out of memory!\n");
- xmlFree(p);
- return -1;
- }
- p->elem = xmlListFront(writer->nodes);
-
- xmlListPushFront(writer->nsstack, p);
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndElement:
- * @writer: the xmlTextWriterPtr
- *
- * End the current xml element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndElement(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- lk = xmlListFront(writer->nodes);
- if (lk == 0) {
- xmlListDelete(writer->nsstack);
- writer->nsstack = NULL;
- return -1;
- }
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0) {
- xmlListDelete(writer->nsstack);
- writer->nsstack = NULL;
- return -1;
- }
-
- sum = 0;
- switch (p->state) {
- case XML_TEXTWRITER_ATTRIBUTE:
- count = xmlTextWriterEndAttribute(writer);
- if (count < 0) {
- xmlListDelete(writer->nsstack);
- writer->nsstack = NULL;
- return -1;
- }
- sum += count;
- /* fallthrough */
- case XML_TEXTWRITER_NAME:
- /* Output namespace declarations */
- count = xmlTextWriterOutputNSDecl(writer);
- if (count < 0)
- return -1;
- sum += count;
-
- if (writer->indent) /* next element needs indent */
- writer->doindent = 1;
- count = xmlOutputBufferWriteString(writer->out, "/>");
- if (count < 0)
- return -1;
- sum += count;
- break;
- case XML_TEXTWRITER_TEXT:
- if ((writer->indent) && (writer->doindent)) {
- count = xmlTextWriterWriteIndent(writer);
- sum += count;
- writer->doindent = 1;
- } else
- writer->doindent = 1;
- count = xmlOutputBufferWriteString(writer->out, "</");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out,
- (const char *) p->name);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- return -1;
- }
-
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- sum += count;
- }
-
- xmlListPopFront(writer->nodes);
- return sum;
-}
-
-/**
- * xmlTextWriterFullEndElement:
- * @writer: the xmlTextWriterPtr
- *
- * End the current xml element. Writes an end tag even if the element is empty
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterFullEndElement(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- lk = xmlListFront(writer->nodes);
- if (lk == 0)
- return -1;
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return -1;
-
- sum = 0;
- switch (p->state) {
- case XML_TEXTWRITER_ATTRIBUTE:
- count = xmlTextWriterEndAttribute(writer);
- if (count < 0)
- return -1;
- sum += count;
- /* fallthrough */
- case XML_TEXTWRITER_NAME:
- /* Output namespace declarations */
- count = xmlTextWriterOutputNSDecl(writer);
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- if (writer->indent)
- writer->doindent = 0;
- /* fallthrough */
- case XML_TEXTWRITER_TEXT:
- if ((writer->indent) && (writer->doindent)) {
- count = xmlTextWriterWriteIndent(writer);
- sum += count;
- writer->doindent = 1;
- } else
- writer->doindent = 1;
- count = xmlOutputBufferWriteString(writer->out, "</");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out,
- (const char *) p->name);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- return -1;
- }
-
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- sum += count;
- }
-
- xmlListPopFront(writer->nodes);
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatRaw:
- * @writer: the xmlTextWriterPtr
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted raw xml text.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer, const char *format,
- ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatRaw(writer, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatRaw:
- * @writer: the xmlTextWriterPtr
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted raw xml text.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer, const char *format,
- va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteRaw(writer, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteRawLen:
- * @writer: the xmlTextWriterPtr
- * @content: text string
- * @len: length of the text string
- *
- * Write an xml text.
- * TODO: what about entities and special chars??
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteRawLen(xmlTextWriterPtr writer, const xmlChar * content,
- int len)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteRawLen : invalid writer!\n");
- return -1;
- }
-
- if ((content == NULL) || (len < 0)) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteRawLen : invalid content!\n");
- return -1;
- }
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- count = xmlTextWriterHandleStateDependencies(writer, p);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- if (writer->indent)
- writer->doindent = 0;
-
- if (content != NULL) {
- count =
- xmlOutputBufferWrite(writer->out, len, (const char *) content);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteRaw:
- * @writer: the xmlTextWriterPtr
- * @content: text string
- *
- * Write a raw xml text.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteRaw(xmlTextWriterPtr writer, const xmlChar * content)
-{
- return xmlTextWriterWriteRawLen(writer, content, xmlStrlen(content));
-}
-
-/**
- * xmlTextWriterWriteFormatString:
- * @writer: the xmlTextWriterPtr
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted xml text.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatString(xmlTextWriterPtr writer, const char *format,
- ...)
-{
- int rc;
- va_list ap;
-
- if ((writer == NULL) || (format == NULL))
- return -1;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatString(writer, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatString:
- * @writer: the xmlTextWriterPtr
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted xml text.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatString(xmlTextWriterPtr writer,
- const char *format, va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if ((writer == NULL) || (format == NULL))
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteString(writer, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteString:
- * @writer: the xmlTextWriterPtr
- * @content: text string
- *
- * Write an xml text.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteString(xmlTextWriterPtr writer, const xmlChar * content)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
- xmlChar *buf;
-
- if ((writer == NULL) || (content == NULL))
- return -1;
-
- sum = 0;
- buf = (xmlChar *) content;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_NAME:
- case XML_TEXTWRITER_TEXT:
-#if 0
- buf = NULL;
- xmlOutputBufferWriteEscape(writer->out, content, NULL);
-#endif
- buf = xmlEncodeSpecialChars(NULL, content);
- break;
- case XML_TEXTWRITER_ATTRIBUTE:
- buf = NULL;
- xmlBufAttrSerializeTxtContent(writer->out->buffer,
- writer->doc, NULL, content);
- break;
- default:
- break;
- }
- }
- }
-
- if (buf != NULL) {
- count = xmlTextWriterWriteRaw(writer, buf);
-
- if (buf != content) /* buf was allocated by us, so free it */
- xmlFree(buf);
-
- if (count < 0)
- return -1;
- sum += count;
- }
-
- return sum;
-}
-
-/**
- * xmlOutputBufferWriteBase64:
- * @out: the xmlOutputBufferPtr
- * @data: binary data
- * @len: the number of bytes to encode
- *
- * Write base64 encoded data to an xmlOutputBuffer.
- * Adapted from John Walker's base64.c (http://www.fourmilab.ch/).
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-static int
-xmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len,
- const unsigned char *data)
-{
- static unsigned char dtable[64] =
- {'A','B','C','D','E','F','G','H','I','J','K','L','M',
- 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
- 'a','b','c','d','e','f','g','h','i','j','k','l','m',
- 'n','o','p','q','r','s','t','u','v','w','x','y','z',
- '0','1','2','3','4','5','6','7','8','9','+','/'};
-
- int i;
- int linelen;
- int count;
- int sum;
-
- if ((out == NULL) || (len < 0) || (data == NULL))
- return(-1);
-
- linelen = 0;
- sum = 0;
-
- i = 0;
- while (1) {
- unsigned char igroup[3];
- unsigned char ogroup[4];
- int c;
- int n;
-
- igroup[0] = igroup[1] = igroup[2] = 0;
- for (n = 0; n < 3 && i < len; n++, i++) {
- c = data[i];
- igroup[n] = (unsigned char) c;
- }
-
- if (n > 0) {
- ogroup[0] = dtable[igroup[0] >> 2];
- ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)];
- ogroup[2] =
- dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)];
- ogroup[3] = dtable[igroup[2] & 0x3F];
-
- if (n < 3) {
- ogroup[3] = '=';
- if (n < 2) {
- ogroup[2] = '=';
- }
- }
-
- if (linelen >= B64LINELEN) {
- count = xmlOutputBufferWrite(out, 2, B64CRLF);
- if (count == -1)
- return -1;
- sum += count;
- linelen = 0;
- }
- count = xmlOutputBufferWrite(out, 4, (const char *) ogroup);
- if (count == -1)
- return -1;
- sum += count;
-
- linelen += 4;
- }
-
- if (i >= len)
- break;
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteBase64:
- * @writer: the xmlTextWriterPtr
- * @data: binary data
- * @start: the position within the data of the first byte to encode
- * @len: the number of bytes to encode
- *
- * Write an base64 encoded xml text.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteBase64(xmlTextWriterPtr writer, const char *data,
- int start, int len)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if ((writer == NULL) || (data == NULL) || (start < 0) || (len < 0))
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- count = xmlTextWriterHandleStateDependencies(writer, p);
- if (count < 0)
- return -1;
- sum += count;
- }
- }
-
- if (writer->indent)
- writer->doindent = 0;
-
- count =
- xmlOutputBufferWriteBase64(writer->out, len,
- (unsigned char *) data + start);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlOutputBufferWriteBinHex:
- * @out: the xmlOutputBufferPtr
- * @data: binary data
- * @len: the number of bytes to encode
- *
- * Write hqx encoded data to an xmlOutputBuffer.
- * ::todo
- *
- * Returns the bytes written (may be 0 because of buffering)
- * or -1 in case of error
- */
-static int
-xmlOutputBufferWriteBinHex(xmlOutputBufferPtr out,
- int len, const unsigned char *data)
-{
- int count;
- int sum;
- static char hex[16] =
- {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
- int i;
-
- if ((out == NULL) || (data == NULL) || (len < 0)) {
- return -1;
- }
-
- sum = 0;
- for (i = 0; i < len; i++) {
- count =
- xmlOutputBufferWrite(out, 1,
- (const char *) &hex[data[i] >> 4]);
- if (count == -1)
- return -1;
- sum += count;
- count =
- xmlOutputBufferWrite(out, 1,
- (const char *) &hex[data[i] & 0xF]);
- if (count == -1)
- return -1;
- sum += count;
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteBinHex:
- * @writer: the xmlTextWriterPtr
- * @data: binary data
- * @start: the position within the data of the first byte to encode
- * @len: the number of bytes to encode
- *
- * Write a BinHex encoded xml text.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteBinHex(xmlTextWriterPtr writer, const char *data,
- int start, int len)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if ((writer == NULL) || (data == NULL) || (start < 0) || (len < 0))
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- count = xmlTextWriterHandleStateDependencies(writer, p);
- if (count < 0)
- return -1;
- sum += count;
- }
- }
-
- if (writer->indent)
- writer->doindent = 0;
-
- count =
- xmlOutputBufferWriteBinHex(writer->out, len,
- (unsigned char *) data + start);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartAttribute:
- * @writer: the xmlTextWriterPtr
- * @name: element name
- *
- * Start an xml attribute.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartAttribute(xmlTextWriterPtr writer, const xmlChar * name)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if ((writer == NULL) || (name == NULL) || (*name == '\0'))
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk == 0)
- return -1;
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return -1;
-
- switch (p->state) {
- case XML_TEXTWRITER_ATTRIBUTE:
- count = xmlTextWriterEndAttribute(writer);
- if (count < 0)
- return -1;
- sum += count;
- /* fallthrough */
- case XML_TEXTWRITER_NAME:
- count = xmlOutputBufferWriteString(writer->out, " ");
- if (count < 0)
- return -1;
- sum += count;
- count =
- xmlOutputBufferWriteString(writer->out,
- (const char *) name);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, "=");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- p->state = XML_TEXTWRITER_ATTRIBUTE;
- break;
- default:
- return -1;
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartAttributeNS:
- * @writer: the xmlTextWriterPtr
- * @prefix: namespace prefix or NULL
- * @name: element local name
- * @namespaceURI: namespace URI or NULL
- *
- * Start an xml attribute with namespace support.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartAttributeNS(xmlTextWriterPtr writer,
- const xmlChar * prefix, const xmlChar * name,
- const xmlChar * namespaceURI)
-{
- int count;
- int sum;
- xmlChar *buf;
- xmlTextWriterNsStackEntry *p;
-
- if ((writer == NULL) || (name == NULL) || (*name == '\0'))
- return -1;
-
- /* Handle namespace first in case of error */
- if (namespaceURI != 0) {
- xmlTextWriterNsStackEntry nsentry, *curns;
-
- buf = xmlStrdup(BAD_CAST "xmlns");
- if (prefix != 0) {
- buf = xmlStrcat(buf, BAD_CAST ":");
- buf = xmlStrcat(buf, prefix);
- }
-
- nsentry.prefix = buf;
- nsentry.uri = (xmlChar *)namespaceURI;
- nsentry.elem = xmlListFront(writer->nodes);
-
- curns = (xmlTextWriterNsStackEntry *)xmlListSearch(writer->nsstack,
- (void *)&nsentry);
- if ((curns != NULL)) {
- xmlFree(buf);
- if (xmlStrcmp(curns->uri, namespaceURI) == 0) {
- /* Namespace already defined on element skip */
- buf = NULL;
- } else {
- /* Prefix mismatch so error out */
- return -1;
- }
- }
-
- /* Do not add namespace decl to list - it is already there */
- if (buf != NULL) {
- p = (xmlTextWriterNsStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterNsStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartAttributeNS : out of memory!\n");
- return -1;
- }
-
- p->prefix = buf;
- p->uri = xmlStrdup(namespaceURI);
- if (p->uri == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartAttributeNS : out of memory!\n");
- xmlFree(p);
- return -1;
- }
- p->elem = xmlListFront(writer->nodes);
-
- xmlListPushFront(writer->nsstack, p);
- }
- }
-
- buf = NULL;
- if (prefix != 0) {
- buf = xmlStrdup(prefix);
- buf = xmlStrcat(buf, BAD_CAST ":");
- }
- buf = xmlStrcat(buf, name);
-
- sum = 0;
- count = xmlTextWriterStartAttribute(writer, buf);
- xmlFree(buf);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndAttribute:
- * @writer: the xmlTextWriterPtr
- *
- * End the current xml element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndAttribute(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- lk = xmlListFront(writer->nodes);
- if (lk == 0) {
- return -1;
- }
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0) {
- return -1;
- }
-
- sum = 0;
- switch (p->state) {
- case XML_TEXTWRITER_ATTRIBUTE:
- p->state = XML_TEXTWRITER_NAME;
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0) {
- return -1;
- }
- sum += count;
- break;
- default:
- return -1;
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatAttribute:
- * @writer: the xmlTextWriterPtr
- * @name: attribute name
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted xml attribute.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
- const xmlChar * name, const char *format,
- ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatAttribute(writer, name, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatAttribute:
- * @writer: the xmlTextWriterPtr
- * @name: attribute name
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted xml attribute.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteAttribute(writer, name, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteAttribute:
- * @writer: the xmlTextWriterPtr
- * @name: attribute name
- * @content: attribute content
- *
- * Write an xml attribute.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteAttribute(xmlTextWriterPtr writer, const xmlChar * name,
- const xmlChar * content)
-{
- int count;
- int sum;
-
- sum = 0;
- count = xmlTextWriterStartAttribute(writer, name);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlTextWriterWriteString(writer, content);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlTextWriterEndAttribute(writer);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatAttributeNS:
- * @writer: the xmlTextWriterPtr
- * @prefix: namespace prefix
- * @name: attribute local name
- * @namespaceURI: namespace URI
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted xml attribute.with namespace support
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
- const xmlChar * prefix,
- const xmlChar * name,
- const xmlChar * namespaceURI,
- const char *format, ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatAttributeNS(writer, prefix, name,
- namespaceURI, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatAttributeNS:
- * @writer: the xmlTextWriterPtr
- * @prefix: namespace prefix
- * @name: attribute local name
- * @namespaceURI: namespace URI
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted xml attribute.with namespace support
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer,
- const xmlChar * prefix,
- const xmlChar * name,
- const xmlChar * namespaceURI,
- const char *format, va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteAttributeNS(writer, prefix, name, namespaceURI,
- buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteAttributeNS:
- * @writer: the xmlTextWriterPtr
- * @prefix: namespace prefix
- * @name: attribute local name
- * @namespaceURI: namespace URI
- * @content: attribute content
- *
- * Write an xml attribute.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteAttributeNS(xmlTextWriterPtr writer,
- const xmlChar * prefix, const xmlChar * name,
- const xmlChar * namespaceURI,
- const xmlChar * content)
-{
- int count;
- int sum;
-
- if ((writer == NULL) || (name == NULL) || (*name == '\0'))
- return -1;
-
- sum = 0;
- count = xmlTextWriterStartAttributeNS(writer, prefix, name, namespaceURI);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlTextWriterWriteString(writer, content);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlTextWriterEndAttribute(writer);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatElement:
- * @writer: the xmlTextWriterPtr
- * @name: element name
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted xml element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatElement(xmlTextWriterPtr writer,
- const xmlChar * name, const char *format,
- ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatElement(writer, name, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatElement:
- * @writer: the xmlTextWriterPtr
- * @name: element name
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted xml element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer,
- const xmlChar * name, const char *format,
- va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteElement(writer, name, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteElement:
- * @writer: the xmlTextWriterPtr
- * @name: element name
- * @content: element content
- *
- * Write an xml element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteElement(xmlTextWriterPtr writer, const xmlChar * name,
- const xmlChar * content)
-{
- int count;
- int sum;
-
- sum = 0;
- count = xmlTextWriterStartElement(writer, name);
- if (count == -1)
- return -1;
- sum += count;
- if (content != NULL) {
- count = xmlTextWriterWriteString(writer, content);
- if (count == -1)
- return -1;
- sum += count;
- }
- count = xmlTextWriterEndElement(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatElementNS:
- * @writer: the xmlTextWriterPtr
- * @prefix: namespace prefix
- * @name: element local name
- * @namespaceURI: namespace URI
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted xml element with namespace support.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
- const xmlChar * prefix,
- const xmlChar * name,
- const xmlChar * namespaceURI,
- const char *format, ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatElementNS(writer, prefix, name,
- namespaceURI, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatElementNS:
- * @writer: the xmlTextWriterPtr
- * @prefix: namespace prefix
- * @name: element local name
- * @namespaceURI: namespace URI
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted xml element with namespace support.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer,
- const xmlChar * prefix,
- const xmlChar * name,
- const xmlChar * namespaceURI,
- const char *format, va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteElementNS(writer, prefix, name, namespaceURI,
- buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteElementNS:
- * @writer: the xmlTextWriterPtr
- * @prefix: namespace prefix
- * @name: element local name
- * @namespaceURI: namespace URI
- * @content: element content
- *
- * Write an xml element with namespace support.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteElementNS(xmlTextWriterPtr writer,
- const xmlChar * prefix, const xmlChar * name,
- const xmlChar * namespaceURI,
- const xmlChar * content)
-{
- int count;
- int sum;
-
- if ((writer == NULL) || (name == NULL) || (*name == '\0'))
- return -1;
-
- sum = 0;
- count =
- xmlTextWriterStartElementNS(writer, prefix, name, namespaceURI);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlTextWriterWriteString(writer, content);
- if (count == -1)
- return -1;
- sum += count;
- count = xmlTextWriterEndElement(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartPI:
- * @writer: the xmlTextWriterPtr
- * @target: PI target
- *
- * Start an xml PI.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartPI(xmlTextWriterPtr writer, const xmlChar * target)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if ((writer == NULL) || (target == NULL) || (*target == '\0'))
- return -1;
-
- if (xmlStrcasecmp(target, (const xmlChar *) "xml") == 0) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterStartPI : target name [Xx][Mm][Ll] is reserved for xml standardization!\n");
- return -1;
- }
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_ATTRIBUTE:
- count = xmlTextWriterEndAttribute(writer);
- if (count < 0)
- return -1;
- sum += count;
- /* fallthrough */
- case XML_TEXTWRITER_NAME:
- /* Output namespace declarations */
- count = xmlTextWriterOutputNSDecl(writer);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- p->state = XML_TEXTWRITER_TEXT;
- break;
- case XML_TEXTWRITER_NONE:
- case XML_TEXTWRITER_TEXT:
- case XML_TEXTWRITER_DTD:
- break;
- case XML_TEXTWRITER_PI:
- case XML_TEXTWRITER_PI_TEXT:
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterStartPI : nested PI!\n");
- return -1;
- default:
- return -1;
- }
- }
- }
-
- p = (xmlTextWriterStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartPI : out of memory!\n");
- return -1;
- }
-
- p->name = xmlStrdup(target);
- if (p->name == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartPI : out of memory!\n");
- xmlFree(p);
- return -1;
- }
- p->state = XML_TEXTWRITER_PI;
-
- xmlListPushFront(writer->nodes, p);
-
- count = xmlOutputBufferWriteString(writer->out, "<?");
- if (count < 0)
- return -1;
- sum += count;
- count =
- xmlOutputBufferWriteString(writer->out, (const char *) p->name);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndPI:
- * @writer: the xmlTextWriterPtr
- *
- * End the current xml PI.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndPI(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- lk = xmlListFront(writer->nodes);
- if (lk == 0)
- return 0;
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return 0;
-
- sum = 0;
- switch (p->state) {
- case XML_TEXTWRITER_PI:
- case XML_TEXTWRITER_PI_TEXT:
- count = xmlOutputBufferWriteString(writer->out, "?>");
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- return -1;
- }
-
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- xmlListPopFront(writer->nodes);
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatPI:
- * @writer: the xmlTextWriterPtr
- * @target: PI target
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted PI.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatPI(xmlTextWriterPtr writer, const xmlChar * target,
- const char *format, ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatPI(writer, target, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatPI:
- * @writer: the xmlTextWriterPtr
- * @target: PI target
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted xml PI.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer,
- const xmlChar * target, const char *format,
- va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWritePI(writer, target, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWritePI:
- * @writer: the xmlTextWriterPtr
- * @target: PI target
- * @content: PI content
- *
- * Write an xml PI.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWritePI(xmlTextWriterPtr writer, const xmlChar * target,
- const xmlChar * content)
-{
- int count;
- int sum;
-
- sum = 0;
- count = xmlTextWriterStartPI(writer, target);
- if (count == -1)
- return -1;
- sum += count;
- if (content != 0) {
- count = xmlTextWriterWriteString(writer, content);
- if (count == -1)
- return -1;
- sum += count;
- }
- count = xmlTextWriterEndPI(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartCDATA:
- * @writer: the xmlTextWriterPtr
- *
- * Start an xml CDATA section.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartCDATA(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_NONE:
- case XML_TEXTWRITER_TEXT:
- case XML_TEXTWRITER_PI:
- case XML_TEXTWRITER_PI_TEXT:
- break;
- case XML_TEXTWRITER_ATTRIBUTE:
- count = xmlTextWriterEndAttribute(writer);
- if (count < 0)
- return -1;
- sum += count;
- /* fallthrough */
- case XML_TEXTWRITER_NAME:
- /* Output namespace declarations */
- count = xmlTextWriterOutputNSDecl(writer);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- p->state = XML_TEXTWRITER_TEXT;
- break;
- case XML_TEXTWRITER_CDATA:
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterStartCDATA : CDATA not allowed in this context!\n");
- return -1;
- default:
- return -1;
- }
- }
- }
-
- p = (xmlTextWriterStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartCDATA : out of memory!\n");
- return -1;
- }
-
- p->name = NULL;
- p->state = XML_TEXTWRITER_CDATA;
-
- xmlListPushFront(writer->nodes, p);
-
- count = xmlOutputBufferWriteString(writer->out, "<![CDATA[");
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndCDATA:
- * @writer: the xmlTextWriterPtr
- *
- * End an xml CDATA section.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndCDATA(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- lk = xmlListFront(writer->nodes);
- if (lk == 0)
- return -1;
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return -1;
-
- sum = 0;
- switch (p->state) {
- case XML_TEXTWRITER_CDATA:
- count = xmlOutputBufferWriteString(writer->out, "]]>");
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- return -1;
- }
-
- xmlListPopFront(writer->nodes);
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatCDATA:
- * @writer: the xmlTextWriterPtr
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted xml CDATA.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer, const char *format,
- ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatCDATA(writer, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatCDATA:
- * @writer: the xmlTextWriterPtr
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted xml CDATA.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer, const char *format,
- va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteCDATA(writer, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteCDATA:
- * @writer: the xmlTextWriterPtr
- * @content: CDATA content
- *
- * Write an xml CDATA.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteCDATA(xmlTextWriterPtr writer, const xmlChar * content)
-{
- int count;
- int sum;
-
- sum = 0;
- count = xmlTextWriterStartCDATA(writer);
- if (count == -1)
- return -1;
- sum += count;
- if (content != 0) {
- count = xmlTextWriterWriteString(writer, content);
- if (count == -1)
- return -1;
- sum += count;
- }
- count = xmlTextWriterEndCDATA(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartDTD:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD
- * @pubid: the public identifier, which is an alternative to the system identifier
- * @sysid: the system identifier, which is the URI of the DTD
- *
- * Start an xml DTD.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartDTD(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid, const xmlChar * sysid)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL || name == NULL || *name == '\0')
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if ((lk != NULL) && (xmlLinkGetData(lk) != NULL)) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterStartDTD : DTD allowed only in prolog!\n");
- return -1;
- }
-
- p = (xmlTextWriterStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDTD : out of memory!\n");
- return -1;
- }
-
- p->name = xmlStrdup(name);
- if (p->name == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDTD : out of memory!\n");
- xmlFree(p);
- return -1;
- }
- p->state = XML_TEXTWRITER_DTD;
-
- xmlListPushFront(writer->nodes, p);
-
- count = xmlOutputBufferWriteString(writer->out, "<!DOCTYPE ");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, (const char *) name);
- if (count < 0)
- return -1;
- sum += count;
-
- if (pubid != 0) {
- if (sysid == 0) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterStartDTD : system identifier needed!\n");
- return -1;
- }
-
- if (writer->indent)
- count = xmlOutputBufferWrite(writer->out, 1, "\n");
- else
- count = xmlOutputBufferWrite(writer->out, 1, " ");
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWriteString(writer->out, "PUBLIC ");
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
-
- count =
- xmlOutputBufferWriteString(writer->out, (const char *) pubid);
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- if (sysid != 0) {
- if (pubid == 0) {
- if (writer->indent)
- count = xmlOutputBufferWrite(writer->out, 1, "\n");
- else
- count = xmlOutputBufferWrite(writer->out, 1, " ");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, "SYSTEM ");
- if (count < 0)
- return -1;
- sum += count;
- } else {
- if (writer->indent)
- count = xmlOutputBufferWriteString(writer->out, "\n ");
- else
- count = xmlOutputBufferWrite(writer->out, 1, " ");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
-
- count =
- xmlOutputBufferWriteString(writer->out, (const char *) sysid);
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndDTD:
- * @writer: the xmlTextWriterPtr
- *
- * End an xml DTD.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndDTD(xmlTextWriterPtr writer)
-{
- int loop;
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- sum = 0;
- loop = 1;
- while (loop) {
- lk = xmlListFront(writer->nodes);
- if (lk == NULL)
- break;
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- break;
- switch (p->state) {
- case XML_TEXTWRITER_DTD_TEXT:
- count = xmlOutputBufferWriteString(writer->out, "]");
- if (count < 0)
- return -1;
- sum += count;
- /* fallthrough */
- case XML_TEXTWRITER_DTD:
- count = xmlOutputBufferWriteString(writer->out, ">");
-
- if (writer->indent) {
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, "\n");
- }
-
- xmlListPopFront(writer->nodes);
- break;
- case XML_TEXTWRITER_DTD_ELEM:
- case XML_TEXTWRITER_DTD_ELEM_TEXT:
- count = xmlTextWriterEndDTDElement(writer);
- break;
- case XML_TEXTWRITER_DTD_ATTL:
- case XML_TEXTWRITER_DTD_ATTL_TEXT:
- count = xmlTextWriterEndDTDAttlist(writer);
- break;
- case XML_TEXTWRITER_DTD_ENTY:
- case XML_TEXTWRITER_DTD_PENT:
- case XML_TEXTWRITER_DTD_ENTY_TEXT:
- count = xmlTextWriterEndDTDEntity(writer);
- break;
- case XML_TEXTWRITER_COMMENT:
- count = xmlTextWriterEndComment(writer);
- break;
- default:
- loop = 0;
- continue;
- }
-
- if (count < 0)
- return -1;
- sum += count;
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatDTD:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD
- * @pubid: the public identifier, which is an alternative to the system identifier
- * @sysid: the system identifier, which is the URI of the DTD
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a DTD with a formatted markup declarations part.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid, const char *format, ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatDTD(writer, name, pubid, sysid, format,
- ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatDTD:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD
- * @pubid: the public identifier, which is an alternative to the system identifier
- * @sysid: the system identifier, which is the URI of the DTD
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a DTD with a formatted markup declarations part.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const char *format, va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteDTD(writer, name, pubid, sysid, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteDTD:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD
- * @pubid: the public identifier, which is an alternative to the system identifier
- * @sysid: the system identifier, which is the URI of the DTD
- * @subset: string content of the DTD
- *
- * Write a DTD.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteDTD(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid, const xmlChar * subset)
-{
- int count;
- int sum;
-
- sum = 0;
- count = xmlTextWriterStartDTD(writer, name, pubid, sysid);
- if (count == -1)
- return -1;
- sum += count;
- if (subset != 0) {
- count = xmlTextWriterWriteString(writer, subset);
- if (count == -1)
- return -1;
- sum += count;
- }
- count = xmlTextWriterEndDTD(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartDTDElement:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD element
- *
- * Start an xml DTD element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartDTDElement(xmlTextWriterPtr writer, const xmlChar * name)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL || name == NULL || *name == '\0')
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk == 0) {
- return -1;
- }
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_DTD:
- count = xmlOutputBufferWriteString(writer->out, " [");
- if (count < 0)
- return -1;
- sum += count;
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
- p->state = XML_TEXTWRITER_DTD_TEXT;
- /* fallthrough */
- case XML_TEXTWRITER_DTD_TEXT:
- case XML_TEXTWRITER_NONE:
- break;
- default:
- return -1;
- }
- }
-
- p = (xmlTextWriterStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDTDElement : out of memory!\n");
- return -1;
- }
-
- p->name = xmlStrdup(name);
- if (p->name == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDTDElement : out of memory!\n");
- xmlFree(p);
- return -1;
- }
- p->state = XML_TEXTWRITER_DTD_ELEM;
-
- xmlListPushFront(writer->nodes, p);
-
- if (writer->indent) {
- count = xmlTextWriterWriteIndent(writer);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, "<!ELEMENT ");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, (const char *) name);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndDTDElement:
- * @writer: the xmlTextWriterPtr
- *
- * End an xml DTD element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndDTDElement(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk == 0)
- return -1;
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return -1;
-
- switch (p->state) {
- case XML_TEXTWRITER_DTD_ELEM:
- case XML_TEXTWRITER_DTD_ELEM_TEXT:
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- return -1;
- }
-
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- xmlListPopFront(writer->nodes);
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatDTDElement:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD element
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted DTD element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatDTDElement(writer, name, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatDTDElement:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD element
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted DTD element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteDTDElement(writer, name, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteDTDElement:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD element
- * @content: content of the element
- *
- * Write a DTD element.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteDTDElement(xmlTextWriterPtr writer,
- const xmlChar * name, const xmlChar * content)
-{
- int count;
- int sum;
-
- if (content == NULL)
- return -1;
-
- sum = 0;
- count = xmlTextWriterStartDTDElement(writer, name);
- if (count == -1)
- return -1;
- sum += count;
-
- count = xmlTextWriterWriteString(writer, content);
- if (count == -1)
- return -1;
- sum += count;
-
- count = xmlTextWriterEndDTDElement(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartDTDAttlist:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD ATTLIST
- *
- * Start an xml DTD ATTLIST.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer, const xmlChar * name)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL || name == NULL || *name == '\0')
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk == 0) {
- return -1;
- }
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_DTD:
- count = xmlOutputBufferWriteString(writer->out, " [");
- if (count < 0)
- return -1;
- sum += count;
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
- p->state = XML_TEXTWRITER_DTD_TEXT;
- /* fallthrough */
- case XML_TEXTWRITER_DTD_TEXT:
- case XML_TEXTWRITER_NONE:
- break;
- default:
- return -1;
- }
- }
-
- p = (xmlTextWriterStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDTDAttlist : out of memory!\n");
- return -1;
- }
-
- p->name = xmlStrdup(name);
- if (p->name == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDTDAttlist : out of memory!\n");
- xmlFree(p);
- return -1;
- }
- p->state = XML_TEXTWRITER_DTD_ATTL;
-
- xmlListPushFront(writer->nodes, p);
-
- if (writer->indent) {
- count = xmlTextWriterWriteIndent(writer);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, "<!ATTLIST ");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, (const char *) name);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndDTDAttlist:
- * @writer: the xmlTextWriterPtr
- *
- * End an xml DTD attribute list.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndDTDAttlist(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk == 0)
- return -1;
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return -1;
-
- switch (p->state) {
- case XML_TEXTWRITER_DTD_ATTL:
- case XML_TEXTWRITER_DTD_ATTL_TEXT:
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- return -1;
- }
-
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- xmlListPopFront(writer->nodes);
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatDTDAttlist:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD ATTLIST
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted DTD ATTLIST.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatDTDAttlist(writer, name, format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatDTDAttlist:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD ATTLIST
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted DTD ATTLIST.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer,
- const xmlChar * name,
- const char *format, va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteDTDAttlist(writer, name, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteDTDAttlist:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the DTD ATTLIST
- * @content: content of the ATTLIST
- *
- * Write a DTD ATTLIST.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteDTDAttlist(xmlTextWriterPtr writer,
- const xmlChar * name, const xmlChar * content)
-{
- int count;
- int sum;
-
- if (content == NULL)
- return -1;
-
- sum = 0;
- count = xmlTextWriterStartDTDAttlist(writer, name);
- if (count == -1)
- return -1;
- sum += count;
-
- count = xmlTextWriterWriteString(writer, content);
- if (count == -1)
- return -1;
- sum += count;
-
- count = xmlTextWriterEndDTDAttlist(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterStartDTDEntity:
- * @writer: the xmlTextWriterPtr
- * @pe: TRUE if this is a parameter entity, FALSE if not
- * @name: the name of the DTD ATTLIST
- *
- * Start an xml DTD ATTLIST.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterStartDTDEntity(xmlTextWriterPtr writer,
- int pe, const xmlChar * name)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL || name == NULL || *name == '\0')
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk != 0) {
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_DTD:
- count = xmlOutputBufferWriteString(writer->out, " [");
- if (count < 0)
- return -1;
- sum += count;
- if (writer->indent) {
- count =
- xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
- p->state = XML_TEXTWRITER_DTD_TEXT;
- /* fallthrough */
- case XML_TEXTWRITER_DTD_TEXT:
- case XML_TEXTWRITER_NONE:
- break;
- default:
- return -1;
- }
- }
- }
-
- p = (xmlTextWriterStackEntry *)
- xmlMalloc(sizeof(xmlTextWriterStackEntry));
- if (p == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDTDElement : out of memory!\n");
- return -1;
- }
-
- p->name = xmlStrdup(name);
- if (p->name == 0) {
- xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY,
- "xmlTextWriterStartDTDElement : out of memory!\n");
- xmlFree(p);
- return -1;
- }
-
- if (pe != 0)
- p->state = XML_TEXTWRITER_DTD_PENT;
- else
- p->state = XML_TEXTWRITER_DTD_ENTY;
-
- xmlListPushFront(writer->nodes, p);
-
- if (writer->indent) {
- count = xmlTextWriterWriteIndent(writer);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, "<!ENTITY ");
- if (count < 0)
- return -1;
- sum += count;
-
- if (pe != 0) {
- count = xmlOutputBufferWriteString(writer->out, "% ");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, (const char *) name);
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterEndDTDEntity:
- * @writer: the xmlTextWriterPtr
- *
- * End an xml DTD entity.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterEndDTDEntity(xmlTextWriterPtr writer)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL)
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk == 0)
- return -1;
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return -1;
-
- switch (p->state) {
- case XML_TEXTWRITER_DTD_ENTY_TEXT:
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- case XML_TEXTWRITER_DTD_ENTY:
- case XML_TEXTWRITER_DTD_PENT:
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
- break;
- default:
- return -1;
- }
-
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- xmlListPopFront(writer->nodes);
- return sum;
-}
-
-/**
- * xmlTextWriterWriteFormatDTDInternalEntity:
- * @writer: the xmlTextWriterPtr
- * @pe: TRUE if this is a parameter entity, FALSE if not
- * @name: the name of the DTD entity
- * @format: format string (see printf)
- * @...: extra parameters for the format
- *
- * Write a formatted DTD internal entity.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int XMLCDECL
-xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const char *format, ...)
-{
- int rc;
- va_list ap;
-
- va_start(ap, format);
-
- rc = xmlTextWriterWriteVFormatDTDInternalEntity(writer, pe, name,
- format, ap);
-
- va_end(ap);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteVFormatDTDInternalEntity:
- * @writer: the xmlTextWriterPtr
- * @pe: TRUE if this is a parameter entity, FALSE if not
- * @name: the name of the DTD entity
- * @format: format string (see printf)
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Write a formatted DTD internal entity.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const char *format,
- va_list argptr)
-{
- int rc;
- xmlChar *buf;
-
- if (writer == NULL)
- return -1;
-
- buf = xmlTextWriterVSprintf(format, argptr);
- if (buf == NULL)
- return -1;
-
- rc = xmlTextWriterWriteDTDInternalEntity(writer, pe, name, buf);
-
- xmlFree(buf);
- return rc;
-}
-
-/**
- * xmlTextWriterWriteDTDEntity:
- * @writer: the xmlTextWriterPtr
- * @pe: TRUE if this is a parameter entity, FALSE if not
- * @name: the name of the DTD entity
- * @pubid: the public identifier, which is an alternative to the system identifier
- * @sysid: the system identifier, which is the URI of the DTD
- * @ndataid: the xml notation name.
- * @content: content of the entity
- *
- * Write a DTD entity.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteDTDEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const xmlChar * ndataid,
- const xmlChar * content)
-{
- if ((content == NULL) && (pubid == NULL) && (sysid == NULL))
- return -1;
- if ((pe != 0) && (ndataid != NULL))
- return -1;
-
- if ((pubid == NULL) && (sysid == NULL))
- return xmlTextWriterWriteDTDInternalEntity(writer, pe, name,
- content);
-
- return xmlTextWriterWriteDTDExternalEntity(writer, pe, name, pubid,
- sysid, ndataid);
-}
-
-/**
- * xmlTextWriterWriteDTDInternalEntity:
- * @writer: the xmlTextWriterPtr
- * @pe: TRUE if this is a parameter entity, FALSE if not
- * @name: the name of the DTD entity
- * @content: content of the entity
- *
- * Write a DTD internal entity.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const xmlChar * content)
-{
- int count;
- int sum;
-
- if ((name == NULL) || (*name == '\0') || (content == NULL))
- return -1;
-
- sum = 0;
- count = xmlTextWriterStartDTDEntity(writer, pe, name);
- if (count == -1)
- return -1;
- sum += count;
-
- count = xmlTextWriterWriteString(writer, content);
- if (count == -1)
- return -1;
- sum += count;
-
- count = xmlTextWriterEndDTDEntity(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteDTDExternalEntity:
- * @writer: the xmlTextWriterPtr
- * @pe: TRUE if this is a parameter entity, FALSE if not
- * @name: the name of the DTD entity
- * @pubid: the public identifier, which is an alternative to the system identifier
- * @sysid: the system identifier, which is the URI of the DTD
- * @ndataid: the xml notation name.
- *
- * Write a DTD external entity. The entity must have been started with xmlTextWriterStartDTDEntity
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer,
- int pe,
- const xmlChar * name,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const xmlChar * ndataid)
-{
- int count;
- int sum;
-
- if (((pubid == NULL) && (sysid == NULL)))
- return -1;
- if ((pe != 0) && (ndataid != NULL))
- return -1;
-
- sum = 0;
- count = xmlTextWriterStartDTDEntity(writer, pe, name);
- if (count == -1)
- return -1;
- sum += count;
-
- count =
- xmlTextWriterWriteDTDExternalEntityContents(writer, pubid, sysid,
- ndataid);
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlTextWriterEndDTDEntity(writer);
- if (count == -1)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteDTDExternalEntityContents:
- * @writer: the xmlTextWriterPtr
- * @pubid: the public identifier, which is an alternative to the system identifier
- * @sysid: the system identifier, which is the URI of the DTD
- * @ndataid: the xml notation name.
- *
- * Write the contents of a DTD external entity.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr writer,
- const xmlChar * pubid,
- const xmlChar * sysid,
- const xmlChar * ndataid)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteDTDExternalEntityContents: xmlTextWriterPtr invalid!\n");
- return -1;
- }
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk == 0) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteDTDExternalEntityContents: you must call xmlTextWriterStartDTDEntity before the call to this function!\n");
- return -1;
- }
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return -1;
-
- switch (p->state) {
- case XML_TEXTWRITER_DTD_ENTY:
- break;
- case XML_TEXTWRITER_DTD_PENT:
- if (ndataid != NULL) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteDTDExternalEntityContents: notation not allowed with parameter entities!\n");
- return -1;
- }
- break;
- default:
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteDTDExternalEntityContents: you must call xmlTextWriterStartDTDEntity before the call to this function!\n");
- return -1;
- }
-
- if (pubid != 0) {
- if (sysid == 0) {
- xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteDTDExternalEntityContents: system identifier needed!\n");
- return -1;
- }
-
- count = xmlOutputBufferWriteString(writer->out, " PUBLIC ");
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
-
- count =
- xmlOutputBufferWriteString(writer->out, (const char *) pubid);
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- if (sysid != 0) {
- if (pubid == 0) {
- count = xmlOutputBufferWriteString(writer->out, " SYSTEM");
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, " ");
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
-
- count =
- xmlOutputBufferWriteString(writer->out, (const char *) sysid);
- if (count < 0)
- return -1;
- sum += count;
-
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- if (ndataid != NULL) {
- count = xmlOutputBufferWriteString(writer->out, " NDATA ");
- if (count < 0)
- return -1;
- sum += count;
-
- count =
- xmlOutputBufferWriteString(writer->out,
- (const char *) ndataid);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- return sum;
-}
-
-/**
- * xmlTextWriterWriteDTDNotation:
- * @writer: the xmlTextWriterPtr
- * @name: the name of the xml notation
- * @pubid: the public identifier, which is an alternative to the system identifier
- * @sysid: the system identifier, which is the URI of the DTD
- *
- * Write a DTD entity.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer,
- const xmlChar * name,
- const xmlChar * pubid, const xmlChar * sysid)
-{
- int count;
- int sum;
- xmlLinkPtr lk;
- xmlTextWriterStackEntry *p;
-
- if (writer == NULL || name == NULL || *name == '\0')
- return -1;
-
- sum = 0;
- lk = xmlListFront(writer->nodes);
- if (lk == 0) {
- return -1;
- }
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p != 0) {
- switch (p->state) {
- case XML_TEXTWRITER_DTD:
- count = xmlOutputBufferWriteString(writer->out, " [");
- if (count < 0)
- return -1;
- sum += count;
- if (writer->indent) {
- count = xmlOutputBufferWriteString(writer->out, "\n");
- if (count < 0)
- return -1;
- sum += count;
- }
- p->state = XML_TEXTWRITER_DTD_TEXT;
- /* fallthrough */
- case XML_TEXTWRITER_DTD_TEXT:
- break;
- default:
- return -1;
- }
- }
-
- if (writer->indent) {
- count = xmlTextWriterWriteIndent(writer);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, "<!NOTATION ");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWriteString(writer->out, (const char *) name);
- if (count < 0)
- return -1;
- sum += count;
-
- if (pubid != 0) {
- count = xmlOutputBufferWriteString(writer->out, " PUBLIC ");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- count =
- xmlOutputBufferWriteString(writer->out, (const char *) pubid);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- if (sysid != 0) {
- if (pubid == 0) {
- count = xmlOutputBufferWriteString(writer->out, " SYSTEM");
- if (count < 0)
- return -1;
- sum += count;
- }
- count = xmlOutputBufferWriteString(writer->out, " ");
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- count =
- xmlOutputBufferWriteString(writer->out, (const char *) sysid);
- if (count < 0)
- return -1;
- sum += count;
- count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- count = xmlOutputBufferWriteString(writer->out, ">");
- if (count < 0)
- return -1;
- sum += count;
-
- return sum;
-}
-
-/**
- * xmlTextWriterFlush:
- * @writer: the xmlTextWriterPtr
- *
- * Flush the output buffer.
- *
- * Returns the bytes written (may be 0 because of buffering) or -1 in case of error
- */
-int
-xmlTextWriterFlush(xmlTextWriterPtr writer)
-{
- int count;
-
- if (writer == NULL)
- return -1;
-
- if (writer->out == NULL)
- count = 0;
- else
- count = xmlOutputBufferFlush(writer->out);
-
- return count;
-}
-
-/**
- * misc
- */
-
-/**
- * xmlFreeTextWriterStackEntry:
- * @lk: the xmlLinkPtr
- *
- * Free callback for the xmlList.
- */
-static void
-xmlFreeTextWriterStackEntry(xmlLinkPtr lk)
-{
- xmlTextWriterStackEntry *p;
-
- p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return;
-
- if (p->name != 0)
- xmlFree(p->name);
- xmlFree(p);
-}
-
-/**
- * xmlCmpTextWriterStackEntry:
- * @data0: the first data
- * @data1: the second data
- *
- * Compare callback for the xmlList.
- *
- * Returns -1, 0, 1
- */
-static int
-xmlCmpTextWriterStackEntry(const void *data0, const void *data1)
-{
- xmlTextWriterStackEntry *p0;
- xmlTextWriterStackEntry *p1;
-
- if (data0 == data1)
- return 0;
-
- if (data0 == 0)
- return -1;
-
- if (data1 == 0)
- return 1;
-
- p0 = (xmlTextWriterStackEntry *) data0;
- p1 = (xmlTextWriterStackEntry *) data1;
-
- return xmlStrcmp(p0->name, p1->name);
-}
-
-/**
- * misc
- */
-
-/**
- * xmlTextWriterOutputNSDecl:
- * @writer: the xmlTextWriterPtr
- *
- * Output the current namespace declarations.
- */
-static int
-xmlTextWriterOutputNSDecl(xmlTextWriterPtr writer)
-{
- xmlLinkPtr lk;
- xmlTextWriterNsStackEntry *np;
- int count;
- int sum;
-
- sum = 0;
- while (!xmlListEmpty(writer->nsstack)) {
- xmlChar *namespaceURI = NULL;
- xmlChar *prefix = NULL;
-
- lk = xmlListFront(writer->nsstack);
- np = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk);
-
- if (np != 0) {
- namespaceURI = xmlStrdup(np->uri);
- prefix = xmlStrdup(np->prefix);
- }
-
- xmlListPopFront(writer->nsstack);
-
- if (np != 0) {
- count = xmlTextWriterWriteAttribute(writer, prefix, namespaceURI);
- xmlFree(namespaceURI);
- xmlFree(prefix);
-
- if (count < 0) {
- xmlListDelete(writer->nsstack);
- writer->nsstack = NULL;
- return -1;
- }
- sum += count;
- }
- }
- return sum;
-}
-
-/**
- * xmlFreeTextWriterNsStackEntry:
- * @lk: the xmlLinkPtr
- *
- * Free callback for the xmlList.
- */
-static void
-xmlFreeTextWriterNsStackEntry(xmlLinkPtr lk)
-{
- xmlTextWriterNsStackEntry *p;
-
- p = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk);
- if (p == 0)
- return;
-
- if (p->prefix != 0)
- xmlFree(p->prefix);
- if (p->uri != 0)
- xmlFree(p->uri);
-
- xmlFree(p);
-}
-
-/**
- * xmlCmpTextWriterNsStackEntry:
- * @data0: the first data
- * @data1: the second data
- *
- * Compare callback for the xmlList.
- *
- * Returns -1, 0, 1
- */
-static int
-xmlCmpTextWriterNsStackEntry(const void *data0, const void *data1)
-{
- xmlTextWriterNsStackEntry *p0;
- xmlTextWriterNsStackEntry *p1;
- int rc;
-
- if (data0 == data1)
- return 0;
-
- if (data0 == 0)
- return -1;
-
- if (data1 == 0)
- return 1;
-
- p0 = (xmlTextWriterNsStackEntry *) data0;
- p1 = (xmlTextWriterNsStackEntry *) data1;
-
- rc = xmlStrcmp(p0->prefix, p1->prefix);
-
- if ((rc != 0) || (p0->elem != p1->elem))
- rc = -1;
-
- return rc;
-}
-
-/**
- * xmlTextWriterWriteDocCallback:
- * @context: the xmlBufferPtr
- * @str: the data to write
- * @len: the length of the data
- *
- * Write callback for the xmlOutputBuffer with target xmlBuffer
- *
- * Returns -1, 0, 1
- */
-static int
-xmlTextWriterWriteDocCallback(void *context, const xmlChar * str, int len)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) context;
- int rc;
-
- if ((rc = xmlParseChunk(ctxt, (const char *) str, len, 0)) != 0) {
- xmlWriterErrMsgInt(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteDocCallback : XML error %d !\n",
- rc);
- return -1;
- }
-
- return len;
-}
-
-/**
- * xmlTextWriterCloseDocCallback:
- * @context: the xmlBufferPtr
- *
- * Close callback for the xmlOutputBuffer with target xmlBuffer
- *
- * Returns -1, 0, 1
- */
-static int
-xmlTextWriterCloseDocCallback(void *context)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) context;
- int rc;
-
- if ((rc = xmlParseChunk(ctxt, NULL, 0, 1)) != 0) {
- xmlWriterErrMsgInt(NULL, XML_ERR_INTERNAL_ERROR,
- "xmlTextWriterWriteDocCallback : XML error %d !\n",
- rc);
- return -1;
- }
-
- return 0;
-}
-
-/**
- * xmlTextWriterVSprintf:
- * @format: see printf
- * @argptr: pointer to the first member of the variable argument list.
- *
- * Utility function for formatted output
- *
- * Returns a new xmlChar buffer with the data or NULL on error. This buffer must be freed.
- */
-static xmlChar *
-xmlTextWriterVSprintf(const char *format, va_list argptr)
-{
- int size;
- int count;
- xmlChar *buf;
- va_list locarg;
-
- size = BUFSIZ;
- buf = (xmlChar *) xmlMalloc(size);
- if (buf == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlTextWriterVSprintf : out of memory!\n");
- return NULL;
- }
-
- VA_COPY(locarg, argptr);
- while (((count = vsnprintf((char *) buf, size, format, locarg)) < 0)
- || (count == size - 1) || (count == size) || (count > size)) {
- va_end(locarg);
- xmlFree(buf);
- size += BUFSIZ;
- buf = (xmlChar *) xmlMalloc(size);
- if (buf == NULL) {
- xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY,
- "xmlTextWriterVSprintf : out of memory!\n");
- return NULL;
- }
- VA_COPY(locarg, argptr);
- }
- va_end(locarg);
-
- return buf;
-}
-
-/**
- * xmlTextWriterStartDocumentCallback:
- * @ctx: the user data (XML parser context)
- *
- * called at the start of document processing.
- */
-static void
-xmlTextWriterStartDocumentCallback(void *ctx)
-{
- xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
- xmlDocPtr doc;
-
- if (ctxt->html) {
-#ifdef LIBXML_HTML_ENABLED
- if (ctxt->myDoc == NULL)
- ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL);
- if (ctxt->myDoc == NULL) {
- if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
- ctxt->sax->error(ctxt->userData,
- "SAX.startDocument(): out of memory\n");
- ctxt->errNo = XML_ERR_NO_MEMORY;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- return;
- }
-#else
- xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR,
- "libxml2 built without HTML support\n");
- ctxt->errNo = XML_ERR_INTERNAL_ERROR;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- return;
-#endif
- } else {
- doc = ctxt->myDoc;
- if (doc == NULL)
- doc = ctxt->myDoc = xmlNewDoc(ctxt->version);
- if (doc != NULL) {
- if (doc->children == NULL) {
- if (ctxt->encoding != NULL)
- doc->encoding = xmlStrdup(ctxt->encoding);
- else
- doc->encoding = NULL;
- doc->standalone = ctxt->standalone;
- }
- } else {
- if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL))
- ctxt->sax->error(ctxt->userData,
- "SAX.startDocument(): out of memory\n");
- ctxt->errNo = XML_ERR_NO_MEMORY;
- ctxt->instate = XML_PARSER_EOF;
- ctxt->disableSAX = 1;
- return;
- }
- }
- if ((ctxt->myDoc != NULL) && (ctxt->myDoc->URL == NULL) &&
- (ctxt->input != NULL) && (ctxt->input->filename != NULL)) {
- ctxt->myDoc->URL =
- xmlCanonicPath((const xmlChar *) ctxt->input->filename);
- if (ctxt->myDoc->URL == NULL)
- ctxt->myDoc->URL =
- xmlStrdup((const xmlChar *) ctxt->input->filename);
- }
-}
-
-/**
- * xmlTextWriterSetIndent:
- * @writer: the xmlTextWriterPtr
- * @indent: do indentation?
- *
- * Set indentation output. indent = 0 do not indentation. indent > 0 do indentation.
- *
- * Returns -1 on error or 0 otherwise.
- */
-int
-xmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent)
-{
- if ((writer == NULL) || (indent < 0))
- return -1;
-
- writer->indent = indent;
- writer->doindent = 1;
-
- return 0;
-}
-
-/**
- * xmlTextWriterSetIndentString:
- * @writer: the xmlTextWriterPtr
- * @str: the xmlChar string
- *
- * Set string indentation.
- *
- * Returns -1 on error or 0 otherwise.
- */
-int
-xmlTextWriterSetIndentString(xmlTextWriterPtr writer, const xmlChar * str)
-{
- if ((writer == NULL) || (!str))
- return -1;
-
- if (writer->ichar != NULL)
- xmlFree(writer->ichar);
- writer->ichar = xmlStrdup(str);
-
- if (!writer->ichar)
- return -1;
- else
- return 0;
-}
-
-/**
- * xmlTextWriterSetQuoteChar:
- * @writer: the xmlTextWriterPtr
- * @quotechar: the quote character
- *
- * Set the character used for quoting attributes.
- *
- * Returns -1 on error or 0 otherwise.
- */
-int
-xmlTextWriterSetQuoteChar(xmlTextWriterPtr writer, xmlChar quotechar)
-{
- if ((writer == NULL) || ((quotechar != '\'') && (quotechar != '"')))
- return -1;
-
- writer->qchar = quotechar;
-
- return 0;
-}
-
-/**
- * xmlTextWriterWriteIndent:
- * @writer: the xmlTextWriterPtr
- *
- * Write indent string.
- *
- * Returns -1 on error or the number of strings written.
- */
-static int
-xmlTextWriterWriteIndent(xmlTextWriterPtr writer)
-{
- int lksize;
- int i;
- int ret;
-
- lksize = xmlListSize(writer->nodes);
- if (lksize < 1)
- return (-1); /* list is empty */
- for (i = 0; i < (lksize - 1); i++) {
- ret = xmlOutputBufferWriteString(writer->out,
- (const char *) writer->ichar);
- if (ret == -1)
- return (-1);
- }
-
- return (lksize - 1);
-}
-
-/**
- * xmlTextWriterHandleStateDependencies:
- * @writer: the xmlTextWriterPtr
- * @p: the xmlTextWriterStackEntry
- *
- * Write state dependent strings.
- *
- * Returns -1 on error or the number of characters written.
- */
-static int
-xmlTextWriterHandleStateDependencies(xmlTextWriterPtr writer,
- xmlTextWriterStackEntry * p)
-{
- int count;
- int sum;
- char extra[3];
-
- if (writer == NULL)
- return -1;
-
- if (p == NULL)
- return 0;
-
- sum = 0;
- extra[0] = extra[1] = extra[2] = '\0';
- if (p != 0) {
- sum = 0;
- switch (p->state) {
- case XML_TEXTWRITER_NAME:
- /* Output namespace declarations */
- count = xmlTextWriterOutputNSDecl(writer);
- if (count < 0)
- return -1;
- sum += count;
- extra[0] = '>';
- p->state = XML_TEXTWRITER_TEXT;
- break;
- case XML_TEXTWRITER_PI:
- extra[0] = ' ';
- p->state = XML_TEXTWRITER_PI_TEXT;
- break;
- case XML_TEXTWRITER_DTD:
- extra[0] = ' ';
- extra[1] = '[';
- p->state = XML_TEXTWRITER_DTD_TEXT;
- break;
- case XML_TEXTWRITER_DTD_ELEM:
- extra[0] = ' ';
- p->state = XML_TEXTWRITER_DTD_ELEM_TEXT;
- break;
- case XML_TEXTWRITER_DTD_ATTL:
- extra[0] = ' ';
- p->state = XML_TEXTWRITER_DTD_ATTL_TEXT;
- break;
- case XML_TEXTWRITER_DTD_ENTY:
- case XML_TEXTWRITER_DTD_PENT:
- extra[0] = ' ';
- extra[1] = writer->qchar;
- p->state = XML_TEXTWRITER_DTD_ENTY_TEXT;
- break;
- default:
- break;
- }
- }
-
- if (*extra != '\0') {
- count = xmlOutputBufferWriteString(writer->out, extra);
- if (count < 0)
- return -1;
- sum += count;
- }
-
- return sum;
-}
-
-#define bottom_xmlwriter
-#include "elfgcchack.h"
-#endif
diff --git a/external/libxml2_android/jni/libxml2/xpath.c b/external/libxml2_android/jni/libxml2/xpath.c
deleted file mode 100644
index 318b5b4a..00000000
--- a/external/libxml2_android/jni/libxml2/xpath.c
+++ /dev/null
@@ -1,15336 +0,0 @@
-/*
- * xpath.c: XML Path Language implementation
- * XPath is a language for addressing parts of an XML document,
- * designed to be used by both XSLT and XPointer
- *f
- * Reference: W3C Recommendation 16 November 1999
- * http://www.w3.org/TR/1999/REC-xpath-19991116
- * Public reference:
- * http://www.w3.org/TR/xpath
- *
- * See Copyright for the status of this software
- *
- * Author: daniel@veillard.com
- *
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-#include <limits.h>
-#include <string.h>
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-#ifdef HAVE_FLOAT_H
-#include <float.h>
-#endif
-#ifdef HAVE_CTYPE_H
-#include <ctype.h>
-#endif
-#ifdef HAVE_SIGNAL_H
-#include <signal.h>
-#endif
-
-#include <libxml/xmlmemory.h>
-#include <libxml/tree.h>
-#include <libxml/valid.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/parserInternals.h>
-#include <libxml/hash.h>
-#ifdef LIBXML_XPTR_ENABLED
-#include <libxml/xpointer.h>
-#endif
-#ifdef LIBXML_DEBUG_ENABLED
-#include <libxml/debugXML.h>
-#endif
-#include <libxml/xmlerror.h>
-#include <libxml/threads.h>
-#include <libxml/globals.h>
-#ifdef LIBXML_PATTERN_ENABLED
-#include <libxml/pattern.h>
-#endif
-
-#include "buf.h"
-
-#ifdef LIBXML_PATTERN_ENABLED
-#define XPATH_STREAMING
-#endif
-
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-/**
- * WITH_TIM_SORT:
- *
- * Use the Timsort algorithm provided in timsort.h to sort
- * nodeset as this is a great improvement over the old Shell sort
- * used in xmlXPathNodeSetSort()
- */
-#define WITH_TIM_SORT
-
-/*
-* XP_OPTIMIZED_NON_ELEM_COMPARISON:
-* If defined, this will use xmlXPathCmpNodesExt() instead of
-* xmlXPathCmpNodes(). The new function is optimized comparison of
-* non-element nodes; actually it will speed up comparison only if
-* xmlXPathOrderDocElems() was called in order to index the elements of
-* a tree in document order; Libxslt does such an indexing, thus it will
-* benefit from this optimization.
-*/
-#define XP_OPTIMIZED_NON_ELEM_COMPARISON
-
-/*
-* XP_OPTIMIZED_FILTER_FIRST:
-* If defined, this will optimize expressions like "key('foo', 'val')[b][1]"
-* in a way, that it stop evaluation at the first node.
-*/
-#define XP_OPTIMIZED_FILTER_FIRST
-
-/*
-* XP_DEBUG_OBJ_USAGE:
-* Internal flag to enable tracking of how much XPath objects have been
-* created.
-*/
-/* #define XP_DEBUG_OBJ_USAGE */
-
-/*
- * XPATH_MAX_STEPS:
- * when compiling an XPath expression we arbitrary limit the maximum
- * number of step operation in the compiled expression. 1000000 is
- * an insanely large value which should never be reached under normal
- * circumstances
- */
-#define XPATH_MAX_STEPS 1000000
-
-/*
- * XPATH_MAX_STACK_DEPTH:
- * when evaluating an XPath expression we arbitrary limit the maximum
- * number of object allowed to be pushed on the stack. 1000000 is
- * an insanely large value which should never be reached under normal
- * circumstances
- */
-#define XPATH_MAX_STACK_DEPTH 1000000
-
-/*
- * XPATH_MAX_NODESET_LENGTH:
- * when evaluating an XPath expression nodesets are created and we
- * arbitrary limit the maximum length of those node set. 10000000 is
- * an insanely large value which should never be reached under normal
- * circumstances, one would first need to construct an in memory tree
- * with more than 10 millions nodes.
- */
-#define XPATH_MAX_NODESET_LENGTH 10000000
-
-/*
- * TODO:
- * There are a few spots where some tests are done which depend upon ascii
- * data. These should be enhanced for full UTF8 support (see particularly
- * any use of the macros IS_ASCII_CHARACTER and IS_ASCII_DIGIT)
- */
-
-#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON
-/**
- * xmlXPathCmpNodesExt:
- * @node1: the first node
- * @node2: the second node
- *
- * Compare two nodes w.r.t document order.
- * This one is optimized for handling of non-element nodes.
- *
- * Returns -2 in case of error 1 if first point < second point, 0 if
- * it's the same node, -1 otherwise
- */
-static int
-xmlXPathCmpNodesExt(xmlNodePtr node1, xmlNodePtr node2) {
- int depth1, depth2;
- int misc = 0, precedence1 = 0, precedence2 = 0;
- xmlNodePtr miscNode1 = NULL, miscNode2 = NULL;
- xmlNodePtr cur, root;
- long l1, l2;
-
- if ((node1 == NULL) || (node2 == NULL))
- return(-2);
-
- if (node1 == node2)
- return(0);
-
- /*
- * a couple of optimizations which will avoid computations in most cases
- */
- switch (node1->type) {
- case XML_ELEMENT_NODE:
- if (node2->type == XML_ELEMENT_NODE) {
- if ((0 > (long) node1->content) && /* TODO: Would a != 0 suffice here? */
- (0 > (long) node2->content) &&
- (node1->doc == node2->doc))
- {
- l1 = -((long) node1->content);
- l2 = -((long) node2->content);
- if (l1 < l2)
- return(1);
- if (l1 > l2)
- return(-1);
- } else
- goto turtle_comparison;
- }
- break;
- case XML_ATTRIBUTE_NODE:
- precedence1 = 1; /* element is owner */
- miscNode1 = node1;
- node1 = node1->parent;
- misc = 1;
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_PI_NODE: {
- miscNode1 = node1;
- /*
- * Find nearest element node.
- */
- if (node1->prev != NULL) {
- do {
- node1 = node1->prev;
- if (node1->type == XML_ELEMENT_NODE) {
- precedence1 = 3; /* element in prev-sibl axis */
- break;
- }
- if (node1->prev == NULL) {
- precedence1 = 2; /* element is parent */
- /*
- * URGENT TODO: Are there any cases, where the
- * parent of such a node is not an element node?
- */
- node1 = node1->parent;
- break;
- }
- } while (1);
- } else {
- precedence1 = 2; /* element is parent */
- node1 = node1->parent;
- }
- if ((node1 == NULL) || (node1->type != XML_ELEMENT_NODE) ||
- (0 <= (long) node1->content)) {
- /*
- * Fallback for whatever case.
- */
- node1 = miscNode1;
- precedence1 = 0;
- } else
- misc = 1;
- }
- break;
- case XML_NAMESPACE_DECL:
- /*
- * TODO: why do we return 1 for namespace nodes?
- */
- return(1);
- default:
- break;
- }
- switch (node2->type) {
- case XML_ELEMENT_NODE:
- break;
- case XML_ATTRIBUTE_NODE:
- precedence2 = 1; /* element is owner */
- miscNode2 = node2;
- node2 = node2->parent;
- misc = 1;
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_PI_NODE: {
- miscNode2 = node2;
- if (node2->prev != NULL) {
- do {
- node2 = node2->prev;
- if (node2->type == XML_ELEMENT_NODE) {
- precedence2 = 3; /* element in prev-sibl axis */
- break;
- }
- if (node2->prev == NULL) {
- precedence2 = 2; /* element is parent */
- node2 = node2->parent;
- break;
- }
- } while (1);
- } else {
- precedence2 = 2; /* element is parent */
- node2 = node2->parent;
- }
- if ((node2 == NULL) || (node2->type != XML_ELEMENT_NODE) ||
- (0 <= (long) node2->content))
- {
- node2 = miscNode2;
- precedence2 = 0;
- } else
- misc = 1;
- }
- break;
- case XML_NAMESPACE_DECL:
- return(1);
- default:
- break;
- }
- if (misc) {
- if (node1 == node2) {
- if (precedence1 == precedence2) {
- /*
- * The ugly case; but normally there aren't many
- * adjacent non-element nodes around.
- */
- cur = miscNode2->prev;
- while (cur != NULL) {
- if (cur == miscNode1)
- return(1);
- if (cur->type == XML_ELEMENT_NODE)
- return(-1);
- cur = cur->prev;
- }
- return (-1);
- } else {
- /*
- * Evaluate based on higher precedence wrt to the element.
- * TODO: This assumes attributes are sorted before content.
- * Is this 100% correct?
- */
- if (precedence1 < precedence2)
- return(1);
- else
- return(-1);
- }
- }
- /*
- * Special case: One of the helper-elements is contained by the other.
- * <foo>
- * <node2>
- * <node1>Text-1(precedence1 == 2)</node1>
- * </node2>
- * Text-6(precedence2 == 3)
- * </foo>
- */
- if ((precedence2 == 3) && (precedence1 > 1)) {
- cur = node1->parent;
- while (cur) {
- if (cur == node2)
- return(1);
- cur = cur->parent;
- }
- }
- if ((precedence1 == 3) && (precedence2 > 1)) {
- cur = node2->parent;
- while (cur) {
- if (cur == node1)
- return(-1);
- cur = cur->parent;
- }
- }
- }
-
- /*
- * Speedup using document order if availble.
- */
- if ((node1->type == XML_ELEMENT_NODE) &&
- (node2->type == XML_ELEMENT_NODE) &&
- (0 > (long) node1->content) &&
- (0 > (long) node2->content) &&
- (node1->doc == node2->doc)) {
-
- l1 = -((long) node1->content);
- l2 = -((long) node2->content);
- if (l1 < l2)
- return(1);
- if (l1 > l2)
- return(-1);
- }
-
-turtle_comparison:
-
- if (node1 == node2->prev)
- return(1);
- if (node1 == node2->next)
- return(-1);
- /*
- * compute depth to root
- */
- for (depth2 = 0, cur = node2; cur->parent != NULL; cur = cur->parent) {
- if (cur->parent == node1)
- return(1);
- depth2++;
- }
- root = cur;
- for (depth1 = 0, cur = node1; cur->parent != NULL; cur = cur->parent) {
- if (cur->parent == node2)
- return(-1);
- depth1++;
- }
- /*
- * Distinct document (or distinct entities :-( ) case.
- */
- if (root != cur) {
- return(-2);
- }
- /*
- * get the nearest common ancestor.
- */
- while (depth1 > depth2) {
- depth1--;
- node1 = node1->parent;
- }
- while (depth2 > depth1) {
- depth2--;
- node2 = node2->parent;
- }
- while (node1->parent != node2->parent) {
- node1 = node1->parent;
- node2 = node2->parent;
- /* should not happen but just in case ... */
- if ((node1 == NULL) || (node2 == NULL))
- return(-2);
- }
- /*
- * Find who's first.
- */
- if (node1 == node2->prev)
- return(1);
- if (node1 == node2->next)
- return(-1);
- /*
- * Speedup using document order if availble.
- */
- if ((node1->type == XML_ELEMENT_NODE) &&
- (node2->type == XML_ELEMENT_NODE) &&
- (0 > (long) node1->content) &&
- (0 > (long) node2->content) &&
- (node1->doc == node2->doc)) {
-
- l1 = -((long) node1->content);
- l2 = -((long) node2->content);
- if (l1 < l2)
- return(1);
- if (l1 > l2)
- return(-1);
- }
-
- for (cur = node1->next;cur != NULL;cur = cur->next)
- if (cur == node2)
- return(1);
- return(-1); /* assume there is no sibling list corruption */
-}
-#endif /* XP_OPTIMIZED_NON_ELEM_COMPARISON */
-
-/*
- * Wrapper for the Timsort argorithm from timsort.h
- */
-#ifdef WITH_TIM_SORT
-#define SORT_NAME libxml_domnode
-#define SORT_TYPE xmlNodePtr
-/**
- * wrap_cmp:
- * @x: a node
- * @y: another node
- *
- * Comparison function for the Timsort implementation
- *
- * Returns -2 in case of error -1 if first point < second point, 0 if
- * it's the same node, +1 otherwise
- */
-static
-int wrap_cmp( xmlNodePtr x, xmlNodePtr y );
-#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON
- static int wrap_cmp( xmlNodePtr x, xmlNodePtr y )
- {
- int res = xmlXPathCmpNodesExt(x, y);
- return res == -2 ? res : -res;
- }
-#else
- static int wrap_cmp( xmlNodePtr x, xmlNodePtr y )
- {
- int res = xmlXPathCmpNodes(x, y);
- return res == -2 ? res : -res;
- }
-#endif
-#define SORT_CMP(x, y) (wrap_cmp(x, y))
-#include "timsort.h"
-#endif /* WITH_TIM_SORT */
-
-#if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
-
-/************************************************************************
- * *
- * Floating point stuff *
- * *
- ************************************************************************/
-
-#ifndef TRIO_REPLACE_STDIO
-#define TRIO_PUBLIC static
-#endif
-#include "trionan.c"
-
-/*
- * The lack of portability of this section of the libc is annoying !
- */
-double xmlXPathNAN = 0;
-double xmlXPathPINF = 1;
-double xmlXPathNINF = -1;
-static double xmlXPathNZERO = 0; /* not exported from headers */
-static int xmlXPathInitialized = 0;
-
-/**
- * xmlXPathInit:
- *
- * Initialize the XPath environment
- */
-void
-xmlXPathInit(void) {
- if (xmlXPathInitialized) return;
-
- xmlXPathPINF = trio_pinf();
- xmlXPathNINF = trio_ninf();
- xmlXPathNAN = trio_nan();
- xmlXPathNZERO = trio_nzero();
-
- xmlXPathInitialized = 1;
-}
-
-/**
- * xmlXPathIsNaN:
- * @val: a double value
- *
- * Provides a portable isnan() function to detect whether a double
- * is a NotaNumber. Based on trio code
- * http://sourceforge.net/projects/ctrio/
- *
- * Returns 1 if the value is a NaN, 0 otherwise
- */
-int
-xmlXPathIsNaN(double val) {
- return(trio_isnan(val));
-}
-
-/**
- * xmlXPathIsInf:
- * @val: a double value
- *
- * Provides a portable isinf() function to detect whether a double
- * is a +Infinite or -Infinite. Based on trio code
- * http://sourceforge.net/projects/ctrio/
- *
- * Returns 1 vi the value is +Infinite, -1 if -Infinite, 0 otherwise
- */
-int
-xmlXPathIsInf(double val) {
- return(trio_isinf(val));
-}
-
-#endif /* SCHEMAS or XPATH */
-#ifdef LIBXML_XPATH_ENABLED
-/**
- * xmlXPathGetSign:
- * @val: a double value
- *
- * Provides a portable function to detect the sign of a double
- * Modified from trio code
- * http://sourceforge.net/projects/ctrio/
- *
- * Returns 1 if the value is Negative, 0 if positive
- */
-static int
-xmlXPathGetSign(double val) {
- return(trio_signbit(val));
-}
-
-
-/*
- * TODO: when compatibility allows remove all "fake node libxslt" strings
- * the test should just be name[0] = ' '
- */
-#ifdef DEBUG_XPATH_EXPRESSION
-#define DEBUG_STEP
-#define DEBUG_EXPR
-#define DEBUG_EVAL_COUNTS
-#endif
-
-static xmlNs xmlXPathXMLNamespaceStruct = {
- NULL,
- XML_NAMESPACE_DECL,
- XML_XML_NAMESPACE,
- BAD_CAST "xml",
- NULL,
- NULL
-};
-static xmlNsPtr xmlXPathXMLNamespace = &xmlXPathXMLNamespaceStruct;
-#ifndef LIBXML_THREAD_ENABLED
-/*
- * Optimizer is disabled only when threaded apps are detected while
- * the library ain't compiled for thread safety.
- */
-static int xmlXPathDisableOptimizer = 0;
-#endif
-
-/************************************************************************
- * *
- * Error handling routines *
- * *
- ************************************************************************/
-
-/**
- * XP_ERRORNULL:
- * @X: the error code
- *
- * Macro to raise an XPath error and return NULL.
- */
-#define XP_ERRORNULL(X) \
- { xmlXPathErr(ctxt, X); return(NULL); }
-
-/*
- * The array xmlXPathErrorMessages corresponds to the enum xmlXPathError
- */
-static const char *xmlXPathErrorMessages[] = {
- "Ok\n",
- "Number encoding\n",
- "Unfinished literal\n",
- "Start of literal\n",
- "Expected $ for variable reference\n",
- "Undefined variable\n",
- "Invalid predicate\n",
- "Invalid expression\n",
- "Missing closing curly brace\n",
- "Unregistered function\n",
- "Invalid operand\n",
- "Invalid type\n",
- "Invalid number of arguments\n",
- "Invalid context size\n",
- "Invalid context position\n",
- "Memory allocation error\n",
- "Syntax error\n",
- "Resource error\n",
- "Sub resource error\n",
- "Undefined namespace prefix\n",
- "Encoding error\n",
- "Char out of XML range\n",
- "Invalid or incomplete context\n",
- "Stack usage error\n",
- "Forbidden variable\n",
- "?? Unknown error ??\n" /* Must be last in the list! */
-};
-#define MAXERRNO ((int)(sizeof(xmlXPathErrorMessages) / \
- sizeof(xmlXPathErrorMessages[0])) - 1)
-/**
- * xmlXPathErrMemory:
- * @ctxt: an XPath context
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlXPathErrMemory(xmlXPathContextPtr ctxt, const char *extra)
-{
- if (ctxt != NULL) {
- if (extra) {
- xmlChar buf[200];
-
- xmlStrPrintf(buf, 200,
- "Memory allocation failed : %s\n",
- extra);
- ctxt->lastError.message = (char *) xmlStrdup(buf);
- } else {
- ctxt->lastError.message = (char *)
- xmlStrdup(BAD_CAST "Memory allocation failed\n");
- }
- ctxt->lastError.domain = XML_FROM_XPATH;
- ctxt->lastError.code = XML_ERR_NO_MEMORY;
- if (ctxt->error != NULL)
- ctxt->error(ctxt->userData, &ctxt->lastError);
- } else {
- if (extra)
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, NULL, XML_FROM_XPATH,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
- extra, NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
- else
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, NULL, XML_FROM_XPATH,
- XML_ERR_NO_MEMORY, XML_ERR_FATAL, NULL, 0,
- NULL, NULL, NULL, 0, 0,
- "Memory allocation failed\n");
- }
-}
-
-/**
- * xmlXPathPErrMemory:
- * @ctxt: an XPath parser context
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlXPathPErrMemory(xmlXPathParserContextPtr ctxt, const char *extra)
-{
- if (ctxt == NULL)
- xmlXPathErrMemory(NULL, extra);
- else {
- ctxt->error = XPATH_MEMORY_ERROR;
- xmlXPathErrMemory(ctxt->context, extra);
- }
-}
-
-/**
- * xmlXPathErr:
- * @ctxt: a XPath parser context
- * @error: the error code
- *
- * Handle an XPath error
- */
-void
-xmlXPathErr(xmlXPathParserContextPtr ctxt, int error)
-{
- if ((error < 0) || (error > MAXERRNO))
- error = MAXERRNO;
- if (ctxt == NULL) {
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, NULL, XML_FROM_XPATH,
- error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
- XML_ERR_ERROR, NULL, 0,
- NULL, NULL, NULL, 0, 0,
- "%s", xmlXPathErrorMessages[error]);
- return;
- }
- ctxt->error = error;
- if (ctxt->context == NULL) {
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, NULL, XML_FROM_XPATH,
- error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
- XML_ERR_ERROR, NULL, 0,
- (const char *) ctxt->base, NULL, NULL,
- ctxt->cur - ctxt->base, 0,
- "%s", xmlXPathErrorMessages[error]);
- return;
- }
-
- /* cleanup current last error */
- xmlResetError(&ctxt->context->lastError);
-
- ctxt->context->lastError.domain = XML_FROM_XPATH;
- ctxt->context->lastError.code = error + XML_XPATH_EXPRESSION_OK -
- XPATH_EXPRESSION_OK;
- ctxt->context->lastError.level = XML_ERR_ERROR;
- ctxt->context->lastError.str1 = (char *) xmlStrdup(ctxt->base);
- ctxt->context->lastError.int1 = ctxt->cur - ctxt->base;
- ctxt->context->lastError.node = ctxt->context->debugNode;
- if (ctxt->context->error != NULL) {
- ctxt->context->error(ctxt->context->userData,
- &ctxt->context->lastError);
- } else {
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, ctxt->context->debugNode, XML_FROM_XPATH,
- error + XML_XPATH_EXPRESSION_OK - XPATH_EXPRESSION_OK,
- XML_ERR_ERROR, NULL, 0,
- (const char *) ctxt->base, NULL, NULL,
- ctxt->cur - ctxt->base, 0,
- "%s", xmlXPathErrorMessages[error]);
- }
-
-}
-
-/**
- * xmlXPatherror:
- * @ctxt: the XPath Parser context
- * @file: the file name
- * @line: the line number
- * @no: the error number
- *
- * Formats an error message.
- */
-void
-xmlXPatherror(xmlXPathParserContextPtr ctxt, const char *file ATTRIBUTE_UNUSED,
- int line ATTRIBUTE_UNUSED, int no) {
- xmlXPathErr(ctxt, no);
-}
-
-/************************************************************************
- * *
- * Utilities *
- * *
- ************************************************************************/
-
-/**
- * xsltPointerList:
- *
- * Pointer-list for various purposes.
- */
-typedef struct _xmlPointerList xmlPointerList;
-typedef xmlPointerList *xmlPointerListPtr;
-struct _xmlPointerList {
- void **items;
- int number;
- int size;
-};
-/*
-* TODO: Since such a list-handling is used in xmlschemas.c and libxslt
-* and here, we should make the functions public.
-*/
-static int
-xmlPointerListAddSize(xmlPointerListPtr list,
- void *item,
- int initialSize)
-{
- if (list->items == NULL) {
- if (initialSize <= 0)
- initialSize = 1;
- list->items = (void **) xmlMalloc(initialSize * sizeof(void *));
- if (list->items == NULL) {
- xmlXPathErrMemory(NULL,
- "xmlPointerListCreate: allocating item\n");
- return(-1);
- }
- list->number = 0;
- list->size = initialSize;
- } else if (list->size <= list->number) {
- if (list->size > 50000000) {
- xmlXPathErrMemory(NULL,
- "xmlPointerListAddSize: re-allocating item\n");
- return(-1);
- }
- list->size *= 2;
- list->items = (void **) xmlRealloc(list->items,
- list->size * sizeof(void *));
- if (list->items == NULL) {
- xmlXPathErrMemory(NULL,
- "xmlPointerListAddSize: re-allocating item\n");
- list->size = 0;
- return(-1);
- }
- }
- list->items[list->number++] = item;
- return(0);
-}
-
-/**
- * xsltPointerListCreate:
- *
- * Creates an xsltPointerList structure.
- *
- * Returns a xsltPointerList structure or NULL in case of an error.
- */
-static xmlPointerListPtr
-xmlPointerListCreate(int initialSize)
-{
- xmlPointerListPtr ret;
-
- ret = xmlMalloc(sizeof(xmlPointerList));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL,
- "xmlPointerListCreate: allocating item\n");
- return (NULL);
- }
- memset(ret, 0, sizeof(xmlPointerList));
- if (initialSize > 0) {
- xmlPointerListAddSize(ret, NULL, initialSize);
- ret->number = 0;
- }
- return (ret);
-}
-
-/**
- * xsltPointerListFree:
- *
- * Frees the xsltPointerList structure. This does not free
- * the content of the list.
- */
-static void
-xmlPointerListFree(xmlPointerListPtr list)
-{
- if (list == NULL)
- return;
- if (list->items != NULL)
- xmlFree(list->items);
- xmlFree(list);
-}
-
-/************************************************************************
- * *
- * Parser Types *
- * *
- ************************************************************************/
-
-/*
- * Types are private:
- */
-
-typedef enum {
- XPATH_OP_END=0,
- XPATH_OP_AND,
- XPATH_OP_OR,
- XPATH_OP_EQUAL,
- XPATH_OP_CMP,
- XPATH_OP_PLUS,
- XPATH_OP_MULT,
- XPATH_OP_UNION,
- XPATH_OP_ROOT,
- XPATH_OP_NODE,
- XPATH_OP_RESET, /* 10 */
- XPATH_OP_COLLECT,
- XPATH_OP_VALUE, /* 12 */
- XPATH_OP_VARIABLE,
- XPATH_OP_FUNCTION,
- XPATH_OP_ARG,
- XPATH_OP_PREDICATE,
- XPATH_OP_FILTER, /* 17 */
- XPATH_OP_SORT /* 18 */
-#ifdef LIBXML_XPTR_ENABLED
- ,XPATH_OP_RANGETO
-#endif
-} xmlXPathOp;
-
-typedef enum {
- AXIS_ANCESTOR = 1,
- AXIS_ANCESTOR_OR_SELF,
- AXIS_ATTRIBUTE,
- AXIS_CHILD,
- AXIS_DESCENDANT,
- AXIS_DESCENDANT_OR_SELF,
- AXIS_FOLLOWING,
- AXIS_FOLLOWING_SIBLING,
- AXIS_NAMESPACE,
- AXIS_PARENT,
- AXIS_PRECEDING,
- AXIS_PRECEDING_SIBLING,
- AXIS_SELF
-} xmlXPathAxisVal;
-
-typedef enum {
- NODE_TEST_NONE = 0,
- NODE_TEST_TYPE = 1,
- NODE_TEST_PI = 2,
- NODE_TEST_ALL = 3,
- NODE_TEST_NS = 4,
- NODE_TEST_NAME = 5
-} xmlXPathTestVal;
-
-typedef enum {
- NODE_TYPE_NODE = 0,
- NODE_TYPE_COMMENT = XML_COMMENT_NODE,
- NODE_TYPE_TEXT = XML_TEXT_NODE,
- NODE_TYPE_PI = XML_PI_NODE
-} xmlXPathTypeVal;
-
-typedef struct _xmlXPathStepOp xmlXPathStepOp;
-typedef xmlXPathStepOp *xmlXPathStepOpPtr;
-struct _xmlXPathStepOp {
- xmlXPathOp op; /* The identifier of the operation */
- int ch1; /* First child */
- int ch2; /* Second child */
- int value;
- int value2;
- int value3;
- void *value4;
- void *value5;
- xmlXPathFunction cache;
- void *cacheURI;
-};
-
-struct _xmlXPathCompExpr {
- int nbStep; /* Number of steps in this expression */
- int maxStep; /* Maximum number of steps allocated */
- xmlXPathStepOp *steps; /* ops for computation of this expression */
- int last; /* index of last step in expression */
- xmlChar *expr; /* the expression being computed */
- xmlDictPtr dict; /* the dictionary to use if any */
-#ifdef DEBUG_EVAL_COUNTS
- int nb;
- xmlChar *string;
-#endif
-#ifdef XPATH_STREAMING
- xmlPatternPtr stream;
-#endif
-};
-
-/************************************************************************
- * *
- * Forward declarations *
- * *
- ************************************************************************/
-static void
-xmlXPathFreeValueTree(xmlNodeSetPtr obj);
-static void
-xmlXPathReleaseObject(xmlXPathContextPtr ctxt, xmlXPathObjectPtr obj);
-static int
-xmlXPathCompOpEvalFirst(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op, xmlNodePtr *first);
-static int
-xmlXPathCompOpEvalToBoolean(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op,
- int isPredicate);
-
-/************************************************************************
- * *
- * Parser Type functions *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathNewCompExpr:
- *
- * Create a new Xpath component
- *
- * Returns the newly allocated xmlXPathCompExprPtr or NULL in case of error
- */
-static xmlXPathCompExprPtr
-xmlXPathNewCompExpr(void) {
- xmlXPathCompExprPtr cur;
-
- cur = (xmlXPathCompExprPtr) xmlMalloc(sizeof(xmlXPathCompExpr));
- if (cur == NULL) {
- xmlXPathErrMemory(NULL, "allocating component\n");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlXPathCompExpr));
- cur->maxStep = 10;
- cur->nbStep = 0;
- cur->steps = (xmlXPathStepOp *) xmlMalloc(cur->maxStep *
- sizeof(xmlXPathStepOp));
- if (cur->steps == NULL) {
- xmlXPathErrMemory(NULL, "allocating steps\n");
- xmlFree(cur);
- return(NULL);
- }
- memset(cur->steps, 0, cur->maxStep * sizeof(xmlXPathStepOp));
- cur->last = -1;
-#ifdef DEBUG_EVAL_COUNTS
- cur->nb = 0;
-#endif
- return(cur);
-}
-
-/**
- * xmlXPathFreeCompExpr:
- * @comp: an XPATH comp
- *
- * Free up the memory allocated by @comp
- */
-void
-xmlXPathFreeCompExpr(xmlXPathCompExprPtr comp)
-{
- xmlXPathStepOpPtr op;
- int i;
-
- if (comp == NULL)
- return;
- if (comp->dict == NULL) {
- for (i = 0; i < comp->nbStep; i++) {
- op = &comp->steps[i];
- if (op->value4 != NULL) {
- if (op->op == XPATH_OP_VALUE)
- xmlXPathFreeObject(op->value4);
- else
- xmlFree(op->value4);
- }
- if (op->value5 != NULL)
- xmlFree(op->value5);
- }
- } else {
- for (i = 0; i < comp->nbStep; i++) {
- op = &comp->steps[i];
- if (op->value4 != NULL) {
- if (op->op == XPATH_OP_VALUE)
- xmlXPathFreeObject(op->value4);
- }
- }
- xmlDictFree(comp->dict);
- }
- if (comp->steps != NULL) {
- xmlFree(comp->steps);
- }
-#ifdef DEBUG_EVAL_COUNTS
- if (comp->string != NULL) {
- xmlFree(comp->string);
- }
-#endif
-#ifdef XPATH_STREAMING
- if (comp->stream != NULL) {
- xmlFreePatternList(comp->stream);
- }
-#endif
- if (comp->expr != NULL) {
- xmlFree(comp->expr);
- }
-
- xmlFree(comp);
-}
-
-/**
- * xmlXPathCompExprAdd:
- * @comp: the compiled expression
- * @ch1: first child index
- * @ch2: second child index
- * @op: an op
- * @value: the first int value
- * @value2: the second int value
- * @value3: the third int value
- * @value4: the first string value
- * @value5: the second string value
- *
- * Add a step to an XPath Compiled Expression
- *
- * Returns -1 in case of failure, the index otherwise
- */
-static int
-xmlXPathCompExprAdd(xmlXPathCompExprPtr comp, int ch1, int ch2,
- xmlXPathOp op, int value,
- int value2, int value3, void *value4, void *value5) {
- if (comp->nbStep >= comp->maxStep) {
- xmlXPathStepOp *real;
-
- if (comp->maxStep >= XPATH_MAX_STEPS) {
- xmlXPathErrMemory(NULL, "adding step\n");
- return(-1);
- }
- comp->maxStep *= 2;
- real = (xmlXPathStepOp *) xmlRealloc(comp->steps,
- comp->maxStep * sizeof(xmlXPathStepOp));
- if (real == NULL) {
- comp->maxStep /= 2;
- xmlXPathErrMemory(NULL, "adding step\n");
- return(-1);
- }
- comp->steps = real;
- }
- comp->last = comp->nbStep;
- comp->steps[comp->nbStep].ch1 = ch1;
- comp->steps[comp->nbStep].ch2 = ch2;
- comp->steps[comp->nbStep].op = op;
- comp->steps[comp->nbStep].value = value;
- comp->steps[comp->nbStep].value2 = value2;
- comp->steps[comp->nbStep].value3 = value3;
- if ((comp->dict != NULL) &&
- ((op == XPATH_OP_FUNCTION) || (op == XPATH_OP_VARIABLE) ||
- (op == XPATH_OP_COLLECT))) {
- if (value4 != NULL) {
- comp->steps[comp->nbStep].value4 = (xmlChar *)
- (void *)xmlDictLookup(comp->dict, value4, -1);
- xmlFree(value4);
- } else
- comp->steps[comp->nbStep].value4 = NULL;
- if (value5 != NULL) {
- comp->steps[comp->nbStep].value5 = (xmlChar *)
- (void *)xmlDictLookup(comp->dict, value5, -1);
- xmlFree(value5);
- } else
- comp->steps[comp->nbStep].value5 = NULL;
- } else {
- comp->steps[comp->nbStep].value4 = value4;
- comp->steps[comp->nbStep].value5 = value5;
- }
- comp->steps[comp->nbStep].cache = NULL;
- return(comp->nbStep++);
-}
-
-/**
- * xmlXPathCompSwap:
- * @comp: the compiled expression
- * @op: operation index
- *
- * Swaps 2 operations in the compiled expression
- */
-static void
-xmlXPathCompSwap(xmlXPathStepOpPtr op) {
- int tmp;
-
-#ifndef LIBXML_THREAD_ENABLED
- /*
- * Since this manipulates possibly shared variables, this is
- * disabled if one detects that the library is used in a multithreaded
- * application
- */
- if (xmlXPathDisableOptimizer)
- return;
-#endif
-
- tmp = op->ch1;
- op->ch1 = op->ch2;
- op->ch2 = tmp;
-}
-
-#define PUSH_FULL_EXPR(op, op1, op2, val, val2, val3, val4, val5) \
- xmlXPathCompExprAdd(ctxt->comp, (op1), (op2), \
- (op), (val), (val2), (val3), (val4), (val5))
-#define PUSH_LONG_EXPR(op, val, val2, val3, val4, val5) \
- xmlXPathCompExprAdd(ctxt->comp, ctxt->comp->last, -1, \
- (op), (val), (val2), (val3), (val4), (val5))
-
-#define PUSH_LEAVE_EXPR(op, val, val2) \
-xmlXPathCompExprAdd(ctxt->comp, -1, -1, (op), (val), (val2), 0 ,NULL ,NULL)
-
-#define PUSH_UNARY_EXPR(op, ch, val, val2) \
-xmlXPathCompExprAdd(ctxt->comp, (ch), -1, (op), (val), (val2), 0 ,NULL ,NULL)
-
-#define PUSH_BINARY_EXPR(op, ch1, ch2, val, val2) \
-xmlXPathCompExprAdd(ctxt->comp, (ch1), (ch2), (op), \
- (val), (val2), 0 ,NULL ,NULL)
-
-/************************************************************************
- * *
- * XPath object cache structures *
- * *
- ************************************************************************/
-
-/* #define XP_DEFAULT_CACHE_ON */
-
-#define XP_HAS_CACHE(c) ((c != NULL) && ((c)->cache != NULL))
-
-typedef struct _xmlXPathContextCache xmlXPathContextCache;
-typedef xmlXPathContextCache *xmlXPathContextCachePtr;
-struct _xmlXPathContextCache {
- xmlPointerListPtr nodesetObjs; /* contains xmlXPathObjectPtr */
- xmlPointerListPtr stringObjs; /* contains xmlXPathObjectPtr */
- xmlPointerListPtr booleanObjs; /* contains xmlXPathObjectPtr */
- xmlPointerListPtr numberObjs; /* contains xmlXPathObjectPtr */
- xmlPointerListPtr miscObjs; /* contains xmlXPathObjectPtr */
- int maxNodeset;
- int maxString;
- int maxBoolean;
- int maxNumber;
- int maxMisc;
-#ifdef XP_DEBUG_OBJ_USAGE
- int dbgCachedAll;
- int dbgCachedNodeset;
- int dbgCachedString;
- int dbgCachedBool;
- int dbgCachedNumber;
- int dbgCachedPoint;
- int dbgCachedRange;
- int dbgCachedLocset;
- int dbgCachedUsers;
- int dbgCachedXSLTTree;
- int dbgCachedUndefined;
-
-
- int dbgReusedAll;
- int dbgReusedNodeset;
- int dbgReusedString;
- int dbgReusedBool;
- int dbgReusedNumber;
- int dbgReusedPoint;
- int dbgReusedRange;
- int dbgReusedLocset;
- int dbgReusedUsers;
- int dbgReusedXSLTTree;
- int dbgReusedUndefined;
-
-#endif
-};
-
-/************************************************************************
- * *
- * Debugging related functions *
- * *
- ************************************************************************/
-
-#define STRANGE \
- xmlGenericError(xmlGenericErrorContext, \
- "Internal error at %s:%d\n", \
- __FILE__, __LINE__);
-
-#ifdef LIBXML_DEBUG_ENABLED
-static void
-xmlXPathDebugDumpNode(FILE *output, xmlNodePtr cur, int depth) {
- int i;
- char shift[100];
-
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
- if (cur == NULL) {
- fprintf(output, "%s", shift);
- fprintf(output, "Node is NULL !\n");
- return;
-
- }
-
- if ((cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- fprintf(output, "%s", shift);
- fprintf(output, " /\n");
- } else if (cur->type == XML_ATTRIBUTE_NODE)
- xmlDebugDumpAttr(output, (xmlAttrPtr)cur, depth);
- else
- xmlDebugDumpOneNode(output, cur, depth);
-}
-static void
-xmlXPathDebugDumpNodeList(FILE *output, xmlNodePtr cur, int depth) {
- xmlNodePtr tmp;
- int i;
- char shift[100];
-
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
- if (cur == NULL) {
- fprintf(output, "%s", shift);
- fprintf(output, "Node is NULL !\n");
- return;
-
- }
-
- while (cur != NULL) {
- tmp = cur;
- cur = cur->next;
- xmlDebugDumpOneNode(output, tmp, depth);
- }
-}
-
-static void
-xmlXPathDebugDumpNodeSet(FILE *output, xmlNodeSetPtr cur, int depth) {
- int i;
- char shift[100];
-
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
-
- if (cur == NULL) {
- fprintf(output, "%s", shift);
- fprintf(output, "NodeSet is NULL !\n");
- return;
-
- }
-
- if (cur != NULL) {
- fprintf(output, "Set contains %d nodes:\n", cur->nodeNr);
- for (i = 0;i < cur->nodeNr;i++) {
- fprintf(output, "%s", shift);
- fprintf(output, "%d", i + 1);
- xmlXPathDebugDumpNode(output, cur->nodeTab[i], depth + 1);
- }
- }
-}
-
-static void
-xmlXPathDebugDumpValueTree(FILE *output, xmlNodeSetPtr cur, int depth) {
- int i;
- char shift[100];
-
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
-
- if ((cur == NULL) || (cur->nodeNr == 0) || (cur->nodeTab[0] == NULL)) {
- fprintf(output, "%s", shift);
- fprintf(output, "Value Tree is NULL !\n");
- return;
-
- }
-
- fprintf(output, "%s", shift);
- fprintf(output, "%d", i + 1);
- xmlXPathDebugDumpNodeList(output, cur->nodeTab[0]->children, depth + 1);
-}
-#if defined(LIBXML_XPTR_ENABLED)
-static void
-xmlXPathDebugDumpLocationSet(FILE *output, xmlLocationSetPtr cur, int depth) {
- int i;
- char shift[100];
-
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
-
- if (cur == NULL) {
- fprintf(output, "%s", shift);
- fprintf(output, "LocationSet is NULL !\n");
- return;
-
- }
-
- for (i = 0;i < cur->locNr;i++) {
- fprintf(output, "%s", shift);
- fprintf(output, "%d : ", i + 1);
- xmlXPathDebugDumpObject(output, cur->locTab[i], depth + 1);
- }
-}
-#endif /* LIBXML_XPTR_ENABLED */
-
-/**
- * xmlXPathDebugDumpObject:
- * @output: the FILE * to dump the output
- * @cur: the object to inspect
- * @depth: indentation level
- *
- * Dump the content of the object for debugging purposes
- */
-void
-xmlXPathDebugDumpObject(FILE *output, xmlXPathObjectPtr cur, int depth) {
- int i;
- char shift[100];
-
- if (output == NULL) return;
-
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
-
-
- fprintf(output, "%s", shift);
-
- if (cur == NULL) {
- fprintf(output, "Object is empty (NULL)\n");
- return;
- }
- switch(cur->type) {
- case XPATH_UNDEFINED:
- fprintf(output, "Object is uninitialized\n");
- break;
- case XPATH_NODESET:
- fprintf(output, "Object is a Node Set :\n");
- xmlXPathDebugDumpNodeSet(output, cur->nodesetval, depth);
- break;
- case XPATH_XSLT_TREE:
- fprintf(output, "Object is an XSLT value tree :\n");
- xmlXPathDebugDumpValueTree(output, cur->nodesetval, depth);
- break;
- case XPATH_BOOLEAN:
- fprintf(output, "Object is a Boolean : ");
- if (cur->boolval) fprintf(output, "true\n");
- else fprintf(output, "false\n");
- break;
- case XPATH_NUMBER:
- switch (xmlXPathIsInf(cur->floatval)) {
- case 1:
- fprintf(output, "Object is a number : Infinity\n");
- break;
- case -1:
- fprintf(output, "Object is a number : -Infinity\n");
- break;
- default:
- if (xmlXPathIsNaN(cur->floatval)) {
- fprintf(output, "Object is a number : NaN\n");
- } else if (cur->floatval == 0 && xmlXPathGetSign(cur->floatval) != 0) {
- fprintf(output, "Object is a number : 0\n");
- } else {
- fprintf(output, "Object is a number : %0g\n", cur->floatval);
- }
- }
- break;
- case XPATH_STRING:
- fprintf(output, "Object is a string : ");
- xmlDebugDumpString(output, cur->stringval);
- fprintf(output, "\n");
- break;
- case XPATH_POINT:
- fprintf(output, "Object is a point : index %d in node", cur->index);
- xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user, depth + 1);
- fprintf(output, "\n");
- break;
- case XPATH_RANGE:
- if ((cur->user2 == NULL) ||
- ((cur->user2 == cur->user) && (cur->index == cur->index2))) {
- fprintf(output, "Object is a collapsed range :\n");
- fprintf(output, "%s", shift);
- if (cur->index >= 0)
- fprintf(output, "index %d in ", cur->index);
- fprintf(output, "node\n");
- xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user,
- depth + 1);
- } else {
- fprintf(output, "Object is a range :\n");
- fprintf(output, "%s", shift);
- fprintf(output, "From ");
- if (cur->index >= 0)
- fprintf(output, "index %d in ", cur->index);
- fprintf(output, "node\n");
- xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user,
- depth + 1);
- fprintf(output, "%s", shift);
- fprintf(output, "To ");
- if (cur->index2 >= 0)
- fprintf(output, "index %d in ", cur->index2);
- fprintf(output, "node\n");
- xmlXPathDebugDumpNode(output, (xmlNodePtr) cur->user2,
- depth + 1);
- fprintf(output, "\n");
- }
- break;
- case XPATH_LOCATIONSET:
-#if defined(LIBXML_XPTR_ENABLED)
- fprintf(output, "Object is a Location Set:\n");
- xmlXPathDebugDumpLocationSet(output,
- (xmlLocationSetPtr) cur->user, depth);
-#endif
- break;
- case XPATH_USERS:
- fprintf(output, "Object is user defined\n");
- break;
- }
-}
-
-static void
-xmlXPathDebugDumpStepOp(FILE *output, xmlXPathCompExprPtr comp,
- xmlXPathStepOpPtr op, int depth) {
- int i;
- char shift[100];
-
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
-
- fprintf(output, "%s", shift);
- if (op == NULL) {
- fprintf(output, "Step is NULL\n");
- return;
- }
- switch (op->op) {
- case XPATH_OP_END:
- fprintf(output, "END"); break;
- case XPATH_OP_AND:
- fprintf(output, "AND"); break;
- case XPATH_OP_OR:
- fprintf(output, "OR"); break;
- case XPATH_OP_EQUAL:
- if (op->value)
- fprintf(output, "EQUAL =");
- else
- fprintf(output, "EQUAL !=");
- break;
- case XPATH_OP_CMP:
- if (op->value)
- fprintf(output, "CMP <");
- else
- fprintf(output, "CMP >");
- if (!op->value2)
- fprintf(output, "=");
- break;
- case XPATH_OP_PLUS:
- if (op->value == 0)
- fprintf(output, "PLUS -");
- else if (op->value == 1)
- fprintf(output, "PLUS +");
- else if (op->value == 2)
- fprintf(output, "PLUS unary -");
- else if (op->value == 3)
- fprintf(output, "PLUS unary - -");
- break;
- case XPATH_OP_MULT:
- if (op->value == 0)
- fprintf(output, "MULT *");
- else if (op->value == 1)
- fprintf(output, "MULT div");
- else
- fprintf(output, "MULT mod");
- break;
- case XPATH_OP_UNION:
- fprintf(output, "UNION"); break;
- case XPATH_OP_ROOT:
- fprintf(output, "ROOT"); break;
- case XPATH_OP_NODE:
- fprintf(output, "NODE"); break;
- case XPATH_OP_RESET:
- fprintf(output, "RESET"); break;
- case XPATH_OP_SORT:
- fprintf(output, "SORT"); break;
- case XPATH_OP_COLLECT: {
- xmlXPathAxisVal axis = (xmlXPathAxisVal)op->value;
- xmlXPathTestVal test = (xmlXPathTestVal)op->value2;
- xmlXPathTypeVal type = (xmlXPathTypeVal)op->value3;
- const xmlChar *prefix = op->value4;
- const xmlChar *name = op->value5;
-
- fprintf(output, "COLLECT ");
- switch (axis) {
- case AXIS_ANCESTOR:
- fprintf(output, " 'ancestors' "); break;
- case AXIS_ANCESTOR_OR_SELF:
- fprintf(output, " 'ancestors-or-self' "); break;
- case AXIS_ATTRIBUTE:
- fprintf(output, " 'attributes' "); break;
- case AXIS_CHILD:
- fprintf(output, " 'child' "); break;
- case AXIS_DESCENDANT:
- fprintf(output, " 'descendant' "); break;
- case AXIS_DESCENDANT_OR_SELF:
- fprintf(output, " 'descendant-or-self' "); break;
- case AXIS_FOLLOWING:
- fprintf(output, " 'following' "); break;
- case AXIS_FOLLOWING_SIBLING:
- fprintf(output, " 'following-siblings' "); break;
- case AXIS_NAMESPACE:
- fprintf(output, " 'namespace' "); break;
- case AXIS_PARENT:
- fprintf(output, " 'parent' "); break;
- case AXIS_PRECEDING:
- fprintf(output, " 'preceding' "); break;
- case AXIS_PRECEDING_SIBLING:
- fprintf(output, " 'preceding-sibling' "); break;
- case AXIS_SELF:
- fprintf(output, " 'self' "); break;
- }
- switch (test) {
- case NODE_TEST_NONE:
- fprintf(output, "'none' "); break;
- case NODE_TEST_TYPE:
- fprintf(output, "'type' "); break;
- case NODE_TEST_PI:
- fprintf(output, "'PI' "); break;
- case NODE_TEST_ALL:
- fprintf(output, "'all' "); break;
- case NODE_TEST_NS:
- fprintf(output, "'namespace' "); break;
- case NODE_TEST_NAME:
- fprintf(output, "'name' "); break;
- }
- switch (type) {
- case NODE_TYPE_NODE:
- fprintf(output, "'node' "); break;
- case NODE_TYPE_COMMENT:
- fprintf(output, "'comment' "); break;
- case NODE_TYPE_TEXT:
- fprintf(output, "'text' "); break;
- case NODE_TYPE_PI:
- fprintf(output, "'PI' "); break;
- }
- if (prefix != NULL)
- fprintf(output, "%s:", prefix);
- if (name != NULL)
- fprintf(output, "%s", (const char *) name);
- break;
-
- }
- case XPATH_OP_VALUE: {
- xmlXPathObjectPtr object = (xmlXPathObjectPtr) op->value4;
-
- fprintf(output, "ELEM ");
- xmlXPathDebugDumpObject(output, object, 0);
- goto finish;
- }
- case XPATH_OP_VARIABLE: {
- const xmlChar *prefix = op->value5;
- const xmlChar *name = op->value4;
-
- if (prefix != NULL)
- fprintf(output, "VARIABLE %s:%s", prefix, name);
- else
- fprintf(output, "VARIABLE %s", name);
- break;
- }
- case XPATH_OP_FUNCTION: {
- int nbargs = op->value;
- const xmlChar *prefix = op->value5;
- const xmlChar *name = op->value4;
-
- if (prefix != NULL)
- fprintf(output, "FUNCTION %s:%s(%d args)",
- prefix, name, nbargs);
- else
- fprintf(output, "FUNCTION %s(%d args)", name, nbargs);
- break;
- }
- case XPATH_OP_ARG: fprintf(output, "ARG"); break;
- case XPATH_OP_PREDICATE: fprintf(output, "PREDICATE"); break;
- case XPATH_OP_FILTER: fprintf(output, "FILTER"); break;
-#ifdef LIBXML_XPTR_ENABLED
- case XPATH_OP_RANGETO: fprintf(output, "RANGETO"); break;
-#endif
- default:
- fprintf(output, "UNKNOWN %d\n", op->op); return;
- }
- fprintf(output, "\n");
-finish:
- if (op->ch1 >= 0)
- xmlXPathDebugDumpStepOp(output, comp, &comp->steps[op->ch1], depth + 1);
- if (op->ch2 >= 0)
- xmlXPathDebugDumpStepOp(output, comp, &comp->steps[op->ch2], depth + 1);
-}
-
-/**
- * xmlXPathDebugDumpCompExpr:
- * @output: the FILE * for the output
- * @comp: the precompiled XPath expression
- * @depth: the indentation level.
- *
- * Dumps the tree of the compiled XPath expression.
- */
-void
-xmlXPathDebugDumpCompExpr(FILE *output, xmlXPathCompExprPtr comp,
- int depth) {
- int i;
- char shift[100];
-
- if ((output == NULL) || (comp == NULL)) return;
-
- for (i = 0;((i < depth) && (i < 25));i++)
- shift[2 * i] = shift[2 * i + 1] = ' ';
- shift[2 * i] = shift[2 * i + 1] = 0;
-
- fprintf(output, "%s", shift);
-
- fprintf(output, "Compiled Expression : %d elements\n",
- comp->nbStep);
- i = comp->last;
- xmlXPathDebugDumpStepOp(output, comp, &comp->steps[i], depth + 1);
-}
-
-#ifdef XP_DEBUG_OBJ_USAGE
-
-/*
-* XPath object usage related debugging variables.
-*/
-static int xmlXPathDebugObjCounterUndefined = 0;
-static int xmlXPathDebugObjCounterNodeset = 0;
-static int xmlXPathDebugObjCounterBool = 0;
-static int xmlXPathDebugObjCounterNumber = 0;
-static int xmlXPathDebugObjCounterString = 0;
-static int xmlXPathDebugObjCounterPoint = 0;
-static int xmlXPathDebugObjCounterRange = 0;
-static int xmlXPathDebugObjCounterLocset = 0;
-static int xmlXPathDebugObjCounterUsers = 0;
-static int xmlXPathDebugObjCounterXSLTTree = 0;
-static int xmlXPathDebugObjCounterAll = 0;
-
-static int xmlXPathDebugObjTotalUndefined = 0;
-static int xmlXPathDebugObjTotalNodeset = 0;
-static int xmlXPathDebugObjTotalBool = 0;
-static int xmlXPathDebugObjTotalNumber = 0;
-static int xmlXPathDebugObjTotalString = 0;
-static int xmlXPathDebugObjTotalPoint = 0;
-static int xmlXPathDebugObjTotalRange = 0;
-static int xmlXPathDebugObjTotalLocset = 0;
-static int xmlXPathDebugObjTotalUsers = 0;
-static int xmlXPathDebugObjTotalXSLTTree = 0;
-static int xmlXPathDebugObjTotalAll = 0;
-
-static int xmlXPathDebugObjMaxUndefined = 0;
-static int xmlXPathDebugObjMaxNodeset = 0;
-static int xmlXPathDebugObjMaxBool = 0;
-static int xmlXPathDebugObjMaxNumber = 0;
-static int xmlXPathDebugObjMaxString = 0;
-static int xmlXPathDebugObjMaxPoint = 0;
-static int xmlXPathDebugObjMaxRange = 0;
-static int xmlXPathDebugObjMaxLocset = 0;
-static int xmlXPathDebugObjMaxUsers = 0;
-static int xmlXPathDebugObjMaxXSLTTree = 0;
-static int xmlXPathDebugObjMaxAll = 0;
-
-/* REVISIT TODO: Make this static when committing */
-static void
-xmlXPathDebugObjUsageReset(xmlXPathContextPtr ctxt)
-{
- if (ctxt != NULL) {
- if (ctxt->cache != NULL) {
- xmlXPathContextCachePtr cache =
- (xmlXPathContextCachePtr) ctxt->cache;
-
- cache->dbgCachedAll = 0;
- cache->dbgCachedNodeset = 0;
- cache->dbgCachedString = 0;
- cache->dbgCachedBool = 0;
- cache->dbgCachedNumber = 0;
- cache->dbgCachedPoint = 0;
- cache->dbgCachedRange = 0;
- cache->dbgCachedLocset = 0;
- cache->dbgCachedUsers = 0;
- cache->dbgCachedXSLTTree = 0;
- cache->dbgCachedUndefined = 0;
-
- cache->dbgReusedAll = 0;
- cache->dbgReusedNodeset = 0;
- cache->dbgReusedString = 0;
- cache->dbgReusedBool = 0;
- cache->dbgReusedNumber = 0;
- cache->dbgReusedPoint = 0;
- cache->dbgReusedRange = 0;
- cache->dbgReusedLocset = 0;
- cache->dbgReusedUsers = 0;
- cache->dbgReusedXSLTTree = 0;
- cache->dbgReusedUndefined = 0;
- }
- }
-
- xmlXPathDebugObjCounterUndefined = 0;
- xmlXPathDebugObjCounterNodeset = 0;
- xmlXPathDebugObjCounterBool = 0;
- xmlXPathDebugObjCounterNumber = 0;
- xmlXPathDebugObjCounterString = 0;
- xmlXPathDebugObjCounterPoint = 0;
- xmlXPathDebugObjCounterRange = 0;
- xmlXPathDebugObjCounterLocset = 0;
- xmlXPathDebugObjCounterUsers = 0;
- xmlXPathDebugObjCounterXSLTTree = 0;
- xmlXPathDebugObjCounterAll = 0;
-
- xmlXPathDebugObjTotalUndefined = 0;
- xmlXPathDebugObjTotalNodeset = 0;
- xmlXPathDebugObjTotalBool = 0;
- xmlXPathDebugObjTotalNumber = 0;
- xmlXPathDebugObjTotalString = 0;
- xmlXPathDebugObjTotalPoint = 0;
- xmlXPathDebugObjTotalRange = 0;
- xmlXPathDebugObjTotalLocset = 0;
- xmlXPathDebugObjTotalUsers = 0;
- xmlXPathDebugObjTotalXSLTTree = 0;
- xmlXPathDebugObjTotalAll = 0;
-
- xmlXPathDebugObjMaxUndefined = 0;
- xmlXPathDebugObjMaxNodeset = 0;
- xmlXPathDebugObjMaxBool = 0;
- xmlXPathDebugObjMaxNumber = 0;
- xmlXPathDebugObjMaxString = 0;
- xmlXPathDebugObjMaxPoint = 0;
- xmlXPathDebugObjMaxRange = 0;
- xmlXPathDebugObjMaxLocset = 0;
- xmlXPathDebugObjMaxUsers = 0;
- xmlXPathDebugObjMaxXSLTTree = 0;
- xmlXPathDebugObjMaxAll = 0;
-
-}
-
-static void
-xmlXPathDebugObjUsageRequested(xmlXPathContextPtr ctxt,
- xmlXPathObjectType objType)
-{
- int isCached = 0;
-
- if (ctxt != NULL) {
- if (ctxt->cache != NULL) {
- xmlXPathContextCachePtr cache =
- (xmlXPathContextCachePtr) ctxt->cache;
-
- isCached = 1;
-
- cache->dbgReusedAll++;
- switch (objType) {
- case XPATH_UNDEFINED:
- cache->dbgReusedUndefined++;
- break;
- case XPATH_NODESET:
- cache->dbgReusedNodeset++;
- break;
- case XPATH_BOOLEAN:
- cache->dbgReusedBool++;
- break;
- case XPATH_NUMBER:
- cache->dbgReusedNumber++;
- break;
- case XPATH_STRING:
- cache->dbgReusedString++;
- break;
- case XPATH_POINT:
- cache->dbgReusedPoint++;
- break;
- case XPATH_RANGE:
- cache->dbgReusedRange++;
- break;
- case XPATH_LOCATIONSET:
- cache->dbgReusedLocset++;
- break;
- case XPATH_USERS:
- cache->dbgReusedUsers++;
- break;
- case XPATH_XSLT_TREE:
- cache->dbgReusedXSLTTree++;
- break;
- default:
- break;
- }
- }
- }
-
- switch (objType) {
- case XPATH_UNDEFINED:
- if (! isCached)
- xmlXPathDebugObjTotalUndefined++;
- xmlXPathDebugObjCounterUndefined++;
- if (xmlXPathDebugObjCounterUndefined >
- xmlXPathDebugObjMaxUndefined)
- xmlXPathDebugObjMaxUndefined =
- xmlXPathDebugObjCounterUndefined;
- break;
- case XPATH_NODESET:
- if (! isCached)
- xmlXPathDebugObjTotalNodeset++;
- xmlXPathDebugObjCounterNodeset++;
- if (xmlXPathDebugObjCounterNodeset >
- xmlXPathDebugObjMaxNodeset)
- xmlXPathDebugObjMaxNodeset =
- xmlXPathDebugObjCounterNodeset;
- break;
- case XPATH_BOOLEAN:
- if (! isCached)
- xmlXPathDebugObjTotalBool++;
- xmlXPathDebugObjCounterBool++;
- if (xmlXPathDebugObjCounterBool >
- xmlXPathDebugObjMaxBool)
- xmlXPathDebugObjMaxBool =
- xmlXPathDebugObjCounterBool;
- break;
- case XPATH_NUMBER:
- if (! isCached)
- xmlXPathDebugObjTotalNumber++;
- xmlXPathDebugObjCounterNumber++;
- if (xmlXPathDebugObjCounterNumber >
- xmlXPathDebugObjMaxNumber)
- xmlXPathDebugObjMaxNumber =
- xmlXPathDebugObjCounterNumber;
- break;
- case XPATH_STRING:
- if (! isCached)
- xmlXPathDebugObjTotalString++;
- xmlXPathDebugObjCounterString++;
- if (xmlXPathDebugObjCounterString >
- xmlXPathDebugObjMaxString)
- xmlXPathDebugObjMaxString =
- xmlXPathDebugObjCounterString;
- break;
- case XPATH_POINT:
- if (! isCached)
- xmlXPathDebugObjTotalPoint++;
- xmlXPathDebugObjCounterPoint++;
- if (xmlXPathDebugObjCounterPoint >
- xmlXPathDebugObjMaxPoint)
- xmlXPathDebugObjMaxPoint =
- xmlXPathDebugObjCounterPoint;
- break;
- case XPATH_RANGE:
- if (! isCached)
- xmlXPathDebugObjTotalRange++;
- xmlXPathDebugObjCounterRange++;
- if (xmlXPathDebugObjCounterRange >
- xmlXPathDebugObjMaxRange)
- xmlXPathDebugObjMaxRange =
- xmlXPathDebugObjCounterRange;
- break;
- case XPATH_LOCATIONSET:
- if (! isCached)
- xmlXPathDebugObjTotalLocset++;
- xmlXPathDebugObjCounterLocset++;
- if (xmlXPathDebugObjCounterLocset >
- xmlXPathDebugObjMaxLocset)
- xmlXPathDebugObjMaxLocset =
- xmlXPathDebugObjCounterLocset;
- break;
- case XPATH_USERS:
- if (! isCached)
- xmlXPathDebugObjTotalUsers++;
- xmlXPathDebugObjCounterUsers++;
- if (xmlXPathDebugObjCounterUsers >
- xmlXPathDebugObjMaxUsers)
- xmlXPathDebugObjMaxUsers =
- xmlXPathDebugObjCounterUsers;
- break;
- case XPATH_XSLT_TREE:
- if (! isCached)
- xmlXPathDebugObjTotalXSLTTree++;
- xmlXPathDebugObjCounterXSLTTree++;
- if (xmlXPathDebugObjCounterXSLTTree >
- xmlXPathDebugObjMaxXSLTTree)
- xmlXPathDebugObjMaxXSLTTree =
- xmlXPathDebugObjCounterXSLTTree;
- break;
- default:
- break;
- }
- if (! isCached)
- xmlXPathDebugObjTotalAll++;
- xmlXPathDebugObjCounterAll++;
- if (xmlXPathDebugObjCounterAll >
- xmlXPathDebugObjMaxAll)
- xmlXPathDebugObjMaxAll =
- xmlXPathDebugObjCounterAll;
-}
-
-static void
-xmlXPathDebugObjUsageReleased(xmlXPathContextPtr ctxt,
- xmlXPathObjectType objType)
-{
- int isCached = 0;
-
- if (ctxt != NULL) {
- if (ctxt->cache != NULL) {
- xmlXPathContextCachePtr cache =
- (xmlXPathContextCachePtr) ctxt->cache;
-
- isCached = 1;
-
- cache->dbgCachedAll++;
- switch (objType) {
- case XPATH_UNDEFINED:
- cache->dbgCachedUndefined++;
- break;
- case XPATH_NODESET:
- cache->dbgCachedNodeset++;
- break;
- case XPATH_BOOLEAN:
- cache->dbgCachedBool++;
- break;
- case XPATH_NUMBER:
- cache->dbgCachedNumber++;
- break;
- case XPATH_STRING:
- cache->dbgCachedString++;
- break;
- case XPATH_POINT:
- cache->dbgCachedPoint++;
- break;
- case XPATH_RANGE:
- cache->dbgCachedRange++;
- break;
- case XPATH_LOCATIONSET:
- cache->dbgCachedLocset++;
- break;
- case XPATH_USERS:
- cache->dbgCachedUsers++;
- break;
- case XPATH_XSLT_TREE:
- cache->dbgCachedXSLTTree++;
- break;
- default:
- break;
- }
-
- }
- }
- switch (objType) {
- case XPATH_UNDEFINED:
- xmlXPathDebugObjCounterUndefined--;
- break;
- case XPATH_NODESET:
- xmlXPathDebugObjCounterNodeset--;
- break;
- case XPATH_BOOLEAN:
- xmlXPathDebugObjCounterBool--;
- break;
- case XPATH_NUMBER:
- xmlXPathDebugObjCounterNumber--;
- break;
- case XPATH_STRING:
- xmlXPathDebugObjCounterString--;
- break;
- case XPATH_POINT:
- xmlXPathDebugObjCounterPoint--;
- break;
- case XPATH_RANGE:
- xmlXPathDebugObjCounterRange--;
- break;
- case XPATH_LOCATIONSET:
- xmlXPathDebugObjCounterLocset--;
- break;
- case XPATH_USERS:
- xmlXPathDebugObjCounterUsers--;
- break;
- case XPATH_XSLT_TREE:
- xmlXPathDebugObjCounterXSLTTree--;
- break;
- default:
- break;
- }
- xmlXPathDebugObjCounterAll--;
-}
-
-/* REVISIT TODO: Make this static when committing */
-static void
-xmlXPathDebugObjUsageDisplay(xmlXPathContextPtr ctxt)
-{
- int reqAll, reqNodeset, reqString, reqBool, reqNumber,
- reqXSLTTree, reqUndefined;
- int caAll = 0, caNodeset = 0, caString = 0, caBool = 0,
- caNumber = 0, caXSLTTree = 0, caUndefined = 0;
- int reAll = 0, reNodeset = 0, reString = 0, reBool = 0,
- reNumber = 0, reXSLTTree = 0, reUndefined = 0;
- int leftObjs = xmlXPathDebugObjCounterAll;
-
- reqAll = xmlXPathDebugObjTotalAll;
- reqNodeset = xmlXPathDebugObjTotalNodeset;
- reqString = xmlXPathDebugObjTotalString;
- reqBool = xmlXPathDebugObjTotalBool;
- reqNumber = xmlXPathDebugObjTotalNumber;
- reqXSLTTree = xmlXPathDebugObjTotalXSLTTree;
- reqUndefined = xmlXPathDebugObjTotalUndefined;
-
- printf("# XPath object usage:\n");
-
- if (ctxt != NULL) {
- if (ctxt->cache != NULL) {
- xmlXPathContextCachePtr cache =
- (xmlXPathContextCachePtr) ctxt->cache;
-
- reAll = cache->dbgReusedAll;
- reqAll += reAll;
- reNodeset = cache->dbgReusedNodeset;
- reqNodeset += reNodeset;
- reString = cache->dbgReusedString;
- reqString += reString;
- reBool = cache->dbgReusedBool;
- reqBool += reBool;
- reNumber = cache->dbgReusedNumber;
- reqNumber += reNumber;
- reXSLTTree = cache->dbgReusedXSLTTree;
- reqXSLTTree += reXSLTTree;
- reUndefined = cache->dbgReusedUndefined;
- reqUndefined += reUndefined;
-
- caAll = cache->dbgCachedAll;
- caBool = cache->dbgCachedBool;
- caNodeset = cache->dbgCachedNodeset;
- caString = cache->dbgCachedString;
- caNumber = cache->dbgCachedNumber;
- caXSLTTree = cache->dbgCachedXSLTTree;
- caUndefined = cache->dbgCachedUndefined;
-
- if (cache->nodesetObjs)
- leftObjs -= cache->nodesetObjs->number;
- if (cache->stringObjs)
- leftObjs -= cache->stringObjs->number;
- if (cache->booleanObjs)
- leftObjs -= cache->booleanObjs->number;
- if (cache->numberObjs)
- leftObjs -= cache->numberObjs->number;
- if (cache->miscObjs)
- leftObjs -= cache->miscObjs->number;
- }
- }
-
- printf("# all\n");
- printf("# total : %d\n", reqAll);
- printf("# left : %d\n", leftObjs);
- printf("# created: %d\n", xmlXPathDebugObjTotalAll);
- printf("# reused : %d\n", reAll);
- printf("# max : %d\n", xmlXPathDebugObjMaxAll);
-
- printf("# node-sets\n");
- printf("# total : %d\n", reqNodeset);
- printf("# created: %d\n", xmlXPathDebugObjTotalNodeset);
- printf("# reused : %d\n", reNodeset);
- printf("# max : %d\n", xmlXPathDebugObjMaxNodeset);
-
- printf("# strings\n");
- printf("# total : %d\n", reqString);
- printf("# created: %d\n", xmlXPathDebugObjTotalString);
- printf("# reused : %d\n", reString);
- printf("# max : %d\n", xmlXPathDebugObjMaxString);
-
- printf("# booleans\n");
- printf("# total : %d\n", reqBool);
- printf("# created: %d\n", xmlXPathDebugObjTotalBool);
- printf("# reused : %d\n", reBool);
- printf("# max : %d\n", xmlXPathDebugObjMaxBool);
-
- printf("# numbers\n");
- printf("# total : %d\n", reqNumber);
- printf("# created: %d\n", xmlXPathDebugObjTotalNumber);
- printf("# reused : %d\n", reNumber);
- printf("# max : %d\n", xmlXPathDebugObjMaxNumber);
-
- printf("# XSLT result tree fragments\n");
- printf("# total : %d\n", reqXSLTTree);
- printf("# created: %d\n", xmlXPathDebugObjTotalXSLTTree);
- printf("# reused : %d\n", reXSLTTree);
- printf("# max : %d\n", xmlXPathDebugObjMaxXSLTTree);
-
- printf("# undefined\n");
- printf("# total : %d\n", reqUndefined);
- printf("# created: %d\n", xmlXPathDebugObjTotalUndefined);
- printf("# reused : %d\n", reUndefined);
- printf("# max : %d\n", xmlXPathDebugObjMaxUndefined);
-
-}
-
-#endif /* XP_DEBUG_OBJ_USAGE */
-
-#endif /* LIBXML_DEBUG_ENABLED */
-
-/************************************************************************
- * *
- * XPath object caching *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathNewCache:
- *
- * Create a new object cache
- *
- * Returns the xmlXPathCache just allocated.
- */
-static xmlXPathContextCachePtr
-xmlXPathNewCache(void)
-{
- xmlXPathContextCachePtr ret;
-
- ret = (xmlXPathContextCachePtr) xmlMalloc(sizeof(xmlXPathContextCache));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating object cache\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathContextCache));
- ret->maxNodeset = 100;
- ret->maxString = 100;
- ret->maxBoolean = 100;
- ret->maxNumber = 100;
- ret->maxMisc = 100;
- return(ret);
-}
-
-static void
-xmlXPathCacheFreeObjectList(xmlPointerListPtr list)
-{
- int i;
- xmlXPathObjectPtr obj;
-
- if (list == NULL)
- return;
-
- for (i = 0; i < list->number; i++) {
- obj = list->items[i];
- /*
- * Note that it is already assured that we don't need to
- * look out for namespace nodes in the node-set.
- */
- if (obj->nodesetval != NULL) {
- if (obj->nodesetval->nodeTab != NULL)
- xmlFree(obj->nodesetval->nodeTab);
- xmlFree(obj->nodesetval);
- }
- xmlFree(obj);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjCounterAll--;
-#endif
- }
- xmlPointerListFree(list);
-}
-
-static void
-xmlXPathFreeCache(xmlXPathContextCachePtr cache)
-{
- if (cache == NULL)
- return;
- if (cache->nodesetObjs)
- xmlXPathCacheFreeObjectList(cache->nodesetObjs);
- if (cache->stringObjs)
- xmlXPathCacheFreeObjectList(cache->stringObjs);
- if (cache->booleanObjs)
- xmlXPathCacheFreeObjectList(cache->booleanObjs);
- if (cache->numberObjs)
- xmlXPathCacheFreeObjectList(cache->numberObjs);
- if (cache->miscObjs)
- xmlXPathCacheFreeObjectList(cache->miscObjs);
- xmlFree(cache);
-}
-
-/**
- * xmlXPathContextSetCache:
- *
- * @ctxt: the XPath context
- * @active: enables/disables (creates/frees) the cache
- * @value: a value with semantics dependant on @options
- * @options: options (currently only the value 0 is used)
- *
- * Creates/frees an object cache on the XPath context.
- * If activates XPath objects (xmlXPathObject) will be cached internally
- * to be reused.
- * @options:
- * 0: This will set the XPath object caching:
- * @value:
- * This will set the maximum number of XPath objects
- * to be cached per slot
- * There are 5 slots for: node-set, string, number, boolean, and
- * misc objects. Use <0 for the default number (100).
- * Other values for @options have currently no effect.
- *
- * Returns 0 if the setting succeeded, and -1 on API or internal errors.
- */
-int
-xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
- int active,
- int value,
- int options)
-{
- if (ctxt == NULL)
- return(-1);
- if (active) {
- xmlXPathContextCachePtr cache;
-
- if (ctxt->cache == NULL) {
- ctxt->cache = xmlXPathNewCache();
- if (ctxt->cache == NULL)
- return(-1);
- }
- cache = (xmlXPathContextCachePtr) ctxt->cache;
- if (options == 0) {
- if (value < 0)
- value = 100;
- cache->maxNodeset = value;
- cache->maxString = value;
- cache->maxNumber = value;
- cache->maxBoolean = value;
- cache->maxMisc = value;
- }
- } else if (ctxt->cache != NULL) {
- xmlXPathFreeCache((xmlXPathContextCachePtr) ctxt->cache);
- ctxt->cache = NULL;
- }
- return(0);
-}
-
-/**
- * xmlXPathCacheWrapNodeSet:
- * @ctxt: the XPath context
- * @val: the NodePtr value
- *
- * This is the cached version of xmlXPathWrapNodeSet().
- * Wrap the Nodeset @val in a new xmlXPathObjectPtr
- *
- * Returns the created or reused object.
- */
-static xmlXPathObjectPtr
-xmlXPathCacheWrapNodeSet(xmlXPathContextPtr ctxt, xmlNodeSetPtr val)
-{
- if ((ctxt != NULL) && (ctxt->cache != NULL)) {
- xmlXPathContextCachePtr cache =
- (xmlXPathContextCachePtr) ctxt->cache;
-
- if ((cache->miscObjs != NULL) &&
- (cache->miscObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->miscObjs->items[--cache->miscObjs->number];
- ret->type = XPATH_NODESET;
- ret->nodesetval = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_NODESET);
-#endif
- return(ret);
- }
- }
-
- return(xmlXPathWrapNodeSet(val));
-
-}
-
-/**
- * xmlXPathCacheWrapString:
- * @ctxt: the XPath context
- * @val: the xmlChar * value
- *
- * This is the cached version of xmlXPathWrapString().
- * Wraps the @val string into an XPath object.
- *
- * Returns the created or reused object.
- */
-static xmlXPathObjectPtr
-xmlXPathCacheWrapString(xmlXPathContextPtr ctxt, xmlChar *val)
-{
- if ((ctxt != NULL) && (ctxt->cache != NULL)) {
- xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
-
- if ((cache->stringObjs != NULL) &&
- (cache->stringObjs->number != 0))
- {
-
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->stringObjs->items[--cache->stringObjs->number];
- ret->type = XPATH_STRING;
- ret->stringval = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_STRING);
-#endif
- return(ret);
- } else if ((cache->miscObjs != NULL) &&
- (cache->miscObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
- /*
- * Fallback to misc-cache.
- */
- ret = (xmlXPathObjectPtr)
- cache->miscObjs->items[--cache->miscObjs->number];
-
- ret->type = XPATH_STRING;
- ret->stringval = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_STRING);
-#endif
- return(ret);
- }
- }
- return(xmlXPathWrapString(val));
-}
-
-/**
- * xmlXPathCacheNewNodeSet:
- * @ctxt: the XPath context
- * @val: the NodePtr value
- *
- * This is the cached version of xmlXPathNewNodeSet().
- * Acquire an xmlXPathObjectPtr of type NodeSet and initialize
- * it with the single Node @val
- *
- * Returns the created or reused object.
- */
-static xmlXPathObjectPtr
-xmlXPathCacheNewNodeSet(xmlXPathContextPtr ctxt, xmlNodePtr val)
-{
- if ((ctxt != NULL) && (ctxt->cache)) {
- xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
-
- if ((cache->nodesetObjs != NULL) &&
- (cache->nodesetObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
- /*
- * Use the nodset-cache.
- */
- ret = (xmlXPathObjectPtr)
- cache->nodesetObjs->items[--cache->nodesetObjs->number];
- ret->type = XPATH_NODESET;
- ret->boolval = 0;
- if (val) {
- if ((ret->nodesetval->nodeMax == 0) ||
- (val->type == XML_NAMESPACE_DECL))
- {
- xmlXPathNodeSetAddUnique(ret->nodesetval, val);
- } else {
- ret->nodesetval->nodeTab[0] = val;
- ret->nodesetval->nodeNr = 1;
- }
- }
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_NODESET);
-#endif
- return(ret);
- } else if ((cache->miscObjs != NULL) &&
- (cache->miscObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
- /*
- * Fallback to misc-cache.
- */
-
- ret = (xmlXPathObjectPtr)
- cache->miscObjs->items[--cache->miscObjs->number];
-
- ret->type = XPATH_NODESET;
- ret->boolval = 0;
- ret->nodesetval = xmlXPathNodeSetCreate(val);
- if (ret->nodesetval == NULL) {
- ctxt->lastError.domain = XML_FROM_XPATH;
- ctxt->lastError.code = XML_ERR_NO_MEMORY;
- return(NULL);
- }
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_NODESET);
-#endif
- return(ret);
- }
- }
- return(xmlXPathNewNodeSet(val));
-}
-
-/**
- * xmlXPathCacheNewCString:
- * @ctxt: the XPath context
- * @val: the char * value
- *
- * This is the cached version of xmlXPathNewCString().
- * Acquire an xmlXPathObjectPtr of type string and of value @val
- *
- * Returns the created or reused object.
- */
-static xmlXPathObjectPtr
-xmlXPathCacheNewCString(xmlXPathContextPtr ctxt, const char *val)
-{
- if ((ctxt != NULL) && (ctxt->cache)) {
- xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
-
- if ((cache->stringObjs != NULL) &&
- (cache->stringObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->stringObjs->items[--cache->stringObjs->number];
-
- ret->type = XPATH_STRING;
- ret->stringval = xmlStrdup(BAD_CAST val);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_STRING);
-#endif
- return(ret);
- } else if ((cache->miscObjs != NULL) &&
- (cache->miscObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->miscObjs->items[--cache->miscObjs->number];
-
- ret->type = XPATH_STRING;
- ret->stringval = xmlStrdup(BAD_CAST val);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_STRING);
-#endif
- return(ret);
- }
- }
- return(xmlXPathNewCString(val));
-}
-
-/**
- * xmlXPathCacheNewString:
- * @ctxt: the XPath context
- * @val: the xmlChar * value
- *
- * This is the cached version of xmlXPathNewString().
- * Acquire an xmlXPathObjectPtr of type string and of value @val
- *
- * Returns the created or reused object.
- */
-static xmlXPathObjectPtr
-xmlXPathCacheNewString(xmlXPathContextPtr ctxt, const xmlChar *val)
-{
- if ((ctxt != NULL) && (ctxt->cache)) {
- xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
-
- if ((cache->stringObjs != NULL) &&
- (cache->stringObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->stringObjs->items[--cache->stringObjs->number];
- ret->type = XPATH_STRING;
- if (val != NULL)
- ret->stringval = xmlStrdup(val);
- else
- ret->stringval = xmlStrdup((const xmlChar *)"");
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_STRING);
-#endif
- return(ret);
- } else if ((cache->miscObjs != NULL) &&
- (cache->miscObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->miscObjs->items[--cache->miscObjs->number];
-
- ret->type = XPATH_STRING;
- if (val != NULL)
- ret->stringval = xmlStrdup(val);
- else
- ret->stringval = xmlStrdup((const xmlChar *)"");
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_STRING);
-#endif
- return(ret);
- }
- }
- return(xmlXPathNewString(val));
-}
-
-/**
- * xmlXPathCacheNewBoolean:
- * @ctxt: the XPath context
- * @val: the boolean value
- *
- * This is the cached version of xmlXPathNewBoolean().
- * Acquires an xmlXPathObjectPtr of type boolean and of value @val
- *
- * Returns the created or reused object.
- */
-static xmlXPathObjectPtr
-xmlXPathCacheNewBoolean(xmlXPathContextPtr ctxt, int val)
-{
- if ((ctxt != NULL) && (ctxt->cache)) {
- xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
-
- if ((cache->booleanObjs != NULL) &&
- (cache->booleanObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->booleanObjs->items[--cache->booleanObjs->number];
- ret->type = XPATH_BOOLEAN;
- ret->boolval = (val != 0);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_BOOLEAN);
-#endif
- return(ret);
- } else if ((cache->miscObjs != NULL) &&
- (cache->miscObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->miscObjs->items[--cache->miscObjs->number];
-
- ret->type = XPATH_BOOLEAN;
- ret->boolval = (val != 0);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_BOOLEAN);
-#endif
- return(ret);
- }
- }
- return(xmlXPathNewBoolean(val));
-}
-
-/**
- * xmlXPathCacheNewFloat:
- * @ctxt: the XPath context
- * @val: the double value
- *
- * This is the cached version of xmlXPathNewFloat().
- * Acquires an xmlXPathObjectPtr of type double and of value @val
- *
- * Returns the created or reused object.
- */
-static xmlXPathObjectPtr
-xmlXPathCacheNewFloat(xmlXPathContextPtr ctxt, double val)
-{
- if ((ctxt != NULL) && (ctxt->cache)) {
- xmlXPathContextCachePtr cache = (xmlXPathContextCachePtr) ctxt->cache;
-
- if ((cache->numberObjs != NULL) &&
- (cache->numberObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->numberObjs->items[--cache->numberObjs->number];
- ret->type = XPATH_NUMBER;
- ret->floatval = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_NUMBER);
-#endif
- return(ret);
- } else if ((cache->miscObjs != NULL) &&
- (cache->miscObjs->number != 0))
- {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr)
- cache->miscObjs->items[--cache->miscObjs->number];
-
- ret->type = XPATH_NUMBER;
- ret->floatval = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(ctxt, XPATH_NUMBER);
-#endif
- return(ret);
- }
- }
- return(xmlXPathNewFloat(val));
-}
-
-/**
- * xmlXPathCacheConvertString:
- * @ctxt: the XPath context
- * @val: an XPath object
- *
- * This is the cached version of xmlXPathConvertString().
- * Converts an existing object to its string() equivalent
- *
- * Returns a created or reused object, the old one is freed (cached)
- * (or the operation is done directly on @val)
- */
-
-static xmlXPathObjectPtr
-xmlXPathCacheConvertString(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
- xmlChar *res = NULL;
-
- if (val == NULL)
- return(xmlXPathCacheNewCString(ctxt, ""));
-
- switch (val->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext, "STRING: undefined\n");
-#endif
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- res = xmlXPathCastNodeSetToString(val->nodesetval);
- break;
- case XPATH_STRING:
- return(val);
- case XPATH_BOOLEAN:
- res = xmlXPathCastBooleanToString(val->boolval);
- break;
- case XPATH_NUMBER:
- res = xmlXPathCastNumberToString(val->floatval);
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO;
- break;
- }
- xmlXPathReleaseObject(ctxt, val);
- if (res == NULL)
- return(xmlXPathCacheNewCString(ctxt, ""));
- return(xmlXPathCacheWrapString(ctxt, res));
-}
-
-/**
- * xmlXPathCacheObjectCopy:
- * @ctxt: the XPath context
- * @val: the original object
- *
- * This is the cached version of xmlXPathObjectCopy().
- * Acquire a copy of a given object
- *
- * Returns a created or reused created object.
- */
-static xmlXPathObjectPtr
-xmlXPathCacheObjectCopy(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val)
-{
- if (val == NULL)
- return(NULL);
-
- if (XP_HAS_CACHE(ctxt)) {
- switch (val->type) {
- case XPATH_NODESET:
- return(xmlXPathCacheWrapNodeSet(ctxt,
- xmlXPathNodeSetMerge(NULL, val->nodesetval)));
- case XPATH_STRING:
- return(xmlXPathCacheNewString(ctxt, val->stringval));
- case XPATH_BOOLEAN:
- return(xmlXPathCacheNewBoolean(ctxt, val->boolval));
- case XPATH_NUMBER:
- return(xmlXPathCacheNewFloat(ctxt, val->floatval));
- default:
- break;
- }
- }
- return(xmlXPathObjectCopy(val));
-}
-
-/**
- * xmlXPathCacheConvertBoolean:
- * @ctxt: the XPath context
- * @val: an XPath object
- *
- * This is the cached version of xmlXPathConvertBoolean().
- * Converts an existing object to its boolean() equivalent
- *
- * Returns a created or reused object, the old one is freed (or the operation
- * is done directly on @val)
- */
-static xmlXPathObjectPtr
-xmlXPathCacheConvertBoolean(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
- xmlXPathObjectPtr ret;
-
- if (val == NULL)
- return(xmlXPathCacheNewBoolean(ctxt, 0));
- if (val->type == XPATH_BOOLEAN)
- return(val);
- ret = xmlXPathCacheNewBoolean(ctxt, xmlXPathCastToBoolean(val));
- xmlXPathReleaseObject(ctxt, val);
- return(ret);
-}
-
-/**
- * xmlXPathCacheConvertNumber:
- * @ctxt: the XPath context
- * @val: an XPath object
- *
- * This is the cached version of xmlXPathConvertNumber().
- * Converts an existing object to its number() equivalent
- *
- * Returns a created or reused object, the old one is freed (or the operation
- * is done directly on @val)
- */
-static xmlXPathObjectPtr
-xmlXPathCacheConvertNumber(xmlXPathContextPtr ctxt, xmlXPathObjectPtr val) {
- xmlXPathObjectPtr ret;
-
- if (val == NULL)
- return(xmlXPathCacheNewFloat(ctxt, 0.0));
- if (val->type == XPATH_NUMBER)
- return(val);
- ret = xmlXPathCacheNewFloat(ctxt, xmlXPathCastToNumber(val));
- xmlXPathReleaseObject(ctxt, val);
- return(ret);
-}
-
-/************************************************************************
- * *
- * Parser stacks related functions and macros *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathSetFrame:
- * @ctxt: an XPath parser context
- *
- * Set the callee evaluation frame
- *
- * Returns the previous frame value to be restored once done
- */
-static int
-xmlXPathSetFrame(xmlXPathParserContextPtr ctxt) {
- int ret;
-
- if (ctxt == NULL)
- return(0);
- ret = ctxt->valueFrame;
- ctxt->valueFrame = ctxt->valueNr;
- return(ret);
-}
-
-/**
- * xmlXPathPopFrame:
- * @ctxt: an XPath parser context
- * @frame: the previous frame value
- *
- * Remove the callee evaluation frame
- */
-static void
-xmlXPathPopFrame(xmlXPathParserContextPtr ctxt, int frame) {
- if (ctxt == NULL)
- return;
- if (ctxt->valueNr < ctxt->valueFrame) {
- xmlXPatherror(ctxt, __FILE__, __LINE__, XPATH_STACK_ERROR);
- }
- ctxt->valueFrame = frame;
-}
-
-/**
- * valuePop:
- * @ctxt: an XPath evaluation context
- *
- * Pops the top XPath object from the value stack
- *
- * Returns the XPath object just removed
- */
-xmlXPathObjectPtr
-valuePop(xmlXPathParserContextPtr ctxt)
-{
- xmlXPathObjectPtr ret;
-
- if ((ctxt == NULL) || (ctxt->valueNr <= 0))
- return (NULL);
-
- if (ctxt->valueNr <= ctxt->valueFrame) {
- xmlXPatherror(ctxt, __FILE__, __LINE__, XPATH_STACK_ERROR);
- return (NULL);
- }
-
- ctxt->valueNr--;
- if (ctxt->valueNr > 0)
- ctxt->value = ctxt->valueTab[ctxt->valueNr - 1];
- else
- ctxt->value = NULL;
- ret = ctxt->valueTab[ctxt->valueNr];
- ctxt->valueTab[ctxt->valueNr] = NULL;
- return (ret);
-}
-/**
- * valuePush:
- * @ctxt: an XPath evaluation context
- * @value: the XPath object
- *
- * Pushes a new XPath object on top of the value stack
- *
- * returns the number of items on the value stack
- */
-int
-valuePush(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr value)
-{
- if ((ctxt == NULL) || (value == NULL)) return(-1);
- if (ctxt->valueNr >= ctxt->valueMax) {
- xmlXPathObjectPtr *tmp;
-
- if (ctxt->valueMax >= XPATH_MAX_STACK_DEPTH) {
- xmlXPathErrMemory(NULL, "XPath stack depth limit reached\n");
- ctxt->error = XPATH_MEMORY_ERROR;
- return (0);
- }
- tmp = (xmlXPathObjectPtr *) xmlRealloc(ctxt->valueTab,
- 2 * ctxt->valueMax *
- sizeof(ctxt->valueTab[0]));
- if (tmp == NULL) {
- xmlXPathErrMemory(NULL, "pushing value\n");
- ctxt->error = XPATH_MEMORY_ERROR;
- return (0);
- }
- ctxt->valueMax *= 2;
- ctxt->valueTab = tmp;
- }
- ctxt->valueTab[ctxt->valueNr] = value;
- ctxt->value = value;
- return (ctxt->valueNr++);
-}
-
-/**
- * xmlXPathPopBoolean:
- * @ctxt: an XPath parser context
- *
- * Pops a boolean from the stack, handling conversion if needed.
- * Check error with #xmlXPathCheckError.
- *
- * Returns the boolean
- */
-int
-xmlXPathPopBoolean (xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr obj;
- int ret;
-
- obj = valuePop(ctxt);
- if (obj == NULL) {
- xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
- return(0);
- }
- if (obj->type != XPATH_BOOLEAN)
- ret = xmlXPathCastToBoolean(obj);
- else
- ret = obj->boolval;
- xmlXPathReleaseObject(ctxt->context, obj);
- return(ret);
-}
-
-/**
- * xmlXPathPopNumber:
- * @ctxt: an XPath parser context
- *
- * Pops a number from the stack, handling conversion if needed.
- * Check error with #xmlXPathCheckError.
- *
- * Returns the number
- */
-double
-xmlXPathPopNumber (xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr obj;
- double ret;
-
- obj = valuePop(ctxt);
- if (obj == NULL) {
- xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
- return(0);
- }
- if (obj->type != XPATH_NUMBER)
- ret = xmlXPathCastToNumber(obj);
- else
- ret = obj->floatval;
- xmlXPathReleaseObject(ctxt->context, obj);
- return(ret);
-}
-
-/**
- * xmlXPathPopString:
- * @ctxt: an XPath parser context
- *
- * Pops a string from the stack, handling conversion if needed.
- * Check error with #xmlXPathCheckError.
- *
- * Returns the string
- */
-xmlChar *
-xmlXPathPopString (xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr obj;
- xmlChar * ret;
-
- obj = valuePop(ctxt);
- if (obj == NULL) {
- xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
- return(NULL);
- }
- ret = xmlXPathCastToString(obj); /* this does required strdup */
- /* TODO: needs refactoring somewhere else */
- if (obj->stringval == ret)
- obj->stringval = NULL;
- xmlXPathReleaseObject(ctxt->context, obj);
- return(ret);
-}
-
-/**
- * xmlXPathPopNodeSet:
- * @ctxt: an XPath parser context
- *
- * Pops a node-set from the stack, handling conversion if needed.
- * Check error with #xmlXPathCheckError.
- *
- * Returns the node-set
- */
-xmlNodeSetPtr
-xmlXPathPopNodeSet (xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr obj;
- xmlNodeSetPtr ret;
-
- if (ctxt == NULL) return(NULL);
- if (ctxt->value == NULL) {
- xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
- return(NULL);
- }
- if (!xmlXPathStackIsNodeSet(ctxt)) {
- xmlXPathSetTypeError(ctxt);
- return(NULL);
- }
- obj = valuePop(ctxt);
- ret = obj->nodesetval;
-#if 0
- /* to fix memory leak of not clearing obj->user */
- if (obj->boolval && obj->user != NULL)
- xmlFreeNodeList((xmlNodePtr) obj->user);
-#endif
- obj->nodesetval = NULL;
- xmlXPathReleaseObject(ctxt->context, obj);
- return(ret);
-}
-
-/**
- * xmlXPathPopExternal:
- * @ctxt: an XPath parser context
- *
- * Pops an external object from the stack, handling conversion if needed.
- * Check error with #xmlXPathCheckError.
- *
- * Returns the object
- */
-void *
-xmlXPathPopExternal (xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr obj;
- void * ret;
-
- if ((ctxt == NULL) || (ctxt->value == NULL)) {
- xmlXPathSetError(ctxt, XPATH_INVALID_OPERAND);
- return(NULL);
- }
- if (ctxt->value->type != XPATH_USERS) {
- xmlXPathSetTypeError(ctxt);
- return(NULL);
- }
- obj = valuePop(ctxt);
- ret = obj->user;
- obj->user = NULL;
- xmlXPathReleaseObject(ctxt->context, obj);
- return(ret);
-}
-
-/*
- * Macros for accessing the content. Those should be used only by the parser,
- * and not exported.
- *
- * Dirty macros, i.e. one need to make assumption on the context to use them
- *
- * CUR_PTR return the current pointer to the xmlChar to be parsed.
- * CUR returns the current xmlChar value, i.e. a 8 bit value
- * in ISO-Latin or UTF-8.
- * This should be used internally by the parser
- * only to compare to ASCII values otherwise it would break when
- * running with UTF-8 encoding.
- * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
- * to compare on ASCII based substring.
- * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
- * strings within the parser.
- * CURRENT Returns the current char value, with the full decoding of
- * UTF-8 if we are using this mode. It returns an int.
- * NEXT Skip to the next character, this does the proper decoding
- * in UTF-8 mode. It also pop-up unfinished entities on the fly.
- * It returns the pointer to the current xmlChar.
- */
-
-#define CUR (*ctxt->cur)
-#define SKIP(val) ctxt->cur += (val)
-#define NXT(val) ctxt->cur[(val)]
-#define CUR_PTR ctxt->cur
-#define CUR_CHAR(l) xmlXPathCurrentChar(ctxt, &l)
-
-#define COPY_BUF(l,b,i,v) \
- if (l == 1) b[i++] = (xmlChar) v; \
- else i += xmlCopyChar(l,&b[i],v)
-
-#define NEXTL(l) ctxt->cur += l
-
-#define SKIP_BLANKS \
- while (IS_BLANK_CH(*(ctxt->cur))) NEXT
-
-#define CURRENT (*ctxt->cur)
-#define NEXT ((*ctxt->cur) ? ctxt->cur++: ctxt->cur)
-
-
-#ifndef DBL_DIG
-#define DBL_DIG 16
-#endif
-#ifndef DBL_EPSILON
-#define DBL_EPSILON 1E-9
-#endif
-
-#define UPPER_DOUBLE 1E9
-#define LOWER_DOUBLE 1E-5
-#define LOWER_DOUBLE_EXP 5
-
-#define INTEGER_DIGITS DBL_DIG
-#define FRACTION_DIGITS (DBL_DIG + 1 + (LOWER_DOUBLE_EXP))
-#define EXPONENT_DIGITS (3 + 2)
-
-/**
- * xmlXPathFormatNumber:
- * @number: number to format
- * @buffer: output buffer
- * @buffersize: size of output buffer
- *
- * Convert the number into a string representation.
- */
-static void
-xmlXPathFormatNumber(double number, char buffer[], int buffersize)
-{
- switch (xmlXPathIsInf(number)) {
- case 1:
- if (buffersize > (int)sizeof("Infinity"))
- snprintf(buffer, buffersize, "Infinity");
- break;
- case -1:
- if (buffersize > (int)sizeof("-Infinity"))
- snprintf(buffer, buffersize, "-Infinity");
- break;
- default:
- if (xmlXPathIsNaN(number)) {
- if (buffersize > (int)sizeof("NaN"))
- snprintf(buffer, buffersize, "NaN");
- } else if (number == 0 && xmlXPathGetSign(number) != 0) {
- snprintf(buffer, buffersize, "0");
- } else if ((number > INT_MIN) && (number < INT_MAX) &&
- (number == (int) number)) {
- char work[30];
- char *ptr, *cur;
- int value = (int) number;
-
- ptr = &buffer[0];
- if (value == 0) {
- *ptr++ = '0';
- } else {
- snprintf(work, 29, "%d", value);
- cur = &work[0];
- while ((*cur) && (ptr - buffer < buffersize)) {
- *ptr++ = *cur++;
- }
- }
- if (ptr - buffer < buffersize) {
- *ptr = 0;
- } else if (buffersize > 0) {
- ptr--;
- *ptr = 0;
- }
- } else {
- /*
- For the dimension of work,
- DBL_DIG is number of significant digits
- EXPONENT is only needed for "scientific notation"
- 3 is sign, decimal point, and terminating zero
- LOWER_DOUBLE_EXP is max number of leading zeroes in fraction
- Note that this dimension is slightly (a few characters)
- larger than actually necessary.
- */
- char work[DBL_DIG + EXPONENT_DIGITS + 3 + LOWER_DOUBLE_EXP];
- int integer_place, fraction_place;
- char *ptr;
- char *after_fraction;
- double absolute_value;
- int size;
-
- absolute_value = fabs(number);
-
- /*
- * First choose format - scientific or regular floating point.
- * In either case, result is in work, and after_fraction points
- * just past the fractional part.
- */
- if ( ((absolute_value > UPPER_DOUBLE) ||
- (absolute_value < LOWER_DOUBLE)) &&
- (absolute_value != 0.0) ) {
- /* Use scientific notation */
- integer_place = DBL_DIG + EXPONENT_DIGITS + 1;
- fraction_place = DBL_DIG - 1;
- size = snprintf(work, sizeof(work),"%*.*e",
- integer_place, fraction_place, number);
- while ((size > 0) && (work[size] != 'e')) size--;
-
- }
- else {
- /* Use regular notation */
- if (absolute_value > 0.0) {
- integer_place = (int)log10(absolute_value);
- if (integer_place > 0)
- fraction_place = DBL_DIG - integer_place - 1;
- else
- fraction_place = DBL_DIG - integer_place;
- } else {
- fraction_place = 1;
- }
- size = snprintf(work, sizeof(work), "%0.*f",
- fraction_place, number);
- }
-
- /* Remove leading spaces sometimes inserted by snprintf */
- while (work[0] == ' ') {
- for (ptr = &work[0];(ptr[0] = ptr[1]);ptr++);
- size--;
- }
-
- /* Remove fractional trailing zeroes */
- after_fraction = work + size;
- ptr = after_fraction;
- while (*(--ptr) == '0')
- ;
- if (*ptr != '.')
- ptr++;
- while ((*ptr++ = *after_fraction++) != 0);
-
- /* Finally copy result back to caller */
- size = strlen(work) + 1;
- if (size > buffersize) {
- work[buffersize - 1] = 0;
- size = buffersize;
- }
- memmove(buffer, work, size);
- }
- break;
- }
-}
-
-
-/************************************************************************
- * *
- * Routines to handle NodeSets *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathOrderDocElems:
- * @doc: an input document
- *
- * Call this routine to speed up XPath computation on static documents.
- * This stamps all the element nodes with the document order
- * Like for line information, the order is kept in the element->content
- * field, the value stored is actually - the node number (starting at -1)
- * to be able to differentiate from line numbers.
- *
- * Returns the number of elements found in the document or -1 in case
- * of error.
- */
-long
-xmlXPathOrderDocElems(xmlDocPtr doc) {
- long count = 0;
- xmlNodePtr cur;
-
- if (doc == NULL)
- return(-1);
- cur = doc->children;
- while (cur != NULL) {
- if (cur->type == XML_ELEMENT_NODE) {
- cur->content = (void *) (-(++count));
- if (cur->children != NULL) {
- cur = cur->children;
- continue;
- }
- }
- if (cur->next != NULL) {
- cur = cur->next;
- continue;
- }
- do {
- cur = cur->parent;
- if (cur == NULL)
- break;
- if (cur == (xmlNodePtr) doc) {
- cur = NULL;
- break;
- }
- if (cur->next != NULL) {
- cur = cur->next;
- break;
- }
- } while (cur != NULL);
- }
- return(count);
-}
-
-/**
- * xmlXPathCmpNodes:
- * @node1: the first node
- * @node2: the second node
- *
- * Compare two nodes w.r.t document order
- *
- * Returns -2 in case of error 1 if first point < second point, 0 if
- * it's the same node, -1 otherwise
- */
-int
-xmlXPathCmpNodes(xmlNodePtr node1, xmlNodePtr node2) {
- int depth1, depth2;
- int attr1 = 0, attr2 = 0;
- xmlNodePtr attrNode1 = NULL, attrNode2 = NULL;
- xmlNodePtr cur, root;
-
- if ((node1 == NULL) || (node2 == NULL))
- return(-2);
- /*
- * a couple of optimizations which will avoid computations in most cases
- */
- if (node1 == node2) /* trivial case */
- return(0);
- if (node1->type == XML_ATTRIBUTE_NODE) {
- attr1 = 1;
- attrNode1 = node1;
- node1 = node1->parent;
- }
- if (node2->type == XML_ATTRIBUTE_NODE) {
- attr2 = 1;
- attrNode2 = node2;
- node2 = node2->parent;
- }
- if (node1 == node2) {
- if (attr1 == attr2) {
- /* not required, but we keep attributes in order */
- if (attr1 != 0) {
- cur = attrNode2->prev;
- while (cur != NULL) {
- if (cur == attrNode1)
- return (1);
- cur = cur->prev;
- }
- return (-1);
- }
- return(0);
- }
- if (attr2 == 1)
- return(1);
- return(-1);
- }
- if ((node1->type == XML_NAMESPACE_DECL) ||
- (node2->type == XML_NAMESPACE_DECL))
- return(1);
- if (node1 == node2->prev)
- return(1);
- if (node1 == node2->next)
- return(-1);
-
- /*
- * Speedup using document order if availble.
- */
- if ((node1->type == XML_ELEMENT_NODE) &&
- (node2->type == XML_ELEMENT_NODE) &&
- (0 > (long) node1->content) &&
- (0 > (long) node2->content) &&
- (node1->doc == node2->doc)) {
- long l1, l2;
-
- l1 = -((long) node1->content);
- l2 = -((long) node2->content);
- if (l1 < l2)
- return(1);
- if (l1 > l2)
- return(-1);
- }
-
- /*
- * compute depth to root
- */
- for (depth2 = 0, cur = node2;cur->parent != NULL;cur = cur->parent) {
- if (cur->parent == node1)
- return(1);
- depth2++;
- }
- root = cur;
- for (depth1 = 0, cur = node1;cur->parent != NULL;cur = cur->parent) {
- if (cur->parent == node2)
- return(-1);
- depth1++;
- }
- /*
- * Distinct document (or distinct entities :-( ) case.
- */
- if (root != cur) {
- return(-2);
- }
- /*
- * get the nearest common ancestor.
- */
- while (depth1 > depth2) {
- depth1--;
- node1 = node1->parent;
- }
- while (depth2 > depth1) {
- depth2--;
- node2 = node2->parent;
- }
- while (node1->parent != node2->parent) {
- node1 = node1->parent;
- node2 = node2->parent;
- /* should not happen but just in case ... */
- if ((node1 == NULL) || (node2 == NULL))
- return(-2);
- }
- /*
- * Find who's first.
- */
- if (node1 == node2->prev)
- return(1);
- if (node1 == node2->next)
- return(-1);
- /*
- * Speedup using document order if availble.
- */
- if ((node1->type == XML_ELEMENT_NODE) &&
- (node2->type == XML_ELEMENT_NODE) &&
- (0 > (long) node1->content) &&
- (0 > (long) node2->content) &&
- (node1->doc == node2->doc)) {
- long l1, l2;
-
- l1 = -((long) node1->content);
- l2 = -((long) node2->content);
- if (l1 < l2)
- return(1);
- if (l1 > l2)
- return(-1);
- }
-
- for (cur = node1->next;cur != NULL;cur = cur->next)
- if (cur == node2)
- return(1);
- return(-1); /* assume there is no sibling list corruption */
-}
-
-/**
- * xmlXPathNodeSetSort:
- * @set: the node set
- *
- * Sort the node set in document order
- */
-void
-xmlXPathNodeSetSort(xmlNodeSetPtr set) {
-#ifndef WITH_TIM_SORT
- int i, j, incr, len;
- xmlNodePtr tmp;
-#endif
-
- if (set == NULL)
- return;
-
-#ifndef WITH_TIM_SORT
- /*
- * Use the old Shell's sort implementation to sort the node-set
- * Timsort ought to be quite faster
- */
- len = set->nodeNr;
- for (incr = len / 2; incr > 0; incr /= 2) {
- for (i = incr; i < len; i++) {
- j = i - incr;
- while (j >= 0) {
-#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON
- if (xmlXPathCmpNodesExt(set->nodeTab[j],
- set->nodeTab[j + incr]) == -1)
-#else
- if (xmlXPathCmpNodes(set->nodeTab[j],
- set->nodeTab[j + incr]) == -1)
-#endif
- {
- tmp = set->nodeTab[j];
- set->nodeTab[j] = set->nodeTab[j + incr];
- set->nodeTab[j + incr] = tmp;
- j -= incr;
- } else
- break;
- }
- }
- }
-#else /* WITH_TIM_SORT */
- libxml_domnode_tim_sort(set->nodeTab, set->nodeNr);
-#endif /* WITH_TIM_SORT */
-}
-
-#define XML_NODESET_DEFAULT 10
-/**
- * xmlXPathNodeSetDupNs:
- * @node: the parent node of the namespace XPath node
- * @ns: the libxml namespace declaration node.
- *
- * Namespace node in libxml don't match the XPath semantic. In a node set
- * the namespace nodes are duplicated and the next pointer is set to the
- * parent node in the XPath semantic.
- *
- * Returns the newly created object.
- */
-static xmlNodePtr
-xmlXPathNodeSetDupNs(xmlNodePtr node, xmlNsPtr ns) {
- xmlNsPtr cur;
-
- if ((ns == NULL) || (ns->type != XML_NAMESPACE_DECL))
- return(NULL);
- if ((node == NULL) || (node->type == XML_NAMESPACE_DECL))
- return((xmlNodePtr) ns);
-
- /*
- * Allocate a new Namespace and fill the fields.
- */
- cur = (xmlNsPtr) xmlMalloc(sizeof(xmlNs));
- if (cur == NULL) {
- xmlXPathErrMemory(NULL, "duplicating namespace\n");
- return(NULL);
- }
- memset(cur, 0, sizeof(xmlNs));
- cur->type = XML_NAMESPACE_DECL;
- if (ns->href != NULL)
- cur->href = xmlStrdup(ns->href);
- if (ns->prefix != NULL)
- cur->prefix = xmlStrdup(ns->prefix);
- cur->next = (xmlNsPtr) node;
- return((xmlNodePtr) cur);
-}
-
-/**
- * xmlXPathNodeSetFreeNs:
- * @ns: the XPath namespace node found in a nodeset.
- *
- * Namespace nodes in libxml don't match the XPath semantic. In a node set
- * the namespace nodes are duplicated and the next pointer is set to the
- * parent node in the XPath semantic. Check if such a node needs to be freed
- */
-void
-xmlXPathNodeSetFreeNs(xmlNsPtr ns) {
- if ((ns == NULL) || (ns->type != XML_NAMESPACE_DECL))
- return;
-
- if ((ns->next != NULL) && (ns->next->type != XML_NAMESPACE_DECL)) {
- if (ns->href != NULL)
- xmlFree((xmlChar *)ns->href);
- if (ns->prefix != NULL)
- xmlFree((xmlChar *)ns->prefix);
- xmlFree(ns);
- }
-}
-
-/**
- * xmlXPathNodeSetCreate:
- * @val: an initial xmlNodePtr, or NULL
- *
- * Create a new xmlNodeSetPtr of type double and of value @val
- *
- * Returns the newly created object.
- */
-xmlNodeSetPtr
-xmlXPathNodeSetCreate(xmlNodePtr val) {
- xmlNodeSetPtr ret;
-
- ret = (xmlNodeSetPtr) xmlMalloc(sizeof(xmlNodeSet));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating nodeset\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlNodeSet));
- if (val != NULL) {
- ret->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
- sizeof(xmlNodePtr));
- if (ret->nodeTab == NULL) {
- xmlXPathErrMemory(NULL, "creating nodeset\n");
- xmlFree(ret);
- return(NULL);
- }
- memset(ret->nodeTab, 0 ,
- XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
- ret->nodeMax = XML_NODESET_DEFAULT;
- if (val->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) val;
-
- ret->nodeTab[ret->nodeNr++] =
- xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
- } else
- ret->nodeTab[ret->nodeNr++] = val;
- }
- return(ret);
-}
-
-/**
- * xmlXPathNodeSetCreateSize:
- * @size: the initial size of the set
- *
- * Create a new xmlNodeSetPtr of type double and of value @val
- *
- * Returns the newly created object.
- */
-static xmlNodeSetPtr
-xmlXPathNodeSetCreateSize(int size) {
- xmlNodeSetPtr ret;
-
- ret = (xmlNodeSetPtr) xmlMalloc(sizeof(xmlNodeSet));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating nodeset\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlNodeSet));
- if (size < XML_NODESET_DEFAULT)
- size = XML_NODESET_DEFAULT;
- ret->nodeTab = (xmlNodePtr *) xmlMalloc(size * sizeof(xmlNodePtr));
- if (ret->nodeTab == NULL) {
- xmlXPathErrMemory(NULL, "creating nodeset\n");
- xmlFree(ret);
- return(NULL);
- }
- memset(ret->nodeTab, 0 , size * (size_t) sizeof(xmlNodePtr));
- ret->nodeMax = size;
- return(ret);
-}
-
-/**
- * xmlXPathNodeSetContains:
- * @cur: the node-set
- * @val: the node
- *
- * checks whether @cur contains @val
- *
- * Returns true (1) if @cur contains @val, false (0) otherwise
- */
-int
-xmlXPathNodeSetContains (xmlNodeSetPtr cur, xmlNodePtr val) {
- int i;
-
- if ((cur == NULL) || (val == NULL)) return(0);
- if (val->type == XML_NAMESPACE_DECL) {
- for (i = 0; i < cur->nodeNr; i++) {
- if (cur->nodeTab[i]->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns1, ns2;
-
- ns1 = (xmlNsPtr) val;
- ns2 = (xmlNsPtr) cur->nodeTab[i];
- if (ns1 == ns2)
- return(1);
- if ((ns1->next != NULL) && (ns2->next == ns1->next) &&
- (xmlStrEqual(ns1->prefix, ns2->prefix)))
- return(1);
- }
- }
- } else {
- for (i = 0; i < cur->nodeNr; i++) {
- if (cur->nodeTab[i] == val)
- return(1);
- }
- }
- return(0);
-}
-
-/**
- * xmlXPathNodeSetAddNs:
- * @cur: the initial node set
- * @node: the hosting node
- * @ns: a the namespace node
- *
- * add a new namespace node to an existing NodeSet
- *
- * Returns 0 in case of success and -1 in case of error
- */
-int
-xmlXPathNodeSetAddNs(xmlNodeSetPtr cur, xmlNodePtr node, xmlNsPtr ns) {
- int i;
-
-
- if ((cur == NULL) || (ns == NULL) || (node == NULL) ||
- (ns->type != XML_NAMESPACE_DECL) ||
- (node->type != XML_ELEMENT_NODE))
- return(-1);
-
- /* @@ with_ns to check whether namespace nodes should be looked at @@ */
- /*
- * prevent duplicates
- */
- for (i = 0;i < cur->nodeNr;i++) {
- if ((cur->nodeTab[i] != NULL) &&
- (cur->nodeTab[i]->type == XML_NAMESPACE_DECL) &&
- (((xmlNsPtr)cur->nodeTab[i])->next == (xmlNsPtr) node) &&
- (xmlStrEqual(ns->prefix, ((xmlNsPtr)cur->nodeTab[i])->prefix)))
- return(0);
- }
-
- /*
- * grow the nodeTab if needed
- */
- if (cur->nodeMax == 0) {
- cur->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
- sizeof(xmlNodePtr));
- if (cur->nodeTab == NULL) {
- xmlXPathErrMemory(NULL, "growing nodeset\n");
- return(-1);
- }
- memset(cur->nodeTab, 0 ,
- XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
- cur->nodeMax = XML_NODESET_DEFAULT;
- } else if (cur->nodeNr == cur->nodeMax) {
- xmlNodePtr *temp;
-
- if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
- xmlXPathErrMemory(NULL, "growing nodeset hit limit\n");
- return(-1);
- }
- temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
- sizeof(xmlNodePtr));
- if (temp == NULL) {
- xmlXPathErrMemory(NULL, "growing nodeset\n");
- return(-1);
- }
- cur->nodeMax *= 2;
- cur->nodeTab = temp;
- }
- cur->nodeTab[cur->nodeNr++] = xmlXPathNodeSetDupNs(node, ns);
- return(0);
-}
-
-/**
- * xmlXPathNodeSetAdd:
- * @cur: the initial node set
- * @val: a new xmlNodePtr
- *
- * add a new xmlNodePtr to an existing NodeSet
- *
- * Returns 0 in case of success, and -1 in case of error
- */
-int
-xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) {
- int i;
-
- if ((cur == NULL) || (val == NULL)) return(-1);
-
- /* @@ with_ns to check whether namespace nodes should be looked at @@ */
- /*
- * prevent duplicates
- */
- for (i = 0;i < cur->nodeNr;i++)
- if (cur->nodeTab[i] == val) return(0);
-
- /*
- * grow the nodeTab if needed
- */
- if (cur->nodeMax == 0) {
- cur->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
- sizeof(xmlNodePtr));
- if (cur->nodeTab == NULL) {
- xmlXPathErrMemory(NULL, "growing nodeset\n");
- return(-1);
- }
- memset(cur->nodeTab, 0 ,
- XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
- cur->nodeMax = XML_NODESET_DEFAULT;
- } else if (cur->nodeNr == cur->nodeMax) {
- xmlNodePtr *temp;
-
- if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
- xmlXPathErrMemory(NULL, "growing nodeset hit limit\n");
- return(-1);
- }
- temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
- sizeof(xmlNodePtr));
- if (temp == NULL) {
- xmlXPathErrMemory(NULL, "growing nodeset\n");
- return(-1);
- }
- cur->nodeMax *= 2;
- cur->nodeTab = temp;
- }
- if (val->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) val;
-
- cur->nodeTab[cur->nodeNr++] =
- xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
- } else
- cur->nodeTab[cur->nodeNr++] = val;
- return(0);
-}
-
-/**
- * xmlXPathNodeSetAddUnique:
- * @cur: the initial node set
- * @val: a new xmlNodePtr
- *
- * add a new xmlNodePtr to an existing NodeSet, optimized version
- * when we are sure the node is not already in the set.
- *
- * Returns 0 in case of success and -1 in case of failure
- */
-int
-xmlXPathNodeSetAddUnique(xmlNodeSetPtr cur, xmlNodePtr val) {
- if ((cur == NULL) || (val == NULL)) return(-1);
-
- /* @@ with_ns to check whether namespace nodes should be looked at @@ */
- /*
- * grow the nodeTab if needed
- */
- if (cur->nodeMax == 0) {
- cur->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
- sizeof(xmlNodePtr));
- if (cur->nodeTab == NULL) {
- xmlXPathErrMemory(NULL, "growing nodeset\n");
- return(-1);
- }
- memset(cur->nodeTab, 0 ,
- XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
- cur->nodeMax = XML_NODESET_DEFAULT;
- } else if (cur->nodeNr == cur->nodeMax) {
- xmlNodePtr *temp;
-
- if (cur->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
- xmlXPathErrMemory(NULL, "growing nodeset hit limit\n");
- return(-1);
- }
- temp = (xmlNodePtr *) xmlRealloc(cur->nodeTab, cur->nodeMax * 2 *
- sizeof(xmlNodePtr));
- if (temp == NULL) {
- xmlXPathErrMemory(NULL, "growing nodeset\n");
- return(-1);
- }
- cur->nodeTab = temp;
- cur->nodeMax *= 2;
- }
- if (val->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) val;
-
- cur->nodeTab[cur->nodeNr++] =
- xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
- } else
- cur->nodeTab[cur->nodeNr++] = val;
- return(0);
-}
-
-/**
- * xmlXPathNodeSetMerge:
- * @val1: the first NodeSet or NULL
- * @val2: the second NodeSet
- *
- * Merges two nodesets, all nodes from @val2 are added to @val1
- * if @val1 is NULL, a new set is created and copied from @val2
- *
- * Returns @val1 once extended or NULL in case of error.
- */
-xmlNodeSetPtr
-xmlXPathNodeSetMerge(xmlNodeSetPtr val1, xmlNodeSetPtr val2) {
- int i, j, initNr, skip;
- xmlNodePtr n1, n2;
-
- if (val2 == NULL) return(val1);
- if (val1 == NULL) {
- val1 = xmlXPathNodeSetCreate(NULL);
- if (val1 == NULL)
- return (NULL);
-#if 0
- /*
- * TODO: The optimization won't work in every case, since
- * those nasty namespace nodes need to be added with
- * xmlXPathNodeSetDupNs() to the set; thus a pure
- * memcpy is not possible.
- * If there was a flag on the nodesetval, indicating that
- * some temporary nodes are in, that would be helpfull.
- */
- /*
- * Optimization: Create an equally sized node-set
- * and memcpy the content.
- */
- val1 = xmlXPathNodeSetCreateSize(val2->nodeNr);
- if (val1 == NULL)
- return(NULL);
- if (val2->nodeNr != 0) {
- if (val2->nodeNr == 1)
- *(val1->nodeTab) = *(val2->nodeTab);
- else {
- memcpy(val1->nodeTab, val2->nodeTab,
- val2->nodeNr * sizeof(xmlNodePtr));
- }
- val1->nodeNr = val2->nodeNr;
- }
- return(val1);
-#endif
- }
-
- /* @@ with_ns to check whether namespace nodes should be looked at @@ */
- initNr = val1->nodeNr;
-
- for (i = 0;i < val2->nodeNr;i++) {
- n2 = val2->nodeTab[i];
- /*
- * check against duplicates
- */
- skip = 0;
- for (j = 0; j < initNr; j++) {
- n1 = val1->nodeTab[j];
- if (n1 == n2) {
- skip = 1;
- break;
- } else if ((n1->type == XML_NAMESPACE_DECL) &&
- (n2->type == XML_NAMESPACE_DECL)) {
- if ((((xmlNsPtr) n1)->next == ((xmlNsPtr) n2)->next) &&
- (xmlStrEqual(((xmlNsPtr) n1)->prefix,
- ((xmlNsPtr) n2)->prefix)))
- {
- skip = 1;
- break;
- }
- }
- }
- if (skip)
- continue;
-
- /*
- * grow the nodeTab if needed
- */
- if (val1->nodeMax == 0) {
- val1->nodeTab = (xmlNodePtr *) xmlMalloc(XML_NODESET_DEFAULT *
- sizeof(xmlNodePtr));
- if (val1->nodeTab == NULL) {
- xmlXPathErrMemory(NULL, "merging nodeset\n");
- return(NULL);
- }
- memset(val1->nodeTab, 0 ,
- XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
- val1->nodeMax = XML_NODESET_DEFAULT;
- } else if (val1->nodeNr == val1->nodeMax) {
- xmlNodePtr *temp;
-
- if (val1->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
- xmlXPathErrMemory(NULL, "merging nodeset hit limit\n");
- return(NULL);
- }
- temp = (xmlNodePtr *) xmlRealloc(val1->nodeTab, val1->nodeMax * 2 *
- sizeof(xmlNodePtr));
- if (temp == NULL) {
- xmlXPathErrMemory(NULL, "merging nodeset\n");
- return(NULL);
- }
- val1->nodeTab = temp;
- val1->nodeMax *= 2;
- }
- if (n2->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) n2;
-
- val1->nodeTab[val1->nodeNr++] =
- xmlXPathNodeSetDupNs((xmlNodePtr) ns->next, ns);
- } else
- val1->nodeTab[val1->nodeNr++] = n2;
- }
-
- return(val1);
-}
-
-
-/**
- * xmlXPathNodeSetMergeAndClear:
- * @set1: the first NodeSet or NULL
- * @set2: the second NodeSet
- * @hasSet2NsNodes: 1 if set2 contains namespaces nodes
- *
- * Merges two nodesets, all nodes from @set2 are added to @set1
- * if @set1 is NULL, a new set is created and copied from @set2.
- * Checks for duplicate nodes. Clears set2.
- *
- * Returns @set1 once extended or NULL in case of error.
- */
-static xmlNodeSetPtr
-xmlXPathNodeSetMergeAndClear(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
- int hasNullEntries)
-{
- if ((set1 == NULL) && (hasNullEntries == 0)) {
- /*
- * Note that doing a memcpy of the list, namespace nodes are
- * just assigned to set1, since set2 is cleared anyway.
- */
- set1 = xmlXPathNodeSetCreateSize(set2->nodeNr);
- if (set1 == NULL)
- return(NULL);
- if (set2->nodeNr != 0) {
- memcpy(set1->nodeTab, set2->nodeTab,
- set2->nodeNr * sizeof(xmlNodePtr));
- set1->nodeNr = set2->nodeNr;
- }
- } else {
- int i, j, initNbSet1;
- xmlNodePtr n1, n2;
-
- if (set1 == NULL)
- set1 = xmlXPathNodeSetCreate(NULL);
- if (set1 == NULL)
- return (NULL);
-
- initNbSet1 = set1->nodeNr;
- for (i = 0;i < set2->nodeNr;i++) {
- n2 = set2->nodeTab[i];
- /*
- * Skip NULLed entries.
- */
- if (n2 == NULL)
- continue;
- /*
- * Skip duplicates.
- */
- for (j = 0; j < initNbSet1; j++) {
- n1 = set1->nodeTab[j];
- if (n1 == n2) {
- goto skip_node;
- } else if ((n1->type == XML_NAMESPACE_DECL) &&
- (n2->type == XML_NAMESPACE_DECL))
- {
- if ((((xmlNsPtr) n1)->next == ((xmlNsPtr) n2)->next) &&
- (xmlStrEqual(((xmlNsPtr) n1)->prefix,
- ((xmlNsPtr) n2)->prefix)))
- {
- /*
- * Free the namespace node.
- */
- set2->nodeTab[i] = NULL;
- xmlXPathNodeSetFreeNs((xmlNsPtr) n2);
- goto skip_node;
- }
- }
- }
- /*
- * grow the nodeTab if needed
- */
- if (set1->nodeMax == 0) {
- set1->nodeTab = (xmlNodePtr *) xmlMalloc(
- XML_NODESET_DEFAULT * sizeof(xmlNodePtr));
- if (set1->nodeTab == NULL) {
- xmlXPathErrMemory(NULL, "merging nodeset\n");
- return(NULL);
- }
- memset(set1->nodeTab, 0,
- XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
- set1->nodeMax = XML_NODESET_DEFAULT;
- } else if (set1->nodeNr >= set1->nodeMax) {
- xmlNodePtr *temp;
-
- if (set1->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
- xmlXPathErrMemory(NULL, "merging nodeset hit limit\n");
- return(NULL);
- }
- temp = (xmlNodePtr *) xmlRealloc(
- set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
- if (temp == NULL) {
- xmlXPathErrMemory(NULL, "merging nodeset\n");
- return(NULL);
- }
- set1->nodeTab = temp;
- set1->nodeMax *= 2;
- }
- set1->nodeTab[set1->nodeNr++] = n2;
-skip_node:
- {}
- }
- }
- set2->nodeNr = 0;
- return(set1);
-}
-
-/**
- * xmlXPathNodeSetMergeAndClearNoDupls:
- * @set1: the first NodeSet or NULL
- * @set2: the second NodeSet
- * @hasSet2NsNodes: 1 if set2 contains namespaces nodes
- *
- * Merges two nodesets, all nodes from @set2 are added to @set1
- * if @set1 is NULL, a new set is created and copied from @set2.
- * Doesn't chack for duplicate nodes. Clears set2.
- *
- * Returns @set1 once extended or NULL in case of error.
- */
-static xmlNodeSetPtr
-xmlXPathNodeSetMergeAndClearNoDupls(xmlNodeSetPtr set1, xmlNodeSetPtr set2,
- int hasNullEntries)
-{
- if (set2 == NULL)
- return(set1);
- if ((set1 == NULL) && (hasNullEntries == 0)) {
- /*
- * Note that doing a memcpy of the list, namespace nodes are
- * just assigned to set1, since set2 is cleared anyway.
- */
- set1 = xmlXPathNodeSetCreateSize(set2->nodeNr);
- if (set1 == NULL)
- return(NULL);
- if (set2->nodeNr != 0) {
- memcpy(set1->nodeTab, set2->nodeTab,
- set2->nodeNr * sizeof(xmlNodePtr));
- set1->nodeNr = set2->nodeNr;
- }
- } else {
- int i;
- xmlNodePtr n2;
-
- if (set1 == NULL)
- set1 = xmlXPathNodeSetCreate(NULL);
- if (set1 == NULL)
- return (NULL);
-
- for (i = 0;i < set2->nodeNr;i++) {
- n2 = set2->nodeTab[i];
- /*
- * Skip NULLed entries.
- */
- if (n2 == NULL)
- continue;
- if (set1->nodeMax == 0) {
- set1->nodeTab = (xmlNodePtr *) xmlMalloc(
- XML_NODESET_DEFAULT * sizeof(xmlNodePtr));
- if (set1->nodeTab == NULL) {
- xmlXPathErrMemory(NULL, "merging nodeset\n");
- return(NULL);
- }
- memset(set1->nodeTab, 0,
- XML_NODESET_DEFAULT * (size_t) sizeof(xmlNodePtr));
- set1->nodeMax = XML_NODESET_DEFAULT;
- } else if (set1->nodeNr >= set1->nodeMax) {
- xmlNodePtr *temp;
-
- if (set1->nodeMax >= XPATH_MAX_NODESET_LENGTH) {
- xmlXPathErrMemory(NULL, "merging nodeset hit limit\n");
- return(NULL);
- }
- temp = (xmlNodePtr *) xmlRealloc(
- set1->nodeTab, set1->nodeMax * 2 * sizeof(xmlNodePtr));
- if (temp == NULL) {
- xmlXPathErrMemory(NULL, "merging nodeset\n");
- return(NULL);
- }
- set1->nodeTab = temp;
- set1->nodeMax *= 2;
- }
- set1->nodeTab[set1->nodeNr++] = n2;
- }
- }
- set2->nodeNr = 0;
- return(set1);
-}
-
-/**
- * xmlXPathNodeSetDel:
- * @cur: the initial node set
- * @val: an xmlNodePtr
- *
- * Removes an xmlNodePtr from an existing NodeSet
- */
-void
-xmlXPathNodeSetDel(xmlNodeSetPtr cur, xmlNodePtr val) {
- int i;
-
- if (cur == NULL) return;
- if (val == NULL) return;
-
- /*
- * find node in nodeTab
- */
- for (i = 0;i < cur->nodeNr;i++)
- if (cur->nodeTab[i] == val) break;
-
- if (i >= cur->nodeNr) { /* not found */
-#ifdef DEBUG
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathNodeSetDel: Node %s wasn't found in NodeList\n",
- val->name);
-#endif
- return;
- }
- if ((cur->nodeTab[i] != NULL) &&
- (cur->nodeTab[i]->type == XML_NAMESPACE_DECL))
- xmlXPathNodeSetFreeNs((xmlNsPtr) cur->nodeTab[i]);
- cur->nodeNr--;
- for (;i < cur->nodeNr;i++)
- cur->nodeTab[i] = cur->nodeTab[i + 1];
- cur->nodeTab[cur->nodeNr] = NULL;
-}
-
-/**
- * xmlXPathNodeSetRemove:
- * @cur: the initial node set
- * @val: the index to remove
- *
- * Removes an entry from an existing NodeSet list.
- */
-void
-xmlXPathNodeSetRemove(xmlNodeSetPtr cur, int val) {
- if (cur == NULL) return;
- if (val >= cur->nodeNr) return;
- if ((cur->nodeTab[val] != NULL) &&
- (cur->nodeTab[val]->type == XML_NAMESPACE_DECL))
- xmlXPathNodeSetFreeNs((xmlNsPtr) cur->nodeTab[val]);
- cur->nodeNr--;
- for (;val < cur->nodeNr;val++)
- cur->nodeTab[val] = cur->nodeTab[val + 1];
- cur->nodeTab[cur->nodeNr] = NULL;
-}
-
-/**
- * xmlXPathFreeNodeSet:
- * @obj: the xmlNodeSetPtr to free
- *
- * Free the NodeSet compound (not the actual nodes !).
- */
-void
-xmlXPathFreeNodeSet(xmlNodeSetPtr obj) {
- if (obj == NULL) return;
- if (obj->nodeTab != NULL) {
- int i;
-
- /* @@ with_ns to check whether namespace nodes should be looked at @@ */
- for (i = 0;i < obj->nodeNr;i++)
- if ((obj->nodeTab[i] != NULL) &&
- (obj->nodeTab[i]->type == XML_NAMESPACE_DECL))
- xmlXPathNodeSetFreeNs((xmlNsPtr) obj->nodeTab[i]);
- xmlFree(obj->nodeTab);
- }
- xmlFree(obj);
-}
-
-/**
- * xmlXPathNodeSetClearFromPos:
- * @set: the node set to be cleared
- * @pos: the start position to clear from
- *
- * Clears the list from temporary XPath objects (e.g. namespace nodes
- * are feed) starting with the entry at @pos, but does *not* free the list
- * itself. Sets the length of the list to @pos.
- */
-static void
-xmlXPathNodeSetClearFromPos(xmlNodeSetPtr set, int pos, int hasNsNodes)
-{
- if ((set == NULL) || (pos >= set->nodeNr))
- return;
- else if ((hasNsNodes)) {
- int i;
- xmlNodePtr node;
-
- for (i = pos; i < set->nodeNr; i++) {
- node = set->nodeTab[i];
- if ((node != NULL) &&
- (node->type == XML_NAMESPACE_DECL))
- xmlXPathNodeSetFreeNs((xmlNsPtr) node);
- }
- }
- set->nodeNr = pos;
-}
-
-/**
- * xmlXPathNodeSetClear:
- * @set: the node set to clear
- *
- * Clears the list from all temporary XPath objects (e.g. namespace nodes
- * are feed), but does *not* free the list itself. Sets the length of the
- * list to 0.
- */
-static void
-xmlXPathNodeSetClear(xmlNodeSetPtr set, int hasNsNodes)
-{
- xmlXPathNodeSetClearFromPos(set, 0, hasNsNodes);
-}
-
-/**
- * xmlXPathNodeSetKeepLast:
- * @set: the node set to be cleared
- *
- * Move the last node to the first position and clear temporary XPath objects
- * (e.g. namespace nodes) from all other nodes. Sets the length of the list
- * to 1.
- */
-static void
-xmlXPathNodeSetKeepLast(xmlNodeSetPtr set)
-{
- int i;
- xmlNodePtr node;
-
- if ((set == NULL) || (set->nodeNr <= 1))
- return;
- for (i = 0; i < set->nodeNr - 1; i++) {
- node = set->nodeTab[i];
- if ((node != NULL) &&
- (node->type == XML_NAMESPACE_DECL))
- xmlXPathNodeSetFreeNs((xmlNsPtr) node);
- }
- set->nodeTab[0] = set->nodeTab[set->nodeNr-1];
- set->nodeNr = 1;
-}
-
-/**
- * xmlXPathFreeValueTree:
- * @obj: the xmlNodeSetPtr to free
- *
- * Free the NodeSet compound and the actual tree, this is different
- * from xmlXPathFreeNodeSet()
- */
-static void
-xmlXPathFreeValueTree(xmlNodeSetPtr obj) {
- int i;
-
- if (obj == NULL) return;
-
- if (obj->nodeTab != NULL) {
- for (i = 0;i < obj->nodeNr;i++) {
- if (obj->nodeTab[i] != NULL) {
- if (obj->nodeTab[i]->type == XML_NAMESPACE_DECL) {
- xmlXPathNodeSetFreeNs((xmlNsPtr) obj->nodeTab[i]);
- } else {
- xmlFreeNodeList(obj->nodeTab[i]);
- }
- }
- }
- xmlFree(obj->nodeTab);
- }
- xmlFree(obj);
-}
-
-#if defined(DEBUG) || defined(DEBUG_STEP)
-/**
- * xmlGenericErrorContextNodeSet:
- * @output: a FILE * for the output
- * @obj: the xmlNodeSetPtr to display
- *
- * Quick display of a NodeSet
- */
-void
-xmlGenericErrorContextNodeSet(FILE *output, xmlNodeSetPtr obj) {
- int i;
-
- if (output == NULL) output = xmlGenericErrorContext;
- if (obj == NULL) {
- fprintf(output, "NodeSet == NULL !\n");
- return;
- }
- if (obj->nodeNr == 0) {
- fprintf(output, "NodeSet is empty\n");
- return;
- }
- if (obj->nodeTab == NULL) {
- fprintf(output, " nodeTab == NULL !\n");
- return;
- }
- for (i = 0; i < obj->nodeNr; i++) {
- if (obj->nodeTab[i] == NULL) {
- fprintf(output, " NULL !\n");
- return;
- }
- if ((obj->nodeTab[i]->type == XML_DOCUMENT_NODE) ||
- (obj->nodeTab[i]->type == XML_HTML_DOCUMENT_NODE))
- fprintf(output, " /");
- else if (obj->nodeTab[i]->name == NULL)
- fprintf(output, " noname!");
- else fprintf(output, " %s", obj->nodeTab[i]->name);
- }
- fprintf(output, "\n");
-}
-#endif
-
-/**
- * xmlXPathNewNodeSet:
- * @val: the NodePtr value
- *
- * Create a new xmlXPathObjectPtr of type NodeSet and initialize
- * it with the single Node @val
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathNewNodeSet(xmlNodePtr val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating nodeset\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_NODESET;
- ret->boolval = 0;
- ret->nodesetval = xmlXPathNodeSetCreate(val);
- /* @@ with_ns to check whether namespace nodes should be looked at @@ */
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_NODESET);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathNewValueTree:
- * @val: the NodePtr value
- *
- * Create a new xmlXPathObjectPtr of type Value Tree (XSLT) and initialize
- * it with the tree root @val
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathNewValueTree(xmlNodePtr val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating result value tree\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_XSLT_TREE;
- ret->boolval = 1;
- ret->user = (void *) val;
- ret->nodesetval = xmlXPathNodeSetCreate(val);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_XSLT_TREE);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathNewNodeSetList:
- * @val: an existing NodeSet
- *
- * Create a new xmlXPathObjectPtr of type NodeSet and initialize
- * it with the Nodeset @val
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathNewNodeSetList(xmlNodeSetPtr val)
-{
- xmlXPathObjectPtr ret;
- int i;
-
- if (val == NULL)
- ret = NULL;
- else if (val->nodeTab == NULL)
- ret = xmlXPathNewNodeSet(NULL);
- else {
- ret = xmlXPathNewNodeSet(val->nodeTab[0]);
- if (ret) {
- for (i = 1; i < val->nodeNr; ++i) {
- if (xmlXPathNodeSetAddUnique(ret->nodesetval, val->nodeTab[i])
- < 0) break;
- }
- }
- }
-
- return (ret);
-}
-
-/**
- * xmlXPathWrapNodeSet:
- * @val: the NodePtr value
- *
- * Wrap the Nodeset @val in a new xmlXPathObjectPtr
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathWrapNodeSet(xmlNodeSetPtr val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating node set object\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_NODESET;
- ret->nodesetval = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_NODESET);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathFreeNodeSetList:
- * @obj: an existing NodeSetList object
- *
- * Free up the xmlXPathObjectPtr @obj but don't deallocate the objects in
- * the list contrary to xmlXPathFreeObject().
- */
-void
-xmlXPathFreeNodeSetList(xmlXPathObjectPtr obj) {
- if (obj == NULL) return;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageReleased(NULL, obj->type);
-#endif
- xmlFree(obj);
-}
-
-/**
- * xmlXPathDifference:
- * @nodes1: a node-set
- * @nodes2: a node-set
- *
- * Implements the EXSLT - Sets difference() function:
- * node-set set:difference (node-set, node-set)
- *
- * Returns the difference between the two node sets, or nodes1 if
- * nodes2 is empty
- */
-xmlNodeSetPtr
-xmlXPathDifference (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
- xmlNodeSetPtr ret;
- int i, l1;
- xmlNodePtr cur;
-
- if (xmlXPathNodeSetIsEmpty(nodes2))
- return(nodes1);
-
- ret = xmlXPathNodeSetCreate(NULL);
- if (xmlXPathNodeSetIsEmpty(nodes1))
- return(ret);
-
- l1 = xmlXPathNodeSetGetLength(nodes1);
-
- for (i = 0; i < l1; i++) {
- cur = xmlXPathNodeSetItem(nodes1, i);
- if (!xmlXPathNodeSetContains(nodes2, cur)) {
- if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
- break;
- }
- }
- return(ret);
-}
-
-/**
- * xmlXPathIntersection:
- * @nodes1: a node-set
- * @nodes2: a node-set
- *
- * Implements the EXSLT - Sets intersection() function:
- * node-set set:intersection (node-set, node-set)
- *
- * Returns a node set comprising the nodes that are within both the
- * node sets passed as arguments
- */
-xmlNodeSetPtr
-xmlXPathIntersection (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
- xmlNodeSetPtr ret = xmlXPathNodeSetCreate(NULL);
- int i, l1;
- xmlNodePtr cur;
-
- if (ret == NULL)
- return(ret);
- if (xmlXPathNodeSetIsEmpty(nodes1))
- return(ret);
- if (xmlXPathNodeSetIsEmpty(nodes2))
- return(ret);
-
- l1 = xmlXPathNodeSetGetLength(nodes1);
-
- for (i = 0; i < l1; i++) {
- cur = xmlXPathNodeSetItem(nodes1, i);
- if (xmlXPathNodeSetContains(nodes2, cur)) {
- if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
- break;
- }
- }
- return(ret);
-}
-
-/**
- * xmlXPathDistinctSorted:
- * @nodes: a node-set, sorted by document order
- *
- * Implements the EXSLT - Sets distinct() function:
- * node-set set:distinct (node-set)
- *
- * Returns a subset of the nodes contained in @nodes, or @nodes if
- * it is empty
- */
-xmlNodeSetPtr
-xmlXPathDistinctSorted (xmlNodeSetPtr nodes) {
- xmlNodeSetPtr ret;
- xmlHashTablePtr hash;
- int i, l;
- xmlChar * strval;
- xmlNodePtr cur;
-
- if (xmlXPathNodeSetIsEmpty(nodes))
- return(nodes);
-
- ret = xmlXPathNodeSetCreate(NULL);
- if (ret == NULL)
- return(ret);
- l = xmlXPathNodeSetGetLength(nodes);
- hash = xmlHashCreate (l);
- for (i = 0; i < l; i++) {
- cur = xmlXPathNodeSetItem(nodes, i);
- strval = xmlXPathCastNodeToString(cur);
- if (xmlHashLookup(hash, strval) == NULL) {
- xmlHashAddEntry(hash, strval, strval);
- if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
- break;
- } else {
- xmlFree(strval);
- }
- }
- xmlHashFree(hash, (xmlHashDeallocator) xmlFree);
- return(ret);
-}
-
-/**
- * xmlXPathDistinct:
- * @nodes: a node-set
- *
- * Implements the EXSLT - Sets distinct() function:
- * node-set set:distinct (node-set)
- * @nodes is sorted by document order, then #exslSetsDistinctSorted
- * is called with the sorted node-set
- *
- * Returns a subset of the nodes contained in @nodes, or @nodes if
- * it is empty
- */
-xmlNodeSetPtr
-xmlXPathDistinct (xmlNodeSetPtr nodes) {
- if (xmlXPathNodeSetIsEmpty(nodes))
- return(nodes);
-
- xmlXPathNodeSetSort(nodes);
- return(xmlXPathDistinctSorted(nodes));
-}
-
-/**
- * xmlXPathHasSameNodes:
- * @nodes1: a node-set
- * @nodes2: a node-set
- *
- * Implements the EXSLT - Sets has-same-nodes function:
- * boolean set:has-same-node(node-set, node-set)
- *
- * Returns true (1) if @nodes1 shares any node with @nodes2, false (0)
- * otherwise
- */
-int
-xmlXPathHasSameNodes (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
- int i, l;
- xmlNodePtr cur;
-
- if (xmlXPathNodeSetIsEmpty(nodes1) ||
- xmlXPathNodeSetIsEmpty(nodes2))
- return(0);
-
- l = xmlXPathNodeSetGetLength(nodes1);
- for (i = 0; i < l; i++) {
- cur = xmlXPathNodeSetItem(nodes1, i);
- if (xmlXPathNodeSetContains(nodes2, cur))
- return(1);
- }
- return(0);
-}
-
-/**
- * xmlXPathNodeLeadingSorted:
- * @nodes: a node-set, sorted by document order
- * @node: a node
- *
- * Implements the EXSLT - Sets leading() function:
- * node-set set:leading (node-set, node-set)
- *
- * Returns the nodes in @nodes that precede @node in document order,
- * @nodes if @node is NULL or an empty node-set if @nodes
- * doesn't contain @node
- */
-xmlNodeSetPtr
-xmlXPathNodeLeadingSorted (xmlNodeSetPtr nodes, xmlNodePtr node) {
- int i, l;
- xmlNodePtr cur;
- xmlNodeSetPtr ret;
-
- if (node == NULL)
- return(nodes);
-
- ret = xmlXPathNodeSetCreate(NULL);
- if (ret == NULL)
- return(ret);
- if (xmlXPathNodeSetIsEmpty(nodes) ||
- (!xmlXPathNodeSetContains(nodes, node)))
- return(ret);
-
- l = xmlXPathNodeSetGetLength(nodes);
- for (i = 0; i < l; i++) {
- cur = xmlXPathNodeSetItem(nodes, i);
- if (cur == node)
- break;
- if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
- break;
- }
- return(ret);
-}
-
-/**
- * xmlXPathNodeLeading:
- * @nodes: a node-set
- * @node: a node
- *
- * Implements the EXSLT - Sets leading() function:
- * node-set set:leading (node-set, node-set)
- * @nodes is sorted by document order, then #exslSetsNodeLeadingSorted
- * is called.
- *
- * Returns the nodes in @nodes that precede @node in document order,
- * @nodes if @node is NULL or an empty node-set if @nodes
- * doesn't contain @node
- */
-xmlNodeSetPtr
-xmlXPathNodeLeading (xmlNodeSetPtr nodes, xmlNodePtr node) {
- xmlXPathNodeSetSort(nodes);
- return(xmlXPathNodeLeadingSorted(nodes, node));
-}
-
-/**
- * xmlXPathLeadingSorted:
- * @nodes1: a node-set, sorted by document order
- * @nodes2: a node-set, sorted by document order
- *
- * Implements the EXSLT - Sets leading() function:
- * node-set set:leading (node-set, node-set)
- *
- * Returns the nodes in @nodes1 that precede the first node in @nodes2
- * in document order, @nodes1 if @nodes2 is NULL or empty or
- * an empty node-set if @nodes1 doesn't contain @nodes2
- */
-xmlNodeSetPtr
-xmlXPathLeadingSorted (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
- if (xmlXPathNodeSetIsEmpty(nodes2))
- return(nodes1);
- return(xmlXPathNodeLeadingSorted(nodes1,
- xmlXPathNodeSetItem(nodes2, 1)));
-}
-
-/**
- * xmlXPathLeading:
- * @nodes1: a node-set
- * @nodes2: a node-set
- *
- * Implements the EXSLT - Sets leading() function:
- * node-set set:leading (node-set, node-set)
- * @nodes1 and @nodes2 are sorted by document order, then
- * #exslSetsLeadingSorted is called.
- *
- * Returns the nodes in @nodes1 that precede the first node in @nodes2
- * in document order, @nodes1 if @nodes2 is NULL or empty or
- * an empty node-set if @nodes1 doesn't contain @nodes2
- */
-xmlNodeSetPtr
-xmlXPathLeading (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
- if (xmlXPathNodeSetIsEmpty(nodes2))
- return(nodes1);
- if (xmlXPathNodeSetIsEmpty(nodes1))
- return(xmlXPathNodeSetCreate(NULL));
- xmlXPathNodeSetSort(nodes1);
- xmlXPathNodeSetSort(nodes2);
- return(xmlXPathNodeLeadingSorted(nodes1,
- xmlXPathNodeSetItem(nodes2, 1)));
-}
-
-/**
- * xmlXPathNodeTrailingSorted:
- * @nodes: a node-set, sorted by document order
- * @node: a node
- *
- * Implements the EXSLT - Sets trailing() function:
- * node-set set:trailing (node-set, node-set)
- *
- * Returns the nodes in @nodes that follow @node in document order,
- * @nodes if @node is NULL or an empty node-set if @nodes
- * doesn't contain @node
- */
-xmlNodeSetPtr
-xmlXPathNodeTrailingSorted (xmlNodeSetPtr nodes, xmlNodePtr node) {
- int i, l;
- xmlNodePtr cur;
- xmlNodeSetPtr ret;
-
- if (node == NULL)
- return(nodes);
-
- ret = xmlXPathNodeSetCreate(NULL);
- if (ret == NULL)
- return(ret);
- if (xmlXPathNodeSetIsEmpty(nodes) ||
- (!xmlXPathNodeSetContains(nodes, node)))
- return(ret);
-
- l = xmlXPathNodeSetGetLength(nodes);
- for (i = l - 1; i >= 0; i--) {
- cur = xmlXPathNodeSetItem(nodes, i);
- if (cur == node)
- break;
- if (xmlXPathNodeSetAddUnique(ret, cur) < 0)
- break;
- }
- xmlXPathNodeSetSort(ret); /* bug 413451 */
- return(ret);
-}
-
-/**
- * xmlXPathNodeTrailing:
- * @nodes: a node-set
- * @node: a node
- *
- * Implements the EXSLT - Sets trailing() function:
- * node-set set:trailing (node-set, node-set)
- * @nodes is sorted by document order, then #xmlXPathNodeTrailingSorted
- * is called.
- *
- * Returns the nodes in @nodes that follow @node in document order,
- * @nodes if @node is NULL or an empty node-set if @nodes
- * doesn't contain @node
- */
-xmlNodeSetPtr
-xmlXPathNodeTrailing (xmlNodeSetPtr nodes, xmlNodePtr node) {
- xmlXPathNodeSetSort(nodes);
- return(xmlXPathNodeTrailingSorted(nodes, node));
-}
-
-/**
- * xmlXPathTrailingSorted:
- * @nodes1: a node-set, sorted by document order
- * @nodes2: a node-set, sorted by document order
- *
- * Implements the EXSLT - Sets trailing() function:
- * node-set set:trailing (node-set, node-set)
- *
- * Returns the nodes in @nodes1 that follow the first node in @nodes2
- * in document order, @nodes1 if @nodes2 is NULL or empty or
- * an empty node-set if @nodes1 doesn't contain @nodes2
- */
-xmlNodeSetPtr
-xmlXPathTrailingSorted (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
- if (xmlXPathNodeSetIsEmpty(nodes2))
- return(nodes1);
- return(xmlXPathNodeTrailingSorted(nodes1,
- xmlXPathNodeSetItem(nodes2, 0)));
-}
-
-/**
- * xmlXPathTrailing:
- * @nodes1: a node-set
- * @nodes2: a node-set
- *
- * Implements the EXSLT - Sets trailing() function:
- * node-set set:trailing (node-set, node-set)
- * @nodes1 and @nodes2 are sorted by document order, then
- * #xmlXPathTrailingSorted is called.
- *
- * Returns the nodes in @nodes1 that follow the first node in @nodes2
- * in document order, @nodes1 if @nodes2 is NULL or empty or
- * an empty node-set if @nodes1 doesn't contain @nodes2
- */
-xmlNodeSetPtr
-xmlXPathTrailing (xmlNodeSetPtr nodes1, xmlNodeSetPtr nodes2) {
- if (xmlXPathNodeSetIsEmpty(nodes2))
- return(nodes1);
- if (xmlXPathNodeSetIsEmpty(nodes1))
- return(xmlXPathNodeSetCreate(NULL));
- xmlXPathNodeSetSort(nodes1);
- xmlXPathNodeSetSort(nodes2);
- return(xmlXPathNodeTrailingSorted(nodes1,
- xmlXPathNodeSetItem(nodes2, 0)));
-}
-
-/************************************************************************
- * *
- * Routines to handle extra functions *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathRegisterFunc:
- * @ctxt: the XPath context
- * @name: the function name
- * @f: the function implementation or NULL
- *
- * Register a new function. If @f is NULL it unregisters the function
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-xmlXPathRegisterFunc(xmlXPathContextPtr ctxt, const xmlChar *name,
- xmlXPathFunction f) {
- return(xmlXPathRegisterFuncNS(ctxt, name, NULL, f));
-}
-
-/**
- * xmlXPathRegisterFuncNS:
- * @ctxt: the XPath context
- * @name: the function name
- * @ns_uri: the function namespace URI
- * @f: the function implementation or NULL
- *
- * Register a new function. If @f is NULL it unregisters the function
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-xmlXPathRegisterFuncNS(xmlXPathContextPtr ctxt, const xmlChar *name,
- const xmlChar *ns_uri, xmlXPathFunction f) {
- if (ctxt == NULL)
- return(-1);
- if (name == NULL)
- return(-1);
-
- if (ctxt->funcHash == NULL)
- ctxt->funcHash = xmlHashCreate(0);
- if (ctxt->funcHash == NULL)
- return(-1);
- if (f == NULL)
- return(xmlHashRemoveEntry2(ctxt->funcHash, name, ns_uri, NULL));
- return(xmlHashAddEntry2(ctxt->funcHash, name, ns_uri, XML_CAST_FPTR(f)));
-}
-
-/**
- * xmlXPathRegisterFuncLookup:
- * @ctxt: the XPath context
- * @f: the lookup function
- * @funcCtxt: the lookup data
- *
- * Registers an external mechanism to do function lookup.
- */
-void
-xmlXPathRegisterFuncLookup (xmlXPathContextPtr ctxt,
- xmlXPathFuncLookupFunc f,
- void *funcCtxt) {
- if (ctxt == NULL)
- return;
- ctxt->funcLookupFunc = f;
- ctxt->funcLookupData = funcCtxt;
-}
-
-/**
- * xmlXPathFunctionLookup:
- * @ctxt: the XPath context
- * @name: the function name
- *
- * Search in the Function array of the context for the given
- * function.
- *
- * Returns the xmlXPathFunction or NULL if not found
- */
-xmlXPathFunction
-xmlXPathFunctionLookup(xmlXPathContextPtr ctxt, const xmlChar *name) {
- if (ctxt == NULL)
- return (NULL);
-
- if (ctxt->funcLookupFunc != NULL) {
- xmlXPathFunction ret;
- xmlXPathFuncLookupFunc f;
-
- f = ctxt->funcLookupFunc;
- ret = f(ctxt->funcLookupData, name, NULL);
- if (ret != NULL)
- return(ret);
- }
- return(xmlXPathFunctionLookupNS(ctxt, name, NULL));
-}
-
-/**
- * xmlXPathFunctionLookupNS:
- * @ctxt: the XPath context
- * @name: the function name
- * @ns_uri: the function namespace URI
- *
- * Search in the Function array of the context for the given
- * function.
- *
- * Returns the xmlXPathFunction or NULL if not found
- */
-xmlXPathFunction
-xmlXPathFunctionLookupNS(xmlXPathContextPtr ctxt, const xmlChar *name,
- const xmlChar *ns_uri) {
- xmlXPathFunction ret;
-
- if (ctxt == NULL)
- return(NULL);
- if (name == NULL)
- return(NULL);
-
- if (ctxt->funcLookupFunc != NULL) {
- xmlXPathFuncLookupFunc f;
-
- f = ctxt->funcLookupFunc;
- ret = f(ctxt->funcLookupData, name, ns_uri);
- if (ret != NULL)
- return(ret);
- }
-
- if (ctxt->funcHash == NULL)
- return(NULL);
-
- XML_CAST_FPTR(ret) = xmlHashLookup2(ctxt->funcHash, name, ns_uri);
- return(ret);
-}
-
-/**
- * xmlXPathRegisteredFuncsCleanup:
- * @ctxt: the XPath context
- *
- * Cleanup the XPath context data associated to registered functions
- */
-void
-xmlXPathRegisteredFuncsCleanup(xmlXPathContextPtr ctxt) {
- if (ctxt == NULL)
- return;
-
- xmlHashFree(ctxt->funcHash, NULL);
- ctxt->funcHash = NULL;
-}
-
-/************************************************************************
- * *
- * Routines to handle Variables *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathRegisterVariable:
- * @ctxt: the XPath context
- * @name: the variable name
- * @value: the variable value or NULL
- *
- * Register a new variable value. If @value is NULL it unregisters
- * the variable
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-xmlXPathRegisterVariable(xmlXPathContextPtr ctxt, const xmlChar *name,
- xmlXPathObjectPtr value) {
- return(xmlXPathRegisterVariableNS(ctxt, name, NULL, value));
-}
-
-/**
- * xmlXPathRegisterVariableNS:
- * @ctxt: the XPath context
- * @name: the variable name
- * @ns_uri: the variable namespace URI
- * @value: the variable value or NULL
- *
- * Register a new variable value. If @value is NULL it unregisters
- * the variable
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-xmlXPathRegisterVariableNS(xmlXPathContextPtr ctxt, const xmlChar *name,
- const xmlChar *ns_uri,
- xmlXPathObjectPtr value) {
- if (ctxt == NULL)
- return(-1);
- if (name == NULL)
- return(-1);
-
- if (ctxt->varHash == NULL)
- ctxt->varHash = xmlHashCreate(0);
- if (ctxt->varHash == NULL)
- return(-1);
- if (value == NULL)
- return(xmlHashRemoveEntry2(ctxt->varHash, name, ns_uri,
- (xmlHashDeallocator)xmlXPathFreeObject));
- return(xmlHashUpdateEntry2(ctxt->varHash, name, ns_uri,
- (void *) value,
- (xmlHashDeallocator)xmlXPathFreeObject));
-}
-
-/**
- * xmlXPathRegisterVariableLookup:
- * @ctxt: the XPath context
- * @f: the lookup function
- * @data: the lookup data
- *
- * register an external mechanism to do variable lookup
- */
-void
-xmlXPathRegisterVariableLookup(xmlXPathContextPtr ctxt,
- xmlXPathVariableLookupFunc f, void *data) {
- if (ctxt == NULL)
- return;
- ctxt->varLookupFunc = f;
- ctxt->varLookupData = data;
-}
-
-/**
- * xmlXPathVariableLookup:
- * @ctxt: the XPath context
- * @name: the variable name
- *
- * Search in the Variable array of the context for the given
- * variable value.
- *
- * Returns a copy of the value or NULL if not found
- */
-xmlXPathObjectPtr
-xmlXPathVariableLookup(xmlXPathContextPtr ctxt, const xmlChar *name) {
- if (ctxt == NULL)
- return(NULL);
-
- if (ctxt->varLookupFunc != NULL) {
- xmlXPathObjectPtr ret;
-
- ret = ((xmlXPathVariableLookupFunc)ctxt->varLookupFunc)
- (ctxt->varLookupData, name, NULL);
- return(ret);
- }
- return(xmlXPathVariableLookupNS(ctxt, name, NULL));
-}
-
-/**
- * xmlXPathVariableLookupNS:
- * @ctxt: the XPath context
- * @name: the variable name
- * @ns_uri: the variable namespace URI
- *
- * Search in the Variable array of the context for the given
- * variable value.
- *
- * Returns the a copy of the value or NULL if not found
- */
-xmlXPathObjectPtr
-xmlXPathVariableLookupNS(xmlXPathContextPtr ctxt, const xmlChar *name,
- const xmlChar *ns_uri) {
- if (ctxt == NULL)
- return(NULL);
-
- if (ctxt->varLookupFunc != NULL) {
- xmlXPathObjectPtr ret;
-
- ret = ((xmlXPathVariableLookupFunc)ctxt->varLookupFunc)
- (ctxt->varLookupData, name, ns_uri);
- if (ret != NULL) return(ret);
- }
-
- if (ctxt->varHash == NULL)
- return(NULL);
- if (name == NULL)
- return(NULL);
-
- return(xmlXPathCacheObjectCopy(ctxt, (xmlXPathObjectPtr)
- xmlHashLookup2(ctxt->varHash, name, ns_uri)));
-}
-
-/**
- * xmlXPathRegisteredVariablesCleanup:
- * @ctxt: the XPath context
- *
- * Cleanup the XPath context data associated to registered variables
- */
-void
-xmlXPathRegisteredVariablesCleanup(xmlXPathContextPtr ctxt) {
- if (ctxt == NULL)
- return;
-
- xmlHashFree(ctxt->varHash, (xmlHashDeallocator)xmlXPathFreeObject);
- ctxt->varHash = NULL;
-}
-
-/**
- * xmlXPathRegisterNs:
- * @ctxt: the XPath context
- * @prefix: the namespace prefix cannot be NULL or empty string
- * @ns_uri: the namespace name
- *
- * Register a new namespace. If @ns_uri is NULL it unregisters
- * the namespace
- *
- * Returns 0 in case of success, -1 in case of error
- */
-int
-xmlXPathRegisterNs(xmlXPathContextPtr ctxt, const xmlChar *prefix,
- const xmlChar *ns_uri) {
- if (ctxt == NULL)
- return(-1);
- if (prefix == NULL)
- return(-1);
- if (prefix[0] == 0)
- return(-1);
-
- if (ctxt->nsHash == NULL)
- ctxt->nsHash = xmlHashCreate(10);
- if (ctxt->nsHash == NULL)
- return(-1);
- if (ns_uri == NULL)
- return(xmlHashRemoveEntry(ctxt->nsHash, prefix,
- (xmlHashDeallocator)xmlFree));
- return(xmlHashUpdateEntry(ctxt->nsHash, prefix, (void *) xmlStrdup(ns_uri),
- (xmlHashDeallocator)xmlFree));
-}
-
-/**
- * xmlXPathNsLookup:
- * @ctxt: the XPath context
- * @prefix: the namespace prefix value
- *
- * Search in the namespace declaration array of the context for the given
- * namespace name associated to the given prefix
- *
- * Returns the value or NULL if not found
- */
-const xmlChar *
-xmlXPathNsLookup(xmlXPathContextPtr ctxt, const xmlChar *prefix) {
- if (ctxt == NULL)
- return(NULL);
- if (prefix == NULL)
- return(NULL);
-
-#ifdef XML_XML_NAMESPACE
- if (xmlStrEqual(prefix, (const xmlChar *) "xml"))
- return(XML_XML_NAMESPACE);
-#endif
-
- if (ctxt->namespaces != NULL) {
- int i;
-
- for (i = 0;i < ctxt->nsNr;i++) {
- if ((ctxt->namespaces[i] != NULL) &&
- (xmlStrEqual(ctxt->namespaces[i]->prefix, prefix)))
- return(ctxt->namespaces[i]->href);
- }
- }
-
- return((const xmlChar *) xmlHashLookup(ctxt->nsHash, prefix));
-}
-
-/**
- * xmlXPathRegisteredNsCleanup:
- * @ctxt: the XPath context
- *
- * Cleanup the XPath context data associated to registered variables
- */
-void
-xmlXPathRegisteredNsCleanup(xmlXPathContextPtr ctxt) {
- if (ctxt == NULL)
- return;
-
- xmlHashFree(ctxt->nsHash, (xmlHashDeallocator)xmlFree);
- ctxt->nsHash = NULL;
-}
-
-/************************************************************************
- * *
- * Routines to handle Values *
- * *
- ************************************************************************/
-
-/* Allocations are terrible, one needs to optimize all this !!! */
-
-/**
- * xmlXPathNewFloat:
- * @val: the double value
- *
- * Create a new xmlXPathObjectPtr of type double and of value @val
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathNewFloat(double val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating float object\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_NUMBER;
- ret->floatval = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_NUMBER);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathNewBoolean:
- * @val: the boolean value
- *
- * Create a new xmlXPathObjectPtr of type boolean and of value @val
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathNewBoolean(int val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating boolean object\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_BOOLEAN;
- ret->boolval = (val != 0);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_BOOLEAN);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathNewString:
- * @val: the xmlChar * value
- *
- * Create a new xmlXPathObjectPtr of type string and of value @val
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathNewString(const xmlChar *val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating string object\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_STRING;
- if (val != NULL)
- ret->stringval = xmlStrdup(val);
- else
- ret->stringval = xmlStrdup((const xmlChar *)"");
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_STRING);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathWrapString:
- * @val: the xmlChar * value
- *
- * Wraps the @val string into an XPath object.
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathWrapString (xmlChar *val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating string object\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_STRING;
- ret->stringval = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_STRING);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathNewCString:
- * @val: the char * value
- *
- * Create a new xmlXPathObjectPtr of type string and of value @val
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathNewCString(const char *val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating string object\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_STRING;
- ret->stringval = xmlStrdup(BAD_CAST val);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_STRING);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathWrapCString:
- * @val: the char * value
- *
- * Wraps a string into an XPath object.
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathWrapCString (char * val) {
- return(xmlXPathWrapString((xmlChar *)(val)));
-}
-
-/**
- * xmlXPathWrapExternal:
- * @val: the user data
- *
- * Wraps the @val data into an XPath object.
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathWrapExternal (void *val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating user object\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_USERS;
- ret->user = val;
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, XPATH_USERS);
-#endif
- return(ret);
-}
-
-/**
- * xmlXPathObjectCopy:
- * @val: the original object
- *
- * allocate a new copy of a given object
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPathObjectCopy(xmlXPathObjectPtr val) {
- xmlXPathObjectPtr ret;
-
- if (val == NULL)
- return(NULL);
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "copying object\n");
- return(NULL);
- }
- memcpy(ret, val , (size_t) sizeof(xmlXPathObject));
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageRequested(NULL, val->type);
-#endif
- switch (val->type) {
- case XPATH_BOOLEAN:
- case XPATH_NUMBER:
- case XPATH_POINT:
- case XPATH_RANGE:
- break;
- case XPATH_STRING:
- ret->stringval = xmlStrdup(val->stringval);
- break;
- case XPATH_XSLT_TREE:
-#if 0
-/*
- Removed 11 July 2004 - the current handling of xslt tmpRVT nodes means that
- this previous handling is no longer correct, and can cause some serious
- problems (ref. bug 145547)
-*/
- if ((val->nodesetval != NULL) &&
- (val->nodesetval->nodeTab != NULL)) {
- xmlNodePtr cur, tmp;
- xmlDocPtr top;
-
- ret->boolval = 1;
- top = xmlNewDoc(NULL);
- top->name = (char *)
- xmlStrdup(val->nodesetval->nodeTab[0]->name);
- ret->user = top;
- if (top != NULL) {
- top->doc = top;
- cur = val->nodesetval->nodeTab[0]->children;
- while (cur != NULL) {
- tmp = xmlDocCopyNode(cur, top, 1);
- xmlAddChild((xmlNodePtr) top, tmp);
- cur = cur->next;
- }
- }
-
- ret->nodesetval = xmlXPathNodeSetCreate((xmlNodePtr) top);
- } else
- ret->nodesetval = xmlXPathNodeSetCreate(NULL);
- /* Deallocate the copied tree value */
- break;
-#endif
- case XPATH_NODESET:
- ret->nodesetval = xmlXPathNodeSetMerge(NULL, val->nodesetval);
- /* Do not deallocate the copied tree value */
- ret->boolval = 0;
- break;
- case XPATH_LOCATIONSET:
-#ifdef LIBXML_XPTR_ENABLED
- {
- xmlLocationSetPtr loc = val->user;
- ret->user = (void *) xmlXPtrLocationSetMerge(NULL, loc);
- break;
- }
-#endif
- case XPATH_USERS:
- ret->user = val->user;
- break;
- case XPATH_UNDEFINED:
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathObjectCopy: unsupported type %d\n",
- val->type);
- break;
- }
- return(ret);
-}
-
-/**
- * xmlXPathFreeObject:
- * @obj: the object to free
- *
- * Free up an xmlXPathObjectPtr object.
- */
-void
-xmlXPathFreeObject(xmlXPathObjectPtr obj) {
- if (obj == NULL) return;
- if ((obj->type == XPATH_NODESET) || (obj->type == XPATH_XSLT_TREE)) {
- if (obj->boolval) {
-#if 0
- if (obj->user != NULL) {
- xmlXPathFreeNodeSet(obj->nodesetval);
- xmlFreeNodeList((xmlNodePtr) obj->user);
- } else
-#endif
- obj->type = XPATH_XSLT_TREE; /* TODO: Just for debugging. */
- if (obj->nodesetval != NULL)
- xmlXPathFreeValueTree(obj->nodesetval);
- } else {
- if (obj->nodesetval != NULL)
- xmlXPathFreeNodeSet(obj->nodesetval);
- }
-#ifdef LIBXML_XPTR_ENABLED
- } else if (obj->type == XPATH_LOCATIONSET) {
- if (obj->user != NULL)
- xmlXPtrFreeLocationSet(obj->user);
-#endif
- } else if (obj->type == XPATH_STRING) {
- if (obj->stringval != NULL)
- xmlFree(obj->stringval);
- }
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageReleased(NULL, obj->type);
-#endif
- xmlFree(obj);
-}
-
-/**
- * xmlXPathReleaseObject:
- * @obj: the xmlXPathObjectPtr to free or to cache
- *
- * Depending on the state of the cache this frees the given
- * XPath object or stores it in the cache.
- */
-static void
-xmlXPathReleaseObject(xmlXPathContextPtr ctxt, xmlXPathObjectPtr obj)
-{
-#define XP_CACHE_ADD(sl, o) if (sl == NULL) { \
- sl = xmlPointerListCreate(10); if (sl == NULL) goto free_obj; } \
- if (xmlPointerListAddSize(sl, obj, 0) == -1) goto free_obj;
-
-#define XP_CACHE_WANTS(sl, n) ((sl == NULL) || ((sl)->number < n))
-
- if (obj == NULL)
- return;
- if ((ctxt == NULL) || (ctxt->cache == NULL)) {
- xmlXPathFreeObject(obj);
- } else {
- xmlXPathContextCachePtr cache =
- (xmlXPathContextCachePtr) ctxt->cache;
-
- switch (obj->type) {
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- if (obj->nodesetval != NULL) {
- if (obj->boolval) {
- /*
- * It looks like the @boolval is used for
- * evaluation if this an XSLT Result Tree Fragment.
- * TODO: Check if this assumption is correct.
- */
- obj->type = XPATH_XSLT_TREE; /* just for debugging */
- xmlXPathFreeValueTree(obj->nodesetval);
- obj->nodesetval = NULL;
- } else if ((obj->nodesetval->nodeMax <= 40) &&
- (XP_CACHE_WANTS(cache->nodesetObjs,
- cache->maxNodeset)))
- {
- XP_CACHE_ADD(cache->nodesetObjs, obj);
- goto obj_cached;
- } else {
- xmlXPathFreeNodeSet(obj->nodesetval);
- obj->nodesetval = NULL;
- }
- }
- break;
- case XPATH_STRING:
- if (obj->stringval != NULL)
- xmlFree(obj->stringval);
-
- if (XP_CACHE_WANTS(cache->stringObjs, cache->maxString)) {
- XP_CACHE_ADD(cache->stringObjs, obj);
- goto obj_cached;
- }
- break;
- case XPATH_BOOLEAN:
- if (XP_CACHE_WANTS(cache->booleanObjs, cache->maxBoolean)) {
- XP_CACHE_ADD(cache->booleanObjs, obj);
- goto obj_cached;
- }
- break;
- case XPATH_NUMBER:
- if (XP_CACHE_WANTS(cache->numberObjs, cache->maxNumber)) {
- XP_CACHE_ADD(cache->numberObjs, obj);
- goto obj_cached;
- }
- break;
-#ifdef LIBXML_XPTR_ENABLED
- case XPATH_LOCATIONSET:
- if (obj->user != NULL) {
- xmlXPtrFreeLocationSet(obj->user);
- }
- goto free_obj;
-#endif
- default:
- goto free_obj;
- }
-
- /*
- * Fallback to adding to the misc-objects slot.
- */
- if (XP_CACHE_WANTS(cache->miscObjs, cache->maxMisc)) {
- XP_CACHE_ADD(cache->miscObjs, obj);
- } else
- goto free_obj;
-
-obj_cached:
-
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageReleased(ctxt, obj->type);
-#endif
-
- if (obj->nodesetval != NULL) {
- xmlNodeSetPtr tmpset = obj->nodesetval;
-
- /*
- * TODO: Due to those nasty ns-nodes, we need to traverse
- * the list and free the ns-nodes.
- * URGENT TODO: Check if it's actually slowing things down.
- * Maybe we shouldn't try to preserve the list.
- */
- if (tmpset->nodeNr > 1) {
- int i;
- xmlNodePtr node;
-
- for (i = 0; i < tmpset->nodeNr; i++) {
- node = tmpset->nodeTab[i];
- if ((node != NULL) &&
- (node->type == XML_NAMESPACE_DECL))
- {
- xmlXPathNodeSetFreeNs((xmlNsPtr) node);
- }
- }
- } else if (tmpset->nodeNr == 1) {
- if ((tmpset->nodeTab[0] != NULL) &&
- (tmpset->nodeTab[0]->type == XML_NAMESPACE_DECL))
- xmlXPathNodeSetFreeNs((xmlNsPtr) tmpset->nodeTab[0]);
- }
- tmpset->nodeNr = 0;
- memset(obj, 0, sizeof(xmlXPathObject));
- obj->nodesetval = tmpset;
- } else
- memset(obj, 0, sizeof(xmlXPathObject));
-
- return;
-
-free_obj:
- /*
- * Cache is full; free the object.
- */
- if (obj->nodesetval != NULL)
- xmlXPathFreeNodeSet(obj->nodesetval);
-#ifdef XP_DEBUG_OBJ_USAGE
- xmlXPathDebugObjUsageReleased(NULL, obj->type);
-#endif
- xmlFree(obj);
- }
- return;
-}
-
-
-/************************************************************************
- * *
- * Type Casting Routines *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathCastBooleanToString:
- * @val: a boolean
- *
- * Converts a boolean to its string value.
- *
- * Returns a newly allocated string.
- */
-xmlChar *
-xmlXPathCastBooleanToString (int val) {
- xmlChar *ret;
- if (val)
- ret = xmlStrdup((const xmlChar *) "true");
- else
- ret = xmlStrdup((const xmlChar *) "false");
- return(ret);
-}
-
-/**
- * xmlXPathCastNumberToString:
- * @val: a number
- *
- * Converts a number to its string value.
- *
- * Returns a newly allocated string.
- */
-xmlChar *
-xmlXPathCastNumberToString (double val) {
- xmlChar *ret;
- switch (xmlXPathIsInf(val)) {
- case 1:
- ret = xmlStrdup((const xmlChar *) "Infinity");
- break;
- case -1:
- ret = xmlStrdup((const xmlChar *) "-Infinity");
- break;
- default:
- if (xmlXPathIsNaN(val)) {
- ret = xmlStrdup((const xmlChar *) "NaN");
- } else if (val == 0 && xmlXPathGetSign(val) != 0) {
- ret = xmlStrdup((const xmlChar *) "0");
- } else {
- /* could be improved */
- char buf[100];
- xmlXPathFormatNumber(val, buf, 99);
- buf[99] = 0;
- ret = xmlStrdup((const xmlChar *) buf);
- }
- }
- return(ret);
-}
-
-/**
- * xmlXPathCastNodeToString:
- * @node: a node
- *
- * Converts a node to its string value.
- *
- * Returns a newly allocated string.
- */
-xmlChar *
-xmlXPathCastNodeToString (xmlNodePtr node) {
-xmlChar *ret;
- if ((ret = xmlNodeGetContent(node)) == NULL)
- ret = xmlStrdup((const xmlChar *) "");
- return(ret);
-}
-
-/**
- * xmlXPathCastNodeSetToString:
- * @ns: a node-set
- *
- * Converts a node-set to its string value.
- *
- * Returns a newly allocated string.
- */
-xmlChar *
-xmlXPathCastNodeSetToString (xmlNodeSetPtr ns) {
- if ((ns == NULL) || (ns->nodeNr == 0) || (ns->nodeTab == NULL))
- return(xmlStrdup((const xmlChar *) ""));
-
- if (ns->nodeNr > 1)
- xmlXPathNodeSetSort(ns);
- return(xmlXPathCastNodeToString(ns->nodeTab[0]));
-}
-
-/**
- * xmlXPathCastToString:
- * @val: an XPath object
- *
- * Converts an existing object to its string() equivalent
- *
- * Returns the allocated string value of the object, NULL in case of error.
- * It's up to the caller to free the string memory with xmlFree().
- */
-xmlChar *
-xmlXPathCastToString(xmlXPathObjectPtr val) {
- xmlChar *ret = NULL;
-
- if (val == NULL)
- return(xmlStrdup((const xmlChar *) ""));
- switch (val->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext, "String: undefined\n");
-#endif
- ret = xmlStrdup((const xmlChar *) "");
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- ret = xmlXPathCastNodeSetToString(val->nodesetval);
- break;
- case XPATH_STRING:
- return(xmlStrdup(val->stringval));
- case XPATH_BOOLEAN:
- ret = xmlXPathCastBooleanToString(val->boolval);
- break;
- case XPATH_NUMBER: {
- ret = xmlXPathCastNumberToString(val->floatval);
- break;
- }
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO
- ret = xmlStrdup((const xmlChar *) "");
- break;
- }
- return(ret);
-}
-
-/**
- * xmlXPathConvertString:
- * @val: an XPath object
- *
- * Converts an existing object to its string() equivalent
- *
- * Returns the new object, the old one is freed (or the operation
- * is done directly on @val)
- */
-xmlXPathObjectPtr
-xmlXPathConvertString(xmlXPathObjectPtr val) {
- xmlChar *res = NULL;
-
- if (val == NULL)
- return(xmlXPathNewCString(""));
-
- switch (val->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext, "STRING: undefined\n");
-#endif
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- res = xmlXPathCastNodeSetToString(val->nodesetval);
- break;
- case XPATH_STRING:
- return(val);
- case XPATH_BOOLEAN:
- res = xmlXPathCastBooleanToString(val->boolval);
- break;
- case XPATH_NUMBER:
- res = xmlXPathCastNumberToString(val->floatval);
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO;
- break;
- }
- xmlXPathFreeObject(val);
- if (res == NULL)
- return(xmlXPathNewCString(""));
- return(xmlXPathWrapString(res));
-}
-
-/**
- * xmlXPathCastBooleanToNumber:
- * @val: a boolean
- *
- * Converts a boolean to its number value
- *
- * Returns the number value
- */
-double
-xmlXPathCastBooleanToNumber(int val) {
- if (val)
- return(1.0);
- return(0.0);
-}
-
-/**
- * xmlXPathCastStringToNumber:
- * @val: a string
- *
- * Converts a string to its number value
- *
- * Returns the number value
- */
-double
-xmlXPathCastStringToNumber(const xmlChar * val) {
- return(xmlXPathStringEvalNumber(val));
-}
-
-/**
- * xmlXPathCastNodeToNumber:
- * @node: a node
- *
- * Converts a node to its number value
- *
- * Returns the number value
- */
-double
-xmlXPathCastNodeToNumber (xmlNodePtr node) {
- xmlChar *strval;
- double ret;
-
- if (node == NULL)
- return(xmlXPathNAN);
- strval = xmlXPathCastNodeToString(node);
- if (strval == NULL)
- return(xmlXPathNAN);
- ret = xmlXPathCastStringToNumber(strval);
- xmlFree(strval);
-
- return(ret);
-}
-
-/**
- * xmlXPathCastNodeSetToNumber:
- * @ns: a node-set
- *
- * Converts a node-set to its number value
- *
- * Returns the number value
- */
-double
-xmlXPathCastNodeSetToNumber (xmlNodeSetPtr ns) {
- xmlChar *str;
- double ret;
-
- if (ns == NULL)
- return(xmlXPathNAN);
- str = xmlXPathCastNodeSetToString(ns);
- ret = xmlXPathCastStringToNumber(str);
- xmlFree(str);
- return(ret);
-}
-
-/**
- * xmlXPathCastToNumber:
- * @val: an XPath object
- *
- * Converts an XPath object to its number value
- *
- * Returns the number value
- */
-double
-xmlXPathCastToNumber(xmlXPathObjectPtr val) {
- double ret = 0.0;
-
- if (val == NULL)
- return(xmlXPathNAN);
- switch (val->type) {
- case XPATH_UNDEFINED:
-#ifdef DEGUB_EXPR
- xmlGenericError(xmlGenericErrorContext, "NUMBER: undefined\n");
-#endif
- ret = xmlXPathNAN;
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- ret = xmlXPathCastNodeSetToNumber(val->nodesetval);
- break;
- case XPATH_STRING:
- ret = xmlXPathCastStringToNumber(val->stringval);
- break;
- case XPATH_NUMBER:
- ret = val->floatval;
- break;
- case XPATH_BOOLEAN:
- ret = xmlXPathCastBooleanToNumber(val->boolval);
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO;
- ret = xmlXPathNAN;
- break;
- }
- return(ret);
-}
-
-/**
- * xmlXPathConvertNumber:
- * @val: an XPath object
- *
- * Converts an existing object to its number() equivalent
- *
- * Returns the new object, the old one is freed (or the operation
- * is done directly on @val)
- */
-xmlXPathObjectPtr
-xmlXPathConvertNumber(xmlXPathObjectPtr val) {
- xmlXPathObjectPtr ret;
-
- if (val == NULL)
- return(xmlXPathNewFloat(0.0));
- if (val->type == XPATH_NUMBER)
- return(val);
- ret = xmlXPathNewFloat(xmlXPathCastToNumber(val));
- xmlXPathFreeObject(val);
- return(ret);
-}
-
-/**
- * xmlXPathCastNumberToBoolean:
- * @val: a number
- *
- * Converts a number to its boolean value
- *
- * Returns the boolean value
- */
-int
-xmlXPathCastNumberToBoolean (double val) {
- if (xmlXPathIsNaN(val) || (val == 0.0))
- return(0);
- return(1);
-}
-
-/**
- * xmlXPathCastStringToBoolean:
- * @val: a string
- *
- * Converts a string to its boolean value
- *
- * Returns the boolean value
- */
-int
-xmlXPathCastStringToBoolean (const xmlChar *val) {
- if ((val == NULL) || (xmlStrlen(val) == 0))
- return(0);
- return(1);
-}
-
-/**
- * xmlXPathCastNodeSetToBoolean:
- * @ns: a node-set
- *
- * Converts a node-set to its boolean value
- *
- * Returns the boolean value
- */
-int
-xmlXPathCastNodeSetToBoolean (xmlNodeSetPtr ns) {
- if ((ns == NULL) || (ns->nodeNr == 0))
- return(0);
- return(1);
-}
-
-/**
- * xmlXPathCastToBoolean:
- * @val: an XPath object
- *
- * Converts an XPath object to its boolean value
- *
- * Returns the boolean value
- */
-int
-xmlXPathCastToBoolean (xmlXPathObjectPtr val) {
- int ret = 0;
-
- if (val == NULL)
- return(0);
- switch (val->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext, "BOOLEAN: undefined\n");
-#endif
- ret = 0;
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- ret = xmlXPathCastNodeSetToBoolean(val->nodesetval);
- break;
- case XPATH_STRING:
- ret = xmlXPathCastStringToBoolean(val->stringval);
- break;
- case XPATH_NUMBER:
- ret = xmlXPathCastNumberToBoolean(val->floatval);
- break;
- case XPATH_BOOLEAN:
- ret = val->boolval;
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO;
- ret = 0;
- break;
- }
- return(ret);
-}
-
-
-/**
- * xmlXPathConvertBoolean:
- * @val: an XPath object
- *
- * Converts an existing object to its boolean() equivalent
- *
- * Returns the new object, the old one is freed (or the operation
- * is done directly on @val)
- */
-xmlXPathObjectPtr
-xmlXPathConvertBoolean(xmlXPathObjectPtr val) {
- xmlXPathObjectPtr ret;
-
- if (val == NULL)
- return(xmlXPathNewBoolean(0));
- if (val->type == XPATH_BOOLEAN)
- return(val);
- ret = xmlXPathNewBoolean(xmlXPathCastToBoolean(val));
- xmlXPathFreeObject(val);
- return(ret);
-}
-
-/************************************************************************
- * *
- * Routines to handle XPath contexts *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathNewContext:
- * @doc: the XML document
- *
- * Create a new xmlXPathContext
- *
- * Returns the xmlXPathContext just allocated. The caller will need to free it.
- */
-xmlXPathContextPtr
-xmlXPathNewContext(xmlDocPtr doc) {
- xmlXPathContextPtr ret;
-
- ret = (xmlXPathContextPtr) xmlMalloc(sizeof(xmlXPathContext));
- if (ret == NULL) {
- xmlXPathErrMemory(NULL, "creating context\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathContext));
- ret->doc = doc;
- ret->node = NULL;
-
- ret->varHash = NULL;
-
- ret->nb_types = 0;
- ret->max_types = 0;
- ret->types = NULL;
-
- ret->funcHash = xmlHashCreate(0);
-
- ret->nb_axis = 0;
- ret->max_axis = 0;
- ret->axis = NULL;
-
- ret->nsHash = NULL;
- ret->user = NULL;
-
- ret->contextSize = -1;
- ret->proximityPosition = -1;
-
-#ifdef XP_DEFAULT_CACHE_ON
- if (xmlXPathContextSetCache(ret, 1, -1, 0) == -1) {
- xmlXPathFreeContext(ret);
- return(NULL);
- }
-#endif
-
- xmlXPathRegisterAllFunctions(ret);
-
- return(ret);
-}
-
-/**
- * xmlXPathFreeContext:
- * @ctxt: the context to free
- *
- * Free up an xmlXPathContext
- */
-void
-xmlXPathFreeContext(xmlXPathContextPtr ctxt) {
- if (ctxt == NULL) return;
-
- if (ctxt->cache != NULL)
- xmlXPathFreeCache((xmlXPathContextCachePtr) ctxt->cache);
- xmlXPathRegisteredNsCleanup(ctxt);
- xmlXPathRegisteredFuncsCleanup(ctxt);
- xmlXPathRegisteredVariablesCleanup(ctxt);
- xmlResetError(&ctxt->lastError);
- xmlFree(ctxt);
-}
-
-/************************************************************************
- * *
- * Routines to handle XPath parser contexts *
- * *
- ************************************************************************/
-
-#define CHECK_CTXT(ctxt) \
- if (ctxt == NULL) { \
- __xmlRaiseError(NULL, NULL, NULL, \
- NULL, NULL, XML_FROM_XPATH, \
- XML_ERR_INTERNAL_ERROR, XML_ERR_FATAL, \
- __FILE__, __LINE__, \
- NULL, NULL, NULL, 0, 0, \
- "NULL context pointer\n"); \
- return(NULL); \
- } \
-
-#define CHECK_CTXT_NEG(ctxt) \
- if (ctxt == NULL) { \
- __xmlRaiseError(NULL, NULL, NULL, \
- NULL, NULL, XML_FROM_XPATH, \
- XML_ERR_INTERNAL_ERROR, XML_ERR_FATAL, \
- __FILE__, __LINE__, \
- NULL, NULL, NULL, 0, 0, \
- "NULL context pointer\n"); \
- return(-1); \
- } \
-
-
-#define CHECK_CONTEXT(ctxt) \
- if ((ctxt == NULL) || (ctxt->doc == NULL) || \
- (ctxt->doc->children == NULL)) { \
- xmlXPatherror(ctxt, __FILE__, __LINE__, XPATH_INVALID_CTXT); \
- return(NULL); \
- }
-
-
-/**
- * xmlXPathNewParserContext:
- * @str: the XPath expression
- * @ctxt: the XPath context
- *
- * Create a new xmlXPathParserContext
- *
- * Returns the xmlXPathParserContext just allocated.
- */
-xmlXPathParserContextPtr
-xmlXPathNewParserContext(const xmlChar *str, xmlXPathContextPtr ctxt) {
- xmlXPathParserContextPtr ret;
-
- ret = (xmlXPathParserContextPtr) xmlMalloc(sizeof(xmlXPathParserContext));
- if (ret == NULL) {
- xmlXPathErrMemory(ctxt, "creating parser context\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathParserContext));
- ret->cur = ret->base = str;
- ret->context = ctxt;
-
- ret->comp = xmlXPathNewCompExpr();
- if (ret->comp == NULL) {
- xmlFree(ret->valueTab);
- xmlFree(ret);
- return(NULL);
- }
- if ((ctxt != NULL) && (ctxt->dict != NULL)) {
- ret->comp->dict = ctxt->dict;
- xmlDictReference(ret->comp->dict);
- }
-
- return(ret);
-}
-
-/**
- * xmlXPathCompParserContext:
- * @comp: the XPath compiled expression
- * @ctxt: the XPath context
- *
- * Create a new xmlXPathParserContext when processing a compiled expression
- *
- * Returns the xmlXPathParserContext just allocated.
- */
-static xmlXPathParserContextPtr
-xmlXPathCompParserContext(xmlXPathCompExprPtr comp, xmlXPathContextPtr ctxt) {
- xmlXPathParserContextPtr ret;
-
- ret = (xmlXPathParserContextPtr) xmlMalloc(sizeof(xmlXPathParserContext));
- if (ret == NULL) {
- xmlXPathErrMemory(ctxt, "creating evaluation context\n");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathParserContext));
-
- /* Allocate the value stack */
- ret->valueTab = (xmlXPathObjectPtr *)
- xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
- if (ret->valueTab == NULL) {
- xmlFree(ret);
- xmlXPathErrMemory(ctxt, "creating evaluation context\n");
- return(NULL);
- }
- ret->valueNr = 0;
- ret->valueMax = 10;
- ret->value = NULL;
- ret->valueFrame = 0;
-
- ret->context = ctxt;
- ret->comp = comp;
-
- return(ret);
-}
-
-/**
- * xmlXPathFreeParserContext:
- * @ctxt: the context to free
- *
- * Free up an xmlXPathParserContext
- */
-void
-xmlXPathFreeParserContext(xmlXPathParserContextPtr ctxt) {
- int i;
-
- if (ctxt->valueTab != NULL) {
- for (i = 0; i < ctxt->valueNr; i++) {
- if (ctxt->context)
- xmlXPathReleaseObject(ctxt->context, ctxt->valueTab[i]);
- else
- xmlXPathFreeObject(ctxt->valueTab[i]);
- }
- xmlFree(ctxt->valueTab);
- }
- if (ctxt->comp != NULL) {
-#ifdef XPATH_STREAMING
- if (ctxt->comp->stream != NULL) {
- xmlFreePatternList(ctxt->comp->stream);
- ctxt->comp->stream = NULL;
- }
-#endif
- xmlXPathFreeCompExpr(ctxt->comp);
- }
- xmlFree(ctxt);
-}
-
-/************************************************************************
- * *
- * The implicit core function library *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathNodeValHash:
- * @node: a node pointer
- *
- * Function computing the beginning of the string value of the node,
- * used to speed up comparisons
- *
- * Returns an int usable as a hash
- */
-static unsigned int
-xmlXPathNodeValHash(xmlNodePtr node) {
- int len = 2;
- const xmlChar * string = NULL;
- xmlNodePtr tmp = NULL;
- unsigned int ret = 0;
-
- if (node == NULL)
- return(0);
-
- if (node->type == XML_DOCUMENT_NODE) {
- tmp = xmlDocGetRootElement((xmlDocPtr) node);
- if (tmp == NULL)
- node = node->children;
- else
- node = tmp;
-
- if (node == NULL)
- return(0);
- }
-
- switch (node->type) {
- case XML_COMMENT_NODE:
- case XML_PI_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- string = node->content;
- if (string == NULL)
- return(0);
- if (string[0] == 0)
- return(0);
- return(((unsigned int) string[0]) +
- (((unsigned int) string[1]) << 8));
- case XML_NAMESPACE_DECL:
- string = ((xmlNsPtr)node)->href;
- if (string == NULL)
- return(0);
- if (string[0] == 0)
- return(0);
- return(((unsigned int) string[0]) +
- (((unsigned int) string[1]) << 8));
- case XML_ATTRIBUTE_NODE:
- tmp = ((xmlAttrPtr) node)->children;
- break;
- case XML_ELEMENT_NODE:
- tmp = node->children;
- break;
- default:
- return(0);
- }
- while (tmp != NULL) {
- switch (tmp->type) {
- case XML_COMMENT_NODE:
- case XML_PI_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- string = tmp->content;
- break;
- case XML_NAMESPACE_DECL:
- string = ((xmlNsPtr)tmp)->href;
- break;
- default:
- break;
- }
- if ((string != NULL) && (string[0] != 0)) {
- if (len == 1) {
- return(ret + (((unsigned int) string[0]) << 8));
- }
- if (string[1] == 0) {
- len = 1;
- ret = (unsigned int) string[0];
- } else {
- return(((unsigned int) string[0]) +
- (((unsigned int) string[1]) << 8));
- }
- }
- /*
- * Skip to next node
- */
- if ((tmp->children != NULL) && (tmp->type != XML_DTD_NODE)) {
- if (tmp->children->type != XML_ENTITY_DECL) {
- tmp = tmp->children;
- continue;
- }
- }
- if (tmp == node)
- break;
-
- if (tmp->next != NULL) {
- tmp = tmp->next;
- continue;
- }
-
- do {
- tmp = tmp->parent;
- if (tmp == NULL)
- break;
- if (tmp == node) {
- tmp = NULL;
- break;
- }
- if (tmp->next != NULL) {
- tmp = tmp->next;
- break;
- }
- } while (tmp != NULL);
- }
- return(ret);
-}
-
-/**
- * xmlXPathStringHash:
- * @string: a string
- *
- * Function computing the beginning of the string value of the node,
- * used to speed up comparisons
- *
- * Returns an int usable as a hash
- */
-static unsigned int
-xmlXPathStringHash(const xmlChar * string) {
- if (string == NULL)
- return((unsigned int) 0);
- if (string[0] == 0)
- return(0);
- return(((unsigned int) string[0]) +
- (((unsigned int) string[1]) << 8));
-}
-
-/**
- * xmlXPathCompareNodeSetFloat:
- * @ctxt: the XPath Parser context
- * @inf: less than (1) or greater than (0)
- * @strict: is the comparison strict
- * @arg: the node set
- * @f: the value
- *
- * Implement the compare operation between a nodeset and a number
- * @ns < @val (1, 1, ...
- * @ns <= @val (1, 0, ...
- * @ns > @val (0, 1, ...
- * @ns >= @val (0, 0, ...
- *
- * If one object to be compared is a node-set and the other is a number,
- * then the comparison will be true if and only if there is a node in the
- * node-set such that the result of performing the comparison on the number
- * to be compared and on the result of converting the string-value of that
- * node to a number using the number function is true.
- *
- * Returns 0 or 1 depending on the results of the test.
- */
-static int
-xmlXPathCompareNodeSetFloat(xmlXPathParserContextPtr ctxt, int inf, int strict,
- xmlXPathObjectPtr arg, xmlXPathObjectPtr f) {
- int i, ret = 0;
- xmlNodeSetPtr ns;
- xmlChar *str2;
-
- if ((f == NULL) || (arg == NULL) ||
- ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE))) {
- xmlXPathReleaseObject(ctxt->context, arg);
- xmlXPathReleaseObject(ctxt->context, f);
- return(0);
- }
- ns = arg->nodesetval;
- if (ns != NULL) {
- for (i = 0;i < ns->nodeNr;i++) {
- str2 = xmlXPathCastNodeToString(ns->nodeTab[i]);
- if (str2 != NULL) {
- valuePush(ctxt,
- xmlXPathCacheNewString(ctxt->context, str2));
- xmlFree(str2);
- xmlXPathNumberFunction(ctxt, 1);
- valuePush(ctxt, xmlXPathCacheObjectCopy(ctxt->context, f));
- ret = xmlXPathCompareValues(ctxt, inf, strict);
- if (ret)
- break;
- }
- }
- }
- xmlXPathReleaseObject(ctxt->context, arg);
- xmlXPathReleaseObject(ctxt->context, f);
- return(ret);
-}
-
-/**
- * xmlXPathCompareNodeSetString:
- * @ctxt: the XPath Parser context
- * @inf: less than (1) or greater than (0)
- * @strict: is the comparison strict
- * @arg: the node set
- * @s: the value
- *
- * Implement the compare operation between a nodeset and a string
- * @ns < @val (1, 1, ...
- * @ns <= @val (1, 0, ...
- * @ns > @val (0, 1, ...
- * @ns >= @val (0, 0, ...
- *
- * If one object to be compared is a node-set and the other is a string,
- * then the comparison will be true if and only if there is a node in
- * the node-set such that the result of performing the comparison on the
- * string-value of the node and the other string is true.
- *
- * Returns 0 or 1 depending on the results of the test.
- */
-static int
-xmlXPathCompareNodeSetString(xmlXPathParserContextPtr ctxt, int inf, int strict,
- xmlXPathObjectPtr arg, xmlXPathObjectPtr s) {
- int i, ret = 0;
- xmlNodeSetPtr ns;
- xmlChar *str2;
-
- if ((s == NULL) || (arg == NULL) ||
- ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE))) {
- xmlXPathReleaseObject(ctxt->context, arg);
- xmlXPathReleaseObject(ctxt->context, s);
- return(0);
- }
- ns = arg->nodesetval;
- if (ns != NULL) {
- for (i = 0;i < ns->nodeNr;i++) {
- str2 = xmlXPathCastNodeToString(ns->nodeTab[i]);
- if (str2 != NULL) {
- valuePush(ctxt,
- xmlXPathCacheNewString(ctxt->context, str2));
- xmlFree(str2);
- valuePush(ctxt, xmlXPathCacheObjectCopy(ctxt->context, s));
- ret = xmlXPathCompareValues(ctxt, inf, strict);
- if (ret)
- break;
- }
- }
- }
- xmlXPathReleaseObject(ctxt->context, arg);
- xmlXPathReleaseObject(ctxt->context, s);
- return(ret);
-}
-
-/**
- * xmlXPathCompareNodeSets:
- * @inf: less than (1) or greater than (0)
- * @strict: is the comparison strict
- * @arg1: the first node set object
- * @arg2: the second node set object
- *
- * Implement the compare operation on nodesets:
- *
- * If both objects to be compared are node-sets, then the comparison
- * will be true if and only if there is a node in the first node-set
- * and a node in the second node-set such that the result of performing
- * the comparison on the string-values of the two nodes is true.
- * ....
- * When neither object to be compared is a node-set and the operator
- * is <=, <, >= or >, then the objects are compared by converting both
- * objects to numbers and comparing the numbers according to IEEE 754.
- * ....
- * The number function converts its argument to a number as follows:
- * - a string that consists of optional whitespace followed by an
- * optional minus sign followed by a Number followed by whitespace
- * is converted to the IEEE 754 number that is nearest (according
- * to the IEEE 754 round-to-nearest rule) to the mathematical value
- * represented by the string; any other string is converted to NaN
- *
- * Conclusion all nodes need to be converted first to their string value
- * and then the comparison must be done when possible
- */
-static int
-xmlXPathCompareNodeSets(int inf, int strict,
- xmlXPathObjectPtr arg1, xmlXPathObjectPtr arg2) {
- int i, j, init = 0;
- double val1;
- double *values2;
- int ret = 0;
- xmlNodeSetPtr ns1;
- xmlNodeSetPtr ns2;
-
- if ((arg1 == NULL) ||
- ((arg1->type != XPATH_NODESET) && (arg1->type != XPATH_XSLT_TREE))) {
- xmlXPathFreeObject(arg2);
- return(0);
- }
- if ((arg2 == NULL) ||
- ((arg2->type != XPATH_NODESET) && (arg2->type != XPATH_XSLT_TREE))) {
- xmlXPathFreeObject(arg1);
- xmlXPathFreeObject(arg2);
- return(0);
- }
-
- ns1 = arg1->nodesetval;
- ns2 = arg2->nodesetval;
-
- if ((ns1 == NULL) || (ns1->nodeNr <= 0)) {
- xmlXPathFreeObject(arg1);
- xmlXPathFreeObject(arg2);
- return(0);
- }
- if ((ns2 == NULL) || (ns2->nodeNr <= 0)) {
- xmlXPathFreeObject(arg1);
- xmlXPathFreeObject(arg2);
- return(0);
- }
-
- values2 = (double *) xmlMalloc(ns2->nodeNr * sizeof(double));
- if (values2 == NULL) {
- xmlXPathErrMemory(NULL, "comparing nodesets\n");
- xmlXPathFreeObject(arg1);
- xmlXPathFreeObject(arg2);
- return(0);
- }
- for (i = 0;i < ns1->nodeNr;i++) {
- val1 = xmlXPathCastNodeToNumber(ns1->nodeTab[i]);
- if (xmlXPathIsNaN(val1))
- continue;
- for (j = 0;j < ns2->nodeNr;j++) {
- if (init == 0) {
- values2[j] = xmlXPathCastNodeToNumber(ns2->nodeTab[j]);
- }
- if (xmlXPathIsNaN(values2[j]))
- continue;
- if (inf && strict)
- ret = (val1 < values2[j]);
- else if (inf && !strict)
- ret = (val1 <= values2[j]);
- else if (!inf && strict)
- ret = (val1 > values2[j]);
- else if (!inf && !strict)
- ret = (val1 >= values2[j]);
- if (ret)
- break;
- }
- if (ret)
- break;
- init = 1;
- }
- xmlFree(values2);
- xmlXPathFreeObject(arg1);
- xmlXPathFreeObject(arg2);
- return(ret);
-}
-
-/**
- * xmlXPathCompareNodeSetValue:
- * @ctxt: the XPath Parser context
- * @inf: less than (1) or greater than (0)
- * @strict: is the comparison strict
- * @arg: the node set
- * @val: the value
- *
- * Implement the compare operation between a nodeset and a value
- * @ns < @val (1, 1, ...
- * @ns <= @val (1, 0, ...
- * @ns > @val (0, 1, ...
- * @ns >= @val (0, 0, ...
- *
- * If one object to be compared is a node-set and the other is a boolean,
- * then the comparison will be true if and only if the result of performing
- * the comparison on the boolean and on the result of converting
- * the node-set to a boolean using the boolean function is true.
- *
- * Returns 0 or 1 depending on the results of the test.
- */
-static int
-xmlXPathCompareNodeSetValue(xmlXPathParserContextPtr ctxt, int inf, int strict,
- xmlXPathObjectPtr arg, xmlXPathObjectPtr val) {
- if ((val == NULL) || (arg == NULL) ||
- ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE)))
- return(0);
-
- switch(val->type) {
- case XPATH_NUMBER:
- return(xmlXPathCompareNodeSetFloat(ctxt, inf, strict, arg, val));
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- return(xmlXPathCompareNodeSets(inf, strict, arg, val));
- case XPATH_STRING:
- return(xmlXPathCompareNodeSetString(ctxt, inf, strict, arg, val));
- case XPATH_BOOLEAN:
- valuePush(ctxt, arg);
- xmlXPathBooleanFunction(ctxt, 1);
- valuePush(ctxt, val);
- return(xmlXPathCompareValues(ctxt, inf, strict));
- default:
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompareNodeSetValue: Can't compare node set "
- "and object of type %d\n",
- val->type);
- xmlXPathReleaseObject(ctxt->context, arg);
- xmlXPathReleaseObject(ctxt->context, val);
- XP_ERROR0(XPATH_INVALID_TYPE);
- }
- return(0);
-}
-
-/**
- * xmlXPathEqualNodeSetString:
- * @arg: the nodeset object argument
- * @str: the string to compare to.
- * @neq: flag to show whether for '=' (0) or '!=' (1)
- *
- * Implement the equal operation on XPath objects content: @arg1 == @arg2
- * If one object to be compared is a node-set and the other is a string,
- * then the comparison will be true if and only if there is a node in
- * the node-set such that the result of performing the comparison on the
- * string-value of the node and the other string is true.
- *
- * Returns 0 or 1 depending on the results of the test.
- */
-static int
-xmlXPathEqualNodeSetString(xmlXPathObjectPtr arg, const xmlChar * str, int neq)
-{
- int i;
- xmlNodeSetPtr ns;
- xmlChar *str2;
- unsigned int hash;
-
- if ((str == NULL) || (arg == NULL) ||
- ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE)))
- return (0);
- ns = arg->nodesetval;
- /*
- * A NULL nodeset compared with a string is always false
- * (since there is no node equal, and no node not equal)
- */
- if ((ns == NULL) || (ns->nodeNr <= 0) )
- return (0);
- hash = xmlXPathStringHash(str);
- for (i = 0; i < ns->nodeNr; i++) {
- if (xmlXPathNodeValHash(ns->nodeTab[i]) == hash) {
- str2 = xmlNodeGetContent(ns->nodeTab[i]);
- if ((str2 != NULL) && (xmlStrEqual(str, str2))) {
- xmlFree(str2);
- if (neq)
- continue;
- return (1);
- } else if ((str2 == NULL) && (xmlStrEqual(str, BAD_CAST ""))) {
- if (neq)
- continue;
- return (1);
- } else if (neq) {
- if (str2 != NULL)
- xmlFree(str2);
- return (1);
- }
- if (str2 != NULL)
- xmlFree(str2);
- } else if (neq)
- return (1);
- }
- return (0);
-}
-
-/**
- * xmlXPathEqualNodeSetFloat:
- * @arg: the nodeset object argument
- * @f: the float to compare to
- * @neq: flag to show whether to compare '=' (0) or '!=' (1)
- *
- * Implement the equal operation on XPath objects content: @arg1 == @arg2
- * If one object to be compared is a node-set and the other is a number,
- * then the comparison will be true if and only if there is a node in
- * the node-set such that the result of performing the comparison on the
- * number to be compared and on the result of converting the string-value
- * of that node to a number using the number function is true.
- *
- * Returns 0 or 1 depending on the results of the test.
- */
-static int
-xmlXPathEqualNodeSetFloat(xmlXPathParserContextPtr ctxt,
- xmlXPathObjectPtr arg, double f, int neq) {
- int i, ret=0;
- xmlNodeSetPtr ns;
- xmlChar *str2;
- xmlXPathObjectPtr val;
- double v;
-
- if ((arg == NULL) ||
- ((arg->type != XPATH_NODESET) && (arg->type != XPATH_XSLT_TREE)))
- return(0);
-
- ns = arg->nodesetval;
- if (ns != NULL) {
- for (i=0;i<ns->nodeNr;i++) {
- str2 = xmlXPathCastNodeToString(ns->nodeTab[i]);
- if (str2 != NULL) {
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context, str2));
- xmlFree(str2);
- xmlXPathNumberFunction(ctxt, 1);
- val = valuePop(ctxt);
- v = val->floatval;
- xmlXPathReleaseObject(ctxt->context, val);
- if (!xmlXPathIsNaN(v)) {
- if ((!neq) && (v==f)) {
- ret = 1;
- break;
- } else if ((neq) && (v!=f)) {
- ret = 1;
- break;
- }
- } else { /* NaN is unequal to any value */
- if (neq)
- ret = 1;
- }
- }
- }
- }
-
- return(ret);
-}
-
-
-/**
- * xmlXPathEqualNodeSets:
- * @arg1: first nodeset object argument
- * @arg2: second nodeset object argument
- * @neq: flag to show whether to test '=' (0) or '!=' (1)
- *
- * Implement the equal / not equal operation on XPath nodesets:
- * @arg1 == @arg2 or @arg1 != @arg2
- * If both objects to be compared are node-sets, then the comparison
- * will be true if and only if there is a node in the first node-set and
- * a node in the second node-set such that the result of performing the
- * comparison on the string-values of the two nodes is true.
- *
- * (needless to say, this is a costly operation)
- *
- * Returns 0 or 1 depending on the results of the test.
- */
-static int
-xmlXPathEqualNodeSets(xmlXPathObjectPtr arg1, xmlXPathObjectPtr arg2, int neq) {
- int i, j;
- unsigned int *hashs1;
- unsigned int *hashs2;
- xmlChar **values1;
- xmlChar **values2;
- int ret = 0;
- xmlNodeSetPtr ns1;
- xmlNodeSetPtr ns2;
-
- if ((arg1 == NULL) ||
- ((arg1->type != XPATH_NODESET) && (arg1->type != XPATH_XSLT_TREE)))
- return(0);
- if ((arg2 == NULL) ||
- ((arg2->type != XPATH_NODESET) && (arg2->type != XPATH_XSLT_TREE)))
- return(0);
-
- ns1 = arg1->nodesetval;
- ns2 = arg2->nodesetval;
-
- if ((ns1 == NULL) || (ns1->nodeNr <= 0))
- return(0);
- if ((ns2 == NULL) || (ns2->nodeNr <= 0))
- return(0);
-
- /*
- * for equal, check if there is a node pertaining to both sets
- */
- if (neq == 0)
- for (i = 0;i < ns1->nodeNr;i++)
- for (j = 0;j < ns2->nodeNr;j++)
- if (ns1->nodeTab[i] == ns2->nodeTab[j])
- return(1);
-
- values1 = (xmlChar **) xmlMalloc(ns1->nodeNr * sizeof(xmlChar *));
- if (values1 == NULL) {
- xmlXPathErrMemory(NULL, "comparing nodesets\n");
- return(0);
- }
- hashs1 = (unsigned int *) xmlMalloc(ns1->nodeNr * sizeof(unsigned int));
- if (hashs1 == NULL) {
- xmlXPathErrMemory(NULL, "comparing nodesets\n");
- xmlFree(values1);
- return(0);
- }
- memset(values1, 0, ns1->nodeNr * sizeof(xmlChar *));
- values2 = (xmlChar **) xmlMalloc(ns2->nodeNr * sizeof(xmlChar *));
- if (values2 == NULL) {
- xmlXPathErrMemory(NULL, "comparing nodesets\n");
- xmlFree(hashs1);
- xmlFree(values1);
- return(0);
- }
- hashs2 = (unsigned int *) xmlMalloc(ns2->nodeNr * sizeof(unsigned int));
- if (hashs2 == NULL) {
- xmlXPathErrMemory(NULL, "comparing nodesets\n");
- xmlFree(hashs1);
- xmlFree(values1);
- xmlFree(values2);
- return(0);
- }
- memset(values2, 0, ns2->nodeNr * sizeof(xmlChar *));
- for (i = 0;i < ns1->nodeNr;i++) {
- hashs1[i] = xmlXPathNodeValHash(ns1->nodeTab[i]);
- for (j = 0;j < ns2->nodeNr;j++) {
- if (i == 0)
- hashs2[j] = xmlXPathNodeValHash(ns2->nodeTab[j]);
- if (hashs1[i] != hashs2[j]) {
- if (neq) {
- ret = 1;
- break;
- }
- }
- else {
- if (values1[i] == NULL)
- values1[i] = xmlNodeGetContent(ns1->nodeTab[i]);
- if (values2[j] == NULL)
- values2[j] = xmlNodeGetContent(ns2->nodeTab[j]);
- ret = xmlStrEqual(values1[i], values2[j]) ^ neq;
- if (ret)
- break;
- }
- }
- if (ret)
- break;
- }
- for (i = 0;i < ns1->nodeNr;i++)
- if (values1[i] != NULL)
- xmlFree(values1[i]);
- for (j = 0;j < ns2->nodeNr;j++)
- if (values2[j] != NULL)
- xmlFree(values2[j]);
- xmlFree(values1);
- xmlFree(values2);
- xmlFree(hashs1);
- xmlFree(hashs2);
- return(ret);
-}
-
-static int
-xmlXPathEqualValuesCommon(xmlXPathParserContextPtr ctxt,
- xmlXPathObjectPtr arg1, xmlXPathObjectPtr arg2) {
- int ret = 0;
- /*
- *At this point we are assured neither arg1 nor arg2
- *is a nodeset, so we can just pick the appropriate routine.
- */
- switch (arg1->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "Equal: undefined\n");
-#endif
- break;
- case XPATH_BOOLEAN:
- switch (arg2->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "Equal: undefined\n");
-#endif
- break;
- case XPATH_BOOLEAN:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "Equal: %d boolean %d \n",
- arg1->boolval, arg2->boolval);
-#endif
- ret = (arg1->boolval == arg2->boolval);
- break;
- case XPATH_NUMBER:
- ret = (arg1->boolval ==
- xmlXPathCastNumberToBoolean(arg2->floatval));
- break;
- case XPATH_STRING:
- if ((arg2->stringval == NULL) ||
- (arg2->stringval[0] == 0)) ret = 0;
- else
- ret = 1;
- ret = (arg1->boolval == ret);
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- break;
- }
- break;
- case XPATH_NUMBER:
- switch (arg2->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "Equal: undefined\n");
-#endif
- break;
- case XPATH_BOOLEAN:
- ret = (arg2->boolval==
- xmlXPathCastNumberToBoolean(arg1->floatval));
- break;
- case XPATH_STRING:
- valuePush(ctxt, arg2);
- xmlXPathNumberFunction(ctxt, 1);
- arg2 = valuePop(ctxt);
- /* no break on purpose */
- case XPATH_NUMBER:
- /* Hand check NaN and Infinity equalities */
- if (xmlXPathIsNaN(arg1->floatval) ||
- xmlXPathIsNaN(arg2->floatval)) {
- ret = 0;
- } else if (xmlXPathIsInf(arg1->floatval) == 1) {
- if (xmlXPathIsInf(arg2->floatval) == 1)
- ret = 1;
- else
- ret = 0;
- } else if (xmlXPathIsInf(arg1->floatval) == -1) {
- if (xmlXPathIsInf(arg2->floatval) == -1)
- ret = 1;
- else
- ret = 0;
- } else if (xmlXPathIsInf(arg2->floatval) == 1) {
- if (xmlXPathIsInf(arg1->floatval) == 1)
- ret = 1;
- else
- ret = 0;
- } else if (xmlXPathIsInf(arg2->floatval) == -1) {
- if (xmlXPathIsInf(arg1->floatval) == -1)
- ret = 1;
- else
- ret = 0;
- } else {
- ret = (arg1->floatval == arg2->floatval);
- }
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- break;
- }
- break;
- case XPATH_STRING:
- switch (arg2->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "Equal: undefined\n");
-#endif
- break;
- case XPATH_BOOLEAN:
- if ((arg1->stringval == NULL) ||
- (arg1->stringval[0] == 0)) ret = 0;
- else
- ret = 1;
- ret = (arg2->boolval == ret);
- break;
- case XPATH_STRING:
- ret = xmlStrEqual(arg1->stringval, arg2->stringval);
- break;
- case XPATH_NUMBER:
- valuePush(ctxt, arg1);
- xmlXPathNumberFunction(ctxt, 1);
- arg1 = valuePop(ctxt);
- /* Hand check NaN and Infinity equalities */
- if (xmlXPathIsNaN(arg1->floatval) ||
- xmlXPathIsNaN(arg2->floatval)) {
- ret = 0;
- } else if (xmlXPathIsInf(arg1->floatval) == 1) {
- if (xmlXPathIsInf(arg2->floatval) == 1)
- ret = 1;
- else
- ret = 0;
- } else if (xmlXPathIsInf(arg1->floatval) == -1) {
- if (xmlXPathIsInf(arg2->floatval) == -1)
- ret = 1;
- else
- ret = 0;
- } else if (xmlXPathIsInf(arg2->floatval) == 1) {
- if (xmlXPathIsInf(arg1->floatval) == 1)
- ret = 1;
- else
- ret = 0;
- } else if (xmlXPathIsInf(arg2->floatval) == -1) {
- if (xmlXPathIsInf(arg1->floatval) == -1)
- ret = 1;
- else
- ret = 0;
- } else {
- ret = (arg1->floatval == arg2->floatval);
- }
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- break;
- }
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- break;
- }
- xmlXPathReleaseObject(ctxt->context, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- return(ret);
-}
-
-/**
- * xmlXPathEqualValues:
- * @ctxt: the XPath Parser context
- *
- * Implement the equal operation on XPath objects content: @arg1 == @arg2
- *
- * Returns 0 or 1 depending on the results of the test.
- */
-int
-xmlXPathEqualValues(xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr arg1, arg2, argtmp;
- int ret = 0;
-
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(0);
- arg2 = valuePop(ctxt);
- arg1 = valuePop(ctxt);
- if ((arg1 == NULL) || (arg2 == NULL)) {
- if (arg1 != NULL)
- xmlXPathReleaseObject(ctxt->context, arg1);
- else
- xmlXPathReleaseObject(ctxt->context, arg2);
- XP_ERROR0(XPATH_INVALID_OPERAND);
- }
-
- if (arg1 == arg2) {
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "Equal: by pointer\n");
-#endif
- xmlXPathFreeObject(arg1);
- return(1);
- }
-
- /*
- *If either argument is a nodeset, it's a 'special case'
- */
- if ((arg2->type == XPATH_NODESET) || (arg2->type == XPATH_XSLT_TREE) ||
- (arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE)) {
- /*
- *Hack it to assure arg1 is the nodeset
- */
- if ((arg1->type != XPATH_NODESET) && (arg1->type != XPATH_XSLT_TREE)) {
- argtmp = arg2;
- arg2 = arg1;
- arg1 = argtmp;
- }
- switch (arg2->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "Equal: undefined\n");
-#endif
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- ret = xmlXPathEqualNodeSets(arg1, arg2, 0);
- break;
- case XPATH_BOOLEAN:
- if ((arg1->nodesetval == NULL) ||
- (arg1->nodesetval->nodeNr == 0)) ret = 0;
- else
- ret = 1;
- ret = (ret == arg2->boolval);
- break;
- case XPATH_NUMBER:
- ret = xmlXPathEqualNodeSetFloat(ctxt, arg1, arg2->floatval, 0);
- break;
- case XPATH_STRING:
- ret = xmlXPathEqualNodeSetString(arg1, arg2->stringval, 0);
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO
- break;
- }
- xmlXPathReleaseObject(ctxt->context, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- return(ret);
- }
-
- return (xmlXPathEqualValuesCommon(ctxt, arg1, arg2));
-}
-
-/**
- * xmlXPathNotEqualValues:
- * @ctxt: the XPath Parser context
- *
- * Implement the equal operation on XPath objects content: @arg1 == @arg2
- *
- * Returns 0 or 1 depending on the results of the test.
- */
-int
-xmlXPathNotEqualValues(xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr arg1, arg2, argtmp;
- int ret = 0;
-
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(0);
- arg2 = valuePop(ctxt);
- arg1 = valuePop(ctxt);
- if ((arg1 == NULL) || (arg2 == NULL)) {
- if (arg1 != NULL)
- xmlXPathReleaseObject(ctxt->context, arg1);
- else
- xmlXPathReleaseObject(ctxt->context, arg2);
- XP_ERROR0(XPATH_INVALID_OPERAND);
- }
-
- if (arg1 == arg2) {
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "NotEqual: by pointer\n");
-#endif
- xmlXPathReleaseObject(ctxt->context, arg1);
- return(0);
- }
-
- /*
- *If either argument is a nodeset, it's a 'special case'
- */
- if ((arg2->type == XPATH_NODESET) || (arg2->type == XPATH_XSLT_TREE) ||
- (arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE)) {
- /*
- *Hack it to assure arg1 is the nodeset
- */
- if ((arg1->type != XPATH_NODESET) && (arg1->type != XPATH_XSLT_TREE)) {
- argtmp = arg2;
- arg2 = arg1;
- arg1 = argtmp;
- }
- switch (arg2->type) {
- case XPATH_UNDEFINED:
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "NotEqual: undefined\n");
-#endif
- break;
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- ret = xmlXPathEqualNodeSets(arg1, arg2, 1);
- break;
- case XPATH_BOOLEAN:
- if ((arg1->nodesetval == NULL) ||
- (arg1->nodesetval->nodeNr == 0)) ret = 0;
- else
- ret = 1;
- ret = (ret != arg2->boolval);
- break;
- case XPATH_NUMBER:
- ret = xmlXPathEqualNodeSetFloat(ctxt, arg1, arg2->floatval, 1);
- break;
- case XPATH_STRING:
- ret = xmlXPathEqualNodeSetString(arg1, arg2->stringval,1);
- break;
- case XPATH_USERS:
- case XPATH_POINT:
- case XPATH_RANGE:
- case XPATH_LOCATIONSET:
- TODO
- break;
- }
- xmlXPathReleaseObject(ctxt->context, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- return(ret);
- }
-
- return (!xmlXPathEqualValuesCommon(ctxt, arg1, arg2));
-}
-
-/**
- * xmlXPathCompareValues:
- * @ctxt: the XPath Parser context
- * @inf: less than (1) or greater than (0)
- * @strict: is the comparison strict
- *
- * Implement the compare operation on XPath objects:
- * @arg1 < @arg2 (1, 1, ...
- * @arg1 <= @arg2 (1, 0, ...
- * @arg1 > @arg2 (0, 1, ...
- * @arg1 >= @arg2 (0, 0, ...
- *
- * When neither object to be compared is a node-set and the operator is
- * <=, <, >=, >, then the objects are compared by converted both objects
- * to numbers and comparing the numbers according to IEEE 754. The <
- * comparison will be true if and only if the first number is less than the
- * second number. The <= comparison will be true if and only if the first
- * number is less than or equal to the second number. The > comparison
- * will be true if and only if the first number is greater than the second
- * number. The >= comparison will be true if and only if the first number
- * is greater than or equal to the second number.
- *
- * Returns 1 if the comparison succeeded, 0 if it failed
- */
-int
-xmlXPathCompareValues(xmlXPathParserContextPtr ctxt, int inf, int strict) {
- int ret = 0, arg1i = 0, arg2i = 0;
- xmlXPathObjectPtr arg1, arg2;
-
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(0);
- arg2 = valuePop(ctxt);
- arg1 = valuePop(ctxt);
- if ((arg1 == NULL) || (arg2 == NULL)) {
- if (arg1 != NULL)
- xmlXPathReleaseObject(ctxt->context, arg1);
- else
- xmlXPathReleaseObject(ctxt->context, arg2);
- XP_ERROR0(XPATH_INVALID_OPERAND);
- }
-
- if ((arg2->type == XPATH_NODESET) || (arg2->type == XPATH_XSLT_TREE) ||
- (arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE)) {
- /*
- * If either argument is a XPATH_NODESET or XPATH_XSLT_TREE the two arguments
- * are not freed from within this routine; they will be freed from the
- * called routine, e.g. xmlXPathCompareNodeSets or xmlXPathCompareNodeSetValue
- */
- if (((arg2->type == XPATH_NODESET) || (arg2->type == XPATH_XSLT_TREE)) &&
- ((arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE))){
- ret = xmlXPathCompareNodeSets(inf, strict, arg1, arg2);
- } else {
- if ((arg1->type == XPATH_NODESET) || (arg1->type == XPATH_XSLT_TREE)) {
- ret = xmlXPathCompareNodeSetValue(ctxt, inf, strict,
- arg1, arg2);
- } else {
- ret = xmlXPathCompareNodeSetValue(ctxt, !inf, strict,
- arg2, arg1);
- }
- }
- return(ret);
- }
-
- if (arg1->type != XPATH_NUMBER) {
- valuePush(ctxt, arg1);
- xmlXPathNumberFunction(ctxt, 1);
- arg1 = valuePop(ctxt);
- }
- if (arg1->type != XPATH_NUMBER) {
- xmlXPathFreeObject(arg1);
- xmlXPathFreeObject(arg2);
- XP_ERROR0(XPATH_INVALID_OPERAND);
- }
- if (arg2->type != XPATH_NUMBER) {
- valuePush(ctxt, arg2);
- xmlXPathNumberFunction(ctxt, 1);
- arg2 = valuePop(ctxt);
- }
- if (arg2->type != XPATH_NUMBER) {
- xmlXPathReleaseObject(ctxt->context, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- XP_ERROR0(XPATH_INVALID_OPERAND);
- }
- /*
- * Add tests for infinity and nan
- * => feedback on 3.4 for Inf and NaN
- */
- /* Hand check NaN and Infinity comparisons */
- if (xmlXPathIsNaN(arg1->floatval) || xmlXPathIsNaN(arg2->floatval)) {
- ret=0;
- } else {
- arg1i=xmlXPathIsInf(arg1->floatval);
- arg2i=xmlXPathIsInf(arg2->floatval);
- if (inf && strict) {
- if ((arg1i == -1 && arg2i != -1) ||
- (arg2i == 1 && arg1i != 1)) {
- ret = 1;
- } else if (arg1i == 0 && arg2i == 0) {
- ret = (arg1->floatval < arg2->floatval);
- } else {
- ret = 0;
- }
- }
- else if (inf && !strict) {
- if (arg1i == -1 || arg2i == 1) {
- ret = 1;
- } else if (arg1i == 0 && arg2i == 0) {
- ret = (arg1->floatval <= arg2->floatval);
- } else {
- ret = 0;
- }
- }
- else if (!inf && strict) {
- if ((arg1i == 1 && arg2i != 1) ||
- (arg2i == -1 && arg1i != -1)) {
- ret = 1;
- } else if (arg1i == 0 && arg2i == 0) {
- ret = (arg1->floatval > arg2->floatval);
- } else {
- ret = 0;
- }
- }
- else if (!inf && !strict) {
- if (arg1i == 1 || arg2i == -1) {
- ret = 1;
- } else if (arg1i == 0 && arg2i == 0) {
- ret = (arg1->floatval >= arg2->floatval);
- } else {
- ret = 0;
- }
- }
- }
- xmlXPathReleaseObject(ctxt->context, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- return(ret);
-}
-
-/**
- * xmlXPathValueFlipSign:
- * @ctxt: the XPath Parser context
- *
- * Implement the unary - operation on an XPath object
- * The numeric operators convert their operands to numbers as if
- * by calling the number function.
- */
-void
-xmlXPathValueFlipSign(xmlXPathParserContextPtr ctxt) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return;
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
- if (xmlXPathIsNaN(ctxt->value->floatval))
- ctxt->value->floatval=xmlXPathNAN;
- else if (xmlXPathIsInf(ctxt->value->floatval) == 1)
- ctxt->value->floatval=xmlXPathNINF;
- else if (xmlXPathIsInf(ctxt->value->floatval) == -1)
- ctxt->value->floatval=xmlXPathPINF;
- else if (ctxt->value->floatval == 0) {
- if (xmlXPathGetSign(ctxt->value->floatval) == 0)
- ctxt->value->floatval = xmlXPathNZERO;
- else
- ctxt->value->floatval = 0;
- }
- else
- ctxt->value->floatval = - ctxt->value->floatval;
-}
-
-/**
- * xmlXPathAddValues:
- * @ctxt: the XPath Parser context
- *
- * Implement the add operation on XPath objects:
- * The numeric operators convert their operands to numbers as if
- * by calling the number function.
- */
-void
-xmlXPathAddValues(xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr arg;
- double val;
-
- arg = valuePop(ctxt);
- if (arg == NULL)
- XP_ERROR(XPATH_INVALID_OPERAND);
- val = xmlXPathCastToNumber(arg);
- xmlXPathReleaseObject(ctxt->context, arg);
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
- ctxt->value->floatval += val;
-}
-
-/**
- * xmlXPathSubValues:
- * @ctxt: the XPath Parser context
- *
- * Implement the subtraction operation on XPath objects:
- * The numeric operators convert their operands to numbers as if
- * by calling the number function.
- */
-void
-xmlXPathSubValues(xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr arg;
- double val;
-
- arg = valuePop(ctxt);
- if (arg == NULL)
- XP_ERROR(XPATH_INVALID_OPERAND);
- val = xmlXPathCastToNumber(arg);
- xmlXPathReleaseObject(ctxt->context, arg);
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
- ctxt->value->floatval -= val;
-}
-
-/**
- * xmlXPathMultValues:
- * @ctxt: the XPath Parser context
- *
- * Implement the multiply operation on XPath objects:
- * The numeric operators convert their operands to numbers as if
- * by calling the number function.
- */
-void
-xmlXPathMultValues(xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr arg;
- double val;
-
- arg = valuePop(ctxt);
- if (arg == NULL)
- XP_ERROR(XPATH_INVALID_OPERAND);
- val = xmlXPathCastToNumber(arg);
- xmlXPathReleaseObject(ctxt->context, arg);
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
- ctxt->value->floatval *= val;
-}
-
-/**
- * xmlXPathDivValues:
- * @ctxt: the XPath Parser context
- *
- * Implement the div operation on XPath objects @arg1 / @arg2:
- * The numeric operators convert their operands to numbers as if
- * by calling the number function.
- */
-void
-xmlXPathDivValues(xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr arg;
- double val;
-
- arg = valuePop(ctxt);
- if (arg == NULL)
- XP_ERROR(XPATH_INVALID_OPERAND);
- val = xmlXPathCastToNumber(arg);
- xmlXPathReleaseObject(ctxt->context, arg);
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
- if (xmlXPathIsNaN(val) || xmlXPathIsNaN(ctxt->value->floatval))
- ctxt->value->floatval = xmlXPathNAN;
- else if (val == 0 && xmlXPathGetSign(val) != 0) {
- if (ctxt->value->floatval == 0)
- ctxt->value->floatval = xmlXPathNAN;
- else if (ctxt->value->floatval > 0)
- ctxt->value->floatval = xmlXPathNINF;
- else if (ctxt->value->floatval < 0)
- ctxt->value->floatval = xmlXPathPINF;
- }
- else if (val == 0) {
- if (ctxt->value->floatval == 0)
- ctxt->value->floatval = xmlXPathNAN;
- else if (ctxt->value->floatval > 0)
- ctxt->value->floatval = xmlXPathPINF;
- else if (ctxt->value->floatval < 0)
- ctxt->value->floatval = xmlXPathNINF;
- } else
- ctxt->value->floatval /= val;
-}
-
-/**
- * xmlXPathModValues:
- * @ctxt: the XPath Parser context
- *
- * Implement the mod operation on XPath objects: @arg1 / @arg2
- * The numeric operators convert their operands to numbers as if
- * by calling the number function.
- */
-void
-xmlXPathModValues(xmlXPathParserContextPtr ctxt) {
- xmlXPathObjectPtr arg;
- double arg1, arg2;
-
- arg = valuePop(ctxt);
- if (arg == NULL)
- XP_ERROR(XPATH_INVALID_OPERAND);
- arg2 = xmlXPathCastToNumber(arg);
- xmlXPathReleaseObject(ctxt->context, arg);
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
- arg1 = ctxt->value->floatval;
- if (arg2 == 0)
- ctxt->value->floatval = xmlXPathNAN;
- else {
- ctxt->value->floatval = fmod(arg1, arg2);
- }
-}
-
-/************************************************************************
- * *
- * The traversal functions *
- * *
- ************************************************************************/
-
-/*
- * A traversal function enumerates nodes along an axis.
- * Initially it must be called with NULL, and it indicates
- * termination on the axis by returning NULL.
- */
-typedef xmlNodePtr (*xmlXPathTraversalFunction)
- (xmlXPathParserContextPtr ctxt, xmlNodePtr cur);
-
-/*
- * xmlXPathTraversalFunctionExt:
- * A traversal function enumerates nodes along an axis.
- * Initially it must be called with NULL, and it indicates
- * termination on the axis by returning NULL.
- * The context node of the traversal is specified via @contextNode.
- */
-typedef xmlNodePtr (*xmlXPathTraversalFunctionExt)
- (xmlNodePtr cur, xmlNodePtr contextNode);
-
-/*
- * xmlXPathNodeSetMergeFunction:
- * Used for merging node sets in xmlXPathCollectAndTest().
- */
-typedef xmlNodeSetPtr (*xmlXPathNodeSetMergeFunction)
- (xmlNodeSetPtr, xmlNodeSetPtr, int);
-
-
-/**
- * xmlXPathNextSelf:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "self" direction
- * The self axis contains just the context node itself
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (cur == NULL)
- return(ctxt->context->node);
- return(NULL);
-}
-
-/**
- * xmlXPathNextChild:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "child" direction
- * The child axis contains the children of the context node in document order.
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextChild(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (cur == NULL) {
- if (ctxt->context->node == NULL) return(NULL);
- switch (ctxt->context->node->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- return(ctxt->context->node->children);
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return(((xmlDocPtr) ctxt->context->node)->children);
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_ATTRIBUTE_NODE:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- return(NULL);
- }
- return(NULL);
- }
- if ((cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE))
- return(NULL);
- return(cur->next);
-}
-
-/**
- * xmlXPathNextChildElement:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "child" direction and nodes of type element.
- * The child axis contains the children of the context node in document order.
- *
- * Returns the next element following that axis
- */
-static xmlNodePtr
-xmlXPathNextChildElement(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (cur == NULL) {
- cur = ctxt->context->node;
- if (cur == NULL) return(NULL);
- /*
- * Get the first element child.
- */
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_ENTITY_REF_NODE: /* URGENT TODO: entify-refs as well? */
- case XML_ENTITY_NODE:
- cur = cur->children;
- if (cur != NULL) {
- if (cur->type == XML_ELEMENT_NODE)
- return(cur);
- do {
- cur = cur->next;
- } while ((cur != NULL) &&
- (cur->type != XML_ELEMENT_NODE));
- return(cur);
- }
- return(NULL);
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return(xmlDocGetRootElement((xmlDocPtr) cur));
- default:
- return(NULL);
- }
- return(NULL);
- }
- /*
- * Get the next sibling element node.
- */
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_XINCLUDE_END:
- break;
- /* case XML_DTD_NODE: */ /* URGENT TODO: DTD-node as well? */
- default:
- return(NULL);
- }
- if (cur->next != NULL) {
- if (cur->next->type == XML_ELEMENT_NODE)
- return(cur->next);
- cur = cur->next;
- do {
- cur = cur->next;
- } while ((cur != NULL) && (cur->type != XML_ELEMENT_NODE));
- return(cur);
- }
- return(NULL);
-}
-
-#if 0
-/**
- * xmlXPathNextDescendantOrSelfElemParent:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "descendant-or-self" axis.
- * Additionally it returns only nodes which can be parents of
- * element nodes.
- *
- *
- * Returns the next element following that axis
- */
-static xmlNodePtr
-xmlXPathNextDescendantOrSelfElemParent(xmlNodePtr cur,
- xmlNodePtr contextNode)
-{
- if (cur == NULL) {
- if (contextNode == NULL)
- return(NULL);
- switch (contextNode->type) {
- case XML_ELEMENT_NODE:
- case XML_XINCLUDE_START:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_HTML_DOCUMENT_NODE:
- return(contextNode);
- default:
- return(NULL);
- }
- return(NULL);
- } else {
- xmlNodePtr start = cur;
-
- while (cur != NULL) {
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- /* TODO: OK to have XInclude here? */
- case XML_XINCLUDE_START:
- case XML_DOCUMENT_FRAG_NODE:
- if (cur != start)
- return(cur);
- if (cur->children != NULL) {
- cur = cur->children;
- continue;
- }
- break;
- /* Not sure if we need those here. */
- case XML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_HTML_DOCUMENT_NODE:
- if (cur != start)
- return(cur);
- return(xmlDocGetRootElement((xmlDocPtr) cur));
- default:
- break;
- }
-
-next_sibling:
- if ((cur == NULL) || (cur == contextNode))
- return(NULL);
- if (cur->next != NULL) {
- cur = cur->next;
- } else {
- cur = cur->parent;
- goto next_sibling;
- }
- }
- }
- return(NULL);
-}
-#endif
-
-/**
- * xmlXPathNextDescendant:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "descendant" direction
- * the descendant axis contains the descendants of the context node in document
- * order; a descendant is a child or a child of a child and so on.
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (cur == NULL) {
- if (ctxt->context->node == NULL)
- return(NULL);
- if ((ctxt->context->node->type == XML_ATTRIBUTE_NODE) ||
- (ctxt->context->node->type == XML_NAMESPACE_DECL))
- return(NULL);
-
- if (ctxt->context->node == (xmlNodePtr) ctxt->context->doc)
- return(ctxt->context->doc->children);
- return(ctxt->context->node->children);
- }
-
- if (cur->type == XML_NAMESPACE_DECL)
- return(NULL);
- if (cur->children != NULL) {
- /*
- * Do not descend on entities declarations
- */
- if (cur->children->type != XML_ENTITY_DECL) {
- cur = cur->children;
- /*
- * Skip DTDs
- */
- if (cur->type != XML_DTD_NODE)
- return(cur);
- }
- }
-
- if (cur == ctxt->context->node) return(NULL);
-
- while (cur->next != NULL) {
- cur = cur->next;
- if ((cur->type != XML_ENTITY_DECL) &&
- (cur->type != XML_DTD_NODE))
- return(cur);
- }
-
- do {
- cur = cur->parent;
- if (cur == NULL) break;
- if (cur == ctxt->context->node) return(NULL);
- if (cur->next != NULL) {
- cur = cur->next;
- return(cur);
- }
- } while (cur != NULL);
- return(cur);
-}
-
-/**
- * xmlXPathNextDescendantOrSelf:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "descendant-or-self" direction
- * the descendant-or-self axis contains the context node and the descendants
- * of the context node in document order; thus the context node is the first
- * node on the axis, and the first child of the context node is the second node
- * on the axis
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (cur == NULL)
- return(ctxt->context->node);
-
- if (ctxt->context->node == NULL)
- return(NULL);
- if ((ctxt->context->node->type == XML_ATTRIBUTE_NODE) ||
- (ctxt->context->node->type == XML_NAMESPACE_DECL))
- return(NULL);
-
- return(xmlXPathNextDescendant(ctxt, cur));
-}
-
-/**
- * xmlXPathNextParent:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "parent" direction
- * The parent axis contains the parent of the context node, if there is one.
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextParent(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- /*
- * the parent of an attribute or namespace node is the element
- * to which the attribute or namespace node is attached
- * Namespace handling !!!
- */
- if (cur == NULL) {
- if (ctxt->context->node == NULL) return(NULL);
- switch (ctxt->context->node->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- case XML_ENTITY_DECL:
- if (ctxt->context->node->parent == NULL)
- return((xmlNodePtr) ctxt->context->doc);
- if ((ctxt->context->node->parent->type == XML_ELEMENT_NODE) &&
- ((ctxt->context->node->parent->name[0] == ' ') ||
- (xmlStrEqual(ctxt->context->node->parent->name,
- BAD_CAST "fake node libxslt"))))
- return(NULL);
- return(ctxt->context->node->parent);
- case XML_ATTRIBUTE_NODE: {
- xmlAttrPtr att = (xmlAttrPtr) ctxt->context->node;
-
- return(att->parent);
- }
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return(NULL);
- case XML_NAMESPACE_DECL: {
- xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
-
- if ((ns->next != NULL) &&
- (ns->next->type != XML_NAMESPACE_DECL))
- return((xmlNodePtr) ns->next);
- return(NULL);
- }
- }
- }
- return(NULL);
-}
-
-/**
- * xmlXPathNextAncestor:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "ancestor" direction
- * the ancestor axis contains the ancestors of the context node; the ancestors
- * of the context node consist of the parent of context node and the parent's
- * parent and so on; the nodes are ordered in reverse document order; thus the
- * parent is the first node on the axis, and the parent's parent is the second
- * node on the axis
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- /*
- * the parent of an attribute or namespace node is the element
- * to which the attribute or namespace node is attached
- * !!!!!!!!!!!!!
- */
- if (cur == NULL) {
- if (ctxt->context->node == NULL) return(NULL);
- switch (ctxt->context->node->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_NOTATION_NODE:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- if (ctxt->context->node->parent == NULL)
- return((xmlNodePtr) ctxt->context->doc);
- if ((ctxt->context->node->parent->type == XML_ELEMENT_NODE) &&
- ((ctxt->context->node->parent->name[0] == ' ') ||
- (xmlStrEqual(ctxt->context->node->parent->name,
- BAD_CAST "fake node libxslt"))))
- return(NULL);
- return(ctxt->context->node->parent);
- case XML_ATTRIBUTE_NODE: {
- xmlAttrPtr tmp = (xmlAttrPtr) ctxt->context->node;
-
- return(tmp->parent);
- }
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return(NULL);
- case XML_NAMESPACE_DECL: {
- xmlNsPtr ns = (xmlNsPtr) ctxt->context->node;
-
- if ((ns->next != NULL) &&
- (ns->next->type != XML_NAMESPACE_DECL))
- return((xmlNodePtr) ns->next);
- /* Bad, how did that namespace end up here ? */
- return(NULL);
- }
- }
- return(NULL);
- }
- if (cur == ctxt->context->doc->children)
- return((xmlNodePtr) ctxt->context->doc);
- if (cur == (xmlNodePtr) ctxt->context->doc)
- return(NULL);
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- if (cur->parent == NULL)
- return(NULL);
- if ((cur->parent->type == XML_ELEMENT_NODE) &&
- ((cur->parent->name[0] == ' ') ||
- (xmlStrEqual(cur->parent->name,
- BAD_CAST "fake node libxslt"))))
- return(NULL);
- return(cur->parent);
- case XML_ATTRIBUTE_NODE: {
- xmlAttrPtr att = (xmlAttrPtr) cur;
-
- return(att->parent);
- }
- case XML_NAMESPACE_DECL: {
- xmlNsPtr ns = (xmlNsPtr) cur;
-
- if ((ns->next != NULL) &&
- (ns->next->type != XML_NAMESPACE_DECL))
- return((xmlNodePtr) ns->next);
- /* Bad, how did that namespace end up here ? */
- return(NULL);
- }
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- return(NULL);
- }
- return(NULL);
-}
-
-/**
- * xmlXPathNextAncestorOrSelf:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "ancestor-or-self" direction
- * he ancestor-or-self axis contains the context node and ancestors of
- * the context node in reverse document order; thus the context node is
- * the first node on the axis, and the context node's parent the second;
- * parent here is defined the same as with the parent axis.
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (cur == NULL)
- return(ctxt->context->node);
- return(xmlXPathNextAncestor(ctxt, cur));
-}
-
-/**
- * xmlXPathNextFollowingSibling:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "following-sibling" direction
- * The following-sibling axis contains the following siblings of the context
- * node in document order.
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if ((ctxt->context->node->type == XML_ATTRIBUTE_NODE) ||
- (ctxt->context->node->type == XML_NAMESPACE_DECL))
- return(NULL);
- if (cur == (xmlNodePtr) ctxt->context->doc)
- return(NULL);
- if (cur == NULL)
- return(ctxt->context->node->next);
- return(cur->next);
-}
-
-/**
- * xmlXPathNextPrecedingSibling:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "preceding-sibling" direction
- * The preceding-sibling axis contains the preceding siblings of the context
- * node in reverse document order; the first preceding sibling is first on the
- * axis; the sibling preceding that node is the second on the axis and so on.
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if ((ctxt->context->node->type == XML_ATTRIBUTE_NODE) ||
- (ctxt->context->node->type == XML_NAMESPACE_DECL))
- return(NULL);
- if (cur == (xmlNodePtr) ctxt->context->doc)
- return(NULL);
- if (cur == NULL)
- return(ctxt->context->node->prev);
- if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE)) {
- cur = cur->prev;
- if (cur == NULL)
- return(ctxt->context->node->prev);
- }
- return(cur->prev);
-}
-
-/**
- * xmlXPathNextFollowing:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "following" direction
- * The following axis contains all nodes in the same document as the context
- * node that are after the context node in document order, excluding any
- * descendants and excluding attribute nodes and namespace nodes; the nodes
- * are ordered in document order
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if ((cur != NULL) && (cur->type != XML_ATTRIBUTE_NODE) &&
- (cur->type != XML_NAMESPACE_DECL) && (cur->children != NULL))
- return(cur->children);
-
- if (cur == NULL) {
- cur = ctxt->context->node;
- if (cur->type == XML_ATTRIBUTE_NODE) {
- cur = cur->parent;
- } else if (cur->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) cur;
-
- if ((ns->next == NULL) ||
- (ns->next->type == XML_NAMESPACE_DECL))
- return (NULL);
- cur = (xmlNodePtr) ns->next;
- }
- }
- if (cur == NULL) return(NULL) ; /* ERROR */
- if (cur->next != NULL) return(cur->next) ;
- do {
- cur = cur->parent;
- if (cur == NULL) break;
- if (cur == (xmlNodePtr) ctxt->context->doc) return(NULL);
- if (cur->next != NULL) return(cur->next);
- } while (cur != NULL);
- return(cur);
-}
-
-/*
- * xmlXPathIsAncestor:
- * @ancestor: the ancestor node
- * @node: the current node
- *
- * Check that @ancestor is a @node's ancestor
- *
- * returns 1 if @ancestor is a @node's ancestor, 0 otherwise.
- */
-static int
-xmlXPathIsAncestor(xmlNodePtr ancestor, xmlNodePtr node) {
- if ((ancestor == NULL) || (node == NULL)) return(0);
- if (node->type == XML_NAMESPACE_DECL)
- return(0);
- if (ancestor->type == XML_NAMESPACE_DECL)
- return(0);
- /* nodes need to be in the same document */
- if (ancestor->doc != node->doc) return(0);
- /* avoid searching if ancestor or node is the root node */
- if (ancestor == (xmlNodePtr) node->doc) return(1);
- if (node == (xmlNodePtr) ancestor->doc) return(0);
- while (node->parent != NULL) {
- if (node->parent == ancestor)
- return(1);
- node = node->parent;
- }
- return(0);
-}
-
-/**
- * xmlXPathNextPreceding:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "preceding" direction
- * the preceding axis contains all nodes in the same document as the context
- * node that are before the context node in document order, excluding any
- * ancestors and excluding attribute nodes and namespace nodes; the nodes are
- * ordered in reverse document order
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, xmlNodePtr cur)
-{
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (cur == NULL) {
- cur = ctxt->context->node;
- if (cur->type == XML_ATTRIBUTE_NODE) {
- cur = cur->parent;
- } else if (cur->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) cur;
-
- if ((ns->next == NULL) ||
- (ns->next->type == XML_NAMESPACE_DECL))
- return (NULL);
- cur = (xmlNodePtr) ns->next;
- }
- }
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return (NULL);
- if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE))
- cur = cur->prev;
- do {
- if (cur->prev != NULL) {
- for (cur = cur->prev; cur->last != NULL; cur = cur->last) ;
- return (cur);
- }
-
- cur = cur->parent;
- if (cur == NULL)
- return (NULL);
- if (cur == ctxt->context->doc->children)
- return (NULL);
- } while (xmlXPathIsAncestor(cur, ctxt->context->node));
- return (cur);
-}
-
-/**
- * xmlXPathNextPrecedingInternal:
- * @ctxt: the XPath Parser context
- * @cur: the current node in the traversal
- *
- * Traversal function for the "preceding" direction
- * the preceding axis contains all nodes in the same document as the context
- * node that are before the context node in document order, excluding any
- * ancestors and excluding attribute nodes and namespace nodes; the nodes are
- * ordered in reverse document order
- * This is a faster implementation but internal only since it requires a
- * state kept in the parser context: ctxt->ancestor.
- *
- * Returns the next element following that axis
- */
-static xmlNodePtr
-xmlXPathNextPrecedingInternal(xmlXPathParserContextPtr ctxt,
- xmlNodePtr cur)
-{
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (cur == NULL) {
- cur = ctxt->context->node;
- if (cur == NULL)
- return (NULL);
- if (cur->type == XML_ATTRIBUTE_NODE) {
- cur = cur->parent;
- } else if (cur->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) cur;
-
- if ((ns->next == NULL) ||
- (ns->next->type == XML_NAMESPACE_DECL))
- return (NULL);
- cur = (xmlNodePtr) ns->next;
- }
- ctxt->ancestor = cur->parent;
- }
- if (cur->type == XML_NAMESPACE_DECL)
- return(NULL);
- if ((cur->prev != NULL) && (cur->prev->type == XML_DTD_NODE))
- cur = cur->prev;
- while (cur->prev == NULL) {
- cur = cur->parent;
- if (cur == NULL)
- return (NULL);
- if (cur == ctxt->context->doc->children)
- return (NULL);
- if (cur != ctxt->ancestor)
- return (cur);
- ctxt->ancestor = cur->parent;
- }
- cur = cur->prev;
- while (cur->last != NULL)
- cur = cur->last;
- return (cur);
-}
-
-/**
- * xmlXPathNextNamespace:
- * @ctxt: the XPath Parser context
- * @cur: the current attribute in the traversal
- *
- * Traversal function for the "namespace" direction
- * the namespace axis contains the namespace nodes of the context node;
- * the order of nodes on this axis is implementation-defined; the axis will
- * be empty unless the context node is an element
- *
- * We keep the XML namespace node at the end of the list.
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (ctxt->context->node->type != XML_ELEMENT_NODE) return(NULL);
- if (cur == NULL) {
- if (ctxt->context->tmpNsList != NULL)
- xmlFree(ctxt->context->tmpNsList);
- ctxt->context->tmpNsList =
- xmlGetNsList(ctxt->context->doc, ctxt->context->node);
- ctxt->context->tmpNsNr = 0;
- if (ctxt->context->tmpNsList != NULL) {
- while (ctxt->context->tmpNsList[ctxt->context->tmpNsNr] != NULL) {
- ctxt->context->tmpNsNr++;
- }
- }
- return((xmlNodePtr) xmlXPathXMLNamespace);
- }
- if (ctxt->context->tmpNsNr > 0) {
- return (xmlNodePtr)ctxt->context->tmpNsList[--ctxt->context->tmpNsNr];
- } else {
- if (ctxt->context->tmpNsList != NULL)
- xmlFree(ctxt->context->tmpNsList);
- ctxt->context->tmpNsList = NULL;
- return(NULL);
- }
-}
-
-/**
- * xmlXPathNextAttribute:
- * @ctxt: the XPath Parser context
- * @cur: the current attribute in the traversal
- *
- * Traversal function for the "attribute" direction
- * TODO: support DTD inherited default attributes
- *
- * Returns the next element following that axis
- */
-xmlNodePtr
-xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) {
- if ((ctxt == NULL) || (ctxt->context == NULL)) return(NULL);
- if (ctxt->context->node == NULL)
- return(NULL);
- if (ctxt->context->node->type != XML_ELEMENT_NODE)
- return(NULL);
- if (cur == NULL) {
- if (ctxt->context->node == (xmlNodePtr) ctxt->context->doc)
- return(NULL);
- return((xmlNodePtr)ctxt->context->node->properties);
- }
- return((xmlNodePtr)cur->next);
-}
-
-/************************************************************************
- * *
- * NodeTest Functions *
- * *
- ************************************************************************/
-
-#define IS_FUNCTION 200
-
-
-/************************************************************************
- * *
- * Implicit tree core function library *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathRoot:
- * @ctxt: the XPath Parser context
- *
- * Initialize the context to the root of the document
- */
-void
-xmlXPathRoot(xmlXPathParserContextPtr ctxt) {
- if ((ctxt == NULL) || (ctxt->context == NULL))
- return;
- ctxt->context->node = (xmlNodePtr) ctxt->context->doc;
- valuePush(ctxt, xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node));
-}
-
-/************************************************************************
- * *
- * The explicit core function library *
- *http://www.w3.org/Style/XSL/Group/1999/07/xpath-19990705.html#corelib *
- * *
- ************************************************************************/
-
-
-/**
- * xmlXPathLastFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the last() XPath function
- * number last()
- * The last function returns the number of nodes in the context node list.
- */
-void
-xmlXPathLastFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(0);
- if (ctxt->context->contextSize >= 0) {
- valuePush(ctxt,
- xmlXPathCacheNewFloat(ctxt->context,
- (double) ctxt->context->contextSize));
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext,
- "last() : %d\n", ctxt->context->contextSize);
-#endif
- } else {
- XP_ERROR(XPATH_INVALID_CTXT_SIZE);
- }
-}
-
-/**
- * xmlXPathPositionFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the position() XPath function
- * number position()
- * The position function returns the position of the context node in the
- * context node list. The first position is 1, and so the last position
- * will be equal to last().
- */
-void
-xmlXPathPositionFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(0);
- if (ctxt->context->proximityPosition >= 0) {
- valuePush(ctxt,
- xmlXPathCacheNewFloat(ctxt->context,
- (double) ctxt->context->proximityPosition));
-#ifdef DEBUG_EXPR
- xmlGenericError(xmlGenericErrorContext, "position() : %d\n",
- ctxt->context->proximityPosition);
-#endif
- } else {
- XP_ERROR(XPATH_INVALID_CTXT_POSITION);
- }
-}
-
-/**
- * xmlXPathCountFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the count() XPath function
- * number count(node-set)
- */
-void
-xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur;
-
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_NODESET) &&
- (ctxt->value->type != XPATH_XSLT_TREE)))
- XP_ERROR(XPATH_INVALID_TYPE);
- cur = valuePop(ctxt);
-
- if ((cur == NULL) || (cur->nodesetval == NULL))
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context, (double) 0));
- else if ((cur->type == XPATH_NODESET) || (cur->type == XPATH_XSLT_TREE)) {
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context,
- (double) cur->nodesetval->nodeNr));
- } else {
- if ((cur->nodesetval->nodeNr != 1) ||
- (cur->nodesetval->nodeTab == NULL)) {
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context, (double) 0));
- } else {
- xmlNodePtr tmp;
- int i = 0;
-
- tmp = cur->nodesetval->nodeTab[0];
- if ((tmp != NULL) && (tmp->type != XML_NAMESPACE_DECL)) {
- tmp = tmp->children;
- while (tmp != NULL) {
- tmp = tmp->next;
- i++;
- }
- }
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context, (double) i));
- }
- }
- xmlXPathReleaseObject(ctxt->context, cur);
-}
-
-/**
- * xmlXPathGetElementsByIds:
- * @doc: the document
- * @ids: a whitespace separated list of IDs
- *
- * Selects elements by their unique ID.
- *
- * Returns a node-set of selected elements.
- */
-static xmlNodeSetPtr
-xmlXPathGetElementsByIds (xmlDocPtr doc, const xmlChar *ids) {
- xmlNodeSetPtr ret;
- const xmlChar *cur = ids;
- xmlChar *ID;
- xmlAttrPtr attr;
- xmlNodePtr elem = NULL;
-
- if (ids == NULL) return(NULL);
-
- ret = xmlXPathNodeSetCreate(NULL);
- if (ret == NULL)
- return(ret);
-
- while (IS_BLANK_CH(*cur)) cur++;
- while (*cur != 0) {
- while ((!IS_BLANK_CH(*cur)) && (*cur != 0))
- cur++;
-
- ID = xmlStrndup(ids, cur - ids);
- if (ID != NULL) {
- /*
- * We used to check the fact that the value passed
- * was an NCName, but this generated much troubles for
- * me and Aleksey Sanin, people blatantly violated that
- * constaint, like Visa3D spec.
- * if (xmlValidateNCName(ID, 1) == 0)
- */
- attr = xmlGetID(doc, ID);
- if (attr != NULL) {
- if (attr->type == XML_ATTRIBUTE_NODE)
- elem = attr->parent;
- else if (attr->type == XML_ELEMENT_NODE)
- elem = (xmlNodePtr) attr;
- else
- elem = NULL;
- if (elem != NULL)
- xmlXPathNodeSetAdd(ret, elem);
- }
- xmlFree(ID);
- }
-
- while (IS_BLANK_CH(*cur)) cur++;
- ids = cur;
- }
- return(ret);
-}
-
-/**
- * xmlXPathIdFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the id() XPath function
- * node-set id(object)
- * The id function selects elements by their unique ID
- * (see [5.2.1 Unique IDs]). When the argument to id is of type node-set,
- * then the result is the union of the result of applying id to the
- * string value of each of the nodes in the argument node-set. When the
- * argument to id is of any other type, the argument is converted to a
- * string as if by a call to the string function; the string is split
- * into a whitespace-separated list of tokens (whitespace is any sequence
- * of characters matching the production S); the result is a node-set
- * containing the elements in the same document as the context node that
- * have a unique ID equal to any of the tokens in the list.
- */
-void
-xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlChar *tokens;
- xmlNodeSetPtr ret;
- xmlXPathObjectPtr obj;
-
- CHECK_ARITY(1);
- obj = valuePop(ctxt);
- if (obj == NULL) XP_ERROR(XPATH_INVALID_OPERAND);
- if ((obj->type == XPATH_NODESET) || (obj->type == XPATH_XSLT_TREE)) {
- xmlNodeSetPtr ns;
- int i;
-
- ret = xmlXPathNodeSetCreate(NULL);
- /*
- * FIXME -- in an out-of-memory condition this will behave badly.
- * The solution is not clear -- we already popped an item from
- * ctxt, so the object is in a corrupt state.
- */
-
- if (obj->nodesetval != NULL) {
- for (i = 0; i < obj->nodesetval->nodeNr; i++) {
- tokens =
- xmlXPathCastNodeToString(obj->nodesetval->nodeTab[i]);
- ns = xmlXPathGetElementsByIds(ctxt->context->doc, tokens);
- ret = xmlXPathNodeSetMerge(ret, ns);
- xmlXPathFreeNodeSet(ns);
- if (tokens != NULL)
- xmlFree(tokens);
- }
- }
- xmlXPathReleaseObject(ctxt->context, obj);
- valuePush(ctxt, xmlXPathCacheWrapNodeSet(ctxt->context, ret));
- return;
- }
- obj = xmlXPathCacheConvertString(ctxt->context, obj);
- ret = xmlXPathGetElementsByIds(ctxt->context->doc, obj->stringval);
- valuePush(ctxt, xmlXPathCacheWrapNodeSet(ctxt->context, ret));
- xmlXPathReleaseObject(ctxt->context, obj);
- return;
-}
-
-/**
- * xmlXPathLocalNameFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the local-name() XPath function
- * string local-name(node-set?)
- * The local-name function returns a string containing the local part
- * of the name of the node in the argument node-set that is first in
- * document order. If the node-set is empty or the first node has no
- * name, an empty string is returned. If the argument is omitted it
- * defaults to the context node.
- */
-void
-xmlXPathLocalNameFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur;
-
- if (ctxt == NULL) return;
-
- if (nargs == 0) {
- valuePush(ctxt, xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node));
- nargs = 1;
- }
-
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_NODESET) &&
- (ctxt->value->type != XPATH_XSLT_TREE)))
- XP_ERROR(XPATH_INVALID_TYPE);
- cur = valuePop(ctxt);
-
- if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr == 0)) {
- valuePush(ctxt, xmlXPathCacheNewCString(ctxt->context, ""));
- } else {
- int i = 0; /* Should be first in document order !!!!! */
- switch (cur->nodesetval->nodeTab[i]->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- case XML_PI_NODE:
- if (cur->nodesetval->nodeTab[i]->name[0] == ' ')
- valuePush(ctxt, xmlXPathCacheNewCString(ctxt->context, ""));
- else
- valuePush(ctxt,
- xmlXPathCacheNewString(ctxt->context,
- cur->nodesetval->nodeTab[i]->name));
- break;
- case XML_NAMESPACE_DECL:
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
- ((xmlNsPtr)cur->nodesetval->nodeTab[i])->prefix));
- break;
- default:
- valuePush(ctxt, xmlXPathCacheNewCString(ctxt->context, ""));
- }
- }
- xmlXPathReleaseObject(ctxt->context, cur);
-}
-
-/**
- * xmlXPathNamespaceURIFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the namespace-uri() XPath function
- * string namespace-uri(node-set?)
- * The namespace-uri function returns a string containing the
- * namespace URI of the expanded name of the node in the argument
- * node-set that is first in document order. If the node-set is empty,
- * the first node has no name, or the expanded name has no namespace
- * URI, an empty string is returned. If the argument is omitted it
- * defaults to the context node.
- */
-void
-xmlXPathNamespaceURIFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur;
-
- if (ctxt == NULL) return;
-
- if (nargs == 0) {
- valuePush(ctxt, xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node));
- nargs = 1;
- }
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_NODESET) &&
- (ctxt->value->type != XPATH_XSLT_TREE)))
- XP_ERROR(XPATH_INVALID_TYPE);
- cur = valuePop(ctxt);
-
- if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr == 0)) {
- valuePush(ctxt, xmlXPathCacheNewCString(ctxt->context, ""));
- } else {
- int i = 0; /* Should be first in document order !!!!! */
- switch (cur->nodesetval->nodeTab[i]->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- if (cur->nodesetval->nodeTab[i]->ns == NULL)
- valuePush(ctxt, xmlXPathCacheNewCString(ctxt->context, ""));
- else
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
- cur->nodesetval->nodeTab[i]->ns->href));
- break;
- default:
- valuePush(ctxt, xmlXPathCacheNewCString(ctxt->context, ""));
- }
- }
- xmlXPathReleaseObject(ctxt->context, cur);
-}
-
-/**
- * xmlXPathNameFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the name() XPath function
- * string name(node-set?)
- * The name function returns a string containing a QName representing
- * the name of the node in the argument node-set that is first in document
- * order. The QName must represent the name with respect to the namespace
- * declarations in effect on the node whose name is being represented.
- * Typically, this will be the form in which the name occurred in the XML
- * source. This need not be the case if there are namespace declarations
- * in effect on the node that associate multiple prefixes with the same
- * namespace. However, an implementation may include information about
- * the original prefix in its representation of nodes; in this case, an
- * implementation can ensure that the returned string is always the same
- * as the QName used in the XML source. If the argument it omitted it
- * defaults to the context node.
- * Libxml keep the original prefix so the "real qualified name" used is
- * returned.
- */
-static void
-xmlXPathNameFunction(xmlXPathParserContextPtr ctxt, int nargs)
-{
- xmlXPathObjectPtr cur;
-
- if (nargs == 0) {
- valuePush(ctxt, xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node));
- nargs = 1;
- }
-
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_NODESET) &&
- (ctxt->value->type != XPATH_XSLT_TREE)))
- XP_ERROR(XPATH_INVALID_TYPE);
- cur = valuePop(ctxt);
-
- if ((cur->nodesetval == NULL) || (cur->nodesetval->nodeNr == 0)) {
- valuePush(ctxt, xmlXPathCacheNewCString(ctxt->context, ""));
- } else {
- int i = 0; /* Should be first in document order !!!!! */
-
- switch (cur->nodesetval->nodeTab[i]->type) {
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- if (cur->nodesetval->nodeTab[i]->name[0] == ' ')
- valuePush(ctxt,
- xmlXPathCacheNewCString(ctxt->context, ""));
- else if ((cur->nodesetval->nodeTab[i]->ns == NULL) ||
- (cur->nodesetval->nodeTab[i]->ns->prefix == NULL)) {
- valuePush(ctxt,
- xmlXPathCacheNewString(ctxt->context,
- cur->nodesetval->nodeTab[i]->name));
- } else {
- xmlChar *fullname;
-
- fullname = xmlBuildQName(cur->nodesetval->nodeTab[i]->name,
- cur->nodesetval->nodeTab[i]->ns->prefix,
- NULL, 0);
- if (fullname == cur->nodesetval->nodeTab[i]->name)
- fullname = xmlStrdup(cur->nodesetval->nodeTab[i]->name);
- if (fullname == NULL) {
- XP_ERROR(XPATH_MEMORY_ERROR);
- }
- valuePush(ctxt, xmlXPathCacheWrapString(
- ctxt->context, fullname));
- }
- break;
- default:
- valuePush(ctxt, xmlXPathCacheNewNodeSet(ctxt->context,
- cur->nodesetval->nodeTab[i]));
- xmlXPathLocalNameFunction(ctxt, 1);
- }
- }
- xmlXPathReleaseObject(ctxt->context, cur);
-}
-
-
-/**
- * xmlXPathStringFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the string() XPath function
- * string string(object?)
- * The string function converts an object to a string as follows:
- * - A node-set is converted to a string by returning the value of
- * the node in the node-set that is first in document order.
- * If the node-set is empty, an empty string is returned.
- * - A number is converted to a string as follows
- * + NaN is converted to the string NaN
- * + positive zero is converted to the string 0
- * + negative zero is converted to the string 0
- * + positive infinity is converted to the string Infinity
- * + negative infinity is converted to the string -Infinity
- * + if the number is an integer, the number is represented in
- * decimal form as a Number with no decimal point and no leading
- * zeros, preceded by a minus sign (-) if the number is negative
- * + otherwise, the number is represented in decimal form as a
- * Number including a decimal point with at least one digit
- * before the decimal point and at least one digit after the
- * decimal point, preceded by a minus sign (-) if the number
- * is negative; there must be no leading zeros before the decimal
- * point apart possibly from the one required digit immediately
- * before the decimal point; beyond the one required digit
- * after the decimal point there must be as many, but only as
- * many, more digits as are needed to uniquely distinguish the
- * number from all other IEEE 754 numeric values.
- * - The boolean false value is converted to the string false.
- * The boolean true value is converted to the string true.
- *
- * If the argument is omitted, it defaults to a node-set with the
- * context node as its only member.
- */
-void
-xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur;
-
- if (ctxt == NULL) return;
- if (nargs == 0) {
- valuePush(ctxt,
- xmlXPathCacheWrapString(ctxt->context,
- xmlXPathCastNodeToString(ctxt->context->node)));
- return;
- }
-
- CHECK_ARITY(1);
- cur = valuePop(ctxt);
- if (cur == NULL) XP_ERROR(XPATH_INVALID_OPERAND);
- valuePush(ctxt, xmlXPathCacheConvertString(ctxt->context, cur));
-}
-
-/**
- * xmlXPathStringLengthFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the string-length() XPath function
- * number string-length(string?)
- * The string-length returns the number of characters in the string
- * (see [3.6 Strings]). If the argument is omitted, it defaults to
- * the context node converted to a string, in other words the value
- * of the context node.
- */
-void
-xmlXPathStringLengthFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur;
-
- if (nargs == 0) {
- if ((ctxt == NULL) || (ctxt->context == NULL))
- return;
- if (ctxt->context->node == NULL) {
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context, 0));
- } else {
- xmlChar *content;
-
- content = xmlXPathCastNodeToString(ctxt->context->node);
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context,
- xmlUTF8Strlen(content)));
- xmlFree(content);
- }
- return;
- }
- CHECK_ARITY(1);
- CAST_TO_STRING;
- CHECK_TYPE(XPATH_STRING);
- cur = valuePop(ctxt);
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context,
- xmlUTF8Strlen(cur->stringval)));
- xmlXPathReleaseObject(ctxt->context, cur);
-}
-
-/**
- * xmlXPathConcatFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the concat() XPath function
- * string concat(string, string, string*)
- * The concat function returns the concatenation of its arguments.
- */
-void
-xmlXPathConcatFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur, newobj;
- xmlChar *tmp;
-
- if (ctxt == NULL) return;
- if (nargs < 2) {
- CHECK_ARITY(2);
- }
-
- CAST_TO_STRING;
- cur = valuePop(ctxt);
- if ((cur == NULL) || (cur->type != XPATH_STRING)) {
- xmlXPathReleaseObject(ctxt->context, cur);
- return;
- }
- nargs--;
-
- while (nargs > 0) {
- CAST_TO_STRING;
- newobj = valuePop(ctxt);
- if ((newobj == NULL) || (newobj->type != XPATH_STRING)) {
- xmlXPathReleaseObject(ctxt->context, newobj);
- xmlXPathReleaseObject(ctxt->context, cur);
- XP_ERROR(XPATH_INVALID_TYPE);
- }
- tmp = xmlStrcat(newobj->stringval, cur->stringval);
- newobj->stringval = cur->stringval;
- cur->stringval = tmp;
- xmlXPathReleaseObject(ctxt->context, newobj);
- nargs--;
- }
- valuePush(ctxt, cur);
-}
-
-/**
- * xmlXPathContainsFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the contains() XPath function
- * boolean contains(string, string)
- * The contains function returns true if the first argument string
- * contains the second argument string, and otherwise returns false.
- */
-void
-xmlXPathContainsFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr hay, needle;
-
- CHECK_ARITY(2);
- CAST_TO_STRING;
- CHECK_TYPE(XPATH_STRING);
- needle = valuePop(ctxt);
- CAST_TO_STRING;
- hay = valuePop(ctxt);
-
- if ((hay == NULL) || (hay->type != XPATH_STRING)) {
- xmlXPathReleaseObject(ctxt->context, hay);
- xmlXPathReleaseObject(ctxt->context, needle);
- XP_ERROR(XPATH_INVALID_TYPE);
- }
- if (xmlStrstr(hay->stringval, needle->stringval))
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, 1));
- else
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, 0));
- xmlXPathReleaseObject(ctxt->context, hay);
- xmlXPathReleaseObject(ctxt->context, needle);
-}
-
-/**
- * xmlXPathStartsWithFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the starts-with() XPath function
- * boolean starts-with(string, string)
- * The starts-with function returns true if the first argument string
- * starts with the second argument string, and otherwise returns false.
- */
-void
-xmlXPathStartsWithFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr hay, needle;
- int n;
-
- CHECK_ARITY(2);
- CAST_TO_STRING;
- CHECK_TYPE(XPATH_STRING);
- needle = valuePop(ctxt);
- CAST_TO_STRING;
- hay = valuePop(ctxt);
-
- if ((hay == NULL) || (hay->type != XPATH_STRING)) {
- xmlXPathReleaseObject(ctxt->context, hay);
- xmlXPathReleaseObject(ctxt->context, needle);
- XP_ERROR(XPATH_INVALID_TYPE);
- }
- n = xmlStrlen(needle->stringval);
- if (xmlStrncmp(hay->stringval, needle->stringval, n))
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, 0));
- else
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, 1));
- xmlXPathReleaseObject(ctxt->context, hay);
- xmlXPathReleaseObject(ctxt->context, needle);
-}
-
-/**
- * xmlXPathSubstringFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the substring() XPath function
- * string substring(string, number, number?)
- * The substring function returns the substring of the first argument
- * starting at the position specified in the second argument with
- * length specified in the third argument. For example,
- * substring("12345",2,3) returns "234". If the third argument is not
- * specified, it returns the substring starting at the position specified
- * in the second argument and continuing to the end of the string. For
- * example, substring("12345",2) returns "2345". More precisely, each
- * character in the string (see [3.6 Strings]) is considered to have a
- * numeric position: the position of the first character is 1, the position
- * of the second character is 2 and so on. The returned substring contains
- * those characters for which the position of the character is greater than
- * or equal to the second argument and, if the third argument is specified,
- * less than the sum of the second and third arguments; the comparisons
- * and addition used for the above follow the standard IEEE 754 rules. Thus:
- * - substring("12345", 1.5, 2.6) returns "234"
- * - substring("12345", 0, 3) returns "12"
- * - substring("12345", 0 div 0, 3) returns ""
- * - substring("12345", 1, 0 div 0) returns ""
- * - substring("12345", -42, 1 div 0) returns "12345"
- * - substring("12345", -1 div 0, 1 div 0) returns ""
- */
-void
-xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr str, start, len;
- double le=0, in;
- int i, l, m;
- xmlChar *ret;
-
- if (nargs < 2) {
- CHECK_ARITY(2);
- }
- if (nargs > 3) {
- CHECK_ARITY(3);
- }
- /*
- * take care of possible last (position) argument
- */
- if (nargs == 3) {
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
- len = valuePop(ctxt);
- le = len->floatval;
- xmlXPathReleaseObject(ctxt->context, len);
- }
-
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
- start = valuePop(ctxt);
- in = start->floatval;
- xmlXPathReleaseObject(ctxt->context, start);
- CAST_TO_STRING;
- CHECK_TYPE(XPATH_STRING);
- str = valuePop(ctxt);
- m = xmlUTF8Strlen((const unsigned char *)str->stringval);
-
- /*
- * If last pos not present, calculate last position
- */
- if (nargs != 3) {
- le = (double)m;
- if (in < 1.0)
- in = 1.0;
- }
-
- /* Need to check for the special cases where either
- * the index is NaN, the length is NaN, or both
- * arguments are infinity (relying on Inf + -Inf = NaN)
- */
- if (!xmlXPathIsInf(in) && !xmlXPathIsNaN(in + le)) {
- /*
- * To meet the requirements of the spec, the arguments
- * must be converted to integer format before
- * initial index calculations are done
- *
- * First we go to integer form, rounding up
- * and checking for special cases
- */
- i = (int) in;
- if (((double)i)+0.5 <= in) i++;
-
- if (xmlXPathIsInf(le) == 1) {
- l = m;
- if (i < 1)
- i = 1;
- }
- else if (xmlXPathIsInf(le) == -1 || le < 0.0)
- l = 0;
- else {
- l = (int) le;
- if (((double)l)+0.5 <= le) l++;
- }
-
- /* Now we normalize inidices */
- i -= 1;
- l += i;
- if (i < 0)
- i = 0;
- if (l > m)
- l = m;
-
- /* number of chars to copy */
- l -= i;
-
- ret = xmlUTF8Strsub(str->stringval, i, l);
- }
- else {
- ret = NULL;
- }
- if (ret == NULL)
- valuePush(ctxt, xmlXPathCacheNewCString(ctxt->context, ""));
- else {
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context, ret));
- xmlFree(ret);
- }
- xmlXPathReleaseObject(ctxt->context, str);
-}
-
-/**
- * xmlXPathSubstringBeforeFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the substring-before() XPath function
- * string substring-before(string, string)
- * The substring-before function returns the substring of the first
- * argument string that precedes the first occurrence of the second
- * argument string in the first argument string, or the empty string
- * if the first argument string does not contain the second argument
- * string. For example, substring-before("1999/04/01","/") returns 1999.
- */
-void
-xmlXPathSubstringBeforeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr str;
- xmlXPathObjectPtr find;
- xmlBufPtr target;
- const xmlChar *point;
- int offset;
-
- CHECK_ARITY(2);
- CAST_TO_STRING;
- find = valuePop(ctxt);
- CAST_TO_STRING;
- str = valuePop(ctxt);
-
- target = xmlBufCreate();
- if (target) {
- point = xmlStrstr(str->stringval, find->stringval);
- if (point) {
- offset = (int)(point - str->stringval);
- xmlBufAdd(target, str->stringval, offset);
- }
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
- xmlBufContent(target)));
- xmlBufFree(target);
- }
- xmlXPathReleaseObject(ctxt->context, str);
- xmlXPathReleaseObject(ctxt->context, find);
-}
-
-/**
- * xmlXPathSubstringAfterFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the substring-after() XPath function
- * string substring-after(string, string)
- * The substring-after function returns the substring of the first
- * argument string that follows the first occurrence of the second
- * argument string in the first argument string, or the empty stringi
- * if the first argument string does not contain the second argument
- * string. For example, substring-after("1999/04/01","/") returns 04/01,
- * and substring-after("1999/04/01","19") returns 99/04/01.
- */
-void
-xmlXPathSubstringAfterFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr str;
- xmlXPathObjectPtr find;
- xmlBufPtr target;
- const xmlChar *point;
- int offset;
-
- CHECK_ARITY(2);
- CAST_TO_STRING;
- find = valuePop(ctxt);
- CAST_TO_STRING;
- str = valuePop(ctxt);
-
- target = xmlBufCreate();
- if (target) {
- point = xmlStrstr(str->stringval, find->stringval);
- if (point) {
- offset = (int)(point - str->stringval) + xmlStrlen(find->stringval);
- xmlBufAdd(target, &str->stringval[offset],
- xmlStrlen(str->stringval) - offset);
- }
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
- xmlBufContent(target)));
- xmlBufFree(target);
- }
- xmlXPathReleaseObject(ctxt->context, str);
- xmlXPathReleaseObject(ctxt->context, find);
-}
-
-/**
- * xmlXPathNormalizeFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the normalize-space() XPath function
- * string normalize-space(string?)
- * The normalize-space function returns the argument string with white
- * space normalized by stripping leading and trailing whitespace
- * and replacing sequences of whitespace characters by a single
- * space. Whitespace characters are the same allowed by the S production
- * in XML. If the argument is omitted, it defaults to the context
- * node converted to a string, in other words the value of the context node.
- */
-void
-xmlXPathNormalizeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr obj = NULL;
- xmlChar *source = NULL;
- xmlBufPtr target;
- xmlChar blank;
-
- if (ctxt == NULL) return;
- if (nargs == 0) {
- /* Use current context node */
- valuePush(ctxt,
- xmlXPathCacheWrapString(ctxt->context,
- xmlXPathCastNodeToString(ctxt->context->node)));
- nargs = 1;
- }
-
- CHECK_ARITY(1);
- CAST_TO_STRING;
- CHECK_TYPE(XPATH_STRING);
- obj = valuePop(ctxt);
- source = obj->stringval;
-
- target = xmlBufCreate();
- if (target && source) {
-
- /* Skip leading whitespaces */
- while (IS_BLANK_CH(*source))
- source++;
-
- /* Collapse intermediate whitespaces, and skip trailing whitespaces */
- blank = 0;
- while (*source) {
- if (IS_BLANK_CH(*source)) {
- blank = 0x20;
- } else {
- if (blank) {
- xmlBufAdd(target, &blank, 1);
- blank = 0;
- }
- xmlBufAdd(target, source, 1);
- }
- source++;
- }
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
- xmlBufContent(target)));
- xmlBufFree(target);
- }
- xmlXPathReleaseObject(ctxt->context, obj);
-}
-
-/**
- * xmlXPathTranslateFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the translate() XPath function
- * string translate(string, string, string)
- * The translate function returns the first argument string with
- * occurrences of characters in the second argument string replaced
- * by the character at the corresponding position in the third argument
- * string. For example, translate("bar","abc","ABC") returns the string
- * BAr. If there is a character in the second argument string with no
- * character at a corresponding position in the third argument string
- * (because the second argument string is longer than the third argument
- * string), then occurrences of that character in the first argument
- * string are removed. For example, translate("--aaa--","abc-","ABC")
- * returns "AAA". If a character occurs more than once in second
- * argument string, then the first occurrence determines the replacement
- * character. If the third argument string is longer than the second
- * argument string, then excess characters are ignored.
- */
-void
-xmlXPathTranslateFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr str;
- xmlXPathObjectPtr from;
- xmlXPathObjectPtr to;
- xmlBufPtr target;
- int offset, max;
- xmlChar ch;
- const xmlChar *point;
- xmlChar *cptr;
-
- CHECK_ARITY(3);
-
- CAST_TO_STRING;
- to = valuePop(ctxt);
- CAST_TO_STRING;
- from = valuePop(ctxt);
- CAST_TO_STRING;
- str = valuePop(ctxt);
-
- target = xmlBufCreate();
- if (target) {
- max = xmlUTF8Strlen(to->stringval);
- for (cptr = str->stringval; (ch=*cptr); ) {
- offset = xmlUTF8Strloc(from->stringval, cptr);
- if (offset >= 0) {
- if (offset < max) {
- point = xmlUTF8Strpos(to->stringval, offset);
- if (point)
- xmlBufAdd(target, point, xmlUTF8Strsize(point, 1));
- }
- } else
- xmlBufAdd(target, cptr, xmlUTF8Strsize(cptr, 1));
-
- /* Step to next character in input */
- cptr++;
- if ( ch & 0x80 ) {
- /* if not simple ascii, verify proper format */
- if ( (ch & 0xc0) != 0xc0 ) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathTranslateFunction: Invalid UTF8 string\n");
- /* not asserting an XPath error is probably better */
- break;
- }
- /* then skip over remaining bytes for this char */
- while ( (ch <<= 1) & 0x80 )
- if ( (*cptr++ & 0xc0) != 0x80 ) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathTranslateFunction: Invalid UTF8 string\n");
- /* not asserting an XPath error is probably better */
- break;
- }
- if (ch & 0x80) /* must have had error encountered */
- break;
- }
- }
- }
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
- xmlBufContent(target)));
- xmlBufFree(target);
- xmlXPathReleaseObject(ctxt->context, str);
- xmlXPathReleaseObject(ctxt->context, from);
- xmlXPathReleaseObject(ctxt->context, to);
-}
-
-/**
- * xmlXPathBooleanFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the boolean() XPath function
- * boolean boolean(object)
- * The boolean function converts its argument to a boolean as follows:
- * - a number is true if and only if it is neither positive or
- * negative zero nor NaN
- * - a node-set is true if and only if it is non-empty
- * - a string is true if and only if its length is non-zero
- */
-void
-xmlXPathBooleanFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur;
-
- CHECK_ARITY(1);
- cur = valuePop(ctxt);
- if (cur == NULL) XP_ERROR(XPATH_INVALID_OPERAND);
- cur = xmlXPathCacheConvertBoolean(ctxt->context, cur);
- valuePush(ctxt, cur);
-}
-
-/**
- * xmlXPathNotFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the not() XPath function
- * boolean not(boolean)
- * The not function returns true if its argument is false,
- * and false otherwise.
- */
-void
-xmlXPathNotFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(1);
- CAST_TO_BOOLEAN;
- CHECK_TYPE(XPATH_BOOLEAN);
- ctxt->value->boolval = ! ctxt->value->boolval;
-}
-
-/**
- * xmlXPathTrueFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the true() XPath function
- * boolean true()
- */
-void
-xmlXPathTrueFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(0);
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, 1));
-}
-
-/**
- * xmlXPathFalseFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the false() XPath function
- * boolean false()
- */
-void
-xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(0);
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, 0));
-}
-
-/**
- * xmlXPathLangFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the lang() XPath function
- * boolean lang(string)
- * The lang function returns true or false depending on whether the
- * language of the context node as specified by xml:lang attributes
- * is the same as or is a sublanguage of the language specified by
- * the argument string. The language of the context node is determined
- * by the value of the xml:lang attribute on the context node, or, if
- * the context node has no xml:lang attribute, by the value of the
- * xml:lang attribute on the nearest ancestor of the context node that
- * has an xml:lang attribute. If there is no such attribute, then lang
- * returns false. If there is such an attribute, then lang returns
- * true if the attribute value is equal to the argument ignoring case,
- * or if there is some suffix starting with - such that the attribute
- * value is equal to the argument ignoring that suffix of the attribute
- * value and ignoring case.
- */
-void
-xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr val = NULL;
- const xmlChar *theLang = NULL;
- const xmlChar *lang;
- int ret = 0;
- int i;
-
- CHECK_ARITY(1);
- CAST_TO_STRING;
- CHECK_TYPE(XPATH_STRING);
- val = valuePop(ctxt);
- lang = val->stringval;
- theLang = xmlNodeGetLang(ctxt->context->node);
- if ((theLang != NULL) && (lang != NULL)) {
- for (i = 0;lang[i] != 0;i++)
- if (toupper(lang[i]) != toupper(theLang[i]))
- goto not_equal;
- if ((theLang[i] == 0) || (theLang[i] == '-'))
- ret = 1;
- }
-not_equal:
- if (theLang != NULL)
- xmlFree((void *)theLang);
-
- xmlXPathReleaseObject(ctxt->context, val);
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, ret));
-}
-
-/**
- * xmlXPathNumberFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the number() XPath function
- * number number(object?)
- */
-void
-xmlXPathNumberFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur;
- double res;
-
- if (ctxt == NULL) return;
- if (nargs == 0) {
- if (ctxt->context->node == NULL) {
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context, 0.0));
- } else {
- xmlChar* content = xmlNodeGetContent(ctxt->context->node);
-
- res = xmlXPathStringEvalNumber(content);
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context, res));
- xmlFree(content);
- }
- return;
- }
-
- CHECK_ARITY(1);
- cur = valuePop(ctxt);
- valuePush(ctxt, xmlXPathCacheConvertNumber(ctxt->context, cur));
-}
-
-/**
- * xmlXPathSumFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the sum() XPath function
- * number sum(node-set)
- * The sum function returns the sum of the values of the nodes in
- * the argument node-set.
- */
-void
-xmlXPathSumFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr cur;
- int i;
- double res = 0.0;
-
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_NODESET) &&
- (ctxt->value->type != XPATH_XSLT_TREE)))
- XP_ERROR(XPATH_INVALID_TYPE);
- cur = valuePop(ctxt);
-
- if ((cur->nodesetval != NULL) && (cur->nodesetval->nodeNr != 0)) {
- for (i = 0; i < cur->nodesetval->nodeNr; i++) {
- res += xmlXPathCastNodeToNumber(cur->nodesetval->nodeTab[i]);
- }
- }
- valuePush(ctxt, xmlXPathCacheNewFloat(ctxt->context, res));
- xmlXPathReleaseObject(ctxt->context, cur);
-}
-
-/**
- * xmlXPathFloorFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the floor() XPath function
- * number floor(number)
- * The floor function returns the largest (closest to positive infinity)
- * number that is not greater than the argument and that is an integer.
- */
-void
-xmlXPathFloorFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(1);
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
-
- ctxt->value->floatval = floor(ctxt->value->floatval);
-}
-
-/**
- * xmlXPathCeilingFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the ceiling() XPath function
- * number ceiling(number)
- * The ceiling function returns the smallest (closest to negative infinity)
- * number that is not less than the argument and that is an integer.
- */
-void
-xmlXPathCeilingFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(1);
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
-
- ctxt->value->floatval = ceil(ctxt->value->floatval);
-}
-
-/**
- * xmlXPathRoundFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the round() XPath function
- * number round(number)
- * The round function returns the number that is closest to the
- * argument and that is an integer. If there are two such numbers,
- * then the one that is closest to positive infinity is returned.
- */
-void
-xmlXPathRoundFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- double f;
-
- CHECK_ARITY(1);
- CAST_TO_NUMBER;
- CHECK_TYPE(XPATH_NUMBER);
-
- f = ctxt->value->floatval;
-
- /* Test for zero to keep negative zero unchanged. */
- if ((xmlXPathIsNaN(f)) || (f == 0.0))
- return;
-
- if ((f >= -0.5) && (f < 0.0)) {
- /* Negative zero. */
- ctxt->value->floatval = xmlXPathNZERO;
- }
- else {
- double rounded = floor(f);
- if (f - rounded >= 0.5)
- rounded += 1.0;
- ctxt->value->floatval = rounded;
- }
-}
-
-/************************************************************************
- * *
- * The Parser *
- * *
- ************************************************************************/
-
-/*
- * a few forward declarations since we use a recursive call based
- * implementation.
- */
-static void xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt, int sort);
-static void xmlXPathCompPredicate(xmlXPathParserContextPtr ctxt, int filter);
-static void xmlXPathCompLocationPath(xmlXPathParserContextPtr ctxt);
-static void xmlXPathCompRelativeLocationPath(xmlXPathParserContextPtr ctxt);
-static xmlChar * xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt,
- int qualified);
-
-/**
- * xmlXPathCurrentChar:
- * @ctxt: the XPath parser context
- * @cur: pointer to the beginning of the char
- * @len: pointer to the length of the char read
- *
- * The current char value, if using UTF-8 this may actually span multiple
- * bytes in the input buffer.
- *
- * Returns the current char value and its length
- */
-
-static int
-xmlXPathCurrentChar(xmlXPathParserContextPtr ctxt, int *len) {
- unsigned char c;
- unsigned int val;
- const xmlChar *cur;
-
- if (ctxt == NULL)
- return(0);
- cur = ctxt->cur;
-
- /*
- * We are supposed to handle UTF8, check it's valid
- * From rfc2044: encoding of the Unicode values on UTF-8:
- *
- * UCS-4 range (hex.) UTF-8 octet sequence (binary)
- * 0000 0000-0000 007F 0xxxxxxx
- * 0000 0080-0000 07FF 110xxxxx 10xxxxxx
- * 0000 0800-0000 FFFF 1110xxxx 10xxxxxx 10xxxxxx
- *
- * Check for the 0x110000 limit too
- */
- c = *cur;
- if (c & 0x80) {
- if ((cur[1] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xe0) == 0xe0) {
-
- if ((cur[2] & 0xc0) != 0x80)
- goto encoding_error;
- if ((c & 0xf0) == 0xf0) {
- if (((c & 0xf8) != 0xf0) ||
- ((cur[3] & 0xc0) != 0x80))
- goto encoding_error;
- /* 4-byte code */
- *len = 4;
- val = (cur[0] & 0x7) << 18;
- val |= (cur[1] & 0x3f) << 12;
- val |= (cur[2] & 0x3f) << 6;
- val |= cur[3] & 0x3f;
- } else {
- /* 3-byte code */
- *len = 3;
- val = (cur[0] & 0xf) << 12;
- val |= (cur[1] & 0x3f) << 6;
- val |= cur[2] & 0x3f;
- }
- } else {
- /* 2-byte code */
- *len = 2;
- val = (cur[0] & 0x1f) << 6;
- val |= cur[1] & 0x3f;
- }
- if (!IS_CHAR(val)) {
- XP_ERROR0(XPATH_INVALID_CHAR_ERROR);
- }
- return(val);
- } else {
- /* 1-byte code */
- *len = 1;
- return((int) *cur);
- }
-encoding_error:
- /*
- * If we detect an UTF8 error that probably means that the
- * input encoding didn't get properly advertised in the
- * declaration header. Report the error and switch the encoding
- * to ISO-Latin-1 (if you don't like this policy, just declare the
- * encoding !)
- */
- *len = 0;
- XP_ERROR0(XPATH_ENCODING_ERROR);
-}
-
-/**
- * xmlXPathParseNCName:
- * @ctxt: the XPath Parser context
- *
- * parse an XML namespace non qualified name.
- *
- * [NS 3] NCName ::= (Letter | '_') (NCNameChar)*
- *
- * [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' |
- * CombiningChar | Extender
- *
- * Returns the namespace name or NULL
- */
-
-xmlChar *
-xmlXPathParseNCName(xmlXPathParserContextPtr ctxt) {
- const xmlChar *in;
- xmlChar *ret;
- int count = 0;
-
- if ((ctxt == NULL) || (ctxt->cur == NULL)) return(NULL);
- /*
- * Accelerator for simple ASCII names
- */
- in = ctxt->cur;
- if (((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- (*in == '_')) {
- in++;
- while (((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- ((*in >= 0x30) && (*in <= 0x39)) ||
- (*in == '_') || (*in == '.') ||
- (*in == '-'))
- in++;
- if ((*in == ' ') || (*in == '>') || (*in == '/') ||
- (*in == '[') || (*in == ']') || (*in == ':') ||
- (*in == '@') || (*in == '*')) {
- count = in - ctxt->cur;
- if (count == 0)
- return(NULL);
- ret = xmlStrndup(ctxt->cur, count);
- ctxt->cur = in;
- return(ret);
- }
- }
- return(xmlXPathParseNameComplex(ctxt, 0));
-}
-
-
-/**
- * xmlXPathParseQName:
- * @ctxt: the XPath Parser context
- * @prefix: a xmlChar **
- *
- * parse an XML qualified name
- *
- * [NS 5] QName ::= (Prefix ':')? LocalPart
- *
- * [NS 6] Prefix ::= NCName
- *
- * [NS 7] LocalPart ::= NCName
- *
- * Returns the function returns the local part, and prefix is updated
- * to get the Prefix if any.
- */
-
-static xmlChar *
-xmlXPathParseQName(xmlXPathParserContextPtr ctxt, xmlChar **prefix) {
- xmlChar *ret = NULL;
-
- *prefix = NULL;
- ret = xmlXPathParseNCName(ctxt);
- if (ret && CUR == ':') {
- *prefix = ret;
- NEXT;
- ret = xmlXPathParseNCName(ctxt);
- }
- return(ret);
-}
-
-/**
- * xmlXPathParseName:
- * @ctxt: the XPath Parser context
- *
- * parse an XML name
- *
- * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
- * CombiningChar | Extender
- *
- * [5] Name ::= (Letter | '_' | ':') (NameChar)*
- *
- * Returns the namespace name or NULL
- */
-
-xmlChar *
-xmlXPathParseName(xmlXPathParserContextPtr ctxt) {
- const xmlChar *in;
- xmlChar *ret;
- size_t count = 0;
-
- if ((ctxt == NULL) || (ctxt->cur == NULL)) return(NULL);
- /*
- * Accelerator for simple ASCII names
- */
- in = ctxt->cur;
- if (((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- (*in == '_') || (*in == ':')) {
- in++;
- while (((*in >= 0x61) && (*in <= 0x7A)) ||
- ((*in >= 0x41) && (*in <= 0x5A)) ||
- ((*in >= 0x30) && (*in <= 0x39)) ||
- (*in == '_') || (*in == '-') ||
- (*in == ':') || (*in == '.'))
- in++;
- if ((*in > 0) && (*in < 0x80)) {
- count = in - ctxt->cur;
- if (count > XML_MAX_NAME_LENGTH) {
- ctxt->cur = in;
- XP_ERRORNULL(XPATH_EXPR_ERROR);
- }
- ret = xmlStrndup(ctxt->cur, count);
- ctxt->cur = in;
- return(ret);
- }
- }
- return(xmlXPathParseNameComplex(ctxt, 1));
-}
-
-static xmlChar *
-xmlXPathParseNameComplex(xmlXPathParserContextPtr ctxt, int qualified) {
- xmlChar buf[XML_MAX_NAMELEN + 5];
- int len = 0, l;
- int c;
-
- /*
- * Handler for more complex cases
- */
- c = CUR_CHAR(l);
- if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
- (c == '[') || (c == ']') || (c == '@') || /* accelerators */
- (c == '*') || /* accelerators */
- (!IS_LETTER(c) && (c != '_') &&
- ((!qualified) || (c != ':')))) {
- return(NULL);
- }
-
- while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
- ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
- (c == '.') || (c == '-') ||
- (c == '_') || ((qualified) && (c == ':')) ||
- (IS_COMBINING(c)) ||
- (IS_EXTENDER(c)))) {
- COPY_BUF(l,buf,len,c);
- NEXTL(l);
- c = CUR_CHAR(l);
- if (len >= XML_MAX_NAMELEN) {
- /*
- * Okay someone managed to make a huge name, so he's ready to pay
- * for the processing speed.
- */
- xmlChar *buffer;
- int max = len * 2;
-
- if (len > XML_MAX_NAME_LENGTH) {
- XP_ERRORNULL(XPATH_EXPR_ERROR);
- }
- buffer = (xmlChar *) xmlMallocAtomic(max * sizeof(xmlChar));
- if (buffer == NULL) {
- XP_ERRORNULL(XPATH_MEMORY_ERROR);
- }
- memcpy(buffer, buf, len);
- while ((IS_LETTER(c)) || (IS_DIGIT(c)) || /* test bigname.xml */
- (c == '.') || (c == '-') ||
- (c == '_') || ((qualified) && (c == ':')) ||
- (IS_COMBINING(c)) ||
- (IS_EXTENDER(c))) {
- if (len + 10 > max) {
- if (max > XML_MAX_NAME_LENGTH) {
- XP_ERRORNULL(XPATH_EXPR_ERROR);
- }
- max *= 2;
- buffer = (xmlChar *) xmlRealloc(buffer,
- max * sizeof(xmlChar));
- if (buffer == NULL) {
- XP_ERRORNULL(XPATH_MEMORY_ERROR);
- }
- }
- COPY_BUF(l,buffer,len,c);
- NEXTL(l);
- c = CUR_CHAR(l);
- }
- buffer[len] = 0;
- return(buffer);
- }
- }
- if (len == 0)
- return(NULL);
- return(xmlStrndup(buf, len));
-}
-
-#define MAX_FRAC 20
-
-/**
- * xmlXPathStringEvalNumber:
- * @str: A string to scan
- *
- * [30a] Float ::= Number ('e' Digits?)?
- *
- * [30] Number ::= Digits ('.' Digits?)?
- * | '.' Digits
- * [31] Digits ::= [0-9]+
- *
- * Compile a Number in the string
- * In complement of the Number expression, this function also handles
- * negative values : '-' Number.
- *
- * Returns the double value.
- */
-double
-xmlXPathStringEvalNumber(const xmlChar *str) {
- const xmlChar *cur = str;
- double ret;
- int ok = 0;
- int isneg = 0;
- int exponent = 0;
- int is_exponent_negative = 0;
-#ifdef __GNUC__
- unsigned long tmp = 0;
- double temp;
-#endif
- if (cur == NULL) return(0);
- while (IS_BLANK_CH(*cur)) cur++;
- if ((*cur != '.') && ((*cur < '0') || (*cur > '9')) && (*cur != '-')) {
- return(xmlXPathNAN);
- }
- if (*cur == '-') {
- isneg = 1;
- cur++;
- }
-
-#ifdef __GNUC__
- /*
- * tmp/temp is a workaround against a gcc compiler bug
- * http://veillard.com/gcc.bug
- */
- ret = 0;
- while ((*cur >= '0') && (*cur <= '9')) {
- ret = ret * 10;
- tmp = (*cur - '0');
- ok = 1;
- cur++;
- temp = (double) tmp;
- ret = ret + temp;
- }
-#else
- ret = 0;
- while ((*cur >= '0') && (*cur <= '9')) {
- ret = ret * 10 + (*cur - '0');
- ok = 1;
- cur++;
- }
-#endif
-
- if (*cur == '.') {
- int v, frac = 0, max;
- double fraction = 0;
-
- cur++;
- if (((*cur < '0') || (*cur > '9')) && (!ok)) {
- return(xmlXPathNAN);
- }
- while (*cur == '0') {
- frac = frac + 1;
- cur++;
- }
- max = frac + MAX_FRAC;
- while (((*cur >= '0') && (*cur <= '9')) && (frac < max)) {
- v = (*cur - '0');
- fraction = fraction * 10 + v;
- frac = frac + 1;
- cur++;
- }
- fraction /= pow(10.0, frac);
- ret = ret + fraction;
- while ((*cur >= '0') && (*cur <= '9'))
- cur++;
- }
- if ((*cur == 'e') || (*cur == 'E')) {
- cur++;
- if (*cur == '-') {
- is_exponent_negative = 1;
- cur++;
- } else if (*cur == '+') {
- cur++;
- }
- while ((*cur >= '0') && (*cur <= '9')) {
- if (exponent < 1000000)
- exponent = exponent * 10 + (*cur - '0');
- cur++;
- }
- }
- while (IS_BLANK_CH(*cur)) cur++;
- if (*cur != 0) return(xmlXPathNAN);
- if (isneg) ret = -ret;
- if (is_exponent_negative) exponent = -exponent;
- ret *= pow(10.0, (double)exponent);
- return(ret);
-}
-
-/**
- * xmlXPathCompNumber:
- * @ctxt: the XPath Parser context
- *
- * [30] Number ::= Digits ('.' Digits?)?
- * | '.' Digits
- * [31] Digits ::= [0-9]+
- *
- * Compile a Number, then push it on the stack
- *
- */
-static void
-xmlXPathCompNumber(xmlXPathParserContextPtr ctxt)
-{
- double ret = 0.0;
- int ok = 0;
- int exponent = 0;
- int is_exponent_negative = 0;
-#ifdef __GNUC__
- unsigned long tmp = 0;
- double temp;
-#endif
-
- CHECK_ERROR;
- if ((CUR != '.') && ((CUR < '0') || (CUR > '9'))) {
- XP_ERROR(XPATH_NUMBER_ERROR);
- }
-#ifdef __GNUC__
- /*
- * tmp/temp is a workaround against a gcc compiler bug
- * http://veillard.com/gcc.bug
- */
- ret = 0;
- while ((CUR >= '0') && (CUR <= '9')) {
- ret = ret * 10;
- tmp = (CUR - '0');
- ok = 1;
- NEXT;
- temp = (double) tmp;
- ret = ret + temp;
- }
-#else
- ret = 0;
- while ((CUR >= '0') && (CUR <= '9')) {
- ret = ret * 10 + (CUR - '0');
- ok = 1;
- NEXT;
- }
-#endif
- if (CUR == '.') {
- int v, frac = 0, max;
- double fraction = 0;
-
- NEXT;
- if (((CUR < '0') || (CUR > '9')) && (!ok)) {
- XP_ERROR(XPATH_NUMBER_ERROR);
- }
- while (CUR == '0') {
- frac = frac + 1;
- NEXT;
- }
- max = frac + MAX_FRAC;
- while ((CUR >= '0') && (CUR <= '9') && (frac < max)) {
- v = (CUR - '0');
- fraction = fraction * 10 + v;
- frac = frac + 1;
- NEXT;
- }
- fraction /= pow(10.0, frac);
- ret = ret + fraction;
- while ((CUR >= '0') && (CUR <= '9'))
- NEXT;
- }
- if ((CUR == 'e') || (CUR == 'E')) {
- NEXT;
- if (CUR == '-') {
- is_exponent_negative = 1;
- NEXT;
- } else if (CUR == '+') {
- NEXT;
- }
- while ((CUR >= '0') && (CUR <= '9')) {
- if (exponent < 1000000)
- exponent = exponent * 10 + (CUR - '0');
- NEXT;
- }
- if (is_exponent_negative)
- exponent = -exponent;
- ret *= pow(10.0, (double) exponent);
- }
- PUSH_LONG_EXPR(XPATH_OP_VALUE, XPATH_NUMBER, 0, 0,
- xmlXPathCacheNewFloat(ctxt->context, ret), NULL);
-}
-
-/**
- * xmlXPathParseLiteral:
- * @ctxt: the XPath Parser context
- *
- * Parse a Literal
- *
- * [29] Literal ::= '"' [^"]* '"'
- * | "'" [^']* "'"
- *
- * Returns the value found or NULL in case of error
- */
-static xmlChar *
-xmlXPathParseLiteral(xmlXPathParserContextPtr ctxt) {
- const xmlChar *q;
- xmlChar *ret = NULL;
-
- if (CUR == '"') {
- NEXT;
- q = CUR_PTR;
- while ((IS_CHAR_CH(CUR)) && (CUR != '"'))
- NEXT;
- if (!IS_CHAR_CH(CUR)) {
- XP_ERRORNULL(XPATH_UNFINISHED_LITERAL_ERROR);
- } else {
- ret = xmlStrndup(q, CUR_PTR - q);
- NEXT;
- }
- } else if (CUR == '\'') {
- NEXT;
- q = CUR_PTR;
- while ((IS_CHAR_CH(CUR)) && (CUR != '\''))
- NEXT;
- if (!IS_CHAR_CH(CUR)) {
- XP_ERRORNULL(XPATH_UNFINISHED_LITERAL_ERROR);
- } else {
- ret = xmlStrndup(q, CUR_PTR - q);
- NEXT;
- }
- } else {
- XP_ERRORNULL(XPATH_START_LITERAL_ERROR);
- }
- return(ret);
-}
-
-/**
- * xmlXPathCompLiteral:
- * @ctxt: the XPath Parser context
- *
- * Parse a Literal and push it on the stack.
- *
- * [29] Literal ::= '"' [^"]* '"'
- * | "'" [^']* "'"
- *
- * TODO: xmlXPathCompLiteral memory allocation could be improved.
- */
-static void
-xmlXPathCompLiteral(xmlXPathParserContextPtr ctxt) {
- const xmlChar *q;
- xmlChar *ret = NULL;
-
- if (CUR == '"') {
- NEXT;
- q = CUR_PTR;
- while ((IS_CHAR_CH(CUR)) && (CUR != '"'))
- NEXT;
- if (!IS_CHAR_CH(CUR)) {
- XP_ERROR(XPATH_UNFINISHED_LITERAL_ERROR);
- } else {
- ret = xmlStrndup(q, CUR_PTR - q);
- NEXT;
- }
- } else if (CUR == '\'') {
- NEXT;
- q = CUR_PTR;
- while ((IS_CHAR_CH(CUR)) && (CUR != '\''))
- NEXT;
- if (!IS_CHAR_CH(CUR)) {
- XP_ERROR(XPATH_UNFINISHED_LITERAL_ERROR);
- } else {
- ret = xmlStrndup(q, CUR_PTR - q);
- NEXT;
- }
- } else {
- XP_ERROR(XPATH_START_LITERAL_ERROR);
- }
- if (ret == NULL) return;
- PUSH_LONG_EXPR(XPATH_OP_VALUE, XPATH_STRING, 0, 0,
- xmlXPathCacheNewString(ctxt->context, ret), NULL);
- xmlFree(ret);
-}
-
-/**
- * xmlXPathCompVariableReference:
- * @ctxt: the XPath Parser context
- *
- * Parse a VariableReference, evaluate it and push it on the stack.
- *
- * The variable bindings consist of a mapping from variable names
- * to variable values. The value of a variable is an object, which can be
- * of any of the types that are possible for the value of an expression,
- * and may also be of additional types not specified here.
- *
- * Early evaluation is possible since:
- * The variable bindings [...] used to evaluate a subexpression are
- * always the same as those used to evaluate the containing expression.
- *
- * [36] VariableReference ::= '$' QName
- */
-static void
-xmlXPathCompVariableReference(xmlXPathParserContextPtr ctxt) {
- xmlChar *name;
- xmlChar *prefix;
-
- SKIP_BLANKS;
- if (CUR != '$') {
- XP_ERROR(XPATH_VARIABLE_REF_ERROR);
- }
- NEXT;
- name = xmlXPathParseQName(ctxt, &prefix);
- if (name == NULL) {
- xmlFree(prefix);
- XP_ERROR(XPATH_VARIABLE_REF_ERROR);
- }
- ctxt->comp->last = -1;
- PUSH_LONG_EXPR(XPATH_OP_VARIABLE, 0, 0, 0,
- name, prefix);
- SKIP_BLANKS;
- if ((ctxt->context != NULL) && (ctxt->context->flags & XML_XPATH_NOVAR)) {
- XP_ERROR(XPATH_FORBID_VARIABLE_ERROR);
- }
-}
-
-/**
- * xmlXPathIsNodeType:
- * @name: a name string
- *
- * Is the name given a NodeType one.
- *
- * [38] NodeType ::= 'comment'
- * | 'text'
- * | 'processing-instruction'
- * | 'node'
- *
- * Returns 1 if true 0 otherwise
- */
-int
-xmlXPathIsNodeType(const xmlChar *name) {
- if (name == NULL)
- return(0);
-
- if (xmlStrEqual(name, BAD_CAST "node"))
- return(1);
- if (xmlStrEqual(name, BAD_CAST "text"))
- return(1);
- if (xmlStrEqual(name, BAD_CAST "comment"))
- return(1);
- if (xmlStrEqual(name, BAD_CAST "processing-instruction"))
- return(1);
- return(0);
-}
-
-/**
- * xmlXPathCompFunctionCall:
- * @ctxt: the XPath Parser context
- *
- * [16] FunctionCall ::= FunctionName '(' ( Argument ( ',' Argument)*)? ')'
- * [17] Argument ::= Expr
- *
- * Compile a function call, the evaluation of all arguments are
- * pushed on the stack
- */
-static void
-xmlXPathCompFunctionCall(xmlXPathParserContextPtr ctxt) {
- xmlChar *name;
- xmlChar *prefix;
- int nbargs = 0;
- int sort = 1;
-
- name = xmlXPathParseQName(ctxt, &prefix);
- if (name == NULL) {
- xmlFree(prefix);
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- SKIP_BLANKS;
-#ifdef DEBUG_EXPR
- if (prefix == NULL)
- xmlGenericError(xmlGenericErrorContext, "Calling function %s\n",
- name);
- else
- xmlGenericError(xmlGenericErrorContext, "Calling function %s:%s\n",
- prefix, name);
-#endif
-
- if (CUR != '(') {
- xmlFree(name);
- xmlFree(prefix);
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- NEXT;
- SKIP_BLANKS;
-
- /*
- * Optimization for count(): we don't need the node-set to be sorted.
- */
- if ((prefix == NULL) && (name[0] == 'c') &&
- xmlStrEqual(name, BAD_CAST "count"))
- {
- sort = 0;
- }
- ctxt->comp->last = -1;
- if (CUR != ')') {
- while (CUR != 0) {
- int op1 = ctxt->comp->last;
- ctxt->comp->last = -1;
- xmlXPathCompileExpr(ctxt, sort);
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlFree(name);
- xmlFree(prefix);
- return;
- }
- PUSH_BINARY_EXPR(XPATH_OP_ARG, op1, ctxt->comp->last, 0, 0);
- nbargs++;
- if (CUR == ')') break;
- if (CUR != ',') {
- xmlFree(name);
- xmlFree(prefix);
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- NEXT;
- SKIP_BLANKS;
- }
- }
- PUSH_LONG_EXPR(XPATH_OP_FUNCTION, nbargs, 0, 0,
- name, prefix);
- NEXT;
- SKIP_BLANKS;
-}
-
-/**
- * xmlXPathCompPrimaryExpr:
- * @ctxt: the XPath Parser context
- *
- * [15] PrimaryExpr ::= VariableReference
- * | '(' Expr ')'
- * | Literal
- * | Number
- * | FunctionCall
- *
- * Compile a primary expression.
- */
-static void
-xmlXPathCompPrimaryExpr(xmlXPathParserContextPtr ctxt) {
- SKIP_BLANKS;
- if (CUR == '$') xmlXPathCompVariableReference(ctxt);
- else if (CUR == '(') {
- NEXT;
- SKIP_BLANKS;
- xmlXPathCompileExpr(ctxt, 1);
- CHECK_ERROR;
- if (CUR != ')') {
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- NEXT;
- SKIP_BLANKS;
- } else if (IS_ASCII_DIGIT(CUR) || (CUR == '.' && IS_ASCII_DIGIT(NXT(1)))) {
- xmlXPathCompNumber(ctxt);
- } else if ((CUR == '\'') || (CUR == '"')) {
- xmlXPathCompLiteral(ctxt);
- } else {
- xmlXPathCompFunctionCall(ctxt);
- }
- SKIP_BLANKS;
-}
-
-/**
- * xmlXPathCompFilterExpr:
- * @ctxt: the XPath Parser context
- *
- * [20] FilterExpr ::= PrimaryExpr
- * | FilterExpr Predicate
- *
- * Compile a filter expression.
- * Square brackets are used to filter expressions in the same way that
- * they are used in location paths. It is an error if the expression to
- * be filtered does not evaluate to a node-set. The context node list
- * used for evaluating the expression in square brackets is the node-set
- * to be filtered listed in document order.
- */
-
-static void
-xmlXPathCompFilterExpr(xmlXPathParserContextPtr ctxt) {
- xmlXPathCompPrimaryExpr(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
-
- while (CUR == '[') {
- xmlXPathCompPredicate(ctxt, 1);
- SKIP_BLANKS;
- }
-
-
-}
-
-/**
- * xmlXPathScanName:
- * @ctxt: the XPath Parser context
- *
- * Trickery: parse an XML name but without consuming the input flow
- * Needed to avoid insanity in the parser state.
- *
- * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
- * CombiningChar | Extender
- *
- * [5] Name ::= (Letter | '_' | ':') (NameChar)*
- *
- * [6] Names ::= Name (S Name)*
- *
- * Returns the Name parsed or NULL
- */
-
-static xmlChar *
-xmlXPathScanName(xmlXPathParserContextPtr ctxt) {
- int len = 0, l;
- int c;
- const xmlChar *cur;
- xmlChar *ret;
-
- cur = ctxt->cur;
-
- c = CUR_CHAR(l);
- if ((c == ' ') || (c == '>') || (c == '/') || /* accelerators */
- (!IS_LETTER(c) && (c != '_') &&
- (c != ':'))) {
- return(NULL);
- }
-
- while ((c != ' ') && (c != '>') && (c != '/') && /* test bigname.xml */
- ((IS_LETTER(c)) || (IS_DIGIT(c)) ||
- (c == '.') || (c == '-') ||
- (c == '_') || (c == ':') ||
- (IS_COMBINING(c)) ||
- (IS_EXTENDER(c)))) {
- len += l;
- NEXTL(l);
- c = CUR_CHAR(l);
- }
- ret = xmlStrndup(cur, ctxt->cur - cur);
- ctxt->cur = cur;
- return(ret);
-}
-
-/**
- * xmlXPathCompPathExpr:
- * @ctxt: the XPath Parser context
- *
- * [19] PathExpr ::= LocationPath
- * | FilterExpr
- * | FilterExpr '/' RelativeLocationPath
- * | FilterExpr '//' RelativeLocationPath
- *
- * Compile a path expression.
- * The / operator and // operators combine an arbitrary expression
- * and a relative location path. It is an error if the expression
- * does not evaluate to a node-set.
- * The / operator does composition in the same way as when / is
- * used in a location path. As in location paths, // is short for
- * /descendant-or-self::node()/.
- */
-
-static void
-xmlXPathCompPathExpr(xmlXPathParserContextPtr ctxt) {
- int lc = 1; /* Should we branch to LocationPath ? */
- xmlChar *name = NULL; /* we may have to preparse a name to find out */
-
- SKIP_BLANKS;
- if ((CUR == '$') || (CUR == '(') ||
- (IS_ASCII_DIGIT(CUR)) ||
- (CUR == '\'') || (CUR == '"') ||
- (CUR == '.' && IS_ASCII_DIGIT(NXT(1)))) {
- lc = 0;
- } else if (CUR == '*') {
- /* relative or absolute location path */
- lc = 1;
- } else if (CUR == '/') {
- /* relative or absolute location path */
- lc = 1;
- } else if (CUR == '@') {
- /* relative abbreviated attribute location path */
- lc = 1;
- } else if (CUR == '.') {
- /* relative abbreviated attribute location path */
- lc = 1;
- } else {
- /*
- * Problem is finding if we have a name here whether it's:
- * - a nodetype
- * - a function call in which case it's followed by '('
- * - an axis in which case it's followed by ':'
- * - a element name
- * We do an a priori analysis here rather than having to
- * maintain parsed token content through the recursive function
- * calls. This looks uglier but makes the code easier to
- * read/write/debug.
- */
- SKIP_BLANKS;
- name = xmlXPathScanName(ctxt);
- if ((name != NULL) && (xmlStrstr(name, (xmlChar *) "::") != NULL)) {
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "PathExpr: Axis\n");
-#endif
- lc = 1;
- xmlFree(name);
- } else if (name != NULL) {
- int len =xmlStrlen(name);
-
-
- while (NXT(len) != 0) {
- if (NXT(len) == '/') {
- /* element name */
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "PathExpr: AbbrRelLocation\n");
-#endif
- lc = 1;
- break;
- } else if (IS_BLANK_CH(NXT(len))) {
- /* ignore blanks */
- ;
- } else if (NXT(len) == ':') {
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "PathExpr: AbbrRelLocation\n");
-#endif
- lc = 1;
- break;
- } else if ((NXT(len) == '(')) {
- /* Node Type or Function */
- if (xmlXPathIsNodeType(name)) {
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "PathExpr: Type search\n");
-#endif
- lc = 1;
-#ifdef LIBXML_XPTR_ENABLED
- } else if (ctxt->xptr &&
- xmlStrEqual(name, BAD_CAST "range-to")) {
- lc = 1;
-#endif
- } else {
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "PathExpr: function call\n");
-#endif
- lc = 0;
- }
- break;
- } else if ((NXT(len) == '[')) {
- /* element name */
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "PathExpr: AbbrRelLocation\n");
-#endif
- lc = 1;
- break;
- } else if ((NXT(len) == '<') || (NXT(len) == '>') ||
- (NXT(len) == '=')) {
- lc = 1;
- break;
- } else {
- lc = 1;
- break;
- }
- len++;
- }
- if (NXT(len) == 0) {
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "PathExpr: AbbrRelLocation\n");
-#endif
- /* element name */
- lc = 1;
- }
- xmlFree(name);
- } else {
- /* make sure all cases are covered explicitly */
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- }
-
- if (lc) {
- if (CUR == '/') {
- PUSH_LEAVE_EXPR(XPATH_OP_ROOT, 0, 0);
- } else {
- PUSH_LEAVE_EXPR(XPATH_OP_NODE, 0, 0);
- }
- xmlXPathCompLocationPath(ctxt);
- } else {
- xmlXPathCompFilterExpr(ctxt);
- CHECK_ERROR;
- if ((CUR == '/') && (NXT(1) == '/')) {
- SKIP(2);
- SKIP_BLANKS;
-
- PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_DESCENDANT_OR_SELF,
- NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
- PUSH_UNARY_EXPR(XPATH_OP_RESET, ctxt->comp->last, 1, 0);
-
- xmlXPathCompRelativeLocationPath(ctxt);
- } else if (CUR == '/') {
- xmlXPathCompRelativeLocationPath(ctxt);
- }
- }
- SKIP_BLANKS;
-}
-
-/**
- * xmlXPathCompUnionExpr:
- * @ctxt: the XPath Parser context
- *
- * [18] UnionExpr ::= PathExpr
- * | UnionExpr '|' PathExpr
- *
- * Compile an union expression.
- */
-
-static void
-xmlXPathCompUnionExpr(xmlXPathParserContextPtr ctxt) {
- xmlXPathCompPathExpr(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
- while (CUR == '|') {
- int op1 = ctxt->comp->last;
- PUSH_LEAVE_EXPR(XPATH_OP_NODE, 0, 0);
-
- NEXT;
- SKIP_BLANKS;
- xmlXPathCompPathExpr(ctxt);
-
- PUSH_BINARY_EXPR(XPATH_OP_UNION, op1, ctxt->comp->last, 0, 0);
-
- SKIP_BLANKS;
- }
-}
-
-/**
- * xmlXPathCompUnaryExpr:
- * @ctxt: the XPath Parser context
- *
- * [27] UnaryExpr ::= UnionExpr
- * | '-' UnaryExpr
- *
- * Compile an unary expression.
- */
-
-static void
-xmlXPathCompUnaryExpr(xmlXPathParserContextPtr ctxt) {
- int minus = 0;
- int found = 0;
-
- SKIP_BLANKS;
- while (CUR == '-') {
- minus = 1 - minus;
- found = 1;
- NEXT;
- SKIP_BLANKS;
- }
-
- xmlXPathCompUnionExpr(ctxt);
- CHECK_ERROR;
- if (found) {
- if (minus)
- PUSH_UNARY_EXPR(XPATH_OP_PLUS, ctxt->comp->last, 2, 0);
- else
- PUSH_UNARY_EXPR(XPATH_OP_PLUS, ctxt->comp->last, 3, 0);
- }
-}
-
-/**
- * xmlXPathCompMultiplicativeExpr:
- * @ctxt: the XPath Parser context
- *
- * [26] MultiplicativeExpr ::= UnaryExpr
- * | MultiplicativeExpr MultiplyOperator UnaryExpr
- * | MultiplicativeExpr 'div' UnaryExpr
- * | MultiplicativeExpr 'mod' UnaryExpr
- * [34] MultiplyOperator ::= '*'
- *
- * Compile an Additive expression.
- */
-
-static void
-xmlXPathCompMultiplicativeExpr(xmlXPathParserContextPtr ctxt) {
- xmlXPathCompUnaryExpr(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
- while ((CUR == '*') ||
- ((CUR == 'd') && (NXT(1) == 'i') && (NXT(2) == 'v')) ||
- ((CUR == 'm') && (NXT(1) == 'o') && (NXT(2) == 'd'))) {
- int op = -1;
- int op1 = ctxt->comp->last;
-
- if (CUR == '*') {
- op = 0;
- NEXT;
- } else if (CUR == 'd') {
- op = 1;
- SKIP(3);
- } else if (CUR == 'm') {
- op = 2;
- SKIP(3);
- }
- SKIP_BLANKS;
- xmlXPathCompUnaryExpr(ctxt);
- CHECK_ERROR;
- PUSH_BINARY_EXPR(XPATH_OP_MULT, op1, ctxt->comp->last, op, 0);
- SKIP_BLANKS;
- }
-}
-
-/**
- * xmlXPathCompAdditiveExpr:
- * @ctxt: the XPath Parser context
- *
- * [25] AdditiveExpr ::= MultiplicativeExpr
- * | AdditiveExpr '+' MultiplicativeExpr
- * | AdditiveExpr '-' MultiplicativeExpr
- *
- * Compile an Additive expression.
- */
-
-static void
-xmlXPathCompAdditiveExpr(xmlXPathParserContextPtr ctxt) {
-
- xmlXPathCompMultiplicativeExpr(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
- while ((CUR == '+') || (CUR == '-')) {
- int plus;
- int op1 = ctxt->comp->last;
-
- if (CUR == '+') plus = 1;
- else plus = 0;
- NEXT;
- SKIP_BLANKS;
- xmlXPathCompMultiplicativeExpr(ctxt);
- CHECK_ERROR;
- PUSH_BINARY_EXPR(XPATH_OP_PLUS, op1, ctxt->comp->last, plus, 0);
- SKIP_BLANKS;
- }
-}
-
-/**
- * xmlXPathCompRelationalExpr:
- * @ctxt: the XPath Parser context
- *
- * [24] RelationalExpr ::= AdditiveExpr
- * | RelationalExpr '<' AdditiveExpr
- * | RelationalExpr '>' AdditiveExpr
- * | RelationalExpr '<=' AdditiveExpr
- * | RelationalExpr '>=' AdditiveExpr
- *
- * A <= B > C is allowed ? Answer from James, yes with
- * (AdditiveExpr <= AdditiveExpr) > AdditiveExpr
- * which is basically what got implemented.
- *
- * Compile a Relational expression, then push the result
- * on the stack
- */
-
-static void
-xmlXPathCompRelationalExpr(xmlXPathParserContextPtr ctxt) {
- xmlXPathCompAdditiveExpr(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
- while ((CUR == '<') ||
- (CUR == '>') ||
- ((CUR == '<') && (NXT(1) == '=')) ||
- ((CUR == '>') && (NXT(1) == '='))) {
- int inf, strict;
- int op1 = ctxt->comp->last;
-
- if (CUR == '<') inf = 1;
- else inf = 0;
- if (NXT(1) == '=') strict = 0;
- else strict = 1;
- NEXT;
- if (!strict) NEXT;
- SKIP_BLANKS;
- xmlXPathCompAdditiveExpr(ctxt);
- CHECK_ERROR;
- PUSH_BINARY_EXPR(XPATH_OP_CMP, op1, ctxt->comp->last, inf, strict);
- SKIP_BLANKS;
- }
-}
-
-/**
- * xmlXPathCompEqualityExpr:
- * @ctxt: the XPath Parser context
- *
- * [23] EqualityExpr ::= RelationalExpr
- * | EqualityExpr '=' RelationalExpr
- * | EqualityExpr '!=' RelationalExpr
- *
- * A != B != C is allowed ? Answer from James, yes with
- * (RelationalExpr = RelationalExpr) = RelationalExpr
- * (RelationalExpr != RelationalExpr) != RelationalExpr
- * which is basically what got implemented.
- *
- * Compile an Equality expression.
- *
- */
-static void
-xmlXPathCompEqualityExpr(xmlXPathParserContextPtr ctxt) {
- xmlXPathCompRelationalExpr(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
- while ((CUR == '=') || ((CUR == '!') && (NXT(1) == '='))) {
- int eq;
- int op1 = ctxt->comp->last;
-
- if (CUR == '=') eq = 1;
- else eq = 0;
- NEXT;
- if (!eq) NEXT;
- SKIP_BLANKS;
- xmlXPathCompRelationalExpr(ctxt);
- CHECK_ERROR;
- PUSH_BINARY_EXPR(XPATH_OP_EQUAL, op1, ctxt->comp->last, eq, 0);
- SKIP_BLANKS;
- }
-}
-
-/**
- * xmlXPathCompAndExpr:
- * @ctxt: the XPath Parser context
- *
- * [22] AndExpr ::= EqualityExpr
- * | AndExpr 'and' EqualityExpr
- *
- * Compile an AND expression.
- *
- */
-static void
-xmlXPathCompAndExpr(xmlXPathParserContextPtr ctxt) {
- xmlXPathCompEqualityExpr(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
- while ((CUR == 'a') && (NXT(1) == 'n') && (NXT(2) == 'd')) {
- int op1 = ctxt->comp->last;
- SKIP(3);
- SKIP_BLANKS;
- xmlXPathCompEqualityExpr(ctxt);
- CHECK_ERROR;
- PUSH_BINARY_EXPR(XPATH_OP_AND, op1, ctxt->comp->last, 0, 0);
- SKIP_BLANKS;
- }
-}
-
-/**
- * xmlXPathCompileExpr:
- * @ctxt: the XPath Parser context
- *
- * [14] Expr ::= OrExpr
- * [21] OrExpr ::= AndExpr
- * | OrExpr 'or' AndExpr
- *
- * Parse and compile an expression
- */
-static void
-xmlXPathCompileExpr(xmlXPathParserContextPtr ctxt, int sort) {
- xmlXPathCompAndExpr(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
- while ((CUR == 'o') && (NXT(1) == 'r')) {
- int op1 = ctxt->comp->last;
- SKIP(2);
- SKIP_BLANKS;
- xmlXPathCompAndExpr(ctxt);
- CHECK_ERROR;
- PUSH_BINARY_EXPR(XPATH_OP_OR, op1, ctxt->comp->last, 0, 0);
- SKIP_BLANKS;
- }
- if ((sort) && (ctxt->comp->steps[ctxt->comp->last].op != XPATH_OP_VALUE)) {
- /* more ops could be optimized too */
- /*
- * This is the main place to eliminate sorting for
- * operations which don't require a sorted node-set.
- * E.g. count().
- */
- PUSH_UNARY_EXPR(XPATH_OP_SORT, ctxt->comp->last , 0, 0);
- }
-}
-
-/**
- * xmlXPathCompPredicate:
- * @ctxt: the XPath Parser context
- * @filter: act as a filter
- *
- * [8] Predicate ::= '[' PredicateExpr ']'
- * [9] PredicateExpr ::= Expr
- *
- * Compile a predicate expression
- */
-static void
-xmlXPathCompPredicate(xmlXPathParserContextPtr ctxt, int filter) {
- int op1 = ctxt->comp->last;
-
- SKIP_BLANKS;
- if (CUR != '[') {
- XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
- }
- NEXT;
- SKIP_BLANKS;
-
- ctxt->comp->last = -1;
- /*
- * This call to xmlXPathCompileExpr() will deactivate sorting
- * of the predicate result.
- * TODO: Sorting is still activated for filters, since I'm not
- * sure if needed. Normally sorting should not be needed, since
- * a filter can only diminish the number of items in a sequence,
- * but won't change its order; so if the initial sequence is sorted,
- * subsequent sorting is not needed.
- */
- if (! filter)
- xmlXPathCompileExpr(ctxt, 0);
- else
- xmlXPathCompileExpr(ctxt, 1);
- CHECK_ERROR;
-
- if (CUR != ']') {
- XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
- }
-
- if (filter)
- PUSH_BINARY_EXPR(XPATH_OP_FILTER, op1, ctxt->comp->last, 0, 0);
- else
- PUSH_BINARY_EXPR(XPATH_OP_PREDICATE, op1, ctxt->comp->last, 0, 0);
-
- NEXT;
- SKIP_BLANKS;
-}
-
-/**
- * xmlXPathCompNodeTest:
- * @ctxt: the XPath Parser context
- * @test: pointer to a xmlXPathTestVal
- * @type: pointer to a xmlXPathTypeVal
- * @prefix: placeholder for a possible name prefix
- *
- * [7] NodeTest ::= NameTest
- * | NodeType '(' ')'
- * | 'processing-instruction' '(' Literal ')'
- *
- * [37] NameTest ::= '*'
- * | NCName ':' '*'
- * | QName
- * [38] NodeType ::= 'comment'
- * | 'text'
- * | 'processing-instruction'
- * | 'node'
- *
- * Returns the name found and updates @test, @type and @prefix appropriately
- */
-static xmlChar *
-xmlXPathCompNodeTest(xmlXPathParserContextPtr ctxt, xmlXPathTestVal *test,
- xmlXPathTypeVal *type, const xmlChar **prefix,
- xmlChar *name) {
- int blanks;
-
- if ((test == NULL) || (type == NULL) || (prefix == NULL)) {
- STRANGE;
- return(NULL);
- }
- *type = (xmlXPathTypeVal) 0;
- *test = (xmlXPathTestVal) 0;
- *prefix = NULL;
- SKIP_BLANKS;
-
- if ((name == NULL) && (CUR == '*')) {
- /*
- * All elements
- */
- NEXT;
- *test = NODE_TEST_ALL;
- return(NULL);
- }
-
- if (name == NULL)
- name = xmlXPathParseNCName(ctxt);
- if (name == NULL) {
- XP_ERRORNULL(XPATH_EXPR_ERROR);
- }
-
- blanks = IS_BLANK_CH(CUR);
- SKIP_BLANKS;
- if (CUR == '(') {
- NEXT;
- /*
- * NodeType or PI search
- */
- if (xmlStrEqual(name, BAD_CAST "comment"))
- *type = NODE_TYPE_COMMENT;
- else if (xmlStrEqual(name, BAD_CAST "node"))
- *type = NODE_TYPE_NODE;
- else if (xmlStrEqual(name, BAD_CAST "processing-instruction"))
- *type = NODE_TYPE_PI;
- else if (xmlStrEqual(name, BAD_CAST "text"))
- *type = NODE_TYPE_TEXT;
- else {
- if (name != NULL)
- xmlFree(name);
- XP_ERRORNULL(XPATH_EXPR_ERROR);
- }
-
- *test = NODE_TEST_TYPE;
-
- SKIP_BLANKS;
- if (*type == NODE_TYPE_PI) {
- /*
- * Specific case: search a PI by name.
- */
- if (name != NULL)
- xmlFree(name);
- name = NULL;
- if (CUR != ')') {
- name = xmlXPathParseLiteral(ctxt);
- CHECK_ERROR NULL;
- *test = NODE_TEST_PI;
- SKIP_BLANKS;
- }
- }
- if (CUR != ')') {
- if (name != NULL)
- xmlFree(name);
- XP_ERRORNULL(XPATH_UNCLOSED_ERROR);
- }
- NEXT;
- return(name);
- }
- *test = NODE_TEST_NAME;
- if ((!blanks) && (CUR == ':')) {
- NEXT;
-
- /*
- * Since currently the parser context don't have a
- * namespace list associated:
- * The namespace name for this prefix can be computed
- * only at evaluation time. The compilation is done
- * outside of any context.
- */
-#if 0
- *prefix = xmlXPathNsLookup(ctxt->context, name);
- if (name != NULL)
- xmlFree(name);
- if (*prefix == NULL) {
- XP_ERROR0(XPATH_UNDEF_PREFIX_ERROR);
- }
-#else
- *prefix = name;
-#endif
-
- if (CUR == '*') {
- /*
- * All elements
- */
- NEXT;
- *test = NODE_TEST_ALL;
- return(NULL);
- }
-
- name = xmlXPathParseNCName(ctxt);
- if (name == NULL) {
- XP_ERRORNULL(XPATH_EXPR_ERROR);
- }
- }
- return(name);
-}
-
-/**
- * xmlXPathIsAxisName:
- * @name: a preparsed name token
- *
- * [6] AxisName ::= 'ancestor'
- * | 'ancestor-or-self'
- * | 'attribute'
- * | 'child'
- * | 'descendant'
- * | 'descendant-or-self'
- * | 'following'
- * | 'following-sibling'
- * | 'namespace'
- * | 'parent'
- * | 'preceding'
- * | 'preceding-sibling'
- * | 'self'
- *
- * Returns the axis or 0
- */
-static xmlXPathAxisVal
-xmlXPathIsAxisName(const xmlChar *name) {
- xmlXPathAxisVal ret = (xmlXPathAxisVal) 0;
- switch (name[0]) {
- case 'a':
- if (xmlStrEqual(name, BAD_CAST "ancestor"))
- ret = AXIS_ANCESTOR;
- if (xmlStrEqual(name, BAD_CAST "ancestor-or-self"))
- ret = AXIS_ANCESTOR_OR_SELF;
- if (xmlStrEqual(name, BAD_CAST "attribute"))
- ret = AXIS_ATTRIBUTE;
- break;
- case 'c':
- if (xmlStrEqual(name, BAD_CAST "child"))
- ret = AXIS_CHILD;
- break;
- case 'd':
- if (xmlStrEqual(name, BAD_CAST "descendant"))
- ret = AXIS_DESCENDANT;
- if (xmlStrEqual(name, BAD_CAST "descendant-or-self"))
- ret = AXIS_DESCENDANT_OR_SELF;
- break;
- case 'f':
- if (xmlStrEqual(name, BAD_CAST "following"))
- ret = AXIS_FOLLOWING;
- if (xmlStrEqual(name, BAD_CAST "following-sibling"))
- ret = AXIS_FOLLOWING_SIBLING;
- break;
- case 'n':
- if (xmlStrEqual(name, BAD_CAST "namespace"))
- ret = AXIS_NAMESPACE;
- break;
- case 'p':
- if (xmlStrEqual(name, BAD_CAST "parent"))
- ret = AXIS_PARENT;
- if (xmlStrEqual(name, BAD_CAST "preceding"))
- ret = AXIS_PRECEDING;
- if (xmlStrEqual(name, BAD_CAST "preceding-sibling"))
- ret = AXIS_PRECEDING_SIBLING;
- break;
- case 's':
- if (xmlStrEqual(name, BAD_CAST "self"))
- ret = AXIS_SELF;
- break;
- }
- return(ret);
-}
-
-/**
- * xmlXPathCompStep:
- * @ctxt: the XPath Parser context
- *
- * [4] Step ::= AxisSpecifier NodeTest Predicate*
- * | AbbreviatedStep
- *
- * [12] AbbreviatedStep ::= '.' | '..'
- *
- * [5] AxisSpecifier ::= AxisName '::'
- * | AbbreviatedAxisSpecifier
- *
- * [13] AbbreviatedAxisSpecifier ::= '@'?
- *
- * Modified for XPtr range support as:
- *
- * [4xptr] Step ::= AxisSpecifier NodeTest Predicate*
- * | AbbreviatedStep
- * | 'range-to' '(' Expr ')' Predicate*
- *
- * Compile one step in a Location Path
- * A location step of . is short for self::node(). This is
- * particularly useful in conjunction with //. For example, the
- * location path .//para is short for
- * self::node()/descendant-or-self::node()/child::para
- * and so will select all para descendant elements of the context
- * node.
- * Similarly, a location step of .. is short for parent::node().
- * For example, ../title is short for parent::node()/child::title
- * and so will select the title children of the parent of the context
- * node.
- */
-static void
-xmlXPathCompStep(xmlXPathParserContextPtr ctxt) {
-#ifdef LIBXML_XPTR_ENABLED
- int rangeto = 0;
- int op2 = -1;
-#endif
-
- SKIP_BLANKS;
- if ((CUR == '.') && (NXT(1) == '.')) {
- SKIP(2);
- SKIP_BLANKS;
- PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_PARENT,
- NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
- } else if (CUR == '.') {
- NEXT;
- SKIP_BLANKS;
- } else {
- xmlChar *name = NULL;
- const xmlChar *prefix = NULL;
- xmlXPathTestVal test = (xmlXPathTestVal) 0;
- xmlXPathAxisVal axis = (xmlXPathAxisVal) 0;
- xmlXPathTypeVal type = (xmlXPathTypeVal) 0;
- int op1;
-
- /*
- * The modification needed for XPointer change to the production
- */
-#ifdef LIBXML_XPTR_ENABLED
- if (ctxt->xptr) {
- name = xmlXPathParseNCName(ctxt);
- if ((name != NULL) && (xmlStrEqual(name, BAD_CAST "range-to"))) {
- op2 = ctxt->comp->last;
- xmlFree(name);
- SKIP_BLANKS;
- if (CUR != '(') {
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- NEXT;
- SKIP_BLANKS;
-
- xmlXPathCompileExpr(ctxt, 1);
- /* PUSH_BINARY_EXPR(XPATH_OP_RANGETO, op2, ctxt->comp->last, 0, 0); */
- CHECK_ERROR;
-
- SKIP_BLANKS;
- if (CUR != ')') {
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- NEXT;
- rangeto = 1;
- goto eval_predicates;
- }
- }
-#endif
- if (CUR == '*') {
- axis = AXIS_CHILD;
- } else {
- if (name == NULL)
- name = xmlXPathParseNCName(ctxt);
- if (name != NULL) {
- axis = xmlXPathIsAxisName(name);
- if (axis != 0) {
- SKIP_BLANKS;
- if ((CUR == ':') && (NXT(1) == ':')) {
- SKIP(2);
- xmlFree(name);
- name = NULL;
- } else {
- /* an element name can conflict with an axis one :-\ */
- axis = AXIS_CHILD;
- }
- } else {
- axis = AXIS_CHILD;
- }
- } else if (CUR == '@') {
- NEXT;
- axis = AXIS_ATTRIBUTE;
- } else {
- axis = AXIS_CHILD;
- }
- }
-
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlFree(name);
- return;
- }
-
- name = xmlXPathCompNodeTest(ctxt, &test, &type, &prefix, name);
- if (test == 0)
- return;
-
- if ((prefix != NULL) && (ctxt->context != NULL) &&
- (ctxt->context->flags & XML_XPATH_CHECKNS)) {
- if (xmlXPathNsLookup(ctxt->context, prefix) == NULL) {
- xmlXPathErr(ctxt, XPATH_UNDEF_PREFIX_ERROR);
- }
- }
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "Basis : computing new set\n");
-#endif
-
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext, "Basis : ");
- if (ctxt->value == NULL)
- xmlGenericError(xmlGenericErrorContext, "no value\n");
- else if (ctxt->value->nodesetval == NULL)
- xmlGenericError(xmlGenericErrorContext, "Empty\n");
- else
- xmlGenericErrorContextNodeSet(stdout, ctxt->value->nodesetval);
-#endif
-
-#ifdef LIBXML_XPTR_ENABLED
-eval_predicates:
-#endif
- op1 = ctxt->comp->last;
- ctxt->comp->last = -1;
-
- SKIP_BLANKS;
- while (CUR == '[') {
- xmlXPathCompPredicate(ctxt, 0);
- }
-
-#ifdef LIBXML_XPTR_ENABLED
- if (rangeto) {
- PUSH_BINARY_EXPR(XPATH_OP_RANGETO, op2, op1, 0, 0);
- } else
-#endif
- PUSH_FULL_EXPR(XPATH_OP_COLLECT, op1, ctxt->comp->last, axis,
- test, type, (void *)prefix, (void *)name);
-
- }
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext, "Step : ");
- if (ctxt->value == NULL)
- xmlGenericError(xmlGenericErrorContext, "no value\n");
- else if (ctxt->value->nodesetval == NULL)
- xmlGenericError(xmlGenericErrorContext, "Empty\n");
- else
- xmlGenericErrorContextNodeSet(xmlGenericErrorContext,
- ctxt->value->nodesetval);
-#endif
-}
-
-/**
- * xmlXPathCompRelativeLocationPath:
- * @ctxt: the XPath Parser context
- *
- * [3] RelativeLocationPath ::= Step
- * | RelativeLocationPath '/' Step
- * | AbbreviatedRelativeLocationPath
- * [11] AbbreviatedRelativeLocationPath ::= RelativeLocationPath '//' Step
- *
- * Compile a relative location path.
- */
-static void
-xmlXPathCompRelativeLocationPath
-(xmlXPathParserContextPtr ctxt) {
- SKIP_BLANKS;
- if ((CUR == '/') && (NXT(1) == '/')) {
- SKIP(2);
- SKIP_BLANKS;
- PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_DESCENDANT_OR_SELF,
- NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
- } else if (CUR == '/') {
- NEXT;
- SKIP_BLANKS;
- }
- xmlXPathCompStep(ctxt);
- CHECK_ERROR;
- SKIP_BLANKS;
- while (CUR == '/') {
- if ((CUR == '/') && (NXT(1) == '/')) {
- SKIP(2);
- SKIP_BLANKS;
- PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_DESCENDANT_OR_SELF,
- NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
- xmlXPathCompStep(ctxt);
- } else if (CUR == '/') {
- NEXT;
- SKIP_BLANKS;
- xmlXPathCompStep(ctxt);
- }
- SKIP_BLANKS;
- }
-}
-
-/**
- * xmlXPathCompLocationPath:
- * @ctxt: the XPath Parser context
- *
- * [1] LocationPath ::= RelativeLocationPath
- * | AbsoluteLocationPath
- * [2] AbsoluteLocationPath ::= '/' RelativeLocationPath?
- * | AbbreviatedAbsoluteLocationPath
- * [10] AbbreviatedAbsoluteLocationPath ::=
- * '//' RelativeLocationPath
- *
- * Compile a location path
- *
- * // is short for /descendant-or-self::node()/. For example,
- * //para is short for /descendant-or-self::node()/child::para and
- * so will select any para element in the document (even a para element
- * that is a document element will be selected by //para since the
- * document element node is a child of the root node); div//para is
- * short for div/descendant-or-self::node()/child::para and so will
- * select all para descendants of div children.
- */
-static void
-xmlXPathCompLocationPath(xmlXPathParserContextPtr ctxt) {
- SKIP_BLANKS;
- if (CUR != '/') {
- xmlXPathCompRelativeLocationPath(ctxt);
- } else {
- while (CUR == '/') {
- if ((CUR == '/') && (NXT(1) == '/')) {
- SKIP(2);
- SKIP_BLANKS;
- PUSH_LONG_EXPR(XPATH_OP_COLLECT, AXIS_DESCENDANT_OR_SELF,
- NODE_TEST_TYPE, NODE_TYPE_NODE, NULL, NULL);
- xmlXPathCompRelativeLocationPath(ctxt);
- } else if (CUR == '/') {
- NEXT;
- SKIP_BLANKS;
- if ((CUR != 0 ) &&
- ((IS_ASCII_LETTER(CUR)) || (CUR == '_') || (CUR == '.') ||
- (CUR == '@') || (CUR == '*')))
- xmlXPathCompRelativeLocationPath(ctxt);
- }
- CHECK_ERROR;
- }
- }
-}
-
-/************************************************************************
- * *
- * XPath precompiled expression evaluation *
- * *
- ************************************************************************/
-
-static int
-xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op);
-
-#ifdef DEBUG_STEP
-static void
-xmlXPathDebugDumpStepAxis(xmlXPathStepOpPtr op,
- int nbNodes)
-{
- xmlGenericError(xmlGenericErrorContext, "new step : ");
- switch (op->value) {
- case AXIS_ANCESTOR:
- xmlGenericError(xmlGenericErrorContext, "axis 'ancestors' ");
- break;
- case AXIS_ANCESTOR_OR_SELF:
- xmlGenericError(xmlGenericErrorContext,
- "axis 'ancestors-or-self' ");
- break;
- case AXIS_ATTRIBUTE:
- xmlGenericError(xmlGenericErrorContext, "axis 'attributes' ");
- break;
- case AXIS_CHILD:
- xmlGenericError(xmlGenericErrorContext, "axis 'child' ");
- break;
- case AXIS_DESCENDANT:
- xmlGenericError(xmlGenericErrorContext, "axis 'descendant' ");
- break;
- case AXIS_DESCENDANT_OR_SELF:
- xmlGenericError(xmlGenericErrorContext,
- "axis 'descendant-or-self' ");
- break;
- case AXIS_FOLLOWING:
- xmlGenericError(xmlGenericErrorContext, "axis 'following' ");
- break;
- case AXIS_FOLLOWING_SIBLING:
- xmlGenericError(xmlGenericErrorContext,
- "axis 'following-siblings' ");
- break;
- case AXIS_NAMESPACE:
- xmlGenericError(xmlGenericErrorContext, "axis 'namespace' ");
- break;
- case AXIS_PARENT:
- xmlGenericError(xmlGenericErrorContext, "axis 'parent' ");
- break;
- case AXIS_PRECEDING:
- xmlGenericError(xmlGenericErrorContext, "axis 'preceding' ");
- break;
- case AXIS_PRECEDING_SIBLING:
- xmlGenericError(xmlGenericErrorContext,
- "axis 'preceding-sibling' ");
- break;
- case AXIS_SELF:
- xmlGenericError(xmlGenericErrorContext, "axis 'self' ");
- break;
- }
- xmlGenericError(xmlGenericErrorContext,
- " context contains %d nodes\n", nbNodes);
- switch (op->value2) {
- case NODE_TEST_NONE:
- xmlGenericError(xmlGenericErrorContext,
- " searching for none !!!\n");
- break;
- case NODE_TEST_TYPE:
- xmlGenericError(xmlGenericErrorContext,
- " searching for type %d\n", op->value3);
- break;
- case NODE_TEST_PI:
- xmlGenericError(xmlGenericErrorContext,
- " searching for PI !!!\n");
- break;
- case NODE_TEST_ALL:
- xmlGenericError(xmlGenericErrorContext,
- " searching for *\n");
- break;
- case NODE_TEST_NS:
- xmlGenericError(xmlGenericErrorContext,
- " searching for namespace %s\n",
- op->value5);
- break;
- case NODE_TEST_NAME:
- xmlGenericError(xmlGenericErrorContext,
- " searching for name %s\n", op->value5);
- if (op->value4)
- xmlGenericError(xmlGenericErrorContext,
- " with namespace %s\n", op->value4);
- break;
- }
- xmlGenericError(xmlGenericErrorContext, "Testing : ");
-}
-#endif /* DEBUG_STEP */
-
-static int
-xmlXPathCompOpEvalPredicate(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op,
- xmlNodeSetPtr set,
- int contextSize,
- int hasNsNodes)
-{
- if (op->ch1 != -1) {
- xmlXPathCompExprPtr comp = ctxt->comp;
- /*
- * Process inner predicates first.
- */
- if (comp->steps[op->ch1].op != XPATH_OP_PREDICATE) {
- /*
- * TODO: raise an internal error.
- */
- }
- contextSize = xmlXPathCompOpEvalPredicate(ctxt,
- &comp->steps[op->ch1], set, contextSize, hasNsNodes);
- CHECK_ERROR0;
- if (contextSize <= 0)
- return(0);
- }
- if (op->ch2 != -1) {
- xmlXPathContextPtr xpctxt = ctxt->context;
- xmlNodePtr contextNode, oldContextNode;
- xmlDocPtr oldContextDoc;
- int i, res, contextPos = 0, newContextSize;
- xmlXPathStepOpPtr exprOp;
- xmlXPathObjectPtr contextObj = NULL, exprRes = NULL;
-
-#ifdef LIBXML_XPTR_ENABLED
- /*
- * URGENT TODO: Check the following:
- * We don't expect location sets if evaluating prediates, right?
- * Only filters should expect location sets, right?
- */
-#endif
- /*
- * SPEC XPath 1.0:
- * "For each node in the node-set to be filtered, the
- * PredicateExpr is evaluated with that node as the
- * context node, with the number of nodes in the
- * node-set as the context size, and with the proximity
- * position of the node in the node-set with respect to
- * the axis as the context position;"
- * @oldset is the node-set" to be filtered.
- *
- * SPEC XPath 1.0:
- * "only predicates change the context position and
- * context size (see [2.4 Predicates])."
- * Example:
- * node-set context pos
- * nA 1
- * nB 2
- * nC 3
- * After applying predicate [position() > 1] :
- * node-set context pos
- * nB 1
- * nC 2
- */
- oldContextNode = xpctxt->node;
- oldContextDoc = xpctxt->doc;
- /*
- * Get the expression of this predicate.
- */
- exprOp = &ctxt->comp->steps[op->ch2];
- newContextSize = 0;
- for (i = 0; i < set->nodeNr; i++) {
- if (set->nodeTab[i] == NULL)
- continue;
-
- contextNode = set->nodeTab[i];
- xpctxt->node = contextNode;
- xpctxt->contextSize = contextSize;
- xpctxt->proximityPosition = ++contextPos;
-
- /*
- * Also set the xpath document in case things like
- * key() are evaluated in the predicate.
- */
- if ((contextNode->type != XML_NAMESPACE_DECL) &&
- (contextNode->doc != NULL))
- xpctxt->doc = contextNode->doc;
- /*
- * Evaluate the predicate expression with 1 context node
- * at a time; this node is packaged into a node set; this
- * node set is handed over to the evaluation mechanism.
- */
- if (contextObj == NULL)
- contextObj = xmlXPathCacheNewNodeSet(xpctxt, contextNode);
- else {
- if (xmlXPathNodeSetAddUnique(contextObj->nodesetval,
- contextNode) < 0) {
- ctxt->error = XPATH_MEMORY_ERROR;
- goto evaluation_exit;
- }
- }
-
- valuePush(ctxt, contextObj);
-
- res = xmlXPathCompOpEvalToBoolean(ctxt, exprOp, 1);
-
- if ((ctxt->error != XPATH_EXPRESSION_OK) || (res == -1)) {
- xmlXPathNodeSetClear(set, hasNsNodes);
- newContextSize = 0;
- goto evaluation_exit;
- }
-
- if (res != 0) {
- newContextSize++;
- } else {
- /*
- * Remove the entry from the initial node set.
- */
- set->nodeTab[i] = NULL;
- if (contextNode->type == XML_NAMESPACE_DECL)
- xmlXPathNodeSetFreeNs((xmlNsPtr) contextNode);
- }
- if (ctxt->value == contextObj) {
- /*
- * Don't free the temporary XPath object holding the
- * context node, in order to avoid massive recreation
- * inside this loop.
- */
- valuePop(ctxt);
- xmlXPathNodeSetClear(contextObj->nodesetval, hasNsNodes);
- } else {
- /*
- * TODO: The object was lost in the evaluation machinery.
- * Can this happen? Maybe in internal-error cases.
- */
- contextObj = NULL;
- }
- }
-
- if (contextObj != NULL) {
- if (ctxt->value == contextObj)
- valuePop(ctxt);
- xmlXPathReleaseObject(xpctxt, contextObj);
- }
-evaluation_exit:
- if (exprRes != NULL)
- xmlXPathReleaseObject(ctxt->context, exprRes);
- /*
- * Reset/invalidate the context.
- */
- xpctxt->node = oldContextNode;
- xpctxt->doc = oldContextDoc;
- xpctxt->contextSize = -1;
- xpctxt->proximityPosition = -1;
- return(newContextSize);
- }
- return(contextSize);
-}
-
-static int
-xmlXPathCompOpEvalPositionalPredicate(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op,
- xmlNodeSetPtr set,
- int contextSize,
- int minPos,
- int maxPos,
- int hasNsNodes)
-{
- if (op->ch1 != -1) {
- xmlXPathCompExprPtr comp = ctxt->comp;
- if (comp->steps[op->ch1].op != XPATH_OP_PREDICATE) {
- /*
- * TODO: raise an internal error.
- */
- }
- contextSize = xmlXPathCompOpEvalPredicate(ctxt,
- &comp->steps[op->ch1], set, contextSize, hasNsNodes);
- CHECK_ERROR0;
- if (contextSize <= 0)
- return(0);
- }
- /*
- * Check if the node set contains a sufficient number of nodes for
- * the requested range.
- */
- if (contextSize < minPos) {
- xmlXPathNodeSetClear(set, hasNsNodes);
- return(0);
- }
- if (op->ch2 == -1) {
- /*
- * TODO: Can this ever happen?
- */
- return (contextSize);
- } else {
- xmlDocPtr oldContextDoc;
- int i, pos = 0, newContextSize = 0, contextPos = 0, res;
- xmlXPathStepOpPtr exprOp;
- xmlXPathObjectPtr contextObj = NULL, exprRes = NULL;
- xmlNodePtr oldContextNode, contextNode = NULL;
- xmlXPathContextPtr xpctxt = ctxt->context;
- int frame;
-
-#ifdef LIBXML_XPTR_ENABLED
- /*
- * URGENT TODO: Check the following:
- * We don't expect location sets if evaluating prediates, right?
- * Only filters should expect location sets, right?
- */
-#endif /* LIBXML_XPTR_ENABLED */
-
- /*
- * Save old context.
- */
- oldContextNode = xpctxt->node;
- oldContextDoc = xpctxt->doc;
- /*
- * Get the expression of this predicate.
- */
- exprOp = &ctxt->comp->steps[op->ch2];
- for (i = 0; i < set->nodeNr; i++) {
- xmlXPathObjectPtr tmp;
-
- if (set->nodeTab[i] == NULL)
- continue;
-
- contextNode = set->nodeTab[i];
- xpctxt->node = contextNode;
- xpctxt->contextSize = contextSize;
- xpctxt->proximityPosition = ++contextPos;
-
- /*
- * Initialize the new set.
- * Also set the xpath document in case things like
- * key() evaluation are attempted on the predicate
- */
- if ((contextNode->type != XML_NAMESPACE_DECL) &&
- (contextNode->doc != NULL))
- xpctxt->doc = contextNode->doc;
- /*
- * Evaluate the predicate expression with 1 context node
- * at a time; this node is packaged into a node set; this
- * node set is handed over to the evaluation mechanism.
- */
- if (contextObj == NULL)
- contextObj = xmlXPathCacheNewNodeSet(xpctxt, contextNode);
- else {
- if (xmlXPathNodeSetAddUnique(contextObj->nodesetval,
- contextNode) < 0) {
- ctxt->error = XPATH_MEMORY_ERROR;
- goto evaluation_exit;
- }
- }
-
- frame = xmlXPathSetFrame(ctxt);
- valuePush(ctxt, contextObj);
- res = xmlXPathCompOpEvalToBoolean(ctxt, exprOp, 1);
- tmp = valuePop(ctxt);
- xmlXPathPopFrame(ctxt, frame);
-
- if ((ctxt->error != XPATH_EXPRESSION_OK) || (res == -1)) {
- while (tmp != contextObj) {
- /*
- * Free up the result
- * then pop off contextObj, which will be freed later
- */
- xmlXPathReleaseObject(xpctxt, tmp);
- tmp = valuePop(ctxt);
- }
- goto evaluation_error;
- }
- /* push the result back onto the stack */
- valuePush(ctxt, tmp);
-
- if (res)
- pos++;
-
- if (res && (pos >= minPos) && (pos <= maxPos)) {
- /*
- * Fits in the requested range.
- */
- newContextSize++;
- if (minPos == maxPos) {
- /*
- * Only 1 node was requested.
- */
- if (contextNode->type == XML_NAMESPACE_DECL) {
- /*
- * As always: take care of those nasty
- * namespace nodes.
- */
- set->nodeTab[i] = NULL;
- }
- xmlXPathNodeSetClear(set, hasNsNodes);
- set->nodeNr = 1;
- set->nodeTab[0] = contextNode;
- goto evaluation_exit;
- }
- if (pos == maxPos) {
- /*
- * We are done.
- */
- xmlXPathNodeSetClearFromPos(set, i +1, hasNsNodes);
- goto evaluation_exit;
- }
- } else {
- /*
- * Remove the entry from the initial node set.
- */
- set->nodeTab[i] = NULL;
- if (contextNode->type == XML_NAMESPACE_DECL)
- xmlXPathNodeSetFreeNs((xmlNsPtr) contextNode);
- }
- if (exprRes != NULL) {
- xmlXPathReleaseObject(ctxt->context, exprRes);
- exprRes = NULL;
- }
- if (ctxt->value == contextObj) {
- /*
- * Don't free the temporary XPath object holding the
- * context node, in order to avoid massive recreation
- * inside this loop.
- */
- valuePop(ctxt);
- xmlXPathNodeSetClear(contextObj->nodesetval, hasNsNodes);
- } else {
- /*
- * The object was lost in the evaluation machinery.
- * Can this happen? Maybe in case of internal-errors.
- */
- contextObj = NULL;
- }
- }
- goto evaluation_exit;
-
-evaluation_error:
- xmlXPathNodeSetClear(set, hasNsNodes);
- newContextSize = 0;
-
-evaluation_exit:
- if (contextObj != NULL) {
- if (ctxt->value == contextObj)
- valuePop(ctxt);
- xmlXPathReleaseObject(xpctxt, contextObj);
- }
- if (exprRes != NULL)
- xmlXPathReleaseObject(ctxt->context, exprRes);
- /*
- * Reset/invalidate the context.
- */
- xpctxt->node = oldContextNode;
- xpctxt->doc = oldContextDoc;
- xpctxt->contextSize = -1;
- xpctxt->proximityPosition = -1;
- return(newContextSize);
- }
- return(contextSize);
-}
-
-static int
-xmlXPathIsPositionalPredicate(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op,
- int *maxPos)
-{
-
- xmlXPathStepOpPtr exprOp;
-
- /*
- * BIG NOTE: This is not intended for XPATH_OP_FILTER yet!
- */
-
- /*
- * If not -1, then ch1 will point to:
- * 1) For predicates (XPATH_OP_PREDICATE):
- * - an inner predicate operator
- * 2) For filters (XPATH_OP_FILTER):
- * - an inner filter operater OR
- * - an expression selecting the node set.
- * E.g. "key('a', 'b')" or "(//foo | //bar)".
- */
- if ((op->op != XPATH_OP_PREDICATE) && (op->op != XPATH_OP_FILTER))
- return(0);
-
- if (op->ch2 != -1) {
- exprOp = &ctxt->comp->steps[op->ch2];
- } else
- return(0);
-
- if ((exprOp != NULL) &&
- (exprOp->op == XPATH_OP_VALUE) &&
- (exprOp->value4 != NULL) &&
- (((xmlXPathObjectPtr) exprOp->value4)->type == XPATH_NUMBER))
- {
- double floatval = ((xmlXPathObjectPtr) exprOp->value4)->floatval;
-
- /*
- * We have a "[n]" predicate here.
- * TODO: Unfortunately this simplistic test here is not
- * able to detect a position() predicate in compound
- * expressions like "[@attr = 'a" and position() = 1],
- * and even not the usage of position() in
- * "[position() = 1]"; thus - obviously - a position-range,
- * like it "[position() < 5]", is also not detected.
- * Maybe we could rewrite the AST to ease the optimization.
- */
-
- if ((floatval > INT_MIN) && (floatval < INT_MAX)) {
- *maxPos = (int) floatval;
- if (floatval == (double) *maxPos)
- return(1);
- }
- }
- return(0);
-}
-
-static int
-xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op,
- xmlNodePtr * first, xmlNodePtr * last,
- int toBool)
-{
-
-#define XP_TEST_HIT \
- if (hasAxisRange != 0) { \
- if (++pos == maxPos) { \
- if (addNode(seq, cur) < 0) \
- ctxt->error = XPATH_MEMORY_ERROR; \
- goto axis_range_end; } \
- } else { \
- if (addNode(seq, cur) < 0) \
- ctxt->error = XPATH_MEMORY_ERROR; \
- if (breakOnFirstHit) goto first_hit; }
-
-#define XP_TEST_HIT_NS \
- if (hasAxisRange != 0) { \
- if (++pos == maxPos) { \
- hasNsNodes = 1; \
- if (xmlXPathNodeSetAddNs(seq, xpctxt->node, (xmlNsPtr) cur) < 0) \
- ctxt->error = XPATH_MEMORY_ERROR; \
- goto axis_range_end; } \
- } else { \
- hasNsNodes = 1; \
- if (xmlXPathNodeSetAddNs(seq, xpctxt->node, (xmlNsPtr) cur) < 0) \
- ctxt->error = XPATH_MEMORY_ERROR; \
- if (breakOnFirstHit) goto first_hit; }
-
- xmlXPathAxisVal axis = (xmlXPathAxisVal) op->value;
- xmlXPathTestVal test = (xmlXPathTestVal) op->value2;
- xmlXPathTypeVal type = (xmlXPathTypeVal) op->value3;
- const xmlChar *prefix = op->value4;
- const xmlChar *name = op->value5;
- const xmlChar *URI = NULL;
-
-#ifdef DEBUG_STEP
- int nbMatches = 0, prevMatches = 0;
-#endif
- int total = 0, hasNsNodes = 0;
- /* The popped object holding the context nodes */
- xmlXPathObjectPtr obj;
- /* The set of context nodes for the node tests */
- xmlNodeSetPtr contextSeq;
- int contextIdx;
- xmlNodePtr contextNode;
- /* The final resulting node set wrt to all context nodes */
- xmlNodeSetPtr outSeq;
- /*
- * The temporary resulting node set wrt 1 context node.
- * Used to feed predicate evaluation.
- */
- xmlNodeSetPtr seq;
- xmlNodePtr cur;
- /* First predicate operator */
- xmlXPathStepOpPtr predOp;
- int maxPos; /* The requested position() (when a "[n]" predicate) */
- int hasPredicateRange, hasAxisRange, pos, size, newSize;
- int breakOnFirstHit;
-
- xmlXPathTraversalFunction next = NULL;
- int (*addNode) (xmlNodeSetPtr, xmlNodePtr);
- xmlXPathNodeSetMergeFunction mergeAndClear;
- xmlNodePtr oldContextNode;
- xmlXPathContextPtr xpctxt = ctxt->context;
-
-
- CHECK_TYPE0(XPATH_NODESET);
- obj = valuePop(ctxt);
- /*
- * Setup namespaces.
- */
- if (prefix != NULL) {
- URI = xmlXPathNsLookup(xpctxt, prefix);
- if (URI == NULL) {
- xmlXPathReleaseObject(xpctxt, obj);
- XP_ERROR0(XPATH_UNDEF_PREFIX_ERROR);
- }
- }
- /*
- * Setup axis.
- *
- * MAYBE FUTURE TODO: merging optimizations:
- * - If the nodes to be traversed wrt to the initial nodes and
- * the current axis cannot overlap, then we could avoid searching
- * for duplicates during the merge.
- * But the question is how/when to evaluate if they cannot overlap.
- * Example: if we know that for two initial nodes, the one is
- * not in the ancestor-or-self axis of the other, then we could safely
- * avoid a duplicate-aware merge, if the axis to be traversed is e.g.
- * the descendant-or-self axis.
- */
- mergeAndClear = xmlXPathNodeSetMergeAndClear;
- switch (axis) {
- case AXIS_ANCESTOR:
- first = NULL;
- next = xmlXPathNextAncestor;
- break;
- case AXIS_ANCESTOR_OR_SELF:
- first = NULL;
- next = xmlXPathNextAncestorOrSelf;
- break;
- case AXIS_ATTRIBUTE:
- first = NULL;
- last = NULL;
- next = xmlXPathNextAttribute;
- mergeAndClear = xmlXPathNodeSetMergeAndClearNoDupls;
- break;
- case AXIS_CHILD:
- last = NULL;
- if (((test == NODE_TEST_NAME) || (test == NODE_TEST_ALL)) &&
- (type == NODE_TYPE_NODE))
- {
- /*
- * Optimization if an element node type is 'element'.
- */
- next = xmlXPathNextChildElement;
- } else
- next = xmlXPathNextChild;
- mergeAndClear = xmlXPathNodeSetMergeAndClearNoDupls;
- break;
- case AXIS_DESCENDANT:
- last = NULL;
- next = xmlXPathNextDescendant;
- break;
- case AXIS_DESCENDANT_OR_SELF:
- last = NULL;
- next = xmlXPathNextDescendantOrSelf;
- break;
- case AXIS_FOLLOWING:
- last = NULL;
- next = xmlXPathNextFollowing;
- break;
- case AXIS_FOLLOWING_SIBLING:
- last = NULL;
- next = xmlXPathNextFollowingSibling;
- break;
- case AXIS_NAMESPACE:
- first = NULL;
- last = NULL;
- next = (xmlXPathTraversalFunction) xmlXPathNextNamespace;
- mergeAndClear = xmlXPathNodeSetMergeAndClearNoDupls;
- break;
- case AXIS_PARENT:
- first = NULL;
- next = xmlXPathNextParent;
- break;
- case AXIS_PRECEDING:
- first = NULL;
- next = xmlXPathNextPrecedingInternal;
- break;
- case AXIS_PRECEDING_SIBLING:
- first = NULL;
- next = xmlXPathNextPrecedingSibling;
- break;
- case AXIS_SELF:
- first = NULL;
- last = NULL;
- next = xmlXPathNextSelf;
- mergeAndClear = xmlXPathNodeSetMergeAndClearNoDupls;
- break;
- }
-
-#ifdef DEBUG_STEP
- xmlXPathDebugDumpStepAxis(op,
- (obj->nodesetval != NULL) ? obj->nodesetval->nodeNr : 0);
-#endif
-
- if (next == NULL) {
- xmlXPathReleaseObject(xpctxt, obj);
- return(0);
- }
- contextSeq = obj->nodesetval;
- if ((contextSeq == NULL) || (contextSeq->nodeNr <= 0)) {
- xmlXPathReleaseObject(xpctxt, obj);
- valuePush(ctxt, xmlXPathCacheWrapNodeSet(xpctxt, NULL));
- return(0);
- }
- /*
- * Predicate optimization ---------------------------------------------
- * If this step has a last predicate, which contains a position(),
- * then we'll optimize (although not exactly "position()", but only
- * the short-hand form, i.e., "[n]".
- *
- * Example - expression "/foo[parent::bar][1]":
- *
- * COLLECT 'child' 'name' 'node' foo -- op (we are here)
- * ROOT -- op->ch1
- * PREDICATE -- op->ch2 (predOp)
- * PREDICATE -- predOp->ch1 = [parent::bar]
- * SORT
- * COLLECT 'parent' 'name' 'node' bar
- * NODE
- * ELEM Object is a number : 1 -- predOp->ch2 = [1]
- *
- */
- maxPos = 0;
- predOp = NULL;
- hasPredicateRange = 0;
- hasAxisRange = 0;
- if (op->ch2 != -1) {
- /*
- * There's at least one predicate. 16 == XPATH_OP_PREDICATE
- */
- predOp = &ctxt->comp->steps[op->ch2];
- if (xmlXPathIsPositionalPredicate(ctxt, predOp, &maxPos)) {
- if (predOp->ch1 != -1) {
- /*
- * Use the next inner predicate operator.
- */
- predOp = &ctxt->comp->steps[predOp->ch1];
- hasPredicateRange = 1;
- } else {
- /*
- * There's no other predicate than the [n] predicate.
- */
- predOp = NULL;
- hasAxisRange = 1;
- }
- }
- }
- breakOnFirstHit = ((toBool) && (predOp == NULL)) ? 1 : 0;
- /*
- * Axis traversal -----------------------------------------------------
- */
- /*
- * 2.3 Node Tests
- * - For the attribute axis, the principal node type is attribute.
- * - For the namespace axis, the principal node type is namespace.
- * - For other axes, the principal node type is element.
- *
- * A node test * is true for any node of the
- * principal node type. For example, child::* will
- * select all element children of the context node
- */
- oldContextNode = xpctxt->node;
- addNode = xmlXPathNodeSetAddUnique;
- outSeq = NULL;
- seq = NULL;
- contextNode = NULL;
- contextIdx = 0;
-
-
- while (((contextIdx < contextSeq->nodeNr) || (contextNode != NULL)) &&
- (ctxt->error == XPATH_EXPRESSION_OK)) {
- xpctxt->node = contextSeq->nodeTab[contextIdx++];
-
- if (seq == NULL) {
- seq = xmlXPathNodeSetCreate(NULL);
- if (seq == NULL) {
- total = 0;
- goto error;
- }
- }
- /*
- * Traverse the axis and test the nodes.
- */
- pos = 0;
- cur = NULL;
- hasNsNodes = 0;
- do {
- cur = next(ctxt, cur);
- if (cur == NULL)
- break;
-
- /*
- * QUESTION TODO: What does the "first" and "last" stuff do?
- */
- if ((first != NULL) && (*first != NULL)) {
- if (*first == cur)
- break;
- if (((total % 256) == 0) &&
-#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON
- (xmlXPathCmpNodesExt(*first, cur) >= 0))
-#else
- (xmlXPathCmpNodes(*first, cur) >= 0))
-#endif
- {
- break;
- }
- }
- if ((last != NULL) && (*last != NULL)) {
- if (*last == cur)
- break;
- if (((total % 256) == 0) &&
-#ifdef XP_OPTIMIZED_NON_ELEM_COMPARISON
- (xmlXPathCmpNodesExt(cur, *last) >= 0))
-#else
- (xmlXPathCmpNodes(cur, *last) >= 0))
-#endif
- {
- break;
- }
- }
-
- total++;
-
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext, " %s", cur->name);
-#endif
-
- switch (test) {
- case NODE_TEST_NONE:
- total = 0;
- STRANGE
- goto error;
- case NODE_TEST_TYPE:
- if (type == NODE_TYPE_NODE) {
- switch (cur->type) {
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_ELEMENT_NODE:
- case XML_ATTRIBUTE_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_TEXT_NODE:
- XP_TEST_HIT
- break;
- case XML_NAMESPACE_DECL: {
- if (axis == AXIS_NAMESPACE) {
- XP_TEST_HIT_NS
- } else {
- hasNsNodes = 1;
- XP_TEST_HIT
- }
- break;
- }
- default:
- break;
- }
- } else if (cur->type == type) {
- if (cur->type == XML_NAMESPACE_DECL)
- XP_TEST_HIT_NS
- else
- XP_TEST_HIT
- } else if ((type == NODE_TYPE_TEXT) &&
- (cur->type == XML_CDATA_SECTION_NODE))
- {
- XP_TEST_HIT
- }
- break;
- case NODE_TEST_PI:
- if ((cur->type == XML_PI_NODE) &&
- ((name == NULL) || xmlStrEqual(name, cur->name)))
- {
- XP_TEST_HIT
- }
- break;
- case NODE_TEST_ALL:
- if (axis == AXIS_ATTRIBUTE) {
- if (cur->type == XML_ATTRIBUTE_NODE)
- {
- if (prefix == NULL)
- {
- XP_TEST_HIT
- } else if ((cur->ns != NULL) &&
- (xmlStrEqual(URI, cur->ns->href)))
- {
- XP_TEST_HIT
- }
- }
- } else if (axis == AXIS_NAMESPACE) {
- if (cur->type == XML_NAMESPACE_DECL)
- {
- XP_TEST_HIT_NS
- }
- } else {
- if (cur->type == XML_ELEMENT_NODE) {
- if (prefix == NULL)
- {
- XP_TEST_HIT
-
- } else if ((cur->ns != NULL) &&
- (xmlStrEqual(URI, cur->ns->href)))
- {
- XP_TEST_HIT
- }
- }
- }
- break;
- case NODE_TEST_NS:{
- TODO;
- break;
- }
- case NODE_TEST_NAME:
- if (axis == AXIS_ATTRIBUTE) {
- if (cur->type != XML_ATTRIBUTE_NODE)
- break;
- } else if (axis == AXIS_NAMESPACE) {
- if (cur->type != XML_NAMESPACE_DECL)
- break;
- } else {
- if (cur->type != XML_ELEMENT_NODE)
- break;
- }
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- if (xmlStrEqual(name, cur->name)) {
- if (prefix == NULL) {
- if (cur->ns == NULL)
- {
- XP_TEST_HIT
- }
- } else {
- if ((cur->ns != NULL) &&
- (xmlStrEqual(URI, cur->ns->href)))
- {
- XP_TEST_HIT
- }
- }
- }
- break;
- case XML_ATTRIBUTE_NODE:{
- xmlAttrPtr attr = (xmlAttrPtr) cur;
-
- if (xmlStrEqual(name, attr->name)) {
- if (prefix == NULL) {
- if ((attr->ns == NULL) ||
- (attr->ns->prefix == NULL))
- {
- XP_TEST_HIT
- }
- } else {
- if ((attr->ns != NULL) &&
- (xmlStrEqual(URI,
- attr->ns->href)))
- {
- XP_TEST_HIT
- }
- }
- }
- break;
- }
- case XML_NAMESPACE_DECL:
- if (cur->type == XML_NAMESPACE_DECL) {
- xmlNsPtr ns = (xmlNsPtr) cur;
-
- if ((ns->prefix != NULL) && (name != NULL)
- && (xmlStrEqual(ns->prefix, name)))
- {
- XP_TEST_HIT_NS
- }
- }
- break;
- default:
- break;
- }
- break;
- } /* switch(test) */
- } while ((cur != NULL) && (ctxt->error == XPATH_EXPRESSION_OK));
-
- goto apply_predicates;
-
-axis_range_end: /* ----------------------------------------------------- */
- /*
- * We have a "/foo[n]", and position() = n was reached.
- * Note that we can have as well "/foo/::parent::foo[1]", so
- * a duplicate-aware merge is still needed.
- * Merge with the result.
- */
- if (outSeq == NULL) {
- outSeq = seq;
- seq = NULL;
- } else
- outSeq = mergeAndClear(outSeq, seq, 0);
- /*
- * Break if only a true/false result was requested.
- */
- if (toBool)
- break;
- continue;
-
-first_hit: /* ---------------------------------------------------------- */
- /*
- * Break if only a true/false result was requested and
- * no predicates existed and a node test succeeded.
- */
- if (outSeq == NULL) {
- outSeq = seq;
- seq = NULL;
- } else
- outSeq = mergeAndClear(outSeq, seq, 0);
- break;
-
-#ifdef DEBUG_STEP
- if (seq != NULL)
- nbMatches += seq->nodeNr;
-#endif
-
-apply_predicates: /* --------------------------------------------------- */
- if (ctxt->error != XPATH_EXPRESSION_OK)
- goto error;
-
- /*
- * Apply predicates.
- */
- if ((predOp != NULL) && (seq->nodeNr > 0)) {
- /*
- * E.g. when we have a "/foo[some expression][n]".
- */
- /*
- * QUESTION TODO: The old predicate evaluation took into
- * account location-sets.
- * (E.g. ctxt->value->type == XPATH_LOCATIONSET)
- * Do we expect such a set here?
- * All what I learned now from the evaluation semantics
- * does not indicate that a location-set will be processed
- * here, so this looks OK.
- */
- /*
- * Iterate over all predicates, starting with the outermost
- * predicate.
- * TODO: Problem: we cannot execute the inner predicates first
- * since we cannot go back *up* the operator tree!
- * Options we have:
- * 1) Use of recursive functions (like is it currently done
- * via xmlXPathCompOpEval())
- * 2) Add a predicate evaluation information stack to the
- * context struct
- * 3) Change the way the operators are linked; we need a
- * "parent" field on xmlXPathStepOp
- *
- * For the moment, I'll try to solve this with a recursive
- * function: xmlXPathCompOpEvalPredicate().
- */
- size = seq->nodeNr;
- if (hasPredicateRange != 0)
- newSize = xmlXPathCompOpEvalPositionalPredicate(ctxt,
- predOp, seq, size, maxPos, maxPos, hasNsNodes);
- else
- newSize = xmlXPathCompOpEvalPredicate(ctxt,
- predOp, seq, size, hasNsNodes);
-
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- total = 0;
- goto error;
- }
- /*
- * Add the filtered set of nodes to the result node set.
- */
- if (newSize == 0) {
- /*
- * The predicates filtered all nodes out.
- */
- xmlXPathNodeSetClear(seq, hasNsNodes);
- } else if (seq->nodeNr > 0) {
- /*
- * Add to result set.
- */
- if (outSeq == NULL) {
- if (size != newSize) {
- /*
- * We need to merge and clear here, since
- * the sequence will contained NULLed entries.
- */
- outSeq = mergeAndClear(NULL, seq, 1);
- } else {
- outSeq = seq;
- seq = NULL;
- }
- } else
- outSeq = mergeAndClear(outSeq, seq,
- (size != newSize) ? 1: 0);
- /*
- * Break if only a true/false result was requested.
- */
- if (toBool)
- break;
- }
- } else if (seq->nodeNr > 0) {
- /*
- * Add to result set.
- */
- if (outSeq == NULL) {
- outSeq = seq;
- seq = NULL;
- } else {
- outSeq = mergeAndClear(outSeq, seq, 0);
- }
- }
- }
-
-error:
- if ((obj->boolval) && (obj->user != NULL)) {
- /*
- * QUESTION TODO: What does this do and why?
- * TODO: Do we have to do this also for the "error"
- * cleanup further down?
- */
- ctxt->value->boolval = 1;
- ctxt->value->user = obj->user;
- obj->user = NULL;
- obj->boolval = 0;
- }
- xmlXPathReleaseObject(xpctxt, obj);
-
- /*
- * Ensure we return at least an emtpy set.
- */
- if (outSeq == NULL) {
- if ((seq != NULL) && (seq->nodeNr == 0))
- outSeq = seq;
- else
- outSeq = xmlXPathNodeSetCreate(NULL);
- /* XXX what if xmlXPathNodeSetCreate returned NULL here? */
- }
- if ((seq != NULL) && (seq != outSeq)) {
- xmlXPathFreeNodeSet(seq);
- }
- /*
- * Hand over the result. Better to push the set also in
- * case of errors.
- */
- valuePush(ctxt, xmlXPathCacheWrapNodeSet(xpctxt, outSeq));
- /*
- * Reset the context node.
- */
- xpctxt->node = oldContextNode;
- /*
- * When traversing the namespace axis in "toBool" mode, it's
- * possible that tmpNsList wasn't freed.
- */
- if (xpctxt->tmpNsList != NULL) {
- xmlFree(xpctxt->tmpNsList);
- xpctxt->tmpNsList = NULL;
- }
-
-#ifdef DEBUG_STEP
- xmlGenericError(xmlGenericErrorContext,
- "\nExamined %d nodes, found %d nodes at that step\n",
- total, nbMatches);
-#endif
-
- return(total);
-}
-
-static int
-xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op, xmlNodePtr * first);
-
-/**
- * xmlXPathCompOpEvalFirst:
- * @ctxt: the XPath parser context with the compiled expression
- * @op: an XPath compiled operation
- * @first: the first elem found so far
- *
- * Evaluate the Precompiled XPath operation searching only the first
- * element in document order
- *
- * Returns the number of examined objects.
- */
-static int
-xmlXPathCompOpEvalFirst(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op, xmlNodePtr * first)
-{
- int total = 0, cur;
- xmlXPathCompExprPtr comp;
- xmlXPathObjectPtr arg1, arg2;
-
- CHECK_ERROR0;
- comp = ctxt->comp;
- switch (op->op) {
- case XPATH_OP_END:
- return (0);
- case XPATH_OP_UNION:
- total =
- xmlXPathCompOpEvalFirst(ctxt, &comp->steps[op->ch1],
- first);
- CHECK_ERROR0;
- if ((ctxt->value != NULL)
- && (ctxt->value->type == XPATH_NODESET)
- && (ctxt->value->nodesetval != NULL)
- && (ctxt->value->nodesetval->nodeNr >= 1)) {
- /*
- * limit tree traversing to first node in the result
- */
- /*
- * OPTIMIZE TODO: This implicitely sorts
- * the result, even if not needed. E.g. if the argument
- * of the count() function, no sorting is needed.
- * OPTIMIZE TODO: How do we know if the node-list wasn't
- * aready sorted?
- */
- if (ctxt->value->nodesetval->nodeNr > 1)
- xmlXPathNodeSetSort(ctxt->value->nodesetval);
- *first = ctxt->value->nodesetval->nodeTab[0];
- }
- cur =
- xmlXPathCompOpEvalFirst(ctxt, &comp->steps[op->ch2],
- first);
- CHECK_ERROR0;
-
- arg2 = valuePop(ctxt);
- arg1 = valuePop(ctxt);
- if ((arg1 == NULL) || (arg1->type != XPATH_NODESET) ||
- (arg2 == NULL) || (arg2->type != XPATH_NODESET)) {
- xmlXPathReleaseObject(ctxt->context, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- XP_ERROR0(XPATH_INVALID_TYPE);
- }
-
- arg1->nodesetval = xmlXPathNodeSetMerge(arg1->nodesetval,
- arg2->nodesetval);
- valuePush(ctxt, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- /* optimizer */
- if (total > cur)
- xmlXPathCompSwap(op);
- return (total + cur);
- case XPATH_OP_ROOT:
- xmlXPathRoot(ctxt);
- return (0);
- case XPATH_OP_NODE:
- if (op->ch1 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- valuePush(ctxt, xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node));
- return (total);
- case XPATH_OP_RESET:
- if (op->ch1 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- ctxt->context->node = NULL;
- return (total);
- case XPATH_OP_COLLECT:{
- if (op->ch1 == -1)
- return (total);
-
- total = xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
-
- total += xmlXPathNodeCollectAndTest(ctxt, op, first, NULL, 0);
- return (total);
- }
- case XPATH_OP_VALUE:
- valuePush(ctxt,
- xmlXPathCacheObjectCopy(ctxt->context,
- (xmlXPathObjectPtr) op->value4));
- return (0);
- case XPATH_OP_SORT:
- if (op->ch1 != -1)
- total +=
- xmlXPathCompOpEvalFirst(ctxt, &comp->steps[op->ch1],
- first);
- CHECK_ERROR0;
- if ((ctxt->value != NULL)
- && (ctxt->value->type == XPATH_NODESET)
- && (ctxt->value->nodesetval != NULL)
- && (ctxt->value->nodesetval->nodeNr > 1))
- xmlXPathNodeSetSort(ctxt->value->nodesetval);
- return (total);
-#ifdef XP_OPTIMIZED_FILTER_FIRST
- case XPATH_OP_FILTER:
- total += xmlXPathCompOpEvalFilterFirst(ctxt, op, first);
- return (total);
-#endif
- default:
- return (xmlXPathCompOpEval(ctxt, op));
- }
-}
-
-/**
- * xmlXPathCompOpEvalLast:
- * @ctxt: the XPath parser context with the compiled expression
- * @op: an XPath compiled operation
- * @last: the last elem found so far
- *
- * Evaluate the Precompiled XPath operation searching only the last
- * element in document order
- *
- * Returns the number of nodes traversed
- */
-static int
-xmlXPathCompOpEvalLast(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op,
- xmlNodePtr * last)
-{
- int total = 0, cur;
- xmlXPathCompExprPtr comp;
- xmlXPathObjectPtr arg1, arg2;
- xmlNodePtr bak;
- xmlDocPtr bakd;
- int pp;
- int cs;
-
- CHECK_ERROR0;
- comp = ctxt->comp;
- switch (op->op) {
- case XPATH_OP_END:
- return (0);
- case XPATH_OP_UNION:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- total =
- xmlXPathCompOpEvalLast(ctxt, &comp->steps[op->ch1], last);
- CHECK_ERROR0;
- if ((ctxt->value != NULL)
- && (ctxt->value->type == XPATH_NODESET)
- && (ctxt->value->nodesetval != NULL)
- && (ctxt->value->nodesetval->nodeNr >= 1)) {
- /*
- * limit tree traversing to first node in the result
- */
- if (ctxt->value->nodesetval->nodeNr > 1)
- xmlXPathNodeSetSort(ctxt->value->nodesetval);
- *last =
- ctxt->value->nodesetval->nodeTab[ctxt->value->
- nodesetval->nodeNr -
- 1];
- }
- ctxt->context->doc = bakd;
- ctxt->context->node = bak;
- ctxt->context->proximityPosition = pp;
- ctxt->context->contextSize = cs;
- cur =
- xmlXPathCompOpEvalLast(ctxt, &comp->steps[op->ch2], last);
- CHECK_ERROR0;
- if ((ctxt->value != NULL)
- && (ctxt->value->type == XPATH_NODESET)
- && (ctxt->value->nodesetval != NULL)
- && (ctxt->value->nodesetval->nodeNr >= 1)) { /* TODO: NOP ? */
- }
-
- arg2 = valuePop(ctxt);
- arg1 = valuePop(ctxt);
- if ((arg1 == NULL) || (arg1->type != XPATH_NODESET) ||
- (arg2 == NULL) || (arg2->type != XPATH_NODESET)) {
- xmlXPathReleaseObject(ctxt->context, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- XP_ERROR0(XPATH_INVALID_TYPE);
- }
-
- arg1->nodesetval = xmlXPathNodeSetMerge(arg1->nodesetval,
- arg2->nodesetval);
- valuePush(ctxt, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- /* optimizer */
- if (total > cur)
- xmlXPathCompSwap(op);
- return (total + cur);
- case XPATH_OP_ROOT:
- xmlXPathRoot(ctxt);
- return (0);
- case XPATH_OP_NODE:
- if (op->ch1 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- valuePush(ctxt, xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node));
- return (total);
- case XPATH_OP_RESET:
- if (op->ch1 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- ctxt->context->node = NULL;
- return (total);
- case XPATH_OP_COLLECT:{
- if (op->ch1 == -1)
- return (0);
-
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
-
- total += xmlXPathNodeCollectAndTest(ctxt, op, NULL, last, 0);
- return (total);
- }
- case XPATH_OP_VALUE:
- valuePush(ctxt,
- xmlXPathCacheObjectCopy(ctxt->context,
- (xmlXPathObjectPtr) op->value4));
- return (0);
- case XPATH_OP_SORT:
- if (op->ch1 != -1)
- total +=
- xmlXPathCompOpEvalLast(ctxt, &comp->steps[op->ch1],
- last);
- CHECK_ERROR0;
- if ((ctxt->value != NULL)
- && (ctxt->value->type == XPATH_NODESET)
- && (ctxt->value->nodesetval != NULL)
- && (ctxt->value->nodesetval->nodeNr > 1))
- xmlXPathNodeSetSort(ctxt->value->nodesetval);
- return (total);
- default:
- return (xmlXPathCompOpEval(ctxt, op));
- }
-}
-
-#ifdef XP_OPTIMIZED_FILTER_FIRST
-static int
-xmlXPathCompOpEvalFilterFirst(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op, xmlNodePtr * first)
-{
- int total = 0;
- xmlXPathCompExprPtr comp;
- xmlXPathObjectPtr res;
- xmlXPathObjectPtr obj;
- xmlNodeSetPtr oldset;
- xmlNodePtr oldnode;
- xmlDocPtr oldDoc;
- int i;
-
- CHECK_ERROR0;
- comp = ctxt->comp;
- /*
- * Optimization for ()[last()] selection i.e. the last elem
- */
- if ((op->ch1 != -1) && (op->ch2 != -1) &&
- (comp->steps[op->ch1].op == XPATH_OP_SORT) &&
- (comp->steps[op->ch2].op == XPATH_OP_SORT)) {
- int f = comp->steps[op->ch2].ch1;
-
- if ((f != -1) &&
- (comp->steps[f].op == XPATH_OP_FUNCTION) &&
- (comp->steps[f].value5 == NULL) &&
- (comp->steps[f].value == 0) &&
- (comp->steps[f].value4 != NULL) &&
- (xmlStrEqual
- (comp->steps[f].value4, BAD_CAST "last"))) {
- xmlNodePtr last = NULL;
-
- total +=
- xmlXPathCompOpEvalLast(ctxt,
- &comp->steps[op->ch1],
- &last);
- CHECK_ERROR0;
- /*
- * The nodeset should be in document order,
- * Keep only the last value
- */
- if ((ctxt->value != NULL) &&
- (ctxt->value->type == XPATH_NODESET) &&
- (ctxt->value->nodesetval != NULL) &&
- (ctxt->value->nodesetval->nodeTab != NULL) &&
- (ctxt->value->nodesetval->nodeNr > 1)) {
- xmlXPathNodeSetKeepLast(ctxt->value->nodesetval);
- *first = *(ctxt->value->nodesetval->nodeTab);
- }
- return (total);
- }
- }
-
- if (op->ch1 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 == -1)
- return (total);
- if (ctxt->value == NULL)
- return (total);
-
-#ifdef LIBXML_XPTR_ENABLED
- oldnode = ctxt->context->node;
- /*
- * Hum are we filtering the result of an XPointer expression
- */
- if (ctxt->value->type == XPATH_LOCATIONSET) {
- xmlXPathObjectPtr tmp = NULL;
- xmlLocationSetPtr newlocset = NULL;
- xmlLocationSetPtr oldlocset;
-
- /*
- * Extract the old locset, and then evaluate the result of the
- * expression for all the element in the locset. use it to grow
- * up a new locset.
- */
- CHECK_TYPE0(XPATH_LOCATIONSET);
- obj = valuePop(ctxt);
- oldlocset = obj->user;
- ctxt->context->node = NULL;
-
- if ((oldlocset == NULL) || (oldlocset->locNr == 0)) {
- ctxt->context->contextSize = 0;
- ctxt->context->proximityPosition = 0;
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- res = valuePop(ctxt);
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- valuePush(ctxt, obj);
- CHECK_ERROR0;
- return (total);
- }
- newlocset = xmlXPtrLocationSetCreate(NULL);
-
- for (i = 0; i < oldlocset->locNr; i++) {
- /*
- * Run the evaluation with a node list made of a
- * single item in the nodelocset.
- */
- ctxt->context->node = oldlocset->locTab[i]->user;
- ctxt->context->contextSize = oldlocset->locNr;
- ctxt->context->proximityPosition = i + 1;
- if (tmp == NULL) {
- tmp = xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node);
- } else {
- if (xmlXPathNodeSetAddUnique(tmp->nodesetval,
- ctxt->context->node) < 0) {
- ctxt->error = XPATH_MEMORY_ERROR;
- }
- }
- valuePush(ctxt, tmp);
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlXPathFreeObject(obj);
- return(0);
- }
- /*
- * The result of the evaluation need to be tested to
- * decided whether the filter succeeded or not
- */
- res = valuePop(ctxt);
- if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
- xmlXPtrLocationSetAdd(newlocset,
- xmlXPathCacheObjectCopy(ctxt->context,
- oldlocset->locTab[i]));
- }
- /*
- * Cleanup
- */
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- if (ctxt->value == tmp) {
- valuePop(ctxt);
- xmlXPathNodeSetClear(tmp->nodesetval, 1);
- /*
- * REVISIT TODO: Don't create a temporary nodeset
- * for everly iteration.
- */
- /* OLD: xmlXPathFreeObject(res); */
- } else
- tmp = NULL;
- ctxt->context->node = NULL;
- /*
- * Only put the first node in the result, then leave.
- */
- if (newlocset->locNr > 0) {
- *first = (xmlNodePtr) oldlocset->locTab[i]->user;
- break;
- }
- }
- if (tmp != NULL) {
- xmlXPathReleaseObject(ctxt->context, tmp);
- }
- /*
- * The result is used as the new evaluation locset.
- */
- xmlXPathReleaseObject(ctxt->context, obj);
- ctxt->context->node = NULL;
- ctxt->context->contextSize = -1;
- ctxt->context->proximityPosition = -1;
- valuePush(ctxt, xmlXPtrWrapLocationSet(newlocset));
- ctxt->context->node = oldnode;
- return (total);
- }
-#endif /* LIBXML_XPTR_ENABLED */
-
- /*
- * Extract the old set, and then evaluate the result of the
- * expression for all the element in the set. use it to grow
- * up a new set.
- */
- CHECK_TYPE0(XPATH_NODESET);
- obj = valuePop(ctxt);
- oldset = obj->nodesetval;
-
- oldnode = ctxt->context->node;
- oldDoc = ctxt->context->doc;
- ctxt->context->node = NULL;
-
- if ((oldset == NULL) || (oldset->nodeNr == 0)) {
- ctxt->context->contextSize = 0;
- ctxt->context->proximityPosition = 0;
- /* QUESTION TODO: Why was this code commented out?
- if (op->ch2 != -1)
- total +=
- xmlXPathCompOpEval(ctxt,
- &comp->steps[op->ch2]);
- CHECK_ERROR0;
- res = valuePop(ctxt);
- if (res != NULL)
- xmlXPathFreeObject(res);
- */
- valuePush(ctxt, obj);
- ctxt->context->node = oldnode;
- CHECK_ERROR0;
- } else {
- xmlNodeSetPtr newset;
- xmlXPathObjectPtr tmp = NULL;
- /*
- * Initialize the new set.
- * Also set the xpath document in case things like
- * key() evaluation are attempted on the predicate
- */
- newset = xmlXPathNodeSetCreate(NULL);
- /* XXX what if xmlXPathNodeSetCreate returned NULL? */
-
- for (i = 0; i < oldset->nodeNr; i++) {
- /*
- * Run the evaluation with a node list made of
- * a single item in the nodeset.
- */
- ctxt->context->node = oldset->nodeTab[i];
- if ((oldset->nodeTab[i]->type != XML_NAMESPACE_DECL) &&
- (oldset->nodeTab[i]->doc != NULL))
- ctxt->context->doc = oldset->nodeTab[i]->doc;
- if (tmp == NULL) {
- tmp = xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node);
- } else {
- if (xmlXPathNodeSetAddUnique(tmp->nodesetval,
- ctxt->context->node) < 0) {
- ctxt->error = XPATH_MEMORY_ERROR;
- }
- }
- valuePush(ctxt, tmp);
- ctxt->context->contextSize = oldset->nodeNr;
- ctxt->context->proximityPosition = i + 1;
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlXPathFreeNodeSet(newset);
- xmlXPathFreeObject(obj);
- return(0);
- }
- /*
- * The result of the evaluation needs to be tested to
- * decide whether the filter succeeded or not
- */
- res = valuePop(ctxt);
- if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
- if (xmlXPathNodeSetAdd(newset, oldset->nodeTab[i]) < 0)
- ctxt->error = XPATH_MEMORY_ERROR;
- }
- /*
- * Cleanup
- */
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- if (ctxt->value == tmp) {
- valuePop(ctxt);
- /*
- * Don't free the temporary nodeset
- * in order to avoid massive recreation inside this
- * loop.
- */
- xmlXPathNodeSetClear(tmp->nodesetval, 1);
- } else
- tmp = NULL;
- ctxt->context->node = NULL;
- /*
- * Only put the first node in the result, then leave.
- */
- if (newset->nodeNr > 0) {
- *first = *(newset->nodeTab);
- break;
- }
- }
- if (tmp != NULL) {
- xmlXPathReleaseObject(ctxt->context, tmp);
- }
- /*
- * The result is used as the new evaluation set.
- */
- xmlXPathReleaseObject(ctxt->context, obj);
- ctxt->context->node = NULL;
- ctxt->context->contextSize = -1;
- ctxt->context->proximityPosition = -1;
- /* may want to move this past the '}' later */
- ctxt->context->doc = oldDoc;
- valuePush(ctxt, xmlXPathCacheWrapNodeSet(ctxt->context, newset));
- }
- ctxt->context->node = oldnode;
- return(total);
-}
-#endif /* XP_OPTIMIZED_FILTER_FIRST */
-
-/**
- * xmlXPathCompOpEval:
- * @ctxt: the XPath parser context with the compiled expression
- * @op: an XPath compiled operation
- *
- * Evaluate the Precompiled XPath operation
- * Returns the number of nodes traversed
- */
-static int
-xmlXPathCompOpEval(xmlXPathParserContextPtr ctxt, xmlXPathStepOpPtr op)
-{
- int total = 0;
- int equal, ret;
- xmlXPathCompExprPtr comp;
- xmlXPathObjectPtr arg1, arg2;
- xmlNodePtr bak;
- xmlDocPtr bakd;
- int pp;
- int cs;
-
- CHECK_ERROR0;
- comp = ctxt->comp;
- switch (op->op) {
- case XPATH_OP_END:
- return (0);
- case XPATH_OP_AND:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- xmlXPathBooleanFunction(ctxt, 1);
- if ((ctxt->value == NULL) || (ctxt->value->boolval == 0))
- return (total);
- arg2 = valuePop(ctxt);
- ctxt->context->doc = bakd;
- ctxt->context->node = bak;
- ctxt->context->proximityPosition = pp;
- ctxt->context->contextSize = cs;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- if (ctxt->error) {
- xmlXPathFreeObject(arg2);
- return(0);
- }
- xmlXPathBooleanFunction(ctxt, 1);
- arg1 = valuePop(ctxt);
- arg1->boolval &= arg2->boolval;
- valuePush(ctxt, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- return (total);
- case XPATH_OP_OR:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- xmlXPathBooleanFunction(ctxt, 1);
- if ((ctxt->value == NULL) || (ctxt->value->boolval == 1))
- return (total);
- arg2 = valuePop(ctxt);
- ctxt->context->doc = bakd;
- ctxt->context->node = bak;
- ctxt->context->proximityPosition = pp;
- ctxt->context->contextSize = cs;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- if (ctxt->error) {
- xmlXPathFreeObject(arg2);
- return(0);
- }
- xmlXPathBooleanFunction(ctxt, 1);
- arg1 = valuePop(ctxt);
- arg1->boolval |= arg2->boolval;
- valuePush(ctxt, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- return (total);
- case XPATH_OP_EQUAL:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- ctxt->context->doc = bakd;
- ctxt->context->node = bak;
- ctxt->context->proximityPosition = pp;
- ctxt->context->contextSize = cs;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- if (op->value)
- equal = xmlXPathEqualValues(ctxt);
- else
- equal = xmlXPathNotEqualValues(ctxt);
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, equal));
- return (total);
- case XPATH_OP_CMP:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- ctxt->context->doc = bakd;
- ctxt->context->node = bak;
- ctxt->context->proximityPosition = pp;
- ctxt->context->contextSize = cs;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- ret = xmlXPathCompareValues(ctxt, op->value, op->value2);
- valuePush(ctxt, xmlXPathCacheNewBoolean(ctxt->context, ret));
- return (total);
- case XPATH_OP_PLUS:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 != -1) {
- ctxt->context->doc = bakd;
- ctxt->context->node = bak;
- ctxt->context->proximityPosition = pp;
- ctxt->context->contextSize = cs;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- }
- CHECK_ERROR0;
- if (op->value == 0)
- xmlXPathSubValues(ctxt);
- else if (op->value == 1)
- xmlXPathAddValues(ctxt);
- else if (op->value == 2)
- xmlXPathValueFlipSign(ctxt);
- else if (op->value == 3) {
- CAST_TO_NUMBER;
- CHECK_TYPE0(XPATH_NUMBER);
- }
- return (total);
- case XPATH_OP_MULT:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- ctxt->context->doc = bakd;
- ctxt->context->node = bak;
- ctxt->context->proximityPosition = pp;
- ctxt->context->contextSize = cs;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- if (op->value == 0)
- xmlXPathMultValues(ctxt);
- else if (op->value == 1)
- xmlXPathDivValues(ctxt);
- else if (op->value == 2)
- xmlXPathModValues(ctxt);
- return (total);
- case XPATH_OP_UNION:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- ctxt->context->doc = bakd;
- ctxt->context->node = bak;
- ctxt->context->proximityPosition = pp;
- ctxt->context->contextSize = cs;
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
-
- arg2 = valuePop(ctxt);
- arg1 = valuePop(ctxt);
- if ((arg1 == NULL) || (arg1->type != XPATH_NODESET) ||
- (arg2 == NULL) || (arg2->type != XPATH_NODESET)) {
- xmlXPathReleaseObject(ctxt->context, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- XP_ERROR0(XPATH_INVALID_TYPE);
- }
-
- if ((arg1->nodesetval == NULL) ||
- ((arg2->nodesetval != NULL) &&
- (arg2->nodesetval->nodeNr != 0)))
- {
- arg1->nodesetval = xmlXPathNodeSetMerge(arg1->nodesetval,
- arg2->nodesetval);
- }
-
- valuePush(ctxt, arg1);
- xmlXPathReleaseObject(ctxt->context, arg2);
- return (total);
- case XPATH_OP_ROOT:
- xmlXPathRoot(ctxt);
- return (total);
- case XPATH_OP_NODE:
- if (op->ch1 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- valuePush(ctxt, xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node));
- return (total);
- case XPATH_OP_RESET:
- if (op->ch1 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- CHECK_ERROR0;
- ctxt->context->node = NULL;
- return (total);
- case XPATH_OP_COLLECT:{
- if (op->ch1 == -1)
- return (total);
-
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
-
- total += xmlXPathNodeCollectAndTest(ctxt, op, NULL, NULL, 0);
- return (total);
- }
- case XPATH_OP_VALUE:
- valuePush(ctxt,
- xmlXPathCacheObjectCopy(ctxt->context,
- (xmlXPathObjectPtr) op->value4));
- return (total);
- case XPATH_OP_VARIABLE:{
- xmlXPathObjectPtr val;
-
- if (op->ch1 != -1)
- total +=
- xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- if (op->value5 == NULL) {
- val = xmlXPathVariableLookup(ctxt->context, op->value4);
- if (val == NULL) {
- ctxt->error = XPATH_UNDEF_VARIABLE_ERROR;
- return(0);
- }
- valuePush(ctxt, val);
- } else {
- const xmlChar *URI;
-
- URI = xmlXPathNsLookup(ctxt->context, op->value5);
- if (URI == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompOpEval: variable %s bound to undefined prefix %s\n",
- (char *) op->value4, (char *)op->value5);
- ctxt->error = XPATH_UNDEF_PREFIX_ERROR;
- return (total);
- }
- val = xmlXPathVariableLookupNS(ctxt->context,
- op->value4, URI);
- if (val == NULL) {
- ctxt->error = XPATH_UNDEF_VARIABLE_ERROR;
- return(0);
- }
- valuePush(ctxt, val);
- }
- return (total);
- }
- case XPATH_OP_FUNCTION:{
- xmlXPathFunction func;
- const xmlChar *oldFunc, *oldFuncURI;
- int i;
- int frame;
-
- frame = xmlXPathSetFrame(ctxt);
- if (op->ch1 != -1) {
- total +=
- xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlXPathPopFrame(ctxt, frame);
- return (total);
- }
- }
- if (ctxt->valueNr < ctxt->valueFrame + op->value) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompOpEval: parameter error\n");
- ctxt->error = XPATH_INVALID_OPERAND;
- xmlXPathPopFrame(ctxt, frame);
- return (total);
- }
- for (i = 0; i < op->value; i++) {
- if (ctxt->valueTab[(ctxt->valueNr - 1) - i] == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompOpEval: parameter error\n");
- ctxt->error = XPATH_INVALID_OPERAND;
- xmlXPathPopFrame(ctxt, frame);
- return (total);
- }
- }
- if (op->cache != NULL)
- func = op->cache;
- else {
- const xmlChar *URI = NULL;
-
- if (op->value5 == NULL)
- func =
- xmlXPathFunctionLookup(ctxt->context,
- op->value4);
- else {
- URI = xmlXPathNsLookup(ctxt->context, op->value5);
- if (URI == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompOpEval: function %s bound to undefined prefix %s\n",
- (char *)op->value4, (char *)op->value5);
- xmlXPathPopFrame(ctxt, frame);
- ctxt->error = XPATH_UNDEF_PREFIX_ERROR;
- return (total);
- }
- func = xmlXPathFunctionLookupNS(ctxt->context,
- op->value4, URI);
- }
- if (func == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompOpEval: function %s not found\n",
- (char *)op->value4);
- XP_ERROR0(XPATH_UNKNOWN_FUNC_ERROR);
- }
- op->cache = func;
- op->cacheURI = (void *) URI;
- }
- oldFunc = ctxt->context->function;
- oldFuncURI = ctxt->context->functionURI;
- ctxt->context->function = op->value4;
- ctxt->context->functionURI = op->cacheURI;
- func(ctxt, op->value);
- ctxt->context->function = oldFunc;
- ctxt->context->functionURI = oldFuncURI;
- xmlXPathPopFrame(ctxt, frame);
- return (total);
- }
- case XPATH_OP_ARG:
- bakd = ctxt->context->doc;
- bak = ctxt->context->node;
- pp = ctxt->context->proximityPosition;
- cs = ctxt->context->contextSize;
- if (op->ch1 != -1) {
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- ctxt->context->contextSize = cs;
- ctxt->context->proximityPosition = pp;
- ctxt->context->node = bak;
- ctxt->context->doc = bakd;
- CHECK_ERROR0;
- }
- if (op->ch2 != -1) {
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch2]);
- ctxt->context->contextSize = cs;
- ctxt->context->proximityPosition = pp;
- ctxt->context->node = bak;
- ctxt->context->doc = bakd;
- CHECK_ERROR0;
- }
- return (total);
- case XPATH_OP_PREDICATE:
- case XPATH_OP_FILTER:{
- xmlXPathObjectPtr res;
- xmlXPathObjectPtr obj, tmp;
- xmlNodeSetPtr newset = NULL;
- xmlNodeSetPtr oldset;
- xmlNodePtr oldnode;
- xmlDocPtr oldDoc;
- int i;
-
- /*
- * Optimization for ()[1] selection i.e. the first elem
- */
- if ((op->ch1 != -1) && (op->ch2 != -1) &&
-#ifdef XP_OPTIMIZED_FILTER_FIRST
- /*
- * FILTER TODO: Can we assume that the inner processing
- * will result in an ordered list if we have an
- * XPATH_OP_FILTER?
- * What about an additional field or flag on
- * xmlXPathObject like @sorted ? This way we wouln'd need
- * to assume anything, so it would be more robust and
- * easier to optimize.
- */
- ((comp->steps[op->ch1].op == XPATH_OP_SORT) || /* 18 */
- (comp->steps[op->ch1].op == XPATH_OP_FILTER)) && /* 17 */
-#else
- (comp->steps[op->ch1].op == XPATH_OP_SORT) &&
-#endif
- (comp->steps[op->ch2].op == XPATH_OP_VALUE)) { /* 12 */
- xmlXPathObjectPtr val;
-
- val = comp->steps[op->ch2].value4;
- if ((val != NULL) && (val->type == XPATH_NUMBER) &&
- (val->floatval == 1.0)) {
- xmlNodePtr first = NULL;
-
- total +=
- xmlXPathCompOpEvalFirst(ctxt,
- &comp->steps[op->ch1],
- &first);
- CHECK_ERROR0;
- /*
- * The nodeset should be in document order,
- * Keep only the first value
- */
- if ((ctxt->value != NULL) &&
- (ctxt->value->type == XPATH_NODESET) &&
- (ctxt->value->nodesetval != NULL) &&
- (ctxt->value->nodesetval->nodeNr > 1))
- xmlXPathNodeSetClearFromPos(ctxt->value->nodesetval,
- 1, 1);
- return (total);
- }
- }
- /*
- * Optimization for ()[last()] selection i.e. the last elem
- */
- if ((op->ch1 != -1) && (op->ch2 != -1) &&
- (comp->steps[op->ch1].op == XPATH_OP_SORT) &&
- (comp->steps[op->ch2].op == XPATH_OP_SORT)) {
- int f = comp->steps[op->ch2].ch1;
-
- if ((f != -1) &&
- (comp->steps[f].op == XPATH_OP_FUNCTION) &&
- (comp->steps[f].value5 == NULL) &&
- (comp->steps[f].value == 0) &&
- (comp->steps[f].value4 != NULL) &&
- (xmlStrEqual
- (comp->steps[f].value4, BAD_CAST "last"))) {
- xmlNodePtr last = NULL;
-
- total +=
- xmlXPathCompOpEvalLast(ctxt,
- &comp->steps[op->ch1],
- &last);
- CHECK_ERROR0;
- /*
- * The nodeset should be in document order,
- * Keep only the last value
- */
- if ((ctxt->value != NULL) &&
- (ctxt->value->type == XPATH_NODESET) &&
- (ctxt->value->nodesetval != NULL) &&
- (ctxt->value->nodesetval->nodeTab != NULL) &&
- (ctxt->value->nodesetval->nodeNr > 1))
- xmlXPathNodeSetKeepLast(ctxt->value->nodesetval);
- return (total);
- }
- }
- /*
- * Process inner predicates first.
- * Example "index[parent::book][1]":
- * ...
- * PREDICATE <-- we are here "[1]"
- * PREDICATE <-- process "[parent::book]" first
- * SORT
- * COLLECT 'parent' 'name' 'node' book
- * NODE
- * ELEM Object is a number : 1
- */
- if (op->ch1 != -1)
- total +=
- xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if (op->ch2 == -1)
- return (total);
- if (ctxt->value == NULL)
- return (total);
-
- oldnode = ctxt->context->node;
-
-#ifdef LIBXML_XPTR_ENABLED
- /*
- * Hum are we filtering the result of an XPointer expression
- */
- if (ctxt->value->type == XPATH_LOCATIONSET) {
- xmlLocationSetPtr newlocset = NULL;
- xmlLocationSetPtr oldlocset;
-
- /*
- * Extract the old locset, and then evaluate the result of the
- * expression for all the element in the locset. use it to grow
- * up a new locset.
- */
- CHECK_TYPE0(XPATH_LOCATIONSET);
- obj = valuePop(ctxt);
- oldlocset = obj->user;
- ctxt->context->node = NULL;
-
- if ((oldlocset == NULL) || (oldlocset->locNr == 0)) {
- ctxt->context->contextSize = 0;
- ctxt->context->proximityPosition = 0;
- if (op->ch2 != -1)
- total +=
- xmlXPathCompOpEval(ctxt,
- &comp->steps[op->ch2]);
- res = valuePop(ctxt);
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- valuePush(ctxt, obj);
- CHECK_ERROR0;
- return (total);
- }
- newlocset = xmlXPtrLocationSetCreate(NULL);
-
- for (i = 0; i < oldlocset->locNr; i++) {
- /*
- * Run the evaluation with a node list made of a
- * single item in the nodelocset.
- */
- ctxt->context->node = oldlocset->locTab[i]->user;
- ctxt->context->contextSize = oldlocset->locNr;
- ctxt->context->proximityPosition = i + 1;
- tmp = xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node);
- valuePush(ctxt, tmp);
-
- if (op->ch2 != -1)
- total +=
- xmlXPathCompOpEval(ctxt,
- &comp->steps[op->ch2]);
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlXPathFreeObject(obj);
- return(0);
- }
-
- /*
- * The result of the evaluation need to be tested to
- * decided whether the filter succeeded or not
- */
- res = valuePop(ctxt);
- if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
- xmlXPtrLocationSetAdd(newlocset,
- xmlXPathObjectCopy
- (oldlocset->locTab[i]));
- }
-
- /*
- * Cleanup
- */
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- if (ctxt->value == tmp) {
- res = valuePop(ctxt);
- xmlXPathReleaseObject(ctxt->context, res);
- }
-
- ctxt->context->node = NULL;
- }
-
- /*
- * The result is used as the new evaluation locset.
- */
- xmlXPathReleaseObject(ctxt->context, obj);
- ctxt->context->node = NULL;
- ctxt->context->contextSize = -1;
- ctxt->context->proximityPosition = -1;
- valuePush(ctxt, xmlXPtrWrapLocationSet(newlocset));
- ctxt->context->node = oldnode;
- return (total);
- }
-#endif /* LIBXML_XPTR_ENABLED */
-
- /*
- * Extract the old set, and then evaluate the result of the
- * expression for all the element in the set. use it to grow
- * up a new set.
- */
- CHECK_TYPE0(XPATH_NODESET);
- obj = valuePop(ctxt);
- oldset = obj->nodesetval;
-
- oldnode = ctxt->context->node;
- oldDoc = ctxt->context->doc;
- ctxt->context->node = NULL;
-
- if ((oldset == NULL) || (oldset->nodeNr == 0)) {
- ctxt->context->contextSize = 0;
- ctxt->context->proximityPosition = 0;
-/*
- if (op->ch2 != -1)
- total +=
- xmlXPathCompOpEval(ctxt,
- &comp->steps[op->ch2]);
- CHECK_ERROR0;
- res = valuePop(ctxt);
- if (res != NULL)
- xmlXPathFreeObject(res);
-*/
- valuePush(ctxt, obj);
- ctxt->context->node = oldnode;
- CHECK_ERROR0;
- } else {
- tmp = NULL;
- /*
- * Initialize the new set.
- * Also set the xpath document in case things like
- * key() evaluation are attempted on the predicate
- */
- newset = xmlXPathNodeSetCreate(NULL);
- /*
- * SPEC XPath 1.0:
- * "For each node in the node-set to be filtered, the
- * PredicateExpr is evaluated with that node as the
- * context node, with the number of nodes in the
- * node-set as the context size, and with the proximity
- * position of the node in the node-set with respect to
- * the axis as the context position;"
- * @oldset is the node-set" to be filtered.
- *
- * SPEC XPath 1.0:
- * "only predicates change the context position and
- * context size (see [2.4 Predicates])."
- * Example:
- * node-set context pos
- * nA 1
- * nB 2
- * nC 3
- * After applying predicate [position() > 1] :
- * node-set context pos
- * nB 1
- * nC 2
- *
- * removed the first node in the node-set, then
- * the context position of the
- */
- for (i = 0; i < oldset->nodeNr; i++) {
- /*
- * Run the evaluation with a node list made of
- * a single item in the nodeset.
- */
- ctxt->context->node = oldset->nodeTab[i];
- if ((oldset->nodeTab[i]->type != XML_NAMESPACE_DECL) &&
- (oldset->nodeTab[i]->doc != NULL))
- ctxt->context->doc = oldset->nodeTab[i]->doc;
- if (tmp == NULL) {
- tmp = xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node);
- } else {
- if (xmlXPathNodeSetAddUnique(tmp->nodesetval,
- ctxt->context->node) < 0) {
- ctxt->error = XPATH_MEMORY_ERROR;
- }
- }
- valuePush(ctxt, tmp);
- ctxt->context->contextSize = oldset->nodeNr;
- ctxt->context->proximityPosition = i + 1;
- /*
- * Evaluate the predicate against the context node.
- * Can/should we optimize position() predicates
- * here (e.g. "[1]")?
- */
- if (op->ch2 != -1)
- total +=
- xmlXPathCompOpEval(ctxt,
- &comp->steps[op->ch2]);
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlXPathFreeNodeSet(newset);
- xmlXPathFreeObject(obj);
- return(0);
- }
-
- /*
- * The result of the evaluation needs to be tested to
- * decide whether the filter succeeded or not
- */
- /*
- * OPTIMIZE TODO: Can we use
- * xmlXPathNodeSetAdd*Unique()* instead?
- */
- res = valuePop(ctxt);
- if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
- if (xmlXPathNodeSetAdd(newset, oldset->nodeTab[i])
- < 0)
- ctxt->error = XPATH_MEMORY_ERROR;
- }
-
- /*
- * Cleanup
- */
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- if (ctxt->value == tmp) {
- valuePop(ctxt);
- xmlXPathNodeSetClear(tmp->nodesetval, 1);
- /*
- * Don't free the temporary nodeset
- * in order to avoid massive recreation inside this
- * loop.
- */
- } else
- tmp = NULL;
- ctxt->context->node = NULL;
- }
- if (tmp != NULL)
- xmlXPathReleaseObject(ctxt->context, tmp);
- /*
- * The result is used as the new evaluation set.
- */
- xmlXPathReleaseObject(ctxt->context, obj);
- ctxt->context->node = NULL;
- ctxt->context->contextSize = -1;
- ctxt->context->proximityPosition = -1;
- /* may want to move this past the '}' later */
- ctxt->context->doc = oldDoc;
- valuePush(ctxt,
- xmlXPathCacheWrapNodeSet(ctxt->context, newset));
- }
- ctxt->context->node = oldnode;
- return (total);
- }
- case XPATH_OP_SORT:
- if (op->ch1 != -1)
- total += xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- if ((ctxt->value != NULL) &&
- (ctxt->value->type == XPATH_NODESET) &&
- (ctxt->value->nodesetval != NULL) &&
- (ctxt->value->nodesetval->nodeNr > 1))
- {
- xmlXPathNodeSetSort(ctxt->value->nodesetval);
- }
- return (total);
-#ifdef LIBXML_XPTR_ENABLED
- case XPATH_OP_RANGETO:{
- xmlXPathObjectPtr range;
- xmlXPathObjectPtr res, obj;
- xmlXPathObjectPtr tmp;
- xmlLocationSetPtr newlocset = NULL;
- xmlLocationSetPtr oldlocset;
- xmlNodeSetPtr oldset;
- int i, j;
-
- if (op->ch1 != -1) {
- total +=
- xmlXPathCompOpEval(ctxt, &comp->steps[op->ch1]);
- CHECK_ERROR0;
- }
- if (ctxt->value == NULL) {
- XP_ERROR0(XPATH_INVALID_OPERAND);
- }
- if (op->ch2 == -1)
- return (total);
-
- if (ctxt->value->type == XPATH_LOCATIONSET) {
- /*
- * Extract the old locset, and then evaluate the result of the
- * expression for all the element in the locset. use it to grow
- * up a new locset.
- */
- CHECK_TYPE0(XPATH_LOCATIONSET);
- obj = valuePop(ctxt);
- oldlocset = obj->user;
-
- if ((oldlocset == NULL) || (oldlocset->locNr == 0)) {
- ctxt->context->node = NULL;
- ctxt->context->contextSize = 0;
- ctxt->context->proximityPosition = 0;
- total += xmlXPathCompOpEval(ctxt,&comp->steps[op->ch2]);
- res = valuePop(ctxt);
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- valuePush(ctxt, obj);
- CHECK_ERROR0;
- return (total);
- }
- newlocset = xmlXPtrLocationSetCreate(NULL);
-
- for (i = 0; i < oldlocset->locNr; i++) {
- /*
- * Run the evaluation with a node list made of a
- * single item in the nodelocset.
- */
- ctxt->context->node = oldlocset->locTab[i]->user;
- ctxt->context->contextSize = oldlocset->locNr;
- ctxt->context->proximityPosition = i + 1;
- tmp = xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node);
- valuePush(ctxt, tmp);
-
- if (op->ch2 != -1)
- total +=
- xmlXPathCompOpEval(ctxt,
- &comp->steps[op->ch2]);
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlXPathFreeObject(obj);
- return(0);
- }
-
- res = valuePop(ctxt);
- if (res->type == XPATH_LOCATIONSET) {
- xmlLocationSetPtr rloc =
- (xmlLocationSetPtr)res->user;
- for (j=0; j<rloc->locNr; j++) {
- range = xmlXPtrNewRange(
- oldlocset->locTab[i]->user,
- oldlocset->locTab[i]->index,
- rloc->locTab[j]->user2,
- rloc->locTab[j]->index2);
- if (range != NULL) {
- xmlXPtrLocationSetAdd(newlocset, range);
- }
- }
- } else {
- range = xmlXPtrNewRangeNodeObject(
- (xmlNodePtr)oldlocset->locTab[i]->user, res);
- if (range != NULL) {
- xmlXPtrLocationSetAdd(newlocset,range);
- }
- }
-
- /*
- * Cleanup
- */
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- if (ctxt->value == tmp) {
- res = valuePop(ctxt);
- xmlXPathReleaseObject(ctxt->context, res);
- }
-
- ctxt->context->node = NULL;
- }
- } else { /* Not a location set */
- CHECK_TYPE0(XPATH_NODESET);
- obj = valuePop(ctxt);
- oldset = obj->nodesetval;
- ctxt->context->node = NULL;
-
- newlocset = xmlXPtrLocationSetCreate(NULL);
-
- if (oldset != NULL) {
- for (i = 0; i < oldset->nodeNr; i++) {
- /*
- * Run the evaluation with a node list made of a single item
- * in the nodeset.
- */
- ctxt->context->node = oldset->nodeTab[i];
- /*
- * OPTIMIZE TODO: Avoid recreation for every iteration.
- */
- tmp = xmlXPathCacheNewNodeSet(ctxt->context,
- ctxt->context->node);
- valuePush(ctxt, tmp);
-
- if (op->ch2 != -1)
- total +=
- xmlXPathCompOpEval(ctxt,
- &comp->steps[op->ch2]);
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlXPathFreeObject(obj);
- return(0);
- }
-
- res = valuePop(ctxt);
- range =
- xmlXPtrNewRangeNodeObject(oldset->nodeTab[i],
- res);
- if (range != NULL) {
- xmlXPtrLocationSetAdd(newlocset, range);
- }
-
- /*
- * Cleanup
- */
- if (res != NULL) {
- xmlXPathReleaseObject(ctxt->context, res);
- }
- if (ctxt->value == tmp) {
- res = valuePop(ctxt);
- xmlXPathReleaseObject(ctxt->context, res);
- }
-
- ctxt->context->node = NULL;
- }
- }
- }
-
- /*
- * The result is used as the new evaluation set.
- */
- xmlXPathReleaseObject(ctxt->context, obj);
- ctxt->context->node = NULL;
- ctxt->context->contextSize = -1;
- ctxt->context->proximityPosition = -1;
- valuePush(ctxt, xmlXPtrWrapLocationSet(newlocset));
- return (total);
- }
-#endif /* LIBXML_XPTR_ENABLED */
- }
- xmlGenericError(xmlGenericErrorContext,
- "XPath: unknown precompiled operation %d\n", op->op);
- ctxt->error = XPATH_INVALID_OPERAND;
- return (total);
-}
-
-/**
- * xmlXPathCompOpEvalToBoolean:
- * @ctxt: the XPath parser context
- *
- * Evaluates if the expression evaluates to true.
- *
- * Returns 1 if true, 0 if false and -1 on API or internal errors.
- */
-static int
-xmlXPathCompOpEvalToBoolean(xmlXPathParserContextPtr ctxt,
- xmlXPathStepOpPtr op,
- int isPredicate)
-{
- xmlXPathObjectPtr resObj = NULL;
-
-start:
- /* comp = ctxt->comp; */
- switch (op->op) {
- case XPATH_OP_END:
- return (0);
- case XPATH_OP_VALUE:
- resObj = (xmlXPathObjectPtr) op->value4;
- if (isPredicate)
- return(xmlXPathEvaluatePredicateResult(ctxt, resObj));
- return(xmlXPathCastToBoolean(resObj));
- case XPATH_OP_SORT:
- /*
- * We don't need sorting for boolean results. Skip this one.
- */
- if (op->ch1 != -1) {
- op = &ctxt->comp->steps[op->ch1];
- goto start;
- }
- return(0);
- case XPATH_OP_COLLECT:
- if (op->ch1 == -1)
- return(0);
-
- xmlXPathCompOpEval(ctxt, &ctxt->comp->steps[op->ch1]);
- if (ctxt->error != XPATH_EXPRESSION_OK)
- return(-1);
-
- xmlXPathNodeCollectAndTest(ctxt, op, NULL, NULL, 1);
- if (ctxt->error != XPATH_EXPRESSION_OK)
- return(-1);
-
- resObj = valuePop(ctxt);
- if (resObj == NULL)
- return(-1);
- break;
- default:
- /*
- * Fallback to call xmlXPathCompOpEval().
- */
- xmlXPathCompOpEval(ctxt, op);
- if (ctxt->error != XPATH_EXPRESSION_OK)
- return(-1);
-
- resObj = valuePop(ctxt);
- if (resObj == NULL)
- return(-1);
- break;
- }
-
- if (resObj) {
- int res;
-
- if (resObj->type == XPATH_BOOLEAN) {
- res = resObj->boolval;
- } else if (isPredicate) {
- /*
- * For predicates a result of type "number" is handled
- * differently:
- * SPEC XPath 1.0:
- * "If the result is a number, the result will be converted
- * to true if the number is equal to the context position
- * and will be converted to false otherwise;"
- */
- res = xmlXPathEvaluatePredicateResult(ctxt, resObj);
- } else {
- res = xmlXPathCastToBoolean(resObj);
- }
- xmlXPathReleaseObject(ctxt->context, resObj);
- return(res);
- }
-
- return(0);
-}
-
-#ifdef XPATH_STREAMING
-/**
- * xmlXPathRunStreamEval:
- * @ctxt: the XPath parser context with the compiled expression
- *
- * Evaluate the Precompiled Streamable XPath expression in the given context.
- */
-static int
-xmlXPathRunStreamEval(xmlXPathContextPtr ctxt, xmlPatternPtr comp,
- xmlXPathObjectPtr *resultSeq, int toBool)
-{
- int max_depth, min_depth;
- int from_root;
- int ret, depth;
- int eval_all_nodes;
- xmlNodePtr cur = NULL, limit = NULL;
- xmlStreamCtxtPtr patstream = NULL;
-
- int nb_nodes = 0;
-
- if ((ctxt == NULL) || (comp == NULL))
- return(-1);
- max_depth = xmlPatternMaxDepth(comp);
- if (max_depth == -1)
- return(-1);
- if (max_depth == -2)
- max_depth = 10000;
- min_depth = xmlPatternMinDepth(comp);
- if (min_depth == -1)
- return(-1);
- from_root = xmlPatternFromRoot(comp);
- if (from_root < 0)
- return(-1);
-#if 0
- printf("stream eval: depth %d from root %d\n", max_depth, from_root);
-#endif
-
- if (! toBool) {
- if (resultSeq == NULL)
- return(-1);
- *resultSeq = xmlXPathCacheNewNodeSet(ctxt, NULL);
- if (*resultSeq == NULL)
- return(-1);
- }
-
- /*
- * handle the special cases of "/" amd "." being matched
- */
- if (min_depth == 0) {
- if (from_root) {
- /* Select "/" */
- if (toBool)
- return(1);
- xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval,
- (xmlNodePtr) ctxt->doc);
- } else {
- /* Select "self::node()" */
- if (toBool)
- return(1);
- xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, ctxt->node);
- }
- }
- if (max_depth == 0) {
- return(0);
- }
-
- if (from_root) {
- cur = (xmlNodePtr)ctxt->doc;
- } else if (ctxt->node != NULL) {
- switch (ctxt->node->type) {
- case XML_ELEMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- cur = ctxt->node;
- break;
- case XML_ATTRIBUTE_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- case XML_NAMESPACE_DECL:
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- break;
- }
- limit = cur;
- }
- if (cur == NULL) {
- return(0);
- }
-
- patstream = xmlPatternGetStreamCtxt(comp);
- if (patstream == NULL) {
- /*
- * QUESTION TODO: Is this an error?
- */
- return(0);
- }
-
- eval_all_nodes = xmlStreamWantsAnyNode(patstream);
-
- if (from_root) {
- ret = xmlStreamPush(patstream, NULL, NULL);
- if (ret < 0) {
- } else if (ret == 1) {
- if (toBool)
- goto return_1;
- xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, cur);
- }
- }
- depth = 0;
- goto scan_children;
-next_node:
- do {
- nb_nodes++;
-
- switch (cur->type) {
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_COMMENT_NODE:
- case XML_PI_NODE:
- if (cur->type == XML_ELEMENT_NODE) {
- ret = xmlStreamPush(patstream, cur->name,
- (cur->ns ? cur->ns->href : NULL));
- } else if (eval_all_nodes)
- ret = xmlStreamPushNode(patstream, NULL, NULL, cur->type);
- else
- break;
-
- if (ret < 0) {
- /* NOP. */
- } else if (ret == 1) {
- if (toBool)
- goto return_1;
- if (xmlXPathNodeSetAddUnique((*resultSeq)->nodesetval, cur)
- < 0) {
- ctxt->lastError.domain = XML_FROM_XPATH;
- ctxt->lastError.code = XML_ERR_NO_MEMORY;
- }
- }
- if ((cur->children == NULL) || (depth >= max_depth)) {
- ret = xmlStreamPop(patstream);
- while (cur->next != NULL) {
- cur = cur->next;
- if ((cur->type != XML_ENTITY_DECL) &&
- (cur->type != XML_DTD_NODE))
- goto next_node;
- }
- }
- default:
- break;
- }
-
-scan_children:
- if (cur->type == XML_NAMESPACE_DECL) break;
- if ((cur->children != NULL) && (depth < max_depth)) {
- /*
- * Do not descend on entities declarations
- */
- if (cur->children->type != XML_ENTITY_DECL) {
- cur = cur->children;
- depth++;
- /*
- * Skip DTDs
- */
- if (cur->type != XML_DTD_NODE)
- continue;
- }
- }
-
- if (cur == limit)
- break;
-
- while (cur->next != NULL) {
- cur = cur->next;
- if ((cur->type != XML_ENTITY_DECL) &&
- (cur->type != XML_DTD_NODE))
- goto next_node;
- }
-
- do {
- cur = cur->parent;
- depth--;
- if ((cur == NULL) || (cur == limit))
- goto done;
- if (cur->type == XML_ELEMENT_NODE) {
- ret = xmlStreamPop(patstream);
- } else if ((eval_all_nodes) &&
- ((cur->type == XML_TEXT_NODE) ||
- (cur->type == XML_CDATA_SECTION_NODE) ||
- (cur->type == XML_COMMENT_NODE) ||
- (cur->type == XML_PI_NODE)))
- {
- ret = xmlStreamPop(patstream);
- }
- if (cur->next != NULL) {
- cur = cur->next;
- break;
- }
- } while (cur != NULL);
-
- } while ((cur != NULL) && (depth >= 0));
-
-done:
-
-#if 0
- printf("stream eval: checked %d nodes selected %d\n",
- nb_nodes, retObj->nodesetval->nodeNr);
-#endif
-
- if (patstream)
- xmlFreeStreamCtxt(patstream);
- return(0);
-
-return_1:
- if (patstream)
- xmlFreeStreamCtxt(patstream);
- return(1);
-}
-#endif /* XPATH_STREAMING */
-
-/**
- * xmlXPathRunEval:
- * @ctxt: the XPath parser context with the compiled expression
- * @toBool: evaluate to a boolean result
- *
- * Evaluate the Precompiled XPath expression in the given context.
- */
-static int
-xmlXPathRunEval(xmlXPathParserContextPtr ctxt, int toBool)
-{
- xmlXPathCompExprPtr comp;
-
- if ((ctxt == NULL) || (ctxt->comp == NULL))
- return(-1);
-
- if (ctxt->valueTab == NULL) {
- /* Allocate the value stack */
- ctxt->valueTab = (xmlXPathObjectPtr *)
- xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
- if (ctxt->valueTab == NULL) {
- xmlXPathPErrMemory(ctxt, "creating evaluation context\n");
- xmlFree(ctxt);
- }
- ctxt->valueNr = 0;
- ctxt->valueMax = 10;
- ctxt->value = NULL;
- ctxt->valueFrame = 0;
- }
-#ifdef XPATH_STREAMING
- if (ctxt->comp->stream) {
- int res;
-
- if (toBool) {
- /*
- * Evaluation to boolean result.
- */
- res = xmlXPathRunStreamEval(ctxt->context,
- ctxt->comp->stream, NULL, 1);
- if (res != -1)
- return(res);
- } else {
- xmlXPathObjectPtr resObj = NULL;
-
- /*
- * Evaluation to a sequence.
- */
- res = xmlXPathRunStreamEval(ctxt->context,
- ctxt->comp->stream, &resObj, 0);
-
- if ((res != -1) && (resObj != NULL)) {
- valuePush(ctxt, resObj);
- return(0);
- }
- if (resObj != NULL)
- xmlXPathReleaseObject(ctxt->context, resObj);
- }
- /*
- * QUESTION TODO: This falls back to normal XPath evaluation
- * if res == -1. Is this intended?
- */
- }
-#endif
- comp = ctxt->comp;
- if (comp->last < 0) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathRunEval: last is less than zero\n");
- return(-1);
- }
- if (toBool)
- return(xmlXPathCompOpEvalToBoolean(ctxt,
- &comp->steps[comp->last], 0));
- else
- xmlXPathCompOpEval(ctxt, &comp->steps[comp->last]);
-
- return(0);
-}
-
-/************************************************************************
- * *
- * Public interfaces *
- * *
- ************************************************************************/
-
-/**
- * xmlXPathEvalPredicate:
- * @ctxt: the XPath context
- * @res: the Predicate Expression evaluation result
- *
- * Evaluate a predicate result for the current node.
- * A PredicateExpr is evaluated by evaluating the Expr and converting
- * the result to a boolean. If the result is a number, the result will
- * be converted to true if the number is equal to the position of the
- * context node in the context node list (as returned by the position
- * function) and will be converted to false otherwise; if the result
- * is not a number, then the result will be converted as if by a call
- * to the boolean function.
- *
- * Returns 1 if predicate is true, 0 otherwise
- */
-int
-xmlXPathEvalPredicate(xmlXPathContextPtr ctxt, xmlXPathObjectPtr res) {
- if ((ctxt == NULL) || (res == NULL)) return(0);
- switch (res->type) {
- case XPATH_BOOLEAN:
- return(res->boolval);
- case XPATH_NUMBER:
- return(res->floatval == ctxt->proximityPosition);
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- if (res->nodesetval == NULL)
- return(0);
- return(res->nodesetval->nodeNr != 0);
- case XPATH_STRING:
- return((res->stringval != NULL) &&
- (xmlStrlen(res->stringval) != 0));
- default:
- STRANGE
- }
- return(0);
-}
-
-/**
- * xmlXPathEvaluatePredicateResult:
- * @ctxt: the XPath Parser context
- * @res: the Predicate Expression evaluation result
- *
- * Evaluate a predicate result for the current node.
- * A PredicateExpr is evaluated by evaluating the Expr and converting
- * the result to a boolean. If the result is a number, the result will
- * be converted to true if the number is equal to the position of the
- * context node in the context node list (as returned by the position
- * function) and will be converted to false otherwise; if the result
- * is not a number, then the result will be converted as if by a call
- * to the boolean function.
- *
- * Returns 1 if predicate is true, 0 otherwise
- */
-int
-xmlXPathEvaluatePredicateResult(xmlXPathParserContextPtr ctxt,
- xmlXPathObjectPtr res) {
- if ((ctxt == NULL) || (res == NULL)) return(0);
- switch (res->type) {
- case XPATH_BOOLEAN:
- return(res->boolval);
- case XPATH_NUMBER:
-#if defined(__BORLANDC__) || (defined(_MSC_VER) && (_MSC_VER == 1200))
- return((res->floatval == ctxt->context->proximityPosition) &&
- (!xmlXPathIsNaN(res->floatval))); /* MSC pbm Mark Vakoc !*/
-#else
- return(res->floatval == ctxt->context->proximityPosition);
-#endif
- case XPATH_NODESET:
- case XPATH_XSLT_TREE:
- if (res->nodesetval == NULL)
- return(0);
- return(res->nodesetval->nodeNr != 0);
- case XPATH_STRING:
- return((res->stringval != NULL) && (res->stringval[0] != 0));
-#ifdef LIBXML_XPTR_ENABLED
- case XPATH_LOCATIONSET:{
- xmlLocationSetPtr ptr = res->user;
- if (ptr == NULL)
- return(0);
- return (ptr->locNr != 0);
- }
-#endif
- default:
- STRANGE
- }
- return(0);
-}
-
-#ifdef XPATH_STREAMING
-/**
- * xmlXPathTryStreamCompile:
- * @ctxt: an XPath context
- * @str: the XPath expression
- *
- * Try to compile the XPath expression as a streamable subset.
- *
- * Returns the compiled expression or NULL if failed to compile.
- */
-static xmlXPathCompExprPtr
-xmlXPathTryStreamCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
- /*
- * Optimization: use streaming patterns when the XPath expression can
- * be compiled to a stream lookup
- */
- xmlPatternPtr stream;
- xmlXPathCompExprPtr comp;
- xmlDictPtr dict = NULL;
- const xmlChar **namespaces = NULL;
- xmlNsPtr ns;
- int i, j;
-
- if ((!xmlStrchr(str, '[')) && (!xmlStrchr(str, '(')) &&
- (!xmlStrchr(str, '@'))) {
- const xmlChar *tmp;
-
- /*
- * We don't try to handle expressions using the verbose axis
- * specifiers ("::"), just the simplied form at this point.
- * Additionally, if there is no list of namespaces available and
- * there's a ":" in the expression, indicating a prefixed QName,
- * then we won't try to compile either. xmlPatterncompile() needs
- * to have a list of namespaces at compilation time in order to
- * compile prefixed name tests.
- */
- tmp = xmlStrchr(str, ':');
- if ((tmp != NULL) &&
- ((ctxt == NULL) || (ctxt->nsNr == 0) || (tmp[1] == ':')))
- return(NULL);
-
- if (ctxt != NULL) {
- dict = ctxt->dict;
- if (ctxt->nsNr > 0) {
- namespaces = xmlMalloc(2 * (ctxt->nsNr + 1) * sizeof(xmlChar*));
- if (namespaces == NULL) {
- xmlXPathErrMemory(ctxt, "allocating namespaces array\n");
- return(NULL);
- }
- for (i = 0, j = 0; (j < ctxt->nsNr); j++) {
- ns = ctxt->namespaces[j];
- namespaces[i++] = ns->href;
- namespaces[i++] = ns->prefix;
- }
- namespaces[i++] = NULL;
- namespaces[i] = NULL;
- }
- }
-
- stream = xmlPatterncompile(str, dict, XML_PATTERN_XPATH,
- &namespaces[0]);
- if (namespaces != NULL) {
- xmlFree((xmlChar **)namespaces);
- }
- if ((stream != NULL) && (xmlPatternStreamable(stream) == 1)) {
- comp = xmlXPathNewCompExpr();
- if (comp == NULL) {
- xmlXPathErrMemory(ctxt, "allocating streamable expression\n");
- return(NULL);
- }
- comp->stream = stream;
- comp->dict = dict;
- if (comp->dict)
- xmlDictReference(comp->dict);
- return(comp);
- }
- xmlFreePattern(stream);
- }
- return(NULL);
-}
-#endif /* XPATH_STREAMING */
-
-static void
-xmlXPathOptimizeExpression(xmlXPathCompExprPtr comp, xmlXPathStepOpPtr op)
-{
- /*
- * Try to rewrite "descendant-or-self::node()/foo" to an optimized
- * internal representation.
- */
-
- if ((op->op == XPATH_OP_COLLECT /* 11 */) &&
- (op->ch1 != -1) &&
- (op->ch2 == -1 /* no predicate */))
- {
- xmlXPathStepOpPtr prevop = &comp->steps[op->ch1];
-
- if ((prevop->op == XPATH_OP_COLLECT /* 11 */) &&
- ((xmlXPathAxisVal) prevop->value ==
- AXIS_DESCENDANT_OR_SELF) &&
- (prevop->ch2 == -1) &&
- ((xmlXPathTestVal) prevop->value2 == NODE_TEST_TYPE) &&
- ((xmlXPathTypeVal) prevop->value3 == NODE_TYPE_NODE))
- {
- /*
- * This is a "descendant-or-self::node()" without predicates.
- * Try to eliminate it.
- */
-
- switch ((xmlXPathAxisVal) op->value) {
- case AXIS_CHILD:
- case AXIS_DESCENDANT:
- /*
- * Convert "descendant-or-self::node()/child::" or
- * "descendant-or-self::node()/descendant::" to
- * "descendant::"
- */
- op->ch1 = prevop->ch1;
- op->value = AXIS_DESCENDANT;
- break;
- case AXIS_SELF:
- case AXIS_DESCENDANT_OR_SELF:
- /*
- * Convert "descendant-or-self::node()/self::" or
- * "descendant-or-self::node()/descendant-or-self::" to
- * to "descendant-or-self::"
- */
- op->ch1 = prevop->ch1;
- op->value = AXIS_DESCENDANT_OR_SELF;
- break;
- default:
- break;
- }
- }
- }
-
- /* OP_VALUE has invalid ch1. */
- if (op->op == XPATH_OP_VALUE)
- return;
-
- /* Recurse */
- if (op->ch1 != -1)
- xmlXPathOptimizeExpression(comp, &comp->steps[op->ch1]);
- if (op->ch2 != -1)
- xmlXPathOptimizeExpression(comp, &comp->steps[op->ch2]);
-}
-
-/**
- * xmlXPathCtxtCompile:
- * @ctxt: an XPath context
- * @str: the XPath expression
- *
- * Compile an XPath expression
- *
- * Returns the xmlXPathCompExprPtr resulting from the compilation or NULL.
- * the caller has to free the object.
- */
-xmlXPathCompExprPtr
-xmlXPathCtxtCompile(xmlXPathContextPtr ctxt, const xmlChar *str) {
- xmlXPathParserContextPtr pctxt;
- xmlXPathCompExprPtr comp;
-
-#ifdef XPATH_STREAMING
- comp = xmlXPathTryStreamCompile(ctxt, str);
- if (comp != NULL)
- return(comp);
-#endif
-
- xmlXPathInit();
-
- pctxt = xmlXPathNewParserContext(str, ctxt);
- if (pctxt == NULL)
- return NULL;
- xmlXPathCompileExpr(pctxt, 1);
-
- if( pctxt->error != XPATH_EXPRESSION_OK )
- {
- xmlXPathFreeParserContext(pctxt);
- return(NULL);
- }
-
- if (*pctxt->cur != 0) {
- /*
- * aleksey: in some cases this line prints *second* error message
- * (see bug #78858) and probably this should be fixed.
- * However, we are not sure that all error messages are printed
- * out in other places. It's not critical so we leave it as-is for now
- */
- xmlXPatherror(pctxt, __FILE__, __LINE__, XPATH_EXPR_ERROR);
- comp = NULL;
- } else {
- comp = pctxt->comp;
- pctxt->comp = NULL;
- }
- xmlXPathFreeParserContext(pctxt);
-
- if (comp != NULL) {
- comp->expr = xmlStrdup(str);
-#ifdef DEBUG_EVAL_COUNTS
- comp->string = xmlStrdup(str);
- comp->nb = 0;
-#endif
- if ((comp->nbStep > 1) && (comp->last >= 0)) {
- xmlXPathOptimizeExpression(comp, &comp->steps[comp->last]);
- }
- }
- return(comp);
-}
-
-/**
- * xmlXPathCompile:
- * @str: the XPath expression
- *
- * Compile an XPath expression
- *
- * Returns the xmlXPathCompExprPtr resulting from the compilation or NULL.
- * the caller has to free the object.
- */
-xmlXPathCompExprPtr
-xmlXPathCompile(const xmlChar *str) {
- return(xmlXPathCtxtCompile(NULL, str));
-}
-
-/**
- * xmlXPathCompiledEvalInternal:
- * @comp: the compiled XPath expression
- * @ctxt: the XPath context
- * @resObj: the resulting XPath object or NULL
- * @toBool: 1 if only a boolean result is requested
- *
- * Evaluate the Precompiled XPath expression in the given context.
- * The caller has to free @resObj.
- *
- * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
- * the caller has to free the object.
- */
-static int
-xmlXPathCompiledEvalInternal(xmlXPathCompExprPtr comp,
- xmlXPathContextPtr ctxt,
- xmlXPathObjectPtr *resObjPtr,
- int toBool)
-{
- xmlXPathParserContextPtr pctxt;
- xmlXPathObjectPtr resObj;
-#ifndef LIBXML_THREAD_ENABLED
- static int reentance = 0;
-#endif
- int res;
-
- CHECK_CTXT_NEG(ctxt)
-
- if (comp == NULL)
- return(-1);
- xmlXPathInit();
-
-#ifndef LIBXML_THREAD_ENABLED
- reentance++;
- if (reentance > 1)
- xmlXPathDisableOptimizer = 1;
-#endif
-
-#ifdef DEBUG_EVAL_COUNTS
- comp->nb++;
- if ((comp->string != NULL) && (comp->nb > 100)) {
- fprintf(stderr, "100 x %s\n", comp->string);
- comp->nb = 0;
- }
-#endif
- pctxt = xmlXPathCompParserContext(comp, ctxt);
- res = xmlXPathRunEval(pctxt, toBool);
-
- if (pctxt->error != XPATH_EXPRESSION_OK) {
- resObj = NULL;
- } else {
- resObj = valuePop(pctxt);
- if (resObj == NULL) {
- if (!toBool)
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompiledEval: No result on the stack.\n");
- } else if (pctxt->valueNr > 0) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompiledEval: %d object(s) left on the stack.\n",
- pctxt->valueNr);
- }
- }
-
- if (resObjPtr)
- *resObjPtr = resObj;
- else
- xmlXPathReleaseObject(ctxt, resObj);
-
- pctxt->comp = NULL;
- xmlXPathFreeParserContext(pctxt);
-#ifndef LIBXML_THREAD_ENABLED
- reentance--;
-#endif
-
- return(res);
-}
-
-/**
- * xmlXPathCompiledEval:
- * @comp: the compiled XPath expression
- * @ctx: the XPath context
- *
- * Evaluate the Precompiled XPath expression in the given context.
- *
- * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
- * the caller has to free the object.
- */
-xmlXPathObjectPtr
-xmlXPathCompiledEval(xmlXPathCompExprPtr comp, xmlXPathContextPtr ctx)
-{
- xmlXPathObjectPtr res = NULL;
-
- xmlXPathCompiledEvalInternal(comp, ctx, &res, 0);
- return(res);
-}
-
-/**
- * xmlXPathCompiledEvalToBoolean:
- * @comp: the compiled XPath expression
- * @ctxt: the XPath context
- *
- * Applies the XPath boolean() function on the result of the given
- * compiled expression.
- *
- * Returns 1 if the expression evaluated to true, 0 if to false and
- * -1 in API and internal errors.
- */
-int
-xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
- xmlXPathContextPtr ctxt)
-{
- return(xmlXPathCompiledEvalInternal(comp, ctxt, NULL, 1));
-}
-
-/**
- * xmlXPathEvalExpr:
- * @ctxt: the XPath Parser context
- *
- * Parse and evaluate an XPath expression in the given context,
- * then push the result on the context stack
- */
-void
-xmlXPathEvalExpr(xmlXPathParserContextPtr ctxt) {
-#ifdef XPATH_STREAMING
- xmlXPathCompExprPtr comp;
-#endif
-
- if (ctxt == NULL) return;
-
-#ifdef XPATH_STREAMING
- comp = xmlXPathTryStreamCompile(ctxt->context, ctxt->base);
- if (comp != NULL) {
- if (ctxt->comp != NULL)
- xmlXPathFreeCompExpr(ctxt->comp);
- ctxt->comp = comp;
- } else
-#endif
- {
- xmlXPathCompileExpr(ctxt, 1);
- CHECK_ERROR;
-
- /* Check for trailing characters. */
- if (*ctxt->cur != 0)
- XP_ERROR(XPATH_EXPR_ERROR);
-
- if ((ctxt->comp->nbStep > 1) && (ctxt->comp->last >= 0))
- xmlXPathOptimizeExpression(ctxt->comp,
- &ctxt->comp->steps[ctxt->comp->last]);
- }
-
- xmlXPathRunEval(ctxt, 0);
-}
-
-/**
- * xmlXPathEval:
- * @str: the XPath expression
- * @ctx: the XPath context
- *
- * Evaluate the XPath Location Path in the given context.
- *
- * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
- * the caller has to free the object.
- */
-xmlXPathObjectPtr
-xmlXPathEval(const xmlChar *str, xmlXPathContextPtr ctx) {
- xmlXPathParserContextPtr ctxt;
- xmlXPathObjectPtr res;
-
- CHECK_CTXT(ctx)
-
- xmlXPathInit();
-
- ctxt = xmlXPathNewParserContext(str, ctx);
- if (ctxt == NULL)
- return NULL;
- xmlXPathEvalExpr(ctxt);
-
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- res = NULL;
- } else {
- res = valuePop(ctxt);
- if (res == NULL) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompiledEval: No result on the stack.\n");
- } else if (ctxt->valueNr > 0) {
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPathCompiledEval: %d object(s) left on the stack.\n",
- ctxt->valueNr);
- }
- }
-
- xmlXPathFreeParserContext(ctxt);
- return(res);
-}
-
-/**
- * xmlXPathSetContextNode:
- * @node: the node to to use as the context node
- * @ctx: the XPath context
- *
- * Sets 'node' as the context node. The node must be in the same
- * document as that associated with the context.
- *
- * Returns -1 in case of error or 0 if successful
- */
-int
-xmlXPathSetContextNode(xmlNodePtr node, xmlXPathContextPtr ctx) {
- if ((node == NULL) || (ctx == NULL))
- return(-1);
-
- if (node->doc == ctx->doc) {
- ctx->node = node;
- return(0);
- }
- return(-1);
-}
-
-/**
- * xmlXPathNodeEval:
- * @node: the node to to use as the context node
- * @str: the XPath expression
- * @ctx: the XPath context
- *
- * Evaluate the XPath Location Path in the given context. The node 'node'
- * is set as the context node. The context node is not restored.
- *
- * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
- * the caller has to free the object.
- */
-xmlXPathObjectPtr
-xmlXPathNodeEval(xmlNodePtr node, const xmlChar *str, xmlXPathContextPtr ctx) {
- if (str == NULL)
- return(NULL);
- if (xmlXPathSetContextNode(node, ctx) < 0)
- return(NULL);
- return(xmlXPathEval(str, ctx));
-}
-
-/**
- * xmlXPathEvalExpression:
- * @str: the XPath expression
- * @ctxt: the XPath context
- *
- * Alias for xmlXPathEval.
- */
-xmlXPathObjectPtr
-xmlXPathEvalExpression(const xmlChar *str, xmlXPathContextPtr ctxt) {
- return(xmlXPathEval(str, ctxt));
-}
-
-/************************************************************************
- * *
- * Extra functions not pertaining to the XPath spec *
- * *
- ************************************************************************/
-/**
- * xmlXPathEscapeUriFunction:
- * @ctxt: the XPath Parser context
- * @nargs: the number of arguments
- *
- * Implement the escape-uri() XPath function
- * string escape-uri(string $str, bool $escape-reserved)
- *
- * This function applies the URI escaping rules defined in section 2 of [RFC
- * 2396] to the string supplied as $uri-part, which typically represents all
- * or part of a URI. The effect of the function is to replace any special
- * character in the string by an escape sequence of the form %xx%yy...,
- * where xxyy... is the hexadecimal representation of the octets used to
- * represent the character in UTF-8.
- *
- * The set of characters that are escaped depends on the setting of the
- * boolean argument $escape-reserved.
- *
- * If $escape-reserved is true, all characters are escaped other than lower
- * case letters a-z, upper case letters A-Z, digits 0-9, and the characters
- * referred to in [RFC 2396] as "marks": specifically, "-" | "_" | "." | "!"
- * | "~" | "*" | "'" | "(" | ")". The "%" character itself is escaped only
- * if it is not followed by two hexadecimal digits (that is, 0-9, a-f, and
- * A-F).
- *
- * If $escape-reserved is false, the behavior differs in that characters
- * referred to in [RFC 2396] as reserved characters are not escaped. These
- * characters are ";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ",".
- *
- * [RFC 2396] does not define whether escaped URIs should use lower case or
- * upper case for hexadecimal digits. To ensure that escaped URIs can be
- * compared using string comparison functions, this function must always use
- * the upper-case letters A-F.
- *
- * Generally, $escape-reserved should be set to true when escaping a string
- * that is to form a single part of a URI, and to false when escaping an
- * entire URI or URI reference.
- *
- * In the case of non-ascii characters, the string is encoded according to
- * utf-8 and then converted according to RFC 2396.
- *
- * Examples
- * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), true())
- * returns "gopher%3A%2F%2Fspinaltap.micro.umn.edu%2F00%2FWeather%2FCalifornia%2FLos%20Angeles%23ocean"
- * xf:escape-uri ("gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles#ocean"), false())
- * returns "gopher://spinaltap.micro.umn.edu/00/Weather/California/Los%20Angeles%23ocean"
- *
- */
-static void
-xmlXPathEscapeUriFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr str;
- int escape_reserved;
- xmlBufPtr target;
- xmlChar *cptr;
- xmlChar escape[4];
-
- CHECK_ARITY(2);
-
- escape_reserved = xmlXPathPopBoolean(ctxt);
-
- CAST_TO_STRING;
- str = valuePop(ctxt);
-
- target = xmlBufCreate();
-
- escape[0] = '%';
- escape[3] = 0;
-
- if (target) {
- for (cptr = str->stringval; *cptr; cptr++) {
- if ((*cptr >= 'A' && *cptr <= 'Z') ||
- (*cptr >= 'a' && *cptr <= 'z') ||
- (*cptr >= '0' && *cptr <= '9') ||
- *cptr == '-' || *cptr == '_' || *cptr == '.' ||
- *cptr == '!' || *cptr == '~' || *cptr == '*' ||
- *cptr == '\''|| *cptr == '(' || *cptr == ')' ||
- (*cptr == '%' &&
- ((cptr[1] >= 'A' && cptr[1] <= 'F') ||
- (cptr[1] >= 'a' && cptr[1] <= 'f') ||
- (cptr[1] >= '0' && cptr[1] <= '9')) &&
- ((cptr[2] >= 'A' && cptr[2] <= 'F') ||
- (cptr[2] >= 'a' && cptr[2] <= 'f') ||
- (cptr[2] >= '0' && cptr[2] <= '9'))) ||
- (!escape_reserved &&
- (*cptr == ';' || *cptr == '/' || *cptr == '?' ||
- *cptr == ':' || *cptr == '@' || *cptr == '&' ||
- *cptr == '=' || *cptr == '+' || *cptr == '$' ||
- *cptr == ','))) {
- xmlBufAdd(target, cptr, 1);
- } else {
- if ((*cptr >> 4) < 10)
- escape[1] = '0' + (*cptr >> 4);
- else
- escape[1] = 'A' - 10 + (*cptr >> 4);
- if ((*cptr & 0xF) < 10)
- escape[2] = '0' + (*cptr & 0xF);
- else
- escape[2] = 'A' - 10 + (*cptr & 0xF);
-
- xmlBufAdd(target, &escape[0], 3);
- }
- }
- }
- valuePush(ctxt, xmlXPathCacheNewString(ctxt->context,
- xmlBufContent(target)));
- xmlBufFree(target);
- xmlXPathReleaseObject(ctxt->context, str);
-}
-
-/**
- * xmlXPathRegisterAllFunctions:
- * @ctxt: the XPath context
- *
- * Registers all default XPath functions in this context
- */
-void
-xmlXPathRegisterAllFunctions(xmlXPathContextPtr ctxt)
-{
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"boolean",
- xmlXPathBooleanFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"ceiling",
- xmlXPathCeilingFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"count",
- xmlXPathCountFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"concat",
- xmlXPathConcatFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"contains",
- xmlXPathContainsFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"id",
- xmlXPathIdFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"false",
- xmlXPathFalseFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"floor",
- xmlXPathFloorFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"last",
- xmlXPathLastFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"lang",
- xmlXPathLangFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"local-name",
- xmlXPathLocalNameFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"not",
- xmlXPathNotFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"name",
- xmlXPathNameFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"namespace-uri",
- xmlXPathNamespaceURIFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"normalize-space",
- xmlXPathNormalizeFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"number",
- xmlXPathNumberFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"position",
- xmlXPathPositionFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"round",
- xmlXPathRoundFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"string",
- xmlXPathStringFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"string-length",
- xmlXPathStringLengthFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"starts-with",
- xmlXPathStartsWithFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"substring",
- xmlXPathSubstringFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"substring-before",
- xmlXPathSubstringBeforeFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"substring-after",
- xmlXPathSubstringAfterFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"sum",
- xmlXPathSumFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"true",
- xmlXPathTrueFunction);
- xmlXPathRegisterFunc(ctxt, (const xmlChar *)"translate",
- xmlXPathTranslateFunction);
-
- xmlXPathRegisterFuncNS(ctxt, (const xmlChar *)"escape-uri",
- (const xmlChar *)"http://www.w3.org/2002/08/xquery-functions",
- xmlXPathEscapeUriFunction);
-}
-
-#endif /* LIBXML_XPATH_ENABLED */
-#define bottom_xpath
-#include "elfgcchack.h"
diff --git a/external/libxml2_android/jni/libxml2/xpointer.c b/external/libxml2_android/jni/libxml2/xpointer.c
deleted file mode 100644
index 1413868e..00000000
--- a/external/libxml2_android/jni/libxml2/xpointer.c
+++ /dev/null
@@ -1,2941 +0,0 @@
-/*
- * xpointer.c : Code to handle XML Pointer
- *
- * Base implementation was made accordingly to
- * W3C Candidate Recommendation 7 June 2000
- * http://www.w3.org/TR/2000/CR-xptr-20000607
- *
- * Added support for the element() scheme described in:
- * W3C Proposed Recommendation 13 November 2002
- * http://www.w3.org/TR/2002/PR-xptr-element-20021113/
- *
- * See Copyright for the status of this software.
- *
- * daniel@veillard.com
- */
-
-#define IN_LIBXML
-#include "libxml.h"
-
-/*
- * TODO: better handling of error cases, the full expression should
- * be parsed beforehand instead of a progressive evaluation
- * TODO: Access into entities references are not supported now ...
- * need a start to be able to pop out of entities refs since
- * parent is the endity declaration, not the ref.
- */
-
-#include <string.h>
-#include <libxml/xpointer.h>
-#include <libxml/xmlmemory.h>
-#include <libxml/parserInternals.h>
-#include <libxml/uri.h>
-#include <libxml/xpath.h>
-#include <libxml/xpathInternals.h>
-#include <libxml/xmlerror.h>
-#include <libxml/globals.h>
-
-#ifdef LIBXML_XPTR_ENABLED
-
-/* Add support of the xmlns() xpointer scheme to initialize the namespaces */
-#define XPTR_XMLNS_SCHEME
-
-/* #define DEBUG_RANGES */
-#ifdef DEBUG_RANGES
-#ifdef LIBXML_DEBUG_ENABLED
-#include <libxml/debugXML.h>
-#endif
-#endif
-
-#define TODO \
- xmlGenericError(xmlGenericErrorContext, \
- "Unimplemented block at %s:%d\n", \
- __FILE__, __LINE__);
-
-#define STRANGE \
- xmlGenericError(xmlGenericErrorContext, \
- "Internal error at %s:%d\n", \
- __FILE__, __LINE__);
-
-/************************************************************************
- * *
- * Some factorized error routines *
- * *
- ************************************************************************/
-
-/**
- * xmlXPtrErrMemory:
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void
-xmlXPtrErrMemory(const char *extra)
-{
- __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_XPOINTER,
- XML_ERR_NO_MEMORY, XML_ERR_ERROR, NULL, 0, extra,
- NULL, NULL, 0, 0,
- "Memory allocation failed : %s\n", extra);
-}
-
-/**
- * xmlXPtrErr:
- * @ctxt: an XPTR evaluation context
- * @extra: extra informations
- *
- * Handle a redefinition of attribute error
- */
-static void LIBXML_ATTR_FORMAT(3,0)
-xmlXPtrErr(xmlXPathParserContextPtr ctxt, int error,
- const char * msg, const xmlChar *extra)
-{
- if (ctxt != NULL)
- ctxt->error = error;
- if ((ctxt == NULL) || (ctxt->context == NULL)) {
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, NULL, XML_FROM_XPOINTER, error,
- XML_ERR_ERROR, NULL, 0,
- (const char *) extra, NULL, NULL, 0, 0,
- msg, extra);
- return;
- }
-
- /* cleanup current last error */
- xmlResetError(&ctxt->context->lastError);
-
- ctxt->context->lastError.domain = XML_FROM_XPOINTER;
- ctxt->context->lastError.code = error;
- ctxt->context->lastError.level = XML_ERR_ERROR;
- ctxt->context->lastError.str1 = (char *) xmlStrdup(ctxt->base);
- ctxt->context->lastError.int1 = ctxt->cur - ctxt->base;
- ctxt->context->lastError.node = ctxt->context->debugNode;
- if (ctxt->context->error != NULL) {
- ctxt->context->error(ctxt->context->userData,
- &ctxt->context->lastError);
- } else {
- __xmlRaiseError(NULL, NULL, NULL,
- NULL, ctxt->context->debugNode, XML_FROM_XPOINTER,
- error, XML_ERR_ERROR, NULL, 0,
- (const char *) extra, (const char *) ctxt->base, NULL,
- ctxt->cur - ctxt->base, 0,
- msg, extra);
- }
-}
-
-/************************************************************************
- * *
- * A few helper functions for child sequences *
- * *
- ************************************************************************/
-/* xmlXPtrAdvanceNode is a private function, but used by xinclude.c */
-xmlNodePtr xmlXPtrAdvanceNode(xmlNodePtr cur, int *level);
-/**
- * xmlXPtrGetArity:
- * @cur: the node
- *
- * Returns the number of child for an element, -1 in case of error
- */
-static int
-xmlXPtrGetArity(xmlNodePtr cur) {
- int i;
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return(-1);
- cur = cur->children;
- for (i = 0;cur != NULL;cur = cur->next) {
- if ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- i++;
- }
- }
- return(i);
-}
-
-/**
- * xmlXPtrGetIndex:
- * @cur: the node
- *
- * Returns the index of the node in its parent children list, -1
- * in case of error
- */
-static int
-xmlXPtrGetIndex(xmlNodePtr cur) {
- int i;
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return(-1);
- for (i = 1;cur != NULL;cur = cur->prev) {
- if ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- i++;
- }
- }
- return(i);
-}
-
-/**
- * xmlXPtrGetNthChild:
- * @cur: the node
- * @no: the child number
- *
- * Returns the @no'th element child of @cur or NULL
- */
-static xmlNodePtr
-xmlXPtrGetNthChild(xmlNodePtr cur, int no) {
- int i;
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return(cur);
- cur = cur->children;
- for (i = 0;i <= no;cur = cur->next) {
- if (cur == NULL)
- return(cur);
- if ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- i++;
- if (i == no)
- break;
- }
- }
- return(cur);
-}
-
-/************************************************************************
- * *
- * Handling of XPointer specific types *
- * *
- ************************************************************************/
-
-/**
- * xmlXPtrCmpPoints:
- * @node1: the first node
- * @index1: the first index
- * @node2: the second node
- * @index2: the second index
- *
- * Compare two points w.r.t document order
- *
- * Returns -2 in case of error 1 if first point < second point, 0 if
- * that's the same point, -1 otherwise
- */
-static int
-xmlXPtrCmpPoints(xmlNodePtr node1, int index1, xmlNodePtr node2, int index2) {
- if ((node1 == NULL) || (node2 == NULL))
- return(-2);
- /*
- * a couple of optimizations which will avoid computations in most cases
- */
- if (node1 == node2) {
- if (index1 < index2)
- return(1);
- if (index1 > index2)
- return(-1);
- return(0);
- }
- return(xmlXPathCmpNodes(node1, node2));
-}
-
-/**
- * xmlXPtrNewPoint:
- * @node: the xmlNodePtr
- * @indx: the indx within the node
- *
- * Create a new xmlXPathObjectPtr of type point
- *
- * Returns the newly created object.
- */
-static xmlXPathObjectPtr
-xmlXPtrNewPoint(xmlNodePtr node, int indx) {
- xmlXPathObjectPtr ret;
-
- if (node == NULL)
- return(NULL);
- if (indx < 0)
- return(NULL);
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPtrErrMemory("allocating point");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_POINT;
- ret->user = (void *) node;
- ret->index = indx;
- return(ret);
-}
-
-/**
- * xmlXPtrRangeCheckOrder:
- * @range: an object range
- *
- * Make sure the points in the range are in the right order
- */
-static void
-xmlXPtrRangeCheckOrder(xmlXPathObjectPtr range) {
- int tmp;
- xmlNodePtr tmp2;
- if (range == NULL)
- return;
- if (range->type != XPATH_RANGE)
- return;
- if (range->user2 == NULL)
- return;
- tmp = xmlXPtrCmpPoints(range->user, range->index,
- range->user2, range->index2);
- if (tmp == -1) {
- tmp2 = range->user;
- range->user = range->user2;
- range->user2 = tmp2;
- tmp = range->index;
- range->index = range->index2;
- range->index2 = tmp;
- }
-}
-
-/**
- * xmlXPtrRangesEqual:
- * @range1: the first range
- * @range2: the second range
- *
- * Compare two ranges
- *
- * Returns 1 if equal, 0 otherwise
- */
-static int
-xmlXPtrRangesEqual(xmlXPathObjectPtr range1, xmlXPathObjectPtr range2) {
- if (range1 == range2)
- return(1);
- if ((range1 == NULL) || (range2 == NULL))
- return(0);
- if (range1->type != range2->type)
- return(0);
- if (range1->type != XPATH_RANGE)
- return(0);
- if (range1->user != range2->user)
- return(0);
- if (range1->index != range2->index)
- return(0);
- if (range1->user2 != range2->user2)
- return(0);
- if (range1->index2 != range2->index2)
- return(0);
- return(1);
-}
-
-/**
- * xmlXPtrNewRangeInternal:
- * @start: the starting node
- * @startindex: the start index
- * @end: the ending point
- * @endindex: the ending index
- *
- * Internal function to create a new xmlXPathObjectPtr of type range
- *
- * Returns the newly created object.
- */
-static xmlXPathObjectPtr
-xmlXPtrNewRangeInternal(xmlNodePtr start, int startindex,
- xmlNodePtr end, int endindex) {
- xmlXPathObjectPtr ret;
-
- /*
- * Namespace nodes must be copied (see xmlXPathNodeSetDupNs).
- * Disallow them for now.
- */
- if ((start != NULL) && (start->type == XML_NAMESPACE_DECL))
- return(NULL);
- if ((end != NULL) && (end->type == XML_NAMESPACE_DECL))
- return(NULL);
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPtrErrMemory("allocating range");
- return(NULL);
- }
- memset(ret, 0, sizeof(xmlXPathObject));
- ret->type = XPATH_RANGE;
- ret->user = start;
- ret->index = startindex;
- ret->user2 = end;
- ret->index2 = endindex;
- return(ret);
-}
-
-/**
- * xmlXPtrNewRange:
- * @start: the starting node
- * @startindex: the start index
- * @end: the ending point
- * @endindex: the ending index
- *
- * Create a new xmlXPathObjectPtr of type range
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRange(xmlNodePtr start, int startindex,
- xmlNodePtr end, int endindex) {
- xmlXPathObjectPtr ret;
-
- if (start == NULL)
- return(NULL);
- if (end == NULL)
- return(NULL);
- if (startindex < 0)
- return(NULL);
- if (endindex < 0)
- return(NULL);
-
- ret = xmlXPtrNewRangeInternal(start, startindex, end, endindex);
- xmlXPtrRangeCheckOrder(ret);
- return(ret);
-}
-
-/**
- * xmlXPtrNewRangePoints:
- * @start: the starting point
- * @end: the ending point
- *
- * Create a new xmlXPathObjectPtr of type range using 2 Points
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangePoints(xmlXPathObjectPtr start, xmlXPathObjectPtr end) {
- xmlXPathObjectPtr ret;
-
- if (start == NULL)
- return(NULL);
- if (end == NULL)
- return(NULL);
- if (start->type != XPATH_POINT)
- return(NULL);
- if (end->type != XPATH_POINT)
- return(NULL);
-
- ret = xmlXPtrNewRangeInternal(start->user, start->index, end->user,
- end->index);
- xmlXPtrRangeCheckOrder(ret);
- return(ret);
-}
-
-/**
- * xmlXPtrNewRangePointNode:
- * @start: the starting point
- * @end: the ending node
- *
- * Create a new xmlXPathObjectPtr of type range from a point to a node
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangePointNode(xmlXPathObjectPtr start, xmlNodePtr end) {
- xmlXPathObjectPtr ret;
-
- if (start == NULL)
- return(NULL);
- if (end == NULL)
- return(NULL);
- if (start->type != XPATH_POINT)
- return(NULL);
-
- ret = xmlXPtrNewRangeInternal(start->user, start->index, end, -1);
- xmlXPtrRangeCheckOrder(ret);
- return(ret);
-}
-
-/**
- * xmlXPtrNewRangeNodePoint:
- * @start: the starting node
- * @end: the ending point
- *
- * Create a new xmlXPathObjectPtr of type range from a node to a point
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangeNodePoint(xmlNodePtr start, xmlXPathObjectPtr end) {
- xmlXPathObjectPtr ret;
-
- if (start == NULL)
- return(NULL);
- if (end == NULL)
- return(NULL);
- if (start->type != XPATH_POINT)
- return(NULL);
- if (end->type != XPATH_POINT)
- return(NULL);
-
- ret = xmlXPtrNewRangeInternal(start, -1, end->user, end->index);
- xmlXPtrRangeCheckOrder(ret);
- return(ret);
-}
-
-/**
- * xmlXPtrNewRangeNodes:
- * @start: the starting node
- * @end: the ending node
- *
- * Create a new xmlXPathObjectPtr of type range using 2 nodes
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangeNodes(xmlNodePtr start, xmlNodePtr end) {
- xmlXPathObjectPtr ret;
-
- if (start == NULL)
- return(NULL);
- if (end == NULL)
- return(NULL);
-
- ret = xmlXPtrNewRangeInternal(start, -1, end, -1);
- xmlXPtrRangeCheckOrder(ret);
- return(ret);
-}
-
-/**
- * xmlXPtrNewCollapsedRange:
- * @start: the starting and ending node
- *
- * Create a new xmlXPathObjectPtr of type range using a single nodes
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewCollapsedRange(xmlNodePtr start) {
- xmlXPathObjectPtr ret;
-
- if (start == NULL)
- return(NULL);
-
- ret = xmlXPtrNewRangeInternal(start, -1, NULL, -1);
- return(ret);
-}
-
-/**
- * xmlXPtrNewRangeNodeObject:
- * @start: the starting node
- * @end: the ending object
- *
- * Create a new xmlXPathObjectPtr of type range from a not to an object
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewRangeNodeObject(xmlNodePtr start, xmlXPathObjectPtr end) {
- xmlNodePtr endNode;
- int endIndex;
- xmlXPathObjectPtr ret;
-
- if (start == NULL)
- return(NULL);
- if (end == NULL)
- return(NULL);
- switch (end->type) {
- case XPATH_POINT:
- endNode = end->user;
- endIndex = end->index;
- break;
- case XPATH_RANGE:
- endNode = end->user2;
- endIndex = end->index2;
- break;
- case XPATH_NODESET:
- /*
- * Empty set ...
- */
- if ((end->nodesetval == NULL) || (end->nodesetval->nodeNr <= 0))
- return(NULL);
- endNode = end->nodesetval->nodeTab[end->nodesetval->nodeNr - 1];
- endIndex = -1;
- break;
- default:
- /* TODO */
- return(NULL);
- }
-
- ret = xmlXPtrNewRangeInternal(start, -1, endNode, endIndex);
- xmlXPtrRangeCheckOrder(ret);
- return(ret);
-}
-
-#define XML_RANGESET_DEFAULT 10
-
-/**
- * xmlXPtrLocationSetCreate:
- * @val: an initial xmlXPathObjectPtr, or NULL
- *
- * Create a new xmlLocationSetPtr of type double and of value @val
- *
- * Returns the newly created object.
- */
-xmlLocationSetPtr
-xmlXPtrLocationSetCreate(xmlXPathObjectPtr val) {
- xmlLocationSetPtr ret;
-
- ret = (xmlLocationSetPtr) xmlMalloc(sizeof(xmlLocationSet));
- if (ret == NULL) {
- xmlXPtrErrMemory("allocating locationset");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlLocationSet));
- if (val != NULL) {
- ret->locTab = (xmlXPathObjectPtr *) xmlMalloc(XML_RANGESET_DEFAULT *
- sizeof(xmlXPathObjectPtr));
- if (ret->locTab == NULL) {
- xmlXPtrErrMemory("allocating locationset");
- xmlFree(ret);
- return(NULL);
- }
- memset(ret->locTab, 0 ,
- XML_RANGESET_DEFAULT * (size_t) sizeof(xmlXPathObjectPtr));
- ret->locMax = XML_RANGESET_DEFAULT;
- ret->locTab[ret->locNr++] = val;
- }
- return(ret);
-}
-
-/**
- * xmlXPtrLocationSetAdd:
- * @cur: the initial range set
- * @val: a new xmlXPathObjectPtr
- *
- * add a new xmlXPathObjectPtr to an existing LocationSet
- * If the location already exist in the set @val is freed.
- */
-void
-xmlXPtrLocationSetAdd(xmlLocationSetPtr cur, xmlXPathObjectPtr val) {
- int i;
-
- if ((cur == NULL) || (val == NULL)) return;
-
- /*
- * check against doublons
- */
- for (i = 0;i < cur->locNr;i++) {
- if (xmlXPtrRangesEqual(cur->locTab[i], val)) {
- xmlXPathFreeObject(val);
- return;
- }
- }
-
- /*
- * grow the locTab if needed
- */
- if (cur->locMax == 0) {
- cur->locTab = (xmlXPathObjectPtr *) xmlMalloc(XML_RANGESET_DEFAULT *
- sizeof(xmlXPathObjectPtr));
- if (cur->locTab == NULL) {
- xmlXPtrErrMemory("adding location to set");
- return;
- }
- memset(cur->locTab, 0 ,
- XML_RANGESET_DEFAULT * (size_t) sizeof(xmlXPathObjectPtr));
- cur->locMax = XML_RANGESET_DEFAULT;
- } else if (cur->locNr == cur->locMax) {
- xmlXPathObjectPtr *temp;
-
- cur->locMax *= 2;
- temp = (xmlXPathObjectPtr *) xmlRealloc(cur->locTab, cur->locMax *
- sizeof(xmlXPathObjectPtr));
- if (temp == NULL) {
- xmlXPtrErrMemory("adding location to set");
- return;
- }
- cur->locTab = temp;
- }
- cur->locTab[cur->locNr++] = val;
-}
-
-/**
- * xmlXPtrLocationSetMerge:
- * @val1: the first LocationSet
- * @val2: the second LocationSet
- *
- * Merges two rangesets, all ranges from @val2 are added to @val1
- *
- * Returns val1 once extended or NULL in case of error.
- */
-xmlLocationSetPtr
-xmlXPtrLocationSetMerge(xmlLocationSetPtr val1, xmlLocationSetPtr val2) {
- int i;
-
- if (val1 == NULL) return(NULL);
- if (val2 == NULL) return(val1);
-
- /*
- * !!!!! this can be optimized a lot, knowing that both
- * val1 and val2 already have unicity of their values.
- */
-
- for (i = 0;i < val2->locNr;i++)
- xmlXPtrLocationSetAdd(val1, val2->locTab[i]);
-
- return(val1);
-}
-
-/**
- * xmlXPtrLocationSetDel:
- * @cur: the initial range set
- * @val: an xmlXPathObjectPtr
- *
- * Removes an xmlXPathObjectPtr from an existing LocationSet
- */
-void
-xmlXPtrLocationSetDel(xmlLocationSetPtr cur, xmlXPathObjectPtr val) {
- int i;
-
- if (cur == NULL) return;
- if (val == NULL) return;
-
- /*
- * check against doublons
- */
- for (i = 0;i < cur->locNr;i++)
- if (cur->locTab[i] == val) break;
-
- if (i >= cur->locNr) {
-#ifdef DEBUG
- xmlGenericError(xmlGenericErrorContext,
- "xmlXPtrLocationSetDel: Range wasn't found in RangeList\n");
-#endif
- return;
- }
- cur->locNr--;
- for (;i < cur->locNr;i++)
- cur->locTab[i] = cur->locTab[i + 1];
- cur->locTab[cur->locNr] = NULL;
-}
-
-/**
- * xmlXPtrLocationSetRemove:
- * @cur: the initial range set
- * @val: the index to remove
- *
- * Removes an entry from an existing LocationSet list.
- */
-void
-xmlXPtrLocationSetRemove(xmlLocationSetPtr cur, int val) {
- if (cur == NULL) return;
- if (val >= cur->locNr) return;
- cur->locNr--;
- for (;val < cur->locNr;val++)
- cur->locTab[val] = cur->locTab[val + 1];
- cur->locTab[cur->locNr] = NULL;
-}
-
-/**
- * xmlXPtrFreeLocationSet:
- * @obj: the xmlLocationSetPtr to free
- *
- * Free the LocationSet compound (not the actual ranges !).
- */
-void
-xmlXPtrFreeLocationSet(xmlLocationSetPtr obj) {
- int i;
-
- if (obj == NULL) return;
- if (obj->locTab != NULL) {
- for (i = 0;i < obj->locNr; i++) {
- xmlXPathFreeObject(obj->locTab[i]);
- }
- xmlFree(obj->locTab);
- }
- xmlFree(obj);
-}
-
-/**
- * xmlXPtrNewLocationSetNodes:
- * @start: the start NodePtr value
- * @end: the end NodePtr value or NULL
- *
- * Create a new xmlXPathObjectPtr of type LocationSet and initialize
- * it with the single range made of the two nodes @start and @end
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewLocationSetNodes(xmlNodePtr start, xmlNodePtr end) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPtrErrMemory("allocating locationset");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_LOCATIONSET;
- if (end == NULL)
- ret->user = xmlXPtrLocationSetCreate(xmlXPtrNewCollapsedRange(start));
- else
- ret->user = xmlXPtrLocationSetCreate(xmlXPtrNewRangeNodes(start,end));
- return(ret);
-}
-
-/**
- * xmlXPtrNewLocationSetNodeSet:
- * @set: a node set
- *
- * Create a new xmlXPathObjectPtr of type LocationSet and initialize
- * it with all the nodes from @set
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrNewLocationSetNodeSet(xmlNodeSetPtr set) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPtrErrMemory("allocating locationset");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_LOCATIONSET;
- if (set != NULL) {
- int i;
- xmlLocationSetPtr newset;
-
- newset = xmlXPtrLocationSetCreate(NULL);
- if (newset == NULL)
- return(ret);
-
- for (i = 0;i < set->nodeNr;i++)
- xmlXPtrLocationSetAdd(newset,
- xmlXPtrNewCollapsedRange(set->nodeTab[i]));
-
- ret->user = (void *) newset;
- }
- return(ret);
-}
-
-/**
- * xmlXPtrWrapLocationSet:
- * @val: the LocationSet value
- *
- * Wrap the LocationSet @val in a new xmlXPathObjectPtr
- *
- * Returns the newly created object.
- */
-xmlXPathObjectPtr
-xmlXPtrWrapLocationSet(xmlLocationSetPtr val) {
- xmlXPathObjectPtr ret;
-
- ret = (xmlXPathObjectPtr) xmlMalloc(sizeof(xmlXPathObject));
- if (ret == NULL) {
- xmlXPtrErrMemory("allocating locationset");
- return(NULL);
- }
- memset(ret, 0 , (size_t) sizeof(xmlXPathObject));
- ret->type = XPATH_LOCATIONSET;
- ret->user = (void *) val;
- return(ret);
-}
-
-/************************************************************************
- * *
- * The parser *
- * *
- ************************************************************************/
-
-static void xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name);
-
-/*
- * Macros for accessing the content. Those should be used only by the parser,
- * and not exported.
- *
- * Dirty macros, i.e. one need to make assumption on the context to use them
- *
- * CUR_PTR return the current pointer to the xmlChar to be parsed.
- * CUR returns the current xmlChar value, i.e. a 8 bit value
- * in ISO-Latin or UTF-8.
- * This should be used internally by the parser
- * only to compare to ASCII values otherwise it would break when
- * running with UTF-8 encoding.
- * NXT(n) returns the n'th next xmlChar. Same as CUR is should be used only
- * to compare on ASCII based substring.
- * SKIP(n) Skip n xmlChar, and must also be used only to skip ASCII defined
- * strings within the parser.
- * CURRENT Returns the current char value, with the full decoding of
- * UTF-8 if we are using this mode. It returns an int.
- * NEXT Skip to the next character, this does the proper decoding
- * in UTF-8 mode. It also pop-up unfinished entities on the fly.
- * It returns the pointer to the current xmlChar.
- */
-
-#define CUR (*ctxt->cur)
-#define SKIP(val) ctxt->cur += (val)
-#define NXT(val) ctxt->cur[(val)]
-#define CUR_PTR ctxt->cur
-
-#define SKIP_BLANKS \
- while (IS_BLANK_CH(*(ctxt->cur))) NEXT
-
-#define CURRENT (*ctxt->cur)
-#define NEXT ((*ctxt->cur) ? ctxt->cur++: ctxt->cur)
-
-/*
- * xmlXPtrGetChildNo:
- * @ctxt: the XPointer Parser context
- * @index: the child number
- *
- * Move the current node of the nodeset on the stack to the
- * given child if found
- */
-static void
-xmlXPtrGetChildNo(xmlXPathParserContextPtr ctxt, int indx) {
- xmlNodePtr cur = NULL;
- xmlXPathObjectPtr obj;
- xmlNodeSetPtr oldset;
-
- CHECK_TYPE(XPATH_NODESET);
- obj = valuePop(ctxt);
- oldset = obj->nodesetval;
- if ((indx <= 0) || (oldset == NULL) || (oldset->nodeNr != 1)) {
- xmlXPathFreeObject(obj);
- valuePush(ctxt, xmlXPathNewNodeSet(NULL));
- return;
- }
- cur = xmlXPtrGetNthChild(oldset->nodeTab[0], indx);
- if (cur == NULL) {
- xmlXPathFreeObject(obj);
- valuePush(ctxt, xmlXPathNewNodeSet(NULL));
- return;
- }
- oldset->nodeTab[0] = cur;
- valuePush(ctxt, obj);
-}
-
-/**
- * xmlXPtrEvalXPtrPart:
- * @ctxt: the XPointer Parser context
- * @name: the preparsed Scheme for the XPtrPart
- *
- * XPtrPart ::= 'xpointer' '(' XPtrExpr ')'
- * | Scheme '(' SchemeSpecificExpr ')'
- *
- * Scheme ::= NCName - 'xpointer' [VC: Non-XPointer schemes]
- *
- * SchemeSpecificExpr ::= StringWithBalancedParens
- *
- * StringWithBalancedParens ::=
- * [^()]* ('(' StringWithBalancedParens ')' [^()]*)*
- * [VC: Parenthesis escaping]
- *
- * XPtrExpr ::= Expr [VC: Parenthesis escaping]
- *
- * VC: Parenthesis escaping:
- * The end of an XPointer part is signaled by the right parenthesis ")"
- * character that is balanced with the left parenthesis "(" character
- * that began the part. Any unbalanced parenthesis character inside the
- * expression, even within literals, must be escaped with a circumflex (^)
- * character preceding it. If the expression contains any literal
- * occurrences of the circumflex, each must be escaped with an additional
- * circumflex (that is, ^^). If the unescaped parentheses in the expression
- * are not balanced, a syntax error results.
- *
- * Parse and evaluate an XPtrPart. Basically it generates the unescaped
- * string and if the scheme is 'xpointer' it will call the XPath interpreter.
- *
- * TODO: there is no new scheme registration mechanism
- */
-
-static void
-xmlXPtrEvalXPtrPart(xmlXPathParserContextPtr ctxt, xmlChar *name) {
- xmlChar *buffer, *cur;
- int len;
- int level;
-
- if (name == NULL)
- name = xmlXPathParseName(ctxt);
- if (name == NULL)
- XP_ERROR(XPATH_EXPR_ERROR);
-
- if (CUR != '(') {
- xmlFree(name);
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- NEXT;
- level = 1;
-
- len = xmlStrlen(ctxt->cur);
- len++;
- buffer = (xmlChar *) xmlMallocAtomic(len * sizeof (xmlChar));
- if (buffer == NULL) {
- xmlXPtrErrMemory("allocating buffer");
- xmlFree(name);
- return;
- }
-
- cur = buffer;
- while (CUR != 0) {
- if (CUR == ')') {
- level--;
- if (level == 0) {
- NEXT;
- break;
- }
- } else if (CUR == '(') {
- level++;
- } else if (CUR == '^') {
- if ((NXT(1) == ')') || (NXT(1) == '(') || (NXT(1) == '^')) {
- NEXT;
- }
- }
- *cur++ = CUR;
- NEXT;
- }
- *cur = 0;
-
- if ((level != 0) && (CUR == 0)) {
- xmlFree(name);
- xmlFree(buffer);
- XP_ERROR(XPTR_SYNTAX_ERROR);
- }
-
- if (xmlStrEqual(name, (xmlChar *) "xpointer")) {
- const xmlChar *left = CUR_PTR;
-
- CUR_PTR = buffer;
- /*
- * To evaluate an xpointer scheme element (4.3) we need:
- * context initialized to the root
- * context position initalized to 1
- * context size initialized to 1
- */
- ctxt->context->node = (xmlNodePtr)ctxt->context->doc;
- ctxt->context->proximityPosition = 1;
- ctxt->context->contextSize = 1;
- xmlXPathEvalExpr(ctxt);
- CUR_PTR=left;
- } else if (xmlStrEqual(name, (xmlChar *) "element")) {
- const xmlChar *left = CUR_PTR;
- xmlChar *name2;
-
- CUR_PTR = buffer;
- if (buffer[0] == '/') {
- xmlXPathRoot(ctxt);
- xmlXPtrEvalChildSeq(ctxt, NULL);
- } else {
- name2 = xmlXPathParseName(ctxt);
- if (name2 == NULL) {
- CUR_PTR = left;
- xmlFree(buffer);
- xmlFree(name);
- XP_ERROR(XPATH_EXPR_ERROR);
- }
- xmlXPtrEvalChildSeq(ctxt, name2);
- }
- CUR_PTR = left;
-#ifdef XPTR_XMLNS_SCHEME
- } else if (xmlStrEqual(name, (xmlChar *) "xmlns")) {
- const xmlChar *left = CUR_PTR;
- xmlChar *prefix;
- xmlChar *URI;
- xmlURIPtr value;
-
- CUR_PTR = buffer;
- prefix = xmlXPathParseNCName(ctxt);
- if (prefix == NULL) {
- xmlFree(buffer);
- xmlFree(name);
- XP_ERROR(XPTR_SYNTAX_ERROR);
- }
- SKIP_BLANKS;
- if (CUR != '=') {
- xmlFree(prefix);
- xmlFree(buffer);
- xmlFree(name);
- XP_ERROR(XPTR_SYNTAX_ERROR);
- }
- NEXT;
- SKIP_BLANKS;
- /* @@ check escaping in the XPointer WD */
-
- value = xmlParseURI((const char *)ctxt->cur);
- if (value == NULL) {
- xmlFree(prefix);
- xmlFree(buffer);
- xmlFree(name);
- XP_ERROR(XPTR_SYNTAX_ERROR);
- }
- URI = xmlSaveUri(value);
- xmlFreeURI(value);
- if (URI == NULL) {
- xmlFree(prefix);
- xmlFree(buffer);
- xmlFree(name);
- XP_ERROR(XPATH_MEMORY_ERROR);
- }
-
- xmlXPathRegisterNs(ctxt->context, prefix, URI);
- CUR_PTR = left;
- xmlFree(URI);
- xmlFree(prefix);
-#endif /* XPTR_XMLNS_SCHEME */
- } else {
- xmlXPtrErr(ctxt, XML_XPTR_UNKNOWN_SCHEME,
- "unsupported scheme '%s'\n", name);
- }
- xmlFree(buffer);
- xmlFree(name);
-}
-
-/**
- * xmlXPtrEvalFullXPtr:
- * @ctxt: the XPointer Parser context
- * @name: the preparsed Scheme for the first XPtrPart
- *
- * FullXPtr ::= XPtrPart (S? XPtrPart)*
- *
- * As the specs says:
- * -----------
- * When multiple XPtrParts are provided, they must be evaluated in
- * left-to-right order. If evaluation of one part fails, the nexti
- * is evaluated. The following conditions cause XPointer part failure:
- *
- * - An unknown scheme
- * - A scheme that does not locate any sub-resource present in the resource
- * - A scheme that is not applicable to the media type of the resource
- *
- * The XPointer application must consume a failed XPointer part and
- * attempt to evaluate the next one, if any. The result of the first
- * XPointer part whose evaluation succeeds is taken to be the fragment
- * located by the XPointer as a whole. If all the parts fail, the result
- * for the XPointer as a whole is a sub-resource error.
- * -----------
- *
- * Parse and evaluate a Full XPtr i.e. possibly a cascade of XPath based
- * expressions or other schemes.
- */
-static void
-xmlXPtrEvalFullXPtr(xmlXPathParserContextPtr ctxt, xmlChar *name) {
- if (name == NULL)
- name = xmlXPathParseName(ctxt);
- if (name == NULL)
- XP_ERROR(XPATH_EXPR_ERROR);
- while (name != NULL) {
- ctxt->error = XPATH_EXPRESSION_OK;
- xmlXPtrEvalXPtrPart(ctxt, name);
-
- /* in case of syntax error, break here */
- if ((ctxt->error != XPATH_EXPRESSION_OK) &&
- (ctxt->error != XML_XPTR_UNKNOWN_SCHEME))
- return;
-
- /*
- * If the returned value is a non-empty nodeset
- * or location set, return here.
- */
- if (ctxt->value != NULL) {
- xmlXPathObjectPtr obj = ctxt->value;
-
- switch (obj->type) {
- case XPATH_LOCATIONSET: {
- xmlLocationSetPtr loc = ctxt->value->user;
- if ((loc != NULL) && (loc->locNr > 0))
- return;
- break;
- }
- case XPATH_NODESET: {
- xmlNodeSetPtr loc = ctxt->value->nodesetval;
- if ((loc != NULL) && (loc->nodeNr > 0))
- return;
- break;
- }
- default:
- break;
- }
-
- /*
- * Evaluating to improper values is equivalent to
- * a sub-resource error, clean-up the stack
- */
- do {
- obj = valuePop(ctxt);
- if (obj != NULL) {
- xmlXPathFreeObject(obj);
- }
- } while (obj != NULL);
- }
-
- /*
- * Is there another XPointer part.
- */
- SKIP_BLANKS;
- name = xmlXPathParseName(ctxt);
- }
-}
-
-/**
- * xmlXPtrEvalChildSeq:
- * @ctxt: the XPointer Parser context
- * @name: a possible ID name of the child sequence
- *
- * ChildSeq ::= '/1' ('/' [0-9]*)*
- * | Name ('/' [0-9]*)+
- *
- * Parse and evaluate a Child Sequence. This routine also handle the
- * case of a Bare Name used to get a document ID.
- */
-static void
-xmlXPtrEvalChildSeq(xmlXPathParserContextPtr ctxt, xmlChar *name) {
- /*
- * XPointer don't allow by syntax to address in mutirooted trees
- * this might prove useful in some cases, warn about it.
- */
- if ((name == NULL) && (CUR == '/') && (NXT(1) != '1')) {
- xmlXPtrErr(ctxt, XML_XPTR_CHILDSEQ_START,
- "warning: ChildSeq not starting by /1\n", NULL);
- }
-
- if (name != NULL) {
- valuePush(ctxt, xmlXPathNewString(name));
- xmlFree(name);
- xmlXPathIdFunction(ctxt, 1);
- CHECK_ERROR;
- }
-
- while (CUR == '/') {
- int child = 0;
- NEXT;
-
- while ((CUR >= '0') && (CUR <= '9')) {
- child = child * 10 + (CUR - '0');
- NEXT;
- }
- xmlXPtrGetChildNo(ctxt, child);
- }
-}
-
-
-/**
- * xmlXPtrEvalXPointer:
- * @ctxt: the XPointer Parser context
- *
- * XPointer ::= Name
- * | ChildSeq
- * | FullXPtr
- *
- * Parse and evaluate an XPointer
- */
-static void
-xmlXPtrEvalXPointer(xmlXPathParserContextPtr ctxt) {
- if (ctxt->valueTab == NULL) {
- /* Allocate the value stack */
- ctxt->valueTab = (xmlXPathObjectPtr *)
- xmlMalloc(10 * sizeof(xmlXPathObjectPtr));
- if (ctxt->valueTab == NULL) {
- xmlXPtrErrMemory("allocating evaluation context");
- return;
- }
- ctxt->valueNr = 0;
- ctxt->valueMax = 10;
- ctxt->value = NULL;
- ctxt->valueFrame = 0;
- }
- SKIP_BLANKS;
- if (CUR == '/') {
- xmlXPathRoot(ctxt);
- xmlXPtrEvalChildSeq(ctxt, NULL);
- } else {
- xmlChar *name;
-
- name = xmlXPathParseName(ctxt);
- if (name == NULL)
- XP_ERROR(XPATH_EXPR_ERROR);
- if (CUR == '(') {
- xmlXPtrEvalFullXPtr(ctxt, name);
- /* Short evaluation */
- return;
- } else {
- /* this handle both Bare Names and Child Sequences */
- xmlXPtrEvalChildSeq(ctxt, name);
- }
- }
- SKIP_BLANKS;
- if (CUR != 0)
- XP_ERROR(XPATH_EXPR_ERROR);
-}
-
-
-/************************************************************************
- * *
- * General routines *
- * *
- ************************************************************************/
-
-static
-void xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs);
-static
-void xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs);
-
-/**
- * xmlXPtrNewContext:
- * @doc: the XML document
- * @here: the node that directly contains the XPointer being evaluated or NULL
- * @origin: the element from which a user or program initiated traversal of
- * the link, or NULL.
- *
- * Create a new XPointer context
- *
- * Returns the xmlXPathContext just allocated.
- */
-xmlXPathContextPtr
-xmlXPtrNewContext(xmlDocPtr doc, xmlNodePtr here, xmlNodePtr origin) {
- xmlXPathContextPtr ret;
-
- ret = xmlXPathNewContext(doc);
- if (ret == NULL)
- return(ret);
- ret->xptr = 1;
- ret->here = here;
- ret->origin = origin;
-
- xmlXPathRegisterFunc(ret, (xmlChar *)"range",
- xmlXPtrRangeFunction);
- xmlXPathRegisterFunc(ret, (xmlChar *)"range-inside",
- xmlXPtrRangeInsideFunction);
- xmlXPathRegisterFunc(ret, (xmlChar *)"string-range",
- xmlXPtrStringRangeFunction);
- xmlXPathRegisterFunc(ret, (xmlChar *)"start-point",
- xmlXPtrStartPointFunction);
- xmlXPathRegisterFunc(ret, (xmlChar *)"end-point",
- xmlXPtrEndPointFunction);
- xmlXPathRegisterFunc(ret, (xmlChar *)"here",
- xmlXPtrHereFunction);
- xmlXPathRegisterFunc(ret, (xmlChar *)" origin",
- xmlXPtrOriginFunction);
-
- return(ret);
-}
-
-/**
- * xmlXPtrEval:
- * @str: the XPointer expression
- * @ctx: the XPointer context
- *
- * Evaluate the XPath Location Path in the given context.
- *
- * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL.
- * the caller has to free the object.
- */
-xmlXPathObjectPtr
-xmlXPtrEval(const xmlChar *str, xmlXPathContextPtr ctx) {
- xmlXPathParserContextPtr ctxt;
- xmlXPathObjectPtr res = NULL, tmp;
- xmlXPathObjectPtr init = NULL;
- int stack = 0;
-
- xmlXPathInit();
-
- if ((ctx == NULL) || (str == NULL))
- return(NULL);
-
- ctxt = xmlXPathNewParserContext(str, ctx);
- if (ctxt == NULL)
- return(NULL);
- ctxt->xptr = 1;
- xmlXPtrEvalXPointer(ctxt);
-
- if ((ctxt->value != NULL) &&
- (ctxt->value->type != XPATH_NODESET) &&
- (ctxt->value->type != XPATH_LOCATIONSET)) {
- xmlXPtrErr(ctxt, XML_XPTR_EVAL_FAILED,
- "xmlXPtrEval: evaluation failed to return a node set\n",
- NULL);
- } else {
- res = valuePop(ctxt);
- }
-
- do {
- tmp = valuePop(ctxt);
- if (tmp != NULL) {
- if (tmp != init) {
- if (tmp->type == XPATH_NODESET) {
- /*
- * Evaluation may push a root nodeset which is unused
- */
- xmlNodeSetPtr set;
- set = tmp->nodesetval;
- if ((set == NULL) || (set->nodeNr != 1) ||
- (set->nodeTab[0] != (xmlNodePtr) ctx->doc))
- stack++;
- } else
- stack++;
- }
- xmlXPathFreeObject(tmp);
- }
- } while (tmp != NULL);
- if (stack != 0) {
- xmlXPtrErr(ctxt, XML_XPTR_EXTRA_OBJECTS,
- "xmlXPtrEval: object(s) left on the eval stack\n",
- NULL);
- }
- if (ctxt->error != XPATH_EXPRESSION_OK) {
- xmlXPathFreeObject(res);
- res = NULL;
- }
-
- xmlXPathFreeParserContext(ctxt);
- return(res);
-}
-
-/**
- * xmlXPtrBuildRangeNodeList:
- * @range: a range object
- *
- * Build a node list tree copy of the range
- *
- * Returns an xmlNodePtr list or NULL.
- * the caller has to free the node tree.
- */
-static xmlNodePtr
-xmlXPtrBuildRangeNodeList(xmlXPathObjectPtr range) {
- /* pointers to generated nodes */
- xmlNodePtr list = NULL, last = NULL, parent = NULL, tmp;
- /* pointers to traversal nodes */
- xmlNodePtr start, cur, end;
- int index1, index2;
-
- if (range == NULL)
- return(NULL);
- if (range->type != XPATH_RANGE)
- return(NULL);
- start = (xmlNodePtr) range->user;
-
- if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
- return(NULL);
- end = range->user2;
- if (end == NULL)
- return(xmlCopyNode(start, 1));
- if (end->type == XML_NAMESPACE_DECL)
- return(NULL);
-
- cur = start;
- index1 = range->index;
- index2 = range->index2;
- while (cur != NULL) {
- if (cur == end) {
- if (cur->type == XML_TEXT_NODE) {
- const xmlChar *content = cur->content;
- int len;
-
- if (content == NULL) {
- tmp = xmlNewTextLen(NULL, 0);
- } else {
- len = index2;
- if ((cur == start) && (index1 > 1)) {
- content += (index1 - 1);
- len -= (index1 - 1);
- index1 = 0;
- } else {
- len = index2;
- }
- tmp = xmlNewTextLen(content, len);
- }
- /* single sub text node selection */
- if (list == NULL)
- return(tmp);
- /* prune and return full set */
- if (last != NULL)
- xmlAddNextSibling(last, tmp);
- else
- xmlAddChild(parent, tmp);
- return(list);
- } else {
- tmp = xmlCopyNode(cur, 0);
- if (list == NULL)
- list = tmp;
- else {
- if (last != NULL)
- xmlAddNextSibling(last, tmp);
- else
- xmlAddChild(parent, tmp);
- }
- last = NULL;
- parent = tmp;
-
- if (index2 > 1) {
- end = xmlXPtrGetNthChild(cur, index2 - 1);
- index2 = 0;
- }
- if ((cur == start) && (index1 > 1)) {
- cur = xmlXPtrGetNthChild(cur, index1 - 1);
- index1 = 0;
- } else {
- cur = cur->children;
- }
- /*
- * Now gather the remaining nodes from cur to end
- */
- continue; /* while */
- }
- } else if ((cur == start) &&
- (list == NULL) /* looks superfluous but ... */ ) {
- if ((cur->type == XML_TEXT_NODE) ||
- (cur->type == XML_CDATA_SECTION_NODE)) {
- const xmlChar *content = cur->content;
-
- if (content == NULL) {
- tmp = xmlNewTextLen(NULL, 0);
- } else {
- if (index1 > 1) {
- content += (index1 - 1);
- }
- tmp = xmlNewText(content);
- }
- last = list = tmp;
- } else {
- if ((cur == start) && (index1 > 1)) {
- tmp = xmlCopyNode(cur, 0);
- list = tmp;
- parent = tmp;
- last = NULL;
- cur = xmlXPtrGetNthChild(cur, index1 - 1);
- index1 = 0;
- /*
- * Now gather the remaining nodes from cur to end
- */
- continue; /* while */
- }
- tmp = xmlCopyNode(cur, 1);
- list = tmp;
- parent = NULL;
- last = tmp;
- }
- } else {
- tmp = NULL;
- switch (cur->type) {
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_NODE:
- /* Do not copy DTD informations */
- break;
- case XML_ENTITY_DECL:
- TODO /* handle crossing entities -> stack needed */
- break;
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- /* don't consider it part of the tree content */
- break;
- case XML_ATTRIBUTE_NODE:
- /* Humm, should not happen ! */
- STRANGE
- break;
- default:
- tmp = xmlCopyNode(cur, 1);
- break;
- }
- if (tmp != NULL) {
- if ((list == NULL) || ((last == NULL) && (parent == NULL))) {
- STRANGE
- return(NULL);
- }
- if (last != NULL)
- xmlAddNextSibling(last, tmp);
- else {
- xmlAddChild(parent, tmp);
- last = tmp;
- }
- }
- }
- /*
- * Skip to next node in document order
- */
- if ((list == NULL) || ((last == NULL) && (parent == NULL))) {
- STRANGE
- return(NULL);
- }
- cur = xmlXPtrAdvanceNode(cur, NULL);
- }
- return(list);
-}
-
-/**
- * xmlXPtrBuildNodeList:
- * @obj: the XPointer result from the evaluation.
- *
- * Build a node list tree copy of the XPointer result.
- * This will drop Attributes and Namespace declarations.
- *
- * Returns an xmlNodePtr list or NULL.
- * the caller has to free the node tree.
- */
-xmlNodePtr
-xmlXPtrBuildNodeList(xmlXPathObjectPtr obj) {
- xmlNodePtr list = NULL, last = NULL;
- int i;
-
- if (obj == NULL)
- return(NULL);
- switch (obj->type) {
- case XPATH_NODESET: {
- xmlNodeSetPtr set = obj->nodesetval;
- if (set == NULL)
- return(NULL);
- for (i = 0;i < set->nodeNr;i++) {
- if (set->nodeTab[i] == NULL)
- continue;
- switch (set->nodeTab[i]->type) {
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ELEMENT_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_ENTITY_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_HTML_DOCUMENT_NODE:
-#ifdef LIBXML_DOCB_ENABLED
- case XML_DOCB_DOCUMENT_NODE:
-#endif
- case XML_XINCLUDE_START:
- case XML_XINCLUDE_END:
- break;
- case XML_ATTRIBUTE_NODE:
- case XML_NAMESPACE_DECL:
- case XML_DOCUMENT_TYPE_NODE:
- case XML_DOCUMENT_FRAG_NODE:
- case XML_NOTATION_NODE:
- case XML_DTD_NODE:
- case XML_ELEMENT_DECL:
- case XML_ATTRIBUTE_DECL:
- case XML_ENTITY_DECL:
- continue; /* for */
- }
- if (last == NULL)
- list = last = xmlCopyNode(set->nodeTab[i], 1);
- else {
- xmlAddNextSibling(last, xmlCopyNode(set->nodeTab[i], 1));
- if (last->next != NULL)
- last = last->next;
- }
- }
- break;
- }
- case XPATH_LOCATIONSET: {
- xmlLocationSetPtr set = (xmlLocationSetPtr) obj->user;
- if (set == NULL)
- return(NULL);
- for (i = 0;i < set->locNr;i++) {
- if (last == NULL)
- list = last = xmlXPtrBuildNodeList(set->locTab[i]);
- else
- xmlAddNextSibling(last,
- xmlXPtrBuildNodeList(set->locTab[i]));
- if (last != NULL) {
- while (last->next != NULL)
- last = last->next;
- }
- }
- break;
- }
- case XPATH_RANGE:
- return(xmlXPtrBuildRangeNodeList(obj));
- case XPATH_POINT:
- return(xmlCopyNode(obj->user, 0));
- default:
- break;
- }
- return(list);
-}
-
-/************************************************************************
- * *
- * XPointer functions *
- * *
- ************************************************************************/
-
-/**
- * xmlXPtrNbLocChildren:
- * @node: an xmlNodePtr
- *
- * Count the number of location children of @node or the length of the
- * string value in case of text/PI/Comments nodes
- *
- * Returns the number of location children
- */
-static int
-xmlXPtrNbLocChildren(xmlNodePtr node) {
- int ret = 0;
- if (node == NULL)
- return(-1);
- switch (node->type) {
- case XML_HTML_DOCUMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_ELEMENT_NODE:
- node = node->children;
- while (node != NULL) {
- if (node->type == XML_ELEMENT_NODE)
- ret++;
- node = node->next;
- }
- break;
- case XML_ATTRIBUTE_NODE:
- return(-1);
-
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- ret = xmlStrlen(node->content);
- break;
- default:
- return(-1);
- }
- return(ret);
-}
-
-/**
- * xmlXPtrHereFunction:
- * @ctxt: the XPointer Parser context
- * @nargs: the number of args
- *
- * Function implementing here() operation
- * as described in 5.4.3
- */
-static void
-xmlXPtrHereFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(0);
-
- if (ctxt->context->here == NULL)
- XP_ERROR(XPTR_SYNTAX_ERROR);
-
- valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->here, NULL));
-}
-
-/**
- * xmlXPtrOriginFunction:
- * @ctxt: the XPointer Parser context
- * @nargs: the number of args
- *
- * Function implementing origin() operation
- * as described in 5.4.3
- */
-static void
-xmlXPtrOriginFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- CHECK_ARITY(0);
-
- if (ctxt->context->origin == NULL)
- XP_ERROR(XPTR_SYNTAX_ERROR);
-
- valuePush(ctxt, xmlXPtrNewLocationSetNodes(ctxt->context->origin, NULL));
-}
-
-/**
- * xmlXPtrStartPointFunction:
- * @ctxt: the XPointer Parser context
- * @nargs: the number of args
- *
- * Function implementing start-point() operation
- * as described in 5.4.3
- * ----------------
- * location-set start-point(location-set)
- *
- * For each location x in the argument location-set, start-point adds a
- * location of type point to the result location-set. That point represents
- * the start point of location x and is determined by the following rules:
- *
- * - If x is of type point, the start point is x.
- * - If x is of type range, the start point is the start point of x.
- * - If x is of type root, element, text, comment, or processing instruction,
- * - the container node of the start point is x and the index is 0.
- * - If x is of type attribute or namespace, the function must signal a
- * syntax error.
- * ----------------
- *
- */
-static void
-xmlXPtrStartPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr tmp, obj, point;
- xmlLocationSetPtr newset = NULL;
- xmlLocationSetPtr oldset = NULL;
-
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_LOCATIONSET) &&
- (ctxt->value->type != XPATH_NODESET)))
- XP_ERROR(XPATH_INVALID_TYPE)
-
- obj = valuePop(ctxt);
- if (obj->type == XPATH_NODESET) {
- /*
- * First convert to a location set
- */
- tmp = xmlXPtrNewLocationSetNodeSet(obj->nodesetval);
- xmlXPathFreeObject(obj);
- if (tmp == NULL)
- XP_ERROR(XPATH_MEMORY_ERROR)
- obj = tmp;
- }
-
- newset = xmlXPtrLocationSetCreate(NULL);
- if (newset == NULL) {
- xmlXPathFreeObject(obj);
- XP_ERROR(XPATH_MEMORY_ERROR);
- }
- oldset = (xmlLocationSetPtr) obj->user;
- if (oldset != NULL) {
- int i;
-
- for (i = 0; i < oldset->locNr; i++) {
- tmp = oldset->locTab[i];
- if (tmp == NULL)
- continue;
- point = NULL;
- switch (tmp->type) {
- case XPATH_POINT:
- point = xmlXPtrNewPoint(tmp->user, tmp->index);
- break;
- case XPATH_RANGE: {
- xmlNodePtr node = tmp->user;
- if (node != NULL) {
- if ((node->type == XML_ATTRIBUTE_NODE) ||
- (node->type == XML_NAMESPACE_DECL)) {
- xmlXPathFreeObject(obj);
- xmlXPtrFreeLocationSet(newset);
- XP_ERROR(XPTR_SYNTAX_ERROR);
- }
- point = xmlXPtrNewPoint(node, tmp->index);
- }
- break;
- }
- default:
- /*** Should we raise an error ?
- xmlXPathFreeObject(obj);
- xmlXPathFreeObject(newset);
- XP_ERROR(XPATH_INVALID_TYPE)
- ***/
- break;
- }
- if (point != NULL)
- xmlXPtrLocationSetAdd(newset, point);
- }
- }
- xmlXPathFreeObject(obj);
- valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
-}
-
-/**
- * xmlXPtrEndPointFunction:
- * @ctxt: the XPointer Parser context
- * @nargs: the number of args
- *
- * Function implementing end-point() operation
- * as described in 5.4.3
- * ----------------------------
- * location-set end-point(location-set)
- *
- * For each location x in the argument location-set, end-point adds a
- * location of type point to the result location-set. That point represents
- * the end point of location x and is determined by the following rules:
- *
- * - If x is of type point, the resulting point is x.
- * - If x is of type range, the resulting point is the end point of x.
- * - If x is of type root or element, the container node of the resulting
- * point is x and the index is the number of location children of x.
- * - If x is of type text, comment, or processing instruction, the container
- * node of the resulting point is x and the index is the length of the
- * string-value of x.
- * - If x is of type attribute or namespace, the function must signal a
- * syntax error.
- * ----------------------------
- */
-static void
-xmlXPtrEndPointFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- xmlXPathObjectPtr tmp, obj, point;
- xmlLocationSetPtr newset = NULL;
- xmlLocationSetPtr oldset = NULL;
-
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_LOCATIONSET) &&
- (ctxt->value->type != XPATH_NODESET)))
- XP_ERROR(XPATH_INVALID_TYPE)
-
- obj = valuePop(ctxt);
- if (obj->type == XPATH_NODESET) {
- /*
- * First convert to a location set
- */
- tmp = xmlXPtrNewLocationSetNodeSet(obj->nodesetval);
- xmlXPathFreeObject(obj);
- if (tmp == NULL)
- XP_ERROR(XPATH_MEMORY_ERROR)
- obj = tmp;
- }
-
- newset = xmlXPtrLocationSetCreate(NULL);
- if (newset == NULL) {
- xmlXPathFreeObject(obj);
- XP_ERROR(XPATH_MEMORY_ERROR);
- }
- oldset = (xmlLocationSetPtr) obj->user;
- if (oldset != NULL) {
- int i;
-
- for (i = 0; i < oldset->locNr; i++) {
- tmp = oldset->locTab[i];
- if (tmp == NULL)
- continue;
- point = NULL;
- switch (tmp->type) {
- case XPATH_POINT:
- point = xmlXPtrNewPoint(tmp->user, tmp->index);
- break;
- case XPATH_RANGE: {
- xmlNodePtr node = tmp->user2;
- if (node != NULL) {
- if ((node->type == XML_ATTRIBUTE_NODE) ||
- (node->type == XML_NAMESPACE_DECL)) {
- xmlXPathFreeObject(obj);
- xmlXPtrFreeLocationSet(newset);
- XP_ERROR(XPTR_SYNTAX_ERROR);
- }
- point = xmlXPtrNewPoint(node, tmp->index2);
- } else if (tmp->user == NULL) {
- point = xmlXPtrNewPoint(node,
- xmlXPtrNbLocChildren(node));
- }
- break;
- }
- default:
- /*** Should we raise an error ?
- xmlXPathFreeObject(obj);
- xmlXPathFreeObject(newset);
- XP_ERROR(XPATH_INVALID_TYPE)
- ***/
- break;
- }
- if (point != NULL)
- xmlXPtrLocationSetAdd(newset, point);
- }
- }
- xmlXPathFreeObject(obj);
- valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
-}
-
-
-/**
- * xmlXPtrCoveringRange:
- * @ctxt: the XPointer Parser context
- * @loc: the location for which the covering range must be computed
- *
- * A covering range is a range that wholly encompasses a location
- * Section 5.3.3. Covering Ranges for All Location Types
- * http://www.w3.org/TR/xptr#N2267
- *
- * Returns a new location or NULL in case of error
- */
-static xmlXPathObjectPtr
-xmlXPtrCoveringRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) {
- if (loc == NULL)
- return(NULL);
- if ((ctxt == NULL) || (ctxt->context == NULL) ||
- (ctxt->context->doc == NULL))
- return(NULL);
- switch (loc->type) {
- case XPATH_POINT:
- return(xmlXPtrNewRange(loc->user, loc->index,
- loc->user, loc->index));
- case XPATH_RANGE:
- if (loc->user2 != NULL) {
- return(xmlXPtrNewRange(loc->user, loc->index,
- loc->user2, loc->index2));
- } else {
- xmlNodePtr node = (xmlNodePtr) loc->user;
- if (node == (xmlNodePtr) ctxt->context->doc) {
- return(xmlXPtrNewRange(node, 0, node,
- xmlXPtrGetArity(node)));
- } else {
- switch (node->type) {
- case XML_ATTRIBUTE_NODE:
- /* !!! our model is slightly different than XPath */
- return(xmlXPtrNewRange(node, 0, node,
- xmlXPtrGetArity(node)));
- case XML_ELEMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_DOCUMENT_NODE:
- case XML_NOTATION_NODE:
- case XML_HTML_DOCUMENT_NODE: {
- int indx = xmlXPtrGetIndex(node);
-
- node = node->parent;
- return(xmlXPtrNewRange(node, indx - 1,
- node, indx + 1));
- }
- default:
- return(NULL);
- }
- }
- }
- default:
- TODO /* missed one case ??? */
- }
- return(NULL);
-}
-
-/**
- * xmlXPtrRangeFunction:
- * @ctxt: the XPointer Parser context
- * @nargs: the number of args
- *
- * Function implementing the range() function 5.4.3
- * location-set range(location-set )
- *
- * The range function returns ranges covering the locations in
- * the argument location-set. For each location x in the argument
- * location-set, a range location representing the covering range of
- * x is added to the result location-set.
- */
-static void
-xmlXPtrRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- int i;
- xmlXPathObjectPtr set;
- xmlLocationSetPtr oldset;
- xmlLocationSetPtr newset;
-
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_LOCATIONSET) &&
- (ctxt->value->type != XPATH_NODESET)))
- XP_ERROR(XPATH_INVALID_TYPE)
-
- set = valuePop(ctxt);
- if (set->type == XPATH_NODESET) {
- xmlXPathObjectPtr tmp;
-
- /*
- * First convert to a location set
- */
- tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
- xmlXPathFreeObject(set);
- if (tmp == NULL)
- XP_ERROR(XPATH_MEMORY_ERROR)
- set = tmp;
- }
- oldset = (xmlLocationSetPtr) set->user;
-
- /*
- * The loop is to compute the covering range for each item and add it
- */
- newset = xmlXPtrLocationSetCreate(NULL);
- if (newset == NULL) {
- xmlXPathFreeObject(set);
- XP_ERROR(XPATH_MEMORY_ERROR);
- }
- if (oldset != NULL) {
- for (i = 0;i < oldset->locNr;i++) {
- xmlXPtrLocationSetAdd(newset,
- xmlXPtrCoveringRange(ctxt, oldset->locTab[i]));
- }
- }
-
- /*
- * Save the new value and cleanup
- */
- valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
- xmlXPathFreeObject(set);
-}
-
-/**
- * xmlXPtrInsideRange:
- * @ctxt: the XPointer Parser context
- * @loc: the location for which the inside range must be computed
- *
- * A inside range is a range described in the range-inside() description
- *
- * Returns a new location or NULL in case of error
- */
-static xmlXPathObjectPtr
-xmlXPtrInsideRange(xmlXPathParserContextPtr ctxt, xmlXPathObjectPtr loc) {
- if (loc == NULL)
- return(NULL);
- if ((ctxt == NULL) || (ctxt->context == NULL) ||
- (ctxt->context->doc == NULL))
- return(NULL);
- switch (loc->type) {
- case XPATH_POINT: {
- xmlNodePtr node = (xmlNodePtr) loc->user;
- switch (node->type) {
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE: {
- if (node->content == NULL) {
- return(xmlXPtrNewRange(node, 0, node, 0));
- } else {
- return(xmlXPtrNewRange(node, 0, node,
- xmlStrlen(node->content)));
- }
- }
- case XML_ATTRIBUTE_NODE:
- case XML_ELEMENT_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_DOCUMENT_NODE:
- case XML_NOTATION_NODE:
- case XML_HTML_DOCUMENT_NODE: {
- return(xmlXPtrNewRange(node, 0, node,
- xmlXPtrGetArity(node)));
- }
- default:
- break;
- }
- return(NULL);
- }
- case XPATH_RANGE: {
- xmlNodePtr node = (xmlNodePtr) loc->user;
- if (loc->user2 != NULL) {
- return(xmlXPtrNewRange(node, loc->index,
- loc->user2, loc->index2));
- } else {
- switch (node->type) {
- case XML_PI_NODE:
- case XML_COMMENT_NODE:
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE: {
- if (node->content == NULL) {
- return(xmlXPtrNewRange(node, 0, node, 0));
- } else {
- return(xmlXPtrNewRange(node, 0, node,
- xmlStrlen(node->content)));
- }
- }
- case XML_ATTRIBUTE_NODE:
- case XML_ELEMENT_NODE:
- case XML_ENTITY_REF_NODE:
- case XML_DOCUMENT_NODE:
- case XML_NOTATION_NODE:
- case XML_HTML_DOCUMENT_NODE: {
- return(xmlXPtrNewRange(node, 0, node,
- xmlXPtrGetArity(node)));
- }
- default:
- break;
- }
- return(NULL);
- }
- }
- default:
- TODO /* missed one case ??? */
- }
- return(NULL);
-}
-
-/**
- * xmlXPtrRangeInsideFunction:
- * @ctxt: the XPointer Parser context
- * @nargs: the number of args
- *
- * Function implementing the range-inside() function 5.4.3
- * location-set range-inside(location-set )
- *
- * The range-inside function returns ranges covering the contents of
- * the locations in the argument location-set. For each location x in
- * the argument location-set, a range location is added to the result
- * location-set. If x is a range location, then x is added to the
- * result location-set. If x is not a range location, then x is used
- * as the container location of the start and end points of the range
- * location to be added; the index of the start point of the range is
- * zero; if the end point is a character point then its index is the
- * length of the string-value of x, and otherwise is the number of
- * location children of x.
- *
- */
-static void
-xmlXPtrRangeInsideFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- int i;
- xmlXPathObjectPtr set;
- xmlLocationSetPtr oldset;
- xmlLocationSetPtr newset;
-
- CHECK_ARITY(1);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_LOCATIONSET) &&
- (ctxt->value->type != XPATH_NODESET)))
- XP_ERROR(XPATH_INVALID_TYPE)
-
- set = valuePop(ctxt);
- if (set->type == XPATH_NODESET) {
- xmlXPathObjectPtr tmp;
-
- /*
- * First convert to a location set
- */
- tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
- xmlXPathFreeObject(set);
- if (tmp == NULL)
- XP_ERROR(XPATH_MEMORY_ERROR)
- set = tmp;
- }
- oldset = (xmlLocationSetPtr) set->user;
-
- /*
- * The loop is to compute the covering range for each item and add it
- */
- newset = xmlXPtrLocationSetCreate(NULL);
- if (newset == NULL) {
- xmlXPathFreeObject(set);
- XP_ERROR(XPATH_MEMORY_ERROR);
- }
- for (i = 0;i < oldset->locNr;i++) {
- xmlXPtrLocationSetAdd(newset,
- xmlXPtrInsideRange(ctxt, oldset->locTab[i]));
- }
-
- /*
- * Save the new value and cleanup
- */
- valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
- xmlXPathFreeObject(set);
-}
-
-/**
- * xmlXPtrRangeToFunction:
- * @ctxt: the XPointer Parser context
- * @nargs: the number of args
- *
- * Implement the range-to() XPointer function
- *
- * Obsolete. range-to is not a real function but a special type of location
- * step which is handled in xpath.c.
- */
-void
-xmlXPtrRangeToFunction(xmlXPathParserContextPtr ctxt,
- int nargs ATTRIBUTE_UNUSED) {
- XP_ERROR(XPATH_EXPR_ERROR);
-}
-
-/**
- * xmlXPtrAdvanceNode:
- * @cur: the node
- * @level: incremented/decremented to show level in tree
- *
- * Advance to the next element or text node in document order
- * TODO: add a stack for entering/exiting entities
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-xmlNodePtr
-xmlXPtrAdvanceNode(xmlNodePtr cur, int *level) {
-next:
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return(NULL);
- if (cur->children != NULL) {
- cur = cur->children ;
- if (level != NULL)
- (*level)++;
- goto found;
- }
-skip: /* This label should only be needed if something is wrong! */
- if (cur->next != NULL) {
- cur = cur->next;
- goto found;
- }
- do {
- cur = cur->parent;
- if (level != NULL)
- (*level)--;
- if (cur == NULL) return(NULL);
- if (cur->next != NULL) {
- cur = cur->next;
- goto found;
- }
- } while (cur != NULL);
-
-found:
- if ((cur->type != XML_ELEMENT_NODE) &&
- (cur->type != XML_TEXT_NODE) &&
- (cur->type != XML_DOCUMENT_NODE) &&
- (cur->type != XML_HTML_DOCUMENT_NODE) &&
- (cur->type != XML_CDATA_SECTION_NODE)) {
- if (cur->type == XML_ENTITY_REF_NODE) { /* Shouldn't happen */
- TODO
- goto skip;
- }
- goto next;
- }
- return(cur);
-}
-
-/**
- * xmlXPtrAdvanceChar:
- * @node: the node
- * @indx: the indx
- * @bytes: the number of bytes
- *
- * Advance a point of the associated number of bytes (not UTF8 chars)
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlXPtrAdvanceChar(xmlNodePtr *node, int *indx, int bytes) {
- xmlNodePtr cur;
- int pos;
- int len;
-
- if ((node == NULL) || (indx == NULL))
- return(-1);
- cur = *node;
- if ((cur == NULL) || (cur->type == XML_NAMESPACE_DECL))
- return(-1);
- pos = *indx;
-
- while (bytes >= 0) {
- /*
- * First position to the beginning of the first text node
- * corresponding to this point
- */
- while ((cur != NULL) &&
- ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE))) {
- if (pos > 0) {
- cur = xmlXPtrGetNthChild(cur, pos);
- pos = 0;
- } else {
- cur = xmlXPtrAdvanceNode(cur, NULL);
- pos = 0;
- }
- }
-
- if (cur == NULL) {
- *node = NULL;
- *indx = 0;
- return(-1);
- }
-
- /*
- * if there is no move needed return the current value.
- */
- if (pos == 0) pos = 1;
- if (bytes == 0) {
- *node = cur;
- *indx = pos;
- return(0);
- }
- /*
- * We should have a text (or cdata) node ...
- */
- len = 0;
- if ((cur->type != XML_ELEMENT_NODE) &&
- (cur->content != NULL)) {
- len = xmlStrlen(cur->content);
- }
- if (pos > len) {
- /* Strange, the indx in the text node is greater than it's len */
- STRANGE
- pos = len;
- }
- if (pos + bytes >= len) {
- bytes -= (len - pos);
- cur = xmlXPtrAdvanceNode(cur, NULL);
- pos = 0;
- } else if (pos + bytes < len) {
- pos += bytes;
- *node = cur;
- *indx = pos;
- return(0);
- }
- }
- return(-1);
-}
-
-/**
- * xmlXPtrMatchString:
- * @string: the string to search
- * @start: the start textnode
- * @startindex: the start index
- * @end: the end textnode IN/OUT
- * @endindex: the end index IN/OUT
- *
- * Check whether the document contains @string at the position
- * (@start, @startindex) and limited by the (@end, @endindex) point
- *
- * Returns -1 in case of failure, 0 if not found, 1 if found in which case
- * (@start, @startindex) will indicate the position of the beginning
- * of the range and (@end, @endindex) will indicate the end
- * of the range
- */
-static int
-xmlXPtrMatchString(const xmlChar *string, xmlNodePtr start, int startindex,
- xmlNodePtr *end, int *endindex) {
- xmlNodePtr cur;
- int pos; /* 0 based */
- int len; /* in bytes */
- int stringlen; /* in bytes */
- int match;
-
- if (string == NULL)
- return(-1);
- if ((start == NULL) || (start->type == XML_NAMESPACE_DECL))
- return(-1);
- if ((end == NULL) || (*end == NULL) ||
- ((*end)->type == XML_NAMESPACE_DECL) || (endindex == NULL))
- return(-1);
- cur = start;
- pos = startindex - 1;
- stringlen = xmlStrlen(string);
-
- while (stringlen > 0) {
- if ((cur == *end) && (pos + stringlen > *endindex))
- return(0);
-
- if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
- len = xmlStrlen(cur->content);
- if (len >= pos + stringlen) {
- match = (!xmlStrncmp(&cur->content[pos], string, stringlen));
- if (match) {
-#ifdef DEBUG_RANGES
- xmlGenericError(xmlGenericErrorContext,
- "found range %d bytes at index %d of ->",
- stringlen, pos + 1);
- xmlDebugDumpString(stdout, cur->content);
- xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
- *end = cur;
- *endindex = pos + stringlen;
- return(1);
- } else {
- return(0);
- }
- } else {
- int sub = len - pos;
- match = (!xmlStrncmp(&cur->content[pos], string, sub));
- if (match) {
-#ifdef DEBUG_RANGES
- xmlGenericError(xmlGenericErrorContext,
- "found subrange %d bytes at index %d of ->",
- sub, pos + 1);
- xmlDebugDumpString(stdout, cur->content);
- xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
- string = &string[sub];
- stringlen -= sub;
- } else {
- return(0);
- }
- }
- }
- cur = xmlXPtrAdvanceNode(cur, NULL);
- if (cur == NULL)
- return(0);
- pos = 0;
- }
- return(1);
-}
-
-/**
- * xmlXPtrSearchString:
- * @string: the string to search
- * @start: the start textnode IN/OUT
- * @startindex: the start index IN/OUT
- * @end: the end textnode
- * @endindex: the end index
- *
- * Search the next occurrence of @string within the document content
- * until the (@end, @endindex) point is reached
- *
- * Returns -1 in case of failure, 0 if not found, 1 if found in which case
- * (@start, @startindex) will indicate the position of the beginning
- * of the range and (@end, @endindex) will indicate the end
- * of the range
- */
-static int
-xmlXPtrSearchString(const xmlChar *string, xmlNodePtr *start, int *startindex,
- xmlNodePtr *end, int *endindex) {
- xmlNodePtr cur;
- const xmlChar *str;
- int pos; /* 0 based */
- int len; /* in bytes */
- xmlChar first;
-
- if (string == NULL)
- return(-1);
- if ((start == NULL) || (*start == NULL) ||
- ((*start)->type == XML_NAMESPACE_DECL) || (startindex == NULL))
- return(-1);
- if ((end == NULL) || (endindex == NULL))
- return(-1);
- cur = *start;
- pos = *startindex - 1;
- first = string[0];
-
- while (cur != NULL) {
- if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) {
- len = xmlStrlen(cur->content);
- while (pos <= len) {
- if (first != 0) {
- str = xmlStrchr(&cur->content[pos], first);
- if (str != NULL) {
- pos = (str - (xmlChar *)(cur->content));
-#ifdef DEBUG_RANGES
- xmlGenericError(xmlGenericErrorContext,
- "found '%c' at index %d of ->",
- first, pos + 1);
- xmlDebugDumpString(stdout, cur->content);
- xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
- if (xmlXPtrMatchString(string, cur, pos + 1,
- end, endindex)) {
- *start = cur;
- *startindex = pos + 1;
- return(1);
- }
- pos++;
- } else {
- pos = len + 1;
- }
- } else {
- /*
- * An empty string is considered to match before each
- * character of the string-value and after the final
- * character.
- */
-#ifdef DEBUG_RANGES
- xmlGenericError(xmlGenericErrorContext,
- "found '' at index %d of ->",
- pos + 1);
- xmlDebugDumpString(stdout, cur->content);
- xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
- *start = cur;
- *startindex = pos + 1;
- *end = cur;
- *endindex = pos + 1;
- return(1);
- }
- }
- }
- if ((cur == *end) && (pos >= *endindex))
- return(0);
- cur = xmlXPtrAdvanceNode(cur, NULL);
- if (cur == NULL)
- return(0);
- pos = 1;
- }
- return(0);
-}
-
-/**
- * xmlXPtrGetLastChar:
- * @node: the node
- * @index: the index
- *
- * Computes the point coordinates of the last char of this point
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlXPtrGetLastChar(xmlNodePtr *node, int *indx) {
- xmlNodePtr cur;
- int pos, len = 0;
-
- if ((node == NULL) || (*node == NULL) ||
- ((*node)->type == XML_NAMESPACE_DECL) || (indx == NULL))
- return(-1);
- cur = *node;
- pos = *indx;
-
- if ((cur->type == XML_ELEMENT_NODE) ||
- (cur->type == XML_DOCUMENT_NODE) ||
- (cur->type == XML_HTML_DOCUMENT_NODE)) {
- if (pos > 0) {
- cur = xmlXPtrGetNthChild(cur, pos);
- }
- }
- while (cur != NULL) {
- if (cur->last != NULL)
- cur = cur->last;
- else if ((cur->type != XML_ELEMENT_NODE) &&
- (cur->content != NULL)) {
- len = xmlStrlen(cur->content);
- break;
- } else {
- return(-1);
- }
- }
- if (cur == NULL)
- return(-1);
- *node = cur;
- *indx = len;
- return(0);
-}
-
-/**
- * xmlXPtrGetStartPoint:
- * @obj: an range
- * @node: the resulting node
- * @indx: the resulting index
- *
- * read the object and return the start point coordinates.
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlXPtrGetStartPoint(xmlXPathObjectPtr obj, xmlNodePtr *node, int *indx) {
- if ((obj == NULL) || (node == NULL) || (indx == NULL))
- return(-1);
-
- switch (obj->type) {
- case XPATH_POINT:
- *node = obj->user;
- if (obj->index <= 0)
- *indx = 0;
- else
- *indx = obj->index;
- return(0);
- case XPATH_RANGE:
- *node = obj->user;
- if (obj->index <= 0)
- *indx = 0;
- else
- *indx = obj->index;
- return(0);
- default:
- break;
- }
- return(-1);
-}
-
-/**
- * xmlXPtrGetEndPoint:
- * @obj: an range
- * @node: the resulting node
- * @indx: the resulting indx
- *
- * read the object and return the end point coordinates.
- *
- * Returns -1 in case of failure, 0 otherwise
- */
-static int
-xmlXPtrGetEndPoint(xmlXPathObjectPtr obj, xmlNodePtr *node, int *indx) {
- if ((obj == NULL) || (node == NULL) || (indx == NULL))
- return(-1);
-
- switch (obj->type) {
- case XPATH_POINT:
- *node = obj->user;
- if (obj->index <= 0)
- *indx = 0;
- else
- *indx = obj->index;
- return(0);
- case XPATH_RANGE:
- *node = obj->user;
- if (obj->index <= 0)
- *indx = 0;
- else
- *indx = obj->index;
- return(0);
- default:
- break;
- }
- return(-1);
-}
-
-/**
- * xmlXPtrStringRangeFunction:
- * @ctxt: the XPointer Parser context
- * @nargs: the number of args
- *
- * Function implementing the string-range() function
- * range as described in 5.4.2
- *
- * ------------------------------
- * [Definition: For each location in the location-set argument,
- * string-range returns a set of string ranges, a set of substrings in a
- * string. Specifically, the string-value of the location is searched for
- * substrings that match the string argument, and the resulting location-set
- * will contain a range location for each non-overlapping match.]
- * An empty string is considered to match before each character of the
- * string-value and after the final character. Whitespace in a string
- * is matched literally, with no normalization except that provided by
- * XML for line ends. The third argument gives the position of the first
- * character to be in the resulting range, relative to the start of the
- * match. The default value is 1, which makes the range start immediately
- * before the first character of the matched string. The fourth argument
- * gives the number of characters in the range; the default is that the
- * range extends to the end of the matched string.
- *
- * Element boundaries, as well as entire embedded nodes such as processing
- * instructions and comments, are ignored as defined in [XPath].
- *
- * If the string in the second argument is not found in the string-value
- * of the location, or if a value in the third or fourth argument indicates
- * a string that is beyond the beginning or end of the document, the
- * expression fails.
- *
- * The points of the range-locations in the returned location-set will
- * all be character points.
- * ------------------------------
- */
-static void
-xmlXPtrStringRangeFunction(xmlXPathParserContextPtr ctxt, int nargs) {
- int i, startindex, endindex = 0, fendindex;
- xmlNodePtr start, end = 0, fend;
- xmlXPathObjectPtr set;
- xmlLocationSetPtr oldset;
- xmlLocationSetPtr newset;
- xmlXPathObjectPtr string;
- xmlXPathObjectPtr position = NULL;
- xmlXPathObjectPtr number = NULL;
- int found, pos = 0, num = 0;
-
- /*
- * Grab the arguments
- */
- if ((nargs < 2) || (nargs > 4))
- XP_ERROR(XPATH_INVALID_ARITY);
-
- if (nargs >= 4) {
- CHECK_TYPE(XPATH_NUMBER);
- number = valuePop(ctxt);
- if (number != NULL)
- num = (int) number->floatval;
- }
- if (nargs >= 3) {
- CHECK_TYPE(XPATH_NUMBER);
- position = valuePop(ctxt);
- if (position != NULL)
- pos = (int) position->floatval;
- }
- CHECK_TYPE(XPATH_STRING);
- string = valuePop(ctxt);
- if ((ctxt->value == NULL) ||
- ((ctxt->value->type != XPATH_LOCATIONSET) &&
- (ctxt->value->type != XPATH_NODESET)))
- XP_ERROR(XPATH_INVALID_TYPE)
-
- set = valuePop(ctxt);
- newset = xmlXPtrLocationSetCreate(NULL);
- if (newset == NULL) {
- xmlXPathFreeObject(set);
- XP_ERROR(XPATH_MEMORY_ERROR);
- }
- if (set->nodesetval == NULL) {
- goto error;
- }
- if (set->type == XPATH_NODESET) {
- xmlXPathObjectPtr tmp;
-
- /*
- * First convert to a location set
- */
- tmp = xmlXPtrNewLocationSetNodeSet(set->nodesetval);
- xmlXPathFreeObject(set);
- if (tmp == NULL)
- XP_ERROR(XPATH_MEMORY_ERROR)
- set = tmp;
- }
- oldset = (xmlLocationSetPtr) set->user;
-
- /*
- * The loop is to search for each element in the location set
- * the list of location set corresponding to that search
- */
- for (i = 0;i < oldset->locNr;i++) {
-#ifdef DEBUG_RANGES
- xmlXPathDebugDumpObject(stdout, oldset->locTab[i], 0);
-#endif
-
- xmlXPtrGetStartPoint(oldset->locTab[i], &start, &startindex);
- xmlXPtrGetEndPoint(oldset->locTab[i], &end, &endindex);
- xmlXPtrAdvanceChar(&start, &startindex, 0);
- xmlXPtrGetLastChar(&end, &endindex);
-
-#ifdef DEBUG_RANGES
- xmlGenericError(xmlGenericErrorContext,
- "from index %d of ->", startindex);
- xmlDebugDumpString(stdout, start->content);
- xmlGenericError(xmlGenericErrorContext, "\n");
- xmlGenericError(xmlGenericErrorContext,
- "to index %d of ->", endindex);
- xmlDebugDumpString(stdout, end->content);
- xmlGenericError(xmlGenericErrorContext, "\n");
-#endif
- do {
- fend = end;
- fendindex = endindex;
- found = xmlXPtrSearchString(string->stringval, &start, &startindex,
- &fend, &fendindex);
- if (found == 1) {
- if (position == NULL) {
- xmlXPtrLocationSetAdd(newset,
- xmlXPtrNewRange(start, startindex, fend, fendindex));
- } else if (xmlXPtrAdvanceChar(&start, &startindex,
- pos - 1) == 0) {
- if ((number != NULL) && (num > 0)) {
- int rindx;
- xmlNodePtr rend;
- rend = start;
- rindx = startindex - 1;
- if (xmlXPtrAdvanceChar(&rend, &rindx,
- num) == 0) {
- xmlXPtrLocationSetAdd(newset,
- xmlXPtrNewRange(start, startindex,
- rend, rindx));
- }
- } else if ((number != NULL) && (num <= 0)) {
- xmlXPtrLocationSetAdd(newset,
- xmlXPtrNewRange(start, startindex,
- start, startindex));
- } else {
- xmlXPtrLocationSetAdd(newset,
- xmlXPtrNewRange(start, startindex,
- fend, fendindex));
- }
- }
- start = fend;
- startindex = fendindex;
- if (string->stringval[0] == 0)
- startindex++;
- }
- } while (found == 1);
- }
-
- /*
- * Save the new value and cleanup
- */
-error:
- valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
- xmlXPathFreeObject(set);
- xmlXPathFreeObject(string);
- if (position) xmlXPathFreeObject(position);
- if (number) xmlXPathFreeObject(number);
-}
-
-/**
- * xmlXPtrEvalRangePredicate:
- * @ctxt: the XPointer Parser context
- *
- * [8] Predicate ::= '[' PredicateExpr ']'
- * [9] PredicateExpr ::= Expr
- *
- * Evaluate a predicate as in xmlXPathEvalPredicate() but for
- * a Location Set instead of a node set
- */
-void
-xmlXPtrEvalRangePredicate(xmlXPathParserContextPtr ctxt) {
- const xmlChar *cur;
- xmlXPathObjectPtr res;
- xmlXPathObjectPtr obj, tmp;
- xmlLocationSetPtr newset = NULL;
- xmlLocationSetPtr oldset;
- int i;
-
- if (ctxt == NULL) return;
-
- SKIP_BLANKS;
- if (CUR != '[') {
- XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
- }
- NEXT;
- SKIP_BLANKS;
-
- /*
- * Extract the old set, and then evaluate the result of the
- * expression for all the element in the set. use it to grow
- * up a new set.
- */
- CHECK_TYPE(XPATH_LOCATIONSET);
- obj = valuePop(ctxt);
- oldset = obj->user;
- ctxt->context->node = NULL;
-
- if ((oldset == NULL) || (oldset->locNr == 0)) {
- ctxt->context->contextSize = 0;
- ctxt->context->proximityPosition = 0;
- xmlXPathEvalExpr(ctxt);
- res = valuePop(ctxt);
- if (res != NULL)
- xmlXPathFreeObject(res);
- valuePush(ctxt, obj);
- CHECK_ERROR;
- } else {
- /*
- * Save the expression pointer since we will have to evaluate
- * it multiple times. Initialize the new set.
- */
- cur = ctxt->cur;
- newset = xmlXPtrLocationSetCreate(NULL);
-
- for (i = 0; i < oldset->locNr; i++) {
- ctxt->cur = cur;
-
- /*
- * Run the evaluation with a node list made of a single item
- * in the nodeset.
- */
- ctxt->context->node = oldset->locTab[i]->user;
- tmp = xmlXPathNewNodeSet(ctxt->context->node);
- valuePush(ctxt, tmp);
- ctxt->context->contextSize = oldset->locNr;
- ctxt->context->proximityPosition = i + 1;
-
- xmlXPathEvalExpr(ctxt);
- CHECK_ERROR;
-
- /*
- * The result of the evaluation need to be tested to
- * decided whether the filter succeeded or not
- */
- res = valuePop(ctxt);
- if (xmlXPathEvaluatePredicateResult(ctxt, res)) {
- xmlXPtrLocationSetAdd(newset,
- xmlXPathObjectCopy(oldset->locTab[i]));
- }
-
- /*
- * Cleanup
- */
- if (res != NULL)
- xmlXPathFreeObject(res);
- if (ctxt->value == tmp) {
- res = valuePop(ctxt);
- xmlXPathFreeObject(res);
- }
-
- ctxt->context->node = NULL;
- }
-
- /*
- * The result is used as the new evaluation set.
- */
- xmlXPathFreeObject(obj);
- ctxt->context->node = NULL;
- ctxt->context->contextSize = -1;
- ctxt->context->proximityPosition = -1;
- valuePush(ctxt, xmlXPtrWrapLocationSet(newset));
- }
- if (CUR != ']') {
- XP_ERROR(XPATH_INVALID_PREDICATE_ERROR);
- }
-
- NEXT;
- SKIP_BLANKS;
-}
-
-#define bottom_xpointer
-#include "elfgcchack.h"
-#endif
-
diff --git a/external/libxml2_android/jni/libxml2/xzlib.c b/external/libxml2_android/jni/libxml2/xzlib.c
deleted file mode 100644
index 782957f6..00000000
--- a/external/libxml2_android/jni/libxml2/xzlib.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/**
- * xzlib.c: front end for the transparent suport of lzma compression
- * at the I/O layer, based on an example file from lzma project
- *
- * See Copyright for the status of this software.
- *
- * Anders F Bjorklund <afb@users.sourceforge.net>
- */
-#define IN_LIBXML
-#include "libxml.h"
-#ifdef LIBXML_LZMA_ENABLED
-
-#include <string.h>
-#ifdef HAVE_ERRNO_H
-#include <errno.h>
-#endif
-
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_ZLIB_H
-#include <zlib.h>
-#endif
-#ifdef HAVE_LZMA_H
-#include <lzma.h>
-#endif
-
-#include "xzlib.h"
-#include <libxml/xmlmemory.h>
-
-/* values for xz_state how */
-#define LOOK 0 /* look for a gzip/lzma header */
-#define COPY 1 /* copy input directly */
-#define GZIP 2 /* decompress a gzip stream */
-#define LZMA 3 /* decompress a lzma stream */
-
-/* internal lzma file state data structure */
-typedef struct {
- int mode; /* see lzma modes above */
- int fd; /* file descriptor */
- char *path; /* path or fd for error messages */
- uint64_t pos; /* current position in uncompressed data */
- unsigned int size; /* buffer size, zero if not allocated yet */
- unsigned int want; /* requested buffer size, default is BUFSIZ */
- unsigned char *in; /* input buffer */
- unsigned char *out; /* output buffer (double-sized when reading) */
- unsigned char *next; /* next output data to deliver or write */
- unsigned int have; /* amount of output data unused at next */
- int eof; /* true if end of input file reached */
- uint64_t start; /* where the lzma data started, for rewinding */
- uint64_t raw; /* where the raw data started, for seeking */
- int how; /* 0: get header, 1: copy, 2: decompress */
- int direct; /* true if last read direct, false if lzma */
- /* seek request */
- uint64_t skip; /* amount to skip (already rewound if backwards) */
- int seek; /* true if seek request pending */
- /* error information */
- int err; /* error code */
- char *msg; /* error message */
- /* lzma stream */
- int init; /* is the iniflate stream initialized */
- lzma_stream strm; /* stream structure in-place (not a pointer) */
- char padding1[32]; /* padding allowing to cope with possible
- extensions of above structure without
- too much side effect */
-#ifdef HAVE_ZLIB_H
- /* zlib inflate or deflate stream */
- z_stream zstrm; /* stream structure in-place (not a pointer) */
-#endif
- char padding2[32]; /* padding allowing to cope with possible
- extensions of above structure without
- too much side effect */
-} xz_state, *xz_statep;
-
-static void
-xz_error(xz_statep state, int err, const char *msg)
-{
- /* free previously allocated message and clear */
- if (state->msg != NULL) {
- if (state->err != LZMA_MEM_ERROR)
- xmlFree(state->msg);
- state->msg = NULL;
- }
-
- /* set error code, and if no message, then done */
- state->err = err;
- if (msg == NULL)
- return;
-
- /* for an out of memory error, save as static string */
- if (err == LZMA_MEM_ERROR) {
- state->msg = (char *) msg;
- return;
- }
-
- /* construct error message with path */
- if ((state->msg =
- xmlMalloc(strlen(state->path) + strlen(msg) + 3)) == NULL) {
- state->err = LZMA_MEM_ERROR;
- state->msg = (char *) "out of memory";
- return;
- }
- strcpy(state->msg, state->path);
- strcat(state->msg, ": ");
- strcat(state->msg, msg);
- return;
-}
-
-static void
-xz_reset(xz_statep state)
-{
- state->have = 0; /* no output data available */
- state->eof = 0; /* not at end of file */
- state->how = LOOK; /* look for gzip header */
- state->direct = 1; /* default for empty file */
- state->seek = 0; /* no seek request pending */
- xz_error(state, LZMA_OK, NULL); /* clear error */
- state->pos = 0; /* no uncompressed data yet */
- state->strm.avail_in = 0; /* no input data yet */
-#ifdef HAVE_ZLIB_H
- state->zstrm.avail_in = 0; /* no input data yet */
-#endif
-}
-
-static xzFile
-xz_open(const char *path, int fd, const char *mode ATTRIBUTE_UNUSED)
-{
- xz_statep state;
-
- /* allocate xzFile structure to return */
- state = xmlMalloc(sizeof(xz_state));
- if (state == NULL)
- return NULL;
- state->size = 0; /* no buffers allocated yet */
- state->want = BUFSIZ; /* requested buffer size */
- state->msg = NULL; /* no error message yet */
- state->init = 0; /* initialization of zlib data */
-
- /* save the path name for error messages */
- state->path = xmlMalloc(strlen(path) + 1);
- if (state->path == NULL) {
- xmlFree(state);
- return NULL;
- }
- strcpy(state->path, path);
-
- /* open the file with the appropriate mode (or just use fd) */
- state->fd = fd != -1 ? fd : open(path,
-#ifdef O_LARGEFILE
- O_LARGEFILE |
-#endif
-#ifdef O_BINARY
- O_BINARY |
-#endif
- O_RDONLY, 0666);
- if (state->fd == -1) {
- xmlFree(state->path);
- xmlFree(state);
- return NULL;
- }
-
- /* save the current position for rewinding (only if reading) */
- state->start = lseek(state->fd, 0, SEEK_CUR);
- if (state->start == (uint64_t) - 1)
- state->start = 0;
-
- /* initialize stream */
- xz_reset(state);
-
- /* return stream */
- return (xzFile) state;
-}
-
-static int
-xz_compressed(xzFile f) {
- xz_statep state;
-
- if (f == NULL)
- return(-1);
- state = (xz_statep) f;
- if (state->init <= 0)
- return(-1);
-
- switch (state->how) {
- case COPY:
- return(0);
- case GZIP:
- case LZMA:
- return(1);
- }
- return(-1);
-}
-
-xzFile
-__libxml2_xzopen(const char *path, const char *mode)
-{
- return xz_open(path, -1, mode);
-}
-
-int
-__libxml2_xzcompressed(xzFile f) {
- return xz_compressed(f);
-}
-
-xzFile
-__libxml2_xzdopen(int fd, const char *mode)
-{
- char *path; /* identifier for error messages */
- xzFile xz;
-
- if (fd == -1 || (path = xmlMalloc(7 + 3 * sizeof(int))) == NULL)
- return NULL;
- sprintf(path, "<fd:%d>", fd); /* for debugging */
- xz = xz_open(path, fd, mode);
- xmlFree(path);
- return xz;
-}
-
-static int
-xz_load(xz_statep state, unsigned char *buf, unsigned int len,
- unsigned int *have)
-{
- int ret;
-
- *have = 0;
- do {
- ret = read(state->fd, buf + *have, len - *have);
- if (ret <= 0)
- break;
- *have += ret;
- } while (*have < len);
- if (ret < 0) {
- xz_error(state, -1, strerror(errno));
- return -1;
- }
- if (ret == 0)
- state->eof = 1;
- return 0;
-}
-
-static int
-xz_avail(xz_statep state)
-{
- lzma_stream *strm = &(state->strm);
-
- if (state->err != LZMA_OK)
- return -1;
- if (state->eof == 0) {
- /* avail_in is size_t, which is not necessary sizeof(unsigned) */
- unsigned tmp = strm->avail_in;
-
- if (xz_load(state, state->in, state->size, &tmp) == -1) {
- strm->avail_in = tmp;
- return -1;
- }
- strm->avail_in = tmp;
- strm->next_in = state->in;
- }
- return 0;
-}
-
-#ifdef HAVE_ZLIB_H
-static int
-xz_avail_zstrm(xz_statep state)
-{
- int ret;
- state->strm.avail_in = state->zstrm.avail_in;
- state->strm.next_in = state->zstrm.next_in;
- ret = xz_avail(state);
- state->zstrm.avail_in = (uInt) state->strm.avail_in;
- state->zstrm.next_in = (Bytef *) state->strm.next_in;
- return ret;
-}
-#endif
-
-static int
-is_format_xz(xz_statep state)
-{
- lzma_stream *strm = &(state->strm);
-
- return strm->avail_in >= 6 && memcmp(state->in, "\3757zXZ", 6) == 0;
-}
-
-static int
-is_format_lzma(xz_statep state)
-{
- lzma_stream *strm = &(state->strm);
-
- lzma_filter filter;
- lzma_options_lzma *opt;
- uint32_t dict_size;
- uint64_t uncompressed_size;
- size_t i;
-
- if (strm->avail_in < 13)
- return 0;
-
- filter.id = LZMA_FILTER_LZMA1;
- if (lzma_properties_decode(&filter, NULL, state->in, 5) != LZMA_OK)
- return 0;
-
- opt = filter.options;
- dict_size = opt->dict_size;
- free(opt); /* we can't use xmlFree on a string returned by zlib */
-
- /* A hack to ditch tons of false positives: We allow only dictionary
- * sizes that are 2^n or 2^n + 2^(n-1) or UINT32_MAX. LZMA_Alone
- * created only files with 2^n, but accepts any dictionary size.
- * If someone complains, this will be reconsidered.
- */
- if (dict_size != UINT32_MAX) {
- uint32_t d = dict_size - 1;
-
- d |= d >> 2;
- d |= d >> 3;
- d |= d >> 4;
- d |= d >> 8;
- d |= d >> 16;
- ++d;
- if (d != dict_size || dict_size == 0)
- return 0;
- }
-
- /* Another hack to ditch false positives: Assume that if the
- * uncompressed size is known, it must be less than 256 GiB.
- * Again, if someone complains, this will be reconsidered.
- */
- uncompressed_size = 0;
- for (i = 0; i < 8; ++i)
- uncompressed_size |= (uint64_t) (state->in[5 + i]) << (i * 8);
-
- if (uncompressed_size != UINT64_MAX
- && uncompressed_size > (UINT64_C(1) << 38))
- return 0;
-
- return 1;
-}
-
-#ifdef HAVE_ZLIB_H
-
-/* Get next byte from input, or -1 if end or error. */
-#define NEXT() ((strm->avail_in == 0 && xz_avail(state) == -1) ? -1 : \
- (strm->avail_in == 0 ? -1 : \
- (strm->avail_in--, *(strm->next_in)++)))
-/* Same thing, but from zstrm */
-#define NEXTZ() ((strm->avail_in == 0 && xz_avail_zstrm(state) == -1) ? -1 : \
- (strm->avail_in == 0 ? -1 : \
- (strm->avail_in--, *(strm->next_in)++)))
-
-/* Get a four-byte little-endian integer and return 0 on success and the value
- in *ret. Otherwise -1 is returned and *ret is not modified. */
-static int
-gz_next4(xz_statep state, unsigned long *ret)
-{
- int ch;
- unsigned long val;
- z_streamp strm = &(state->zstrm);
-
- val = NEXTZ();
- val += (unsigned) NEXTZ() << 8;
- val += (unsigned long) NEXTZ() << 16;
- ch = NEXTZ();
- if (ch == -1)
- return -1;
- val += (unsigned long) ch << 24;
- *ret = val;
- return 0;
-}
-#endif
-
-static int
-xz_head(xz_statep state)
-{
- lzma_stream *strm = &(state->strm);
- lzma_stream init = LZMA_STREAM_INIT;
- int flags;
- unsigned len;
-
- /* allocate read buffers and inflate memory */
- if (state->size == 0) {
- /* allocate buffers */
- state->in = xmlMalloc(state->want);
- state->out = xmlMalloc(state->want << 1);
- if (state->in == NULL || state->out == NULL) {
- if (state->out != NULL)
- xmlFree(state->out);
- if (state->in != NULL)
- xmlFree(state->in);
- xz_error(state, LZMA_MEM_ERROR, "out of memory");
- return -1;
- }
- state->size = state->want;
-
- /* allocate decoder memory */
- state->strm = init;
- state->strm.avail_in = 0;
- state->strm.next_in = NULL;
- if (lzma_auto_decoder(&state->strm, UINT64_MAX, 0) != LZMA_OK) {
- xmlFree(state->out);
- xmlFree(state->in);
- state->size = 0;
- xz_error(state, LZMA_MEM_ERROR, "out of memory");
- return -1;
- }
-#ifdef HAVE_ZLIB_H
- /* allocate inflate memory */
- state->zstrm.zalloc = Z_NULL;
- state->zstrm.zfree = Z_NULL;
- state->zstrm.opaque = Z_NULL;
- state->zstrm.avail_in = 0;
- state->zstrm.next_in = Z_NULL;
- if (state->init == 0) {
- if (inflateInit2(&(state->zstrm), -15) != Z_OK) {/* raw inflate */
- xmlFree(state->out);
- xmlFree(state->in);
- state->size = 0;
- xz_error(state, LZMA_MEM_ERROR, "out of memory");
- return -1;
- }
- state->init = 1;
- }
-#endif
- }
-
- /* get some data in the input buffer */
- if (strm->avail_in == 0) {
- if (xz_avail(state) == -1)
- return -1;
- if (strm->avail_in == 0)
- return 0;
- }
-
- /* look for the xz magic header bytes */
- if (is_format_xz(state) || is_format_lzma(state)) {
- state->how = LZMA;
- state->direct = 0;
- return 0;
- }
-#ifdef HAVE_ZLIB_H
- /* look for the gzip magic header bytes 31 and 139 */
- if (strm->next_in[0] == 31) {
- strm->avail_in--;
- strm->next_in++;
- if (strm->avail_in == 0 && xz_avail(state) == -1)
- return -1;
- if (strm->avail_in && strm->next_in[0] == 139) {
- /* we have a gzip header, woo hoo! */
- strm->avail_in--;
- strm->next_in++;
-
- /* skip rest of header */
- if (NEXT() != 8) { /* compression method */
- xz_error(state, LZMA_DATA_ERROR,
- "unknown compression method");
- return -1;
- }
- flags = NEXT();
- if (flags & 0xe0) { /* reserved flag bits */
- xz_error(state, LZMA_DATA_ERROR,
- "unknown header flags set");
- return -1;
- }
- NEXT(); /* modification time */
- NEXT();
- NEXT();
- NEXT();
- NEXT(); /* extra flags */
- NEXT(); /* operating system */
- if (flags & 4) { /* extra field */
- len = (unsigned) NEXT();
- len += (unsigned) NEXT() << 8;
- while (len--)
- if (NEXT() < 0)
- break;
- }
- if (flags & 8) /* file name */
- while (NEXT() > 0) ;
- if (flags & 16) /* comment */
- while (NEXT() > 0) ;
- if (flags & 2) { /* header crc */
- NEXT();
- NEXT();
- }
- /* an unexpected end of file is not checked for here -- it will be
- * noticed on the first request for uncompressed data */
-
- /* set up for decompression */
- inflateReset(&state->zstrm);
- state->zstrm.adler = crc32(0L, Z_NULL, 0);
- state->how = GZIP;
- state->direct = 0;
- return 0;
- } else {
- /* not a gzip file -- save first byte (31) and fall to raw i/o */
- state->out[0] = 31;
- state->have = 1;
- }
- }
-#endif
-
- /* doing raw i/o, save start of raw data for seeking, copy any leftover
- * input to output -- this assumes that the output buffer is larger than
- * the input buffer, which also assures space for gzungetc() */
- state->raw = state->pos;
- state->next = state->out;
- if (strm->avail_in) {
- memcpy(state->next + state->have, strm->next_in, strm->avail_in);
- state->have += strm->avail_in;
- strm->avail_in = 0;
- }
- state->how = COPY;
- state->direct = 1;
- return 0;
-}
-
-static int
-xz_decomp(xz_statep state)
-{
- int ret;
- unsigned had;
- unsigned long crc, len;
- lzma_stream *strm = &(state->strm);
-
- lzma_action action = LZMA_RUN;
-
- /* fill output buffer up to end of deflate stream */
- had = strm->avail_out;
- do {
- /* get more input for inflate() */
- if (strm->avail_in == 0 && xz_avail(state) == -1)
- return -1;
- if (strm->avail_in == 0) {
- xz_error(state, LZMA_DATA_ERROR, "unexpected end of file");
- return -1;
- }
- if (state->eof)
- action = LZMA_FINISH;
-
- /* decompress and handle errors */
-#ifdef HAVE_ZLIB_H
- if (state->how == GZIP) {
- state->zstrm.avail_in = (uInt) state->strm.avail_in;
- state->zstrm.next_in = (Bytef *) state->strm.next_in;
- state->zstrm.avail_out = (uInt) state->strm.avail_out;
- state->zstrm.next_out = (Bytef *) state->strm.next_out;
- ret = inflate(&state->zstrm, Z_NO_FLUSH);
- if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
- xz_error(state, Z_STREAM_ERROR,
- "internal error: inflate stream corrupt");
- return -1;
- }
- if (ret == Z_MEM_ERROR)
- ret = LZMA_MEM_ERROR;
- if (ret == Z_DATA_ERROR)
- ret = LZMA_DATA_ERROR;
- if (ret == Z_STREAM_END)
- ret = LZMA_STREAM_END;
- state->strm.avail_in = state->zstrm.avail_in;
- state->strm.next_in = state->zstrm.next_in;
- state->strm.avail_out = state->zstrm.avail_out;
- state->strm.next_out = state->zstrm.next_out;
- } else /* state->how == LZMA */
-#endif
- ret = lzma_code(strm, action);
- if (ret == LZMA_MEM_ERROR) {
- xz_error(state, LZMA_MEM_ERROR, "out of memory");
- return -1;
- }
- if (ret == LZMA_DATA_ERROR) {
- xz_error(state, LZMA_DATA_ERROR, "compressed data error");
- return -1;
- }
- if (ret == LZMA_PROG_ERROR) {
- xz_error(state, LZMA_PROG_ERROR, "compression error");
- return -1;
- }
- } while (strm->avail_out && ret != LZMA_STREAM_END);
-
- /* update available output and crc check value */
- state->have = had - strm->avail_out;
- state->next = strm->next_out - state->have;
-#ifdef HAVE_ZLIB_H
- state->zstrm.adler =
- crc32(state->zstrm.adler, state->next, state->have);
-#endif
-
- if (ret == LZMA_STREAM_END) {
-#ifdef HAVE_ZLIB_H
- if (state->how == GZIP) {
- if (gz_next4(state, &crc) == -1 || gz_next4(state, &len) == -1) {
- xz_error(state, LZMA_DATA_ERROR, "unexpected end of file");
- return -1;
- }
- if (crc != state->zstrm.adler) {
- xz_error(state, LZMA_DATA_ERROR, "incorrect data check");
- return -1;
- }
- if (len != (state->zstrm.total_out & 0xffffffffL)) {
- xz_error(state, LZMA_DATA_ERROR, "incorrect length check");
- return -1;
- }
- state->strm.avail_in = 0;
- state->strm.next_in = NULL;
- state->strm.avail_out = 0;
- state->strm.next_out = NULL;
- } else
-#endif
- if (strm->avail_in != 0 || !state->eof) {
- xz_error(state, LZMA_DATA_ERROR, "trailing garbage");
- return -1;
- }
- state->how = LOOK; /* ready for next stream, once have is 0 (leave
- * state->direct unchanged to remember how) */
- }
-
- /* good decompression */
- return 0;
-}
-
-static int
-xz_make(xz_statep state)
-{
- lzma_stream *strm = &(state->strm);
-
- if (state->how == LOOK) { /* look for lzma / gzip header */
- if (xz_head(state) == -1)
- return -1;
- if (state->have) /* got some data from xz_head() */
- return 0;
- }
- if (state->how == COPY) { /* straight copy */
- if (xz_load(state, state->out, state->size << 1, &(state->have)) ==
- -1)
- return -1;
- state->next = state->out;
- } else if (state->how == LZMA || state->how == GZIP) { /* decompress */
- strm->avail_out = state->size << 1;
- strm->next_out = state->out;
- if (xz_decomp(state) == -1)
- return -1;
- }
- return 0;
-}
-
-static int
-xz_skip(xz_statep state, uint64_t len)
-{
- unsigned n;
-
- /* skip over len bytes or reach end-of-file, whichever comes first */
- while (len)
- /* skip over whatever is in output buffer */
- if (state->have) {
- n = (uint64_t) state->have > len ?
- (unsigned) len : state->have;
- state->have -= n;
- state->next += n;
- state->pos += n;
- len -= n;
- }
-
- /* output buffer empty -- return if we're at the end of the input */
- else if (state->eof && state->strm.avail_in == 0)
- break;
-
- /* need more data to skip -- load up output buffer */
- else {
- /* get more output, looking for header if required */
- if (xz_make(state) == -1)
- return -1;
- }
- return 0;
-}
-
-int
-__libxml2_xzread(xzFile file, void *buf, unsigned len)
-{
- unsigned got, n;
- xz_statep state;
- lzma_stream *strm;
-
- /* get internal structure */
- if (file == NULL)
- return -1;
- state = (xz_statep) file;
- strm = &(state->strm);
-
- /* check that we're reading and that there's no error */
- if (state->err != LZMA_OK)
- return -1;
-
- /* since an int is returned, make sure len fits in one, otherwise return
- * with an error (this avoids the flaw in the interface) */
- if ((int) len < 0) {
- xz_error(state, LZMA_BUF_ERROR,
- "requested length does not fit in int");
- return -1;
- }
-
- /* if len is zero, avoid unnecessary operations */
- if (len == 0)
- return 0;
-
- /* process a skip request */
- if (state->seek) {
- state->seek = 0;
- if (xz_skip(state, state->skip) == -1)
- return -1;
- }
-
- /* get len bytes to buf, or less than len if at the end */
- got = 0;
- do {
- /* first just try copying data from the output buffer */
- if (state->have) {
- n = state->have > len ? len : state->have;
- memcpy(buf, state->next, n);
- state->next += n;
- state->have -= n;
- }
-
- /* output buffer empty -- return if we're at the end of the input */
- else if (state->eof && strm->avail_in == 0)
- break;
-
- /* need output data -- for small len or new stream load up our output
- * buffer */
- else if (state->how == LOOK || len < (state->size << 1)) {
- /* get more output, looking for header if required */
- if (xz_make(state) == -1)
- return -1;
- continue; /* no progress yet -- go back to memcpy() above */
- /* the copy above assures that we will leave with space in the
- * output buffer, allowing at least one gzungetc() to succeed */
- }
-
- /* large len -- read directly into user buffer */
- else if (state->how == COPY) { /* read directly */
- if (xz_load(state, buf, len, &n) == -1)
- return -1;
- }
-
- /* large len -- decompress directly into user buffer */
- else { /* state->how == LZMA */
- strm->avail_out = len;
- strm->next_out = buf;
- if (xz_decomp(state) == -1)
- return -1;
- n = state->have;
- state->have = 0;
- }
-
- /* update progress */
- len -= n;
- buf = (char *) buf + n;
- got += n;
- state->pos += n;
- } while (len);
-
- /* return number of bytes read into user buffer (will fit in int) */
- return (int) got;
-}
-
-int
-__libxml2_xzclose(xzFile file)
-{
- int ret;
- xz_statep state;
-
- /* get internal structure */
- if (file == NULL)
- return LZMA_DATA_ERROR;
- state = (xz_statep) file;
-
- /* free memory and close file */
- if (state->size) {
- lzma_end(&(state->strm));
-#ifdef HAVE_ZLIB_H
- if (state->init == 1)
- inflateEnd(&(state->zstrm));
- state->init = 0;
-#endif
- xmlFree(state->out);
- xmlFree(state->in);
- }
- xmlFree(state->path);
- ret = close(state->fd);
- xmlFree(state);
- return ret ? ret : LZMA_OK;
-}
-#endif /* LIBXML_LZMA_ENABLED */
diff --git a/external/libxml2_android/jni/libxml2/xzlib.h b/external/libxml2_android/jni/libxml2/xzlib.h
deleted file mode 100644
index 29ba55e7..00000000
--- a/external/libxml2_android/jni/libxml2/xzlib.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * xzlib.h: header for the front end for the transparent suport of lzma
- * compression at the I/O layer
- *
- * See Copyright for the status of this software.
- *
- * Anders F Bjorklund <afb@users.sourceforge.net>
- */
-
-#ifndef LIBXML2_XZLIB_H
-#define LIBXML2_XZLIB_H
-typedef void *xzFile; /* opaque lzma file descriptor */
-
-xzFile __libxml2_xzopen(const char *path, const char *mode);
-xzFile __libxml2_xzdopen(int fd, const char *mode);
-int __libxml2_xzread(xzFile file, void *buf, unsigned len);
-int __libxml2_xzclose(xzFile file);
-int __libxml2_xzcompressed(xzFile f);
-#endif /* LIBXML2_XZLIB_H */
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/libxml2.a b/external/libxml2_android/obj/local/armeabi-v7a/libxml2.a
deleted file mode 100644
index 9afd8a28..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/libxml2.a
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/DOCBparser.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/DOCBparser.o
deleted file mode 100644
index 111225dd..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/DOCBparser.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/DOCBparser.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/DOCBparser.o.d
deleted file mode 100644
index ba9bb6c4..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/DOCBparser.o.d
+++ /dev/null
@@ -1,76 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/DOCBparser.o: jni/libxml2/DOCBparser.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/parser.h jni/libxml2/include/libxml/tree.h \
- jni/libxml2/include/libxml/xmlregexp.h jni/libxml2/include/libxml/dict.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/SAX.h \
- jni/libxml2/include/libxml/xlink.h jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/DOCBparser.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/DOCBparser.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLparser.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLparser.o
deleted file mode 100644
index 0f0ff4fb..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLparser.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLparser.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLparser.o.d
deleted file mode 100644
index 3c2a656f..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLparser.o.d
+++ /dev/null
@@ -1,83 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/HTMLparser.o: jni/libxml2/HTMLparser.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/HTMLtree.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/buf.h jni/libxml2/enc.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/HTMLtree.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/enc.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLtree.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLtree.o
deleted file mode 100644
index e6a5bcb1..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLtree.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLtree.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLtree.o.d
deleted file mode 100644
index 07afda1e..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/HTMLtree.o.d
+++ /dev/null
@@ -1,81 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/HTMLtree.o: jni/libxml2/HTMLtree.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/HTMLtree.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/buf.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/HTMLtree.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX.o
deleted file mode 100644
index bec1397a..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX.o.d
deleted file mode 100644
index 101e3578..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX.o.d
+++ /dev/null
@@ -1,84 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/SAX.o: jni/libxml2/SAX.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/debugXML.h jni/libxml2/include/libxml/xpath.h \
- jni/libxml2/include/libxml/uri.h jni/libxml2/include/libxml/HTMLtree.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/debugXML.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/HTMLtree.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX2.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX2.o
deleted file mode 100644
index 93349453..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX2.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX2.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX2.o.d
deleted file mode 100644
index d02559b7..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/SAX2.o.d
+++ /dev/null
@@ -1,84 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/SAX2.o: jni/libxml2/SAX2.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/debugXML.h jni/libxml2/include/libxml/xpath.h \
- jni/libxml2/include/libxml/uri.h jni/libxml2/include/libxml/HTMLtree.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/debugXML.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/HTMLtree.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/buf.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/buf.o
deleted file mode 100644
index 284dee75..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/buf.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/buf.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/buf.o.d
deleted file mode 100644
index 71cf9d0f..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/buf.o.d
+++ /dev/null
@@ -1,75 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/buf.o: jni/libxml2/buf.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/buf.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/c14n.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/c14n.o
deleted file mode 100644
index bd3a70fe..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/c14n.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/c14n.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/c14n.o.d
deleted file mode 100644
index 53914400..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/c14n.o.d
+++ /dev/null
@@ -1,76 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/c14n.o: jni/libxml2/c14n.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/xpathInternals.h \
- jni/libxml2/include/libxml/xpath.h jni/libxml2/include/libxml/c14n.h \
- jni/libxml2/buf.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/xpathInternals.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/c14n.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/catalog.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/catalog.o
deleted file mode 100644
index e9a320c2..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/catalog.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/catalog.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/catalog.o.d
deleted file mode 100644
index 00e122c1..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/catalog.o.d
+++ /dev/null
@@ -1,81 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/catalog.o: jni/libxml2/catalog.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/catalog.h jni/libxml2/buf.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/catalog.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/chvalid.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/chvalid.o
deleted file mode 100644
index 0a1685ac..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/chvalid.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/chvalid.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/chvalid.o.d
deleted file mode 100644
index 80ae6ffa..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/chvalid.o.d
+++ /dev/null
@@ -1,19 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/chvalid.o: jni/libxml2/chvalid.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/debugXML.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/debugXML.o
deleted file mode 100644
index dda744cd..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/debugXML.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/debugXML.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/debugXML.o.d
deleted file mode 100644
index 15539567..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/debugXML.o.d
+++ /dev/null
@@ -1,90 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/debugXML.o: jni/libxml2/debugXML.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/debugXML.h jni/libxml2/include/libxml/xpath.h \
- jni/libxml2/include/libxml/HTMLtree.h \
- jni/libxml2/include/libxml/xpathInternals.h \
- jni/libxml2/include/libxml/uri.h jni/libxml2/include/libxml/relaxng.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/debugXML.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/HTMLtree.h:
-
-jni/libxml2/include/libxml/xpathInternals.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/relaxng.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/dict.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/dict.o
deleted file mode 100644
index 83e593d2..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/dict.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/dict.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/dict.o.d
deleted file mode 100644
index 774b02fe..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/dict.o.d
+++ /dev/null
@@ -1,63 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/dict.o: jni/libxml2/dict.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/encoding.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/encoding.o
deleted file mode 100644
index 5d083438..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/encoding.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/encoding.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/encoding.o.d
deleted file mode 100644
index 46067a11..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/encoding.o.d
+++ /dev/null
@@ -1,71 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/encoding.o: jni/libxml2/encoding.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/tree.h \
- jni/libxml2/include/libxml/xmlregexp.h jni/libxml2/include/libxml/dict.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/HTMLparser.h jni/libxml2/buf.h \
- jni/libxml2/enc.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/enc.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/entities.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/entities.o
deleted file mode 100644
index 22f42a7e..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/entities.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/entities.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/entities.o.d
deleted file mode 100644
index 041160a2..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/entities.o.d
+++ /dev/null
@@ -1,76 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/entities.o: jni/libxml2/entities.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/save.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/save.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/error.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/error.o
deleted file mode 100644
index 998096da..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/error.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/error.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/error.o.d
deleted file mode 100644
index 55a40b52..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/error.o.d
+++ /dev/null
@@ -1,63 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/error.o: jni/libxml2/error.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/parser.h jni/libxml2/include/libxml/tree.h \
- jni/libxml2/include/libxml/xmlregexp.h jni/libxml2/include/libxml/dict.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/SAX.h \
- jni/libxml2/include/libxml/xlink.h jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/globals.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/globals.o
deleted file mode 100644
index f8161252..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/globals.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/globals.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/globals.o.d
deleted file mode 100644
index 127787f0..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/globals.o.d
+++ /dev/null
@@ -1,63 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/globals.o: jni/libxml2/globals.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/hash.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/hash.o
deleted file mode 100644
index 632801cf..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/hash.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/hash.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/hash.o.d
deleted file mode 100644
index dcd3db17..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/hash.o.d
+++ /dev/null
@@ -1,63 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/hash.o: jni/libxml2/hash.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/parser.h jni/libxml2/include/libxml/tree.h \
- jni/libxml2/include/libxml/xmlregexp.h jni/libxml2/include/libxml/dict.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/SAX.h \
- jni/libxml2/include/libxml/xlink.h jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/legacy.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/legacy.o
deleted file mode 100644
index 89c35e5b..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/legacy.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/legacy.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/legacy.o.d
deleted file mode 100644
index 436ec97d..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/legacy.o.d
+++ /dev/null
@@ -1,72 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/legacy.o: jni/libxml2/legacy.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/list.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/list.o
deleted file mode 100644
index 6b673483..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/list.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/list.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/list.o.d
deleted file mode 100644
index f6d3818d..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/list.o.d
+++ /dev/null
@@ -1,64 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/list.o: jni/libxml2/list.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanoftp.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanoftp.o
deleted file mode 100644
index e2c2a859..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanoftp.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanoftp.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanoftp.o.d
deleted file mode 100644
index a8c885b0..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanoftp.o.d
+++ /dev/null
@@ -1,69 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/nanoftp.o: jni/libxml2/nanoftp.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/nanoftp.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/nanoftp.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanohttp.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanohttp.o
deleted file mode 100644
index d5691315..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanohttp.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanohttp.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanohttp.o.d
deleted file mode 100644
index 0756e745..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/nanohttp.o.d
+++ /dev/null
@@ -1,69 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/nanohttp.o: jni/libxml2/nanohttp.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/nanohttp.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/nanohttp.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parser.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parser.o
deleted file mode 100644
index e0fde70d..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parser.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parser.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parser.o.d
deleted file mode 100644
index 3d287bae..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parser.o.d
+++ /dev/null
@@ -1,97 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/parser.o: jni/libxml2/parser.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/catalog.h \
- jni/libxml2/include/libxml/xmlschemastypes.h \
- jni/libxml2/include/libxml/schemasInternals.h \
- jni/libxml2/include/libxml/xmlschemas.h \
- jni/libxml2/include/libxml/relaxng.h jni/libxml2/buf.h jni/libxml2/enc.h \
- jni/libxml2/include/libxml/xpath.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/catalog.h:
-
-jni/libxml2/include/libxml/xmlschemastypes.h:
-
-jni/libxml2/include/libxml/schemasInternals.h:
-
-jni/libxml2/include/libxml/xmlschemas.h:
-
-jni/libxml2/include/libxml/relaxng.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/enc.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parserInternals.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parserInternals.o
deleted file mode 100644
index 59277f0d..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parserInternals.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parserInternals.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parserInternals.o.d
deleted file mode 100644
index 3be79b8b..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/parserInternals.o.d
+++ /dev/null
@@ -1,84 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/parserInternals.o: \
- jni/libxml2/parserInternals.c jni/libxml2/libxml.h \
- jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/catalog.h jni/libxml2/buf.h jni/libxml2/enc.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/catalog.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/enc.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/pattern.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/pattern.o
deleted file mode 100644
index 250dfefc..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/pattern.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/pattern.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/pattern.o.d
deleted file mode 100644
index 9b1018f9..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/pattern.o.d
+++ /dev/null
@@ -1,76 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/pattern.o: jni/libxml2/pattern.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/pattern.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/pattern.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/relaxng.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/relaxng.o
deleted file mode 100644
index 9c47464b..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/relaxng.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/relaxng.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/relaxng.o.d
deleted file mode 100644
index 7f76315d..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/relaxng.o.d
+++ /dev/null
@@ -1,87 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/relaxng.o: jni/libxml2/relaxng.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/relaxng.h \
- jni/libxml2/include/libxml/xmlschemastypes.h \
- jni/libxml2/include/libxml/schemasInternals.h \
- jni/libxml2/include/libxml/xmlschemas.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/relaxng.h:
-
-jni/libxml2/include/libxml/xmlschemastypes.h:
-
-jni/libxml2/include/libxml/schemasInternals.h:
-
-jni/libxml2/include/libxml/xmlschemas.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/schematron.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/schematron.o
deleted file mode 100644
index a4360875..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/schematron.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/schematron.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/schematron.o.d
deleted file mode 100644
index 37bc8ad4..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/schematron.o.d
+++ /dev/null
@@ -1,77 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/schematron.o: jni/libxml2/schematron.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/parser.h jni/libxml2/include/libxml/tree.h \
- jni/libxml2/include/libxml/xmlregexp.h jni/libxml2/include/libxml/dict.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/SAX.h \
- jni/libxml2/include/libxml/xlink.h jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/xpath.h \
- jni/libxml2/include/libxml/xpathInternals.h \
- jni/libxml2/include/libxml/pattern.h \
- jni/libxml2/include/libxml/schematron.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/xpathInternals.h:
-
-jni/libxml2/include/libxml/pattern.h:
-
-jni/libxml2/include/libxml/schematron.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/threads.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/threads.o
deleted file mode 100644
index 9a6a4cae..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/threads.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/threads.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/threads.o.d
deleted file mode 100644
index 7627a622..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/threads.o.d
+++ /dev/null
@@ -1,64 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/threads.o: jni/libxml2/threads.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/tree.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/tree.o
deleted file mode 100644
index 21279d8c..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/tree.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/tree.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/tree.o.d
deleted file mode 100644
index be85a298..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/tree.o.d
+++ /dev/null
@@ -1,88 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/tree.o: jni/libxml2/tree.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/HTMLtree.h \
- jni/libxml2/include/libxml/debugXML.h jni/libxml2/include/libxml/xpath.h \
- jni/libxml2/buf.h jni/libxml2/save.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/HTMLtree.h:
-
-jni/libxml2/include/libxml/debugXML.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/save.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/uri.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/uri.o
deleted file mode 100644
index 0a691ad7..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/uri.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/uri.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/uri.o.d
deleted file mode 100644
index a03546cf..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/uri.o.d
+++ /dev/null
@@ -1,67 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/uri.o: jni/libxml2/uri.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/valid.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/valid.o
deleted file mode 100644
index 1c191076..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/valid.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/valid.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/valid.o.d
deleted file mode 100644
index bd02f5d0..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/valid.o.d
+++ /dev/null
@@ -1,75 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/valid.o: jni/libxml2/valid.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xinclude.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xinclude.o
deleted file mode 100644
index 664e5b0b..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xinclude.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xinclude.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xinclude.o.d
deleted file mode 100644
index 3f02a51b..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xinclude.o.d
+++ /dev/null
@@ -1,86 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xinclude.o: jni/libxml2/xinclude.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/xpath.h jni/libxml2/include/libxml/xpointer.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/xinclude.h jni/libxml2/buf.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/xpointer.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/xinclude.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xlink.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xlink.o
deleted file mode 100644
index 6b749fca..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xlink.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xlink.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xlink.o.d
deleted file mode 100644
index 18aad4e7..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xlink.o.d
+++ /dev/null
@@ -1,64 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xlink.o: jni/libxml2/xlink.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlIO.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlIO.o
deleted file mode 100644
index 0213a161..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlIO.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlIO.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlIO.o.d
deleted file mode 100644
index fb8cdcac..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlIO.o.d
+++ /dev/null
@@ -1,89 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlIO.o: jni/libxml2/xmlIO.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/nanohttp.h \
- jni/libxml2/include/libxml/nanoftp.h \
- jni/libxml2/include/libxml/catalog.h jni/libxml2/buf.h jni/libxml2/enc.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/nanohttp.h:
-
-jni/libxml2/include/libxml/nanoftp.h:
-
-jni/libxml2/include/libxml/catalog.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/enc.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmemory.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmemory.o
deleted file mode 100644
index 83ce75af..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmemory.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmemory.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmemory.o.d
deleted file mode 100644
index 044dc94b..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmemory.o.d
+++ /dev/null
@@ -1,63 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlmemory.o: jni/libxml2/xmlmemory.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmodule.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmodule.o
deleted file mode 100644
index e8d83cff..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmodule.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmodule.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmodule.o.d
deleted file mode 100644
index 44f91adc..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlmodule.o.d
+++ /dev/null
@@ -1,67 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlmodule.o: jni/libxml2/xmlmodule.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/xmlmodule.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlmodule.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlreader.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlreader.o
deleted file mode 100644
index aa577f1a..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlreader.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlreader.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlreader.o.d
deleted file mode 100644
index f4a056ad..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlreader.o.d
+++ /dev/null
@@ -1,92 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlreader.o: jni/libxml2/xmlreader.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/xmlreader.h \
- jni/libxml2/include/libxml/relaxng.h \
- jni/libxml2/include/libxml/xmlschemas.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/xinclude.h \
- jni/libxml2/include/libxml/pattern.h jni/libxml2/buf.h \
- jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xmlreader.h:
-
-jni/libxml2/include/libxml/relaxng.h:
-
-jni/libxml2/include/libxml/xmlschemas.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/xinclude.h:
-
-jni/libxml2/include/libxml/pattern.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlregexp.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlregexp.o
deleted file mode 100644
index 5b1376d2..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlregexp.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlregexp.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlregexp.o.d
deleted file mode 100644
index 617b4588..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlregexp.o.d
+++ /dev/null
@@ -1,75 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlregexp.o: jni/libxml2/xmlregexp.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/xmlunicode.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/xmlunicode.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlsave.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlsave.o
deleted file mode 100644
index 27133743..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlsave.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlsave.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlsave.o.d
deleted file mode 100644
index 450df1b1..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlsave.o.d
+++ /dev/null
@@ -1,86 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlsave.o: jni/libxml2/xmlsave.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/xmlsave.h \
- jni/libxml2/include/libxml/HTMLtree.h jni/libxml2/buf.h \
- jni/libxml2/enc.h jni/libxml2/save.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/xmlsave.h:
-
-jni/libxml2/include/libxml/HTMLtree.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/enc.h:
-
-jni/libxml2/save.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemas.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemas.o
deleted file mode 100644
index 1cd4c7f4..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemas.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemas.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemas.o.d
deleted file mode 100644
index 26915b1e..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemas.o.d
+++ /dev/null
@@ -1,93 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlschemas.o: jni/libxml2/xmlschemas.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/xmlschemas.h \
- jni/libxml2/include/libxml/schemasInternals.h \
- jni/libxml2/include/libxml/xmlschemastypes.h \
- jni/libxml2/include/libxml/pattern.h \
- jni/libxml2/include/libxml/xmlreader.h \
- jni/libxml2/include/libxml/relaxng.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/xmlschemas.h:
-
-jni/libxml2/include/libxml/schemasInternals.h:
-
-jni/libxml2/include/libxml/xmlschemastypes.h:
-
-jni/libxml2/include/libxml/pattern.h:
-
-jni/libxml2/include/libxml/xmlreader.h:
-
-jni/libxml2/include/libxml/relaxng.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.o
deleted file mode 100644
index ba0378b9..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.o.d
deleted file mode 100644
index f56e472d..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.o.d
+++ /dev/null
@@ -1,87 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlschemastypes.o: \
- jni/libxml2/xmlschemastypes.c jni/libxml2/libxml.h \
- jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/xpath.h \
- jni/libxml2/include/libxml/uri.h jni/libxml2/include/libxml/xmlschemas.h \
- jni/libxml2/include/libxml/schemasInternals.h \
- jni/libxml2/include/libxml/xmlschemastypes.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/xmlschemas.h:
-
-jni/libxml2/include/libxml/schemasInternals.h:
-
-jni/libxml2/include/libxml/xmlschemastypes.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlstring.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlstring.o
deleted file mode 100644
index fac64107..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlstring.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlstring.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlstring.o.d
deleted file mode 100644
index 7a44a36b..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlstring.o.d
+++ /dev/null
@@ -1,73 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlstring.o: jni/libxml2/xmlstring.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlunicode.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlunicode.o
deleted file mode 100644
index 7ef9ce8c..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlunicode.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlunicode.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlunicode.o.d
deleted file mode 100644
index 0e12fd8c..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlunicode.o.d
+++ /dev/null
@@ -1,22 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlunicode.o: jni/libxml2/xmlunicode.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlunicode.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlunicode.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlwriter.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlwriter.o
deleted file mode 100644
index f824d435..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlwriter.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlwriter.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlwriter.o.d
deleted file mode 100644
index 264277f8..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xmlwriter.o.d
+++ /dev/null
@@ -1,82 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xmlwriter.o: jni/libxml2/xmlwriter.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/HTMLtree.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/xmlwriter.h jni/libxml2/buf.h \
- jni/libxml2/enc.h jni/libxml2/save.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/HTMLtree.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/xmlwriter.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/enc.h:
-
-jni/libxml2/save.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpath.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpath.o
deleted file mode 100644
index e481dcae..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpath.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpath.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpath.o.d
deleted file mode 100644
index 3978f620..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpath.o.d
+++ /dev/null
@@ -1,99 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xpath.o: jni/libxml2/xpath.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/tree.h jni/libxml2/include/libxml/xmlregexp.h \
- jni/libxml2/include/libxml/dict.h jni/libxml2/include/libxml/hash.h \
- jni/libxml2/include/libxml/valid.h jni/libxml2/include/libxml/xmlerror.h \
- jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/xpath.h \
- jni/libxml2/include/libxml/xpathInternals.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h \
- jni/libxml2/include/libxml/xpointer.h \
- jni/libxml2/include/libxml/debugXML.h \
- jni/libxml2/include/libxml/pattern.h jni/libxml2/buf.h \
- jni/libxml2/timsort.h jni/libxml2/trionan.c jni/libxml2/triodef.h \
- jni/libxml2/trionan.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/xpathInternals.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/xpointer.h:
-
-jni/libxml2/include/libxml/debugXML.h:
-
-jni/libxml2/include/libxml/pattern.h:
-
-jni/libxml2/buf.h:
-
-jni/libxml2/timsort.h:
-
-jni/libxml2/trionan.c:
-
-jni/libxml2/triodef.h:
-
-jni/libxml2/trionan.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpointer.o b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpointer.o
deleted file mode 100644
index cef67d88..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpointer.o
+++ /dev/null
Binary files differ
diff --git a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpointer.o.d b/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpointer.o.d
deleted file mode 100644
index 9b72b5de..00000000
--- a/external/libxml2_android/obj/local/armeabi-v7a/objs/xml2/xpointer.o.d
+++ /dev/null
@@ -1,82 +0,0 @@
-obj/local/armeabi-v7a/objs/xml2/xpointer.o: jni/libxml2/xpointer.c \
- jni/libxml2/libxml.h jni/libxml2/include/libxml/xmlstring.h \
- jni/libxml2/include/libxml/xmlversion.h \
- jni/libxml2/include/libxml/xmlexports.h jni/libxml2/config.h \
- jni/libxml2/include/libxml/xpointer.h jni/libxml2/include/libxml/tree.h \
- jni/libxml2/include/libxml/xmlregexp.h jni/libxml2/include/libxml/dict.h \
- jni/libxml2/include/libxml/xmlmemory.h \
- jni/libxml2/include/libxml/threads.h \
- jni/libxml2/include/libxml/globals.h jni/libxml2/include/libxml/parser.h \
- jni/libxml2/include/libxml/hash.h jni/libxml2/include/libxml/valid.h \
- jni/libxml2/include/libxml/xmlerror.h jni/libxml2/include/libxml/list.h \
- jni/libxml2/include/libxml/xmlautomata.h \
- jni/libxml2/include/libxml/entities.h \
- jni/libxml2/include/libxml/encoding.h jni/libxml2/include/libxml/xmlIO.h \
- jni/libxml2/include/libxml/SAX.h jni/libxml2/include/libxml/xlink.h \
- jni/libxml2/include/libxml/SAX2.h jni/libxml2/include/libxml/xpath.h \
- jni/libxml2/include/libxml/parserInternals.h \
- jni/libxml2/include/libxml/HTMLparser.h \
- jni/libxml2/include/libxml/chvalid.h jni/libxml2/include/libxml/uri.h \
- jni/libxml2/include/libxml/xpathInternals.h jni/libxml2/elfgcchack.h
-
-jni/libxml2/libxml.h:
-
-jni/libxml2/include/libxml/xmlstring.h:
-
-jni/libxml2/include/libxml/xmlversion.h:
-
-jni/libxml2/include/libxml/xmlexports.h:
-
-jni/libxml2/config.h:
-
-jni/libxml2/include/libxml/xpointer.h:
-
-jni/libxml2/include/libxml/tree.h:
-
-jni/libxml2/include/libxml/xmlregexp.h:
-
-jni/libxml2/include/libxml/dict.h:
-
-jni/libxml2/include/libxml/xmlmemory.h:
-
-jni/libxml2/include/libxml/threads.h:
-
-jni/libxml2/include/libxml/globals.h:
-
-jni/libxml2/include/libxml/parser.h:
-
-jni/libxml2/include/libxml/hash.h:
-
-jni/libxml2/include/libxml/valid.h:
-
-jni/libxml2/include/libxml/xmlerror.h:
-
-jni/libxml2/include/libxml/list.h:
-
-jni/libxml2/include/libxml/xmlautomata.h:
-
-jni/libxml2/include/libxml/entities.h:
-
-jni/libxml2/include/libxml/encoding.h:
-
-jni/libxml2/include/libxml/xmlIO.h:
-
-jni/libxml2/include/libxml/SAX.h:
-
-jni/libxml2/include/libxml/xlink.h:
-
-jni/libxml2/include/libxml/SAX2.h:
-
-jni/libxml2/include/libxml/xpath.h:
-
-jni/libxml2/include/libxml/parserInternals.h:
-
-jni/libxml2/include/libxml/HTMLparser.h:
-
-jni/libxml2/include/libxml/chvalid.h:
-
-jni/libxml2/include/libxml/uri.h:
-
-jni/libxml2/include/libxml/xpathInternals.h:
-
-jni/libxml2/elfgcchack.h:
diff --git a/external/libxml2_files/config.h b/external/libxml2_files/config.h
deleted file mode 100644
index bc910aee..00000000
--- a/external/libxml2_files/config.h
+++ /dev/null
@@ -1,333 +0,0 @@
-/* config.h. Generated from config.h.in by configure. */
-/* config.h.in. Generated from configure.ac by autoheader. */
-
-/* Type cast for the gethostbyname() argument */
-#define GETHOSTBYNAME_ARG_CAST /**/
-
-/* Define to 1 if you have the <ansidecl.h> header file. */
-/* #undef HAVE_ANSIDECL_H */
-
-/* Define to 1 if you have the <arpa/inet.h> header file. */
-#define HAVE_ARPA_INET_H 1
-
-/* Define to 1 if you have the <arpa/nameser.h> header file. */
-#define HAVE_ARPA_NAMESER_H 1
-
-/* Whether struct sockaddr::__ss_family exists */
-/* #undef HAVE_BROKEN_SS_FAMILY */
-
-/* Define to 1 if you have the `class' function. */
-/* #undef HAVE_CLASS */
-
-/* Define to 1 if you have the <ctype.h> header file. */
-#define HAVE_CTYPE_H 1
-
-/* Define to 1 if you have the <dirent.h> header file. */
-#define HAVE_DIRENT_H 1
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#define HAVE_DLFCN_H 1
-
-/* Have dlopen based dso */
-#define HAVE_DLOPEN /**/
-
-/* Define to 1 if you have the <dl.h> header file. */
-/* #undef HAVE_DL_H */
-
-/* Define to 1 if you have the <errno.h> header file. */
-#define HAVE_ERRNO_H 1
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#define HAVE_FCNTL_H 1
-
-/* Define to 1 if you have the `finite' function. */
-/* #undef HAVE_FINITE */
-
-/* Define to 1 if you have the <float.h> header file. */
-#define HAVE_FLOAT_H 1
-
-/* Define to 1 if you have the `fpclass' function. */
-/* #undef HAVE_FPCLASS */
-
-/* Define to 1 if you have the `fprintf' function. */
-#define HAVE_FPRINTF 1
-
-/* Define to 1 if you have the `fp_class' function. */
-/* #undef HAVE_FP_CLASS */
-
-/* Define to 1 if you have the <fp_class.h> header file. */
-/* #undef HAVE_FP_CLASS_H */
-
-/* Define to 1 if you have the `ftime' function. */
-/* #undef HAVE_FTIME */
-
-/* Define if getaddrinfo is there */
-#define HAVE_GETADDRINFO /**/
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#define HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have the <ieeefp.h> header file. */
-/* #undef HAVE_IEEEFP_H */
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#define HAVE_INTTYPES_H 1
-
-/* Define to 1 if you have the `isascii' function. */
-#define HAVE_ISASCII 1
-
-/* Define if isinf is there */
-#define HAVE_ISINF /**/
-
-/* Define if isnan is there */
-#define HAVE_ISNAN /**/
-
-/* Define to 1 if you have the `isnand' function. */
-/* #undef HAVE_ISNAND */
-
-/* Define if history library is there (-lhistory) */
-/* #undef HAVE_LIBHISTORY */
-
-/* Have compression library */
-/* #undef HAVE_LIBLZMA */
-
-/* Define if pthread library is there (-lpthread) */
-/* #undef HAVE_LIBPTHREAD */
-
-/* Define if readline library is there (-lreadline) */
-/* #undef HAVE_LIBREADLINE */
-
-/* Have compression library */
-#define HAVE_LIBZ 1
-
-/* Define to 1 if you have the <limits.h> header file. */
-#define HAVE_LIMITS_H 1
-
-/* Define to 1 if you have the `localtime' function. */
-#define HAVE_LOCALTIME 1
-
-/* Define to 1 if you have the <lzma.h> header file. */
-/* #undef HAVE_LZMA_H */
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#define HAVE_MALLOC_H 1
-
-/* Define to 1 if you have the <math.h> header file. */
-#define HAVE_MATH_H 1
-
-/* Define to 1 if you have the <memory.h> header file. */
-#define HAVE_MEMORY_H 1
-
-/* Define to 1 if you have the `mmap' function. */
-#define HAVE_MMAP 1
-
-/* Define to 1 if you have the `munmap' function. */
-#define HAVE_MUNMAP 1
-
-/* mmap() is no good without munmap() */
-#if defined(HAVE_MMAP) && !defined(HAVE_MUNMAP)
-# undef /**/ HAVE_MMAP
-#endif
-
-/* Define to 1 if you have the <nan.h> header file. */
-/* #undef HAVE_NAN_H */
-
-/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */
-/* #undef HAVE_NDIR_H */
-
-/* Define to 1 if you have the <netdb.h> header file. */
-#define HAVE_NETDB_H 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#define HAVE_NETINET_IN_H 1
-
-/* Define to 1 if you have the <poll.h> header file. */
-#define HAVE_POLL_H 1
-
-/* Define to 1 if you have the `printf' function. */
-#define HAVE_PRINTF 1
-
-/* Define if <pthread.h> is there */
-/* #undef HAVE_PTHREAD_H */
-
-/* Define to 1 if you have the `putenv' function. */
-#define HAVE_PUTENV 1
-
-/* Define to 1 if you have the `rand' function. */
-#define HAVE_RAND 1
-
-/* Define to 1 if you have the `rand_r' function. */
-#define HAVE_RAND_R 1
-
-/* Define to 1 if you have the <resolv.h> header file. */
-#define HAVE_RESOLV_H 1
-
-/* Have shl_load based dso */
-/* #undef HAVE_SHLLOAD */
-
-/* Define to 1 if you have the `signal' function. */
-#define HAVE_SIGNAL 1
-
-/* Define to 1 if you have the <signal.h> header file. */
-#define HAVE_SIGNAL_H 1
-
-/* Define to 1 if you have the `snprintf' function. */
-#define HAVE_SNPRINTF 1
-
-/* Define to 1 if you have the `sprintf' function. */
-#define HAVE_SPRINTF 1
-
-/* Define to 1 if you have the `srand' function. */
-#define HAVE_SRAND 1
-
-/* Define to 1 if you have the `sscanf' function. */
-#define HAVE_SSCANF 1
-
-/* Define to 1 if you have the `stat' function. */
-#define HAVE_STAT 1
-
-/* Define to 1 if you have the <stdarg.h> header file. */
-#define HAVE_STDARG_H 1
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#define HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#define HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the `strdup' function. */
-#define HAVE_STRDUP 1
-
-/* Define to 1 if you have the `strerror' function. */
-#define HAVE_STRERROR 1
-
-/* Define to 1 if you have the `strftime' function. */
-#define HAVE_STRFTIME 1
-
-/* Define to 1 if you have the <strings.h> header file. */
-#define HAVE_STRINGS_H 1
-
-/* Define to 1 if you have the <string.h> header file. */
-#define HAVE_STRING_H 1
-
-/* Define to 1 if you have the `strndup' function. */
-#define HAVE_STRNDUP 1
-
-/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_DIR_H */
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#define HAVE_SYS_MMAN_H 1
-
-/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.
- */
-/* #undef HAVE_SYS_NDIR_H */
-
-/* Define to 1 if you have the <sys/select.h> header file. */
-#define HAVE_SYS_SELECT_H 1
-
-/* Define to 1 if you have the <sys/socket.h> header file. */
-#define HAVE_SYS_SOCKET_H 1
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#define HAVE_SYS_STAT_H 1
-
-/* Define to 1 if you have the <sys/timeb.h> header file. */
-/* #undef HAVE_SYS_TIMEB_H */
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#define HAVE_SYS_TIME_H 1
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#define HAVE_SYS_TYPES_H 1
-
-/* Define to 1 if you have the `time' function. */
-#define HAVE_TIME 1
-
-/* Define to 1 if you have the <time.h> header file. */
-#define HAVE_TIME_H 1
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#define HAVE_UNISTD_H 1
-
-/* Whether va_copy() is available */
-#define HAVE_VA_COPY 1
-
-/* Define to 1 if you have the `vfprintf' function. */
-#define HAVE_VFPRINTF 1
-
-/* Define to 1 if you have the `vsnprintf' function. */
-#define HAVE_VSNPRINTF 1
-
-/* Define to 1 if you have the `vsprintf' function. */
-#define HAVE_VSPRINTF 1
-
-/* Define to 1 if you have the <zlib.h> header file. */
-#define HAVE_ZLIB_H 1
-
-/* Define to 1 if you have the `_stat' function. */
-/* #undef HAVE__STAT */
-
-/* Whether __va_copy() is available */
-/* #undef HAVE___VA_COPY */
-
-/* Define as const if the declaration of iconv() needs const. */
-/* #undef ICONV_CONST */
-
-/* Define to the sub-directory where libtool stores uninstalled libraries. */
-#define LT_OBJDIR ".libs/"
-
-/* Name of package */
-#define PACKAGE "libxml2"
-
-/* Define to the address where bug reports for this package should be sent. */
-#define PACKAGE_BUGREPORT ""
-
-/* Define to the full name of this package. */
-#define PACKAGE_NAME ""
-
-/* Define to the full name and version of this package. */
-#define PACKAGE_STRING ""
-
-/* Define to the one symbol short name of this package. */
-#define PACKAGE_TARNAME ""
-
-/* Define to the home page for this package. */
-#define PACKAGE_URL ""
-
-/* Define to the version of this package. */
-#define PACKAGE_VERSION ""
-
-/* Type cast for the send() function 2nd arg */
-#define SEND_ARG2_CAST /**/
-
-/* Define to 1 if you have the ANSI C header files. */
-#define STDC_HEADERS 1
-
-/* Support for IPv6 */
-#define SUPPORT_IP6 /**/
-
-/* Define if va_list is an array type */
-/* #undef VA_LIST_IS_ARRAY */
-
-/* Version number of package */
-#define VERSION "2.9.4"
-
-/* Determine what socket length (socklen_t) data type is */
-#define XML_SOCKLEN_T socklen_t
-
-/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
- <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
- #define below would cause a syntax error. */
-/* #undef _UINT32_T */
-
-/* Using the Win32 Socket implementation */
-/* #undef _WINSOCKAPI_ */
-
-/* ss_family is not defined here, use __ss_family instead */
-/* #undef ss_family */
-
-/* Define to the type of an unsigned integer type of width exactly 32 bits if
- such a type exists and the standard includes do not define it. */
-/* #undef uint32_t */
diff --git a/external/libxml2_files/xmlversion.h b/external/libxml2_files/xmlversion.h
deleted file mode 100644
index abf8d708..00000000
--- a/external/libxml2_files/xmlversion.h
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * Summary: compile-time version informations
- * Description: compile-time version informations for the XML library
- *
- * Copy: See Copyright for the status of this software.
- *
- * Author: Daniel Veillard
- */
-
-#ifndef __XML_VERSION_H__
-#define __XML_VERSION_H__
-
-#include <libxml/xmlexports.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- * use those to be sure nothing nasty will happen if
- * your library and includes mismatch
- */
-#ifndef LIBXML2_COMPILING_MSCCDEF
-XMLPUBFUN void XMLCALL xmlCheckVersion(int version);
-#endif /* LIBXML2_COMPILING_MSCCDEF */
-
-/**
- * LIBXML_DOTTED_VERSION:
- *
- * the version string like "1.2.3"
- */
-#define LIBXML_DOTTED_VERSION "2.9.4"
-
-/**
- * LIBXML_VERSION:
- *
- * the version number: 1.2.3 value is 10203
- */
-#define LIBXML_VERSION 20904
-
-/**
- * LIBXML_VERSION_STRING:
- *
- * the version number string, 1.2.3 value is "10203"
- */
-#define LIBXML_VERSION_STRING "20904"
-
-/**
- * LIBXML_VERSION_EXTRA:
- *
- * extra version information, used to show a CVS compilation
- */
-#define LIBXML_VERSION_EXTRA "-GITv2.9.4-12-ge905f08"
-
-/**
- * LIBXML_TEST_VERSION:
- *
- * Macro to check that the libxml version in use is compatible with
- * the version the software has been compiled against
- */
-#define LIBXML_TEST_VERSION xmlCheckVersion(20904);
-
-#ifndef VMS
-#if 0
-/**
- * WITH_TRIO:
- *
- * defined if the trio support need to be configured in
- */
-#define WITH_TRIO
-#else
-/**
- * WITHOUT_TRIO:
- *
- * defined if the trio support should not be configured in
- */
-#define WITHOUT_TRIO
-#endif
-#else /* VMS */
-/**
- * WITH_TRIO:
- *
- * defined if the trio support need to be configured in
- */
-#define WITH_TRIO 1
-#endif /* VMS */
-
-/**
- * LIBXML_THREAD_ENABLED:
- *
- * Whether the thread support is configured in
- */
-#if 0
-#if defined(_REENTRANT) || defined(__MT__) || \
- (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE - 0 >= 199506L))
-#define LIBXML_THREAD_ENABLED
-#endif
-#endif
-
-/**
- * LIBXML_THREAD_ALLOC_ENABLED:
- *
- * Whether the allocation hooks are per-thread
- */
-#if 0
-#define LIBXML_THREAD_ALLOC_ENABLED
-#endif
-
-/**
- * LIBXML_TREE_ENABLED:
- *
- * Whether the DOM like tree manipulation API support is configured in
- */
-#if 1
-#define LIBXML_TREE_ENABLED
-#endif
-
-/**
- * LIBXML_OUTPUT_ENABLED:
- *
- * Whether the serialization/saving support is configured in
- */
-#if 1
-#define LIBXML_OUTPUT_ENABLED
-#endif
-
-/**
- * LIBXML_PUSH_ENABLED:
- *
- * Whether the push parsing interfaces are configured in
- */
-#if 1
-#define LIBXML_PUSH_ENABLED
-#endif
-
-/**
- * LIBXML_READER_ENABLED:
- *
- * Whether the xmlReader parsing interface is configured in
- */
-#if 1
-#define LIBXML_READER_ENABLED
-#endif
-
-/**
- * LIBXML_PATTERN_ENABLED:
- *
- * Whether the xmlPattern node selection interface is configured in
- */
-#if 1
-#define LIBXML_PATTERN_ENABLED
-#endif
-
-/**
- * LIBXML_WRITER_ENABLED:
- *
- * Whether the xmlWriter saving interface is configured in
- */
-#if 1
-#define LIBXML_WRITER_ENABLED
-#endif
-
-/**
- * LIBXML_SAX1_ENABLED:
- *
- * Whether the older SAX1 interface is configured in
- */
-#if 1
-#define LIBXML_SAX1_ENABLED
-#endif
-
-/**
- * LIBXML_FTP_ENABLED:
- *
- * Whether the FTP support is configured in
- */
-#if 1
-#define LIBXML_FTP_ENABLED
-#endif
-
-/**
- * LIBXML_HTTP_ENABLED:
- *
- * Whether the HTTP support is configured in
- */
-#if 1
-#define LIBXML_HTTP_ENABLED
-#endif
-
-/**
- * LIBXML_VALID_ENABLED:
- *
- * Whether the DTD validation support is configured in
- */
-#if 1
-#define LIBXML_VALID_ENABLED
-#endif
-
-/**
- * LIBXML_HTML_ENABLED:
- *
- * Whether the HTML support is configured in
- */
-#if 1
-#define LIBXML_HTML_ENABLED
-#endif
-
-/**
- * LIBXML_LEGACY_ENABLED:
- *
- * Whether the deprecated APIs are compiled in for compatibility
- */
-#if 1
-#define LIBXML_LEGACY_ENABLED
-#endif
-
-/**
- * LIBXML_C14N_ENABLED:
- *
- * Whether the Canonicalization support is configured in
- */
-#if 1
-#define LIBXML_C14N_ENABLED
-#endif
-
-/**
- * LIBXML_CATALOG_ENABLED:
- *
- * Whether the Catalog support is configured in
- */
-#if 1
-#define LIBXML_CATALOG_ENABLED
-#endif
-
-/**
- * LIBXML_DOCB_ENABLED:
- *
- * Whether the SGML Docbook support is configured in
- */
-#if 1
-#define LIBXML_DOCB_ENABLED
-#endif
-
-/**
- * LIBXML_XPATH_ENABLED:
- *
- * Whether XPath is configured in
- */
-#if 1
-#define LIBXML_XPATH_ENABLED
-#endif
-
-/**
- * LIBXML_XPTR_ENABLED:
- *
- * Whether XPointer is configured in
- */
-#if 1
-#define LIBXML_XPTR_ENABLED
-#endif
-
-/**
- * LIBXML_XINCLUDE_ENABLED:
- *
- * Whether XInclude is configured in
- */
-#if 1
-#define LIBXML_XINCLUDE_ENABLED
-#endif
-
-/**
- * LIBXML_ICONV_ENABLED:
- *
- * Whether iconv support is available
- */
-#if 0
-#define LIBXML_ICONV_ENABLED
-#endif
-
-/**
- * LIBXML_ICU_ENABLED:
- *
- * Whether icu support is available
- */
-#if 0
-#define LIBXML_ICU_ENABLED
-#endif
-
-/**
- * LIBXML_ISO8859X_ENABLED:
- *
- * Whether ISO-8859-* support is made available in case iconv is not
- */
-#if 1
-#define LIBXML_ISO8859X_ENABLED
-#endif
-
-/**
- * LIBXML_DEBUG_ENABLED:
- *
- * Whether Debugging module is configured in
- */
-#if 1
-#define LIBXML_DEBUG_ENABLED
-#endif
-
-/**
- * DEBUG_MEMORY_LOCATION:
- *
- * Whether the memory debugging is configured in
- */
-#if 0
-#define DEBUG_MEMORY_LOCATION
-#endif
-
-/**
- * LIBXML_DEBUG_RUNTIME:
- *
- * Whether the runtime debugging is configured in
- */
-#if 0
-#define LIBXML_DEBUG_RUNTIME
-#endif
-
-/**
- * LIBXML_UNICODE_ENABLED:
- *
- * Whether the Unicode related interfaces are compiled in
- */
-#if 1
-#define LIBXML_UNICODE_ENABLED
-#endif
-
-/**
- * LIBXML_REGEXP_ENABLED:
- *
- * Whether the regular expressions interfaces are compiled in
- */
-#if 1
-#define LIBXML_REGEXP_ENABLED
-#endif
-
-/**
- * LIBXML_AUTOMATA_ENABLED:
- *
- * Whether the automata interfaces are compiled in
- */
-#if 1
-#define LIBXML_AUTOMATA_ENABLED
-#endif
-
-/**
- * LIBXML_EXPR_ENABLED:
- *
- * Whether the formal expressions interfaces are compiled in
- */
-#if 1
-#define LIBXML_EXPR_ENABLED
-#endif
-
-/**
- * LIBXML_SCHEMAS_ENABLED:
- *
- * Whether the Schemas validation interfaces are compiled in
- */
-#if 1
-#define LIBXML_SCHEMAS_ENABLED
-#endif
-
-/**
- * LIBXML_SCHEMATRON_ENABLED:
- *
- * Whether the Schematron validation interfaces are compiled in
- */
-#if 1
-#define LIBXML_SCHEMATRON_ENABLED
-#endif
-
-/**
- * LIBXML_MODULES_ENABLED:
- *
- * Whether the module interfaces are compiled in
- */
-#if 1
-#define LIBXML_MODULES_ENABLED
-/**
- * LIBXML_MODULE_EXTENSION:
- *
- * the string suffix used by dynamic modules (usually shared libraries)
- */
-#define LIBXML_MODULE_EXTENSION ".so"
-#endif
-
-/**
- * LIBXML_ZLIB_ENABLED:
- *
- * Whether the Zlib support is compiled in
- */
-#if 1
-#define LIBXML_ZLIB_ENABLED
-#endif
-
-/**
- * LIBXML_LZMA_ENABLED:
- *
- * Whether the Lzma support is compiled in
- */
-#if 0
-#define LIBXML_LZMA_ENABLED
-#endif
-
-#ifdef __GNUC__
-#ifdef HAVE_ANSIDECL_H
-#include <ansidecl.h>
-#endif
-
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- */
-
-#ifndef ATTRIBUTE_UNUSED
-# if ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 7)))
-# define ATTRIBUTE_UNUSED __attribute__((unused))
-# else
-# define ATTRIBUTE_UNUSED
-# endif
-#endif
-
-/**
- * LIBXML_ATTR_ALLOC_SIZE:
- *
- * Macro used to indicate to GCC this is an allocator function
- */
-
-#ifndef LIBXML_ATTR_ALLOC_SIZE
-# if (!defined(__clang__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3))))
-# define LIBXML_ATTR_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
-# else
-# define LIBXML_ATTR_ALLOC_SIZE(x)
-# endif
-#else
-# define LIBXML_ATTR_ALLOC_SIZE(x)
-#endif
-
-/**
- * LIBXML_ATTR_FORMAT:
- *
- * Macro used to indicate to GCC the parameter are printf like
- */
-
-#ifndef LIBXML_ATTR_FORMAT
-# if ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)))
-# define LIBXML_ATTR_FORMAT(fmt,args) __attribute__((__format__(__printf__,fmt,args)))
-# else
-# define LIBXML_ATTR_FORMAT(fmt,args)
-# endif
-#else
-# define LIBXML_ATTR_FORMAT(fmt,args)
-#endif
-
-#else /* ! __GNUC__ */
-/**
- * ATTRIBUTE_UNUSED:
- *
- * Macro used to signal to GCC unused function parameters
- */
-#define ATTRIBUTE_UNUSED
-/**
- * LIBXML_ATTR_ALLOC_SIZE:
- *
- * Macro used to indicate to GCC this is an allocator function
- */
-#define LIBXML_ATTR_ALLOC_SIZE(x)
-/**
- * LIBXML_ATTR_FORMAT:
- *
- * Macro used to indicate to GCC the parameter are printf like
- */
-#define LIBXML_ATTR_FORMAT(fmt,args)
-#endif /* __GNUC__ */
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-#endif
-
-
diff --git a/iGetAndroid/app/build.gradle b/iGetAndroid/app/build.gradle
deleted file mode 100644
index 71b196f6..00000000
--- a/iGetAndroid/app/build.gradle
+++ /dev/null
@@ -1,69 +0,0 @@
-apply plugin: 'com.android.application'
-
-android {
- compileSdkVersion 25
- buildToolsVersion "25.0.2"
- defaultConfig {
- applicationId "com.iget.ccnx.igetandroid"
- minSdkVersion 24
- targetSdkVersion 25
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
- externalNativeBuild {
- cmake {
- cppFlags "-frtti -fexceptions -Wno-error=format-security -std=c++0x"
- }
- }
- ndk {
- // Specifies the ABI configurations of your native
- // libraries Gradle should build and package with your APK.
- abiFilters 'armeabi-v7a'
- }
- }
-
- signingConfigs {
- release {
- storeFile file("iget.keystore")
- storePassword "igetandroid"
- keyAlias "iget"
- keyPassword "igetandroid"
- }
- }
-
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- signingConfig signingConfigs.release
- applicationVariants.all { variant ->
- variant.outputs.each { output ->
- project.ext { appName = 'iget' }
- def newName = output.outputFile.name
- newName = newName.replace("app", "$project.ext.appName-$System.env.ABI")
- output.outputFile = new File(output.outputFile.parent, newName)
- }
- }
- }
- }
- externalNativeBuild {
- cmake {
- path "CMakeLists.txt"
-
- //
- }
- }
-
-
-
-}
-
-dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
- exclude group: 'com.android.support', module: 'support-annotations'
- })
- compile 'com.android.support:appcompat-v7:25.2.0'
- compile 'com.android.support.constraint:constraint-layout:1.0.2'
- testCompile 'junit:junit:4.12'
-}
diff --git a/iGetAndroid/app/iget.keystore b/iGetAndroid/app/iget.keystore
deleted file mode 100644
index b56d3615..00000000
--- a/iGetAndroid/app/iget.keystore
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/cpp/native-lib.cpp b/iGetAndroid/app/src/main/cpp/native-lib.cpp
deleted file mode 100644
index d3cabb51..00000000
--- a/iGetAndroid/app/src/main/cpp/native-lib.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <jni.h>
-#include <string>
-
-#include <icnet/icnet_http_facade.h>
-
-
-
-extern "C"
-JNIEXPORT jstring JNICALL
-Java_com_iget_ccnx_igetandroid_iGetActivity_downloadFile(JNIEnv *env, jobject instance,
- jstring path_) {
- const char *path = env->GetStringUTFChars(path_, 0);
- std::string name(path);
- libl4::http::HTTPClientConnection connection;
- connection.get(name);
- std::string str(reinterpret_cast<const char *>(connection.response().data()),
- connection.response().size());
- return env->NewStringUTF(str.c_str());
-} \ No newline at end of file
diff --git a/iGetAndroid/app/src/main/java/com/iget/ccnx/igetandroid/iGetActivity.java b/iGetAndroid/app/src/main/java/com/iget/ccnx/igetandroid/iGetActivity.java
deleted file mode 100644
index 293561c6..00000000
--- a/iGetAndroid/app/src/main/java/com/iget/ccnx/igetandroid/iGetActivity.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco and/or its affiliates.
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at:
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.iget.ccnx.igetandroid;
-
-import android.Manifest;
-import android.content.SharedPreferences;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.os.Environment;
-import android.support.v4.app.ActivityCompat;
-import android.support.v4.content.ContextCompat;
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-import android.util.Log;
-import android.view.View;
-import android.widget.ArrayAdapter;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.iget.ccnx.adapter.ListViewAdapter;
-import com.iget.ccnx.adapter.OutputListViewElement;
-import com.iget.ccnx.utility.Constants;
-import com.iget.ccnx.utility.ResourcesEnumerator;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.PrintStream;
-import java.nio.ByteBuffer;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Date;
-
-public class iGetActivity extends AppCompatActivity {
-
- static {
- System.loadLibrary("native-lib");
- }
-
- private static String TAG = "iGetAcrivity";
-
- public native String downloadFile(String path);
-
- ArrayList<OutputListViewElement> outputListViewElementArrayList = new ArrayList<OutputListViewElement>();
- ListViewAdapter adapter;
-
-
- static int fCount = 0;
- SharedPreferences sharedPreferences;
- EditText urlEditText;
- EditText downloadPathEditText;
- Button downloadButton;
- ListView resultListView;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_i_get);
- adapter = new ListViewAdapter(this, outputListViewElementArrayList);
- resultListView = (ListView) findViewById(R.id.resultsListView);
- resultListView.setAdapter(adapter);
- checkEnabledPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
- checkEnabledPermission(Manifest.permission.READ_EXTERNAL_STORAGE);
- init();
- }
-
- public static final String md5(final String s) {
- final String MD5 = "MD5";
- try {
- // Create MD5 Hash
- MessageDigest digest = java.security.MessageDigest
- .getInstance(MD5);
- digest.update(s.getBytes());
- byte messageDigest[] = digest.digest();
-
- // Create Hex String
- StringBuilder hexString = new StringBuilder();
- for (byte aMessageDigest : messageDigest) {
- String h = Integer.toHexString(0xFF & aMessageDigest);
- while (h.length() < 2)
- h = "0" + h;
- hexString.append(h);
- }
- return hexString.toString();
-
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- }
- return "";
- }
-
- @Override
- protected void onSaveInstanceState(Bundle outState) {
- outState.putSerializable(Constants.LIST_ITEMS_ID, outputListViewElementArrayList);
- super.onSaveInstanceState(outState);
- }
-
- @Override
- protected void onRestoreInstanceState(Bundle savedInstanceState) {
- if (savedInstanceState != null) {
- outputListViewElementArrayList = (ArrayList<OutputListViewElement>) savedInstanceState.getSerializable(Constants.LIST_ITEMS_ID);
- adapter = new ListViewAdapter(this, outputListViewElementArrayList);
- resultListView = (ListView) findViewById(R.id.resultsListView);
- resultListView.setAdapter(adapter);
- }
- super.onRestoreInstanceState(savedInstanceState);
- }
-
- private void init() {
- Log.v("storage path", Environment.getExternalStorageDirectory().toString());
- sharedPreferences = getSharedPreferences(Constants.I_GET_PREFERENCES, MODE_PRIVATE);
- urlEditText = (EditText) findViewById(R.id.urlEditText);
- urlEditText.setText(sharedPreferences.getString(ResourcesEnumerator.URL.key(), Constants.DEFAULT_URL));
- downloadPathEditText = (EditText) findViewById(R.id.downloadPathEditText);
- downloadPathEditText.setText(sharedPreferences.getString(ResourcesEnumerator.DOWNLOAD_PATH.key(), Constants.DEFAULT_DOWNLOAD_PATH));
- downloadButton = (Button) findViewById(R.id.downloadButton);
- downloadButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- SharedPreferences.Editor sharedPreferencesEditor = getSharedPreferences(Constants.I_GET_PREFERENCES, MODE_PRIVATE).edit();
- sharedPreferencesEditor.putString(ResourcesEnumerator.URL.key(), urlEditText.getText().toString());
- sharedPreferencesEditor.putString(ResourcesEnumerator.DOWNLOAD_PATH.key(), downloadPathEditText.getText().toString());
- sharedPreferencesEditor.commit();
- String[] urlSplitted = urlEditText.getText().toString().split(File.separator);
- File downloadPath = new File(downloadPathEditText.getText().toString());
- if (!downloadPath.exists()) {
- downloadPath.mkdirs();
- }
- Date startDate = new Date();
- String content = downloadFile(urlEditText.getText().toString());
- Date stopDate = new Date();
-
- if (content.length() > 0) {
- String nameFile = writeToFile(content, downloadPathEditText.getText().toString(), urlSplitted[urlSplitted.length - 1]);
- outputListViewElementArrayList.add(0, new OutputListViewElement(urlEditText.getText().toString(), downloadPathEditText.getText().toString(), nameFile, md5(content), content.length()));
- adapter.notifyDataSetChanged();
- } else {
- outputListViewElementArrayList.add(0, new OutputListViewElement(urlEditText.getText().toString(), Constants.DASH, Constants.DASH, Constants.DASH, 0));
- }
- }
- });
- }
-
- private void checkEnabledPermission(String permission) {
- if (ContextCompat.checkSelfPermission(this,
- permission)
- != PackageManager.PERMISSION_GRANTED) {
- if (ActivityCompat.shouldShowRequestPermissionRationale(this,
- permission)) {
- } else {
- ActivityCompat.requestPermissions(this,
- new String[]{permission},
- 1);
- }
- }
- }
-
- private String writeToFile(String content, String path, String nameFile) {
- try {
- nameFile = checkGenerateNameFile(path, nameFile.trim());
- PrintStream out = new PrintStream(new FileOutputStream(path + File.separator + nameFile));
- out.print(content);
- } catch (FileNotFoundException e) {
- Log.v(TAG, e.toString());
- }
- return nameFile;
- }
-
- private String checkGenerateNameFile(String path, String nameFile) {
- String newNameFile = nameFile.trim();
-
- File file;
- int count = 1;
- do {
- file = new File(path + File.separator + newNameFile);
-
-
- if (file.exists()) {
-
- newNameFile = nameFile.trim() + Constants.UNDERSCORE + Integer.toString(count);
- count++;
- }
- } while (file.exists());
- return newNameFile;
- }
-
-}
diff --git a/iGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png b/iGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index cde69bcc..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/iGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 9a078e3e..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png b/iGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index c133a0cb..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/iGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index efc028a6..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/iGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index bfa42f0e..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/iGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 3af2608a..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/iGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 324e72cd..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/iGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 9bec2e62..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/iGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index aee44e13..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/iGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 34947cd6..00000000
--- a/iGetAndroid/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/iGetAndroid/app/src/main/res/values/strings.xml b/iGetAndroid/app/src/main/res/values/strings.xml
deleted file mode 100644
index 6f5516d4..00000000
--- a/iGetAndroid/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<resources>
- <string name="app_name">iGetAndroid</string>
-</resources>
diff --git a/scripts/_shared.sh b/scripts/_shared.sh
new file mode 100644
index 00000000..fe50abd3
--- /dev/null
+++ b/scripts/_shared.sh
@@ -0,0 +1,117 @@
+#!/bin/bash
+
+TOOLS_ROOT=`pwd`
+
+#
+# Warning !!! Android Build !!!
+#
+# Default to API 21 for it is the minimum requirement for 64 bit archs.
+# IF you need to build for min api level 16, you need to modify it to 14 and will not build for 64 bit archs.
+# api level 16 build is better because api level 21 and higher may have problem like
+#
+# https://github.com/openssl/openssl/issues/988
+# http://stackoverflow.com/questions/37122126/whats-the-exact-significance-of-android-ndk-platform-version-compared-to-api-le
+#
+# So if you not need 64 bit arch api level 16 is better
+#
+# But but but cURL could not build by android-20 and earlier :-(
+# So you can build openssl with android-16 then build cURL with android-21
+#
+ANDROID_API=${ANDROID_API:-26}
+ARCHS=("android" "android64-aarch64" "android-armeabi" "android-x86" "android64")
+ABIS=("armeabi" "arm64-v8a" "armeabi-v7a" "x86" "x86_64")
+# ANDROID_API=${ANDROID_API:-21}
+# ARCHS=("android" "android-armeabi" "android64-aarch64" "android-x86" "android64" "android-mips" "android-mips64")
+# ABIS=("armeabi" "armeabi-v7a" "arm64-v8a" "x86" "x86_64" "mips" "mips64")
+#NDK=${ANDROID_NDK}
+
+configure() {
+ ARCH=$1; OUT=$2; CLANG=${3:-""};
+
+ TOOLCHAIN_ROOT=${TOOLCHAIN} #${TOOLS_ROOT}/${OUT}-android-toolchain
+
+ if [ "$ARCH" == "android" ]; then
+ export ARCH_FLAGS="-mthumb"
+ export ARCH_LINK=""
+ export TOOL="arm-linux-androideabi"
+ NDK_FLAGS="--arch=arm"
+ elif [ "$ARCH" == "android-armeabi" ]; then
+ export ARCH_FLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -mfpu=neon"
+ export ARCH_LINK="-march=armv7-a -Wl,--fix-cortex-a8"
+ export TOOL="arm-linux-androideabi"
+ NDK_FLAGS="--arch=arm"
+ elif [ "$ARCH" == "android64-aarch64" ]; then
+ export ARCH_FLAGS=""
+ export ARCH_LINK=""
+ export TOOL="aarch64-linux-android"
+ NDK_FLAGS="--arch=arm64"
+ elif [ "$ARCH" == "android-x86" ]; then
+ export ARCH_FLAGS="-march=i686 -mtune=intel -msse3 -mfpmath=sse -m32"
+ export ARCH_LINK=""
+ export TOOL="i686-linux-android"
+ NDK_FLAGS="--arch=x86"
+ elif [ "$ARCH" == "android64" ]; then
+ export ARCH_FLAGS="-march=x86-64 -msse4.2 -mpopcnt -m64 -mtune=intel"
+ export ARCH_LINK=""
+ export TOOL="x86_64-linux-android"
+ NDK_FLAGS="--arch=x86_64"
+ elif [ "$ARCH" == "android-mips" ]; then
+ export ARCH_FLAGS=""
+ export ARCH_LINK=""
+ export TOOL="mipsel-linux-android"
+ NDK_FLAGS="--arch=mips"
+ elif [ "$ARCH" == "android-mips64" ]; then
+ export ARCH="linux64-mips64"
+ export ARCH_FLAGS=""
+ export ARCH_LINK=""
+ export TOOL="mips64el-linux-android"
+ NDK_FLAGS="--arch=mips64"
+ fi;
+
+ [ -d ${TOOLCHAIN_ROOT} ] || python $NDK/build/tools/make_standalone_toolchain.py \
+ --api ${ANDROID_API} \
+ --stl libc++ \
+ --install-dir=${TOOLCHAIN_ROOT} \
+ $NDK_FLAGS
+
+ export TOOLCHAIN_PATH=${TOOLCHAIN_ROOT}/bin
+ export NDK_TOOLCHAIN_BASENAME=${TOOLCHAIN_PATH}/${TOOL}
+ export SYSROOT=${TOOLCHAIN_ROOT}/sysroot
+ export CROSS_SYSROOT=$SYSROOT
+ #if [ -z "${CLANG}" ]; then
+ # export CC=${NDK_TOOLCHAIN_BASENAME}-gcc
+ # export CXX=${NDK_TOOLCHAIN_BASENAME}-g++
+ #else
+ export CC=${NDK_TOOLCHAIN_BASENAME}-clang
+ export CXX=${NDK_TOOLCHAIN_BASENAME}-clang++
+ #fi;
+ export LINK=${CXX}
+ export LD=${NDK_TOOLCHAIN_BASENAME}-ld
+ export AR=${NDK_TOOLCHAIN_BASENAME}-ar
+ export RANLIB=${NDK_TOOLCHAIN_BASENAME}-ranlib
+ export STRIP=${NDK_TOOLCHAIN_BASENAME}-strip
+ export CPPFLAGS=${CPPFLAGS:-""}
+ export LIBS=${LIBS:-""}
+ export CFLAGS="${ARCH_FLAGS} -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-strict-aliasing -finline-limit=64"
+ export CXXFLAGS="${CFLAGS} -std=c++11 -frtti -fexceptions"
+ export LDFLAGS="${ARCH_LINK}"
+ echo "**********************************************"
+ echo "use ANDROID_API=${ANDROID_API}"
+ echo "use NDK=${NDK}"
+ echo "export ARCH=${ARCH}"
+ echo "export NDK_TOOLCHAIN_BASENAME=${NDK_TOOLCHAIN_BASENAME}"
+ echo "export SYSROOT=${SYSROOT}"
+ echo "export CC=${CC}"
+ echo "export CXX=${CXX}"
+ echo "export LINK=${LINK}"
+ echo "export LD=${LD}"
+ echo "export AR=${AR}"
+ echo "export RANLIB=${RANLIB}"
+ echo "export STRIP=${STRIP}"
+ echo "export CPPFLAGS=${CPPFLAGS}"
+ echo "export CFLAGS=${CFLAGS}"
+ echo "export CXXFLAGS=${CXXFLAGS}"
+ echo "export LDFLAGS=${LDFLAGS}"
+ echo "export LIBS=${LIBS}"
+ echo "**********************************************"
+}
diff --git a/scripts/build-apk.sh b/scripts/build-apk.sh
index d86c176f..bf10c359 100644
--- a/scripts/build-apk.sh
+++ b/scripts/build-apk.sh
@@ -7,36 +7,25 @@ SCRIPT_PATH=$( cd "$(dirname "${BASH_SOURCE}")" ; pwd -P )
APT_PATH=`which apt-get` || true
apt_get=${APT_PATH:-"/usr/local/bin/apt-get"}
-BUILD_TOOLS="p7zip-full build-essential automake libconfig9 libtool lib32stdc++6 lib32z1 unzip default-jdk libx11-xcb-dev libfontconfig1 libgl1-mesa-dev cmake"
+BUILD_TOOLS="build-essential automake libconfig9 libtool lib32stdc++6 lib32z1 unzip default-jdk cmake clang"
# Parameters:
# $1 = Distribution [Trusty / CentOS]
#
+
update_cmake_repo() {
- DISTRIBUTION=$1
+ cat /etc/resolv.conf
+ echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf
+ cat /etc/resolv.conf
- if [ "$DISTRIBUTION" == "trusty" ]; then
- sudo ${apt_get} install -y --allow-unauthenticated software-properties-common
- sudo add-apt-repository --yes ppa:george-edison55/cmake-3.x
- elif [ "$DISTRIBUTION" == "CentOS" ]; then
- sudo cat << EOF > cmake.repo
-[cmake-repo]
-name=Repo for cmake3
-baseurl=http://mirror.ghettoforge.org/distributions/gf/el/7/plus/x86_64/
-enabled=1
-gpgcheck=0
-EOF
- sudo cat << EOF > jsoncpp.repo
-[jsoncp-repo]
-name=Repo for jsoncpp
-baseurl=http://dl.fedoraproject.org/pub/epel/7/x86_64/
-enabled=1
-gpgcheck=0
-EOF
- sudo mv cmake.repo /etc/yum.repos.d/cmake.repo
- sudo mv jsoncpp.repo /etc/yum.repos.d/jsoncpp.repo
- fi
+ CMAKE_INSTALL_SCRIPT_URL="https://cmake.org/files/v3.8/cmake-3.8.0-Linux-x86_64.sh"
+ CMAKE_INSTALL_SCRIPT="/tmp/install_cmake.sh"
+ curl ${CMAKE_INSTALL_SCRIPT_URL} > ${CMAKE_INSTALL_SCRIPT}
+
+ sudo mkdir -p /opt/cmake
+ sudo bash ${CMAKE_INSTALL_SCRIPT} --skip-license --prefix=/opt/cmake
+ export PATH=/opt/cmake/bin:$PATH
}
# Parameters:
@@ -99,13 +88,9 @@ setup() {
DISTRIB_ID=$1
DISTRIB_CODENAME=$2
-
if [ "$DISTRIB_ID" == "Ubuntu" ]; then
- if [ "$DISTRIB_CODENAME" == "trusty" ]; then
- update_cmake_repo $DISTRIB_CODENAME
- fi
-
- update_fdio_repo $DISTRIB_ID $DISTRIB_CODENAME
+ update_cmake_repo $DISTRIB_CODENAME
+ update_fdio_repo $DISTRIB_ID $DISTRIB_CODENAME
sudo ${apt_get} update || true
@@ -164,15 +149,17 @@ fi
pushd $SCRIPT_PATH/..
# Install dependencies and CCNx modules
+export ANDROID_ARCH="arm"
make all
-
-# Compile metis for android app
-make android_metis
-
-# Compile iget
-make android_iget
-
-# Compile viper
make android_viper
+export ANDROID_ARCH="x86_64"
+make all
+export ANDROID_ARCH="arm64"
+make all
+export ANDROID_ARCH="x86"
+make all
+make android_metisforwarder
+make android_httpserver
+make android_iget
popd
diff --git a/scripts/build-boost.sh b/scripts/build-boost.sh
index 38b45db0..81648fe0 100644
--- a/scripts/build-boost.sh
+++ b/scripts/build-boost.sh
@@ -6,7 +6,7 @@ PREFIX=`pwd`/install_boost
if [ $ABI = armeabi-v7a ]; then
./b2 link=static threading=multi threadapi=pthread target-os=android --with-system\
- toolset=gcc-arm architecture=arm address-model=32 \
+ toolset=clang-arm architecture=arm address-model=32 \
abi=aapcs binary-format=elf define=BOOST_MATH_DISABLE_FLOAT128 \
include=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/include \
include=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/${ABI}/include \
@@ -15,7 +15,7 @@ if [ $ABI = armeabi-v7a ]; then
install
elif [ $ABI = x86 ]; then
./b2 link=static threading=multi threadapi=pthread target-os=android --with-system\
- toolset=gcc-x86 architecture=x86 address-model=32 \
+ toolset=clang-x86 architecture=x86 address-model=32 \
abi=aapcs binary-format=elf define=BOOST_MATH_DISABLE_FLOAT128 \
include=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/include \
include=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/${ABI}/include \
@@ -24,7 +24,7 @@ elif [ $ABI = x86 ]; then
install
elif [ $ABI = x86_64 ]; then
./b2 link=static threading=multi threadapi=pthread target-os=android --with-system\
- toolset=gcc-x86_64 architecture=x86_64 address-model=64 \
+ toolset=clang-x86_64 architecture=x86_64 address-model=64 \
abi=aapcs binary-format=elf define=BOOST_MATH_DISABLE_FLOAT128 \
include=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/include \
include=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/${ABI}/include \
@@ -33,7 +33,7 @@ elif [ $ABI = x86_64 ]; then
install
else
./b2 link=static threading=multi threadapi=pthread target-os=android --with-system\
- toolset=gcc-arm64 architecture=arm64-v8a address-model=64 \
+ toolset=clang-arm64 architecture=arm64-v8a address-model=64 \
abi=aapcs binary-format=elf define=BOOST_MATH_DISABLE_FLOAT128 \
include=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/include \
include=$NDK/sources/cxx-stl/gnu-libstdc++/4.9/libs/${ABI}/include \
diff --git a/scripts/build-curl4android.sh b/scripts/build-curl4android.sh
new file mode 100755
index 00000000..5151b25d
--- /dev/null
+++ b/scripts/build-curl4android.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+#
+# Copyright 2016 leenjewel
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -u
+
+source $BASE_DIR/scripts/_shared.sh
+
+cd external
+
+# Setup architectures, library name and other vars + cleanup from previous runs
+TOOLS_ROOT=`pwd`
+LIB_NAME="curl-7.54.1"
+LIB_DEST_DIR=`pwd`/install_curl/libs
+[ -f ${LIB_NAME}.tar.gz ] || wget https://curl.haxx.se/download/${LIB_NAME}.tar.gz
+# Unarchive library, then configure and make for specified architectures
+configure_make() {
+ ARCH=$1; ABI=$2;
+ [ -d "${LIB_NAME}" ] && rm -rf "${LIB_NAME}"
+ tar xfz "${LIB_NAME}.tar.gz"
+ pushd "${LIB_NAME}";
+
+ configure $*
+ # fix me
+ #cp ${TOOLS_ROOT}/../output/android/openssl-${ABI}/lib/libssl.a ${SYSROOT}/usr/lib
+ #cp ${TOOLS_ROOT}/../output/android/openssl-${ABI}/lib/libcrypto.a ${SYSROOT}/usr/lib
+ #cp -r ${TOOLS_ROOT}/../output/android/openssl-${ABI}/include/openssl ${SYSROOT}/usr/include
+
+ mkdir -p ${LIB_DEST_DIR}/${ABI}
+ ./configure --prefix=${LIB_DEST_DIR}/${ABI} \
+ --with-sysroot=${SYSROOT} \
+ --host=${TOOL} \
+ --with-ssl=/Users/angelomantelini/bitbucket_new/android-sdk/usr \
+ --enable-ipv6 \
+ --enable-static \
+ --enable-threaded-resolver \
+ --disable-dict \
+ --disable-gopher \
+ --disable-ldap --disable-ldaps \
+ --disable-manual \
+ --disable-pop3 --disable-smtp --disable-imap \
+ --disable-rtsp \
+ --disable-shared \
+ --disable-smb \
+ --disable-telnet \
+ --disable-verbose
+ PATH=$TOOLCHAIN_PATH:$PATH
+ make clean
+ if make -j4
+ then
+ make install
+
+ OUTPUT_ROOT=${TOOLS_ROOT}/../output/android/curl-${ABI}
+ [ -d ${OUTPUT_ROOT}/include ] || mkdir -p ${OUTPUT_ROOT}/include
+ cp -r ${LIB_DEST_DIR}/${ABI}/include/curl ${OUTPUT_ROOT}/include
+
+ [ -d ${OUTPUT_ROOT}/lib ] || mkdir -p ${OUTPUT_ROOT}/lib
+ cp ${LIB_DEST_DIR}/${ABI}/lib/libcurl.a ${OUTPUT_ROOT}/lib
+ fi;
+ popd;
+}
+
+for ((i=0; i < ${#ARCHS[@]}; i++))
+do
+ echo "${ARCHS[i]}"
+ if [[ $# -eq 0 ]] || [[ "$1" == "${ARCHS[i]}" ]]; then
+ [[ ${ANDROID_API} < 21 ]] && ( echo "${ABIS[i]}" | grep 64 > /dev/null ) && continue;
+ configure_make "${ARCHS[i]}" "${ABIS[i]}"
+ fi
+done
diff --git a/scripts/build-openssl4android.sh b/scripts/build-openssl4android.sh
new file mode 100755
index 00000000..2d5c0905
--- /dev/null
+++ b/scripts/build-openssl4android.sh
@@ -0,0 +1,98 @@
+#!/bin/bash
+#
+# Copyright 2016 leenjewel
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -ux
+
+source $BASE_DIR/scripts/_shared.sh
+
+cd external
+# Setup architectures, library name and other vars + cleanup from previous runs
+LIB_NAME="openssl-1.1.0f"
+LIB_DEST_DIR=`pwd`/install_openssl/libs
+#[ -d ${LIB_DEST_DIR} ] && rm -rf ${LIB_DEST_DIR}
+[ -f "${LIB_NAME}.tar.gz" ] || wget https://www.openssl.org/source/${LIB_NAME}.tar.gz;
+
+# Unarchive library, then configure and make for specified architectures
+configure_make() {
+ ARCH=$1; ABI=$2;
+ #rm -rf "${LIB_NAME}"
+ if [ ! -d ${LIB_NAME} ]; then
+ #exit 1
+ tar xfz "${LIB_NAME}.tar.gz"
+ echo "correct openssl configuration file"
+ if [ $OS = darwin ]; then
+ sed -i '' 's/-mandroid//g' ${LIB_NAME}/Configurations/10-main.conf
+ else
+ sed -i 's/-mandroid//g' ${LIB_NAME}/Configurations/10-main.conf
+ fi
+
+ #exit 1
+ fi
+ pushd "${LIB_NAME}"
+
+ configure $*
+
+ #support openssl-1.0.x
+ if [[ $LIB_NAME != openssl-1.1.* ]]; then
+ if [[ $ARCH == "android-armeabi" ]]; then
+ ARCH="android-armv7"
+ elif [[ $ARCH == "android64" ]]; then
+ ARCH="linux-x86_64 shared no-ssl2 no-ssl3 no-hw "
+ elif [[ "$ARCH" == "android64-aarch64" ]]; then
+ ARCH="android shared no-ssl2 no-ssl3 no-hw "
+ fi
+ fi
+echo "-->${LIB_DEST_DIR}/${ABI}"
+#exit 1
+ ./Configure $ARCH \
+ --prefix=${LIB_DEST_DIR}/${ABI} \
+ --with-zlib-include=$SYSROOT/usr/include \
+ --with-zlib-lib=$SYSROOT/usr/lib \
+ no-hw no-dso \
+ zlib-dynamic \
+ no-asm \
+ no-shared \
+ no-unit-test
+ PATH=$TOOLCHAIN_PATH:$PATH
+
+ make clean
+
+ if make -j4; then
+ # make install
+ make install_sw
+ make install_ssldirs
+
+ OUTPUT_ROOT=${TOOLS_ROOT}/../output/$ABI
+ [ -d ${OUTPUT_ROOT}/include ] || mkdir -p ${OUTPUT_ROOT}/include
+ cp -r ${LIB_DEST_DIR}/${ABI}/include/openssl ${OUTPUT_ROOT}/include
+
+ [ -d ${OUTPUT_ROOT}/lib ] || mkdir -p ${OUTPUT_ROOT}/lib
+ cp ${LIB_DEST_DIR}/${ABI}/lib/libcrypto.a ${OUTPUT_ROOT}/lib
+ cp ${LIB_DEST_DIR}/${ABI}/lib/libssl.a ${OUTPUT_ROOT}/lib
+ fi;
+ popd
+
+}
+
+for ((i=0; i < ${#ARCHS[@]}; i++))
+do
+ if [[ $# -eq 0 ]] || [[ "$1" == "${ARCHS[i]}" ]]; then
+ # Do not build 64 bit arch if ANDROID_API is less than 21 which is
+ # the minimum supported API level for 64 bit.
+ [[ ${ANDROID_API} < 21 ]] && ( echo "${ABIS[i]}" | grep 64 > /dev/null ) && continue;
+ configure_make "${ARCHS[i]}" "${ABIS[i]}"
+ fi
+done
diff --git a/scripts/compile_androidviper.sh b/scripts/compile_androidviper.sh
index e3f6b0b7..c5fbd83a 100755
--- a/scripts/compile_androidviper.sh
+++ b/scripts/compile_androidviper.sh
@@ -18,6 +18,7 @@
#!/bin/bash
set -e
+ANDROID_ARCH=armv7
export ANDROID_HOME=${SDK}
export ANDROID_NDK_HOST=${OS}-${ARCH}
export ANDROID_NDK_PLATFORM=android-23
@@ -30,14 +31,15 @@ export ANDROID_API_VERSION=android-23
export PATH=$PATH:${ANDROID_HOME}/tools:${JAVA_HOME}/bin
echo $QT_HOME
cd ${DISTILLERY_ROOT_DIR}
+export DISTILLARY_INSTALLATION_PATH=${DISTILLERY_ROOT_DIR}/usr_armv7-a
mkdir -p ${DISTILLERY_BUILD_DIR}/viper
cd ${DISTILLERY_BUILD_DIR}/viper
-${QT_HOME}/5.7/android_${ANDROID_ARCH}/bin/qmake -r -spec android-g++ ${DISTILLERY_ROOT_DIR}/src/viper/viper.pro "TRANSPORT_LIBRARY = ICNET"
+${QT_HOME}/5.8/android_${ANDROID_ARCH}/bin/qmake -r -spec android-g++ ${DISTILLERY_ROOT_DIR}/src/viper/viper.pro
make
make install INSTALL_ROOT=viper-${ANDROID_ARCH}
if [ "$1" = "DEBUG" ]; then
- ${QT_HOME}/5.7/android_${ANDROID_ARCH}/bin/androiddeployqt --output viper-${ANDROID_ARCH} --verbose --input android-libviper.so-deployment-settings.json --gradle --android-platform android-23 --stacktrace --debug --target android-23 --debug --sign ${DISTILLERY_ROOT_DIR}/src/viper/android/viper.keystore viper --storepass icn_viper
+ ${QT_HOME}/5.8/android_${ANDROID_ARCH}/bin/androiddeployqt --output viper-${ANDROID_ARCH} --verbose --input android-libviper.so-deployment-settings.json --gradle --android-platform android-23 --stacktrace --debug --target android-23 --debug --sign ${DISTILLERY_ROOT_DIR}/src/viper/android/viper.keystore viper --storepass icn_viper
else
- ${QT_HOME}/5.7/android_${ANDROID_ARCH}/bin/androiddeployqt --output viper-${ANDROID_ARCH} --verbose --input android-libviper.so-deployment-settings.json --gradle --android-platform android-23 --stacktrace --debug --target android-23 --release --sign ${DISTILLERY_ROOT_DIR}/src/viper/android/viper.keystore viper --storepass icn_viper
+ ${QT_HOME}/5.8/android_${ANDROID_ARCH}/bin/androiddeployqt --output viper-${ANDROID_ARCH} --verbose --input android-libviper.so-deployment-settings.json --gradle --android-platform android-23 --stacktrace --debug --target android-23 --release --sign ${DISTILLERY_ROOT_DIR}/src/viper/android/viper.keystore viper --storepass icn_viper
fi
-cd .. \ No newline at end of file
+cd ..
diff --git a/scripts/compile_httpserver.sh b/scripts/compile_httpserver.sh
new file mode 100755
index 00000000..ecf5f2f6
--- /dev/null
+++ b/scripts/compile_httpserver.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+set -e
+cd HttpServer
+if [ ! -f local.properties ]; then
+ echo sdk.dir=${SDK} > local.properties
+ echo ndk.dir=${NDK} >> local.properties
+fi
+
+if [ "$1" = "DEBUG" ]; then
+ ./gradlew assembleDebug
+else
+ ./gradlew assembleRelease
+fi
+
+echo "Apks are inside HttpServer/app/build/outputs/apk"
+cd .. \ No newline at end of file
diff --git a/scripts/compile_iget.sh b/scripts/compile_iget.sh
index 984dae07..ddc7cafc 100755
--- a/scripts/compile_iget.sh
+++ b/scripts/compile_iget.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-
-cd iGetAndroid
+set -e
+cd IGetAndroid
if [ ! -f local.properties ]; then
echo sdk.dir=${SDK} > local.properties
echo ndk.dir=${NDK} >> local.properties
@@ -12,5 +12,5 @@ else
./gradlew assembleRelease
fi
-echo "Apks are inside iGetAndroid/app/build/outputs/apk"
-cd ..
+echo "Apks are inside IGetAndroid/app/build/outputs/apk"
+cd .. \ No newline at end of file
diff --git a/scripts/compile_metisforwarder.sh b/scripts/compile_metisforwarder.sh
index 7632149c..30dd8287 100755
--- a/scripts/compile_metisforwarder.sh
+++ b/scripts/compile_metisforwarder.sh
@@ -1,6 +1,6 @@
#!/bin/bash
-
-cd MetisForwarder
+set -e
+cd MetisForwarderAndroid
if [ ! -f local.properties ]; then
echo sdk.dir=${SDK} > local.properties
echo ndk.dir=${NDK} >> local.properties
@@ -12,5 +12,5 @@ else
./gradlew assembleRelease
fi
-echo "Apks are inside MetisForwarder/app/build/outputs/apk"
-cd ..
+echo "Apks are inside MetisForwarderAndroid/app/build/outputs/apk"
+cd .. \ No newline at end of file
diff --git a/scripts/init.sh b/scripts/init.sh
index 26e8394b..5bd4deca 100755
--- a/scripts/init.sh
+++ b/scripts/init.sh
@@ -15,14 +15,12 @@
#!/bin/bash
-set -e
-
+set -ex
ABI=$1
-
INSTALLATION_DIR=$2
OS=`echo $OS | tr '[:upper:]' '[:lower:]'`
-BASE_DIR=`pwd`
-echo "SDK_PATH ${SDK}"
+export BASE_DIR=`pwd`
+
if [ -z ${SDK_PATH} ]; then
mkdir -p sdk
cd sdk
@@ -31,17 +29,19 @@ if [ -z ${SDK_PATH} ]; then
if [ ! -f android-sdk_r24.4.1-macosx.zip ]; then
wget http://dl.google.com/android/android-sdk_r24.4.1-macosx.zip
fi
+
+ echo "unzip android-sdk"
unzip -q android-sdk_r24.4.1-macosx.zip
mv android-sdk-macosx sdk
else
- if [ ! -f android-sdk_r24.4.1-linux.zip ]; then
+ if [ ! -f android-sdk_r24.4.1-linux.tgz ]; then
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
fi
+ echo "untar android-sdk"
tar zxf android-sdk_r24.4.1-linux.tgz
mv android-sdk-linux sdk
fi
mkdir -p sdk/licenses
- mkdir -p sdk/licenses
echo "\nd56f5187479451eabf01fb78af6dfcb131a6481e" > "sdk/licenses/android-sdk-license"
echo "\n84831b9409646a918e30573bab4c9c91346d8abd" > "sdk/licenses/android-sdk-preview-license"
echo "y" | ./sdk/tools/android update sdk --filter platform-tools,build-tools-23.0.2,android-23,extra-android-m2repository,extra-google-m2repository --no-ui --all --force
@@ -55,39 +55,38 @@ if [ -z ${NDK_PATH} ]; then
mkdir -p sdk
cd sdk
if [ ! -d ndk-bundle ]; then
- if [ ! -f android-ndk-r14b-${OS}-${ARCH}.zip ]; then
- wget https://dl.google.com/android/repository/android-ndk-r14b-${OS}-${ARCH}.zip
+ if [ ! -f android-ndk-r15c-${OS}-${ARCH}.zip ]; then
+ wget https://dl.google.com/android/repository/android-ndk-r15c-${OS}-${ARCH}.zip
fi
- unzip -q android-ndk-r14b-${OS}-${ARCH}.zip
- mv android-ndk-r14b ndk-bundle
+
+ echo "unzip android-ndk"
+ unzip -q android-ndk-r15c-${OS}-${ARCH}.zip
+ mv android-ndk-r15c ndk-bundle
+ cp $BASE_DIR/external/glob.h ndk-bundle/sysroot/usr/include/
fi
cd ..
fi
-if [ -z ${CMAKE_PATH} ]; then
- mkdir -p sdk
- cd sdk
- if [ ! -d cmake ]; then
- if [ ! -f cmake-3.6.3155560-${OS}-${ARCH}.zip ]; then
- wget https://dl.google.com/android/repository/cmake-3.6.3155560-${OS}-${ARCH}.zip
- fi
- unzip -q cmake-3.6.3155560-${OS}-${ARCH}.zip -d cmake
- fi
- cd ..
+export TOOLCHAIN=$BASE_DIR/sdk/toolchain_$ABI
+
+if [ ! -d $TOOLCHAIN ];then
+ echo "creating toolchain"
+ $NDK/build/tools/make_standalone_toolchain.py --arch $ABI --api 26 --install-dir $TOOLCHAIN
fi
mkdir -p src
cd src
-if [ ! -d ccnxlibs ]; then
- echo "ccnxlibs not found"
- git clone -b ccnxlibs/master https://gerrit.fd.io/r/cicn ccnxlibs
-fi
if [ ! -d cframework ]; then
echo "cframework not found"
git clone -b cframework/master https://gerrit.fd.io/r/cicn cframework
fi
+if [ ! -d ccnxlibs ]; then
+ echo "ccnxlibs not found"
+ git clone -b ccnxlibs/master https://gerrit.fd.io/r/cicn ccnxlibs
+fi
+
if [ ! -d sb-forwarder ]; then
echo "sb-forwarder not found"
git clone -b sb-forwarder/master https://gerrit.fd.io/r/cicn sb-forwarder
@@ -101,123 +100,139 @@ if [ ! -d viper ]; then
git clone -b viper/master https://gerrit.fd.io/r/cicn viper
fi
+if [ ! -d http-server ]; then
+ echo "http-server not found"
+ git clone -b http-server/master https://gerrit.fd.io/r/cicn http-server
+fi
+
+if [ ! -d libxml2 ]; then
+ echo "libxml2 not found"
+ git clone https://github.com/GNOME/libxml2.git
+ cp $BASE_DIR/external/libxml2/CMakeLists.txt libxml2
+ cp $BASE_DIR/external/libxml2/xmlversion.h libxml2/include/libxml
+ cp $BASE_DIR/external/libxml2/config.h libxml2
+ if [ $OS = darwin ]; then
+ sed -i '' '1s/^/#include <errno.h>/' libxml2/triodef.h
+ else
+ sed -i '1s/^/#include <errno.h>/' libxml2/triodef.h
+ fi
+fi
+
+if [ ! -d libevent ]; then
+ echo "libevent not found"
+ git clone https://github.com/libevent/libevent.git
+ cp $BASE_DIR/external/libevent/AddEventLibrary.cmake libevent/cmake/
+fi
+
+if [ ! -d jsoncpp ]; then
+ echo "jsoncpp not found"
+ git clone https://github.com/open-source-parsers/jsoncpp.git
+ cp $BASE_DIR/external/jsoncpp/CMakeLists.txt jsoncpp/
+fi
+
cd ../
-cd external
+echo ${INSTALLATION_DIR}
mkdir -p ${INSTALLATION_DIR}
mkdir -p ${INSTALLATION_DIR}/include
mkdir -p ${INSTALLATION_DIR}/lib
+
if [ ! -d ${INSTALLATION_DIR}/include/openssl ]; then
echo "OpenSSL Libs not found!"
- if [ ! -d openssl-1.0.2k ]; then
- echo "OpenSSL Directory not found"
- if [ ! -f openssl-1.0.2k.tar.gz ]; then
- echo "OpenSSL Archive not found"
- wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
- fi
- tar -xzf openssl-1.0.2k.tar.gz
+ if [ "$ABI" = "arm" ]; then
+ bash scripts/build-openssl4android.sh android-armeabi
+ cp external/install_openssl/libs/armeabi-v7a/lib/*.a $INSTALLATION_DIR/lib/
+ cp -rf external/install_openssl/libs/armeabi-v7a/include/openssl $INSTALLATION_DIR/include/
+ elif [ "$ABI" = "arm64" ]; then
+ bash scripts/build-openssl4android.sh android64-aarch64
+ cp external/install_openssl/libs/arm64-v8a/lib/*.a $INSTALLATION_DIR/lib/
+ cp -rf external/install_openssl/libs/arm64-v8a/include/openssl $INSTALLATION_DIR/include/
+ elif [ "$ABI" = "x86" ]; then
+ bash scripts/build-openssl4android.sh android-x86
+ cp external/install_openssl/libs/x86/lib/*.a $INSTALLATION_DIR/lib/
+ cp -rf external/install_openssl/libs/x86/include/openssl $INSTALLATION_DIR/include/
+ else
+ bash scripts/build-openssl4android.sh android64
+ cp external/install_openssl/libs/x86_64/lib/*.a $INSTALLATION_DIR/lib/
+ cp -rf external/install_openssl/libs/x86_64/include/openssl $INSTALLATION_DIR/include/
fi
- echo "Compile OpenSSL"
- if [ ! -d ${NDK}/sources/openssl/1.0.2 ]; then
- export ANDROID_NDK_ROOT=$NDK
- bash ${BASE_DIR}/scripts/tools/build-target-openssl.sh --abis=$ABI openssl-1.0.2k --ndk-dir=${NDK}
+fi
+
+
+if [ ! -d ${INSTALLATION_DIR}/include/curl ]; then
+ echo "Curl Libs not found!"
+ if [ "$ABI" = "arm" ]; then
+ bash scripts/build-curl4android.sh android-armeabi
+ cp external/install_curl/libs/armeabi-v7a/lib/*.a $INSTALLATION_DIR/lib/
+ cp -rf external/install_curl/libs/armeabi-v7a/include/curl $INSTALLATION_DIR/include/
+ elif [ "$ABI" = "arm64" ]; then
+ bash scripts/build-curl4android.sh android64-aarch64
+ cp external/install_curl/libs/arm64-v8a/lib/*.a $INSTALLATION_DIR/lib/
+ cp -rf external/install_curl/libs/arm64-v8a/include/curl $INSTALLATION_DIR/include/
+ elif [ "$ABI" = "x86" ]; then
+ bash scripts/build-curl4android.sh android-x86
+ cp external/install_curl/libs/x86/lib/*.a $INSTALLATION_DIR/lib/
+ cp -rf external/install_curl/libs/x86/include/curl $INSTALLATION_DIR/include/
+ else
+ bash scripts/build-curl4android.sh android64
+ cp external/install_curl/libs/x86_64/lib/*.a $INSTALLATION_DIR/lib/
+ cp -rf external/install_curl/libs/x86_64/include/curl $INSTALLATION_DIR/include/
fi
- echo "Copy libssl and libcrypto in workspace"
- cp -rf ${NDK}/sources/openssl/1.0.2k/include/* ${INSTALLATION_DIR}/include/
- cp -f ${INSTALLATION_DIR}/include/openssl/opensslconf_armeabi_v7a.h ${INSTALLATION_DIR}/include/openssl/opensslconf_armeabi.h
- cp -f ${NDK}/sources/openssl/1.0.2k/libs/${ABI}/*.a ${INSTALLATION_DIR}/lib/
- rm -rf ${NDK}/sources/openssl/1.0.2k
+
fi
+cd external
if [ ! -d ${INSTALLATION_DIR}/include/boost ]; then
echo "Boost Libs not found!"
- if [ ! -d boost_1_63_0 ]; then
+ if [ ! -d boost_1_66_0 ]; then
echo "Boost Directory not found"
- if [ ! -f boost_1_63_0.tar.gz ]; then
+ if [ ! -f boost_1_66_0.tar.gz ]; then
echo "Boost Archive not found"
- wget https://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.gz
+ wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.gz
fi
- tar -xzf boost_1_63_0.tar.gz
+ tar -xzf boost_1_66_0.tar.gz
fi
- cd boost_1_63_0
+ cd boost_1_66_0
+ rm -rf install_boost
if [ ! -d install_boost ]; then
echo "Compile Boost"
- ./bootstrap.sh
- echo "import option ;" > project-config.jam
- if [ $ABI = armeabi-v7a ]; then
- echo "using gcc : arm : arm-linux-androideabi-g++ ;" >> project-config.jam
- export PATH=$PATH:${NDK}/toolchains/arm-linux-androideabi-4.9/prebuilt/${OS}-${ARCH}/bin
- elif [ $ABI = x86 ]; then
- echo "using gcc : x86 : i686-linux-android-g++ ;" >> project-config.jam
- export PATH=$PATH:${NDK}/toolchains/x86-4.9/prebuilt/${OS}-${ARCH}/bin
- elif [ $ABI = x86_64 ]; then
- echo "using gcc : x86_64 : x86_64-linux-android-g++ ;" >> project-config.jam
- export PATH=$PATH:${NDK}/toolchains/x86_64-4.9/prebuilt/${OS}-${ARCH}/bin
+
+ rm -rf stage/lib
+ rm -f bjam
+ rm -f index.htmproject-config.jam.1
+ rm -f project-config.jam.2
+ rm -f bootstrap.log
+ rm -f b2
+ rm -rf bin.v2/
+ rm -f project-config.jam
+ PREFIX=`pwd`/install_boost
+ ./bootstrap.sh --with-toolset=clang
+
+ if [ "$ABI" = "arm" ]; then
+ PATH=$TOOLCHAIN/bin:$PATH ./b2 toolset=clang link=static threading=multi threadapi=pthread target-os=android --with-system --with-filesystem --with-regex abi=aapcs binary-format=elf define=BOOST_MATH_DISABLE_FLOAT128 --prefix=$PREFIX install
+ cp -rf $PREFIX/include/boost $INSTALLATION_DIR/include
+ PATH=$TOOLCHAIN/bin:$PATH arm-linux-androideabi-ranlib $PREFIX/lib/*
+ cp -rf $PREFIX/lib/* $INSTALLATION_DIR/lib
+ elif [ "$ABI" = "arm64" ]; then
+ PATH=$TOOLCHAIN/bin:$PATH ./b2 -d+2 toolset=clang-arm64 link=static threading=multi threadapi=pthread target-os=android --with-system --with-filesystem --with-regex binary-format=elf define=BOOST_MATH_DISABLE_FLOAT128 --prefix=$PREFIX install
+ cp -rf $PREFIX/include/boost $INSTALLATION_DIR/include
+ PATH=$TOOLCHAIN/bin:$PATH aarch64-linux-android-ranlib $PREFIX/lib/*
+ cp -rf $PREFIX/lib/* $INSTALLATION_DIR/lib
+ elif [ "$ABI" = "x86" ]; then
+ PATH=$TOOLCHAIN/bin:$PATH ./b2 -d+2 toolset=clang-x86 link=static threading=multi threadapi=pthread target-os=android --with-system --with-filesystem --with-regex binary-format=elf define=BOOST_MATH_DISABLE_FLOAT128 --prefix=$PREFIX install
+ cp -rf $PREFIX/include/boost $INSTALLATION_DIR/include
+ PATH=$TOOLCHAIN/bin:$PATH i686-linux-android-ranlib $PREFIX/lib/*
+ cp -rf $PREFIX/lib/* $INSTALLATION_DIR/lib
else
- echo "using gcc : arm64-v8a : aarch64-linux-android-g++ ;" >> project-config.jam
- export PATH=$PATH:${NDK}/toolchains/aarch64-4.9/prebuilt/${OS}-${ARCH}/bin
+ PATH=$TOOLCHAIN/bin:$PATH ./b2 toolset=clang-x86_64 link=static threading=multi threadapi=pthread target-os=android --with-system --with-filesystem --with-regex abi=aapcs binary-format=elf define=BOOST_MATH_DISABLE_FLOAT128 --prefix=$PREFIX install
+ cp -rf $PREFIX/include/boost $INSTALLATION_DIR/include
+ PATH=$TOOLCHAIN/bin:$PATH x86_64-linux-android-ranlib $PREFIX/lib/*
+ cp -rf $PREFIX/lib/* $INSTALLATION_DIR/lib
fi
- echo "option.set keep-going : false ;" >> project-config.jam
- echo "before compile"
- bash ${BASE_DIR}/scripts/build-boost.sh
- echo "after compile"
- fi
- echo "Copy boost libs in workspace"
- cp -rf install_boost/include/* ${INSTALLATION_DIR}/include/
- cp -rf install_boost/lib/* ${INSTALLATION_DIR}/lib/
- cd ..
-fi
-
-echo "Create libevent"
-
-if [ ! -d ${INSTALLATION_DIR}/include/event2 ]; then
- if [ ! -d libevent ]; then
- git clone -b nougat-release https://android.googlesource.com/platform/external/libevent
- fi
- cd libevent
- cp -rf ../libevent_files/* .
- ${NDK}/ndk-build NDK_APPLICATION_MK=`pwd`/Application.mk
- echo "Copy libevent in workspace"
- cp -rf include/event2 ${INSTALLATION_DIR}/include/
- cp -rf android/event2/* ${INSTALLATION_DIR}/include/event2/
- cp -f obj/local/${ABI}/libevent.a ${INSTALLATION_DIR}/lib/
- cd ..
-fi
-
-echo "Create libdash dependencies"
-
-if [ ! -d ${INSTALLATION_DIR}/include/curl ]; then
- cd libcurl_android
- ${NDK}/ndk-build
- echo "Copy libcurl in workspace"
- cp -rf jni/libcurl/include/curl ${INSTALLATION_DIR}/include/
- cp -f obj/local/${ABI}/libcurl*.a ${INSTALLATION_DIR}/lib/
- cd ..
-fi
-
-if [ ! -d ${INSTALLATION_DIR}/include/libxml ]; then
- if [ ! -d libxml2 ]; then
- git clone git://git.gnome.org/libxml2
+
+
fi
- cd libxml2
- mkdir -p ../libxml2_android/jni/libxml2/include/libxml
- find . -maxdepth 1 -name "*.[c|h]" -exec cp {} ../libxml2_android/jni/libxml2/ \;
- cp -rf include/libxml ../libxml2_android/jni/libxml2/include/
- cp -rf include/win32config.h ../libxml2_android/jni/libxml2/include/
- cp -rf include/wsockcompat.h ../libxml2_android/jni/libxml2/include/
- cp -rf ../libxml2_files/config.h ../libxml2_android/jni/
- cp -rf ../libxml2_files/xmlversion.h ../libxml2_android/jni/libxml2/include/libxml
- cd ..
- echo `pwd`
- cd libxml2_android
- ${NDK}/ndk-build
- echo "Copy libxml2 in workspace"
- cp -rf jni/libxml2/include/* ${INSTALLATION_DIR}/include/
- cp -f obj/local/${ABI}/libxml2.a ${INSTALLATION_DIR}/lib/
- cd ..
-fi
-
-cd ..
+fi \ No newline at end of file
diff --git a/scripts/init_qt.sh b/scripts/init_qt.sh
index c082b6bd..fec0d5d5 100755
--- a/scripts/init_qt.sh
+++ b/scripts/init_qt.sh
@@ -15,77 +15,80 @@
#!/bin/bash
-set -e
+set -ex
-if [ $ARCH = "x86" ]; then
- echo "Qt is not available for x86 systems"
- exit 1
-fi
+if [ "$ANDROID_ARCH" = "arm" ]; then
+ TOOLCHAIN=`pwd`/sdk/toolchain
+ BASE_PATH=`pwd`
+ mkdir -p qt
+ cd qt
+ export QT_HOME=`pwd`/Qt
+ if [ ! -d ${QT_HOME} ]; then
+ if [ $OS = "darwin" ]; then
+ if [ ! -f qt-opensource-mac-x64-android-ios-5.8.0.dmg ]; then
+ wget http://download.qt.io/archive/qt/5.8/5.8.0/qt-opensource-mac-x64-android-ios-5.8.0.dmg
+ fi
+ VOLUME=$(hdiutil attach qt-opensource-mac-x64-android-ios-5.8.0.dmg | tail -1 | awk '{print $3}')
+ $VOLUME/qt-opensource-mac-x64-android-ios-5.8.0.app/Contents/MacOS/qt-opensource-mac-x64-android-ios-5.8.0 --script ../scripts/install_script.sh -platform minimal --verbose
+ diskutil unmount $VOLUME
+ else
+ if [ ! -f qt-opensource-linux-x64-android-5.8.0.run ]; then
+ wget http://download.qt.io/archive/qt/5.8/5.8.0/qt-opensource-linux-x64-android-5.8.0.run
+ fi
+ chmod +x qt-opensource-linux-x64-android-5.8.0.run
+ ./qt-opensource-linux-x64-android-5.8.0.run --script ../scripts/install_script.sh -platform minimal --verbose
+ fi
+ fi
-mkdir -p qt
-cd qt
-export QT_HOME=`pwd`/Qt
-if [ ! -d ${QT_HOME} ]; then
- if [ $OS = "darwin" ]; then
- if [ ! -f qt-opensource-mac-x64-android-5.7.1.dmg ]; then
- wget http://download.qt.io/archive/qt/5.7/5.7.1/qt-opensource-mac-x64-android-5.7.1.dmg
- fi
-
- VOLUME=$(hdiutil attach qt-opensource-mac-x64-android-5.7.1.dmg | tail -1 | awk '{print $3}')
- $VOLUME/qt-opensource-mac-x64-android-5.7.1.app/Contents/MacOS/qt-opensource-mac-x64-android-5.7.1 --script ../scripts/install_script.sh -platform minimal --verbose
- diskutil unmount $VOLUME
- else
- if [ ! -f qt-opensource-linux-x64-android-5.7.1.run ]; then
- wget http://download.qt.io/archive/qt/5.7/5.7.1/qt-opensource-linux-x64-android-5.7.1.run
- fi
- chmod +x qt-opensource-linux-x64-android-5.7.1.run
- ./qt-opensource-linux-x64-android-5.7.1.run --script ../scripts/install_script.sh -platform minimal --verbose
+ if [ ! -d ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/boost ]; then
+ ln -s $DISTILLERY_INSTALL_DIR/include/ccnx ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/
+ ln -s $DISTILLERY_INSTALL_DIR/include/boost ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/
+ ln -s $DISTILLERY_INSTALL_DIR/include/parc ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/
+ ln -s $DISTILLERY_INSTALL_DIR/include/LongBow ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/
+ ln -s $DISTILLERY_INSTALL_DIR/include/icnet ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/
+ ln -s $DISTILLERY_INSTALL_DIR/include/dash ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/
fi
-fi
-cp -f $DISTILLERY_INSTALL_DIR/lib/libdash.so ${QT_HOME}/5.7/android_${ANDROID_ARCH}/lib/
+ echo "clone and compile ffmpeg"
+ if [ ! -f $DISTILLERY_INSTALL_DIR/lib/libavcodec.so -o ! -f $DISTILLERY_INSTALL_DIR/libavfilter.so -o ! -f $DISTILLERY_INSTALL_DIR/lib/libavformat.so -o ! -f $DISTILLERY_INSTALL_DIR/lib/libavutil.so -o ! -f $DISTILLERY_INSTALL_DIR/lib/libswresample.so -o ! -f $DISTILLERY_INSTALL_DIR/lib/libswscale.so ]; then
-if [ ! -d ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/boost ]; then
- ln -s $DISTILLERY_INSTALL_DIR/include/ccnx ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/
- ln -s $DISTILLERY_INSTALL_DIR/include/boost ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/
- ln -s $DISTILLERY_INSTALL_DIR/include/parc ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/
- ln -s $DISTILLERY_INSTALL_DIR/include/LongBow ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/
- ln -s $DISTILLERY_INSTALL_DIR/include/icnet ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/
- ln -s $DISTILLERY_INSTALL_DIR/include/dash ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/
-fi
+ if [ ! -d ffmpeg ]; then
+ git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
+ fi
+ fi
-if [ ! -d ffmpeg ]; then
- git clone -b release/3.3 https://git.ffmpeg.org/ffmpeg.git ffmpeg
-fi
-export FFSRC=`pwd`/ffmpeg
-export ANDROID_NDK=${NDK}
-export ANDROID_HOME=${SDK}
-export ANDROID_NDK_HOST=${OS}-${ARCH}
-export ANDROID_NDK_PLATFORM=${ANDROID_PLATFORM}
-export ANDROID_NDK_ROOT=${NDK}
-export ANDROID_NDK_TOOLCHAIN_PREFIX=arm-linux-androideabi
-export ANDROID_NDK_TOOLCHAIN_VERSION=4.9
-export ANDROID_NDK_TOOLS_PREFIX=arm-linux-androideabi
-export ANDROID_SDK_ROOT=${SDK}
-export ANDROID_API_VERSION=${ANDROID_PLATFORM}
-export PATH=$PATH:${ANDROID_HOME}/tools:${JAVA_HOME}/bin
-if [ ! -d ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/QtAV ]; then
- if [ ! -d QtAv ]; then
- git clone https://github.com/wang-bin/QtAV.git
- fi
- cd QtAV
- git submodule update --init
- cd tools/build_ffmpeg
- ./avbuild.sh android armv7
- cp sdk-android-gcc/lib/armeabi-v7a/lib* ${QT_HOME}/5.7/android_${ANDROID_ARCH}/lib/
- cp -r sdk-android-gcc/include/* ${QT_HOME}/5.7/android_${ANDROID_ARCH}/include/
- cd ../..
- mkdir -p ${DISTILLERY_BUILD_DIR}/qtav
- cd ${DISTILLERY_BUILD_DIR}/qtav
- ${QT_HOME}/5.7/android_${ANDROID_ARCH}/bin/qmake -r -spec android-g++ ${DISTILLERY_ROOT_DIR}/qt/QtAV/QtAV.pro
- make
- make install INSTALL_ROOT=android
- sh sdk_install.sh
-fi
-cd ${DISTILLERY_ROOT_DIR}
+ export FFSRC=`pwd`/ffmpeg
+ export ANDROID_NDK=${NDK}
+ export ANDROID_HOME=${SDK}
+ export ANDROID_NDK_HOST=${OS}-${ARCH}
+ export ANDROID_NDK_PLATFORM=android-26
+ export ANDROID_NDK_ROOT=${NDK}
+ export ANDROID_NDK_TOOLCHAIN_PREFIX=arm-linux-androideabi
+ export ANDROID_NDK_TOOLCHAIN_VERSION=4.9
+ export ANDROID_NDK_TOOLS_PREFIX=arm-linux-androideabi
+ export ANDROID_SDK_ROOT=${SDK}
+ export ANDROID_API_VERSION=${ANDROID_PLATFORM}
+ export PATH=$PATH:${ANDROID_HOME}/tools:${JAVA_HOME}/bin
+ if [ ! -d ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/QtAV ]; then
+ if [ ! -d QtAV ]; then
+ git clone https://github.com/wang-bin/QtAV.git
+ fi
+ cd QtAV
+ echo "INCLUDEPATH += ${DISTILLERY_INSTALL_DIR}/include" >> .qmake.conf
+ echo "LIBS += -L${DISTILLERY_INSTALL_DIR}/lib" >> .qmake.conf
+ git submodule update --init
+ cd tools/build_ffmpeg
+ ./avbuild.sh android armv7
+ cp sdk-android-gcc/lib/armeabi-v7a/lib* ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/lib/
+ cp -r sdk-android-gcc/include/* ${QT_HOME}/5.8/android_${ANDROID_ARCH}v7/include/
+ cd ../..
+ mkdir -p ${DISTILLERY_BUILD_DIR}/qtav
+ cd ${DISTILLERY_BUILD_DIR}/qtav
+ ${QT_HOME}/5.8/android_armv7/bin/qmake -r -spec android-g++ $BASE_PATH/qt/QtAV/QtAV.pro
+ make
+ make install INSTALL_ROOT=android
+ sh sdk_install.sh
+ fi
+ cd ${DISTILLERY_ROOT_DIR}
+fi \ No newline at end of file
diff --git a/scripts/update.sh b/scripts/update.sh
index 66211203..e647b3fc 100755
--- a/scripts/update.sh
+++ b/scripts/update.sh
@@ -16,19 +16,18 @@
#!/bin/bash
set -e
-#git pull
+git pull
cd src/ccnxlibs
git pull
cd ../..
cd src/cframework
git pull
cd ../..
-cd src/sb-forwarder
-git pull
-cd ../..
cd src/libicnet
git pull
cd ../..
cd src/viper
git pull
cd ../..
+cd src/httpserver
+git pull